NdisCoOidRequest 函式 (ndis.h)

NdisCoOidRequest 函式會將要求轉送至目標 CoNDIS 驅動程式,以查詢或設定目標驅動程式的 OID 指定資訊。

語法

NDIS_STATUS NdisCoOidRequest(
  [in]           NDIS_HANDLE       NdisBindingHandle,
  [in, optional] NDIS_HANDLE       NdisAfHandle,
  [in, optional] NDIS_HANDLE       NdisVcHandle,
  [in, optional] NDIS_HANDLE       NdisPartyHandle,
  [in, out]      PNDIS_OID_REQUEST OidRequest
);

參數

[in] NdisBindingHandle

NdisOpenAdapterEx 函式傳回的句柄,可識別系結的目標配接器。

[in, optional] NdisAfHandle

句柄,識別用戶端、呼叫管理員和 NDIS 之間共用的位址系列 (AF) 。 已取得此句柄,如下所示:

  • 如果呼叫端是向呼叫管理員提出要求的用戶端,則用戶端原本從成功呼叫 取得此句柄 NdisClOpenAddressFamilyEx 函 式。
  • 如果呼叫端是獨立呼叫管理員或迷你埠呼叫管理員, (MCM) 向用戶端提出要求,呼叫管理員或 MCM 原本會取得此句柄作為 其 ProtocolCmOpenAf 函式的輸入參數。
若要向基礎迷你埠驅動程序發出客戶端或獨立呼叫管理員的要求,此參數必須是 NULL

[in, optional] NdisVcHandle

識別虛擬連線的句柄, (VC) 呼叫端要求或設定資訊,如果要求為 VC 特定,則為 。 否則,如果此參數為 NULL,則要求不是 VC 特定的。 對於任何 VC 特定要求,呼叫端最初是在使用 NdisCoCreateVc 函式建立 VC 時,或作為 其 ProtocolCoCreateVc 函式的輸入參數時,取得此句柄。 針對導向至基礎迷你埠驅動程式的 VC 特定要求,此句柄會識別 VC,而 NdisAfHandleNdisPartyHandleNULL

[in, optional] NdisPartyHandle

句柄,識別呼叫端要求或設定資訊之多點 VC 上的合作物件,如果要求是合作物件專屬的。 否則,如果此參數為 NULL,則要求不是特定合作物件。 對於任何合作物件特定的要求,用戶端原本從 成功呼叫 NdisClAddParty 函式或 NdisClMakeCall 函式或呼叫管理員取得此句柄作為 其 ProtocolCmAddParty 函式的輸入參數取得此句柄。 如果 NdisAfHandleNULL則 NdisPartyHandle 也是 NULL

[in, out] OidRequest

NDIS_OID_REQUEST 結構的指標,指定使用指定之 OID_XXX 程式代碼要求的作業,以查詢或設定資訊。

傳回值

目標驅動程式會決定 NdisCoOidRequest 傳回的NDIS_STATUS_XXX 程式代碼,通常是下列其中一個值:

傳回碼 Description
NDIS_STATUS_SUCCESS
要求作業已順利完成。
NDIS_STATUS_PENDING
要求正以異步方式處理,而 NDIS 會呼叫呼叫端的當要求完成時,ProtocolCoOidRequestComplete 函式。
NDIS_STATUS_INVALID_OID
OidRequest 參數之 NDIS_OID_REQUEST 結構的 Oid 成員中指定的 OID_XXX 程式代碼無效或不受基礎驅動程序支援。
NDIS_STATUS_INVALID_LENGTH或NDIS_STATUS_BUFFER_TOO_SHORT
OidRequest 上NDIS_OID_REQUEST結構化緩衝區之 InformationBufferLength 成員中指定的值不符合指定之OID_XXX 程式代碼的需求。 如果信息緩衝區太小,當 NdisCoOidRequest 傳回時,NDIS_OID_REQUEST 的 BytesNeeded 成員會包含 InformationBufferLength 的正確值。
NDIS_STATUS_INVALID_DATA
給定NDIS_OID_REQUEST結構中 InformationBuffer 提供的數據對於指定的 OID_XXX 程式代碼無效。
NDIS_STATUS_NOT_SUPPORTED或NDIS_STATUS_NOT_RECOGNIZED
基礎驅動程式不支援要求的作業。
NDIS_STATUS_RESOURCES
因為資源不足,所以無法滿足要求。 通常,這個傳回值表示嘗試配置記憶體失敗,但不一定表示相同的要求,如果稍後提交,將會因為相同的原因而失敗。
NDIS_STATUS_NOT_ACCEPTED
基礎驅動程式嘗試要求的作業,通常是設定要求,但作業失敗。 例如,嘗試設定太多多播位址可能會導致 NdisCoOidRequest 傳回此值。
NDIS_STATUS_CLOSING或NDIS_STATUS_CLOSING_INDICATING
基礎驅動程式因為關閉作業正在進行中,所以要求作業失敗。
NDIS_STATUS_RESET_IN_PROGRESS
基礎迷你埠驅動程式目前無法滿足要求,因為它目前正在重設受影響的 NIC。 呼叫端的 ProtocolStatusEx 函 式是或將會使用 NDIS_STATUS_RESET_START 呼叫,以指出重設正在進行中。 如果稍後提交,這個傳回值不一定表示相同的要求會因為相同原因而失敗。
NDIS_STATUS_FAILURE
這個值通常是非特定預設值,當沒有更明確的NDIS_STATUS_XXX 造成基礎驅動程序失敗要求時,就會傳回這個值。
NDIS_STATUS_REQUEST_ABORTED
迷你埠驅動程式已停止處理要求。 例如,NDIS 稱為基礎迷你埠驅動程式的 MiniportResetEx 或 MiniportCancelOidRequest 函式。

