惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - catlog

曲终人不散 - catlog 在Windows2000/XP的安全模式下,替换Gina 如何再Win2000/XP下,加入自己的认证? 是走的时候了 VC++ FAQ--VC和MFC的未来,还有Whidbey 如何在Win2000/xp下禁止某些硬件?比如说网卡,CD-ROM.. 明华的EKey 头晕,出个题目考考你 - catlog - 博客园 基于pkcs11的MS CSP的OpenSource实现 生活就是混下去。 用 WB Editor 连接 博客园 的全攻略 一首词 如何用IPHelp取得网卡的详细信息 令人吃惊的完成端口Copy速度! 如何订阅OSR的新闻组? Windows 2000的引导过程 1:0中国胜科威特 win98下如何控制登陆? 故土难离
取得当前用户的权限(privileges)
catlog · 2004-03-04 · via 博客园 - catlog

在Windows中如何取得用户的权限呢?

在MSDN中有如下的API可以帮助我们做到这些:

1,打开Token,OpenProcessToken得到HANDLE hToken

2.取得GetTokenInformation

3.遍历得到LookupPrivilegeName,LookupPrivilegeDisplayName

以下为示例:

#include <windows.h>
#include <stdio.h>
#pragma hdrstop

void main()
{
 HANDLE hToken;
 LUID setcbnameValue;
 TOKEN_PRIVILEGES tkp;
 DWORD errcod;
 LPVOID lpMsgBuf;
 LPCTSTR msgptr;

  UCHAR InfoBuffer[1000];
 PTOKEN_PRIVILEGES ptgPrivileges = (PTOKEN_PRIVILEGES) InfoBuffer;
 DWORD infoBufferSize;
 DWORD privilegeNameSize;
 DWORD displayNameSize;
 char privilegeName[500];
 char displayName[500];
 DWORD langId;
 UINT i;

  if ( ! OpenProcessToken( GetCurrentProcess(),
  TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
 {
  puts( "OpenProcessToken" );
  return;
 }

  // ---------------------------------------------------------------------
 // enumerate currently held privs (NOTE: not *enabled* privs, just the
 // ones you _could_ enable as in the last part)

  GetTokenInformation( hToken, TokenPrivileges, InfoBuffer,
  sizeof InfoBuffer, &infoBufferSize);

  printf( "Account privileges: \n\n" );
 for( i = 0; i < ptgPrivileges->PrivilegeCount; i ++ )
 {
  privilegeNameSize = sizeof privilegeName;
  displayNameSize = sizeof displayName;
  LookupPrivilegeName( NULL, &ptgPrivileges->Privileges[i].Luid,
   privilegeName, &privilegeNameSize );
  LookupPrivilegeDisplayName( NULL, privilegeName,
   displayName, &displayNameSize, &langId );
  printf( "%40s (%s)\n", displayName, privilegeName );
 }

  //----------------------------------------------------------------------
 // enable SeTcbPrivilege: lookup, adjust token privs

  if ( !LookupPrivilegeValue( NULL, SE_TCB_NAME, &setcbnameValue ) )
 {
  puts( "LookupPrivilegeValue" );
  return;
 }

  tkp.PrivilegeCount = 1;
 tkp.Privileges[0].Luid = setcbnameValue;
 tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

  AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp,
  NULL, NULL );

  errcod = GetLastError();
 if ( errcod != ERROR_SUCCESS )
 {
  FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
   FORMAT_MESSAGE_FROM_SYSTEM, NULL, errcod,
   MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ),
   (LPTSTR) &lpMsgBuf, 0, NULL );

    msgptr = (LPCTSTR) lpMsgBuf;
  printf( "err %d: %s\n", errcod, msgptr );
  return;
 }
}

在VC6.0 Sp5 Win200Pro 下编译测试通过。