共用方式為


!acxkd

!acxkd 擴充功能會顯示音訊類別擴充功能 (ACX) 驅動程式的相關信息。 如需 ACX 的詳細資訊,請參閱 ACX 音訊類別延伸模組概觀

語法

!acxkd.[Options]

DLL

Acxkd.dll

調試程式版本

!acxkd 擴充功能適用於 WinDbg 1.2402.24001.0 版和更新版本。

ACX 1.0 偵錯

!acxkd 調試程序擴充功能僅提供 ACX 1.0 下的部分功能。 建議更新至 ACX 1.1。

參數

選項 - 指定要顯示的資訊類型。

選項 描述 參數
!幫助 顯示可用擴充功能命令的相關信息。 [<command name>]
!acxcircuit 傾印 ACXCIRCUIT 物件。 <circuit> - ACXCIRCUIT WDF 句柄
!acxdataformat 傾印 ACXDATAFORMAT 物件。 <dataformat> - ACXDATAFORMAT WDF 句柄
!acxdataformatlist 傾印 ACXDATAFORMATLIST 物件。 <dataformatlist> - ACXDATAFORMATLIST WDF 句柄
!acxdevice 傾印 ACXDEVICE 物件。 <device> - ACXDEVICE WDF 句柄
!acxelement 傾印 ACXELEMENT 物件。 <element> - ACXELEMENT WDF 句柄
!acxevents 傾印 ACXOBJECT 物件的事件。 <events> - ACXOBJECT WDF 句柄
!acxfactory 傾印 ACXFACTORYCIRCUT 物件。 <factory> - ACXFACTORYCIRCUIT WDF 句柄
!acxmanager 傾印 ACXMANAGER 物件。
!acxmethods ACXOBJECT 對象的傾印方法。 <object> - ACXOBJECT WDF 句柄
!acxobjbag 傾印 ACXOBJECTBAG 物件。 <objbag> - ACXOBJECTBAG WDF 句柄
!acxobject 傾印 ACXOBJECT 物件。 <object> - ACXOBJECT WDF 句柄
!acxpin 傾印 ACXPIN 物件。 <pin> - ACXPIN WDF 句柄
!acxproperties ACXOBJECT 對象的傾印屬性。 <properties> - ACXOBJECT WDF 句柄
!acxstream 傾印 ACXSTREAM 物件。 <stream> - ACXSTREAM 句柄
!acxstreambridge 傾印 ACXSTREAMBRIDGE 物件。 <bridge> - ACXSTREAMBRIDGE 句柄
!acxtarget 傾印 ACXTARGET 物件。 <target> - ACXTARGET WDF 句柄
!acxtemplate 傾印 ACXTEMPLATE 物件。 <tmpt> - ACXTEMPLATE 句柄

備註

!acxkd.help

若要列出所有可用的命令,請使用 acxkd !help 命令。

0: kd> !acxkd.help
Commands for C:\Debugger\acxkd.dll:
  !acxcircuit        - Dump a ACXCIRCUT object.
  !acxdataformat     - Dump a ACXDATAFORMAT object.
  !acxdataformatlist - Dump a ACXDATAFORMATLIST object.
  !acxdevice         - Dump a ACXDEVICE object.
  !acxelement        - Dump a ACXELEMENT object.
  !acxevents         - Dump events of a ACXOBJECT object.
  !acxfactory        - Dump a ACXFACTORYCIRCUT object.
  !acxmanager        - Dump a ACXMANAGER object.
  !acxmethods        - Dump methods of a ACXOBJECT object.
  !acxobjbag         - Dump a ACXOBJECTBAG object.
  !acxobject         - Dump a ACXOBJECT* object.
  !acxpin            - Dump a ACXPIN object.
  !acxproperties     - Dump properties of a ACXOBJECT object.
  !acxstream         - Dump a ACXSTREAM object.
  !acxstreambridge   - Dump a ACXSTREAMBRIDGE object.
  !acxtarget         - Dump a ACXTARGET* object.
  !acxtemplate       - Dump a ACX*TEMPLATE object.
  !help              - Displays information on available extension commands
!help <cmd> will give more information for a particular command

使用 acxkd !help 命令深入瞭解任何命令,例如 !acxdevice 命令。

0: kd> !acxkd.help acxdevice
!acxdevice <device>
  <device> - ACXDEVICE handle
Dump a ACXDEVICE object.

使用 !acxdevice 命令作為起點來檢查 ACX 驅動程式。

3: kd> !acxdevice 0x00007dfadb0a5358
Dumping info for ACXDEVICE 0x00007dfadb0a5358

    In connected standby: FALSE

    State: AfxDeviceStateInitialized
    State history:
        0 : AfxDeviceStateInvalid
        1 : AfxDeviceStateInvalid
        2 : AfxDeviceStateInvalid
        3 : AfxDeviceStateInvalid
        4 : AfxDeviceStateInvalid
        5 : AfxDeviceStateCreated
        6 : AfxDeviceStateInitializing
        7 : AfxDeviceStateInitialized

    Create dispatch list:
        Create name: eHDMIOutTopo
        Dispatch routine: fffff80393179918
        Dispatch context: ffff82052513b960

    Circuits:
        ----------------------------------

        [Circuit 0]

        Name: eHDMIOutTopo
        Type: AcxCircuitTypeRender
        ComponentId: {BFCA9AD9-4EED-46C2-9323-B5D4400761A5}

        State: AfxCircuitStatePoweredUp

        Interface is enabled
        SymolicLinkName: \??\HDAUDIO#SUBFUNC_01&VEN_8086&DEV_281F&NID_0001&SUBSYS_00000000&REV_1000#6&4948348&0&0002&00000025#{2c6bb644-e1ae-47f8-9a2b-1d1fa750f2fa}\eHDMIOutTopo

        !acxproperties 00007dfad9ccccb8
        !acxmethods 00007dfad9ccccb8
        !acxevents 00007dfad9ccccb8

        # Pins: 2
            !acxpin 00007dfadf996dd8
            !acxpin 00007dfad4697238

        # Elements: 1
            !acxelement 00007dfadf997a18

        # Streams: 0

        !acxcircuit 00007dfad9ccccb8

    !wdfqueue 00007dfade9beaf8
    !wdfdevice 00007dfadb0a5358

    !wdfhandle 00007dfadb0a5358
    dt Acx01000!Acx::AfxDevice ffff8205256ab420

按兩下輸出中的連結,即可使用 !acxproperties、!acxmethods 和 !acxevents 命令來顯示資訊。

如需尋找 ACXDEVICE 物件 wdfhandle 的相關信息,請參閱 本文中的範例 ACX 驅動程式逐步解說

WDF 命令 - !wdfkd.wdfldr

由於 ACX 驅動程式是 WDF 驅動程式,請使用任何 WDF 核心除錯程式命令。 例如,使用 !wdfkd.wdfldr 來顯示版本資訊和與 WDF 的 ACX 系結。

0: kd> !wdfldr acx01000
WDF Driver: Acx01000
----------------------------------
CLIENT_MODULE   0xffff82052abdcbc0
  WDF Version   v1.31
  ImageName     Acx01000.sys
  ImageAddress  0xfffff80393150000
  ImageSize     0xb3000
  BindingList   0xffff82052abdcc08

  ImageName        WdfVer Ver   WdfGlobals         BindInfo           ImageAddress       ImageSize
  Wdf01000.sys     v1.33  v1.33 0xffff8205218d8fb0 0xffff8205218d8df0 0xfffff80356a00000 0x000c7000
----------------------------------
CLASS_MODULE    0xffff820525b3dc90
  WDF Version   v1.31
  Version       v1.1
  Service       \Registry\Machine\System\CurrentControlSet\Services\acx01000
  ImageName     Acx01000.sys
  ImageAddress  0xfffff80393150000
  ImageSize     0xb3000
  ClientsList   0xffff820525b3dcf8
  Associated Clients: 1

  ImageName        WdfVer Ver   WdfGlobals         BindInfo           ImageAddress       ImageSize
  AcxHdAudio.sys   v1.25  v1.0  0xffff820527f70ae0 0xfffff803930df3e8 0xfffff803930c0000 0x0008a000
----------------------------------

!acxkd.acxmanager

!acxmanager使用 命令來顯示 ACXMANAGER 物件的相關信息。 這提供良好的起點來調查 ACX 驅動程式。

此範例顯示針對 mulitcircuit ACX 組態所提供的廣泛 !acxmanager 輸出的第一個部分。

10: kd> !acxmanager
Dumping info for ACXMANAGER 0x000054f94d1d4378

    Delete pending: No

    # singleton composites: 8
        ----------------------------------

        [Composite 0]

        State: AfxCompositeStateActive
        !acxobjbag 000054f94c8e61c8
        !acxtemplate 000054f94c014d28
        !acxobject 000054f94c0141c8

        # circuits: 3
            ----------------------------------
            [Circuit 0 CORE]
…

此範例輸出會顯示單一 ACX 線路。

0: kd> !acxmanager
Dumping info for ACXMANAGER 0x000049f6c3c769f8

    Delete pending: No

    # singleton composites: 0
    # Composite factories: 0
    !wdfhandle 000049f6c3c769f8
    dt Acx01000!Acx::AfxManager ffffb6093c3896b0

!acxkd.acxobject

在 !acxmanager 的輸出中,會提供 wdfhandle 的位址。 使用 wdfhandle 位址搭配 !acxobject 命令來顯示 ACXMANAGER 或任何其他 ACX 對象的相關信息。

0: kd> !acxobject 000049f6c3c769f8
Dumping info for ACXMANAGER 0x000049f6c3c769f8

    Delete pending: No

    # singleton composites: 0
    # Composite factories: 0
    !wdfhandle 000049f6c3c769f8
    dt Acx01000!Acx::AfxManager ffffb6093c3896b0

按兩下 dt 上述輸出中的連結,以查看內部 ACX 物件結構的詳細資訊。

0: kd> dt Acx01000!Acx::AfxManager ffffb6093c3896b0
   +0x000 m_Object         : 0x000049f6`c3c769f8 ACXMANAGER__
   =fffff803`8a478ad8 s_AfxManager     : 0xffffb609`3c3896b0 Acx::AfxManager
   +0x008 m_AcxGlobals     : 0xffffb609`403cae24 _ACX_DRIVER_GLOBALS
   +0x010 m_Flags          : 0
   +0x010 m_Unloading      : 0y0
   +0x018 m_CompositesMutex : _FAST_MUTEX
   +0x050 m_CompositeFactoriesList : _LIST_ENTRY [ 0xffffb609`3c389700 - 0xffffb609`3c389700 ]
   +0x060 m_CompositeFactoriesCount : 0n0
   +0x068 m_CompositesList : _LIST_ENTRY [ 0xffffb609`3c389718 - 0xffffb609`3c389718 ]
   +0x078 m_CompositesCount : 0n0
   +0x080 m_FactoriesList  : _LIST_ENTRY [ 0xffffb609`3c389730 - 0xffffb609`3c389730 ]
   +0x090 m_CircuitsList   : _LIST_ENTRY [ 0xffffb609`40a27068 - 0xffffb609`40a27068 ]
   +0x0a0 m_FiltersMutex   : _FAST_MUTEX
   +0x0d8 m_FactoryFiltersList : _LIST_ENTRY [ 0xffffb609`3c389788 - 0xffffb609`3c389788 ]
   +0x0e8 m_CircuitFiltersList : _LIST_ENTRY [ 0xffffb609`3c389798 - 0xffffb609`3c389798 ]
   +0x0f8 m_FactoriesNotificationHandle : 0xffffc70c`b2356790 Void
   +0x100 m_CircuitsNotificationHandle : 0xffffc70c`b2357ec0 Void
   +0x108 m_CommandQueue   : 0xffffb609`3ffc5400 Acx::AfxWorkQueue

請注意,調試程序輸出可能包含公用 ACX 物件的混合,例如 ACXMANAGER、ACXCIRCUITFACTORY 和 ACXCIRCUIT,以及定義為不透明的內部結構。 內部類型不保證保持相同,或可在不同版本的 ACX 中使用,且不得直接呼叫或使用。

由於 ACX 對像是 WDF 物件,因此您可以使用 !wdfkd.wdfhandle 命令來顯示 ACXMANAGER 物件的其他資訊。

0: kd> !wdfhandle 000049f6c3c769f8
Treating handle as a KMDF handle!

Dumping WDFHANDLE 0x000049f6c3c769f8
=============================
Handle type is WDFOBJECT [ACXMANAGER]
Refcount: 2
Contexts:
    context:  dt 0xffffb6093c3896b0 Acx01000!AfxManager (size is 0x110 bytes)
    EvtCleanupCallback fffff8038a453070 Acx01000!Acx::WdfCpp::ObjectContext<ACXMANAGER__ *,Acx::AfxManager>::EvtObjectContextCleanupThunk
    EvtDestroyCallback fffff8038a453000 Acx01000!Acx::WdfCpp::ObjectContext<ACXMANAGER__ *,Acx::AfxManager>::EvtObjectContextDestroyThunk

    context:  dt 0xffffb609404c2280 Acx01000!WdfCustomType_ACXMANAGER (size is 0x10 bytes)
    <no associated attribute callbacks>

Parent: !wdfhandle 0x000049f6d4e2d5c8, type is WDFDEVICE
Owning device: !wdfdevice 0x000049f6d4e2d5c8

!wdfobject 0xffffb6093c389600

!acxkd.acxpin

顯示其他 ACX 資訊的命令,例如 !acxpin 需要物件的 WDF 句柄。 如需尋找 ACX 物件的 WDF 句柄的相關信息,請參閱 本文中的範例 ACX 驅動程式逐步解說

0: kd> !acxpin 0x000049f6befeee38
Dumping info for ACXPIN 0x000049f6befeee38

    ID: 0
    Type: AcxPinTypeSink
    Type: AcxPinCommunicationSink

    Category: KSCATEGORY_AUDIO
    Name: {00000000-0000-0000-0000-000000000000}

根據 ACX 物件的狀態,並非所有資訊都可供顯示。

!acxkd.acxdataformatlist

類似於 !acxpin, !acxdataformatlist 會顯示 ACX 數據格式清單的相關信息。

0: kd> !acxdataformatlist 0x000049f6bf8be668
Dumping info for ACXDATAFORMATLIST 0x000049f6bf8be668

    # Scan count: 0
    # Data formats: 6
    Data formats:
        Sample Rate: 48000, #Channels: 2, #Bits: 16, ValidBits: 16, Mask: 0x3 (default)
        Sample Rate: 48000, #Channels: 2, #Bits: 32, ValidBits: 24, Mask: 0x3
        Sample Rate: 44100, #Channels: 2, #Bits: 16, ValidBits: 16, Mask: 0x3
        Sample Rate: 44100, #Channels: 2, #Bits: 32, ValidBits: 24, Mask: 0x3
        Sample Rate: 32000, #Channels: 2, #Bits: 16, ValidBits: 16, Mask: 0x3
        Sample Rate: 32000, #Channels: 2, #Bits: 32, ValidBits: 24, Mask: 0x3

    !wdfhandle 000049f6bf8be668
    dt Acx01000!Acx::AfxDataFormatList ffffb60940444530

範例 ACX 驅動程式逐步解說

本節提供 ACX 驅動程式偵錯的逐步解說。

符號路徑

使用 .symfix.sympath (設定符號路徑) 命令來變更符號路徑。 如果您搭配驅動程式使用本機程式代碼,也會將路徑新增至該程序代碼。 使用 .reload (Reload Module) 命令,從目前路徑重載符號。

.symfix
.sympath+ C:\Windows-driver-samples-develop\audio\Acx\Samples\AudioCodec\Driver
.reload /f

驅動程式的調試程序內容

如果您要偵錯作用中的 ACX 驅動程式,請設定斷點。 這會將調試程式放在 ACX 物件的內容中,以便收集及顯示資訊。

這些範例斷點的設計目的是在啟動範例 AudioCodec 驅動程式時引發。

bm AudioCodec!DriverEntry
bm AudioCodec!AcxDriverInitialize

這些範例斷點的設計目的是在特定動作發生時引發,例如針腳或線路建立。

bm AudioCodec!AcxPinCreate
bm AudioCodec!AcxCircuitCreate
bm AudioCodec!Codec_EvtBusDeviceAdd

載入驅動程式並引發適當的斷點,且可使用有效的執行內容之後,請使用 !acxkd 命令來顯示任何 ACX 對象的相關信息。 使用 !acxobject 命令取得一般資訊和特定命令,例如 !acxcircuit 或 !acxpin,以取得更細微的資訊。

載入 acxkd dll

使用 .load (載入延伸模組 DLL) 命令來載入acxkd.dll延伸模組。

.load acxkd.dll

顯示 ACX 驅動程式的相關信息

若要收集目標驅動程式的相關信息,請使用 lm (List Loaded Modules) 命令來查看所有已載入的驅動程式。 然後使用 Dvm 選項來顯示感興趣的 ACX 驅動程式相關信息,如下所示。

0: kd> lm Dvm AcxHdAudio
Browse full module list
start             end                 module name
fffff803`8a3c0000 fffff803`8a448000   AcxHdAudio   (private pdb symbols)  C:\ProgramData\Dbg\sym\AcxHdAudio.pdb\6AEA2622909B20C1AD149C57ACBB4A6F1\AcxHdAudio.pdb
    Loaded symbol image file: AcxHdAudio.sys
    Mapped memory image file: C:\ProgramData\Dbg\sym\AcxHdAudio.sys\0829423388000\AcxHdAudio.sys
    Image path: \SystemRoot\System32\drivers\AcxHdAudio.sys
    Image name: AcxHdAudio.sys
    Browse all global symbols  functions  data  Symbol Reload
    Image was built with /Brepro flag.
    Timestamp:        08294233 (This is a reproducible build file hash, not a timestamp)
    CheckSum:         00087DD6
    ImageSize:        00088000
    Translations:     0000.04b0 0000.04e4 0409.04b0 0409.04e4
    Information from resource tables:

使用 x (檢查符號) 命令和通配符遮罩來顯示特定的 ACX 結構,例如 ACXPIN。

0: kd> x /D AcxHdAudio!acxpin*
 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

fffff803`8a3e3216 AcxHdAudio!AcxPinGetRawDataFormatList =  (inline caller) AcxHdAudio!HDACodec_EvtFormatChange+66
fffff803`8a3e31e0 AcxHdAudio!AcxPinGetCircuit =  (inline caller) AcxHdAudio!HDACodec_EvtFormatChange+30
fffff803`8a3e361f AcxHdAudio!AcxPinNotifyDataFormatChange =  (inline caller) AcxHdAudio!HDACodec_EvtFormatChange+46f
fffff803`8a3e7396 AcxHdAudio!AcxPinCreate =  (inline caller) AcxHdAudio!HDACodecR_CreateRenderCircuit+962
fffff803`8a3e74a2 AcxHdAudio!AcxPinGetRawDataFormatList =  (inline caller) AcxHdAudio!HDACodecR_CreateRenderCircuit+a6e
fffff803`8a3e75f8 AcxHdAudio!AcxPinCreate =  (inline caller) AcxHdAudio!HDACodecR_CreateRenderCircuit+bc4
fffff803`8a3e789a AcxHdAudio!AcxPinAddJacks =  (inline caller) AcxHdAudio!HDACodecR_CreateRenderCircuit+e66
fffff803`8a3e5ae5 AcxHdAudio!AcxPinGetCircuit =  (inline caller) AcxHdAudio!HDACodecR_EvtAcxPinRetrieveJackSinkInfo+25
fffff803`8a3e5913 AcxHdAudio!AcxPinGetCircuit =  (inline caller) AcxHdAudio!HDACodecR_EvtAcxPinRetrieveName+73
fffff803`8a3ea277 AcxHdAudio!AcxPinCreate =  (inline caller) AcxHdAudio!HDACodecC_CreateCaptureCircuit+b27
fffff803`8a3ea39c AcxHdAudio!AcxPinGetRawDataFormatList =  (inline caller) AcxHdAudio!HDACodecC_CreateCaptureCircuit+c4c
fffff803`8a3ea4bc AcxHdAudio!AcxPinCreate =  (inline caller) AcxHdAudio!HDACodecC_CreateCaptureCircuit+d6c
fffff803`8a3ea7b2 AcxHdAudio!AcxPinAddJacks =  (inline caller) AcxHdAudio!HDACodecC_CreateCaptureCircuit+1062

視調試程式中目前的執行內容而定,可能可以使用 dx (顯示調試程式物件模型表達式) 向下切入到特定的 ACX 結構。

0: kd> dx -r2 AudioCodec!AcxDeviceAddCircuit
AudioCodec!AcxDeviceAddCircuit                 : AudioCodec!AcxDeviceAddCircuit+0x0 [Type: long __cdecl(WDFDEVICE__ *,ACXCIRCUIT__ *)]
0: kd> u fffff8007ead1120
AudioCodec!AcxDeviceAddCircuit [C:\Program Files (x86)\Windows Kits\10\Include\10.0.26016.0\km\acx\km\1.1\AcxDevice.h @ 206]:
fffff800`7ead1120 4889542410      mov     qword ptr [rsp+10h],rdx
fffff800`7ead1125 48894c2408      mov     qword ptr [rsp+8],rcx
fffff800`7ead112a 4883ec38        sub     rsp,38h
fffff800`7ead112e b808000000      mov     eax,8
fffff800`7ead1133 486bc046        imul    rax,rax,46h
fffff800`7ead1137 488d0dc2ab0000  lea     rcx,[AudioCodec!AcxFunctions (fffff800`7eadbd00)]
fffff800`7ead113e 488b0401        mov     rax,qword ptr [rcx+rax]
fffff800`7ead1142 4889442420      mov     qword ptr [rsp+20h],rax

!wdfkd.wdfdriverinfo

使用 !wdfdriverinfo 命令搭配驅動程式名稱來收集 WDF 資訊,例如相關聯的 ACX 物件和 ACXDEVICE wdfhandle。

0: kd> !wdfdriverinfo AcxHdAudio.sys 1 -v 
----------------------------------
Default driver image name: AcxHdAudio
WDF library image name: Wdf01000
 FxDriverGlobals  0xffffb609403e3de0
 WdfBindInfo      0xfffff8038a3dd1b0
   Version        v1.25
 Library module   0xffffb60929cc6050
   ServiceName    \Registry\Machine\System\CurrentControlSet\Services\Wdf01000
   ImageName      Wdf01000
----------------------------------
WDFDRIVER: 0x000049f6bfe9d5d8
    context:  dt 0xffffb60940162bc0 AcxHdAudio!CODEC_DRIVER_CONTEXT (size is 0x1 bytes)
    <no associated attribute callbacks>

    context:  dt 0xffffb6093ccead20 Acx01000!AfxDriver (size is 0x20 bytes)
    EvtCleanupCallback fffff8038a455780 Acx01000!Acx::WdfCpp::ObjectContext<WDFDRIVER__ *,Acx::AfxDriver>::EvtObjectContextCleanupThunk
    EvtDestroyCallback fffff8038a455740 Acx01000!Acx::WdfCpp::ObjectContext<WDFDRIVER__ *,Acx::AfxDriver>::EvtObjectContextDestroyThunk
Object Hierarchy: !wdfhandle 0x000049f6bfe9d5d8 0xff
Driver logs: !wdflogdump AcxHdAudio.sys -d
Framework logs: !wdflogdump AcxHdAudio.sys -f

    !wdfdevice 0x000049f6bffba488 ff (FDO)
        Pnp/Power State: WdfDevStatePnpStarted, WdfDevStatePowerD0, WdfDevStatePwrPolStartedWakeCapable
        context:  dt 0xffffb60940045e60 AcxHdAudio!CODEC_DEVICE_CONTEXT (size is 0x110 bytes)
        EvtCleanupCallback fffff8038a3e3c90 AcxHdAudio!HDACodec_EvtDeviceContextCleanup

        context:  dt 0xffffb60933f030f0 Acx01000!AfxDevice (size is 0x150 bytes)
        EvtCleanupCallback fffff8038a451910 Acx01000!Acx::WdfCpp::ObjectContext<WDFDEVICE__ *,Acx::AfxDevice>::EvtObjectContextCleanupThunk
        EvtDestroyCallback fffff8038a451740 Acx01000!Acx::WdfCpp::ObjectContext<WDFDEVICE__ *,Acx::AfxDevice>::EvtObjectContextDestroyThunk

        context:  dt 0xffffb60940a26b90 AcxHdAudio!CODEC_RENDER_DEVICE_CONTEXT (size is 0x38 bytes)
        <no associated attribute callbacks>

        context:  dt 0xffffb609409f2e00 AcxHdAudio!CODEC_CAPTURE_DEVICE_CONTEXT (size is 0x8 bytes)
        <no associated attribute callbacks>
        !wdfdevicequeues 0x000049f6bffba488

        !wdfdevice 0x000049f6bef1a848 ff (PDO)
            Pnp/Power State: WdfDevStatePnpStarted, WdfDevStatePowerD0BusWakeOwner, WdfDevStatePwrPolStartedWakeCapable
            context:  dt 0xffffb609410e5aa0 AcxHdAudio!CODEC_RENDER_DEVICE_CONTEXT (size is 0x38 bytes)
            EvtCleanupCallback fffff8038a3e6400 AcxHdAudio!HDACodecR_EvtDeviceContextCleanup

            context:  dt 0xffffb60933f090d0 Acx01000!AfxDevice (size is 0x150 bytes)
            EvtCleanupCallback fffff8038a451910 Acx01000!Acx::WdfCpp::ObjectContext<WDFDEVICE__ *,Acx::AfxDevice>::EvtObjectContextCleanupThunk
            EvtDestroyCallback fffff8038a451740 Acx01000!Acx::WdfCpp::ObjectContext<WDFDEVICE__ *,Acx::AfxDevice>::EvtObjectContextDestroyThunk
            !wdfdevicequeues 0x000049f6bef1a848

----------------------------------

WDF Verifier settings for AcxHdAudio.sys is OFF
----------------------------------

在上述輸出中,相關聯的 wdfdevice 可以使用連結。 按兩下該連結以顯示相關聯 WDF 裝置物件的相關信息。

0: kd> !wdfdevice 0x000049f6bef1a848 ff
Treating handle as a KMDF handle!

Dumping WDFDEVICE 0x000049f6bef1a848
=================================

WDM PDEVICE_OBJECTs:  self ffffb60940ddbdd0

Pnp state:  119 ( WdfDevStatePnpStarted )
Power state:  309 ( WdfDevStatePowerD0BusWakeOwner )
Power Pol state:  531 ( WdfDevStatePwrPolStartedWakeCapable )

!acxkd.acxdevice

使用相同的 wdfhandle 提供 !acxdevice ACX 中心資訊。

3: kd> !acxdevice 0x00007dfadb0a5358
Dumping info for ACXDEVICE 0x00007dfadb0a5358

    In connected standby: FALSE

    State: AfxDeviceStateInitialized
    State history:
        0 : AfxDeviceStateInvalid
        1 : AfxDeviceStateInvalid
        2 : AfxDeviceStateInvalid
        3 : AfxDeviceStateInvalid
        4 : AfxDeviceStateInvalid
        5 : AfxDeviceStateCreated
        6 : AfxDeviceStateInitializing
        7 : AfxDeviceStateInitialized

    Create dispatch list:
        Create name: eHDMIOutTopo
        Dispatch routine: fffff80393179918
        Dispatch context: ffff82052513b960

    Circuits:
        ----------------------------------

        [Circuit 0]

        Name: eHDMIOutTopo
        Type: AcxCircuitTypeRender
        ComponentId: {BFCA9AD9-4EED-46C2-9323-B5D4400761A5}

        State: AfxCircuitStatePoweredUp

        Interface is enabled
        SymolicLinkName: \??\HDAUDIO#SUBFUNC_01&VEN_8086&DEV_281F&NID_0001&SUBSYS_00000000&REV_1000#6&4948348&0&0002&00000025#{2c6bb644-e1ae-47f8-9a2b-1d1fa750f2fa}\eHDMIOutTopo

        !acxproperties 00007dfad9ccccb8
        !acxmethods 00007dfad9ccccb8
        !acxevents 00007dfad9ccccb8

        # Pins: 2
            !acxpin 00007dfadf996dd8
            !acxpin 00007dfad4697238

        # Elements: 1
            !acxelement 00007dfadf997a18

        # Streams: 0

        !acxcircuit 00007dfad9ccccb8

    !wdfqueue 00007dfade9beaf8
    !wdfdevice 00007dfadb0a5358

    !wdfhandle 00007dfadb0a5358
    dt Acx01000!Acx::AfxDevice ffff8205256ab420

若要顯示其他 ACX 對象的相關信息,例如 ACXCIRCUIT,請使用上方輸出中的連結, !acxcircuit 以搭配適當的 wdfhandle 叫用。

3: kd> !acxcircuit 00007dfad9ccccb8
Dumping info for ACXCIRCUIT 0x00007dfad9ccccb8

    Name: eHDMIOutTopo
    Type: AcxCircuitTypeRender
    ComponentId: {BFCA9AD9-4EED-46C2-9323-B5D4400761A5}

    State: AfxCircuitStatePoweredUp
    State history:
        0 : AfxCircuitStateInvalid
        1 : AfxCircuitStateInvalid
        2 : AfxCircuitStateInvalid
        3 : AfxCircuitStateCreated
        4 : AfxCircuitStateInitializing
        5 : AfxCircuitStateInitialized
        6 : AfxCircuitStatePoweredDown
        7 : AfxCircuitStatePoweredUp

    Interface is enabled
    SymolicLinkName: \??\HDAUDIO#SUBFUNC_01&VEN_8086&DEV_281F&NID_0001&SUBSYS_00000000&REV_1000#6&4948348&0&0002&00000025#{2c6bb644-e1ae-47f8-9a2b-1d1fa750f2fa}\eHDMIOutTopo

    # Power references: 0
    # Open handles: 18

    !acxproperties 00007dfad9ccccb8
    !acxmethods 00007dfad9ccccb8
    !acxevents 00007dfad9ccccb8

    # Pins: 2
        !acxpin 00007dfadf996dd8
        !acxpin 00007dfad4697238

    # Elements: 1
        !acxelement 00007dfadf997a18

!acxkd.acxproperties

在與 wdfhandle 搭配使用的輸出命令連結中,會提供給其他物件,例如 ACX 屬性,可以顯示。

0: kd> !acxproperties 000049f6bf436b88
Dumping properties info for ACXOBJECT 0x000049f6bf436b88

    # sets: 4

        Set: {8C134960-51AD-11CF-878A-94F801C10000}
            Id: 0, Flags: 0x1
            Id: 1, Flags: 0x1

        Set: {720D4AC0-7533-11D0-A5D6-28DB04C10000}
            Id: 0, Flags: 0x1
            Id: 1, Flags: 0x1
            Id: 2, Flags: 0x1
            Id: 3, Flags: 0x1

        Set: {C034FDB0-FF75-47C8-AA3C-EE46716B50C6}
            Id: 1, Flags: 0x1
            Id: 2, Flags: 0x1
            Id: 3, Flags: 0x1

        Set: {4D12807E-55DB-48B8-A466-F15A510F5817}
            Id: 1, Flags: 0x1

!wdfhandle

輸出中 !wdfdriverinfo 也提供與 ACX 相關聯之 WDF 物件階層的 wdfhandle 連結。

Object Hierarchy: !wdfhandle 0x000049f6bfe9d5d8 0xff

按兩下該連結會顯示 ACX 驅動程式的 WDF 物件階層。 此輸出可用來尋找其他 ACX 和 WDF 物件的 WDF 句柄。

0: kd> !wdfhandle 0x000049f6bfe9d5d8 0xff
Treating handle as a KMDF handle!

Dumping WDFHANDLE 0x000049f6bfe9d5d8
=============================
Handle type is WDFDRIVER
Refcount: 1
Contexts:
    context:  dt 0xffffb60940162bc0 AcxHdAudio!CODEC_DRIVER_CONTEXT (size is 0x1 bytes)
    <no associated attribute callbacks>

    context:  dt 0xffffb6093ccead20 Acx01000!AfxDriver (size is 0x20 bytes)
    EvtCleanupCallback fffff8038a455780 Acx01000!Acx::WdfCpp::ObjectContext<WDFDRIVER__ *,Acx::AfxDriver>::EvtObjectContextCleanupThunk
    EvtDestroyCallback fffff8038a455740 Acx01000!Acx::WdfCpp::ObjectContext<WDFDRIVER__ *,Acx::AfxDriver>::EvtObjectContextDestroyThunk

Child WDFHANDLEs of 0x000049f6bfe9d5d8:
    !wdfhandle 0x000049f6bfe9d5d8  dt FxDriver 0xffffb60940162a20 Context ffffb60940162bc0, Context ffffb6093ccead20 Cleanup fffff8038a455780 Destroy fffff8038a455740
        !wdfdevice 0x000049f6bffba488  dt FxDevice 0xffffb60940045b70 Context ffffb60940045e60 Cleanup fffff8038a3e3c90, Context ffffb60933f030f0 Cleanup fffff8038a451910 Destroy fffff8038a451740, Context ffffb60940a26b90, Context ffffb609409f2e00
            WDF INTERNAL   dt FxDefaultIrpHandler 0xffffb6093fa54130
            WDF INTERNAL   dt FxPkgGeneral 0xffffb609401f5610
            WDF INTERNAL   dt FxWmiIrpHandler 0xffffb609401f6510
            WDF INTERNAL   dt FxPkgIo 0xffffb6093f6d2400
                !wdfqueue 0x000049f6c00114b8  dt FxIoQueue 0xffffb6093ffeeb40
            WDF INTERNAL   dt FxPkgFdo 0xffffb6093f2ae020
            !wdfhandle 0x000049f6bfe099f8  dt FxCmResList 0xffffb609401f6600
            !wdfhandle 0x000049f6bfe0a358  dt FxCmResList 0xffffb609401f5ca0
            !wdfchildlist 0x000049f6c09adb98  dt FxChildList 0xffffb6093f652460
            !wdfiotarget 0x000049f6c092d1d8  dt FxIoTarget 0xffffb6093f6d2e20
            !wdfqueue 0x000049f6c04904c8  dt FxIoQueue 0xffffb6093fb6fb30 Context ffffb6093fa8dcd0 Cleanup fffff8038a45a350 Destroy fffff8038a45a310
            !wdfhandle 0x000049f6c09e7ed8  dt FxWorkItem 0xffffb6093f618120 Context ffffb6093f618220
            WDF INTERNAL   dt FxWmiProvider 0xffffb609403d9b50
                WDF INTERNAL   dt FxWmiInstanceExternal 0xffffb60940a11320
            WDF INTERNAL   dt FxWmiProvider 0xffffb609403d9300
                WDF INTERNAL   dt FxWmiInstanceExternal 0xffffb60940a11720
        !wdfdevice 0x000049f6bef1a848  dt FxDevice 0xffffb609410e57b0 Context ffffb609410e5aa0 Cleanup fffff8038a3e6400, Context ffffb60933f090d0 Cleanup fffff8038a451910 Destroy fffff8038a451740
            WDF INTERNAL   dt FxDefaultIrpHandler 0xffffb60940c16450
            WDF INTERNAL   dt FxPkgGeneral 0xffffb60940bc9a10
            WDF INTERNAL   dt FxWmiIrpHandler 0xffffb60940bc9380
            WDF INTERNAL   dt FxPkgIo 0xffffb609400ab5c0
                !wdfqueue 0x000049f6beefd588  dt FxIoQueue 0xffffb60941102a70
            WDF INTERNAL   dt FxPkgPdo 0xffffb609410e6020
            !wdfhandle 0x000049f6bf436e58  dt FxCmResList 0xffffb60940bc91a0
            !wdfhandle 0x000049f6bf436d68  dt FxCmResList 0xffffb60940bc9290
            !wdfqueue 0x000049f6bef185c8  dt FxIoQueue 0xffffb609410e7a30 Context ffffb60940e72ed0 Cleanup fffff8038a45a350 Destroy fffff8038a45a310
            !wdfhandle 0x000049f6bf436b88 [ACXCIRCUIT]  dt FxUserObject 0xffffb60940bc9470 Context ffffb60940bc9520, Context 
...

WDF 記錄命令

!wdflogdump 可藉由顯示 WDF 記錄資訊,對 ACX 驅動程式進行疑難解答很有用。

使用 -d 驅動程式選項顯示 ACX 的記錄檔。

0: kd> !wdflogdump acx01000 -d 
Log dump command                           Log ID                   Size
================                           ======                   ====
 !wdflogdump  Acx01000 -a 0xFFFF820527861000  AFX_Client1              4096
 !wdflogdump  Acx01000 -a 0xFFFF8205215C0000  AFX_Log                  4096
Trace searchpath is: 

Trace format prefix is: %7!u!: %!FUNC! - 
Trying to extract TMF information from - C:\ProgramData\Dbg\sym\Acx01000.pdb\B13D39B43205B60C07935803D7CB96981\Acx01000.pdb
--- start of log ---
AFX_Client1 1: Acx::AfxCircuit::Register - INFO:ACXCIRCUIT 00007DFAD9CCCCB8 Registered
AFX_Client1 2: Acx::AfxCircuit::PowerUpNotification - INFO:ACXCIRCUIT 00007DFAD9CCCCB8, EvtAcxCircuitPowerUp callback, STATUS_SUCCESS
AFX_Client1 5: Acx::AfxPin::GetModesCount - WARN:ACXPIN 00007DFAD4697238, failed to get default format for processing mode 9e90ea20-b493-4fd1-a1a8-7e1361a956cf, 0xc0000225(STATUS_NOT_FOUND)
AFX_Client1 7: Acx::AfxPin::GetModesCount - WARN:ACXPIN 00007DFAD4697238, failed to get default format for processing mode 9e90ea20-b493-4fd1-a1a8-7e1361a956cf, 0xc0000225(STATUS_NOT_FOUND)
AFX_Client1 8: Acx::AfxMute::EvtMuteEventEnableCallback - INFO:ACXMUTE 00007DFADF997A18, enabled ACXEVENT 00007DFADF996F98
AFX_Client1 10: Acx::AfxPin::GetModesCount - WARN:ACXPIN 00007DFAD4697238, failed to get default format for processing mode 9e90ea20-b493-4fd1-a1a8-7e1361a956cf, 0xc0000225(STATUS_NOT_FOUND)
AFX_Client1 12: Acx::AfxPin::GetModesCount - WARN:ACXPIN 00007DFAD4697238, failed to get default format for processing mode 9e90ea20-b493-4fd1-a1a8-7e1361a956cf, 0xc0000225(STATUS_NOT_FOUND)
AFX_Client1 13: Acx::AfxPin::EvtJackEventEnableCallback - INFO:ACXPIN 00007DFAD4697238, enabled ACXEVENT 00007DFADF9973F8
AFX_Client1 15: Acx::AfxPin::GetModesCount - WARN:ACXPIN 00007DFAD4697238, failed to get default format for processing mode 9e90ea20-b493-4fd1-a1a8-7e1361a956cf, 0xc0000225(STATUS_NOT_FOUND)
AFX_Client1 17: Acx::AfxPin::GetModesCount - WARN:ACXPIN 00007DFAD4697238, failed to get default format for processing mode 9e90ea20-b493-4fd1-a1a8-7e1361a956cf, 0xc0000225(STATUS_NOT_FOUND)

使用 !wdflogdump ,使用 -f 選項顯示特定 ACX 驅動程式的架構記錄檔。

0: kd> !wdflogdump AcxHdAudio -f
Trace searchpath is: 

Trace format prefix is: %7!u!: %4!s! %!FUNC! - 
Trying to extract TMF information from - C:\ProgramData\Dbg\sym\Wdf01000.pdb\CBDEA3A4F64C17C1752E652A91DD14761\Wdf01000.pdb
Gather log: Please wait, this may take a moment (reading 4024 bytes).
% read so far ... 10, 20, 30, 40, 50, 60, 70, 80, 90, 100
There are 65 log entries
--- start of log ---
16131: 09/03/2023-23:43:07.3233594 imp_WdfRegistryOpenKey - new WDFKEY object open failed, 0xc0000034(STATUS_OBJECT_NAME_NOT_FOUND)
16132: 09/03/2023-23:43:07.3233594 FxPowerIdleMachine::ProcessEventLocked - WDFDEVICE 0x00007DFADB0A5358 !devobj 0xFFFF820521608AF0 entering power idle state FxIdleDecrementIo from FxIdleBusy
16133: 09/03/2023-23:43:07.3233594 FxPowerIdleMachine::ProcessEventLocked - WDFDEVICE 0x00007DFADB0A5358 !devobj 0xFFFF820521608AF0 entering power idle state FxIdleStartTimer from FxIdleDecrementIo
16134: 09/03/2023-23:43:07.3233594 FxPowerIdleMachine::ProcessEventLocked - WDFDEVICE 0x00007DFADB0A5358 !devobj 0xFFFF820521608AF0 entering power idle state FxIdleTimerRunning from FxIdleStartTimer
16135: 09/03/2023-23:43:07.3233594 FxPowerIdleMachine::ProcessEventLocked - WDFDEVICE 0x00007DFADB0A5358 !devobj 0xFFFF820521608AF0 entering power idle state FxIdleCancelTimer from FxIdleTimerRunning
16136: 09/03/2023-23:43:07.3233594 FxPowerIdleMachine::ProcessEventLocked - WDFDEVICE 0x00007DFADB0A5358 !devobj 0xFFFF820521608AF0 entering power idle state FxIdleCheckIoCount from FxIdleCancelTimer
16137: 
...

另請參閱

如需詳細資訊,請參閱 核心串流偵錯。 如需使用 WDM 音訊驅動程式進行偵錯的逐步解說,請參閱 偵錯驅動程式 - 逐步實驗室 (Sysvad 核心模式) 。 如需 ACX 的詳細資訊,請參閱 ACX 音訊類別延伸模組概觀