begin process at 2012 05 30 05:08:58
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

System

 > 

Variables d'environnements


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Variables d'environnements

samedi 22 septembre 2007 à 10:48:21 | Variables d'environnements

luhtor

Bonjour,

Je cherche un moyen de récupérer la valeur des variables d'environnement d'un autre processus. Il y a bien les fonctions getenv et putenv, mais elle ne permettent d'accéder à l'environnement du processus courant.

Quelqu'un sait-il comment faire ?
samedi 22 septembre 2007 à 15:40:58 | Re : Variables d'environnements

The_Guardian


Bonjour,

je vois pas pourquoi elle permettrait pas d'accéder à l'environnement du processus courant..?

Une autruche ne se cuit pas aux petits lardons
samedi 22 septembre 2007 à 16:59:12 | Re : Variables d'environnements

luhtor

Je veux accéder à l'environnement d'un autre processus, pas le processus courant.
dimanche 23 septembre 2007 à 00:37:06 | Re : Variables d'environnements

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !
OpenProcess
NtQueryInformationProcess
ReadProcessMemory
CloseHandle

ciao...
BruNews, MVP VC++
dimanche 23 septembre 2007 à 11:45:21 | Re : Variables d'environnements

luhtor

Impeccable, merci, ca m'a permis de trouver un site qui détails tout ca:
http://www.codeproject.com/useritems/GetNtProcessInfo.asp
dimanche 23 septembre 2007 à 14:27:16 | Variables d'environnement d'un processus quelconque

luhtor

En fait, ce site en lui meme ne répond pas entièrement a mon problème. Mais ca m'a permis de trouver les infos nécessaires manquantes. Donc je résume rapidement les différentes étapes pour récupérer les variables d'environnement (entre autres) d'un processus quelconque. Je n'ai pas encore testé ces étapes, mais ce sont les infos que j'ai regroupé de différents sites:

http://www.codeproject.com/useritems/GetNtProcessInfo.asp
http://forum.sysinternals.com/forum_posts.asp?TID=7640
http://www.codeguru.com/forum/archive/index.php/t-270030.html

1) On récupère cette structure a partir de la fonction NtQueryInformationProcess:
typedef struct _smPROCESS_BASIC_INFORMATION {
LONG ExitStatus;
smPPEB PebBaseAddress;
ULONG_PTR AffinityMask;
LONG BasePriority;
ULONG_PTR UniqueProcessId;
ULONG_PTR InheritedFromUniqueProcessId;
} smPROCESS_BASIC_INFORMATION, *smPPROCESS_BASIC_INFORMATION;
(http://www.codeproject.com/useritems/GetNtProcessInfo.asp)
2) Cette structure possède un membre PebBaseAddress, que l'on va utiliser pour récupérer la structure PEB avec la fonction ReadProcessMemory :
ypedef struct _smPEB {
BYTE Reserved1[2];
BYTE BeingDebugged;
BYTE Reserved2[1];
PVOID Reserved3[2];
smPPEB_LDR_DATA Ldr;
smPRTL_USER_PROCESS_PARAMETERS ProcessParameters;
BYTE Reserved4[104];
PVOID Reserved5[52];
smPPS_POST_PROCESS_INIT_ROUTINE PostProcessInitRoutine;
BYTE Reserved6[128];
PVOID Reserved7[1];
ULONG SessionId;
} smPEB, *smPPEB;
(http://www.codeproject.com/useritems/GetNtProcessInfo.asp)

3) Cette structure (PEB) possède un pointeur (ProcessParameters) sur la structure PROCESS_PARAMETERS.
Cette cette structure qui contient notamment les variables d'environnements du processus.
typedef struct _smRTL_USER_PROCESS_PARAMETERS {
BYTE Reserved1[16];
PVOID Reserved2[10];
UNICODE_STRING ImagePathName;
UNICODE_STRING CommandLine;
} smRTL_USER_PROCESS_PARAMETERS, *smPRTL_USER_PROCESS_PARAMETERS;
(http://www.codeproject.com/useritems/GetNtProcessInfo.asp)
Ce lien fournit la structure précédente, mais elle n'est pas complète. J'ai également trouvé cette
info sur le net:
"Let me assume you are using an NT system (Windows 4NT / 2000 / XP). On
these systems, each process has a PROCESS_PARAMETERS structure, which
has a pointer found at offset 0x48 into the structure. That pointer
points at the environment block for the process which holds the
environment variable strings."

0x48 est en fait la taille de la structure _smRTL_USER_PROCESS_PARAMETERS, donc les variables d'environnements se situent juste après le  dernier membre de cette structure. A cette adresse commence un tableau de WCHAR contenant  a priori les variables d'environnement sous la forme "VAR_1=VALUE1\0...\0VAR_N=VALUEN\0\0" (en WCHAR).
Ce site: http://forum.sysinternals.com/forum_posts.asp?TID=7640 parle en effet d'un membre "Environnement" situé à l'offset 0x48 du début de cette structure.

Ce meme lien permet de comprendre la structure et de calculer la taille du tableau contenant les variables d'environnement.
Une fois que l'on a calculer la taille du buffer contenant toutes les variables d'environnement, on peut récupérer le buffer entier avec la fonction ReadProcessMemory.

Bon j'espère ne pas avoir fait trop d'erreur, mais ca devrait fournir des infos utiles à ceux qui seraient confrontés au meme problème.



Cette discussion est classée dans : variables, processus, environnement, environnements


Répondre à ce message

Sujets en rapport avec ce message

Récupération d?un ensemble de variables d?environnement sous MFC [ par alarbi ] J'ai écris une application type ControlBox avec MFC.Cette application appel à l'aide de la fonction system un fichier point Bat : Pour l?instant les a variables d'environnement [ par kharrat ] Salut, Quelqu'un pourrait-il m'expliquer ce qu'est une variable d'environnement ? Merci :) Variables d'environnement linux [ par kgonline ] Bonjour tout le monde, Je souhaiterai savoir comment utiliser des variables d'environnement (avec setenv et getenv) pour envoyer et recevoir des info Portabilité et environnements [ par mogwai93 ] BonjourJe voudrais savoir ce qu'il en est à propos des codes "portables" :le même source qui peut fonctionner sur plusieurs environnements (Windows, L Rentrer les variables d'environnement (argc,argv[]) avant de passer dans mode debug. [ par vampix ] Bonjour,Je souhaiterais pouvoir entrer les variables d'environement argc et argv. Existe t'il un moyen de pré entrer les valeurs de ces variables avan Comment rafraichir les variables d'environnement ? [ par chuckboy ] Bonjour à tousJ'ai un gros problème qui j'espere sera facile à résoudre pour vous.Comment faire pour rafraichir les varaible d'environnement dans le c Variables C vers PHP [ par Ephedrine ] Bonjour !Je me demandais s'il était possible d'envoyer des variables C vers un fichier PHP ?Et de manière plus générale, comment gérer ces "transferts Stopper un processus [ par shadow1779 ] Bonjour, est t'il possible et si oui comment de stopper un processus windows par une fonction C? merci d'avance. voici mon code [ par Miss1 ] voici mon code mais je n'arrive pas a compiler class tableau { private: int taille; // variables// int *pointeur C++ noms de variable variables [ par Ajent J ] Est ce qu'il est possible de construire un nom de variable par concatenation comme en PHP ? for(int j=0;j<10;i++) { ${"mavariable".$i} = rand(


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,889 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales