【问题标题】:Where does InternetReadFile API save the data it reads?InternetReadFile API 将读取的数据保存在哪里?
【发布时间】:2015-01-13 10:08:13
【问题描述】:

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

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

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

我很困惑。请帮忙。

【问题讨论】:

  • 函数的文档让我很清楚我会想到 - 数据存储在传递给它的缓冲区中。

标签: internet-explorer winapi temp getlasterror api-hook


【解决方案1】:

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

InternetReadFile function

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

InternetOpenUrl function

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

Option Flags

INTERNET_OPTION_DATAFILE_NAME
33

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-16
    • 2012-03-09
    • 2012-07-07
    • 2010-12-20
    • 2011-10-29
    • 2017-03-09
    • 2017-06-23
    • 2015-06-06
    相关资源
    最近更新 更多