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
);
再附上代码:
-
/*
-
* 创建注册表键HKEY_LOCAL_MACHINE\Drivers\BuiltIn\MFL
-
*/
-
-
nErr = RegCreateKeyEx(HKEY_LOCAL_MACHINE, L"Drivers\\BuiltIn\\MFL", 0, L"", 0, 0, NULL, &hDrvkey, &dwTmp);
-
if (nErr != ERROR_SUCCESS) {
-
UpdataMsgShow(_T("创建驱动注册表子键失败\r\n"));
-
return false;
-
}
-
else {
-
RegSetValueEx(hDrvkey,L"Prefix",0,REG_SZ,(LPBYTE)L"MFL",(wcslen(L"MFL")+1)*sizeof(WCHAR));
-
RegSetValueEx(hDrvkey,L"Dll",0,REG_SZ,(LPBYTE)L"MFlash.dll",(wcslen(L"MFlash.dll")+1)*sizeof(WCHAR));
-
RegSetValueEx(hDrvkey,L"FriendlyName",0,REG_SZ,(LPBYTE)L"FLASH Driver",(wcslen(L"FLASH Driver")+1)*sizeof(WCHAR));
-
RegSetValueEx(hDrvkey,L"Order",0,REG_DWORD,(LPBYTE)&GdwDrvOrder, sizeof(DWORD));
-
RegSetValueEx(hDrvkey,L"Index",0,REG_DWORD,(LPBYTE)&GdwDrvIndex, sizeof(DWORD));
-
}
-
m_hDriver = ActivateDeviceEx(L"Drivers\\BuiltIn\\MFL",NULL,0,NULL); /* 加载驱动 */
-
if (m_hDriver == INVALID_HANDLE_VALUE) {
-
UpdataMsgShow(_T("加载驱动失败\r\n"));
-
return false;
-
}
-
m_hFile = CreateFile(TEXT("MFL1:"),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);
-
if (m_hFile == INVALID_HANDLE_VALUE) {
-
UpdataMsgShow(_T("打开驱动失败\r\n"));
-
nErr = GetLastError();
-
return false;
-
}
阅读(1355) | 评论(0) | 转发(0) |