Функция WdfIoTargetStop (wdfiotarget.h)

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

Метод WdfIoTargetStop перестает отправлять запросы в очередь в локальный или удаленный целевой объект ввода-вывода.

Синтаксис

void WdfIoTargetStop(
  [in] WDFIOTARGET                  IoTarget,
  [in] WDF_IO_TARGET_SENT_IO_ACTION Action
);

Параметры

[in] IoTarget

Дескриптор локального или удаленного целевого объекта ввода-вывода, полученного из предыдущего вызова WdfDeviceGetIoTarget или WdfIoTargetCreate, или из метода, который предоставляет специализированный целевой объект ввода-вывода.

[in] Action

Значение типа WDF_IO_TARGET_SENT_IO_ACTION, указывающее, как платформа должна обрабатывать запросы ввода-вывода, отправленные драйвером в целевой объект ввода-вывода, если целевой объект не завершил запросы.

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

None

Remarks

Ошибка возникает, если драйвер предоставляет недопустимый дескриптор объекта.

Если драйвер может обнаружить ошибки восстанавливаемого устройства, может потребоваться, чтобы драйвер мог вызвать WdfIoTargetStop , чтобы временно прекратить отправку запросов, а затем вызвать WdfIoTargetStart для возобновления отправки запросов.

При остановке целевой объект ввода-вывода продолжает принимать новые запросы, но не доставляет запросы в очередь соответствующему драйверу.

Дополнительные сведения о возможных состояниях целевых объектов ввода-вывода см. в разделе "Управление состоянием общего целевого объекта ввода-вывода".

Если драйвер вызывает WdfUsbTargetPipeConfigContinuousReader для настройки непрерывного модуля чтения для USB-канала, функция обратного вызова EvtDeviceD0Exit драйвера должна вызвать WdfIoTargetStop , чтобы остановить модуль чтения.

Если драйвер вызвал WdfIoTargetStop, он по-прежнему может отправить запрос в целевой объект, задав флаг WDF_REQUEST_OPTION_IGNORE_TARGET_STATE в структуре WDF_REQUEST_SEND_OPTIONS запроса. Если драйвер задает этот флаг, драйвер может отправить запрос, например запрос на сброс USB-канала (см. WdfUsbTargetPipeResetSynchronously) на устройство после вызова драйвера WdfIoTargetStop.

Когда драйвер вызывает WdfIoTargetStop, платформа не пытается отменить или дождаться запросов ввода-вывода, которые ранее были отправлены в целевой объект с помощью флага WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE или флага WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET в структуре WDF_REQUEST_SEND_OPTIONS запроса.

Драйвер должен синхронно вызывать WdfIoTargetStart и WdfIoTargetStop . После того как драйвер вызывает одну из этих функций, он не должен вызывать ни одну из функций, прежде чем первый вызов вернет.

Драйвер может вызывать WdfIoTargetStop несколько раз из одного потока без вызова WdfIoTargetStart. Например, драйвер может сделать следующее:

  1. Вызовите WdfIoTargetStop и укажите значение Action WdfIoTargetLeaveSentIoPending.
  2. Определите, должен ли целевой объект возобновить обработку запросов ввода-вывода.
  3. Если целевой объект должен возобновиться, вызовите WdfIoTargetStart. В противном случае снова вызовите WdfIoTargetStop со значением Action WdfIoTargetCancelSentIo.
NoteWdfIoTargetStop не является потокобезопасной. Небезопасно вызывать WdfIoTargetStop одновременно из разных потоков.
Дополнительные сведения о целевых объектах ввода-вывода см. в разделе "Использование целевых объектов ввода-вывода".

Если драйвер вызвал WdfUsbTargetPipeConfigContinuousReader для канала, необходимо вызвать WdfIoTargetStop в IRQL = PASSIVE_LEVEL.

Если драйвер не вызывал WdfUsbTargetPipeConfigContinuousReader и если параметр Action WdfIoTargetStop имеет значение WdfIoTargetLeaveSentIoPending, WdfIoTargetStop можно вызвать в IRQL <= DISPATCH_LEVEL. В противном случае WdfIoTargetStop вызывается в IRQL = PASSIVE_LEVEL.

Примеры

В следующем примере кода показано, как функция обратного вызова EvtDeviceD0Exit может вызывать WdfIoTargetStop, если драйвер использует непрерывное средство чтения для USB-канала.

NTSTATUS
MyEvtDeviceD0Exit(
    IN  WDFDEVICE Device,
    IN  WDF_POWER_DEVICE_STATE TargetState
)
{
    PDEVICE_CONTEXT  pDeviceContext;
    pDeviceContext = GetMyDeviceContext(Device);

    WdfIoTargetStop(
                    WdfUsbTargetPipeGetIoTarget(pDeviceContext->InterruptPipe),
                    WdfIoTargetCancelSentIo
                    );

    return STATUS_SUCCESS;
}

Требования

   
Целевая платформа Универсальное
Минимальная версия KMDF 1.0
Минимальная версия UMDF 2.0
Верхняя часть wdfiotarget.h (include Wdf.h)
Библиотека Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL См. раздел "Примечания".
Правила соответствия DDI DriverCreate(kmdf), FailD0EntryIoTargetState(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

См. также раздел

EvtDeviceD0Exit

WDF_REQUEST_SEND_OPTIONS

WdfDeviceGetIoTarget

WdfIoTargetCreate

WdfIoTargetStart

WdfUsbTargetPipeConfigContinuousReader

WdfUsbTargetPipeResetSynchronously