Почему существует RegCloseKey (когда, похоже, CloseHandle выполняет ту же функцию)? - PullRequest
16 голосов
/ 07 марта 2012

Я просматривал документы для DuplicateHandle на днях и заметил, что DuplicateHandle может копировать дескрипторы ключей реестра (HKEY s). Читая об этом немного больше в книге SysInternals, похоже, указывает на то, что дескрипторы ключей реестра являются простыми объектами ядра, похожими на дескрипторы файлов. Однако CloseHandle не может закрыться HKEY с, а RegCloseKey не может закрывать другие виды объектов ядра.

Почему различие?

1 Ответ

14 голосов
/ 07 марта 2012

Это потому, что в ядре реализована только часть функциональности реестра.Он включает в себя основные операции (создание, удаление, чтение, запись и т. Д.) Для работы с локальными ключами реестра.

Остальные функции реализованы в advapi32.dll и работают в пользовательском режиме:

  • Доступ к удаленному реестру с использованием RegConnectRegistry
  • Доступ кHKEY_PERFORMANCE_DATA
  • Преобразование представления реестра Win32 в собственное представление
  • Перенаправление реестра WOW64 в 64-разрядных системах (для 32-разрядных приложений)

Часть ядрафункциональность доступна через Native API: NtCreateKey, NtOpenKey и т. д. При сравнении этих функций с Win32 API видно, что Native API использует «классические» дескрипторы HANDLE вместо HKEY.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...