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 |