|
|
1.1 root 1: /*********************************************************/
2: /** Microsoft LAN Manager **/
3: /** Copyright(c) Microsoft Corp., 1987-1990 **/
4: /** **/
5: /** Prototypes for the RPC Runtime APIs. **/
6: /** **/
7: /*********************************************************/
8:
9: #ifndef __RPCBSE_H__
10: #define __RPCBSE_H__
11:
12:
13: #define IN
14: #define OUT
15: #define OPTIONAL
16:
17: typedef RPC_HANDLE handle_t;
18: typedef RPC_HANDLE PAPI * PRPC_HANDLE;
19: typedef char small;
20: typedef unsigned char byte;
21: typedef unsigned char boolean;
22:
23: typedef struct _RPC_VERSION {
24: unsigned short MajorVersion;
25: unsigned short MinorVersion;
26: } RPC_VERSION;
27:
28: #ifndef GUID_DEFINED
29: #define GUID_DEFINED
30: typedef struct _GUID {
31: unsigned long Data1;
32: unsigned short Data2;
33: unsigned short Data3;
34: unsigned char Data4[8];
35: } GUID;
36: #endif
37:
38: typedef struct _RPC_SYNTAX_IDENTIFIER {
39: GUID SyntaxGUID;
40: RPC_VERSION SyntaxVersion;
41: } RPC_SYNTAX_IDENTIFIER, PAPI * PRPC_SYNTAX_IDENTIFIER;
42:
43: typedef struct _RPC_PROTOCOL {
44: unsigned char MajorProtocol;
45: unsigned char MinorProtocol;
46: } RPC_PROTOCOL, PAPI * PRPC_PROTOCOL;
47:
48: #define RPC_STACK_TYPE_V1 0
49:
50: #define OSF_RPC_V20_VERS 5
51: #define OSF_RPC_V20_VERS_MINOR 0
52:
53: #define RPC_TRANSPORT_NAMEPIPE 1
54: #define RPC_TRANSPORT_LPC 2
55: #define RPC_TRANSPORT_TCP 3
56: #define RPC_TRANSPORT_DNET 4
57: #define RPC_TRANSPORT_NETBIOS 5
58:
59: // RPC protocol level security should be assigned number between 1 and 255.
60:
61: #define RPC_SECURITY_DS_HACK 250
62:
63: // Transport level security should be assigned numbers greater than 255.
64:
65: #define RPC_SECURITY_QOS 500
66:
67: typedef struct _RPC_PROTOCOL_STACK {
68: unsigned long StackType;
69: RPC_SYNTAX_IDENTIFIER InterfaceID;
70: unsigned long TransferSyntaxCount;
71: PRPC_SYNTAX_IDENTIFIER TransferSyntaxes;
72: unsigned long SecurityType;
73: unsigned long SecurityInfoLength;
74: unsigned char PAPI * SecurityInfo;
75: unsigned long RPCProtocolCount;
76: PRPC_PROTOCOL RPCProtocols;
77: unsigned long TransportType;
78: unsigned long TransportInfoLength;
79: unsigned char PAPI * TransportInfo;
80: } RPC_PROTOCOL_STACK, PAPI * PRPC_PROTOCOL_STACK;
81:
82: typedef struct {
83: unsigned char PAPI * UserName;
84: unsigned char PAPI * ComputerName;
85: unsigned short Privilege;
86: unsigned long AuthFlags;
87: } RPC_CLIENT_INFORMATION1, PAPI * PRPC_CLIENT_INFORMATION1;
88:
89: typedef struct {
90: unsigned int Count;
91: unsigned long TransportTypes[1];
92: } RPC_CONFIG_TRANSPORT, PAPI * PRPC_CONFIG_TRANSPORT;
93:
94: typedef struct{
95: unsigned long ConfigResourceWait;
96: } RPC_CONFIG_RESOURCE_WAIT, PAPI * PRPC_CONFIG_RESOURCE_WAIT;
97:
98: typedef struct {
99: RPC_HANDLE BindingHandle;
100: RPC_HANDLE PreviousCallHandle;
101: } RPC_CLIENT_CALL_INFORMATION, PAPI * PRPC_CLIENT_CALL_INFORMATION;
102:
103: typedef struct{
104: RPC_HANDLE PreviousCallHandle;
105: RPC_SYNTAX_IDENTIFIER InterfaceID;
106: RPC_SYNTAX_IDENTIFIER TransferSyntax;
107: unsigned long DataRepresentation;
108: } RPC_SERVER_CALL_INFORMATION, PAPI * PRPC_SERVER_CALL_INFORMATION;
109:
110: typedef struct{
111: RPC_SYNTAX_IDENTIFIER InterfaceID;
112: RPC_SYNTAX_IDENTIFIER TransferSyntax;
113: } RPC_CLIENT_BINDING_INFORMATION, PAPI * PRPC_CLIENT_BINDING_INFORMATION;
114:
115: typedef struct{
116: RPC_HANDLE ServerHandle;
117: RPC_HANDLE AddressHandle;
118: RPC_HANDLE InterfaceHandle;
119: } RPC_SERVER_BINDING_INFORMATION, PAPI * PRPC_SERVER_BINDING_INFORMATION;
120:
121: typedef struct {
122: RPC_HANDLE Handle;
123: unsigned long DataRepresentation;
124: void PAPI * Buffer;
125: unsigned int BufferLength;
126: unsigned int ProcNum;
127: PRPC_SYNTAX_IDENTIFIER TransferSyntax;
128: long reserved;
129: } RPC_MESSAGE, PAPI * PRPC_MESSAGE;
130:
131: typedef enum {
132: RpcStopWhenUnbind = 1,
133: RpcStopWhenCallsComplete,
134: RpcStopImmediate
135: } RPC_STOP_FLAG;
136:
137: typedef enum {
138: RpcMinimizeResourceUsage,
139: RpcNormalResourceUsage,
140: RpcMaximizeSpeed
141: } RPC_RESOURCE_USAGE;
142:
143: typedef enum {
144: RpcScopeLocal = 0,
145: RpcScopeDomain = 1
146: } RPC_SCOPE;
147:
148: typedef enum {
149: RpcConfigTransport = 1,
150: RpcConfigResourceWait = 2
151: } RPC_CONFIG;
152:
153: typedef enum {
154: RpcResponseTypeReply = 0,
155: RpcResponseTypeRemoteFault = 1
156: } RPC_RESPONSE_TYPES;
157:
158:
159: typedef void (PAPI * RPC_DISPATCH_FUNCTION) (IN OUT PRPC_MESSAGE Message);
160:
161: typedef struct {
162: unsigned int DispatchTableCount;
163: RPC_DISPATCH_FUNCTION PAPI * DispatchTable;
164: int Reserved;
165: } RPC_DISPATCH_TABLE, PAPI * PRPC_DISPATCH_TABLE;
166:
167: typedef enum _RPC_CLIENT_PRIORITY {
168: RpcPriorityReject = 0,
169: RpcPriorityNormal = 10,
170: RpcPriorityHigh = 20,
171: RpcPriorityCritical = 30
172: } RPC_CLIENT_PRIORITY;
173:
174: typedef
175: int /* RPC_CLIENT_PRIORITY -- BUGBUG: Glock 1.2 replace int with this*/
176: (PAPI * RPC_NEW_CLIENT_EVENT) (
177: IN RPC_HANDLE CallHandle
178: );
179:
180: typedef enum _RPC_THREAD_EVENT_TYPE {
181: RpcCreateThreadRequest,
182: RpcDeleteThreadNotify,
183: RpcInitializeThread,
184: RpcFinalizeThread
185: } RPC_THREAD_EVENT_TYPE;
186:
187: typedef
188: unsigned int
189: (PAPI * RPC_THREAD_EVENT) (
190: IN RPC_THREAD_EVENT_TYPE Event
191: );
192:
193: typedef
194: void
195: (PAPI * RPC_MANAGER_ERROR_EVENT) (
196: IN void PAPI * ErrorObject,
197: IN RPC_STATUS ErrorCode
198: );
199:
200: typedef struct {
201: RPC_HANDLE CallHandle;
202: unsigned int ProcNum;
203: } RPC_REPLY_FAILED_INFORMATION, PAPI * PRPC_REPLY_FAILED_INFORMATION;
204:
205: typedef struct {
206: unsigned int Count;
207: RPC_NEW_CLIENT_EVENT NewClientEvent;
208: RPC_THREAD_EVENT ThreadEvent;
209: RPC_MANAGER_ERROR_EVENT ManagerErrorEvent;
210: } RPC_EVENT_HANDLERS, PAPI * PRPC_EVENT_HANDLERS;
211:
212: typedef
213: void
214: (PAPI * PRPC_RUNDOWN) (
215: void PAPI * AssociationContext
216: );
217:
218:
219: /*** Server API's ***/
220:
221: RPC_STATUS RPC_ENTRY
222: RpcCreateServer (
223: IN PRPC_EVENT_HANDLERS EventHandlers OPTIONAL,
224: OUT PRPC_HANDLE ServerHandle
225: );
226:
227: RPC_STATUS RPC_ENTRY
228: RpcDeleteServer (
229: IN RPC_HANDLE ServerHandle,
230: IN RPC_STOP_FLAG StopFlag
231: );
232:
233: #define RPC_ADDRESS_AVOID_DEADLOCK 1
234:
235: RPC_STATUS RPC_ENTRY
236: RpcAddAddress (
237: IN RPC_HANDLE ServerHandle,
238: IN PRPC_PROTOCOL_STACK RequestedAddress,
239: IN unsigned int AddressFlags,
240: OUT PRPC_HANDLE AddressHandle,
241: IN void PAPI * SecurityDescriptor,
242: IN RPC_RESOURCE_USAGE ResourceUsage,
243: IN unsigned long Timeout OPTIONAL
244: );
245:
246: RPC_STATUS RPC_ENTRY
247: RpcRemoveAddress (
248: IN RPC_HANDLE AddressHandle,
249: IN RPC_STOP_FLAG StopFlag
250: );
251:
252: RPC_STATUS RPC_ENTRY
253: RpcAddInterface (
254: IN RPC_HANDLE ServerHandle,
255: IN PRPC_PROTOCOL_STACK ProtocolStack,
256: OUT PRPC_HANDLE InterfaceHandle,
257: IN void PAPI * SecurityDescriptor,
258: IN PRPC_DISPATCH_TABLE DispatchTable
259: );
260:
261: RPC_STATUS RPC_ENTRY
262: RpcRemoveInterface (
263: IN RPC_HANDLE InterfaceHandle,
264: IN RPC_STOP_FLAG StopFlag
265: );
266:
267: RPC_STATUS RPC_ENTRY
268: RpcMonitorAssociation (
269: IN RPC_HANDLE Handle,
270: IN PRPC_RUNDOWN RundownRoutine,
271: IN void *pContext
272: );
273:
274: RPC_STATUS RPC_ENTRY
275: RpcStopMonitorAssociation (
276: IN RPC_HANDLE Handle
277: );
278:
279:
280: RPC_STATUS RPC_ENTRY
281: RpcExport (
282: IN RPC_HANDLE ExportHandle,
283: IN RPC_SCOPE Scope,
284: IN PRPC_PROTOCOL_STACK ProtocolStack
285: );
286:
287:
288: RPC_STATUS RPC_ENTRY
289: RpcWithdraw (
290: IN RPC_HANDLE WithdrawHandle,
291: IN PRPC_PROTOCOL_STACK ProtocolStack
292: );
293:
294: RPC_STATUS RPC_ENTRY
295: RpcQueryClient (
296: IN RPC_HANDLE Handle,
297: IN unsigned int ClientInformationLevel,
298: OUT void PAPI * ClientInformation,
299: IN OUT unsigned int PAPI * ClientInformationLength
300: );
301:
302: RPC_HANDLE RPC_ENTRY
303: RpcGetCurrentCallHandle(
304: OUT PRPC_SERVER_CALL_INFORMATION CallInformation OPTIONAL
305: );
306:
307: RPC_STATUS RPC_ENTRY
308: RpcGetAssociationContext (
309: OUT void PAPI * PAPI * AssociationContext
310: );
311:
312: RPC_STATUS RPC_ENTRY
313: RpcSetAssociationContext (
314: OUT void PAPI * AssociationContext
315: );
316:
317:
318: /*** The following are client side API's ***/
319:
320: RPC_STATUS RPC_ENTRY
321: RpcImport (
322: IN unsigned char PAPI * DomainName,
323: IN RPC_SCOPE Scope,
324: IN PRPC_PROTOCOL_STACK ProtocolStack,
325: IN PRPC_DISPATCH_TABLE CallBackTable OPTIONAL,
326: OUT PRPC_HANDLE BindingHandle
327: );
328:
329: RPC_STATUS RPC_ENTRY
330: RpcBindToInterface (
331: IN PRPC_PROTOCOL_STACK InterfaceInstance,
332: IN PRPC_DISPATCH_TABLE CallBackTable OPTIONAL,
333: OUT PRPC_HANDLE BindingHandle
334: );
335:
336: RPC_STATUS RPC_ENTRY
337: RpcUnbind (
338: IN RPC_HANDLE BindingHandle
339: );
340:
341: RPC_STATUS RPC_ENTRY
342: RpcDuplicateBinding (
343: IN RPC_HANDLE Binding,
344: OUT PRPC_HANDLE NewBinding
345: );
346:
347:
348: RPC_STATUS RPC_ENTRY
349: RpcQueryCall (
350: IN RPC_HANDLE CallHandle,
351: OUT void PAPI * CallInformation,
352: IN OUT unsigned int PAPI * CallInformationLength
353: );
354:
355: RPC_STATUS RPC_ENTRY
356: RpcQueryBinding (
357: IN RPC_HANDLE Handle,
358: OUT void PAPI * BindingInformation,
359: IN OUT unsigned int PAPI * BindingInformationLength
360: );
361:
362: RPC_STATUS RPC_ENTRY
363: RpcQueryProtocolStack (
364: IN RPC_HANDLE Handle,
365: OUT PRPC_PROTOCOL_STACK ProtocolStack,
366: IN OUT unsigned int PAPI * ProtocolStackLength
367: );
368:
369: RPC_STATUS RPC_ENTRY
370: RpcQueryConfig (
371: IN RPC_CONFIG ConfigType,
372: OUT void PAPI * ConfigInformation,
373: IN OUT unsigned int PAPI * ConfigInformationLength
374: );
375:
376: RPC_STATUS RPC_ENTRY
377: RpcSetConfig (
378: IN RPC_CONFIG ConfigType,
379: OUT void PAPI * ConfigInformation
380: );
381:
382: RPC_STATUS RPC_ENTRY
383: RpcGetBuffer (
384: IN OUT PRPC_MESSAGE Message
385: );
386:
387: RPC_STATUS RPC_ENTRY
388: RpcFreeBuffer (
389: IN OUT PRPC_MESSAGE Message
390: );
391:
392: RPC_STATUS RPC_ENTRY
393: RpcSendReceive (
394: IN OUT PRPC_MESSAGE Message
395: );
396:
397: void RPC_ENTRY
398: RpcRaiseException (
399: RPC_STATUS exception
400: );
401:
402: #endif /* __RPCBSE_H__ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.