阅读:2682回复:12
请问,为什么函数都执行成功了.安装的虚拟设备还是未知设备?
下面是我的代码,我一步步的debug过了,每步都是成功的,但是安装完后,发现还是未知设备,请高手指点.
extern \"C\" BOOL APIENTRY EXPORT InstallVirtualDevice(LPCTSTR lpszDeviceID,LPCTSTR lpszInfFullPath) { HDEVINFO DeviceInfoSet = INVALID_HANDLE_VALUE; SP_DEVINFO_DATA DeviceInfoData; GUID ClassGUID; TCHAR ClassName[MAX_CLASS_NAME_LEN]; TCHAR hwIdList[LINE_LEN+4]; BOOL reboot = FALSE; LPCTSTR hwid = NULL; ZeroMemory(hwIdList,sizeof(hwIdList)); lstrcpyn(hwIdList,hwid,LINE_LEN); if (!SetupDiGetINFClass (lpszInfFullPath,&ClassGUID,ClassName,sizeof(ClassName),0)) { goto final; } DeviceInfoSet = SetupDiCreateDeviceInfoList(&ClassGUID,0); if(DeviceInfoSet == INVALID_HANDLE_VALUE) { goto final; } DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); if (!SetupDiCreateDeviceInfo(DeviceInfoSet, ClassName, &ClassGUID, NULL, 0, DICD_GENERATE_ID, &DeviceInfoData)) { goto final; } if(!SetupDiSetDeviceRegistryProperty(DeviceInfoSet, &DeviceInfoData, SPDRP_HARDWAREID, (LPBYTE)hwIdList, (lstrlen(hwIdList)+1+1)*sizeof(TCHAR))) { goto final; } if (!SetupDiCallClassInstaller(DIF_REGISTERDEVICE, DeviceInfoSet, &DeviceInfoData)) { goto final; } if (!UpdateDriverForPlugAndPlayDevices( NULL, lpszDeviceID, lpszInfFullPath, INSTALLFLAG_FORCE, &reboot) ) { goto final; } final: if (DeviceInfoSet != INVALID_HANDLE_VALUE) { SetupDiDestroyDeviceInfoList(DeviceInfoSet); } return TRUE; } |
|
最新喜欢:![]()
|
沙发#
发布于:2005-03-06 15:02
不成功?是什么意思,在currentcontrolset的enum下没有设备,还是驱动不能run?
inf文件是什么?能否作为附件发上了。 估计是你的inf有问题,是否可以通过手动安装成功? |
|
|
板凳#
发布于:2005-03-07 17:26
手动可以成功.我现在找到原因了,是代码问题.在hwid链里,我把一个NULL赋给了第一个元素,晕.应该把传进来的ID赋给第一个元素.
顺便问一下,怎么安装虚拟猫啊??我要安装了五种设备,已经安装了四种(虚拟声卡,网卡,人体输入设备,虚拟串口),第五种是虚拟猫,不知道为什么用前面的方法安装不上..虚拟猫只有一个INF,这里用的是系统的sys,(modem.sys,rootmdm.sys).盼高手告知. |
|
|
地板#
发布于:2005-03-24 09:39
eciniar你好,我也卡在这儿。
这是ddk带的例子吧,我也试过了,函数执行成功,但是设备管理器看到的是个感叹号,手工安装 就正常了,我是在xp下安装usb驱动。 我是新手,还没有入门,请多指教 |
|
地下室#
发布于:2005-03-25 08:11
用代码方法的话,你可以把LPCTSTR hwid = NULL;
这句删除再编译一下行了. 你也可以直接用DEVCON这个工具,注意用法,要加device id,以及inf path |
|
|
5楼#
发布于:2005-03-26 12:05
用代码方法的话,你可以把LPCTSTR hwid = NULL; 我用devcon和WINDDK\\2600\\src\\setup\\install\\install.c安装usb驱动,结果一样,都是“!”号;手工安装就正常了,不解 |
|
6楼#
发布于:2005-03-28 07:55
你把你用devcon的安装命令发出来看看.
|
|
|
7楼#
发布于:2005-03-28 08:16
devcon install SERWPL.INF \"USB\\VID_067b&PID_2303\"
这是我发的求助帖子: (求助)在xp下分别使用intall.c和向导安装inf驱动,结果却不同 http://www.driverdevelop.com/forum/viewthread.php?tid=89164 SERWPL.INF内容: http://www.driverdevelop.com/forum/viewthread.php?tid=88975 [编辑 - 3/28/05 by xl1533] |
|
8楼#
发布于:2005-03-28 12:11
在INF前面加上全路径,你用INF全路径试试
|
|
|
9楼#
发布于:2005-03-28 15:26
难得有eciniar兄弟这么热心的,谢谢
我的问题是执行devcon install SERWPL.INF \"USB\\VID_067b&PID_2303\"成功 但是安装的内容与手动安装却不一样:(以下是从setupapi.log中看到的结果) 使用向导安装: 实际安装部分: [ComPort.NT]。 “仅复制”安装 \"USB\\VID_067B&PID_2303\\00000001\"。 --- 在注册表中的位置 使用install.c或devcon安装 实际安装部分:[ComPort.NT.Interfaces]。 “仅复制”安装 \"ROOT\\USB\\0000\"。--------------------- 在注册表中的位置 |
|
10楼#
发布于:2005-03-29 08:06
晕,那我不懂了.
|
|
|
11楼#
发布于:2005-07-07 15:57
请问如何DEBUG?
用什么工具? |
|
|
12楼#
发布于:2005-07-14 20:48
我也有这个问题,驱动已经加载成功,设备管理器中的"系统设备"已经加载上,但是在"其他设备"中还有这个设备,并且问号显示,只有重新启动才能解决,请大家帮忙.
|
|