RtlAppendUnicodeToString(&DeviceName, DeviceNameSuffix);
Status = IoCreateDevice(DriverObject, 0, &DeviceName,
FILE_DEVICE_UNKNOWN,
- FILE_DEVICE_SECURE_OPEN | FILE_READ_ONLY_DEVICE,
+ FILE_DEVICE_SECURE_OPEN |
+ (Flags & TESTENTRY_NO_READONLY_DEVICE ? 0 : FILE_READ_ONLY_DEVICE),
Flags & TESTENTRY_NO_EXCLUSIVE_DEVICE ? FALSE : TRUE,
&TestDeviceObject);
goto cleanup;
}
+ if (Flags & TESTENTRY_BUFFERED_IO_DEVICE)
+ TestDeviceObject->Flags |= DO_BUFFERED_IO;
+
DPRINT("DriverEntry. Created DeviceObject %p\n",
TestDeviceObject);
}
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp)
{
- NTSTATUS Status = STATUS_SUCCESS;
+ NTSTATUS Status = STATUS_INVALID_DEVICE_REQUEST;
PIO_STACK_LOCATION IoStackLocation;
int i;
- PAGED_CODE();
-
IoStackLocation = IoGetCurrentIrpStackLocation(Irp);
DPRINT("DriverDispatch: Function=%s, Device=%p\n",
IoStackLocation->MajorFunction == IRP_MJ_INTERNAL_DEVICE_CONTROL)
return DeviceControlHandler(DeviceObject, Irp, IoStackLocation);
+ /* Return success for create, close, and cleanup */
+ if (IoStackLocation->MajorFunction == IRP_MJ_CREATE ||
+ IoStackLocation->MajorFunction == IRP_MJ_CLOSE ||
+ IoStackLocation->MajorFunction == IRP_MJ_CLEANUP)
+ Status = STATUS_SUCCESS;
+
/* default handler */
Irp->IoStatus.Status = Status;
Irp->IoStatus.Information = 0;