Обновите драйвер для Windows Mobile - PullRequest
1 голос
/ 09 ноября 2010

У нас есть собственный протокол NDIS и драйверы минипорта для Windows Mobile 6.5.Мы хотели бы разрешить пользователю удалять эти драйверы аккуратно, однако в настоящее время удаление выдает ошибку: «не был полностью удален. Вы хотите удалить его из списка установленных программ?»Вероятно, это происходит потому, что драйверы все еще используются (как сообщает Remote Process Viewer).К сожалению, я не могу понять, как выгрузить драйверы (при условии, что это проблема).Драйверы предназначены для аппаратного обеспечения, встроенного в устройство, поэтому невозможно просто удалить устройство и выгрузить драйверы

  1. Существует ли программный метод выгрузки драйвера?
  2. Есть ли что-то еще, что я должен сделать при удалении, чтобы полностью удалить драйверы?

[править] Я должен был упомянуть всю проблему, когда писал это.Я действительно забочусь об обновлении драйвера.Для этого не обязательно удалять старый драйвер.

Ответы [ 2 ]

1 голос
/ 09 ноября 2010

Вы, вероятно, можете вызвать DeactivateDevice, хотя вам нужно иметь дескриптор драйвера (от того, кто называл ActivateDevice). Для CE 5.0 и более ранних версий, по крайней мере для потоковых драйверов, диспетчер устройств фактически поместил это в реестр под HKLM/Drivers/Active.

Я не искал NDIS, так как никогда не хотел его выгружать. Для этого вам может потребоваться вызвать DeviceIoControl для драйвера NDIS с IOCTL_NDIS_UNBIND_ADAPTER и / или IOCTL_NDIS_DEREGISTER_ADAPTER

0 голосов
/ 10 ноября 2010

Одной из возможностей является запуск программы при запуске Windows Mobile, которая удалит старый драйвер и скопирует новый на место.

Это можно сделать с помощью HKEY_LOCAL_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, &regKey);
   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;
}

Значения «Launch18» и «Depend19», вероятно, будут отличаться на вашей платформе.Просто убедитесь, что эта программа запускается до device.exe.

Примечание. На многих платформах эта программа должна иметь подпись и ваши сертификаты должны быть установлены наУстройство.Если это не так, он не будет работать.

...