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

GetSystemDrive sur serveur distant

4 réponses
Avatar
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

4 réponses

Avatar
Jean-Claude BELLAMY
"Woodstock" a écrit dans le message de groupe de discussion :
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
Avatar
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, ("SOFTWAREMicrosoftWindows
NTCurrentVersion"), 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);
}
}
@@@@@@@@@@@@@@@@@@@@@
Avatar
DuboisP
Le Mon, 13 Sep 2010 23:13:22 +0200, Woodstock a écrit:

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, ("SOFTWAREMicrosoftWindows
NTCurrentVersion"), 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/
Avatar
Jean-Claude BELLAMY
"DuboisP" <patrickr.dubois.don' a écrit dans le
message de groupe de discussion :
Le Mon, 13 Sep 2010 23:13:22 +0200, Woodstock a écrit:

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