[英]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*
。
現在,假設您有一個名為FakeData
的std::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.