mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2024-09-13 09:17:20 -07:00
Rebase against f9181daa1ddc2c10d3b6ddd4610bc1421cfd0f42
This commit is contained in:
parent
90679f2faf
commit
b6035fb652
@ -1,18 +1,18 @@
|
||||
From 41ee5d7699182ea01c61223ab9d0a10473e16ac2 Mon Sep 17 00:00:00 2001
|
||||
From d0a3d0318debc21cb9bb3962d263f92938042122 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Thu, 2 Oct 2014 19:44:31 +0200
|
||||
Subject: kernel32: Add winediag message to show warning, that this isn't
|
||||
vanilla wine.
|
||||
Subject: [PATCH] kernel32: Add winediag message to show warning, that this
|
||||
isn't vanilla wine.
|
||||
|
||||
---
|
||||
dlls/kernel32/process.c | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
dlls/kernel32/process.c | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c
|
||||
index 6d0fc74cdf4..ed1d967ffdf 100644
|
||||
index 62dc815..31ed9b3bcf 100644
|
||||
--- a/dlls/kernel32/process.c
|
||||
+++ b/dlls/kernel32/process.c
|
||||
@@ -65,6 +65,7 @@
|
||||
@@ -66,6 +66,7 @@
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(process);
|
||||
WINE_DECLARE_DEBUG_CHANNEL(file);
|
||||
WINE_DECLARE_DEBUG_CHANNEL(relay);
|
||||
@ -20,21 +20,22 @@ index 6d0fc74cdf4..ed1d967ffdf 100644
|
||||
|
||||
#ifdef __APPLE__
|
||||
extern char **__wine_get_main_environment(void);
|
||||
@@ -1104,6 +1105,14 @@ static DWORD WINAPI start_process( PEB *peb )
|
||||
DPRINTF( "%04x:Starting process %s (entryproc=%p)\n", GetCurrentThreadId(),
|
||||
debugstr_w(peb->ProcessParameters->ImagePathName.Buffer), entry );
|
||||
@@ -1131,6 +1132,15 @@ void WINAPI start_process( LPTHREAD_START_ROUTINE entry, PEB *peb )
|
||||
|
||||
+ if (CreateEventA(0, 0, 0, "__winestaging_warn_event") && GetLastError() != ERROR_ALREADY_EXISTS)
|
||||
+ {
|
||||
+ FIXME_(winediag)("Wine Staging %s is a testing version containing experimental patches.\n", wine_get_version());
|
||||
+ FIXME_(winediag)("Please mention your exact version when filing bug reports on winehq.org.\n");
|
||||
+ }
|
||||
+ else
|
||||
+ WARN_(winediag)("Wine Staging %s is a testing version containing experimental patches.\n", wine_get_version());
|
||||
__TRY
|
||||
{
|
||||
+ if (CreateEventA(0, 0, 0, "__winestaging_warn_event") && GetLastError() != ERROR_ALREADY_EXISTS)
|
||||
+ {
|
||||
+ FIXME_(winediag)("Wine Staging %s is a testing version containing experimental patches.\n", wine_get_version());
|
||||
+ FIXME_(winediag)("Please mention your exact version when filing bug reports on winehq.org.\n");
|
||||
+ }
|
||||
+ else
|
||||
+ WARN_(winediag)("Wine Staging %s is a testing version containing experimental patches.\n", wine_get_version());
|
||||
+
|
||||
if (!CheckRemoteDebuggerPresent( GetCurrentProcess(), &being_debugged ))
|
||||
being_debugged = FALSE;
|
||||
+
|
||||
if (!CheckRemoteDebuggerPresent( GetCurrentProcess(), &being_debugged ))
|
||||
being_debugged = FALSE;
|
||||
|
||||
--
|
||||
2.11.0
|
||||
1.9.1
|
||||
|
||||
|
@ -1,25 +1,25 @@
|
||||
From 994fe46f1b68d851d285a29cce904bd9f22540ea Mon Sep 17 00:00:00 2001
|
||||
From 95fd708dbdd9f8d61fdd8f1571c44e98c54b8988 Mon Sep 17 00:00:00 2001
|
||||
From: Andrew Wesie <awesie@gmail.com>
|
||||
Date: Tue, 2 May 2017 00:59:49 -0500
|
||||
Subject: advapi32: Implement BuildSecurityDescriptorW.
|
||||
Subject: [PATCH] advapi32: Implement BuildSecurityDescriptorW.
|
||||
|
||||
---
|
||||
dlls/advapi32/security.c | 218 +++++++++++++++++++++++++++++++++++------------
|
||||
1 file changed, 164 insertions(+), 54 deletions(-)
|
||||
|
||||
diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c
|
||||
index 24ec3099713..82bb6689d43 100644
|
||||
index 6f4fb44..3737827 100644
|
||||
--- a/dlls/advapi32/security.c
|
||||
+++ b/dlls/advapi32/security.c
|
||||
@@ -58,6 +58,7 @@ static BOOL ParseStringSecurityDescriptorToSecurityDescriptor(
|
||||
SECURITY_DESCRIPTOR_RELATIVE* SecurityDescriptor,
|
||||
LPDWORD cBytes);
|
||||
static DWORD ParseAclStringFlags(LPCWSTR* StringAcl);
|
||||
@@ -48,6 +48,7 @@
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(advapi);
|
||||
|
||||
static BOOL ParseStringSidToSid(LPCWSTR StringSid, PSID pSid, LPDWORD cBytes);
|
||||
+static DWORD trustee_to_sid(DWORD nDestinationSidLength, PSID pDestinationSid, PTRUSTEEW pTrustee);
|
||||
|
||||
typedef struct _ACEFLAG
|
||||
{
|
||||
@@ -1264,16 +1265,122 @@ DWORD WINAPI BuildSecurityDescriptorW(
|
||||
@@ -1255,16 +1256,122 @@ DWORD WINAPI BuildSecurityDescriptorW(
|
||||
IN ULONG cCountOfAccessEntries,
|
||||
IN PEXPLICIT_ACCESSW pListOfAccessEntries,
|
||||
IN ULONG cCountOfAuditEntries,
|
||||
@ -147,7 +147,7 @@ index 24ec3099713..82bb6689d43 100644
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
@@ -3766,6 +3873,56 @@ static void free_trustee_name(TRUSTEE_FORM form, WCHAR *trustee_nameW)
|
||||
@@ -3754,6 +3861,56 @@ static void free_trustee_name(TRUSTEE_FORM form, WCHAR *trustee_nameW)
|
||||
}
|
||||
}
|
||||
|
||||
@ -204,7 +204,7 @@ index 24ec3099713..82bb6689d43 100644
|
||||
/******************************************************************************
|
||||
* SetEntriesInAclA [ADVAPI32.@]
|
||||
*/
|
||||
@@ -3861,56 +4018,9 @@ DWORD WINAPI SetEntriesInAclW( ULONG count, PEXPLICIT_ACCESSW pEntries,
|
||||
@@ -3849,56 +4006,9 @@ DWORD WINAPI SetEntriesInAclW( ULONG count, PEXPLICIT_ACCESSW pEntries,
|
||||
pEntries[i].Trustee.TrusteeForm, pEntries[i].Trustee.TrusteeType,
|
||||
pEntries[i].Trustee.ptstrName);
|
||||
|
||||
@ -264,5 +264,5 @@ index 24ec3099713..82bb6689d43 100644
|
||||
/* Note: we overestimate the ACL size here as a tradeoff between
|
||||
* instructions (simplicity) and memory */
|
||||
--
|
||||
2.12.2
|
||||
1.9.1
|
||||
|
||||
|
@ -1,279 +0,0 @@
|
||||
From 510d9f43f441bc3a9723aabfd2c1cdc8737d6dcc 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.
|
||||
|
||||
---
|
||||
dlls/advapi32/security.c | 81 ++++++++++++++++++++++-
|
||||
dlls/advapi32/tests/security.c | 142 +++++++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 221 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c
|
||||
index e36792cff4..b305947347 100644
|
||||
--- a/dlls/advapi32/security.c
|
||||
+++ b/dlls/advapi32/security.c
|
||||
@@ -4205,8 +4205,85 @@ DWORD WINAPI GetExplicitEntriesFromAclA( PACL pacl, PULONG pcCountOfExplicitEntr
|
||||
DWORD WINAPI GetExplicitEntriesFromAclW( PACL pacl, PULONG pcCountOfExplicitEntries,
|
||||
PEXPLICIT_ACCESSW* pListOfExplicitEntries)
|
||||
{
|
||||
- FIXME("%p %p %p\n",pacl, pcCountOfExplicitEntries, pListOfExplicitEntries);
|
||||
- return ERROR_CALL_NOT_IMPLEMENTED;
|
||||
+ ACL_SIZE_INFORMATION sizeinfo;
|
||||
+ EXPLICIT_ACCESSW* entries;
|
||||
+ MAX_SID *sid_entries;
|
||||
+ ACE_HEADER *ace;
|
||||
+ NTSTATUS status;
|
||||
+ int i;
|
||||
+
|
||||
+ FIXME("%p %p %p: semi-stub\n",pacl, pcCountOfExplicitEntries, pListOfExplicitEntries);
|
||||
+
|
||||
+ if (!pcCountOfExplicitEntries || !pListOfExplicitEntries)
|
||||
+ return ERROR_INVALID_PARAMETER;
|
||||
+
|
||||
+ status = RtlQueryInformationAcl(pacl, &sizeinfo, sizeof(sizeinfo), AclSizeInformation);
|
||||
+ if (status) return RtlNtStatusToDosError(status);
|
||||
+
|
||||
+ if (!sizeinfo.AceCount)
|
||||
+ {
|
||||
+ *pcCountOfExplicitEntries = 0;
|
||||
+ *pListOfExplicitEntries = NULL;
|
||||
+ return ERROR_SUCCESS;
|
||||
+ }
|
||||
+
|
||||
+ entries = LocalAlloc(LMEM_FIXED | LMEM_ZEROINIT, (sizeof(EXPLICIT_ACCESSW) + sizeof(MAX_SID)) * sizeinfo.AceCount);
|
||||
+ if (!entries) return ERROR_OUTOFMEMORY;
|
||||
+ sid_entries = (MAX_SID*)((char*)entries + sizeof(EXPLICIT_ACCESSW) * sizeinfo.AceCount);
|
||||
+
|
||||
+ for (i = 0; i < sizeinfo.AceCount; i++)
|
||||
+ {
|
||||
+ status = RtlGetAce(pacl, i, (void**)&ace);
|
||||
+ if (status) goto error;
|
||||
+
|
||||
+ switch (ace->AceType)
|
||||
+ {
|
||||
+ case ACCESS_ALLOWED_ACE_TYPE:
|
||||
+ {
|
||||
+ ACCESS_ALLOWED_ACE *allow = (ACCESS_ALLOWED_ACE *)ace;
|
||||
+ entries[i].grfAccessMode = GRANT_ACCESS;
|
||||
+ entries[i].grfInheritance = ace->AceFlags;
|
||||
+ entries[i].grfAccessPermissions = allow->Mask;
|
||||
+
|
||||
+ CopySid(sizeof(MAX_SID), (PSID)&sid_entries[i], (PSID)&allow->SidStart);
|
||||
+ entries[i].Trustee.pMultipleTrustee = NULL;
|
||||
+ entries[i].Trustee.MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
|
||||
+ entries[i].Trustee.TrusteeForm = TRUSTEE_IS_SID;
|
||||
+ entries[i].Trustee.TrusteeType = TRUSTEE_IS_UNKNOWN;
|
||||
+ entries[i].Trustee.ptstrName = (WCHAR *)&sid_entries[i];
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ case ACCESS_DENIED_ACE_TYPE:
|
||||
+ {
|
||||
+ ACCESS_DENIED_ACE *deny = (ACCESS_DENIED_ACE *)ace;
|
||||
+ entries[i].grfAccessMode = DENY_ACCESS;
|
||||
+ entries[i].grfInheritance = ace->AceFlags;
|
||||
+ entries[i].grfAccessPermissions = deny->Mask;
|
||||
+
|
||||
+ CopySid(sizeof(MAX_SID), (PSID)&sid_entries[i], (PSID)&deny->SidStart);
|
||||
+ entries[i].Trustee.pMultipleTrustee = NULL;
|
||||
+ entries[i].Trustee.MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
|
||||
+ entries[i].Trustee.TrusteeForm = TRUSTEE_IS_SID;
|
||||
+ entries[i].Trustee.TrusteeType = TRUSTEE_IS_UNKNOWN;
|
||||
+ entries[i].Trustee.ptstrName = (WCHAR *)&sid_entries[i];
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ default:
|
||||
+ FIXME("Unhandled ace type %d\n", ace->AceType);
|
||||
+ entries[i].grfAccessMode = NOT_USED_ACCESS;
|
||||
+ continue;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ *pcCountOfExplicitEntries = sizeinfo.AceCount;
|
||||
+ *pListOfExplicitEntries = entries;
|
||||
+ return ERROR_SUCCESS;
|
||||
+
|
||||
+error:
|
||||
+ LocalFree(entries);
|
||||
+ return RtlNtStatusToDosError(status);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c
|
||||
index 3c68205922..ca5edffae5 100644
|
||||
--- a/dlls/advapi32/tests/security.c
|
||||
+++ b/dlls/advapi32/tests/security.c
|
||||
@@ -134,6 +134,7 @@ static BOOL (WINAPI *pGetWindowsAccountDomainSid)(PSID,PSID,DWORD*);
|
||||
static void (WINAPI *pRtlInitAnsiString)(PANSI_STRING,PCSZ);
|
||||
static NTSTATUS (WINAPI *pRtlFreeUnicodeString)(PUNICODE_STRING);
|
||||
static PSID_IDENTIFIER_AUTHORITY (WINAPI *pGetSidIdentifierAuthority)(PSID);
|
||||
+static DWORD (WINAPI *pGetExplicitEntriesFromAclW)(PACL,PULONG,PEXPLICIT_ACCESSW*);
|
||||
|
||||
static HMODULE hmod;
|
||||
static int myARGC;
|
||||
@@ -230,6 +231,7 @@ static void init(void)
|
||||
pGetWindowsAccountDomainSid = (void *)GetProcAddress(hmod, "GetWindowsAccountDomainSid");
|
||||
pGetSidIdentifierAuthority = (void *)GetProcAddress(hmod, "GetSidIdentifierAuthority");
|
||||
pDuplicateTokenEx = (void *)GetProcAddress(hmod, "DuplicateTokenEx");
|
||||
+ pGetExplicitEntriesFromAclW = (void *)GetProcAddress(hmod, "GetExplicitEntriesFromAclW");
|
||||
|
||||
myARGC = winetest_get_mainargs( &myARGV );
|
||||
}
|
||||
@@ -7076,6 +7078,145 @@ static void test_child_token_sd(void)
|
||||
HeapFree(GetProcessHeap(), 0, sd);
|
||||
}
|
||||
|
||||
+static void test_GetExplicitEntriesFromAclW(void)
|
||||
+{
|
||||
+ static const WCHAR wszCurrentUser[] = { 'C','U','R','R','E','N','T','_','U','S','E','R','\0'};
|
||||
+ SID_IDENTIFIER_AUTHORITY SIDAuthWorld = { SECURITY_WORLD_SID_AUTHORITY };
|
||||
+ SID_IDENTIFIER_AUTHORITY SIDAuthNT = { SECURITY_NT_AUTHORITY };
|
||||
+ PSID everyone_sid = NULL, users_sid = NULL;
|
||||
+ EXPLICIT_ACCESSW access;
|
||||
+ EXPLICIT_ACCESSW *access2;
|
||||
+ PACL new_acl, old_acl = NULL;
|
||||
+ ULONG count;
|
||||
+ DWORD res;
|
||||
+
|
||||
+ if (!pGetExplicitEntriesFromAclW)
|
||||
+ {
|
||||
+ win_skip("GetExplicitEntriesFromAclW is not available\n");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (!pSetEntriesInAclW)
|
||||
+ {
|
||||
+ win_skip("SetEntriesInAclW is not available\n");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ old_acl = HeapAlloc(GetProcessHeap(), 0, 256);
|
||||
+ res = InitializeAcl(old_acl, 256, ACL_REVISION);
|
||||
+ if(!res && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
|
||||
+ {
|
||||
+ win_skip("ACLs not implemented - skipping tests\n");
|
||||
+ HeapFree(GetProcessHeap(), 0, old_acl);
|
||||
+ return;
|
||||
+ }
|
||||
+ ok(res, "InitializeAcl failed with error %d\n", GetLastError());
|
||||
+
|
||||
+ res = AllocateAndInitializeSid(&SIDAuthWorld, 1, SECURITY_WORLD_RID, 0, 0, 0, 0, 0, 0, 0, &everyone_sid);
|
||||
+ ok(res, "AllocateAndInitializeSid failed with error %d\n", GetLastError());
|
||||
+
|
||||
+ res = AllocateAndInitializeSid(&SIDAuthNT, 2, SECURITY_BUILTIN_DOMAIN_RID,
|
||||
+ DOMAIN_ALIAS_RID_USERS, 0, 0, 0, 0, 0, 0, &users_sid);
|
||||
+ ok(res, "AllocateAndInitializeSid failed with error %d\n", GetLastError());
|
||||
+
|
||||
+ res = AddAccessAllowedAce(old_acl, ACL_REVISION, KEY_READ, users_sid);
|
||||
+ ok(res, "AddAccessAllowedAce failed with error %d\n", GetLastError());
|
||||
+
|
||||
+ access2 = NULL;
|
||||
+ res = pGetExplicitEntriesFromAclW(old_acl, &count, &access2);
|
||||
+ ok(res == ERROR_SUCCESS, "GetExplicitEntriesFromAclW failed with error %d\n", GetLastError());
|
||||
+ ok(count == 1, "Expected count == 1, got %d\n", count);
|
||||
+ ok(access2[0].grfAccessMode == GRANT_ACCESS, "Expected GRANT_ACCESS, got %d\n", access2[0].grfAccessMode);
|
||||
+ ok(access2[0].grfAccessPermissions == KEY_READ, "Expected KEY_READ, got %d\n", access2[0].grfAccessPermissions);
|
||||
+ ok(access2[0].Trustee.TrusteeForm == TRUSTEE_IS_SID, "Expected SID trustee, got %d\n", access2[0].Trustee.TrusteeForm);
|
||||
+ ok(access2[0].grfInheritance == NO_INHERITANCE, "Expected NO_INHERITANCE, got %x\n", access2[0].grfInheritance);
|
||||
+ ok(EqualSid(access2[0].Trustee.ptstrName, users_sid), "Expected equal SIDs\n");
|
||||
+ LocalFree(access2);
|
||||
+
|
||||
+ access.Trustee.MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
|
||||
+ access.Trustee.pMultipleTrustee = NULL;
|
||||
+
|
||||
+ access.grfAccessPermissions = KEY_WRITE;
|
||||
+ access.grfAccessMode = GRANT_ACCESS;
|
||||
+ access.grfInheritance = NO_INHERITANCE;
|
||||
+ access.Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP;
|
||||
+ access.Trustee.TrusteeForm = TRUSTEE_IS_SID;
|
||||
+ access.Trustee.ptstrName = everyone_sid;
|
||||
+ res = pSetEntriesInAclW(1, &access, old_acl, &new_acl);
|
||||
+ ok(res == ERROR_SUCCESS, "SetEntriesInAclW failed: %u\n", res);
|
||||
+ ok(new_acl != NULL, "returned acl was NULL\n");
|
||||
+
|
||||
+ access2 = NULL;
|
||||
+ res = pGetExplicitEntriesFromAclW(new_acl, &count, &access2);
|
||||
+ ok(res == ERROR_SUCCESS, "GetExplicitEntriesFromAclW failed with error %d\n", GetLastError());
|
||||
+ ok(count == 2, "Expected count == 2, got %d\n", count);
|
||||
+ ok(access2[0].grfAccessMode == GRANT_ACCESS, "Expected GRANT_ACCESS, got %d\n", access2[0].grfAccessMode);
|
||||
+ ok(access2[0].grfAccessPermissions == KEY_WRITE, "Expected KEY_WRITE, got %d\n", access2[0].grfAccessPermissions);
|
||||
+ ok(access2[0].Trustee.TrusteeType == TRUSTEE_IS_UNKNOWN,
|
||||
+ "Expected TRUSTEE_IS_UNKNOWN trustee type, got %d\n", access2[0].Trustee.TrusteeType);
|
||||
+ ok(access2[0].Trustee.TrusteeForm == TRUSTEE_IS_SID, "Expected SID trustee, got %d\n", access2[0].Trustee.TrusteeForm);
|
||||
+ ok(access2[0].grfInheritance == NO_INHERITANCE, "Expected NO_INHERITANCE, got %x\n", access2[0].grfInheritance);
|
||||
+ ok(EqualSid(access2[0].Trustee.ptstrName, everyone_sid), "Expected equal SIDs\n");
|
||||
+ LocalFree(access2);
|
||||
+ LocalFree(new_acl);
|
||||
+
|
||||
+ access.Trustee.TrusteeType = TRUSTEE_IS_UNKNOWN;
|
||||
+ res = pSetEntriesInAclW(1, &access, old_acl, &new_acl);
|
||||
+ ok(res == ERROR_SUCCESS, "SetEntriesInAclW failed: %u\n", res);
|
||||
+ ok(new_acl != NULL, "returned acl was NULL\n");
|
||||
+
|
||||
+ access2 = NULL;
|
||||
+ res = pGetExplicitEntriesFromAclW(new_acl, &count, &access2);
|
||||
+ ok(res == ERROR_SUCCESS, "GetExplicitEntriesFromAclW failed with error %d\n", GetLastError());
|
||||
+ ok(count == 2, "Expected count == 2, got %d\n", count);
|
||||
+ ok(access2[0].grfAccessMode == GRANT_ACCESS, "Expected GRANT_ACCESS, got %d\n", access2[0].grfAccessMode);
|
||||
+ ok(access2[0].grfAccessPermissions == KEY_WRITE, "Expected KEY_WRITE, got %d\n", access2[0].grfAccessPermissions);
|
||||
+ ok(access2[0].Trustee.TrusteeType == TRUSTEE_IS_UNKNOWN,
|
||||
+ "Expected TRUSTEE_IS_UNKNOWN trustee type, got %d\n", access2[0].Trustee.TrusteeType);
|
||||
+ ok(access2[0].Trustee.TrusteeForm == TRUSTEE_IS_SID, "Expected SID trustee, got %d\n", access2[0].Trustee.TrusteeForm);
|
||||
+ ok(access2[0].grfInheritance == NO_INHERITANCE, "Expected NO_INHERITANCE, got %x\n", access2[0].grfInheritance);
|
||||
+ ok(EqualSid(access2[0].Trustee.ptstrName, everyone_sid), "Expected equal SIDs\n");
|
||||
+ LocalFree(access2);
|
||||
+ LocalFree(new_acl);
|
||||
+
|
||||
+ access.Trustee.TrusteeForm = TRUSTEE_IS_NAME;
|
||||
+ access.Trustee.ptstrName = (LPWSTR)wszCurrentUser;
|
||||
+ res = pSetEntriesInAclW(1, &access, old_acl, &new_acl);
|
||||
+ ok(res == ERROR_SUCCESS, "SetEntriesInAclW failed: %u\n", res);
|
||||
+ ok(new_acl != NULL, "returned acl was NULL\n");
|
||||
+
|
||||
+ access2 = NULL;
|
||||
+ res = pGetExplicitEntriesFromAclW(new_acl, &count, &access2);
|
||||
+ ok(res == ERROR_SUCCESS, "GetExplicitEntriesFromAclW failed with error %d\n", GetLastError());
|
||||
+ ok(count == 2, "Expected count == 2, got %d\n", count);
|
||||
+ ok(access2[0].grfAccessMode == GRANT_ACCESS, "Expected GRANT_ACCESS, got %d\n", access2[0].grfAccessMode);
|
||||
+ ok(access2[0].grfAccessPermissions == KEY_WRITE, "Expected KEY_WRITE, got %d\n", access2[0].grfAccessPermissions);
|
||||
+ ok(access2[0].Trustee.TrusteeType == TRUSTEE_IS_UNKNOWN,
|
||||
+ "Expected TRUSTEE_IS_UNKNOWN trustee type, got %d\n", access2[0].Trustee.TrusteeType);
|
||||
+ ok(access2[0].Trustee.TrusteeForm == TRUSTEE_IS_SID, "Expected SID trustee, got %d\n", access2[0].Trustee.TrusteeForm);
|
||||
+ ok(access2[0].grfInheritance == NO_INHERITANCE, "Expected NO_INHERITANCE, got %x\n", access2[0].grfInheritance);
|
||||
+ LocalFree(access2);
|
||||
+ LocalFree(new_acl);
|
||||
+
|
||||
+ access.grfAccessMode = REVOKE_ACCESS;
|
||||
+ access.Trustee.TrusteeForm = TRUSTEE_IS_SID;
|
||||
+ access.Trustee.ptstrName = users_sid;
|
||||
+ res = pSetEntriesInAclW(1, &access, old_acl, &new_acl);
|
||||
+ ok(res == ERROR_SUCCESS, "SetEntriesInAclW failed: %u\n", res);
|
||||
+ ok(new_acl != NULL, "returned acl was NULL\n");
|
||||
+
|
||||
+ access2 = (void *)0xdeadbeef;
|
||||
+ res = pGetExplicitEntriesFromAclW(new_acl, &count, &access2);
|
||||
+ ok(res == ERROR_SUCCESS, "GetExplicitEntriesFromAclW failed with error %d\n", GetLastError());
|
||||
+ ok(count == 0, "Expected count == 0, got %d\n", count);
|
||||
+ ok(access2 == NULL, "access2 was not NULL\n");
|
||||
+ LocalFree(new_acl);
|
||||
+
|
||||
+ FreeSid(users_sid);
|
||||
+ FreeSid(everyone_sid);
|
||||
+ HeapFree(GetProcessHeap(), 0, old_acl);
|
||||
+}
|
||||
+
|
||||
START_TEST(security)
|
||||
{
|
||||
init();
|
||||
@@ -7129,6 +7270,7 @@ START_TEST(security)
|
||||
test_pseudo_tokens();
|
||||
test_maximum_allowed();
|
||||
test_token_label();
|
||||
+ test_GetExplicitEntriesFromAclW();
|
||||
|
||||
/* Must be the last test, modifies process token */
|
||||
test_token_security_descriptor();
|
||||
--
|
||||
2.13.1
|
||||
|
@ -1 +0,0 @@
|
||||
Fixes: Implement semi-stub for advapi32.GetExplicitEntriesFromAclW
|
@ -1,141 +0,0 @@
|
||||
From 8f6353a291eaa4d1b61d2063c93a294b7deef7a7 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Sun, 17 Jan 2016 20:17:46 +0100
|
||||
Subject: shcore: Add dll.
|
||||
|
||||
---
|
||||
configure.ac | 1 +
|
||||
dlls/shcore/Makefile.in | 1 +
|
||||
dlls/shcore/shcore.spec | 83 +++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
tools/make_specfiles | 5 +++
|
||||
4 files changed, 90 insertions(+)
|
||||
create mode 100644 dlls/shcore/Makefile.in
|
||||
create mode 100644 dlls/shcore/shcore.spec
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 04015a1..557f26b 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -3289,6 +3289,7 @@ WINE_CONFIG_TEST(dlls/setupapi/tests)
|
||||
WINE_CONFIG_DLL(setupx.dll16,enable_win16)
|
||||
WINE_CONFIG_DLL(sfc,,[implib])
|
||||
WINE_CONFIG_DLL(sfc_os,,[implib])
|
||||
+WINE_CONFIG_DLL(shcore)
|
||||
WINE_CONFIG_DLL(shdoclc,,[clean])
|
||||
WINE_CONFIG_DLL(shdocvw,,[clean,implib])
|
||||
WINE_CONFIG_TEST(dlls/shdocvw/tests)
|
||||
diff --git a/dlls/shcore/Makefile.in b/dlls/shcore/Makefile.in
|
||||
new file mode 100644
|
||||
index 0000000..dd5f08f
|
||||
--- /dev/null
|
||||
+++ b/dlls/shcore/Makefile.in
|
||||
@@ -0,0 +1 @@
|
||||
+MODULE = shcore.dll
|
||||
diff --git a/dlls/shcore/shcore.spec b/dlls/shcore/shcore.spec
|
||||
new file mode 100644
|
||||
index 0000000..12a4ef3
|
||||
--- /dev/null
|
||||
+++ b/dlls/shcore/shcore.spec
|
||||
@@ -0,0 +1,83 @@
|
||||
+@ stdcall CommandLineToArgvW(wstr ptr) shell32.CommandLineToArgvW
|
||||
+@ stub CreateRandomAccessStreamOnFile
|
||||
+@ stub CreateRandomAccessStreamOverStream
|
||||
+@ stub CreateStreamOverRandomAccessStream
|
||||
+@ stdcall -private DllCanUnloadNow() shell32.DllCanUnloadNow
|
||||
+@ stub DllGetActivationFactory
|
||||
+@ stdcall -private DllGetClassObject(ptr ptr ptr) shell32.DllGetClassObject
|
||||
+@ stdcall GetCurrentProcessExplicitAppUserModelID(ptr) shell32.GetCurrentProcessExplicitAppUserModelID
|
||||
+@ stub GetDpiForMonitor
|
||||
+@ stub GetDpiForShellUIComponent
|
||||
+@ stub GetProcessDpiAwareness
|
||||
+@ stub GetProcessReference
|
||||
+@ stub GetScaleFactorForDevice
|
||||
+@ stub GetScaleFactorForMonitor
|
||||
+@ stub IStream_Copy
|
||||
+@ stdcall IStream_Read(ptr ptr long) shlwapi.IStream_Read
|
||||
+@ stub IStream_ReadStr
|
||||
+@ stdcall IStream_Reset(ptr) shlwapi.IStream_Reset
|
||||
+@ stdcall IStream_Size(ptr ptr) shlwapi.IStream_Size
|
||||
+@ stdcall IStream_Write(ptr ptr long) shlwapi.IStream_Write
|
||||
+@ stub IStream_WriteStr
|
||||
+@ stdcall IUnknown_AtomicRelease(long) shlwapi.IUnknown_AtomicRelease
|
||||
+@ stdcall IUnknown_GetSite(ptr ptr ptr) shlwapi.IUnknown_GetSite
|
||||
+@ stdcall IUnknown_QueryService(ptr ptr ptr ptr) shlwapi.IUnknown_QueryService
|
||||
+@ stdcall IUnknown_Set(ptr ptr) shlwapi.IUnknown_Set
|
||||
+@ stdcall IUnknown_SetSite(ptr ptr) shlwapi.IUnknown_SetSite
|
||||
+@ stdcall IsOS(long) shlwapi.IsOS
|
||||
+@ stub RegisterScaleChangeEvent
|
||||
+@ stub RegisterScaleChangeNotifications
|
||||
+@ stub RevokeScaleChangeNotifications
|
||||
+@ stdcall SHAnsiToAnsi(str ptr long) shlwapi.SHAnsiToAnsi
|
||||
+@ stdcall SHAnsiToUnicode(str ptr long) shlwapi.SHAnsiToUnicode
|
||||
+@ stdcall SHCopyKeyA(long str long long) shlwapi.SHCopyKeyA
|
||||
+@ stdcall SHCopyKeyW(long wstr long long) shlwapi.SHCopyKeyW
|
||||
+@ stdcall SHCreateMemStream(ptr long) shlwapi.SHCreateMemStream
|
||||
+@ stdcall SHCreateStreamOnFileA(str long ptr) shlwapi.SHCreateStreamOnFileA
|
||||
+@ stdcall SHCreateStreamOnFileEx(wstr long long long ptr ptr) shlwapi.SHCreateStreamOnFileEx
|
||||
+@ stdcall SHCreateStreamOnFileW(wstr long ptr) shlwapi.SHCreateStreamOnFileW
|
||||
+@ stdcall SHCreateThread(ptr ptr long ptr) shlwapi.SHCreateThread
|
||||
+@ stdcall SHCreateThreadRef(ptr ptr) shlwapi.SHCreateThreadRef
|
||||
+@ stub SHCreateThreadWithHandle
|
||||
+@ stdcall SHDeleteEmptyKeyA(long ptr) shlwapi.SHDeleteEmptyKeyA
|
||||
+@ stdcall SHDeleteEmptyKeyW(long ptr) shlwapi.SHDeleteEmptyKeyW
|
||||
+@ stdcall SHDeleteKeyA(long str) shlwapi.SHDeleteKeyA
|
||||
+@ stdcall SHDeleteKeyW(long wstr) shlwapi.SHDeleteKeyW
|
||||
+@ stdcall SHDeleteValueA(long str str) shlwapi.SHDeleteValueA
|
||||
+@ stdcall SHDeleteValueW(long wstr wstr) shlwapi.SHDeleteValueW
|
||||
+@ stdcall SHEnumKeyExA(long long str ptr) shlwapi.SHEnumKeyExA
|
||||
+@ stdcall SHEnumKeyExW(long long wstr ptr) shlwapi.SHEnumKeyExW
|
||||
+@ stdcall SHEnumValueA(long long str ptr ptr ptr ptr) shlwapi.SHEnumValueA
|
||||
+@ stdcall SHEnumValueW(long long wstr ptr ptr ptr ptr) shlwapi.SHEnumValueW
|
||||
+@ stdcall SHGetThreadRef(ptr) shlwapi.SHGetThreadRef
|
||||
+@ stdcall SHGetValueA( long str str ptr ptr ptr ) shlwapi.SHGetValueA
|
||||
+@ stdcall SHGetValueW( long wstr wstr ptr ptr ptr ) shlwapi.SHGetValueW
|
||||
+@ stdcall SHOpenRegStream2A(long str str long) shlwapi.SHOpenRegStream2A
|
||||
+@ stdcall SHOpenRegStream2W(long wstr wstr long) shlwapi.SHOpenRegStream2W
|
||||
+@ stdcall SHOpenRegStreamA(long str str long) shlwapi.SHOpenRegStreamA
|
||||
+@ stdcall SHOpenRegStreamW(long wstr wstr long) shlwapi.SHOpenRegStreamW
|
||||
+@ stdcall SHQueryInfoKeyA(long ptr ptr ptr ptr) shlwapi.SHQueryInfoKeyA
|
||||
+@ stdcall SHQueryInfoKeyW(long ptr ptr ptr ptr) shlwapi.SHQueryInfoKeyW
|
||||
+@ stdcall SHQueryValueExA(long str ptr ptr ptr ptr) shlwapi.SHQueryValueExA
|
||||
+@ stdcall SHQueryValueExW(long wstr ptr ptr ptr ptr) shlwapi.SHQueryValueExW
|
||||
+@ stdcall SHRegDuplicateHKey(long) shlwapi.SHRegDuplicateHKey
|
||||
+@ stdcall SHRegGetIntW(ptr wstr long) shlwapi.SHRegGetIntW
|
||||
+@ stdcall SHRegGetPathA(long str str ptr long) shlwapi.SHRegGetPathA
|
||||
+@ stdcall SHRegGetPathW(long wstr wstr ptr long) shlwapi.SHRegGetPathW
|
||||
+@ stdcall SHRegGetValueA( long str str long ptr ptr ptr ) shlwapi.SHRegGetValueA
|
||||
+@ stub SHRegGetValueFromHKCUHKLM
|
||||
+@ stdcall SHRegGetValueW( long wstr wstr long ptr ptr ptr ) shlwapi.SHRegGetValueW
|
||||
+@ stdcall SHRegSetPathA(long str str str long) shlwapi.SHRegSetPathA
|
||||
+@ stdcall SHRegSetPathW(long wstr wstr wstr long) shlwapi.SHRegSetPathW
|
||||
+@ stdcall SHReleaseThreadRef() shlwapi.SHReleaseThreadRef
|
||||
+@ stdcall SHSetThreadRef(ptr) shlwapi.SHSetThreadRef
|
||||
+@ stdcall SHSetValueA(long str str long ptr long) shlwapi.SHSetValueA
|
||||
+@ stdcall SHSetValueW(long wstr wstr long ptr long) shlwapi.SHSetValueW
|
||||
+@ stdcall SHStrDupA(str ptr) shlwapi.SHStrDupA
|
||||
+@ stdcall SHStrDupW(wstr ptr) shlwapi.SHStrDupW
|
||||
+@ stdcall SHUnicodeToAnsi(wstr ptr ptr) shlwapi.SHUnicodeToAnsi
|
||||
+@ stdcall SHUnicodeToUnicode(wstr ptr long) shlwapi.SHUnicodeToUnicode
|
||||
+@ stdcall SetCurrentProcessExplicitAppUserModelID(wstr) shell32.SetCurrentProcessExplicitAppUserModelID
|
||||
+@ stub SetProcessDpiAwareness
|
||||
+@ stub SetProcessReference
|
||||
+@ stub UnregisterScaleChangeEvent
|
||||
diff --git a/tools/make_specfiles b/tools/make_specfiles
|
||||
index 2c64243..611aaca 100755
|
||||
--- a/tools/make_specfiles
|
||||
+++ b/tools/make_specfiles
|
||||
@@ -238,6 +238,11 @@ my @dll_groups =
|
||||
"api-ms-win-core-url-l1-1-0",
|
||||
],
|
||||
[
|
||||
+ "shell32",
|
||||
+ "shlwapi",
|
||||
+ "shcore",
|
||||
+ ],
|
||||
+ [
|
||||
"user32",
|
||||
"api-ms-win-core-stringansi-l1-1-0",
|
||||
"api-ms-win-core-string-l2-1-0",
|
||||
--
|
||||
2.9.0
|
||||
|
@ -1,62 +0,0 @@
|
||||
From dd6fc285ffa83e8eb9dce0aa482df44288faa2ea Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sun, 17 Jan 2016 01:36:08 +0100
|
||||
Subject: include: Add activation.idl with IActivationFactory interface.
|
||||
|
||||
---
|
||||
include/Makefile.in | 1 +
|
||||
include/activation.idl | 31 +++++++++++++++++++++++++++++++
|
||||
2 files changed, 32 insertions(+)
|
||||
create mode 100644 include/activation.idl
|
||||
|
||||
diff --git a/include/Makefile.in b/include/Makefile.in
|
||||
index 129ff6d..14e934c 100644
|
||||
--- a/include/Makefile.in
|
||||
+++ b/include/Makefile.in
|
||||
@@ -1,5 +1,6 @@
|
||||
IDL_SRCS = \
|
||||
access.idl \
|
||||
+ activation.idl \
|
||||
activaut.idl \
|
||||
activdbg.idl \
|
||||
activscp.idl \
|
||||
diff --git a/include/activation.idl b/include/activation.idl
|
||||
new file mode 100644
|
||||
index 0000000..b86c9f6
|
||||
--- /dev/null
|
||||
+++ b/include/activation.idl
|
||||
@@ -0,0 +1,31 @@
|
||||
+/*
|
||||
+ * 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
|
||||
+ */
|
||||
+
|
||||
+#ifndef DO_NO_IMPORTS
|
||||
+import "inspectable.idl";
|
||||
+#endif
|
||||
+
|
||||
+[
|
||||
+ object,
|
||||
+ uuid(00000035-0000-0000-c000-000000000046),
|
||||
+ pointer_default(unique)
|
||||
+]
|
||||
+interface IActivationFactory : IInspectable
|
||||
+{
|
||||
+ HRESULT ActivateInstance([out] IInspectable **instance);
|
||||
+}
|
||||
--
|
||||
2.6.4
|
||||
|
@ -1,7 +1,7 @@
|
||||
From ab3de1775fa8321218d5712b7562b8575a222a31 Mon Sep 17 00:00:00 2001
|
||||
From 4e75102aea7a341d58ca1326639b3d4b795e82d3 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sun, 17 Jan 2016 01:37:09 +0100
|
||||
Subject: include/roapi.h: Add further typedefs.
|
||||
Subject: [PATCH 1/7] include/roapi.h: Add further typedefs.
|
||||
|
||||
---
|
||||
include/roapi.h | 7 +++++++
|
||||
@ -39,5 +39,5 @@ index 0421fe9..f4154f8 100644
|
||||
extern "C" {
|
||||
#endif
|
||||
--
|
||||
2.6.4
|
||||
1.9.1
|
||||
|
||||
|
@ -1,190 +0,0 @@
|
||||
From a197dcbcf3f89fecd23028760bdc57502e0c7633 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sun, 17 Jan 2016 01:42:05 +0100
|
||||
Subject: combase: Implement RoGetActivationFactory.
|
||||
|
||||
---
|
||||
dlls/combase/Makefile.in | 2 +-
|
||||
dlls/combase/roapi.c | 137 +++++++++++++++++++++++++++++++++++++++++++++--
|
||||
2 files changed, 134 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/dlls/combase/Makefile.in b/dlls/combase/Makefile.in
|
||||
index c5ab8d2..cf17a36 100644
|
||||
--- a/dlls/combase/Makefile.in
|
||||
+++ b/dlls/combase/Makefile.in
|
||||
@@ -1,5 +1,5 @@
|
||||
MODULE = combase.dll
|
||||
-IMPORTS = ole32
|
||||
+IMPORTS = advapi32 ole32
|
||||
|
||||
C_SRCS = \
|
||||
roapi.c \
|
||||
diff --git a/dlls/combase/roapi.c b/dlls/combase/roapi.c
|
||||
index a2dfd54..6fd4df5 100644
|
||||
--- a/dlls/combase/roapi.c
|
||||
+++ b/dlls/combase/roapi.c
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright 2014 Martin Storsjo
|
||||
+ * 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
|
||||
@@ -17,13 +18,93 @@
|
||||
*/
|
||||
|
||||
#include "objbase.h"
|
||||
+#include "initguid.h"
|
||||
+#define COBJMACROS
|
||||
#include "roapi.h"
|
||||
-#include "hstring.h"
|
||||
+#include "winstring.h"
|
||||
|
||||
#include "wine/debug.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(combase);
|
||||
|
||||
+static const char *debugstr_hstring(HSTRING hstr)
|
||||
+{
|
||||
+ const WCHAR *str;
|
||||
+ UINT32 len;
|
||||
+ if (hstr && !((ULONG_PTR)hstr >> 16)) return "(invalid)";
|
||||
+ str = WindowsGetStringRawBuffer(hstr, &len);
|
||||
+ return wine_dbgstr_wn(str, len);
|
||||
+}
|
||||
+
|
||||
+static HRESULT get_library_for_classid(const WCHAR *classid, WCHAR **out)
|
||||
+{
|
||||
+ static const WCHAR classkeyW[] = {'S','o','f','t','w','a','r','e','\\',
|
||||
+ 'M','i','c','r','o','s','o','f','t','\\',
|
||||
+ 'W','i','n','d','o','w','s','R','u','n','t','i','m','e','\\',
|
||||
+ 'A','c','t','i','v','a','t','a','b','l','e','C','l','a','s','s','I','d',0};
|
||||
+ static const WCHAR dllpathW[] = {'D','l','l','P','a','t','h',0};
|
||||
+ HKEY hkey_root, hkey_class;
|
||||
+ DWORD type, size;
|
||||
+ HRESULT hr;
|
||||
+ WCHAR *buf = NULL;
|
||||
+
|
||||
+ *out = NULL;
|
||||
+
|
||||
+ /* load class registry key */
|
||||
+ if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, classkeyW, 0, KEY_READ, &hkey_root))
|
||||
+ return REGDB_E_READREGDB;
|
||||
+ if (RegOpenKeyExW(hkey_root, classid, 0, KEY_READ, &hkey_class))
|
||||
+ {
|
||||
+ WARN("Class %s not found in registry\n", debugstr_w(classid));
|
||||
+ RegCloseKey(hkey_root);
|
||||
+ return REGDB_E_CLASSNOTREG;
|
||||
+ }
|
||||
+ RegCloseKey(hkey_root);
|
||||
+
|
||||
+ /* load (and expand) DllPath registry value */
|
||||
+ if (RegQueryValueExW(hkey_class, dllpathW, NULL, &type, NULL, &size))
|
||||
+ {
|
||||
+ hr = REGDB_E_READREGDB;
|
||||
+ goto done;
|
||||
+ }
|
||||
+ if (type != REG_SZ && type != REG_EXPAND_SZ)
|
||||
+ {
|
||||
+ hr = REGDB_E_READREGDB;
|
||||
+ goto done;
|
||||
+ }
|
||||
+ if (!(buf = HeapAlloc(GetProcessHeap(), 0, size)))
|
||||
+ {
|
||||
+ hr = E_OUTOFMEMORY;
|
||||
+ goto done;
|
||||
+ }
|
||||
+ if (RegQueryValueExW(hkey_class, dllpathW, NULL, NULL, (BYTE *)buf, &size))
|
||||
+ {
|
||||
+ hr = REGDB_E_READREGDB;
|
||||
+ goto done;
|
||||
+ }
|
||||
+ if (type == REG_EXPAND_SZ)
|
||||
+ {
|
||||
+ WCHAR *expanded;
|
||||
+ DWORD len = ExpandEnvironmentStringsW(buf, NULL, 0);
|
||||
+ if (!(expanded = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR))))
|
||||
+ {
|
||||
+ hr = E_OUTOFMEMORY;
|
||||
+ goto done;
|
||||
+ }
|
||||
+ ExpandEnvironmentStringsW(buf, expanded, len);
|
||||
+ HeapFree(GetProcessHeap(), 0, buf);
|
||||
+ buf = expanded;
|
||||
+ }
|
||||
+
|
||||
+ *out = buf;
|
||||
+ return S_OK;
|
||||
+
|
||||
+done:
|
||||
+ HeapFree(GetProcessHeap(), 0, buf);
|
||||
+ RegCloseKey(hkey_class);
|
||||
+ return hr;
|
||||
+}
|
||||
+
|
||||
/***********************************************************************
|
||||
* RoInitialize (combase.@)
|
||||
*/
|
||||
@@ -50,8 +131,56 @@ void WINAPI RoUninitialize(void)
|
||||
/***********************************************************************
|
||||
* RoGetActivationFactory (combase.@)
|
||||
*/
|
||||
-HRESULT WINAPI RoGetActivationFactory(HSTRING classid, REFIID iid, void **factory)
|
||||
+HRESULT WINAPI RoGetActivationFactory(HSTRING classid, REFIID iid, void **class_factory)
|
||||
{
|
||||
- FIXME("stub: %p %p %p\n", classid, iid, factory);
|
||||
- return E_NOTIMPL;
|
||||
+ PFNGETACTIVATIONFACTORY pDllGetActivationFactory;
|
||||
+ IActivationFactory *factory;
|
||||
+ WCHAR *library;
|
||||
+ HMODULE module;
|
||||
+ HRESULT hr;
|
||||
+
|
||||
+ FIXME("(%s, %s, %p): semi-stub\n", debugstr_hstring(classid), debugstr_guid(iid), class_factory);
|
||||
+
|
||||
+ if (!iid || !class_factory)
|
||||
+ return E_INVALIDARG;
|
||||
+
|
||||
+ hr = get_library_for_classid(WindowsGetStringRawBuffer(classid, NULL), &library);
|
||||
+ if (FAILED(hr))
|
||||
+ {
|
||||
+ ERR("Failed to find library for %s\n", debugstr_hstring(classid));
|
||||
+ return hr;
|
||||
+ }
|
||||
+
|
||||
+ if (!(module = LoadLibraryW(library)))
|
||||
+ {
|
||||
+ ERR("Failed to load module %s\n", debugstr_w(library));
|
||||
+ hr = HRESULT_FROM_WIN32(GetLastError());
|
||||
+ goto done;
|
||||
+ }
|
||||
+
|
||||
+ if (!(pDllGetActivationFactory = (void *)GetProcAddress(module, "DllGetActivationFactory")))
|
||||
+ {
|
||||
+ ERR("Module %s does not implement DllGetActivationFactory\n", debugstr_w(library));
|
||||
+ hr = E_FAIL;
|
||||
+ goto done;
|
||||
+ }
|
||||
+
|
||||
+ TRACE("Found library %s for class %s\n", debugstr_w(library), debugstr_hstring(classid));
|
||||
+
|
||||
+ hr = pDllGetActivationFactory(classid, &factory);
|
||||
+ if (SUCCEEDED(hr))
|
||||
+ {
|
||||
+ hr = IActivationFactory_QueryInterface(factory, iid, class_factory);
|
||||
+ if (SUCCEEDED(hr))
|
||||
+ {
|
||||
+ TRACE("Created interface %p\n", *class_factory);
|
||||
+ module = NULL;
|
||||
+ }
|
||||
+ IActivationFactory_Release(factory);
|
||||
+ }
|
||||
+
|
||||
+done:
|
||||
+ HeapFree(GetProcessHeap(), 0, library);
|
||||
+ if (module) FreeLibrary(module);
|
||||
+ return hr;
|
||||
}
|
||||
--
|
||||
2.6.4
|
||||
|
@ -1,13 +1,13 @@
|
||||
From c78968d3484d613945a0ee33eeb4df5d96a7c406 Mon Sep 17 00:00:00 2001
|
||||
From 8274b8bb8f25d89c2f01b1724aed7e9e2eb5614b Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sun, 17 Jan 2016 01:45:30 +0100
|
||||
Subject: combase: Implement RoActivateInstance.
|
||||
Subject: [PATCH 2/7] combase: Implement RoActivateInstance.
|
||||
|
||||
---
|
||||
.../api-ms-win-core-winrt-l1-1-0.spec | 2 +-
|
||||
dlls/combase/combase.spec | 2 +-
|
||||
dlls/combase/roapi.c | 20 ++++++++++++++++++++
|
||||
3 files changed, 22 insertions(+), 2 deletions(-)
|
||||
.../api-ms-win-core-winrt-l1-1-0.spec | 2 +-
|
||||
dlls/combase/combase.spec | 2 +-
|
||||
dlls/combase/roapi.c | 24 +++++++++++++++++++++-
|
||||
3 files changed, 25 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/dlls/api-ms-win-core-winrt-l1-1-0/api-ms-win-core-winrt-l1-1-0.spec b/dlls/api-ms-win-core-winrt-l1-1-0/api-ms-win-core-winrt-l1-1-0.spec
|
||||
index 74c9d27..978c3dc 100644
|
||||
@ -20,7 +20,7 @@ index 74c9d27..978c3dc 100644
|
||||
@ stub RoGetApartmentIdentifier
|
||||
@ stdcall RoInitialize(long) combase.RoInitialize
|
||||
diff --git a/dlls/combase/combase.spec b/dlls/combase/combase.spec
|
||||
index 5082f39..9b1ab30 100644
|
||||
index c238eb8..f42bdae 100644
|
||||
--- a/dlls/combase/combase.spec
|
||||
+++ b/dlls/combase/combase.spec
|
||||
@@ -242,7 +242,7 @@
|
||||
@ -33,12 +33,28 @@ index 5082f39..9b1ab30 100644
|
||||
@ stub RoClearError
|
||||
@ stub RoFailFastWithErrorContext
|
||||
diff --git a/dlls/combase/roapi.c b/dlls/combase/roapi.c
|
||||
index 6fd4df5..695b6fd 100644
|
||||
index a2d62520..a272d2c 100644
|
||||
--- a/dlls/combase/roapi.c
|
||||
+++ b/dlls/combase/roapi.c
|
||||
@@ -184,3 +184,23 @@ done:
|
||||
if (module) FreeLibrary(module);
|
||||
return hr;
|
||||
@@ -15,12 +15,14 @@
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
-
|
||||
+#define COBJMACROS
|
||||
#include "objbase.h"
|
||||
+#include "initguid.h"
|
||||
#include "roapi.h"
|
||||
#include "roparameterizediid.h"
|
||||
#include "hstring.h"
|
||||
|
||||
+
|
||||
#include "wine/debug.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(combase);
|
||||
@@ -69,3 +71,23 @@ HRESULT WINAPI RoGetParameterizedTypeInstanceIID(UINT32 name_element_count, cons
|
||||
if (hiid) *hiid = INVALID_HANDLE_VALUE;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
+
|
||||
+/***********************************************************************
|
||||
@ -49,7 +65,7 @@ index 6fd4df5..695b6fd 100644
|
||||
+ IActivationFactory *factory;
|
||||
+ HRESULT hr;
|
||||
+
|
||||
+ FIXME("(%s, %p): semi-stub\n", debugstr_hstring(classid), instance);
|
||||
+ FIXME("(%p, %p): semi-stub\n", classid, instance);
|
||||
+
|
||||
+ hr = RoGetActivationFactory(classid, &IID_IActivationFactory, (void **)&factory);
|
||||
+ if (SUCCEEDED(hr))
|
||||
@ -61,5 +77,5 @@ index 6fd4df5..695b6fd 100644
|
||||
+ return hr;
|
||||
+}
|
||||
--
|
||||
2.6.4
|
||||
1.9.1
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 493d757c594d0eccce55e29fc6e5ef574fc7446f Mon Sep 17 00:00:00 2001
|
||||
From 15be870f14039bb8c2d276640b4b40c558ddcc32 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sun, 17 Jan 2016 01:47:08 +0100
|
||||
Subject: combase: Add stub for RoGetApartmentIdentifier.
|
||||
Subject: [PATCH 3/7] combase: Add stub for RoGetApartmentIdentifier.
|
||||
|
||||
---
|
||||
.../api-ms-win-core-winrt-l1-1-0.spec | 2 +-
|
||||
@ -22,7 +22,7 @@ index 978c3dc..88139fb 100644
|
||||
@ stub RoRegisterActivationFactories
|
||||
@ stub RoRegisterForApartmentShutdown
|
||||
diff --git a/dlls/combase/combase.spec b/dlls/combase/combase.spec
|
||||
index 9b1ab30..3bf0bf2 100644
|
||||
index f42bdae..ff89232 100644
|
||||
--- a/dlls/combase/combase.spec
|
||||
+++ b/dlls/combase/combase.spec
|
||||
@@ -250,7 +250,7 @@
|
||||
@ -33,12 +33,12 @@ index 9b1ab30..3bf0bf2 100644
|
||||
+@ stdcall RoGetApartmentIdentifier(ptr)
|
||||
@ stub RoGetErrorReportingFlags
|
||||
@ stub RoGetMatchingRestrictedErrorInfo
|
||||
@ stub RoGetParameterizedTypeInstanceIID
|
||||
@ stdcall RoGetParameterizedTypeInstanceIID(long ptr ptr ptr ptr)
|
||||
diff --git a/dlls/combase/roapi.c b/dlls/combase/roapi.c
|
||||
index 695b6fd..cd545f1 100644
|
||||
index a272d2c..1c0b373 100644
|
||||
--- a/dlls/combase/roapi.c
|
||||
+++ b/dlls/combase/roapi.c
|
||||
@@ -204,3 +204,17 @@ HRESULT WINAPI RoActivateInstance(HSTRING classid, IInspectable **instance)
|
||||
@@ -91,3 +91,17 @@ HRESULT WINAPI RoActivateInstance(HSTRING classid, IInspectable **instance)
|
||||
|
||||
return hr;
|
||||
}
|
||||
@ -57,5 +57,5 @@ index 695b6fd..cd545f1 100644
|
||||
+ return S_OK;
|
||||
+}
|
||||
--
|
||||
2.6.4
|
||||
1.9.1
|
||||
|
||||
|
@ -1,34 +0,0 @@
|
||||
From 2ad226c2f25a9bd0130f5ae8393e719b37a36afc Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sun, 17 Jan 2016 02:00:04 +0100
|
||||
Subject: include/objidl.idl: Add IApartmentShutdown interface.
|
||||
|
||||
---
|
||||
include/objidl.idl | 11 +++++++++++
|
||||
1 file changed, 11 insertions(+)
|
||||
|
||||
diff --git a/include/objidl.idl b/include/objidl.idl
|
||||
index c18442f..4388bab 100644
|
||||
--- a/include/objidl.idl
|
||||
+++ b/include/objidl.idl
|
||||
@@ -2451,6 +2451,17 @@ interface IDummyHICONIncluder : IUnknown
|
||||
HRESULT Dummy([in] HICON hIcon, [in] HDC hdc);
|
||||
}
|
||||
|
||||
+[
|
||||
+ object,
|
||||
+ local,
|
||||
+ pointer_default(unique),
|
||||
+ uuid(a2f05a09-27a2-42b5-bc0e-ac163ef49d9b)
|
||||
+]
|
||||
+interface IApartmentShutdown : IUnknown
|
||||
+{
|
||||
+ void OnUninitialize([in] UINT64 identifier);
|
||||
+}
|
||||
+
|
||||
cpp_quote("#ifdef USE_COM_CONTEXT_DEF")
|
||||
|
||||
typedef DWORD CPFLAGS;
|
||||
--
|
||||
2.6.4
|
||||
|
@ -1,7 +1,7 @@
|
||||
From c57255b7bcbe0b456e4934de9fb0efa123e369ef Mon Sep 17 00:00:00 2001
|
||||
From fe7c55c675e474efd68fcf04ce18ae4c5891d38c Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sun, 17 Jan 2016 02:01:59 +0100
|
||||
Subject: combase: Add stub for RoRegisterForApartmentShutdown.
|
||||
Subject: [PATCH 4/7] combase: Add stub for RoRegisterForApartmentShutdown.
|
||||
|
||||
---
|
||||
.../api-ms-win-core-winrt-l1-1-0.spec | 2 +-
|
||||
@ -23,7 +23,7 @@ index 88139fb..d27130c 100644
|
||||
@ stdcall RoUninitialize() combase.RoUninitialize
|
||||
@ stub RoUnregisterForApartmentShutdown
|
||||
diff --git a/dlls/combase/combase.spec b/dlls/combase/combase.spec
|
||||
index 3bf0bf2..7ae1f6e 100644
|
||||
index ff89232..ec4a6cd 100644
|
||||
--- a/dlls/combase/combase.spec
|
||||
+++ b/dlls/combase/combase.spec
|
||||
@@ -263,7 +263,7 @@
|
||||
@ -36,10 +36,10 @@ index 3bf0bf2..7ae1f6e 100644
|
||||
@ stub RoReportFailedDelegate
|
||||
@ stub RoReportUnhandledError
|
||||
diff --git a/dlls/combase/roapi.c b/dlls/combase/roapi.c
|
||||
index cd545f1..035fa47 100644
|
||||
index 1c0b373..d56ceb1 100644
|
||||
--- a/dlls/combase/roapi.c
|
||||
+++ b/dlls/combase/roapi.c
|
||||
@@ -218,3 +218,21 @@ HRESULT WINAPI RoGetApartmentIdentifier(UINT64 *identifier)
|
||||
@@ -105,3 +105,21 @@ HRESULT WINAPI RoGetApartmentIdentifier(UINT64 *identifier)
|
||||
*identifier = 0xdeadbeef;
|
||||
return S_OK;
|
||||
}
|
||||
@ -62,5 +62,5 @@ index cd545f1..035fa47 100644
|
||||
+ return S_OK;
|
||||
+}
|
||||
--
|
||||
2.6.4
|
||||
1.9.1
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From fa4ada9e3f3797b704cd8c033fff8f1a8bb25bac Mon Sep 17 00:00:00 2001
|
||||
From e3c49d6a259d63f43103174d78e1f90316fa27a8 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sun, 17 Jan 2016 02:03:47 +0100
|
||||
Subject: combase: Add stub for RoGetServerActivatableClasses.
|
||||
Subject: [PATCH 5/7] combase: Add stub for RoGetServerActivatableClasses.
|
||||
|
||||
---
|
||||
.../api-ms-win-core-winrt-registration-l1-1-0.spec | 2 +-
|
||||
@ -18,23 +18,23 @@ index 350ac04..20c8d9c 100644
|
||||
-@ stub RoGetServerActivatableClasses
|
||||
+@ stdcall RoGetServerActivatableClasses(ptr ptr ptr) combase.RoGetServerActivatableClasses
|
||||
diff --git a/dlls/combase/combase.spec b/dlls/combase/combase.spec
|
||||
index 0405a0e..fca0b2c 100644
|
||||
index ec4a6cd..c721f43 100644
|
||||
--- a/dlls/combase/combase.spec
|
||||
+++ b/dlls/combase/combase.spec
|
||||
@@ -254,7 +254,7 @@
|
||||
@ stub RoGetErrorReportingFlags
|
||||
@ stub RoGetMatchingRestrictedErrorInfo
|
||||
@ stub RoGetParameterizedTypeInstanceIID
|
||||
@ stdcall RoGetParameterizedTypeInstanceIID(long ptr ptr ptr ptr)
|
||||
-@ stub RoGetServerActivatableClasses
|
||||
+@ stdcall RoGetServerActivatableClasses(ptr ptr ptr)
|
||||
@ stdcall RoInitialize(long)
|
||||
@ stub RoInspectCapturedStackBackTrace
|
||||
@ stub RoInspectThreadErrorInfo
|
||||
diff --git a/dlls/combase/roapi.c b/dlls/combase/roapi.c
|
||||
index 035fa47..832ec67 100644
|
||||
index d56ceb1..2a228ce 100644
|
||||
--- a/dlls/combase/roapi.c
|
||||
+++ b/dlls/combase/roapi.c
|
||||
@@ -236,3 +236,14 @@ HRESULT WINAPI RoRegisterForApartmentShutdown(IApartmentShutdown *callback,
|
||||
@@ -123,3 +123,14 @@ HRESULT WINAPI RoRegisterForApartmentShutdown(IApartmentShutdown *callback,
|
||||
*cookie = (void *)0xcafecafe;
|
||||
return S_OK;
|
||||
}
|
||||
@ -44,11 +44,11 @@ index 035fa47..832ec67 100644
|
||||
+ */
|
||||
+HRESULT WINAPI RoGetServerActivatableClasses(HSTRING name, HSTRING **classes, DWORD *count)
|
||||
+{
|
||||
+ FIXME("(%s, %p, %p): stub\n", debugstr_hstring(name), classes, count);
|
||||
+ FIXME("(%p, %p, %p): stub\n", name, classes, count);
|
||||
+
|
||||
+ *count = 0;
|
||||
+ return S_OK;
|
||||
+}
|
||||
--
|
||||
2.7.1
|
||||
1.9.1
|
||||
|
||||
|
@ -1,13 +1,13 @@
|
||||
From b13790d7bcd47d1bf1985258cc3ea6c4edb96d1f Mon Sep 17 00:00:00 2001
|
||||
From 30ad6da4756f20339d4f52b959a128fb231dbf14 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sun, 17 Jan 2016 02:20:39 +0100
|
||||
Subject: combase: Add stub for RoRegisterActivationFactories.
|
||||
Subject: [PATCH 6/7] combase: Add stub for RoRegisterActivationFactories.
|
||||
|
||||
---
|
||||
.../api-ms-win-core-winrt-l1-1-0.spec | 2 +-
|
||||
dlls/combase/combase.spec | 2 +-
|
||||
dlls/combase/roapi.c | 16 ++++++++++++++++
|
||||
3 files changed, 18 insertions(+), 2 deletions(-)
|
||||
.../api-ms-win-core-winrt-l1-1-0.spec | 2 +-
|
||||
dlls/combase/combase.spec | 2 +-
|
||||
dlls/combase/roapi.c | 11 +++++++++++
|
||||
3 files changed, 13 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/api-ms-win-core-winrt-l1-1-0/api-ms-win-core-winrt-l1-1-0.spec b/dlls/api-ms-win-core-winrt-l1-1-0/api-ms-win-core-winrt-l1-1-0.spec
|
||||
index d27130c..32b9474 100644
|
||||
@ -23,7 +23,7 @@ index d27130c..32b9474 100644
|
||||
@ stub RoRevokeActivationFactories
|
||||
@ stdcall RoUninitialize() combase.RoUninitialize
|
||||
diff --git a/dlls/combase/combase.spec b/dlls/combase/combase.spec
|
||||
index 3a17e4a..7a0decd 100644
|
||||
index c721f43..72a7eb5 100644
|
||||
--- a/dlls/combase/combase.spec
|
||||
+++ b/dlls/combase/combase.spec
|
||||
@@ -262,7 +262,7 @@
|
||||
@ -36,10 +36,10 @@ index 3a17e4a..7a0decd 100644
|
||||
@ stub RoReportCapabilityCheckFailure
|
||||
@ stub RoReportFailedDelegate
|
||||
diff --git a/dlls/combase/roapi.c b/dlls/combase/roapi.c
|
||||
index 832ec67..e8629cd 100644
|
||||
index 2a228ce..ae063a2 100644
|
||||
--- a/dlls/combase/roapi.c
|
||||
+++ b/dlls/combase/roapi.c
|
||||
@@ -247,3 +247,19 @@ HRESULT WINAPI RoGetServerActivatableClasses(HSTRING name, HSTRING **classes, DW
|
||||
@@ -134,3 +134,14 @@ HRESULT WINAPI RoGetServerActivatableClasses(HSTRING name, HSTRING **classes, DW
|
||||
*count = 0;
|
||||
return S_OK;
|
||||
}
|
||||
@ -50,15 +50,10 @@ index 832ec67..e8629cd 100644
|
||||
+HRESULT WINAPI RoRegisterActivationFactories(HSTRING *classes, PFNGETACTIVATIONFACTORY *callbacks,
|
||||
+ UINT32 count, RO_REGISTRATION_COOKIE *cookie)
|
||||
+{
|
||||
+ UINT32 i;
|
||||
+
|
||||
+ FIXME("(%p, %p, %d, %p): stub\n", classes, callbacks, count, cookie);
|
||||
+
|
||||
+ for (i = 0; i < count; i++)
|
||||
+ FIXME(" %s\n", debugstr_hstring(classes[i]));
|
||||
+
|
||||
+ return S_OK;
|
||||
+}
|
||||
--
|
||||
2.6.4
|
||||
1.9.1
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 718d3be80d5d8d89f3a120ee6c0a5977390cc26d Mon Sep 17 00:00:00 2001
|
||||
From a336f80cc6d83ae000d676ce641d1f3844229db1 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sun, 17 Jan 2016 02:21:48 +0100
|
||||
Subject: combase: Add stub for CleanupTlsOleState.
|
||||
Subject: [PATCH 7/7] combase: Add stub for CleanupTlsOleState.
|
||||
|
||||
---
|
||||
dlls/combase/combase.spec | 2 +-
|
||||
@ -9,7 +9,7 @@ Subject: combase: Add stub for CleanupTlsOleState.
|
||||
2 files changed, 9 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/combase/combase.spec b/dlls/combase/combase.spec
|
||||
index 7a0decd..d03287b 100644
|
||||
index 72a7eb5..c8a8dee 100644
|
||||
--- a/dlls/combase/combase.spec
|
||||
+++ b/dlls/combase/combase.spec
|
||||
@@ -66,7 +66,7 @@
|
||||
@ -22,10 +22,10 @@ index 7a0decd..d03287b 100644
|
||||
@ stdcall CoAddRefServerProcess() ole32.CoAddRefServerProcess
|
||||
@ stub CoAllowUnmarshalerCLSID
|
||||
diff --git a/dlls/combase/roapi.c b/dlls/combase/roapi.c
|
||||
index e8629cd..e838412 100644
|
||||
index ae063a2..3a81fb4 100644
|
||||
--- a/dlls/combase/roapi.c
|
||||
+++ b/dlls/combase/roapi.c
|
||||
@@ -263,3 +263,11 @@ HRESULT WINAPI RoRegisterActivationFactories(HSTRING *classes, PFNGETACTIVATIONF
|
||||
@@ -145,3 +145,11 @@ HRESULT WINAPI RoRegisterActivationFactories(HSTRING *classes, PFNGETACTIVATIONF
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
@ -38,5 +38,5 @@ index e8629cd..e838412 100644
|
||||
+ FIXME("(%p): stub\n", unknown);
|
||||
+}
|
||||
--
|
||||
2.6.4
|
||||
1.9.1
|
||||
|
||||
|
@ -52,14 +52,14 @@ usage()
|
||||
# Get the upstream commit sha
|
||||
upstream_commit()
|
||||
{
|
||||
echo "53290d2ec483006656987352d53842ffc1852c91"
|
||||
echo "f9181daa1ddc2c10d3b6ddd4610bc1421cfd0f42"
|
||||
}
|
||||
|
||||
# Show version information
|
||||
version()
|
||||
{
|
||||
echo "Wine Staging 2.21"
|
||||
echo "Copyright (C) 2014-2017 the Wine Staging project authors."
|
||||
echo "Wine Staging 3.1 (Unreleased)"
|
||||
echo "Copyright (C) 2014-2018 the Wine Staging project authors."
|
||||
echo ""
|
||||
echo "Patchset to be applied on upstream Wine:"
|
||||
echo " commit $(upstream_commit)"
|
||||
@ -89,7 +89,6 @@ patch_enable_all ()
|
||||
enable_advapi_LsaLookupPrivilegeName="$1"
|
||||
enable_advapi32_BuildSecurityDescriptor="$1"
|
||||
enable_advapi32_CreateRestrictedToken="$1"
|
||||
enable_advapi32_GetExplicitEntriesFromAclW="$1"
|
||||
enable_advapi32_LsaLookupSids="$1"
|
||||
enable_advapi32_Performance_Counters="$1"
|
||||
enable_advapi32_SetSecurityInfo="$1"
|
||||
@ -547,9 +546,6 @@ patch_enable ()
|
||||
advapi32-CreateRestrictedToken)
|
||||
enable_advapi32_CreateRestrictedToken="$2"
|
||||
;;
|
||||
advapi32-GetExplicitEntriesFromAclW)
|
||||
enable_advapi32_GetExplicitEntriesFromAclW="$2"
|
||||
;;
|
||||
advapi32-LsaLookupSids)
|
||||
enable_advapi32_LsaLookupSids="$2"
|
||||
;;
|
||||
@ -1834,9 +1830,6 @@ patch_enable ()
|
||||
wusa-MSU_Package_Installer)
|
||||
enable_wusa_MSU_Package_Installer="$2"
|
||||
;;
|
||||
xaudio2-get_al_format)
|
||||
enable_xaudio2_get_al_format="$2"
|
||||
;;
|
||||
xaudio2_7-OnVoiceProcessingPassStart)
|
||||
enable_xaudio2_7_OnVoiceProcessingPassStart="$2"
|
||||
;;
|
||||
@ -2902,9 +2895,6 @@ if test "$enable_advapi32_Token_Integrity_Level" -eq 1; then
|
||||
if test "$enable_advapi32_CreateRestrictedToken" -gt 1; then
|
||||
abort "Patchset advapi32-CreateRestrictedToken disabled, but advapi32-Token_Integrity_Level depends on that."
|
||||
fi
|
||||
if test "$enable_advapi32_GetExplicitEntriesFromAclW" -gt 1; then
|
||||
abort "Patchset advapi32-GetExplicitEntriesFromAclW disabled, but advapi32-Token_Integrity_Level depends on that."
|
||||
fi
|
||||
if test "$enable_kernel32_COMSPEC" -gt 1; then
|
||||
abort "Patchset kernel32-COMSPEC disabled, but advapi32-Token_Integrity_Level depends on that."
|
||||
fi
|
||||
@ -2928,7 +2918,6 @@ if test "$enable_advapi32_Token_Integrity_Level" -eq 1; then
|
||||
fi
|
||||
enable_Staging=1
|
||||
enable_advapi32_CreateRestrictedToken=1
|
||||
enable_advapi32_GetExplicitEntriesFromAclW=1
|
||||
enable_kernel32_COMSPEC=1
|
||||
enable_kernel32_UmsStubs=1
|
||||
enable_ntdll_APC_Start_Process=1
|
||||
@ -2949,14 +2938,6 @@ if test "$enable_advapi32_LsaLookupSids" -eq 1; then
|
||||
enable_server_Misc_ACL=1
|
||||
fi
|
||||
|
||||
if test "$enable_advapi32_BuildSecurityDescriptor" -eq 1; then
|
||||
if test "$enable_advapi32_GetExplicitEntriesFromAclW" -gt 1; then
|
||||
abort "Patchset advapi32-GetExplicitEntriesFromAclW disabled, but advapi32-BuildSecurityDescriptor depends on that."
|
||||
fi
|
||||
enable_advapi32_GetExplicitEntriesFromAclW=1
|
||||
fi
|
||||
|
||||
|
||||
# If autoupdate is enabled then create a tempfile to keep track of all patches
|
||||
if test "$enable_patchlist" -eq 1; then
|
||||
if test "$enable_Staging" -eq 1; then
|
||||
@ -3088,18 +3069,6 @@ if test "$enable_advapi_LsaLookupPrivilegeName" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset advapi32-GetExplicitEntriesFromAclW
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/advapi32/security.c, dlls/advapi32/tests/security.c
|
||||
# |
|
||||
if test "$enable_advapi32_GetExplicitEntriesFromAclW" -eq 1; then
|
||||
patch_apply advapi32-GetExplicitEntriesFromAclW/0001-advapi32-Implement-GetExplicitEntriesFromAclW.patch
|
||||
(
|
||||
printf '%s\n' '+ { "Michael Müller", "advapi32: Implement GetExplicitEntriesFromAclW.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset advapi32-BuildSecurityDescriptor
|
||||
# |
|
||||
# | This patchset has the following (direct or indirect) dependencies:
|
||||
@ -3391,23 +3360,17 @@ fi
|
||||
# | include/Makefile.in, include/activation.idl, include/objidl.idl, include/roapi.h
|
||||
# |
|
||||
if test "$enable_combase_RoApi" -eq 1; then
|
||||
patch_apply combase-RoApi/0001-include-Add-activation.idl-with-IActivationFactory-i.patch
|
||||
patch_apply combase-RoApi/0002-include-roapi.h-Add-further-typedefs.patch
|
||||
patch_apply combase-RoApi/0003-combase-Implement-RoGetActivationFactory.patch
|
||||
patch_apply combase-RoApi/0004-combase-Implement-RoActivateInstance.patch
|
||||
patch_apply combase-RoApi/0005-combase-Add-stub-for-RoGetApartmentIdentifier.patch
|
||||
patch_apply combase-RoApi/0006-include-objidl.idl-Add-IApartmentShutdown-interface.patch
|
||||
patch_apply combase-RoApi/0007-combase-Add-stub-for-RoRegisterForApartmentShutdown.patch
|
||||
patch_apply combase-RoApi/0008-combase-Add-stub-for-RoGetServerActivatableClasses.patch
|
||||
patch_apply combase-RoApi/0009-combase-Add-stub-for-RoRegisterActivationFactories.patch
|
||||
patch_apply combase-RoApi/0010-combase-Add-stub-for-CleanupTlsOleState.patch
|
||||
(
|
||||
printf '%s\n' '+ { "Michael Müller", "include: Add activation.idl with IActivationFactory interface.", 1 },';
|
||||
printf '%s\n' '+ { "Michael Müller", "include/roapi.h: Add further typedefs.", 1 },';
|
||||
printf '%s\n' '+ { "Michael Müller", "combase: Implement RoGetActivationFactory.", 1 },';
|
||||
printf '%s\n' '+ { "Michael Müller", "combase: Implement RoActivateInstance.", 1 },';
|
||||
printf '%s\n' '+ { "Michael Müller", "combase: Add stub for RoGetApartmentIdentifier.", 1 },';
|
||||
printf '%s\n' '+ { "Michael Müller", "include/objidl.idl: Add IApartmentShutdown interface.", 1 },';
|
||||
printf '%s\n' '+ { "Michael Müller", "combase: Add stub for RoRegisterForApartmentShutdown.", 1 },';
|
||||
printf '%s\n' '+ { "Michael Müller", "combase: Add stub for RoGetServerActivatableClasses.", 1 },';
|
||||
printf '%s\n' '+ { "Michael Müller", "combase: Add stub for RoRegisterActivationFactories.", 1 },';
|
||||
@ -10738,21 +10701,6 @@ if test "$enable_wusa_MSU_Package_Installer" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset xaudio2-get_al_format
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#42414] Add support for xaudio2 float formats with more than 2 channels
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/xaudio2_7/xaudio_dll.c
|
||||
# |
|
||||
if test "$enable_xaudio2_get_al_format" -eq 1; then
|
||||
patch_apply xaudio2-get_al_format/0001-xaudio2-Add-support-for-float-formats-with-more-than.patch
|
||||
(
|
||||
printf '%s\n' '+ { "Kimmo Myllyvirta", "xaudio2: Add support for float formats with more than 2 channels.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset xaudio2_7-OnVoiceProcessingPassStart
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
|
@ -1,32 +0,0 @@
|
||||
From c39abfe4849d5ff8c6eb9d60c3295d2326100b09 Mon Sep 17 00:00:00 2001
|
||||
From: Kimmo Myllyvirta <kimmo.myllyvirta@gmail.com>
|
||||
Date: Sun, 25 Jun 2017 05:14:05 +0200
|
||||
Subject: xaudio2: Add support for float formats with more than 2 channels.
|
||||
|
||||
See http://openal.org/pipermail/openal/2014-December/000287.html.
|
||||
---
|
||||
dlls/xaudio2_7/xaudio_dll.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/dlls/xaudio2_7/xaudio_dll.c b/dlls/xaudio2_7/xaudio_dll.c
|
||||
index a09162934ef..13f591630fd 100644
|
||||
--- a/dlls/xaudio2_7/xaudio_dll.c
|
||||
+++ b/dlls/xaudio2_7/xaudio_dll.c
|
||||
@@ -499,6 +499,14 @@ static ALenum get_al_format(const WAVEFORMATEX *fmt)
|
||||
return AL_FORMAT_MONO_FLOAT32;
|
||||
case 2:
|
||||
return AL_FORMAT_STEREO_FLOAT32;
|
||||
+ case 4:
|
||||
+ return AL_FORMAT_QUAD32;
|
||||
+ case 6:
|
||||
+ return AL_FORMAT_51CHN32;
|
||||
+ case 7:
|
||||
+ return AL_FORMAT_61CHN32;
|
||||
+ case 8:
|
||||
+ return AL_FORMAT_71CHN32;
|
||||
}
|
||||
}
|
||||
}
|
||||
--
|
||||
2.13.1
|
||||
|
@ -1 +0,0 @@
|
||||
Fixes: [42414] Add support for xaudio2 float formats with more than 2 channels
|
@ -1,222 +0,0 @@
|
||||
From 14d181155cd442b6f4b06c9837d6541e9d574fff Mon Sep 17 00:00:00 2001
|
||||
From: Andrew Eikum <aeikum@codeweavers.com>
|
||||
Date: Fri, 22 Jul 2016 10:21:20 -0500
|
||||
Subject: xaudio2: Ignore queued AL buffers after Stop
|
||||
|
||||
Changes by Sebastian Lackner <sebastian@fds-team.de>:
|
||||
* Fixed flawed logic to skip abandoned buffers.
|
||||
---
|
||||
dlls/xaudio2_7/tests/xaudio2.c | 78 +++++++++++++++++++++++++++++++++++++++++
|
||||
dlls/xaudio2_7/xaudio_dll.c | 37 +++++++++++++++----
|
||||
dlls/xaudio2_7/xaudio_private.h | 2 +-
|
||||
3 files changed, 109 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/dlls/xaudio2_7/tests/xaudio2.c b/dlls/xaudio2_7/tests/xaudio2.c
|
||||
index 54176ea..ff402f8 100644
|
||||
--- a/dlls/xaudio2_7/tests/xaudio2.c
|
||||
+++ b/dlls/xaudio2_7/tests/xaudio2.c
|
||||
@@ -841,6 +841,82 @@ static void test_submix(IXAudio2 *xa)
|
||||
IXAudio2MasteringVoice_DestroyVoice(master);
|
||||
}
|
||||
|
||||
+static void test_flush(IXAudio2 *xa)
|
||||
+{
|
||||
+ HRESULT hr;
|
||||
+ IXAudio2MasteringVoice *master;
|
||||
+ IXAudio2SourceVoice *src;
|
||||
+ WAVEFORMATEX fmt;
|
||||
+ XAUDIO2_BUFFER buf;
|
||||
+ XAUDIO2_VOICE_STATE state;
|
||||
+
|
||||
+ XA2CALL_0V(StopEngine);
|
||||
+
|
||||
+ if(xaudio27)
|
||||
+ hr = IXAudio27_CreateMasteringVoice((IXAudio27*)xa, &master, 2, 44100, 0, 0, NULL);
|
||||
+ else
|
||||
+ hr = IXAudio2_CreateMasteringVoice(xa, &master, 2, 44100, 0, NULL, NULL, AudioCategory_GameEffects);
|
||||
+ ok(hr == S_OK, "CreateMasteringVoice failed: %08x\n", hr);
|
||||
+
|
||||
+ fmt.wFormatTag = WAVE_FORMAT_IEEE_FLOAT;
|
||||
+ fmt.nChannels = 2;
|
||||
+ fmt.nSamplesPerSec = 44100;
|
||||
+ fmt.wBitsPerSample = 32;
|
||||
+ fmt.nBlockAlign = fmt.nChannels * fmt.wBitsPerSample / 8;
|
||||
+ fmt.nAvgBytesPerSec = fmt.nSamplesPerSec * fmt.nBlockAlign;
|
||||
+ fmt.cbSize = 0;
|
||||
+
|
||||
+ XA2CALL(CreateSourceVoice, &src, &fmt, 0, 1.f, NULL, NULL, NULL);
|
||||
+ ok(hr == S_OK, "CreateSourceVoice failed: %08x\n", hr);
|
||||
+
|
||||
+ memset(&buf, 0, sizeof(buf));
|
||||
+ buf.AudioBytes = 22050 * fmt.nBlockAlign;
|
||||
+ buf.pAudioData = HeapAlloc(GetProcessHeap(), 0, buf.AudioBytes);
|
||||
+ fill_buf((float*)buf.pAudioData, &fmt, 440, 22050);
|
||||
+
|
||||
+ hr = IXAudio2SourceVoice_SubmitSourceBuffer(src, &buf, NULL);
|
||||
+ ok(hr == S_OK, "SubmitSourceBuffer failed: %08x\n", hr);
|
||||
+
|
||||
+ hr = IXAudio2SourceVoice_Start(src, 0, XAUDIO2_COMMIT_NOW);
|
||||
+ ok(hr == S_OK, "Start failed: %08x\n", hr);
|
||||
+
|
||||
+ XA2CALL_0(StartEngine);
|
||||
+ ok(hr == S_OK, "StartEngine failed: %08x\n", hr);
|
||||
+
|
||||
+ while(1){
|
||||
+ if(xaudio27)
|
||||
+ IXAudio27SourceVoice_GetState((IXAudio27SourceVoice*)src, &state);
|
||||
+ else
|
||||
+ IXAudio2SourceVoice_GetState(src, &state, 0);
|
||||
+ if(state.SamplesPlayed >= 2205)
|
||||
+ break;
|
||||
+ Sleep(10);
|
||||
+ }
|
||||
+
|
||||
+ hr = IXAudio2SourceVoice_Stop(src, 0, XAUDIO2_COMMIT_NOW);
|
||||
+ ok(hr == S_OK, "Stop failed: %08x\n", hr);
|
||||
+
|
||||
+ hr = IXAudio2SourceVoice_FlushSourceBuffers(src);
|
||||
+ ok(hr == S_OK, "FlushSourceBuffers failed: %08x\n", hr);
|
||||
+
|
||||
+ hr = IXAudio2SourceVoice_Start(src, 0, XAUDIO2_COMMIT_NOW);
|
||||
+ ok(hr == S_OK, "Start failed: %08x\n", hr);
|
||||
+
|
||||
+ Sleep(100);
|
||||
+
|
||||
+ hr = IXAudio2SourceVoice_SubmitSourceBuffer(src, &buf, NULL);
|
||||
+ ok(hr == S_OK, "SubmitSourceBuffer failed: %08x\n", hr);
|
||||
+
|
||||
+ if(xaudio27){
|
||||
+ IXAudio27SourceVoice_DestroyVoice((IXAudio27SourceVoice*)src);
|
||||
+ }else{
|
||||
+ IXAudio2SourceVoice_DestroyVoice(src);
|
||||
+ }
|
||||
+ IXAudio2MasteringVoice_DestroyVoice(master);
|
||||
+
|
||||
+ HeapFree(GetProcessHeap(), 0, (void*)buf.pAudioData);
|
||||
+}
|
||||
+
|
||||
static UINT32 test_DeviceDetails(IXAudio27 *xa)
|
||||
{
|
||||
HRESULT hr;
|
||||
@@ -1136,6 +1212,7 @@ START_TEST(xaudio2)
|
||||
test_buffer_callbacks((IXAudio2*)xa27);
|
||||
test_looping((IXAudio2*)xa27);
|
||||
test_submix((IXAudio2*)xa27);
|
||||
+ test_flush((IXAudio2*)xa27);
|
||||
}else
|
||||
skip("No audio devices available\n");
|
||||
|
||||
@@ -1159,6 +1236,7 @@ START_TEST(xaudio2)
|
||||
test_buffer_callbacks(xa);
|
||||
test_looping(xa);
|
||||
test_submix(xa);
|
||||
+ test_flush(xa);
|
||||
}else
|
||||
skip("No audio devices available\n");
|
||||
|
||||
diff --git a/dlls/xaudio2_7/xaudio_dll.c b/dlls/xaudio2_7/xaudio_dll.c
|
||||
index b2a5e3b..8465a67 100644
|
||||
--- a/dlls/xaudio2_7/xaudio_dll.c
|
||||
+++ b/dlls/xaudio2_7/xaudio_dll.c
|
||||
@@ -414,6 +414,7 @@ static void WINAPI XA2SRC_DestroyVoice(IXAudio2SourceVoice *iface)
|
||||
This->nbufs = 0;
|
||||
This->first_buf = 0;
|
||||
This->cur_buf = 0;
|
||||
+ This->abandoned_albufs = 0;
|
||||
|
||||
LeaveCriticalSection(&This->lock);
|
||||
}
|
||||
@@ -438,11 +439,17 @@ static HRESULT WINAPI XA2SRC_Stop(IXAudio2SourceVoice *iface, UINT32 Flags,
|
||||
UINT32 OperationSet)
|
||||
{
|
||||
XA2SourceImpl *This = impl_from_IXAudio2SourceVoice(iface);
|
||||
+ ALint bufs;
|
||||
|
||||
TRACE("%p, 0x%x, 0x%x\n", This, Flags, OperationSet);
|
||||
|
||||
+ palcSetThreadContext(This->xa2->al_ctx);
|
||||
+
|
||||
EnterCriticalSection(&This->lock);
|
||||
|
||||
+ alGetSourcei(This->al_src, AL_BUFFERS_QUEUED, &bufs);
|
||||
+ This->abandoned_albufs = bufs;
|
||||
+
|
||||
This->running = FALSE;
|
||||
|
||||
LeaveCriticalSection(&This->lock);
|
||||
@@ -2252,10 +2259,24 @@ static void update_source_state(XA2SourceImpl *src)
|
||||
|
||||
alGetSourcei(src->al_src, AL_BUFFERS_PROCESSED, &processed);
|
||||
|
||||
+ if(processed > 0 && src->abandoned_albufs > 0)
|
||||
+ {
|
||||
+ ALuint al_buffers[XAUDIO2_MAX_QUEUED_BUFFERS];
|
||||
+ ALint abandoned = min(processed, src->abandoned_albufs);
|
||||
+
|
||||
+ alSourceUnqueueBuffers(src->al_src, abandoned, al_buffers);
|
||||
+ src->abandoned_albufs -= abandoned;
|
||||
+ processed -= abandoned;
|
||||
+ }
|
||||
+
|
||||
+ if(!src->running)
|
||||
+ return;
|
||||
+
|
||||
if(processed > 0){
|
||||
ALuint al_buffers[XAUDIO2_MAX_QUEUED_BUFFERS];
|
||||
|
||||
alSourceUnqueueBuffers(src->al_src, processed, al_buffers);
|
||||
+
|
||||
src->first_al_buf += processed;
|
||||
src->first_al_buf %= XAUDIO2_MAX_QUEUED_BUFFERS;
|
||||
src->al_bufs_used -= processed;
|
||||
@@ -2367,12 +2388,12 @@ static void do_engine_tick(IXAudio2Impl *This)
|
||||
|
||||
EnterCriticalSection(&src->lock);
|
||||
|
||||
- if(!src->in_use || !src->running){
|
||||
+ if(!src->in_use){
|
||||
LeaveCriticalSection(&src->lock);
|
||||
continue;
|
||||
}
|
||||
|
||||
- if(src->cb){
|
||||
+ if(src->cb && This->running){
|
||||
#if XAUDIO2_VER == 0
|
||||
IXAudio20VoiceCallback_OnVoiceProcessingPassStart((IXAudio20VoiceCallback*)src->cb);
|
||||
#else
|
||||
@@ -2386,12 +2407,14 @@ static void do_engine_tick(IXAudio2Impl *This)
|
||||
|
||||
update_source_state(src);
|
||||
|
||||
- alGetSourcei(src->al_src, AL_SOURCE_STATE, &st);
|
||||
- if(st != AL_PLAYING)
|
||||
- alSourcePlay(src->al_src);
|
||||
+ if(This->running){
|
||||
+ alGetSourcei(src->al_src, AL_SOURCE_STATE, &st);
|
||||
+ if(st != AL_PLAYING)
|
||||
+ alSourcePlay(src->al_src);
|
||||
|
||||
- if(src->cb)
|
||||
- IXAudio2VoiceCallback_OnVoiceProcessingPassEnd(src->cb);
|
||||
+ if(src->cb)
|
||||
+ IXAudio2VoiceCallback_OnVoiceProcessingPassEnd(src->cb);
|
||||
+ }
|
||||
|
||||
LeaveCriticalSection(&src->lock);
|
||||
}
|
||||
diff --git a/dlls/xaudio2_7/xaudio_private.h b/dlls/xaudio2_7/xaudio_private.h
|
||||
index f28a0ae..1a4aa08 100644
|
||||
--- a/dlls/xaudio2_7/xaudio_private.h
|
||||
+++ b/dlls/xaudio2_7/xaudio_private.h
|
||||
@@ -81,7 +81,7 @@ typedef struct _XA2SourceImpl {
|
||||
/* most cases will only need about 4 AL buffers, but some corner cases
|
||||
* could require up to MAX_QUEUED_BUFFERS */
|
||||
ALuint al_bufs[XAUDIO2_MAX_QUEUED_BUFFERS];
|
||||
- DWORD first_al_buf, al_bufs_used;
|
||||
+ DWORD first_al_buf, al_bufs_used, abandoned_albufs;
|
||||
|
||||
struct list entry;
|
||||
} XA2SourceImpl;
|
||||
--
|
||||
2.9.0
|
||||
|
@ -1,2 +0,0 @@
|
||||
# Fixes: [40963] Ignore queued xaudio2 AL buffers after Stop
|
||||
Disabled: true
|
Loading…
Reference in New Issue
Block a user