Ответ 1
Нет, вы не можете.
Оба 16-разрядных и 32-разрядных Windows жили в 32-битном линейном адресном пространстве. Термины 16 и 32 относятся к размеру смещения относительно селектора.
...
Во-первых, обратите внимание, что полноразмерный 16-разрядный указатель и 32-разрядный плоский указатель имеют одинаковый размер. Значение 0x0123: 0x467 требует 32 бита, и вау, так же, как и 32-разрядный указатель. Это означает, что структуры данных, содержащие указатели, не изменяют размер между их 16-битными и 32-разрядными аналогами. Очень удобное совпадение.
Ни одно из этих двух наблюдений не выполняется для 32-битного до 64-битного thunking. Размер указателя изменился, что означает, что преобразование 32-разрядной структуры в 64-битную структуру и наоборот изменяет размер структуры. И 64-разрядное адресное пространство в четыре миллиарда раз больше, чем 32-разрядное адресное пространство. Если в 64-разрядном адресном пространстве имеется некоторая память со смещением 0x000006fb`01234567, 32-битный код не сможет получить к нему доступ. Не похоже, что вы можете создать временное адресное окно, потому что 32-битный плоский код не знает об этих временных окнах адресов; помнишь, они отказались от селекторов?
http://blogs.msdn.com/oldnewthing/archive/2008/10/20/9006720.aspx