Вызываю 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. В чем могут быть проблемы?
А>Прададокс в том, что под 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, а такие драйвера могут
запускаться только из-под учетных записей с правами администратора или в контексте локальной системы.
Здравствуйте, Аноним, Вы писали:
А>Привилегия 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>PnP legacy и права администратора тут не причем. Любой пользователь у которого выставлена привилегия SeLoadDriverPrivilege сможет загрузиь драйвер.
Разобрался. В WinXP SP2, чтобы корректно назначить процессу привилегии, нужно перед этим
получить их из токена процесса, установить соответствующие флаги и затем вызвать AdjustTokenPrivilege. В более ранних версиях я мог назначать привилегии, предварительно не получая массив существующих привилегий из токена.
Здравствуйте, Аноним, Вы писали:
А>Разобрался. В WinXP SP2, чтобы корректно назначить процессу привилегии, нужно перед этим А>получить их из токена процесса, установить соответствующие флаги и затем вызвать AdjustTokenPrivilege. В более ранних версиях я мог назначать привилегии, предварительно не получая массив существующих привилегий из токена.
Тут Вы вероятно заблуждаетесь. Описанный Вами порядок действий нужно проделывать всегда, на любых платформах начиная с NT. Советую пересмотреть код, возможно он работал просто не корректно ( до SP2 процессы запущенные от администратора и так имели установленную привилегию ).
Здравствуйте, TarasCo, Вы писали:
TC>Здравствуйте, Аноним, Вы писали:
А>>Разобрался. В WinXP SP2, чтобы корректно назначить процессу привилегии, нужно перед этим А>>получить их из токена процесса, установить соответствующие флаги и затем вызвать AdjustTokenPrivilege. В более ранних версиях я мог назначать привилегии, предварительно не получая массив существующих привилегий из токена.
TC>Тут Вы вероятно заблуждаетесь. Описанный Вами порядок действий нужно проделывать всегда, на любых платформах начиная с NT. Советую пересмотреть код, возможно он работал просто не корректно ( до SP2 процессы запущенные от администратора и так имели установленную привилегию ).
Согласен что для загрузки(выгрузки) драйвера — необходима привилегия SeLoadDriverPrivilege. Надо посмотреть в gpedit кому назначены права для загрузки драйверов.
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.