2012-09-01 6 views
5

Ho un codice sorgente del driver e lo capisco. Scrivo un'app in modalità utente. Voglio chiamare le funzioni del driver. Come devo fare?In che modo la mia app C++ chiama l'interfaccia del driver?

po 'di codice del driver intestazioni:

conducente
... 
BYTE ReadRegister(DEVICE_CONTEXT *pDevice, BYTE SlavAddr, BYTE SlavMode, WORD RegAddr, BYTE* pData, BYTE DataCont); 

BYTE WriteRegister(DEVICE_CONTEXT *pDevice, BYTE SlavAddr, BYTE SlavMode, WORD RegAddr, BYTE* pData, BYTE DataCont); 
... 

pezzi di codice cpp:

BYTE ReadRegister(DEVICE_CONTEXT *pDevice, BYTE SlavAddr, BYTE SlavMode, WORD RegAddr, BYTE* pData, BYTE DataCont) 
{ 
..... 
} 

//----------------------------------------------------------------------------- 
BYTE WriteRegister(DEVICE_CONTEXT *pDevice, BYTE SlavAddr, BYTE SlavMode, WORD RegAddr, BYTE* pData, BYTE DataCont) 
{ 
.... 
} 

risposta

6

Non si poteva chiamare direttamente in modalità kernel funzione del driver API. Dovrai utilizzare l'API IOCTL.

usuale scenario workflow è come this:

  1. I messaggi applicativi modalità utente una richiesta IOCTL, passando informazioni sulla funzione da chiamare, così come un puntatore alla sua pila argomento.
  2. Il driver in modalità kernel invia la richiesta, copia gli argomenti su il proprio stack, chiama la funzione e restituisce i risultati al chiamante in il buffer di output IOCTL.
  3. Il chiamante riceve i risultati dell'operazione IOCTL e procede come se fosse dopo una normale chiamata di funzione DLL.
+0

Grazie. Dovrei leggere alcuni documenti sulla modalità kernel. – Wayman