Поделиться через


Определение причины сбоя загрузки драйвера UMDF или сбоя запуска устройства UMDF

В этом разделе описаны действия по устранению неполадок, которые можно использовать, когда драйвер UMDF не загружается или связанное устройство не запускается.

Следующий метод можно использовать с драйверами UMDF версии 1 и 2.

  1. Проверьте установку, убедив правильность следующих файлов:

    • INF-файл драйвера.

      Используйте средство InfVerif для проверки INF-файла драйвера.

    • %windir%\inf\setupapi.dev.log (setupapi.log в Windows XP), %windir%\setupact.log и %windir%\temp\wudf_update.log.

  2. Если вы не обнаружили проблем с установкой, включите запись реестра HostProcessDbgBreakOnStart с помощью приложения управления WDF Verifier (WdfVerifier.exe). Включив HostProcessDbgBreakOnStart, вы заключите хост-процесс драйвера для устройства (WUDFHost.exe) в отладчик вскоре после запуска WUDFHost.exe, но до загрузки библиотеки DLL драйвера.

    Необходимо включить HostProcessDbgBreakOnStart с помощью отладчика пользовательского режима, а не отладчика в режиме ядра. Отладчик в режиме ядра по умолчанию не получает уведомления о загрузке и выгрузке модуля в пользовательском режиме. Таким образом, вы не сможете задать отложенные точки останова.

  3. Если вы не видите запуск узла, выполните следующие действия, чтобы правильно настроить устройство.

    1. Убедитесь, что все драйверы, устанавливаемые с помощью INF, существуют и скопированы в операционную систему.
    2. Если отражатель (также известный как WUDFRd.sys) не является службой на устройстве, убедитесь, что драйвер, который затем будет службой, имеет запись службы (например, "sc qc foo") и настроен на автоматический запуск.
  4. Убедитесь, что символы драйвера находятся в пути к символам (т. е. .sympath).

  5. Проверяйте следующие элементы по одному. В следующих шагах предположим, что драйвер foo.dll.

    1. Убедитесь, что вызвана подпрограмма DllMain драйвера (например, bu Foo! DllMain).

    2. Если библиотека DLL драйвера загружается, для последующих шагов можно также использовать запись реестра HostProcessDbgBreakOnDriverLoad . Установка параметра HostProcessDbgBreakOnDriverLoad приводит к тому, что WUDFHost.exe врывается в отладчик после загрузки библиотеки DLL драйвера. HostProcessDbgBreakOnDriverLoad также можно использовать с отладчиком в режиме ядра, так как на этом этапе загрузки драйвера и запуска устройства можно задать точки останова в коде драйвера.

    3. Этот шаг применяется только к драйверам UMDF версии 1. Убедитесь, что вызвана подпрограмма DllGetClassObject драйвера. Убедитесь, что идентификатор класса (ID) для драйвера указан правильно. Убедитесь, что DllGetClassObject успешно выполняется и возвращает объект драйвера (например, bu Foo! DllGetClassObject).

    4. Для UMDF версии 1 убедитесь, что вызывается метод IDriverEntry::OnDeviceAdd вашего драйвера. Убедитесь, что метод создает устройство и возвращает успешно (например, bu Foo! CMyDriver::OnDeviceAdd).

      Для UMDF версии 2 убедитесь, что вызвана функция EvtDriverDeviceAdd драйвера. Убедитесь, что функция создает устройство и возвращает успешно (например, bu Foo! MyDriverDeviceAdd).

    5. Для UMDF версии 1 убедитесь, что вызывается метод IPnpCallbackHardware::OnPrepareHardware или IPnpCallback::OnD0Entry . Убедитесь, что метод возвращает успешно (например, bu Foo! CMyDevice::OnPrepareHardware или Foo! CMyDevice::OnD0Entry).

      Для UMDF версии 2 убедитесь, что вызвана функция EvtDevicePrepareHardware или EvtDeviceD0Entry вашего драйвера. Убедитесь, что функция возвращает успешно (например, bu Foo! MyDevicePrepareHardware или Foo! MyDeviceD0Entry).

    6. Если каждая из предыдущих операций выполняется успешно, но следующая операция не выполняется, следует проверка следующие элементы:

      1. Убедитесь, что каждый драйвер выше и ниже драйвера в стеке пользовательского режима также успешно выполняет эти операции.
      2. Убедитесь, что стек ядра под драйвером успешно завершает IRP_MJ_PNP и IRP_MN_START_DEVICE IRP.