Udostępnij przez


Śledzenie puli

Śledzenie puli monitoruje alokacje pamięci wykonywane przez sterownik. W momencie, gdy sterownik jest zwalniany, Weryfikator Sterowników zapewnia, że wszystkie alokacje dokonane przez sterownik zostały uwolnione.

Alokacje niezamkniętych pamięci ( nazywanych również przeciekami pamięci) są częstą przyczyną obniżonej wydajności systemu operacyjnego. Mogą one fragmentować pule systemu i ostatecznie powodować awarie systemu.

Jeśli ta opcja jest aktywna, weryfikator sterowników zgłosi sprawdzanie błędów 0xC4 (z parametrem 1 równym 0x62), jeśli sterownik zwalnia bez uwolnienia wszystkich swoich przydziałów.

Jeśli Weryfikator Sterowników zgłasza ten błąd z parametrem 1 równym 0x51, 0x52, 0x53, 0x54 lub 0x59, oznacza to, że sterownik zapisał dane do pamięci poza przydzielonymi mu obszarami. W takim przypadku należy włączyć funkcję Pula specjalna , aby zlokalizować źródło błędu.

Aby uzyskać listę parametrów kodu błędu, zobacz Kod błędu 0xC4 (DRIVER_VERIFIER_DETECTED_VIOLATION).

Począwszy od systemu Windows Vista, włączenie opcji Śledzenie puli umożliwia również śledzenie zablokowanych stron. Jeśli ta opcja jest aktywna, weryfikator sterowników wystawi 0xCB sprawdzania błędów (DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS), jeśli sterownik nie zwolni zablokowanych stron po operacji we/wy.

W systemie Windows 7 i nowszych wersjach systemu operacyjnego Windows opcja Śledzenie puli obsługuje pamięć przydzieloną przy użyciu następujących interfejsów API jądra:

W systemie Windows 7 i nowszych wersjach systemu operacyjnego Windows po aktywowaniu śledzenia puli weryfikator sterowników może wykryć próby przydzielenia pamięci puli jądra z limitem przydziału w kontekście procesu bezczynności. Takie próby zwykle oznaczają, że sterownik przydziela pamięć z procedury DPC. Kontekst wątku lub procesu dla rutyn DPC jest zawodny, więc próba naliczenia przydziału do tego procesu jest niepoprawna.

Monitorowanie śledzenia puli

Statystyki alokacji puli pamięci można monitorować oddzielnie dla każdego zweryfikowanego sterownika. Te statystyki mogą być wyświetlane przez Menedżera Weryfikatora Sterowników, wiersz polecenia Verifier.exe, lub w pliku dziennika. Aby uzyskać szczegółowe informacje, zobacz Monitorowanie poszczególnych liczników .

Rozszerzenie debugera jądra !weryfikator 0x3 może służyć do lokalizowania zaległych alokacji pamięci po rozładowaniu sterownika lub do śledzenia bieżących alokacji podczas działania sterownika. To rozszerzenie pokazuje również tag puli, rozmiar puli i adres alokatora dla każdej alokacji. Aby uzyskać informacje o rozszerzeniach debugera, zobacz Debugowanie systemu Windows.

Opłaty za limit przydziału puli z procedury DPC

Sterowniki jądra mogą wywoływać funkcję ExAllocatePoolWithQuotaTag, aby przydzielić pamięć puli jądra i obciążyć liczbę bajtów przydzielonych do przydziału puli bieżącego procesu. Sterowniki zwykle używają limitu przydziału dla alokacji pamięci, które są bezpośrednio związane z żądaniem pochodzącym z aplikacji.

Procedury wywołania procedury odroczonej (DPC) mogą być uruchamiane w kontekście dowolnego procesu. W związku z tym naliczanie kwoty przydziału z procedury DPC uwzględnia przypadkowy proces. Co gorsza, gdy procedura DPC jest uruchamiana w kontekście procesu bezczynności, ten warunek może spowodować uszkodzenie pamięci lub awarie systemu.

Począwszy od systemu Windows 7, Weryfikator sterowników wykrywa wywołania ExAllocatePoolWithQuotaTag z procedur DPC.

Aktywowanie tej opcji

Funkcję Monitorowanie puli można aktywować dla jednego lub więcej sterowników za pomocą 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 "Śledzenie puli" jest reprezentowana przez Bit 3 (0x8). Aby aktywować śledzenie puli, ustaw wartość flagi na 0x8 lub dodaj 0x8 do obecnej wartości flagi. Na przykład:

    verifier /flags 0x8 /driver MyDriver.sys
    

    Funkcja będzie aktywna po następnym rozruchu.

    W systemie Windows Vista i nowszych wersjach systemu Windows można również aktywować i dezaktywować śledzenie puli bez ponownego uruchamiania komputera, dodając /volatile parametr do polecenia . Na przykład:

    verifier /volatile /flags 0x8 /adddriver MyDriver.sys
    

    To ustawienie jest skuteczne natychmiast, ale zostanie utracone po zamknięciu lub ponownym uruchomieniu komputera. Aby uzyskać szczegółowe informacje, zobacz Używanie zmiennych ustawień.

    Funkcja śledzenia puli jest również uwzględniona w ustawieniach standardowych. Na przykład:

    verifier /standard /driver MyDriver.sys
    
  • Korzystanie z Menedżera weryfikatora sterowników

    1. Uruchom Menedżera weryfikatora sterowników. Wpisz Weryfikator w oknie wiersza polecenia.
    2. Wybierz pozycję Utwórz ustawienia niestandardowe (dla deweloperów kodu), a następnie kliknij przycisk Dalej.
    3. Wybierz poszczególne ustawienia z pełnej listy.
    4. Wybierz pozycję (zaznacz) Śledzenie puli.

    Funkcja Śledzenie puli jest również uwzględniona w ustawieniach standardowych. Aby użyć tej funkcji, w Menedżerze weryfikatora sterowników kliknij pozycję Utwórz ustawienia standardowe.