#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_bus_type
Input and output bus type. Can be one of these values:
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_feature_code
Feature code; must match the feature code in the DRP. Can be a combination of these values:
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. |
See also DRP, AEP