Deseo enumerar todos los escritorios en un sistema y obtener el nombre de usuario registrado para ese escritorio. Hasta ahora tengo el snippit de código siguiente como un ejemplo de obtener un identificador HDESK e intentar determinar el nombre de usuario asociado con él (si lo hay), pero la llamada a LookupAccountSid falla con ERROR_NONE_MAPPED ("No se identificó entre los nombres de cuenta y los ID de seguridad hecho").Obtenga el nombre de usuario de Windows asociado con un escritorio
HDESK desk = OpenDesktop("Default", 0, FALSE, READ_CONTROL | DESKTOP_READOBJECTS);
DWORD size = 4096;
SID * sid = (SID *)malloc(size);
GetUserObjectInformation(desk , UOI_USER_SID, sid, size, &size);
char name[512], domain[512];
int namesz = 512, domainsz = 512;
LookupAccountSid(NULL, sid, &name, &namesz, &domain, &domainsz, &s);
Puede ser que sea porque estoy sacando un SID de inicio de sesión a través de GetUserObjectInformation en lugar de un usuario SID. Si es así, ¿puedo convertir eso al SID de los usuarios que inician sesión?
¿Alguien puede señalarme en la dirección correcta para obtener el nombre de usuario registrado para un escritorio arbitrario (ya sea por su manejador HDESK o HNWD respectivo o incluso por las estaciones de escritorio HWINSTA)? gracias de antemano.
Gracias, buena sugerencia, pero después de probarlo. mientras que puedo enumerar las sesiones y sus nombres de usuario asociados (si corresponde) el nombre de la estación de la sesión es siempre el nombre de la sesión RDP, no el nombre de la estación de Windows (consulte la definición de WTSWinStationName en http://msdn.microsoft.com/en-us/library/ aa383861% 28VS.85% 29.aspx). Si pudiera vincular una ID de sesión a una estación de Windows, esta técnica sería perfecta, pero no puedo encontrar cómo hacerlo. – QAZ
@QAZ que no funciona en cada sesión tiene una estación de ventana winsta0 que es la estación de ventana que tiene todos los widnows visibles (la única otra estación de ventana de interés es la deaktop segura para esa sesión). – Joshua