Annotation of ntddk/src/scsi/inc/ntdddisk.h, revision 1.1.1.1

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)

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.