Sync to Wine-20050628:
Robert Shearman <rob@codeweavers.com>
- Improve tracing.
- Implement FC_UP and partially FC_OP.
- Don't needlessly marshal 4 bytes in NdrPointer*.
- Fix an RPC server startup race introduced by me.
- Don't pass the PROFILE_SERVER flag in to CreateNamedPipe as it is
  bogus.
- Call FlushFileBuffers to make sure the other end of the pipe doesn't
  get cut off prematurely.
- Don't call CancelIo as we should never have async I/O pending.
- Make NdrInterfacePointer* more reliable.
Dmitry Timoshkov <dmitry@codeweavers.com>
- Make remaining OLE interface vtables const.
Alexandre Julliard <julliard@winehq.org>
- Sort entry points in the same order as Windows.
Mike Hearn <mh@codeweavers.com>
- Initialize DataRepresentation in NdrClientInitializeNew, not
  NdrSendReceive.
Modified: trunk/reactos/lib/rpcrt4/cproxy.c
Modified: trunk/reactos/lib/rpcrt4/cpsf.c
Modified: trunk/reactos/lib/rpcrt4/ndr_marshall.c
Modified: trunk/reactos/lib/rpcrt4/ndr_midl.c
Modified: trunk/reactos/lib/rpcrt4/ndr_ole.c
Modified: trunk/reactos/lib/rpcrt4/rpc_binding.c
Modified: trunk/reactos/lib/rpcrt4/rpc_server.c
Modified: trunk/reactos/lib/rpcrt4/rpcrt4.spec

Modified: trunk/reactos/lib/rpcrt4/cproxy.c
--- trunk/reactos/lib/rpcrt4/cproxy.c	2005-08-04 18:11:03 UTC (rev 17047)
+++ trunk/reactos/lib/rpcrt4/cproxy.c	2005-08-04 21:35:00 UTC (rev 17048)
@@ -43,7 +43,7 @@
 /* I don't know what MS's std proxy structure looks like,
    so this probably doesn't match, but that shouldn't matter */
 typedef struct {
-  IRpcProxyBufferVtbl *lpVtbl;
+  const IRpcProxyBufferVtbl *lpVtbl;
   LPVOID *PVtbl;
   DWORD RefCount;
   const MIDL_STUBLESS_PROXY_INFO *stubless;
@@ -55,7 +55,7 @@
   struct StublessThunk *thunks;
 } StdProxyImpl;
 
-static IRpcProxyBufferVtbl StdProxy_Vtbl;
+static const IRpcProxyBufferVtbl StdProxy_Vtbl;
 
 #define ICOM_THIS_MULTI(impl,field,iface) impl* const This=(impl*)((char*)(iface) - offsetof(impl,field))
 
@@ -269,7 +269,7 @@
   This->pChannel = NULL;
 }
 
-static IRpcProxyBufferVtbl StdProxy_Vtbl =
+static const IRpcProxyBufferVtbl StdProxy_Vtbl =
 {
   StdProxy_QueryInterface,
   StdProxy_AddRef,

Modified: trunk/reactos/lib/rpcrt4/cpsf.c
--- trunk/reactos/lib/rpcrt4/cpsf.c	2005-08-04 18:11:03 UTC (rev 17047)
+++ trunk/reactos/lib/rpcrt4/cpsf.c	2005-08-04 21:35:00 UTC (rev 17048)
@@ -116,7 +116,7 @@
                                   ProxyInfo->pStubVtblList[Index], iface, ppStub);
 }
 
-static IPSFactoryBufferVtbl CStdPSFactory_Vtbl =
+static const IPSFactoryBufferVtbl CStdPSFactory_Vtbl =
 {
   CStdPSFactory_QueryInterface,
   CStdPSFactory_AddRef,

Modified: trunk/reactos/lib/rpcrt4/ndr_marshall.c
--- trunk/reactos/lib/rpcrt4/ndr_marshall.c	2005-08-04 18:11:03 UTC (rev 17047)
+++ trunk/reactos/lib/rpcrt4/ndr_marshall.c	2005-08-04 21:35:00 UTC (rev 17048)
@@ -562,6 +562,21 @@
   return NULL; /* FIXME: is this always right? */
 }
 
+static inline void dump_pointer_attr(unsigned char attr)
+{
+    if (attr & RPC_FC_P_ALLOCALLNODES)
+        TRACE(" RPC_FC_P_ALLOCALLNODES");
+    if (attr & RPC_FC_P_DONTFREE)
+        TRACE(" RPC_FC_P_DONTFREE");
+    if (attr & RPC_FC_P_ONSTACK)
+        TRACE(" RPC_FC_P_ONSTACK");
+    if (attr & RPC_FC_P_SIMPLEPOINTER)
+        TRACE(" RPC_FC_P_SIMPLEPOINTER");
+    if (attr & RPC_FC_P_DEREF)
+        TRACE(" RPC_FC_P_DEREF");
+    TRACE("\n");
+}
+
 /***********************************************************************
  *           PointerMarshall
  */
@@ -575,7 +590,7 @@
   NDR_MARSHALL m;
 
   TRACE("(%p,%p,%p,%p)\n", pStubMsg, Buffer, Pointer, pFormat);
-  TRACE("type=%d, attr=%d\n", type, attr);
+  TRACE("type=0x%x, attr=", type); dump_pointer_attr(attr);
   pFormat += 2;
   if (attr & RPC_FC_P_SIMPLEPOINTER) desc = pFormat;
   else desc = pFormat + *(const SHORT*)pFormat;
@@ -584,21 +599,33 @@
     TRACE("deref => %p\n", Pointer);
   }
 
-  *(LPVOID*)Buffer = 0;
-
   switch (type) {
   case RPC_FC_RP: /* ref pointer (always non-null) */
+#if 0 /* this causes problems for InstallShield so is disabled - we need more tests */
+    if (!Pointer)
+      RpcRaiseException(RPC_X_NULL_REF_POINTER);
+#endif
     break;
   case RPC_FC_UP: /* unique pointer */
+  case RPC_FC_OP: /* object pointer - same as unique here */
+    TRACE("writing %p to buffer\n", Pointer);
+    NDR_LOCAL_UINT32_WRITE(pStubMsg->Buffer, (unsigned long)Pointer);
+    pStubMsg->Buffer += 4;
     break;
+  case RPC_FC_FP:
   default:
     FIXME("unhandled ptr type=%02x\n", type);
+    RpcRaiseException(RPC_X_BAD_STUB_DATA);
   }
 
-  m = NdrMarshaller[*desc & NDR_TABLE_MASK];
-  if (m) m(pStubMsg, Pointer, desc);
-  else FIXME("no marshaller for data type=%02x\n", *desc);
+  TRACE("calling marshaller for type 0x%x\n", (int)*desc);
 
