0

我正在尝试挂钩 API InternetReadFile 和 InternetWriteFile。InternetReadFile 从提供给它的句柄中读取数据(根据文档)。这些数据存储在哪里?在内存/RAM中?

InternetWriteFile 将数据写入打开的 Internet 文件(根据文档)。这是否意味着它将数据存储在磁盘中?也许在临时互联网文件文件夹中?

当我在 Hook_InternetReadFile 中调用 InternetQueryOption 函数(选项=INTERNET_OPTION_DATAFILE_NAME)时,它会在临时互联网文件文件夹中返回一个文件名。而从 Hook_InternetWriteFile 调用该函数时会失败,错误代码为 12028 (=ERROR_INTERNET_ITEM_NOT_FOUND)。这是否意味着 InternetReadFile 将数据写入磁盘?

我很困惑。请帮忙。

4

1 回答 1

0

如果您阅读文档,它会告诉您InternetReadFile()将接收到的数据写入用户提供的内存缓冲区,并且还将数据写入缓存,除非明确禁用缓存:

InternetReadFile 函数

为确保检索到所有数据,应用程序必须继续调用该InternetReadFile函数,直到该函数返回 TRUE 并且 lpdwNumberOfBytesRead 参数等于 0。如果将请求的数据写入缓存,这一点尤其重要,因为否则缓存将无法正确更新,下载的文件也不会提交到缓存。请注意,除非打开数据流的原始请求设置了INTERNET_FLAG_NO_CACHE_WRITE标志,否则缓存会自动发生。

InternetOpenUrl 函数

INTERNET_FLAG_NO_CACHE_WRITE
不将返回的实体添加到缓存中。

选项标志

INTERNET_OPTION_DATAFILE_NAME
33

检索一个字符串值,其中包含支持下载实体的文件的名称。此标志在InternetOpenUrlFtpOpenFileGopherOpenFileHttpOpenRequest完成后有效。该选项只能由 查询InternetQueryOption

于 2015-01-13T17:42:38.357 回答