BOOL CMainFrame::EnableDebugPrivilege(BOOL fEnable)
{
BOOL fOK = FALSE;
HANDLE hToken = NULL;
if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken))
{
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tp.Privileges[0].Luid);
tp.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0;
AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL);
fOK = (GetLastError() == ERROR_SUCCESS);
CloseHandle(hToken);
}
return fOK;
}
以下在 VS2005 中測試可行
一般應用程序需要管理員權限時,在XP下無需特殊限定,只要使用管理員登陸系統即可正常使用應用程序。win7下因爲特有的UAC驗證,所以應用程序開發需要進行特別的處理。處理過程如下:
1. 在應用程序源代碼目錄下創建 admin.manifest 文件,粘貼進如下內容保存:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0"
processorArchitecture="X86"
name="Win7Privilege"
type="win32"/>
<description>Description of your application</description>
<!-- Identify the application security requirements. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
其中紅色部分請更改爲相應內容:
Win7Privilege => 你的應用程序名,例如MyProcedure
Description of your application => 你的應用程序描述信息,例如this is MyProcedure
2. 在應用程序的屬性——清單工具——“輸入和輸出”選項中,填寫“附加清單文件”項爲admin.manifest,點擊“確定”。
3. 重新生成應用程序。
經過這樣處理的應用程序,在Win7下的非管理員賬戶下運行時,會彈出一個提示框,提示用戶該程序要求管理員權限,是否繼續運行。用戶選擇否,則程序退出;用戶選擇是,則運行的程序被賦予管理員權限。
文章來源:http://www.prm8.com/a/bianchengjingyan/vc/402/