Reactos
at listview 88 lines 2.7 kB view raw
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 20NTSTATUS NTAPI 21ConDrvCreateController(IN PDRIVER_OBJECT DriverObject, 22 IN PUNICODE_STRING RegistryPath) 23{ 24 NTSTATUS Status = STATUS_SUCCESS; 25 UNICODE_STRING DeviceName, SymlinkName; 26 PCONDRV_DRIVER DriverExtension; 27 PDEVICE_OBJECT Controller = NULL; 28 29 DPRINT1("Create the Controller device...\n"); 30 31 RtlInitUnicodeString(&DeviceName , DD_CONDRV_CTRL_DEVICE_NAME_U); 32 RtlInitUnicodeString(&SymlinkName, DD_CONDRV_CTRL_SYMLNK_NAME_U); 33 34 /* Get the driver extension */ 35 DriverExtension = (PCONDRV_DRIVER)IoGetDriverObjectExtension(DriverObject, 36 DriverObject); 37 38 /* Create the Controller device, if it doesn't exist */ 39 Status = IoCreateDevice(DriverObject, 40 0, 41 (PUNICODE_STRING)&DeviceName, 42 FILE_DEVICE_UNKNOWN, 43 FILE_DEVICE_SECURE_OPEN, 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 65NTSTATUS NTAPI 66ConDrvDeleteController(IN PDRIVER_OBJECT DriverObject) 67{ 68 NTSTATUS Status = STATUS_SUCCESS; 69 PDEVICE_OBJECT Controller; 70 UNICODE_STRING SymlinkName; 71 72 DPRINT1("Delete the Controller device...\n"); 73 74 /* Retrieve the Controller device */ 75 Controller = ((PCONDRV_DRIVER)IoGetDriverObjectExtension(DriverObject, DriverObject))->Controller; 76 if (!Controller) return STATUS_OBJECT_TYPE_MISMATCH; 77 78 RtlInitUnicodeString(&SymlinkName, DD_CONDRV_CTRL_SYMLNK_NAME_U); 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 */