Чтобы WinINet использовал учетные данные менеджера учетных данных, используйте функцию InternetErrorDlg, например:
retry:
BOOL fRet = ::HttpSendRequest(hRequest, NULL, 0, NULL, 0);
DWORD dwError = ::GetLastError();
DWORD statusCode(0);
DWORD statusLen = sizeof(DWORD);
DWORD headerIndex = 0;
::HttpQueryInfo(hRequest, HTTP_QUERY_FLAG_NUMBER | HTTP_QUERY_STATUS_CODE,
&statusCode, &statusLen, &headerIndex);
if (statusCode == HTTP_STATUS_PROXY_AUTH_REQ)
{
DWORD dwFlags = FLAGS_ERROR_UI_FILTER_FOR_ERRORS |
FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS |
FLAGS_ERROR_UI_FLAGS_GENERATE_DATA;
DWORD res =::InternetErrorDlg(GetDesktopWindow(), hRequest,
ERROR_INTERNET_INCORRECT_PASSWORD, dwFlags, NULL);
if (res == ERROR_INTERNET_FORCE_RETRY)
goto retry;
else
return false;
}
InternetErrorDlg вернет ERROR_INTERNET_FORCE_RETRY, если ему удастся получить учетные данные (из CM или запросить пользователя).).
Флаг FLAGS_ERROR_UI_FLAGS_NO_UI (не используется выше) можно использовать, чтобы избежать отображения диалогового окна, запрашивающего у пользователя учетные данные.
Хулио