|
@@ -8,10 +8,10 @@
|
|
|
#include <RasError.h>
|
|
|
#include <vector>
|
|
|
#include <iostream>
|
|
|
-
|
|
|
+#include "raserror.h"
|
|
|
#pragma comment(lib, "wininet")
|
|
|
#pragma comment(lib, "Rasapi32")
|
|
|
-
|
|
|
+#pragma comment(lib, "rasapi32.lib")
|
|
|
|
|
|
#include <string>
|
|
|
// For getPlatformVersion; remove unless needed for your plugin implementation.
|
|
@@ -235,34 +235,48 @@ void KillProcess(const std::wstring& processName) {
|
|
|
|
|
|
|
|
|
bool isDialUpEnabled() {
|
|
|
- RASCONN rasConn[256];
|
|
|
- DWORD dwSize = sizeof(rasConn);
|
|
|
+ DWORD dwCb = 0;
|
|
|
+ DWORD dwRet = ERROR_SUCCESS;
|
|
|
DWORD dwConnections = 0;
|
|
|
- rasConn[0].dwSize = sizeof(RASCONN);
|
|
|
+ LPRASCONN lpRasConn = NULL;
|
|
|
|
|
|
- // 调用 RasEnumConnections 检查是否有拨号连接
|
|
|
- if (RasEnumConnections(rasConn, &dwSize, &dwConnections) == ERROR_SUCCESS) {
|
|
|
- std::wcout << L"连接数: " << dwConnections << std::endl;
|
|
|
+ // 第一次调用 RasEnumConnections 来获取所需的缓冲区大小
|
|
|
+ dwRet = RasEnumConnections(lpRasConn, &dwCb, &dwConnections);
|
|
|
|
|
|
- // 如果没有任何连接,直接返回 false
|
|
|
- if (dwConnections == 0) {
|
|
|
+ if (dwRet == ERROR_BUFFER_TOO_SMALL) {
|
|
|
+ // 分配内存来保存 RAS 连接信息
|
|
|
+ lpRasConn = (LPRASCONN)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwCb);
|
|
|
+ if (lpRasConn == NULL) {
|
|
|
+ wprintf(L"HeapAlloc failed!\n");
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- for (DWORD i = 0; i < dwConnections; i++) {
|
|
|
- std::wcout << L"连接类型: " << rasConn[i].szDeviceType << std::endl;
|
|
|
-
|
|
|
- // 检查连接类型是否为 PPP 或 PPPoE
|
|
|
- if (wcscmp(rasConn[i].szDeviceType, L"RASDT_PPP") == 0 ||
|
|
|
- wcscmp(rasConn[i].szDeviceType, L"RASDT_PPPoE") == 0) {
|
|
|
- return true; // 检测到 PPP 或 PPPoE 连接
|
|
|
+ // 初始化结构体大小
|
|
|
+ lpRasConn[0].dwSize = sizeof(RASCONN);
|
|
|
+
|
|
|
+ // 再次调用 RasEnumConnections 以填充连接信息
|
|
|
+ dwRet = RasEnumConnections(lpRasConn, &dwCb, &dwConnections);
|
|
|
+
|
|
|
+ // 检查是否成功,并且有连接
|
|
|
+ if (ERROR_SUCCESS == dwRet && dwConnections > 0) {
|
|
|
+ // 遍历连接,检查是否有 PPP 或 PPPoE 类型的拨号连接
|
|
|
+ for (DWORD i = 0; i < dwConnections; i++) {
|
|
|
+ if (wcscmp(lpRasConn[i].szDeviceType, L"RASDT_PPP") == 0 ||
|
|
|
+ wcscmp(lpRasConn[i].szDeviceType, L"RASDT_PPPoE") == 0) {
|
|
|
+ // 释放内存后返回 true,表示有拨号连接
|
|
|
+ HeapFree(GetProcessHeap(), 0, lpRasConn);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ // 释放内存
|
|
|
+ HeapFree(GetProcessHeap(), 0, lpRasConn);
|
|
|
}
|
|
|
- // 没有找到符合条件的连接类型,返回 false
|
|
|
+
|
|
|
+ // 没有找到符合条件的拨号连接,返回 false
|
|
|
return false;
|
|
|
}
|
|
|
-
|
|
|
namespace wl_base_help {
|
|
|
|
|
|
// static
|