次の方法で共有


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 以降で使用できます。
ターゲット プラットフォーム デスクトップ
ヘッダー wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

関連項目

IoAcquireRemoveLock

IoInitializeRemoveLock

IoReleaseRemoveLock

IoReleaseRemoveLockAndWait