我刚得到我的Treo,注意到缺乏软件重置(在重置按钮上使用触笔的需要真的让我恼火),我决定建立自己的。
我的小程序的重置和挂起部分工作起来很有魅力,然后我决定再改进一点,添加一个硬重置功能,将设备恢复到出厂设置。
在网上搜索高低,我找到了两种可能的方法。第一个涉及到打电话
SetCleanRebootFlag()
然后重置设备。
[DllImport("coredll.dll", SetLastError=true)]
public static extern void SetCleanRebootFlag();
[DllImport("coredll.dll", SetLastError=true)]
private static extern int SetSystemPowerState(IntPtr psState, PowerStateFlags flags, uint Options);
[DllImport("coredll.dll", SetLastError=true)]
private static extern bool KernelIoControl(int dwIoControlCode, IntPtr inBuf, int inBufSize, IntPtr outBuf, int outBufSize, ref int bytesReturned);
public static void SoftReset()
{
if (SetSystemPowerState(IntPtr.Zero, PowerStateFlags.Reset, 0x1000) != 0)
{
int bytesReturned = 0;
if (!KernelIoControl(0x101003c, IntPtr.Zero, 0, IntPtr.Zero, 0, ref bytesReturned))
{
throw new Win32Exception(Marshal.GetLastWin32Error());
}
}
}
public static void HardReset()
{
SetCleanRebootFlag();
SoftReset();
}
另一个涉及使用
ConfigurationManager
处理将执行“远程擦除”的XML。
public static void HardReset()
{
XmlDocument doc = new XmlDocument();
doc.LoadXml("<wap-provisioningdoc>" +
"<characteristic type='RemoteWipe'>" +
"<parm name='doWipe' value='1'/>" +
"</characteristic>" +
"</wap-provisioningdoc>");
ConfigurationManager.ProcessConfiguration(doc, true);
}
第一个方法不起作用,因为在Windows Mobile 5之后,它忽略了
CleanBootFlag
第二种方法奏效了…太多。
它损坏了设备上的microSD,以至于需要重新格式化才能再次被识别。
有人对此有经验吗?
编辑以添加
:
不幸的是,我的问题的答案和
Paul Betts
说。引用
MSDN
远程擦除配置服务提供程序允许移动运营商远程擦除设备。远程擦除配置服务提供程序将使数据存储在
内存、存储卡和硬盘
如果设备丢失或被盗后被远程擦除,则很难恢复。