[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет 2 месяца
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
Ограничения, наложенные системой windows на removable (съемный) диск , весьма неприятны, такой диск может иметь только один раздел (остальные просто не видятся системой), хотя linux и подобные системы этим не страдают.
Особенно неприятно, что сейчас производятся флешки большого объема, а часто требуется fat раздел (efi,linux и т.п.), но ограничения на fat (максимальный объем раздела 32 Gb, файл 2 Gb) кажутся просто издевательством.
Наиболее часто для решения этой проблемы используется Hitachi Microdrive, драйвер, позволяющий увидеть флешку как fixed (локальный) диск, но этот драйвер приходится ставить отдельно для конкретной флешки, что не слишком удобно.
Представленный набор утилит лишен этих недостатков.
RemAsFixed.cmd - включает режим "все флешки - fixed диски"
FixedAsRem.cmd - включает режим "все fixed диски - removable диски" НЕ ИСПОЛЬЗУЙТЕ ЭТОТ РЕЖИМ НА РАБОЧЕЙ СИСТЕМЕ , ОН МОЖЕТ ПРИВЕСТИ ЕЕ К КРАХУ !!!
Default.cmd - включает стандартный режим и удаляет драйвер.
Утилита работает только в текущей ОС и не изменяет саму флешку.
Утилита не требует инсталляции, работает на лету и не требует перезагрузки системы.
Ограничение - usb диски при переключении режима не должны использоваться (быть открытыми в других приложениях), иначе придется выдернуть и заново вставить носитель.
Буквы устройств могут измениться.
Внимание !!!
Утилиты нельзя запускать с флэшки, их нужно куда либо скопировать и запускать уже оттуда.
Внимание !
При использовании на рабочей системе , дабы ее не грохнуть :
RemAsFixed.cmd - если есть пустой картридер , создающей буквы-пустышки , обязательно выполнить Default.cmd перед выключением или перезагрузкой.
FixedAsRem.cmd - обязательно выполнить Default.cmd перед выключением или перезагрузкой.
Общие правила - попользовался, создал, например, многораздельную флэшку, выполни Default.cmd .
Если уж система грохнулась из-за несоблюдения этих правил тоже не страшно, F8 - загрузить последнюю рабочую конфигурацию. az

Добавление драйвера diskmod.sys в сборки

Загрузить \Windows\System32\config\SYSTEM сборки как HKEY_LOCAL_MACHINE\WB-system (Для xp\2003 \I386\System32\SETUPREG.HIV)
Выполнить reg файл
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\WB-system\ControlSet001\services\diskmod]
"Type"=dword:00000001
"Start"=dword:00000000
"ErrorControl"=dword:00000001
"Tag"=dword:00000004
"ImagePath"=hex(2):73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,44,00,\
  52,00,49,00,56,00,45,00,52,00,53,00,5c,00,64,00,69,00,73,00,6b,00,6d,00,6f,\
  00,64,00,2e,00,73,00,79,00,73,00,00,00
"DisplayName"="DiskMod Filter Driver"
"Group"="SCSI Class"
[HKEY_LOCAL_MACHINE\WB-system\ControlSet001\services\diskmod\Parameters]
"Paging"=dword:00000002
"Removable"=dword:00000000
[HKEY_LOCAL_MACHINE\WB-system\ControlSet001\Control\Class\{4D36E967-E325-11CE-BFC1-08002BE10318}]
"LowerFilters"=hex(7):64,00,69,00,73,00,6b,00,6d,00,6f,00,64,00,00,00,00,00
Выгрузить HKEY_LOCAL_MACHINE\WB-system
Почистить мусор, удалив все файлы \Windows\System32\config\SYSTEM.* , кроме файла без расширения (Для xp\2003 аналогично \I386\System32\SETUPREG.HIV.* )
Скопировать нужную версию diskmod.sys в каталог \system32\drivers
Для xp\2003 добавить в TXTSETUP.SIF
[ScsiClass.Load]
diskmod=diskmod.sys
Драйвер добавлен. az az az
Вложение


Последний раз редактировалось: nikzzzz (2016-11-07 21:14), всего редактировалось 18 раз(а)

[Цитировать]

    sergeysvirid
  • 104
  • Стаж: 9 лет 4 месяца
  • Сообщений: 2498
  • Репутация:127

    [+] [-]
  • Откуда: 65 регион (GMT+11)
nikzzzz,
Понял, спасибо!

[Цитировать]

    krasgosha
  • 817
  • Стаж: 8 лет 11 месяцев
  • Сообщений: 65
  • Репутация:-20

    [+] [-]
Serg.......
Синий экран и все.

[Цитировать]

    sergeysvirid
  • 104
  • Стаж: 9 лет 4 месяца
  • Сообщений: 2498
  • Репутация:127

    [+] [-]
  • Откуда: 65 регион (GMT+11)
