Національний університет Львівська політехніка
Кафедра АСУ
Звіт
З лабораторних робіт
По системному програмуванню
Лабораторна робота №1
.386 ; Для процесора не нижче INTEL-386
.model flat, STDCALL ; компілювати як програму для WIN32;
; Визначення зовнішніх процедур:
extrn ExitProcess :proc ; Ліквідація процесу,
extrn MessageBoxA :proc ; Вивід вікна з повідомленням,
extrn GetComputerNameA :proc ; Отримання імені комп’ютера.
.data ; Вміст сегменту даних:
buflen dd 256 ; Визначення комірки пам’яті
hello_title db ' Лабораторна робота № 1 Олександра Головача', 0
hello_message db 'Computer Name: ' ; Рядок байтів
user_name db 256 dup (0) ; Буфер заповнений нулями
.code ; Вміст сегменту коду:
Start:
push offset buflen ; 2-й параметр: адреса buflen
push offset user_name ; 1-й параметр: адреса user_name
call GetComputerNameA ; виклик функції API
push 40h ; стиль вікна – одна кнопка “OK” з піктограмою “і”
push offset hello_title ; адреса рядка із заголовком
push offset hello_message ; адреса рядка з повідомленням
push 0 ; хендл програми-власника вікна
call MessageBoxA ; виклик функції API
push 0 ; код виходу з програми
call ExitProcess ; завершення програми
end Start ; закінчення сегменту кода
Лабораторна робота №1а
.386 ; Для процесора не нижче INTEL-386
.model flat, STDCALL ; компілювати як програму для WIN32;
; Визначення зовнішніх процедур:
extrn ExitProcess :proc ; Ліквідація процесу,
extrn MessageBoxA :proc ; Вивід вікна з повідомленням,
extrn GetUserNameA :proc ; Отримання імені комп’ютера.
.data ; Вміст сегменту даних:
buflen dd 256 ; Визначення комірки пам’яті
hello_title db ' Лабораторна робота № 1 Виконав студент Олександр Головач, 0
hello_message db "Ім'я користувача: " ; Рядок байтів
user_name db 256 dup (0) ; Буфер заповнений нулями
.code ; Вміст сегменту коду:
Start:
push offset buflen ; 2-й параметр: адреса buflen
push offset user_name ; 1-й параметр: адреса user_name
call GetUserNameA ; виклик функції API
push 40h ; стиль вікна – одна кнопка “OK” з піктограмою “і”
push offset hello_title ; адреса рядка із заголовком
push offset hello_message ; адреса рядка з повідомленням
push 0 ; хендл програми-власника вікна
call MessageBoxA ; виклик функції API
push 0 ; код виходу з програми
call ExitProcess ; завершення програми
end Start ; закінчення сегменту кода
Лабораторна робота 1b
.386
.model flat, STDCALL
extrn ExitProcess :proc
extrn MessageBoxA :proc
extrn GetCurrentDirectoryA :proc
.data ; Вміст сегменту даних:
buflen dd 256 ; Визначення комірки пам’яті
hello_title db ' Лабораторна робота № 1 Виконав Олександр Головач', 0
hello_message db 'Поточний каталог: ' ; Рядок байтів
user_name db 256 dup (0) ; Буфер заповнений нулями
.code ; Вміст сегменту коду:
Start:
call GetCurrentDirectoryA ,buflen, offset user_name ; виклик функції API
push 40h ; стиль вікна – одна кнопка “OK” з піктограмою “і”
push offset hello_title ; адреса рядка із заголовком
push offset hello_message ; адреса рядка з повідомленням
push 0 ; хендл програми-власника вікна
call MessageBoxA ; виклик функції API
push 0 ; код виходу з програми
call ExitProcess ; завершення програми
end Start ; закінчення сегменту кода
Лабораторна робота 2а.
.586
.model flat,stdcall
Extrn ExitProcess:Proc
Extrn CopyFileA:Proc
extrn MessageBoxA:Proc
.data
zag db "О.Головач.копіювання файла "
test1 db "test1.txt",0
test2 db "Tewst2.txt",0
.code
Start:
CALL CopyFileA,offset test1,offset test2,0
call MessageBoxA,0,offset zag,offset test2,0
call ExitProcess,0
end Start
Лабораторна робота № 2b
.586
.model flat,stdcall
Extrn ExitProcess:Proc
Extrn DeleteFileA:Proc
extrn MessageBoxA:Proc
.data
zag db "О.Головач.знищення "
test2 db "Tewst2.txt",0
.code
Start:
CALL DeleteFileA,offset test2
call MessageBoxA,0,offset zag,offset test2,0
call ExitProcess,0
end Start
Лабораторна робота 2с.
.586
.model flat,stdcall
Extrn ExitProcess:Proc
Extrn GetFileAttributesA:Proc
Extrn MessageBoxA:Proc
.data
stud db "Виконав студент О.Головач Отримання атрибутів файлу "
test2 db "Tewst2.txt",0
BUF1 db 33 dup(?)
.code
Start:
CALL GetFileAttributesA,offset test2
mov ecx,32
mov esi,offset BUF1
M1: rcl eax,1
mov dl,"0"
adc dl,0 ; addition with carry - додавання з переносом
mov [esi],dl
inc esi
dec ecx
jnz M1
mov byte ptr [esi],0
call MessageBoxA,0,offset BUF1, offset stud,0
call ExitProcess,0
end Start
Лабораторна робота 2d
.586
.model flat,stdcall
Extrn ExitProcess:Proc
Extrn SetFileAttributesA:Proc
Extrn MessageBoxA:Proc
.data
stud db "Виконав студент О.Головач Приховування файлу "
test2 db "Tewst2.txt",0
BUF1 db 33 dup(?)
.code
Start:
CALL SetFileAttributesA,offset test2,111b ;прихований, тільки для читання і системний
call MessageBoxA,0,offset BUF1, offset stud,0
call ExitProcess,0
end Start
Лаборотарна робота 2e
.586
.model flat,stdcall
Extrn ExitProcess:Proc
Extrn SetFileAttributesA:Proc
Extrn MessageBoxA:Proc
.data
stud db "Виконав студент О.Головач розкриття файлу "
test2 db "Tewst2.txt",0
BUF1 db 33 dup(?)
.code
Start:
CALL SetFileAttributesA,offset test2,0 ; без атрибутів
call MessageBoxA,0,offset BUF1, offset stud,0
call ExitProcess,0
end Start
Лабораторна робота 2f
.586
.model flat,stdcall
Extrn ExitProcess:Proc
Extrn GetLogicalDrives:Proc
Extrn MessageBoxA:Proc
.data
stud db "Отримання логічних дисків Виконав студент Олександр Головач ",0
Text2 db "Маска логічних пристроїв: "
BUF1 db 33 dup(?)
.code
Start:
CALL GetLogicalDrives
mov ecx,32
mov esi,offset BUF1
M1: rcl eax,1
mov dl,"0"
adc dl,0 ; addition with carry - додавання з переносом
mov [esi],dl
inc esi
dec ecx
jnz M1
mov byte ptr [esi],0
call MessageBoxA,0,offset Text2, offset stud,0
call ExitProcess,0
end Start
Лабораторна робота 2g
.586
.model flat,stdcall
Extrn ExitProcess:Proc
Extrn GetLogicalDriveStringsA:Proc
Extrn MessageBoxA:Proc
.data
S1 db "Студент О.Головач",0
Buf1 db 200 dup(?)
.code
Start:
call GetLogicalDriveStringsA,200,offset Buf1
mov esi,offset Buf1
M1: cmp word ptr [esi],0
jz EXIT1
cmp byte ptr [esi],0
jnz C1
mov byte ptr [esi],","
C1: inc esi
jmp M1
EXIT1: call MessageBoxA,0,offset Buf1,offset S1,0
call ExitProcess,0
end Start
Лабораторна робота 2h
.586
.model flat,stdcall
Extrn ExitProcess:Proc
Extrn RemoveDirectoryA:Proc
Extrn MessageBoxA:Proc
.data
S1 db "Студент О.Головач",0
S2 db "Знищуємо каталог "
Buf1 db "TEST",0
.code
Start:
call MessageBoxA,0,offset S2,offset S1,0
call RemoveDirectoryA,offset Buf1
call ExitProcess,0
end Start
Лабораторна робота 3
.386
.model flat,STDCALL
extrn CreateFileA:Proc
extrn GlobalAlloc:Proc
extrn GlobalLock:Proc
extrn ReadFile:Proc
extrn GetLastError:Proc
extrn MessageBoxA:Proc
extrn CloseHandle:Proc
extrn GlobalUnlock:Proc
extrn GlobalFree:Proc
extrn ExitProcess:Proc
.data
title1 db 'Лабораторна робота №3',0
openname db 'Test2.txt',250 dup(0)
hFile dd 0
hMemory dd 0 ; Хендл блоку пам’яті
pMemory dd 0 ; Адреса блоку пам’яті
SizeRead dd 0
MEMSIZE equ 1000000h ; 16 Mb
.code
Start: push 0
push 0h ; файл з довільними атрибутами
push 4h ; відкрити існуючий або створити новий
push 0 ; без атрибутів безпеки
push 1h ; дозволено спільний доступ по читанню
push 80000000h ; читати файл
push offset openname ; адреса імені файлу
call CreateFileA
mov hFile,eax ; отримали хендл файлу
push MEMSIZE
push 2h + 40h ; GMEM_MOVEABLE + GMEM_ZEROINIT
call GlobalAlloc
mov hMemory,eax ; отримали хендл блоку пам’яті
push hMemory
call GlobalLock ; розмістили блок
mov pMemory,eax ; та отримали його адресу
push 0
push offset SizeRead ; адреса змінної скільки байтів прочитано
push MEMSIZE-1 ; скільки байтів можна прочитати
push pMemory ; адреса початку блоку
push hFile ; хендл файлу
call ReadFile ; функція читання файлу
push 0
push offset title1
push pMemory ; вивід блоку пам’яті на екран
push 0
call MessageBoxA
push hFile
call CloseHandle ; закрити файл
push hMemory
call GlobalUnlock ; розблокувати блок пам’яті
push hMemory
call GlobalFree ; звільнити блок пам’яті
push 0
call ExitProcess ; повернення у Windows
end Start
Лабораторна робота 3a
.386
.model flat,STDCALL
extrn CreateFileA:Proc
extrn GlobalAlloc:Proc
extrn GlobalLock:Proc
extrn ReadFile:Proc
extrn WriteFile:Proc
extrn GetLastError:Proc
extrn MessageBoxA:Proc
extrn CloseHandle:Proc
extrn GlobalUnlock:Proc
extrn GlobalFree:Proc
extrn ExitProcess:Proc
extrn lstrlen:Proc
.data
title1 db 'Лабораторна робота №3 запис у файл '
openname db 'Test3.txt',250 dup(0)
BUF1 db "Запис у файл test3.txt О.Головач",0
hFile dd 0
hMemory dd 0 ; Хендл блоку пам’яті
pMemory dd 0 ; Адреса блоку пам’яті
SizeRead dd 0
.code
Start: push 0
push 0h ; файл з довільними атрибутами
push 4h ; відкрити існуючий або створити новий
push 0 ; без атрибутів безпеки
push 1h ; дозволено спільний доступ по читанню
push 40000000h ; писати у файл
push offset openname ; адреса імені файлу
call CreateFileA
mov hFile,eax ; отримали хендл файлу
call lstrlen,offset BUF1 ; отримуємо довжину рядка
push 0
push offset SizeRead ; адреса змінної скільки байтів прочитано
push eax ; скільки байтів можна записати
push offset BUF1 ; адреса початку блоку
push hFile ; хендл файлу
call WriteFile ; функція читання файлу
push 0
push offset title1
push offset BUF1 ; вивід блоку пам’яті на екран
push 0
call MessageBoxA
push hFile
call CloseHandle ; закрити файл
push 0
call ExitProcess ; повернення у Windows
end Start
Лабораторна робота 3b
.386
.model flat,STDCALL
extrn CreateFileA:Proc
extrn GlobalAlloc:Proc
extrn GlobalLock:Proc
extrn ReadFile:Proc
extrn WriteFile:Proc
extrn GetLastError:Proc
extrn MessageBoxA:Proc
extrn CloseHandle:Proc
extrn GlobalUnlock:Proc
extrn GlobalFree:Proc
extrn ExitProcess:Proc
extrn lstrlen:Proc
extrn SetFilePointer:Proc
FILE_BEGIN equ 0
FILE_END equ 2
OPEN_ALWAYS equ 4
.data
title1 db 'Лабораторна робота №3 запис у файл зі зміщенням'
openname db 'Test3.txt',250 dup(0)
TEMP1 dd 0
BUF1 db "Текст для запису у файл test3.txt. Виконав студент О.Головач",0
hFile dd 0
hMemory dd 0 ; Хендл блоку пам’яті
pMemory dd 0 ; Адреса блоку пам’яті
SizeRead dd 0
.code
Start: push 0
push 0h ; файл з довільними атрибутами
push OPEN_ALWAYS ; відкрити існуючий або створити новий
push 0 ; без атрибутів безпеки
push 1h ; дозволено спільний доступ по читанню
push 40000000h ; писати файл
push offset openname ; адреса імені файлу
call CreateFileA
mov hFile,eax ; отримали хендл файлу
call SetFilePointer,hFile,-6,0,FILE_END
call lstrlen,offset BUF1 ; отримуємо довжину рядка
push 0
push offset SizeRead ; адреса змінної скільки байтів прочитано
push eax ; скільки байтів можна записати
push offset BUF1 ; адреса початку блоку
push hFile ; хендл файлу
call WriteFile ; функція читання файлу
push 0
push offset title1
push offset BUF1 ; вивід блоку пам’яті на екран
push 0
call MessageBoxA
push hFile
call CloseHandle ; закрити файл
push 0
call ExitProcess ; повернення у Windows
end Start
Лабораторна робота 3c
.386
.model flat,STDCALL
extrn CreateFileA:Proc
extrn GlobalAlloc:Proc
extrn GlobalLock:Proc
extrn ReadFile:Proc
extrn WriteFile:Proc
extrn GetLastError:Proc
extrn MessageBoxA:Proc
extrn CloseHandle:Proc
extrn GlobalUnlock:Proc
extrn GlobalFree:Proc
extrn ExitProcess:Proc
extrn lstrlen:Proc
extrn GetOpenFileNameA:Proc
extrn GetCurrentDirectoryA:Proc
FILE_BEGIN equ 0
FILE_END equ 2
OPEN_ALWAYS equ 4
;---------------------------------------------------------------
.data
title1 db 'Лабораторна робота №3 вибір файлу '
openname db 'Test3.txt',250 dup(0)
TEMP1 dd 0
hFile dd 0
hMemory dd 0 ; Хендл блоку пам’яті
pMemory dd 0 ; Адреса блоку пам’яті
SizeRead dd 0
;=================================================
S1:
FSize dd 76 ; довжина цiєї структури;
Howner dd 0 ; вказiвник вiкна-власника або 0;
AppHWnd dd 0 ; вказiвник модуля-власника;
Filters dd offset filter_tab ; вказiвник на перелiк типiв файлiв;
CustFilters dd 0 ; вказiвник на перелiк типiв файлiв якi дозволенi користувачевi;
CstFltSize dd 0 ; довжина буферу на який вказує CustFilters;
CurFilter dd 3 ; iндекс вибраного фiльтру (1,2,3,...) або 0;
CurFileName dd offset openname ; вказiвник на повне iм'я файлу, наприклад, на “С:\dir1\dir2\file.ext”,0;
CurFlNmSize dd 512 ; довжина буферу вказаного в CurFileName;
CurFile dd 0 ; вказiвник на iм'я файлу з розширенням;
CurFlSize dd 0 ; довжина буферу вказаного в CurFile;
InitialDir dd offset dir ; вказiвник на каталог файлу або 0 для даного каталога;
DlgTitle dd offset titl ; вказiвник на назву вiкна;
Flags dd 00h ; тип вiкна, яке вiдкриває файл (може бути 200h);
FileOffset dw 0 ; повертає довжину повного шляху, наприклад=13 якщо користувач ввів рядок “С:\dir1\dir2\file.asm”;
ExtOffset dw 0 ; змiщення вiд початку рядка до розширення (в даному прикладi =18) або 0 якщо розширення немає;
Extension dd 0 ; вказiвник на стандартне розширення, яке буде додано до iменi, якщо розширення немає (або 0);
CustData dd 0 ; вказiвник на данi для hook-процедури;
HookProc dd 0 ; вказiвник на hook-процедуру, якщо вона дозволена у Flags;
TmplateRsc dd 0 ; вказiвник на шаблон ресурсiв, якщо вiн передбачений у Flags;
; додаткові змінні до структури:
filter_tab db "Графiчнi файли (*.BMP)",0h,"*.BMP",0
db "Текстовi файли (*.TXT)",0,"*.txt",0
db "Лабораторнi роботи (*.ASM)",0,"*.asm",0
db "Всi типи файлiв (*.*)",0h,"*.*",0,0
titl db "Лабораторна робота № 3",0
;=====================================================
.data? ; неініціалізовані дані (з'являються одразу ж після старту)
BUF1 db 2000 dup(?)
dir db 260 dup(?) ; dup - повторити
.code
Start: Call GetCurrentDirectoryA,260,offset dir
call GetOpenFileNameA,offset S1 ; вибір файлу
push 0
push 0h ; файл з довільними атрибутами
push OPEN_ALWAYS ; відкрити існуючий або створити новий
push 0 ; без атрибутів безпеки
push 1h ; дозволено спільний доступ по читанню
push 80000000h ; читати файл
push offset openname ; адреса імені файлу
call CreateFileA
mov hFile,eax ; отримали хендл файлу
push 0
push offset SizeRead ; адреса змінної скільки байтів прочитано
push 2000 ; скільки байтів можна записати
push offset BUF1 ; адреса початку блоку
push hFile ; хендл файлу
call ReadFile ; функція читання файлу
push 0
push offset title1
push offset BUF1 ; вивід блоку пам’яті на екран
push 0
call MessageBoxA
push hFile
call CloseHandle ; закрити файл
push 0
call ExitProcess ; повернення у Windows
end Start
Лабораторна робота 3d
.386
.model flat,STDCALL
extrn CreateFileA:Proc
extrn GlobalAlloc:Proc
extrn GlobalLock:Proc
extrn ReadFile:Proc
extrn WriteFile:Proc
extrn GetLastError:Proc
extrn MessageBoxA:Proc
extrn CloseHandle:Proc
extrn GlobalUnlock:Proc
extrn GlobalFree:Proc
extrn ExitProcess:Proc
extrn lstrlen:Proc
extrn GetOpenFileNameA:Proc
extrn GetCurrentDirectoryA:Proc
extrn GetFileTime:Proc
extrn FileTimeToSystemTime:Proc
FILE_BEGIN equ 0
FILE_END equ 2
OPEN_ALWAYS equ 4
;---------------------------------------------------------------
.data
title1 db 'Лабораторна робота №3 вибір файлу '
openname db 'Test3.txt',250 dup(0)
TEMP1 dd 0
hFile dd 0
hMemory dd 0 ; Хендл блоку пам’яті
pMemory dd 0 ; Адреса блоку пам’яті
SizeRead dd 0
;=================================================
S1:
FSize dd 76 ; довжина цiєї структури;
Howner dd 0 ; вказiвник вiкна-власника або 0;
AppHWnd dd 0 ; вказiвник модуля-власника;
Filters dd offset filter_tab ; вказiвник на перелiк типiв файлiв;
CustFilters dd 0 ; вказiвник на перелiк типiв файлiв якi дозволенi користувачевi;
CstFltSize dd 0 ; довжина буферу на який вказує CustFilters;
CurFilter dd 3 ; iндекс вибраного фiльтру (1,2,3,...) або 0;
CurFileName dd offset openname ; вказiвник на повне iм'я файлу, наприклад, на “С:\dir1\dir2\file.ext”,0;
CurFlNmSize dd 512 ; довжина буферу вказаного в CurFileName;
CurFile dd 0 ; вказiвник на iм'я файлу з розширенням;
CurFlSize dd 0 ; довжина буферу вказаного в CurFile;
InitialDir dd offset dir ; вказiвник на каталог файлу або 0 для даного каталога;
DlgTitle dd offset titl ; вказiвник на назву вiкна;
Flags dd 00h ; тип вiкна, яке вiдкриває файл (може бути 200h);
FileOffset dw 0 ; повертає довжину повного шляху, наприклад=13 якщо користувач ввів рядок “С:\dir1\dir2\file.asm”;
ExtOffset dw 0 ; змiщення вiд початку рядка до розширення (в даному прикладi =18) або 0 якщо розширення немає;
Extension dd 0 ; вказiвник на стандартне розширення, яке буде додано до iменi, якщо розширення немає (або 0);
CustData dd 0 ; вказiвник на данi для hook-процедури;
HookProc dd 0 ; вказiвник на hook-процедуру, якщо вона дозволена у Flags;
TmplateRsc dd 0 ; вказiвник на шаблон ресурсiв, якщо вiн передбачений у Flags;
; додаткові змінні до структури:
filter_tab db "Графiчнi файли (*.BMP)",0h,"*.BMP",0
db "Текстовi файли (*.TXT)",0,"*.txt",0
db "Лабораторнi роботи (*.ASM)",0,"*.asm",0
db "Всi типи файлiв (*.*)",0h,"*.*",0,0
titl db "Лабораторна робота № 3 Виконав Олександр Головач",0
;----------------------------------------------
FORMAT_STRING:
db ' Системний час:',0dh,0ah,0dh,0ah
db ' Рiк: %ld',0dh,0ah
db ' Мiсяць: %ld',0dh,0ah
db ' День тижня: %ld',0dh,0ah
db ' Число: %ld',0dh,0ah
db ' Година: %ld',0dh,0ah
db ' Хвилин: %ld',0dh,0ah
db 0
Time_struc:
wYear dw 0 ; Рік
wMonth dw 0 ; Місяць
wDayOfWeek dw 0 ; День тиждня
wDay dw 0 ; Число
wHour dw 0 ; Година
wMinute dw 0 ; Хвилина
wSecond dw 0 ; Секунда
wMilliseconds dw 0 ; Мілісекунда
Time_title1 db ' Час створення файлу (Олександр Головач)',0
Time_title2 db ' Час останнього доступу (Олександр Головач)',0
Time_title3 db ' Час останнього запису (Олександр Головач)',0
TIME_STRING db 2000 dup (0)
;==============================================================
;=====================================================
.data? ; неініціалізовані дані (з'являються одразу ж після старту)
BUF1 db 2000 dup(?)
dir db 260 dup(?) ; dup - повторити
CreationTime dq ?
LastAccessTime dq ?
LastWriteTime dq ?
.code ;
Start: Call GetCurrentDirectoryA,260,offset dir
call GetOpenFileNameA,offset S1 ; вибір файлу
push 0
push 0h ; файл з довільними атрибутами
push OPEN_ALWAYS ; відкрити існуючий або створити новий
push 0 ; без атрибутів безпеки
push 1h ; дозволено спільний доступ по читанню
push 80000000h ; читати файл
push offset openname ; адреса імені файлу
call CreateFileA
mov hFile,eax ; отримали хендл файлу
push 0
push offset SizeRead ; адреса змінної скільки байтів прочитано
push 2000 ; скільки байтів можна записати
push offset BUF1 ; адреса початку блоку
push hFile ; хендл файлу
call ReadFile ; функція читання файлу
push 0
push offset title1
push offset BUF1 ; вивід блоку пам’яті на екран
push 0
call MessageBoxA
call GetFileTime,hFile,offset CreationTime, offset LastAccessTime,offset LastWriteTime
call FileTimeToSystemTime, offset CreationTime,offset Time_struc
call PRINT_TIME, offset Time_title1
call FileTimeToSystemTime, offset LastAccessTime,offset Time_struc
call PRINT_TIME, offset Time_title2
call FileTimeToSystemTime, offset LastWriteTime,offset Time_struc
call PRINT_TIME, offset Time_title3
push hFile
call CloseHandle ; закрити файл
push 0
call ExitProcess ; повернення у Windows
;=================================================
Extrn _wsprintfA:Proc
PRINT_TIME proc P1:dword
xor eax,eax ; EAX=0
mov ax,wMinute
push eax ; наступні параметри з стеку не забираються
mov ax,wHour
push eax
mov ax,wDay
push eax
mov ax,wDayOfWeek
push eax
mov ax,wMonth
push eax
mov ax,wYear
push eax
push offset FORMAT_STRING
push offset TIME_STRING
call _wsprintfA ; Вивід параметрів
add esp,4*8 ; та очищення стеку
push 0h
push P1
push offset TIME_STRING
push 0
call MessageBoxA
ret
endp
end Start
Лабораторна робота 3e
.386
.model flat,STDCALL
extrn CreateFileA:Proc
extrn GlobalAlloc:Proc
extrn GlobalLock:Proc
extrn ReadFile:Proc
extrn WriteFile:Proc
extrn GetLastError:Proc
extrn MessageBoxA:Proc
extrn CloseHandle:Proc
extrn GlobalUnlock:Proc
extrn GlobalFree:Proc
extrn ExitProcess:Proc
extrn lstrlen:Proc
extrn GetOpenFileNameA:Proc
extrn GetCurrentDirectoryA:Proc
extrn ShellExecuteA:Proc
FILE_BEGIN equ 0
FILE_END equ 2
OPEN_ALWAYS equ 4
;---------------------------------------------------------------
.data
title1 db 'Лабораторна робота №3 вибір файлу '
openname db 'Test3.txt',250 dup(0)
TEMP1 dd 0
hFile dd 0
hMemory dd 0 ; Хендл блоку пам’яті
pMemory dd 0 ; Адреса блоку пам’яті
SizeRead dd 0
;=================================================
S1:
FSize dd 76 ; довжина цiєї структури;
Howner dd 0 ; вказiвник вiкна-власника або 0;
AppHWnd dd 0 ; вказiвник модуля-власника;
Filters dd offset filter_tab ; вказiвник на перелiк типiв файлiв;
CustFilters dd 0 ; вказiвник на перелiк типiв файлiв якi дозволенi користувачевi;
CstFltSize dd 0 ; довжина буферу на який вказує CustFilters;
CurFilter dd 3 ; iндекс вибраного фiльтру (1,2,3,...) або 0;
CurFileName dd offset openname ; вказiвник на повне iм'я файлу, наприклад, на “С:\dir1\dir2\file.ext”,0;
CurFlNmSize dd 512 ; довжина буферу вказаного в CurFileName;
CurFile dd 0 ; вказiвник на iм'я файлу з розширенням;
CurFlSize dd 0 ; довжина буферу вказаного в CurFile;
InitialDir dd offset dir ; вказiвник на каталог файлу або 0 для даного каталога;
DlgTitle dd offset titl ; вказiвник на назву вiкна;
Flags dd 00h ; тип вiкна, яке вiдкриває файл (може бути 200h);
FileOffset dw 0 ; повертає довжину повного шляху, наприклад=13 якщо користувач ввів рядок “С:\dir1