Robert Shearman : rpcrt4: Use the documented NDR_PROC_HEADER_EXTS structure .

Alexandre Julliard julliard at wine.codeweavers.com
Thu Apr 20 08:45:56 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: 98facf4d0fb6296a73b4d4b0650e41a73f688f90
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=98facf4d0fb6296a73b4d4b0650e41a73f688f90

Author: Robert Shearman <rob at codeweavers.com>
Date:   Thu Apr 20 11:44:41 2006 +0100

rpcrt4: Use the documented NDR_PROC_HEADER_EXTS structure.

Use the documented NDR_PROC_HEADER_EXTS structure instead of the
current NDR_PROC_EXTENSIONS structure currently in ndr_stubless.c.

---

 dlls/rpcrt4/ndr_stubless.c |   69 ++++++++++----------------------------------
 include/ndrtypes.h         |   55 +++++++++++++++++++++++++++++++++++
 include/wine/rpcfc.h       |    5 ---
 3 files changed, 71 insertions(+), 58 deletions(-)

diff --git a/dlls/rpcrt4/ndr_stubless.c b/dlls/rpcrt4/ndr_stubless.c
index 442e4fe..0131034 100644
--- a/dlls/rpcrt4/ndr_stubless.c
+++ b/dlls/rpcrt4/ndr_stubless.c
@@ -204,43 +204,6 @@ typedef struct _NDR_PROC_PARTIAL_OIF_HEA
     unsigned char number_of_params;
 } NDR_PROC_PARTIAL_OIF_HEADER;
 
