1 (изменено: 3wedsmncjklvjvd73734, 2026-01-01 21:38:06)

Тема: OFF: VBS Не убиваемая windows 10. Делюсь опытом.

Все действия производились на


Выпуск	Windows 10 IoT Корпоративная LTSC
Версия	21H2
Сборка ОС	19044.3803
Взаимодействие	Windows Feature Experience Pack 1000.19053.1000.0

2-а года назад вздумал создать ОС которая будет сама делать себя backup, от пакостей вирусов. Для решение данного вопроса, применил vhdx диски. Сделал их загружаемые. Для этого пришлось применить GPT (UEFI) тип дисков.
Потом нашёл как делать загрузочные распределённые vhdx диски. Получилось система у которой можно за 2 минуты создать "песочницу" (чистую ОС), наподобие как в  VmWare с "золотой закладкой". Загрузился в такую "песочницу" поигрался с программы, выкл. комп, Загрузился в закладку "меню", удалил эту "песочницу", или сделал новую ..и т.д. Короче, как в игре. Заподозрил что можешь схватить вирус, "записался в уровне". Поигрался, понял, что есть вирус/нет_вируса, и стёр этот "уровень". Загрузился в ранее записанный, и опять продолжаешь работать.
На всё про всё 2-е минуты и новая закладка с "песочницей", готова.
При этом, хочу особо подчеркнуть, что сама ОС выступает как виртуальная машина, без сторонних софтов. Поэтому работает она по скорости на все 100% , без замедления, не то что с софтом VmWare.
Т.к. в такой системе рождаются много vhdx дисков с разными ОС и прогами, то применил загрузочное меню
с free софтом "EasyBCD". Для этого создал отдельный vhdx с этим софтом, со своей меню для загрузки в эту закладку с ОС . Она служит мне для редактирования/создания vhdx разностных дисков + меню загрузки для них.
Затем, т.к. эти vhdx диски имеют тип  UEFI, то применил их в SSD, с переходником SATA3/USB3.
Т.о. мог менять как перчатки не только ОС-ы но и SSD, с разными установками.
Но всё равно случались беды. Несколько раз слетали прошивки с ssd. Приходилось заного перепрошивать, + туда переносить vhdx ранее за backup-ые диски. И опять создавать загрузчик... Короче морока, хотя она уже не такая была как до того, как связался я с vhdx дисками. Уже не надо было заного делать разворот ОС, настройка её и установка туда прог и т.д..
..
Все buck-ы vhdx диски расположены были у меня на hdd 1трб. При этом имею 2-е машины с разными мамами Gigabyte и MSI. Т.е. vhdx диски разные для 2-ух машин. Эти HDD были мной куплены ещё в 2012 годах. При этом для того что бы была надёжная копия на hdd применял софт от микрософт которая делала репликацию Hdd копию на 2-ой такой же HDD. При этом один HDD был в системе на SATA, а второй на "полке", как копия. Т.о. я имел их 4-е шт, для 2-ух машин. И вот один из других дисков на которых была не backup система, сбойнул (застучал). Понял что "время пришло" и надо что-то делать.
Если переходить на ssd 1трб, то это просто огромные для меня деньги (шутка что ли >6000р на алике и то перед Новым Годом, а их нужно 4-е шт) 
И вот решил создать уже защищённую ОС по железу (SSD/HDD) без такого количества hdd. Опробовал софтовую RAID в вине. Понял что она как раз то что надо. Но ОС нужна с raid1 на загрузке. Поэтому решил купить контролёр RAID на чипе ASM1061R (на авито за 500р за штуку - 2-е штуки брал). Возился с ним 2-ое суток что бы понять как там и что. Если кому нужны подробности в насторойках - пишите. Там не так всё просто оказалось. Но зато за копейки. Проверил, ОС грузиться и скорость не изменилась. Всё как и было  с переходником SATA3/USB3. Правда эти 2-а SSD стояли уже в sata на контролёре PCI. А не были внешними. Однако с помощью F11-MSI/F12-Gigabyte мог грузиться и с внешнего SSD по USB3.
Проверил сбой. Оключал один из SSD (вытаскивал SATA или питание SATA провода). И смотрел как утилита показывала как засекала сбой и предупреждала. При этом вся ОС и загрузка не страдали. Потом цеплял "плохой" SSD и при очередной загругке ОС плата контролёра сама восстанавливала сбойный SSD. Всё автоматом.
ремарка.
Загрузчик на этих SSD имеет тип MBR. Но при развороте ОС диск "C" имеет тип GPT (UEFI). Вот такие хитрые нюансы имею. Проверил с шифровальщиком BitLocker - всё пашет как надо. Но не стал с ним заморачиваться. Но в "тетрадочке" пометил этот факт.
Теперь остался HDD 1трб на RAID посадить. Для этого подкупил ещё один контролёр PCI на ASM1061 (без "R") - расширитель по SATA на 2-а порта. На них посадил эти 2-а HDD. Но RAID1 сделал в самой винде 10. НОНОНОНО. Не в "Управлении дисками", а в "Дисковое пространство" из "Панели управления". Оказалосб ЭТО 2-е разные утилиты по созданию разных RAID. И имеют из-за этого разные свойства по этим RAID. Например.
Если делать RAID1 в "Управлении дисками", то при сбое одного из hdd нужно соблюсти при замене очерёдность по портам sata этих дисков. При этом если эти диски установить во вторую мою машину с другой мамой, то эти диски не будут видны. Короче опять нужно выходить на наличие 4-ёх дисков по 1 трб. А вот если применить "Дисковое пространство" из "Панели управления", то "меняй чего угодно - не хочу". И очерёдность по sata портам, и во вторую маму впихивай их, и в разные закладки vhdx , пофигу - везде видяться и пашут как надо- ВЕЩЬ!!! При этом даже видяться в загрузочной дискете WinPe. Когда как RAID сделанный в "Управлении дисками" такого широкого жеста не позволяет делать.
Докупил на алике по 700р -4е штуки SSD по 120гиг, и вставил их в остальные 4-е порта SATA на маме.
В "Дисковое пространство" из "Панели управления" установил их как RAID5. Получилось, что софтовые я имею 2-а RAID. RAID1 и RAID5. 
И вот тут возникла проблема с монитором этих RAID. На PCI на ASM1061R имелся свой соф. Загружается с ОС и следит сам за RAID1 ОС. А вот с софтовым туго. С RAID "Управлении дисками", просто. Загрузил diskpart с командой "lis vol" и читай где нет параметра "Healthy". А вот с "Дисковое пространство" из "Панели управления" diskpart не понимает. Есть 3-и варианта мониторить RAID в "Дисковое пространство".

+ открыть спойлер

1- с помощью Powershell. Запуск доступа к дискам только из под Админа.

  
# FriendlyName это имя заданное в пространстве дисков как общее пространство включая физические и виртуальные  диски
Write-Output "-----------------------------------"
Get-StoragePool -IsPrimordial $False | Select-Object FriendlyName, HealthStatus
Write-Output "-----------------------------------"
Get-VirtualDisk  | Select-Object FriendlyName,  HealthStatus
Write-Output "-----------------------------------"
# Следующая команда выдаёт на каком порту SATA находиться тот или иной диск в RAID5 для того чтобы можно было его извлекать.
Get-PhysicalDisk | Select-Object FriendlyName, SerialNumber
Write-Output "-----------------------------------"

2- с помощью команлной строки и встроенной в вин10 утилиты "wmic.exe".Запуск доступа к дискам только из под Админа.


wmic /namespace:\\root\microsoft\windows\storage path msft_disk get FriendlyName,HealthStatus 

rem -------------------------
rem BusType=11 --> Это тип порта SATA. 
rem SerialNumber --> Это серийник который обозначается автоматом в графической утилите "Дисковое
rem пространство"
rem DeviceId --> Это порядковый номер по порядку портов SATA в маме и PCI контрол1рах.
rem - Это нужно для того что бы индентифицировать серийник с номером SATA в RAID5.
wmic /namespace:\\ROOT\Microsoft\Windows\Storage\Providers_v2 path SPACES_PhysicalDisk where BusType=11 get FriendlyName,SerialNumber,DeviceId 


3- с помощью VBS скрипта. Для меня лучше всего подходит.
Потому что 1-вставляется в автозагрузку в taskschd.msc (Планировщик заданий). 2- От туда же он перезапускается по времени каждые 5 минут. 3-сразу запускается от админа. 4- выскакивает при неоходимости диалоговое окно (при первом заходе в винду) со статусом дисков. А если не "Healthy", то сразу выскакивает графическая утилита "Дисковое пространство", в котором можно уже "чинить" диски.


'taskschd.msc ------ приложение Планировщика задачь
Option Explicit
Dim Run0orNext
Dim wmiObject, objShell
Dim sleep_
'###########################################################
'###########################################################
'	 Класс ожидания
'###########################################################
'###########################################################
Class sleep1
private objwsh
sub tm(tim)
    Set objwsh = CreateObject("WScript.Shell") 
    objwsh.Run "Timeout /T " & tim & " /nobreak" ,0 ,true
    Set objwsh = Nothing
end sub
End Class
'	инициализация класса пауза
set sleep_=new sleep1 '----класс ожидания паузы

'###########################################################
'###########################################################
'	Класс создание ГЛОБАЛЬНОЙ ВЕЧНОЙ переменной и внесение туда значения 
'###########################################################
'###########################################################

Class GlobalObject
    Private ShellWindow_, ShellWindows_
    Sub OpenContainer(name)
        Dim ShellWindows_
        Set ShellWindows_ = CreateObject("Shell.Application").Windows
        For Each ShellWindow_ in ShellWindows_
            if Instr(1,ShellWindow_.StatusText,name) = 1 Then Exit Sub
        Next
'#################### Переменная в "проводник" #######################
	sleep_.tm(1)
	Set ShellWindow_ = GetObject("new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}") 
'###########################################################
        ShellWindow_.StatusText = name
    End Sub
    
    Property Let Value(name, newValue)    
        ShellWindow_.PutProperty name, newValue
    End Property
    
    Public Default Property Get Value(name)
        On Error Resume Next
        if IsObject(ShellWindow_.GetProperty(name)) Then
            Set Value = ShellWindow_.GetProperty(name)
        Else
            Value = ShellWindow_.GetProperty(name)
        End if
    End Property
End Class


Dim GlobalObj
Set GlobalObj = New GlobalObject
GlobalObj.OpenContainer "storage"
'###########################################################
'###########################################################
'	Проверяется , на начальный запуск скрипта 
'	Если первый раз заускается, то в переменную выставляется TRUE 
'	Это условия запуска диалогового окна о статусе "Дискового пространства"
'###########################################################
'###########################################################
'###########################################################
If GlobalObj("Run_0_or_next") = Empty then
Run0orNext=TRUE
GlobalObj("Run_0_or_next") =Run0orNext
elseIf GlobalObj("Run_0_or_next") = TRUE then
Run0orNext=FALSE
end if
'###########################################################
'###########################################################
'	Процедура Получения Статуса дисков и их имен
'###########################################################
'###########################################################

Call Main

'###########################################################
'###########################################################
Sub Main()	
Dim oWMI, WQL, Instances, Instance
Dim FriendlyName_():ReDim Preserve FriendlyName_(0,0)
Dim HealthStatus_: HealthStatus_=100
Set objShell=CreateObject("WScript.Shell")
'###########################################################
'###########################################################
'	Этот пустой запуск обязательно должен быть.
'	Иначе путь WMI "SPACES_VirtualDisk" не булет срабатывать.

	Set oWMI = GetObject("WINMGMTS:\\.\ROOT\Microsoft\Windows\Storage")
	WQL = "SELECT * FROM MSFT_StoragePool where IsPrimordial=false"
'############# IsPrimordial=false -- FALSE это выбираются только "Дисковые пространства"
	Set Instances = oWMI.ExecQuery(WQL)
	For Each Instance In Instances 
	sleep_.tm(1)
	Next 
	Set Instances =Nothing
	Set oWMI =Nothing
'###########################################################
'###########################################################


	Set oWMI = GetObject("WINMGMTS:\\.\ROOT\Microsoft\Windows\Storage\Providers_v2")
	WQL = "Select * from SPACES_VirtualDisk"
	Set Instances = oWMI.ExecQuery(WQL)
	sleep_.tm(1)
	For Each Instance In Instances 
'###########################################################
'###########################################################
'	Получение всех имён всех дисков RAID
'###########################################################
'###########################################################
if FriendlyName_(0,0)="" then
FriendlyName_(0,0)=Instance.FriendlyName
else
ReDim Preserve FriendlyName_(0,Ubound(FriendlyName_)+1)
FriendlyName_(0,Ubound(FriendlyName_)+1)=Instance.FriendlyName
end if
'###########################################################
'###########################################################
'	Проверка состояние RAID Дисков
'###########################################################
HealthStatus_= Instance.HealthStatus 
'###########################################################
'###########################################################
'	расшифровка кодов ответа "HealthStatus" о состоянии RAID
'	['0', '1', '2', '5']
'	['Healthy', 'Warning', 'Unhealthy', 'Unknown']
'###########################################################
'###########################################################
'	Если "HealthStatus" не равно состоянию 'Healthy' то открывается 
'	графическая утилита редактирования "Дискового пространства"
'###########################################################
'###########################################################
If HealthStatus_<>0 then 
objShell.run ("control /name Microsoft.StorageSpaces")
exit sub
end if
Next 
'###########################################################
'###########################################################
'	При первом запуске крмпьютера после проверки Дисков
'	Если всё "ОК" открывается информационное окно с перечислением дисков 
'	О том что все диски находяться в отличном состоянии
'###########################################################
'###########################################################
if Run0orNext=TRUE then
Dim a,index, x:x=0
for each index in FriendlyName_
a= a & "     " & FriendlyName_(0, x) & Vbcrlf
x=x+1
next
a= "     Диски " & Vbcrlf & Vbcrlf & a & Vbcrlf & "      не требуют вмешательства" 
objShell.Popup a, 30, "Сосотояния Дискового пространства",48
end if
'###########################################################
'###########################################################
Set Instances = nothing
Set oWMI = nothing
Set objShell= nothing

end sub
'===========================
'===========================

..
Оссобености с RAID5. Долго проверял по сбоям. И выяснил следующее.
RAID5 при сбое выступает как контролёр SSD (например такой как SM2259XT2) который при сбое встает в режим "только чтение". Т.е. срочно куда либо копируй всё от туда и по новой создавая этот RAID5. Т.е. он позволяет при сбое сохранить данные НО НЕ ВОССТАНАВЛИВАЕТ сам RAID5.     
При сбое RAID1, он сам восстанавливает сам RAID1 и данные на нём, но софтово.
Всё это проверял выдёргиванием  проводов из HDD/SSD. 
Теперь осталось сделать салазки для 4-ёх программных RAID5 дисков и для 2-ух дисков RAID1, что бы их можно было вставлять и пользоваться ими во второй машине с другой мамой.
В коде применил код который ранее  тут на форуме появился для отслеживания самого первого запуска скрипта при старте винды. Правда применил "проводник"
https://forum.script-coding.com/viewtop … 73&p=3
Т.о. получил возможность сбрасывать глобальную переменную в "проводнике", методом "перезапуска" его в "диспетчер задач". Т.е. иметация первого захода в винду.     
..
Подгрузил сюда утилиту для отслеживания портов SATA на которых сидят 4-е SSD в RAID5. Графическая утилита "Дисковое пространство" не показывает какой из дисков сидит на каком порту SATA в маме. Запустил утилиту, посмотрел какой на каком, и переименовал их в "Дисковое пространство", с указанием номера SATA порта.

