nur eigene Prozesse finden....

  • Hallo @All

    Stehe vor dem Problem das ich ein paar Prozesse beenden muss, das aber nur mit Userrechte. Hört sich jetzt einfach an, ist es aber nicht.

    Zuerst habe ich in meinen Script ProcessClose ("msedge.exe") verwendet. Das würde jetzt grundsätzlich funktionieren, nur auf einen Multiusersystem nicht (Terminalserver). Nach gefühlten 1000 Versuche hört der Befehl scheinbar auf wenn er auf einen "fremden" Prozess kommt. Das hat dann den Efekt das nicht alle Userprozesse geschlossen werden und nachfolgende Arbeiten nicht durchgeführt werden können.

    Na gut, dann halt die einzelnen PIDs heraussuchen und einzelen abschiessen: Aber die ProcessList gibt zurückgelieferten Array mit dem Prozessnamen und der PID aller Prozesse zurück, aber nicht den Usernamen.

    In der Doku bin ich dann über _WinAPI_getProcessUser gestossen. Aber das fordert wiederum erhöhte Rechte

    Ich könnte als Workaround "taskkill /IM "msedge.exe" /F" verwenden, aber ich hoffe das es hier interne Mittel gibt die ich enfach noch nicht kenne - man lernt ja nie aus!

    Ach ja, beim Testen ist mir noch was aufgefallen:

    tasklist /v | findstr /i "msedge.exe" - auf einen Client liefert den Usernamen sofern es der eigene Prozess ist. Auf einen Server (2016) wird statt des Usernames nur "nicht zutreffend" angezeigt. Ob das eine Einstellung am Server ist habe ich noch nicht überprüfen können...

    lg
    Racer

  • Hmm

    Der Prozess Explorer von Systernals gibt den Besitzer an (nachdem man die entsprechende Spalte ausgewählt und einmalig zur Anzeige hinzugefügt hat)... ausserdem ist er auch noch portable... das hilft im Zweifel wenn man nicht genug Rechte zur Insatlation hat .

    Nach dem "Einbau von User Name in die "Kopfspalte kann man auch noch nach dieser sortieren, sodass alle Prozesse eines Users zusammen stehen. Das bezieht sich auf Version 4.1 (neuere versionen habe ich nicht im Einsatz). Solltest Du eine alte brauchen - PN

    Inwieweit Dir das hilft - sei dahingestellt...

    LG

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Moin,

    die erhöhten Rechte für _WinAPI_getProcessUser() solltest Du nur brauchen, wenn Du auf Prozesse andere Benutzer zugreifen willst. Schau Dir das mal an:

  • sieht nicht schlecht aus...

    bitte noch ein

    #include <Array.au3>

    hinzufügen

    Lg

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Hallo!

    Schlechte Nachrichten: so ganz arbeitet das _WinAPI_GetProcessUser nicht.

    Ich suche nach den Usernamen von allen Benutzer die den Edge offen haben. Einige Prozesse können aber nicht den Owner anzeigen. Ich vermute das es mit

    Function _WinAPI_AdjustTokenPrivileges zusammen hängt. Leider fehlt mir hier das Wissen dazu...

    ich muss das leider unkenntlich machen!

    oben: wie viele Prozesse sind mit den Namen msedge.exe gefunden (Array -1) = 21

    unten: den Usernamen (oder auch nicht) zu dem Prozess

    das Programm wird mit Adminrechte ausgeführt!

    rot: Domain/User (nur Benutzerrechte)

    blau: Adminaccount - zweiter Benutzer

    Der Taskmanager, Tasklist, Prozessexplorer,....zeigen alle bei den Prozess den User an.

    lg

    Racer

  • Racer : Steht das nicht schon in der Hilfe?

    Ich würde sagen, folgendes muss vor deinem _WinAPI_GetProcessUser einmalig aufgerufen werden:

    AutoIt
    ; Enable "SeDebugPrivilege" privilege for obtain full access rights to another processes
    Local $hToken = _WinAPI_OpenProcessToken(BitOR($TOKEN_ADJUST_PRIVILEGES, $TOKEN_QUERY))
    _WinAPI_AdjustTokenPrivileges($hToken, $SE_DEBUG_NAME, $SE_PRIVILEGE_ENABLED, $aAdjust)

    und folgendes, wenn du damit fertig bist:

    AutoIt
    ; Enable SeDebugPrivilege privilege by default
    _WinAPI_AdjustTokenPrivileges($hToken, $aAdjust, 0, $aAdjust)
    _WinAPI_CloseHandle($hToken)
  • Hallo Moombas!

    Da hast mir eindeutig der Mut zum Experiment gefehlt. Die Anleitung und das Beispiel hat dann bei mir ein W/o ausgelöst.

    Du hast recht, es reichen die 2 x 2 Zeilen und schon funkt es....Was es genau macht und was da gesetzt wird ist mir allerdings zu hoch.

    vielen lieben Dank!

    Racer

  • Freut mich das ich helfen konnte.

    Ich denke, das hier nichts anderes gemacht wird, als der WinAPI Berechtigungen zum Lesen der entsprechenden Informationen gegeben und am Ende wieder genommen werden.

    Ich hoffe natürlich das ich das richtig verstanden habe aber ich gebe keine Garantie :rofl:

  • Racer 25. April 2023 um 14:45

    Hat den Titel des Themas von „nur eigne Prozesse finden....“ zu „nur eigene Prozesse finden....“ geändert.