[VB.NET] Impersonation auf user32.dll API Call ausweiten


Startseite Forum Ausbildungsblöcke Anwendungsentwickler [VB.NET] Impersonation auf user32.dll API Call ausweiten

Ansicht von 1 Beitrag (von insgesamt 1)
  • Autor
    Beiträge
  • #109314
    shifty
    Teilnehmer

    Moin Moin,

    ich hab hier mal ein ganz spannendes Problem.
    Ich habe einen Windows Service welcher unter LocalSystem läuft (Session 0 isolated, Interaktion mit Desktop ist nicht vorgesehen, fliegt im neuen Windows sowieso raus), dieser Service soll über einen API Aufruf aus der user32.dll das aktuell fokusierte Fenster rausfinden.
    Den aktuellen Benutzer zum Fenster habe ich, ich kann auch dessen Identität annehmen.

    Durch die isolation der Session 0, indem der Service nun mal läuft scheint es doch einige Probleme zu geben wenn ich „GetForegroundWindow“ aus der user32.dll aufrufe, bekomme also immer 0 zurück. Selbst wenn ich das Handle des fokusierten Fensters einfach mal fix im Code verdrahte, oder bspw. über die Prozesse den „MainWindowTitle“ auslese bekomme ich stets einen leeren String zurück.

    Die Probleme treten eigentlich nur auf wenn ich Aufrufe mit der user32.dll starte, Zugriffsrechte usw. werden durch Impersonation tadelos übernommen.

    Wer hat eine Idee?? :confused:

    Aktuell sieht es bei mir folgendermaßen aus, bringt aber nur ein schwarzes Bild.

    _
    Private Shared Function PrintWindow(hwnd As IntPtr, hDC As IntPtr, nFlags As UInteger) As Boolean
    End Function

    Sub ABC()
    Dim user As New ImpersonateUser()

    user.Impersonate(„domain“, „user“, „pw“)

    Write(Environment.UserName)

    Try
    Dim p As Process = Process.GetProcessesByName(„notepad“)(0)

    Dim handle As IntPtr = p.Handle ‚p.MainWindowHandle läuft ebenfalls ins leere…

    Dim bmp As New Bitmap(1680, 1010)

    Dim g As Graphics = Graphics.FromImage(bmp)

    Dim dc As IntPtr = g.GetHdc

    Dim result As Boolean = PrintWindow(handle, dc, 0)

    g.ReleaseHdc(dc)

    g.Dispose()

    If result Then
    bmp.Save(„C:TEMPtest.jpeg“, Imaging.ImageFormat.Jpeg)
    Else
    bmp.Save(„C:TEMPtest.jpeg“, Imaging.ImageFormat.Jpeg)
    Write(„Kein screenshot :(„)
    End If

    bmp.Dispose()

    Catch ex As Exception
    Write(ex.Message)
    End Try

    user.Undo()
    End Sub[/CODE][CODE] _
    Private Shared Function PrintWindow(hwnd As IntPtr, hDC As IntPtr, nFlags As UInteger) As Boolean
    End Function

    Sub ABC()
    Dim user As New ImpersonateUser()

    user.Impersonate(„domain“, „user“, „pw“)

    Write(Environment.UserName)

    Try
    Dim p As Process = Process.GetProcessesByName(„notepad“)(0)

    Dim handle As IntPtr = p.Handle ‚p.MainWindowHandle läuft ebenfalls ins leere…

    Dim bmp As New Bitmap(1680, 1010)

    Dim g As Graphics = Graphics.FromImage(bmp)

    Dim dc As IntPtr = g.GetHdc

    Dim result As Boolean = PrintWindow(handle, dc, 0)

    g.ReleaseHdc(dc)

    g.Dispose()

    If result Then
    bmp.Save(„C:TEMPtest.jpeg“, Imaging.ImageFormat.Jpeg)
    Else
    bmp.Save(„C:TEMPtest.jpeg“, Imaging.ImageFormat.Jpeg)
    Write(„Kein screenshot :(„)
    End If

    bmp.Dispose()

    Catch ex As Exception
    Write(ex.Message)
    End Try

    user.Undo()
    End Sub[/CODE]

Ansicht von 1 Beitrag (von insgesamt 1)
  • Das Forum „Anwendungsentwickler“ ist für neue Themen und Antworten geschlossen.
Momentan aktive Benutzer: 0
No users are currently active
Aktive Benutzer in den letzten 24 Stunden: 0
Keymaster | Moderator | Participant | Spectator | Blocked
Additional Forum Statistics
Threads: 1.488, Posts: 22.646, Members: 11.011
Welcome to our newest member, bgtjillian
Most users ever online was 5 on 16. September 2020 22:11