1 /* $Id: finfo.c,v 1.5 2002/09/08 10:22:11 chorns Exp $
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * FILE: services/fs/np/finfo.c
6 * PURPOSE: Named pipe filesystem
7 * PROGRAMMER: Eric Kohl <ekohl@rz-online.de>
10 /* INCLUDES ******************************************************************/
12 #include <ddk/ntddk.h>
21 /* FUNCTIONS *****************************************************************/
24 NpfsQueryPipeInformation(PDEVICE_OBJECT DeviceObject
,
26 PFILE_PIPE_INFORMATION Info
,
31 DPRINT("NpfsQueryPipeInformation()\n");
36 sizeof(FILE_PIPE_INFORMATION
));
39 // Info->CompletionMode =
41 *BufferLength
-= sizeof(FILE_PIPE_INFORMATION
);
42 return(STATUS_SUCCESS
);
47 NpfsQueryLocalPipeInformation(PDEVICE_OBJECT DeviceObject
,
49 PFILE_PIPE_LOCAL_INFORMATION Info
,
54 DPRINT("NpfsQueryLocalPipeInformation()\n");
59 sizeof(FILE_PIPE_LOCAL_INFORMATION
));
61 Info
->NamedPipeType
= Pipe
->PipeType
;
62 Info
->NamedPipeConfiguration
= Pipe
->PipeConfiguration
;
63 Info
->MaximumInstances
= Pipe
->MaximumInstances
;
64 Info
->CurrentInstances
= Pipe
->CurrentInstances
;
65 Info
->InboundQuota
= Pipe
->InboundQuota
;
66 Info
->OutboundQuota
= Pipe
->OutboundQuota
;
67 Info
->NamedPipeState
= Fcb
->PipeState
;
68 Info
->NamedPipeEnd
= Fcb
->PipeEnd
;
70 if (Fcb
->PipeEnd
== FILE_PIPE_SERVER_END
)
72 Info
->ReadDataAvailable
= Fcb
->ReadDataAvailable
;
73 Info
->WriteQuotaAvailable
= Fcb
->WriteQuotaAvailable
;
75 else if (Fcb
->OtherSide
!= NULL
)
77 Info
->ReadDataAvailable
= Fcb
->OtherSide
->ReadDataAvailable
;
78 Info
->WriteQuotaAvailable
= Fcb
->OtherSide
->WriteQuotaAvailable
;
81 *BufferLength
-= sizeof(FILE_PIPE_LOCAL_INFORMATION
);
82 return(STATUS_SUCCESS
);
87 NpfsQueryInformation(PDEVICE_OBJECT DeviceObject
,
90 PIO_STACK_LOCATION IoStack
;
91 FILE_INFORMATION_CLASS FileInformationClass
;
92 PFILE_OBJECT FileObject
;
93 PNPFS_DEVICE_EXTENSION DeviceExtension
;
100 DPRINT("NpfsQueryInformation(DeviceObject %p Irp %p)\n", DeviceObject
, Irp
);
102 IoStack
= IoGetCurrentIrpStackLocation (Irp
);
103 FileInformationClass
= IoStack
->Parameters
.QueryFile
.FileInformationClass
;
104 DeviceExtension
= DeviceObject
->DeviceExtension
;
105 FileObject
= IoStack
->FileObject
;
106 Fcb
= (PNPFS_FCB
)FileObject
->FsContext
;
109 SystemBuffer
= Irp
->AssociatedIrp
.SystemBuffer
;
110 BufferLength
= IoStack
->Parameters
.QueryFile
.Length
;
112 DPRINT("Pipe name: %wZ\n", &Pipe
->PipeName
);
113 DPRINT("FileInformationClass %d\n", FileInformationClass
);
114 DPRINT("SystemBuffer %p\n", SystemBuffer
);
115 DPRINT("BufferLength %lu\n", BufferLength
);
117 switch (FileInformationClass
)
119 case FilePipeInformation
:
120 Status
= NpfsQueryPipeInformation(DeviceObject
,
126 case FilePipeLocalInformation
:
127 Status
= NpfsQueryLocalPipeInformation(DeviceObject
,
133 case FilePipeRemoteInformation
:
134 Status
= STATUS_NOT_IMPLEMENTED
;
138 Status
= STATUS_NOT_SUPPORTED
;
141 Irp
->IoStatus
.Status
= Status
;
142 if (NT_SUCCESS(Status
))
143 Irp
->IoStatus
.Information
=
144 IoStack
->Parameters
.QueryFile
.Length
- BufferLength
;
146 Irp
->IoStatus
.Information
= 0;
147 IoCompleteRequest (Irp
, IO_NO_INCREMENT
);
154 NpfsSetInformation(PDEVICE_OBJECT DeviceObject
,
157 PIO_STACK_LOCATION IoStack
;
158 FILE_INFORMATION_CLASS FileInformationClass
;
159 PFILE_OBJECT FileObject
;
166 DPRINT("NpfsSetInformation(DeviceObject %p Irp %p)\n", DeviceObject
, Irp
);
168 IoStack
= IoGetCurrentIrpStackLocation (Irp
);
169 FileInformationClass
= IoStack
->Parameters
.QueryFile
.FileInformationClass
;
170 FileObject
= IoStack
->FileObject
;
171 Fcb
= (PNPFS_FCB
)FileObject
->FsContext
;
174 SystemBuffer
= Irp
->AssociatedIrp
.SystemBuffer
;
175 BufferLength
= IoStack
->Parameters
.QueryFile
.Length
;
177 DPRINT("Pipe name: %wZ\n", &Pipe
->PipeName
);
178 DPRINT("FileInformationClass %d\n", FileInformationClass
);
179 DPRINT("SystemBuffer %p\n", SystemBuffer
);
180 DPRINT("BufferLength %lu\n", BufferLength
);
182 switch (FileInformationClass
)
184 case FilePipeInformation
:
185 Status
= STATUS_NOT_IMPLEMENTED
;
187 case FilePipeLocalInformation
:
188 Status
= STATUS_NOT_IMPLEMENTED
;
190 case FilePipeRemoteInformation
:
191 Status
= STATUS_NOT_IMPLEMENTED
;
194 Status
= STATUS_NOT_SUPPORTED
;
197 Irp
->IoStatus
.Status
= Status
;
198 Irp
->IoStatus
.Information
= 0;
199 IoCompleteRequest(Irp
,