为什么SetupCopyOEMInf 安装驱动后不能用,需要插拔一次才可以?

时间:2022-12-20 04:45:27
我用SetupCopyOEMInf 安装了驱动程序。

SetupCopyOEMInf(
  "c:\\xx\\wdtoken.inf",
  "c:\\xx",
  SPOST_PATH,
  0,
  NULL,
  0,
  NULL,
  NULL
);

安装成功,但是第一次插入设备的时候能够正确识别设备类型,但是不能用,错误代码10,提示windows未能正确安装驱动程序,设备可能无法使用。拔下来在插上就能用了。或者是把设备停用后再启用状态也就正常了。

请问这是怎么回事,应该怎么解决?

inf如下:

;
; wdtoken.inf
;
; WatchData WatchKey Driver Installation File.
;
; (C) Copyright 2004-2006 WatchData System Co., Ltd.
;
;
[Version]
Signature  ="$WINDOWS NT$"
Provider   =%WatchData%
ClassGUID={36fc9e60-c465-11cf-8056-444553540000}
Class=USB

CatalogFile=wdtoken.cat
DriverVer=07/08/2005,1.02.01.00

;
; Source Media 
;  
[SourceDisksNames]
1=%DiskName%,,,

[SourceDisksFiles]
wdtoken.sys=1,,
wdkeyenum.sys=1,,
wdkeyifd.sys =1,,

[DestinationDirs]
DefaultDestDir   = 12
wdKeyEnum_Files  = 12
wdKeyIFD_Files   = 12
wdToken_Files    = 12

[wdToken_Files]
wdtoken.sys,,,0x00000062

[wdKeyEnum_Files]
wdkeyenum.sys,,,0x00000062

[wdKeyIFD_Files]
wdkeyifd.sys,,,0x00000062

;
; Manufacture
;
[Manufacturer]
%WatchData%=WatchData


;
; Models
;
[WatchData]
%PID_ENUM%        =wdKeyEnum_Install,WDKey\WDKeyEnum
%PID_IFD%         =wdKeyIFD_Install, WdKeyEnum\WdKeyIFD
%PID_PRO%         =wdToken_Install,USB\VID_6513&PID_0089
%PID_READER_ST%   =wdToken_Install,USB\VID_6513&PID_0189


%PID_PRO_0101%  =wdToken_Install,USB\VID_163C&PID_0101
%PID_PRO_0201%  =wdToken_Install,USB\VID_163C&PID_0201
%PID_PRO_0301%  =wdToken_Install,USB\VID_163C&PID_0301
%PID_PRO_0401%  =wdToken_Install,USB\VID_163C&PID_0401

%PID_PRO_0800%  =wdToken_Install,USB\VID_163C&PID_0800
%PID_PRO_0801%  =wdToken_Install,USB\VID_163C&PID_0801


;
; Exclude selected models from display
;
[ControlFlags]
ExcludeFromSelect = *

;
; WatchKey (Pro) Driver Installation
;
[wdToken_Install.NTx86]
CopyFiles=wdToken_Files,wdKeyEnum_Files,wdKeyIFD_Files
DriverVer=07/08/2005,1.01.01.00

[wdToken_Install.NTx86.Services]
AddService=wdToken,0x00000002,wdToken_AddService

[wdToken_AddService]
DisplayName    = %TOKEN_DISPNAME%
Description    = %TOKEN_SVCDESC%
ServiceType    = 1 ; SERVICE_KERNEL_DRIVER
StartType      = 3 ; SERVICE_DEMAND_START
ErrorControl   = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary  = %12%\wdtoken.sys
LoadOrderGroup = Extended Base



;
; WatchKey Enumerator Driver Installation
;
[wdKeyEnum_Install.NTx86]
CopyFiles=wdKeyEnum_Files,wdKeyIFD_Files,wdToken_Files
AddReg   =wdKeyEnum_AddReg
DriverVer=07/08/2005,1.01.01.00

[wdKeyEnum_Install.NTx86.Services]
AddService=wdKeyEnum,0x00000002,wdKeyEnum_AddService

[wdKeyEnum_AddService]
DisplayName    = %ENUM_DISPNAME%
Description    = %ENUM_SVCDESC%
ServiceType    = 1 ; SERVICE_KERNEL_DRIVER
StartType      = 3 ; SERVICE_DEMAND_START
ErrorControl   = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary  = %12%\wdkeyenum.sys
LoadOrderGroup = Extended Base

[wdKeyEnum_AddReg]
; The number of virtual pc/sc smarcard reader
HKLM,SYSTEM\CurrentControlSet\Services\wdKeyEnum,NumberOfDevices, 0x10003,0


;
; WatchKey Virtual Reader Driver Installation
;
[wdKeyIFD_Install.NTx86]
CopyFiles=wdKeyEnum_Files,wdKeyIFD_Files,wdToken_Files
AddReg   =wdKeyIFD_AddReg
DriverVer=07/08/2005,1.01.01.00

[wdKeyIFD_Install.NTx86.Services]
AddService=wdKeyIFD, 0x00000002,wdKeyIFD_AddService,wdKeyIFD_EventLog

[wdKeyIFD_AddService]
DisplayName    = %IFD_DISPNAME%
Description    = %IFD_SVCDESC%
ServiceType    = 1 ; SERVICE_KERNEL_DRIVER
StartType      = 3 ; SERVICE_DEMAND_START
ErrorControl   = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary  = %12%\wdkeyifd.sys
LoadOrderGroup = Extended Base

[wdKeyIFD_EventLog]
AddReg = wdKeyIFD_EventLog_AddReg

[wdKeyIFD_EventLog_AddReg]
HKR,,EventMessageFile,0x00020000,%12%\wdkeyifd.sys
HKR,,TypesSupported,0x00010001,7

[wdKeyIFD_AddReg]
HKLM,SYSTEM\CurrentControlSet\Services\wdKeyIFD,EnablePCSC, 0x10003,0


; Default 
[Strings]
WatchData        = "WatchData System Co., Ltd."
DiskName         = "WatchData USB Key Installation Disk"
PID_ENUM   = "WatchData USB Key Enumerator"
PID_IFD          = "WatchData USB Key Virtual Reader"
PID_PRO          = "WatchData USB Key Pro(ST)"
PID_READER_ST    = "WatchData USB Smartcard Reader(ST)"

PID_PRO_0101     = "WatchData USB Key Pro(HT)"
PID_PRO_0201     = "WatchData USB Key Pro(ST)"
PID_PRO_0301     = "WatchData USB Key"
PID_PRO_0401     = "WatchData USB Key Pro(ZTE)"


PID_PRO_0800     = "WatchData USB Key"
PID_PRO_0801     = "WatchData CRW-VIII Smartcard Reader"


TOKEN_DISPNAME   = "WatchData USB Key"
TOKEN_SVCDESC    = "WatchData USB Key Service"
ENUM_DISPNAME   = "WatchData USB Key Enumerator"
ENUM_SVCDESC   = "WatchData USB Key Enumerator Service"
IFD_DISPNAME  = "WatchData USB Key Virtual Reader"
IFD_SVCDESC  = "WatchData USB Key Virtual Reader Service"



9 个解决方案

#1


安装完了以后,查看驱动是否RUNNING起来没,没有再SC Start启动

#2


帮你顶,同样遇到这个问题。非常期待答案。

#3


引用 1 楼 oyljerry 的回复:
安装完了以后,查看驱动是否RUNNING起来没,没有再SC Start启动


win2000上没有sc.exe,是不是只能用BOOL WINAPI StartService(
  __in      SC_HANDLE hService,
  __in      DWORD dwNumServiceArgs,
  __in_opt  LPCTSTR* lpServiceArgVectors
);
启动服务?

可以在inf文件中增加指令启动服务吗?

#4


是不是驱动的问题

#5


引用 3 楼 leechiyang 的回复:
引用 1 楼 oyljerry 的回复:
安装完了以后,查看驱动是否RUNNING起来没,没有再SC Start启动


