Udostępnij przez


Odzyskiwanie nieodpowiadającej karty sieciowej przy użyciu NetAdapterCx PLDR

NetAdapterCx zapewnia skuteczny sposób resetowania i odzyskiwania nieprawidłowych urządzeń sieciowych za pomocą resetowania urządzeń na poziomie platformy (PLDR). Bez ponownego uruchamiania całego systemu Windows operacja PLDR usuwa stos urządzeń sieciowych, których dotyczy problem, zapewniając ponowne uruchomienie sprzętu i sterowników z pustego stanu. NetAdapterCx umożliwia również sterownikom klienta zbieranie danych diagnostycznych z urządzeń, które zakończyły się niepowodzeniem, zanim zostaną zresetowane na poziomie platformy.

Funkcja PLDR jest wyzwalana po wykryciu nietypowego zachowania urządzenia. Może zostać wyzwolony przez:

  • System operacyjny. Na przykład, po stronie systemu operacyjnego może zostać wyzwolone PLDR, gdy pakiet w trakcie przesyłania utknie w sterowniku na zbyt długo.

  • Sterowniki klienckie niezależnego dostawcy sprzętu (IHV). Na przykład sterowniki klienta mogą zażądać, aby NetAdapterCx wyzwolił PLDR, gdy sterownik wykryje, że urządzenie nie odpowiada na jego polecenie sterowania.

Aby zapewnić użytkownikom przyjazną obsługę awarii i odzyskiwania urządzeń, zalecamy, aby dostawcy sprzętu niezależni (IHV) oraz producenci oryginalnego sprzętu (OEM) obsługiwali PLDR dla swoich urządzeń sieciowych. Aby uzyskać więcej informacji na temat protokołu PLDR, zobacz Resetowanie i odzyskiwanie urządzenia. NetAdapterCx nie odzyskuje urządzeń sieciowych za pośrednictwem resetowania urządzenia na poziomie funkcji.

Zarejestruj opcjonalne wywołanie zwrotne do zbierania diagnostyki

W ramach procesu resetowania i odzyskiwania NetAdapterCx sterownik klienta może zbierać dane diagnostyczne specyficzne dla urządzenia z urządzenia, które zakończyło się niepowodzeniem, zanim urządzenie zostanie zresetowane na poziomie platformy. IHVs i Microsoft mogą używać tych danych w analizie po awarii, aby poprawić jakość swoich produktów.

Rejestrowanie NET_DEVICE_RESET_CAPABILITIES

Sterowniki klienta muszą zainicjować i zarejestrować strukturę NET_DEVICE_RESET_CAPABILITIES w funkcji wywołania zwrotnego EVT_WDF_DRIVER_DEVICE_ADD w celu zebrania diagnostyki specyficznej dla urządzenia.

NET_DEVICE_RESET_CAPABILITIES zawiera:

  • Unikatowy identyfikator GUID (Globalnie Unikalny Identyfikator). IHV określa ten GUID i używa go później do identyfikowania i pobierania diagnostyk dotyczących resetowania z zrzutu pamięci. Na przykład polecenie .enumtag może służyć do uzyskiwania diagnostyki.

  • Funkcja wywołania zwrotnego zdarzeń EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS. NetAdapterCx wywołuje ten callback w celu zebrania diagnostyki. Jeśli sterownik klienta udostępnia wywołanie zwrotne EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS, netAdapterCx wywołuje go na sterowniku klienta przy użyciu dedykowanego wątku .

W poniższym przykładzie pokazano, jak zarejestrować NET_DEVICE_RESET_CAPABILITIES w usłudze NetAdapterCx:

EVT_WDF_DRIVER_DEVICE_ADD EvtWdfDriverDeviceAdd;
EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS EvtDeviceCollectResetDiagnostics;

NTSTATUS EvtWdfDriverDeviceAdd(
    WDFDRIVER Driver,
    PWDFDEVICE_INIT DeviceInit
)
{
    ...

    NET_DEVICE_RESET_CAPABILITIES resetCapabilities;
    NET_DEVICE_RESET_CAPABILITIES_INIT(
        &resetCapabilities,
        DUMMY_GUID,
        EvtDeviceCollectResetDiagnostics);
    NetDeviceInitSetResetCapabilities(DeviceInit, &resetCapabilities);

    ...
}

Aby uzyskać informacje na temat inicjowania struktury NET_DEVICE_RESET_CAPABILITIES, zobacz NET_DEVICE_RESET_CAPABILITIES_INIT.

