AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dienste und PID?

Ein Thema von Mattze · begonnen am 31. Jul 2015 · letzter Beitrag vom 4. Aug 2015
Antwort Antwort
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#1

AW: Dienste und PID?

  Alt 3. Aug 2015, 08:29
Hallo Zacherl,

im Grunde gießt Du Wasser auf meine Rumreitermühlen.
Du betonst zwar "laufende Prozesse", aber...
Da Windows die Dienste ja auch mal startet, muss es doch auch ohne PID wissen, wo die wirklich sind.
(Bei Prozessen muss Windows ja auch vor dem Start - also auch ohne PID - wissen, wo er sie herholen soll.)
Und, z. Bsp., das will ich eben auch wissen.
Ob das undokumentiert ist?

Übrigens WMI mit W32_SystemServices gibt (im 64er System?) auch den "falschen" Pfad aus!
Für cdrom.sys als auch C:\Windows\system32\drivers.

Gruß
Mattze
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: Dienste und PID?

  Alt 3. Aug 2015, 17:41
Ja klar, die Prozesspfade hat das System selbstverständlich. Ich werde das gleich selbst mal testen. Bei mir zumindest liegt die cdrom.sys allerdings an genau der genannten Stelle (C:\Windows\system32\drivers\cdrom.sys).

Mein nicht optimierter, auf die Schnelle zusammengeschusterter Testcode:
Delphi-Quellcode:
procedure PrintServicePaths(IncludeDrivers, IncludeInactive: Boolean);
type
  ENUM_SERVICE_STATUSW = record
    lpServiceName: LPWSTR;
    lpDisplayName: LPWSTR;
    ServiceStatus: SERVICE_STATUS_PROCESS;
  end;
  PENUM_SERVICE_STATUSW = ^ENUM_SERVICE_STATUSW;
var
  SvcMgr,
  Svc: SC_HANDLE;
  SvcType,
  SvcState,
  SizeNeeded,
  ServiceCount: DWord;
  Services,
  Service: PENUM_SERVICE_STATUSW;
  I: Integer;
  Config: PQueryServiceConfigW;
begin
  SvcMgr :=
    OpenSCManager(nil, nil, SC_MANAGER_CONNECT or SC_MANAGER_ENUMERATE_SERVICE);
  if (SvcMgr <> 0) then
  try
    SvcType := SERVICE_WIN32;
    if (IncludeDrivers) then
    begin
      SvcType := SERVICE_WIN32 or SERVICE_DRIVER;
    end;
    SvcState := SERVICE_ACTIVE;
    if (IncludeInactive) then
    begin
      SvcState := SERVICE_STATE_ALL;
    end;
    if not EnumServicesStatusExW(SvcMgr, SC_ENUM_PROCESS_INFO, SvcType,
      SvcState, nil, 0, @SizeNeeded, @ServiceCount, nil, nil) then
    begin
      if (GetLastError <> ERROR_MORE_DATA) then
      begin
        RaiseLastOsError;
      end;
    end;
    GetMem(Services, SizeNeeded);
    try
      if not EnumServicesStatusExW(SvcMgr, SC_ENUM_PROCESS_INFO, SvcType,
        SvcState, PByte(Services), SizeNeeded, @SizeNeeded, @ServiceCount,
        nil, nil) then
      begin
        RaiseLastOsError;
      end;
      Service := Services;
      for I := 0 to ServiceCount - 1 do
      begin
        WriteLn(Format('[%4d] %s', [Service^.ServiceStatus.dwProcessId,
          Service^.lpServiceName]));
        Svc :=
          OpenService(SvcMgr, Service^.lpServiceName, SERVICE_QUERY_CONFIG);
        if (Svc <> 0) then
        try
          if not QueryServiceConfig(Svc, nil, 0, SizeNeeded) then
          begin
            if (GetLastError <> ERROR_INSUFFICIENT_BUFFER) then
            begin
              RaiseLastOsError;
            end;
          end;
          GetMem(Config, SizeNeeded);
          try
            if not QueryServiceConfig(Svc, Config, SizeNeeded, SizeNeeded) then
            begin
              RaiseLastOsError;
            end;
            WriteLn(' Path: ' + Config^.lpBinaryPathName);
          finally
            FreeMem(Config);
          end;
        finally
          CloseServiceHandle(Svc);
        end else RaiseLastOsError;
        Inc(Service);
      end;
    finally
      FreeMem(Services);
    end;
  finally
    CloseServiceHandle(SvcMgr);
  end else RaiseLastOsError;
end;
Erhalte für laufende Prozess wie erwartet eine PID, für Treiber und inaktive Prozesse 0. Die Pfade habe ich stichprobenartig überprüft und die stimmen auch soweit.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl ( 3. Aug 2015 um 18:25 Uhr)
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#3

AW: Dienste und PID?

  Alt 3. Aug 2015, 19:22
Hallo Zacherl,

toll! Vielen Dank! Das werde ich morgen gleich mal ausprobieren.

Mit der cdrom.sys ist ja komisch.
Bei meinem Win 7 pro 64 ist der drivers-Ordner (C:\Windows\System32\drivers) fast leer.
Da liegen ganze 4 Sachen drin und eine davon ist noch eine Readme.txt (Was hat die da zu suchen?).

Gruß
Mattze
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.683 Beiträge
 
Delphi 5 Professional
 
#4

AW: Dienste und PID?

  Alt 3. Aug 2015, 19:40
Kann es sein, dass du im falschen Verzeichnis schaust, weil du %SystemRoot%\system32 mit %SystemRoot%\Sysnative bzw. %SystemRoot%\SysWow64 verwechselst? Siehe Wow64.

MfG Dalai
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#5

AW: Dienste und PID?

  Alt 4. Aug 2015, 08:24
Hallo Dalai,

nein, das ist es nicht.
Ich weiß inzwischen, was es ist und muss mich da vor allen Dingen bei Zacherl sehr entschuldigen.
Die 1. Hälfte ist mir sehr peinlich, die 2. Hälfte beruhigt mich aber und die 3. Hälfte (!!!) stellt gleich die Frage, wieso das so ist.

Ich benutze seid vielen Jahren meinen eigenen Ersatz-Explorer (EE). Soweit ich mich erinnere, gab es damit noch nie Probleme.
Nun bin ich aber durch Zacherls Hinweis, dass bei ihm alles da ist, misstrauisch geworden und habe heute Nacht mal den Window Explorer (WE) gestartet. Alles da unter drivers!!!
Ich habe nun auch andere EEs probiert - das gleiche Problem!
Es scheint ein 2*32Bit-Problem zu sein!!!
Die ausprobierten EEs sind auch 32Bit breit und können es alle nicht.
64Bit EEs habe ich zwar noch nicht probiert, aber da bin ich sicher, dass es kein Problem ist.

Ich kann mir allerdings nicht vorstellen, was da sooo unterschiedlich ist und was man dagegen machen könnte.
Vielleicht hat ja jemand eine Idee!

Gruß
Mattze
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

AW: Dienste und PID?

  Alt 4. Aug 2015, 08:52
Ich kann mir allerdings nicht vorstellen, was da sooo unterschiedlich ist und was man dagegen machen könnte.
Vielleicht hat ja jemand eine Idee!
Dalai hat schon das richtige Stichwort gegeben Wenn du in deinem 32 Bit Ersatzexplorer in das C:\Windows\System32 Verzeichnis navigierst, landest du in Wirklichkeit (vollkommen transparent) aber in C:\Windows\SysWow64.
Das System lenkt Zugriffe von 32 Bit Prozessen auf den System32 Ordner automatisch nach SysWow64 um, damit Dlls und andere Resourcen ohne viel Aufwand vom Programm geladen werden können. System32 und SysWow64 enthalten zum Großteil die selben Dateien, nur dass in System32 alles für 64 Bit - und im SysWow64 alles für 32 Bit kompiliert ist. Bei den Treibern macht es keinen Sinn eine 32 Bit Version beizulegen, da der Kernel sowieso nur 64 bit Kompilate laden kann.

In deinem eigenen Programm kannst du dieses Verhalten über die MSDN-Library durchsuchenWow64DisableWow64FsRedirection API deaktivieren (nur für den aufrufenden Thread, wenn ich mich recht erinnere).
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#7

AW: Dienste und PID?

  Alt 4. Aug 2015, 12:35
Hallo Zacherl,

vielen Dank für den Tipp. Nun muss ich bloß noch rauskriegen, wo ich das Disablen und Enablen am besten einbaue. (Bisher habe ich es noch nicht hinbekommen...)

Das kommt davon, wenn man zu lange auf ausgetretenen Pfaden (32Bit) bleibt und der Zug schon kräftig weitergefahren ist (64Bit).

Nun ja, aber 900,-€ für XE2 pro ist natürlich eine Stange Geld und die Starter macht auch keine 64Bit. (Außerdem wäre das so oder so für mich zu wenig!)

Gruß
Mattze
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:29 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