1. 程式人生 > >VC程式提升管理員許可權

VC程式提升管理員許可權

程式的許可權不夠,應用管理員許可權開啟程式執行方可。
如何使vc程式執行時請求管理員許可權?

如果是2005或者2008 就簡單了,直接專案右鍵---屬性---聯結器---清單檔案---uac執行級別 選擇requireAdministrator 重新編譯 這樣你的程式直接執行就擁有管理員許可權了。 

/****************************************************************
本類功能:提升本程式程序優先順序和許可權
編寫作者:Coderui
編寫日期:2008年03月24日
聯絡郵箱:[email protected] 
作者部落格:

http://hi.baidu.com/coderui 
檔名稱:EnablePriv.h
****************************************************************/

class CEnablePriv
{
public:            //公有(對外開放的介面)

//
//設定當前程序優先順序為最高(實時)
//
BOOL SetRealTimePriority();

//
//提升當前程序許可權函式("SeShutdownPrivilege"關機許可權)
//
BOOL EnableShutdownPriv();

//
//提升當前程序許可權函式("SeDebugPrivilege"讀、寫控制權限)
//
BOOL EnableDebugPriv();

//
//提升當前程序許可權函式("SeBackupPrivilege"登錄檔備份許可權)
//
BOOL EnableBackupPriv();

//
//提升當前程序許可權函式("SeRestorePrivilege"恢復資料許可權)
//
BOOL EnableRestorePriv();

private:           //私有(內部使用的介面)

};
------------------------------------------------------------------------------------------------------------------------------
/****************************************************************
本類功能:提升本程式程序優先順序和許可權
編寫作者:Coderui
編寫日期:2008年03月24日
聯絡郵箱:

[email protected] 
作者部落格:http://hi.baidu.com/coderui 
檔名稱:EnablePriv.cpp
****************************************************************/

#include "stdafx.h"           //需要引用MFC中的這個標頭檔案
#include "EnablePriv.h"          //呼叫時需要引用的聯接標頭檔案

//巨集的功能介紹:
//-------------------------------------------------------------
//#define            SE_BACKUP_NAME               TEXT("SeBackupPrivilege")     //備份資料許可權
//#define            SE_RESTORE_NAME              TEXT("SeRestorePrivilege")    //恢復資料許可權
//#define            SE_SHUTDOWN_NAME             TEXT("SeShutdownPrivilege")   //關機許可權
//#define            SE_DEBUG_NAME                TEXT("SeDebugPrivilege")      //讀、寫控制權限
//-------------------------------------------------------------

//巨集的功能介紹:
//-------------------------------------------------------------
//ABOVE_NORMAL_PRIORITY_CLASS(0x00008000)   高於標準
//BELOW_NORMAL_PRIORITY_CLASS(0x00004000)   低於標準
//HIGH_PRIORITY_CLASS(0x00000080)           高
//IDLE_PRIORITY_CLASS(0x00000040)           低
//NORMAL_PRIORITY_CLASS(0x00000020)         標準
//REALTIME_PRIORITY_CLASS(0x00000100)       實時
//-------------------------------------------------------------

//
//設定當前程序優先順序為最高(實時)
//
//返回值:“false”是失敗,“true”是成功。
BOOL CEnablePriv::SetRealTimePriority()
{
if( ! SetPriorityClass( GetCurrentProcess(), REALTIME_PRIORITY_CLASS ))
{
   return false;
}

return true;
}

//
//提升當前程序許可權函式("SeShutdownPrivilege"關機許可權)
//
//返回值:“false”是失敗,“true”是成功。
BOOL CEnablePriv::EnableShutdownPriv()
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp;

if ( ! OpenProcessToken( GetCurrentProcess(),
   TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
   return false;

if ( ! LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &sedebugnameValue ) )
{
   CloseHandle( hToken );
   return false;
}

tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = sedebugnameValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
   CloseHandle( hToken );

return true;
}

//
//提升當前程序許可權函式("SeDebugPrivilege"讀、寫控制權限)
//
//返回值:“false”是失敗,“true”是成功。
BOOL CEnablePriv::EnableDebugPriv()
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp;

