버그 검사 0x76: PROCESS_HAS_LOCKED_PAGES

PROCESS_HAS_LOCKED_PAGES 버그 검사 값은 0x00000076. 이 버그 검사 드라이버가 I/O 작업 후 잠긴 페이지를 해제하지 못했거나 이미 잠금 해제된 페이지의 잠금을 해제하려고 했음을 나타냅니다.

중요

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

PROCESS_HAS_LOCKED_PAGES 매개 변수

매개 변수 1 매개 변수 2 매개 변수 3 매개 변수 4 오류 원인

0x00

프로세스 개체에 대한 포인터입니다.

잠긴 페이지 수

드라이버 스택에 대한 포인터입니다(사용하도록 설정된 경우). 그렇지 않으면 이 매개 변수는 0입니다.

종료되는 프로세스에 잠긴 메모리 페이지가 있습니다. 드라이버는 프로세스가 종료되기 전에 프로세스에서 잠겼을 수 있는 메모리의 잠금을 해제해야 합니다.

0x01

드라이버에서 지정한 MDL

해당 프로세스의 현재 잠긴 메모리 페이지 수

해당 프로세스에 대한 드라이버 스택에 대한 포인터입니다(사용하도록 설정된 경우). 그렇지 않으면 이 매개 변수는 0입니다.

드라이버가 잠겨 있지 않은 프로세스 메모리 페이지의 잠금을 해제하려고 합니다.

원인

드라이버가 잠긴 페이지의 잠금을 해제하지 못했거나(매개 변수 1 값이 0x0), 드라이버가 잠겨 있지 않거나 이미 잠금 해제된 페이지의 잠금을 해제하려고 합니다(매개 변수 1 값은 0x1).

해결 방법

!analyze 디버그 확장은 버그 검사 대한 정보를 표시하며 근본 원인을 확인하는 데 도움이 될 수 있습니다.

매개 변수 1 값이 0x0

먼저 모든 실제 메모리에서 현재 프로세스 포인터에서 !search 확장을 사용합니다. 이 확장은 현재 프로세스를 가리키는 MDL(메모리 설명자 목록)을 하나 이상 찾을 수 있습니다. 다음으로, 찾은 각 MDL에서 !search 를 사용하여 현재 프로세스를 가리키는 IRP(I/O 요청 패킷)를 가져옵니다. 이 IRP에서 페이지를 누수하는 드라이버를 식별할 수 있습니다.

그렇지 않으면 레지스트리를 편집하여 오류를 발생시킨 드라이버를 검색할 수 있습니다.

  1. \\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management 레지스트리 키에서 TrackLockedPages 값을 만들거나 편집한 다음 DWORD 1로 설정합니다.

  2. 컴퓨터를 다시 시작합니다.

그러면 시스템에서 스택 추적을 저장하므로 문제를 일으킨 드라이버를 쉽게 식별할 수 있습니다. 드라이버가 동일한 오류를 다시 발생시키는 경우 버그 검사 0xCB(DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS)이 실행되고 이 오류를 일으키는 드라이버 이름이 파란색 화면에 표시되고 위치(PUNICODE_STRING) KiBugCheckDriver의 메모리에 저장됩니다.

매개 변수 1 값이 0x1

메모리를 잠그고 잠금을 해제하는 드라이버 소스 코드를 검사하고 먼저 잠기지 않고 메모리가 잠금 해제되는 instance 찾으려고 합니다.