Post's attachments

UTILLITY.vbs 1.46 kb, 1 downloads since 2026-01-01 

You don't have the permssions to download the attachments of this post.

2 (изменено: 3wedsmncjklvjvd73734, 2026-01-01 21:04:14)

Re: OFF: VBS Не убиваемая windows 10. Делюсь опытом.

дополню. подгрузил файл "MONITOR_RAID.vbs", который написан выше в посте.
+ софтина которая делает репликацию от Микрософта.
"SyncToy" https://learn.microsoft.com/en-us/answe … ctoy-tool
(SyncToySetupPackage_v21_x64.exe)
Требует установку
.net framework 2.0 (NetFx20SP1_x86.exe)

Post's attachments

MONITOR_RAID.vbs 6.79 kb, 1 downloads since 2026-01-01 

You don't have the permssions to download the attachments of this post.

3 (изменено: 3wedsmncjklvjvd73734, 2026-01-05 09:12:02)

Re: OFF: VBS Не убиваемая windows 10. Делюсь опытом.

Наконец то всё выяснил, что там и как...
Очень многие (в том числе и я) жалуются на то что плохой диск не удаляется из списка.
Тоже мучился. Пока не проверил в win8.1. Эта ОС у меня для прошивок в ssd контролёрах.
Там всё удаляется на ура , правда старая версия "пространства", поэтому вин 10 предлагает его обновить.
Короче. Если его делать в вин8, то в10 видит, но некоторые функции не пашут. И наоборот. Сделанное пространство в вин10 не видит вин8.
Но главное понял, что что-то тут в настройках. Скачал новую вин10. С нуля поставил. там всё ОК- удаляется.
В моей нифига. Стал копать.
1- все настройки в планировщике должны быть  (я там поудалял у себя в вине 10 всё- мама не горюй).
2- служба "поиска" должна быть на авто- я её у себя выключил что бы не юзала по hdd.
3- компонент винды  SMB директ должен быть установлен.
Короче.
"Дело было не в бабине- человек сидел в кабине"
"Дело было в прокладке, между монитором и стулом перед ним" (по аналогии Дело было в прокладки между рулём и сидением в автомобиле.)
..
Благо что у меня закладочная система. Загрузился от "мамы" основной, там ничего с нуля не тронуто было. И сразу всё запахало...
Теперь про RAID.
Пашут и восстанавливаются на УРА все RAID-ы (RAID1, RAID5,RAID10).
Но есть нюансы. про них никто и нигде не расписывает ничего. Поэтому ЭТУ СУПЕР ПУПЕР надёжную систему никто не применяет, из-за не знания как и чего там делать.
Эта система, начинает привлекать к себе внимание, когда пул набивается  >60% от своего размера.
То в "пространстве", возникает надпись "добавь 2-а диска". Т.е. что на раид 1,5 и 10, пофиг. Добавь и всё.
Но не критично, потому что вся область в ОК режиме. Т.е. это простое напоминание о нехватке места.
Всё проверил..
1-Набивал каждый райд по отдельности до 80%-90%.
2-Вынимаю диск из сата находу.
3- Система сразу засекает и просто реагирует "предупреждение".
4- Надписи "подготовить к удалению" нет. Просто предупреждение.
5- Если вместо сбойного диска вставить находу новый, ситема его не видит нив какую.
6- выкл. комп. Вставляю новый ssd. Вкл. Он видится. Он должен быть чист. желательно через

diskpart командой clean 

7-- В пространстве вкл. режим правки. Появляются активные надписи - добавить диск. Добавляю диск который вставил вмето того что вынул ранее. Теперь в пространстве уже не 4-е диска а 5-ть. Один плохой сразу встал в подготовку к удалению.
8-Сразу запускается режим оптимизация, Но надпись так и остаётся "добавь 2-а диска" .
....
И вот тут хитрость- моя рацуха.
...
Откр упр дисками. кликаем на любой диск. В меню, сделать виртуальный диск. Делаю его vhdx, + 16 гигов всего. Динамический.
Кладу куда то в TEMP. Так делаю 2-а диска. Там же в упр дисками их инициализирую в GPT, не форматируя.
9-В пространстве, жму добавить диск, пространство их видит. Они добавляются и СРАЗУ ЖЕ ПОЯВЛЯЕТСЯ ЗАВЕТНАЯ НАДПИСЬ -
ВОСТАНАВЛИВАЮ 10%. Жду  до 100% . Плохой диск сразу меняет надпись - Готов к удалению.
10- удаляю старый диск.
11- жму подготовить к удалению на 2-а виртуальных диска. Они как ни в чём не бывало удаляются сами.
12- ВСЁ система RAID восстановлена с новым диском.
...
Долго мучился с этими добавочными дисками. На форумах в Микрософте все ругаются, что у них по 10 тирабайт, а их пространство всё требует и требует диски. И все юзеры суют именно тот размер диска который стоит. И по 2- недели ждут когда же он восстановиться (см нюансы с требованием чего пространству надо). А я понаблюдал за этим процессом восстановления и заметил, что эти 2-а добавочных диска SSD всегда забиваются всего то на 0,5%-2% от своего размера. А потом их удаляй. Вот и подумал. А дайка я ему флешку суну!! А флешки ОН не видит. Вот тогда и родилась мысля проверить его на виртуальном диске. И ОН увидел эти диски.
ВЕЩЬ!!.
Теперь винда с защитой, и при этом это пространство всеядное для разных компов..

4

Re: OFF: VBS Не убиваемая windows 10. Делюсь опытом.

вдогонку.
Совет.
Форматируйте эти пространства в ф.с. REFS. Она спец предназначено для таких целей.

5 (изменено: 3wedsmncjklvjvd73734, 2026-01-05 19:58:23)

Re: OFF: VBS Не убиваемая windows 10. Делюсь опытом.

У меня спрашивали "- Как сделать RAID5 и 10?"
Raid10.

1 способ
делаете из 2-ух дисков "двухстороннеее зеркало", потом добавляете туда ещё 2-а диска. Но тогда потом после добавления их, нужно "редактировать" и самому изменять размер пространства.
2-ой способ. Сразу выбрать 4-е диска. И  указать "двухстороннеее зеркало".

Raid5.
Сразу выбрать 4-е диска. И  указать "Чётность".
...
И вдогонку. Система в Вине сама предупреждает о сбое (справа внизу напоминание). Но уже тогда когда будет в немоготу пространству, + с большой задержкой по времени.

Не забудьте. Файловая система пространства ReFS
Испытать всё то что я тут написал, можете не с настоящими железяками, а на 4-ёх vhdx дисках размером 16-32 гига...

6

Re: OFF: VBS Не убиваемая windows 10. Делюсь опытом.

Есть защита вина, такая как «uwfmgr.exe»
Т.к. у меня ОС подподает под условия наличия такой штуковины, которая бережёт SSD, методом работы с вином в памяти, то решил попробовать на vhdx + RAID.
В начале, вылетала ошибка синий экран смерти со словами «FLTMGR.SYS».
Она будет в рандомном времени, выдавать вам экран смерти относительно файла «FLTMGR.SYS». Это связано, не с vhdx диском, а с... Ну короче. Читал всякие форумы и микрософта форумы, в которых микрософт советовал проверять диски и переустанавливать вин.. отключать быстрые загрузки и т.д. пока я не наткнулся на пост о том, что мол некая samsung выяснила, что эта ошибка обычно связана с тем что, вин во время скоростной загрузки может имена дисков дублировать. Т.е. как утверждается всё дело в UEFI, потому что GPT диски в вине, обозначаются через GUID ключ, который и может быть сдублирован между своими дисками. Короче, 2-а диска имеют один и тот же ключ. Советуют мол, перейти с GPT на MBR.
тогда я полез в панель упр--> администрирование-->Просмотр событий. И там начал искать ошибки, оринтируясь по времени возникновения синего экрана.
И нашёл. В начале ошибка volumF по поводу буквы диска. А потом и ошибка что то там и


------
 Имя журнала:   System
 Источник:      disk
