WinCE驱动的动态卸载

wince卸载处理.CAB 一款卸载程序的绿色软件,可以看到程序的安装路径,非常方便. 立即下载
               

//=====================================================================
//TITLE:
//    WinCE驱动的动态卸载
//AUTHOR:
//    norains
//DATE:
//    Wednesday 21-April-2010
//Environment:
//    Windows CE 5.0
//=====================================================================

 

    在之前的一篇《WinCE驱动的动态加载》(http://blog.youkuaiyun.com/norains/archive/2010/02/22/5316923.aspx)中有谈到,驱动的卸载可以通过调用DeactivateDevice函数。但在那篇文章中,我们传递给DeactivateDevice函数的句柄形参是ActivateDeviceEx函数返回的。如果不是我们主动调用ActivateDeviceEx函数,而是系统自己加载的驱动,我们能不能动态卸载呢?

 

    答案是肯定的。

 

    难点只在于,我们如何获取已加载的驱动句柄。具体点来说,如果我想卸载串口的驱动,并且我也只知道它名为"COM1:",我如何将它转换为句柄?

 

    其实问题并不难,因为微软早就为我们准备好了,我们只要调用FindFirstDevice函数即可。该函数的原型如下:
HANDLE FindFirstDevice(  DeviceSearchType searchType,  LPCVOID pvSearchParam,  PDEVMGR_DEVICE_INFORMATION pdi);

 

    形参只有三个,很简单。

 

    searchType指示的是pvSearchParam传入的类型,有如下数值可以选择:
     1.DeviceSearchByLegacyName:L"COM*" for all COMx: devices.
     2.DeviceSearchByDeviceName:L"COM*" for all COMx devices.
     3.DeviceSearchByBusName:L"PCI_0_3*" for PCI_0_3_0, PCI_0_3_1 and so on.
     4.DeviceSearchByGuid:Pointer to a GUID.
     5.DeviceSearchByParent:Activation handle value from ActivateDeviceEx.

 

  简单点来说,如果我们传递给pvSearchParam的是"COM1:",那么searchType取值应该为DeviceSearchByLegacyName;如果是"COM1",则为DeviceSearchByDeviceName。
  
  Pdi是返回数据的存储缓存。这里有一个小细节需要注意,pdi.dwSize在函数调用前必须要设置,否则函数很可能无法执行成功。
  
  还有一点不要搞混,FindFirstDevice返回的句柄不能直接传递给DeactivateDevice函数,因为该句柄是用来给FindNextDevice使用的,和设备无关。而传递给DeactivateDevice函数的句柄,是pbi的hDevice成员。
  
  要点我们理清之后,剩下的函数实现就非常简单了。我们声明一个函数名为Unload,它可以智能判断传入的形参是否带":",进而选择相应的搜索方式。闲话不多说,我们来看看该函数的完整实现:
  
BOOL Unload(const TSTRING &strDev){ BOOL bRes = FALSE;  HANDLE hFind = INVALID_HANDLE_VALUE; __try {    if(strDev.empty() != FALSE)  {   __leave;  }  //确定搜索的方式  DeviceSearchType searchType;  if(strDev[strDev.size() - 1] == ':')  {   searchType = DeviceSearchByLegacyName;  }  else  {   searchType = DeviceSearchByDeviceName;  }  DEVMGR_DEVICE_INFORMATION devInfo = {0};  devInfo.dwSize = sizeof(devInfo);  //寻找驱动的句柄  hFind = FindFirstDevice(searchType,strDev.c_str(),&devInfo);  if(hFind == INVALID_HANDLE_VALUE)  {   __leave;  }  //卸载驱动  bRes = DeactivateDevice(devInfo.hDevice); } __finally {  FindClose(hFind); }  return bRes;}
  
  
  函数写完之后,剩下的事情就异常简单了。比如我们需要卸载设备的串口驱动,只要简单地写下这行代码:
  Unload(TEXT("COM1:"));

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.youkuaiyun.com/jiangjunshow

RTL8192C 全套驱动,含Android,Linux,wince5,wince6,win等,可用于 RTL8192C 全套驱动,含Android,Linux,wince5,wince6,win等,可用于手机、嵌入设备的WIFI驱动 立即下载

相关推荐

wince注册表操作(创建加载卸载驱动)

wince5.0 c#控件源码,注册表操作(创建加载卸载dll驱动)。

wince强制卸载系统自启动驱动

最近写了个驱动,是开机自启动的。但是在调试的时候想卸载这个驱动释放其占用的某些资源,发现使用RegisterDevice这些重新加载然后再调用DeactivateDevice卸载却无效。后来就在网上找了一下。发现是可以实现这个效果的。下面把这个记录一下: 查找出设备驱动,然后卸装: BOOL CD3GHelpDlg::Unload(CString strDev) { BOOL bRes = ...

mmdev 183

RTL8192CU_8188CUS_8188CE-VAU_WinCE5WIFI网卡驱动MIPSII版

RTL8192CU_8188CUS_8188CE-VAU_WinCE5WIFI网卡驱动MIPSII版驱动

WinCE控制面板应用程序的删除

<br />1. 删除控制面板中某应用程序,方法1:<br />打开 ${WinCE安装目录}/PUBLIC/WCESHELLFE/OAK/CTLPNL/CPLMAIN/cpltable.cpp<br />找到如下内容:CPLAPPLETINFO rgApplets[]<br />然后注释掉想去掉的应用程序那行,比如:<br />//{L"CPL_Password",NULL, 1, IDI_PASSWD, IDS_PASSWD_NAME, IDS_PASSWD_DESC, IDS_PASSWD_TITLE

jjunjoe的专栏 4980

WinCE驱动的动态加载和卸载.(含源码)

WinCE驱动的动态加载和卸载,并附带了一个小程序,可以指定要加载或卸载的DLL。

RTL8192CU_8188CUS_8188CE-VAU_WinCE6_v1.1.1364.20110221.1615.cab

RTL8192CU_8188CUS_8188CE-VAU_WinCE6_v1.1.1364.20110221.1615.cab

wince驱动学习笔记(vs2005实现流驱动动态加载与卸载 1)

作者:wanghanjiett 转自:http://blog.youkuaiyun.com/wanghanjiett/article/details/6849670 前几天学习了wince流驱动的一些知识,总结如下。本人菜鸟,如有错误还望大家不吝赐教 内容主要分三部分: 一、用vs2005生成流驱动所需的动态链接库(.dll文件),生成注册表文件(.reg文件) 二、

老瓦的笔记本 629

3 种 VLA 模型动作表示方案对比:RT-2 离散化 vs π0 流匹配 vs HybridVLA 混合架构

本文深入对比了三种VLA模型动作表示方案:RT-2离散化、π0流匹配和HybridVLA混合架构。分析了各自的技术原理、优势与局限性,并提供了应用场景选择指南,帮助研究者在具身智能领域做出更优的技术选型决策。

weixin_29031161的博客 319

WinCE驱动的动态加载

//===================================================================== //TITLE: //    WinCE驱动的动态加载 //AUTHOR: //    norains //DATE: //    Monday 22- February-2010 //Environment: //     WINDOWS

DMT专栏 572

从零到一:桌面宠物的硬件架构设计与工程实践

本文详细介绍了基于STM32F103C8T6主控平台的桌面宠物机器人硬件架构设计与工程实践。内容涵盖电源管理、舵机控制、PCB布局及系统调试等核心环节,为硬件爱好者提供从零到一的完整开发指南,助力打造稳定可靠的智能桌面伴侣。

alice7model的博客 1113

龙迅LT9611UXC芯片简介:Dual-Port MIPI DSI/CSI to HDMI2.0 with Audio

龙迅半导体推出的LT9611UXC是一款高性能MIPI转HDMI2.0转换器,支持DSI/CSI接口转换,兼容多种视频格式(RGB/YCbCr),最高支持4K@60Hz输出。该芯片集成音频处理(I2S/SPDIF)、色彩空间转换和3D功能,适用于机顶盒、电视盒子等消费电子及车载设备。提供工业级(-40℃~+85℃)和车规级(AEC-Q100认证)版本,采用QFN64封装。

MB16698594834的博客 1334
上一篇: 结构体等值的比较
下一篇: vcf文件分解
小树林后面
博客等级 码龄8年 21粉丝 248原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值