msmqmp
import "github.com/TheManticoreProject/Manticore/windows/protocols/ms-mqmp"
Index
- type CACCreateRemoteCursor
- type CACTransferBufferV1
- type CACTransferBufferV1Receive
- type CACTransferBufferV1Send
- type CACTransferBufferV1Union
- type CACTransferBufferV2
- type OBJECT_FORMAT
- type ObjectFormatUnion
- type PCTX_OPENREMOTE_HANDLE_TYPE
- type RPC_INT_XACT_HANDLE
- type RPC_QUEUE_HANDLE
- type TRANSFER_TYPE
type CACCreateRemoteCursor
CACCreateRemoteCursor ([MS-MQMP]). Generated by tools/idlgen; verify pointer/array tags.
type CACCreateRemoteCursor struct {
HCursor ndr.DWORD
Srv_hACQueue ndr.DWORD
Cli_pQMQueue ndr.DWORD
}
type CACTransferBufferV1
CACTransferBufferV1 carries the parameters and message properties of a Send, Receive, or CreateCursor operation ([MS-MQMP] 2.2.5). It is a large, heavily optional structure: a uTransferType discriminant selects one of three operation-specific arms, and the trailing members carry every message property as an independent unique pointer.
NOT YET WIRE-READY. Faithful NDR marshalling of this structure requires pointer double-indirection that the declarative codec (network/dcerpc/ndr) does not yet support: the message-property buffers are IDL “[size_is(,n)] TYPE**” — a unique pointer to a unique pointer to a conformant[-varying] array — and the id fields are “TYPE**” (a unique pointer to a unique pointer to a single value). The codec models only a single level of pointer-to-array / pointer-to-value, so the fields below are declared with the closest single-indirection form for documentation and Go-level use, but they are known to be one referent id short of the wire and are NOT round-trip tested. The four methods that carry a CACTransferBuffer (R_QMCreateRemoteCursor, and qmcomm2’s QMSendMessageInternalEx / rpc_ACSendMessageEx / rpc_ACReceiveMessageEx) are deferred until the codec gains double-indirection support and the layout can be validated against a live MSMQ server.
type CACTransferBufferV1 struct {
UTransferType ndr.DWORD
Value CACTransferBufferV1Union
PClass *uint16 `ndr:"unique"`
PpMessageID *msmqmq.OBJECTID `ndr:"unique"`
PpCorrelationID []byte `ndr:"unique,varying,size_is=20,length_is=20"`
PSentTime *ndr.DWORD `ndr:"unique"`
PArrivedTime *ndr.DWORD `ndr:"unique"`
PPriority *uint8 `ndr:"unique"`
PDelivery *uint8 `ndr:"unique"`
PAcknowledge *uint8 `ndr:"unique"`
PAuditing *uint8 `ndr:"unique"`
PApplicationTag *ndr.DWORD `ndr:"unique"`
PpBody []byte `ndr:"unique,varying,size_is=UlAllocBodyBufferInBytes,length_is=UlBodyBufferSizeInBytes"`
UlBodyBufferSizeInBytes ndr.DWORD
UlAllocBodyBufferInBytes ndr.DWORD
PBodySize *ndr.DWORD `ndr:"unique"`
PpTitle []uint16 `ndr:"unique,varying,size_is=UlTitleBufferSizeInWCHARs,length_is=UlTitleBufferSizeInWCHARs"`
UlTitleBufferSizeInWCHARs ndr.DWORD
PulTitleBufferSizeInWCHARs *ndr.DWORD `ndr:"unique"`
UlAbsoluteTimeToQueue ndr.DWORD
PulRelativeTimeToQueue *ndr.DWORD `ndr:"unique"`
UlRelativeTimeToLive ndr.DWORD
PulRelativeTimeToLive *ndr.DWORD `ndr:"unique"`
PTrace *uint8 `ndr:"unique"`
PulSenderIDType *ndr.DWORD `ndr:"unique"`
PpSenderID []byte `ndr:"unique,size_is=USenderIDLen"`
PulSenderIDLenProp *ndr.DWORD `ndr:"unique"`
PulPrivLevel *ndr.DWORD `ndr:"unique"`
UlAuthLevel ndr.DWORD
PAuthenticated *uint8 `ndr:"unique"`
PulHashAlg *ndr.DWORD `ndr:"unique"`
PulEncryptAlg *ndr.DWORD `ndr:"unique"`
PpSenderCert []byte `ndr:"unique,size_is=UlSenderCertLen"`
UlSenderCertLen ndr.DWORD
PulSenderCertLenProp *ndr.DWORD `ndr:"unique"`
PpwcsProvName []uint16 `ndr:"unique,size_is=UlProvNameLen"`
UlProvNameLen ndr.DWORD
PulAuthProvNameLenProp *ndr.DWORD `ndr:"unique"`
PulProvType *ndr.DWORD `ndr:"unique"`
FDefaultProvider int32
PpSymmKeys []byte `ndr:"unique,size_is=UlSymmKeysSize"`
UlSymmKeysSize ndr.DWORD
PulSymmKeysSizeProp *ndr.DWORD `ndr:"unique"`
BEncrypted uint8
BAuthenticated uint8
USenderIDLen uint16
PpSignature []byte `ndr:"unique,size_is=UlSignatureSize"`
UlSignatureSize ndr.DWORD
PulSignatureSizeProp *ndr.DWORD `ndr:"unique"`
PpSrcQMID *msdtyp.GUID `ndr:"unique"`
PUow *msmqmq.XACTUOW `ndr:"unique"`
PpMsgExtension []byte `ndr:"unique,varying,size_is=UlMsgExtensionBufferInBytes,length_is=UlMsgExtensionBufferInBytes"`
UlMsgExtensionBufferInBytes ndr.DWORD
PMsgExtensionSize *ndr.DWORD `ndr:"unique"`
PpConnectorType *msdtyp.GUID `ndr:"unique"`
PulBodyType *ndr.DWORD `ndr:"unique"`
PulVersion *ndr.DWORD `ndr:"unique"`
}
type CACTransferBufferV1Receive
CACTransferBufferV1Receive is the CACTB_RECEIVE arm ([MS-MQMP] 2.2.5): the parameters of a Receive operation. The four format-name buffers are IDL “[size_is(,n)] WCHAR**” (see the double-indirection note on CACTransferBufferV1) and are modelled here with the closest single-indirection form.
type CACTransferBufferV1Receive struct {
RequestTimeout ndr.DWORD
Action ndr.DWORD
Asynchronous ndr.DWORD
Cursor ndr.DWORD
UlResponseFormatNameLen ndr.DWORD
PpResponseFormatName []uint16 `ndr:"unique,size_is=UlResponseFormatNameLen"`
PulResponseFormatNameLenProp *ndr.DWORD `ndr:"unique"`
UlAdminFormatNameLen ndr.DWORD
PpAdminFormatName []uint16 `ndr:"unique,size_is=UlAdminFormatNameLen"`
PulAdminFormatNameLenProp *ndr.DWORD `ndr:"unique"`
UlDestFormatNameLen ndr.DWORD
PpDestFormatName []uint16 `ndr:"unique,size_is=UlDestFormatNameLen"`
PulDestFormatNameLenProp *ndr.DWORD `ndr:"unique"`
UlOrderingFormatNameLen ndr.DWORD
PpOrderingFormatName []uint16 `ndr:"unique,size_is=UlOrderingFormatNameLen"`
PulOrderingFormatNameLenProp *ndr.DWORD `ndr:"unique"`
}
type CACTransferBufferV1Send
CACTransferBufferV1Send is the CACTB_SEND arm ([MS-MQMP] 2.2.5): the admin and response queue format names for a Send operation.
type CACTransferBufferV1Send struct {
PAdminQueueFormat *msmqmq.QUEUE_FORMAT `ndr:"unique"`
PResponseQueueFormat *msmqmq.QUEUE_FORMAT `ndr:"unique"`
}
type CACTransferBufferV1Union
CACTransferBufferV1Union is the [switch_is(uTransferType)] union of CACTransferBufferV1 ([MS-MQMP] 2.2.5). CACTB_SEND (0) selects the Send arm, CACTB_RECEIVE (1) the Receive arm, and CACTB_CREATECURSOR (2) a CACCreateRemoteCursor.
type CACTransferBufferV1Union struct {
UTransferType ndr.DWORD `ndr:"switch"`
Send CACTransferBufferV1Send `ndr:"case=0"`
Receive CACTransferBufferV1Receive `ndr:"case=1"`
CreateCursor CACCreateRemoteCursor `ndr:"case=2"`
}
type CACTransferBufferV2
CACTransferBufferV2 extends CACTransferBufferV1 with the transaction fields of a Send or Receive operation ([MS-MQMP] 2.2.6): the embedded V1 buffer plus first/last-in-transaction flags and the transaction identifier.
NOT YET WIRE-READY. It embeds CACTransferBufferV1, so it inherits that type’s double-indirection limitation (see the note there) and is likewise deferred and not round-trip tested. PpXactID is the IDL “OBJECTID**”, modelled here with a single indirection.
type CACTransferBufferV2 struct {
Old CACTransferBufferV1
PbFirstInXact *uint8 `ndr:"unique"`
PbLastInXact *uint8 `ndr:"unique"`
PpXactID *msmqmq.OBJECTID `ndr:"unique"`
}
type OBJECT\_FORMAT
OBJECT_FORMAT identifies a directory object operated on by [MS-MQMP] ([MS-MQMP] 2.2.3): an ObjType discriminant and a [switch_is(ObjType)] union. ObjType 1 selects a queue, carried by a unique pointer to a QUEUE_FORMAT ([MS-MQMQ] 2.2.7).
Wire modelling. The IDL union is non-encapsulated (its discriminant is the enclosing struct’s ObjType field); the codec’s declarative unions carry their own discriminant, so the union is modelled as the Value field whose own ObjType switch mirrors the outer one. Keep the two equal with SetObjType.
type OBJECT_FORMAT struct {
ObjType ndr.DWORD
Value ObjectFormatUnion
}
func (*OBJECT_FORMAT) SetObjType
func (o *OBJECT_FORMAT) SetObjType(objType ndr.DWORD) *OBJECT_FORMAT
SetObjType sets both the outer discriminant and the union’s mirrored discriminant so they stay consistent, then returns the receiver for chaining.
type ObjectFormatUnion
ObjectFormatUnion is the [switch_is(ObjType)] union of OBJECT_FORMAT ([MS-MQMP] 2.2.3). ObjType 1 selects a unique pointer to a QUEUE_FORMAT; ObjType 2 selects no arm (an empty union body).
type ObjectFormatUnion struct {
ObjType ndr.DWORD `ndr:"switch"`
PQueueFormat *msmqmq.QUEUE_FORMAT `ndr:"case=1,unique"`
}
type PCTX\_OPENREMOTE\_HANDLE\_TYPE
PCTX_OPENREMOTE_HANDLE_TYPE is an RPC context handle: 20 bytes ([MS-RPCE] 2.3.2.2, [MS-MQMP]).
type PCTX_OPENREMOTE_HANDLE_TYPE [20]byte
type RPC\_INT\_XACT\_HANDLE
RPC_INT_XACT_HANDLE is an RPC context handle: 20 bytes ([MS-RPCE] 2.3.2.2, [MS-MQMP]).
type RPC_INT_XACT_HANDLE [20]byte
type RPC\_QUEUE\_HANDLE
RPC_QUEUE_HANDLE is an RPC context handle: 20 bytes ([MS-RPCE] 2.3.2.2, [MS-MQMP]).
type RPC_QUEUE_HANDLE [20]byte
type TRANSFER\_TYPE
TRANSFER_TYPE is an NDR enum, transmitted as a 16-bit value ([C706] 14.3.6, [MS-MQMP]).
type TRANSFER_TYPE uint16
const (
CACTB_SEND TRANSFER_TYPE = 0
CACTB_RECEIVE TRANSFER_TYPE = 1
CACTB_CREATECURSOR TRANSFER_TYPE = 2
)