U盘过滤驱动
小弟正在做一个U盘过滤驱动。
参考的是《Windows内核安全与驱动开发》一书中的DP(D盘还原驱动)驱动。是一个卷设备过滤驱动。
读取数据是时解密,写入数据时加密。
现在遇到一个问题:
在win7系统上,格式化为fat系统,则会导致数据被破坏。提示信息是“位置不可用 无法访问E:\xxx\xx 文件或目录损坏切无法读取”文件夹打不开,exe无法运行。在xp系统上没问题。并且ntfs文件系统也没有这个问题。
代码:
static NTSTATUS ReadIrpComp(
PDEVICE_OBJECT dev,
PIRP Irp,
PVOID context
)
{
NTSTATUS ntStatus = STATUS_SUCCESS;
//irp stack指针
PIO_STACK_LOCATION Irpsp = NULL;
//irp中包括的数据地址
PBYTE sysBuf = NULL;
PBYTE orgBuf = NULL;
//irp中的数据长度
ULONG length = 0;
//irp要处理的偏移量
LARGE_INTEGER offset = { 0 };
//将传入的上下文参数转化为一个内核事件对象
//PKEVENT rEvent = (PKEVENT) context;
if (Irp->PendingReturned)
{
IoMarkIrpPending(Irp);
}
Irpsp = IoGetCurrentIrpStackLocation(Irp);
ntStatus = Irp->IoStatus.Status;
if (!NT_SUCCESS(ntStatus))
{
ntStatus = Irp->IoStatus.Status;
}
if (NULL == Irp->MdlAddress)
sysBuf = (PBYTE)Irp->UserBuffer;
else
sysBuf = (PBYTE)MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority);
offset = Irpsp->Parameters.Read.ByteOffset;
length = Irpsp->Parameters.Read.Length;
//申请内存
orgBuf = ExAllocatePool(NonPagedPool, length);
RtlZeroBytes(orgBuf, length);
XORtest(sysBuf, length, orgBuf);
RtlCopyMemory(sysBuf, orgBuf, length);
ExFreePool(orgBuf);
//设置这个对象,唤醒等待它的进程
//KeSetEvent(rEvent, IO_NO_INCREMENT, FALSE);
return STATUS_CONTINUE_COMPLETION;
}
参考的是《Windows内核安全与驱动开发》一书中的DP(D盘还原驱动)驱动。是一个卷设备过滤驱动。
读取数据是时解密,写入数据时加密。
现在遇到一个问题:
在win7系统上,格式化为fat系统,则会导致数据被破坏。提示信息是“位置不可用 无法访问E:\xxx\xx 文件或目录损坏切无法读取”文件夹打不开,exe无法运行。在xp系统上没问题。并且ntfs文件系统也没有这个问题。
代码:
static NTSTATUS ReadIrpComp(
PDEVICE_OBJECT dev,
PIRP Irp,
PVOID context
)
{
NTSTATUS ntStatus = STATUS_SUCCESS;
//irp stack指针
PIO_STACK_LOCATION Irpsp = NULL;
//irp中包括的数据地址
PBYTE sysBuf = NULL;
PBYTE orgBuf = NULL;
//irp中的数据长度
ULONG length = 0;
//irp要处理的偏移量
LARGE_INTEGER offset = { 0 };
//将传入的上下文参数转化为一个内核事件对象
//PKEVENT rEvent = (PKEVENT) context;
if (Irp->PendingReturned)
{
IoMarkIrpPending(Irp);
}
Irpsp = IoGetCurrentIrpStackLocation(Irp);
ntStatus = Irp->IoStatus.Status;
if (!NT_SUCCESS(ntStatus))
{
ntStatus = Irp->IoStatus.Status;
}
if (NULL == Irp->MdlAddress)
sysBuf = (PBYTE)Irp->UserBuffer;
else
sysBuf = (PBYTE)MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority);
offset = Irpsp->Parameters.Read.ByteOffset;
length = Irpsp->Parameters.Read.Length;
//申请内存
orgBuf = ExAllocatePool(NonPagedPool, length);
RtlZeroBytes(orgBuf, length);
XORtest(sysBuf, length, orgBuf);
RtlCopyMemory(sysBuf, orgBuf, length);
ExFreePool(orgBuf);
//设置这个对象,唤醒等待它的进程
//KeSetEvent(rEvent, IO_NO_INCREMENT, FALSE);
return STATUS_CONTINUE_COMPLETION;
}
...全文
相关推荐
u盘驱动过滤
实现了U盘的驱动过滤。动态添加驱动过滤,同时,实现应用层和驱动层的通信。应用层选择设备列表,对相应的设备添加过滤驱动。是很好的示例代码,代码中可能存在部分BUG 但是编译没问题。
U盘过滤器设计与实现(限制电脑U盘使用的安全工具)
htmltable {th, td {th {pre {简介:”U盘过滤器”是一款用于限制未经授权的USB存储设备接入电脑的安全软件,旨在防止因U盘滥用导致的数据泄露、病毒传播等风险。该软件通过设备识别、权限控制和日志记录等功能,实现对U盘的精细化管理,适用于企业信息安全防护和个人电脑安全防护。软件包含图形界面、图片资源和执行程序,操作简便,适合非专业用户使用。
U盘文件过滤驱动U盘文件过滤驱动
U盘文件过滤驱动U盘文件过滤驱动U盘文件过滤驱动
U盘只读过滤驱动程序
去年做U盘保密系统时从网上下载参考的代码之一,演示了U盘的只读过滤驱动,有驱动程序和应用程序的全部代码,有用到的请下载学习。
U盘过滤驱动应用程序
这是一个用C++编写的U盘过滤驱动应用程序,其作用为实现一个简单的U盘过滤驱动程序,使U盘变成一个只读存储器。


硬件/系统
