Заинтересовало, вот простейшая программка под VC++:
#include <iostream>
#include <windows.h>
#include <netlistmgr.h>
#pragma comment(lib, "ole32.lib")
using namespace std;
bool isLimited()
{
HRESULT hrCoinit = CoInitialize(NULL);
if (hrCoinit != S_OK) return true; // Безопаснее считать лимитным
INetworkCostManager * pCostManager;
HRESULT hr = CoCreateInstance(CLSID_NetworkListManager, NULL,
CLSCTX_ALL, __uuidof(INetworkCostManager),
(LPVOID*)&pCostManager);
bool retVal = true; // Для безопасности по сбоях считаем лимитным
if (hr == S_OK)
{
DWORD cost;
hr = pCostManager->GetCost(&cost, NULL);
if (hr == S_OK && (cost&NLM_CONNECTION_COST_UNRESTRICTED))
{
retVal = false;
}
pCostManager->Release();
}
CoUninitialize();
return retVal;
}
int main(int argc, char * argv[])
{
cout << isLimited();
}
Флагов типа NLM_CONNECTION_COST_UNRESTRICTED
куда больше, но это уже смотрите сами в документации...