AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Eigener Dienst -> Speicherauslastung wächst und wächst...
Thema durchsuchen
Ansicht
Themen-Optionen

Eigener Dienst -> Speicherauslastung wächst und wächst...

Ein Thema von cherry · begonnen am 14. Apr 2008 · letzter Beitrag vom 7. Mai 2008
Antwort Antwort
Seite 4 von 5   « Erste     234 5      
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#31

Re: Eigener Dienst -> Speicherauslastung wächst und wächs

  Alt 22. Apr 2008, 16:07
habs jetzt mal so...

Delphi-Quellcode:
function TSisterWatch.GetSession: string;
begin
  try
   Token := TJwSecurityToken.CreateWTSQueryUserToken(WtsGetActiveConsoleSessionID);
// Token := TJwSecurityToken.CreateCompatibilityQueryUserToken(MAXIMUM_ALLOWED, 'explorer.exe');
   Token.ImpersonateLoggedOnUser;
   //do stuff on user’s behalf
   Result := Token.GetTokenUserName;
  except
   Result := '';
  end;
  Token.RevertToSelf;
  Token.Free;
end;
--> Ohne wachsende Speicherauslastung

scheint aber "nur" als dienst (systemkonto) zu funktionieren!!! -> Habs zuerst als normales Programm getestet... ist das normal?
muss jetzt leider gleich weg... versuche morgen noch mit der Ex Version.... bei der Ex Version muss man noch nen Terminalserver angeben als Parameter, geht das also auch Remote? nehm ich an...
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#32

Re: Eigener Dienst -> Speicherauslastung wächst und wächs

  Alt 22. Apr 2008, 16:18
1. ha das benötigt einen Dienst!
2. ImpersonateLoggedonuser ist hier nicht mehr nötig!
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#33

Re: Eigener Dienst -> Speicherauslastung wächst und wächs

  Alt 22. Apr 2008, 16:38
Hallo,

Delphi-Quellcode:
function GetCurrUserName: string;
var
  Size : DWORD;
begin
  Size := MAX_COMPUTERNAME_LENGTH + 1;
  SetLength(Result, Size);
  if GetUserName(PChar(Result), Size) then
    SetLength(Result, Size)
  else
    Result := '';
end;
das sieht nicht gut aus !


Delphi-Quellcode:
function GetCurrUserName: string;
var
  Size : DWORD;
  sUserName : String;
begin
  Result:= '';

  Size := MAX_COMPUTERNAME_LENGTH + 1;
  SetLength(sUserName, Size);
  if GetUserName(PChar(sUserName), Size) then Result:= sUserName;
end;

Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#34

Re: Eigener Dienst -> Speicherauslastung wächst und wächs

  Alt 23. Apr 2008, 08:29
also ich krieg das mit Ex nicht hin... Ich weiss nicht welche Parameter?!

CreateWTSQueryUserTokenEx

Token := TJwSecurityToken.CreateWTSQueryUserTokenEx(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION); Token := TJwSecurityToken.CreateWTSQueryUserTokenEx(WTS_CURRENT_SERVER_HANDLE, WtsGetActiveConsoleSessionID); geht aber beides nicht... ich denke es liegt am ersten Parameter Server:TObject

Zitat:
defines the Terminal Server where this function will be processed. Define be WTS_CURRENT_SERVER_HANDLE to use current server
wie muss ich das parametrisiseren? - Also ich kann den Code nichtmal kompillieren:

[Pascal Fehler] main.pas(371): E2250 Es gibt keine überladene Version von 'CreateWTSQueryUserTokenEx', die man mit diesen Argumenten aufrufen kann
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#35

Re: Eigener Dienst -> Speicherauslastung wächst und wächs

  Alt 23. Apr 2008, 09:48
Uh ja das ist mein Fehler. Im parallelen branch hab ich die Doku dazu schon angepasst. Nimm als erster parameter nil. Normal kommt da sonst TJwTerminalServer Objekt rein. Ich hab auch den Blog angepasst.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von Remko
Remko

Registriert seit: 10. Okt 2006
Ort: 's-Hertogenbosch, Die Niederlande
222 Beiträge
 
RAD-Studio 2010 Arc
 
#36