備註

CoNDIS 用戶端和獨立呼叫管理員可以呼叫 NdisCoOidRequest 函式,以傳送 OID 要求,以查詢或設定目標驅動程式中的 OID 指定資訊。 目標驅動程式可以是另一個 CoNDIS 通訊協定驅動程式或基礎驅動程式。

NdisCoOidRequest 的呼叫端必須配置足夠的記憶體,以保存與指定 OID 相關聯的信息緩衝區。 呼叫端也必須在 OidRequest 配置和設定緩衝區,才能呼叫 NdisCoOidRequest。 這兩個緩衝區都必須從非分頁集區配置,因為目標驅動程式可以在處理要求時於引發的 IRQL 執行。

NdisCoOidRequest 傳回的某些錯誤是可復原的,包括下列各項:

  • NDIS_STATUS_INVALID_OID
  • NDIS_STATUS_INVALID_LENGTH
  • NDIS_STATUS_BUFFER_TOO_SHORT
  • NDIS_STATUS_INVALID_DATA
  • NDIS_STATUS_RESOURCES
  • NDIS_STATUS_RESET_IN_PROGRESS
也就是說,驅動程式可以適當地修改 OidRequest 上的封包,以更正 OID_XXX 程式代碼或 InformationBuffer 緩衝區的大小或內容,並將要求封包重新提交至 NdisCoOidRequest。 如果原始呼叫指出進行中重設,或資源不足,可能會滿足驅動程式重新提交至 NdisCoOidRequest 時,可能會滿足相同的封包,以免執行該要求。

NdisAfHandle 參數的值而定,客戶端和獨立呼叫管理員會呼叫 NdisCoOidRequest 來彼此通訊,或與基礎連線導向迷你埠驅動程序通訊。

如果驅動程式為 NdisVcHandle 傳遞 NULL,則要求本質上是全域的,無論是將要求導向至用戶端、呼叫管理員或迷你埠驅動程式。 例如,如果呼叫端為 NdisVcHandle 提供非 NULL 值,則對基礎連線導向迷你埠驅動程式OID_GEN_CO_RCV_CRC_ERROR OID 要求會傳回針對特定 VC 所遇到的迴圈備援檢查 (CRC) 錯誤數目。 針對與 NdisVcHandleNULL 相同的要求,基礎迷你埠驅動程式會傳回所有 VM 所遇到的 CRC 錯誤總數。

用戶端和獨立呼叫管理員應該針對不是連線導向的所有 OID 呼叫 NdisOidRequest 函式,例如在OID_GEN_SUPPORTED_LIST查詢中傳回的 NDISOidRequest 函式,在通訊協定驅動程式本身系結至基礎 NIC 驅動程序之後,通常會在初始化期間發出。

如果 NdisCoOidRequest 傳回NDIS_STATUS_PENDING,則會以異步方式處理要求,NDIS 會呼叫驅動程式的當要求完成時,ProtocolCoOidRequestComplete 函式。 如果 NdisCoOidRequest 傳回任何其他狀態, 當 NdisCoOidRequest 傳回時,要求就會完成,而 NDIS 不會呼叫 ProtocolCoOidRequestComplete

如需定義為搭配 NdisCoOidRequestNdisOidRequest 使用之 OID 集合的詳細資訊,請參閱 NDIS OID。

只有屬於通訊協定驅動程式的用戶端和獨立呼叫管理員可以呼叫 NdisCoOidRequest。 MCM 會呼叫 NdisMCmOidRequest 函式來與其客戶端通訊。

規格需求

需求
最低支援的用戶端 NDIS 6.0 和更新版本支援。
目標平台 桌面
標頭 ndis.h (包含 Ndis.h)
程式庫 Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI 合規性規則 Irql_Connection_Function (ndis)

另請參閱

MiniportCancelOidRequest

MiniportResetEx

NDIS_OID_REQUEST

NdisClAddParty

NdisClMakeCall

NdisClOpenAddressFamilyEx

NdisCoCreateVc

NdisMCmOidRequest

NdisOidRequest

NdisOpenAdapterEx

OID_GEN_CO_RCV_CRC_ERROR

OID_GEN_SUPPORTED_LIST

ProtocolCmAddParty

ProtocolCmOpenAf

ProtocolCoCreateVc

ProtocolCoOidRequestComplete

ProtocolStatusEx