/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
-* FILE: drivers/fs/np/finfo.c
+* FILE: drivers/filesystems/npfs/finfo.c
* PURPOSE: Named pipe filesystem
* PROGRAMMER: Eric Kohl
*/
{
PNPFS_FCB Fcb;
PFILE_PIPE_INFORMATION Request;
+
+ UNREFERENCED_PARAMETER(DeviceObject);
+
DPRINT("NpfsSetPipeInformation()\n");
+ if (*BufferLength < sizeof(FILE_PIPE_INFORMATION))
+ {
+ /* Buffer too small */
+ return STATUS_INFO_LENGTH_MISMATCH;
+ }
+
+
/* Get the Pipe and data */
Fcb = Ccb->Fcb;
Request = (PFILE_PIPE_INFORMATION)Info;
{
Fcb->ClientReadMode = Request->ReadMode;
}
- else
+ else
{
Fcb->ServerReadMode = Request->ReadMode;
}
{
PNPFS_FCB Fcb;
PFILE_PIPE_REMOTE_INFORMATION Request;
+
+ UNREFERENCED_PARAMETER(DeviceObject);
+
DPRINT("NpfsSetPipeRemoteInformation()\n");
+ if (*BufferLength < sizeof(FILE_PIPE_REMOTE_INFORMATION))
+ {
+ /* Buffer too small */
+ return STATUS_INFO_LENGTH_MISMATCH;
+ }
+
/* Get the Pipe and data */
Fcb = Ccb->Fcb;
Request = (PFILE_PIPE_REMOTE_INFORMATION)Info;
{
PNPFS_FCB Fcb;
ULONG ConnectionSideReadMode;
+
+ UNREFERENCED_PARAMETER(DeviceObject);
+
DPRINT("NpfsQueryPipeInformation()\n");
+ if (*BufferLength < sizeof(FILE_PIPE_INFORMATION))
+ {
+ /* Buffer too small */
+ *BufferLength = sizeof(FILE_PIPE_INFORMATION);
+ return STATUS_BUFFER_OVERFLOW;
+ }
+
/* Get the Pipe */
Fcb = Ccb->Fcb;
Info->ReadMode = ConnectionSideReadMode;
/* Return success */
- *BufferLength -= sizeof(FILE_PIPE_INFORMATION);
+ *BufferLength = sizeof(FILE_PIPE_INFORMATION);
return STATUS_SUCCESS;
}
PULONG BufferLength)
{
PNPFS_FCB Fcb;
+
+ UNREFERENCED_PARAMETER(DeviceObject);
+
DPRINT("NpfsQueryPipeRemoteInformation()\n");
+ if (*BufferLength < sizeof(FILE_PIPE_REMOTE_INFORMATION))
+ {
+ /* Buffer too small */
+ *BufferLength = sizeof(FILE_PIPE_REMOTE_INFORMATION);
+ return STATUS_BUFFER_OVERFLOW;
+ }
+
/* Get the Pipe */
Fcb = Ccb->Fcb;
Info->CollectDataTime = Fcb->TimeOut;
/* Return success */
- *BufferLength -= sizeof(FILE_PIPE_REMOTE_INFORMATION);
+ *BufferLength = sizeof(FILE_PIPE_REMOTE_INFORMATION);
return STATUS_SUCCESS;
}
{
PNPFS_FCB Fcb;
+ UNREFERENCED_PARAMETER(DeviceObject);
+
DPRINT("NpfsQueryLocalPipeInformation()\n");
+ if (*BufferLength < sizeof(FILE_PIPE_REMOTE_INFORMATION))
+ {
+ /* Buffer too small */
+ *BufferLength = sizeof(FILE_PIPE_REMOTE_INFORMATION);
+ return STATUS_BUFFER_OVERFLOW;
+ }
+
+ /* Get the Pipe */
Fcb = Ccb->Fcb;
+ /* Clear Info */
RtlZeroMemory(Info,
sizeof(FILE_PIPE_LOCAL_INFORMATION));
+ /* Return Info */
Info->NamedPipeType = Fcb->PipeType;
Info->NamedPipeConfiguration = Fcb->PipeConfiguration;
Info->MaximumInstances = Fcb->MaximumInstances;
Info->WriteQuotaAvailable = Ccb->OtherSide->WriteQuotaAvailable;
}
- *BufferLength -= sizeof(FILE_PIPE_LOCAL_INFORMATION);
+ *BufferLength = sizeof(FILE_PIPE_LOCAL_INFORMATION);
return STATUS_SUCCESS;
}
PIO_STACK_LOCATION IoStack;
FILE_INFORMATION_CLASS FileInformationClass;
PFILE_OBJECT FileObject;
- PNPFS_DEVICE_EXTENSION DeviceExtension;
+ //PNPFS_VCB Vcb;
PNPFS_FCB Fcb;
PNPFS_CCB Ccb;
PVOID SystemBuffer;
IoStack = IoGetCurrentIrpStackLocation (Irp);
FileInformationClass = IoStack->Parameters.QueryFile.FileInformationClass;
- DeviceExtension = DeviceObject->DeviceExtension;
+ //Vcb = (PNPFS_VCB)DeviceObject->DeviceExtension;
FileObject = IoStack->FileObject;
Ccb = (PNPFS_CCB)FileObject->FsContext2;
Fcb = Ccb->Fcb;
default:
Status = STATUS_NOT_SUPPORTED;
+ BufferLength = 0;
}
Irp->IoStatus.Status = Status;
- if (NT_SUCCESS(Status))
- Irp->IoStatus.Information =
- IoStack->Parameters.QueryFile.Length - BufferLength;
- else
- Irp->IoStatus.Information = 0;
+ Irp->IoStatus.Information = BufferLength;
+
IoCompleteRequest (Irp, IO_NO_INCREMENT);
return Status;