Seite 1 von 1

64 Bit Prozess kann unter 64 Bit OS nicht abgefragt werden

Verfasst: 07.05.2014 18:33
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



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

Verfasst: 07.05.2014 19:58
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")

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

Verfasst: 07.05.2014 21:02
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:

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

Verfasst: 07.05.2014 22:21
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.

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

Verfasst: 07.05.2014 22:53
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

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

Verfasst: 08.05.2014 16:44
von _JON_
Es sollte mit EnumProcesses_() --> OpenProcess_() --> QueryFullProcessImageName_() möglich sein 64bit Prozesse abzufragen.
Aber warum nicht einfach eine x64 exe mit kompilieren? :?