Skip to content
⌘ NSIS Forum Archive

InstDrv::InitDriverSetup not working with HwId = "USB\VID_1567&PID_4444".

21 posts

rajansis#

InstDrv::InitDriverSetup not working with HwId = "USB\VID_1567&PID_4444".

Hi All,

We are trying to install our driver using Nsis. The problem is,

1) Hardware ID is not taking as "USB\VID_1567&PID_4444" in InstDrv::InitDriverSetup.

2) If I use HwId as "USB/VID_1567&PID_4444". Its working fine. But this is not actual Hardware id.

Only the Slash is different. So please give any solution to use Hardware id as "USB\VID_1567&PID_4444".


Thanks in Advance!!
rajansis#
Hi Jason,

Actually,That ID will come with hardware chip. If I insert the module ,it is detecting as "USB\VID_1567&PID_4444" in Device Manager->Adapter->Properties->Details->Hardware Ids.

So we can't change that ID. If I change ID in INF file and Script file ,while inserting the module, Driver is not installing for module.

Is there any solution to accept ID("USB\VID_1567&PID_4444") ?..

Thanks,
Raja.
JasonFriday13#
For starters, paste up your code for the plugin call. Without that, we have nowhere to start.
rajansis#
Hi Jason,

Please explain me clearly. We are using Open Soure InstDrv plugin code only.

We are using the following code,

section "install a driver" instdriver
instdrv::initdriversetup /nounload "{4d36e978-e325-11ce-bfc1-08002be10318}" "USB\VID_1567&PID_4444"
pop $0
detailprint "initdriversetup: $0"

InstDrv:😁eleteOemInfFiles /NOUNLOAD
Pop $0
DetailPrint "DeleteOemInfFiles: $0"
StrCmp $0 "00000000" PrintInfNames ContInst1

PrintInfNames:
Pop $0
DetailPrint "Deleted $0"
Pop $0
DetailPrint "Deleted $0"

ContInst1:
InstDrv::CreateDevice /NOUNLOAD
Pop $0
DetailPrint "CreateDevice: $0"


InstDrv::InstallDriver /NOUNLOAD "c:\OneBox\rpsusb.inf"
Pop $0
DetailPrint "InstallDriver: $0"
StrCmp $0 "00000000" PrintReboot ContInst2

PrintReboot:
Pop $0
DetailPrint "Reboot: $0"

ContInst2:
InstDrv::CountDevices
Pop $0
DetailPrint "CountDevices: $0"
SectionEnd

Thanks!!
JasonFriday13#
That looks very close to the example script, from the way it's been written.

The only thing I see that's wrong is that you are passing an absolute path to InstDrv::InstallDriver. You should be extracting the driver to a proper script controlled path, and call InstallDriver with that path.
rajansis#
Hi Jason,
I tried same example script that given in NSIS link with "USB\IrCOMM2k" Hardware ID.Just see the following text:

#
# InstDrv Example, (c) 2003 Jan Kiszka (Jan Kiszka@web.de)
#

Name "InstDrv.dll test"

OutFile "InstDrv-Test.exe"

ShowInstDetails show

ComponentText "InstDrv Plugin Usage Example"

Page components
Page instfiles

Section "Install a Driver" InstDriver
InstDrv::InitDriverSetup /NOUNLOAD "{4d36e978-e325-11ce-bfc1-08002be10318}" "USB\IrCOMM2k"
Pop $0
DetailPrint "InitDriverSetup: $0"

InstDrv:😁eleteOemInfFiles /NOUNLOAD
Pop $0
DetailPrint "DeleteOemInfFiles: $0"
StrCmp $0 "00000000" PrintInfNames ContInst1

PrintInfNames:
Pop $0
DetailPrint "Deleted $0"
Pop $0
DetailPrint "Deleted $0"

ContInst1:
InstDrv::CreateDevice /NOUNLOAD
Pop $0
DetailPrint "CreateDevice: $0"

SetOutPath $TEMP
File "ircomm2k.inf"
File "ircomm2k.sys"

InstDrv::InstallDriver /NOUNLOAD "$TEMP\ircomm2k.inf"
Pop $0
DetailPrint "InstallDriver: $0"
StrCmp $0 "00000000" PrintReboot ContInst2

PrintReboot:
Pop $0
DetailPrint "Reboot: $0"

ContInst2:
InstDrv::CountDevices
Pop $0
DetailPrint "CountDevices: $0"
SectionEnd

Section "Uninstall the driver again" UninstDriver
InstDrv::InitDriverSetup /NOUNLOAD "{4d36e978-e325-11ce-bfc1-08002be10318}" "IrCOMM2k"
Pop $0
DetailPrint "InitDriverSetup: $0"

InstDrv:😁eleteOemInfFiles /NOUNLOAD
Pop $0
DetailPrint "DeleteOemInfFiles: $0"
StrCmp $0 "00000000" PrintInfNames ContUninst1

PrintInfNames:
Pop $0
DetailPrint "Deleted $0"
Pop $0
DetailPrint "Deleted $0"

ContUninst1:
InstDrv::RemoveAllDevices
Pop $0
DetailPrint "RemoveAllDevices: $0"
StrCmp $0 "00000000" PrintReboot ContUninst2

PrintReboot:
Pop $0
DetailPrint "Reboot: $0"

ContUninst2:
Delete "$SYSDIR\system32\ircomm2k.sys"
SectionEnd

And also i have changed hardware ID in INF file also.But this is not taken.I'm getting an error CreateDevice::E0000205.
JasonFriday13#
I found that same error code reported by other people, so you aren't the first. http://forums.winamp.com/showthread.php?t=147002.
JasonFriday13#edited
Well, you could call UpdateDriverForPlugAndPlayDevices() directly with the system plugin and get rid of Instdrv.

[edit] Even better, write separate 32bit and 64bit mini-programs to install the driver, and then detect which version you need to run and run it with ExecWait.
rajansis#
Thanks Jason,

Will you please send me that DLL plugin which accepts "USB\VID_1567&PID_4444" HardwareID ,If you already have that one?


Thanks,
Raja.
rajansis#
Hi Jason,
I think you are telling about "INSTDRV" plugin.I have that one.But if i execute my .exe file it showing "CreateDevice::E0000205" error.I think it is not taking our ID(USB\VID_1618&PID_4444).
JasonFriday13#
Yeah, but is the OS 64bit? 64bit OS's take 64bit drivers. 32bit OS's take 32bit drivers. You can't mix and match.
rajansis#
Hi Jason,

No i'm using 32 bit only.And driver also 32 bit.If i remove that "\" ,its working fine.But i need that slash for Registry path.
JasonFriday13#
I can't help any further with Instdrv. Maybe try exploring other methods until you find one that works (I outlined two of them earlier).
rajansis#
Hi Jason,
I am trying to add my own code for DLL.And if i execute the code which is given in the webside,i am getting the below error code:
'/ZI' and '/Gy-' command-line options are incompatible .

How to solve that issue?.


Thanks!!