Поделиться через


Функция WdfRegistryCreateKey (wdfregistry.h)

[Применимо к KMDF и UMDF]

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

Синтаксис

NTSTATUS WdfRegistryCreateKey(
  [in, optional]  WDFKEY                 ParentKey,
  [in]            PCUNICODE_STRING       KeyName,
  [in]            ACCESS_MASK            DesiredAccess,
  [in]            ULONG                  CreateOptions,
  [out, optional] PULONG                 CreateDisposition,
  [in, optional]  PWDF_OBJECT_ATTRIBUTES KeyAttributes,
  [out]           WDFKEY                 *Key
);

Параметры

[in, optional] ParentKey

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

[in] KeyName

Указатель на структуру UNICODE_STRING, содержащую имя открываемого ключа. Имя ключа может содержать сведения о пути. Если ParentKeyNULL, KeyName должен указать полный путь к разделу реестра.

[in] DesiredAccess

Значение ACCESS_MASKтипа, указывающее права доступа, которые драйвер запрашивает для указанного раздела реестра. Список прав доступа, которые драйверы обычно используют для разделов реестра, см. в разделе Открытие дескриптора для объекта Registry-Key. Драйвер должен запрашивать только необходимые типы доступа. Например, драйвер не должен запрашивать KEY_ALL_ACCESS, если он будет читать только раздел реестра.

[in] CreateOptions

Один или несколько флагов. Дополнительные сведения об этих флагах см. в параметре CreateOptions или ZwCreateKey.

[out, optional] CreateDisposition

Указатель на расположение, которое получает REG_CREATED_NEW_KEY, если создается новый ключ или REG_OPENED_EXISTING_KEY, если открыт существующий ключ. Эти значения определены в Wdm.h. Этот указатель необязателен и может быть null.

[in, optional] KeyAttributes

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

[out] Key

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

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

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

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

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

СТАТУС_НЕДЕЙСТВИТЕЛЬНЫЙ_ПАРАМЕТР
Указан недопустимый параметр.
СТАТУС_НЕДОСТАТОЧНЫЕ_РЕСУРСЫ
Не удалось выделить объект раздела реестра.
STATUS_ACCESS_DENIED
Система отрицала указанные права доступа.
STATUS_OBJECT_NAME_NOT_FOUND
Указанный раздел реестра не существует.
 

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

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

Замечания

Чтобы получить дескриптор объекта реестра, представляющего родительский ключ, драйвер может вызывать WdfDriverOpenParametersRegistryKey, WdfDeviceOpenRegistryKeyили WdfFdoInitOpenRegistryKey.

По умолчанию родительский объект раздела реестра является объектом драйвера платформы, который создает метод WdfDriverCreate. Вы можете использовать элемент ParentObject структуры WDF_OBJECT_ATTRIBUTES для указания другого родительского элемента. Платформа удаляет объект реестра с ключом реестра при удалении родительского объекта. Если драйвер не изменяет родительский элемент по умолчанию, драйвер должен удалить объект раздела реестра после завершения работы с объектом; в противном случае объект раздела реестра останется до тех пор, пока диспетчер ввода-вывода не выгрузит драйвер.

Если драйвер не изменяет родительский элемент по умолчанию, драйвер должен вызвать WdfRegistryClose после завершения использования объекта; в противном случае объект раздела реестра останется до тех пор, пока диспетчер ввода-вывода не выгрузит драйвер. Кроме того, драйвер может вызывать WdfObjectDelete для удаления объекта реестра.

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

Примеры

В следующем примере кода открывается ключ программного обеспечения драйвера, а затем он создает и открывает раздел реестра myKeyStr myKeyStr, который находится под ключом программного обеспечения драйвера.

WDFKEY  hKey, subkey;
NTSTATUS  status;
UNICODE_STRING  myKeyStr;

status = WdfDeviceOpenRegistryKey(
                                  device,
                                  PLUGPLAY_REGKEY_DRIVER,
                                  KEY_READ,
                                  WDF_NO_OBJECT_ATTRIBUTES,
                                  &hKey
                                  );
if (NT_SUCCESS(status)){
    RtlInitUnicodeString(
                         &myKeyStr,
                         L"myKeyStr"
                         );
    status = WdfRegistryCreateKey(
                                  hKey,
                                  &myKeyStr,
                                  KEY_READ,
                                  REG_OPTION_NON_VOLATILE,
                                  NULL,
                                  WDF_NO_OBJECT_ATTRIBUTES,
                                  &subkey
                                  );
}

Требования

Требование Ценность
целевая платформа универсальный
минимальная версия KMDF 1.0
минимальная версия UMDF 2.0
Заголовок wdfregistry.h (include Wdf.h)
Библиотека Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL PASSIVE_LEVEL
правил соответствия DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

См. также

ACCESS_MASK

RtlInitUnicodeString

UNICODE_STRING

WDF_OBJECT_ATTRIBUTES

WdfDeviceOpenRegistryKey

WdfDriverCreate

WdfDriverOpenParametersRegistryKey

WdfFdoInitOpenRegistryKey

WdfRegistryOpenKey

ZwCreateKey