//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1997 - 1999 // // File: async.cxx // //-------------------------------------------------------------------------- #include RPC_STATUS RPC_ENTRY RpcAsyncRegisterInfo ( IN PRPC_ASYNC_STATE pAsync ) /*++ Routine Description: Obsolete function - just an entry point. Return Value: --*/ { #if !defined(_M_IA64) return RPC_S_OK ; #else return RPC_S_CANNOT_SUPPORT; #endif } RPC_STATUS RPC_ENTRY RpcAsyncCancelCall ( IN PRPC_ASYNC_STATE pAsync, IN BOOL fAbort ) /*++ Function Name:RpcAsyncCancelCall Parameters: Description: Returns: --*/ { MESSAGE_OBJECT *MObject = (MESSAGE_OBJECT *) pAsync->RuntimeInfo; if (!ThreadSelf()) { return RPC_S_OUT_OF_MEMORY; } if (MObject) { if (MObject->InvalidHandle(CALL_TYPE)) { return (RPC_S_INVALID_BINDING); } return ((CALL *) MObject)->CancelAsyncCall(fAbort); } return (RPC_S_INVALID_BINDING); } RPC_STATUS RPC_ENTRY RpcAsyncGetCallStatus ( IN PRPC_ASYNC_STATE pAsync ) /*++ Routine Description: description Arguments: pAsync - Return Value: RPC_S_OK - Function succeeded RPC_S_OUT_OF_MEMORY - we ran out of memory --*/ { MESSAGE_OBJECT *MObject = (MESSAGE_OBJECT *) pAsync->RuntimeInfo; if (MObject) { if (MObject->InvalidHandle(CALL_TYPE)) { return (RPC_S_INVALID_BINDING); } return ((CALL *) MObject)->GetCallStatus() ; } return RPC_S_INVALID_BINDING; } VOID APIENTRY I_RpcAPCRoutine ( IN RPC_APC_INFO *pAPCInfo ) { PRPC_ASYNC_STATE pAsync = pAPCInfo->pAsync; void *Context = pAPCInfo->Context; RPC_ASYNC_EVENT Event = pAPCInfo->Event; PFN_RPCNOTIFICATION_ROUTINE pRoutine = pAPCInfo->pAsync->u.APC.NotificationRoutine; ((CALL *) pAPCInfo->hCall)->FreeAPCInfo(pAPCInfo) ; (*pRoutine) (pAsync, Context, Event) ; // // We cannot do anything after the call to the user's API routine. The // may be gone // } /////////////////////////////////////////////////////// // Routines owned by NDR // /////////////////////////////////////////////////////// // // // RpcAsyncAbortCall // RpcAsyncCompleteCall //