Release Version läuft feherhaft

NinjaOne

Erfahrenes Mitglied
Hab mir ein kleines Tool geschrieben das auf die Registrie zugreift.
Als Debug Version läuft es fehlerfrei doch, wenn ich Release Version erstelle und es laufen lasse gibt es Probleme.

Der Quellcode:

HKEY hKey = NULL;

nt ModAnor=-1;

unsigned char pBCW[500]="";
unsigned char pBOW[500]="";
unsigned char pBW[500]="";
unsigned char pBS1[5]="";
unsigned char pBS2[5]="";

if(RegOpenKeyEx(HKEY_CURRENT_USER, "Control Panel\\Desktop\\", 0, KEY_READ,&hKey) ==ERROR_SUCCESS) {
DWORD pType;
DWORD dwSize;

if(RegQueryValueEx(hKey,"ConvertedWallpaper",NULL,&pType,&pBCW[0],&dwSize)!=ERROR_SUCCESS) {
MessageBox("Anfrage 001","Achtung",MB_OK);
}
if(RegQueryValueEx(hKey,"OriginalWallpaper",NULL,&pType,&pBOW[0],&dwSize)!=ERROR_SUCCESS) {
MessageBox("Anfrage 002","Achtung",MB_OK);
}
if(RegQueryValueEx(hKey,"Wallpaper",NULL,&pType,&pBW[0],&dwSize)!=ERROR_SUCCESS) {
MessageBox("Anfrage 003","Achtung",MB_OK);
}

if(RegQueryValueEx(hKey,"TileWallpaper",NULL,&pType,&pBS1[0],&dwSize)!=ERROR_SUCCESS) {
MessageBox("Anfrage 004","Achtung",MB_OK);
}
if(RegQueryValueEx(hKey,"WallpaperStyle",NULL,&pType,&pBS2[0],&dwSize)!=ERROR_SUCCESS) {
MessageBox("Anfrage 005","Achtung",MB_OK);
}

RegCloseKey(hKey);
}

Problem bei Release Version:
Die RegQueryValueEx Befehle geben das Ergebnis !=ERROR_SUCCESS und die MessageBox'en werden angezeigt. In der Debug Version ist das nicht der Fall.
Woran kann das liegen und wie kann ich den Fehler beheben ?

Schon mal Danke, für eure Antworten !
 
Du musst bei dem Aufruf von RegQueryValueEx dwSize auf die Grösse des übergebenen Puffers setzen. Das klappt in Debug, weil VS nicht initialisierte lokale Variablen auf 0xcdcdcdcd setzt. Windows glaubt, dein Puffer ist so gross, und schreibt drauflos (Tolle Möglichkeit für einen Overflow!).

In Release wird dwSize nun gar nicht initialisiert, da steht irgendein Wert drin, möglicherweise zufällig einer, der kleiner ist, als der Wert, der in der Registry steht. Und schon klappt es nicht.

Setze dwSize vor dem jeweiligen Aufruf auf die Grösse des Puffers.

Moral von der Geschicht: Glaub keiner alten Spinne nicht (Wer das kennt ist gut!)
Nee, ernsthaft, Moral: Variablen IMMER initialisieren. Alles andere reisst einem nur hinterrücks den A**** auf.
 

Neue Beiträge

Zurück