Pointers

      VPB field vpi_pDPB points to the associated DPB.
    Locations
      DPB segment is dynamically allocated from the kernel resident heap.
    VM Owner
      dpb (0xff96).

    Format

    DPB

    ┌──────────────────────┬──────┬──────┬────┬────────────────────────────────────────┐│Field Name            │Offset│Length│Type│Description                             │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb_drive             │+0    │1     │B   │Logical drive # assoc with DPB          │
    │                      │      │      │    │(A=0,B=1,...)                           │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb_unit              │+1    │1     │B   │Driver unit number of DPB               │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb_driver_addr       │+2    │4     │D   │Pointer to driver                       │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb_next_dpb          │+6    │4     │D   │Pointer to next Drive parameter block   │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb_cbSector          │+a    │2     │W   │sector size (for volume checking)       │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb_first_FAT         │+c    │2     │W   │sector of 1st FAT (for ancient dev      │
    │                      │      │      │    │drivers)                                │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb_toggle_time       │+e    │4     │D   │time of last drive toggle               │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb_hVPB              │+12   │2     │W   │handle of volume currently in drive     │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb_media             │+14   │1     │B   │most recent media that was in drive     │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb_flags             │+15   │1     │B   │synchronization flags (see below)       │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb_drive_lock        │+16   │2     │W   │Contains pid if drive locked by process │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb_strategy2         │+18   │4     │D   │strategy2 addr (or 00000000)            │
    └──────────────────────┴──────┴──────┴────┴────────────────────────────────────────┘
    

    dpb_falgs flag definitions:

    ┌────────────┬────────┬────────────────────────────────────────┐
    │Name        │Bit Mask│Description                             │
    ├────────────┼────────┼────────────────────────────────────────┤
    │DPBCHECK    │0x10    │disk in drive is being removed/checked  │
    │            │        │for VPB                                 │
    ├────────────┼────────┼────────────────────────────────────────┤
    │DPBNONREMOV │0x20    │1 => drive supports non-removable media │
    ├────────────┼────────┼────────────────────────────────────────┤
    │DPBVCRAMDISK│0x40    │Ram Disk Driver                         │
    └────────────┴────────┴────────────────────────────────────────┘
    

    DPB3X

    ┌──────────────────────┬──────┬──────┬────┬────────────────────────────────────────┐
    │Field Name            │Offset│Length│Type│Description                             │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb3x_drive           │+0    │1     │B   │Logical drive # assoc with DPB          │
    │                      │      │      │    │(A=0,B=1,...)                           │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb3x_UNIT            │+1    │1     │B   │Driver unit number of DPB               │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb3x_sector_size     │+2    │2     │W   │Size of physical sector in bytes        │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb3x_cluster_mask    │+4    │1     │B   │Sectors/cluster - 1                     │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb3x_cluster_shift   │+5    │1     │B   │Log2 of sectors/cluster                 │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb3x_first_FAT       │+6    │2     │W   │Starting record of FATs                 │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb3x_FAT_count       │+8    │1     │B   │Number of FATs for this drive           │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb3x_root_entries    │+9    │2     │W   │Number of directory entries             │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb3x_first_sector    │+b    │2     │W   │First sector of first cluster           │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb3x_max_cluster     │+d    │2     │W   │Number of clusters on drive + 1         │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb3x_FAT_size        │+f    │1     │B   │Number of records occupied by FAT       │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb3x_dir_sector      │+10   │2     │W   │Starting record of directory            │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb3x_driver_addr     │+12   │4     │D   │Pointer to driver                       │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb3x_media           │+16   │1     │B   │Media byte                              │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb3x_first_access    │+17   │1     │B   │This is initialized to -1 to force a    │
    │                      │      │      │    │media check the first time this DPB is  │
    │                      │      │      │    │used                                    │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb3x_next_dpb        │+18   │4     │D   │Pointer to next Drive parameter block   │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb3x_next_free       │+1c   │2     │W   │Cluster # of last allocated cluster     │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb3x_free_cnt        │+1e   │2     │W   │Count of free clusters, -1 if unknown   │
    └──────────────────────┴──────┴──────┴────┴────────────────────────────────────────┘
    

    DPB4X

    ┌──────────────────────┬──────┬──────┬────┬────────────────────────────────────────┐
    │Field Name            │Offset│Length│Type│Description                             │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb4x_drive           │+0    │1     │B   │Logical drive # assoc with DPB          │
    │                      │      │      │    │(A=0,B=1,...)                           │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb4x_UNIT            │+1    │1     │B   │Driver unit number of DPB               │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb4x_sector_size     │+2    │2     │W   │Size of physical sector in bytes        │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb4x_cluster_mask    │+4    │1     │B   │Sectors/cluster - 1                     │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb4x_cluster_shift   │+5    │1     │B   │Log2 of sectors/cluster                 │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb4x_first_FAT       │+6    │2     │W   │Starting record of FATs                 │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb4x_FAT_count       │+8    │1     │B   │Number of FATs for this drive           │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb4x_root_entries    │+9    │2     │W   │Number of directory entries             │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb4x_first_sector    │+b    │2     │W   │First sector of first cluster           │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb4x_max_cluster     │+d    │2     │W   │Number of clusters on drive + 1         │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb4x_FAT_size        │+f    │2     │W   │Number of records occupied by FAT       │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb4x_dir_sector      │+11   │2     │W   │Starting record of directory            │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb4x_driver_addr     │+13   │4     │D   │Pointer to driver                       │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb4x_media           │+17   │1     │B   │Media byte                              │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb4x_first_access    │+18   │1     │B   │This is initialized to -1 to force a    │
    │                      │      │      │    │media check the first time this DPB is  │
    │                      │      │      │    │used                                    │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb4x_next_dpb        │+19   │2     │D   │Pointer to next Drive parameter block   │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb4x_next_free       │+1d   │2     │W   │Cluster # of last allocated cluster     │
    ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
    │dpb4x_free_cnt        │+1f   │2     │W   │Count of free clusters, -1 if unknown   │
    └──────────────────────┴──────┴──────┴────┴────────────────────────────────────────┘
    


    [Back] [Next]