阅读:1166回复:4
一个关于线程退出的问题
我在一个Irp请求的函数中用PsCreateSystemThread创建了一个TestThread线程, 并用ObReferenceObjectByHandle得到线程指针TestThread线程如下
void VOID TestThread(IN PVOID pContext) { PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION) pContext; KeSetPriorityThread(KeGetCurrentThread,(),LOW_REALTIME_PRIORITY); while(TRUE) { KeWaitForSingleObject(&pDevExt->WaitEvent, Executive, KernelMode, FALSE, NULL); if(pDevExt->bJust) PsTerminateSystemThread(STATUS_SUCCESS); //以下执行我想要得操作 } } 我又在另一个irp中想中止这个线程 然后就用 pDevExt->bJust = TRUE; KeSetEvent(&pDevExt->WaitEvent, 0, FALSE); KeWaitForSingleObject(&pDevExt->pThreadObj, Executive, KernelMode, FALSE, NULL); ObDereferenceObject(&pDevExt->pThreadObj); 在上面的KeWaitForSingelObject中,总是会等不到线程中断, 所以驱动会在这里被挂起了, 请问各位大虾,是否能指点小弟一下,应该怎样解决我上面的问题, 分数不会少,多谢大家了 |
|
沙发#
发布于:2003-05-26 17:24
PsCreateSystemThread()的第一个参数就是线程的handle呀.
|
|
板凳#
发布于:2003-05-26 17:31
我创建的线程没问题,只是我无法停止它
|
|
地板#
发布于:2003-05-26 17:32
我创建的线程没问题,只是我无法停止它,我PsCreateSystemThread函数我并没有写错
|
|
地下室#
发布于:2003-05-27 08:15
怎么没人回答我,大家帮帮忙,告诉我你们写一个系统线程时,是怎样做的,多谢了
|
|