다음을 통해 공유


드라이버가 프레임워크 개체를 누수하는지 확인

이 항목에서는 릴리스되지 않은 참조로 인한 드라이버 메모리 누수를 찾는 방법을 설명합니다. UMDF(User-Mode Driver Framework) 버전 1 및 2 드라이버에 적용됩니다.

UMDF 1

UMDF 버전 1에서 AddRef 에 대한 각 호출에 일치하는 릴리스 호출이 없는 경우 호출 스택이 메모리 누수를 일으킬 수 있습니다.

UMDF 버전 1 드라이버가 프레임워크 개체를 누수하는지 테스트하려면 다음 단계를 사용합니다.

  1. WDF 검증 도구 제어 애플리케이션을 사용하여 원하는 검증 도구 옵션을 설정합니다. 정기적인 테스트 중에 TrackRefCounts가 아닌 TrackObjects를 설정하여 시작합니다.

    드라이버가 언로드되면 프레임워크 개체가 삭제되지 않은 경우 프레임워크의 코드 검증 도구가 디버거에 들어가고 !wudfdumpobjects 디버거 확장을 사용하라는 메시지가 표시됩니다. 이 디버거 확장은 삭제되지 않은 개체 목록을 표시합니다.

  2. 코드 검증 도구가 드라이버가 프레임워크 개체를 누수하고 있음을 나타내는 경우 컨트롤 애플리케이션을 사용하여 TrackRefCounts 옵션을 설정합니다.

    이 옵션을 설정하면 검증 도구는 드라이버가 실행되는 동안 프레임워크 개체에 대한 참조를 추적합니다. !wudfrefhist 디버거 확장을 사용하여 개체의 참조 수를 증가하거나 감소시키는 각 호출 스택(함수 호출 집합)을 표시할 수 있습니다. 이러한 호출 스택에서 AddRefRelease 호출을 검사하여 개체의 참조 횟수를 감소시키지 않고 누출을 유발하는 스택을 찾을 수 있어야 합니다.

추가 검증 도구 옵션에 대한 자세한 내용은 UMDF 검증 도구 사용을 참조하세요.

프레임워크 개체를 삭제하는 시기에 대한 자세한 내용은 개체의 수명 관리를 참조하세요.

UMDF 2

UMDF 버전 2에서는 릴리스되지 않은 참조가 드물지만 WdfObjectReference 및 WdfObjectDereference를 사용할 때 호출 불일치로 인해 발생할 수 있습니다.

UMDF 버전 2 드라이버가 프레임워크 개체를 누수하는지 테스트하려면 다음 절차를 사용합니다.

  1. 모범 사례에 설명된 단계에 따라 UMDF 디버깅을 위해 컴퓨터를 구성합니다.

  2. 태그 추적을 사용하려면 레지스트리에서 UMDF 검증 도구와 핸들 추적을 모두 사용하도록 설정합니다. 이러한 설정은 모두HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services\드라이버 이름> 키의 드라이버 Parameters\Wdf 하위 키에 < 저장됩니다.

    UMDF 검증 도구를 사용하도록 설정하려면 VerifierOn에 0이 아닌 값을 설정합니다.

    핸들 추적을 사용하도록 설정하려면 TrackHandles 값을 하나 이상의 개체 형식 이름으로 설정하거나 별표(*)를 지정하여 모든 개체 형식을 추적합니다.

    WdfVerifier.exe 애플리케이션을 사용하여 UMDF 검증 도구 설정을 수정할 수도 있습니다.

  3. 다시 부팅하고 디버거 연결을 설정한 다음 다음 디버거 명령을 사용합니다.

UMDF 검증 도구가 켜져 있으면 KMDF와 마찬가지로 드라이버 언로드 시 메모리 누수가 감지됩니다.

KMDF 및 UMDF 버전 2 드라이버에서 참조 수를 사용하는 방법에 대한 자세한 내용은 프레임워크 개체 수명 주기를 참조하세요.