mirror of
https://github.com/reactos/reactos.git
synced 2024-09-15 15:19:37 +00:00
- Delete the device object and symbolic link if connecting to the port
driver fails. svn path=/trunk/; revision=5361
This commit is contained in:
parent
ef7b713c37
commit
571d3f55d3
|
@ -189,7 +189,7 @@ NTSTATUS ConnectMousePortDriver(PDEVICE_OBJECT ClassDeviceObject)
|
||||||
return ioStatus.Status;
|
return ioStatus.Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS STDCALL MouseClassDispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
NTSTATUS STDCALL_FUNC MouseClassDispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
||||||
{
|
{
|
||||||
PIO_STACK_LOCATION Stack = IoGetCurrentIrpStackLocation(Irp);
|
PIO_STACK_LOCATION Stack = IoGetCurrentIrpStackLocation(Irp);
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
@ -270,7 +270,7 @@ VOID MouseClassStartIo(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS STDCALL MouseClassInternalDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
|
NTSTATUS STDCALL_FUNC MouseClassInternalDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
|
||||||
{
|
{
|
||||||
// Retrieve GDI's callback
|
// Retrieve GDI's callback
|
||||||
|
|
||||||
|
@ -318,7 +318,8 @@ DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
|
||||||
{
|
{
|
||||||
PDEVICE_OBJECT DeviceObject;
|
PDEVICE_OBJECT DeviceObject;
|
||||||
UNICODE_STRING DeviceName = UNICODE_STRING_INITIALIZER(L"\\Device\\MouseClass");
|
UNICODE_STRING DeviceName = UNICODE_STRING_INITIALIZER(L"\\Device\\MouseClass");
|
||||||
UNICODE_STRING SymlinkName = UNICODE_STRING_INITIALIZER(L"\\??\\MouseClass");
|
UNICODE_STRING SymlinkName = UNICODE_STRING_INITIALIZER(L"\\??\\MouseClass"); NTSTATUS Status;
|
||||||
|
|
||||||
|
|
||||||
DriverObject->MajorFunction[IRP_MJ_CREATE] = MouseClassDispatch;
|
DriverObject->MajorFunction[IRP_MJ_CREATE] = MouseClassDispatch;
|
||||||
// DriverObject->MajorFunction[IRP_MJ_CLOSE] = MouseClassDispatch;
|
// DriverObject->MajorFunction[IRP_MJ_CLOSE] = MouseClassDispatch;
|
||||||
|
@ -326,16 +327,32 @@ DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
|
||||||
DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = MouseClassInternalDeviceControl; // to get GDI callback
|
DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = MouseClassInternalDeviceControl; // to get GDI callback
|
||||||
// DriverObject->DriverStartIo = MouseClassStartIo;
|
// DriverObject->DriverStartIo = MouseClassStartIo;
|
||||||
|
|
||||||
IoCreateDevice(DriverObject,
|
Status = IoCreateDevice(DriverObject,
|
||||||
sizeof(DEVICE_EXTENSION),
|
sizeof(DEVICE_EXTENSION),
|
||||||
&DeviceName,
|
&DeviceName,
|
||||||
FILE_DEVICE_MOUSE,
|
FILE_DEVICE_MOUSE,
|
||||||
0,
|
0,
|
||||||
TRUE,
|
TRUE,
|
||||||
&DeviceObject);
|
&DeviceObject);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
return(Status);
|
||||||
|
}
|
||||||
DeviceObject->Flags = DeviceObject->Flags | DO_BUFFERED_IO;
|
DeviceObject->Flags = DeviceObject->Flags | DO_BUFFERED_IO;
|
||||||
|
|
||||||
IoCreateSymbolicLink(&SymlinkName, &DeviceName);
|
Status = IoCreateSymbolicLink(&SymlinkName, &DeviceName);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
IoDeleteDevice(DeviceObject);
|
||||||
|
return(Status);
|
||||||
|
}
|
||||||
|
|
||||||
return ConnectMousePortDriver(DeviceObject);
|
Status = ConnectMousePortDriver(DeviceObject);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
IoDeleteSymbolicLink(&SymlinkName);
|
||||||
|
IoDeleteDevice(DeviceObject);
|
||||||
|
return(Status);
|
||||||
|
}
|
||||||
|
return(STATUS_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue