:pserver:cvsanon@mok.lvcm.com:/CVS/ReactOS reactos
[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
16 #define IOCTL_DISK_GET_DRIVE_GEOMETRY   CTL_CODE(FILE_DEVICE_DISK,  0, METHOD_BUFFERED, FILE_ANY_ACCESS)
17 #define IOCTL_DISK_GET_PARTITION_INFO   CTL_CODE(FILE_DEVICE_DISK,  1, METHOD_BUFFERED, FILE_READ_ACCESS)
18 #define IOCTL_DISK_SET_PARTITION_INFO   CTL_CODE(FILE_DEVICE_DISK,  2, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
19 #define IOCTL_DISK_GET_DRIVE_LAYOUT     CTL_CODE(FILE_DEVICE_DISK,  3, METHOD_BUFFERED, FILE_READ_ACCESS)
20 #define IOCTL_DISK_SET_DRIVE_LAYOUT     CTL_CODE(FILE_DEVICE_DISK,  4, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
21 #define IOCTL_DISK_VERIFY               CTL_CODE(FILE_DEVICE_DISK,  5, METHOD_BUFFERED, FILE_ANY_ACCESS)
22 #define IOCTL_DISK_FORMAT_TRACKS        CTL_CODE(FILE_DEVICE_DISK,  6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
23 #define IOCTL_DISK_REASSIGN_BLOCKS      CTL_CODE(FILE_DEVICE_DISK,  7, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
24 #define IOCTL_DISK_PERFORMANCE          CTL_CODE(FILE_DEVICE_DISK,  8, METHOD_BUFFERED, FILE_ANY_ACCESS)
25 #define IOCTL_DISK_IS_WRITABLE          CTL_CODE(FILE_DEVICE_DISK,  9, METHOD_BUFFERED, FILE_ANY_ACCESS)
26 #define IOCTL_DISK_LOGGING              CTL_CODE(FILE_DEVICE_DISK, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
27 #define IOCTL_DISK_FORMAT_TRACKS_EX     CTL_CODE(FILE_DEVICE_DISK, 11, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
28 #define IOCTL_DISK_HISTOGRAM_STRUCTURE  CTL_CODE(FILE_DEVICE_DISK, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
29 #define IOCTL_DISK_HISTOGRAM_DATA       CTL_CODE(FILE_DEVICE_DISK, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
30 #define IOCTL_DISK_HISTOGRAM_RESET      CTL_CODE(FILE_DEVICE_DISK, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
31 #define IOCTL_DISK_REQUEST_STRUCTURE    CTL_CODE(FILE_DEVICE_DISK, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
32 #define IOCTL_DISK_REQUEST_DATA         CTL_CODE(FILE_DEVICE_DISK, 16, METHOD_BUFFERED, FILE_ANY_ACCESS)
33
34
35 #define PARTITION_ENTRY_UNUSED          0x00
36 #define PARTITION_FAT_12                0x01
37 #define PARTITION_XENIX_1               0x02
38 #define PARTITION_XENIX_2               0x03
39 #define PARTITION_FAT_16                0x04
40 #define PARTITION_EXTENDED              0x05
41 #define PARTITION_HUGE                  0x06
42 #define PARTITION_IFS                   0x07
43 #define PARTITION_FAT32                 0x0B
44 #define PARTITION_FAT32_XINT13          0x0C
45 #define PARTITION_XINT13                0x0E
46 #define PARTITION_XINT13_EXTENDED       0x0F
47 #define PARTITION_PREP                  0x41
48 #define PARTITION_LDM                   0x42
49 #define PARTITION_UNIX                  0x63
50
51 #define PARTITION_NTFT                  0x80
52 #define VALID_NTFT                      0xC0
53
54 #if 0
55 #define PTEmpty                         0x00
56 #define PTDOS3xPrimary                  0x01
57 #define PTXENIXRoot                     0x02
58 #define PTXENIXUsr                      0x03
59 #define PTOLDDOS16Bit                   0x04
60 #define PTDosExtended                   0x05
61 #define PTDos5xPrimary                  0x06
62 #define PTIfs                           0x07    // e.g.: HPFS, NTFS, etc
63 #define PTAIX                           0x08
64 #define PTAIXBootable                   0x09
65 #define PTOS2BootMgr                    0x0A
66 #define PTWin95FAT32                    0x0B
67 #define PTWin95FAT32LBA                 0x0C
68 #define PTWin95FAT16LBA                 0x0E
69 #define PTWin95ExtendedLBA              0x0F
70 #define PTVenix286                      0x40
71 #define PTNovell                        0x51
72 #define PTMicroport                     0x52
73 #define PTGnuHurd                       0x63
74 #define PTNetware286                    0x64
75 #define PTNetware386                    0x65
76 #define PTPCIX                          0x75
77 #define PTOldMinix                      0x80
78 #define PTMinix                         0x81
79 #define PTLinuxSwap                     0x82
80 #define PTLinuxExt2                     0x83
81 #define PTAmoeba                        0x93
82 #define PTAmoebaBBT                     0x94
83 #define PTBSD                           0xA5
84 #define PTBSDIFS                        0xB7
85 #define PTBSDISwap                      0xB8
86 #define PTSyrinx                        0xC7
87 #define PTCPM                           0xDB
88 #define PTDOSAccess                     0xE1
89 #define PTDOSRO                         0xE3
90 #define PTDOSSecondary                  0xF2
91 #define PTBBT                           0xFF
92 #endif
93
94 #define IsRecognizedPartition(P)  \
95     ((P) == PARTITION_FAT_12       || \
96      (P) == PARTITION_FAT_16       || \
97      (P) == PARTITION_HUGE         || \
98      (P) == PARTITION_IFS          || \
99      (P) == PARTITION_FAT32        || \
100      (P) == PARTITION_FAT32_XINT13 || \
101      (P) == PARTITION_XINT13)
102
103 #define IsContainerPartition(P)  \
104     ((P) == PARTITION_EXTENDED || \
105      (P) == PARTITION_XINT13_EXTENDED)
106
107
108 typedef enum _MEDIA_TYPE
109 {
110   Unknown,
111   F5_1Pt2_512,
112   F3_1Pt44_512,
113   F3_2Pt88_512,
114   F3_20Pt8_512,
115   F3_720_512,
116   F5_360_512,
117   F5_320_512,
118   F5_320_1024,
119   F5_180_512,
120   F5_160_512,
121   RemovableMedia,
122   FixedMedia
123 } MEDIA_TYPE;
124
125 typedef struct _PARTITION_INFORMATION
126 {
127   LARGE_INTEGER StartingOffset;
128   LARGE_INTEGER PartitionLength;
129   DWORD HiddenSectors;
130   DWORD PartitionNumber;
131   BYTE PartitionType;
132   BOOLEAN BootIndicator;
133   BOOLEAN RecognizedPartition;
134   BOOLEAN RewritePartition;
135 } PARTITION_INFORMATION, *PPARTITION_INFORMATION;
136
137 typedef struct _DRIVE_LAYOUT_INFORMATION
138 {
139   DWORD PartitionCount;
140   DWORD Signature;
141   PARTITION_INFORMATION PartitionEntry[1];
142 } DRIVE_LAYOUT_INFORMATION, *PDRIVE_LAYOUT_INFORMATION;
143
144 typedef struct _SET_PARTITION_INFORMATION
145 {
146   ULONG PartitionType;
147 } SET_PARTITION_INFORMATION, *PSET_PARTITION_INFORMATION;
148
149 typedef struct _DISK_GEOMETRY
150 {
151   LARGE_INTEGER Cylinders;
152   MEDIA_TYPE MediaType;
153   DWORD TracksPerCylinder;
154   DWORD SectorsPerTrack;
155   DWORD BytesPerSector;
156 } DISK_GEOMETRY, *PDISK_GEOMETRY;
157
158 #endif /* __INCLUDE_DISK_H */
159
160 /* EOF */