dionysus77
驱动小牛
驱动小牛
  • 注册日期2006-11-15
  • 最后登录2011-12-18
  • 粉丝0
  • 关注0
  • 积分27分
  • 威望392点
  • 贡献值0点
  • 好评度177点
  • 原创分0分
  • 专家分0分
阅读:907回复:0

这样写write例程行吗?

楼主#
更多 发布于:2007-04-04 08:16
安装驱动后,重起蓝屏错误为stop:c0000218 未知的硬件错误
如果把加密函数的直接取反符号~去掉,即不加密,就可以正常运行进入系统。为什么涅?
无奈了,大家帮我分析分析吧


NTSTATUS
SfWrite(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )
{
//变量定义
PSFILTER_DEVICE_EXTENSION DevExt = (PSFILTER_DEVICE_EXTENSION) DeviceObject->DeviceExtension;
PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp);
ULONG Length;
PVOID buffer;
ULONG Offset = 0;

PAGED_CODE();
    
    
ASSERT(!IS_MY_CONTROL_DEVICE_OBJECT(DeviceObject));
ASSERT(IS_MY_DEVICE_OBJECT(DeviceObject));
    
// 我们仅关心卷过滤设备对象
if (!DevExt->StorageStackDeviceObject)
{
// 不是卷设备对象,向下传
IoSkipCurrentIrpStackLocation(Irp);
return IoCallDriver(DevExt->AttachedToDeviceObject, Irp);
}
//写文件的长度    
Length = IrpSp->Parameters.Write.Length;

//只处理普通写请求
if(IrpSp->MinorFunction==IRP_MN_NORMAL)
{
//获得数据地址                            
if(!Irp->MdlAddress)
buffer = Irp->UserBuffer;
else
buffer =MmGetSystemAddressForMdlSafe(Irp->MdlAddress,NormalPagePriority);
//加密                            
buffer=EncryptBuffer(buffer,Length);
//下传                        
IoCopyCurrentIrpStackLocationToNext( Irp );
return IoCallDriver( ((PSFILTER_DEVICE_EXTENSION) DeviceObject->DeviceExtension)->AttachedToDeviceObject, Irp );
                        
}
//其他写请求直接失败
else
{
Irp->IoStatus.Status = 0;
Irp->IoStatus.Information = 0;
IoCompleteRequest( Irp, IO_NO_INCREMENT );
return 0;
}
                                
}


//负责加密的函数,直接取反
PVOID EncryptBuffer(IN PVOID Buffer,ULONG Length)
{
    ULONG Offset = 0;
    
    for (Offset = 0; Offset < Length; ++Offset)
    {
        ((PUCHAR) Buffer)[Offset] = ~((PUCHAR) Buffer)[Offset];
    }

    return Buffer;
}

是不是我的加密条件写少了,以至于启动时加密了某些系统数据?
游客

返回顶部