DOCUMENT:Q58650 30-AUG-2001 [utilities] TITLE :Changing a Drive's Volume Label PRODUCT :Microsoft Programming Utilities PROD/VER::5.1 OPER/SYS: KEYWORDS: ====================================================================== ------------------------------------------------------------------------------- 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 : Technology : kbAudDeveloper kbCCompSearch kbZNotKeyword3 kbCComp510DOS Version : :5.1 ============================================================================= THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY. Copyright Microsoft Corporation 2001.