31288
Serg.......
Синий экран и все.
Вы к кому обращаетесь, и про что вообще речь???
Serg....... если это обращение ко мне, так что сил не хватило букв допечатать? Да и вообще зачем печатать от руки ник, когда можно просто жмякнуть по нику (к кому обращаетесь) и он автоматически вставится в поле сообщения.
И причём здесь "синий экран"? У Вас синий экран? А причём тогда здесь я и тем более в этой теме?

[Цитировать]

    Adler
  • 1708
  • Стаж: 8 лет 6 месяцев
  • Сообщений: 1196
  • Репутация:65

    [+] [-]
  • Откуда: Луганск
Ну если синий экран, то вероятно, что до
28577обязательно выполнить Default.cmd перед выключением или перезагрузкой.
не дочитали...

[Цитировать]

    Adler
  • 1708
  • Стаж: 8 лет 6 месяцев
  • Сообщений: 1196
  • Репутация:65

    [+] [-]
  • Откуда: Луганск
Вдруг кому пригодится. Diskmod с валидной подписью Paraglider Software до 04.02.2019.
Вложение

С валидной подписью от Paraglider Software

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет 2 месяца
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
Обновил утилиту, исправлен баг.

[Цитировать]

    sergeysvirid
  • 104
  • Стаж: 9 лет 4 месяца
  • Сообщений: 2498
  • Репутация:127

    [+] [-]
  • Откуда: 65 регион (GMT+11)
31375Обновил утилиту, исправлен баг.
Приветствую! aa
Вот который уже день пытаюсь запустить diskmod у себя. Как только уже не пробовал - не получается, идёт циклическая (бесконечная) обработка команд в скрипте restart.cmd
Подробнее:
Закинул в семёрочный boot.wim
\Windows\System32\drivers\diskmod.sys
\Windows\System32\devcon.exe
и
\Windows\System32\diskmod_inst.reg
\Windows\System32\diskmod_restart.cmd
Далее в своём StartNet.cmd прописал запуск:
start /b /wait Reg.exe import diskmod_inst.reg
start /b /wait diskmod_restart.cmd
...при таком раскладе всё время после загрузки PE получается "зависон".
Я решил посмотреть, в каком месте происходит зависон, (убрав в StartNet.cmd ключик /b и прописав в скрипте @echo on)
Оказывается, что diskmod_inst.reg все операции обрабатываются успешно и далее запускается diskmod_restart.cmd на котором и идёт бесконечная, зациклиная обработка команд.

содержимое скрипта diskmod_restart.cmd

