2011-08-31 34 views
3

我希望能够检测给定的exe是否是以编程方式shellex,或者是否已经在CMD.EXE中以交互方式输入和执行。是否可以检测到.exe是如何启动的?

有没有什么关于启动exe的方式,表明启动它的机制?

上下文:Windows XP,Visual Studio 6种语言。

+0

@Chris Pietschmann - 更好的标签。谢谢。 – bugmagnet

回答

5

有可能是一个更简单的方式,但我能想到的唯一的办法是检查父进程名,这涉及几个步骤:

  1. Get the ID of the parent process
  2. Get the handle of the process,使用ID。
  3. 使用GetModuleFileNameEx找到句柄(并将NULL作为模块)以获取可执行文件的名称。
  4. 检查可执行文件的名称是否是cmd.exe或其他。

请记住,当您(或同时)执行此检查时,父进程可能已经不存在。

编辑:

如果你的程序是一个控制台应用程序,您还可以检查它在运行控制台如果它是从CMD运行时,它通常会使用相同的控制台。因此,例如,您可以使用GetConsoleTitle,并查看它是否为“命令提示符”。这可能不适用于本地化或不同版本的Windows,但如果您限制了个案,则很容易。您也可以使用GetConsoleWindowGetWindowThreadProcessId而不是步骤1和2.

3

您可以通过检查父进程来区分说CMD和资源管理器,但不能分辨是否由于用户操作而发生。另外,AFAIK启动一个进程的所有方法都会导致相同的NtCreateProcess/PspCreateProcess调用,因此您无法知道哪个API被使用。

相关问题