2015-01-21 2 views
-3

Почему, когда я пытаюсь написать сектор 33, GetLastError возвращает 5?сектор записи 33 с Windows API

Мой masm32 исходный код:

include \masm32\include\masm32rt.inc 


.data? 
hDrv HANDLE ? 


buffer byte 512 dup(?) 
tmp512 byte 512 dup(?) 

.code 

start: 

STRING p,"\\.\PhysicalDrive0" 

    call main 
    inkey 
    exit 

main proc 
local i:dword 


invoke CreateFile,addr p,GENERIC_READ or GENERIC_WRITE,NULL,NULL,OPEN_EXISTING,0,0 
mov hDrv,eax 

mov i,1 

.while TRUE 
invoke ReadFile,hDrv,addr buffer,512,addr tmp512,NULL 
invoke WriteFile,hDrv,addr buffer,512,addr tmp512,NULL 
.if eax==1 
print str$(i),13,10,0 
inc i 
.else 
invoke GetLastError 
print str$(eax),13,10,0 
.endif 
.endw 

invoke CloseHandle,hDrv 

    ret 

main endp 


end start 
+0

Работает ли он с другими секторами? – Mehrdad

+0

Откуда вы знаете, что ошибка на ReadFile? Вы не проверяете возвращаемые значения до вызова WriteFile. Вам также необходимо проверить возвращаемое значение CreateFile. –

+0

Да, он работает с другими секторами! –

ответ

0

объясняются здесь Коды ошибок ...

https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382%28v=vs.85%29.aspx

ERROR_ACCESS_DENIED

5 (0x5) 

Вероятно, разрешение вопроса.

Access is denied. 
+0

Я знаю, но почему это происходит? –

+0

попробуйте сделать его администратором. – user2260040

+0

Да, я знаю, и я попробовал, но не работает! –