WriteFile записывает имя файла в файл

У меня довольно странная проблема.

Я подключаюсь к функции Winsock на Xbox 360, отправь. Эта функция часто вызывается в приложении, из которого я пытаюсь получить информацию Http-запроса.

Сначала я покажу код и объясню свою проблему:

Функция WritetoFile.

BOOL WritetoFile(char* filename, char* buffer, DWORD len)
{

// Setup expansion
doMountPath("Hdd:", "\\Device\\Harddisk0\\Partition1");

//print
printf("Creating %s\n", filename);

//create our file
HANDLE fileHandle = CreateFile(filename, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);

//does file exist?
if(fileHandle!=INVALID_HANDLE_VALUE)
{
//print
printf("Writing to file... \n");

//bytes written parameter
DWORD wfbr;

//write to our file
if(WriteFile(fileHandle, (void*)&buffer, len, &wfbr, NULL))
{
printf("File written! (Bytes Written:%u) \n", wfbr);
} else {
printf("Error writing to file: (Error:%u)\n", GetLastError());
}

//close our file handle
CloseHandle(fileHandle);
} else {
printf("Error creating file: (Error:%u)\n", GetLastError());
}

return true;
}

Крючок Винсок

INT WINSOCK_SEND_HOOK(SOCKET s,const char FAR *buf,int len,int flags)
{
memcpy(SocketData.SendData, buf, len);

if(len>40)
{
WINSOCK_SEND_COUNT +=1;

char Filename[40];
sprintf(Filename, "Hdd:\\Dump\\Send\\Winsock_Send_%d.txt", WINSOCK_SEND_COUNT);
WritetoFile(Filename, SocketData.SendData, len);} else { printf("Winsock skipped\n"); }
memset(SocketData.SendData, 0, 0x1388);

return send(s, buf, len, flags);
}

Проблему довольно сложно объяснить. Поэтому, когда я впервые запустил свой DLL-файл для подключения к этой функции, он работал до тех пор, пока не попытался создать Winsock_Send_85.txt. Это печатает это:

  `Creating b0ZEK0EwSDBwSXR2RW5EdXd5ZXFnN1IrLzFQYno4RmN0ZnI2MnNnWWQwb2JXMGlYbEdQRkxGOXFkdHJabiszb1I2MG1vUFlkSjBJVW0xcFB4UzZxWEtqZEVYSjEvQmJtOHhmMUdVMDlZaHA2SUtWZTJjb0ZVU1RsUTlvYXJhc0NDOHJNUitlUDBaQmVSOTNUWVM1TU1hLzB0NlhGZmQ2dE1CVDRKVTRxdzliRUtlRmVvVGgvaVdoMUFBczBpNzhkcXNlVUYwaTlQT3B5ekdyeU9ZTzU0QWYyVXpUSXZiTDMzRWl4SXhzOUJOZDZxaWtDQUlNQmZkNHRYVTNaS2pKZngxRmd3dXE2QnRIYmkySlgxcE9vUjFyVlRpci9iZHdTZTZEOTJDSXFqNkNqM0lSaDY1N3VKUzhOQ3VxaFZpclhTUnZMZlJCN21mTS9aV2dCRUJNWHBVeUdZcGxqOVNGUÿÿexception code=0xc0000005 thread=0xf9000044 address=0x910d0a00 read=0x910d0a00 firstxbWatson: Xbox is restarting`

И вылетает. После перезапуска консоли я снова запускаю ее, и она работает нормально и не вылетает, но теперь она записывает неверные данные в файлы, которые являются одними и теми же повторяющимися данными, даже если буфер указывает на разные данные. Вот что он пишет в файл:

‘ÀÛ(       W
ÿÿÿÿÿÿÿÿ      ÿÿÿÿ‘Á  Hdd:\Dump\Send\Winsock_Send_87.txt   ‚i夀…Ü                  H>

Затем я обнаружил способ предотвратить это, заключающийся в том, чтобы полностью отключить консоль от всех источников питания, но затем все возвращается к первой проблеме.

Пожалуйста, игнорируйте то, что вы считаете ненужным использованием memcpy.

1

Решение

Проблема была решена довольно быстро (смущающе), и я не могу поверить, что я боролся с этим в течение 1 часа, глупая ошибка.

Я не проверял размер буфера, поэтому не выделял достаточно памяти.

0

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


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