IoReleaseRemoveLock マクロ (wdm.h)
IoReleaseRemoveLock ルーチンは、IoAcquireRemoveLock の以前の呼び出しで取得した削除ロックを解放します。
構文
void IoReleaseRemoveLock(
[in] RemoveLock,
[in] Tag
);
パラメーター
[in] RemoveLock
呼び出し 元がIoAcquireRemoveLock の以前の呼び出しに渡したIO_REMOVE_LOCK構造体へのポインター。
[in] Tag
IoAcquireRemoveLock の以前の呼び出しに渡された呼び出し元が指定したタグへのポインター。
ドライバーがロックを取得したときに タグ を指定した場合、ドライバーはロックを解除するときに同じ タグ を指定する必要があります。
IoAcquireRemoveLock の呼び出しで Tag が指定されていない場合、このパラメーターは NULL になります。
戻り値
なし
解説
ドライバーは 、IoAcquireRemoveLock を呼び出した I/O 操作が完了すると 、IoReleaseRemoveLock を呼び出します。
- IoCompletion ルーチンを設定する I/O 操作 (電源と PnP IRP を含む) の場合、ドライバーは IoCompleteRequest を呼び出した後、IoCompletion ルーチンで IoReleaseRemoveLock を呼び出す必要があります。
- IoCompletion ルーチンを設定しない I/O 操作の場合、ドライバーは、現在の IRP を次の下位ドライバーに渡した後、ディスパッチ ルーチンを終了する前に IoReleaseRemoveLock を呼び出す必要があります。
IoReleaseRemoveLock は、削除ロックの未処理の取得数をデクリメントします。 カウントが 0 になり、ドライバーが IRP_MN_REMOVE_DEVICE 要求を受信した場合、 IoReleaseRemoveLock は内部イベントを設定します。 ドライバーは、デバイス オブジェクトを削除する準備ができたら、同様のルーチン IoReleaseRemoveLockAndWait を呼び出します。 ドライバーは、IRP_MN_REMOVE_DEVICE要求のディスパッチ コードでのみこの呼び出し を 行います。 IoReleaseRemoveLockAndWait ルーチンは、取得数が 0 であることを示すイベントを IoReleaseRemoveLock が設定するまで戻りません。 IoReleaseRemoveLockAndWait が返された後、ドライバーはデバイス オブジェクトを安全にデタッチして削除できます。
詳細については、「 ロックの削除の使用」を参照してください。