Changing a Drive's Volume Label
ID: Q58650
|
The information in this article applies to:
-
Microsoft C for MS-DOS, version 5.1
SUMMARY
Changing a drive's volume label involves the use of FCB (file control
block) file processing, and therefore is not supplied with the C
run-time libraries. However, one of the ways to do this is through
MS-DOS Interrupt 21h calls for FCB file manipulation.
MORE INFORMATION
Below is an assembly routine written with Microsoft MASM version 5.1
to change a drive's volume name. To do this, it first sets up an
extended FCB to allow for manipulating files with attributes. Offset 6
of the FCB is set to 8 (_A_VOLID defined in DOS.H) to specify a
volume. The old volume is searched for with "*.*" as a pattern and
deleted, then the volume is re-created with the new volume label
passed by the C caller. The function returns the error code supplied
from the MS-DOS application programming interface (API) that creates
the volume label.
Use the following:
rc = NewVol( iDrive, szName ); // iDrive = Drive number ( 1, 2, ... )
// szName = Up to 11 chars. DOS filename
// rc = Return Code from function.
The new volume label must be passed with 11 characters for the name.
Anything less MUST be padded with spaces.
Sample Code
; unsigned NewVol( int, char * ) will delete a disk volume and
; create one with the new name.
;
; Assemble with /Dmodel={SMALL MEDIUM COMPACT LARGE}
; /Dlang={C FORTRAN BASIC PASCAL}
%.MODEL model,lang
.DATA
maxlen EQU 11 ;Maximum name length
datasz EQU 2 ;Size of Data Pointers
; Setup an extended FCB
fcb DB 255, 0, 0, 0, 0, 0, 8, 1
DB 37 DUP (?)
default DB '* * ' ;Equivalent to "*.*"
.CODE
NewVol PROC USES si di es, Drive:WORD, VolName:WORD
mov bx,Drive ;Get drive number ( 1 byte )
mov fcb+7,bl ;...and store in FCB offset 7
mov ax,ds
mov es,ax
cld ;Upward move
mov cx,maxlen ;Size of move
mov si,OFFSET default ;Source string to
mov di,OFFSET fcb+8 ;...filename offset in 8 FCB
rep movsb ;Move maxlen bytes of vol name
mov dx,OFFSET fcb ;Delete volume off drive
mov ah,13H
int 21H
mov cx,maxlen
mov si,VolName ;New name passed by C caller
mov di,OFFSET fcb+8
rep movsb ;Copy 11 chars for new label
mov dx,OFFSET fcb ;Create the new volume
mov ah,16H
int 21H
mov dx,OFFSET fcb ;Close the file
mov ah,10H
int 21H
mov ah,0
ret
NewVol ENDP
END
Additional query words:
kbinf 5.10
Keywords :
Version : :5.1
Platform :
Issue type :