Class: PSRP::Message

Inherits:
Object
  • Object
show all
Defined in:
lib/wsmv/psrp_message.rb

Direct Known Subclasses

MessageDecoder, MessageEncoder

Constant Summary collapse

BLOB_HEADER_LEN =

Length of all the blob header fields: BOM, pipeline_id, runspace_pool_id, message_type, blob_destination

43
BLOB_MAX_LEN =

Maximum allowed length of the blob

32768 - BLOB_HEADER_LEN
MESSAGE_TYPES =

All known PSRP message types

{
  SESSION_CAPABILITY: 0x00010002,
  INIT_RUNSPACEPOOL: 0x00010004,
  PUBLIC_KEY: 0x00010005,
  ENCRYPTED_SESSION_KEY: 0x00010006,
  PUBLIC_KEY_REQUEST: 0x00010007,
  CONNECT_RUNSPACEPOOL: 0x00010008,
  RUNSPACEPOOL_INIT_DATA: 0x0002100B,
  RESET_RUNSPACE_STATE: 0x0002100C,
  SET_MAX_RUNSPACES: 0x00021002,
  SET_MIN_RUNSPACES: 0x00021003,
  RUNSPACE_AVAILABILITY: 0x00021004,
  RUNSPACEPOOL_STATE: 0x00021005,
  CREATE_PIPELINE: 0x00021006,
  GET_AVAILABLE_RUNSPACES: 0x00021007,
  USER_EVENT: 0x00021008,
  APPLICATION_PRIVATE_DATA: 0x00021009,
  GET_COMMAND_METADATA: 0x0002100A,
  RUNSPACEPOOL_HOST_CALL: 0x00021100,
  RUNSPACEPOOL_HOST_RESPONSE: 0x00021101,
  PIPELINE_INPUT:0x00041002,
  END_OF_PIPELINE_INPUT: 0x00041003,
  PIPELINE_OUTPUT: 0x00041004,
  ERROR_RECORD: 0x00041005,
  PIPELINE_STATE: 0x00041006,
  DEBUG_RECORD: 0x00041007,
  VERBOSE_RECORD: 0x00041008,
  WARNING_RECORD: 0x00041009,
  PROGRESS_RECORD: 0x00041010,
  INFORMATION_RECORD: 0x00041011,
  PIPELINE_HOST_CALL: 0x00041100,
  PIPELINE_HOST_RESPONSE: 0x00041101
}

Instance Method Summary collapse

Instance Method Details

#uuid_to_windows_guid_bytes(uuid) ⇒ Array<byte>

Format a UUID into a GUID compatible byte array for Windows

msdn.microsoft.com/en-us/library/windows/desktop/aa373931(v=vs.85).aspx typedef struct _GUID

DWORD Data1;
WORD  Data2;
WORD  Data3;
BYTE  Data4[8];

GUID;

Parameters:

  • uuid (String)

    Canonical hex format with hypens.

Returns:

  • (Array<byte>)

    UUID in a Windows GUID compatible byte array layout.



82
83
84
85
86
# File 'lib/wsmv/psrp_message.rb', line 82

def uuid_to_windows_guid_bytes(uuid)
  return [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] unless uuid
  b = uuid.scan(/[0-9a-fA-F]{2}/).map { |x| x.to_i(16) }
  b[0..3].reverse + b[4..5].reverse + b[6..7].reverse + b[8..15]
end