DEV/Driver

WinDbg 분석 (커널 드라이버) #1

MasterJ 2009. 12. 11. 02:18


BUGCODE_USB_DRIVER (fe)
USB Driver bugcheck, first parameter is USB bugcheck code.
Arguments:
Arg1: 00000002, BAD_URB The USB client driver has submitted a URB that is
 still attached to another IRP still pending in the bus
 driver.
Arg2: 8975b728, Address of pending IRP.
Arg3: 897ac5e8, Address of IRP passed in.
Arg4: 897b4e60, Address URB that caused the error.

무슨 내용인지 잘모르겠다 .
하지만 Argument 값을 보니
IRP 와 URB 문제 인것같이 보인다.

콜 스택을 보자

주소 는 지웠다
nt!RtlpBreakWithStatusInstruction
nt!KiBugCheckDebugBreak+0x19
nt!KeBugCheck2+0x574
nt!KeBugCheckEx+0x1b
USBPORT!USBPORT_FindUrbInIrpTable+0x115
USBPORT!USBPORT_FlushPendingList+0x43a
USBPORT!USBPORT_QueueTransferUrb+0x248
USBPORT!USBPORT_AsyncTransfer+0x30
USBPORT!USBPORT_ProcessURB+0x3f4
USBPORT!USBPORT_PdoInternalDeviceControlIrp+0x7e
USBPORT!USBPORT_Dispatch+0x148
nt!IopfCallDriver+0x31
usbhub!USBH_PassIrp+0x18
usbhub!USBH_PdoUrbFilter+0xbd
usbhub!USBH_PdoDispatch+0x202
usbhub!USBH_HubDispatch+0x48
nt!IopfCallDriver+0x31
TouchUSB!Polling_Async_Int_Complete+0x97f

콜스택은 특성상 밑에서 위로 보면된다.
참 멀리 가서 도 죽었다.

보기에는 내가 만든 드라이버 TouchUSB 함수 Polling_Async_Int_Complete
에서 IRP 를 잘 만들고 보냈는데

USB BUS에서 수행중에 문제가 생긴걸로 보인다.
 
내 가 만든 드라이버는

디바이스 오브 젝트가 두개이며
마우스 형태의 드라이버 이다 .

중간 중간 어플리 케이션 과의 통신을 위하여

오브젝트 를 하나 더 만들었다.

이유는

마우스드라이버 는 상위 드라이버 Mouclass 에서

심볼을 이용한 APP 에서의 Create 를 허용 치 않는다 .

내가 만든 드라이버에서 CreateFile에 대응 하는  Major_Create

상위 Moucless 에서 필터링 한다 .

한마디 로 CREATE  IRP 가 내려 오지 않는다.

다시 원점으로 돌아와서 보자면

하위 드라이버로 Irp  를 만들어 보내는 리드 스레드에서

완료 되지 않은 Irp  가 USB BUS 에 존재 한 상태에서

다시 IRP 를 복수로 보냈기 때문 으로 보인다 .

IRP 를 만들어 보내는 루틴 에서는

보낸 IRP 의 주소를 조회 하여 완료 되지 않 았을 시에는

보내는 작업을 못하도록 막는 코드를 삽입 하였다.

현재 의 이해력 으로는 여기까지 .






 

'DEV > Driver' 카테고리의 다른 글

windows kernel debug with windbg.  (3) 2014.06.27