ReactOS 0.4.15-dev-7918-g2a2556c
control.c
Go to the documentation of this file.
1/*
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)
7 */
8
9/* INCLUDES *******************************************************************/
10
11#include "condrv.h"
12
13#include <condrv/ntddcon.h>
14
15#define NDEBUG
16#include <debug.h>
17
18/* FUNCTIONS ******************************************************************/
19
23{
25 UNICODE_STRING DeviceName, SymlinkName;
27 PDEVICE_OBJECT Controller = NULL;
28
29 DPRINT1("Create the Controller device...\n");
30
33
34 /* Get the driver extension */
37
38 /* Create the Controller device, if it doesn't exist */
40 0,
44 FALSE,
45 &Controller);
46 if (!NT_SUCCESS(Status)) goto Done;
47
48 Status = IoCreateSymbolicLink(&SymlinkName, &DeviceName);
49 if (!NT_SUCCESS(Status))
50 {
51 IoDeleteDevice(Controller);
52 goto Done;
53 }
54
55 Controller->Flags &= ~DO_DEVICE_INITIALIZING;
56
57 /* Save the Controller device */
58 DriverExtension->Controller = Controller;
59
60Done:
61 DPRINT1("Done, Status = 0x%08lx\n", Status);
62 return Status;
63}
64
67{
69 PDEVICE_OBJECT Controller;
70 UNICODE_STRING SymlinkName;
71
72 DPRINT1("Delete the Controller device...\n");
73
74 /* Retrieve the Controller device */
76 if (!Controller) return STATUS_OBJECT_TYPE_MISMATCH;
77
79 IoDeleteSymbolicLink(&SymlinkName);
80
81 /* Delete the controller device itself */
82 IoDeleteDevice(Controller);
83
84 DPRINT1("Done, Status = 0x%08lx\n", Status);
85 return Status;
86}
87
88/* EOF */
LONG NTSTATUS
Definition: precomp.h:26
#define DPRINT1
Definition: precomp.h:8
#define FILE_DEVICE_SECURE_OPEN
Definition: cdrw_usr.h:46
struct _CONDRV_DRIVER * PCONDRV_DRIVER
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
NTSTATUS NTAPI ConDrvCreateController(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
Definition: control.c:21
NTSTATUS NTAPI ConDrvDeleteController(IN PDRIVER_OBJECT DriverObject)
Definition: control.c:66
Status
Definition: gdiplustypes.h:25
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define DD_CONDRV_CTRL_DEVICE_NAME_U
Definition: ntddcon.h:78
#define DD_CONDRV_CTRL_SYMLNK_NAME_U
Definition: ntddcon.h:80
NTSTATUS NTAPI IoCreateDevice(IN PDRIVER_OBJECT DriverObject, IN ULONG DeviceExtensionSize, IN PUNICODE_STRING DeviceName, IN DEVICE_TYPE DeviceType, IN ULONG DeviceCharacteristics, IN BOOLEAN Exclusive, OUT PDEVICE_OBJECT *DeviceObject)
Definition: device.c:1031
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
Definition: device.c:1251
PVOID NTAPI IoGetDriverObjectExtension(IN PDRIVER_OBJECT DriverObject, IN PVOID ClientIdentificationAddress)
Definition: driver.c:1904
#define STATUS_OBJECT_TYPE_MISMATCH
Definition: ntstatus.h:273
PPCI_DRIVER_EXTENSION DriverExtension
Definition: pci.c:31
#define FILE_DEVICE_UNKNOWN
Definition: winioctl.h:140
#define STATUS_SUCCESS
Definition: shellext.h:65
#define NTAPI
Definition: typedefs.h:36
#define IN
Definition: typedefs.h:39
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
Definition: wdfdevice.h:3275
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
Definition: wdfdriver.h:215
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
Definition: wdfdriver.h:213