WdfIoTargetClose-Funktion (wdfiotarget.h)
[Gilt für KMDF und UMDF]
Die WdfIoTargetClose Methode schließt ein angegebenes Remote-E/A-Ziel.
Syntax
void WdfIoTargetClose(
[in] WDFIOTARGET IoTarget
);
Die Parameter
[in] IoTarget
Ein Handle für ein E/A-Zielobjekt, das aus einem vorherigen Aufruf von WdfIoTargetCreateabgerufen wurde.
Rückgabewert
Nichts
Bemerkungen
Wenn der Treiber ein ungültiges Objekthandle bereitstellt, tritt eine Fehlerüberprüfung auf.
Nachdem ein Treiber WdfIoTargetClose-aufgerufen hat, kann er WdfIoTargetOpen- aufrufen, um das Remote-E/A-Ziel erneut zu öffnen.
Treiber, die eine EvtIoTargetRemoveComplete Rückruffunktion bereitstellen, müssen WdfIoTargetClose innerhalb dieser Rückruffunktion aufrufen.
Bevor die WdfIoTargetClose--Methode zurückgegeben wird, das Framework alle E/A-Anforderungen der Zielwarteschlange abbricht.
Wenn ein Treiber die Verwendung eines Remote-E/A-Ziels abgeschlossen hat und das Ziel nicht erneut verwendet wird und das Ziel keine untergeordneten Anforderungsobjekte enthält, die noch ausstehen, kann der Treiber WdfObjectDelete aufrufen, ohne zuerst WdfIoTargetCloseaufzurufen. Der Aufruf von WdfObjectDelete schließt das Remote-E/A-Ziel, bricht alle E/A-Anforderungen der Zielwarteschlange ab und löscht das E/A-Zielobjekt. (Wenn das übergeordnete Objekt des Remote-E/A-Ziels ein Geräteobjekt ist, schließt das Framework das Ziel und löscht das Zielobjekt, wenn es das übergeordnete Objekt löscht.) Wenn das Ziel über untergeordnete Anforderungsobjekte verfügt, die noch ausstehen, muss der Treiber WdfIoTargetClose- aufrufen, bevor es sicher WdfObjectDeleteaufrufen kann.
Weitere Informationen zu WdfIoTargetClosefinden Sie unter Controlling a General I/O Target's State.
Weitere Informationen zu E/A-Zielen finden Sie unter Using I/O Targets.
Beispiele
Das folgende Codebeispiel ist eine EvtIoTargetRemoveComplete Rückruffunktion, die ein angegebenes E/A-Ziel aus der Auflistung der E/A-Ziele eines Treibers entfernt und dann das E/A-Ziel schließt.
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);
}
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | universell |
Minimale KMDF-Version | 1.0 |
Mindest-UMDF-Version | 2.0 |
Kopfzeile | wdfiotarget.h (include Wdf.h) |
Bibliothek | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | PASSIVE_LEVEL |
DDI-Complianceregeln | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |