Nikolay Sivov : ntdll: For typelib and COM class sections point global data to module names.

Alexandre Julliard julliard at winehq.org
Tue Sep 3 13:38:03 CDT 2013


Module: wine
Branch: master
Commit: 44d8f6a35a1e559315b606007c162b15322477ce
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=44d8f6a35a1e559315b606007c162b15322477ce

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Mon Sep  2 11:03:19 2013 +0400

ntdll: For typelib and COM class sections point global data to module names.

---

 dlls/kernel32/tests/actctx.c |   13 +++++++++----
 dlls/ntdll/actctx.c          |    8 ++++----
 2 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/dlls/kernel32/tests/actctx.c b/dlls/kernel32/tests/actctx.c
index 213674a..def61da 100644
--- a/dlls/kernel32/tests/actctx.c
+++ b/dlls/kernel32/tests/actctx.c
@@ -1148,6 +1148,7 @@ static void test_find_com_redirection(HANDLE handle, const GUID *clsid, const GU
 {
     struct comclassredirect_data *comclass, *comclass2;
     ACTCTX_SECTION_KEYED_DATA data, data2;
+    struct guidsection_header *header;
     BOOL ret;
 
     memset(&data, 0xfe, sizeof(data));
@@ -1207,11 +1208,11 @@ static void test_find_com_redirection(HANDLE handle, const GUID *clsid, const GU
                 ok_(__FILE__, line)(comclass->miscstatusdocprint != 0, "got miscstatusdocprint 0x%08x\n", comclass->miscstatusdocprint);
         }
     }
-todo_wine {
-    ok_(__FILE__, line)(data.lpSectionGlobalData != NULL, "data.lpSectionGlobalData == NULL\n");
-    ok_(__FILE__, line)(data.ulSectionGlobalDataLength > 0, "data.ulSectionGlobalDataLength=%u\n",
+
+    header = (struct guidsection_header*)data.lpSectionBase;
+    ok_(__FILE__, line)(data.lpSectionGlobalData == ((BYTE*)header + header->names_offset), "data.lpSectionGlobalData == NULL\n");
+    ok_(__FILE__, line)(data.ulSectionGlobalDataLength == header->names_len, "data.ulSectionGlobalDataLength=%u\n",
        data.ulSectionGlobalDataLength);
-}
     ok_(__FILE__, line)(data.lpSectionBase != NULL, "data.lpSectionBase == NULL\n");
     ok_(__FILE__, line)(data.ulSectionTotalLength > 0, "data.ulSectionTotalLength=%u\n",
        data.ulSectionTotalLength);
@@ -1474,6 +1475,10 @@ static void test_typelib_section(void)
     ok(data.ulSectionTotalLength == data2.ulSectionTotalLength, "got %u, %u\n", data.ulSectionTotalLength,
         data2.ulSectionTotalLength);
 
+    ok(data.lpSectionGlobalData == ((BYTE*)section + section->names_offset), "data.lpSectionGlobalData == NULL\n");
+    ok(data.ulSectionGlobalDataLength == section->names_len, "data.ulSectionGlobalDataLength=%u\n",
+       data.ulSectionGlobalDataLength);
+
     /* test some actual data */
     tlib = (struct tlibredirect_data*)data.lpData;
     ok(tlib->size == sizeof(*tlib), "got %d\n", tlib->size);
diff --git a/dlls/ntdll/actctx.c b/dlls/ntdll/actctx.c
index a172d59..6458b06 100644
--- a/dlls/ntdll/actctx.c
+++ b/dlls/ntdll/actctx.c
@@ -3294,8 +3294,8 @@ static NTSTATUS find_tlib_redirection(ACTIVATION_CONTEXT* actctx, const GUID *gu
     data->lpData = tlib;
     /* full length includes string length with nulls */
     data->ulLength = tlib->size + tlib->help_len + sizeof(WCHAR);
-    data->lpSectionGlobalData = NULL;
-    data->ulSectionGlobalDataLength = 0;
+    data->lpSectionGlobalData = (BYTE*)actctx->tlib_section + actctx->tlib_section->names_offset;
+    data->ulSectionGlobalDataLength = actctx->tlib_section->names_len;
     data->lpSectionBase = actctx->tlib_section;
     data->ulSectionTotalLength = RtlSizeHeap( GetProcessHeap(), 0, actctx->tlib_section );
     data->hActCtx = NULL;
@@ -3517,8 +3517,8 @@ static NTSTATUS find_comserver_redirection(ACTIVATION_CONTEXT* actctx, const GUI
     data->lpData = comclass;
     /* full length includes string length with nulls */
     data->ulLength = comclass->size + comclass->progid_len + sizeof(WCHAR);
-    data->lpSectionGlobalData = NULL;
-    data->ulSectionGlobalDataLength = 0;
+    data->lpSectionGlobalData = (BYTE*)actctx->comserver_section + actctx->comserver_section->names_offset;
+    data->ulSectionGlobalDataLength = actctx->comserver_section->names_len;
     data->lpSectionBase = actctx->comserver_section;
     data->ulSectionTotalLength = RtlSizeHeap( GetProcessHeap(), 0, actctx->comserver_section );
     data->hActCtx = NULL;




More information about the wine-cvs mailing list