Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi 32bit Service auf 64bit Platform (https://www.delphipraxis.net/155436-32bit-service-auf-64bit-platform.html)

Delphi-Laie 24. Okt 2010 15:41

AW: 32bit Service auf 64bit Platform
 
Für diese ausführliche und m.E. auch plausible Antwortmühe gibt es von mir ganz einfach nur ein dickes Dankeschön!

Delphi-Laie 23. Dez 2010 11:54

AW: 32bit Service auf 64bit Platform
 
Hallo Assarbad, entschuldige bitte, daß ich diese angestaubte Diskussion noch einmal aufwärme!

Zitat:

Zitat von Assarbad (Beitrag 1057551)
Zitat:

Zitat von Delphi-Laie (Beitrag 1057544)
Irgendetwas muß an diesen Prozessen anders sein (Ring 0?); ich nenne sie, wohl nicht ganz korrekt, Systemprozesse.

Sie laufen in der Service-Session (üblicherweise 0), welche ab Windows Vista strenger vom Rest des Systems abgetrennt ist. Außerdem laufen sie oft unter anderen Benutzerkonten.

Mir ist etwas erstaunliches aufgefallen: Um in Windows 7 64 Bit (vermutlich auch in anderen 64-Bit-Windows) Prozesse und Threads zu beenden oder deren Priorität zu verändern, benötige ich 64-Bit-Compilate (wofür, wenn man bei Pascal bleibt, z.Z. nur FPC bzw. Lazarus verfügbar sind). Doch jüngst nahm ich zu meiner Verblüffung wahr, daß der Proceßexplorer der Sysinternals, es ist ja ein 32-Bit-Programm, auch unter 64 Bit volle "Schlagkraft" besitzt. Meine einzige Erklärung: Es gibt Codeteile, die 64-Bit besitzen (über bedingte Compilierung in irgendeinem C/C++-Compiler? Ich vermute, daß die Sysinternals damit compiliert wurden).

Oder weißt Du auch hier genaueres?

Gruß

Delphi-Laie

Dezipaitor 23. Dez 2010 12:27

AW: 32bit Service auf 64bit Platform
 
Meist ist es so, dass der Programmierer etwas falsch macht, wenn da was nicht zu gehen scheint. Aber vllt. zeigst du mal, wie du es programmiert hast?

Der ProcessExplorer kommt als 32bit EXE auf die Platte, besitzt aber in der Ressource weitere Dateien, wie einen Treiber und eine 64bit Version, die dann mehr oder weniger transparent gestartet wird. Im ProcExp sieht man selbst, dass da zwei Prozesse gestartet werden und der letzte procexp64.exe heißt.

Delphi-Laie 23. Dez 2010 12:38

AW: 32bit Service auf 64bit Platform
 
Zitat:

Zitat von Dezipaitor (Beitrag 1070147)
Meist ist es so, dass der Programmierer etwas falsch macht, wenn da was nicht zu gehen scheint. Aber vllt. zeigst du mal, wie du es programmiert hast?

Der ProcessExplorer kommt als 32bit EXE auf die Platte, besitzt aber in der Ressource weitere Dateien, wie einen Treiber und eine 64bit Version, die dann mehr oder weniger transparent gestartet wird. Im ProcExp sieht man selbst, dass da zwei Prozesse gestartet werden und der letzte procexp64.exe heißt.

Danke, Dezipiator/Christian!

Ob ich etwas falsch mache? Nun, unter 32 Bit funktioniert alles tadellos, und zwar mit meinem Programm mit dem billigen Namen "Prozesse" (auch hier im Forum zu finden). Aber wenn beim Prozeßexplorer zusätzlich etwas "64-bittiges" gestartet wird, dann ist mir die Ursache schon klar. Ich werde es mal genauer recherchieren, was unter 64 Bit alles im Speicher auftaucht.

Gruß

Delphi-Laie

Assarbad 23. Dez 2010 23:13

AW: 32bit Service auf 64bit Platform
 
Mit vollen Rechten solltest du auch in der Lage sein 64bittige Prozesse abzuschießen. Allerdings wenn deine Methode des Abschusses ist, Code zu injizieren wird es nix, solange du eine DLL benutzt. Dann brauchst du mindestens eine 64bittige DLL.

Ansonsten hat Christian völlig recht. Der ProcExp benutzt mehrere EXE-Dateien (und SYS-Dateien) welche extrahiert werden. BinResTo, meine Funktion von vor ein paar Jahren bildet das nach, aber es gibt auch andere Varianten welche VCL-Klassen benutzen.

Delphi-Laie 24. Dez 2010 09:53

AW: 32bit Service auf 64bit Platform
 
Zitat:

Zitat von Dezipaitor (Beitrag 1070147)
Der ProcessExplorer kommt als 32bit EXE auf die Platte, besitzt aber in der Ressource weitere Dateien, wie einen Treiber und eine 64bit Version, die dann mehr oder weniger transparent gestartet wird. Im ProcExp sieht man selbst, dass da zwei Prozesse gestartet werden und der letzte procexp64.exe heißt.

Hallo Dezipaitor, leider sehe ich in keinem Prozeßanzeiger (Taskmanager, Prozeßexplorer, mein Programm „Prozesse“) einen 64-Bit-Ableger des Prozeßexplorers (unter Windows 7 64 Bit).


Hallo Assarbad, auch Dir vielen Dank!

Zitat:

Zitat von Assarbad (Beitrag 1070252)
Mit vollen Rechten solltest du auch in der Lage sein 64bittige Prozesse abzuschießen.

Volle Rechte verpasse ich dafür unter Windows 7 auch meinem Programm „Prozesse“ (32 Bit), so einfach ist es also nicht. Dennoch benötige ich eine 64-Bit-Version, um auch an die „Systemprozesse“ (wurde von Dir weiter oben korrekter spezifiziert) heranzukommen, deshalb meine Portierung zu Lazarus.

Zitat:

Zitat von Assarbad (Beitrag 1070252)
Allerdings wenn deine Methode des Abschusses ist, Code zu injizieren wird es nix, solange du eine DLL benutzt. Dann brauchst du mindestens eine 64bittige DLL.

Nein, das ist mir viel zu kompliziert (bin froh, daß ich die DLL-Injektion per Hook in einem anderen Programm hinbekam). Es sind einfache TerminateProcess, TerminateThread, SetPriorityClass und SetThreadPriority.

Zitat:

Zitat von Assarbad (Beitrag 1070252)
Der ProcExp benutzt mehrere EXE-Dateien (und SYS-Dateien) welche extrahiert werden. BinResTo, meine Funktion von vor ein paar Jahren bildet das nach, aber es gibt auch andere Varianten welche VCL-Klassen benutzen.

Dann kann er diese aber geschickt verstecken, denn, wie schon gesagt, es taucht nur eine Exe-Datei in den Prozeßlisten auf.

Schöne Weihnachten!

Edit: Kommando zurück. Nach dem Start des Prozeßexplorers (32 Bit) unter 64 Bit gebiert dieser anscheinend ein 64-Bit-Pendant, legt es auf der Platte ab und startet dieses.

Assarbad 24. Dez 2010 20:26

AW: 32bit Service auf 64bit Platform
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Delphi-Laie (Beitrag 1070286)
Hallo Dezipaitor, leider sehe ich in keinem Prozeßanzeiger (Taskmanager, Prozeßexplorer, mein Programm „Prozesse“) einen 64-Bit-Ableger des Prozeßexplorers (unter Windows 7 64 Bit).

Das kann eigentlich nur an mangelnden Rechten liegen. Siehe angehangenes Bild.

Zitat:

Zitat von Delphi-Laie (Beitrag 1070286)
Volle Rechte verpasse ich dafür unter Windows 7 auch meinem Programm „Prozesse“ (32 Bit), so einfach ist es also nicht. Dennoch benötige ich eine 64-Bit-Version, um auch an die „Systemprozesse“ (wurde von Dir weiter oben korrekter spezifiziert) heranzukommen, deshalb meine Portierung zu Lazarus.

Aktivierst du bspw. auch das Debug-Privileg?

Zitat:

Zitat von Delphi-Laie (Beitrag 1070286)
Dann kann er diese aber geschickt verstecken, denn, wie schon gesagt, es taucht nur eine Exe-Datei in den Prozeßlisten auf.

Wie gesagt, entweder ist es eine uralte oder brandneue Version die sich da anders verhält, oder irgendwas anderes stimmt nicht.

Zitat:

Zitat von Delphi-Laie (Beitrag 1070286)
Edit: Kommando zurück. Nach dem Start des Prozeßexplorers (32 Bit) unter 64 Bit gebiert dieser anscheinend ein 64-Bit-Pendant, legt es auf der Platte ab und startet dieses.

Eben. Siehe Anhang :zwinker:


Frohes Fest.

Delphi-Laie 24. Dez 2010 22:14

AW: 32bit Service auf 64bit Platform
 
Zitat:

Zitat von Assarbad (Beitrag 1070370)
Zitat:

Zitat von Delphi-Laie (Beitrag 1070286)
Hallo Dezipaitor, leider sehe ich in keinem Prozeßanzeiger (Taskmanager, Prozeßexplorer, mein Programm „Prozesse“) einen 64-Bit-Ableger des Prozeßexplorers (unter Windows 7 64 Bit).

Das kann eigentlich nur an mangelnden Rechten liegen. Siehe angehangenes Bild.

Jetzt klappt es auf einmal auf wundersame Weise bei mir auch mit dem Starten des untergeordneten Prozesses im Speicher. Die untergeordnete Exe-Datei wird (nur) dann gelöscht, wenn man den Prozeßexplorer korrekt beendet, also nicht abschießt. Ich schoß ihn wohl ab, und so wunderte ich mich, eine 64-Bit-Datei auf dem Datenträger zu haben.

Zitat:

Zitat von Assarbad (Beitrag 1070370)
Zitat:

Zitat von Delphi-Laie (Beitrag 1070286)
Volle Rechte verpasse ich dafür unter Windows 7 auch meinem Programm „Prozesse“ (32 Bit), so einfach ist es also nicht. Dennoch benötige ich eine 64-Bit-Version, um auch an die „Systemprozesse“ (wurde von Dir weiter oben korrekter spezifiziert) heranzukommen, deshalb meine Portierung zu Lazarus.

Aktivierst du bspw. auch das Debug-Privileg?

Ja!

Zitat:

Zitat von Assarbad (Beitrag 1070370)
Zitat:

Zitat von Delphi-Laie (Beitrag 1070286)
Dann kann er diese aber geschickt verstecken, denn, wie schon gesagt, es taucht nur eine Exe-Datei in den Prozeßlisten auf.

Wie gesagt, entweder ist es eine uralte oder brandneue Version die sich da anders verhält, oder irgendwas anderes stimmt nicht.

Nagelneu, nämlich die 14.01-Version. Davor zwei 11er- und noch eine 10er-Version.

Ich war eben nur irritiert, weil es schien, daß ein 32-Bit-Programm maximale bzw. maximal mögliche Rechte unter 64 Bit hatte. Dem ist wohl doch nicht so. Ich bin beruhigt.

Zitat:

Zitat von Assarbad (Beitrag 1070370)
Frohes Fest.

Danke, gleichfalls!


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:22 Uhr.
Seite 2 von 2     12   

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