* PROJECT: ReactOS kernel-mode tests
* LICENSE: GPLv2+ - See COPYING in the top level directory
* PURPOSE: Kernel-Mode Test Suite Example Test Driver
- * PROGRAMMER: Thomas Faber <thfabba@gmx.de>
+ * PROGRAMMER: Thomas Faber <thomas.faber@reactos.org>
*/
#include <ntddk.h>
#define KMT_DEFINE_TEST_FUNCTIONS
#include <kmt_test.h>
-//#define NDEBUG
+#define NDEBUG
#include <debug.h>
#include <kmt_public.h>
RtlAppendUnicodeToString(&DeviceName, DeviceNameSuffix);
Status = IoCreateDevice(DriverObject, 0, &DeviceName,
FILE_DEVICE_UNKNOWN,
- FILE_DEVICE_SECURE_OPEN | FILE_READ_ONLY_DEVICE,
- TRUE, &TestDeviceObject);
+ FILE_DEVICE_SECURE_OPEN |
+ (Flags & TESTENTRY_NO_READONLY_DEVICE ? 0 : FILE_READ_ONLY_DEVICE),
+ Flags & TESTENTRY_NO_EXCLUSIVE_DEVICE ? FALSE : TRUE,
+ &TestDeviceObject);
if (!NT_SUCCESS(Status))
{
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;