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