AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein CreateProcess wirft Kernelbase Error
Thema durchsuchen
Ansicht
Themen-Optionen

CreateProcess wirft Kernelbase Error

Ein Thema von venice2 · begonnen am 2. Apr 2021 · letzter Beitrag vom 4. Apr 2021
 
venice2
(Gast)

n/a Beiträge
 
#5

AW: CreateProcess wirft Kernelbase Error

  Alt 2. Apr 2021, 15:31
Jo.

Zitat:
lpCommangLine

...
The Unicode version of this function, CreateProcessW, can modify the contents of this string. Therefore, this parameter cannot be a pointer to read-only memory (such as a const variable or a literal string). If this parameter is a constant string, the function may cause an access violation.
ReadOnly ist er zwar nicht, da Variable, aber vielleicht zu klein?

PChar/PWideChar/PAnsiChar aus einem String/WideString/UnicodeString/AnsiString
is bei '' immer nicht "writeable" und auch nicht wenn es er aus einer Constante gibt. (OK, Stringkonstanten sind zwar nur "schreibgeschützte" Variablen, aber dennoch)
Zu klein nein BufferSize ist 38


Ich habe es jetzt mal so gemacht aber leider schmiert die Anwendung wieder ab mit EAccessViolation
Obwohl der Text jetzt korrekt zu lesen ist.
Callback( ReadPipe(StdIO), Input, Terminate, PI, UserData);
Delphi-Quellcode:
 
  TIOPipe = record
    hRead,
    hWrite: DWORD;
  end;
 
  TStdIO = record
    stdIn,
    stdOut,
    stdError: TIOPipe;
  end;
Delphi-Quellcode:
Function ReadPipe(StdIo: TStdIO): string;
var
  BufferSize: DWORD;
  Buffer: array [0..255] of AnsiChar;

begin
  if StdIO.stdOut.hRead <> INVALID_HANDLE_VALUE then
  begin
    BufferSize := 0;
    // First, check the size of the current pipe buffer
    PeekNamedPipe( StdIO.stdOut.hRead,
                   nil,
                   0,
                   nil,
                   @BufferSize,
                   nil);
    // if there is data waiting, fetch it
    if BufferSize > 0 then
    begin
      try
        ZeroMemory(@Buffer, BufferSize + 1);
        // Read all data from the pipe
        ReadFile(StdIO.stdOut.hRead, Buffer, BufferSize, BufferSize, nil);
        SetLength(Result, BufferSize);
        CopyMemory(@Result, @Buffer, BufferSize);
      finally
        StrDispose(Buffer);
      end;
    end
    else
      Result := '';
  end
  else
    Result := '';
end;
so läuft es durch aber der Text ist dann nicht zu lesen.
Delphi-Quellcode:
Function ReadPipe(StdIo: TStdIO): string;
var
  BufferSize: DWORD;
  Buffer: PChar;
begin
  if StdIO.stdOut.hRead <> INVALID_HANDLE_VALUE then
  begin
    BufferSize := 0;
    // First, check the size of the current pipe buffer
    PeekNamedPipe( StdIO.stdOut.hRead,
                   nil,
                   0,
                   nil,
                   @BufferSize,
                   nil);
    // if there is data waiting, fetch it
    if BufferSize > 0 then
    begin
      // set the new length of the result and initialize it
      Buffer := StrAlloc(BufferSize + 1);
      try
        ZeroMemory(Buffer, BufferSize + 1);
        // Read all data from the pipe
        ReadFile(StdIO.stdOut.hRead, Buffer^, BufferSize, BufferSize, nil);
        SetLength(Result, BufferSize);
        CopyMemory(PChar(Result), Buffer, BufferSize);
      finally
        StrDispose(Buffer);
      end;
    end
    else
      Result := '';
  end
  else
    Result := '';
end;
Finde den Fehler nicht warum es mit einem Array of AnsiString abschmiert.

Zitat:
Warum leere "Security" anstatt NIL an die Funktion?
Ist nicht von mir.

Geändert von venice2 ( 2. Apr 2021 um 15:38 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:21 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