Поддержка Windows Vista с пакетом обновления 1 (SP1) заканчивается 12 июля 2011 г. Чтобы продолжить получать обновления для системы безопасности для Windows, убедитесь, что вы используете Windows Vista с пакетом обновления 2 (SP2). Дополнительные сведения см. на этой веб-странице Майкрософт: Поддержка некоторых версий Windows заканчивается.
Источник: служба поддержки Майкрософт
БЫСТРАЯ ПУБЛИКАЦИЯ
СТАТЬИ О БЫСТРОЙ ПУБЛИКАЦИИ СОДЕРЖАТ ИНФОРМАЦИЮ НЕПОСРЕДСТВЕННО ИЗ ОРГАНИЗАЦИИ ПОДДЕРЖКИ МАЙКРОСОФТ. ИНФОРМАЦИЯ, СОДЕРЖАЩАЯСЯ В ЭТОМ ДОКУМЕНТЕ, СОЗДАЕТСЯ В ОТВЕТ НА НОВЫЕ ИЛИ УНИКАЛЬНЫЕ ТЕМЫ ИЛИ ПРЕДНАЗНАЧЕНА ДЛЯ ДОПОЛНЕНИЯ ДРУГИХ СВЕДЕНИЙ БАЗЫ ЗНАНИЙ.
Симптом
При отключении USB-устройства, которое в настоящее время неактивно, на синем экране может появилось сообщение об ошибке "Остановить 0x44". Это сообщение об ошибке выглядит следующим образом: STOP 0x00000044 ( parameter1 , parameter2 , parameter3 , parameter4 ) MULTIPLE_IRP_COMPLETE_REQUESTS
Причина
Эта проблема может возникнуть, если USB-устройство использует драйвер, написанный с помощью платформы драйвера режима ядра (KMDF) версии 1.7 или более ранней.Проблема возникает, когда USB-устройство находится в состоянии простоя (выборочная приостановка USB), а затем устройство отключено (например, щелкнув устройство правой кнопкой мыши в диспетчер устройств и выбрав отключить).В этих условиях платформа KMDF версии 1.7 (или более ранних версий) не ожидает завершения выборочной приостановки USB, что позволяет удалить стек устройств до завершения выборочной приостановки USB (например, с помощью драйвера UsbHub).
Решение
Эта проблема устранена в платформе драйвера режима ядра (KMDF) версии 1.9 и более поздних. Платформа драйвера в режиме ядра (KMDF) версии 1.9 доступна в windows 7 пакета драйверов Windows (WDK).Разработчик драйвера USB-устройства на основе KMDF может обойти эту проблему, выполнив следующие действия:
-
Зарегистрируйте подпрограмму обратного вызова EvtDeviceReleaseHardware в подпрограмме обратного вызова EvtDriverDeviceAdd драйвера.
-
Выделите объект WDFWORKITEM в подпрограмме обратного вызова EvtDriverDeviceAdd драйвера.
-
Выделите и инициализируйте объект KEVENT, поставить рабочий элемент в очередь в подпрограмме обратного вызова EvtDeviceReleaseHardware драйвера, передав это событие в качестве параметра Context, и дождитесь передачи сигнала о событии.
-
В подпрограмме обратного вызова рабочего элемента задержите поток примерно на 2 секунды, а затем задайте событие. Точное требуемое значение задержки может отличаться в разных системах и должно быть проверено до окончательной реализации.
Описанный обходной путь имеет два основных эффекта:
-
Он помещает в очередь рабочий элемент, что помогает отложить снос стека устройств до тех пор, пока очередь рабочих элементов не будет стекаться до этого рабочего элемента (так как стек ядра USB может завершить выборочную приостановку usb через рабочий элемент).
-
Он вводит задержку в случае, если рабочий элемент стека ядра USB и рабочий элемент драйвера будут одновременно выполняться в многопроцессорных или многоядерных системах.
ПРИМЕЧАНИЕ. Это не комплексное решение. Это только помогает устранить проблему.
Дополнительная информация
В приведенных ниже примерах фрагментов кода показано, как реализовать это обходное решение: EvtDriverDeviceAdd( IN WDFDRIVER Driver, IN PWDFDEVICE_INIT DeviceInit ) { PWORKER_ITEM_CONTEXT контекст; атрибуты WDF_OBJECT_ATTRIBUTES; WDF_WORKITEM_CONFIG workitemConfig; WDFWORKITEM workItem; ... // Set EvtDeviceReleaseHardware callback // ... pnpPowerCallbacks.EvtDeviceReleaseHardware = EvtDeviceReleaseHardware; WdfDeviceInitSetPnpPowerEventCallbacks(DeviceInit, &pnpPowerCallbacks); ... // Выделение WDFWORKITEM // WDF_OBJECT_ATTRIBUTES_INIT(атрибуты &); WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE(атрибуты &,WORKER_ITEM_CONTEXT); Атрибуты. ParentObject = устройство; WDF_WORKITEM_CONFIG_INIT(&workitemConfig, EvtWorkItem); status = WdfWorkItemCreate(&workitemConfig, атрибуты &, &workItem); если (! NT_SUCCESS(status)) { return status; } devContext->WorkItem = workItem; ...}NTSTATUSEvtDeviceReleaseHardware( IN WDFDEVICE Device, IN WDFCMRESLIST ResourcesTranslated ){ СОБЫТИЕ KEVENT; контекст PWORKER_ITEM_CONTEXT; WDFWORKITEM workItem; UNREFERENCED_PARAMETER(ResourcesTranslated); workItem = GetDeviceContext(Device)->WorkItem; context = GetWorkItemContext(workItem); KeInitializeEvent(&event, NotificationEvent, FALSE); context->Event = событие &; // Очередь рабочего элемента // WdfWorkItemEnqueue(workItem); // Подождите, пока workitem сообщит о событии // KeWaitForSingleObject(&event, Executive, KernelMode, FALSE, NULL); return STATUS_SUCCESS;}VOIDEvtWorkItem( IN WDFWORKITEM WorkItem ){ PWORKER_ITEM_CONTEXT контексте; интервал LARGE_INTEGER; context = GetWorkItemContext(WorkItem); // Задержка потока на 2 секунды // интервал. QuadPart = -2 * 10 * 1000 * 1000; KeDelayExecutionThread(KernelMode, FALSE, &интервал); // сигнал потока ожидания // KeSetEvent(context->Event, IO_NO_INCREMENT, FALSE); Событие >контекста = NULL;}в структуре typedef файлазаголовка _WORKER_ITEM_CONTEXT { PKEVENT Event;} WORKER_ITEM_CONTEXT, * PWORKER_ITEM_CONTEXT;WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(WORKER_ITEM_CONTEXT, GetWorkItemContext)EVT_WDF_DEVICE_RELEASE_HARDWARE EvtDeviceReleaseHardware;EVT_WDF_WORKITEM EvtWorkItem;
ЗАЯВЛЕНИЕ ОБ ОТКАЗЕ
КОРПОРАЦИЯ МАЙКРОСОФТ И (ИЛИ) ЕЕ ПОСТАВЩИКИ НЕ ДЕЛАЮТ НИКАКИХ ЗАЯВЛЕНИЙ ИЛИ ГАРАНТИЙ ОТНОСИТЕЛЬНО ПРИГОДНОСТИ, НАДЕЖНОСТИ ИЛИ ТОЧНОСТИ ИНФОРМАЦИИ, СОДЕРЖАЩЕЙСЯ В ДОКУМЕНТАХ И СВЯЗАННЫХ ГРАФИЧЕСКИХ МАТЕРИАЛАХ, ОПУБЛИКОВАННЫХ НА ЭТОМ ВЕБ-САЙТЕ ("МАТЕРИАЛЫ"), ДЛЯ КАКИХ-ЛИБО ЦЕЛЕЙ. МАТЕРИАЛЫ МОГУТ СОДЕРЖАТЬ ТЕХНИЧЕСКИЕ НЕТОЧНОСТИ ИЛИ ТИПОГРАФИЧЕСКИЕ ОШИБКИ И МОГУТ БЫТЬ ПЕРЕСМОТРЕНЫ В ЛЮБОЕ ВРЕМЯ БЕЗ УВЕДОМЛЕНИЯ.В МАКСИМАЛЬНОЙ СТЕПЕНИ, РАЗРЕШЕННОЙ ПРИМЕНИМЫМ ЗАКОНОДАТЕЛЬСТВОМ, КОРПОРАЦИЯ МАЙКРОСОФТ И (ИЛИ) ЕЕ ПОСТАВЩИКИ ОТКАЗЫВАЕТСЯ ОТ ОТВЕТСТВЕННОСТИ И ИСКЛЮЧАЮТ ВСЕ ЗАЯВЛЕНИЯ, ГАРАНТИИ И УСЛОВИЯ, БУДЬ ТО ЯВНЫЕ, ПОДРАЗУМЕВАЕМЫЕ ИЛИ УСТАНОВЛЕННЫЕ ЗАКОНОМ, ВКЛЮЧАЯ, ПОМИМО ПРОЧЕГО, ПРЕДСТАВЛЕНИЯ, ГАРАНТИИ ИЛИ УСЛОВИЯ ТИТУЛА, НЕНАРУШЕНИЯ, УДОВЛЕТВОРИТЕЛЬНОЕ УСЛОВИЕ ИЛИ КАЧЕСТВО, ТОВАРНОЙ ПРИГОДНОСТИ И ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ В ОТНОШЕНИИ МАТЕРИАЛОВ.