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不可检测我删除了意见评论以减少您的不安。我不是不安,只是在等待第一个问题的答案。那么,如何使用缺陷较少的句柄类型实现它呢?您的无缺陷的处理类型外观如何?我感兴趣,不是心烦。