📄 calldriver.cpp
字号:
#include <windows.h>
#include <winioctl.h>
#include <stdio.h>
#include "Driver.h"
#include "CallDriver.h"
typedef struct
{
long EPAddrToKill;
long ExitStatus;
long PID;
long BYKILLBYPEP;
long sysmajorVer;
long sysminorVer;
long sysSPVer;
}KPDRV_IN,*PKPDRV_IN;
#define IOCTL_KPDRV_KILLPROCESS \
CTL_CODE(FILE_DEVICE_UNKNOWN, 0x830, METHOD_BUFFERED, FILE_ANY_ACCESS)
int main(int argc, char* argv[])
{
printf("\nKillProcess by at_Least[0GiNr]\n\
http://atLeast.blog.cfan.com.cn\n\
http://0ginr.com\n\n");
char szPath[256];
char* p;
printf("正在尝试装载驱动...\n");
::GetFullPathName("KPDrv.sys", 256, szPath, &p);
printf("驱动路径: %s.\n",szPath);
CDriver my(szPath, "KPDrvLN");
//system("pause");
if(my.StartDriver())
{
printf("装载成功.\n");
printf("正在尝试打开驱动...\n");
if(my.IsValid())
if(my.OpenDevice())
{
printf("打开成功.\n\n");
KPDRV_IN datain;
long bypid;
printf("请输入1来通过PID结束进程,或输入其他数字来通过EPROCESS地址结束进程:");
scanf("%d",&bypid);
if (bypid==1)
{
printf("请输入进程PID:");
scanf("%d",&datain.PID);
}
else
{
printf("请输入EPROCESS地址(16进制): 0x");
scanf("%x",&datain.EPAddrToKill);
}
printf("\n");
datain.ExitStatus=0;
datain.sysmajorVer=5; // 这些版本是假定的,驱动可以支持 XP SP0,SP1,SP2
datain.sysminorVer=1;
datain.sysSPVer=2; //这个决定系统SP号。本来都是应该在驱动中判断的 但是偶比较菜 :~
datain.BYKILLBYPEP=(bypid!=1);
long retv;
long ret;
ret=my.IoControl(IOCTL_KPDRV_KILLPROCESS,
&datain,
sizeof(datain),
&retv,sizeof(retv));
printf("返回值(0为成功):0x%X\n",retv);
}
else
printf("Open Error.\n");
}
else
printf("Load Error\n.");
printf("\n按任意键退出.\n");
getchar();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -