blackcourser
驱动牛犊
驱动牛犊
  • 注册日期2004-11-23
  • 最后登录2005-04-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:9518回复:36

预安装usb驱动程序的问题

楼主#
更多 发布于:2004-11-25 19:57
按网友所说:win2000系统
1)通过INSTALLSHIELD 脚本实现拷贝test.inf test.sys到系统相应目录下并执行
szProgram = "rundll32.exe";
szCmdLine = "setupapi.dll,InstallHinfSection DefaultInstall 132" + SUPPORTDIR + "test.inf";
LaunchAppAndWait(szProgram, szCmdLine, WAIT);
其中SUPPORTDIR指定为text.inf所在的目录。跟踪执行到LaunchAppAndWait时弹出对话框“安装失败”,
但LaunchAppAndWait函数的返回值却为0(0表示该函数成功执行)。
驱动安装不成功。

2)同样通过INSTALLSHIELD 脚本调用devcon install "d:test.inf" USB\VID_xxx 执行时却要求插入安装盘,手工指定*.sys安装后显示不成功,硬件设备中给出惊叹号。

不知是何原因,希望能得到大家的帮助!

[编辑 -  11/26/04 by  blackcourser]

最新喜欢:

force_eagleforce_...
icboy591
驱动牛犊
驱动牛犊
  • 注册日期2009-05-26
  • 最后登录2010-04-13
  • 粉丝16
  • 关注1
  • 积分64分
  • 威望611点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-12-05 11:30
tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-12-06 20:44
向tigerL和网友请教另一问题。有两种安装USBKEY驱动程序方法
1.先安装USBKWY驱动程序,后插key,能正确识别设备。
2.先插key,后安装驱动程序,则需要拔key后重新插上才能识别。有没有办法能解决先插key后安装驱动程序也能识别key呢?我看了MSDN中对“pdateDriverForPlugAndPlayDevices”函数的描述为 “This function can also be used to determine whether the device with the specified HardwareId value is plugged in”。但我试了却不成功。

[编辑 -  12/6/04 by  blackcourser]


我想应该是可以的,不过我也没试过。
省元坊
tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-12-06 20:30
我调用的应该是ANSI版的,这样有问题吗?



这个很有可能会产生影响。网上似乎有报告ansi版调用bug的文章。
试试unicode版。
省元坊
blackcourser
驱动牛犊
驱动牛犊
  • 注册日期2004-11-23
  • 最后登录2005-04-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-12-06 17:36
Song1118 :
   还没有呢,希望多交流!
blackcourser
驱动牛犊
驱动牛犊
  • 注册日期2004-11-23
  • 最后登录2005-04-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-12-06 17:22
向tigerL和网友请教另一问题。有两种安装USBKEY驱动程序方法
1.先安装USBKWY驱动程序,后插key,能正确识别设备。
2.先插key,后安装驱动程序,则需要拔key后重新插上才能识别。有没有办法能解决先插key后安装驱动程序也能识别key呢?我看了MSDN中对“pdateDriverForPlugAndPlayDevices”函数的描述为 “This function can also be used to determine whether the device with the specified HardwareId value is plugged in”。但我试了却不成功。

[编辑 -  12/6/04 by  blackcourser]
Song1118
驱动牛犊
驱动牛犊
  • 注册日期2003-03-05
  • 最后登录2005-03-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-12-06 16:57
Hi, blackcourser,
你在xp下做成功了吗?
blackcourser
驱动牛犊
驱动牛犊
  • 注册日期2004-11-23
  • 最后登录2005-04-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-12-06 16:47
tigerL :
    没有用什么更好的方法。根据你所给说的,我觉得我们的INF一定有问题。因为做驱动程序的人走了,我不太了解他写的INF文件,只能全改了,改后的INF如下:

[Version]
Signature="$CHICAGO$"
Class=USB
provider=%PR%

[Manufacturer]
%MfgName%=zhehui

[JETWAY]
%USBVID_1463&PID_05CB.DeviceDesc%=usbkey, USBVID_1463&PID_05CB

[SourceDisksNames]
1=%DiskName%,,1

[SourceDisksFiles]
usbkey.sys
usbkey.inf

[DestinationDirs]
usbkey.SysCopy = 10,System32Drivers

[DefaultInstall]
AddReg=usbkey.AddReg

[usbkey]
AddReg=usbkey.AddReg

[usbkey.NT]
AddReg=usbkey.AddReg.NT

