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