@echo on
setlocal enabledelayedexpansion
for /f "delims=:" %%a in ('devcon.exe find usbstor\* ^| find /i "usbstor\"') do (
for /f "tokens=3 delims= " %%b in ('reg.exe query "HKLM\SYSTEM\CurrentControlSet\services\disk\Enum" /f "%%a" ^| find /i "%%a"') do (
call :convert "%%b"
for /f "tokens=1 delims= " %%c in ('reg.exe query "HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices" /f "\??\Volume" ^| find /i "!hex!"') do (
>nul fsutil fsinfo volumeinfo %%c\ && devcon.exe restart "@%%a"
)
)
)
goto :eof
:convert
set "str=%~1"
set "hex="
set "str=%str:&=џ%"
set "str=%str:\=#%"
set "str=%str:/=#%"
:_1
if not defined str goto :eof
set s=%str:~0,1%
set str=%str:~1%
if "%s%"==" " set "hex=%hex%2000"
if "%s%"=="!" set "hex=%hex%2100"
if "%s%"=="""" set "hex=%hex%2200"
if "%s%"=="#" set "hex=%hex%2300"
if "%s%"=="$" set "hex=%hex%2400"
if "%s%"=="%%" set "hex=%hex%2500"
if "%s%"=="џ" set "hex=%hex%2600"
if "%s%"=="'" set "hex=%hex%2700"
if "%s%"=="(" set "hex=%hex%2800"
if "%s%"==")" set "hex=%hex%2900"
if "%s%"=="*" set "hex=%hex%2A00"
if "%s%"=="+" set "hex=%hex%2B00"
if "%s%"=="," set "hex=%hex%2C00"
if "%s%"=="-" set "hex=%hex%2D00"
if "%s%"=="." set "hex=%hex%2E00"
if "%s%"=="/" set "hex=%hex%2F00"
if "%s%"=="0" set "hex=%hex%3000"
if "%s%"=="1" set "hex=%hex%3100"
if "%s%"=="2" set "hex=%hex%3200"
if "%s%"=="3" set "hex=%hex%3300"
if "%s%"=="4" set "hex=%hex%3400"
if "%s%"=="5" set "hex=%hex%3500"
if "%s%"=="6" set "hex=%hex%3600"
if "%s%"=="7" set "hex=%hex%3700"
if "%s%"=="8" set "hex=%hex%3800"
if "%s%"=="9" set "hex=%hex%3900"
if "%s%"==":" set "hex=%hex%3A00"
if "%s%"==";" set "hex=%hex%3B00"
if "%s%"=="<" set "hex=%hex%3C00"
if "%s%"=="=" set "hex=%hex%3D00"
if "%s%"==">" set "hex=%hex%3E00"
if "%s%"=="?" set "hex=%hex%3F00"
if "%s%"=="@" set "hex=%hex%4000"
if "%s%"=="A" set "hex=%hex%4100"
if "%s%"=="B" set "hex=%hex%4200"
if "%s%"=="C" set "hex=%hex%4300"
if "%s%"=="D" set "hex=%hex%4400"
if "%s%"=="E" set "hex=%hex%4500"
if "%s%"=="F" set "hex=%hex%4600"
if "%s%"=="G" set "hex=%hex%4700"
if "%s%"=="H" set "hex=%hex%4800"
if "%s%"=="I" set "hex=%hex%4900"
if "%s%"=="J" set "hex=%hex%4A00"
if "%s%"=="K" set "hex=%hex%4B00"
if "%s%"=="L" set "hex=%hex%4C00"
if "%s%"=="M" set "hex=%hex%4D00"
if "%s%"=="N" set "hex=%hex%4E00"
if "%s%"=="O" set "hex=%hex%4F00"
if "%s%"=="P" set "hex=%hex%5000"
if "%s%"=="Q" set "hex=%hex%5100"
if "%s%"=="R" set "hex=%hex%5200"
if "%s%"=="S" set "hex=%hex%5300"
if "%s%"=="T" set "hex=%hex%5400"
if "%s%"=="U" set "hex=%hex%5500"
if "%s%"=="V" set "hex=%hex%5600"
if "%s%"=="W" set "hex=%hex%5700"
if "%s%"=="X" set "hex=%hex%5800"
if "%s%"=="Y" set "hex=%hex%5900"
if "%s%"=="Z" set "hex=%hex%5A00"
if "%s%"=="[" set "hex=%hex%5B00"
if "%s%"=="\" set "hex=%hex%5C00"
if "%s%"=="]" set "hex=%hex%5D00"
if "%s%"=="^" set "hex=%hex%5E00"
if "%s%"=="_" set "hex=%hex%5F00"
if "%s%"=="`" set "hex=%hex%6000"
if "%s%"=="a" set "hex=%hex%6100"
if "%s%"=="b" set "hex=%hex%6200"
if "%s%"=="c" set "hex=%hex%6300"
if "%s%"=="d" set "hex=%hex%6400"
if "%s%"=="e" set "hex=%hex%6500"
if "%s%"=="f" set "hex=%hex%6600"
if "%s%"=="g" set "hex=%hex%6700"
if "%s%"=="h" set "hex=%hex%6800"
if "%s%"=="i" set "hex=%hex%6900"
if "%s%"=="j" set "hex=%hex%6A00"
if "%s%"=="k" set "hex=%hex%6B00"
if "%s%"=="l" set "hex=%hex%6C00"
if "%s%"=="m" set "hex=%hex%6D00"
if "%s%"=="n" set "hex=%hex%6E00"
if "%s%"=="o" set "hex=%hex%6F00"
if "%s%"=="p" set "hex=%hex%7000"
if "%s%"=="q" set "hex=%hex%7100"
if "%s%"=="r" set "hex=%hex%7200"
if "%s%"=="s" set "hex=%hex%7300"
if "%s%"=="t" set "hex=%hex%7400"
if "%s%"=="u" set "hex=%hex%7500"
if "%s%"=="v" set "hex=%hex%7600"
if "%s%"=="w" set "hex=%hex%7700"
if "%s%"=="x" set "hex=%hex%7800"
if "%s%"=="y" set "hex=%hex%7900"
if "%s%"=="z" set "hex=%hex%7A00"
if "%s%"=="{" set "hex=%hex%7B00"
if "%s%"=="|" set "hex=%hex%7C00"
if "%s%"=="}" set "hex=%hex%7D00"
if "%s%"=="~" set "hex=%hex%7E00"
if "%s%"=="" set "hex=%hex%7F00"
goto :_1
другой (обновлённый) вариант restart.cmd пробовал - та же самая картина

(обновлённый) вариант restart.cmd

@echo off
setlocal enabledelayedexpansion
for /f "delims=:" %%a in ('devcon.exe find usbstor\* ^| find /i "usbstor\"') do (
for /f "tokens=3 delims= " %%b in ('reg.exe query "HKLM\SYSTEM\CurrentControlSet\services\disk\Enum" /f "%%a" ^| find /i "%%a"') do (
call :convert "%%b"
for /f "tokens=1 delims= " %%c in ('reg.exe query "HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices" /f "\??\Volume" ^| find /i "!hex!"') do (
>nul fsutil fsinfo volumeinfo %%c\ && devcon.exe restart "@%%a"
)
)
)
exit /b
:convert
set "str=%~1"
set "hex="
set "str=%str:&=џ%"
set "str=%str:\=#%"
set "str=%str:/=#%"
:_1
if not defined str exit /b
set s=%str:~0,1%
set str=%str:~1%
if "%s%"=="_" set "hex=%hex%5F00" & goto :_1
if "%s%"=="#" set "hex=%hex%2300" & goto :_1
if "%s%"=="0" set "hex=%hex%3000" & goto :_1
if "%s%"=="1" set "hex=%hex%3100" & goto :_1
if "%s%"=="2" set "hex=%hex%3200" & goto :_1
if "%s%"=="3" set "hex=%hex%3300" & goto :_1
if "%s%"=="4" set "hex=%hex%3400" & goto :_1
if "%s%"=="5" set "hex=%hex%3500" & goto :_1
if "%s%"=="6" set "hex=%hex%3600" & goto :_1
if "%s%"=="7" set "hex=%hex%3700" & goto :_1
if "%s%"=="8" set "hex=%hex%3800" & goto :_1
if "%s%"=="9" set "hex=%hex%3900" & goto :_1
if "%s%"=="a" set "hex=%hex%6100" & goto :_1
if "%s%"=="b" set "hex=%hex%6200" & goto :_1
if "%s%"=="c" set "hex=%hex%6300" & goto :_1
if "%s%"=="d" set "hex=%hex%6400" & goto :_1
if "%s%"=="e" set "hex=%hex%6500" & goto :_1
if "%s%"=="f" set "hex=%hex%6600" & goto :_1
if "%s%"=="g" set "hex=%hex%6700" & goto :_1
if "%s%"=="h" set "hex=%hex%6800" & goto :_1
if "%s%"=="i" set "hex=%hex%6900" & goto :_1
if "%s%"=="j" set "hex=%hex%6A00" & goto :_1
if "%s%"=="k" set "hex=%hex%6B00" & goto :_1
if "%s%"=="l" set "hex=%hex%6C00" & goto :_1
if "%s%"=="m" set "hex=%hex%6D00" & goto :_1
if "%s%"=="n" set "hex=%hex%6E00" & goto :_1
if "%s%"=="o" set "hex=%hex%6F00" & goto :_1
if "%s%"=="p" set "hex=%hex%7000" & goto :_1
if "%s%"=="q" set "hex=%hex%7100" & goto :_1
if "%s%"=="r" set "hex=%hex%7200" & goto :_1
if "%s%"=="s" set "hex=%hex%7300" & goto :_1
if "%s%"=="t" set "hex=%hex%7400" & goto :_1
if "%s%"=="u" set "hex=%hex%7500" & goto :_1
if "%s%"=="v" set "hex=%hex%7600" & goto :_1
if "%s%"=="w" set "hex=%hex%7700" & goto :_1
if "%s%"=="x" set "hex=%hex%7800" & goto :_1
if "%s%"=="y" set "hex=%hex%7900" & goto :_1
if "%s%"=="z" set "hex=%hex%7A00" & goto :_1
if "%s%"=="A" set "hex=%hex%4100" & goto :_1
if "%s%"=="B" set "hex=%hex%4200" & goto :_1
if "%s%"=="C" set "hex=%hex%4300" & goto :_1
if "%s%"=="D" set "hex=%hex%4400" & goto :_1
if "%s%"=="E" set "hex=%hex%4500" & goto :_1
if "%s%"=="F" set "hex=%hex%4600" & goto :_1
if "%s%"=="G" set "hex=%hex%4700" & goto :_1
if "%s%"=="H" set "hex=%hex%4800" & goto :_1
if "%s%"=="I" set "hex=%hex%4900" & goto :_1
if "%s%"=="J" set "hex=%hex%4A00" & goto :_1
if "%s%"=="K" set "hex=%hex%4B00" & goto :_1
if "%s%"=="L" set "hex=%hex%4C00" & goto :_1
if "%s%"=="M" set "hex=%hex%4D00" & goto :_1
if "%s%"=="N" set "hex=%hex%4E00" & goto :_1
if "%s%"=="O" set "hex=%hex%4F00" & goto :_1
if "%s%"=="P" set "hex=%hex%5000" & goto :_1
if "%s%"=="Q" set "hex=%hex%5100" & goto :_1
if "%s%"=="R" set "hex=%hex%5200" & goto :_1
if "%s%"=="S" set "hex=%hex%5300" & goto :_1
if "%s%"=="T" set "hex=%hex%5400" & goto :_1
if "%s%"=="U" set "hex=%hex%5500" & goto :_1
if "%s%"=="V" set "hex=%hex%5600" & goto :_1
if "%s%"=="W" set "hex=%hex%5700" & goto :_1
if "%s%"=="X" set "hex=%hex%5800" & goto :_1
if "%s%"=="Y" set "hex=%hex%5900" & goto :_1
if "%s%"=="Z" set "hex=%hex%5A00" & goto :_1
if "%s%"==" " set "hex=%hex%2000" & goto :_1
if "%s%"=="!" set "hex=%hex%2100" & goto :_1
if "%s%"=="""" set "hex=%hex%2200" & goto :_1
if "%s%"=="$" set "hex=%hex%2400" & goto :_1
if "%s%"=="%%" set "hex=%hex%2500" & goto :_1
if "%s%"=="џ" set "hex=%hex%2600" & goto :_1
if "%s%"=="'" set "hex=%hex%2700" & goto :_1
if "%s%"=="(" set "hex=%hex%2800" & goto :_1
if "%s%"==")" set "hex=%hex%2900" & goto :_1
if "%s%"=="*" set "hex=%hex%2A00" & goto :_1
if "%s%"=="+" set "hex=%hex%2B00" & goto :_1
if "%s%"=="," set "hex=%hex%2C00" & goto :_1
if "%s%"=="-" set "hex=%hex%2D00" & goto :_1
if "%s%"=="." set "hex=%hex%2E00" & goto :_1
if "%s%"=="/" set "hex=%hex%2F00" & goto :_1
if "%s%"==":" set "hex=%hex%3A00" & goto :_1
if "%s%"==";" set "hex=%hex%3B00" & goto :_1
if "%s%"=="<" set "hex=%hex%3C00" & goto :_1
if "%s%"=="=" set "hex=%hex%3D00" & goto :_1
if "%s%"==">" set "hex=%hex%3E00" & goto :_1
if "%s%"=="?" set "hex=%hex%3F00" & goto :_1
if "%s%"=="@" set "hex=%hex%4000" & goto :_1
if "%s%"=="[" set "hex=%hex%5B00" & goto :_1
if "%s%"=="\" set "hex=%hex%5C00" & goto :_1
if "%s%"=="]" set "hex=%hex%5D00" & goto :_1
if "%s%"=="^" set "hex=%hex%5E00" & goto :_1
if "%s%"=="`" set "hex=%hex%6000" & goto :_1
if "%s%"=="{" set "hex=%hex%7B00" & goto :_1
if "%s%"=="|" set "hex=%hex%7C00" & goto :_1
if "%s%"=="}" set "hex=%hex%7D00" & goto :_1
if "%s%"=="~" set "hex=%hex%7E00" & goto :_1
if "%s%"=="" set "hex=%hex%7F00" & goto :_1
goto :_1
Записал небольшой ролик, того что получается в результате. В общем эта картина - до бесконечности.
ролик-P.S.
Проверял загрузку на восьмёрочном PE - та же самая картина. ac

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет 2 месяца
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
sergeysvirid, привет.
На самом деле там нет бесконечного зацикливания, просто достаточно длинный цикл, конвертации hex to string, который выполняется слишком долго именно из-за вывода на экран, вывод на время его выполнения желательно запретить.
echo off
call :convert "%%b"
echo on
и дальше уже смотреть, на чем скрипт виснет.
Можно попробовать au3 версию

restart.au3

#NoTrayIcon
RegWrite('HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E967-E325-11CE-BFC1-08002BE10318}','LowerFilters','REG_MULTI_SZ','diskmod')
$asIds = StringRegExp(_RunGetStdOut('devcon.exe find usbstor\*'), '(?i)(usbstor\\.*):', 3)
For $i = 0 To UBound($asIds) - 1
$sIds1 = RegRead('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\' & $asIds[$i], 'ParentIdPrefix')
If @error Then $sIds1 = '\\\\'
For $i1 = 1 To 999
$sValueName = RegEnumVal('HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices', $i1)
If @error <> 0 Then ExitLoop
$sVolume = StringRegExpReplace($sValueName, '(?i)(\\\?\?\\Volume{[0-9a-f-]*})', "\1\\")
If @extended = 0 Then ContinueLoop
$sValueData = Conv(RegRead('HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices', $sValueName))
If StringInStr($sValueData, StringReplace($asIds[$i], '\', '#')) Or StringInStr($sValueData, $sIds1) Then
RunWait('devcon.exe restart "@' & $asIds[$i] & '"', '', @SW_HIDE)
ExitLoop
EndIf
Next
Next
Func Conv($bStr)
Local $sStr = '', $sRet = '', $sTemp
If BinaryMid($bStr, 3, 4) = StringToBinary("??", 2) Then
$sStr = BinaryToString($bStr, 2)
$xx = $sStr
$sTemp = StringRegExpReplace($sStr, '(?i)\\\?\?\\STORAGE#Partition#S(........).*', '\1')
If @extended Then
$sRet = _Reverse($sTemp)
$sTemp = StringRegExpReplace($sStr, '(?i)\\\?\?\\STORAGE#Partition#S........_O(.*)_.*', '\1')
If Mod(StringLen($sTemp), 2) Then $sTemp = '0' & $sTemp
$sRet &= _Reverse($sTemp)
While StringLen($sRet) < 24
$sRet &= '00'
WEnd
$sRet = '0x' & StringUpper($sRet)
Else
$sRet = $sStr
EndIf
Else
$sRet = String($bStr)
EndIf
Return $sRet
EndFunc ;==>Conv
Func _RunGetStdOut($sExeFile)
Local $iPID = Run($sExeFile, @ScriptDir, @SW_HIDE, 8)
If Not ProcessWait($iPID, 20) Then Return ''
If ProcessWaitClose($iPID, 40) Then Return StdoutRead($iPID)
Return ''
EndFunc ;==>_RunGetStdOut
Func _Reverse($sStr)
Local $sRet = '', $i
While StringLen($sStr)
$sRet &= StringRight($sStr, 2)
$sStr = StringTrimRight($sStr, 2)
WEnd
Return $sRet
EndFunc ;==>_Reverse

[Цитировать]

    sergeysvirid
  • 104
  • Стаж: 9 лет 4 месяца
  • Сообщений: 2498
  • Репутация:127

    [+] [-]
  • Откуда: 65 регион (GMT+11)
32145
вывод на время его выполнения желательно запретить.
echo off
call :convert "%%b"
echo on
То есть мне нужно в начале скрипта restart.cmd прописать
@echo off
...а после строки:
call :convert "%%b"
...прописать:
@echo on
Так что ли?
32145Можно попробовать au3 версию
Так у меня в PE-шках ведь нету же Autoit - как же он запускаться будет?
.a3x требует поддержки в системе Autoit

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет 2 месяца
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
sergeysvirid,
В начале скрипта @echo on , @echo off перед call :convert и @echo on после, тогда можно будет увиднть полный лог работы скрипта без мусора.
А для запуска скрипта надо добавить Autoit3.exe в system32 и выполнить
Autoit3.exe restart.au3

[Цитировать]

    sergeysvirid
  • 104
  • Стаж: 9 лет 4 месяца
  • Сообщений: 2498
  • Репутация:127

    [+] [-]
  • Откуда: 65 регион (GMT+11)
nikzzzz,
Всё понял, спасибо, сейчас буду пробовать.
А Autoit3.exe, AutoIt3_x64.exe я могу взять из portable-версии AutoIt 3.3.14.2?
Для WinPE подойдёт?

[Цитировать]

    sergeysvirid
  • 104
  • Стаж: 9 лет 4 месяца
  • Сообщений: 2498
  • Репутация:127

    [+] [-]
  • Откуда: 65 регион (GMT+11)
32148В начале скрипта @echo on , @echo off перед call :convert и @echo on после, тогда можно будет увиднть полный лог работы скрипта без мусора.
Сделал, увидел, но честно говоря ничего не понял:

log

X:\Windows\system32>setlocal enabledelayedexpansion
X:\Windows\system32>for /F "delims=:" %a in ('devcon.exe find usbstor\* | find /
i "usbstor\"') do (for /F "tokens=3 delims= " %b in ('reg.exe query "HKLM\SYSTEM
\CurrentControlSet\services\disk\Enum" /f "%a" | find /i "%a"') do (
call :convert "%b"
for /F "tokens=1 delims= " %c in ('reg.exe query "HKEY_LOCAL_MACHINE\SYSTEM\Mou
ntedDevices" /f "\??\Volume" | find /i "!hex!"') do (fsutil fsinfo volumeinfo %c
\ 1>nul && devcon.exe restart "@%a" )
) )
X:\Windows\system32>(for /F "tokens=3 delims= " %b in ('reg.exe query "HKLM\SYST
EM\CurrentControlSet\services\disk\Enum" /f "USBSTOR\DISK&VEN_STOREJET&PROD_TRAN
SCEND&REV_0\S2XSJ9DD418722______&0" | find /i "USBSTOR\DISK&VEN_STOREJET&PROD_TR
ANSCEND&REV_0\S2XSJ9DD418722______&0"') do (
call :convert "%b"
for /F "tokens=1 delims= " %c in ('reg.exe query "HKEY_LOCAL_MACHINE\SYSTEM\Mou
ntedDevices" /f "\??\Volume" | find /i "!hex!"') do (fsutil fsinfo volumeinfo %c
\ 1>nul && devcon.exe restart "@USBSTOR\DISK&VEN_STOREJET&PROD_TRANSCEND&REV_0
\S2XSJ9DD418722______&0" )
) )
X:\Windows\system32>(
call :convert "USBSTOR\Disk&Ven_StoreJet&Prod_Transcend&Rev_0\S2XSJ9DD418722___
___&0"
for /F "tokens=1 delims= " %c in ('reg.exe query "HKEY_LOCAL_MACHINE\SYSTEM\Mou
ntedDevices" /f "\??\Volume" | find /i "!hex!"') do (fsutil fsinfo volumeinfo %c
\ 1>nul && devcon.exe restart "@USBSTOR\DISK&VEN_STOREJET&PROD_TRANSCEND&REV_0
\S2XSJ9DD418722______&0" )
)
X:\Windows\system32>(for /F "tokens=3 delims= " %b in ('reg.exe query "HKLM\SYST
EM\CurrentControlSet\services\disk\Enum" /f "USBSTOR\DISK&VEN_TOSHIBA&PROD_EXTER
NAL_USB_3.0&REV_0\20150125017060F&0" | find /i "USBSTOR\DISK&VEN_TOSHIBA&PROD_EX
TERNAL_USB_3.0&REV_0\20150125017060F&0"') do (
call :convert "%b"
for /F "tokens=1 delims= " %c in ('reg.exe query "HKEY_LOCAL_MACHINE\SYSTEM\Mou
ntedDevices" /f "\??\Volume" | find /i "!hex!"') do (fsutil fsinfo volumeinfo %c
\ 1>nul && devcon.exe restart "@USBSTOR\DISK&VEN_TOSHIBA&PROD_EXTERNAL_USB_3.0
&REV_0\20150125017060F&0" )
) )
X:\Windows\system32>(
call :convert "USBSTOR\Disk&Ven_TOSHIBA&Prod_External_USB_3.0&Rev_0\20150125017
060F&0"
for /F "tokens=1 delims= " %c in ('reg.exe query "HKEY_LOCAL_MACHINE\SYSTEM\Mou
ntedDevices" /f "\??\Volume" | find /i "!hex!"') do (fsutil fsinfo volumeinfo %c
\ 1>nul && devcon.exe restart "@USBSTOR\DISK&VEN_TOSHIBA&PROD_EXTERNAL_USB_3.0
&REV_0\20150125017060F&0" )
)
X:\Windows\system32>(for /F "tokens=3 delims= " %b in ('reg.exe query "HKLM\SYST
EM\CurrentControlSet\services\disk\Enum" /f "USBSTOR\DISK&VEN_SEAGATE&PROD_GOFLE
X_DESK&REV_0D1C\NA0MGA5J&0" | find /i "USBSTOR\DISK&VEN_SEAGATE&PROD_GOFLEX_DESK
&REV_0D1C\NA0MGA5J&0"') do (
call :convert "%b"
for /F "tokens=1 delims= " %c in ('reg.exe query "HKEY_LOCAL_MACHINE\SYSTEM\Mou
ntedDevices" /f "\??\Volume" | find /i "!hex!"') do (fsutil fsinfo volumeinfo %c
\ 1>nul && devcon.exe restart "@USBSTOR\DISK&VEN_SEAGATE&PROD_GOFLEX_DESK&REV_
0D1C\NA0MGA5J&0" )
) )
X:\Windows\system32>(for /F "tokens=3 delims= " %b in ('reg.exe query "HKLM\SYST
EM\CurrentControlSet\services\disk\Enum" /f "USBSTOR\DISK&VEN_UFD_2.0&PROD_SILIC
ON-POWER32G&REV_PMAP\P1400226070B4292AC5D3204&0" | find /i "USBSTOR\DISK&VEN_UFD
_2.0&PROD_SILICON-POWER32G&REV_PMAP\P1400226070B4292AC5D3204&0"') do (
call :convert "%b"
for /F "tokens=1 delims= " %c in ('reg.exe query "HKEY_LOCAL_MACHINE\SYSTEM\Mou
ntedDevices" /f "\??\Volume" | find /i "!hex!"') do (fsutil fsinfo volumeinfo %c
\ 1>nul && devcon.exe restart "@USBSTOR\DISK&VEN_UFD_2.0&PROD_SILICON-POWER32G
&REV_PMAP\P1400226070B4292AC5D3204&0" )
) )
X:\Windows\system32>(
call :convert "USBSTOR\Disk&Ven_UFD_2.0&Prod_Silicon-Power32G&Rev_PMAP\P1400226
070B4292AC5D3204&0"
for /F "tokens=1 delims= " %c in ('reg.exe query "HKEY_LOCAL_MACHINE\SYSTEM\Mou
ntedDevices" /f "\??\Volume" | find /i "!hex!"') do (fsutil fsinfo volumeinfo %c
\ 1>nul && devcon.exe restart "@USBSTOR\DISK&VEN_UFD_2.0&PROD_SILICON-POWER32G
&REV_PMAP\P1400226070B4292AC5D3204&0" )
)
X:\Windows\system32>goto :eof
...на этом всё и закончилось
По окончании работы скрипта ввёл команду exit
Далее у меня в StartNet.cmd запускается утилита 78Setup, где в проводнике я увидел свою флешку, как съёмный носитель с одним разделом.
Переткнул вручную флешку. В окне 78Setup изчез раздел с утилитами. Через ручной поиск зашёл в проводник и увидел два раздела своей флешки.
Как-то вот так ac

[Цитировать]

    sergeysvirid
  • 104
  • Стаж: 9 лет 4 месяца
  • Сообщений: 2498
  • Репутация:127

    [+] [-]
  • Откуда: 65 регион (GMT+11)
32145
Можно попробовать au3 версию

restart.au3

#NoTrayIcon
RegWrite('HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E967-E325-11CE-BFC1-08002BE10318}','LowerFilters','REG_MULTI_SZ','diskmod')
$asIds = StringRegExp(_RunGetStdOut('devcon.exe find usbstor\*'), '(?i)(usbstor\\.*):', 3)
For $i = 0 To UBound($asIds) - 1
$sIds1 = RegRead('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\' & $asIds[$i], 'ParentIdPrefix')
If @error Then $sIds1 = '\\\\'
For $i1 = 1 To 999
$sValueName = RegEnumVal('HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices', $i1)
If @error <> 0 Then ExitLoop
$sVolume = StringRegExpReplace($sValueName, '(?i)(\\\?\?\\Volume{[0-9a-f-]*})', "\1\\")
If @extended = 0 Then ContinueLoop
$sValueData = Conv(RegRead('HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices', $sValueName))
If StringInStr($sValueData, StringReplace($asIds[$i], '\', '#')) Or StringInStr($sValueData, $sIds1) Then
RunWait('devcon.exe restart "@' & $asIds[$i] & '"', '', @SW_HIDE)
ExitLoop
EndIf
Next
Next
Func Conv($bStr)
Local $sStr = '', $sRet = '', $sTemp
If BinaryMid($bStr, 3, 4) = StringToBinary("??", 2) Then
$sStr = BinaryToString($bStr, 2)
$xx = $sStr
$sTemp = StringRegExpReplace($sStr, '(?i)\\\?\?\\STORAGE#Partition#S(........).*', '\1')
If @extended Then
$sRet = _Reverse($sTemp)
$sTemp = StringRegExpReplace($sStr, '(?i)\\\?\?\\STORAGE#Partition#S........_O(.*)_.*', '\1')
If Mod(StringLen($sTemp), 2) Then $sTemp = '0' & $sTemp
$sRet &= _Reverse($sTemp)
While StringLen($sRet) < 24
$sRet &= '00'
WEnd
$sRet = '0x' & StringUpper($sRet)
Else
$sRet = $sStr
EndIf
Else
$sRet = String($bStr)
EndIf
Return $sRet
EndFunc ;==>Conv
Func _RunGetStdOut($sExeFile)
Local $iPID = Run($sExeFile, @ScriptDir, @SW_HIDE, 8)
If Not ProcessWait($iPID, 20) Then Return ''
If ProcessWaitClose($iPID, 40) Then Return StdoutRead($iPID)
Return ''
EndFunc ;==>_RunGetStdOut
Func _Reverse($sStr)
Local $sRet = '', $i
While StringLen($sStr)
$sRet &= StringRight($sStr, 2)
$sStr = StringTrimRight($sStr, 2)
WEnd
Return $sRet
EndFunc ;==>_Reverse
Попробовал (пока только на PE7x86) - отлично всё отрабатывает!!! ay (даже вроде как-то чуток быстрее, ...может и показалось с радости ag )
Спасибо!!! respekt
Сейчас попробую в PE7x64 добавить AutoIt3_x64.exe и попробовать загрузиться на ней. Если всё будет "OK", то потом главное, чтобы проверили те, у кого были проблемы с загрузкой на пустых картридерах.

[Цитировать]

    sergeysvirid
  • 104
  • Стаж: 9 лет 4 месяца
  • Сообщений: 2498
  • Репутация:127

    [+] [-]
  • Откуда: 65 регион (GMT+11)
32154Сейчас попробую в PE7x64 добавить AutoIt3_x64.exe и попробовать загрузиться на ней.
Странно, но ни в какую не хочет отрабатывать restart.au3 только лишь на PE81x64
На PE7x64 --> OK ay
На PE81x64 --> ac (не отрабатывает. Далее запускается утилита 78Setup, где в проводнике я вижу свою флешку, как съёмный носитель с одним разделом. Перетыкаю вручную флешку. В проводнике вижу два раздела своей флешки.)
На PE10x64 --> OK ay
В чём такая особенность PE81x64??? aq

[Цитировать]

    Adler
  • 1708
  • Стаж: 8 лет 6 месяцев
  • Сообщений: 1196
  • Репутация:65

    [+] [-]
  • Откуда: Луганск
sergeysvirid, маловероятно конечно, но может PE81x64 с пофиксеным багом на кривоподписанный драйвер. Попробуйте заменить драйвер на этот.
Или сам скрипт не отрабатывает?


Последний раз редактировалось: Adler (2016-11-20 17:58), всего редактировалось 1 раз

Страница 4 из 6


Показать сообщения:    

Текущее время: 20-Апр 13:17

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы