[英]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.