2 ' * Copyright (c) 2008 Intel Corporation. All rights reserved.
\r
4 ' * This software is available to you under the OpenIB.org BSD license
\r
7 ' * Redistribution and use in source and binary forms, with or
\r
8 ' * without modification, are permitted provided that the following
\r
9 ' * conditions are met:
\r
11 ' * - Redistributions of source code must retain the above
\r
12 ' * copyright notice, this list of conditions and the following
\r
15 ' * - Redistributions in binary form must reproduce the above
\r
16 ' * copyright notice, this list of conditions and the following
\r
17 ' * disclaimer in the documentation and/or other materials
\r
18 ' * provided with the distribution.
\r
20 ' * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
\r
21 ' * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
\r
22 ' * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
\r
23 ' * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
\r
24 ' * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
\r
25 ' * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
\r
26 ' * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
\r
30 ' WIX CustomActions used in the WinOF (Windows OpenFabrics) Release.
\r
31 ' File is based on the installer src contributed by Mellanox Technologies.
\r
37 Const WindowsXP ="501"
\r
38 Const WindowsLongHorn ="600"
\r
39 Const Windows7 ="700"
\r
42 Function Architecture()
\r
44 For Each item In GetObject("winmgmts:root/cimv2").ExecQuery("SELECT Architecture FROM Win32_Processor")
\r
45 Arch=item.Architecture
\r
51 Elseif (Arch=1) Then
\r
53 Elseif (Arch=2) Then
\r
55 Elseif (Arch=3) Then
\r
57 Elseif (Arch=6) Then
\r
59 Elseif (Arch=9) Then
\r
63 WScript.echo "Arch ID=" & Arch
\r
64 Arch="CustomAction.vbs: Unable to determine Architecture"
\r
72 ' A CustomAction (CA) that runs after SetupInitialize which sets up
\r
73 ' CustomAction Data for the defered action DriverInstall().
\r
74 ' A CA can only see Installer properties through pre-loaded 'CustomActionData'
\r
77 dim VersionNT,Installed,AddLocal,use_this_HCA
\r
79 VersionNT = Session.Property("VersionNT")
\r
80 Installed = Session.Property("Installed")
\r
81 AddLocal = Session.Property("ADDLOCAL")
\r
83 ' The WIX UI (UserInterface) sets up ADDLOCAL. When cmd-line msiexec.exe is
\r
84 ' run with a deprecited UI, then ADDLOCAL is not setup; default it's value
\r
86 If AddLocal = "" AND Installed = "" Then
\r
87 ' Enable default features.
\r
88 AddLocal = "IBcore,hca_mthca,fIPoIB,fWSD,fDAPL,fDatBASIC1,fDatBASIC2"
\r
91 ' Process msiexec cmd line arg HCA=cx or HCA=+cx
\r
92 ' Pre WLH OS only (Server 2003/XP)
\r
93 ' Replace default InfiniHost HCA driver with ConnectX HCA driver if
\r
94 ' requested 'HCA=cx' or add ConnectX '+cx'.
\r
96 If VersionNT < WindowsLongHorn Then
\r
97 use_this_HCA = Session.Property("HCA")
\r
98 If use_this_HCA <> "" Then
\r
99 ' down-case if required.
\r
100 If Instr(use_this_HCA,"CX") <> 0 Then
\r
101 use_this_HCA = Replace(use_this_HCA,"CX","cx")
\r
103 If Instr(use_this_HCA,"+cx") <> 0 Then
\r
104 ' Add ConnectX HCA drivers
\r
105 AddLocal = AddLocal & ",hca_connectX"
\r
107 If Instr(use_this_HCA,"cx") <> 0 Then
\r
108 If Instr(AddLocal,"hca_mthca") <> 0 Then
\r
109 AddLocal = Replace(AddLocal,"hca_mthca","hca_connectX")
\r
111 AddLocal = AddLocal & ",hca_connectX"
\r
118 If Session.Property("OSM") = "1" Then
\r
119 AddLocal = AddLocal & ",fOSMS"
\r
122 If Session.Property("SRP") = "1" Then
\r
123 AddLocal = AddLocal & ",fSRP"
\r
126 If Session.Property("VNIC") = "1" Then
\r
127 AddLocal = AddLocal & ",fVNIC"
\r
130 ' Driver Install Properties:
\r
131 ' 0-INSTALLDIR; 1-SystemFolder; 2-System64Folder; 3-WindowsFolder ;
\r
132 ' 4-VersionNT; 5-ADDLOCAL; 6-REMOVE; 7-NODRV; 8-DBG
\r
134 Session.Property("DriverInstall") = _
\r
135 Session.Property("INSTALLDIR") & ";" & _
\r
136 Session.Property("SystemFolder") & ";" & _
\r
137 Session.Property("System64Folder") & ";" & _
\r
138 Session.Property("WindowsFolder") & ";" & _
\r
139 VersionNT & ";" & _
\r
141 Session.Property("REMOVE") & ";" & _
\r
142 Session.Property("NODRV") & ";" & _
\r
143 Session.Property("DBG")
\r
148 'Waiting to delete a file until it's free
\r
150 Function FileDeleteUntilFree(filename)
\r
151 Set objFSO=CreateObject("Scripting.FileSystemObject")
\r
152 Set WshShell = CreateObject("WScript.Shell")
\r
155 Do While objFSO.FileExists(filename)
\r
156 On Error Resume Next
\r
157 objFSO.DeleteFile(filename)
\r
158 WScript.Sleep 100 ' milliseconds
\r
159 ' Do not wait to long to delete the file, bail and don't delete it if too
\r
161 too_much = too_much + 1
\r
162 if too_much > 50 then
\r
163 msgbox "delete Timeout(5) " & filename
\r
170 Function FileDelete(filename)
\r
172 Set fso = CreateObject("Scripting.FileSystemObject")
\r
174 If fso.FileExists(filename) Then
\r
175 On Error Resume Next
\r
176 fso.DeleteFile(filename),True
\r
177 If (Err And Err.Number <> 70) Then ' tolerate protection errors
\r
178 ErrMsg ("Could not delete: " & filename)
\r
183 Sub FileDeleteQ(fso,filename)
\r
185 If fso.FileExists(filename) Then
\r
186 ' On Error Resume Next
\r
187 fso.DeleteFile(filename),True
\r
188 If (Err And Err.Number <> 70) Then ' tolerate protection errors
\r
189 ErrMsg ("Could not delete: " & filename)
\r
195 ' Move and then Delete a file. File is moved into %TEMP%\basename(filename)
\r
196 ' then deleted; pesky files in 'system32\drivers'.
\r
198 Function FileMove(filename,destination)
\r
200 Set fso = CreateObject("Scripting.FileSystemObject")
\r
201 On Error Resume Next
\r
202 If fso.FileExists(filename) Then
\r
203 fso.MoveFile filename,destination
\r
204 If (Err And Err.Number <> 70) then ' tolerate protection errors.
\r
205 ErrMsg ("Could not move: " & filename & " to " & destination)
\r
208 If Err Then ShowError
\r
212 Sub DriverFileDelete(fso,WshShell,filename,VersionNT)
\r
214 If fso.FileExists(filename) Then
\r
215 ' allow continuation after 'permission denied' error
\r
216 On Error Resume Next
\r
217 ' unlock the driver file by deleting PnPLocked reg entry.
\r
218 If VersionNT >= WindowsLongHorn Then
\r
219 base = "reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\PnpLockdownFiles /v "
\r
220 Return = WshShell.Run (base & filename & " /f", 0, true)
\r
222 fso.DeleteFile(filename),True
\r
223 If (Err And Err.Number <> 70) Then ' tolerate protection errors
\r
224 ErrMsg ("Could not delete: " & filename)
\r
231 ' Remove the specified folder and all sub-folders & files.
\r
232 ' What rmdir does from the cmd line but will not do from vbs?
\r
234 Sub RemoveFolder(objStartFolder)
\r
236 Set objFSO = CreateObject("Scripting.FileSystemObject")
\r
238 If Not objFSO.FolderExists(objStartFolder) Then
\r
242 Set objFolder = objFSO.GetFolder(objStartFolder)
\r
243 'Wscript.Echo objFolder.Path
\r
244 Set colFiles = objFolder.Files
\r
246 ' del files in top-level folder
\r
247 For Each objFile in colFiles
\r
248 objFSO.DeleteFile(objFolder.Path & "\" & objFile.Name)
\r
250 ErrMsg("Del err on " & objFolder.Path & "\" & objFile.Name)
\r
254 ShowSubfolders objFSO.GetFolder(objStartFolder), objFSO
\r
256 On Error Resume Next
\r
257 objFSO.DeleteFolder(objStartFolder)
\r
259 ErrMsg("DelFolder err on " & objStartFolder)
\r
265 Sub ShowSubFolders(Folder,FSO)
\r
266 On Error Resume Next
\r
267 For Each Subfolder in Folder.SubFolders
\r
268 ' Wscript.Echo Subfolder.Path
\r
269 Set objFolder = FSO.GetFolder(Subfolder.Path)
\r
270 Set colFiles = objFolder.Files
\r
271 For Each objFile in colFiles
\r
272 ' Wscript.Echo Subfolder.Path & "\" & objFile.Name
\r
273 FSO.DeleteFile(Subfolder.Path & "\" & objFile.Name)
\r
275 ErrMsg("DelFile err on " & Subfolder.Path & "\" & objFile.Name)
\r
279 ShowSubFolders Subfolder, FSO
\r
280 FSO.DeleteFolder(Subfolder.Path)
\r
282 ErrMsg("DelFolder err on " & Subfolder.Path)
\r
290 ''''''''''' Remove Driver Files ''''''''''''
\r
292 ' Attempt to clean out driver installed files which fail to be uninstalled
\r
293 ' when the driver is uninstalled. Win2K3/x64 files persist, XP & Win2K3/x86
\r
294 ' the driver files are correctly remove?
\r
296 Sub RemoveDriverFiles(fso,WshShell,VersionNT)
\r
298 Dim Win, sDRIVERS, sSYS32, sSYSWOW64
\r
299 Dim CheckMode, PropArray, sTemp
\r
301 ' Function can be called from the Driver{Install/Uninstall} rtns.
\r
303 Win = fso.GetSpecialFolder(0) & "\"
\r
305 ' this is screw-ball: on 64-bit systems: SystemFolder == %windir%\SysWOW64
\r
306 ' on 32-bit systems: SystemFolder == %windir%\system32
\r
308 sSYS32 = Win & "system32\"
\r
309 sSYSWOW64 = Win & "SysWOW64\"
\r
310 sDRIVERS = sSYS32 & "drivers\"
\r
312 DriverFileDelete fso,WshShell,sDRIVERS & "ibbus.sys",VersionNT
\r
313 DriverFileDelete fso,WshShell,sDRIVERS & "mthca.sys",VersionNT
\r
314 FileDeleteQ fso,sDRIVERS & "mthca.sy1"
\r
315 DriverFileDelete fso,WshShell,sDRIVERS & "mlx4_bus.sys",VersionNT
\r
316 DriverFileDelete fso,WshShell,sDRIVERS & "mlx4_hca.sys",VersionNT
\r
317 DriverFileDelete fso,WshShell,sDRIVERS & "winverbs.sys",VersionNT
\r
318 DriverFileDelete fso,WshShell,sDRIVERS & "winmad.sys",VersionNT
\r
319 DriverFileDelete fso,WshShell,sDRIVERS & "ipoib.sys",VersionNT
\r
320 DriverFileDelete fso,WshShell,sDRIVERS & "ibiou.sys",VersionNT
\r
321 DriverFileDelete fso,WshShell,sDRIVERS & "ibsrp.sys",VersionNT
\r
322 DriverFileDelete fso,WshShell,sDRIVERS & "vnic.sys",VersionNT
\r
323 DriverFileDelete fso,WshShell,sDRIVERS & "qlgcvnic.sys",VersionNT
\r
325 DriverFileDelete fso,WshShell,sSYS32 & "libibverbs.dll",VersionNT
\r
326 DriverFileDelete fso,WshShell,sSYS32 & "libibverbsd.dll",VersionNT
\r
327 DriverFileDelete fso,WshShell,sSYS32 & "winmad.dll",VersionNT
\r
328 DriverFileDelete fso,WshShell,sSYS32 & "winmadd.dll",VersionNT
\r
329 DriverFileDelete fso,WshShell,sSYS32 & "winverbs.dll",VersionNT
\r
330 DriverFileDelete fso,WshShell,sSYS32 & "winverbsd.dll",VersionNT
\r
331 DriverFileDelete fso,WshShell,sSYS32 & "ibal.dll",VersionNT
\r
332 DriverFileDelete fso,WshShell,sSYS32 & "ibald.dll",VersionNT
\r
333 DriverFileDelete fso,WshShell,sSYS32 & "ibal32.dll",VersionNT
\r
334 DriverFileDelete fso,WshShell,sSYS32 & "ibal32d.dll",VersionNT
\r
335 DriverFileDelete fso,WshShell,sSYS32 & "complib.dll",VersionNT
\r
336 DriverFileDelete fso,WshShell,sSYS32 & "complibd.dll",VersionNT
\r
337 DriverFileDelete fso,WshShell,sSYS32 & "cl32.dll",VersionNT
\r
338 DriverFileDelete fso,WshShell,sSYS32 & "cl32d.dll",VersionNT
\r
339 DriverFileDelete fso,WshShell,sSYS32 & "mthcau.dll",VersionNT
\r
340 DriverFileDelete fso,WshShell,sSYS32 & "mthcaud.dll",VersionNT
\r
341 DriverFileDelete fso,WshShell,sSYS32 & "mthca32.dll",VersionNT
\r
342 DriverFileDelete fso,WshShell,sSYS32 & "mthca32d.dll",VersionNT
\r
343 DriverFileDelete fso,WshShell,sSYS32 & "mlx4u.dll",VersionNT
\r
344 DriverFileDelete fso,WshShell,sSYS32 & "mlx4ud.dll",VersionNT
\r
345 DriverFileDelete fso,WshShell,sSYS32 & "mlx4u32.dll",VersionNT
\r
346 DriverFileDelete fso,WshShell,sSYS32 & "mlx4u32d.dll",VersionNT
\r
347 DriverFileDelete fso,WshShell,sSYS32 & "ibsrp.dll",VersionNT
\r
348 DriverFileDelete fso,WshShell,sSYS32 & "ibsrpd.dll",VersionNT
\r
349 DriverFileDelete fso,WshShell,sSYS32 & "IbInstaller.dll",VersionNT
\r
350 DriverFileDelete fso,WshShell,sSYS32 & "ibwsd.dll",VersionNT
\r
351 DriverFileDelete fso,WshShell,sSYS32 & "ibndprov.dll",VersionNT
\r
352 DriverFileDelete fso,WshShell,sSYS32 & "ibndprov32.dll",VersionNT
\r
353 DriverFileDelete fso,WshShell,sSYS32 & "ndinstall.exe",VersionNT
\r
355 If fso.FolderExists(sSYSWOW64) Then
\r
356 DriverFileDelete fso,WshShell,sSYSWOW64 & "ibal.dll",VersionNT
\r
357 DriverFileDelete fso,WshShell,sSYSWOW64 & "ibald.dll",VersionNT
\r
358 DriverFileDelete fso,WshShell,sSYSWOW64 & "complib.dll",VersionNT
\r
359 DriverFileDelete fso,WshShell,sSYSWOW64 & "complibd.dll",VersionNT
\r
360 DriverFileDelete fso,WshShell,sSYSWOW64 & "mthcau.dll",VersionNT
\r
361 DriverFileDelete fso,WshShell,sSYSWOW64 & "mthcaud.dll",VersionNT
\r
362 DriverFileDelete fso,WshShell,sSYSWOW64 & "mlx4u.dll",VersionNT
\r
363 DriverFileDelete fso,WshShell,sSYSWOW64 & "mlx4ud.dll",VersionNT
\r
364 DriverFileDelete fso,WshShell,sSYSWOW64 & "ibsrp.dll",VersionNT
\r
365 DriverFileDelete fso,WshShell,sSYSWOW64 & "ibsrpd.dll",VersionNT
\r
366 DriverFileDelete fso,WshShell,sSYSWOW64 & "IbInstaller.dll",VersionNT
\r
367 DriverFileDelete fso,WshShell,sSYSWOW64 & "ibwsd.dll",VersionNT
\r
368 DriverFileDelete fso,WshShell,sSYSWOW64 & "ibndprov.dll",VersionNT
\r
371 If fso.FolderExists(Win & "lastgood" ) Then
\r
372 FileDeleteQ fso,Win & "lastgood\system32\ibwsd.dll"
\r
373 FileDeleteQ fso,Win & "lastgood\SysWOW64\ibwsd.dll"
\r
374 FileDeleteQ fso,Win & "lastgood\SysWOW64\mthcau.dll"
\r
375 FileDeleteQ fso,Win & "lastgood\SysWOW64\mthcaud.dll"
\r
376 FileDeleteQ fso,Win & "lastgood\system32\mthcau.dll"
\r
377 FileDeleteQ fso,Win & "lastgood\system32\mthcaud.dll"
\r
378 FileDeleteQ fso,Win & "lastgood\system32\drivers\mthcau.dll"
\r
379 FileDeleteQ fso,Win & "lastgood\system32\drivers\mthcaud.dll"
\r
380 FileDeleteQ fso,Win & "lastgood\system32\drivers\mthca.sys"
\r
381 FileDeleteQ fso,Win & "lastgood\system32\drivers\winverbs.sys"
\r
382 FileDeleteQ fso,Win & "lastgood\system32\drivers\winmad.sys"
\r
385 FileDeleteQ fso,Win & "winverbs.lib"
\r
386 FileDeleteQ fso,Win & "libibverbs.lib"
\r
388 ' delete opensm files
\r
389 sTemp = fso.GetSpecialFolder(0) & "\temp\"
\r
390 ' remove files from %SystemRoot%\temp
\r
391 FileDeleteQ fso,sTemp & "guid2lid"
\r
392 FileDeleteQ fso,sTemp & "opensm-sa.dump"
\r
393 FileDeleteQ fso,sTemp & "osm.log"
\r
394 FileDeleteQ fso,sTemp & "osm-subnet.lst"
\r
399 ''''''''''' Delete registry key ''''''''''''
\r
401 Function DeleteRegKey(KeyPath)
\r
402 Const HKEY_LOCAL_MACHINE = &H80000002
\r
405 Set objReg=GetObject("winmgmts:" & _
\r
406 "{impersonationLevel=impersonate}!\\" & _
\r
407 strComputer & "\root\default:StdRegProv")
\r
409 ' Display error number and description if applicable
\r
410 ' If Err Then ShowError
\r
411 Return = objReg.DeleteKey(HKEY_LOCAL_MACHINE, KeyPath)
\r
416 ''''''''''' Delete registry value ''''''''''''
\r
418 Function DeleteRegValue(strKeyPath, strValueName)
\r
419 Const HKEY_LOCAL_MACHINE = &H80000002
\r
424 Set objReg=GetObject("winmgmts:" & _
\r
425 "{impersonationLevel=impersonate}!\\" & _
\r
426 strComputer & "\root\default:StdRegProv")
\r
429 Return = objReg.DeleteValue(HKEY_LOCAL_MACHINE, strKeyPath, strValueName)
\r
430 ' Display error number and description if applicable
\r
431 If Err Then ShowError
\r
432 ' If (Return = 0) And (Err.Number = 0) Then
\r
433 ' WScript.Echo value & "Registry value HKEY_LOCAL_MACHINE," & _
\r
434 ' strKeyPath & "," & strValueName & "," & dwValue & " deleted"
\r
436 ' WScript.Echo "Registry value not deleted" & VBNewLine & _
\r
437 ' "Error = " & Err.Number
\r
444 Function ReadSysPath
\r
446 Const HKEY_LOCAL_MACHINE = &H80000002
\r
447 Dim strComputer, strKeyPath, strValueName, strValue
\r
449 ReadSysPath = Null ' assume the worst.
\r
451 Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
\r
452 strComputer & "\root\default:StdRegProv")
\r
454 strKeyPath="SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
\r
455 strValueName = "Path"
\r
456 oReg.GetExpandedStringValue HKEY_LOCAL_MACHINE,_
\r
457 strKeyPath, strValueName, strValue
\r
459 If (Err.Number = 0) And (Not IsNull(strValue)) Then
\r
460 ReadSysPath = strValue
\r
465 Function WriteSysPath(NewPath)
\r
467 Const HKEY_LOCAL_MACHINE = &H80000002
\r
468 Dim strComputer, strKeyPath, strValueName
\r
471 Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
\r
472 strComputer & "\root\default:StdRegProv")
\r
474 strKeyPath="SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
\r
475 strValueName = "Path"
\r
476 oReg.SetExpandedStringValue _
\r
477 HKEY_LOCAL_MACHINE, strKeyPath, strValueName, NewPath
\r
479 WriteSysPath = Err.Number
\r
483 ''''''''''' Check installation status ''''''''''''
\r
485 Function install_verify()
\r
488 sInstalldir = Session.Property("INSTALLDIR")
\r
489 Set WshShell = CreateObject("WScript.Shell")
\r
490 Set vstat = WshShell.Exec(sInstalldir & "vstat.exe")
\r
491 install_verify = vstat.ExitCode
\r
494 '-------------------------------------------------------------
\r
497 Function CreateRegKey(KeyPath)
\r
498 Const HKEY_LOCAL_MACHINE = &H80000002
\r
501 Set objReg=GetObject("winmgmts:" & _
\r
502 "{impersonationLevel=impersonate}!\\" & _
\r
503 strComputer & "\root\default:StdRegProv")
\r
505 ' Display error number and description if applicable
\r
506 If Err Then ShowError
\r
507 Return = objReg.CreateKey(HKEY_LOCAL_MACHINE, KeyPath)
\r
513 '--------------------------------------------------------
\r
516 ' Function to add registry DWORD val.
\r
517 Function AddRegDWORDValue(strKeyPath, strValueName, dwValue)
\r
518 Const HKEY_LOCAL_MACHINE = &H80000002
\r
521 Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_
\r
522 strComputer & "\root\default:StdRegProv")
\r
523 If Err Then ShowError
\r
525 oReg.SetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,dwValue
\r
527 If Err Then ShowError
\r
531 '-------------------------------------------------
\r
533 ' Function to add registry Expanded string val.
\r
535 Function AddRegExpandValue(strKeyPath, strValueName, dwValue)
\r
536 Const HKEY_LOCAL_MACHINE = &H80000002
\r
539 Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_
\r
540 strComputer & "\root\default:StdRegProv")
\r
542 If Err Then ShowError
\r
543 oReg.SetExpandedStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,_
\r
545 If Err Then ShowError
\r
549 '------------------------------------------------------------------------
\r
552 ' Function to add registry string val.
\r
554 Function AddRegStringValue(strKeyPath, strValueName, dwValue)
\r
555 Const HKEY_LOCAL_MACHINE = &H80000002
\r
558 Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_
\r
559 strComputer & "\root\default:StdRegProv")
\r
561 If Err Then ShowError
\r
562 oReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,dwValue
\r
563 If Err Then ShowError
\r
567 '------------------------------------------------------------------------
\r
569 ' Return a list of PCI devices using 'devcon find | findall'
\r
570 ' sFindHow - stringArg: devcon cmd arg {find | findall}
\r
572 Function Find_Dev_by_Tag(WshShell,exe,sFindHow,tag)
\r
575 cmd = exe & " " & sFindHow & " * | find """ & tag & """"
\r
576 Set connExec = WshShell.Exec(cmd)
\r
578 msgbox "Shell.Exec err: " & cmd
\r
579 Find_Dev_by_Tag = Null
\r
583 devs = split(connExec.StdOut.ReadAll, vbCrLF)
\r
585 On Error Resume Next
\r
587 ' verify we have some useful data.
\r
590 for each dev in devs
\r
591 If Instr(dev,Tag) <> 0 Then
\r
592 arrSize = arrSize + 1
\r
596 If arrSize = 0 Then
\r
597 Find_Dev_by_Tag = Null
\r
601 'Create new array of selected devices
\r
603 Redim ibaDev(arrSize - 1)
\r
605 For each dev in devs
\r
606 if (Instr(dev,Tag) <> 0) Then
\r
607 ibaDev(index) = dev
\r
612 Find_Dev_by_Tag = ibaDev
\r
617 Function IsInfiniHost(ID)
\r
619 HCAs = Array("5A44","5A45","5E8C","5E8D","6264","6274","6275","6278",_
\r
622 For each dID in HCAs
\r
625 'msgbox "match ID " & ID & " dID " & dID
\r
629 'msgbox "NO match ID " & ID
\r
635 ' Install Qlogic VNIC Driver using devman.exe (aka devcon)
\r
637 Sub devman_Install_VNIC(WshShell,sInstalldir)
\r
641 devmanQL = "cmd.exe /c cd /d " & sInstalldir & "qlgcvnic & " & _
\r
642 "..\IBcore\devman.exe "
\r
645 devID = "IBA\V00066AP00000030"
\r
646 rc = WshShell.Run (devmanQL & "disable " & devID, 0, true)
\r
647 rc = WshShell.Run (devmanQL & "update netvnic.inf " & devID,0,true)
\r
648 ' Display error number and description if applicable
\r
650 msgbox "Install_VNIC Err(" & rc & ") - devman update qlgcvnic.sys " _
\r
653 rc = WshShell.Run (devmanQL & "enable " & devID, 0, true)
\r
659 Function dpinst_Install_VNIC(WshShell,sInstalldir)
\r
660 Dim dpinstSRP,cmd,rc
\r
662 dpinst_Install_VNIC = 0
\r
664 dpinstVNIC = "cmd.exe /c cd /d " & sInstalldir & _
\r
665 "qlgcvnic & ..\ibcore\dpinst.exe "
\r
667 cmd = dpinstVNIC & "/S /F /SA /PATH """ & sInstalldir & "qlgcvnic""" & _
\r
669 rc = WshShell.Run (cmd,0,true)
\r
670 If (rc AND DPINST_INSTALLED) = 0 Then
\r
671 dpinst_err "qlgcvnic Install failed",cmd,rc
\r
672 dpinst_Install_VNIC = rc
\r
678 ' Install SRP (SCSI RDMA Protocol) Driver
\r
680 ' QLogic Virtual FC I/O controller or
\r
681 ' InfiniBand SRP Miniport: IBA\C0100C609EP0108 or IBA\CFF00C609EP0108
\r
682 ' OFED SRP target: IBA\V000002P00005A44
\r
683 ' one driver handles all three. Definition also used for SRP uninstall.
\r
686 "IBA\V000002P00005A44",_
\r
687 "IBA\C0100C609EP0108",_
\r
688 "IBA\CFF00C609EP0108",_
\r
689 "IBA\V00066AP00000038",_
\r
690 "IBA\V000006P00006282")
\r
692 Function devman_Install_SRP(WshShell,sInstalldir)
\r
694 Dim Devices,devID,rc,found
\r
696 devmanSRP = "cmd.exe /c cd /d " & sInstalldir & "SRP & " & _
\r
697 "..\IBcore\devman.exe "
\r
701 On Error Resume Next
\r
703 Devices = Find_IBA_Devices(WshShell,sInstalldir)
\r
704 If IsNull(Devices) Then
\r
705 msgbox "devman_Install_SRP() missing IBA\* devices?"
\r
709 For each ID in SRP_IDS
\r
710 For each devID in Devices
\r
711 If Instr(1,devID,ID) = 1 Then
\r
713 rc = WshShell.Run (devmanSRP & "update ib_srp.inf " & ID,0,true)
\r
714 ' Display error number and description if applicable
\r
716 msgbox "Install_SRP Err(" & rc _
\r
717 & ") devman update ib_srp.inf " & ID
\r
722 ' One driver handles all SRP devices - install once?
\r
723 ' If found = 1 Then
\r
729 devman_Install_SRP = -1
\r
731 devman_Install_SRP = 0
\r
737 Function dpinst_Install_SRP(WshShell,sInstalldir)
\r
738 Dim dpinstSRP,cmd,rc
\r
740 dpinst_Install_SRP = 0
\r
741 dpinstSRP = "cmd.exe /c cd /d " & sInstalldir _
\r
742 & "SRP & ..\ibcore\dpinst.exe "
\r
743 cmd = dpinstSRP & "/S /F /SA /PATH """ & sInstalldir & "SRP""" & " /SE /SW"
\r
744 rc = WshShell.Run (cmd,0,true)
\r
745 If (rc AND DPINST_INSTALLED) = 0 Then
\r
746 dpinst_err "SRP Install failed",cmd,rc
\r
747 dpinst_Install_SRP = rc
\r
753 Sub devman_Install_IOU(WshShell,sInstalldir)
\r
757 devman = "cmd.exe /c cd /d " & sInstalldir & "IBcore & devman.exe "
\r
759 On Error Resume Next
\r
761 dev_list = Find_Dev_by_Tag(WshShell,devman,"find","InfiniBand I/O Unit")
\r
763 ' if no IB_IOU device found, install ibiou.sys driver
\r
764 If IsNull(dev_list) Then
\r
765 rc = WshShell.Run (devman & "update ib_iou.inf IBA\IB_IOU",0,true)
\r
767 msgbox "Install_IOU Err(" & rc & ")" & _
\r
768 "devman update ib_iou.inf IBA\IB_IOU"
\r
771 ' msgbox "IOU driver already loaded [" & dev_list(0) & "]"
\r
777 ' For installer error codes see
\r
778 ' http://msdn2.microsoft.com/en-us/library/aa368542(VS.85).aspx
\r
780 Const ERROR_INSTALL_SOURCE_ABSENT = 1612 ' missing files to install,
\r
781 ' invalid feature selection.
\r
782 Const ERROR_INSTALL_FAILURE = 1603 ' fatal error during installation
\r
783 Const ERROR_FUNCTION_FAILED = 1627 ' function failed during execution
\r
784 Const ERROR_SUCCESS_REBOOT_REQUIRED = 3010 ' restart required
\r
786 ' For the dpinst.exe error discussion see
\r
787 ' http://msdn.microsoft.com/en-us/library/ms791066.aspx
\r
789 ' The dpinst.exe return code is a DWORD (0xWWXXYYZZ), where the meaning of
\r
790 ' the four single-byte fields 0xWW, 0xXX, 0xYY, and 0xZZ are defined as follows
\r
792 ' 0xWW If a driver package could not be installed, the 0x80 bit is set. If a
\r
793 ' computer restart is necessary, the 0x40 bit is set. Otherwise, no bits
\r
795 ' 0xXX The number of driver packages that could not be installed.
\r
796 ' 0xYY The number of driver packages that were copied to the driver store but
\r
797 ' were not installed on a device.
\r
798 ' 0xZZ The number of driver packages that were installed on a device.
\r
800 Const DPINST_INSTALLED = &H000000FF
\r
802 Sub dpinst_err(umsg,cmd,err)
\r
806 msg = umsg & " (status 0x" & Hex(err) & ") " & vbCrLf & vbCrLf & _
\r
808 " See %windir%dpinst.log for details" & vbCrLf & vbCrLf
\r
810 S(I) = (err AND 255)
\r
813 msg = msg & "Status Decode:" & vbCrLf
\r
814 msg = msg & S(0) & " driver packages installed on a device" & vbcrlf & _
\r
815 S(1) & " driver packages copied to the driver store and not installed on a device" & vbcrlf & _
\r
816 S(2) & " driver packages not installed on a device" & vbcrlf
\r
817 if S(3) = &H40 then
\r
818 msg = msg & "[0x" & Hex(S(3)) & "] 0x40 reboot required." & vbcrlf
\r
821 msgbox msg,,"WinOF Installer"
\r
826 Function dpinst_install(WshShell,sInstalldir,localSM,IPOIB,VNIC,SRP,DBG)
\r
828 Dim dpinst,dpinstNET,cmd,rc
\r
831 On Error Resume Next
\r
833 cmdspec = "cmd.exe /c cd /d " & sInstalldir
\r
834 dpinst = cmdspec & "IBcore & dpinst.exe "
\r
835 dpinstNET = cmdspec & "net & ..\ibcore\dpinst.exe "
\r
837 cmd = dpinst & "/S /F /SA /SE /SW"
\r
839 ' HCA driver install - mlx4 or mthca, dpinst does all .inf files in
\r
840 ' the current folder.
\r
842 rc = WshShell.Run (cmd,0,true)
\r
844 If (rc AND DPINST_INSTALLED) = 0 Then
\r
845 dpinst_err "dpinst_install: HCA driver Install failed",cmd,rc
\r
846 dpinst_install=ERROR_INSTALL_FAILURE
\r
851 dpinst_err "dpinst_install: HCA Install Status",cmd,rc
\r
854 ' Check/install IPoIB driver
\r
856 cmd = dpinstNET & "/S /F /SA /PATH """ & sInstalldir & "net""" & _
\r
858 rc = WshShell.Run (cmd,0,true)
\r
859 If (rc AND DPINST_INSTALLED) = 0 Then
\r
860 dpinst_err "dpinst_install: IPoIB Install failed",cmd,rc
\r
861 dpinst_install=ERROR_INSTALL_FAILURE
\r
867 dpinst_err "dpinst_install: IPoIB Install status",cmd,rc
\r
870 ' Start the Local OpenSM Subnet Manager service?
\r
872 OpenSM_StartMeUp WshShell,sInstalldir
\r
875 ' IOU driver is installed (loaded into driver store) by default as the
\r
876 ' driver (ibiou.sys) is located in IBcore; side-effect of dpinst.exe.
\r
879 rc = dpinst_Install_VNIC(WshShell,sInstalldir)
\r
881 dpinst_err "dpinst_install: qlgcvnic Install status",cmd,rc
\r
886 rc = dpinst_Install_SRP(WshShell,sInstalldir)
\r
888 dpinst_err "dpinst_install: SRP Install status",cmd,rc
\r
897 Function devman_install(WshShell,Installdir,have_mthca,have_mlx4,localSM,IPOIB,VNIC,SRP,DBG)
\r
899 Dim devman,cmd,Return,rc
\r
901 ' an HCA driver is 'required' for devman/devcon installs.
\r
902 If have_mlx4 = 0 AND have_mthca = 0 Then
\r
903 msgbox "devman_install - No HCA Driver Selected to Install?" & _
\r
904 " Aborting Installation."
\r
905 ' Force installer cleanup (real magic).
\r
906 devman_install=ERROR_INSTALL_SOURCE_ABSENT
\r
910 devman = "cmd.exe /c cd /d " & Installdir & "IBcore & devman.exe "
\r
912 dev_list = Find_Dev_by_Tag(WshShell,devman,"find","VEN_15B3")
\r
914 If IsNull(dev_list) Then
\r
915 msgbox "HCA driver install - No HCA devices to install?"
\r
916 devman_install=ERROR_INSTALL_FAILURE
\r
920 ' Install ConnectX (mlx4) HCA driver?
\r
924 ' install ConnectX/mlx4 bus driver
\r
926 For each Dev in dev_list
\r
928 mlxdev = Left(Dev,(Instr(dev,"SUBSYS")-2))
\r
929 devID = Right(mlxdev,4)
\r
930 If IsInfiniHost( devID ) = 0 Then
\r
931 ' Mixed HCA types? if not, then Vendor_ID install
\r
932 If have_mthca = 0 Then
\r
933 mlxdev = "PCI\VEN_15B3"
\r
935 cmd = devman & "update mlx4_bus.inf """ & mlxdev & """"
\r
936 Return = WshShell.Run (cmd,0,true)
\r
938 DrvInstalled = true
\r
941 ' one time install attempt if not mixed HCA types present.
\r
942 ' Otherwise, continue with next mlx4 DEV_ID
\r
943 If have_mthca = 0 Then
\r
950 If DrvInstalled <> true Then
\r
951 msgbox "mlx4_bus Install failed(" & Return & ") " & cmd
\r
952 devman_install=ERROR_INSTALL_FAILURE
\r
956 ' Install ConnectX HCA
\r
957 cmd = devman & "update mlx4_hca.inf MLX4\CONNECTX_HCA"
\r
958 Return = WshShell.Run (cmd,0,true)
\r
960 ' Display error number and description if applicable
\r
961 If Return <> 0 Then
\r
962 msgbox "mlx4_hca Install Err(" & Return & ") " & cmd
\r
963 devman_install=ERROR_INSTALL_FAILURE
\r
968 ' InfiniHost (mthca) HCA driver?
\r
971 DrvInstalled = false
\r
974 For each dev in dev_list
\r
976 idev = Left(dev,(Instr(dev,"SUBSYS")-2))
\r
977 devID = Right(idev,4)
\r
978 If IsInfiniHost( devID ) = 1 Then
\r
979 ' Mixed HCA types? if not, then Vendor_ID install
\r
980 If have_mlx4 = 0 Then
\r
981 idev = "PCI\VEN_15B3"
\r
983 cmd = devman & "update mthca.inf """ & idev & """"
\r
984 Return = WshShell.Run (cmd,0,true)
\r
986 DrvInstalled = true
\r
989 ' one time install attempt if no mlx4 present
\r
990 ' otherwise, continue with next DEV_ID
\r
991 If have_mlx4 = 0 Then
\r
998 If DrvInstalled <> true Then
\r
999 msgbox "InfiniHost(mthca) Install Err(" & Return & ") " & cmd
\r
1000 devman_install=ERROR_INSTALL_FAILURE
\r
1005 ' an HCA driver is 'required'.
\r
1007 if DrvInstalled = false Then
\r
1008 msgbox "Driver Install - No HCA Driver Selected to Install?" & _
\r
1009 " Aborting Installation."
\r
1010 ' Force installer cleanup (real magic).
\r
1011 devman_install=ERROR_INSTALL_SOURCE_ABSENT
\r
1015 ' Start a Local OpenSM Subnet Manager service?
\r
1017 OpenSM_StartMeUp WshShell,sInstalldir
\r
1020 ' Check/install IPoIB driver
\r
1022 devmanNET = "cmd.exe /c cd /d " & Installdir & _
\r
1023 "net & ..\IBcore\devman.exe "
\r
1024 cmd = devmanNET & "update netipoib.inf IBA\IPoIB"
\r
1025 rc = WshShell.Run (cmd,0,true)
\r
1027 msgbox "IPoIB Install Err(" & rc & ") " & cmd
\r
1028 devman_install=ERROR_INSTALL_FAILURE
\r
1033 msgbox "devman_install: IPoIB driver Installed.",,"WinOF Installer"
\r
1036 ' IB I/O Unit driver installed only if required by VNIC or SRP.
\r
1038 If VNIC OR SRP Then
\r
1039 rc = WshShell.Run (devman & "update ib_iou.inf IBA\IB_IOU",0,true)
\r
1041 msgbox "IOU Install Err(" & rc & ") update ib_iou.inf IBA\IB_IOU"
\r
1042 devman_install=ERROR_INSTALL_FAILURE
\r
1047 ' Install Qlogic VNIC Driver?
\r
1049 devman_Install_VNIC WshShell,Installdir
\r
1052 ' Install SRP (SCSI RDMA Protocol) Driver?
\r
1055 rc = devman_Install_SRP(WshShell,Installdir)
\r
1059 WshShell.popup "Waiting 10 seconds for SRP device(s) to appear",10,_
\r
1060 "WinOF - SRP Install"
\r
1063 msgbox "WinOF: Missing SRP devices?" & vbCrLf _
\r
1064 & "cd /d " & Installdir & "SRP" & vbCrLf _
\r
1065 & "..\IBcore\devman find IBA\*" & vbCrLf _
\r
1066 & "..\IBcore\devman update ib_srp.inf found-SRP-DevID" & vbCrLf
\r
1070 devman_install = 0
\r
1076 ''''''''''' Device Driver Install ''''''''''''
\r
1078 Function DriverInstall()
\r
1080 Dim devman, devmanEXE
\r
1081 Dim rc, cmd, CheckMode, sInstalldir, fso
\r
1082 Dim DrvInstalled, idev, mlxdev, dev, dev_list
\r
1083 Dim VersionNT,IPOIB,SRP,VNIC,localSM
\r
1085 On Error Resume Next
\r
1087 ' Get the value of INSTALLDIR - see WinOF_Setup
\r
1088 CheckMode = Session.Property("CustomActionData")
\r
1090 If Not CheckMode = "" Then
\r
1091 'in defered action this is the way to pass arguments.
\r
1092 PropArray = Split(Session.Property("CustomActionData"), ";")
\r
1094 Redim PropArray(9)
\r
1095 PropArray(0) = Session.Property("INSTALLDIR")
\r
1096 PropArray(1) = Session.Property("SystemFolder")
\r
1097 PropArray(2) = Session.Property("System64Folder")
\r
1098 PropArray(3) = Session.Property("WindowsFolder")
\r
1099 PropArray(4) = Session.Property("VersionNT")
\r
1100 PropArray(5) = Session.Property("ADDLOCAL")
\r
1101 PropArray(6) = Session.Property("REMOVE")
\r
1102 PropArray(7) = Session.Property("NODRV")
\r
1103 PropArray(8) = Session.Property("DBG")
\r
1106 ' If cmd-line specified NODRV=1, then do not install drivers.
\r
1107 ' Should not get here with NODRV=1 as WIX src files check.
\r
1110 If PropArray(7) <> "" Then
\r
1114 sInstalldir = PropArray(0)
\r
1115 VersionNT = PropArray(4)
\r
1116 InstallThis = PropArray(5)
\r
1117 DBG = PropArray(8)
\r
1119 devman = "cmd.exe /c cd /d " & sInstalldir & "IBcore & devman.exe "
\r
1121 Set WshShell = CreateObject("WScript.Shell")
\r
1122 Set fso = CreateObject("Scripting.FileSystemObject")
\r
1124 If Not fso.FileExists(sInstalldir & "IBcore\devman.exe") Then
\r
1125 msgbox "DriverInstall: missing " & sInstalldir & "IBcore\devman.exe"
\r
1126 DriverInstall=ERROR_FUNCTION_FAILED
\r
1130 If Not fso.FileExists(sInstalldir & "IBcore\dpinst.exe") Then
\r
1131 msgbox "DriverInstall: missing " & sInstalldir & "IBcore\dpinst.exe"
\r
1132 DriverInstall=ERROR_FUNCTION_FAILED
\r
1138 ' rescan system buses
\r
1139 Return = WshShell.Run (devman & "rescan", 0, true)
\r
1141 ' Install HCA (Host Channel Adapter) Driver(s)
\r
1142 DrvInstalled = false
\r
1144 ' Which HCAs are selected to install?
\r
1145 ' Both InfiniHost(mthca) and ConnectX(mlx4) have the same
\r
1146 ' Vendor ID VEN_15B3, so a generic by 'Vendor ID' install will not suceed.
\r
1147 ' In the case of both InfiniHost and ConnectX (mixed) HCAs present, install
\r
1148 ' using VENDOR_ID and DEV_ID.
\r
1153 ' msgbox "InstallThis " & InstallThis
\r
1155 have_mlx4 = instr(InstallThis,"hca_connectX")
\r
1156 have_mthca = instr(InstallThis,"hca_mthca")
\r
1157 IPOIB = instr(InstallThis,"fIPoIB")
\r
1158 localSM = instr(InstallThis,"fOSMS")
\r
1160 SRP = instr(InstallThis,"fSRP") _
\r
1161 AND fso.FileExists(sInstalldir & "SRP\ib_srp.inf")
\r
1163 VNIC = instr(InstallThis,"fVNIC") _
\r
1164 AND fso.FileExists(sInstalldir & "qlgcvnic\netvnic.inf")
\r
1166 ' Flag Windows LongHorn Install (aka Vista | Server 2008)
\r
1168 ' Use DPINST.EXE for Svr 2008 & Vista Driver Install (Windows LongHorn)
\r
1169 ' otherwise use devman.
\r
1171 If VersionNT >= WindowsLongHorn Then
\r
1172 DriverInstall = dpinst_install(WshShell,sInstalldir,localSM,IPOIB,_
\r
1175 DriverInstall = devman_install(WshShell,sInstalldir,have_mthca,_
\r
1176 have_mlx4,localSM,IPOIB,VNIC,SRP,DBG)
\r
1179 If DriverInstall <> 0 Then
\r
1180 find_remove_INF_file WshShell,devman,"ib_iou.cat"
\r
1181 find_remove_INF_file WshShell,devman,"ipoib.cat"
\r
1182 find_remove_INF_file WshShell,devman,"mthca.cat"
\r
1183 find_remove_INF_file WshShell,devman,"mlx4"
\r
1190 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
\r
1192 ' Find IBA devices using Devcon
\r
1194 Function Find_IBA_Devices(WshShell,sInstalldir)
\r
1197 Set ibaDevicesExec = WshShell.Exec ("cmd.exe /c cd " & sInstalldir & "IBcore & devman.exe findall * | FIND ""IBA""")
\r
1199 ' Set ibaDevicesExec = WshShell.Exec ("cmd.exe /c cd " & sInstalldir & "IBcore & devman.exe find IBA\*")
\r
1201 ibaDevices = split(ibaDevicesExec.StdOut.ReadAll, vbCrLF)
\r
1203 ' Determine the actual array Size - dump nonessential lines from cmd output.
\r
1206 For each dev in ibaDevices
\r
1207 if (Instr(dev,"IBA\") = 1) Then
\r
1208 arrSize = arrSize + 1
\r
1212 If arrSize = 0 Then
\r
1213 Find_IBA_Devices = Null
\r
1217 'Creating array of IBA\ devices
\r
1219 Redim ibaDev(arrSize - 1)
\r
1221 For each dev in ibaDevices
\r
1222 if (Instr(dev,"IBA\") = 1) Then
\r
1223 ibaDev(index) = dev
\r
1228 Find_IBA_Devices=ibaDev
\r
1233 ' returns an array of all Local Area Connections which
\r
1234 ' were created for IPoIB.
\r
1236 Function Find_IPOIB_LAC()
\r
1237 Dim WinOS,cmd,base,dev
\r
1239 Set WshShell = CreateObject("WScript.Shell")
\r
1240 base = "cmd.exe /c reg query HKLM\SYSTEM\CurrentControlSet\Control\Network"
\r
1241 WinOS = Session.Property("VersionNT")
\r
1243 If (WinOS <> WindowsXP) Then
\r
1245 cmd = base & " /f ""IBA\IPOIB"" /s /d | FIND ""Connection"" "
\r
1248 cmd = base & " /s | FIND ""}\Connection"" "
\r
1251 Set ibaDevicesExec = WshShell.Exec ("cmd.exe /C " & cmd)
\r
1253 ibaDevices = split(ibaDevicesExec.StdOut.ReadAll, vbCrLF)
\r
1255 ' determine the array Size
\r
1258 for each dev in ibaDevices
\r
1259 arrSize = arrSize + 1
\r
1261 'Creating array of Local Area Connections based on IPoIB
\r
1263 Redim ibaDev(arrSize - 1)
\r
1266 For each dev in ibaDevices
\r
1268 ElseIf WinOS <> WindowsXP then
\r
1269 ' ibaDev(index) = dev
\r
1270 delstr = Left(dev,Len(dev)-Len("\Connection"))
\r
1271 ibaDev(index) = delstr
\r
1274 ' XP reg.exe format sucks, unable to filter IBA\IPOIB, so we do
\r
1275 ' it here....sigh.
\r
1276 Set rex = WshShell.Exec ("cmd.exe /C reg.exe query " & dev & _
\r
1277 " /v PnpInstanceID | FIND ""IBA\IPOIB"" ")
\r
1278 resp = split(rex.StdOut.ReadAll, vbCrLF)
\r
1279 For each re in resp
\r
1280 ' msgbox "XP dev " & dev
\r
1281 ' msgbox "XP re " & re
\r
1282 if Instr(re,"IPOIB") Then
\r
1283 delstr = Left(dev,Len(dev)-Len("\Connection"))
\r
1284 ibaDev(index) = delstr
\r
1291 Find_IPOIB_LAC=ibaDev
\r
1296 ' Remove 3rd party (OEM) driver package, identified by the string LookFor.
\r
1298 Function find_remove_INF_file(WshShell,exe,LookFor)
\r
1300 Dim cmd,cmdDM,use_dpinst,pfile
\r
1302 ' using dpinst.exe[WLH] or devman.exe[wnet/xp]?
\r
1303 use_dpinst = Instr(exe,"dpinst")
\r
1305 cmd = "cmd.exe /c for /f %i in ('findstr /m /c:""" & LookFor _
\r
1306 & """ %WINDIR%\inf\oem*.inf') do @echo %i"
\r
1308 Set infFilesExec = WshShell.Exec ( cmd )
\r
1310 InfFiles = infFilesExec.StdOut.ReadAll
\r
1311 IFILES = Split(InfFiles,vbCrLf)
\r
1312 ' msgbox "remove_INF_File LookFor " & LookFor
\r
1313 On Error Resume Next
\r
1314 For Each file in IFILES
\r
1315 If (file <> "") Then
\r
1316 ' msgbox "find_remove_INF_file(" & LookFor & ") " & file
\r
1317 ' most common is devman.exe
\r
1318 cmd = exe & " -f dp_delete " & file
\r
1319 if use_dpinst then
\r
1321 cmd = exe & " /U """ & file & """ /S /D"
\r
1324 Return = WshShell.Run (cmd, 0, true)
\r
1325 if use_dpinst then
\r
1326 ' use devman.exe to delete all .inf referenced files
\r
1327 Return = WshShell.Run (cmdDM, 0, true)
\r
1329 ' make sure the .inf & .pnf files are removed.
\r
1330 pfile = replace(file,".inf",".pnf")
\r
1336 find_remove_INF_file = 0
\r
1341 Function remove_INF_file(WshShell,exe,file)
\r
1343 Dim cmd,cmdDM,use_dpinst,pfile
\r
1345 ' using dpinst.exe[WLH] or devman.exe[wnet/xp]?
\r
1346 use_dpinst = Instr(exe,"dpinst")
\r
1348 ' msgbox "remove_INF_File file " & file
\r
1350 On Error Resume Next
\r
1352 ' most common is devman.exe
\r
1353 cmd = exe & " -f dp_delete " & file
\r
1354 If use_dpinst Then
\r
1356 cmd = exe & " /U """ & file & """ /S /D"
\r
1360 Return = WshShell.Run (cmd, 0, true)
\r
1361 if use_dpinst then
\r
1362 ' use devman.exe to delete all .inf referenced files
\r
1363 Return = WshShell.Run (cmdDM, 0, true)
\r
1366 ' make sure the .inf & .pnf files are removed.
\r
1367 pfile = replace(file,".inf",".pnf")
\r
1371 find_remove_INF_file = 0
\r
1377 Sub cleanup_driver_files(fso,WshShell,sInstalldir,tool,VersionNT,devInfo)
\r
1379 Dim i,Flist,udfCnt
\r
1381 If IsNull(devInfo) Then
\r
1382 msgbox "cleanup_driver_files <null> devInfo?"
\r
1386 DBG = Session.Property("DBG")
\r
1388 DisplayDevInfo devInfo
\r
1393 ' Device Install Info
\r
1396 '(2) Fully qualified INF filename
\r
1397 '(3) count of files installed from .inf file.
\r
1398 '(4) thru (3) [fileCount] Fully qualified Installed driver filenames.
\r
1400 remove_INF_file WshShell,tool,devInfo(2)
\r
1402 For i=4 To DevInfo(3) + 3
\r
1403 ' skip the KMDF wdmcoinstaller*.dll file as we do not ref count here
\r
1404 ' and could break other installed KMDF drivers if removed.
\r
1405 If Instr(devinfo(i),"WdfCoInstaller") = 0 Then
\r
1406 DriverFileDelete fso,WshShell,devInfo(i),VersionNT
\r
1408 If fso.FileExists(devInfo(i)) Then
\r
1409 Flist = Flist & " " & devInfo(i) & vbCrLf
\r
1410 udfCnt = udfCnt + 1
\r
1417 msgbox "Remaining Driver files " & udfCnt & vbCrLf & Flist
\r
1423 ' Not used - run the specified command during next startup.
\r
1425 Function RunAtReboot(name,run_once_cmd)
\r
1427 key_name = "Software\Microsoft\Windows\CurrentVersion\RunOnce"
\r
1428 AddRegStringValue key_name,name,run_once_cmd
\r
1429 msgbox "RunAtReboot( " & name & " , " & run_once_cmd & " )"
\r
1434 Sub DisplayDevInfo(DevInfo)
\r
1438 If IsNull(DevInfo) Then
\r
1442 For i=4 To DevInfo(3) + 3
\r
1443 devs = devs & " " & DevInfo(i) & vbCRLF
\r
1446 msgbox "[DeviceID] " & DevInfo(0) & vbCRLF &_
\r
1447 "[DeviceName] " & DevInfo(1) & vbCRLF &_
\r
1448 "[INF filename] " & DevInfo(2) & vbCRLF &_
\r
1449 "[INF installed files] " & DevInfo(3) & vbCRLF &_
\r
1454 Function GetDeviceInstallInfo(WshShell,sInstalldir,Dev)
\r
1456 Dim devman,tmp,s,StrStart,StrEnd,FileCnt,INF
\r
1458 devman = "cmd.exe /c cd /d " & sInstalldir & _
\r
1459 "IBcore & devman.exe driverfiles ""@"
\r
1461 Set connExec = WshShell.Exec(devman & Dev & """")
\r
1462 cmdout = split(connExec.StdOut.ReadAll, vbCrLF)
\r
1463 If IsNull(cmdout) Then
\r
1464 GetDeviceInstallInfo = Null
\r
1468 StrStart = InStr(1,cmdout(2),"installed from ") + 15
\r
1469 If StrStart <= 15 Then
\r
1470 GetDeviceInstallInfo = Null
\r
1474 StrEnd = InStr(StrStart,cmdout(2),"[") - 1
\r
1475 INF = mid(cmdout(2),StrStart,StrEnd-StrStart)
\r
1477 StrStart = InStr(StrEnd,cmdout(2),"]. ") + 3
\r
1478 StrEnd = InStr(StrStart,cmdout(2)," file")
\r
1479 FileCnt = CInt(mid(cmdout(2),StrStart,StrEnd-StrStart))
\r
1483 '(2) Fully qualified INF filename
\r
1484 '(3) count of files installed from .inf file.
\r
1485 '(4) thru (3) [fileCount] Fully qualified Installed driver filenames.
\r
1488 Redim ibaDev(3+FileCnt)
\r
1489 ibaDev(0) = cmdout(0)
\r
1490 tmp = ltrim(cmdout(1))
\r
1491 s = Len(tmp) - (Instr(tmp,"Name: ") + 5)
\r
1492 ibaDev(1) = Right(tmp,s)
\r
1494 ibaDev(3) = FileCnt
\r
1496 ' (ibaDev(3) - 1) + 4 == ibaDev(3) + 3
\r
1497 For i=4 To FileCnt + 3
\r
1498 ibaDev(i) = ltrim(cmdout(i-1))
\r
1501 ' DisplayDevInfo(ibaDev)
\r
1503 GetDeviceInstallInfo = ibaDev
\r
1509 ' remove IB I/O Unit driver
\r
1511 Sub Uninstall_IOU(fso,WshShell,devList,Installdir,VersionNT)
\r
1515 RemoveDevice fso,WshShell,Installdir,devList,"InfiniBand I/O Unit",VersionNT
\r
1517 devman = "cmd.exe /c cd /d " & sInstalldir & "IBcore & devman.exe "
\r
1519 If VersionNT >= WindowsLongHorn Then
\r
1520 ' use dpinst.exe instead of devman.exe for Windows LongHorn++
\r
1521 tool = replace(devman,"devman","dpinst")
\r
1526 ' dpinst can install and not load the driver (no srp/vnic)
\r
1527 find_remove_INF_file WshShell,tool,"ib_iou.cat"
\r
1533 ' Remove QLogic VNIC instances
\r
1535 Sub Uninstall_VNIC(fso,WshShell,devices,sInstalldir,VersionNT)
\r
1537 Dim devman,Return,device,dt,sDRIVERS,tool,devInfo
\r
1539 devman = "cmd.exe /c cd /d " & sInstalldir & "IBcore & devman.exe "
\r
1541 If IsNull(devices) Then
\r
1542 ' create a list of IBA\* devices via "devcon find"
\r
1543 devices = Find_IBA_Devices(WshShell,sInstalldir)
\r
1544 If IsNull(devices) Then
\r
1545 msgbox "Uninstall_VNIC - unable to find IBA devices?"
\r
1551 For each devTarget in devices
\r
1552 If (Instr(devTarget,"IBA\V00066AP00000030")) Then
\r
1553 device = split(devTarget, ":")
\r
1554 dt = rtrim(device(0))
\r
1555 If IsNull(devInfo) Then
\r
1556 devInfo = GetDeviceInstallInfo(WshShell,sInstalldir,dt)
\r
1558 ' disable instance - double quote complex device name for success.
\r
1559 Return = WshShell.Run (devman & "disable ""@" & dt & """", 0, true)
\r
1560 ' Removing the Qlogic Vnic I/O Unit
\r
1561 Return = WshShell.Run (devman & "remove ""@" & dt & """", 0, true)
\r
1565 If VersionNT >= WindowsLongHorn Then
\r
1566 ' use dpinst.exe instead of devman.exe for Windows LongHorn++
\r
1567 tool = replace(devman,"devman","dpinst")
\r
1572 If IsNull(devInfo) Then
\r
1573 find_remove_INF_file WshShell,tool,"netvnic.cat"
\r
1577 cleanup_driver_files fso,WshShell,sInstalldir,tool,VersionNT,devInfo
\r
1582 Sub Uninstall_SRP(fso,WshShell,devices,sInstalldir,VersionNT)
\r
1584 Dim devman,devmanRMAT,devmanDAAT,Return,device,sDRIVERS,tool,devInfo
\r
1586 ' QLogic Virtual FC I/O controller or
\r
1587 ' InfiniBand SRP Miniport: IBA\C0100C609EP0108 or IBA\CFF00C609EP0108
\r
1588 ' one driver handles all three.
\r
1589 ' See previous SRP_IDS definition @ Install_SRP.
\r
1591 devman = "cmd.exe /c cd /d " & sInstalldir & "IBcore & devman.exe "
\r
1592 devmanRMAT = devman & "remove @"
\r
1593 devmanDAAT = devman & "disable @"
\r
1596 If IsNull(devices) Then
\r
1597 ' create a list of IBA\* devices via "devcon find"
\r
1598 devices = Find_IBA_Devices(WshShell,sInstalldir)
\r
1599 If IsNull(devices) Then
\r
1600 msgbox "Uninstall_SRP - unable to find IBA devices?"
\r
1605 ' Remove SRP devices
\r
1606 ' QLogic Virtual FC I/O controller instance?
\r
1607 ' Either: IBA\C0100C609EP0108 or IBA\CFF00C609EP0108
\r
1608 ' Linux SRP target: IBA\V000002P00005A44
\r
1609 For each ID in SRP_IDS
\r
1610 For each deviceCan in devices
\r
1611 If Instr(deviceCan,ID) <> 0 Then
\r
1612 device = split(deviceCan, ":")
\r
1613 dt = rtrim(device(0))
\r
1614 If IsNull(devInfo) Then
\r
1615 devInfo = GetDeviceInstallInfo(WshShell,sInstalldir,dt)
\r
1617 ' disable the instance
\r
1618 Return = WshShell.Run (devmanDAAT & dt, 0, true)
\r
1619 ' Removing SRP device
\r
1620 Return = WshShell.Run (devmanRMAT & dt, 0, true)
\r
1621 ' msgbox "Uninstall_SRP() " & devmanRMAT & dt & " rc " & Return
\r
1626 If VersionNT >= WindowsLongHorn Then
\r
1627 ' use dpinst.exe instead of devman.exe for Windows LongHorn++
\r
1628 tool = replace(devman,"devman","dpinst")
\r
1633 'No SRP device - check/clear to be safe.
\r
1634 If IsNull(devInfo) Then
\r
1635 find_remove_INF_file WshShell,tool,"ibsrp.cat"
\r
1639 cleanup_driver_files fso,WshShell,sInstalldir,tool,VersionNT,devInfo
\r
1644 Sub RemoveDevice(fso,WshShell,sInstalldir,devList,DeviceTag,VersionNT)
\r
1646 dim device,devman,devmanRMAT,devTarget,dt,Return,devInfo
\r
1648 devman = "cmd.exe /c cd /d " & sInstalldir & "IBcore & devman.exe "
\r
1649 devmanRMAT = devman & "remove ""@"
\r
1650 devmanDAAT = devman & "disable ""@"
\r
1653 If IsNull(devList) Then
\r
1654 devList = Find_Dev_by_Tag(WshShell,devman,"findall",DeviceTag)
\r
1655 If IsNull(devList) Then
\r
1660 For each devTarget in devList
\r
1661 If Instr(devTarget,DeviceTag) Then
\r
1662 device = split(devTarget, ":")
\r
1663 dt = rtrim(device(0))
\r
1664 If IsNull(devInfo) Then
\r
1665 devInfo = GetDeviceInstallInfo(WshShell,sInstalldir,dt)
\r
1667 Return = WshShell.Run (devmanDAAT & dt & """", 0, true)
\r
1668 Return = WshShell.Run (devmanRMAT & dt & """", 0, true)
\r
1672 ' Only if a device was found
\r
1673 If IsNull(devInfo) Then
\r
1677 If VersionNT >= WindowsLongHorn Then
\r
1678 ' use dpinst.exe instead of devman.exe for Windows LongHorn++
\r
1679 tool = replace(devman,"devman","dpinst")
\r
1684 cleanup_driver_files fso,WshShell,sInstalldir,tool,VersionNT,devInfo
\r
1690 Sub remove_all_HCA_devices(fso,WshShell,sInstalldir,VersionNT)
\r
1694 devman = "cmd.exe /c cd /d " & Installdir & "IBcore & devman.exe "
\r
1696 ' Old (CoInstaller version) ibbus GUID - just in case.
\r
1697 Return = WshShell.Run (devman & "remove {94F41CED-78EB-407C-B5DF-958040AF0FD8",0,true)
\r
1699 RemoveDevice fso,WshShell,sInstalldir,Null,"MLX4\CONNECTX_HCA",VersionNT
\r
1701 ' VEN_15B3 covers devices: mthca & mlx4_bus
\r
1702 RemoveDevice fso,WshShell,sInstalldir,Null,"PCI\VEN_15B3",VersionNT
\r
1704 If VersionNT >= WindowsLongHorn Then
\r
1705 ' use dpinst.exe instead of devman.exe for Windows LongHorn++
\r
1706 tool = replace(devman,"devman","dpinst")
\r
1711 find_remove_INF_file WshShell,tool,"mthca"
\r
1712 find_remove_INF_file WshShell,tool,"mlx4_hca"
\r
1713 find_remove_INF_file WshShell,tool,"mlx4_bus"
\r
1715 ' catch-all cleanup.
\r
1716 find_remove_INF_file WshShell,tool,"Mellanox"
\r
1717 find_remove_INF_file WshShell,tool,"InfiniBand"
\r
1722 Function Uninstall_IB_Devices(fso,WshShell,Installdir,VersionNT)
\r
1726 If (fso.FileExists(Installdir & "IBcore\dpinst.exe") = False) Then
\r
1727 Exit Function ' no reason to continue without the tool.
\r
1730 If (fso.FileExists(Installdir & "IBcore\devman.exe") = False) Then
\r
1731 Exit Function ' no reason to continue without the tool.
\r
1734 ' create a list of IBA\* devices via "devcon find"
\r
1736 devList = Find_IBA_Devices(WshShell,Installdir)
\r
1737 If Not IsNull(devices) Then
\r
1739 Uninstall_SRP fso,WshShell,devList,Installdir,VersionNT
\r
1741 Uninstall_VNIC fso,WshShell,devList,Installdir,VersionNT
\r
1743 ' remove I/O Unit driver
\r
1744 Uninstall_IOU fso,WshShell,devList,Installdir,VersionNT
\r
1746 ' remove IPoIB devices
\r
1747 RemoveDevice fso,WshShell,Installdir,devList,"IBA\IPOIB",VersionNT
\r
1751 ' stop the openSM service in case it was started.
\r
1752 Return = WshShell.Run ("cmd.exe /c sc.exe stop opensm", 0, true)
\r
1754 ' delete opensm service from registry
\r
1755 Return = WshShell.Run ("cmd.exe /c sc.exe delete opensm", 0, true)
\r
1757 remove_all_HCA_devices fso,WshShell,Installdir,VersionNT
\r
1759 Uninstall_IB_Devices = 0
\r
1765 ''''''''''' Driver Uninstall ''''''''''''
\r
1767 Sub DriverUninstall()
\r
1768 Dim sInstalldir, WshShell, fso, sVersionNT
\r
1770 sInstalldir = Session.Property("INSTALLDIR")
\r
1772 Set WshShell = CreateObject("WScript.Shell")
\r
1773 Set fso = CreateObject("Scripting.FileSystemObject")
\r
1775 ' WSD is not supported on XP and should NOT have been installed.
\r
1776 ' otherwise, remove the service: ND (Network Direct) then WinSock Direct.
\r
1778 sVersionNT = Session.Property("VersionNT")
\r
1779 sRemove = Session.Property("REMOVE")
\r
1780 If sRemove = "" Then
\r
1784 If fso.FileExists(sInstalldir & "net\ndinstall.exe") Then
\r
1785 Return = WshShell.Run ("cmd.exe /c cd /d " & sInstalldir & _
\r
1786 " & net\ndinstall.exe -r", 0, true)
\r
1789 If sVersionNT <> WindowsXP AND fso.FileExists(sInstalldir & "installsp.exe") Then
\r
1790 Return = WshShell.Run ("cmd.exe /c cd /d " & sInstalldir & _
\r
1791 " & installsp.exe -r", 0, true)
\r
1794 Uninstall_IB_Devices fso,WshShell,sInstalldir,sVersionNT
\r
1796 ' Remove Service entries from the registry
\r
1798 DeleteRegKey "System\CurrentControlSet\Services\ibbus"
\r
1799 DeleteRegKey "System\CurrentControlSet\Services\mthca"
\r
1800 DeleteRegKey "System\CurrentControlSet\Services\mlx4_bus"
\r
1801 DeleteRegKey "System\CurrentControlSet\Services\mlx4_hca"
\r
1802 DeleteRegKey "System\CurrentControlSet\Services\ipoib"
\r
1803 DeleteRegKey "System\CurrentControlSet\Services\ibiou"
\r
1804 DeleteRegKey "System\CurrentControlSet\Services\ibsrp"
\r
1805 DeleteRegKey "System\CurrentControlSet\Services\qlgcvnic"
\r
1806 DeleteRegKey "System\CurrentControlSet\Services\winverbs"
\r
1809 DeleteRegValue "SYSTEM\CurrentControlSet\Control\CoDeviceInstallers" ,_
\r
1810 "{58517E00-D3CF-40c9-A679-CEE5752F4491}"
\r
1812 DeleteRegKey "SYSTEM\CurrentControlSet\Control\Class\{58517E00-D3CF-40C9-A679-CEE5752F4491}"
\r
1815 DeleteRegValue "SYSTEM\CurrentControlSet\Control\CoDeviceInstallers" ,_
\r
1816 "{31B0B28A-26FF-4dca-A6FA-E767C7DFBA20}"
\r
1818 DeleteRegKey "SYSTEM\CurrentControlSet\Control\Class\{31B0B28A-26FF-4dca-A6FA-E767C7DFBA20}"
\r
1820 DeleteRegKey "SYSTEM\CurrentControlSet\Control\Class\{714995B2-CD65-4a47-BCFE-95AC73A0D780}"
\r
1822 ' In livefish mode, the above does not always work - just in case.
\r
1823 ' remove reg entries for ConnectX, mthca, ibbus, mlx4 & ipoib
\r
1826 "Control\Class\{58517E00-D3CF-40C9-A679-CEE5752F4491}",_
\r
1827 "Control\Class\{31B0B28A-26FF-4dca-A6FA-E767C7DFBA20}",_
\r
1828 "Control\Class\{714995B2-CD65-4a47-BCFE-95AC73A0D780}",_
\r
1829 "Services\ibbus",_
\r
1830 "Services\mthca",_
\r
1831 "Services\mlx4_bus",_
\r
1832 "Services\mlx4_hca",_
\r
1833 "Services\ipoib",_
\r
1834 "Services\EventLog\System\ipoib",_
\r
1835 "Services\ibiou",_
\r
1836 "Services\qlgcvnic",_
\r
1837 "Services\ibsrp",_
\r
1838 "Services\winmad",_
\r
1839 "Services\winverbs" )
\r
1841 base = "reg.exe delete HKLM\SYSTEM\CurrentControlSet\"
\r
1843 ' in livefish mode the delete didn't suceed, delete it in another way
\r
1844 For each ID in nukem
\r
1846 Return = WshShell.Run (base & ID & " /f", 0, true)
\r
1850 ' Cleanup KMDF CoInstaller Driver entries.
\r
1851 Return = WshShell.Run (base & "Control\Wdf\Kmdf\kmdflibrary\versions\1\driverservices /v mlx4_bus /f", 0, true)
\r
1852 Return = WshShell.Run (base & "Control\Wdf\Kmdf\kmdflibrary\versions\1\driverservices /v winverbs /f", 0, true)
\r
1853 Return = WshShell.Run (base & "Control\Wdf\Kmdf\kmdflibrary\versions\1\driverservices /v winmad /f", 0, true)
\r
1856 ' Return = WshShell.Run ("reg.exe delete HKLM\Software\Microsoft\Windows\currentVersion\DIFx\DriverStore\WinVerbs_* /f", 0, true)
\r
1857 ' Return = WshShell.Run ("reg.exe delete HKLM\Software\Microsoft\Windows\currentVersion\DIFx\DriverStore\ipoib_* /f", 0, true)
\r
1860 ' Remove all Local Area Connection registry entries which were constructed
\r
1861 ' for IPoIB. Next WinOF install gets same IPoIB local area connection
\r
1865 IPOIB_LAC = Find_IPOIB_LAC
\r
1867 For each LAC in IPOIB_LAC
\r
1869 Return = WshShell.Run ("reg.exe delete " & LAC & " /f", 0, true)
\r
1870 If Err Then ShowErr
\r
1874 ' remove driver installed files
\r
1875 RemoveDriverFiles fso,WshShell,sVersionNT
\r
1877 Session.Property("REBOOT") = "FORCE"
\r
1882 ' Enable WSD if installsp.exe was installed (feature Winsock direct selected).
\r
1883 ' For Windows XP, this CustomAction should not be called as WSD is not
\r
1884 ' supported on XP.
\r
1887 Dim sInstalldir, WshShell, fso
\r
1889 sInstalldir = Session.Property("INSTALLDIR")
\r
1891 Set WshShell = CreateObject("WScript.Shell")
\r
1892 Set fso = CreateObject("Scripting.FileSystemObject")
\r
1894 If fso.FileExists(sInstalldir & "installsp.exe") Then
\r
1895 ' install the WinSockdirect service
\r
1896 Return = WshShell.Run ("cmd.exe /c cd /d " & sInstalldir _
\r
1897 & " & installsp.exe -i", 0, true)
\r
1899 If Err Then ShowError
\r
1904 ' This sub will only be called if the feature ND start was selected.
\r
1905 ' See WIX src file - ND_start
\r
1907 Sub ND_StartMeUp()
\r
1908 Dim sInstalldir, WshShell, fso
\r
1910 sInstalldir = Session.Property("INSTALLDIR")
\r
1912 Set WshShell = CreateObject("WScript.Shell")
\r
1913 Set fso = CreateObject("Scripting.FileSystemObject")
\r
1915 ' Start the Network Direct Service if installed
\r
1917 If fso.FileExists(sInstalldir & "net\ndinstall.exe") Then
\r
1918 Return = WshShell.Run ("cmd.exe /c cd /d " & sInstalldir _
\r
1919 & " & net\ndinstall.exe -i", 0, true)
\r
1920 If Err Then ShowErr2("ND service install failed")
\r
1927 If Err.Number = 0 Then
\r
1930 strMsg = vbCrLf & "Error # " & Err.Number & vbCrLf & _
\r
1931 Err.Description & vbCrLf & vbCrLf
\r
1937 If Err.Number <> 0 Then
\r
1938 msgbox msg & vbCrLf & "Err # " & Err.Number & vbCrLf & Err.Description
\r
1943 Function ShowErr2(msg)
\r
1944 If Err.Number <> 0 Then
\r
1945 strMsg = vbCrLf & "Err # " & Err.Number & vbCrLf & _
\r
1946 Err.Description & vbCrLf
\r
1947 msgbox msg & strMsg
\r
1949 ShowErr2=Err.Number
\r
1953 ' Convert the disabled OpenSM Windows service to an 'auto' startup on next boot.
\r
1954 ' OpenSM service was created by WIX installer directives - see WOF.wxs file.
\r
1955 ' Performs local service conversion and then starts the local OpenSM service.
\r
1956 ' Routine called from DriverInstall phase 'IF' a local OpenSM service was
\r
1957 ' requested. The point is to get a local OpenSM up and running prior to loading
\r
1958 ' the IOU and SRP/VNIC drivers. Server 2003 IOU driver load fails if OpenSM
\r
1959 ' has not yet registered the IOC?
\r
1961 Sub OpenSM_StartMeUp(WshShell,sInstalldir)
\r
1964 opensmPath = sInstalldir & "opensm.exe"
\r
1966 Return = WshShell.Run ("cmd.exe /c sc.exe config opensm start= auto",0,true)
\r
1967 Return = WshShell.Run ("cmd.exe /c sc.exe start opensm", 0, true)
\r
1973 Sub ScheduleLocalReboot
\r
1975 Set objWMILocator = CreateObject ("WbemScripting.SWbemLocator")
\r
1976 objWMILocator.Security_.Privileges.AddAsString "SeShutdownPrivilege",True
\r
1977 Set objWMIServices = objWMILocator.ConnectServer(strComputerName, _
\r
1978 cWMINameSpace, strUserID, strPassword)
\r
1979 Set objSystemSet = GetObject(_
\r
1980 "winmgmts:{impersonationLevel=impersonate,(Shutdown)}")._
\r
1981 InstancesOf("Win32_OperatingSystem")
\r
1984 For Each objSystem In objSystemSet
\r
1985 objSystem.Win32Shutdown 2+4
\r
1986 objSystem.Win32Shutdown 2+4
\r
1987 objSystem.Win32Shutdown 2+4
\r
1990 'msgbox "Please wait while computer restarts ...",0,"WinOF"
\r
1995 ' Now that WIX+[Windows Installer] handle previous installs, this routine
\r
1996 ' only deletes lingering driver files which were not removed from the last
\r
1998 ' Called in immediate mode, condition: INSTALL=1
\r
2000 Function ChkInstallAndReboot()
\r
2002 Set fso = CreateObject("Scripting.FileSystemObject")
\r
2003 Set WshShell = CreateObject("WScript.Shell")
\r
2005 VersionNT = Session.Property("VersionNT")
\r
2007 ' remove any lingering driver installed files
\r
2008 RemoveDriverFiles fso,WshShell,sVersionNT
\r
2010 ChkInstallAndReboot = 0
\r
2016 ' Not Used - idea was to run %SystemRoot%\temp\WinOFcleanup.bat on the next
\r
2017 ' reboot to remove driver files which did not get uninstalled (win2K3 only);
\r
2018 ' script ran, files persisted on Win2K3?
\r
2020 Sub RunOnceCleanup(fso,sInstalldir)
\r
2022 Dim sTemp, cmd, script
\r
2024 On Error Resume Next
\r
2026 If Session.Property("REMOVE") <> "ALL" Then
\r
2028 msgbox "RunOnceCleanup - not remove ALL?"
\r
2032 script = "RunOnceWinOFcleanup.bat"
\r
2033 src = sInstalldir & "IBcore\" & script
\r
2035 If Not fso.FileExists(src) Then
\r
2036 msgbox "Missing " & src
\r
2040 ' copy WinOFclean.bat to %SystemRoot%\temp for runOnce cmd
\r
2041 sTemp = fso.GetSpecialFolder(0) & "\temp\" & script
\r
2042 If fso.FileExists(sTemp) Then
\r
2044 fso.DeleteFile(sTemp),True
\r
2048 fso.CopyFile src, sTemp
\r
2049 If Err.Number = 0 Then
\r
2050 cmd = "cmd.exe /C " & sTemp
\r
2051 RunAtReboot "WinOF", cmd
\r
2052 ' 2nd cmd to remove previous script.
\r
2053 ' XXX cmd = "cmd.exe /C del /F/Q " & sTemp
\r
2054 ' RunAtReboot "WinOF2", cmd
\r
2061 ' WIX has appended [INSTALLDIR] to the system search path via <Environment>.
\r
2062 ' Unfortunately WIX does not _Broadcast_ to all top-level windows the registry
\r
2063 ' Settings for '%PATH%' have changed. Run nsc to do the broadcast.
\r
2065 Sub BcastRegChanged
\r
2067 Set WshShell=CreateObject("WScript.Shell")
\r
2069 sInstallDir = Session.Property("INSTALLDIR")
\r
2071 On Error Resume Next
\r
2072 WshShell.Run "%COMSPEC% /c cd /d " & sInstallDir & " & nsc.exe", 0, true
\r
2074 BcastRegChanged = 0
\r
2079 ' This routine should never be...InstallShield-12 for some reason has
\r
2080 ' decided not to completely remove [INSTALLDIR]? Until such a time
\r
2081 ' that 'why' is understood, this routine removes [INSTALLDIR]! Sigh...
\r
2082 ' nuke some driver files which remain due to devcon device install.
\r
2083 ' Immediate execution; called after MsiCleanupOnSuccess (REMOVE="ALL")
\r
2086 Dim fso, sInstallDir, rc, cmd
\r
2088 Set fso=CreateObject("Scripting.FileSystemObject")
\r
2089 Set WshShell=CreateObject("WScript.Shell")
\r
2091 sInstallDir = Session.Property("INSTALLDIR")
\r
2092 If fso.FolderExists(sInstallDir) Then
\r
2093 cmd = "cmd.exe /c rmdir /S /Q """ & sInstallDir & """"
\r
2094 rc = wshShell.Run(cmd,0,true)
\r
2097 RemoveFolder "C:\IBSDK"
\r
2103 ' NOT USED - deferred action to increment ticks while action is taking place
\r
2105 Function AddProgressInfo( )
\r
2106 Const INSTALLMESSAGE_ACTIONSTART = &H08000000
\r
2107 Const INSTALLMESSAGE_ACTIONDATA = &H09000000
\r
2108 Const INSTALLMESSAGE_PROGRESS = &H0A000000
\r
2110 Set rec = Installer.CreateRecord(3)
\r
2112 rec.StringData(1) = "callAddProgressInfo"
\r
2113 rec.StringData(2) = "Incrementing the progress bar..."
\r
2114 rec.StringData(3) = "Incrementing tick [1] of [2]"
\r
2116 'Message INSTALLMESSAGE_ACTIONSTART, rec
\r
2118 rec.IntegerData(1) = 1
\r
2119 rec.IntegerData(2) = 1
\r
2120 rec.IntegerData(3) = 0
\r
2122 Message INSTALLMESSAGE_PROGRESS, rec
\r
2124 Set progrec = Installer.CreateRecord(3)
\r
2126 progrec.IntegerData(1) = 2
\r
2127 progrec.IntegerData(2) = 5000
\r
2128 progrec.IntegerData(3) = 0
\r
2130 rec.IntegerData(2) = 1500000
\r
2132 For i = 0 To 5000000 Step 5000
\r
2133 rec.IntegerData(1) = i
\r
2134 ' action data appears only if a text control subscribes to it
\r
2135 ' Message INSTALLMESSAGE_ACTIONDATA, rec
\r
2136 Message INSTALLMESSAGE_PROGRESS, progrec
\r
2139 ' return success to MSI
\r
2140 AddProgressInfo = 0
\r
2144 ' Called when .msi 'CHANGE' (ADD/REMOVE) installation was selected.
\r
2145 ' Currently only handles SRP & VNIC
\r
2147 Function InstallChanged
\r
2149 Dim rc, sInstallDir, sAddLocal, sRemove, sDRIVERS, NeedReboot, WLH
\r
2152 sRemove = Session.Property("REMOVE")
\r
2153 If sRemove = "ALL" Then
\r
2157 Set WshShell=CreateObject("WScript.Shell")
\r
2158 Set fso = CreateObject("Scripting.FileSystemObject")
\r
2162 sInstalldir = Session.Property("INSTALLDIR")
\r
2163 sAddLocal = Session.Property("ADDLOCAL")
\r
2165 ' Flag Windows LongHorn Install (aka Vista | Server 2008)
\r
2166 VersionNT = Session.Property("VersionNT")
\r
2167 If VersionNT >= WindowsLongHorn Then
\r
2173 On Error Resume Next
\r
2175 If (Not IsNull(sAddLocal)) AND (sAddLocal <> "") Then
\r
2176 If Instr(sAddLocal,"fSRP") OR Instr(sAddLocal,"fVNIC") Then
\r
2177 ' IOU driver loaded into driver store when HCA driver installed.
\r
2179 devman_Install_IOU WshShell,sInstalldir
\r
2183 If Instr(sAddLocal,"fSRP") Then
\r
2184 If fso.FileExists(sInstalldir & "SRP\ib_srp.inf") Then
\r
2186 rc = dpinst_Install_SRP(WshShell,sInstalldir)
\r
2188 rc = devman_Install_SRP(WshShell,sInstalldir)
\r
2191 msgbox "ERR: missing " & sInstalldir & "SRP\ib_srp.inf"
\r
2195 If Instr(sAddLocal,"fVNIC") Then
\r
2196 If fso.FileExists(sInstalldir & "qlgcvnic\netvnic.inf") Then
\r
2198 rc = dpinst_Install_VNIC(WshShell,sInstalldir)
\r
2200 devman_Install_VNIC WshShell,sInstalldir
\r
2203 msgbox "Err: missing " & sInstalldir & "qlgcvnic\netvnic.inf"
\r
2208 If (Not IsNull(sRemove)) AND (sRemove <> "") Then
\r
2210 If Instr(sRemove,"fSRP") Then
\r
2211 Uninstall_SRP fso,WshShell,Null,sInstalldir,VersionNT
\r
2212 NeedReboot = NeedReboot + 1
\r
2215 If Instr(sRemove,"fVNIC") Then
\r
2216 Uninstall_VNIC fso,WshShell,Null,sInstalldir,VersionNT
\r
2217 NeedReboot = NeedReboot + 1
\r
2221 If NeedReboot Then
\r
2222 Session.Property("REBOOT") = "FORCE"
\r
2223 InstallChanged = ERROR_SUCCESS_REBOOT_REQUIRED
\r
2224 ' until forced reboot relly works....
\r
2225 msgbox "A system reboot is required to complete this operation." _
\r
2226 & vbCrLf & "Please do so at your earliest convinence."
\r