《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 );

       

posted @ 2012-12-14 15:03  iThinking  阅读(222)  评论(0编辑  收藏  举报