3.2.5.1 NetShareEnum Command
The Remote Administration Protocol server MUST process NetShareEnumRequest as follows:
The server MUST validate that the incoming ParamDesc field of the Remote Administration Protocol request contains the ASCII string "WrLeh"; if it does not, the server SHOULD format a Remote Administration Protocol response with the Win32ErrorCode set to ERROR_INVALID_PARAMETER (0x0057), and then return the response to the client.<67>
If the information level is any value other than 0, 1, or 2, the server implementing NetShareEnum MUST set the Win32ErrorCode value in the Remote Administration Protocol response message to ERROR_INVALID_LEVEL (0x007C).
The Remote Administration Protocol server MUST create a Remote Administration Protocol response message with the RAPOutParams set to the contents of a NetShareEnumResponse message. The Remote Administration Protocol server MUST enumerate the shares on the local machine as specified in [MS-SRVS] section 3.1.4.8, passing the following parameters:
Parameter
Value
ServerName
The local machine name
InfoStruct.Level
NetShareEnumRequest.InfoLevel
PreferredMaximumLength
0xFFFFFFFF
ResumeHandle
0
If the enumeration call succeeds, the server MUST use the resulting TotalEntries and InfoStruct information to generate the response as follows:
If the InfoLevel of the NetShareEnumRequest structure is 0x0000, the Remote Administration Protocol server MUST fill in the RAPOutData field of the Remote Administration Protocol response with as many NetShareInfo0 structures as can fit within the value specified by the Remote Administration Protocol client's ReceiveBufferSize input parameter (see packing rules specified in section 2.5.11). The server MUST map between the fields of the SHARE_INFO_0 structures returned from NetrShareEnum and the NetShareInfo0 structure as follows:
NetShareInfo0
SHARE_INFO_0
NetworkName
shi0_netname, truncated to 12 characters if necessary
The server MUST set the EntriesReturned field in NetShareEnumResponse to the number of NetShareInfo0 structures filled in the RAPOutData field of the response, and MUST set EntriesAvailable to the TotalEntries value received from the NetrShareEnum call.
If the InfoLevel of the NetShareEnumRequest structure is 0x0001, the Remote Administration Protocol server MUST fill in the RAPOutData field of the Remote Administration Protocol response with as many NetShareInfo1 structures as can fit within the value specified by the Remote Administration Protocol client's ReceiveBufferSize input parameter (see packing rules specified in section 2.5.11). The server MUST map between the fields of the SHARE_INFO_1 structures returned from NetrShareEnum and the NetShareInfo1 structure as follows:
NetShareInfo1
SHARE_INFO_1
NetworkName
shi1_netname, truncated to 12 characters if necessary
Type
shi1_type
RemarkOffset and RemarkLength
shi1_remark
The server MUST set the EntriesReturned field in NetShareEnumResponse to the number of NetShareInfo1 structures filled in the RAPOutData field of the response, and MUST set EntriesAvailable to the TotalEntries value received from the NetrShareEnum call.
If the InfoLevel of the NetShareEnumRequest structure is 0x0002, the Remote Administration Protocol server MUST walk the shares in ShareList and fill in the RAPOutData field of the Remote Administration Protocol response with as many NetShareInfo2 structures as can fit within the value specified by the Remote Administration Protocol client's ReceiveBufferSize input parameter (see packing rules specified in section 2.5.11). The server MUST map between the SHARE_INFO_2 structures returned from NetrShareEnum and the NetShareInfo2 structure as follows:
NetShareInfo2
SHARE_INFO_2
NetworkName
shi2_netname, truncated to 12 characters if necessary
Type
shi2_type
RemarkOffset and RemarkLength
shi2_remark
Permissions
shi2_permissions
MaxUses
shi2_max_uses
CurrentUses
shi2_current_uses
PathOffsetLow and PathOffsetHigh
shi2_path
Password
shi2_password
The server MUST set the EntriesReturned field in NetShareEnumResponse to the number of NetShareInfo2 structures filled in the RAPOutData field of the response, and MUST set EntriesAvailable to the TotalEntries value received from the NetrShareEnum call.
If the response EntriesReturned field is less than the response EntriesAvailable field, the NetShareEnum server SHOULD set the Win32ErrorCode value in the Remote Administration Protocol response message to ERROR_MORE_DATA (0x00EA).<68>
If any other errors occur during the response processing, the Remote Administration Protocol server MUST fill the Win32ErrorCode value in the Remote Administration Protocol response message with the Win32 error code corresponding to the error. Otherwise, the Remote Administration Protocol server MUST set Win32ErrorCode to ERROR_SUCCESS (0X0000).