-1

我忘记了如何用 C++ 编程,我希望我的 exutable 将自己复制到另一条路径。我找到了一个可以做我想做的事情的代码,但是有一个我不知道如何解决的转换错误:

void Victim::replicate()
{
  char filename[ MAX_PATH ];
  char newLocation[]="C:\\Users\\myUsername\\Desktop\\";
  BOOL stats=0;
  DWORD size = GetModuleFileNameA( NULL, filename, MAX_PATH );
  CopyFile(filename, newLocation, stats);
      
}

使用CopyFile函数时出现错误,它需要 LPCWSTR 类型作为文件名newLocation但是如果我将这些变量声明为LPCWSTR,则GetModuleFileNameA函数将不再起作用。

4

1 回答 1

1

您的项目似乎W默认设置为使用 API 函数的版本。您可以通过调用A(Ansi) 版本的GetModuleFileName. 不要 - 或做,但你还需要打电话给CopyFileA.

强制使用 Ansi 版本:

void Victim::replicate()
{
  char filename[ MAX_PATH ];
  char newLocation[] = "C:\\Users\\myUsername\\Desktop\\";
  BOOL stats=0;
  DWORD size = GetModuleFileNameA( NULL, filename, MAX_PATH );
  CopyFileA(filename, newLocation, stats);     
}

强制使用广泛版本:

void Victim::replicate()
{
  wchar_t filename[ MAX_PATH ];
  wchar_t newLocation[] = L"C:\\Users\\myUsername\\Desktop\\";
  BOOL stats=0;
  DWORD size = GetModuleFileNameW( NULL, filename, MAX_PATH );
  CopyFileW(filename, newLocation, stats);     
}

使用项目默认值:

void Victim::replicate()
{
  TCHAR filename[ MAX_PATH ];
  TCHAR newLocation[] = _T("C:\\Users\\myUsername\\Desktop\\");
  BOOL stats=0;
  DWORD size = GetModuleFileName( NULL, filename, MAX_PATH );
  CopyFile(filename, newLocation, stats);     
}
于 2020-12-18T16:21:00.340 回答