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
);
36 UNREFERENCED_PARAMETER(Flags
);
38 *DeviceName
= L
"IoDriverObject";
40 KmtRegisterIrpHandler(IRP_MJ_CREATE
, NULL
, TestIrpHandler
);
41 KmtRegisterIrpHandler(IRP_MJ_CLOSE
, NULL
, TestIrpHandler
);
43 TestDriverObject(DriverObject
, DriverEntry
);
50 IN PDRIVER_OBJECT DriverObject
)
54 TestDriverObject(DriverObject
, DriverUnload
);
60 IN PDEVICE_OBJECT DeviceObject
,
62 IN PIO_STACK_LOCATION IoStackLocation
)
64 NTSTATUS Status
= STATUS_SUCCESS
;
66 UNREFERENCED_PARAMETER(IoStackLocation
);
68 TestDriverObject(DeviceObject
->DriverObject
, DriverIrp
);
70 Irp
->IoStatus
.Status
= Status
;
71 Irp
->IoStatus
.Information
= 0;
73 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
81 IN PDRIVER_OBJECT DriverObject
,
82 IN DRIVER_STATUS DriverStatus
)
84 BOOLEAN CheckThisDispatchRoutine
;
88 ok(DriverObject
->Size
== sizeof(DRIVER_OBJECT
), "Size does not match, got %x",DriverObject
->Size
);
89 ok(DriverObject
->Type
== 4, "Type does not match 4. got %d",DriverObject
->Type
);
91 if (DriverStatus
== DriverEntry
)
93 ok(DriverObject
->DeviceObject
== NULL
, "Expected DeviceObject pointer to be 0, got %p",
94 DriverObject
->DeviceObject
);
95 ok (DriverObject
->Flags
== DRVO_LEGACY_DRIVER
,
96 "Expected Flags to be DRVO_LEGACY_DRIVER, got %lu",
99 else if (DriverStatus
== DriverIrp
)
101 ok(DriverObject
->DeviceObject
!= NULL
, "Expected DeviceObject pointer to non null");
102 ok (DriverObject
->Flags
== (DRVO_LEGACY_DRIVER
| DRVO_INITIALIZED
),
103 "Expected Flags to be DRVO_LEGACY_DRIVER | DRVO_INITIALIZED, got %lu",
104 DriverObject
->Flags
);
106 else if (DriverStatus
== DriverUnload
)
108 ok(DriverObject
->DeviceObject
!= NULL
, "Expected DeviceObject pointer to non null");
109 ok (DriverObject
->Flags
== (DRVO_LEGACY_DRIVER
| DRVO_INITIALIZED
| DRVO_UNLOAD_INVOKED
),
110 "Expected Flags to be DRVO_LEGACY_DRIVER | DRVO_INITIALIZED | DRVO_UNLOAD_INVOKED, got %lu",
111 DriverObject
->Flags
);
116 /* Select a routine that was not changed */
117 FirstMajorFunc
= DriverObject
->MajorFunction
[1];
118 ok(FirstMajorFunc
!= 0, "Expected MajorFunction[1] to be non NULL");
120 if (!skip(FirstMajorFunc
!= NULL
, "First major function not set!\n"))
122 for (i
= 0; i
<= IRP_MJ_MAXIMUM_FUNCTION
; i
++)
124 if (DriverStatus
> 0) CheckThisDispatchRoutine
= (i
> 3) && (i
!= 14);
125 else CheckThisDispatchRoutine
= TRUE
;
127 if (CheckThisDispatchRoutine
)
129 ok(DriverObject
->MajorFunction
[i
] == FirstMajorFunc
, "Expected MajorFunction[%d] to match %p",