Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

J'ai un souci !

28 réponses
Avatar
Jean-Luc Baptiste
Bonjour,

J'ai un programme qui fonctionne en temps que service, j'essaye de recupérer
le compte utilisateur qui à ouvert la session avec le code suivant :

lpbuffer est une chaîne ASCIIZ de 256
size est un entier=255

// on récupere le compte utilisateu
SI AppelDLL32("advapi32.dll","GetUserNameA" , &lpbuffer, &size) ALORS
leUser=lpbuffer
FIN

Ce code fonctionne parfaitement dans un applicatif mais lorsque qu'il est
inclu dans un service il renvoit System comme compte. Quelqu'un connait il
la commande qui permet de récupérer le nom du compte qui a ouvert la session
via un service ?

Bien cordialement.

Jean-Luc Baptiste

8 réponses

1 2 3
Avatar
Romain PETIT
Romain PETIT a formulé ce mercredi :

Ok, donc tu veux enumérer, depuis ton programme qui tourne en tant que
service, les sessions ouvertes sur la machine.


[...]
Bref, pas si simple.



Finalement pas trop complexe :
http://rompetit.free.fr/Pub/WD7/fg_EnumererSessionsInteractives.txt

A+

--
Romain PETIT
contact : http://cerbermail.com/?O16kfXOFcq
+-+ posté sur Usenet avec MesNews et non depuis un forum web +-+
news:fr.comp.developpement.agl.windev
http://www.mesnews.net/
http://fr.wikipedia.org/wiki/Newsgroup
Avatar
PYT
Jean-Luc Baptiste a écrit :
Bonjour,

J'ai un programme qui fonctionne en temps que service, j'essaye de
recupérer le compte utilisateur qui à ouvert la session avec le code
suivant :

lpbuffer est une chaîne ASCIIZ de 256
size est un entier%5

// on récupere le compte utilisateu
SI AppelDLL32("advapi32.dll","GetUserNameA" , &lpbuffer, &size) ALORS
leUser=lpbuffer
FIN

Ce code fonctionne parfaitement dans un applicatif mais lorsque qu'il
est inclu dans un service il renvoit System comme compte. Quelqu'un
connait il la commande qui permet de récupérer le nom du compte qui a
ouvert la session via un service ?

Bien cordialement.

Jean-Luc Baptiste


Vous feriez mieux d'aller poser votre question sur un autre news group
fr.comp.os.ms-windows.programmation

Ils seront plus à même pour répondre.

PYT
Avatar
Gilles
Jean-Luc Baptiste a émis l'idée suivante :
Ces 2 morceaux de code fonctionne lorsque le programme qui les exécute est
lancée par l'utilisateur qui a ouvert la session mais ne fonctionne pas
lorsque il est intégré dans un service !



C'est normal, puisque le service est également lancé dans une session
spécifique. Il est aussi isolé qu'un utilisateur peut l'être d'un
autre.

Est-ce que tu as essayé de cocher "interragir avec le bureau"? Voir si
le contenu de ces variables change?
Avatar
Romain PETIT
PYT a présenté l'énoncé suivant :
Ils seront plus à même pour répondre.



Ca devrait aller avec ça :
http://rompetit.free.fr/Pub/WD7/fg_EnumererSessionsInteractives.txt

A+

--
Romain PETIT
contact : http://cerbermail.com/?O16kfXOFcq
+-+ posté sur Usenet avec MesNews et non depuis un forum web +-+
news:fr.comp.developpement.agl.windev
http://www.mesnews.net/
http://fr.wikipedia.org/wiki/Newsgroup
Avatar
Gilles
Jean-Luc Baptiste a couché sur son écran :
C'est simple :

Je suis en train de créer un petit logiciel qui "tourne" en temps que
service. Ce logiciel est un soft de contrôle parental qui est chargé de
supprimer des programmes suivant une liste préétablie en fonction des comptes
utilisateurs.
Si Toto se connecte le service doit identifier qui se connecte pour pouvoir
empecher emule de fonctionner si ce soft est dans la blacklist à toto.

A l'heure actuelle il m'est impossible de savoir quel est le compte qui a
ouvert une session, le seul retour que j'ai c'est system et non toto


Voilà j'espère etre plus clair dans ma demande ;-))




Oui mais énumérer les sessions ça te servira à quoi??
A rien non??

L'important pour toi est d'énumérer la liste des exe en mémoire, et
suivant les autorisations de les killer ou pas.

L'autre souci, c'est le renommage d'exe, donc il faut se baser sur les
titres de fenêtre plutôt.

