2014-10-19 2 views
1

Я получаю довольно странную проблему.WriteFile записывает имя файла в файл

Я подключаюсь к функции Winsock на Xbox 360, отправьте. Эта функция называется a-lot в приложении, с которого я пытаюсь сбрасывать информацию запроса 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; 
} 

Winsock крючок

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.

ответ

0

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

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