Эмуляция вириальных дисков была получена при помощи virtual think app
В место батника используются вызовы api командной строки.
Был переписан dir(consol win pe), на masm.
Пока не реализована возможность доступа к виртуальным дискам
Нужно доработать команду dir, буду благодарен если кто ни будь поможет:
- Код: Выделить всё
.486
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\Shlwapi.inc
include \masm32\include\masm32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\Shlwapi.lib
includelib \masm32\lib\masm32.lib
.data
aszCrLf db 0Dh, 0Ah, 0
aszMsgResult db 'Result: ', 0
aszPressLeftAlt db 0Dh, 0Ah, 0Dh, 0Ah, "Press Left Alt to exit", 0
dwColorRed dd FOREGROUND_RED
dwColorWhite dd FOREGROUND_RED + FOREGROUND_GREEN + FOREGROUND_BLUE
dwCursorPosition COORD <20, 10>
aszWildCard db '*.*', 0
NewThirdChar db 'x'
.data?
hConsoleOutput HANDLE ?
hConsoleInput HANDLE ?
Buffer db 1024 dup(?)
BufLen dd ?
.code
start proc
; получение описателей ввода и вывода консоли
invoke GetStdHandle, STD_INPUT_HANDLE
mov hConsoleInput, eax
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov hConsoleOutput, eax
;очистка экрана
invoke ClearScreen
;
lea esi, [aszWildCard]
call Dir
;вывод результата
@@ShowResult:
; - вывод
start endp
;
Dir proc
LOCAL FindFileData:WIN32_FIND_DATA
LOCAL hFind:HANDLE
LOCAL lpWildCard:DWORD
mov [lpWildCard], esi
invoke FindFirstFile, esi, ADDR FindFileData
cmp eax, INVALID_HANDLE_VALUE
je @@DirExit
mov [hFind], eax
@@doFindFiles:
;если найден файл по маске, то выведем его имя
invoke StrLen, ADDR FindFileData.cFileName
mov [BufLen], eax
invoke WriteConsole, hConsoleOutput, ADDR FindFileData.cFileName,\
BufLen, ADDR BufLen, NULL
invoke WriteConsole, hConsoleOutput, ADDR aszCrLf,\
LENGTHOF aszCrLf-1, ADDR BufLen, NULL
@@FindNext:
;искать следующий подходящий файл
invoke FindNextFile, [hFind], ADDR FindFileData
cmp eax, 0 ;если файл найден
jnz @@doFindFiles ;повторить переименование
;закрытие поиска
invoke FindClose, [hFind]
@@DirExit:
ret
Dir endp
end start