Compare commits

...

37 Commits
v2.7 ... v2.8

Author SHA1 Message Date
Sebastian Lackner
20d1f21514 Release 2.8. 2017-05-16 14:17:16 +02:00
Sebastian Lackner
7ad2ee4c60 winebuild-Fake_Dlls: Avoid conflict with 16-bit code. 2017-05-16 04:52:55 +02:00
Sebastian Lackner
d00088e0fa winebuild-Fake_Dlls: Try to fix build failure on OSX. 2017-05-16 03:25:43 +02:00
Sebastian Lackner
633cceca94 user32-GetAutoRotationState: Remove definition file. 2017-05-16 01:31:39 +02:00
Sebastian Lackner
46006c692a Rename windowscodecs-Metadata -> windowscodecs-MetadataQueryParser. 2017-05-16 00:26:55 +02:00
Sebastian Lackner
d56994dbfa Added patches with multiple improvements for propsys functions. 2017-05-16 00:22:58 +02:00
Sebastian Lackner
5e70613512 Added patch to implement a basic security property tab. 2017-05-15 22:51:33 +02:00
Sebastian Lackner
6a14f80fdc Added patch with various improvements for fake dlls. 2017-05-15 21:07:42 +02:00
Sebastian Lackner
5d38a0fed0 ntdll-User_Shared_Data: Fix test failures on WinXP. 2017-05-14 00:48:30 +02:00
Sebastian Lackner
8748402001 Rebase against 4eaaf06ce4e5d7424eec2cf303c8256610544b39. 2017-05-13 01:14:10 +02:00
Sebastian Lackner
171d05fffe wined3d-CSMT_Main: Get rid of unnecessary wait. 2017-05-12 03:47:26 +02:00
Sebastian Lackner
975205155e Rebase against b77688102a84e1c7b7278340c46f53db3e1cda00. 2017-05-12 00:36:30 +02:00
Sebastian Lackner
d6c145fbf5 server-Debug_Registers: Remove bug reference.
The issue is mentioned in bug 32515, but Steam cache
validation still fails with this patch applied.
2017-05-11 03:36:48 +02:00
Sebastian Lackner
3207980517 Rebase against 0647abc5071913506e681bfc5239f9a6078dca54. 2017-05-11 01:46:17 +02:00
Sebastian Lackner
1bbe50aae8 Rebase against 8ef79b023a06f00ca6ab37afb8089d358b277d73. 2017-05-10 03:29:09 +02:00
Sebastian Lackner
bb180d38cc d3d11-Deferred_Context: Merge two patches. 2017-05-09 19:55:51 +02:00
Sebastian Lackner
c542f2432d Rebase against b6a4b2f593503a105dde01e7bd11ffdde243117a. 2017-05-09 05:33:36 +02:00
Sebastian Lackner
a36a97233a wined3d-CSMT_Main: Merge two patches. 2017-05-08 13:07:44 +02:00
Sebastian Lackner
f8e955a95a ntdll-User_Shared_Data: Add a missing CDECL. 2017-05-06 20:14:20 +02:00
Sebastian Lackner
d966bece72 Added patch to implement some additional windowscodecs metadata functions. 2017-05-06 17:04:02 +02:00
Sebastian Lackner
1447b56eeb Added patch to reset debug registers when creating threads. 2017-05-06 02:13:58 +02:00
Sebastian Lackner
afe018692b Added patch to fix some test failures in d3dx9_36/math tests. 2017-05-06 02:08:18 +02:00
Sebastian Lackner
52b5c90303 Rebase against 9f55292085392579568ff81b8adb926b32a8d99a. 2017-05-06 02:06:45 +02:00
Sebastian Lackner
4a4ebec642 dxva2-Video_Decoder: Remove dependency on winecfg-Staging patchset. 2017-05-05 20:34:33 +02:00
Sebastian Lackner
35ea3890a7 Add a separate script to plot patchset dependency graph. 2017-05-05 20:33:54 +02:00
Sebastian Lackner
26438ad74c Added patch to update user_shared_data timers. 2017-05-05 13:37:34 +02:00
Sebastian Lackner
31212d2845 Rebase against 10db51d5c26f0a71956989ecff83da90f4d94fda. 2017-05-05 02:26:52 +02:00
Sebastian Lackner
a08b6b2b62 Added patch for initial implementation of advapi32.BuildSecurityDescriptorW. 2017-05-05 00:25:14 +02:00
Sebastian Lackner
9985fe9035 Added patch to implement TokenIntegrityLevel stub in NtSetInformationToken. 2017-05-04 21:31:38 +02:00
Sebastian Lackner
3aa965e97f Added patch to implement TokenLogonSid stub in NtQueryInformationToken. 2017-05-04 21:27:41 +02:00
Sebastian Lackner
2e479e0954 Added patch to implement semi-stub for ntdll.NtCreateThreadEx. 2017-05-04 21:24:17 +02:00
Sebastian Lackner
9fe12a2175 Added patch to avoid crash if context_reacquire is called with NULL context. 2017-05-04 02:56:03 +02:00
Sebastian Lackner
d7c0a975ea Rebase against 8753a1b271795d2f977b41a814de7e4ace780d2e. 2017-05-04 02:13:14 +02:00
Sebastian Lackner
eb4a245bbb Rebase against b1203af6ba44ff8858ee9ca50fc05f4f3f633892. 2017-05-03 05:45:47 +02:00
Sebastian Lackner
5282f297be bcrypt-Improvements: Fix BCryptEncrypt with AES_GCM and no input and no output. 2017-05-02 18:36:51 +02:00
Sebastian Lackner
1446da2c50 fonts-Tahoma: Regenerate tahoma.ttf with ancient fontconfig.
To keep the changes small and to ensure the resulting TTF file
is better compatible with Windows.
2017-05-02 18:36:25 +02:00
Sebastian Lackner
2db34eca39 Rebase against 7cd7f14696dc3fb7aa41ef253ad144d458304a28. 2017-05-02 12:57:50 +02:00
88 changed files with 6883 additions and 3072 deletions

View File

