| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- #ifndef __rpc_h
- #define __rpc_h
- #ifndef CONFIG
- #define CONFIG "config.h"
- #endif // CONFIG
- #include CONFIG
- #include "types.h"
- typedef struct {
- BYTE VersionMajor;
- BYTE VersionMinor;
- BYTE PacketType;
- BYTE PacketFlags;
- DWORD DataRepresentation;
- WORD FragLength;
- WORD AuthLength;
- DWORD CallId;
- } /*__packed*/ RPC_HEADER;
- typedef struct {
- WORD MaxXmitFrag;
- WORD MaxRecvFrag;
- DWORD AssocGroup;
- DWORD NumCtxItems;
- struct {
- WORD ContextId;
- WORD NumTransItems;
- GUID InterfaceUUID;
- WORD InterfaceVerMajor;
- WORD InterfaceVerMinor;
- GUID TransferSyntax;
- DWORD SyntaxVersion;
- } CtxItems[1];
- } /*__packed*/ RPC_BIND_REQUEST;
- typedef struct {
- WORD MaxXmitFrag;
- WORD MaxRecvFrag;
- DWORD AssocGroup;
- WORD SecondaryAddressLength;
- BYTE SecondaryAddress[6];
- DWORD NumResults;
- struct {
- WORD AckResult;
- WORD AckReason;
- GUID TransferSyntax;
- DWORD SyntaxVersion;
- } Results[0];
- } /*__packed*/ RPC_BIND_RESPONSE;
- typedef struct {
- DWORD AllocHint;
- WORD ContextId;
- WORD Opnum;
- struct {
- DWORD DataLength;
- DWORD DataSizeIs;
- } Ndr;
- BYTE Data[0];
- } /*__packed*/ RPC_REQUEST;
- typedef struct {
- DWORD AllocHint;
- WORD ContextId;
- BYTE CancelCount;
- BYTE Pad1;
- struct {
- DWORD DataLength;
- DWORD DataSizeIs1;
- DWORD DataSizeIs2;
- } Ndr;
- BYTE Data[0];
- } /*__packed*/ RPC_RESPONSE;
- typedef struct {
- DWORD AllocHint;
- WORD ContextId;
- WORD Opnum;
- union {
- struct {
- DWORD DataLength;
- DWORD DataSizeIs;
- BYTE Data[0];
- } Ndr;
- struct {
- uint64_t DataLength;
- uint64_t DataSizeIs;
- BYTE Data[0];
- } Ndr64;
- };
- } /*__packed*/ RPC_REQUEST64;
- typedef struct {
- DWORD AllocHint;
- WORD ContextId;
- BYTE CancelCount;
- BYTE Pad1;
- union {
- struct {
- DWORD DataLength;
- DWORD DataSizeMax;
- union
- {
- DWORD DataSizeIs;
- DWORD status;
- };
- BYTE Data[0];
- } Ndr;
- struct {
- uint64_t DataLength;
- uint64_t DataSizeMax;
- union
- {
- uint64_t DataSizeIs;
- DWORD status;
- };
- BYTE Data[0];
- } Ndr64;
- };
- } /*__packed*/ RPC_RESPONSE64;
- typedef SOCKET RpcCtx;
- typedef int RpcStatus;
- #define INVALID_NDR_CTX ((WORD)~0)
- #define RPC_BIND_ACCEPT (0)
- #define RPC_BIND_NACK (LE16(2))
- #define RPC_BIND_ACK (LE16(3))
- #define RPC_SYNTAX_UNSUPPORTED (LE16(2))
- #define RPC_ABSTRACTSYNTAX_UNSUPPORTED (LE16(1))
- #define RPC_BTFN_SEC_CONTEXT_MULTIPLEX (LE16(1))
- #define RPC_BTFN_KEEP_ORPHAN (LE16(2))
- #define INVALID_RPCCTX INVALID_SOCKET
- #define closeRpc socketclose
- #define RPC_PT_REQUEST 0
- #define RPC_PT_RESPONSE 2
- #define RPC_PT_BIND_REQ 11
- #define RPC_PT_BIND_ACK 12
- #define RPC_PT_ALTERCONTEXT_REQ 14
- #define RPC_PT_ALTERCONTEXT_ACK 15
- #define RPC_PF_FIRST 1
- #define RPC_PF_LAST 2
- #define RPC_PF_CANCEL_PENDING 4
- #define RPC_PF_RESERVED 8
- #define RPC_PF_MULTIPLEX 16
- #define RPC_PF_NOT_EXEC 32
- #define RPC_PF_MAYBE 64
- #define RPC_PF_OBJECT 128
- typedef union _RPC_FLAGS
- {
- DWORD mask;
- struct {
- uint32_t FlagsBTFN : 16;
- BOOL HasNDR32 : 1;
- BOOL HasNDR64 : 1;
- BOOL HasBTFN : 1;
- };
- } RPC_FLAGS, *PRPC_FLAGS;
- extern RPC_FLAGS RpcFlags;
- void rpcServer(const RpcCtx socket, const DWORD RpcAssocGroup, const char* const ipstr);
- RpcStatus rpcBindClient(const RpcCtx sock, const int_fast8_t verbose);
- RpcStatus rpcSendRequest(const RpcCtx socket, const BYTE *const KmsRequest, const size_t requestSize, BYTE **KmsResponse, size_t *const responseSize);
- #endif // __rpc_h
|