if ( ! OpenProcessToken( GetCurrentProcess(),
   TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
   return false;

if ( ! LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &sedebugnameValue ) )
{
   CloseHandle( hToken );
   return false;
}

tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = sedebugnameValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
   CloseHandle( hToken );

return true;
}

//
//提升當前程序許可權函式("SeBackupPrivilege"備份資料許可權)
//
//返回值:“false”是失敗,“true”是成功。
BOOL CEnablePriv::EnableBackupPriv()
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp;

if ( ! OpenProcessToken( GetCurrentProcess(),
   TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
   return false;

if ( ! LookupPrivilegeValue( NULL, SE_BACKUP_NAME, &sedebugnameValue ) )
{
   CloseHandle( hToken );
   return false;
}

tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = sedebugnameValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
   CloseHandle( hToken );

return true;
}

//
//提升當前程序許可權函式("SeRestorePrivilege"恢復資料許可權)
//
//返回值:“false”是失敗,“true”是成功。
BOOL CEnablePriv::EnableRestorePriv()
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp;

if ( ! OpenProcessToken( GetCurrentProcess(),
   TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
   return false;

if ( ! LookupPrivilegeValue( NULL, SE_RESTORE_NAME, &sedebugnameValue ) )
{
   CloseHandle( hToken );
   return false;
}

tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = sedebugnameValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
   CloseHandle( hToken );

return true;
}

相關推薦

VC程式提升管理員許可權

程式的許可權不夠,應用管理員許可權開啟程式執行方可。 如何使vc程式執行時請求管理員許可權? 如果是2005或者2008 就簡單了,直接專案右鍵---屬性---聯結器---清單檔案---uac執行級別 選擇requireAdministrator 重新編譯 這樣你的程式

VC程式獲取管理員許可權

一: 編譯程式的時候設定一下 在專案屬性–聯結器–清單檔案–UAC執行級別改為requireAdministrator 二: void GainAdminPrivileges(CString strApp, UINT idd) { CStri

vc程式管理員許可權執行方法

由於剛剛做的小程式需要使用管理員許可權執行,有時候執行的時候忘記了以管理員身份執行就無法看到正常的結果。為了讓客戶在執行的時候自動以管理員身份執行,百度一下,新增上管理員執行限制 方法一: 1找到VS2010的快捷方式:右擊——“開啟檔案位置” 找到VS2010的啟動專案d

CMAKE給VS程式新增管理員許可權

    #關閉控制檯視窗     SET(CMAKE_EXE_LINKER_FLAGS     "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:WINDOWS")      SET(

golang windows程式獲取管理員許可權(UAC )

在windows上執行有關係統設定命令的時候需要管理員許可權才能操作,比如修改網絡卡的禁用、啟用狀態。雙擊執行是不能正確執行命令的,只有右鍵以管理員身份執行才能成功。 為解決此問題,花了很長時間找了各種方法,最終找到一個簡單的方法,雙擊也能執行成功了。過程如下:    

QT程式管理員許可權執行(UAC)

方案一:(僅適用於使用msvc編譯器) 在PRO檔案中新增一行指令即可, QMAKE_LFLAGS += /MANIFESTUAC:"level='requireAdministrator'uiAc

C++中應用程式獲得管理員許可權執行(圖示帶盾牌)

在vista以後的windows版本中,有些時候需要提升編譯後生成程式的許可權,即希望讓生成的程式以管理員身份執行。雖然在一般情況下,可以使用滑鼠右鍵選擇的方式來強行以管理員身份執行,但它並沒有遮蔽普通執行方式,而且普通人通常也不會使用右鍵選擇以管理員身份執行,所以必須在

Win10下應用程式預設管理員許可權執行

        系統升級到win10後,普通應用程式不再預設以管理員許可權運行了。當應用程式需要訪問系統盤或調CreateFile函式進行IO驅動操作時,往往會失敗,同時,通過GetLastError函式獲取錯誤碼為5——拒絕訪問,許可權不夠。一般的解決辦法是,右鍵***.

C#程式管理員許可權執行

在Vista 和 Windows 7 及更新版本的作業系統,增加了 UAC(使用者賬戶控制) 的安全機制,如果 UAC 被開啟,使用者即使以管理員許可權登入,其應用程式預設情況下也無法對系統目錄、系統登錄檔等可能影響系統正常執行的設定進行寫操作。這個機制大大增強了系統的安全性,但對應用程式開發者來說,我們不

VS為VC++新增UAC控制(VC程式預設管理員執行)

VS編譯連結VC++工程生成檔案預設是沒有管理員許可權的 生成的程式圖示是沒有盾牌的如圖: 如果程式需要在C盤做些寫入操作 就必須具有管理員許可權 所以需要在工程中進行設定 工程右鍵屬性 具體如圖: 確定後編譯連結 生成的程式就有了一個盾牌圖示瞭如圖:   執行程式也

VS2013編譯生成的應用程式管理員許可權執行

      有時候由於程式中某些功能的需要(例如修改登錄檔,讀寫c盤裡的檔案),程式需要以管理員身份執行。      在網上找了很久的資料,都是說右鍵專案,選擇“屬性”的,然後可以選擇  安全性-勾選ClickOnce安全設定什麼的,比如這篇博文,可是我找了半天也沒有找到 C

程式請求管理員許可權

1)ShellExecuteEx啟動程序提許可權 #include <stdio.h> #include<windows.h> #include<tchar.h> int _tmain(int argc,TCHAR*

win7下的UAC機制與提升管理員許可權

自己本來想寫這麼個東西。在自己寫的程式中能開啟另一個程式,而這個開啟的程式是直接以管理員身份執行的而不需要彈出什麼“是否要以管理員身份執行的對話方塊”。 那麼我們首先來看一下UAC機制。 下面這些是摘引過來的: 保護Win7安全不得不說的UAC,眾所周知,UAC是Use

讓QT程式預設管理員許可權(UAC)執行

解決方案一 在pro檔案中新增 QMAKE_LFLAGS += /MANIFESTUAC:"level='requireAdministrator'uiAccess='false'" 解決方案二 假設需要管理員許可權的程式為MyApp.exe 把MyApp.e

C#正確方式讓程式管理員許可權啟動

  應用程式可能執行在各個windows版:windowsXp,win7-32bit,win7-64bit,win8-32bit,win8-64bit.由於windows各個版本的使用者許可權的限制不同,同一個開發環境編譯出來的應用程式,拿到各個系統中執行的效果是用

使程式管理員許可權執行(C++)

來源網站:http://blog.csdn.net/jhui163/article/details/5873027 在看射手原始碼的時候,發現這個函式,是獲取管理員許可權的。但是不知道效果如果,先發上來大家測試下。 void GainAdminPrivileges(

Qt 中執行cmd命令失敗,無許可權,需要提升程式管理員執行 vs2013設定

程式中有些 地方 需要執行windows cmd 命令, 如 taskkill 程序命令 (QString c = "taskkill /im osk.exe /f";m_pProcess->execute(c);)  這種 命令是需要管理員身份的, 因此程式必須以管理員身份執行

vc++MCF/C++/C中怎樣讓應用程式獲得或以管理員許可權執行 ,ShellExecuteEX程式設計 --- 獲取管理員許可權

怎樣讓你的應用程式獲得管理員許可權:就是在執行開發工具如vc6.0 或vs2010時,要以管理員身份執行,這樣你的應用程式才可以繼承 解決:在vs2010等開發工具中雖然以管理員身份編譯運行了程式,可以獲得管理員許可權,但是當單獨點選Debug或release版時,又

利用ShellExecuteEx手動提升使用者特權,以管理員許可權來執行程式。win7會有UAC彈窗

#include <stdio.h> #include<windows.h> #include<tchar.h> int _tmain(int argc,TCHAR* argv[]) { SHELLEXECUTEINFO sei={sizeof(SHELLEXECUTE

利用ShellExecuteEx手動提升使用者特權,以管理員許可權來執行程式

                      #include <stdio.h> #include<windows.h> #include<tchar.h> int _tmain(int argc,TCHAR* argv[])