ObDereferenceObjectDeferDeleteWithTag 함수(wdm.h)

ObDereferenceObjectDeferDeleteWithTag 루틴은 지정된 개체에 대한 참조 수를 감소시키고, 교착 상태를 방지하기 위해 개체 삭제를 연기하고, 개체 참조 추적을 지원하기 위해 개체에 4바이트 태그 값을 씁니다.

구문

void ObDereferenceObjectDeferDeleteWithTag(
  [in] PVOID Object,
  [in] ULONG Tag
);

매개 변수

[in] Object

개체에 대한 포인터입니다. 호출자는 개체를 만들 때 또는 개체를 연 후 ObReferenceObjectByHandleWithTag 루틴에 대한 이전 호출에서 이 포인터를 가져옵니다.

[in] Tag

4 바이트 사용자 지정 태그 값을 지정합니다. 자세한 내용은 아래 설명 부분을 참조하십시오.

반환 값

없음

설명

ObDereferenceObjectDeferDeleteWithTag는 개체의 참조 수가 0에 도달하면 ObDereferenceObjectDeferDeleteWithTag가 개체 삭제 요청을 작업자 스레드에 전달한다는 점을 제외하고 ObDereferenceObjectWithTag와 유사합니다. IRQL = PASSIVE_LEVEL 실행되는 작업자 스레드는 나중에 개체를 삭제합니다.

현재 스레드에서 개체를 즉시 삭제하면 교착 상태가 발생할 수 있는 경우 ObDereferenceObjectWithTag 를 호출하여 개체를 역참조하지 마세요. 대신 ObDereferenceObjectDeferDeleteWithTag 를 호출하여 개체를 역참조합니다.

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

개체 영속성 및 개체 특성에 대한 자세한 내용은 ObDereferenceObjectWithTag를 참조하세요. 개체 참조에 대한 자세한 내용은 개체의 수명 주기를 참조하세요.

호출자가 개체에 사용자 지정 태그를 쓸 수 없다는 점을 제외하고 ObDereferenceObjectDeferDelete 루틴은 ObDereferenceObjectDeferDeleteWithTag와 유사합니다. Windows 7 이상 버전의 Windows에서 ObDereferenceObjectDeferDelete 는 항상 개체에 기본 태그 값('tlfD')을 씁니다. ObDereferenceObjectDeferDelete에 대한 호출은 Tag = 'tlfD'를 지정하는 ObDereferenceObjectDeferDeleteWithTag 호출과 동일한 효과를 집니다.

Windows 디버깅 도구에서 개체 참조 추적을 보려면 !obtrace 커널 모드 디버거 확장을 사용합니다. Windows 7에서는 개체 참조 추적을 사용하는 경우 개체 참조 태그를 표시하도록 !obtrace 확장이 향상되었습니다. 기본적으로 개체 참조 추적은 꺼져 있습니다. Gflags( Global Flags Editor )를 사용하여 개체 참조 추적을 사용하도록 설정합니다. 자세한 내용은 태그를 사용하여 개체 참조 추적을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 7 이상 버전의 Windows 운영 체제에서 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL

추가 정보

ObDereferenceObjectDeferDelete

ObDereferenceObjectWithTag

ObReferenceObjectByHandleWithTag