+  if (Pointer) {
+    m = NdrMarshaller[*desc & NDR_TABLE_MASK];
+    if (m) m(pStubMsg, Pointer, desc);
+    else FIXME("no marshaller for data type=%02x\n", *desc);
+  }
+
   STD_OVERFLOW_CHECK(pStubMsg);
 }
 
@@ -614,9 +641,10 @@
   unsigned type = pFormat[0], attr = pFormat[1];
   PFORMAT_STRING desc;
   NDR_UNMARSHALL m;
+  DWORD pointer_id = 0;
 
   TRACE("(%p,%p,%p,%p,%d)\n", pStubMsg, Buffer, pPointer, pFormat, fMustAlloc);
-  TRACE("type=%d, attr=%d\n", type, attr);
+  TRACE("type=0x%x, attr=", type); dump_pointer_attr(attr);
   pFormat += 2;
   if (attr & RPC_FC_P_SIMPLEPOINTER) desc = pFormat;
   else desc = pFormat + *(const SHORT*)pFormat;
@@ -627,18 +655,27 @@
 
   switch (type) {
   case RPC_FC_RP: /* ref pointer (always non-null) */
+    pointer_id = ~0UL;
     break;
   case RPC_FC_UP: /* unique pointer */
+    pointer_id = NDR_LOCAL_UINT32_READ(pStubMsg->Buffer);
+    pStubMsg->Buffer += 4;
     break;
+  case RPC_FC_OP: /* object pointer - we must free data before overwriting it */
+  case RPC_FC_FP:
   default:
     FIXME("unhandled ptr type=%02x\n", type);
+    RpcRaiseException(RPC_X_BAD_STUB_DATA);
   }
 
   *pPointer = NULL;
 
-  m = NdrUnmarshaller[*desc & NDR_TABLE_MASK];
-  if (m) m(pStubMsg, pPointer, desc, fMustAlloc);
-  else FIXME("no unmarshaller for data type=%02x\n", *desc);
+  if (pointer_id) {
+    m = NdrUnmarshaller[*desc & NDR_TABLE_MASK];
+    if (m) m(pStubMsg, pPointer, desc, fMustAlloc);
+    else FIXME("no unmarshaller for data type=%02x\n", *desc);
+  }
+
   TRACE("pointer=%p\n", *pPointer);
 }
 
@@ -666,10 +703,17 @@
   switch (type) {
   case RPC_FC_RP: /* ref pointer (always non-null) */
     break;
-  case RPC_FC_UP: /* unique pointer */
+  case RPC_FC_OP:
+  case RPC_FC_UP:
+    pStubMsg->BufferLength += 4;
+    /* NULL pointer has no further representation */
+    if (!Pointer)
+        return;
     break;
+  case RPC_FC_FP:
   default:
     FIXME("unhandled ptr type=%02x\n", type);
+    RpcRaiseException(RPC_X_BAD_STUB_DATA);
   }
 
   m = NdrBufferSizer[*desc & NDR_TABLE_MASK];
@@ -689,7 +733,7 @@
   NDR_MEMORYSIZE m;
 
   FIXME("(%p,%p,%p): stub\n", pStubMsg, Buffer, pFormat);
-  TRACE("type=%d, attr=%d\n", type, attr);
+  TRACE("type=%d, attr=", type); dump_pointer_attr(attr);
   pFormat += 2;
   if (attr & RPC_FC_P_SIMPLEPOINTER) desc = pFormat;
   else desc = pFormat + *(const SHORT*)pFormat;
@@ -702,6 +746,7 @@
     break;
   default:
     FIXME("unhandled ptr type=%02x\n", type);
+    RpcRaiseException(RPC_X_BAD_STUB_DATA);
   }
 
   m = NdrMemorySizer[*desc & NDR_TABLE_MASK];
@@ -723,7 +768,7 @@
   NDR_FREE m;
 
   TRACE("(%p,%p,%p)\n", pStubMsg, Pointer, pFormat);
-  TRACE("type=%d, attr=%d\n", type, attr);
+  TRACE("type=%d, attr=", type); dump_pointer_attr(attr);
   if (attr & RPC_FC_P_DONTFREE) return;
   pFormat += 2;
   if (attr & RPC_FC_P_SIMPLEPOINTER) desc = pFormat;
@@ -1085,7 +1130,6 @@
 
   pStubMsg->BufferMark = pStubMsg->Buffer;
   PointerMarshall(pStubMsg, pStubMsg->Buffer, pMemory, pFormat);
-  pStubMsg->Buffer += 4;
 
   STD_OVERFLOW_CHECK(pStubMsg);
 
@@ -1104,7 +1148,6 @@
 
   pStubMsg->BufferMark = pStubMsg->Buffer;
   PointerUnmarshall(pStubMsg, pStubMsg->Buffer, ppMemory, pFormat, fMustAlloc);
-  pStubMsg->Buffer += 4;
 
   return NULL;
 }
@@ -1117,7 +1160,6 @@
                                       PFORMAT_STRING pFormat)
 {
   TRACE("(%p,%p,%p)\n", pStubMsg, pMemory, pFormat);
-  pStubMsg->BufferLength += 4;
   PointerBufferSize(pStubMsg, pMemory, pFormat);
 }
 

Modified: trunk/reactos/lib/rpcrt4/ndr_midl.c
--- trunk/reactos/lib/rpcrt4/ndr_midl.c	2005-08-04 18:11:03 UTC (rev 17047)
+++ trunk/reactos/lib/rpcrt4/ndr_midl.c	2005-08-04 21:35:00 UTC (rev 17048)
@@ -185,6 +185,7 @@
   assert( pRpcMessage && pStubMsg && pStubDesc );
 
   memset(pRpcMessage, 0, sizeof(RPC_MESSAGE));
+  pRpcMessage->DataRepresentation = NDR_LOCAL_DATA_REPRESENTATION;
 
   /* not everyone allocates stack space for w2kReserved */
   memset(pStubMsg, 0, FIELD_OFFSET(MIDL_STUB_MESSAGE,pCSInfo));
@@ -277,9 +278,6 @@
     return NULL;
   }
 
