Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Process_Terminate funktioniert nicht (https://www.delphipraxis.net/155954-process_terminate-funktioniert-nicht.html)

speedy 15. Nov 2010 22:48

AW: Process_Terminate funktioniert nicht
 
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, tlhelp32, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function GetProcessID(sProcName: String): Integer;     //ProzessID an Hand der exe-Datei ermitteln
var
  hProcSnap: THandle;
  pe32: TProcessEntry32;
begin
  result := -1;
  hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
  if hProcSnap = INVALID_HANDLE_VALUE then exit;
  pe32.dwSize := SizeOf(ProcessEntry32);
  { wenn es geklappt hat }
  if Process32First(hProcSnap, pe32) = true then
    { und los geht's: Prozess suchen}
    while Process32Next(hProcSnap, pe32) = true do
    begin
      if pos(sProcName, pe32.szExeFile) <> 0 then
        result := pe32.th32ProcessID;
    end;
end;


procedure KillProcess(dwProcID: DWORD);       // Prozess abschießen
var
  hProcess : Cardinal;
  dw      : DWORD;
begin
  { open the process and store the process-handle }
  hProcess := OpenProcess(SYNCHRONIZE or PROCESS_TERMINATE, False, dwProcID);
  { kill it }
  TerminateProcess(hProcess, 0);
  { TerminateProcess returns immediately, so wie have to verify the result via
    WaitForSingleObject }
  dw := WaitForSingleObject(hProcess, 5000);
  case dw of
    WAIT_TIMEOUT: exit;
    WAIT_FAILED: exit;
  end;
end;


procedure KillProcess2(const dwProcID, dwTimeOut: DWORD);
var
  hProcess, Size,
  WrittenBytes, TID,
  hThread, ExitCode: DWord;
  Memory: Pointer;
  procedure _injectedCode_ExitProcess(P: Pointer); stdcall;
  type
    TExitProcess = procedure(uExitCode: UINT); stdcall;
  begin
    TExitProcess(P)(0);
  end;
  procedure _injectedCode_End();
  asm
    ret
  end;

begin
  hProcess := OpenProcess( GENERIC_WRITE, False, dwProcID );
  if hProcess <> ERROR then
    try
      Size := DWord( @_injectedCode_End ) - DWord( @_injectedCode_ExitProcess );
      Memory := VirtualAllocEx( hProcess, NIL, Size, MEM_COMMIT, PAGE_EXECUTE_READWRITE );
      if Assigned( Memory ) then
        try
          WriteProcessMemory( hProcess, Memory, @_injectedCode_ExitProcess, Size, WrittenBytes );
          if WrittenBytes = Size then
          begin
            hThread := CreateRemoteThread( hProcess, NIL, 0, Memory, GetProcAddress( GetModuleHandle( 'kernel32.dll' ), 'ExitProcess' ),
              0, TID );
            if hThread <> ERROR then
              WaitForSingleObject( hThread, dwTimeOut );
          end;
        finally
          VirtualFreeEx( hProcess, Memory, Size, MEM_DECOMMIT );
        end;
    finally
      CloseHandle( hProcess );
    end;
end;


procedure TForm1.FormCreate(Sender: TObject);
var pid:integer;

begin
  //ggf. killprocess2 durch killprocess ersetzen um andere Methode zu probieren

  pid := getprocessid('metin2.bin');
  if pid <> -1 then killprocess2(pid,5000);

  pid := getprocessid('metin2client.bin');
  if pid <> -1 then killprocess2(pid,5000);

  pid := getprocessid('metin2.exe');
  if pid <> -1 then killprocess2(pid,5000);

end;

end.

Luckie 15. Nov 2010 22:59

AW: Process_Terminate funktioniert nicht
 
Also wenn du sowieso die Routine verlässt, egal, was passiert, dann kannst du diesen Code
Delphi-Quellcode:
  dw := WaitForSingleObject(hProcess, 5000);
  case dw of
    WAIT_TIMEOUT: exit;
    WAIT_FAILED: exit;
  end;
auch weglassen. Und was ist aus dem Rest von meinem Code geworden? Die Fehlerbhandlung habe ich da nicht zum Spaß implementiert. :roll:

speedy 15. Nov 2010 23:01

AW: Process_Terminate funktioniert nicht
 
Naja wenn das Programm versteckt im Hintergrund laufen soll, wäre ne Messagebox etwas auffällig ;)

Luckie 15. Nov 2010 23:04

AW: Process_Terminate funktioniert nicht
 
Die kann man ja später rausnehmen. Aber ist dir der Gedanke schon mal gekommen, dass die Fehlermeldungen auch dir helfen könnten?

speedy 15. Nov 2010 23:12

AW: Process_Terminate funktioniert nicht
 
Jetzt wo du's sagst :roll:

Assarbad 15. Nov 2010 23:13

AW: Process_Terminate funktioniert nicht
 
Ich habe es eben probiert. Folgender Code:

Delphi-Quellcode:
program killmetin2;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  TlHelp32,
  Windows;

function AdjustTokenPrivileges(TokenHandle: THandle; DisableAllPrivileges: BOOL;
  const NewState: TTokenPrivileges; BufferLength: DWORD;
  PreviousState: PTokenPrivileges; ReturnLength: PDWORD): BOOL; stdcall;
  external 'advapi32.dll' name 'AdjustTokenPrivileges';

function SetProcessPrivilege(const Enable: Boolean;
  const Privilege: string): Boolean;
const
  PrivAttrs: array [Boolean] of DWORD = (0, SE_PRIVILEGE_ENABLED);
var
  Token: THandle;
  TokenPriv: TTokenPrivileges;
begin
  Result := False;
  if (not OpenThreadToken(GetCurrentThread(), TOKEN_ADJUST_PRIVILEGES, True,
    Token)) then
    WriteLn('Could not open thread token');
    if (not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES,
      Token)) then
    begin
      WriteLn('Could not open process token');
      SetLastError(ERROR_INVALID_HANDLE);
      exit;
    end;
  WriteLn('Got token');
  TokenPriv.PrivilegeCount := 1;
  LookupPrivilegeValue(nil, PChar(Privilege), TokenPriv.Privileges[0].Luid);
  TokenPriv.Privileges[0].Attributes := PrivAttrs[Enable];
  Result := AdjustTokenPrivileges(Token, False, TokenPriv, SizeOf(TokenPriv), nil, nil);
  if(not Result) then
  begin
    WriteLn('Failed to set ', Privilege, ' privilege');
  end;
  CloseHandle(Token);
