2014-10-19 136 views
1

我遇到了一個很奇怪的問題。WriteFile將文件名寫入文件

我連接到Xbox 360上的Winsock函數,發送。這個函數在我試圖轉儲Http Request信息的應用程序中被稱爲a-lot。

首先,我將展示這些代碼,並解釋我的問題:

將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個小時,這個愚蠢的錯誤。

我沒有檢查緩衝區的大小,因此我沒有分配足夠的內存。