[usbkey.NT.Services]
Addservice = usbkey, 0x00000002, usbkey.AddService

[usbkey.AddService]
DisplayName    = %usbkey.SvcDesc%
ServiceType    = 1 ; SERVICE_KERNEL_DRIVER
StartType      = 2 ; SERVICE_AUTO_START                
ErrorControl   = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary  = %12%usbkey.sys
;LoadOrderGroup = Base

[usbkey.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,usbkey.sys

[usbkey.SysCopy]
usbkey.SYS,,,0x00010020

[Strings]
PR="zh"
MfgName="zhehui"
ClassName="Usb Key"
USBVID_1463&PID_05CB.DeviceDesc="usbkey Key"
usbkey.SvcDesc="usbkey driver"
修改后,可完全实现你在另“usb驱动自安装程序的制作 ”一文中所说的1、2、3步。

[编辑 -  12/6/04 by  blackcourser]

[编辑 -  12/6/04 by  blackcourser]
Song1118
驱动牛犊
驱动牛犊
  • 注册日期2003-03-05
  • 最后登录2005-03-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-12-06 09:32
我调用的应该是ANSI版的,这样有问题吗?
tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-12-04 18:12
1,正常情况是不需要使用SetupDiBuildDriverInfoList的,
2,你调用的是SetupDiEnumDriverInfo的ANSI版还是UNICODE版?
省元坊
Song1118
驱动牛犊
驱动牛犊
  • 注册日期2003-03-05
  • 最后登录2005-03-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-12-03 21:18
对不起我忘说了,SetupDiBuildDriverInfoList我也加上了,还是枚举不到任何东西。是不是还有别的错误呢?恳请指教。谢谢


DWORD
__stdcall CoModifyRank (
               IN     DI_FUNCTION               InstallFunction,
               IN     HDEVINFO                  DeviceInfoSet,
               IN     PSP_DEVINFO_DATA          DeviceInfoData,
               IN OUT PCOINSTALLER_CONTEXT_DATA Context
               )
{
    DWORD Status = NO_ERROR;

    switch (InstallFunction)
    {
        case DIF_SELECTBESTCOMPATDRV:
{
FILE* p = fopen("c:\\inst.log", "a+");
if(!SetupDiBuildDriverInfoList(
DeviceInfoSet,
NULL,
SPDIT_CLASSDRIVER  
))
{
fprintf(p, "Build Driver info list failed\n");
break;

}

DWORD dwMemIndex = 0;
do
{
SP_DRVINFO_DATA  DriverInfoData;
memset(&DriverInfoData, 0, sizeof(DriverInfoData));
DriverInfoData.cbSize = sizeof(DriverInfoData);
if(!SetupDiEnumDriverInfo(DeviceInfoSet, NULL,
SPDIT_CLASSDRIVER        , dwMemIndex, &DriverInfoData))
{
DWORD err = GetLastError();
if(err == ERROR_NO_MORE_ITEMS)
{
fprintf(p, "no more items\n");
}
else
{
fprintf(p, "break at err:%u\n", err);
}
break;
}
SP_DRVINSTALL_PARAMS  DriverInstallParams;
if(SetupDiGetDriverInstallParams(DeviceInfoSet, DeviceInfoData,
&DriverInfoData, &DriverInstallParams))
{
DriverInstallParams.Rank = 0;
if(SetupDiSetDriverInstallParams(DeviceInfoSet, DeviceInfoData,
&DriverInfoData, &DriverInstallParams))
{
fprintf(p, "made at %u\n", dwMemIndex);
}
else
{
fprintf(p, "failed at %u\n", dwMemIndex);
}
}
dwMemIndex ++;
}while(1);

SetupDiDestroyDriverInfoList(
DeviceInfoSet,
NULL,
SPDIT_CLASSDRIVER  );
fclose(p);
}
        break;

    default:
        break;
    }

    return Status;

}
tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-12-03 18:56
那是肯定的了,你自己好好找找吧。
省元坊
Song1118
驱动牛犊
驱动牛犊
  • 注册日期2003-03-05
  • 最后登录2005-03-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-12-03 15:49
Hi, TigerL
我跟踪了一下CoInstaller发现SetupDiEnumDriverInfo 枚举不到任何东西,直接返回了false,GetLastError()是ERROR_NO_MORE_ITEMS。是不是还有问题?
参数SPDIT_CLASSDRIVER 和SPDIT_COMPATDRIVER 都试了。
tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-12-03 12:13
谢谢tigerL及其他热心的朋友。我的问题已经解决了。我依照MSDN中INF文件的相关说明重新编写了INF文件,安装即可成功。
 



blackcourser一定是有更好的办法了!
省元坊
tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-12-03 11:59
另外很弱的问一句:我要怎样才能跟踪到那个dll呢?


可能是coinstaller没起作用,用softice可跟踪。
省元坊
Song1118
驱动牛犊
驱动牛犊
  • 注册日期2003-03-05
  • 最后登录2005-03-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-12-03 10:17
你能帮我看看我的问题出在那里了吗?谢谢!
blackcourser
驱动牛犊
驱动牛犊
  • 注册日期2004-11-23
  • 最后登录2005-04-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-12-02 23:04
谢谢tigerL及其他热心的朋友。我的问题已经解决了。我依照MSDN中INF文件的相关说明重新编写了INF文件,安装即可成功。

[编辑 -  12/2/04 by  blackcourser]
Song1118
驱动牛犊
驱动牛犊
  • 注册日期2003-03-05
  • 最后登录2005-03-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-12-02 19:20
另外很弱的问一句:我要怎样才能跟踪到那个dll呢?
Song1118
驱动牛犊
驱动牛犊
  • 注册日期2003-03-05
  • 最后登录2005-03-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-12-02 19:17
inf如下,谢谢

[Version]
Signature="$CHICAGO$"
provider=%Dibcom%
LayoutFile=layout.inf
Class=NewDeviceClass
ClassGUID={CFFDB8EB-09DD-481e-899B-A7A4481B584E}

;[SourceDisksNames]
;1=%DiskName1%,,0


;[SourceDisksFiles]
;dibload2.sys = 1

;--------- ClassInstall/ClassInstall32 Section -------------------------------

; Not necessary if using a standard class

; 9X Style
[ClassInstall]
Addreg=Class_AddReg

; NT Style
[ClassInstall32]
Addreg=Class_AddReg

[Class_AddReg]
HKR,,,,%DeviceClassName%
HKR,,Icon,,"-18"

[Manufacturer]
%Dibcom%=Dibcom


[Dibcom]
%DIBLOAD.DeviceDesc%=LOADER.Device, USB\VID_04B4&PID_8613 ; FX2 hardware, virgin EEPROM

%DIBLOAD.DeviceDesc%=LOADER.Device, USB\VID_10B8&PID_0BBA ; MOD3000B4
%DIBLOAD.DeviceDesc%=LOADER.Device, USB\VID_10B8&PID_0BC6 ; MOD3000P1

%DIBLOAD.DeviceDesc%=LOADER.Device, USB\VID_10B8&PID_0FA2 ; EVA3000MC1-D2

[PreCopySection]
HKR,,NoSetupUI,,1


[DestinationDirs]
LOADER.Files.Ext   = 10, System32\drivers


[LOADER.Files.Ext]
dibload2.sys


[ControlFlags]
ExcludeFromSelect=*


[LOADER.Device]
AddReg=LOADER.AddReg
CopyFiles=LOADER.Files.Ext


[LOADER.Device.NT]
AddReg=LOADER.AddReg
CopyFiles=LOADER.Files.Ext


[LOADER.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,dibload2.sys


[LOADER.Device.NT.Services]
AddService = DIBLOAD2,0x00000002,DIBLOAD.ServiceInstall


[DIBLOAD.ServiceInstall]
DisplayName = %DIBLOAD.DeviceDesc%
ServiceType   = %SERVICE_KERNEL_DRIVER%
StartType     = %SERVICE_DEMAND_START%
ErrorControl   = %SERVICE_ERROR_NORMAL%
ServiceBinary = %12%\dibload2.sys


[Strings]
SERVICE_KERNEL_DRIVER =1
SERVICE_DEMAND_START =3
SERVICE_ERROR_NORMAL =1

Dibcom="Dibcom SA"
DIBLOAD.DeviceDesc="Dibcom USB2.0 adapter firmware loader"
DiskName1="DiBcom USB Adapter Installation Disk"
DeviceClassName="DVB Connection"
tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-12-02 19:05
1,确认HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\CoDeviceInstallers是否有你的新setup类的项;
2,跟踪你的coinstaller,看是否调用了;
3,如若还不行,请贴出inf。
省元坊
上一页
游客

返回顶部