status=0xC023002C, STATUS_NDIS_UNSUPPORTED_REVISION

 MSDN描述:The revision number specified in the structure is not supported.

触发错误的代码:

NDIS_STATUS
OidHandle_GetAdapterCapabilities(
	_In_ TLV_CONTEXT* pTlvContext,
	_In_ PNDIS_OID_REQUEST OidRequest
) {
    WDI_GET_ADAPTER_CAPABILITIES_PARAMETERS	adapterCap;
    
    status = Generate(&adapterCap, sizeof(WDI_MESSAGE_HEADER), pTlvContext, &length, &pOutput);

    return status;
}

Generate这里返回这个status,是因为pTlvContext里的成员设置不对。

参考MSDN: WDI TLV 版本控制 - Windows drivers | Microsoft Learn

这是注册WDI驱动时代码:

wdiChar.WdiVersion = WDI_VERSION_LATEST;

为了解决上述问题,需要补充的代码:

TlvContext.PeerVersion = WDI_VERSION_LATEST;

这个PeerVersion要和WdiVersion一致。

/* ======================================================================== Routine Description: API for MLME to transmit management frame to AP (BSS Mode) or station (IBSS Mode) Arguments: pAd Pointer to our adapter pData Pointer to the outgoing 802.11 frame Length Size of outgoing management frame Return Value: NDIS_STATUS_FAILURE NDIS_STATUS_PENDING NDIS_STATUS_SUCCESS IRQL = PASSIVE_LEVEL IRQL = DISPATCH_LEVEL Note: ======================================================================== */ NDIS_STATUS MiniportMMRequest(RTMP_ADAPTER *pAd, UCHAR QueIdx, UCHAR *pData, UINT Length) { PNDIS_PACKET pkt; NDIS_STATUS Status; BOOLEAN bUseDataQ = FALSE, FlgDataQForce = FALSE; HEADER_802_11 *pHead = (HEADER_802_11 *)pData; struct wifi_dev *wdev = NULL; struct wifi_dev_ops *ops = NULL; INT hw_len; UCHAR hw_hdr[40]; struct tr_counter *tr_cnt = &pAd->tr_ctl.tr_cnt; struct _RTMP_CHIP_CAP *cap = hc_get_chip_cap(pAd->hdev_ctrl); #ifdef WF_RESET_SUPPORT if (pAd->wf_reset_in_progress == TRUE) return NDIS_STATUS_SUCCESS; #endif hw_len = cap->tx_hw_hdr_len; ASSERT((sizeof(hw_hdr) > hw_len)); NdisZeroMemory(&hw_hdr, hw_len); ASSERT(Length <= MAX_MGMT_PKT_LEN); Status = RTMPAllocateNdisPacket(pAd, &pkt, (UCHAR *)&hw_hdr[0], hw_len, pData, Length); if (Status != NDIS_STATUS_SUCCESS) { MTWF_DBG(pAd, DBG_CAT_TX, DBG_SUBCAT_ALL, DBG_LVL_ERROR, "MiniportMMRequest (error:: can't allocate NDIS PACKET)\n"); return NDIS_STATUS_FAILURE; } wdev = wdev_search_by_address(pAd, pHead->Addr2); if (wdev) { ops = wdev->wdev_ops; } else { RELEASE_NDIS_PACKET(pAd, pkt, NDIS_STATUS_FAILURE); tr_cnt->tx_invalid_wdev++; return NDIS_STATUS_FAILURE; } if ((QueIdx & MGMT_USE_QUEUE_FLAG) == MGMT_USE_QUEUE_FLAG) { bUseDataQ = TRUE; QueIdx &= (~MGMT_USE_QUEUE_FLAG); } if (bUseDataQ) FlgDataQForce = TRUE; #ifdef WIFI_DIAG diag_miniport_mm_request(pAd, pData, Length); #endif #if defined(CONFIG_STA_SUPPORT) || defined(APCLI_SUPPORT) if (wdev->wdev_type == WDEV_TYPE_STA) RTMPWakeUpWdev(pAd, wdev); #endif /* CONFIG_STA_SUPPORT || APCLI_SUPPORT */ RTMP_SET_PACKET_TYPE(pkt, TX_MGMT); Status = send_mlme_pkt(pAd, pkt, wdev, QueIdx, bUseDataQ); return Status; }解析该函数
10-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值