AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) auf richtigen InputDesktop prüfen (für GetCursorPos)
Thema durchsuchen
Ansicht
Themen-Optionen

auf richtigen InputDesktop prüfen (für GetCursorPos)

Ein Thema von VizeTE · begonnen am 1. Nov 2010 · letzter Beitrag vom 3. Nov 2010
 
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#5

AW: auf richtigen InputDesktop prüfen (für GetCursorPos)

  Alt 3. Nov 2010, 09:59
Zitat:
Das Beispiel verstehe ich nicht so recht. Korrigier' mich wenn ich mich täusche aber ein Handle ist doch kein Zeiger auf irgendetwas sondern eher eine Id für Windows um ein Objekt zu identifizieren. Also einfach eine Ganzzahl. Da kann ich doch nichts dereferenzieren?!
Die Handles zu vergleichen habe ich ja schon in meinem Beispiel bei der Threaderöffnung versucht.
Naja, sie sind keine Zeiger im Sinne von Speicherverwaltung. Aber Handles zeigen auf Objekte im Kernelstrukturen (Klassen) von Windows. Damit man sie nicht einfach ändern kann, bekommt man eben eine Nummer (ein Handle), die die Struktur eindeutig in deinem Prozess zuordbar macht. D.h. du kannst beliebige Handles anfordern, die auf dieselbe Struktur im Kernel zeigen. Die Nummer hat für dich keinerlei Bedeutung, sondern nur für Windows.
Um nochmal auf Pointer von Delphi zu kommen: Dort hast du in meinem Beispiel gesehen, dass die Werte dieselben sind. Das ist sozusagen dieselbe Kernelklasse. Nur die Zeiger P1 und P2 haben verschiedene Speicheraddresse. Würdest du jetzt da auf die Idee kommen und die Inhalte vergleichen wollen, indem zu P1 mit P2 direkt, als die Speicherstellen an denen sie stehen, vergleichst?

Du musst schon den Namen des Desktops deiner Anwendung herausfinden und dann vergleichen...Nutze dazu GetUserObjectInformation oder TJwSecurityDesktop

Wenn der Anmeldebildschirm oder UAC Bildschirm aktiv ist, dann kann eine normale Anwendung nicht mehr darauf zugreifen und jede API verweigert den Zugriff auf den Desktop. Sobald du 0 für HDESK von OpenInputDesktop zurückbekommst, hast du keinen Zugriff mehr auf den Desktop des Benutzers. Dass du trotzdem Zugriff auf den Desktop des Bildschirmschoner hast liegt daran, dass der Bildschirmschoner in einem eigenen Desktop (InputDesktop = Screensaver) gestartet wird, der Lesezugriff für den Benutzer zulässt (so kann man erkennen, dass der Bildschirmschoner aktiv ist). Sobald der Bildschirmschoner jedoch beendet wird, ist der Winlogon Desktop aktiv und eine normale Anwendung kann garnichts mehr damit anfangen (GetLastError = 5 = Access Denied)
Erst wenn der Benutzer sich mit seinem Passwort verifiziert, kann man den normalen Desktop (default) benutzen.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz