我有以下WinRT代码,用于发现活动VPN配置文件并且它能良好运行:
VpnManagementAgent vpn;
auto profiles = vpn.GetProfilesAsync().get();
wprintf(L"Found %d profiles\n", profiles.Size());
for (auto vp : profiles)
{
wprintf(L"Found profile %s\n", vp.ProfileName().c_str());
}
我想检查ConnectionStatus,但在IVpnProfile接口中无法使用。虽然在具体的VpnPlugInProfile和VpnNativeProfile类中有ConnectionStatus可用,但添加以下内容未能解决:
VpnPlugInProfile pp = vp.as<VpnPlugInProfile>();
if (pp != nullptr)
wprintf(L"ConnectionStatus = %d\n", pp.ConnectionStatus());
这只是产生了一个无效句柄错误。
是否有一种方法可以从IVpnProfile获取ConnectionStatus?
IVpnProfile
获取连接状态非常容易 - 只需从Windows.Networking.Vpn.VpnNativeProfile
查询一个新的配置文件,将其分配给你新获取的配置文件名称,然后查询具有get_ConnectionStatus
的VpnNativeProfile2。我有C代码可以做到这一点,并进行了测试(原因是我将其作为评论而不是答案发布)。我无法执行的更复杂的任务是获取当前连接到哪些服务器。 - AnArrayOfFunctions%userprofile%\AppData\Local\Packages\%fullpackagename%\LocalState
中创建rasphone.pbk
文件。因为如果您已经这样做了,IVpnProfile
可以查询IVpnNativeProfile
。该程序设计得非常巧妙,如果在应用程序LocalState中缺少rasphone.pbk
,它只会填充配置文件名称并禁止进一步查询nativeprofile。感谢上帝的Microsoft。然而,我通过一些繁重的逆向工程发现了这一点 - 如果有一个良好的文档以及良好的代码,那将会很有帮助。 - AnArrayOfFunctions