IoInitializeRemoveLock 매크로(wdm.h)
IoInitializeRemoveLock 루틴은 디바이스 개체에 대한 제거 잠금을 초기화합니다.
구문
void IoInitializeRemoveLock(
[in] Lock,
[in] Tag,
[in] Maxmin,
[in] HighWater
);
매개 변수
[in] Lock
카운터 및 동기화 이벤트를 포함하여 잠금에 대한 정보를 사용하여 이 루틴이 초기화하는 호출자 제공 IO_REMOVE_LOCK 구조체에 대한 포인터입니다. 드라이버 작성기는 디바이스 개체의 디바이스 확장의 일부로 이 구조를 할당해야 합니다.
[in] Tag
잠금 작성자를 식별하는 태그를 지정합니다. 드라이버 작성기는 일반적으로 ExAllocatePoolWithTag에 사용되는 태그와 같이 역순으로 지정된 4자 문자열을 사용합니다.
드라이버 검증 도구를 사용하는 경우 I/O 시스템에서 이 매개 변수를 사용합니다. 호출자는 항상 이 매개 변수에 대해 0이 아닌 태그 값을 제공해야 합니다.
[in] Maxmin
이 잠금을 유지해야 하는 최대 시간(분)을 지정합니다. 값이 0이면 제한이 없음을 의미합니다. 이 값은 일반적으로 디버깅하는 동안 예상보다 긴 잠금을 보유하는 드라이버 루틴을 식별하는 데 사용됩니다.
드라이버 검증 도구를 사용하는 경우 I/O 시스템에서 이 매개 변수를 사용합니다.
[in] HighWater
잠금에 허용되는 미해결 획득의 최대 수를 지정합니다. 최대값을 지정하려면 0을 사용합니다. HighWatermark 는 <= 0x7FFFFFFF.
드라이버 검증 도구를 사용하는 경우 I/O 시스템에서 이 매개 변수를 사용합니다.
반환 값
없음
설명
드라이버는 제거 잠금을 사용하여 디바이스에서 미해결 I/O 작업을 추적하고 드라이버가 IRP_MN_REMOVE_DEVICE 요청에 대한 응답으로 디바이스 개체를 삭제할 수 있는 시기를 결정할 수 있습니다.
IoInitializeRemoveLock을 호출하기 전에 드라이버는 디바이스 확장에서 IO_REMOVE_LOCK 구조를 할당해야 합니다. 드라이버는 일반적으로 드라이버가 디바이스 개체에 대한 디바이스 확장의 나머지 부분을 초기화할 때 AddDevice 루틴에서 IoInitializeRemoveLock을 호출합니다.
IoReleaseRemoveLockAndWait 루틴이 반환된 후 드라이버는 디바이스를 제거할 준비가 되었으며 I/O 작업을 수행할 수 없는 상태로 간주해야 합니다. 따라서 드라이버는 제거 잠금을 다시 초기화하기 위해 IoInitializeRemoveLock 을 호출해서는 안됩니다. 드라이버 검증 도구에서 드라이버를 확인하는 동안 이 규칙을 위반하면 버그 검사 발생합니다.
드라이버는 디바이스 개체의 디바이스 확장에 IO_REMOVE_LOCK 구조를 저장하므로 드라이버가 IRP_MN_REMOVE_DEVICE 요청 처리의 일부로 디바이스 확장을 삭제하면 제거 잠금이 삭제됩니다.
자세한 내용은 잠금 제거 사용을 참조하세요.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000부터 사용할 수 있습니다. |
대상 플랫폼 | 데스크톱 |
헤더 | wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |