Programmieren - alles kontrollieren 4.935 Themen, 20.621 Beiträge

C++: Zeiger, Speicher, Typen, Casts, malloc, new...

Yves3 / 0 Antworten / Flachansicht Nickles

Hallo

Ich versuche die Beschreibung eines Events aus dem Windows Eventlog zu lesen.
Was ich habe ist ein Zeiger auf eine EVENTLOGRECORD Struktur.
Die enthält die beiden Werte StringOffset und DataOffset.
Nach bisheriger Erkenntnis ist von StringOffset an der Beschreibungstext gespeichert und die Daten folgen direkt darauf... anders ausgedrückt markiert DataOffset also das Ende des Beschreibungsstrings.

Leider habe ich es bis jetzt nicht geschafft, diesen String aus dem Gebilde raus zu bekommen. Ich habe bis jetzt noch nicht so speichernah gearbeitet und bin mir auch unsicher beim Casten (Weiss nicht, was geht und was nicht).

Mein bisheriger Versuch:


unsigned int uSize = m_pevlr->DataOffset - m_pevlr->StringOffset;
if(uSize == 0) // Falls keine Beschreibung, dann false zurück geben
return FALSE;

WCHAR* pwcDescription = (WCHAR*) malloc(uSize);
memcpy(pwcDescription, (WCHAR*)(m_pevlr + m_pevlr->StringOffset), uSize);
wcout return TRUE;



EDIT: Problem gelöst


Code:


unsigned int uSize = ((m_pevlr->DataOffset) - (m_pevlr->StringOffset));
if(uSize > 0) // Falls keine Beschreibung, dann false zurück geben
{

WCHAR* pwcDescription = (WCHAR*) malloc(uSize);
memcpy(pwcDescription, (WCHAR*)((LPBYTE)m_pevlr + m_pevlr->StringOffset), uSize);
wcout return TRUE;

}
return false;


OT: Cool, da kann man ja auch CSS zum Formatieren verwenden :)
bei Antwort benachrichtigen