我刚收到我的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
来处理执行“RemoteWipe”的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
RemoteWipe配置服务提供商使移动运营商能够远程擦除设备。如果在丢失或被盗后远程擦除设备,RemoteWipe配置服务提供商将使存储在内存,存储卡和硬盘中的数据难以恢复。