3.1.4.2 Sending a DFS Referral Request to the Server

This interface is only used internally by the DFS client to send a DFS referral request to a specific server. The caller provides the following:

  • Type: A string identifying the type of the referral request.

  • HostName: The name of the server from which to query referrals.

  • UserCredentials: An opaque implementation-specific entity that identifies the credentials to be used when authenticating to the remote server.

  • MaxOutputSize: The maximum output buffer response size, in bytes.

  • Path: The path for which referral information is to be queried.

The client MUST initiate a server session with the SMB server, as specified in [MS-CIFS] section 3.4.4.7, by passing HostName and UserCredentials as input parameters and receiving an opaque ClientGenericContext, as specified in [MS-CIFS] section 3.4.

The client MUST verify the local configuration on extended referrals in an implementation-specific manner<7>, and MUST also query the server's extended referral capability by invoking the event as specified in [MS-CIFS] section 3.4.4.12.

If both the tests return TRUE, the client MUST construct the REQ_GET_DFS_REFERRAL_EX request, as specified in section 2.2.3, with the following parameters:

  • MaxReferralLevel is set to the corresponding Type as specified in the following table.

  • RequestFlags is set to 1.

  • RequestFileName is set to Path.

  • SiteName is set in an implementation-specific manner.<8>

If any of the tests return FALSE, the client MUST construct a REQ_GET_DFS_REFERRAL request, as specified in section 2.2.2, with the following parameters:

  • MaxReferralLevel is set to the corresponding Type as specified in the following table.

  • RequestFileName is set to Path.

The client MUST query the DFS referral, as specified in [MS-CIFS] section 3.4.4.9, by passing ClientGenericContext, HostName, UserCredentials, MaxOutputSize, the REQ_GET_DFS_REFERRAL_EX or REQ_GET_DFS_REFERRAL structure as the input buffer, and the FSCTL code set to FSCTL_DFS_GET_REFERRALS, if the input buffer is an REQ_GET_DFS_REFERRAL, or FSCTL_DFS_GET_REFERRALS_EX, if the input buffer is an REQ_GET_DFS_REFERRAL_EX.

Type

RequestFileName

MaxReferralLevel

DOMAIN

An empty string (containing just the null terminator).

3 or higher

DC

"\<domain>" or "<domain>", where <domain> is a domain name that can be in either NetBIOS or fully qualified domain name forms.

3 or higher

SYSVOL

Either "\<domain>\SYSVOL" or "\<domain>\NETLOGON", where <domain> is a domain name that can be in either NetBIOS or fully qualified domain name forms.

No restriction

ROOT

Of the form either "\<domain>\<dfsname>" or "\<server>\<dfsname>", where <domain> is the name of the domain that hosts the DFS namespace, <dfsname> is the name of a DFS namespace, and <server> is a DFS root target host name.

No restriction

LINK

Of the form either "\<domain>\<dfsname>\<linkpath>" or "\<server>\<dfsname>\<linkpath>", where <domain> is the name of the domain that hosts the DFS namespace, <dfsname> is the name of a DFS namespace, <server> is a DFS root target host name, <linkpath> is a path that can have a DFS link.

No restriction

The client MUST wait synchronously for the completion of the referral request and pass the referral response received from the server to the caller. If the request fails with STATUS_DFS_UNAVAILABLE, the client MUST return the same error code to the caller.

The client MUST validate that the returned referral response is properly formed, (section 2.2.5). If the response is ill-formed, the client MUST fail the referral request and return the error code STATUS_INVALID_NETWORK_RESPONSE to the caller.