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 루틴은 IoReleaseRemoveLock이 획득 횟수가 0임을 나타내는 이벤트를 설정하기 전까지는 반환되지 않습니다. IoReleaseRemoveLockAndWait이 반환되면 드라이버는 디바이스 개체를 안전하게 분리하고 삭제할 수 있습니다.
자세한 내용은 잠금 제거 사용을 참조하세요.