获取HANDLE到内存区域和HANDLE实际上是什么

时间:2013-09-01 15:46:04

标签: windows winapi nt-native-api

  1. 如何获取内存区域或映射文件的HANDLE?
  2. 实际上HANDLE是什么?
  3. 请不要这样回答:

      

    句柄是对某些资源的抽象引用,e是由您提供的   另一方(通常是OS),你可以交回参考   那资源。

    我对技术方感兴趣

3 个答案:

答案 0 :(得分:1)

HANDLE只是某些数据的任意组合。

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

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

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

http://msdn.microsoft.com/en-us/library/windows/apps/ms724211%28v=vs.85%29.aspx

  

访问令牌

     

通讯设备

     

控制台输入

     

控制台屏幕缓冲区

     

事件

     

文件

     

文件映射

     

I / O完成端口

     

工作

     

邮筒

     

内存资源通知

     

互斥

     

命名管道

     

     

过程

     

信号量

     

主题

     

交易

     

等待计时器

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

Windows中的句柄曾经是指向对象内存位置的指针。在胜利3.1天,一些程序投下某种手柄,看看背后是什么。今天据我所知,这是不可能的,它们是你和系统之间进行通信的简单唯一标识符或标记。
更多信息http://en.wikibooks.org/wiki/Windows_Programming/Handles_and_Data_Types来自msdn的更多信息读取16中的段落对象位窗口http://msdn.microsoft.com/en-us/library/ms810501.aspx