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>
18 /* FUNCTIONS *****************************************************************/
21 NpfsQueryPipeInformation(PDEVICE_OBJECT DeviceObject
,
23 PFILE_PIPE_INFORMATION Info
,
28 DPRINT("NpfsQueryPipeInformation()\n");
33 sizeof(FILE_PIPE_INFORMATION
));
36 // Info->CompletionMode =
38 *BufferLength
-= sizeof(FILE_PIPE_INFORMATION
);
39 return(STATUS_SUCCESS
);
44 NpfsQueryLocalPipeInformation(PDEVICE_OBJECT DeviceObject
,
46 PFILE_PIPE_LOCAL_INFORMATION Info
,
51 DPRINT("NpfsQueryLocalPipeInformation()\n");
56 sizeof(FILE_PIPE_LOCAL_INFORMATION
));
58 Info
->NamedPipeType
= Pipe
->PipeType
;
59 Info
->NamedPipeConfiguration
= Pipe
->PipeConfiguration
;
60 Info
->MaximumInstances
= Pipe
->MaximumInstances
;
61 Info
->CurrentInstances
= Pipe
->CurrentInstances
;
62 Info
->InboundQuota
= Pipe
->InboundQuota
;
63 Info
->OutboundQuota
= Pipe
->OutboundQuota
;
64 Info
->NamedPipeState
= Fcb
->PipeState
;
65 Info
->NamedPipeEnd
= Fcb
->PipeEnd
;
67 if (Fcb
->PipeEnd
== FILE_PIPE_SERVER_END
)
69 Info
->ReadDataAvailable
= Fcb
->ReadDataAvailable
;
70 Info
->WriteQuotaAvailable
= Fcb
->WriteQuotaAvailable
;
72 else if (Fcb
->OtherSide
!= NULL
)
74 Info
->ReadDataAvailable
= Fcb
->OtherSide
->ReadDataAvailable
;
75 Info
->WriteQuotaAvailable
= Fcb
->OtherSide
->WriteQuotaAvailable
;
78 *BufferLength
-= sizeof(FILE_PIPE_LOCAL_INFORMATION
);
79 return(STATUS_SUCCESS
);
84 NpfsQueryInformation(PDEVICE_OBJECT DeviceObject
,
87 PIO_STACK_LOCATION IoStack
;
88 FILE_INFORMATION_CLASS FileInformationClass
;
89 PFILE_OBJECT FileObject
;
90 PNPFS_DEVICE_EXTENSION DeviceExtension
;
97 DPRINT("NpfsQueryInformation(DeviceObject %p Irp %p)\n", DeviceObject
, Irp
);
99 IoStack
= IoGetCurrentIrpStackLocation (Irp
);
100 FileInformationClass
= IoStack
->Parameters
.QueryFile
.FileInformationClass
;
101 DeviceExtension
= DeviceObject
->DeviceExtension
;
102 FileObject
= IoStack
->FileObject
;
103 Fcb
= (PNPFS_FCB
)FileObject
->FsContext
;
106 SystemBuffer
= Irp
->AssociatedIrp
.SystemBuffer
;
107 BufferLength
= IoStack
->Parameters
.QueryFile
.Length
;
109 DPRINT("Pipe name: %wZ\n", &Pipe
->PipeName
);
110 DPRINT("FileInformationClass %d\n", FileInformationClass
);
111 DPRINT("SystemBuffer %p\n", SystemBuffer
);
112 DPRINT("BufferLength %lu\n", BufferLength
);
114 switch (FileInformationClass
)
116 case FilePipeInformation
:
117 Status
= NpfsQueryPipeInformation(DeviceObject
,
123 case FilePipeLocalInformation
:
124 Status
= NpfsQueryLocalPipeInformation(DeviceObject
,
130 case FilePipeRemoteInformation
:
131 Status
= STATUS_NOT_IMPLEMENTED
;
135 Status
= STATUS_NOT_SUPPORTED
;
138 Irp
->IoStatus
.Status
= Status
;
139 if (NT_SUCCESS(Status
))
140 Irp
->IoStatus
.Information
=
141 IoStack
->Parameters
.QueryFile
.Length
- BufferLength
;
143 Irp
->IoStatus
.Information
= 0;
144 IoCompleteRequest (Irp
, IO_NO_INCREMENT
);
151 NpfsSetInformation(PDEVICE_OBJECT DeviceObject
,
154 PIO_STACK_LOCATION IoStack
;
155 FILE_INFORMATION_CLASS FileInformationClass
;
156 PFILE_OBJECT FileObject
;
163 DPRINT("NpfsSetInformation(DeviceObject %p Irp %p)\n", DeviceObject
, Irp
);
165 IoStack
= IoGetCurrentIrpStackLocation (Irp
);
166 FileInformationClass
= IoStack
->Parameters
.QueryFile
.FileInformationClass
;
167 FileObject
= IoStack
->FileObject
;
168 Fcb
= (PNPFS_FCB
)FileObject
->FsContext
;
171 SystemBuffer
= Irp
->AssociatedIrp
.SystemBuffer
;
172 BufferLength
= IoStack
->Parameters
.QueryFile
.Length
;
174 DPRINT("Pipe name: %wZ\n", &Pipe
->PipeName
);
175 DPRINT("FileInformationClass %d\n", FileInformationClass
);
176 DPRINT("SystemBuffer %p\n", SystemBuffer
);
177 DPRINT("BufferLength %lu\n", BufferLength
);
179 switch (FileInformationClass
)
181 case FilePipeInformation
:
182 Status
= STATUS_NOT_IMPLEMENTED
;
184 case FilePipeLocalInformation
:
185 Status
= STATUS_NOT_IMPLEMENTED
;
187 case FilePipeRemoteInformation
:
188 Status
= STATUS_NOT_IMPLEMENTED
;
191 Status
= STATUS_NOT_SUPPORTED
;
194 Irp
->IoStatus
.Status
= Status
;
195 Irp
->IoStatus
.Information
= 0;
196 IoCompleteRequest(Irp
,