-  /* FIXME: Seems wrong.  Where should this really come from, and when? */
-  pStubMsg->RpcMsg->DataRepresentation = NDR_LOCAL_DATA_REPRESENTATION;
-
   if (I_RpcSendReceive(pStubMsg->RpcMsg) != RPC_S_OK) {
     WARN("I_RpcSendReceive did not return success.\n");
     /* FIXME: raise exception? */

Modified: trunk/reactos/lib/rpcrt4/ndr_ole.c
--- trunk/reactos/lib/rpcrt4/ndr_ole.c	2005-08-04 18:11:03 UTC (rev 17047)
+++ trunk/reactos/lib/rpcrt4/ndr_ole.c	2005-08-04 21:35:00 UTC (rev 17048)
@@ -79,7 +79,7 @@
  * (which also implements the MInterfacePointer structure) */
 typedef struct RpcStreamImpl
 {
-  IStreamVtbl *lpVtbl;
+  const IStreamVtbl *lpVtbl;
   DWORD RefCount;
   PMIDL_STUB_MESSAGE pMsg;
   LPDWORD size;
@@ -126,13 +126,18 @@
                                     ULONG *pcbRead)
 {
   RpcStreamImpl *This = (RpcStreamImpl *)iface;
-  if (This->pos + cb > *This->size) cb = *This->size - This->pos;
+  HRESULT hr = S_OK;
+  if (This->pos + cb > *This->size)
+  {
+    cb = *This->size - This->pos;
+    hr = S_FALSE;
+  }
   if (cb) {
     memcpy(pv, This->data + This->pos, cb);
     This->pos += cb;
   }
   if (pcbRead) *pcbRead = cb;
-  return S_OK;
+  return hr;
 }
 
 static HRESULT WINAPI RpcStream_Write(LPSTREAM iface,
@@ -141,6 +146,8 @@
                                      ULONG *pcbWritten)
 {
   RpcStreamImpl *This = (RpcStreamImpl *)iface;
+  if (This->data + cb > (char *)This->pMsg->BufferEnd)
+    return STG_E_MEDIUMFULL;
   memcpy(This->data + This->pos, pv, cb);
   This->pos += cb;
   if (This->pos > *This->size) *This->size = This->pos;
@@ -182,7 +189,7 @@
   return S_OK;
 }
 
-static IStreamVtbl RpcStream_Vtbl =
+static const IStreamVtbl RpcStream_Vtbl =
 {
   RpcStream_QueryInterface,
   RpcStream_AddRef,
@@ -247,11 +254,15 @@
   TRACE("(%p,%p,%p)\n", pStubMsg, pMemory, pFormat);
   pStubMsg->MaxCount = 0;
   if (!LoadCOM()) return NULL;
-  stream = RpcStream_Create(pStubMsg, TRUE);
-  hr = COM_MarshalInterface(stream, riid, (LPUNKNOWN)pMemory,
-                           pStubMsg->dwDestContext, pStubMsg->pvDestContext,
-                           MSHLFLAGS_NORMAL);
-  IStream_Release(stream);
+  if (pStubMsg->Buffer + sizeof(DWORD) < pStubMsg->BufferEnd) {
+    stream = RpcStream_Create(pStubMsg, TRUE);
+    if (stream) {
+      hr = COM_MarshalInterface(stream, riid, (LPUNKNOWN)pMemory,
+                                pStubMsg->dwDestContext, pStubMsg->pvDestContext,
+                                MSHLFLAGS_NORMAL);
+      IStream_Release(stream);
+    }
+  }
   return NULL;
 }
 
@@ -269,9 +280,13 @@
   TRACE("(%p,%p,%p,%d)\n", pStubMsg, ppMemory, pFormat, fMustAlloc);
   if (!LoadCOM()) return NULL;
   *(LPVOID*)ppMemory = NULL;
-  stream = RpcStream_Create(pStubMsg, FALSE);
-  hr = COM_UnmarshalInterface(stream, &IID_NULL, (LPVOID*)ppMemory);
-  IStream_Release(stream);
+  if (pStubMsg->Buffer + sizeof(DWORD) < pStubMsg->BufferEnd) {
+    stream = RpcStream_Create(pStubMsg, FALSE);
+    if (stream) {
+      hr = COM_UnmarshalInterface(stream, &IID_NULL, (LPVOID*)ppMemory);
+      IStream_Release(stream);
+    }
+  }
   return NULL;
 }
 
@@ -292,7 +307,7 @@
                             pStubMsg->dwDestContext, pStubMsg->pvDestContext,
                             MSHLFLAGS_NORMAL);
   TRACE("size=%ld\n", size);
-  pStubMsg->BufferLength += sizeof(DWORD) + size;
+  if (size) pStubMsg->BufferLength += sizeof(DWORD) + size;
 }
 
 /***********************************************************************

Modified: trunk/reactos/lib/rpcrt4/rpc_binding.c
--- trunk/reactos/lib/rpcrt4/rpc_binding.c	2005-08-04 18:11:03 UTC (rev 17047)
+++ trunk/reactos/lib/rpcrt4/rpc_binding.c	2005-08-04 21:35:00 UTC (rev 17048)
@@ -142,7 +142,7 @@
         pname = HeapAlloc(GetProcessHeap(), 0, strlen(prefix) + strlen(Connection->Endpoint) + 1);
         strcat(strcpy(pname, prefix), Connection->Endpoint);
         TRACE("listening on %s\n", pname);
-        Connection->conn = CreateNamedPipeA(pname, PROFILE_SERVER | PIPE_ACCESS_DUPLEX,
+        Connection->conn = CreateNamedPipeA(pname, PIPE_ACCESS_DUPLEX,
                                          PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE, PIPE_UNLIMITED_INSTANCES,
                                          RPC_MAX_PACKET_SIZE, RPC_MAX_PACKET_SIZE, 5000, NULL);
         HeapFree(GetProcessHeap(), 0, pname);
@@ -167,7 +167,7 @@
         pname = HeapAlloc(GetProcessHeap(), 0, strlen(prefix) + strlen(Connection->Endpoint) + 1);
         strcat(strcpy(pname, prefix), Connection->Endpoint);
         TRACE("listening on %s\n", pname);
-        Connection->conn = CreateNamedPipeA(pname, PROFILE_SERVER | PIPE_ACCESS_DUPLEX,
+        Connection->conn = CreateNamedPipeA(pname, PIPE_ACCESS_DUPLEX,
                                          PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES,
                                          RPC_MAX_PACKET_SIZE, RPC_MAX_PACKET_SIZE, 5000, NULL);
         HeapFree(GetProcessHeap(), 0, pname);
@@ -278,7 +278,7 @@
 {
   TRACE("(Connection == ^%p)\n", Connection);
   if (Connection->conn) {
-    CancelIo(Connection->conn);
+    FlushFileBuffers(Connection->conn);
     CloseHandle(Connection->conn);
     Connection->conn = 0;
   }

Modified: trunk/reactos/lib/rpcrt4/rpc_server.c
--- trunk/reactos/lib/rpcrt4/rpc_server.c	2005-08-04 18:11:03 UTC (rev 17047)
+++ trunk/reactos/lib/rpcrt4/rpc_server.c	2005-08-04 21:35:00 UTC (rev 17048)
@@ -858,8 +858,11 @@
   LeaveCriticalSection(&server_cs);
 
   if (sif->Flags & RPC_IF_AUTOLISTEN) {
-    /* well, start listening, I think... */
     RPCRT4_start_listen(TRUE);
