0

API InternetReadFile および InternetWriteFile をフックしようとしています。InternetReadFile は、提供されたハンドルからデータを読み取ります (ドキュメントに準拠)。このデータはどこに保存されますか? メモリ/RAM内?

InternetWriteFile は、開いているインターネット ファイルにデータを書き込みます (ドキュメントに準拠)。それはデータをディスクに保存するということですか?多分一時インターネットファイルフォルダに?

Hook_InternetReadFile で InternetQueryOption 関数 (option=INTERNET_OPTION_DATAFILE_NAME) を呼び出すと、temporary-internet-files フォルダーにファイル名が返されます。一方、エラー コード 12028 (=ERROR_INTERNET_ITEM_NOT_FOUND) で Hook_InternetWriteFile から呼び出された場合、関数は失敗します。これは、InternetReadFile がデータをディスクに書き込むということですか?

私は混乱しています。助けてください。

4

1 に答える 1

0

ドキュメントを読むとInternetReadFile()、受信したデータをユーザー提供のメモリ バッファーに書き込み、キャッシュが明示的に無効にされていない限り、データをキャッシュにも書き込むことがわかります。

InternetReadFile 関数

すべてのデータを確実に取得するにはInternetReadFile、関数が TRUE を返し、lpdwNumberOfBytesRead パラメータがゼロになるまで、アプリケーションで関数を呼び出し続ける必要があります。これは、要求されたデータがキャッシュに書き込まれる場合に特に重要です。そうしないと、キャッシュが適切に更新されず、ダウンロードされたファイルがキャッシュにコミットされないためです。データ ストリームを開く元の要求でINTERNET_FLAG_NO_CACHE_WRITEフラグが設定されていない限り、キャッシュは自動的に行われることに注意してください。

InternetOpenUrl 関数

INTERNET_FLAG_NO_CACHE_WRITE
返されたエンティティをキャッシュに追加しません。

オプションフラグ

INTERNET_OPTION_DATAFILE_NAME
33

ダウンロードされたエンティティをサポートするファイルの名前を含む文字列値を取得します。このフラグは、 、 、 、または が完了した後InternetOpenUrlFtpOpenFile有効GopherOpenFileですHttpOpenRequest。このオプションは、によってのみ照会できますInternetQueryOption

于 2015-01-13T17:42:38.357 に答える