Seltsames Problem mit WriteProcessMemory
-
Ich kann es mir nicht erklären
Ein Auszug aus meiner Lib:DWORD Process::writeWideString(DWORD_PTR address, const std::wstring& value) const { DWORD bytesWritten = 0; int ec; size_t stringLength = (value.length() + 1) * sizeof(wchar_t); ec = WriteProcessMemory( processHandle_, reinterpret_cast<LPVOID>(address), static_cast<LPVOID>(const_cast<wchar_t*>(&value[0])), stringLength, &bytesWritten ); if(!ec || bytesWritten != stringLength) { std::stringstream error; error << "Process::writeWideString() Error : WriteProcessMemory() failed writing at 0x" << std::hex << address << std::dec << " (" << bytesWritten << " bytes written) with errorcode: " << GetLastError(); throw std::runtime_error(error.str()); } return bytesWritten; }
Die geworfene Exception sieht wie folgt aus:
Process::writeWideString() Error : WriteProcessMemory() failed writing at 0x48a0000 (0 bytes written) with errorcode: 87
Errorcode 87: The parameter is incorrect.
Was ich mir gerade nicht erklären kann. Benutzt wird die Funktion in folgendem Kontext:
SafeRemoteMemory remotePathBuffer(allocateMemory(dllPath.length() + 1) * sizeof(wchar_t), processHandle_); writeWideString(remotePathBuffer, dllPath);
Also, sie wird mit korrekt durch VirtualAllocEx angelegtem Speicher gefüttert.
Kann mir jemand auf die Sprünge helfen? Habe meine Lib bis vor kurzem (Größtenteils neu geschrieben) immer problemlos nutzen können
Danke!
Grüße,
FloEdit: Ich komme mir so dämlich vor. Die Addresse mit sizeof(wchar_t) zu multiplizieren war wohl epic fail.