Sdílet prostřednictvím


Přenos ovladačů miniportu NDIS do NetAdapterCx

Tato stránka popisuje, jak převést ovladač miniportu NDIS 6.x na klientský ovladač NetAdapterCx.

Obecné informace o WDF naleznete v WDF Driver Development Guide.

Nastavení kompilace

Otevřete existující projekt ovladače miniportu NDIS v sadě Visual Studio a pomocí následujících kroků ho převeďte na projekt KMDF.

  1. Nejprve přejděte na Vlastnosti konfigurace –>Nastavení ovladače –>Model ovladače a ověřte, že Typ ovladače je nastavený na KMDF a že Hlavní verze KMDF a Vedlejší verze KMDF jsou obě prázdné.

  2. Ve vlastnostech projektu otevřete Nastavení ovladače –>ovladač síťového adaptéru a nastavte Link na rozšíření třídy síťových adaptérů na Ano.

    • Pokud převedený ovladač bude stále volat rozhraní API NDIS, pokračujte v propojení s ndis.lib.
  3. Odeberte makra preprocesoru NDIS, například NDIS650_MINIPORT=1.

  4. Do každého zdrojového souboru (nebo do společné nebo předkompilované hlavičky) přidejte následující hlavičky:

    #include <ntddk.h>
    #include <wdf.h>
    #include <netadaptercx.h>
    
  5. Přidejte standardní dekorace WDF do INF:

    [Yourdriver.Wdf]
    KmdfService = Yourdriverservice, Yourdriver.wdfsect
    
    [Yourdriver.wdfsect]
    KmdfLibraryVersion = <insert here>
    
  6. Do části NT inf přidejte nová požadovaná síťová klíčová slova:

Inicializace ovladačů

Odeberte volání NdisMRegisterMiniportDriver z DriverEntrya přidejte následující:

WDF_DRIVER_CONFIG_INIT(&config, EvtDriverDeviceAdd);
status = WdfDriverCreate(. . . );
if (!NT_SUCCESS(status)) {
  return status;
}

Pokud je nastaven, odeberte příznak WdfDriverInitNoDispatchOverride z volání WdfDriverCreate.

DriverUnload je volitelná rutina síťového ovladače WDF, takže ji můžete odebrat, pokud chcete. Nevolejte NdisMDeregisterMiniportDriver z DriverUnload.

Inicializace zařízení

Dále distribuujete kód z MiniportInitializeEx do příslušných obslužných rutin zpětného volání událostí WDF, z nichž několik je volitelné. Podrobnosti o sekvenci zpětného volání najdete v sekci Power-Up Sekvence pro klientský ovladač WDF síťového adaptéru.

Zavoláte metody ekvivalentní NdisMSetMiniportAttributes při spuštění síťového adaptéru, ale před voláním NetAdapterStart. Místo volání jedné rutiny s obecnou strukturou NDIS_MINIPORT_ADAPTER_ATTRIBUTES však ovladač klienta volá různé funkce pro nastavení různých typů funkcí.

Informace o zpětných voláních, které budete muset poskytnout a kdy spustit síťový adaptér, najdete v tématu inicializace zařízení a adaptéru.

Čtení konfigurace z registru

Dále nahraďte volání NdisOpenConfigurationEx a souvisejících funkcí metodami NetConfiguration*. NetConfiguration* metody jsou podobné funkcím Ndis*Configuration* a nebudete muset restrukturalizovat kód.

Další informace najdete v tématu Přístup k informacím o konfiguraci.

Příjem vstupně-výstupních řídicích kódů (IOCTLs) z uživatelského režimu

Přečtěte si tuto část, pokud ovladač NDIS volá NdisRegisterDeviceEx, rutina použitá k vytvoření objektu řídicího zařízení (CDO) pro příjem ioCTLs z uživatelského režimu.

Tady jsou dva způsoby, jak to udělat v síťovém ovladači klienta WDF.

Nejjednodušším portem je vytvořit řídicí objekt zařízení voláním WdfControlDeviceInitAllocate z zpětného volání klienta EVT_WDF_DRIVER_DEVICE_ADD. Další informace najdete v tématu Použití řídicích objektů zařízení.

Doporučujeme však vytvořit rozhraní zařízení, jak je popsáno v Použití rozhraní zařízení.

Dokončení inicializace zařízení

V tomto okamžiku, v EVT_WDF_DRIVER_DEVICE_ADD, můžete udělat jakékoli další kroky k inicializaci vašeho zařízení, například přidělit přerušení.

Zpracování oznámení o změnách stavu napájení

