プログラムが完全な管理者権限で実行されているかどうかを確認する必要があります。つまり、uac がオンになっている場合 (win vista/7 の場合)、プログラムが実際に管理者権限を持っているかどうか (ユーザーが右クリックして「管理者として実行」を選択した場合など) を判断する必要があり、uac によって制限されていません。C++ でこれを行うにはどうすればよいですか?
15721 次
2 に答える
12
- Win9x: 全員が「管理者」
- NT4:ループ内の DOMAIN_ALIAS_RID_ADMINS SID に対する OpenThreadToken/OpenProcessToken + GetTokenInformation(...,TokenGroups,...)
- 2000 以降: DOMAIN_ALIAS_RID_ADMINS SID のOpenThreadToken/OpenProcessToken + CheckTokenMembership
その他の代替手段: IsUserAnAdminまたはAccessCheck
トークンの TOKEN_ELEVATION* をチェックすることは、現在のプロセスをテストするために必要ではありませんが、ユーザーが分割トークンなどを持っているために昇格できるかどうかを調べる必要がある場合に役立ちます。
于 2010-11-20T02:33:00.433 に答える
0
Windows の知識が少ない人 (私のような) のための Anders の回答の拡張:
BOOL isMember;
PSID administratorsGroup = NULL;
SID_IDENTIFIER_AUTHORITY SIDAuthNT =
SECURITY_NT_AUTHORITY;
if (!AllocateAndInitializeSid(&SIDAuthNT, 2,
SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0,
&administratorsGroup))
{
throw(oops_t(GetLastError(), "AllocateAndInitializeSid"));
}
if (!CheckTokenMembership(nullptr, administratorsGroup, &isMember))
{
throw(oops_t(GetLastError(), "CheckTokenMembership"));
}
if (!isMember)
{
throw(oops_t(ERROR_ACCESS_DENIED, "Test for Admin privileges"));
}
于 2019-02-19T15:03:15.590 に答える