/* $Revision: 1.2 $ */ #ifndef _WINIOCTL_ #define _WINIOCTL_ #ifndef _DEVIOCTL_ #define _DEVIOCTL_ #define DEVICE_TYPE DWORD #define FILE_DEVICE_BEEP 1 #define FILE_DEVICE_CD_ROM 2 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 3 #define FILE_DEVICE_CONTROLLER 4 #define FILE_DEVICE_DATALINK 5 #define FILE_DEVICE_DFS 6 #define FILE_DEVICE_DISK 7 #define FILE_DEVICE_DISK_FILE_SYSTEM 8 #define FILE_DEVICE_FILE_SYSTEM 9 #define FILE_DEVICE_INPORT_PORT 0xa #define FILE_DEVICE_KEYBOARD 0xb #define FILE_DEVICE_MAILSLOT 0xc #define FILE_DEVICE_MIDI_IN 0xd #define FILE_DEVICE_MIDI_OUT 0xe #define FILE_DEVICE_MOUSE 0xf #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x10 #define FILE_DEVICE_NAMED_PIPE 0x11 #define FILE_DEVICE_NETWORK 0x12 #define FILE_DEVICE_NETWORK_BROWSER 0x13 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x14 #define FILE_DEVICE_NULL 0x15 #define FILE_DEVICE_PARALLEL_PORT 0x16 #define FILE_DEVICE_PHYSICAL_NETCARD 0x17 #define FILE_DEVICE_PRINTER 0x18 #define FILE_DEVICE_SCANNER 0x19 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x1a #define FILE_DEVICE_SERIAL_PORT 0x1b #define FILE_DEVICE_SCREEN 0x1c #define FILE_DEVICE_SOUND 0x1d #define FILE_DEVICE_STREAMS 0x1e #define FILE_DEVICE_TAPE 0x1f #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x20 #define FILE_DEVICE_TRANSPORT 0x21 #define FILE_DEVICE_UNKNOWN 0x22 #define FILE_DEVICE_VIDEO 0x23 #define FILE_DEVICE_VIRTUAL_DISK 0x24 #define FILE_DEVICE_WAVE_IN 0x25 #define FILE_DEVICE_WAVE_OUT 0x26 #define FILE_DEVICE_8042_PORT 0x27 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x28 #define FILE_DEVICE_BATTERY 0x29 #define FILE_DEVICE_BUS_EXTENDER 0x2a #define FILE_DEVICE_MODEM 0x2b #define FILE_DEVICE_VDM 0x2c #define FILE_DEVICE_MASS_STORAGE 0x2d #define CTL_CODE(D,F,M,A) (((D) << 16)|((A) << 14)|((F) << 2)|(M)) #define METHOD_BUFFERED 0 #define METHOD_IN_DIRECT 1 #define METHOD_OUT_DIRECT 2 #define METHOD_NEITHER 3 #define FILE_ANY_ACCESS 0 #define FILE_READ_ACCESS 1 #define FILE_WRITE_ACCESS 2 #endif #ifndef _NTDDSTOR_H_ #define _NTDDSTOR_H_ #define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE #define IOCTL_STORAGE_CHECK_VERIFY CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_MEDIA_REMOVAL CTL_CODE(IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_EJECT_MEDIA CTL_CODE(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_LOAD_MEDIA CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_RESERVE CTL_CODE(IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_RELEASE CTL_CODE(IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_FIND_NEW_DEVICES CTL_CODE(IOCTL_STORAGE_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_GET_MEDIA_TYPES CTL_CODE(IOCTL_STORAGE_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS) typedef struct _PREVENT_MEDIA_REMOVAL { BOOLEAN PreventMediaRemoval; } PREVENT_MEDIA_REMOVAL, *PPREVENT_MEDIA_REMOVAL; #endif #define IOCTL_DISK_BASE FILE_DEVICE_DISK #define IOCTL_DISK_GET_DRIVE_GEOMETRY CTL_CODE(IOCTL_DISK_BASE, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_DISK_GET_PARTITION_INFO CTL_CODE(IOCTL_DISK_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_DISK_SET_PARTITION_INFO CTL_CODE(IOCTL_DISK_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_DISK_GET_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_DISK_SET_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_DISK_VERIFY CTL_CODE(IOCTL_DISK_BASE, 0x0005, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_DISK_FORMAT_TRACKS CTL_CODE(IOCTL_DISK_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_DISK_REASSIGN_BLOCKS CTL_CODE(IOCTL_DISK_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_DISK_PERFORMANCE CTL_CODE(IOCTL_DISK_BASE, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_DISK_IS_WRITABLE CTL_CODE(IOCTL_DISK_BASE, 0x0009, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_DISK_LOGGING CTL_CODE(IOCTL_DISK_BASE, 0x000a, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_DISK_FORMAT_TRACKS_EX CTL_CODE(IOCTL_DISK_BASE, 0x000b, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_DISK_HISTOGRAM_STRUCTURE CTL_CODE(IOCTL_DISK_BASE, 0x000c, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_DISK_HISTOGRAM_DATA CTL_CODE(IOCTL_DISK_BASE, 0x000d, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_DISK_HISTOGRAM_RESET CTL_CODE(IOCTL_DISK_BASE, 0x000e, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_DISK_REQUEST_STRUCTURE CTL_CODE(IOCTL_DISK_BASE, 0x000f, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_DISK_REQUEST_DATA CTL_CODE(IOCTL_DISK_BASE, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_DISK_CONTROLLER_NUMBER CTL_CODE(IOCTL_DISK_BASE, 0x0011, METHOD_BUFFERED, FILE_ANY_ACCESS) #define SMART_GET_VERSION CTL_CODE(IOCTL_DISK_BASE, 0x0020, METHOD_BUFFERED, FILE_READ_ACCESS) #define SMART_SEND_DRIVE_COMMAND CTL_CODE(IOCTL_DISK_BASE, 0x0021, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define SMART_RCV_DRIVE_DATA CTL_CODE(IOCTL_DISK_BASE, 0x0022, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_DISK_CHECK_VERIFY CTL_CODE(IOCTL_DISK_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_DISK_MEDIA_REMOVAL CTL_CODE(IOCTL_DISK_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_DISK_EJECT_MEDIA CTL_CODE(IOCTL_DISK_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_DISK_LOAD_MEDIA CTL_CODE(IOCTL_DISK_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_DISK_RESERVE CTL_CODE(IOCTL_DISK_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_DISK_RELEASE CTL_CODE(IOCTL_DISK_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_DISK_FIND_NEW_DEVICES CTL_CODE(IOCTL_DISK_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_DISK_GET_MEDIA_TYPES CTL_CODE(IOCTL_DISK_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS) #define PARTITION_ENTRY_UNUSED 0 #define PARTITION_FAT_12 1 #define PARTITION_XENIX_1 2 #define PARTITION_XENIX_2 3 #define PARTITION_FAT_16 4 #define PARTITION_EXTENDED 5 #define PARTITION_HUGE 6 #define PARTITION_IFS 7 #define PARTITION_FAT32 11 #define PARTITION_FAT32_XINT13 12 #define PARTITION_XINT13 0xE #define PARTITION_XINT13_EXTENDED 0xF #define PARTITION_PREP 0x41 #define PARTITION_UNIX 0x63 #define VALID_NTFT 0xC0 #define PARTITION_NTFT 0x80 #define IsRecognizedPartition(P) (((P & PARTITION_NTFT) && ((P & ~0xC0) == PARTITION_FAT_12)) || \ ((P & PARTITION_NTFT) && ((P & ~0xC0) == PARTITION_FAT_16))||((P & PARTITION_NTFT) && ((P & ~0xC0) == PARTITION_IFS))|| \ ((P & PARTITION_NTFT) && ((P & ~0xC0) == PARTITION_HUGE))||((P & PARTITION_NTFT) && ((P & ~0xC0) == PARTITION_FAT32))|| \ ((P & PARTITION_NTFT) && ((P & ~0xC0) == PARTITION_FAT32_XINT13))||((P & PARTITION_NTFT) && ((P & ~0xC0) == PARTITION_XINT13))||\ ((P & ~PARTITION_NTFT) == PARTITION_FAT_12)||((P & ~PARTITION_NTFT) == PARTITION_FAT_16)||\ ((P & ~PARTITION_NTFT) == PARTITION_IFS)||((P & ~PARTITION_NTFT) == PARTITION_HUGE)||\ ((P & ~PARTITION_NTFT) == PARTITION_FAT32)||((P & ~PARTITION_NTFT) == PARTITION_FAT32_XINT13)||\ ((P & ~PARTITION_NTFT) == PARTITION_XINT13) ) #define IsContainerPartition(P) ((P == PARTITION_EXTENDED)||(P == PARTITION_XINT13_EXTENDED)) typedef enum _MEDIA_TYPE { Unknown, F5_1Pt2_512, F3_1Pt44_512, F3_2Pt88_512, F3_20Pt8_512, F3_720_512, F5_360_512, F5_320_512, F5_320_1024, F5_180_512, F5_160_512, RemovableMedia, FixedMedia, F3_120M_512 } MEDIA_TYPE, *PMEDIA_TYPE; typedef struct _FORMAT_PARAMETERS { MEDIA_TYPE MediaType; DWORD StartCylinderNumber; DWORD EndCylinderNumber; DWORD StartHeadNumber; DWORD EndHeadNumber; } FORMAT_PARAMETERS, *PFORMAT_PARAMETERS; typedef WORD BAD_TRACK_NUMBER; typedef WORD *PBAD_TRACK_NUMBER; typedef struct _FORMAT_EX_PARAMETERS { MEDIA_TYPE MediaType; DWORD StartCylinderNumber; DWORD EndCylinderNumber; DWORD StartHeadNumber; DWORD EndHeadNumber; WORD FormatGapLength; WORD SectorsPerTrack; WORD SectorNumber[1]; } FORMAT_EX_PARAMETERS, *PFORMAT_EX_PARAMETERS; typedef struct _DISK_GEOMETRY { LARGE_INTEGER Cylinders; MEDIA_TYPE MediaType; DWORD TracksPerCylinder; DWORD SectorsPerTrack; DWORD BytesPerSector; } DISK_GEOMETRY, *PDISK_GEOMETRY; typedef struct _PARTITION_INFORMATION { LARGE_INTEGER StartingOffset; LARGE_INTEGER PartitionLength; DWORD HiddenSectors; DWORD PartitionNumber; BYTE PartitionType; BOOLEAN BootIndicator; BOOLEAN RecognizedPartition; BOOLEAN RewritePartition; } PARTITION_INFORMATION, *PPARTITION_INFORMATION; typedef struct _SET_PARTITION_INFORMATION { BYTE PartitionType; } SET_PARTITION_INFORMATION, *PSET_PARTITION_INFORMATION; typedef struct _DRIVE_LAYOUT_INFORMATION { DWORD PartitionCount; DWORD Signature; PARTITION_INFORMATION PartitionEntry[1]; } DRIVE_LAYOUT_INFORMATION, *PDRIVE_LAYOUT_INFORMATION; typedef struct _VERIFY_INFORMATION { LARGE_INTEGER StartingOffset; DWORD Length; } VERIFY_INFORMATION, *PVERIFY_INFORMATION; typedef struct _REASSIGN_BLOCKS { WORD Reserved; WORD Count; DWORD BlockNumber[1]; } REASSIGN_BLOCKS, *PREASSIGN_BLOCKS; typedef struct _DISK_CONTROLLER_NUMBER { DWORD ControllerNumber; DWORD DiskNumber; } DISK_CONTROLLER_NUMBER, *PDISK_CONTROLLER_NUMBER; #define HIST_NO_OF_BUCKETS 24 typedef struct _HISTOGRAM_BUCKET { DWORD Reads; DWORD Writes; } HISTOGRAM_BUCKET, *PHISTOGRAM_BUCKET; #define HISTOGRAM_BUCKET_SIZE sizeof(HISTOGRAM_BUCKET) typedef struct _DISK_HISTOGRAM { LARGE_INTEGER DiskSize; LARGE_INTEGER Start; LARGE_INTEGER End; LARGE_INTEGER Average; LARGE_INTEGER AverageRead; LARGE_INTEGER AverageWrite; DWORD Granularity; DWORD Size; DWORD ReadCount; DWORD WriteCount; PHISTOGRAM_BUCKET Histogram; } DISK_HISTOGRAM, *PDISK_HISTOGRAM; #define DISK_HISTOGRAM_SIZE sizeof(DISK_HISTOGRAM) typedef struct _DISK_PERFORMANCE { LARGE_INTEGER BytesRead; LARGE_INTEGER BytesWritten; LARGE_INTEGER ReadTime; LARGE_INTEGER WriteTime; DWORD ReadCount; DWORD WriteCount; DWORD QueueDepth; } DISK_PERFORMANCE, *PDISK_PERFORMANCE; typedef struct _DISK_RECORD { LARGE_INTEGER ByteOffset; LARGE_INTEGER StartTime; LARGE_INTEGER EndTime; PVOID VirtualAddress; DWORD NumberOfBytes; BYTE DeviceNumber; BOOLEAN ReadRequest; } DISK_RECORD, *PDISK_RECORD; typedef struct _DISK_LOGGING { BYTE Function; PVOID BufferAddress; DWORD BufferSize; } DISK_LOGGING, *PDISK_LOGGING; #define DISK_LOGGING_START 0 #define DISK_LOGGING_STOP 1 #define DISK_LOGGING_DUMP 2 #define DISK_BINNING 3 typedef enum _BIN_TYPES { RequestSize, RequestLocation } BIN_TYPES; typedef struct _BIN_RANGE { LARGE_INTEGER StartValue; LARGE_INTEGER Length; } BIN_RANGE, *PBIN_RANGE; typedef struct _PERF_BIN { DWORD NumberOfBins; DWORD TypeOfBin; BIN_RANGE BinsRanges[1]; } PERF_BIN, *PPERF_BIN ; typedef struct _BIN_COUNT { BIN_RANGE BinRange; DWORD BinCount; } BIN_COUNT, *PBIN_COUNT; typedef struct _BIN_RESULTS { DWORD NumberOfBins; BIN_COUNT BinCounts[1]; } BIN_RESULTS, *PBIN_RESULTS; #pragma pack(push,1) typedef struct _GETVERSIONINPARAMS { BYTE bVersion; BYTE bRevision; BYTE bReserved; BYTE bIDEDeviceMap; DWORD fCapabilities; DWORD dwReserved[4]; } GETVERSIONINPARAMS, *PGETVERSIONINPARAMS, *LPGETVERSIONINPARAMS; #define CAP_ATA_ID_CMD 1 #define CAP_ATAPI_ID_CMD 2 #define CAP_SMART_CMD 4 typedef struct _IDEREGS { BYTE bFeaturesReg; BYTE bSectorCountReg; BYTE bSectorNumberReg; BYTE bCylLowReg; BYTE bCylHighReg; BYTE bDriveHeadReg; BYTE bCommandReg; BYTE bReserved; } IDEREGS, *PIDEREGS, *LPIDEREGS; #define ATAPI_ID_CMD 0xA1 #define ID_CMD 0xEC #define SMART_CMD 0xB0 #define SMART_CYL_LOW 0x4F #define SMART_CYL_HI 0xC2 typedef struct _SENDCMDINPARAMS { DWORD cBufferSize; IDEREGS irDriveRegs; BYTE bDriveNumber; BYTE bReserved[3]; DWORD dwReserved[4]; BYTE bBuffer[1]; } SENDCMDINPARAMS, *PSENDCMDINPARAMS, *LPSENDCMDINPARAMS; typedef struct _DRIVERSTATUS { BYTE bDriverError; BYTE bIDEError; BYTE bReserved[2]; DWORD dwReserved[2]; } DRIVERSTATUS, *PDRIVERSTATUS, *LPDRIVERSTATUS; #define SMART_NO_ERROR 0 #define SMART_IDE_ERROR 1 #define SMART_INVALID_FLAG 2 #define SMART_INVALID_COMMAND 3 #define SMART_INVALID_BUFFER 4 #define SMART_INVALID_DRIVE 5 #define SMART_INVALID_IOCTL 6 #define SMART_ERROR_NO_MEM 7 #define SMART_INVALID_REGISTER 8 #define SMART_NOT_SUPPORTED 9 #define SMART_NO_IDE_DEVICE 10 typedef struct _SENDCMDOUTPARAMS { DWORD cBufferSize; DRIVERSTATUS DriverStatus; BYTE bBuffer[1]; } SENDCMDOUTPARAMS, *PSENDCMDOUTPARAMS, *LPSENDCMDOUTPARAMS; #pragma pack(pop) #define READ_ATTRIBUTE_BUFFER_SIZE 512 #define IDENTIFY_BUFFER_SIZE 512 #define READ_THRESHOLD_BUFFER_SIZE 512 #define READ_ATTRIBUTES 0xD0 #define READ_THRESHOLDS 0xD1 #define ENABLE_DISABLE_AUTOSAVE 0xD2 #define SAVE_ATTRIBUTE_VALUES 0xD3 #define EXECUTE_OFFLINE_DIAGS 0xD4 #define ENABLE_SMART 0xD8 #define DISABLE_SMART 0xD9 #define RETURN_SMART_STATUS 0xDA #define IOCTL_SERIAL_LSRMST_INSERT CTL_CODE(FILE_DEVICE_SERIAL_PORT,31,METHOD_BUFFERED,FILE_ANY_ACCESS) #define SERIAL_LSRMST_ESCAPE ((BYTE )0) #define SERIAL_LSRMST_LSR_DATA ((BYTE )1) #define SERIAL_LSRMST_LSR_NODATA ((BYTE )2) #define SERIAL_LSRMST_MST ((BYTE )3) #define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_MOUNT_DBLS_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,13, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,15, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA) #define FSCTL_READ_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,17, METHOD_NEITHER, FILE_READ_DATA) #define FSCTL_WRITE_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,18, METHOD_NEITHER, FILE_WRITE_DATA) #endif