Hi,

the below patch adds a bit of file and file system releated stuff
to winternl.h.  This is quite useful functionality and used by a
few Cygwin tools I'd like to keep compilable when we switch to mingw64
headers.

Ok to apply?

Btw., most function declarations in winternl.h use the WINAPI
decoration.  Since all these functions are ntdll.dll functions, this
should actually be NTAPI.  Granted, it's the same thing, but it's
the more correct name for the same thing...
If you agree, I'd replace WINAPI with NTAPI throughout as well.  Is
that ok?


Thanks,
Corinna


        * winternl.h (enum _FSINFOCLASS): Define.
        (struct _FILE_FS_VOLUME_INFORMATION): Define.
        (struct _FILE_FS_LABEL_INFORMATION): Define.
        (struct _FILE_FS_SIZE_INFORMATION): Define.
        (struct _FILE_FS_DEVICE_INFORMATION): Define.
        (struct _FILE_FS_ATTRIBUTE_INFORMATION): Define.
        (struct _FILE_FS_FULL_SIZE_INFORMATION): Define.
        (struct _FILE_FS_OBJECTID_INFORMATION): Define.
        (NtFsControlFile): Declare.
        (NtQueryVolumeInformationFile): Declare.
        (NtSetInformationFile): Declare.
        (NtSetVolumeInformationFile): Declare.
        (RtlDosPathNameToNtPathName_U): Declare.


Index: include/winternl.h
===================================================================
--- include/winternl.h  (revision 5428)
+++ include/winternl.h  (working copy)
@@ -474,7 +474,66 @@
     FILE_ALIGNMENT_INFORMATION AlignmentInformation;
     FILE_NAME_INFORMATION      NameInformation;
   } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
- 
+
+  typedef enum _FSINFOCLASS {
+    FileFsVolumeInformation = 1,
+    FileFsLabelInformation,
+    FileFsSizeInformation,
+    FileFsDeviceInformation,
+    FileFsAttributeInformation,
+    FileFsControlInformation,
+    FileFsFullSizeInformation,
+    FileFsObjectIdInformation,
+    FileFsDriverPathInformation,
+    FileFsVolumeFlagsInformation,
+    FileFsMaximumInformation
+  } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
+
+  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;
+
+  typedef struct _FILE_FS_LABEL_INFORMATION {
+    ULONG VolumeLabelLength;
+    WCHAR VolumeLabel[1];
+  } FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
+
+  typedef struct _FILE_FS_SIZE_INFORMATION {
+    LARGE_INTEGER TotalAllocationUnits;
+    LARGE_INTEGER AvailableAllocationUnits;
+    ULONG SectorsPerAllocationUnit;
+    ULONG BytesPerSector;
+  } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
+
+  typedef struct _FILE_FS_DEVICE_INFORMATION {
+    DEVICE_TYPE DeviceType;
+    ULONG Characteristics;
+  } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
+
+  typedef struct _FILE_FS_ATTRIBUTE_INFORMATION {
+    ULONG FileSystemAttributes;
+    ULONG MaximumComponentNameLength;
+    ULONG FileSystemNameLength;
+    WCHAR FileSystemName[1];
+  } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
+
+  typedef struct _FILE_FS_FULL_SIZE_INFORMATION {
+    LARGE_INTEGER TotalAllocationUnits;
+    LARGE_INTEGER CallerAvailableAllocationUnits;
+    LARGE_INTEGER ActualAvailableAllocationUnits;
+    ULONG SectorsPerAllocationUnit;
+    ULONG BytesPerSector;
+  } FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION;
+
+  typedef struct _FILE_FS_OBJECTID_INFORMATION {
+    UCHAR ObjectId[16];
+    UCHAR ExtendedInfo[48];
+  } FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION;
+
   typedef struct _IO_STATUS_BLOCK {
     __C89_NAMELESS union {
       NTSTATUS Status;
@@ -850,6 +909,7 @@
   NTSTATUS WINAPI NtClose(HANDLE Handle);
   NTSTATUS WINAPI NtCreateFile(PHANDLE FileHandle,ACCESS_MASK 
DesiredAccess,POBJECT_ATTRIBUTES ObjectAttributes,PIO_STATUS_BLOCK 
IoStatusBlock,PLARGE_INTEGER AllocationSize,ULONG FileAttributes,ULONG 
ShareAccess,ULONG CreateDisposition,ULONG CreateOptions,PVOID EaBuffer,ULONG 
EaLength);
   NTSTATUS WINAPI NtOpenFile(PHANDLE FileHandle,ACCESS_MASK 
DesiredAccess,POBJECT_ATTRIBUTES ObjectAttributes,PIO_STATUS_BLOCK 
IoStatusBlock,ULONG ShareAccess,ULONG OpenOptions);
+  NTSTATUS WINAPI NtFsControlFile(HANDLE FileHandle,HANDLE 
Event,PIO_APC_ROUTINE ApcRoutine,PVOID ApcContext,PIO_STATUS_BLOCK 
IoStatusBlock,ULONG IoControlCode,PVOID InputBuffer,ULONG 
InputBufferLength,PVOID OutputBuffer,ULONG OutputBufferLength);
   NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE FileHandle,HANDLE 
Event,PIO_APC_ROUTINE ApcRoutine,PVOID ApcContext,PIO_STATUS_BLOCK 
IoStatusBlock,ULONG IoControlCode,PVOID InputBuffer,ULONG 
InputBufferLength,PVOID OutputBuffer,ULONG OutputBufferLength);
   NTSTATUS WINAPI NtWaitForSingleObject(HANDLE Handle,BOOLEAN 
Alertable,PLARGE_INTEGER Timeout);
   BOOLEAN WINAPI RtlIsNameLegalDOS8Dot3(PUNICODE_STRING Name,POEM_STRING 
OemName,PBOOLEAN NameContainsSpaces);
@@ -860,7 +920,10 @@
   NTSTATUS WINAPI NtQueryObject(HANDLE Handle,OBJECT_INFORMATION_CLASS 
ObjectInformationClass,PVOID ObjectInformation,ULONG 
ObjectInformationLength,PULONG ReturnLength);
   NTSTATUS WINAPI NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS 
SystemInformationClass,PVOID SystemInformation,ULONG 
SystemInformationLength,PULONG ReturnLength);
   NTSTATUS WINAPI NtQuerySystemTime(PLARGE_INTEGER SystemTime);
