Windows 获取内存区域的句柄以及实际的句柄 如何处理内存区域或映射文件 实际上是什么

Windows 获取内存区域的句柄以及实际的句柄 如何处理内存区域或映射文件 实际上是什么,windows,winapi,nt-native-api,Windows,Winapi,Nt Native Api,请不要这样回答: 句柄是对由提供给您的某些资源的抽象引用 另一方(通常是操作系统),您可以将其交回参考 这个资源 我对技术方面感兴趣一个句柄只是一些数据的任意金块 例如,它由以下API返回:CreateFile()和OpenProcess()——正如您所知,这两个API非常不同,但返回的数据类型完全相同 或者,对于内存,您可以访问堆(从GetProcessHeap()以句柄返回),然后对其使用HeapAlloc() 正如MSDN所指出的,它在许多其他环境中使用: 访问令牌 通信设备 控制台输入

请不要这样回答:

句柄是对由提供给您的某些资源的抽象引用 另一方(通常是操作系统),您可以将其交回参考 这个资源


我对技术方面感兴趣

一个
句柄
只是一些数据的任意金块

例如,它由以下API返回:
CreateFile()
OpenProcess()
——正如您所知,这两个API非常不同,但返回的数据类型完全相同

或者,对于内存,您可以访问堆(从
GetProcessHeap()
句柄返回),然后对其使用
HeapAlloc()

正如MSDN所指出的,它在许多其他环境中使用:

访问令牌

通信设备

控制台输入

控制台屏幕缓冲区

事件

文件

文件映射

I/O完成端口

工作

邮箱

内存资源通知

互斥

命名管道

烟斗

过程

信号量

线

交易

等待计时器


如果您只是想知道它是什么:

在简单的操作系统中,这样的句柄实际上只是指向内核空间中结构的指针。该结构包含有关句柄本身的更多信息(例如指向文件结构的指针)。更复杂的操作系统(如Windows)将在尝试访问此结构之前检查句柄的有效性

因为句柄在Windows中是不透明的(这意味着:Microsoft说:不要解释它-它只是一个32位数字),所以句柄的实际含义在不同版本的Windows中可能不同。即使在一个版本中(例如Vista 32位与Vista 64位或XP SP2与XP SP3),其(内部)含义也可能不同


Microsoft可以随时更改其含义(在Windows 95中可能是指针,但在Windows 8中可能是数组的索引,谁知道呢)。

Windows中的句柄过去是指向对象内存位置的指针。在win 3.1版中,一些程序会施展某种把柄,看看背后是什么。据我所知,现在这已经不可能了,它们是您和系统之间通信的简单唯一标识符或令牌。
更多信息
更多来自16位窗口中的msdn read段落对象

内存区域没有“
句柄”
这样的东西。如果你想要高质量的答案,你需要提供一个好的问题。有关详细信息,请参阅。@i可从
GetPrcoessHeap()
@PhoenixX_2返回的内容中暗示内存区域的
句柄
,以及内存映射文件如何适合此图片?当然,我们可以玩一下这个猜谜游戏。或者,海报可以问一个特定的问题。后者会更有价值。@I可检测内存映射文件(
CreateFileMapping()
)也是
HANDLE
s。我知道。。。但是进程堆和文件映射之间的连接在哪里呢?我看不到。你知道吗?句柄不是指针。还有,手柄有什么缺陷?换句话说:您将如何实现可以使用多个类型的
WaitForMultipleObjects
。@IInspectable实际上,
HANDLE
是从一个空*中导出的
typedef
d。我澄清了我对重大缺陷的评论。无论你是陈述你的观点还是其他人的观点,请花时间解释一下。或者不要在没有理由的情况下发表意见。对于
typedef
,C/C++中的每个对象都必须有一个类型。选择一个
void*
作为许多句柄的类型(如
HWND
)。不过,这些不是指针。它们是系统控制列表中的索引。@I不可检测我删除了意见评论以减少您的不安。我不是不安,只是在等待第一个问题的答案。那么,如何使用缺陷较少的
句柄
类型实现它呢?您的
无缺陷的处理
类型外观如何?我感兴趣,不是心烦。