Я пытаюсь открыть файл для чтения, прочитать из него, манипулировать данными и затем записать его обратно в файл.Я должен использовать функции CreateFile
, GetFileSize
, VirtualAlloc
, ReadFile
/ WriteFile
, CloseHandle
и VirtualFree
(barebones Windows API).
Мне удалосьоткрыть файл, более или менее, но ReadFile
не удается с ERROR_NOACCESS
.GetFileSize
возвращает правильный размер файла, поэтому до этого должно быть все в порядке.
Что я делаю не так?
.386
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
.data
FileIn db 'input.txt',0 ; file to read
FileOut db 'output.txt',0 ; file to write
.data?
hFile dd ?
FileSize dd ?
hMem dd ?
BytesRead dd ?
.code
start:
invoke CreateFile,
ADDR FileIn,
GENERIC_READ,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0
mov hFile, eax
invoke GetFileSize,
eax,
0
mov FileSize, eax
inc eax
invoke VirtualAlloc,
0,
eax,
MEM_COMMIT OR MEM_RESERVE,
PAGE_READWRITE
mov eax, hMem
invoke ReadFile,
hFile,
hMem,
FileSize,
ADDR BytesRead,
0
invoke CloseHandle,
hFile
(...)
РЕДАКТИРОВАТЬ: Я изменил PAGE_READONLY
до PAGE_READWRITE
, но проблема остается ...