2017-03-06 16 views
0

Windows Server 2016에서 내 virtualHBA 드라이버에 문제가 있습니다. A가 HLK 크래시 덤프 지원 테스트를 실행했습니다. 10 회 중 3 회 시험 합격. 3 가지 실패한 테스트에서 전체 덤프 또는 커널 덤프 또는 미니 덤프을 사용하는 동안 크래시 덤프가 0 %에서 중단됩니다.ExAllocatePoolWithTag에 대한 호출이 반환되지 않음

커널을 디버깅 할 때 버퍼 할당에 대한 ExAllocatePoolWithTag() 호출이 실제로 반환되지 않는 것으로 나타났습니다.

다음은 을 반환하지 않는다는 진술입니다.

pDeviceExtension->pcmdbuf=(struct mycmdrsp *)ExAllocatePoolWithTag(NonPagedPoolCacheAligned,pcmdqSignalSize,((ULONG)'TA1')); 

나는 이것을 웹에서 검색했다. 그러나 발견 된 모든 페이지는이 함수에 초점을 맞추고 있습니다. NULL 제 경우에는 반환하지 않습니다.

전진하는 방법에 대한 도움을 주시면 감사하겠습니다.

미리 감사드립니다.

답변

3

크래시 덤프 모드에서는 메모리를 할당 할 수 없습니다. 인터럽트가 비활성화되어 HIGH_LEVEL에서 실행 중이므로 잘못된 IRQL에서이 API를 호출합니다.

일반적인 하드웨어 어댑터의 솔루션은 일반적인 HwFindAdapter 호출 중에 PORT_CONFIGURATION_INFORMATION 구조에 RequestedDumpBufferSize를 설정하는 것입니다. 그런 다음 크래시 덤프 모드에서 다시 호출되면 CrashDumpRegion 필드를 사용하여 덤프 버퍼 할당을 가져옵니다. 그런 다음이 메모리 영역에서 버퍼를 할당하기 위해 자체 "크래시 덤프 모드 전용"할당자를 작성해야합니다.

궁극적으로 얼마나 많은 메모리가 필요한지 알기가 어렵다는 점을 감안하면 엄청난 고통입니다. 보통 최소 구성 오버 헤드 (예 : 한 번에 채널 1 개, I/O 요청 8 개)를 계산 한 다음 레지스트리에서 구성 가능한 슬러시를 추가합니다. 유일한 이점은 환경이 붕괴되어 모든 노래에 참여할 필요가 없으므로 모든 춤 구성에 있다는 것입니다.

+0

정확하게 말하면 정확히 똑같은 시점에서 실패했을 것입니다. 그러나 위에서 언급했듯이 크래시 덤프 테스트는 Complete 덤프를 수행하는 동안 또는 Complete 덤프 테스트를 성공적으로 완료 한 후 커널 덤프를 수행하는 동안 4/10 시간이 걸립니다. –

+1

나는 추측하지 않습니다. 호출하기 전에 IRQL을 확인한 다음 문서를 확인하십시오. 당신이하고있는 일의 결과는 구조적으로 정의되어 있지 않습니다. 때로는 효과가 있다는 사실은 정확하지 않습니다. – snoone

+0

내가 IRQL을 점검했고, 말했듯이 HIGH_LEVEL에있다 (! irql 1. 다른 모든 프로세서의 경우 LOW_LEVEL이 표시됨). 현재 실행중인 프로세서가 확실하지 않습니다. 또한, 당신이 말하는 관련 MSDN 설명서를 찾지 못했습니다. 가능하다면 관련 링크를 공유하십시오. 링크에서 발견 된 링크는 매우 높은 레벨의 크래시 덤프 드라이버에 관한 것이지 아주 자세한 내부 부품에 대한 것이 아니기 때문에 가능합니다. –