Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

310 lines
8.8 KiB

//+----------------------------------------------------------------------------
//
// 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