home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 May / PCFMay2001.iso / Xenon / C++ / FreeCommandLineTools.exe / Include / rpcasync.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-01-31  |  3.8 KB  |  200 lines

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