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 函式的輸入參數。
[in, optional] NdisVcHandle
識別虛擬連線的句柄, (VC) 呼叫端要求或設定資訊,如果要求為 VC 特定,則為 。 否則,如果此參數為 NULL,則要求不是 VC 特定的。 對於任何 VC 特定要求,呼叫端最初是在使用 NdisCoCreateVc 函式建立 VC 時,或作為 其 ProtocolCoCreateVc 函式的輸入參數時,取得此句柄。 針對導向至基礎迷你埠驅動程式的 VC 特定要求,此句柄會識別 VC,而 NdisAfHandle 和 NdisPartyHandle 為 NULL。
[in, optional] NdisPartyHandle
句柄,識別呼叫端要求或設定資訊之多點 VC 上的合作物件,如果要求是合作物件專屬的。 否則,如果此參數為 NULL,則要求不是特定合作物件。 對於任何合作物件特定的要求,用戶端原本從 成功呼叫 NdisClAddParty 函式或 NdisClMakeCall 函式或呼叫管理員取得此句柄作為 其 ProtocolCmAddParty 函式的輸入參數取得此句柄。 如果 NdisAfHandle 為 NULL, 則 NdisPartyHandle 也是 NULL。
[in, out] OidRequest
NDIS_OID_REQUEST 結構的指標,指定使用指定之 OID_XXX 程式代碼要求的作業,以查詢或設定資訊。
傳回值
目標驅動程式會決定 NdisCoOidRequest 傳回的NDIS_STATUS_XXX 程式代碼,通常是下列其中一個值:
傳回碼 | Description |
---|---|
|
要求作業已順利完成。 |
|
要求正以異步方式處理,而 NDIS 會呼叫呼叫端的當要求完成時,ProtocolCoOidRequestComplete 函式。 |
|
在 OidRequest 參數之 NDIS_OID_REQUEST 結構的 Oid 成員中指定的 OID_XXX 程式代碼無效或不受基礎驅動程序支援。 |
|
在 OidRequest 上NDIS_OID_REQUEST結構化緩衝區之 InformationBufferLength 成員中指定的值不符合指定之OID_XXX 程式代碼的需求。 如果信息緩衝區太小,當 NdisCoOidRequest 傳回時,NDIS_OID_REQUEST 的 BytesNeeded 成員會包含 InformationBufferLength 的正確值。 |
|
給定NDIS_OID_REQUEST結構中 InformationBuffer 提供的數據對於指定的 OID_XXX 程式代碼無效。 |
|
基礎驅動程式不支援要求的作業。 |
|
因為資源不足,所以無法滿足要求。 通常,這個傳回值表示嘗試配置記憶體失敗,但不一定表示相同的要求,如果稍後提交,將會因為相同的原因而失敗。 |
|
基礎驅動程式嘗試要求的作業,通常是設定要求,但作業失敗。 例如,嘗試設定太多多播位址可能會導致 NdisCoOidRequest 傳回此值。 |
|
基礎驅動程式因為關閉作業正在進行中,所以要求作業失敗。 |
|
基礎迷你埠驅動程式目前無法滿足要求,因為它目前正在重設受影響的 NIC。 呼叫端的 ProtocolStatusEx 函 式是或將會使用 NDIS_STATUS_RESET_START 呼叫,以指出重設正在進行中。 如果稍後提交,這個傳回值不一定表示相同的要求會因為相同原因而失敗。 |
|
這個值通常是非特定預設值,當沒有更明確的NDIS_STATUS_XXX 造成基礎驅動程序失敗要求時,就會傳回這個值。 |
|
迷你埠驅動程式已停止處理要求。 例如,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
視 NdisAfHandle 參數的值而定,客戶端和獨立呼叫管理員會呼叫 NdisCoOidRequest 來彼此通訊,或與基礎連線導向迷你埠驅動程序通訊。
如果驅動程式為 NdisVcHandle 傳遞 NULL,則要求本質上是全域的,無論是將要求導向至用戶端、呼叫管理員或迷你埠驅動程式。 例如,如果呼叫端為 NdisVcHandle 提供非 NULL 值,則對基礎連線導向迷你埠驅動程式OID_GEN_CO_RCV_CRC_ERROR OID 要求會傳回針對特定 VC 所遇到的迴圈備援檢查 (CRC) 錯誤數目。 針對與 NdisVcHandle 的 NULL 相同的要求,基礎迷你埠驅動程式會傳回所有 VM 所遇到的 CRC 錯誤總數。
用戶端和獨立呼叫管理員應該針對不是連線導向的所有 OID 呼叫 NdisOidRequest 函式,例如在OID_GEN_SUPPORTED_LIST查詢中傳回的 NDISOidRequest 函式,在通訊協定驅動程式本身系結至基礎 NIC 驅動程序之後,通常會在初始化期間發出。
如果 NdisCoOidRequest 傳回NDIS_STATUS_PENDING,則會以異步方式處理要求,NDIS 會呼叫驅動程式的當要求完成時,ProtocolCoOidRequestComplete 函式。 如果 NdisCoOidRequest 傳回任何其他狀態, 當 NdisCoOidRequest 傳回時,要求就會完成,而 NDIS 不會呼叫 ProtocolCoOidRequestComplete。
如需定義為搭配 NdisCoOidRequest 和 NdisOidRequest 使用之 OID 集合的詳細資訊,請參閱 NDIS OID。
只有屬於通訊協定驅動程式的用戶端和獨立呼叫管理員可以呼叫 NdisCoOidRequest。 MCM 會呼叫 NdisMCmOidRequest 函式來與其客戶端通訊。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | NDIS 6.0 和更新版本支援。 |
目標平台 | 桌面 |
標頭 | ndis.h (包含 Ndis.h) |
程式庫 | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
DDI 合規性規則 | Irql_Connection_Function (ndis) |