You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-04-13 14:42:51 -07:00
Compare commits
61 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
73cb57f5b9 | ||
|
f473f9cb80 | ||
|
9e463db339 | ||
|
943ffbfbbf | ||
|
5ad5986215 | ||
|
998dd35306 | ||
|
df5f35e1d1 | ||
|
f61db43e7f | ||
|
734b40739a | ||
|
c97e444da2 | ||
|
b84644bd63 | ||
|
1c3562d671 | ||
|
14f5eae731 | ||
|
534583d958 | ||
|
aa957fe3a3 | ||
|
e3bf95ebea | ||
|
8c7825d1c0 | ||
|
fae17cd83a | ||
|
8caca32d08 | ||
|
0be12d7669 | ||
|
a99ad44fff | ||
|
a644cbf827 | ||
|
88c85f01c3 | ||
|
04a8307d45 | ||
|
c6708dbbbf | ||
|
3dfeab6722 | ||
|
147562e3e1 | ||
|
1383fc82bc | ||
|
23560728b5 | ||
|
3f25cd198a | ||
|
5b58419a0e | ||
|
4136b55f1c | ||
|
2ae8a0be02 | ||
|
dc52cbef3c | ||
|
7881913b09 | ||
|
88a1a26f34 | ||
|
53aeae58ad | ||
|
33efbf2440 | ||
|
2a755a9b6f | ||
|
60e835b183 | ||
|
c32efc1a79 | ||
|
1119b4401a | ||
|
c55ebfa2a4 | ||
|
884a25c8bf | ||
|
81e2fbadc8 | ||
|
d9d5df9f73 | ||
|
9c5d1ebec9 | ||
|
6057508b9b | ||
|
1ff77100b8 | ||
|
60d570e5f1 | ||
|
76007a01a2 | ||
|
d924318742 | ||
|
1cc5d04346 | ||
|
ecf0d1c5c2 | ||
|
d834b49a37 | ||
|
230c30c8e3 | ||
|
89830856c3 | ||
|
5f82b6610f | ||
|
bdc0bd9ac4 | ||
|
2b415aff4f | ||
|
253835e7c3 |
@@ -1 +0,0 @@
|
||||
Depends: kernel32-BeingDebugged
|
@@ -0,0 +1,55 @@
|
||||
From ce0ab0ccd6e4953a9673d15e00cf602668469c2c Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sun, 5 Mar 2017 23:04:36 +0100
|
||||
Subject: advapi32: Fix error code when calling LsaOpenPolicy for non existing
|
||||
remote machine.
|
||||
|
||||
---
|
||||
dlls/advapi32/lsa.c | 2 +-
|
||||
dlls/advapi32/tests/lsa.c | 10 ++++++++++
|
||||
2 files changed, 11 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/advapi32/lsa.c b/dlls/advapi32/lsa.c
|
||||
index b8dedbd6d58..e5e3b1649c0 100644
|
||||
--- a/dlls/advapi32/lsa.c
|
||||
+++ b/dlls/advapi32/lsa.c
|
||||
@@ -692,7 +692,7 @@ NTSTATUS WINAPI LsaOpenPolicy(
|
||||
ObjectAttributes, DesiredAccess, PolicyHandle);
|
||||
|
||||
ADVAPI_ForceLocalComputer(SystemName ? SystemName->Buffer : NULL,
|
||||
- STATUS_ACCESS_VIOLATION);
|
||||
+ RPC_NT_SERVER_UNAVAILABLE);
|
||||
dumpLsaAttributes(ObjectAttributes);
|
||||
|
||||
if(PolicyHandle) *PolicyHandle = (LSA_HANDLE)0xcafe;
|
||||
diff --git a/dlls/advapi32/tests/lsa.c b/dlls/advapi32/tests/lsa.c
|
||||
index 4daf75f58d1..7ddda731be2 100644
|
||||
--- a/dlls/advapi32/tests/lsa.c
|
||||
+++ b/dlls/advapi32/tests/lsa.c
|
||||
@@ -70,6 +70,8 @@ static BOOL init(void)
|
||||
|
||||
static void test_lsa(void)
|
||||
{
|
||||
+ static WCHAR machineW[] = {'W','i','n','e','N','o','M','a','c','h','i','n','e',0};
|
||||
+ LSA_UNICODE_STRING machine;
|
||||
NTSTATUS status;
|
||||
LSA_HANDLE handle;
|
||||
LSA_OBJECT_ATTRIBUTES object_attributes;
|
||||
@@ -77,6 +79,14 @@ static void test_lsa(void)
|
||||
ZeroMemory(&object_attributes, sizeof(object_attributes));
|
||||
object_attributes.Length = sizeof(object_attributes);
|
||||
|
||||
+ machine.Buffer = machineW;
|
||||
+ machine.Length = sizeof(machineW) - 2;
|
||||
+ machine.MaximumLength = sizeof(machineW);
|
||||
+
|
||||
+ status = pLsaOpenPolicy( &machine, &object_attributes, POLICY_LOOKUP_NAMES, &handle);
|
||||
+ ok(status == RPC_NT_SERVER_UNAVAILABLE,
|
||||
+ "LsaOpenPolicy(POLICY_LOOKUP_NAMES) for invalid machine returned 0x%08x\n", status);
|
||||
+
|
||||
status = pLsaOpenPolicy( NULL, &object_attributes, POLICY_ALL_ACCESS, &handle);
|
||||
ok(status == STATUS_SUCCESS || status == STATUS_ACCESS_DENIED,
|
||||
"LsaOpenPolicy(POLICY_ALL_ACCESS) returned 0x%08x\n", status);
|
||||
--
|
||||
2.11.0
|
||||
|
@@ -0,0 +1,34 @@
|
||||
From 1941137bff72a2297812bbd05fb6f6a1578426b0 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sun, 5 Mar 2017 23:05:54 +0100
|
||||
Subject: advapi32: Use TRACE for LsaOpenPolicy/LsaClose.
|
||||
|
||||
---
|
||||
dlls/advapi32/lsa.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/advapi32/lsa.c b/dlls/advapi32/lsa.c
|
||||
index e5e3b1649c0..0f2167d19ab 100644
|
||||
--- a/dlls/advapi32/lsa.c
|
||||
+++ b/dlls/advapi32/lsa.c
|
||||
@@ -136,7 +136,7 @@ NTSTATUS WINAPI LsaAddAccountRights(
|
||||
*/
|
||||
NTSTATUS WINAPI LsaClose(IN LSA_HANDLE ObjectHandle)
|
||||
{
|
||||
- FIXME("(%p) stub\n", ObjectHandle);
|
||||
+ TRACE("(%p) semi-stub\n", ObjectHandle);
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -687,7 +687,7 @@ NTSTATUS WINAPI LsaOpenPolicy(
|
||||
IN ACCESS_MASK DesiredAccess,
|
||||
IN OUT PLSA_HANDLE PolicyHandle)
|
||||
{
|
||||
- FIXME("(%s,%p,0x%08x,%p) stub\n",
|
||||
+ TRACE("(%s,%p,0x%08x,%p) semi-stub\n",
|
||||
SystemName?debugstr_w(SystemName->Buffer):"(null)",
|
||||
ObjectAttributes, DesiredAccess, PolicyHandle);
|
||||
|
||||
--
|
||||
2.11.0
|
||||
|
@@ -0,0 +1,162 @@
|
||||
From fdc085e009942fa89ef5f0cd4104ab78c9d80b1b Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sun, 5 Mar 2017 23:50:06 +0100
|
||||
Subject: advapi32: Implement LsaLookupPrivilegeName.
|
||||
|
||||
---
|
||||
dlls/advapi32/advapi32.spec | 2 +-
|
||||
dlls/advapi32/advapi32_misc.h | 2 ++
|
||||
dlls/advapi32/lsa.c | 38 ++++++++++++++++++++++++++++++++++++++
|
||||
dlls/advapi32/security.c | 27 ++++++++++++++++++---------
|
||||
include/ntsecapi.h | 1 +
|
||||
5 files changed, 60 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/dlls/advapi32/advapi32.spec b/dlls/advapi32/advapi32.spec
|
||||
index 3000973265c..2c599c8bd92 100644
|
||||
--- a/dlls/advapi32/advapi32.spec
|
||||
+++ b/dlls/advapi32/advapi32.spec
|
||||
@@ -446,7 +446,7 @@
|
||||
@ stdcall LsaLookupNames2(ptr long long ptr ptr ptr)
|
||||
@ stdcall LsaLookupNames(long long ptr ptr ptr)
|
||||
@ stub LsaLookupPrivilegeDisplayName
|
||||
-# @ stub LsaLookupPrivilegeName
|
||||
+@ stdcall LsaLookupPrivilegeName(long ptr ptr)
|
||||
# @ stub LsaLookupPrivilegeValue
|
||||
@ stdcall LsaLookupSids(ptr long ptr ptr ptr)
|
||||
# @ stub LsaManageSidNameMapping
|
||||
diff --git a/dlls/advapi32/advapi32_misc.h b/dlls/advapi32/advapi32_misc.h
|
||||
index d116ecb836e..ecb07f635a6 100644
|
||||
--- a/dlls/advapi32/advapi32_misc.h
|
||||
+++ b/dlls/advapi32/advapi32_misc.h
|
||||
@@ -68,4 +68,6 @@ static inline WCHAR *strdupAW( const char *src )
|
||||
return dst;
|
||||
}
|
||||
|
||||
+const WCHAR * const WellKnownPrivNames[SE_MAX_WELL_KNOWN_PRIVILEGE + 1];
|
||||
+
|
||||
#endif /* __WINE_ADVAPI32MISC_H */
|
||||
diff --git a/dlls/advapi32/lsa.c b/dlls/advapi32/lsa.c
|
||||
index 0f2167d19ab..6a7a69a9eb7 100644
|
||||
--- a/dlls/advapi32/lsa.c
|
||||
+++ b/dlls/advapi32/lsa.c
|
||||
@@ -1012,3 +1012,41 @@ NTSTATUS WINAPI LsaUnregisterPolicyChangeNotification(
|
||||
FIXME("(%d,%p) stub\n", class, event);
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
+
|
||||
+/******************************************************************************
|
||||
+ * LsaLookupPrivilegeName [ADVAPI32.@]
|
||||
+ *
|
||||
+ */
|
||||
+NTSTATUS WINAPI LsaLookupPrivilegeName(
|
||||
+ LSA_HANDLE handle,
|
||||
+ PLUID lpLuid,
|
||||
+ PUNICODE_STRING *name)
|
||||
+{
|
||||
+ UNICODE_STRING *priv_unicode;
|
||||
+ size_t priv_size;
|
||||
+ WCHAR *strW;
|
||||
+
|
||||
+ TRACE("(%p, %p, %p)\n", handle, lpLuid, name);
|
||||
+
|
||||
+ if (!handle)
|
||||
+ return STATUS_INVALID_HANDLE;
|
||||
+
|
||||
+ if (!name)
|
||||
+ return STATUS_INVALID_PARAMETER;
|
||||
+
|
||||
+ if (lpLuid->HighPart ||
|
||||
+ (lpLuid->LowPart < SE_MIN_WELL_KNOWN_PRIVILEGE ||
|
||||
+ lpLuid->LowPart > SE_MAX_WELL_KNOWN_PRIVILEGE))
|
||||
+ return STATUS_NO_SUCH_PRIVILEGE;
|
||||
+
|
||||
+ priv_size = (strlenW(WellKnownPrivNames[lpLuid->LowPart]) + 1) * sizeof(WCHAR);
|
||||
+ priv_unicode = heap_alloc(sizeof(*priv_unicode) + priv_size);
|
||||
+ if (!priv_unicode) return STATUS_NO_MEMORY;
|
||||
+
|
||||
+ strW = (WCHAR *)(priv_unicode + 1);
|
||||
+ strcpyW(strW, WellKnownPrivNames[lpLuid->LowPart]);
|
||||
+ RtlInitUnicodeString(priv_unicode, strW);
|
||||
+
|
||||
+ *name = priv_unicode;
|
||||
+ return STATUS_SUCCESS;
|
||||
+}
|
||||
diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c
|
||||
index b0b368d6abf..24ec3099713 100644
|
||||
--- a/dlls/advapi32/security.c
|
||||
+++ b/dlls/advapi32/security.c
|
||||
@@ -1840,7 +1840,7 @@ static const WCHAR SE_IMPERSONATE_NAME_W[] =
|
||||
static const WCHAR SE_CREATE_GLOBAL_NAME_W[] =
|
||||
{ 'S','e','C','r','e','a','t','e','G','l','o','b','a','l','P','r','i','v','i','l','e','g','e',0 };
|
||||
|
||||
-static const WCHAR * const WellKnownPrivNames[SE_MAX_WELL_KNOWN_PRIVILEGE + 1] =
|
||||
+const WCHAR * const WellKnownPrivNames[SE_MAX_WELL_KNOWN_PRIVILEGE + 1] =
|
||||
{
|
||||
NULL,
|
||||
NULL,
|
||||
@@ -2043,33 +2043,42 @@ BOOL WINAPI
|
||||
LookupPrivilegeNameW( LPCWSTR lpSystemName, PLUID lpLuid, LPWSTR lpName,
|
||||
LPDWORD cchName)
|
||||
{
|
||||
+ UNICODE_STRING system_name, *priv;
|
||||
+ LSA_HANDLE lsa;
|
||||
+ NTSTATUS status;
|
||||
size_t privNameLen;
|
||||
|
||||
TRACE("%s,%p,%p,%p\n",debugstr_w(lpSystemName), lpLuid, lpName, cchName);
|
||||
|
||||
- if (!ADVAPI_IsLocalComputer(lpSystemName))
|
||||
+ RtlInitUnicodeString(&system_name, lpSystemName);
|
||||
+ status = LsaOpenPolicy(&system_name, NULL, POLICY_LOOKUP_NAMES, &lsa);
|
||||
+ if (status)
|
||||
{
|
||||
- SetLastError(RPC_S_SERVER_UNAVAILABLE);
|
||||
+ SetLastError(LsaNtStatusToWinError(status));
|
||||
return FALSE;
|
||||
}
|
||||
- if (lpLuid->HighPart || (lpLuid->LowPart < SE_MIN_WELL_KNOWN_PRIVILEGE ||
|
||||
- lpLuid->LowPart > SE_MAX_WELL_KNOWN_PRIVILEGE))
|
||||
+
|
||||
+ status = LsaLookupPrivilegeName(&lsa, lpLuid, &priv);
|
||||
+ LsaClose(lsa);
|
||||
+ if (status)
|
||||
{
|
||||
- SetLastError(ERROR_NO_SUCH_PRIVILEGE);
|
||||
+ SetLastError(LsaNtStatusToWinError(status));
|
||||
return FALSE;
|
||||
}
|
||||
- privNameLen = strlenW(WellKnownPrivNames[lpLuid->LowPart]);
|
||||
- /* Windows crashes if cchName is NULL, so will I */
|
||||
+
|
||||
+ privNameLen = priv->Length / sizeof(WCHAR);
|
||||
if (*cchName <= privNameLen)
|
||||
{
|
||||
*cchName = privNameLen + 1;
|
||||
+ LsaFreeMemory(priv);
|
||||
SetLastError(ERROR_INSUFFICIENT_BUFFER);
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
- strcpyW(lpName, WellKnownPrivNames[lpLuid->LowPart]);
|
||||
+ strcpyW(lpName, priv->Buffer);
|
||||
*cchName = privNameLen;
|
||||
+ LsaFreeMemory(priv);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
diff --git a/include/ntsecapi.h b/include/ntsecapi.h
|
||||
index 2bb3d312e43..0bf0eca43ed 100644
|
||||
--- a/include/ntsecapi.h
|
||||
+++ b/include/ntsecapi.h
|
||||
@@ -370,6 +370,7 @@ NTSTATUS WINAPI LsaLookupNames(LSA_HANDLE,ULONG,PLSA_UNICODE_STRING,PLSA_REFEREN
|
||||
PLSA_TRANSLATED_SID*);
|
||||
NTSTATUS WINAPI LsaLookupNames2(LSA_HANDLE,ULONG,ULONG,PLSA_UNICODE_STRING,PLSA_REFERENCED_DOMAIN_LIST*,
|
||||
PLSA_TRANSLATED_SID2*);
|
||||
+NTSTATUS WINAPI LsaLookupPrivilegeName(LSA_HANDLE,PLUID,PUNICODE_STRING*);
|
||||
NTSTATUS WINAPI LsaLookupSids(LSA_HANDLE,ULONG,PSID *,PLSA_REFERENCED_DOMAIN_LIST *,PLSA_TRANSLATED_NAME *);
|
||||
ULONG WINAPI LsaNtStatusToWinError(NTSTATUS);
|
||||
NTSTATUS WINAPI LsaOpenPolicy(PLSA_UNICODE_STRING,PLSA_OBJECT_ATTRIBUTES,ACCESS_MASK,PLSA_HANDLE);
|
||||
--
|
||||
2.11.0
|
||||
|
@@ -0,0 +1,62 @@
|
||||
From 01efac6b4fa338715ad775c147a6bfc42e0bc38e Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Mon, 6 Mar 2017 00:01:53 +0100
|
||||
Subject: advapi32: Add stub for LsaLookupPrivilegeDisplayName.
|
||||
|
||||
---
|
||||
dlls/advapi32/advapi32.spec | 2 +-
|
||||
dlls/advapi32/lsa.c | 21 +++++++++++++++++++++
|
||||
2 files changed, 22 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/advapi32/advapi32.spec b/dlls/advapi32/advapi32.spec
|
||||
index 2c599c8bd92..ce1838d8c5a 100644
|
||||
--- a/dlls/advapi32/advapi32.spec
|
||||
+++ b/dlls/advapi32/advapi32.spec
|
||||
@@ -445,7 +445,7 @@
|
||||
# @ stub LsaICLookupSidsWithCreds
|
||||
@ stdcall LsaLookupNames2(ptr long long ptr ptr ptr)
|
||||
@ stdcall LsaLookupNames(long long ptr ptr ptr)
|
||||
-@ stub LsaLookupPrivilegeDisplayName
|
||||
+@ stdcall LsaLookupPrivilegeDisplayName(long ptr ptr ptr)
|
||||
@ stdcall LsaLookupPrivilegeName(long ptr ptr)
|
||||
# @ stub LsaLookupPrivilegeValue
|
||||
@ stdcall LsaLookupSids(ptr long ptr ptr ptr)
|
||||
diff --git a/dlls/advapi32/lsa.c b/dlls/advapi32/lsa.c
|
||||
index 6a7a69a9eb7..fdb238f74b2 100644
|
||||
--- a/dlls/advapi32/lsa.c
|
||||
+++ b/dlls/advapi32/lsa.c
|
||||
@@ -45,6 +45,12 @@ WINE_DEFAULT_DEBUG_CHANNEL(advapi);
|
||||
return FailureCode; \
|
||||
}
|
||||
|
||||
+static LPCSTR debugstr_us( const UNICODE_STRING *us )
|
||||
+{
|
||||
+ if (!us) return "(null)";
|
||||
+ return debugstr_wn(us->Buffer, us->Length / sizeof(WCHAR));
|
||||
+}
|
||||
+
|
||||
static void dumpLsaAttributes(const LSA_OBJECT_ATTRIBUTES *oa)
|
||||
{
|
||||
if (oa)
|
||||
@@ -1050,3 +1056,18 @@ NTSTATUS WINAPI LsaLookupPrivilegeName(
|
||||
*name = priv_unicode;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
+
|
||||
+/******************************************************************************
|
||||
+ * LsaLookupPrivilegeDisplayName [ADVAPI32.@]
|
||||
+ *
|
||||
+ */
|
||||
+NTSTATUS WINAPI LsaLookupPrivilegeDisplayName(
|
||||
+ LSA_HANDLE handle,
|
||||
+ PLSA_UNICODE_STRING name,
|
||||
+ PLSA_UNICODE_STRING *dispname,
|
||||
+ SHORT *language)
|
||||
+{
|
||||
+ FIXME("(%p, %s, %p, %p)\n", handle, debugstr_us(name), dispname, language);
|
||||
+
|
||||
+ return STATUS_NO_SUCH_PRIVILEGE;
|
||||
+}
|
||||
--
|
||||
2.11.0
|
||||
|
1
patches/advapi-LsaLookupPrivilegeName/definition
Normal file
1
patches/advapi-LsaLookupPrivilegeName/definition
Normal file
@@ -0,0 +1 @@
|
||||
Fixes: Add LsaLookupPrivilege[Display]Name stubs
|
@@ -1,185 +0,0 @@
|
||||
From 9904ee15d00d0809c12759446c09adc1981e3cf9 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Mon, 29 Aug 2016 19:45:47 +0200
|
||||
Subject: advapi32: Implement AddMandatoryAce.
|
||||
|
||||
---
|
||||
dlls/advapi32/security.c | 6 ++++--
|
||||
dlls/advapi32/tests/security.c | 45 ++++++++++++++++++++++++++++++++++++++++++
|
||||
dlls/ntdll/ntdll.spec | 1 +
|
||||
dlls/ntdll/sec.c | 25 +++++++++++++++++++++++
|
||||
include/winbase.h | 1 +
|
||||
include/winternl.h | 1 +
|
||||
6 files changed, 77 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c
|
||||
index 28331df..45c0f7e 100644
|
||||
--- a/dlls/advapi32/security.c
|
||||
+++ b/dlls/advapi32/security.c
|
||||
@@ -1711,10 +1711,12 @@ BOOL WINAPI AddAce(
|
||||
return set_ntstatus(RtlAddAce(pAcl, dwAceRevision, dwStartingAceIndex, pAceList, nAceListLength));
|
||||
}
|
||||
|
||||
+/******************************************************************************
|
||||
+ * AddMandatoryAce [ADVAPI32.@]
|
||||
+ */
|
||||
BOOL WINAPI AddMandatoryAce(ACL *acl, DWORD ace_revision, DWORD ace_flags, DWORD mandatory_policy, PSID label_sid)
|
||||
{
|
||||
- FIXME("%p %x %x %x %p - stub\n", acl, ace_revision, ace_flags, mandatory_policy, label_sid);
|
||||
- return FALSE;
|
||||
+ return set_ntstatus(RtlAddMandatoryAce(acl, ace_revision, ace_flags, mandatory_policy, SYSTEM_MANDATORY_LABEL_ACE_TYPE, label_sid));
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c
|
||||
index 18f4e04..cdbe4f8 100644
|
||||
--- a/dlls/advapi32/tests/security.c
|
||||
+++ b/dlls/advapi32/tests/security.c
|
||||
@@ -65,6 +65,7 @@
|
||||
static BOOL (WINAPI *pAddAccessAllowedAceEx)(PACL, DWORD, DWORD, DWORD, PSID);
|
||||
static BOOL (WINAPI *pAddAccessDeniedAceEx)(PACL, DWORD, DWORD, DWORD, PSID);
|
||||
static BOOL (WINAPI *pAddAuditAccessAceEx)(PACL, DWORD, DWORD, DWORD, PSID, BOOL, BOOL);
|
||||
+static BOOL (WINAPI *pAddMandatoryAce)(PACL,DWORD,DWORD,DWORD,PSID);
|
||||
static VOID (WINAPI *pBuildTrusteeWithSidA)( PTRUSTEEA pTrustee, PSID pSid );
|
||||
static VOID (WINAPI *pBuildTrusteeWithNameA)( PTRUSTEEA pTrustee, LPSTR pName );
|
||||
static VOID (WINAPI *pBuildTrusteeWithObjectsAndNameA)( PTRUSTEEA pTrustee,
|
||||
@@ -199,6 +200,7 @@ static void init(void)
|
||||
pAddAccessAllowedAceEx = (void *)GetProcAddress(hmod, "AddAccessAllowedAceEx");
|
||||
pAddAccessDeniedAceEx = (void *)GetProcAddress(hmod, "AddAccessDeniedAceEx");
|
||||
pAddAuditAccessAceEx = (void *)GetProcAddress(hmod, "AddAuditAccessAceEx");
|
||||
+ pAddMandatoryAce = (void *)GetProcAddress(hmod, "AddMandatoryAce");
|
||||
pCheckTokenMembership = (void *)GetProcAddress(hmod, "CheckTokenMembership");
|
||||
pConvertStringSecurityDescriptorToSecurityDescriptorA =
|
||||
(void *)GetProcAddress(hmod, "ConvertStringSecurityDescriptorToSecurityDescriptorA" );
|
||||
@@ -6064,6 +6066,48 @@ static void test_default_dacl_owner_sid(void)
|
||||
CloseHandle( handle );
|
||||
}
|
||||
|
||||
+static void test_integrity(void)
|
||||
+{
|
||||
+ static SID low_level = {SID_REVISION, 1, {SECURITY_MANDATORY_LABEL_AUTHORITY},
|
||||
+ {SECURITY_MANDATORY_LOW_RID}};
|
||||
+ SYSTEM_MANDATORY_LABEL_ACE *ace;
|
||||
+ char buffer_acl[256];
|
||||
+ ACL *pAcl = (ACL*)&buffer_acl;
|
||||
+ BOOL ret, found;
|
||||
+ DWORD index;
|
||||
+
|
||||
+ if (!pAddMandatoryAce)
|
||||
+ {
|
||||
+ win_skip("Mandatory integrity labels not supported, skipping test\n");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ ret = InitializeAcl(pAcl, 256, ACL_REVISION);
|
||||
+ ok(ret, "InitializeAcl failed with %u\n", GetLastError());
|
||||
+
|
||||
+ ret = pAddMandatoryAce(pAcl, ACL_REVISION, 0, 0x1234, &low_level);
|
||||
+ ok(!ret, "AddMandatoryAce succeeded\n");
|
||||
+ ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER got %u\n", GetLastError());
|
||||
+
|
||||
+ ret = pAddMandatoryAce(pAcl, ACL_REVISION, 0, SYSTEM_MANDATORY_LABEL_NO_WRITE_UP, &low_level);
|
||||
+ ok(ret, "AddMandatoryAce failed with %u\n", GetLastError());
|
||||
+
|
||||
+ index = 0;
|
||||
+ found = FALSE;
|
||||
+ while (pGetAce( pAcl, index++, (void **)&ace ))
|
||||
+ {
|
||||
+ if (ace->Header.AceType == SYSTEM_MANDATORY_LABEL_ACE_TYPE)
|
||||
+ {
|
||||
+ found = TRUE;
|
||||
+ ok(ace->Header.AceFlags == 0, "Expected 0 as flags, got %x\n", ace->Header.AceFlags);
|
||||
+ ok(ace->Mask == SYSTEM_MANDATORY_LABEL_NO_WRITE_UP,
|
||||
+ "Expected SYSTEM_MANDATORY_LABEL_NO_WRITE_UP as flag, got %x\n", ace->Mask);
|
||||
+ ok(EqualSid(&ace->SidStart, &low_level), "Expected low integrity level\n");
|
||||
+ }
|
||||
+ }
|
||||
+ ok(found, "Could not find mandatory label\n");
|
||||
+}
|
||||
+
|
||||
static void test_AdjustTokenPrivileges(void)
|
||||
{
|
||||
TOKEN_PRIVILEGES tp, prev;
|
||||
@@ -6444,6 +6488,7 @@ START_TEST(security)
|
||||
test_CreateRestrictedToken();
|
||||
test_TokenIntegrityLevel();
|
||||
test_default_dacl_owner_sid();
|
||||
+ test_integrity();
|
||||
test_AdjustTokenPrivileges();
|
||||
test_AddAce();
|
||||
test_system_security_access();
|
||||
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
|
||||
index 28aa2df..f6f8eba 100644
|
||||
--- a/dlls/ntdll/ntdll.spec
|
||||
+++ b/dlls/ntdll/ntdll.spec
|
||||
@@ -422,6 +422,7 @@
|
||||
@ stdcall RtlAddAuditAccessAceEx(ptr long long long ptr long long)
|
||||
@ stdcall RtlAddAuditAccessObjectAce(ptr long long long ptr ptr ptr long long)
|
||||
# @ stub RtlAddCompoundAce
|
||||
+@ stdcall RtlAddMandatoryAce(ptr long long long long ptr)
|
||||
# @ stub RtlAddRange
|
||||
@ cdecl -arch=arm,x86_64 RtlAddFunctionTable(ptr long long)
|
||||
@ stdcall RtlAddRefActivationContext(ptr)
|
||||
diff --git a/dlls/ntdll/sec.c b/dlls/ntdll/sec.c
|
||||
index 3bc52ac..daa2cae 100644
|
||||
--- a/dlls/ntdll/sec.c
|
||||
+++ b/dlls/ntdll/sec.c
|
||||
@@ -1379,6 +1379,31 @@ NTSTATUS WINAPI RtlAddAuditAccessObjectAce(
|
||||
return STATUS_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
+/**************************************************************************
|
||||
+ * RtlAddMandatoryAce [NTDLL.@]
|
||||
+ */
|
||||
+NTSTATUS WINAPI RtlAddMandatoryAce(
|
||||
+ IN OUT PACL pAcl,
|
||||
+ IN DWORD dwAceRevision,
|
||||
+ IN DWORD dwAceFlags,
|
||||
+ IN DWORD dwMandatoryFlags,
|
||||
+ IN DWORD dwAceType,
|
||||
+ IN PSID pSid)
|
||||
+{
|
||||
+ static DWORD valid_flags = SYSTEM_MANDATORY_LABEL_NO_WRITE_UP | SYSTEM_MANDATORY_LABEL_NO_READ_UP |
|
||||
+ SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP;
|
||||
+
|
||||
+ TRACE("(%p,%d,0x%08x,0x%08x,%u,%p)\n",pAcl,dwAceRevision,dwAceFlags,dwMandatoryFlags, dwAceType, pSid);
|
||||
+
|
||||
+ if (dwAceType != SYSTEM_MANDATORY_LABEL_ACE_TYPE)
|
||||
+ return STATUS_INVALID_PARAMETER;
|
||||
+
|
||||
+ if (dwMandatoryFlags & ~valid_flags)
|
||||
+ return STATUS_INVALID_PARAMETER;
|
||||
+
|
||||
+ return add_access_ace(pAcl, dwAceRevision, dwAceFlags, dwMandatoryFlags, pSid, dwAceType);
|
||||
+}
|
||||
+
|
||||
/******************************************************************************
|
||||
* RtlValidAcl [NTDLL.@]
|
||||
*/
|
||||
diff --git a/include/winbase.h b/include/winbase.h
|
||||
index eff5972..42c826d 100644
|
||||
--- a/include/winbase.h
|
||||
+++ b/include/winbase.h
|
||||
@@ -1693,6 +1693,7 @@ WINBASEAPI ATOM WINAPI AddAtomW(LPCWSTR);
|
||||
#define AddAtom WINELIB_NAME_AW(AddAtom)
|
||||
WINADVAPI BOOL WINAPI AddAuditAccessAce(PACL,DWORD,DWORD,PSID,BOOL,BOOL);
|
||||
WINADVAPI BOOL WINAPI AddAuditAccessAceEx(PACL,DWORD,DWORD,DWORD,PSID,BOOL,BOOL);
|
||||
+WINADVAPI BOOL WINAPI AddMandatoryAce(PACL,DWORD,DWORD,DWORD,PSID);
|
||||
WINBASEAPI VOID WINAPI AddRefActCtx(HANDLE);
|
||||
WINBASEAPI PVOID WINAPI AddVectoredExceptionHandler(ULONG,PVECTORED_EXCEPTION_HANDLER);
|
||||
WINADVAPI BOOL WINAPI AdjustTokenGroups(HANDLE,BOOL,PTOKEN_GROUPS,DWORD,PTOKEN_GROUPS,PDWORD);
|
||||
diff --git a/include/winternl.h b/include/winternl.h
|
||||
index f35091c..c104e6f 100644
|
||||
--- a/include/winternl.h
|
||||
+++ b/include/winternl.h
|
||||
@@ -2405,6 +2405,7 @@ NTSYSAPI NTSTATUS WINAPI RtlAddAtomToAtomTable(RTL_ATOM_TABLE,const WCHAR*,RTL_
|
||||
NTSYSAPI NTSTATUS WINAPI RtlAddAuditAccessAce(PACL,DWORD,DWORD,PSID,BOOL,BOOL);
|
||||
NTSYSAPI NTSTATUS WINAPI RtlAddAuditAccessAceEx(PACL,DWORD,DWORD,DWORD,PSID,BOOL,BOOL);
|
||||
NTSYSAPI NTSTATUS WINAPI RtlAddAuditAccessObjectAce(PACL,DWORD,DWORD,DWORD,GUID*,GUID*,PSID,BOOL,BOOL);
|
||||
+NTSYSAPI NTSTATUS WINAPI RtlAddMandatoryAce(PACL,DWORD,DWORD,DWORD,DWORD,PSID);
|
||||
NTSYSAPI void WINAPI RtlAddRefActivationContext(HANDLE);
|
||||
NTSYSAPI PVOID WINAPI RtlAddVectoredExceptionHandler(ULONG,PVECTORED_EXCEPTION_HANDLER);
|
||||
NTSYSAPI NTSTATUS WINAPI RtlAdjustPrivilege(ULONG,BOOLEAN,BOOLEAN,PBOOLEAN);
|
||||
--
|
||||
2.9.0
|
||||
|
@@ -1 +0,0 @@
|
||||
Fixes: Implement advapi32.AddMandatoryAce
|
@@ -1,4 +1,4 @@
|
||||
From cb383abcb7d36d739092a93c1f276895622b6806 Mon Sep 17 00:00:00 2001
|
||||
From b4469d7a12637ef2b57df3f6aebbe65c9b52ef57 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sun, 28 Aug 2016 21:56:41 +0200
|
||||
Subject: advapi32: Implement GetExplicitEntriesFromAclW.
|
||||
@@ -9,7 +9,7 @@ Subject: advapi32: Implement GetExplicitEntriesFromAclW.
|
||||
2 files changed, 221 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c
|
||||
index 92a1789..c60aa4e 100644
|
||||
index 7e41c0a7361..ccd0bf64cab 100644
|
||||
--- a/dlls/advapi32/security.c
|
||||
+++ b/dlls/advapi32/security.c
|
||||
@@ -4202,8 +4202,85 @@ DWORD WINAPI GetExplicitEntriesFromAclA( PACL pacl, PULONG pcCountOfExplicitEntr
|
||||
@@ -101,7 +101,7 @@ index 92a1789..c60aa4e 100644
|
||||
|
||||
/******************************************************************************
|
||||
diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c
|
||||
index cf104ab..2bcb108 100644
|
||||
index c31dfbeace3..23cbff58117 100644
|
||||
--- a/dlls/advapi32/tests/security.c
|
||||
+++ b/dlls/advapi32/tests/security.c
|
||||
@@ -133,6 +133,7 @@ static BOOL (WINAPI *pGetWindowsAccountDomainSid)(PSID,PSID,DWORD*);
|
||||
@@ -120,8 +120,8 @@ index cf104ab..2bcb108 100644
|
||||
|
||||
myARGC = winetest_get_mainargs( &myARGV );
|
||||
}
|
||||
@@ -6378,6 +6380,145 @@ static void test_pseudo_tokens(void)
|
||||
"Expected ERROR_NO_TOKEN, got %u\n", GetLastError());
|
||||
@@ -6451,6 +6453,145 @@ static void test_maximum_allowed(void)
|
||||
CloseHandle(handle);
|
||||
}
|
||||
|
||||
+static void test_GetExplicitEntriesFromAclW(void)
|
||||
@@ -266,12 +266,12 @@ index cf104ab..2bcb108 100644
|
||||
START_TEST(security)
|
||||
{
|
||||
init();
|
||||
@@ -6424,4 +6565,5 @@ START_TEST(security)
|
||||
test_system_security_access();
|
||||
@@ -6499,4 +6640,5 @@ START_TEST(security)
|
||||
test_GetSidIdentifierAuthority();
|
||||
test_pseudo_tokens();
|
||||
test_maximum_allowed();
|
||||
+ test_GetExplicitEntriesFromAclW();
|
||||
}
|
||||
--
|
||||
2.9.0
|
||||
2.11.0
|
||||
|
||||
|
@@ -1,61 +0,0 @@
|
||||
From bb079b53bc79d44987d5f7ac93d0e1d2c5b00698 Mon Sep 17 00:00:00 2001
|
||||
From: Austin English <austinenglish@gmail.com>
|
||||
Date: Wed, 9 Nov 2016 21:46:10 -0600
|
||||
Subject: advapi32: add LookupSecurityDescriptorPartsA/W stubs
|
||||
|
||||
Fixes https://bugs.winehq.org/show_bug.cgi?id=41682
|
||||
---
|
||||
dlls/advapi32/advapi32.spec | 4 ++--
|
||||
dlls/advapi32/security.c | 24 ++++++++++++++++++++++++
|
||||
2 files changed, 26 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/advapi32/advapi32.spec b/dlls/advapi32/advapi32.spec
|
||||
index 6c57c88adf7..88d8634ef64 100644
|
||||
--- a/dlls/advapi32/advapi32.spec
|
||||
+++ b/dlls/advapi32/advapi32.spec
|
||||
@@ -415,8 +415,8 @@
|
||||
@ stdcall LookupPrivilegeNameW(wstr ptr ptr ptr)
|
||||
@ stdcall LookupPrivilegeValueA(ptr ptr ptr)
|
||||
@ stdcall LookupPrivilegeValueW(ptr ptr ptr)
|
||||
-# @ stub LookupSecurityDescriptorPartsA
|
||||
-# @ stub LookupSecurityDescriptorPartsW
|
||||
+@ stdcall LookupSecurityDescriptorPartsA(ptr ptr ptr ptr ptr ptr ptr)
|
||||
+@ stdcall LookupSecurityDescriptorPartsW(ptr ptr ptr ptr ptr ptr ptr)
|
||||
@ stdcall LsaAddAccountRights(ptr ptr ptr long)
|
||||
@ stub LsaAddPrivilegesToAccount
|
||||
# @ stub LsaClearAuditLog
|
||||
diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c
|
||||
index 3b5d7a42b6f..01e8ea02706 100644
|
||||
--- a/dlls/advapi32/security.c
|
||||
+++ b/dlls/advapi32/security.c
|
||||
@@ -6199,3 +6199,27 @@ BOOL WINAPI SaferSetLevelInformation(SAFER_LEVEL_HANDLE handle, SAFER_OBJECT_INF
|
||||
FIXME("(%p %u %p %u) stub\n", handle, infotype, buffer, size);
|
||||
return FALSE;
|
||||
}
|
||||
+
|
||||
+/******************************************************************************
|
||||
+ * LookupSecurityDescriptorPartsA [ADVAPI32.@]
|
||||
+ */
|
||||
+DWORD WINAPI LookupSecurityDescriptorPartsA(TRUSTEEA *owner, TRUSTEEA *group, ULONG *access_count,
|
||||
+ EXPLICIT_ACCESSA *access_list, ULONG *audit_count,
|
||||
+ EXPLICIT_ACCESSA *audit_list, SECURITY_DESCRIPTOR *descriptor)
|
||||
+{
|
||||
+ FIXME("(%p %p %p %p %p %p %p) stub\n", owner, group, access_count,
|
||||
+ access_list, audit_count, audit_list, descriptor);
|
||||
+ return ERROR_CALL_NOT_IMPLEMENTED;
|
||||
+}
|
||||
+
|
||||
+/******************************************************************************
|
||||
+ * LookupSecurityDescriptorPartsW [ADVAPI32.@]
|
||||
+ */
|
||||
+DWORD WINAPI LookupSecurityDescriptorPartsW(TRUSTEEW *owner, TRUSTEEW *group, ULONG *access_count,
|
||||
+ EXPLICIT_ACCESSW *access_list, ULONG *audit_count,
|
||||
+ EXPLICIT_ACCESSW *audit_list, SECURITY_DESCRIPTOR *descriptor)
|
||||
+{
|
||||
+ FIXME("(%p %p %p %p %p %p %p) stub\n", owner, group, access_count,
|
||||
+ access_list, audit_count, audit_list, descriptor);
|
||||
+ return ERROR_CALL_NOT_IMPLEMENTED;
|
||||
+}
|
||||
--
|
||||
2.11.0
|
||||
|
@@ -1 +0,0 @@
|
||||
Fixes: [41682] Add stub for advapi32.LookupSecurityDescriptorPartsA/W
|
@@ -1,4 +1,4 @@
|
||||
From 306414ced0169b9ee4de34706e9235acb1bd93d6 Mon Sep 17 00:00:00 2001
|
||||
From 77c8c1ec52dac0b2ad058a3c52de93422bf91ee6 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Fri, 15 Jan 2016 13:01:15 +0100
|
||||
Subject: kernelbase: Add dll and add stub for QuirkIsEnabled.
|
||||
@@ -22,7 +22,7 @@ index b9caed090b2..2beb34bafdb 100644
|
||||
+C_SRCS = \
|
||||
+ misc.c
|
||||
diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec
|
||||
index f104030ab25..74ff728cbc8 100644
|
||||
index f104030ab25..14d2578262f 100644
|
||||
--- a/dlls/kernelbase/kernelbase.spec
|
||||
+++ b/dlls/kernelbase/kernelbase.spec
|
||||
@@ -1,3 +1,6 @@
|
||||
@@ -464,7 +464,7 @@ index f104030ab25..74ff728cbc8 100644
|
||||
+@ stub GetCurrentPackageApplicationResourcesContext
|
||||
+@ stub GetCurrentPackageContext
|
||||
+@ stdcall GetCurrentPackageFamilyName(ptr ptr) kernel32.GetCurrentPackageFamilyName
|
||||
+@ stub GetCurrentPackageFullName
|
||||
+@ stdcall GetCurrentPackageFullName(ptr ptr) kernel32.GetCurrentPackageFullName
|
||||
+@ stdcall GetCurrentPackageId(ptr ptr) kernel32.GetCurrentPackageId
|
||||
+@ stub GetCurrentPackageInfo
|
||||
+@ stub GetCurrentPackagePath
|
||||
@@ -1367,8 +1367,8 @@ index f104030ab25..74ff728cbc8 100644
|
||||
+@ stdcall SetConsoleCtrlHandler(ptr long) kernel32.SetConsoleCtrlHandler
|
||||
+@ stdcall SetConsoleCursorInfo(long ptr) kernel32.SetConsoleCursorInfo
|
||||
+@ stdcall SetConsoleCursorPosition(long long) kernel32.SetConsoleCursorPosition
|
||||
+@ stdcall SetConsoleInputExeNameA(ptr) kernel32.SetConsoleInputExeNameA
|
||||
+@ stdcall SetConsoleInputExeNameW(ptr) kernel32.SetConsoleInputExeNameW
|
||||
+@ stdcall SetConsoleInputExeNameA(str) kernel32.SetConsoleInputExeNameA
|
||||
+@ stdcall SetConsoleInputExeNameW(wstr) kernel32.SetConsoleInputExeNameW
|
||||
+@ stdcall SetConsoleMode(long long) kernel32.SetConsoleMode
|
||||
+@ stdcall SetConsoleOutputCP(long) kernel32.SetConsoleOutputCP
|
||||
+@ stdcall SetConsoleScreenBufferInfoEx(long ptr) kernel32.SetConsoleScreenBufferInfoEx
|
||||
|
@@ -1,81 +1,52 @@
|
||||
From 0f19391f2d2b5478137635a66a560bb9e097075a Mon Sep 17 00:00:00 2001
|
||||
From aefdbc0fabb66052164ecd45fecfb0b947a130ac Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Tue, 12 Apr 2016 01:02:34 +0200
|
||||
Subject: uiautomationcore: Add dll and stub some functions.
|
||||
|
||||
---
|
||||
configure.ac | 1 +
|
||||
dlls/uiautomationcore/Makefile.in | 5 ++
|
||||
dlls/uiautomationcore/main.c | 117 ++++++++++++++++++++++++++++
|
||||
dlls/uiautomationcore/uiautomationcore.spec | 99 +++++++++++++++++++++++
|
||||
include/uiautomationcoreapi.h | 16 ++++
|
||||
5 files changed, 238 insertions(+)
|
||||
create mode 100644 dlls/uiautomationcore/Makefile.in
|
||||
create mode 100644 dlls/uiautomationcore/main.c
|
||||
create mode 100644 dlls/uiautomationcore/uiautomationcore.spec
|
||||
dlls/uiautomationcore/Makefile.in | 1 +
|
||||
dlls/uiautomationcore/uia_main.c | 89 ++++++++++++++++++++++++++++-
|
||||
dlls/uiautomationcore/uiautomationcore.spec | 14 +++--
|
||||
include/uiautomationcoreapi.h | 16 ++++++
|
||||
4 files changed, 114 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 4cfcdb1..9e8bbb9 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -3314,6 +3314,7 @@ WINE_CONFIG_TEST(dlls/twain_32/tests)
|
||||
WINE_CONFIG_DLL(typelib.dll16,enable_win16)
|
||||
WINE_CONFIG_DLL(ucrtbase,,[implib])
|
||||
WINE_CONFIG_TEST(dlls/ucrtbase/tests)
|
||||
+WINE_CONFIG_DLL(uiautomationcore)
|
||||
WINE_CONFIG_DLL(unicows,,[implib])
|
||||
WINE_CONFIG_DLL(updspapi)
|
||||
WINE_CONFIG_DLL(url,,[implib])
|
||||
diff --git a/dlls/uiautomationcore/Makefile.in b/dlls/uiautomationcore/Makefile.in
|
||||
new file mode 100644
|
||||
index 0000000..bd6f9d6
|
||||
--- /dev/null
|
||||
index 78d6254a015..029fc2e4995 100644
|
||||
--- a/dlls/uiautomationcore/Makefile.in
|
||||
+++ b/dlls/uiautomationcore/Makefile.in
|
||||
@@ -0,0 +1,5 @@
|
||||
+MODULE = uiautomationcore.dll
|
||||
@@ -1,4 +1,5 @@
|
||||
MODULE = uiautomationcore.dll
|
||||
+IMPORTS = uuid
|
||||
+
|
||||
+C_SRCS = \
|
||||
+ main.c
|
||||
diff --git a/dlls/uiautomationcore/main.c b/dlls/uiautomationcore/main.c
|
||||
new file mode 100644
|
||||
index 0000000..71fe84c
|
||||
--- /dev/null
|
||||
+++ b/dlls/uiautomationcore/main.c
|
||||
@@ -0,0 +1,117 @@
|
||||
+/*
|
||||
+ * uiautomationcore API
|
||||
+ *
|
||||
|
||||
C_SRCS = \
|
||||
uia_main.c
|
||||
diff --git a/dlls/uiautomationcore/uia_main.c b/dlls/uiautomationcore/uia_main.c
|
||||
index 994d8e6080b..f1429faeff9 100644
|
||||
--- a/dlls/uiautomationcore/uia_main.c
|
||||
+++ b/dlls/uiautomationcore/uia_main.c
|
||||
@@ -1,4 +1,5 @@
|
||||
/*
|
||||
+ * Copyright 2016 Michael MĂĽller
|
||||
+ *
|
||||
+ * This library is free software; you can redistribute it and/or
|
||||
+ * modify it under the terms of the GNU Lesser General Public
|
||||
+ * License as published by the Free Software Foundation; either
|
||||
+ * version 2.1 of the License, or (at your option) any later version.
|
||||
+ *
|
||||
+ * This library is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ * Lesser General Public License for more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU Lesser General Public
|
||||
+ * License along with this library; if not, write to the Free Software
|
||||
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
+ */
|
||||
+
|
||||
+#include "config.h"
|
||||
+
|
||||
* Copyright 2017 Jacek Caban for CodeWeavers
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
@@ -16,7 +17,11 @@
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
-#include "uiautomationcore.h"
|
||||
+#include <stdarg.h>
|
||||
+
|
||||
+#include "windef.h"
|
||||
+#include "winbase.h"
|
||||
+#include "wine/debug.h"
|
||||
+
|
||||
+#define COBJMACROS
|
||||
+#include "uiautomationcoreapi.h"
|
||||
+
|
||||
+WINE_DEFAULT_DEBUG_CHANNEL(uiautomation);
|
||||
+
|
||||
|
||||
#include "wine/debug.h"
|
||||
|
||||
@@ -37,11 +42,91 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, void *lpv)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
+static HRESULT WINAPI dummy_QueryInterface(IUnknown *iface, REFIID iid, void **ppv)
|
||||
+{
|
||||
+ TRACE("(%p, %s, %p)\n", iface, debugstr_guid(iid), ppv);
|
||||
@@ -115,12 +86,18 @@ index 0000000..71fe84c
|
||||
+
|
||||
+static IUnknown dummy = { &dummy_Vtbl };
|
||||
+
|
||||
+/***********************************************************************
|
||||
+ * UiaLookupId (uiautomationcore.@)
|
||||
+ */
|
||||
+int WINAPI UiaLookupId(AutomationIdentifierType type, const GUID *guid)
|
||||
+{
|
||||
+ FIXME("(%d, %s)\n", type, debugstr_guid(guid));
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+/***********************************************************************
|
||||
+ * UiaGetReservedMixedAttributeValue (uiautomationcore.@)
|
||||
+ */
|
||||
+HRESULT WINAPI UiaGetReservedMixedAttributeValue(IUnknown **value)
|
||||
+{
|
||||
+ FIXME("(%p): stub\n", value);
|
||||
@@ -129,6 +106,9 @@ index 0000000..71fe84c
|
||||
+ return S_OK;
|
||||
+}
|
||||
+
|
||||
+/***********************************************************************
|
||||
+ * UiaGetReservedNotSupportedValue (uiautomationcore.@)
|
||||
+ */
|
||||
+HRESULT WINAPI UiaGetReservedNotSupportedValue(IUnknown **value)
|
||||
+{
|
||||
+ FIXME("(%p): stub\n", value);
|
||||
@@ -137,6 +117,9 @@ index 0000000..71fe84c
|
||||
+ return S_OK;
|
||||
+}
|
||||
+
|
||||
+/***********************************************************************
|
||||
+ * UiaReturnRawElementProvider (uiautomationcore.@)
|
||||
+ */
|
||||
+LRESULT WINAPI UiaReturnRawElementProvider(HWND hwnd, WPARAM wparam, LPARAM lparam,
|
||||
+ IRawElementProviderSimple *provider)
|
||||
+{
|
||||
@@ -144,129 +127,68 @@ index 0000000..71fe84c
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, void *reserved)
|
||||
+{
|
||||
+ TRACE("(%p, %u, %p)\n", instance, reason, reserved);
|
||||
+
|
||||
+ switch (reason)
|
||||
+ {
|
||||
+ case DLL_WINE_PREATTACH:
|
||||
+ return FALSE; /* prefer native version */
|
||||
+ case DLL_PROCESS_ATTACH:
|
||||
+ DisableThreadLibraryCalls(instance);
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ return TRUE;
|
||||
+}
|
||||
/***********************************************************************
|
||||
* UiaClientsAreListening (uiautomationcore.@)
|
||||
*/
|
||||
BOOL WINAPI UiaClientsAreListening(void)
|
||||
{
|
||||
- FIXME("()\n");
|
||||
+ FIXME("(): stub\n");
|
||||
return FALSE;
|
||||
}
|
||||
diff --git a/dlls/uiautomationcore/uiautomationcore.spec b/dlls/uiautomationcore/uiautomationcore.spec
|
||||
new file mode 100644
|
||||
index 0000000..321cd06
|
||||
--- /dev/null
|
||||
index 3026001b6b7..221711c41d2 100644
|
||||
--- a/dlls/uiautomationcore/uiautomationcore.spec
|
||||
+++ b/dlls/uiautomationcore/uiautomationcore.spec
|
||||
@@ -0,0 +1,99 @@
|
||||
+@ stub DllCanUnloadNow
|
||||
+@ stub DllGetClassObject
|
||||
+@ stub DllRegisterServer
|
||||
+@ stub DllUnregisterServer
|
||||
+@ stub DockPattern_SetDockPosition
|
||||
+@ stub ExpandCollapsePattern_Collapse
|
||||
+@ stub ExpandCollapsePattern_Expand
|
||||
+@ stub GridPattern_GetItem
|
||||
+@ stub InvokePattern_Invoke
|
||||
+@ stub ItemContainerPattern_FindItemByProperty
|
||||
+@ stub LegacyIAccessiblePattern_DoDefaultAction
|
||||
+@ stub LegacyIAccessiblePattern_GetIAccessible
|
||||
+@ stub LegacyIAccessiblePattern_Select
|
||||
+@ stub LegacyIAccessiblePattern_SetValue
|
||||
+@ stub MultipleViewPattern_GetViewName
|
||||
+@ stub MultipleViewPattern_SetCurrentView
|
||||
+@ stub RangeValuePattern_SetValue
|
||||
+@ stub ScrollItemPattern_ScrollIntoView
|
||||
+@ stub ScrollPattern_Scroll
|
||||
+@ stub ScrollPattern_SetScrollPercent
|
||||
+@ stub SelectionItemPattern_AddToSelection
|
||||
+@ stub SelectionItemPattern_RemoveFromSelection
|
||||
+@ stub SelectionItemPattern_Select
|
||||
+@ stub SynchronizedInputPattern_Cancel
|
||||
+@ stub SynchronizedInputPattern_StartListening
|
||||
+@ stub TextPattern_GetSelection
|
||||
+@ stub TextPattern_GetVisibleRanges
|
||||
+@ stub TextPattern_RangeFromChild
|
||||
+@ stub TextPattern_RangeFromPoint
|
||||
+@ stub TextPattern_get_DocumentRange
|
||||
+@ stub TextPattern_get_SupportedTextSelection
|
||||
+@ stub TextRange_AddToSelection
|
||||
+@ stub TextRange_Clone
|
||||
+@ stub TextRange_Compare
|
||||
+@ stub TextRange_CompareEndpoints
|
||||
+@ stub TextRange_ExpandToEnclosingUnit
|
||||
+@ stub TextRange_FindAttribute
|
||||
+@ stub TextRange_FindText
|
||||
+@ stub TextRange_GetAttributeValue
|
||||
+@ stub TextRange_GetBoundingRectangles
|
||||
+@ stub TextRange_GetChildren
|
||||
+@ stub TextRange_GetEnclosingElement
|
||||
+@ stub TextRange_GetText
|
||||
+@ stub TextRange_Move
|
||||
+@ stub TextRange_MoveEndpointByRange
|
||||
+@ stub TextRange_MoveEndpointByUnit
|
||||
+@ stub TextRange_RemoveFromSelection
|
||||
+@ stub TextRange_ScrollIntoView
|
||||
+@ stub TextRange_Select
|
||||
+@ stub TogglePattern_Toggle
|
||||
+@ stub TransformPattern_Move
|
||||
+@ stub TransformPattern_Resize
|
||||
+@ stub TransformPattern_Rotate
|
||||
+@ stub UiaAddEvent
|
||||
+@ stub UiaClientsAreListening
|
||||
@@ -53,14 +53,16 @@
|
||||
@ stub TransformPattern_Rotate
|
||||
@ stub UiaAddEvent
|
||||
@ stdcall UiaClientsAreListening()
|
||||
+@ stub UiaDisconnectAllProviders
|
||||
+@ stub UiaDisconnectProvider
|
||||
+@ stub UiaEventAddWindow
|
||||
+@ stub UiaEventRemoveWindow
|
||||
+@ stub UiaFind
|
||||
+@ stub UiaGetErrorDescription
|
||||
+@ stub UiaGetPatternProvider
|
||||
+@ stub UiaGetPropertyValue
|
||||
@ stub UiaEventAddWindow
|
||||
@ stub UiaEventRemoveWindow
|
||||
@ stub UiaFind
|
||||
@ stub UiaGetErrorDescription
|
||||
@ stub UiaGetPatternProvider
|
||||
@ stub UiaGetPropertyValue
|
||||
-@ stub UiaGetReservedMixedAttributeValue
|
||||
-@ stub UiaGetReservedNotSupportedValue
|
||||
+@ stdcall UiaGetReservedMixedAttributeValue(ptr)
|
||||
+@ stdcall UiaGetReservedNotSupportedValue(ptr)
|
||||
+@ stub UiaGetRootNode
|
||||
+@ stub UiaGetRuntimeId
|
||||
+@ stub UiaGetUpdatedCache
|
||||
+@ stub UiaHPatternObjectFromVariant
|
||||
+@ stub UiaHTextRangeFromVariant
|
||||
+@ stub UiaHUiaNodeFromVariant
|
||||
+@ stub UiaHasServerSideProvider
|
||||
+@ stub UiaHostProviderFromHwnd
|
||||
@ stub UiaGetRootNode
|
||||
@ stub UiaGetRuntimeId
|
||||
@ stub UiaGetUpdatedCache
|
||||
@@ -69,7 +71,8 @@
|
||||
@ stub UiaHUiaNodeFromVariant
|
||||
@ stub UiaHasServerSideProvider
|
||||
@ stub UiaHostProviderFromHwnd
|
||||
-@ stub UiaLookupId
|
||||
+@ stub UiaIAccessibleFromProvider
|
||||
+@ stdcall UiaLookupId(long ptr)
|
||||
+@ stub UiaNavigate
|
||||
+@ stub UiaNodeFromFocus
|
||||
+@ stub UiaNodeFromHandle
|
||||
+@ stub UiaNodeFromPoint
|
||||
+@ stub UiaNodeFromProvider
|
||||
+@ stub UiaNodeRelease
|
||||
+@ stub UiaPatternRelease
|
||||
@ stub UiaNavigate
|
||||
@ stub UiaNodeFromFocus
|
||||
@ stub UiaNodeFromHandle
|
||||
@@ -77,13 +80,16 @@
|
||||
@ stub UiaNodeFromProvider
|
||||
@ stub UiaNodeRelease
|
||||
@ stub UiaPatternRelease
|
||||
+@ stub UiaProviderForNonClient
|
||||
+@ stub UiaProviderFromIAccessible
|
||||
+@ stub UiaRaiseAsyncContentLoadedEvent
|
||||
+@ stub UiaRaiseAutomationEvent
|
||||
+@ stub UiaRaiseAutomationPropertyChangedEvent
|
||||
+@ stub UiaRaiseStructureChangedEvent
|
||||
@ stub UiaRaiseAsyncContentLoadedEvent
|
||||
@ stub UiaRaiseAutomationEvent
|
||||
@ stub UiaRaiseAutomationPropertyChangedEvent
|
||||
@ stub UiaRaiseStructureChangedEvent
|
||||
+@ stub UiaRaiseTextEditTextChangedEvent
|
||||
+@ stub UiaRegisterProviderCallback
|
||||
+@ stub UiaRemoveEvent
|
||||
@ stub UiaRegisterProviderCallback
|
||||
@ stub UiaRemoveEvent
|
||||
-@ stub UiaReturnRawElementProvider
|
||||
+@ stdcall UiaReturnRawElementProvider(long long long ptr)
|
||||
+@ stub UiaSetFocus
|
||||
+@ stub UiaTextRangeRelease
|
||||
+@ stub ValuePattern_SetValue
|
||||
+@ stub VirtualizedItemPattern_Realize
|
||||
+@ stub WindowPattern_Close
|
||||
+@ stub WindowPattern_SetWindowVisualState
|
||||
+@ stub WindowPattern_WaitForInputIdle
|
||||
@ stub UiaSetFocus
|
||||
@ stub UiaTextRangeRelease
|
||||
@ stub ValuePattern_SetValue
|
||||
diff --git a/include/uiautomationcoreapi.h b/include/uiautomationcoreapi.h
|
||||
index 340f500..b9107ce 100644
|
||||
index 340f5005db4..b9107ceb792 100644
|
||||
--- a/include/uiautomationcoreapi.h
|
||||
+++ b/include/uiautomationcoreapi.h
|
||||
@@ -19,6 +19,8 @@
|
||||
@@ -307,5 +229,5 @@ index 340f500..b9107ce 100644
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
--
|
||||
2.9.0
|
||||
2.11.0
|
||||
|
||||
|
@@ -1,43 +0,0 @@
|
||||
From 7b2e5b361ebe380ae671b8f3d2ae4c90167354dc Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Tue, 15 Nov 2016 22:00:38 +0100
|
||||
Subject: uiautomationcore: Add stub for UiaClientsAreListening.
|
||||
|
||||
---
|
||||
dlls/uiautomationcore/main.c | 6 ++++++
|
||||
dlls/uiautomationcore/uiautomationcore.spec | 2 +-
|
||||
2 files changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/uiautomationcore/main.c b/dlls/uiautomationcore/main.c
|
||||
index 71fe84c..6ea1351 100644
|
||||
--- a/dlls/uiautomationcore/main.c
|
||||
+++ b/dlls/uiautomationcore/main.c
|
||||
@@ -99,6 +99,12 @@ LRESULT WINAPI UiaReturnRawElementProvider(HWND hwnd, WPARAM wparam, LPARAM lpar
|
||||
return 0;
|
||||
}
|
||||
|
||||
+BOOL WINAPI UiaClientsAreListening(void)
|
||||
+{
|
||||
+ FIXME("(): stub\n");
|
||||
+ return FALSE;
|
||||
+}
|
||||
+
|
||||
|
||||
BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, void *reserved)
|
||||
{
|
||||
diff --git a/dlls/uiautomationcore/uiautomationcore.spec b/dlls/uiautomationcore/uiautomationcore.spec
|
||||
index 321cd06..221711c 100644
|
||||
--- a/dlls/uiautomationcore/uiautomationcore.spec
|
||||
+++ b/dlls/uiautomationcore/uiautomationcore.spec
|
||||
@@ -52,7 +52,7 @@
|
||||
@ stub TransformPattern_Resize
|
||||
@ stub TransformPattern_Rotate
|
||||
@ stub UiaAddEvent
|
||||
-@ stub UiaClientsAreListening
|
||||
+@ stdcall UiaClientsAreListening()
|
||||
@ stub UiaDisconnectAllProviders
|
||||
@ stub UiaDisconnectProvider
|
||||
@ stub UiaEventAddWindow
|
||||
--
|
||||
2.9.0
|
||||
|
@@ -0,0 +1,375 @@
|
||||
From cbf5204cddb1146f236c04660856418074c613d7 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Sun, 5 Mar 2017 23:18:03 +0100
|
||||
Subject: bcrypt: Implement support for ECB chain mode.
|
||||
|
||||
---
|
||||
dlls/bcrypt/bcrypt_main.c | 43 ++++++++--
|
||||
dlls/bcrypt/tests/bcrypt.c | 206 +++++++++++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 240 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/dlls/bcrypt/bcrypt_main.c b/dlls/bcrypt/bcrypt_main.c
|
||||
index 1b548c9f406..a161eb26d8f 100644
|
||||
--- a/dlls/bcrypt/bcrypt_main.c
|
||||
+++ b/dlls/bcrypt/bcrypt_main.c
|
||||
@@ -186,6 +186,7 @@ enum alg_id
|
||||
|
||||
enum mode_id
|
||||
{
|
||||
+ MODE_ID_ECB,
|
||||
MODE_ID_CBC,
|
||||
MODE_ID_GCM
|
||||
};
|
||||
@@ -519,8 +520,9 @@ static NTSTATUS get_alg_property( const struct algorithm *alg, const WCHAR *prop
|
||||
const WCHAR *mode;
|
||||
switch (alg->mode)
|
||||
{
|
||||
- case MODE_ID_GCM: mode = BCRYPT_CHAIN_MODE_GCM; break;
|
||||
+ case MODE_ID_ECB: mode = BCRYPT_CHAIN_MODE_ECB; break;
|
||||
case MODE_ID_CBC: mode = BCRYPT_CHAIN_MODE_CBC; break;
|
||||
+ case MODE_ID_GCM: mode = BCRYPT_CHAIN_MODE_GCM; break;
|
||||
default: return STATUS_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
@@ -619,7 +621,12 @@ static NTSTATUS set_alg_property( struct algorithm *alg, const WCHAR *prop, UCHA
|
||||
case ALG_ID_AES:
|
||||
if (!strcmpW( prop, BCRYPT_CHAINING_MODE ))
|
||||
{
|
||||
- if (!strncmpW( (WCHAR *)value, BCRYPT_CHAIN_MODE_CBC, size ))
|
||||
+ if (!strncmpW( (WCHAR *)value, BCRYPT_CHAIN_MODE_ECB, size ))
|
||||
+ {
|
||||
+ alg->mode = MODE_ID_ECB;
|
||||
+ return STATUS_SUCCESS;
|
||||
+ }
|
||||
+ else if (!strncmpW( (WCHAR *)value, BCRYPT_CHAIN_MODE_CBC, size ))
|
||||
{
|
||||
alg->mode = MODE_ID_CBC;
|
||||
return STATUS_SUCCESS;
|
||||
@@ -951,7 +958,12 @@ static NTSTATUS set_key_property( struct key *key, const WCHAR *prop, UCHAR *val
|
||||
{
|
||||
if (!strcmpW( prop, BCRYPT_CHAINING_MODE ))
|
||||
{
|
||||
- if (!strncmpW( (WCHAR *)value, BCRYPT_CHAIN_MODE_CBC, size ))
|
||||
+ if (!strncmpW( (WCHAR *)value, BCRYPT_CHAIN_MODE_ECB, size ))
|
||||
+ {
|
||||
+ key->mode = MODE_ID_ECB;
|
||||
+ return STATUS_SUCCESS;
|
||||
+ }
|
||||
+ else if (!strncmpW( (WCHAR *)value, BCRYPT_CHAIN_MODE_CBC, size ))
|
||||
{
|
||||
key->mode = MODE_ID_CBC;
|
||||
return STATUS_SUCCESS;
|
||||
@@ -981,6 +993,7 @@ static gnutls_cipher_algorithm_t get_gnutls_cipher( const struct key *key )
|
||||
switch (key->mode)
|
||||
{
|
||||
case MODE_ID_GCM: return GNUTLS_CIPHER_AES_128_GCM;
|
||||
+ case MODE_ID_ECB: /* can be emulated with CBC + empty IV */
|
||||
case MODE_ID_CBC:
|
||||
default: return GNUTLS_CIPHER_AES_128_CBC;
|
||||
}
|
||||
@@ -992,6 +1005,7 @@ static gnutls_cipher_algorithm_t get_gnutls_cipher( const struct key *key )
|
||||
|
||||
static NTSTATUS key_set_params( struct key *key, UCHAR *iv, ULONG iv_len )
|
||||
{
|
||||
+ static const UCHAR zero_iv[16];
|
||||
gnutls_cipher_algorithm_t cipher;
|
||||
gnutls_datum_t secret, vector;
|
||||
int ret;
|
||||
@@ -1005,15 +1019,18 @@ static NTSTATUS key_set_params( struct key *key, UCHAR *iv, ULONG iv_len )
|
||||
if ((cipher = get_gnutls_cipher( key )) == GNUTLS_CIPHER_UNKNOWN)
|
||||
return STATUS_NOT_SUPPORTED;
|
||||
|
||||
- secret.data = key->secret;
|
||||
- secret.size = key->secret_len;
|
||||
- if (iv)
|
||||
+ if (!iv)
|
||||
{
|
||||
- vector.data = iv;
|
||||
- vector.size = iv_len;
|
||||
+ iv = (UCHAR *)zero_iv;
|
||||
+ iv_len = sizeof(zero_iv);
|
||||
}
|
||||
|
||||
- if ((ret = pgnutls_cipher_init( &key->handle, cipher, &secret, iv ? &vector : NULL )))
|
||||
+ secret.data = key->secret;
|
||||
+ secret.size = key->secret_len;
|
||||
+ vector.data = iv;
|
||||
+ vector.size = iv_len;
|
||||
+
|
||||
+ if ((ret = pgnutls_cipher_init( &key->handle, cipher, &secret, &vector )))
|
||||
{
|
||||
pgnutls_perror( ret );
|
||||
return STATUS_INTERNAL_ERROR;
|
||||
@@ -1277,11 +1294,15 @@ NTSTATUS WINAPI BCryptEncrypt( BCRYPT_KEY_HANDLE handle, UCHAR *input, ULONG inp
|
||||
if (!output) return STATUS_SUCCESS;
|
||||
if (output_len < *ret_len) return STATUS_BUFFER_TOO_SMALL;
|
||||
|
||||
+ if (key->mode == MODE_ID_ECB && iv)
|
||||
+ return STATUS_INVALID_PARAMETER;
|
||||
+
|
||||
src = input;
|
||||
dst = output;
|
||||
while (bytes_left >= key->block_size)
|
||||
{
|
||||
if ((status = key_encrypt( key, src, key->block_size, dst, key->block_size ))) return status;
|
||||
+ if (key->mode == MODE_ID_ECB && (status = key_set_params( key, iv, iv_len ))) return status;
|
||||
bytes_left -= key->block_size;
|
||||
src += key->block_size;
|
||||
dst += key->block_size;
|
||||
@@ -1364,11 +1385,15 @@ NTSTATUS WINAPI BCryptDecrypt( BCRYPT_KEY_HANDLE handle, UCHAR *input, ULONG inp
|
||||
else if (output_len < *ret_len)
|
||||
return STATUS_BUFFER_TOO_SMALL;
|
||||
|
||||
+ if (key->mode == MODE_ID_ECB && iv)
|
||||
+ return STATUS_INVALID_PARAMETER;
|
||||
+
|
||||
src = input;
|
||||
dst = output;
|
||||
while (bytes_left >= key->block_size)
|
||||
{
|
||||
if ((status = key_decrypt( key, src, key->block_size, dst, key->block_size ))) return status;
|
||||
+ if (key->mode == MODE_ID_ECB && (status = key_set_params( key, iv, iv_len ))) return status;
|
||||
bytes_left -= key->block_size;
|
||||
src += key->block_size;
|
||||
dst += key->block_size;
|
||||
diff --git a/dlls/bcrypt/tests/bcrypt.c b/dlls/bcrypt/tests/bcrypt.c
|
||||
index 8be4c5b809d..aa8e7e17490 100644
|
||||
--- a/dlls/bcrypt/tests/bcrypt.c
|
||||
+++ b/dlls/bcrypt/tests/bcrypt.c
|
||||
@@ -997,6 +997,15 @@ static void test_BCryptEncrypt(void)
|
||||
static UCHAR expected4[] =
|
||||
{0xe1,0x82,0xc3,0xc0,0x24,0xfb,0x86,0x85,0xf3,0xf1,0x2b,0x7d,0x09,0xb4,0x73,0x67,
|
||||
0x86,0x64,0xc3,0xfe,0xa3,0x07,0x61,0xf8,0x16,0xc9,0x78,0x7f,0xe7,0xb1,0xc4,0x94};
|
||||
+ static UCHAR expected5[] =
|
||||
+ {0x0a,0x94,0x0b,0xb5,0x41,0x6e,0xf0,0x45,0xf1,0xc3,0x94,0x58,0xc6,0x53,0xea,0x5a};
|
||||
+ static UCHAR expected6[] =
|
||||
+ {0x0a,0x94,0x0b,0xb5,0x41,0x6e,0xf0,0x45,0xf1,0xc3,0x94,0x58,0xc6,0x53,0xea,0x5a,
|
||||
+ 0x84,0x07,0x66,0xb7,0x49,0xc0,0x9b,0x49,0x74,0x28,0x8c,0x10,0xb9,0xc2,0x09,0x70};
|
||||
+ static UCHAR expected7[] =
|
||||
+ {0x0a,0x94,0x0b,0xb5,0x41,0x6e,0xf0,0x45,0xf1,0xc3,0x94,0x58,0xc6,0x53,0xea,0x5a,
|
||||
+ 0x95,0x4f,0x64,0xf2,0xe4,0xe8,0x6e,0x9e,0xee,0x82,0xd2,0x02,0x16,0x68,0x48,0x99,
|
||||
+ 0x95,0x4f,0x64,0xf2,0xe4,0xe8,0x6e,0x9e,0xee,0x82,0xd2,0x02,0x16,0x68,0x48,0x99};
|
||||
static UCHAR expected_tag[] =
|
||||
{0x89,0xb3,0x92,0x00,0x39,0x20,0x09,0xb4,0x6a,0xd6,0xaf,0xca,0x4b,0x5b,0xfd,0xd0};
|
||||
static UCHAR expected_tag2[] =
|
||||
@@ -1209,6 +1218,97 @@ static void test_BCryptEncrypt(void)
|
||||
ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
HeapFree(GetProcessHeap(), 0, buf);
|
||||
|
||||
+ /******************
|
||||
+ * AES - ECB mode *
|
||||
+ ******************/
|
||||
+
|
||||
+ ret = BCryptSetProperty(aes, BCRYPT_CHAINING_MODE, (UCHAR*)BCRYPT_CHAIN_MODE_ECB, sizeof(BCRYPT_CHAIN_MODE_ECB), 0);
|
||||
+ ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
+
|
||||
+ len = 0xdeadbeef;
|
||||
+ size = sizeof(len);
|
||||
+ ret = pBCryptGetProperty(aes, BCRYPT_OBJECT_LENGTH, (UCHAR *)&len, sizeof(len), &size, 0);
|
||||
+ ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
+
|
||||
+ buf = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len);
|
||||
+ ret = pBCryptGenerateSymmetricKey(aes, &key, buf, len, secret, sizeof(secret), 0);
|
||||
+ ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
+
|
||||
+ /* initialization vector is not allowed */
|
||||
+ size = 0;
|
||||
+ memcpy(ivbuf, iv, sizeof(iv));
|
||||
+ ret = pBCryptEncrypt(key, data, 16, NULL, ivbuf, 16, ciphertext, 16, &size, 0);
|
||||
+ ok(ret == STATUS_INVALID_PARAMETER, "got %08x\n", ret);
|
||||
+ ok(size == 16, "got %u\n", size);
|
||||
+
|
||||
+ /* input size is a multiple of block size */
|
||||
+ size = 0;
|
||||
+ ret = pBCryptEncrypt(key, data, 16, NULL, NULL, 16, NULL, 0, &size, 0);
|
||||
+ ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
+ ok(size == 16, "got %u\n", size);
|
||||
+
|
||||
+ size = 0;
|
||||
+ memset(ciphertext, 0, sizeof(ciphertext));
|
||||
+ ret = pBCryptEncrypt(key, data, 16, NULL, NULL, 16, ciphertext, 16, &size, 0);
|
||||
+ ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
+ ok(size == 16, "got %u\n", size);
|
||||
+ ok(!memcmp(ciphertext, expected5, sizeof(expected5)), "wrong data\n");
|
||||
+ for (i = 0; i < 16; i++)
|
||||
+ ok(ciphertext[i] == expected5[i], "%u: %02x != %02x\n", i, ciphertext[i], expected5[i]);
|
||||
+
|
||||
+ /* input size is not a multiple of block size */
|
||||
+ size = 0;
|
||||
+ ret = pBCryptEncrypt(key, data, 17, NULL, NULL, 16, NULL, 0, &size, 0);
|
||||
+ ok(ret == STATUS_INVALID_BUFFER_SIZE, "got %08x\n", ret);
|
||||
+ ok(size == 17, "got %u\n", size);
|
||||
+
|
||||
+ /* input size is not a multiple of block size, block padding set */
|
||||
+ size = 0;
|
||||
+ ret = pBCryptEncrypt(key, data, 17, NULL, NULL, 16, NULL, 0, &size, BCRYPT_BLOCK_PADDING);
|
||||
+ ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
+ ok(size == 32, "got %u\n", size);
|
||||
+
|
||||
+ size = 0;
|
||||
+ memset(ciphertext, 0, sizeof(ciphertext));
|
||||
+ ret = pBCryptEncrypt(key, data, 17, NULL, NULL, 16, ciphertext, 32, &size, BCRYPT_BLOCK_PADDING);
|
||||
+ ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
+ ok(size == 32, "got %u\n", size);
|
||||
+ ok(!memcmp(ciphertext, expected6, sizeof(expected6)), "wrong data\n");
|
||||
+ for (i = 0; i < 32; i++)
|
||||
+ ok(ciphertext[i] == expected6[i], "%u: %02x != %02x\n", i, ciphertext[i], expected6[i]);
|
||||
+
|
||||
+ /* input size is a multiple of block size, block padding set */
|
||||
+ size = 0;
|
||||
+ ret = pBCryptEncrypt(key, data2, 32, NULL, NULL, 16, NULL, 0, &size, BCRYPT_BLOCK_PADDING);
|
||||
+ ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
+ ok(size == 48, "got %u\n", size);
|
||||
+
|
||||
+ size = 0;
|
||||
+ memset(ciphertext, 0, sizeof(ciphertext));
|
||||
+ ret = pBCryptEncrypt(key, data2, 32, NULL, NULL, 16, ciphertext, 48, &size, BCRYPT_BLOCK_PADDING);
|
||||
+ ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
+ ok(size == 48, "got %u\n", size);
|
||||
+ ok(!memcmp(ciphertext, expected7, sizeof(expected7)), "wrong data\n");
|
||||
+ for (i = 0; i < 48; i++)
|
||||
+ ok(ciphertext[i] == expected7[i], "%u: %02x != %02x\n", i, ciphertext[i], expected7[i]);
|
||||
+
|
||||
+ /* output size too small */
|
||||
+ size = 0;
|
||||
+ memset(ciphertext, 0, sizeof(ciphertext));
|
||||
+ ret = pBCryptEncrypt(key, data, 17, NULL, NULL, 16, ciphertext, 31, &size, BCRYPT_BLOCK_PADDING);
|
||||
+ ok(ret == STATUS_BUFFER_TOO_SMALL, "got %08x\n", ret);
|
||||
+ ok(size == 32, "got %u\n", size);
|
||||
+
|
||||
+ size = 0;
|
||||
+ memset(ciphertext, 0, sizeof(ciphertext));
|
||||
+ ret = pBCryptEncrypt(key, data2, 32, NULL, NULL, 16, ciphertext, 32, &size, BCRYPT_BLOCK_PADDING);
|
||||
+ ok(ret == STATUS_BUFFER_TOO_SMALL, "got %08x\n", ret);
|
||||
+ ok(size == 48, "got %u\n", size);
|
||||
+
|
||||
+ ret = pBCryptDestroyKey(key);
|
||||
+ ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
+ HeapFree(GetProcessHeap(), 0, buf);
|
||||
+
|
||||
ret = pBCryptCloseAlgorithmProvider(aes, 0);
|
||||
ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
}
|
||||
@@ -1243,6 +1343,13 @@ static void test_BCryptDecrypt(void)
|
||||
static UCHAR ciphertext4[] =
|
||||
{0xe1,0x82,0xc3,0xc0,0x24,0xfb,0x86,0x85,0xf3,0xf1,0x2b,0x7d,0x09,0xb4,0x73,0x67,
|
||||
0x86,0x64,0xc3,0xfe,0xa3,0x07,0x61,0xf8,0x16,0xc9,0x78,0x7f,0xe7,0xb1,0xc4,0x94};
|
||||
+ static UCHAR ciphertext5[] =
|
||||
+ {0x0a,0x94,0x0b,0xb5,0x41,0x6e,0xf0,0x45,0xf1,0xc3,0x94,0x58,0xc6,0x53,0xea,0x5a,
|
||||
+ 0x84,0x07,0x66,0xb7,0x49,0xc0,0x9b,0x49,0x74,0x28,0x8c,0x10,0xb9,0xc2,0x09,0x70};
|
||||
+ static UCHAR ciphertext6[] =
|
||||
+ {0x0a,0x94,0x0b,0xb5,0x41,0x6e,0xf0,0x45,0xf1,0xc3,0x94,0x58,0xc6,0x53,0xea,0x5a,
|
||||
+ 0x95,0x4f,0x64,0xf2,0xe4,0xe8,0x6e,0x9e,0xee,0x82,0xd2,0x02,0x16,0x68,0x48,0x99,
|
||||
+ 0x95,0x4f,0x64,0xf2,0xe4,0xe8,0x6e,0x9e,0xee,0x82,0xd2,0x02,0x16,0x68,0x48,0x99};
|
||||
static UCHAR tag[] =
|
||||
{0x89,0xb3,0x92,0x00,0x39,0x20,0x09,0xb4,0x6a,0xd6,0xaf,0xca,0x4b,0x5b,0xfd,0xd0};
|
||||
static UCHAR tag2[] =
|
||||
@@ -1411,6 +1518,105 @@ static void test_BCryptDecrypt(void)
|
||||
ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
HeapFree(GetProcessHeap(), 0, buf);
|
||||
|
||||
+ /******************
|
||||
+ * AES - ECB mode *
|
||||
+ ******************/
|
||||
+
|
||||
+ ret = BCryptSetProperty(aes, BCRYPT_CHAINING_MODE, (UCHAR*)BCRYPT_CHAIN_MODE_ECB, sizeof(BCRYPT_CHAIN_MODE_ECB), 0);
|
||||
+ ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
+
|
||||
+ len = 0xdeadbeef;
|
||||
+ size = sizeof(len);
|
||||
+ ret = pBCryptGetProperty(aes, BCRYPT_OBJECT_LENGTH, (UCHAR *)&len, sizeof(len), &size, 0);
|
||||
+ ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
+
|
||||
+ buf = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len);
|
||||
+ ret = pBCryptGenerateSymmetricKey(aes, &key, buf, len, secret, sizeof(secret), 0);
|
||||
+ ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
+
|
||||
+ /* initialization vector is not allowed */
|
||||
+ size = 0;
|
||||
+ memcpy(ivbuf, iv, sizeof(iv));
|
||||
+ ret = pBCryptDecrypt(key, ciphertext5, 32, NULL, ivbuf, 16, plaintext, 32, &size, 0);
|
||||
+ ok(ret == STATUS_INVALID_PARAMETER, "got %08x\n", ret);
|
||||
+ ok(size == 32, "got %u\n", size);
|
||||
+
|
||||
+ /* input size is a multiple of block size */
|
||||
+ size = 0;
|
||||
+ ret = pBCryptDecrypt(key, ciphertext5, 32, NULL, NULL, 16, NULL, 0, &size, 0);
|
||||
+ ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
+ ok(size == 32, "got %u\n", size);
|
||||
+
|
||||
+ size = 0;
|
||||
+ memset(plaintext, 0, sizeof(plaintext));
|
||||
+ ret = pBCryptDecrypt(key, ciphertext5, 32, NULL, NULL, 16, plaintext, 32, &size, 0);
|
||||
+ ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
+ ok(size == 32, "got %u\n", size);
|
||||
+ ok(!memcmp(plaintext, expected, sizeof(expected)), "wrong data\n");
|
||||
+
|
||||
+ /* test with padding smaller than block size */
|
||||
+ size = 0;
|
||||
+ ret = pBCryptDecrypt(key, ciphertext5, 32, NULL, NULL, 16, NULL, 0, &size, 0);
|
||||
+ ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
+ ok(size == 32, "got %u\n", size);
|
||||
+
|
||||
+ size = 0;
|
||||
+ memset(plaintext, 0, sizeof(plaintext));
|
||||
+ ret = pBCryptDecrypt(key, ciphertext5, 32, NULL, NULL, 16, plaintext, 17, &size, BCRYPT_BLOCK_PADDING);
|
||||
+ ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
+ ok(size == 17, "got %u\n", size);
|
||||
+ ok(!memcmp(plaintext, expected2, sizeof(expected2)), "wrong data\n");
|
||||
+
|
||||
+ /* test with padding of block size */
|
||||
+ size = 0;
|
||||
+ ret = pBCryptDecrypt(key, ciphertext6, 48, NULL, NULL, 16, NULL, 0, &size, 0);
|
||||
+ ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
+ ok(size == 48, "got %u\n", size);
|
||||
+
|
||||
+ size = 0;
|
||||
+ memset(plaintext, 0, sizeof(plaintext));
|
||||
+ ret = pBCryptDecrypt(key, ciphertext6, 48, NULL, NULL, 16, plaintext, 32, &size, BCRYPT_BLOCK_PADDING);
|
||||
+ ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
+ ok(size == 32, "got %u\n", size);
|
||||
+ ok(!memcmp(plaintext, expected3, sizeof(expected3)), "wrong data\n");
|
||||
+
|
||||
+ /* output size too small */
|
||||
+ size = 0;
|
||||
+ ret = pBCryptDecrypt(key, ciphertext4, 32, NULL, NULL, 16, plaintext, 31, &size, 0);
|
||||
+ ok(ret == STATUS_BUFFER_TOO_SMALL, "got %08x\n", ret);
|
||||
+ ok(size == 32, "got %u\n", size);
|
||||
+
|
||||
+ size = 0;
|
||||
+ ret = pBCryptDecrypt(key, ciphertext5, 32, NULL, NULL, 16, plaintext, 15, &size, BCRYPT_BLOCK_PADDING);
|
||||
+ ok(ret == STATUS_BUFFER_TOO_SMALL, "got %08x\n", ret);
|
||||
+ ok(size == 32, "got %u\n", size);
|
||||
+
|
||||
+ size = 0;
|
||||
+ ret = pBCryptDecrypt(key, ciphertext5, 32, NULL, NULL, 16, plaintext, 16, &size, BCRYPT_BLOCK_PADDING);
|
||||
+ ok(ret == STATUS_BUFFER_TOO_SMALL, "got %08x\n", ret);
|
||||
+ ok(size == 17, "got %u\n", size);
|
||||
+
|
||||
+ size = 0;
|
||||
+ ret = pBCryptDecrypt(key, ciphertext6, 48, NULL, NULL, 16, plaintext, 31, &size, BCRYPT_BLOCK_PADDING);
|
||||
+ ok(ret == STATUS_BUFFER_TOO_SMALL, "got %08x\n", ret);
|
||||
+ ok(size == 48, "got %u\n", size);
|
||||
+
|
||||
+ /* input size is not a multiple of block size */
|
||||
+ size = 0;
|
||||
+ ret = pBCryptDecrypt(key, ciphertext4, 17, NULL, NULL, 16, NULL, 0, &size, 0);
|
||||
+ ok(ret == STATUS_INVALID_BUFFER_SIZE, "got %08x\n", ret);
|
||||
+ ok(size == 17 || broken(size == 0 /* Win < 7 */), "got %u\n", size);
|
||||
+
|
||||
+ /* input size is not a multiple of block size, block padding set */
|
||||
+ size = 0;
|
||||
+ ret = pBCryptDecrypt(key, ciphertext4, 17, NULL, NULL, 16, NULL, 0, &size, BCRYPT_BLOCK_PADDING);
|
||||
+ ok(ret == STATUS_INVALID_BUFFER_SIZE, "got %08x\n", ret);
|
||||
+ ok(size == 17 || broken(size == 0 /* Win < 7 */), "got %u\n", size);
|
||||
+
|
||||
+ ret = pBCryptDestroyKey(key);
|
||||
+ ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
+ HeapFree(GetProcessHeap(), 0, buf);
|
||||
+
|
||||
ret = pBCryptCloseAlgorithmProvider(aes, 0);
|
||||
ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
}
|
||||
--
|
||||
2.11.0
|
||||
|
@@ -1,2 +1,3 @@
|
||||
Fixes: [41951] Implement bcrypt.BCryptDuplicateHash
|
||||
Fixes: [40418] Implement BCrypt AES provider
|
||||
Fixes: [42553] Implement BCrypt ECB chaining mode
|
||||
|
@@ -1,248 +0,0 @@
|
||||
From 8b23d1c04949938de77466556f7caf9321687a33 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Hater <7element@mail.bg>
|
||||
Date: Wed, 16 Sep 2015 15:49:58 +0300
|
||||
Subject: comctl32: Implement PROPSHEET_InsertPage based on PROPSHEET_AddPage
|
||||
|
||||
---
|
||||
dlls/comctl32/propsheet.c | 152 +++++++++++++++++++++++++---------------
|
||||
dlls/comctl32/tests/propsheet.c | 18 ++---
|
||||
2 files changed, 104 insertions(+), 66 deletions(-)
|
||||
|
||||
diff --git a/dlls/comctl32/propsheet.c b/dlls/comctl32/propsheet.c
|
||||
index ce7001c..fecb0e4 100644
|
||||
--- a/dlls/comctl32/propsheet.c
|
||||
+++ b/dlls/comctl32/propsheet.c
|
||||
@@ -172,6 +172,7 @@ static int PROPSHEET_GetPageIndex(HPROPSHEETPAGE hpage, const PropSheetInfo* psI
|
||||
static PADDING_INFO PROPSHEET_GetPaddingInfoWizard(HWND hwndDlg, const PropSheetInfo* psInfo);
|
||||
static BOOL PROPSHEET_DoCommand(HWND hwnd, WORD wID);
|
||||
static BOOL PROPSHEET_RemovePage(HWND hwndDlg, int index, HPROPSHEETPAGE hpage);
|
||||
+static BOOL PROPSHEET_InsertPage(HWND hwndDlg, HPROPSHEETPAGE hpageInsertAfter, HPROPSHEETPAGE hpage);
|
||||
|
||||
static INT_PTR CALLBACK
|
||||
PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
@@ -2259,60 +2260,9 @@ static LRESULT PROPSHEET_QuerySiblings(HWND hwndDlg,
|
||||
static BOOL PROPSHEET_AddPage(HWND hwndDlg,
|
||||
HPROPSHEETPAGE hpage)
|
||||
{
|
||||
- PropPageInfo * ppi;
|
||||
PropSheetInfo * psInfo = GetPropW(hwndDlg, PropSheetInfoStr);
|
||||
- HWND hwndTabControl = GetDlgItem(hwndDlg, IDC_TABCONTROL);
|
||||
- TCITEMW item;
|
||||
- LPCPROPSHEETPAGEW ppsp = (LPCPROPSHEETPAGEW)hpage;
|
||||
-
|
||||
TRACE("hpage %p\n", hpage);
|
||||
- /*
|
||||
- * Allocate and fill in a new PropPageInfo entry.
|
||||
- */
|
||||
- ppi = ReAlloc(psInfo->proppage, sizeof(PropPageInfo) * (psInfo->nPages + 1));
|
||||
- if (!ppi)
|
||||
- return FALSE;
|
||||
-
|
||||
- psInfo->proppage = ppi;
|
||||
- if (!PROPSHEET_CollectPageInfo(ppsp, psInfo, psInfo->nPages, FALSE))
|
||||
- return FALSE;
|
||||
-
|
||||
- psInfo->proppage[psInfo->nPages].hpage = hpage;
|
||||
-
|
||||
- if (ppsp->dwFlags & PSP_PREMATURE)
|
||||
- {
|
||||
- /* Create the page but don't show it */
|
||||
- if(!PROPSHEET_CreatePage(hwndDlg, psInfo->nPages, psInfo, ppsp))
|
||||
- return FALSE;
|
||||
- }
|
||||
-
|
||||
- /*
|
||||
- * Add a new tab to the tab control.
|
||||
- */
|
||||
- item.mask = TCIF_TEXT;
|
||||
- item.pszText = (LPWSTR) psInfo->proppage[psInfo->nPages].pszText;
|
||||
- item.cchTextMax = MAX_TABTEXT_LENGTH;
|
||||
-
|
||||
- if (psInfo->hImageList)
|
||||
- {
|
||||
- SendMessageW(hwndTabControl, TCM_SETIMAGELIST, 0, (LPARAM)psInfo->hImageList);
|
||||
- }
|
||||
-
|
||||
- if ( psInfo->proppage[psInfo->nPages].hasIcon )
|
||||
- {
|
||||
- item.mask |= TCIF_IMAGE;
|
||||
- item.iImage = psInfo->nPages;
|
||||
- }
|
||||
-
|
||||
- SendMessageW(hwndTabControl, TCM_INSERTITEMW, psInfo->nPages + 1,
|
||||
- (LPARAM)&item);
|
||||
-
|
||||
- psInfo->nPages++;
|
||||
-
|
||||
- /* If it is the only page - show it */
|
||||
- if(psInfo->nPages == 1)
|
||||
- PROPSHEET_SetCurSel(hwndDlg, 0, 1, 0);
|
||||
- return TRUE;
|
||||
+ return PROPSHEET_InsertPage(hwndDlg, (HPROPSHEETPAGE)(ULONG_PTR)psInfo->nPages, hpage);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
@@ -2473,11 +2423,99 @@ static void PROPSHEET_SetWizButtons(HWND hwndDlg, DWORD dwFlags)
|
||||
*/
|
||||
static BOOL PROPSHEET_InsertPage(HWND hwndDlg, HPROPSHEETPAGE hpageInsertAfter, HPROPSHEETPAGE hpage)
|
||||
{
|
||||
- if (IS_INTRESOURCE(hpageInsertAfter))
|
||||
- FIXME("(%p, %d, %p): stub\n", hwndDlg, LOWORD(hpageInsertAfter), hpage);
|
||||
- else
|
||||
- FIXME("(%p, %p, %p): stub\n", hwndDlg, hpageInsertAfter, hpage);
|
||||
- return FALSE;
|
||||
+ PropSheetInfo * psInfo = GetPropW(hwndDlg, PropSheetInfoStr);
|
||||
+ PropPageInfo * ppi, * prev_ppi = psInfo->proppage;
|
||||
+ HWND hwndTabControl = GetDlgItem(hwndDlg, IDC_TABCONTROL);
|
||||
+ LPCPROPSHEETPAGEW ppsp = (LPCPROPSHEETPAGEW)hpage;
|
||||
+ TCITEMW item;
|
||||
+ int index;
|
||||
+
|
||||
+ TRACE("hwndDlg %p, hpageInsertAfter %p, hpage %p\n", hwndDlg, hpageInsertAfter, hpage);
|
||||
+
|
||||
+ if (IS_INTRESOURCE(hpageInsertAfter))
|
||||
+ index = LOWORD(hpageInsertAfter);
|
||||
+ else
|
||||
+ {
|
||||
+ index = PROPSHEET_GetPageIndex(hpageInsertAfter, psInfo, -1);
|
||||
+ if (index < 0)
|
||||
+ {
|
||||
+ TRACE("Could not find page to insert after!\n");
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+ index++;
|
||||
+ }
|
||||
+
|
||||
+ if (index > psInfo->nPages)
|
||||
+ index = psInfo->nPages;
|
||||
+
|
||||
+ /*
|
||||
+ * Allocate a new PropPageInfo entry.
|
||||
+ */
|
||||
+ ppi = Alloc(sizeof(PropPageInfo) * (psInfo->nPages + 1));
|
||||
+ if (!ppi)
|
||||
+ return FALSE;
|
||||
+
|
||||
+ /*
|
||||
+ * Fill in a new PropPageInfo entry.
|
||||
+ */
|
||||
+ if (index > 0)
|
||||
+ memcpy(ppi, prev_ppi, index * sizeof(PropPageInfo));
|
||||
+ memset(&ppi[index], 0, sizeof(PropPageInfo));
|
||||
+ if (index < psInfo->nPages)
|
||||
+ memcpy(&ppi[index + 1], &prev_ppi[index], (psInfo->nPages - index) * sizeof(PropPageInfo));
|
||||
+ psInfo->proppage = ppi;
|
||||
+
|
||||
+ if (!PROPSHEET_CollectPageInfo(ppsp, psInfo, index, FALSE))
|
||||
+ {
|
||||
+ psInfo->proppage = prev_ppi;
|
||||
+ Free(ppi);
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+
|
||||
+ psInfo->proppage[index].hpage = hpage;
|
||||
+
|
||||
+ if (ppsp->dwFlags & PSP_PREMATURE)
|
||||
+ {
|
||||
+ /* Create the page but don't show it */
|
||||
+ if(!PROPSHEET_CreatePage(hwndDlg, index, psInfo, ppsp))
|
||||
+ {
|
||||
+ psInfo->proppage = prev_ppi;
|
||||
+ Free(ppi);
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ Free(prev_ppi);
|
||||
+ psInfo->nPages++;
|
||||
+ if (index <= psInfo->active_page)
|
||||
+ psInfo->active_page++;
|
||||
+
|
||||
+ /*
|
||||
+ * Add a new tab to the tab control.
|
||||
+ */
|
||||
+ item.mask = TCIF_TEXT;
|
||||
+ item.pszText = (LPWSTR) psInfo->proppage[index].pszText;
|
||||
+ item.cchTextMax = MAX_TABTEXT_LENGTH;
|
||||
+
|
||||
+ if (psInfo->hImageList)
|
||||
+ {
|
||||
+ SendMessageW(hwndTabControl, TCM_SETIMAGELIST, 0, (LPARAM)psInfo->hImageList);
|
||||
+ }
|
||||
+
|
||||
+ if (psInfo->proppage[index].hasIcon)
|
||||
+ {
|
||||
+ item.mask |= TCIF_IMAGE;
|
||||
+ item.iImage = index;
|
||||
+ }
|
||||
+
|
||||
+ SendMessageW(hwndTabControl, TCM_INSERTITEMW, index,
|
||||
+ (LPARAM)&item);
|
||||
+
|
||||
+ /* If it is the only page - show it */
|
||||
+ if (psInfo->nPages == 1)
|
||||
+ PROPSHEET_SetCurSel(hwndDlg, 0, 1, 0);
|
||||
+
|
||||
+ return TRUE;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
diff --git a/dlls/comctl32/tests/propsheet.c b/dlls/comctl32/tests/propsheet.c
|
||||
index cdbbca8..bcc89bb 100644
|
||||
--- a/dlls/comctl32/tests/propsheet.c
|
||||
+++ b/dlls/comctl32/tests/propsheet.c
|
||||
@@ -920,7 +920,7 @@ static void test_PSM_INSERTPAGE(void)
|
||||
|
||||
/* add pages one by one */
|
||||
ret = SendMessageA(hdlg, PSM_INSERTPAGE, 5, (LPARAM)hpsp[1]);
|
||||
- todo_wine ok(ret == TRUE, "got %d\n", ret);
|
||||
+ ok(ret == TRUE, "got %d\n", ret);
|
||||
|
||||
/* try with invalid values */
|
||||
ret = SendMessageA(hdlg, PSM_INSERTPAGE, 0, 0);
|
||||
@@ -939,34 +939,34 @@ if (0)
|
||||
tab = (HWND)SendMessageA(hdlg, PSM_GETTABCONTROL, 0, 0);
|
||||
|
||||
r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
|
||||
- todo_wine ok(r == 2, "got %d\n", r);
|
||||
+ ok(r == 2, "got %d\n", r);
|
||||
|
||||
ret = SendMessageA(hdlg, PSM_INSERTPAGE, (WPARAM)hpsp[1], (LPARAM)hpsp[2]);
|
||||
- todo_wine ok(ret == TRUE, "got %d\n", ret);
|
||||
+ ok(ret == TRUE, "got %d\n", ret);
|
||||
|
||||
r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
|
||||
- todo_wine ok(r == 3, "got %d\n", r);
|
||||
+ ok(r == 3, "got %d\n", r);
|
||||
|
||||
/* add property sheet page that can't be created */
|
||||
ret = SendMessageA(hdlg, PSM_INSERTPAGE, 1, (LPARAM)hpsp[3]);
|
||||
- todo_wine ok(ret == TRUE, "got %d\n", ret);
|
||||
+ ok(ret == TRUE, "got %d\n", ret);
|
||||
|
||||
r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
|
||||
- todo_wine ok(r == 4, "got %d\n", r);
|
||||
+ ok(r == 4, "got %d\n", r);
|
||||
|
||||
/* select page that can't be created */
|
||||
ret = SendMessageA(hdlg, PSM_SETCURSEL, 1, 0);
|
||||
- todo_wine ok(ret == TRUE, "got %d\n", ret);
|
||||
+ ok(ret == TRUE, "got %d\n", ret);
|
||||
|
||||
r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
|
||||
- todo_wine ok(r == 3, "got %d\n", r);
|
||||
+ ok(r == 3, "got %d\n", r);
|
||||
|
||||
/* test PSP_PREMATURE flag with incorrect property sheet page */
|
||||
ret = SendMessageA(hdlg, PSM_INSERTPAGE, 0, (LPARAM)hpsp[4]);
|
||||
ok(ret == FALSE, "got %d\n", ret);
|
||||
|
||||
r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
|
||||
- todo_wine ok(r == 3, "got %d\n", r);
|
||||
+ ok(r == 3, "got %d\n", r);
|
||||
|
||||
DestroyPropertySheetPage(hpsp[4]);
|
||||
DestroyWindow(hdlg);
|
||||
--
|
||||
2.6.1
|
||||
|
@@ -1 +0,0 @@
|
||||
Fixes: [25625] Add implementation for comctl32.PROPSHEET_InsertPage.
|
@@ -1,4 +1,4 @@
|
||||
From 022ab9291e3d8c324c7c2dacbfb0b23e234fb4ae Mon Sep 17 00:00:00 2001
|
||||
From a1fc59cdba707d5c4262988b4bfd6612b77e429f Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Timoshkov <dmitry@baikal.ru>
|
||||
Date: Tue, 26 Apr 2016 18:28:21 +0800
|
||||
Subject: comdlg32: Postpone setting ofn->lpstrFileTitle to work around an
|
||||
@@ -10,42 +10,38 @@ approximately 428 bytes above the current stack pointer, and since Wine's
|
||||
GetSaveFileNameW() uses more than 4096 bytes one of internal stack frames is
|
||||
guaranteed to be trashed after copying file name to ofn->lpstrFileTitle.
|
||||
---
|
||||
dlls/comdlg32/filedlg.c | 31 ++++++++++++++-----------------
|
||||
1 file changed, 14 insertions(+), 17 deletions(-)
|
||||
dlls/comdlg32/filedlg.c | 34 +++++++++++++++++-----------------
|
||||
1 file changed, 17 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/dlls/comdlg32/filedlg.c b/dlls/comdlg32/filedlg.c
|
||||
index 1453396..6a6a093 100644
|
||||
index 0c9f34a84e8..cde474936ce 100644
|
||||
--- a/dlls/comdlg32/filedlg.c
|
||||
+++ b/dlls/comdlg32/filedlg.c
|
||||
@@ -463,6 +463,13 @@ static BOOL GetFileDialog95A(LPOPENFILENAMEA ofn,UINT iDlgType)
|
||||
ret = FALSE;
|
||||
}
|
||||
@@ -463,6 +463,23 @@ static BOOL GetFileDialog95(FileOpenDlgInfos *info, UINT dlg_type)
|
||||
ret = FALSE;
|
||||
}
|
||||
|
||||
+ /* set the lpstrFileTitle */
|
||||
+ if (ret && ofn->lpstrFile && ofn->lpstrFileTitle)
|
||||
+ {
|
||||
+ LPSTR lpstrFileTitle = PathFindFileNameA(ofn->lpstrFile);
|
||||
+ lstrcpynA(ofn->lpstrFileTitle, lpstrFileTitle, ofn->nMaxFileTitle);
|
||||
+ }
|
||||
+ /* set the lpstrFileTitle */
|
||||
+ if (ret && info->ofnInfos->lpstrFile && info->ofnInfos->lpstrFileTitle)
|
||||
+ {
|
||||
+ if (info->unicode)
|
||||
+ {
|
||||
+ LPOPENFILENAMEW ofn = info->ofnInfos;
|
||||
+ WCHAR *file_title = PathFindFileNameW(ofn->lpstrFile);
|
||||
+ lstrcpynW(ofn->lpstrFileTitle, file_title, ofn->nMaxFileTitle);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ LPOPENFILENAMEA ofn = (LPOPENFILENAMEA)info->ofnInfos;
|
||||
+ char *file_title = PathFindFileNameA(ofn->lpstrFile);
|
||||
+ lstrcpynA(ofn->lpstrFileTitle, file_title, ofn->nMaxFileTitle);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if (lpstrSavDir)
|
||||
{
|
||||
SetCurrentDirectoryA(lpstrSavDir);
|
||||
@@ -555,6 +562,13 @@ static BOOL GetFileDialog95W(LPOPENFILENAMEW ofn,UINT iDlgType)
|
||||
ret = FALSE;
|
||||
}
|
||||
|
||||
+ /* set the lpstrFileTitle */
|
||||
+ if (ret && ofn->lpstrFile && ofn->lpstrFileTitle)
|
||||
+ {
|
||||
+ LPWSTR lpstrFileTitle = PathFindFileNameW(ofn->lpstrFile);
|
||||
+ lstrcpynW(ofn->lpstrFileTitle, lpstrFileTitle, ofn->nMaxFileTitle);
|
||||
+ }
|
||||
+
|
||||
if (lpstrSavDir)
|
||||
{
|
||||
SetCurrentDirectoryW(lpstrSavDir);
|
||||
@@ -2735,23 +2749,6 @@ BOOL FILEDLG95_OnOpen(HWND hwnd)
|
||||
if (current_dir)
|
||||
{
|
||||
SetCurrentDirectoryW(current_dir);
|
||||
@@ -2690,23 +2707,6 @@ BOOL FILEDLG95_OnOpen(HWND hwnd)
|
||||
fodInfos->ofnInfos->nFileExtension = (*lpszTemp) ? (lpszTemp - tempFileA) + 1 : 0;
|
||||
}
|
||||
|
||||
@@ -70,5 +66,5 @@ index 1453396..6a6a093 100644
|
||||
if (fodInfos->ofnInfos->lpstrCustomFilter)
|
||||
{
|
||||
--
|
||||
2.8.0
|
||||
2.11.0
|
||||
|
||||
|
@@ -0,0 +1,226 @@
|
||||
From 89a9cb8552bc87acc96660185b2775be5b8dbc86 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Mon, 27 Feb 2017 20:42:27 +0100
|
||||
Subject: crypt32: Add MS root CA 2010/2011.
|
||||
|
||||
---
|
||||
dlls/crypt32/rootstore.c | 196 +++++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 196 insertions(+)
|
||||
|
||||
diff --git a/dlls/crypt32/rootstore.c b/dlls/crypt32/rootstore.c
|
||||
index 8e1dc2a12e4..d6c0dfbc819 100644
|
||||
--- a/dlls/crypt32/rootstore.c
|
||||
+++ b/dlls/crypt32/rootstore.c
|
||||
@@ -666,6 +666,200 @@ static const BYTE rootcertauthority[] = {
|
||||
0x7e,0x6c,0x9e,0xdb,0x73,0x13,0x64,0x62,0x69,0xa5,0x2f,0x7d,0xca,0x96,0x6d,0x9f,
|
||||
0xf8,0x04,0x4d,0x30,0x92,0x3d,0x6e,0x21,0x14,0x21,0xc9,0x3d,0xe0,0xc3,0xfd,0x8a,
|
||||
0x6b,0x9d,0x4a,0xfd,0xd1,0xa1,0x9d,0x99,0x43,0x77,0x3f,0xb0,0xda };
|
||||
+static const BYTE rootcertauthority2010[] = {
|
||||
+0x30,0x82,0x05,0xed,0x30,0x82,0x03,0xd5,0xa0,0x03,0x02,0x01,0x02,0x02,0x10,0x28,
|
||||
+0xcc,0x3a,0x25,0xbf,0xba,0x44,0xac,0x44,0x9a,0x9b,0x58,0x6b,0x43,0x39,0xaa,0x30,
|
||||
+0x0d,0x06,0x09,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x01,0x01,0x0b,0x05,0x00,0x30,0x81,
|
||||
+0x88,0x31,0x0b,0x30,0x09,0x06,0x03,0x55,0x04,0x06,0x13,0x02,0x55,0x53,0x31,0x13,
|
||||
+0x30,0x11,0x06,0x03,0x55,0x04,0x08,0x13,0x0a,0x57,0x61,0x73,0x68,0x69,0x6e,0x67,
|
||||
+0x74,0x6f,0x6e,0x31,0x10,0x30,0x0e,0x06,0x03,0x55,0x04,0x07,0x13,0x07,0x52,0x65,
|
||||
+0x64,0x6d,0x6f,0x6e,0x64,0x31,0x1e,0x30,0x1c,0x06,0x03,0x55,0x04,0x0a,0x13,0x15,
|
||||
+0x4d,0x69,0x63,0x72,0x6f,0x73,0x6f,0x66,0x74,0x20,0x43,0x6f,0x72,0x70,0x6f,0x72,
|
||||
+0x61,0x74,0x69,0x6f,0x6e,0x31,0x32,0x30,0x30,0x06,0x03,0x55,0x04,0x03,0x13,0x29,
|
||||
+0x4d,0x69,0x63,0x72,0x6f,0x73,0x6f,0x66,0x74,0x20,0x52,0x6f,0x6f,0x74,0x20,0x43,
|
||||
+0x65,0x72,0x74,0x69,0x66,0x69,0x63,0x61,0x74,0x65,0x20,0x41,0x75,0x74,0x68,0x6f,
|
||||
+0x72,0x69,0x74,0x79,0x20,0x32,0x30,0x31,0x30,0x30,0x1e,0x17,0x0d,0x31,0x30,0x30,
|
||||
+0x36,0x32,0x33,0x32,0x31,0x35,0x37,0x32,0x34,0x5a,0x17,0x0d,0x33,0x35,0x30,0x36,
|
||||
+0x32,0x33,0x32,0x32,0x30,0x34,0x30,0x31,0x5a,0x30,0x81,0x88,0x31,0x0b,0x30,0x09,
|
||||
+0x06,0x03,0x55,0x04,0x06,0x13,0x02,0x55,0x53,0x31,0x13,0x30,0x11,0x06,0x03,0x55,
|
||||
+0x04,0x08,0x13,0x0a,0x57,0x61,0x73,0x68,0x69,0x6e,0x67,0x74,0x6f,0x6e,0x31,0x10,
|
||||
+0x30,0x0e,0x06,0x03,0x55,0x04,0x07,0x13,0x07,0x52,0x65,0x64,0x6d,0x6f,0x6e,0x64,
|
||||
+0x31,0x1e,0x30,0x1c,0x06,0x03,0x55,0x04,0x0a,0x13,0x15,0x4d,0x69,0x63,0x72,0x6f,
|
||||
+0x73,0x6f,0x66,0x74,0x20,0x43,0x6f,0x72,0x70,0x6f,0x72,0x61,0x74,0x69,0x6f,0x6e,
|
||||
+0x31,0x32,0x30,0x30,0x06,0x03,0x55,0x04,0x03,0x13,0x29,0x4d,0x69,0x63,0x72,0x6f,
|
||||
+0x73,0x6f,0x66,0x74,0x20,0x52,0x6f,0x6f,0x74,0x20,0x43,0x65,0x72,0x74,0x69,0x66,
|
||||
+0x69,0x63,0x61,0x74,0x65,0x20,0x41,0x75,0x74,0x68,0x6f,0x72,0x69,0x74,0x79,0x20,
|
||||
+0x32,0x30,0x31,0x30,0x30,0x82,0x02,0x22,0x30,0x0d,0x06,0x09,0x2a,0x86,0x48,0x86,
|
||||
+0xf7,0x0d,0x01,0x01,0x01,0x05,0x00,0x03,0x82,0x02,0x0f,0x00,0x30,0x82,0x02,0x0a,
|
||||
+0x02,0x82,0x02,0x01,0x00,0xb9,0x08,0x9e,0x28,0xe4,0xe4,0xec,0x06,0x4e,0x50,0x68,
|
||||
+0xb3,0x41,0xc5,0x7b,0xeb,0xae,0xb6,0x8e,0xaf,0x81,0xba,0x22,0x44,0x1f,0x65,0x34,
|
||||
+0x69,0x4c,0xbe,0x70,0x40,0x17,0xf2,0x16,0x7b,0xe2,0x79,0xfd,0x86,0xed,0x0d,0x39,
|
||||
+0xf4,0x1b,0xa8,0xad,0x92,0x90,0x1e,0xcb,0x3d,0x76,0x8f,0x5a,0xd9,0xb5,0x91,0x10,
|
||||
+0x2e,0x3c,0x05,0x8d,0x8a,0x6d,0x24,0x54,0xe7,0x1f,0xed,0x56,0xad,0x83,0xb4,0x50,
|
||||
+0x9c,0x15,0xa5,0x17,0x74,0x88,0x59,0x20,0xfc,0x08,0xc5,0x84,0x76,0xd3,0x68,0xd4,
|
||||
+0x6f,0x28,0x78,0xce,0x5c,0xb8,0xf3,0x50,0x90,0x44,0xff,0xe3,0x63,0x5f,0xbe,0xa1,
|
||||
+0x9a,0x2c,0x96,0x15,0x04,0xd6,0x07,0xfe,0x1e,0x84,0x21,0xe0,0x42,0x31,0x11,0xc4,
|
||||
+0x28,0x36,0x94,0xcf,0x50,0xa4,0x62,0x9e,0xc9,0xd6,0xab,0x71,0x00,0xb2,0x5b,0x0c,
|
||||
+0xe6,0x96,0xd4,0x0a,0x24,0x96,0xf5,0xff,0xc6,0xd5,0xb7,0x1b,0xd7,0xcb,0xb7,0x21,
|
||||
+0x62,0xaf,0x12,0xdc,0xa1,0x5d,0x37,0xe3,0x1a,0xfb,0x1a,0x46,0x98,0xc0,0x9b,0xc0,
|
||||
+0xe7,0x63,0x1f,0x2a,0x08,0x93,0x02,0x7e,0x1e,0x6a,0x8e,0xf2,0x9f,0x18,0x89,0xe4,
|
||||
+0x22,0x85,0xa2,0xb1,0x84,0x57,0x40,0xff,0xf5,0x0e,0xd8,0x6f,0x9c,0xed,0xe2,0x45,
|
||||
+0x31,0x01,0xcd,0x17,0xe9,0x7f,0xb0,0x81,0x45,0xe3,0xaa,0x21,0x40,0x26,0xa1,0x72,
|
||||
+0xaa,0xa7,0x4f,0x3c,0x01,0x05,0x7e,0xee,0x83,0x58,0xb1,0x5e,0x06,0x63,0x99,0x62,
|
||||
+0x91,0x78,0x82,0xb7,0x0d,0x93,0x0c,0x24,0x6a,0xb4,0x1b,0xdb,0x27,0xec,0x5f,0x95,
|
||||
+0x04,0x3f,0x93,0x4a,0x30,0xf5,0x97,0x18,0xb3,0xa7,0xf9,0x19,0xa7,0x93,0x33,0x1d,
|
||||
+0x01,0xc8,0xdb,0x22,0x52,0x5c,0xd7,0x25,0xc9,0x46,0xf9,0xa2,0xfb,0x87,0x59,0x43,
|
||||
+0xbe,0x9b,0x62,0xb1,0x8d,0x2d,0x86,0x44,0x1a,0x46,0xac,0x78,0x61,0x7e,0x30,0x09,
|
||||
+0xfa,0xae,0x89,0xc4,0x41,0x2a,0x22,0x66,0x03,0x91,0x39,0x45,0x9c,0xc7,0x8b,0x0c,
|
||||
+0xa8,0xca,0x0d,0x2f,0xfb,0x52,0xea,0x0c,0xf7,0x63,0x33,0x23,0x9d,0xfe,0xb0,0x1f,
|
||||
+0xad,0x67,0xd6,0xa7,0x50,0x03,0xc6,0x04,0x70,0x63,0xb5,0x2c,0xb1,0x86,0x5a,0x43,
|
||||
+0xb7,0xfb,0xae,0xf9,0x6e,0x29,0x6e,0x21,0x21,0x41,0x26,0x06,0x8c,0xc9,0xc3,0xee,
|
||||
+0xb0,0xc2,0x85,0x93,0xa1,0xb9,0x85,0xd9,0xe6,0x32,0x6c,0x4b,0x4c,0x3f,0xd6,0x5d,
|
||||
+0xa3,0xe5,0xb5,0x9d,0x77,0xc3,0x9c,0xc0,0x55,0xb7,0x74,0x00,0xe3,0xb8,0x38,0xab,
|
||||
+0x83,0x97,0x50,0xe1,0x9a,0x42,0x24,0x1d,0xc6,0xc0,0xa3,0x30,0xd1,0x1a,0x5a,0xc8,
|
||||
+0x52,0x34,0xf7,0x73,0xf1,0xc7,0x18,0x1f,0x33,0xad,0x7a,0xec,0xcb,0x41,0x60,0xf3,
|
||||
+0x23,0x94,0x20,0xc2,0x48,0x45,0xac,0x5c,0x51,0xc6,0x2e,0x80,0xc2,0xe2,0x77,0x15,
|
||||
+0xbd,0x85,0x87,0xed,0x36,0x9d,0x96,0x91,0xee,0x00,0xb5,0xa3,0x70,0xec,0x9f,0xe3,
|
||||
+0x8d,0x80,0x68,0x83,0x76,0xba,0xaf,0x5d,0x70,0x52,0x22,0x16,0xe2,0x66,0xfb,0xba,
|
||||
+0xb3,0xc5,0xc2,0xf7,0x3e,0x2f,0x77,0xa6,0xca,0xde,0xc1,0xa6,0xc6,0x48,0x4c,0xc3,
|
||||
+0x37,0x51,0x23,0xd3,0x27,0xd7,0xb8,0x4e,0x70,0x96,0xf0,0xa1,0x44,0x76,0xaf,0x78,
|
||||
+0xcf,0x9a,0xe1,0x66,0x13,0x02,0x03,0x01,0x00,0x01,0xa3,0x51,0x30,0x4f,0x30,0x0b,
|
||||
+0x06,0x03,0x55,0x1d,0x0f,0x04,0x04,0x03,0x02,0x01,0x86,0x30,0x0f,0x06,0x03,0x55,
|
||||
+0x1d,0x13,0x01,0x01,0xff,0x04,0x05,0x30,0x03,0x01,0x01,0xff,0x30,0x1d,0x06,0x03,
|
||||
+0x55,0x1d,0x0e,0x04,0x16,0x04,0x14,0xd5,0xf6,0x56,0xcb,0x8f,0xe8,0xa2,0x5c,0x62,
|
||||
+0x68,0xd1,0x3d,0x94,0x90,0x5b,0xd7,0xce,0x9a,0x18,0xc4,0x30,0x10,0x06,0x09,0x2b,
|
||||
+0x06,0x01,0x04,0x01,0x82,0x37,0x15,0x01,0x04,0x03,0x02,0x01,0x00,0x30,0x0d,0x06,
|
||||
+0x09,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x01,0x01,0x0b,0x05,0x00,0x03,0x82,0x02,0x01,
|
||||
+0x00,0xac,0xa5,0x96,0x8c,0xbf,0xbb,0xae,0xa6,0xf6,0xd7,0x71,0x87,0x43,0x31,0x56,
|
||||
+0x88,0xfd,0x1c,0x32,0x71,0x5b,0x35,0xb7,0xd4,0xf0,0x91,0xf2,0xaf,0x37,0xe2,0x14,
|
||||
+0xf1,0xf3,0x02,0x26,0x05,0x3e,0x16,0x14,0x7f,0x14,0xba,0xb8,0x4f,0xfb,0x89,0xb2,
|
||||
+0xb2,0xe7,0xd4,0x09,0xcc,0x6d,0xb9,0x5b,0x3b,0x64,0x65,0x70,0x66,0xb7,0xf2,0xb1,
|
||||
+0x5a,0xdf,0x1a,0x02,0xf3,0xf5,0x51,0xb8,0x67,0x6d,0x79,0xf3,0xbf,0x56,0x7b,0xe4,
|
||||
+0x84,0xb9,0x2b,0x1e,0x9b,0x40,0x9c,0x26,0x34,0xf9,0x47,0x18,0x98,0x69,0xd8,0x1c,
|
||||
+0xd7,0xb6,0xd1,0xbf,0x8f,0x61,0xc2,0x67,0xc4,0xb5,0xef,0x60,0x43,0x8e,0x10,0x1b,
|
||||
+0x36,0x49,0xe4,0x20,0xca,0xad,0xa7,0xc1,0xb1,0x27,0x65,0x09,0xf8,0xcd,0xf5,0x5b,
|
||||
+0x2a,0xd0,0x84,0x33,0xf3,0xef,0x1f,0xf2,0xf5,0x9c,0x0b,0x58,0x93,0x37,0xa0,0x75,
|
||||
+0xa0,0xde,0x72,0xde,0x6c,0x75,0x2a,0x66,0x22,0xf5,0x8c,0x06,0x30,0x56,0x9f,0x40,
|
||||
+0xb9,0x30,0xaa,0x40,0x77,0x15,0x82,0xd7,0x8b,0xec,0xc0,0xd3,0xb2,0xbd,0x83,0xc5,
|
||||
+0x77,0x0c,0x1e,0xae,0xaf,0x19,0x53,0xa0,0x4d,0x79,0x71,0x9f,0x0f,0xaf,0x30,0xce,
|
||||
+0x67,0xf9,0xd6,0x2c,0xcc,0x22,0x41,0x7a,0x07,0xf2,0x97,0x42,0x18,0xce,0x59,0x79,
|
||||
+0x10,0x55,0xde,0x6f,0x10,0xe4,0xb8,0xda,0x83,0x66,0x40,0x16,0x09,0x68,0x23,0x5b,
|
||||
+0x97,0x2e,0x26,0x9a,0x02,0xbb,0x57,0x8c,0xc5,0xb8,0xba,0x69,0x62,0x32,0x80,0x89,
|
||||
+0x9e,0xa1,0xfd,0xc0,0x92,0x7c,0x7b,0x2b,0x33,0x19,0x84,0x2a,0x63,0xc5,0x00,0x68,
|
||||
+0x62,0xfa,0x9f,0x47,0x8d,0x99,0x7a,0x45,0x3a,0xa7,0xe9,0xed,0xee,0x69,0x42,0xb5,
|
||||
+0xf3,0x81,0x9b,0x47,0x56,0x10,0x7b,0xfc,0x70,0x36,0x84,0x18,0x73,0xea,0xef,0xf9,
|
||||
+0x97,0x4d,0x9e,0x33,0x23,0xdd,0x26,0x0b,0xba,0x2a,0xb7,0x3f,0x44,0xdc,0x83,0x27,
|
||||
+0xff,0xbd,0x61,0x59,0x2b,0x11,0xb7,0xca,0x4f,0xdb,0xc5,0x8b,0x0c,0x1c,0x31,0xae,
|
||||
+0x32,0xf8,0xf8,0xb9,0x42,0xf7,0x7f,0xdc,0x61,0x9a,0x76,0xb1,0x5a,0x04,0xe1,0x11,
|
||||
+0x3d,0x66,0x45,0xb7,0x18,0x71,0xbe,0xc9,0x24,0x85,0xd6,0xf3,0xd4,0xba,0x41,0x34,
|
||||
+0x5d,0x12,0x2d,0x25,0xb9,0x8d,0xa6,0x13,0x48,0x6d,0x4b,0xb0,0x07,0x7d,0x99,0x93,
|
||||
+0x09,0x61,0x81,0x74,0x57,0x26,0x8a,0xab,0x69,0xe3,0xe4,0xd9,0xc7,0x88,0xcc,0x24,
|
||||
+0xd8,0xec,0x52,0x24,0x5c,0x1e,0xbc,0x91,0x14,0xe2,0x96,0xde,0xeb,0x0a,0xda,0x9e,
|
||||
+0xdd,0x5f,0xb3,0x5b,0xdb,0xd4,0x82,0xec,0xc6,0x20,0x50,0x87,0x25,0x40,0x3a,0xfb,
|
||||
+0xc7,0xee,0xcd,0xfe,0x33,0xe5,0x6e,0xc3,0x84,0x09,0x55,0x03,0x25,0x39,0xc0,0xe9,
|
||||
+0x35,0x5d,0x65,0x31,0xa8,0xf6,0xbf,0xa0,0x09,0xcd,0x29,0xc7,0xb3,0x36,0x32,0x2e,
|
||||
+0xdc,0x95,0xf3,0x83,0xc1,0x5a,0xcf,0x8b,0x8d,0xf6,0xea,0xb3,0x21,0xf8,0xa4,0xed,
|
||||
+0x1e,0x31,0x0e,0xb6,0x4c,0x11,0xab,0x60,0x0b,0xa4,0x12,0x23,0x22,0x17,0xa3,0x36,
|
||||
+0x64,0x82,0x91,0x04,0x12,0xe0,0xab,0x6f,0x1e,0xcb,0x50,0x05,0x61,0xb4,0x40,0xff,
|
||||
+0x59,0x86,0x71,0xd1,0xd5,0x33,0x69,0x7c,0xa9,0x73,0x8a,0x38,0xd7,0x64,0x0c,0xf1,
|
||||
+0x69 };
|
||||
+static const BYTE rootcertauthority2011[] = {
|
||||
+0x30,0x82,0x05,0xed,0x30,0x82,0x03,0xd5,0xa0,0x03,0x02,0x01,0x02,0x02,0x10,0x3f,
|
||||
+0x8b,0xc8,0xb5,0xfc,0x9f,0xb2,0x96,0x43,0xb5,0x69,0xd6,0x6c,0x42,0xe1,0x44,0x30,
|
||||
+0x0d,0x06,0x09,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x01,0x01,0x0b,0x05,0x00,0x30,0x81,
|
||||
+0x88,0x31,0x0b,0x30,0x09,0x06,0x03,0x55,0x04,0x06,0x13,0x02,0x55,0x53,0x31,0x13,
|
||||
+0x30,0x11,0x06,0x03,0x55,0x04,0x08,0x13,0x0a,0x57,0x61,0x73,0x68,0x69,0x6e,0x67,
|
||||
+0x74,0x6f,0x6e,0x31,0x10,0x30,0x0e,0x06,0x03,0x55,0x04,0x07,0x13,0x07,0x52,0x65,
|
||||
+0x64,0x6d,0x6f,0x6e,0x64,0x31,0x1e,0x30,0x1c,0x06,0x03,0x55,0x04,0x0a,0x13,0x15,
|
||||
+0x4d,0x69,0x63,0x72,0x6f,0x73,0x6f,0x66,0x74,0x20,0x43,0x6f,0x72,0x70,0x6f,0x72,
|
||||
+0x61,0x74,0x69,0x6f,0x6e,0x31,0x32,0x30,0x30,0x06,0x03,0x55,0x04,0x03,0x13,0x29,
|
||||
+0x4d,0x69,0x63,0x72,0x6f,0x73,0x6f,0x66,0x74,0x20,0x52,0x6f,0x6f,0x74,0x20,0x43,
|
||||
+0x65,0x72,0x74,0x69,0x66,0x69,0x63,0x61,0x74,0x65,0x20,0x41,0x75,0x74,0x68,0x6f,
|
||||
+0x72,0x69,0x74,0x79,0x20,0x32,0x30,0x31,0x31,0x30,0x1e,0x17,0x0d,0x31,0x31,0x30,
|
||||
+0x33,0x32,0x32,0x32,0x32,0x30,0x35,0x32,0x38,0x5a,0x17,0x0d,0x33,0x36,0x30,0x33,
|
||||
+0x32,0x32,0x32,0x32,0x31,0x33,0x30,0x34,0x5a,0x30,0x81,0x88,0x31,0x0b,0x30,0x09,
|
||||
+0x06,0x03,0x55,0x04,0x06,0x13,0x02,0x55,0x53,0x31,0x13,0x30,0x11,0x06,0x03,0x55,
|
||||
+0x04,0x08,0x13,0x0a,0x57,0x61,0x73,0x68,0x69,0x6e,0x67,0x74,0x6f,0x6e,0x31,0x10,
|
||||
+0x30,0x0e,0x06,0x03,0x55,0x04,0x07,0x13,0x07,0x52,0x65,0x64,0x6d,0x6f,0x6e,0x64,
|
||||
+0x31,0x1e,0x30,0x1c,0x06,0x03,0x55,0x04,0x0a,0x13,0x15,0x4d,0x69,0x63,0x72,0x6f,
|
||||
+0x73,0x6f,0x66,0x74,0x20,0x43,0x6f,0x72,0x70,0x6f,0x72,0x61,0x74,0x69,0x6f,0x6e,
|
||||
+0x31,0x32,0x30,0x30,0x06,0x03,0x55,0x04,0x03,0x13,0x29,0x4d,0x69,0x63,0x72,0x6f,
|
||||
+0x73,0x6f,0x66,0x74,0x20,0x52,0x6f,0x6f,0x74,0x20,0x43,0x65,0x72,0x74,0x69,0x66,
|
||||
+0x69,0x63,0x61,0x74,0x65,0x20,0x41,0x75,0x74,0x68,0x6f,0x72,0x69,0x74,0x79,0x20,
|
||||
+0x32,0x30,0x31,0x31,0x30,0x82,0x02,0x22,0x30,0x0d,0x06,0x09,0x2a,0x86,0x48,0x86,
|
||||
+0xf7,0x0d,0x01,0x01,0x01,0x05,0x00,0x03,0x82,0x02,0x0f,0x00,0x30,0x82,0x02,0x0a,
|
||||
+0x02,0x82,0x02,0x01,0x00,0xb2,0x80,0x41,0xaa,0x35,0x38,0x4d,0x13,0x72,0x32,0x68,
|
||||
+0x22,0x4d,0xb8,0xb2,0xf1,0xff,0xd5,0x52,0xbc,0x6c,0xc7,0xf5,0xd2,0x4a,0x8c,0x36,
|
||||
+0xee,0xd1,0xc2,0x5c,0x7e,0x8c,0x8a,0xae,0xaf,0x13,0x28,0x6f,0xc0,0x73,0xe3,0x3a,
|
||||
+0xce,0xd0,0x25,0xa8,0x5a,0x3a,0x6d,0xef,0xa8,0xb8,0x59,0xab,0x13,0x23,0x68,0xcd,
|
||||
+0x0c,0x29,0x87,0xd1,0x6f,0x80,0x5c,0x8f,0x44,0x7f,0x5d,0x90,0x01,0x52,0x58,0xac,
|
||||
+0x51,0xc5,0x5f,0x2a,0x87,0xdc,0xdc,0xd8,0x0a,0x1d,0xc1,0x03,0xb9,0x7b,0xb0,0x56,
|
||||
+0xe8,0xa3,0xde,0x64,0x61,0xc2,0x9e,0xf8,0xf3,0x7c,0xb9,0xec,0x0d,0xb5,0x54,0xfe,
|
||||
+0x4c,0xb6,0x65,0x4f,0x88,0xf0,0x9c,0x48,0x99,0x0c,0x42,0x0b,0x09,0x7c,0x31,0x59,
|
||||
+0x17,0x79,0x06,0x78,0x28,0x8d,0x89,0x3a,0x4c,0x03,0x25,0xbe,0x71,0x6a,0x5c,0x0b,
|
||||
+0xe7,0x84,0x60,0xa4,0x99,0x22,0xe3,0xd2,0xaf,0x84,0xa4,0xa7,0xfb,0xd1,0x98,0xed,
|
||||
+0x0c,0xa9,0xde,0x94,0x89,0xe1,0x0e,0xa0,0xdc,0xc0,0xce,0x99,0x3d,0xea,0x08,0x52,
|
||||
+0xbb,0x56,0x79,0xe4,0x1f,0x84,0xba,0x1e,0xb8,0xb4,0xc4,0x49,0x5c,0x4f,0x31,0x4b,
|
||||
+0x87,0xdd,0xdd,0x05,0x67,0x26,0x99,0x80,0xe0,0x71,0x11,0xa3,0xb8,0xa5,0x41,0xe2,
|
||||
+0xa4,0x53,0xb9,0xf7,0x32,0x29,0x83,0x0c,0x13,0xbf,0x36,0x5e,0x04,0xb3,0x4b,0x43,
|
||||
+0x47,0x2f,0x6b,0xe2,0x91,0x1e,0xd3,0x98,0x4f,0xdd,0x42,0x07,0xc8,0xe8,0x1d,0x12,
|
||||
+0xfc,0x99,0xa9,0x6b,0x3e,0x92,0x7e,0xc8,0xd6,0x69,0x3a,0xfc,0x64,0xbd,0xb6,0x09,
|
||||
+0x9d,0xca,0xfd,0x0c,0x0b,0xa2,0x9b,0x77,0x60,0x4b,0x03,0x94,0xa4,0x30,0x69,0x12,
|
||||
+0xd6,0x42,0x2d,0xc1,0x41,0x4c,0xca,0xdc,0xaa,0xfd,0x8f,0x5b,0x83,0x46,0x9a,0xd9,
|
||||
+0xfc,0xb1,0xd1,0xe3,0xb3,0xc9,0x7f,0x48,0x7a,0xcd,0x24,0xf0,0x41,0x8f,0x5c,0x74,
|
||||
+0xd0,0xac,0xb0,0x10,0x20,0x06,0x49,0xb7,0xc7,0x2d,0x21,0xc8,0x57,0xe3,0xd0,0x86,
|
||||
+0xf3,0x03,0x68,0xfb,0xd0,0xce,0x71,0xc1,0x89,0x99,0x4a,0x64,0x01,0x6c,0xfd,0xec,
|
||||
+0x30,0x91,0xcf,0x41,0x3c,0x92,0xc7,0xe5,0xba,0x86,0x1d,0x61,0x84,0xc7,0x5f,0x83,
|
||||
+0x39,0x62,0xae,0xb4,0x92,0x2f,0x47,0xf3,0x0b,0xf8,0x55,0xeb,0xa0,0x1f,0x59,0xd0,
|
||||
+0xbb,0x74,0x9b,0x1e,0xd0,0x76,0xe6,0xf2,0xe9,0x06,0xd7,0x10,0xe8,0xfa,0x64,0xde,
|
||||
+0x69,0xc6,0x35,0x96,0x88,0x02,0xf0,0x46,0xb8,0x3f,0x27,0x99,0x6f,0xcb,0x71,0x89,
|
||||
+0x29,0x35,0xf7,0x48,0x16,0x02,0x35,0x8f,0xd5,0x79,0x7c,0x4d,0x02,0xcf,0x5f,0xeb,
|
||||
+0x8a,0x83,0x4f,0x45,0x71,0x88,0xf9,0xa9,0x0d,0x4e,0x72,0xe9,0xc2,0x9c,0x07,0xcf,
|
||||
+0x49,0x1b,0x4e,0x04,0x0e,0x63,0x51,0x8c,0x5e,0xd8,0x00,0xc1,0x55,0x2c,0xb6,0xc6,
|
||||
+0xe0,0xc2,0x65,0x4e,0xc9,0x34,0x39,0xf5,0x9c,0xb3,0xc4,0x7e,0xe8,0x61,0x6e,0x13,
|
||||
+0x5f,0x15,0xc4,0x5f,0xd9,0x7e,0xed,0x1d,0xce,0xee,0x44,0xec,0xcb,0x2e,0x86,0xb1,
|
||||
+0xec,0x38,0xf6,0x70,0xed,0xab,0x5c,0x13,0xc1,0xd9,0x0f,0x0d,0xc7,0x80,0xb2,0x55,
|
||||
+0xed,0x34,0xf7,0xac,0x9b,0xe4,0xc3,0xda,0xe7,0x47,0x3c,0xa6,0xb5,0x8f,0x31,0xdf,
|
||||
+0xc5,0x4b,0xaf,0xeb,0xf1,0x02,0x03,0x01,0x00,0x01,0xa3,0x51,0x30,0x4f,0x30,0x0b,
|
||||
+0x06,0x03,0x55,0x1d,0x0f,0x04,0x04,0x03,0x02,0x01,0x86,0x30,0x0f,0x06,0x03,0x55,
|
||||
+0x1d,0x13,0x01,0x01,0xff,0x04,0x05,0x30,0x03,0x01,0x01,0xff,0x30,0x1d,0x06,0x03,
|
||||
+0x55,0x1d,0x0e,0x04,0x16,0x04,0x14,0x72,0x2d,0x3a,0x02,0x31,0x90,0x43,0xb9,0x14,
|
||||
+0x05,0x4e,0xe1,0xea,0xa7,0xc7,0x31,0xd1,0x23,0x89,0x34,0x30,0x10,0x06,0x09,0x2b,
|
||||
+0x06,0x01,0x04,0x01,0x82,0x37,0x15,0x01,0x04,0x03,0x02,0x01,0x00,0x30,0x0d,0x06,
|
||||
+0x09,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x01,0x01,0x0b,0x05,0x00,0x03,0x82,0x02,0x01,
|
||||
+0x00,0x7f,0x72,0xcf,0x0f,0xb7,0xc5,0x15,0xdb,0x9b,0xc0,0x49,0xca,0x26,0x5b,0xfe,
|
||||
+0x9e,0x13,0xe6,0xd3,0xf0,0xd2,0xdb,0x97,0x5f,0xf2,0x4b,0x3f,0x4d,0xb3,0xae,0x19,
|
||||
+0xae,0xed,0xd7,0x97,0xa0,0xac,0xef,0xa9,0x3a,0xa3,0xc2,0x41,0xb0,0xe5,0xb8,0x91,
|
||||
+0x9e,0x13,0x81,0x24,0x03,0xe6,0x09,0xfd,0x3f,0x57,0x40,0x39,0x21,0x24,0x56,0xd1,
|
||||
+0x10,0x2f,0x4b,0x40,0xa9,0x36,0x86,0x4b,0xb4,0x53,0x57,0x9a,0xfb,0xf1,0x7e,0x89,
|
||||
+0x8f,0x11,0xfe,0x18,0x6c,0x51,0xaa,0xe8,0xed,0x09,0x95,0xb5,0xe5,0x71,0xc9,0xa1,
|
||||
+0xe9,0x87,0x75,0xa6,0x15,0x7f,0xc9,0x7e,0x37,0x54,0x5e,0x74,0x93,0xc5,0xc3,0x67,
|
||||
+0xcc,0x0d,0x4f,0x6b,0xa8,0x17,0x0c,0x6d,0x08,0x92,0x7e,0x8b,0xdd,0x81,0xaa,0x2d,
|
||||
+0x70,0x21,0xc3,0x3d,0x06,0x14,0xbb,0xbf,0x24,0x5e,0xa7,0x84,0xd7,0x3f,0x0f,0x21,
|
||||
+0x22,0xbd,0x4b,0x00,0x06,0xdb,0x97,0x1c,0xd8,0x5e,0xd4,0xc5,0x0b,0x5c,0x87,0x6e,
|
||||
+0x50,0xa4,0xe8,0xc3,0x38,0xa4,0xfb,0xcb,0x2c,0xc5,0x92,0x66,0x9b,0x85,0x5e,0xcb,
|
||||
+0x7a,0x6c,0x93,0x7c,0x80,0x29,0x58,0x5b,0x57,0xb5,0x40,0x69,0xba,0x08,0x79,0xa6,
|
||||
+0x64,0x62,0x15,0x9d,0x87,0x96,0x45,0xb5,0x66,0x23,0x20,0x03,0x8b,0x1c,0x73,0xa0,
|
||||
+0xd3,0xa2,0x79,0x33,0xe0,0x50,0x59,0x86,0xdb,0x2f,0xe5,0x02,0x25,0xea,0x73,0x2a,
|
||||
+0x9f,0x00,0x14,0xc8,0x36,0xc7,0x92,0x3b,0xe9,0x4e,0x00,0xec,0xd8,0x56,0x09,0xb9,
|
||||
+0x33,0x49,0x12,0xd2,0x54,0x0b,0x01,0xab,0xac,0x47,0xb6,0x91,0x29,0x7d,0x4c,0xb4,
|
||||
+0x75,0x80,0x52,0x01,0xe8,0xca,0x82,0xf6,0x9f,0xcc,0xac,0x9c,0x8f,0x17,0xea,0x2f,
|
||||
+0x26,0xb0,0xab,0x72,0xac,0x0b,0xfe,0x9e,0x51,0x1e,0xc7,0x43,0x55,0x67,0x4f,0x51,
|
||||
+0xb3,0x57,0xd6,0xb6,0xec,0xee,0x52,0xb7,0x3a,0xe9,0x4e,0xe1,0xd7,0x81,0x88,0xbc,
|
||||
+0x4f,0x8e,0x75,0xbb,0x4b,0xa8,0xf0,0x35,0xaa,0x26,0xd4,0x67,0x67,0x49,0xb2,0x70,
|
||||
+0x4c,0x3b,0x93,0xdc,0x1d,0xdf,0x78,0x90,0x86,0x72,0xb2,0x38,0xa4,0xd1,0xdc,0x92,
|
||||
+0x4d,0xc9,0x58,0xeb,0x2b,0x12,0x5c,0xd4,0x3b,0xae,0x8c,0x6b,0xb0,0x83,0xe5,0x01,
|
||||
+0x3f,0xf8,0x09,0x32,0xf6,0x93,0x35,0x34,0x22,0xaf,0xdd,0x37,0x0d,0x77,0x09,0x80,
|
||||
+0x2b,0xcd,0x48,0x00,0xf1,0x8c,0x99,0x19,0x47,0x05,0x01,0xe9,0xd1,0xbf,0xd1,0x4e,
|
||||
+0xd0,0xe6,0x28,0x43,0x37,0x99,0xa4,0x0a,0x4a,0x08,0xd9,0x9a,0x71,0x73,0xd2,0xaa,
|
||||
+0xcd,0x31,0x13,0x63,0x76,0xa1,0x37,0x6f,0x92,0x38,0x1e,0x7d,0x12,0x3c,0x66,0x32,
|
||||
+0xe7,0xcb,0x6d,0xe1,0xfc,0x52,0x89,0xdd,0xca,0xd6,0x66,0x05,0x9a,0x96,0x61,0xbe,
|
||||
+0xa2,0x28,0xc7,0x1c,0xa3,0xa7,0x36,0x50,0x3c,0x3a,0xa4,0xdf,0x4a,0x6e,0xe6,0x87,
|
||||
+0x3b,0xce,0xeb,0xf0,0xe0,0x81,0x37,0x9d,0x13,0x3c,0x52,0x8e,0xbd,0xb9,0x1d,0x34,
|
||||
+0xc6,0x1d,0xd5,0x0a,0x6a,0x3d,0x98,0x29,0x70,0x8c,0x89,0x2a,0xd1,0xab,0x82,0x10,
|
||||
+0x48,0x1f,0xdc,0xf4,0xef,0xa5,0xc5,0xbb,0x55,0x1a,0x38,0x63,0x84,0x4e,0xb7,0x6c,
|
||||
+0xad,0x95,0x54,0xec,0x65,0x22,0x10,0x49,0x17,0xb8,0xc0,0x1e,0xc7,0x0f,0xac,0x54,
|
||||
+0x47 };
|
||||
|
||||
static const struct CONST_BLOB {
|
||||
const BYTE *pb;
|
||||
@@ -674,6 +868,8 @@ static const struct CONST_BLOB {
|
||||
{ authenticode, sizeof(authenticode) },
|
||||
{ rootauthority, sizeof(rootauthority) },
|
||||
{ rootcertauthority, sizeof(rootcertauthority) },
|
||||
+ { rootcertauthority2010, sizeof(rootcertauthority2010) },
|
||||
+ { rootcertauthority2011, sizeof(rootcertauthority2011) },
|
||||
};
|
||||
|
||||
static void add_ms_root_certs(HCERTSTORE to)
|
||||
--
|
||||
2.11.0
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user