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

API, COM et SDKs Delphi Discussion :

Problème WTSQuerySessionInformation en 32 Bits


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2003
    Messages : 167
    Points : 208
    Points
    208
    Par défaut Problème WTSQuerySessionInformation en 32 Bits
    Bonjour

    lorsque que je cherche à lister les session sur un serveur TSE
    via le code suivant en 64 bit cela marche bien mais en 32 bit WTSQuerySessionInformation me renvoie rien
    et getlasterror me revoie ERROR_INVALID_PARAMETER
    Voici la fonction pour avoir le nom du user ou son pc c'est là qu'en 32 çà marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function getStrInfo(fhserveur : cardinal;infoClass : _WTS_INFO_CLASS ; id : cardinal):string;
    var
      ptemp : pointer ;
      inttemp : cardinal;
    begin
      ptemp := nil;
      result := '';
      if WTSQuerySessionInformation(fhserveur,id ,infoClass,ptemp,inttemp) then
      try
        result := pchar(ptemp);
      finally
        WTSFreeMemory(ptemp);
      end;
    end;
    Voici un bout de la procedure qui liste les sessions
    cette partie fonctionne bien
    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
         fhserveur := WTSOpenServer(pchar(strNomServeur));
        booOk := WTSEnumerateSessions(fhserveur,0,1,ppsession,nbSession );
        if booOk and (nbsession > 0 )then
        begin
          fbooServeurOK := true;
          for indexSession := 0 to nbSession-1 do
          begin
            Session := PWTS_SESSION_INFO(integer(ppsession)+indexsession * sizeof(wts_session_info))^;
            strTemp := lowercase(session.pWinStationName);
            if (pos('ica-',strtemp)<> 0)and(pos('#',strtemp)<>0) then inc(fnbICA ,1);
            if pos('rdp-tcp#',strtemp)<> 0 then inc(fnbRDP ,1);
            if strTemp = 'ica-tcp' then fbooListenICA := session.State = WTSListen;
            if strTemp = 'rdp-tcp' then fbooListenRDP := session.State = WTSListen;
            ttemp := tfbSession.Create ;
            ttemp.fstrSession := strTemp;
            ttemp.fintID := session.SessionId;
            ttemp.fsrtetat := sessionstatetostr(Session.State);
            ttemp.fstrUtilistauer := getStrInfo(fhserveur,WTSUserName,Session.SessionId);
            ttemp.fstrClient := getStrInfo(fhserveur,WTSClientName,Session.SessionId);
            add(ttemp);
          end;
        end;
        WTSFreeMemory (ppsession );
    cela fait un moment que je galère avec cette partie

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 452
    Points : 24 863
    Points
    24 863
    Par défaut
    à quel endroit tu mets le getlasterror ?

    le WTSFreeMemory, je le mettrais dans le begin endde if booOk and (nbsession > 0 )then.
    Pense que le 32 Bits c'est émulé, c'est assez isolé, il me semble normal qu'un processus 32bits ne voit pas ce qui se passe en 64Bits
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2003
    Messages : 167
    Points : 208
    Points
    208
    Par défaut
    bonjour

    juste apres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if WTSQuerySessionInformation(fhserveur,id ,infoClass,ptemp,inttemp) then

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 452
    Points : 24 863
    Points
    24 863
    Par défaut
    remplace ton arithmétique de pointeur par ceci

    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
    var
      ppsession: PWTS_SESSION_INFO;
      ppsessionCurr: PWTS_SESSION_INFO;
    ...
    begin
        fhserveur := WTSOpenServer(pchar(strNomServeur));
        booOk := WTSEnumerateSessions(fhserveur,0,1,ppsession,nbSession );
        if booOk and (nbsession > 0 )then
        begin
          fbooServeurOK := true;
          ppsessionCurr := ppsession;
     
          for indexSession := 0 to nbSession-1 do
          begin
            // Session := PWTS_SESSION_INFO(integer(ppsession)+indexsession * sizeof(wts_session_info))^; // devient la ligne du dessous
            Session := ppsessionCurr^;
            ... 
     
            add(ttemp);
     
            Inc(ppsessionCurr); // il va tout seul gérer le décalage nécessaire
          end;
        end;
        WTSFreeMemory (ppsession );
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2003
    Messages : 167
    Points : 208
    Points
    208
    Par défaut
    Bonjour

    j'ai modifié comme tu me l'a indiqué
    mais toujours le même souci en compile 32Bits

  6. #6
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2003
    Messages : 167
    Points : 208
    Points
    208
    Par défaut
    Bonjour

    j'ai repris mes investigations
    J’obtiens l'erreur Paramètre incorrect en mode debug 32Bits mais pas en mode Release 32Bits O_o
    en compile 64 bits cela marche dans les deux modes
    j'ai adapté ma fonctions qui pose problème pour m'afficher le syserromessage si WTSQuerySessionInformation NOK
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function tfbLstSession.getStrInfo(fhserveur : cardinal;infoClass : _WTS_INFO_CLASS ;id : cardinal):string;
    var
      ptemp : pointer ;
      inttemp : dword;
    begin
      ptemp := nil;
      result := '';
      if WTSQuerySessionInformation(fhserveur,id ,infoClass,ptemp,inttemp) then
      begin
        result := '[' + pchar(ptemp)+ ']';
        WTSFreeMemory(ptemp);
      end else
        result := '[' + syserrormessage(GetLastError)+ ']';
    end;

Discussions similaires

  1. [AC-2007] probleme avec windowsVista 32 Bits et Windows764 Bits
    Par gerarddurand dans le forum Sécurité
    Réponses: 4
    Dernier message: 30/12/2011, 15h50
  2. Probleme sous windows 64 bits
    Par eliot.raymond dans le forum Autres architectures
    Réponses: 3
    Dernier message: 26/10/2011, 19h11
  3. traduction d'assembleur vers du C - probleme 32 vers 64 bits
    Par nicolasprogrammeur dans le forum x86 32-bits / 64-bits
    Réponses: 9
    Dernier message: 24/02/2011, 09h23
  4. Probleme pour compter des bits
    Par Delgador dans le forum C
    Réponses: 25
    Dernier message: 10/04/2007, 08h48
  5. probleme avec les string sur ITA2 64 bits!
    Par vince3320 dans le forum SL & STL
    Réponses: 5
    Dernier message: 22/08/2005, 19h59

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