Re: Eigener Dienst -> Speicherauslastung wächst und wächs

  Alt 28. Apr 2008, 23:38
The leak seems to be in WTSAPI32.DLL and specifically in the function WTSQuerySessionInformation with information classes WTSInitialProgram and WTSApplicationName.
You can test by looking up this part of JwsclTerminalServer:
Delphi-Quellcode:
constructor TJwWTSSession.Create(const Owner: TJwWTSSessionList;
  const SessionId: TJwSessionId; const WinStationName: TJwString;
  const ConnectState: TWtsConnectStateClass);
and comment out these lines:
Delphi-Quellcode:
  FApplicationName := GetSessionInfoStr(WTSApplicationName);
  FInitialProgram := GetSessionInfoStr(WTSInitialProgram);
Windows Vista and XP seem to suffer, 2003 server seems to be ok.
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#37

Re: Eigener Dienst -> Speicherauslastung wächst und wächs

  Alt 29. Apr 2008, 07:26
ich habs jetzt mal so gemacht...

Delphi-Quellcode:
function TSisterWatch.GetSession: string;
begin
  try
   Token := TJwSecurityToken.CreateWTSQueryUserTokenEx(nil{or a TJwTerminalServer object}, WtsGetActiveConsoleSessionID);
   // Token.ImpersonateLoggedOnUser; <- Its not necessary
   //do stuff on user’s behalf
   Result := Token.GetTokenUserName;
  except
   Result := '';
  end;
  Token.RevertToSelf;
  Token.Free;
end;
1'000'000'000 Dank euch allen! Scheint prima zu funktionieren.
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#38

Re: Eigener Dienst -> Speicherauslastung wächst und wächs

  Alt 29. Apr 2008, 08:17
hehe... hab grad folgendes festgestellt...

(Ich überprüfe ja jede Sekunde einmal, ob der Benutzer gewechselt hat. mir der Funktion GeSession von oben...)

Wenn ich jetzt den Dienst auf einem Rechner laufen habe funktioniert das super. Melde ich mich jetzt aber remote an diesem Rechner an (RDP), wirft die die Funktion GetSession folgende Fehlermeldung :

Zitat:
An Exception of type EJwsclWinCallFailedException was raised.
(Data was given by programmer and can vary from actual source.)
Source method....: WinStationQueryUserToken
Source class.....: TJwSecurityToken
Source file......: JwsclToken.pas
Source line......: 0
GetLastError.....: 1008 ($3F0)
GetLastErrorMsg..: Es wurde versucht, auf ein Token zuzugreifen, das nicht vorhanden ist.


Message : A call to WTSQueryUserToken failed. Session ID: 4
Meine Fragen jetzt: Bei welchen anderen "sachen" kann das auch noch passieren? VNC? usw?
wie würdet ihr das behandeln? -> ich meine ich will ja herausfinden wann sich ein anderer Benutzer angemeldet hat und solange ich eine RDP session habe, ists je eh immer der gleiche Benutzer. Also nicht weiter tragisch, oder wie seht ihr das?
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Benutzerbild von Remko
Remko

Registriert seit: 10. Okt 2006
Ort: 's-Hertogenbosch, Die Niederlande
222 Beiträge
 
RAD-Studio 2010 Arc
 
#39

Re: Eigener Dienst -> Speicherauslastung wächst und wächs

  Alt 29. Apr 2008, 09:30
Only the system account is allowed to retreive the token (since it is the user's primary access token). So my question is are you retreiving the token as system or as user/administrator?

PS: see my post above, maybe you can revert to the original code?
  Mit Zitat antworten Zitat
Benutzerbild von Remko
Remko

Registriert seit: 10. Okt 2006
Ort: 's-Hertogenbosch, Die Niederlande
222 Beiträge
 
RAD-Studio 2010 Arc
 
#40

Re: Eigener Dienst -> Speicherauslastung wächst und wächs

  Alt 1. Mai 2008, 09:36
Zitat:
Ich überprüfe ja jede Sekunde einmal, ob der Benutzer gewechselt hat
I that case I advise to use WTSRegisterSessionNotification function which informs you about that (so you don't have to check this every second)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 5   « Erste     234 5      


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