wieder der Regeditor
-
Hallo!
Vielleicht können sich noch manche an meinen Post von vor längerer Zeit erinnern.
Ich hab das Problem, dass ich beim RegEditor immer den String aus dem letzten Schleifendurchlauf in den neuen reinkopieren muss, ein "\" dranhängen muss und dann den ausgewählten String ergänzen muss.
Höhrt sich nicht schwer an, hatte auch ne Lösung war aber unsauber, da der erste String hätte leer bleiben müssen und es muss ne bessere Lösung geben.Hier mal der Code, ich hoffe ihr versteht dann was ich meine:
#include <windows.h> #include <winreg.h> #include <stdio.h> int enumsubkeys(HKEY key); int enumvalues(HKEY subkey); extern SOCKET sendsock; extern SOCKADDR_IN address; int parameter=0; unsigned long int subkeys=0; unsigned long int values=0; unsigned long int size=200; unsigned long int index=0; char string [30] [200]; char path [30] [200]; unsigned long int buffersize=200; unsigned long int i; unsigned long int subvalues; char value[20][255]; unsigned long int zaehler=0; int rc=0; int k=0; char singlestring[200]=""; char doubleslash[2]="\\"; int nummer; int rc; HKEY rootkey[4]; int regeditor(void) { HKEY hkey; HKEY newkey[20]; rootkey[0]=HKEY_USERS; rootkey[1]=HKEY_CURRENT_USER; rootkey[2]=HKEY_LOCAL_MACHINE; rootkey[3]=HKEY_USERS; rootkey[4]=HKEY_PERFORMANCE_DATA; i=0; hkey=rootkey[parameter]; strcpy(path[0],singlestring); do { RegQueryInfoKey(hkey,NULL,NULL,NULL,&subkeys, NULL, NULL,&values,NULL,NULL,NULL,NULL); if(subkeys!=0) { rc=enumsubkeys(hkey); } else { if (values!=0) { enumvalues(hkey); } } scanf("%i",&nummer); strcpy( memset(string,0,sizeof(string)); rc=RegOpenKeyEx(hkey,path[i],0,KEY_ALL_ACCESS,&newkey[k]); //Stelle von beiden wechseln //hkey in rootkey ändern //zähler einbauen hkey=newkey[k]; k=k+1; }while(1); return 0; } int enumsubkeys(HKEY key) { for (zaehler=0,index=0;zaehler<=(subkeys);index++,zaehler++) { RegEnumKey(key,index,string[zaehler],buffersize); printf("%s\n",string[zaehler]); Sleep(90); } return 0; } int enumvalues(HKEY subkey) { char kA[255]; unsigned long int valueindex=0; unsigned long int valuesize=sizeof(kA); unsigned long int type[30]; char byte[200]; char SZ[250]; unsigned long int dword; unsigned long int bytesize=sizeof(byte); unsigned long int SZsize=sizeof(SZ); unsigned long int dwordsize=sizeof(dword); for (;valueindex<values;valueindex++) { RegEnumValue(subkey,valueindex,kA,&valuesize,NULL,&type[valueindex],NULL,NULL); printf("%s",kA); if(type[valueindex]==REG_BINARY) //type-array { printf("binaray "); //RegGetValue(rootkey[parameter], path[i],value[valueindex],RRF_RT_REG_BINARY,NULL,&byte,&bytesize); printf("%x",byte); } if(type[valueindex]==REG_SZ) { printf("string "); //RegGetValue(rootkey[parameter], path[i],value[valueindex],RRF_RT_REG_SZ,NULL,&SZ,&SZsize); printf("%s", SZ); } if(type[valueindex]==REG_DWORD) { printf("Zahl "); //RegGetValue(rootkey[parameter], path[i],value[valueindex],RRF_RT_REG_DWORD,NULL,&dword,&dwordsize); printf("%i",dword); } valuesize=sizeof(kA); printf("%s\n",kA); } return 0; } int main() { regeditor(); return 0; }Vielen Dank,
-
das Problem liegt zwischen Zeile 90 und 100, wo ich was ausgeschnitten habe.
da sollte dann der Code hinkommen.
hier mal der lückenlose Code:
#include <windows.h> #include <winreg.h> #include <stdio.h> int enumsubkeys(HKEY key); int enumvalues(HKEY subkey); extern SOCKET sendsock; extern SOCKADDR_IN address; int parameter=0; unsigned long int subkeys=0; unsigned long int values=0; unsigned long int size=200; unsigned long int index=0; char string [30] [200]; char path [30] [200]; unsigned long int buffersize=200; unsigned long int i; unsigned long int subvalues; unsigned long int zaehler=0; int rc=0; int k=0; char singlestring[200]=""; char doubleslash[2]="\\"; int nummer; int rc; HKEY rootkey[4]; int regeditor(void) { HKEY hkey; HKEY newkey[20]; rootkey[0]=HKEY_USERS; rootkey[1]=HKEY_CURRENT_USER; rootkey[2]=HKEY_LOCAL_MACHINE; rootkey[3]=HKEY_USERS; rootkey[4]=HKEY_PERFORMANCE_DATA; i=0; hkey=rootkey[parameter]; strcpy(path[0],singlestring); do { RegQueryInfoKey(hkey,NULL,NULL,NULL,&subkeys, NULL, NULL,&values,NULL,NULL,NULL,NULL); if(subkeys!=0) { rc=enumsubkeys(hkey); } else { if (values!=0) { enumvalues(hkey); } } scanf("%i",&nummer); strcpy(path[i+1],path[i]); if(i!=0) { lstrcat(path[i+1],doubleslash); } lstrcat(path[i+1],string[i]); memset(string,0,sizeof(string)); rc=RegOpenKeyEx(hkey,path[i+1],0,KEY_ALL_ACCESS,&newkey[k]); i=i+1; hkey=newkey[k]; k=k+1; }while(1); return 0; } int enumsubkeys(HKEY key) { for (zaehler=0,index=0;zaehler<=(subkeys);index++,zaehler++) { RegEnumKey(key,index,string[zaehler],buffersize); printf("%s\n",string[zaehler]); Sleep(90); } return 0; } int enumvalues(HKEY subkey) { char kA[255]; unsigned long int valueindex=0; unsigned long int valuesize=sizeof(kA); unsigned long int type[30]; char byte[200]; char SZ[250]; unsigned char dword=0; unsigned char euda=0; unsigned long int bytesize=sizeof(byte); unsigned long int SZsize=sizeof(SZ); unsigned long int dwordsize=sizeof(euda); char value[20][255]; int rc; for (;valueindex<values;valueindex++) { RegEnumValue(subkey,valueindex,kA,&valuesize,NULL,&type[valueindex],NULL,NULL); printf("%s",kA); if(type[valueindex]==REG_BINARY) { printf(" binaray "); //RegGetValue(rootkey[parameter], path[i],value[valueindex],RRF_RT_REG_BINARY,NULL,&byte,&bytesize); printf("%x",byte); } if(type[valueindex]==REG_SZ) { printf(" string "); //RegQueryValue(rootkey[parameter], path[i],value[valueindex],&SZsize); printf("%s", SZ); } if(type[valueindex]==REG_DWORD) { printf(" Zahl "); rc=RegQueryValueEx(subkey,value[valueindex],NULL,NULL,&dword,&dwordsize); printf("%i",rc); //RegGetValue(rootkey[parameter], path[i],value[valueindex],RRF_RT_REG_DWORD,NULL,&dword,&dwordsize); printf("%i\n",dword); } valuesize=sizeof(kA); //printf("%s\n",kA); } return 0; } int main() { regeditor(); return 0; }
-
ich will übrigens einen Trojaner programmieren
-
> 20 Zeilen, Out Of Memory
Na dann mal viel Spaß beim Suchen...
Unregistrierter schrieb:
ich will übrigens einen Trojaner programmieren
So wie es aussieht, wird die Welt wohl davon verschont bleiben.
-
Ich weiss nicht welches blöde Arschloch das geschrieben hat ich wars nicht, ich finds echt scheisse, da mich das Problem schon länger wurmt und ich jetzt erhofft hatte endlich Hilfe zu bekommen.
Ab jetzt werd ich mich immer einloggen um mir solche Scheisse zu ersparen.
-
Entschuldigung das "Arschloch" nehm ich zurück
-
keksekekse schrieb:
Unregistrierter schrieb:
ich will übrigens einen Trojaner programmieren
So wie es aussieht, wird die Welt wohl davon verschont bleiben.

