Вопрос простой. Ответа нет.
Значит. Имеем: свою программу; чужую программу.
Хочется получить переменную-указатель, валидный в контексте нашей программы, и при этом, ссылающийся на память из адресного пространства чужой программы.
То есть, чтобы, например, чтение данных из памяти чужого процесса происходило не так:
struct dest_struct {....};
struct dest_struct *destination;
...
ReadProcessMemory(process, base, destination, sizeof(dest_struct), &num)
а вот так
struct dest_struct {....};
struct dest_struct *destination;
void *foreign_addr;
...
foreign_addr = < reference_to_our_struct_in_foreign_memory >;
destination = (dest_struct *) foreign_addr;
То есть, для периодической проверки данных в памяти чужого процесса не требуется постоянного вызова РидПроцессМемори. И более того, для проверки значений отдельных полей структуры достаточно строчки "if (... dest_strunct->critical_field ...)"