{"id":43,"date":"2007-03-15T18:23:54","date_gmt":"2007-03-15T17:23:54","guid":{"rendered":"http:\/\/blog.m-ri.de\/index.php\/2007\/03\/15\/ermitteln-ob-ein-prozess-als-administrator-lauft-oder-nicht\/"},"modified":"2007-03-15T18:24:00","modified_gmt":"2007-03-15T17:24:00","slug":"ermitteln-ob-ein-prozess-als-administrator-lauft-oder-nicht","status":"publish","type":"post","link":"http:\/\/blog.m-ri.de\/index.php\/2007\/03\/15\/ermitteln-ob-ein-prozess-als-administrator-lauft-oder-nicht\/","title":{"rendered":"Ermitteln ob ein Prozess &#8222;als Administrator&#8220; l\u00e4uft oder nicht"},"content":{"rendered":"<p>Es gibt einigen Code im Netz, der ermittelt ob man administrative Rechte hat oder eben nicht.<br \/>\nDazu wurden zwei Methoden meistens verwendet. Die meisten pr\u00fcften ob im aktuellen Token der vordefinierte SID f\u00fcr den Administrator vorhanden war. Oder man verwendete <em>NetUserGetInfo<\/em>.<br \/>\nBesagte klassische Methoden sind auf <a target=\"_blank\" href=\"http:\/\/win32.mvps.org\/security\/is_admin.html\">Felix Kasza&#8217;s Win32-MPV Seiten<\/a>\u00a0(noch)* nachzulesen.<\/p>\n<p>Leider ber\u00fccksichtigt dieser Code nicht, dass es unter Vista ein sogenanntes <em><a target=\"_blank\" href=\"http:\/\/msdn2.microsoft.com\/en-us\/library\/aa379316.aspx\">Restricted Token<\/a><\/em> geben kann. Theoretisch ist dies schon seit Windows 2000 und auch unter XP m\u00f6glich. Nur richtig problematisch wird dies unter Vista, denn diese <em>Restricted Token<\/em> werden hier auch entsprechend verwendet.<br \/>\nMeldet man sich als Admin unter Vista an, dann meldet der Beispielcode, den man unter dem obigen Link findet, immer, dass der Benutzer Administrative Rechte hat! Egal\u00a0ob nun der Prozess mit angehobenen oder ohne angehobene Rechte gestartet wurde.<\/p>\n<p>Will also ein Programm\u00a0das ein Trustinfo Manifest mit asInvoker hat wissen, ob es nun evtl. doch\u00a0<em>Als Administrator<\/em> ausgef\u00fchrt wird oder nicht, muss man das Restricted Token ber\u00fccksichtigen. Dies macht der Code der in dem \u00fcberarbeiteten <a href=\"http:\/\/support.microsoft.com\/kb\/118626\/en-us\">KB-Artikel 118626<\/a>\u00a0ver\u00f6ffentlicht wurde. Dieser Artikel hat in der Vergangenheit, die gleiche Methode verwendet die auch Felix Kasza&#8217;s (noch)* ver\u00f6ffentlicht.<br \/>\nDer neue Code den wir nun in dem KB-Artikel finden baut eine DACL auf mit der ACE des lokalen Admins, diese wird dann mit der Funktion <em>AccessCheck<\/em>\u00a0gegen das aktuelle Token gepr\u00fcft. Dieser Code ist nicht trivial und\u00a0ist gut dokumentiert. Man sollte ihn sich wirklich\u00a0mal komplett durchlesen.\u00a0<\/p>\n<p>Das sehr interessante an diesem Code ist auch, dass er mit und ohne Trustinfo Manifest funktioniert. Er liefert <em>TRUE <\/em>wenn der Prozess mit administrativen Rechten l\u00e4uft und <em>FALSE <\/em>wenn eben nicht.<\/p>\n<p>F\u00fcr was ist so etwas gut?<br \/>\nNun man kann in seinem Programm auf diese Weise direkt ermitteln ob bestimmte Funktionen die z.B. schreibend auf die HKLM zugreifen erlaubt sind oder nicht. Sicher man k\u00f6nnte auch ein &#8222;Probe-Schreiben&#8220;, aber der in dem KB-Artikel beschriebene Weg ist mit Sicherheit eleganter.<br \/>\nWobei das &#8222;Probe-Schreiben&#8220; auch ein Trustinfo Manifest voraussetzt.<\/p>\n<p>BTW: Der Code in dem KB-Artikel hat (noch)* einen l\u00e4stigen Fehler. Er definiert <em>ACCESS_READ<\/em> und <em>ACCESS_WRITE<\/em> also <em>const DWORD<\/em>. Das ist unn\u00f6tig mit den aktuellen Headern. Die Fehlermeldungen sind nicht ganz einfach zu verstehen. Am Besten einfach die beiden Zeilen auskommentieren.<\/p>\n<p><small>*(noch) beschreibt den Zustand der entsprechenden Artikel, als ich diesen Beitrag schrieb. Das mag sich \u00e4ndern, weil ich bereits entsprechende Emails \u00fcber die Probleme mit den Beispielen geschrieben habe.<\/small><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Es gibt einigen Code im Netz, der ermittelt ob man administrative Rechte hat oder eben nicht. Dazu wurden zwei Methoden meistens verwendet. Die meisten pr\u00fcften ob im aktuellen Token der vordefinierte SID f\u00fcr den Administrator vorhanden war. Oder man verwendete NetUserGetInfo. Besagte klassische Methoden sind auf Felix Kasza&#8217;s Win32-MPV Seiten\u00a0(noch)* nachzulesen. Leider ber\u00fccksichtigt dieser Code &hellip; <a href=\"http:\/\/blog.m-ri.de\/index.php\/2007\/03\/15\/ermitteln-ob-ein-prozess-als-administrator-lauft-oder-nicht\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eErmitteln ob ein Prozess &#8222;als Administrator&#8220; l\u00e4uft oder nicht\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3,17,2],"tags":[61],"class_list":["post-43","post","type-post","status-publish","format-standard","hentry","category-programmieren","category-vista-2","category-windows-api","tag-winapi"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/43","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/comments?post=43"}],"version-history":[{"count":0,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/43\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/media?parent=43"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/categories?post=43"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/tags?post=43"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}