Something went wrong. Try again.
Reactos
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889/* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS Console Driver * FILE: drivers/base/condrv/control.c * PURPOSE: Console Driver - Controller Device * PROGRAMMERS: Hermes Belusca-Maito (hermes.belusca@sfr.fr) */
/* INCLUDES *******************************************************************/
#include "condrv.h"
#include <condrv/ntddcon.h>
#define NDEBUG#include <debug.h>
/* FUNCTIONS ******************************************************************/
NTSTATUS NTAPIConDrvCreateController(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath){ NTSTATUS Status = STATUS_SUCCESS; UNICODE_STRING DeviceName, SymlinkName; PCONDRV_DRIVER DriverExtension; PDEVICE_OBJECT Controller = NULL;
DPRINT1("Create the Controller device...\n");
RtlInitUnicodeString(&DeviceName , DD_CONDRV_CTRL_DEVICE_NAME_U); RtlInitUnicodeString(&SymlinkName, DD_CONDRV_CTRL_SYMLNK_NAME_U);
/* Get the driver extension */ DriverExtension = (PCONDRV_DRIVER)IoGetDriverObjectExtension(DriverObject, DriverObject);
/* Create the Controller device, if it doesn't exist */ Status = IoCreateDevice(DriverObject, 0, (PUNICODE_STRING)&DeviceName, FILE_DEVICE_UNKNOWN, FILE_DEVICE_SECURE_OPEN, FALSE, &Controller); if (!NT_SUCCESS(Status)) goto Done;
Status = IoCreateSymbolicLink(&SymlinkName, &DeviceName); if (!NT_SUCCESS(Status)) { IoDeleteDevice(Controller); goto Done; }
Controller->Flags &= ~DO_DEVICE_INITIALIZING;
/* Save the Controller device */ DriverExtension->Controller = Controller;
Done: DPRINT1("Done, Status = 0x%08lx\n", Status); return Status;}
NTSTATUS NTAPIConDrvDeleteController(IN PDRIVER_OBJECT DriverObject){ NTSTATUS Status = STATUS_SUCCESS; PDEVICE_OBJECT Controller; UNICODE_STRING SymlinkName;
DPRINT1("Delete the Controller device...\n");
/* Retrieve the Controller device */ Controller = ((PCONDRV_DRIVER)IoGetDriverObjectExtension(DriverObject, DriverObject))->Controller; if (!Controller) return STATUS_OBJECT_TYPE_MISMATCH;
RtlInitUnicodeString(&SymlinkName, DD_CONDRV_CTRL_SYMLNK_NAME_U); IoDeleteSymbolicLink(&SymlinkName);
/* Delete the controller device itself */ IoDeleteDevice(Controller);
DPRINT1("Done, Status = 0x%08lx\n", Status); return Status;}
/* EOF */