繁体   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