As @Remy Lebeau suggested in the comments, you should use `INTERNET_OPTION_PER_CONNECTION_OPTION`. The full solution might look like this:
#include <windows.h>
#include <wininet.h>
#include <iostream>
#pragma comment(lib, "wininet.lib")
int main() {
INTERNET_PER_CONN_OPTION_LIST optionList;
INTERNET_PER_CONN_OPTION options[3];
unsigned long size = sizeof(optionList);
optionList.dwSize = sizeof(optionList);
optionList.pszConnection = NULL;
optionList.dwOptionCount = 3;
optionList.pOptions = options;
options[0].dwOption = INTERNET_PER_CONN_FLAGS;
options[1].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
options[2].dwOption = INTERNET_PER_CONN_PROXY_BYPASS;
if (!InternetQueryOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &optionList, &size)) {
std::cout << "InternetQueryOption failed. Error: " << GetLastError() << std::endl;
return 1;
}
std::cout << "Flags: " << optionList.pOptions[0].Value.dwValue << std::endl;
if (optionList.pOptions[1].Value.pszValue)
std::wcout << L"Proxy Server: " << optionList.pOptions[1].Value.pszValue << std::endl;
if (optionList.pOptions[2].Value.pszValue)
std::wcout << L"Proxy Bypass: " << optionList.pOptions[2].Value.pszValue << std::endl;
if (optionList.pOptions[1].Value.pszValue)
GlobalFree(optionList.pOptions[1].Value.pszValue);
if (optionList.pOptions[2].Value.pszValue)
GlobalFree(optionList.pOptions[2].Value.pszValue);
return 0;
}