You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-04-13 14:42:51 -07:00
Compare commits
37 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
20d1f21514 | ||
|
7ad2ee4c60 | ||
|
d00088e0fa | ||
|
633cceca94 | ||
|
46006c692a | ||
|
d56994dbfa | ||
|
5e70613512 | ||
|
6a14f80fdc | ||
|
5d38a0fed0 | ||
|
8748402001 | ||
|
171d05fffe | ||
|
975205155e | ||
|
d6c145fbf5 | ||
|
3207980517 | ||
|
1bbe50aae8 | ||
|
bb180d38cc | ||
|
c542f2432d | ||
|
a36a97233a | ||
|
f8e955a95a | ||
|
d966bece72 | ||
|
1447b56eeb | ||
|
afe018692b | ||
|
52b5c90303 | ||
|
4a4ebec642 | ||
|
35ea3890a7 | ||
|
26438ad74c | ||
|
31212d2845 | ||
|
a08b6b2b62 | ||
|
9985fe9035 | ||
|
3aa965e97f | ||
|
2e479e0954 | ||
|
9fe12a2175 | ||
|
d7c0a975ea | ||
|
eb4a245bbb | ||
|
5282f297be | ||
|
1446da2c50 | ||
|
2db34eca39 |
@@ -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
|
||||
|
@@ -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
|
||||
|
2
patches/advapi32-BuildSecurityDescriptor/definition
Normal file
2
patches/advapi32-BuildSecurityDescriptor/definition
Normal file
@@ -0,0 +1,2 @@
|
||||
Fixes: Initial implementation of advapi32.BuildSecurityDescriptorW
|
||||
Depends: server-LABEL_SECURITY_INFORMATION
|
@@ -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
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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, ®_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, ®_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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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
Reference in New Issue
Block a user