Почему существует RegCloseKey (когда функция CloseHandle выполняет одну и ту же функцию)? - программирование
Подтвердить что ты не робот

Почему существует RegCloseKey (когда функция CloseHandle выполняет одну и ту же функцию)?

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

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

4b9b3361

Ответ 1

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

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

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

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