다음을 통해 공유


버그 검사 0x18: REFERENCE_BY_POINTER

REFERENCE_BY_POINTER 버그 검사의 값은 0x00000018. 이는 개체의 현재 상태에 대해 개체의 참조 수가 잘못되었음을 나타냅니다.

Important

이 문서는 프로그래머를 위한 것입니다. 컴퓨터를 사용하는 동안 파란색 화면 오류 코드를 받은 고객인 경우 파란색 화면 오류 문제 해결을 참조하세요.

REFERENCE_BY_POINTER 매개 변수

매개 변수 설명

1

참조 수가 낮아지는 개체의 개체 형식입니다.

2

참조 수가 낮아지는 개체입니다.

3

예약됨

4

예약됨

원인

개체의 현재 상태에 대해 개체의 참조 수가 잘못되었습니다. 드라이버가 개체에 대한 포인터를 사용할 때마다 드라이버는 커널 루틴을 호출하여 개체의 참조 수를 1씩 늘입니다. 드라이버가 포인터로 완료되면 드라이버는 다른 커널 루틴을 호출하여 참조 수를 1씩 줄입니다.

드라이버는 참조 수를 증가(참조)하고 감소(역참조)하는 루틴에 대한 호출을 일치시켜야 합니다. 이 버그 검사는 개체의 참조 수 불일치로 인해 발생합니다. 일반적으로 불일치는 개체의 참조 수를 너무 많이 줄여 개체를 역참조하는 추가 호출을 만드는 드라이버에 의해 발생합니다. 개체에 대한 열린 핸들이 있는 동안 개체의 참조 수가 0으로 이동하므로 이 버그 검사가 발생할 수 있습니다. 개체에 대한 열린 핸들이 있는지 여부에 관계없이 개체의 참조 수가 0 아래로 떨어질 때도 발생할 수 있습니다.

해결

드라이버가 개체의 참조 수를 늘리고 줄이는 루틴에 대한 호출과 일치하는지 확인합니다. 드라이버가 개체를 역참조하는 루틴을 추가로 호출하지 않는지 확인합니다(매개 변수 2 참조).

디버거를 사용하여 이 문제를 분석할 수 있습니다. 자세한 내용은 Windows 디버거(WinDbg)를 사용하여 크래시 덤프 분석을 참조하세요. !analyze 디버그 확장은 버그 검사에 대한 정보를 표시하며 근본 원인을 확인하는 데 도움이 될 수 있습니다.

개체에서 핸들 및 포인터 수를 찾으려면 !object 디버거 명령을 사용합니다.

kd> !object address

여기서 주소 는 매개 변수 2에 지정된 개체의 주소입니다.

이 중지 코드로 이어지는 코드에서 중단점을 설정하고 오류 코드로 한 단계 앞으로 나아갈 수도 있습니다.

Windows 디버거를 사용하여 이 문제를 해결할 준비가 되지 않은 경우 몇 가지 기본적인 문제 해결 기술을 사용할 수 있습니다.

  • 이 버그 검사를 일으키는 디바이스 또는 드라이버를 식별하는 데 도움이 될 수 있는 추가 오류 메시지는 시스템 로그인 이벤트 뷰어 확인합니다.

  • 버그 확인 메시지에서 드라이버가 식별되면 드라이버를 사용하지 않도록 설정하거나 제조업체에 드라이버 업데이트를 확인합니다.

  • 설치된 새 하드웨어가 설치된 Windows 버전과 호환되는지 확인합니다. 예를 들어 Windows 10 사양에서 필요한 하드웨어에 대한 정보를 가져올 수 있습니다.

  • 일반적인 추가 문제 해결 정보는 버그 검사 블루 스크린 데이터 분석을 참조 하세요.