![]() |
MemoryMapped Files unter Vista - keine Daten
Hey,
hab an einem Beispiel gehockt, welches mit MMFs funktioniert. Unter XP klapt das auch wunderbar. Unter Vista habe ich eine seltsame Feststellung gemacht. Und zwar werden keine Daten in mein MMF geschrieben. Zum Testen habe ich die Schreib und Lese-Funktion im selben Prozess kurz hintereinander aufgerufen. Der Pointer bleibt leer .. kann sich das jemand erklären? Gruß Florian |
Re: MemoryMapped Files unter Vista - keine Daten
Hi Florian,
ich habe irgendetwas in Erinnerung, daß das was Du machen möchtest unter Vista nicht mehr so einfach geht. Hier liegen wahrscheinlich Probleme mit den Zugriffsrechten vor (ist unter Vista in vielen Fällen nicht mehr erlaubt). Es wird das SeCreateGlobalPrivilege benötigt, doch die UAC verhindert daß irgendwas außer einem Service dies erhält. Bekommst Du denn etwas aus der Richtung GetLastError bzw. als Rückgabewert? Das dürfte in Richtung "Access Denied" gehen... Gruß winkel79 |
Re: MemoryMapped Files unter Vista - keine Daten
Vesuch mal auf Named Pipes auszuweichen.
|
Re: MemoryMapped Files unter Vista - keine Daten
Hast du vielleicht ein kleines Beispiel dazu?
|
Re: MemoryMapped Files unter Vista - keine Daten
Nein, ich kaempfe selber noch damit.
|
Re: MemoryMapped Files unter Vista - keine Daten
Okey ich werd auch mal bisschen rumsuchen. Grade auch wie es ist, wenn ein Prozess unter Adminrechten und der andere mit normalem Token läuft. Denke mal dann wird es aber überhauptnicht funktionieren ..
Wenn du eine Lösung gefunde hast würde ich mich sehr freuen, wenn du mir die kurz zeigen könntest :) |
Re: MemoryMapped Files unter Vista - keine Daten
wie sieht dein Quellcode aus? Prüfst du auch die Rückgabewerte? Ich kann mir nicht vorstellen das du einfach nicht in ein MMF schreiben kannst aber keine Fehlercodes zurück geliefert werden.
|
Re: MemoryMapped Files unter Vista - keine Daten
Ich habe Luckies Beispiel genommen. Die Fehlercodes geben nur SUCCESS zurück. Meine Funktion ist so geändert, dass ich direkt einen Pointer schreibe.
Delphi-Quellcode:
Erster "Fehler" rufe ich CloseHandle auf, kann ich im anderen Programm schon gar nicht auf die Daten zugreifen. Zweite Sache ist .. ich habs genauer getestet.
function WriteToMMF(Data: Pointer; Len: Integer; Filename: string): DWORD;
var dwResult: DWORD; hFileMapping: THandle; Mem: Pointer; begin dwResult := 0; hFileMapping := CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, Len, PChar(Filename)); if hFileMapping <> 0 then begin Mem := MapViewOfFile(hFileMapping, FILE_MAP_WRITE, 0, 0, 0); if Assigned(Mem) then begin CopyMemory(Mem, Data, Len); //CloseHandle(hFileMapping); end; end else begin dwResult := GetLastError; end; Result := dwResult; end; Ich schicke erst einen PChar, welcher auch korrekt ankommt. Danach sende ich Pointer(Len) mit SizeOf(Integer). Dies ist die Passage, welche nicht ankommt. Das Längenbyte ist 0. Was ich versuche ist unabhängig vom String eine ganze Resource zur anderen Anwendung zu schicken. Da die Anwendung ja nicht weiß wie groß die Resource sein wird, musste ich das mit dem Längenbyte vorweg machen. Insgesamt habe ich zur besseren Übersicht einfach 3 Verschiedene "Dateinamen" verwendet. |
Re: MemoryMapped Files unter Vista - keine Daten
Zitat:
|
Re: MemoryMapped Files unter Vista - keine Daten
Achso okey .. und das zweite Verhalten? Kann ich mir irgendwie nicht erklären =/
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:12 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