WinInet 関数、つまり InternetOpen と InternetOpenURL を使用して、SSL 対応の Web サイトからファイルをダウンロードする単純な小さな関数に取り組んでいます。ERROR_INTERNET_INVALID_CAテストサーバーで自己署名証明書を使用していたため、最初は InternetOpenURL の呼び出しに (12045) で失敗していましたが、 ( http://support.microsoft.com/kb/q182888/ ) 修正INTERNET_OPTION_SECURITY_FLAGSオプションにさまざまなフラグを渡すために InternetQueryOption/InternetSetOption の組み合わせを使用しているようです。ただし、現在、InternetQueryOption は、ERROR_INTERNET_INCORRECT_HANDLEGetLastError() からの (12018) 応答で失敗します。なぜこれが当てはまるのでしょうか?以前は非 SSL InternetOpenURL で正常に機能していた InternetOpen から直接取得したハンドルを使用しています。これは正しいハンドルではないでしょうか。
実際のコード (別のコンピューター) はありませんが、次のコードと非常によく似ており、InternetGetOption で次のように失敗しますERROR_INTERNET_INCORRECT_HANDLE。
HINTERNET hReq = InternetOpen(...)
if (!hReq) { printf("InternetOpen Error: %d", GetLastError()); }
DWORD dwFlags = 0;
DWORD dwBuffLen = sizeof(dwFlags);
BOOL ret = false;
ret = InternetQueryOption(hReq, INTERNET_OPTION_SECURITY_FLAGS,
(LPVOID)&dwFlags, &dwBuffLen);
if (!ret) { printf("InternetQueryOption Error: %d", GetLastError()); }
dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA;
ret = InternetSetOption(hReq, INTERNET_OPTION_SECURITY_FLAGS,
&dwFlags, sizeof (dwFlags) );
if (!ret) { printf("InternetSetOption Error: %d", GetLastError()); }
InternetOpenURL(hReq, ...)