我正在尝试挂钩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将数据写入磁盘?
我很困惑。请帮忙。
答案 0 :(得分:0)
如果您阅读文档,它会告诉您InternetReadFile()
将收到的数据写入用户提供的内存缓冲区,并且还会将数据写入缓存,除非明确禁用缓存:
为确保检索所有数据,应用程序必须继续调用
InternetReadFile
函数,直到函数返回TRUE且lpdwNumberOfBytesRead参数等于零。 如果将请求的数据写入缓存,这一点尤其重要,否则缓存将无法正确更新,并且下载的文件将不会提交到缓存。请注意,除非打开数据流的原始请求设置INTERNET_FLAG_NO_CACHE_WRITE
标记,否则会自动进行缓存。
INTERNET_FLAG_NO_CACHE_WRITE
不将返回的实体添加到缓存中。
INTERNET_OPTION_DATAFILE_NAME
33检索包含支持下载的实体的文件名称的字符串值。在
InternetOpenUrl
,FtpOpenFile
,GopherOpenFile
或HttpOpenRequest
完成后,此标记有效。此选项只能由InternetQueryOption
查询。