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. |
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.
typedef struct tagFD_CONFIGURE_PARAMS
{
BYTE eis_efifo_poll_fifothr;
BYTE pretrk;
} FD_CONFIGURE_PARAMS, *PFD_CONFIGURE_PARAMS;
See also: IOCTL_FDCMD_CONFIGURE
typedef struct tagFD_DRIVE_STATUS
{
BYTE st3;
} FD_DRIVE_STATUS, *PFD_DRIVE_STATUS;
See also: IOCTL_FDCMD_SENSE_DRIVE_STATUS
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
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
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
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
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
typedef struct tagFD_LOCK_PARAMS
{
BYTE lock;
} FD_LOCK_PARAMS, *PFD_LOCK_PARAMS;
See also: IOCTL_FDCMD_LOCK
typedef struct tagFD_LOCK_RESULT
{
BYTE lock;
} FD_LOCK_RESULT, *PFD_LOCK_RESULT;
See also: IOCTL_FDCMD_LOCK
typedef struct tagFD_PERPENDICULAR_PARAMS
{
BYTE ow_ds_gap_wgate;
} FD_PERPENDICULAR_PARAMS, *PFD_PERPENDICULAR_PARAMS;
See also: IOCTL_FDCMD_PERPENDICULAR_MODE
typedef struct tagFD_RAW_READ_PARAMS
{
BYTE flags;
BYTE head, size;
} FD_RAW_READ_PARAMS, *FD_RAW_READ_PARAMS;
See also: IOCTL_FD_RAW_READ_TRACK
typedef struct tagFD_READ_ID_PARAMS
{
BYTE flags;
BYTE head;
} FD_READ_ID_PARAMS, *PFD_READ_ID_PARAMS;
See also: IOCTL_FDCMD_READ_ID
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
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
typedef struct tagFD_SCAN_PARAMS
{
BYTE flags;
BYTE head;
} FD_SCAN_PARAMS, *PFD_SCAN_PARAMS;
Note: version <= 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
typedef struct tagFD_SCAN_RESULT
{
BYTE count;
FD_ID_HEADER Header[];
} FD_SCAN_RESULT, *PFD_SCAN_RESULT;
See also: IOCTL_FD_SCAN_TRACK
typedef struct tagFD_SEEK_PARAMS
{
BYTE cyl;
BYTE head;
} FD_SEEK_PARAMS, *PFD_SEEK_PARAMS;
See also: IOCTL_FDCMD_SEEK
typedef struct tagFD_SENSE_PARAMS
{
BYTE head;
} FD_SENSE_PARAMS, *PFD_SENSE_PARAMS;
See also: IOCTL_FDCMD_SENSE_DRIVE_STATUS
typedef struct tagFD_SHORT_WRITE_PARAMS
{
DWORD length; // length to write before interrupting
DWORD finetune; // finetune delay in microseconds
} FD_SHORT_WRITE_PARAMS, *PFD_SHORT_WRITE_PARAMS;
See also: IOCTL_FD_SET_SHORT_WRITE
typedef struct tagFD_SPECIFY_PARAMS
{
BYTE srt_hut;
BYTE hlt_nd;
} FD_SPECIFY_PARAMS, *PFD_SPECIFY_PARAMS;
See also: IOCTL_FDCMD_SPECIFY
typedef struct tagFD_TIMED_ID_HEADER
{
DWORD reltime; // time relative to index (in microseconds)
BYTE cyl, head, sector, size;
} FD_TIMED_ID_HEADER, *PFD_TIMED_ID_HEADER;
See also: IOCTL_FD_TIMED_SCAN_TRACK
typedef struct tagFD_TIMED_SCAN_RESULT
{
DWORD count; // count of returned headers
BYTE firstseen; // index of first sector detected (usually 0)
DWORD tracktime; // total time for track (in microseconds)
FD_TIMED_ID_HEADER Header[];
} FD_TIMED_SCAN_RESULT, *PFD_TIMED_SCAN_RESULT;
See also: IOCTL_FD_TIMED_SCAN_TRACK