다음을 통해 공유


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

추가 정보

IoAcquireRemoveLock

IoInitializeRemoveLock

IoReleaseRemoveLock

IoReleaseRemoveLockAndWait