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


Функция WdfRequestCreate (wdfrequest.h)

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

Метод WdfRequestCreate создает пустой объект запроса платформы.

Синтаксис

NTSTATUS WdfRequestCreate(
  [in, optional] PWDF_OBJECT_ATTRIBUTES RequestAttributes,
  [in, optional] WDFIOTARGET            IoTarget,
  [out]          WDFREQUEST             *Request
);

Параметры

[in, optional] RequestAttributes

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

[in, optional] IoTarget

Дескриптор целевого объекта ввода-вывода платформы. Этот параметр является необязательным и может быть null. ЕслиNULL, WdfRequestCreate проверяет, что драйвер может в конечном итоге отправить запрос указанному целевому объекту ввода-вывода.

[out] Request

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

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

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

Возвращаемый код Описание
STATUS_INVALID_PARAMETER
Недопустимый входной параметр.
STATUS_INSUFFICIENT_RESOURCES
Для завершения операции недостаточно системных ресурсов.
STATUS_REQUEST_NOT_ACCEPTED
Массив расположений стека ввода-вывода запроса недостаточно велик, чтобы разрешить драйверу отправлять запрос в указанный целевой объект ввода-вывода.
 

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

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

Замечания

Драйвер на основе платформы может вызывать WdfRequestCreate для создания нового запроса, который драйвер впоследствии передает другим функциям платформы для инициализации. Например, драйвер usb-устройства может вызывать WdfUsbTargetPipeFormatRequestForRead форматирования нового запроса на чтение.

Драйвер на основе платформы, взаимодействующий с драйверами WDM, может указать содержимое запроса, вызвав WdfRequestCreateFromIrp.

Если драйвер вызывает WdfRequestCreate для создания объекта запроса, он не должен вызывать WdfRequestComplete для объекта запроса. Вместо этого драйвер должен вызывать WdfObjectDelete после завершения работы с объектом запроса. Дополнительные сведения см. в разделе Завершение запросов ввода-вывода.

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

Дополнительные сведения о вызове WdfRequestCreateсм. в создания объектов запросов платформы.

Примеры

В следующем примере кода создается целевой объект ввода-вывода, инициализируется структура WDF_OBJECT_ATTRIBUTES и вызывается WdfRequestCreate. Родительский объект нового запроса является целевым объектом ввода-вывода.

WDF_OBJECT_ATTRIBUTES  attributes;
WDFREQUEST newRequest;
WDFIOTARGET ioTarget;
...
status = WdfIoTargetCreate(
                           Device,
                           WDF_NO_OBJECT_ATTRIBUTES,
                           &ioTarget
                           );
  ...
WDF_OBJECT_ATTRIBUTES_INIT(&attributes);
attributes.ParentObject = ioTarget;

status = WdfRequestCreate(
                          &attributes,
                          ioTarget,
                          &newRequest
                          );

if (!NT_SUCCESS(status)) {
    return status;
}

Требования

Требование Ценность
целевая платформа Всеобщий
минимальная версия KMDF 1.0
минимальная версия UMDF 2.0
заголовка wdfrequest.h (включая Wdf.h)
библиотеки Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <=DISPATCH_LEVEL
правил соответствия DDI DriverCreate(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfdfIrqlExplicit(kmdf), ReqDelete(kmdf), RequestForUrbXrb(kmdf), RequestSendAndForgetNoFormatting2(kmdf)

См. также

WDF_OBJECT_ATTRIBUTES

WDF_OBJECT_ATTRIBUTES_INIT

WdfDeviceInitSetRequestAttributes

WdfDriverCreate

WdfRequestCreateFromIrp

WdfRequestReuse