Где InternetReadFile API сохраняет прочитанные данные?

Я пытаюсь подключить API InternetReadFile и InternetWriteFile. InternetReadFile считывает данные из предоставленного ему дескриптора (согласно документации). Где хранятся эти данные? В памяти/ОЗУ?

InternetWriteFile записывает данные в открытый интернет-файл (согласно документации). Означает ли это, что он хранит данные на диске? Может быть, в папке временных интернет-файлов?

Когда я вызываю функцию InternetQueryOption (с параметром = INTERNET_OPTION_DATAFILE_NAME) в Hook_InternetReadFile, она возвращает имя файла в папке временных интернет-файлов. В то время как функция завершается сбоем при вызове из Hook_InternetWriteFile с кодом ошибки 12028 (=ERROR_INTERNET_ITEM_NOT_FOUND). Означает ли это, что InternetReadFile записывает данные на диск?

Я сбит с толку. Пожалуйста помоги.


person gmaster    schedule 13.01.2015    source источник
comment
Я бы подумал, что документы для функции совершенно ясно говорят о том, что данные хранятся в переданном ей буфере.   -  person Jonathan Potter    schedule 13.01.2015


Ответы (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.

person Remy Lebeau    schedule 13.01.2015