Функция WdfRequestForwardToParentDeviceIoQueue (wdfrequest.h)
[Применяется только к KMDF]
Метод WdfRequestForwardToParentDeviceIoQueue повторно отправляет запрос ввода-вывода из очереди ввода-вывода дочернего устройства в указанную очередь ввода-вывода родительского устройства дочернего устройства.
Синтаксис
NTSTATUS WdfRequestForwardToParentDeviceIoQueue(
[in] WDFREQUEST Request,
[in] WDFQUEUE ParentDeviceQueue,
[in] PWDF_REQUEST_FORWARD_OPTIONS ForwardOptions
);
Параметры
[in] Request
Дескриптор объекта запроса платформы.
[in] ParentDeviceQueue
Дескриптор объекта очереди платформы.
[in] ForwardOptions
Указатель на структуру WDF_REQUEST_FORWARD_OPTIONS , выделенную вызывающим объектом.
Возвращаемое значение
WdfRequestForwardToParentDeviceIoQueue возвращает STATUS_SUCCESS, если операция выполнена успешно. В противном случае этот метод может вернуть одно из следующих значений:
Код возврата | Описание |
---|---|
|
Недопустимый размер предоставленной структуры WDF_REQUEST_FORWARD_OPTIONS. |
|
Член предоставленной структуры WDF_REQUEST_FORWARD_OPTIONS содержит недопустимое значение. |
|
Это значение возвращается, если происходит одно из следующих действий:
|
|
Указанная очередь ввода-вывода не принимает новые запросы. |
Этот метод также может возвращать другие значения NTSTATUS.
Ошибка проверка возникает, если драйвер предоставляет недопустимый дескриптор объекта.
Комментарии
Прежде чем драйвер сможет вызвать WdfRequestForwardToParentDeviceIoQueue, он должен вызвать WdfPdoInitAllowForwardingRequestToParent.
Драйвер должен использовать один и тот же метод для доступа к буферам данных (буферным, прямым или ни для одного) как для родительского, так и для дочернего устройства.
Если драйвер будет вызывать WdfRequestForwardToParentDeviceIoQueue для повторной отправки запроса ввода-вывода, драйвер не должен использовать объект запроса в качестве родительского объекта других объектов платформы, таких как объекты таймера или рабочие элементы.
Если драйвер вызвал WdfDeviceInitSetRequestAttributes , чтобы указать контекстное пространство для объектов запросов родительского устройства, платформа не добавляет это контекстное пространство для запроса объектов, которые драйвер получает в очереди дочернего устройства. Драйвер может вызвать WdfObjectAllocateContext , чтобы добавить контекстное пространство к объекту запроса, прежде чем драйвер вызовет WdfRequestForwardToParentDeviceIoQueue. С другой стороны, если драйвер с именем WdfDeviceInitSetRequestAttributes для объектов запросов дочернего устройства и если объекты запроса родительского устройства используют контекстное пространство, равное или меньшее, чем контекстное пространство дочернего устройства, драйвер может использовать контекстное пространство объекта запроса без вызова WdfObjectAllocateContext.
В настоящее время драйвер должен использовать параметр отправить и забыть для всех повторных запросов ввода-вывода. Поэтому имейте в виду, что к тому времени, когда платформа удаляет объект запроса с повторным обращением, она, возможно, уже удалила дочернее устройство, которое первоначально получило объект запроса. Таким образом, драйвер не должен использовать функцию EvtCleanupCallback или EvtDegradCallback объекта запроса, задающего запрос, для доступа к ресурсам дочернего устройства, так как ресурсы могут быть удалены до выполнения функции EvtCleanupCallback или EvtDegradCallback .
Дополнительные сведения о WdfRequestForwardToParentDeviceIoQueue см. в разделе Запросы ввода-вывода в очередь.
Примеры
В следующем примере кода сначала определяется родительское устройство устройства, которое получило запрос ввода-вывода, а затем он повторно отправляет запрос ввода-вывода в очередь ввода-вывода родительского устройства по умолчанию.
WDFDEVICE device, parentDevice;
WDF_REQUEST_FORWARD_OPTIONS forwardOptions;
NTSTATUS status;
device = WdfIoQueueGetDevice(WdfRequestGetIoQueue(Request));
parentDevice = WdfPdoGetParent(device);
WDF_REQUEST_FORWARD_OPTIONS_INIT(&forwardOptions);
status = WdfRequestForwardToParentDeviceIoQueue(
Request,
WdfDeviceGetDefaultQueue(parentDevice),
&forwardOptions
);
if (!NT_SUCCESS(status)) {
WdfRequestComplete(
Request,
status
);
}
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Минимальная версия KMDF | 1,9 |
Верхняя часть | wdfrequest.h (включая Wdf.h) |
Библиотека | Wdf01000.sys (см. раздел Управление версиями библиотеки платформы). |
IRQL | <=DISPATCH_LEVEL |
Правила соответствия DDI | DriverCreate(kmdf) |
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по