Te paso un par de detalles del modo en que una de nuestras aplicaciones registra y verifica que no se haya movido la fecha de sistema hacia atrás.
Cada vez que el login sale bien:   
Código vb.net:
Ver original- Public Function UltimoInicio() 
-         Dim regData As RegistryKey 
-         Const PathKey As String = "SOFTWARE\\..." 
-         If regData Is Nothing Then 
-             Exit Function 
-         End If 
-         regData = Registry.LocalMachine.OpenSubKey(PathKey, True) 
-         regData.SetValue("DATA71", DateTime.Now.) 
-     End Function 
"..." sería la ruta de la clave en el Registry que se crea al iniciar por primera vez la aplicación. 
Luego, esta función se invoca en el Load del formulario principal, antes de iniciar el login. Valida varias cosas,  por lo que la respuesta de esta función tiene un Select Case:   
Código vb.net:
Ver original- Public Function VerificarUpdate() As Integer 
-         Try 
-             Dim regData As RegistryKey 
-             Const PathKey As String = "SOFTWARE\\..." 
-             If Registry.LocalMachine.OpenSubKey(PathKey) Is Nothing Then 
-                 Return 1000 
-             End If 
-             ' ----------------------------------------------------------- 
-             Dim Data71 As DateTime 
-             ' ----------------------------------------------------------- 
-             ' Variables para lectura de propiedades de archivos 
-             '  ... 
-             '  Data71. Ultimo ingreso registrado. 
-             ' ----------------------------------------------------------- 
-             ' Listado de valores de retorno 
-             ' ----------------------------------------------------------- 
-             ' -1:   Se ha producido un error no clasificado. 
-             ' 2001: Fecha de instalación original posterior a la actual. 
-             '       El usuario ha alterado la fecha del sistema. 
-             ' 2002: ... 
-             ' 2003: La fecha de la ultima sesión es posterior a la fecha actual. 
-             '       El usuario ha alterado la fecha del sistema. 
-             ' 2004: ... 
-             ' ----------------------------------------------------------- 
-             regData = Registry.LocalMachine.OpenSubKey(PathKey, True) 
-             ' ----------------------------------------------------------- 
-             ' ... 
-             ' ----------------------------------------------------------- 
-             Data71 = regData.GetValue("DATA71") 
-             ' ----------------------------------------------------------- 
-             oDia = Data71 
-             ' ----------------------------------------------------------- 
-             If oDia > DateTime.Now Then 
-                 Return 2003 
-             End If 
-         Catch ex As Exception 
-             Return -1 
-         End Try 
-     End Function 
Si la respuesta no es la esperada en el Select Case, aparece una advertencia y la aplicación se cierra sin que pueda evitarse.
Esta función esta creada en una clase específica, que también contiene la función anterior, y que sólo se instancia en otra clase, la cual a su vez no puede ser accedida desde afuera del form principal. 
¿La idea te sirve?