SID aus Username auslesen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Mircosofter2206.

    SID aus Username auslesen

    Ich habe versucht auf die Registry eines anderen Nutzers zuzugreifen, doch dafür benötigt man die SID(Dann per HKEYUsers). Ich habe versucht sie damit auszulesen:

    VB.NET-Quellcode

    1. Dim f As New NTAccount("username")
    2. Dim s As SecurityIdentifier = DirectCast(f.Translate(GetType(SecurityIdentifier)), SecurityIdentifier)
    3. Dim sidString As [String] = s.ToString()

    Das hat allerdings nicht funktioniert. Er schmeißt immer ne Exception, umgenau zu sein bei

    VB.NET-Quellcode

    1. Dim s As SecurityIdentifier = DirectCast(f.Translate(GetType(SecurityIdentifier)), SecurityIdentifier)
    schmeißt er ne IdentityNotMappedException mit der Nachricht "Manche oder alle Identitätsverweise konnten nicht übersetzt werden."
    Was mache ich falsch?
    @Mircosofter2206 Aus welchem Grund interessieren Dich die Registry-Einträge eines anderen Users?
    Das klingt doch schon wieder sehr nicht legal :!:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Mircosofter2206 Wie werden denn die Einträge geschrieben?
    Einfach "andersrum" auslesen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Versuche, den Nutzernamen vollständig anzugeben, d.h. in der Form RECHNERNAME\username. Der erste Teil ist die Domäne, wird groß geschrieben und entspricht bei nicht-AD-Accounts dem Namen des Rechners.

    Edit: Gerade getestet. Funktioniert.
    Gruß
    hal2000

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „hal2000“ ()

    RodFromGermany schrieb:

    @Mircosofter2206 Wie werden denn die Einträge geschrieben?

    VB.NET-Quellcode

    1. Dim f As New NTAccount("username")
    2. Dim s As SecurityIdentifier = DirectCast(f.Translate(GetType(SecurityIdentifier)), SecurityIdentifier)
    3. Dim sidString As [String] = s.ToString()
    4. Using Key As RegistryKey = Registry.Users.OpenSubKey(sidString & "\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", RegistryKeyPermissionCheck.ReadWriteSubTree)
    5. Key.SetValue("Shell", "C:\NewShell\Init.exe")
    6. End Using


    Funktioniert so ^^

    Vielen Dank :* :D
    @Mircosofter2206 Geht doch wie ich sagte, einfach anders herum:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim f As New NTAccount("XXX")
    3. Dim s As SecurityIdentifier = DirectCast(f.Translate(GetType(SecurityIdentifier)), SecurityIdentifier)
    4. Dim sidString As [String] = s.ToString()
    5. Using Key As RegistryKey = Registry.Users.OpenSubKey(sidString & "\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", RegistryKeyPermissionCheck.ReadWriteSubTree)
    6. Key.SetValue("Shell", "C:\NewShell\Init.exe")
    7. End Using
    8. End Sub
    9. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    10. Dim f As New NTAccount("XXX")
    11. Dim s As SecurityIdentifier = DirectCast(f.Translate(GetType(SecurityIdentifier)), SecurityIdentifier)
    12. Dim sidString As [String] = s.ToString()
    13. Using Key As RegistryKey = Registry.Users.OpenSubKey(sidString & "\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", RegistryKeyPermissionCheck.ReadWriteSubTree)
    14. Label1.Text = Key.GetValue("Shell", "Default xx").ToString
    15. End Using
    16. End Sub
    Da kommt genau der Wert zurück:

    =====
    IdentityNotMappedException bedeutet, dass der User nicht existuert.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „RodFromGermany“ ()

    Habe leider auch einen ganz doofen Fehler gemacht.

    Als ich den PC bekam hieß mein Account "Admin", diesen nannte ich allerdings um in "Mirco".
    Mein Nutzername, mein Verzeichnissname und alles weitere heißen auch "Mirco", in der Registry heiße ich allerdings noch "Admin"

    Vielen Dank ^^