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


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

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

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

Синтаксис

NTSTATUS WdfRegistryQueryMemory(
  [in]            WDFKEY                 Key,
  [in]            PCUNICODE_STRING       ValueName,
  [in]            POOL_TYPE              PoolType,
  [in, optional]  PWDF_OBJECT_ATTRIBUTES MemoryAttributes,
  [out]           WDFMEMORY              *Memory,
  [out, optional] PULONG                 ValueType
);

Параметры

[in] Key

Дескриптор объекта реестра, представляющего открытый раздел реестра.

[in] ValueName

Указатель на структуру UNICODE_STRING, содержащую имя значения.

[in] PoolType

Значение POOL_TYPEтипа, указывающее тип памяти, выделяемый для буфера данных.

[in, optional] MemoryAttributes

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

[out] Memory

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

[out, optional] ValueType

Указатель на расположение, которое получает тип данных. Список значений типов данных см. в разделе Тип элемента KEY_VALUE_BASIC_INFORMATION. Этот указатель необязателен и может быть null.

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

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

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

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

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

Список других возвращаемых значений, возвращаемых методом WdfRegistryQueryMemor y, может возвращать, см. .

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

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

Замечания

Когда драйвер вызывает WdfRegistryQueryMemory, платформа выделяет буфер, который достаточно велик для хранения данных указанного значения реестра. После возврата WdfRegistryQueryMemor y драйвер может вызвать WdfMemoryGetBuffer, чтобы получить указатель на буфер и размер буфера.

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

Примеры

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

WDFMEMORY memory;
size_t size;
PUCHAR pBuf;
NTSTATUS status;
ULONG type;
DECLARE_CONST_UNICODE_STRING(valueName1, L"MyValueName");

status = WdfRegistryQueryMemory(
                                Key,
                                &valueName1,
                                PagedPool,
                                NULL,
                                &memory,
                                &type
                                );
pBuf = (PUCHAR)WdfMemoryGetBuffer(
                                   memory,
                                   &size
                                   );

Требования

Требование Ценность
целевая платформа универсальный
минимальная версия 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)

См. также

KEY_VALUE_BASIC_INFORMATION

POOL_TYPE

UNICODE_STRING

WDF_OBJECT_ATTRIBUTES

WdfMemoryGetBuffer

WdfRegistryQueryMultiString

WdfRegistryQueryString

WdfRegistryQueryULong

WdfRegistryQueryUnicodeString

WdfRegistryQueryValue