📄 winioctl.pas
字号:
OBSOLETE_IOCTL_STORAGE_RESET_DEVICE = (
(IOCTL_STORAGE_BASE shl 16) or ((FILE_READ_ACCESS or FILE_WRITE_ACCESS) shl 14) or
($0401 shl 2) or METHOD_BUFFERED);
{$EXTERNALSYM OBSOLETE_IOCTL_STORAGE_RESET_DEVICE}
//
// IOCTL_STORAGE_GET_DEVICE_NUMBER
//
// input - none
//
// output - STORAGE_DEVICE_NUMBER structure
// The values in the STORAGE_DEVICE_NUMBER structure are guaranteed
// to remain unchanged until the system is rebooted. They are not
// guaranteed to be persistant across boots.
//
type
PSTORAGE_DEVICE_NUMBER = ^STORAGE_DEVICE_NUMBER;
{$EXTERNALSYM PSTORAGE_DEVICE_NUMBER}
_STORAGE_DEVICE_NUMBER = record
//
// The FILE_DEVICE_XXX type for this device.
//
DeviceType: DEVICE_TYPE;
//
// The number of this device
//
DeviceNumber: DWORD;
//
// If the device is partitionable, the partition number of the device.
// Otherwise -1
//
PartitionNumber: DWORD;
end;
{$EXTERNALSYM _STORAGE_DEVICE_NUMBER}
STORAGE_DEVICE_NUMBER = _STORAGE_DEVICE_NUMBER;
{$EXTERNALSYM STORAGE_DEVICE_NUMBER}
TStorageDeviceNumber = STORAGE_DEVICE_NUMBER;
PStorageDeviceNumber = PSTORAGE_DEVICE_NUMBER;
//
// Define the structures for scsi resets
//
PSTORAGE_BUS_RESET_REQUEST = ^STORAGE_BUS_RESET_REQUEST;
{$EXTERNALSYM PSTORAGE_BUS_RESET_REQUEST}
_STORAGE_BUS_RESET_REQUEST = record
PathId: BYTE;
end;
{$EXTERNALSYM _STORAGE_BUS_RESET_REQUEST}
STORAGE_BUS_RESET_REQUEST = _STORAGE_BUS_RESET_REQUEST;
{$EXTERNALSYM STORAGE_BUS_RESET_REQUEST}
TStorageBusResetRequest = STORAGE_BUS_RESET_REQUEST;
PStorageBusResetRequest = PSTORAGE_BUS_RESET_REQUEST;
//
// IOCTL_STORAGE_MEDIA_REMOVAL disables the mechanism
// on a storage device that ejects media. This function
// may or may not be supported on storage devices that
// support removable media.
//
// TRUE means prevent media from being removed.
// FALSE means allow media removal.
//
PPREVENT_MEDIA_REMOVAL = ^PREVENT_MEDIA_REMOVAL;
{$EXTERNALSYM PPREVENT_MEDIA_REMOVAL}
_PREVENT_MEDIA_REMOVAL = record
PreventMediaRemoval: ByteBool;
end;
{$EXTERNALSYM _PREVENT_MEDIA_REMOVAL}
PREVENT_MEDIA_REMOVAL = _PREVENT_MEDIA_REMOVAL;
{$EXTERNALSYM PREVENT_MEDIA_REMOVAL}
TPreventMediaRemoval = PREVENT_MEDIA_REMOVAL;
PPreventMediaRemoval = PPREVENT_MEDIA_REMOVAL;
PTAPE_STATISTICS = ^TAPE_STATISTICS;
{$EXTERNALSYM PTAPE_STATISTICS}
_TAPE_STATISTICS = record
Version: DWORD;
Flags: DWORD;
RecoveredWrites: LARGE_INTEGER;
UnrecoveredWrites: LARGE_INTEGER;
RecoveredReads: LARGE_INTEGER;
UnrecoveredReads: LARGE_INTEGER;
CompressionRatioReads: BYTE;
CompressionRatioWrites: BYTE;
end;
{$EXTERNALSYM _TAPE_STATISTICS}
TAPE_STATISTICS = _TAPE_STATISTICS;
{$EXTERNALSYM TAPE_STATISTICS}
TTapeStatistics = TAPE_STATISTICS;
PTapeStatistics = PTAPE_STATISTICS;
const
RECOVERED_WRITES_VALID = $00000001;
{$EXTERNALSYM RECOVERED_WRITES_VALID}
UNRECOVERED_WRITES_VALID = $00000002;
{$EXTERNALSYM UNRECOVERED_WRITES_VALID}
RECOVERED_READS_VALID = $00000004;
{$EXTERNALSYM RECOVERED_READS_VALID}
UNRECOVERED_READS_VALID = $00000008;
{$EXTERNALSYM UNRECOVERED_READS_VALID}
WRITE_COMPRESSION_INFO_VALID = $00000010;
{$EXTERNALSYM WRITE_COMPRESSION_INFO_VALID}
READ_COMPRESSION_INFO_VALID = $00000020;
{$EXTERNALSYM READ_COMPRESSION_INFO_VALID}
type
PTAPE_GET_STATISTICS = ^TAPE_GET_STATISTICS;
{$EXTERNALSYM PTAPE_GET_STATISTICS}
_TAPE_GET_STATISTICS = record
Operation: DWORD;
end;
{$EXTERNALSYM _TAPE_GET_STATISTICS}
TAPE_GET_STATISTICS = _TAPE_GET_STATISTICS;
{$EXTERNALSYM TAPE_GET_STATISTICS}
TTapeGetStatistics = TAPE_GET_STATISTICS;
PTapeGetStatistics = PTAPE_GET_STATISTICS;
const
TAPE_RETURN_STATISTICS = 0;
{$EXTERNALSYM TAPE_RETURN_STATISTICS}
TAPE_RETURN_ENV_INFO = 1;
{$EXTERNALSYM TAPE_RETURN_ENV_INFO}
TAPE_RESET_STATISTICS = 2;
{$EXTERNALSYM TAPE_RESET_STATISTICS}
//
// IOCTL_STORAGE_GET_MEDIA_TYPES_EX will return an array of DEVICE_MEDIA_INFO
// structures, one per supported type, embedded in the GET_MEDIA_TYPES struct.
//
const
//
// Following are defined in ntdddisk.h in the MEDIA_TYPE enum
//
// 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
// F3_120M_512, // 3.5", 120M Floppy
// F3_640_512, // 3.5" , 640KB, 512 bytes/sector
// F5_640_512, // 5.25", 640KB, 512 bytes/sector
// F5_720_512, // 5.25", 720KB, 512 bytes/sector
// F3_1Pt2_512, // 3.5" , 1.2Mb, 512 bytes/sector
// F3_1Pt23_1024, // 3.5" , 1.23Mb, 1024 bytes/sector
// F5_1Pt23_1024, // 5.25", 1.23MB, 1024 bytes/sector
// F3_128Mb_512, // 3.5" MO 128Mb 512 bytes/sector
// F3_230Mb_512, // 3.5" MO 230Mb 512 bytes/sector
// F8_256_128, // 8", 256KB, 128 bytes/sector
//
DDS_4mm = $20; // Tape - DAT DDS1,2,... (all vendors)
MiniQic = $21; // Tape - miniQIC Tape
Travan = $22; // Tape - Travan TR-1,2,3,...
QIC = $23; // Tape - QIC
MP_8mm = $24; // Tape - 8mm Exabyte Metal Particle
AME_8mm = $25; // Tape - 8mm Exabyte Advanced Metal Evap
AIT1_8mm = $26; // Tape - 8mm Sony AIT1
DLT = $27; // Tape - DLT Compact IIIxt, IV
NCTP = $28; // Tape - Philips NCTP
IBM_3480 = $29; // Tape - IBM 3480
IBM_3490E = $2A; // Tape - IBM 3490E
IBM_Magstar_3590 = $2B; // Tape - IBM Magstar 3590
IBM_Magstar_MP = $2C; // Tape - IBM Magstar MP
STK_DATA_D3 = $2D; // Tape - STK Data D3
SONY_DTF = $2E; // Tape - Sony DTF
DV_6mm = $2F; // Tape - 6mm Digital Video
DMI = $30; // Tape - Exabyte DMI and compatibles
SONY_D2 = $31; // Tape - Sony D2S and D2L
CLEANER_CARTRIDGE = $32; // Cleaner - All Drive types that support Drive Cleaners
CD_ROM = $33; // Opt_Disk - CD
CD_R = $34; // Opt_Disk - CD-Recordable (Write Once)
CD_RW = $35; // Opt_Disk - CD-Rewriteable
DVD_ROM = $36; // Opt_Disk - DVD-ROM
DVD_R = $37; // Opt_Disk - DVD-Recordable (Write Once)
DVD_RW = $38; // Opt_Disk - DVD-Rewriteable
MO_3_RW = $39; // Opt_Disk - 3.5" Rewriteable MO Disk
MO_5_WO = $3A; // Opt_Disk - MO 5.25" Write Once
MO_5_RW = $3B; // Opt_Disk - MO 5.25" Rewriteable (not LIMDOW)
MO_5_LIMDOW = $3C; // Opt_Disk - MO 5.25" Rewriteable (LIMDOW)
PC_5_WO = $3D; // Opt_Disk - Phase Change 5.25" Write Once Optical
PC_5_RW = $3E; // Opt_Disk - Phase Change 5.25" Rewriteable
PD_5_RW = $3F; // Opt_Disk - PhaseChange Dual Rewriteable
ABL_5_WO = $40; // Opt_Disk - Ablative 5.25" Write Once Optical
PINNACLE_APEX_5_RW = $41; // Opt_Disk - Pinnacle Apex 4.6GB Rewriteable Optical
SONY_12_WO = $42; // Opt_Disk - Sony 12" Write Once
PHILIPS_12_WO = $43; // Opt_Disk - Philips/LMS 12" Write Once
HITACHI_12_WO = $44; // Opt_Disk - Hitachi 12" Write Once
CYGNET_12_WO = $45; // Opt_Disk - Cygnet/ATG 12" Write Once
KODAK_14_WO = $46; // Opt_Disk - Kodak 14" Write Once
MO_NFR_525 = $47; // Opt_Disk - Near Field Recording (Terastor)
NIKON_12_RW = $48; // Opt_Disk - Nikon 12" Rewriteable
IOMEGA_ZIP = $49; // Mag_Disk - Iomega Zip
IOMEGA_JAZ = $4A; // Mag_Disk - Iomega Jaz
SYQUEST_EZ135 = $4B; // Mag_Disk - Syquest EZ135
SYQUEST_EZFLYER = $4C; // Mag_Disk - Syquest EzFlyer
SYQUEST_SYJET = $4D; // Mag_Disk - Syquest SyJet
AVATAR_F2 = $4E; // Mag_Disk - 2.5" Floppy
MP2_8mm = $4F; // Tape - 8mm Hitachi
DST_S = $50; // Ampex DST Small Tapes
DST_M = $51; // Ampex DST Medium Tapes
DST_L = $52; // Ampex DST Large Tapes
VXATape_1 = $53; // Ecrix 8mm Tape
VXATape_2 = $54; // Ecrix 8mm Tape
STK_EAGLE = $55; // STK Eagle
LTO_Ultrium = $56; // IBM, HP, Seagate LTO Ultrium
LTO_Accelis = $57; // IBM, HP, Seagate LTO Accelis
type
STORAGE_MEDIA_TYPE = DWORD;
{$EXTERNALSYM STORAGE_MEDIA_TYPE}
PSTORAGE_MEDIA_TYPE = ^STORAGE_MEDIA_TYPE;
{$EXTERNALSYM PSTORAGE_MEDIA_TYPE}
TStorageMediaType = STORAGE_MEDIA_TYPE;
PStorageMediaType = ^TStorageMediaType;
const
MEDIA_ERASEABLE = $00000001;
{$EXTERNALSYM MEDIA_ERASEABLE}
MEDIA_WRITE_ONCE = $00000002;
{$EXTERNALSYM MEDIA_WRITE_ONCE}
MEDIA_READ_ONLY = $00000004;
{$EXTERNALSYM MEDIA_READ_ONLY}
MEDIA_READ_WRITE = $00000008;
{$EXTERNALSYM MEDIA_READ_WRITE}
MEDIA_WRITE_PROTECTED = $00000100;
{$EXTERNALSYM MEDIA_WRITE_PROTECTED}
MEDIA_CURRENTLY_MOUNTED = DWORD($80000000);
{$EXTERNALSYM MEDIA_CURRENTLY_MOUNTED}
//
// Define the different storage bus types
// Bus types below 128 (0x80) are reserved for Microsoft use
//
const
BusTypeUnknown = 0;
BusTypeScsi = 1;
BusTypeAtapi = 2;
BusTypeAta = 3;
BusType1394 = 4;
BusTypeSsa = 5;
BusTypeFibre = 6;
BusTypeUsb = 7;
BusTypeRAID = 8;
BusTypeMaxReserved = $7F;
type
STORAGE_BUS_TYPE = DWORD;
{$EXTERNALSYM STORAGE_BUS_TYPE}
PSTORAGE_BUS_TYPE = ^STORAGE_BUS_TYPE;
{$EXTERNALSYM PSTORAGE_BUS_TYPE}
TStorageBusType = STORAGE_BUS_TYPE;
PStorageBusType = PSTORAGE_BUS_TYPE;
TDMIDiskInfo = record
Cylinders: LARGE_INTEGER;
MediaType: STORAGE_MEDIA_TYPE;
TracksPerCylinder: DWORD;
SectorsPerTrack: DWORD;
BytesPerSector: DWORD;
NumberMediaSides: DWORD;
MediaCharacteristics: DWORD; // Bitmask of MEDIA_XXX values.
end;
TDMIRemovableDiskInfo = record
Cylinders: LARGE_INTEGER;
MediaType: STORAGE_MEDIA_TYPE;
TracksPerCylinder: DWORD;
SectorsPerTrack: DWORD;
BytesPerSector: DWORD;
NumberMediaSides: DWORD;
MediaCharacteristics: DWORD; // Bitmask of MEDIA_XXX values.
end;
TDMITapeInfo = record
MediaType: STORAGE_MEDIA_TYPE;
MediaCharacteristics: DWORD; // Bitmask of MEDIA_XXX values.
CurrentBlockSize: DWORD;
BusType: STORAGE_BUS_TYPE;
//
// Bus specific information describing the medium supported.
//
case Integer of {BusSpecificData}
0: ( {ScsiInformation}
MediumType: BYTE;
DensityCode: BYTE);
end;
PDEVICE_MEDIA_INFO = ^DEVICE_MEDIA_INFO;
{$EXTERNALSYM PDEVICE_MEDIA_INFO}
_DEVICE_MEDIA_INFO = record
case Integer of
0: (DiskInfo: TDMIDiskInfo);
1: (RemovableDiskInfo: TDMIRemovableDiskInfo);
2: (TapeInfo: TDMITapeInfo);
end;
{$EXTERNALSYM _DEVICE_MEDIA_INFO}
DEVICE_MEDIA_INFO = _DEVICE_MEDIA_INFO;
{$EXTERNALSYM DEVICE_MEDIA_INFO}
TDeviceMediaInfo = DEVICE_MEDIA_INFO;
PDeviceMediaInfo = PDEVICE_MEDIA_INFO;
PGET_MEDIA_TYPES = ^GET_MEDIA_TYPES;
{$EXTERNALSYM PGET_MEDIA_TYPES}
_GET_MEDIA_TYPES = record
DeviceType: DWORD; // FILE_DEVICE_XXX values
MediaInfoCount: DWORD;
MediaInfo: array [0..0] of DEVICE_MEDIA_INFO;
end;
{$EXTERNALSYM _GET_MEDIA_TYPES}
GET_MEDIA_TYPES = _GET_MEDIA_TYPES;
{$EXTERNALSYM GET_MEDIA_TYPES}
TGetMediaTypes = GET_MEDIA_TYPES;
PGetMediaTypes = PGET_MEDIA_TYPES;
//
// IOCTL_STORAGE_PREDICT_FAILURE
//
// input - none
//
// output - STORAGE_PREDICT_FAILURE structure
// PredictFailure returns zero if no failure predicted and non zero
// if a failure is predicted.
//
// VendorSpecific returns 512 bytes of vendor specific information
// if a failure is predicted
//
PSTORAGE_PREDICT_FAILURE = ^STORAGE_PREDICT_FAILURE;
{$EXTERNALSYM PSTORAGE_PREDICT_FAILURE}
_STORAGE_PREDICT_FAILURE = record
PredictFailure: DWORD;
VendorSpecific: array [0..511] of BYTE;
end;
{$EXTERNALSYM _STORAGE_PREDICT_FAILURE}
STORAGE_PREDICT_FAILURE = _STORAGE_PREDICT_FAILURE;
{$EXTERNALSYM STORAGE_PREDICT_FAILURE}
TStoragePredictFailure = STORAGE_PREDICT_FAILURE;
PStoragePredictFailure = PSTORAGE_PREDICT_FAILURE;
//
// IoControlCode values for disk devices.
//
const
IOCTL_DISK_BASE = FILE_DEVICE_DISK;
{$EXTERNALSYM IOCTL_DISK_BASE}
IOCTL_DISK_GET_DRIVE_GEOMETRY = (
(IOCTL_DISK_BASE shl 16) or (FILE_ANY_ACCESS shl 14) or
($0000 shl 2) or METHOD_BUFFERED);
{$EXTERNALSYM IOCTL_DISK_GET_DRIVE_GEOMETRY}
IOCTL_DISK_GET_PARTITION_INFO = (
(IOCTL_DISK_BASE shl 16) or (FILE_READ_ACCESS shl 14) or
($0001 shl 2) or METHOD_BUFFERED);
{$EXTERNALSYM IOCTL_DISK_GET_PARTITION_INFO}
IOCTL_DISK_SET_PARTITION_INFO = (
(IOCTL_DISK_BASE shl 16) or ((FILE_READ_ACCESS or FILE_WRITE_ACCESS) shl 14) or
($0002 shl 2) or METHOD_BUFFERED);
{$EXTERNALSYM IOCTL_DISK_SET_PARTITION_INFO}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -