//=====================================================================
//TITLE:
// 获取WinCE已加载驱动的信息
//AUTHOR:
// norains
//DATE:
// Monday 22- February-2010
//Environment:
// WINDOWS CE 5.0
//=====================================================================
众所周知,WinCE下的驱动,只要不是通过RegisterDevice进行加载,那么我们都能够在注册表找到蛛丝马迹。说明白点,我们只要搜寻HKEY_LOCAL_MACHINE/Driver/Active/下的键值,就知道哪些驱动已经被成功加载,然后再根据其已加载信息,我们就能在BuiltIn获取更多。
所以,本文的立足点,就在于注册表。为了简化操作,关于注册表的操作,我会使用一个CReg类,该类的完全代码可以在此找到:(http://blog.csdn.net/norains/archive/2007/06/20/1659925.aspx)
在开始讲述之前,我们先来约定一些数值。因为驱动各有不同,所以所需要的参数是不一致的。但有一些数值,却是必备的:驱动名,驱动前缀,驱动序号,驱动的文件。所以这四个形参我们单独列出来,至于其它的数值,我们之前用map对应即可。因此,我先声明如下一个结构体:
我们获取已加载驱动的函数定义如下:
当函数执行失败,直接返回FALSE;如果执行成功,那么会返回TRUE,并且将信息存储到vtDeviceInfo中。pCallbackFunc是回调函数,每找到一个驱动信息就会调用该函数。如果该函数返回为TRUE,则继续搜索;反之,则停止。如果不使用回调函数,那么直接设置为NULL即可。
关于该回调函数,定义如下:
接下来,我们看看GetActive函数的实现部分:
函数意思很明了,无非是枚举Active下的键值,然后将相关信息送到AnalyzeDeviceInfo中进行分析。
AnalyzeDeviceInfo的实现如下:
函数也没什么比较晦涩的地方,无非就是列举注册表的数值。不过,这里稍微有点不同,但为KEY值时,我们会将注册表的路径传递给AnalyzeBuiltInInfo函数对BuiltIn字段进行分析。如果是NAME值,那么我们直接忽略过去,因为该数值我们采用的是BuiltIn的子根值。
那么接下来,我们就是看AnalyzeBuiltInInfo函数了:
函数很简单,也只有DLL,Prefix和Index我们才进行分析,其它的就直接丢给AnalyzeExtendParam函数即可。
这里还有一小点,就是ConvertToTSTRING函数的调用。因为对于Win32 API函数来说,返回的是一个VOID指针的缓冲区,如果想转换为UNICODE的字符串,那么我们需要将高位和低位互换。所以,这才有了ConvertToTSTRING函数:
最后的最后,就是AnalyzeExtendParam函数,也就是最简单的函数了:
分享到:
相关推荐
3. **加载驱动**:在应用程序中,可以使用LoadLibrary函数加载已注册的驱动DLL。该函数返回一个模块句柄,后续可通过GetProcAddress获取驱动中的函数地址并调用。 4. **使用和卸载驱动**:一旦驱动被加载,应用程序...
在WinCE中,动态加载驱动通常涉及以下几个关键步骤: 1. **创建设备对象**:动态加载前,需要先创建一个设备对象来代表驱动程序。设备对象是内核模式下的数据结构,用于标识驱动程序提供的服务。 2. **注册驱动...
1. **驱动查看与管理**:调试助手能够显示当前WinCE系统中已加载的驱动程序列表,让开发者清楚地了解系统运行状态。此外,它还提供了卸载驱动的选项,这对于排查问题或更换驱动以测试不同版本是非常方便的。 2. **...
2. **获取驱动源码**:从芯片制造商的官方网站或者开源社区(如GitHub)获取适用于Wince的驱动源码。如果源码不兼容Wince,可能需要进行移植工作。 3. **驱动编译**:使用Wince的SDK(软件开发工具包)和DDK(设备...
总结来说,"Wince加载GIF动画"涉及到Wince平台上的图形处理、第三方库的使用、文件解析以及性能优化等多方面的知识。通过AnimationControl.msi和AnimationControl提供的资源,开发者可以构建出适应Wince环境的GIF...
可加载驱动共享公共接口,允许应用程序通过标准API访问设备。 2. 驱动程序层次 - **独立驱动**:这种类型的驱动程序结合了Model Device Driver(MDD)和Platform Dependent Driver(PDD)的功能,减少了层间通信,...
在Windows CE(简称WinCE)操作系统环境下,摄像头驱动程序是实现设备硬件与系统软件交互的关键组件。微软为开发者提供了一套开源的解决方案,包括WEBCAM.DLL驱动和摄像头测试程序,以支持在WinCE平台上集成和调试...
通过这个文件,系统可以正确地加载和配置驱动。 6. **中断处理**: 无线网卡驱动通常需要处理硬件中断,这涉及中断服务例程(ISR)的编写。ISR快速响应硬件事件,进行初步处理,并触发适当的上下文切换到低优先级...
- 获取MAC地址通常需要直接访问硬件寄存器,若驱动未提供接口,需要查看具体网卡驱动源码,如参考目录WINCE500\PUBLIC\COMMON\OAK\DRIVERS\NETCARD下的代码。 12. **Windows XP Embedded与WinCE的区别**: - ...
1. **加载驱动**:输入系统(GWES)在启动过程中加载键盘驱动。驱动的DLL名称通常从注册表`HKEY_LOCAL_MACHINE\Hardware\DeviceMap\KEYBD\Drivername`中获取。若未找到,则使用默认的`Keybddr.dll`。 2. **加载DLL并...
驱动程序开发者需要在注册表中创建相应的键值,以使设备管理器能够识别和加载驱动。这通常包括设备类、硬件ID、驱动程序库名等。 3.3 编译程序 为了构建驱动程序库文件,你需要一个支持Windows CE的编译环境,如...
加载驱动: 加载DLL驱动通常涉及调用LoadLibrary函数,但在C#中,我们需要使用P/Invoke技术来调用WinAPI。首先,你需要在项目中定义LoadLibrary的原型: ```csharp using System.Runtime.InteropServices; ...
在C语言程序中,可以先加载GPI.dll,然后调用导出的函数,例如`SetGpioLevel()`和`GetGpioLevel()`,来设置和获取GPB1口的电平。这样,开发者可以在应用程序层面专注于业务逻辑,而将硬件交互的复杂性交给驱动和库...
2. GWESEXE从注册表中读取键值`[HKEY_LOCAL_MACHINE\Hardware\DeviceMap\KEYBD\DriverName]`获取键盘驱动程序的DLL名称。 3. 如果没有找到相应的键值,则使用默认名称`Keybddr.dll`。 4. 加载DLL并验证函数入口点的...
- **注册表操作**: 读取注册表中的驱动信息,以便正确加载。 **2. 卸载驱动** - **API调用**: 通过`FreeLibrary`函数来卸载已加载的DLL。 - **注意事项**: 在卸载前确保没有其他进程正在使用该驱动。 #### 三、...
这通常通过注册表项和设备树来完成,确保系统在启动时能找到并加载驱动。 5. **同步协议**: 实现PC与WinCE设备同步,需要理解同步协议,如ActiveSync或Windows Mobile Device Center。这些协议定义了数据交换的...
- 在注册表中添加键值:在`HKEY_LOCAL_MACHINE\Drivers\BuiltIn`下创建注册键可以让系统在启动时自动加载驱动。 - 动态激活:通过应用程序调用`ActivateDeviceEx`函数,可以在运行时动态加载驱动。 2. **@...
- 获取IRQ和SYSINTR信息。 - 设置MCU内部的中断控制寄存器以响应中断。 - 通过事件对象与IST同步。 **2. IST的工作原理** - **创建与启动**: 在设备驱动初始化阶段,IST通常会被创建并启动。 - **事件等待**: IST...
- **HWInit**:初始化函数,在驱动加载时调用。 - **HWDeinit**:卸载函数,在驱动卸载时调用。 - **HWOpen**:打开串口时调用。 - **HWClose**:关闭串口时调用。 - **HWGetBytes**:读取串口接收缓冲区中的数据。 ...