• (Tips &Tricks)如何为Windows Mobile 创建拨号连接C#


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

     

  • 相关阅读:
    Transaction 'IREG', Abend 'APCT', at '????'.
    CICS中设置是否具有可修改性
    常用命令总结
    常用语句总结
    _func_
    数组排序返回索引-python和c++的实现
    数组的并行求和-cuda实现
    Pytorch 多GPU训练-多计算节点并行-All you need
    Pytorch 多GPU训练-单运算节点-All you need
    Windows 编程中的问题
  • 原文地址:https://www.cnblogs.com/osamede/p/1486330.html
Copyright © 2020-2023  润新知