Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
fc144429
Commit
fc144429
authored
Mar 23, 2018
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ntdll: Add support for parsing application settings in manifests.
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
afef57f8
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
129 additions
and
0 deletions
+129
-0
actctx.c
dlls/ntdll/actctx.c
+127
-0
winnt.h
include/winnt.h
+2
-0
No files found.
dlls/ntdll/actctx.c
View file @
fc144429
...
...
@@ -464,6 +464,11 @@ struct entity
WCHAR
*
clsid
;
WCHAR
*
version
;
}
clrsurrogate
;
struct
{
WCHAR
*
name
;
WCHAR
*
value
;
}
settings
;
}
u
;
};
...
...
@@ -546,6 +551,7 @@ struct actctx_loader
static
const
WCHAR
asmv1W
[]
=
{
'a'
,
's'
,
'm'
,
'v'
,
'1'
,
':'
,
0
};
static
const
WCHAR
asmv2W
[]
=
{
'a'
,
's'
,
'm'
,
'v'
,
'2'
,
':'
,
0
};
static
const
WCHAR
asmv3W
[]
=
{
'a'
,
's'
,
'm'
,
'v'
,
'3'
,
':'
,
0
};
static
const
WCHAR
assemblyW
[]
=
{
'a'
,
's'
,
's'
,
'e'
,
'm'
,
'b'
,
'l'
,
'y'
,
0
};
static
const
WCHAR
assemblyIdentityW
[]
=
{
'a'
,
's'
,
's'
,
'e'
,
'm'
,
'b'
,
'l'
,
'y'
,
'I'
,
'd'
,
'e'
,
'n'
,
't'
,
'i'
,
't'
,
'y'
,
0
};
static
const
WCHAR
bindingRedirectW
[]
=
{
'b'
,
'i'
,
'n'
,
'd'
,
'i'
,
'n'
,
'g'
,
'R'
,
'e'
,
'd'
,
'i'
,
'r'
,
'e'
,
'c'
,
't'
,
0
};
...
...
@@ -635,6 +641,18 @@ static const WCHAR requestedExecutionLevelW[] = {'r','e','q','u','e','s','t','e'
static
const
WCHAR
requestedPrivilegesW
[]
=
{
'r'
,
'e'
,
'q'
,
'u'
,
'e'
,
's'
,
't'
,
'e'
,
'd'
,
'P'
,
'r'
,
'i'
,
'v'
,
'i'
,
'l'
,
'e'
,
'g'
,
'e'
,
's'
,
0
};
static
const
WCHAR
securityW
[]
=
{
's'
,
'e'
,
'c'
,
'u'
,
'r'
,
'i'
,
't'
,
'y'
,
0
};
static
const
WCHAR
trustInfoW
[]
=
{
't'
,
'r'
,
'u'
,
's'
,
't'
,
'I'
,
'n'
,
'f'
,
'o'
,
0
};
static
const
WCHAR
windowsSettingsW
[]
=
{
'w'
,
'i'
,
'n'
,
'd'
,
'o'
,
'w'
,
's'
,
'S'
,
'e'
,
't'
,
't'
,
'i'
,
'n'
,
'g'
,
's'
,
0
};
static
const
WCHAR
autoElevateW
[]
=
{
'a'
,
'u'
,
't'
,
'o'
,
'E'
,
'l'
,
'e'
,
'v'
,
'a'
,
't'
,
'e'
,
0
};
static
const
WCHAR
disableThemingW
[]
=
{
'd'
,
'i'
,
's'
,
'a'
,
'b'
,
'l'
,
'e'
,
'T'
,
'h'
,
'e'
,
'm'
,
'i'
,
'n'
,
'g'
,
0
};
static
const
WCHAR
disableWindowFilteringW
[]
=
{
'd'
,
'i'
,
's'
,
'a'
,
'b'
,
'l'
,
'e'
,
'W'
,
'i'
,
'n'
,
'd'
,
'o'
,
'w'
,
'F'
,
'i'
,
'l'
,
't'
,
'e'
,
'r'
,
'i'
,
'n'
,
'g'
,
0
};
static
const
WCHAR
dpiAwareW
[]
=
{
'd'
,
'p'
,
'i'
,
'A'
,
'w'
,
'a'
,
'r'
,
'e'
,
0
};
static
const
WCHAR
dpiAwarenessW
[]
=
{
'd'
,
'p'
,
'i'
,
'A'
,
'w'
,
'a'
,
'r'
,
'e'
,
'n'
,
'e'
,
's'
,
's'
,
0
};
static
const
WCHAR
gdiScalingW
[]
=
{
'g'
,
'd'
,
'i'
,
'S'
,
'c'
,
'a'
,
'l'
,
'i'
,
'n'
,
'g'
,
0
};
static
const
WCHAR
highResolutionScrollingAwareW
[]
=
{
'h'
,
'i'
,
'g'
,
'h'
,
'R'
,
'e'
,
's'
,
'o'
,
'l'
,
'u'
,
't'
,
'i'
,
'o'
,
'n'
,
'S'
,
'c'
,
'r'
,
'o'
,
'l'
,
'l'
,
'i'
,
'n'
,
'g'
,
'A'
,
'w'
,
'a'
,
'r'
,
'e'
,
0
};
static
const
WCHAR
longPathAwareW
[]
=
{
'l'
,
'o'
,
'n'
,
'g'
,
'P'
,
'a'
,
't'
,
'h'
,
'A'
,
'w'
,
'a'
,
'r'
,
'e'
,
0
};
static
const
WCHAR
magicFutureSettingW
[]
=
{
'm'
,
'a'
,
'g'
,
'i'
,
'c'
,
'F'
,
'u'
,
't'
,
'u'
,
'r'
,
'e'
,
'S'
,
'e'
,
't'
,
't'
,
'i'
,
'n'
,
'g'
,
0
};
static
const
WCHAR
printerDriverIsolationW
[]
=
{
'p'
,
'r'
,
'i'
,
'n'
,
't'
,
'e'
,
'r'
,
'D'
,
'r'
,
'i'
,
'v'
,
'e'
,
'r'
,
'I'
,
's'
,
'o'
,
'l'
,
'a'
,
't'
,
'i'
,
'o'
,
'n'
,
0
};
static
const
WCHAR
ultraHighResolutionScrollingAwareW
[]
=
{
'u'
,
'l'
,
't'
,
'r'
,
'a'
,
'H'
,
'i'
,
'g'
,
'h'
,
'R'
,
'e'
,
's'
,
'o'
,
'l'
,
'u'
,
't'
,
'i'
,
'o'
,
'n'
,
'S'
,
'c'
,
'r'
,
'o'
,
'l'
,
'l'
,
'i'
,
'n'
,
'g'
,
'A'
,
'w'
,
'a'
,
'r'
,
'e'
,
0
};
struct
olemisc_entry
{
...
...
@@ -899,6 +917,10 @@ static void free_entity_array(struct entity_array *array)
RtlFreeHeap
(
GetProcessHeap
(),
0
,
entity
->
u
.
clrsurrogate
.
clsid
);
RtlFreeHeap
(
GetProcessHeap
(),
0
,
entity
->
u
.
clrsurrogate
.
version
);
break
;
case
ACTIVATION_CONTEXT_SECTION_APPLICATION_SETTINGS
:
RtlFreeHeap
(
GetProcessHeap
(),
0
,
entity
->
u
.
settings
.
name
);
RtlFreeHeap
(
GetProcessHeap
(),
0
,
entity
->
u
.
settings
.
value
);
break
;
default:
FIXME
(
"Unknown entity kind %d
\n
"
,
entity
->
kind
);
}
...
...
@@ -2337,6 +2359,107 @@ static BOOL parse_compatibility_elem(xmlbuf_t* xmlbuf, struct assembly* assembly
return
ret
;
}
static
BOOL
parse_settings_elem
(
xmlbuf_t
*
xmlbuf
,
struct
assembly
*
assembly
,
struct
actctx_loader
*
acl
,
xmlstr_t
*
parent
)
{
xmlstr_t
elem
,
content
,
attr_name
,
attr_value
;
BOOL
end
=
FALSE
,
ret
=
TRUE
,
error
=
FALSE
;
struct
entity
*
entity
;
while
(
next_xml_attr
(
xmlbuf
,
&
attr_name
,
&
attr_value
,
&
error
,
&
end
))
{
if
(
xmlstr_cmp
(
&
attr_name
,
xmlnsW
))
continue
;
WARN
(
"unknown attr %s=%s
\n
"
,
debugstr_xmlstr
(
&
attr_name
),
debugstr_xmlstr
(
&
attr_value
)
);
}
if
(
error
)
return
FALSE
;
if
(
end
)
return
TRUE
;
if
(
!
parse_text_content
(
xmlbuf
,
&
content
))
return
FALSE
;
TRACE
(
"got %s %s
\n
"
,
debugstr_xmlstr
(
parent
),
debugstr_xmlstr
(
&
content
)
);
entity
=
add_entity
(
&
assembly
->
entities
,
ACTIVATION_CONTEXT_SECTION_APPLICATION_SETTINGS
);
if
(
!
entity
)
return
FALSE
;
entity
->
u
.
settings
.
name
=
xmlstrdupW
(
parent
);
entity
->
u
.
settings
.
value
=
xmlstrdupW
(
&
content
);
while
(
ret
&&
(
ret
=
next_xml_elem
(
xmlbuf
,
&
elem
)))
{
if
(
xmlstr_cmp_end
(
&
elem
,
entity
->
u
.
settings
.
name
))
{
ret
=
parse_end_element
(
xmlbuf
);
break
;
}
else
{
WARN
(
"unknown elem %s
\n
"
,
debugstr_xmlstr
(
&
elem
)
);
ret
=
parse_unknown_elem
(
xmlbuf
,
&
elem
);
}
}
return
ret
;
}
static
BOOL
parse_windows_settings_elem
(
xmlbuf_t
*
xmlbuf
,
struct
assembly
*
assembly
,
struct
actctx_loader
*
acl
)
{
xmlstr_t
elem
;
BOOL
ret
=
TRUE
;
while
(
ret
&&
(
ret
=
next_xml_elem
(
xmlbuf
,
&
elem
)))
{
if
(
xmlstr_cmp_end
(
&
elem
,
windowsSettingsW
))
{
ret
=
parse_end_element
(
xmlbuf
);
break
;
}
else
if
(
xmlstr_cmp
(
&
elem
,
autoElevateW
)
||
xmlstr_cmp
(
&
elem
,
disableThemingW
)
||
xmlstr_cmp
(
&
elem
,
disableWindowFilteringW
)
||
xmlstr_cmp
(
&
elem
,
dpiAwareW
)
||
xmlstr_cmp
(
&
elem
,
dpiAwarenessW
)
||
xmlstr_cmp
(
&
elem
,
gdiScalingW
)
||
xmlstr_cmp
(
&
elem
,
highResolutionScrollingAwareW
)
||
xmlstr_cmp
(
&
elem
,
longPathAwareW
)
||
xmlstr_cmp
(
&
elem
,
magicFutureSettingW
)
||
xmlstr_cmp
(
&
elem
,
printerDriverIsolationW
)
||
xmlstr_cmp
(
&
elem
,
ultraHighResolutionScrollingAwareW
))
{
ret
=
parse_settings_elem
(
xmlbuf
,
assembly
,
acl
,
&
elem
);
}
else
{
WARN
(
"unknown elem %s
\n
"
,
debugstr_xmlstr
(
&
elem
)
);
ret
=
parse_unknown_elem
(
xmlbuf
,
&
elem
);
}
}
return
ret
;
}
static
BOOL
parse_application_elem
(
xmlbuf_t
*
xmlbuf
,
struct
assembly
*
assembly
,
struct
actctx_loader
*
acl
)
{
xmlstr_t
elem
;
BOOL
ret
=
TRUE
;
while
(
ret
&&
(
ret
=
next_xml_elem
(
xmlbuf
,
&
elem
)))
{
if
(
xmlstr_cmp_end
(
&
elem
,
applicationW
))
{
ret
=
parse_end_element
(
xmlbuf
);
break
;
}
else
if
(
xmlstr_cmp
(
&
elem
,
windowsSettingsW
))
{
ret
=
parse_windows_settings_elem
(
xmlbuf
,
assembly
,
acl
);
}
else
{
WARN
(
"unknown elem %s
\n
"
,
debugstr_xmlstr
(
&
elem
)
);
ret
=
parse_unknown_elem
(
xmlbuf
,
&
elem
);
}
}
return
ret
;
}
static
BOOL
parse_requested_execution_level_elem
(
xmlbuf_t
*
xmlbuf
,
struct
assembly
*
assembly
,
struct
actctx_loader
*
acl
)
{
static
const
WCHAR
levelW
[]
=
{
'l'
,
'e'
,
'v'
,
'e'
,
'l'
,
0
};
...
...
@@ -2598,6 +2721,10 @@ static BOOL parse_assembly_elem(xmlbuf_t* xmlbuf, struct actctx_loader* acl,
{
ret
=
parse_compatibility_elem
(
xmlbuf
,
assembly
,
acl
);
}
else
if
(
xml_elem_cmp
(
&
elem
,
applicationW
,
asmv3W
))
{
ret
=
parse_application_elem
(
xmlbuf
,
assembly
,
acl
);
}
else
{
WARN
(
"unknown element %s
\n
"
,
debugstr_xmlstr
(
&
elem
));
...
...
include/winnt.h
View file @
fc144429
...
...
@@ -5807,6 +5807,8 @@ typedef enum _ACTIVATION_CONTEXT_INFO_CLASS {
#define ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION 7
#define ACTIVATION_CONTEXT_SECTION_GLOBAL_OBJECT_RENAME_TABLE 8
#define ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES 9
#define ACTIVATION_CONTEXT_SECTION_APPLICATION_SETTINGS 10
#define ACTIVATION_CONTEXT_SECTION_COMPATIBILITY_INFO 11
typedef
enum
_JOBOBJECTINFOCLASS
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment