News:

MASM32 SDK Description, downloads and other helpful links
MASM32.com New Forum Link
masmforum WebSite

Get current drive number

Started by Neil, January 12, 2009, 12:14:26 PM

Previous topic - Next topic

Neil

Anyone know an API that returns the current hard drive number, the equivalent of the DOS function :-
                                                                          mov ah,19
                                                                          int 21

MichaelW

You can get the current drive and directory for the current process with GetCurrentDirectory. I can find no references to a system-wide current drive or directory.

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    include \masm32\include\masm32rt.inc
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    .data
    .code
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
start:
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    invoke GetCurrentDirectory, 0, 0
    mov ebx, eax
    mov edi, halloc(ebx)
    invoke GetCurrentDirectory, ebx, edi
    print edi,13,10
    hfree edi
    inkey "Press any key to exit..."
    exit
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
end start

eschew obfuscation

jj2007

From a DOS prompt, there is a current directory for each drive. This seems not to work with GetCurrentDirectory. Any ideas how to simulate this?

include \masm32\include\Masm32rt.inc

MyGetCurDir PROTO: DWORD

.data?
buffer db MAX_PATH dup(?)

.code
DirBuffer$ dd buffer

txC db "C:", 0
txC_Win db "C:\Windows", 0

txD db "D:", 0
txD_Masm db "D:\Masm32", 0

start:
invoke SetCurrentDirectory, addr txC_Win ; set C:\Windows
.if eax
invoke MyGetCurDir, 0
print DirBuffer$, 13,10
.else
print chr$("SetDir failed miserably", 13, 10)
.endif

invoke SetCurrentDirectory, addr txD_Masm ; set D:\Masm32
.if eax
invoke MyGetCurDir, 0
print DirBuffer$, 13,10
.else
print chr$("SetDir failed miserably", 13, 10)
.endif


invoke SetCurrentDirectory, addr txC ; set C:
.if eax
invoke MyGetCurDir, 0
print DirBuffer$, 13,10
.else
print chr$("SetDir failed miserably", 13, 10)
.endif

invoke SetCurrentDirectory, addr txD ; set D:
.if eax
invoke MyGetCurDir, 0
print DirBuffer$, 13,10
.else
print chr$("SetDir failed miserably", 13, 10)
.endif

getkey
exit

MyGetCurDir proc MbFlag:DWORD
    invoke GetCurrentDirectory, MAX_PATH, DirBuffer$
    ret
MyGetCurDir endp

end start

Neil

Thanks Michael,
That's actually better than in DOS, saves using a lookup or xlat table to get the actual drive letter  :U