检测应用程序是否具有管理员权限

cheneyhehe 2009-05-12 02:02:14
VISTA, WIN7的UAC太讨厌

应用程序如何自己检测运行的时候是否具有管理权限?
...全文
47 点赞 收藏 3
写回复
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
cheneyhehe 2009-05-13
错了,上面只能检测当前用户是否是管理员,而无法得到当前程序是否是管理员权限执行....
回复
cheneyhehe 2009-05-12
Nice!thank you for your timely reply!
回复
biweilun 2009-05-12

// isadmin.cpp (Windows NT/2000)
// This example will show how you can know if the current process
// has administrative privileges.
#include <windows.h>
#include <stdio.h>


BOOL IsAdmin(void);

void main(int argc, char* argv[])
{
if (IsAdmin())
printf("IsAdmin - TRUE");
else
printf("IsAdmin - FALSE");
}


BOOL IsAdmin(void)
{
HANDLE hAccessToken;
BYTE *InfoBuffer;
PTOKEN_GROUPS ptgGroups;
DWORD dwInfoBufferSize;
PSID psidAdministrators;
SID_IDENTIFIER_AUTHORITY siaNtAuthority = SECURITY_NT_AUTHORITY;
UINT i;
BOOL bRet = FALSE;

if(!OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hAccessToken))
goto cleanup;

InfoBuffer = new BYTE[1024];
if(!InfoBuffer)
goto cleanup;

bRet = GetTokenInformation(hAccessToken,
TokenGroups,
InfoBuffer,
1024,
&dwInfoBufferSize);

CloseHandle( hAccessToken );

if(!bRet)
goto cleanup;

if(!AllocateAndInitializeSid(&siaNtAuthority,
2,
SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,
0,0,0,0,0,0,
&psidAdministrators))
goto cleanup;

bRet = FALSE;

ptgGroups = (PTOKEN_GROUPS)InfoBuffer;

for(i=0;i<ptgGroups->GroupCount;i++)
{
if(EqualSid(psidAdministrators,ptgGroups->Groups[i].Sid))
{
bRet = TRUE;
break;
}
}

FreeSid(psidAdministrators);

cleanup:

if (InfoBuffer)
delete InfoBuffer;

return bRet;
}
回复
发动态
发帖子
硬件/系统
创建于2007-09-28

2590

社区成员

VC/MFC 硬件/系统
申请成为版主
社区公告
暂无公告