0

win32 API フック プログラムを開発しています。私の理解では、プログラムが特定のファイルに対して ReadFile を呼び出すと、そのファイルの内容が lpBuffer にコピーされます (以下の定義を参照)。

ReadFile 定義:

BOOL ReadFile(
  HANDLE       hFile,
  LPVOID       lpBuffer,
  DWORD        nNumberOfBytesToRead,
  LPDWORD      lpNumberOfBytesRead,
  LPOVERLAPPED lpOverlapped
);

今、私の目標は、この lpBuffer を変更し、私が提供したコンテンツで満たすことです! EasyHook を使用して ReadFile をフックしています。私はLPVOIDタイプに精通していません。次のコードを使用して、GetCurrentDirectory のコンテンツを変更できました。

 string b = "C:\\my\\altered\\directory";
 DWORD returnLength  = b.length();
 int i;
 for (i = 0; i<b.length(); i++)
 {
    lpBuffer[i] = b[i];
 }
 lpBuffer[i++] = '\0';

GetCurrentDirectory 定義:

DWORD GetCurrentDirectory(
  DWORD  nBufferLength,
  LPTSTR lpBuffer
);

ReadFile (LPVOID lpBuffer) に同様の値を割り当てるにはどうすればよいですか?

4

1 に答える 1

0

タイプ定義は次のLPVOIDとおりです。

#define far
typedef void far *LPVOID;

マクロは何も定義されていません。farこれは、いくつかの歴史的な理由 (バゲージ) によるものだと思います。LPVOIDしたがって、 asをほぼ直接扱うことができますvoid*

そして今、std::vector<uint8_t>名前付きの があるとしますFakeData

if (nNumberOfBytesToRead < FakeData.size()) {
    SetLastError(ERROR_INSUFFICIENT_BUFFER);
    return FALSE;
}

memcpy(lpBuffer, FakeData.data(), FakeData.size());
*lpNumberOfBytesRead = FakeData.size();

SetLastError(ERROR_SUCCESS);
return TRUE;
于 2020-12-22T19:47:25.667 に答える