【WM】应用程序实现网络去附着(unregister)的简便方法

本文介绍了一种在WindowsMobile环境下实现网络去附着的方法,通过使用未公开的UnregisterFromNetwork函数,开发者可以同步地从网络中注销,并通过回调函数获取注销结果。

在Windows Mobile下,应用程序如果需要网络去附着一般需要调用RIL函数RIL_UnregisterFromNetwork(调用扩展TAPI函数lineUnregister的很少见)。但是,由于该函数是异步的,如果想通过result callback获知网络去附着是否成功的话就比较麻烦了。

 

因此,笔者在此介绍一个未归档的函数UnregisterFromNetwork,该函数亦可实现网络去附着功能,其函数原型如下:

 

//  *************************************************************************
//  UnregisterFromNetwork
//
//  Purpose:
//      Unregisters the radio module from the network if it is
//      possible to do so, and waits for that operation to complete.
//
//  Returns:
//      HRESULT
//
//  *************************************************************************
HRESULT WINAPI UnregisterFromNetwork();

 

开发者如果要链接该函数需要使用导入库ccoreutl.lib

 

以下是根据笔者反汇编所得,改用C/C++描述的UnregisterFromNetwork函数实现:

 

该函数实现较为简单,依次调用了RIL_Initialize、RIL_UnregisterFromNetwork和RIL_Deinitialize。由于RIL_UnregisterFromNetwork是异步的,为了等待去附着过程完成就用到了一个Event内核对象,不过这里的WaitForSingleObject函数调用传入的第二个参数是INFINITE,很可能造成主调线程挂起。这个Event内核对象则是通过回调函数RIL_RESULT_Callback在去附着操作完成时设置成signaled状态。

 

PS: 如果微软在实现该函数时给出一个timeout参数就完美了。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值