+
+    /* make sure server is actually listening on the interface before
+     * returning */
+    RPCRT4_sync_with_server_thread();
   }
 
   return RPC_S_OK;

Modified: trunk/reactos/lib/rpcrt4/rpcrt4.spec
--- trunk/reactos/lib/rpcrt4/rpcrt4.spec	2005-08-04 18:11:03 UTC (rev 17047)
+++ trunk/reactos/lib/rpcrt4/rpcrt4.spec	2005-08-04 21:35:00 UTC (rev 17048)
@@ -1,7 +1,131 @@
+@ stdcall CreateProxyFromTypeInfo(ptr ptr ptr ptr ptr)
+@ stub CreateStubFromTypeInfo
+@ stdcall CStdStubBuffer_AddRef(ptr)
+@ stdcall CStdStubBuffer_Connect(ptr ptr)
+@ stdcall CStdStubBuffer_CountRefs(ptr)
+@ stdcall CStdStubBuffer_DebugServerQueryInterface(ptr ptr)
+@ stdcall CStdStubBuffer_DebugServerRelease(ptr ptr)
+@ stdcall CStdStubBuffer_Disconnect(ptr)
+@ stdcall CStdStubBuffer_Invoke(ptr ptr ptr)
+@ stdcall CStdStubBuffer_IsIIDSupported(ptr ptr)
+@ stdcall CStdStubBuffer_QueryInterface(ptr ptr ptr)
+@ stub CreateServerInterfaceFromStub # wxp
 @ stdcall DceErrorInqTextA (long ptr)
 @ stdcall DceErrorInqTextW (long ptr)
 @ stdcall -private DllRegisterServer() RPCRT4_DllRegisterServer
-
+@ stub GlobalMutexClearExternal
+@ stub GlobalMutexRequestExternal
+@ stdcall IUnknown_AddRef_Proxy(ptr)
+@ stdcall IUnknown_QueryInterface_Proxy(ptr ptr ptr)
+@ stdcall IUnknown_Release_Proxy(ptr)
+@ stub I_RpcAbortAsyncCall
+@ stub I_RpcAllocate
+@ stub I_RpcAsyncAbortCall
+@ stub I_RpcAsyncSendReceive # NT4
+@ stub I_RpcAsyncSetHandle
+@ stub I_RpcBCacheAllocate
+@ stub I_RpcBCacheFree
+@ stub I_RpcBindingCopy
+@ stub I_RpcBindingInqConnId
+@ stub I_RpcBindingInqDynamicEndPoint
+@ stub I_RpcBindingInqDynamicEndPointA
+@ stub I_RpcBindingInqDynamicEndPointW
+@ stub I_RpcBindingInqLocalClientPID # wxp
+@ stub I_RpcBindingInqSecurityContext
+@ stub I_RpcBindingInqTransportType
+@ stub I_RpcBindingInqWireIdForSnego
+@ stub I_RpcBindingIsClientLocal
+# 9x version of I_RpcBindingSetAsync has 3 arguments, not 2
+@ stdcall I_RpcBindingSetAsync(ptr ptr)
+@ stub I_RpcBindingToStaticStringBindingW
+@ stub I_RpcClearMutex
+@ stub I_RpcConnectionInqSockBuffSize2
+@ stub I_RpcConnectionInqSockBuffSize
+@ stub I_RpcConnectionSetSockBuffSize
+@ stub I_RpcDeleteMutex
+@ stub I_RpcEnableWmiTrace # wxp
+@ stub I_RpcExceptionFilter # wxp
+@ stub I_RpcFree
+@ stdcall I_RpcFreeBuffer(ptr)
+@ stub I_RpcFreePipeBuffer
+@ stub I_RpcGetAssociationContext
+@ stdcall I_RpcGetBuffer(ptr)
+@ stub I_RpcGetBufferWithObject
+@ stub I_RpcGetCurrentCallHandle
+@ stub I_RpcGetExtendedError
+@ stub I_RpcGetServerContextList
+@ stub I_RpcGetThreadEvent # win9x
+@ stub I_RpcGetThreadWindowHandle # win9x
+@ stub I_RpcIfInqTransferSyntaxes
+@ stub I_RpcLaunchDatagramReceiveThread # win9x
+@ stub I_RpcLogEvent
+@ stub I_RpcMapWin32Status
+@ stub I_RpcMonitorAssociation
+@ stub I_RpcNegotiateTransferSyntax # wxp
+@ stub I_RpcNsBindingSetEntryName
+@ stub I_RpcNsBindingSetEntryNameA
+@ stub I_RpcNsBindingSetEntryNameW
+@ stub I_RpcNsInterfaceExported
+@ stub I_RpcNsInterfaceUnexported
+@ stub I_RpcParseSecurity
+@ stub I_RpcPauseExecution
+@ stub I_RpcProxyNewConnection # wxp
+@ stub I_RpcReallocPipeBuffer
+@ stdcall I_RpcReceive(ptr)
+@ stub I_RpcRequestMutex
+@ stdcall I_RpcSend(ptr)
+@ stdcall I_RpcSendReceive(ptr)
+@ stub I_RpcServerAllocateIpPort
+@ stub I_RpcServerInqAddressChangeFn
+@ stub I_RpcServerInqLocalConnAddress # wxp
+@ stub I_RpcServerInqTransportType
+@ stub I_RpcServerRegisterForwardFunction
+@ stub I_RpcServerSetAddressChangeFn
+@ stdcall I_RpcServerStartListening(ptr) # win9x
+@ stdcall I_RpcServerStopListening() # win9x
+@ stub I_RpcServerUnregisterEndpointA # win9x
+@ stub I_RpcServerUnregisterEndpointW # win9x
+@ stub I_RpcServerUseProtseq2A
+@ stub I_RpcServerUseProtseq2W
+@ stub I_RpcServerUseProtseqEp2A
+@ stub I_RpcServerUseProtseqEp2W
+@ stub I_RpcSetAssociationContext # win9x
+@ stub I_RpcSetAsyncHandle
+@ stub I_RpcSetServerContextList
+@ stub I_RpcSetThreadParams # win9x
+@ stub I_RpcSetWMsgEndpoint # NT4
+@ stub I_RpcSsDontSerializeContext
+@ stub I_RpcStopMonitorAssociation
+@ stub I_RpcSystemFunction001 # wxp (oh, brother!)
+@ stub I_RpcTransCancelMigration # win9x
+@ stub I_RpcTransClientMaxFrag # win9x
+@ stub I_RpcTransClientReallocBuffer # win9x
+@ stub I_RpcTransConnectionAllocatePacket
+@ stub I_RpcTransConnectionFreePacket
+@ stub I_RpcTransConnectionReallocPacket
+@ stub I_RpcTransDatagramAllocate2
+@ stub I_RpcTransDatagramAllocate
+@ stub I_RpcTransDatagramFree
+@ stub I_RpcTransGetAddressList
+@ stub I_RpcTransGetThreadEvent
+@ stub I_RpcTransIoCancelled
+@ stub I_RpcTransMaybeMakeReceiveAny # win9x
+@ stub I_RpcTransMaybeMakeReceiveDirect # win9x
+@ stub I_RpcTransPingServer # win9x
+@ stub I_RpcTransServerFindConnection # win9x
+@ stub I_RpcTransServerFreeBuffer # win9x
+@ stub I_RpcTransServerMaxFrag # win9x
+@ stub I_RpcTransServerNewConnection
+@ stub I_RpcTransServerProtectThread # win9x
+@ stub I_RpcTransServerReallocBuffer # win9x
+@ stub I_RpcTransServerReceiveDirectReady # win9x
+@ stub I_RpcTransServerUnprotectThread # win9x
+@ stub I_RpcTurnOnEEInfoPropagation # wxp
+@ stdcall I_RpcWindowProc(ptr long long long) # win9x
+@ stub I_RpcltDebugSetPDUFilter
+@ stub I_UuidCreate
+@ stub MIDL_wchar_strcpy
+@ stub MIDL_wchar_strlen
 @ stub MesBufferHandleReset
 @ stub MesDecodeBufferHandleCreate
 @ stub MesDecodeIncrementalHandleCreate