end;

function GetProcessID(sProcName: String): DWORD;
var
  hProcSnap: THandle;
  pe32: TProcessEntry32;
begin
  Result := 0;
  hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
  if hProcSnap <> INVALID_HANDLE_VALUE then
  begin
    try
      pe32.dwSize := SizeOf(ProcessEntry32);

      { wenn es geklappt hat }
      if Process32First(hProcSnap, pe32) = True then
        { und los geht's: Prozess suchen }
        while Process32Next(hProcSnap, pe32) = True do
        begin
          if pos(sProcName, pe32.szExeFile) <> 0 then
          begin
            Result := pe32.th32ProcessID;
            WriteLn('Found process as ID: ', Result);
            break;
          end;
        end;
    finally
      CloseHandle(hProcSnap);
    end;
  end
  else
  begin
    WriteLn('Failed to create snapshot');
  end;
end;

procedure KillProcess(dwProcID: DWORD);
var
  hProcess: THandle;
begin
  if(SetProcessPrivilege(True, 'SeDebugPrivilege')) then
  try
    hProcess := OpenProcess(PROCESS_TERMINATE, False, dwProcID);
    if(0 <> hProcess) then
    begin
      if(TerminateProcess(hProcess, 0)) then
        WriteLn('Terminated process')
      else
        WriteLn('Failed to terminate process, error ', GetLastError());
    end
    else
      WriteLn('Failed to open process handle, error ', GetLastError());
    CloseHandle(hProcess);
  finally
    SetProcessPrivilege(False, 'SeDebugPrivilege');
  end;
end;

begin
  try
     KillProcess(GetProcessID('metin2client.bin'));
     WriteLn('Press ENTER to quit');
     ReadLn;
  except
    //on E: Exception do
      //Writeln(E.ClassName, ': ', E.Message);
  end;
end.
Ich bekomme kein Prozeßhandle und GetLastError zeigt mir Fehler 5 (Zugriff verweigert). Da sind also 100% irgendwelche Hooks im Spiel die das verhindern.

Der Task Manager benutzt ja ein paar der nativen APIs und irgendeine TS-Funktion zum Killen von Prozessen, wenn ich mich recht erinnere.

Code:
Found process as ID: 3848
Could not open thread token
Got token
Failed to open process handle, error 5
Could not open thread token
Got token
Press ENTER to quit

speedy 15. Nov 2010 23:25

AW: Process_Terminate funktioniert nicht
 
Ja, wie vermutet.

Dann ist das Ganze wohl ziemlich aussichtlos.

Darf ich fragen wie lange du für das Programm gebraucht hast? Glaub ich wär da locker nen halben Tag dran gesessen ;)

Luckie 15. Nov 2010 23:28

AW: Process_Terminate funktioniert nicht
 
Das zeitaufwändigste war bei ihm wohl das Tippen. Probiere aus, wie lange du brauchst, um das abzutippen und du weißt, wie lange er ungefähr gebraucht hat. Den Copy- und Paste-Code kannst du vernachlässigen. ;)

speedy 15. Nov 2010 23:31

AW: Process_Terminate funktioniert nicht
 
Ja, wenn man mal mehr Zeit hätte den Kram vernünftig zu lernen :coder:

Luckie 15. Nov 2010 23:33

AW: Process_Terminate funktioniert nicht
 
Er hat auch alles durch Selbststudium gelernt. Studiert hat er irgend so ein Ökozeugs. ;)

Assarbad 15. Nov 2010 23:35

AW: Process_Terminate funktioniert nicht
 
Nö, habe mir das meiste zusammenkopiert, auch wenn die Fehler im kopierten Code teils haarsträubend waren und ich deswegen ein paar Korrekturen vornehmen mußte. Aber insgesamt vielleicht 30min mit mehreren Testläufen in einer VM.

Hatte echt keinen Bock den Code von Null an neu zu schreiben :zwinker:

Code:
GMER 1.0.15.15530 - http://www.gmer.net
Rootkit scan 2010-11-15 23:30:37
Windows 5.1.2600 Service Pack 3 
Running: dqhzz1me.exe; Driver: C:\DOCUME~1\User\LOCALS~1\Temp\agtdqpob.sys


---- System - GMER 1.0.15 ----

SSDT   \??\C:\WINDOWS\system32\Drivers\PROCMON20.SYS                     ZwClose [0xB20ED80E]
SSDT   \??\C:\WINDOWS\system32\Drivers\PROCMON20.SYS                     ZwCreateKey [0xB20ED604]
SSDT   \??\C:\WINDOWS\system32\Drivers\PROCMON20.SYS                     ZwDeleteKey [0xB20ED4AC]
SSDT   \??\C:\WINDOWS\system32\Drivers\PROCMON20.SYS                     ZwDeleteValueKey [0xB20ED4F2]
SSDT   \??\C:\WINDOWS\system32\Drivers\PROCMON20.SYS                     ZwEnumerateKey [0xB20ED3F2]
SSDT   \??\C:\WINDOWS\system32\Drivers\PROCMON20.SYS                     ZwEnumerateValueKey [0xB20ED34E]
SSDT   \??\C:\WINDOWS\system32\Drivers\PROCMON20.SYS                     ZwFlushKey [0xB20ED446]
SSDT   \??\C:\WINDOWS\system32\Drivers\PROCMON20.SYS                     ZwLoadKey [0xB20ED972]
SSDT   \??\C:\WINDOWS\system32\Drivers\PROCMON20.SYS                     ZwOpenKey [0xB20ED7D0]
SSDT   \??\C:\WINDOWS\system32\Drivers\PROCMON20.SYS                     ZwQueryKey [0xB20ED03E]
SSDT   \??\C:\WINDOWS\system32\Drivers\PROCMON20.SYS                     ZwQueryValueKey [0xB20ED166]
SSDT   \??\C:\WINDOWS\system32\Drivers\PROCMON20.SYS                     ZwSetValueKey [0xB20ED28A]
SSDT   \??\C:\WINDOWS\system32\Drivers\PROCMON20.SYS                     ZwUnloadKey [0xB20EDAC2]

---- Kernel code sections - GMER 1.0.15 ----

