|
|
1.1 ! root 1: /*++ BUILD Version: 0001 // Increment this if a change has global effects ! 2: ! 3: Copyright (c) 1990-1993 Microsoft Corporation ! 4: ! 5: Module Name: ! 6: ! 7: ntdddisk.h ! 8: ! 9: Abstract: ! 10: ! 11: This is the include file that defines all constants and types for ! 12: accessing the Disk device. ! 13: ! 14: Author: ! 15: ! 16: Steve Wood (stevewo) 27-May-1990 ! 17: ! 18: Revision History: ! 19: ! 20: --*/ ! 21: ! 22: // ! 23: // Device Name - this string is the name of the device. It is the name ! 24: // that should be passed to NtOpenFile when accessing the device. ! 25: // ! 26: // Note: For devices that support multiple units, it should be suffixed ! 27: // with the Ascii representation of the unit number. ! 28: // ! 29: ! 30: #define DD_DISK_DEVICE_NAME "\\Device\\UNKNOWN" ! 31: ! 32: ! 33: // ! 34: // NtDeviceIoControlFile ! 35: ! 36: // begin_winioctl ! 37: ! 38: // ! 39: // IoControlCode values for disk devices. ! 40: // ! 41: ! 42: #define IOCTL_DISK_BASE FILE_DEVICE_DISK ! 43: #define IOCTL_DISK_GET_DRIVE_GEOMETRY CTL_CODE(IOCTL_DISK_BASE, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 44: #define IOCTL_DISK_GET_PARTITION_INFO CTL_CODE(IOCTL_DISK_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) ! 45: #define IOCTL_DISK_SET_PARTITION_INFO CTL_CODE(IOCTL_DISK_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) ! 46: #define IOCTL_DISK_GET_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) ! 47: #define IOCTL_DISK_SET_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) ! 48: #define IOCTL_DISK_VERIFY CTL_CODE(IOCTL_DISK_BASE, 0x0005, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 49: #define IOCTL_DISK_FORMAT_TRACKS CTL_CODE(IOCTL_DISK_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) ! 50: #define IOCTL_DISK_REASSIGN_BLOCKS CTL_CODE(IOCTL_DISK_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) ! 51: #define IOCTL_DISK_PERFORMANCE CTL_CODE(IOCTL_DISK_BASE, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 52: #define IOCTL_DISK_IS_WRITABLE CTL_CODE(IOCTL_DISK_BASE, 0x0009, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 53: ! 54: // end_winioctl ! 55: #define IOCTL_DISK_GET_DRIVE_LETTERS CTL_CODE(IOCTL_DISK_BASE, 0x000a, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 56: ! 57: // begin_winioctl ! 58: // ! 59: // The following device control codes are common for all class drivers. The ! 60: // functions codes defined here must match all of the other class drivers. ! 61: // ! 62: ! 63: #define IOCTL_DISK_CHECK_VERIFY CTL_CODE(IOCTL_DISK_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS) ! 64: #define IOCTL_DISK_MEDIA_REMOVAL CTL_CODE(IOCTL_DISK_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS) ! 65: #define IOCTL_DISK_EJECT_MEDIA CTL_CODE(IOCTL_DISK_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS) ! 66: #define IOCTL_DISK_LOAD_MEDIA CTL_CODE(IOCTL_DISK_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS) ! 67: ! 68: // end_winioctl ! 69: #define IOCTL_DISK_RESERVE CTL_CODE(IOCTL_DISK_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS) ! 70: #define IOCTL_DISK_RELEASE CTL_CODE(IOCTL_DISK_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS) ! 71: ! 72: // begin_winioctl ! 73: ! 74: #define IOCTL_DISK_GET_MEDIA_TYPES CTL_CODE(IOCTL_DISK_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 75: ! 76: // ! 77: // Define the partition types returnable by known disk drivers. ! 78: // ! 79: ! 80: #define PARTITION_ENTRY_UNUSED 0x00 // Entry unused ! 81: #define PARTITION_FAT_12 0x01 // 12-bit FAT entries ! 82: #define PARTITION_XENIX_1 0x02 // Xenix ! 83: #define PARTITION_XENIX_2 0x03 // Xenix ! 84: #define PARTITION_FAT_16 0x04 // 16-bit FAT entries ! 85: #define PARTITION_EXTENDED 0x05 // Extended partition entry ! 86: #define PARTITION_HUGE 0x06 // Huge partition MS-DOS V4 ! 87: #define PARTITION_IFS 0x07 // IFS Partition ! 88: #define PARTITION_UNIX 0x63 // Unix ! 89: ! 90: #define VALID_NTFT 0xC0 // NTFT uses high order bits ! 91: ! 92: // ! 93: // The following macro is used to determine which partitions should be ! 94: // assigned drive letters. ! 95: // ! 96: ! 97: //++ ! 98: // ! 99: // BOOLEAN ! 100: // IsRecognizedPartition( ! 101: // IN ULONG PartitionType ! 102: // ) ! 103: // ! 104: // Routine Description: ! 105: // ! 106: // This macro is used to determine to which partitions drive letters ! 107: // should be assigned. ! 108: // ! 109: // Arguments: ! 110: // ! 111: // PartitionType - Supplies the type of the partition being examined. ! 112: // ! 113: // Return Value: ! 114: // ! 115: // The return value is TRUE if the partition type is recognized, ! 116: // otherwise FALSE is returned. ! 117: // ! 118: //-- ! 119: ! 120: #define IsRecognizedPartition( PartitionType ) ( \ ! 121: (((PartitionType & ~0xC0) == PARTITION_FAT_12) || \ ! 122: ((PartitionType & ~0xC0) == PARTITION_FAT_16) || \ ! 123: ((PartitionType & ~0xC0) == PARTITION_IFS) || \ ! 124: ((PartitionType & ~0xC0) == PARTITION_HUGE)) ) ! 125: ! 126: // ! 127: // The high bit of the partition type code indicates that a partition ! 128: // is part of an NTFT mirror or striped array. ! 129: // ! 130: ! 131: #define PARTITION_NTFT 0x80 // NTFT partition ! 132: ! 133: // ! 134: // Define the media types supported by the driver. ! 135: // ! 136: ! 137: typedef enum _MEDIA_TYPE { ! 138: Unknown, // Format is unknown ! 139: F5_1Pt2_512, // 5.25", 1.2MB, 512 bytes/sector ! 140: F3_1Pt44_512, // 3.5", 1.44MB, 512 bytes/sector ! 141: F3_2Pt88_512, // 3.5", 2.88MB, 512 bytes/sector ! 142: F3_20Pt8_512, // 3.5", 20.8MB, 512 bytes/sector ! 143: F3_720_512, // 3.5", 720KB, 512 bytes/sector ! 144: F5_360_512, // 5.25", 360KB, 512 bytes/sector ! 145: F5_320_512, // 5.25", 320KB, 512 bytes/sector ! 146: F5_320_1024, // 5.25", 320KB, 1024 bytes/sector ! 147: F5_180_512, // 5.25", 180KB, 512 bytes/sector ! 148: F5_160_512, // 5.25", 160KB, 512 bytes/sector ! 149: RemovableMedia, // Removable media other than floppy ! 150: FixedMedia // Fixed hard disk media ! 151: } MEDIA_TYPE, *PMEDIA_TYPE; ! 152: ! 153: // ! 154: // Define the input buffer structure for the driver, when ! 155: // it is called with IOCTL_DISK_FORMAT_TRACKS. ! 156: // ! 157: ! 158: typedef struct _FORMAT_PARAMETERS { ! 159: MEDIA_TYPE MediaType; ! 160: ULONG StartCylinderNumber; ! 161: ULONG EndCylinderNumber; ! 162: ULONG StartHeadNumber; ! 163: ULONG EndHeadNumber; ! 164: } FORMAT_PARAMETERS, *PFORMAT_PARAMETERS; ! 165: ! 166: // ! 167: // Define the BAD_TRACK_NUMBER type. An array of elements of this type is ! 168: // returned by the driver on IOCTL_DISK_FORMAT_TRACKS requests, to indicate ! 169: // what tracks were bad during formatting. The length of that array is ! 170: // reported in the `Information' field of the I/O Status Block. ! 171: // ! 172: ! 173: typedef USHORT BAD_TRACK_NUMBER; ! 174: typedef USHORT *PBAD_TRACK_NUMBER; ! 175: ! 176: // ! 177: // The following structure is returned on an IOCTL_DISK_GET_DRIVE_GEOMETRY ! 178: // request and an array of them is returned on an IOCTL_DISK_GET_MEDIA_TYPES ! 179: // request. ! 180: // ! 181: ! 182: typedef struct _DISK_GEOMETRY { ! 183: LARGE_INTEGER Cylinders; ! 184: MEDIA_TYPE MediaType; ! 185: ULONG TracksPerCylinder; ! 186: ULONG SectorsPerTrack; ! 187: ULONG BytesPerSector; ! 188: } DISK_GEOMETRY, *PDISK_GEOMETRY; ! 189: ! 190: // ! 191: // The following structure is returned on an IOCTL_DISK_GET_PARTITION_INFO ! 192: // and an IOCTL_DISK_GET_DRIVE_LAYOUT request. It is also used in a request ! 193: // to change the drive layout, IOCTL_DISK_SET_DRIVE_LAYOUT. ! 194: // ! 195: ! 196: typedef struct _PARTITION_INFORMATION { ! 197: LARGE_INTEGER StartingOffset; ! 198: LARGE_INTEGER PartitionLength; ! 199: LARGE_INTEGER HiddenSectors; ! 200: UCHAR PartitionType; ! 201: BOOLEAN BootIndicator; ! 202: BOOLEAN RecognizedPartition; ! 203: BOOLEAN RewritePartition; ! 204: } PARTITION_INFORMATION, *PPARTITION_INFORMATION; ! 205: ! 206: // ! 207: // The following structure is used to change the partition type of a ! 208: // specified disk partition using an IOCTL_DISK_SET_PARTITION_INFO ! 209: // request. ! 210: // ! 211: ! 212: typedef struct _SET_PARTITION_INFORMATION { ! 213: UCHAR PartitionType; ! 214: } SET_PARTITION_INFORMATION, *PSET_PARTITION_INFORMATION; ! 215: ! 216: // ! 217: // The following structures is returned on an IOCTL_DISK_GET_DRIVE_LAYOUT ! 218: // request and given as input to an IOCTL_DISK_SET_DRIVE_LAYOUT request. ! 219: // ! 220: ! 221: typedef struct _DRIVE_LAYOUT_INFORMATION { ! 222: ULONG PartitionCount; ! 223: ULONG Signature; ! 224: PARTITION_INFORMATION PartitionEntry[1]; ! 225: } DRIVE_LAYOUT_INFORMATION, *PDRIVE_LAYOUT_INFORMATION; ! 226: ! 227: // ! 228: // The following structure is passed in on an IOCTL_DISK_VERIFY request. ! 229: // The offset and length parameters are both given in bytes. ! 230: // ! 231: ! 232: typedef struct _VERIFY_INFORMATION { ! 233: LARGE_INTEGER StartingOffset; ! 234: ULONG Length; ! 235: } VERIFY_INFORMATION, *PVERIFY_INFORMATION; ! 236: ! 237: // ! 238: // The following structure is passed in on an IOCTL_DISK_REASSIGN_BLOCKS ! 239: // request. ! 240: // ! 241: ! 242: typedef struct _REASSIGN_BLOCKS { ! 243: USHORT Reserved; ! 244: USHORT Count; ! 245: ULONG BlockNumber[1]; ! 246: } REASSIGN_BLOCKS, *PREASSIGN_BLOCKS; ! 247: ! 248: // ! 249: // The following structure is exchanged on an IOCTL_DISK_GET_PERFORMANCE ! 250: // request. ! 251: // ! 252: ! 253: typedef struct _DISK_PERFORMANCE { ! 254: LARGE_INTEGER BytesRead; ! 255: LARGE_INTEGER BytesWritten; ! 256: LARGE_INTEGER ReadTime; ! 257: LARGE_INTEGER WriteTime; ! 258: ULONG ReadCount; ! 259: ULONG WriteCount; ! 260: ULONG QueueDepth; ! 261: } DISK_PERFORMANCE, *PDISK_PERFORMANCE; ! 262: ! 263: // ! 264: // IOCTL_DISK_MEDIA_REMOVAL disables the mechanism ! 265: // on a SCSI device that ejects media. This function ! 266: // may or may not be supported on SCSI devices that ! 267: // support removable media. ! 268: // ! 269: // TRUE means prevent media from being removed. ! 270: // FALSE means allow media removal. ! 271: // ! 272: ! 273: typedef struct _PREVENT_MEDIA_REMOVAL { ! 274: BOOLEAN PreventMediaRemoval; ! 275: } PREVENT_MEDIA_REMOVAL, *PPREVENT_MEDIA_REMOVAL; ! 276: ! 277: // end_winioctl ! 278: ! 279: // ! 280: // The following device control code is for the SIMBAD simulated bad ! 281: // sector facility. See SIMBAD.H in this directory for related structures. ! 282: // ! 283: ! 284: #define IOCTL_DISK_SIMBAD CTL_CODE(IOCTL_DISK_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.