fdrawcmd.sys API
  • Home
  •  
  • Main
    • Introduction
    • Download
    • Features
    • F.A.Q.
    • Links
  •  
  • API
    • Usage
    • IOCTLs
    • Structures

Structures

The following data structures are used by IOCTL requests:

FD_CMD_RESULT FDC result bytes
FD_CONFIGURE_PARAMS configuration settings
FD_DRIVE_STATUS drive status (ST3)
FD_DUMPREG_RESULT diagnostic register dump
FD_FDC_INFO controller information
FD_FORMAT_PARAMS format track layout
FD_ID_HEADER sector ID header
FD_INTERRUPT_STATUS seek/recalibrate result
FD_LOCK_PARAMS new setting lock status
FD_LOCK_RESULT previous setting lock status
FD_PERPENDICULAR_PARAMS perpendicular drive selection
FD_RAW_READ_PARAMS 2-drive raw track reading
FD_READ_ID_PARAMS read id parameters
FD_READ_WRITE_PARAMS read/write parameters
FD_RELATIVE_SEEK_PARAMS relative seek parameters
FD_SCAN_PARAMS track scan parameters
FD_SCAN_RESULT sectors found in scan
FD_SEEK_PARAMS absolute seek parameters
FD_SENSE_PARAMS sense drive status
FD_SPECIFY_PARAMS step rate and head load/unload times


FD_CMD_RESULT

typedef struct tagFD_CMD_RESULT
{
    BYTE st0, st1, st2;
    BYTE cyl, head, sector, size;
}
FD_CMD_RESULT, *PFD_CMD_RESULT;

See also: IOCTL_FD_GET_RESULT, IOCTL_FDCMD_READ_ID, etc.


FD_CONFIGURE_PARAMS

typedef struct tagFD_CONFIGURE_PARAMS
{
    BYTE eis_efifo_poll_fifothr;
    BYTE pretrk;
}
FD_CONFIGURE_PARAMS, *PFD_CONFIGURE_PARAMS;

See also: IOCTL_FDCMD_CONFIGURE


FD_DRIVE_STATUS

typedef struct tagFD_DRIVE_STATUS
{
    BYTE st3;
}
FD_DRIVE_STATUS, *PFD_DRIVE_STATUS;

See also: IOCTL_FDCMD_SENSE_DRIVE_STATUS


FD_DUMPREG_RESULT

typedef struct tagFD_DUMPREG_RESULT
{
    BYTE pcn0, pcn1, pcn2, pcn3;
    BYTE srt_hut;
    BYTE hlt_nd;
    BYTE sceot;
    BYTE lock_d0123_gap_wgate;
    BYTE eis_efifo_poll_fifothr;
    BYTE pretrk;
}
FD_DUMPREG_RESULT, *PFD_DUMPREG_RESULT;

See also: IOCTL_FDCMD_DUMPREG


FD_FDC_INFO

typedef struct tagFD_FDC_INFO
{
    BYTE ControllerType;
    BYTE SpeedsAvailable;
    BYTE BusType;
    ULONG BusNumber;
    ULONG ControllerNumber;
    ULONG PeripheralNumber;
}
FD_FDC_INFO, *PFD_FDC_INFO;

See also: IOCTL_FD_GET_FDC_INFO


FD_FORMAT_PARAMS

typedef struct tagFD_FORMAT_PARAMS
{
    BYTE flags;
    BYTE phead;
    BYTE size, sectors, gap, fill;
}
FD_FORMAT_PARAMS, *PFD_FORMAT_PARAMS;

See also: IOCTL_FDCMD_FORMAT_TRACK


FD_ID_HEADER

typedef struct tagFD_ID_HEADER
{
    BYTE cyl, head, sector, size;
}
FD_ID_HEADER, *PFD_ID_HEADER;

See also: IOCTL_FDCMD_FORMAT_TRACK, IOCTL_FD_SCAN_TRACK


FD_INTERRUPT_STATUS

typedef struct tagFD_INTERRUPT_STATUS
{
    BYTE st0;
    BYTE pcn;
}
FD_INTERRUPT_STATUS, *PFD_INTERRUPT_STATUS;

See also: IOCTL_FDCMD_SENSE_INT_STATUS, IOCTL_FDCMD_RECALIBRATE, IOCTL_FDCMD_RELATIVE_SEEK, IOCTL_FDCMD_SEEK


FD_LOCK_PARAMS

typedef struct tagFD_LOCK_PARAMS
{
    BYTE lock;
}
FD_LOCK_PARAMS, *PFD_LOCK_PARAMS;

See also: IOCTL_FDCMD_LOCK


FD_LOCK_RESULT

typedef struct tagFD_LOCK_RESULT
{
    BYTE lock;
}
FD_LOCK_RESULT, *PFD_LOCK_RESULT;

