Ich habe einen Haken im wrectfile-Befehl von kernel32.dll. Der Hook wird ausgelöst, ich kann den Pufferinhalt jedoch nicht lesen.C++ Werte des LPCVOID-Zeigers lesen
Ziel: Msgbox zeigt den Inhalt des Puffers an, der an den COM-Port gesendet wird.
Ausgabe: Die msgbox druckt eine scheinbar zufällige Reihe von Zahlen, von denen ich annehme, ist die Speicheradresse, anstelle des tatsächlichen Inhalts von lpBuffer.
C++ Code:
void hookedFunc(HANDLE hfile, LPCVOID * lpBuffer, DWORD nNumberBytesToWrite, LPWORD lpNumberofBytesWritten, LPOVERLAPPED lpOverlapped) {
char *pString = reinterpret_cast<char *>(lpBuffer);
//Msgbox - arg 1//////////////////////////////////////////////////////////////////////////////
WCHAR szTest[45];
swprintf_s(szTest, 45, L"%d|\n", pString);
MessageBox(NULL, szTest, L"BUFFER CONTENTS", MB_OK);
swprintf_s(szTest, 45, L"%d", nNumberBytesToWrite);
MessageBox(NULL, szTest, L"TEST", MB_OK);
}
Ändern von% d zu% s führt zum Absturz des Programms – user1698144
@ user1698144 Paar Gründe dafür. Einer ist der Fehler, den Captain Giraffe in seiner Antwort hervorhebt, und der andere ist die '_s'-Funktion, die standardmäßig das Programm abbricht, wenn die Eingabe schlecht ist, anstatt zu versuchen, nach undefiniertem Verhalten einzuschlafen. Sie haben zwei Fehler, nicht einen. – user4581301
Nun, der einzige Zweck des Programms ist es, diesen Wert zu finden. Nach der Implementierung von Griaffes Korrektur wird die msgbox ausgegeben, aber es ist alles Kauderwelsch. Sieht aus wie das gleiche chinesische Zeichen, das immer wieder wiederholt wird. – user1698144