2012-09-01 30 views
5

Tôi có mã nguồn trình điều khiển và hiểu nó. Tôi viết một ứng dụng dưới chế độ người dùng. Tôi muốn gọi các chức năng của tài xế. Tôi nên làm như thế nào?Giao diện cuộc gọi của ứng dụng C++ của tôi như thế nào?

một số mã tài xế tiêu đề:

lái xe
... 
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); 
... 

đang cpp mảnh:

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) 
{ 
.... 
} 

Trả lời

6

Bạn không thể gọi trực tiếp kernel-mode chức năng điều khiển API. Thay vào đó, bạn sẽ sử dụng IOCTL API.

Usual kịch bản công việc cũng giống như this:

  1. Người dùng chế độ ứng dụng viết một yêu cầu IOCTL, đi qua trong thông tin về các hàm được gọi, cũng như một con trỏ tới ngăn xếp đối số của nó.
  2. Trình điều khiển chế độ hạt nhân gửi yêu cầu, sao chép các đối số lên ngăn xếp riêng của nó, gọi hàm và chuyển kết quả lại cho người gọi trong bộ đệm đầu ra IOCTL.
  3. Người gọi sẽ lấy kết quả của hoạt động IOCTL và tiến hành vì nó sau một cuộc gọi hàm DLL bình thường.
+0

Cảm ơn bạn. Tôi nên đọc một số tài liệu về chế độ hạt nhân. – Wayman

Các vấn đề liên quan