Поделиться через


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

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

Метод WdfIoTargetClose закрывает указанный удаленный целевой объект ввода-вывода.

Синтаксис

void WdfIoTargetClose(
  [in] WDFIOTARGET IoTarget
);

Параметры

[in] IoTarget

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

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

None

Remarks

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

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

Драйверы, предоставляющие функцию обратного вызова EvtIoTargetRemoveComplete, должны вызывать WdfIoTargetClose из этой функции обратного вызова.

Перед возвратом метода WdfIoTargetClose платформа отменяет все запросы ввода-вывода целевой очереди.

Если драйвер завершил использование удаленного целевого объекта ввода-вывода и больше не будет использовать целевой объект, а у целевого объекта нет дочерних объектов запроса, которые все еще находятся в состоянии ожидания, драйвер может вызвать WdfObjectDelete , не вызывая WdfIoTargetClose. Вызов WdfObjectDelete закроет удаленный целевой объект ввода-вывода, отменит все запросы ввода-вывода целевой очереди и удалит целевой объект ввода-вывода. (Обратите внимание, что если родительским объектом удаленного целевого объекта ввода-вывода является объект устройства, платформа закрывает целевой объект и удаляет целевой объект при удалении родительского объекта.) Если у целевого объекта есть дочерние объекты запроса, которые все еще находятся в состоянии ожидания, драйвер должен вызвать WdfIoTargetClose , прежде чем он сможет безопасно вызвать WdfObjectDelete.

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

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

Примеры

В следующем примере кода используется функция обратного вызова EvtIoTargetRemoveComplete, которая удаляет указанный целевой объект ввода-вывода из коллекции целевых объектов ввода-вывода драйвера, а затем закрывает целевой объект ввода-вывода.

VOID
MyEvtIoTargetRemoveComplete(
    WDFIOTARGET IoTarget
)
{
    //
    // Get device information from the I/O target object's
    // context space.
    //
    targetDeviceInfo = GetTargetDeviceInfo(IoTarget);
    deviceExtension = targetDeviceInfo->DeviceExtension;

    //
    // Remove the target device from the collection.
    //
    WdfWaitLockAcquire(
                       deviceExtension->TargetDeviceCollectionLock,
                       NULL
                       );

    WdfCollectionRemove(
                        deviceExtension->TargetDeviceCollection,
                        IoTarget
                        );

    WdfWaitLockRelease(deviceExtension->TargetDeviceCollectionLock);

    //
    // Close the target.
    //
    WdfIoTargetClose(IoTarget);
}

Требования

Требование Значение
Целевая платформа Универсальное
Минимальная версия KMDF 1,0
Минимальная версия UMDF 2,0
Верхняя часть wdfiotarget.h (включая Wdf.h)
Библиотека Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL PASSIVE_LEVEL
Правила соответствия DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

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

EvtIoTargetRemoveComplete

WdfIoTargetCreate