我尝试将流设备驱动程序从 WinCE 5 迁移到 WinCE 6,在使用 CreateFile() 打开接口时遇到问题。但从一开始:
我将以下注册表信息添加到 Platform.reg:
[HKEY_LOCAL_MACHINE\Drivers\MyDriver\DRV]
"Index"=dword:1
"DLL"="MyDriver.DLL"
"Prefix"="DRV"
在 Platform.bib 我包括我的驱动程序如下:
MyDriver.dll $(_FLATRELEASEDIR)\MyDriver.dll NK SHK
驱动程序已添加到我的操作系统设计的 dirs 文件中,我可以在我的 Visual Studio 解决方案中成功构建驱动程序。
在我的应用程序中,我通过 ActivateDeviceEx 手动加载驱动程序:
#define DRIVERSHELL_REG_KEY (TEXT("Drivers\\MyDriver\\DRV"))
hDriverShell = ActivateDeviceEx( DRIVERSHELL_REG_KEY,
NULL,
0,
NULL
);
这里的结果既不是0也不是INVALID_HANDLE_VALUE,所以我认为驱动加载成功。
当我尝试使用 CreateFile() 打开驱动程序时:
hDS = CreateFile(TEXT("DRV1:")
, GENERIC_READ|GENERIC_WRITE
, FILE_SHARE_READ | FILE_SHARE_WRITE
, NULL
, OPEN_EXISTING
, FILE_ATTRIBUTE_NORMAL
, 0);
GetLastError 返回 1359。错误说明如下:
1359 ERROR_INTERNAL_ERROR(描述:安全帐户数据库包含内部不一致)
如前所述,驱动程序是从工作的 WinCE 5 映像迁移而来的。所有流接口函数都在驱动程序的源代码中声明(xxx_init()、xxx_open()...)。有谁知道可能导致此错误的原因或我需要仔细查看哪些细节?
编辑:谢谢你的回答!我现在成功调试了图像和实现的驱动程序。“ActivateDeviceEx()”调用“XXX_Init()”,“CreateFile()”调用“XXX_Open()”。我确实在每个驱动程序函数中设置了一个断点并到达它。到目前为止,一切都很好。我现在找到了问题,即当我插入设备(操纵杆,驱动程序是 HID 操纵杆驱动程序)时未调用函数“HIDDeviceAttach()”。然后一些句柄为 0 并且 XXX_Open() 将内部错误设置为 LastError。操作系统如何知道 USB 总线上插入了哪个设备以及必须调用哪个 HIDDeviceAttach() 函数(鼠标/键盘/操纵杆)?[顺便说一句:我应该就此提出一个新问题吗?]