为什么RegCloseKey存在(当CloseHandle似乎执行相同的功能时)?

时间:2012-03-06 21:54:17

标签: c++ c windows winapi

前几天我查看了DuplicateHandle的文档,发现DuplicateHandle能够复制注册表项句柄(HKEY)。在SysInternals书中读到这一点似乎表明注册表键句柄是普通的内核对象,类似于文件句柄。但CloseHandle无法关闭HKEYRegCloseKey无法关闭其他类型的内核对象。

为何区别?

1 个答案:

答案 0 :(得分:14)

这是因为在内核中只实现了注册表的一部分功能。它包括使用本地注册表项的基本操作(创建,删除,读取,写入等)。

其余的功能在advapi32.dll中实现,并在用户模式下工作:

  • 使用RegConnectRegistry
  • 访问远程注册表
  • 访问HKEY_PERFORMANCE_DATA
  • 将Win32注册表表示转换为本机表示
  • WOW64在64位系统上的注册表重定向(适用于32位应用程序)

该功能的内核部分可通过Native API获得:NtCreateKeyNtOpenKey等。将这些函数与Win32 API进行比较时,可以看出Native API使用&# 34;经典" HANDLE描述符而不是HKEY。