|
|
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: ntddtape.h ! 8: ! 9: Abstract: ! 10: ! 11: This is the include file that defines all constants and types for ! 12: accessing the Tape device. ! 13: ! 14: Author: ! 15: ! 16: Steve Wood (stevewo) 27-May-1990 ! 17: Mike Glass (mglass) ! 18: Hunter Small (Maynard) ! 19: Lori Brown (Maynard) ! 20: ! 21: Revision History: ! 22: ! 23: --*/ ! 24: ! 25: // ! 26: // Device Name - this string is the name of the device. It is the name ! 27: // that should be passed to NtOpenFile when accessing the device. ! 28: // ! 29: // Note: For devices that support multiple units, it should be suffixed ! 30: // with the Ascii representation of the unit number. ! 31: // ! 32: ! 33: #define DD_TAPE_DEVICE_NAME "\\Device\\Tape" ! 34: ! 35: ! 36: // ! 37: // NtDeviceIoControlFile IoControlCode values for this device. ! 38: // ! 39: // Warning: Remember that the low two bits of the code specify how the ! 40: // buffers are passed to the driver! ! 41: // ! 42: ! 43: #define IOCTL_TAPE_BASE FILE_DEVICE_TAPE ! 44: ! 45: #define IOCTL_TAPE_ERASE CTL_CODE(IOCTL_TAPE_BASE, 0x0000, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) ! 46: #define IOCTL_TAPE_PREPARE CTL_CODE(IOCTL_TAPE_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) ! 47: #define IOCTL_TAPE_WRITE_MARKS CTL_CODE(IOCTL_TAPE_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) ! 48: #define IOCTL_TAPE_GET_POSITION CTL_CODE(IOCTL_TAPE_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) ! 49: #define IOCTL_TAPE_SET_POSITION CTL_CODE(IOCTL_TAPE_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS) ! 50: #define IOCTL_TAPE_GET_DRIVE_PARAMS CTL_CODE(IOCTL_TAPE_BASE, 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS) ! 51: #define IOCTL_TAPE_SET_DRIVE_PARAMS CTL_CODE(IOCTL_TAPE_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) ! 52: #define IOCTL_TAPE_GET_MEDIA_PARAMS CTL_CODE(IOCTL_TAPE_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS) ! 53: #define IOCTL_TAPE_SET_MEDIA_PARAMS CTL_CODE(IOCTL_TAPE_BASE, 0x0008, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) ! 54: #define IOCTL_TAPE_GET_STATUS CTL_CODE(IOCTL_TAPE_BASE, 0x0009, METHOD_BUFFERED, FILE_READ_ACCESS ) ! 55: #define IOCTL_TAPE_CREATE_PARTITION CTL_CODE(IOCTL_TAPE_BASE, 0x000a, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) ! 56: ! 57: // ! 58: // The following device control codes are common for all class drivers. The ! 59: // functions codes defined here must match all of the other class drivers. ! 60: // ! 61: ! 62: #define IOCTL_TAPE_CHECK_VERIFY CTL_CODE(IOCTL_TAPE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS) ! 63: #define IOCTL_TAPE_MEDIA_REMOVAL CTL_CODE(IOCTL_TAPE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS) ! 64: #define IOCTL_TAPE_EJECT_MEDIA CTL_CODE(IOCTL_TAPE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS) ! 65: #define IOCTL_TAPE_LOAD_MEDIA CTL_CODE(IOCTL_TAPE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS) ! 66: #define IOCTL_TAPE_RESERVE CTL_CODE(IOCTL_TAPE_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS) ! 67: #define IOCTL_TAPE_RELEASE CTL_CODE(IOCTL_TAPE_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS) ! 68: ! 69: // begin_winnt ! 70: ! 71: // ! 72: // IOCTL_TAPE_ERASE definitions ! 73: // ! 74: ! 75: #define TAPE_ERASE_SHORT 0L ! 76: #define TAPE_ERASE_LONG 1L ! 77: ! 78: typedef struct _TAPE_ERASE { ! 79: ULONG Type; ! 80: BOOLEAN Immediate; ! 81: } TAPE_ERASE, *PTAPE_ERASE; ! 82: ! 83: // ! 84: // IOCTL_TAPE_PREPARE definitions ! 85: // ! 86: ! 87: #define TAPE_LOAD 0L ! 88: #define TAPE_UNLOAD 1L ! 89: #define TAPE_TENSION 2L ! 90: #define TAPE_LOCK 3L ! 91: #define TAPE_UNLOCK 4L ! 92: #define TAPE_FORMAT 5L ! 93: ! 94: typedef struct _TAPE_PREPARE { ! 95: ULONG Operation; ! 96: BOOLEAN Immediate; ! 97: } TAPE_PREPARE, *PTAPE_PREPARE; ! 98: ! 99: // ! 100: // IOCTL_TAPE_WRITE_MARKS definitions ! 101: // ! 102: ! 103: #define TAPE_SETMARKS 0L ! 104: #define TAPE_FILEMARKS 1L ! 105: #define TAPE_SHORT_FILEMARKS 2L ! 106: #define TAPE_LONG_FILEMARKS 3L ! 107: ! 108: typedef struct _TAPE_WRITE_MARKS { ! 109: ULONG Type; ! 110: ULONG Count; ! 111: BOOLEAN Immediate; ! 112: } TAPE_WRITE_MARKS, *PTAPE_WRITE_MARKS; ! 113: ! 114: // ! 115: // IOCTL_TAPE_GET_POSITION definitions ! 116: // ! 117: ! 118: #define TAPE_ABSOLUTE_POSITION 0L ! 119: #define TAPE_LOGICAL_POSITION 1L ! 120: #define TAPE_PSEUDO_LOGICAL_POSITION 2L ! 121: ! 122: typedef struct _TAPE_GET_POSITION { ! 123: ULONG Type; ! 124: ULONG Partition; ! 125: LARGE_INTEGER Offset; ! 126: } TAPE_GET_POSITION, *PTAPE_GET_POSITION; ! 127: ! 128: // ! 129: // IOCTL_TAPE_SET_POSITION definitions ! 130: // ! 131: ! 132: #define TAPE_REWIND 0L ! 133: #define TAPE_ABSOLUTE_BLOCK 1L ! 134: #define TAPE_LOGICAL_BLOCK 2L ! 135: #define TAPE_PSEUDO_LOGICAL_BLOCK 3L ! 136: #define TAPE_SPACE_END_OF_DATA 4L ! 137: #define TAPE_SPACE_RELATIVE_BLOCKS 5L ! 138: #define TAPE_SPACE_FILEMARKS 6L ! 139: #define TAPE_SPACE_SEQUENTIAL_FMKS 7L ! 140: #define TAPE_SPACE_SETMARKS 8L ! 141: #define TAPE_SPACE_SEQUENTIAL_SMKS 9L ! 142: ! 143: typedef struct _TAPE_SET_POSITION { ! 144: ULONG Method; ! 145: ULONG Partition; ! 146: LARGE_INTEGER Offset; ! 147: BOOLEAN Immediate; ! 148: } TAPE_SET_POSITION, *PTAPE_SET_POSITION; ! 149: ! 150: // ! 151: // IOCTL_TAPE_GET_DRIVE_PARAMS definitions ! 152: // ! 153: ! 154: // ! 155: // Definitions for FeaturesLow parameter ! 156: // ! 157: ! 158: #define TAPE_DRIVE_FIXED 0x00000001 ! 159: #define TAPE_DRIVE_SELECT 0x00000002 ! 160: #define TAPE_DRIVE_INITIATOR 0x00000004 ! 161: ! 162: #define TAPE_DRIVE_ERASE_SHORT 0x00000010 ! 163: #define TAPE_DRIVE_ERASE_LONG 0x00000020 ! 164: #define TAPE_DRIVE_ERASE_BOP_ONLY 0x00000040 ! 165: #define TAPE_DRIVE_ERASE_IMMEDIATE 0x00000080 ! 166: ! 167: #define TAPE_DRIVE_TAPE_CAPACITY 0x00000100 ! 168: #define TAPE_DRIVE_TAPE_REMAINING 0x00000200 ! 169: #define TAPE_DRIVE_FIXED_BLOCK 0x00000400 ! 170: #define TAPE_DRIVE_VARIABLE_BLOCK 0x00000800 ! 171: ! 172: #define TAPE_DRIVE_WRITE_PROTECT 0x00001000 ! 173: #define TAPE_DRIVE_EOT_WZ_SIZE 0x00002000 ! 174: ! 175: #define TAPE_DRIVE_ECC 0x00010000 ! 176: #define TAPE_DRIVE_COMPRESSION 0x00020000 ! 177: #define TAPE_DRIVE_PADDING 0x00040000 ! 178: #define TAPE_DRIVE_REPORT_SMKS 0x00080000 ! 179: ! 180: #define TAPE_DRIVE_GET_ABSOLUTE_BLK 0x00100000 ! 181: #define TAPE_DRIVE_GET_LOGICAL_BLK 0x00200000 ! 182: #define TAPE_DRIVE_SET_EOT_WZ_SIZE 0x00400000 ! 183: ! 184: #define TAPE_DRIVE_RESERVED_BIT 0x80000000 //don't use this bit! ! 185: // //can't be a low features bit! ! 186: // //reserved; high features only ! 187: ! 188: // ! 189: // Definitions for FeaturesHigh parameter ! 190: // ! 191: ! 192: #define TAPE_DRIVE_LOAD_UNLOAD 0x80000001 ! 193: #define TAPE_DRIVE_TENSION 0x80000002 ! 194: #define TAPE_DRIVE_LOCK_UNLOCK 0x80000004 ! 195: #define TAPE_DRIVE_REWIND_IMMEDIATE 0x80000008 ! 196: ! 197: #define TAPE_DRIVE_SET_BLOCK_SIZE 0x80000010 ! 198: #define TAPE_DRIVE_LOAD_UNLD_IMMED 0x80000020 ! 199: #define TAPE_DRIVE_TENSION_IMMED 0x80000040 ! 200: #define TAPE_DRIVE_LOCK_UNLK_IMMED 0x80000080 ! 201: ! 202: #define TAPE_DRIVE_SET_ECC 0x80000100 ! 203: #define TAPE_DRIVE_SET_COMPRESSION 0x80000200 ! 204: #define TAPE_DRIVE_SET_PADDING 0x80000400 ! 205: #define TAPE_DRIVE_SET_REPORT_SMKS 0x80000800 ! 206: ! 207: #define TAPE_DRIVE_ABSOLUTE_BLK 0x80001000 ! 208: #define TAPE_DRIVE_ABS_BLK_IMMED 0x80002000 ! 209: #define TAPE_DRIVE_LOGICAL_BLK 0x80004000 ! 210: #define TAPE_DRIVE_LOG_BLK_IMMED 0x80008000 ! 211: ! 212: #define TAPE_DRIVE_END_OF_DATA 0x80010000 ! 213: #define TAPE_DRIVE_RELATIVE_BLKS 0x80020000 ! 214: #define TAPE_DRIVE_FILEMARKS 0x80040000 ! 215: #define TAPE_DRIVE_SEQUENTIAL_FMKS 0x80080000 ! 216: ! 217: #define TAPE_DRIVE_SETMARKS 0x80100000 ! 218: #define TAPE_DRIVE_SEQUENTIAL_SMKS 0x80200000 ! 219: #define TAPE_DRIVE_REVERSE_POSITION 0x80400000 ! 220: #define TAPE_DRIVE_SPACE_IMMEDIATE 0x80800000 ! 221: ! 222: #define TAPE_DRIVE_WRITE_SETMARKS 0x81000000 ! 223: #define TAPE_DRIVE_WRITE_FILEMARKS 0x82000000 ! 224: #define TAPE_DRIVE_WRITE_SHORT_FMKS 0x84000000 ! 225: #define TAPE_DRIVE_WRITE_LONG_FMKS 0x88000000 ! 226: ! 227: #define TAPE_DRIVE_WRITE_MARK_IMMED 0x90000000 ! 228: #define TAPE_DRIVE_FORMAT 0xA0000000 ! 229: #define TAPE_DRIVE_FORMAT_IMMEDIATE 0xC0000000 ! 230: #define TAPE_DRIVE_HIGH_FEATURES 0x80000000 //mask for high features flag ! 231: ! 232: typedef struct _TAPE_GET_DRIVE_PARAMETERS { ! 233: BOOLEAN ECC; ! 234: BOOLEAN Compression; ! 235: BOOLEAN DataPadding; ! 236: BOOLEAN ReportSetmarks; ! 237: ULONG DefaultBlockSize; ! 238: ULONG MaximumBlockSize; ! 239: ULONG MinimumBlockSize; ! 240: ULONG MaximumPartitionCount; ! 241: ULONG FeaturesLow; ! 242: ULONG FeaturesHigh; ! 243: ULONG EOTWarningZoneSize; ! 244: } TAPE_GET_DRIVE_PARAMETERS, *PTAPE_GET_DRIVE_PARAMETERS; ! 245: ! 246: // ! 247: // IOCTL_TAPE_SET_DRIVE_PARAMETERS definitions ! 248: // ! 249: ! 250: typedef struct _TAPE_SET_DRIVE_PARAMETERS { ! 251: BOOLEAN ECC; ! 252: BOOLEAN Compression; ! 253: BOOLEAN DataPadding; ! 254: BOOLEAN ReportSetmarks; ! 255: ULONG EOTWarningZoneSize; ! 256: } TAPE_SET_DRIVE_PARAMETERS, *PTAPE_SET_DRIVE_PARAMETERS; ! 257: ! 258: // ! 259: // IOCTL_TAPE_GET_MEDIA_PARAMETERS definitions ! 260: // ! 261: ! 262: typedef struct _TAPE_GET_MEDIA_PARAMETERS { ! 263: LARGE_INTEGER Capacity; ! 264: LARGE_INTEGER Remaining; ! 265: ULONG BlockSize; ! 266: ULONG PartitionCount; ! 267: BOOLEAN WriteProtected; ! 268: } TAPE_GET_MEDIA_PARAMETERS, *PTAPE_GET_MEDIA_PARAMETERS; ! 269: ! 270: // ! 271: // IOCTL_TAPE_SET_MEDIA_PARAMETERS definitions ! 272: // ! 273: ! 274: typedef struct _TAPE_SET_MEDIA_PARAMETERS { ! 275: ULONG BlockSize; ! 276: } TAPE_SET_MEDIA_PARAMETERS, *PTAPE_SET_MEDIA_PARAMETERS; ! 277: ! 278: // ! 279: // IOCTL_TAPE_CREATE_PARTITION definitions ! 280: // ! 281: ! 282: #define TAPE_FIXED_PARTITIONS 0L ! 283: #define TAPE_SELECT_PARTITIONS 1L ! 284: #define TAPE_INITIATOR_PARTITIONS 2L ! 285: ! 286: typedef struct _TAPE_CREATE_PARTITION { ! 287: ULONG Method; ! 288: ULONG Count; ! 289: ULONG Size; ! 290: } TAPE_CREATE_PARTITION, *PTAPE_CREATE_PARTITION; ! 291: ! 292: // end_winnt
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.