@@ -11,10 +135,233 @@
 @ stub MesHandleFree
 @ stub MesIncrementalHandleReset
 @ stub MesInqProcEncodingId
-
 @ stub MqGetContext # win9x
 @ stub MqRegisterQueue # win9x
-
+@ stub NDRCContextBinding
+@ stub NDRCContextMarshall
+@ stub NDRCContextUnmarshall
+@ stub NDRSContextMarshall2
+@ stub NDRSContextMarshall
+@ stub NDRSContextMarshallEx
+@ stub NDRSContextUnmarshall2
+@ stub NDRSContextUnmarshall
+@ stub NDRSContextUnmarshallEx
+@ stub NDRcopy
+@ stdcall NdrAllocate(ptr long)
+@ stub NdrAsyncClientCall
+@ stub NdrAsyncServerCall
+@ stub NdrByteCountPointerBufferSize
+@ stub NdrByteCountPointerFree
+@ stub NdrByteCountPointerMarshall
+@ stub NdrByteCountPointerUnmarshall
+@ stub NdrCStdStubBuffer2_Release
+@ stdcall NdrCStdStubBuffer_Release(ptr ptr)
+@ stdcall NdrClearOutParameters(ptr ptr ptr)
+@ varargs NdrClientCall2(ptr ptr)
+@ stub NdrClientCall
+@ stub NdrClientContextMarshall
+@ stub NdrClientContextUnmarshall
+@ stub NdrClientInitialize
+@ stdcall NdrClientInitializeNew(ptr ptr ptr long)
+@ stdcall NdrComplexArrayBufferSize(ptr ptr ptr)
+@ stdcall NdrComplexArrayFree(ptr ptr ptr)
+@ stdcall NdrComplexArrayMarshall(ptr ptr ptr)
+@ stdcall NdrComplexArrayMemorySize(ptr ptr)
+@ stdcall NdrComplexArrayUnmarshall(ptr ptr ptr long)
+@ stdcall NdrComplexStructBufferSize(ptr ptr ptr)
+@ stdcall NdrComplexStructFree(ptr ptr ptr)
+@ stdcall NdrComplexStructMarshall(ptr ptr ptr)
+@ stdcall NdrComplexStructMemorySize(ptr ptr)
+@ stdcall NdrComplexStructUnmarshall(ptr ptr ptr long)
+@ stdcall NdrConformantArrayBufferSize(ptr ptr ptr)
+@ stdcall NdrConformantArrayFree(ptr ptr ptr)
+@ stdcall NdrConformantArrayMarshall(ptr ptr ptr)
+@ stdcall NdrConformantArrayMemorySize(ptr ptr)
+@ stdcall NdrConformantArrayUnmarshall(ptr ptr ptr long)
+@ stdcall NdrConformantStringBufferSize(ptr ptr ptr)
+@ stdcall NdrConformantStringMarshall(ptr ptr ptr)
+@ stdcall NdrConformantStringMemorySize(ptr ptr)
+@ stdcall NdrConformantStringUnmarshall(ptr ptr ptr long)
+@ stub NdrConformantStructBufferSize
+@ stub NdrConformantStructFree
+@ stub NdrConformantStructMarshall
+@ stub NdrConformantStructMemorySize
+@ stub NdrConformantStructUnmarshall
+@ stdcall NdrConformantVaryingArrayBufferSize(ptr ptr ptr)
+@ stdcall NdrConformantVaryingArrayFree(ptr ptr ptr)
+@ stdcall NdrConformantVaryingArrayMarshall(ptr ptr ptr)
+@ stdcall NdrConformantVaryingArrayMemorySize(ptr ptr)
+@ stdcall NdrConformantVaryingArrayUnmarshall(ptr ptr ptr long)
+@ stub NdrConformantVaryingStructBufferSize
+@ stub NdrConformantVaryingStructFree
+@ stub NdrConformantVaryingStructMarshall
+@ stub NdrConformantVaryingStructMemorySize
+@ stub NdrConformantVaryingStructUnmarshall
+@ stub NdrContextHandleInitialize
+@ stub NdrContextHandleSize
+@ stdcall NdrConvert2(ptr ptr long)
+@ stdcall NdrConvert(ptr ptr)
+@ stub NdrCorrelationFree
+@ stub NdrCorrelationInitialize
+@ stub NdrCorrelationPass
+@ stub NdrDcomAsyncClientCall
+@ stub NdrDcomAsyncStubCall
+@ stdcall NdrDllCanUnloadNow(ptr)
+@ stdcall NdrDllGetClassObject(ptr ptr ptr ptr ptr ptr)
+@ stdcall NdrDllRegisterProxy(long ptr ptr)
+@ stdcall NdrDllUnregisterProxy(long ptr ptr)
+@ stub NdrEncapsulatedUnionBufferSize
+@ stub NdrEncapsulatedUnionFree
+@ stub NdrEncapsulatedUnionMarshall
+@ stub NdrEncapsulatedUnionMemorySize
+@ stub NdrEncapsulatedUnionUnmarshall
+@ stub NdrFixedArrayBufferSize
+@ stub NdrFixedArrayFree
+@ stub NdrFixedArrayMarshall
+@ stub NdrFixedArrayMemorySize
+@ stub NdrFixedArrayUnmarshall
+@ stdcall NdrFreeBuffer(ptr)
+@ stub NdrFullPointerFree
+@ stub NdrFullPointerInsertRefId
+@ stub NdrFullPointerQueryPointer
+@ stub NdrFullPointerQueryRefId
+@ stub NdrFullPointerXlatFree
+@ stub NdrFullPointerXlatInit
+@ stdcall NdrGetBuffer(ptr long ptr)
+@ stub NdrGetDcomProtocolVersion
+@ stub NdrGetPartialBuffer
+@ stub NdrGetPipeBuffer
+@ stub NdrGetSimpleTypeBufferAlignment # wxp
+@ stub NdrGetSimpleTypeBufferSize # wxp
+@ stub NdrGetSimpleTypeMemorySize # wxp
+@ stub NdrGetTypeFlags # wxp
+@ stub NdrGetUserMarshallInfo
+@ stub NdrHardStructBufferSize
+@ stub NdrHardStructFree
+@ stub NdrHardStructMarshall
+@ stub NdrHardStructMemorySize
+@ stub NdrHardStructUnmarshall
+@ stdcall NdrInterfacePointerBufferSize(ptr ptr ptr)
+@ stdcall NdrInterfacePointerFree(ptr ptr ptr)
+@ stdcall NdrInterfacePointerMarshall(ptr ptr ptr)
+@ stdcall NdrInterfacePointerMemorySize(ptr ptr)
+@ stdcall NdrInterfacePointerUnmarshall(ptr ptr ptr long)
+@ stub NdrIsAppDoneWithPipes
+@ stub NdrMapCommAndFaultStatus
+@ stub NdrMarkNextActivePipe
+@ stub NdrMesProcEncodeDecode2
+@ stub NdrMesProcEncodeDecode
+@ stub NdrMesSimpleTypeAlignSize
+@ stub NdrMesSimpleTypeDecode
+@ stub NdrMesSimpleTypeEncode
+@ stub NdrMesTypeAlignSize2
+@ stub NdrMesTypeAlignSize
+@ stub NdrMesTypeDecode2
+@ stub NdrMesTypeDecode
+@ stub NdrMesTypeEncode2
+@ stub NdrMesTypeEncode
+@ stub NdrMesTypeFree2
+@ stub NdrNonConformantStringBufferSize
+@ stub NdrNonConformantStringMarshall
+@ stub NdrNonConformantStringMemorySize
+@ stub NdrNonConformantStringUnmarshall
+@ stub NdrNonEncapsulatedUnionBufferSize
+@ stub NdrNonEncapsulatedUnionFree
+@ stub NdrNonEncapsulatedUnionMarshall
+@ stub NdrNonEncapsulatedUnionMemorySize
+@ stub NdrNonEncapsulatedUnionUnmarshall
+@ stub NdrNsGetBuffer
+@ stub NdrNsSendReceive
+@ stdcall NdrOleAllocate(long)
+@ stdcall NdrOleFree(ptr)
+@ stub NdrOutInit # wxp
+@ stub NdrPartialIgnoreClientBufferSize # wxp
+@ stub NdrPartialIgnoreClientMarshall # wxp
+@ stub NdrPartialIgnoreServerInitialize # wxp
+@ stub NdrPartialIgnoreServerUnmarshall # wxp
+@ stub NdrPipePull
+@ stub NdrPipePush
+@ stub NdrPipeSendReceive
+@ stub NdrPipesDone
+@ stub NdrPipesInitialize
+@ stdcall NdrPointerBufferSize(ptr ptr ptr)
+@ stdcall NdrPointerFree(ptr ptr ptr)
+@ stdcall NdrPointerMarshall(ptr ptr ptr)
+@ stdcall NdrPointerMemorySize(ptr ptr)
+@ stdcall NdrPointerUnmarshall(ptr ptr ptr long)
+@ stdcall NdrProxyErrorHandler(long)
+@ stdcall NdrProxyFreeBuffer(ptr ptr)
+@ stdcall NdrProxyGetBuffer(ptr ptr)
+@ stdcall NdrProxyInitialize(ptr ptr ptr ptr long)
+@ stdcall NdrProxySendReceive(ptr ptr)
+@ stub NdrRangeUnmarshall
+@ stub NdrRpcSmClientAllocate
+@ stub NdrRpcSmClientFree
+@ stub NdrRpcSmSetClientToOsf
+@ stub NdrRpcSsDefaultAllocate
+@ stub NdrRpcSsDefaultFree
+@ stub NdrRpcSsDisableAllocate
+@ stub NdrRpcSsEnableAllocate
+@ stdcall NdrSendReceive(ptr ptr)
+@ stub NdrServerCall2
+@ stub NdrServerCall
+@ stub NdrServerContextMarshall
+@ stub NdrServerContextNewMarshall # wxp
+@ stub NdrServerContextNewUnmarshall # wxp
+@ stub NdrServerContextUnmarshall
+@ stub NdrServerInitialize
+@ stub NdrServerInitializeMarshall
+@ stdcall NdrServerInitializeNew(ptr ptr ptr)
+@ stub NdrServerInitializePartial # wxp
+@ stub NdrServerInitializeUnmarshall
+@ stub NdrServerMarshall
+@ stub NdrServerUnmarshall
+@ stdcall NdrSimpleStructBufferSize(ptr ptr ptr)
+@ stdcall NdrSimpleStructFree(ptr ptr ptr)
+@ stdcall NdrSimpleStructMarshall(ptr ptr ptr)
+@ stdcall NdrSimpleStructMemorySize(ptr ptr)
+@ stdcall NdrSimpleStructUnmarshall(ptr ptr ptr long)
+@ stdcall NdrSimpleTypeMarshall(ptr ptr long)
+@ stdcall NdrSimpleTypeUnmarshall(ptr ptr long)
+@ stub NdrStubCall2
+@ stub NdrStubCall
+@ stub NdrStubForwardingFunction
+@ stdcall NdrStubGetBuffer(ptr ptr ptr)
+@ stdcall NdrStubInitialize(ptr ptr ptr ptr)
+@ stub NdrStubInitializeMarshall
+@ stub NdrTypeFlags # wxp
+@ stub NdrTypeFree # wxp
+@ stub NdrTypeMarshall # wxp
+@ stub NdrTypeSize # wxp
+@ stub NdrTypeUnmarshall # wxp
+@ stub NdrUnmarshallBasetypeInline # wxp
+@ stdcall NdrUserMarshalBufferSize(ptr ptr ptr)
+@ stdcall NdrUserMarshalFree(ptr ptr ptr)
+@ stdcall NdrUserMarshalMarshall(ptr ptr ptr)
+@ stdcall NdrUserMarshalMemorySize(ptr ptr)
+@ stub NdrUserMarshalSimpleTypeConvert
+@ stdcall NdrUserMarshalUnmarshall(ptr ptr ptr long)
+@ stub NdrVaryingArrayBufferSize
+@ stub NdrVaryingArrayFree
+@ stub NdrVaryingArrayMarshall
+@ stub NdrVaryingArrayMemorySize
+@ stub NdrVaryingArrayUnmarshall
+@ stub NdrXmitOrRepAsBufferSize
+@ stub NdrXmitOrRepAsFree
+@ stub NdrXmitOrRepAsMarshall
+@ stub NdrXmitOrRepAsMemorySize
+@ stub NdrXmitOrRepAsUnmarshall
+@ stub NdrpCreateProxy # wxp
+@ stub NdrpCreateStub # wxp
+@ stub NdrpGetProcFormatString # wxp
+@ stub NdrpGetTypeFormatString # wxp
+@ stub NdrpGetTypeGenCookie # wxp
+@ stub NdrpMemoryIncrement # wxp
+@ stub NdrpReleaseTypeFormatString # wxp
+@ stub NdrpReleaseTypeGenCookie # wxp
+@ stub NdrpSetRpcSsDefaults
+@ stub NdrpVarVtOfTypeDesc # wxp
+@ stub PerformRpcInitialization
 @ stub RpcAbortAsyncCall
 @ stub RpcAsyncAbortCall
 @ stub RpcAsyncCancelCall
