Chinaunix首页 | 论坛 | 博客
  • 博客访问: 345849
  • 博文数量: 97
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 636
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-12 22:41
文章分类

全部博文(97)

文章存档

2017年(8)

2015年(87)

2014年(2)

我的朋友

分类: 嵌入式

2015-06-13 12:04:56

HANDLE ActivateDeviceEx(
  LPCWSTR lpszDevKey,
  LPCVOID lpRegEnts,
  DWORD cRegEnts,
  LPVOID lpvParam
  );
  参数解释:
  lpszDevKey
  字符串指针,指向注册表中包含驱动信息的键,这个键应当包含驱动程序的DLL名、前缀、索引和入口点等信息。
  lpRegEnts
  指向REGINI结构体的数组,这个数组中定义了一些需要被添加到激活设备列表中的信息(ActivateDevice),这些信息填写后,驱动程序才被加载。如果是总线驱动的话,这里应该设置成NULL。
  cRegEnts
  lpRegEnts指向REGINI结构体的数组中元素的个数。
  lpvParam
  通过这个指针向已经加载的驱动程序传递参数,而不必将参数保留在注册表中,这个参数将以第2参数的角色被传递到XXX_Init(Device Manager)函数入口中。
  返回值
  如果返回具体设备的句柄,则代表操作成功,否则为失败。设备句柄可以在调DeactivateDevice函数的时候作为参数使用。


//动态卸载驱动
BOOL DeactivateDevice(
  HANDLE hDevice
);

再附上代码:

点击(此处)折叠或打开

  1. /*
  2.      * 创建注册表键HKEY_LOCAL_MACHINE\Drivers\BuiltIn\MFL
  3.      */

  4.     nErr = RegCreateKeyEx(HKEY_LOCAL_MACHINE, L"Drivers\\BuiltIn\\MFL", 0, L"", 0, 0, NULL, &hDrvkey, &dwTmp);
  5.     if (nErr != ERROR_SUCCESS) {
  6.         UpdataMsgShow(_T("创建驱动注册表子键失败\r\n"));
  7.         return false;
  8.     }
  9.     else {
  10.         RegSetValueEx(hDrvkey,L"Prefix",0,REG_SZ,(LPBYTE)L"MFL",(wcslen(L"MFL")+1)*sizeof(WCHAR));
  11.         RegSetValueEx(hDrvkey,L"Dll",0,REG_SZ,(LPBYTE)L"MFlash.dll",(wcslen(L"MFlash.dll")+1)*sizeof(WCHAR));
  12.         RegSetValueEx(hDrvkey,L"FriendlyName",0,REG_SZ,(LPBYTE)L"FLASH Driver",(wcslen(L"FLASH Driver")+1)*sizeof(WCHAR));
  13.         RegSetValueEx(hDrvkey,L"Order",0,REG_DWORD,(LPBYTE)&GdwDrvOrder, sizeof(DWORD));
  14.         RegSetValueEx(hDrvkey,L"Index",0,REG_DWORD,(LPBYTE)&GdwDrvIndex, sizeof(DWORD));
  15.     }
  16.     m_hDriver = ActivateDeviceEx(L"Drivers\\BuiltIn\\MFL",NULL,0,NULL); /* 加载驱动 */
  17.     if (m_hDriver == INVALID_HANDLE_VALUE) {
  18.         UpdataMsgShow(_T("加载驱动失败\r\n"));
  19.         return false;
  20.     }
  21.     m_hFile = CreateFile(TEXT("MFL1:"),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);
  22.     if (m_hFile == INVALID_HANDLE_VALUE) {
  23.         UpdataMsgShow(_T("打开驱动失败\r\n"));
  24.         nErr = GetLastError();
  25.         return false;
  26.     }



阅读(1360) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~