Windows действительно защищает память приложений. Каждое приложение имеет свое собственное адресное пространство и просто не может получить доступ к чему-либо за его пределами.
Но в Windows также есть функции, которые позволяют вам получать доступ к памяти из других процессов. Не путем простого доступа к указателю, а путем вызова функции для получения данных из другого процесса.
Эта функциональность кажется странной, но она необходима, если вы хотите написать отладчик или другие диагностические утилиты.