FIX: Hangs when cannot open/create file with elevation (issue #1379)

This commit is contained in:
Alexander Koblov 2023-12-02 23:15:50 +03:00
commit a0c19151b5
2 changed files with 21 additions and 3 deletions

View file

@ -296,6 +296,7 @@ end;
function TWorkerProxy.ProcessObject(ACommand: UInt32; const ObjectName: String;
Mode: Integer): THandle;
var
LastError: Integer;
Stream: TMemoryStream;
begin
Result:= feInvalidHandle;
@ -314,7 +315,12 @@ begin
// Send command
FClient.WriteBuffer(Stream.Memory^, Stream.Size);
// Receive command result
FClient.ReadHandle(Result);
FClient.ReadBuffer(LastError, SizeOf(LastError));
if (LastError = 0) then
FClient.ReadHandle(Result)
else begin
SetLastOSError(LastError);
end;
finally
Stream.Free;
end;

View file

@ -224,7 +224,13 @@ begin
Mode:= ARequest.ReadDWord;
DCDebug('FileOpen ', FileName);
Handle:= mbFileOpen(FileName, Mode);
ATransport.WriteHandle(Handle);
if (Handle <> feInvalidHandle) then
LastError:= 0
else begin
LastError:= GetLastOSError;
end;
ATransport.WriteBuffer(LastError, SizeOf(LastError));
if (LastError = 0) then ATransport.WriteHandle(Handle);
end;
RPC_FileCreate:
begin
@ -232,7 +238,13 @@ begin
Mode:= ARequest.ReadDWord;
DCDebug('FileCreate ', FileName);
Handle:= mbFileCreate(FileName, Mode);
ATransport.WriteHandle(Handle);
if (Handle <> feInvalidHandle) then
LastError:= 0
else begin
LastError:= GetLastOSError;
end;
ATransport.WriteBuffer(LastError, SizeOf(LastError));
if (LastError = 0) then ATransport.WriteHandle(Handle);
end;
RPC_RenameFile:
begin