📄 jwawinioctl.pas
字号:
IOCTL_STORAGE_BASE = FILE_DEVICE_MASS_STORAGE;
{$EXTERNALSYM IOCTL_STORAGE_BASE}
//
// The following device control codes are common for all class drivers. They
// should be used in place of the older IOCTL_DISK, IOCTL_CDROM and IOCTL_TAPE
// common codes
//
const
IOCTL_STORAGE_CHECK_VERIFY = (
(IOCTL_STORAGE_BASE shl 16) or (FILE_READ_ACCESS shl 14) or
($0200 shl 2) or METHOD_BUFFERED);
{$EXTERNALSYM IOCTL_STORAGE_CHECK_VERIFY}
IOCTL_STORAGE_CHECK_VERIFY2 = (
(IOCTL_STORAGE_BASE shl 16) or (FILE_ANY_ACCESS shl 14) or
($0200 shl 2) or METHOD_BUFFERED);
{$EXTERNALSYM IOCTL_STORAGE_CHECK_VERIFY2}
IOCTL_STORAGE_MEDIA_REMOVAL = (
(IOCTL_STORAGE_BASE shl 16) or (FILE_READ_ACCESS shl 14) or
($0201 shl 2) or METHOD_BUFFERED);
{$EXTERNALSYM IOCTL_STORAGE_MEDIA_REMOVAL}
IOCTL_STORAGE_EJECT_MEDIA = (
(IOCTL_STORAGE_BASE shl 16) or (FILE_READ_ACCESS shl 14) or
($0202 shl 2) or METHOD_BUFFERED);
{$EXTERNALSYM IOCTL_STORAGE_EJECT_MEDIA}
IOCTL_STORAGE_LOAD_MEDIA = (
(IOCTL_STORAGE_BASE shl 16) or (FILE_READ_ACCESS shl 14) or
($0203 shl 2) or METHOD_BUFFERED);
{$EXTERNALSYM IOCTL_STORAGE_LOAD_MEDIA}
IOCTL_STORAGE_LOAD_MEDIA2 = (
(IOCTL_STORAGE_BASE shl 16) or (FILE_ANY_ACCESS shl 14) or
($0203 shl 2) or METHOD_BUFFERED);
{$EXTERNALSYM IOCTL_STORAGE_LOAD_MEDIA2}
IOCTL_STORAGE_RESERVE = (
(IOCTL_STORAGE_BASE shl 16) or (FILE_READ_ACCESS shl 14) or
($0204 shl 2) or METHOD_BUFFERED);
{$EXTERNALSYM IOCTL_STORAGE_RESERVE}
IOCTL_STORAGE_RELEASE = (
(IOCTL_STORAGE_BASE shl 16) or (FILE_READ_ACCESS shl 14) or
($0205 shl 2) or METHOD_BUFFERED);
{$EXTERNALSYM IOCTL_STORAGE_RELEASE}
IOCTL_STORAGE_FIND_NEW_DEVICES = (
(IOCTL_STORAGE_BASE shl 16) or (FILE_READ_ACCESS shl 14) or
($0206 shl 2) or METHOD_BUFFERED);
{$EXTERNALSYM IOCTL_STORAGE_FIND_NEW_DEVICES}
IOCTL_STORAGE_EJECTION_CONTROL = (
(IOCTL_STORAGE_BASE shl 16) or (FILE_ANY_ACCESS shl 14) or
($0250 shl 2) or METHOD_BUFFERED);
{$EXTERNALSYM IOCTL_STORAGE_EJECTION_CONTROL}
IOCTL_STORAGE_MCN_CONTROL = (
(IOCTL_STORAGE_BASE shl 16) or (FILE_ANY_ACCESS shl 14) or
($0251 shl 2) or METHOD_BUFFERED);
{$EXTERNALSYM IOCTL_STORAGE_MCN_CONTROL}
IOCTL_STORAGE_GET_MEDIA_TYPES = (
(IOCTL_STORAGE_BASE shl 16) or (FILE_ANY_ACCESS shl 14) or
($0300 shl 2) or METHOD_BUFFERED);
{$EXTERNALSYM IOCTL_STORAGE_GET_MEDIA_TYPES}
IOCTL_STORAGE_GET_MEDIA_TYPES_EX = (
(IOCTL_STORAGE_BASE shl 16) or (FILE_ANY_ACCESS shl 14) or
($0301 shl 2) or METHOD_BUFFERED);
{$EXTERNALSYM IOCTL_STORAGE_GET_MEDIA_TYPES_EX}
IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER = (
(IOCTL_STORAGE_BASE shl 16) or (FILE_ANY_ACCESS shl 14) or
($0304 shl 2) or METHOD_BUFFERED);
{$EXTERNALSYM IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER}
IOCTL_STORAGE_GET_HOTPLUG_INFO = (
(IOCTL_STORAGE_BASE shl 16) or (FILE_ANY_ACCESS shl 14) or
($0305 shl 2) or METHOD_BUFFERED);
{$EXTERNALSYM IOCTL_STORAGE_GET_HOTPLUG_INFO}
IOCTL_STORAGE_SET_HOTPLUG_INFO = (
(IOCTL_STORAGE_BASE shl 16) or ((FILE_READ_ACCESS or FILE_WRITE_ACCESS) shl 14) or
($0306 shl 2) or METHOD_BUFFERED);
{$EXTERNALSYM IOCTL_STORAGE_SET_HOTPLUG_INFO}
IOCTL_STORAGE_RESET_BUS = (
(IOCTL_STORAGE_BASE shl 16) or (FILE_READ_ACCESS shl 14) or
($0400 shl 2) or METHOD_BUFFERED);
{$EXTERNALSYM IOCTL_STORAGE_RESET_BUS}
IOCTL_STORAGE_RESET_DEVICE = (
(IOCTL_STORAGE_BASE shl 16) or (FILE_READ_ACCESS shl 14) or
($0401 shl 2) or METHOD_BUFFERED);
{$EXTERNALSYM IOCTL_STORAGE_RESET_DEVICE}
IOCTL_STORAGE_BREAK_RESERVATION = (
(IOCTL_STORAGE_BASE shl 16) or (FILE_READ_ACCESS shl 14) or
($0405 shl 2) or METHOD_BUFFERED);
{$EXTERNALSYM IOCTL_STORAGE_BREAK_RESERVATION}
IOCTL_STORAGE_GET_DEVICE_NUMBER = (
(IOCTL_STORAGE_BASE shl 16) or (FILE_ANY_ACCESS shl 14) or
($0420 shl 2) or METHOD_BUFFERED);
{$EXTERNALSYM IOCTL_STORAGE_GET_DEVICE_NUMBER}
IOCTL_STORAGE_PREDICT_FAILURE = (
(IOCTL_STORAGE_BASE shl 16) or (FILE_ANY_ACCESS shl 14) or
($0440 shl 2) or METHOD_BUFFERED);
{$EXTERNALSYM IOCTL_STORAGE_PREDICT_FAILURE}
//
// These ioctl codes are obsolete. They are defined here to avoid resuing them
// and to allow class drivers to respond to them more easily.
//
OBSOLETE_IOCTL_STORAGE_RESET_BUS = (
(IOCTL_STORAGE_BASE shl 16) or ((FILE_READ_ACCESS or FILE_WRITE_ACCESS) shl 14) or
($0400 shl 2) or METHOD_BUFFERED);
{$EXTERNALSYM OBSOLETE_IOCTL_STORAGE_RESET_BUS}
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_HOTPLUG_INFO
//
type
PSTORAGE_HOTPLUG_INFO = ^STORAGE_HOTPLUG_INFO;
{$EXTERNALSYM PSTORAGE_HOTPLUG_INFO}
_STORAGE_HOTPLUG_INFO = record
Size: DWORD; // version
MediaRemovable: BOOLEAN; // ie. zip, jaz, cdrom, mo, etc. vs hdd
MediaHotplug: BOOLEAN; // ie. does the device succeed a lock even though its not lockable media?
DeviceHotplug: BOOLEAN; // ie. 1394, USB, etc.
WriteCacheEnableOverride: BOOLEAN; // This field should not be relied upon because it is no longer used
end;
{$EXTERNALSYM _STORAGE_HOTPLUG_INFO}
STORAGE_HOTPLUG_INFO = _STORAGE_HOTPLUG_INFO;
{$EXTERNALSYM STORAGE_HOTPLUG_INFO}
TStorageHotplugInfo = STORAGE_HOTPLUG_INFO;
PStorageHotplugInfo = PSTORAGE_HOTPLUG_INFO;
//
// 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;
//
// This is the format of TARGET_DEVICE_CUSTOM_NOTIFICATION.CustomDataBuffer
// passed to applications by the classpnp autorun code (via IoReportTargetDeviceChangeAsynchronous).
//
_CLASS_MEDIA_CHANGE_CONTEXT = record
MediaChangeCount: DWORD;
NewState: DWORD; // see MEDIA_CHANGE_DETECTION_STATE enum in classpnp.h in DDK
end;
{$EXTERNALSYM _CLASS_MEDIA_CHANGE_CONTEXT}
CLASS_MEDIA_CHANGE_CONTEXT = _CLASS_MEDIA_CHANGE_CONTEXT;
{$EXTERNALSYM CLASS_MEDIA_CHANGE_CONTEXT}
PCLASS_MEDIA_CHANGE_CONTEXT = ^CLASS_MEDIA_CHANGE_CONTEXT;
{$EXTERNALSYM PCLASS_MEDIA_CHANGE_CONTEXT}
TClassMediaChangeContext = CLASS_MEDIA_CHANGE_CONTEXT;
PClassMediaChangeContext = PCLASS_MEDIA_CHANGE_CONTEXT;
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
// F3_200Mb_512, // 3.5", 200M Floppy (HiFD)
//
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 AIT
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -