Udostępnij za pośrednictwem


Wyświetlanie obiektów UMDF

Ostrzeżenie

UMDF 2 jest najnowszą wersją UMDF i zastępuje UMDF 1. Wszystkie nowe sterowniki UMDF powinny być zapisywane przy użyciu funkcji UMDF 2. Do usługi UMDF 1 nie są dodawane żadne nowe funkcje, a obsługa UMDF 1 na nowszych wersjach systemu Windows 10 jest ograniczona. Sterowniki uniwersalne systemu Windows muszą używać funkcji UMDF 2.

Zarchiwizowane przykłady UMDF 1 można znaleźć w Windows 11, wersja 22H2 - Maj 2022 aktualizacja przykładów sterowników.

Aby uzyskać więcej informacji, zobacz Wprowadzenie do usługi UMDF.

W tym temacie opisano sposób używania rozszerzeń debugera Wudfext.dll do wyświetlania informacji o obiektach używanych przez sterownik User-Mode Driver Framework (UMDF) w wersji 1.

Począwszy od UMDF w wersji 2, należy zamiast tego użyć rozszerzeń debugera Wdfkd.dll. Aby uzyskać więcej informacji, zobacz Windows Driver Framework Extensions (Wdfkd.dll).

Aby wyświetlić informacje o obiektach UMDF w wersji 1, można wykonać następujące czynności:

  1. Użyj jednego z następujących rozszerzeń debugera UMDF, aby wyświetlić stosy urządzeń, które znajdują się w procesie hosta:

    • !wudfext.umdevstacks

    • !wudfext.umdevstack , jak pokazano w poniższym przykładzie:

      !wudfext.umdevstack <dev-stack-addr>

      Informacje obejmują obiekty sterowników oraz obiekty urządzeń dla każdego sterownika. Obecnie funkcja UMDF zezwala tylko na jeden stos urządzeń w procesie hosta, więc nie ma różnicy między danymi wyjściowymi tych dwóch rozszerzeń.

  2. Wyświetl pełne drzewo obiektów przy użyciu rozszerzenia debugera !wudfext.wudfobject UMDF, jak w poniższym przykładzie:

    #B0 !wudfext.wudfobject #B1 IWDFDriver* #C2 1 #C3

  3. Użyj rozszerzenia debugera UMDF programu !wudfext.wudfdevice , jak pokazano w poniższym przykładzie, aby określić stan Plug and Play (PnP) i zarządzania energią urządzenia:

    !wudfext.wudfdevice <IWDFDevice*>

  4. Wykonaj następujące kroki w celu określenia kolejek skojarzonych z urządzeniem:

    1. Użyj rozszerzenia debugera UMDF !wudfext.wudfdevicequeues, aby wyświetlić kolejki skojarzone z urządzeniem. To rozszerzenie pokazuje właściwości kolejki, stan kolejki oraz zapytania posiadane przez sterownik.

    2. Użyj rozszerzenia debugera UMDF !wudfext.wudfqueue, aby uzyskać informacje o każdej kolejce, jak pokazano na poniższym przykładzie.

      !wudfext.wudfqueue <IWDFIoQueue*>

  5. Użyj rozszerzenia debuggera UMDF !wudfext.wudfrequest, aby uzyskać informacje o konkretnym żądaniu. Te informacje obejmują podstawowy pakiet żądań we/wy trybu użytkownika (IRP). Z informacji IRP w trybie użytkownika można określić, gdzie żądanie jest obecnie przetwarzane w stosie. Możesz również użyć rozszerzenia debugera UMDF !wudfext.umirp, aby uzyskać te informacje o IRP trybu użytkownika.

  6. Określ wszystkie cele we/wy:

    1. Użycie rozszerzenia debuggera UMDF !wudfext.wudfobject w celu wyświetlenia obiektów zależnych obiektu urządzenia. Obiekty docelowe we/wy są obiektami podrzędnymi obiektu urządzenia.

    2. Za pomocą rozszerzenia debuggera UMDF !wudfext.wudfiotarget, jak pokazano w poniższym przykładzie, można wyświetlić informacje o każdym obiekcie docelowym I/O.

      !wudfext.wudfiotarget <IWDFTarget*>

      To rozszerzenie pokazuje stan obiektu docelowego i listę wysłanych żądań.

    Obecnie nie ma rozszerzenia debugera UMDF, które umożliwia wyświetlanie wszystkich elementów docelowych we/wy.

  7. Użyj następujących rozszerzeń debugera UMDF, aby wyświetlić informacje o obiektach plików:

    !wudfext.wudfrequest lub !wudfext.umirp
    Użyj rozszerzenia !wudfext.wudfrequest lub !wudfext.umirp UMDF debugera, aby wyświetlić pliki, które są obiektami podrzędnymi obiektów urządzenia.

    !wudfext.wudffile
    Użyj rozszerzenia debugera UMDF programu !wudfext.wudffile, jak pokazano w poniższym przykładzie, aby wyświetlić informacje o pliku frameworka.

    !wudfext.wudffile <IWDFFile*>

    !wudfext.umfile
    Użyj rozszerzenia debugera UMDF programu !wudfext.umfile, jak pokazano w poniższym przykładzie, aby wyświetlić informacje o pliku wewnątrz stosu UMDF (czyli obiekcie pliku, który został utworzony przez sterownik w stosie, w odróżnieniu od pliku utworzonego przez aplikację lub sterownik w innym stosie):

    !wudfext.umfile <addr>

    W niektórych przypadkach może nie być odpowiedni plik struktury ramowej, a informacje o IRP trybu użytkownika mogą zawierać plik wewnętrzny stosu UMDF.

    Informacje, które wyświetla !wudfext.umfile, zawierają wszelkie IRP, które są kolejkowane do pliku stosu UMDF. Tylko pliki utworzone przez sterownik śledzą IRP w trybie użytkownika, które są kolejką do tych plików. W przypadku plików utworzonych przez aplikację menedżer we/wy śledzi IRP w trybie jądra.

    !wudfext.umdevstacks i !wudfext.umdevstack
    Użyj danych wyjściowych z rozszerzeń debugera !wudfext.umdevstacks i !wudfext.umdevstack UMDF, aby wyświetlić nierozwiązane pliki w ramach stosu UMDF, które odpowiadają plikom utworzonym przez sterownik.