Module: RubySMB::Rap::NetShareEnum

Included in:
SMB1::Tree
Defined in:
lib/ruby_smb/rap/net_share_enum.rb

Overview

NetShareEnum (RAP opcode 0), as defined in MS-RAP 3.3.4.1. Carried over \PIPE\LANMAN using SMB_COM_TRANSACTION. Request parameters describe the shape of the data the server returns; response parameters carry the RAP status, entry count, and buffer sizing hint, and the response data block is an array of share_info_1 records.

Defined Under Namespace

Classes: Request, Response, ShareInfo1

Constant Summary collapse

OPCODE =
0
PARAM_DESCRIPTOR =

Parameter descriptor for the RAP call itself: (W)ord info level, (r)eturn buffer pointer, (L)ength hint, (e)ntry count, (h)andle.

'WrLeh'.freeze
DATA_DESCRIPTOR_LEVEL_1 =

Data descriptor for share_info_1: (B)13 name, (B)yte pad, (W)ord type, (z) pointer to remark. See MS-RAP 3.2.4 for descriptor syntax.

'B13BWz'.freeze
DEFAULT_RECEIVE_BUFFER_SIZE =

Default server receive-buffer size.

0x1000
SHARE_TYPES =

Share type codes carried in the low bits of share_info_1.shi1_type per MS-RAP 2.5.14. The RAP field is 16 bits wide, unlike the 32-bit SRVSVC variant in Dcerpc::Srvsvc::SHARE_TYPES.

{
  0x0000 => 'DISK',
  0x0001 => 'PRINTER',
  0x0002 => 'DEVICE',
  0x0003 => 'IPC'
}.freeze
STYPE_SPECIAL =
0x8000
STYPE_TEMPORARY =
0x4000

Instance Method Summary collapse

Instance Method Details

#net_share_enumArray<Hash>

Sends a RAP NetShareEnum over \PIPE\LANMAN using the tree's existing SMB1 connection. Does not rely on having an opened pipe FID because Win9x does not permit OPEN_ANDX on \PIPE\LANMAN; RAP trans is accepted directly against the IPC$ tree.

Returns:

  • (Array<Hash>)

    each entry has :name (String) and :type (Integer).

Raises:



77
78
79
80
81
82
83
# File 'lib/ruby_smb/rap/net_share_enum.rb', line 77

def net_share_enum
  request = build_net_share_enum_request
  raw_response = rap_client.send_recv(request)
  response = RubySMB::SMB1::Packet::Trans::Response.read(raw_response)
  validate_trans_response!(response)
  parse_net_share_enum_response(response, raw_response)
end