ML
    • Recent
    • Categories
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login

    Booting an image made on another computer - dirty tricks.

    IT Discussion
    microsoft windows 7 intel chipset bsod
    3
    10
    2.2k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • MattSpellerM
      MattSpeller
      last edited by MattSpeller

      This script is for when you do something really dumb like image an old PC and want to boot it on a much newer one with radically different hardware.

      A really neat VBScript that's NOT actually a virus! (I was surprised too)

      What does this little script do? Why it re-enables all the disabled storage drivers!

      If you don't know what to do with the below you probably shouldn't be futzing about with it but if you PM me I'll help you.

      1 Reply Last reply Reply Quote 1
      • scottalanmillerS
        scottalanmiller
        last edited by

        No file attachment features here. Text and images only.

        MattSpellerM 2 Replies Last reply Reply Quote 0
        • MattSpellerM
          MattSpeller @scottalanmiller
          last edited by

          @scottalanmiller alright, prepare yourself, here it comes.

          1 Reply Last reply Reply Quote 0
          • MattSpellerM
            MattSpeller @scottalanmiller
            last edited by

            @scottalanmiller lol exceeds post length cap

            1 Reply Last reply Reply Quote 0
            • mlnewsM
              mlnews
              last edited by

              I didn't even know that there WAS a post length cap!

              1 Reply Last reply Reply Quote 0
              • scottalanmillerS
                scottalanmiller
                last edited by

                There you go, try now.

                1 Reply Last reply Reply Quote 0
                • MattSpellerM
                  MattSpeller
                  last edited by

                  This post is deleted!
                  1 Reply Last reply Reply Quote 0
                  • MattSpellerM
                    MattSpeller
                    last edited by

                    '*************************************************************************
                    '*
                    '* File: Fix_7hdc.vbs
                    '* Created: 2011-01-03 by cdob
                    '* Version: 0.11
                    '*
                    '* http://www.911cd.net/forums//index.php?showtopic=24245
                    '*
                    '* Purpose:
                    '* enable installed, but disabled mass storage drivers, e.g. msahci.sys
                    '* install additional mass storage drivers
                    '*
                    '* Runtime environment:
                    '* Windows 7 installation DVD / USB
                    '* relating PE
                    '*
                    '* used external applications (default integrated at runtime environment)
                    '* reg.exe, dism.exe, notepad.exe
                    '*
                    '*************************************************************************

                    ' ------------------------------------------------------------------------
                    '
                    ' based on PNPDriverMatch.vbs
                    ' http://technet.microsoft.com/en-us/magazine/2006.05.utilityspotlight.aspx
                    '
                    ' I agree that Microsoft has no warranty, obligations or liability
                    ' for any Sample Application Files.
                    '
                    '<header original file> ==================================================
                    '
                    ' Windows Script Host Sample Script
                    '
                    ' ------------------------------------------------------------------------
                    ' Copyright (C) 2006 Microsoft Corporation
                    '
                    ' You have a royalty-free right to use, modify, reproduce and distribute
                    ' the Sample Application Files (and/or any modified version) in any way
                    ' you find useful, provided that you agree that Microsoft has no warranty,
                    ' obligations or liability for any Sample Application Files.
                    ' ------------------------------------------------------------------------

                    '********************************************************************
                    '*
                    '* File: PNPDriverMatch.vbs
                    '* Created: 03/06/2006
                    '* Version: 1.0.2
                    '*
                    '* Main Function: VBScipt to examine a folder of Plug & Play drivers,
                    '* find INF files that have PNP IDs found on the computer,
                    '* and optionally copy the matching drivers folders to a
                    '* specified destination folder.
                    '*
                    '* Usage: cscript PNPDriverMatch.vbs /folder:folder path
                    '* [/dest:folder path] [/log:log file path]
                    '* [/class:class filter] [/provider:provider filter]
                    '* [/excludeclass] [/excludeprovider] [/q] [/?]
                    '*
                    '* Copyright (C) 2006 Microsoft Corporation
                    '*
                    '*
                    '* Revisions:
                    '*
                    '* 1.0.0 - 06/22/2005 - Created.
                    '* 1.0.1 - 03/06/2006 - Updated RegularExpression class. Changed
                    '* Expang_objDriverFolderDictStringVariables function to use
                    '* updated MatchText method of the
                    '* RegularExpression class
                    '* 1.0.2 - 03/22/2006 - Added EscapeXmlMarkup method to RegularExpression
                    '* class.
                    '*
                    '********************************************************************
                    '
                    '</header original file> ============================================

                    '********************************************************************
                    ' * Declare Variables
                    '********************************************************************

                    Option Explicit
                    'On Error Resume Next

                    Dim arrArguments()

                    Dim blnQuiet
                    Dim blnExcludeProvider
                    Dim blnExcludeClass
                    Dim blnClassOutput
                    Dim blnProviderOutput
                    Dim blnEnableDrivers
                    Dim blnInstallDrivers
                    Dim blnRestore
                    Dim blnGuiMode

                    Dim colItems
                    Dim colComputerSystem

                    Dim g_objWshShell
                    Dim g_objWshNetwork
                    Dim g_objFSO
                    Dim g_objINI
                    Dim g_objRegExp
                    Dim g_objWMIDefault
                    Dim g_objRegistry
                    Dim g_objWMIService
                    Dim g_objPnpIdDict
                    Dim g_objInfFileDict
                    Dim g_objFileDict
                    Dim g_objDriverFolderDict
                    Dim g_objComputerSystem
                    Dim g_objInfDismFileDict
                    Dim g_objShellApp
                    Dim objFolderItem
                    Dim objFolder

                    Dim i
                    Dim intOpMode

                    Dim Key

                    Dim lRC

                    Dim objComputerSystem
                    Dim objItem
                    Dim objPNPFolder

                    Dim refLogFile

                    Dim strQuote
                    Dim strComputer
                    Dim strComputerName
                    Dim strPNPFolder
                    Dim strTargetDrive
                    Dim strSearchFile
                    Dim strPNPDeviceID
                    Dim strDriver
                    Dim strClass
                    Dim strClassFilter
                    Dim strProviderName
                    Dim strProviderFilter
                    Dim strLogFile
                    Dim strOptionsMessage
                    Dim strDriverParentFolder
                    Dim strDriverRelativePath
                    Dim strDriverDestFolder
                    Dim strDriverDestParentFolder

                    ' Define constants
                    Const CONST_ERROR = 0
                    Const CONST_WSCRIPT = 1
                    Const CONST_CSCRIPT = 2
                    Const CONST_SHOW_USAGE = 3
                    Const CONST_PROCEED = 4
                    Const CONST_STRING_NOT_FOUND = -1
                    Const CONST_FOR_READING = 1
                    Const CONST_FOR_WRITING = 2
                    Const CONST_FOR_APPENDING = 8
                    Const CONST_Success = 0
                    Const CONST_Failure = 1

                    Const wbemFlagReturnImmediately = &h10
                    Const wbemFlagForwardOnly = &h20
                    Const strEnumKey = "SYSTEM\CurrentControlSet\Enum"
                    Const strClassKey = "SYSTEM\CurrentControlSet\Control\Class"
                    Const strServicesKey = "SYSTEM\CurrentControlSet\Services"

                    Const HKEY_CLASSES_ROOT = &H80000000
                    Const HKEY_CURRENT_USER = &H80000001
                    Const HKEY_LOCAL_MACHINE = &H80000002
                    Const HKEY_USERS = &H80000003
                    Const HKEY_CURRENT_CONFIG = &H80000005
                    Const HKEY_DYN_DATA = &H80000006

                    Const REG_SZ = 1
                    Const REG_EXPAND_SZ = 2
                    Const REG_BINARY = 3
                    Const REG_DWORD = 4
                    Const REG_MULTI_SZ = 7

                    Const DICTIONARY_COMPAREMODE_BINARY = 0
                    Const DICTIONARY_COMPAREMODE_TEXT = 1
                    Const DICTIONARY_COMPAREMODE_DATABASE = 2

                    strQuote = chr(34)

                    '***** Initialize variables
                    strComputer = "."
                    strTargetDrive = ""
                    strSearchFile = ""
                    strProviderFilter = ""
                    strClassFilter = ""
                    blnExcludeProvider = False
                    blnExcludeClass = False
                    blnEnableDrivers = False
                    blnInstallDrivers = False
                    blnRestore = False
                    blnGuiMode = False

                    '********************************************************************
                    ' * Create Objects
                    '********************************************************************

                    Set g_objFSO = CreateObject("Scripting.FileSystemObject")
                    Set g_objWshShell = CreateObject("Wscript.Shell")
                    Set g_objWshNetwork = CreateObject("Wscript.Network")
                    Set g_objShellApp = CreateObject("Shell.Application")

                    Set g_objWMIService = GetObject("winmgmts:\" & strComputer & "\root\CIMV2")
                    Set g_objWMIDefault = GetObject("winmgmts:\" & strComputer & "\root\Default")
                    Set g_objRegistry = g_objWMIDefault.Get ("StdRegProv")

                    Set g_objPnpIdDict = CreateObject("Scripting.Dictionary")
                    g_objPnpIdDict.CompareMode = DICTIONARY_COMPAREMODE_TEXT

                    Set g_objInfFileDict = CreateObject("Scripting.Dictionary")
                    g_objInfFileDict.CompareMode = DICTIONARY_COMPAREMODE_TEXT

                    Set g_objDriverFolderDict = CreateObject("Scripting.Dictionary")
                    g_objDriverFolderDict.CompareMode = DICTIONARY_COMPAREMODE_TEXT

                    'my addon
                    'Set g_objFileDict = CreateObject("Scripting.Dictionary")
                    'g_objFileDict.CompareMode = DICTIONARY_COMPAREMODE_TEXT

                    Set g_objInfDismFileDict = CreateObject("Scripting.Dictionary")
                    g_objInfDismFileDict.CompareMode = DICTIONARY_COMPAREMODE_TEXT

                    'added
                    Dim dHwid, inf_count, objDiskDrives, objDrive
                    Set g_objDriverFolderDict = CreateObject("Scripting.Dictionary")
                    'g_objDriverFolderDict.CompareMode = DICTIONARY_COMPAREMODE_TEXT
                    Set dHwid = CreateObject("Scripting.Dictionary")
                    dHWid.CompareMode = DICTIONARY_COMPAREMODE_TEXT
                    inf_count = 0

                    'strPNPFolder = g_objFSO.GetParentFolderName(WScript.ScriptFullName) & "" & g_objWshShell.Environment("Process").Item("PROCESSOR_ARCHITECTURE")
                    strPNPFolder = g_objFSO.GetParentFolderName(WScript.ScriptFullName) & "" & g_objWshShell.ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%")

                    '********************************************************************
                    ' * Check script host exe and parse command line
                    '********************************************************************
                    If Wscript.arguments.count = 0 Then
                    blnQuiet = True
                    Else
                    'Get the command line arguments
                    For i = 0 to Wscript.arguments.count - 1
                    ReDim Preserve arrArguments(i)
                    arrArguments(i) = Wscript.arguments.item(i)
                    Next

                    'Parse the command line
                    Err.Clear()
                    intOpMode = intParseCmdLine(arrArguments, strPNPFolder, strTargetDrive, strSearchFile, strLogFile, strClassFilter, strProviderFilter, blnExcludeClass, blnExcludeProvider, blnQuiet, blnEnableDrivers, blnInstallDrivers, blnRestore, strOptionsMessage)

                    If Err.Number Then
                    Wscript.Echo "Error 0X" & CStr(Hex(Err.Number)) & " occurred in parsing the command line."
                    If Err.Description <> "" Then
                    Wscript.Echo "Error description: " & Err.Description & "."
                    End If
                    WScript.quit
                    End If

                    Select Case intOpMode
                    Case CONST_SHOW_USAGE
                    Call ShowUsage()
                    WScript.quit
                    Case CONST_PROCEED
                    'Do nothing.
                    Case CONST_ERROR
                    WScript.quit
                    Case Else
                    Wscript.Echo "Error occurred in passing parameters."
                    End Select

                    WScript.Echo strOptionsMessage
                    End If

                    '********************************************************************
                    '* Main Script
                    '********************************************************************
                    'no command line mode set: enable gui mode
                    If not blnEnableDrivers And not blnInstallDrivers Then
                    'Wscript.Echo "no command line mode set: enable gui mode"
                    blnGuiMode = True
                    blnEnableDrivers = True
                    blnInstallDrivers = True
                    'enable logging
                    If strLogFile = "" Then strLogFile = g_objFSO.GetSpecialFolder(2) & "\fix_7hdc-" & g_objFSO.GetTempName & ".log"
                    End If

                    '***** Open Log File
                    If strLogFile <> "" Then
                    Err.Clear()
                    Set refLogFile = g_objFSO.OpenTextFile(strLogFile, CONST_FOR_WRITING, True)
                    If Err.Number Then
                    Wscript.Echo "Error 0X" & CStr(Hex(Err.Number)) & " occurred when opening the log file."
                    If Err.Description <> "" Then
                    Wscript.Echo "Error description: " & Err.Description & "."
                    End If
                    WScript.quit
                    End If

                    AppendLog(strOptionsMessage)
                    End If

                    Print(Now)
                    Print("Computer System:")
                    Set colComputerSystem = g_objWMIService.ExecQuery("Select * from Win32_ComputerSystem",,48)
                    For Each objComputerSystem in colComputerSystem
                    Print("Manufacturer: " & objComputerSystem.Manufacturer)
                    Print("Model: " & objComputerSystem.Model)
                    Next
                    Print("")

                    'search target disk drive, use first match
                    If strTargetDrive = "" And strSearchFile <> "" Then
                    For Each objDrive in g_objFSO.Drives
                    If objDrive.IsReady And strTargetDrive = "" Then
                    If g_objFSO.FileExists(objDrive & strSearchFile) Then
                    strTargetDrive = objDrive
                    Print("found windows drive: " & strTargetDrive)
                    End If
                    End If
                    Next
                    End If

                    'debug
                    If strLogFile <> "" Then
                    AppendLog("")
                    AppendLog("strTargetDrive: " & strTargetDrive)
                    AppendLog("strSearchFile: " & strSearchFile)
                    AppendLog("blnEnableDrivers: " & blnEnableDrivers)
                    AppendLog("blnInstallDrivers: " & blnInstallDrivers)
                    AppendLog("blnRestore " & blnRestore)
                    AppendLog("")
                    End If

                    If blnEnableDrivers Then
                    If strTargetDrive = "" Then
                    Set objFolder = g_objShellApp.BrowseForFolder(0, "Mode: Enable drivers." & vbCr & vbCr & "Select a Win 7 drive:", 1, &H11)
                    If not objFolder Is Nothing Then
                    Set objFolderItem = objFolder.Self
                    strTargetDrive = objFolderItem.Path
                    Print("strTargetDrive: " & strTargetDrive)
                    End If
                    End If

                    If g_objFSO.FolderExists(strTargetDrive & "\windows\system32\config") Then
                    EnableDrivers
                    Else
                    Wscript.Echo "Error: " & strTargetDrive & "\windows\system32\config not found"
                    If blnGuiMode Then g_objWshShell.Run "notepad.exe " & chr(34) & strLogFile & chr(34), 1, False
                    Wscript.Quit
                    End If
                    End If

                    If blnInstallDrivers Then
                    'Print ("Install mode")
                    If strTargetDrive = "" Then
                    Set objFolder = g_objShellApp.BrowseForFolder(0, "Mode: Install drivers." & vbCr & vbCr & "Select a Win 7 drive:", 1, &H11)
                    If objFolder Is Nothing Then
                    Wscript.Echo "no drive selected"
                    If blnGuiMode Then g_objWshShell.Run "notepad.exe " & chr(34) & strLogFile & chr(34), 1, False
                    WScript.Quit
                    End If
                    Set objFolderItem = objFolder.Self
                    strTargetDrive = objFolderItem.Path
                    Print("strTargetDrive: " & strTargetDrive)
                    End If

                    If not g_objFSO.FolderExists(strTargetDrive & "\windows\system32\config") Then
                    Wscript.Echo "Error: " & strTargetDrive & "\windows\system32\config not found"
                    If blnGuiMode Then g_objWshShell.Run "notepad.exe " & chr(34) & strLogFile & chr(34), 1, False
                    WScript.Quit
                    End If

                    If not g_objFSO.FolderExists(strPNPFolder) Or blnGuiMode Then
                    Set objFolder = g_objShellApp.BrowseForFolder(0, "Select a driver folder:", 1, &H11)
                    If objFolder Is Nothing Then
                    Wscript.Echo "no drive selected"
                    If blnGuiMode Then g_objWshShell.Run "notepad.exe " & chr(34) & strLogFile & chr(34), 1, False
                    WScript.Quit
                    End If
                    Set objFolderItem = objFolder.Self
                    strPNPFolder = objFolderItem.Path
                    Print("strPNPFolder: " & strPNPFolder)
                    End If

                    If not g_objFSO.FolderExists(strPNPFolder) Then
                    WScript.Echo "The PNP folder path '" & strPNPFolder & "' does not exist." & vbCr & _
                    "Please check the input and try again."
                    WScript.Quit
                    End If

                    InstallDrivers
                    End If

                    If blnRestore Then
                    'todo 2525
                    End If

                    If strLogFile <> "" Then refLogFile.Close()
                    If blnGuiMode Then g_objWshShell.Run "notepad.exe " & chr(34) & strLogFile & chr(34), 1, False

                    '********************************************************************
                    '*
                    '* Function intChkProgram()
                    '*
                    '* Purpose: Determines which program is used to run this script.
                    '*
                    '* Input: None
                    '*
                    '* Returns: intChkProgram is set to one of CONST_ERROR, CONST_WSCRIPT,
                    '* and CONST_CSCRIPT.
                    '*
                    '********************************************************************
                    Private Function intChkProgram()

                    ON ERROR RESUME NEXT
                    
                    Dim i
                    Dim j
                    Dim strFullName
                    Dim strCommand
                    
                    'strFullName should be something like C:\WINDOWS\COMMAND\CSCRIPT.EXE
                    strFullName = WScript.FullName
                    If Err.Number Then
                        Wscript.Echo "Error 0x" & CStr(Hex(Err.Number)) & " occurred."
                        If Err.Description <> "" Then
                            Wscript.Echo "Error description: " & Err.Description & "."
                        End If
                        intChkProgram =  CONST_ERROR
                        Exit Function
                    End If
                    
                    i = InStr(1, strFullName, ".exe", 1)
                    If i = 0 Then
                        intChkProgram =  CONST_ERROR
                        Exit Function
                    Else
                        j = InStrRev(strFullName, "\", i, 1)
                        If j = 0 Then
                            intChkProgram =  CONST_ERROR
                            Exit Function
                        Else
                            strCommand = Mid(strFullName, j+1, i-j-1)
                            Select Case LCase(strCommand)
                                Case "cscript"
                                    intChkProgram = CONST_CSCRIPT
                                Case "wscript"
                                    intChkProgram = CONST_WSCRIPT
                                Case Else       'should never happen
                                    Wscript.Echo "An unexpected program is used to run this script."
                                    Wscript.Echo "Only CScript.Exe or WScript.Exe can be used to run this script."
                                    intChkProgram = CONST_ERROR
                            End Select
                        End If
                    End If
                    

                    End Function

                    '********************************************************************
                    '*
                    '* Function intParseCmdLine()
                    '*
                    '* Purpose: Parses the command line.
                    '*
                    '* Input: arrArguments an array containing input from the command line
                    '*
                    '* Output: strPNPFolder Path to Plug & Play top folder
                    '* strLogFile Output file
                    '* strClassFilter Device Class used to filter output
                    '* strProviderFilter Device Provider used to filter output
                    '* blnExcludeClass Exclude filtered Class items from output
                    '* blnExcludeProvider Exclude filtered Provider items from output
                    '* blnQuiet Specifies whether to suppress messages
                    '* strOptionsMessage String containing options selected
                    '*
                    '* Returns: intParseCmdLine is set to one of CONST_ERROR, CONST_SHOW_USAGE,
                    '* and CONST_PROCEED.
                    '*
                    '********************************************************************
                    Private Function intParseCmdLine(arrArguments, strPNPFolder, strTargetDrive, strSearchFile, strLogFile, strClassFilter, strProviderFilter, blnExcludeClass, blnExcludeProvider, blnQuiet, blnEnableDrivers, blnInstallDrivers, blnRestore, strOptionsMessage)

                    ON ERROR RESUME NEXT
                    
                    Dim i
                    Dim strFlag
                    Dim strSwitchValue
                    
                    strFlag = arrArguments(0)
                    Err.Clear()
                    
                    'Help is needed
                    If (strFlag = "") OR (strFlag="help") OR (strFlag="/h") OR (strFlag="\h") OR (strFlag="-h") _
                        OR (strFlag = "\?") OR (strFlag = "/?") OR (strFlag = "?") OR (strFlag="h") Then
                        intParseCmdLine = CONST_SHOW_USAGE
                        Exit Function
                    End If
                    
                    strOptionsMessage = strOptionsMessage & "Fix_7hdc.vbs"  & VbCrLf
                    strOptionsMessage = strOptionsMessage & ""  & VbCrLf
                    strOptionsMessage = strOptionsMessage & "Command Line Options:"  & vbCrLf
                    strOptionsMessage = strOptionsMessage & "---------------------------------------"  & VbCrLf
                    
                    For i = 0 to UBound(arrArguments)
                        strFlag = Left(arrArguments(i), InStr(1, arrArguments(i), ":")-1)
                        If Err.Number Then            'An error occurs if there is no : in the string
                            Err.Clear
                            If LCase(arrArguments(i)) = "/q" Then
                                blnQuiet = True
                                strOptionsMessage = strOptionsMessage & "Supress Console Log Output: " & blnQuiet & VbCrLf
                            Elseif LCase(arrArguments(i)) = "/search" Then
                                strSearchFile = "\windows\system32\winload.exe"
                                strOptionsMessage = strOptionsMessage & "Search folder: " & strSearchFile & VbCrLf
                            Elseif LCase(arrArguments(i)) = "/enable" Then
                                blnEnableDrivers  = True
                                strOptionsMessage = strOptionsMessage & "Enable, disalbed drivers." & VbCrLf
                            Elseif LCase(arrArguments(i)) = "/install" Then
                                blnInstallDrivers  = True
                                strOptionsMessage = strOptionsMessage & "Install Plug & Play drivers." & VbCrLf
                            Elseif LCase(arrArguments(i)) = "/restore" Then
                                blnRestore = True
                                strOptionsMessage = strOptionsMessage & "restore mode" & VbCrLf
                            Elseif LCase(arrArguments(i)) = "/excludeclass" Then
                                blnExcludeClass = True
                                strOptionsMessage = strOptionsMessage & "Output file excludes specified filtered Class: " & blnExcludeClass & VbCrLf
                            Elseif LCase(arrArguments(i)) = "/excludeprovider" Then
                                blnInstallDrivers = True
                                strOptionsMessage = strOptionsMessage & "Output file excludes specified filtered Provider: " & blnExcludeProvider & VbCrLf
                            Else
                                Wscript.Echo arrArguments(i) & " is not recognized as a valid input.."
                                intParseCmdLine = CONST_ERROR
                                Exit Function
                            End If
                        Else
                            strSwitchValue = Right(arrArguments(i), Len(arrArguments(i))-(Len(strFlag)+1))
                            Select Case LCase(strFlag)
                                Case "/install"
                                    strPNPFolder = strSwitchValue
                                    blnInstallDrivers = True
                                    strOptionsMessage = strOptionsMessage & "Plug & Play drivers top folder: " & strPNPFolder & VbCrLf
                                Case "/target"
                                    strTargetDrive = strSwitchValue
                                    strOptionsMessage = strOptionsMessage & "Target drive: " & strTargetDrive & VbCrLf
                                Case "/search"
                                    strSearchFile = strSwitchValue
                                    strOptionsMessage = strOptionsMessage & "Search folder: " & strSearchFile & VbCrLf
                                Case "/log"
                                    strLogFile = strSwitchValue
                                    strOptionsMessage = strOptionsMessage & "Output log file name: " & strLogFile & vbCrLf
                                Case "/class"
                                    strClassFilter = strSwitchValue
                                    strOptionsMessage = strOptionsMessage & "Device Class filter: " & strClassFilter & vbCrLf
                                Case "/provider"
                                    strProviderFilter = strSwitchValue
                                    strOptionsMessage = strOptionsMessage & "Device Provider filter: " & strProviderFilter & VbCrLf
                                Case else
                                    Wscript.Echo "Invalid flag " & strFlag & "."
                                    Wscript.Echo "Please check the input and try again."
                                    intParseCmdLine = CONST_ERROR
                                    Exit Function
                            End Select
                        End If
                    Next
                    
                    strOptionsMessage = strOptionsMessage & vbCrLf
                    
                    intParseCmdLine = CONST_PROCEED
                    

                    End Function

                    '********************************************************************
                    '*
                    '* Sub MassStorageHardwareIdsDict()
                    '*
                    '* Purpose: Output the properties of an item from the Win32_PnPEntity
                    '* collection as well as associated Enum and Service Registry
                    '* information.
                    '*
                    '* Input: objItem Item from the Win32_PnPEntity collection
                    '* objPnpIdDict PNP ID dictionary (ByRef)
                    '* blnAllHardwareID return all HardwareID (testing only, don't use)
                    '*
                    '* Dependencies: objRegistry WMI StdRegProv object
                    '*
                    '********************************************************************
                    Sub MassStorageHardwareIdsDict(objItem, ByRef objPnpIdDict, blnAllHardwareID)

                    Dim arrHardwareID
                    Dim arrCompatibleIDs
                    Dim i
                    Dim lRC
                    Dim blnMassStorageID
                    Dim blnGenericID

                    'select mass storage controllers
                    blnMassStorageID = blnAllHardwareID
                    objPnpIdDict.RemoveAll

                    'Print("MassStorageHardwareIdsDict: " & strEnumKey & " "& objItem.PNPDeviceID)

                    'HardwareID
                    lRC = g_objRegistry.GetMultiStringValue(HKEY_LOCAL_MACHINE, strEnumKey & objItem.PNPDeviceID, "HardwareID", arrHardwareID)
                    If IsArray(arrHardwareID) Then
                    For i = LBound(arrHardwareID) To UBound(arrHardwareID)
                    If arrHardwareID(i) <> "" Then objPnpIdDict.Add arrHardwareID(i), arrHardwareID(i)
                    'special case nvrd32.inf
                    If UCASE(Left(arrHardwareID(i), 11)) = "SCSI\NVIDIA" Then blnMassStorageID = True
                    If UCASE(Left(arrHardwareID(i), 11)) = "*NVRAIDBUS" Then blnMassStorageID = True
                    If UCASE(Left(arrHardwareID(i), 7)) = "*NVRAID" Then blnMassStorageID = True
                    Next
                    End If
                    'CompatibleIDs
                    lRC = g_objRegistry.GetMultiStringValue(HKEY_LOCAL_MACHINE, strEnumKey & objItem.PNPDeviceID, "CompatibleIDs", arrCompatibleIDs)
                    If IsArray(arrCompatibleIDs) Then
                    For i = LBound(arrCompatibleIDs) To UBound(arrCompatibleIDs)
                    blnGenericID = False
                    If UCASE(Left(arrCompatibleIDs(i),8)) = "PCI\VEN
                    " Then IF Mid(arrCompatibleIDs(i),13,5) <> "&DEV_" Then blnGenericID = True
                    'If UCASE(Left(arrCompatibleIDs(i),7)) = "PCI\CC_" Then blnGenericID = True

                      If not blnGenericID And arrCompatibleIDs(i) <> "" Then
                        If not objPnpIdDict.Exists(arrCompatibleIDs(i)) Then objPnpIdDict.Add arrCompatibleIDs(i), arrCompatibleIDs(i)
                      End If
                    
                      If UCASE(Left(arrCompatibleIDs(i),9)) = "PCI\CC_01" Then blnMassStorageID = True
                      If UCASE(arrCompatibleIDs(i)) = "*PNP0600" Then blnMassStorageID = True
                    Next
                    

                    End If

                    If not blnMassStorageID Then objPnpIdDict.RemoveAll
                    End Sub

                    '********************************************************************
                    '*
                    '* Function AppendLog()
                    '*
                    '* Purpose: Appends a message to the log file
                    '*
                    '* Input: strlInput String writen to log file
                    '*
                    '* Output: strMessage is appended to the log file.
                    '*
                    '********************************************************************
                    Function AppendLog(ByRef strlInput)
                    refLogFile.Writeline strlInput
                    End Function

                    '********************************************************************
                    '*
                    '* Sub Print()
                    '*
                    '* Purpose: Prints a message on screen if blnQuiet = False.
                    '* Prints a message to the log file if strLogFile <> "".
                    '*
                    '* Input: strMessage the string to print
                    '*
                    '* Output: strMessage is printed on screen if blnQuiet = False.
                    '* strMessage is printed to the log file if strLogFile <> "".
                    '*
                    '********************************************************************
                    Sub Print(ByRef strMessage)
                    If Not blnQuiet Then
                    Wscript.Echo strMessage
                    End If
                    If strLogFile <> "" Then
                    AppendLog(strMessage)
                    End If
                    End Sub

                    '********************************************************************
                    '*
                    '* Function IsWinNT()
                    '*
                    '* Purpose: Tests for Windows NT/2000/XP/2003
                    '*
                    '* Dependencies: g_objWshShell WshShell object
                    '*
                    '* Returns: True on Windows NT/2000/XP/2003, False otherwise
                    '*
                    '********************************************************************
                    Function IsWinNT
                    Dim strlOS
                    strlOS = g_objWshShell.Environment("Process").Item("OS")
                    IsWinNT = CBool(strlOS = "Windows_NT")
                    End Function

                    '********************************************************************
                    '*
                    '* Sub ShowUsage()
                    '*
                    '* Purpose: Shows the correct usage to the user.
                    '*
                    '* Input: None
                    '*
                    '* Output: Help messages are displayed on screen.
                    '*
                    '********************************************************************

                    Sub ShowUsage()
                    WScript.Echo "Adjust mass storage controller driver at offline system"
                    WScript.Echo "Fix for some Stop 0x0000007B Errors"
                    WScript.Echo ""
                    WScript.Echo "Enable installed, but disabled mass storage drivers, e.g. msahci.sys"
                    WScript.Echo "Install mass storage drivers, dism.exe is used"
                    WScript.Echo ""
                    WScript.Echo "Usage: cscript Fix_7hdc.vbs [options]"
                    WScript.Echo ""
                    WScript.Echo "Options:"
                    WScript.Echo ""
                    WScript.Echo " /enable enable, installed but disabled MassStorage drivers"
                    WScript.Echo ""
                    WScript.Echo " /target:<drive> target Win7 drive"
                    WScript.Echo ""
                    WScript.Echo " /install:<folder> Path to the folder that will be the top of the Plug"
                    WScript.Echo " & Play folder tree."
                    WScript.Echo " default folder " & strPNPFolder
                    WScript.Echo ""
                    WScript.Echo " /search:<file> search flag file to find target Win7_drive"
                    WScript.Echo " (default: \windows\system32\winload.exe)"
                    WScript.Echo ""
                    WScript.Echo " /restore restore registry system file"
                    WScript.Echo ""
                    WScript.Echo " /log:<file> (Optional) Location of the output file"
                    ' WScript.Echo ""
                    ' WScript.Echo " /class:<class> (Optional) Filter the output by device Clase"
                    ' WScript.Echo ""
                    ' WScript.Echo " /provider:<vendor> (Optional) Filter the output by driver Provider"
                    ' WScript.Echo ""
                    ' Wscript.echo " /excludeclass (Optional) Filtering excludes Class filtered items"
                    ' WScript.Echo " from output. Default filtering in inclusive"
                    ' WScript.Echo " (only the filtered items are output)."
                    ' WScript.Echo ""
                    ' Wscript.echo " /excludeprovider (Optional) Filtering excludes Provider filtered items"
                    ' WScript.Echo " from output. Default filtering in inclusive"
                    ' WScript.Echo " (only the filtered items are output)."
                    WScript.Echo ""
                    Wscript.echo " /q (Optional) Suppresses all data output to the console."
                    WScript.Echo ""
                    WScript.Echo " /? (Optional) Displays this help text."
                    WScript.Echo ""
                    WScript.Echo "Examples:"
                    WScript.Echo "Fix_7hdc.vbs /enable /search"
                    WScript.Echo "Fix_7hdc.vbs /enable /search:\users"
                    WScript.Echo "Fix_7hdc.vbs /enable /install:F:\x86 /search"
                    WScript.Echo "Fix_7hdc.vbs /install:D:\amd64 /target:C:"
                    WScript.Echo "Fix_7hdc.vbs /install /search:\label.txt"
                    WScript.Echo "Fix_7hdc.vbs /restore /target:C:"
                    End Sub

                    '********************************************************************
                    '*
                    '* Sub EnableDrivers()
                    '*
                    '* Purpose: Endable disabled mass storage drivers at offline windows
                    '*
                    '*
                    '* Dependencies: g_objFSO FileSystem object
                    '*
                    '********************************************************************
                    Sub EnableDrivers()
                    Dim blnFoundCDDB
                    Dim strClassKey
                    Dim strRegistyFile
                    Dim strService
                    Dim strDeviceDesc
                    Dim l_objPnpIdDict
                    Dim strControlSet
                    Dim strLoadedEnumKey
                    Dim strLoadedClassKey
                    Dim strLoadedCDDBKey
                    Dim strLoadedServicesKey
                    Dim strLoadedService
                    Dim strLoadedCDDBService
                    Dim strStartService

                    Set l_objPnpIdDict = CreateObject("Scripting.Dictionary")
                    l_objPnpIdDict.CompareMode = DICTIONARY_COMPAREMODE_TEXT

                    strRegistyFile=strTargetDrive & "\windows\system32\config\SYSTEM"
                    Print("")
                    Print ("Enable mode")
                    Print("")
                    g_objFSO.CopyFile strRegistyFile , strRegistyFile & g_objFSO.GetTempName & ".sav", True
                    Print("load registy file " & strRegistyFile)
                    g_objWshShell.Run "reg.exe UNLOAD HKLM\loaded_SYSTEM", &H20000000, True
                    g_objWshShell.Run "reg.exe LOAD HKLM\loaded_SYSTEM " & strQuote & strRegistyFile & strQuote, &H20000000, True

                    lRC = g_objRegistry.GetDwordValue(HKEY_LOCAL_MACHINE, "loaded_SYSTEM\Select", "Current", strControlSet)
                    strControlSet = "ControlSet" & Left("000",3-Len(strControlSet)) & strControlSet
                    strLoadedEnumKey = "loaded_SYSTEM" & strControlSet & "\Enum"
                    strLoadedClassKey = "loaded_SYSTEM" & strControlSet & "\Control\Class"
                    strLoadedCDDBKey = "loaded_SYSTEM" & strControlSet & "\Control\CriticalDeviceDatabase"
                    strLoadedServicesKey = "loaded_SYSTEM" & strControlSet & "\Services"

                    'Print strLoadedEnumKey
                    'Print strLoadedClassKey
                    'Print strLoadedCDDBKey
                    'Print strLoadedServicesKey

                    'Print g_objWshShell.Environment("Process").Item("COMSPEC")
                    'objReg.SetStringValue HKEY_USERS,strKeyPath1,"Wallpaper","C:\WINDOWS\Web\Wallpaper\kiosk.bmp"
                    'objReg.SetStringValue HKEY_USERS,strKeyPath1,"OriginalWallpaper","C:\WINDOWS\Web\Wallpaper\kiosk.bmp"
                    'objReg.SetStringValue HKEY_USERS,strKeyPath2,"Background","26 98 4"

                    Print("")
                    Print("========================================================")
                    Print(" Enable existing Mass Storage drivers in system")
                    Print("========================================================")

                    Set colItems = g_objWMIService.ExecQuery("SELECT * FROM Win32_PnPEntity", "WQL", _
                    wbemFlagReturnImmediately + wbemFlagForwardOnly)
                    For Each objItem In colItems
                    MassStorageHardwareIdsDict objItem, l_objPnpIdDict, False

                    If l_objPnpIdDict.Count > 0 Then 
                      lRC = g_objRegistry.GetStringValue(HKEY_LOCAL_MACHINE, strEnumKey & objItem.PNPDeviceID, "DeviceDesc", strDeviceDesc)
                      lRC = g_objRegistry.GetStringValue(HKEY_LOCAL_MACHINE, strEnumKey & objItem.PNPDeviceID, "Service", strService)
                      lRC = g_objRegistry.GetStringValue(HKEY_LOCAL_MACHINE, strLoadedEnumKey & objItem.PNPDeviceID, "Service", strLoadedService)
                      lRC = g_objRegistry.GetStringValue(HKEY_LOCAL_MACHINE, strEnumKey & objItem.PNPDeviceID, "Class", strClass)
                      Print("")
                      Print(objItem.PNPDeviceID)
                      'Print(strDeviceDesc & " ")
                      'Print(strEnumKey & "  " & strService & "  " & strClass)
                      'Print(strLoadedEnumKey & "  " & strLoadedService)
                    End If
                    
                    blnFoundCDDB = False
                    For Each Key In l_objPnpIdDict.Keys
                      'Print(Key & "   " &   strLoadedCDDBKey & Replace(Key,"\","#") )
                      lRC = g_objRegistry.GetStringValue(HKEY_LOCAL_MACHINE, strLoadedCDDBKey & Replace(Key,"\","#"), "Service", strLoadedCDDBService)
                      If not blnFoundCDDB And not IsNull(strLoadedCDDBService) Then
                        'Print("offline Registry  CDDB: " & Key & "  " & strLoadedCDDBService)
                        lRC = g_objRegistry.GetDWordValue(HKEY_LOCAL_MACHINE, strLoadedServicesKey & strLoadedCDDBService, "Start", strStartService)
                        If Not IsNull(strStartService) Then 
                          Print("offline Registry  CDDB: " & Key & "  " & strLoadedCDDBService)
                          If strStartService = 0 Then
                            Print("Start already " & strStartService & "  no change")
                            blnFoundCDDB = True
                          Else
                            Print(strLoadedServicesKey & strLoadedCDDBService)
                            Print("Start set " & strStartService & "  change to 0")
                            lRC = g_objRegistry.SetDWordValue(HKEY_LOCAL_MACHINE, strLoadedServicesKey & strLoadedCDDBService,"Start",&H0)
                            if lRC <> 0 then Print("Error: setting failed. result: " & lRC )
                            blnFoundCDDB = True
                          End If
                        End If
                      End If
                      
                      If not blnFoundCDDB Then
                    
                        '''''''''blnFoundCDDB = True
                      End If
                    Next
                    

                    Next

                    Print("")
                    Print("unload registy file " & strRegistyFile)
                    g_objWshShell.Run "reg.exe UNLOAD HKLM\loaded_SYSTEM", &H20000000, True
                    End Sub 'EnableDrivers()
                    '********************************************************************

                    '********************************************************************
                    '*
                    '* Sub InstallDrivers()
                    '*
                    '* Purpose: Install mass storage drivers at offline windows
                    '*
                    '*
                    '* Dependencies: g_objFSO FileSystem object
                    '*
                    '********************************************************************
                    Sub InstallDrivers()
                    Dim m
                    Dim blnFoung_objDriverFolderDictFile
                    Dim strService
                    Dim strDismRun
                    Dim l_objPnpIdDict
                    Set l_objPnpIdDict = CreateObject("Scripting.Dictionary")
                    l_objPnpIdDict.CompareMode = DICTIONARY_COMPAREMODE_TEXT

                    Print("Sub: Install drivers: " & strPNPFolder)

                    Print("")
                    Print("==========================================")
                    Print(Now & " : parse inf files")
                    Print("==========================================")

                    MakeInfFileList g_objFSO.GetFolder(strPNPFolder)
                    GetHWID

                    Print("")
                    Print("========================================================")
                    Print(" Mass Storage Plug and Play Devices in system")
                    Print("========================================================")

                    Set colItems = g_objWMIService.ExecQuery("SELECT * FROM Win32_PnPEntity", "WQL", _
                    wbemFlagReturnImmediately + wbemFlagForwardOnly)
                    For Each objItem In colItems
                    'strPNPDeviceID = objItem.PNPDeviceID
                    'lRC = g_objRegistry.GetStringValue(HKEY_LOCAL_MACHINE, strEnumKey & objItem.PNPDeviceID, "Driver", strDriver)
                    'lRC = g_objRegistry.GetStringValue(HKEY_LOCAL_MACHINE, strClassKey & strDriver, "ProviderName", strProviderName)
                    'lRC = g_objRegistry.GetStringValue(HKEY_LOCAL_MACHINE, strEnumKey & objItem.PNPDeviceID, "Class", strClass)

                    blnFoung_objDriverFolderDictFile = False
                    MassStorageHardwareIdsDict objItem, l_objPnpIdDict, False
                    
                    For Each Key In l_objPnpIdDict.Keys
                      If dHwid.Exists(Key) Then
                        Print (Key & Space(abs(45 - Len(Key))) & dHwid.Item(Key))
                      Else
                        Print(Key)
                      End If
                      If not blnFoung_objDriverFolderDictFile And dHwid.Exists(Key) Then
                        'lRC = g_objRegistry.GetStringValue(HKEY_LOCAL_MACHINE, strEnumKey & objItem.PNPDeviceID, "Driver", strDriver)
                        lRC = g_objRegistry.GetStringValue(HKEY_LOCAL_MACHINE, strEnumKey & objItem.PNPDeviceID, "Service", strService)
                        'lRC = g_objRegistry.GetStringValue(HKEY_LOCAL_MACHINE, strClassKey & strDriver, "ProviderName", strProviderName)
                        lRC = g_objRegistry.GetStringValue(HKEY_LOCAL_MACHINE, strEnumKey & objItem.PNPDeviceID, "Class", strClass)
                        Print("current service: " & strService & "  " & strClass)
                        blnFoung_objDriverFolderDictFile = True
                        g_objInfDismFileDict.Add Key, dHwid.Item(Key)
                      End If
                    Next
                    

                    Next

                    Print("")
                    Print("==========================================")
                    Print("Unique inf files relating Mass Storage IDs")
                    Print("==========================================")

                    m = &H20000000
                    If blnGuiMode Then m = 1

                    For Each Key in g_objInfDismFileDict.Keys
                    Print(g_objInfDismFileDict.Item(Key) & " " & Key)
                    'dism continues if log file writing fails
                    strDismRun = "dism.exe /Image:" & strTargetDrive _
                    & "\ /Add-Driver /Driver:" & strQuote & g_objInfDismFileDict.Item(Key) & strQuote _
                    & " /LogLevel:4 /LogPath:" _
                    & g_objFSO.GetParentFolderName(WScript.ScriptFullName) & "\dism.offline.log"
                    Print(strDismRun)
                    g_objWshShell.Run strDismRun, m, True
                    Print("")
                    Next

                    If g_objFSO.FileExists(strTargetDrive & "\windows\inf\setupapi.offline.log") Then Print("compare setup log file " & strTargetDrive & "\windows\inf\setupapi.offline.log")
                    End Sub
                    '********************************************************************

                    '======================================================================================
                    'based on ListHWID.vbs by RogueSpear http://forum.driverpacks.net/viewtopic.php?id=3148
                    'edited by cdob
                    '
                    '********************************************************************
                    '*
                    '* Sub MakeInfFileList()
                    '*
                    '* Purpose: Recurses the subfolders of the a folder
                    '* to find folder containing .inf files
                    '

                    '* Input: objToplFolder Folder object to recurse
                    '*
                    '* Dependencies: g_objFSO FileSystem object
                    '*
                    '* Restrictions: list created by HardwareID
                    '* last read files goes in, double driver conflicts not resolved
                    '* todo: use ranking compare http://support.microsoft.com/kb/279112
                    '*
                    '********************************************************************
                    Sub MakeInfFileList(objToplFolder)
                    Dim Subfolder, a, aFiles, strFile
                    For Each Subfolder in objToplFolder.SubFolders
                    Set a = g_objFSO.GetFolder(Subfolder.Path)
                    Set aFiles = a.Files
                    For Each strFile In aFiles
                    If LCase(Right(strFile,4)) = ".inf" Then
                    inf_count = inf_count + 1
                    g_objDriverFolderDict.Add inf_count, strFile
                    End If
                    Next
                    MakeInfFileList Subfolder
                    Next
                    End Sub

                    Sub GetHWID
                    Dim regEx, Match, Matches, strFileName, strFile, objFile, line, strHardwareID, strCSV, z
                    z = 0

                    Set regEx = New RegExp
                    regEx.IgnoreCase = True
                    'regEx.Pattern = "[A-Z0-9]{2,}(?!PARAMS)[A-Z0-9_]{2,}[A-F0-9]{2,}(&[A-Z]{2,}[A-F0-9]{2,}(&[A-Z]{2,}[A-F0-9]{2,}(&[A-Z]{2,}[A-F0-9]{2,})?)?)?"
                    regEx.Pattern = ",\s*?[A-Z0-9]{2,}[A-Z0-9
                    ]{2,}[A-F0-9]{2,}(&[A-Z]{2,}[A-F0-9]{2,}(&[A-Z]{2,}[A-F0-9]{2,}(&[A-Z]{2,}_[A-F0-9]{2,})?)?)?"

                    For each strFileName in g_objDriverFolderDict.Items
                    'Print("GetHWID: Set strFile " & strFileName)
                    'unicode .inf file
                    Set strFile = g_objFSO.OpenTextFile(strFileName, 1, False, -2)

                    Do While strFile.AtEndOfStream = False
                      line = strFile.ReadLine
                      If Left(line, 1) <> ";" Then
                        Set Matches = regEx.Execute(line)
                        For Each Match In Matches
                          'On Error Resume Next
                          strHardwareID = Trim(Right(Ucase(Match.Value),Len(Match.Value)-1))
                          If dHwid.Exists(strHardwareID) Then
                            z = z + 1
                            dHwid.Item(strHardwareID) = strFileName
                          Else
                            dHwid.Add strHardwareID, strFileName
                          End If
                        Next
                      End If
                    Loop
                    strFile.Close()
                    

                    Next

                    Print(Now & " : Found " & dHwid.Count & " HWIDs")
                    Print(Now & " : Found " & z & " duplicate HWIDs")
                    End Sub

                    '======================================================================================
                    'Sort directory?
                    'http://support.microsoft.com/kb/246067/

                    1 Reply Last reply Reply Quote 0
                    • mlnewsM
                      mlnews
                      last edited by

                      Wow. So.... VBScript, that's still a thing.

                      MattSpellerM 1 Reply Last reply Reply Quote 1
                      • MattSpellerM
                        MattSpeller @mlnews
                        last edited by

                        @mlnews I downloaded it in a VM, scanned it with 3 different tools, opened it and scanned through it with mark1 eyeball, then cautiously tested it on a fully backed up system. ❤ VBScript.

                        1 Reply Last reply Reply Quote 0
                        • 1 / 1
                        • First post
                          Last post