Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
"Woodstock" <fl69@free.fr> a écrit dans le message de groupe de discussion :
4c8cbe47$0$16139$426a74cc@news.free.fr...
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" 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
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); } } @@@@@@@@@@@@@@@@@@@@@
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);
}
}
@@@@@@@@@@@@@@@@@@@@@
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); } } @@@@@@@@@@@@@@@@@@@@@
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/
Le Mon, 13 Sep 2010 23:13:22 +0200, Woodstock <fl69@free.fr> 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, ("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/
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/
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
"DuboisP" <patrickr.dubois.don't.spam@free.fr.invalid> a écrit dans le
message de groupe de discussion : op.vi0al8w0ilk2x8@frrdamid430p...
Le Mon, 13 Sep 2010 23:13:22 +0200, Woodstock <fl69@free.fr> 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
"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