winapi — используйте writefile для записи необработанного переполнения стека usb

это мой код:

#include <string.h>
#include <malloc.h>
#include <stdlib.h>
#include <math.h>
#include <assert.h>
#include <Windows.h>
#include <stdio.h>
#include <iostream>

int main(int argc, CHAR* argv[]) {
PVOID data[1024];
DWORD dwBytesRead = 0;
DWORD dwBytesWrite = 512;
HANDLE hFile = CreateFile(L"\\\\.\\E:", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
if (hFile == INVALID_HANDLE_VALUE) {
printf("Error %x", GetLastError());
return 1;
}

PVOID ToBe = "hello world from usb";
if (WriteFile(hFile,&ToBe,512,&dwBytesWrite,    NULL) == 0)
{
printf("writeFile error: %x", GetLastError());
return 1;
}

while (ReadFile(hFile, &data, 512, &dwBytesRead, NULL) != 0) {
printf("%s", data);
}
if (ReadFile(hFile, &data, 512, &dwBytesRead, NULL) == 0) {
printf("ReadFile error: %x", GetLastError());
return 1;
}
return 0;
}

Теперь это похоже на работу, но я не вижу «привет мир» на USB …
что я сделал не так?

(p.s. после того, как я запустил программу, я не могу снова открыть свой USB, не отформатировав его, поэтому что-то действительно записано, но я не могу увидеть это с помощью радиальной функции сразу после этого …)

-2

Решение

Вы пишете 512 байт, и это увеличивает указатель файла на 512 байт. Вы тогда читаете с этого момента. Вместо этого вам нужно искать указатель файла обратно в начало. использование SetFilePointerEx сделать это.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]