次の方法で共有


IoAcquireRemoveLock マクロ (wdm.h)

IoAcquireRemoveLock ルーチンは、削除ロックの数を増やし、関連付けられているデバイス オブジェクトをデバイス スタックからデタッチしたり削除したりしないことを示します。

構文

NTSTATUS
IoAcquireRemoveLock (
    _Inout_ PIO_REMOVE_LOCK RemoveLock,
    _In_opt_ PVOID          Tag
    );

パラメーター

[in] RemoveLock

呼び出し元が IoInitializeRemoveLock の以前の呼び出しで初期化したIO_REMOVE_LOCK構造体へのポインター。

[in, optional] Tag

必要に応じて、削除ロックを取得するこのインスタンスを識別する呼び出し元が指定したタグを指します。 たとえば、ドライバーディスパッチ ルーチンは、通常、ルーチンが処理している IRP へのポインターにこのパラメーターを設定します。

ドライバーが IoAcquireRemoveLock の呼び出しでタグを指定する場合、ドライバーは、対応する IoReleaseRemoveLock の呼び出しで同じタグを指定する必要があります。

タグは一意である必要はありませんが、デバッグ中に意味のあるものにする必要があります。

戻り値

なし

解説

IoAcquireRemoveLock マクロは、IOAcquireRemoveLockEx の戻り値をラップして想定し、NTSTATUS を返します。

戻り値 説明
STATUS_SUCCESS 呼び出しが成功したことを示します。
STATUS_DELETE_PENDING ドライバーがデバイスのIRP_MN_REMOVE_DEVICEを受信し、 IoReleaseRemoveLockandWait を呼び出したことを示すエラー値。 そのルーチンは、ドライバーに制御を返す前に、すべての削除ロックがクリアされるのを待機しています。

ルーチンが STATUS_SUCCESS以外の値を返す場合は、デバイスで新しい操作を開始しないでください。

ドライバーは、ロックを使用する前に IoInitializeRemoveLock を呼び出して削除ロックを初期化する必要があります。

ドライバーは、不要になったときにロックを解放するために IoReleaseRemoveLock を呼び出す必要があります。

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

要件

要件
対象プラットフォーム デスクトップ
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI コンプライアンス規則 CompleteRequestStatusCheck(wdm), MarkDevicePower(wdm), MarkPower(wdm), MarkPowerDown(wdm), MarkQueryRelations(wdm), MarkStartDevice(wdm), MultRemoveLock(wdm), NsRemoveLockMnRemove(wdm), NsRemoveLockMnSurpriseRemove(wdm), NsRemoveLockQueryMnRemove(wdm), PowerDownAllocate(wdm), PowerDownFail(wdm), PowerUpFail(wdm), RemoveLock(wdm)RemoveLockCheck(wdm)RemoveLockForward(wdm)RemoveLockForward2(wdm)RemoveLockForwardDeviceControl(wdm)RemoveLockForwardDeviceControl2(wdm)RemoveLockForwardDeviceControlInternal(wdm)RemoveLockForwardDeviceControlInternal2(wdm)RemoveLockForwardRead(wdm)RemoveLockForwardRead2(wdm)RemoveLockForwardWrite(wdm)、、 RemoveLockForwardWrite2(wdm), RemoveLockMnRemove(wdm), RemoveLockMnRemove2(wdm), RemoveLockMnSurpriseRemove(wdm)RemoveLockQueryMnRemove(wdm)RemoveLockRelease2(wdm)RemoveLockReleaseCleanup(wdm)RemoveLockReleaseClose(wdm)RemoveLockReleaseCreate(wdm)RemoveLockReleaseDeviceControl(wdm)RemoveLockReleaseInternalDeviceControl(wdm)、、 RemoveLockReleasePnp(wdm)RemoveLockReleasePower(wdm)RemoveLockReleaseRead(wdm)RemoveLockReleaseShutdown(wdm)RemoveLockReleaseSystemControl(wdm)RemoveLockReleaseWrite(wdm)WmiForward(wdm)

こちらもご覧ください

IoInitializeRemoveLock

IoReleaseRemoveLock

IoReleaseRemoveLockAndWait