Sono un po 'deluso che non c'è quasi nessuna discussione su questo, non importa dove guardo, quindi credo che dovrò chiedere.
Sto scrivendo un'applicazione di marcatura su banco di memoria multipiattaforma che richiede una mappatura diretta degli indirizzi fisici piuttosto che un indirizzamento virtuale.
Modifica La soluzione sarebbe simile alle chiamate di sistema Linux / Unix:
int fd = open("/dev/mem", O_RDONLY);
mmap(NULL, len, PROT_READ, MAP_SHARED, fd, PHYSICAL_ADDRESS_OFFSET);
che richiede al kernel di fornire una mappatura della pagina virtuale all'indirizzo fisico desiderato o di restituirla come fallita. Ciò richiede i privilegi di supervisore, ma va bene.
Ho visto molte informazioni sulla memoria condivisa e sui file mappati in memoria ma tutti questi risiedono sul disco e quindi non sono molto utili quando sto cercando di fare una lettura dipendente dal sistema. È molto simile alla scrittura di un driver IO anche se non ho bisogno di autorizzazioni di scrittura per l'indirizzo fisico.
Questo sito fornisce un esempio di come farlo a livello di driver usando Windows Driver Kit:
NT Insider: condivisione della memoria tra driver e applicazioni
Questa soluzione richiederebbe probabilmente Visual Studio a cui attualmente non ho accesso. (Ho scaricato l'API WDK ma si è lamentato del mio utilizzo di GCC per Windows).
Sono tradizionalmente un programmatore Linux quindi spero che possa esserci qualcosa di veramente semplice che mi manca. Grazie in anticipo se sai qualcosa che io non!