Windows 7 Driver Repack 7z SFX install silent

From richud.com
Jump to: navigation, search

In this example will repack the Zebra printer drivers, for Win7 x64, in Ubuntu 12.04, using 7zip SFX and an auto installer.

Extract the files

Starting with DZ8CG.03.00.00.00.exe

The easiest way to get the drivers out is simply installing it in a windows VM, the drivers get put in C:\Program Files (x86)\Zebra ZMotif along with some other guff like 'ZXPToolBox' and the 'i386' folder (am interested only in x64).


By looking at the .inf files [SourceDisksFiles] section you can see what files are needed and what are not. In this example the main Zebra drivers are in the root of above, see ZMotif.inf and the contactless smart card bits in a sub folder \smart\, s331di2k.inf and s331dicl.inf. I removed the network port monitor ZMotifPortMon.inf as it has no .cat file and also appears to be 32bit only.

  • If you remove/replace/resize/change a file that the .inf references, you will break the driver signing, so be careful. Don't think it would be good to shrink the .bmp's for example or replace with 1 pixel files!
  • It is ok to remove the i386 folder without breaking the signing as I am only pre installing the x64 drivers.
  • It may be easier to preinstall the drivers with all the guff present, then take the used bits from C:\Windows\System32\DriverStore\FileRepository\xxxx

This is what you should end up with, with the guff removed, and the 32x bit drivers also. I moved everything left into a new folder called 'drivers'.

drivers/
├── bc_128_C.bmp
├── Front_Hologram_Inhibit.bmp
├── Front_Hologram_Inhibit_Portrait.bmp
├── Mag_Signature_Inhibit.bmp
├── Mag_Signature_Inhibit_Portrait.bmp
├── magstripe.bmp
├── magstripe_portrait.bmp
├── smart
│   ├── CMTCT32.SYS
│   ├── CMTCT64.SYS
│   ├── DICLx64.sys
│   ├── DISCx64.sys
│   ├── ePass2K.SYS
│   ├── EPCLx64.SYS
│   ├── EPSCx64.SYS
│   ├── S331DI2K.CAT
│   ├── S331DI2K.INF
│   ├── S331DI2K.sys
│   ├── S331DICL.CAT
│   ├── S331DICL.INF
│   ├── S331DICL.sys
│   ├── SDI0102K.sys
│   ├── SDICLx64.SYS
│   └── SDISCx64.SYS
├── smartcard_4428.bmp
├── smartcard_4428_portrait.bmp
├── smartcard_4442.bmp
├── smartcard_4442_portrait.bmp
├── x64
│   ├── AreaManager.dll
│   ├── dbghelp.dll
│   ├── ZMotifDDM.dll
│   ├── ZMotifDrv.dll
│   ├── ZMotifLM.dll
│   ├── ZMotifPM.dll
│   ├── ZMotifPMUI.dll
│   ├── ZMotifRes.dll
│   ├── ZMotifUI.dll
│   ├── ZMotifZMJ.dll
│   ├── ZSATAuthenEncDec.dll
│   ├── ZXPNotify.dll
│   └── ZXPNotify.exe
├── ZMotif.cat
├── ZMotifDDM.xml
├── ZMotif.inf
├── ZXP Landscape Back.bmp
├── ZXP Portrait test card Back.bmp
├── zxp_series8.chm
├── ZXP Series 8 Test Card Landscape Front.bmp
└── ZXP Series 8 Test Card Portrait Front.bmp

Get the SFX installer stubs

Ubuntu

We need Ubuntu p7zip package AND the Windows installer SFX stubs.

sudo apt-get install p7zip-full
wget -P /tmp/ http://downloads.sourceforge.net/sevenzip/7z920_extra.7z

Extract the 4 x 7zS* files from 7z920_extra.7z to /usr/lib/p7zip (needs sudo for write). You can rename them if you wish to whatever in this folder.

7z x /tmp/7z920_extra.7z 7zS*
sudo cp /tmp/7zS* /usr/lib/p7zip

Ending up with this,

  • Note the 7zCon.sfx will be ELF unix binaries and the copied in ones like 7zS2con.sfx will be win x32 binaries
drwxr-xr-x   2 root root    4096 Jul 31 16:10 .
drwxr-xr-x 201 root root   36864 Jul 31 15:00 ..
-rwxr-xr-x   1 root root  446664 Feb 17 20:08 7z
-rwxr-xr-x   1 root root 1188120 Feb 17 20:08 7za
-rwxr-xr-x   1 root root  396976 Feb 17 20:08 7zCon.sfx
-rwxr-xr-x   1 root root  788760 Feb 17 20:08 7zr
-rw-r--r--   1 root root   27648 Jul 31 16:10 7zS2con.sfx
-rw-r--r--   1 root root   27648 Jul 31 16:10 7zS2.sfx
-rw-r--r--   1 root root  105472 Jul 31 16:10 7zSD.sfx
-rw-r--r--   1 root root 1743568 Feb 17 20:08 7z.so
-rw-r--r--   1 root root  140288 Jul 31 16:10 7zS.sfx

