InternetReadFile API在哪里保存它读取的数据?

时间:2015-01-13 10:08:13

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

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

InternetWriteFile将数据写入打开的Internet文件(根据文档)。这是否意味着它将数据存储在磁盘中?在temporary-internet-files文件夹中可能吗?

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

我很困惑。请帮忙。

1 个答案:

答案 0 :(得分:0)

如果您阅读文档,它会告诉您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查询。

相关问题