@@ -27,21 +374,21 @@
 @ stdcall RpcBindingFromStringBindingA(str  ptr)
 @ stdcall RpcBindingFromStringBindingW(wstr ptr)
 @ stub RpcBindingInqAuthClientA
-@ stub RpcBindingInqAuthClientW
 @ stub RpcBindingInqAuthClientExA
 @ stub RpcBindingInqAuthClientExW
+@ stub RpcBindingInqAuthClientW
 @ stub RpcBindingInqAuthInfoA
-@ stub RpcBindingInqAuthInfoW
 @ stub RpcBindingInqAuthInfoExA
 @ stub RpcBindingInqAuthInfoExW
+@ stub RpcBindingInqAuthInfoW
 @ stdcall RpcBindingInqObject(ptr ptr)
 @ stub RpcBindingInqOption
 @ stub RpcBindingReset
 @ stub RpcBindingServerFromClient
 @ stub RpcBindingSetAuthInfoA
-@ stub RpcBindingSetAuthInfoW
 @ stub RpcBindingSetAuthInfoExA
 @ stub RpcBindingSetAuthInfoExW
+@ stub RpcBindingSetAuthInfoW
 @ stdcall RpcBindingSetObject(ptr ptr)
 @ stub RpcBindingSetOption
 @ stdcall RpcBindingToStringBindingA(ptr ptr)
