22#include <wine/unicode.h>
28#define GetProcessHeap() RtlGetProcessHeap()
29#define GetCurrentProcess() NtCurrentProcess()
32#define FILE_END_OF_FILE_INFORMATION FILE_STANDARD_INFORMATION
33#define FileEndOfFileInformation FileStandardInformation
34#define RELATIVE_PATH RtlPathTypeRelative
35#define windows_dir SharedUserData->NtSystemRoot
36#define ARRAY_SIZE(a) (sizeof(a)/sizeof((a)[0]))
37#define wcsnicmp _wcsnicmp
38#define swprintf _snwprintf
39#define wcsicmp _wcsicmp
43#undef CREATEPROCESS_MANIFEST_RESOURCE_ID
45BOOLEAN RtlpNotAllowingMultipleActivation;
49#define ACTCTX_FLAGS_ALL (\
50 ACTCTX_FLAG_PROCESSOR_ARCHITECTURE_VALID |\
51 ACTCTX_FLAG_LANGID_VALID |\
52 ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID |\
53 ACTCTX_FLAG_RESOURCE_NAME_VALID |\
54 ACTCTX_FLAG_SET_PROCESS_DEFAULT |\
55 ACTCTX_FLAG_APPLICATION_NAME_VALID |\
56 ACTCTX_FLAG_SOURCE_IS_ASSEMBLYREF |\
57 ACTCTX_FLAG_HMODULE_VALID )
59#define ACTCTX_MAGIC 0xC07E3E11
60#define STRSECTION_MAGIC 0x64487353
61#define GUIDSECTION_MAGIC 0x64487347
63#define ACTCTX_FAKE_HANDLE ((HANDLE) 0xf00baa)
66#define RT_MANIFEST ((ULONG_PTR)24)
67#define CREATEPROCESS_MANIFEST_RESOURCE_ID ((ULONG_PTR)1)
106#define MAX_NAMESPACES 64
552typedef struct _ASSEMBLY_STORAGE_MAP_ENTRY
557} ASSEMBLY_STORAGE_MAP_ENTRY, *PASSEMBLY_STORAGE_MAP_ENTRY;
559typedef struct _ASSEMBLY_STORAGE_MAP
563 PASSEMBLY_STORAGE_MAP_ENTRY *AssemblyArray;
564} ASSEMBLY_STORAGE_MAP, *PASSEMBLY_STORAGE_MAP;
574 PACTIVATION_CONTEXT_DATA ActivationContextData;
575 PVOID NotificationRoutine;
577 ULONG SentNotifications[8];
578 ULONG DisabledNotifications[8];
579 ASSEMBLY_STORAGE_MAP StorageMap;
580 PASSEMBLY_STORAGE_MAP_ENTRY InlineStorageMapEntries;
581 ULONG StackTraceIndex;
582 PVOID StackTraces[4][4];
612#elif defined __x86_64__
616#elif defined __aarch64__
622static const WCHAR asmv1W[] = {
'u',
'r',
'n',
':',
's',
'c',
'h',
'e',
'm',
'a',
's',
'-',
'm',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
'-',
'c',
'o',
'm',
':',
'a',
's',
'm',
'.',
'v',
'1',0};
623static const WCHAR asmv2W[] = {
'u',
'r',
'n',
':',
's',
'c',
'h',
'e',
'm',
'a',
's',
'-',
'm',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
'-',
'c',
'o',
'm',
':',
'a',
's',
'm',
'.',
'v',
'2',0};
624static const WCHAR asmv3W[] = {
'u',
'r',
'n',
':',
's',
'c',
'h',
'e',
'm',
'a',
's',
'-',
'm',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
'-',
'c',
'o',
'm',
':',
'a',
's',
'm',
'.',
'v',
'3',0};
626static const WCHAR assemblyIdentityW[] = {
'a',
's',
's',
'e',
'm',
'b',
'l',
'y',
'I',
'd',
'e',
'n',
't',
'i',
't',
'y',0};
627static const WCHAR bindingRedirectW[] = {
'b',
'i',
'n',
'd',
'i',
'n',
'g',
'R',
'e',
'd',
'i',
'r',
'e',
'c',
't',0};
629static const WCHAR clrSurrogateW[] = {
'c',
'l',
'r',
'S',
'u',
'r',
'r',
'o',
'g',
'a',
't',
'e',0};
631static const WCHAR comInterfaceExternalProxyStubW[] = {
'c',
'o',
'm',
'I',
'n',
't',
'e',
'r',
'f',
'a',
'c',
'e',
'E',
'x',
't',
'e',
'r',
'n',
'a',
'l',
'P',
'r',
'o',
'x',
'y',
'S',
't',
'u',
'b',0};
632static const WCHAR comInterfaceProxyStubW[] = {
'c',
'o',
'm',
'I',
'n',
't',
'e',
'r',
'f',
'a',
'c',
'e',
'P',
'r',
'o',
'x',
'y',
'S',
't',
'u',
'b',0};
633static const WCHAR dependencyW[] = {
'd',
'e',
'p',
'e',
'n',
'd',
'e',
'n',
'c',
'y',0};
634static const WCHAR dependentAssemblyW[] = {
'd',
'e',
'p',
'e',
'n',
'd',
'e',
'n',
't',
'A',
's',
's',
'e',
'm',
'b',
'l',
'y',0};
635static const WCHAR descriptionW[] = {
'd',
'e',
's',
'c',
'r',
'i',
'p',
't',
'i',
'o',
'n',0};
639static const WCHAR noInheritableW[] = {
'n',
'o',
'I',
'n',
'h',
'e',
'r',
'i',
't',
'a',
'b',
'l',
'e',0};
641static const WCHAR windowClassW[] = {
'w',
'i',
'n',
'd',
'o',
'w',
'C',
'l',
'a',
's',
's',0};
648static const WCHAR manifestVersionW[] = {
'm',
'a',
'n',
'i',
'f',
'e',
's',
't',
'V',
'e',
'r',
's',
'i',
'o',
'n',0};
651static const WCHAR newVersionW[] = {
'n',
'e',
'w',
'V',
'e',
'r',
's',
'i',
'o',
'n',0};
652static const WCHAR oldVersionW[] = {
'o',
'l',
'd',
'V',
'e',
'r',
's',
'i',
'o',
'n',0};
654static const WCHAR processorArchitectureW[] = {
'p',
'r',
'o',
'c',
'e',
's',
's',
'o',
'r',
'A',
'r',
'c',
'h',
'i',
't',
'e',
'c',
't',
'u',
'r',
'e',0};
656static const WCHAR publicKeyTokenW[] = {
'p',
'u',
'b',
'l',
'i',
'c',
'K',
'e',
'y',
'T',
'o',
'k',
'e',
'n',0};
657static const WCHAR threadingmodelW[] = {
't',
'h',
'r',
'e',
'a',
'd',
'i',
'n',
'g',
'M',
'o',
'd',
'e',
'l',0};
665static const WCHAR restrictedW[] = {
'R',
'E',
'S',
'T',
'R',
'I',
'C',
'T',
'E',
'D',0};
668static const WCHAR hasdiskimageW[] = {
'H',
'A',
'S',
'D',
'I',
'S',
'K',
'I',
'M',
'A',
'G',
'E',0};
670static const WCHAR miscstatusW[] = {
'm',
'i',
's',
'c',
'S',
't',
'a',
't',
'u',
's',0};
671static const WCHAR miscstatusiconW[] = {
'm',
'i',
's',
'c',
'S',
't',
'a',
't',
'u',
's',
'I',
'c',
'o',
'n',0};
672static const WCHAR miscstatuscontentW[] = {
'm',
'i',
's',
'c',
'S',
't',
'a',
't',
'u',
's',
'C',
'o',
'n',
't',
'e',
'n',
't',0};
673static const WCHAR miscstatusthumbnailW[] = {
'm',
'i',
's',
'c',
'S',
't',
'a',
't',
'u',
's',
'T',
'h',
'u',
'm',
'b',
'n',
'a',
'i',
'l',0};
674static const WCHAR miscstatusdocprintW[] = {
'm',
'i',
's',
'c',
'S',
't',
'a',
't',
'u',
's',
'D',
'o',
'c',
'P',
'r',
'i',
'n',
't',0};
675static const WCHAR baseInterfaceW[] = {
'b',
'a',
's',
'e',
'I',
'n',
't',
'e',
'r',
'f',
'a',
'c',
'e',0};
676static const WCHAR nummethodsW[] = {
'n',
'u',
'm',
'M',
'e',
't',
'h',
'o',
'd',
's',0};
677static const WCHAR proxyStubClsid32W[] = {
'p',
'r',
'o',
'x',
'y',
'S',
't',
'u',
'b',
'C',
'l',
's',
'i',
'd',
'3',
'2',0};
678static const WCHAR runtimeVersionW[] = {
'r',
'u',
'n',
't',
'i',
'm',
'e',
'V',
'e',
'r',
's',
'i',
'o',
'n',0};
679static const WCHAR mscoreeW[] = {
'M',
'S',
'C',
'O',
'R',
'E',
'E',
'.',
'D',
'L',
'L',0};
680static const WCHAR mscoree2W[] = {
'm',
's',
'c',
'o',
'r',
'e',
'e',
'.',
'd',
'l',
'l',0};
682static const WCHAR activatewhenvisibleW[] = {
'a',
'c',
't',
'i',
'v',
'a',
't',
'e',
'w',
'h',
'e',
'n',
'v',
'i',
's',
'i',
'b',
'l',
'e',0};
683static const WCHAR actslikebuttonW[] = {
'a',
'c',
't',
's',
'l',
'i',
'k',
'e',
'b',
'u',
't',
't',
'o',
'n',0};
684static const WCHAR actslikelabelW[] = {
'a',
'c',
't',
's',
'l',
'i',
'k',
'e',
'l',
'a',
'b',
'e',
'l',0};
687static const WCHAR canlinkbyole1W[] = {
'c',
'a',
'n',
'l',
'i',
'n',
'k',
'b',
'y',
'o',
'l',
'e',
'1',0};
688static const WCHAR cantlinkinsideW[] = {
'c',
'a',
'n',
't',
'l',
'i',
'n',
'k',
'i',
'n',
's',
'i',
'd',
'e',0};
689static const WCHAR ignoreactivatewhenvisibleW[] = {
'i',
'g',
'n',
'o',
'r',
'e',
'a',
'c',
't',
'i',
'v',
'a',
't',
'e',
'w',
'h',
'e',
'n',
'v',
'i',
's',
'i',
'b',
'l',
'e',0};
691static const WCHAR insertnotreplaceW[] = {
'i',
'n',
's',
'e',
'r',
't',
'n',
'o',
't',
'r',
'e',
'p',
'l',
'a',
'c',
'e',0};
693static const WCHAR invisibleatruntimeW[] = {
'i',
'n',
'v',
'i',
's',
'i',
'b',
'l',
'e',
'a',
't',
'r',
'u',
'n',
't',
'i',
'm',
'e',0};
694static const WCHAR islinkobjectW[] = {
'i',
's',
'l',
'i',
'n',
'k',
'o',
'b',
'j',
'e',
'c',
't',0};
695static const WCHAR nouiactivateW[] = {
'n',
'o',
'u',
'i',
'a',
'c',
't',
'i',
'v',
'a',
't',
'e',0};
696static const WCHAR onlyiconicW[] = {
'o',
'n',
'l',
'y',
'i',
'c',
'o',
'n',
'i',
'c',0};
697static const WCHAR recomposeonresizeW[] = {
'r',
'e',
'c',
'o',
'm',
'p',
'o',
's',
'e',
'o',
'n',
'r',
'e',
's',
'i',
'z',
'e',0};
698static const WCHAR renderingisdeviceindependentW[] = {
'r',
'e',
'n',
'd',
'e',
'r',
'i',
'n',
'g',
'i',
's',
'd',
'e',
'v',
'i',
'c',
'e',
'i',
'n',
'd',
'e',
'p',
'e',
'n',
'd',
'e',
'n',
't',0};
699static const WCHAR setclientsitefirstW[] = {
's',
'e',
't',
'c',
'l',
'i',
'e',
'n',
't',
's',
'i',
't',
'e',
'f',
'i',
'r',
's',
't',0};
700static const WCHAR simpleframeW[] = {
's',
'i',
'm',
'p',
'l',
'e',
'f',
'r',
'a',
'm',
'e',0};
702static const WCHAR supportsmultilevelundoW[] = {
's',
'u',
'p',
'p',
'o',
'r',
't',
's',
'm',
'u',
'l',
't',
'i',
'l',
'e',
'v',
'e',
'l',
'u',
'n',
'd',
'o',0};
703static const WCHAR wantstomenumergeW[] = {
'w',
'a',
'n',
't',
's',
't',
'o',
'm',
'e',
'n',
'u',
'm',
'e',
'r',
'g',
'e',0};
705static const WCHAR compatibilityW[] = {
'c',
'o',
'm',
'p',
'a',
't',
'i',
'b',
'i',
'l',
'i',
't',
'y',0};
706static const WCHAR compatibilityNSW[] = {
'u',
'r',
'n',
':',
's',
'c',
'h',
'e',
'm',
'a',
's',
'-',
'm',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
'-',
'c',
'o',
'm',
':',
'c',
'o',
'm',
'p',
'a',
't',
'i',
'b',
'i',
'l',
'i',
't',
'y',
'.',
'v',
'1',0};
707static const WCHAR applicationW[] = {
'a',
'p',
'p',
'l',
'i',
'c',
'a',
't',
'i',
'o',
'n',0};
708static const WCHAR supportedOSW[] = {
's',
'u',
'p',
'p',
'o',
'r',
't',
'e',
'd',
'O',
'S',0};
710static const WCHAR requestedExecutionLevelW[] = {
'r',
'e',
'q',
'u',
'e',
's',
't',
'e',
'd',
'E',
'x',
'e',
'c',
'u',
't',
'i',
'o',
'n',
'L',
'e',
'v',
'e',
'l',0};
711static const WCHAR requestedPrivilegesW[] = {
'r',
'e',
'q',
'u',
'e',
's',
't',
'e',
'd',
'P',
'r',
'i',
'v',
'i',
'l',
'e',
'g',
'e',
's',0};
714static const WCHAR windowsSettingsW[] = {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'S',
'e',
't',
't',
'i',
'n',
'g',
's',0};
715static const WCHAR autoElevateW[] = {
'a',
'u',
't',
'o',
'E',
'l',
'e',
'v',
'a',
't',
'e',0};
716static const WCHAR disableThemingW[] = {
'd',
'i',
's',
'a',
'b',
'l',
'e',
'T',
'h',
'e',
'm',
'i',
'n',
'g',0};
717static 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};
718static const WCHAR windowsSettings2005NSW[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
's',
'c',
'h',
'e',
'm',
'a',
's',
'.',
'm',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
'.',
'c',
'o',
'm',
'/',
'S',
'M',
'I',
'/',
'2',
'0',
'0',
'5',
'/',
'W',
'i',
'n',
'd',
'o',
'w',
's',
'S',
'e',
't',
't',
'i',
'n',
'g',
's',0};
719static const WCHAR windowsSettings2011NSW[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
's',
'c',
'h',
'e',
'm',
'a',
's',
'.',
'm',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
'.',
'c',
'o',
'm',
'/',
'S',
'M',
'I',
'/',
'2',
'0',
'1',
'1',
'/',
'W',
'i',
'n',
'd',
'o',
'w',
's',
'S',
'e',
't',
't',
'i',
'n',
'g',
's',0};
720static const WCHAR windowsSettings2016NSW[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
's',
'c',
'h',
'e',
'm',
'a',
's',
'.',
'm',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
'.',
'c',
'o',
'm',
'/',
'S',
'M',
'I',
'/',
'2',
'0',
'1',
'6',
'/',
'W',
'i',
'n',
'd',
'o',
'w',
's',
'S',
'e',
't',
't',
'i',
'n',
'g',
's',0};
721static const WCHAR windowsSettings2017NSW[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
's',
'c',
'h',
'e',
'm',
'a',
's',
'.',
'm',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
'.',
'c',
'o',
'm',
'/',
'S',
'M',
'I',
'/',
'2',
'0',
'1',
'7',
'/',
'W',
'i',
'n',
'd',
'o',
'w',
's',
'S',
'e',
't',
't',
'i',
'n',
'g',
's',0};
723static const WCHAR dpiAwarenessW[] = {
'd',
'p',
'i',
'A',
'w',
'a',
'r',
'e',
'n',
'e',
's',
's',0};
724static const WCHAR gdiScalingW[] = {
'g',
'd',
'i',
'S',
'c',
'a',
'l',
'i',
'n',
'g',0};
725static 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};
726static const WCHAR longPathAwareW[] = {
'l',
'o',
'n',
'g',
'P',
'a',
't',
'h',
'A',
'w',
'a',
'r',
'e',0};
727static const WCHAR magicFutureSettingW[] = {
'm',
'a',
'g',
'i',
'c',
'F',
'u',
't',
'u',
'r',
'e',
'S',
'e',
't',
't',
'i',
'n',
'g',0};
728static 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};
729static 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};
766static const WCHAR version_formatW[] = {
'%',
'u',
'.',
'%',
'u',
'.',
'%',
'u',
'.',
'%',
'u',0};
835 return (ch ==
' ' || ch ==
'\r' || ch ==
'\n' || ch ==
'\t');
887 DPRINT(
"add_assembly() actctx %p, activeframe ??\n",
actctx);
889 if (
actctx->num_assemblies ==
actctx->allocated_assemblies)
892 unsigned int new_count;
895 new_count =
actctx->allocated_assemblies * 2;
906 actctx->allocated_assemblies = new_count;
921 unsigned int new_count;
948 new_count *
sizeof(COMPATIBILITY_CONTEXT_ELEMENT) );
975 unsigned int new_count;
978 new_count =
array->allocated * 2;
980 array->base, new_count *
sizeof(*
array->base) );
989 array->allocated = new_count;
1004 case ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION:
1014 case ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION:
1021 case ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION:
1025 case ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION:
1028 case ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES:
1033 case ACTIVATION_CONTEXT_SECTION_APPLICATION_SETTINGS:
1047 if (!str1)
return !str2;
1081 TRACE(
"reusing existing assembly for %s arch %s version %u.%u.%u.%u\n",
1090 TRACE(
"reusing existing dependency for %s arch %s version %u.%u.%u.%u\n",
1099 unsigned int new_count;
1130 static const WCHAR undW[] = {
'_',0};
1131 static const WCHAR noneW[] = {
'n',
'o',
'n',
'e',0};
1132 static const WCHAR mskeyW[] = {
'd',
'e',
'a',
'd',
'b',
'e',
'e',
'f',0};
1176 {
',',
'p',
'r',
'o',
'c',
'e',
's',
's',
'o',
'r',
'A',
'r',
'c',
'h',
'i',
't',
'e',
'c',
't',
'u',
'r',
'e',
'=',0};
1177 static const WCHAR public_keyW[] =
1178 {
',',
'p',
'u',
'b',
'l',
'i',
'c',
'K',
'e',
'y',
'T',
'o',
'k',
'e',
'n',
'=',0};
1179 static const WCHAR typeW2[] =
1180 {
',',
't',
'y',
'p',
'e',
'=',0};
1181 static const WCHAR versionW2[] =
1182 {
',',
'v',
'e',
'r',
's',
'i',
'o',
'n',
'=',0};
1218 DPRINT1(
"Invalid activation context handle!\n");
1235 for (
i = 0;
i <
actctx->num_assemblies;
i++)
1288 FIXME(
"too many namespaces in manifest\n" );
1306 for (
i = xmlbuf->
ns_pos - 1;
i >= 0;
i--)
1328 if (*xmlbuf->
ptr ==
'/')
1331 if (xmlbuf->
ptr == xmlbuf->
end || *xmlbuf->
ptr !=
'>')
1339 if (*xmlbuf->
ptr ==
'>')
1374 xmlbuf->
ptr = xmlbuf->
end;
1418 for (
ptr = xmlbuf->
ptr; ptr < xmlbuf->
end;
ptr++)
if (*
ptr ==
'<')
break;
1421 xmlbuf->
ptr = xmlbuf->
end;
1425 if (
ptr + 3 < xmlbuf->
end &&
ptr[0] ==
'!' &&
ptr[1] ==
'-' &&
ptr[2] ==
'-')
1428 if (
ptr[0] ==
'-' &&
ptr[1] ==
'-' &&
ptr[2] ==
'>')
break;
1430 if (
ptr + 3 > xmlbuf->
end)
1432 xmlbuf->
ptr = xmlbuf->
end;
1442 if (ptr < xmlbuf->
end && *
ptr ==
'/')
1449 ERR(
"wrong closing element %s for %s\n",
1481 if (
ptr[0] ==
'?' &&
ptr[1] ==
'>')
1496 for (
ptr = xmlbuf->
ptr; ptr < xmlbuf->
end;
ptr++)
if (*
ptr ==
'<')
break;
1508 unsigned int ver[4];
1513 ver[0] = ver[1] = ver[2] = ver[3] =
pos = 0;
1514 for (curr =
str->ptr; curr < str->
ptr +
str->len; curr++)
1516 if (*curr >=
'0' && *curr <=
'9')
1518 ver[
pos] = ver[
pos] * 10 + *curr -
'0';
1519 if (ver[
pos] >= 0x10000)
goto error;
1521 else if (*curr ==
'.')
1610 TRACE(
"name=%s version=%s arch=%s\n",
1618 static const WCHAR apartW[] = {
'A',
'p',
'a',
'r',
't',
'm',
'e',
'n',
't',0};
1619 static const WCHAR neutralW[] = {
'N',
'e',
'u',
't',
'r',
'a',
'l',0};
1620 static const WCHAR freeW[] = {
'F',
'r',
'e',
'e',0};
1621 static const WCHAR bothW[] = {
'B',
'o',
't',
'h',0};
1670 while (i < value->
len)
1699 if (!new_progids)
return FALSE;
1731 if (!(
entity =
add_entity(&
dll->entities, ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION)))
1813 for (curr =
str->ptr; curr < str->
ptr +
str->len; curr++)
1815 if (*curr >=
'0' && *curr <=
'9')
1816 num =
num * 10 + *curr -
'0';
1842 if (!(
entity =
add_entity(entities, ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION)))
1863 if (!(
entity =
add_entity(&
dll->entities, ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION)))
1924 while (i < value->
len)
1953 unsigned int ver[2];
1958 ver[0] = ver[1] =
pos = 0;
1959 for (curr =
str->ptr; curr < str->
ptr +
str->len; curr++)
1961 if (*curr >=
'0' && *curr <=
'9')
1963 ver[
pos] = ver[
pos] * 10 + *curr -
'0';
1964 if (ver[
pos] >= 0x10000)
goto error;
1966 else if (*curr ==
'.')
1988 if (!(
entity =
add_entity(&
dll->entities, ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION)))
2024 return (
len + 3) & ~3;
2029 static const WCHAR fmtW[] = {
'%',
'u',
'.',
'%',
'u',
'.',
'%',
'u',
'.',
'%',
'u',0};
2046 if (!(
entity =
add_entity(&
dll->entities, ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION)))
2296 memset(&ai, 0,
sizeof(ai));
2301 static const WCHAR allowDelayedBindingW[] = {
'a',
'l',
'l',
'o',
'w',
'D',
'e',
'l',
'a',
'y',
'e',
'd',
'B',
'i',
'n',
'd',
'i',
'n',
'g',0};
2302 static const WCHAR trueW[] = {
't',
'r',
'u',
'e',0};
2323 TRACE(
"adding name=%s version=%s arch=%s\n",
2417 static const WCHAR sha1W[] = {
'S',
'H',
'A',
'1',0};
2445 WARN(
"asmv2:hash (undocumented) not supported\n");
2474 COMPATIBILITY_CONTEXT_ELEMENT *compat;
2487 compat->Type = ACTCTX_COMPATIBILITY_ELEMENT_TYPE_OS;
2488 compat->Id = compat_id;
2629 static const WCHAR levelW[] = {
'l',
'e',
'v',
'e',
'l',0};
2630 static const WCHAR asInvokerW[] = {
'a',
's',
'I',
'n',
'v',
'o',
'k',
'e',
'r',0};
2631 static const WCHAR requireAdministratorW[] = {
'r',
'e',
'q',
'u',
'i',
'r',
'e',
'A',
'd',
'm',
'i',
'n',
'i',
's',
't',
'r',
'a',
't',
'o',
'r',0};
2632 static const WCHAR highestAvailableW[] = {
'h',
'i',
'g',
'h',
'e',
's',
't',
'A',
'v',
'a',
'i',
'l',
'a',
'b',
'l',
'e',0};
2633 static const WCHAR uiAccessW[] = {
'u',
'i',
'A',
'c',
'c',
'e',
's',
's',0};
2634 static const WCHAR falseW[] = {
'f',
'a',
'l',
's',
'e',0};
2635 static const WCHAR trueW[] = {
't',
'r',
'u',
'e',0};
2744 TRACE(
"(%p)\n", xmlbuf);
2750 static const WCHAR v10W[] = {
'1',
'.',
'0',0};
2813 if (!xmlbuf->
error && expected_ai)
2819 FIXME(
"wrong version for assembly manifest: %u.%u.%u.%u / %u.%u.%u.%u\n",
2833 FIXME(
"wrong version for shared assembly manifest\n");
2894 if (xmlbuf->
ptr != xmlbuf->
end)
2896 FIXME(
"parse error\n");
2928 : ACTIVATION_CONTEXT_PATH_TYPE_NONE;
2947 xmlbuf.
ptr = new_buff;
2961 DPRINT1(
"RtlMultiByteToUnicodeSize failed with %lx\n",
status);
2969 DPRINT1(
"RtlMultiByteToUnicodeN failed with %lx\n",
status);
2973 xmlbuf.
ptr = new_buff;
2987 attr.RootDirectory = 0;
2991 attr.SecurityQualityOfService =
NULL;
3018 else TRACE(
"looking for res %s in module %p %s\n",
debugstr_w(resname),
3032 else if (resname[0] ==
'#')
3063 void *
root,
int want_dir );
3067 void *
root,
int want_dir )
3072 for (
pos =
dir->NumberOfNamedEntries; pos < dir->NumberOfNamedEntries +
dir->NumberOfIdEntries;
pos++)
3074 if (!
entry[
pos].DataIsDirectory == !want_dir)