powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Режимы работы Vistax64: Disable Driver Signature..,Test mode, проверка драйвера...
5 сообщений из 5, страница 1 из 1
Режимы работы Vistax64: Disable Driver Signature..,Test mode, проверка драйвера...
    #36039963
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Небольшое введение.
Так как моя прога использует так сказать "неподписанный драйвер", то на висте/2008 x64 у нее возникают известные проблемы с установкой/работой этого драйвера.
Поковырявшись с литературой, я понял что есть 3 способа решения:
1) При каждой загрузке жать F8 и выбирать "Disable Driver Signature Enforcement", при этом никакая вообще подпись не требуется.
2) Перевести систему в "Test Mode" дав команду
Код: plaintext
bcdedit.exe -set TESTSIGNING ON
При этом надо чтобы драйвер имел хотя бы тестовую подпись (ее я через SDK делать научился), плюс user будет наблюдать слова "Test Mode" в 4-х углах экрана.
3) Покупается сертификат и драйвер становится good. Здесь замечу лично я покупать ничего не собираюсь, но теоретически user сам может заплатить бабки и подписать мой драйвер "чисто для себя", если уж он такой правильный user.

P.S. Существует также 4-й метод, который =(1) но без необходимости жать F8, но судя по описаниям на обновленных вистах это не работает, поэтому как вариант не рассматривается.

Естественно такая ситуация дел вносит некоторый бардак, и если одно из 3-х условий не выполнено то программа будет глючить, устанавливать полуфабрикаты, завешивать систему и т.п.

Передо мной стоит задача реализовать механизм проверки и механизм подталкивания usera к правильным действиям (readme, help это все понятно, но как правило люди этого этого не делают).

Т.е. надо программно узнать:
1) Является ли файл somedriver.sys "хорошим драйвером с хорошей подписью"? да/нет
2) Находится ли система в режиме "Disable Driver Signature Enforcement"? да/нет
3) Находится ли система в режиме "Test Mode"? да/нет

Возможно ли и в какие API копать?


В случае если удастся понять ответы на 1-2-3 алгоритм будет такой

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
If "x64" and "вистоподобное" then
  If (подписанный драйвер)or(режим Disable Driver Signature Enforcement ) or(Test Mode)  then
     Идем и выполняем программу
  else
     msgbox "Ну ты попал!И нужна тебе эта 64-битная виста? _
          Можешь рвать на себе волосы но у тебя 3 варианта: _
          1)Disable Driver Signature Enforcement 2)Test Mode 3) Exit"
     select case Ваш выбор
     case "Хочу test mode":
           Shell ("bcdedit.exe -set TESTSIGNING ON"), vbhide
           Хотите перегрузить компьютер прямо сейчас?
     case  "Хочу Disable Driver Signature... "
           Хотите перегрузить компьютер прямо сейчас и не забыть нажать F8 ?
     case "Мне плохо...Я расстроен и уже ничего не хочу...Пошел копить бабки и подписывать _
          ваш драйвер, хочу вернуться на XP, на x86, и т.п...."
            exit sub
  endif
else
     нет проблем
endif
Пока не искал, только сформулировал задачу. Если кто чуть подтолкнет одним-двумя правильными словами, буду благодарен...
...
Рейтинг: 0 / 0
Режимы работы Vistax64: Disable Driver Signature..,Test mode, проверка драйвера...
    #36040265
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
М.б Boot Configuration Data WMI Provider ??
http://msdn.microsoft.com/en-us/library/bb986746(VS.85).aspx
Но очень все там запутано пока для понимания и нет уверенности что это то...

http://msdn.microsoft.com/en-us/library/aa362670(VS.85).aspx
BcdOSLoaderElementTypes Enumeration
BcdOSLoaderInteger_DriverLoadFailurePolicy = 0x250000c1 ???
М.б. это?
По идее все что может это bcd может и утилита bcdedit.exe
Если запустить ее без параметров она выводит тек. статус, напр.
TESTSIGNING=ON,
но это я так понимаю стартовые параметры -конфиг.., а нужны текущие
Т.е. не как должно системе загружаться, а как она загружена в текущий момент...

Нашел еще вот это:

GetSystemMetrics Function
SM_CLEANBOOT=67
The value that specifies how the system is started:
0 Normal boot
1 Fail-safe boot
2 Fail-safe with network boot
http://msdn.microsoft.com/en-us/library/ms724385(VS.85).aspx
Даже с примером для VB
http://support.microsoft.com/kb/291664

интересно,казалось близко да не совсем.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Режимы работы Vistax64: Disable Driver Signature..,Test mode, проверка драйвера...
    #36794149
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Т.е. надо программно узнать:
...
2) Находится ли система в режиме "Disable Driver Signature Enforcement"? да/нет
3) Находится ли система в режиме "Test Mode"? да/нет
Удивительно, но я нашел ответ на эти вопросы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
   If IsWinVista Then
        'извлекаем текущие параметры загрузки из реестра в переменную SystemBootStateValue
        'ветка HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control параметр SystemStartOptions (REG_SZ)
        SystemBootStateValue = GetSystemBootStateValue
        If InStr(SystemBootStateValue, "/TESTSIGNING") >  0  Then
            LabelTestsigning.Caption = "ON"
            TestsigningON.Enabled = False
            TestsigningOFF.Enabled = True
        Else
            LabelTestsigning.Caption = "OFF"
            TestsigningON.Enabled = True
            TestsigningOFF.Enabled = False
        End If
        If InStr(SystemBootStateValue, "/DISABLE_INTEGRITY_CHECKS") >  0  Then
            LabelF8.Caption = "ENABLED"
        Else
            LabelF8.Caption = "DISABLED"
        End If
    End If
