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) |
추가 정보
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기