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 專用的。 否則,如果此參數 NULL,則要求不是 VC 特定的。 針對任何 VC 特定要求,呼叫端原本是在使用 NdisCoCreateVc 函式建立 VC 時,或是做為其 ProtocolCoCreateVc 函式的輸入參數來取得此句柄。 針對導向至基礎迷你埠驅動程式的 VC 特定要求,此句柄會識別 VC,而 NdisAfHandle 和 NdisPartyHandleNULL。
[in, optional] NdisPartyHandle
識別呼叫端要求或設定資訊之多點 VC 上合作物件的句柄,如果要求是特定合作物件。 否則,如果此參數 NULL,則要求不是特定合作物件。 對於任何合作物件特定的要求,用戶端原本是從成功呼叫 NdisClAddParty 函式或 NdisClMakeCall 函式或呼叫管理員取得此句柄做為其 ProtocolCmAddParty 函式的輸入參數取得此句柄。 如果 NdisAfHandleNULL,NdisPartyHandle 也會 NULL。
[in, out] OidRequest
NDIS_OID_REQUEST 結構的指標,指定要查詢或設定資訊之指定OID_XXX 程式代碼所要求的作業。
傳回值
目標驅動程式會決定 NDIsCoOidRequest 傳回哪些NDIS_STATUS_XXX 程式 代碼,通常是下列其中一個值:
傳回碼 | 描述 |
---|---|
|
要求作業已順利完成。 |
|
要求是以異步方式處理,而NDIS會呼叫呼叫端的當要求完成時, ProtocolCoOidRequestComplete 函式。 |
|
OID_XXX 在 OidRequest 參數 NDIS_OID_REQUEST 結構 Oid 成員中指定的程式代碼無效或不受基礎驅動程序支援。 |
|
在 OidRequest 之NDIS_OID_REQUEST結構化緩衝區 成員 InformationBufferLength 中指定的值不符合指定OID_XXX 程式代碼的需求。 如果資訊緩衝區太小,NDIS_OID_REQUEST的 BytesNeeded 成員會包含 InformationBufferLength的正確值,NdisCoOidRequest 傳回時。 |
|
在指定 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) 錯誤數目。 對於與 NdisVcHandleNULL 相同的要求,基礎迷你埠驅動程式會傳回所有 VM 所遇到的 CRC 錯誤總數。
用戶端和獨立呼叫管理員應該針對不是連線導向的所有 OID 呼叫 NdisOidRequest 函式,例如在 OID_GEN_SUPPORTED_LIST 查詢中傳回的 OID,在通訊協定驅動程式系結至基礎 NIC 驅動程式之後,通常會在初始化期間發出。
如果 NdisCoOidRequest 傳回NDIS_STATUS_PENDING,則會以異步方式處理要求,而 NDIS 會呼叫驅動程式的當要求完成時, ProtocolCoOidRequestComplete 函式。 如果 NdisCoOidRequest 傳回任何其他狀態,當 NdisCoOidRequest 傳回時,要求就會完成,而 NDIS 不會呼叫 ProtocolCoOidRequestComplete。
如需定義搭配 NdisCoOidRequest 和 NdisOidRequest之 OID 集合的詳細資訊,請參閱 NDIS OIDs。
只有客戶端和獨立呼叫管理員,也就是通訊協定驅動程式,才能呼叫 NdisCoOidRequest。 MCM 會呼叫 NdisMCmOidRequest 函式來與其客戶端通訊。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | NDIS 6.0 和更新版本支援。 |
目標平臺 | 桌面 |
標頭 | ndis.h (包括 Ndis.h) |
連結庫 | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
DDI 合規性規則 | Irql_Connection_Function(ndis) |