デバイスの工場出荷時状態に戻す(ハードリセットを行う)

Windows Mobile端末を工場出荷状態に戻すハードリセットをソフトウェアから実行する方法があるのを教えてもらいました。ソフトリセットと違うので実行の際には気をつけてください……

「.NET CFから強制的にデバイスをハードリセットする方法ってないのー?(超意訳)」の質問に対して、Windows Mobile開発者のBlogで回答されているのを見付けました。

KernelIoControl関数でリセットしているけど、ExitWindowsEx関数でもなんでも再起動が出来れば、ハードリセットが有効になります。

C#

   [System.Runtime.InteropServices.DllImport("Coredll.dll")]
   extern static int KernelIoControl(int dwIoControlCode, 
                                     IntPtr lpInBuf, 
                                     int nInBufSize, 
                                     IntPtr lpOutBuf, 
                                     int nOutBufSize , 
                                     ref int lpBytesReturned );
 
   [System.Runtime.InteropServices.DllImport("Coredll.dll")]
   extern static void SetCleanRebootFlag();
 
   public void HardReset()
   {
      int IOCTL_HAL_REBOOT = 0x101003C;
      int bytesReturned = 0;
 
      // 起動時にハードリセットを行うフラグを立てる
      SetCleanRebootFlag();
      KernelIoControl(IOCTL_HAL_REBOOT, 
                      IntPtr.Zero, 0, 
                      IntPtr.Zero, 0, ref bytesReturned );
   }