gpt4 book ai didi

c++ - WriteFile 将文件名写入文件

转载 作者:太空宇宙 更新时间:2023-11-04 13:44:41 27 4
gpt4 key购买 nike

我遇到了一个很奇怪的问题。

我正在连接到 Xbox 360 上的 Winsock 功能,发送。在我试图从中转储 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 钩子(Hook)

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 小时,愚蠢的错误。

我没有检查缓冲区的大小,因此我没有分配足够的内存。

关于c++ - WriteFile 将文件名写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26448826/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com