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

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 心利

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 .目前尚不知道如何解决这个问题。