首页
社区
课程
招聘
[旧帖] ring0 下,如何结束一条系统线程? 谢谢 0.00雪花
发表于: 2011-12-16 12:34 5958

[旧帖] ring0 下,如何结束一条系统线程? 谢谢 0.00雪花

2011-12-16 12:34
5958
环境:

    A.sys 运行后创建了一条系统线程

目标:

    1、如何在 B.sys 中获得这条线程

    2、找到后,如何结束这条线程

附加:

    代码可在 DriverEntry 中实现,减少不必要的代码

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
PsTerminateSystemThread( STATUS_SUCCESS );
2011-12-16 13:10
0
雪    币: 1886
活跃值: (211)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
大牛们帮帮忙
2011-12-16 16:51
0
雪    币: 1886
活跃值: (211)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
技术饥渴中,求各位帮忙
2011-12-16 21:16
0
雪    币: 227
活跃值: (66)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
5
印象中是PspTerminateThreadByPointer
2011-12-16 22:44
0
雪    币: 1886
活跃值: (211)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
但你们都说了结束线程的方法

我的问题中还有一个

是如何定位这个线程?
2011-12-16 23:22
0
雪    币: 1149
活跃值: (888)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
7
自己结束自己,文档上写着呢.....
2011-12-16 23:39
0
雪    币: 1149
活跃值: (888)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
8
事件....KEvent
2011-12-16 23:40
0
雪    币: 1886
活跃值: (211)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
搜索了一下

没找到思路

因为要在 A.sys 运行后再运行 B.sys

也就是说线程已经创建结束了
2011-12-17 10:25
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
线程的开始地址你总知道吧
2011-12-17 18:25
0
雪    币: 107
活跃值: (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创建的线程并关闭他 这个就不清楚。
2011-12-20 11:42
0
雪    币: 1886
活跃值: (211)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
首先非常感谢,但我要的就是你说的“非正规方法”。。。
2011-12-21 00:27
0
游客
登录 | 注册 方可回帖
返回
//