Windows2003-3790/inetcore/wininet/dll/rashelp.cxx
2020-09-30 16:53:55 +02:00

1199 lines
33 KiB
C++

/////////////////////////////////////////////////////////////////////////////
//
// RAS API wrappers for wide/ansi
//
// Works on all 9x and NT platforms correctly, maintaining unicode
// whenever possible.
//
/////////////////////////////////////////////////////////////////////////////
#include "wininetp.h"
#include "rashelp.h"
#include "autodial.h"
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
ENUM_TYPE GetOSVersion::_EnumType = ENUM_NONE;
GetOSVersion::GetOSVersion()
{
if(_EnumType == ENUM_NONE)
{
if(0 == GlobalPlatformType)
GlobalPlatformType = PlatformType(&GlobalPlatformVersion5);
// figure out which kind of enumeration we're doing - start with multibyte
_EnumType = ENUM_MULTIBYTE;
if(PLATFORM_TYPE_WINNT == GlobalPlatformType)
{
if(TRUE == GlobalPlatformVersion5)
_EnumType = ENUM_WIN2K;
else
_EnumType = ENUM_UNICODE;
}
}
}
GetOSVersion::~GetOSVersion()
{
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
RasEnumHelp::RasEnumHelp()
{
DWORD dwBufSize, dwStructSize;
// init
_dwEntries = 0;
_dwLastError = 0;
switch(_EnumType)
{
case ENUM_MULTIBYTE:
dwStructSize = sizeof(RASENTRYNAMEA);
break;
case ENUM_UNICODE:
dwStructSize = sizeof(RASENTRYNAMEW);
break;
case ENUM_WIN2K:
dwStructSize = sizeof(W2KRASENTRYNAMEW);
break;
}
// allocate space for 16 entries
dwBufSize = 16 * dwStructSize;
_preList = (LPRASENTRYNAMEA)LocalAlloc(LPTR, dwBufSize);
if(_preList)
{
do
{
// set up list
_preList[0].dwSize = dwStructSize;
// call ras to enumerate
_dwLastError = ERROR_UNKNOWN;
if(ENUM_MULTIBYTE == _EnumType)
{
_dwLastError = _RasEnumEntriesA(
NULL,
NULL,
(LPRASENTRYNAMEA)_preList,
&dwBufSize,
&_dwEntries
);
}
else
{
_dwLastError = _RasEnumEntriesW(
NULL,
NULL,
(LPRASENTRYNAMEW)_preList,
&dwBufSize,
&_dwEntries
);
}
// reallocate buffer if necessary
if(ERROR_BUFFER_TOO_SMALL == _dwLastError)
{
LocalFree(_preList);
_preList = (LPRASENTRYNAMEA)LocalAlloc(LPTR, dwBufSize);
if(NULL == _preList)
{
_dwLastError = ERROR_NOT_ENOUGH_MEMORY;
break;
}
}
else
{
break;
}
} while(TRUE);
}
else
{
_dwLastError = ERROR_NOT_ENOUGH_MEMORY;
}
if(_preList && (ERROR_SUCCESS != _dwLastError))
{
LocalFree(_preList);
_preList = NULL;
_dwEntries = 0;
}
return;
}
RasEnumHelp::~RasEnumHelp()
{
if(_preList)
{
LocalFree(_preList);
}
}
DWORD
RasEnumHelp::GetError()
{
return _dwLastError;
}
DWORD
RasEnumHelp::GetEntryCount()
{
return _dwEntries;
}
LPWSTR
RasEnumHelp::GetEntryW(DWORD dwConnectionNum)
{
LPWSTR pwszName = NULL;
if(dwConnectionNum >= _dwEntries)
{
return NULL;
}
switch(_EnumType)
{
case ENUM_MULTIBYTE:
if(*_preList[dwConnectionNum].szEntryName)
{
MultiByteToWideChar(CP_ACP, 0, _preList[dwConnectionNum].szEntryName,
-1, _szCurrentEntryW, RAS_MaxEntryName + 1);
pwszName = _szCurrentEntryW;
}
break;
case ENUM_UNICODE:
{
LPRASENTRYNAMEW lpTemp = (LPRASENTRYNAMEW)_preList;
if(*lpTemp[dwConnectionNum].szEntryName)
pwszName = lpTemp[dwConnectionNum].szEntryName;
break;
}
case ENUM_WIN2K:
{
LPW2KRASENTRYNAMEW lpTemp = (LPW2KRASENTRYNAMEW)_preList;
if(*lpTemp[dwConnectionNum].szEntryName)
pwszName = lpTemp[dwConnectionNum].szEntryName;
break;
}
}
return pwszName;
}
LPSTR
RasEnumHelp::GetEntryA(DWORD dwConnectionNum)
{
LPSTR pszName = NULL;
if(dwConnectionNum >= _dwEntries)
{
return NULL;
}
switch(_EnumType)
{
case ENUM_MULTIBYTE:
if(*_preList[dwConnectionNum].szEntryName)
pszName = _preList[dwConnectionNum].szEntryName;
break;
case ENUM_UNICODE:
{
LPRASENTRYNAMEW lpTemp = (LPRASENTRYNAMEW)_preList;
if(*lpTemp[dwConnectionNum].szEntryName)
{
WideCharToMultiByte(CP_ACP, 0, lpTemp[dwConnectionNum].szEntryName, -1,
_szCurrentEntryA, RAS_MaxEntryName + 1, NULL, NULL);
pszName = _szCurrentEntryA;
}
break;
}
case ENUM_WIN2K:
{
LPW2KRASENTRYNAMEW lpTemp = (LPW2KRASENTRYNAMEW)_preList;
if(*lpTemp[dwConnectionNum].szEntryName)
{
WideCharToMultiByte(CP_ACP, 0, lpTemp[dwConnectionNum].szEntryName, -1,
_szCurrentEntryA, RAS_MaxEntryName + 1, NULL, NULL);
pszName = _szCurrentEntryA;
}
break;
}
}
return pszName;
}
/////////////////////////////////////////////////////////////////////////////
//
// RasEnumConnHelp
//
/////////////////////////////////////////////////////////////////////////////
RasEnumConnHelp::RasEnumConnHelp()
{
DWORD dwBufSize;
// init
_dwConnections = 0;
_dwLastError = 0;
switch(_EnumType)
{
case ENUM_MULTIBYTE:
_dwStructSize = sizeof(RASCONNA);
break;
case ENUM_UNICODE:
_dwStructSize = sizeof(RASCONNW);
break;
case ENUM_WIN2K:
_dwStructSize = sizeof(W2KRASCONNW);
break;
}
// allocate space for MAX_CONNECTION entries
dwBufSize = MAX_CONNECTION * _dwStructSize;
_pRasCon = (LPRASCONNA)LocalAlloc(LPTR, dwBufSize);
if(_pRasCon == NULL)
{
_dwLastError = ERROR_NOT_ENOUGH_MEMORY;
}
return;
}
RasEnumConnHelp::~RasEnumConnHelp()
{
if(_pRasCon)
{
LocalFree(_pRasCon);
_pRasCon = NULL;
}
}
DWORD RasEnumConnHelp::Enum()
{
DWORD dwBufSize;
_dwLastError = 0;
if(_pRasCon)
{
dwBufSize = MAX_CONNECTION * _dwStructSize;
do
{
// set up list
_pRasCon[0].dwSize = _dwStructSize;
// call ras to enumerate
_dwLastError = ERROR_UNKNOWN;
switch(_EnumType)
{
case ENUM_MULTIBYTE:
_dwLastError = _RasEnumConnectionsA((LPRASCONNA)_pRasCon, &dwBufSize, &_dwConnections);
break;
case ENUM_UNICODE:
case ENUM_WIN2K:
_dwLastError = _RasEnumConnectionsW((LPRASCONNW)_pRasCon, &dwBufSize, &_dwConnections);
break;
}
// reallocate buffer if necessary
if(ERROR_BUFFER_TOO_SMALL == _dwLastError)
{
LocalFree(_pRasCon);
_pRasCon = (LPRASCONNA)LocalAlloc(LPTR, dwBufSize);
if(NULL == _pRasCon)
{
_dwLastError = ERROR_NOT_ENOUGH_MEMORY;
break;
}
}
else
{
break;
}
} while(TRUE);
}
else
{
_dwLastError = ERROR_NOT_ENOUGH_MEMORY;
}
return _dwLastError;
}
DWORD
RasEnumConnHelp::GetError()
{
return _dwLastError;
}
DWORD
RasEnumConnHelp::GetConnectionsCount()
{
return _dwConnections;
}
LPWSTR
RasEnumConnHelp::GetEntryW(DWORD dwConnectionNum)
{
LPWSTR pwszName = NULL;
if((_pRasCon == NULL) || (dwConnectionNum >= _dwConnections))
{
return NULL;
}
switch(_EnumType)
{
case ENUM_MULTIBYTE:
if(*_pRasCon[dwConnectionNum].szEntryName)
{
MultiByteToWideChar(CP_ACP, 0, _pRasCon[dwConnectionNum].szEntryName, -1, _szEntryNameW, RAS_MaxEntryName + 1);
pwszName = _szEntryNameW;
}
break;
case ENUM_UNICODE:
{
LPRASCONNW lpTemp = (LPRASCONNW)_pRasCon;
if(*lpTemp[dwConnectionNum].szEntryName)
pwszName = lpTemp[dwConnectionNum].szEntryName;
break;
}
case ENUM_WIN2K:
{
LPW2KRASCONNW lpTemp = (LPW2KRASCONNW)_pRasCon;
if(*lpTemp[dwConnectionNum].szEntryName)
pwszName = lpTemp[dwConnectionNum].szEntryName;
break;
}
}
return pwszName;
}
LPSTR
RasEnumConnHelp::GetEntryA(DWORD dwConnectionNum)
{
LPSTR pszName = NULL;
if((_pRasCon == NULL) || (dwConnectionNum >= _dwConnections))
{
return NULL;
}
switch(_EnumType)
{
case ENUM_MULTIBYTE:
if(*_pRasCon[dwConnectionNum].szEntryName)
pszName = _pRasCon[dwConnectionNum].szEntryName;
break;
case ENUM_UNICODE:
{
LPRASCONNW lpTemp = (LPRASCONNW)_pRasCon;
if(*lpTemp[dwConnectionNum].szEntryName)
{
WideCharToMultiByte(CP_ACP, 0, lpTemp[dwConnectionNum].szEntryName, -1, _szEntryNameA, RAS_MaxEntryName + 1, NULL, NULL);
pszName = _szEntryNameA;
}
break;
}
case ENUM_WIN2K:
{
LPW2KRASCONNW lpTemp = (LPW2KRASCONNW )_pRasCon;
if(*lpTemp[dwConnectionNum].szEntryName)
{
WideCharToMultiByte(CP_ACP, 0, lpTemp[dwConnectionNum].szEntryName, -1, _szEntryNameA, RAS_MaxEntryName + 1, NULL, NULL);
pszName = _szEntryNameA;
}
break;
}
}
return pszName;
}
LPWSTR
RasEnumConnHelp::GetLastEntryW(DWORD dwConnectionNum)
{
if(_pRasCon == NULL)
return NULL;
return _szEntryNameW;
}
LPSTR
RasEnumConnHelp::GetLastEntryA(DWORD dwConnectionNum)
{
if(_pRasCon == NULL)
return NULL;
return _szEntryNameA;
}
HRASCONN
RasEnumConnHelp::GetHandle(DWORD dwConnectionNum)
{
HRASCONN hTemp;
if((_pRasCon == NULL) || (dwConnectionNum >= _dwConnections))
{
return NULL;
}
switch(_EnumType)
{
case ENUM_MULTIBYTE:
hTemp = _pRasCon[dwConnectionNum].hrasconn;
break;
case ENUM_UNICODE:
{
LPRASCONNW lpTemp = (LPRASCONNW)_pRasCon;
hTemp = lpTemp[dwConnectionNum].hrasconn;
break;
}
case ENUM_WIN2K:
{
LPW2KRASCONNW lpTemp = (LPW2KRASCONNW)_pRasCon;
hTemp = lpTemp[dwConnectionNum].hrasconn;
break;
}
}
return hTemp;
}
/////////////////////////////////////////////////////////////////////////////
//
// RasEntryPropHelp
//
/////////////////////////////////////////////////////////////////////////////
RasEntryPropHelp::RasEntryPropHelp()
{
// init
_dwLastError = 0;
switch(_EnumType)
{
case ENUM_MULTIBYTE:
_dwStructSize = sizeof(RASENTRYA);
break;
case ENUM_UNICODE:
_dwStructSize = sizeof(RASENTRYW);
break;
case ENUM_WIN2K:
_dwStructSize = sizeof(W2KRASENTRYW);
break;
}
_pRasEntry = (LPRASENTRYA)LocalAlloc(LPTR, _dwStructSize * 2);
if(_pRasEntry)
{
_pRasEntry->dwSize = _dwStructSize;
}
else
{
_dwLastError = ERROR_NOT_ENOUGH_MEMORY;
}
if(_pRasEntry && (ERROR_SUCCESS != _dwLastError))
{
LocalFree(_pRasEntry);
_pRasEntry = NULL;
}
return;
}
RasEntryPropHelp::~RasEntryPropHelp()
{
if(_pRasEntry)
{
LocalFree(_pRasEntry);
_pRasEntry = NULL;
}
}
DWORD RasEntryPropHelp::GetError()
{
return _dwLastError;
}
DWORD RasEntryPropHelp::GetA(LPSTR lpszEntryName)
{
DWORD dwSize = _dwStructSize * 2;
switch(_EnumType)
{
case ENUM_MULTIBYTE:
_dwLastError = _RasGetEntryPropertiesA(NULL, lpszEntryName, (LPRASENTRYA)_pRasEntry, &dwSize, NULL, NULL);
break;
case ENUM_UNICODE:
{
LPRASENTRYW lpTemp = (LPRASENTRYW)_pRasEntry;
MultiByteToWideChar(CP_ACP, 0, lpszEntryName, -1, _szEntryNameW, RAS_MaxEntryName + 1 );
_dwLastError = _RasGetEntryPropertiesW(NULL, _szEntryNameW, (LPRASENTRYW)lpTemp, &dwSize, NULL, NULL);
break;
}
case ENUM_WIN2K:
{
LPW2KRASENTRYW lpTemp = (LPW2KRASENTRYW)_pRasEntry;
MultiByteToWideChar(CP_ACP, 0, lpszEntryName, -1, _szEntryNameW, RAS_MaxEntryName + 1);
_dwLastError = _RasGetEntryPropertiesW(NULL, _szEntryNameW, (LPRASENTRYW)lpTemp, &dwSize, NULL, NULL);
break;
}
}
return(_dwLastError);
}
DWORD RasEntryPropHelp::GetW(LPWSTR lpszEntryName)
{
DWORD dwSize = _dwStructSize * 2;
switch(_EnumType)
{
case ENUM_MULTIBYTE:
WideCharToMultiByte(CP_ACP, 0, lpszEntryName, -1, _szEntryNameA, RAS_MaxEntryName + 1, NULL, NULL);
_dwLastError = _RasGetEntryPropertiesA(NULL, _szEntryNameA, (LPRASENTRYA)_pRasEntry, &dwSize, NULL, NULL);
break;
case ENUM_UNICODE:
{
LPRASENTRYW lpTemp = (LPRASENTRYW)_pRasEntry;
_dwLastError = _RasGetEntryPropertiesW(NULL, lpszEntryName, (LPRASENTRYW)lpTemp, &dwSize, NULL, NULL);
break;
}
case ENUM_WIN2K:
{
LPW2KRASENTRYW lpTemp = (LPW2KRASENTRYW)_pRasEntry;
_dwLastError = _RasGetEntryPropertiesW(NULL, lpszEntryName, (LPRASENTRYW)lpTemp, &dwSize, NULL, NULL);
break;
}
}
return(_dwLastError);
}
LPWSTR RasEntryPropHelp::GetDeviceTypeW(VOID)
{
LPWSTR lpwstr = NULL;
if(_pRasEntry)
{
switch(_EnumType)
{
case ENUM_MULTIBYTE:
if(*_pRasEntry->szDeviceType)
{
MultiByteToWideChar(CP_ACP, 0, _pRasEntry->szDeviceType, -1, _szDeviceTypeW, RAS_MaxDeviceType + 1);
lpwstr = _szDeviceTypeW;
}
break;
case ENUM_UNICODE:
{
LPRASENTRYW lpTemp = (LPRASENTRYW)_pRasEntry;
if(*lpTemp->szDeviceType)
lpwstr = lpTemp->szDeviceType;
break;
}
case ENUM_WIN2K:
{
LPW2KRASENTRYW lpTemp = (LPW2KRASENTRYW)_pRasEntry;
if(*lpTemp->szDeviceType)
lpwstr = lpTemp->szDeviceType;
break;
}
}
}
return lpwstr;
}
LPSTR RasEntryPropHelp::GetDeviceTypeA(VOID)
{
LPSTR lpstr = NULL;
if(_pRasEntry)
{
switch(_EnumType)
{
case ENUM_MULTIBYTE:
if(*_pRasEntry->szDeviceType)
lpstr = _pRasEntry->szDeviceType;
break;
case ENUM_UNICODE:
{
LPRASENTRYW lpTemp = (LPRASENTRYW)_pRasEntry;
if(*lpTemp->szDeviceType)
{
WideCharToMultiByte(CP_ACP, 0, lpTemp->szDeviceType, -1, _szDeviceTypeA, RAS_MaxDeviceType + 1, NULL, NULL);
lpstr = _szDeviceTypeA;
}
break;
}
case ENUM_WIN2K:
{
LPW2KRASENTRYW lpTemp = (LPW2KRASENTRYW)_pRasEntry;
if(*lpTemp->szDeviceType)
{
WideCharToMultiByte(CP_ACP, 0, lpTemp->szDeviceType, -1, _szDeviceTypeA, RAS_MaxDeviceType + 1, NULL, NULL);
lpstr = _szDeviceTypeA;
}
break;
}
}
}
return lpstr;
}
LPWSTR RasEntryPropHelp::GetAutodiallDllW()
{
LPWSTR lpwstr = NULL;
if(_pRasEntry)
{
switch(_EnumType)
{
case ENUM_MULTIBYTE:
if(*_pRasEntry->szAutodialDll)
{
MultiByteToWideChar(CP_ACP, 0, _pRasEntry->szAutodialDll, -1, _szAutodialDllW, MAX_PATH);
lpwstr = _szAutodialDllW;
}
break;
case ENUM_UNICODE:
{
LPRASENTRYW lpTemp = (LPRASENTRYW)_pRasEntry;
if(*lpTemp->szAutodialDll)
lpwstr = lpTemp->szAutodialDll;
break;
}
case ENUM_WIN2K:
{
LPW2KRASENTRYW lpTemp = (LPW2KRASENTRYW)_pRasEntry;
if(*lpTemp->szAutodialDll)
lpwstr = lpTemp->szAutodialDll;
break;
}
}
}
return lpwstr;
}
LPSTR RasEntryPropHelp::GetAutodiallDllA()
{
LPSTR lpstr = NULL;
if(_pRasEntry)
{
switch(_EnumType)
{
case ENUM_MULTIBYTE:
if(*_pRasEntry->szAutodialDll)
lpstr = _pRasEntry->szAutodialDll;
break;
case ENUM_UNICODE:
{
LPRASENTRYW lpTemp = (LPRASENTRYW)_pRasEntry;
if(*lpTemp->szAutodialDll)
{
WideCharToMultiByte(CP_ACP, 0, lpTemp->szAutodialDll, -1, _szAutodialDllA, MAX_PATH, NULL, NULL);
lpstr = _szAutodialDllA;
}
break;
}
case ENUM_WIN2K:
{
LPW2KRASENTRYW lpTemp = (LPW2KRASENTRYW)_pRasEntry;
if(*lpTemp->szAutodialDll)
{
WideCharToMultiByte(CP_ACP, 0, lpTemp->szAutodialDll, -1, _szAutodialDllA, MAX_PATH, NULL, NULL);
lpstr = _szAutodialDllA;
}
break;
}
}
}
return lpstr;
}
LPWSTR RasEntryPropHelp::GetAutodialFuncW()
{
LPWSTR lpwstr = NULL;
if(_pRasEntry)
{
switch(_EnumType)
{
case ENUM_MULTIBYTE:
if(*_pRasEntry->szAutodialFunc)
{
MultiByteToWideChar(CP_ACP, 0, _pRasEntry->szAutodialFunc, -1, _szAutodialFuncW, RAS_MaxDeviceType + 1);
lpwstr = _szAutodialFuncW;
}
break;
case ENUM_UNICODE:
{
LPRASENTRYW lpTemp = (LPRASENTRYW)_pRasEntry;
if(*lpTemp->szAutodialFunc)
lpwstr = lpTemp->szAutodialFunc;
break;
}
case ENUM_WIN2K:
{
LPW2KRASENTRYW lpTemp = (LPW2KRASENTRYW)_pRasEntry;
if(*lpTemp->szAutodialFunc)
lpwstr = lpTemp->szAutodialFunc;
break;
}
}
}
return lpwstr;
}
LPSTR RasEntryPropHelp::GetAutodialFuncA()
{
LPSTR lpstr = NULL;
if(_pRasEntry)
{
switch(_EnumType)
{
case ENUM_MULTIBYTE:
if(*_pRasEntry->szAutodialFunc)
lpstr = _pRasEntry->szAutodialFunc;
break;
case ENUM_UNICODE:
{
LPRASENTRYW lpTemp = (LPRASENTRYW)_pRasEntry;
if(*lpTemp->szAutodialFunc)
{
WideCharToMultiByte(CP_ACP, 0, lpTemp->szAutodialFunc, -1, _szAutodialFuncA, RAS_MaxDeviceType + 1, NULL, NULL);
lpstr = _szAutodialFuncA;
}
break;
}
case ENUM_WIN2K:
{
LPW2KRASENTRYW lpTemp = (LPW2KRASENTRYW)_pRasEntry;
if(*lpTemp->szAutodialFunc)
{
WideCharToMultiByte(CP_ACP, 0, lpTemp->szAutodialFunc, -1, _szAutodialFuncA, RAS_MaxDeviceType + 1, NULL, NULL);
lpstr = _szAutodialFuncA;
}
break;
}
}
}
return lpstr;
}
LPWSTR RasEntryPropHelp::GetCustomDialDllW()
{
LPWSTR lpwstr = NULL;
if(_pRasEntry)
{
switch(_EnumType)
{
case ENUM_MULTIBYTE: // Not in Win9x
break;
case ENUM_UNICODE: // Not is NT4
break;
case ENUM_WIN2K:
{
LPW2KRASENTRYW lpTemp = (LPW2KRASENTRYW)_pRasEntry ;
if(*lpTemp->szCustomDialDll)
lpwstr = lpTemp->szCustomDialDll;
break;
}
}
}
return lpwstr;
}
LPWSTR RasEntryPropHelp::GetPhoneNumberW()
{
LPWSTR lpwstr = NULL;
if(_pRasEntry)
{
switch(_EnumType)
{
case ENUM_MULTIBYTE:
if(*_pRasEntry->szLocalPhoneNumber)
{
MultiByteToWideChar(CP_ACP, 0, _pRasEntry->szLocalPhoneNumber, -1, _szPhoneNumberW, RAS_MaxPhoneNumber);
lpwstr = _szPhoneNumberW;
}
break;
case ENUM_UNICODE:
{
LPRASENTRYW lpTemp = (LPRASENTRYW)_pRasEntry;
if(*lpTemp->szLocalPhoneNumber)
lpwstr = lpTemp->szLocalPhoneNumber;
break;
}
case ENUM_WIN2K:
{
LPW2KRASENTRYW lpTemp = (LPW2KRASENTRYW)_pRasEntry;
if(*lpTemp->szLocalPhoneNumber)
lpwstr = lpTemp->szLocalPhoneNumber;
break;
}
}
}
return lpwstr;
}
DWORD RasEntryPropHelp::GetCountryCode()
{
DWORD dwCode = 0;
if(_pRasEntry)
{
// country code is at the same place for all versions of the struct,
// so take the shortcut
dwCode = _pRasEntry->dwCountryCode;
}
return dwCode;
}
DWORD RasEntryPropHelp::GetOptions()
{
DWORD dwOptions = 0;
if(_pRasEntry)
{
// dwfOptions is at the same place for all versions of the struct,
// so take the shortcut
dwOptions = _pRasEntry->dwfOptions;
}
return dwOptions;
}
LPWSTR RasEntryPropHelp::GetAreaCodeW()
{
LPWSTR lpwstr = NULL;
if(_pRasEntry)
{
switch(_EnumType)
{
case ENUM_MULTIBYTE:
if(*_pRasEntry->szAreaCode)
{
MultiByteToWideChar(CP_ACP, 0, _pRasEntry->szAreaCode, -1, _szAreaCodeW, RAS_MaxAreaCode);
lpwstr = _szAreaCodeW;
}
break;
case ENUM_UNICODE:
{
LPRASENTRYW lpTemp = (LPRASENTRYW)_pRasEntry;
if(*lpTemp->szAreaCode)
lpwstr = lpTemp->szAreaCode;
break;
}
case ENUM_WIN2K:
{
LPW2KRASENTRYW lpTemp = (LPW2KRASENTRYW)_pRasEntry;
if(*lpTemp->szAreaCode)
lpwstr = lpTemp->szAreaCode;
break;
}
}
}
return lpwstr;
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
RasEntryDialParamsHelp::RasEntryDialParamsHelp()
{
// init
_dwLastError = 0;
_pRasDialParamsA = NULL;
if(_EnumType == ENUM_MULTIBYTE)
{
_pRasDialParamsA = (LPRASDIALPARAMSA)LocalAlloc(LPTR, sizeof(RASDIALPARAMSA));
if(_pRasDialParamsA == NULL)
{
_dwLastError = ERROR_NOT_ENOUGH_MEMORY;
}
else
{
_pRasDialParamsA->dwSize = sizeof(RASDIALPARAMSA);
}
}
return;
}
RasEntryDialParamsHelp::~RasEntryDialParamsHelp()
{
_dwLastError = 0;
if(_pRasDialParamsA)
{
LocalFree(_pRasDialParamsA);
_pRasDialParamsA= NULL;
}
}
DWORD RasEntryDialParamsHelp::GetError()
{
return _dwLastError;
}
DWORD RasEntryDialParamsHelp::SetW(LPCWSTR lpszPhonebook, LPRASDIALPARAMSW lprasdialparams, BOOL fRemovePassword)
{
_dwLastError = 1;
if(lprasdialparams)
{
switch(_EnumType)
{
case ENUM_MULTIBYTE:
if(_pRasDialParamsA)
{
WideCharToMultiByte(CP_ACP, 0, lprasdialparams->szEntryName, -1, _pRasDialParamsA->szEntryName, RAS_MaxEntryName , NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, lprasdialparams->szPhoneNumber, -1, _pRasDialParamsA->szPhoneNumber, RAS_MaxPhoneNumber , NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, lprasdialparams->szCallbackNumber, -1, _pRasDialParamsA->szCallbackNumber, RAS_MaxCallbackNumber , NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, lprasdialparams->szUserName, -1, _pRasDialParamsA->szUserName, UNLEN , NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, lprasdialparams->szPassword, -1, _pRasDialParamsA->szPassword, PWLEN , NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, lprasdialparams->szDomain, -1, _pRasDialParamsA->szDomain, DNLEN , NULL, NULL);
_dwLastError = _RasSetEntryDialParamsA(NULL, _pRasDialParamsA, fRemovePassword);
}
break;
case ENUM_UNICODE:
case ENUM_WIN2K:
_dwLastError = _RasSetEntryDialParamsW(NULL, lprasdialparams, fRemovePassword);
break;
}
}
return _dwLastError;
}
DWORD RasEntryDialParamsHelp::GetW(LPCWSTR lpszPhonebook, LPRASDIALPARAMSW lprasdialparams, LPBOOL pfRemovePassword)
{
_dwLastError = 1;
if(lprasdialparams)
{
switch(_EnumType)
{
case ENUM_MULTIBYTE:
WideCharToMultiByte(CP_ACP, 0, lprasdialparams->szEntryName, -1, _pRasDialParamsA->szEntryName, RAS_MaxEntryName, NULL, NULL);
_dwLastError = _RasGetEntryDialParamsA(NULL, _pRasDialParamsA, pfRemovePassword);
MultiByteToWideChar(CP_ACP, 0, _pRasDialParamsA->szEntryName, -1, lprasdialparams->szEntryName, RAS_MaxEntryName);
MultiByteToWideChar(CP_ACP, 0, _pRasDialParamsA->szPhoneNumber, -1, lprasdialparams->szPhoneNumber, RAS_MaxPhoneNumber);
MultiByteToWideChar(CP_ACP, 0, _pRasDialParamsA->szCallbackNumber, -1, lprasdialparams->szCallbackNumber, RAS_MaxCallbackNumber);
MultiByteToWideChar(CP_ACP, 0, _pRasDialParamsA->szUserName, -1, lprasdialparams->szUserName, UNLEN);
MultiByteToWideChar(CP_ACP, 0, _pRasDialParamsA->szPassword, -1, lprasdialparams->szPassword, PWLEN);
MultiByteToWideChar(CP_ACP, 0, _pRasDialParamsA->szDomain, -1, lprasdialparams->szDomain, DNLEN);
break;
case ENUM_UNICODE:
case ENUM_WIN2K:
_dwLastError = _RasGetEntryDialParamsW(NULL, lprasdialparams, pfRemovePassword);
break;
}
}
return _dwLastError;
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
RasGetConnectStatusHelp::RasGetConnectStatusHelp(HRASCONN hrasconn)
{
// init
_dwLastError = 0;
switch(_EnumType)
{
case ENUM_MULTIBYTE:
_dwStructSize = sizeof(RASCONNSTATUSA);
break;
case ENUM_UNICODE:
case ENUM_WIN2K:
_dwStructSize = sizeof(RASCONNSTATUSW);
break;
}
_pRasConnStatus = (LPRASCONNSTATUSA)LocalAlloc(LPTR, _dwStructSize);
if(_pRasConnStatus)
{
_pRasConnStatus->dwSize = _dwStructSize;
if(_EnumType == ENUM_MULTIBYTE)
{
_dwLastError = _RasGetConnectStatusA(hrasconn, (LPRASCONNSTATUSA)_pRasConnStatus);
}
else
{
_dwLastError = _RasGetConnectStatusW(hrasconn, (LPRASCONNSTATUSW)_pRasConnStatus);
}
if(_pRasConnStatus && (ERROR_SUCCESS != _dwLastError))
{
LocalFree(_pRasConnStatus);
_pRasConnStatus = NULL;
}
}
else
{
_dwLastError = ERROR_NOT_ENOUGH_MEMORY;
}
return;
}
RasGetConnectStatusHelp::~RasGetConnectStatusHelp()
{
_dwLastError = 0;
if(_pRasConnStatus)
{
LocalFree(_pRasConnStatus);
_pRasConnStatus = NULL;
}
}
DWORD RasGetConnectStatusHelp::GetError()
{
return _dwLastError;
}
RASCONNSTATE RasGetConnectStatusHelp::ConnState()
{
RASCONNSTATE hConnState = (RASCONNSTATE)NULL;
if(_pRasConnStatus)
{
if(_EnumType == ENUM_MULTIBYTE)
{
hConnState = _pRasConnStatus->rasconnstate;
}
else
{
LPRASCONNSTATUSW lpTemp = (LPRASCONNSTATUSW)_pRasConnStatus;
hConnState = lpTemp->rasconnstate;
}
}
return hConnState;
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
RasDialHelp::RasDialHelp(LPRASDIALEXTENSIONS lpRDE, LPWSTR lpszPB, LPRASDIALPARAMSW lpRDPW, DWORD dwType, LPVOID lpvNot, LPHRASCONN lphRasCon)
{
// init
_dwLastError = 1;
_pRasDialParams = NULL;
_lpszPhonebookA = NULL;
if(lpRDPW)
{
switch(_EnumType)
{
case ENUM_MULTIBYTE:
_pRasDialParams = (LPRASDIALPARAMSA)LocalAlloc(LPTR, sizeof(RASDIALPARAMSA));
if(_pRasDialParams)
{
if(lpszPB)
_lpszPhonebookA = (LPSTR)LocalAlloc(LPTR, (lstrlenW(lpszPB)+1) * sizeof(CHAR));
_pRasDialParams->dwSize = sizeof(RASDIALPARAMSA);
WideCharToMultiByte(CP_ACP, 0, lpRDPW->szEntryName, -1, _pRasDialParams->szEntryName, RAS_MaxEntryName, NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, lpRDPW->szPhoneNumber, -1, _pRasDialParams->szPhoneNumber, RAS_MaxPhoneNumber, NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, lpRDPW->szCallbackNumber, -1, _pRasDialParams->szCallbackNumber, RAS_MaxCallbackNumber, NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, lpRDPW->szUserName, -1, _pRasDialParams->szUserName, UNLEN, NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, lpRDPW->szPassword, -1, _pRasDialParams->szPassword, PWLEN, NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, lpRDPW->szDomain, -1, _pRasDialParams->szDomain, DNLEN, NULL, NULL);
_dwLastError = _RasDialA(lpRDE, _lpszPhonebookA, _pRasDialParams, dwType, lpvNot, lphRasCon);
}
else
{
_dwLastError = ERROR_NOT_ENOUGH_MEMORY;
}
break;
case ENUM_WIN2K:
case ENUM_UNICODE:
_pRasDialParams = (LPRASDIALPARAMSA)LocalAlloc(LPTR, sizeof(NT4RASDIALPARAMSW));
if(_pRasDialParams)
{
LPNT4RASDIALPARAMSW pRDPW = (LPNT4RASDIALPARAMSW)_pRasDialParams;
pRDPW->dwSize = sizeof(NT4RASDIALPARAMSW);
StrCpyNW(pRDPW->szEntryName, lpRDPW->szEntryName, RAS_MaxEntryName);
StrCpyNW(pRDPW->szPhoneNumber, lpRDPW->szPhoneNumber, RAS_MaxPhoneNumber);
StrCpyNW(pRDPW->szCallbackNumber, lpRDPW->szCallbackNumber, RAS_MaxCallbackNumber);
StrCpyNW(pRDPW->szUserName, lpRDPW->szUserName, UNLEN);
StrCpyNW(pRDPW->szPassword, lpRDPW->szPassword, PWLEN);
StrCpyNW(pRDPW->szDomain, lpRDPW->szDomain, DNLEN);
_dwLastError = _RasDialW(lpRDE, lpszPB, (LPRASDIALPARAMSW)pRDPW, dwType, lpvNot, lphRasCon);
}
else
{
_dwLastError = ERROR_NOT_ENOUGH_MEMORY;
}
break;
}
if(_pRasDialParams && (ERROR_SUCCESS != _dwLastError))
{
LocalFree(_pRasDialParams);
_pRasDialParams = NULL;
}
if(_lpszPhonebookA && (ERROR_SUCCESS != _dwLastError))
{
LocalFree(_lpszPhonebookA);
_lpszPhonebookA = NULL;
}
}
return;
}
RasDialHelp::~RasDialHelp()
{
_dwLastError = 0;
if(_pRasDialParams)
{
LocalFree(_pRasDialParams);
_pRasDialParams = NULL;
}
if(_lpszPhonebookA)
{
LocalFree(_lpszPhonebookA);
_lpszPhonebookA = NULL;
}
}
DWORD RasDialHelp::GetError()
{
return _dwLastError;
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////