GetSystemDrive sur serveur distant

Le
Woodstock
Bonjour,

je cherche un moyen (en C++) de déterminer le disque système d'un
serveur windows distant (GetSystemDrive ne fonctionnant à priori qu'en
local)

Quelqu'un saurait m'aiguiller ?

Merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jean-Claude BELLAMY
Le #22563161
"Woodstock" 4c8cbe47$0$16139$
Bonjour,

je cherche un moyen (en C++) de déterminer le disque système d'un serveur
windows distant (GetSystemDrive ne fonctionnant à priori qu'en local)...

Quelqu'un saurait m'aiguiller ?



Moi je fais çà par lecture de la clef :
HKLMSOFTWAREMicrosoftWindows NTCurrentVersionSystemRoot

en utilisant le service d'accès distant au registre.
RegConnectRegistry
RegOpenKeyEx
RegQueryValueEx
RegCloseKey


Tout au début de mon appli je teste si ce service est bien démarré sur la
machine distante (à coup de "QueryServiceStatus"), et si ce n'est pas le
cas, ... je le démarre !

J'utilise cette méthode avec des machines distantes sous W2k, W2K3, XP,
Vista, Win7, ..., en workgroup et en domaine, et ça fonctionne très bien ...



--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP]
http://www.bellamyjc.org ou http://jc.bellamy.free.fr
Woodstock
Le #22567261
Le 12/09/2010 17:38, Jean-Claude BELLAMY a écrit :

Moi je fais çà par lecture de la clef :
HKLMSOFTWAREMicrosoftWindows NTCurrentVersionSystemRoot

en utilisant le service d'accès distant au registre.
RegConnectRegistry
RegOpenKeyEx
RegQueryValueEx
RegCloseKey


Tout au début de mon appli je teste si ce service est bien démarré sur
la machine distante (à coup de "QueryServiceStatus"), et si ce n'est pas
le cas, ... je le démarre !

J'utilise cette méthode avec des machines distantes sous W2k, W2K3, XP,
Vista, Win7, ..., en workgroup et en domaine, et ça fonctionne très bien
...



Merci... j'ai donc utilisé cette méthode qui fait parfaitement l'affaire.

Voici la "portion" de code réalisée:

@@@@@@@@@@@@@@@@@@
HKEY hkKey;
if
(RegConnectRegistry(this->m_nom.c_str(),HKEY_LOCAL_MACHINE,&hkKey) ==
ERROR_SUCCESS)
{
HKEY key;

unsigned char tempStr[64];
unsigned long taille = sizeof(tempStr);
unsigned long type;

long res = RegOpenKeyEx(hkKey, ("SOFTWARE\Microsoft\Windows
NT\CurrentVersion"), 0, KEY_READ, &key);
if (res == ERROR_SUCCESS)
{
if (RegQueryValueEx(key, "SystemRoot", 0, &type,
(BYTE*)&tempStr[0], &taille) == ERROR_SUCCESS)
{ tempStr[taille] = 0;
this->m_systemdrive.assign(tempStr, tempStr+1 ); //on
ne veut que la partie disque
}
RegCloseKey(key);
}
}
@@@@@@@@@@@@@@@@@@@@@
DuboisP
Le #22567651
Le Mon, 13 Sep 2010 23:13:22 +0200, Woodstock
Le 12/09/2010 17:38, Jean-Claude BELLAMY a écrit :

Moi je fais çà par lecture de la clef :
HKLMSOFTWAREMicrosoftWindows NTCurrentVersionSystemRoot

en utilisant le service d'accès distant au registre.
RegConnectRegistry
RegOpenKeyEx
RegQueryValueEx
RegCloseKey


Tout au début de mon appli je teste si ce service est bien démarré sur
la machine distante (à coup de "QueryServiceStatus"), et si ce n'est pas
le cas, ... je le démarre !

J'utilise cette méthode avec des machines distantes sous W2k, W2K3, XP,
Vista, Win7, ..., en workgroup et en domaine, et ça fonctionne très bien
...



Merci... j'ai donc utilisé cette méthode qui fait parfaitement l'affaire.

Voici la "portion" de code réalisée:

@@@@@@@@@@@@@@@@@@
HKEY hkKey;
if
(RegConnectRegistry(this->m_nom.c_str(),HKEY_LOCAL_MACHINE,&hkKey) ==
ERROR_SUCCESS)
{
HKEY key;

unsigned char tempStr[64];
unsigned long taille = sizeof(tempStr);
unsigned long type;

long res = RegOpenKeyEx(hkKey, ("SOFTWARE\Microsoft\Windows
NT\CurrentVersion"), 0, KEY_READ, &key);
if (res == ERROR_SUCCESS)
{
if (RegQueryValueEx(key, "SystemRoot", 0, &type,
(BYTE*)&tempStr[0], &taille) == ERROR_SUCCESS)
{ tempStr[taille] = 0;
this->m_systemdrive.assign(tempStr, tempStr+1 ); //on
ne veut que la partie disque
}
RegCloseKey(key);
}
}
@@@@@@@@@@@@@@@@@@@@@



et si les droits "Remote Registry" ne soient pas autorisés, ça marche
aussi ?

WMI ne serait-il pas mieux ?

strcomputer="."
set objwmiservice=getobject("winmgmts:\" & strcomputer & "rootCIMV2")
set colitems=objwmiservice.execquery("select * from
Win32_Configuration"",,48)
for each objitem in colitems
wscript.echo "bootdirectory: " & objitem.bootdirectory
next


chercher chez Microsoft l'outil WMI Code Creator ...
--
Utilisant le client e-mail révolutionnaire d'Opera :
http://www.opera.com/mail/
Jean-Claude BELLAMY
Le #22568631
"DuboisP" message de groupe de discussion :
Le Mon, 13 Sep 2010 23:13:22 +0200, Woodstock
Le 12/09/2010 17:38, Jean-Claude BELLAMY a écrit :

Moi je fais çà par lecture de la clef :
HKLMSOFTWAREMicrosoftWindows NTCurrentVersionSystemRoot

en utilisant le service d'accès distant au registre.
RegConnectRegistry




[...]
et si les droits "Remote Registry" ne soient pas autorisés, ça marche
aussi ?


Tu veux parler des autorisations sur la clef distante ?

Si c'est ça, il faut bien évidemment que le compte local qui lance le
processus soit reconnu comme admin sur la machine distante!
Si ce n'est pas le cas, on peut faire appel à "LogonUser" (avec les bons
paramètres de compte) puis "ImpersonateLoggedOnUser" avant d'exécuter
RegConnectRegistry.

Et si le service RemoteRegistry n'est pas démarré sur la machine distante,
comme je l'ai dit dans mon message précédent il suffit de le démarrer!


WMI ne serait-il pas mieux ?
strcomputer="."
set objwmiservice=getobject("winmgmts:\" & strcomputer & "rootCIMV2")
set colitems=objwmiservice.execquery("select * from
Win32_Configuration"",,48)
for each objitem in colitems
wscript.echo "bootdirectory: " & objitem.bootdirectory
next



WMI ne dispense pas des règles de contrôle d'accès !
Si "strcomputer" pointe vers une machine distante, on pourras être amené à
transmettre nom de compte et mot de passe d'admin ...

--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP]
http://www.bellamyjc.org ou http://jc.bellamy.free.fr
Publicité
Poster une réponse
Anonyme