Newsgroup: it.comp.programmare.win32
Titolo: NT/2000 filter driver

Supponiamo che io abbia un driver che scrive a determinati indirizzi di
I/O (nella fattispecie si tratta dei soliti indirizzi normalmente
mappati per una scheda ISA, tipo 0x240 e cosi` via). Io dovrei
intercettare questi accessi per "dirottarli" ad altri dispositivi, tutto
questo sotto a Windows 2000 (e possibilmente NT, ma non e`
fondamentale). Qualcuno conosce una soluzione semplice per fare questo?
Credo che si dovrebbe scrivere un cosiddetto "filter driver", ma non so
nemmeno da dove cominciare; inoltre sono abbastanza fiducioso che questa
esigenza l'abbia gia` avuta qualcun altro, e magari in giro su Internet
si puo` trovare qualcosa di precotto (io non ci sono riuscito, finora).
--
Lorenzo

 semplice per fare questo?
l'unica soluzione che mi viene in mente è dirottare le funzioni per la 
scrittura nello spazio degli indirizzi di I/O (la famiglia WRITE_PORT_) 
su tuoi equivalenti. Un filter driver credo sia impossibile, perchè 
solo i bus driver (in teoria) scrivono direttamente sulle porte, e sono 
ad un livello troppo basso. Consigli e avvertimenti in ordine sparso:
 - il tuo driver deve essere un bus driver, caricato all'avvio
 - un bus driver gira sempre ad un IRQL molto alto, quindi ricordati di
   fare molto in fretta perchè stai tenendo fermo tutto il resto, e di
   mettere tutti i dati critici in una sezione non paginabile
 - come già saprai, Windows usa un meccanismo ad indirezione singola
   per importare funzioni da una DLL. Questo significa che l'indirizzo,
   ad esempio, del simbolo WRITE_PORT_UCHAR nel tuo codice *non* è il
   vero indirizzo della funzione, ma in realtà è l'indirizzo ad una
   funzione stub privata __imp_WRITE_PORT_UCHAR generata dal linker
 - per avere il vero indirizzo, usa MmGetSystemRoutineAddress. Non la
   vedo nel manuale ufficiale del DDK (forse dovrei aggiornare), però
   il DDK di OSR la documenta. E' solo per Windows 2000, ma posso darti
   qualche hint su come implementarla in versioni precedenti. Vedi tu
 - ora la parte divertente: dirottare la funzione. Qui devi fare un po'
   di voodoo, essenzialmente sovrascrivere i primi byte delle funzioni
   con un'istruzione JMP FAR <indirizzo>. C'è una libreria su Microsoft
   Research, chiamata detours, che fa questo e molto altro, ma non so
   se e come funziona in kernel mode. Al massimo il sorgente è incluso.
   Sennò prendi il manualone Intel e ti leggi che opcode ha JMP FAR
 - problemino: i driver che usano direttamente le istruzioni IN e OUT
   scavalcheranno il tuo hook a pie' pari. Non mi viene in mente niente
   riguardo a questo
 - casomai, chiedi su comp.os.ms-windows.programmer.nt.kernel-mode o
   sulla mailing list NTDEV di OSR, anche se so già le loro risposte
   ("dimmi come si chiama il tuo prodotto, così eviterò di comprarlo")
 - chiarisco una cosa: io, essenzialmente, non capisco un accidenti di
   programmazione kernel-mode, ho solo assorbito per immersione una
   serie di nozioni. Potrei anche essermi sbagliata orribilmente su
   tutto
-- 
 < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
     Don't stand, REACT!      version 0.0.20. C, C++ and ASM developers
                              and beta testers are welcome!

 comprarlo")
Non c'e` problema, tutto cio` mi serve perche` anche io devo evitare di
comprare un prodotto. :)
--
Lorenzo

 evitare di comprare un prodotto. :)
mi riesci a dire di che si tratta?


 eeeh, che ci vuoi fare, loro sono professionisti
In realta` avevo ciccato newsgroup (qualcosa sotto a microsoft.*). In
seguito ho postato su quello che mi hai suggerito e loro mi hanno dato
parecchi consigli vincenti (anche se alla fine mi sono dovuto sbattere
parecchio per trovare la soluzione).
Se leggi il thread su comp.os.ms-windows.programmer.nt.kernel-mode
potrai vedere tutti gli sviluppi che ha avuto la vicenda.
--
Lorenzo

Ciao Lorenzo,
io ho un problema con Win2000/XP e un plug-in per Win98 e una scheda ISA.
Abbiamo un problema simile???
Grazie.
Salvo.
"Lorenzo Lutti" <lorenz...@DOHtiscalinet.it> ha scritto nel messaggio
news:l6Jo9.6706$RO.1...@twister1.libero.it...