win2000上没有sc.exe,是不是只能用BOOL WINAPI StartService(
  __in      SC_HANDLE hService,
  __in      DWORD dwNumServiceArgs,
  __in_opt  LP……

用API可以启动,同时QueryService查询

#6


好难的问题, 学习了.

#7


请问:oyljerry

我在干净的虚拟机中测试制作的安装程序,该虚拟机以前没有插入过我使用的USB 设备,
我执行完安装程序后,插入USB 设备前,
执行sc query type= driver state= all,显示的列表中没有我安装的服务(wdToken),
执行sc query wdToken,提示
 

C:\Documents and Settings\hebca>sc query wdToken

[SC] EnumQueryServicesStatus:OpenService FAILED 1060


在注册表中搜索wdToken,也搜索不到任何信息。
system32\drivers文件夹里面没有
wdtoken.sys, wdkeyenum.sys, wdkeyifd.sys驱动程序文件(要安装的驱动文件)

第一次插入USB设备后,
执行sc query wdToken提示:
 
C:\Documents and Settings\hebca>sc query wdToken

SERVICE_NAME: wdToken
        TYPE               : 1  KERNEL_DRIVER
        STATE              : 1  STOPPED
                                (NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 1077       (0x435)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

C:\Documents and Settings\hebca>net helpmsg 1077

上次启动之后,仍未尝试引导服务。


system32\drivers文件夹里面出现了wdtoken.sys, wdkeyenum.sys, wdkeyifd.sys文件
设备管理器查看该USB 设备,上面有个黄色的叹号,提示该设备无法启动。 (代码 10)

执行sc start wdToken
 
C:\Documents and Settings\hebca>sc start wdToken

SERVICE_NAME: wdToken
        TYPE               : 1  KERNEL_DRIVER
        STATE              : 4  RUNNING
                                (STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0
        PID                : 0
        FLAGS              :

设备上面仍然有个黄色叹号

把USB设备拔下来,再插上,一切正常。

请问,这是怎么回事?应该怎么处理?
inf文件和sys文件都是我从另外一个安装包里面提取出来的,原来的安装包没有问题,安装完成后就能用。

#8


我运行原版的驱动程序安装包,安装完后,wdKeyEnum、wdKeyIFD的状态正常,wdToken不正常。

C:\Documents and Settings\hebca>sc query wdKeyEnum

SERVICE_NAME: wdKeyEnum
        TYPE               : 1  KERNEL_DRIVER
        STATE              : 4  RUNNING
                                (STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

C:\Documents and Settings\hebca>sc query wdKeyIFD

SERVICE_NAME: wdKeyIFD
        TYPE               : 1  KERNEL_DRIVER
        STATE              : 4  RUNNING
                                (STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

C:\Documents and Settings\hebca>sc query wdToken
[SC] EnumQueryServicesStatus:OpenService FAILED 1060:



我如何才能把wdKeyEnum、wdKeyIFD运行起来?

#9


再顶起来
如何安装完驱动后再安装2个虚拟设备呢(下面的设备)?
%PID_ENUM%        =wdKeyEnum_Install,WDKey\WDKeyEnum
%PID_IFD%         =wdKeyIFD_Install, WdKeyEnum\WdKeyIFD

#1


安装完了以后,查看驱动是否RUNNING起来没,没有再SC Start启动

#2


帮你顶,同样遇到这个问题。非常期待答案。

#3


引用 1 楼 oyljerry 的回复:
安装完了以后,查看驱动是否RUNNING起来没,没有再SC Start启动


win2000上没有sc.exe,是不是只能用BOOL WINAPI StartService(
  __in      SC_HANDLE hService,
  __in      DWORD dwNumServiceArgs,
  __in_opt  LPCTSTR* lpServiceArgVectors
);
启动服务?

可以在inf文件中增加指令启动服务吗?

#4


是不是驱动的问题

#5


引用 3 楼 leechiyang 的回复:
引用 1 楼 oyljerry 的回复:
安装完了以后,查看驱动是否RUNNING起来没,没有再SC Start启动


win2000上没有sc.exe,是不是只能用BOOL WINAPI StartService(
  __in      SC_HANDLE hService,
  __in      DWORD dwNumServiceArgs,
  __in_opt  LP……

用API可以启动,同时QueryService查询

#6


好难的问题, 学习了.

#7


请问:oyljerry

我在干净的虚拟机中测试制作的安装程序,该虚拟机以前没有插入过我使用的USB 设备,
我执行完安装程序后,插入USB 设备前,
执行sc query type= driver state= all,显示的列表中没有我安装的服务(wdToken),
执行sc query wdToken,提示
 

C:\Documents and Settings\hebca>sc query wdToken

[SC] EnumQueryServicesStatus:OpenService FAILED 1060


在注册表中搜索wdToken,也搜索不到任何信息。
system32\drivers文件夹里面没有
wdtoken.sys, wdkeyenum.sys, wdkeyifd.sys驱动程序文件(要安装的驱动文件)

第一次插入USB设备后,
执行sc query wdToken提示:
 
C:\Documents and Settings\hebca>sc query wdToken

SERVICE_NAME: wdToken
        TYPE               : 1  KERNEL_DRIVER
        STATE              : 1  STOPPED
                                (NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 1077       (0x435)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

C:\Documents and Settings\hebca>net helpmsg 1077

上次启动之后,仍未尝试引导服务。


system32\drivers文件夹里面出现了wdtoken.sys, wdkeyenum.sys, wdkeyifd.sys文件
设备管理器查看该USB 设备,上面有个黄色的叹号,提示该设备无法启动。 (代码 10)

执行sc start wdToken
 
C:\Documents and Settings\hebca>sc start wdToken

SERVICE_NAME: wdToken
        TYPE               : 1  KERNEL_DRIVER
        STATE              : 4  RUNNING
                                (STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0
        PID                : 0
        FLAGS              :

设备上面仍然有个黄色叹号

把USB设备拔下来,再插上,一切正常。

请问,这是怎么回事?应该怎么处理?
inf文件和sys文件都是我从另外一个安装包里面提取出来的,原来的安装包没有问题,安装完成后就能用。

#8


我运行原版的驱动程序安装包,安装完后,wdKeyEnum、wdKeyIFD的状态正常,wdToken不正常。

C:\Documents and Settings\hebca>sc query wdKeyEnum

SERVICE_NAME: wdKeyEnum
        TYPE               : 1  KERNEL_DRIVER
        STATE              : 4  RUNNING
                                (STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

C:\Documents and Settings\hebca>sc query wdKeyIFD

SERVICE_NAME: wdKeyIFD
        TYPE               : 1  KERNEL_DRIVER
        STATE              : 4  RUNNING
                                (STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

C:\Documents and Settings\hebca>sc query wdToken
[SC] EnumQueryServicesStatus:OpenService FAILED 1060:



我如何才能把wdKeyEnum、wdKeyIFD运行起来?

#9


再顶起来
如何安装完驱动后再安装2个虚拟设备呢(下面的设备)?
%PID_ENUM%        =wdKeyEnum_Install,WDKey\WDKeyEnum
%PID_IFD%         =wdKeyIFD_Install, WdKeyEnum\WdKeyIFD