能力值:
( LV2,RANK:10 )
|
-
-
2 楼
PsTerminateSystemThread( STATUS_SUCCESS );
|
能力值:
( LV3,RANK:20 )
|
-
-
3 楼
大牛们帮帮忙
|
能力值:
( LV3,RANK:20 )
|
-
-
4 楼
技术饥渴中,求各位帮忙
|
能力值:
( LV7,RANK:100 )
|
-
-
5 楼
印象中是PspTerminateThreadByPointer
|
能力值:
( LV3,RANK:20 )
|
-
-
6 楼
但你们都说了结束线程的方法
我的问题中还有一个
是如何定位这个线程?
|
能力值:
( LV13,RANK:260 )
|
-
-
7 楼
自己结束自己,文档上写着呢.....
|
能力值:
( LV13,RANK:260 )
|
-
-
8 楼
事件....KEvent
|
能力值:
( LV3,RANK:20 )
|
-
-
9 楼
搜索了一下
没找到思路
因为要在 A.sys 运行后再运行 B.sys
也就是说线程已经创建结束了
|
能力值:
( LV4,RANK:50 )
|
-
-
10 楼
线程的开始地址你总知道吧
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
你所说的两个目标 正规方法下 都需要A来配合
A创建线程后
status = PsCreateSystemThread(
&thread_handle,
(ACCESS_MASK) 0L,
NULL,
NULL,
NULL,
FileDiskThread,
device_object
);
if (!NT_SUCCESS(status))
{
IoDeleteDevice(device_object);
return status;
}
线程的指针才是在任何情况下都是通用的地址
通过句柄获取线程的指针 指针A驱动 可以通过创建IOCTL的IRP
Iocaller(B驱动) 传递给B驱动
status = ObReferenceObjectByHandle(
thread_handle,
THREAD_ALL_ACCESS,
NULL,
KernelMode,
&device_extension->thread_pointer,
NULL
);
if (!NT_SUCCESS(status))
{
ZwClose(thread_handle);
device_extension->terminate_thread = TRUE;
。。。。。。省略
return status;
}
创建的线程中设置一个标志 循环检测这个标志
标志置为真 就自己关闭自己
如果是B驱动触发这个标志 标志的地址 还是通过IOCALLER 传递 使得A B驱动都知道这个标志的地址
if (device_extension->terminate_thread)
{
PsTerminateSystemThread(STATUS_SUCCESS);
}
以上代码都出自FILEDISK
可以下载一个调试看看
非正规方法 B如何获得A创建的线程并关闭他 这个就不清楚。
|
能力值:
( LV3,RANK:20 )
|
-
-
12 楼
首先非常感谢,但我要的就是你说的“非正规方法”。。。
|
|
|