serial: Fix FileStandardInformation and FilePositionInformation classes

serial: Add FileNetworkOpenInformation class
serenum: Pass all requests to next driver, even unknown ones

svn path=/trunk/; revision=33430
This commit is contained in:
Hervé Poussineau 2008-05-11 09:51:46 +00:00
parent a173ef04c2
commit 507a803c65
2 changed files with 26 additions and 3 deletions

View file

@ -47,6 +47,7 @@ IrpStub(
case IRP_MJ_CREATE:
case IRP_MJ_CLOSE:
case IRP_MJ_CLEANUP:
case IRP_MJ_QUERY_INFORMATION:
case IRP_MJ_READ:
case IRP_MJ_WRITE:
case IRP_MJ_DEVICE_CONTROL:
@ -56,7 +57,7 @@ IrpStub(
WARN_(SERENUM, "FDO stub for major function 0x%lx\n",
IoGetCurrentIrpStackLocation(Irp)->MajorFunction);
ASSERT(FALSE);
Status = Irp->IoStatus.Status;
return ForwardIrpToLowerDeviceAndForget(DeviceObject, Irp);
}
}
}
@ -77,7 +78,7 @@ IrpStub(
WARN_(SERENUM, "PDO stub for major function 0x%lx\n",
IoGetCurrentIrpStackLocation(Irp)->MajorFunction);
ASSERT(FALSE);
Status = Irp->IoStatus.Status;
return ForwardIrpToAttachedFdoAndForget(DeviceObject, Irp);
}
}
}

View file

@ -44,6 +44,7 @@ SerialQueryInformation(
StandardInfo->Directory = FALSE;
StandardInfo->NumberOfLinks = 0;
StandardInfo->DeletePending = FALSE; /* FIXME: should be TRUE sometimes */
Information = sizeof(FILE_STANDARD_INFORMATION);
Status = STATUS_SUCCESS;
}
break;
@ -55,13 +56,34 @@ SerialQueryInformation(
ASSERT(PositionInfo);
TRACE_(SERIAL, "IRP_MJ_QUERY_INFORMATION / FilePositionInformation\n");
if (BufferLength < sizeof(PFILE_POSITION_INFORMATION))
if (BufferLength < sizeof(FILE_POSITION_INFORMATION))
Status = STATUS_BUFFER_OVERFLOW;
else if (!PositionInfo)
Status = STATUS_INVALID_PARAMETER;
else
{
PositionInfo->CurrentByteOffset.QuadPart = 0;
Information = sizeof(FILE_POSITION_INFORMATION);
Status = STATUS_SUCCESS;
}
break;
}
case FileNetworkOpenInformation:
{
PFILE_NETWORK_OPEN_INFORMATION NetworkOpenInfo = (PFILE_NETWORK_OPEN_INFORMATION)SystemBuffer;
ASSERT(NetworkOpenInfo);
TRACE_(SERIAL, "IRP_MJ_QUERY_INFORMATION / FileNetworkInformation\n");
DbgBreakPoint();
if (BufferLength < sizeof(FILE_NETWORK_OPEN_INFORMATION))
Status = STATUS_BUFFER_OVERFLOW;
else if (!NetworkOpenInfo)
Status = STATUS_INVALID_PARAMETER;
else
{
RtlZeroMemory(NetworkOpenInfo, sizeof(FILE_NETWORK_OPEN_INFORMATION));
Information = sizeof(FILE_NETWORK_OPEN_INFORMATION);
Status = STATUS_SUCCESS;
}
break;