4 the base dcerpc packet definitions - not traditionally coded as IDL,
5 but given that pidl can handle it nicely it simplifies things a lot
18 uint8 num_transfer_syntaxes;
19 dcerpc_syntax_id abstract_syntax;
20 dcerpc_syntax_id transfer_syntaxes[num_transfer_syntaxes];
26 uint32 assoc_group_id;
28 dcerpc_ctx_list ctx_list[num_contexts];
29 [flag(NDR_ALIGN8)] DATA_BLOB _pad;
30 [flag(NDR_REMAINING)] DATA_BLOB auth_verifier;
37 [flag(NDR_ALIGN8)] DATA_BLOB _pad;
38 [flag(NDR_REMAINING)] DATA_BLOB stub_and_verifier;
44 dcerpc_syntax_id syntax;
50 uint32 assoc_group_id;
51 ascstr3 secondary_address;
52 [flag(NDR_ALIGN4)] DATA_BLOB _pad1;
54 dcerpc_ack_ctx ctx_list[num_results];
55 [flag(NDR_ALIGN8)] DATA_BLOB _pad2;
56 [flag(NDR_REMAINING)] DATA_BLOB auth_verifier;
62 uint32 versions[num_versions];
69 [flag(NDR_ALIGN8)] DATA_BLOB _pad;
70 [flag(NDR_REMAINING)] DATA_BLOB stub_and_verifier;
79 DCERPC_PKT_RESPONSE=2,
82 DCERPC_PKT_BIND_ACK=12,
83 DCERPC_PKT_BIND_NAK=13
86 typedef [nodiscriminant] union {
87 [case(DCERPC_PKT_REQUEST)] dcerpc_request request;
88 [case(DCERPC_PKT_RESPONSE)] dcerpc_response response;
89 [case(DCERPC_PKT_BIND)] dcerpc_bind bind;
90 [case(DCERPC_PKT_BIND_ACK)] dcerpc_bind_ack bind_ack;
91 [case(DCERPC_PKT_FAULT)] dcerpc_fault fault;
95 /* pfc_flags values */
96 const uint8 DCERPC_PFC_FLAG_FIRST = 0x01;
97 const uint8 DCERPC_PFC_FLAG_LAST = 0x02;
98 const uint8 DCERPC_PFC_FLAG_NOCALL = 0x20;
100 typedef [public] struct {
101 uint8 rpc_vers; /* RPC version */
102 uint8 rpc_vers_minor; /* Minor version */
103 uint8 ptype; /* Packet type */
104 uint8 pfc_flags; /* Fragmentation flags */
105 uint8 drep[4]; /* NDR data representation */
106 uint16 frag_length; /* Total length of fragment */
107 uint16 auth_length; /* authenticator length */
108 uint32 call_id; /* Call identifier */
110 [switch_is(ptype)] dcerpc_payload u;