共用方式為


NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO 結構 (ndis/nblchecksum.h)

NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO 結構會指定將總和檢查碼工作從 TCP/IP 傳輸卸除至 NIC 時所使用的資訊。 NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO 結構是與NET_BUFFER_LIST結構相關聯的NET_BUFFER_LIST資訊 (頻外數據) 的一部分。

語法

typedef struct _NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO {
  union {
    struct {
      ULONG IsIPv4 : 1;
      ULONG IsIPv6 : 1;
      ULONG TcpChecksum : 1;
      ULONG UdpChecksum : 1;
      ULONG IpHeaderChecksum : 1;
      ULONG Reserved : 11;
      ULONG TcpHeaderOffset : 10;
    } Transmit;
    struct {
      ULONG TcpChecksumFailed : 1;
      ULONG UdpChecksumFailed : 1;
      ULONG IpChecksumFailed : 1;
      ULONG TcpChecksumSucceeded : 1;
      ULONG UdpChecksumSucceeded : 1;
      ULONG IpChecksumSucceeded : 1;
      ULONG Loopback : 1;
      ULONG TcpChecksumValueInvalid : 1;
      ULONG IpChecksumValueInvalid : 1;
    } Receive;
    PVOID Value;
  };
} NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO, *PNDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO;

成員

Transmit

包含下列成員的結構:

Transmit.IsIPv4

由 TCP/IP 傳輸設定,以指出傳送封包包含 IPv4 位址。

Transmit.IsIPv6

由 TCP/IP 傳輸設定,以指出傳送封包包含 IPv6 位址。

Transmit.TcpChecksum

由 TCP/IP 傳輸設定,以指出 NIC 應該計算封包的 TCP 總和檢查碼。

Transmit.UdpChecksum

由 TCP/IP 傳輸設定,以指出 NIC 應該計算封包的 UDP 總和檢查碼。

Transmit.IpHeaderChecksum

由 TCP/IP 傳輸設定,以指出 NIC 應該計算封包中第一個 IP 標頭的 IP 總和檢查碼。 如果封包同時包含通道IP標頭和傳輸IP標頭,NIC應該計算這兩個IP標頭的總和檢查碼。

Transmit.Reserved

保留給 NDIS。

Transmit.TcpHeaderOffset

TCP 封包開頭的 TCP 標頭位移,以位元組為單位。 迷你埠驅動程式可以使用 TcpHeaderOffset 來判斷 TCP 標頭的位置,使其不需要剖析 MAC 和 IP 標頭。

Receive

包含下列成員的結構:

Receive.TcpChecksumFailed

由迷你埠驅動程式設定,表示 NIC 計算的 TCP 總和檢查碼不符合接收封包 TCP 標頭中的總和檢查碼。

Receive.UdpChecksumFailed

由迷你埠驅動程式設定,表示 NIC 計算的 UDP 總和檢查碼不符合接收封包 UDP 標頭中的總和檢查碼。

Receive.IpChecksumFailed

由迷你埠驅動程式設定,表示 NIC 計算的 IP 總和檢查碼不符合接收封包第一個 IP 標頭中的總和檢查碼。 如果接收封包同時包含通道IP標頭和傳輸IP標頭,NIC 會驗證這兩個IP標頭的總和檢查碼。

注意 對於具有通道 (外部) IPv4 標頭和傳輸 (內部) IPv4 標頭的封裝封包,如果其中一個 IP 標頭總和檢查碼驗證失敗,迷你埠驅動程式應該設定此旗標。
 

Receive.TcpChecksumSucceeded

由迷你埠驅動程式設定,表示 NIC 計算的 TCP 總和檢查碼符合接收封包 TCP 標頭中的總和檢查碼。

Receive.UdpChecksumSucceeded

由迷你埠驅動程式設定,表示 NIC 計算的 UDP 總和檢查碼符合接收封包 UDP 標頭中的總和檢查碼。

Receive.IpChecksumSucceeded

由迷你埠驅動程式設定,以指出 NIC 計算的 IP 總和檢查碼符合接收封包第一個 IP 標頭中的總和檢查碼。 如果接收封包同時包含通道IP標頭和傳輸IP標頭,NIC 會驗證這兩個IP標頭的總和檢查碼。

注意 對於具有通道 (外部) IPv4 標頭和傳輸 (內部) IPv4 標頭的封裝封包,迷你埠驅動程式只有在兩個 IP 標頭總和檢查碼驗證都成功時,才應該設定此旗標。
 

