311 lines
8.8 KiB
C++
311 lines
8.8 KiB
C++
//+----------------------------------------------------------------------------
|
|
//
|
|
// File: RasApiDll.h
|
|
//
|
|
// Module: CMMON32.EXE
|
|
//
|
|
// Synopsis: Dynamicly link to RASAPI32.dll
|
|
//
|
|
// Copyright (c) 1998-1999 Microsoft Corporation
|
|
//
|
|
// Author: fengsun Created 03/12/98
|
|
//
|
|
//+----------------------------------------------------------------------------
|
|
|
|
#ifndef RASAPIALL_H
|
|
#define RASAPIALL_H
|
|
|
|
#include <ras.h>
|
|
#include "DynamicLib.h"
|
|
|
|
//
|
|
// The statistics structure used with RasGetConnectionStatistics API
|
|
//
|
|
|
|
typedef struct _RAS_STATS
|
|
{
|
|
DWORD dwSize;
|
|
DWORD dwBytesXmited;
|
|
DWORD dwBytesRcved;
|
|
DWORD dwFramesXmited;
|
|
DWORD dwFramesRcved;
|
|
DWORD dwCrcErr;
|
|
DWORD dwTimeoutErr;
|
|
DWORD dwAlignmentErr;
|
|
DWORD dwHardwareOverrunErr;
|
|
DWORD dwFramingErr;
|
|
DWORD dwBufferOverrunErr;
|
|
DWORD dwCompressionRatioIn;
|
|
DWORD dwCompressionRatioOut;
|
|
DWORD dwBps;
|
|
DWORD dwConnectDuration;
|
|
|
|
} RAS_STATS, *PRAS_STATS;
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// class : CRasApiDll
|
|
//
|
|
// Synopsis: A class to dynamic link to RASAPI32.DLL, derived from CDynamicLibrary
|
|
// Calling any of the RAS function will load the DLL
|
|
//
|
|
// History: fengsun created 3/12/98
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
class CRasApiDll : public CDynamicLibrary
|
|
{
|
|
public:
|
|
CRasApiDll();
|
|
DWORD RasGetConnectStatus(HRASCONN hrasconn, LPRASCONNSTATUS lprasconnstatus);
|
|
|
|
DWORD RasConnectionNotification(HRASCONN hrasconn,
|
|
HANDLE hEvent,
|
|
DWORD dwFlags);
|
|
|
|
DWORD RasGetConnectionStatistics(HRASCONN hrasconn, PRAS_STATS pRasStats);
|
|
|
|
BOOL Load();
|
|
|
|
BOOL HasRasConnectionNotification() const;
|
|
|
|
protected:
|
|
typedef DWORD (WINAPI* RasGetConnectStatusFUNC)(HRASCONN, LPRASCONNSTATUS);
|
|
typedef DWORD (WINAPI* RasConnectionNotificationFUNC)(HRASCONN hrasconn,
|
|
HANDLE hEvent,
|
|
DWORD dwFlags);
|
|
typedef DWORD (WINAPI* RasGetConnectionStatisticsFUNC) (HRASCONN, PRAS_STATS);
|
|
|
|
|
|
RasGetConnectStatusFUNC m_pfnRasGetConnectStatus;
|
|
RasConnectionNotificationFUNC m_pfnRasConnectionNotification;
|
|
RasGetConnectionStatisticsFUNC m_pfnRasGetConnectionStatistics;
|
|
};
|
|
|
|
|
|
//
|
|
// Constructor
|
|
//
|
|
inline CRasApiDll::CRasApiDll() : CDynamicLibrary()
|
|
{
|
|
m_pfnRasGetConnectStatus = NULL;
|
|
m_pfnRasConnectionNotification = NULL;
|
|
}
|
|
|
|
|
|
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Function: CRasApiDll::Load
|
|
//
|
|
// Synopsis: Load RASAPI32.dll
|
|
//
|
|
// Arguments: None
|
|
//
|
|
// Returns: BOOL - TRUE if load successfully
|
|
//
|
|
// History: fengsun Created Header 3/12/98
|
|
//
|
|
//+----------------------------------------------------------------------------
|
|
inline
|
|
BOOL CRasApiDll::Load()
|
|
{
|
|
if(IsLoaded())
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
if (!CDynamicLibrary::Load(TEXT("RASAPI32.DLL")))
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
LPSTR pszGetConnectStatusFuncName;
|
|
LPSTR pszConnectionNotificationFuncName;
|
|
LPSTR pszGetConnectionStatisticsFuncName;
|
|
|
|
if (OS_NT)
|
|
{
|
|
pszGetConnectStatusFuncName = "RasGetConnectStatusW";
|
|
pszConnectionNotificationFuncName = "RasConnectionNotificationW";
|
|
}
|
|
else
|
|
{
|
|
pszGetConnectStatusFuncName = "RasGetConnectStatusA";
|
|
pszConnectionNotificationFuncName = "RasConnectionNotificationA";
|
|
}
|
|
|
|
m_pfnRasGetConnectStatus = (RasGetConnectStatusFUNC)CDynamicLibrary::GetProcAddress
|
|
(pszGetConnectStatusFuncName);
|
|
|
|
m_pfnRasConnectionNotification = (RasConnectionNotificationFUNC)CDynamicLibrary::GetProcAddress
|
|
(pszConnectionNotificationFuncName);
|
|
|
|
//
|
|
// Only on NT5, we load the statistics retrieval API
|
|
//
|
|
|
|
if (OS_NT5)
|
|
{
|
|
pszGetConnectionStatisticsFuncName = "RasGetConnectionStatistics";
|
|
|
|
m_pfnRasGetConnectionStatistics = (RasGetConnectionStatisticsFUNC)CDynamicLibrary::GetProcAddress
|
|
(pszGetConnectionStatisticsFuncName);
|
|
}
|
|
|
|
MYDBGASSERT(m_pfnRasGetConnectStatus);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Function: CRasApiDll::RasGetConnectionStatistics
|
|
//
|
|
// Synopsis: Call the ras function RasGetConnectionStatistics.
|
|
// Load the Dll, if not loaded yet
|
|
//
|
|
// Arguments: HRASCONN hrasconn - Same as ::RasGetConnectStatus
|
|
// RAS_STATS RasStats - The Ras statistics
|
|
//
|
|
// Returns: DWORD - Same as ::RasGetConnectStatus
|
|
//
|
|
// History: nickball 03/04/00 Created. Cloned from RasGetConnectStatus
|
|
//
|
|
//+----------------------------------------------------------------------------
|
|
inline
|
|
DWORD CRasApiDll::RasGetConnectionStatistics(HRASCONN hRasConn, PRAS_STATS pRasStats)
|
|
{
|
|
DWORD dwReturn = ERROR_INVALID_FUNCTION;
|
|
MYDBGASSERT(hRasConn);
|
|
MYDBGASSERT(pRasStats);
|
|
|
|
MYVERIFY(Load());
|
|
|
|
if (IsLoaded() && m_pfnRasGetConnectionStatistics)
|
|
{
|
|
return (m_pfnRasGetConnectionStatistics(hRasConn, pRasStats));
|
|
}
|
|
|
|
return ERROR_INVALID_FUNCTION;
|
|
}
|
|
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Function: CRasApiDll::RasGetConnectStatus
|
|
//
|
|
// Synopsis: Call the ras function RasGetConnectStatus.
|
|
// Load the Dll, if not loaded yet
|
|
//
|
|
// Arguments: HRASCONN hrasconn - Same as ::RasGetConnectStatus
|
|
// LPRASCONNSTATUSA lprasconnstatus - Same as ::RasGetConnectStatus
|
|
//
|
|
// Returns: DWORD - Same as ::RasGetConnectStatus
|
|
//
|
|
// History: fengsun Created Header 3/12/98
|
|
//
|
|
//+----------------------------------------------------------------------------
|
|
inline
|
|
DWORD CRasApiDll::RasGetConnectStatus(HRASCONN hrasconn, LPRASCONNSTATUS lprasconnstatus)
|
|
{
|
|
DWORD dwReturn = ERROR_INVALID_FUNCTION;
|
|
MYDBGASSERT(hrasconn);
|
|
MYDBGASSERT(lprasconnstatus);
|
|
|
|
MYVERIFY(Load());
|
|
|
|
if (IsLoaded() && m_pfnRasGetConnectStatus != NULL)
|
|
{
|
|
if (OS_NT)
|
|
{
|
|
dwReturn = m_pfnRasGetConnectStatus(hrasconn, lprasconnstatus);
|
|
}
|
|
else
|
|
{
|
|
RASCONNSTATUSA RasConnStatusA;
|
|
ZeroMemory(&RasConnStatusA, sizeof(RASCONNSTATUSA));
|
|
RasConnStatusA.dwSize = sizeof(RASCONNSTATUSA);
|
|
|
|
//
|
|
// We cast this here because we only have one function declaration. We should
|
|
// probably have one for Unicode and one for ANSI but for now the cast works
|
|
// fine.
|
|
//
|
|
|
|
dwReturn = m_pfnRasGetConnectStatus(hrasconn, (LPRASCONNSTATUS)&RasConnStatusA);
|
|
|
|
if (ERROR_SUCCESS == dwReturn)
|
|
{
|
|
lprasconnstatus->rasconnstate = RasConnStatusA.rasconnstate;
|
|
lprasconnstatus->dwError = RasConnStatusA.dwError;
|
|
SzToWz(RasConnStatusA.szDeviceType, lprasconnstatus->szDeviceType, RAS_MaxDeviceType);
|
|
SzToWz(RasConnStatusA.szDeviceName, lprasconnstatus->szDeviceName, RAS_MaxDeviceName);
|
|
}
|
|
}
|
|
}
|
|
|
|
return dwReturn;
|
|
}
|
|
|
|
|
|
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Function: CRasApiDll::RasConnectionNotification
|
|
//
|
|
// Synopsis: Call the ras function RasConnectionNotification.
|
|
// Load the Dll, if not loaded yet
|
|
//
|
|
// Arguments: HRASCONN hrasconn - Same as ::RasConnectionNotification
|
|
// HANDLE hEvent - Same as ::RasConnectionNotification
|
|
// DWORD dwFlags - Same as ::RasConnectionNotification
|
|
//
|
|
// Returns: DWORD - Same as ::RasConnectionNotification
|
|
//
|
|
// History: fengsun Created Header 3/12/98
|
|
//
|
|
//+----------------------------------------------------------------------------
|
|
inline
|
|
DWORD CRasApiDll::RasConnectionNotification(HRASCONN hrasconn,
|
|
HANDLE hEvent,
|
|
DWORD dwFlags)
|
|
{
|
|
MYDBGASSERT(hrasconn);
|
|
MYDBGASSERT(hEvent);
|
|
MYDBGASSERT(dwFlags);
|
|
|
|
MYVERIFY(Load());
|
|
|
|
if(!IsLoaded() || m_pfnRasConnectionNotification == NULL)
|
|
{
|
|
return ERROR_INVALID_FUNCTION;
|
|
}
|
|
|
|
return m_pfnRasConnectionNotification(hrasconn, hEvent, dwFlags);
|
|
}
|
|
|
|
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Function: CRasApiDll::HasRasConnectionNotification
|
|
//
|
|
// Synopsis: Whether the dll has the function RasConnectionNotification()
|
|
// which is not available for WIN9x w/ DUN1.0
|
|
//
|
|
// Arguments: None
|
|
//
|
|
// Returns: BOOL - TRUE if the function is avalaible
|
|
//
|
|
// History: fengsun Created Header 3/13/98
|
|
//
|
|
//+----------------------------------------------------------------------------
|
|
inline
|
|
BOOL CRasApiDll::HasRasConnectionNotification() const
|
|
{
|
|
MYDBGASSERT(m_hInst);
|
|
|
|
return m_pfnRasConnectionNotification != NULL;
|
|
}
|
|
|
|
#endif
|