3.3.5.15.11 Handling a Query Network Interface Request
This section applies only to servers that implement the SMB 3.x dialect family.
When the server receives a request with an SMB2 header with a Command value equal to SMB2 IOCTL and a CtlCode of FSCTL_QUERY_NETWORK_INTERFACE_INFO, message handling proceeds as follows:
If the server receives a request that is not signed, the server MAY fail the request with STATUS_ACCESS_DENIED.
If Connection.Dialect does not belong to the SMB 3.x dialect family or Connection.ServerCapabilities does not include SMB2_GLOBAL_CAP_MULTI_CHANNEL, the server MAY fail the request with STATUS_NOT_SUPPORTED.
Otherwise, the server MUST enumerate the local network interfaces in an implementation-specific manner. For each IP address in each network interface, the server MUST construct a NETWORK_INTERFACE_INFO structure as specified in section 2.2.32.5, with the following values:
The server MUST NOT include the IP address for a network interface with IfIndex equal to zero.
IfIndex, Capability, and LinkSpeed MUST be set in an implementation-specific manner.
The Family field in SockAddr_Storage MUST be set based on the IP address format. The Buffer field in SockAddr_Storage MUST be set as specified in section 2.2.32.5.1.
If a network interface has multiple IP addresses, IfIndex MUST be the same in all NETWORK_INTERFACE_INFO structures for those IP addresses.
The server MUST construct an SMB2 IOCTL Response by following the syntax specified in section 2.2.32, with the exception of the following values:
The CtlCode field MUST be set to FSCTL_QUERY_NETWORK_INTERFACE_INFO.
The FileId field MUST be set to { 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF }.
InputOffset SHOULD be set to the offset, in bytes, from the beginning of the SMB2 header to the Buffer[] field of the response.
InputCount SHOULD be set to zero.
OutputOffset MUST be set to InputOffset + InputCount, rounded up to a multiple of 8.
OutputCount MUST be set to the size of the NETWORK_INTERFACE_INFO that was previously constructed.
Flags MUST be set to zero.
The server MUST copy the constructed array of NETWORK_INTERFACE_INFO structures into the Buffer field at the OutputOffset that was previously computed.
The response MUST be sent to the client.