@@ -54,17 +401,17 @@
 @ stub RpcCertGeneratePrincipalNameW
 @ stub RpcCompleteAsyncCall
 @ stdcall RpcEpRegisterA(ptr ptr ptr str)
-@ stub RpcEpRegisterW
 @ stub RpcEpRegisterNoReplaceA
 @ stub RpcEpRegisterNoReplaceW
+@ stub RpcEpRegisterW
 @ stdcall RpcEpResolveBinding(ptr ptr)
 @ stdcall RpcEpUnregister(ptr ptr ptr)
 @ stub RpcErrorAddRecord # wxp
 @ stub RpcErrorClearInformation # wxp
 @ stub RpcErrorEndEnumeration # wxp
 @ stub RpcErrorGetNextRecord # wxp
-@ stub RpcErrorNumberOfRecords # wxp
 @ stub RpcErrorLoadErrorInfo # wxp
+@ stub RpcErrorNumberOfRecords # wxp
 @ stub RpcErrorResetEnumeration # wxp
 @ stub RpcErrorSaveErrorInfo # wxp
 @ stub RpcErrorStartEnumeration # wxp
@@ -122,9 +469,9 @@
 @ stdcall RpcServerListen(long long long)
 @ stdcall RpcServerRegisterAuthInfoA(str  long ptr ptr)
 @ stdcall RpcServerRegisterAuthInfoW(wstr long ptr ptr)
+@ stdcall RpcServerRegisterIf2(ptr ptr ptr long long long ptr)
 @ stdcall RpcServerRegisterIf(ptr ptr ptr)
 @ stdcall RpcServerRegisterIfEx(ptr ptr ptr long long ptr)
-@ stdcall RpcServerRegisterIf2(ptr ptr ptr long long long ptr)
 @ stub RpcServerTestCancel
 @ stdcall RpcServerUnregisterIf(ptr ptr long)
 @ stdcall RpcServerUnregisterIfEx(ptr ptr long)
@@ -133,17 +480,17 @@
 @ stub RpcServerUseAllProtseqsIf
 @ stub RpcServerUseAllProtseqsIfEx
 @ stdcall RpcServerUseProtseqA(str long ptr)
-@ stdcall RpcServerUseProtseqW(wstr long ptr)
-@ stub RpcServerUseProtseqExA
-@ stub RpcServerUseProtseqExW
 @ stdcall RpcServerUseProtseqEpA(str  long str  ptr)
-@ stdcall RpcServerUseProtseqEpW(wstr long wstr ptr)
 @ stdcall RpcServerUseProtseqEpExA(str  long str  ptr ptr)
 @ stdcall RpcServerUseProtseqEpExW(wstr long wstr ptr ptr)
+@ stdcall RpcServerUseProtseqEpW(wstr long wstr ptr)
+@ stub RpcServerUseProtseqExA
+@ stub RpcServerUseProtseqExW
 @ stub RpcServerUseProtseqIfA
-@ stub RpcServerUseProtseqIfW
 @ stub RpcServerUseProtseqIfExA
 @ stub RpcServerUseProtseqIfExW
+@ stub RpcServerUseProtseqIfW
+@ stdcall RpcServerUseProtseqW(wstr long ptr)
 @ stub RpcServerYield
 @ stub RpcSmAllocate
 @ stub RpcSmClientFree
@@ -176,23 +523,16 @@
 @ stdcall RpcStringFreeW(ptr)
 @ stub RpcTestCancel
 @ stub RpcUserFree # wxp
-
-@ stub TowerConstruct
-@ stub TowerExplode
-
 @ stub SimpleTypeAlignment # wxp
 @ stub SimpleTypeBufferSize # wxp
 @ stub SimpleTypeMemorySize # wxp
-
-@ stub pfnFreeRoutines # wxp
-@ stub pfnMarshallRouteines # wxp
-@ stub pfnSizeRoutines # wxp
-@ stub pfnUnmarshallRouteines # wxp
-
+@ stub StartServiceIfNecessary # win9x
+@ stub TowerConstruct
+@ stub TowerExplode
 @ stdcall UuidCompare(ptr ptr ptr)
 @ stdcall UuidCreate(ptr)
-@ stdcall UuidCreateSequential(ptr) # win 2000
 @ stdcall UuidCreateNil(ptr)
