Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 具有继承句柄的Duplicatehandle_C++_Winapi - Fatal编程技术网

C++ 具有继承句柄的Duplicatehandle

C++ 具有继承句柄的Duplicatehandle,c++,winapi,C++,Winapi,我有以下流程: 过程A: 创建用户令牌 创建挂起的进程 使用DuplicateHandle复制在上述步骤中创建的usertoken,并将bInherithandle传递为true 恢复子进程 将duplicatehandle发送到子进程 子进程B: 接收父进程发送的句柄并将其存储为句柄(全局变量) !!handle显示了handle和!dumptoken转储所有SID信息。所以句柄是有效的 使用bInheritHandle=true调用createprocess 子进程C:(由B生成)

我有以下流程:

  • 过程A:
    • 创建用户令牌
    • 创建挂起的进程
    • 使用DuplicateHandle复制在上述步骤中创建的usertoken,并将bInherithandle传递为true
    • 恢复子进程
    • 将duplicatehandle发送到子进程
  • 子进程B:
    • 接收父进程发送的句柄并将其存储为句柄(全局变量)
    • !!handle显示了handle和!dumptoken转储所有SID信息。所以句柄是有效的
    • 使用bInheritHandle=true调用createprocess
  • 子进程C:(由B生成)
    • 我看不到你的把手!处理
    • 如果我尝试!处理或!具有来自B的特定句柄值的lsaexts.dumptoken出现错误,表明其无效
  • 我做错了什么


    根据MSDN文档,如果进程是使用设置为true的binheritedhandles生成的,那么子进程应该能够使用父进程中的每个句柄,该父进程是在其创建过程中使用设置为true的binheritedhandles创建的。

    您确实将句柄值“发送”给进程C,是吗?是,在创建进程C时将句柄值从B添加到环境块,子进程C从环境变量读取句柄值。但该句柄值在子进程C中无效。问题是A在启动B后创建可继承句柄,因此B首先不应该有句柄的副本。看起来OP在SO上不再活动了,所以我投票决定结束。