[c++]代码库
CRas ras;
RASENTRY rasEntry;
char strName[50];// = "COMKK";
DWORD lpcb = 0;
DWORD lpcDevices;
RASDEVINFO* lpRasDevInfo;
RASDEVINFO rasdevinfo;
strcpy(strName,VPNName.GetBuffer(VPNName.GetLength()));
RasEnumDevices(NULL, &lpcb, &lpcDevices);
lpRasDevInfo = (LPRASDEVINFO) GlobalAlloc(GPTR, lpcb);
lpRasDevInfo->dwSize = sizeof(RASDEVINFO);
RasEnumDevices(lpRasDevInfo, &lpcb, &lpcDevices);
strcpy (rasdevinfo.szDeviceName, lpRasDevInfo->szDeviceName);
strcpy (rasdevinfo.szDeviceType, lpRasDevInfo->szDeviceType);
rasEntry.dwSize = sizeof (RASENTRY);
//rasEntry.dwfOptions = RASEO_RemoteDefaultGateway | RASEO_SpecificNameServers;
//rasEntry.dwfOptions = RASEO_RequireMsEncryptedPw | RASEO_RequireDataEncryption;
rasEntry.dwAlternateOffset = 0;
rasEntry.dwCountryID = 86;
rasEntry.dwCountryCode = 86;
// rasEntry.dwDialExtraPercent = 75;
// rasEntry.dwDialExtraSampleSeconds = 120;
// rasEntry.dwDialMode = 1;
// rasEntry.dwVpnStrategy = 1;
// rasEntry.dwfNetProtocols = 4;
rasEntry.dwfOptions = 1024262928;
// rasEntry.dwfOptions2 = 367;
rasEntry.dwFramingProtocol = 1;
// rasEntry.dwHangUpExtraPercent = 10;
// rasEntry.dwHangUpExtraSampleSeconds = 120;
// rasEntry.dwRedialCount = 3;
// rasEntry.dwRedialPause = 60;
// rasEntry.dwType = RASET_VPN;
rasEntry.dwFrameSize = 0;
rasEntry.dwfNetProtocols = RASNP_Ip; // TCP/IP
rasEntry.dwFramingProtocol = RASFP_Ppp; //PPP
rasEntry.dwChannels = 0;
rasEntry.dwReserved1 = 0;
rasEntry.dwReserved2 = 0;
// Strings
strcpy (rasEntry.szAreaCode, " ");
strcpy (rasEntry.szScript, "");
strcpy (rasEntry.szAutodialDll, "");
strcpy (rasEntry.szAutodialFunc, "");
strcpy (rasEntry.szX25PadType, "");
strcpy (rasEntry.szX25Address, "");
strcpy (rasEntry.szX25Facilities, "");
strcpy (rasEntry.szX25UserData, "");
strcpy (rasEntry.szDeviceName,"WAN 微型端口 (PPTP)");
strcpy (rasEntry.szDeviceType, "vpn");
strcpy (rasEntry.szLocalPhoneNumber, VPNAddress.GetBuffer(VPNAddress.GetLength()));/*"140.207.3.74"59.188.23.84"218.242.176.71"*///服务器地址或域名
// rasEntry.dwVpnStrategy = VS_DEFAULT; //vpn类型
// rasEntry.dwEncryptionType = ET_OPTIONAL; //数据加密类型
// IP addresses
InitRASIP (rasEntry.ipaddr);
InitRASIP (rasEntry.ipaddrDns);
InitRASIP (rasEntry.ipaddrDnsAlt);
InitRASIP (rasEntry.ipaddrWins);
InitRASIP (rasEntry.ipaddrWinsAlt);
//Create Entry
DWORD dwError;
dwError = ras.RasSetEntryProperties (NULL, strName, &rasEntry, sizeof (RASENTRY), NULL, NULL);
if (dwError == 0) {
RASDIALPARAMS dialParm;
dialParm.dwSize = sizeof (RASDIALPARAMS);
strcpy (dialParm.szEntryName, strName);
strcpy (dialParm.szPhoneNumber, "");
strcpy (dialParm.szCallbackNumber, "");
strcpy (dialParm.szUserName,VPNUser.GetBuffer(VPNUser.GetLength()));// "zdx"/*"hdj"*/
strcpy (dialParm.szPassword,VPNPass.GetBuffer(VPNPass.GetLength()));// "19881011"/*"hdj"*/
strcpy (dialParm.szDomain, "");
dwError = ras.RasSetEntryDialParams(NULL, &dialParm,FALSE);
if( dwError == 0 ) {
//dwError = ras.RasSetCredentials(NULL, strName, &rasEntry, 0);
m_log += "正在进行网络连接,请稍候...\r\n";
frameWnd->PostMessage(WM_UPDATE_MESSAGE,0,0);
//SetDlgItemText( IDC_EDIT_LOG, "正在进行网络连接,请稍候..." );
dwError = RasDial( NULL, NULL, &dialParm, 0L, NULL, &m_hRasConn );
if ( dwError ) {
char szBuf[256] = "";
// 网络连接错误
if ( RasGetErrorString( (UINT)dwError, (LPSTR)szBuf, 255 ) != 0 ) {
_stprintf( (LPTSTR)szBuf, "Undefined RAS Dial Error (%ld).", dwError );
}
m_log += "网络连接异常...";
frameWnd->PostMessage(WM_UPDATE_MESSAGE,0,0);
//SetDlgItemText( IDC_EDIT_LOG, szBuf ),
EndDialog(FALSE);
//return FALSE;
}
}
}
m_log += "远程网络已正常连接!\r\n";
frameWnd->PostMessage(WM_UPDATE_MESSAGE,0,0);