2 * PROJECT: ReactOS Named Pipe FileSystem
3 * LICENSE: BSD - See COPYING.ARM in the top level directory
4 * FILE: drivers/filesystems/npfs/volinfo.c
5 * PURPOSE: Named Pipe FileSystem Volume Information
6 * PROGRAMMERS: ReactOS Portable Systems Group
9 /* INCLUDES *******************************************************************/
13 // File ID number for NPFS bugchecking support
14 #define NPFS_BUGCHECK_FILE_ID (NPFS_BUGCHECK_VOLINFO)
16 /* FUNCTIONS ******************************************************************/
20 NpQueryFsVolumeInfo(IN PVOID Buffer
,
23 PFILE_FS_VOLUME_INFORMATION InfoBuffer
= Buffer
;
27 *Length
-= sizeof(*InfoBuffer
);
29 InfoBuffer
->VolumeCreationTime
.LowPart
= 0;
30 InfoBuffer
->VolumeCreationTime
.HighPart
= 0;
31 InfoBuffer
->VolumeSerialNumber
= 0;
32 InfoBuffer
->SupportsObjects
= 0;
35 InfoBuffer
->VolumeLabelLength
= 18;
39 NameLength
= (USHORT
)*Length
;
40 Status
= STATUS_BUFFER_OVERFLOW
;
44 Status
= STATUS_SUCCESS
;
47 RtlCopyMemory(InfoBuffer
->VolumeLabel
, L
"Named Pipe", NameLength
);
48 *Length
-= NameLength
;
55 NpQueryFsSizeInfo(IN PVOID Buffer
,
58 PFILE_FS_SIZE_INFORMATION InfoBuffer
= Buffer
;
60 *Length
-= sizeof(*InfoBuffer
);
62 InfoBuffer
->TotalAllocationUnits
.QuadPart
= 0;
63 InfoBuffer
->AvailableAllocationUnits
.QuadPart
= 0;
64 InfoBuffer
->SectorsPerAllocationUnit
= 1;
65 InfoBuffer
->BytesPerSector
= 1;
67 return STATUS_SUCCESS
;
72 NpQueryFsDeviceInfo(IN PVOID Buffer
,
75 PFILE_FS_DEVICE_INFORMATION InfoBuffer
= Buffer
;
78 if (*Length
>= sizeof(*InfoBuffer
))
80 InfoBuffer
->DeviceType
= 0;
81 InfoBuffer
->Characteristics
= 0;
82 InfoBuffer
->DeviceType
= FILE_DEVICE_NAMED_PIPE
;
83 *Length
-= sizeof(*InfoBuffer
);
84 Status
= STATUS_SUCCESS
;
88 Status
= STATUS_BUFFER_OVERFLOW
;
95 NpQueryFsAttributeInfo(IN PVOID Buffer
,
98 PFILE_FS_ATTRIBUTE_INFORMATION InfoBuffer
= Buffer
;
102 NameLength
= (USHORT
)(*Length
- 12);
106 Status
= STATUS_BUFFER_OVERFLOW
;
112 Status
= STATUS_SUCCESS
;
115 InfoBuffer
->MaximumComponentNameLength
= 0xFFFFFFFF;
116 InfoBuffer
->FileSystemNameLength
= 8;
117 InfoBuffer
->FileSystemAttributes
= FILE_CASE_PRESERVED_NAMES
;
118 RtlCopyMemory(InfoBuffer
->FileSystemName
, L
"NPFS", NameLength
);
125 NpQueryFsFullSizeInfo(IN PVOID Buffer
,
126 IN OUT PULONG Length
)
128 PFILE_FS_FULL_SIZE_INFORMATION InfoBuffer
= Buffer
;
130 *Length
-= sizeof(*InfoBuffer
);
132 RtlZeroMemory(InfoBuffer
, sizeof(*InfoBuffer
));
134 return STATUS_SUCCESS
;
139 NpCommonQueryVolumeInformation(IN PDEVICE_OBJECT DeviceObject
,
142 PIO_STACK_LOCATION IoStack
;
143 FILE_INFORMATION_CLASS InfoClass
;
149 IoStack
= IoGetCurrentIrpStackLocation(Irp
);
150 Buffer
= Irp
->AssociatedIrp
.SystemBuffer
;
151 Length
= IoStack
->Parameters
.QueryVolume
.Length
;
152 InfoClass
= IoStack
->Parameters
.QueryVolume
.FsInformationClass
;
156 case FileFsVolumeInformation
:
157 Status
= NpQueryFsVolumeInfo(Buffer
, &Length
);
159 case FileFsSizeInformation
:
160 Status
= NpQueryFsSizeInfo(Buffer
, &Length
);
162 case FileFsDeviceInformation
:
163 Status
= NpQueryFsDeviceInfo(Buffer
, &Length
);
165 case FileFsAttributeInformation
:
166 Status
= NpQueryFsAttributeInfo(Buffer
, &Length
);
168 case FileFsFullSizeInformation
:
169 Status
= NpQueryFsFullSizeInfo(Buffer
, &Length
);
172 Status
= STATUS_NOT_SUPPORTED
;
176 Irp
->IoStatus
.Information
= IoStack
->Parameters
.QueryVolume
.Length
- Length
;
182 NpFsdQueryVolumeInformation(IN PDEVICE_OBJECT DeviceObject
,
188 FsRtlEnterFileSystem();
189 ExAcquireResourceSharedLite(&NpVcb
->Lock
, TRUE
);
191 Status
= NpCommonQueryVolumeInformation(DeviceObject
, Irp
);
193 ExReleaseResourceLite(&NpVcb
->Lock
);
194 FsRtlExitFileSystem();
196 if (Status
!= STATUS_PENDING
)
198 Irp
->IoStatus
.Status
= Status
;
199 IoCompleteRequest(Irp
, IO_NAMED_PIPE_INCREMENT
);