AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi ProcessList stürzt ab nach kurzer zeit 64Bit

ProcessList stürzt ab nach kurzer zeit 64Bit

Ein Thema von EWeiss · begonnen am 23. Aug 2018 · letzter Beitrag vom 23. Aug 2018
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

ProcessList stürzt ab nach kurzer zeit 64Bit

  Alt 23. Aug 2018, 17:10
Delphi-Quellcode:
procedure TProcess.GetUserInformation;
type
  PTokenUser = ^TTokenUser;

  TTokenUser = record
    User: TSIDAndAttributes;
  end;
const
  PROCESS_QUERY_LIMITED_INFORMATION = $1000;

var
  vHandle: THandle;
  vToken: THandle;
  vUserName: array [0 .. 255] of char;
  vDomainName: array [0 .. 255] of char;
  vUserNameSize: DWORD;
  vDomainNameSize: DWORD;
  vTokenUser: PTokenUser;
  vInfoSize: Cardinal;
  vUse: SID_NAME_USE;
begin
  FUser := '';
  FDomain := '';

  vHandle := OpenProcess(PROCESS_QUERY_INFORMATION, False, FID);
  if vHandle > 0 then
    try
      if OpenProcessToken(vHandle, TOKEN_QUERY, vToken) then
        try
          GetTokenInformation(vToken, TokenUser, nil, 0, vInfoSize);
          vUserNameSize := SizeOf(vUserName);
          vDomainNameSize := SizeOf(vDomainName);
          vUse := SidTypeUser;
          GetMem(vTokenUser, vInfoSize);
          try
            if not GetTokenInformation(vToken, TokenUser, vTokenUser, vInfoSize, vInfoSize) then
              raise ESystemError.Create;
            LookupAccountSid(nil, vTokenUser.User.Sid, @vUserName, vUserNameSize, @vDomainName,
              vDomainNameSize, vUse);
            FUser := vUserName;
            FDomain := vDomainName; // << Hier stürzt die Anwendung ab nur unter 64Bit.
          finally
            FreeMem(vTokenUser);
          end;
        finally
          CloseHandle(vToken);
        end;
    finally
      CloseHandle(vHandle);
    end;
end;
Weis jemand warum ?

gruss
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
2.263 Beiträge
 
Delphi 2010 Professional
 
#2

AW: ProcessList stürzt ab nach kurzer zeit 64Bit

  Alt 23. Aug 2018, 17:16
Sollte es nicht WideString sein als deine vUserName & vDomainName ?

Delphi-Quellcode:
function GetNameFromSid(ASID: String): String;
var
  lSidLen: DWORD;
  lSid: PSID;
  lName, lDomain: WideString;
begin
  lSidLen := SECURITY_MAX_SID_SIZE;

  lSid := AllocMem(lSidLen);
  try
    StringToSID(ASID, lSid, lSidLen);
    LookupAccountBySid(lSid, lName, lDomain);
    Result := lName;
  finally
    FreeMem(lSid);
  end;
end;
Gruß vom KodeZwerg
Wenn ein unerwarteter Fehler aufgetreten ist, frage ich mich immer, welche Fehler erwartet wurden...
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.331 Beiträge
 
Delphi 5 Professional
 
#3

AW: ProcessList stürzt ab nach kurzer zeit 64Bit

  Alt 23. Aug 2018, 17:21
Prüf den Rückgabewert von LookupAccountSid und rufe GetLastError im Falle des Fehlschlagens. Vielleicht bringt dich das weiter.

@KodeZwerg:
Er nutzt doch ein array of char , was auf einem Unicode-fähigen Delphi zu array of WideChar wird. Statisches Array, daher auch ohne Speicherreservierung. Wichtig wäre aber noch, das Array zu nullen, bevor man damit arbeitet.

Grüße
Dalai
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: ProcessList stürzt ab nach kurzer zeit 64Bit

  Alt 23. Aug 2018, 17:30
Sollte es nicht WideString sein als deine vUserName & vDomainName ?

Delphi-Quellcode:
function GetNameFromSid(ASID: String): String;
var
  lSidLen: DWORD;
  lSid: PSID;
  lName, lDomain: WideString;
begin
  lSidLen := SECURITY_MAX_SID_SIZE;

  lSid := AllocMem(lSidLen);
  try
    StringToSID(ASID, lSid, lSidLen);
    LookupAccountBySid(lSid, lName, lDomain);
    Result := lName;
  finally
    FreeMem(lSid);
  end;
end;
Wenn es Monate lang ohne Problem funktioniert hat warum dann jetzt WideString anstelle von Array of char verwenden. ?
Das Problem tritt nur mit 64Bit auf.
Hmmm...

