判断当前进程是否以管理员权限运行(AllocateAndInitializeSid后,用CheckTokenMembership与AdministratorsGroup进行比较,和Delphi的那个例
Posted 朝闻道
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断当前进程是否以管理员权限运行(AllocateAndInitializeSid后,用CheckTokenMembership与AdministratorsGroup进行比较,和Delphi的那个例相关的知识,希望对你有一定的参考价值。
在Win7下(Vista以上的...)有时某些操作就是会让人郁闷
开启了UAC的话,得以管理员权限运行才不会出现Access is denied。。。
但是,程序又不是非得什么时候都用那破管理员权限的
总不能在manifest里加权限,然后用户运行时老弹确认吧?
当然啦,可以将需要管理员权限的部分写到另一个小程序,需要时调用它就行了
不过还是不爽,如果是一个小小的程序还要再加另一个小小小程序的话
那好,干脆判断是不是Win7。。。开启了UAC没有之类
开启的话再判断下是不是以管理员权限运行,不是则提示下用户下面的操作需管理员权限
。。。。
貌似这样还勉强可以
上代码吧,啰嗦了那么多
bool IsProcessRunAsAdmin()
{
SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
PSID AdministratorsGroup;
BOOL b = AllocateAndInitializeSid(
&NtAuthority,
2,
SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0,
&AdministratorsGroup);
if (b)
{
CheckTokenMembership(NULL, AdministratorsGroup, &b);
FreeSid(AdministratorsGroup);
}
return b == TRUE ;
}
几乎完全是COPY MSDN上的例子了,
在Win7下测试没问题
剩下的不解释
http://blog.csdn.net/just_fancy/article/details/6310347
以上是关于判断当前进程是否以管理员权限运行(AllocateAndInitializeSid后,用CheckTokenMembership与AdministratorsGroup进行比较,和Delphi的那个例的主要内容,如果未能解决你的问题,请参考以下文章