Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Применимо только к KMDF]
Метод WdfRequestCreateFromIrp создает объект запроса платформы из указанного WDM IRP.
Синтаксис
NTSTATUS WdfRequestCreateFromIrp(
[in, optional] PWDF_OBJECT_ATTRIBUTES RequestAttributes,
[in] PIRP Irp,
[in] BOOLEAN RequestFreesIrp,
[out] WDFREQUEST *Request
);
Параметры
[in, optional] RequestAttributes
Указатель на выделенную вызывающим объектом структуру WDF_OBJECT_ATTRIBUTES, указывающую атрибуты объекта для объекта запроса. Этот параметр является необязательным и может быть WDF_NO_OBJECT_ATTRIBUTES.
[in] Irp
Указатель на структуру IRP, содержащую пакет запроса ввода-вывода WDM.
[in] RequestFreesIrp
Логическое значение, которое, если TRUE, указывает, что платформа удаляет IRP при уничтожении дескриптора запроса. Если false, драйвер должен вызвать IoFreeIrp, чтобы удалить IRP, выполнив действия, описанные в следующем разделе "Примеры".
[out] Request
Указатель на расположение, которое получает дескриптор объекту запроса платформы.
Возвращаемое значение
WdfRequestCreateFromIrp возвращает STATUS_SUCCESS, если операция выполнена успешно. Список дополнительных возвращаемых значений см. в ошибках создания объектов Framework.
Этот метод также может возвращать другие значения NTSTATUS.
Замечания
Как правило, драйверы на основе платформы вызывают WdfRequestCreateFromIrp только в том случае, если они получают ip-адреса WDM в подпрограмме отправки WDM, а затем перенаправляют запросы в целевые объекты ввода-вывода платформы.
Если драйвер вызывает WdfRequestCreateFromIrp для создания объекта запроса, он не должен вызывать WdfRequestComplete для объекта запроса. Вместо этого драйвер должен вызывать WdfObjectDelete после завершения работы с объектом запроса.
Кроме того, драйвер не должен вызывать WdfRequestRetrieveOutputMemory, WdfRequestRetrieveOutputBuffer, WdfRequestRetrieveInputBufferили WdfRequestRetrieveInputMemory с новым объектом запроса.
По умолчанию родительским объектом нового запроса является объект драйвера платформы, созданный методом WdfDriverCreate. Вы можете использовать элемент ParentObject структуры WDF_OBJECT_ATTRIBUTES для указания другого родительского элемента. Платформа удаляет объект запроса при удалении родительского объекта. Если драйвер не изменяет родительский объект по умолчанию, драйвер должен удалить объект запроса после завершения использования объекта; в противном случае объект запроса останется до тех пор, пока диспетчер ввода-вывода не выгрузит драйвер.
Дополнительные сведения о создании объектов запросов платформы см. в создании объектов запросов платформы.
Драйверы на основе платформы не должны использовать Tail.Overlay.DriverContext член структуры I RP, так как платформа использует этот элемент.
Примеры
пример 1
В следующем примере кода создается объект запроса платформы из указанного IRP WDM, а затем удаляет его. В этом примере параметр RequestFreesIrp задает значение TRUE, поэтому платформа удаляет IRP при уничтожении дескриптора запроса.
WDFREQUEST request;
PIRP irp;
//Creation
status = WdfRequestCreateFromIrp(
WDF_NO_OBJECT_ATTRIBUTES,
irp,
TRUE,
&request
);
...
//Deletion
WdfObjectDelete(request);
пример 2
В следующем примере кода также создается объект запроса платформы из указанного IRP WDM, а затем удаляет его. В этом примере параметр RequestFreesIrp устанавливается на FALSE, поэтому драйвер должен вызвать IoFreeIrp, чтобы удалить IRP. Требуются все вызовы функций в примере.
WDF_REQUEST_REUSE_PARAMS params;
WDFREQUEST request;
PIRP irp;
//Creation
status = WdfRequestCreateFromIrp(
WDF_NO_OBJECT_ATTRIBUTES,
irp,
FALSE,
&request
);
...
//Deletion
WDF_REQUEST_REUSE_PARAMS_INIT(
¶ms,
WDF_REQUEST_REUSE_NO_FLAGS,
STATUS_SUCCESS
);
WDF_REQUEST_REUSE_PARAMS_SET_NEW_IRP(
¶ms,
NULL
);
status = WdfRequestReuse(
request,
¶ms
);
ASSERT(NT_SUCCESS(status));
IoFreeIrp(irp);
WdfObjectDelete(request);
Требования
Требование | Ценность |
---|---|
целевая платформа | Всеобщий |
минимальная версия KMDF | 1.0 |
заголовка | wdfrequest.h (включая Wdf.h) |
библиотеки | Wdf01000.sys (см. управление версиями библиотеки Платформы).) |
IRQL | <=DISPATCH_LEVEL |
правил соответствия DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |