windows-nt/Source/XPSP1/NT/shell/osshell/themes/inc/rpcasync.h
2020-09-26 16:20:57 +08:00

192 lines
3.8 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
Copyright (c) 1997 Microsoft Corporation
Module Name:
rpcasync.h
Abstract:
This module contains the RPC runtime APIs needed to use
[async] RPC features.
--*/
#ifndef __RPCASYNC_H__
#define __RPCASYNC_H__
#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;
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 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 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
) ;
//
// 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
) ;
//
// This stuff is in here so we don't break ole, stubs and the tests
// remove before we ship
//
#define RpcInitializeAsyncHandle RpcAsyncInitializeHandle
#define RpcRegisterAsyncInfo RpcAsyncRegisterInfo
#define RpcGetAsyncCallStatus RpcAsyncGetCallStatus
#define RpcCompleteAsyncCall RpcAsyncCompleteCall
#define RpcAbortAsyncCall RpcAsyncAbortCall
#define RpcCancelAsyncCall RpcAsyncCancelCall
#define I_RpcSetAsyncHandle I_RpcAsyncSetHandle
#define I_RpcAbortAsyncCall I_RpcAsyncAbortCall
#ifdef __cplusplus
}
#endif
#endif /* __RPCASYNC_H__ */