Pocket PC 的串行驱动程序






4.69/5 (21投票s)
如何向 Pocket PC 设备添加新的串行端口以及如何驱动该端口。
引言
本文档展示了如何创建 Windows CE 串行驱动程序。这将向设备添加一个新的串行 (COM) 端口,允许应用程序以与标准硬件端口相同的方式使用此端口。新的虚拟端口提供与硬件端口相同的接口。
背景
创建虚拟端口的目的是允许应用程序(例如 Tomtom 和 Destinator)接收连接到硬件串行端口 (COM1) 的 GPS 天线的数据,并保存接收到的 GPS 信号以便在需要时回放并模拟实际驾驶。
使用代码
该驱动程序是一个 DLL,它导出以下函数:
COM_Init
COM_Deinit
COM_Open
COM_Close
COM_Read
COM_Write
COM_Seek
COM_IOControl
COM_PowerDown
COM_PowerUp
DEMODLL_API DWORD COM_Init( LPCTSTR pContext, LPCVOID lpvBusContext ); DEMODLL_API BOOL COM_Deinit( DWORD hDeviceContext ); DEMODLL_API DWORD COM_Open( DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode ); DEMODLL_API BOOL COM_Close( DWORD hOpenContext ); DEMODLL_API BOOL COM_IOControl( DWORD hOpenContext, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut ); DEMODLL_API void COM_PowerUp( DWORD hDeviceContext ); DEMODLL_API void COM_PowerDown( DWORD hDeviceContext ); DEMODLL_API DWORD COM_Read( DWORD hOpenContext, LPVOID pBuffer, DWORD Count ); DEMODLL_API DWORD COM_Write( DWORD hOpenContext, LPCVOID pBuffer, DWORD Count ); DEMODLL_API DWORD COM_Seek( DWORD hOpenContext, long Amount, WORD Type );
在当前的示例驱动程序中,我们将新的串行端口映射到硬件端口(管理的端口),因此对新端口的所有操作都将在管理的端口上执行相同的操作。我们还会打开一个日志文件,并将所有执行的操作写入此日志。
另一个重要部分是如何将驱动程序安装到 Pocket PC 设备上。DLL 文件必须放置在 \Windows 目录中,并且注册表必须使用以下信息进行更新:
HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial6 Dll = DemoDriver.dll FriendlyName = Demo Driver Index = 6 Order = 2 Prefix = COM ManagePort = 1
在此示例中,我们创建了一个虚拟端口 COM6,但这可以是 1 到 9 之间的任何数字。ManagePort
条目不是操作系统创建串行端口所必需的。此条目由我们的演示驱动程序用于定义要映射到的硬件端口号。
安装驱动程序的 easiest 方法是创建一个 CAB 文件,该文件会将 DemoDriver.dll 文件复制到 \Windows 目录并更新所有注册表设置。我们提供了一个示例 .inf 文件,可与 CabWiz 一起用于创建 CAB 文件。
[Version]
Signature = "$Windows NT$"
Provider = "Code Project"
CESignature = "$Windows CE$"
[CEStrings]
AppName = "DemoDriver"
InstallDir = %CE2%
[Strings]
reg_path = Drivers\Builtin\Serial6
[DefaultInstall]
CopyFiles = Dllfiles
Addreg = Regkeys
[SourceDisksNames]
1 =, "Common Files",, .
[SourceDisksFiles]
DemoDriver.dll = 1
[DestinationDirs]
Dllfiles = 0, %CE2%
[Dllfiles]
"DemoDriver.dll"
[Regkeys]
HKLM,%reg_path%,Dll,0x00000000,DemoDriver.dll
HKLM,%reg_path%,Prefix,0x00000000,COM
HKLM,%reg_path%,FriendlyName,0x00000000,Demo Driver
HKLM,%reg_path%,Index,0x00010001,6
HKLM,%reg_path%,Order,0x00010001,2
HKLM,%reg_path%,ManagePort,0x00010001,1
有了 CAB 文件后,我们将其复制到设备并单击以安装。需要软重置才能使操作系统开始运行驱动程序。
为了使驱动程序在 WM5 设备上工作,我们必须对 DLL 进行签名。在此示例中,我们使用了本文档中提供的方法:在我们的应用程序的 CAB 中部署自己的内置证书(感谢作者)。我们的示例包含一个自签名证书,名为 MyCert.pfx,以及我们在创建 cab 文件时提供给 CabWiz 的 Cab\PreXML_MyCert.xml 文件。
要对驱动程序进行签名,我们调用:
signtool.exe sign /f MyCert.pfx DemoDriver.dll
要创建 CAB 文件,我们运行:
CabWiz.exe driver.inf /prexml PreXML_MyCert.xml
历史
- 2006 年 3 月 7 日 - 首次发布。
- 2006 年 3 月 27 日 - 添加了代码签名以支持 WM5。