Диск 3 имеет такие же идентификаторы, как у по крайней мере одного из дисков, подключенных к системе. Чтобы устранить эту
проблему, перейдите на веб-сайт службы поддержки корпорации Майкрософт (http://support.microsoft.com) и введите поисковой запрос
 "KB2983588".

Копанул в иннете и... Понял. В панель упр. --> диспетчер устройств--> Контролёры, IDE, ATAPI.
Там я установил драйвер (мама Gigabyte), для чипа 500 от intel, вместо стоявшего там микрософта ACHI. Я поменял, его. Удалил и восстановил от микрософта. Мол ОН выдумал этот   
    uwfmgr.exe , значит и его дрова будут пахать как надо..
И не ошибся. работала машина 2-а часа. Потом опять «FLTMGR.SYS». Опять начал смотреть "Просмотр событий". И там опять volumF. Но уже с жалобами на некий intel service... Ну тогда я полез в  "службы" и поотключал все службы от intel, который мне понаставил во время установки своего драйвера на чип 500.
И вот уже сижу сутки и никаких проблем. Просматриваю заполнение фильтра. И как и предполагал, что ОС не шибко много работает с файлами при работе. всего то 360 мегов. Поэтому все те кто жалуется на скорости по SSD, просто не знают что ОС-ы не загружают в себя гигабайты файлов. Поэтому при проверке скорости например копированием, скорость 350-400 мегабайт в сек, идёт 2-3 гигабайта (из-за кеша вина), а потом скорость снижается. И такие спецы, советуют не применять такие ssd на ОС. У меня стоят именно такие и самые дешёвые.
...
Короче.    «uwfmgr.exe» пашет и в vhdx, и c RAID-ами

7

Re: OFF: VBS Не убиваемая windows 10. Делюсь опытом.

Пришли ssd 2-е шт. по 1 трб. Зажмотился брать в декабре, по 3, теперь брал по 6200. И не из-за «того что», а из-за того что не верил что за 3000 способны сделать честные 1трб. Очень часто встречал в отзывах и даже сам накололся, с этим фактом, что реальный размер не соответствует действительности. При этом сам в этом убедился когда начал прошивать контролёры ssd. А накололся я на микроCD, покупал 64g а в реале там 32G. Деньги вернули. С доками обмана просто. Все применяют левые проги например «H2Testw.exe», которая будет вам N часов писать/читать с флешки что бы убедиться что там в конце размера «пусто или есть что то».
Когда как есть очень простой и банально быстрый способ проверки, в самой винде. Короче.

+ открыть спойлер

Обман всех с объёмом размера памяти сводиться в баге самых прог по форматированию, что в люниксах что в винде. Все они заточены на быстрый процесс. Т.е. достаточно в фате написать что там то-то и то-то, то все ОС-ы (фотики, мотики, телефоны…) обращаясь в нулевую область сразу сообщают всем что установлен такой то винт такого то размера. Что и делает  процесс обмана простым. Достаточно прописать в контролёре что «там» размер 160 террабайт, но всунуть по настоящему память на 16 гиг, все  ОС-ы , будут форматируя быстро писать что установлен накопитель с  160 террабайт. При этом винда создаст раздел на весь размер и форматнёт быстренько прописывая в нулевой области памят накопителя 16 гиг, что размер
соответствует 160 террабайт.
Как борюсь? Оч при оч просто. Вся борьба состоит из знания того что любая ОС, прописывает размер в нулевую область самого РАЗДЕЛА. Если делать раздел не целиком а только чуть чуть меньше, то первый раздел всегда форматнётся без ругани винды . А вот второй!!!. Второй в конце и нулевая область тоже в конце, и если там ничего нет из настоящего, то винда не сможет туда ничего прописать быстро форматируя. Вот на этом принципе и основан моя рацуха быстрой проверке, истинных размеров флешек. Я даже устал этот способ рассказывать всем. И до сих пор вижу в отзывах применения долгоиграющих  прог типа «H2Testw.exe».
Я свои новые ssd просто в упр. Дисками, разбил на 960гиг и остальной, в довесок то что осталось. Винда даже не поперхнулась. Т.е. мои купленные на алике ssd честные 1 трб размера.
Вот сейчас, в настоящее время, жду когда процесс завершиться по замене уже 2-ого диска HDD , на ssd в софтовом RAID1. Там оказалось всё не так как я описывал вам ранее. Если коротко, то софт умничает, и из-за этого его приходиться подталкивать, когда он призадумается.
Короче.
Первый ssd.
На вЫкл компе, вынул hdd, всунул ssd, предварительно этот ssd в usb3/sata, обнулил


Diskpart
….
clean  

Это не помогло. Прога увидела но не захотела его применять. Добавил виртуальные 2-а vhdx. Схавала, но ssd так и не приняла.
Поудалял опять, эти 2-а vhdx. Т.е. всё восстановил как и до появления ssd. Тогда взял 2-а переходника sata3_usb3, и добавил новое вообще новое пространство. Прога схавала. Сделал. Я опять его поудалял. И опять прога не добавила их. Тогда я взял «Виктория», запустил,
!!!!! БУДТЕ ВСЕГДА ОСТОРОЖНЫ С НЕЙ !!!!!
Она с появлением sata уже ничего не метит и не исправляет, но зато быстро может стереть нулевую область ЛЮБОГО НАКОПИТЕЛЯ. Главное не перепутать выбирая его с другими. Мои переходники хорошо «видны» в прогах и в ОС-ах. Они имеют имя «JMicron…..». «Виктория» -> пометка накопителя в «инфо» «правка»--> там справа, есть кнопка. «открыть» жмём её. Потом ползунком спускаемся в самый низ, там внизу есть 3-и строки, от конца, в которых есть инфа. Ставим курсор в середину 3-ей сттрочки снизу там перед цифрой «02», и нажимаем «0» на клаве. И держим её, пока вся область эти 3-и строчки  не заполняться «нулями». Потом жмём кнопку «сохранить», рядом с «открыть». Жмём «Exit» и выходим из  «Виктория». Перетыкаем переходники в usb3 и диски «чистые». Я пока не в курсе, чего «проге» (дисковое пространство), не понравилось в совершенно чистых ssd которые с завода. В СМАРТ, их запускали всего 3-а раза. «Там» и я. Думаю на будущее. Надо его форматнуть, туда чего то положить. Потом опять


Diskpart
….
clean  

И тогда возможно прога их примет как «добавить диск». Она же принимает совершенно чистые vhdx. Но они то сделаны на уже форматированной области в накопителях, а значит там что то да накалякано внутри кроме нулевой области. Т.е. прога  (дисковое пространство) наверняка лезет дальше нулевого пространства, дабы найти в этих дисках другое  «дисковое пространство». И только когда понимает что там пусто, принимает диск как «добавить». Ну короче, добавил в начале первый ssd.
Прога, сразу запустила оптимизацию.
И… есть отличный монитор процесса. Он хорошо реализован на «Server Windows 20…». Там есть цветной ползунок, процесса хода обновления пространства. В вине 10 только надписи. Но есть обход этого.
Запускаем powershell от админа и пишем.


Get-StorageJob

Там появятся строки.


PS C:\Windows\system32> Get-StorageJob

Name                IsBackgroundTask ElapsedTime JobState PercentComplete BytesProcessed BytesTotal
----                ---------------- ----------- -------- --------------- -------------- ----------
1000GB-Rebalance    True             00:05:13    Running  0                          0 B       5 GB
1000gb-Repair       True             00:06:43    Running  1                      9.55 GB  817.75 GB
1000gb-Regeneration True             00:05:08    Running  1                      9.55 GB   817.5 GB
Потом опять через N минут запустите и…
PS C:\Windows\system32> Get-StorageJob

Name                IsBackgroundTask ElapsedTime JobState PercentComplete BytesProcessed BytesTotal
----                ---------------- ----------- -------- --------------- -------------- ----------
1000GB-Rebalance    True             00:27:38    Running  35                     1.75 GB       5 GB
1000gb-Repair       True             00:29:09    Running  5                      41.3 GB  817.75 GB
1000gb-Regeneration True             00:27:34    Running  5                      41.3 GB   817.5 GB

«1000GB» Это моё имя моей области пространства, моего террабайтника. «1000GB-Rebalance» это строчка, показывающая процент , который высвечивается в графической среде пространства как «оптимизация». «IsBackgroundTask», это графа указываюящая на то что процесс находиться в фоновом режиме. Т.е. вы можете гулять, чесртить, рисовать, строчить, месягм в формах, прога будет в фоне пахать, и восстанавливать пространство. «ElapsedTime», это прошедшее время с момента запуска процесса. Т.е. скрипт восстановления, пишет в каком месте он сейчас находиться по восстановлению. Вы можете перезагрузиться, или выкл комп, Потом через сутки вкл. комп, и прога засекёт где она была остановлена, и продолжит восстанавливать пространство.
Как я понял, по этому времени и по % ждать мне нужно было > 8 часов для террабайтника. Быстрее я не смог найти свойства её,  что бы веником подтолкнуть. «JobState» , состояние процесса. Эти состояния могут принимать значения, «Suspended» и ещё какой то, не помню уже. «Suspended» это ожидание, пока не выполнится, какой то ещё процесс. Ну например когда я проге сунул второй ssd диск, мне пришлось что бы её шевельнуть, загрузиться в другую закладку. И она дёрнулась и процесс пошёл. Т.е. как я понял, там есть что-то с наполнением какого то кеша, и он должен будет очиститься прежде чем прога продолжит. Но наверное можно очистить и простой перегрузкой компа. Не пробовал. Я сразу загрузился в другую закладку.
И когда в графической среде «пространства» режим «оптимизация», прекратиться то процесс в фоне всё равно пашет, но это явно не видно. Если долго ждать то видно как на плохом диске, уменьшается % «использовано N %», в у нового наоборот увеличивается.
Но в powershell , этот процесс виден быстрее  и нагляднее. Надо бы мне сделать «HTA» код за слежением этих вещей.



 PS C:\Windows\system32> Get-StorageJob

Name                IsBackgroundTask ElapsedTime JobState PercentComplete BytesProcessed BytesTotal
----                ---------------- ----------- -------- --------------- -------------- ----------
1000gb-Repair       True             08:49:14    Running  99                   811.78 GB  817.75 GB
1000gb-Regeneration True             08:47:39    Running  99                   811.78 GB   817.5 GB

На плохом HDD
использовано 0,79%
когда 100%
использовано 0,06%
то "ГОТОВ К УДАЛЕНИЮ" . Удалился без вопросов HDD.
Ждал > 8 часов. Это был 1-ый диск. Со вторым сложнее. В начале было


PS C:\windows\system32> Get-StorageJob

Name                IsBackgroundTask ElapsedTime JobState PercentComplete BytesProcessed BytesTotal
----                ---------------- ----------- -------- --------------- -------------- ----------
1000GB-Rebalance    True             00:02:05    Running  0                          0 B  447.75 GB
1000gb-Repair       True             00:02:50    Running  6                       580 MB    8.25 GB
1000gb-Regeneration True             00:01:10    Running  7                       580 MB       8 GB

Как видите никакого размера типа 900 гиг нет в инфе. Но я не стал перечить проге. Дождался 3-и часа, когда кончиться 447,75гиг.
После того как встало всё с надписью


1000gb-Repair    True             00:09:43    Suspended 0                          0 B 422.25 GB

В граф. Среде молчок, всё спит. Перегрузился в другую закладку, и опять система САМА проснулась 


PS C:\Windows\system32> Get-StorageJob

Name                IsBackgroundTask ElapsedTime JobState PercentComplete BytesProcessed BytesTotal
----                ---------------- ----------- -------- --------------- -------------- ----------
1000gb-Repair       True             00:01:17    Running  0                      3.64 GB  422.25 GB
1000gb-Regeneration True             00:01:13    Running  0                      3.64 GB     422 GB

И вот уже сейчас


PS C:\Windows\system32> Get-StorageJob

Name                IsBackgroundTask ElapsedTime JobState PercentComplete BytesProcessed BytesTotal
----                ---------------- ----------- -------- --------------- -------------- ----------
1000gb-Repair       True             02:21:10    Running  67                   283.16 GB  422.25 GB
1000gb-Regeneration True             02:21:06    Running  67                   283.16 GB     422 GB

В граф среде пространства, инфы вообще нет кроме как напротив плохого hdd. «Подготовлен к удалению» и «использовано 14,8%».
При этом заметьте, что я не стал добавлять лишние vhdx. Всё и так само пашет, «Просто надо уметь готовить его (R)»

8 (изменено: 3wedsmncjklvjvd73734, 2026-01-13 12:38:04)

Re: OFF: VBS Не убиваемая windows 10. Делюсь опытом.


PS C:\Windows\system32> Get-StorageJob

Name                IsBackgroundTask ElapsedTime JobState PercentComplete BytesProcessed BytesTotal
----                ---------------- ----------- -------- --------------- -------------- ----------
1000gb-Repair       True             02:41:32    Running  76                   322.46 GB  422.25 GB
1000gb-Regeneration True             02:41:27    Running  76                   322.46 GB     422 GB

В графической среде напртив плохого hdd, уже
использовано 11,9%
При этом сами ssd стоят и не шевелются.
Как было
использовано 85,8%
у обоих там и осталось
использовано 85,8%
Т.е.  где то там в пространстве, что то там стирается относительно hdd.
Когда останется напротив плохого hdd
использовано 0,06%
То появиться напротив hdd
"Готов к удалению" И он удалится без вопросов. И моё пространство будет проапгрейтено с hdd на ssd.
..вдогонку.
Всё я этот апгрейт делал с выкл. «uwfmgr.exe»

9

Re: OFF: VBS Не убиваемая windows 10. Делюсь опытом.

Пришло время насчёт подробностей, «как и что».
В настоящее время сделал закладку (я их называю про себя ветку, из-за того что это похоже на ветки от дерева), с защитой «uwfmgr.exe» и без. Работаю постоянно с защитой -  нареканий нет. Правда пока только на маме Gigabyte, на MSI ещё не ставил защиту. Делаю салазки под RAID1,5, тогда и поставлю и туда.
….
Начать нужно с самого главного с, vhdx. Но главное всё таки в том, что бы вы не спешили сразу кодить коды, и делать vhdx диск. А в  начале прочтите весь абзац (даже без кодов), до параграфа по установки PCI RAID1 контролёра. Там в конце уйма нюансов, которые могут потом повлиять на ваше потраченное время в пустую при вашей спешке.
Главная цель.
1-Создать основу первого vhdx диска с чистой ОС.
2- сделать этот vhdx загрузочным.
3- сделать от него первые закладки.
4- сделать эти первые закладки тоже загрузочными.
5- разобрать нюансы работы vhdx системы с USB3 и работы некоторых контролёров ssd дисков.

+ открыть спойлер

Делал vhdx с помощью diskpart (а можно и через «управление дисками»). В начале суём флешку или ssd чистые. Флешку лучше не надо СЕЙЧАС, но в будущем можно будет и флешку. В конце поясню почему. И этот диск ssd предположим имеет номер 2. Номер можно посмотреть в управлении компом->упр дисками. Запуск ком строки. Через админа.


diskpart
lis disk
[i] ищем наш чистый SSD диск. Смотрим его номер. пишем [/i]
sel disk 2 - номер вашего диска.
clean
convert gpt
create partition efi size=100
format fs=fat32 quick label=SYSTEM
create partition msr size=128
create partition primary
format fs=ntfs quick label="SSD_vhdx"
assign letter=D
  
create vdisk file=D:\w10.vhdx maximum=50000 type=EXPANDABLE 
attach vdisk
clean
convert gpt
create partition primary
format fs=ntfs  quick label="w10_vhdx"
assign letter=M
exit

У вас будет SSD диск UEFI с загрузчиков SYSTEM. Для загрузки его в режиме UEFI вам нужно посмотреть свойства раздела SYSTEM и скопировать оттуда его GUIDE код. У всех загрузочных UEFI разделов микрософта этот код стандартен.


{c12a7328-f81f-11d2-ba4b-00a0c93ec93b}

Т.к. vhdx диск у нас типа GPT (UEFI), то при загрузке, в режиме MBR (у RAID1 PCI  контролёра загрузка, только через MBR) потом этот W10 отображается в ОС как UEFI диск и даёт возможность работать с ним как с полноценным GPT диском, как будто рядом нет никаких MBR разделов. Это позволило, этот диск расширять/сужать как настоящий GPT диск.
Раздел EFI (см выше код, раздел SYSTEM) это раздел загрузки. Он предназначен только для загрузки в режиме GPT (UEFI). W11 ставиться ТОЛЬКО на такие диски у которых есть этот раздел.
Раздел MSR (см выше код. Раздел имеет размер 128 мегов) не форматированный и нужен только для дисков, которые имеют тип GPT. Для дисков MBR этот раздел не нужен. Почему? Потому что этот маленький раздельчик нужен только для одного, для разширения/сжатия дискового пространства. Диски типа MBR этого не могут делать.


Ставим w10 в наш диск. Для этого подключаем ISO файл с вашей ОС. Предположим у вас этот ISO файл в системе получил букву диска «N». И пишем в ком. строке от админа.


Dism   /Get-ImageInfo   /ImageFile:N:\sources\install.wim
[i]Если прога напишет ошибку, то пишите так->[/i]
Dism   /Get-ImageInfo   /ImageFile:N:\sources\install.esd

Ищем в таблице индексов нужную нам версию w10. Предположим там нам нужна версия под индексом 2. Пишем.


Dism   /Apply-Image   /ImageFile:N:\sources\install.wim /index:2  /ApplyDir:M:\
[i]Если прога напишет ошибку, то пишите так ->[/i]
Dism   /Apply-Image   /ImageFile:I:\sources\install.esd /index:2  /ApplyDir:M:\

Подождите, когда прога «DISM» развернёт вам w10 в ваш vhdx диск. В результате у вас будет развернут там полноценный w10, но ещё не установленный, а только setup. Теперь сделаем загрузчик.
Выкл. комп. Вставляем флешку WinPE (просто загрузочную флешку). Загружаемся с неё. В ком строке пишем …. В начале нужно переключить клаву на EN раскладку. Левый шифт+альт.  Пишем.


diskpart
lis vol
[i]ищем букву нашего диска, в котором находится наш vhdx файл. И  кстати ваш этот ssd имеет метку диска «SSD_vhdx» (см выше код). предположим эта буква «D».  Пишем [/i]
sel vdisk file=d:\w10.vhdx 
attach vdisk
lis vol
[i]ищем букву нашего развёрнутого диска, в котором находится наша ОС W10, Обычно такой диск будет последний в списке. Его можно узнать по метке диска «w10_vhdx». Предположим эта буква «H». Пишем [/i]
exit

В ком строке пишем.


 cd   /d   h:\windows\system32
[i]система вас переместит в каталог «system32» вашего vhdx диска. пишем и жмем интер[/i]
bcdboot
[i]прога вам покажет весь хелп как правильно писать. Пишем[/i]
bcdboot    h:\windows /m  {c12a7328-f81f-11d2-ba4b-00a0c93ec93b}

Прога вам должна написать, что загрузчик записан и создан.
Строка  «{c12a7328-f81f-11d2-ba4b-00a0c93ec93b}» это GUIDE код загрузочного раздела UEFI SYSTEM (см выше коды). При загрузке в режиме MBR , там пишется буква раздела вместо этого кода.
Теперь можете всё позакрывать, выйти и выкл. комп. Оставляете свой ssd или флешку в usb порту и грузитесь. И тут… Короче.
«СОВЕТ N1!!»
Vhdx диск делайте в ssd который подключён к SATA. Потом объясню причину. С флешкой пока не связывайтесь. Иначе получите синий экран смерти.
Вкл комп и жмёте «F11» (У мамы GIGABYTE «F12»). Выбираете свой ssd и устанавливайте там вашу w10. После перезагрузки не забудьте опять выйти на ваш ssd с помощью «F11/F12»
«Как загружаться с USB, что бы не получить экран смерти?!!»
В том экране смерти будет написано, что система не может … короче что то там типа такого «тратарарара…USB…трататата.». Что бы решить проблему надо :
0- Установить винду, что бы там появилась прога «REGEDIT».
1- Загрузиться в ОС через SATA.
2- Запустить «REGEDIT» от админа.
3- Найти ветку.


 \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control

Там параграф «BootDriverFlags»
Там параметр этого парграфа, должен равняться в десятичном варианте «28». В HEX варианте «1С».


Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control]
"BootDriverFlags"=dword:0000001c

Вообще винда сама может выставить этот флаг, если её устанавливать сразу из USB, Но у нас vhdx диск и поэтому этот вариант не прокатит. Приходиться всё править руками.
Это флаг параметра в микросекундах ожидания ОС загрузчика, пока драйвер USB не загрузиться. Иначе синий экран смерти. Но тут есть нюансы. Например, у меня есть ssd с новым китайским контролёром «YS9085N», купленный в 2024 году. Который только в конце 2025 года получил free распространение своей прошивки. Так вот. Этот УРОДЕЦ, выдавал синий экран смерти на всех параметрах этого флага. И только когда я ему сунул параметр 1000 , он стал грузиться с USB. Вывод. ЭТОТ УРОДЕЦ полноценно может работать только с SATA , через USB у него сплошной гемор. Возможно что современные прошивки уже решили эту проблему, но я после того случая стараюсь обходить этот контролёр SSD стороной, не взирая на цену ssd.
После установки этого флага, можете вытаскивать свой SSD из SATA и вставлять его в USB3/SATA3 переходник и сувать его в порт USB3.
После выбора его через «F11/F12» , можете грузиться через usb хоть W11. По времени загрузки не ощутимо с SATA3.
Теперь у вас есть полноценный архив «пустой» вашей W10. И вы можете его переписывать куда угодно и где угодно использовать.
Осталось дело за малым. Напихать в него обновления, + установить в него нужные вам проги + активировать его. Активировать w10 советую сразу в пуcтой W10. Что бы все сделанные от него ваши закладки тоже имели уже эту активацию. Учтите, что будет иметь ваша мама то и будет иметь ваша закладка от такой мамы. Но осталось малость ещё. Сделать ветки (закладки) и … прочее, по вашему усмотрению.
Я лично в начале использовал SSD 120гиг. Но потом поработав понял, что используя закладки лучше иметь всё таки для ОС 250гиг ssd. Потому что для загрузочных закладок нужна необходимость, расположения «мамы» родителя vhdx в одном и том же месте. Иначе может сработать загрузка или нет 50/50. Поэтому я имею у себя все свои vhdx файлы (включая закладки) на одном SSD. 
Будем делать первую и самую главную для нас закладку «МЕНЮ».
Родитель vhdx у неё будет пустой W10. Эта закладка «МЕНЮ» нам нужна только для:
1-изготовления новых vhdx
2-проверка vhdx
3-правка vhdx
4- Изготовления меню загрузки.
5- И т.д.
Для этого нам опять нужно загружаться в WinPE (загрузочная флешка). Дело в том, чтобы сделать закладку МАМА vhdx родитель должен быть «закрыт». Т.е. если мы загрузились в нашу маму w10.vhdx то в нём самом на данный момент времени нельзя сделать от себя же закладку. Этот файл диск должен быть выгружен-закрыт. При этом есть ещё нюанс. Если например от мамы сделать закладку, а потом опять загрузиться в маму и что то там накалякать, то сделанная ранее закладка от такой мамы уже никогда не загрузиться. Поэтому что бы не было таких нюансов с загрузками, всегда все мамы, метят атрибутом «только чтение». Т.е. мамы теперь навечно не редактируемы. Или все закладки летят к праху. В такие vhdx  диски с такой пометкой нельзя вообще загрузиться.  Поэтому этот нюанс выступает своеобразным антивирусником. Т.е. если ваша закладка не грузиться значит что то там случилось с самой мамой. Или что-то произошло  с битым файлом vhdx закладкой. Из-за того что мама всегда стоит не тронутой, то там битый сектор никогда не может организоваться. И лучше такую маму (если она виновата) заменить из ранее записанного backup-а. Благо этот backaup состоит из обычного копирования vhdx файла и всё. Всё остальное остаётся вообще не тронутым. 
Пишем в ком строке от админа


diskpart
sel vdisk file=d:\w10.vhdx
compact vdisk
[i] Устанавливаем атрибут на маму файл vhdx «только чтение». Именно поэтому вирусы этой «маме» пофигу.[/i]
attributes disk set readonly
create vdisk file=d:\bott_menu.vhdx parent=d:\w10.vhdx
attach vdisk
lis vol
[i] Ищем букву нашего vhdx диска. У него должен быть метка диска как «w10_vhdx» от мамы. И теперь все при все закладки будут иметь метку «w10_vhdx» и будут иметь 50 гиговый размер. Но этот размер можно в конкретной закладки изменить. Но только уменьшить. Что я вам и советую в МЕНЮ диска сделать. Потому что нам в меню диска нафиг не надо иметь 50 гиг размер. Причём когда разворачивается (загружается) любой vhdx диск он всегда будет иметь размер 50 гиг от мамы. [/i]    
exit

Далее там же в ком. строке пишем


Bcdedit   /v

Появляется таблица. В самой последней таблице ищем строку


Загрузка Windows
-------------------
идентификатор   {da645bfd-d32e-11f0-aa42-bce30ed9d327}
device   “vhd=C: \w10.vhdx  ……

Код «{da645bfd-d32e-11f0-aa42-bce30ed9d327}» тут приведён для примера, что бы вы поняли что искать. У вас будет совершенно другой номер. Причём упрежу. Каждый раз когда вы будите делать загрузчик даже на тоже самое железо, этот код всё время будет разный.
Копируем этот ваш только этот код (выделяем, и нажимаем интер).
Пишем


Bcdedit  /set    ВАШ_КОД   device vhd=c:\boot_menu.vhdx 

Должно получиться так


Bcdedit  /set   {da645bfd-d32e-11f0-aa42-bce30ed9d327}  device          vhd=c:\boot_menu.vhdx 

Но лучше когда вставите свой код {da645bfd-d32e-11f0-aa42-bce30ed9d327} то лучше скопируйте ещё и строку «device», потому что в этой строке есть не только имя vhdx файла но и его параметр.
Например у меня эта строка выглядит так.


Загрузка Windows
-------------------
идентификатор           {da645bf7-d32e-11f0-aa42-bce30ed9d327}
device                  vhd=[Y:]\boot_menu.vhdx,locate=custom:12000002 

Вы конечно сами можете добавит строку ,locate=custom:12000002 , но лучше что бы эта строка была точно такая же как у вас, мало ли что?
Потом добавьте обяза помимо строки «DEVICE» строку «OSDEVICE»


Bcdedit  /set   {da645bfd-d32e-11f0-aa42-bce30ed9d327}  osdevice          vhd=c:\boot_menu.vhdx 

  Это тоже самая строка как и с «DEVICE».Единствееное отличие это параметр vhdx диска.
У меня он выглядит так.


osdevice                vhd=[Y:]\boot_menu.vhdx,locate=custom:22000002

Как видите в конце цифиРЫ другие. Заметьте, я у себя использую букву диска «Y» для того что бы проги не путались с буквами. И ещё. Что бы ssd быстро не вышел из строя, советую отключить в маме сразу файл подкачки. Тогда все при все закладки не будут иметь его изначально. Но если вам вдруг в какой то закладке он нужен то именно в ней можете его включить.
Теперь загружаемся в эту закладку МЕНЮ, и устанавливаем там:
1- Hyper-V . Можно через панель упр -> програмы и компоненты-> компоненты виндовс. А можно и через powershell.
Разница только одна. Через  панель упр устанвливаем всего дин компонент, «Средство управления Hyper-V, графическим интерфейсом». А если через  powershell то там придётся ставить всю оснастку целиком. В конце попросит установка перезагрузиться. Перезагружаемся.
2- Ставим free прогу EasyBCD.exe для изготовления меню загрузки.
3- В Hyper-V изготавливаем ещё одну закладку от мамы, для установки туда обновлений.
4- Запускаем сразу EasyBCD и редактируем загрузку. Переименовываем в “МЕНЮ”. Потом добавляем в меню, новую загрузку с нового vhdx файла для обновлений. Обзываем его как угодно.
5- Загружаемся туда, обновляемся.
6- Опять загружаемся в МЕНЮ, и метим этот файл обновлений в проводнике, как «только для чтения» .
7-    В Hyper-V изготавливаем ещё одну закладку от этого файла обновлений, для установки туда уже прог.
8- Запускаем EasyBCD и редактируем загрузку. Добавляем в меню, новую загрузку с нового vhdx файла для прог. Старую с обновлениями удаляем из меню. Обзываем его как угодно.
9- Загружаемся в закладку и устанавливаем все нужные вам проги или можно по отдельности в каждой закладке по своей проге.

10- Опять загружаемся в МЕНЮ и уже в этот раз можно делать рабочие закладки. При этом метим мамы от них «только для чтения».
ВСЁ. При этом эти новые для работы закладки по размеру имеют всего 4 мегабайта. И их можно просто напросто накопировать кучу малу. Что бы не изготавливать в Hyper-V заного.
После этого вы можете делать сколько угодно закладок от любой «мамы», от чистой, до последней включая и с обновлений. Короче. Все эти закладки теперь это записанные уровни как в играх. Не нравиться – стёр её , загрузился в чистую и т.д.
Теперь про размер vhdx файла. Как видите таких закладок у вас может быть много. А ssd имеет размер. При развороте vhdx диска он будет иметь рамер 50 гиг. (посмотрите диск «С»).  Как уменьшить его, например для закладки МЕНЮ?
Упр дисками. Выбираем диск «С», в меню выбираем, сжать. Указываем сжать (например) 35гиг. Оставьте лишние гиг 2-5 от конца. Он сожмётся. Вы увидите какой будет новый размер. Но в конце останется не размеченный размер. Вот тут то нам и нужен будет Hyper-V. Запускаем его и там в меню-> изменить диск. Выбираем его и там будет предложено сжать. Сжимаем на нужный размер. Теперь этот vhdx (диск С) всегда будет маленький и не будет сжирать попусту размер с диска SSD.
Но тут есть засада. Все операции в  Hyper-V с дисками нужно делать с закрытыми дисками vhdx, а мы находимся в МЕНЮ открытом vhdx диске. Для решения этой проблемы, я предлагаю, сделать копию файла boot_menu.vhdx в любой загруженной закладке, когда этот файл закрыт. Переименовать его. Потом загрузиться опять в МЕНЮ, и там его исправить размер , но для этого надо его «подключить», а потом его исправить в упр дисками, закрыть его. Открыть  Hyper-V. Там его сжать. Загрузиться в любую закладку. Удалить старый файл boot_menu.vhdx и переименовать сжатый в boot_menu.vhdx.
Вот так можно «играться»  с закладками, и с размерами. При этом buckup, полностью упрощён.
Теперь, ЛЮБОЙ чистый ssd можно изготавливать с ОС. Достаточно , туда скопировать vhdx диски, с мамами и с меню, и делать что угодно. Я например добавил ещё туда и win8.1.
Сделал vhdx, туда развернул win8 из ISO. Загрузился в МЕНЮ, добавил меню с этим vhdx диском, и вуаля. Есть ещё одна ОС.         
  И ещё про win11. Как оказалось «ОНИ» улучшили сикурити этой ОС и поэтому если вы будите иметь в одном hdd/ssd дисках обе ОС (w11/w10) то вам обеспечен гемор, с «chkdsk». Потому что w11 всегда хочет подмять под себя всё. И поэтому метит как своё собственность общую корзину для ОС W10 и W11. А т.к. ОС W10 не знает что такое W11 , то при загрузке, W10 она всегда будет ругаться на повреждение диска где находиться эта общая корзина и будет запускать «chkdsk» на исправление её. А потом опять по кругу когда вы захотите уже загрузиться в W11.
Такого ГЕМОРА с корзинами у vhdx дисков нет и в помине, потому что эти корзины спрятаны в самом vhdx диске. И поэтому любая загрузочная ОС не видит чужую корзину, а видит только свою. Поэтому нет никакой ругани.   
Ремарка от себя.
Гибернация в vhdx дисках не работает. Она сразу сама отключается в них. Сон пашет.
Для уменьшения размеров мамы, я после обновления ОС архивировал, весь каталог хранилища компонентов Windows в каталоге WinSxS. На 5 гиг точно уменьшите.
https://blog.it-kb.ru/2018/10/16/clear … dism-tool/

Очистил диск «С» в маме. Запустите дефрагментацию диска «C».  Настройте шрифт, ассоциацию расширений файлов с прогами, (jpg,PDF… файл чем открывать?). Настройте общий фон винды в маме. Короче всю свою винду настройте. И уберите файл подкачки. Я кстати ещё долго возвращался назад к маме, вспомнив в закладках о настройках того или сего в прогах…
Когда установите все свои браузеры, то в этой маме (закладке) не забудьте установить все Сертификаты SSL протокола с Госуслуг  (если вам нужны они в России). Что бы потом в закладках вам не пришлось в каждой закладке устанавливать их по новой.
Саму закладку «МЕНЮ», можно и с чистой мамы сотворить – без настроек. Там ей пофигу. Причём я из-за Hyper-V вообще удалил драйвер сети из этой закладки- сеть там не нужна мне. Потому что Hyper-V после установки себя суёт в настройку сети ещё своих 2-а моста, которые через Net контролёр на маме лезут сами в иннет, и не спрашивают разрешения. Учтите ЭТО.
Кому интересно отключение хранилища, можете попробовать


Отключение
DISM /Online /Set-ReservedStorageState /State:Disabled
Включение
DISM /Online /Set-ReservedStorageState /State:Enabled
 

Короче, уменьшите вашу маму как можно больше. Потому что она вам в дальнейшем очень долго не понадобиться. А поэтому «НАФИГА козе баян?».  Поищите в иннете и другие команды для уменьшения вашей мамы.
Но не шибко применяйте усердие по сжиманию/удалению. Вон, видете как у меня получилось? Пришлось возвращаться в не «тронутую маму», и уже заного делать закладки что бы полноценно использовать, программный RAID1,5,10. Теперь у вас есть мамы, которые вы можете копировать с закладкой boot_menu.vhdx («МЕНЮ») в любой ssd и делать загрузочные любые ssd диски. Запустите diskpart, раскроете vhdx диск меню, запустите в нём в каталоге system32 прогу bcdboot и сделает сразу его загрузочным в «МЕНЮ». Даже можете по первости использовать ssd 120 гиг, а уже когда созреете то купите себе поболе размером диск.
При использовании vhdx будет отсутсвовать режим «восстановления». Потому что его не будет на диске. Этот раздел «RECOVERY» размером 560 мег. восстановления (файл «Winre.wim»), в стандартном варианте находиться в самом конце диска. А он должен находиться в последовательном месте после раздела винды. И если его делать  в vhdx то винда при загрузке ещё не раскрыла vhdx и поэтому не может туда поспасть в этот раздел.  А если его делать на ssd а не в vhdx то винда не знает этого, и поэтому не попадает туда. Хотя можно конечно, создать и настроить ЭТОТ режим. Но я е стал «замарачиваться» этим. Решил создать 2-а файла «.bat» которые устанваливают режим SAFE MODE , и опять возвращают в стандартный режим винду.


@echo off 
bcdedit /set {bootmgr} displaybootmenu yes
bcdedit /set {default} bootmenupolicy legacy
timeout 5
exit

И возврат в станадартный режим меню


@echo off 
bcdedit /set {bootmgr} displaybootmenu yes
bcdedit /set {default} bootmenupolicy standart
timeout 5
exit


Теперь про защиту, и исправления.
1-Если вам вдруг в голову придёт мысля «нажать кнп выкл комп», то файл vhdx который в этот момент был открыт, будет иметь на момент после вкл компа размер = размеру мамы (кроме того файла который , вы сами изменили размер см, выше как). Т.е. равен 50гиг. Потому что в момент выкл компа ОС не успела файл vhdx сжать-закрыть.
2- Если вдруг произошёл казус с появлением экрана смерти, то этот момент приравнивается к 1-ому пункту см 1 пункт. Т.е. размер vhdx = 50гиг. При этом если вы соберётесь всё равно загрузиться после перезагрузки в эту ветку, то вас ждёт опять же эта ошибка, потому что vhdx не был исправлен методом закрытия.
КАК ИСПРАВЛЯТЬ?
Оч приоч просто. Надо при перезагрузке компа, выбрать пункт, «МЕНЮ», и там запустив Hyper-V, в меню выбрать «исправить диск». Выбираете тот vhdx который сбойнул (он всегда имеет размер 50гиг) и жмете ОК. Hyper-V предложит его дефрагментировать, и он сожмётся (закроется). После этого вы можете смело в эту закладку загрузиться, без последствий.

В следующий раз расскажу про RAID1 установку и настройку ASM1061R для загрузки даже на мамах с UEFI. Такой, которая как  например является моя мама GIGABYTE. На маме MSI вообще не было проблем. Потому что она сразу сама загрузилась в биос RAID контролёра ASM1061R. А вот маму GIGABYTE с трудом удалось уговорить её грузиться с mbr контролёра ASM1061R. Объясню все нюансы этой процедуры «уговора мамы».

10 (изменено: 3wedsmncjklvjvd73734, 2026-01-14 14:18:49)

Re: OFF: VBS Не убиваемая windows 10. Делюсь опытом.

дополню. Как то работая в защитной закладки, "увидел", что мне надо исправить что то там. Можно это сделать командой

commit