PS: Dein Code ist unübersichtlich und damit schlecht lesbar...glaube nicht, dass sich das so jemand angucken wird.
-
Hmmm dann versuch ich mal den Code leserlicher zu machen und poste ihn erneut.
-
Der Code ist doch völliger Blödsinn. Wenn ein Subkey mehr als 30 Unterschlüssel hat schmiert Dir das Ding doch schon weg.
Du musst das ganze schon rekursiv bauen.
-
Muhi89 schrieb:
Ab jetzt werd ich mich immer einloggen um mir solche Scheisse zu ersparen.
Entweder Du bist der Unechte und auf Rückzugsgefecht oder Du hältst Dich nicht an Dein Versprechen.
Wer sich nicht einloggt, obwohl er einen Account hat, zeigt die genausoviel Gleichgültigkeit wie wenn ihm die Rechtschreibung egal ist und verdient ignoriert zu werden.
-
So, mal eingeloggt
,naja das is ja auch nur mal irgendeine Zahl, mir gehts eher ums Grundgerüst und ich seh mich da vor viele Probleme gestellt.
Was ich erreichen will:
->man wählt am Anfang einen "Root-Key", dann werden alle Subkeys angezeigt und dann wählt man immer den zu öffnenden subkey aus und der wird dann wieder aufgelistet usw.
->man soll dabei immer durch eine Eingabe alle "Root-Keys" sehen und von vorne beginnen können ohne, dass sich das mit dem restlichen Code in die Quere kommt.
->man soll auch zurückspringen können also zb von KEY_1\KEY_2 zu KEY_1.Vielleicht hat jemand ja ne Idee oder ne Konstruktive Kritik an meinem Code (ist wie gesagt nicht fertig sondern erst eine Rohversion sozusagen), dann postet sie bitte.
Selbst probier ichs schon länger, wer vielleicht meinen alten Post dazu kennt weiss das.
Mfg