home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <dos.h>
- #include "dosstruc.h"
-
- /*
- * GETDPB is a routine to use the undocumented PC/MS-DOS Int 21H, Func 32H
- * to obtain disk information. This function has been verified to
- * perform correctly in all versions of PC/MS-DOS from 2.0 through
- * 3.3. Since it is heavily used by DOS programs such as CHKDSK,
- * it will prbably continue to work correctly. This routine is used
- * to avoid problems with non-standard boot sectors.
- */
-
- void GetDPB (int Disk, struct DpbStruct *Dpb) {
- int seg, offset;
-
- offset = FP_OFF(Dpb); /* Separate ptr to return area into Seg */
- seg = FP_SEG(Dpb); /* and Offset */
- asm test word ptr seg,0FFFFH /* Compensate for "Tiny" model */
- asm jnz L0
- asm mov seg,DS
- L0:
- asm push ES /* Save ES and DS for return */
- asm push DS
- asm mov DX,Disk /* Get disk number for func 32H */
- asm test DL,0FFH /* Check for default disk */
- asm jz L1 /* ... Xfr - default */
- asm and DL,0FH /* Make disk numeric */
- L1:
- asm mov AH,32H /* MS-DOS 'Get Disk Parameter Block' */
- asm int 21H /* ... DOS Entry Interrupt */
- asm mov SI,BX /* DS:SI points to parameter block */
- asm mov DI,offset /* ES:DI points to destination */
- asm mov ES,seg /* ... */
- asm mov CX,28 /* CX = size of block */
- asm cld /* Clear Direction Flag [forward] */
- asm rep movsb /* Move parameter block */
- asm pop DS
- asm pop ES
- }
-
-
-
-