Share via

How to fix "NetAdapterCreate 0xC000000D" while creating a windows 11 WiFi Driver.

Sidharthan Srinivasan 20 Reputation points
2026-06-06T13:13:37.0833333+00:00

Hi Team,

I am trying to write a windows11 wifi driver. Currently I have developed a KMDF driver, where we reached a stage until we could see the shared pointer from the chip is exposed to the driver logs in DebugView. Rest of the controler/data path bringup process is undertaken by other engineer in my team.

My goal is to integrate netadaptercx and wificx to our current project (More like making sure the upper layer works fine).

Success part: (The below stages in our driver is working fine)

  • KMDF PCIe device bring-up
  • BAR0/BAR1 mapping
  • firmware download
  • NVRAM download
  • firmware shared pointer discovery
  • MSGBUF ring initialization
  • NetAdapterCx/WiFiCx skeleton integration
  • WiFiCx EvtWifiDeviceCreateAdapter callback reached

Non-Working part:

  • NetAdapterCreate() fails with STATUS_INVALID_PARAMETER / 0xC000000D
  • inside EvtWifiDeviceCreateAdapter().

How to overcome this problem any solutions?

Working Logs:

IFX: DriverEntry entered BUILD_COUNTER_TEST

IFX: DriverEntry exit

IFX: EvtDriverDeviceAdd entered

IFX: Registered resource-requirements filter callback

IFX: NetDeviceInitConfig success

IFX: WifiDeviceInitConfig success

IFX: WifiDeviceInitialize success

IFX: PollTimer + PollWorkItem created interval=100 ms

IFX: WdfInterruptCreate success interrupt=00002978D8FF3B58

IFX: EvtDriverDeviceAdd success

Failure Logs:

IFX: EvtWifiDeviceCreateAdapter entered Device=00002978D81E9FF8 AdapterInit=FFFF8A0DD17FF800

IFX: WifiAdapterInitGetType=1

IFX: calling NetAdapterCreate diagnostic-no-adapter-context AdapterInit=FFFF8A0DD17FF800

IFX: NetAdapterCreate failed 0xc000000d AdapterInit=FFFF8A0DD17FF800 adapterType=1 path=diagnostic-no-adapter-context

IFX: D0Exit enter targetState=5

IFX: polling timer stopped wait=TRUE

IFX: polling work item flushed

IFX: interrupts disabled

IFX: MsgbufDeinitialize

IFX: RingFree id=0

IFX: RingFree id=1

IFX: RingFree id=2

IFX: RingFree id=3

IFX: RingFree id=4

IFX: D0Exit exit

IFX: ReleaseHardware enter

IFX: ReleaseHardware exit

If anyone can help me out with this means, please do let me know. The help would be much more appreciated.

Regards,
Sidharthan

Windows development | Windows Driver Kit (WDK)
0 comments No comments

2 answers

