|
#include<ntddk.h>//驱动头文件
测试环境为32xp 具体进程的pid值每台机器不一样,你调取你的任务管理器查看pid
void Unload(PDRIVER_OBJECT drivdr_object)//卸载例程 每一个驱动程序都需要有一个卸载例程的指向 否者该驱动无法卸载
{
KdPrint(("卸载成功"));
}
NTSTATUS ZwOpenProcess(//定义函数原型
_Out_ PHANDLE ProcessHandle,//进程句柄 会在该参数返回
_In_ ACCESS_MASK DesiredAccess,//进程权限
_In_ POBJECT_ATTRIBUTES ObjectAttributes,//指向object_attributes的结构对象属性
_In_opt_ PCLIENT_ID ClientId);//指向客户端的ID的指针
NTSTATUS ZwTerminateProcess(//退出线程函数
_In_opt_ HANDLE ProcessHandle,
_In_ NTSTATUS ExitStatus);
void KillProcess()//自定义函数在43行中被调用
{
NTSTATUS status = STATUS_SUCCESS;//定义一个 ntstatus的成员用来检查返回的结果是否正确
OBJECT_ATTRIBUTES oa;//初始化对象属性该参数在zwopenprocess函数中的参数3中被调用
HANDLE hProcess = NULL;//定义一个通用的句柄该参数在zwopenprocess函数中1被调用
CLIENT_ID ClientID;//该参数在zqopenprocess最后一个参数被调用
ULONG dwPid = 892;//该参数用进程pid notepad的进程pid在XP环境下的id是2744 可修改此参数用来结束其他的进程 只需要修改此pid即可
InitializeObjectAttributes(&oa, 0, 0, 0, 0);//初始化 对象属性成员 这里因为只需要初始化并不需要其他的参数 所以后面的参数全部为0
ClientID.UniqueProcess = (HANDLE)dwPid;//将进程的pid 传递进去
ClientID.UniqueThread = 0;//将线程为空
status = ZwOpenProcess(//内核下打开进程
&hProcess,//句柄用来接收被打开的进程句柄
PROCESS_ALL_ACCESS,//打开权限
&oa//指向对象进程的句柄属性
,&ClientID//指向客户端ID的指针,表示要打开的进程线程,可为空
);
ZwTerminateProcess(hProcess, 0);//退出进程, 参数1退出的进程句柄 参数2退出的通知码
KdPrint(("成功干掉notepad进程"));
ZwClose(hProcess);//退出进城后关闭进程句柄
}
NTSTATUS DriverEntry(PDRIVER_OBJECT pdriver_object, PUNICODE_STRING punicode_string)
{
pdriver_object->DriverUnload = Unload;// 指向驱动的卸载回调函数,每一个驱动框架都有一个该函数 可以为空 但是一定要写否则驱动无法下载
KillProcess();
return STATUS_SUCCESS;//返回执行状态
} |
上一篇: 今日一贴!驱动环境下的文件创建下一篇: [转]C++ 获取系统版本号
|