End Sub

Но я споткнулся на ровном месте:
Код: plaintext
1.
     case "Хочу test mode":
           Shell ("bcdedit.exe -set TESTSIGNING ON"), vbhide

система x64, понятно что я запускаю из под x86 если vb6.
понятно что запускаю от Администратора
При запуске через Shell проблем с запуском x64-приложения обычно не возникает
Кстати bcdedit возможно x86

Есть определенная путаница с System32/SysWOW64, но это тоже не проблема
Есть 2 функции и они вычислят оба пути:

Код: plaintext
1.
2.
3.
Private Declare Function GetSystemWow64Directory Lib "Kernel32.dll" _
Alias "GetSystemWow64DirectoryA" (ByVal lpBuffer As String, ByVal uSize As Long) As Long
Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" _
(ByVal lpBuffer As String, ByVal nSize As Long) As Long

Но здесь вот какая ерунда. Если я смотрю в проводнике, то bcdedit.exe якобы находится в System32, на самом деле ее там нет ни в System32 ни в SysWOW64
Элементарный поиск через far показывает что bcdedit реально находится в
windows\WINSXS\черт_знает_что
Но в WINSXS очень много всего, т.е. программный поиск быстрым не будет
Ну т.е. 32-битное приложение путь к bcdedit не видит.
64-битная cmd видит:

Пытался также
Код: plaintext
1.
2.
         Shell ("<system32Path>\cmd.exe /c bcdedit.exe -set TESTSIGNING ON"), vbhide
          Shell ("<sysWOW64Path>\cmd.exe /c bcdedit.exe -set TESTSIGNING ON"), vbhide
 
причем проверка показывает что в System32 лежит cmd-64bit, а в SysWOW64 лежит cmd-32bit.
Обе команды запускают слепую 32-bit cmd.

Т.е. вопрос теперь: как из 32bit командной строки (приложения) вызвать bcdedit, ну пусть в другом окне???
Как вариант конечно можно попробовать скомпилировать простенькое 64-битное "приложение-переходник", которое надеюсь будет "видеть", но хотелось бы без "наворотов".
...
Рейтинг: 0 / 0
Режимы работы Vistax64: Disable Driver Signature..,Test mode, проверка драйвера...
    #36794245
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант можно
1) скопировать system32\cmd.exe
в скажем
AppPath\cmd64.exe
2) Тогда команда
Shell ("AppPath\cmd64.exe /c bcdedit.exe -set ..."), ...
сработает как хотелось, типа кривоватое но решение....

М.б. существует что-то вместо cmd.exe?
М.б. какая API?
...
Рейтинг: 0 / 0
Режимы работы Vistax64: Disable Driver Signature..,Test mode, проверка драйвера...
    #36794634
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Как вариант можно
1) скопировать system32\cmd.exe
в скажем AppPath\cmd64.exe
Не вариант. Это только если ручками. а 32-битное App слепое, x64 винды его дурят и направляют в syswow64, где оно фиг чего сделает.

Но способ таки есть и найден был:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Private Sub TestsigningON_Click()
    Dim tempDrive As String
    If (Not (IsWinVista)) Then Exit Sub
    If Is64bit Then
        tempDrive = FreeDrive
        'GetSystemDir это system32-полный путь без черточки на конце
        ShellAndContinue "subst.exe " & tempDrive & " " & Chr( 34 ) & GetSystemDir & Chr( 34 ), vbHide
        ShellAndContinue tempDrive & "\cmd.exe /c bcdedit /set TESTSIGNING ON", vbHide
        ShellAndContinue "subst.exe " & tempDrive & " /d", vbHide
    Else
        ShellAndContinue "cmd.exe /c bcdedit /set TESTSIGNING ON", vbHide
    End If
    SetupPromptReboot ByVal  0 &, Me.hWnd,  0 
End Sub
Против лома нет приема.
Свободную первую букву для диска найти не проблема.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Declare Function GetDriveType _
    Lib "kernel32" Alias "GetDriveTypeA" ( _
        ByVal nDrive As String) _
    As Long

Function FreeDrive() As String
    Dim DriveNum As String    'To cycle through drive letters in order
    Dim DriveType As Long     'To hold the type of drive it is
    DriveNum =  64               'Prime the variable to be used in the loop
    Do
        DriveNum = DriveNum +  1    ' start at drive zero.
        DriveType = GetDriveType(Chr$(DriveNum) & ":\")
        ' If we are past C: and the drive type is indeterminate, exit the Loop
        If DriveType =  1  And DriveNum >  67  Then Exit Do
        Select Case DriveType
            'Case 0: MsgBox Chr$(DriveNum) + ": is An Unknown type"
            'Case 1: MsgBox Chr$(DriveNum) + ": Does Not Exist"
            'Case 2: MsgBox Chr$(DriveNum) + ": is a Removable Drive"
            'Case 3: MsgBox Chr$(DriveNum) + ": is a Fixed Drive"
            'Case 4: MsgBox Chr$(DriveNum) + ": is a Remote Drive"
            'Case 5: MsgBox Chr$(DriveNum) + ": is a CD-ROM Drive"
            'Case 6: MsgBox Chr$(DriveNum) + ": is a RAM Drive"
        End Select
    Loop
    FreeDrive = Chr$(DriveNum) + ":"  'Return the next available drive letter
End Function
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Режимы работы Vistax64: Disable Driver Signature..,Test mode, проверка драйвера...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]