На 32-битном компьютере должно быть совершенно очевидно, что битовая нагрузка, которую берет любое приложение CPU.
64-разрядный компьютер получает две отдельные установки .NET Framework: по одной для каждой разрядности. Приложение .NET, скомпилированное как с любым ЦП, так как цель обычно выполняется в 64-разрядной установке, но может также запускаться в 32-разрядной установке, если на нее ссылается другое приложение, непосредственно нацеленное на x86. Таким образом, вы можете быть уверены, что получаете, только если знаете, как выполняется приложение: как самостоятельный процесс или по ссылке.
Я бы не стал делать никаких предположений. Не думайте, что процесс 64-битный на 64-битном компьютере: потенциально он может быть 32-битным. Проверьте его правильно, чтобы увидеть, в каком режиме он работает. Затем введите из 32-битного или 64-битного режима соответственно.
Причина, по которой вы должны использовать ту же битность, что и целевой процесс, заключается в том, что по техническим причинам, в которые я не буду входить, такие хуки не могут пересекать то, что называется барьером SysWOW. SysWOW - это то, что позволяет 32-разрядным приложениям запускаться на 64-разрядном компьютере, 16-разрядным приложениям - 32-разрядному компьютеру и т. Д. Вы пересекаете барьер, когда общаетесь между приложениями, запущенными на разных сторонах SysWOW. - то есть один работает в SysWOW (32-разрядная версия), а другой - нет (64-разрядная версия). Проще говоря, процесс должен быть полностью внутри или вне SysWOW. Таким образом, вы не можете добавить 32-битный код в 64-битный процесс, и наоборот.