Win7

Alternatively if in Win7 http://www.7-zip.org/download.html

Get the main 7zip http://downloads.sourceforge.net/sevenzip/7z920.exe

Get the addons http://downloads.sourceforge.net/sevenzip/7z920_extra.7z and extract to the folder 7zip went into (C:\Program Files (x86)\7-Zip)

DPInst Files

Create the "Installer" file dpinst.txt

This just needs to be in the archive somewhere, 7-zip DOCS are here

RunProgram runs from wherever the archive extracted to (%tmp%\dpinst64.exe in this example). As the dpinst.xml is there too no further switches are needed.

;!@Install@!UTF-8!
RunProgram="dpinst64.exe"
;!@InstallEnd@!

dpinst.xml

See for more info

<?xml version="1.0"?>
<dpInst>
	<enableNotListedLanguages/>
	<suppressWizard/> 
	<quietInstall/> 
	<suppressEulaPage/>
	<legacyMode/>
	<search>
		<subDirectory>*</subDirectory>
	</search>
</dpInst>

dpinst64.exe

This is just the renamed 64bit version of dpinst.exe

Create the .exe

In this info from the readme, "installers" = for using an installer text file to do something after extracting from the SFX.

module function
7zS.sfx SFX module for installers
7zSD.sfx SFX module for installers (uses msvcrt.dll)
7zS2.sfx small SFX module (GUI version) (uses msvcrt.dll)
7zS2con.sfx small SFX module (Console version) (uses msvcrt.dll)

This will create drivers.exe in the current directory, packing everything in /drivers and dpinst.txt and dpinst64.exe and dpinst.xml. (The drivers folder will remain a sub directory and the dpinst* files will be in the root of the archive)

Prefix -sfx with the name of the file you want to add as the executable stub, in this case the small console based stub 7zS2con.sfx, (which should exists in /usr/lib/7zS2con.sfx in Ubuntu)

$ 7z a -sfx7zS2con.sfx drivers.exe dpinst* drivers/
7-Zip [64] 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=en_GB.UTF-8,Utf16=on,HugeFiles=on,4 CPUs)
Scanning

Creating archive drivers.exe

Compressing  drivers/zxp_series8.chm      
Compressing  drivers/bc_128_C.bmp      
Compressing  drivers/Front_Hologram_Inhibit.bmp      
Compressing  drivers/Front_Hologram_Inhibit_Portrait.bmp      
Compressing  drivers/magstripe.bmp      
Compressing  drivers/magstripe_portrait.bmp      
Compressing  drivers/Mag_Signature_Inhibit.bmp      
Compressing  drivers/Mag_Signature_Inhibit_Portrait.bmp      
Compressing  drivers/smartcard_4428.bmp      
Compressing  drivers/smartcard_4428_portrait.bmp      
Compressing  drivers/smartcard_4442.bmp      
Compressing  drivers/smartcard_4442_portrait.bmp      
Compressing  drivers/ZXP Landscape Back.bmp      
Compressing  drivers/ZXP Portrait test card Back.bmp      
Compressing  drivers/ZXP Series 8 Test Card Landscape Front.bmp      
Compressing  drivers/ZXP Series 8 Test Card Portrait Front.bmp      
Compressing  dpinst.xml      
Compressing  drivers/ZMotifDDM.xml      
Compressing  dpinst.txt      
Compressing  drivers/x64/ZXPNotify.exe      
Compressing  drivers/x64/AreaManager.dll      
Compressing  drivers/x64/dbghelp.dll      
Compressing  drivers/x64/ZMotifDDM.dll      
Compressing  drivers/x64/ZMotifDrv.dll      
Compressing  drivers/x64/ZMotifLM.dll      
Compressing  drivers/x64/ZMotifPM.dll      
Compressing  drivers/x64/ZMotifPMUI.dll      
Compressing  drivers/x64/ZMotifRes.dll      
Compressing  drivers/x64/ZMotifUI.dll      
Compressing  drivers/x64/ZMotifZMJ.dll      
Compressing  drivers/x64/ZSATAuthenEncDec.dll      
Compressing  drivers/x64/ZXPNotify.dll      
Compressing  drivers/smart/CMTCT32.SYS      
Compressing  drivers/smart/CMTCT64.SYS      
Compressing  drivers/smart/DICLx64.sys      
Compressing  drivers/smart/DISCx64.sys      
Compressing  drivers/smart/ePass2K.SYS      
Compressing  drivers/smart/EPCLx64.SYS      
Compressing  drivers/smart/EPSCx64.SYS      
Compressing  drivers/smart/S331DI2K.sys      
Compressing  drivers/smart/S331DICL.sys      
Compressing  drivers/smart/SDI0102K.sys      
Compressing  drivers/smart/SDICLx64.SYS      
Compressing  drivers/smart/SDISCx64.SYS      
Compressing  drivers/smart/S331DI2K.CAT      
Compressing  drivers/smart/S331DICL.CAT      
Compressing  drivers/ZMotif.cat      
Compressing  drivers/smart/S331DI2K.INF      
Compressing  drivers/smart/S331DICL.INF      
Compressing  drivers/ZMotif.inf      
Compressing  dpinst64.exe      

