Schau dir mal an, was GetCurrentProcess zurückliefert. Das ist ein Pseudohandle, was als (HANDLE)-1 definiert ist (mehr dazu

). Sollte klar sein, dass du dann irgendeinen Mist versuchst du verändern.
Du meinst vermutlich die Adresse des Hauptmoduls im Prozess, welche du mit GetModuleHandle(nullptr) bekommst.
Abgesehen davon ist hier aufgrund der Pointerarithmetik ein fehler drin:
Code:
int *holzpointer = (int *)hd + 0x1F354;
Erst wird hd in einen int* gecastet und dann wird was draufaddiert. Was dann in holzpointer steht, lässt sich mathematisch (ohne Pointerarithmetik oder Typen) so ausdrücken: holzpointer = hd + 0x1F354 * sizeof(int)
Zum rechnen solltest du also einen integralen Typ ausreichender Größe (bspw. uintptr_t) oder einen Pointertyp, dessen Basistyp nur 1 byte groß ist (bspw. uint8_t*).
Insgesamt könnte man also deine RewriteValues funktion korrekterweise so (oder nach belieben auch in mehr als einer Zeile) schreiben:
Code:
*((int*)((uintptr_t)GetModuleHandle(nullptr) + 0x1F354)) = 2000;
Ob das Offset von 0x1F354 korrekt ist, kann ich dabei natürlich auch nicht sagen, da musste ich mich jetzt auf deine Angaben verlassen.
Ich hoffe, dass das hilft

Jeoni