【发布时间】:2015-11-23 13:58:18
【问题描述】:
我被介绍给 C++。我对“句柄”的想法感到困惑这是我今天写的一个小sn-p:
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, a valid pid);
printf("%d", hProcess);
我发现每次输出都是“48”。这是有道理的,因为句柄是数组索引等资源的标识符。但即使我将 PROCESS_ALL_ACCESS 替换为其他标志,返回值仍然相同。打开手柄时究竟发生了什么?操作系统如何知道句柄的访问权限?如果句柄是资源的标识符,为什么下面的代码不起作用?
HANDLE hProces = 48;
此外,调用 CloseHandle(hProcess) 时发生了什么?为什么输出还是48?
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, a valid pid);
CloseHandle(hProcess);
printf("%d\n", hProcess);
【问题讨论】:
-
一个把手就像一个停车位。你开车说“我想停一辆蓝色的本田思域”,然后对方说“停在 48 号空间”。如果你开着一辆红色的丰田凯美瑞开车,这个人可能仍然会说“去 48 号空间停车”。但是,如果您只是开车进入并停在 48 号停车位而不告诉任何人,那么当您稍后回来说“我想要 48 号停车位的车”时,停车人会说“我不知道你是什么谈。”合上把手是在告诉停车的人,“我现在要开车了。我在 48 号车位。”
-
或者它就像一个把手,您可以将它连接到您碰巧拥有的任何锅上。您需要拿起一个锅,抓住一个把手并将其连接到锅上。直到你拆下它,那个把手才能抓住那个锅。
标签: c++ winapi visual-c++ handle