Где API InternetReadFile сохраняет данные, которые он читает?
Я пытаюсь подключить API InternetReadFile и InternetWriteFile. InternetReadFile считывает данные из предоставленного ему дескриптора (в соответствии с документацией). Где хранятся эти данные? В памяти / оперативке?
InternetWriteFile записывает данные в открытый интернет-файл (в соответствии с документацией). Означает ли это, что он хранит данные на диске? В папке временных-интернет-файлов может быть?
Когда я вызываю функцию InternetQueryOption (с параметром =INTERNET_OPTION_DATAFILE_NAME) в Hook_InternetReadFile, он возвращает имя файла в папке временных интернет-файлов. Принимая во внимание, что функция завершается ошибкой при вызове из Hook_InternetWriteFile с кодом ошибки 12028 (=ERROR_INTERNET_ITEM_NOT_FOUND). Означает ли это, что InternetReadFile записывает данные на диск?
Я сбит с толку. Пожалуйста помоги.
1 ответ
Если вы читаете документацию, она говорит вам, что InternetReadFile()
записывает полученные данные в предоставленный пользователем буфер памяти, а также записывает данные в кеш, если только кеширование явно не отключено:
Чтобы убедиться, что все данные получены, приложение должно продолжать вызывать
InternetReadFile
функция, пока функция не вернет TRUE и параметр lpdwNumberOfBytesRead не станет равным нулю. Это особенно важно, если запрошенные данные записываются в кеш, потому что в противном случае кеш не будет должным образом обновлен, а загруженный файл не будет зафиксирован в кеше. Обратите внимание, что кэширование происходит автоматически, если исходный запрос на открытие потока данных не устанавливаетINTERNET_FLAG_NO_CACHE_WRITE
флаг.
INTERNET_FLAG_NO_CACHE_WRITE
Не добавляет возвращенную сущность в кеш.
INTERNET_OPTION_DATAFILE_NAME
33Извлекает строковое значение, которое содержит имя файла, поддерживающего загруженный объект. Этот флаг действителен после
InternetOpenUrl
,FtpOpenFile
,GopherOpenFile
, или жеHttpOpenRequest
завершено. Эта опция может быть запрошена толькоInternetQueryOption
,