前几天我查看了DuplicateHandle
的文档,发现DuplicateHandle能够复制注册表项句柄(HKEY
)。在SysInternals书中读到这一点似乎表明注册表键句柄是普通的内核对象,类似于文件句柄。但CloseHandle
无法关闭HKEY
,RegCloseKey
无法关闭其他类型的内核对象。
为何区别?
答案 0 :(得分:14)
这是因为在内核中只实现了注册表的一部分功能。它包括使用本地注册表项的基本操作(创建,删除,读取,写入等)。
其余的功能在advapi32.dll中实现,并在用户模式下工作:
RegConnectRegistry
HKEY_PERFORMANCE_DATA
该功能的内核部分可通过Native API获得:NtCreateKey
,NtOpenKey
等。将这些函数与Win32 API进行比较时,可以看出Native API使用&# 34;经典" HANDLE描述符而不是HKEY。