判断当前进程是否"以管理员身份运行"的
BOOL IsAdministrator() {//判断是否管理员模式BOOL bIsElevated = FALSE;
HANDLE hToken = NULL;
UINT16 uWinVer = LOWORD(GetVersion());
uWinVer = MAKEWORD(HIBYTE(uWinVer),LOBYTE(uWinVer));
if (uWinVer < 0x0600))//不是VISTA、Windows7
return(FALSE);
if (OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hToken)) {
struct {
DWORD TokenIsElevated;
} /*TOKEN_ELEVATION*/te;
DWORD dwReturnLength = 0;
if (GetTokenInformation(hToken,/*TokenElevation*/(_TOKEN_INFORMATION_CLASS)20,&te,sizeof(te),&dwReturnLength)) {
if (dwReturnLength == sizeof(te))
bIsElevated = te.TokenIsElevated;
}
CloseHandle( hToken );
}
return bIsElevated;
}
我也帖相似的源码,取进程用户名PTSTR GetProcessUser(DWORD dwProcessID)
{
STATIC TCHAR szUserName = {0};
BOOL fResult = FALSE;
if (HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,dwProcessID))
{
HANDLEhToken = NULL;
if (OpenProcessToken(hProc,TOKEN_QUERY,&hToken))
{
DWORD dwNeedLen = 0;
GetTokenInformation(hToken,TokenUser,NULL,0,&dwNeedLen);
if (dwNeedLen > 0)
{
PTOKEN_USER pTokenUser = (PTOKEN_USER)UMemInit(dwNeedLen + sizeof(DWORD));
if (GetTokenInformation(hToken,TokenUser,pTokenUser,dwNeedLen,&dwNeedLen))
{
SID_NAME_USE sn;
TCHARszDomainName = {0};
DWORDdwDmLen=MAX_PATH;
DWORDnNameLen = MAX_PATH;
fResult=LookupAccountSid(NULL,
pTokenUser->User.Sid,
szUserName,
&nNameLen,
szDomainName,
&dwDmLen,
&sn);
}
_SafeFree(pTokenUser);
}
if (hToken)
{
CloseHandle(hToken);
}
}
CloseHandle(hProc);
}
return fResult?(PTSTR)szUserName:NULL;
}
页:
[1]