簡體   English   中英

如何為 ReadFile 的 LPVOID 緩沖區賦值

[英]How to assign value to LPVOID buffer of ReadFile

我正在開發一個 win32 API 掛鈎程序。 據我了解,當程序為特定文件調用 ReadFile 時,該文件的內容被復制到 lpBuffer(參見下面的定義),

讀取文件定義:

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) 做類似的賦值?

這是LPVOID類型定義:

#define far
typedef void far *LPVOID;

far宏被定義為nothing,我猜是因為一些歷史原因(行李)。 因此,您幾乎可以直接將LPVOID視為void*

現在,假設您有一個名為FakeDatastd::vector<uint8_t> ,只需:

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

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

SetLastError(ERROR_SUCCESS);
return TRUE;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM