我可以通过Windows GUI RasDial界面以及它的CLI等效( c:\windows\rasdial.exe
)完美地连接到我的VPN。 但是,当试图在C中自动化它时, RasDial
返回633: ERROR_PORT_NOT_AVAILABLE
( 源 )
这不是特定于我的。 我已经在四台不同的计算机上testing过了,每台计算机都有独立的互联网连接
这是我的源代码:
#include <windows.h> #include <winerror.h> #include <Ras.h> #include <raserror.h> #include <wchar.h> #include <stdio.h> int EnumConnections(); int DialOut(); int HangUp(); int Debug(); int main() { printf("Dial out return code: %d\n", DialOut()); printf("Debug status: %i\n", Debug()); EnumConnections(); HangUp(); return 0; } int EnumConnections() { DWORD dwCb = 0; DWORD dwRet = ERROR_SUCCESS; DWORD dwConnections = 0; LPRASCONN lpRasConn = NULL; if (dwRet == ERROR_BUFFER_TOO_SMALL) { lpRasConn = (LPRASCONN) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwCb); if (lpRasConn == NULL){ wprintf(L"HeapAlloc failed!\n"); return 0; } lpRasConn[0].dwSize = sizeof(RASCONN); dwRet = RasEnumConnections(lpRasConn, &dwCb, &dwConnections); if (ERROR_SUCCESS == dwRet){ wprintf(L"The following RAS connections are currently active:\n"); DWORD i; for (i = 0; i < dwConnections; i++){ wprintf(L"%s\n", lpRasConn[i].szEntryName); } } HeapFree(GetProcessHeap(), 0, lpRasConn); lpRasConn = NULL; } if(dwConnections >= 1) wprintf(L"The operation failed to acquire the buffer size.\n"); else wprintf(L"There are no active RAS connections.\n"); return 0; } int DialOut() { LPCTSTR pbkLoc = "C:\\rasphone.pbk\0"; char* szPhoneNumberToDial = "127.0.0.1"; char* szUserName = "test\0"; char* szPassword = "test\0"; RASDIALPARAMS rdParams; rdParams.dwSize = sizeof(RASDIALPARAMS); rdParams.szEntryName[0] = '\0'; lstrcpy(rdParams.szPhoneNumber, szPhoneNumberToDial); rdParams.szCallbackNumber[0] = '\0'; lstrcpy( rdParams.szUserName, szUserName ); lstrcpy( rdParams.szPassword, szPassword ); rdParams.szDomain[0] = '\0'; HRASCONN hRasConn = NULL; return RasDial(NULL, pbkLoc, &rdParams, 0L, NULL, &hRasConn); } int HangUp() { printf("Hung up\n"); HRASCONN hRasConn = NULL; return RasHangUp(hRasConn); } int Debug() { RASCONNSTATUS RasConnStatus; HRASCONN hRasConn = NULL; RasConnStatus.dwSize = sizeof(RasConnStatus); return RasGetConnectStatus(hRasConn,&RasConnStatus); }
有任何想法吗? 我真的被困在这里 我阅读了所有的RasDial文档。 我仍然不知道从哪里开始。
要连接到VPN连接,您必须在电话簿中包含一个条目。 如果没有提供条目,RasDial只能连接到拨号连接。 否则它会知道是否使用PPTP,L2TP,SSTP等?
根据上面的示例,您为条目提供的条目名称是一个空字符串,没有条目名称。 根据您的示例,您需要在“C:\ rasphone.pbk”中创建一个包含所有VPN连接信息的条目,并将条目名称传递到szEntryName字段中的结构中。
LPCTSTR entryName = "Your Entry Name\0"; rdParams.szEntryName = entryName;
希望有所帮助!