Iori
По личным причинам выкладка затянулась. Не сказать, что особо отлаживал (знаю, куда копать, но со временем не очень). Выложу, что есть.
[cut="WinCDEmu.vbs"]
Код: Выделить всё
'•••••••••••••••••••••••• VBS •••••••••••••••••••••••
' Смонтировать образ диска под курсором с расширением
' ISO, CUE, NRG, MDS/MDF, CCD, IMG c помощью WinCDEmu
'
' Условие: расположение файлов программы как в архиве
'
' Параметры: 1) <отмонтировать всё/монтировать: 0/1>
' 2) <запуск драйвера при старте ОС: 0/1>
' 3) <свободная буква c начала/конца: 0/1>
' 4) %V (либо полный путь к файлу-образу)
'
' Примеры: 0 0 | 1 0 0 %V
'
Option Explicit
'••••••• Путь к папке с утилитой и драйверами •••••••
Const Path = "%COMMANDER_PATH%\Utils\WinCDEmu"
'••••••••••••••••••••••••••••••• Автор: Flasher © •••
Dim A, T, Title, WSH, FSO, S1, DN, P, X64, Dr, Program, F, S, S2, WMI, Mode, Q, M
Title = " Монтирование образа на виртуальный диск "
Set A = WScript.Arguments : T = 1 : If A.Count = 0 Then T = 0 : Msg(25)
If A(0) = 1 And A.Count <> 4 Then T = 0 : Msg(26)
If A(0) = 0 Then Title = " Отключение годных виртуальных дисков "
S1 = "е" : Set WSH = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
If A(0) = 1 Then If InStr("|ISO|CUE|NRG|MDS|MDF|CCD|IMG|",_
"|" & UCase(FSO.GetExtensionName(A(3))) & "|") = 0 Then T = 0 : Msg(27)
If WSH.Environment("System")("PROCESSOR_ARCHITECTURE") <> "x86" Then X64 = "\64"
DN = "BazisPortableCDBus" : P = WSH.ExpandEnvironmentStrings(Path)
Dr = FSO.BuildPath(P & X64, DN & ".sys")
Program = FSO.BuildPath(P, "PortableWinCDEmu.exe")
For Each F in Array(Program, Dr)
If Not FSO.FileExists(F) Then S = S & vbCr & F
Next : If InStrRev(S, vbCr) > 1 Then S1 = "ю" : S2 = "ы:"
If Not IsEmpty(S) Then T = 0 : Msg(28)
WMI = "winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2"
If A(1) Then Mode = "Automatic" Else Mode = "Manual"
Set Q = GetObject(WMI).ExecQuery("Select * from Win32_SystemDriver WHERE Name='"&DN&"'")
If Q.Count Then
For Each Dr in Q
If Dr.Status = "Degraded" Then Msg(16)
If Dr.Started = False Then Dr.StartService
Next : Set Q = Nothing
Else
Dim D, SDriver : D = Dr
Set SDriver = GetObject(WMI & ":Win32_SystemDriver")
Dr = SDriver.Create(DN, DN, D, 2, 0, Mode)
If Dr = 23 Then
WSH.Run """" & Program & """ /uninstall", 0, True
SDriver.Delete(DN)
Dr = SDriver.Create(DN, DN, D, 2, 0, Mode) : Msg(Dr)
Else Msg(Dr) End If
If (Dr = 0 Or Dr = 6 Or Dr = 14 Or Dr = 24) And Dr <> 10 Then
With GetObject(WMI & ":Win32_SystemDriver.Name='" & DN & "'")
If .StartMode = "Disabled" Then .ChangeStartMode = Mode
Dr = .StartService : Msg(Dr)
End With
End If
End If
If A(0) Then
D = "DEFGHIJKLMNOPQRSTUVWXYZ"
For Each Dr In FSO.Drives : D = Replace(D, Dr.DriveLetter, "") : Next
If A(2) Then Dr = " " & Right(D, 1) & ":" Else Dr = " " & Left(D, 1) & ":"
WSH.Run """" & Program & """ """ & A(3) & """" & Dr & " /wait", 0, True
WSH.Popup "Образ под курсором смонтирован на диск " & Dr & " !", 2, Title
Else
WSH.Run """" & Program & """ /unmountall", 0, True
WSH.Popup "Виртуальные диски отключены!", 2, Title
End If : Quit
Sub Msg(D)
Select Case D
Case 1 M = "Запрос на создание службы драйвера не поддерживается системой."
Case 2 M = "Активный пользователь не имеет необходимых прав доступа!"
Case 6 M = "Служба драйвера не была запущена."
Case 7 M = "Служба драйвера не ответила своевременно на начало запроса."
Case 8 M = "Неизвестная ошибка при запуске службы драйвера."
Case 11 M = "База данных заблокирована для добавления новых служб."
Case 12 M = "Зависимости, на которые опирается драйвер, были удалены из системы."
Case 13 M = "Драйверу не удается найти зависимую службу."
Case 14 M = "Драйвер был отключен от системы."
Case 16 M = "Драйвер удаляется из системы. Требуется её перезапуск!"
Case 17 M = "Нет потока выполнения для службы драйвера."
Case 22 M = "Учетная запись недействительна или не имеет прав на запуск службы."
Case 24 M = "В настоящий момент служба приостановлена."
Case 25 M = "Укажите требуемые параметры!"
Case 26 M = "Необходимо указать 4 параметра!"
Case 27 M = "Данный тип файла не поддерживается!"
Case 28 M = "Отсутству" & S1 & "т файл" & S2 & S
End Select : If M <> "" Then MsgBox M, 4144, Title : Quit
End Sub : Sub Quit : If T Then WSH.Run "wmic exit", 0 End If : WScript.Quit : End Sub
[/cut]
Скачать архив WinCDEmu
autorun.cfg писал(а):# Команды при завершении процесса ТС:
Pragma AutorunFinalizeSection
ShellExec /SW_HIDE /WAIT '%COMMANDER_PATH%\Utils\WinCDEmu\PortableWinCDEmu.exe' /unmountall
ShellExec /SW_HIDE /WAIT '%COMMANDER_PATH%\Utils\WinCDEmu\PortableWinCDEmu.exe' /uninstall
ShellExec /SW_HIDE reg 'delete HKLM\SYSTEM\CurrentControlSet\Services\BazisPortableCDBus /f'
# Если для драйвера будет открыт дескриптор др. процессом, то след. команда только пометит драйвер на удаление:
#ShellExec /SW_HIDE %comspec% '/c sc stop BazisPortableCDBus && sc delete BazisPortableCDBus'
[cut="OSFMount.vbs"]
Код: Выделить всё
'•••••••••••••••••••••••••••••••• VBS •••••••••••••••••••••••••••••••••
' Назначение: Смонтировать образ диска под курсором на виртуальный диск
' Отмонтировать все подключённые программой виртуальные диски
'
' Поддерживаемые форматы:
' 00n, AFD, AFF, AFM, BIN, DD, E01, IMG, ISO, NRG, S01, SDI, VHD, VMDK
'
' Условие: в папке программы должны находиться OSFMount\ и OSFMount64\,
' в каждой из которых OSFMount.com, OSFMount.exe, OSFMount.sys
'
' Параметры: 1) <отмонтировать всё/монтировать: 0/1>
' 2) <свободная буква c начала/конца: 0/1>
' 3) %V (либо полный путь к файлу-образу)
'
' Примеры: 0 | 1 1 %V
'
Option Explicit
'•••••••••••••••••••••• Путь к папке с OSFMount •••••••••••••••••••••••
Const Path = "%COMMANDER_PATH%\Utils\OSFMount"
'••••••••••••••••••••••••••••••••••••••••••••••••• Автор: Flasher © •••
Dim A, Title, WSH, FSO, S1, SF, DN, P, Dr, OCom, F, S, S2, WMI, Mode, M
Title = " Монтирование образа на виртуальный диск "
Set A = WScript.Arguments : If A.Count = 0 Then Msg(1)
If A(0) = 1 And A.Count <> 3 Then Msg(2)
If A(0) = 0 Then Title = " Отключение годных виртуальных дисков "
S1 = "е" : Set WSH = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
If A(0) = 1 Then _
If InStr("|00N|AFD|AFF|AFM|BIN|DD|E01|IMG|ISO|NRG|S01|SDI|VHD|VMDK|",_
"|" & UCase(FSO.GetExtensionName(A(2))) & "|") = 0 Then Msg(3)
If WSH.Environment("System")("PROCESSOR_ARCHITECTURE") <> "x86" Then SF = 64
P = FSO.BuildPath(WSH.ExpandEnvironmentStrings(Path), "OSFMount" & SF) & ""
DN = "OSFMount" : OCom = P & DN & ".com"
For Each F in Array(P & DN & ".exe", OCom, P & DN & ".sys")
If Not FSO.FileExists(F) Then S = S & vbCr & F
Next : If InStrRev(S, vbCr) > 1 Then S1 = "ю" : S2 = "ы:"
If Not IsEmpty(S) Then Msg(4)
If A(0) Then
Dim D : D = "DEFGHIJKLMNOPQRSTUVWXYZ"
For Each Dr In FSO.Drives : D = Replace(D, Dr.DriveLetter, "") : Next
If A(1) Then Dr = " " & Right(D, 1) & ":" Else Dr = " " & Left(D, 1) & ":"
WSH.Run """" & OCom & """ -a -t file -f """ & A(2) & """ -m " & Dr, 0, True
WSH.Popup "Образ под курсором смонтирован на диск " & Dr & " !", 2, Title
Else
For Each Dr In FSO.Drives
If WSH.Run("""" & Ocom & """ -l -m " & Dr, 0, True) = 0 Then _
WSH.Run """" & Ocom & """ -D -m " & Dr, 0, True
Next : WSH.Popup "Виртуальные диски отключены!", 2, Title
End If
Sub Msg(D)
Select Case D
Case 1 M = "Укажите требуемые параметры!"
Case 2 M = "Необходимо указать 3 параметра!"
Case 3 M = "Данный тип файла не поддерживается!"
Case 4 M = "Отсутству" & S1 & "т файл" & S2 & S
End Select : MsgBox M, 4144, Title : WScript.Quit
End Sub
[/cut]
autorun.cfg писал(а):# Команды при завершении процесса ТС:
Pragma AutorunFinalizeSection
ShellExec /WAIT '%COMMANDER_PATH%\Scripts\OSFMount.vbs' 0
ShellExec /SW_HIDE reg 'delete HKLM\SYSTEM\CurrentControlSet\Services\OSFMount /f'
# Если для драйвера будет открыт дескриптор др. процессом, то след. команда только пометит драйвер на удаление:
#ShellExec /SW_HIDE %comspec% '/c sc stop OSFMount && sc delete OSFMount'