NdisMSetAttributesEx 函式 (ndis.h)
注意 NDIS 5. x 已被取代,且由 NDIS 6 取代。 x。 如需新的 NDIS 驅動程式開發,請參閱 從 Windows Vista 開始的網路驅動程式。 如需移植 NDIS 5 的相關信息。 x 驅動程式至 NDIS 6。 x,請參閱 將 NDIS 5.x 驅動程式移植到 NDIS 6.0。
NdisMSetAttributesEx 會在初始化期間通知 NDIS 連結庫有關呼叫端 NIC 或虛擬 NIC 的重要功能。
語法
void NdisMSetAttributesEx(
[in] NDIS_HANDLE MiniportAdapterHandle,
[in] NDIS_HANDLE MiniportAdapterContext,
[in, optional] UINT CheckForHangTimeInSeconds,
[in] ULONG AttributeFlags,
[in, optional] NDIS_INTERFACE_TYPE AdapterType
);
參數
[in] MiniportAdapterHandle
指定 MiniportInitialize 的句柄輸入。
[in] MiniportAdapterContext
指定 MiniportInitialize 所配置之駐留內容區域的句柄。
[in, optional] CheckForHangTimeInSeconds
指定 NDIS 應該呼叫 MiniportCheckForHang 函式的間隔,以秒為單位。 如果驅動程式未回應 OID 要求,或在兩次連續呼叫 MiniportCheckForHang 內傳送要求,NDIS 可以呼叫驅動程式的 MiniportReset 函式。
呼叫 MiniportCheckForHang 時,NDIS 使用的實際間隔一律是 2 秒的倍數。 例如,如果您指定 5 秒,則實際間隔大約是 4 秒。
指定此參數的零表示 NDIS 應該在 NDIS 預設的 2 秒間隔呼叫 MiniportCheckForHang 。
如果呼叫端在 AttributeFlags 中設定NDIS_ATTRIBUTE_DESERIALIZE,NDIS 不會將迷你埠驅動程式的暫止傳送排入佇列。 相反地,當還原串行化驅動程式沒有足夠的資源無法立即傳輸傳入傳送時,必須在內部管理其本身的後續傳送要求佇列。
[in] AttributeFlags
指定可以設定下列旗標之一或多個 (ORed) 的位掩碼:
NDIS_ATTRIBUTE_BUS_MASTER
如果呼叫端的 NIC 是總線主機 DMA 裝置, 請設定 。NDIS_ATTRIBUTE_DESERIALIZE
如果呼叫端是已還原串行化的迷你連接埠驅動程式,請設定 。NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT
設定 NDIS 是否不應該嘗試逾時擱置中傳送封包,而該封包保留佇列給呼叫端。 中繼驅動程式應該設定此旗標,但 NIC 驅動程式不應該設定。NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT
設定 NDIS 是否不應該嘗試逾時擱置的查詢,並設定其保留佇列給呼叫端的要求。 中繼驅動程式應該設定此旗標,但 NIC 驅動程式不應該設定。NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER
如果呼叫端是中繼驅動程式,請設定 。NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS
如果指出令牌通道錯誤,則設定 NDIS 是否不應該呼叫 Token Ring NIC 驅動程式的 MiniportReset 函式。NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND
設定 NDIS 是否不應該在系統轉換為低電源 (睡眠) 狀態之前呼叫驅動程式 的 MiniportHalt 函式。 依賴硬體維護狀態的驅動程式不應設定此旗標。注意設定此旗標會停用 [允許計算機關閉此裝置以儲存電源] 複選框,此複選框位於網路介面卡的 [電源管理] 索引卷標中, (NIC) 。 即使 NIC 能夠進行電源管理,電源管理仍會停用。
NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK
設定驅動程式是否可以在沒有使用者通知的情況下處理移除其 NIC。 這類驅動程式會匯出 MiniportPnPEventNotify 函式 。 Windows XP 和更新版本的作業系統提供NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK的系統支援。NDIS_ATTRIBUTE_NOT_CO_NDIS
由可支援連線導向和無連線裝置的驅動程式設定,以指出裝置是無連線裝置。 Windows XP 和更新版本的作業系統提供NDIS_ATTRIBUTE_NOT_CO_NDIS的系統支援。NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS
由使用 NdisBufferVirtualAddressSafe、 NdisGetFirstBufferFromPacketSafe 和 NdisQueryBufferSafe 的驅動程序設定,以獨佔方式存取傳送封包緩衝區的系統虛擬位址。 NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS也會由專門使用實體位址來存取這類緩衝區的驅動程序設定。 設定NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS可以改善效能,因為操作系統不需要將封包緩衝區對應至系統虛擬位址。 Windows XP 和更新版本中提供NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS的系統支援。NDIS_ATTRIBUTE_DO_NOT_BIND_TO_ALL_CO
由未提供 TAPI 服務的 CoNDIS 迷你埠驅動程式設定。 設定NDIS_ATTRIBUTE_DO_NOT_BIND_TO_ALL_CO可防止 NDIS 將迷你埠驅動程式系結至 NDIS TAPI Proxy 驅動程式 (NDPROXY) 。 根據預設,NDIS 會將 NDPROXY 系結至所有 CoNDIS 迷你埠驅動程式。
[in, optional] AdapterType
指定呼叫端 NIC 的 I/O 總線介面類型,這通常是 NIC 所連接的 I/O 總線類型,如下所示:
NdisInterfaceInternal
指定主機特定的內部介面。NdisInterfaceIsa
指定 ISA 介面。NdisInterfaceEisa
指定擴充的 ISA (EISA) 介面。NdisInterfaceMca
這是指不再支援的 MCA 總線。NdisInterfaceTurboChannel
指定 Turbo 通道介面。NdisInterfacePci
指定PCI) 介面 (周邊元件互連。NdisInterfacePcMcia
指定個人計算機記憶體卡國際關聯 (計算機卡片) 介面。
此參數與中繼驅動程序無關,這應該將此自變數的零傳遞給 NdisMSetAttributesEx。
傳回值
無
備註
MiniportInitialize 函式必須先呼叫 NdisMSetAttributesEx (或 NdisMSetAttributes) ,再呼叫任何其他 NdisMRegisterXxx 或 NdisXxx 函式,此函式取決於提供給 NdisMSetAttributesEx 的資訊。 例如,如果 MiniportInitialize 尚未呼叫 NdisMSetAttributesEx,NIC 驅動程式對 NdisMAllocateMapRegisters 的呼叫將會失敗,而 AttributeFlags 設定為 NDIS_ATTRIBUTE_BUS_MASTER。
中繼驅動程式必須呼叫 NdisMSetAttributesEx,而不是 NdisMSetAttributes,而且必須在 AttributeFlags 中設定NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER。 設定此旗標會導致 NDIS 將中繼驅動程式視為全雙工迷你埠驅動程式,這可防止中繼驅動程式中發生罕見但間歇性死結。 因此,每個中繼驅動程式都必須能夠處理並行傳送和指示。
還原串行化驅動程式也必須呼叫 NdisMSetAttributesEx,而且必須在 AttributeFlags 中設定NDIS_ATTRIBUTE_DESERIALIZE。 NDIS 不會維護還原串行化驅動程式的傳送封包佇列,也不會將呼叫串行化至這類驅動程式 的 MiniportXxx 函式。 還原串行化驅動程式會自行負責下列事項:
- 接受所有傳入傳送要求
- 視需要將傳入的傳送封包排入內部佇列,例如,如果還原串行化的 NIC 驅動程式目前沒有足夠的資源可供立即傳輸傳入的傳送封包
- 視需要同步處理其內部佇列的存取權 ()
- 藉由後續呼叫 NdisMSendComplete 以異步方式完成所有要求的傳送,並將每個通訊協定提供的封包描述元傳入其 Miniport (Co) Send (Packets) 函式
NDIS 假設所有連線導向的迷你埠都是還原串行化的驅動程式,不論它們傳遞至 NdisMSetAttributesEx 的 AttributeFlags 為何。 也就是說,以 0x05 作為 MajorNdisVersion 呼叫 NdisMRegisterMiniport 的任何驅動程式都必須是還原串行化的迷你埠驅動程式。
串行化的 NIC 驅動程式可以從 MiniportInitialize 呼叫其中一個函式,但 NdisMSetAttributes 不允許其呼叫端調整 NIC 驅動程式 MiniportCheckForHang 和/或 MiniportReset 函式 () 呼叫的間隔。
CheckForHangTimeInSeconds 的值會決定傳送 NDIS 連結庫的逾時間隔,如果有的話,並要求其保留排入佇列給呼叫端。 根據預設,除非驅動程式使用 NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT 設定 AttributeFlags,NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT 並在呼叫 NdisMSetAttributesEx 時呼叫 MiniportReset 函式的兩次,否則 NDIS 只會針對串行化驅動程式) 和要求逾時傳送佇列 (。 中繼驅動程式在呼叫 NdisMSetAttributesEx 時應該設定這些旗標,因為這類驅動程式無法判斷或控制基礎 NIC 驅動程式何時會處理傳送和要求。
NIC 驅動程式不應該設定NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT和NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT旗標,不過 NDIS 會接受串行化 NIC 驅動程式的這類規格。 不過,NIC 驅動程式可以藉由指定明確的 CheckForHangTimeInSeconds 來調整其 MiniportReset 函式呼叫的逾時間隔。 例如,透過數據機模擬乙太網路的 NIC 驅動程式可能不會在 NDIS 連結庫的預設超時時間間隔內完成每個封包。 每當封包出現在這類 NIC 上逾時時,NDIS 會假設 NIC 已不再正常運作,並呼叫驅動程式的 MiniportReset 函式。 針對這類 NIC 的驅動程式,呼叫 NdisMSetAttributesEx 並將 CheckForHangTimeInSeconds 設定為大於兩項的專案會防止不必要的重設,並擴充其 MiniportCheckForHang 函式的間隔,如果有的話,則會呼叫 以測試 NIC 的作業狀態。
中繼驅動程式必須設定NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND旗標。 設定此旗標可防止 NDIS 在系統轉換為低電源 (睡眠) 狀態之前停止驅動程式。
管理非 PnP 感知 NIC 的舊版迷你埠驅動程式可以設定 NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND 旗標,以防止 NDIS 在系統轉換為低電源狀態之前停止驅動程式。 如果迷你埠驅動程式設定此旗標,NDIS 會使用 OID_PNP_CAPABILITIES 查詢迷你埠驅動程式,即使迷你埠驅動程式的 NIC 的總線驅動程式可能已經指出 NIC 沒有 PM 感知。 迷你埠驅動程序必須以NDIS_STATUS_SUCCESS成功OID_PNP_CAPABILITIES要求。 在這個 OID 傳回的NDIS_PM_WAKE_UP_CAPABILITIES結構中,迷你埠驅動程式也必須針對每個喚醒功能指定 NdisDeviceStateUnspecified 的裝置電源狀態。 當系統轉換成低電源狀態時,NDIS 不會呼叫這類迷你埠驅動程式的 MiniportHalt 函式。 在系統轉換為較低電源狀態之前,迷你埠驅動程序必須儲存它所維護的任何硬體內容。 在收到 D3 狀態 的OID_PNP_SET_POWER 要求時,迷你埠驅動程式必須將其 NIC 設定為低電源狀態的適當狀態。 在收到對 D0 狀態的OID_PNP_SET_POWER要求時,迷你埠驅動程式必須將其 NIC 設定為工作狀態的適當狀態。
迷你埠驅動程式,可支援透過使用者介面移除裝置 (意外移除,) 必須設定NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK。 這樣做會導致 NDIS 在移除迷你埠的裝置時呼叫驅動程式 的 MiniportPnPEventNotify 函式 ,並將 PnPEvent 設定為 NdisDevicePnPEventSurpriseRemoved 。 此外,設定 NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK會隱藏警告對話框的顯示,要求使用者在移除裝置之前先停止裝置。
可同時支援無連線和連線導向裝置的迷你埠驅動程式,如果其裝置是無連線裝置,則必須設定NDIS_ATTRIBUTE_NOT_CO_NDIS。 否則,NDIS 會誤假設其裝置為連線導向,因為驅動程式會向 NdisMRegisterMiniport 註冊連線導向迷你埠驅動程式函式。
一般而言,NIC 驅動程式必須先呼叫 NdisMSetAttributesEx ,才能呼叫任何 NdisXxx 函式,以宣告其 NIC 登錄中的硬體資源,因為 NDIS 在進行這類呼叫之前必須具有 AttributeFlags 值,而且驅動程式通常需要 MiniportAdapterContext 上的記憶體來儲存這些呼叫的資訊。 此限制表示 NIC 驅動程式的 MiniportInitialize 函式在呼叫 NdisMSetAttributesEx 之前,無法呼叫下列 NdisXxx:
- NdisMAllocateMapRegisters 和 NdisMAllocateSharedMemory
- NdisMMapIoSpace 和,因此 ,NdisReadRegisterXxx 和 NdisWriteRegisterXxx 函式
- NdisMRegisterDmaChannel
- NdisMRegisterInterrupt
- NdisMRegisterIoPortRange 和,因此 ,NdisRaw..PortXxx 函式
不過,在呼叫 NdisMSetAttributesEx 之前,任何驅動程式的 MiniportInitialize 函式都可以呼叫 Ndis。。用來 擷取登錄中所安裝組態資訊的組態函式。 MiniportInitialize 也可以呼叫總線類型特定的 NdisReadXxx 函式,例如 NdisReadPciSlotInformation,只要驅動程式介面類型的已安裝登錄專案符合總線類型特定的 NdisReadXxxMiniportInitialize 呼叫即可。
提供給 NdisMSetAttributesEx 的 MiniportAdapterContext 句柄會在呼叫 NdisMRegisterMiniport 或NdisIMRegisterLayeredMiniport 時,成為所有已註冊 MiniportXxx 函式以及 MiniportInitialize 的輸入參數。 此句柄通常是 由MiniportInitialize配置的駐留記憶體指標,驅動程式會維護 NIC 特定的運行時間狀態。
- 目標平臺: 通用
- 版本:Windows Vista 中不支援 NDIS 6.0 驅動程式。 請改用 NdisMSetMiniportAttributes。 Windows Vista 和 Windows XP 中支援 NDIS 5.1 驅動程式。
規格需求
需求 | 值 |
---|---|
標頭 | ndis.h (包括 Ndis.h) |
程式庫 | Ndis.lib |
IRQL | PASSIVE_LEVEL |
另請參閱
- MiniportInitialize
- MiniportPnPEventNotify
- NdisAllocateMemoryWithTag
- NdisImmediateReadPciSlotInformation
- NdisImmediateReadPortUchar
- NdisImmediateReadPortUlong
- NdisImmediateReadPortUshort
- NdisImmediateReadSharedMemory
- NdisIMRegisterLayeredMiniport
- NdisMAllocateMapRegisters
- NdisMAllocateSharedMemory
- NdisMMapIoSpace
- NdisMPciAssignResources
- NdisMRegisterDmaChannel
- NdisMRegisterInterrupt
- NdisMRegisterIoPortRange
- NdisMRegisterMiniport
- NdisOpenConfiguration
- NdisReadEisaSlotInformation
- NdisReadEisaSlotInformationEx