Freigeben über


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
);

Parameter

[in] IoTarget

Ein Handle für ein E/A-Zielobjekt, das von einem vorherigen Aufruf von WdfIoTargetCreate abgerufen wurde.

Rückgabewert

Keine

Bemerkungen

Eine Fehlerüberprüfung tritt auf, wenn der Treiber ein ungültiges Objekthandle bereitstellt.

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, bricht das Framework alle E/A-Anforderungen der Zielwarteschlange ab.

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 WdfIoTargetClose aufzurufen. Durch den Aufruf von WdfObjectDelete wird das Remote-E/A-Ziel geschlossen, alle E/A-Anforderungen der Zielwarteschlange abgebrochen und das E/A-Zielobjekt gelöscht. (Wenn das übergeordnete E/A-Zielobjekt 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 er WdfObjectDelete sicher aufrufen kann.

Weitere Informationen zu WdfIoTargetClose finden Sie unter Steuern des Status eines allgemeinen E/A-Ziels.

Weitere Informationen zu E/A-Zielen finden Sie unter Verwenden von E/A-Zielen.

Beispiele

Das folgende Codebeispiel ist eine EvtIoTargetRemoveComplete-Rückruffunktion , die ein angegebenes E/A-Ziel aus der Sammlung von E/A-Zielen 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
KMDF-Mindestversion 1.0
UMDF-Mindestversion 2.0
Kopfzeile wdfiotarget.h (einschließen von Wdf.h)
Bibliothek Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL PASSIVE_LEVEL
DDI-Complianceregeln DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Weitere Informationen

EvtIoTargetRemoveComplete

WdfIoTargetCreate