Zitat von
Mephistopheles:
Zitat von
Luckie:
Folgendes:
Wenn man mit VirtualAllocEx sich Speicher im fremden Prozess alloziiert, dann sind diese Rechte nicht nötig, um in diesen Speicherbercih mit WrteProcessMemory zu schreiben. Da es VirtualAllocEx aber nur unter NT basierenden Systemen gibt, ist unter
Win9x ein Hack nötig.
Was? Dann könnte man ja das windows-eigene Sicherungssystem umgehen. Denn VirtualAllocEx() benötigt nur eine Untermenge der Rechte die WriteProcessMemory() bräuchte. Du kannst ja mal gern versuchen bei VirtualAllocEx() als Flag (letzter Parameter) PAGE_READONLY anzugeben und danach mit WriteProcessMemory() dort hinein zu schreiben. Du hast nicht mehr Rechte! Probier's aus.
War etwas unglücklich ausgedrückt von mir und ich hätte vorher mal etwas genauer recherchieren sollen. Sorry. Natürlich braucht man für VirtualAllocEx auch diese Rechte. Aber dann kann man auch nur in den Speicher rumschreiben, den man sich selber mit VirtualAllocEx reserviert hat. Ich mache es ja selber so:
Delphi-Quellcode:
ListView := GetDesktopListView;
ProcessId := 0;
GetWindowThreadProcessId(ListView, @ProcessId);
Process := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_OPERATION or
PROCESS_VM_READ or PROCESS_VM_WRITE, False, ProcessId);
if Process <> 0 then
try
// Lokalen und entfernten (im Zielprozess) Puffer anlegen
Size := SizeOf(TLvItemBuffer);
MemLocal := VirtualAlloc(nil, Size, MEM_COMMIT, PAGE_READWRITE);
MemRemote := VirtualAllocEx(Process, nil, Size, MEM_COMMIT,
PAGE_READWRITE);
if Assigned(MemLocal) and Assigned(MemRemote) then
try
// Anzahl der Symbole ermitteln und in einer Schleife durchlaufen
IconCount := SendMessage(ListView, LVM_GETITEMCOUNT, 0, 0);
Ist aus meinen LuckieDIPS.