Функция 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) |