Aby dowiedzieć się, jak zareklamować strukturę NET_DEVICE_RESET_CAPABILITIES do NetAdapterCx, zobacz NetDeviceInitSetResetCapabilities.

Zaimplementuj EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS

Sekwencja resetowania i odzyskiwania może nastąpić w dowolnym momencie. W związku z tym implementacja wywołania zwrotnego sterownika klienta EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS musi uwzględniać następujące kwestie:

  • NetAdapterCx synchronizuje wywołanie zwrotne EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS z innymi wywołaniami zwrotnymi, które mogą wystąpić podczas sekwencji wyłączania zasilania. Sterownik klienta może założyć, że funkcja NetAdapterCx nie będzie wywoływać wywołań zwrotnych, takich jak anulowanie/zatrzymywanie kolejki pakietów, zwalnianie sprzętu i usuwanie obiektów urządzeń do czasu powrotu EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS.

  • Sterownik klienta musi zachować szczególną ostrożność podczas zbierania danych diagnostycznych, aby uniknąć blokady. Należy wziąć pod uwagę, że sprzęt może już znajdować się w stanie awarii.

  • Jest kluczowe, aby EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS zakończyło się jak najszybciej, aby reszta procesu PLDR mogła być kontynuowana. EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS musi być niezawodna i musi zostać zwrócona w ciągu 3 sekund.

  • NetAdapterCx zawsze wywołuje EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS w PASSIVE_LEVEL.

Aby przesłać diagnostykę do netAdapterCx, sterownik klienta wykonuje następujące kroki:

  1. Wstępnie przydziel płaski bufor z puli stronicowanej lub niestronicowanej w celu zebrania danych diagnostycznych dotyczących resetowania. Sterownik powinien wstępnie przydzielić ten bufor, aby uniknąć błędu braku pamięci podczas resetowania urządzenia.

  2. W ramach wywołania zwrotnego EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS prześlij dane diagnostyczne jako prosty bufor danych, wykorzystując interfejs API NetDeviceStoreResetDiagnostics. Sterownik klienta musi wywołać API NetDeviceStoreResetDiagnostics na poziomie PASSIVE_LEVEL.

  3. Zwolnij bufor danych po zakończeniu działania funkcji NetDeviceStoreResetDiagnostics.

Ważny

Interfejs API NetDeviceStoreResetDiagnostics musi być wywoływany tylko w wywołaniu zwrotnym EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS. Nie można jej również użyć do ponownego przesyłania danych diagnostycznych po poprzednich NetDeviceStoreResetDiagnostics zwrócenie. Naruszenie jednego z tych przypadków spowoduje sprawdzanie usterek.

Ważny

Ograniczenie rozmiaru dla diagnostyki resetowania to 1 MB.

Jak sterownik klienta żąda protokołu PLDR

Sterownik klienta wyzwala PLDR za pomocą API NetAdapterCx NetDeviceRequestReset podczas wykrycia awarii urządzenia. NetDeviceRequestReset natychmiast wraca do sterownika klienta. Sekwencja resetowania i odzyskiwania opisana w sekwencji resetowania i odzyskiwania NetAdapterCx jest wyzwalana asynchronicznie względem wywołania NetDeviceRequestReset.

W danym momencie może wystąpić tylko jedna operacja PLDR. W związku z tym kolejne wywołania NetDeviceRequestReset nie mają wpływu, gdy operacja PLDR została już uruchomiona.

Wywoływanie NetDeviceRequestReset również nie ma wpływu, jeśli sekwencja wyłączenia zasilania została już zainicjowana.

Resetowanie i odzyskiwanie sekwencji NetAdapterCx

Gdy system operacyjny lub sterownik klienta wyzwala PLDR, następuje sekwencja:

  1. Zbieranie diagnostyki resetu: NetAdapterCx wywołuje zwrot EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS sterownika klienta w celu zebrania diagnostyki z urządzenia, które uległo awarii. Na przykład sterownik może zbierać migawkę oprogramowania układowego urządzenia. Ten krok jest opcjonalny i występuje tylko wtedy, gdy sterownik klienta zarejestrował strukturę NET_DEVICE_RESET_CAPABILITIES. W przeciwnym razie polecenie NetAdapterCx pominie ten krok.

  2. Wykonaj PLDR: NetAdapterCx wykonuje operację resetowania urządzenia na poziomie platformy. Moc NetAdapterCx odzyskuje sprzęt i usuwa stos urządzeń oprogramowania.

Na poniższym diagramie przedstawiono sekwencję resetowania i odzyskiwania netAdapterCx:

schemat blokowy ilustrujący sekwencję resetowania i odzyskiwania NetAdapterCx.