Функция CmCallbackGetKeyObjectIDEx (wdm.h)

Подпрограмма CmCallbackGetKeyObjectIDEx извлекает уникальный идентификатор и имя объекта, связанные с указанным объектом раздела реестра.

Эта подпрограмма доступна начиная с Windows 8. В более ранних версиях Windows вместо этого используйте подпрограмму CmCallbackGetKeyObjectID . Дополнительные сведения см. в разделе Примечания ниже.

Синтаксис

NTSTATUS CmCallbackGetKeyObjectIDEx(
  [in]            PLARGE_INTEGER   Cookie,
  [in]            PVOID            Object,
  [out, optional] PULONG_PTR       ObjectID,
  [out, optional] PCUNICODE_STRING *ObjectName,
  [in]            ULONG            Flags
);

Параметры

[in] Cookie

Значение файла cookie, представляющее регистрацию вызывающего объекта для получения обратных вызовов фильтра реестра. Драйвер ранее получил это значение файла cookie из подпрограммы CmRegisterCallback или CmRegisterCallbackEx .

[in] Object

Указатель на объект раздела реестра. Этот параметр является значением указателя, которое получает подпрограмма обратного вызова RegistryCallback драйвера в элементе Object одной из структур REG_XXX_KEY_INFORMATION .

Предупреждение

В некоторых случаях структуры уведомлений о обратном вызове реестра могут содержать недопустимые указатели объектов, отличные от NULL. Драйверы фильтрации реестра не должны передавать такие указатели на эту подпрограмму. Дополнительные сведения см. в разделе Недопустимые указатели на объекты ключа в уведомлениях реестра.

[out, optional] ObjectID

Указатель на расположение, которое получает указатель на идентификатор ключа для раздела реестра, который представляет Объект . Этот идентификатор уникален во всех разделах реестра. Этот параметр является необязательным и может иметь значение NULL. Дополнительные сведения см. в разделе Примечания ниже.

[out, optional] ObjectName

Указатель на расположение, которое получает указатель на структуру UNICODE_STRING . Эта структура содержит имя объекта раздела реестра, указанного объектом Object . На самом деле имя объекта — это полный путь к разделу реестра, который представляет объект. Вызывающий объект отвечает за освобождение этой структуры путем вызова подпрограммы CmCallbackReleaseKeyObjectIDEx . Этот параметр является необязательным и может иметь значение NULL. Дополнительные сведения см. в подразделе "Примечания".

[in] Flags

Зарезервировано. Задайте нулевое значение.

Возвращаемое значение

CmCallbackGetKeyObjectIDEx возвращает STATUS_SUCCESS, если операция выполнена успешно. Возможные возвращаемые значения ошибки включают следующий код состояния:

Код возврата Описание
STATUS_INVALID_PARAMETER Недопустимый параметр Cookie, Object или Flags .

Комментарии

Драйверы могут использовать CmCallbackGetKeyObjectIDEx для получения идентификатора раздела реестра, имени объекта или и того, и другого, указав значения, отличные от NULL , для параметров ObjectID или ObjectName .

Вызывающий объект может получить идентификатор ключа с помощью параметра ObjectID . Если два объекта раздела реестра представляют один и тот же раздел реестра, идентификаторы ключей, полученные из CmCallbackGetKeyObjectIDEx для этих двух объектов, идентичны. Если имя раздела реестра меняется, идентификатор ключа, полученный из CmCallbackGetKeyObjectIDEx , не изменяется. Вызывающий объект может использовать идентификатор ключа для надежного отслеживания доступа к определенному разделу реестра с помощью нескольких объектов ключей и даже при изменении имени раздела реестра.

Вызывающий объект может получить имя объекта с помощью параметра ObjectName . Хранилище для структуры UNICODE_STRING , содержащей имя объекта, остается действительным до тех пор, пока вызывающий объект не вызовет CmCallbackReleaseKeyObjectIDEx , чтобы освободить структуру.

CmCallbackGetKeyObjectIDEx — это улучшенная версия подпрограммы CmCallbackGetKeyObjectID , которая доступна начиная с Windows Vista. Драйверы, которые работают в версиях Windows до Windows 8, должны вызывать CmCallbackGetKeyObjectID вместо CmCallbackGetKeyObjectIDEx. Драйверы, которые работают только в Windows 8 и более поздних версиях Windows, должны вызывать CmCallbackGetKeyObjectIDEx вместо CmCallbackGetKeyObjectID.

CmCallbackGetKeyObjectIDEx имеет две важные функции, недоступные в CmCallbackGetKeyObjectID.

Во-первых, CmCallbackGetKeyObjectIDEx позволяет драйверу фильтра реестра явно управлять временем существования структуры ObjectName . Драйвер может в любое время вызвать CmCallbackReleaseKeyObjectIDEx , чтобы освободить эту структуру. В отличие от этого, драйвер не может явно освободить структуру ObjectName , полученную от CmCallbackGetKeyObjectID. Эта структура автоматически освобождается при закрытии всех дескрипторов ключа.

Во-вторых, если драйвер фильтра реестра вызывает CmCallbackGetKeyObjectID для получения указателя структуры ObjectName , а после этого вызова имя раздела реестра меняется, последующие вызовы CmCallbackGetKeyObjectID получают указатель на устаревшую копию структуры ObjectName , которая содержит старое имя ключа. Устаревшая копия этой структуры сохраняется до тех пор, пока не будут закрыты все дескрипторы ключа. В отличие от этого, структура ObjectName , полученная из CmCallbackGetKeyObjectIDEx , всегда содержит самое актуальное имя ключа.

Дополнительные сведения о драйверах фильтров реестра см. в разделе Фильтрация вызовов реестра.

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 8.
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL

См. также раздел

CmCallbackGetKeyObjectID

CmCallbackReleaseKeyObjectIDEx

CmRegisterCallback

CmRegisterCallbackEx

RegistryCallback

UNICODE_STRING