mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
235 lines
5.3 KiB
235 lines
5.3 KiB
/*++
|
|
|
|
Copyright (c) 1992 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
wmsgpack.hxx
|
|
|
|
Abstract:
|
|
|
|
This file contains the definitions of the packet formats used by
|
|
RPC on LPC.
|
|
|
|
Author:
|
|
|
|
Steven Zeck (stevez) 11/12/91
|
|
|
|
Revision History:
|
|
|
|
15-Dec-1992 mikemon
|
|
|
|
Rewrote the majority of the code.
|
|
|
|
... implemented WMSG protocol
|
|
|
|
05-15-96 merged LRPC / WMSG into a single protocol
|
|
|
|
--*/
|
|
|
|
#ifndef __WMSGPACK_HXX__
|
|
#define __WMSGPACK_HXX__
|
|
|
|
#define WMSG_DIRECTORY_NAME L##"\\RPC Control\\"
|
|
#define MINIMUM_PARTIAL_BUFFLEN 10240
|
|
#define PORT_NAME_LEN 64
|
|
#define WMSG_TIMEOUT 100
|
|
#define WMSG_MAGIC_VALUE 0xBABE
|
|
|
|
typedef struct _WMSG_BIND_EXCHANGE
|
|
{
|
|
INT ConnectType ;
|
|
PVOID pAssoc ;
|
|
char szPortName[PORT_NAME_LEN] ;
|
|
RPC_SYNTAX_IDENTIFIER InterfaceId;
|
|
RPC_SYNTAX_IDENTIFIER TransferSyntax;
|
|
RPC_STATUS RpcStatus;
|
|
unsigned char PresentationContext;
|
|
unsigned char fBindBack ;
|
|
unsigned char Pad[2];
|
|
} WMSG_BIND_EXCHANGE;
|
|
|
|
|
|
// message types
|
|
#define WMSG_MSG_BIND 0
|
|
#define WMSG_MSG_REQUEST 1
|
|
#define WMSG_MSG_RESPONSE 2
|
|
#define WMSG_MSG_CALLBACK 3
|
|
#define WMSG_MSG_FAULT 4
|
|
#define WMSG_MSG_CLOSE 5
|
|
#define WMSG_MSG_ACK 6
|
|
#define WMSG_BIND_ACK 7
|
|
#define WMSG_MSG_COPY 8
|
|
#define WMSG_MSG_PUSH 9
|
|
#define WMSG_MSG_BIND_BACK 11
|
|
#define WMSG_LRPC_REQUEST 12
|
|
#define WMSG_PARTIAL_REQUEST 13
|
|
#define WMSG_PARTIAL_OUT 14
|
|
|
|
#define MAX_WMSG_MSG 15
|
|
|
|
// connect types
|
|
#define WMSG_CONNECT_REQUEST 0
|
|
#define WMSG_CONNECT_RESPONSE 1
|
|
|
|
|
|
// flags
|
|
#define MESSAGE_SOURCE_SERVER 0x01
|
|
#define MESSAGE_SOURCE_CLIENT 0x02
|
|
|
|
typedef struct _WMSG_BIND_MESSAGE
|
|
{
|
|
PORT_MESSAGE LpcHeader;
|
|
unsigned char MessageType;
|
|
unsigned char Pad[3];
|
|
WMSG_BIND_EXCHANGE BindExchange;
|
|
} WMSG_BIND_MESSAGE;
|
|
|
|
typedef struct _WMSG_BIND_BACK_MESSAGE
|
|
{
|
|
PORT_MESSAGE LpcHeader;
|
|
unsigned char MessageType;
|
|
unsigned char Pad[3];
|
|
PVOID pAssoc ;
|
|
char szPortName[PORT_NAME_LEN] ;
|
|
} WMSG_BIND_BACK_MESSAGE;
|
|
|
|
// buffer flags
|
|
#define WMSG_BUFFER_IMMEDIATE 0x01
|
|
#define WMSG_BUFFER_REQUEST 0x02
|
|
#define WMSG_BUFFER_SERVER 0x04
|
|
|
|
// dispatch flags
|
|
#define DISPATCH_INPUT_SYNC 0x08
|
|
#define DISPATCH_SYNC 0x10
|
|
#define DISPATCH_ASYNC 0x20
|
|
|
|
// misc flags
|
|
#define WMSG_SYNC_CLIENT 0x40
|
|
#define WMSG_BUFFER_PARTIAL 0x80
|
|
|
|
typedef struct _WMSG_RPC_HEADER
|
|
{
|
|
unsigned char MessageType;
|
|
unsigned char Flags ;
|
|
unsigned char PresentationContext;
|
|
unsigned char ObjectUuidFlag;
|
|
unsigned short ProcedureNumber;
|
|
unsigned short ConnectionKey ;
|
|
UUID ObjectUuid;
|
|
} WMSG_RPC_HEADER;
|
|
|
|
typedef struct _WMSG_SERVER_BUFFER
|
|
{
|
|
unsigned int Length;
|
|
unsigned int Buffer;
|
|
} WMSG_SERVER_BUFFER;
|
|
|
|
#define MAXIMUM_MESSAGE_BUFFER \
|
|
(PORT_MAXIMUM_MESSAGE_LENGTH - sizeof(PORT_MESSAGE) \
|
|
- sizeof(WMSG_RPC_HEADER))
|
|
|
|
typedef struct _WMSG_CONNECT_MESSAGE
|
|
{
|
|
PORT_MESSAGE LpcHeader;
|
|
WMSG_BIND_EXCHANGE BindExchange;
|
|
} WMSG_CONNECT_MESSAGE;
|
|
|
|
typedef struct _WMSG_RPC_MESSAGE
|
|
{
|
|
PORT_MESSAGE LpcHeader;
|
|
WMSG_RPC_HEADER RpcHeader;
|
|
union
|
|
{
|
|
unsigned char Buffer[MAXIMUM_MESSAGE_BUFFER];
|
|
PORT_DATA_INFORMATION Request;
|
|
WMSG_SERVER_BUFFER Server;
|
|
};
|
|
} WMSG_RPC_MESSAGE;
|
|
|
|
typedef struct _WMSG_FAULT_MESSAGE
|
|
{
|
|
PORT_MESSAGE LpcHeader;
|
|
WMSG_RPC_HEADER RpcHeader ;
|
|
RPC_STATUS RpcStatus;
|
|
} WMSG_FAULT_MESSAGE;
|
|
|
|
typedef struct _WMSG_CLOSE_MESSAGE
|
|
{
|
|
PORT_MESSAGE LpcHeader;
|
|
unsigned char MessageType;
|
|
unsigned char Pad[3];
|
|
} WMSG_CLOSE_MESSAGE;
|
|
|
|
typedef struct _WMSG_PUSH_MESSAGE
|
|
{
|
|
PORT_MESSAGE LpcHeader;
|
|
WMSG_RPC_HEADER RpcHeader;
|
|
PORT_DATA_INFORMATION Response;
|
|
RPC_STATUS RpcStatus;
|
|
} WMSG_PUSH_MESSAGE;
|
|
|
|
typedef struct _WMSG_RESPONSE_MESSAGE
|
|
{
|
|
PORT_MESSAGE LpcHeader;
|
|
WMSG_RPC_HEADER RpcHeader;
|
|
PORT_DATA_INFORMATION Response;
|
|
} WMSG_RESPONSE_MESSAGE ;
|
|
|
|
#define ACK_BUFFER_COMPLETE 0x01
|
|
|
|
typedef struct _WMSG_ACK_MESSAGE
|
|
{
|
|
PORT_MESSAGE LpcHeader;
|
|
unsigned char MessageType;
|
|
unsigned char Pad ;
|
|
short ConnectionKey ;
|
|
RPC_STATUS RpcStatus;
|
|
int ValidDataSize ;
|
|
int Flags ;
|
|
} WMSG_ACK_MESSAGE;
|
|
|
|
typedef struct _WMSG_COPY_MESSAGE
|
|
{
|
|
PORT_MESSAGE LpcHeader;
|
|
WMSG_RPC_HEADER RpcHeader ;
|
|
PORT_DATA_INFORMATION Request;
|
|
WMSG_SERVER_BUFFER Server;
|
|
RPC_STATUS RpcStatus;
|
|
int IsPartial ;
|
|
} WMSG_COPY_MESSAGE;
|
|
|
|
typedef struct _WMSG_PARTIAL_MESSAGE
|
|
{
|
|
PORT_MESSAGE LpcHeader;
|
|
WMSG_RPC_HEADER RpcHeader ;
|
|
PORT_DATA_INFORMATION Request;
|
|
RPC_STATUS RpcStatus;
|
|
int IsPartial ;
|
|
} WMSG_PARTIAL_MESSAGE;
|
|
|
|
typedef union _WMSG_MESSAGE
|
|
{
|
|
WMSG_CONNECT_MESSAGE Connect;
|
|
WMSG_BIND_MESSAGE Bind;
|
|
WMSG_RPC_MESSAGE Rpc;
|
|
WMSG_FAULT_MESSAGE Fault;
|
|
WMSG_CLOSE_MESSAGE Close;
|
|
PORT_MESSAGE LpcHeader;
|
|
WMSG_RESPONSE_MESSAGE Response ;
|
|
WMSG_ACK_MESSAGE Ack ;
|
|
WMSG_PUSH_MESSAGE Push ;
|
|
WMSG_BIND_BACK_MESSAGE BindBack ;
|
|
WMSG_PARTIAL_MESSAGE Partial ;
|
|
} WMSG_MESSAGE;
|
|
|
|
RPC_STATUS
|
|
WMSGMapRpcStatus (
|
|
IN RPC_STATUS RpcStatus
|
|
);
|
|
|
|
void
|
|
ShutdownLrpcClient (
|
|
) ;
|
|
|
|
#endif // __WMSGPACK_HXX__
|