Подтвердить что ты не робот

Как я могу поделиться HWND между 32 и 64-битными приложениями в Win x64?

MSDN сообщает мне, что дескрипторы окон (HWND) могут совместно использоваться между 32- и 64-разрядными приложениями, в Interprocess Communication (MSDN), Однако в Win32 HWND - 32 бита, тогда как в 64-битной Windows - 64 бита. Итак, как можно разделить дескрипторы?

Я предполагаю, что тот же вопрос относится к дескрипторам именованных объектов, таких как мьютексы, семафоры и дескрипторы файлов.

4b9b3361

Ответ 1

Не факт, что они могут быть разделены, подразумевает, что в процессах Win64 используются только более низкие 32 бита? Обработчики Windows - это индексы, которые не являются указателями, по крайней мере, насколько я могу судить, поэтому, если MS не хочет разрешать более 2 ^ 32 окна/файла/мьютекса/и т.д. не имеет смысла использовать 32 бита void* на Win64.

Ответ 2

Как отмечает Даниэль Роуз выше, документация MSDN теперь заявляет:

... безопасно обрезать дескриптор (при передаче от 64-битного до 32-битного) или расширять знак (при передаче от 32-битного до 64-разрядного).

Здесь все еще кажется некоторая путаница, учитывая, что мне сказали, что нулевое расширение является правильным способом WOW64 dev. Если вы пишете 64-битный модуль, который получает дескрипторы из 32-битных модулей, самой безопасной ставкой может быть сравнение только младших 32 бит дескриптора (т.е. Усечение). В противном случае вы можете быть пойманы с расширением sign-extension vs zero-extension.

Ответ 3

Я только что получил электронное письмо от разработчика Microsoft WOW64, который подтверждает:

Ручки 32 бит и могут быть надежно усечены/нуль расширены. Это верно как для дескрипторов объектов ядра, так и для дескрипторов USER/GDI.

Ответ 4

Посмотрите в руководстве по определению интерфейса Microsoft (MIDL), стр. 12 (Http://msdn.microsoft.com/en-us/library/ms810720.aspx)

Вот посмотрите, что USER и дескрипторы GDI обозначают расширенные значения 32b

Ответ 5

Я думаю, вы правы, чтобы быть осторожным в целом. Тем не менее, MSDN, заявляя, что их можно разделить, - это контракт на нас, программистов. Они не могут сказать "поделиться им сегодня", а затем "больше не завтра", не нарушая большого количества программного обеспечения.

Аналогично, для x64 и 32-битного программного обеспечения для одновременной работы на данной машине, и для того, чтобы все могли ладить, HWND (и многие HANDLE) должны оставаться 32-битными и совместимыми.

Я предполагаю, что я говорю, что я считаю, что это очень безопасная ставка, по крайней мере, на всю жизнь Windows 7 и, вероятно, Windows "следующая".