首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式在Windows中设置PEAP连接

以编程方式在Windows中设置PEAP连接
EN

Stack Overflow用户
提问于 2009-05-22 13:54:33
回答 4查看 4.3K关注 0票数 2

我已经为此做了几天了,我的脑子里想的是:

我们的应用程序是使用WindowsCompactFramework2.0构建的,运行在WindowsMobile5-6设备上。我们可以使用Wireless函数(这里描述: msdn.microsoft.com/en-us/library/ms894771.aspx),,尤其是我们从应用程序中调用的WZCSetInterface函数)编程地设置设备的WLAN连接。这对WEP和WPA连接很好.

最近,为了增加对WPA2网络的支持,我们决定修改代码。我们已经成功地添加了对WPA2的支持,它通过在调用WZCSetInterface之前设置正确的注册表设置来使用用于802.1x身份验证的证书。现在,我们希望使用PEAP (MS 2)身份验证对WPA2进行同样的操作。在Windows中手动创建此类连接时,将提示用户输入域/用户/密码详细信息。在我们的应用程序中,我们将在本地存储这些细节,并且希望在没有任何用户干预的情况下以编程的方式完成这些操作。

因此,我考虑沿着与证书身份验证相同的路线,在调用WZCSetInterface之前设置正确的注册表项。

我们设置的注册表设置为:\HKCU\Comm\EAP\Config[ssid名称]

  • Enable8021x =1 (DWORD)
  • LastAuthSuccessful =1 (DWORD)
  • EapTypeId = 25 (DWORD)
  • 标识=“域\用户名”(字符串)
  • 密码=二进制blob,其中包含使用 msdn.microsoft.com/en-us/library/ms938309.aspx)函数(在这里描述: CryptProtectData函数)

但是,当设置这些设置并使用正确的参数调用WZCSetInterface时,它仍然会使用用户登录对话框提示我询问域/用户名/密码。

有没有人知道我需要做些什么来防止密码对话框出现并立即与存储在注册表中的设置连接?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-02-25 10:56:57

经过进一步的调查,我最终放弃了注册表设置。成功连接的关键似乎是HKCU\Comm\EAP\ConfigSSID中的密码值。但是,由于CryptProtectData使用一个无文档的熵值(出于明显的安全原因)对密码进行加密,因此不可能以编程方式重新创建注册表中的有效条目。

然后,我使用了第二种最佳解决方案,在调用WZCSetInterface之后捕获用户登录对话框,并在其中输入所需的字段:

代码语言:javascript
复制
bool enteredPeapCred = false;
DateTime timePeapCredStarted = DateTime.Now.AddSeconds(10);

// wait for PEAP credentials window to appear (max. wait for 10 seconds)
while (!enteredPeapCred && timePeapCredStarted >= DateTime.Now)
{
  IntPtr hwndLogon = Win32.FindWindow(null, "User Logon");

  if (hwndLogon != IntPtr.Zero)
  {
    // move User Logon window offscreen to prevent screen flicker in app
    Win32.MoveWindow(hwndLogon, -600, 0, 320, 480, true);                               

    // "Network Log On" label   
    IntPtr hwndCtrl1 = Win32.GetWindow(hwndLogon, Win32.GW_CHILD); 
    // "Enter network info..." label
    IntPtr hwndCtrl2 = Win32.GetWindow(hwndCtrl1, Win32.GW_HWNDNEXT); 
    // "User name:" label
    IntPtr hwndCtrl3 = Win32.GetWindow(hwndCtrl2, Win32.GW_HWNDNEXT); 
    // username textbox
    IntPtr hwndCtrl4 = Win32.GetWindow(hwndCtrl3, Win32.GW_HWNDNEXT);
    // "Password:" label 
        IntPtr hwndCtrl5 = Win32.GetWindow(hwndCtrl4, Win32.GW_HWNDNEXT);
    // password textbox 
    IntPtr hwndCtrl6 = Win32.GetWindow(hwndCtrl5, Win32.GW_HWNDNEXT); 
    // enter password into textbox
    StringBuilder sbPassword = new StringBuilder();
    sbPassword.Append(eapPassword);
    Win32.SetWindowText(hwndCtrl6, sbPassword);
    // "Domain:" label
    IntPtr hwndCtrl7 = Win32.GetWindow(hwndCtrl6, Win32.GW_HWNDNEXT); 
    // domain textbox
    IntPtr hwndCtrl8 = Win32.GetWindow(hwndCtrl7, Win32.GW_HWNDNEXT);
    // "Save password" checkbox 
    IntPtr hwndCtrl9 = Win32.GetWindow(hwndCtrl8, Win32.GW_HWNDNEXT); 
    // send BST_CHECKED message to set checkbox
    Win32.SendMessage(hwndCtrl9, Win32.BM_SETCHECK, Win32.BST_CHECKED, 0);                                

    // send WM_COMMAND with left softkey to submit user dialog
    IntPtr hwndMenu = Win32.SHFindMenuBar(hwndLogon);
    Win32.SendMessage(hwndLogon, Win32.WM_COMMAND, 0x2F87, hwndMenu.ToInt32());

    enteredPeapCred = true;                                
  }
}

请注意,我只设置密码字段,因为用户名和域字段预先填充了已存储在注册表中的信息(在我最初的问题中提到的标识值)。

这很好,因为它使用PEAP凭据创建WLAN连接。通过在屏幕上移动用户登录对话框,这一切在应用程序的用户(我们的应用程序运行在kiosk模式下)上是看不见的。

票数 1
EN

Stack Overflow用户

发布于 2010-01-21 18:22:36

我不知道这是否会对你有所帮助,但我也遇到了同样的问题,我一直在添加注册表条目,直到有什么东西解决了它。我不知道哪些是修复的,但下面是我正在使用的条目(编辑以隐藏与安全相关的信息):

Windows注册表编辑器5.00版

代码语言:javascript
复制
[HKEY_LOCAL_MACHINE\Comm\SecurityProviders\SCHANNEL]
"RNG"=-

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WZCSVC\Parameters]
"ContextSettings"=hex:\[REMOVED]

[HKEY_LOCAL_MACHINE\System\DPAPIKeys\System]
@=hex:\[REMOVED]

[HKEY_LOCAL_MACHINE\System\DPAPIKeys\default]
@=hex:\[REMOVED]

[HKEY_LOCAL_MACHINE\init\BootVars]
"MasterKeysInRegistry"=dword:1

[HKEY_CURRENT_USER\Comm\EAPOL\Config\[REMOVED]]
"LastAuthSuccessful"=dword:00000001
"Password"=hex:\[REMOVED]
"Identity"=[REMOVED]
"EapTypeId"=dword:00000019
"Enable8021x"=dword:00000001

[HKEY_CURRENT_USER\Comm\EAPOL\Config\[REMOVED]\25]
"ConnectionData"=hex:[REMOVED]

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Ethman\Popup]
"Enable"=dword:00000000
"Timeout"=dword:0000000F

[HKEY_CURRENT_USER\System\Credentials\Type\2]
@=hex:\[REMOVED]
票数 0
EN

Stack Overflow用户

发布于 2010-02-25 11:25:11

我们已经在WindowsCE5.0和6.0下的乞求者项目中取得了积极的经验。我不知道它在WM下是否有效,但我想是的。

我们的应用程序中的集成需要一些努力(即围绕wpa_supplicant核心创建服务,禁用Zero配置驱动程序)。但是,这是值得的:我们的应用程序完全控制了整个配置/关联过程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/897961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档