Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Если параметр "Моделирование низких ресурсов" (называемый симуляция случайных низких ресурсов в Windows 8.1) активен, средство проверки драйверов намеренно вызывает сбои в случайных случаях выделения памяти драйвера, такое может произойти, если драйвер работал на компьютере с недостаточной памятью. Это проверяет способность драйвера правильно реагировать на низкую память и другие условия с низким уровнем ресурсов.
Тест моделирования низких ресурсов завершается ошибкой выделения памяти, запрашиваемых вызовами нескольких различных функций, включая ExAllocatePoolWithXXX, MmGetSystemAddressForMdlSafe, MmProbeAndLockPages, MmMapLockedPagesSpecifyCache и MmMapIoSpace.
Начиная с Windows Vista, тест с низким уровнем ресурсов также внедряет ошибки в IoAllocateIrp, IoAllocateMdl, IoAllocateWorkItem, IoAllocateErrorLogEntry, MmAllocateContiguousMemory, MmAllocateContiguousMemorySpecifyCache, MmAllocatePagesForMdl и MmAllocatePagesForMdlEx. Кроме того, начиная с Windows Vista, если включена имитация низких ресурсов, вызовы к KeWaitForMultipleObjects или KeWaitForSingleObject с параметром alertabletrue могут возвращать STATUS_ALERTED при выполнении в контексте не привилегированных процессов. Это имитирует возможное оповещение о потоке, поступающее из другого потока в том же непривилегированном приложении.
Тест с низким уровнем ресурсов также внедряет ошибки в следующие функции GDI: EngAllocMem, EngAllocUserMem, EngCreateBitmap, EngCreateDeviceSurface, EngCreateDeviceBitmap, EngCreatePalette, EngCreateClip, EngCreatePath, EngCreateWnd, EngCreateDriverObj, BRUSHOBJ_pvAllocRbrush и CLIPOBJ_ppoGetPath.
В Windows 7 и более поздних версиях операционной системы Windows параметр "Моделирование низких ресурсов" поддерживает память, выделенную с помощью следующих API ядра:
IoAllocateIrp и другие подпрограммы, которые могут выделить структуры данных пакета запросов ввода-вывода (IRP)
RtlAnsiStringToUnicodeString и другие строковые подпрограммы библиотеки времени выполнения (RTL)
Начиная с Windows 8.1, параметр "Моделирование низких ресурсов" также завершается сбоем выделения, запрошенных вызовами MmAllocateNodePagesForMdlEx. Кроме того, для некоторых функций средство проверки драйверов теперь заполняет выделенную память случайным шаблоном. Но только в ситуациях, когда функция возвращает неинициализированную память. К этим функциям относятся:
- MmAllocatePagesForMdlEx
- MmAllocateNodePagesForMdlEx
- MmAllocateContiguousMemory
- MmAllocateContiguousMemorySpecifyCache
- MmAllocateContiguousMemorySpecifyCacheNode
- MmAllocateContiguousNodeMemory
- MmAllocateNonCachedMemory
Пользовательские параметры для моделирования низких ресурсов
В Windows Vista и более поздних версиях Windows можно указать следующие настраиваемые параметры.
Вероятность того, что данное выделение завершится ошибкой. Значение по умолчанию — 6%.
Затронутые приложения . Этот параметр ограничивает сбои выделения памяти, внедряемые в указанные приложения. По умолчанию все выделения затрагиваются.
Затронутые теги пула . Этот параметр ограничивает внедренные ошибки выделениями с указанными тегами пула. По умолчанию все выделения затрагиваются.
Задержка (в минутах) прежде чем выделения будут признаны несостоявшимися. Эта задержка позволяет системе запуститься и стабилизироваться перед инъекцией неисправностей. Значение по умолчанию — восемь минут.
В операционных системах до Windows Vista эти параметры нельзя настроить. Операционная система использует значения по умолчанию.
Моделирование низких ресурсов без перезагрузки
Вы можете активировать моделирование низких ресурсов в Windows 2000 и более поздних версиях Windows, не перезагрузив компьютер с помощью параметра /volatile . Параметры эффективны немедленно, но теряются при завершении работы или перезапуске компьютера.
Кроме того, параметры моделирования низких ресурсов можно хранить в реестре, пропуская параметр /volatile . Эти параметры эффективны только при перезапуске компьютера, но они остаются эффективными, пока не измените их.
Активация этого параметра
Параметр "Моделирование низких ресурсов" можно активировать для одного или нескольких драйверов с помощью диспетчера проверки драйверов или командной строки Verifier.exe. Дополнительные сведения см. в разделе "Выбор параметров средства проверки драйвера".
В командной строке
В командной строке параметр "Моделирование низких ресурсов" представлен битом 2 (0x4). Чтобы активировать моделирование низких ресурсов, используйте значение флагов 0x4 или добавьте 0x4 в значение флагов. Рассмотрим пример.
verifier /flags 0x4 /driver MyDriver.sysПараметр будет активным после следующей загрузки.
В Windows Vista и более поздних версиях Windows можно использовать параметр /faults или значение флагов 0x4 для активации моделирования низких ресурсов. Чтобы изменить параметры для моделирования низких ресурсов, необходимо использовать /faults. Рассмотрим пример.
verifier /faults /driver MyDriver.sysВ Windows 2000 и более поздних версиях Windows можно также активировать и деактивировать моделирование низких ресурсов без перезагрузки компьютера, добавив в команду параметр /volatile . Рассмотрим пример.
verifier /volatile /flags 0x4 /adddriver MyDriver.sysЭтот параметр действует немедленно, но теряется при завершении работы или перезагрузке компьютера. Для получения подробной информации см. Использование изменяемых параметров.
В Windows Vista можно использовать параметр /faults для представления моделирования низких ресурсов с параметром /volatile , чтобы представить параметр, действующий без перезагрузки. Будет отображено изменение параметра. Рассмотрим пример.
0> verifier /volatile /faults /adddriver MyDriver.sys New Low Resources Simulation options: - Use default fault injection probability. - Allocations using any pool tag can be failed. - Simulate low resources conditions in any application. The new settings are in effect until you restart this computer or change them again.Использование диспетчера проверки драйверов
- Запустите диспетчер проверки драйверов. В окне командной строки введите средство проверки .
- Выберите "Создать настраиваемые параметры" (для разработчиков кода) и нажмите кнопку "Далее".
- Выберите отдельные параметры из полного списка.
- Выберите имитацию низких ресурсов.
Настройка параметров (Windows Vista и более поздних версий)
Начиная с Windows Vista можно изменить параметры по умолчанию для свойств тегов задержки, вероятности, приложений и пула для параметра "Моделирование низких ресурсов". Эти параметры можно изменить с помощью диспетчера проверки драйверов или командной строки Verifier.exe. Дополнительные сведения см. в разделе "Выбор параметров средства проверки драйвера".
В командной строке синтаксис этих параметров выглядит следующим образом:
средство проверки [/volatile] /faults[Probability|PoolTags|Applications|DelayMins][/driver|DriverList]
Заметка Параметры пользовательских параметров должны отображаться в указанном порядке. Если не указано значение, введите кавычки, чтобы сохранить его место.
Подпараметры
/Ошибки
Включает параметр "Моделирование низких ресурсов" в средстве проверки драйверов. (Нельзя использовать флаги /flags 0x4 с настраиваемыми подпараметрами параметров.)
Вероятность
Указывает вероятность того, что средство проверки драйверов вызовет сбой для заданного выделения. Введите число (в десятичном или шестнадцатеричном формате), чтобы указать вероятность в 10 000, что средство проверки драйверов не сможет выделить память. Значение по умолчанию, 600, означает 600/10000 или 6%.
PoolTags
Ограничивает количество назначений, которые Driver Verifier может отклонить, ограничив это теми, что используют указанные теги пула. Можно использовать подстановочный знак (*) для представления нескольких тегов пула. Чтобы вывести список нескольких тегов пула, разделите теги пробелами. По умолчанию любое выделение ресурсов может завершиться ошибкой.
Приложения
Ограничивает выделение, которое средство проверки драйверов может не выделять для указанной программы. Введите имя исполняемого файла. Чтобы перечислить программы, разделите имена программ пробелами. По умолчанию все выделения могут завершиться ошибкой.
DelayMins
Указывает количество минут после загрузки, в течение которого средство проверки драйверов намеренно не завершает выделение. Эта задержка позволяет драйверам загружать и стабилизировать систему до начала теста. Введите число (в десятичном или шестнадцатеричном формате). Значение по умолчанию — 8 (минуты).
Например, следующая команда включает моделирование низких ресурсов с вероятностью 10% (1000/10000) и задержку на пять минут для тегов пула, Tag1 и Fred, а также приложения, Notepad.exe.
verifier /faults 1000 "Tag1 Fred" Notepad.exe 5
Следующая команда включает моделирование низких ресурсов со значениями по умолчанию, за исключением того, что она расширяет задержку до 10 минут.
verifier /faults "" "" "" 0xa
Использование диспетчера проверки драйверов
Запустите диспетчер проверки драйверов. В окне командной строки введите средство проверки .
Выберите "Создать настраиваемые параметры" (для разработчиков кода) и нажмите кнопку "Далее".
Выберите отдельные параметры из полного списка.
Нажмите кнопку " Симуляция с низкими ресурсами" и нажмите кнопку "Далее".
Измените параметры свойств тегов задержки, вероятности, приложений и тегов пула по мере необходимости.
Просмотр результатов
Вы можете отслеживать количество случаев, когда средство проверки драйверов намеренно вызывает сбои при выделении ресурсов, отображая глобальный счетчик внедренных сбоев. В этом счетчике отображается общее количество распределений ресурсов, которые Средство проверки драйверов преднамеренно не смогло выполнить с момента последней перезагрузки.
Этот счетчик можно просмотреть в файле журнала проверяющего драйвера (/log), в командной строке (/запросе) или в диспетчере проверки драйверов. В Windows 2000 для просмотра глобальных счетчиков выберите вкладку "Глобальные счетчики ". В более поздних версиях Windows выберите отображение сведений о задаче "Проверенные драйверы ", а затем дважды нажмите клавишу NEXT . Дополнительные сведения см. в разделе "Мониторинг глобальных счетчиков".
Вы также можете отобразить количество намеренно неудачных выделений и количество всех выделений (для расчёта вероятности) с помощью расширения отладчика !верификатор. В следующем примере показан пример выходных данных !verifier .
В этом примере моделируются случайные отказы API, связанные с ограниченными ресурсами, что указывает на включение симуляции низких ресурсов. Намеренные сбои выделения ресурсов указывают количество преднамеренно неудачных выделений, а попытки выделения пула представляют общее количество выделений.
!verifier
Verify Level 5 ... enabled options are:
Special pool
Inject random low-resource API failures
Summary of All Verifier Statistics
RaiseIrqls 0x2c671f
AcquireSpinLocks 0xca1a02
Synch Executions 0x10a623
Trims 0x0
Pool Allocations Attempted 0x862e0e
Pool Allocations Succeeded 0x8626e3
Pool Allocations Succeeded SpecialPool 0x768060
Pool Allocations With NO TAG 0x0
Pool Allocations Failed 0x34f
Resource Allocations Failed Deliberately 0x3f5
Чтобы отобразить трассировки стека для выделений, завершившихся ошибкой из-за средств Driver Verifier, используйте !verifier 4 в отладчике ядра.
В следующем примере показан пример выходных данных из !verifier 4. По умолчанию !verifier 4 отображает трассировки стека из четырех последних неудачных выделений, но его параметр Quantity можно использовать для увеличения количества отображаемых трассировок стека. Например, !verifier 0x80 отображает 128 последних неудачных выделений.
В этом примере обратите внимание, что средство проверки перехватило и заменило вызов драйвера ExAllocatePoolWithTag. Одна из наиболее распространенных причин сбоя драйвера возникает, когда драйвер пытается выделить память, а затем использует указатель, который функция выделения возвращает перед проверкой того, что этот указатель не равен NULL.
kd> !verifier 4
Resource fault injection history:
Tracker @ 8354A000 (# entries: 80, size: 80, depth: 8)
Entry @ 8354B258 (index 75)
Thread: C2638220
816760CB nt!VerifierExAllocatePoolWithTag+0x49
A4720443 win32k!bDeleteAllFlEntry+0x15d
A4720AB0 win32k!GreEnableEUDC+0x70
A47218FA win32k!CleanUpEUDC+0x37
A473998E win32k!GdiMultiUserFontCleanup+0x5
815AEACC nt!MiDereferenceSession+0x74
8146D3B4 nt!MmCleanProcessAddressSpace+0x112
815DF739 nt!PspExitThread+0x603
Entry @ 8354B230 (index 74)
Thread: 8436D770
816760CB nt!VerifierExAllocatePoolWithTag+0x49
A462141C win32k!Win32AllocPool+0x13
A4725F94 win32k!StubGdiAlloc+0x10
Опыт проведения теста имитации низких ресурсов показывает, что большинство сбоев драйверов вызваны последним неудачным выделением. В приведенном выше примере авария была в пути win32k! GreEnableEUDC. Изучите код в процессе выделения памяти, чтобы найти причину сбоя.
Сведения о !verifier см. в документации по средствам отладки для Windows .
Чтобы просмотреть параметры в реестре в командной строке, используйте параметр /querysettings . Рассмотрим пример.
C:\>verifier /querysettings
Special pool: Disabled
Pool tracking: Disabled
Force IRQL checking: Disabled
I/O verification: Disabled
Enhanced I/O verification: Disabled
Deadlock detection: Disabled
DMA checking: Disabled
Security checks: Disabled
Force pending I/O requests: Disabled
Low resources simulation: Enabled
IRP Logging: Disabled
Miscellaneous checks: Disabled
Low Resources Simulation options:
- Fault injection probability: 1/10000.
- Fail only allocations using pool tags: Tag1 Tag2.
- Simulate low resources conditions only in applications: test1.exe test2.exe.
- Boot time delay: 2 minutes.
Verified drivers:
blah.sys