在UWP应用程序中,是否有一种从IVpnProfile获取ConnectionStatus的方法?

10

我有以下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?


这听起来不太对。as 成员函数模板要么返回有效的接口指针,要么抛出异常。你具体收到了什么错误信息?它来自哪里? - IInspectable
抱歉,是的,无效句柄错误发生在周围的catch块中,因此正在抛出。 - Paul Dolphin
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
1个回答

0
提示:无效的句柄错误是 Windows 中的一个 bug;已经修复,并向下级提供了补丁(可能是针对 RS5 和 19H1)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接