다음을 통해 공유


ObDereferenceObjectDeferDelete 함수(wdm.h)

ObDereferenceObjectDeferDelete 루틴은 지정된 개체에 대한 참조 수를 감소시키고, 개체 보존을 확인하고, 교착 상태를 방지합니다.

구문

void ObDereferenceObjectDeferDelete(
  [in] PVOID Object
);

매개 변수

[in] Object

개체 본문에 대한 포인터입니다.

반환 값

없음

설명

ObDereferenceObjectDeferDelete 는 개체의 참조 수가 0에 도달하면 개체 관리자가 개체 삭제 요청을 작업자 스레드에 전달한다는 점을 제외하고 ObDereferenceObject 와 유사합니다. 따라서 삭제는 나중에 IRQL = PASSIVE_LEVEL 발생합니다.

개체의 현재 스레드에 의한 즉각적인 삭제(ObDereferenceObject 사용)로 인해 교착 상태가 발생할 수 있는 경우 개체에 대해 ObDereferenceObjectDeferDelete를 사용합니다.

예를 들어 드라이버 스택의 상위 수준 드라이버가 잠금을 보유할 때 ObDereferenceObject 를 사용하여 KTM( 커널 트랜잭션 관리자 ) 개체를 역참조하는 경우 이러한 교착 상태가 발생할 수 있습니다.

이러한 교착 상태를 방지하려면 ObDereferenceObject 대신 ObDereferenceObjectDeferDelete를 사용하여 KTM 개체를 역참조합니다.

개체 영속성 및 특성에 대한 자세한 내용은 ObDereferenceObject를 참조하세요.

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 wdm.h(Fltkernel.h, Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= DISPATCH_LEVEL

추가 정보

ObDereferenceObject

ObReferenceObject