Partial merge of condrv_restructure branch r65657.
[reactos.git] / reactos / drivers / base / condrv / condrv.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Console Driver
4 * FILE: drivers/base/condrv/condrv.c
5 * PURPOSE: Console Driver Management Functions
6 * PROGRAMMERS: Hermes Belusca-Maito (hermes.belusca@sfr.fr)
7 */
8
9 /* INCLUDES *******************************************************************/
10
11 #include "condrv.h"
12
13 #define NDEBUG
14 #include <debug.h>
15
16 /* FUNCTIONS ******************************************************************/
17
18 /*
19 * Callback functions prototypes
20 */
21 DRIVER_INITIALIZE DriverEntry;
22 DRIVER_UNLOAD ConDrvUnload;
23 /*
24 DRIVER_DISPATCH ConDrvIoControl;
25 DRIVER_DISPATCH ConDrvCreate;
26 DRIVER_DISPATCH ConDrvClose;
27 DRIVER_DISPATCH ConDrvRead;
28 DRIVER_DISPATCH ConDrvWrite;
29 DRIVER_DISPATCH ConDrvCleanup;
30 */
31 DRIVER_DISPATCH ConDrvDispatch;
32
33 NTSTATUS NTAPI
34 DriverEntry(IN PDRIVER_OBJECT DriverObject,
35 IN PUNICODE_STRING RegistryPath)
36 {
37 NTSTATUS Status;
38 USHORT i;
39 PCONDRV_DRIVER DriverExtension = NULL;
40
41 DPRINT1("Loading ReactOS Console Driver v0.0.1...\n");
42
43 DriverObject->DriverUnload = ConDrvUnload;
44
45 /* Initialize the different callback function pointers */
46 for (i = 0 ; i <= IRP_MJ_MAXIMUM_FUNCTION ; ++i)
47 DriverObject->MajorFunction[i] = ConDrvDispatch;
48
49 #if 0
50 DriverObject->MajorFunction[IRP_MJ_CREATE] = ConDrvCreate;
51 DriverObject->MajorFunction[IRP_MJ_CLOSE] = ConDrvClose;
52
53 /* temporary deactivated...
54 DriverObject->MajorFunction[IRP_MJ_CLEANUP] = ConDrvCleanup;
55 */
56 DriverObject->MajorFunction[IRP_MJ_READ] = ConDrvRead;
57 DriverObject->MajorFunction[IRP_MJ_WRITE] = ConDrvWrite;
58
59 DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = ConDrvIoControl;
60 #endif
61
62 Status = IoAllocateDriverObjectExtension(DriverObject,
63 DriverObject, // Unique ID for the driver object extension ==> gives it its address !
64 sizeof(CONDRV_DRIVER),
65 (PVOID*)&DriverExtension);
66 if (!NT_SUCCESS(Status))
67 {
68 DPRINT1("IoAllocateDriverObjectExtension() failed with status 0x%08lx\n", Status);
69 return Status;
70 }
71 RtlZeroMemory(DriverExtension, sizeof(CONDRV_DRIVER));
72
73 Status = ConDrvCreateController(DriverObject, RegistryPath);
74
75 DPRINT1("Done, Status = 0x%08lx\n", Status);
76 return Status;
77 }
78
79 VOID NTAPI
80 ConDrvUnload(IN PDRIVER_OBJECT DriverObject)
81 {
82 DPRINT1("Unloading ReactOS Console Driver v0.0.1...\n");
83
84 /*
85 * Delete the Controller device. This has as effect
86 * to delete also all the terminals.
87 */
88 ConDrvDeleteController(DriverObject);
89
90 /* Sanity check: No devices must exist at this point */
91 ASSERT(DriverObject->DeviceObject == NULL);
92
93 DPRINT1("Done\n");
94 return;
95 }
96
97 /* EOF */