IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Comment déterminer la liste des sessions ouvertes sur un pc donné (session pour un compte AD ou local) ?


Sujet :

Windows

  1. #1
    Membre du Club Avatar de masterx_goldman
    Inscrit en
    Mai 2008
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 164
    Points : 51
    Points
    51
    Par défaut Comment déterminer la liste des sessions ouvertes sur un pc donné (session pour un compte AD ou local) ?
    salut ,

    Je veux créer un programme en C/API Windows ou C++/API Windows qui liste tous les SESSIONS OUVERTES sur un pc donné que se soit à partir d'un compte local ou à partir d'un compte Active Directory ?

    Rq: je veux que mon programme fonctionne en local ( donc je peux pas faire à ce qu'il va consulter AD à travers le réseau pour en importer cette liste ..si on suppose que c'est faisable déja.)
    je peux faire comme ça été signalé dans mon post ici sur le forum windows : http://www.developpez.net/forums/d80...cal-compte-ad/ pour déterminer ceux qui SE SONT connectés UNE FOIS mais ça ne marche pas cette façon pour savoir qui sont actuellement connectés, aussi la table Win32_UserAccount contient tous les comptes qui sont crées .. et j'ai pas encore trouvé une table WMI qui me donne les sessions ouvertes.

    Merci pour toutes vos réponses.

  2. #2
    Membre du Club Avatar de masterx_goldman
    Inscrit en
    Mai 2008
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 164
    Points : 51
    Points
    51
    Par défaut
    j'ai trouvé un lien sur msdn qui pourrait être une piste http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx , sauf que je ne suis pas sûr que ça peut fonctionner pour déterminer les sessions ouvertes sur un pc non serveur ..

    Merci de me dire si ce lien vous dit quelque chose d'util ..

  3. #3
    Membre du Club Avatar de masterx_goldman
    Inscrit en
    Mai 2008
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 164
    Points : 51
    Points
    51
    Par défaut
    Bon, j'ai trouvé un code dans le dernier que je viens de citer, :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
     
    #ifndef UNICODE
    #define UNICODE
    #endif
    #pragma comment(lib, "Netapi32.lib");
    
    #include <stdio.h>
    #include <assert.h>
    #include <windows.h> 
    #include <lm.h>
    
    int wmain(int argc, wchar_t *argv[])
    {
       LPSESSION_INFO_10 pBuf = NULL;
       LPSESSION_INFO_10 pTmpBuf;
       DWORD dwLevel = 10;
       DWORD dwPrefMaxLen = MAX_PREFERRED_LENGTH;
       DWORD dwEntriesRead = 0;
       DWORD dwTotalEntries = 0;
       DWORD dwResumeHandle = 0;
       DWORD i;
       DWORD dwTotalCount = 0;
       LPTSTR pszServerName = NULL;
       LPTSTR pszClientName = NULL;
       LPTSTR pszUserName = NULL;
       NET_API_STATUS nStatus;
       //
       // Check command line arguments.
       //
       if (argc > 4)
       {
          wprintf(L"Usage: %s [\\\\ServerName] [\\\\ClientName] [UserName]\n", argv[0]);
          exit(1);
       }
    
       if (argc >= 2)
          pszServerName = argv[1];
    
       if (argc >= 3)
          pszClientName = argv[2];
    
       if (argc == 4)
          pszUserName = argv[3];
       //
       // Call the NetSessionEnum function, specifying level 10.
       //
       do // begin do
       {
          nStatus = NetSessionEnum(pszServerName,
                                   pszClientName,
                                   pszUserName,
                                   dwLevel,
                                   (LPBYTE*)&pBuf,
                                   dwPrefMaxLen,
                                   &dwEntriesRead,
                                   &dwTotalEntries,
                                   &dwResumeHandle);
          //
          // If the call succeeds,
          //
          if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))
          {
             if ((pTmpBuf = pBuf) != NULL)
             {
                //
                // Loop through the entries.
                //
                for (i = 0; (i < dwEntriesRead); i++)
                {
                   assert(pTmpBuf != NULL);
    
                   if (pTmpBuf == NULL)
                   {
                      fprintf(stderr, "An access violation has occurred\n");
                      break;
                   }
                   //
                   // Print the retrieved data. 
                   //
                   wprintf(L"\n\tClient: %s\n", pTmpBuf->sesi10_cname);
                   wprintf(L"\tUser:   %s\n", pTmpBuf->sesi10_username);
                   printf("\tActive: %d\n", pTmpBuf->sesi10_time);
                   printf("\tIdle:   %d\n", pTmpBuf->sesi10_idle_time);
    
                   pTmpBuf++;
                   dwTotalCount++;
                }
             }
          }
          //
          // Otherwise, indicate a system error.
          //
          else
             fprintf(stderr, "A system error has occurred: %d\n", nStatus);
          //
          // Free the allocated memory.
          //
          if (pBuf != NULL)
          {
             NetApiBufferFree(pBuf);
             pBuf = NULL;
          }
       }
       // 
       // Continue to call NetSessionEnum while 
       //  there are more entries. 
       // 
       while (nStatus == ERROR_MORE_DATA); // end do
    
       // Check again for an allocated buffer.
       //
       if (pBuf != NULL)
          NetApiBufferFree(pBuf);
       //
       // Print the final count of sessions enumerated.
       //
       fprintf(stderr, "\nTotal of %d entries enumerated\n", dwTotalCount);
    
       return 0;
    }
    Le problème chez moi c'est que la fonction "NetSessionEnum" s'exécute mais je vois toujours sur le debugger qu'après l'appel de cette fonction:
    1) nStatus contient 0
    2)le pointeur "pBuf" pointe toujours vers NULL
    3) le programme sort après la comparaison suivante "if ((pTmpBuf = pBuf) != NULL)" c'est tout à fait logique car "pBuf" pointe vers NULL toujours.

    Alors je sais pas c'est quoi le problème

    Rappel: je veux utiliser ce programme pour énumérer les sessions ouvertes sur mon pc

Discussions similaires

  1. Comment avoir la liste des forms ouvertes ?
    Par monthaldo dans le forum Forms
    Réponses: 0
    Dernier message: 26/05/2014, 12h04
  2. Réponses: 9
    Dernier message: 03/09/2009, 10h55
  3. Réponses: 22
    Dernier message: 29/03/2007, 22h51
  4. comment connaitre la liste des disque dur sur un pc?
    Par Jayceblaster dans le forum Delphi
    Réponses: 2
    Dernier message: 22/10/2006, 12h20
  5. Comment récupérer la liste des logiciels installés sur une machine ?
    Par david_chardonnet dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 19/09/2003, 17h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo