【问题标题】:CreateProcess from a Handle and not from PathCreateProcess 从句柄而不是从路径
【发布时间】:2014-04-29 15:14:27
【问题描述】:

有没有办法从File Handle 返回的CreateFile() 创建一个进程?

CreateProcess() 函数只能从文件路径创建进程,我找不到任何方法从File Handle 创建进程

编辑:我需要直接从File Handle 创建一个进程。我无法从路径创建进程。

【问题讨论】:

  • 您可以从文件句柄中获取文件名。您是否有理由需要从句柄创建进程?
  • 是的。我需要直接从文件句柄创建一个进程。我无法从路径创建进程

标签: c++ handle createprocess


【解决方案1】:

不,您不能直接从文件句柄创建进程。但是您可以使用GetFinalPathNameByHandle 从句柄中获取文件路径,然后在路径上使用 CreateProcess。

注意 GetFilePathNameByHandle API 仅在 Vista 及以上版本中可用,因此如果您想支持较旧的操作系统,您必须发挥创造力.. :) 有关详细信息,请参阅 this article

【讨论】:

  • 谢谢,但我需要直接从文件句柄创建进程
  • @user1438233 你可以看到 CreateProcess API 没有处理。它需要一条路径。有一种方法可以从句柄获取路径,但没有办法只在句柄上调用 CreateProcess。论坛化的问题的答案是“否”。
  • @user1438233 出于纯粹的好奇 - 你试图做什么阻止你使用这种间接方法?
  • 我以 CreateFile() 支持但 CreateProcess() 不支持的特殊方式打开文件,因此我必须使用 CreateFile 来打开文件。
【解决方案2】:

http://pastebin.com/WvWABiRu 可以帮到你。如果您查看本机 API (NtCreateProcess),您只需要一个文件句柄(您可以为 RtlCreateProcessParameters afaik 指定一个随机路径)。但是你必须做很多工作才能让这个过程真正执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多