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


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

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

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

Синтаксис

void WdfIoTargetClose(
  [in] WDFIOTARGET IoTarget
);

Параметры

[in] IoTarget

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

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

Нет

Замечания

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

После вызова драйвера 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 (include Wdf.h)
Библиотека Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL PASSIVE_LEVEL
правил соответствия DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

См. также

EvtIoTargetRemoveComplete

WdfIoTargetCreate