Здравствуйте! Очень нужно уметь возвращаться после InbvAcquireDisplayOwnership. Пишу следующее: if (InbvIsBootDriverInstalled()) { InbvAcquireDisplayOwnership(); InbvResetDisplay(); InbvSolidColorFill(0,0,639,479,4); InbvSetTextColor(15); InbvInstallDisplayStringFilter(NULL); InbvEnableDisplayString(TRUE); InbvSetScrollRegion(0,0,639,479); InbvDisplayString("Text"); } Выдает,как и должно быть, синий экран с надписью Text. Хотелось бы уметь возвращаться в предыдущий режим. Проверял следующие гипотезы: 1) Поможет IoRaiseInformationalHardError. Не помогла 2)Поможет InbvSetDisplayOwnership. В экспорте ядра её я не нашёл. Поэтому сам не проверял. Однако, если верить листингу, она тоже не поможет: .text:805299E7 ; __stdcall InbvSetDisplayOwnership(x) .text:805299E7 _InbvSetDisplayOwnership@4 proc near ; CODE XREF: PopInvokeSystemStateHandler(x,x)+27Ap .text:805299E7 .text:805299E7 bOwned = byte ptr 8 .text:805299E7 .text:805299E7 mov edi, edi .text:805299E9 push ebp .text:805299EA mov ebp, esp .text:805299EC mov al, [ebp+bOwned] .text:805299EF neg al .text:805299F1 sbb eax, eax .text:805299F3 and eax, 0FFFFFFFEh .text:805299F6 inc eax .text:805299F7 inc eax .text:805299F8 mov _InbvDisplayState, eax .text:805299FD pop ebp .text:805299FE retn 4 .text:805299FE _InbvSetDisplayOwnership@4 endp Кто,что думает на этот счёт? Заранее, спасибо.
irusrubin Про какой режим вы говорите ? По сути функции Inbv* это переходники к драйверу видеопортов(videoprt.sys). Переменная InbvDisplayState используется этим драйвером(опрос через InbvCheckDisplayOwnership()), вроде как есть специальный IOCTL(смотрите сами). Тут http://www.koders.com/c/fid982470AA7C22AF70C7599CC5352106B56F73E787.aspx нужных вам ссылок на INBV_DISPLAY_STATE_LOST или InbvCheckDisplayOwnership() также нет как и в самом ядре(InbvRotateGuiBootDisplay() не в счёт).
Clerk Когда я говорил про режим, я имел ввиду, что в InbvAcquireDisplayOwnership() вызывается InbvResetDisplayParameters(80, 50); (меняется режим видеоадаптера на используемый при загрузке системы и выводе BSOD'а) Насколько я понимаю, изменение переменной InbvDisplayState мне не поможет вернуть предыдущий режим. Повторю свой вопрос другими словами: Каким образом после того, как я вывел на экран на синем фоне слово Text методом описанным выше, мне вернуться опять в нормальный режим, т.е. увидеть рабочий стол и всё такое.
irusrubin Тогда вам нужно смотреть в сторону минипорта видео(IOCTL_VIDEO_RESTORE_HARDWARE_STATE etc.) или непосредственно шадова(NtUserChangeDisplaySettings etc.). Средствами самого ядра(nt) этого не сделать. Грейт вроде описывал гдето матчасть тут на форуме и в блоге, http://the-gr8.cih.ms/2010_01_01_archive.html