Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

OpenProcessToken in dll

43K
18 ноября 2008 года
Malizia
2 / / 18.11.2008
Доброе время суток.

есть некий драйвер x.dll, в котором в определенный момент нужно вызвать некий бинарник от имени пользователя (хотел использовать CreateProcessAsUser()). решение было простым:
1) установить SE_DEBUG_NAME для текущего процесса
2) найти PID пользовательского процесса (explorer.exe например)
3) заполучить токен по PID
4) вызвать CreateProcessAsUser() с полученным токеном
проблема появилась на шаге 1, а именно, никак не могу установить SE_DEBUG_NAME привилегию, т.к. вызов OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&tok)) возвращает ERROR_ACCESS_DENIED.
в обычных процессах все нормально работает, а в .dll нет.
данную длл использует система при печати. (работает из под system)

Заранее спасибо.
261
18 ноября 2008 года
ahilles
1.5K / / 03.11.2005
как ты устанавливаешь привилегию? давай код
43K
18 ноября 2008 года
Malizia
2 / / 18.11.2008
static int enable_privilege(LPCTSTR priv_name){
DWORD res;
HANDLE tok;
LUID luid;
TOKEN_PRIVILEGES privs;
// можно так либо через GetCurrentProcess();
HANDLE hProc=\ OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,GetCurrentProcessId());

if(hProc){
if(OpenProcessToken(hProc/*GetCurrentProcess()*/,
TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&tok)){
if(LookupPrivilegeValue(NULL,priv_name,&luid)){
DWORD ret_len;
privs.PrivilegeCount=1;
privs.Privileges[0].Luid=luid;
privs.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
if(!(res=AdjustTokenPrivileges(tok,FALSE,
&privs,sizeof tok,NULL,&ret_value))){
res=GetLastError();
ERROR_LOG("...",res);
}
CloseHandle(tok);
}
}
else{
res=GetLastError();
ERROR_LOG("..",res);
return res;
}
}
return res;
}

далее вызываю
enable_privilege(SE_DEBUG_NAME);

возможно тут синтаксические ошибки, ибо код в виртуальной машине, набирал заново. Но идея должна быть понятной.

вероятней всего причина в том, что процесс системный и система блокирует вызов данных функций как небезопасных. возможно надо использовать другие функции (ядерные).
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог