首页
社区
课程
招聘
[求助]关于在驱动中结束进程!
发表于: 2008-9-2 13:48 7957

[求助]关于在驱动中结束进程!

2008-9-2 13:48
7957
想在驱动程序中终止某个进程;

如果在驱动程序中枚举进程名来获得进程的ID或HANDLE,将会使用好几个while和if或者for之类的循环体,占用内核资源不说,就实现上都相当麻烦(当然这是对于我这种莱鸟来说的);

于是就想在用户程序里先获得进程的ID或HANDLE,然后再传递给驱动程序,驱动程序再根据这ID或者HANDLE来结束进程,觉得这样比较轻松;

问题是: 用户程序里获得的进程ID是DWORD类型, 或者获得的是HANDLE, 而驱动程序里某些函数对进程或线程的操作是需要CLIENT_ID结构体(或EPROCESS进程块结构体),其中这个结构体定义如下:

typedef struct _CLIENT_ID {
    HANDLE UniqueProcess;
    HANDLE UniqueThread;
} CLIENT_ID;
typedef CLIENT_ID *PCLIENT_ID;

例如,这个函数的最后一个参数就是 CLIENT_ID 型:

NTSTATUS
  ZwOpenProcess (
    __out PHANDLE  ProcessHandle,
    __in ACCESS_MASK  DesiredAccess,
    __in POBJECT_ATTRIBUTES  ObjectAttributes,
    __in_opt PCLIENT_ID  ClientId
    )

CLIENT_ID 有两个HANDLE, 好像一个是进程, 一个是线程; 而应用层程序中获得的HANDLE只有一个,这时我不知该怎么做了;

另外,我网上看过黑客防线发表的<在内核中结束冰刃进程>,我看了一下,觉得不是很"正宗"的,好象它只是在驱动中对一些系统函数Unhook,真正的结束进程操作还是在用户层?反正我在驱动中没看到它有任何的对进程操作;另外补上一句,某牛人说,别以为写个驱动就是内核了,差远了。

题外话不说了,我是莱鸟,刚学驱动不久,请大家指点我,以解疑惑,谢谢了!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
2
看MSDN先~
2008-9-2 14:18
0
雪    币: 581
活跃值: (149)
能力值: ( LV12,RANK:600 )
在线值:
发帖
回帖
粉丝
3
方法是多种多样....
打开进程NtTerminateProcess
获取进程对象,枚举所有线程,PspTerminateThreadByPointer
或者枚举所有线程,插入APC.....
方法是多种多样....还是比较深点好....
2008-9-2 14:30
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
4
都进内核了,想怎么搞就怎么搞。
2008-9-2 18:36
0
雪    币: 248
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
你的驱动你作主,想怎么搞就怎么搞,搞蓝了重启继续搞!
2008-9-3 14:59
0
雪    币: 225
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
同意楼上看法,在虚拟机里搞吧!
别把自己电脑弄坏了!
2008-9-3 16:07
0
游客
登录 | 注册 方可回帖
返回
//