Si .NET ne te rebute pas, en adaptant facilement l'exemple gestionnaire
de tache, tu récupères la liste des exe en mémoire et l'utilisateur qui
a lancé le programme (ce qui au passage te permet de savoir qui a
ouvert des sessions même si ca ne te sert à rien)

le problème c'est que le nom de l'exe est ennuyeux puisqu'un simple
renommage suffira.
Ce qu'il faut alors, c'est trouver la correspondance entre le process
ID et le titre de la fenêtre. Ca je sais le faire en API Win32 mais pas
avec .NET (L'idéal serait de le faire avec .NET)

Mais bon bref, en mélangeant ces deux codes, j'ai pu sans difficulté
majeure identifier si un programme dont le titre est interdit a été
lancé par quelqu'un, killer l'instance du programme et afficher sur le
bureau de l'utilisateur en question un message.

C'est ça que tu veux faire non? ;)
Avatar
Jean-Luc Baptiste
En fait, je veux, selon le compte user, killer ou non des exe prédéfinis.
Pour celà il me faut récupérer le nom de l'utilisateur et un service est
isolé donc il ne connait que le compte system.
Je pense que la solution de romain est la bonne je vais l'essayer.

Merci à vous tous pour votre aide


"Gilles" a écrit dans le message de
news:
Jean-Luc Baptiste a couché sur son écran :
C'est simple :

Je suis en train de créer un petit logiciel qui "tourne" en temps que
service. Ce logiciel est un soft de contrôle parental qui est chargé de
supprimer des programmes suivant une liste préétablie en fonction des
comptes utilisateurs.
Si Toto se connecte le service doit identifier qui se connecte pour
pouvoir empecher emule de fonctionner si ce soft est dans la blacklist à
toto.

A l'heure actuelle il m'est impossible de savoir quel est le compte qui a
ouvert une session, le seul retour que j'ai c'est system et non toto


Voilà j'espère etre plus clair dans ma demande ;-))




Oui mais énumérer les sessions ça te servira à quoi??
A rien non??

L'important pour toi est d'énumérer la liste des exe en mémoire, et
suivant les autorisations de les killer ou pas.

L'autre souci, c'est le renommage d'exe, donc il faut se baser sur les
titres de fenêtre plutôt.

Si .NET ne te rebute pas, en adaptant facilement l'exemple gestionnaire de
tache, tu récupères la liste des exe en mémoire et l'utilisateur qui a
lancé le programme (ce qui au passage te permet de savoir qui a ouvert des
sessions même si ca ne te sert à rien)

le problème c'est que le nom de l'exe est ennuyeux puisqu'un simple
renommage suffira.
Ce qu'il faut alors, c'est trouver la correspondance entre le process ID
et le titre de la fenêtre. Ca je sais le faire en API Win32 mais pas avec
.NET (L'idéal serait de le faire avec .NET)

Mais bon bref, en mélangeant ces deux codes, j'ai pu sans difficulté
majeure identifier si un programme dont le titre est interdit a été lancé
par quelqu'un, killer l'instance du programme et afficher sur le bureau de
l'utilisateur en question un message.

C'est ça que tu veux faire non? ;)





Avatar
Jean-Luc Baptiste
Oui, je le pense aussi, merci encore a vous tous pour votre aide

"Romain PETIT" a écrit dans le message de
news:
PYT a présenté l'énoncé suivant :
Ils seront plus à même pour répondre.



Ca devrait aller avec ça :
http://rompetit.free.fr/Pub/WD7/fg_EnumererSessionsInteractives.txt

A+

--
Romain PETIT
contact : http://cerbermail.com/?O16kfXOFcq
+-+ posté sur Usenet avec MesNews et non depuis un forum web +-+
news:fr.comp.developpement.agl.windev
http://www.mesnews.net/
http://fr.wikipedia.org/wiki/Newsgroup





Avatar
Gilles
Il se trouve que Jean-Luc Baptiste a formulé :
En fait, je veux, selon le compte user, killer ou non des exe prédéfinis.
Pour celà il me faut récupérer le nom de l'utilisateur et un service est
isolé donc il ne connait que le compte system.
Je pense que la solution de romain est la bonne je vais l'essayer.



Bah... bonne oui, mais inutile pour toi.

Enumérer les sessions ca va te servir à quoi??

Il faut que tu énumères les programmes en mémoire, que tu récupères le
PID et l'utilisateur qui l'a lancé, et que tu le kill selon les règles
établies dans ton programme.

Si tu récupères les sessions, ça ne sert strictement à rien, ça ne te
dit pas quels exes tournent avec quel utilisateur.
1 2 3