Copyright (C) 1994, Digital Equipment Corp.
by Roumen Roupski
INTERFACEThis module defines the 32-Bit Windows Device I/O control codes.WinIoctl ;
It defines the various device type values. Note that values used
by Microsoft Corporation are in the range 0-32767, and 32768-65535
are reserved for use by customers. The values in this interface
correspond to build version 0013 of Microsoft's winioctl.h
.
IMPORT WinNT; FROM WinBaseTypes IMPORT BYTE, WORD, DWORD; TYPE DEVICE_TYPE = DWORD; CONST FILE_DEVICE_BEEP = 16_00000001; FILE_DEVICE_CD_ROM = 16_00000002; FILE_DEVICE_CD_ROM_FILE_SYSTEM = 16_00000003; FILE_DEVICE_CONTROLLER = 16_00000004; FILE_DEVICE_DATALINK = 16_00000005; FILE_DEVICE_DFS = 16_00000006; FILE_DEVICE_DISK = 16_00000007; FILE_DEVICE_DISK_FILE_SYSTEM = 16_00000008; FILE_DEVICE_FILE_SYSTEM = 16_00000009; FILE_DEVICE_INPORT_PORT = 16_0000000A; FILE_DEVICE_KEYBOARD = 16_0000000B; FILE_DEVICE_MAILSLOT = 16_0000000C; FILE_DEVICE_MIDI_IN = 16_0000000D; FILE_DEVICE_MIDI_OUT = 16_0000000E; FILE_DEVICE_MOUSE = 16_0000000F; FILE_DEVICE_MULTI_UNC_PROVIDER = 16_00000010; FILE_DEVICE_NAMED_PIPE = 16_00000011; FILE_DEVICE_NETWORK = 16_00000012; FILE_DEVICE_NETWORK_BROWSER = 16_00000013; FILE_DEVICE_NETWORK_FILE_SYSTEM = 16_00000014; FILE_DEVICE_NULL = 16_00000015; FILE_DEVICE_PARALLEL_PORT = 16_00000016; FILE_DEVICE_PHYSICAL_NETCARD = 16_00000017; FILE_DEVICE_PRINTER = 16_00000018; FILE_DEVICE_SCANNER = 16_00000019; FILE_DEVICE_SERIAL_MOUSE_PORT = 16_0000001A; FILE_DEVICE_SERIAL_PORT = 16_0000001B; FILE_DEVICE_SCREEN = 16_0000001C; FILE_DEVICE_SOUND = 16_0000001D; FILE_DEVICE_STREAMS = 16_0000001E; FILE_DEVICE_TAPE = 16_0000001F; FILE_DEVICE_TAPE_FILE_SYSTEM = 16_00000020; FILE_DEVICE_TRANSPORT = 16_00000021; FILE_DEVICE_UNKNOWN = 16_00000022; FILE_DEVICE_VIDEO = 16_00000023; FILE_DEVICE_VIRTUAL_DISK = 16_00000024; FILE_DEVICE_WAVE_IN = 16_00000025; FILE_DEVICE_WAVE_OUT = 16_00000026; FILE_DEVICE_8042_PORT = 16_00000027; FILE_DEVICE_NETWORK_REDIRECTOR = 16_00000028; FILE_DEVICE_BATTERY = 16_00000029; FILE_DEVICE_BUS_EXTENDER = 16_0000002A;Macro definition for defining IOCTL and FSCTL function control codes. Note that function codes 0-2047 are reserved for Microsoft Corporation, and 2048-4095 are reserved for customers.
#define CTL_CODE( DeviceType, Function, Method, Access ) ( \ ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \ )TYPE CTL_CODE = RECORD Method : BITS 2 FOR [METHOD_BUFFERED..METHOD_NEITHER]; Function : BITS 12 FOR [0..4095]; Access : BITS 2 FOR [0..3]; DeviceType: BITS 16 FOR WORD; END; CONST IOCTL_USER_CODES = 16_0800;Define the method codes for how buffers are passed for I/O and FS controlsCONST METHOD_BUFFERED = 0; METHOD_IN_DIRECT = 1; METHOD_OUT_DIRECT = 2; METHOD_NEITHER = 3;Define the access check value for any access.The
FILE_READ_ACCESS
andFILE_WRITE_ACCESS
constants are also defined inntioapi.h
asFILE_READ_DATA
andFILE_WRITE_DATA
. The values for these constants *MUST* always be in sync.CONST FILE_ANY_ACCESS = 0; FILE_READ_ACCESS = 1; (* file & pipe *) FILE_WRITE_ACCESS = 2; (* file & pipe *) FILE_READ_DATA = FILE_READ_ACCESS; FILE_WRITE_DATA = FILE_WRITE_ACCESS;end_ntddk end_nthal end_ntifs
IoControlCode
values for disk devices.CONST IOCTL_DISK_BASE = FILE_DEVICE_DISK; IOCTL_DISK_GET_DRIVE_GEOMETRY = CTL_CODE{ DeviceType:= IOCTL_DISK_BASE, Function:= 16_0000, Method:= METHOD_BUFFERED, Access:= FILE_ANY_ACCESS }; IOCTL_DISK_GET_PARTITION_INFO = CTL_CODE{ DeviceType:= IOCTL_DISK_BASE, Function:= 16_0001, Method:= METHOD_BUFFERED, Access:= FILE_READ_ACCESS }; IOCTL_DISK_SET_PARTITION_INFO = CTL_CODE{ DeviceType:= IOCTL_DISK_BASE, Function:= 16_0002, Method:= METHOD_BUFFERED, Access:= FILE_READ_ACCESS + FILE_WRITE_ACCESS }; IOCTL_DISK_GET_DRIVE_LAYOUT = CTL_CODE{ DeviceType:= IOCTL_DISK_BASE, Function:= 16_0003, Method:= METHOD_BUFFERED, Access:= FILE_READ_ACCESS }; IOCTL_DISK_SET_DRIVE_LAYOUT = CTL_CODE{ DeviceType:= IOCTL_DISK_BASE, Function:= 16_0004, Method:= METHOD_BUFFERED, Access:= FILE_READ_ACCESS + FILE_WRITE_ACCESS }; IOCTL_DISK_VERIFY = CTL_CODE{ DeviceType:= IOCTL_DISK_BASE, Function:= 16_0005, Method:= METHOD_BUFFERED, Access:= FILE_ANY_ACCESS }; IOCTL_DISK_FORMAT_TRACKS = CTL_CODE{ DeviceType:= IOCTL_DISK_BASE, Function:= 16_0006, Method:= METHOD_BUFFERED, Access:= FILE_READ_ACCESS + FILE_WRITE_ACCESS }; IOCTL_DISK_REASSIGN_BLOCKS = CTL_CODE{ DeviceType:= IOCTL_DISK_BASE, Function:= 16_0007, Method:= METHOD_BUFFERED, Access:= FILE_READ_ACCESS + FILE_WRITE_ACCESS }; IOCTL_DISK_PERFORMANCE = CTL_CODE{ DeviceType:= IOCTL_DISK_BASE, Function:= 16_0008, Method:= METHOD_BUFFERED, Access:= FILE_ANY_ACCESS }; IOCTL_DISK_IS_WRITABLE = CTL_CODE{ DeviceType:= IOCTL_DISK_BASE, Function:= 16_0009, Method:= METHOD_BUFFERED, Access:= FILE_ANY_ACCESS }; IOCTL_DISK_LOGGING = CTL_CODE{ DeviceType:= IOCTL_DISK_BASE, Function:= 16_000A, Method:= METHOD_BUFFERED, Access:= FILE_ANY_ACCESS }; IOCTL_DISK_FORMAT_TRACKS_EX = CTL_CODE{ DeviceType:= IOCTL_DISK_BASE, Function:= 16_000B, Method:= METHOD_BUFFERED, Access:= FILE_READ_ACCESS + FILE_WRITE_ACCESS }; IOCTL_DISK_HISTOGRAM_STRUCTURE = CTL_CODE{ DeviceType:= IOCTL_DISK_BASE, Function:= 16_000C, Method:= METHOD_BUFFERED, Access:= FILE_ANY_ACCESS }; IOCTL_DISK_HISTOGRAM_DATA = CTL_CODE{ DeviceType:= IOCTL_DISK_BASE, Function:= 16_000D, Method:= METHOD_BUFFERED, Access:= FILE_ANY_ACCESS }; IOCTL_DISK_HISTOGRAM_RESET = CTL_CODE{ DeviceType:= IOCTL_DISK_BASE, Function:= 16_000E, Method:= METHOD_BUFFERED, Access:= FILE_ANY_ACCESS }; IOCTL_DISK_REQUEST_STRUCTURE = CTL_CODE{ DeviceType:= IOCTL_DISK_BASE, Function:= 16_000F, Method:= METHOD_BUFFERED, Access:= FILE_ANY_ACCESS }; IOCTL_DISK_REQUEST_DATA = CTL_CODE{ DeviceType:= IOCTL_DISK_BASE, Function:= 16_0010, Method:= METHOD_BUFFERED, Access:= FILE_ANY_ACCESS };The following device control codes are common for all class drivers. The functions codes defined here must match all of the other class drivers.CONST IOCTL_DISK_CHECK_VERIFY = CTL_CODE{ DeviceType:= IOCTL_DISK_BASE, Function:= 16_0200, Method:= METHOD_BUFFERED, Access:= FILE_READ_ACCESS }; IOCTL_DISK_MEDIA_REMOVAL = CTL_CODE{ DeviceType:= IOCTL_DISK_BASE, Function:= 16_0201, Method:= METHOD_BUFFERED, Access:= FILE_READ_ACCESS }; IOCTL_DISK_EJECT_MEDIA = CTL_CODE{ DeviceType:= IOCTL_DISK_BASE, Function:= 16_0202, Method:= METHOD_BUFFERED, Access:= FILE_READ_ACCESS }; IOCTL_DISK_LOAD_MEDIA = CTL_CODE{ DeviceType:= IOCTL_DISK_BASE, Function:= 16_0203, Method:= METHOD_BUFFERED, Access:= FILE_READ_ACCESS }; IOCTL_DISK_RESERVE = CTL_CODE{ DeviceType:= IOCTL_DISK_BASE, Function:= 16_0204, Method:= METHOD_BUFFERED, Access:= FILE_READ_ACCESS }; IOCTL_DISK_RELEASE = CTL_CODE{ DeviceType:= IOCTL_DISK_BASE, Function:= 16_0205, Method:= METHOD_BUFFERED, Access:= FILE_READ_ACCESS }; IOCTL_DISK_FIND_NEW_DEVICES = CTL_CODE{ DeviceType:= IOCTL_DISK_BASE, Function:= 16_0206, Method:= METHOD_BUFFERED, Access:= FILE_READ_ACCESS }; IOCTL_DISK_REMOVE_DEVICE = CTL_CODE{ DeviceType:= IOCTL_DISK_BASE, Function:= 16_0207, Method:= METHOD_BUFFERED, Access:= FILE_READ_ACCESS }; IOCTL_DISK_GET_MEDIA_TYPES = CTL_CODE{ DeviceType:= IOCTL_DISK_BASE, Function:= 16_0300, Method:= METHOD_BUFFERED, Access:= FILE_ANY_ACCESS };Define the partition types returnable by known disk drivers.CONST PARTITION_ENTRY_UNUSED = 16_00; (* Entry unused *) PARTITION_FAT_12 = 16_01; (* 12-bit FAT entries *) PARTITION_XENIX_1 = 16_02; (* Xenix *) PARTITION_XENIX_2 = 16_03; (* Xenix *) PARTITION_FAT_16 = 16_04; (* 16-bit FAT entries *) PARTITION_EXTENDED = 16_05; (* Extended partition entry *) PARTITION_HUGE = 16_06; (* Huge partition MS-DOS V4 *) PARTITION_IFS = 16_07; (* IFS Partition *) PARTITION_PREP = 16_41; (* PowerPC Ref. Platform Boot Partition *) PARTITION_UNIX = 16_63; (* Unix *) VALID_NTFT = 16_C0; (* NTFT uses high order bits *)The high bit of the partition type code indicates that a partition is part of an NTFT mirror or striped array.CONST PARTITION_NTFT = 16_80; (* NTFT partition *)Define the media types supported by the driver.TYPE PMEDIA_TYPE = UNTRACED REF MEDIA_TYPE; MEDIA_TYPE = { Unknown, (* Format is unknown *) F5_1Pt2_512, (* 5.25", 1.2MB, 512 bytes/sector *) F3_1Pt44_512, (* 3.5", 1.44MB, 512 bytes/sector *) F3_2Pt88_512, (* 3.5", 2.88MB, 512 bytes/sector *) F3_20Pt8_512, (* 3.5", 20.8MB, 512 bytes/sector *) F3_720_512, (* 3.5", 720KB, 512 bytes/sector *) F5_360_512, (* 5.25", 360KB, 512 bytes/sector *) F5_320_512, (* 5.25", 320KB, 512 bytes/sector *) F5_320_1024, (* 5.25", 320KB, 1024 bytes/sector *) F5_180_512, (* 5.25", 180KB, 512 bytes/sector *) F5_160_512, (* 5.25", 160KB, 512 bytes/sector *) RemovableMedia, (* Removable media other than floppy *) FixedMedia (* Fixed hard disk media *) };Define the input buffer structure for the driver, when it is called with IOCTL_DISK_FORMAT_TRACKS.TYPE PFORMAT_PARAMETERS = UNTRACED REF FORMAT_PARAMETERS; FORMAT_PARAMETERS = RECORD MediaType: MEDIA_TYPE; StartCylinderNumber: DWORD; EndCylinderNumber: DWORD; StartHeadNumber: DWORD; EndHeadNumber: DWORD; END;Define theBAD_TRACK_NUMBER
type. An array of elements of this type is returned by the driver onIOCTL_DISK_FORMAT_TRACKS
requests, to indicate what tracks were bad during formatting. The length of that array is reported in the `Information' field of the I/O Status Block.TYPE BAD_TRACK_NUMBER = WORD; PBAD_TRACK_NUMBER = UNTRACED REF BAD_TRACK_NUMBER;Define the input buffer structure for the driver, when it is called withIOCTL_DISK_FORMAT_TRACKS_EX
.TYPE PFORMAT_EX_PARAMETERS = UNTRACED REF FORMAT_EX_PARAMETERS; FORMAT_EX_PARAMETERS = RECORD MediaType : MEDIA_TYPE; StartCylinderNumber: DWORD; EndCylinderNumber: DWORD; StartHeadNumber: DWORD; EndHeadNumber: DWORD; FormatGapLength: WORD; SectorsPerTrack: WORD; SectorNumber: ARRAY [0..0] OF WORD; END;The following structure is returned on anIOCTL_DISK_GET_DRIVE_GEOMETRY
request and an array of them is returned on anIOCTL_DISK_GET_MEDIA_TYPES
request.TYPE PDISK_GEOMETRY = UNTRACED REF DISK_GEOMETRY; DISK_GEOMETRY = RECORD Cylinders: WinNT.LARGE_INTEGER; MediaType: MEDIA_TYPE; TracksPerCylinder: DWORD; SectorsPerTrack : DWORD; BytesPerSector : DWORD; END;The following structure is returned on anIOCTL_DISK_GET_PARTITION_INFO
and anIOCTL_DISK_GET_DRIVE_LAYOUT
request. It is also used in a request to change the drive layout,IOCTL_DISK_SET_DRIVE_LAYOUT
.TYPE PPARTITION_INFORMATION = UNTRACED REF PARTITION_INFORMATION; PARTITION_INFORMATION = RECORD StartingOffset: WinNT.LARGE_INTEGER; PartitionLength: WinNT.LARGE_INTEGER; HiddenSectors: DWORD; PartitionNumber: DWORD; PartitionType: BYTE; BootIndicator: WinNT.WBOOLEAN; RecognizedPartition: WinNT.WBOOLEAN; RewritePartition: WinNT.WBOOLEAN; END;The following structure is used to change the partition type of a specified disk partition using anIOCTL_DISK_SET_PARTITION_INFO
request.TYPE PSET_PARTITION_INFORMATION = UNTRACED REF SET_PARTITION_INFORMATION; SET_PARTITION_INFORMATION = RECORD PartitionType: BYTE; END;The following structures is returned on anIOCTL_DISK_GET_DRIVE_LAYOUT
request and given as input to anIOCTL_DISK_SET_DRIVE_LAYOUT
request.TYPE PDRIVE_LAYOUT_INFORMATION = UNTRACED REF DRIVE_LAYOUT_INFORMATION; DRIVE_LAYOUT_INFORMATION = RECORD PartitionCount: DWORD; Signature: DWORD; PartitionEntry: ARRAY [0..0] OF PARTITION_INFORMATION; END;The following structure is passed in on anIOCTL_DISK_VERIFY
request. The offset and length parameters are both given in bytes.TYPE PVERIFY_INFORMATION = UNTRACED REF VERIFY_INFORMATION; VERIFY_INFORMATION = RECORD StartingOffset: WinNT.LARGE_INTEGER; Length: DWORD; END;The following structure is passed in on anIOCTL_DISK_REASSIGN_BLOCKS
request.TYPE PREASSIGN_BLOCKS = UNTRACED REF REASSIGN_BLOCKS; REASSIGN_BLOCKS = RECORD Reserved: WORD; Count: WORD; BlockNumber: ARRAY [0..0] OF DWORD; END;IOCTL_DISK_MEDIA_REMOVAL
disables the mechanism on a SCSI device that ejects media. This function may or may not be supported on SCSI devices that support removable media.PreventMediaRemove
isTRUE
if and only if media should be prevented from being removed.TYPE PPREVENT_MEDIA_REMOVAL = UNTRACED REF PREVENT_MEDIA_REMOVAL; PREVENT_MEDIA_REMOVAL = RECORD PreventMediaRemoval: WinNT.WBOOLEAN; END;The following structures define disk performance statistics: specifically the locations of all the reads and writes which have occured on the disk.To use these structures, you must issue an
IOCTL_DISK_HIST_STRUCTURE
(with aDISK_HISTOGRAM
) to obtain the basic histogram information. The number of buckets which must allocated is part of this structure. Allocate the required number of buckets and call anIOCTL_DISK_HIST_DATA
to fill in the data.CONST HIST_NO_OF_BUCKETS = 24; TYPE PHISTOGRAM_BUCKET = UNTRACED REF HISTOGRAM_BUCKET; HISTOGRAM_BUCKET = RECORD Reads : DWORD; Writes: DWORD; END; CONST HISTOGRAM_BUCKET_SIZE = BYTESIZE(HISTOGRAM_BUCKET); TYPE PDISK_HISTOGRAM = UNTRACED REF DISK_HISTOGRAM; DISK_HISTOGRAM = RECORD DiskSize: WinNT.LARGE_INTEGER; Start: WinNT.LARGE_INTEGER; End: WinNT.LARGE_INTEGER; Average: WinNT.LARGE_INTEGER; AverageRead: WinNT.LARGE_INTEGER; AverageWrite: WinNT.LARGE_INTEGER; Granularity: DWORD; Size: DWORD; ReadCount: DWORD; WriteCount: DWORD; Histogram: PHISTOGRAM_BUCKET; END; CONST DISK_HISTOGRAM_SIZE = BYTESIZE(DISK_HISTOGRAM);The following structures define disk debugging capabilities. The IOCTLs are directed to one of the two disk filter drivers.
DISKPERF
is a utilty for collecting disk request statistics.
SIMBAD
is a utility for injecting faults in IO requests to disks.The following structure is exchanged on an
IOCTL_DISK_GET_PERFORMANCE
request. This ioctl collects summary disk request statistics used in measuring performance.TYPE PDISK_PERFORMANCE = UNTRACED REF DISK_PERFORMANCE; DISK_PERFORMANCE = RECORD BytesRead: WinNT.LARGE_INTEGER; BytesWritten: WinNT.LARGE_INTEGER; ReadTime: WinNT.LARGE_INTEGER; WriteTime: WinNT.LARGE_INTEGER; ReadCount: DWORD; WriteCount: DWORD; QueueDepth: DWORD; END;This structure defines the disk logging record. When disk logging is enabled, one of these is written to an internal buffer for each disk request.TYPE PDISK_RECORD = UNTRACED REF DISK_RECORD; DISK_RECORD = RECORD ByteOffset: WinNT.LARGE_INTEGER; StartTime: WinNT.LARGE_INTEGER; EndTime: WinNT.LARGE_INTEGER; VirtualAddress: WinNT.PVOID; NumberOfBytes: DWORD; DeviceNumber: BYTE; ReadRequest: WinNT.WBOOLEAN ; END;The following structure is exchanged on anIOCTL_DISK_LOG
request. Not all fields are valid with each function type.TYPE PDISK_LOGGING = UNTRACED REF DISK_LOGGING; DISK_LOGGING = RECORD Function: BYTE; BufferAddress: WinNT.PVOID; BufferSize: DWORD; END;Disk logging functionsStart disk logging. Only the
Function
andBufferSize
fields are valid.CONST DISK_LOGGING_START = 0;Stop disk logging. Only theFunction
field is valid.CONST DISK_LOGGING_STOP = 1;Return disk log. All fields are valid. Data will be copied from internal buffer to buffer specified for the number of bytes requested.CONST DISK_LOGGING_DUMP = 2;DISK BINNING
DISKPERF
will keep counters for IO that falls in each of these ranges. The application determines the number and size of the ranges. Joe Lin wanted me to keep it flexible as possible, for instance, IO sizes are interesting in ranges like 0-4096, 4097-16384, 16385-65536, 65537+.CONST DISK_BINNING = 3;Bin typesTYPE BIN_TYPES = { RequestSize, RequestLocation };Bin rangesTYPE PBIN_RANGE = UNTRACED REF BIN_RANGE; BIN_RANGE = RECORD StartValue: WinNT.LARGE_INTEGER; Length: WinNT.LARGE_INTEGER; END;Bin definitionTYPE PPERF_BIN = UNTRACED REF PERF_BIN; PERF_BIN = RECORD NumberOfBins: DWORD; TypeOfBin: DWORD; BinsRanges: ARRAY [0..0] OF BIN_RANGE; END;Bin countTYPE PBIN_COUNT = UNTRACED REF BIN_COUNT; BIN_COUNT = RECORD BinRange: BIN_RANGE; BinCount: DWORD; END;Bin resultsTYPE PBIN_RESULTS = UNTRACED REF BIN_RESULTS; BIN_RESULTS = RECORD NumberOfBins: DWORD; BinCounts: ARRAY[0..0] OF BIN_COUNT; END; CONST IOCTL_SERIAL_LSRMST_INSERT = CTL_CODE{ DeviceType:= FILE_DEVICE_SERIAL_PORT, Function:= 31, Method:= METHOD_BUFFERED, Access:= FILE_ANY_ACCESS };The following values follow the escape designator in the data stream if theLSRMST_INSERT
mode has been turned on.CONST SERIAL_LSRMST_ESCAPE : BYTE = 0;Following this value is the contents of the line status register, and then the character in the RX hardware when the line status register was encountered.CONST SERIAL_LSRMST_LSR_DATA : BYTE = 1;Following this value is the contents of the line status register. No error character follows.CONST SERIAL_LSRMST_LSR_NODATA : BYTE = 2;Following this value is the contents of the modem status register.CONST SERIAL_LSRMST_MST : BYTE = 3; FSCTL_LOCK_VOLUME = CTL_CODE{ DeviceType:= FILE_DEVICE_FILE_SYSTEM, Function:= 6, Method:= METHOD_BUFFERED, Access:= FILE_ANY_ACCESS }; FSCTL_UNLOCK_VOLUME = CTL_CODE{ DeviceType:= FILE_DEVICE_FILE_SYSTEM, Function:= 7, Method:= METHOD_BUFFERED, Access:= FILE_ANY_ACCESS }; FSCTL_DISMOUNT_VOLUME = CTL_CODE{ DeviceType:= FILE_DEVICE_FILE_SYSTEM, Function:= 8, Method:= METHOD_BUFFERED, Access:= FILE_ANY_ACCESS }; FSCTL_MOUNT_DBLS_VOLUME = CTL_CODE{ DeviceType:= FILE_DEVICE_FILE_SYSTEM, Function:= 13, Method:= METHOD_BUFFERED, Access:= FILE_ANY_ACCESS }; FSCTL_GET_COMPRESSION = CTL_CODE{ DeviceType:= FILE_DEVICE_FILE_SYSTEM, Function:= 15, Method:= METHOD_BUFFERED, Access:= FILE_ANY_ACCESS }; FSCTL_SET_COMPRESSION = CTL_CODE{ DeviceType:= FILE_DEVICE_FILE_SYSTEM, Function:= 16, Method:= METHOD_BUFFERED, Access:= FILE_READ_DATA + FILE_WRITE_DATA }; FSCTL_READ_COMPRESSION = CTL_CODE{ DeviceType:= FILE_DEVICE_FILE_SYSTEM, Function:= 17, Method:= METHOD_NEITHER, Access:= FILE_READ_DATA }; FSCTL_WRITE_COMPRESSION = CTL_CODE{ DeviceType:= FILE_DEVICE_FILE_SYSTEM, Function:= 18, Method:= METHOD_NEITHER, Access:= FILE_WRITE_DATA }; PROCEDURE IsRecognizedPartition (partitionType: DWORD): BOOLEAN;// // Routine Description: // // This macro is used to determine to which partitions drive letters // should be assigned. // // Arguments: // // PartitionType - Supplies the type of the partition being examined. // // Return Value: // // The return value is TRUE if the partition type is recognized, // otherwise FALSE is returned. //
END WinIoctl.