驱动激活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



...全文
1679 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZZST 2013-02-05
  • 打赏
  • 举报
回复
结贴 结贴 再此感谢路过没留下直言片语的兄弟 和 坚持不懈的自己 下面总结一下 希望后面有碰到同样问题的兄弟能够顺利解决 先说解决方法:将Prefix的值由CMMB改成TP3注册成功 注册USB驱动之前先要确定的几件事情 1.在ActivateDevice的第一个参数指向的键下面要有你驱动的 Dll 和 Prefix信息 2.要实现XXX_Init函数 否则ActivateDevice调用错误代码为1 3.要将驱动copy到CE的Windows目录下 否则ActivateDevice调用错误代码为1610 4.错误代码为1的话 说明函数功能错误 如果确定DLL输出符号中包括这个函数 那就换个名字试试吧 注册成功后 Drivers\Active最下面会有你的驱动的信息 会调用你的XXX_Init函数
ZZST 2013-02-04
  • 打赏
  • 举报
回复
补充一下 错误在//激活流驱动 pDrv->hStreamDevice = ActivateDevice (wsSubClassRegKey, (DWORD )pDrv); 中返回 wsSubClassRegKey是我注册表的键值 在注册表中相应键值下看得到 DLL 和Prefix的值 DLL对应的驱动放在//Windows下 Prefix对应的CMMB_Init在DLL的导出符号中也存在
ZZST 2013-02-04
  • 打赏
  • 举报
回复
路过的人 请留下只言片语 感激不尽

19,504

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