|
|
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.