GetStdHandle()如何知道我的流程是什么
How does GetStdHandle() knows what my process is?
当我调用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有来知道你从哪个进程调用它,否则它就不能做任何事情。)
相关文章:
- 这是什么类型的C++语法,我应该采取什么步骤来理解这一点
- 这在C++是什么类型的错误?
- 有效创建数字签名的正确方法是什么?我可以使用DSA_sign_setup()吗?
- 通过包含<iostream>头文件,它的所有 8 个函数是写入我的代码,还是只写入我在程序中使用的函数?
- C ,二进制树的高度,而不是检查我的子树是否为空,而是在检查我的子树是否是叶子节点.抛出分割故障
- 是将我的shared_ptr切片的boost图
- 此CMAKE错误意味着什么?我的变量设置为未发现
- 是从我的圆形链接列表中删除方法的定义良好
- 此代码的输出是什么?我在这里错过了什么吗?
- 只需修改图像的开始,而不是按照我的意愿进行修改
- 这是什么类型的行为
- MSG结构的用途是什么?它的参数代表什么
- 具有多个非可选参数的转换构造函数是什么样子的?为什么它有意义
- 将派生类对象分配给基类对象时会发生什么(我的意思是对象断言,而不是指针)
- 数组中元素的前置任务是什么?我如何找到它
- 这是什么样式的组装(英特尔,att..等等?以及我如何生产它
- 当我在Unorder容器中使用位集时,散列函数是什么样子的
- **编译器错误** - getline() 函数不接受第一个参数"std:ifstream"是什么我的问题?
- 在我的神经网络程序中使用的最有效的数据结构是什么?我的程序需要动态分配吗?
- 什么是崩溃我的应用程序的异常,给定一个调用堆栈与UnhandledExceptionFilter