master
  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@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
 27extern "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
 78typedef struct _VOLUME_LOGICAL_OFFSET {
 79  LONGLONG  LogicalOffset;
 80} VOLUME_LOGICAL_OFFSET, *PVOLUME_LOGICAL_OFFSET;
 81
 82typedef struct _VOLUME_PHYSICAL_OFFSET {
 83  ULONG  DiskNumber;
 84  LONGLONG  Offset;
 85} VOLUME_PHYSICAL_OFFSET, *PVOLUME_PHYSICAL_OFFSET;
 86
 87typedef struct _VOLUME_PHYSICAL_OFFSETS {
 88  ULONG  NumberOfPhysicalOffsets;
 89  VOLUME_PHYSICAL_OFFSET  PhysicalOffset[1];
 90} VOLUME_PHYSICAL_OFFSETS, *PVOLUME_PHYSICAL_OFFSETS;
 91
 92typedef 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
 98typedef struct _VOLUME_GET_GPT_ATTRIBUTES_INFORMATION {
 99  ULONGLONG  GptAttributes;
100} VOLUME_GET_GPT_ATTRIBUTES_INFORMATION, *PVOLUME_GET_GPT_ATTRIBUTES_INFORMATION;
101
102typedef 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
110typedef struct _DISK_EXTENT {
111	ULONG  DiskNumber;
112	LARGE_INTEGER  StartingOffset;
113	LARGE_INTEGER  ExtentLength;
114} DISK_EXTENT, *PDISK_EXTENT;
115
116typedef struct _VOLUME_DISK_EXTENTS {
117	ULONG  NumberOfDiskExtents;
118	DISK_EXTENT  Extents[1];
119} VOLUME_DISK_EXTENTS, *PVOLUME_DISK_EXTENTS;
120
121typedef struct _VOLUME_NUMBER {
122	ULONG  VolumeNumber;
123	WCHAR  VolumeManagerName[8];
124} VOLUME_NUMBER, *PVOLUME_NUMBER;
125
126typedef 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_ */