WCN(Windows Connect Now)框架在Win10下不起作用

时间:2016-05-27 07:19:07

标签: windows visual-c++

我正在尝试使用Windows WCN框架来实现Windows 10中的WPS(无线保护设置)功能。但是,我遇到了一些麻烦。我发现有人遇到了类似的问题,这里是the link

在我的程序中,我成功检测到了接入点的信息。然后我需要尝试通过WSC 2.0协议与它通信。我通过以下步骤完成:
1,创建一个实现IWCNConnectNotify的对象,我称之为WCNConnectNotify 2,调用IWCNDevice::SetNetworkProfile()函数设置配置文件;
3,调用IWCNDevice::SetPassword()函数设置WPS的模式;
4,调用IWCNDevice::Connect()函数尝试通过WSC 2.0协议与AP通信。

但是,一方面,当我尝试使用PIN_STA模式(将AP的PIN码输入网络适配器)与AP连接时,IWCNDevice::SetPassword()函数返回E_INVALIDARG,意味着传递给这个函数的参数是错误的!但示例程序可以在Win7上运行, Win8和Win8.1成功。更重要的是,我在一个文件中打印参数,发现没有错。示例代码如下:

//pDevice is a pointer of IWCNDevice class, pWcnConnectNotify is a pointer of WcnConnectNotify class.
WCN_PASSWORD_TYPE cfgType = WCN_PASSWORD_TYPE_PIN;
DWORD dwPinLen = 8;
UCHAR ucPin[8];
CopyMemory(ucPin, "12345670", 8);

hr = pDevice->SetPassword(cfgType, dwPinLen, ucPin);

if (hr != S_OK)
{
    printf("{%s} SetPassword() Failed! hr = 0x%x\n", __FUNCTION__, hr);
    continue;
}
    printf("{%s} SetPassword function success, now begin Connect Function.\n", __FUNCTION__);

hr = pDevice->Connect(pWcnConnectNotify);

另一方面,当我尝试使用PBC模式时,IWCNDevice::SetPassword()函数成功返回S_OK(当然传递给它的参数与PIN_STA模式不同),它可以运行IWCNDevice::Connect()功能,但无法与AP通信 在预设的时间内(我设定10秒)。

最混乱的是,相同的代码可以在Win7,Win8和Win8.1上成功运行,但没有Win10。我尝试在Win10中找到WindowsConnectNow的示例代码,但得到的不是。如果我错过重要的事情? 如果有人能帮我一个忙吗?如果有人能给我一个有用的建议,我真的很感激!非常感谢你!

1 个答案:

答案 0 :(得分:0)

我们遇到了类似的问题。在我们的情况下,我们在调用RPC_X_BAD_STUB_DATA时遇到崩溃(64位操作系统上的32位应用程序)或错误IWcnDevice::GetIntegerAttribute(64位操作系统上的64位应用程序)。我们发现我们的问题是由损坏的SDK头文件WcnDevice.h引起的。该文件在SDK 8.1和SDK 10之间进行了更改。在SetNFCPasswordParams接口的SetPasswordConnect方法之间插入了新的虚拟方法IWcnDevice。当使用不匹配的SDK标头和wcnapi.dll(实现IWcnDevice)时,这极有可能导致错误的COM方法调度。调用不同的虚拟方法而不是预期的方法。

在我们的案例中,当我们使用SDK 8.1中的WcnDevice.h时,问题已得到解决。试一试。