共用方式為


NdisDirectOidRequest 函式 (ndis.h)

NdisDirectOidRequest 函式會將直接 OID 要求轉送到基礎驅動程式,以查詢適配卡的功能或狀態,或設定適配卡的狀態。

語法

NDIS_STATUS NdisDirectOidRequest(
  [in] NDIS_HANDLE       NdisBindingHandle,
  [in] PNDIS_OID_REQUEST OidRequest
);

參數

[in] NdisBindingHandle

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

[in] OidRequest

NDIS_OID_REQUEST 結構的指標,指定使用指定 OID_Xxx 程式代碼要求的作業,以查詢配接器的狀態或設定配接器的狀態。

傳回值

基礎驅動程式會決定 NdisDirectOidRequest 傳回哪些NDIS_STATUS_XXX 程序代碼,但通常是下列其中一個值:

傳回碼 Description
NDIS_STATUS_SUCCESS
要求作業已順利完成。
NDIS_STATUS_PENDING
要求是以異步方式處理,而NDIS會呼叫呼叫者的當要求完成時,ProtocolDirectOidRequestComplete 函式。
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 程式代碼的需求。 如果信息緩衝區太小,BytesNeeded 成員會在從 NdisDirectOidRequest 傳回時包含 InformationBufferLength 的正確值。
NDIS_STATUS_INVALID_DATA
在指定NDIS_OID_REQUEST結構中 於 InformationBuffer 提供的數據對於指定的 OID_Xxx 程式代碼而言無效。
NDIS_STATUS_NOT_SUPPORTED或NDIS_STATUS_NOT_RECOGNIZED
基礎驅動程式不支援要求的作業。 若為 NdisDirectOidRequest,如果呼叫驅動程式尚未註冊 ,NDIS 也可以傳回此狀態 ProtocolDirectOidRequestComplete 函式
NDIS_STATUS_RESOURCES
因為資源不足,所以無法滿足要求。 一般而言,這個傳回值表示嘗試配置記憶體失敗,但不一定表示稍後提交的相同要求將會因為相同原因而失敗。
NDIS_STATUS_NOT_ACCEPTED
基礎驅動程式嘗試執行要求的作業,通常是在 NIC 上設定,但失敗。 例如,嘗試設定太多多播位址可能會導致這個值傳回。
NDIS_STATUS_CLOSING或NDIS_STATUS_CLOSING_INDICATING
基礎驅動程式因為關閉作業正在進行中,所以要求作業失敗。
NDIS_STATUS_RESET_IN_PROGRESS
基礎迷你埠驅動程式目前無法滿足要求,因為它目前正在重設受影響的 NIC。 呼叫端的 ProtocolStatusEx 函式是或將會使用 NDIS_STATUS_RESET_START 呼叫,以指出重設正在進行中。 此傳回值不一定表示稍後提交的相同要求將會因為相同原因而失敗。
NDIS_STATUS_FAILURE
這個值通常是非特定預設值,當沒有更特定的NDIS_STATUS_Xxx 值導致基礎驅動程序失敗要求時,就會傳回。

備註

NdisDirectOidRequest 函式無法用於一般 OID 要求。 針對一般 OID 要求,請改用 NdisOidRequest 函式。 NdisDirectOidRequest 只能用於 NDIS 支援的 OID,以搭配直接 OID 介面使用。 例如,可以使用下列 OID:

OID_TCP_TASK_IPSEC_OFFLOAD_V2_ADD_SA OID_TCP_TASK_IPSEC_OFFLOAD_V2_DELETE_SA OID_TCP_TASK_IPSEC_OFFLOAD_V2_UPDATE_SA

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

NdisDirectOidRequest 會將要求轉送至基礎驅動程式,或處理要求本身。 如果下一個較低的驅動程式是 NDIS 中繼驅動程式,中繼驅動程式可以先使用自己的 OID 特定要求呼叫 NdisDirectOidRequest ,再完成原本提交較高層級驅動程式的要求。

呼叫 NdisDirectOidRequest 的驅動程序必須註冊 ProtocolDirectOidRequestComplete 函式

直接 OID 要求介面類似於一般 OID 要求介面。 如需發出一般要求的詳細資訊,請參閱 NdisOidRequest

注意 雖然直接 OID 要求通常不會串行化,但 NDIS 本身可能仍會以NDIS_STATUS_PENDING傳送要求,並將要求排入佇列以供稍後完成。 例如,NDIS 可能會畫筆並排入傳送至目前處於低電源狀態的選擇性暫停迷你埠的 Direct OID 要求。 通訊協議和篩選條件必須準備好處理NDIS_STATUS_PENDING程序代碼,即使基礎迷你埠會同步完成要求也一樣。
 

規格需求

需求
最低支援的用戶端 NDIS 6.1 和更新版本支援。
目標平台 桌面
標頭 ndis.h (包括 Ndis.h)
程式庫 Ndis.lib
IRQL <= DISPATCH_LEVEL

另請參閱

NDIS_OID_REQUEST

NdisOidRequest

NdisOpenAdapterEx

OID_TCP_TASK_IPSEC_OFFLOAD_V2_ADD_SA OID_TCP_TASK_IPSEC_OFFLOAD_V2_DELETE_SA OID_TCP_TASK_IPSEC_OFFLOAD_V2_UPDATE_SA ProtocolDirectOidRequestComplete

ProtocolStatusEx