registry remote auslesen

Gamer123

Mitglied
hallo

ich würde gern die Registy von einem PC im Netzwerk lesen/schreiben.

Lokal kann ich das ja mit RegOpenKeyEx etc.

Finde im Internet nur VB und batch skripte, würde es aber gern in c++ verwirklichen

Ich programmieren mit Dev-C++

unter Win XP Pro

Vielen Dank schonmal im Vorraus
 
hab folgende Funktion gefunden

RegConnectRegistry

leider weis ich nicht genau wie die Funktioniert
hab mal was zusammengeschrieben, leider kann er nicht den Pfad finden

Code:
#include <windows.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
    HKEY key = NULL; 
    DWORD dwRet = 0; 
    DWORD datasize = 200; 
    PUCHAR buf = new UCHAR[200]; 
    
    bool error=false;
    int i; 
    char kKey[30];
    
    RegConnectRegistry("\\PC-hastdunichtgesehn",HKEY_LOCAL_MACHINE,&key);
    dwRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SYSTEM\\ControlSet001\\Control\\ComputerName\\ActiveComputerName",0,KEY_READ,&key);                       
    dwRet = RegQueryValueEx(key,"ComputerName",NULL,NULL,(LPBYTE)buf,&datasize); 
        
    if (dwRet != ERROR_SUCCESS)     //wenn nicht alles ok
       error=true;
        
    if(error!=true)
    {
      for(i=0;i<50;i++) //Konverierung von unsigned char* buf nach char kKey
      kKey[i]=buf[i];
    
      printf(kKey);
    }
    else
    {
       printf("Pfad nicht gefunden");
    }
    printf("\n");
    
    system("PAUSE");
    return 0;
}

ich hab bestimmt irgendeinen stuß zusammengeschrieben, hoffe ihr könnt mich korrigieren.
 
Zuletzt bearbeitet:
ich komme nicht weiter, kenne mich mit Zeigern nicht so gut aus

meines erachtens nach müsste es ja so heißen:

Code:
RegConnectRegistry("\\pc-hastdunichtgesehn",HKEY_LOCAL_MACHINE,&remote);
dwRet = RegOpenKey(remote,"SYSTEM\\ControlSet001\\Control\\ComputerName\\ActiveComputerName",&key);                      
dwRet = RegQueryValueEx(key,"ComputerName",NULL,NULL,(LPBYTE)buf,&datasize);

leider kommen da nur müll raus: °?=
hoffe das irgendjemand mir helfen kann
 
auch wenn das Thema schon sehr alt ist, ich hab endlich ne Lösung gefunden und da mir hier niemand helfen konnte, denke ich ich presentiere mal meine Lösung, damit andere nicht lange suchen müssen.

Mit dem Code kann man den WinKey des Zielrechners auslesen, und was mich sehr erschreckt hat: Man braucht keine Adminrechte auf dem Zielrechner :suspekt: (Ich hoffe es ist nicht verboten solch eine Code zu veröffentlichen)

Naja, das Prog kommt leider nicht ohne Weiteres durch eine Firewall (Remote Registry muss an sein), aber ansonsten geht es.

Ok, jetzt der Code:

Code:
#include <windows.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
    UCHAR digits[] = {'B','C','D','F','G','H','J','K','M','P','Q','R','T','V','W','X','Y','2','3','4','6','7','8','9'}; 
    PUCHAR strresult = new UCHAR[26]; 
    PUCHAR buf = new UCHAR[200]; 

    char bKey[100];      //Konvertierter Key mit bindestrichen
    char chKey[30];      //Konvertierter Key ohne bindestriche
    
    char hostName[] = "\\\\";
    char host[19]="";
    
    HKEY rootKey = NULL;

    DWORD datasize = 200;
    DWORD dwRet = 0;
    
    printf("Bitte Zielrechner eingeben: ");
    gets(host);
    
    strcat(hostName,host);
    
    dwRet = RegConnectRegistry(hostName,HKEY_LOCAL_MACHINE,&rootKey);             
    dwRet = RegOpenKeyEx(rootKey,"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion",0,KEY_READ,&rootKey);
    dwRet = RegQueryValueEx(rootKey,"DigitalProductId",NULL,NULL,(LPBYTE)buf,&datasize);

    if (dwRet != ERROR_SUCCESS) //ob nicht alles ok
    {
       printf("Es ist ein Fehler aufgetreten\n");
       system("pause");
       return -1;
    }

    RegCloseKey(rootKey);
    
    int k,j;
    for (int i=24;i>=0;i--) 
    { 
       int x=0; 
    
       for (int j=14;j>=0;j--) 
       { 
           x = (x<<8) + (buf+0x34)[j]; 
           (buf+0x34)[j] = x / 24; 
           x = x % 24; 
       } 
       strresult[i]=digits[x]; 
    }
    
    for(j=0;j<30;j++) //Konverierung von unsigned char* strresult nach char chKey
      chKey[j]=strresult[j];
    
    for(j=0,k=0;j<30;j++,k++)        //einfügen von bindestrichen
    {
       bKey[k]=chKey[j];
       if(j==4||j==9||j==14||j==19)
       {
          bKey[k+1]=45;
          k=k+1;
       }
    }
    
    printf("Der WindowsKey auf dem Zielrechner ist: ");
    printf(bKey);
    printf("\n");

    system("pause");
    return 0;
}
 
Zuletzt bearbeitet:
Zurück