Функция WdfFdoInitOpenRegistryKey (wdffdo.h)

[Относится к KMDF и UMDF]

Метод WdfFdoInitOpenRegistryKey открывает аппаратный ключ устройства или программный ключ драйвера в реестре и создает объект ключа реестра платформы, представляющий раздел реестра.

Синтаксис

NTSTATUS WdfFdoInitOpenRegistryKey(
  [in]           PWDFDEVICE_INIT        DeviceInit,
  [in]           ULONG                  DeviceInstanceKeyType,
  [in]           ACCESS_MASK            DesiredAccess,
  [in, optional] PWDF_OBJECT_ATTRIBUTES KeyAttributes,
  [out]          WDFKEY                 *Key
);

Параметры

[in] DeviceInit

Указатель на структуру WDFDEVICE_INIT , полученную драйвером из функции обратного вызова EvtDriverDeviceAdd .

[in] DeviceInstanceKeyType

Указывает, какой ключ или подраздел нужно открыть.

Примечание

UMDF не поддерживает создание подразделов.

Это побитовое ИЛИ следующих флагов (которые определены в Wdm.h).

Флаг DeviceInstanceKeyType Значение Инфраструктура
PLUGPLAY_REGKEY_DEVICE Открывает аппаратный ключ устройства. KMDF/UMDF
PLUGPLAY_REGKEY_DRIVER Открывает программный ключ драйвера. Драйвер UMDF, задающий этот флаг, также должен задать для DesiredAccessзначение KEY_READ. В противном случае этот метод возвращает STATUS_ACCESS_DENIED. KMDF/UMDF
PLUGPLAY_REGKEY_CURRENT_HWPROFILE Драйвер KMDF использует этот флаг для открытия копии аппаратного или программного ключа, который находится в текущем профиле оборудования. KMDF
PLUGPLAY_REGKEY_DRIVER | WDF_REGKEY_DRIVER_SUBKEY Драйвер UMDF использует эти флаги вместе, чтобы открыть подраздел ServiceName программного ключа драйвера для доступа на чтение и запись. UMDF
PLUGPLAY_REGKEY_DEVICE | WDF_REGKEY_DEVICE_SUBKEY Аналогичным образом драйвер UMDF использует эти флаги для открытия подраздела ServiceName аппаратного ключа устройства для доступа на чтение и запись. UMDF

[in] DesiredAccess

Значение типа ACCESS_MASK, указывающее права доступа, запрашиваемые драйвером для указанного раздела реестра.

Драйвер KMDF обычно запрашивает KEY_READ, KEY_WRITE или KEY_READ | KEY_WRITE.

Если вы пишете драйвер UMDF, используйте следующую таблицу.

DeviceInstanceKeyType DesiredAccess
PLUGPLAY_REGKEY_DEVICE KEY_READ
PLUGPLAY_REGKEY_DEVICE | WDF_REGKEY_DEVICE_SUBKEY KEY_READ или KEY_READ | KEY_SET_VALUE
PLUGPLAY_REGKEY_DRIVER KEY_READ
PLUGPLAY_REGKEY_DRIVER | WDF_REGKEY_DRIVER_SUBKEY KEY_READ или KEY_READ | KEY_SET_VALUE
 

Рекомендуется запрашивать только те типы доступа, которые необходимы вашему драйверу.

[in, optional] KeyAttributes

Указатель на структуру WDF_OBJECT_ATTRIBUTES , содержащую предоставленные драйвером атрибуты для нового объекта раздела реестра. Этот параметр является необязательным и может быть WDF_NO_OBJECT_ATTRIBUTES.

[out] Key

Указатель на расположение, которое получает дескриптор нового объекта раздела реестра.

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

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

Код возврата Описание
STATUS_INVALID_DEVICE_REQUEST

WdfFdoInitOpenRegistryKey не был вызван в IRQL = PASSIVE_LEVEL.

STATUS_INVALID_PARAMETER
Указан недопустимый параметр, или драйвер не получил структуру WDFDEVICE_INIT из функции обратного вызова EvtDriverDeviceAdd . Для UMDF это возвращаемое значение может указывать на недостаточные права доступа.
STATUS_INSUFFICIENT_RESOURCES
Не удалось выделить объект раздела реестра.
STATUS_OBJECT_NAME_NOT_FOUND
Указанный раздел реестра не существует.
 

Список других возвращаемых значений, которые может возвращать метод WdfFdoInitOpenRegistryKey , см. в разделе Ошибки создания объектов платформы.

Метод также может возвращать другие значения NTSTATUS.

Комментарии

Драйвер должен вызвать WdfFdoInitOpenRegistryKey перед вызовомWdfDeviceCreate. Дополнительные сведения о вызове WdfDeviceCreate см. в разделе Создание объекта устройства платформы.

Дополнительные сведения о методе WdfFdoInitOpenRegistryKey см. в статье Создание объектов устройств в драйвере функции.

или дополнительные сведения о реестре, аппаратных и программных разделах, а также объектах реестра см. в статье Использование реестра в Framework-Based Drivers.

Примеры

В следующем примере кода открывается аппаратный ключ устройства с доступом на чтение.

WDFKEY key;
NTSTATUS status;

status = WdfFdoInitOpenRegistryKey(
                                   DeviceInit,
                                   PLUGPLAY_REGKEY_DEVICE,
                                   GENERIC_READ,
                                   WDF_NO_OBJECT_ATTRIBUTES,
                                   &key
                                   );
if (!NT_SUCCESS(status)) {
    return status;
}

Требования

Требование Значение
Целевая платформа Универсальное
Минимальная версия KMDF 1,0
Минимальная версия UMDF 2,0
Верхняя часть wdffdo.h (включая Wdf.h)
Библиотека Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL PASSIVE_LEVEL
Правила соответствия DDI DeviceInitAPI(kmdf), DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

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

WdfDeviceOpenRegistryKey

WdfDriverOpenParametersRegistryKey