Home | History | Annotate | Download | only in include
      1 /*
      2  * ntddvol.h
      3  *
      4  * Volume IOCTL interface.
      5  *
      6  * This file is part of the w32api package.
      7  *
      8  * Contributors:
      9  *   Created by Casper S. Hornstrup <chorns (at) users.sourceforge.net>
     10  *
     11  * THIS SOFTWARE IS NOT COPYRIGHTED
     12  *
     13  * This source code is offered for use in the public domain. You may
     14  * use, modify or distribute it freely.
     15  *
     16  * This code is distributed in the hope that it will be useful but
     17  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
     18  * DISCLAIMED. This includes but is not limited to warranties of
     19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
     20  *
     21  */
     22 
     23 #ifndef _NTDDVOL_
     24 #define _NTDDVOL_
     25 
     26 #ifdef __cplusplus
     27 extern "C" {
     28 #endif
     29 
     30 #define IOCTL_VOLUME_BASE                 ((ULONG) 'V')
     31 
     32 #define IOCTL_VOLUME_LOGICAL_TO_PHYSICAL \
     33   CTL_CODE(IOCTL_VOLUME_BASE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
     34 
     35 #define IOCTL_VOLUME_PHYSICAL_TO_LOGICAL \
     36   CTL_CODE(IOCTL_VOLUME_BASE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
     37 
     38 #define IOCTL_VOLUME_READ_PLEX \
     39   CTL_CODE(IOCTL_VOLUME_BASE, 11, METHOD_OUT_DIRECT, FILE_READ_ACCESS)
     40 
     41 #define IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS \
     42   CTL_CODE(IOCTL_VOLUME_BASE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
     43 
     44 #define IOCTL_VOLUME_IS_CLUSTERED \
     45   CTL_CODE(IOCTL_VOLUME_BASE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
     46 
     47 #define IOCTL_VOLUME_QUERY_VOLUME_NUMBER \
     48   CTL_CODE(IOCTL_VOLUME_BASE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
     49 
     50 #define IOCTL_VOLUME_IS_PARTITION \
     51   CTL_CODE(IOCTL_VOLUME_BASE, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
     52 
     53 #define IOCTL_VOLUME_SET_GPT_ATTRIBUTES \
     54   CTL_CODE(IOCTL_VOLUME_BASE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
     55 
     56 #define IOCTL_VOLUME_GET_GPT_ATTRIBUTES \
     57   CTL_CODE(IOCTL_VOLUME_BASE, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
     58 
     59 #define IOCTL_VOLUME_SUPPORTS_ONLINE_OFFLINE \
     60   CTL_CODE(IOCTL_VOLUME_BASE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
     61 
     62 #define IOCTL_VOLUME_ONLINE \
     63   CTL_CODE(IOCTL_VOLUME_BASE, 2, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
     64 
     65 #define IOCTL_VOLUME_OFFLINE \
     66   CTL_CODE(IOCTL_VOLUME_BASE, 3, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
     67 
     68 #define IOCTL_VOLUME_IS_OFFLINE \
     69   CTL_CODE(IOCTL_VOLUME_BASE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
     70 
     71 #define IOCTL_VOLUME_IS_IO_CAPABLE \
     72   CTL_CODE(IOCTL_VOLUME_BASE, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
     73 
     74 #define IOCTL_VOLUME_QUERY_FAILOVER_SET \
     75   CTL_CODE(IOCTL_VOLUME_BASE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
     76 
     77 
     78 typedef struct _VOLUME_LOGICAL_OFFSET {
     79   LONGLONG  LogicalOffset;
     80 } VOLUME_LOGICAL_OFFSET, *PVOLUME_LOGICAL_OFFSET;
     81 
     82 typedef struct _VOLUME_PHYSICAL_OFFSET {
     83   ULONG  DiskNumber;
     84   LONGLONG  Offset;
     85 } VOLUME_PHYSICAL_OFFSET, *PVOLUME_PHYSICAL_OFFSET;
     86 
     87 typedef struct _VOLUME_PHYSICAL_OFFSETS {
     88   ULONG  NumberOfPhysicalOffsets;
     89   VOLUME_PHYSICAL_OFFSET  PhysicalOffset[1];
     90 } VOLUME_PHYSICAL_OFFSETS, *PVOLUME_PHYSICAL_OFFSETS;
     91 
     92 typedef struct _VOLUME_READ_PLEX_INPUT {
     93   LARGE_INTEGER  ByteOffset;
     94   ULONG  Length;
     95   ULONG  PlexNumber;
     96 } VOLUME_READ_PLEX_INPUT, *PVOLUME_READ_PLEX_INPUT;
     97 
     98 typedef struct _VOLUME_GET_GPT_ATTRIBUTES_INFORMATION {
     99   ULONGLONG  GptAttributes;
    100 } VOLUME_GET_GPT_ATTRIBUTES_INFORMATION, *PVOLUME_GET_GPT_ATTRIBUTES_INFORMATION;
    101 
    102 typedef struct _VOLUME_SET_GPT_ATTRIBUTES_INFORMATION {
    103 	ULONGLONG  GptAttributes;
    104 	BOOLEAN  RevertOnClose;
    105 	BOOLEAN  ApplyToAllConnectedVolumes;
    106 	USHORT  Reserved1;
    107 	ULONG  Reserved2;
    108 } VOLUME_SET_GPT_ATTRIBUTES_INFORMATION, *PVOLUME_SET_GPT_ATTRIBUTES_INFORMATION;
    109 
    110 typedef struct _DISK_EXTENT {
    111 	ULONG  DiskNumber;
    112 	LARGE_INTEGER  StartingOffset;
    113 	LARGE_INTEGER  ExtentLength;
    114 } DISK_EXTENT, *PDISK_EXTENT;
    115 
    116 typedef struct _VOLUME_DISK_EXTENTS {
    117 	ULONG  NumberOfDiskExtents;
    118 	DISK_EXTENT  Extents[1];
    119 } VOLUME_DISK_EXTENTS, *PVOLUME_DISK_EXTENTS;
    120 
    121 typedef struct _VOLUME_NUMBER {
    122 	ULONG  VolumeNumber;
    123 	WCHAR  VolumeManagerName[8];
    124 } VOLUME_NUMBER, *PVOLUME_NUMBER;
    125 
    126 typedef struct _VOLUME_FAILOVER_SET {
    127 	ULONG  NumberOfDisks;
    128 	ULONG  DiskNumbers[1];
    129 } VOLUME_FAILOVER_SET, *PVOLUME_FAILOVER_SET;
    130 
    131 #ifdef __cplusplus
    132 }
    133 #endif
    134 
    135 #endif /* _NTDDVOL_ */
    136