小编Der*_*gee的帖子

带有 EXTENDED_STARTUPINFO_PRESENT 标志的 CreateProcessW() 返回错误代码 87?

我正在努力让 msvc 下的 CreateProcessW 使用 EXTENDED_STARTUPINFO_PRESENT 选项。我创建了一个最小的示例,它调用 ping.exe 并将标准输出重定向到句柄。如果没有 EXTENDED_STARTUPINFO_PRESENT 选项,这也可以正常工作(但不是线程安全的),因此尝试将句柄显式传递给子进程,如下面的最小示例所示。

#include <windows.h> 
#include <processthreadsapi.h>
#include <WinBase.h>
#include <iostream>
using namespace std;


void TestFunctionW()
{
    STARTUPINFOEXW startup_info = { 0 };
    PROCESS_INFORMATION process_info = { 0 };

    SECURITY_ATTRIBUTES saAttr;

    // Set the bInheritHandle flag so pipe handles are inherited. 
    saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
    saAttr.bInheritHandle = TRUE;
    saAttr.lpSecurityDescriptor = NULL;

    HANDLE          m_hChildStd_OUT_Rd;
    HANDLE          m_hChildStd_OUT_Wr;

    // Create a pipe for the child process's STDOUT. (m_hChildStd_OUT_Wr->m_hChildStd_OUT_Rd)
    if (!CreatePipe(&m_hChildStd_OUT_Rd, &m_hChildStd_OUT_Wr, &saAttr, 0)) {
        std::cerr << …
Run Code Online (Sandbox Code Playgroud)

c++ winapi visual-c++

1
推荐指数
1
解决办法
111
查看次数

标签 统计

c++ ×1

visual-c++ ×1

winapi ×1