+@ stdcall UuidCreateSequential(ptr) # win 2000
 @ stdcall UuidEqual(ptr ptr ptr)
 @ stdcall UuidFromStringA(str ptr)
 @ stdcall UuidFromStringW(wstr ptr)
@@ -200,252 +540,6 @@
 @ stdcall UuidIsNil(ptr ptr)
 @ stdcall UuidToStringA(ptr ptr)
 @ stdcall UuidToStringW(ptr ptr)
-
-@ stdcall CStdStubBuffer_QueryInterface(ptr ptr ptr)
-@ stdcall CStdStubBuffer_AddRef(ptr)
-@ stdcall CStdStubBuffer_Connect(ptr ptr)
-@ stdcall CStdStubBuffer_Disconnect(ptr)
-@ stdcall CStdStubBuffer_Invoke(ptr ptr ptr)
-@ stdcall CStdStubBuffer_IsIIDSupported(ptr ptr)
-@ stdcall CStdStubBuffer_CountRefs(ptr)
-@ stdcall CStdStubBuffer_DebugServerQueryInterface(ptr ptr)
-@ stdcall CStdStubBuffer_DebugServerRelease(ptr ptr)
-@ stdcall NdrCStdStubBuffer_Release(ptr ptr)
-@ stub NdrCStdStubBuffer2_Release
-
-@ stdcall IUnknown_QueryInterface_Proxy(ptr ptr ptr)
-@ stdcall IUnknown_AddRef_Proxy(ptr)
-@ stdcall IUnknown_Release_Proxy(ptr)
-
-@ stdcall NdrDllCanUnloadNow(ptr)
-@ stdcall NdrDllGetClassObject(ptr ptr ptr ptr ptr ptr)
-@ stdcall NdrDllRegisterProxy(long ptr ptr)
-@ stdcall NdrDllUnregisterProxy(long ptr ptr)
-
-@ stdcall NdrAllocate(ptr long)
-@ stub NdrAsyncClientCall
-@ stub NdrAsyncServerCall
-@ stdcall NdrClearOutParameters(ptr ptr ptr)
-@ stub NdrClientCall
-@ varargs NdrClientCall2(ptr ptr)
-@ stub NdrClientInitialize
-@ stdcall NdrClientInitializeNew(ptr ptr ptr long)
-@ stub NdrContextHandleInitialize
-@ stub NdrContextHandleSize
-@ stdcall NdrConvert(ptr ptr)
-@ stdcall NdrConvert2(ptr ptr long)
-@ stub NdrCorrelationFree
-@ stub NdrCorrelationInitialize
-@ stub NdrCorrelationPass
-@ stub CreateServerInterfaceFromStub # wxp
-@ stub NdrDcomAsyncClientCall
-@ stub NdrDcomAsyncStubCall
-@ stdcall NdrFreeBuffer(ptr)
-@ stub NdrFullPointerFree
-@ stub NdrFullPointerInsertRefId
-@ stub NdrFullPointerQueryPointer
-@ stub NdrFullPointerQueryRefId
-@ stub NdrFullPointerXlatFree
-@ stub NdrFullPointerXlatInit
-@ stdcall NdrGetBuffer(ptr long ptr)
-@ stub NdrGetDcomProtocolVersion
-@ stub NdrGetSimpleTypeBufferAlignment # wxp
-@ stub NdrGetSimpleTypeBufferSize # wxp
-@ stub NdrGetSimpleTypeMemorySize # wxp
-@ stub NdrGetTypeFlags # wxp
-@ stub NdrGetPartialBuffer
-@ stub NdrGetPipeBuffer
-@ stub NdrGetUserMarshallInfo
-@ stub NdrIsAppDoneWithPipes
-@ stub NdrMapCommAndFaultStatus
-@ stub NdrMarkNextActivePipe
-@ stub NdrMesProcEncodeDecode
-@ stub NdrMesProcEncodeDecode2
-@ stub NdrMesSimpleTypeAlignSize
-@ stub NdrMesSimpleTypeDecode
-@ stub NdrMesSimpleTypeEncode
-@ stub NdrMesTypeAlignSize
-@ stub NdrMesTypeAlignSize2
-@ stub NdrMesTypeDecode
-@ stub NdrMesTypeDecode2
-@ stub NdrMesTypeEncode
-@ stub NdrMesTypeEncode2
-@ stub NdrMesTypeFree2
-@ stub NdrNsGetBuffer
-@ stub NdrNsSendReceive
-@ stdcall NdrOleAllocate(long)
-@ stdcall NdrOleFree(ptr)
-@ stub NdrOutInit # wxp
-@ stub NdrPartialIgnoreClientBufferSize # wxp
-@ stub NdrPartialIgnoreClientMarshall # wxp
-@ stub NdrPartialIgnoreServerInitialize # wxp
-@ stub NdrPartialIgnoreServerUnmarshall # wxp
-@ stub NdrPipePull
-@ stub NdrPipePush
-@ stub NdrPipeSendReceive
-@ stub NdrPipesDone
-@ stub NdrPipesInitialize
-@ stdcall NdrProxyErrorHandler(long)
-@ stdcall NdrProxyFreeBuffer(ptr ptr)
-@ stdcall NdrProxyGetBuffer(ptr ptr)
-@ stdcall NdrProxyInitialize(ptr ptr ptr ptr long)
-@ stdcall NdrProxySendReceive(ptr ptr)
-@ stub NdrRangeUnmarshall
-@ stub NdrRpcSmClientAllocate
-@ stub NdrRpcSmClientFree
-@ stub NdrRpcSmSetClientToOsf
-@ stub NdrRpcSsDefaultAllocate
-@ stub NdrRpcSsDefaultFree
-@ stub NdrRpcSsDisableAllocate
-@ stub NdrRpcSsEnableAllocate
-@ stdcall NdrSendReceive(ptr ptr)
-@ stub NdrServerCall
-@ stub NdrServerCall2
-@ stub NdrStubCall
-@ stub NdrStubCall2
-@ stub NdrStubForwardingFunction
-@ stdcall NdrStubGetBuffer(ptr ptr ptr)
-@ stdcall NdrStubInitialize(ptr ptr ptr ptr)
-@ stub NdrStubInitializeMarshall
-@ stub NdrpCreateProxy # wxp
-@ stub NdrpCreateStub # wxp
-@ stub NdrpGetProcFormatString # wxp
-@ stub NdrpGetTypeFormatString # wxp
-@ stub NdrpGetTypeGenCookie # wxp
-@ stub NdrpMemoryIncrement # wxp
-@ stub NdrpReleaseTypeFormatString # wxp
-@ stub NdrpReleaseTypeGenCookie # wxp
-@ stub NdrpSetRpcSsDefaults
-@ stub NdrpVarVtOfTypeDesc # wxp
[truncated at 1000 lines; 260 more skipped]