對於一個小工具,應用程序,我在工作中寫,我有以下的代碼,以確定當前用戶帳戶是本地或域管理員:確定當前用戶帳戶屬於哪個組?
WCHAR wszUser[UNLEN];
GetEnvironmentVariableW(L"username", wszUser, UNLEN);
#ifndef _DEBUG
if (StrCmpIW(wszUser, L"Administrator") != 0)
{
MessageBoxW(0, L"This program can only be run as Administrator.", L"Error", MB_OK | MB_ICONSTOP);
return 0;
}
#endif
這個權利現在在我們的情況,因爲:
- 我們的域管理員帳戶是內置的Administrator帳戶
- 我們沒有任何其他域管理員帳戶。
但是,我意識到這是一個糟糕的解決方案,因爲將來我們可能會添加其他域管理員帳戶。有沒有一種方法可以確定使用Windows API,該進程所運行的用戶帳戶是否屬於Domain Admins組或BUILTIN\Administrators
,或者不是?
這不是一個安全問題,因爲除非應用程序以管理員身份運行,否則該應用程序實際上無法執行任何有用的操作,這僅僅是爲了提高可靠性。
在這種情況下,正確的解決方案是使用'/ MANIFESTUAC:level = requireAdministrator'鏈接器選項,或者如果您已經有一個清單,請添加一個'requestedExecutionLevel'條目,其中'level =「requireAdministrator」'[如此處所述](https://www.codeproject.com/articles/17968/making-your-application-uac-aware)。 –
如果因爲某些其他原因需要檢索組信息,請參閱http://stackoverflow.com/questions/10450998/need-to-retrieve-all-groups-a-user-belongs-to-in-c。但在這種情況下,我同意@HarryJohnston。 – gnud