.text  ntkrnlpa.exe!KeUnstackDetachProcess + 186                          804F77F2 4 Bytes CALL B1D3C371 \??\C:\WINDOWS\system32\drivers\EagleNT.sys
PAGE   ntkrnlpa.exe!NtDeviceIoControlFile + 26                            8056E4E8 4 Bytes CALL B1D3C751 \??\C:\WINDOWS\system32\drivers\EagleNT.sys
PAGE   ntkrnlpa.exe!ZwWriteFileGather + 33D2                              80575CAA 4 Bytes CALL B1D3C951 \??\C:\WINDOWS\system32\drivers\EagleNT.sys
PAGE   ntkrnlpa.exe!ZwReadVirtualMemory + 8                               805A979C 4 Bytes CALL B1D3CC01 \??\C:\WINDOWS\system32\drivers\EagleNT.sys
PAGE   ntkrnlpa.exe!ZwWriteVirtualMemory + 8                              805A98A6 4 Bytes CALL B1D3CD51 \??\C:\WINDOWS\system32\drivers\EagleNT.sys
PAGE   ntkrnlpa.exe!NtClose + 19                                          805B1CE1 4 Bytes CALL B1D3C891 \??\C:\WINDOWS\system32\drivers\EagleNT.sys
PAGE   ntkrnlpa.exe!NtOpenProcess + B                                    805C132F 4 Bytes CALL B1D3C9A1 \??\C:\WINDOWS\system32\drivers\EagleNT.sys
PAGE   ntkrnlpa.exe!ZwSetLdtEntries + ECA                                805CAAC4 4 Bytes CALL B1D3CEA1 \??\C:\WINDOWS\system32\drivers\EagleNT.sys
?       C:\WINDOWS\system32\Drivers\PROCMON20.SYS                         The system cannot find the file specified. !
?       C:\WINDOWS\system32\Drivers\PROCEXP141.SYS                        The system cannot find the file specified. !
?       C:\WINDOWS\system32\drivers\EagleNT.sys                           The system cannot find the file specified. !

---- User code sections - GMER 1.0.15 ----

.text  C:\WINDOWS\system32\SearchIndexer.exe[544] kernel32.dll!WriteFile 7C810E27 7 Bytes JMP 00585C0C C:\WINDOWS\system32\MSSRCH.DLL (mssrch.dll/Microsoft Corporation)

---- Devices - GMER 1.0.15 ----

Device \Driver\Kbdclass \Device\KeyboardClass0                            EagleNT.sys
Device \Driver\Kbdclass \Device\KeyboardClass1                            EagleNT.sys
Device \Driver\Mouclass \Device\PointerClass0                             EagleNT.sys
Device \Driver\Mouclass \Device\PointerClass1                             EagleNT.sys

---- EOF - GMER 1.0.15 ----
Wie man sieht benutzt das Ding Hooks direkt im Kernelimage (all mit PAGE beginnenden Zeilen) sowie irgendwas auf den Maus- und den Tastaturgeräten. Damit läßt es sich als Rootkit einordnen.

Code:
PAGE   ntkrnlpa.exe!NtOpenProcess + B  805C132F 4 Bytes
... ist das eigentliche Problem

Zitat:

Zitat von Luckie (Beitrag 1061801)
Er hat auch alles durch Selbststudium gelernt. Studiert hat er irgend so ein Ökozeugs. ;)

... und er hat abgebrochen als er von einem Anti-Spyware-Hersteller angeheuert wurde und ist danach zu einem AV-Hersteller gewechselt.

speedy 15. Nov 2010 23:38

AW: Process_Terminate funktioniert nicht
 
Bei mir ist das Studium zwar was Technisches, aber Programmierung haben wir lediglich mal C hauptsächlich für Mikrocontroller.

Und Delphi Literatur ist auch sehr dürftig in der Uni Bibliothek ;)

Luckie 15. Nov 2010 23:39

AW: Process_Terminate funktioniert nicht
 
Ich hoffe, in meinem Code waren keine haarsträubenden Fehler. Ansonsten hätte mein Lehrmeister versagt. ;)

Assarbad 15. Nov 2010 23:43

AW: Process_Terminate funktioniert nicht
 
Zitat:

Zitat von speedy (Beitrag 1061803)
Bei mir ist das Studium zwar was Technisches, aber Programmierung haben wir lediglich mal C hauptsächlich für Mikrocontroller.

Und Delphi Literatur ist auch sehr dürftig in der Uni Bibliothek ;)

Alles nicht so tolle Ausreden. Delphi-Literatur war meines Erachtens nach zu keinem Zeitpunkt (seit 1997) gut. Aber sich mit Win32 auseinanderzusetzen bedarf es nicht Delphis :zwinker:

Abgesehen davon ist die beste Methode - ohne Spott und Hohn gemeint - die Dokumentation und anderen Code zu lesen. Ich sage nicht, daß man nicht fragen soll. Aber vorher sollte man schon mal nen Tag oder länger investieren um es selber zu lösen.

Programmieren habe ich komplett autodidaktisch erlernt, unmöglich ist es also nicht.

Zitat:

Zitat von Luckie (Beitrag 1061804)
Ich hoffe, in meinem Code waren keine haarsträubenden Fehler. Ansonsten hätte mein Lehrmeister versagt. ;)

Nico? :stupid:

Puh, war da welcher von dir dabei? Habe den aus dem verlinkten Beitrag genommen und durchredigiert und dann noch von hier. Bei letzterem war vor allem wichtig zuerst das Threadtoken zu versuchen und danach das Prozeßtoken (was im Original nicht drin war).

himitsu 15. Nov 2010 23:44

AW: Process_Terminate funktioniert nicht
 
Wenn nun schon alles Wichtige installiert und eingerichtet ist, dann über einen anderen Admin-Account (notfalls einen erstellen) den Account des Jungen runterstufen und so das installieren von Programmen verbieten.

PS: Wenn er soooo süchtig ist ... wie lange wird es dann wohl dauern, bis er den neuen Prozess findet und abschießt, welcher ihn ständig am Spielen hindert?

Es gibt auch andere Möglichkeiten die Nutzung wärend der Nacht zu verbieten.
Gibt ja genügend Programme, welche den PC mit einer Zeitschaltuhr versehen.



Und egal was man macht, man muß ihm doch wohl auf jeden Fall die Rechte entziehen, welche es ihm erlauben würden Gegenmaßnahmen zu ergreifen.

Notfalls einfach in der Nacht die Internetleitung oder den Strom kappen.
Ohne Netz kein Onlinegame. :lol:

Assarbad 15. Nov 2010 23:46

AW: Process_Terminate funktioniert nicht
 
Ha, himitsu du bist ein Schatz!

Ich hätte da noch eine Methode anzubieten. Man könnte, da es sich ja um Windows XP handelt die GINA ersetzen. Irgendwann in der Nacht sperrt das Ding dann den Desktop zeitgesteuert und läßt sich bis zum Morgen nicht entsperren ;)

Das Schlimmste was dann passieren kann, ist daß der Charakter im Spiel stirbt :lol:

Luckie 15. Nov 2010 23:47

AW: Process_Terminate funktioniert nicht
 
Das ursprüngliche KillProzess ist von mir (Verlinkt im erste Beitrag.).

Äh, sorry, es waren zwei Lehrmeister. :stupid:

Luckie 15. Nov 2010 23:51

AW: Process_Terminate funktioniert nicht
 
Ich glaube, das hatte ich schon auf der ersten >Seite vorgeschlagen, Man kann über die Sicherheitsrichtlinien festlegen zu welchen Uhrzeit und wie lange ein Benutzer sich anmelden kann. Natürlich macht das kein Sinn bei einem Adminstratorenkonto.

Assarbad 15. Nov 2010 23:53

AW: Process_Terminate funktioniert nicht
 
Zitat:

Zitat von Luckie (Beitrag 1061808)
Das ursprüngliche KillProzess ist von mir (Verlinkt im erste Beitrag.).

Oh Gott. Wie soll ich's ausdrücken? :zwinker:

Zumindest der zitierte Ausschnitt war Mist, da bspw. das Handle vom Schnappschuß nicht geschlossen wurde und dafür in der anderen Funktion das Handle auftauchte ohne deklariert oder gebraucht zu werden. K.A. wie das so durcheinanderkam. Habe jedenfalls den Code von dort genommen und dann korrigiert. War natürlich auch nicht soooo viel. Aber funktionstüchtig war er nicht out-of-the-box ;)

Zitat:

Zitat von Luckie (Beitrag 1061808)
Äh, sorry, es waren zwei Lehrmeister. :stupid:

Hmm, na dann weiß ich auch nicht :stupid:

Luckie 15. Nov 2010 23:56

AW: Process_Terminate funktioniert nicht
 
Gilt die Ausrede Jugendsünde? ;) Ich glaube, ich schreibe den Code noch mal neu. Das kann ich nicht auf mir sitzen lassen. Das verbietet mir die Ähre.

Bummi 15. Nov 2010 23:57

AW: Process_Terminate funktioniert nicht
 
[völlig OT Verschwörungstheorie]
da hat es der Knabe doch geschafft ein Forum total aufzumischen ...
[/völlig OT Verschwörungstheorie]

Assarbad 15. Nov 2010 23:59

AW: Process_Terminate funktioniert nicht
 
Zitat:

Zitat von Luckie (Beitrag 1061812)
Gilt die Ausrede Jugendsünde? ;)

Kloar. Mußt bloß auf meiner Seite gucken :lol: ... Jugendsünden überall.

Zitat:

Zitat von Luckie (Beitrag 1061812)
Das verbietet mir die Ähre.

Roggen, Weizen oder Gerste? :stupid:

Zitat:

Zitat von Bummi (Beitrag 1061813)
[völlig OT Verschwörungstheorie]
da hat es der Knabe doch geschafft ein Forum total aufzumischen ...
[/völlig OT Verschwörungstheorie]

Knabe? Ich? Huh, danke für das Kompliment. Fühle mich gleich wieder zehn Jahre jünger :love:

speedy 16. Nov 2010 00:01

AW: Process_Terminate funktioniert nicht
 
Zitat:

Zitat von Bummi (Beitrag 1061813)
[völlig OT Verschwörungstheorie]
da hat es der Knabe doch geschafft ein Forum total aufzumischen ...
[/völlig OT Verschwörungstheorie]

Der Zocksüchtige oder ich? :lol:

Finde die Resonanz auf dieses Thema auch faszinierend :)

Assarbad 16. Nov 2010 00:02

AW: Process_Terminate funktioniert nicht
 
Luckie, im Zweifelsfall: "Das ist nicht mein Code. Ich mache nur die Fehler raus." :zwinker:

speedy 16. Nov 2010 23:03

AW: Process_Terminate funktioniert nicht
 
So hab den Rechner von dem Jungen jetzt erst mal hier um das System neu aufzusetzen...

In Absprache mit der Mutter darf er sein Spiel vorerst mal behalten, soll aber halt nen eingeschränkten User-Account mit ner Zeitbeschränkung von 2 Std. täglich bekommen. Mal sehen was die Windows Bordmittel so hergeben....

Ich seh das aber schon voraus, dass er exakt die 2 Std. mit zocken verbringen wird und dann keine Zeit mehr für evtl. schulische Aufgaben am Rechner hat :roll:
Eine Lösung das es eine zusätzliche Zeitbeschränkung für ne bestimmte Anwendung gibt wäre da nicht schlecht.

pustekuchen 17. Nov 2010 08:38

AW: Process_Terminate funktioniert nicht
 
Zitat:

Zitat von speedy (Beitrag 1062076)
Ich seh das aber schon voraus, dass er exakt die 2 Std. mit zocken verbringen wird und dann keine Zeit mehr für evtl. schulische Aufgaben am Rechner hat :roll:
Eine Lösung das es eine zusätzliche Zeitbeschränkung für ne bestimmte Anwendung gibt wäre da nicht schlecht.

Rechner an -> Spiel an - > 2 Std zocken, da das Spiel eh nicht beendet werden kann :D Ich glaube da bringt eine zusätzliche Zeitbeschränkung auch nichts.
Desweiteren könnte der Account wegen umgehens des Hackshields gebannt werden .(mleyen)

Assarbad 17. Nov 2010 10:59

AW: Process_Terminate funktioniert nicht
 
Zitat:

Zitat von pustekuchen (Beitrag 1062117)
Rechner an -> Spiel an - > 2 Std zocken, da das Spiel eh nicht beendet werden kann :D

Beendet werden kann es ja. Nur eben beim programmatischen Schließen klappt es irgendwie nicht.

pustekuchen 17. Nov 2010 13:01

AW: Process_Terminate funktioniert nicht
 
Ja hab mich ungenau ausgedrückt ;)
Ich meine natürlich damit, das man es Programmtechnisch nicht schließen kann.
Der kleine würde es selbst nicht einfach so beenden.
Und das würde halt kein effekt haben.

Was aber vielleicht ein weitere Lösungsansatz wäre, den Start/Endzeitpunkt zu protokollieren und wenn er das nächste mal spielen möchte muss er je nach Spielzeit eine Pause einlegen.

Bsp. Er darf jeden Tag 2 Std. spielen. Er spielt jedoch Montags 4 Std.. Also darf er erst wieder Mittwoch, das Spiel starten. Da er die Spielzeit überschritten hat.

Das ganze könnte man natürlich jetzt ein wenig genauer definieren, ist nur so eine Idee.
Btw: Wird Metin auch über einen Launcher gestartet? Wenn ja, ist dort HackShield schon aktiviert?(Ich gehe nicht davon aus)

mleyen 17. Nov 2010 14:33

AW: Process_Terminate funktioniert nicht
 
Zitat:

Zitat von pustekuchen (Beitrag 1062173)
Wenn ja, ist dort HackShield schon aktiviert?(Ich gehe nicht davon aus)

Mir ist das zwar eine(/zwei..?) Ebene(n) zu tief, aber der ist doch schon sozusagen durch die Kernelhooks mit dem OS verschmolzen und dauerhaft aktiv.
Also darauf würde ich nicht wetten.

pustekuchen 17. Nov 2010 14:47

AW: Process_Terminate funktioniert nicht
 
Aus anderen Onlinespielen kenn ich es nur das der Anti-Cheat Schutz erst nach dem Laucher, also nach dem Spieleupdate und dem Klick auf "Spiel starten", gestartet wird und dann auch erst eingreift.

blablab 18. Nov 2010 00:27

AW: Process_Terminate funktioniert nicht
 
Du könntest ihm ja zwei Benutzeraccounts einrichten. Beim 1. hat er Zugriffsrechte auf das Spiel und er hat ne Zeitbegrenzung von 2h und beim zweiten hat er kein Zugriffsrecht auf das Spiel und kann dann z.B 4h oder unbegrenzt an den PC.
Dann muss er sich halt jedesmal ummelden, aber ich denk mal das wird er verkraften...

Assarbad 18. Nov 2010 02:12

AW: Process_Terminate funktioniert nicht
 
Zitat:

Zitat von blablab (Beitrag 1062249)
Du könntest ihm ja zwei Benutzeraccounts einrichten. Beim 1. hat er Zugriffsrechte auf das Spiel und er hat ne Zeitbegrenzung von 2h und beim zweiten hat er kein Zugriffsrecht auf das Spiel und kann dann z.B 4h oder unbegrenzt an den PC.
Dann muss er sich halt jedesmal ummelden, aber ich denk mal das wird er verkraften...

Ziemlich gute Idee eigentlich.

Mir fiel übrigens noch ein, daß man auch noch WMI probieren könnte für das Beenden (ließe sich dann ggf. sogar skripten) - und zwar mit MSDN-Library durchsuchenWin32_Process (Funktion: Terminate). Nur mal so. Einen Versuch wäre es sicher wert.

speedy 18. Nov 2010 16:25

AW: Process_Terminate funktioniert nicht
 
Ja kann man mal probieren, wenn's mir langweilig ist ;)

Vorerst gibts ne Lösung mit eingeschränktem Benutzer-Account. Ist dann nur noch die Frage ob sich das Spiel ohne Admin-Rechte überhaupt starten lässt.
Werd ich am Wochenende mal ausprobieren...

speedy 29. Nov 2010 19:37

AW: Process_Terminate funktioniert nicht
 
So mal ein paar News:

Rechner wurde mit 2 normalen Benutzeraccounts eingerichet. Einer zum Arbeiten und einer zum Zocken. Da es scheinbar nur kostenpflichtige oder untaugliche Lösungen (Parents-Friend) gibt, hab ich zur Zeitüberwachung auf dem Zock-Account mal eben ein Programm geschrieben das über den Autostart gestartet wird und nach der eingestellten Zeit den Account automatisch abmeldet. Beim Versuch sich am gleichen Account wieder anzumelden wird dieser sofort wieder abgemeldet, bis zum nächsten Tag halt.

