惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Forbes - Security
Forbes - Security
L
Lohrmann on Cybersecurity
Simon Willison's Weblog
Simon Willison's Weblog
P
Proofpoint News Feed
P
Privacy International News Feed
The Hacker News
The Hacker News
AWS News Blog
AWS News Blog
S
Securelist
P
Proofpoint News Feed
Recent Announcements
Recent Announcements
GbyAI
GbyAI
B
Blog RSS Feed
A
About on SuperTechFans
C
CXSECURITY Database RSS Feed - CXSecurity.com
Y
Y Combinator Blog
Microsoft Azure Blog
Microsoft Azure Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Cyberwarzone
Cyberwarzone
I
Intezer
T
Tor Project blog
T
The Blog of Author Tim Ferriss
The GitHub Blog
The GitHub Blog
云风的 BLOG
云风的 BLOG
Recorded Future
Recorded Future
aimingoo的专栏
aimingoo的专栏
Cisco Talos Blog
Cisco Talos Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
W
WeLiveSecurity
D
DataBreaches.Net
U
Unit 42
Project Zero
Project Zero
Martin Fowler
Martin Fowler
V
V2EX
The Last Watchdog
The Last Watchdog
Security Archives - TechRepublic
Security Archives - TechRepublic
C
Cisco Blogs
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V2EX - 技术
V2EX - 技术
Hacker News - Newest:
Hacker News - Newest: "LLM"
T
Threat Research - Cisco Blogs
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Tenable Blog
F
Full Disclosure
T
The Exploit Database - CXSecurity.com
H
Heimdal Security Blog
Latest news
Latest news
Webroot Blog
Webroot Blog

博客园 - 心利

DocOptimizer 0.9.0 Beta Released SharePoint GroupedItemPicker Control Drag & Drop between SharePoint Document libraries Improving SharePoint User Experience With JQuery-Client Side Form Validate SharePoint How To:定位错误:“An SPRequest object was not disposed .." SharePoint Tips and Tricks --如何用JS向PeopleEditor填充数据 SharePoint Tips and Tricks -- Ribbon,People Editor 使用T4为数据库自动生成实体类(C#) (Tips&Tricks)用客户端模板精简JavaScript代码 System.Xml FAQ Part 1 Windows Ce vs Windows Mobile Asp.net程序中生成Excel报表 My Page StartKit项目概览 做一个更好的程序员 .Net类库中实现的HashTable 为Asp.net控件写单元测试(ViewState) 使用Control Adapters优化Asp.net控件 ViewState 简述一(With Example And Apply to Asp.net) 桌面背景:rss新闻阅读器(图)
(Tips &Tricks)如何为Windows Mobile 创建拨号连接--C#
心利 · 2009-05-21 · via 博客园 - 心利
 

简单介绍在Windows Mobile系统上创建网络连接的2种方法。

1 通过用于更改系统配置的API DMProcessConfigXML

2创建的拨号连接的操作,其实是创建一个Phone-Book Entries,并将其存入注册表中。Phone-Book Entries包括一组值,例如用户名,密码,phone number network protocols等,操作系统使用Phone-Book Entries中的值创建RAS 连接。方法二通过RAS API 创建一个Phone-Book Entries,并在注册表中填入相应的项。

 方法一: 通过DMProcessConfigXML

DMProcessConfigXML是一个用于修改系统配置的API。这个函数接受使用OMA Client Provisioning XML描述的配置信息。

  [DllImport("aygshell.dll")]
        
private extern static UInt32 DMProcessConfigXML(string xmlIn, UInt32 flag, out IntPtr xmlOutPtr);

我们只需要将需要建立的拨号连接参数,用指定的XMl格式描述出来,然后传递给它,即可。

   IntPtr xmlOutPtr;
   long result;        
   result = DMProcessConfigXML(xml, (uint)flag, out xmlOutPtr);
   System.Diagnostics.Debug.Assert(result == 0);
   //此处一定要释放掉 xmlOutPtr所指向的内存

相应的XML示例:

<wap-provisioningdoc><characteristic type="CM_GPRSEntries"><characteristic type="我的连接1"><parm name="DestId" value="{ADB0B001-10B5-3F39-27C6-

9742E785FCD4}"