Receive.Loopback

NDIS 會使用此位。 迷你埠驅動程式不得檢查或設定此位;迷你埠驅動程序應該只會忽略這個位。

Receive.TcpChecksumValueInvalid

支援 接收區段聯合的迷你埠驅動程式 (RSC) 設定此旗標,表示 TCP 標頭總和檢查碼已由 NIC 驗證,但封包中的 TCP 標頭總和檢查碼值無效。 如需詳細資訊,請參閱 指出聯合區段

不支援 RSC 的迷你埠驅動程式應該將此旗標設定為零。

注意NDIS 6.30 和更新版本的迷你埠驅動程序支援此旗標,Windows 8、Windows Server 2012 及更新版本。
 

Receive.IpChecksumValueInvalid

支援 RSC 的迷你埠驅動程式會設定此旗標,指出針對 IPv4 封包,IP 標頭總和檢查碼是由 NIC 驗證,但封包中的 IP 標頭總和檢查碼值無效。 對於包含通道和傳輸IP標頭的封包,此位僅適用於通道IP標頭。 如需詳細資訊,請參閱 指出聯合區段

不支援 RSC 的迷你埠驅動程式應該將此旗標設定為零。

注意NDIS 6.30 和更新版本的迷你埠驅動程序支援此旗標,Windows 8、Windows Server 2012 及更新版本。
 

Value

總和檢查碼資訊的 PVOID 版本。 迷你埠驅動程式可以使用這個成員來存取原始資訊,而不是特定欄位。

備註

NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO 結構會指定用來將總和檢查碼工作從 TCP/IP 傳輸卸除至 NIC 的資訊。 NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO 結構是與NET_BUFFER_LIST結構相關聯的NET_BUFFER_LIST資訊 (頻外數據) 的一部分。

在 TCP/IP 傳輸傳遞至迷你埠驅動程式之前,迷你埠驅動程式將會在其中執行總和檢查碼工作的 TCP/IP 封包,TCP/IP 傳輸會更新與NET_BUFFER_LIST結構相關聯的NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO結構。 具體而言,TCP/IP 傳輸會設定 IsIPv4IsIPv6 旗標,指出傳送封包是 IPv4 或 IPv6 封包。

yy 如果 TCP/IP 傳輸未設定 IsIPv4IsIPv6 旗標,迷你埠驅動程式不應該在封包上執行總和檢查碼工作。 如果 TCP/IP 傳輸設定 IsIPv4IsIPv6 旗標,它也會設定適當的旗標,指出迷你埠驅動程式應該計算封包的總和檢查碼。 針對 IPv4,這包括 IpHeaderChecksumTcpChecksumUdpChecksum 旗標。 針對 IPv6,這包括 TcpChecksumUdpChecksum 旗標。 此外,針對 TCP 封包,TCP/IP 傳輸會在設定 IsIPv4IPv6 旗標時設定 TcpHeaderOffset 字段。 傳輸不會針對 UDP 封包設定此欄位。

在指示執行總和檢查碼工作的接收 TCP/IP 封包之前,迷你埠驅動程式會在NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO結構中設定適當的 XxxChecksumFailed 或 XxxChecksumSucceeded 旗標。

注意 在迷你埠收到 OID_OFFLOAD_ENCAPSULATION之前,會停用總和檢查碼卸除。 收到此 OID 之後,接著允許迷你埠開始驗證某些已接收封包上的總和檢查碼。 不需要迷你埠來驗證每個封包上的總和檢查碼;如果 XxxChecksumFailed 和 XxxChecksumSucceeded 旗 標都清楚,OS 將會回復為驗證軟體中的總和檢查碼。 此行為與 WHCP 驅動程式認證需求無關,可能需要迷你埠驗證所有封包上的總和檢查碼,因為系統上的其他通訊協定驅動程式可能沒有後援機制。
 
若要取得NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO結構,驅動程式應該使用 TcpIpChecksumNetBufferListInfo_Id呼叫 NET_BUFFER_LIST_INFO 宏。

規格需求

需求
最低支援的用戶端 NDIS 6.0 和更新版本支援。
標頭 ndis/nblchecksum.h (include ndis.h)

另請參閱

指出聯合區段

NET_BUFFER_LIST

NET_BUFFER_LIST_INFO