#include <dcb.h>
typedef struct _DCB_cd_entry { /* */
PVOID DCB_cd_io_address; // address of request routine
ULONG DCB_cd_flags; // demand bits; see below
ULONG DCB_cd_ddb; // driver's DDB pointer
ULONG DCB_cd_next; // address of next cd entry
USHORT DCB_cd_expan_off; // offset of expansion area
UCHAR DCB_cd_layer_flags; // flags for layer's use
UCHAR DCB_cd_lgn; // load group number
} DCB_cd_entry, *pDCB_cd_entry;
Contains information about a calldown entry.
DCB_dmd_srb_cdb | There must be an SRB and CDB for each IOR. |
DCB_dmd_rsrv_1 | Reserved; must be zero. |
DCB_dmd_logical | Media address must be logical and DCB must be for a logical device. |
DCB_dmd_physical | Media adresses must be physical and DCB must be for a physical device. |
DCB_dmd_small_memory | Data buffers must reside in in low 16M. |
DCB_dmd_rsrv_2 | Reserved; must be zero. |
DCB_dmd_rsrv_3 | Reserved; must be zero. |
DCB_dmd_rsrv_4 | Reserved; must be zero. |
DCB_dmd_not_512 | Sector size on the media is not 512 bytes. |
DCB_dmd_word_align | Data buffers must be word aligned (see ILB_int_io_criteria_rtn). |
DCB_dmd_dword_align | Data buffers must be doubleword aligned (see ILB_int_io_criteria_rtn). |
DCB_dmd_phys_sgd | Scatter/gather descriptors must contain physical addresses (they will contain linear addresses if this demand bit is not set). |
DCB_dmd_phys_sgd_ptr | Do not use (keep this bit clear). Originally intended for use in ILB_int_io_criteria_rtn. |
DCB_dmd_do_a_b_toggling | For single floppy drive system, voltrack needs to do the toggling between A and B when accesses are made to these drive letters. |
DCB_dmd_query_remov | Lower level must be called to check if media is removeable/has changed. |
DCB_dmd_request_sns | Port driver cannot perform SCSI autosense. |
DCB_dmd_lock_unlock_media | Media supports software locking. |
DCB_dmd_load_eject_media | Media supports electronic eject. |
DCB_dmd_clear_media_chg | Command to clear media change. |
DCB_dmd_serialize | Layer requires request serialization. |
DCB_dmd_prot_mode | Override real mode checks for this device; for example, ATAPI cdrom. |
DCB_dmd_no_xclusive | Indicates exclusive access is not required for abs write. |
DCB_dmd_pageability | Indicates that access to this volume can cause paging. |
DCB_dmd_preload (0x00800000) | (OSR2) Allows a "preload driver" access to a port driver's DCB before the port driver sees the DCB (via IOS_Register). Set this bit in your driver when you insert yourself into the calldown chain for a device. This flag was added to correct a bug in IOS.VXD in the retail version of Windows 95, where DRP_FC_NEED_PRELOAD did not work correctly. It occurs specifically on bus-mastering IDE controllers and SCSI controllers. The problem has been fixed in OSR2, and a fixed version of IOS.VXD is also available from our website (go to Error! Bookmark not defined. and search for IOSUPD.EXE).You will need to either use this fixed version of IOS, or run on OSR2 or a newer version of Win9x, when using DCB_dmd_preload.
The basic problem is that IOS will wipe out the demand flags for a DCB when a preload driver inserts itself into the calldown chain for that DCB. This isn't a real problem for something like a standard IDE controller, which does not set any demand flags. It is a problem for SCSI controllers, particularly those that do bus-mastering, since the DCB's demand flags are used to indicate that the device requires physical addresses, etc. |
IOR