阅读:907回复:0
这样写write例程行吗?
安装驱动后,重起蓝屏错误为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; } 是不是我的加密条件写少了,以至于启动时加密了某些系统数据? |
|