OpenProcessToken()运用心得

OpenProcessToken()运用心得   使用OpenProcessToken()用于得到指定进程的访问令牌,而第三个参数定义设置不正确可能导致该函数调用失败,以下举例说明: HANDLEhProc;hProc=GetCurrentProcess(); //Method1-Error(998)HANDLE*hToken;OpenProcessToken(hProc,TOKEN_ADJUST_PRIV

大家好,又见面了,我是你们的朋友全栈君。

    使用OpenProcessToken()用于得到指定进程的访问令牌,而第三个参数定义设置不正确可能导致该函数调用失败,以下举例说明:

 

HANDLE hProc;
hProc = GetCurrentProcess();

 

// Method1 – Error(998)
HANDLE *hToken;
OpenProcessToken(hProc, TOKEN_ADJUST_PRIVILEGES, hToken);

 

// Method2 – Success
HANDLE hToken;
OpenProcessToken(hProc, TOKEN_ADJUST_PRIVILEGES, &hToken);

 

以上是获取访问令牌的调用,OpenProcessToken()函数原型如下:

 

BOOL WINAPI OpenProcessToken(
  __in          HANDLE ProcessHandle,
  __in          DWORD DesiredAccess,
  __out         PHANDLE TokenHandle
);

 

方法1和方法2都使用HANDLE类型定义,方法1定义指针,方法2定义变量,但方法1调用函数返回失败(通过GetLastError()可知错误代码为998——拒绝访问);方法2调用函数则能成功获取访问令牌。为什么出现这种情况呢?WinNT.h中相关的定义引起,如下:

 

#ifdef STRICT
typedef void *HANDLE;
#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
#else
typedef PVOID HANDLE;
#define DECLARE_HANDLE(name) typedef HANDLE name
#endif
typedef HANDLE *PHANDLE;

 

由此可见可以把任意一种类型的指针赋值给PVOID型,因此PVOID*赋给PVOID型是可以的,而把PVOID型赋值给PVOID*型也可以。 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152932.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月25日 下午1:00
下一篇 2022年6月25日 下午1:00


相关推荐

  • SheetJS中文文档-js导出Excel脚本库[通俗易懂]

    SheetJS中文文档-js导出Excel脚本库[通俗易懂]转载自GITHUB用户rockboom的翻译文档SheetJs下载:GITHUB地址|CSDN下载地址SheetJSjs-xlsxSheetJS是用于多种电子表格格式的解析器和编写器。通过官方规范、相关文档以及测试文件实现简洁的JS方法。SheetJS强调解析和编写的稳健,其跨格式的特点和统一的JS规范兼容,并且ES3/ES5浏览器向后兼容IE6。目前这个是社区版,我们也提供了性能增强的专业版,专业版提供样式和专业支持的附加功能。

    2022年5月6日
    1.6K
  • echarts地图文档_js下载本地文件

    echarts地图文档_js下载本地文件Echarts实现中国地图,含官方地图资源china.js

    2022年8月30日
    5
  • C++ 使用system()实现锁定屏幕「建议收藏」

    C++ 使用system()实现锁定屏幕「建议收藏」除了使用函数“LockWorkStation()”实现锁定屏幕,参考:http://www.cnblogs.com/Satu/p/8183081.html此外,也可以使用函数“system()”来实现。IDE:Code::Blocks16.01操作系统:Windows7x641#include<windows.h>23intmain(…

    2022年7月21日
    19
  • 有趣的黑客网站 | 伪装成黑客高手,像电影黑客一样打字如飞

    有趣的黑客网站 | 伪装成黑客高手,像电影黑客一样打字如飞当黑客,门槛太高;装黑客,那就太容易了。。今天刷知乎的时候无意中看到一个非常神奇的网站,能让你瞬间变身成电影中的黑客,操作出一系列看起来非常牛逼且装逼的功能。你只管噼里啪啦打字,而出来的都是规矩的程序编码,时不时还可以插入一些特效,最后一回车,导弹就飞出去了。先把这个神奇的网站网址贴出来:http://geektyper.com/index.html#tab1网站的首页如下…

    2022年7月15日
    20
  • TerminateThread函数学习

    TerminateThread函数学习终结一个线程 BOOLWINAPITe Inout nbsp nbsp HANDLEhThrea In nbsp nbsp nbsp nbsp nbsp DWORDdwExitC ParametershT nbsp in out 要终结线程的句柄 这个句柄必须有 THREAD TERMINATE 权利 dwExitCode nbsp in 线程的退出值

    2026年3月19日
    2
  • java snmp walk_snmpwalk用法

    java snmp walk_snmpwalk用法snmpwalk语法:snmpwalk交换机或路由器IP地址-cSNMP读密码-v1或2(代表SNMP版本)OID(对象标示符)用法举例:1、snmpwalk-cpublic-v1-mALL192.168.30.49.1.3.6.1.2.1.25.1得到取得windows端的系统进程用户数等2、snmpwalk-cpublic-v1-mALL192…

    2022年6月30日
    30

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号