.386
.Model Flat,StdCall
Include ..\Include\Kernel32.inc
IncludeLib ..\Lib\Kernel32
.Code
hFile DD ?
hHeap DD ?
dwBytes DD ?
lpBuf DD ?
DLLMain:XOr EAX,EAX
Inc EAX
Ret 12
GetDescription Proc C Export
;Открытие файла
Invoke CreateFile,[ESP+28],2147483648,0,0,3,134217728,0
Test EAX,EAX
JS NoFile
;Получение его длины
Mov hFile,EAX
Invoke GetFileSize,EAX,0
Test EAX,EAX
JZ ZeroLen
;Получение дескриптора кучи
Mov dwBytes,EAX
Call GetProcessHeap
Test EAX,EAX
JZ NoMemC
;Выделение памяти
Mov hHeap,EAX
Inc dwBytes
Invoke HeapAlloc,hHeap,8,dwBytes
JZ NoMemA
Mov lpBuf,EAX
Invoke ReadFile,hFile,lpBuf,dwBytes,Offset dwBytes,0
JZ NoData
Invoke CloseHandle,hFile
Mov EAX,lpBuf
Ret 4
NoData:Invoke HeapFree,hHeap,0,lpBuf
Mov EAX,4
Ret 4
NoMemA:Invoke HeapDestroy,hHeap
Invoke CloseHandle,hFile
Mov EAX,3
NoMemC:Invoke CloseHandle,hFile
XOr EAX,EAX
Inc EAX
Inc EAX
Ret 4
ZeroLen:XOr EAX,EAX
Inc EAX
Ret 4
NoFile:XOr EAX,EAX
Ret 4
GetDescription EndP
End DLLMain
;Коды ошибок:0-файл не открыт,1-файл пуст,2-ошибка создания кучи,3-ошибка выделения памяти,4-ошибка чтения
Проблемы с GetProcessHeap/HeapCreate
Код:
Функция читает данные из файла и возвращает указатель на них(динамически выделенная память) или код ошибки