@@ -0,0 +1,268 @@
From 994fe46f1b68d851d285a29cce904bd9f22540ea 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.
---
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
--- 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);
+static DWORD trustee_to_sid(DWORD nDestinationSidLength, PSID pDestinationSid, PTRUSTEEW pTrustee);
typedef struct _ACEFLAG
{
@@ -1264,16 +1265,122 @@ DWORD WINAPI BuildSecurityDescriptorW(
IN ULONG cCountOfAccessEntries,
IN PEXPLICIT_ACCESSW pListOfAccessEntries,
IN ULONG cCountOfAuditEntries,
- IN PEXPLICIT_ACCESSW pListofAuditEntries,
+ IN PEXPLICIT_ACCESSW pListOfAuditEntries,
IN PSECURITY_DESCRIPTOR pOldSD,
IN OUT PULONG lpdwBufferLength,
OUT PSECURITY_DESCRIPTOR* pNewSD)
{
- FIXME("(%p,%p,%d,%p,%d,%p,%p,%p,%p) stub!\n",pOwner,pGroup,
- cCountOfAccessEntries,pListOfAccessEntries,cCountOfAuditEntries,
- pListofAuditEntries,pOldSD,lpdwBufferLength,pNewSD);
+ SECURITY_DESCRIPTOR desc;
+ NTSTATUS status;
+ DWORD ret = ERROR_SUCCESS;
+
+ TRACE("(%p,%p,%d,%p,%d,%p,%p,%p,%p)\n", pOwner, pGroup,
+ cCountOfAccessEntries, pListOfAccessEntries, cCountOfAuditEntries,
+ pListOfAuditEntries, pOldSD, lpdwBufferLength, pNewSD);
- return ERROR_CALL_NOT_IMPLEMENTED;
+ if (pOldSD)
+ {
+ SECURITY_DESCRIPTOR_CONTROL control;
+ DWORD desc_size, dacl_size = 0, sacl_size = 0, owner_size = 0, group_size = 0;
+ PACL dacl = NULL, sacl = NULL;
+ PSID owner = NULL, group = NULL;
+ DWORD revision;
+
+ if ((status = RtlGetControlSecurityDescriptor( pOldSD, &control, &revision )) != STATUS_SUCCESS)
+ return RtlNtStatusToDosError( status );
+ if (!(control & SE_SELF_RELATIVE))
+ return ERROR_INVALID_SECURITY_DESCR;
+
+ desc_size = sizeof(desc);
+ status = RtlSelfRelativeToAbsoluteSD( pOldSD, &desc, &desc_size, dacl, &dacl_size, sacl, &sacl_size,
+ owner, &owner_size, group, &group_size );
+ if (status == STATUS_BUFFER_TOO_SMALL)
+ {
+ if (dacl_size)
+ dacl = LocalAlloc( LMEM_FIXED, dacl_size );
+ if (sacl_size)
+ sacl = LocalAlloc( LMEM_FIXED, sacl_size );
+ if (owner_size)
+ owner = LocalAlloc( LMEM_FIXED, owner_size );
+ if (group_size)
+ group = LocalAlloc( LMEM_FIXED, group_size );
+
+ desc_size = sizeof(desc);
+ status = RtlSelfRelativeToAbsoluteSD( pOldSD, &desc, &desc_size, dacl, &dacl_size, sacl, &sacl_size,
+ owner, &owner_size, group, &group_size );
+ }
+ if (status != STATUS_SUCCESS)
+ {
+ LocalFree( dacl );
+ LocalFree( sacl );
+ LocalFree( owner );
+ LocalFree( group );
+ return RtlNtStatusToDosError( status );
+ }
+ }
+ else
+ {
+ if ((status = RtlCreateSecurityDescriptor( &desc, SECURITY_DESCRIPTOR_REVISION )) != STATUS_SUCCESS)
+ return RtlNtStatusToDosError( status );
+ }
+
+ if (pOwner)
+ {
+ LocalFree( desc.Owner );
+ desc.Owner = LocalAlloc( LMEM_FIXED, sizeof(MAX_SID) );
+ if ((ret = trustee_to_sid( sizeof(MAX_SID), desc.Owner, pOwner )))
+ goto done;
+ }
+
+ if (pGroup)
+ {
+ LocalFree( desc.Group );
+ desc.Group = LocalAlloc( LMEM_FIXED, sizeof(MAX_SID) );
+ if ((ret = trustee_to_sid( sizeof(MAX_SID), desc.Group, pGroup )))
+ goto done;
+ }
+
+ if (pListOfAccessEntries)
+ {
+ PACL new_dacl;
+
+ if ((ret = SetEntriesInAclW( cCountOfAccessEntries, pListOfAccessEntries, desc.Dacl, &new_dacl )))
+ goto done;
+
+ LocalFree( desc.Dacl );
+ desc.Dacl = new_dacl;
+ desc.Control |= SE_DACL_PRESENT;
+ }
+
+ if (pListOfAuditEntries)
+ {
+ PACL new_sacl;
+
+ if ((ret = SetEntriesInAclW( cCountOfAuditEntries, pListOfAuditEntries, desc.Sacl, &new_sacl )))
+ goto done;
+
+ LocalFree( desc.Sacl );
+ desc.Sacl = new_sacl;
+ desc.Control |= SE_SACL_PRESENT;
+ }
+
+ *lpdwBufferLength = RtlLengthSecurityDescriptor( &desc );
+ *pNewSD = LocalAlloc( LMEM_FIXED, *lpdwBufferLength );
+
+ if ((status = RtlMakeSelfRelativeSD( &desc, *pNewSD, lpdwBufferLength )) != STATUS_SUCCESS)
+ {
+ ret = RtlNtStatusToDosError( status );
+ LocalFree( *pNewSD );
+ *pNewSD = NULL;
+ }
+
+done:
+ /* free absolute descriptor */
+ LocalFree( desc.Owner );
+ LocalFree( desc.Group );
+ LocalFree( desc.Sacl );
+ LocalFree( desc.Dacl );
+ return ret;
}
/******************************************************************************
@@ -3766,6 +3873,56 @@ static void free_trustee_name(TRUSTEE_FORM form, WCHAR *trustee_nameW)
}
}
+static DWORD trustee_to_sid( DWORD nDestinationSidLength, PSID pDestinationSid, PTRUSTEEW pTrustee )
+{
+ if (pTrustee->MultipleTrusteeOperation == TRUSTEE_IS_IMPERSONATE)
+ {
+ WARN("bad multiple trustee operation %d\n", pTrustee->MultipleTrusteeOperation);
+ return ERROR_INVALID_PARAMETER;
+ }
+
+ switch (pTrustee->TrusteeForm)
+ {
+ case TRUSTEE_IS_SID:
+ if (!CopySid(nDestinationSidLength, pDestinationSid, pTrustee->ptstrName))
+ {
+ WARN("bad sid %p\n", pTrustee->ptstrName);
+ return ERROR_INVALID_PARAMETER;
+ }
+ break;
+ case TRUSTEE_IS_NAME:
+ {
+ DWORD sid_size = nDestinationSidLength;
+ DWORD domain_size = MAX_COMPUTERNAME_LENGTH + 1;
+ SID_NAME_USE use;
+ if (!strcmpW( pTrustee->ptstrName, CURRENT_USER ))
+ {
+ if (!lookup_user_account_name( pDestinationSid, &sid_size, NULL, &domain_size, &use ))
+ {
+ return GetLastError();
+ }
+ }
+ else if (!LookupAccountNameW(NULL, pTrustee->ptstrName, pDestinationSid, &sid_size, NULL, &domain_size, &use))
+ {
+ WARN("bad user name %s\n", debugstr_w(pTrustee->ptstrName));
+ return ERROR_INVALID_PARAMETER;
+ }
+ break;
+ }
+ case TRUSTEE_IS_OBJECTS_AND_SID:
+ FIXME("TRUSTEE_IS_OBJECTS_AND_SID unimplemented\n");
+ break;
+ case TRUSTEE_IS_OBJECTS_AND_NAME:
+ FIXME("TRUSTEE_IS_OBJECTS_AND_NAME unimplemented\n");
+ break;
+ default:
+ WARN("bad trustee form %d\n", pTrustee->TrusteeForm);
+ return ERROR_INVALID_PARAMETER;
+ }
+
+ return ERROR_SUCCESS;
+}
+
/******************************************************************************
* SetEntriesInAclA [ADVAPI32.@]
*/
@@ -3861,56 +4018,9 @@ DWORD WINAPI SetEntriesInAclW( ULONG count, PEXPLICIT_ACCESSW pEntries,
pEntries[i].Trustee.TrusteeForm, pEntries[i].Trustee.TrusteeType,
pEntries[i].Trustee.ptstrName);
- if (pEntries[i].Trustee.MultipleTrusteeOperation == TRUSTEE_IS_IMPERSONATE)
- {
- WARN("bad multiple trustee operation %d for trustee %d\n", pEntries[i].Trustee.MultipleTrusteeOperation, i);
- ret = ERROR_INVALID_PARAMETER;
- goto exit;
- }
-
- switch (pEntries[i].Trustee.TrusteeForm)
- {
- case TRUSTEE_IS_SID:
- if (!CopySid(FIELD_OFFSET(SID, SubAuthority[SID_MAX_SUB_AUTHORITIES]),
- ppsid[i], pEntries[i].Trustee.ptstrName))
- {
- WARN("bad sid %p for trustee %d\n", pEntries[i].Trustee.ptstrName, i);
- ret = ERROR_INVALID_PARAMETER;
- goto exit;
- }
- break;
- case TRUSTEE_IS_NAME:
- {
- DWORD sid_size = FIELD_OFFSET(SID, SubAuthority[SID_MAX_SUB_AUTHORITIES]);
- DWORD domain_size = MAX_COMPUTERNAME_LENGTH + 1;
- SID_NAME_USE use;
- if (!strcmpW( pEntries[i].Trustee.ptstrName, CURRENT_USER ))
- {
- if (!lookup_user_account_name( ppsid[i], &sid_size, NULL, &domain_size, &use ))
- {
- ret = GetLastError();
- goto exit;
- }
- }
- else if (!LookupAccountNameW(NULL, pEntries[i].Trustee.ptstrName, ppsid[i], &sid_size, NULL, &domain_size, &use))
- {
- WARN("bad user name %s for trustee %d\n", debugstr_w(pEntries[i].Trustee.ptstrName), i);
- ret = ERROR_INVALID_PARAMETER;
- goto exit;
- }
- break;
- }
- case TRUSTEE_IS_OBJECTS_AND_SID:
- FIXME("TRUSTEE_IS_OBJECTS_AND_SID unimplemented\n");
- break;
- case TRUSTEE_IS_OBJECTS_AND_NAME:
- FIXME("TRUSTEE_IS_OBJECTS_AND_NAME unimplemented\n");
- break;
- default:
- WARN("bad trustee form %d for trustee %d\n", pEntries[i].Trustee.TrusteeForm, i);
- ret = ERROR_INVALID_PARAMETER;
+ ret = trustee_to_sid( FIELD_OFFSET(SID, SubAuthority[SID_MAX_SUB_AUTHORITIES]), ppsid[i], &pEntries[i].Trustee);
+ if (ret)
goto exit;
- }
/* Note: we overestimate the ACL size here as a tradeoff between
* instructions (simplicity) and memory */
--
2.12.2

View File

@@ -0,0 +1,69 @@
From 63082c3863d8be466ed14f532653ddf35e40328a Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Fri, 5 May 2017 00:18:50 +0200
Subject: advapi32/tests: Add basic tests for BuildSecurityDescriptor.
---
dlls/advapi32/tests/security.c | 39 +++++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c
index d6ea3a19fad..c591f7b6e5f 100644
--- a/dlls/advapi32/tests/security.c
+++ b/dlls/advapi32/tests/security.c
@@ -7489,6 +7489,44 @@ static void test_child_token_sd(void)
HeapFree(GetProcessHeap(), 0, sd);
}
+static void test_BuildSecurityDescriptorW(void)
+{
+ SECURITY_DESCRIPTOR old_sd, *new_sd, *rel_sd;
+ ULONG new_sd_size;
+ DWORD buf_size;
+ char buf[1024];
+ BOOL success;
+ DWORD ret;
+
+ InitializeSecurityDescriptor(&old_sd, SECURITY_DESCRIPTOR_REVISION);
+
+ buf_size = sizeof(buf);
+ rel_sd = (SECURITY_DESCRIPTOR *)buf;
+ success = MakeSelfRelativeSD(&old_sd, rel_sd, &buf_size);
+ ok(success, "MakeSelfRelativeSD failed with %u\n", GetLastError());
+
+ new_sd = NULL;
+ new_sd_size = 0;
+ ret = BuildSecurityDescriptorW(NULL, NULL, 0, NULL, 0, NULL, NULL, &new_sd_size, (void **)&new_sd);
+ ok(ret == ERROR_SUCCESS, "BuildSecurityDescriptor failed with %u\n", ret);
+ ok(new_sd != NULL, "expected new_sd != NULL\n");
+ ok(new_sd_size == sizeof(old_sd), "expected new_sd_size == sizeof(old_sd), got %u\n", new_sd_size);
+ LocalFree(new_sd);
+
+ new_sd = (void *)0xdeadbeef;
+ ret = BuildSecurityDescriptorW(NULL, NULL, 0, NULL, 0, NULL, &old_sd, &new_sd_size, (void **)&new_sd);
+ ok(ret == ERROR_INVALID_SECURITY_DESCR, "expected ERROR_INVALID_SECURITY_DESCR, got %u\n", ret);
+ ok(new_sd == (void *)0xdeadbeef, "expected new_sd == 0xdeadbeef, got %p\n", new_sd);
+
+ new_sd = NULL;
+ new_sd_size = 0;
+ ret = BuildSecurityDescriptorW(NULL, NULL, 0, NULL, 0, NULL, rel_sd, &new_sd_size, (void **)&new_sd);
+ ok(ret == ERROR_SUCCESS, "BuildSecurityDescriptor failed with %u\n", ret);
+ ok(new_sd != NULL, "expected new_sd != NULL\n");
+ ok(new_sd_size == sizeof(old_sd), "expected new_sd_size == sizeof(old_sd), got %u\n", new_sd_size);
+ LocalFree(new_sd);
+}
+
START_TEST(security)
{
init();
@@ -7542,6 +7580,7 @@ START_TEST(security)
test_pseudo_tokens();
test_maximum_allowed();
test_GetExplicitEntriesFromAclW();
+ test_BuildSecurityDescriptorW();
/* must be the last test, modifies process token */
test_token_security_descriptor();
--
2.12.2

View File

@@ -0,0 +1,2 @@
Fixes: Initial implementation of advapi32.BuildSecurityDescriptorW
Depends: server-LABEL_SECURITY_INFORMATION

View File

@@ -1,4 +1,4 @@
From 08231829bbfa686e537a0c94f3aa4ede92a7817b Mon Sep 17 00:00:00 2001
From 23e58d6cb2f258da259a1efce72fd2e1d58a530b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sun, 17 Jan 2016 17:12:45 +0100
Subject: ext-ms-win-appmodel-usercontext-l1-1-0: Add dll and add stub for
@@ -15,20 +15,20 @@ Subject: ext-ms-win-appmodel-usercontext-l1-1-0: Add dll and add stub for
create mode 100644 dlls/ext-ms-win-appmodel-usercontext-l1-1-0/main.c
diff --git a/configure.ac b/configure.ac
index bdd390c..6264ede 100644
index 1d1846dbb7..e9cf69d3fe 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3020,6 +3020,7 @@ WINE_CONFIG_DLL(esent)
@@ -3045,6 +3045,7 @@ WINE_CONFIG_DLL(esent)
WINE_CONFIG_DLL(evr)
WINE_CONFIG_DLL(explorerframe,,[clean])
WINE_CONFIG_TEST(dlls/explorerframe/tests)
+WINE_CONFIG_DLL(ext-ms-win-appmodel-usercontext-l1-1-0)
WINE_CONFIG_DLL(ext-ms-win-authz-context-l1-1-0)
WINE_CONFIG_DLL(ext-ms-win-domainjoin-netjoin-l1-1-0)
WINE_CONFIG_DLL(ext-ms-win-gdi-dc-create-l1-1-1)
WINE_CONFIG_DLL(ext-ms-win-gdi-dc-l1-2-0)
diff --git a/dlls/ext-ms-win-appmodel-usercontext-l1-1-0/Makefile.in b/dlls/ext-ms-win-appmodel-usercontext-l1-1-0/Makefile.in
new file mode 100644
index 0000000..16eee75
index 0000000000..16eee7588f
--- /dev/null
+++ b/dlls/ext-ms-win-appmodel-usercontext-l1-1-0/Makefile.in
@@ -0,0 +1,4 @@
@@ -38,7 +38,7 @@ index 0000000..16eee75
+ main.c
diff --git a/dlls/ext-ms-win-appmodel-usercontext-l1-1-0/ext-ms-win-appmodel-usercontext-l1-1-0.spec b/dlls/ext-ms-win-appmodel-usercontext-l1-1-0/ext-ms-win-appmodel-usercontext-l1-1-0.spec
new file mode 100644
index 0000000..7642d15
index 0000000000..7642d156c9
--- /dev/null
+++ b/dlls/ext-ms-win-appmodel-usercontext-l1-1-0/ext-ms-win-appmodel-usercontext-l1-1-0.spec
@@ -0,0 +1,3 @@
@@ -47,7 +47,7 @@ index 0000000..7642d15
+@ stub UserContextExtSetToken
diff --git a/dlls/ext-ms-win-appmodel-usercontext-l1-1-0/main.c b/dlls/ext-ms-win-appmodel-usercontext-l1-1-0/main.c
new file mode 100644
index 0000000..7a9e75f
index 0000000000..7a9e75f710
--- /dev/null
+++ b/dlls/ext-ms-win-appmodel-usercontext-l1-1-0/main.c
@@ -0,0 +1,35 @@
@@ -87,5 +87,5 @@ index 0000000..7a9e75f
+ return S_OK;
+}
--
2.9.0
2.12.2

