NtQueryVolumeInformationFile

Jürgen Schmied juergenschmied at lycos.de
Thu May 9 04:45:51 CDT 2002


dlls/ntdll/file.c
include/winioctl.h

types and partial implementation for NtQueryVolumeInformationFile
---
juergen.schmied at debitel.net



-------------- next part --------------
Index: wine/dlls/ntdll/file.c
===================================================================
RCS file: /home/wine/wine/dlls/ntdll/file.c,v
retrieving revision 1.11
diff -d -u -r1.11 file.c
--- wine/dlls/ntdll/file.c	9 Mar 2002 23:39:09 -0000	1.11
+++ wine/dlls/ntdll/file.c	7 May 2002 18:58:07 -0000
@@ -22,6 +22,7 @@
 #include "ntdll_misc.h"
 
 #include "ntddk.h"
+#include "winioctl.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(ntdll);
 
@@ -252,7 +253,88 @@
 	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;
 }
+
+
+
Index: wine/include/winioctl.h
===================================================================
RCS file: /home/wine/wine/include/winioctl.h,v
retrieving revision 1.9
diff -d -u -r1.9 winioctl.h
--- wine/include/winioctl.h	10 Mar 2002 00:02:34 -0000	1.9
+++ wine/include/winioctl.h	7 May 2002 18:58:45 -0000
@@ -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,52 @@
 
 /* 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
+



More information about the wine-patches mailing list