Где 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

Чтобы убедиться, что все данные получены, приложение должно продолжать вызывать InternetReadFile функция, пока функция не вернет TRUE и параметр lpdwNumberOfBytesRead не станет равным нулю. Это особенно важно, если запрошенные данные записываются в кеш, потому что в противном случае кеш не будет должным образом обновлен, а загруженный файл не будет зафиксирован в кеше. Обратите внимание, что кэширование происходит автоматически, если исходный запрос на открытие потока данных не устанавливает INTERNET_FLAG_NO_CACHE_WRITE флаг.

Функция InternetOpenUrl

INTERNET_FLAG_NO_CACHE_WRITE
Не добавляет возвращенную сущность в кеш.

Варианты флагов

INTERNET_OPTION_DATAFILE_NAME
33

Извлекает строковое значение, которое содержит имя файла, поддерживающего загруженный объект. Этот флаг действителен после InternetOpenUrl, FtpOpenFile, GopherOpenFile, или же HttpOpenRequest завершено. Эта опция может быть запрошена только InternetQueryOption,

Другие вопросы по тегам