#include <dvt.h>
typedef struct DVT {
USHORT DVT_reserved_1; // reserved for expansion to 32 bit
ULONG DVT_next_dvt; // 16-bit offset to next DVT
USHORT DVT_device_cnt; // count of devices added/accepted
PVOID DVT_aer; // addr of driver's async event routine
ULONG DVT_ddb; // first DDB for this DVT
ULONG DVT_ddb_init; // first DDB for this DVT/ICE
CHAR DVT_ascii_name[16]; // driver name
CHAR DVT_create_date[8]; // creation date
CHAR DVT_create_time[8]; // creation time
CHAR DVT_rev_level[4]; // revision level
ULONG DVT_feature_code; // feature code
USHORT DVT_if_requirements; // i/f requirements
BYTE DVT_bus_type; // I/O bus type; see below
ULONG DVT_reference_data; // data passed in DRP upon reg
CHAR DVT_first_drive; // unit number of first drive valid
// only for block devices
CHAR DVT_current_lgn; // current load group number
ULONG DVT_LoadHandle; // contains the VxD's load handle if
// we loaded the driver else 0
CHAR DVT_scsi_max_target; // max target supported for SCSI
CHAR DVT_scsi_max_lun; // max LUN supported for SCSI
PVOID DVT_entry_point; // entry point into driver
// SCSI miniport only
UCHAR DVT_init_count; // # of successful AEP_INITIALIZE calls
// port drivers only
PVOID DVT_reserved[2]; // reserved; must be zero
} _DVT;
Contains driver vector table information. The IOS creates a DVT structure for itself and then one for each driver during registration. The IOS's DVT provides a link to the first driver via the DVT_next_dvt member. The first driver can access the second driver's DVT via its DVT_next_dvt offset, and so on, providing a linked chain between the drivers' DVTs. Many of the members are set using values from the DRP structure provided by the driver.
DVT_BT_ESDI | ESDI or ESDI emulator |
DVT_BT_SCSI | SCSI or SCSI emulator |
DVT_BT_FLOPPY | NEC FLOPPY or FLOPPY emulator |
DVT_BT_SMART | Smart device |
DVT_BT_ABIOS | ABIOS or ABIOS emulator |
DVT_FC_SCAN_DOWN | BIOS scans targets from high to low. |
DVT_FC_IO_FOR_INQ_AEP | Port driver needs to send I/O through IOP in response to an AEP_DEVICE_INQUIRY function. Results in AEP_CONFIG_DCB function for inquiry DCB. |
DVT_FC_HALF_SEC | Notify driver every half second. |
DVT_FC_1_SEC | Notify driver every second. |
DVT_FC_2_SECS | Notify driver every two seconds. |
DVT_FC_4_SECS | Notify driver every four seconds. |
DVT_FC_DYNALOAD | Driver was dynaloaded by the IOS. |
DVT_FC_NEED_PRELOAD | Driver needs to hook I/O even before the port driver. When set, the AEP_CONFIG_DCB function is received before the prot driver. |
DVT_FC_NEED_PRE_POST_LOAD | Same as DVT_FC_NEED_PRELOAD except that the driver receives two AEP_CONFIG_DCB calls for each DCB: one call before the port driver, and another call after layer drivers before its load group have been initialized. Note that care must be taken not to insert twice in the same DCB. |
DRP, AEP