View File

@@ -0,0 +1,63 @@
From 9d4cfb266667d09430c5036ef127d30d5ac5ffbe Mon Sep 17 00:00:00 2001
From: Andrew Wesie <awesie@gmail.com>
Date: Mon, 1 May 2017 22:57:43 -0500
Subject: bcrypt: Fix BCryptEncrypt with AES_GCM and no input and no output.
Signed-off-by: Andrew Wesie <awesie@gmail.com>
---
dlls/bcrypt/bcrypt_main.c | 2 +-
dlls/bcrypt/tests/bcrypt.c | 18 ++++++++++++++++++
2 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/dlls/bcrypt/bcrypt_main.c b/dlls/bcrypt/bcrypt_main.c
index c25f1d1e99..d269083eca 100644
--- a/dlls/bcrypt/bcrypt_main.c
+++ b/dlls/bcrypt/bcrypt_main.c
@@ -1185,7 +1185,7 @@ NTSTATUS WINAPI BCryptEncrypt( BCRYPT_KEY_HANDLE handle, UCHAR *input, ULONG inp
*ret_len = input_len;
if (flags & BCRYPT_BLOCK_PADDING) return STATUS_INVALID_PARAMETER;
- if (!output) return STATUS_SUCCESS;
+ if (input && !output) return STATUS_SUCCESS;
if (output_len < *ret_len) return STATUS_BUFFER_TOO_SMALL;
if (auth_info->pbAuthData && (status = key_set_auth_data( key, auth_info->pbAuthData, auth_info->cbAuthData )))
diff --git a/dlls/bcrypt/tests/bcrypt.c b/dlls/bcrypt/tests/bcrypt.c
index 7f01529b3b..9f34a54978 100644
--- a/dlls/bcrypt/tests/bcrypt.c
+++ b/dlls/bcrypt/tests/bcrypt.c
@@ -913,6 +913,9 @@ static void test_BCryptEncrypt(void)
{0x9a,0x92,0x32,0x2c,0x61,0x2a,0xae,0xef,0x66,0x2a,0xfb,0x55,0xe9,0x48,0xdf,0xbd};
static UCHAR expected_tag3[] =
{0x17,0x9d,0xc0,0x7a,0xf0,0xcf,0xaa,0xd5,0x1c,0x11,0xc4,0x4b,0xd6,0xa3,0x3e,0x77};
+ static UCHAR expected_tag4[] =
+ {0x4c,0x42,0x83,0x9e,0x8d,0x40,0xf1,0x19,0xd6,0x2b,0x1c,0x66,0x03,0x2b,0x39,0x63};
+
BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO auth_info;
UCHAR *buf, ciphertext[48], ivbuf[16], tag[16];
BCRYPT_AUTH_TAG_LENGTHS_STRUCT tag_length;
@@ -1104,6 +1107,21 @@ static void test_BCryptEncrypt(void)
for (i = 0; i < 16; i++)
ok(tag[i] == expected_tag3[i], "%u: %02x != %02x\n", i, tag[i], expected_tag3[i]);
+ memset(tag, 0xff, sizeof(tag));
+ ret = pBCryptEncrypt(key, data2, 0, &auth_info, ivbuf, 16, NULL, 0, &size, 0);
+ ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
+ ok(size == 0, "got %u\n", size);
+ for (i = 0; i < 16; i++)
+ ok(tag[i] == 0xff, "%u: %02x != %02x\n", i, tag[i], 0xff);
+
+ memset(tag, 0xff, sizeof(tag));
+ ret = pBCryptEncrypt(key, NULL, 0, &auth_info, ivbuf, 16, NULL, 0, &size, 0);
+ ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
+ ok(size == 0, "got %u\n", size);
+ ok(!memcmp(tag, expected_tag4, sizeof(expected_tag4)), "wrong tag\n");
+ for (i = 0; i < 16; i++)
+ ok(tag[i] == expected_tag4[i], "%u: %02x != %02x\n", i, tag[i], expected_tag4[i]);
+
/* test with padding */
memcpy(ivbuf, iv, sizeof(iv));
memset(ciphertext, 0, sizeof(ciphertext));
--
2.12.2

View File

@@ -1,14 +1,14 @@
From 38079a15e97192b7f0f80b9317a47530d6430a5f Mon Sep 17 00:00:00 2001
From 05ef8f7024651411d386a6e60e9353feba472cd9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Thu, 19 Jan 2017 16:56:56 +0100
Subject: d3d11: Initial implementation for deferred contexts.
---
dlls/d3d11/device.c | 1075 +++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 1043 insertions(+), 32 deletions(-)
dlls/d3d11/device.c | 1071 +++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 1040 insertions(+), 31 deletions(-)
diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
index 366f330bf0..7aac903b54 100644
index 59b1bc864b..ec02ce6f20 100644
--- a/dlls/d3d11/device.c
+++ b/dlls/d3d11/device.c
@@ -19,12 +19,181 @@
@@ -747,16 +747,7 @@ index 366f330bf0..7aac903b54 100644
}
static void STDMETHODCALLTYPE d3d11_immediate_context_HSSetShaderResources(ID3D11DeviceContext *iface,
@@ -2260,7 +2964,7 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_CSGetConstantBuffers(ID3D1
static void STDMETHODCALLTYPE d3d11_immediate_context_ClearState(ID3D11DeviceContext *iface)
{
- FIXME("iface %p stub!\n", iface);
+ TRACE("iface %p stub!\n", iface);
}
static void STDMETHODCALLTYPE d3d11_immediate_context_Flush(ID3D11DeviceContext *iface)
@@ -2472,6 +3176,7 @@ static ULONG STDMETHODCALLTYPE d3d11_deferred_context_Release(ID3D11DeviceContex
@@ -2693,6 +3397,7 @@ static ULONG STDMETHODCALLTYPE d3d11_deferred_context_Release(ID3D11DeviceContex
if (!refcount)
{
@@ -764,7 +755,7 @@ index 366f330bf0..7aac903b54 100644
wined3d_private_store_cleanup(&context->private_store);
ID3D11Device_Release(context->device);
HeapFree(GetProcessHeap(), 0, context);
@@ -2523,43 +3228,86 @@ static HRESULT STDMETHODCALLTYPE d3d11_deferred_context_SetPrivateDataInterface(
@@ -2744,43 +3449,86 @@ static HRESULT STDMETHODCALLTYPE d3d11_deferred_context_SetPrivateDataInterface(
static void STDMETHODCALLTYPE d3d11_deferred_context_VSSetConstantBuffers(ID3D11DeviceContext *iface,
UINT start_slot, UINT buffer_count, ID3D11Buffer *const *buffers)
{
@@ -857,7 +848,7 @@ index 366f330bf0..7aac903b54 100644
}
static void STDMETHODCALLTYPE d3d11_deferred_context_Draw(ID3D11DeviceContext *iface,
@@ -2572,53 +3320,171 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_Draw(ID3D11DeviceContext *i
@@ -2793,53 +3541,169 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_Draw(ID3D11DeviceContext *i
static HRESULT STDMETHODCALLTYPE d3d11_deferred_context_Map(ID3D11DeviceContext *iface, ID3D11Resource *resource,
UINT subresource_idx, D3D11_MAP map_type, UINT map_flags, D3D11_MAPPED_SUBRESOURCE *mapped_subresource)
{
@@ -979,17 +970,15 @@ index 366f330bf0..7aac903b54 100644
+ call->vbuffer_info.num_buffers = buffer_count;
+
+ call->vbuffer_info.buffers = (void *)(call + 1);
+ call->vbuffer_info.strides = (void *)&call->vbuffer_info.buffers[buffer_count];
+ call->vbuffer_info.offsets = (void *)&call->vbuffer_info.strides[buffer_count];
+ for (i = 0; i < buffer_count; i++)
+ {
+ if (buffers[i]) ID3D11Buffer_AddRef(buffers[i]);
+ call->vbuffer_info.buffers[i] = buffers[i];
+ call->vbuffer_info.strides[i] = strides[i];
+ call->vbuffer_info.offsets[i] = offsets[i];
+ }
+
+ call->vbuffer_info.strides = (void *)((char *)call->vbuffer_info.buffers + buffer_count * sizeof(*buffers));
+ memcpy(call->vbuffer_info.strides, strides, sizeof(UINT) * buffer_count);
+
+ call->vbuffer_info.offsets = (void *)((char *)call->vbuffer_info.strides + buffer_count * sizeof(UINT));
+ memcpy(call->vbuffer_info.offsets, offsets, sizeof(UINT) * buffer_count);
}
static void STDMETHODCALLTYPE d3d11_deferred_context_IASetIndexBuffer(ID3D11DeviceContext *iface,
@@ -1038,7 +1027,7 @@ index 366f330bf0..7aac903b54 100644
}
static void STDMETHODCALLTYPE d3d11_deferred_context_DrawInstanced(ID3D11DeviceContext *iface,
@@ -2647,7 +3513,16 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_GSSetShader(ID3D11DeviceCon
@@ -2868,7 +3732,16 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_GSSetShader(ID3D11DeviceCon
static void STDMETHODCALLTYPE d3d11_deferred_context_IASetPrimitiveTopology(ID3D11DeviceContext *iface,
D3D11_PRIMITIVE_TOPOLOGY topology)
{
@@ -1056,7 +1045,7 @@ index 366f330bf0..7aac903b54 100644
}
static void STDMETHODCALLTYPE d3d11_deferred_context_VSSetShaderResources(ID3D11DeviceContext *iface,
@@ -2707,8 +3582,28 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_OMSetRenderTargets(ID3D11De
@@ -2928,8 +3801,28 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_OMSetRenderTargets(ID3D11De
UINT render_target_view_count, ID3D11RenderTargetView *const *render_target_views,
ID3D11DepthStencilView *depth_stencil_view)
{
@@ -1086,7 +1075,7 @@ index 366f330bf0..7aac903b54 100644
}
static void STDMETHODCALLTYPE d3d11_deferred_context_OMSetRenderTargetsAndUnorderedAccessViews(
@@ -2728,15 +3623,44 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_OMSetRenderTargetsAndUnorde
@@ -2949,15 +3842,44 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_OMSetRenderTargetsAndUnorde
static void STDMETHODCALLTYPE d3d11_deferred_context_OMSetBlendState(ID3D11DeviceContext *iface,
ID3D11BlendState *blend_state, const float blend_factor[4], UINT sample_mask)
{
@@ -1133,7 +1122,7 @@ index 366f330bf0..7aac903b54 100644
}
static void STDMETHODCALLTYPE d3d11_deferred_context_SOSetTargets(ID3D11DeviceContext *iface, UINT buffer_count,
@@ -2778,13 +3702,34 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_DispatchIndirect(ID3D11Devi
@@ -2999,13 +3921,34 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_DispatchIndirect(ID3D11Devi
static void STDMETHODCALLTYPE d3d11_deferred_context_RSSetState(ID3D11DeviceContext *iface,
ID3D11RasterizerState *rasterizer_state)
{
@@ -1170,7 +1159,7 @@ index 366f330bf0..7aac903b54 100644
}
static void STDMETHODCALLTYPE d3d11_deferred_context_RSSetScissorRects(ID3D11DeviceContext *iface,
@@ -2899,8 +3844,18 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_HSSetShaderResources(ID3D11
@@ -3120,8 +4063,18 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_HSSetShaderResources(ID3D11
static void STDMETHODCALLTYPE d3d11_deferred_context_HSSetShader(ID3D11DeviceContext *iface,
ID3D11HullShader *shader, ID3D11ClassInstance *const *class_instances, UINT class_instance_count)
{
@@ -1190,7 +1179,7 @@ index 366f330bf0..7aac903b54 100644
}
static void STDMETHODCALLTYPE d3d11_deferred_context_HSSetSamplers(ID3D11DeviceContext *iface,
@@ -2913,36 +3868,62 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_HSSetSamplers(ID3D11DeviceC
@@ -3134,36 +4087,62 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_HSSetSamplers(ID3D11DeviceC
static void STDMETHODCALLTYPE d3d11_deferred_context_HSSetConstantBuffers(ID3D11DeviceContext *iface,
UINT start_slot, UINT buffer_count, ID3D11Buffer *const *buffers)
{
@@ -1258,7 +1247,7 @@ index 366f330bf0..7aac903b54 100644
}
static void STDMETHODCALLTYPE d3d11_deferred_context_CSSetShaderResources(ID3D11DeviceContext *iface,
@@ -3243,7 +4224,15 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_CSGetConstantBuffers(ID3D11
@@ -3464,7 +4443,15 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_CSGetConstantBuffers(ID3D11
static void STDMETHODCALLTYPE d3d11_deferred_context_ClearState(ID3D11DeviceContext *iface)
{
@@ -1275,7 +1264,7 @@ index 366f330bf0..7aac903b54 100644
}
static void STDMETHODCALLTYPE d3d11_deferred_context_Flush(ID3D11DeviceContext *iface)
@@ -3268,9 +4257,29 @@ static UINT STDMETHODCALLTYPE d3d11_deferred_context_GetContextFlags(ID3D11Devic
@@ -3489,9 +4476,29 @@ static UINT STDMETHODCALLTYPE d3d11_deferred_context_GetContextFlags(ID3D11Devic
static HRESULT STDMETHODCALLTYPE d3d11_deferred_context_FinishCommandList(ID3D11DeviceContext *iface,
BOOL restore, ID3D11CommandList **command_list)
{
@@ -1307,7 +1296,7 @@ index 366f330bf0..7aac903b54 100644
}
static const struct ID3D11DeviceContextVtbl d3d11_deferred_context_vtbl =
@@ -4059,6 +5068,8 @@ static HRESULT STDMETHODCALLTYPE d3d11_device_CreateDeferredContext(ID3D11Device
@@ -4280,6 +5287,8 @@ static HRESULT STDMETHODCALLTYPE d3d11_device_CreateDeferredContext(ID3D11Device
object->device = iface;
object->refcount = 1;

View File

@@ -1,38 +0,0 @@
From a911b0d8c83dae701997bbbc476b55376727c647 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Tue, 24 Jan 2017 11:52:50 +0100
Subject: d3d11: Simplify d3d11_deferred_context_IASetVertexBuffers.
---
dlls/d3d11/device.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
index 83d97665ed5..7cd16c37470 100644
--- a/dlls/d3d11/device.c
+++ b/dlls/d3d11/device.c
@@ -3252,17 +3252,15 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_IASetVertexBuffers(ID3D11De
call->vbuffer_info.num_buffers = buffer_count;
call->vbuffer_info.buffers = (void *)(call + 1);
+ call->vbuffer_info.strides = (void *)&call->vbuffer_info.buffers[buffer_count];
+ call->vbuffer_info.offsets = (void *)&call->vbuffer_info.strides[buffer_count];
for (i = 0; i < buffer_count; i++)
{
if (buffers[i]) ID3D11Buffer_AddRef(buffers[i]);
call->vbuffer_info.buffers[i] = buffers[i];
+ call->vbuffer_info.strides[i] = strides[i];
+ call->vbuffer_info.offsets[i] = offsets[i];
}
-
- call->vbuffer_info.strides = (void *)((char *)call->vbuffer_info.buffers + buffer_count * sizeof(*buffers));
- memcpy(call->vbuffer_info.strides, strides, sizeof(UINT) * buffer_count);
-
- call->vbuffer_info.offsets = (void *)((char *)call->vbuffer_info.strides + buffer_count * sizeof(UINT));
- memcpy(call->vbuffer_info.offsets, offsets, sizeof(UINT) * buffer_count);
}
static void STDMETHODCALLTYPE d3d11_deferred_context_IASetIndexBuffer(ID3D11DeviceContext *iface,
--
2.11.0

View File

@@ -1,4 +1,4 @@
From 56e710b3d2b2631ee63eb1ed076a2a8af99352ad Mon Sep 17 00:00:00 2001
From d29f7e7f2e435ffee61f69eb488884b6d7043d0e Mon Sep 17 00:00:00 2001
From: Christian Costa <titan.costa@gmail.com>
Date: Fri, 19 Dec 2014 22:31:46 +0100
Subject: d3dx9_36: Implement ID3DXEffect_FindNextValidTechnique + add tests.
@@ -9,10 +9,10 @@ Subject: d3dx9_36: Implement ID3DXEffect_FindNextValidTechnique + add tests.
2 files changed, 91 insertions(+), 3 deletions(-)
diff --git a/dlls/d3dx9_36/effect.c b/dlls/d3dx9_36/effect.c
index 8dc4738360..47e79a689a 100644
index 864c3902fde..2de2058666a 100644
--- a/dlls/d3dx9_36/effect.c
+++ b/dlls/d3dx9_36/effect.c
@@ -3667,13 +3667,41 @@ static HRESULT WINAPI ID3DXEffectImpl_ValidateTechnique(ID3DXEffect* iface, D3DX
@@ -3891,13 +3891,41 @@ static HRESULT WINAPI ID3DXEffectImpl_ValidateTechnique(ID3DXEffect* iface, D3DX
return D3D_OK;
}
@@ -58,11 +58,11 @@ index 8dc4738360..47e79a689a 100644
static BOOL walk_parameter_dep(struct d3dx_parameter *param, walk_parameter_dep_func param_func,
diff --git a/dlls/d3dx9_36/tests/effect.c b/dlls/d3dx9_36/tests/effect.c
index b1f7f3ef26..95d29d0155 100644
index f3bc9e3c36a..6fb770eafcb 100644
--- a/dlls/d3dx9_36/tests/effect.c
+++ b/dlls/d3dx9_36/tests/effect.c
@@ -6111,6 +6111,65 @@ static void test_effect_shared_parameters(IDirect3DDevice9 *device)
ok(!refcount, "Effect pool was not properly freed, refcount %u.\n", refcount);
@@ -6290,6 +6290,65 @@ static void test_effect_get_pass_desc(IDirect3DDevice9 *device)
effect->lpVtbl->Release(effect);
}
+/*
@@ -127,10 +127,10 @@ index b1f7f3ef26..95d29d0155 100644
START_TEST(effect)
{
HWND wnd;
@@ -6160,6 +6219,7 @@ START_TEST(effect)
test_effect_state_manager(device);
test_cross_effect_handle(device);
@@ -6341,6 +6400,7 @@ START_TEST(effect)
test_effect_shared_parameters(device);
test_effect_large_address_aware_flag(device);
test_effect_get_pass_desc(device);
+ test_effect_technique_validation(device);
count = IDirect3DDevice9_Release(device);

View File

@@ -0,0 +1,52 @@
From 53da53661a5058d691c15d85328148f37b753769 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sat, 6 May 2017 01:32:51 +0200
Subject: d3dx9_36/tests: Fix some test failures.
---
dlls/d3dx9_36/tests/math.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/dlls/d3dx9_36/tests/math.c b/dlls/d3dx9_36/tests/math.c
index 5bbfb4980b..5fe65ac484 100644
--- a/dlls/d3dx9_36/tests/math.c
+++ b/dlls/d3dx9_36/tests/math.c
@@ -236,7 +236,7 @@ static void D3DXColorTest(void)
/*_______________D3DXColorLerp________________*/
expected.r = 0.32f; expected.g = 0.69f; expected.b = 0.356f; expected.a = 0.897f;
D3DXColorLerp(&got,&color,&color1,scale);
- expect_color(&expected, &got, 0);
+ expect_color(&expected, &got, 2);
/* Test the NULL case */
funcpointer = D3DXColorLerp(&got,NULL,&color1,scale);
ok(funcpointer == NULL, "Expected: %p, Got: %p\n", NULL, funcpointer);
@@ -306,7 +306,7 @@ static void D3DXFresnelTest(void)
BOOL equal;
fresnel = D3DXFresnelTerm(0.5f, 1.5f);
- equal = compare_float(fresnel, 8.91867056e-02f, 1);
+ equal = compare_float(fresnel, 8.91867056e-02f, 2);
ok(equal, "Got unexpected Fresnel term %.8e.\n", fresnel);
}
@@ -2955,7 +2955,7 @@ static void test_D3DXSHEvalDirectionalLight(void)
expected = j + test[l].boffset;
else
expected = test[l].blue_out[startindex + j];
- equal = compare_float(expected, blue_out[j], 4);
+ equal = compare_float(expected, blue_out[j], 8);
ok(equal, "Blue: case %u, order %u: expected[%u] = %.8e, received %.8e.\n",
l, order, j, expected, blue_out[j]);
}
@@ -3287,7 +3287,7 @@ static void test_D3DXSHMultiply3(void)
D3DXSHMultiply3(c, c, b);
for (i = 0; i < 20; i++)
{
- equal = compare_float(c[i], expected_aliased[i], 32);
+ equal = compare_float(c[i], expected_aliased[i], 64);
ok(equal, "Expected[%u] = %.8e, received = %.8e.\n", i, expected_aliased[i], c[i]);
}
}
--
2.12.2

View File

@@ -1,43 +0,0 @@
From 765b7ac424a30543d0ca6da8c217d8eb024b870b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Fri, 29 Apr 2016 16:39:50 +0200
Subject: dmusic: Implement IDirectMusicBuffer::PackStructured.
---
dlls/dmusic/buffer.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/dlls/dmusic/buffer.c b/dlls/dmusic/buffer.c
index bd0ad1a..5be2e0d 100644
--- a/dlls/dmusic/buffer.c
+++ b/dlls/dmusic/buffer.c
@@ -134,9 +134,26 @@ static HRESULT WINAPI IDirectMusicBufferImpl_PackStructured(LPDIRECTMUSICBUFFER
static HRESULT WINAPI IDirectMusicBufferImpl_PackUnstructured(LPDIRECTMUSICBUFFER iface, REFERENCE_TIME rt, DWORD dwChannelGroup, DWORD cb, LPBYTE lpb)
{
IDirectMusicBufferImpl *This = impl_from_IDirectMusicBuffer(iface);
+ DWORD new_write_pos = This->write_pos + sizeof(DMUS_EVENTHEADER) + cb;
+ DMUS_EVENTHEADER header;
FIXME("(%p, 0x%s, %d, %d, %p): stub\n", This, wine_dbgstr_longlong(rt), dwChannelGroup, cb, lpb);
+ if (new_write_pos > This->size)
+ return DMUS_E_BUFFER_FULL;
+
+ if (!This->write_pos)
+ This->start_time = rt;
+
+ header.cbEvent = cb;
+ header.dwChannelGroup = dwChannelGroup;
+ header.rtDelta = rt - This->start_time;
+ header.dwFlags = 0;
+
+ memcpy(This->data + This->write_pos, &header, sizeof(header));
+ memcpy(This->data + This->write_pos + sizeof(header), lpb, cb);
+ This->write_pos = new_write_pos;
+
return S_OK;
}
--
2.8.0

View File

@@ -1,4 +1,2 @@
Fixes: Support for MPEG2 DXVA2 GPU video decoding through vaapi
Fixes: Support for H264 DXVA2 GPU video decoding through vaapi
Depends: winecfg-Staging

View File

@@ -1,11 +1,11 @@
From 36981579fb5a781ed036dd769f9a1e1e878d76d6 Mon Sep 17 00:00:00 2001
From b2a608fbcfe62319959689f4c00479e76f60234e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Tue, 2 May 2017 01:38:43 +0200
Subject: fonts/tahoma.sfd: Add glyphs U+FB01 and U+FB02.
---
fonts/tahoma.sfd | 16 ++++++++++++++++
fonts/tahoma.ttf | Bin 143652 -> 144028 bytes
fonts/tahoma.ttf | Bin 143652 -> 143884 bytes
2 files changed, 16 insertions(+)
diff --git a/fonts/tahoma.sfd b/fonts/tahoma.sfd
@@ -57,275 +57,41 @@ index 3d6b44ee13..466f250496 100644
(`38QJ:N0#s+#WMJ:RY"
BDFChar: 306 279 8 0 6 0 11
diff --git a/fonts/tahoma.ttf b/fonts/tahoma.ttf
index 4f68d1edfa825a0b27e0f41932867b768157a7a7..39cd156e590a86b27d66c1abe026eefb569703c3 100644
index 4f68d1edfa825a0b27e0f41932867b768157a7a7..8bee8ad35c8e8b1f71b97c8117e1c57282b233ce 100644
GIT binary patch
delta 9261
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
D^h$Ea
delta 1779
zcmd6nO-NKx6vxlG+RQl3G^0+A<3}^2gN~-7_F;n&h2;k^l0pk{HqFqYFvTD@eK3|8
zfk8^pE6gwmDr_;;;sv_si!=~&B?&F0f^bn;gt`#w-1pA-1#QDS-1&2U=e+mMz5n~(
z{ZFQAUrc=-f6}qR7l5rnfZo}f>d?VqTRZ@`-~*_dsI5KP000Q0V(v-31(UxG_Mhl(
zMztBSYQ$wWfZ0&t*jM9ds<CUqZpQ@~sQsf@Y1i_`)p=tg|8@eW)7=&$SWLklVe>cM
ztL`z|wYaLs?ABxT?hINpd{!e^Q-VEau5x%JFs+n1JOIk@JWg)<K)t3ZT?^<=jan>-
z00oBt3_6Z$*lLxyG-nylXxL_xc<1kBY+pn-M%D5~{E-{$13^E4AxMT-q;VL7ae$=f
z@E#^fCtw;rlFq<S_(i&eh*Y0!$IWOV^<gTekp|I;F47QgLl5b3%)<iG^XNxE=^ZS^
zQqsp*hPOyZ#a<Bt+T#up5mD;xjXIPe_84Mx^QIPRL=G#>EV79DhyT>*;eU0y(x^N$
z)Z`i2Aq@k^XZ3J7?ou!33S&~NgSm|~Td!^DWtK{s%j_YuEu>jAY1d#E=g0wVnCU-_
z*>`5?q<K0E+nGtt(OE{ggyE_N!gY$rE1a&=oLYINwzlwXrO_+g-YHJ=62pl$jQqII
zYM)m;MG;B9Su6^b)_mcY{zV?~bsO2g$m_L>i@aMGzgG|V$iJd7=5)%zqc8l_S7r`U
z-ut!`rK3<}$LcvHtxDI++rrG~1%d6%t}v7Kd6_+6w)(b-wsZzi$+dshTo15A=c2tr
zvG~cmbDU@I+Ang<-nCy<Lw@lLaf+-vB3<ho;0k$o<U%*%Th}?Vc3GV-*TrM%Qn7Sx
zk$EO*k-jyTyv&@W1<dM{l7PrQd7V@8#Ab3T;RbzBp@NzG-pa9+rjOZ@MgZh(3w73=
z&rE+jz<%aYB_0q?98kss<k2iwu_xVg>*58~R3<%|S4PW4gHwAqdlTnTemnAL;*EY+
F=3lPT_%r|j
delta 8726
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
J(W^4)e**UO;}ZY?
delta 1605
zcmd6n-AmI^7{{OIxVBMSx>;#Cb(^xyx7G@K(TgBUB__Q|i4)SB5^_SA*P~XTBqj9n
z6Y`>$UF^b(%J6rQR}o}XxQhY<AqlS{2s3mPLC^V}XKVQn<TDOm&gVSmcb;>;=WJxr
zn)qxTbq9V954Qqd*bi`h;K-qH(}Qa>Uci+JfQGK-=JqxKKoBA8lU5s=oM%U-;vJ}W
zAT~VLC#JE!K>zg?=L+@Z1+;C`DpoPIVVb5mwDc;LJHj>_B7iRdU{*Mgme_8WxOOp%
zI}DtkFY%uHSv*7-!+J7}-%4XcAm|4$1}1nxnuJ#{1CaL^W+6rT5<bE_=^QM<chVn-
zNcko!ZbBQW3mxbr-GxQCo%Ar4p_{Y|z33yogaM>NO}DWQ>qrwA#4*xmqEUnagt=FD
z7m0o57}W^>v6!8*8gs9-1>i&{6(hsU{cfZ8w|`D|mkCQ=)oJGWq$Mi1^CB|`X(_WC
z+HsF4iOB<&v5}gShu#|mppcaAh+MvNg;@cqOR)$YvJp8;Md(0t7(g}Wo?*V3bO*J7
z;vy2$zIsHtN8TD4yuC=KE(_0pt=D?RQxx4_w1o<BY+ZTNb5qrxDZb~<n*KdKT}j@=
zZZVe!=T;l*n`E|yln=Y_12gHDn_7t4L6sksc`~G7h0Od00ifFsHOx*jlO}o;i$w<*
z<}4P?6ss7(UjD$Fe?9=PoB40%Y7+qU)Ni78RE_ty@Hji!FaKF&SioXjrT%u^R3#=6
zA4(_v+NWv}SXXuqo>v8D>>P})=@00s8u`=`%!^5@)b208V^&1!W43%ZNH49CN9?4<
zYUIi(W-ihYv#ZRul2$THGLv8RGn-|mR?l9LxO`zU)O>&gDqqA~wDBOlw2a^Uvf|?^
Xo%}KEi9gckgUX)KkZ9AELZajkYSh%W
--
2.12.2

View File

@@ -1,224 +0,0 @@
From f2fd954313bf70edc5204b89f5f1b668925eda28 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Fri, 17 Apr 2015 14:39:17 +0200
Subject: mfplat: Implement MFTRegister. (v2)
---
dlls/mfplat/Makefile.in | 1 +
dlls/mfplat/main.c | 144 ++++++++++++++++++++++++++++++++++++++++++++++++
dlls/mfplat/mfplat.spec | 2 +-
loader/wine.inf.in | 4 ++
4 files changed, 150 insertions(+), 1 deletion(-)
diff --git a/dlls/mfplat/Makefile.in b/dlls/mfplat/Makefile.in
index 2b5bd24..9679f53 100644
--- a/dlls/mfplat/Makefile.in
+++ b/dlls/mfplat/Makefile.in
@@ -1,4 +1,5 @@
MODULE = mfplat.dll
+IMPORTS = user32 advapi32
C_SRCS = \
main.c
diff --git a/dlls/mfplat/main.c b/dlls/mfplat/main.c
index 698c681..d8b0c7a 100644
--- a/dlls/mfplat/main.c
+++ b/dlls/mfplat/main.c
@@ -23,15 +23,44 @@
#include "windef.h"
#include "winbase.h"
+#include "winuser.h"
+#include "winreg.h"
#include "initguid.h"
#include "mfapi.h"
#include "mferror.h"
#include "wine/debug.h"
+#include "wine/unicode.h"
WINE_DEFAULT_DEBUG_CHANNEL(mfplat);
+static WCHAR transform_keyW[] = {'S','o','f','t','w','a','r','e','\\','C','l','a','s','s','e','s',
+ '\\','M','e','d','i','a','F','o','u','n','d','a','t','i','o','n','\\',
+ 'T','r','a','n','s','f','o','r','m','s',0};
+static WCHAR categories_keyW[] = {'S','o','f','t','w','a','r','e','\\','C','l','a','s','s','e','s',
+ '\\','M','e','d','i','a','F','o','u','n','d','a','t','i','o','n','\\',
+ 'T','r','a','n','s','f','o','r','m','s','\\',
+ 'C','a','t','e','g','o','r','i','e','s',0};
+static WCHAR inputtypesW[] = {'I','n','p','u','t','T','y','p','e','s',0};
+static WCHAR outputtypesW[] = {'O','u','t','p','u','t','T','y','p','e','s',0};
+static const WCHAR szGUIDFmt[] =
+{
+ '%','0','8','x','-','%','0','4','x','-','%','0','4','x','-','%','0',
+ '2','x','%','0','2','x','-','%','0','2','x','%','0','2','x','%','0','2',
+ 'x','%','0','2','x','%','0','2','x','%','0','2','x',0
+};
+
+static LPWSTR GUIDToString(LPWSTR lpwstr, REFGUID lpcguid)
+{
+ wsprintfW(lpwstr, szGUIDFmt, lpcguid->Data1, lpcguid->Data2,
+ lpcguid->Data3, lpcguid->Data4[0], lpcguid->Data4[1],
+ lpcguid->Data4[2], lpcguid->Data4[3], lpcguid->Data4[4],
+ lpcguid->Data4[5], lpcguid->Data4[6], lpcguid->Data4[7]);
+
+ return lpwstr;
+}
+
BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved)
{
switch (reason)
@@ -46,6 +75,121 @@ BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved)
return TRUE;
}
+static HRESULT register_transform(CLSID *clsid, WCHAR *name,
+ UINT32 cinput, MFT_REGISTER_TYPE_INFO *input_types,
+ UINT32 coutput, MFT_REGISTER_TYPE_INFO *output_types)
+{
+ HKEY htransform, hclsid = 0;
+ WCHAR buffer[64];
+ GUID *types;
+ DWORD size;
+ LONG ret;
+ UINT32 i;
+
+ if (RegOpenKeyW(HKEY_LOCAL_MACHINE, transform_keyW, &htransform))
+ return E_FAIL;
+
+ GUIDToString(buffer, clsid);
+ ret = RegCreateKeyW(htransform, buffer, &hclsid);
+ RegCloseKey(htransform);
+ if (ret) return E_FAIL;
+
+ size = (strlenW(name) + 1) * sizeof(WCHAR);
+ if (RegSetValueExW(hclsid, NULL, 0, REG_SZ, (BYTE *)name, size))
+ goto err;
+
+ if (cinput)
+ {
+ size = 2 * cinput * sizeof(GUID);
+ types = HeapAlloc(GetProcessHeap(), 0, size);
+ if (!types) goto err;
+
+ for (i = 0; i < cinput; i++)
+ {
+ memcpy(&types[2 * i], &input_types[i].guidMajorType, sizeof(GUID));
+ memcpy(&types[2 * i + 1], &input_types[i].guidSubtype, sizeof(GUID));
+ }
+
+ ret = RegSetValueExW(hclsid, inputtypesW, 0, REG_BINARY, (BYTE *)types, size);
+ HeapFree(GetProcessHeap(), 0, types);
+ if (ret) goto err;
+ }
+
+ if (coutput)
+ {
+ size = 2 * coutput * sizeof(GUID);
+ types = HeapAlloc(GetProcessHeap(), 0, size);
+ if (!types) goto err;
+
+ for (i = 0; i < coutput; i++)
+ {
+ memcpy(&types[2 * i], &output_types[i].guidMajorType, sizeof(GUID));
+ memcpy(&types[2 * i + 1], &output_types[i].guidSubtype, sizeof(GUID));
+ }
+
+ ret = RegSetValueExW(hclsid, outputtypesW, 0, REG_BINARY, (BYTE *)types, size);
+ HeapFree(GetProcessHeap(), 0, types);
+ if (ret) goto err;
+ }
+
+ RegCloseKey(hclsid);
+ return S_OK;
+
+err:
+ RegCloseKey(hclsid);
+ return E_FAIL;
+}
+
+static HRESULT register_category(CLSID *clsid, GUID *category)
+{
+ HKEY hcategory, htmp1, htmp2;
+ WCHAR buffer[64];
+ DWORD ret;
+
+ if (RegOpenKeyW(HKEY_LOCAL_MACHINE, categories_keyW, &hcategory))
+ return E_FAIL;
+
+ GUIDToString(buffer, category);
+ ret = RegCreateKeyW(hcategory, buffer, &htmp1);
+ RegCloseKey(hcategory);
+ if (ret) return E_FAIL;
+
+ GUIDToString(buffer, clsid);
+ ret = RegCreateKeyW(htmp1, buffer, &htmp2);
+ RegCloseKey(htmp1);
+ if (ret) return E_FAIL;
+
+ RegCloseKey(htmp2);
+ return S_OK;
+}
+
+/***********************************************************************
+ * MFTRegister (mfplat.@)
+ */
+HRESULT WINAPI MFTRegister(CLSID clsid, GUID category, LPWSTR name, UINT32 flags, UINT32 cinput,
+ MFT_REGISTER_TYPE_INFO *input_types, UINT32 coutput,
+ MFT_REGISTER_TYPE_INFO *output_types, void *attributes)
+{
+ HRESULT hr;
+
+ FIXME("(%s, %s, %s, %x, %u, %p, %u, %p, %p)\n", debugstr_guid(&clsid), debugstr_guid(&category),
+ debugstr_w(name), flags, cinput, input_types,
+ coutput, output_types, attributes);
+
+ if (attributes)
+ FIXME("attributes not yet supported.\n");
+
+ if (flags)
+ FIXME("flags not yet supported.\n");
+
+ hr = register_transform(&clsid, name, cinput, input_types, coutput, output_types);
+
+ if (SUCCEEDED(hr))
+ hr = register_category(&clsid, &category);
+
+ return hr;
+}
+
/***********************************************************************
* MFStartup (mfplat.@)
*/
diff --git a/dlls/mfplat/mfplat.spec b/dlls/mfplat/mfplat.spec
index 0b402b7..acde0a5 100644
--- a/dlls/mfplat/mfplat.spec
+++ b/dlls/mfplat/mfplat.spec
@@ -137,7 +137,7 @@
@ stub MFTEnum
@ stub MFTEnumEx
@ stub MFTGetInfo
-@ stub MFTRegister
+@ stdcall MFTRegister(int128 int128 wstr long long ptr long ptr ptr)
@ stub MFTRegisterLocal
@ stub MFTRegisterLocalByCLSID
@ stub MFTUnregister
diff --git a/loader/wine.inf.in b/loader/wine.inf.in
index f30942a..3935bae 100644
--- a/loader/wine.inf.in
+++ b/loader/wine.inf.in
@@ -623,6 +623,10 @@ HKLM,Software\Borland\Database Engine\Settings\SYSTEM\INIT,SHAREDMEMLOCATION,,90
HKLM,Software\Clients\Mail,,2,"Native Mail Client"
HKLM,Software\Clients\Mail\Native Mail Client,,2,"Native Mail Client"
HKLM,Software\Clients\Mail\Native Mail Client,"DLLPath",2,"%11%\winemapi.dll"
+HKLM,Software\Classes\MediaFoundation,,16
+HKLM,Software\Classes\MediaFoundation\MediaSources,,16
+HKLM,Software\Classes\MediaFoundation\Transforms,,16
+HKLM,Software\Classes\MediaFoundation\Transforms\Categories,,16
HKLM,Software\Microsoft\Advanced INF Setup,,16
HKLM,Software\Microsoft\Clients,,16
HKLM,Software\Microsoft\Cryptography\Calais\Current,,16
--
2.5.1

View File

@@ -1,75 +0,0 @@
From a978b107d7717dd6768a987007cfbbc8b3a89014 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Fri, 2 Oct 2015 05:07:24 +0200
Subject: mfplat: Implement MFTUnregister.
---
dlls/mfplat/main.c | 38 ++++++++++++++++++++++++++++++++++++++
dlls/mfplat/mfplat.spec | 2 +-
2 files changed, 39 insertions(+), 1 deletion(-)
diff --git a/dlls/mfplat/main.c b/dlls/mfplat/main.c
index d8b0c7a..6b47a4e 100644
--- a/dlls/mfplat/main.c
+++ b/dlls/mfplat/main.c
@@ -191,6 +191,44 @@ HRESULT WINAPI MFTRegister(CLSID clsid, GUID category, LPWSTR name, UINT32 flags
}
/***********************************************************************
+ * MFTUnregister (mfplat.@)
+ */
+HRESULT WINAPI MFTUnregister(CLSID clsid)
+{
+ WCHAR buffer[64], category[MAX_PATH];
+ HKEY htransform, hcategory, htmp;
+ DWORD size = MAX_PATH;
+ DWORD index = 0;
+
+ FIXME("(%s)\n", debugstr_guid(&clsid));
+
+ GUIDToString(buffer, &clsid);
+
+ if (!RegOpenKeyW(HKEY_LOCAL_MACHINE, transform_keyW, &htransform))
+ {
+ RegDeleteKeyW(htransform, buffer);
+ RegCloseKey(htransform);
+ }
+
+ if (!RegOpenKeyW(HKEY_LOCAL_MACHINE, categories_keyW, &hcategory))
+ {
+ while (RegEnumKeyExW(hcategory, index, category, &size, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
+ {
+ if (!RegOpenKeyW(hcategory, category, &htmp))
+ {
+ RegDeleteKeyW(htmp, buffer);
+ RegCloseKey(htmp);
+ }
+ size = MAX_PATH;
+ index++;
+ }
+ RegCloseKey(hcategory);
+ }
+
+ return S_OK;
+}
+
+/***********************************************************************
* MFStartup (mfplat.@)
*/
HRESULT WINAPI MFStartup(ULONG version, DWORD flags)
diff --git a/dlls/mfplat/mfplat.spec b/dlls/mfplat/mfplat.spec
index acde0a5..4501e27 100644
--- a/dlls/mfplat/mfplat.spec
+++ b/dlls/mfplat/mfplat.spec
@@ -140,7 +140,7 @@
@ stdcall MFTRegister(int128 int128 wstr long long ptr long ptr ptr)
@ stub MFTRegisterLocal
@ stub MFTRegisterLocalByCLSID
-@ stub MFTUnregister
+@ stdcall MFTUnregister(int128)
@ stub MFTUnregisterLocal
@ stub MFTUnregisterLocalByCLSID
@ stub MFTraceError
--
2.5.1

View File

@@ -1,253 +0,0 @@
From afc93aaac4a5e5711e9bfe4757fdeb3bdd53bd26 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Fri, 2 Oct 2015 05:08:10 +0200
Subject: mfplat: Implement MFTEnum.
---
dlls/mfplat/Makefile.in | 2 +-
dlls/mfplat/main.c | 183 ++++++++++++++++++++++++++++++++++++++++++++++++
dlls/mfplat/mfplat.spec | 2 +-
3 files changed, 185 insertions(+), 2 deletions(-)
diff --git a/dlls/mfplat/Makefile.in b/dlls/mfplat/Makefile.in
index 9679f53..de760b5 100644
--- a/dlls/mfplat/Makefile.in
+++ b/dlls/mfplat/Makefile.in
@@ -1,5 +1,5 @@
MODULE = mfplat.dll
-IMPORTS = user32 advapi32
+IMPORTS = user32 advapi32 ole32
C_SRCS = \
main.c
diff --git a/dlls/mfplat/main.c b/dlls/mfplat/main.c
index 6b47a4e..3d029d8 100644
--- a/dlls/mfplat/main.c
+++ b/dlls/mfplat/main.c
@@ -18,6 +18,7 @@
*/
#include <stdarg.h>
+#include <string.h>
#define COBJMACROS
@@ -51,6 +52,17 @@ static const WCHAR szGUIDFmt[] =
'x','%','0','2','x','%','0','2','x','%','0','2','x',0
};
+static const BYTE guid_conv_table[256] =
+{
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */
+ 0, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf /* 0x60 */
+};
+
static LPWSTR GUIDToString(LPWSTR lpwstr, REFGUID lpcguid)
{
wsprintfW(lpwstr, szGUIDFmt, lpcguid->Data1, lpcguid->Data2,
@@ -61,6 +73,60 @@ static LPWSTR GUIDToString(LPWSTR lpwstr, REFGUID lpcguid)
return lpwstr;
}
+static inline BOOL is_valid_hex(WCHAR c)
+{
+ if (!(((c >= '0') && (c <= '9')) ||
+ ((c >= 'a') && (c <= 'f')) ||
+ ((c >= 'A') && (c <= 'F'))))
+ return FALSE;
+ return TRUE;
+}
+
+static BOOL GUIDFromString(LPCWSTR s, GUID *id)
+{
+ int i;
+
+ /* in form XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX */
+
+ id->Data1 = 0;
+ for (i = 0; i < 8; i++)
+ {
+ if (!is_valid_hex(s[i])) return FALSE;
+ id->Data1 = (id->Data1 << 4) | guid_conv_table[s[i]];
+ }
+ if (s[8]!='-') return FALSE;
+
+ id->Data2 = 0;
+ for (i = 9; i < 13; i++)
+ {
+ if (!is_valid_hex(s[i])) return FALSE;
+ id->Data2 = (id->Data2 << 4) | guid_conv_table[s[i]];
+ }
+ if (s[13]!='-') return FALSE;
+
+ id->Data3 = 0;
+ for (i = 14; i < 18; i++)
+ {
+ if (!is_valid_hex(s[i])) return FALSE;
+ id->Data3 = (id->Data3 << 4) | guid_conv_table[s[i]];
+ }
+ if (s[18]!='-') return FALSE;
+
+ for (i = 19; i < 36; i+=2)
+ {
+ if (i == 23)
+ {
+ if (s[i]!='-') return FALSE;
+ i++;
+ }
+ if (!is_valid_hex(s[i]) || !is_valid_hex(s[i+1])) return FALSE;
+ id->Data4[(i-19)/2] = guid_conv_table[s[i]] << 4 | guid_conv_table[s[i+1]];
+ }
+
+ if (!s[37]) return TRUE;
+ return FALSE;
+}
+
BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved)
{
switch (reason)
@@ -190,6 +256,123 @@ HRESULT WINAPI MFTRegister(CLSID clsid, GUID category, LPWSTR name, UINT32 flags
return hr;
}
+static BOOL match_type(WCHAR *clsid_str, WCHAR *type_str, MFT_REGISTER_TYPE_INFO *type)
+{
+ HKEY htransform, hfilter;
+ DWORD reg_type, size;
+ LONG ret = FALSE;
+ GUID *guids = NULL;
+ int i;
+
+ if (RegOpenKeyW(HKEY_LOCAL_MACHINE, transform_keyW, &htransform))
+ return FALSE;
+
+ if (RegOpenKeyW(htransform, clsid_str, &hfilter))
+ {
+ RegCloseKey(htransform);
+ return FALSE;
+ }
+
+ if (RegQueryValueExW(hfilter, type_str, NULL, &reg_type, NULL, &size) != ERROR_SUCCESS)
+ goto out;
+
+ if (reg_type != REG_BINARY)
+ goto out;
+
+ if (!size || size % (sizeof(GUID) * 2) != 0)
+ goto out;
+
+ guids = HeapAlloc(GetProcessHeap(), 0, size);
+ if (!guids)
+ goto out;
+
+ if (RegQueryValueExW(hfilter, type_str, NULL, &reg_type, (LPBYTE)guids, &size) != ERROR_SUCCESS)
+ goto out;
+
+ for (i = 0; i < size / sizeof(GUID); i += 2)
+ {
+ if (!memcmp(&guids[i], &type->guidMajorType, sizeof(GUID)) &&
+ !memcmp(&guids[i+1], &type->guidSubtype, sizeof(GUID)))
+ {
+ ret = TRUE;
+ break;
+ }
+ }
+
+out:
+ HeapFree(GetProcessHeap(), 0, guids);
+ RegCloseKey(hfilter);
+ RegCloseKey(htransform);
+ return ret;
+}
+
+/***********************************************************************
+ * MFTEnum (mfplat.@)
+ */
+HRESULT WINAPI MFTEnum(GUID category, UINT32 flags, MFT_REGISTER_TYPE_INFO *input_type,
+ MFT_REGISTER_TYPE_INFO *output_type, IMFAttributes *attributes,
+ CLSID **pclsids, UINT32 *pcount)
+{
+ WCHAR buffer[64], clsid_str[MAX_PATH];
+ HKEY hcategory, hlist;
+ DWORD index = 0;
+ DWORD size = MAX_PATH;
+ CLSID *clsids = NULL;
+ UINT32 count = 0;
+ LONG ret;
+
+ FIXME("(%s, %x, %p, %p, %p, %p, %p)\n", debugstr_guid(&category), flags, input_type,
+ output_type, attributes, pclsids, pcount);
+
+ if (!pclsids || !pcount)
+ return E_INVALIDARG;
+
+ if (RegOpenKeyW(HKEY_LOCAL_MACHINE, categories_keyW, &hcategory))
+ return E_FAIL;
+
+ GUIDToString(buffer, &category);
+
+ ret = RegOpenKeyW(hcategory, buffer, &hlist);
+ RegCloseKey(hcategory);
+ if (ret) return E_FAIL;
+
+ while (RegEnumKeyExW(hlist, index, clsid_str, &size, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
+ {
+ GUID clsid;
+ PVOID tmp;
+
+ if (!GUIDFromString(clsid_str, &clsid))
+ goto next;
+
+ if (output_type && !match_type(clsid_str, outputtypesW, output_type))
+ goto next;
+
+ if (input_type && !match_type(clsid_str, inputtypesW, input_type))
+ goto next;
+
+ tmp = CoTaskMemRealloc(clsids, (count + 1) * sizeof(GUID));
+ if (!tmp)
+ {
+ CoTaskMemFree(clsids);
+ RegCloseKey(hlist);
+ return E_OUTOFMEMORY;
+ }
+
+ clsids = tmp;
+ clsids[count++] = clsid;
+
+ next:
+ size = MAX_PATH;
+ index++;
+ }
+
+ *pclsids = clsids;
+ *pcount = count;
+
+ RegCloseKey(hlist);
+ return S_OK;
+}
+
/***********************************************************************
* MFTUnregister (mfplat.@)
*/
diff --git a/dlls/mfplat/mfplat.spec b/dlls/mfplat/mfplat.spec
index 4501e27..cb16e8c 100644
--- a/dlls/mfplat/mfplat.spec
+++ b/dlls/mfplat/mfplat.spec
@@ -134,7 +134,7 @@
@ stdcall MFShutdown()
@ stdcall MFStartup(long long)
@ stub MFStreamDescriptorProtectMediaType
-@ stub MFTEnum
+@ stdcall MFTEnum(int128 long ptr ptr ptr ptr ptr)
@ stub MFTEnumEx
@ stub MFTGetInfo
@ stdcall MFTRegister(int128 int128 wstr long long ptr long ptr ptr)
--
2.5.1

View File

@@ -1,196 +0,0 @@
From f7566e5af2508b89e87644cc079844f5827714ce Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Fri, 2 Oct 2015 05:09:10 +0200
Subject: mfplat/tests: Add tests.
---
configure.ac | 1 +
dlls/mfplat/tests/Makefile.in | 5 ++
dlls/mfplat/tests/mfplat.c | 151 ++++++++++++++++++++++++++++++++++++++++++
3 files changed, 157 insertions(+)
create mode 100644 dlls/mfplat/tests/Makefile.in
create mode 100644 dlls/mfplat/tests/mfplat.c
diff --git a/configure.ac b/configure.ac
index 26be5e60676..a4c1360b3db 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3122,6 +3122,7 @@ WINE_CONFIG_DLL(mciwave)
WINE_CONFIG_DLL(mf)
WINE_CONFIG_DLL(mf3216)
WINE_CONFIG_DLL(mfplat)
+WINE_CONFIG_TEST(dlls/mfplat/tests)
WINE_CONFIG_DLL(mfreadwrite)
WINE_CONFIG_DLL(mgmtapi)
WINE_CONFIG_DLL(midimap)
diff --git a/dlls/mfplat/tests/Makefile.in b/dlls/mfplat/tests/Makefile.in
new file mode 100644
index 00000000000..41a098daafe
--- /dev/null
+++ b/dlls/mfplat/tests/Makefile.in
@@ -0,0 +1,5 @@
+TESTDLL = mfplat.dll
+IMPORTS = ole32
+
+C_SRCS = \
+ mfplat.c
diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c
new file mode 100644
index 00000000000..5e3be98b59d
--- /dev/null
+++ b/dlls/mfplat/tests/mfplat.c
@@ -0,0 +1,151 @@
+/*
+ * Unit test suite for mfplat.
+ *
+ * Copyright 2015 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 <stdarg.h>
+#include <string.h>
+
+#define COBJMACROS
+
+#include "windef.h"
+#include "winbase.h"
+#include "winuser.h"
+#include "winreg.h"
+
+#include "initguid.h"
+#include "mfapi.h"
+#include "mferror.h"
+
+#include "wine/test.h"
+
+DEFINE_GUID(MFT_CATEGORY_OTHER, 0x90175d57,0xb7ea,0x4901,0xae,0xb3,0x93,0x3a,0x87,0x47,0x75,0x6f);
+
+DEFINE_GUID(DUMMY_CLSID, 0x12345678,0x1234,0x1234,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19);
+DEFINE_GUID(DUMMY_GUID1, 0x12345678,0x1234,0x1234,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21);
+DEFINE_GUID(DUMMY_GUID2, 0x12345678,0x1234,0x1234,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22);
+DEFINE_GUID(DUMMY_GUID3, 0x12345678,0x1234,0x1234,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33);
+
+static HRESULT (WINAPI* pMFTEnum)(GUID, UINT32, MFT_REGISTER_TYPE_INFO *, MFT_REGISTER_TYPE_INFO *,
+ IMFAttributes *, CLSID**, UINT32*);
+static HRESULT (WINAPI* pMFTRegister)(CLSID, GUID, LPWSTR, UINT32, UINT32, MFT_REGISTER_TYPE_INFO *,
+ UINT32, MFT_REGISTER_TYPE_INFO *, void *);
+static HRESULT (WINAPI* pMFTUnregister)(CLSID);
+
+static BOOL check_clsid(CLSID *clsids, UINT32 count)
+{
+ int i;
+ for (i = 0; i < count; i++)
+ {
+ if (IsEqualGUID(&clsids[i], &DUMMY_CLSID))
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void test_register(void)
+{
+ static WCHAR name[] = {'W','i','n','e',' ','t','e','s','t',0};
+ MFT_REGISTER_TYPE_INFO input;
+ MFT_REGISTER_TYPE_INFO output;
+ CLSID *clsids;
+ UINT32 count;
+ HRESULT ret;
+
+ memcpy(&input.guidMajorType, &DUMMY_GUID1, sizeof(GUID));
+ memcpy(&input.guidMajorType, &DUMMY_GUID2, sizeof(GUID));
+ memcpy(&output.guidSubtype, &DUMMY_GUID1, sizeof(GUID));
+ memcpy(&output.guidSubtype, &DUMMY_GUID3, sizeof(GUID));
+
+ ret = pMFTRegister(DUMMY_CLSID, MFT_CATEGORY_OTHER, name, 0, 1, &input, 1, &output, NULL);
+ ok(!ret, "Failed to register dummy filter: %x\n", ret);
+ if (ret) return;
+
+ count = 0;
+ clsids = NULL;
+ ret = pMFTEnum(MFT_CATEGORY_OTHER, 0, NULL, NULL, NULL, &clsids, &count);
+ ok(!ret, "Failed to enumerate filters: %x\n", ret);
+ ok(count > 0, "Expected count > 0\n");
+ ok(clsids != NULL, "Expected clsids != NULL\n");
+ ok(check_clsid(clsids, count), "Filter was not part of enumeration\n");
+ CoTaskMemFree(clsids);
+
+ count = 0;
+ clsids = NULL;
+ ret = pMFTEnum(MFT_CATEGORY_OTHER, 0, &input, NULL, NULL, &clsids, &count);
+ ok(!ret, "Failed to enumerate filters: %x\n", ret);
+ ok(count > 0, "Expected count > 0\n");
+ ok(clsids != NULL, "Expected clsids != NULL\n");
+ ok(check_clsid(clsids, count), "Filter was not part of enumeration\n");
+ CoTaskMemFree(clsids);
+
+ count = 0;
+ clsids = NULL;
+ ret = pMFTEnum(MFT_CATEGORY_OTHER, 0, NULL, &output, NULL, &clsids, &count);
+ ok(!ret, "Failed to enumerate filters: %x\n", ret);
+ ok(count > 0, "Expected count > 0\n");
+ ok(clsids != NULL, "Expected clsids != NULL\n");
+ ok(check_clsid(clsids, count), "Filter was not part of enumeration\n");
+ CoTaskMemFree(clsids);
+
+ count = 0;
+ clsids = NULL;
+ ret = pMFTEnum(MFT_CATEGORY_OTHER, 0, &input, &output, NULL, &clsids, &count);
+ ok(!ret, "Failed to enumerate filters: %x\n", ret);
+ ok(count > 0, "Expected count > 0\n");
+ ok(clsids != NULL, "Expected clsids != NULL\n");
+ ok(check_clsid(clsids, count), "Filter was not part of enumeration\n");
+ CoTaskMemFree(clsids);
+
+ /* exchange input and output */
+ count = 0;
+ clsids = NULL;
+ ret = pMFTEnum(MFT_CATEGORY_OTHER, 0, &output, &input, NULL, &clsids, &count);
+ ok(!ret, "Failed to enumerate filters: %x\n", ret);
+ ok(!count, "Expected count == 0\n");
+ ok(clsids == NULL, "Expected clsids == NULL\n");
+
+ pMFTUnregister(DUMMY_CLSID);
+}
+
+BOOL init_function_ptrs(void)
+{
+ HMODULE mfplat = LoadLibraryA("mfplat.dll");
+ if (!mfplat)
+ {
+ win_skip("Could not load mfplat.dll\n");
+ return FALSE;
+ }
+
+ #define LOAD_FUNCPTR(f) p##f = (void*)GetProcAddress(mfplat, #f)
+ LOAD_FUNCPTR(MFTEnum);
+ LOAD_FUNCPTR(MFTRegister);
+ LOAD_FUNCPTR(MFTUnregister);
+ #undef LOAD_FUNCPTR
+
+ return TRUE;
+}
+
+START_TEST(mfplat)
+{
+ if (!init_function_ptrs())
+ return;
+
+ CoInitialize(NULL);
+ test_register();
+}
--
2.11.0

View File

@@ -1,4 +1,2 @@
Fixes: [37811] Add implementation for mfplat.MFTRegister
Fixes: [39309] Add implementation for mfplat.MFTEnum
Fixes: [39367] Return stub interface from mf.MFCreateMediaSession

View File

@@ -1,4 +1,4 @@
From 66e1fd2fc1c0a3b55597603b123f0c599faa2b75 Mon Sep 17 00:00:00 2001
From 69a28da617c7d5c361eae5ed056cac7984b4177c 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:17:31 +0100
Subject: ntdll: Add stub for ApiSetQueryApiSetPresence.
@@ -10,18 +10,18 @@ Subject: ntdll: Add stub for ApiSetQueryApiSetPresence.
3 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/dlls/api-ms-win-core-apiquery-l1-1-0/api-ms-win-core-apiquery-l1-1-0.spec b/dlls/api-ms-win-core-apiquery-l1-1-0/api-ms-win-core-apiquery-l1-1-0.spec
index 6d63b5bf43f..1d99dd71320 100644
index 6d63b5bf43..1d99dd7132 100644
--- a/dlls/api-ms-win-core-apiquery-l1-1-0/api-ms-win-core-apiquery-l1-1-0.spec
+++ b/dlls/api-ms-win-core-apiquery-l1-1-0/api-ms-win-core-apiquery-l1-1-0.spec
@@ -1 +1 @@
-@ stub ApiSetQueryApiSetPresence
+@ stdcall ApiSetQueryApiSetPresence(ptr ptr) ntdll.ApiSetQueryApiSetPresence
diff --git a/dlls/ntdll/misc.c b/dlls/ntdll/misc.c
index 40a878539a6..55a93938dcd 100644
index 8f0c51cea9..1a0087ae14 100644
--- a/dlls/ntdll/misc.c
+++ b/dlls/ntdll/misc.c
@@ -457,3 +457,14 @@ ULONG WINAPI EtwUnregisterTraceGuids( TRACEHANDLE RegistrationHandle )
FIXME("%s: stub\n", wine_dbgstr_longlong(RegistrationHandle));
@@ -476,3 +476,14 @@ ULONG WINAPI EtwEventWrite( REGHANDLE handle, const EVENT_DESCRIPTOR *descriptor
FIXME("(%s, %p, %u, %p): stub\n", wine_dbgstr_longlong(handle), descriptor, count, data);
return ERROR_SUCCESS;
}
+
@@ -36,7 +36,7 @@ index 40a878539a6..55a93938dcd 100644
+ return TRUE;
+}
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
index 28dc60c40a2..076d0d280fe 100644
index 9adf1edd4a..adfb2fc7ef 100644
--- a/dlls/ntdll/ntdll.spec
+++ b/dlls/ntdll/ntdll.spec
@@ -3,6 +3,7 @@
@@ -48,5 +48,5 @@ index 28dc60c40a2..076d0d280fe 100644
@ stub CsrAllocateCapturePointer
@ stub CsrAllocateMessagePointer
--
2.11.0
2.12.2

View File

@@ -1,4 +1,4 @@
From 3c9bfe68c7bc4accbe80eeba910a227dc5ffa588 Mon Sep 17 00:00:00 2001
From 0cb287b9ba62ee9e353248861d4c177f7db48dcb Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Wed, 20 Jul 2016 02:21:41 +0200
Subject: ntdll: Ensure process dlls are not attached too early. (v2)
@@ -8,18 +8,18 @@ Subject: ntdll: Ensure process dlls are not attached too early. (v2)
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
index f1ef7ab..adb6b95 100644
index 518a99f590..94668e8ba4 100644
--- a/dlls/ntdll/loader.c
+++ b/dlls/ntdll/loader.c
@@ -63,6 +63,7 @@ WINE_DECLARE_DEBUG_CHANNEL(pid);
@@ -64,6 +64,7 @@ WINE_DECLARE_DEBUG_CHANNEL(pid);
typedef DWORD (CALLBACK *DLLENTRYPROC)(HMODULE,DWORD,LPVOID);
typedef void (CALLBACK *LDRENUMPROC)(LDR_MODULE *, void *, BOOLEAN *);
+static BOOL process_attaching = TRUE; /* set on process attach to avoid calling callbacks too early */
static BOOL process_detaching = FALSE; /* set on process detach to avoid deadlocks with thread detach */
static int free_lib_count; /* recursion depth of LdrUnloadDll calls */
@@ -445,7 +446,20 @@ static FARPROC find_forwarded_export( HMODULE module, const char *forward, LPCWS
@@ -452,7 +453,20 @@ static FARPROC find_forwarded_export( HMODULE module, const char *forward, LPCWS
if (load_dll( load_path, mod_name, 0, &wm ) == STATUS_SUCCESS &&
!(wm->ldr.Flags & LDR_DONT_RESOLVE_REFS))
{
@@ -41,7 +41,7 @@ index f1ef7ab..adb6b95 100644
{
LdrUnloadDll( wm->ldr.BaseAddress );
wm = NULL;
@@ -2970,6 +2984,7 @@ static NTSTATUS attach_process_dlls( void *wm )
@@ -3005,6 +3019,7 @@ static NTSTATUS attach_process_dlls( void *wm )
{
NTSTATUS status;
@@ -50,5 +50,5 @@ index f1ef7ab..adb6b95 100644
RtlEnterCriticalSection( &loader_section );
--
2.9.0
2.12.2

View File

@@ -1,4 +1,4 @@
From 41a15135b0c1894724c1c91311faa255ad96d732 Mon Sep 17 00:00:00 2001
From ab7508f34fd0f428392e8e0811709f6436e00c93 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sat, 30 May 2015 02:23:15 +0200
Subject: ntdll: Add support for hiding wine version information from
@@ -10,12 +10,12 @@ Subject: ntdll: Add support for hiding wine version information from
2 files changed, 100 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
index b95b8852aa..1c0ba6161d 100644
index 94668e8ba4..f4e002a060 100644
--- a/dlls/ntdll/loader.c
+++ b/dlls/ntdll/loader.c
@@ -63,9 +63,12 @@ WINE_DECLARE_DEBUG_CHANNEL(pid);
@@ -64,9 +64,12 @@ WINE_DECLARE_DEBUG_CHANNEL(pid);
typedef DWORD (CALLBACK *DLLENTRYPROC)(HMODULE,DWORD,LPVOID);
typedef void (CALLBACK *LDRENUMPROC)(LDR_MODULE *, void *, BOOLEAN *);
+#define IS_OPTION_TRUE(ch) ((ch) == 'y' || (ch) == 'Y' || (ch) == 't' || (ch) == 'T' || (ch) == '1')
+
@@ -26,7 +26,7 @@ index b95b8852aa..1c0ba6161d 100644
static const char * const reason_names[] =
{
@@ -1456,6 +1459,96 @@ NTSTATUS WINAPI LdrUnlockLoaderLock( ULONG flags, ULONG_PTR magic )
@@ -1485,6 +1488,96 @@ NTSTATUS WINAPI LdrUnlockLoaderLock( ULONG flags, ULONG_PTR magic )
}
@@ -123,7 +123,7 @@ index b95b8852aa..1c0ba6161d 100644
/******************************************************************
* LdrGetProcedureAddress (NTDLL.@)
*/
@@ -1476,7 +1569,7 @@ NTSTATUS WINAPI LdrGetProcedureAddress(HMODULE module, const ANSI_STRING *name,
@@ -1505,7 +1598,7 @@ NTSTATUS WINAPI LdrGetProcedureAddress(HMODULE module, const ANSI_STRING *name,
LPCWSTR load_path = NtCurrentTeb()->Peb->ProcessParameters->DllPath.Buffer;
void *proc = name ? find_named_export( module, exports, exp_size, name->Buffer, -1, load_path )
: find_ordinal_export( module, exports, exp_size, ord - exports->Base, load_path );
@@ -132,7 +132,7 @@ index b95b8852aa..1c0ba6161d 100644
{
*address = proc;
ret = STATUS_SUCCESS;
@@ -3099,6 +3192,7 @@ void WINAPI LdrInitializeThunk( void *kernel_start, ULONG_PTR unknown2,
@@ -3128,6 +3221,7 @@ void WINAPI LdrInitializeThunk( void *kernel_start, ULONG_PTR unknown2,
if (!peb->ProcessParameters->WindowTitle.Buffer)
peb->ProcessParameters->WindowTitle = wm->ldr.FullDllName;
version_init( wm->ldr.FullDllName.Buffer );
@@ -141,7 +141,7 @@ index b95b8852aa..1c0ba6161d 100644
LdrQueryImageFileExecutionOptions( &peb->ProcessParameters->ImagePathName, globalflagW,
diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h
index 443c86000d..ba4adff249 100644
index 6549a71fc0..6e51612380 100644
--- a/dlls/ntdll/ntdll_misc.h
+++ b/dlls/ntdll/ntdll_misc.h
@@ -266,6 +266,11 @@ extern HANDLE keyed_event DECLSPEC_HIDDEN;
@@ -157,5 +157,5 @@ index 443c86000d..ba4adff249 100644
extern BOOL read_process_time(int unix_pid, int unix_tid, unsigned long clk_tck,
LARGE_INTEGER *kernel, LARGE_INTEGER *user) DECLSPEC_HIDDEN;
--
2.11.0
2.12.2

Some files were not shown because too many files have changed in this diff Show More