Everything is Ok

$ file drivers.exe
drivers.exe: PE32 executable (console) Intel 80386, for MS Windows


  • Note, this has created a Windows executable as the executable stub used was a windows one.

Testing

Running drivers.exe on a Win7 machine should automatically extract files to user temp folder, run dpinst64.exe that reads the dpinst.xml and preinstall all the drivers, (as you can see in DPINST.LOG)


  • Check c:\windows\DPINST.LOG
INFO:   ****************************************
INFO:   07/31/2012 15:47:14
INFO:   Product Version 2.1.0.0.
INFO:   Version: 6.0.6000 
INFO:   Platform ID: 2 (NT)
INFO:   Service Pack: 0.0
INFO:   Suite: 0x0100, Product Type: 1
INFO:   Architecture: AMD64.
INFO:   Interactive Windows Station
INFO:   Command Line: 'C:\Users\ADMINI~1\AppData\Local\Temp\7zD29857AC\dpinst64.exe '
INFO:   DPInst is not multi-lingual.
INFO:   ****************************************
INFO:   Current working directory: 'C:\Users\ADMINI~1\AppData\Local\Temp\7zD29857AC'
INFO:   Running on path 'C:\Users\ADMINI~1\AppData\Local\Temp\7zD29857AC'
INFO:   DPInst.xml does not list the current UI language.
INFO:   User UI Language is 0x409.
INFO:   Install option set: Suppressing Wizard but no OS popups.
INFO:   Install option set: Running in quiet mode. Suppressing Wizard and OS popups.
INFO:   Install option set: legacy mode on.
INFO:   Found driver package: 'C:\Users\ADMINI~1\AppData\Local\Temp\7zD29857AC\drivers\ZMotif.inf'.
INFO:   Found driver package: 'C:\Users\ADMINI~1\AppData\Local\Temp\7zD29857AC\drivers\smart\S331DI2K.INF'.
INFO:   Found driver package: 'C:\Users\ADMINI~1\AppData\Local\Temp\7zD29857AC\drivers\smart\S331DICL.INF'.
INFO:   Preinstalling 'c:\users\admini~1\appdata\local\temp\7zd29857ac\drivers\zmotif.inf' ...
INFO:   ENTER:  DriverPackagePreinstallW
SUCCESS:c:\users\admini~1\appdata\local\temp\7zd29857ac\drivers\zmotif.inf is preinstalled.
INFO:   RETURN: DriverPackagePreinstallW  (0x0)
INFO:   ENTER:  DriverPackageGetPathW
INFO:   RETURN: DriverPackageGetPathW  (0x0)
INFO:   Preinstalling 'c:\users\admini~1\appdata\local\temp\7zd29857ac\drivers\smart\s331di2k.inf' ...
INFO:   ENTER:  DriverPackagePreinstallW
SUCCESS:c:\users\admini~1\appdata\local\temp\7zd29857ac\drivers\smart\s331di2k.inf is preinstalled.
INFO:   RETURN: DriverPackagePreinstallW  (0x0)
INFO:   ENTER:  DriverPackageGetPathW
INFO:   RETURN: DriverPackageGetPathW  (0x0)
INFO:   Preinstalling 'c:\users\admini~1\appdata\local\temp\7zd29857ac\drivers\smart\s331dicl.inf' ...
INFO:   ENTER:  DriverPackagePreinstallW
SUCCESS:c:\users\admini~1\appdata\local\temp\7zd29857ac\drivers\smart\s331dicl.inf is preinstalled.
<snip>
  • Check C:\Windows\System32\DriverStore\FileRepository for preinstalled folders containing the drivers for each hardware item
C:\Windows\System32\DriverStore\FileRepository>dir /b /o:-d
s331dicl.inf_amd64_neutral_0e1529fec2a4db91
s331di2k.inf_amd64_neutral_27ad56e345c6e8b1
zmotif.inf_amd64_neutral_7db3383cb24401b0


Silent install

Can easily run the drivers.exe locally with no prompts to pre-install the drivers or run it with psexec on a remote machine;

psexec -c \\remotemachine drivers.exe

Comments

blog comments powered by Disqus