Windows mobile 更新Windows Mobile驱动程序
我们为Windows Mobile 6.5提供了自定义NDIS协议和微型端口驱动程序。我们希望允许用户干净地卸载这些驱动程序,但是卸载当前会出现错误:“未完全删除。是否要将其从已安装程序列表中删除?”这可能是因为驱动程序仍在使用中(如远程Process Viewer所报告的)。不幸的是,我不知道如何卸载驱动程序(假设这就是问题所在)。驱动程序用于设备内置的硬件,因此不可能简单地删除设备并卸载驱动程序Windows mobile 更新Windows Mobile驱动程序,windows-mobile,device-driver,Windows Mobile,Device Driver,我们为Windows Mobile 6.5提供了自定义NDIS协议和微型端口驱动程序。我们希望允许用户干净地卸载这些驱动程序,但是卸载当前会出现错误:“未完全删除。是否要将其从已安装程序列表中删除?”这可能是因为驱动程序仍在使用中(如远程Process Viewer所报告的)。不幸的是,我不知道如何卸载驱动程序(假设这就是问题所在)。驱动程序用于设备内置的硬件,因此不可能简单地删除设备并卸载驱动程序 是否有卸载驱动程序的编程方法 在卸载时,我还应该做些什么来彻底卸载驱动程序 [编辑] 我写这篇文
我写这篇文章的时候应该提到整个问题。我真的很关心更新驱动程序。我不一定要卸载旧的驱动程序才能做到这一点。您可能可以调用DeactivateDevice,但您需要有驱动程序的句柄(来自任何调用ActivateDevice的人)。对于CE 5.0及更早版本,至少对于流驱动程序,设备管理器实际上将其放在注册表的
HKLM/drivers/Active
下
我没有寻找NDI,因为我从来没有想过要卸载一个。为此,您可能需要使用向NDIS驱动程序调用DeviceIoControl,您可能可以调用DeactivateDevice,但您需要有驱动程序的句柄(来自任何调用ActivateDevice的人)。对于CE 5.0及更早版本,至少对于流驱动程序,设备管理器实际上将其放在注册表的
HKLM/drivers/Active
下
我没有寻找NDI,因为我从来没有想过要卸载一个。为此,您可能需要使用对NDIS驱动程序调用DeviceIoControl,一种可能是在Windows Mobile启动时启动一个程序,删除旧驱动程序并将新驱动程序复制到位 这可以使用
HKEY\U LOCAL\U MACHINE\Init
完成,如下所述:
#include <windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
// delete the old driver
BOOL result = DeleteFile(L"\\Windows\\MyDriver.dll");
if (result)
{
// put the new driver in place
result = MoveFile(L"\\My Documents\\MyDriver_NEW.dll",
L"\\Windows\\MyDriver.dll");
}
// Delete us from the registry
HKEY regKey = 0;
LONG regResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"init", 0, KEY_SET_VALUE, ®Key);
result = regResult == ERROR_SUCCESS;
if (result)
{
regResult = RegDeleteValue(regKey, L"Depend19");
result = regResult == ERROR_SUCCESS;
if (result)
{
regResult = RegDeleteValue(regKey, L"Launch18");
result = regResult == ERROR_SUCCESS;
}
RegCloseKey(regKey);
}
// we need to tell WinCE we started properly
SignalStarted(_ttoi(argv[1]));
return 0;
}
#包括
int _tmain(int argc,_TCHAR*argv[]
{
//删除旧驱动程序
BOOL result=DeleteFile(L“\\Windows\\MyDriver.dll”);
如果(结果)
{
//将新的驱动程序安装到位
结果=移动文件(L“\\My Documents\\MyDriver\u NEW.dll”,
L“\\Windows\\MyDriver.dll”);
}
//将我们从注册表中删除
HKEY regKey=0;
LONG regResult=RegOpenKeyEx(HKEY_LOCAL_MACHINE,L“init”,0,KEY_SET_VALUE,®Key);
结果=重新结果==错误\成功;
如果(结果)
{
regResult=RegDeleteValue(regKey,L“Depend19”);
结果=重新结果==错误\成功;
如果(结果)
{
regResult=RegDeleteValue(regKey,L“Launch18”);
结果=重新结果==错误\成功;
}
RegCloseKey(regKey);
}
//我们需要告诉WinCE我们启动正确
信号启动(ttoi(argv[1]);
返回0;
}
“Launch18”和“Depend19”的值在您的平台上可能会有所不同。只需确保此程序在device.exe之前运行
注意:在许多平台上,此程序必须签名,并且您的证书需要安装在设备上。如果没有,则不会运行。一种可能是在Windows Mobile启动时启动一个程序,删除旧驱动程序并将新驱动程序复制到位 这可以使用
HKEY\U LOCAL\U MACHINE\Init
完成,如下所述:
#include <windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
// delete the old driver
BOOL result = DeleteFile(L"\\Windows\\MyDriver.dll");
if (result)
{
// put the new driver in place
result = MoveFile(L"\\My Documents\\MyDriver_NEW.dll",
L"\\Windows\\MyDriver.dll");
}
// Delete us from the registry
HKEY regKey = 0;
LONG regResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"init", 0, KEY_SET_VALUE, ®Key);
result = regResult == ERROR_SUCCESS;
if (result)
{
regResult = RegDeleteValue(regKey, L"Depend19");
result = regResult == ERROR_SUCCESS;
if (result)
{
regResult = RegDeleteValue(regKey, L"Launch18");
result = regResult == ERROR_SUCCESS;
}
RegCloseKey(regKey);
}
// we need to tell WinCE we started properly
SignalStarted(_ttoi(argv[1]));
return 0;
}
#包括
int _tmain(int argc,_TCHAR*argv[]
{
//删除旧驱动程序
BOOL result=DeleteFile(L“\\Windows\\MyDriver.dll”);
如果(结果)
{
//将新的驱动程序安装到位
结果=移动文件(L“\\My Documents\\MyDriver\u NEW.dll”,
L“\\Windows\\MyDriver.dll”);
}
//将我们从注册表中删除
HKEY regKey=0;
LONG regResult=RegOpenKeyEx(HKEY_LOCAL_MACHINE,L“init”,0,KEY_SET_VALUE,®Key);
结果=重新结果==错误\成功;
如果(结果)
{
regResult=RegDeleteValue(regKey,L“Depend19”);
结果=重新结果==错误\成功;
如果(结果)
{
regResult=RegDeleteValue(regKey,L“Launch18”);
结果=重新结果==错误\成功;
}
RegCloseKey(regKey);
}
//我们需要告诉WinCE我们启动正确
信号启动(ttoi(argv[1]);
返回0;
}
“Launch18”和“Depend19”的值在您的平台上可能会有所不同。只需确保此程序在device.exe之前运行
注意:在许多平台上,此程序必须签名,并且您的证书需要安装在设备上。如果没有,它就不会运行。很有趣。无效设备当然有效。我想知道在生产环境中使用它是否会导致任何问题。我想调用ActivateDevice的人可能会认为它仍然在那里……很有趣。无效设备当然有效。我想知道在生产环境中使用它是否会导致任何问题。我想ActivateDevice的调用方可能希望它仍然存在。。。