驱动激活ActivateDevice返回值为1 (急求帮忙 在线等)
ZZST 2013-02-04 04:18:43 我的USB设备驱动 在USBDeviceAttach的时候 调用ActivateDevice返回1
弄了一周了 找不到原因 贴代码 求大神相助
#define CLIENT_REGKEY_SZ TEXT("Drivers\\USB\\ClientDrivers\\Cmmb_Class")BOOL
USBInstallDriver(LPCWSTR szDriverLibFile )
{
BOOL fRet = FALSE;
RETAILMSG(1,(TEXT("USBInstallDriver:%s\r\n"), szDriverLibFile));
fRet = RegisterClientDriverID( wsUsbDeviceID );
fRet = RegisterClientSettings( szDriverLibFile,
wsUsbDeviceID,
NULL,
&CmmbDriverSettings );
if ( !GetSetKeyValues( CLIENT_REGKEY_SZ,
&UsbCMMBReg[0],
SET,
TRUE ) ) {
RETAILMSG( 1, (TEXT("GetSetKeyValues failed!\n")));
TEST_TRAP();
}
if ( !GetSetKeyValues( CLIENT_REGKEY_SZ,
&UsbCMMBReg[1],
SET,
TRUE ) ) {
RETAILMSG( 1, (TEXT("GetSetKeyValues failed!\n")));
TEST_TRAP();
}
return fRet;
}
BOOL
USBDeviceAttach(
USB_HANDLE hDevice,
LPCUSB_FUNCS UsbFuncs,
LPCUSB_INTERFACE UsbInterface,
LPCWSTR UniqueDriverId,
LPBOOL AcceptControl,
LPCUSB_DRIVER_SETTINGS UsbDriverSettings,
DWORD Unused
)
{
LPCUSB_DEVICE lpUsbDev=NULL;
PCMMBUSBINFO pDrv;
WCHAR wsSubClassRegKey[sizeof(CLIENT_REGKEY_SZ)+16] = CLIENT_REGKEY_SZ;
*AcceptControl = FALSE;
lpUsbDev = (UsbFuncs->lpGetDeviceInfo)(hDevice);
//保存必要的信息供驱动程序其他部分使用
pDrv = (PCMMBUSBINFO)LocalAlloc (LPTR, sizeof (CMMBUSBINFO));
pDrv->dwSize = sizeof (PCMMBUSBINFO);
pDrv->hDevice = hDevice;
pDrv->lpUsbFuncs = UsbFuncs;
pDrv->lpInterface = UsbInterface;
//激活流驱动
pDrv->hStreamDevice = ActivateDevice (wsSubClassRegKey, (DWORD )pDrv);
if (pDrv->hStreamDevice) {
//注册回调函数
(*UsbFuncs->lpRegisterNotificationRoutine)(
hDevice,
USBDeviceNotifications,
pDrv);
} else {
LocalFree(pDrv);
return FALSE;
}
//驱动可以操作该设备
*AcceptControl = TRUE;
return TRUE;
}
插入设备后注册表信息:
/HKEY_LOCAL_MACHINE/Drivers/USB/ClientDrivers/Cmmb_Class
dll UsbCmmb.dll
prefix CMMB
/HKEY_LOCAL_MACHINE/Drivers/USB/LoadClient/7880_1/0_0_0/255_0_255/Cmmb_Class
dll UsbCmmb.dll
.def文件中
EXPORTS
USBInstallDriver
USBDeviceAttach
USBUnInstallDriver
CMMB_Init
CMMB_Deinit
CMMB_Open
CMMB_Close
CMMB_Read
CMMB_Write
CMMB_Seek
CMMB_PowerDown
CMMB_PowerUp
CMMB_IOControl
用dumpbin /EXPORTS UsbCmmb.dll发现输出符号为CMMB_Init