IoInitializeRemoveLock マクロ (wdm.h)
IoInitializeRemoveLock ルーチンは、デバイス オブジェクトの削除ロックを初期化します。
構文
void IoInitializeRemoveLock(
[in] Lock,
[in] Tag,
[in] Maxmin,
[in] HighWater
);
パラメーター
[in] Lock
呼び出し元が指定した IO_REMOVE_LOCK 構造体へのポインター。このルーチンは、カウンターや同期イベントなど、ロックに関する情報を使用して初期化します。 ドライバー ライターは、デバイス オブジェクトのデバイス拡張機能の一部としてこの構造体を割り当てる必要があります。
[in] Tag
ロックの作成者を識別するタグを指定します。 ドライバー ライターは通常、 ExAllocatePoolWithTag に使用されるタグのように、逆の順序で指定された 4 文字の文字列を使用します。
ドライバー検証ツールが有効になっている場合、I/O システムはこのパラメーターを使用します。 呼び出し元は常に、このパラメーターに 0 以外のタグ値を指定する必要があります。
[in] Maxmin
このロックを保持する必要がある最大分数を指定します。 0 の値は、制限がないことを意味します。 通常、この値はデバッグ中に使用され、ロックを保持するドライバー ルーチンが予想よりも長くなります。
ドライバー検証ツールが有効になっている場合、I/O システムはこのパラメーターを使用します。
[in] HighWater
ロックで許可される未処理の取得の最大数を指定します。 最大値を指定しない場合は、0 を使用します。 HighWatermark は = 0x7FFFFFFFにする <必要があります。
ドライバー検証ツールが有効になっている場合、I/O システムはこのパラメーターを使用します。
戻り値
なし
解説
ドライバーは、削除ロックを使用して、デバイスで未処理の I/O 操作を追跡し、 ドライバーがIRP_MN_REMOVE_DEVICE 要求に応答してそのデバイス オブジェクトを削除できるタイミングを判断できます。
IoInitializeRemoveLock を呼び出す前に、ドライバーはデバイス拡張機能にIO_REMOVE_LOCK構造体を割り当てる必要があります。 ドライバーは通常、デバイス オブジェクトのデバイス拡張機能の残りの部分を初期化するときに、その AddDevice ルーチンで IoInitializeRemoveLock を呼び出します。
IoReleaseRemoveLockAndWait ルーチンが返された後、ドライバーはデバイスが削除される準備が整い、I/O 操作を実行できない状態であると見なす必要があります。 そのため、ドライバーは、削除ロックを再初期化する IoInitializeRemoveLock を呼び出す必要があります。 ドライバー検証ツールによってドライバーが検証されている間にこの規則に違反すると、バグ チェックが発生します。
ドライバーはデバイス オブジェクトのデバイス拡張機能に IO_REMOVE_LOCK 構造を格納するため、ドライバーが IRP_MN_REMOVE_DEVICE 要求の処理の一環としてデバイス拡張機能を削除すると、削除ロックが削除されます。
詳細については、「 ロックの削除の使用」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 以降で使用できます。 |
対象プラットフォーム | デスクトップ |
Header | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |