怎么获得当前登入到2000,xp帐户的类型??? 比如,判断当前是一个管理员帐户,或是一个受限帐户?用这方面的api吗。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Use IsUserAnAdminHowever, if you need to check a limited user account, You need to either use CheckTokenMembership, or construct a security descriptor and perform an access check. You may need to use GetTokenInformation if you also target NT4.0 // whoami.cpp// cl whoami.cpp /c1 /c// link whoami.obj /nodefaultlib msvcrt.lib advapi32.lib kernel32.lib /align:16//////#pragma comment(lib,"Advapi32.lib")#include <stdio.h>#include <stdlib.h>#include <string.h>#include <Windows.h>#define UULEN 256int main(int argc,char *argv[]){ //OpenProcess(); HANDLE hp , htoken; char buff[2560]; unsigned long size = 2560; TOKEN_USER *tuser; PTOKEN_GROUPS tgroup; PTOKEN_OWNER towner; PTOKEN_SOURCE tsource; PSID sid; char user[UULEN], domain[UULEN]; SID_NAME_USE snu; hp = htoken = INVALID_HANDLE_VALUE; hp = GetCurrentProcess(); if(!OpenProcessToken(hp, TOKEN_QUERY | TOKEN_QUERY_SOURCE , &htoken)) { printf("OpenProcessToken error : %u\r\n", GetLastError()); goto exit_main; } if(!GetTokenInformation(htoken, TokenUser, (void*)buff, size, &size)) { printf("GetTokenInformation error : %u\r\n", GetLastError()); goto exit_main; } tuser = (TOKEN_USER*)buff; sid = tuser->User.Sid; size = UULEN; if(!LookupAccountSid(NULL, sid, user, &size, domain, &size, &snu)) { printf("LookupAccountSid error : %u\r\n", GetLastError()); goto exit_main; }// printf("you are '%s\\%s'\r\n", domain, user); printf( "Domain : %s\nUser : %s\n", domain, user); size = UULEN *10; if(!GetTokenInformation(htoken, TokenGroups , (void*)buff, size, &size)) { printf("GetTokenInformation error : %u\r\n", GetLastError()); goto exit_main; } tgroup = (PTOKEN_GROUPS)buff; int len ; len = tgroup->GroupCount; printf( "Group :\n"); int i; for( i = 0; i< len ; i++) { sid = tgroup->Groups[i].Sid ; size = UULEN; if(!LookupAccountSid(NULL, sid, user, &size, domain, &size, &snu)) {// printf("LookupAccountSid error : %u\r\n", GetLastError()); break; } printf("\t[%d] %s\n",i+1, user ); } size = 2560; if(!GetTokenInformation(htoken, TokenOwner, (void*)buff, size, &size)) { printf("GetTokenInformation error : %u\r\n", GetLastError()); goto exit_main; } towner = (PTOKEN_OWNER)buff; sid = towner->Owner; size = UULEN; if(!LookupAccountSid(NULL, sid, user, &size, domain, &size, &snu)) { printf("LookupAccountSid error : %u\r\n", GetLastError()); goto exit_main; } printf( "Owner : %s\n", user ); size = 2560; if(!GetTokenInformation(htoken, TokenSource, (void*)buff, size, &size)) { printf("GetTokenInformation error : %u\r\n", GetLastError()); goto exit_main; } tsource = (PTOKEN_SOURCE ) buff; tuser = (TOKEN_USER*)buff; sid = tuser->User.Sid; size = UULEN; printf( "Source : %.8s\n", tsource->SourceName );exit_main: if(htoken != INVALID_HANDLE_VALUE)CloseHandle(htoken); if(hp != INVALID_HANDLE_VALUE)CloseHandle(hp); return 0;} _w64 起什么作用 怎样让其中的一个tab页弹出? 谁有《vc ++ + sql server 数据库开发与实例》的光盘 简单线程问题!急!解决即结帖! 求教: 我在Build工程Display时,有如下报错,但依然可以执行EXE!!! 很奇怪,不知哪位高手可以指点! CEdit中如何显示多行文本 关于 ActiveX ,COM, ATL的问题! 帮忙翻译一下,谢谢! vc++中使用msxml????急~~ 3ds 文件读取模型错位的问题 请高手指教一下,在VC++.NET中怎样实现将数据写到EXCEL表中? 请问:为什么我在vc工程设置-》setting for debug,不行啊,
However, if you need to check a limited user account, You need to either use CheckTokenMembership, or construct a security descriptor and perform an access check. You may need to use GetTokenInformation if you also target NT4.0
// cl whoami.cpp /c1 /c
// link whoami.obj /nodefaultlib msvcrt.lib advapi32.lib kernel32.lib /align:16
//
//
//#pragma comment(lib,"Advapi32.lib")#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Windows.h>#define UULEN 256
int main(int argc,char *argv[])
{
//OpenProcess();
HANDLE hp , htoken;
char buff[2560];
unsigned long size = 2560; TOKEN_USER *tuser;
PTOKEN_GROUPS tgroup;
PTOKEN_OWNER towner;
PTOKEN_SOURCE tsource;
PSID sid;
char user[UULEN], domain[UULEN];
SID_NAME_USE snu; hp = htoken = INVALID_HANDLE_VALUE;
hp = GetCurrentProcess(); if(!OpenProcessToken(hp, TOKEN_QUERY | TOKEN_QUERY_SOURCE , &htoken))
{
printf("OpenProcessToken error : %u\r\n", GetLastError());
goto exit_main;
}
if(!GetTokenInformation(htoken, TokenUser, (void*)buff, size, &size))
{
printf("GetTokenInformation error : %u\r\n", GetLastError());
goto exit_main;
}
tuser = (TOKEN_USER*)buff;
sid = tuser->User.Sid;
size = UULEN;
if(!LookupAccountSid(NULL, sid, user, &size, domain, &size, &snu))
{
printf("LookupAccountSid error : %u\r\n", GetLastError());
goto exit_main;
}
// printf("you are '%s\\%s'\r\n", domain, user);
printf( "Domain : %s\nUser : %s\n", domain, user); size = UULEN *10;
if(!GetTokenInformation(htoken, TokenGroups , (void*)buff, size, &size))
{
printf("GetTokenInformation error : %u\r\n", GetLastError());
goto exit_main;
}
tgroup = (PTOKEN_GROUPS)buff;
int len ;
len = tgroup->GroupCount;
printf( "Group :\n");
int i;
for( i = 0; i< len ; i++)
{
sid = tgroup->Groups[i].Sid ;
size = UULEN;
if(!LookupAccountSid(NULL, sid, user, &size, domain, &size, &snu))
{
// printf("LookupAccountSid error : %u\r\n", GetLastError());
break;
}
printf("\t[%d] %s\n",i+1, user );
} size = 2560; if(!GetTokenInformation(htoken, TokenOwner, (void*)buff, size, &size))
{
printf("GetTokenInformation error : %u\r\n", GetLastError());
goto exit_main;
} towner = (PTOKEN_OWNER)buff;
sid = towner->Owner;
size = UULEN; if(!LookupAccountSid(NULL, sid, user, &size, domain, &size, &snu))
{
printf("LookupAccountSid error : %u\r\n", GetLastError());
goto exit_main;
} printf( "Owner : %s\n", user ); size = 2560; if(!GetTokenInformation(htoken, TokenSource, (void*)buff, size, &size))
{
printf("GetTokenInformation error : %u\r\n", GetLastError());
goto exit_main;
}
tsource = (PTOKEN_SOURCE ) buff;
tuser = (TOKEN_USER*)buff;
sid = tuser->User.Sid;
size = UULEN; printf( "Source : %.8s\n", tsource->SourceName );
exit_main:
if(htoken != INVALID_HANDLE_VALUE)CloseHandle(htoken);
if(hp != INVALID_HANDLE_VALUE)CloseHandle(hp);
return 0;
}