1. 程式人生 > >Windows CE 5.0:驅動程式---裝置介面

Windows CE 5.0:驅動程式---裝置介面

裝置介面

釋出日期: 11/1/2004 | 更新日期: 11/1/2004

裝置介面類是應用程式可用來訪問裝置驅動程式的功能的方法。它們向收到通知的任何一方表明特定介面存在。裝置驅動程式可以具有多個裝置介面類,也可以沒有任何裝置介面類。

IClass 登錄檔子項引用裝置介面和它們的關聯 GUID。宣告介面的頭 (.h) 檔案通常會定義該 GUID 並且將該 GUID 與介面相關聯。標頭檔案通過定義該 GUID 將介面與該 GUID 相關聯。必須通過 IClass 登錄檔值或者通過呼叫 AdvertiseInterface 來公開介面類。還可以定義自己的介面類。

對於裝置介面沒有任何限制。訪問介面的含義取決於介面。

下面的程式碼示例使用一個示例 GUID 說明了標頭檔案通常如何定義裝置介面 GUID。

#define DEVCLASS_IFCNAME_STRING TEXT("{12345678-1234-1234-1122334455667788}")
#define DEVCLASS_IFCNAME_GUID { 0x12345678, 0x1234, 0x1234, { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88 } }

裝置管理器中的公開介面的驅動程式通過在傳遞到 ActivateDeviceEx 中的登錄檔項中適當地設定 IClass 值集來公佈這一事實。通過 AdvertiseInterface

,裝置驅動程式公告它在登錄檔中公開哪些裝置介面。該公告可由呼叫 RequestDeviceNotifications 的任何應用程式或驅動程式使用。應用程式或驅動程式可以通過呼叫 StopDeviceNotifications 停止接收裝置通知。通過這些函式,可以訪問裝置介面的 GUID 和名稱。GUID 描述了裝置介面,而該名稱能夠唯一地標識該裝置介面的多個例項。例如,一般性流介面具有一個 GUID,而名稱“COM1:”和“DSK1:”引用了該一般性流介面的兩個截然不同的例項。

兩個不同的裝置介面類 GUID 可能具有同名例項。名稱僅在由裝置介面類 GUID 命名的裝置介面的訪問方法的上下文中才有意義。

裝置驅動程式只有在完整實現裝置介面時才應該匯出該裝置介面。與驅動程式的任何互動都要求得到它公佈的裝置介面的全部支援。

通過呼叫 AdvertiseInterface,裝置驅動程式可以顯式傳送通知。這主要適用於可移動媒體儲存裝置以及其他在載入時尚未準確確定它們將公開哪些介面的驅動程式。

裝置驅動程式應當顯式表明它們可以接受裝置控制代碼訪問請求。如果裝置驅動程式公開基於裝置控制代碼的介面,則驅動程式應當能夠在該裝置驅動程式的其他函式中接受等於零的 hOpenContext 值。hOpenContext 值為零表明是在裝置級別請求訪問,並且可能使用了不同的 OS 級別安全性。在它們的 XXX_Open (Device Manager) 函式中讀取 AccessCode ShareMode 的裝置驅動程式應該適當地處理裝置控制代碼訪問請求。GUID 用來表明對基於裝置的訪問和基於單個裝置控制代碼的介面的支援。

有關查詢由特定裝置通過名稱或檔案控制代碼公開的介面的資訊,請參閱 Device File Names

下表顯示了在其中定義了介面的 %_WINCEROOT% 下的預定義介面和標頭檔案。

介面 標頭檔案

BATTERY_DRIVER_CLASS

Public/Common/OAK/Inc/Battery.h

BLOCK_DRIVER_GUID

Public/Common/SDK/Inc/Storemgr.h

CDDA_MOUNT_GUID

Public/Common/SDK/Inc/Storemgr.h

CDFS_MOUNT_GUID

Public/Common/SDK/Inc/Storemgr.h

DEVCLASS_CARDSERV_GUID

Public/Common/DDK/Inc/Cardserv.h

Public/Common/DDK/Inc/Cardsv2.h

DEVCLASS_DISPLAY_GUID

Public/Common/OAK/Inc/Winddi.h

DEVCLASS_KEYBOARD_GUID

Public/Common/SDK/Inc/Keybd.h

DEVCLASS_STREAM_GUID

Public/Common/SDK/Inc/Pnp.h

DMCLASS_PROTECTEDBUSNAMESPACE

Public/Common/DDK/Inc/Devload.h

FATFS_MOUNT_GUID

Public/Common/SDK/Inc/Storemgr.h

FSD_MOUNT_GUID

Public/Common/SDK/Inc/Storemgr.h

NLED_DRIVER_CLASS

Public/Common/SDK/Inc/NLED.h

PMCLASS_BLOCK_DEVICE

Public/Common/SDK/Inc/Pm.h

PMCLASS_DISPLAY

Public/Common/SDK/Inc/Pm.h

PMCLASS_GENERIC_DEVICE

Public/Common/SDK/Inc/Pm.h

PMCLASS_NDIS_MINIPORT

Public/Common/SDK/Inc/Pm.h

STORE_MOUNT_GUID

Public/Common/SDK/Inc/Storemgr.h

STOREMGR_DRIVER_GUID

Public/Common/SDK/Inc/Storemgr.h

UDFS_MOUNT_GUID

Public/Common/SDK/Inc/Storemgr.h

裝置介面的其他預定義 GUID 包含在各種登錄檔檔案中。要查詢其他預定義 GUID,請在 %_WINCEROOT%/Public/Common/OAK/Files/Common.reg 檔案或驅動程式特有的登錄檔檔案中搜索 IClass 值。驅動程式特有的登錄檔檔案包含在與裝置驅動程式相同的目錄中。有關驅動程式位於原始碼中的哪些位置的資訊,請參閱 Device Driver Source Code

另請參閱