Мой вопрос касается дескрипторов в 64-разрядной архитектуре Windows: могут ли они быть значениями больше 2^32?
Дескрипторы в Visual Studio C/C++ определяются как указатели (64-разрядная версия): typedef void *HANDLE;
Я читал, что по крайней мере некоторые дескрипторы в 64-разрядной версии имеют значение только младших 32 бит (https://msdn.microsoft.com/nl-nl/library/windows/desktop/aa384203(v=vs.85).aspx). Но относится ли это ко ВСЕМ ручкам?
Второй вопрос заключается в том, можно ли считать указатели на структуры дескрипторами. Было бы безопасно преобразовать их в 32-битное целое число?
Небольшая предыстория: я переношу сложное приложение на 64-разрядную версию и должен иметь дело с входными/выходными параметрами, которые мне бы очень хотелось сохранить 32-разрядными целыми числами. Но они иногда (неправильно) используются для переноса дескрипторов, а иногда и указателя на структуру. Я знаю, что было бы лучше разделить их по разным функциям, но это было бы очень сложно сделать.