Проблема с ZwLoadDriver под Windows XP SP2
От: Аноним  
Дата: 13.03.06 14:20
Оценка:
Вызываю ZwLoadDriver из системного сервиса примерно таким образом:


ntStatus = ZwLoadDriver(&usDriverPath);
if(!NT_SUCCESS(ntStatus))
{
 // dwErrCode = 1314 (клиент не обрадает требуемыми правами)
 dwErrCode = RtlNtStatusToDosError(ntStatus);
 SVCTRACE(_T("Error in function ZwLoadDriver: %d. \n"), dwErrCode);
 __leave;
}



Прададокс в том, что под Win2000 под всеми SP, а также под WinXP SP1 ошибок не было.
Пробовал решить проблему, добавив сервису самую мощную привилегию SeTcbPrivilege (работа в режиме ОС), однако ZwLoadDriver по-прежнему возвращается с ошибкой 1314. В чем могут быть проблемы?
Re: Проблема с ZwLoadDriver под Windows XP SP2
От: TarasCo  
Дата: 13.03.06 15:12
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вызываю ZwLoadDriver из системного сервиса примерно таким образом:


А>

А>ntStatus = ZwLoadDriver(&usDriverPath);
А>if(!NT_SUCCESS(ntStatus))
А>{
А> // dwErrCode = 1314 (клиент не обрадает требуемыми правами)
А> dwErrCode = RtlNtStatusToDosError(ntStatus);
А> SVCTRACE(_T("Error in function ZwLoadDriver: %d. \n"), dwErrCode);
А> __leave;
А>}

А>



А>Прададокс в том, что под Win2000 под всеми SP, а также под WinXP SP1 ошибок не было.

А>Пробовал решить проблему, добавив сервису самую мощную привилегию SeTcbPrivilege (работа в режиме ОС), однако ZwLoadDriver по-прежнему возвращается с ошибкой 1314. В чем могут быть проблемы?

Понятие мощности для привилегий не определено. И привилегия SeTcbPrivilege не разрешает загрузку драйверов. На то есть SeLoadDriverPrivilege.
Да пребудет с тобою сила
Re[2]: Проблема с ZwLoadDriver под Windows XP SP2
От: Аноним  
Дата: 13.03.06 16:03
Оценка:
Здравствуйте, TarasCo, Вы писали:

убедительная просьба следить за объемом цитирования — модератор

TC>Понятие мощности для привилегий не определено. И привилегия SeTcbPrivilege не разрешает загрузку драйверов. На то есть SeLoadDriverPrivilege.


Привилегия ZwLoadDriver имеет значение только по отношению к драйверам устройств Plug-n-Play. У меня же обычный legacy, а такие драйвера могут
запускаться только из-под учетных записей с правами администратора или в контексте локальной системы.
Re[3]: Проблема с ZwLoadDriver под Windows XP SP2
От: TarasCo  
Дата: 13.03.06 16:17
Оценка: 5 (1)
Здравствуйте, Аноним, Вы писали:

А>Привилегия ZwLoadDriver имеет значение только по отношению к драйверам устройств Plug-n-Play. У меня же обычный legacy, а такие драйвера могут

А>запускаться только из-под учетных записей с правами администратора или в контексте локальной системы.

Вот псевдокод ф. NtLoadDriver. Если не верите — берите отладчик и проверяйте.


    requestorMode = KeGetPreviousMode();

    if (requestorMode != KernelMode) {

        if (!SeSinglePrivilegeCheck( SeLoadDriverPrivilege, requestorMode )) {
            return STATUS_PRIVILEGE_NOT_HELD;
        }


PnP legacy и права администратора тут не причем. Любой пользователь у которого выставлена привилегия SeLoadDriverPrivilege сможет загрузиь драйвер.
Да пребудет с тобою сила
Re[4]: Проблема с ZwLoadDriver под Windows XP SP2
От: Аноним  
Дата: 13.03.06 19:32
Оценка:
Здравствуйте, TarasCo, Вы писали:

TC>Здравствуйте, Аноним, Вы писали:


А>>Привилегия ZwLoadDriver имеет значение только по отношению к драйверам устройств Plug-n-Play. У меня же обычный legacy, а такие драйвера могут

А>>запускаться только из-под учетных записей с правами администратора или в контексте локальной системы.

TC>Вот псевдокод ф. NtLoadDriver. Если не верите — берите отладчик и проверяйте.


TC>

TC>    requestorMode = KeGetPreviousMode();

TC>    if (requestorMode != KernelMode) {

TC>        if (!SeSinglePrivilegeCheck( SeLoadDriverPrivilege, requestorMode )) {
TC>            return STATUS_PRIVILEGE_NOT_HELD;
TC>        }

TC>


TC>PnP legacy и права администратора тут не причем. Любой пользователь у которого выставлена привилегия SeLoadDriverPrivilege сможет загрузиь драйвер.


Разобрался. В WinXP SP2, чтобы корректно назначить процессу привилегии, нужно перед этим
получить их из токена процесса, установить соответствующие флаги и затем вызвать AdjustTokenPrivilege. В более ранних версиях я мог назначать привилегии, предварительно не получая массив существующих привилегий из токена.
Re[5]: Проблема с ZwLoadDriver под Windows XP SP2
От: TarasCo  
Дата: 14.03.06 07:42
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Разобрался. В WinXP SP2, чтобы корректно назначить процессу привилегии, нужно перед этим

А>получить их из токена процесса, установить соответствующие флаги и затем вызвать AdjustTokenPrivilege. В более ранних версиях я мог назначать привилегии, предварительно не получая массив существующих привилегий из токена.

Тут Вы вероятно заблуждаетесь. Описанный Вами порядок действий нужно проделывать всегда, на любых платформах начиная с NT. Советую пересмотреть код, возможно он работал просто не корректно ( до SP2 процессы запущенные от администратора и так имели установленную привилегию ).
Да пребудет с тобою сила
Re[6]: Проблема с ZwLoadDriver под Windows XP SP2
От: Злость Россия  
Дата: 14.03.06 09:23
Оценка:
Здравствуйте, TarasCo, Вы писали:

TC>Здравствуйте, Аноним, Вы писали:


А>>Разобрался. В WinXP SP2, чтобы корректно назначить процессу привилегии, нужно перед этим

А>>получить их из токена процесса, установить соответствующие флаги и затем вызвать AdjustTokenPrivilege. В более ранних версиях я мог назначать привилегии, предварительно не получая массив существующих привилегий из токена.

TC>Тут Вы вероятно заблуждаетесь. Описанный Вами порядок действий нужно проделывать всегда, на любых платформах начиная с NT. Советую пересмотреть код, возможно он работал просто не корректно ( до SP2 процессы запущенные от администратора и так имели установленную привилегию ).


Согласен что для загрузки(выгрузки) драйвера — необходима привилегия SeLoadDriverPrivilege. Надо посмотреть в gpedit кому назначены права для загрузки драйверов.
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.