///////////////////////////////////////////////////////////////////////////// // // 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; } ///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////