Sdílet prostřednictvím


Obnovení nereagující síťové karty pomocí NetAdapterCx PLDR

NetAdapterCx poskytuje efektivní způsob, jak resetovat a obnovit nefunkční síťová zařízení prostřednictvím resetování zařízení na úrovni platformy (PLDR). Bez restartování celého systému Windows operace PLDR ruší zásobník ovlivněných síťových zařízení, aby se jejich hardware a ovladače restartovaly z prázdného stavu. NetAdapterCx také umožňuje klientským ovladačům shromažďovat diagnostiku z neúspěšných zařízení před resetováním na úrovni platformy.

PlDR se aktivuje při zjištění neobvyklého chování zařízení. Může ho aktivovat některý z těchto:

  • Operační systém (OS). Například může na straně operačního systému dojít k aktivaci PLDR, když je datový paket uvíznutý v ovladači příliš dlouho.

  • Nezávislé klientské ovladače dodavatele hardwaru (IHV). Například klientské ovladače mohou požádat NetAdapterCx o aktivaci PLDR, když ovladač zjistí, že jeho zařízení nereaguje na jeho řídicí příkaz.

Aby se zajistilo uživatelsky přívětivé řešení problémů a obnovení u zařízení, doporučujeme, aby nezávislí výrobci hardware (IHVs) a výrobci originálního vybavení (OEMs) podporovali PLDR pro svá síťová zařízení. Další informace o PLDR naleznete v tématu Resetování a obnovení zařízení. NetAdapterCx neobnoví síťová zařízení prostřednictvím resetování zařízení na úrovni funkce.

Registrace volitelného zpětného volání pro sběr diagnostických dat

V rámci procesu resetování a obnovení netAdapterCx může klientský ovladač shromáždit diagnostiku specifickou pro zařízení z neúspěšného zařízení před resetováním na úrovni platformy. IHV a Microsoft mohou tato data použít při analýze po selhání ke zlepšení kvality svých produktů.

Registrace NET_DEVICE_RESET_CAPABILITIES

Klientské ovladače potřebují inicializovat a zaregistrovat strukturu NET_DEVICE_RESET_CAPABILITIES ve své funkci zpětného volání EVT_WDF_DRIVER_DEVICE_ADD , aby bylo možné shromažďovat diagnostiku specifickou pro zařízení.

NET_DEVICE_RESET_CAPABILITIES obsahuje:

  • Jedinečný identifikátor GUID. IHV určuje tento identifikátor GUID a později ho použije k následné identifikaci a načtení diagnostických dat o restartu z výpisu paměti. Například příkaz .enumtag lze použít k načtení diagnostiky.

  • Funkce pro zpětné volání události EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS. NetAdapterCx vyvolá toto zpětné volání za účelem shromáždění diagnostiky. Pokud klientský ovladač poskytuje zpětné volání EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS, NetAdapterCx ho vyvolá v klientském ovladači pomocí vyhrazeného vlákna.

Následující příklad ukazuje, jak zaregistrovat NET_DEVICE_RESET_CAPABILITIES do 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);

    ...
}

Informace o inicializaci struktury NET_DEVICE_RESET_CAPABILITIES naleznete v tématu NET_DEVICE_RESET_CAPABILITIES_INIT.

Informace o inzerování struktury NET_DEVICE_RESET_CAPABILITIES do NetAdapterCx najdete v tématu NetDeviceInitSetResetCapabilities.

Proveďte EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS

Proces resetu a obnovení může nastat kdykoli. Proto musí implementace zpětného volání klientského ovladače EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS zvážit následující:

  • NetAdapterCx synchronizuje zpětné volání EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS s jinými zpětnými voláními, ke kterým může dojít během vypínací sekvence. Klientský ovladač může předpokládat, že NetAdapterCx nevyvolá zpětná volání, jako je zrušení/zastavení fronty paketů, uvolnění hardwaru a odstranění objektů zařízení, dokud EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS nevrátí.

  • Klientský ovladač musí při sběru diagnostických dat postupovat se zvýšenou opatrností, aby se zabránilo zablokování. Musí vzít v úvahu, že hardware už může být ve stavu selhání.

  • Je důležité, aby EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS byl dokončen co nejdříve, aby mohl zbývající proces PLDR pokračovat. EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS musí být spolehlivý a musí se vrátit do 3 sekund.

  • NetAdapterCx vždy vyvolá EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS na PASSIVE_LEVEL.

Pokud chcete odeslat diagnostiku do netAdapterCx, klientský ovladač provede následující kroky:

  1. Předběžné přidělení ploché vyrovnávací paměti z buď stránkovaného nebo nestráňového fondu, aby se shromáždila diagnostika resetování. Ovladač by měl tuto vyrovnávací paměť předem přidělit, aby se zabránilo chybě nedostatku paměti během resetování zařízení.

  2. V rámci zpětného volání EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS odešlete diagnostiku jako vyrovnávací paměť plochých dat voláním rozhraní NETDeviceStoreResetDiagnostics API. Klientský ovladač musí v PASSIVE_LEVEL volat rozhraní API NetDeviceStoreResetDiagnostics .

  3. Uvolněte vyrovnávací paměť dat, jakmile NetDeviceStoreResetDiagnostics vrátí.

Důležité

Rozhraní API NetDeviceStoreResetDiagnostics musí být voláno pouze ve zpětné funkci EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS. Nejde ji také použít k opětovnému odeslání diagnostických dat po předchozích návratech NetDeviceStoreResetDiagnostics . Porušení některé z těchto případů způsobí kontrolu chyb.

Důležité

Omezení velikosti diagnostiky pro resetování je 1 MB.

Jak klientský ovladač požaduje PLDR

Klientský ovladač aktivuje PLDR pomocí rozhraní NetAdapterCx NetDeviceRequestReset API při zjišťování selhání zařízení. NetDeviceRequestReset se okamžitě vrátí klientskému ovladači. Resetovací a obnovovací sekvence popsaná v resetování a obnovovací sekvenci NetAdapterCx se aktivuje asynchronně k volání NetDeviceRequestReset.

V daném okamžiku může dojít pouze k jedné operaci PLDR. Proto následná volání NetDeviceRequestReset nemají žádný účinek, pokud se operace PLDR již spustila.

Volání NetDeviceRequestReset také nemá žádný vliv v případě, že už byla zahájena sekvence vypnutí napájení.

Resetování a obnovení sekvence NetAdapterCx

Když operační systém nebo klientský ovladač aktivuje PLDR, dojde k následující sekvenci:

  1. Shromažďování diagnostiky resetování: NetAdapterCx vyvolá EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS zpětné volání klientského ovladače za účelem shromáždění diagnostiky ze zařízení, které selhalo. Ovladač může například shromáždit snímek firmwaru zařízení. Tento krok je volitelný a dochází pouze v případě, že ovladač klienta zaregistroval strukturu NET_DEVICE_RESET_CAPABILITIES . V opačném případě netAdapterCx tento krok přeskočí.

  2. Provedení PLDR: NetAdapterCx provádí operaci resetování zařízení na úrovni platformy. NetAdapterCx zrestartuje hardware a demontuje vrstvu softwarových zařízení.

Následující diagram znázorňuje sekvenci resetování a obnovení netAdapterCx:

Vývojový diagram znázorňující postup resetování a obnovení NetAdapterCx.