2010-04-23 5 views
5

Ist es möglich, dass ein untergeordneter Prozess ein Handle von seinem übergeordneten Prozess erbt, wenn ein Prozess 32-Bit und der andere 64-Bit ist?Kann Windows Vererbung die 32-Bit-/64-Bit-Grenze umgehen?

HANDLE ist ein 64-Bit-Typ auf Win64 und ein 32-Bit-Typ auf Win32, was darauf hindeutet, dass sogar in allen Fällen es möglich wäre, würde es einige Fälle fehlschlagen: ein 64-Bit-Elternprozess , ein 32-Bit-Kindprozess und ein Handle, das nicht in 32 Bits dargestellt werden kann.

Oder ist die Benennung des Objekts die einzige Möglichkeit für einen 32-Bit-Prozess und einen 64-Bit-Prozess, ein Handle für dasselbe Objekt zu erhalten?

Antwort

7

Wenn es ein Datei-Handle oder ein anderes Kernel-Handle ist, dann ja.

Es passiert einfach, obwohl HANDLE ein 64-Bit-Typ ist, kann es immer für jedes gültige Handle-Wert in 32 Bit und zurück konvertiert werden.

GDI-Handles können nicht vererbt werden.

0

Ja, aber stellen Sie beim Konvertieren von 32-Bit-Handles in 64-Bit-Handles sicher, dass Sie den Wert signieren. Das heißt, setze die Bits 32-63 auf den Wert von Bit 31. So wird 0x800000000xFFFFFFFF80000000, nicht 0x0000000080000000. Beachten Sie außerdem, dass diese Kompatibilität zwischen 32- und 64-Bit-Handles nur für Benutzermodus-Handles gewährleistet ist (mit denen Sie sich sowieso immer befassen sollten, es sei denn, Sie schreiben einen Treiber oder ähnliches im Kernel-Modus).

Siehe auch: this SO question and its answer (Was ist der Windows-HANDLE-Bereich bei einer 64-Bit-Anwendung?)