а можно использовать преимущества закладок.  Я пока работая в другой закладке, подключаю закладку с защитой и там в открытой винде ищу тот нужный файл (мне нужен был файл "hosts"). Меняю его на другой, и теперь в защитной закладке, у меня совершенно другой файл.
И написал код на VBS который переделывает этот файл, с чистого на заполненный, и наоборот.
А что бы я знал в какой варианте этот файл сейчас находиться меняю у него иконку. И по ней вижу, в какой версии сейчас находиться файл "hosts". Это мне нужно для того что, например на сайте алика, нужен чистый hosts, там много они чего поносували в нём, и что бы не было гемора, я на случай захода на такие ответственный сайты, меняю им файл "hosts".


Option explicit
Dim fso,file,WshShell,Shortcut
dim DesktopPath,Lnk_Title,IconPath
Dim norm_ ,big_,smal_
norm_="C:\Windows\System32\drivers\etc\hosts"
big_="C:\Windows\System32\drivers\etc\hosts1234"
smal_="C:\Windows\System32\drivers\etc\hosts123"
'====================================
'rem hosts1234- размер 289 заполненый
'rem hosts123- чистый
'=======================================


Set fso = CreateObject("Scripting.FileSystemObject")  
Set file = fso.GetFile("C:\Windows\System32\drivers\etc\hosts")  
  
Set WshShell = WScript.CreateObject("WScript.Shell")  
DesktopPath = WshShell.SpecialFolders("Desktop")  
Lnk_Title = "\HOSTS.lnk"  
Set Shortcut = WshShell.CreateShortcut(DesktopPath & Lnk_Title)  

if file.Size > cint(4000) then ' проверяю, чистый он или заполненый
'rem hosts1234- размер 289
'rem hosts123- чистый
 fso.MoveFile norm_ , big_
 fso.MoveFile smal_ , norm_
    

IconPath = "%SystemRoot%\System32\SHELL32.dll,20"  

  else
'rem hosts1234- размер 289
'rem hosts123- чистый

 fso.MoveFile norm_ , smal_
 fso.MoveFile big_ , norm_
fso.CopyFile norm_, "E:\09_10_2023\hosts" , true  ' копирую сразу заполненный , в buckup место, потому что в процессе работы я его заполняю.

IconPath = "%SystemRoot%\System32\SHELL32.dll,54"



end if

Shortcut.TargetPath="C:\SOFT\hosts.vbs" ' тут лежит у меня в маме, этот скрипт


Set file = Nothing  
Set fso = Nothing  


Shortcut.WorkingDirectory = "C:\SOFT"  
Shortcut.WindowStyle =4 '3 7
Shortcut.IconLocation = IconPath  
Shortcut.Save  

Set Shortcut = Nothing
Set WshShell = Nothing

Если с размер вашего наполненного файла "hosts", меньше чем 4000 байт, то у вас скрипт не будет ничего менять. А вот когда вы его чем то заполните, что бы он имел размер > 4000 байт, то тогда увиде всё преимущество этого скрипта.
Когда первый раз нажмете на выполнения скрипта, он вам создаст ярлык на рабочем столе.
И в дальнейшем, просто нажимая на выполнение этого ярлыка, скрипт, будет вам менять файл "hosts", и менять свою иконку относительно версии этого файла.
...
UAC вам е позволит с этим файлом ничего сделать. Я у себя весь каталог

C:\Windows\System32\drivers\etc\

, в безопасности, сменил владельца на себя.
И поэтому делаю там с файлами что хочу. без вопросов. Конечно можно добавить код админа в скрип, но тогда ярлык будет у вас кажен раз спрашивать...
Если ВАМ так удобнее с секурити, то вот вам добвочный код с этим админной работой.


Option explicit

'=========== запуск от админа скрипта
Set WshShell = WScript.CreateObject("WScript.Shell")
If WScript.Arguments.Length = 0 Then
  Set ObjShell = CreateObject("Shell.Application")
  ObjShell.ShellExecute "wscript.exe" _
    , """" & WScript.ScriptFullName & """ RunAsAdministrator", , "runas", 1
  WScript.Quit
End if
' ===================================================================
Dim fso,file,WshShell,Shortcut
dim DesktopPath,Lnk_Title,IconPath
Dim norm_ ,big_,smal_
norm_="C:\Windows\System32\drivers\etc\hosts"
big_="C:\Windows\System32\drivers\etc\hosts1234"
smal_="C:\Windows\System32\drivers\etc\hosts123"
'====================================
'rem hosts1234- размер 289 заполненый
'rem hosts123- чистый
'=======================================


Set fso = CreateObject("Scripting.FileSystemObject")  
Set file = fso.GetFile("C:\Windows\System32\drivers\etc\hosts")  
  
Set WshShell = WScript.CreateObject("WScript.Shell")  
DesktopPath = WshShell.SpecialFolders("Desktop")  
Lnk_Title = "\HOSTS.lnk"  
Set Shortcut = WshShell.CreateShortcut(DesktopPath & Lnk_Title)  

if file.Size > cint(4000) then ' проверяю, чистый он или заполненый
'rem hosts1234- размер 289
'rem hosts123- чистый
 fso.MoveFile norm_ , big_
 fso.MoveFile smal_ , norm_
    

IconPath = "%SystemRoot%\System32\SHELL32.dll,20"  

  else
'rem hosts1234- размер 289
'rem hosts123- чистый

 fso.MoveFile norm_ , smal_
 fso.MoveFile big_ , norm_
fso.CopyFile norm_, "E:\09_10_2023\hosts" , true  ' копирую сразу заполненный , в buckup место, потому что в процессе работы я его заполняю.

IconPath = "%SystemRoot%\System32\SHELL32.dll,54"



end if

Shortcut.TargetPath="C:\SOFT\hosts.vbs" ' тут лежит у меня в маме, этот скрипт


Set file = Nothing  
Set fso = Nothing  


Shortcut.WorkingDirectory = "C:\SOFT"  
Shortcut.WindowStyle =4 '3 7
Shortcut.IconLocation = IconPath  
Shortcut.Save  

Set Shortcut = Nothing
Set WshShell = Nothing
Post's attachments

hosts.vbs 1.52 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

11 (изменено: 3wedsmncjklvjvd73734, 2026-01-15 07:31:35)

Re: OFF: VBS Не убиваемая windows 10. Делюсь опытом.

ASM1061R
1-ое. Надо точно вам узнать, поддерживает ли ваша мама режим загрузки legacy (в простонародии MBR загрузку как в старых мамах). Именно поэтому ЭТИ старые контролёры, такие дешёвые, по этой причине. Контролёры с загрузкой по шине PCI в режиме UEFI стоят неимоверных денег, сравнимо со стоимостью ssd в 1 трб.
Откройте свой мануал (инструкцию) на маму, и ищите слово «legacy». Но возможно именно сейчас ВЫ не найдёте у себя этот режим на маме, а в мануале есть. Очень советую сходить на сервер мамы, и скачать новую прошивку на BIOS мамы. Возможно этот режим у вас появится. Но например у меня, этот режим на маме «Gigabyte» описан, но выйти я на него не мог очень долго. Помог случай. Короче. Обычно во всех мамах, этот режим сопровождается выставлением некое алгоритма установок. Если его придерживаться, то в маме появиться этот злосчастный «legacy».
И ещё. Это очень важно. В основном, все и накалываются на том что они суют плату RAID в PCI, а на экране не могут получить, заход в её BIOS. Что и есть у меня на маме «Gigabyte». У меня «Celeron» (3,5гц на 2-ух компах на разных мамах), а значит в нём встроена графика. И поэтому я покупал самую дешёвую маму именно со встроенной графикой. И в мануале по маме «Gigabyte» сказано.-->

+ открыть спойлер

IO Ports 
& Initial Display Output
Speciies the irst initiation of	the monitor display from the installed PCI Express graphics card or the	onboard	
graphics.
(Note)
 Sets the onboard graphics as the irst display.
------ что в переводе означает -------
Порты ввода-вывода
и начальный вывод изображения
Указывает на первое включение монитора с установленной видеокарты PCI Express или встроенной графики.
(Примечание)
Устанавливает встроенную графику в качестве первого дисплея.
------------

Поэтому если я сую в PCI что либо, то мама засекает что там что то стоит. И я указываю в BIOS что грузиться надо с PCI, то вывод на экран мама выводит на PCI шину, подразумевая, что там находиться видеокарта. Отключая при этом HDMI и VGA порты, которые встроены в маму.  Т.е. я на экране вижу картину «Малевича», бился головой об клаву, не помогло, чёрный экран хоть тресни. И этот «эффект» Малевича, присутствует у всех, у кого мамы заточены, по современному, на режим загрузки UEFI. ПОЧЕМУ? Потому что загрузка в режиме MBR. Короче. Что бы загрузилась ОС через PCI надо что бы в PCI была загрузочная «флешка». Эта «флешка» (встроенная память) есть у ASM1061R. И там прописан загрузчик в BIOS контролёра, в котором присутствуют установки режимов RAID. При этом этот загрузчик, заточен под стандарт режимов загрузки какой есть во всём мире. А какой самый старый режим загрузки? Правильно MBR. Поэтому что бы попасть в BIOS контролёра ASM1061R, надо иметь :
1- Режим «Legacy», в BIOS-е мамы
2- Вывод изображения на внешний порт монитора. Хотя во второй моей мамы (MSI), есть напрямую режим «Legacy», без каких либо квестов, как в маме «Gigabyte». И поэтому MSI мама при заходе в BIOS контролёра выдаёт мне картинку, по шине VGA, при этом отключая порт HDMI. Но т.к. я изначально сижу на этом порту (VGA), то сразу засёк этот нюанс и смог выйти в BIOS контролёра сразу после вкл компа. «Cntr+R» внизу экрана написан заход в BIOS. При этом картинка логотипа с параметрами контролёра высвечивается там 1,5 сек, в ожидании того что юзер будет нажимать комбинацию этих клавишь.
На маме с заходом в BIOS контролёра,  этого нам не надо, и я вам советую ЭТОЙ фигнёй не заниматься. Будем юзать графический интерфейс установок RAID в контролёре ASM1061R. Там всё просто и «…поймёт не только дворник, но даже карапуз (R)». Короче, в конце концов, я пролетаю на маме «Gigabyte», этот режим захода в BIOS за 2-е сек, с чёрным экраном. А т.к. у меня стоит ещё и расширитель по шине SATA на второй шине PCI с контралёром  ASM1061(без R). Купленные (2-е шт) на алике за 450р. То ещё увеличивается время загрузки на 1 минуту. В маме MSI, я эти все контролёры  (их параметры и режимы) вижу сразу при вкл компа, и только после прошествии 3ё-х минут вижу логотип мамы MSI. Т.е. загрузка PCI первична, во всех мамах (в зависимости от установок в BIOS-е мамы). Кстати, на маме MSI расширитель PCI по SATA сразу мне показал, что мои HDD не все имеют SATA3. Этот нюанс с видеокартами, я вам обязан был расписать, что бы вы не думали, что у всех работает RAID а у вас нет. У всех мам которые новые, и изначально с завода имеют режим UEFI, те все будут иметь экран Малевича. Но если в этих мамах установлены видеокарты, то  Малевича не будет, а будет выход на BIOS контролёра RAID. У всех старых мам для которых режим загрузки UEFI был получен методом прошивки BIOS мамы, те все будут иметь сразу выход на BIOS RAID контролёра. Вот такие вот нюансы.
Я буду рассказывать вам тут загружаться в ОС не заходя в BIOS   
RAID. Что в начале вы поимеете? Как только вставите в маму контролёр, то при вкл. компа, у вас будет 2-а варианта развития событий:
1- Малевич, до конца 21 века и с продолжением на 22 век.
2- Выход на логотип BIOS контролёра, ожидание 1,5 сек (ничего не нажимая), и вы будите загружены в свою ОС (попадёте в меню, которое вы сами сделали с vhdx).

У этих 2-ух вариантов, тоже есть подпункты:
a) Нет внешней графической видеокарты.
b) Есть внешняя графическая видеокарта
У тех у кого нет, внешней графической видеокарты, те будут любоваться шедевром Малевича. Как например и я. Из-за жадности своей не имею внешней, видеокарты. Но на Малевича я созерцаю всего то 1,5 сек. А потом вылетаю на логотип Gigabyte на 2 сек. А уже потом на  своё сделанное мной меню загрузок закладок. На маме MSI , весь процесс, загрузки происходит исключительно со всеми переборами, всех PCI карт и их BIOS-ами, + логотип мамы MSI, а уже потом вылетаю на своё меню по закладкам. Вот и вся разница по загрузкам на разных мамах.
Упрежу. ВСЕМ советую сразу перепрошить BIOS мамы на самую новую прошивку, что бы отбросить все нюансы по загрузчикам. Так. Вроде всё разъяснил, по поводу Малевича.
Дальше у меня в мануале по маме Gigabyte сказано:


PCIe 1 Slot Sets the graphics card on the PCIEX16 slot as the irst display.(Default)
 This item is conigurable only when CSM Support is set to Enabled.
CSM Support
Enables or disables UEFI CSM (Compatibility Support Module) to support a legacy PC boot process.
Disabled  Disables UEFI CSM and supports UEFI BIOS boot process only. (Default)
---------- Перевод--------
Слот PCIe 1. Устанавливает видеокарту в слоте PCIEX16 в качестве первого дисплея. (По умолчанию)
Этот параметр можно настроить только в том случае, если для параметра «Поддержка CSM» установлено значение «Включено».
Поддержка CSM
Включает или отключает UEFI CSM (модуль поддержки совместимости) для поддержки процесса загрузки устаревшего ПК.
Отключено. Отключает UEFI CSM и поддерживает только процесс загрузки UEFI BIOS. (По умолчанию)
--------
 

Вот именно этот режим у меня на маме, заставляет появляться Малевича. Т.е. тут главная надпись имеет слова «Включает или отключает UEFI CSM (модуль поддержки совместимости)»
Т.о. получаем квест логику алгоритма. Чтобы поиметь MBR (Legacy), мне нужно обяза включить CSM режим, при этом естественно будет отключён UEFI загрузка от BIOS-а, + отключиться сразу внешняя видеокарта, и видео будет перенаправлено на шину PCIх16. Что тут не понятно?
Почему я так зациклился на MBR, расскажу позже. Пока разберёмся с мамой. У меня режим CSM есть в 2-ух местах. В 1-ом мете он виден сразу, и там просто – enable/disable. При этом я выставляю, его как «enable», а мама всё равно его после вкл компа выставляет в «disable». И из-за этого нюанса, я так и не смог загрузиться с контролёра в установленную там в ssd ОС. Мама постоянно меня загружала только UEFI. И ни в какую не хотела грузиться с MBR загрузчика.
Во 2-ом месте, где прописан CSM, он запрятан (настоящий квест). Вот что написано по этому поводу в мануале.


Disabled      Disables UEFI CSM and supports UEFI BIOS boot process only. (Default)
   Enabled      Enables UEFI CSM.
Storage Boot Option Control
  Allows you to select whether to enable the UEFI or legacy option ROM for the storage device controller.
   Do not launch    Disables option ROM.
   UEFI        Enables UEFI option ROM only.
   Legacy      Enables legacy option ROM only. (Default)
	 This	item	is	conigurable	only	when	CSM Support is set to Enabled.
  & Other PCI devices
  Allows you to select whether to enable the UEFI or Legacy option ROM for the PCI device controller other 
than the LAN, storage device, and graphics controllers.
   Do not launch    Disables option ROM.
   UEFI        Enables UEFI option ROM only. (Default)
   Legacy      Enables legacy option ROM only.
	 This	item	is	conigurable	only	when	CSM Support is set to Enabled.
