Freigeben über


DrvEscape-Funktion (winddi.h)

Die DrvEscape-Funktion wird zum Abrufen von Informationen von einem Gerät verwendet, das in einer geräteunabhängigen Gerätetreiberschnittstelle nicht verfügbar ist. die jeweilige Abfrage hängt vom Wert des iEsc-Parameters ab.

Syntax

ULONG DrvEscape(
  [in]  SURFOBJ *pso,
  [in]  ULONG   iEsc,
  [in]  ULONG   cjIn,
  [in]  PVOID   pvIn,
  [in]  ULONG   cjOut,
  [out] PVOID   pvOut
);

Parameter

[in] pso

Zeiger auf eine SURFOBJ-Struktur , die die Oberfläche beschreibt, an die der Aufruf gerichtet wird.

[in] iEsc

Gibt eine Abfrage an. Die Bedeutung der anderen Parameter hängt von diesem Wert ab. QUERYESCSUPPORT ist der einzige vordefinierte Wert; Sie fragt ab, ob der Treiber eine bestimmte Escapefunktion unterstützt. In diesem Fall verweist pvIn auf eine Escapefunktionsnummer; cjOut und pvOut werden ignoriert. Wenn die angegebene Funktion unterstützt wird, ist der Rückgabewert ungleich null.

[in] cjIn

Gibt die Größe des Puffers in Byte an, auf den pvIn verweist.

[in] pvIn

Zeiger auf die Eingabedaten für den Aufruf. Das Format der Eingabedaten hängt von der abfrage ab, die durch den iEsc-Parameter angegeben wird.

[in] cjOut

Gibt die Größe des Puffers in Bytes an, auf den pvOut verweist.

[out] pvOut

Zeiger auf den Ausgabepuffer. Das Format der Ausgabedaten hängt von der Abfrage ab, die durch den iEsc-Parameter angegeben wird.

Rückgabewert

Der Rückgabewert ist von der abfrage abhängig, die durch den iEsc-Parameter angegeben wird. Wenn die in der Abfrage angegebene Funktion nicht unterstützt wird, ist der Rückgabewert null.

Hinweise

Das Zeichnen auf dem Gerät ist in dieser Funktion nicht zulässig. DrvDrawEscape soll für die spezielle Zeichnungsunterstützung verwendet werden.

GDI übergibt Daten direkt von einer (möglicherweise schädlichen) Clientanwendung an den Treiber. Dies bedeutet, dass die DrvEscape-Funktion alle Eingabeargumente überprüfen muss. Insbesondere muss diese Funktion Folgendes ausführen:

  • Stellen Sie sicher, dass der im iEsc-Parameter empfangene Wert eine gültige Abfrage darstellt.
  • Überprüfen Sie, ob die Größe des Eingabepuffers (der Wert im cjIn-Parameter ) für die angegebene Abfrage gültig ist.
  • Überprüfen Sie, ob der Inhalt des Puffers, auf den der pvIn-Parameter verweist, für die angegebene Abfrage gültig ist.
  • Überprüfen Sie, ob die Größe des angegebenen Ausgabepuffers (der Wert im cjOut-Parameter ) für die angegebene Abfrage gültig ist.
Microsoft reserviert den Bereich 0 bis 0X10000 für seine Escapecodes. Drittanbieter können Escapecodes für ihre eigene Verwendung oberhalb dieses Bereichs auswählen. Da treiberspezifische Escapecodes möglicherweise in Konflikt mit denen stehen, die in anderen Anzeigetreibern verwendet werden, ist es wichtig, dass ein Anzeigetreiber Escapeparameter vor der Verarbeitung des Escapezeichens überprüft. Eine Möglichkeit, dies zu tun, wäre die Überprüfung der Eingabe- und Ausgabeblockgrößen und der Eingabeblockparameter. Um die Sicherheit zu erhöhen, sollten Treiber auch einen "Magic"-Wert enthalten, der in jedem Eingabeblock entsprechend festgelegt werden muss, um sicherzustellen, dass der Eingabeblock von einer vertrauenswürdigen Quelle stammt.

DrvEscape ist für alle Treiber optional.

Anforderungen

Anforderung Wert
Zielplattform Desktop
Kopfzeile winddi.h (einschließlich Winddi.h)

Weitere Informationen

DrvDrawEscape

SURFOBJ