Есть вопрос?
Зайди на форум

Поиск на сайте: Advanced

Denix - новый дистрибутив Linux. Русификация Ubuntu и установка кодеков

dkws.org.ua
Форум сайта dkws.org.ua
 
Главная    ТемыТемы    АльбомАльбом    РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

PsTerminateSystemThread как правильно завершить поток в ядре

 
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> Программирование/C/C++
 
Автор Сообщение
zwuti




Зарегистрирован: 21.02.2009
Сообщения: 2
Откуда: Россия

СообщениеДобавлено: Сб Фев 21, 2009 4:21 pm    Заголовок сообщения: PsTerminateSystemThread как правильно завершить поток в ядре
Ответить с цитатой

Привет купил Вашу книгу про руткиты , книга отличная не пожалел что купил её.
А вопрос уменя следущий:
в ф-и DriverEntry создал поток

status = PsCreateSystemThread(&hThread,
THREAD_ALL_ACCESS,
NULL,
NtCurrentProcess(),
NULL,
Func,
(PVOID)dev_ext );
if (status != STATUS_SUCCESS)
{
DbgPrint("++DR.sys++ THREAD not create!!");
}
else{
DbgPrint("THREAD go........\r\n");
status = ObReferenceObjectByHandle(hThread,
THREAD_ALL_ACCESS,
NULL,
KernelMode,
(PVOID*)&dev_ext->pThreadObj,
NULL);
if (ntstatus != STATUS_SUCCESS)
{
DbgPrint("ObReferenceObjectByHandle shto-to ne to ....");
}
else
{
DbgPrint("Error");
}

ZwClose(hThread);
ObDereferenceObject( dev_ext->pThreadObj );


далее



VOID Func(PVOID a)
{
PDEVICE_EXTENSION pDeviceExtension = (PDEVICE_EXTENSION) a;
NTSTATUS stat;
LARGE_INTEGER delay;
delay.QuadPart = -10000000*10; // 10 Seconds


stat = ( KeDelayExecutionThread(KernelMode,FALSE,&delay));
if (stat !=STATUS_SUCCESS){
DbgPrint("KEDELAY OK...........");
}
DbgPrint(">> thread message");
DbgPrint("Kill thread may be OK ... ");
//if (pDeviceExtension->bThreadStop)

KeSetPriorityThread ( KeGetCurrentThread(),
LOW_REALTIME_PRIORITY);


PsTerminateSystemThread(STATUS_SUCCESS);


}

Поток создаётся всё работает доходит при отладке в softice до PsTerminateSystemThread и сразу вылетает BSOD: остановлен системный рабочий поток и если не создовать поток всё равно при вызове PsTerminateSystemThread(0) BSOD c той же ошибкой. Писал согласно
DDk и в инете искал многое перепробавал одно и тоже в чём дело то ?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
zwuti




Зарегистрирован: 21.02.2009
Сообщения: 2
Откуда: Россия

СообщениеДобавлено: Чт Мар 05, 2009 8:49 am    Заголовок сообщения:
Ответить с цитатой

Всем спасибо за просмотр после некоторых дороботок перестал BSOD
вылетать. Теперь
Код:

NTSTATUS DriverEntry.......

................

VOID Func(PVOID a)
{
PDEVICE_EXTENSION pDeviceExtension = (PDEVICE_EXTENSION) a;

KeSetPriorityThread ( KeGetCurrentThread(),
LOW_REALTIME_PRIORITY);

DbgPrint("<== Thread Stop ");
PsTerminateSystemThread(STATUS_SUCCESS);
DbgPrint("==>ThreadStop");

}

ф-я ожидания завершения потока
VOID ExitTHREAD (PDEVICE_EXTENSION  dev)
{
DbgPrint("<== ExitTHREAD");
KeWaitForSingleObjects(....dev->htreadObj........  );

ObDereference(.........)
DbgPrint("==>ExitThread");

}

DriverUnload
{
DbgPrint("==>ExitDR");
}




1 поток запускается
2 далее последнее что вижу "<== Thread Stop " и всё а где остальные сообщения ?
3 Далее выгружаю драйвер " exitDR"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Чт Мар 05, 2009 9:00 am    Заголовок сообщения:
Ответить с цитатой

Дело может быть в сервиспаке. Весь код писался под SP1. Почитай там есть замечания относительно SP2. Уже отошел от этой темы и давно не следил за изменениями, вносимыми сервис-паками на системном уровне.

А хотя стоп... Я так понял что ты не видишь DbgPrint("==>ThreadStop"); А как ты его собрался видеть после завершения потока? Ты же завершил его функцией PsTerminateSystemThread
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
Показать сообщения:   
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> Программирование/C/C++ Часовой пояс: GMT
Страница 1 из 1
 Главная страница сайта
 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
© Колисниченко Денис