DCB_cd_entry

#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_cd_flags
Can be one of these values:
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.


See Also

IOR