按照usbintel编写了摄像头驱动,正常使用是可以卸载的,但是在读取图像的时候,突然拔掉摄像头,上层应用程序不能退出线程,怀疑会有irp或srb在pending状态。在usb拔掉后,捕获到SRB_SURPRISE_REMOVAL,ddk文档说
usbcamd对SRB_SURPRISE_REMOVAL 的处理如下
USBCAMD: Cancel pending data SRBs and return the SRBs with STATUS_CANCELLED.
USBCAMD: Call CamStopCaptureEx/CamFreeBandwidthEx on all opened streams
USBCAMD: Return STATUS_CANCELLED on any read/write SRBs that come down after SRB_SURPRISE_REMOVAL.
但不知道为什么没有cancel成功呢?
下面是我的log
'INTELCAM:
'rawFrameBuffer: 84a80000
'INTELCAM:
'RawFrameLength: 8000
'INTELCAM:
'JpegStart: 84a80000
'INTELCAM:
'JpegLength: 2969
'INTELCAM:
'INTELCAM_ReceiveDataPacket
'INTELCAM:
'AdapterReceivePacket
'INTELCAM:
'SRB_SURPRISE_REMOVAL!!
'INTELCAM:
'INTELCAM_StopVideoCaptureEx
'INTELCAM:
'INTELCAM_StopVideoCapture
'INTELCAM:
'INTELCAM_FreeBandwidthEx
'INTELCAM:
'INTELCAM_FreeBandwidth
这时候线程就死在这里了,强制退出程序后,有如下log
'INTELCAM:
'INTELCAM_ProcessRawVideoFrameEx
'INTELCAM:
'INTELCAM_ProcessRawVideoFrame
'INTELCAM:
'FrameLength:0 RawFrameLength:0
'INTELCAM:
'================================!
'INTELCAM:
'INTELCAM_ProcessRawVideoFrameEx
'INTELCAM:
'INTELCAM_ProcessRawVideoFrame
'INTELCAM:
'FrameLength:0 RawFrameLength:0
'INTELCAM:
'================================!
'INTELCAM:
'INTELCAM_ProcessRawVideoFrameEx
'INTELCAM:
'INTELCAM_ProcessRawVideoFrame
'INTELCAM:
'FrameLength:0 RawFrameLength:0
'INTELCAM:
'================================!
'INTELCAM:
'INTELCAM_ProcessRawVideoFrameEx
'INTELCAM:
'INTELCAM_ProcessRawVideoFrame
'INTELCAM:
'FrameLength:0 RawFrameLength:0
'INTELCAM:
'================================!
'INTELCAM:
'INTELCAM_ProcessRawVideoFrameEx
'INTELCAM:
'INTELCAM_ProcessRawVideoFrame
'INTELCAM:
'FrameLength:0 RawFrameLength:0
'INTELCAM:
'================================!
'INTELCAM:
'AdapterReceivePacket
'INTELCAM:
INTELCAM_UnInitialize
'INTELCAM:
UnInitialize
'INTELCAM:
'AdapterReceivePacket
'INTELCAM:
'AdapterReceivePacket
'INTELCAM:
'Driver Entry
'INTELCAM:
'AdapterReceivePacket
'INTELCAM:
'INTELCAM_HwInitialize
'INTELCAM:
'INTELCAM_ConfigureEx
'INTELCAM:
'INTELCAM_Configure
'INTELCAM:
''Configure 0x0
'INTELCAM:
'PipeConfigListSize:2
'INTELCAM:
INTELCAM_Initialize
'INTELCAM:
InitializeHardware 0x0
'INTELCAM:
'AdapterReceivePacket
'INTELCAM:
GetStreamFormatsArray
'INTELCAM:
'AdapterReceivePacket
'INTELCAM:
INTELCAM_CompleteInitialization
'INTELCAM:
'AdapterReceivePacket
'INTELCAM:
'AdapterReceivePacket
'INTELCAM:
'AdapterReceivePacket
'INTELCAM:
'AdapterReceivePacket
'INTELCAM:
'AdapterReceivePacket
'INTELCAM:
'AdapterReceivePacket
线程被退出,驱动被卸载