module TurboRex::MSRPC::RPCBase

Constants

DCE_TransferSyntax
GUID
MIDL_SERVER_INFO
MIDL_SERVER_INFO32
MIDL_SERVER_INFO64
MIDL_STUBLESS_PROXY_INFO
MIDL_STUBLESS_PROXY_INFO32
MIDL_STUBLESS_PROXY_INFO64
MIDL_STUB_DESC
MIDL_STUB_DESC32
MIDL_STUB_DESC64
MIDL_SYNTAX_INFO
MIDL_SYNTAX_INFO32
MIDL_SYNTAX_INFO64
NDR64_TransferSyntax
RPC_DISPATCH_TABLE_T
RPC_DISPATCH_TABLE_T32
RPC_DISPATCH_TABLE_T64
RPC_IF_ID
RPC_PROTSEQ_ENDPOINT
RPC_PROTSEQ_ENDPOINT32
RPC_PROTSEQ_ENDPOINT64
RPC_SERVER_INTERFACE
RPC_SERVER_INTERFACE32
RPC_SERVER_INTERFACE64
RPC_SYNTAX_IDENTIFIER
RPC_SYNTAX_IDENTIFIER64
RPC_Struct_Mgr32
RPC_Struct_Mgr64
RPC_VERSION

Public Class Methods

from_guid_str(guid_str) click to toggle source
# File lib/turborex/msrpc/rpcbase.rb, line 233
def self.from_guid_str(guid_str)
  if guid_str.count('-') == 3
    hexData1, hexData2, hexData3, hexData4 = guid_str.split('-')

    data1 = hexData1.to_i(16)
    data2 = hexData2.to_i(16)
    data3 = hexData3.to_i(16)
    data4 = [hexData4.to_i(16)].pack('Q<').unpack('CCCCCCCC')

    guid_struct = GUID.make
    guid_struct['data1'].value = data1
    guid_struct['data2'].value = data2
    guid_struct['data3'].value = data3

    data4.each_with_index do |c, i|
      guid_struct['data4'][i].value = c
    end

    guid_struct
  elsif guid_str.count('-') == 4
    hexData1, hexData2, hexData3, hexData4Hi, hexData4 = guid_str.split('-')

    data1 = hexData1.to_i(16)
    data2 = hexData2.to_i(16)
    data3 = hexData3.to_i(16)
    data4Hi = hexData4Hi.to_i(16)
    data4 = []

    (0...hexData4.length).step(2) do |i|
      data4 << hexData4[i...i + 2].to_i(16)
    end

    guid_struct = GUID.make
    guid_struct['data1'].value = data1
    guid_struct['data2'].value = data2
    guid_struct['data3'].value = data3
    guid_struct['data4'][0].value = data4Hi >> 8
    guid_struct['data4'][1].value = data4Hi & 0xff

    data4.each_with_index do |c, i|
      guid_struct['data4'][i + 2].value = c
    end

    guid_struct
  end
end
make_transferSyntax(guid, majorVersion, minorVersion) click to toggle source
# File lib/turborex/msrpc/rpcbase.rb, line 280
def self.make_transferSyntax(guid, majorVersion, minorVersion)
  ident = RPC_SYNTAX_IDENTIFIER.make
  ident['syntaxGUID'].from_s from_guid_str(guid).to_s
  ident['syntaxVersion'][0].value = majorVersion
  ident['syntaxVersion'][1].value = minorVersion

  ident
end