去掉就啥反应都木有啦,你那应该也有这样的代码,不然怎么通知storage class有USB插入事件呢
我的问题很奇怪,大家帮忙看看调试信息
问题一
SC2440UsbFn!HandleUSBEvent: UFN_ATTACH
SC2440UsbFn!HandleUSBEvent: Reset
SC2440UsbFn!HandleUSBEvent: bEpIrqStat = 0;bUSBBusIrqStat = 0
SC2440UsbFn!HandleUSBEvent: bEpIrqStat = 0;bUSBBusIrqStat = 4
SC2440UsbFn!HandleUSBEvent: USB_RESET_INTR
UsbMsFn!STORE_Close: forcing storage manager to re-examine \StoreMgr\DSK1:
SC2440UsbFn!HandleUSBEvent: UFN_DETACH
UsbMsFn!STORE_Init: DeviceName = DSK1:
UsbMsFn!STORE_Init: Removable not present; default is true
UsbMsFn!STORE_Init: Removable = 1
UsbMsFn!STORE_Init: ===g_hStore = 4022615982
UsbMsFn!STORE_Init: opened store DSK1:
SDMemory: +SMC_IOControl Handle 7822816
IOCTL_DISK_GETINFO
SDMemory: -SMC_IOControl returning 1
UsbMsFn!STORE_Init: IOCTL_DISK_GETINFO passed
OpenStore的时候返回的handle 是 g_hStore = 4022615982 ,我用%u输出的
到了
fResult = DeviceIoControl(
g_hStore,
IOCTL_DISK_GETINFO,
NULL,
0,
&g_diDiskInfo,
sizeof(g_diDiskInfo),
&dwBytesReturned,
NULL);
传入到SDMemory:的IOControl里 SMC_IOControl Handle 7822816 居然handle变成7822816
问题二
下列函数被依次调用后
BOT_TransferThread
ProcessBOPipeTransfer
BOT_HandleCBW MSC_STATE_COMMAND_TRANSPORT
STORE_IsCommandSupported
BOT_ExecuteCB
STORE_ExecuteCommand
ProcessScsiRead10
fResult = DeviceIoControl(
g_hStore,
dwIoControlCode,
&sgSgReq,
sizeof(sgSgReq),
NULL,
0,
&dwBytesReturned,
NULL);
输出
UsbMsFn!BOT_HandleCBW: Length: 0x0200 Flags: 0x80 CBWLen: 0xa
UsbMsFn!STORE_IsCommandSupported: command 0x28
UsbMsFn!STORE_IsCommandSupported: READ (10)
UsbMsFn!STORE_ExecuteCommand: command 0x28
UsbMsFn!STORE_ExecuteCommand: READ (10)
UsbMsFn!ProcessScsiRead10: starting LBA/sector = 0, transfer length = 1 (sectors)
UsbMsFn!ProcessScsiRead10: ===g_hStore = 3485743006
g_fLegacyBlockDriver = 0 DISK_IOCTL_READ = 2 IOCTL_DISK_READ = 482312 dwIoControlCode = 482312
UsbMsFn!ProcessScsiRead10: IOCTL_DISK_READ failed; error = 160
UsbMsFn!STORE_ExecuteCommand: failed to execute command 0x28
UsbMsFn!BOT_ExecuteCB: Command : failed
DeviceIoControl 被调用 SMC_IOControl 居然没有被执行,DeviceIoControl就直接返回错误160了
因为调试信息太多,只能贴小部分,请高手给分析一下,为什么Handle会突变,又为什么同样的DeviceIoControl代码,同样的handle传入,在问题二里SMC_IOControl未被调用呢