Может ли Windows обрабатывать наследование, пересекающее 32-битную / 64-битную границу? - PullRequest
5 голосов
/ 23 апреля 2010

Возможно ли, чтобы дочерний процесс унаследовал дескриптор от своего родительского процесса, если один процесс 32-битный, а другой 64-битный?

HANDLE - это 64-битный тип в Win64 и 32-битный тип в Win32, что говорит о том, что даже если бы это было возможно во всех случаях, в некоторых случаях он не удался: 64-битный родительский процесс 32-битный дочерний процесс и дескриптор, который не может быть представлен в 32 битах.

Или присвоение имени объекту единственного способа для 32-разрядного и 64-разрядного процессов получить дескриптор для того же объекта?

Ответы [ 2 ]

7 голосов
/ 23 апреля 2010

Если это дескриптор файла или другой дескриптор ядра, то да.

Бывает, что, хотя HANDLE является 64-битным типом, его всегда можно преобразовать в 32-битный и обратно для любого допустимого значения дескриптора.

Дескрипторы GDI не могут быть унаследованы.

0 голосов
/ 23 августа 2013

Да, но при преобразовании из 32-битных дескрипторов в 64-битные дескрипторы убедитесь, что значение расширено знаком. То есть установите биты 32-63 в значение бита 31. Таким образом, 0x80000000 становится 0xFFFFFFFF80000000, а не 0x0000000080000000. Кроме того, обратите внимание, что эта совместимость между 32- и 64-разрядными дескрипторами гарантируется только для дескрипторов пользовательского режима (это все, с чем вам когда-либо придется иметь дело, если вы не пишете драйвер или что-то подобное, работающее в режиме ядра).

См. Также: этот вопрос SO и его ответ (Что такое диапазон Windows HANDLE в 64-разрядном приложении?)

...