-/* Windows 2000 extensions */
-typedef struct _NDR_PROC_EXTENSION
-{
-    /* size in bytes of all following extensions */
-    unsigned char extension_version;
-
-    /* extension flags:
-     * HasNewCorrDesc = 0x01 - indicates new correlation descriptors in use
-     * ClientCorrCheck = 0x02 - client needs correlation check
-     * ServerCorrCheck = 0x04 - server needs correlation check
-     * HasNotify = 0x08 - should call MIDL [notify] routine @ NotifyIndex
-     * HasNotify2 = 0x10 - should call MIDL [notify_flag] routine @ 
-     *   NotifyIndex
-     */
-    unsigned char ext_flags;
-
-    /* client cache size hint */
-    unsigned short ClientCorrHint;
-
-    /* server cache size hint */
-    unsigned short ServerCorrHint;
-
-    /* index of routine in MIDL_STUB_DESC::NotifyRoutineTable to call if
-     * HasNotify or HasNotify2 flag set */
-    unsigned short NotifyIndex;
-} NDR_PROC_EXTENSION;
-
-/* usually generated only on IA64 */
-typedef struct _NDR_PROC_EXTENSION_64
-{
-    NDR_PROC_EXTENSION ext;
-
-    /* needed only on IA64 to cope with float/register loading */
-    unsigned short FloatDoubleMask;
-} NDR_PROC_EXTENSION_64;
-
-
 typedef struct _NDR_PARAM_OI_BASETYPE
 {
     /* parameter direction. One of:
@@ -431,8 +394,8 @@ LONG_PTR WINAPIV NdrClientCall2(PMIDL_ST
     unsigned short i;
     /* cache of Oif_flags from v2 procedure header */
     INTERPRETER_OPT_FLAGS Oif_flags = { 0 };
-    /* cache of extension flags from NDR_PROC_EXTENSION */
-    unsigned char ext_flags = 0;
+    /* cache of extension flags from NDR_PROC_HEADER_EXTS */
+    INTERPRETER_OPT_FLAGS2 ext_flags = { 0 };
     /* the type of pass we are currently doing */
     int phase;
     /* header for procedure string */
@@ -560,10 +523,10 @@ LONG_PTR WINAPIV NdrClientCall2(PMIDL_ST
 
     if (Oif_flags.HasExtensions)
     {
-        NDR_PROC_EXTENSION * pExtensions =
-            (NDR_PROC_EXTENSION *)&pFormat[current_offset];
-        ext_flags = pExtensions->ext_flags;
-        current_offset += pExtensions->extension_version;
+        NDR_PROC_HEADER_EXTS * pExtensions =
+            (NDR_PROC_HEADER_EXTS *)&pFormat[current_offset];
+        ext_flags = pExtensions->Flags2;
+        current_offset += pExtensions->Size;
     }
 
     if (pProcHeader->Oi_flags & RPC_FC_PROC_OIF_OBJECT)
@@ -602,7 +565,7 @@ #endif
         /* init pipes package */
         /* NdrPipesInitialize(...) */
     }
-    if (ext_flags & RPC_FC_PROC_EXT_NEWCORRDESC)
+    if (ext_flags.HasNewCorrDesc)
     {
         /* initialize extra correlation package */
         FIXME("new correlation description not implemented\n");
@@ -887,7 +850,7 @@ #endif
 
     /* FIXME: unbind the binding handle */
 
-    if (ext_flags & RPC_FC_PROC_EXT_NEWCORRDESC)
+    if (ext_flags.HasNewCorrDesc)
     {
         /* free extra correlation package */
         /* NdrCorrelationFree(&stubMsg); */
@@ -997,8 +960,8 @@ long WINAPI NdrStubCall2(
     unsigned short i;
     /* cache of Oif_flags from v2 procedure header */
     INTERPRETER_OPT_FLAGS Oif_flags = { 0 };
-    /* cache of extension flags from NDR_PROC_EXTENSION */
-    unsigned char ext_flags = 0;
+    /* cache of extension flags from NDR_PROC_HEADER_EXTS */
+    INTERPRETER_OPT_FLAGS2 ext_flags = { 0 };
     /* the type of pass we are currently doing */
     int phase;
     /* header for procedure string */
@@ -1093,10 +1056,10 @@ long WINAPI NdrStubCall2(
 
     if (Oif_flags.HasExtensions)
     {
-        NDR_PROC_EXTENSION * pExtensions =
-            (NDR_PROC_EXTENSION *)&pFormat[current_offset];
-        ext_flags = pExtensions->ext_flags;
-        current_offset += pExtensions->extension_version;
+        NDR_PROC_HEADER_EXTS * pExtensions =
+            (NDR_PROC_HEADER_EXTS *)&pFormat[current_offset];
+        ext_flags = pExtensions->Flags2;
+        current_offset += pExtensions->Size;
     }
 
     if (pProcHeader->Oi_flags & RPC_FC_PROC_OIF_OBJECT)
@@ -1131,7 +1094,7 @@ #endif
         /* init pipes package */
         /* NdrPipesInitialize(...) */
     }
-    if (ext_flags & RPC_FC_PROC_EXT_NEWCORRDESC)
+    if (ext_flags.HasNewCorrDesc)
     {
         /* initialize extra correlation package */
         FIXME("new correlation description not implemented\n");
@@ -1441,7 +1404,7 @@ #endif
 
     pRpcMsg->BufferLength = (unsigned int)(stubMsg.Buffer - (unsigned char *)pRpcMsg->Buffer);
 
-    if (ext_flags & RPC_FC_PROC_EXT_NEWCORRDESC)
+    if (ext_flags.HasNewCorrDesc)
     {
         /* free extra correlation package */
         /* NdrCorrelationFree(&stubMsg); */
diff --git a/include/ndrtypes.h b/include/ndrtypes.h
index d7796ee..1cc91ad 100644
--- a/include/ndrtypes.h
+++ b/include/ndrtypes.h
@@ -71,4 +71,59 @@ typedef struct
      *  procedure. */
 } INTERPRETER_OPT_FLAGS, *PINTERPRETER_OPT_FLAGS;
 
+typedef struct
+{
+    unsigned char HasNewCorrDesc : 1; /* 0x01 - indicates new correlation
+     *  descriptors in use. */
+    unsigned char ClientCorrCheck : 1; /* 0x02 - client needs correlation
+     *  check. */
+    unsigned char ServerCorrCheck : 1; /* 0x04 - server needs correlation
+     *  check. */
+    unsigned char HasNotify : 1; /* 0x08 - should call MIDL [notify]
+     *  routine @ NotifyIndex. */
+    unsigned char HasNotify2 : 1; /* 0x10 - should call MIDL [notify_flag] routine @ 
+     *  NotifyIndex. */
+    unsigned char Unused : 3;
+} INTERPRETER_OPT_FLAGS2, *PINTERPRETER_OPT_FLAGS2;
+
+/* Win2000 extensions */
+typedef struct
+{
+    /* size in bytes of all following extensions */
+    unsigned char Size;
+
+    INTERPRETER_OPT_FLAGS2 Flags2;
+
+    /* client cache size hint */
+    unsigned short ClientCorrHint;
+
+    /* server cache size hint */
+    unsigned short ServerCorrHint;
+
+    /* index of routine in MIDL_STUB_DESC::NotifyRoutineTable to call if
+     * HasNotify or HasNotify2 flag set */
+    unsigned short NotifyIndex;
+} NDR_PROC_HEADER_EXTS;
+
+typedef struct
+{
+    /* size in bytes of all following extensions */
+    unsigned char Size;
+
+    INTERPRETER_OPT_FLAGS2 Flags2;
+
+    /* client cache size hint */
+    unsigned short ClientCorrHint;
+
+    /* server cache size hint */
+    unsigned short ServerCorrHint;
+
+    /* index of routine in MIDL_STUB_DESC::NotifyRoutineTable to call if
+     * HasNotify or HasNotify2 flag set */
+    unsigned short NotifyIndex;
+
+    /* needed only on IA64 to cope with float/register loading */
+    unsigned short FloatArgMask;
+} NDR_PROC_HEADER_EXTS64;
+
 #endif
diff --git a/include/wine/rpcfc.h b/include/wine/rpcfc.h
index 5761a01..9e1003c 100644
--- a/include/wine/rpcfc.h
+++ b/include/wine/rpcfc.h
@@ -172,11 +172,6 @@ #define RPC_FC_PROC_PF_SIMPLEREF        
 #define RPC_FC_PROC_PF_DONTFREEINST     0x0200
 #define RPC_FC_PROC_PF_SAVEASYNC        0x0400
 #define RPC_FC_PROC_PF_SRVALLOCSIZE     0xe000 /* in 8 byte units */
-#define RPC_FC_PROC_EXT_NEWCORRDESC     0x01
-#define RPC_FC_PROC_EXT_CLIENTCORRCHECK 0x02
-#define RPC_FC_PROC_EXT_SERVERCORRCHECK 0x04
-#define RPC_FC_PROC_EXT_HASNOTIFY       0x08
-#define RPC_FC_PROC_EXT_HASNOTIFY2      0x10
 
 /* correlation types */
 #define RPC_FC_NORMAL_CONFORMANCE		0x00




More information about the wine-cvs mailing list