Prev: dependences files >38 MB ?
Next: Type.GUID Replacement
From: PJ on Development on 21 Dec 2009 16:42 I just got my Treo and noting the lack of a software reset (the need to use the stylus on the reset button really annoys me), I decided to build my own. The Reset and Suspend part of my little program works like a charm and then I decided to improve a little more and add a Hard Reset feature, which would restore the device to its factory settings. Searching high and low on the net I found two possible ways. The first one involved calling SetCleanRebootFlag() and then reset the device. ---- Begin Code Snippet ---- [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(); } ---- End Code Snippet ---- The other involved using the ConfigurationManager to process a XML that would perform a "RemoteWipe". ---- Begin Code Snippet ---- 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); } ---- End Code Snippet ---- The first method didn't work because after Windows Mobile 5 it ignores the CleanBootFlag; the second method worked... too much. It corrupted the microSD on the device to the point that it needed to be reformatted in order to be recognized again. Does anyone had any experience with that?
From: Sasha K. on 1 Jan 2010 23:10 On Dec 21 2009, 4:42 pm, PJ on Development <pjondevelopm...(a)gmail.com> wrote: > I just got my Treo and noting the lack of a software reset (the need > to use the stylus on the reset button really annoys me), I decided to > build my own. > > The Reset and Suspend part of my little program works like a charm and > then I decided to improve a little more and add a Hard Reset feature, > which would restore the device to its factory settings. > > Searching high and low on the net I found two possible ways. The first > one involved calling SetCleanRebootFlag() and then reset the device. > > ---- Begin Code Snippet ---- > [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();} > > ---- End Code Snippet ---- > > The other involved using the ConfigurationManager to process a XML > that would perform a "RemoteWipe". > > ---- Begin Code Snippet ---- > 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);} > > ---- End Code Snippet ---- > > The first method didn't work because after Windows Mobile 5 it ignores > the CleanBootFlag; the second method worked... too much. > > It corrupted the microSD on the device to the point that it needed to > be reformatted in order to be recognized again. > > Does anyone had any experience with that? I've never had a remote wipe operation *corrupt* my storage card, but as part of said operation, the device is supposed to wipe it as well as its internal memory. That's a key difference between a hard reset and remote wipe. I could see some kind of corruption happening if your card had encryption turned on, I suppose... As for doing a proper hard reset, there's no reliable way to do it in code as of WM5. Please see the following blog entry and its comments: http://blogs.msdn.com/ce_base/archive/2006/02/09/How_OEMs_implement_Clean_Boot_on_WM5.aspx
|
Pages: 1 Prev: dependences files >38 MB ? Next: Type.GUID Replacement |