예제 #1
0
BOOLEAN ConnectionAvailable(VOID)
{
    if (WindowsVersion > WINDOWS_VISTA)
    {
        INetworkListManager* pNetworkListManager = NULL;

        // Create an instance of the INetworkListManger COM object.
        if (SUCCEEDED(CoCreateInstance(&CLSID_NetworkListManager, NULL, CLSCTX_ALL, &IID_INetworkListManager, &pNetworkListManager)))
        {
            VARIANT_BOOL isConnected = VARIANT_FALSE;
            VARIANT_BOOL isConnectedInternet = VARIANT_FALSE;

            // Query the relevant properties.
            INetworkListManager_get_IsConnected(pNetworkListManager, &isConnected);
            INetworkListManager_get_IsConnectedToInternet(pNetworkListManager, &isConnectedInternet);

            // Cleanup the INetworkListManger COM objects.
            INetworkListManager_Release(pNetworkListManager);

            // Check if Windows is connected to a network and it's connected to the internet.
            if (isConnected == VARIANT_TRUE && isConnectedInternet == VARIANT_TRUE)
                return TRUE;

            // We're not connected to anything
            //return FALSE;
        }
    }

    typedef BOOL(WINAPI *_InternetGetConnectedState)(
        __out PULONG lpdwFlags,
        __reserved ULONG dwReserved
        );

    BOOLEAN isSuccess = FALSE;
    ULONG wininetState = 0;
    _InternetGetConnectedState InternetGetConnectedState_I = NULL;
    HMODULE inetHandle = NULL;

    __try
    {
        if (!(inetHandle = LoadLibrary(L"wininet.dll")))
            __leave;

        InternetGetConnectedState_I = (_InternetGetConnectedState)GetProcAddress(inetHandle, "InternetGetConnectedState");
        if (!InternetGetConnectedState_I)
            __leave;

        if (InternetGetConnectedState_I(&wininetState, 0))
            isSuccess = TRUE;
    }
    __finally
    {
        if (inetHandle)
        {
            FreeLibrary(inetHandle);
        }
    }

    return isSuccess;
}
예제 #2
0
BOOLEAN ConnectionAvailable(VOID)
{
    INetworkListManager* networkListManager = NULL;

    if (SUCCEEDED(CoCreateInstance(
        &CLSID_NetworkListManager, 
        NULL, 
        CLSCTX_ALL, 
        &IID_INetworkListManager, 
        &networkListManager
        )))
    {
        VARIANT_BOOL isConnected = VARIANT_FALSE;
        VARIANT_BOOL isConnectedInternet = VARIANT_FALSE;

        // Query the relevant properties.
        INetworkListManager_get_IsConnected(networkListManager, &isConnected);
        INetworkListManager_get_IsConnectedToInternet(networkListManager, &isConnectedInternet);

        // Cleanup the INetworkListManger COM objects.
        INetworkListManager_Release(networkListManager);

        // Check if Windows is connected to a network and it's connected to the internet.
        if (isConnected == VARIANT_TRUE && isConnectedInternet == VARIANT_TRUE)
            return TRUE;

        // We're not connected to anything
    }

    return FALSE;
}
예제 #3
0
static BOOL ConnectionAvailable(
    VOID
    )
{
    if (WindowsVersion > WINDOWS_XP)
    {
        INetworkListManager *pNetworkListManager;

        // Create an instance of the INetworkListManger COM object.
        if (SUCCEEDED(CoCreateInstance(&CLSID_NetworkListManager, NULL, CLSCTX_ALL, &IID_INetworkListManager, &pNetworkListManager)))
        {
            VARIANT_BOOL isConnected = VARIANT_FALSE;
            VARIANT_BOOL isConnectedInternet = VARIANT_FALSE;

            // Query the relevant properties.
            INetworkListManager_get_IsConnected(pNetworkListManager, &isConnected);
            INetworkListManager_get_IsConnectedToInternet(pNetworkListManager, &isConnectedInternet);

            // Cleanup the INetworkListManger COM object.
            INetworkListManager_Release(pNetworkListManager);
            pNetworkListManager = NULL;

            // Check if Windows is connected to a network and it's connected to the internet.
            if (isConnected == VARIANT_TRUE && isConnectedInternet == VARIANT_TRUE)
            {
                // We're online and connected to the internet.
                return TRUE;
            }

            // We're not connected to anything.
            return FALSE;
        }

        // If we reached here, we were unable to init the INetworkListManager, fall back to InternetGetConnectedState.
        goto NOT_SUPPORTED;
    }
    else
NOT_SUPPORTED:
    {
        DWORD dwType;

        if (InternetGetConnectedState(&dwType, 0))
        {
            return TRUE;
        }
        else
        {
            LogEvent(NULL, PhFormatString(L"Updater: (ConnectionAvailable) InternetGetConnectedState failed to detect an active Internet connection (%d)", GetLastError()));
        }

        //if (!InternetCheckConnection(NULL, FLAG_ICC_FORCE_CONNECTION, 0))
        //{
        // LogEvent(PhFormatString(L"Updater: (ConnectionAvailable) InternetCheckConnection failed connection to Sourceforge.net (%d)", GetLastError()));
        // return FALSE;
        //}
    }

    return FALSE;
}
예제 #4
0
BOOL ConnectionAvailable(
    VOID
    )
{
    BOOLEAN isSuccess = FALSE;
    HMODULE libraryHandle = NULL;
    INetworkListManager* networkListPtr = NULL;

    __try
    {
        if (WindowsVersion < WINDOWS_VISTA)
        {
            ULONG inetState = 0;
            _InternetGetConnectedState inetGetConnectedState_I = NULL;

            if (!(libraryHandle = LoadLibrary(L"wininet.dll")))
                __leave;

            if (!(inetGetConnectedState_I = (_InternetGetConnectedState)GetProcAddress(libraryHandle, "InternetGetConnectedState")))
                __leave;

            if (inetGetConnectedState_I(&inetState, 0))
                isSuccess = TRUE;
        }
        else
        {                
            VARIANT_BOOL isConnected = VARIANT_FALSE;
            VARIANT_BOOL isConnectedInternet = VARIANT_FALSE;

            // Create an instance of the INetworkListManger COM object.
            if (FAILED(CoCreateInstance(&CLSID_NetworkListManager, NULL, CLSCTX_ALL, &IID_INetworkListManager, &networkListPtr)))
                __leave;

            // Query the relevant properties.
            INetworkListManager_get_IsConnected(networkListPtr, &isConnected);
            INetworkListManager_get_IsConnectedToInternet(networkListPtr, &isConnectedInternet);

            // Check if Windows is connected to a network and it's connected to the internet.
            if (isConnected == VARIANT_TRUE && isConnectedInternet == VARIANT_TRUE)
                isSuccess = TRUE;
        }
    }
    __finally
    {
        if (libraryHandle)
            FreeLibrary(libraryHandle);

        if (networkListPtr)
            INetworkListManager_Release(networkListPtr);
    }

    return isSuccess;
}