{
NTSTATUS ntStatus = STATUS_BUFFER_TOO_SMALL;
- ULONG ulCopyLength;
+ ULONG ulLabelLength;
RtlZeroMemory( Buffer,
*Length);
if( *Length >= (ULONG)sizeof( FILE_FS_VOLUME_INFORMATION))
{
- if( *Length >= (ULONG)(FIELD_OFFSET( FILE_FS_VOLUME_INFORMATION, VolumeLabel) + (LONG)VolumeInfo->VolumeLabelLength))
- {
+ ulLabelLength = VolumeInfo->VolumeLabelLength +
+ VolumeInfo->CellLength + sizeof( WCHAR);
- ulCopyLength = (LONG)VolumeInfo->VolumeLabelLength;
+ if( *Length >= (ULONG)(FIELD_OFFSET( FILE_FS_VOLUME_INFORMATION, VolumeLabel) + ulLabelLength))
+ {
ntStatus = STATUS_SUCCESS;
}
else
{
- ulCopyLength = *Length - FIELD_OFFSET( FILE_FS_VOLUME_INFORMATION, VolumeLabel);
-
ntStatus = STATUS_BUFFER_OVERFLOW;
}
Buffer->VolumeSerialNumber = VolumeInfo->VolumeID;
- Buffer->VolumeLabelLength = VolumeInfo->VolumeLabelLength;
+ Buffer->VolumeLabelLength = ulLabelLength;
Buffer->SupportsObjects = FALSE;
*Length -= FIELD_OFFSET( FILE_FS_VOLUME_INFORMATION, VolumeLabel);
- if( ulCopyLength > 0)
+ if( *Length > 0)
{
RtlCopyMemory( Buffer->VolumeLabel,
- VolumeInfo->VolumeLabel,
- ulCopyLength);
+ VolumeInfo->Cell,
+ min( *Length, VolumeInfo->CellLength));
+
+ *Length -= min( *Length, VolumeInfo->CellLength);
+
+ if ( *Length >= sizeof( WCHAR))
+ {
- *Length -= ulCopyLength;
+ Buffer->VolumeLabel[ VolumeInfo->CellLength / sizeof( WCHAR)] = L'#';
+
+ *Length -= sizeof( WCHAR);
+
+ if ( *Length > 0) {
+
+ RtlCopyMemory( &Buffer->VolumeLabel[ (VolumeInfo->CellLength + sizeof( WCHAR)) / sizeof( WCHAR)],
+ VolumeInfo->VolumeLabel,
+ min( *Length, VolumeInfo->VolumeLabelLength));
+
+ *Length -= min( *Length, VolumeInfo->VolumeLabelLength);
+ }
+ }
}
}
IN PFILE_FS_ATTRIBUTE_INFORMATION Buffer,
IN OUT PULONG Length)
{
- UNREFERENCED_PARAMETER(VolumeInfo);
NTSTATUS ntStatus = STATUS_SUCCESS;
RtlZeroMemory( Buffer,
if( *Length >= (LONG)(sizeof( FILE_FS_ATTRIBUTE_INFORMATION)))
{
- Buffer->FileSystemAttributes = (FILE_CASE_PRESERVED_NAMES |
- FILE_UNICODE_ON_DISK |
- FILE_SUPPORTS_HARD_LINKS |
- FILE_SUPPORTS_REPARSE_POINTS);
+ Buffer->FileSystemAttributes = VolumeInfo->FileSystemAttributes;
Buffer->MaximumComponentNameLength = 255;