《Windows核心编程》——内核对象
内核对象
- 每个内核对象只是内核分配的一个内存块,并且只能由内核访问。
- 应用程序通过API+句柄访问内核对象。
- 内核对象包含一使用计数的数据成员,每多一个进程访问该对象,计数加一,反之减一。计数为0,对象被销毁。
- 每个进程都有一个内核对象句柄表,保存该进程使用内核对象的句柄。
- 当进程终止运行时,系统会自动扫描进程的句柄表。如果该表拥有任何无效项目(即在终止进程运行前没有关闭的对象),系统将关闭这些对象句柄。如果这些对象中的任何对象的使用计数降为0,那么内核便撤消该对象。
跨进程共享内核对象
- 继承对象句柄:(WinCE不支持)
- 父子进程
- 句柄值相同
- 父进程通过命令行等方式通知子进程句柄值
- 命名内核对象:
- 对象名惟一性的问题
- 复制对象句柄:
-
1 BOOL DuplicateHandle( 2 HANDLE hSourceProcessHandle, 3 HANDLE hSourceHandle, 4 HANDLE hTargetProcessHandle, 5 LPHANDLE lpTargetHandle, 6 DWORD dwDesiredAccess, 7 BOOL bInheritHandle, 8 DWORD dwOptions 9 );
-