阅读:1282回复:4
CreateFile创建文件设备蓝屏
用户模式下的代码
CHAR DriverName[256]; CHAR DeviceName[] = "HideFileService"; CHAR DevicePath[] = "\\\\.\\SFilter"; HANDLE hDevice = CreateFile(DevicePath,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if (INVALID_HANDLE_VALUE == hDevice) { printf("%s Device Failed Error Code:[%08x]\n", DevicePath, GetLastError()); } else { CloseHandle(hDevice); } 为什么我一运行就蓝屏啊!!! |
|
沙发#
发布于:2007-08-30 10:20
郁闷啊 不是有IRP_MJ_CLOSE了吗
MS还发一个IRP_MJ_CLEANUP给我干什么啊,害我从昨天下午郁闷到现在,还好我从小就养成了良好的调试习惯,哈哈 |
|
板凳#
发布于:2007-08-30 10:15
呵呵 SoftICE发现了bug
NTSTATUS SfPassThrough(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) { PIO_STACK_LOCATION irpSp = IoGetCurrentIrpStackLocation(Irp); //不处理 //ASSERT(IS_MY_DEVICE_OBJECT(DeviceObject)); if (g_CDO == DeviceObject) { KdPrint((("ERROR CDO:[%08x]\n"), irpSp->MajorFunction, irpSp->MinorFunction)); _asm int 3; Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; Irp->IoStatus.Information = 0; IoCompleteRequest(Irp, IO_NO_INCREMENT); return STATUS_INVALID_DEVICE_REQUEST; } IoSkipCurrentIrpStackLocation(Irp); return IoCallDriver(((PDEVICE_EXTENSION)DeviceObject->DeviceExtension)->AttachedToDevice, Irp); } ICE中断显示Error CDO [00000012] 查00000012得到:IRP_MJ_CLEANUP,原来是我没有设置IRP_MJ_CLEANUP的处理函数 导致直接使用SfPassThrough,而CDO没有AttachedToDevice,导致蓝屏 ![]() |
|
地板#
发布于:2007-08-30 08:51
NTSTATUS
FsDeviceCreate(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) { if (g_CDO == DeviceObject) { KdPrint(("CDO Created!\n")); Irp->IoStatus.Information = 0; Irp->IoStatus.Status = STATUS_SUCCESS; IoCompleteRequest(Irp, IO_NO_INCREMENT); __asm int 3; return STATUS_SUCCESS; } KdPrint(("HOOK IRP_CREATE\n")); return SfPassThrough(DeviceObject, Irp); } SoftICE提示成功的执行到了__asm int 3; 但是还是错误啊,michaelgz,你帮我看看吧 |
|
地下室#
发布于:2007-08-30 08:49
You have a buggy driver. Check CREATE IRP routines.
|
|