Sdílet prostřednictvím


Určení stavu zařízení UMDF

Toto téma popisuje, jak můžete používat rozšíření ladicího programu ve spojení s ovladačem User-Mode Driver Framework (UMDF) verze 1 nebo 2 k určení stavu vašeho zařízení UMDF.

Pro UMDF verze 1 použijete příkazy rozšíření implementované v wudfext.dll. Počínaje UMDF verze 2 použijete příkazy rozšíření implementované v wdfkd.dll.

Pokud chcete zjistit stav zařízení, postupujte následovně:

  1. Připojte se k hostitelskému procesu ovladače pomocí jednoho z následujících typů ladicích nástrojů:

    • Ladicí program v uživatelském režimu:

      1. Vyhledejte příslušný hostitelský proces ovladače pro zařízení (tj. WUDFHost.exe). Pokud existuje více instancí hostitelského procesu, můžete pomocí operačního systému dodaného Tasklist.exe aplikace určit, který proces hostuje váš ovladač.

        Tento příkaz použijte z příkazového řádku se zvýšenými oprávněními.

        seznam úkolů < -myourdriver.dll>

      2. Spusťte ladicí program se zvýšenými oprávněními a připojte debugger k příslušnému procesu.

      3. Načtěte znovu symboly pomocí příkazu ladicího programu .reload.

      4. Všechna vlákna můžete zobrazit pomocí příkazu ~*k debuggeru.

    • Ladicí program v režimu jádra:

      1. Vyhledejte příslušný hostitelský proces ovladače pro zařízení (to znamená WUDFHost.exe). Pomocí rozšíření ladicího programu v režimu kernelu !process získejte seznam všech případů WUDFHost.exe, jak je znázorněno v následujícím příkladu:

        !process 0 0 WUDFHost.exe

        Adresa procesu a adresa bloku prostředí procesu (PEB) z výstupu příkazu !process 0 0 se používají v dalších krocích.

      2. Připojte se k hostitelskému procesu jedním z následujících způsobů:

        • Použijte příkaz ladicího programu .process pro neinvazivní připojení, jak je znázorněno v následujícím příkladu:

          .process /p /r process-addr

          Pokud nemůžete nechat provádění pokračovat, měli byste použít neinvazivní připojení. Například byste měli použít neinvazivní připojení, když obdržíte přerušení ve své aplikaci a chcete zjistit, co ovladač udělal, aby toto přerušení způsobil, nebo když se připravuje ukončení hostitelského procesu pomocí reflektoru.

        • Použijte příkaz .process ladicího programu v invazivním připojení, jak je znázorněno v následujícím příkladu:

          .process /i <process-addr>

          Ladicí program požádá, abyste pokračovali pomocí příkazu g ladicího programu; krátce po spuštění příkazu g ladicího programu ladicí program zasáhne do aktivního procesu. Znovu načtěte symboly uživatele pomocí příkazu ladicího programu .reload, jak je ukázáno v následujícím příkladu:

          #B0 .reload /user #C1

      3. Pokud existuje více instancí hostitelského procesu, můžete použít rozšíření pro obecný ladicí program !peb, jak je znázorněno v následujícím příkladu, abyste získali seznam modulů, které jsou načteny v procesu:

        !peb <Adresa PEB>

        Abyste mohli tento příkaz fungovat, musíte se připojit k procesu. Můžete připojit neinvazivně, jak je znázorněno v předchozím kroku.

        Vyhledejte proces, ve kterém je načtena knihovna DLL ovladače.

      4. K získání informací o procesu použijte rozšíření ladicího programu !process v režimu jádra, jak je znázorněno v následujícím příkladu. Tyto informace zahrnují vlákna, která se spouští v procesu, a adresy těchto vláken:

        #C2 !process #C0 process-addr #C1 #C2

      5. K získání informací o jednotlivých vláknech použijte rozšíření !thread kernel-mode debuggeru, jak je znázorněno v následujícím příkladu:

        !thread <thread-addr>

  2. V ladicím programu pomocí příkazu .chain zjistěte, jestli je načtena knihovna rozšíření ladicího programu wudfext.dll (UMDF 1) nebo wdfkd.dll (UMDF 2).

  3. Pokud knihovna, kterou potřebujete, není k dispozici, použijte příkaz .load k načtení DLL rozšíření do ladicího programu. Potom zadejte .reload, aby se znovu načetly informace o symbolech.

  4. Použijte !wudfext.umdevstacks (UMDF 1) nebo !wdfkd.wdfumdevstacks (UMDF 2) ke zobrazení všech zásobníků zařízení načtených v hostitelském procesu.

    Pak použijte !wudfext.umdevstack (UMDF 1) nebo !wdfkd.wdfumdevstack (UMDF 2), abyste získali podrobné informace o zásobníku zařízení.

  5. Pomocí !wudfext.wudfdevice (UMDF 1) nebo !wdfkd.wdfdevice (UMDF 2) získejte informace o stavu Plug and Play (PnP) a řízení spotřeby zařízení.

  6. Pomocí !wudfext.wudfdriverinfo (UMDF 1) nebo !wdfkd.wdfdriverinfo (UMDF 2) zobrazíte další informace o ovladači, včetně jeho stromu zařízení.