---------------- перевод ----------
Отключено Отключает UEFI CSM и поддерживает только процесс загрузки UEFI BIOS. (По умолчанию)
Включено Включает UEFI CSM.
Управление параметрами загрузки хранилища
Позволяет выбрать, следует ли включить UEFI или устаревшее ПЗУ для контроллера устройства хранения данных.
Не запускать Отключает ПЗУ параметров.
UEFI Включает только ПЗУ параметров UEFI.
Legacy Включает только устаревшее ПЗУ параметров. (По умолчанию)
Этот параметр можно настроить только при включенной поддержке CSM.
и другие устройства PCI
Позволяет выбрать, следует ли включить UEFI или устаревшее ПЗУ параметров для контроллера устройства PCI, отличного от контроллеров LAN, устройства хранения данных и графического контроллера.
Не запускать Отключает ПЗУ параметров.
UEFI Включает только ПЗУ параметров UEFI. (По умолчанию)
Legacy Включает только устаревшее ПЗУ параметров.
Этот параметр можно настроить только при включенной поддержке CSM.

---------

По простому, это звучит так. Если «тут» выставить CSM вкл. то можно грузиться из встроенной памяти ROM контролёров которые стоят в PCI платах или же в NET сети.
А что это означает, когда звучат такие слова как «CSM» и «Legacy» привязанные к памяти ROM контролёров которые стоят в PCI шине? А то что в ROM памяти этих контролёров стоят загрузчики MBR, прототипа загрузчика дискеты WinPe.
И поэтому что бы мне загрузится с контролёра ASM1061R, с установленных там ssd c ОС, мне обяза нужно выставить маму, в режим загрузки, в режиме MBR («Legacy»). Тогда мама полезет сразу в PCI шину, и будет ТАМ искать загрузчик MBR. А контролёр ASM1061R который стоит там и только и ждёт кто его спросит по стандарту «MBR» отвечает, «Я тут!!!» и подсовывает маме, свои установленные в него ssd. И только тогда ОС начинает грузиться с этих SSD.
Вот такой вот квест с этими мамами и контролёрами. Есть конечно и свежие контролёры с UEFI, но они не для меня, у меня нет таких денег. Я все деньги потратил на яхты, себе и жене, с детьми. Из сказанного выше, вы должны понять, что загрузчик, в SSD должен быть на MBR дисках, а не на UEFI. Вот почему у меня получается, что я гружусь в MBR, а имею диск «С» UEFI (потому что vhdx у меня UEFI, лежащий в ssd который MBR).
Короче. Чтобы мама запомнила, что мне нужно установить
«навечно»  CSM вкл, я должен ещё и в другом месте установить что мол я хочу что CSM вкл. Но эта строка появляется только тогджа когда я выствляю в меню BIOS-а


Secure Boot
 Allows	you	to	enable	or	disable	Secure	Boot	and	conigure	related	settings.	This	item	is	conigurable	only	
when CSM Support is set to Disabled.
----- перевод -------
Безопасная загрузка
Позволяет включить или отключить безопасную загрузку и настроить связанные с ней параметры. Этот параметр настраивается только
когда для параметра «Поддержка CSM» установлено значение «Отключено».
---------

Т.е. в начале я должен вкл. «Secure Boot», только после этого появиться добавочные меню (как в игре с квестами, где открываются секретные комнаты), в которых доп. Выставляются параметры по ROM PCI шине, и можно только после этого выставить CSM, что бы мама запомнила.
Это я вам  так подробно рассказал, что бы вы не отчаивались. И внимательно изучили свою маму.
1- В начале «Secure Boot»
2- Потом «CSM»
3- Потом «Legacy»
Приступим к самой плате PCI.
С ней тоже не так всё просто. Все привыкли, что когда на плате есть некие перемычки, то они обяза на что то влияют. А вот на этой плате не так. И поэтому все натыкаются на глухую стену, пытаясь загрузиться в BIOS переставляя ЭТИ перемычки. Но как вы все поняли от них загрузка не влияет.

Надо приобрести PCIe карту с контролёром  ASM1061R. Я брал на авито, за 500р. Ребята тормошили компы, пришедшие к ним на заказ в фирму, а в них в комплектации были эти карты. Т.е. муха не садилась. И ОНИ их выставили на авито. Ищите те, которые продаются БЕЗ CD-rom. Всё драйвера и проги вы скачаете сами. Главное цена вопроса. У меня мамы обе имеют выставлялку по шине PCI в режимах GEN-2 и GEN-3. В той маме у меня , где есть режим GEN-3, карта выставилась с поддержкой режима GEN-2, хотя я выставил принудительно в маме режим GEN-3. На сайте производителя он заявлен как «ASM1061R | PCIe Gen2 x1 to 2 Ports SATA 6G III RAID» что соответствует скоростям по шине PCI как SATA3 6G
xxx://www.asmedia.com.tw/Web2/product/9 … uAsY2.html
https://avatars.mds.yandex.net/i?id=387c0944ae55c00fa7beb8c1c5421cc516748353-5339460-images-thumbs&amp;n=13
Поэтому обяза слазейте в BIOS своей мамы и найдите у себя ЭТУ выставлялку, иначе не получите нужных скоростей по SATA через PCI шину. На картинке, вы видите те самые перемыки.
market.yandex.ru/card/kontroller-pcie-x … mp;ogV=-10
Которые стоят ближе к железной планке, и сверху которых, нарисована таблица, параметров выставления их в разные режимы. Нам в самом начале нужно только одна вытсавлялка ИХ, все перемыки стоят в сторону железной планки. В таблице на плате этот режим обозначен как AHСI режим.
https://avatars.mds.yandex.net/i?id=e32dc7dd26aee54a499a2851d45d42783de0f80c-12450907-images-thumbs&amp;n=13.
Что делаем?
1- На котролёре проверяем чтобы перемыки стояли в режиме AHСI
2- Вставляем шланги к портам на контролёре SATA.
3- Подписываем эти шланги (со стороны SSD дисков) как ПОРТ 0 и ПОРТ 1 (скотчем), относительно надписей их на плате контролёра. Когда будет сбой, скажите мне спасибо что заранее посоветовал соломку подстелить.
4- Вставляете в маму PCI контролёр.
5- Цепляете, к шлангам SATA чистые/грязные SSD 2-е шт.
6- На маме в BIOS-е, выставляете загрузку с PCI «Legacy» (или MBR)
7- Вставляете в USB3 свой ранее сделанный загрузочный vhdx. Но можно и оставить и в SATA, без разницы. Всё равно нужно будет грузиться в ОС или из SATA или из USB3. Главное это нам нужна ОС.
8- В ОС загружаете где либо прогу.


asmedia_RaidMan_3.130.zip (size=1752kb)
Я качал из station-drives.com

--- и описание проги ------
хххх://ableconn.com/upload/RaidManagerT … .130v2.pdf
9- Прога не установочная. Сразу засекает вашу карту и… видит что у вас стоят 2-а SSD. Поэтому сразу предупрежу. Ставьте 2-а SSD сразу. В проге жмёте «MODE CHANGE» (см описание в PDF). Там выставляете режим «Normal», при этом ставите галки напротив ваших ssd дисков (которые справа). Жмёте «EXECUTE». Прога запустит графическое окно с  двигающей полоской, индикатором процесса. Т.е. эта карта пометит себе что у неё стоят 2-а SSD, при этом она подгрузит сразу к вам в ОС свои драйвера к ней. Эта софтина служит для установки параметров RAID и монитора его. Этот процесс (разметки SSD в AHСI моде) всегда необходим при  первой инициализации SSD. При этом ЭТА первая инициализация происходит только тогда когда на карте установлены перемыки в режим AHСI. Иначе вы будите получать фигу с маслом.
Эта прога заменяет полностью режим захода в BIOS контролёра при вкл компа. И с помощью её можно без проблем настроить все RAID режимы. + она мониторит процесс состояния дисков
10- После этого как прога покажет что ваши SSD «GOOD», опять заходите в «MODE CHANGE» и уже там метите RAID1. И опять жмете  «EXECUTE». После этого прога вам должна показать статус RAID1 и напротив всех SSD «GOOD». После этого можете ставить в плате пермыки как RAID1. И они будут служить вам только как защита от дурака. Т.е. уже никакие установки в BIOS-е контролёра или в этой проге не смогут повлиять на установки RAID. Т.е. это своеобразная защита от дурака, вот что означают эти перемыки.

Всё. С контролёром закончили. Перейдём к установке в эти SSD ОС win10. Т.к. контролёр требует загрузчик, MBR, то мы обязаны изготавливать диски в режиме MBR, иначе мы не сможет загрузиться с них. Поэтому что бы нам упростить задачу индификации, этого RAID1 , предлагаю упр.комп упр дисками-> ищем диск под именем «ASMT106x_V0Safe». Это имя можно увидеть если вы справа напротив диска нажмете пркнмыши -> свойтсва. Там вверху будет написано имя диска. Если вы в проге выберите установить RAID0 , то имя будет «ASMT106x_V0Speed».
Инициализируете этот диск как MBR, делаете ему раздел во всё пространство, и форматирует, и даёте ему имя «RAID1». Нафиг ЭТО надо? Потом поймёте.
Загружаемся, с флешки WinPE, и там пишем.


Diskpart
lis vol
[i] У вас будет список букв дисков и их имена. И вы увидите вашу  метку «RAID1». Предположим что эта метка «RAID1» имеет том под номером 2. Пишем [/i]  
Sel disk 2
[i] Этим способом выбора диска через метку, гарантирует вам что вы не попортите другой ваш диск, а выберите именно ваш новый SSD RAID1. Пишем [/i]
Clean
Convert mbr
create partition primary size=100
format quick fs=fat32 label="SYSTEM"

[i] Вот тут мне надо пояснить вам. В стандартном варианте, файловая система в загрузчике MBR форматируется в NTFS. Если его форматнуть в NTFS то вы не сможете делать полноценные меню  к закладкам. Поэтому что бы мне обеспечить изготовление меню по закладкам я форматирую в файловую сиcтему загрузчик в  FAT32 . Пишем [/i]
assign letter="S"
active
create partition primary
format quick fs=ntfs label="RAID1"
assign letter="Y"
lis vol

[i] Ищите свой диск SSD в котором лежат ваши файлы VHDX (первая мама «w10.vhdx» и МЕНЮ «boot_menu.vhdx»). Предположим они лежат на диске «F» Пишем [/i]
exit

[i] Копируем чистую маму с w10 [/i]
copy     f:\ w10.vhdx    Y:\ w10.vhdx
[i] Копируем закладку от мамы «МЕНЮ» [/i]
copy     f:\ boot_menu.vhdx    Y:\ boot_menu.vhdx

[i] После того как всё скопируется, пишем [/i]
 
diskpart
sel      vdisk      file     Y:\ boot_menu.vhdx
attach
lis  vol 
[i] Ищите свой диск который имеет метку сделанную вами ранее при развороте win10 в vhdx файл «w10_vhdx».  Предположим он имеет букву «D» Пишем [/i]
exit

cd    /d     d:\windows\system32
bcdboot
bcdboot   d:\windows   /s    S:
bcdboot   d:\windows   /s    S:  /f    BIOS
[i] Прога напишет что она записала загрузчик. [/i]

ВСЁ. ВЫКЛ комп. Вытаскивайте, флешку. И вытаскивайте тот ваш SSD в котором вы делали ранее vhdx файлы. Но можете его оставить, для того что бы с него скопировать остальные ваши закладки в SSD RAID1. Но тогда для того что бы загрузиться с RAID1, нужно вам будет нажать F11/F12, что бы выбрать диск RAID1 для загрузки. Т.к. при первой загрузке в RAID1 у вас нет меню, то вы сразу попадёте в закладку «МЕНЮ», в которой можете уже копировать все остальные закладки и мамы на диск RAID1 из SSD. И делать тут меню загрузки. Но это произойдёт ЕСЛИ ВЫ ВСЁ В BIOS-е мамы выставили правильно.
При первом впечатлении вам будет казаться что RAID1 очень медленный. Но это потому что при инициализации RAID1 и при изготовлении вами там основного раздела вы форматировали ускоренно. Поэтому постепенно контролёр в фоне будет там форматировать и оптимизировать сам этот RAID1. И вы через 2-4 раза увидите уже нормальную быстрою работу в ОС.

Post's attachments

asmedia_RaidMan_3.130(station-drives.com).zip 1.71 mb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

12 (изменено: 3wedsmncjklvjvd73734, 2026-01-21 09:08:38)

Re: OFF: VBS Не убиваемая windows 10. Делюсь опытом.

решил использовать те 1-а свои hdd, которые ранее стояли в компе. Которые я заменил на ssd.
Знаю что если  взять диск, который ранее использовался, в "пространстве", и его подключить к компу
то он отобразит себя как пространство, с предупреждением, что не хватает ещё дисков.
Т.е. в hdd прописывается внутри инфа, которая заставляет, другие ОС-ы и компы, видеть это "пространство".
Т.к. ОС отображает его как "пространство", то в

diskart

он не виден, и его можно увидеть только в "дисковое пространство"
А удалить, его от туда не просто. Надо что бы ОС стёрло в нём инфу о пространстве, при этом оставила всю юзерную инфу на hdd.
Как его удалить, вы знаете (чит. выше посты).
Но есть ещё способ. Виктория. тоже описан выше.
Но если использовать Виктория, тогда юзерная инфа стирается вместе с пространством.
Поэтому ЕСЛИ ВЫ ХОТИТЕ ОСТАВИТЬ СВОЮ ИНФУ НА ДИСКЕ, ТО ДЕЛАЙТЕ ВСЁ ПО УМУ в "пространстве".
При этом когда диск удалиться из пространства, то инфа на нём вся сохраниться. Но при этом все данные о пространстве с этого диска исчезнут.
Это как "разделить зеркало", в управлении дисками.
И вот когда я подцепил свои вынутые hdd, я получил полностью отдельные 2-а зеркальные диска. И теперь могу с ними делать что угодно.
И ещё заметил странность. После того как я этот hdd очистил в

diskpart --> clean

, я его не смог в упр дисками, форматнуть в ReFS,
ОС предложила только в NTFS. А вот уже после NTFS, она предложила повторно форматнуть в ReFS.
...

И ешё.
Делать или нет резервную копию данных программного RAID?

  • Пишут и знаю, что когда накрывается RAID, на контролёре (например как у меня ASM1061R), или мама в которой стоял этот контролёр.
    И если он не RAID0, то данные с него можно получить в 100% виде через USB переходник. Безо всех лишних процедур типа "разделить зеркало".
    Я проверял, работает. При этом не факт, что если накрывается мама с контролёром, то этот RAID будет виден в другой маме. При накрытии ОС, тут всё понятно. RAID на контролёре и с ним ничего не случается при потере ОС.
    И если в RAID имеются 2-е копии, то нафига ещё нужна "резервная копия"?

  • И даже когда RAID софтовый, то он не пропадает при потере ОС. Его суй в другую ОС и он виден и доступен полностью на 100%

Я лично отказываюсь от наличия ещё резервной копии

13 (изменено: 3wedsmncjklvjvd73734, 2026-01-21 09:07:53)

Re: OFF: VBS Не убиваемая windows 10. Делюсь опытом.

СОН и защита ssd (uwfmgr.exe)
Столкнулся с проблемкой.
Когда установил софтовый RAID1 от карты ASM1061 (расширитель на 2-а порта по SATA3 не RAID), то скачал с
хххs://www.station-drivers.com/index.ph … ng,fr-fr/

