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
16 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
4af8ffc7f2 | ||
|
4801f89bba | ||
|
9e260976b4 | ||
|
48e37a9f7c | ||
|
c9330ebfa3 | ||
|
9832547e5c | ||
|
792181ca4e | ||
|
409261dc56 | ||
|
bd3bf6c3b0 | ||
|
6eb6431a82 | ||
|
eb4096dc62 | ||
|
bff60a3afb | ||
|
d61501a68f | ||
|
5b388bb912 | ||
|
3e2b8a53bb | ||
|
de87a73aac |
@@ -1,268 +0,0 @@
|
||||
From 95fd708dbdd9f8d61fdd8f1571c44e98c54b8988 Mon Sep 17 00:00:00 2001
|
||||
From: Andrew Wesie <awesie@gmail.com>
|
||||
Date: Tue, 2 May 2017 00:59:49 -0500
|
||||
Subject: [PATCH] advapi32: Implement BuildSecurityDescriptorW.
|
||||
|
||||
---
|
||||
dlls/advapi32/security.c | 218 +++++++++++++++++++++++++++++++++++------------
|
||||
1 file changed, 164 insertions(+), 54 deletions(-)
|
||||
|
||||
diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c
|
||||
index 6f4fb44..3737827 100644
|
||||
--- a/dlls/advapi32/security.c
|
||||
+++ b/dlls/advapi32/security.c
|
||||
@@ -48,6 +48,7 @@
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(advapi);
|
||||
|
||||
static BOOL ParseStringSidToSid(LPCWSTR StringSid, PSID pSid, LPDWORD cBytes);
|
||||
+static DWORD trustee_to_sid(DWORD nDestinationSidLength, PSID pDestinationSid, PTRUSTEEW pTrustee);
|
||||
|
||||
typedef struct _ACEFLAG
|
||||
{
|
||||
@@ -1255,16 +1256,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;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
@@ -3754,6 +3861,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.@]
|
||||
*/
|
||||
@@ -3849,56 +4006,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 */
|
||||
--
|
||||
1.9.1
|
||||
|
@@ -1,69 +0,0 @@
|
||||
From 09d62cfc4fa999eacc89af2ad414810e22c910a9 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 ca5edffae5..db5a0f934c 100644
|
||||
--- a/dlls/advapi32/tests/security.c
|
||||
+++ b/dlls/advapi32/tests/security.c
|
||||
@@ -7217,6 +7217,44 @@ static void test_GetExplicitEntriesFromAclW(void)
|
||||
HeapFree(GetProcessHeap(), 0, old_acl);
|
||||
}
|
||||
|
||||
+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();
|
||||
@@ -7271,6 +7309,7 @@ START_TEST(security)
|
||||
test_maximum_allowed();
|
||||
test_token_label();
|
||||
test_GetExplicitEntriesFromAclW();
|
||||
+ test_BuildSecurityDescriptorW();
|
||||
|
||||
/* Must be the last test, modifies process token */
|
||||
test_token_security_descriptor();
|
||||
--
|
||||
2.13.1
|
||||
|
@@ -1 +0,0 @@
|
||||
Fixes: [37594] Initial implementation of advapi32.BuildSecurityDescriptorW
|
@@ -1,4 +1,4 @@
|
||||
From 05b8bc95cff5742cf02b67afa3d6fc875d26e041 Mon Sep 17 00:00:00 2001
|
||||
From 0616176a3276be4ae49dc86c7d96b11240afca78 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sun, 6 Aug 2017 03:15:34 +0200
|
||||
Subject: [PATCH] programs/runas: Basic implementation for starting processes
|
||||
@@ -17,10 +17,10 @@ Subject: [PATCH] programs/runas: Basic implementation for starting processes
|
||||
create mode 100644 programs/runas/runas.rc
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index cfc2080..5c97c1c 100644
|
||||
index b9ef668..404ab7a 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -3847,6 +3847,7 @@ WINE_CONFIG_MAKEFILE(programs/regedit/tests)
|
||||
@@ -3879,6 +3879,7 @@ WINE_CONFIG_MAKEFILE(programs/regedit/tests)
|
||||
WINE_CONFIG_MAKEFILE(programs/regsvcs)
|
||||
WINE_CONFIG_MAKEFILE(programs/regsvr32)
|
||||
WINE_CONFIG_MAKEFILE(programs/rpcss)
|
||||
@@ -44,7 +44,7 @@ index 0000000..be9434b
|
||||
+RC_SRCS = runas.rc
|
||||
diff --git a/programs/runas/runas.c b/programs/runas/runas.c
|
||||
new file mode 100644
|
||||
index 0000000..cfd1c73
|
||||
index 0000000..8e96aff
|
||||
--- /dev/null
|
||||
+++ b/programs/runas/runas.c
|
||||
@@ -0,0 +1,214 @@
|
||||
@@ -125,7 +125,7 @@ index 0000000..cfd1c73
|
||||
+ LocalFree(str);
|
||||
+}
|
||||
+
|
||||
+static void __cdecl output_message(unsigned int id, ...)
|
||||
+static void WINAPIV output_message(unsigned int id, ...)
|
||||
+{
|
||||
+ WCHAR fmt[1024];
|
||||
+ __ms_va_list va_args;
|
||||
@@ -340,5 +340,5 @@ index 0000000..f9297a4
|
||||
+ %2!u!: %3\n"
|
||||
+}
|
||||
--
|
||||
1.9.1
|
||||
2.7.4
|
||||
|
||||
|
@@ -1,43 +0,0 @@
|
||||
From 4e75102aea7a341d58ca1326639b3d4b795e82d3 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sun, 17 Jan 2016 01:37:09 +0100
|
||||
Subject: [PATCH 1/7] include/roapi.h: Add further typedefs.
|
||||
|
||||
---
|
||||
include/roapi.h | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/include/roapi.h b/include/roapi.h
|
||||
index 0421fe9..f4154f8 100644
|
||||
--- a/include/roapi.h
|
||||
+++ b/include/roapi.h
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2014 Martin Storsjo
|
||||
+ * Copyright (C) 2016 Michael MĂĽller
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
@@ -20,6 +21,7 @@
|
||||
#define __WINE_ROAPI_H
|
||||
|
||||
#include <windef.h>
|
||||
+#include <activation.h>
|
||||
|
||||
typedef enum
|
||||
{
|
||||
@@ -27,6 +29,11 @@ typedef enum
|
||||
RO_INIT_MULTITHREADED = 1,
|
||||
} RO_INIT_TYPE;
|
||||
|
||||
+DECLARE_HANDLE(APARTMENT_SHUTDOWN_REGISTRATION_COOKIE);
|
||||
+
|
||||
+typedef struct {} *RO_REGISTRATION_COOKIE;
|
||||
+typedef HRESULT (WINAPI *PFNGETACTIVATIONFACTORY)(HSTRING, IActivationFactory **);
|
||||
+
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
--
|
||||
1.9.1
|
||||
|
@@ -1,38 +1,40 @@
|
||||
From 2c4ebd2e8f4cfdded1b93f26e74139e88ca94f78 Mon Sep 17 00:00:00 2001
|
||||
From bdc2d668649d5810b88bcdd842228f7d44d7a012 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Fri, 7 Jul 2017 05:44:09 +0200
|
||||
Subject: [PATCH 1/4] d3d11/tests: Add some basic depth tests.
|
||||
Subject: [PATCH] d3d11/tests: Add some basic depth tests.
|
||||
|
||||
---
|
||||
dlls/d3d11/tests/d3d11.c | 209 ++++++++++++++++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 206 insertions(+), 3 deletions(-)
|
||||
dlls/d3d11/tests/d3d11.c | 210 ++++++++++++++++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 207 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c
|
||||
index 5a36bc2..9d9d74b 100644
|
||||
index 8279e7b..5831bbc 100644
|
||||
--- a/dlls/d3d11/tests/d3d11.c
|
||||
+++ b/dlls/d3d11/tests/d3d11.c
|
||||
@@ -1458,8 +1458,9 @@ static void set_quad_color(struct d3d11_test_context *context, const struct vec4
|
||||
@@ -1476,10 +1476,11 @@ static void set_quad_color(struct d3d11_test_context *context, const struct vec4
|
||||
(ID3D11Resource *)context->ps_cb, 0, NULL, color, 0, 0);
|
||||
}
|
||||
|
||||
-#define draw_color_quad(context, color) draw_color_quad_(__LINE__, context, color)
|
||||
-static void draw_color_quad_(unsigned int line, struct d3d11_test_context *context, const struct vec4 *color)
|
||||
+#define draw_color_quad(context, color) draw_color_quad_(__LINE__, context, color, 0.0)
|
||||
+#define draw_color_quad_z(context, color, z) draw_color_quad_(__LINE__, context, color, z)
|
||||
+static void draw_color_quad_(unsigned int line, struct d3d11_test_context *context, const struct vec4 *color, float z)
|
||||
-#define draw_color_quad(a, b) draw_color_quad_(__LINE__, a, b, NULL, 0)
|
||||
-#define draw_color_quad_vs(a, b, c, d) draw_color_quad_(__LINE__, a, b, c, d)
|
||||
+#define draw_color_quad(a, b) draw_color_quad_(__LINE__, a, b, NULL, 0, 0.0)
|
||||
+#define draw_color_quad_vs(a, b, c, d) draw_color_quad_(__LINE__, a, b, c, d, 0.0)
|
||||
+#define draw_color_quad_z(context, color, z) draw_color_quad_(__LINE__, context, color, NULL, 0, z)
|
||||
static void draw_color_quad_(unsigned int line, struct d3d11_test_context *context,
|
||||
- const struct vec4 *color, const DWORD *vs_code, size_t vs_code_size)
|
||||
+ const struct vec4 *color, const DWORD *vs_code, size_t vs_code_size, float z)
|
||||
{
|
||||
static const DWORD ps_color_code[] =
|
||||
{
|
||||
@@ -1501,7 +1502,7 @@ static void draw_color_quad_(unsigned int line, struct d3d11_test_context *conte
|
||||
|
||||
@@ -1522,6 +1523,7 @@ static void draw_color_quad_(unsigned int line, struct d3d11_test_context *conte
|
||||
set_quad_color(context, color);
|
||||
|
||||
- draw_quad_(line, context);
|
||||
draw_quad_vs_(line, context, vs_code, vs_code_size);
|
||||
+ draw_quad_z_(line, context, z);
|
||||
}
|
||||
|
||||
static void test_create_device(void)
|
||||
@@ -16776,6 +16777,207 @@ static void test_stencil_separate(void)
|
||||
@@ -17583,6 +17585,207 @@ static void test_stencil_separate(void)
|
||||
release_test_context(&test_context);
|
||||
}
|
||||
|
||||
@@ -240,7 +242,7 @@ index 5a36bc2..9d9d74b 100644
|
||||
static void test_uav_load(void)
|
||||
{
|
||||
struct shader
|
||||
@@ -25115,6 +25317,7 @@ START_TEST(d3d11)
|
||||
@@ -26490,6 +26693,7 @@ START_TEST(d3d11)
|
||||
test_shader_input_registers_limits();
|
||||
test_unbind_shader_resource_view();
|
||||
test_stencil_separate();
|
||||
@@ -249,5 +251,5 @@ index 5a36bc2..9d9d74b 100644
|
||||
test_cs_uav_store();
|
||||
test_uav_store_immediate_constant();
|
||||
--
|
||||
2.7.4
|
||||
1.9.1
|
||||
|
||||
|
@@ -1,25 +0,0 @@
|
||||
From d359c245dd87648c1f2002c2a865271c4c9aff8f Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sun, 28 May 2017 05:45:01 +0200
|
||||
Subject: d3d11: Silence ID3D11Device_GetDeviceRemovedReason.
|
||||
|
||||
---
|
||||
dlls/d3d11/device.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
|
||||
index bc28b4a5446..c78a4a755d8 100644
|
||||
--- a/dlls/d3d11/device.c
|
||||
+++ b/dlls/d3d11/device.c
|
||||
@@ -5749,7 +5749,7 @@ static UINT STDMETHODCALLTYPE d3d11_device_GetCreationFlags(ID3D11Device *iface)
|
||||
|
||||
static HRESULT STDMETHODCALLTYPE d3d11_device_GetDeviceRemovedReason(ID3D11Device *iface)
|
||||
{
|
||||
- FIXME("iface %p stub!\n", iface);
|
||||
+ TRACE("iface %p stub!\n", iface);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
--
|
||||
2.12.2
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 89e0f1fded64240d2f59fd800232e9e9f8dd90d2 Mon Sep 17 00:00:00 2001
|
||||
From 5353d54df3ddf2f7bb62ea0214e040aa391b596f Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Fri, 4 Mar 2016 22:22:42 +0100
|
||||
Subject: [PATCH] ddraw: Set ddsOldCaps correctly in ddraw7_GetCaps.
|
||||
@@ -12,7 +12,7 @@ Subject: [PATCH] ddraw: Set ddsOldCaps correctly in ddraw7_GetCaps.
|
||||
5 files changed, 106 insertions(+)
|
||||
|
||||
diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
|
||||
index 33e18b8..2628b76 100644
|
||||
index 33e18b8d6ab..2628b7654f4 100644
|
||||
--- a/dlls/ddraw/ddraw.c
|
||||
+++ b/dlls/ddraw/ddraw.c
|
||||
@@ -1542,6 +1542,8 @@ static HRESULT WINAPI ddraw7_GetCaps(IDirectDraw7 *iface, DDCAPS *DriverCaps, DD
|
||||
@@ -25,10 +25,10 @@ index 33e18b8..2628b76 100644
|
||||
|
||||
if(DriverCaps)
|
||||
diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c
|
||||
index c63ddee..b9eec25 100644
|
||||
index fb0858f253b..b7becc389cb 100644
|
||||
--- a/dlls/ddraw/tests/ddraw1.c
|
||||
+++ b/dlls/ddraw/tests/ddraw1.c
|
||||
@@ -11373,6 +11373,31 @@ static void test_execute_data(void)
|
||||
@@ -11415,6 +11415,31 @@ static void test_execute_data(void)
|
||||
DestroyWindow(window);
|
||||
}
|
||||
|
||||
@@ -57,20 +57,22 @@ index c63ddee..b9eec25 100644
|
||||
+ IDirectDraw_Release(ddraw);
|
||||
+}
|
||||
+
|
||||
START_TEST(ddraw1)
|
||||
static void test_viewport(void)
|
||||
{
|
||||
DDDEVICEIDENTIFIER identifier;
|
||||
@@ -11475,4 +11500,5 @@ START_TEST(ddraw1)
|
||||
static struct
|
||||
@@ -11690,6 +11715,7 @@ START_TEST(ddraw1)
|
||||
test_depth_readback();
|
||||
test_clear();
|
||||
test_enum_surfaces();
|
||||
test_execute_data();
|
||||
+ test_caps();
|
||||
test_execute_data();
|
||||
test_viewport();
|
||||
}
|
||||
diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c
|
||||
index 1ab1f9c..272f364 100644
|
||||
index c2b438cf2ae..61857991f8f 100644
|
||||
--- a/dlls/ddraw/tests/ddraw2.c
|
||||
+++ b/dlls/ddraw/tests/ddraw2.c
|
||||
@@ -12646,6 +12646,31 @@ static void test_enum_surfaces(void)
|
||||
@@ -12677,6 +12677,31 @@ static void test_enum_surfaces(void)
|
||||
IDirectDraw2_Release(ddraw);
|
||||
}
|
||||
|
||||
@@ -99,21 +101,22 @@ index 1ab1f9c..272f364 100644
|
||||
+ IDirectDraw2_Release(ddraw);
|
||||
+}
|
||||
+
|
||||
START_TEST(ddraw2)
|
||||
static void test_viewport(void)
|
||||
{
|
||||
DDDEVICEIDENTIFIER identifier;
|
||||
@@ -12756,4 +12781,5 @@ START_TEST(ddraw2)
|
||||
static struct
|
||||
@@ -12981,5 +13006,6 @@ START_TEST(ddraw2)
|
||||
test_depth_readback();
|
||||
test_clear();
|
||||
test_enum_surfaces();
|
||||
+ test_caps();
|
||||
test_viewport();
|
||||
}
|
||||
diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c
|
||||
index 550d73a..f3c020c 100644
|
||||
index 9c4c5a3e5b2..6eebcb30311 100644
|
||||
--- a/dlls/ddraw/tests/ddraw4.c
|
||||
+++ b/dlls/ddraw/tests/ddraw4.c
|
||||
@@ -14751,6 +14751,31 @@ static void test_enum_surfaces(void)
|
||||
IDirectDraw4_Release(ddraw);
|
||||
@@ -14957,6 +14957,31 @@ static void test_viewport(void)
|
||||
DestroyWindow(window);
|
||||
}
|
||||
|
||||
+static void test_caps(void)
|
||||
@@ -144,14 +147,14 @@ index 550d73a..f3c020c 100644
|
||||
START_TEST(ddraw4)
|
||||
{
|
||||
DDDEVICEIDENTIFIER identifier;
|
||||
@@ -14875,4 +14900,5 @@ START_TEST(ddraw4)
|
||||
test_depth_readback();
|
||||
@@ -15082,4 +15107,5 @@ START_TEST(ddraw4)
|
||||
test_clear();
|
||||
test_enum_surfaces();
|
||||
test_viewport();
|
||||
+ test_caps();
|
||||
}
|
||||
diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c
|
||||
index b4910c1..bf1e1cf 100644
|
||||
index b4910c196cd..bf1e1cf1207 100644
|
||||
--- a/dlls/ddraw/tests/ddraw7.c
|
||||
+++ b/dlls/ddraw/tests/ddraw7.c
|
||||
@@ -14289,6 +14289,31 @@ static void test_viewport(void)
|
||||
@@ -193,5 +196,5 @@ index b4910c1..bf1e1cf 100644
|
||||
+ test_caps();
|
||||
}
|
||||
--
|
||||
1.9.1
|
||||
2.17.0
|
||||
|
||||
|
@@ -0,0 +1,26 @@
|
||||
From 012441a764762063b3037d060769fea4356a295c Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Wed, 18 Apr 2018 03:55:14 +0000
|
||||
Subject: [PATCH] dxgi: Return S_OK in SetMaximumFrameLatency
|
||||
|
||||
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
---
|
||||
dlls/dxgi/device.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/dxgi/device.c b/dlls/dxgi/device.c
|
||||
index c266cae..ee5f3e6 100644
|
||||
--- a/dlls/dxgi/device.c
|
||||
+++ b/dlls/dxgi/device.c
|
||||
@@ -262,7 +262,7 @@ static HRESULT STDMETHODCALLTYPE dxgi_device_SetMaximumFrameLatency(IWineDXGIDev
|
||||
if (max_latency > DXGI_FRAME_LATENCY_MAX)
|
||||
return DXGI_ERROR_INVALID_CALL;
|
||||
|
||||
- return E_NOTIMPL;
|
||||
+ return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT STDMETHODCALLTYPE dxgi_device_GetMaximumFrameLatency(IWineDXGIDevice *iface, UINT *max_latency)
|
||||
--
|
||||
1.9.1
|
||||
|
1
patches/dxgi-SetMaximumFrameLatency/definition
Normal file
1
patches/dxgi-SetMaximumFrameLatency/definition
Normal file
@@ -0,0 +1 @@
|
||||
Fixes: [44061] Return S_OK from GetMaximumFrameLatency
|
@@ -1,4 +1,4 @@
|
||||
From 1cb4681d22018a93485336d10b73b3a6a05a34a0 Mon Sep 17 00:00:00 2001
|
||||
From e78ec7f2036c1bdf46d4ecc7db1574847ca7f54f Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Fri, 1 Apr 2016 01:29:51 +0200
|
||||
Subject: [PATCH] fsutil: Add fsutil program with support for creating hard
|
||||
@@ -67,7 +67,7 @@ index 0000000..593f817
|
||||
+ STRING_HARDLINK_CREATE_USAGE, "Syntax: fsutil hardlink create old new\n\n"
|
||||
+}
|
||||
diff --git a/programs/fsutil/main.c b/programs/fsutil/main.c
|
||||
index 2bce87e..41370b5 100644
|
||||
index 2bce87e..5084196 100644
|
||||
--- a/programs/fsutil/main.c
|
||||
+++ b/programs/fsutil/main.c
|
||||
@@ -1,5 +1,6 @@
|
||||
@@ -129,7 +129,7 @@ index 2bce87e..41370b5 100644
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int __cdecl output_string(int msg, ...)
|
||||
+static int WINAPIV output_string(int msg, ...)
|
||||
+{
|
||||
+ WCHAR fmt[8192];
|
||||
+ __ms_va_list arguments;
|
||||
|
@@ -1,78 +0,0 @@
|
||||
From 1b1bec9415d3ed3ada5ed6fbc5e4d9a30797cbc9 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sat, 31 Oct 2015 02:27:14 +0100
|
||||
Subject: hnetcfg: Improve
|
||||
INetFwAuthorizedApplication::get_ProcessImageFileName stub.
|
||||
|
||||
---
|
||||
dlls/hnetcfg/apps.c | 26 ++++++++++++++++++++++++--
|
||||
1 file changed, 24 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/hnetcfg/apps.c b/dlls/hnetcfg/apps.c
|
||||
index d21ed98..7a8d5e8 100644
|
||||
--- a/dlls/hnetcfg/apps.c
|
||||
+++ b/dlls/hnetcfg/apps.c
|
||||
@@ -38,6 +38,7 @@ typedef struct fw_app
|
||||
{
|
||||
INetFwAuthorizedApplication INetFwAuthorizedApplication_iface;
|
||||
LONG refs;
|
||||
+ BSTR filename;
|
||||
} fw_app;
|
||||
|
||||
static inline fw_app *impl_from_INetFwAuthorizedApplication( INetFwAuthorizedApplication *iface )
|
||||
@@ -60,6 +61,7 @@ static ULONG WINAPI fw_app_Release(
|
||||
if (!refs)
|
||||
{
|
||||
TRACE("destroying %p\n", fw_app);
|
||||
+ if (fw_app->filename) SysFreeString( fw_app->filename );
|
||||
HeapFree( GetProcessHeap(), 0, fw_app );
|
||||
}
|
||||
return refs;
|
||||
@@ -250,7 +252,18 @@ static HRESULT WINAPI fw_app_get_ProcessImageFileName(
|
||||
fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
|
||||
|
||||
FIXME("%p, %p\n", This, imageFileName);
|
||||
- return E_NOTIMPL;
|
||||
+
|
||||
+ if (!imageFileName)
|
||||
+ return E_INVALIDARG;
|
||||
+
|
||||
+ if (!This->filename)
|
||||
+ {
|
||||
+ *imageFileName = NULL;
|
||||
+ return S_OK;
|
||||
+ }
|
||||
+
|
||||
+ *imageFileName = SysAllocString( This->filename );
|
||||
+ return *imageFileName ? S_OK : E_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI fw_app_put_ProcessImageFileName(
|
||||
@@ -260,7 +273,15 @@ static HRESULT WINAPI fw_app_put_ProcessImageFileName(
|
||||
fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
|
||||
|
||||
FIXME("%p, %s\n", This, debugstr_w(imageFileName));
|
||||
- return S_OK;
|
||||
+
|
||||
+ if (!imageFileName)
|
||||
+ {
|
||||
+ This->filename = NULL;
|
||||
+ return S_OK;
|
||||
+ }
|
||||
+
|
||||
+ This->filename = SysAllocString( imageFileName );
|
||||
+ return This->filename ? S_OK : E_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI fw_app_get_IpVersion(
|
||||
@@ -383,6 +404,7 @@ HRESULT NetFwAuthorizedApplication_create( IUnknown *pUnkOuter, LPVOID *ppObj )
|
||||
|
||||
fa->INetFwAuthorizedApplication_iface.lpVtbl = &fw_app_vtbl;
|
||||
fa->refs = 1;
|
||||
+ fa->filename = NULL;
|
||||
|
||||
*ppObj = &fa->INetFwAuthorizedApplication_iface;
|
||||
|
||||
--
|
||||
2.6.1
|
||||
|
@@ -1 +0,0 @@
|
||||
Fixes: Improve INetFwAuthorizedApplication::get_ProcessImageFileName stub
|
@@ -1,101 +0,0 @@
|
||||
From accdfe8f540d28911a56df946bee00d589778b2a Mon Sep 17 00:00:00 2001
|
||||
From: Qian Hong <qhong@codeweavers.com>
|
||||
Date: Sat, 6 Jun 2015 09:24:00 +0800
|
||||
Subject: kernel32: Init TimezoneInformation registry.
|
||||
|
||||
---
|
||||
dlls/kernel32/kernel_main.c | 3 +++
|
||||
dlls/kernel32/kernel_private.h | 3 +++
|
||||
dlls/kernel32/time.c | 48 ++++++++++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 54 insertions(+)
|
||||
|
||||
diff --git a/dlls/kernel32/kernel_main.c b/dlls/kernel32/kernel_main.c
|
||||
index e24100b..d3420ec 100644
|
||||
--- a/dlls/kernel32/kernel_main.c
|
||||
+++ b/dlls/kernel32/kernel_main.c
|
||||
@@ -88,6 +88,9 @@ static BOOL process_attach( HMODULE module )
|
||||
/* Setup registry locale information */
|
||||
LOCALE_InitRegistry();
|
||||
|
||||
+ /* Setup registry timezone information */
|
||||
+ TIMEZONE_InitRegistry();
|
||||
+
|
||||
/* Setup computer name */
|
||||
COMPUTERNAME_Init();
|
||||
|
||||
diff --git a/dlls/kernel32/kernel_private.h b/dlls/kernel32/kernel_private.h
|
||||
index 76611d7..2d4ba02 100644
|
||||
--- a/dlls/kernel32/kernel_private.h
|
||||
+++ b/dlls/kernel32/kernel_private.h
|
||||
@@ -104,6 +104,9 @@ extern void COMPUTERNAME_Init(void) DECLSPEC_HIDDEN;
|
||||
extern void LOCALE_Init(void) DECLSPEC_HIDDEN;
|
||||
extern void LOCALE_InitRegistry(void) DECLSPEC_HIDDEN;
|
||||
|
||||
+/* time.c */
|
||||
+extern void TIMEZONE_InitRegistry(void) DECLSPEC_HIDDEN;
|
||||
+
|
||||
/* oldconfig.c */
|
||||
extern void convert_old_config(void) DECLSPEC_HIDDEN;
|
||||
|
||||
diff --git a/dlls/kernel32/time.c b/dlls/kernel32/time.c
|
||||
index daafc7f..43c2f80 100644
|
||||
--- a/dlls/kernel32/time.c
|
||||
+++ b/dlls/kernel32/time.c
|
||||
@@ -581,6 +581,54 @@ static void TIME_ClockTimeToFileTime(clock_t unix_time, LPFILETIME filetime)
|
||||
filetime->dwHighDateTime = (DWORD)(secs >> 32);
|
||||
}
|
||||
|
||||
+/***********************************************************************
|
||||
+ * TIMEZONE_InitRegistry
|
||||
+ *
|
||||
+ * Update registry contents on startup if the user timezone has changed.
|
||||
+ * This simulates the action of the Windows control panel.
|
||||
+ */
|
||||
+void TIMEZONE_InitRegistry(void)
|
||||
+{
|
||||
+ static const WCHAR szTimezoneInformation[] = {
|
||||
+ 'M','a','c','h','i','n','e','\\','S','y','s','t','e','m','\\',
|
||||
+ 'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
|
||||
+ 'C','o','n','t','r','o','l','\\',
|
||||
+ 'T','i','m','e','Z','o','n','e','I','n','f','o','r','m','a','t','i','o','n','\0'
|
||||
+ };
|
||||
+ WCHAR standardnameW[] = {'S','t','a','n','d','a','r','d','N','a','m','e','\0'};
|
||||
+ WCHAR timezonekeynameW[] = {'T','i','m','e','Z','o','n','e','K','e','y','N','a','m','e','\0'};
|
||||
+ DYNAMIC_TIME_ZONE_INFORMATION tzinfo;
|
||||
+ UNICODE_STRING keyName;
|
||||
+ OBJECT_ATTRIBUTES attr;
|
||||
+ HANDLE hkey;
|
||||
+ DWORD tzid;
|
||||
+
|
||||
+ tzid = GetDynamicTimeZoneInformation(&tzinfo);
|
||||
+ if (tzid == TIME_ZONE_ID_INVALID)
|
||||
+ {
|
||||
+ ERR("fail to get timezone information.\n");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ RtlInitUnicodeString(&keyName, szTimezoneInformation);
|
||||
+ InitializeObjectAttributes(&attr, &keyName, 0, 0, NULL);
|
||||
+ if (NtCreateKey(&hkey, KEY_ALL_ACCESS, &attr, 0, NULL, 0, NULL) != STATUS_SUCCESS)
|
||||
+ {
|
||||
+ ERR("fail to create timezone information key.\n");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ RtlInitUnicodeString(&keyName, standardnameW);
|
||||
+ NtSetValueKey(hkey, &keyName, 0, REG_SZ, tzinfo.StandardName,
|
||||
+ (strlenW(tzinfo.StandardName) + 1) * sizeof(WCHAR));
|
||||
+
|
||||
+ RtlInitUnicodeString(&keyName, timezonekeynameW);
|
||||
+ NtSetValueKey(hkey, &keyName, 0, REG_SZ, tzinfo.TimeZoneKeyName,
|
||||
+ (strlenW(tzinfo.TimeZoneKeyName) + 1) * sizeof(WCHAR));
|
||||
+
|
||||
+ NtClose( hkey );
|
||||
+}
|
||||
+
|
||||
/*********************************************************************
|
||||
* GetProcessTimes (KERNEL32.@)
|
||||
*
|
||||
--
|
||||
2.4.2
|
||||
|
@@ -1 +0,0 @@
|
||||
Fixes: Initialize System\CurrentControlSet\Control\TimeZoneInformation registry keys
|
@@ -1,99 +0,0 @@
|
||||
From 314e990c95edd137695f81edb0ce138615cd11b0 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Mon, 26 Jun 2017 16:18:09 +0200
|
||||
Subject: msi: Create dummy thread to initialize COM for custom actions.
|
||||
|
||||
---
|
||||
dlls/msi/action.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 48 insertions(+)
|
||||
|
||||
diff --git a/dlls/msi/action.c b/dlls/msi/action.c
|
||||
index 58a831e7e63..e440ee77fd9 100644
|
||||
--- a/dlls/msi/action.c
|
||||
+++ b/dlls/msi/action.c
|
||||
@@ -160,6 +160,13 @@ static const WCHAR szWriteEnvironmentStrings[] =
|
||||
static const WCHAR szINSTALL[] =
|
||||
{'I','N','S','T','A','L','L',0};
|
||||
|
||||
+struct dummy_thread
|
||||
+{
|
||||
+ HANDLE started;
|
||||
+ HANDLE stopped;
|
||||
+ HANDLE thread;
|
||||
+};
|
||||
+
|
||||
static INT ui_actionstart(MSIPACKAGE *package, LPCWSTR action, LPCWSTR description, LPCWSTR template)
|
||||
{
|
||||
WCHAR query[] = {'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
|
||||
@@ -7968,6 +7975,42 @@ static UINT ACTION_PerformActionSequence(MSIPACKAGE *package, UINT seq)
|
||||
return rc;
|
||||
}
|
||||
|
||||
+DWORD WINAPI dummy_thread_proc(void *arg)
|
||||
+{
|
||||
+ struct dummy_thread *info = arg;
|
||||
+ HRESULT hr;
|
||||
+
|
||||
+ hr = CoInitializeEx(0, COINIT_MULTITHREADED);
|
||||
+ if (FAILED(hr)) ERR("CoInitializeEx failed %08x\n", hr);
|
||||
+
|
||||
+ SetEvent(info->started);
|
||||
+ WaitForSingleObject(info->stopped, INFINITE);
|
||||
+
|
||||
+ CoUninitialize();
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void start_dummy_thread(struct dummy_thread *info)
|
||||
+{
|
||||
+ if (!(info->started = CreateEventA(NULL, TRUE, FALSE, NULL))) return;
|
||||
+ if (!(info->stopped = CreateEventA(NULL, TRUE, FALSE, NULL))) return;
|
||||
+ if (!(info->thread = CreateThread(NULL, 0, dummy_thread_proc, info, 0, NULL))) return;
|
||||
+
|
||||
+ WaitForSingleObject(info->started, INFINITE);
|
||||
+}
|
||||
+
|
||||
+static void stop_dummy_thread(struct dummy_thread *info)
|
||||
+{
|
||||
+ if (info->thread)
|
||||
+ {
|
||||
+ SetEvent(info->stopped);
|
||||
+ WaitForSingleObject(info->thread, INFINITE);
|
||||
+ CloseHandle(info->thread);
|
||||
+ }
|
||||
+ if (info->started) CloseHandle(info->started);
|
||||
+ if (info->stopped) CloseHandle(info->stopped);
|
||||
+}
|
||||
+
|
||||
/****************************************************
|
||||
* TOP level entry points
|
||||
*****************************************************/
|
||||
@@ -7978,6 +8021,7 @@ UINT MSI_InstallPackage( MSIPACKAGE *package, LPCWSTR szPackagePath,
|
||||
static const WCHAR szDisableRollback[] = {'D','I','S','A','B','L','E','R','O','L','L','B','A','C','K',0};
|
||||
static const WCHAR szAction[] = {'A','C','T','I','O','N',0};
|
||||
WCHAR *reinstall = NULL, *productcode, *action;
|
||||
+ struct dummy_thread thread_info = {NULL, NULL, NULL};
|
||||
UINT rc;
|
||||
DWORD len = 0;
|
||||
|
||||
@@ -8034,6 +8078,8 @@ UINT MSI_InstallPackage( MSIPACKAGE *package, LPCWSTR szPackagePath,
|
||||
msi_adjust_privilege_properties( package );
|
||||
msi_set_context( package );
|
||||
|
||||
+ start_dummy_thread(&thread_info);
|
||||
+
|
||||
productcode = msi_dup_property( package->db, szProductCode );
|
||||
if (strcmpiW( productcode, package->ProductCode ))
|
||||
{
|
||||
@@ -8070,6 +8116,8 @@ UINT MSI_InstallPackage( MSIPACKAGE *package, LPCWSTR szPackagePath,
|
||||
/* finish up running custom actions */
|
||||
ACTION_FinishCustomActions(package);
|
||||
|
||||
+ stop_dummy_thread(&thread_info);
|
||||
+
|
||||
if (package->need_rollback && !(reinstall = msi_dup_property( package->db, szReinstall )))
|
||||
{
|
||||
WARN("installation failed, running rollback script\n");
|
||||
--
|
||||
2.14.2
|
||||
|
@@ -1 +0,0 @@
|
||||
Fixes: [18070] Workaround COM/MTA issues due to lack of separate msi custom action process
|
@@ -1,28 +1,25 @@
|
||||
From abb41fbea240e18b6bec38f0c582b7445a60915f Mon Sep 17 00:00:00 2001
|
||||
From 21028049055c1f65d72baf685ad9464187aada25 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Wed, 31 May 2017 03:53:05 +0200
|
||||
Subject: msi: Always return MSIDBSTATE_ERROR when MsiGetDatabaseState is
|
||||
called from a custom action.
|
||||
|
||||
---
|
||||
dlls/msi/database.c | 10 +---------
|
||||
1 file changed, 1 insertion(+), 9 deletions(-)
|
||||
dlls/msi/database.c | 7 +------
|
||||
1 file changed, 1 insertion(+), 6 deletions(-)
|
||||
|
||||
diff --git a/dlls/msi/database.c b/dlls/msi/database.c
|
||||
index d3104b0ff22..6a138d6b816 100644
|
||||
index d3eb910..47a99fa 100644
|
||||
--- a/dlls/msi/database.c
|
||||
+++ b/dlls/msi/database.c
|
||||
@@ -2005,16 +2005,8 @@ MSIDBSTATE WINAPI MsiGetDatabaseState( MSIHANDLE handle )
|
||||
@@ -1890,13 +1890,8 @@ MSIDBSTATE WINAPI MsiGetDatabaseState( MSIHANDLE handle )
|
||||
db = msihandle2msiinfo( handle, MSIHANDLETYPE_DATABASE );
|
||||
if( !db )
|
||||
{
|
||||
- IWineMsiRemoteDatabase *remote_database;
|
||||
-
|
||||
- remote_database = (IWineMsiRemoteDatabase *)msi_get_remote( handle );
|
||||
- MSIHANDLE remote_database = msi_get_remote(handle);
|
||||
- if ( !remote_database )
|
||||
- return MSIDBSTATE_ERROR;
|
||||
-
|
||||
- IWineMsiRemoteDatabase_Release( remote_database );
|
||||
WARN("MsiGetDatabaseState not allowed during a custom action!\n");
|
||||
-
|
||||
- return MSIDBSTATE_READ;
|
||||
@@ -31,5 +28,5 @@ index d3104b0ff22..6a138d6b816 100644
|
||||
|
||||
if (db->mode != MSIDBOPEN_READONLY )
|
||||
--
|
||||
2.13.1
|
||||
2.7.4
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 69a28da617c7d5c361eae5ed056cac7984b4177c Mon Sep 17 00:00:00 2001
|
||||
From aa4d3f847be7541b846438956ca988d3456054b2 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,19 +10,19 @@ 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 6d63b5bf43..1d99dd7132 100644
|
||||
index 6d63b5b..1d99dd7 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 8f0c51cea9..1a0087ae14 100644
|
||||
index 88e8b33..85b0e32 100644
|
||||
--- a/dlls/ntdll/misc.c
|
||||
+++ b/dlls/ntdll/misc.c
|
||||
@@ -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;
|
||||
@@ -484,3 +484,14 @@ void WINAPI DbgUiRemoteBreakin( void *arg )
|
||||
{
|
||||
FIXME("stub\n");
|
||||
}
|
||||
+
|
||||
+/*********************************************************************
|
||||
@@ -36,7 +36,7 @@ index 8f0c51cea9..1a0087ae14 100644
|
||||
+ return TRUE;
|
||||
+}
|
||||
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
|
||||
index 9adf1edd4a..adfb2fc7ef 100644
|
||||
index c260b0d..01836a3 100644
|
||||
--- a/dlls/ntdll/ntdll.spec
|
||||
+++ b/dlls/ntdll/ntdll.spec
|
||||
@@ -3,6 +3,7 @@
|
||||
@@ -48,5 +48,5 @@ index 9adf1edd4a..adfb2fc7ef 100644
|
||||
@ stub CsrAllocateCapturePointer
|
||||
@ stub CsrAllocateMessagePointer
|
||||
--
|
||||
2.12.2
|
||||
2.7.4
|
||||
|
||||
|
1
patches/ntdll-NtContinue/definition
Normal file
1
patches/ntdll-NtContinue/definition
Normal file
@@ -0,0 +1 @@
|
||||
Fixes: [31910] Add stub for NtContinue
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user