[PATCH] ntdll: Allow explicitly specified asm.v2 namespace for "trustInfo"

Nikolay Sivov nsivov at codeweavers.com
Tue Mar 6 11:06:13 CST 2018


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/kernel32/tests/actctx.c | 26 ++++++++++++++++++++++++++
 dlls/ntdll/actctx.c          | 14 +++++++-------
 2 files changed, 33 insertions(+), 7 deletions(-)

diff --git a/dlls/kernel32/tests/actctx.c b/dlls/kernel32/tests/actctx.c
index 263fe3997c..9aa081f705 100644
--- a/dlls/kernel32/tests/actctx.c
+++ b/dlls/kernel32/tests/actctx.c
@@ -299,6 +299,18 @@ static const char manifest9[] =
 "</trustInfo>"
 "</assembly>";
 
+static const char manifest10[] =
+"<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" xmlns:asmv2=\"urn:schemas-microsoft-com:asm.v2\" manifestVersion=\"1.0\">"
+"<assemblyIdentity version=\"1.0.0.0\"  name=\"Wine.Test\" type=\"win32\"></assemblyIdentity>"
+"<asmv2:trustInfo>"
+"    <asmv2:security>"
+"        <asmv2:requestedPrivileges>"
+"            <asmv2:requestedExecutionLevel level=\"requireAdministrator\" uiAccess=\"true\"></asmv2:requestedExecutionLevel>"
+"        </asmv2:requestedPrivileges>"
+"    </asmv2:security>"
+"</asmv2:trustInfo>"
+"</assembly>";
+
 static const char testdep_manifest1[] =
 "<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersion=\"1.0\">"
 "<assemblyIdentity type=\"win32\" name=\"testdep\" version=\"6.5.4.3\" processorArchitecture=\"" ARCH "\"/>"
@@ -2218,6 +2230,20 @@ static void test_actctx(void)
     else
         skip("Could not create manifest file 9\n");
 
+    if(create_manifest_file("test10.manifest", manifest10, -1, NULL, NULL)) {
+        handle = test_create("test10.manifest");
+        ok(handle != INVALID_HANDLE_VALUE, "handle == INVALID_HANDLE_VALUE, error %u\n", GetLastError());
+        DeleteFileA("test10.manifest");
+        DeleteFileA("testdep.manifest");
+        if(handle != INVALID_HANDLE_VALUE)
+        {
+            test_runlevel_info(handle, &runlevel_info8, __LINE__);
+            pReleaseActCtx(handle);
+        }
+    }
+    else
+        skip("Could not create manifest file 10\n");
+
     trace("manifest4\n");
 
     if(!create_manifest_file("test4.manifest", manifest4, -1, NULL, NULL)) {
diff --git a/dlls/ntdll/actctx.c b/dlls/ntdll/actctx.c
index 27d6ad864c..14d71bc7da 100644
--- a/dlls/ntdll/actctx.c
+++ b/dlls/ntdll/actctx.c
@@ -2385,7 +2385,7 @@ static BOOL parse_requested_execution_level_elem(xmlbuf_t* xmlbuf, struct assemb
 
     while (ret && (ret = next_xml_elem(xmlbuf, &elem)))
     {
-        if (xmlstr_cmp_end(&elem, requestedExecutionLevelW))
+        if (xml_elem_cmp_end(&elem, requestedExecutionLevelW, asmv2W))
         {
             ret = parse_end_element(xmlbuf);
             break;
@@ -2407,12 +2407,12 @@ static BOOL parse_requested_privileges_elem(xmlbuf_t* xmlbuf, struct assembly* a
 
     while (ret && (ret = next_xml_elem(xmlbuf, &elem)))
     {
-        if (xmlstr_cmp_end(&elem, requestedPrivilegesW))
+        if (xml_elem_cmp_end(&elem, requestedPrivilegesW, asmv2W))
         {
             ret = parse_end_element(xmlbuf);
             break;
         }
-        else if (xmlstr_cmp(&elem, requestedExecutionLevelW))
+        else if (xml_elem_cmp(&elem, requestedExecutionLevelW, asmv2W))
             ret = parse_requested_execution_level_elem(xmlbuf, assembly, acl);
         else
         {
@@ -2431,12 +2431,12 @@ static BOOL parse_security_elem(xmlbuf_t *xmlbuf, struct assembly *assembly, str
 
     while (ret && (ret = next_xml_elem(xmlbuf, &elem)))
     {
-        if (xmlstr_cmp_end(&elem, securityW))
+        if (xml_elem_cmp_end(&elem, securityW, asmv2W))
         {
             ret = parse_end_element(xmlbuf);
             break;
         }
-        else if (xmlstr_cmp(&elem, requestedPrivilegesW))
+        else if (xml_elem_cmp(&elem, requestedPrivilegesW, asmv2W))
             ret = parse_requested_privileges_elem(xmlbuf, assembly, acl);
         else
         {
@@ -2455,12 +2455,12 @@ static BOOL parse_trust_info_elem(xmlbuf_t *xmlbuf, struct assembly *assembly, s
 
     while (ret && (ret = next_xml_elem(xmlbuf, &elem)))
     {
-        if (xmlstr_cmp_end(&elem, trustInfoW))
+        if (xml_elem_cmp_end(&elem, trustInfoW, asmv2W))
         {
             ret = parse_end_element(xmlbuf);
             break;
         }
-        else if (xmlstr_cmp(&elem, securityW))
+        else if (xml_elem_cmp(&elem, securityW, asmv2W))
             ret = parse_security_elem(xmlbuf, assembly, acl);
         else
         {
-- 
2.16.1




More information about the wine-devel mailing list