Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Jeśli opcja Symulacja niskich zasobów (w systemie Windows 8.1 nazywana symulacją losowych niskich zasobów) jest aktywna, Weryfikator sterowników losowo powoduje niepowodzenia w alokacjach pamięci sterownika, tak jakby sterownik działał na komputerze z niewystarczającą pamięcią. Sprawdza to zdolność kierowcy do prawidłowego reagowania na niską ilość pamięci i inne warunki niskiego zasobu.
Test symulacji niskich zasobów kończy się niepowodzeniem alokacji żądanych przez wywołania kilku różnych funkcji, w tym ExAllocatePoolWithXXX, MmGetSystemAddressForMdlSafe, MmProbeAndLockPages, MmMapLockedPagesSpecifyCache i MmMapIoSpace.
Począwszy od systemu Windows Vista, test symulacji niskich zasobów również wprowadza błędy do IoAllocateIrp, IoAllocateMdl, IoAllocateWorkItem, IoAllocateErrorLogEntry, MmAllocateContiguousMemory, MmAllocateContiguousMemorySpecifyCache, MmAllocatePagesForMdl i MmAllocatePagesForMdlEx. Ponadto, począwszy od systemu Windows Vista, gdy włączono symulację niskich zasobów, wywołania polecenia KeWaitForMultipleObjects lub KeWaitForSingleObject z parametrem Alertable ustawionym na wartość TRUE mogą zwracać STATUS_ALERTED podczas uruchamiania w kontekście procesów nieuprzywilejowanych. Symuluje to możliwy alert wątku pochodzący z innego wątku w tej samej nieuprzywilejowanej aplikacji.
Test symulacji niskiego zasobu wprowadza również błędy do następujących funkcji GDI: EngAllocMem, EngAllocUserMem, EngCreateBitmap, EngCreateDeviceSurface, EngCreateDeviceBitmap, EngCreatePalette, EngCreateClip, EngCreatePath, EngCreateWnd, EngCreateDriverObj, BRUSHOBJ_pvAllocRbrush i CLIPOBJ_ppoGetPath.
W systemach Operacyjnych Windows 7 i nowszych wersjach opcji Symulacja niskich zasobów obsługuje pamięć przydzieloną przy użyciu następujących interfejsów API jądra:
IoAllocateIrp i inne procedury, które mogą przydzielić struktury danych pakietów żądań we/wy (IRP)
RtlAnsiStringToUnicodeString i inne procedury manipulacji ciągami biblioteki czasu wykonywania (RTL)
Od systemu Windows 8.1, opcja Symulacja niskich zasobów również powoduje niepowodzenie alokacji żądanych przez wywołania do MmAllocateNodePagesForMdlEx. Ponadto w przypadku niektórych funkcji weryfikator sterowników wypełnia teraz przydzieloną pamięć losowym wzorcem. Ale tylko w sytuacjach, gdy funkcja zwraca niezainicjowaną pamięć. Te funkcje obejmują:
- MmAllocatePagesForMdlEx
- MmAllocateNodePagesForMdlEx
- MmAllocateContiguousMemory
- MmAllocateContiguousMemorySpecifyCache
- MmAllocateContiguousMemorySpecifyCacheNode
- MmAllocateContiguousNodeMemory
- MmAllocateNonCachedMemory
Niestandardowe ustawienia dla symulacji o niskich zasobach
W systemie Windows Vista i nowszych wersjach systemu Windows można określić następujące ustawienia niestandardowe.
Prawdopodobieństwo , że dana alokacja zakończy się niepowodzeniem. Wartość domyślna to 6%.
Aplikacje , których dotyczy problem. To ustawienie ogranicza wstrzyknięte nieudane alokacje do określonych aplikacji. Domyślnie dotyczy to wszystkich alokacji.
Dotyczy to tagów puli. To ustawienie ogranicza wprowadzone błędy do alokacji z określonymi tagami puli. Domyślnie dotyczy to wszystkich alokacji.
Opóźnienie (w minutach) przed nieudaną próbą alokacji. To opóźnienie pozwala systemowi uruchomić się i ustabilizować się przed wstrzyknięciem błędów. Wartość domyślna to osiem minut.
W systemach operacyjnych wcześniejszych niż Windows Vista nie można dostosować tych ustawień. System operacyjny używa wartości domyślnych.
Symulacja niskich zasobów bez ponownego uruchamiania
Symulacja niskich zasobów można aktywować w systemie Windows 2000 lub nowszych wersjach systemu Windows bez ponownego uruchamiania komputera przy użyciu /volatile parametru. Ustawienia są skuteczne natychmiast, ale zostaną utracone w przypadku zamknięcia lub ponownego uruchomienia komputera.
Ustawienia symulacji niskich zasobów można również przechowywać w rejestrze, pomijając /volatile parametru. Te ustawienia są skuteczne tylko po ponownym uruchomieniu komputera, ale pozostają skuteczne do momentu ich zmiany.
Aktywowanie tej opcji
Możesz aktywować opcję Symulacja niskich zasobów dla co najmniej jednego sterownika przy użyciu Menedżera weryfikatora sterowników lub wiersza polecenia Verifier.exe. Aby uzyskać szczegółowe informacje, zobacz Wybieranie opcji weryfikatora sterowników.
W wierszu polecenia
W wierszu polecenia opcja Symulacja niskich zasobów jest reprezentowana przez bit 2 (0x4). Aby aktywować symulację niskich zasobów, użyj wartości flagi 0x4 lub dodaj 0x4 do wartości flag. Na przykład:
verifier /flags 0x4 /driver MyDriver.sysOpcja będzie aktywna po następnym rozruchu.
W systemie Windows Vista i nowszych wersjach systemu Windows można użyć / faults parametru lub wartości flagi 0x4 , aby aktywować symulację niskich zasobów. Aby zmodyfikować ustawienia symulacji niskich zasobów, należy użyć /faults. Na przykład:
verifier /faults /driver MyDriver.sysW systemie Windows 2000 i nowszych wersjach systemu Windows można również aktywować i dezaktywować symulację niskich zasobów bez ponownego uruchamiania komputera przez dodanie /volatile parametru do polecenia . Na przykład:
verifier /volatile /flags 0x4 /adddriver MyDriver.sysTo ustawienie jest skuteczne natychmiast, ale zostanie utracone po zamknięciu lub ponownym uruchomieniu komputera. Aby uzyskać szczegółowe informacje, zobacz Używanie zmiennych ustawień.
W systemie Windows Vista można użyć parametru /faults do symulowania niedoboru zasobów, używając parametru /volatile aby reprezentować ustawienie, które działa bez potrzeby ponownego uruchamiania. Zostanie wyświetlona zmiana ustawienia. Na przykład:
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.Korzystanie z Menedżera weryfikatora sterowników
- Uruchom Menedżera weryfikatora sterowników. Wpisz Weryfikator w oknie wiersza polecenia.
- Wybierz pozycję Utwórz ustawienia niestandardowe (dla deweloperów kodu), a następnie kliknij przycisk Dalej.
- Wybierz poszczególne ustawienia z pełnej listy.
- Wybierz pozycję Symulacja niskich zasobów.
Dostosowywanie ustawień (system Windows Vista i nowsze)
Począwszy od systemu Windows Vista, można zmienić ustawienia domyślne dla właściwości opóźnienia, prawdopodobieństwa, aplikacji i tagów puli opcji Symulacja niskich zasobów. Te ustawienia można zmienić przy użyciu Menedżera weryfikatora sterowników lub wiersza polecenia Verifier.exe. Aby uzyskać szczegółowe informacje, zobacz Wybieranie opcji weryfikatora sterowników.
W wierszu polecenia składnia tych ustawień jest następująca:
verifier [/volatile] /faults[Probability|PoolTags|Applications|DelayMins][/driver|DriverList]
Uwaga Parametry ustawień niestandardowych muszą być wyświetlane w podanej kolejności. W przypadku pominięcia wartości, wpisz cudzysłowy, aby zastąpić jej miejsce.
Parametry podrzędne
/usterki
Włącza opcję Symulacja niskich zasobów w weryfikatorze sterowników. (Nie można użyć /flags 0x4 z parametrami podrzędnymi ustawień niestandardowych).
Prawdopodobieństwo
Określa prawdopodobieństwo, że weryfikator sterowników spowoduje błąd w danym przypisaniu. Wpisz liczbę (w formacie dziesiętnym lub szesnastkowym), aby reprezentować liczbę szans na 10 000, że Driver Verifier zakończy się niepowodzeniem alokacji. Wartość domyślna 600 oznacza 600/10000 lub 6%.
Tagi puli
Ogranicza alokacje, które mogą zakończyć się niepowodzeniem przez weryfikator sterowników, tylko do alokacji z określonymi tagami puli. Możesz użyć symbolu wieloznakowego (*) do reprezentowania wielu tagów puli. Aby wyświetlić listę wielu tagów puli, należy oddzielić tagi spacjami. Domyślnie wszystkie alokacje mogą zakończyć się niepowodzeniem.
Aplikacje
Ogranicza alokacje, których weryfikator sterowników może nie można przydzielić dla określonego programu. Wpisz nazwę pliku wykonywalnego. Aby wyświetlić listę programów, należy oddzielić nazwy programów spacjami. Domyślnie wszystkie alokacje mogą zakończyć się niepowodzeniem.
DelayMins
Określa liczbę minut po uruchomieniu, podczas których weryfikator sterownika nie powoduje celowego niepowodzenia alokacji. To opóźnienie pozwala na załadowanie sterowników i ustabilizowanie się systemu przed rozpoczęciem testu. Wpisz liczbę (w formacie dziesiętnym lub szesnastkowym). Wartość domyślna to 8 (minuty).
Na przykład następujące polecenie umożliwia symulację niskich zasobów z prawdopodobieństwem 10%% (1000/10000) oraz opóźnienie o pięć minut dla tagów puli: Tag1 i Fred oraz aplikacji Notepad.exe.
verifier /faults 1000 "Tag1 Fred" Notepad.exe 5
Następujące polecenie umożliwia symulację niskich zasobów z wartościami domyślnymi, z tą różnicą, że opóźnienie jest przedłużane do 10 minut.
verifier /faults "" "" "" 0xa
Korzystanie z Menedżera weryfikatora sterowników
Uruchom Menedżera weryfikatora sterowników. Wpisz Weryfikator w oknie wiersza polecenia.
Wybierz pozycję Utwórz ustawienia niestandardowe (dla deweloperów kodu), a następnie kliknij przycisk Dalej.
Wybierz poszczególne ustawienia z pełnej listy.
Wybierz pozycję Symulacja niskich zasobów, a następnie kliknij przycisk Dalej.
Zmień ustawienia właściwości opóźnień, prawdopodobieństwa, aplikacji i tagów puli zgodnie z potrzebami.
Wyświetlanie wyników
Można monitorować liczbę przypadków, w których Weryfikator Sterowników celowo powoduje nieudane alokacje zasobów, wyświetlając globalny licznik Błędy wprowadzone przez Weryfikator Sterowników. Ten licznik przedstawia łączną liczbę alokacji zasobów, których weryfikator sterownika celowo zakończył się niepowodzeniem od ostatniego rozruchu.
Ten licznik można wyświetlić w pliku dziennika weryfikatora sterowników (/dziennik) w wierszu polecenia (/zapytaniu) lub w Menedżerze weryfikatora sterowników. W systemie Windows 2000, aby wyświetlić liczniki globalne, wybierz kartę Liczniki globalne . W nowszych wersjach systemu Windows wybierz pozycję Wyświetl informacje o aktualnie zweryfikowanych zadaniach sterowników , a następnie naciśnij przycisk Dalej dwa razy. Aby uzyskać więcej informacji, zobacz Monitorowanie globalnych liczników.
Można również wyświetlić liczbę celowo zakończonych niepowodzeniem alokacji oraz liczbę łącznych alokacji (w celu obliczenia prawdopodobieństwa) przy użyciu rozszerzenia debugera !weryfikatora . W poniższym przykładzie pokazano przykład danych wyjściowych !weryfikatora .
W tym przykładzie wstrzyknąć losowe błędy interfejsu API niskiego zasobu wskazują, że włączono symulację niskich zasobów. Alokacje zasobów Niepowodzenie celowo reprezentuje liczbę celowo zakończonych niepowodzeniem alokacji, a próby alokacji puli reprezentują całkowitą liczbę alokacji.
!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
Aby wyświetlić ślady stosu dla alokacji, które ostatnio nie powiodły się w Weryfikatorze sterownika, użyj !verifier 4 w debugerze jądra.
Poniższy przykład przedstawia przykładowe dane wyjściowe z !weryfikatora 4. Domyślnie program !weryfikator 4 wyświetla ślady stosu z czterech ostatnio zakończonych niepowodzeniem alokacji, ale możesz użyć parametru Quantity , aby zwiększyć liczbę wyświetlanych śladów stosu. Na przykład !weryfikator 0x80 wyświetla 128 ostatnio nieudanych alokacji.
W tym przykładzie należy pamiętać, że weryfikator przechwycił i zamienił wywołanie sterownika na ExAllocatePoolWithTag. Jedną z najczęstszych przyczyn awarii sterownika występuje, gdy sterownik próbuje przydzielić pamięć, a następnie używa wskaźnika, który funkcja alokacji zwraca przed sprawdzeniem, czy nie ma wartości 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
Doświadczenie w teście symulacji niskich zasobów pokazuje, że większość awarii sterowników jest spowodowana ostatnio niepowodzeniem alokacji. W powyższym przykładzie awaria wystąpiła w ścieżce win32k!GreEnableEUDC. Sprawdź kod w ścieżce alokacji, aby znaleźć przyczynę awarii.
Aby uzyskać informacje o !weryfikatora, zobacz dokumentację Narzędzia debugowania dla systemu Windows .
Aby wyświetlić ustawienia w rejestrze w wierszu polecenia, użyj opcji /querysettings . Na przykład:
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