для него драйвер . Он установил, сразу драйвер и для ASM1061R. 
https://allwebs.ru/images/2026/01/21/9736860a289b37179d6f6c7fa029ae4f.jpg
И жил не тужил. До установки карты ASM1061 (расширитель на 2-а порта по SATA3 не RAID), у меня СОН и наличия самого драйвера на ASM1061R не возникало проблем. Короче. При установки карты ASM1061R, и запуске проги "ASMEDIA RAID Manadger", сразу устанавливается драйвер для него (см скрин) со словом RAID. И СОН работал как часы. А при установки карты ASM1061 (расширитель на 2-а порта по SATA3 не RAID), то драйвер не виден был. Решил установить (см линк). Установил, и появился 2-а драйвера , один не RAID , второй RAID.
И вот тут появились проблемы. Синий экран смерти после просыпа из сна. ОС не страдала, чётко RAID1 срабатывал. А вот синий экран смерти не понравился. В нём были написаны строки типа

"FLTMGR.SYS"

.
Удалил драйвер с помощью "панель упр->программы и компоненты". Тогда в диспетч. устройств, пропали драйвера не только от ASM1061 но и от ASM1061R (см скрин). Сон при этом конечно пахал на ура. Но тогда при загрузке в ОС и при выборе любого диска из 1трб раида1 (у меня пространство разбито на 4 раздела и каждый имеет свою букву диска), сразу инициализировались все буквы дисков. при этом сразу открывалось 4-е окна проводника, как будто я вставлял 4-е флешки. Т.е. получается что без драйвера ОС с защитой, не может сразу закишировать все диски.
Пришлось опять устанавливать драйвер (см линк), и уже в дисптч. устройств удалять только драйвер с ASM1061 (без RAID). При этом остался драйвер ASM1061R с RAID. И после этого СОН и проводники с инициализацией дисков работают как часы и при наличии драйвера в диспетчере устройств на ASM1061R.
ВЫВОД? Не надо устанавливать драйвер ASM1061 от см выше линк.
Т.е. установили карту с ASM1061R, запустили софт на RAID от ASMEDIA и этого хватит, что бы полноценно работать с картами ASM1061 и с софтовым RAID и с защитой SSD.

14 (изменено: 3wedsmncjklvjvd73734, 2026-01-21 21:43:06)

Re: OFF: VBS Не убиваемая windows 10. Делюсь опытом.

Для монитора состояния RAID1 на контролёре ASM1061R, я использую софтину от  ASMEDIA (см пост выше, там она выложена). Но она не запускается в автозапуске в моей ОС (см самый первый пост). Приходиться руками. Что бы она запускалась в автозапуске при заходе в вин, нужно её включить в "планировщик заданий". он чётко срабатывает запуск прог от админа, не привлекая вниманием, на себя с помощью UAC окна на подтверждение на запуск.
Как туда установить, найдите в иннете. Там всё просто.
.. Да , и ещё.
Если будите искать драйвера сами то ищите по
VEN_1B21&DEV_0622&SUBSYS_10601B21 --> (ASM1061R)
У ASM1061 другой DEV, (VEN такой же)
И поэтому софтина от ASMEDIA его не видит. Она заточена именно под
VEN_1B21&DEV_0622, о чём там и пишет в окне мониторинга по RAID1.

15 (изменено: 3wedsmncjklvjvd73734, 2026-02-01 05:36:32)

Re: OFF: VBS Не убиваемая windows 10. Делюсь опытом.

Есть такая стратегия в игре "нарды" -> "Улучшиться в домике"
Так вот я начинаю улучшаться в "домике".
А именно. Есть вот такая штука-->
хххх://stackoverflow.com/questions/4151 … -vbscript

см в самом низу код. Код оч при оч крут.
Пашет на ура. Я его переделал под себя.
Цель
1- В планировщике заданий, каждые 5 минут, будет запускаться заного VBS скрипт, который будет опрашивать мои хотелки (функции).
В данном случае, оставшуюся память защиты ssd, и опрос состояния дискового пространства. "Завтра" на ум придёт ещё хотелка--> нет проблем без копилирования пиши - не хочу, и будет новый опрос. В онлайне меняй что хочешь. Запуск VBS через планировщик--вещь .
2- В этом VBS рбъявлен WSC как СОМ , который зарегин в системе как настоящий ком . В свете последних изысканий-->
https://forum.script-coding.com/viewtop … 46#p163046
это можно сделать запросто.

Схема такая. VBS это онлайн скрипт. исправляется на лету. WSC зарегин как настоящий СОМ, а то что ОН тоже скрипт, то не меняя в нём имени СОМ зарегистрированного объекта , а только "кишочки", можно так же в онлайне его редактировать, при этом не нарушая работу общей моей задумки. В WSC будет объект проводник. в VBS будет Dictionary в который будут впихиваться данные от функций VBS. И при помощи СОМ WSC этот Dictionary будет впихиваться в "проводник"-->https://forum.script-coding.com/viewtop … 34#p162734.
В WSC так же будет функция доставания из проводника этого  Dictionary и сразу же впихивание данных в обычный массив.
3- есть  прога (см код) которая взята из "того сайта выше"

+ открыть спойлер


Option Explicit
Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")

CompileTrayApp

Dim sTrayExePath: sTrayExePath = fso.GetFile(WScript.ScriptFullName).ParentFolder & "\TrayApp.exe"
If fso.FileExists(sTrayExePath) Then
    Dim shell: Set shell = CreateObject("WScript.Shell")
    shell.Run """" & sTrayExePath & """ """ & WScript.ScriptFullName & """", 0, False
End If

Log "Script started"
WScript.Sleep 2000

Log "Doing something 1..."
WScript.Sleep 5000

Log "Doing something 2..."
WScript.Sleep 5000

MsgBox "Done"
Log "Done"

'===============================================
Sub Log(sMsg)
    Dim log: Set log = fso.OpenTextFile(WScript.ScriptFullName & ".log", 8, True)
    log.WriteLine Now & " - " & sMsg
    log.Close

    If fso.FileExists(sTrayExePath) Then
        Dim f: Set f = fso.CreateTextFile(WScript.ScriptFullName & ".tray", True)
        f.WriteLine sMsg
        f.Close
    End If
End Sub

Sub CompileTrayApp

    Dim outFolder: outFolder = fso.GetParentFolderName(WScript.ScriptFullName)
    Dim programPath: programPath = outFolder & "\Program.vb" 
    Dim trayAppPath: trayAppPath = outFolder & "\TrayApp.vb"
    Dim exePath: exePath = outFolder & "\TrayApp.exe"

    If fso.FileExists(exePath) Then
        'WScript.Echo "TrayApp.exe already exists"
        Exit Sub
    End If

    Dim sVbcPath: sVbcPath = GetLatestVbcPath()
    If sVbcPath = "" Then
        WScript.Echo "Could not find VB.NET Complier (vbc.exe)"
        Exit Sub
    End If

    ' === Write Program.vb ===
    Dim s
    s = "Imports System.Windows.Forms" & vbCrLf
    s = s & "Imports System.Management" & vbCrLf
    s = s & "" & vbCrLf
    s = s & "Module Program" & vbCrLf
    s = s & "    Function GetScriptProcessId(scriptPath As String) As Integer" & vbCrLf
    s = s & "        Dim query As String = ""SELECT ProcessId, CommandLine FROM Win32_Process WHERE Name = 'wscript.exe' OR Name = 'cscript.exe'""" & vbCrLf
    s = s & "        Dim searcher As New ManagementObjectSearcher(query)" & vbCrLf
    s = s & "        For Each proc As ManagementObject In searcher.Get()" & vbCrLf
    s = s & "            Dim cmd As String = proc(""CommandLine"")" & vbCrLf
    s = s & "            If Not cmd Is Nothing Then" & vbCrLf
    s = s & "                cmd = cmd.ToLower()" & vbCrLf
    s = s & "                If cmd.Contains(scriptPath.ToLower()) Then" & vbCrLf
    s = s & "                    Return Convert.ToInt32(proc(""ProcessId""))" & vbCrLf
    s = s & "                End If" & vbCrLf
    s = s & "            End If" & vbCrLf
    s = s & "        Next" & vbCrLf
    s = s & "        Return -1" & vbCrLf
    s = s & "    End Function" & vbCrLf
    s = s & "" & vbCrLf
    s = s & "    Sub Main()" & vbCrLf
    s = s & "        Application.EnableVisualStyles()" & vbCrLf
    s = s & "        Application.SetCompatibleTextRenderingDefault(False)" & vbCrLf
    s = s & "        Dim args As String() = Environment.GetCommandLineArgs()" & vbCrLf
    s = s & "        If args.Length < 2 Then" & vbCrLf
    s = s & "            MessageBox.Show(""Expected VBS path as argument."", ""Error"")" & vbCrLf
    s = s & "            Return" & vbCrLf
    s = s & "        End If" & vbCrLf
    s = s & "        Dim scriptPath As String = args(1)" & vbCrLf
    s = s & "        Dim pid As Integer = GetScriptProcessId(scriptPath)" & vbCrLf
    s = s & "        If pid = -1 Then" & vbCrLf
    s = s & "            MessageBox.Show(""Could not find WScript process for: "" & scriptPath)" & vbCrLf
    s = s & "            Return" & vbCrLf
    s = s & "        End If" & vbCrLf
    s = s & "        Dim trayApp As New TrayApp(scriptPath, pid)" & vbCrLf
    s = s & "        Application.Run()" & vbCrLf
    s = s & "    End Sub" & vbCrLf
    s = s & "End Module" & vbCrLf

    With fso.CreateTextFile(programPath, True)
        .Write s
        .Close
    End With

    ' === Write TrayApp.vb ===
    s = "Imports System.Drawing" & vbCrLf
    s = s & "Imports System.IO" & vbCrLf
    s = s & "Imports System.Windows.Forms" & vbCrLf
    s = s & "Imports System.Diagnostics" & vbCrLf
    s = s & "Imports System.Timers" & vbCrLf
    s = s & "" & vbCrLf
    s = s & "Public Class TrayApp" & vbCrLf
    s = s & "    Private trayIcon As NotifyIcon" & vbCrLf
    s = s & "    Private trayMenu As ContextMenuStrip" & vbCrLf
    s = s & "    Private fileWatcher As FileSystemWatcher" & vbCrLf
    s = s & "    Private vbsPath As String" & vbCrLf
    s = s & "    Private trayPath As String" & vbCrLf
    s = s & "    Private logPath As String" & vbCrLf
    s = s & "    Private parentPID As Integer" & vbCrLf
    s = s & "    Private checkProcessTimer As System.Timers.Timer" & vbCrLf
    s = s & "" & vbCrLf
    s = s & "    Public Sub New(vbsFullPath As String, pid As Integer)" & vbCrLf
    s = s & "        vbsPath = vbsFullPath" & vbCrLf
    s = s & "        parentPID = pid" & vbCrLf
    s = s & "        trayPath = vbsPath & "".tray""" & vbCrLf
    s = s & "        logPath = vbsPath & "".log""" & vbCrLf
    s = s & "        If File.Exists(trayPath) Then File.Delete(trayPath)" & vbCrLf
    s = s & "        If File.Exists(logPath) Then File.Delete(logPath)" & vbCrLf
    s = s & "        trayMenu = New ContextMenuStrip()" & vbCrLf
    s = s & "        trayMenu.Items.Add(""About"", Nothing, AddressOf ShowAbout)" & vbCrLf
    s = s & "        trayMenu.Items.Add(""Log"", Nothing, AddressOf ShowLog)" & vbCrLf
    s = s & "        trayMenu.Items.Add(""Exit"", Nothing, AddressOf ExitApp)" & vbCrLf
    s = s & "        trayIcon = New NotifyIcon()" & vbCrLf
    s = s & "        trayIcon.Text = vbsPath" & vbCrLf
    s = s & "        trayIcon.Icon = System.Drawing.Icon.ExtractAssociatedIcon(""C:\Windows\System32\wscript.exe"")" & vbCrLf 'SystemIcons.Application
    s = s & "        trayIcon.ContextMenuStrip = trayMenu" & vbCrLf
    s = s & "        trayIcon.Visible = True" & vbCrLf
    s = s & "        AddHandler trayIcon.DoubleClick, AddressOf OnTrayIconDoubleClick" & vbCrLf
    s = s & "        Dim trayDir = Path.GetDirectoryName(trayPath)" & vbCrLf
    s = s & "        Dim trayFile = Path.GetFileName(trayPath)" & vbCrLf
    s = s & "        If Directory.Exists(trayDir) Then" & vbCrLf
    s = s & "            fileWatcher = New FileSystemWatcher(trayDir, trayFile)" & vbCrLf
    s = s & "            AddHandler fileWatcher.Changed, AddressOf OnTrayFileChanged" & vbCrLf
    s = s & "            AddHandler fileWatcher.Created, AddressOf OnTrayFileChanged" & vbCrLf
    s = s & "            fileWatcher.EnableRaisingEvents = True" & vbCrLf
    s = s & "        End If" & vbCrLf
    s = s & "        checkProcessTimer = New System.Timers.Timer(5000)" & vbCrLf
    s = s & "        AddHandler checkProcessTimer.Elapsed, AddressOf CheckParentProcess" & vbCrLf
    s = s & "        checkProcessTimer.Start()" & vbCrLf
    s = s & "    End Sub" & vbCrLf
    s = s & "    Private Sub ShowLog(sender As Object, e As EventArgs)" & vbCrLf
    s = s & "        If File.Exists(logPath) Then Process.Start(""notepad.exe"", logPath)" & vbCrLf
    s = s & "    End Sub" & vbCrLf
    s = s & "    Private Sub ShowAbout(sender As Object, e As EventArgs)" & vbCrLf
    s = s & "        MessageBox.Show(vbsPath, ""About"")" & vbCrLf
    s = s & "    End Sub" & vbCrLf
    s = s & "    Private Sub ExitApp(sender As Object, e As EventArgs)" & vbCrLf
    s = s & "       Try" & vbCrLf
    s = s & "           Dim parentProc As Process = Process.GetProcessById(parentPID)" & vbCrLf
    s = s & "           parentProc.Kill()" & vbCrLf
    s = s & "       Catch ex As Exception" & vbCrLf
    s = s & "       End Try" & vbCrLf
    s = s & "        trayIcon.Visible = False" & vbCrLf
    s = s & "        If fileWatcher IsNot Nothing Then fileWatcher.EnableRaisingEvents = False" & vbCrLf
    s = s & "        If checkProcessTimer IsNot Nothing Then checkProcessTimer.Stop()" & vbCrLf
    s = s & "        Application.Exit()" & vbCrLf
    s = s & "    End Sub" & vbCrLf
    s = s & "    Private Sub OnTrayIconDoubleClick(sender As Object, e As EventArgs)" & vbCrLf
    s = s & "        If File.Exists(logPath) Then Process.Start(""notepad.exe"", logPath)" & vbCrLf
    s = s & "    End Sub" & vbCrLf
    s = s & "    Private Sub OnTrayFileChanged(sender As Object, e As FileSystemEventArgs)" & vbCrLf
    s = s & "        Try" & vbCrLf
    s = s & "            Threading.Thread.Sleep(100)" & vbCrLf
    s = s & "            Dim content = File.ReadAllText(trayPath).Trim()" & vbCrLf
    s = s & "            If content.ToLower() = ""done"" Then" & vbCrLf
    s = s & "                ExitApp(Nothing, Nothing)" & vbCrLf
    s = s & "            Else" & vbCrLf
    s = s & "                trayIcon.BalloonTipTitle = ""Update from "" & Path.GetFileName(vbsPath)" & vbCrLf
    s = s & "                trayIcon.BalloonTipText = content" & vbCrLf
    s = s & "                trayIcon.ShowBalloonTip(3000)" & vbCrLf
    s = s & "            End If" & vbCrLf
    s = s & "        Catch ex As Exception" & vbCrLf
    s = s & "        End Try" & vbCrLf
    s = s & "    End Sub" & vbCrLf
    s = s & "    Private Sub CheckParentProcess(sender As Object, e As ElapsedEventArgs)" & vbCrLf
    s = s & "        Try" & vbCrLf
    s = s & "            Dim running = Process.GetProcesses().Any(Function(p) p.Id = parentPID)" & vbCrLf
    s = s & "            If Not running Then ExitApp(Nothing, Nothing)" & vbCrLf
    s = s & "        Catch" & vbCrLf
    s = s & "            ExitApp(Nothing, Nothing)" & vbCrLf
    s = s & "        End Try" & vbCrLf
    s = s & "    End Sub" & vbCrLf
    s = s & "End Class" & vbCrLf

    With fso.CreateTextFile(trayAppPath, True)
        .Write s
        .Close
    End With

    Dim shell: Set shell = CreateObject("WScript.Shell")
    Dim cmd: cmd = """" & sVbcPath & """ /target:winexe /reference:System.Management.dll /out:""" & exePath & """ """ & programPath & """ """ & trayAppPath & """"
    shell.Run cmd, 0, True

    fso.DeleteFile programPath
    fso.DeleteFile trayAppPath
