windows 开发中的句柄

    和大多数开发Windows菜鸟程序员一样,对于句柄这个概念我曾一次次的试图去理解,然而大多数的结果就是很明确它是一种WINDOWS资源标识,代表一类资源只有API有能力访问和操作。然后就没有下文了,于是乎今天我又对句柄这个概念展开攻击。

    句柄按照我自己的理解它确实是一个资源标识符,但是是一种特殊的资源,即内核对象。

    所以要理解句柄就首先去知道内核对象是个什么东西,所谓内核对象在Windows内核编程中是这么定义的:内核对象由API创建,每个内核对象一种数据结构,它对应一块内存,由操作系统内核创建并且只能有操作系统内核访问。在此数据结构中少数成员如安全描述符合使用计数是所有对象都有的,其他的一些成员有对象类型决定。调用创建内核函数后会返回一个句柄,它标识了所创建的内核对象,此句柄可以由进程的任何线程使用,在32位系统中,句柄是一个32位的值,64位系统中则是64位值。

    听起来句柄和指针很像,我们可以这样理解,在系统中执行的每个进程都有一个句柄表,所以每个句柄记录了此进程所使用的每个内核对象的索引。同时我们应该注意尽管句柄指向的是操作系统内存,但这并不以意味着我们可以将一个进程的句柄传给另一个进程这是不允许的,跨进程的内核对象的传递需要另外个一个概念。

    内核对象的例子很多比如:进程,线程,画布等都属于内核对象,一般创建时需要指定安全属相的都为内核对象。

 

    所以初学者我们必须将句柄和内核对象的理解紧密联系在一起。

你可能感兴趣的:(windows 开发中的句柄)