Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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
Windows 在CreateProcess之后修改STARTUPINFO_Windows_Winapi - Fatal编程技术网

Windows 在CreateProcess之后修改STARTUPINFO

Windows 在CreateProcess之后修改STARTUPINFO,windows,winapi,Windows,Winapi,我希望能够在调用CreateProcess后立即更改STARTUPINFO值(挂起) 因此,新的远程/子进程一启动就可以获得定制的GetStartupInfo值 我怎样才能做到这一点 更多信息: 我想将任意数据传递给子进程。 关于本文:可以通过STARTUPINFO结构中的reserved2成员来实现。此方法有效,但限制为65536字节。要传递超过65536字节的数据,理论上的解决方案是: 创建进程(挂起) 在子进程中使用VirtualAllocEx分配空间 使用WriteProcessMemo

我希望能够在调用
CreateProcess
后立即更改
STARTUPINFO
值(挂起)

因此,新的远程/子进程一启动就可以获得定制的
GetStartupInfo

我怎样才能做到这一点

更多信息:

我想将任意数据传递给子进程。 关于本文:可以通过
STARTUPINFO
结构中的
reserved2
成员来实现。此方法有效,但限制为65536字节。要传递超过65536字节的数据,理论上的解决方案是:

  • 创建进程(挂起)
  • 在子进程中使用
    VirtualAllocEx
    分配空间
  • 使用
    WriteProcessMemory
  • 使用步骤2中的地址更改
    reserved2
    成员
  • 恢复进程
  • 子进程调用
    GetStartupInfo
    并获取数据

  • 我不知道有什么支持你的方式来满足你的要求。然而,我提出了解决根本问题的替代方案

  • 无论如何,您都不应该使用
    lpReserved2
    ,因为文档告诉您将其设置为
    NULL
  • 让父进程创建一个命名内存映射文件
  • 将此文件映射的名称作为命令行参数传递给子进程

  • 事实上,这种方法有很多变体,但命令行参数是将信息传递给新进程的方式。

    我不知道有什么支持的方式可以让您按要求执行。然而,我提出了解决根本问题的替代方案

  • 无论如何,您都不应该使用
    lpReserved2
    ,因为文档告诉您将其设置为
    NULL
  • 让父进程创建一个命名内存映射文件
  • 将此文件映射的名称作为命令行参数传递给子进程

  • 事实上,这种方法有很多变体,但命令行参数是将信息传递给新进程的方式。

    我不知道有什么支持的方式可以让您按要求执行。然而,我提出了解决根本问题的替代方案

  • 无论如何,您都不应该使用
    lpReserved2
    ,因为文档告诉您将其设置为
    NULL
  • 让父进程创建一个命名内存映射文件
  • 将此文件映射的名称作为命令行参数传递给子进程

  • 事实上,这种方法有很多变体,但命令行参数是将信息传递给新进程的方式。

    我不知道有什么支持的方式可以让您按要求执行。然而,我提出了解决根本问题的替代方案

  • 无论如何,您都不应该使用
    lpReserved2
    ,因为文档告诉您将其设置为
    NULL
  • 让父进程创建一个命名内存映射文件
  • 将此文件映射的名称作为命令行参数传递给子进程


  • 实际上,这种方法有很多变体,但命令行参数是将信息传递给新进程的方式。

    显然要做的事情是在调用
    CreateProcess
    之前更改值。可能这不是一个选项,因为您没有调用
    CreateProcess
    。这让我觉得有一些外部过程,注射,钩住骗局正在进行。如果我们知道那是什么会有帮助吗?@DavidHeffernan你是对的。我想扩展/打破
    lpReserved2
    限制,即65536字节。如果我能够用上一次调用的结果填充这个值,理论上我可以存储RAM所能提供的字节数。我真的不理解这个注释。尽管如此,我认为你应该编辑这个问题来添加更多的细节。也许有人会有不同的方法来解决您的根本问题。为什么不使用标准IPC让其他进程知道在哪里可以找到内存?您不需要窗口句柄。内存映射文件将是这方面的完美选择。文档在
    lpReserved2
    上清晰可见。不要用它。将文件映射的名称作为命令行参数传递,这很好。显然,要做的事情是在调用
    CreateProcess
    之前更改值。可能这不是一个选项,因为您没有调用
    CreateProcess
    。这让我觉得有一些外部过程,注射,钩住骗局正在进行。如果我们知道那是什么会有帮助吗?@DavidHeffernan你是对的。我想扩展/打破
    lpReserved2
    限制,即65536字节。如果我能够用上一次调用的结果填充这个值,理论上我可以存储RAM所能提供的字节数。我真的不理解这个注释。尽管如此,我认为你应该编辑这个问题来添加更多的细节。也许有人会有不同的方法来解决您的根本问题。为什么不使用标准IPC让其他进程知道在哪里可以找到内存?您不需要窗口句柄。内存映射文件将是这方面的完美选择。文档在
    lpReserved2
    上清晰可见。不要用它。将文件映射的名称作为命令行参数传递,这很好。显然,要做的事情是在调用
    CreateProcess
    之前更改值。可能这不是一个选项,因为您没有调用
    CreateProcess
    。这让我觉得有一些外部过程,注射,钩住骗局正在进行。如果我们知道那是什么会有帮助吗?@DavidHeffernan你是对的。我想扩展/打破
    lpReserved2
    限制,即65536字节。如果我能够用以前的
    Vir的结果填充这个值