diff --git a/include/wine/obj_channel.h b/include/wine/obj_channel.h
index e6372c45b4017649ec3617b40e26bcd10190f25b..da0c9ff35765728a19a9754b99d9d3a2b66125c4 100644
--- a/include/wine/obj_channel.h
+++ b/include/wine/obj_channel.h
@@ -30,31 +30,158 @@ typedef struct IRpcStubBuffer IRpcStubBuffer,*LPRPCSTUBBUFFER;
 /*****************************************************************************
  * IChannelHook interface
  */
-/* FIXME: not implemented */
+#define ICOM_INTERFACE IChannelHook
+#define IChannelHook_METHODS \
+    ICOM_VMETHOD3(ClientGetSize,    REFGUID,uExtent, REFIID,riid, ULONG*,pDataSize); \
+    ICOM_VMETHOD4(ClientFillBuffer, REFGUID,uExtent, REFIID,riid, ULONG*,pDataSize, void*,pDataBuffer); \
+    ICOM_VMETHOD6(ClientNotify,     REFGUID,uExtent, REFIID,riid, ULONG,cbDataSize, void*,pDataBuffer, DWORD,lDataRep, HRESULT,hrFault); \
+    ICOM_VMETHOD5(ServerNotify,     REFGUID,uExtent, REFIID,riid, ULONG,cbDataSize, void*,pDataBuffer, DWORD,lDataRep); \
+    ICOM_VMETHOD4(ServerGetSize,    REFGUID,uExtent, REFIID,riid, HRESULT,hrFault, ULONG*,pDataSize); \
+    ICOM_VMETHOD5(ServerFillBuffer, REFGUID,uExtent, REFIID,riid, ULONG*,pDataSize, void*,pDataBuffer, HRESULT,hrFault);
+#define IChannelHook_IMETHODS \
+    IUnknown_IMETHODS \
+    IChannelHook_METHODS
+ICOM_DEFINE(IChannelHook,IUnknown)
+#undef ICOM_INTERFACE
+
+#ifdef ICOM_CINTERFACE
+/*** IUnknown methods ***/
+#define IChannelHook_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
+#define IChannelHook_AddRef(p)             ICOM_CALL (AddRef,p)
+#define IChannelHook_Release(p)            ICOM_CALL (Release,p)
+/*** IChannelHook methods ***/
+#define IChannelHook_ClientGetSize(p,a,b,c)        ICOM_CALL(ClientGetSize,p,a,b,c)
+#define IChannelHook_ClientFillBuffer(p,a,b,c,d)   ICOM_CALL(ClientFillBuffer,p,a,b,c,d)
+#define IChannelHook_ClientNotify(p,a,b,c,d,e,f)   ICOM_CALL(ClientNotify,p,a,b,c,d,e,f)
+#define IChannelHook_ServerNotify(p,a,b,c,d,e)     ICOM_CALL(ServerNotify,p,a,b,c,d,e)
+#define IChannelHook_ServerGetSize(p,a,b,c,d)      ICOM_CALL(ServerGetSize,p,a,b,c,d)
+#define IChannelHook_ServerFillBuffer(p,a,b,c,d,e) ICOM_CALL(ServerFillBuffer,p,a,b,c,d,e)
+#endif
 
 
 /*****************************************************************************
  * IPSFactoryBuffer interface
  */
-/* FIXME: not implemented */
+#define ICOM_INTERFACE IPSFactoryBuffer
+#define IPSFactoryBuffer_METHODS \
+    ICOM_METHOD4(HRESULT,CreateProxy, IUnknown*,pUnkOuter, REFIID,riid, IRpcProxyBuffer**,ppProxy, void**,ppv); \
+    ICOM_METHOD3(HRESULT,CreateStub,  REFIID,riid, IUnknown*,pUnkServer, IRpcStubBuffer**,ppStub);
+#define IPSFactoryBuffer_IMETHODS \
+    IUnknown_IMETHODS \
+    IPSFactoryBuffer_METHODS
+ICOM_DEFINE(IPSFactoryBuffer,IUnknown)
+#undef ICOM_INTERFACE
+
+#ifdef ICOM_CINTERFACE
+/*** IUnknown methods ***/
+#define IPSFactoryBuffer_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
+#define IPSFactoryBuffer_AddRef(p)             ICOM_CALL (AddRef,p)
+#define IPSFactoryBuffer_Release(p)            ICOM_CALL (Release,p)
+/*** IPSFactoryBuffer methods ***/
+#define IPSFactoryBuffer_CreateProxy(p,a,b,c,d) ICOM_CALL4(CreateProxy,p,a,b,c,d)
+#define IPSFactoryBuffer_CreateStub(p,a,b,c)    ICOM_CALL3(CreateStub,p,a,b,c)
+#endif
 
 
 /*****************************************************************************
  * IRpcChannelBuffer interface
  */
-/* FIXME: not implemented */
+typedef unsigned long RPCOLEDATAREP;
+
+typedef struct tagRPCOLEMESSAGE
+{
+    void* reserved1;
+    RPCOLEDATAREP dataRepresentation;
+    void* Buffer;
+    ULONG cbBuffer;
+    ULONG iMethod;
+    void* reserved2[5];
+    ULONG rpcFlags;
+} RPCOLEMESSAGE, *PRPCOLEMESSAGE;
+
+#define ICOM_INTERFACE IRpcChannelBuffer
+#define IRpcChannelBuffer_METHODS \
+    ICOM_METHOD2(HRESULT,GetBuffer,   RPCOLEMESSAGE*,pMessage, REFIID,riid); \
+    ICOM_METHOD2(HRESULT,SendReceive, RPCOLEMESSAGE*,pMessage, ULONG*,pStatus); \
+    ICOM_METHOD1(HRESULT,FreeBuffer,  RPCOLEMESSAGE*,pMessage); \
+    ICOM_METHOD2(HRESULT,GetDestCtx,  DWORD*,pdwDestContext, void**,ppvDestContext); \
+    ICOM_METHOD (HRESULT,IsConnected);
+#define IRpcChannelBuffer_IMETHODS \
+    IUnknown_IMETHODS \
+    IRpcChannelBuffer_METHODS
+ICOM_DEFINE(IRpcChannelBuffer,IUnknown)
+#undef ICOM_INTERFACE
+
+#ifdef ICOM_CINTERFACE
+/*** IUnknown methods ***/
+#define IRpcChannelBuffer_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
+#define IRpcChannelBuffer_AddRef(p)             ICOM_CALL (AddRef,p)
+#define IRpcChannelBuffer_Release(p)            ICOM_CALL (Release,p)
+/*** IRpcChannelBuffer methods ***/
+#define IRpcChannelBuffer_GetBuffer(p,a,b)   ICOM_CALL2(GetBuffer,p,a,b)
+#define IRpcChannelBuffer_SendReceive(p,a,b) ICOM_CALL2(SendReceive,p,a,b)
+#define IRpcChannelBuffer_FreeBuffer(p,a)    ICOM_CALL1(FreeBuffer,p,a)
+#define IRpcChannelBuffer_GetDestCtx(p,a,b)  ICOM_CALL2(GetDestCtx,p,a,b)
+#define IRpcChannelBuffer_IsConnected(p)     ICOM_CALL (IsConnected,p)
+#endif
 
 
 /*****************************************************************************
  * IRpcProxyBuffer interface
  */
-/* FIXME: not implemented */
+#define ICOM_INTERFACE IRpcProxyBuffer
+#define IRpcProxyBuffer_METHODS \
+    ICOM_METHOD1(HRESULT,Connect,   IRpcChannelBuffer*,pRpcChannelBuffer); \
+    ICOM_VMETHOD(        Disconnect);
+#define IRpcProxyBuffer_IMETHODS \
+    IUnknown_IMETHODS \
+    IRpcProxyBuffer_METHODS
+ICOM_DEFINE(IRpcProxyBuffer,IUnknown)
+#undef ICOM_INTERFACE
+
+#ifdef ICOM_CINTERFACE
+/*** IUnknown methods ***/
+#define IRpcProxyBuffer_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
+#define IRpcProxyBuffer_AddRef(p)             ICOM_CALL (AddRef,p)
+#define IRpcProxyBuffer_Release(p)            ICOM_CALL (Release,p)
+/*** IRpcProxyBuffer methods ***/
+#define IRpcProxyBuffer_Connect(p,a)  ICOM_CALL2(Connect,p,a)
+#define IRpcProxyBuffer_Disconnect(p) ICOM_CALL (Disconnect,p)
+#endif
 
 
 /*****************************************************************************
  * IRpcStubBuffer interface
  */
-/* FIXME: not implemented */
+#define ICOM_INTERFACE IRpcStubBuffer
+#define IRpcStubBuffer_METHODS \
+    ICOM_METHOD1 (HRESULT,        Connect,                   IUnknown*,pUnkServer); \
+    ICOM_VMETHOD (                Disconnect); \
+    ICOM_METHOD2 (HRESULT,        Invoke,                    RPCOLEMESSAGE*,_prpcmsg, IRpcChannelBuffer*,_pRpcChannelBuffer); \
+    ICOM_METHOD1 (IRpcStubBuffer*,IsIIDSupported,            REFIID,riid); \
+    ICOM_METHOD  (ULONG,          CountRefs); \
+    ICOM_METHOD1 (HRESULT,        DebugServerQueryInterface, void**,ppv); \
+    ICOM_VMETHOD1(                DebugServerRelease,        void*,pv);
+#define IRpcStubBuffer_IMETHODS \
+    IUnknown_IMETHODS \
+    IRpcStubBuffer_METHODS
+ICOM_DEFINE(IRpcStubBuffer,IUnknown)
+#undef ICOM_INTERFACE
+
+#ifdef ICOM_CINTERFACE
+/*** IUnknown methods ***/
+#define IRpcStubBuffer_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
+#define IRpcStubBuffer_AddRef(p)             ICOM_CALL (AddRef,p)
+#define IRpcStubBuffer_Release(p)            ICOM_CALL (Release,p)
+/*** IRpcStubBuffer methods ***/
+#define IRpcStubBuffer_Connect(p,a)                   ICOM_CALL1(Connect,p,a)
+#define IRpcStubBuffer_Disconnect(p)                  ICOM_CALL (Disconnect,p)
+#define IRpcStubBuffer_Invoke(p,a,b)                  ICOM_CALL2(Invoke,p,a,b)
+#define IRpcStubBuffer_IsIIDSupported(p,a)            ICOM_CALL1(IsIIDSupported,p,a)
+#define IRpcStubBuffer_CountRefs(p)                   ICOM_CALL (CountRefs,p)
+#define IRpcStubBuffer_DebugServerQueryInterface(p,a) ICOM_CALL1(DebugServerQueryInterface,p,a)
+#define IRpcStubBuffer_DebugServerRelease(p,a)        ICOM_CALL1(DebugServerRelease,p,a)
+#endif
 
 
 #endif /* __WINE_WINE_OBJ_CHANNEL_H */