Klientský ovladač WDF neobdrží OID_PNP_SET_POWER pro změny stavu napájení.

Místo toho klient WDF zaregistruje volitelné funkce zpětného volání pro příjem oznámení o změně stavu napájení. Přehled najdete v tématu Podpora PnP a Řízení spotřeby v ovladačích funkcí.

Kód v obslužné rutině OID_PNP_SET_POWER se obvykle přesune na EVT_WDF_DEVICE_D0_EXIT a EVT_WDF_DEVICE_D0_ENTRY.

Vzhledem k tomu, že se počítač stavu napájení WDF mírně liší, budete možná muset provést menší úpravy kódu.

Konkrétně ve zpětné volací funkci MiniportInitializeEx ovladač miniportu NDIS provádí jednorázové inicializační úkony a také práci potřebnou k přepnutí zařízení do stavu D0. Pak zopakuje postup, aby přešel do D0 v jeho obslužné rutině OID_PNP_SET_POWER.

Naproti tomu klient WDF provádí jednorázové úlohy inicializace v zpětných voláních událostí před EVT_WDF_DEVICE_D0_ENTRY, během kterých je zařízení ve stavu nízkého výkonu. Pak se provede práce k přechodu na D0 v EVT_WDF_DEVICE_D0_ENTRY.

Abychom to shrnuli, v rámci WDF umístíte kód "go to D0" na jedno místo místo dvou.

Podrobnosti o sekvenci zpětného volání najdete v Power-Up posloupnosti pro klientský ovladač NetAdapterCx.

Dotazování a nastavení možností řízení spotřeby

Podobně klientský ovladač WDF neobdrží OID_PM_PARAMETERS k dotazování nebo nastavení hardwarových schopností řízení spotřeby síťového adaptéru.

Místo toho ovladač dotazuje potřebnou konfiguraci wake-on-LAN (WoL) z objektu NETPOWERSETTINGS. Další informace najdete v tématu Konfigurace řízení spotřeby.

Skutečné příznaky, které dostanete zpět, mají stejnou sémantiku jako pro miniport NDIS 6, takže nemusíte provádět hloubkové změny logiky. Hlavní rozdíl spočívá v tom, že teď můžete tyto příznaky dotazovat během sekvence vypínání. Viz pořadí power-down pro klientský ovladač NetAdapterCx.

Jakmile tento kód přesunete, můžete odstranit obslužné rutiny OID pro OID_PNP_SET_POWER a OID_PM_PARAMETERS.

Vzhledem k tomu, že rozhraní NetAdapter udržuje vaše zařízení v D0, zatímco hostitel používá síťové rozhraní, klient obvykle neimplementuje logiku napájení; Výchozí chování napájení NetAdapter je dostatečné.

Cesta k datům

Programovací model datových cest se výrazně změnil. Tady jsou některé klíčové rozdíly:

Odebrání zařízení

Odebrání zařízení pro ovladač WDF pro NIC je stejné jako u jakéhokoli jiného ovladače zařízení WDF bez potřeby specifického zpracování pro sítě. Nejprve se vypne síťová datová cesta, poté zařízení WDF. Informace o vypnutí služby WDF najdete v tématu Uživatel odpojí zařízení.

Obslužná rutina MiniportHaltEx bude pravděpodobně rozdělena mezi EVT_WDF_DEVICE_D0_EXIT a EVT_WDF_DEVICE_RELEASE_HARDWARE.

Klient služby WDF nemusí odstranit NetAdapter ani žádnou frontu datové cesty, které vytvořil. Služba WDF tyto objekty odstraní automaticky.

Můžete odstranit MiniportShutdownEx, MiniportResetEx a MiniportCheckForHangEx. Tyto zpětná volání se už nepodporují.

ekvivalenty funkce NDIS-WDF

Většinu NdisXxx funkcí je možné nahradit ekvivalentem WDF. Obecně byste měli zjistit, že potřebujete velmi málo funkcí, které jsou importovány z NDIS.SYS.

Seznam ekvivalentů funkce najdete v tématu NDIS-WDF ekvivalenty funkce.

Ladění

Viz Ladění klientského ovladače NetAdapterCx.

Rozšíření ladicího programu !ndiskd.netadapter ukazuje výsledky podobné tomu, co !ndiskd.miniport ukazuje pro ovladač NDIS 6.

Závěr

Pomocí kroků v tomto tématu byste měli mít funkční ovladač, který se spustí a zastaví zařízení.

Poznámka: NetAdapterCx v současné době nepodporuje spouštění iSCSI.