See also: IOCTL_FDCMD_LOCK


FD_PERPENDICULAR_PARAMS

typedef struct tagFD_PERPENDICULAR_PARAMS
{
    BYTE ow_ds_gap_wgate;
}
FD_PERPENDICULAR_PARAMS, *PFD_PERPENDICULAR_PARAMS;

See also: IOCTL_FDCMD_PERPENDICULAR_MODE


FD_RAW_READ_PARAMS

typedef struct tagFD_RAW_READ_PARAMS
{
    BYTE flags;
    BYTE head, size;
}
FD_RAW_READ_PARAMS, *FD_RAW_READ_PARAMS;


FD_READ_ID_PARAMS

typedef struct tagFD_READ_ID_PARAMS
{
    BYTE flags;
    BYTE head;
}
FD_READ_ID_PARAMS, *PFD_READ_ID_PARAMS;

See also: IOCTL_FDCMD_READ_ID


FD_READ_WRITE_PARAMS

typedef struct tagFD_READ_WRITE_PARAMS
{
    BYTE flags;
    BYTE phead;
    BYTE cyl, head, sector, size;
    BYTE eot, gap, datalen;
}
FD_READ_WRITE_PARAMS, *PFD_READ_WRITE_PARAMS;

See also: IOCTL_FDCMD_READ_DATA, IOCTL_FDCMD_WRITE_DATA, IOCTL_FDCMD_READ_DELETED_DATA, IOCTL_FDCMD_WRITE_DELETED_DATA


FD_RELATIVE_SEEK_PARAMS

typedef struct tagFD_RELATIVE_SEEK_PARAMS
{
    BYTE flags;
    BYTE head;
    BYTE offset;
}
FD_RELATIVE_SEEK_PARAMS, *PFD_RELATIVE_SEEK_PARAMS;

See also: IOCTL_FDCMD_RELATIVE_SEEK


FD_SCAN_PARAMS

typedef struct tagFD_SCAN_PARAMS
{
    BYTE flags;
    BYTE head;
}
FD_SCAN_PARAMS, *PFD_SCAN_PARAMS;

Note: versions <= 1.0.0.19 also included a cyl value for the cylinder to seek/scan. This has now been removed, with old-style calls supported only for backwards compatibility.

See also: IOCTL_FD_SCAN_TRACK


FD_SCAN_RESULT

typedef struct tagFD_SCAN_RESULT
{
    BYTE count;
    FD_ID_HEADER Header[];
}
FD_SCAN_RESULT, *PFD_SCAN_RESULT;

See also: IOCTL_FD_SCAN_TRACK


FD_SEEK_PARAMS

typedef struct tagFD_SEEK_PARAMS
{
    BYTE cyl;
    BYTE head;
}
FD_SEEK_PARAMS, *PFD_SEEK_PARAMS;

See also: IOCTL_FDCMD_SEEK


FD_SENSE_PARAMS

typedef struct tagFD_SENSE_PARAMS
{
    BYTE head;
}
FD_SENSE_PARAMS, *PFD_SENSE_PARAMS;

See also: IOCTL_FDCMD_SENSE_DRIVE_STATUS


FD_SHORT_WRITE_PARAMS

typedef struct tagFD_SHORT_WRITE_PARAMS
{
    DWORD length;
    DWORD finetune;
}
FD_SHORT_WRITE_PARAMS, *PFD_SHORT_WRITE_PARAMS;

length - number of bytes to stop after
finetune - additional delay (in microseconds) before stopping

See also: IOCTL_FD_SET_SHORT_WRITE


FD_SPECIFY_PARAMS

typedef struct tagFD_SPECIFY_PARAMS
{
    BYTE srt_hut;
    BYTE hlt_nd;
}
FD_SPECIFY_PARAMS, *PFD_SPECIFY_PARAMS;

See also: IOCTL_FDCMD_SPECIFY


FD_TIMED_ID_HEADER

typedef struct tagFD_TIMED_ID_HEADER
{
    DWORD reltime;
    BYTE cyl, head, sector, size;
}
FD_TIMED_ID_HEADER, *PFD_TIMED_ID_HEADER;

reltime - time (in microseconds) from index hole to current sector

See also: IOCTL_FD_TIMED_SCAN_TRACK


FD_TIMED_SCAN_RESULT

typedef struct tagFD_TIMED_SCAN_RESULT
{
    DWORD count;
    BYTE firstseen;
    DWORD tracktime;
    FD_TIMED_ID_HEADER Header[];
}
FD_TIMED_SCAN_RESULT, *PFD_TIMED_SCAN_RESULT;

count - count of returned sector headers
firstseen - offset of first sector seen after index (usually 0)
tracktime - total track time (in microseconds)

See also: IOCTL_FD_TIMED_SCAN_TRACK

Simon Owen
simon@simonowen.com