Sort by: Most helpful
  1. Sidharthan Srinivasan 20 Reputation points
    2026-06-15T08:28:49.0266667+00:00

    Hi Taki, Thanks for the information!!! JFYI, I have tried to integrate netadaptercx alone to my windows KMDF wifi driver without the use of any wificx callbacks. Since our Standalone KMDF driver only has control path and does not have a functioning event or data path. it seems the fake empty stubs for queues are not working and it is resulting in BSOD. Failure path attempted earlier:

    EvtDeviceD0Entry   -> IfxNetAdapterCreate()        -> NetAdapterInitAllocate(Device)        -> NetAdapterCreate()
    

    This was controlled by registry gates:

    EnableNetAdapter=1 AllowNetAdapterCreateTest=1 NetAdapterCreateMagic=0x55570001

    Observed failures:

    1. In an earlier attempt, NetAdapterCreate returned:
    0xC000000D
    

    which is STATUS_INVALID_PARAMETER.

    1. In a later forced/manual test path, the test machine hit a BSOD:
    SYSTEM_THREAD_EXCEPTION_NOT_HANDLED
    What failed: netadaptercx.sys
    

    So i think I need to follow based on the official wificx model. I think it alligns with the method that you suggested earlier to include both netadaptercx and wificx paraelly to KMDF wifi driver.Hi Taki,

    Thanks for the information!!!

    JFYI, I have tried to integrate netadaptercx alone to my windows KMDF wifi driver without the use of any wificx callbacks. Since our Standalone KMDF driver only has control path and does not have a functioning event or data path. it seems the fake empty stubs for queues are not working and it is resulting in BSOD.

    Failure path attempted earlier:

    EvtDeviceD0Entry   -> IfxNetAdapterCreate()        -> NetAdapterInitAllocate(Device)        -> NetAdapterCreate()
    

    This was controlled by registry gates:

    EnableNetAdapter=1 AllowNetAdapterCreateTest=1 NetAdapterCreateMagic=0x55570001

    Observed failures:

    1. In an earlier attempt, NetAdapterCreate returned:
    0xC000000D
    

    which is STATUS_INVALID_PARAMETER.

    1. In a later forced/manual test path, the test machine hit a BSOD:
    SYSTEM_THREAD_EXCEPTION_NOT_HANDLED
    What failed: netadaptercx.sys
    

    So i think I need to follow based on the official wificx model. I think it alligns with the method that you suggested earlier to include both netadaptercx and wificx paraelly to KMDF wifi driver.

    Was this answer helpful?

    0 comments No comments

  2. Taki Ly (WICLOUD CORPORATION) 1,825 Reputation points Microsoft External Staff Moderator
    2026-06-08T04:32:17.3766667+00:00

    Hello @Sidharthan Srinivasan ,

    Thank you for reaching out.

    Regarding the NetAdapterCreate() failing with STATUS_INVALID_PARAMETER (0xC000000D) inside your EvtWifiDeviceCreateAdapter callback. In the context of NetAdapterCx/WiFiCx, I've observed that this specific error code at this stage often suggests that the framework has evaluated the pre-configurations attached to the NETADAPTER_INIT pointer (or the WDF_OBJECT_ATTRIBUTES) and found a missing parameter or incorrectly sized structure.

    You might want to review your EvtWifiDeviceCreateAdapter implementation against a few areas:

    1. Datapath Callbacks Initialization Before calling NetAdapterCreate, it typically requires the datapath callbacks (Tx/Rx queue creation) to be configured. If a NET_ADAPTER_DATAPATH_CALLBACKS structure is passed without its Size property being properly initialized, it could potentially throw a 0xC000000D.

    It might be helpful to verify if you are using the _INIT macro. For example:

    NET_ADAPTER_DATAPATH_CALLBACKS datapathCallbacks;
    // Ensure you use the _INIT macro to properly set the structure Size
    NET_ADAPTER_DATAPATH_CALLBACKS_INIT(&datapathCallbacks,
                                        EvtAdapterCreateTxQueue,
                                        EvtAdapterCreateRxQueue);
    NetAdapterInitSetDatapathCallbacks(AdapterInit, &datapathCallbacks);
    

    2. WDF_OBJECT_ATTRIBUTES Initialization If you are attaching a context space to the adapter, it's worth double-checking that the attributes structure is initialized correctly inside the callback:

    WDF_OBJECT_ATTRIBUTES adapterAttributes;
    WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&adapterAttributes, MY_ADAPTER_CONTEXT);
    // Then pass &adapterAttributes to NetAdapterCreate
    

    An uninitialized or incorrectly sized adapterAttributes might also lead to an Invalid Parameter error.

    3. The AdapterInit Object Just as a general reminder, since you are inside EvtWifiDeviceCreateAdapter, the PNETADAPTER_INIT AdapterInit parameter is handed to you by the framework. It's recommended to only use this provided object and not allocate a new one manually.

    If you have already checked these and the issue persists, would it be possible to share a small snippet of the code inside your EvtWifiDeviceCreateAdapter function up to the point of failure? Seeing the code might help spot any missing configuration more easily.

    Official References & Documentation: For further reference, you might find these official documents helpful for cross-checking your implementation:

    I hope this points you in the right direction! If you found my response helpful or informative, I would greatly appreciate it if you could follow this guide for your confirmation.

    Thank you.

    Was this answer helpful?


Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.