需要帮助,如何在 C++ WriteFile() 中转换 bool 类型数据?

Need help, How to convert bool type data in C++ WriteFile()?

我在重写文件时遇到问题,出现此错误。也许有人可以告诉我如何转换数据类型以便重写文件

.\wInaPi.cpp: In function 'INT main(INT, CHAR**)':
.\wInaPi.cpp:30:54: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
30 |     PIMAGE_DOS_HEADER image_dos_header = (PIMAGE_DOS_HEADER) file_read;
                      |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.\wInaPi.cpp:76:63: error: invalid conversion from 'BOOL' {aka 'int'} to 'LPCVOID' {aka 'const void*'} [-fpermissive]

           76 |     WriteFile(PEFile, file_read, file_size, &returned_bytes, NULL);
              |                       ^~~~~~~~~
              |                       |
              |                      BOOL {aka int}
        
    In file included from C:/mingw64/x86_64-w64-mingw32/include/winbase.h:18,
                     from C:/mingw64/x86_64-w64-mingw32/include/windows.h:70,
                     from .\wInaPi.cpp:1:
    
    C:/mingw64/x86_64-w64-mingw32/include/fileapi.h:186:62: note:   initializing argument 2 of 'WINBOOL WriteFile(HANDLE, LPCVOID, DWORD, LPDWORD, LPOVERLAPPED)'
    
    186 |   WINBASEAPI WINBOOL WINAPI WriteFile (HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped);
              |

我的部分代码

HANDLE PEfile = CreateFileA(target_process, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (PEfile != INVALID_HANDLE_VALUE) 
{  
       DWORD file_size = GetFileSize(x_file, NULL);  
       PBYTE file_buffer = PBYTE(LocalAlloc(LPTR, file_size)); 
       DWORD returned_bytes;
       BOOL file_read = ReadFile(x_file, file_buffer, file_size,  &returned_bytes, NULL);
    if (file_read == TRUE && returned_bytes == file_size) 
    {
      if (SetFilePointer(PEfile, 0, NULL, FILE_BEGIN) !=    INVALID_SET_FILE_POINTER)
     { 
      WriteFile(PEfile, file_read, file_size, &returned_bytes, NULL);  // got error here 
     } 
    }
}

我不知道 file_read 是什么,但编译器告诉你:

  • 您不应该尝试将其转换为 PIMAGE_DOS_HEADER;
  • WriteFile 需要一个指针作为第二个参数:WriteFile( PEFile, &file_read,....

[编辑 - 问题中添加的新信息]

file_readReadFile 的结果,它是 BOOL(成功或失败)。无论如何,您很可能不想写这个:第三个参数必须是您尝试写入的数据的大小: WriteFile(PEfile, &file_read, sizeof(file_read), &returned_bytes, NULL);

这将解决您的编译问题,但不会解决逻辑问题。我们无法帮助您,因为不清楚您要做什么。可能是 WriteFile(PEfile, file_buffer, file_size, &returned_bytes, NULL);?