2013-01-11 5 views
0

PREFast를 사용하여 Windows7 용 일부 드라이버 코드 빌드를 확인하고 있습니다. 코드WDK7 : Prefast에서 IoAttachDeviceToDeviceStack을 사용하면 "메모리가 있어야 함"경고가 표시됨

stackDeviceObject = IoAttachDeviceToDeviceStack(deviceObject, PhysicalDeviceObject); 

의 다음 행은 경고를 제공합니다 :

warning 28107: The Memory 'deviceObject' must be held when calling 'IoAttachDeviceToDeviceStack'. 

deviceObject는 IoCreateDevice에 대한 이전 호출로 얻을 수있다. 누구든지이 경고의 의미와 그걸 제거하는 방법을 알고 있습니까?

PREfast 도움말에 "함수 호출시 함수를 호출하기 전에 프로그램에서 획득해야하는 리소스입니다. 결과적으로 함수 호출이 실패합니다."

도움말 페이지가 제공하는 예는 다음 가정으로 경고를 제거한다 KaEnterCriticalRegion 및 KaLeaveCriticalRegion, 호출 사이에 (이 경고를 준다) ExAcquireResourceLite 및 ExReleaseResourceLite 호출 한 쌍을 둘러싸고,하지만 난 방법을 모르는 이 정보를 IoAttachDeviceToDeviceStack에 대한 나의 호출에 적용하십시오.

모든 조언을 주시면 감사하겠습니다.

답변

0

나는 내 자신의 질문에 대한 답을 가지고 있다고 믿는다. IoCreateObject에 대한 호출은이 함수에서 호출 된 별도의 함수에 있습니다. 이것이 PREfast가 IoAttachDeviceToDeviceStack에 대한 호출이 호출되기 전에이 함수가 호출되고 deviceObject가 올바르게 초기화 된 것을 보지 못하게한다고 생각합니다.

IoCreateObject 호출을 IoAttachDeviceToDeviceStack과 같은 함수로 옮겼습니다. 경고가 사라졌습니다.

이 글을 읽고 답을 찾으려 고 노력한 사람 덕분입니다.