![]() |
Re: MemoryMapped Files unter Vista - keine Daten
um dazu etwas sagen zu können müsste man wissen wie du das, was sich hinter data verbirgt zusammemsetzt. So sieht man ja nur das du etwas kopierst aber mehr nicht
|
Re: MemoryMapped Files unter Vista - keine Daten
Ich habe einmal die Variable Len vom Typ Integer. Schreiben tue ich die so:
WriteToMMF(Pointer(Len), SizeOf(Integer), 'MyMapName1') |
Re: MemoryMapped Files unter Vista - keine Daten
genau da liegt der Fehler!
Deine Funktion erwartet einen Pointer auf die Daten. Du castest aber deine Länge einfach zu einem Pointer und übergibst dies dann als Adresse. Es wird also nicht deine Länge geschrieben sondern wenn deine Länge "5" ist dann wird das geschrieben was an Adresse 5 ist. Du musst also die Adresse von deiner Längenvariable übergeben und nicht einfach deine Variable zu einem Pointer casten (Grundlagen). |
Re: MemoryMapped Files unter Vista - keine Daten
Ah sorry hatte das falsch im Kopf. So meinte ich auch:
Delphi-Quellcode:
Unter XP funktioniert das wunderbar. Unter Vista leider nicht. Der String kommt unter Vista allerdings an .. ich darf nicht mit Strings arbeiten, sondern ausschließlich mit PChar. Es könnte mein Problem lösen, wenn ich eine Assembler Funktion hätte, die mit IntToPChar macht ..
WriteToMMF(@Len, SizeOf(Len), 'InjectionMappingTest2');
|
Re: MemoryMapped Files unter Vista - keine Daten
*push* :duck:
|
Re: MemoryMapped Files unter Vista - keine Daten
Konnte das Problem weiter eindämmen: Es passiert nicht auf allen Rechnern, sondern nur auf einigen. Egal ob XP oder Vista. Auch funktiniert es nicht mit Microsoft Virtual PC 2007.
Dort ist der ankommende Integer immer = 0. |
Re: MemoryMapped Files unter Vista - keine Daten
Ich weiß ich nerve :oops: Sehr seltsame Sache muss man sagen:
Delphi-Quellcode:
Es kommt eine AV bei CopyMemory im WriteToMMF Teil, wenn ich das Programm auf einer VM starte. Sehr komisch ist noch, dass es auf meinem normalen System funktioniert. Und das sogar, wenn ich CopyMemory auskommentiere :mrgreen: :D Kann ich mir nicht erklären, denke aber mal, dass da mein Fehler liegt.
procedure WriteToMMF(Filename: PChar; Data: Pointer; Len: Integer);
var hFile: Cardinal; Mem: Pointer; begin hFile := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, Len +1, Filename); if hFile <> 0 then begin Mem := MapViewOfFile(hFile, FILE_MAP_WRITE, 0, 0, 0); CopyMemory(Mem, Data, Len); end; //CloseHandle(hFile); end; function ReadFromMMF(Filename: PChar; Size: Integer): Pointer; var hFile: Cardinal; begin hFile := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, Size, Filename); if hFile <> 0 then begin Result := MapViewOfFile(hFile, FILE_MAP_READ, 0, 0, 0); end else begin Result := nil; end; CloseHandle(hFile); end; ARGH :wall: Ich habs .. heureka :D Mein Programm hat sich teilweise geschlossen, befor mein RemoteThread auf die Daten zugegriffen hat. Ein simples WaitForSingleObject hats getan. |
Re: MemoryMapped Files unter Vista - keine Daten
Zitat:
hab mir so ein geiles MemoryLeak geschaffen, wo z.B. "angeblich" geschlossene Dateien, solange das Programm noch aktiv war, nicht von anderen Programmen (Explorer) gelöscht werden konnten. ach ja .... och menno, war schon fast soweit mich auf die MMFs zusammen SendMessage zu stürzen, um Programmübergreifend kommunizieren zu können, da es für mich wohl am Einfachsten wär. |
Re: MemoryMapped Files unter Vista - keine Daten
Zitat:
Es gibt Virenscanner die öffnen Dateien obwohl das Flag tragen das sie sich beim Schließen automatisch löschen sollen. |
Re: MemoryMapped Files unter Vista - keine Daten
Möchte es kurz in den Raum schmeissen....
...vergesst nicht, daß es auch noch das gute alte TCP/IP gibt, damit kann man ja nicht nur zwischen verschiedenen Rechnern kommunizieren, sondern auch innerhalb des selben Rechners, ich sehe dies als eine alternative zu MMF, Named Pipes, usw. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz