主题:新手提问:如何取得当前用户的权限
B-三硝基甲苯
[专家分:300] 发布于 2003-08-26 19:42:00
如何取得当前用户的权限?我用VB。
回复列表 (共9个回复)
沙发
vrace [专家分:3590] 发布于 2003-08-26 22:39:00
什么权限?是判断,还是获取什么什么权限?
板凳
B-三硝基甲苯 [专家分:300] 发布于 2003-08-27 08:25:00
我想在程序启动时判断当前用户的权限是不是管理员,如不是就关闭。
3 楼
vrace [专家分:3590] 发布于 2003-08-27 12:11:00
Hmmm... 管理员应该可以在 SYSTEM32 目录中创建和删除文件。
你可以在 Windows\System32 目录中创建一个文件,然后写几个字进去,再删除。中途如果出错,就没有管理员的权限。
(以上仅为个人之烂办法。如有更好的办法,请告知。THX)
4 楼
B-三硝基甲苯 [专家分:300] 发布于 2003-08-27 19:58:00
汗~
有没有更好的方法?
5 楼
天字号药店 [专家分:1010] 发布于 2003-08-27 21:37:00
用GetUserName 得到当前用户名.
再以当前用户名, 调用LookupAccountName , 可以得到当前用户的SID, 及SID_NAME_USE. 从SID_NAME_USE 中可知当前用户是否为ADMIN 或USER. 如果想得到更详细信息. 则以得到SID 为参数, 调用其它权限管理函数. 自己可看MSDN
6 楼
B-三硝基甲苯 [专家分:300] 发布于 2003-08-27 23:24:00
多谢楼上.
还有一问题:如何让自己的程序取得SYSTEM特权
7 楼
天字号药店 [专家分:1010] 发布于 2003-08-28 22:15:00
一个普通用户用程序取得管理员的权限从安全原则来讲, 是不被准许的.
但你可能用以, 让用户输入管理员账号及密码后, 得到管理员的token, 再调用 CreateProcessAsUser 来创建一个有系统管理权限的进程
8 楼
鳖鳖 [专家分:20] 发布于 2004-05-13 16:10:00
bool IsNT() //判断是否NT内核
{OSVERSIONINFO info;
info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&info);
return info.dwPlatformId==VER_PLATFORM_WIN32_NT;
}
//---------------------------------------------------------------------------
void AchivePrivilege() //获取系统特权
{HANDLE hProcess,hToken;
TOKEN_PRIVILEGES Privileges; //权限
LUID luid;
hProcess=GetCurrentProcess();
OpenProcessToken(hProcess,TOKEN_ADJUST_PRIVILEGES,&hToken);
Privileges.PrivilegeCount=1;
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);
Privileges.Privileges[0].Luid=luid;
Privileges.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,FALSE,&Privileges,NULL,NULL,NULL);
}
9 楼
B-三硝基甲苯 [专家分:300] 发布于 2004-05-13 22:59:00
Hmmmmmmmmmmmm……ME会用VB重新写的……有价值的代码……
另:这个帖子……是ME来PF发的第一个帖子……
我来回复