home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 May / PCP163A.iso / Runimage / Cbuilder4 / Include / RPCASYNC.H < prev    next >
Encoding:
C/C++ Source or Header  |  1999-01-26  |  3.6 KB  |  180 lines

  1. /*++
  2.  
  3. Copyright 1997 - 1998 Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     rpcasync.h
  8.  
  9. Abstract:
  10.  
  11.     This module contains the RPC runtime APIs needed to use
  12.     [async] RPC features.
  13.  
  14. --*/
  15.  
  16. #ifndef __RPCASYNC_H__
  17. #pragma option push -b -a8 -pc -A- /*P_O_Push_S*/
  18. #define __RPCASYNC_H__
  19.  
  20. #ifdef __cplusplus
  21. extern "C" {
  22. #endif
  23.  
  24. #define RPC_ASYNC_VERSION_1_0     sizeof(RPC_ASYNC_STATE)
  25.  
  26. typedef
  27. enum _RPC_NOTIFICATION_TYPES
  28. {
  29.     RpcNotificationTypeNone,
  30.     RpcNotificationTypeEvent,
  31.     RpcNotificationTypeApc, 
  32.     RpcNotificationTypeIoc,
  33.     RpcNotificationTypeHwnd,
  34.     RpcNotificationTypeCallback
  35. } RPC_NOTIFICATION_TYPES;
  36.  
  37. typedef
  38. enum _RPC_ASYNC_EVENT {
  39.     RpcCallComplete,
  40.     RpcSendComplete,
  41.     RpcReceiveComplete
  42.     } RPC_ASYNC_EVENT;
  43.  
  44. typedef void RPC_ENTRY
  45. RPCNOTIFICATION_ROUTINE (
  46.                   struct _RPC_ASYNC_STATE *pAsync,
  47.                   void *Context,                              
  48.                   RPC_ASYNC_EVENT Event);
  49. typedef RPCNOTIFICATION_ROUTINE *PFN_RPCNOTIFICATION_ROUTINE;
  50.     
  51. typedef struct _RPC_ASYNC_STATE {
  52.     unsigned int    Size; // size of this structure
  53.     unsigned long   Signature;
  54.     long   Lock;
  55.     unsigned long   Flags;
  56.     void           *StubInfo;
  57.     void           *UserInfo;
  58.     void           *RuntimeInfo;
  59.     RPC_ASYNC_EVENT Event;
  60.  
  61.     RPC_NOTIFICATION_TYPES NotificationType;
  62.     union {
  63.         //
  64.         // Notification by APC
  65.         //
  66.         struct {
  67.             PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine;
  68.             HANDLE hThread;
  69.             } APC;
  70.  
  71.         //
  72.         // Notification by IO completion port
  73.         //
  74.         struct {
  75.             HANDLE hIOPort;
  76.             DWORD dwNumberOfBytesTransferred;
  77.             DWORD dwCompletionKey;
  78.             LPOVERLAPPED lpOverlapped;
  79.             } IOC;
  80.  
  81.         //
  82.         // Notification by window message
  83.         //
  84.         struct {
  85.             HWND hWnd;
  86.             UINT Msg;
  87.             } HWND;
  88.  
  89.  
  90.         //
  91.         // Notification by event
  92.         //
  93.         HANDLE hEvent;
  94.  
  95.         //
  96.         // Notification by callback function
  97.         //
  98.         // This option is available only to OLE
  99.         //
  100.         PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine;
  101.         } u;
  102.  
  103.     long Reserved[4]; 
  104.     } RPC_ASYNC_STATE, *PRPC_ASYNC_STATE;
  105.  
  106. // Possible values for Flags
  107. #define RPC_C_NOTIFY_ON_SEND_COMPLETE      0x1
  108. #define RPC_C_INFINITE_TIMEOUT             INFINITE
  109.  
  110. #define RpcAsyncGetCallHandle(pAsync) (((PRPC_ASYNC_STATE) pAsync)->RuntimeInfo)
  111.  
  112. RPCRTAPI
  113. RPC_STATUS
  114. RPC_ENTRY
  115. RpcAsyncInitializeHandle (
  116.     PRPC_ASYNC_STATE pAsync,
  117.     unsigned int     Size
  118.     );
  119.                       
  120. RPCRTAPI
  121. RPC_STATUS
  122. RPC_ENTRY
  123. RpcAsyncRegisterInfo (
  124.     PRPC_ASYNC_STATE pAsync
  125.     ) ;
  126.  
  127. RPCRTAPI
  128. RPC_STATUS
  129. RPC_ENTRY
  130. RpcAsyncGetCallStatus (
  131.     PRPC_ASYNC_STATE pAsync
  132.     ) ;
  133.  
  134. RPCRTAPI
  135. RPC_STATUS
  136. RPC_ENTRY
  137. RpcAsyncCompleteCall (
  138.     PRPC_ASYNC_STATE pAsync,
  139.     void *Reply
  140.     ) ;
  141.  
  142. RPCRTAPI
  143. RPC_STATUS
  144. RPC_ENTRY
  145. RpcAsyncAbortCall (
  146.     PRPC_ASYNC_STATE pAsync,
  147.     unsigned long ExceptionCode
  148.     ) ;
  149.  
  150. RPCRTAPI
  151. RPC_STATUS
  152. RPC_ENTRY
  153. RpcAsyncCancelCall (
  154.     IN PRPC_ASYNC_STATE pAsync,
  155.     IN BOOL fAbort
  156.     ) ;
  157.  
  158. //
  159. // Internal APIs
  160. //
  161. RPC_STATUS RPC_ENTRY
  162. I_RpcAsyncSetHandle (
  163.     IN  PRPC_MESSAGE Message,
  164.     IN  PRPC_ASYNC_STATE pAsync
  165.     );
  166.  
  167. RPC_STATUS RPC_ENTRY
  168. I_RpcAsyncAbortCall (
  169.     IN PRPC_ASYNC_STATE pAsync,
  170.     IN unsigned long ExceptionCode
  171.     ) ;
  172.  
  173. #ifdef __cplusplus
  174. }
  175. #endif
  176.  
  177. #pragma option pop /*P_O_Pop*/
  178. #endif /* __RPCASYNC_H__ */
  179.  
  180.