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 |
---|