mirror of
https://github.com/reactos/reactos.git
synced 2025-05-08 03:07:05 +00:00
Don't change PortData pointer, as it is allocated memory, and so, it is easier to free it when needed.
svn path=/trunk/; revision=23010
This commit is contained in:
parent
9976565e9f
commit
05917e3fee
2 changed files with 26 additions and 16 deletions
|
@ -370,6 +370,11 @@ cleanup:
|
||||||
DeviceExtension->ReadIsPending = FALSE;
|
DeviceExtension->ReadIsPending = FALSE;
|
||||||
DeviceExtension->InputCount = 0;
|
DeviceExtension->InputCount = 0;
|
||||||
DeviceExtension->PortData = ExAllocatePool(NonPagedPool, DeviceExtension->DriverExtension->DataQueueSize * sizeof(KEYBOARD_INPUT_DATA));
|
DeviceExtension->PortData = ExAllocatePool(NonPagedPool, DeviceExtension->DriverExtension->DataQueueSize * sizeof(KEYBOARD_INPUT_DATA));
|
||||||
|
if (!DeviceExtension->PortData)
|
||||||
|
{
|
||||||
|
ExFreePool(DeviceNameU.Buffer);
|
||||||
|
return STATUS_INSUFFICIENT_RESOURCES;
|
||||||
|
}
|
||||||
Fdo->Flags |= DO_POWER_PAGABLE;
|
Fdo->Flags |= DO_POWER_PAGABLE;
|
||||||
Fdo->Flags |= DO_BUFFERED_IO; /* FIXME: Why is it needed for 1st stage setup? */
|
Fdo->Flags |= DO_BUFFERED_IO; /* FIXME: Why is it needed for 1st stage setup? */
|
||||||
Fdo->Flags &= ~DO_DEVICE_INITIALIZING;
|
Fdo->Flags &= ~DO_DEVICE_INITIALIZING;
|
||||||
|
@ -509,13 +514,12 @@ ClassCallback(
|
||||||
* Move the input data from the port data queue to our class data
|
* Move the input data from the port data queue to our class data
|
||||||
* queue.
|
* queue.
|
||||||
*/
|
*/
|
||||||
RtlMoveMemory(
|
RtlCopyMemory(
|
||||||
ClassDeviceExtension->PortData,
|
&ClassDeviceExtension->PortData[ClassDeviceExtension->InputCount],
|
||||||
(PCHAR)DataStart,
|
(PCHAR)DataStart,
|
||||||
sizeof(KEYBOARD_INPUT_DATA) * ReadSize);
|
sizeof(KEYBOARD_INPUT_DATA) * ReadSize);
|
||||||
|
|
||||||
/* Move the pointer and counter up */
|
/* Move the counter up */
|
||||||
ClassDeviceExtension->PortData += ReadSize;
|
|
||||||
ClassDeviceExtension->InputCount += ReadSize;
|
ClassDeviceExtension->InputCount += ReadSize;
|
||||||
|
|
||||||
(*ConsumedCount) += ReadSize;
|
(*ConsumedCount) += ReadSize;
|
||||||
|
@ -681,6 +685,8 @@ ClassAddDevice(
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
|
if (!(Fdo->Flags & DO_DEVICE_INITIALIZING))
|
||||||
|
DPRINT1("FIXME: Need to send IOCTL_INTERNAL_*_DISCONNECT\n");
|
||||||
if (DeviceExtension)
|
if (DeviceExtension)
|
||||||
{
|
{
|
||||||
if (DeviceExtension->LowerDevice)
|
if (DeviceExtension->LowerDevice)
|
||||||
|
@ -717,19 +723,18 @@ ClassStartIo(
|
||||||
Status = FillOneEntry(
|
Status = FillOneEntry(
|
||||||
DeviceObject,
|
DeviceObject,
|
||||||
Irp,
|
Irp,
|
||||||
DeviceExtension->PortData - DeviceExtension->InputCount);
|
&DeviceExtension->PortData[DeviceExtension->InputCount - 1]);
|
||||||
|
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
if (DeviceExtension->InputCount > 1)
|
if (DeviceExtension->InputCount > 1)
|
||||||
{
|
{
|
||||||
RtlMoveMemory(
|
RtlMoveMemory(
|
||||||
DeviceExtension->PortData - DeviceExtension->InputCount,
|
&DeviceExtension->PortData[1],
|
||||||
DeviceExtension->PortData - DeviceExtension->InputCount + 1,
|
&DeviceExtension->PortData[0],
|
||||||
(DeviceExtension->InputCount - 1) * sizeof(KEYBOARD_INPUT_DATA));
|
(DeviceExtension->InputCount - 1) * sizeof(KEYBOARD_INPUT_DATA));
|
||||||
}
|
}
|
||||||
|
|
||||||
DeviceExtension->PortData--;
|
|
||||||
DeviceExtension->InputCount--;
|
DeviceExtension->InputCount--;
|
||||||
DeviceExtension->ReadIsPending = FALSE;
|
DeviceExtension->ReadIsPending = FALSE;
|
||||||
|
|
||||||
|
|
|
@ -347,6 +347,11 @@ cleanup:
|
||||||
DeviceExtension->ReadIsPending = FALSE;
|
DeviceExtension->ReadIsPending = FALSE;
|
||||||
DeviceExtension->InputCount = 0;
|
DeviceExtension->InputCount = 0;
|
||||||
DeviceExtension->PortData = ExAllocatePool(NonPagedPool, DeviceExtension->DriverExtension->DataQueueSize * sizeof(MOUSE_INPUT_DATA));
|
DeviceExtension->PortData = ExAllocatePool(NonPagedPool, DeviceExtension->DriverExtension->DataQueueSize * sizeof(MOUSE_INPUT_DATA));
|
||||||
|
if (!DeviceExtension->PortData)
|
||||||
|
{
|
||||||
|
ExFreePool(DeviceNameU.Buffer);
|
||||||
|
return STATUS_INSUFFICIENT_RESOURCES;
|
||||||
|
}
|
||||||
Fdo->Flags |= DO_POWER_PAGABLE;
|
Fdo->Flags |= DO_POWER_PAGABLE;
|
||||||
Fdo->Flags &= ~DO_DEVICE_INITIALIZING;
|
Fdo->Flags &= ~DO_DEVICE_INITIALIZING;
|
||||||
|
|
||||||
|
@ -485,13 +490,12 @@ ClassCallback(
|
||||||
* Move the input data from the port data queue to our class data
|
* Move the input data from the port data queue to our class data
|
||||||
* queue.
|
* queue.
|
||||||
*/
|
*/
|
||||||
RtlMoveMemory(
|
RtlCopyMemory(
|
||||||
ClassDeviceExtension->PortData,
|
&ClassDeviceExtension->PortData[ClassDeviceExtension->InputCount],
|
||||||
(PCHAR)DataStart,
|
(PCHAR)DataStart,
|
||||||
sizeof(MOUSE_INPUT_DATA) * ReadSize);
|
sizeof(MOUSE_INPUT_DATA) * ReadSize);
|
||||||
|
|
||||||
/* Move the pointer and counter up */
|
/* Move the counter up */
|
||||||
ClassDeviceExtension->PortData += ReadSize;
|
|
||||||
ClassDeviceExtension->InputCount += ReadSize;
|
ClassDeviceExtension->InputCount += ReadSize;
|
||||||
|
|
||||||
(*ConsumedCount) += ReadSize;
|
(*ConsumedCount) += ReadSize;
|
||||||
|
@ -657,6 +661,8 @@ ClassAddDevice(
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
|
if (!(Fdo->Flags & DO_DEVICE_INITIALIZING))
|
||||||
|
DPRINT1("FIXME: Need to send IOCTL_INTERNAL_*_DISCONNECT\n");
|
||||||
if (DeviceExtension)
|
if (DeviceExtension)
|
||||||
{
|
{
|
||||||
if (DeviceExtension->LowerDevice)
|
if (DeviceExtension->LowerDevice)
|
||||||
|
@ -693,19 +699,18 @@ ClassStartIo(
|
||||||
Status = FillOneEntry(
|
Status = FillOneEntry(
|
||||||
DeviceObject,
|
DeviceObject,
|
||||||
Irp,
|
Irp,
|
||||||
DeviceExtension->PortData - DeviceExtension->InputCount);
|
&DeviceExtension->PortData[DeviceExtension->InputCount - 1]);
|
||||||
|
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
if (DeviceExtension->InputCount > 1)
|
if (DeviceExtension->InputCount > 1)
|
||||||
{
|
{
|
||||||
RtlMoveMemory(
|
RtlMoveMemory(
|
||||||
DeviceExtension->PortData - DeviceExtension->InputCount,
|
&DeviceExtension->PortData[1],
|
||||||
DeviceExtension->PortData - DeviceExtension->InputCount + 1,
|
&DeviceExtension->PortData[0],
|
||||||
(DeviceExtension->InputCount - 1) * sizeof(MOUSE_INPUT_DATA));
|
(DeviceExtension->InputCount - 1) * sizeof(MOUSE_INPUT_DATA));
|
||||||
}
|
}
|
||||||
|
|
||||||
DeviceExtension->PortData--;
|
|
||||||
DeviceExtension->InputCount--;
|
DeviceExtension->InputCount--;
|
||||||
DeviceExtension->ReadIsPending = FALSE;
|
DeviceExtension->ReadIsPending = FALSE;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue