如何 根据用户名获取其属于的用户组 ? 如何根据用户名获取其属于的用户组?比如用户名时Administrator,那么通过什么样的api可以知道此用户属于Administrator组?谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看看注册表有没有?如果有就用RegOpenEx去打开然后读注册表! 很多应用程序在运行时都要求确定是否以管理优先级运行,例如,只有管理员才能使用的实用程序就是这样情况。实现这种功能的方法有很多,本文拟介绍一种方法,它通过获取进程TOKEN来实现。第一步:调用OpenProcessToken函数获取当前进程TOKEN的句柄,方法如下:HANDLE hAccessToken;OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hAccessToken);当获得TOKEN句柄之后,我们还得获取这个TOKEN的分组信息:BYTE InfoBuffer[1024];DWORD dwInfoBufferSize;GetTokenInfomation(hAccessToken, TokenGroups, InfoBuffer, 1024, &dwInfoBufferSize);第二步:为Local Admin账号获取安全标示符(SID),我们要利用这个账号在所有TOKEN分组中查找Local Admin SID(不要忘了调用FreeSid函数来释放内存)。PSID psidAdministrators;SID_IDENTIFIER_AUTHORITY siaNtAuthority = SECURITY_NT_AUTHORITY;AllocateAndInitializeSid( &siaNtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0,0,0,0,0,0, &psidAdministrators) 最后一步:在所有TOKEN分组中查找Local Admin SID:PTOKEN_GROUPS ptgGroups = (PTOKEN_GROUPS)InfoBuffer;for(UINT i = 0; i < ptgGroups->GroupCount; i ++){ if( EqualSid(psidAdministrators,ptgGroups->Groups[i].Sid) ) { // 此进程有管理权限 break; }} CFile文件操作问题 如何修改二级菜单文本的问题,急啊,在线等 DestroyWindow 无法结束进程 jmail.dll组件的问题 关于解析捕获到的以太帧的问题 API 编程的问题——编译链接无错误,就是不显示窗口,为什么? 如何实现画图程序里的拖动矩形区域内的图像 mp3文件的属性怎么读取啊,大家指点 怎么修改 Sdi 程序的标题 跳槽给我的教训,给大家提个醒。 IE窗体子类化后,为什么标题无法显示 请教一个树形视图中快捷菜单的问题
第一步:调用OpenProcessToken函数获取当前进程TOKEN的句柄,方法如下:HANDLE hAccessToken;
OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hAccessToken);当获得TOKEN句柄之后,我们还得获取这个TOKEN的分组信息:
BYTE InfoBuffer[1024];
DWORD dwInfoBufferSize;GetTokenInfomation(hAccessToken,
TokenGroups,
InfoBuffer,
1024,
&dwInfoBufferSize);第二步:为Local Admin账号获取安全标示符(SID),我们要利用这个账号在所有TOKEN分组中查找Local Admin SID(不要忘了调用FreeSid函数来释放内存)。
PSID psidAdministrators;
SID_IDENTIFIER_AUTHORITY siaNtAuthority = SECURITY_NT_AUTHORITY;
AllocateAndInitializeSid( &siaNtAuthority,
2,
SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,
0,0,0,0,0,0,
&psidAdministrators) 最后一步:在所有TOKEN分组中查找Local Admin SID:
PTOKEN_GROUPS ptgGroups = (PTOKEN_GROUPS)InfoBuffer;for(UINT i = 0; i < ptgGroups->GroupCount; i ++)
{
if( EqualSid(psidAdministrators,ptgGroups->Groups[i].Sid) )
{
// 此进程有管理权限
break;
}
}