¿Cómo determinar el usuario actual de Windows desde un servicio de Windows?

Estoy escribiendo un servicio de Windows usando C # .NET 2005. ¿Cómo puedo determinar quién es el usuario actualmente conectado (si lo hay)? ¿También hay una manera de ser notificado cuando un usuario inicia sesión?

Alternativamente, ¿hay alguna manera de saber quién ha usado la máquina recientemente?

Necesito conocer al usuario que ha iniciado sesión actualmente para poder almacenar en caché algunos datos para ese usuario. Al operar en un entorno corporativo, hay miles de usuarios potenciales, pero solo tiene sentido almacenar datos en caché para alguien que usa esa máquina.

ACTUALIZAR:

Esta solución funciona bien. Ver tambiéneste ejemplo pinvoke.net que utiliza la estructura extendida para recuperar también el nombre de dominio.

En combinación con esto, estoy usando la clase SystemEvents para recibir una notificación cuando un usuario inicie sesión en la máquina. Verejemplo 2 aquí para un buen ejemplo, tenga en cuenta que necesita usar un formulario oculto de un servicio para poder usar SystemEvents de un servicio.

Respuestas a la pregunta(2)

Su respuesta a la pregunta