다음을 통해 공유


IoReleaseRemoveLockAndWait 매크로(wdm.h)

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

통사론

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

매개 변수

[in] RemoveLock

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

[in] Tag

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

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

IoAcquireRemoveLock 호출에서 태그지정하지 않은 경우 이 매개 변수는 NULL.

반환 값

없음

발언

드라이버는 일반적으로 IRP_MN_REMOVE_DEVICE 요청에 대한 디스패치 코드에서 이 루틴을 호출합니다. 큐에 대기된 I/O 요청을 완료하려면 각 드라이버가 iRP 제거를 다음 하위 드라이버에 전달한 후 IoReleaseRemoveLockAndWait호출하고, 메모리를 해제하거나, IoDetachDevice호출하거나, IoDeleteDevice호출하기 전에 . 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