Windows NT 4.0 source code leak
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

/*++
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__