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*型也可以。 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Linux发邮件shell脚本与群发邮件shell脚本

    Linux发邮件shell脚本与群发邮件shell脚本Linux发邮件shell脚本与群发邮件shell脚本说明:因为明天统计疫情健康打卡,需要通知同学完成打卡,最开始是一个人一个人的进行QQ通知,为了方便通知,我利用Linux写了一个shell定时群发邮件提醒脚本,如果大家有需要的可以参考我的方式方法下面我将我进行配置的方法分享给大家1.Linux安装邮件服务因为Linux默认没有安装mail邮件服务,我们将进行安装,输入安装命令等待几秒即可安装成功yuminstallmailx2.配置发送邮件服务即你的邮箱2.1在命令行中输入

    2022年10月20日
  • 基于Proxy思想的Android插件框架

    基于Proxy思想的Android插件框架

  • mysql判断表分区是否存在_mysql 分区表

    mysql判断表分区是否存在_mysql 分区表CREATETABLE`fs_orders_funds_detail_sp32`(`id`int(11)NOTNULLAUTO_INCREMENT,`confirm_time`datetimeNOTNULLDEFAULT’0000-00-0000:00:00′,`order_id`varchar(50)DEFAULTNULLCOMMENT’平台单号’,`updat…

  • 图片加载失败替换图片解决方案

    图片加载失败替换图片解决方案图片加载失败在不同浏览器表现有差异,比如google可能会一片空白、img的宽高是0*0,ie会在图片位置会出现一个碎片图标,火狐会显示一个边框像这样:一个页面如果很多这种好难看,一般会用默认图片替换显示,解决方法:1、css方案:不好使。在img的伪类加替换图片,但火狐的img没有伪类,google有,有时候就算给img标签加了width、height也没有,图片加载失败img的宽高…

  • SynchronousQueue用例「建议收藏」

    SynchronousQueue用例「建议收藏」SynchronousQueue是无缓冲区的阻塞队列,即不能直接向队列中添加数据,会报队列满异常,如下所示:importjava.util.concurrent.SynchronousQueue;publicclassSynchronousQueueExp{ publicstaticvoidmain(String[]args){ SynchronousQueu…

  • php spreadsheet导入

    php spreadsheet导入/***导入*/publicfunctionimport(){//composer安装//composerrequirephpoffice/phpspreadsheet$upload_file=$_FILES[‘file’][‘tmp_name’];//文件类型//$ext=strtolower(pathinfo($_FILES[‘file…

发表回复

您的电子邮箱地址不会被公开。

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