次の方法で共有


WinHttpCloseHandle 関数 (winhttp.h)

WinHttpCloseHandle 関数は、1 つの HINTERNET ハンドルを閉じます (WinHTTP の HINTERNET ハンドルに関するページを参照してください)。

構文

WINHTTPAPI BOOL WinHttpCloseHandle(
  [in] HINTERNET hInternet
);

パラメーター

[in] hInternet

閉じる有効な HINTERNET ハンドル ( WinHTTP の HINTERNET ハンドルを参照)。

戻り値

ハンドルが正常に閉じられた場合は TRUE、それ以外の場合は FALSE。 詳細なエラー情報を得るには、GetLastError を呼び出します。 返されるエラー コードは次のとおりです。

エラー コード 説明
ERROR_WINHTTP_SHUTDOWN
WinHTTP 関数のサポートがシャットダウンまたはアンロードされています。
ERROR_WINHTTP_INTERNAL_ERROR
内部エラーが発生しました。
ERROR_NOT_ENOUGH_MEMORY
要求された操作を完了するのに十分なメモリが使用できませんでした。 (Windows エラー コード)

注釈

WinHTTP が非同期モードで使用されている場合 (つまり、WinHttpOpenWINHTTP_FLAG_ASYNCが設定されている場合) でも、この関数は同期的に動作します。 戻り値は成功または失敗を示します。 詳細なエラー情報を得るには、GetLastError を呼び出します。

閉じているハンドルの状態コールバックが登録されていて、ハンドルが NULL 以外のコンテキスト値で作成された場合は、 WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING コールバックが行われます。 これは、ハンドルから行われた最後のコールバックであり、ハンドルが破棄されていることを示します。

アプリケーションは、WinHttpCloseHandle を使用して HINTERNET 要求ハンドルを閉じることで、進行中の非同期要求を終了できます。 次の点に留意してください。

  • アプリケーションが WinHTTP ハンドルで WinHttpCloseHandle を 呼び出した後、そのハンドルを使用して他の WinHTTP API 関数をどのスレッドからでも呼び出すことはできません。
  • WinHttpCloseHandle の呼び出しが返された後でも、WinHTTP はハンドルを非同期的に破棄できるため、閉じたハンドルのコールバックを受け取るためにアプリケーションを準備する必要があります。 非同期要求が正常に完了できなかった場合、コールバックはWINHTTP_CALLBACK_STATUS_REQUEST_ERROR通知を受け取ります。
  • アプリケーションがコンテキスト データ構造またはオブジェクトをハンドルに関連付ける場合、コールバック関数が WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING 通知を受け取るまで、そのバインディングを維持する必要があります。 これは、メモリからハンドル オブジェクトを削除する前に WinHTTP が送信する最後のコールバック通知です。 WINHTTP_CALLBACK_STATUS_HANDLE_CLOSINGコールバック通知を受信するには、アプリケーションで WinHttpSetStatusCallback 呼び出しで WINHTTP_CALLBACK_FLAG_HANDLES フラグを有効にする必要があります。
  • WinHttpCloseHandle を呼び出す前に、アプリケーションは WinHttpSetStatusCallback を呼び出して、これ以上コールバックを行う必要がないことを示すことができます。

    WinHttpSetStatusCallback( hRequest, NULL, 0, 0 );

    コンテキスト データ構造は、 WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING 通知を待つ必要はなく、すぐに解放されるように見えるかもしれませんが、これは当てはまらない場合があります。WinHTTP は WinHttpSetStatusCallback をワーカー スレッドで発生したコールバックと同期しません。 その結果、コールバックは既に別のスレッドから進行中であり、コールバック関数ポインターを NULL にしてハンドルのコンテキスト データ構造を削除した後でも、アプリケーションはコールバック通知を受け取る可能性があります。 このような競合状態の可能性があるため、 WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING 通知を受信するまでコンテキスト構造を解放することは控えめにしてください。

アプリケーションでは、同期要求で WinHttpCloseHandle を呼び出さないでください。 これにより、競合状態が作成される可能性があります。 詳細については、「 WinHTTP の HINTERNET ハンドル 」を参照してください。
メモ Windows XP と Windows 2000 については、WinHttp スタート ページの 「ランタイム要件 」セクションを参照してください。
 

要件

要件
サポートされている最小のクライアント Windows XP、Windows 2000 Professional SP3 [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2003、Windows 2000 Server SP3 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー winhttp.h
Library Winhttp.lib
[DLL] Winhttp.dll
再頒布可能パッケージ Windows XP および Windows 2000 では、WinHTTP 5.0 およびインターネット エクスプローラー 5.01 以降がインストールされています。

こちらもご覧ください

Microsoft Windows HTTP Services (WinHTTP) について

WinHTTP バージョン

WinHttpConnect

WinHttpOpen

WinHttpOpenRequest