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 *******************************************************************/
13 #include <condrv/ntddcon.h>
18 /* FUNCTIONS ******************************************************************/
21 ConDrvCreateController(IN PDRIVER_OBJECT DriverObject
,
22 IN PUNICODE_STRING RegistryPath
)
24 NTSTATUS Status
= STATUS_SUCCESS
;
25 UNICODE_STRING DeviceName
, SymlinkName
;
26 PCONDRV_DRIVER DriverExtension
;
27 PDEVICE_OBJECT Controller
= NULL
;
29 DPRINT1("Create the Controller device...\n");
31 RtlInitUnicodeString(&DeviceName
, DD_CONDRV_CTRL_DEVICE_NAME_U
);
32 RtlInitUnicodeString(&SymlinkName
, DD_CONDRV_CTRL_SYMLNK_NAME_U
);
34 /* Get the driver extension */
35 DriverExtension
= (PCONDRV_DRIVER
)IoGetDriverObjectExtension(DriverObject
,
38 /* Create the Controller device, if it doesn't exist */
39 Status
= IoCreateDevice(DriverObject
,
41 (PUNICODE_STRING
)&DeviceName
,
43 FILE_DEVICE_SECURE_OPEN
,
46 if (!NT_SUCCESS(Status
)) goto Done
;
48 Status
= IoCreateSymbolicLink(&SymlinkName
, &DeviceName
);
49 if (!NT_SUCCESS(Status
))
51 IoDeleteDevice(Controller
);
55 Controller
->Flags
&= ~DO_DEVICE_INITIALIZING
;
57 /* Save the Controller device */
58 DriverExtension
->Controller
= Controller
;
61 DPRINT1("Done, Status = 0x%08lx\n", Status
);
66 ConDrvDeleteController(IN PDRIVER_OBJECT DriverObject
)
68 NTSTATUS Status
= STATUS_SUCCESS
;
69 PDEVICE_OBJECT Controller
;
70 UNICODE_STRING SymlinkName
;
72 DPRINT1("Delete the Controller device...\n");
74 /* Retrieve the Controller device */
75 Controller
= ((PCONDRV_DRIVER
)IoGetDriverObjectExtension(DriverObject
, DriverObject
))->Controller
;
76 if (!Controller
) return STATUS_OBJECT_TYPE_MISMATCH
;
78 RtlInitUnicodeString(&SymlinkName
, DD_CONDRV_CTRL_SYMLNK_NAME_U
);
79 IoDeleteSymbolicLink(&SymlinkName
);
81 /* Delete the controller device itself */
82 IoDeleteDevice(Controller
);
84 DPRINT1("Done, Status = 0x%08lx\n", Status
);