WdfIoTargetClose 関数 (wdfiotarget.h)
[KMDF と UMDF に適用]
WdfIoTargetClose メソッドは、指定されたリモート I/O ターゲットを閉じます。
構文
void WdfIoTargetClose(
[in] WDFIOTARGET IoTarget
);
パラメーター
[in] IoTarget
WdfIoTargetCreate の以前の呼び出しから取得された I/O ターゲット オブジェクトへのハンドル。
戻り値
なし
解説
ドライバーが無効なオブジェクト ハンドルを提供すると、バグ チェックが発生します。
ドライバーは WdfIoTargetClose を呼び出した後、 WdfIoTargetOpen を呼び出してリモート I/O ターゲットを再度開くことができます。
EvtIoTargetRemoveComplete コールバック関数を提供するドライバーは、そのコールバック関数内から WdfIoTargetClose を呼び出す必要があります。
WdfIoTargetClose メソッドが返される前に、フレームワークはターゲット キューのすべての I/O 要求を取り消します。
ドライバーがリモート I/O ターゲットの使用を完了し、ターゲットをもう一度使用せず、ターゲットにまだ保留中の子要求オブジェクトがない場合、ドライバーは WdfIoTargetClose を最初に呼び出さずに WdfObjectDelete を呼び出すことができます。 WdfObjectDelete を呼び出すと、リモート I/O ターゲットが閉じられ、ターゲット キューのすべての I/O 要求が取り消され、I/O ターゲット オブジェクトが削除されます。 (リモート I/O ターゲットの親オブジェクトがデバイス オブジェクトである場合、フレームワークはターゲットを閉じ、親オブジェクトを削除するときにターゲット オブジェクトを削除します。ターゲットにまだ保留中の子要求オブジェクトがある場合、ドライバーは WdfObjectDelete を安全に呼び出す前に WdfIoTargetClose を呼び出す必要があります。
WdfIoTargetClose の詳細については、「一般的な I/O ターゲットの状態の制御」を参照してください。
I/O ターゲットの詳細については、「I /O ターゲットの使用」を参照してください。
例
次のコード例は、指定した I/O ターゲットをドライバーの I/O ターゲットのコレクションから削除し、I/O ターゲットを閉じる 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 |
Header | wdfiotarget.h (Wdf.h を含む) |
Library | Wdf01000.sys (KMDF);WUDFx02000.dll (UMDF) |
IRQL | PASSIVE_LEVEL |
DDI コンプライアンス規則 | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |