64 Bit Prozess kann unter 64 Bit OS nicht abgefragt werden

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
3dhubiflieger
Beiträge: 123
Registriert: 27.10.2013 12:13

64 Bit Prozess kann unter 64 Bit OS nicht abgefragt werden

Beitrag von 3dhubiflieger »

Hallo, der Code unten funktioniert mit 32 bit Prozessen problemlos. Wenn ich allerdings die Prozedure bei einem 64 Bit Prozess benutzte, bekomme ich nix zurück, obwohl das Programm aktiv ist ?! Was läuft da schief ? Wie muss man das ganze abändern, damit der Code in 32 und 64 bit läuft ???


Code: Alles auswählen


Procedure Prozessaktiv(Aktivpfad$) 
 
  Protected Snapshot, Snapshot2, ProcessFound
  Protected Process.PROCESSENTRY32, Module.MODULEENTRY32
  
  Process\dwSize = SizeOf(PROCESSENTRY32)
  Module\dwSize  = SizeOf(MODULEENTRY32)
  
  
  Snapshot = CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS, 0)
  If Snapshot
    
    ProcessFound = Process32First_(Snapshot, Process)
    While ProcessFound
      
      Snapshot2 = CreateToolhelp32Snapshot_(#TH32CS_SNAPMODULE,Process\th32ProcessID)
      If Snapshot2 
        
        If Module32First_(Snapshot2, @Module)
         Pfad$ = UCase(PeekS(@Module\szExePath[0]))
          If Pfad$ = UCase(Aktivpfad$)
           CloseHandle_(Snapshot)
           CloseHandle_(Snapshot2)
           ProcedureReturn #True
          EndIf
        EndIf 
        
       EndIf
      ProcessFound = Process32Next_(Snapshot, Process)
    Wend
  
   
 EndIf
  CloseHandle_(Snapshot)
 ProcedureReturn #False
EndProcedure


Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: 64 Bit Prozess kann unter 64 Bit OS nicht abgefragt werd

Beitrag von bobobo »

Das Programm funktioniert doch prinzipiell.
Ich bekomme unter win7 64 bit mit pb32 allerdings eine andere und kürzere Liste als mit pb 64 bit.

Könnte es sein dass mit pb32 unter OS64bit nur 32bittige Prozesse angezeigt werden?

Code: Alles auswählen

Procedure Prozessaktiv(Aktivpfad$) 
 
  Protected Snapshot, Snapshot2, ProcessFound
  Protected Process.PROCESSENTRY32, Moodule.MODULEENTRY32
  
  Process\dwSize = SizeOf(PROCESSENTRY32)
  Moodule\dwSize  = SizeOf(MODULEENTRY32)
  
  
  Snapshot = CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS, 0)
  If Snapshot
    
    ProcessFound = Process32First_(Snapshot, Process)
    While ProcessFound
        
      Snapshot2 = CreateToolhelp32Snapshot_(#TH32CS_SNAPMODULE,Process\th32ProcessID)
      If Snapshot2 
       
        If Module32First_(Snapshot2, @Moodule)
          Pfad$ = UCase(PeekS(@Moodule\szExePath[0]))
          Debug Pfad$
         If Pfad$ = UCase(Aktivpfad$)
           Debug "plum" 
           CloseHandle_(Snapshot)
           CloseHandle_(Snapshot2)
           ProcedureReturn #True
          EndIf
        EndIf 
        
       EndIf
      ProcessFound = Process32Next_(Snapshot, Process)
    Wend
  
   
 EndIf
  CloseHandle_(Snapshot)
 ProcedureReturn #False
EndProcedure
Debug Prozessaktiv("isdochegal")
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: 64 Bit Prozess kann unter 64 Bit OS nicht abgefragt werd

Beitrag von ts-soft »

CreateToolhelp32Snapshot hat geschrieben:If the specified process is a 64-bit process and the caller is a 32-bit process, this function fails and the last error code is ERROR_PARTIAL_COPY (299).
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Übrigens, durch Copy & Paste lernt man nichts, es wäre vielleicht sinnvoll, selber mal nachzuschlagen,
was die API-Aufrufe bewirken.

Wenn man so einen ehemals schönen Code (alle Variable deklariert), erweitert, sollte man dies doch
beibehalten (Pfad$).

An die Mods und Admins: Dieser Beitrag gehört nicht nach Allgemein, sondern nach Windows.
Es besteht keine Chance diesen auf einem MacOS oder Linux zum laufen zu bringen :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
3dhubiflieger
Beiträge: 123
Registriert: 27.10.2013 12:13

Re: 64 Bit Prozess kann unter 64 Bit OS nicht abgefragt werd

Beitrag von 3dhubiflieger »

@bobobo

Ich bekomme unter win7 64 bit mit pb32 allerdings eine andere und kürzere Liste als mit pb 64 bit.
Könnte es sein dass mit pb32 unter OS64bit nur 32bittige Prozesse angezeigt werden?


Ja genau, das ist doch das Problem ! Ich will unter OS64 bit mit meinem 32 bit Programm einen 64 bit Prozess abfragen (Dolphin 64 bit). Leider geht das nicht, weil nur 32 bittige mit dem Code angezeigt werden ! Ich würde es gern allgemein lauffähig machen. Aber so wie es scheint muss ich meinen Code entweder in 64 oder 32 bit kompilieren ?! ..Oder ? Eigentlich gehts nur um diese eine Prozedur...Der Rest meines Programmes läuft unter 64 bit einwandfrei..

@tssoft

Ich habe mich schon in die Microsoftdokus eingearbeitet, verstehe es allerdings nicht ! Wie der Name der Variable ist, is doch wurscht ? Hauptsache die Definition, Zuordnung und der Typ stimmt ? Ach und der Code soll unter Windows laufen.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: 64 Bit Prozess kann unter 64 Bit OS nicht abgefragt werd

Beitrag von ts-soft »

3dhubiflieger hat geschrieben: @tssoft

Ich habe mich schon in die Microsoftdokus eingearbeitet, verstehe es allerdings nicht ! Wie der Name der Variable ist, is doch wurscht ? Hauptsache die Definition, Zuordnung und der Typ stimmt ? Ach und der Code soll unter Windows laufen.
Das Du auf MSDN nicht alles sofort verstehst, damit stehst Du nicht alleine. Aber den Hinweis, das 32-Bit Prozesse keine 64-Bit Prozesse erfassen können, hättest Du IMHO verstehen können :wink:

Es ging mir nicht um den Namen der Variablen, obwohl wenn die Procedure alle Variablen in english nutzt,
sehe es ästethischer aus, wenn Deine zugefügten Variablen auch engl. Namen nutzen würden.
Es ging mir vielmehr darum, das alle Variablen im Orginal deklariert wurden (Protected bla...),
Deine Variable wurde nicht deklariert und dies ergibt einen Fehler, wenn EnableExplicit aktiv ist.

Sicherlich ist es Dir selbst überlassen, ob Du EnableExplicit nutzt (obwohl ich es für dumm halte, wenn
man es nicht macht :wink: ), aber wenn Du Funktionen von anderen Autoren nutzt, solltest es respektieren, das der Orginal-Autor dies gemacht hat, zumindest verliert die Procedure an Wert für mich.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: 64 Bit Prozess kann unter 64 Bit OS nicht abgefragt werd

Beitrag von _JON_ »

Es sollte mit EnumProcesses_() --> OpenProcess_() --> QueryFullProcessImageName_() möglich sein 64bit Prozesse abzufragen.
Aber warum nicht einfach eine x64 exe mit kompilieren? :?
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Antworten