⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 winioctl.pas

📁 详细Windows API大全有关知识以及相关问题
💻 PAS
📖 第 1 页 / 共 5 页
字号:
    EndTime: LARGE_INTEGER;
    VirtualAddress: PVOID;
    NumberOfBytes: DWORD;
    DeviceNumber: BYTE;
    ReadRequest: ByteBool;
  end;
  {$EXTERNALSYM _DISK_RECORD}
  DISK_RECORD = _DISK_RECORD;
  {$EXTERNALSYM DISK_RECORD}
  TDiskRecord = DISK_RECORD;
  PDiskRecord = PDISK_RECORD;

//
// The following structure is exchanged on an IOCTL_DISK_LOG request.
// Not all fields are valid with each function type.
//

  PDISK_LOGGING = ^DISK_LOGGING;
  {$EXTERNALSYM PDISK_LOGGING}
  _DISK_LOGGING = record
    Function_: BYTE;
    BufferAddress: PVOID;
    BufferSize: DWORD;
  end;
  {$EXTERNALSYM _DISK_LOGGING}
  DISK_LOGGING = _DISK_LOGGING;
  {$EXTERNALSYM DISK_LOGGING}
  TDiskLogging = DISK_LOGGING;
  PDiskLogging = PDISK_LOGGING;

//
// Disk logging functions
//
// Start disk logging. Only the Function and BufferSize fields are valid.
//

const
  DISK_LOGGING_START = 0;
  {$EXTERNALSYM DISK_LOGGING_START}

//
// Stop disk logging. Only the Function field is valid.
//

  DISK_LOGGING_STOP = 1;
  {$EXTERNALSYM DISK_LOGGING_STOP}

//
// Return disk log. All fields are valid. Data will be copied from internal
// buffer to buffer specified for the number of bytes requested.
//

  DISK_LOGGING_DUMP = 2;
  {$EXTERNALSYM DISK_LOGGING_DUMP}

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

  DISK_BINNING = 3;
  {$EXTERNALSYM DISK_BINNING}

//
// Bin types
//

type
  _BIN_TYPES = (RequestSize, RequestLocation);
  {$EXTERNALSYM _BIN_TYPES}
  BIN_TYPES = _BIN_TYPES;
  {$EXTERNALSYM BIN_TYPES}
  TBinTypes = _BIN_TYPES;

//
// Bin ranges
//

  PBIN_RANGE = ^BIN_RANGE;
  {$EXTERNALSYM PBIN_RANGE}
  _BIN_RANGE = record
    StartValue: LARGE_INTEGER;
    Length: LARGE_INTEGER;
  end;
  {$EXTERNALSYM _BIN_RANGE}
  BIN_RANGE = _BIN_RANGE;
  {$EXTERNALSYM BIN_RANGE}
  TBinRange = BIN_RANGE;
  PBinRange = PBIN_RANGE;

//
// Bin definition
//

  PPERF_BIN = ^PERF_BIN;
  {$EXTERNALSYM PPERF_BIN}
  _PERF_BIN = record
    NumberOfBins: DWORD;
    TypeOfBin: DWORD;
    BinsRanges: array [0..0] of BIN_RANGE;
  end;
  {$EXTERNALSYM _PERF_BIN}
  PERF_BIN = _PERF_BIN;
  {$EXTERNALSYM PERF_BIN}
  TPerfBin = PERF_BIN;
  PPerfBin = PPERF_BIN;

//
// Bin count
//

  PBIN_COUNT = ^BIN_COUNT;
  {$EXTERNALSYM PBIN_COUNT}
  _BIN_COUNT = record
    BinRange: BIN_RANGE;
    BinCount: DWORD;
  end;
  {$EXTERNALSYM _BIN_COUNT}
  BIN_COUNT = _BIN_COUNT;
  {$EXTERNALSYM BIN_COUNT}
  TBinCount = BIN_COUNT;
  PBinCount = PBIN_COUNT;

//
// Bin results
//

  PBIN_RESULTS = ^BIN_RESULTS;
  {$EXTERNALSYM PBIN_RESULTS}
  _BIN_RESULTS = record
    NumberOfBins: DWORD;
    BinCounts: array [0..0] of BIN_COUNT;
  end;
  {$EXTERNALSYM _BIN_RESULTS}
  BIN_RESULTS = _BIN_RESULTS;
  {$EXTERNALSYM BIN_RESULTS}
  TBinResults = BIN_RESULTS;
  PBinResults = PBIN_RESULTS;

//
// Data structures for SMART drive fault prediction.
//
// GETVERSIONINPARAMS contains the data returned from the
// Get Driver Version function.
//

//#include <pshpack1.h>

  LPGETVERSIONINPARAMS = ^GETVERSIONINPARAMS;
  {$EXTERNALSYM LPGETVERSIONINPARAMS}
  _GETVERSIONINPARAMS = packed record
    bVersion: BYTE;                    // Binary driver version.
    bRevision: BYTE;                   // Binary driver revision.
    bReserved: BYTE;                   // Not used.
    bIDEDeviceMap: BYTE;               // Bit map of IDE devices.
    fCapabilities: DWORD;              // Bit mask of driver capabilities.
    dwReserved: array [0..3] of DWORD; // For future use.
  end;
  {$EXTERNALSYM _GETVERSIONINPARAMS}
  GETVERSIONINPARAMS = _GETVERSIONINPARAMS;
  {$EXTERNALSYM GETVERSIONINPARAMS}
  TGetVersionInParams = GETVERSIONINPARAMS;
  PGetVersionInParams = LPGETVERSIONINPARAMS;

//#include <poppack.h>

//
// Bits returned in the fCapabilities member of GETVERSIONINPARAMS
//

const
  CAP_ATA_ID_CMD   = 1;         // ATA ID command supported
  {$EXTERNALSYM CAP_ATA_ID_CMD}
  CAP_ATAPI_ID_CMD = 2;         // ATAPI ID command supported
  {$EXTERNALSYM CAP_ATAPI_ID_CMD}
  CAP_SMART_CMD    = 4;         // SMART commannds supported
  {$EXTERNALSYM CAP_SMART_CMD}

//
// IDE registers
//

//#include <pshpack1.h>

type
  LPIDEREGS = ^IDEREGS;
  {$EXTERNALSYM LPIDEREGS}
  _IDEREGS = packed record
    bFeaturesReg: BYTE;     // Used for specifying SMART "commands".
    bSectorCountReg: BYTE;  // IDE sector count register
    bSectorNumberReg: BYTE; // IDE sector number register
    bCylLowReg: BYTE;       // IDE low order cylinder value
    bCylHighReg: BYTE;      // IDE high order cylinder value
    bDriveHeadReg: BYTE;    // IDE drive/head register
    bCommandReg: BYTE;      // Actual IDE command.
    bReserved: BYTE;        // reserved for future use.  Must be zero.
  end;
  {$EXTERNALSYM _IDEREGS}
  IDEREGS = _IDEREGS;
  {$EXTERNALSYM IDEREGS}
  TIdeRegs = IDEREGS;
  PIdeRegs = LPIDEREGS;

//#include <poppack.h>

//
// Valid values for the bCommandReg member of IDEREGS.
//

const
  ATAPI_ID_CMD = $A1;       // Returns ID sector for ATAPI.
  {$EXTERNALSYM ATAPI_ID_CMD}
  ID_CMD       = $EC;       // Returns ID sector for ATA.
  {$EXTERNALSYM ID_CMD}
  SMART_CMD    = $B0;       // Performs SMART cmd.
                            // Requires valid bFeaturesReg,
                            // bCylLowReg, and bCylHighReg
  {$EXTERNALSYM SMART_CMD}

//
// Cylinder register defines for SMART command
//

  SMART_CYL_LOW = $4F;
  {$EXTERNALSYM SMART_CYL_LOW}
  SMART_CYL_HI  = $C2;
  {$EXTERNALSYM SMART_CYL_HI}


//
// SENDCMDINPARAMS contains the input parameters for the
// Send Command to Drive function.
//

//#include <pshpack1.h>

type
  LPSENDCMDINPARAMS = ^SENDCMDINPARAMS;
  {$EXTERNALSYM LPSENDCMDINPARAMS}
  _SENDCMDINPARAMS = packed record
    cBufferSize: DWORD;   // Buffer size in bytes
    irDriveRegs: IDEREGS; // Structure with drive register values.
    bDriveNumber: BYTE;   // Physical drive number to send
                          // command to (0,1,2,3).
    bReserved: array [0..2] of BYTE;   // Reserved for future expansion.
    dwReserved: array [0..3] of DWORD; // For future use.
    bBuffer: array [0..0] of BYTE;     // Input buffer.
  end;
  {$EXTERNALSYM _SENDCMDINPARAMS}
  SENDCMDINPARAMS = _SENDCMDINPARAMS;
  {$EXTERNALSYM SENDCMDINPARAMS}
  TSendCmdInParams = SENDCMDINPARAMS;
  PSendCmdInParams = LPSENDCMDINPARAMS;

//#include <poppack.h>

//
// Status returned from driver
//

//#include <pshpack1.h>

  LPDRIVERSTATUS = ^DRIVERSTATUS;
  {$EXTERNALSYM LPDRIVERSTATUS}
  _DRIVERSTATUS = packed record
    bDriverError: BYTE; // Error code from driver,
                        // or 0 if no error.
    bIDEError: BYTE;    // Contents of IDE Error register.
                        // Only valid when bDriverError
                        // is SMART_IDE_ERROR.
    bReserved: array [0..1] of BYTE;   // Reserved for future expansion.
    dwReserved: array [0..1] of DWORD; // Reserved for future expansion.
  end;
  {$EXTERNALSYM _DRIVERSTATUS}
  DRIVERSTATUS = _DRIVERSTATUS;
  {$EXTERNALSYM DRIVERSTATUS}
  TDriverStatus = DRIVERSTATUS;
  PDriverStatus = LPDRIVERSTATUS;

