From 76a9fa12f7e236acba45373aca8378deca61ccde Mon Sep 17 00:00:00 2001 From: Juergen Schmied Date: Thu, 9 May 2002 19:40:30 +0000 Subject: [PATCH] Types and partial implementation for NtQueryVolumeInformationFile. --- dlls/ntdll/file.c | 79 ++++++++++++++++++++++++++++++++++++++++++++++ include/winioctl.h | 50 +++++++++++++++++++++++++++++ 2 files changed, 129 insertions(+) diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c index d80c706470d..dd17086519f 100644 --- a/dlls/ntdll/file.c +++ b/dlls/ntdll/file.c @@ -22,6 +22,7 @@ #include "ntdll_misc.h" #include "ntddk.h" +#include "winioctl.h" WINE_DEFAULT_DEBUG_CHANNEL(ntdll); @@ -252,7 +253,85 @@ NTSTATUS WINAPI NtQueryVolumeInformationFile ( IN ULONG Length, IN FS_INFORMATION_CLASS FSInformationClass) { + ULONG len = 0; + FIXME("(0x%08x %p %p 0x%08lx 0x%08x) stub!\n", FileHandle, IoStatusBlock, FSInformation, Length, FSInformationClass); + + switch ( FSInformationClass ) + { + case FileFsVolumeInformation: + len = sizeof( FILE_FS_VOLUME_INFORMATION ); + break; + case FileFsLabelInformation: + len = 0; + break; + + case FileFsSizeInformation: + len = sizeof( FILE_FS_SIZE_INFORMATION ); + break; + + case FileFsDeviceInformation: + len = sizeof( FILE_FS_DEVICE_INFORMATION ); + break; + case FileFsAttributeInformation: + len = sizeof( FILE_FS_ATTRIBUTE_INFORMATION ); + break; + + case FileFsControlInformation: + len = 0; + break; + + case FileFsFullSizeInformation: + len = 0; + break; + + case FileFsObjectIdInformation: + len = 0; + break; + + case FileFsMaximumInformation: + len = 0; + break; + } + + if (Length < len) + return STATUS_BUFFER_TOO_SMALL; + + switch ( FSInformationClass ) + { + case FileFsVolumeInformation: + break; + case FileFsLabelInformation: + break; + + case FileFsSizeInformation: + break; + + case FileFsDeviceInformation: + if (FSInformation) + { + FILE_FS_DEVICE_INFORMATION * DeviceInfo = FSInformation; + DeviceInfo->DeviceType = FILE_DEVICE_DISK; + DeviceInfo->Characteristics = 0; + break; + }; + case FileFsAttributeInformation: + break; + + case FileFsControlInformation: + break; + + case FileFsFullSizeInformation: + break; + + case FileFsObjectIdInformation: + break; + + case FileFsMaximumInformation: + break; + } + IoStatusBlock->DUMMYUNIONNAME.Status = STATUS_SUCCESS; + IoStatusBlock->Information = len; return STATUS_SUCCESS; } diff --git a/include/winioctl.h b/include/winioctl.h index 51aa6effc38..f1064cd2864 100644 --- a/include/winioctl.h +++ b/include/winioctl.h @@ -81,6 +81,9 @@ #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034 #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035 #define FILE_DEVICE_DFS_VOLUME 0x00000036 +#define FILE_DEVICE_SERENUM 0x00000037 +#define FILE_DEVICE_TERMSRV 0x00000038 +#define FILE_DEVICE_KSEC 0x00000039 #define METHOD_BUFFERED 0 #define METHOD_IN_DIRECT 1 @@ -345,4 +348,51 @@ typedef struct tagMID { /* End VWIN32 information */ +/* + * NT I/O-Manager + */ + +/* + * structures for NtQueryVolumeInformationFile + * (wdm.h) + */ + +/* FileFsVolumeInformation = 1 */ +typedef struct _FILE_FS_VOLUME_INFORMATION { + LARGE_INTEGER VolumeCreationTime; + ULONG VolumeSerialNumber; + ULONG VolumeLabelLength; + BOOLEAN SupportsObjects; + WCHAR VolumeLabel[1]; +} FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION; + +/* FileFsLabelInformation = 2 */ +/* + unknown +*/ + +/* FileFsSizeInformation = 3 */ +typedef struct _FILE_FS_SIZE_INFORMATION { + LARGE_INTEGER TotalAllocationUnits; + LARGE_INTEGER AvailableAllocationUnits; + ULONG SectorsPerAllocationUnit; + ULONG BytesPerSector; +} FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION; + +/* FileFsDeviceInformation = 4 */ +typedef struct _FILE_FS_DEVICE_INFORMATION { + DEVICE_TYPE DeviceType; + ULONG Characteristics; +} FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION; + +/* FileFsAttributeInformation = 5 */ +typedef struct _FILE_FS_ATTRIBUTE_INFORMATION { + ULONG FileSystemAttribute; + LONG MaximumComponentNameLength; + ULONG FileSystemNameLength; + WCHAR FileSystemName[1]; +} FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION; + + + #endif