Zitat:
Prüf den Rückgabewert von LookupAccountSid und rufe GetLastError im Falle des Fehlschlagens. Vielleicht bringt dich das weiter.
Danke wird wohl das beste sein.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
2.263 Beiträge
 
Delphi 2010 Professional
 
#5

AW: ProcessList stürzt ab nach kurzer zeit 64Bit

  Alt 23. Aug 2018, 17:43
Delphi-Quellcode:
procedure TProcess.GetUserInformation;
type
  PTokenUser = ^TTokenUser;

  TTokenUser = record
    User: TSIDAndAttributes;
  end;
const
  PROCESS_QUERY_LIMITED_INFORMATION = $1000;

var
  vHandle: THandle;
  vToken: THandle;
// vUserName: array [0 .. 255] of char;
// vDomainName: array [0 .. 255] of char;
  vUserName, vDomainName: string;
  vUserNameSize: DWORD;
  vDomainNameSize: DWORD;
  vTokenUser: PTokenUser;
  vInfoSize: Cardinal;
  vUse: SID_NAME_USE;
begin
  FUser := '';
  FDomain := '';

  vHandle := OpenProcess(PROCESS_QUERY_INFORMATION, False, FID);
  if vHandle > 0 then
    try
      if OpenProcessToken(vHandle, TOKEN_QUERY, vToken) then
        try
          GetTokenInformation(vToken, TokenUser, nil, 0, vInfoSize);
          vUserNameSize := SizeOf(vUserName);
          vDomainNameSize := SizeOf(vDomainName);
          vUse := SidTypeUser;
          GetMem(vTokenUser, vInfoSize);
          try
            if not GetTokenInformation(vToken, TokenUser, vTokenUser, vInfoSize, vInfoSize) then
              raise ESystemError.Create;


            vUserNameSize := 0;
            vDomainNameSize := 0;
            LookupAccountSid(nil, vTokenUser.User.Sid, nil, vUserNameSize, nil,
              vDomainNameSize, vUse);
            SetLength(vUserName, NamevUserNameSize);
            SetLength(vDomainName, vDomainNameSize);
            LookupAccountSid(nil, vTokenUser.User.Sid, PChar(vUserName), vUserNameSize, PChar(vDomainName),
              vDomainNameSize, vUse);
// Result := PChar(vDomainName) + '/' + PChar(vUserName);
            FUser := PChar(vUserName);
            FDomain := PChar(vDomainName); // << Hier stürzt die Anwendung ab nur unter 64Bit.


          finally
            FreeMem(vTokenUser);
          end;
        finally
          CloseHandle(vToken);
        end;
    finally
      CloseHandle(vHandle);
    end;
end;
Weis jemand warum ?

gruss
Ich habe mal den LookupAccountSid Teil angepasst, weiter oben stimmt nun etwas nicht wegen veränderung.... grrrr
Gruß vom KodeZwerg
Wenn ein unerwarteter Fehler aufgetreten ist, frage ich mich immer, welche Fehler erwartet wurden...
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: ProcessList stürzt ab nach kurzer zeit 64Bit

  Alt 23. Aug 2018, 17:49
OK Danke aber ich habe es schon selbst auf meiner art gemacht
Einfach ein try.. except und ein anschließendes
      raise Exception.Create(SysErrorMessage(GetLastError));

gruss
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
2.263 Beiträge
 
Delphi 2010 Professional
 
#7

AW: ProcessList stürzt ab nach kurzer zeit 64Bit

  Alt 23. Aug 2018, 18:02
@KodeZwerg:
Er nutzt doch ein array of char , was auf einem Unicode-fähigen Delphi zu array of WideChar wird. Statisches Array, daher auch ohne Speicherreservierung. Wichtig wäre aber noch, das Array zu nullen, bevor man damit arbeitet.

Grüße
Dalai
Ja da verliere ich oft den Überblick, Danke nochmal für Info
Gruß vom KodeZwerg
Wenn ein unerwarteter Fehler aufgetreten ist, frage ich mich immer, welche Fehler erwartet wurden...
  Mit Zitat antworten Zitat
Schokohase

Registriert seit: 17. Apr 2018
901 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#8

AW: ProcessList stürzt ab nach kurzer zeit 64Bit

  Alt 23. Aug 2018, 19:28
Kleiner Hinweis:

Schaut mal was Delphi-Referenz durchsuchenSystem.SysUtils.RaiseLastOsError macht.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: ProcessList stürzt ab nach kurzer zeit 64Bit

  Alt 23. Aug 2018, 19:35
Kleiner Hinweis:

Schaut mal was Delphi-Referenz durchsuchenSystem.SysUtils.RaiseLastOsError macht.
yep.. habe es geändert

gruss
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 06:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf