//+------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1993. // // File: classf_s.cxx // // Contents: Interface stub for IClassFactory // // Classes: CStubIClassFactory // // History: Created by Microsoft (R) MIDL Compiler Version 1.10.82 // //-------------------------------------------------------------------------- #include "stdrpc.hxx" #pragma hdrstop #include "classf_x.h" HRESULT STDMETHODCALLTYPE CStubIClassFactory::Invoke(RPCOLE_MESSAGE *_prpcmsg, IRpcChannelBuffer *_pRpcChannel) { HRESULT _hResult = S_OK; switch(_prpcmsg->ProcNum) { case IClassFactory_CreateInstance_OPNUM: _hResult = CStubCreateInstance(_prpcmsg, _pRpcChannel); break; case IClassFactory_LockServer_OPNUM: _hResult = CStubLockServer(_prpcmsg, _pRpcChannel); break; default: _hResult = E_FAIL; break; } return _hResult; } HRESULT CStubIClassFactory::CStubCreateInstance(RPCOLE_MESSAGE * _prpcmsg, IRpcChannelBuffer *_pRpcChannel) { IUnknown *pUnkOuter = 0; IID riid; void *ppvObject = 0; HRESULT _ret_value; unsigned long _alloc_bound; unsigned long _alloc_total; unsigned char *_savebuf; unsigned char *_tempbuf; RPC_STATUS _status; //Initialize [in] and [in, out] parameters //Unmarshal [in] and [in,out] parameters ((PRPCOLE_MESSAGE)_prpcmsg)->_hResult = S_OK; ((PRPCOLE_MESSAGE)_prpcmsg)->_hResult = _pRpcChannel->GetStream(_prpcmsg, _prpcmsg->_cbStream, &_prpcmsg->_pStream); if(((PRPCOLE_MESSAGE)_prpcmsg)->_hResult == S_OK) { _try { _tempbuf = (unsigned char FAR *)_prpcmsg->Buffer; *(unsigned long FAR *)&_prpcmsg->Buffer += 3; *(unsigned long FAR *)&_prpcmsg->Buffer &= 0xfffffffc; if (*(*(unsigned long FAR *FAR *)&_prpcmsg->Buffer)++) { } _gns__GUID ((GUID FAR *)&riid, (PRPC_MESSAGE)_prpcmsg); } _except(EXCEPTION_EXECUTE_HANDLER) { //Catch exceptions and map them into HRESULT error codes HRESULT_from_exception(GetExceptionCode(), &((PRPCOLE_MESSAGE)_prpcmsg)->_hResult); } //Release the stream _prpcmsg->_pStream->Release(); _prpcmsg->_pStream = 0; } if(((PRPCOLE_MESSAGE)_prpcmsg)->_hResult != S_OK) { return (((PRPCOLE_MESSAGE)_prpcmsg)->_hResult); } //Initialize [out] parameters _try { _ret_value = ((IClassFactory *)_pInterface)->CreateInstance((IUnknown *)pUnkOuter, (REFIID )riid, (void **)&ppvObject); } _except(EXCEPTION_EXECUTE_HANDLER) { //Catch exceptions and map them into HRESULT error codes HRESULT_from_exception(GetExceptionCode(), &((PRPCOLE_MESSAGE)_prpcmsg)->_hResult); } if(((PRPCOLE_MESSAGE)_prpcmsg)->_hResult != S_OK) { return (((PRPCOLE_MESSAGE)_prpcmsg)->_hResult); } //Calculate size of message buffer ((PRPCOLE_MESSAGE)_prpcmsg)->_hResult = _pRpcChannel->GetDestCtx(&_prpcmsg->_dwDestContext, &_prpcmsg->_pvDestContext); if(((PRPCOLE_MESSAGE)_prpcmsg)->_hResult != S_OK) { return (((PRPCOLE_MESSAGE)_prpcmsg)->_hResult); } _prpcmsg->BufferLength = 16; _prpcmsg->BufferLength += 3; _prpcmsg->BufferLength &= (unsigned int)0xfffffffc; _prpcmsg->BufferLength += 4; if (ppvObject !=0) { ((PRPCOLE_MESSAGE)_prpcmsg)->_hResult = CoGetMarshalSizeMax(&((PRPCOLE_MESSAGE)_prpcmsg)->_size, riid, (IUnknown *)ppvObject, ((PRPCOLE_MESSAGE)_prpcmsg)->_dwDestContext, ((PRPCOLE_MESSAGE)_prpcmsg)->_pvDestContext, 0); _prpcmsg->BufferLength += ((PRPCOLE_MESSAGE)_prpcmsg)->_size; ((PRPCOLE_MESSAGE)_prpcmsg)->_cbStream += ((PRPCOLE_MESSAGE)_prpcmsg)->_size; } //Get RPC message buffer _status = _pRpcChannel->GetBuffer(_prpcmsg); //Marshal [out] and [in,out] parameters ((PRPCOLE_MESSAGE)_prpcmsg)->_hResult = _pRpcChannel->GetStream(_prpcmsg, _prpcmsg->_cbStream, &_prpcmsg->_pStream); if(((PRPCOLE_MESSAGE)_prpcmsg)->_hResult == S_OK) { _try { /* send data from ppvObject */ *(unsigned long FAR *)&_prpcmsg->Buffer += 3; *(unsigned long FAR *)&_prpcmsg->Buffer &= 0xfffffffc; *(*(long FAR *FAR *)&_prpcmsg->Buffer)++ = (long)ppvObject; if (ppvObject !=0) { ((PRPCOLE_MESSAGE)_prpcmsg)->_hResult = CoMarshalInterface(((PRPCOLE_MESSAGE)_prpcmsg)->_pStream, riid, (IUnknown *)ppvObject, ((PRPCOLE_MESSAGE)_prpcmsg)->_dwDestContext, ((PRPCOLE_MESSAGE)_prpcmsg)->_pvDestContext, 0); if(((PRPCOLE_MESSAGE)_prpcmsg)->_hResult != S_OK) RpcRaiseException(((PRPCOLE_MESSAGE)_prpcmsg)->_hResult); } /* send data from _ret_value */ *(unsigned long FAR *)&_prpcmsg->Buffer += 3; *(unsigned long FAR *)&_prpcmsg->Buffer &= 0xfffffffc; *(*(long FAR *FAR *)&_prpcmsg->Buffer)++ = (long)_ret_value; } _except(EXCEPTION_EXECUTE_HANDLER) { //Catch exceptions and map them into HRESULT error codes HRESULT_from_exception(GetExceptionCode(), &((PRPCOLE_MESSAGE)_prpcmsg)->_hResult); } //Release the stream _prpcmsg->_pStream->Release(); _prpcmsg->_pStream = 0; } //Clean up local variables if (pUnkOuter !=0) { ((IUnknown *)pUnkOuter)->Release(); pUnkOuter = 0; } if (ppvObject !=0) { ((IUnknown *)ppvObject)->Release(); ppvObject = 0; } return ((PRPCOLE_MESSAGE)_prpcmsg)->_hResult; } HRESULT CStubIClassFactory::CStubLockServer(RPCOLE_MESSAGE * _prpcmsg, IRpcChannelBuffer *_pRpcChannel) { BOOL fLock; HRESULT _ret_value; unsigned char *_savebuf; unsigned char *_tempbuf; void *_xmit_type; RPC_STATUS _status; unsigned char *_packet; //Initialize [in] and [in, out] parameters //Unmarshal [in] and [in,out] parameters ((PRPCOLE_MESSAGE)_prpcmsg)->_hResult = S_OK; _packet = _prpcmsg->Buffer; _try { (*(long FAR *FAR *)&_xmit_type) = (long *)MIDL_user_allocate ((size_t)(sizeof(long))); /* receive data into (long FAR *)_xmit_type */ long_from_ndr((PRPC_MESSAGE)_prpcmsg, (unsigned long FAR *)(long FAR *)_xmit_type); INT_from_xmit ((long FAR *)_xmit_type, &fLock); INT_free_xmit ((long FAR *)_xmit_type); } _except(EXCEPTION_EXECUTE_HANDLER) { //Catch exceptions and map them into HRESULT error codes HRESULT_from_exception(GetExceptionCode(), &((PRPCOLE_MESSAGE)_prpcmsg)->_hResult); } _prpcmsg->Buffer = _packet; if(((PRPCOLE_MESSAGE)_prpcmsg)->_hResult != S_OK) { return (((PRPCOLE_MESSAGE)_prpcmsg)->_hResult); } //Initialize [out] parameters _try { _ret_value = ((IClassFactory *)_pInterface)->LockServer((BOOL )fLock); } _except(EXCEPTION_EXECUTE_HANDLER) { //Catch exceptions and map them into HRESULT error codes HRESULT_from_exception(GetExceptionCode(), &((PRPCOLE_MESSAGE)_prpcmsg)->_hResult); } if(((PRPCOLE_MESSAGE)_prpcmsg)->_hResult != S_OK) { return (((PRPCOLE_MESSAGE)_prpcmsg)->_hResult); } //Calculate size of message buffer ((PRPCOLE_MESSAGE)_prpcmsg)->_hResult = _pRpcChannel->GetDestCtx(&_prpcmsg->_dwDestContext, &_prpcmsg->_pvDestContext); if(((PRPCOLE_MESSAGE)_prpcmsg)->_hResult != S_OK) { return (((PRPCOLE_MESSAGE)_prpcmsg)->_hResult); } _prpcmsg->BufferLength = 4; //Get RPC message buffer _status = _pRpcChannel->GetBuffer(_prpcmsg); //Marshal [out] and [in,out] parameters _packet = _prpcmsg->Buffer; _try { /* send data from _ret_value */ *(unsigned long FAR *)&_prpcmsg->Buffer += 3; *(unsigned long FAR *)&_prpcmsg->Buffer &= 0xfffffffc; *(*(long FAR *FAR *)&_prpcmsg->Buffer)++ = (long)_ret_value; } _except(EXCEPTION_EXECUTE_HANDLER) { //Catch exceptions and map them into HRESULT error codes HRESULT_from_exception(GetExceptionCode(), &((PRPCOLE_MESSAGE)_prpcmsg)->_hResult); } _prpcmsg->BufferLength = _prpcmsg->Buffer - _packet; _prpcmsg->Buffer = _packet; //Clean up local variables return ((PRPCOLE_MESSAGE)_prpcmsg)->_hResult; }