Aggiungo qualche ulteriore dettaglio riguardo questo problema, secondo me discretamente serio, che ho iniziato a esporre nel mio post precedente
 Alla fine c’è voluto il supporto PSS di Microsoft. Il problema risiede nel fatto che WM5.0 ha una gestione complessa del registro: per questioni di performance questo viene sempre tenuto in memoria.
 Microsoft ha predisposto una chiamata di sistema mediante la quale è possibile chiedere al sistema operativo di serializzare il registro e di renderlo persistente. Questa funzione, teoricamente, dovrebbe essere gestita dall’OEM (il produttore del device: nel mio caso HP) al fine di amministrare correttamente queste fasi, ad esempio per un salvataggio periodico ogni tot minuti o all’accadere di eventi particolari, tipo un soft-reset.
 A me sembra logico pensare che prima di un soft-reset, le eventuali modifiche sul registro debbano essere salvate sul filesystem. Per qualche motivo HP non ritiene (almeno in questa versione della rom) che questo sia il caso.
(Nota: è ovvio pensare che l’uso del registro per applicazioni personali non si a del tutto corretto: è inutile appesantirlo per le proprie impostazioni, meglio usare un file config. Anche se a volte è utile poter salvare un’informazione in un posto un po’ più protetto…)
 Tornando a noi, al softreset, tutte le modifiche al registry vengono perse!!
 Per ovviare a ciò, è possibile chiamare la funzione RegFlushKey che si occupa di forzare la serializzazione. Attenzione, anche a detta di Microsoft, questa funzione potrebbe non fare niente!!! E’ a discrezione del OEM definire la modalità di persistenza del registro, a seconda delle caratteristiche del device.
 Riporto il codice che io ho utilizzato e che ho trovato sul newsgroup microsoft.public.dotnet.framework.compactframework su segnalazione di Raffaele Limosani di MS che ringrazio:
 [DllImport(“CoreDll.dll”, EntryPoint = “RegFlushKey”, SetLastError = true)]
private static extern uint RegFlushKey(uint hKey);
 private void menuRegistry_Click(object sender, EventArgs e)
{
  try
{
  long reg = RegFlushKey(0x80000002);
if (reg == 0)
   MessageBox.Show(“Registro Salvato”);
 }
catch (Exception ex)
{
MessageBox.Show(“Errore: “ + System.Runtime.InteropServices.Marshal.GetLastWin32Error().ToString());
}
 }
 Una volta effettuato le modifiche sul registro, ad esempio a seguito della registrazione di MSMQ, lanciando il RegFlushKey e facendo un soft-reset, il tutto funziona correttamente. 
 Io su questo piccolo dettaglio ci ho speso quasi tre settimane… Spero sia di aiuto a qualcuno di voi.
Ciao!
