Windows 7 загрузка драйвера без перезагрузки

Тема в разделе "WASM.BEGINNERS", создана пользователем haxorart, 11 июн 2009.

  1. haxorart

    haxorart New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    123
    Здравствуйте. Подскажите, пожалуйста, как загрузить драйвер сразу не ожидая перезагрузки? ОС - Windows 7, моя, т.е. проверка цифровых подписей отключил. Использую ZwLoadDriver. На ХР всё работает. Драйвер пустой(тестовый вариант), т.е. нет ничего такого, что может вызвать непереносимость.
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Какая нафиг перезагрузко?
    ZwLoadDriver пашет отлично у меня.
    Как используете? Какой код ошибки?
    Давайте поподробнее
     
  3. haxorart

    haxorart New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    123
    Я просто беру рабочий код ХР и переношу на 7 и загрузки не происходит. Подпись отключается по ф8->отключить проверку цифровой подписи?
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Спрашиваю еще раз.
    1)Какой код ошибки?
    2)Где исходный код?
     
  5. haxorart

    haxorart New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    123
    function InstallDriver(drName, drPath: PChar): boolean;
    var
    Key, Key2: HKEY;
    dType: dword;
    Err: dword;
    NtPath: array[0..MAX_PATH] of Char;
    begin
    Result := false;
    dType := 1;
    Err := RegOpenKeyA(HKEY_LOCAL_MACHINE, 'system\CurrentControlSet\Services', Key);
    if Err = ERROR_SUCCESS then
    begin
    Err := RegCreateKeyA(Key, drName, Key2);
    if Err <> ERROR_SUCCESS then Err := RegOpenKeyA(Key, drName, Key2);
    if Err = ERROR_SUCCESS then
    begin
    lstrcpy(NtPath, PChar('\??\' + drPath));
    RegSetValueExA(Key2, 'ImagePath', 0, REG_SZ, @NtPath, lstrlen(NtPath));
    RegSetValueExA(Key2, 'Type', 0, REG_DWORD, @dType, SizeOf(dword));
    RegCloseKey(Key2);
    Result := true;
    end;
    RegCloseKey(Key);
    end;
    end;

    function LoadDriver(dName: PChar): boolean;
    var
    Image: TUnicodeString;
    Buff: array [0..MAX_PATH] of WideChar;
    begin
    StringToWideChar(DriverRegPath + dName, Buff, MAX_PATH);
    RtlInitUnicodeString(@Image, Buff);
    Result := (ZwLoadDriver(@Image) = STATUS_SUCCESS);
    end;

    код ошибки: -1073741727 там я пользовался знаковыми числами
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    STATUS_PRIVILEGE_NOT_HELD

    По дефолту приложения в виста/вин7 запускаютс ябез администраторских прав (см. UAC)

    Правый клик на приложении - Run as administrator.
    Или же для установки этого флажка навсегда - правый клик, Properties, Run as adminitrator.
     
  7. blast

    blast New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2008
    Сообщения:
    170
    Код (Text):
    1. t = TRUE;
    2. RtlAdjustPrivilege(10L/*SE_LOAD_DRIVER_PRIVILEGE*/, 1, 0, &t);
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    blast
    Это мегакруто но работать не будет ^_^
     
  9. haxorart

    haxorart New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    123
    Хм, странно мои проги не заработали... Зато заработали проги Руссиновича, очевидно что ошибка где то у меня. Спасибо за помощь.
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    По-моему у прог руссиновича есть манифест где прописаны правила UAC
     
  11. haxorart

    haxorart New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    123
    Так я использовал правую кнопку. Они заработали только после этого.
     
  12. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Даже с Run as administrator твои проги не заработали? о_0
    У меня ZwLoadDriver отлично пашет с админским UAC'ом в Win7
     
  13. haxorart

    haxorart New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    123
    Меня это тоже удивляет, но тут 2 вариант
    1)либо я сделал какую-то странную ошибку(что то не заметил)
    2)либо есть что то, что нужно сделать для их работы
    Скорее всего это 1 вариант, если ничего не получиться отпишусь.
     
  14. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Ну а какую ошибку возвращает теперь при запуске под админом по правому клику?
     
  15. haxorart

    haxorart New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    123
    Ту же самую ошибку и возвращает.
     
  16. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Ну перед этим стоит добавить еще
    Status = RtlAdjustPrivilege (SE_LOAD_DRIVER_PRIVILEGE, TRUE, FALSE, &Enabled);
    Но только в дополнение к запуску по правому клику. А никак не вместо
     
  17. haxorart

    haxorart New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    123
    Почему это должно заработать? Ведь я и так даю программе права админа.
     
  18. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Потому что привилегия может быть разрешенной, но по дефолту не выставлена.
    статус_привилеж_нот_хелд означает что ее нет. а если она разрешена, то RtlAdjustPrivilege ее получит.

    Не понимаю в чем вопрос, проверить трудно?
     
  19. a1tus

    a1tus New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2009
    Сообщения:
    22
    BOOL SetPrivelege(PWCHAR wcPrivilegeName)
    {
    HANDLE hToken;

    TOKEN_PRIVILEGES tpNewpriv,tpPrevpriv;

    DWORD dwRet;

    BOOL bResult = TRUE;

    if(OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken))
    {

    if (LookupPrivilegeValue(0,wcPrivilegeName, &tpNewpriv.Privileges[0].Luid))
    {
    tpNewpriv.PrivilegeCount = 1;

    tpNewpriv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

    bResult = AdjustTokenPrivileges(hToken, 0, &tpNewpriv, sizeof(tpNewpriv), &tpPrevpriv, &dwRet);

    }else bResult = FALSE;

    CloseHandle(hToken);

    }else bResult = FALSE;

    return bResult;
    }


    вызывать так

    SetPrivelege(L"SeLoadDriverPrivilege");

    Все, у меня все работает норм
     
  20. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    a1tus
    что за геморрой?)

    Код (Text):
    1. NTSTATUS Status;
    2. BOOLEAN Enabled;
    3.  
    4. Status = RtlAdjustPrivilege (SE_LOAD_DRIVER_PRIVILEGE, TRUE, FALSE, &Enabled);