End Sub

Function GetLatestVbcPath()
    Dim baseKey, versions, v, bestVer, bestPath, dir
    Dim candidates: candidates = Array("C:\Windows\Microsoft.NET\Framework64", "C:\Windows\Microsoft.NET\Framework")
    bestVer = 0
    bestPath = ""

    For Each dir In candidates
        If fso.FolderExists(dir) Then
            Set versions = fso.GetFolder(dir).SubFolders
            For Each v In versions
                If LCase(Left(v.Name, 1)) = "v" Then
                    Dim fullPath, vbcPath, numVer
                    vbcPath = dir & "\" & v.Name & "\vbc.exe"
                    If fso.FileExists(vbcPath) Then
                        numVer = CSng(Replace(Mid(v.Name, 2), ".", ",")) ' e.g., v4.0.30319 = 4.0
                        If numVer > bestVer Then
                            bestVer = numVer
                            bestPath = vbcPath
                        End If
                    End If
                End If
            Next
        End If
    Next
    GetLatestVbcPath = bestPath
End Function

Который:
1-делает 2-а файла. Один как для app(exe), второй как класс.
2-компилирует его в Framework как VB.net.
3- запускает с аргументом себя работающего (запущенного)...
4- прога загружается в трей винды и посылает месяги юзеру.
5- через N времени она исчезает- закрывается (убивается сама).
...
Я этот код переделал.
убрал лишнее оставил только месяги по времени и иконки свои динамические.
В этот код добавил свой СОМ WSC.
Но т.к. все СОМ объекты тупо просто копируются, то тот СОМ в VBS ничего не знает о СОМ-е который в tray написанный на VB.NET.
Но они чётко идентичны. Т.е. меняя на лету в файле WSC можно шаманить в онлайне и в exe .
Т.к. сам CОМ (WSC) имеет связь с "проводником", то как раз проводник и связывает их в между собой.
VBS впихивает в проводник Dictionary, а exe в трее его принимает. Я вот сейчас подумал, что лучше сразу массив посылать, безо всяких там заморочек с Dictionary.
Короче.
1- планировщик запускает по N времени VBS. Он делает мои хотелки по опросам.
2- VBS впихивает результтаты опроса в массив и посылает в проводник.
3- WSC принимает через проводник массив и отдаёт его exe который по времени выкидывает месяги в трее для юзера.
При этом меняя свою иконку, по желанию VBS юзера.
...
Можно конечно обойтись и без WSC и напрямую связать проводник с VBS и exe в трее. Но я решил лучше через лишнюю прокладку WSC.
Потому что возможно "завтра", я захочу расширить массив или что ещё. Если связь будет вшита в exe то надо перекомпилировать exe . А если связь будет через WSC то он не нуждается в копиляции.
..
ПОЧЕМУ именно WSC? Да потому что VBS проще чем VB.NET, и там ковыряться с  Dictionary который вообще не известен в VB.NET нафиг мне не здался... Я же не переводчик какой то там, который должен знать на 100% оба языка?

16 (изменено: 3wedsmncjklvjvd73734, 2026-02-01 12:23:54)

Re: OFF: VBS Не убиваемая windows 10. Делюсь опытом.

Начнём, постепенно.
Выкладываю маленькую пробную, показательную прогу, по которой  можно будет судить как это будет работать сервер-клиент.
Там всё с коментами, что бы все поняли что и как, что бы потом подправили для себя.
Пока этот пример как бы основа, самое начало передачи и приёма данных через сервер "проводник".
файл ПРОВОДНИК.wsc

+ открыть спойлер

<?xml version="1.0" encoding="windows-1251" standalone="yes"?>
<?component error="true" debug="true"?>

<component>
<comment> --------------------------------------- </comment>
<comment> Создаём компонент с именем которое булет иметь при создании объекта COM </comment>
<comment> и под которым оно зарегестрируется для COM </comment>
<comment> --------------------------------------- </comment>

<registration progid="Server_Trye.Explorer"/>

<comment> --------------------------------------- </comment>
<comment> обозначаем как PUBLIC все функции и процедуры, что бы их вызывали стороние проги </comment>
<comment> --------------------------------------- </comment>

<public>
    <method name="Get_t"/>
</public>

<comment> --------------------------------------- </comment>
<comment> объявляем переменную, ShellWindows_ как объект "Shell.Application" </comment>
<comment> За счёт такого объявления всё процедуры и функции его будут иметь</comment>
<comment> Т.е. она будет для этого скрипта как глобальная переменная</comment>
<comment> --------------------------------------- </comment>
<object id="ShellWindows_" progid="Shell.Application"/>


<comment> --------------------------------------- </comment>
<comment> Элемент 'implements' задаёт обработчик COM-интерфейса для компонента </comment>
<comment> скрипта, определяя тип COM-компонента, которым будет являться компонент </comment> 
<comment> скрипта. Например, указав 'implements type=ASP', вы реализуете обработчик  </comment>
<comment> интерфейса ASP и, следовательно, получаете доступ к объектной модели ASP в  </comment>
<comment> вашем компоненте скрипта. От себя. Короче- пусть будет</comment>
<comment> --------------------------------------- </comment>
<implements type="ASP"/>


<comment> --------------------------------------- </comment>
<comment> Всё. на этом абракадабровый код закончен, и перехоит в банальный VBScript</comment>
<comment> --------------------------------------- </comment>

<script language="VbScript"><![CDATA[

'------------ настоящий VBS скрипт. Изголяйся как хочешь, и не надо знать всякие теги и т.д.

'--------------------------------------------------------
Dim My_type_
'--------------------------------------------------------

'--------------------------------------------------------
'--объявляется все перменные и назначается объект который был 
' -обозначен как глобальный (см выше). И который имеет свойтсво Windows    
'--------------------------------------------------------
Dim W_,w,Get_
Set W_=ShellWindows_.Windows
'--------------------------------------------------------

'--------------------------------------------------------
' -Каждая функция GET и PUT сама делает поиск в прогах имени "tray" (см VBS скрипт)
' - VBS скрипт в эти функции посылает имя которое необходимо искать в прогах.    
' - Когда находит, то начинает по первой переменной COUNT делать цикл перебор всех имён key в Dictionary
' - Читая по ним данные. 
'--------------------------------------------------------
'==============GET==========================
Function Get_t(Byval name,Byval Key_) 
        For Each w in W_
            if Instr(1,w.StatusText,name) = 1 Then
'--------------------------------------------------------
'- Устанавливаем тип объекта который получили от проводника
'- и объявляем его, конечно мы знаем его, но вот так можно автоматом узнать что там за объект 
'- VBS автоматом узнаёт что за объект и назначает его переменной
'--------------------------------------------------------
Set My_type_= w.GetProperty(Key_)

'--------------------------------------------------------
'- возвращаем весь объект Dictionary
'--------------------------------------------------------
Set Get_t = My_type_
'--------------------------------------------------------
	exit function
	end if	
	next
end function



'--------------------------------------------------------
' - функция PUT в WSC файле мне не нужна. Поэтому я её не писал тут
'==============PUT==========================
'--------------------------------------------------------

]]>
</script>

<comment> --------------------------------------- </comment>
<comment> На этом теге заканчивается тег со скриптами</comment>
<comment> --------------------------------------- </comment>

</component>


Потом файл
ПРОВОДНИК.vbs

+ открыть спойлер

'============================
'- В командной строк от админа
'============================
'- регистрация WSC 
'============================
'C:\Windows\system32>regsvr32    scrobj.dll /n /i:file:\\полный путь к файлу wsc\ИМЯ файла .wsc
'============================
'- удвление регистрации WSC 
'============================
'C:\Windows\system32>regsvr32    scrobj.dll /u /i:file:\\полный путь к файлу wsc\ИМЯ файла .wsc
' - При этом происходит полностью провера кода в WSC файле. И если там ошибка, то будет сообщние где ошибка.
'- И при этом удаление регистрации не происходит. Пока не исправите ошибку регистрация и ужаление её не произойдёт  '============================


Option Explicit
'============================

'============================
'- объявляются переменные
'============================
Private ShellWindow, ShellWindows, T_, name_, Me_T ,One_
'============================

'============================
'- назначаем переменную "Me_T", как Dictionary
'============================
set Me_T=CreateObject("Scripting.Dictionary")

'============================

'============================
'- Глобальное имя свойства в переменной name_
'============================
name_="tray" 
'============================
'- самый первый key в свойтсвах проводника 
'============================
One_="0"
'============================

'============================
' - посылаем в процедуру запись/поиска в проводник свойства в глобальной переменной name_
'============================
Call OpenContainer (name_) 
'============================

'============================
'-- Записываем  данные значения , 
'-  key и значения в Dictionary
'============================
Me_T.add "test", "34345"
Me_T.add "fso" , "dfvddg"
Me_T.add "1" , "2342242"
Me_T.add "ааа" , "3рет67о"
Me_T.add "123_цуц" , "111111111111"
Me_T.add "гг577HHH" , "ЛЛЛ РРРР"
'============================

'============================
'-посылаем весь объект Dictionary с данными для записи  в проводник, c key = "0" раной переменной One_
'- это будет всего одна запись но со всем объектом сразу и с его содержимом 
'============================
call N (One_, Me_T) 
'============================

'============================
'-Процедура первой записи (name name_="tray") в проводник свойтсва которое потом 
'-будет как метка для поиска его во всех прогах в винде. 
'============================
    Sub OpenContainer(name)
        Dim ShellWindows
        Set ShellWindows = CreateObject("Shell.Application").Windows '-оюъявдяется как прога в вине.
        For Each ShellWindow in ShellWindows '- перебор всех прог в вине
'============================
'-поиск в прогах в свойтве её, имени которое имеет переменная name
'- Если имя совпало, то останавливается поиск и переменная ShellWindow назначается 
'-той прогой, в которой нашли это своёство с этим именем
'============================
            if Instr(1,ShellWindow.StatusText,name) = 1 Then Exit Sub 
         Next
'============================
'- Если ничего не нашли, то создаём и записываем это свойство в проводник.
'============================
        Set ShellWindow = GetObject("new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}") 
        ShellWindow.StatusText = name
    End Sub

'============================
'-Процедура записи в проводник 
'============================
Sub N(name, newValue)
        ShellWindow.PutProperty name, newValue
End Sub
'============================
   
'============================
'-объявляется объект WSC 
'============================
Set T_ = CreateObject("Server_Trye.Explorer") 
'============================

Dim O_,K_,v_,x

'============================
'-читается из объекта WSC, то что он прочёл в проводнике.
'- посылаем туда  имя свойства проги в которой эта запись есть. 
'- и посылаем первое имя которое там записано (переменная One_), 
' - По этому имени будут искаться наш Объект Distionary 
' - И При возврате  Устанавливаем тип объекта который получили от проводника
'- и объявляем его, конечно мы знаем его, но вот так можно автоматом узнать что там за объект 
'- и записываем весь объект вместе с данными в свою переменную 
'- VBS автоматом узнаёт что за объект и назначает его переменной
'============================
set O_=T_.Get_t(name_,One_)
K_=O_.keys
V_=O_.items
'============================
'- Читаем все данные
'============================
For x=0 to O_.count-1
msgbox "Key= " & K_(x) & " значение= " & V_(x)
next
'============================
' - А т.к. в exe(VB.NET) будет включон объект WSC то он(WSC) будет отдавать exe из себя то что лежало в 'проводнике. 
'============================




когда скопируете к себе то сохраняйте файл в кодировки ANSI иначе абракадабра будет вылетать.
Записали всё в файлы.
Открыли ком строку от админа и зарегили WSC СОМ библиотеку (см выше в коде написан как).
Если всё ОКи то запускаем VBS и смотрим как выпадаюи месяги.
Процесс, передачи данных от VBS в проводник, из проводника в WSC, из WSC опять в VBS.
Это демонстрация передачи данных и как это будет пахать в совместно с VB.NET в трее вина.
В данных буду передавать коды. 0-НЕ показать, 1-показать месяги. Один из Key, будет иметь имя time для передачи и установки в exe времени по которому будут выпадать месяги. Т.е. можно там вот так интерактивно динамически менять параметры.. В Key =ico будет полный путь к картинки иконки для данной месяги.
Ну короче, полностью изменяемая будет exe в трее.

17

Re: OFF: VBS Не убиваемая windows 10. Делюсь опытом.

Облом с этим WSC.
Сволочи. Регистрируется ТОЛЬКО ДЛЯ ИСПОЛНЕНИЯ В VBS. По настоящему нифига нет его в
просмоторщике по СОМ объектам.
Буду "вшивать" связь с "проводником", внутрь exe файла.

18 (изменено: 3wedsmncjklvjvd73734, 2026-02-09 23:25:55)

Re: OFF: VBS Не убиваемая windows 10. Делюсь опытом.

мда... столько времени потерял, что бы понять, что Dicionary в VBS и в VB.NET разные.
Быстренько написал, код, для передачи из VBS в VB.NET Dicionary объект через проводник. А на приёме тишина- молчёк , я и так и эдак, молчёк. Простой текст, летит со скоростью света, а этот объект нифига. Стал копать, и выяснил что это разные объекты имеющие одно имя. И поэтому созданный этот объект в VBS нифига не читается и не распознаётся в VB.NET. Хорошо что хоть биты и байты стандартны для обоих языков.
...
Поэтому пока придётся передавать тексты, ну а когда будет время то создам свою библиотеку в VB.NET как собственный тип данных, по типу Dicionary - двух мерный массив, и тогда если эту библиотеку объявлять в VBS и в VB.NET то можно связывать их вместе.
Ну а пока, по старинке, только текст, через проводник.