句柄-文件句柄和目录句柄结构

|| 语言:C 操作系统:Windows 我的应用程序使用nt级api构建框架,并且必须操纵文件和目录句柄。 在Zwopenfile或zwcreate文件上,结果为
HANDLE
。通常,“ 0”的值类似于0x00000024、28,2c ...等。 当我将其转换为
LPBYTE
以查看内容时。 Visual Studio显示“无法评估表达式”。我从创建/打开文件api返回的“ 0”不是指向内存位置的指针。但是,Windows使用该值并执行文件操作。
Ntquerydirectory
对象为我提供有关手柄的信息。但是,Windows如何实现此功能尚不清楚。 谁能给它照亮。     
已邀请:
        这就是所谓的“不透明值”,这意味着“完全由Windows决定如何在内部完成操作。例如,它可能是某些全局表中的索引,您无法直接访问它”程序-Windows只是知道如何到达那里,您甚至不应该考虑这样做。     
        句柄存储在只能从内核代码访问的表中。如果您对Windows内核的工作方式感兴趣,可能会发现Mark Russinovitch博客或驱动程序开发很有趣。     
        我所知道的最后一本书是此类东西的很好参考,这是Mark E. Russinovitch和David A. Solomon撰写的Inside Windows 2000。尽管显然已经过时了,但本书中的许多内容仍然有意义。 Google的“ Inside Windows 7”中的链接,链接到Russinovitch的演讲视频和一些我无法保证但似乎是主题的书籍。     
        HANDLE实际上是指向包含各种字段的结构的指针,这些字段通常指向某些内核对象。在C语言中进行编程时,通常使用HANDLES来具有面向对象编程的概念。 使用WinDbg调试时,您有一个名为!handle的扩展,可以显示有关给定句柄的各种信息。 Windows Internals一书(由Mark Russinovich撰写)详细介绍了此机制以及许多其他Windows机制。 也许您会发现此讨论很有用:什么是Windows句柄? 另请参阅Mark撰写的此博客文章:http://blogs.technet.com/b/markrussinovich/archive/2009/09/29/3283844.aspx。它包含许多信息,可以帮助您回答问题。     

要回复问题请先登录注册