2 * PROJECT: ReactOS kernel-mode tests
3 * LICENSE: GPLv2+ - See COPYING in the top level directory
4 * PURPOSE: Kernel-Mode Test Suite Driver Object Test Driver
5 * PROGRAMMER: Michael Martin <martinmnet@hotmail.com>
6 * Thomas Faber <thfabba@gmx.de>
21 static KMT_IRP_HANDLER TestIrpHandler
;
22 static VOID
TestDriverObject(IN PDRIVER_OBJECT DriverObject
, IN DRIVER_STATUS DriverStatus
);
26 IN PDRIVER_OBJECT DriverObject
,
27 IN PCUNICODE_STRING RegistryPath
,
28 OUT PCWSTR
*DeviceName
,
31 NTSTATUS Status
= STATUS_SUCCESS
;
35 UNREFERENCED_PARAMETER(RegistryPath
);
37 *DeviceName
= L
"IoDriverObject";
39 KmtRegisterIrpHandler(IRP_MJ_CREATE
, NULL
, TestIrpHandler
);
40 KmtRegisterIrpHandler(IRP_MJ_CLOSE
, NULL
, TestIrpHandler
);
42 TestDriverObject(DriverObject
, DriverEntry
);
49 IN PDRIVER_OBJECT DriverObject
)
53 TestDriverObject(DriverObject
, DriverUnload
);
59 IN PDEVICE_OBJECT DeviceObject
,
61 IN PIO_STACK_LOCATION IoStackLocation
)
63 NTSTATUS Status
= STATUS_SUCCESS
;
65 TestDriverObject(DeviceObject
->DriverObject
, DriverIrp
);
67 Irp
->IoStatus
.Status
= Status
;
68 Irp
->IoStatus
.Information
= 0;
70 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
78 IN PDRIVER_OBJECT DriverObject
,
79 IN DRIVER_STATUS DriverStatus
)
81 BOOLEAN CheckThisDispatchRoutine
;
85 ok(DriverObject
->Size
== sizeof(DRIVER_OBJECT
), "Size does not match, got %x",DriverObject
->Size
);
86 ok(DriverObject
->Type
== 4, "Type does not match 4. got %d",DriverObject
->Type
);
88 if (DriverStatus
== DriverEntry
)
90 ok(DriverObject
->DeviceObject
== NULL
, "Expected DeviceObject pointer to be 0, got %p",
91 DriverObject
->DeviceObject
);
92 ok (DriverObject
->Flags
== DRVO_LEGACY_DRIVER
,
93 "Expected Flags to be DRVO_LEGACY_DRIVER, got %lu",
96 else if (DriverStatus
== DriverIrp
)
98 ok(DriverObject
->DeviceObject
!= NULL
, "Expected DeviceObject pointer to non null");
99 ok (DriverObject
->Flags
== (DRVO_LEGACY_DRIVER
| DRVO_INITIALIZED
),
100 "Expected Flags to be DRVO_LEGACY_DRIVER | DRVO_INITIALIZED, got %lu",
101 DriverObject
->Flags
);
103 else if (DriverStatus
== DriverUnload
)
105 ok(DriverObject
->DeviceObject
!= NULL
, "Expected DeviceObject pointer to non null");
106 ok (DriverObject
->Flags
== (DRVO_LEGACY_DRIVER
| DRVO_INITIALIZED
| DRVO_UNLOAD_INVOKED
),
107 "Expected Flags to be DRVO_LEGACY_DRIVER | DRVO_INITIALIZED | DRVO_UNLOAD_INVOKED, got %lu",
108 DriverObject
->Flags
);
113 /* Select a routine that was not changed */
114 FirstMajorFunc
= DriverObject
->MajorFunction
[1];
115 ok(FirstMajorFunc
!= 0, "Expected MajorFunction[1] to be non NULL");
117 if (!skip(FirstMajorFunc
!= NULL
, "First major function not set!\n"))
119 for (i
= 0; i
<= IRP_MJ_MAXIMUM_FUNCTION
; i
++)
121 if (DriverStatus
> 0) CheckThisDispatchRoutine
= (i
> 3) && (i
!= 14);
122 else CheckThisDispatchRoutine
= TRUE
;
124 if (CheckThisDispatchRoutine
)
126 ok(DriverObject
->MajorFunction
[i
] == FirstMajorFunc
, "Expected MajorFunction[%d] to match %p",