다음을 통해 공유


IoReleaseRemoveLockAndWait 매크로(wdm.h)

IoReleaseRemoveLockAndWait 루틴은 드라이버가 IoAcquireRemoveLock에 대한 이전 호출에서 획득한 제거 잠금을 해제하고 잠금의 모든 획득이 해제될 때까지 기다립니다.

구문

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

매개 변수

[in] RemoveLock

호출자가 IoAcquireRemoveLock에 대한 이전 호출에서 전달한 IO_REMOVE_LOCK 구조체에 대한 포인터입니다.

[in] Tag

IoAcquireRemoveLock에 대한 이전 호출에서 전달된 호출자 제공 태그에 대한 포인터입니다.

드라이버가 잠금을 획득할 때 Tag 를 지정한 경우 드라이버는 잠금을 해제할 때 동일한 태그 를 지정해야 합니다.

IoAcquireRemoveLock 호출에서 Tag를 지정하지 않은 경우 이 매개 변수는 NULL입니다.

반환 값

없음

설명

드라이버는 일반적으로 IRP_MN_REMOVE_DEVICE 요청에 대한 디스패치 코드에서 이 루틴을 호출합니다. 큐에 대기 중인 I/O 요청을 완료하려면 각 드라이버가 제거 IRP를 다음 하위 드라이버에 전달하고 메모리를 해제하기 전에IoDetachDevice를 호출하거나 IoDeleteDevice를 호출한 IoReleaseRemoveLockAndWait을 호출해야 합니다. IoReleaseRemoveLockAndWait 루틴은 버스 드라이버가 미해결 상태일 수 있는 모든 IRP(예: IRP_MN_WAIT_WAKE IRP)를 취소할 때까지 기다립니다.

드라이버는 IoReleaseRemoveLockAndWait을 호출하기 전에 제거 잠금을 획득해야 합니다. 일반적으로 드라이버는 switch 문 앞에 DispatchPnp 루틴 초기에 IoAcquireRemoveLock을 호출합니다. 따라서 IRP_MN_REMOVE_DEVICE 처리하는 코드에서 IoReleaseRemoveLockAndWait을 호출하기 전에 필요한 인수를 포함하여 각 PnP 작업에 대해 잠금이 획득됩니다.

IRP_MN_REMOVE_DEVICE 디스패치 코드 이외의 코드에서 잠금을 해제하려면 IoReleaseRemoveLock을 사용합니다.

특정 제거 잠금에 대해 IoReleaseRemoveLockAndWait 이 호출되면 동일한 제거 잠금에 대한 IoAcquireRemoveLock 에 대한 후속 호출이 실패합니다. IoReleaseRemoveLockAndWait 은 제거 잠금의 미해결 인수가 모두 해제될 때까지 반환되지 않습니다.

IoReleaseRemoveLockAndWait이 반환되면 드라이버는 디바이스를 제거할 준비가 되었으며 I/O 작업을 수행할 수 없는 상태로 간주해야 합니다. 따라서 드라이버는 제거 잠금을 다시 초기화하기 위해 IoInitializeRemoveLock 루틴을 호출해서는 안됩니다. 드라이버 검증 도구에서 드라이버를 확인하는 동안 이 규칙을 위반하면 버그 검사 발생합니다.

자세한 내용은 잠금 제거 사용을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000부터 사용할 수 있습니다.
대상 플랫폼 데스크톱
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
라이브러리 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