25#include <wine/unicode.h>
28#define GetProcessHeap() RtlGetProcessHeap()
29#define GetCurrentProcess() NtCurrentProcess()
33#define FILE_END_OF_FILE_INFORMATION FILE_STANDARD_INFORMATION
34#define FileEndOfFileInformation FileStandardInformation
35#define RELATIVE_PATH RtlPathTypeRelative
36#define windows_dir SharedUserData->NtSystemRoot
37#define ARRAY_SIZE(a) (sizeof(a)/sizeof((a)[0]))
38#define wcsnicmp _wcsnicmp
39#define swprintf _snwprintf
42#undef CREATEPROCESS_MANIFEST_RESOURCE_ID
44BOOLEAN RtlpNotAllowingMultipleActivation;
48#define ACTCTX_FLAGS_ALL (\
49 ACTCTX_FLAG_PROCESSOR_ARCHITECTURE_VALID |\
50 ACTCTX_FLAG_LANGID_VALID |\
51 ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID |\
52 ACTCTX_FLAG_RESOURCE_NAME_VALID |\
53 ACTCTX_FLAG_SET_PROCESS_DEFAULT |\
54 ACTCTX_FLAG_APPLICATION_NAME_VALID |\
55 ACTCTX_FLAG_SOURCE_IS_ASSEMBLYREF |\
56 ACTCTX_FLAG_HMODULE_VALID )
58#define ACTCTX_MAGIC 0xC07E3E11
59#define STRSECTION_MAGIC 0x64487353
60#define GUIDSECTION_MAGIC 0x64487347
62#define ACTCTX_MAGIC_MARKER (PVOID)'gMcA'
64#define ACTCTX_FAKE_HANDLE ((HANDLE) 0xf00baa)
65#define ACTCTX_FAKE_COOKIE ((ULONG_PTR) 0xf00bad)
68#define RT_MANIFEST ((ULONG_PTR)24)
69#define CREATEPROCESS_MANIFEST_RESOURCE_ID ((ULONG_PTR)1)
108#define MAX_NAMESPACES 64
554typedef struct _ASSEMBLY_STORAGE_MAP_ENTRY
559} ASSEMBLY_STORAGE_MAP_ENTRY, *PASSEMBLY_STORAGE_MAP_ENTRY;
561typedef struct _ASSEMBLY_STORAGE_MAP
565 PASSEMBLY_STORAGE_MAP_ENTRY *AssemblyArray;
566} ASSEMBLY_STORAGE_MAP, *PASSEMBLY_STORAGE_MAP;
575 PACTIVATION_CONTEXT_DATA ActivationContextData;
576 PVOID NotificationRoutine;
578 ULONG SentNotifications[8];
579 ULONG DisabledNotifications[8];
580 ASSEMBLY_STORAGE_MAP StorageMap;
581 PASSEMBLY_STORAGE_MAP_ENTRY InlineStorageMapEntries;
582 ULONG StackTraceIndex;
583 PVOID StackTraces[4][4];
616#elif defined __x86_64__
620#elif defined __aarch64__
626static 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};
627static 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};
628static 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};
631typedef struct _ACTIVATION_CONTEXT_WRAPPED
635} ACTIVATION_CONTEXT_WRAPPED, *PACTIVATION_CONTEXT_WRAPPED;
663 PACTIVATION_CONTEXT_WRAPPED pActual;
667 ACTIVATION_CONTEXT_WRAPPED,
674 DbgPrint(
"%s : Invalid activation context marker %p found in activation context %p\n"
675 " This means someone stepped on the allocation, or someone is using a\n"
676 " deallocated activation context\n",
678 pActual->MagicMarker,
681 RtlpSxsBreakOnInvalidMarker(
ActCtx, 1);
687static const WCHAR assemblyIdentityW[] = {
'a',
's',
's',
'e',
'm',
'b',
'l',
'y',
'I',
'd',
'e',
'n',
't',
'i',
't',
'y',0};
688static const WCHAR bindingRedirectW[] = {
'b',
'i',
'n',
'd',
'i',
'n',
'g',
'R',
'e',
'd',
'i',
'r',
'e',
'c',
't',0};
690static const WCHAR clrSurrogateW[] = {
'c',
'l',
'r',
'S',
'u',
'r',
'r',
'o',
'g',
'a',
't',
'e',0};
692static 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};
693static 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};
694static const WCHAR dependencyW[] = {
'd',
'e',
'p',
'e',
'n',
'd',
'e',
'n',
'c',
'y',0};
695static const WCHAR dependentAssemblyW[] = {
'd',
'e',
'p',
'e',
'n',
'd',
'e',
'n',
't',
'A',
's',
's',
'e',
'm',
'b',
'l',
'y',0};
696static const WCHAR descriptionW[] = {
'd',
'e',
's',
'c',
'r',
'i',
'p',
't',
'i',
'o',
'n',0};
700static const WCHAR noInheritableW[] = {
'n',
'o',
'I',
'n',
'h',
'e',
'r',
'i',
't',
'a',
'b',
'l',
'e',0};
702static const WCHAR windowClassW[] = {
'w',
'i',
'n',
'd',
'o',
'w',
'C',
'l',
'a',
's',
's',0};
709static const WCHAR manifestVersionW[] = {
'm',
'a',
'n',
'i',
'f',
'e',
's',
't',
'V',
'e',
'r',
's',
'i',
'o',
'n',0};
712static const WCHAR newVersionW[] = {
'n',
'e',
'w',
'V',
'e',
'r',
's',
'i',
'o',
'n',0};
713static const WCHAR oldVersionW[] = {
'o',
'l',
'd',
'V',
'e',
'r',
's',
'i',
'o',
'n',0};
715static 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};
717static const WCHAR publicKeyTokenW[] = {
'p',
'u',
'b',
'l',
'i',
'c',
'K',
'e',
'y',
'T',
'o',
'k',
'e',
'n',0};
718static const WCHAR threadingmodelW[] = {
't',
'h',
'r',
'e',
'a',
'd',
'i',
'n',
'g',
'M',
'o',
'd',
'e',
'l',0};
726static const WCHAR restrictedW[] = {
'R',
'E',
'S',
'T',
'R',
'I',
'C',
'T',
'E',
'D',0};
729static const WCHAR hasdiskimageW[] = {
'H',
'A',
'S',
'D',
'I',
'S',
'K',
'I',
'M',
'A',
'G',
'E',0};
731static const WCHAR miscstatusW[] = {
'm',
'i',
's',
'c',
'S',
't',
'a',
't',
'u',
's',0};
732static const WCHAR miscstatusiconW[] = {
'm',
'i',
's',
'c',
'S',
't',
'a',
't',
'u',
's',
'I',
'c',
'o',
'n',0};
733static const WCHAR miscstatuscontentW[] = {
'm',
'i',
's',
'c',
'S',
't',
'a',
't',
'u',
's',
'C',
'o',
'n',
't',
'e',
'n',
't',0};
734static const WCHAR miscstatusthumbnailW[] = {
'm',
'i',
's',
'c',
'S',
't',
'a',
't',
'u',
's',
'T',
'h',
'u',
'm',
'b',
'n',
'a',
'i',
'l',0};
735static const WCHAR miscstatusdocprintW[] = {
'm',
'i',
's',
'c',
'S',
't',
'a',
't',
'u',
's',
'D',
'o',
'c',
'P',
'r',
'i',
'n',
't',0};
736static const WCHAR baseInterfaceW[] = {
'b',
'a',
's',
'e',
'I',
'n',
't',
'e',
'r',
'f',
'a',
'c',
'e',0};
737static const WCHAR nummethodsW[] = {
'n',
'u',
'm',
'M',
'e',
't',
'h',
'o',
'd',
's',0};
738static const WCHAR proxyStubClsid32W[] = {
'p',
'r',
'o',
'x',
'y',
'S',
't',
'u',
'b',
'C',
'l',
's',
'i',
'd',
'3',
'2',0};
739static const WCHAR runtimeVersionW[] = {
'r',
'u',
'n',
't',
'i',
'm',
'e',
'V',
'e',
'r',
's',
'i',
'o',
'n',0};
740static const WCHAR mscoreeW[] = {
'M',
'S',
'C',
'O',
'R',
'E',
'E',
'.',
'D',
'L',
'L',0};
741static const WCHAR mscoree2W[] = {
'm',
's',
'c',
'o',
'r',
'e',
'e',
'.',
'd',
'l',
'l',0};
743static const WCHAR activatewhenvisibleW[] = {
'a',
'c',
't',
'i',
'v',
'a',
't',
'e',
'w',
'h',
'e',
'n',
'v',
'i',
's',
'i',
'b',
'l',
'e',0};
744static const WCHAR actslikebuttonW[] = {
'a',
'c',
't',
's',
'l',
'i',
'k',
'e',
'b',
'u',
't',
't',
'o',
'n',0};
745static const WCHAR actslikelabelW[] = {
'a',
'c',
't',
's',
'l',
'i',
'k',
'e',
'l',
'a',
'b',
'e',
'l',0};
748static const WCHAR canlinkbyole1W[] = {
'c',
'a',
'n',
'l',
'i',
'n',
'k',
'b',
'y',
'o',
'l',
'e',
'1',0};
749static const WCHAR cantlinkinsideW[] = {
'c',
'a',
'n',
't',
'l',
'i',
'n',
'k',
'i',
'n',
's',
'i',
'd',
'e',0};
750static 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};
752static const WCHAR insertnotreplaceW[] = {
'i',
'n',
's',
'e',
'r',
't',
'n',
'o',
't',
'r',
'e',
'p',
'l',
'a',
'c',
'e',0};
754static const WCHAR invisibleatruntimeW[] = {
'i',
'n',
'v',
'i',
's',
'i',
'b',
'l',
'e',
'a',
't',
'r',
'u',
'n',
't',
'i',
'm',
'e',0};
755static const WCHAR islinkobjectW[] = {
'i',
's',
'l',
'i',
'n',
'k',
'o',
'b',
'j',
'e',
'c',
't',0};
756static const WCHAR nouiactivateW[] = {
'n',
'o',
'u',
'i',
'a',
'c',
't',
'i',
'v',
'a',
't',
'e',0};
757static const WCHAR onlyiconicW[] = {
'o',
'n',
'l',
'y',
'i',
'c',
'o',
'n',
'i',
'c',0};
758static const WCHAR recomposeonresizeW[] = {
'r',
'e',
'c',
'o',
'm',
'p',
'o',
's',
'e',
'o',
'n',
'r',
'e',
's',
'i',
'z',
'e',0};
759static 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};
760static const WCHAR setclientsitefirstW[] = {
's',
'e',
't',
'c',
'l',
'i',
'e',
'n',
't',
's',
'i',
't',
'e',
'f',
'i',
'r',
's',
't',0};
761static const WCHAR simpleframeW[] = {
's',
'i',
'm',
'p',
'l',
'e',
'f',
'r',
'a',
'm',
'e',0};
763static 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};
764static const WCHAR wantstomenumergeW[] = {
'w',
'a',
'n',
't',
's',
't',
'o',
'm',
'e',
'n',
'u',
'm',
'e',
'r',
'g',
'e',0};
766static const WCHAR compatibilityW[] = {
'c',
'o',
'm',
'p',
'a',
't',
'i',
'b',
'i',
'l',
'i',
't',
'y',0};
767static 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};
768static const WCHAR applicationW[] = {
'a',
'p',
'p',
'l',
'i',
'c',
'a',
't',
'i',
'o',
'n',0};
769static const WCHAR supportedOSW[] = {
's',
'u',
'p',
'p',
'o',
'r',
't',
'e',
'd',
'O',
'S',0};
771static 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};
772static const WCHAR requestedPrivilegesW[] = {
'r',
'e',
'q',
'u',
'e',
's',
't',
'e',
'd',
'P',
'r',
'i',
'v',
'i',
'l',
'e',
'g',
'e',
's',0};
775static const WCHAR windowsSettingsW[] = {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'S',
'e',
't',
't',
'i',
'n',
'g',
's',0};
776static const WCHAR autoElevateW[] = {
'a',
'u',
't',
'o',
'E',
'l',
'e',
'v',
'a',
't',
'e',0};
777static const WCHAR disableThemingW[] = {
'd',
'i',
's',
'a',
'b',
'l',
'e',
'T',
'h',
'e',
'm',
'i',
'n',
'g',0};
778static 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};
779static 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};
780static 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};
781static 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};
782static 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};
784static const WCHAR dpiAwarenessW[] = {
'd',
'p',
'i',
'A',
'w',
'a',
'r',
'e',
'n',
'e',
's',
's',0};
785static const WCHAR gdiScalingW[] = {
'g',
'd',
'i',
'S',
'c',
'a',
'l',
'i',
'n',
'g',0};
786static 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};
787static const WCHAR longPathAwareW[] = {
'l',
'o',
'n',
'g',
'P',
'a',
't',
'h',
'A',
'w',
'a',
'r',
'e',0};
788static const WCHAR magicFutureSettingW[] = {
'm',
'a',
'g',
'i',
'c',
'F',
'u',
't',
'u',
'r',
'e',
'S',
'e',
't',
't',
'i',
'n',
'g',0};
789static 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};
790static 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};
827static const WCHAR version_formatW[] = {
'%',
'u',
'.',
'%',
'u',
'.',
'%',
'u',
'.',
'%',
'u',0};
896 return (ch ==
' ' || ch ==
'\r' || ch ==
'\n' || ch ==
'\t');
938 DPRINT(
"add_assembly() actctx %p, activeframe ??\n",
actctx);
940 if (
actctx->num_assemblies ==
actctx->allocated_assemblies)
943 unsigned int new_count;
946 new_count =
actctx->allocated_assemblies * 2;
957 actctx->allocated_assemblies = new_count;
972 unsigned int new_count;
999 new_count *
sizeof(COMPATIBILITY_CONTEXT_ELEMENT) );
1026 unsigned int new_count;
1029 new_count =
array->allocated * 2;
1031 array->base, new_count *
sizeof(*
array->base) );
1040 array->allocated = new_count;
1055 case ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION:
1065 case ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION:
1072 case ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION:
1076 case ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION:
1079 case ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES:
1084 case ACTIVATION_CONTEXT_SECTION_APPLICATION_SETTINGS:
1098 if (!str1)
return !str2;
1132 TRACE(
"reusing existing assembly for %S arch %S version %u.%u.%u.%u\n",
1141 TRACE(
"reusing existing dependency for %S arch %S version %u.%u.%u.%u\n",
1150 unsigned int new_count;
1181 static const WCHAR undW[] = {
'_',0};
1182 static const WCHAR noneW[] = {
'n',
'o',
'n',
'e',0};
1183 static const WCHAR mskeyW[] = {
'd',
'e',
'a',
'd',
'b',
'e',
'e',
'f',0};
1227 {
',',
'p',
'r',
'o',
'c',
'e',
's',
's',
'o',
'r',
'A',
'r',
'c',
'h',
'i',
't',
'e',
'c',
't',
'u',
'r',
'e',
'=',0};
1228 static const WCHAR public_keyW[] =
1229 {
',',
'p',
'u',
'b',
'l',
'i',
'c',
'K',
'e',
'y',
'T',
'o',
'k',
'e',
'n',
'=',0};
1230 static const WCHAR typeW2[] =
1231 {
',',
't',
'y',
'p',
'e',
'=',0};
1232 static const WCHAR versionW2[] =
1233 {
',',
'v',
'e',
'r',
's',
'i',
'o',
'n',
'=',0};
1261 PACTIVATION_CONTEXT_WRAPPED pActual;
1274 DPRINT1(
"Invalid activation context handle!\n");
1287 PACTIVATION_CONTEXT_WRAPPED pActual;
1293 for (
i = 0;
i <
actctx->num_assemblies;
i++)
1322 pActual->MagicMarker = 0;
1366 for (
i = xmlbuf->
ns_pos - 1;
i >= 0;
i--)
1388 if (*xmlbuf->
ptr ==
'/')
1391 if (xmlbuf->
ptr == xmlbuf->
end || *xmlbuf->
ptr !=
'>')
1399 if (*xmlbuf->
ptr ==
'>')
1434 xmlbuf->
ptr = xmlbuf->
end;
1478 for (
ptr = xmlbuf->
ptr; ptr < xmlbuf->
end;
ptr++)
if (*
ptr ==
'<')
break;
1481 xmlbuf->
ptr = xmlbuf->
end;
1485 if (
ptr + 3 < xmlbuf->
end &&
ptr[0] ==
'!' &&
ptr[1] ==
'-' &&
ptr[2] ==
'-')
1488 if (
ptr[0] ==
'-' &&
ptr[1] ==
'-' &&
ptr[2] ==
'>')
break;
1490 if (
ptr + 3 > xmlbuf->
end)
1492 xmlbuf->
ptr = xmlbuf->
end;
1502 if (ptr < xmlbuf->
end && *
ptr ==
'/')
1541 if (
ptr[0] ==
'?' &&
ptr[1] ==
'>')
1556 for (
ptr = xmlbuf->
ptr; ptr < xmlbuf->
end;
ptr++)
if (*
ptr ==
'<')
break;
1568 unsigned int ver[4];
1573 ver[0] = ver[1] = ver[2] = ver[3] =
pos = 0;
1574 for (curr =
str->ptr; curr < str->
ptr +
str->len; curr++)
1576 if (*curr >=
'0' && *curr <=
'9')
1578 ver[
pos] = ver[
pos] * 10 + *curr -
'0';
1579 if (ver[
pos] >= 0x10000)
goto error;
1581 else if (*curr ==
'.')
1671 static const WCHAR apartW[] = {
'A',
'p',
'a',
'r',
't',
'm',
'e',
'n',
't',0};
1672 static const WCHAR neutralW[] = {
'N',
'e',
'u',
't',
'r',
'a',
'l',0};
1673 static const WCHAR freeW[] = {
'F',
'r',
'e',
'e',0};
1674 static const WCHAR bothW[] = {
'B',
'o',
't',
'h',0};
1712 WARN(
"unknown flag %S\n",
str);
1723 while (i < value->
len)
1752 if (!new_progids)
return FALSE;
1784 if (!(
entity =
add_entity(&
dll->entities, ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION)))
1861 for (curr =
str->ptr; curr < str->
ptr +
str->len; curr++)
1863 if (*curr >=
'0' && *curr <=
'9')
1864 num =
num * 10 + *curr -
'0';
1890 if (!(
entity =
add_entity(entities, ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION)))
1911 if (!(
entity =
add_entity(&
dll->entities, ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION)))
1971 while (i < value->
len)
2000 unsigned int ver[2];
2005 ver[0] = ver[1] =
pos = 0;
2006 for (curr =
str->ptr; curr < str->
ptr +
str->len; curr++)
2008 if (*curr >=
'0' && *curr <=
'9')
2010 ver[
pos] = ver[
pos] * 10 + *curr -
'0';
2011 if (ver[
pos] >= 0x10000)
goto error;
2013 else if (*curr ==
'.')
2034 if (!(
entity =
add_entity(&
dll->entities, ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION)))
2066 return (
len + 3) & ~3;
2071 static const WCHAR fmtW[] = {
'%',
'u',
'.',
'%',
'u',
'.',
'%',
'u',
'.',
'%',
'u',0};
2088 if (!(
entity =
add_entity(&
dll->entities, ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION)))
2310 memset(&ai, 0,
sizeof(ai));
2315 static const WCHAR allowDelayedBindingW[] = {
'a',
'l',
'l',
'o',
'w',
'D',
'e',
'l',
'a',
'y',
'e',
'd',
'B',
'i',
'n',
'd',
'i',
'n',
'g',0};
2316 static const WCHAR trueW[] = {
't',
'r',
'u',
'e',0};
2419 static const WCHAR sha1W[] = {
'S',
'H',
'A',
'1',0};
2471 COMPATIBILITY_CONTEXT_ELEMENT *compat;
2484 compat->Type = ACTCTX_COMPATIBILITY_ELEMENT_TYPE_OS;
2485 compat->Id = compat_id;
2611 static const WCHAR levelW[] = {
'l',
'e',
'v',
'e',
'l',0};
2612 static const WCHAR asInvokerW[] = {
'a',
's',
'I',
'n',
'v',
'o',
'k',
'e',
'r',0};
2613 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};
2614 static const WCHAR highestAvailableW[] = {
'h',
'i',
'g',
'h',
'e',
's',
't',
'A',
'v',
'a',
'i',
'l',
'a',
'b',
'l',
'e',0};
2615 static const WCHAR uiAccessW[] = {
'u',
'i',
'A',
'c',
'c',
'e',
's',
's',0};
2616 static const WCHAR falseW[] = {
'f',
'a',
'l',
's',
'e',0};
2617 static const WCHAR trueW[] = {
't',
'r',
'u',
'e',0};
2720 static const WCHAR v10W[] = {
'1',
'.',
'0',0};
2778 if (!xmlbuf->
error && expected_ai)
2849 if (xmlbuf->
ptr != xmlbuf->
end)
2882 : ACTIVATION_CONTEXT_PATH_TYPE_NONE;
2901 xmlbuf.
ptr = new_buff;
2915 DPRINT1(
"RtlMultiByteToUnicodeSize failed with %lx\n",
status);
2923 DPRINT1(
"RtlMultiByteToUnicodeN failed with %lx\n",
status);
2927 xmlbuf.
ptr = new_buff;
2941 attr.RootDirectory = 0;
2945 attr.SecurityQualityOfService =
NULL;
2972 else TRACE(
"looking for res %s in module %p %s\n",
debugstr_w(resname),
2986 else if (resname[0] ==
'#')
3017 void *
root,
int want_dir );
3021 void *
root,
int want_dir )
3026 for (
pos =
dir->NumberOfNamedEntries; pos < dir->NumberOfNamedEntries +
dir->NumberOfIdEntries;
pos++)
3028 if (!
entry[
pos].DataIsDirectory == !want_dir)
3054 if (!(
ptr = find_first_id_entry(resdirptr,
root, 1)))
3082 WCHAR resnameBuf[20];
3088 resptr = resnameBuf;
3094 attr.RootDirectory = 0;
3098 attr.SecurityQualityOfService =
NULL;
3143 attr.RootDirectory = 0;
3147 attr.SecurityQualityOfService =
NULL;