Промучился весь день проект горит!
Нужно было сделать поток в драйвере взял пример из DDK написал простенький поток с таймером чтобы систему не вешал:
VOID ReadThreadProc(IN PVOID Context)
//
//Read thread proc
//
{
PHW_DEVICE_EXTENSION DevExtension = Context;
NTSTATUS Status;
LARGE_INTEGER time;
//Diagnostic
DbgPrint("\nEnter to thread proc!\n");
//Set priorety
KeSetPriorityThread(KeGetCurrentThread(), LOW_REALTIME_PRIORITY );
//Set timer for delay
KeInitializeTimer(&DevExtension->DelayTimer);
//main thread LOOP
while( TRUE ){
//Wait for timer
DbgPrint("\nWait timer...\n");
time.QuadPart = (LONGLONG) -100*1000*10;//1c
KeSetTimer(&DevExtension->DelayTimer, time, NULL);
KeWaitForSingleObject(&DevExtension->DelayTimer,
Executive,
KernelMode,
FALSE, // Not allertable
NULL); // No timeout structure
DbgPrint("\nTimer works!\n");
// KeWaitForSingleObject(&DevExtension->IrpQueueSemaphore,
// Executive,
// KernelMode,
// FALSE,
// NULL );
//If thread should stop
if(DevExtension->ThreadShouldStop) {//You must free all thread's resources here!
PsTerminateSystemThread( STATUS_SUCCESS );
}//if(DevExtension->ThreadShouldStop)
} // main thread LOOP
}
2 функции управления потоком:
void RunReadThread(IN PHW_DEVICE_EXTENSION DriverExtention)
//
//Run reading thread.
//
{
NTSTATUS status;
HANDLE ReadThreadHandle=0;//ReadThread handle
//OBJECT_ATTRIBUTES ObjAttributes;
//Diagnostic
DbgPrint("\nTry to create reading thread\n");
//Run thread
DriverExtention->ThreadShouldStop=FALSE;
// InitializeObjectAttributes(&ObjAttributes, NULL,
// OBJ_KERNEL_HANDLE,
// NULL,
// NULL);
status = PsCreateSystemThread(&ReadThreadHandle,
(ACCESS_MASK)0,
NULL, //&ObjAttributes,
(HANDLE) 0,
NULL,
ReadThreadProc,
DriverExtention );
//Diagnostic
if(status!=STATUS_SUCCESS)
DbgPrint("\nReading thread not created!\n");
else DbgPrint("\nReading thread created!\n");
// Convert the Thread object handle into a pointer to the Thread object
// itself. Then close the handle.
//
ObReferenceObjectByHandle(ReadThreadHandle,
THREAD_ALL_ACCESS,
NULL,
KernelMode,
&DriverExtention->ThreadObject,
NULL );
ZwClose(ReadThreadHandle);
}
void StopReadThread(IN PHW_DEVICE_EXTENSION DriverExtention)
//
//Stop reading thread.
//
{
//Diagnostic
DbgPrint("\nTry to stop thread\n");
//Stop thread
DriverExtention->ThreadShouldStop=TRUE;
//
// Wait for the thread to terminate
//
KeWaitForSingleObject(&DriverExtention->ThreadObject,
Executive,
KernelMode,
FALSE,
NULL );
ObDereferenceObject(&DriverExtention->ThreadObject);
DbgPrint("\nReading thread stoped!\n");
}
Так вот поток запускается нормально и даже работает
но при любой попытке его остановить или вызвать StopReadThread он просто без всяких сообщений и ошибок тупо перегружает компьютер... Перепробовал уже все на что только фантазии хватило не работает!
PLEASE HEEEEEEEEELP!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!