2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Console Driver
4 * FILE: drivers/base/condrv/control.c
5 * PURPOSE: Console Driver - Controller Device
6 * PROGRAMMERS: Hermes Belusca-Maito (hermes.belusca@sfr.fr)
9 /* INCLUDES *******************************************************************/
17 /* FUNCTIONS ******************************************************************/
20 ConDrvCreateController(IN PDRIVER_OBJECT DriverObject
,
21 IN PUNICODE_STRING RegistryPath
)
23 NTSTATUS Status
= STATUS_SUCCESS
;
24 UNICODE_STRING DeviceName
, SymlinkName
;
25 PCONDRV_DRIVER DriverExtension
;
26 PDEVICE_OBJECT Controller
= NULL
;
28 DPRINT1("Create the Controller device...\n");
30 RtlInitUnicodeString(&DeviceName
, DD_CONDRV_CTRL_DEVICE_NAME_U
);
31 RtlInitUnicodeString(&SymlinkName
, DD_CONDRV_CTRL_SYMLNK_NAME_U
);
33 /* Get the driver extension */
34 DriverExtension
= (PCONDRV_DRIVER
)IoGetDriverObjectExtension(DriverObject
,
37 /* Create the Controller device, if it doesn't exist */
38 Status
= IoCreateDevice(DriverObject
,
40 (PUNICODE_STRING
)&DeviceName
,
42 FILE_DEVICE_SECURE_OPEN
,
45 if (!NT_SUCCESS(Status
)) goto Done
;
47 Status
= IoCreateSymbolicLink(&SymlinkName
, &DeviceName
);
48 if (!NT_SUCCESS(Status
))
50 IoDeleteDevice(Controller
);
54 Controller
->Flags
&= ~DO_DEVICE_INITIALIZING
;
56 /* Save the Controller device */
57 DriverExtension
->Controller
= Controller
;
60 DPRINT1("Done, Status = 0x%08lx\n", Status
);
65 ConDrvDeleteController(IN PDRIVER_OBJECT DriverObject
)
67 NTSTATUS Status
= STATUS_SUCCESS
;
68 PDEVICE_OBJECT Controller
;
69 UNICODE_STRING SymlinkName
;
71 DPRINT1("Delete the Controller device...\n");
73 /* Retrieve the Controller device */
74 Controller
= ((PCONDRV_DRIVER
)IoGetDriverObjectExtension(DriverObject
, DriverObject
))->Controller
;
75 if (!Controller
) return STATUS_OBJECT_TYPE_MISMATCH
;
77 RtlInitUnicodeString(&SymlinkName
, DD_CONDRV_CTRL_SYMLNK_NAME_U
);
78 IoDeleteSymbolicLink(&SymlinkName
);
80 /* Delete the controller device itself */
81 IoDeleteDevice(Controller
);
83 DPRINT1("Done, Status = 0x%08lx\n", Status
);