[Back to DRIVES SWAG index] [Back to Main SWAG index] [Original]

    (*
    Date: 07-10-93 (02:15)
    From: LAWRENCE JOHNSTONE
    Subj: DISK'S SERIAL NUMBER.
    This will work under DOS 4.0 or later, according to Microsoft's MS-DOS
    Programmer's Reference (earlier versions of DOS didn't give disks
    serial numbers).
    *)

    UNIT MediaID;

    INTERFACE

    TYPE
      TMediaID = RECORD
        InfoLvl:   WORD;
        SerialNum: LONGINT;
        VolLabel:  ARRAY [1..11] OF CHAR;
        FileSys:   ARRAY [1..8] OF CHAR;
      END;

    FUNCTION GetMediaID( Drive: WORD; VAR MID:  TMediaID ): BOOLEAN;
      (* Drive:  0=default, 1=A, 2=B, etc. *)

    FUNCTION SetMediaID( Drive: WORD; CONST MID: TMediaID ): BOOLEAN;

    IMPLEMENTATION

    FUNCTION GetMediaID( Drive: WORD; VAR MID: TMediaID ): BOOLEAN;  ASSEMBLER;
      ASM
        push ds
        mov  bx, [Drive]
        mov  ch, $08       (* Device category (must be 08h) *)
        mov  cl, $66       (* Minor code for Get Media ID function *)
        lds  dx, [MID]     (* DS:DX -> TMediaID structure *)
        mov  ax, $440D     (* Function 44 (IOCTL), subfunction 0D *)
        int  $21
        pop  ds
        mov  ax, 0         (* Assume function failed *)
        jc   @@Done
        inc  ax            (* Didn't fail -- return TRUE *)
      @@Done:
      END;

    FUNCTION SetMediaID( Drive: WORD; CONST MID: TMediaID ): BOOLEAN;  ASSEMBLER;
      ASM
        push ds
        mov  bx, [Drive]
        mov  ch, $08       (* Device category (must be 08h) *)
        mov  cl, $46       (* Minor code for Set Media ID function *)
        lds  dx, [MID]     (* DS:DX -> TMediaID structure *)
        mov  ax, $440D     (* Function 44 (IOCTL), subfunction 0D *)
        int  $21
        pop  ds
        mov  ax, 0         (* Assume function failed *)
        jc   @@Done
        inc  ax            (* Didn't fail -- return TRUE *)
      @@Done:
      END;

    END.

[Back to DRIVES SWAG index] [Back to Main SWAG index] [Original]