//#include <poppack.h>

//
// bDriverError values
//

const
  SMART_NO_ERROR         = 0; // No error
  {$EXTERNALSYM SMART_NO_ERROR}
  SMART_IDE_ERROR        = 1; // Error from IDE controller
  {$EXTERNALSYM SMART_IDE_ERROR}
  SMART_INVALID_FLAG     = 2; // Invalid command flag
  {$EXTERNALSYM SMART_INVALID_FLAG}
  SMART_INVALID_COMMAND  = 3; // Invalid command byte
  {$EXTERNALSYM SMART_INVALID_COMMAND}
  SMART_INVALID_BUFFER   = 4; // Bad buffer (null, invalid addr..)
  {$EXTERNALSYM SMART_INVALID_BUFFER}
  SMART_INVALID_DRIVE    = 5; // Drive number not valid
  {$EXTERNALSYM SMART_INVALID_DRIVE}
  SMART_INVALID_IOCTL    = 6; // Invalid IOCTL
  {$EXTERNALSYM SMART_INVALID_IOCTL}
  SMART_ERROR_NO_MEM     = 7; // Could not lock user's buffer
  {$EXTERNALSYM SMART_ERROR_NO_MEM}
  SMART_INVALID_REGISTER = 8; // Some IDE Register not valid
  {$EXTERNALSYM SMART_INVALID_REGISTER}
  SMART_NOT_SUPPORTED    = 9; // Invalid cmd flag set
  {$EXTERNALSYM SMART_NOT_SUPPORTED}
  SMART_NO_IDE_DEVICE    = 10; // Cmd issued to device not present
  {$EXTERNALSYM SMART_NO_IDE_DEVICE}
                               // although drive number is valid

//#include <pshpack1.h>

type
  LPSENDCMDOUTPARAMS = ^SENDCMDOUTPARAMS;
  {$EXTERNALSYM LPSENDCMDOUTPARAMS}
  _SENDCMDOUTPARAMS = packed record
    cBufferSize: DWORD;            // Size of bBuffer in bytes
    DriverStatus: DRIVERSTATUS;    // Driver status structure.
    bBuffer: array [0..0] of BYTE; // Buffer of arbitrary length in which to store the data read from the                                                                                  // drive.
  end;
  {$EXTERNALSYM _SENDCMDOUTPARAMS}
  SENDCMDOUTPARAMS = _SENDCMDOUTPARAMS;
  {$EXTERNALSYM SENDCMDOUTPARAMS}
  TSendCmdOutParams = SENDCMDOUTPARAMS;
  PSendCmdOutParams = LPSENDCMDOUTPARAMS;

//#include <poppack.h>

const
  READ_ATTRIBUTE_BUFFER_SIZE = 512;
  {$EXTERNALSYM READ_ATTRIBUTE_BUFFER_SIZE}
  IDENTIFY_BUFFER_SIZE       = 512;
  {$EXTERNALSYM IDENTIFY_BUFFER_SIZE}
  READ_THRESHOLD_BUFFER_SIZE = 512;
  {$EXTERNALSYM READ_THRESHOLD_BUFFER_SIZE}

//
// Feature register defines for SMART "sub commands"
//

  READ_ATTRIBUTES             = $D0;
  {$EXTERNALSYM READ_ATTRIBUTES}
  READ_THRESHOLDS             = $D1;
  {$EXTERNALSYM READ_THRESHOLDS}
  ENABLE_DISABLE_AUTOSAVE     = $D2;
  {$EXTERNALSYM ENABLE_DISABLE_AUTOSAVE}
  SAVE_ATTRIBUTE_VALUES       = $D3;
  {$EXTERNALSYM SAVE_ATTRIBUTE_VALUES}
  EXECUTE_OFFLINE_DIAGS       = $D4;
  {$EXTERNALSYM EXECUTE_OFFLINE_DIAGS}
  ENABLE_SMART                = $D8;
  {$EXTERNALSYM ENABLE_SMART}
  DISABLE_SMART               = $D9;
  {$EXTERNALSYM DISABLE_SMART}
  RETURN_SMART_STATUS         = $DA;
  {$EXTERNALSYM RETURN_SMART_STATUS}
  ENABLE_DISABLE_AUTO_OFFLINE = $DB;
  {$EXTERNALSYM ENABLE_DISABLE_AUTO_OFFLINE}

  IOCTL_CHANGER_BASE = FILE_DEVICE_CHANGER;
  {$EXTERNALSYM IOCTL_CHANGER_BASE}

  IOCTL_CHANGER_GET_PARAMETERS = (
    (IOCTL_CHANGER_BASE shl 16) or (FILE_READ_ACCESS shl 14) or
    ($0000 shl 2) or METHOD_BUFFERED);
  {$EXTERNALSYM IOCTL_CHANGER_GET_PARAMETERS}

  IOCTL_CHANGER_GET_STATUS = (
    (IOCTL_CHANGER_BASE shl 16) or (FILE_READ_ACCESS shl 14) or
    ($0001 shl 2) or METHOD_BUFFERED)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -