Hallo zusammen,
ich stehe gerade auf dem Schlauch und vielleicht hat ja jemand eine Idee:
Ich habe zwei Anwendungen, einen Dienst und eine Applikation, welche via SharedMemory Informationen austauschen.
So weit so gut, es läuft unter NT,2000 und XP problemlos.
Jetzt geht es um Windows 2003 Server.
Dort kann ich nämlich
nicht auf den vom Service erstellten SharedMemory zugreifen.
Das Erstellen des Speichers erfolgt so:
Delphi-Quellcode:
constructor TSharedMem.Create(
const Name: PChar; Size: Integer);
var LastError: Integer;
LastErrorMsg :
String;
begin
try
FName :=
string(
Name);
FSize := Size;
{ CreateFileMapping, when called with $FFFFFFFF for the hanlde value,
creates a region of shared memory }
FHandle := CreateFileMapping($FFFFFFFF,
nil, PAGE_READWRITE, 0, Size,
Name);
if FHandle = 0
then abort;
LastError := GetLastError;
if LastError <> 0
then
LastErrorMsg := SysErrorMessage(LastError);
FCreated := LastError = 0;
{ We still need to map a pointer to the handle of the shared memory region }
FFileView := MapViewOfFile(FHandle, FILE_MAP_WRITE, 0, 0, Size);
if FFileView =
nil then abort;
except
Error(Format('
Error creating shared memory %s (%s)', [
Name, SysErrorMessage(GetLastError)]));
end;
end;
Ich gehe mal davon aus, dass das "nil" im lpFileMappingAttributes-Parameter dafür verantwortlich ist.
Leider habe ich da zu wenig Erfahrung, hat jemand ein Tipp, wie ich die Rechte entsprechend "erweitern" kann?
lg,
Michael