NT检测用户权限?

greentape 2000-02-17 01:12:00
如何用vc编程知道NT4中当前登陆用户是否具有
本机管理员权限?
...全文
143 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
netmare 2000-02-17
  • 打赏
  • 举报
回复
//得到某进程的令牌
BOOL OpenProcessToken(
HANDLE ProcessHandle, // handle to process
DWORD DesiredAccess, // desired access to process
PHANDLE TokenHandle // pointer to handle of open access token
);
//得到令牌信息
BOOL GetTokenInformation(
HANDLE TokenHandle, // handle of access token
TOKEN_INFORMATION_CLASS TokenInformationClass,
// type of information to retrieve
LPVOID TokenInformation, // address of retrieved information
DWORD TokenInformationLength,
// size of information buffer
PDWORD ReturnLength // address of required buffer size
);
//令牌特权信息结构
typedef struct _TOKEN_PRIVILEGES { // tp
DWORD PrivilegeCount;
LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
} TOKEN_PRIVILEGES;

Privileges
Specifies an array of LUID_AND_ATTRIBUTES structures. Each structure contains the LUID and attributes of a privilege. The attributes of a privilege can be a combination of the following values: Attribute Description
SE_PRIVILEGE_ENABLED_BY_DEFAULT
The privilege is enabled by default.
SE_PRIVILEGE_ENABLED
The privilege is enabled.
SE_PRIVILEGE_USED_FOR_ACCESS
The privilege was used to gain access to an object or service. This flag is used to identify the relevant privileges in a set passed by a client application that may contain unnecessary privileges.

//由特权的LUID得到其字符形式的名字
BOOL LookupPrivilegeName(
LPCTSTR lpSystemName,
// address of string specifying the system
PLUID lpLuid, // address of locally unique identifier
LPTSTR lpName, // address of string specifying the privilege
LPDWORD cbName // address of size of string for displayable name
);

例如
#include <winnt.h>
...
OpenProcessToken(GetCurrentProcess(),TOKEN_READ and TOKEN_QUERY,&hToken);
TOKEN_PRIVILEGES tkp;
WORD cb;
GetTokenInformation(hToken,TokenPrivileges,&tkp,sizeof(tkp),&cb);
char szName[256];
for(DWORD i=0;i<tkp.PrivilegeCount;i++)
{
LookupPrivilegeName(NULL,&tkp.Privileges[i].Luid,szName,&cb);
if(!strcmp(szName,"SeShutdownPrivilege"))
//有关机的特权,是系统管理员
...
}
具体细节可参考msdn
xenogear 2000-02-17
  • 打赏
  • 举报
回复
用程序试着做一些管理员才可以做的工作, 看结果就知道权限了

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