WinCE 流接口驅動中設備句柄的傳輸過程

驅動程序是通過設備句柄來控制設備的,應用程序要控制設備,也需要獲得設備句柄,然後使用驅動程序體提供的DeviceIoControl接口來控制設備。那麼應用程序是如何獲得設備句柄的呢?


通常流接口驅動程序會使用兩個結構體,驅動上下文結構體和設備上下文結構體。設備句柄會保存在設備上下文結構體中,驅動上下文結構體會保存設備上下文結構體的地址。這樣通過驅動上下文結構體就能夠得到設備句柄。下面我定義一個驅動上下文指針dwDriverContext來說明這個指針是如何被傳遞的。

 

1、  在執行USBDeviceAttach的函數中,函數ActivateDevice用來激活流接口,它將dwDriverContext的值寫入註冊表中。

2、  當dwDriverContext被寫入註冊表後,設備管理器會調用Cam_Init 函數。Cam_Init 函數執行後會從註冊表取得dwDriverContext的值。

3、  應用程序使用CreatFile這個API時,驅動程序中的Cam_Open函數會被調用,Cam_Open執行時會獲得Cam_Init 函數的到的dwDriverContext。CreatFile會得到Cam_Open返回的dwDriverContext。在應用程序中,dwDriverContext會以句柄的形式出現,這時應用程序就可以通過CreatFile返回的句柄來控制設備了。

4、  應用程序使用DeviceIoControl時會把CreatFile返回的句柄(其實就是dwDriverContext)傳回給驅動程序的CAM_IOControl函數。


以上就是設備句柄在驅動程序與應用程序之間的傳遞過程。

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/lovelynn/archive/2008/12/04/3446024.aspx

發佈了15 篇原創文章 · 獲贊 13 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章