update for HEAD-2003091401
[reactos.git] / include / ntos / disk.h
1 /* $Id$
2  *
3  * COPYRIGHT:    See COPYING in the top level directory
4  * PROJECT:      ReactOS kernel
5  * FILE:         include/disk.h
6  * PURPOSE:      Disk related definitions used by all the parts of the system
7  * PROGRAMMER:   David Welch <welch@cwcom.net>
8  * UPDATE HISTORY: 
9  *               27/06/00: Created
10  */
11
12 #ifndef __INCLUDE_DISK_H
13 #define __INCLUDE_DISK_H
14
15 #define IOCTL_DISK_BASE                   FILE_DEVICE_DISK
16
17 #define IOCTL_DISK_GET_DRIVE_GEOMETRY     CTL_CODE(IOCTL_DISK_BASE, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS)
18 #define IOCTL_DISK_GET_PARTITION_INFO     CTL_CODE(IOCTL_DISK_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
19 #define IOCTL_DISK_SET_PARTITION_INFO     CTL_CODE(IOCTL_DISK_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
20 #define IOCTL_DISK_GET_DRIVE_LAYOUT       CTL_CODE(IOCTL_DISK_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
21 #define IOCTL_DISK_SET_DRIVE_LAYOUT       CTL_CODE(IOCTL_DISK_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
22 #define IOCTL_DISK_VERIFY                 CTL_CODE(IOCTL_DISK_BASE, 0x0005, METHOD_BUFFERED, FILE_ANY_ACCESS)
23 #define IOCTL_DISK_FORMAT_TRACKS          CTL_CODE(IOCTL_DISK_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
24 #define IOCTL_DISK_REASSIGN_BLOCKS        CTL_CODE(IOCTL_DISK_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
25 #define IOCTL_DISK_PERFORMANCE            CTL_CODE(IOCTL_DISK_BASE, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS)
26 #define IOCTL_DISK_IS_WRITABLE            CTL_CODE(IOCTL_DISK_BASE, 0x0009, METHOD_BUFFERED, FILE_ANY_ACCESS)
27 #define IOCTL_DISK_LOGGING                CTL_CODE(IOCTL_DISK_BASE, 0x000A, METHOD_BUFFERED, FILE_ANY_ACCESS)
28 #define IOCTL_DISK_FORMAT_TRACKS_EX       CTL_CODE(IOCTL_DISK_BASE, 0x000B, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
29 #define IOCTL_DISK_HISTOGRAM_STRUCTURE    CTL_CODE(IOCTL_DISK_BASE, 0x000C, METHOD_BUFFERED, FILE_ANY_ACCESS)
30 #define IOCTL_DISK_HISTOGRAM_DATA         CTL_CODE(IOCTL_DISK_BASE, 0x000D, METHOD_BUFFERED, FILE_ANY_ACCESS)
31 #define IOCTL_DISK_HISTOGRAM_RESET        CTL_CODE(IOCTL_DISK_BASE, 0x000E, METHOD_BUFFERED, FILE_ANY_ACCESS)
32 #define IOCTL_DISK_REQUEST_STRUCTURE      CTL_CODE(IOCTL_DISK_BASE, 0x000F, METHOD_BUFFERED, FILE_ANY_ACCESS)
33 #define IOCTL_DISK_REQUEST_DATA           CTL_CODE(IOCTL_DISK_BASE, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS)
34 #define IOCTL_DISK_CONTRIOLLER_NUMBER     CTL_CODE(IOCTL_DISK_BASE, 0x0011, METHOD_BUFFERED, FILE_ANY_ACCESS)
35
36 #define SMART_GET_VERSION                 CTL_CODE(IOCTL_DISK_BASE, 0x0020, METHOD_BUFFERED, FILE_READ_ACCESS)
37 #define SMART_SEND_DRIVE_COMMAND          CTL_CODE(IOCTL_DISK_BASE, 0x0021, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
38 #define SMART_RCV_DRIVE_DATA              CTL_CODE(IOCTL_DISK_BASE, 0x0022, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
39
40 #define IOCTL_DISK_INTERNAL_SET_VERIFY    CTL_CODE(IOCTL_DISK_BASE, 0x0100, METHOD_NEITHER, FILE_ANY_ACCESS)
41 #define IOCTL_DISK_INTERNAL_CLEAR_VERIFY  CTL_CODE(IOCTL_DISK_BASE, 0x0101, METHOD_NEITHER, FILE_ANY_ACCESS)
42
43 #define IOCTL_DISK_CHECK_VERIFY           CTL_CODE(IOCTL_DISK_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
44 #define IOCTL_DISK_MEDIA_REMOVAL          CTL_CODE(IOCTL_DISK_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
45 #define IOCTL_DISK_EJECT_MEDIA            CTL_CODE(IOCTL_DISK_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
46 #define IOCTL_DISK_LOAD_MEDIA             CTL_CODE(IOCTL_DISK_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
47 #define IOCTL_DISK_RESERVE                CTL_CODE(IOCTL_DISK_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
48 #define IOCTL_DISK_RELEASE                CTL_CODE(IOCTL_DISK_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
49 #define IOCTL_DISK_FIND_NEW_DEVICES       CTL_CODE(IOCTL_DISK_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
50 #define IOCTL_DISK_GET_MEDIA_TYPES        CTL_CODE(IOCTL_DISK_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)
51
52
53 #define PARTITION_ENTRY_UNUSED          0x00
54 #define PARTITION_FAT_12                0x01
55 #define PARTITION_XENIX_1               0x02
56 #define PARTITION_XENIX_2               0x03
57 #define PARTITION_FAT_16                0x04
58 #define PARTITION_EXTENDED              0x05
59 #define PARTITION_HUGE                  0x06
60 #define PARTITION_IFS                   0x07
61 #define PARTITION_FAT32                 0x0B
62 #define PARTITION_FAT32_XINT13          0x0C
63 #define PARTITION_XINT13                0x0E
64 #define PARTITION_XINT13_EXTENDED       0x0F
65 #define PARTITION_PREP                  0x41
66 #define PARTITION_LDM                   0x42
67 #define PARTITION_UNIX                  0x63
68
69 #define PARTITION_NTFT                  0x80
70 #define VALID_NTFT                      0xC0
71
72 #if 0
73 #define PTEmpty                         0x00
74 #define PTDOS3xPrimary                  0x01
75 #define PTXENIXRoot                     0x02
76 #define PTXENIXUsr                      0x03
77 #define PTOLDDOS16Bit                   0x04
78 #define PTDosExtended                   0x05
79 #define PTDos5xPrimary                  0x06
80 #define PTIfs                           0x07    /* e.g.: HPFS, NTFS, etc */
81 #define PTAIX                           0x08
82 #define PTAIXBootable                   0x09
83 #define PTOS2BootMgr                    0x0A
84 #define PTWin95FAT32                    0x0B
85 #define PTWin95FAT32LBA                 0x0C
86 #define PTWin95FAT16LBA                 0x0E
87 #define PTWin95ExtendedLBA              0x0F
88 #define PTVenix286                      0x40
89 #define PTNovell                        0x51
90 #define PTMicroport                     0x52
91 #define PTGnuHurd                       0x63
92 #define PTNetware286                    0x64
93 #define PTNetware386                    0x65
94 #define PTPCIX                          0x75
95 #define PTOldMinix                      0x80
96 #define PTMinix                         0x81
97 #define PTLinuxSwap                     0x82
98 #define PTLinuxExt2                     0x83
99 #define PTAmoeba                        0x93
100 #define PTAmoebaBBT                     0x94
101 #define PTBSD                           0xA5
102 #define PTBSDIFS                        0xB7
103 #define PTBSDISwap                      0xB8
104 #define PTSyrinx                        0xC7
105 #define PTCPM                           0xDB
106 #define PTDOSAccess                     0xE1
107 #define PTDOSRO                         0xE3
108 #define PTDOSSecondary                  0xF2
109 #define PTBBT                           0xFF
110 #endif
111
112 #define IsRecognizedPartition(P)  \
113     ((P) == PARTITION_FAT_12       || \
114      (P) == PARTITION_FAT_16       || \
115      (P) == PARTITION_HUGE         || \
116      (P) == PARTITION_IFS          || \
117      (P) == PARTITION_FAT32        || \
118      (P) == PARTITION_FAT32_XINT13 || \
119      (P) == PARTITION_XINT13)
120
121 #define IsContainerPartition(P)  \
122     ((P) == PARTITION_EXTENDED || \
123      (P) == PARTITION_XINT13_EXTENDED)
124
125
126 typedef enum _MEDIA_TYPE
127 {
128   Unknown,
129   F5_1Pt2_512,
130   F3_1Pt44_512,
131   F3_2Pt88_512,
132   F3_20Pt8_512,
133   F3_720_512,
134   F5_360_512,
135   F5_320_512,
136   F5_320_1024,
137   F5_180_512,
138   F5_160_512,
139   RemovableMedia,
140   FixedMedia
141 } MEDIA_TYPE;
142
143 typedef struct _PARTITION_INFORMATION
144 {
145   LARGE_INTEGER StartingOffset;
146   LARGE_INTEGER PartitionLength;
147   DWORD HiddenSectors;
148   DWORD PartitionNumber;
149   BYTE PartitionType;
150   BOOLEAN BootIndicator;
151   BOOLEAN RecognizedPartition;
152   BOOLEAN RewritePartition;
153 } PARTITION_INFORMATION, *PPARTITION_INFORMATION;
154
155 typedef struct _SET_PARTITION_INFORMATION
156 {
157   ULONG PartitionType;
158 } SET_PARTITION_INFORMATION, *PSET_PARTITION_INFORMATION;
159
160 typedef struct _DISK_GEOMETRY
161 {
162   LARGE_INTEGER Cylinders;
163   MEDIA_TYPE MediaType;
164   DWORD TracksPerCylinder;
165   DWORD SectorsPerTrack;
166   DWORD BytesPerSector;
167 } DISK_GEOMETRY, *PDISK_GEOMETRY;
168
169 typedef struct _DRIVE_LAYOUT_INFORMATION
170 {
171   DWORD PartitionCount;
172   DWORD Signature;
173   PARTITION_INFORMATION PartitionEntry[1];
174 } DRIVE_LAYOUT_INFORMATION;
175
176 #ifndef __USE_W32API
177 typedef DRIVE_LAYOUT_INFORMATION *PDRIVE_LAYOUT_INFORMATION;
178 #endif
179
180 #endif /* __INCLUDE_DISK_H */
181
182 /* EOF */