2011-02-08 16 views
12

Estoy tratando de obtener una lista de los usuarios reales en la máquina local. De verdad me refiero a los usuarios que pueden iniciar sesión físicamente en el sistema y usarlo, excluyendo cuentas solo remotas y similares.Lista de usuarios "reales" de Windows que utilizan la API de Win32

Esto es lo que ya hago.

  • llamada NetUserEnum() con FILTER_NORMAL_ACCOUNT.

    me sale el siguiente: los usuarios

    • __ __ vmware_user
    • administrador
    • Auxiliar de Ayuda a
    • ASPNET
    • de visitantes
    • SUPPORT_xxxxxx

    Tenga en cuenta que estos son los mismos usuarios que recibo cuando llamo al usuario de red desde la línea de comandos, , pero en el diálogo de inicio de sesión solo puedo seleccionar Administrador. Esto es lo que quiero.

  • De la lista de devolución en NetUserEnum(), puedo decir qué cuentas están deshabilitadas. Eso deja:

    • __ __ vmware_user
    • administrador
    • ASPNET
    • SUPPORT_xxxxxx
  • Luego ejecutar LsaEnumerateAccountRights() para comprobar qué cuentas tienen la SeInteractiveLogonRight.

    Todos ellos lo tienen. Excepto el real, Administrador. Algunos de ellos tienen SeDenyInteractiveLogonRight. Eso me deja con:

    • __ vmware_user __
    • administrador (sin SeInteractiveLogonRight)

He encontrado un lugar que tal vez debería ser la comprobación de permisos de grupo en primer lugar, como mi cuenta de usuario podría heredará SeInteractiveLogonRight. Hasta el momento, no he encontrado una manera de enumerar los grupos para una cuenta determinada (SID o nombre). Intenté con NetUserGetGroups() pero resulta que este solo devuelve grupos de dominio (en mi caso, "Ninguno").

Ahora mismo no sé qué más probar. Parece que todo será más fácil si tengo un 'Token de acceso', pero parece que no hay forma de conseguirlo para un usuario que no sea el usuario actualmente conectado. Hay como 20 API diferentes relacionadas con la autenticación y esto es una locura.

Agradezco su ayuda

Respuesta

5

Como usted ha dicho, el último paso es, probablemente, simplemente filtrar los usuarios que pertenecen al grupo Administradores o Usuarios.

Pruebe el método NetUserGetLocalGroups para enumerar los grupos a los que pertenece un usuario.

+1

¡Gracias, eso lo hizo! Me perdí totalmente esta función NetUserGetLocalGroups(). – bts

+1

Para el registro, mi solución final al problema es incluir los grupos de usuarios con esta función, y luego mantener a los usuarios pertenecientes al grupo de Usuarios o Administradores. Estaba revisando los permisos para usuarios/grupos con inicio de sesión local deshabilitado, pero resultó que Windows incluye estos usuarios en la lista de inicio de sesión (aunque no puede iniciar sesión realmente, ya que están deshabilitados). – bts

Cuestiones relacionadas