|
|
1.1 ! root 1: /*++ BUILD Version: 0011 // Increment this if a change has global effects ! 2: ! 3: Copyright (c) 1990-1992 Microsoft Corporation ! 4: ! 5: Module Name: ! 6: ! 7: winioctl.h ! 8: ! 9: Abstract: ! 10: ! 11: This module defines the 32-Bit Windows Device I/O control codes. ! 12: ! 13: Revision History: ! 14: ! 15: --*/ ! 16: ! 17: #ifndef _WINIOCTL_ ! 18: #define _WINIOCTL_ ! 19: ! 20: ! 21: #ifndef _DEVIOCTL_ ! 22: #define _DEVIOCTL_ ! 23: ! 24: // ! 25: // Define the various device type values. Note that values used by Microsoft ! 26: // Corporation are in the range 0-32767, and 32768-65535 are reserved for use ! 27: // by customers. ! 28: // ! 29: ! 30: #define DEVICE_TYPE DWORD ! 31: ! 32: #define FILE_DEVICE_BEEP 0x00000001 ! 33: #define FILE_DEVICE_CD_ROM 0x00000002 ! 34: #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003 ! 35: #define FILE_DEVICE_CONTROLLER 0x00000004 ! 36: #define FILE_DEVICE_DATALINK 0x00000005 ! 37: #define FILE_DEVICE_DFS 0x00000006 ! 38: #define FILE_DEVICE_DISK 0x00000007 ! 39: #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008 ! 40: #define FILE_DEVICE_FILE_SYSTEM 0x00000009 ! 41: #define FILE_DEVICE_INPORT_PORT 0x0000000a ! 42: #define FILE_DEVICE_KEYBOARD 0x0000000b ! 43: #define FILE_DEVICE_MAILSLOT 0x0000000c ! 44: #define FILE_DEVICE_MIDI_IN 0x0000000d ! 45: #define FILE_DEVICE_MIDI_OUT 0x0000000e ! 46: #define FILE_DEVICE_MOUSE 0x0000000f ! 47: #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010 ! 48: #define FILE_DEVICE_NAMED_PIPE 0x00000011 ! 49: #define FILE_DEVICE_NETWORK 0x00000012 ! 50: #define FILE_DEVICE_NETWORK_BROWSER 0x00000013 ! 51: #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014 ! 52: #define FILE_DEVICE_NULL 0x00000015 ! 53: #define FILE_DEVICE_PARALLEL_PORT 0x00000016 ! 54: #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017 ! 55: #define FILE_DEVICE_PRINTER 0x00000018 ! 56: #define FILE_DEVICE_SCANNER 0x00000019 ! 57: #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a ! 58: #define FILE_DEVICE_SERIAL_PORT 0x0000001b ! 59: #define FILE_DEVICE_SCREEN 0x0000001c ! 60: #define FILE_DEVICE_SOUND 0x0000001d ! 61: #define FILE_DEVICE_STREAMS 0x0000001e ! 62: #define FILE_DEVICE_TAPE 0x0000001f ! 63: #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020 ! 64: #define FILE_DEVICE_TRANSPORT 0x00000021 ! 65: #define FILE_DEVICE_UNKNOWN 0x00000022 ! 66: #define FILE_DEVICE_VIDEO 0x00000023 ! 67: #define FILE_DEVICE_VIRTUAL_DISK 0x00000024 ! 68: #define FILE_DEVICE_WAVE_IN 0x00000025 ! 69: #define FILE_DEVICE_WAVE_OUT 0x00000026 ! 70: #define FILE_DEVICE_8042_PORT 0x00000027 ! 71: ! 72: // ! 73: // Macro definition for defining IOCTL and FSCTL function control codes. Note ! 74: // that function codes 0-2047 are reserved for Microsoft Corporation, and ! 75: // 2048-4095 are reserved for customers. ! 76: // ! 77: ! 78: #define CTL_CODE( DeviceType, Function, Method, Access ) ( \ ! 79: ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \ ! 80: ) ! 81: ! 82: // ! 83: // Define the method codes for how buffers are passed for I/O and FS controls ! 84: // ! 85: ! 86: #define METHOD_BUFFERED 0 ! 87: #define METHOD_IN_DIRECT 1 ! 88: #define METHOD_OUT_DIRECT 2 ! 89: #define METHOD_NEITHER 3 ! 90: ! 91: // ! 92: // Define the access check value for any access ! 93: // ! 94: // ! 95: // The FILE_READ_ACCESS and FILE_WRITE_ACCESS constants are also defined in ! 96: // ntioapi.h as FILE_READ_DATA and FILE_WRITE_DATA. The values for these ! 97: // constants *MUST* always be in sync. ! 98: // ! 99: ! 100: ! 101: #define FILE_ANY_ACCESS 0 ! 102: #define FILE_READ_ACCESS ( 0x0001 ) // file & pipe ! 103: #define FILE_WRITE_ACCESS ( 0x0002 ) // file & pipe ! 104: ! 105: #endif // _DEVIOCTL_ ! 106: ! 107: ! 108: // ! 109: // IoControlCode values for this device. ! 110: // ! 111: // Warning: Remember that the low two bits of the code specify how the ! 112: // buffers are passed to the driver! ! 113: // ! 114: ! 115: #define IOCTL_DISK_BASE FILE_DEVICE_DISK ! 116: #define IOCTL_DISK_GET_DRIVE_GEOMETRY CTL_CODE(IOCTL_DISK_BASE, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 117: #define IOCTL_DISK_GET_PARTITION_INFO CTL_CODE(IOCTL_DISK_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) ! 118: #define IOCTL_DISK_SET_PARTITION_INFO CTL_CODE(IOCTL_DISK_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) ! 119: #define IOCTL_DISK_GET_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) ! 120: #define IOCTL_DISK_SET_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) ! 121: #define IOCTL_DISK_VERIFY CTL_CODE(IOCTL_DISK_BASE, 0x0005, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 122: #define IOCTL_DISK_FORMAT_TRACKS CTL_CODE(IOCTL_DISK_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) ! 123: #define IOCTL_DISK_REASSIGN_BLOCKS CTL_CODE(IOCTL_DISK_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) ! 124: #define IOCTL_DISK_PERFORMANCE CTL_CODE(IOCTL_DISK_BASE, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 125: #define IOCTL_DISK_GET_DRIVE_LETTERS CTL_CODE(IOCTL_DISK_BASE, 0x0009, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 126: ! 127: // ! 128: // The following device control codes are common for all class drivers. The ! 129: // functions codes defined here must match all of the other class drivers. ! 130: // ! 131: ! 132: #define IOCTL_DISK_CHECK_VERIFY CTL_CODE(IOCTL_DISK_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS) ! 133: #define IOCTL_DISK_RESERVE CTL_CODE(IOCTL_DISK_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS) ! 134: #define IOCTL_DISK_RELEASE CTL_CODE(IOCTL_DISK_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS) ! 135: #define IOCTL_DISK_MEDIA_REMOVAL CTL_CODE(IOCTL_DISK_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS) ! 136: #define IOCTL_DISK_EJECT_MEDIA CTL_CODE(IOCTL_DISK_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS) ! 137: #define IOCTL_DISK_LOAD_MEDIA CTL_CODE(IOCTL_DISK_BASE, 0x0207, METHOD_BUFFERED, FILE_READ_ACCESS) ! 138: ! 139: #define IOCTL_DISK_GET_MEDIA_TYPES CTL_CODE(IOCTL_DISK_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS) ! 140: #define IOCTL_DISK_UNLOAD_DRIVER CTL_CODE(IOCTL_DISK_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) ! 141: ! 142: #define IOCTL_DISK_DBG_GET_STATISTICS CTL_CODE(IOCTL_DISK_BASE, 0x1000, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 143: #define IOCTL_DISK_DBG_FIFO_TUNING CTL_CODE(IOCTL_DISK_BASE, 0x1001, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 144: #define IOCTL_DISK_DBG_POWER_RECOVERY CTL_CODE(IOCTL_DISK_BASE, 0x1002, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) ! 145: ! 146: // ! 147: // The following device control code is for the SIMBAD simulated bad ! 148: // sector facility. See SIMBAD.H in this directory for related structures. ! 149: // ! 150: ! 151: #define IOCTL_DISK_SIMBAD CTL_CODE(IOCTL_DISK_BASE, 0x1003, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) ! 152: ! 153: // ! 154: // Define the partition types returnable by known disk drivers. ! 155: // ! 156: ! 157: #define PARTITION_ENTRY_UNUSED 0x00 // Entry unused ! 158: #define PARTITION_FAT_12 0x01 // 12-bit FAT entries ! 159: #define PARTITION_XENIX_1 0x02 // Xenix ! 160: #define PARTITION_XENIX_2 0x03 // Xenix ! 161: #define PARTITION_FAT_16 0x04 // 16-bit FAT entries ! 162: #define PARTITION_EXTENDED 0x05 // Extended partition entry ! 163: #define PARTITION_HUGE 0x06 // Huge partition MS-DOS V4 ! 164: #define PARTITION_IFS 0x07 // IFS Partition ! 165: #define PARTITION_UNIX 0x63 // Unix ! 166: ! 167: #define VALID_NTFT 0xC0 // NTFT uses high order bits ! 168: ! 169: // ! 170: // The following macro is used to determine which partitions should be ! 171: // assigned drive letters. ! 172: // ! 173: ! 174: //++ ! 175: // ! 176: // BOOLEAN ! 177: // IsRecognizedPartition( ! 178: // IN DWORD PartitionType ! 179: // ) ! 180: // ! 181: // Routine Description: ! 182: // ! 183: // This macro is used to determine to which partitions drive letters ! 184: // should be assigned. ! 185: // ! 186: // Arguments: ! 187: // ! 188: // PartitionType - Supplies the type of the partition being examined. ! 189: // ! 190: // Return Value: ! 191: // ! 192: // The return value is TRUE if the partition type is recognized, ! 193: // otherwise FALSE is returned. ! 194: // ! 195: //-- ! 196: ! 197: #define IsRecognizedPartition( PartitionType ) ( \ ! 198: (((PartitionType & ~0xC0) == PARTITION_FAT_12) || \ ! 199: ((PartitionType & ~0xC0) == PARTITION_FAT_16) || \ ! 200: ((PartitionType & ~0xC0) == PARTITION_IFS) || \ ! 201: ((PartitionType & ~0xC0) == PARTITION_HUGE)) ) ! 202: ! 203: // ! 204: // The high bit of the partition type code indicates that a partition ! 205: // is part of an NTFT mirror or striped array. ! 206: // ! 207: ! 208: #define PARTITION_NTFT 0x80 // NTFT partition ! 209: ! 210: // ! 211: // Define the media types supported by the driver. ! 212: // ! 213: ! 214: typedef enum _MEDIA_TYPE { ! 215: Unknown, // Format is unknown ! 216: F5_1Pt2_512, // 5.25", 1.2MB, 512 bytes/sector ! 217: F3_1Pt44_512, // 3.5", 1.44MB, 512 bytes/sector ! 218: F3_2Pt88_512, // 3.5", 2.88MB, 512 bytes/sector ! 219: F3_20Pt8_512, // 3.5", 20.8MB, 512 bytes/sector ! 220: F3_720_512, // 3.5", 720KB, 512 bytes/sector ! 221: F5_360_512, // 5.25", 360KB, 512 bytes/sector ! 222: F5_320_512, // 5.25", 320KB, 512 bytes/sector ! 223: F5_320_1024, // 5.25", 320KB, 1024 bytes/sector ! 224: F5_180_512, // 5.25", 180KB, 512 bytes/sector ! 225: F5_160_512, // 5.25", 160KB, 512 bytes/sector ! 226: RemovableMedia, // Removable media other than floppy ! 227: FixedMedia // Fixed hard disk media ! 228: } MEDIA_TYPE, *PMEDIA_TYPE; ! 229: ! 230: // ! 231: // Define the input buffer structure for the driver, when ! 232: // it is called with IOCTL_DISK_FORMAT_TRACKS. ! 233: // ! 234: ! 235: typedef struct _FORMAT_PARAMETERS { ! 236: MEDIA_TYPE MediaType; ! 237: DWORD StartCylinderNumber; ! 238: DWORD EndCylinderNumber; ! 239: DWORD StartHeadNumber; ! 240: DWORD EndHeadNumber; ! 241: } FORMAT_PARAMETERS, *PFORMAT_PARAMETERS; ! 242: ! 243: // ! 244: // Define the BAD_TRACK_NUMBER type. An array of elements of this type is ! 245: // returned by the driver on IOCTL_DISK_FORMAT_TRACKS requests, to indicate ! 246: // what tracks were bad during formatting. The length of that array is ! 247: // reported in the `Information' field of the I/O Status Block. ! 248: // ! 249: ! 250: typedef WORD BAD_TRACK_NUMBER; ! 251: typedef WORD *PBAD_TRACK_NUMBER; ! 252: ! 253: // ! 254: // The following structure is returned on an IOCTL_DISK_GET_DRIVE_GEOMETRY ! 255: // request and an array of them is returned on an IOCTL_DISK_GET_MEDIA_TYPES ! 256: // request. ! 257: // ! 258: ! 259: typedef struct _DISK_GEOMETRY { ! 260: MEDIA_TYPE MediaType; ! 261: LARGE_INTEGER Cylinders; ! 262: DWORD TracksPerCylinder; ! 263: DWORD SectorsPerTrack; ! 264: DWORD BytesPerSector; ! 265: } DISK_GEOMETRY, *PDISK_GEOMETRY; ! 266: ! 267: // ! 268: // The following structure is returned on an IOCTL_DISK_GET_PARTITION_INFO ! 269: // and an IOCTL_DISK_GET_DRIVE_LAYOUT request. It is also used in a request ! 270: // to change the drive layout, IOCTL_DISK_SET_DRIVE_LAYOUT. ! 271: // ! 272: ! 273: typedef struct _PARTITION_INFORMATION { ! 274: BYTE PartitionType; ! 275: BOOLEAN BootIndicator; ! 276: BOOLEAN RecognizedPartition; ! 277: BOOLEAN RewritePartition; ! 278: LARGE_INTEGER StartingOffset; ! 279: LARGE_INTEGER PartitionLength; ! 280: LARGE_INTEGER HiddenSectors; ! 281: } PARTITION_INFORMATION, *PPARTITION_INFORMATION; ! 282: ! 283: // ! 284: // The following structure is used to change the partition type of a ! 285: // specified disk partition using an IOCTL_DISK_SET_PARTITION_INFO ! 286: // request. ! 287: // ! 288: ! 289: typedef struct _SET_PARTITION_INFORMATION { ! 290: BYTE PartitionType; ! 291: } SET_PARTITION_INFORMATION, *PSET_PARTITION_INFORMATION; ! 292: ! 293: // ! 294: // The following structures is returned on an IOCTL_DISK_GET_DRIVE_LAYOUT ! 295: // request and given as input to an IOCTL_DISK_SET_DRIVE_LAYOUT request. ! 296: // ! 297: ! 298: typedef struct _DRIVE_LAYOUT_INFORMATION { ! 299: DWORD PartitionCount; ! 300: DWORD Signature; ! 301: PARTITION_INFORMATION PartitionEntry[1]; ! 302: } DRIVE_LAYOUT_INFORMATION, *PDRIVE_LAYOUT_INFORMATION; ! 303: ! 304: // ! 305: // The following structure is passed in on an IOCTL_DISK_VERIFY request. ! 306: // The offset and length parameters are both given in bytes. ! 307: // ! 308: ! 309: typedef struct _VERIFY_INFORMATION { ! 310: LARGE_INTEGER StartingOffset; ! 311: DWORD Length; ! 312: } VERIFY_INFORMATION, *PVERIFY_INFORMATION; ! 313: ! 314: // ! 315: // The following structure is passed in on an IOCTL_DISK_REASSIGN_BLOCKS ! 316: // request. ! 317: // ! 318: ! 319: typedef struct _REASSIGN_BLOCKS { ! 320: WORD Reserved; ! 321: WORD Count; ! 322: DWORD BlockNumber[1]; ! 323: } REASSIGN_BLOCKS, *PREASSIGN_BLOCKS; ! 324: ! 325: // ! 326: // The following structure is exchanged on an IOCTL_DISK_GET_PERFORMANCE ! 327: // request. ! 328: // ! 329: ! 330: typedef struct _DISK_PERFORMANCE { ! 331: LARGE_INTEGER BytesRead; ! 332: LARGE_INTEGER BytesWritten; ! 333: LARGE_INTEGER ReadTime; ! 334: LARGE_INTEGER WriteTime; ! 335: DWORD ReadCount; ! 336: DWORD WriteCount; ! 337: DWORD QueueDepth; ! 338: } DISK_PERFORMANCE, *PDISK_PERFORMANCE; ! 339: ! 340: ! 341: #define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 342: #define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 343: #define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS) ! 344: ! 345: ! 346: #endif // _WINIOCTL_ ! 347:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.