比如,判断当前是一个管理员帐户,或是一个受限帐户?
用这方面的api吗。
用这方面的api吗。
解决方案 »
- 关于窗口关闭消息的响应
- 如何将接收到的用udp包传送的文件显示在编辑框里?
- 奇怪:OnLButtonUp事件里弹出的对话框还能触发主窗口的OnLButtonUp事件?
- vc6.0中要自定义类,想从CObject类派生,以获得它的机能,然而ClassWizard中却找不到CObject基类,高手请进???
- 利用sprintf显示格式化的字符串
- 使用GDI+另存图像,如何指定另存图像的大小。
- 简单问题:ListBox为什么不显示水平滚动条,在线等待,马上接帖!
- #import "C:\\Program Files (x86)\\Microsoft Office..." 能动态处理么
- 程序员最好的归属是什么?中国程序员最好的归属是什么?
- 在线播放音乐的客户端
- 请高手指教一下,在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;
}