+  NTSTATUS WINAPI NtQueryVolumeInformationFile(HANDLE hFile,PIO_STATUS_BLOCK 
io,PVOID ptr,ULONG len,FS_INFORMATION_CLASS FsInformationClass);
+  NTSTATUS NTAPI NtSetInformationFile(HANDLE hFile,PIO_STATUS_BLOCK io,PVOID 
ptr,ULONG len,FILE_INFORMATION_CLASS FileInformationClass);
   NTSTATUS NTAPI NtSetInformationProcess(HANDLE ProcessHandle, 
PROCESSINFOCLASS ProcessInformationClass, PVOID ProcessInformation, ULONG 
ProcessInformationLength);
+  NTSTATUS NTAPI NtSetVolumeInformationFile(HANDLE hFile,PIO_STATUS_BLOCK 
io,PVOID ptr,ULONG len,FILE_INFORMATION_CLASS FileInformationClass);
   NTSTATUS WINAPI RtlLocalTimeToSystemTime(PLARGE_INTEGER 
LocalTime,PLARGE_INTEGER SystemTime);
   BOOLEAN WINAPI RtlTimeToSecondsSince1970(PLARGE_INTEGER Time,PULONG 
ElapsedSeconds);
   VOID WINAPI RtlFreeAnsiString(PANSI_STRING AnsiString);
@@ -877,6 +940,7 @@
   NTSTATUS WINAPI RtlConvertSidToUnicodeString(PUNICODE_STRING 
UnicodeString,PSID Sid,BOOLEAN AllocateDestinationString);
   ULONG WINAPI RtlUniform(PULONG Seed);
   VOID WINAPI RtlUnwind (PVOID TargetFrame,PVOID TargetIp,PEXCEPTION_RECORD 
ExceptionRecord,PVOID ReturnValue);
+  BOOL WINAPI RtlDosPathNameToNtPathName_U(PCWSTR DosPathName, PUNICODE_STRING 
NtPathName, PCWSTR *NtFileNamePart, VOID *DirectoryInfo);
 
 #ifdef __ia64__
   VOID RtlUnwind2(FRAME_POINTERS TargetFrame,PVOID TargetIp,PEXCEPTION_RECORD 
ExceptionRecord,PVOID ReturnValue,PCONTEXT ContextRecord);

------------------------------------------------------------------------------
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev
_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to