2012-09-01 15 views
5

Tengo un código fuente de controlador y lo entiendo. Escribo una aplicación en modo de usuario. Quiero llamar funciones de controlador. ¿Cómo debo hacer?¿Cómo mi aplicación C++ llama a la interfaz del controlador?

algún código piloto encabezados:

... 
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); 
... 

conductor piezas de código 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) 
{ 
.... 
} 

Respuesta

6

No se podía llamar directamente a modo de núcleo función API conductor. En su lugar, deberá usar IOCTL API.

escenario de flujo de trabajo habitual es como this:

  1. Los mensajes de aplicaciones en modo de usuario una solicitud IOCTL, pasando información acerca de la función a ser llamada, así como un puntero a su pila argumento.
  2. El controlador kernel-mode distribuye la solicitud, copia los argumentos en su propia pila, llama a la función y devuelve los resultados a la persona que llama en el buffer de salida IOCTL.
  3. La persona que llama recoge los resultados de la operación IOCTL y procede como lo haría después de una llamada normal a la función DLL.
+0

Gracias. Debería leer algunos documentos sobre kernel-mode. – Wayman

Cuestiones relacionadas