IoReleaseRemoveLockAndWait マクロ (wdm.h)

IoReleaseRemoveLockAndWait ルーチンは、以前の IoAcquireRemoveLock の呼び出しでドライバーが取得した削除ロックを解放し、ロックのすべての取得が解放されるまで待機します。

構文

void IoReleaseRemoveLockAndWait(
  [in]  RemoveLock,
  [in]  Tag
);

パラメーター

[in] RemoveLock

呼び出し元が IoAcquireRemoveLock への以前の呼び出しで渡したIO_REMOVE_LOCK構造体へのポインター。

[in] Tag

IoAcquireRemoveLock の以前の呼び出しで渡された呼び出し元が指定したタグへのポインター。

ドライバーがロックを取得したときに タグ を指定した場合、ドライバーは、ロックを解放するときに同じ タグ を指定する必要があります。

IoAcquireRemoveLock の呼び出しで Tag が指定されていない場合、このパラメーターは NULL です

戻り値

なし

解説

ドライバーは通常、 IRP_MN_REMOVE_DEVICE 要求のディスパッチ コードでこのルーチンを呼び出します。 キューに入った I/O 要求の完了を許可するには、各ドライバーは、削除 IRP を次の下位ドライバーに渡した後、メモリを解放するIoDetachDevice を呼び出すか、IoDeleteDevice を呼び出したIoReleaseRemoveLockAndWait を呼び出す必要があります。 IoReleaseRemoveLockAndWait ルーチンは、バス ドライバーが未処理である可能性のある IRP (たとえば、IRP_MN_WAIT_WAKE IRP) を取り消すのを待機します。

ドライバーは、 IoReleaseRemoveLockAndWait を呼び出す前に、削除ロックを取得する必要があります。 通常、ドライバーは、Switch ステートメントの前に、DispatchPnp ルーチンの早い段階で IoAcquireRemoveLock を呼び出します。 その結果、ロックは PnP 操作ごとに取得されます。これには、IRP_MN_REMOVE_DEVICEを処理するコードで IoReleaseRemoveLockAndWait を呼び出す前に必要な取得が含まれます。

IRP_MN_REMOVE_DEVICE ディスパッチ コード以外のコードからロックを解放するには、IoReleaseRemoveLock を使用します

特定の削除ロックに対して IoReleaseRemoveLockAndWait が呼び出されると、同じ削除ロックに対する 後続の IoAcquireRemoveLock の呼び出しは失敗します。 IoReleaseRemoveLockAndWait は、削除ロックの未処理の取得がすべて解放されるまで戻りません。

IoReleaseRemoveLockAndWait が返された後、ドライバーはデバイスが削除される準備が整い、I/O 操作を実行できない状態であると見なす必要があります。 そのため、ドライバーは、削除ロックを再初期化する IoInitializeRemoveLock ルーチンを呼び出す必要があります。 ドライバー検証ツールによってドライバーが検証されている間にこの規則に違反すると、バグ チェックが発生します。

詳細については、「 ロックの削除の使用」を参照してください。

要件

要件
サポートされている最小のクライアント Windows 2000 以降で使用できます。
対象プラットフォーム デスクトップ
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI コンプライアンス規則 IoReleaseRemoveLockAndWaitOutsideRemoveDevice(wdm)RemoveLock(wdm)RemoveLockCheck(wdm)RemoveLockMnRemove(wdm)RemoveLockMnRemove2(wdm)RemoveLockReleaseCleanup(wdm)RemoveLockReleaseClose(wdm)RemoveLockReleaseCreate(wdm)RemoveLockReleaseDeviceControl(wdm)RemoveLockReleaseInternalDeviceControl(wdm)RemoveLockReleasePower(wdm)、、 RemoveLockReleaseRead(wdm)RemoveLockReleaseShutdown(wdm)RemoveLockReleaseSystemControl(wdm)RemoveLockReleaseWrite(wdm)

こちらもご覧ください

DispatchPnp

IRP_MN_WAIT_WAKE

IoAcquireRemoveLock

IoDeleteDevice

IoDetachDevice

IoInitializeRemoveLock

IoReleaseRemoveLock