Функция WdfIoQueueReadyNotify (wdfio.h)
[Относится к KMDF и UMDF]
Метод WdfIoQueueReadyNotify регистрирует (или отменяет регистрацию) функцию обратного вызова события, которую платформа вызывает каждый раз, когда указанная пустая очередь ввода-вывода, ранее пустая, получает один или несколько запросов ввода-вывода.
Синтаксис
NTSTATUS WdfIoQueueReadyNotify(
[in] WDFQUEUE Queue,
[in, optional] PFN_WDF_IO_QUEUE_STATE QueueReady,
[in, optional] WDFCONTEXT Context
);
Параметры
[in] Queue
Дескриптор объекта очереди платформы.
[in, optional] QueueReady
Указатель на функцию обратного вызова EvtIoQueueState , предоставляемую драйвером, если драйвер регистрируется для уведомления о готовности, или значение NULL , если драйвер отменяет регистрацию.
[in, optional] Context
Нетипизированный указатель на предоставленные драйвером контекстные сведения, которые платформа передает функции обратного вызова EvtIoQueueState , если драйвер регистрируется для получения уведомления о готовности, или значение NULL , если драйвер отменяет регистрацию.
Возвращаемое значение
WdfIoQueueReadyNotify возвращает STATUS_SUCCESS, если операция выполнена успешно. В противном случае этот метод может вернуть одно из следующих значений:
Код возврата | Описание |
---|---|
|
Драйвер предоставил недопустимый дескриптор. |
|
Это значение возвращается, если происходит одно из следующих действий:
|
Этот метод также может возвращать другие значения NTSTATUS.
Ошибка проверка возникает, если драйвер предоставляет недопустимый дескриптор объекта.
Комментарии
После того как драйвер вызвал WdfIoQueueReadyNotify для регистрации функции обратного вызова EvtIoQueueState , платформа вызывает функцию обратного вызова каждый раз, когда состояние указанной очереди изменяется с пустого на непустое. В частности, платформа вызывает EvtIoQueueState , когда запрос поступает в пустую очередь, даже если драйвер по-прежнему владеет ранее доставленными запросами из очереди, которая еще не завершена. Вы можете изменить irQL, по которому выполняется обратный вызов, указав ExecutionLevel в WDF_OBJECT_ATTRIBUTES во время создания очереди. Дополнительные сведения см. в разделе ПримечанияEVT_WDF_IO_QUEUE_STATE.
Платформа не вызывает EvtIoQueueState во время остановки указанной очереди. При запуске очереди платформа вызывает EvtIoQueueState , если очередь не пуста.
Драйвер может вызывать WdfIoQueueReadyNotify только для очередей ввода-вывода, использующих метод диспетчеризации вручную .
Функция обратного вызова EvtIoQueueState обычно вызывает WdfIoQueueRetrieveNextRequest или WdfIoQueueRetrieveRequestByFileObject в цикле, чтобы получить все запросы, полученные с момента последнего выполнения функции обратного вызова.
Чтобы платформа не вызывала функцию обратного вызова EvtIoQueueState , драйвер должен снова вызвать WdfIoQueueReadyNotify с параметром QueueReady , имеющим значение NULL. Однако драйвер должен сначала вызвать WdfIoQueueStop или WdfIoQueueStopSynchronously , чтобы остановить очередь ввода-вывода. Впоследствии драйвер может вызвать WdfIoQueueStart , чтобы перезапустить очередь.
Когда драйвер вызывает WdfIoQueueReadyNotify для регистрации функции обратного вызова EvtIoQueueState , платформа может вызвать функцию обратного вызова до возврата WdfIoQueueReadyNotify .
Дополнительные сведения о методе WdfIoQueueReadyNotify см. в разделе Методы диспетчеризации для запросов ввода-вывода.
Примеры
В следующем примере кода регистрируется функция EvtIoQueueReady драйвера, чтобы эта функция вызывалась, когда указанная очередь ввода-вывода получает запрос ввода-вывода.
Status = WdfIoQueueReadyNotify(
ReadQueue,
EvtIoQueueReady,
myQueueContext
);
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Минимальная версия KMDF | 1,0 |
Минимальная версия UMDF | 2,0 |
Верхняя часть | wdfio.h (включая Wdf.h) |
Библиотека | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | <= DISPATCH_LEVEL |
Правила соответствия DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |