home *** CD-ROM | disk | FTP | other *** search
- /*++
-
- Copyright (c) 1997-1999 Microsoft Corporation
-
- Module Name:
-
- rpcasync.h
-
- Abstract:
-
- This module contains the RPC runtime APIs needed to use
- [async] RPC features.
-
- --*/
-
- #ifndef __RPCASYNC_H__
- #pragma option push -b -a8 -pc -A- /*P_O_Push*/
- #define __RPCASYNC_H__
-
- #if _MSC_VER > 1000
- #pragma once
- #endif
-
- #if defined(__RPC_WIN64__)
- #include <pshpack8.h>
- #endif
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- #define RPC_ASYNC_VERSION_1_0 sizeof(RPC_ASYNC_STATE)
-
- typedef
- enum _RPC_NOTIFICATION_TYPES
- {
- RpcNotificationTypeNone,
- RpcNotificationTypeEvent,
- RpcNotificationTypeApc,
- RpcNotificationTypeIoc,
- RpcNotificationTypeHwnd,
- RpcNotificationTypeCallback
- } RPC_NOTIFICATION_TYPES;
-
- typedef
- enum _RPC_ASYNC_EVENT {
- RpcCallComplete,
- RpcSendComplete,
- RpcReceiveComplete
- } RPC_ASYNC_EVENT;
-
- struct _RPC_ASYNC_STATE;
-
- typedef void RPC_ENTRY
- RPCNOTIFICATION_ROUTINE (
- struct _RPC_ASYNC_STATE *pAsync,
- void *Context,
- RPC_ASYNC_EVENT Event);
- typedef RPCNOTIFICATION_ROUTINE *PFN_RPCNOTIFICATION_ROUTINE;
-
- typedef struct _RPC_ASYNC_STATE {
- unsigned int Size; // size of this structure
- unsigned long Signature;
- long Lock;
- unsigned long Flags;
- void *StubInfo;
- void *UserInfo;
- void *RuntimeInfo;
- RPC_ASYNC_EVENT Event;
-
- RPC_NOTIFICATION_TYPES NotificationType;
- union {
- //
- // Notification by APC
- //
- struct {
- PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine;
- HANDLE hThread;
- } APC;
-
- //
- // Notification by IO completion port
- //
- struct {
- HANDLE hIOPort;
- DWORD dwNumberOfBytesTransferred;
- DWORD_PTR dwCompletionKey;
- LPOVERLAPPED lpOverlapped;
- } IOC;
-
- //
- // Notification by window message
- //
- struct {
- HWND hWnd;
- UINT Msg;
- } HWND;
-
-
- //
- // Notification by event
- //
- HANDLE hEvent;
-
- //
- // Notification by callback function
- //
- // This option is available only to OLE
- //
- PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine;
- } u;
-
- LONG_PTR Reserved[4];
- } RPC_ASYNC_STATE, *PRPC_ASYNC_STATE;
-
- // Possible values for Flags
- #define RPC_C_NOTIFY_ON_SEND_COMPLETE 0x1
- #define RPC_C_INFINITE_TIMEOUT INFINITE
-
- #define RpcAsyncGetCallHandle(pAsync) (((PRPC_ASYNC_STATE) pAsync)->RuntimeInfo)
-
- RPCRTAPI
- RPC_STATUS
- RPC_ENTRY
- RpcAsyncInitializeHandle (
- PRPC_ASYNC_STATE pAsync,
- unsigned int Size
- );
-
- RPCRTAPI
- RPC_STATUS
- RPC_ENTRY
- RpcAsyncRegisterInfo (
- PRPC_ASYNC_STATE pAsync
- ) ;
-
- RPCRTAPI
- RPC_STATUS
- RPC_ENTRY
- RpcAsyncGetCallStatus (
- PRPC_ASYNC_STATE pAsync
- ) ;
-
- RPCRTAPI
- RPC_STATUS
- RPC_ENTRY
- RpcAsyncCompleteCall (
- PRPC_ASYNC_STATE pAsync,
- void *Reply
- ) ;
-
- RPCRTAPI
- RPC_STATUS
- RPC_ENTRY
- RpcAsyncAbortCall (
- PRPC_ASYNC_STATE pAsync,
- unsigned long ExceptionCode
- ) ;
-
- RPCRTAPI
- RPC_STATUS
- RPC_ENTRY
- RpcAsyncCancelCall (
- IN PRPC_ASYNC_STATE pAsync,
- IN BOOL fAbort
- ) ;
-
- RPCRTAPI
- RPC_STATUS
- RPC_ENTRY
- RpcAsyncCleanupThread (
- IN DWORD dwTimeout
- );
- //
- // Internal APIs
- //
- RPC_STATUS RPC_ENTRY
- I_RpcAsyncSetHandle (
- IN PRPC_MESSAGE Message,
- IN PRPC_ASYNC_STATE pAsync
- );
-
- RPC_STATUS RPC_ENTRY
- I_RpcAsyncAbortCall (
- IN PRPC_ASYNC_STATE pAsync,
- IN unsigned long ExceptionCode
- ) ;
-
- #ifdef __cplusplus
- }
- #endif
-
- #if defined(__RPC_WIN64__)
- #include <poppack.h>
- #endif
-
- #pragma option pop /*P_O_Pop*/
- #endif /* __RPCASYNC_H__ */
-
-