2011-11-08 70 views
12

如何正確檢查進程是否使用管理權限運行?如何檢查進程是否具有管理權限

我檢查了IsUserAnAdim function in MSDN,但不建議這樣做,因爲它可能在後續版本的Windows中被更改或不可用。相反,建議使用CheckTokenMembership函數。

然後我看着MSDN中從CheckTokenMembership函數的描述中的替代示例。但是,Stefan Ozminski在MSDN中發表的評論指出,如果禁用了UAC,則此示例在Windows Vista中無法正常工作。

最後,我試圖從MSDN使用斯特凡Ozminski的代碼,但它判斷出該處理具有管理權限,即使我推出來一個普通用戶在沒有管理權限在Windows 7

+1

如果你不能在這裏顯示的任何代碼,你至少可以爲我們提供鏈接到引用的文章/評論/代碼? –

+2

這將幫助你很多人確切地定義你的意思是「管理權」。你的意思是它是否以管理員組中的用戶身份運行?你的意思是它是否擁有完整的UAC權利? –

+0

您是否嘗試過PrivilegeCheck API? – sarat

回答

36

如果這會告訴你您正在使用提升的權限運行或不運行。如果希望提示,可以設置清單以最可能的方式運行。還有其他方法可以通過代碼向窗口請求備用憑據。

 
BOOL IsElevated() { 
    BOOL fRet = FALSE; 
    HANDLE hToken = NULL; 
    if(OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hToken)) { 
     TOKEN_ELEVATION Elevation; 
     DWORD cbSize = sizeof(TOKEN_ELEVATION); 
     if(GetTokenInformation(hToken, TokenElevation, &Elevation, sizeof(Elevation), &cbSize)) { 
      fRet = Elevation.TokenIsElevated; 
     } 
    } 
    if(hToken) { 
     CloseHandle(hToken); 
    } 
    return fRet; 
} 

相關問題