过滤T雪软件的驱动的一个历程_的驱动

#include"ntddk.h"
NTSTATUS
ObReferenceObjectByName(
__in PUNICODE_STRING ObjectName,
__in ULONG Attributes,
__in_opt PACCESS_STATE AccessState,
__in_opt ACCESS_MASK DesiredAccess,
__in POBJECT_TYPE ObjectType,
__in KPROCESSOR_MODE AccessMode,
__inout_opt PVOID ParseContext,
__out PVOID *Object
);
extern POBJECT_TYPE *IoDriverObjectType;
PDRIVER_DISPATCH m_laolichengdizhi;//历程类型
PDRIVER_OBJECT m_dedaokanxuequdongduixiang;//获得的看雪驱动对象
VOID xiezai1(_In_ struct _DRIVER_OBJECT *qudongduixiang1)
{
	KdPrint(("驱动卸载历程已经执行\n"));
	if (MmIsAddressValid(m_dedaokanxuequdongduixiang))//判断是否是有效的地址
	{
		m_dedaokanxuequdongduixiang->MajorFunction[IRP_MJ_DEVICE_CONTROL] = m_laolichengdizhi;//卸载自己的历程(还原看雪的历程)
	}
}
NTSTATUS guolvqudong1(_In_ struct _DEVICE_OBJECT *DeviceObject, _Inout_ struct _IRP *Irp)
{
	KdPrint(("我自己写的驱动历程 运行看雪软件的时候 进入到它的sys  我过滤到了 欧耶\n"));
	return m_laolichengdizhi(DeviceObject, Irp);
}

NTSTATUS DriverEntry(PDRIVER_OBJECT qudongduixiang1,PUNICODE_STRING zhucebiao1)
{
	KdPrint(("通过IO管理器生成驱动对象 进入驱动入口\n"));
	KdPrint(("注册表路径%wZ\n", zhucebiao1));
	KdPrint(("驱动对象名%wZ\n", &qudongduixiang1->DriverName));
	UNICODE_STRING m_kanxuequdongmingzi1;
	RtlInitUnicodeString(&m_kanxuequdongmingzi1, L"\\Driver\\PCHunter32al");
	ObReferenceObjectByName(&m_kanxuequdongmingzi1, OBJ_CASE_INSENSITIVE,//不区分大小写 驱动名可以写大写或小写 调用了这个函数打开了一次这个对象 对象管理器的计数加1
		NULL, //结构比较复杂设计对象特性的东西access state  
		0, // 访问权限可以写0 写0完全访问不受控制  access mask  
		*IoDriverObjectType,//对象类型 注意加*号  
		KernelMode,//内核模式 有三种模式 enum 类型  
		NULL,                 //不知道 parse context  
		(PVOID*)&m_dedaokanxuequdongduixiang);//输出对象 我们要得到的驱动对象  )//注意类型转换 这个是重点出错的地方
	KdPrint(("看雪驱动对象名%wZ\n", &m_dedaokanxuequdongduixiang->DriverName));
	m_laolichengdizhi = m_dedaokanxuequdongduixiang->MajorFunction[IRP_MJ_DEVICE_CONTROL];//主函数有28 个不同的历程
	m_dedaokanxuequdongduixiang->MajorFunction[IRP_MJ_DEVICE_CONTROL] = guolvqudong1;//设备控制历程 所有的应用程序和驱动通信 都会用这个
	ObDereferenceObject(m_dedaokanxuequdongduixiang);//关闭对象管理器的计数 千万别忘记了
	qudongduixiang1->DriverUnload = xiezai1;
	return STATUS_SUCCESS;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值