Frage

Das ist seltsam. Früher, Windows 7 x64 ausgeführt wird, hatte ich Mühe, die Win32 Open gegen 64-Bit-Prozesse aufrufen. Gegoogelt um ein wenig und kam zu dem Schluss, versinkt das war einfach nicht passieren.

Dann eine lustige Sache passiert ist. Ich habe versucht, sie gegen die Prozess-ID für explorer.exe und heilige Karpfen , es funktioniert! Gestartet wirft anderen Prozess-IDs an, und es ist nur ein gestopft crapshoot.

Wie sich herausstellt, kann ich Open gegen eine gute Anzahl von x64 Prozesse nennen -. Explorer, ITYPE, ipoint, taskhost, cmd, mstsc, ..., etc

Und andere Pop-5 (Zugriff wird verweigert) - winlogon, csrss, Dienstleistungen, svchost, mdm ...

Ich bin die Bestätigung der "Bitness" und Prozess-ID mit Process Explorer. Außerdem ruft GetModuleFileNameEx auf 64-Bit-Prozesse nicht immer, so dass mit einem Doppel-Check für 32/64.

Dies ist der Code:

' Get a handle to the process.
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, ProcessID)
If hProcess Then
   ' Grab the filename for base module.
   nChars = GetModuleFileNameEx(hProcess, 0, Buffer, Len(Buffer))
   ' If running in x64, http://winprogger.com/?p=26
   If Err.LastDllError = ERROR_PARTIAL_COPY Then
      nChars = GetProcessImageFileName(hProcess, Buffer, Len(Buffer))
   End If
   ' Truncate and return buffer.
   If nChars Then
      GetProcessFileName = Left$(Buffer, nChars)
   End If
   Call CloseHandle(hProcess)
Else
   Debug.Print "LastDllError:"; Err.LastDllError
End If

Nichts Besonderes. Ich will nur die Prozesse für Dinge wie Dateinamen oder Prozesszeiten abzufragen. Wer noch keine Ahnung, was unterscheidet zwischen denen, die ich öffnen kann und die, die ich nicht kann?

Zusätzliche Informationen: Laufender Prozess als Administrator an. UAC ausgeschaltet. Ja, es ist eine 32-Bit-Anwendung. Ich habe mit PROCESS_QUERY_LIMITED_INFORMATION keine besseren Ergebnisse hat.

Danke ... Karl

War es hilfreich?

Lösung

Die Prozesse, die Sie zitiert (winlogon, csrss, etc.) sind wichtige Systemprozesse und Dienstleistungen. Sie laufen unter einem anderen, privilegierten Konto. Auch wenn Sie als Administrator ausgeführt werden, sind Sie nicht der Eigentümer dieser Prozesse und damit sind Sie keine Rechte in ihrer ACL gewährt. Der Versuch, führt zu öffnen in der Zugriff verweigert.

Allerdings Mitglieder der Gruppe Administratoren SeDebugPrivilege tun haben. Dies ist im Grunde eine Überschreibung auf Open und Openthread, die Sie für alle Zugang zu öffnen ermöglicht es, auch wenn Sie keine Berechtigung in der ACL gewährt werden.

SeDebugPrivilege ist offensichtlich ein sehr gefährliches Privileg zu haben - Sie können Bypass-Zugriffsüberprüfungen und modify / inspiziert anderer Prozesse des Benutzers. Während es in einem Administratoren Token standardmäßig vorhanden ist, wird es standardmäßig nicht aktiviert. Sie müssen dieses Privileg aktivieren, bevor Open aufrufen.

Der MSDN-Artikel gibt Beispielcode wie aktivieren und deaktivieren Privilegien in Ihrem Token.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top