/><parm name="CountryCode" value="0"/><parm name="AreaCode" value=""/><parm name="Phone" value="#777"/><parm name="UserName" value="******"/><parm name="Password" value="******"/><parm name="Domain" value=""/><parm name="DeviceType" value="modem"/><parm name="DeviceName" value="Cellular Line"/><parm name="Enabled" value="1"/><parm name="RequirePw" value="1"/></characteristic></characteristic></wap-provisioningdoc>

上面XML建立了一个名为“我的连接1”的拨号连接.

其中CM_GPRSEntriesConfiguration Service Provider,用于配置网络连接。关于其支持的所有参数,以及详细的XML格式,可以参考MSDN 上的文档

此处有一个问题。以上的XML指定了“我的连接1",使用的设备名称为"电话线路(Cellular Line)",可是调用DMProcessConfigXML后,用新创建的连接拨号,提示错误“找不到设备”。开始以为是设备名称有误,但是使用RAS API函数RasGetEntryProperties获取设备名称(通过正常工作的,使用电话线路的连接),得到的名称的确是“Cellular Line”,无奈之下只好用设备的序列号来指定设备。

<wap-provisioningdoc>
    
<characteristic type="CM_GPRSEntries">
        
<characteristic type="我的连接1">
            
<parm name="DestId" value="{ADB0B001-10B5-3F39-27C6-
9742E785FCD4}"
/>
            
<parm name="CountryCode" value="0"/>
            
<parm name="AreaCode" value=""/>
            
<parm name="Phone" value="#777"/>
                        
<parm name="UserName" value="******"/>
            
<parm name="Password" value="******"/>
            
<parm name="Domain" value=""/>
            
<parm name="DeviceType" value="modem"/>
            
<parm name="DeviceName" value="Cellular Line"/>
            
<parm name="Enabled" value="1"/>
            
<parm name="RequirePw" value="1"/>
<parm name='DeviceSpecificRAW'
value
='B4010000B4010000B4010000010000000F0000000100000002000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000'
/></characteristic>
    
</characteristic>
</wap-provisioningdoc>

设备序列号即注册表目录HKEY_CURRENT_USER\Comm\RasBook\下的值DevCfg

方法二 通过RAS API

      创建的拨号连接的操作,其实是创建一个Phone-Book Entries,并将其存入注册表中。Phone-Book Entries包括一组值,例如用户名,密码,phone number network protocols等,操作系统使用Phone-Book Entries中的值创建RAS 连接。

      我们可以使用Ras Api

 [DllImport("coredll.dll")]
        
public static extern UInt32 RasGetEntryProperties(
   
string lpszPhoneBook,
   
string szEntry,
   IntPtr lpEntry,
   
ref UInt32 lpdwEntrySize,
    
char[] lpb,ref uint dwSize);

将一个Phone-Book Entries对象保存到注册表里。OpenNETCF有一个类库RAS library ,封装了Ras相关的操作,你可以Codeplex上获取到

为了使 RasGetEntryProperties创建的连接可以显示在windows mobile中的设置--系统--连接---管理现有连接里,你需要再注册表中写入一些值。

            RegistryKey hklm = Registry.LocalMachine;
            hklm 
= hklm.OpenSubKey("Comm");
            hklm 
= hklm.OpenSubKey("ConnMgr");
            hklm 
= hklm.OpenSubKey("Providers");
            hklm 
=
            hklm.OpenSubKey(
"{7C4B7A38-5FF7-4bc1-80F6-5DA7870BB1AA}");
            hklm 
= hklm.OpenSubKey("Connections"true);
                   RegistryKey MASCA 
= hklm.CreateSubKey(lpszName);
            hklm 
= hklm.OpenSubKey(lpszName, true);
            hklm.SetValue(
"EntryType"0, RegistryValueKind.DWord);
            hklm.SetValue(
"Enabled"1, RegistryValueKind.DWord);
            hklm.SetValue(
"RequirePW"1, RegistryValueKind.DWord);
            
//  hklm.SetValue("DestId", "{ADB0B001-10B5-3F39-27C6-9742E785FCD4}", RegistryValueKind.String);
            hklm.SetValue("DestId""{B8F853C5-2CCF-4CA6-957B-B3A41AC8C9D8}", RegistryValueKind.String);
           
            hklm.Close();

又有一个问题(),通过这种方法创建的连接,使用连接管理API函数ConnMgrMapConRef 获取不到它的Connection GUID,

但是在“设置--系统--连接---管理现有连接里”,点击连接,拨号成功,然后才可以获取到Connection Guid .目前尚不知道如何解决这个问题。