检测应用程序是否具有管理员权限 VISTA, WIN7的UAC太讨厌应用程序如何自己检测运行的时候是否具有管理权限? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 // 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;} Nice!thank you for your timely reply! mfc打点前移图像【大牛帮忙!】 CFileDialog定义的保存对话框,如何修改“另存为”标题名? VC 2008 SP1 简体中文版发布了,更新了好多界面,大家谈谈使用情况吧。 在VS2008中编程出一个中断错误,请各位帮忙看看 加壳程序如何写 动态分配内存——GetMem 求救 socket通信问题 请教大家怎么在程序中判断网线已被拨出?????欢迎大家讨论,谢谢大家无私帮助 帮我看一看,这是什么原因无法通过? Spy的源代码,哪里有?? 如何获取视图句柄? 请教一个FTP客户端的问题
// 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;
}