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

Ваш аккаунт

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

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

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

Недокументированная функция PsGetProcessImageFileName

445
11 ноября 2011 года
Charley
176 / / 16.08.2011
Здравствуйте, я делаю драйвера для WinXP, которые запускаю на виртуальной машине. В общем есть в моем драйвере получение имени процесса из EPROCESS. Ниже строчки:

CHAR* name;
int index;

name=(CHAR*)(proc); //proc - указатель на EPROCESS

strlen(name); //на строчке драйвер виснет

Debugger ругается:

Access violation - code c0000005 (!!! second chance !!!)
Driver!HookNtTerminateProcess+0x47:
f8bc4817 8a11 mov dl,byte ptr [ecx]
14
12 ноября 2011 года
Phodopus
3.3K / / 19.06.2008
ну во первых у недокументированных функций такая специфика - вешать всё чужое. во-вторых, это access violation. чему равен name то?
445
12 ноября 2011 года
Charley
176 / / 16.08.2011
sorry, торовился пропустил:
name=(CHAR*)PsGetProcessImageFileName(proc); //proc - указатель на EPROCESS
260
12 ноября 2011 года
Ramon
1.1K / / 16.08.2003
Единственное, что может быть интересно, так это то:
1. "proc" равен NULL?
2. А не прекратил ли тот процесс включая ассоциированный с ним EPROCESS своего существования?
445
12 ноября 2011 года
Charley
176 / / 16.08.2011
Цитата: Ramon
Единственное, что может быть интересно, так это то:
1. "proc" равен NULL?


// функция-обработчик системного вызова NtTerminateProcess
NTSTATUS HookNtTerminateProcess(IN HANDLE ProcessHandle, IN NTSTATUS ExitStatus) {
NTSTATUS retstatus;
PVOID proc;
NTSTATUS status;
ULONG pid;
CHAR* name;
int index;

// получаем по хендлу указатель на объект процесса (EPROCESS)
status = ObReferenceObjectByHandle(ProcessHandle, 0, *PsProcessType, KernelMode, &proc, NULL);
(здесь несколько строк описал выше)
// вызываем NtTerminateProcess
retstatus = glRealNtTerminateProcess(ProcessHandle,ExitStatus);
return retstatus
}
Во всяком случае мне нужно достать поле ImageFileName из указателя proc в char*. Чтобы потом этот char* сравнивать с другим char*.
P.S.: Очень надеюсь на вашу помощь! Вопрос жизни и смерти:(

260
12 ноября 2011 года
Ramon
1.1K / / 16.08.2003
1. Чему равен status возвращаемый ObReferenceObjectByHandle?
2. А отпустить объект посредством ObDereferenceObject?
445
12 ноября 2011 года
Charley
176 / / 16.08.2011
Все, спасибо, Ramon, заработало, надо было и вправду проверять чему равен status
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог