Функция 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, если операция выполнена успешно. В противном случае метод может вернуть одно из следующих значений:
Код возврата | Описание |
---|---|
|
WdfFdoInitOpenRegistryKey не был вызван в IRQL = PASSIVE_LEVEL. |
|
Указан недопустимый параметр, или драйвер не получил структуру WDFDEVICE_INIT из функции обратного вызова EvtDriverDeviceAdd . Для UMDF это возвращаемое значение может указывать на недостаточные права доступа. |
|
Не удалось выделить объект раздела реестра. |
|
Указанный раздел реестра не существует. |
Список других возвращаемых значений, которые может возвращать метод 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) |