Опишу на всякий случай дело подробно - может выскажут решение поумнее моего. Итак.
Я пишу (на VB6) утилиту - такой самописный watchdog, который проверяет состояние другого софта, и в случае обнаружения критической или аварийной ситуации он обязан рестартовать Windows.
Для рестарта я использую простейшую команду
Shell "shutdown -r -t 2"
В целом всё работает, но обнаружилось, что в редких случаях Винда в процессе рестарта может зависнуть. Это очень плохо. Нужно что-то сделать, чтобы выкинуть ее на перезагрузку во что бы то ни стало.
Чтобы решить эту проблему, я попробовал использовать вместо shutdown функцию API ExitWindows (ExitWindowsEx). Принципиального отличия не заметил - зависания также оставались возможны. Тогда я попробовал через функцию InitiateSystemShutdown.
(Ну это вообще страх, как ее подключать... глазки на лоб(((( на счастье нашел в Нете рабочий модуль.) Короче, запустил эту функцию - и никакого выигрыша, увы(((( По одинаковости работы имею ощущение, что все они в итоге запускают один и тот же механизи рестарта (который иногда зависает).
Но делать-то что-то надо!.. В итоге не увидел другого решения, как в случае вот такого висяка запустить функцию KeBugCheck, которая, как пишет Микрософт, обязана гарантированно выкинуть систему в BSOD.
Подскажите, как запустить эту функцию в приложении VB6? Ну, там, сначала получение привилегий и всё такое... Само собой, программа запущена под админской учеткой.
Другие варианты решения приветствуются.