android 文件过滤驱动,自己写的Xuetr工具驱动读写过滤驱动,并奉献上源码
[C] 纯文本查看 复制代码#include
/*
First Driver
*/
//未文档化的函数->通过名字获取设备对象
NTKERNELAPI
NTSTATUS
ObReferenceObjectByName(
IN PUNICODE_STRING ObjectName,
IN ULONG Attributes,
IN PACCESS_STATE PassedAccessState OPTIONAL,
IN ACCESS_MASK DesiredAccess OPTIONAL,
IN POBJECT_TYPE ObjectType OPTIONAL,
IN KPROCESSOR_MODE AccessMode,
IN OUT PVOID ParseContext OPTIONAL,
OUT PVOID *Object
);
extern POBJECT_TYPE *IoDriverObjectType;
PDRIVER_OBJECT g_FilterDriverObject;
//保存以前的驱动请求例程
PDRIVER_DISPATCH g_OrigReadCompeleteRoutine;
//驱动过滤例程
NTSTATUS FilterReadCompeleteRoutine(__in struct _DEVICE_OBJECT *DeviceObject,__inout struct _IRP *Irp)
{
KdPrint(("拦截到数据读取!"));
return g_OrigReadCompeleteRoutine(DeviceObject, Irp);
}
//卸载HOOK函数
NTSTATUS UnfilterDriverRoutinue()
{
//检测地址是否有效(可读可写)
if (MmIsAddressValid(g_FilterDriverObject))
{
//写回原例程
g_FilterDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = g_OrigReadCompeleteRoutine;
}
return STATUS_SUCCESS;
}
//驱动过滤函数->配合 ObReferenceObjectByname
NTSTATUS FilterDriverQuery()
{
NTSTATUS Status ;
UNICODE_STRING usObjectName;
RtlInitUnicodeString(&usObjectName, L"\\Driver\\Xuetr");
//取出驱动对象
Status = ObReferenceObjectByName(
&usObjectName,
OBJ_CASE_INSENSITIVE,
NULL,
0,
*IoDriverObjectType,
KernelMode,
NULL,
(PVOID*)&g_FilterDriverObject
);
if (!NT_SUCCESS(Status)) {
//返回失败值
KdPrint(("取出驱动对象失败!!!"));
return Status;
}
//打印驱动指针对象地址
KdPrint(("驱动指针地址:0x%x", g_FilterDriverObject));
//保存原有驱动实例
g_OrigReadCompeleteRoutine = g_FilterDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL];
//启动过滤
g_FilterDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = FilterReadCompeleteRoutine;
return STATUS_SUCCESS;
}
//卸载函数
NTSTATUS Unload(IN PDRIVER_OBJECT pDriverObject)
{
//清理符号连接和设备对象,避免内存泄漏
UNICODE_STRING usSysname;
RtlInitUnicodeString(&usSysname, L"\\??\\CEpassTP");
if (pDriverObject->DeviceObject != NULL)
{
IoDeleteSymbolicLink(&usSysname);
IoDeleteDevice(pDriverObject->DeviceObject);
KdPrint(("删除设备对象和符号连接完成!"));
}
UnfilterDriverRoutinue();
return STATUS_SUCCESS;
}
//创建设备对象
NTSTATUS CreatDevice(PDRIVER_OBJECT pDriverObject)
{
//记录返回值
NTSTATUS Status;
//定义设备对象
PDEVICE_OBJECT pDevobj;
//设备对象名字字符串
UNICODE_STRING usDevName;
//设备符号连接字符串
UNICODE_STRING usSysName;
//初始化设备名
RtlInitUnicodeString(&usDevName, L"\\Device\\CEpassTP");
//创建设备->赋值创建状态
Status = IoCreateDevice(pDriverObject, \
0, \
&usDevName, \
FILE_DEVICE_UNKNOWN, \
FILE_DEVICE_SECURE_OPEN,\
TRUE,\
&pDevobj
);
//通过宏->判断创建状态
if (!(NT_SUCCESS(Status)))
{
return Status;
}
//或运算赋值
pDevobj->Flags |= DO_BUFFERED_IO;
//初始化符号连接名
RtlInitUnicodeString(&usSysName, L"\\??\\CEpassTP");
//创建符号连接
Status = IoCreateSymbolicLink(&usSysName, &usDevName);
if (!NT_SUCCESS(Status))
{
//不成功删除设备对象-返回错误值
IoDeleteDevice(pDevobj);
return Status;
}
return STATUS_SUCCESS;
}
//PIRP 传送数据包
NTSTATUS CreateCompleteRoutine(PDEVICE_OBJECT pDeviceobj,PIRP pIrp)
{
//注册标准参数实例例程,避免蓝屏
NTSTATUS Status;
Status = STATUS_SUCCESS;
KdPrint(("驱动例程创建完成!"));
pIrp->IoStatus.Status = Status;//设置传送状态
pIrp->IoStatus.Information = 0;//操作字节数返回
IoCompleteRequest(pIrp, IO_NO_INCREMENT);//终结IRP传递
return Status;
}
NTSTATUS CloseCompleteRoutine(PDEVICE_OBJECT pDeviceobj, PIRP pIrp)
{
//注册标准参数实例例程,避免蓝屏
NTSTATUS Status;
Status = STATUS_SUCCESS;
KdPrint(("驱动例程关闭成功!"));
pIrp->IoStatus.Status = Status;//设置传送状态
pIrp->IoStatus.Information = 0;//操作字节数返回
IoCompleteRequest(pIrp, IO_NO_INCREMENT);//终结IRP传递
return Status;
}
NTSTATUS ReadCompleteRoutine(PDEVICE_OBJECT pDeviceobj, PIRP pIrp)
{
//注册标准参数实例例程,避免蓝屏
NTSTATUS Status;
Status = STATUS_SUCCESS;
KdPrint(("例程内存读取!"));
pIrp->IoStatus.Status = Status;//设置传送状态
pIrp->IoStatus.Information = 0;//操作字节数返回
IoCompleteRequest(pIrp, IO_NO_INCREMENT);//终结IRP传递
return Status;
}
NTSTATUS WriteCompleteRoutine(PDEVICE_OBJECT pDeviceobj, PIRP pIrp)
{
//注册标准参数实例例程,避免蓝屏
NTSTATUS Status;
Status = STATUS_SUCCESS;
KdPrint(("例程写内存!"));
pIrp->IoStatus.Status = Status;//设置传送状态
pIrp->IoStatus.Information = 0;//操作字节数返回
IoCompleteRequest(pIrp, IO_NO_INCREMENT);//终结IRP传递
return Status;
}
NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject,IN PUNICODE_STRING RegistryPath){
//KdBreakPoint();//断点
NTSTATUS Status;
Status = CreatDevice(pDriverObject);
if (!NT_SUCCESS(Status))
{
KdPrint(("创建设备对象失败!"));
}
else
{
KdPrint(("创建设备对象成功!\n"));
KdPrint(("注册表路径:%wZ ",RegistryPath));
}
//注册请求例程->发送到IO管理器进行处理
pDriverObject->MajorFunction[IRP_MJ_CREATE] = CreateCompleteRoutine;
pDriverObject->MajorFunction[IRP_MJ_CLOSE] = CloseCompleteRoutine;
pDriverObject->MajorFunction[IRP_MJ_READ] = ReadCompleteRoutine;
pDriverObject->MajorFunction[IRP_MJ_WRITE] = WriteCompleteRoutine;
pDriverObject->DriverUnload = Unload;
//开启驱动过滤
FilterDriverQuery();
return STATUS_SUCCESS;
}
android 文件过滤驱动,自己写的Xuetr工具驱动读写过滤驱动,并奉献上源码相关推荐
- 【Android 安全】DEX 加密 ( 代理 Application 开发 | 加载 dex 文件 | 使用反射获取方法创建本应用的 dexElements | 各版本创建 dex 数组源码对比 )
文章目录 一.不同 Android 系统创建 dex 数组源码对比 二.不同 Android 系统创建 dex 数组源码对比 三. Android 5.1 及以下系统反射方法并创建 Element[] ...
- 【朝花夕拾】Android自定义View之(一)手把手教你看懂View绘制流程——向源码要答案
前言 原文:Android自定义View之(一)手把手教你看懂View绘制流程--向源码要答案 View作为整个app的颜值担当,在Android体系中占有重要的地位.深入理解Android View ...
- 【Android 进程保活】提升进程优先级 ( 1 像素 Activity 提高进程优先级 | taskAffinity 亲和性说明 | 运行效果 | 源码资源 )
文章目录 一.1 像素 Activity 提高进程优先级 1.主界面 MainActivity 2.1 像素 Activity 3.广播接收者 4.管理类 5.AndroidManifest.xml ...
- 【Matlab语音隐写】DCT+DWT音频数字水印嵌入提取【含GUI源码 836期】
一.代码运行视频(哔哩哔哩) [Matlab语音隐写]DCT+DWT音频数字水印嵌入提取[含GUI源码 836期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1 ...
- Android【SDK目录结构】、【HelloWorld项目的目录结构】、【源码sources目录结构】
Android SDK 目录和作用的分析详解 1.add-ons这里面保存着附加库,比如GoogleMaps,当然你如果安装了OphoneSDK,这里也会有一些类库在里面. 2.docs这里面是And ...
- Android【SDK目录结构】、【HelloWorld项目的目录结构】、【源码sources目录结构】...
Android SDK 目录和作用的分析详解 1.add-ons这里面保存着附加库,比如GoogleMaps,当然你如果安装了OphoneSDK,这里也会有一些类库在里面. 2.docs这里面是And ...
- 用Android Studio做一个超好玩的拼图游戏,附送超详细注释的源码
文章目录 一.项目概述 二.开发环境 三.需求分析 四.实现过程 1.拼图游戏布局绘制 2.拼图游戏时间计时 3.拼图游戏打乱显示 4.拼图游戏碎片位置切换 5.拼图游戏成功的条件 6.拼图游戏重新开 ...
- android小说阅读、MVP + RxJava + Retrofit项目、证件拍照裁剪、蓝牙锁等源码
Android精选源码 完全防美团设置支付密码,页面与细节完全一致,如不能... android智能选股应用源码 android开源小说阅读app源码(Kotlin) Android模仿Duoling ...
- android小说阅读、MVP + RxJava + Retrofit项目、证件拍照裁剪、蓝牙锁等源码器
Android精选源码 完全防美团设置支付密码,页面与细节完全一致,如不能- android智能选股应用源码 android开源小说阅读app源码(Kotlin) Android模仿Duolingo的 ...
最新文章
- Delphi - 新语法介绍之For In
- 云南昆明:看猪展迎猪年
- 重磅推荐几个接私活的利器!
- Mybatis报错: Invalid bound statement (not found)...
- java顺序表增删查改_Java实现顺序表的增删改查
- firefox 插件可能用得上的Firefox插件及下载
- shell基础--字符串和变量的操作
- 在IIS6 配置使用php5.4的fastcgi模式
- 【金蝶】金蝶KIS专业版9.1清理用户名密码
- ICE 3.7.4 实现客户服务端hello world
- linux awk 区别,linux awk 中 RS,ORS,FS,OFS 区别与联系
- WSL gcc -m32 readdir 出错: Value too large for defined data type
- 计算机网络-第1章 计算机网络和因特网-同步电大进度
- 谷歌57版本设置浏览器编码
- python3*1**3 表达式输出结果为_22 % 3 表达式输出结果为________
- Swin-Transformer网络结构详解
- WorldModel世界模型代码训练实录
- Hadoophbase监控页面未授权访问漏洞处理方案验证过程实现
- LigoWave品牌的产品分类及项目选型
- 新坑--阿里云图库引入
热门文章
- 若想进阶为软件架构师,这10本书必须读!
- python 字典的值可以为集合吗_Python 集合(Set)、字典(Dictionary)
- 解决mathtype默认使用中文输入法
- 图像 快速傅里叶变换 及 频率域滤波 java 实现
- 优思学院|创新问题的解决方法论TRIZ
- 软件测试用例白盒测试,软件测试白盒测试测试用例与代码.doc
- 三星gtn8010安卓7_三星N8000/N8010通用刷机教程
- 乔姆斯基文法分类【0型1型2型3型文法】
- 微课-面向对象程序设计(5课82分钟)
- 联想ThinkPad使用虚拟机时遇到要求打开CPU中VT的方法