怎么在windows中得到当前用户ID,得以判断他是管理员,windows中的API是什么啊? 如上 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 nStatus = NetUserEnum(NULL,dwLevel,FILTER_NORMAL_ACCOUNT,(LPBYTE*)&pBuf, dwPrefMaxLen,&dwEntriesRead,&dwTotalEntries,&dwResumeHandle); if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA)) { if ((pTmpBuf = pBuf) != NULL) { for (i = 0; (i < dwEntriesRead); i++) { if (pTmpBuf == NULL) { printf("An access violation has occurred\n"); break; } wprintf(L"Name:\t\t %s\n", pTmpBuf->usri3_name); switch(pTmpBuf->usri3_priv) { case USER_PRIV_GUEST: printf("%-10s\t","Guest"); break; case USER_PRIV_USER: printf("%-10s\t","User"); break; case USER_PRIV_ADMIN://管理员 printf("%-10s\t","Administrator"); break; default: printf("%-10s\t",""); break; } pTmpBuf++; dwTotalCount++; } }再用GetUserName()取当前用户名,判断一下 Figure 3 Member of Administrator? bool bIsAdmin = false; SID_IDENTIFIER_AUTHORITY ntauth = SECURITY_NT_AUTHORITY; void* psidAdmin = 0; AllocateAndInitializeSid( &ntauth, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &psidAdmin ); HANDLE htok = 0; OpenProcessToken( GetCurrentProcess(), TOKEN_QUERY, &htok ); DWORD cb = 0; GetTokenInformation( htok, TokenGroups, 0, 0, &cb ); TOKEN_GROUPS* ptg = (TOKEN_GROUPS*) malloc(cb); GetTokenInformation( htok, TokenGroups, ptg, cb, &cb ); for ( DWORD i = 0; i < ptg->GroupCount; ++i ) if ( EqualSid( psidAdmin, ptg->Groups[i].Sid ) ) break; bIsAdmin = i != ptg->GroupCount; free( ptg ); CloseHandle( htok ); FreeSid( psidAdmin ); 10博士致信李彦宏 申请加盟百度研究框计算 设置字体大小 release发送消息出错,debug正常 请问windows live writer用什么语言写的? 请转贴! 请教。 oracle服务已联上,但ODBC连不上,请高手解决,另开200分相送,急!!1 关于窗口的一个小问题 求教大神,为什么我调试总是出错?一个模拟键盘输入的程序 请问如何修改WizardSheet对话框的大小? 有个通信程序,俺(菜鸟)是这样设计的,请高手指点 SDI中对话框中得到的变量值如何传到VIEW类中?
dwPrefMaxLen,&dwEntriesRead,&dwTotalEntries,&dwResumeHandle);
if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))
{
if ((pTmpBuf = pBuf) != NULL)
{
for (i = 0; (i < dwEntriesRead); i++)
{
if (pTmpBuf == NULL)
{
printf("An access violation has occurred\n");
break;
}
wprintf(L"Name:\t\t %s\n", pTmpBuf->usri3_name);
switch(pTmpBuf->usri3_priv)
{
case USER_PRIV_GUEST:
printf("%-10s\t","Guest");
break;
case USER_PRIV_USER:
printf("%-10s\t","User");
break;
case USER_PRIV_ADMIN://管理员
printf("%-10s\t","Administrator");
break;
default:
printf("%-10s\t","");
break;
}
pTmpBuf++;
dwTotalCount++;
}
}
再用GetUserName()取当前用户名,判断一下
bool bIsAdmin = false;
SID_IDENTIFIER_AUTHORITY ntauth =
SECURITY_NT_AUTHORITY;
void* psidAdmin = 0;
AllocateAndInitializeSid( &ntauth, 2,
SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0, &psidAdmin );
HANDLE htok = 0;
OpenProcessToken( GetCurrentProcess(),
TOKEN_QUERY, &htok );
DWORD cb = 0;
GetTokenInformation( htok, TokenGroups,
0, 0, &cb );
TOKEN_GROUPS* ptg = (TOKEN_GROUPS*) malloc(cb);
GetTokenInformation( htok, TokenGroups,
ptg, cb, &cb );
for ( DWORD i = 0; i < ptg->GroupCount; ++i )
if ( EqualSid( psidAdmin, ptg->Groups[i].Sid ) )
break;
bIsAdmin = i != ptg->GroupCount;
free( ptg );
CloseHandle( htok );
FreeSid( psidAdmin );