Domanda

I puntatori standard in .Net possono farlo? O è necessario ricorrere a P / invoke?

Nota che non sto parlando di riferimenti a oggetti; Sto parlando di puntatori C # effettivi in ??codice non sicuro.

È stato utile?

Soluzione

C #, come motore di runtime gestito e protetto, non consente l'accesso hardware di basso livello e le posizioni di memoria associate all'hardware effettivo non sono disponibili.

Dovrai utilizzare un driver di porta o scrivere il tuo in C ++ o C con l'API di Windows appropriata per accedere alle regioni di I / O di memoria mappate di interesse. Questo verrà eseguito in un anello inferiore rispetto ai programmi C #.

Questo è il motivo per cui non vedi i driver scritti in C #, anche se capisco che molti stanno scrivendo routine di accesso con C ++, ma la logica principale dei driver in C #. È difficile, tuttavia, poiché gli arresti anomali e il riavvio possono diventare difficili, per non parlare dei problemi di sincronizzazione e temporizzazione (che sono un po 'più concreti in C ++ in un anello inferiore, anche se Windows è tutt'altro che un sistema in tempo reale).

-Adam

Altri suggerimenti

Per espandere su la risposta di Adam , non è nemmeno possibile eseguire I / O mappati in memoria da un'applicazione Win32 senza la collaborazione di un driver del kernel. Tutti gli indirizzi che ottiene un'app Win32 sono indirizzi virtuali che non hanno nulla a che fare con gli indirizzi fisici.

Devi scrivere un driver del kernel per fare ciò di cui stai parlando o avere un driver installato con un'API che ti permetta di fare richieste di I / O su particolari indirizzi fisici (e che un tale driver sarebbe immagino) una falla piuttosto grande per la sicurezza in attesa di accadere. Mi sembra di ricordare in quel modo quando qualche attrezzatura aveva un tale driver come parte di un kit di sviluppo per aiutare il port DOS / Win16 legacy o qualunque codice dispositivo per Win32. Non ricordo il suo nome o so se è ancora in giro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top