GetStdHandle()如何知道我的流程是什么

How does GetStdHandle() knows what my process is?

本文关键字:是什么 我的 何知道 GetStdHandle      更新时间:2023-10-16

当我调用GetStdHandle()(或对我的进程执行某些操作的其他函数)时,例如:

HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);

GetStdHandle()将返回我的进程的STDOUT句柄,但这个函数如何知道我的进程是什么,我的意思是我没有给它进程id作为参数。

好吧,让我们假设您需要传递进程ID。您将如何做到这一点?

DWORD my_id = GetCurrentProcessId();
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE, my_id);

显然,如果我们要多次调用这个函数,我们可以通过将其放入一个辅助函数中来节省一些重复的工作:

HANDLE MyGetStdHandle(DWORD nStdHandle)
{
  DWORD my_id = GetCurrentProcessId();
  return GetStdHandle(STD_OUTPUT_HANDLE, my_id);
}

但是见鬼,很多人都需要这个功能。也许我们应该把它放进图书馆。。。或API。。。事实上,让我们将其添加到Windows API并调用它GetStdHandle()。

他们做到了。

(好吧,它并不是真的那样工作,但我认为它说明了这一点。Windows API来知道你从哪个进程调用它,否则它就不能做任何事情。)

相关文章: