volid.asm.html

    ; /sl/utl/volid/volid.asm - Set the C drive serial number
    ;
    ; Use DOS function "Get Media ID", 440Dh, minor 66h to read volume
    ; information and use DOS function "Set Media ID", 440Dh, minor 46h
    ; to write volume info back to disk with a modified serial number.
    ;
    ; This x86 program runs under DOS and Windows 95 in DOS mode.  It is untested on
    ; win98 and will not work under NT or much of anything else.
    ;
    ; Ref: Microsoft MS-DOS Programmer's Reference, Version 5, ISBN 1-55615-329-5
    ; Pages 314, 319
    ;
    ; D. Edwards <dee.engineering@usa.net>  6/11/2000 5:27PM
    ;
    ; :set ts=8

       DOSSEG

       include      z:\sl\dosasm\struc500.inc

       .MODEL SMALL
       .STACK 100h

       .DATA
    MediaID MID     <>
    str1 DB 'INVALID FUNCTION',13,10,'$'
    str2 DB 'FILE NOT FOUND',13,10,'$'
    str3 DB 'ACCESS DENIED',13,10,'$'

       .CODE
       mov  ax,@data
       mov  ds,ax                           ;Set DS to point to the data segment

       ; Get Disk Volume information
       ; 0=def, 1=A, 3=C, 4=D, 5=E, 6=F, 7=G, 8=H, 9=I, 10=J
       mov  bx,3                            ;Set drive number
       mov  ch,08h                          ;Device category (always 08h)
       mov  cl,66h                          ;Get Media ID minor code
       mov  dx,OFFSET MediaID               ;DS:DX points to MID struc
       mov  ax,440Dh                        ;IOCTL for block devices
       int  21h                             ;Fill the MID struc

    ; Modify the volume ID in the MID structure and write it out to disk
       mov  si,OFFSET MediaID.midSerialNum  ;Point to the DWord result
       mov  [si],15F1h                      ;Bultaco VolID LSW
       mov  [si+2],096Bh                    ;Bultaco VolID MSW

       mov  bx,3                            ;Set drive number
       mov  ch,08h                          ;Device category (always 08h)
       mov  cl,46h                          ;Get Media ID minor code
       mov  dx,OFFSET MediaID               ;DS:DX points to MID struc
       mov  ax,440Dh                        ;IOCTL for block devices
       int  21h                             ;Write the MID struc out to disk

       jnc  ok                              ;Carry flag is set on error
       mov  ah,9                            ;DOS print string function
       mov  dx,OFFSET str3                  ;point to str3
       int  21h                             ;display str3

    ok:
     ; All done, exit
       mov  ah,4ch                          ;DOS terminate program function
       int  21h                             ;terminate the program
       END