Jetzt hab ich aber ein neues Problem: Die Routine zum Account abmelden hab ich (zum Glück) in ein extra Programm gepackt, das über die Zeitüberwachung aufgerufen wird:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.ShowMainForm := false;
  ExitWindowsEx (EWX_LOGOFF, $FFFFFFFF);
  Application.Terminate;
end;
Jetzt hat mit der Zocker vorhin erzählt, dass ihn die eingeschränkte Zeit nervt :stupid:, aber sich gleich noch verplappert, dass vor dem abmelden manchmal (wohl nicht immer) die Meldung kommt "Soll auf Beendigung von Programm xyz gewartet oder dieses sofort geschlossen werden" (keine Ahnung wie der genaue Wortlaut ist)... An dieser Stelle scheint er dann den Abmeldeprozess durch "drücken auf irgend ein X" abbrechen zu können.

Gibts da denn ne Möglichkeit Windows zu überreden diese Meldung nicht zu bringen und sich einfach ohne Rückfragen abzumelden?

toms 29. Nov 2010 19:42

AW: Process_Terminate funktioniert nicht
 
ExitWindowsEx unterstützt Parameter.

http://msdn.microsoft.com/en-us/libr...68(VS.85).aspx

Luckie 29. Nov 2010 19:45

AW: Process_Terminate funktioniert nicht
 
Wenn du kein Fenster brauchst, warum erstellst du dann eine Formularanwendung? Nimm eine Konsolenanwendung und entferne das
Delphi-Quellcode:
{$APPTYPE CONSOLE}
, dann hast du auch keine Konsole. Und warum schießt du deine eigene Anwendnung ab? Ein Close hätte es auch getan.

Zu deinem Problem: Wo für steht bei ExitWindowsEx das $FFFFF? Und das funktioniert so, ohne das dafür nötige Privileg zu aktivieren? Um was für ein Betriebssystem handelt es sich?

Und warum frickelst du an einer eigenen, unsichern Lösung rum und verwendest nicht Windows Boardmittel, wie ich es schon mehrfach gesagt habe: http://forum.chip.de/windows-xp/wind...en-669232.html (Beitrag #7).

speedy 29. Nov 2010 20:06

AW: Process_Terminate funktioniert nicht
 
Ok mit dem Close und Konsolenanwendung ist was dran. ;)

Wofür das mit $FFFF... hab ich von hier: http://www.delphi-library.de/topic_W...en_8272,0.html

Ist Windows XP, aber das Privileg scheint man laut der Seite nur unter NT zu brauchen. Hat auf jeden Fall auf Anhieb funktioniert.

Zum Thema Windows Bordmittel: Diese scheinen auch nach längerer Suche keine Funktion zu haben um den Zugang so einzuschränken wie es erfolgen soll. Man kann in XP wohl zwar wunderbar festlegen, dass man sich z.B. nur zwischen 14 und 17 Uhr einloggen darf. Das bringt mir aber nichts, wenn z.B. eine Beschränkung auf 2 Std. täglich erfolgen soll unabhängig von der Uhrzeit.

Wollte ja eigentlich nichts eigenes erstellen und hab mal das kostenlose Parents-Friend ausprobiert. Abgesehen davon, dass es mehrere Anleitungen im Netz gibt wie sich das Teil in kürzester Zeit deaktivieren lässt, schafft es auch dieses Programm nicht die entsprechenden Spiele zu blockieren. Hab stundenlang mit Parents Friend rumprobiert und ausser ein paar Abstürzen von dem Programm konnte man damit nichts erreichen...

Luckie 29. Nov 2010 20:10

AW: Process_Terminate funktioniert nicht
 
Zitat:

Zitat von speedy (Beitrag 1064893)
Ist Windows XP, aber das Privileg scheint man laut der Seite nur unter NT zu brauchen. Hat auf jeden Fall auf Anhieb funktioniert.

Das kann nicht sein. Windowx XP gehört auch zur Windows NT Familie.

speedy 29. Nov 2010 20:12

AW: Process_Terminate funktioniert nicht
 
Nuja auf dem XP Rechner hats das aber getan.

Ausgeführt... Benutzer wird abgemeldet... passt ;)

speedy 29. Nov 2010 20:14

AW: Process_Terminate funktioniert nicht
 
Ergänzung:

Habs eben auch bei mir unter Win7 x64 Professional unter Admin Account probiert und funktioniert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:53 Uhr.
Seite 2 von 3     12 3      

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