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
185 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
498c9eae60 | ||
|
a46b9ff3dc | ||
|
6589142220 | ||
|
fd3bb06a4c | ||
|
49aafeb17b | ||
|
841e2a8cda | ||
|
4aa460b8cd | ||
|
512d0b1d30 | ||
|
ff10ae6e74 | ||
|
fcfeaf092c | ||
|
2da5f18812 | ||
|
004a5a5717 | ||
|
7447216104 | ||
|
938dddf7df | ||
|
618e349c72 | ||
|
2007f010ac | ||
|
fb4fcb4da6 | ||
|
74068f2cab | ||
|
31157f5ed4 | ||
|
3813f414ed | ||
|
c6f239ef2e | ||
|
3b3cb09acc | ||
|
5734c2c2df | ||
|
8ceae1a2a3 | ||
|
31c73c6b53 | ||
|
c205df71c7 | ||
|
010c308abd | ||
|
924665da6f | ||
|
523d4ac996 | ||
|
67035d62f7 | ||
|
35a5f7db93 | ||
|
ca09e8918c | ||
|
49b441e0df | ||
|
f901156486 | ||
|
c7780d90cb | ||
|
73f58bac41 | ||
|
ad822b6405 | ||
|
9917fb4559 | ||
|
3f06c18b19 | ||
|
2474aff2c1 | ||
|
c9b8050f9d | ||
|
2394b08005 | ||
|
276ed085b7 | ||
|
b5010c55e8 | ||
|
391055dbe1 | ||
|
7ebc640edb | ||
|
4413770af1 | ||
|
aad0b50e62 | ||
|
9fd7972c2b | ||
|
a67dca35a1 | ||
|
5d7a86d054 | ||
|
a12c030bd9 | ||
|
a0735f083d | ||
|
460094e600 | ||
|
c95aae1049 | ||
|
394c51bd20 | ||
|
0bdc57245a | ||
|
9092f3922a | ||
|
e298cdfaf9 | ||
|
b95b9109b8 | ||
|
8d19b3fc4b | ||
|
aa2ec8b32c | ||
|
944b464511 | ||
|
1b15ab1bdc | ||
|
6e530333e6 | ||
|
5ed9211eab | ||
|
e0bf5ac738 | ||
|
accf189516 | ||
|
f07181375b | ||
|
35f28c4538 | ||
|
4babcaf231 | ||
|
eba1e9b28a | ||
|
52076762ec | ||
|
e1bfd97e2b | ||
|
ca8ae3e929 | ||
|
c08046e1cc | ||
|
53dad92c83 | ||
|
82c59d7eca | ||
|
507cb29933 | ||
|
dff74f4169 | ||
|
292e3c87d9 | ||
|
fbb8eac819 | ||
|
41d6d5f39a | ||
|
ca67426420 | ||
|
3ad0475779 | ||
|
fad0c725ae | ||
|
be41345d31 | ||
|
e6f1cafdd8 | ||
|
79ed5e86aa | ||
|
3bba693408 | ||
|
be5814e428 | ||
|
ed630b8146 | ||
|
11194ea339 | ||
|
694f513d71 | ||
|
b5055c0b1b | ||
|
e07b0fa042 | ||
|
e7110e5153 | ||
|
e2fa6bd9c0 | ||
|
ed9681d9df | ||
|
1196bcb86b | ||
|
9afb244a8e | ||
|
5681cd5466 | ||
|
1d3c799e6f | ||
|
a49aa40ac8 | ||
|
1998c0570d | ||
|
245fc7913d | ||
|
a1afc6f151 | ||
|
3287f0fc9b | ||
|
671295089e | ||
|
197e08b441 | ||
|
cd1862609a | ||
|
8725e273cc | ||
|
b9204d93c9 | ||
|
e1259ef094 | ||
|
bccec28691 | ||
|
f25c0ce411 | ||
|
7fd92efae8 | ||
|
968a9068f4 | ||
|
5e5b163eba | ||
|
5bc08f5e70 | ||
|
eb91fab43e | ||
|
5b59788752 | ||
|
5634d119e0 | ||
|
52f92a42de | ||
|
6f185a694c | ||
|
0bb3121273 | ||
|
77619384a4 | ||
|
77ef8ff7ef | ||
|
831b1f895e | ||
|
071fe01910 | ||
|
1b7ebd3bb8 | ||
|
6ce73c283d | ||
|
f3e2363b52 | ||
|
6e49a945cf | ||
|
92cc7818b2 | ||
|
3134cc0b2d | ||
|
1308207a63 | ||
|
082a898ad4 | ||
|
992845eae7 | ||
|
247e77f2e8 | ||
|
76004cd4c4 | ||
|
770269393f | ||
|
29db3393bc | ||
|
b105021410 | ||
|
5f18c8565c | ||
|
f0f856a7ea | ||
|
7332164d55 | ||
|
0a153ac1a0 | ||
|
90ef849e7b | ||
|
9bfe1fe1f2 | ||
|
b1997e35c9 | ||
|
8cbbf850d1 | ||
|
dc2e2153f3 | ||
|
d6ab62c2be | ||
|
a3faa8ac8a | ||
|
c9f414b9e7 | ||
|
57370fd9ae | ||
|
7d9b7bbdf5 | ||
|
05f918ddb4 | ||
|
133bed10d3 | ||
|
00b434ec7f | ||
|
8f33477760 | ||
|
c48811407e | ||
|
547e7c81fb | ||
|
99d6f16c4e | ||
|
2e99ff1d6e | ||
|
a9282e6425 | ||
|
63eedc8289 | ||
|
fea87f9a23 | ||
|
f883c66e40 | ||
|
d8568c947a | ||
|
f61fe9f16b | ||
|
4969e2759b | ||
|
4423ea716e | ||
|
38c1f5e4d5 | ||
|
4e7071e4f1 | ||
|
a0708adf42 | ||
|
9e53a45319 | ||
|
7cc69d7707 | ||
|
39738f05d6 | ||
|
477e9faba2 | ||
|
6f1e25e1c0 | ||
|
36e84f2951 | ||
|
bfd8af12aa | ||
|
cbb09031a6 |
@@ -1,25 +0,0 @@
|
||||
From bd48f0d6b1476a77520f0bf5f82ac08e9dbf9acd Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Tue, 22 Mar 2016 21:54:01 +0100
|
||||
Subject: amstream: Avoid implicit cast of interface pointer.
|
||||
|
||||
---
|
||||
dlls/amstream/mediastreamfilter.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/amstream/mediastreamfilter.c b/dlls/amstream/mediastreamfilter.c
|
||||
index 5abcb2f..a7ff6e8 100644
|
||||
--- a/dlls/amstream/mediastreamfilter.c
|
||||
+++ b/dlls/amstream/mediastreamfilter.c
|
||||
@@ -42,7 +42,7 @@ typedef struct {
|
||||
|
||||
static inline IMediaStreamFilterImpl *impl_from_IMediaStreamFilter(IMediaStreamFilter *iface)
|
||||
{
|
||||
- return CONTAINING_RECORD(iface, IMediaStreamFilterImpl, filter);
|
||||
+ return CONTAINING_RECORD((IBaseFilter *)iface, IMediaStreamFilterImpl, filter.IBaseFilter_iface);
|
||||
}
|
||||
|
||||
/*** IUnknown methods ***/
|
||||
--
|
||||
2.7.4
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 2aeb3a9e57142c3f4ff86cb81b206bdbc146552d Mon Sep 17 00:00:00 2001
|
||||
From c8f9b712a946fac79af1290d14c1d31d0a8f0c10 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Tue, 22 Mar 2016 21:54:26 +0100
|
||||
Subject: [PATCH] d2d1: Avoid implicit cast of interface pointer.
|
||||
@@ -7,17 +7,16 @@ Subject: [PATCH] d2d1: Avoid implicit cast of interface pointer.
|
||||
dlls/d2d1/bitmap.c | 2 +-
|
||||
dlls/d2d1/brush.c | 8 ++++----
|
||||
dlls/d2d1/dc_render_target.c | 2 +-
|
||||
dlls/d2d1/device.c | 2 +-
|
||||
dlls/d2d1/geometry.c | 6 +++---
|
||||
dlls/d2d1/hwnd_render_target.c | 2 +-
|
||||
dlls/d2d1/state_block.c | 2 +-
|
||||
7 files changed, 12 insertions(+), 12 deletions(-)
|
||||
6 files changed, 11 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/dlls/d2d1/bitmap.c b/dlls/d2d1/bitmap.c
|
||||
index c0aef3c..8a4b517 100644
|
||||
index 39e81192f77..52810211701 100644
|
||||
--- a/dlls/d2d1/bitmap.c
|
||||
+++ b/dlls/d2d1/bitmap.c
|
||||
@@ -626,5 +626,5 @@ struct d2d_bitmap *unsafe_impl_from_ID2D1Bitmap(ID2D1Bitmap *iface)
|
||||
@@ -623,5 +623,5 @@ struct d2d_bitmap *unsafe_impl_from_ID2D1Bitmap(ID2D1Bitmap *iface)
|
||||
if (!iface)
|
||||
return NULL;
|
||||
assert(iface->lpVtbl == (ID2D1BitmapVtbl *)&d2d_bitmap_vtbl);
|
||||
@@ -25,10 +24,10 @@ index c0aef3c..8a4b517 100644
|
||||
+ return CONTAINING_RECORD((ID2D1Bitmap1*)iface, struct d2d_bitmap, ID2D1Bitmap1_iface);
|
||||
}
|
||||
diff --git a/dlls/d2d1/brush.c b/dlls/d2d1/brush.c
|
||||
index 9c73ae1..a748669 100644
|
||||
index 21abf1456ab..1030884c2b7 100644
|
||||
--- a/dlls/d2d1/brush.c
|
||||
+++ b/dlls/d2d1/brush.c
|
||||
@@ -256,7 +256,7 @@ static void d2d_brush_init(struct d2d_brush *brush, ID2D1Factory *factory,
|
||||
@@ -253,7 +253,7 @@ static void d2d_brush_init(struct d2d_brush *brush, ID2D1Factory *factory,
|
||||
|
||||
static inline struct d2d_brush *impl_from_ID2D1SolidColorBrush(ID2D1SolidColorBrush *iface)
|
||||
{
|
||||
@@ -37,7 +36,7 @@ index 9c73ae1..a748669 100644
|
||||
}
|
||||
|
||||
static HRESULT STDMETHODCALLTYPE d2d_solid_color_brush_QueryInterface(ID2D1SolidColorBrush *iface,
|
||||
@@ -399,7 +399,7 @@ HRESULT d2d_solid_color_brush_create(ID2D1Factory *factory, const D2D1_COLOR_F *
|
||||
@@ -396,7 +396,7 @@ HRESULT d2d_solid_color_brush_create(ID2D1Factory *factory, const D2D1_COLOR_F *
|
||||
|
||||
static inline struct d2d_brush *impl_from_ID2D1LinearGradientBrush(ID2D1LinearGradientBrush *iface)
|
||||
{
|
||||
@@ -46,7 +45,7 @@ index 9c73ae1..a748669 100644
|
||||
}
|
||||
|
||||
static HRESULT STDMETHODCALLTYPE d2d_linear_gradient_brush_QueryInterface(ID2D1LinearGradientBrush *iface,
|
||||
@@ -586,7 +586,7 @@ HRESULT d2d_linear_gradient_brush_create(ID2D1Factory *factory,
|
||||
@@ -583,7 +583,7 @@ HRESULT d2d_linear_gradient_brush_create(ID2D1Factory *factory,
|
||||
|
||||
static inline struct d2d_brush *impl_from_ID2D1RadialGradientBrush(ID2D1RadialGradientBrush *iface)
|
||||
{
|
||||
@@ -55,7 +54,7 @@ index 9c73ae1..a748669 100644
|
||||
}
|
||||
|
||||
static HRESULT STDMETHODCALLTYPE d2d_radial_gradient_brush_QueryInterface(ID2D1RadialGradientBrush *iface,
|
||||
@@ -818,7 +818,7 @@ HRESULT d2d_radial_gradient_brush_create(ID2D1Factory *factory,
|
||||
@@ -815,7 +815,7 @@ HRESULT d2d_radial_gradient_brush_create(ID2D1Factory *factory,
|
||||
|
||||
static inline struct d2d_brush *impl_from_ID2D1BitmapBrush1(ID2D1BitmapBrush1 *iface)
|
||||
{
|
||||
@@ -65,10 +64,10 @@ index 9c73ae1..a748669 100644
|
||||
|
||||
static HRESULT STDMETHODCALLTYPE d2d_bitmap_brush_QueryInterface(ID2D1BitmapBrush1 *iface,
|
||||
diff --git a/dlls/d2d1/dc_render_target.c b/dlls/d2d1/dc_render_target.c
|
||||
index b095008..6030826 100644
|
||||
index 310c5412967..9d9168dc8ee 100644
|
||||
--- a/dlls/d2d1/dc_render_target.c
|
||||
+++ b/dlls/d2d1/dc_render_target.c
|
||||
@@ -26,7 +26,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(d2d);
|
||||
@@ -23,7 +23,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(d2d);
|
||||
|
||||
static inline struct d2d_dc_render_target *impl_from_IUnknown(IUnknown *iface)
|
||||
{
|
||||
@@ -77,24 +76,11 @@ index b095008..6030826 100644
|
||||
}
|
||||
|
||||
static HRESULT d2d_dc_render_target_present(IUnknown *outer_unknown)
|
||||
diff --git a/dlls/d2d1/device.c b/dlls/d2d1/device.c
|
||||
index 45b2258..bf32c23 100644
|
||||
--- a/dlls/d2d1/device.c
|
||||
+++ b/dlls/d2d1/device.c
|
||||
@@ -207,7 +207,7 @@ static inline struct d2d_device_context *impl_from_ID2D1DeviceContext(ID2D1Devic
|
||||
|
||||
static inline struct d2d_device_context *impl_from_ID2D1RenderTarget(ID2D1RenderTarget *iface)
|
||||
{
|
||||
- return CONTAINING_RECORD(iface, struct d2d_device_context, ID2D1DeviceContext_iface);
|
||||
+ return CONTAINING_RECORD((ID2D1DeviceContext*)iface, struct d2d_device_context, ID2D1DeviceContext_iface);
|
||||
}
|
||||
|
||||
static HRESULT STDMETHODCALLTYPE d2d_device_context_inner_QueryInterface(IUnknown *iface, REFIID iid, void **out)
|
||||
diff --git a/dlls/d2d1/geometry.c b/dlls/d2d1/geometry.c
|
||||
index 421ba2b..f8db51c 100644
|
||||
index 91ce32c28e7..da4a1f2d3ee 100644
|
||||
--- a/dlls/d2d1/geometry.c
|
||||
+++ b/dlls/d2d1/geometry.c
|
||||
@@ -2987,7 +2987,7 @@ static const struct ID2D1GeometrySinkVtbl d2d_geometry_sink_vtbl =
|
||||
@@ -2982,7 +2982,7 @@ static const struct ID2D1GeometrySinkVtbl d2d_geometry_sink_vtbl =
|
||||
|
||||
static inline struct d2d_geometry *impl_from_ID2D1PathGeometry(ID2D1PathGeometry *iface)
|
||||
{
|
||||
@@ -103,7 +89,7 @@ index 421ba2b..f8db51c 100644
|
||||
}
|
||||
|
||||
static HRESULT STDMETHODCALLTYPE d2d_path_geometry_QueryInterface(ID2D1PathGeometry *iface, REFIID iid, void **out)
|
||||
@@ -3503,7 +3503,7 @@ void d2d_path_geometry_init(struct d2d_geometry *geometry, ID2D1Factory *factory
|
||||
@@ -3498,7 +3498,7 @@ void d2d_path_geometry_init(struct d2d_geometry *geometry, ID2D1Factory *factory
|
||||
|
||||
static inline struct d2d_geometry *impl_from_ID2D1RectangleGeometry(ID2D1RectangleGeometry *iface)
|
||||
{
|
||||
@@ -112,7 +98,7 @@ index 421ba2b..f8db51c 100644
|
||||
}
|
||||
|
||||
static HRESULT STDMETHODCALLTYPE d2d_rectangle_geometry_QueryInterface(ID2D1RectangleGeometry *iface,
|
||||
@@ -3838,7 +3838,7 @@ fail:
|
||||
@@ -3833,7 +3833,7 @@ fail:
|
||||
|
||||
static inline struct d2d_geometry *impl_from_ID2D1TransformedGeometry(ID2D1TransformedGeometry *iface)
|
||||
{
|
||||
@@ -122,10 +108,10 @@ index 421ba2b..f8db51c 100644
|
||||
|
||||
static HRESULT STDMETHODCALLTYPE d2d_transformed_geometry_QueryInterface(ID2D1TransformedGeometry *iface,
|
||||
diff --git a/dlls/d2d1/hwnd_render_target.c b/dlls/d2d1/hwnd_render_target.c
|
||||
index d0b9695..429561e 100644
|
||||
index 625f101eaa7..f3626c42cee 100644
|
||||
--- a/dlls/d2d1/hwnd_render_target.c
|
||||
+++ b/dlls/d2d1/hwnd_render_target.c
|
||||
@@ -26,7 +26,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(d2d);
|
||||
@@ -23,7 +23,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(d2d);
|
||||
|
||||
static inline struct d2d_hwnd_render_target *impl_from_IUnknown(IUnknown *iface)
|
||||
{
|
||||
@@ -135,10 +121,10 @@ index d0b9695..429561e 100644
|
||||
|
||||
static HRESULT d2d_hwnd_render_target_present(IUnknown *outer_unknown)
|
||||
diff --git a/dlls/d2d1/state_block.c b/dlls/d2d1/state_block.c
|
||||
index b15384e..4e7e34b 100644
|
||||
index e3175146a64..b66752983e6 100644
|
||||
--- a/dlls/d2d1/state_block.c
|
||||
+++ b/dlls/d2d1/state_block.c
|
||||
@@ -190,5 +190,5 @@ struct d2d_state_block *unsafe_impl_from_ID2D1DrawingStateBlock(ID2D1DrawingStat
|
||||
@@ -187,5 +187,5 @@ struct d2d_state_block *unsafe_impl_from_ID2D1DrawingStateBlock(ID2D1DrawingStat
|
||||
if (!iface)
|
||||
return NULL;
|
||||
assert(iface->lpVtbl == (ID2D1DrawingStateBlockVtbl *)&d2d_state_block_vtbl);
|
||||
@@ -146,5 +132,5 @@ index b15384e..4e7e34b 100644
|
||||
+ return CONTAINING_RECORD((ID2D1DrawingStateBlock1*)iface, struct d2d_state_block, ID2D1DrawingStateBlock1_iface);
|
||||
}
|
||||
--
|
||||
1.9.1
|
||||
2.20.1
|
||||
|
||||
|
@@ -1,25 +0,0 @@
|
||||
From b4586e37df817f205c8bebe319b4765dea5c62d5 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Sun, 24 Sep 2017 19:21:06 +0200
|
||||
Subject: evr: Avoid implicit cast of interface pointer.
|
||||
|
||||
---
|
||||
dlls/evr/evr.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/evr/evr.c b/dlls/evr/evr.c
|
||||
index c2d2933211e..5533f38a649 100644
|
||||
--- a/dlls/evr/evr.c
|
||||
+++ b/dlls/evr/evr.c
|
||||
@@ -136,7 +136,7 @@ static const IUnknownVtbl evr_inner_vtbl =
|
||||
|
||||
static inline evr_filter *impl_from_IBaseFilter(IBaseFilter *iface)
|
||||
{
|
||||
- return CONTAINING_RECORD(iface, evr_filter, filter);
|
||||
+ return CONTAINING_RECORD(iface, evr_filter, filter.IBaseFilter_iface);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI filter_QueryInterface(IBaseFilter *iface, REFIID riid, void **ppv)
|
||||
--
|
||||
2.14.1
|
||||
|
2
patches/Compiler_Warnings/definition
Normal file
2
patches/Compiler_Warnings/definition
Normal file
@@ -0,0 +1,2 @@
|
||||
Fixes: Fixes compile warnings.
|
||||
#Depends: mailing-list-patches
|
@@ -1,19 +1,18 @@
|
||||
From 2a1064c5f90beac2bd709ab5d1c454c90a16189b Mon Sep 17 00:00:00 2001
|
||||
From 3c1f5962482e7acf531f57f49d923d9c4e5278b1 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Fri, 4 Aug 2017 02:51:57 +0200
|
||||
Subject: advapi32: Implement CreateRestrictedToken.
|
||||
Subject: [PATCH] advapi32: Implement CreateRestrictedToken.
|
||||
|
||||
---
|
||||
dlls/advapi32/security.c | 88 +++++++++++++++++++++++++++++++++++-------
|
||||
dlls/advapi32/tests/security.c | 88 +++++++++++++++++++++++++++++++++++++++---
|
||||
2 files changed, 157 insertions(+), 19 deletions(-)
|
||||
dlls/kernelbase/security.c | 103 ++++++++++++++++++++++++++++++-------
|
||||
1 file changed, 84 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c
|
||||
index 82bb6689d43..c531e45c9a0 100644
|
||||
--- a/dlls/advapi32/security.c
|
||||
+++ b/dlls/advapi32/security.c
|
||||
@@ -840,6 +840,60 @@ BOOL WINAPI SetThreadToken(PHANDLE thread, HANDLE token)
|
||||
ThreadImpersonationToken, &token, sizeof token ));
|
||||
diff --git a/dlls/kernelbase/security.c b/dlls/kernelbase/security.c
|
||||
index 2e75e81ed77..97f6ee6a2fd 100644
|
||||
--- a/dlls/kernelbase/security.c
|
||||
+++ b/dlls/kernelbase/security.c
|
||||
@@ -592,31 +592,96 @@ exit:
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static BOOL allocate_groups(TOKEN_GROUPS **groups_ret, SID_AND_ATTRIBUTES *sids, DWORD count)
|
||||
@@ -71,11 +70,16 @@ index 82bb6689d43..c531e45c9a0 100644
|
||||
+}
|
||||
+
|
||||
/*************************************************************************
|
||||
* CreateRestrictedToken [ADVAPI32.@]
|
||||
*
|
||||
@@ -871,25 +925,33 @@ BOOL WINAPI CreateRestrictedToken(
|
||||
PSID_AND_ATTRIBUTES restrictSids,
|
||||
PHANDLE newToken)
|
||||
* CreateRestrictedToken (kernelbase.@)
|
||||
*/
|
||||
-BOOL WINAPI CreateRestrictedToken( HANDLE token, DWORD flags,
|
||||
- DWORD disable_count, PSID_AND_ATTRIBUTES disable_sids,
|
||||
- DWORD delete_count, PLUID_AND_ATTRIBUTES delete_privs,
|
||||
- DWORD restrict_count, PSID_AND_ATTRIBUTES restrict_sids, PHANDLE ret )
|
||||
+BOOL WINAPI CreateRestrictedToken( HANDLE baseToken, DWORD flags,
|
||||
+ DWORD nDisableSids, PSID_AND_ATTRIBUTES disableSids,
|
||||
+ DWORD nDeletePrivs, PLUID_AND_ATTRIBUTES deletePrivs,
|
||||
+ DWORD nRestrictSids, PSID_AND_ATTRIBUTES restrictSids, PHANDLE newToken )
|
||||
{
|
||||
- TOKEN_TYPE type;
|
||||
- SECURITY_IMPERSONATION_LEVEL level = SecurityAnonymous;
|
||||
@@ -86,21 +90,14 @@ index 82bb6689d43..c531e45c9a0 100644
|
||||
+ BOOL ret = FALSE;
|
||||
|
||||
- FIXME("(%p, 0x%x, %u, %p, %u, %p, %u, %p, %p): stub\n",
|
||||
- token, flags, disable_count, disable_sids, delete_count, delete_privs,
|
||||
- restrict_count, restrict_sids, ret );
|
||||
+ TRACE("(%p, 0x%x, %u, %p, %u, %p, %u, %p, %p)\n",
|
||||
baseToken, flags, nDisableSids, disableSids,
|
||||
nDeletePrivs, deletePrivs,
|
||||
nRestrictSids, restrictSids,
|
||||
newToken);
|
||||
|
||||
- size = sizeof(type);
|
||||
- if (!GetTokenInformation( baseToken, TokenType, &type, size, &size )) return FALSE;
|
||||
- if (type == TokenImpersonation)
|
||||
- {
|
||||
- size = sizeof(level);
|
||||
- if (!GetTokenInformation( baseToken, TokenImpersonationLevel, &level, size, &size ))
|
||||
- return FALSE;
|
||||
- }
|
||||
- return DuplicateTokenEx( baseToken, MAXIMUM_ALLOWED, NULL, level, type, newToken );
|
||||
+ baseToken, flags, nDisableSids, disableSids,
|
||||
+ nDeletePrivs, deletePrivs,
|
||||
+ nRestrictSids, restrictSids,
|
||||
+ newToken);
|
||||
+
|
||||
+ if (!allocate_groups(&disable_groups, disableSids, nDisableSids))
|
||||
+ goto done;
|
||||
+
|
||||
@@ -117,155 +114,19 @@ index 82bb6689d43..c531e45c9a0 100644
|
||||
+ heap_free(delete_privs);
|
||||
+ heap_free(restrict_sids);
|
||||
+ return ret;
|
||||
|
||||
- size = sizeof(type);
|
||||
- if (!GetTokenInformation( token, TokenType, &type, size, &size )) return FALSE;
|
||||
- if (type == TokenImpersonation)
|
||||
- {
|
||||
- size = sizeof(level);
|
||||
- if (!GetTokenInformation( token, TokenImpersonationLevel, &level, size, &size ))
|
||||
- return FALSE;
|
||||
- }
|
||||
- return DuplicateTokenEx( token, MAXIMUM_ALLOWED, NULL, level, type, ret );
|
||||
}
|
||||
|
||||
/* ##############################
|
||||
diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c
|
||||
index a1ecc409b73..0fd41fe82fa 100644
|
||||
--- a/dlls/advapi32/tests/security.c
|
||||
+++ b/dlls/advapi32/tests/security.c
|
||||
@@ -5292,10 +5292,13 @@ static void test_GetUserNameW(void)
|
||||
|
||||
static void test_CreateRestrictedToken(void)
|
||||
{
|
||||
+ TOKEN_PRIMARY_GROUP *primary_group, *primary_group2;
|
||||
HANDLE process_token, token, r_token;
|
||||
PTOKEN_GROUPS token_groups, groups2;
|
||||
SID_AND_ATTRIBUTES sattr;
|
||||
SECURITY_IMPERSONATION_LEVEL level;
|
||||
+ TOKEN_PRIVILEGES *privs;
|
||||
+ PRIVILEGE_SET privset;
|
||||
TOKEN_TYPE type;
|
||||
BOOL is_member;
|
||||
DWORD size;
|
||||
@@ -5311,7 +5314,7 @@ static void test_CreateRestrictedToken(void)
|
||||
ret = OpenProcessToken(GetCurrentProcess(), TOKEN_DUPLICATE|TOKEN_QUERY, &process_token);
|
||||
ok(ret, "got error %d\n", GetLastError());
|
||||
|
||||
- ret = DuplicateTokenEx(process_token, TOKEN_DUPLICATE|TOKEN_ADJUST_GROUPS|TOKEN_QUERY,
|
||||
+ ret = DuplicateTokenEx(process_token, TOKEN_DUPLICATE|TOKEN_ADJUST_GROUPS|TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,
|
||||
NULL, SecurityImpersonation, TokenImpersonation, &token);
|
||||
ok(ret, "got error %d\n", GetLastError());
|
||||
|
||||
@@ -5342,11 +5345,21 @@ static void test_CreateRestrictedToken(void)
|
||||
ok(ret, "got error %d\n", GetLastError());
|
||||
ok(is_member, "not a member\n");
|
||||
|
||||
- /* disable a SID in new token */
|
||||
+ privset.PrivilegeCount = 1;
|
||||
+ privset.Control = PRIVILEGE_SET_ALL_NECESSARY;
|
||||
+ ret = LookupPrivilegeValueA(NULL, "SeChangeNotifyPrivilege", &privset.Privilege[0].Luid);
|
||||
+ ok(ret, "got error %d\n", GetLastError());
|
||||
+
|
||||
+ is_member = FALSE;
|
||||
+ ret = PrivilegeCheck(token, &privset, &is_member);
|
||||
+ ok(ret, "got error %d\n", GetLastError());
|
||||
+ ok(is_member, "Expected SeChangeNotifyPrivilege to be enabled\n");
|
||||
+
|
||||
+ /* disable a SID and a privilege in new token */
|
||||
sattr.Sid = token_groups->Groups[i].Sid;
|
||||
sattr.Attributes = 0;
|
||||
r_token = NULL;
|
||||
- ret = pCreateRestrictedToken(token, 0, 1, &sattr, 0, NULL, 0, NULL, &r_token);
|
||||
+ ret = pCreateRestrictedToken(token, 0, 1, &sattr, 1, &privset.Privilege[0], 0, NULL, &r_token);
|
||||
ok(ret, "got error %d\n", GetLastError());
|
||||
|
||||
if (ret)
|
||||
@@ -5355,7 +5368,7 @@ static void test_CreateRestrictedToken(void)
|
||||
is_member = TRUE;
|
||||
ret = pCheckTokenMembership(r_token, token_groups->Groups[i].Sid, &is_member);
|
||||
ok(ret, "got error %d\n", GetLastError());
|
||||
- todo_wine ok(!is_member, "not a member\n");
|
||||
+ ok(!is_member, "not a member\n");
|
||||
|
||||
ret = GetTokenInformation(r_token, TokenGroups, NULL, 0, &size);
|
||||
ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER, "got %d with error %d\n",
|
||||
@@ -5370,9 +5383,9 @@ static void test_CreateRestrictedToken(void)
|
||||
break;
|
||||
}
|
||||
|
||||
- todo_wine ok(groups2->Groups[j].Attributes & SE_GROUP_USE_FOR_DENY_ONLY,
|
||||
+ ok(groups2->Groups[j].Attributes & SE_GROUP_USE_FOR_DENY_ONLY,
|
||||
"got wrong attributes\n");
|
||||
- todo_wine ok((groups2->Groups[j].Attributes & SE_GROUP_ENABLED) == 0,
|
||||
+ ok((groups2->Groups[j].Attributes & SE_GROUP_ENABLED) == 0,
|
||||
"got wrong attributes\n");
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, groups2);
|
||||
@@ -5386,10 +5399,73 @@ static void test_CreateRestrictedToken(void)
|
||||
ret = GetTokenInformation(r_token, TokenImpersonationLevel, &level, size, &size);
|
||||
ok(ret, "got error %d\n", GetLastError());
|
||||
ok(level == SecurityImpersonation, "got level %u\n", type);
|
||||
+
|
||||
+ is_member = TRUE;
|
||||
+ ret = PrivilegeCheck(r_token, &privset, &is_member);
|
||||
+ ok(ret, "got error %d\n", GetLastError());
|
||||
+ ok(!is_member, "Expected SeChangeNotifyPrivilege not to be enabled\n");
|
||||
+
|
||||
+ ret = GetTokenInformation(r_token, TokenPrivileges, NULL, 0, &size);
|
||||
+ ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER, "got %d with error %d\n",
|
||||
+ ret, GetLastError());
|
||||
+ privs = HeapAlloc(GetProcessHeap(), 0, size);
|
||||
+ ret = GetTokenInformation(r_token, TokenPrivileges, privs, size, &size);
|
||||
+ ok(ret, "got error %d\n", GetLastError());
|
||||
+
|
||||
+ is_member = FALSE;
|
||||
+ for (j = 0; j < privs->PrivilegeCount; j++)
|
||||
+ {
|
||||
+ if (RtlEqualLuid(&privs->Privileges[j].Luid, &privset.Privilege[0].Luid))
|
||||
+ {
|
||||
+ is_member = TRUE;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ ok(!is_member, "Expected not to find privilege\n");
|
||||
+ HeapFree(GetProcessHeap(), 0, privs);
|
||||
}
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, token_groups);
|
||||
CloseHandle(r_token);
|
||||
+
|
||||
+ ret = GetTokenInformation(token, TokenPrimaryGroup, NULL, 0, &size);
|
||||
+ ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER, "got %d with error %d\n",
|
||||
+ ret, GetLastError());
|
||||
+ primary_group = HeapAlloc(GetProcessHeap(), 0, size);
|
||||
+ ret = GetTokenInformation(token, TokenPrimaryGroup, primary_group, size, &size);
|
||||
+ ok(ret, "got error %d\n", GetLastError());
|
||||
+
|
||||
+ /* disable primary group */
|
||||
+ sattr.Sid = primary_group->PrimaryGroup;
|
||||
+ sattr.Attributes = 0;
|
||||
+ r_token = NULL;
|
||||
+ ret = pCreateRestrictedToken(token, 0, 1, &sattr, 0, NULL, 0, NULL, &r_token);
|
||||
+ ok(ret, "got error %d\n", GetLastError());
|
||||
+
|
||||
+ if (ret)
|
||||
+ {
|
||||
+ is_member = TRUE;
|
||||
+ ret = pCheckTokenMembership(r_token, primary_group->PrimaryGroup, &is_member);
|
||||
+ ok(ret, "got error %d\n", GetLastError());
|
||||
+ ok(!is_member, "not a member\n");
|
||||
+
|
||||
+ ret = GetTokenInformation(r_token, TokenPrimaryGroup, NULL, 0, &size);
|
||||
+ ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER, "got %d with error %d\n",
|
||||
+ ret, GetLastError());
|
||||
+ primary_group2 = HeapAlloc(GetProcessHeap(), 0, size);
|
||||
+ ret = GetTokenInformation(r_token, TokenPrimaryGroup, primary_group2, size, &size);
|
||||
+ ok(ret, "got error %d\n", GetLastError());
|
||||
+
|
||||
+ ok(EqualSid(primary_group2->PrimaryGroup, primary_group->PrimaryGroup),
|
||||
+ "Expected same primary group\n");
|
||||
+
|
||||
+ HeapFree(GetProcessHeap(), 0, primary_group2);
|
||||
+ }
|
||||
+
|
||||
+ HeapFree(GetProcessHeap(), 0, primary_group);
|
||||
+ CloseHandle(r_token);
|
||||
+
|
||||
CloseHandle(token);
|
||||
CloseHandle(process_token);
|
||||
}
|
||||
/******************************************************************************
|
||||
--
|
||||
2.13.1
|
||||
2.20.1
|
||||
|
||||
|
@@ -1,31 +0,0 @@
|
||||
From be28c746d013c16fa6c2e50f5f9debc45d39d81b Mon Sep 17 00:00:00 2001
|
||||
From: Qian Hong <qhong@codeweavers.com>
|
||||
Date: Tue, 7 Apr 2015 13:18:31 +0800
|
||||
Subject: advapi32: Initialize buffer length to zero in LsaLookupSids to
|
||||
prevent crash. (try 2)
|
||||
|
||||
Superseded 110588-110594
|
||||
|
||||
Try 2:
|
||||
- Use RtlInitUnicodeStringEx to simplify code when possible. Same for
|
||||
other patches in this series. (Thanks Nikolay)
|
||||
---
|
||||
dlls/advapi32/lsa.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/advapi32/lsa.c b/dlls/advapi32/lsa.c
|
||||
index 2a8b791..69c29c5 100644
|
||||
--- a/dlls/advapi32/lsa.c
|
||||
+++ b/dlls/advapi32/lsa.c
|
||||
@@ -502,7 +502,7 @@ NTSTATUS WINAPI LsaLookupSids(
|
||||
{
|
||||
(*Names)[i].Use = SidTypeUnknown;
|
||||
(*Names)[i].DomainIndex = -1;
|
||||
- (*Names)[i].Name.Buffer = NULL;
|
||||
+ RtlInitUnicodeStringEx(&(*Names)[i].Name, NULL);
|
||||
|
||||
memset(&(*ReferencedDomains)->Domains[i], 0, sizeof(LSA_TRUST_INFORMATION));
|
||||
|
||||
--
|
||||
2.3.5
|
||||
|
@@ -1,95 +0,0 @@
|
||||
From f0290aad953e988b1a15e214ecfc57f21dc136af Mon Sep 17 00:00:00 2001
|
||||
From: Qian Hong <qhong@codeweavers.com>
|
||||
Date: Tue, 28 Apr 2015 23:28:50 +0800
|
||||
Subject: advapi32/tests: Test prefix and use of TokenPrimaryGroup Sid.
|
||||
|
||||
---
|
||||
dlls/advapi32/tests/security.c | 35 ++++++++++++++++++++++++++++++-----
|
||||
1 file changed, 30 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c
|
||||
index f3fc682..6a716d6 100644
|
||||
--- a/dlls/advapi32/tests/security.c
|
||||
+++ b/dlls/advapi32/tests/security.c
|
||||
@@ -2514,19 +2514,21 @@ static void test_granted_access(HANDLE handle, ACCESS_MASK access,
|
||||
static void test_process_security(void)
|
||||
{
|
||||
BOOL res;
|
||||
+ PTOKEN_USER user;
|
||||
PTOKEN_OWNER owner;
|
||||
PTOKEN_PRIMARY_GROUP group;
|
||||
- PSID AdminSid = NULL, UsersSid = NULL;
|
||||
+ PSID AdminSid = NULL, UsersSid = NULL, UserSid = NULL;
|
||||
PACL Acl = NULL, ThreadAcl = NULL;
|
||||
SECURITY_DESCRIPTOR *SecurityDescriptor = NULL, *ThreadSecurityDescriptor = NULL;
|
||||
- char buffer[MAX_PATH];
|
||||
+ char buffer[MAX_PATH], account[MAX_PATH], domain[MAX_PATH];
|
||||
PROCESS_INFORMATION info;
|
||||
STARTUPINFOA startup;
|
||||
SECURITY_ATTRIBUTES psa, tsa;
|
||||
HANDLE token, event;
|
||||
- DWORD size;
|
||||
+ DWORD size, acc_size, dom_size, ret;
|
||||
SID_IDENTIFIER_AUTHORITY SIDAuthWorld = { SECURITY_WORLD_SID_AUTHORITY };
|
||||
PSID EveryoneSid = NULL;
|
||||
+ SID_NAME_USE use;
|
||||
|
||||
Acl = HeapAlloc(GetProcessHeap(), 0, 256);
|
||||
res = InitializeAcl(Acl, 256, ACL_REVISION);
|
||||
@@ -2558,7 +2560,8 @@ static void test_process_security(void)
|
||||
owner = HeapAlloc(GetProcessHeap(), 0, size);
|
||||
res = GetTokenInformation( token, TokenOwner, owner, size, &size );
|
||||
ok(res, "GetTokenInformation failed with error %d\n", GetLastError());
|
||||
- AdminSid = ((TOKEN_OWNER*)owner)->Owner;
|
||||
+ AdminSid = owner->Owner;
|
||||
+ test_sid_str(AdminSid);
|
||||
|
||||
res = GetTokenInformation( token, TokenPrimaryGroup, NULL, 0, &size );
|
||||
ok(!res, "Expected failure, got %d\n", res);
|
||||
@@ -2568,13 +2571,34 @@ static void test_process_security(void)
|
||||
group = HeapAlloc(GetProcessHeap(), 0, size);
|
||||
res = GetTokenInformation( token, TokenPrimaryGroup, group, size, &size );
|
||||
ok(res, "GetTokenInformation failed with error %d\n", GetLastError());
|
||||
- UsersSid = ((TOKEN_PRIMARY_GROUP*)group)->PrimaryGroup;
|
||||
+ UsersSid = group->PrimaryGroup;
|
||||
+ test_sid_str(UsersSid);
|
||||
+
|
||||
+ acc_size = sizeof(account);
|
||||
+ dom_size = sizeof(domain);
|
||||
+ ret = LookupAccountSidA( NULL, UsersSid, account, &acc_size, domain, &dom_size, &use );
|
||||
+ ok(ret, "LookupAccountSid failed with %d\n", ret);
|
||||
+ todo_wine ok(use == SidTypeGroup, "expect SidTypeGroup, got %d\n", use);
|
||||
+ todo_wine ok(!strcmp(account, "None"), "expect None, got %s\n", account);
|
||||
+
|
||||
+ res = GetTokenInformation( token, TokenUser, NULL, 0, &size );
|
||||
+ ok(!res, "Expected failure, got %d\n", res);
|
||||
+ ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER,
|
||||
+ "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError());
|
||||
+
|
||||
+ user = HeapAlloc(GetProcessHeap(), 0, size);
|
||||
+ res = GetTokenInformation( token, TokenUser, user, size, &size );
|
||||
+ ok(res, "GetTokenInformation failed with error %d\n", GetLastError());
|
||||
+ UserSid = user->User.Sid;
|
||||
+ test_sid_str(UserSid);
|
||||
+ todo_wine ok(EqualPrefixSid(UsersSid, UserSid), "TokenPrimaryGroup Sid and TokenUser Sid don't match.\n");
|
||||
|
||||
CloseHandle( token );
|
||||
if (!res)
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, group);
|
||||
HeapFree(GetProcessHeap(), 0, owner);
|
||||
+ HeapFree(GetProcessHeap(), 0, user);
|
||||
HeapFree(GetProcessHeap(), 0, Acl);
|
||||
return;
|
||||
}
|
||||
@@ -2681,6 +2705,7 @@ static void test_process_security(void)
|
||||
CloseHandle( event );
|
||||
HeapFree(GetProcessHeap(), 0, group);
|
||||
HeapFree(GetProcessHeap(), 0, owner);
|
||||
+ HeapFree(GetProcessHeap(), 0, user);
|
||||
HeapFree(GetProcessHeap(), 0, Acl);
|
||||
HeapFree(GetProcessHeap(), 0, SecurityDescriptor);
|
||||
HeapFree(GetProcessHeap(), 0, ThreadAcl);
|
||||
--
|
||||
2.3.5
|
||||
|
@@ -1,38 +0,0 @@
|
||||
From 5487b4720e24aaa7a10719fc36bc23c851a48a9b Mon Sep 17 00:00:00 2001
|
||||
From: Qian Hong <qhong@codeweavers.com>
|
||||
Date: Tue, 28 Apr 2015 22:35:26 +0800
|
||||
Subject: server: Create primary group using DOMAIN_GROUP_RID_USERS.
|
||||
|
||||
---
|
||||
dlls/advapi32/tests/security.c | 2 +-
|
||||
server/token.c | 1 +
|
||||
2 files changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c
|
||||
index 25b34ba4..573119f 100644
|
||||
--- a/dlls/advapi32/tests/security.c
|
||||
+++ b/dlls/advapi32/tests/security.c
|
||||
@@ -2591,7 +2591,7 @@ static void test_process_security(void)
|
||||
ok(res, "GetTokenInformation failed with error %d\n", GetLastError());
|
||||
UserSid = user->User.Sid;
|
||||
test_sid_str(UserSid);
|
||||
- todo_wine ok(EqualPrefixSid(UsersSid, UserSid), "TokenPrimaryGroup Sid and TokenUser Sid don't match.\n");
|
||||
+ ok(EqualPrefixSid(UsersSid, UserSid), "TokenPrimaryGroup Sid and TokenUser Sid don't match.\n");
|
||||
|
||||
CloseHandle( token );
|
||||
if (!res)
|
||||
diff --git a/server/token.c b/server/token.c
|
||||
index e57cbc6..be8c53b 100644
|
||||
--- a/server/token.c
|
||||
+++ b/server/token.c
|
||||
@@ -695,6 +695,7 @@ struct token *token_create_admin( void )
|
||||
{ security_local_sid, SE_GROUP_ENABLED|SE_GROUP_ENABLED_BY_DEFAULT|SE_GROUP_MANDATORY },
|
||||
{ security_interactive_sid, SE_GROUP_ENABLED|SE_GROUP_ENABLED_BY_DEFAULT|SE_GROUP_MANDATORY },
|
||||
{ security_authenticated_user_sid, SE_GROUP_ENABLED|SE_GROUP_ENABLED_BY_DEFAULT|SE_GROUP_MANDATORY },
|
||||
+ { security_domain_users_sid, SE_GROUP_ENABLED|SE_GROUP_ENABLED_BY_DEFAULT|SE_GROUP_MANDATORY|SE_GROUP_OWNER },
|
||||
{ alias_admins_sid, SE_GROUP_ENABLED|SE_GROUP_ENABLED_BY_DEFAULT|SE_GROUP_MANDATORY|SE_GROUP_OWNER },
|
||||
{ alias_users_sid, SE_GROUP_ENABLED|SE_GROUP_ENABLED_BY_DEFAULT|SE_GROUP_MANDATORY },
|
||||
{ logon_sid, SE_GROUP_ENABLED|SE_GROUP_ENABLED_BY_DEFAULT|SE_GROUP_MANDATORY|SE_GROUP_LOGON_ID },
|
||||
--
|
||||
2.3.5
|
||||
|
@@ -1 +0,0 @@
|
||||
Depends: server-Misc_ACL
|
||||
|
@@ -1,110 +0,0 @@
|
||||
From 646388b696afda85dccc76678af6a8955bf0b627 Mon Sep 17 00:00:00 2001
|
||||
From: "Erich E. Hoover" <erich.e.hoover@wine-staging.com>
|
||||
Date: Fri, 16 Oct 2015 16:03:00 -0600
|
||||
Subject: advapi32: Move the DACL combining code into a separate routine.
|
||||
|
||||
---
|
||||
dlls/advapi32/security.c | 79 +++++++++++++++++++++++++++---------------------
|
||||
1 file changed, 45 insertions(+), 34 deletions(-)
|
||||
|
||||
diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c
|
||||
index 00dafe8..dad8b22 100644
|
||||
--- a/dlls/advapi32/security.c
|
||||
+++ b/dlls/advapi32/security.c
|
||||
@@ -5805,6 +5805,48 @@ BOOL WINAPI FileEncryptionStatusA(LPCSTR lpFileName, LPDWORD lpStatus)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
+static NTSTATUS combine_dacls(ACL *parent, ACL *child, ACL **result)
|
||||
+{
|
||||
+ ACL *combined;
|
||||
+ int i;
|
||||
+
|
||||
+ /* initialize a combined DACL containing both inherited and new ACEs */
|
||||
+ combined = heap_alloc_zero(child->AclSize+parent->AclSize);
|
||||
+ if (!combined)
|
||||
+ return STATUS_NO_MEMORY;
|
||||
+
|
||||
+ memcpy(combined, child, child->AclSize);
|
||||
+ combined->AclSize = child->AclSize+parent->AclSize;
|
||||
+
|
||||
+ /* copy the inherited ACEs */
|
||||
+ for (i=0; i<parent->AceCount; i++)
|
||||
+ {
|
||||
+ ACE_HEADER *ace;
|
||||
+
|
||||
+ if (!GetAce(parent, i, (void*)&ace))
|
||||
+ continue;
|
||||
+ if (!(ace->AceFlags & (OBJECT_INHERIT_ACE|CONTAINER_INHERIT_ACE)))
|
||||
+ continue;
|
||||
+ if ((ace->AceFlags & (OBJECT_INHERIT_ACE|CONTAINER_INHERIT_ACE)) !=
|
||||
+ (OBJECT_INHERIT_ACE|CONTAINER_INHERIT_ACE))
|
||||
+ {
|
||||
+ FIXME("unsupported flags: %x\n", ace->AceFlags);
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ if (ace->AceFlags & NO_PROPAGATE_INHERIT_ACE)
|
||||
+ ace->AceFlags &= ~(OBJECT_INHERIT_ACE|CONTAINER_INHERIT_ACE|NO_PROPAGATE_INHERIT_ACE);
|
||||
+ ace->AceFlags &= ~INHERIT_ONLY_ACE;
|
||||
+ ace->AceFlags |= INHERITED_ACE;
|
||||
+
|
||||
+ if (!AddAce(combined, ACL_REVISION, MAXDWORD, ace, ace->AceSize))
|
||||
+ WARN("error adding inherited ACE\n");
|
||||
+ }
|
||||
+
|
||||
+ *result = combined;
|
||||
+ return STATUS_SUCCESS;
|
||||
+}
|
||||
+
|
||||
/******************************************************************************
|
||||
* SetSecurityInfo [ADVAPI32.@]
|
||||
*/
|
||||
@@ -5904,41 +5946,10 @@ DWORD WINAPI SetSecurityInfo(HANDLE handle, SE_OBJECT_TYPE ObjectType,
|
||||
|
||||
if (!err)
|
||||
{
|
||||
- int i;
|
||||
-
|
||||
- dacl = heap_alloc_zero(pDacl->AclSize+parent_dacl->AclSize);
|
||||
- if (!dacl)
|
||||
- {
|
||||
- LocalFree(parent_sd);
|
||||
- return ERROR_NOT_ENOUGH_MEMORY;
|
||||
- }
|
||||
- memcpy(dacl, pDacl, pDacl->AclSize);
|
||||
- dacl->AclSize = pDacl->AclSize+parent_dacl->AclSize;
|
||||
-
|
||||
- for (i=0; i<parent_dacl->AceCount; i++)
|
||||
- {
|
||||
- ACE_HEADER *ace;
|
||||
-
|
||||
- if (!GetAce(parent_dacl, i, (void*)&ace))
|
||||
- continue;
|
||||
- if (!(ace->AceFlags & (OBJECT_INHERIT_ACE|CONTAINER_INHERIT_ACE)))
|
||||
- continue;
|
||||
- if ((ace->AceFlags & (OBJECT_INHERIT_ACE|CONTAINER_INHERIT_ACE)) !=
|
||||
- (OBJECT_INHERIT_ACE|CONTAINER_INHERIT_ACE))
|
||||
- {
|
||||
- FIXME("unsupported flags: %x\n", ace->AceFlags);
|
||||
- continue;
|
||||
- }
|
||||
-
|
||||
- if (ace->AceFlags & NO_PROPAGATE_INHERIT_ACE)
|
||||
- ace->AceFlags &= ~(OBJECT_INHERIT_ACE|CONTAINER_INHERIT_ACE|NO_PROPAGATE_INHERIT_ACE);
|
||||
- ace->AceFlags &= ~INHERIT_ONLY_ACE;
|
||||
- ace->AceFlags |= INHERITED_ACE;
|
||||
-
|
||||
- if(!AddAce(dacl, ACL_REVISION, MAXDWORD, ace, ace->AceSize))
|
||||
- WARN("error adding inherited ACE\n");
|
||||
- }
|
||||
+ status = combine_dacls(parent_dacl, pDacl, &dacl);
|
||||
LocalFree(parent_sd);
|
||||
+ if (status != STATUS_SUCCESS)
|
||||
+ return RtlNtStatusToDosError(status);
|
||||
}
|
||||
}
|
||||
else
|
||||
--
|
||||
2.6.1
|
||||
|
@@ -1,54 +0,0 @@
|
||||
From d1accafbe8e52b6b2c84e9fe5d08303fc05858af Mon Sep 17 00:00:00 2001
|
||||
From: "Erich E. Hoover" <erich.e.hoover@wine-staging.com>
|
||||
Date: Fri, 16 Oct 2015 13:58:38 -0600
|
||||
Subject: advapi32: Fix the initialization of combined DACLs when the new DACL
|
||||
is empty.
|
||||
|
||||
---
|
||||
dlls/advapi32/security.c | 23 +++++++++++++++++++++--
|
||||
1 file changed, 21 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c
|
||||
index dad8b22..11ae487 100644
|
||||
--- a/dlls/advapi32/security.c
|
||||
+++ b/dlls/advapi32/security.c
|
||||
@@ -5807,6 +5807,7 @@ BOOL WINAPI FileEncryptionStatusA(LPCSTR lpFileName, LPDWORD lpStatus)
|
||||
|
||||
static NTSTATUS combine_dacls(ACL *parent, ACL *child, ACL **result)
|
||||
{
|
||||
+ NTSTATUS status;
|
||||
ACL *combined;
|
||||
int i;
|
||||
|
||||
@@ -5815,8 +5816,26 @@ static NTSTATUS combine_dacls(ACL *parent, ACL *child, ACL **result)
|
||||
if (!combined)
|
||||
return STATUS_NO_MEMORY;
|
||||
|
||||
- memcpy(combined, child, child->AclSize);
|
||||
- combined->AclSize = child->AclSize+parent->AclSize;
|
||||
+ status = RtlCreateAcl(combined, parent->AclSize+child->AclSize, ACL_REVISION);
|
||||
+ if (status != STATUS_SUCCESS)
|
||||
+ {
|
||||
+ heap_free(combined);
|
||||
+ return status;
|
||||
+ }
|
||||
+
|
||||
+ /* copy the new ACEs */
|
||||
+ for (i=0; i<child->AceCount; i++)
|
||||
+ {
|
||||
+ ACE_HEADER *ace;
|
||||
+
|
||||
+ if (!GetAce(child, i, (void*)&ace))
|
||||
+ {
|
||||
+ WARN("error obtaining new ACE\n");
|
||||
+ continue;
|
||||
+ }
|
||||
+ if (!AddAce(combined, ACL_REVISION, MAXDWORD, ace, ace->AceSize))
|
||||
+ WARN("error adding new ACE\n");
|
||||
+ }
|
||||
|
||||
/* copy the inherited ACEs */
|
||||
for (i=0; i<parent->AceCount; i++)
|
||||
--
|
||||
2.6.1
|
||||
|
@@ -1 +0,0 @@
|
||||
Fixes: [38423] Fix the initialization of combined DACLs when the new DACL is empty
|
@@ -1,4 +1,4 @@
|
||||
From dd6544561d6432555f14a9004e107e6b87564949 Mon Sep 17 00:00:00 2001
|
||||
From 19cfff2a16953b65f9767fee571a4ce5d51b0536 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sat, 5 Aug 2017 03:39:55 +0200
|
||||
Subject: [PATCH] ntdll: Implement process token elevation through manifests.
|
||||
@@ -12,10 +12,10 @@ Subject: [PATCH] ntdll: Implement process token elevation through manifests.
|
||||
5 files changed, 68 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
|
||||
index d7dbe57..7588d5a 100644
|
||||
index c0708c6..479608f 100644
|
||||
--- a/dlls/ntdll/loader.c
|
||||
+++ b/dlls/ntdll/loader.c
|
||||
@@ -3321,6 +3321,32 @@ void WINAPI LdrInitializeThunk( CONTEXT *context, void **entry, ULONG_PTR unknow
|
||||
@@ -3505,6 +3505,32 @@ void WINAPI LdrInitializeThunk( CONTEXT *context, void **entry, ULONG_PTR unknow
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
@@ -48,7 +48,7 @@ index d7dbe57..7588d5a 100644
|
||||
* load_global_options
|
||||
*/
|
||||
static void load_global_options(void)
|
||||
@@ -3373,6 +3399,7 @@ static void load_global_options(void)
|
||||
@@ -3557,6 +3583,7 @@ static void load_global_options(void)
|
||||
}
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@ index d7dbe57..7588d5a 100644
|
||||
/***********************************************************************
|
||||
* RtlImageDirectoryEntryToData (NTDLL.@)
|
||||
*/
|
||||
@@ -3408,7 +3435,6 @@ PVOID WINAPI RtlImageDirectoryEntryToData( HMODULE module, BOOL image, WORD dir,
|
||||
@@ -3592,7 +3619,6 @@ PVOID WINAPI RtlImageDirectoryEntryToData( HMODULE module, BOOL image, WORD dir,
|
||||
return RtlImageRvaToVa( nt, module, addr, NULL );
|
||||
}
|
||||
|
||||
@@ -64,16 +64,16 @@ index d7dbe57..7588d5a 100644
|
||||
/***********************************************************************
|
||||
* RtlImageRvaToSection (NTDLL.@)
|
||||
*/
|
||||
@@ -3505,7 +3531,7 @@ void __wine_process_init(void)
|
||||
{
|
||||
static const WCHAR kernel32W[] = {'k','e','r','n','e','l','3','2','.','d','l','l',0};
|
||||
@@ -3691,7 +3717,7 @@ void __wine_process_init(void)
|
||||
's','y','s','t','e','m','3','2','\\',
|
||||
'k','e','r','n','e','l','3','2','.','d','l','l',0};
|
||||
static const WCHAR globalflagW[] = {'G','l','o','b','a','l','F','l','a','g',0};
|
||||
-
|
||||
+ ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION runlevel;
|
||||
WINE_MODREF *wm;
|
||||
NTSTATUS status;
|
||||
ANSI_STRING func_name;
|
||||
@@ -3556,6 +3582,16 @@ void __wine_process_init(void)
|
||||
@@ -3742,6 +3768,16 @@ void __wine_process_init(void)
|
||||
&NtCurrentTeb()->Peb->NtGlobalFlag, sizeof(DWORD), NULL );
|
||||
heap_set_debug_flags( GetProcessHeap() );
|
||||
|
||||
@@ -91,10 +91,10 @@ index d7dbe57..7588d5a 100644
|
||||
RemoveEntryList( &wm->ldr.InLoadOrderModuleList );
|
||||
InsertHeadList( &NtCurrentTeb()->Peb->LdrData->InLoadOrderModuleList, &wm->ldr.InLoadOrderModuleList );
|
||||
diff --git a/server/process.c b/server/process.c
|
||||
index 0a25f44..3988b52 100644
|
||||
index d8fdfcc..2c9365a 100644
|
||||
--- a/server/process.c
|
||||
+++ b/server/process.c
|
||||
@@ -1109,6 +1109,14 @@ struct process_snapshot *process_snap( int *count )
|
||||
@@ -1129,6 +1129,14 @@ struct process_snapshot *process_snap( int *count )
|
||||
return snapshot;
|
||||
}
|
||||
|
||||
@@ -110,10 +110,10 @@ index 0a25f44..3988b52 100644
|
||||
DECL_HANDLER(new_process)
|
||||
{
|
||||
diff --git a/server/process.h b/server/process.h
|
||||
index 4566a04..029b328 100644
|
||||
index d9d29f0..a494eab 100644
|
||||
--- a/server/process.h
|
||||
+++ b/server/process.h
|
||||
@@ -138,6 +138,7 @@ extern void break_process( struct process *process );
|
||||
@@ -139,6 +139,7 @@ extern void break_process( struct process *process );
|
||||
extern void detach_debugged_processes( struct thread *debugger );
|
||||
extern struct process_snapshot *process_snap( int *count );
|
||||
extern void enum_processes( int (*cb)(struct process*, void*), void *user);
|
||||
@@ -122,10 +122,10 @@ index 4566a04..029b328 100644
|
||||
/* console functions */
|
||||
extern void inherit_console(struct thread *parent_thread, struct process *process, obj_handle_t hconin);
|
||||
diff --git a/server/protocol.def b/server/protocol.def
|
||||
index 071f740..cc44503 100644
|
||||
index 2b8d51a..650c279 100644
|
||||
--- a/server/protocol.def
|
||||
+++ b/server/protocol.def
|
||||
@@ -3674,6 +3674,13 @@ struct handle_info
|
||||
@@ -3721,6 +3721,13 @@ struct handle_info
|
||||
@END
|
||||
|
||||
|
||||
@@ -140,10 +140,10 @@ index 071f740..cc44503 100644
|
||||
@REQ(create_completion)
|
||||
unsigned int access; /* desired access to a port */
|
||||
diff --git a/server/token.c b/server/token.c
|
||||
index e449e61..961fbe7 100644
|
||||
index fcab799..181219d 100644
|
||||
--- a/server/token.c
|
||||
+++ b/server/token.c
|
||||
@@ -1797,3 +1797,17 @@ DECL_HANDLER(create_token)
|
||||
@@ -1806,3 +1806,17 @@ DECL_HANDLER(create_token)
|
||||
release_object( token );
|
||||
}
|
||||
}
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From e571cdf9236e083f196c09d0fc96ed7c98fae440 Mon Sep 17 00:00:00 2001
|
||||
From 9f35230848f29e79b65c8e340221d7eb81382a43 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sun, 6 Aug 2017 02:08:05 +0200
|
||||
Subject: [PATCH] server: Implement support for creating processes using a
|
||||
@@ -15,10 +15,10 @@ Subject: [PATCH] server: Implement support for creating processes using a
|
||||
7 files changed, 66 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c
|
||||
index bb6cc3e..7b202db 100644
|
||||
index 802d99f2a12..03c0588d59a 100644
|
||||
--- a/dlls/kernel32/process.c
|
||||
+++ b/dlls/kernel32/process.c
|
||||
@@ -2289,7 +2289,7 @@ static BOOL replace_process( HANDLE handle, const RTL_USER_PROCESS_PARAMETERS *p
|
||||
@@ -2341,7 +2341,7 @@ static BOOL replace_process( HANDLE handle, const RTL_USER_PROCESS_PARAMETERS *p
|
||||
* Create a new process. If hFile is a valid handle we have an exe
|
||||
* file, otherwise it is a Winelib app.
|
||||
*/
|
||||
@@ -27,7 +27,7 @@ index bb6cc3e..7b202db 100644
|
||||
BOOL inherit, DWORD flags, const RTL_USER_PROCESS_PARAMETERS *params,
|
||||
LPPROCESS_INFORMATION info, LPCSTR unixdir, const pe_image_info_t *pe_info )
|
||||
{
|
||||
@@ -2356,6 +2356,7 @@ static BOOL create_process( HANDLE hFile, LPSECURITY_ATTRIBUTES psa, LPSECURITY_
|
||||
@@ -2408,6 +2408,7 @@ static BOOL create_process( HANDLE hFile, LPSECURITY_ATTRIBUTES psa, LPSECURITY_
|
||||
req->access = PROCESS_ALL_ACCESS;
|
||||
req->cpu = pe_info->cpu;
|
||||
req->info_size = startup_info_size;
|
||||
@@ -35,7 +35,7 @@ index bb6cc3e..7b202db 100644
|
||||
wine_server_add_data( req, objattr, attr_len );
|
||||
wine_server_add_data( req, startup_info, startup_info_size );
|
||||
wine_server_add_data( req, params->Environment, (env_end - params->Environment) * sizeof(WCHAR) );
|
||||
@@ -2526,7 +2527,7 @@ static RTL_USER_PROCESS_PARAMETERS *get_vdm_params( const RTL_USER_PROCESS_PARAM
|
||||
@@ -2567,7 +2568,7 @@ static RTL_USER_PROCESS_PARAMETERS *get_vdm_params( const RTL_USER_PROCESS_PARAM
|
||||
*
|
||||
* Create a new VDM process for a 16-bit or DOS application.
|
||||
*/
|
||||
@@ -44,7 +44,7 @@ index bb6cc3e..7b202db 100644
|
||||
BOOL inherit, DWORD flags, const RTL_USER_PROCESS_PARAMETERS *params,
|
||||
LPPROCESS_INFORMATION info, LPCSTR unixdir )
|
||||
{
|
||||
@@ -2536,7 +2537,7 @@ static BOOL create_vdm_process( LPSECURITY_ATTRIBUTES psa, LPSECURITY_ATTRIBUTES
|
||||
@@ -2577,7 +2578,7 @@ static BOOL create_vdm_process( LPSECURITY_ATTRIBUTES psa, LPSECURITY_ATTRIBUTES
|
||||
|
||||
if (!(new_params = get_vdm_params( params, &pe_info ))) return FALSE;
|
||||
|
||||
@@ -53,7 +53,7 @@ index bb6cc3e..7b202db 100644
|
||||
RtlDestroyProcessParameters( new_params );
|
||||
return ret;
|
||||
}
|
||||
@@ -2547,7 +2548,7 @@ static BOOL create_vdm_process( LPSECURITY_ATTRIBUTES psa, LPSECURITY_ATTRIBUTES
|
||||
@@ -2588,7 +2589,7 @@ static BOOL create_vdm_process( LPSECURITY_ATTRIBUTES psa, LPSECURITY_ATTRIBUTES
|
||||
*
|
||||
* Create a new cmd shell process for a .BAT file.
|
||||
*/
|
||||
@@ -62,7 +62,7 @@ index bb6cc3e..7b202db 100644
|
||||
BOOL inherit, DWORD flags, LPSTARTUPINFOW startup,
|
||||
const RTL_USER_PROCESS_PARAMETERS *params,
|
||||
LPPROCESS_INFORMATION info )
|
||||
@@ -2577,9 +2578,9 @@ static BOOL create_cmd_process( LPSECURITY_ATTRIBUTES psa, LPSECURITY_ATTRIBUTES
|
||||
@@ -2618,9 +2619,9 @@ static BOOL create_cmd_process( LPSECURITY_ATTRIBUTES psa, LPSECURITY_ATTRIBUTES
|
||||
strcatW( newcmdline, params->CommandLine.Buffer );
|
||||
strcatW( newcmdline, quotW );
|
||||
if (params->CurrentDirectory.DosPath.Length) cur_dir = params->CurrentDirectory.DosPath.Buffer;
|
||||
@@ -74,7 +74,7 @@ index bb6cc3e..7b202db 100644
|
||||
HeapFree( GetProcessHeap(), 0, newcmdline );
|
||||
return ret;
|
||||
}
|
||||
@@ -2692,7 +2693,9 @@ BOOL WINAPI CreateProcessInternalW( HANDLE token, LPCWSTR app_name, LPWSTR cmd_l
|
||||
@@ -2734,7 +2735,9 @@ BOOL WINAPI CreateProcessInternalW( HANDLE token, LPCWSTR app_name, LPWSTR cmd_l
|
||||
|
||||
TRACE("app %s cmdline %s\n", debugstr_w(app_name), debugstr_w(cmd_line) );
|
||||
|
||||
@@ -85,7 +85,7 @@ index bb6cc3e..7b202db 100644
|
||||
if (new_token) FIXME("No support for returning created process token\n");
|
||||
|
||||
if (!(tidy_cmdline = get_file_name( app_name, cmd_line, name, ARRAY_SIZE( name ), &hFile, &is_64bit )))
|
||||
@@ -2760,17 +2763,17 @@ BOOL WINAPI CreateProcessInternalW( HANDLE token, LPCWSTR app_name, LPWSTR cmd_l
|
||||
@@ -2802,17 +2805,17 @@ BOOL WINAPI CreateProcessInternalW( HANDLE token, LPCWSTR app_name, LPWSTR cmd_l
|
||||
debugstr_w(name), is_64bit_arch(pe_info.cpu) ? 64 : 32,
|
||||
wine_dbgstr_longlong(pe_info.base), wine_dbgstr_longlong(pe_info.base + pe_info.map_size),
|
||||
cpu_names[pe_info.cpu] );
|
||||
@@ -106,7 +106,7 @@ index bb6cc3e..7b202db 100644
|
||||
inherit, flags, params, info, unixdir, &pe_info );
|
||||
break;
|
||||
case BINARY_UNKNOWN:
|
||||
@@ -2780,14 +2783,14 @@ BOOL WINAPI CreateProcessInternalW( HANDLE token, LPCWSTR app_name, LPWSTR cmd_l
|
||||
@@ -2822,14 +2825,14 @@ BOOL WINAPI CreateProcessInternalW( HANDLE token, LPCWSTR app_name, LPWSTR cmd_l
|
||||
if (!strcmpiW( p, comW ) || !strcmpiW( p, pifW ))
|
||||
{
|
||||
TRACE( "starting %s as DOS binary\n", debugstr_w(name) );
|
||||
@@ -124,10 +124,10 @@ index bb6cc3e..7b202db 100644
|
||||
break;
|
||||
}
|
||||
diff --git a/server/process.c b/server/process.c
|
||||
index af2ba3d..57bf0ec 100644
|
||||
index 30832f474da..028ffa1b454 100644
|
||||
--- a/server/process.c
|
||||
+++ b/server/process.c
|
||||
@@ -486,7 +486,7 @@ static void start_sigkill_timer( struct process *process )
|
||||
@@ -491,7 +491,7 @@ static void start_sigkill_timer( struct process *process )
|
||||
/* create a new process */
|
||||
/* if the function fails the fd is closed */
|
||||
struct process *create_process( int fd, struct process *parent, int inherit_all,
|
||||
@@ -136,7 +136,7 @@ index af2ba3d..57bf0ec 100644
|
||||
{
|
||||
struct process *process;
|
||||
|
||||
@@ -561,7 +561,7 @@ struct process *create_process( int fd, struct process *parent, int inherit_all,
|
||||
@@ -567,7 +567,7 @@ struct process *create_process( int fd, struct process *parent, int inherit_all,
|
||||
: alloc_handle_table( process, 0 );
|
||||
/* Note: for security reasons, starting a new process does not attempt
|
||||
* to use the current impersonation token for the new process */
|
||||
@@ -145,7 +145,7 @@ index af2ba3d..57bf0ec 100644
|
||||
process->affinity = parent->affinity;
|
||||
}
|
||||
if (!process->handles || !process->token) goto error;
|
||||
@@ -1127,6 +1127,7 @@ DECL_HANDLER(new_process)
|
||||
@@ -1123,6 +1123,7 @@ DECL_HANDLER(new_process)
|
||||
const struct security_descriptor *sd;
|
||||
const struct object_attributes *objattr = get_req_object_attributes( &sd, &name, NULL );
|
||||
struct process *process = NULL;
|
||||
@@ -153,7 +153,7 @@ index af2ba3d..57bf0ec 100644
|
||||
struct process *parent = current->process;
|
||||
int socket_fd = thread_get_inflight_fd( current, req->socket_fd );
|
||||
|
||||
@@ -1167,10 +1168,39 @@ DECL_HANDLER(new_process)
|
||||
@@ -1163,10 +1164,39 @@ DECL_HANDLER(new_process)
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -193,7 +193,7 @@ index af2ba3d..57bf0ec 100644
|
||||
return;
|
||||
}
|
||||
info->process = NULL;
|
||||
@@ -1217,7 +1247,7 @@ DECL_HANDLER(new_process)
|
||||
@@ -1213,7 +1243,7 @@ DECL_HANDLER(new_process)
|
||||
#undef FIXUP_LEN
|
||||
}
|
||||
|
||||
@@ -202,7 +202,7 @@ index af2ba3d..57bf0ec 100644
|
||||
|
||||
process->startup_info = (struct startup_info *)grab_object( info );
|
||||
|
||||
@@ -1279,6 +1309,7 @@ DECL_HANDLER(new_process)
|
||||
@@ -1275,6 +1305,7 @@ DECL_HANDLER(new_process)
|
||||
reply->handle = alloc_handle_no_access_check( parent, process, req->access, objattr->attributes );
|
||||
|
||||
done:
|
||||
@@ -210,7 +210,7 @@ index af2ba3d..57bf0ec 100644
|
||||
if (process) release_object( process );
|
||||
release_object( info );
|
||||
}
|
||||
@@ -1311,7 +1342,7 @@ DECL_HANDLER(exec_process)
|
||||
@@ -1307,7 +1338,7 @@ DECL_HANDLER(exec_process)
|
||||
close( socket_fd );
|
||||
return;
|
||||
}
|
||||
@@ -220,10 +220,10 @@ index af2ba3d..57bf0ec 100644
|
||||
release_object( process );
|
||||
}
|
||||
diff --git a/server/process.h b/server/process.h
|
||||
index 029b328..ea28091 100644
|
||||
index f21ab7722a9..774c147e783 100644
|
||||
--- a/server/process.h
|
||||
+++ b/server/process.h
|
||||
@@ -116,7 +116,7 @@ extern unsigned int alloc_ptid( void *ptr );
|
||||
@@ -117,7 +117,7 @@ extern unsigned int alloc_ptid( void *ptr );
|
||||
extern void free_ptid( unsigned int id );
|
||||
extern void *get_ptid_entry( unsigned int id );
|
||||
extern struct process *create_process( int fd, struct process *parent, int inherit_all,
|
||||
@@ -233,22 +233,22 @@ index 029b328..ea28091 100644
|
||||
extern struct thread *get_process_first_thread( struct process *process );
|
||||
extern struct process *get_process_from_id( process_id_t id );
|
||||
diff --git a/server/protocol.def b/server/protocol.def
|
||||
index 607644e..1b5e6de 100644
|
||||
index fcca1d255ba..4b01c6d1904 100644
|
||||
--- a/server/protocol.def
|
||||
+++ b/server/protocol.def
|
||||
@@ -744,6 +744,7 @@ struct rawinput_device
|
||||
@@ -790,6 +790,7 @@ struct rawinput_device
|
||||
unsigned int access; /* access rights for process object */
|
||||
cpu_type_t cpu; /* CPU that the new process will use */
|
||||
client_cpu_t cpu; /* CPU that the new process will use */
|
||||
data_size_t info_size; /* size of startup info */
|
||||
+ obj_handle_t token; /* token for the new process */
|
||||
VARARG(objattr,object_attributes); /* object attributes */
|
||||
VARARG(info,startup_info,info_size); /* startup information */
|
||||
VARARG(env,unicode_str); /* environment for new process */
|
||||
diff --git a/server/request.c b/server/request.c
|
||||
index c10c4e6..86f293f 100644
|
||||
index d2adb08a183..139d643e8c8 100644
|
||||
--- a/server/request.c
|
||||
+++ b/server/request.c
|
||||
@@ -577,7 +577,7 @@ static void master_socket_poll_event( struct fd *fd, int event )
|
||||
@@ -578,7 +578,7 @@ static void master_socket_poll_event( struct fd *fd, int event )
|
||||
int client = accept( get_unix_fd( master_socket->fd ), (struct sockaddr *) &dummy, &len );
|
||||
if (client == -1) return;
|
||||
fcntl( client, F_SETFL, O_NONBLOCK );
|
||||
@@ -258,7 +258,7 @@ index c10c4e6..86f293f 100644
|
||||
create_thread( -1, process, NULL );
|
||||
release_object( process );
|
||||
diff --git a/server/security.h b/server/security.h
|
||||
index 21e90cc..32dfe5f 100644
|
||||
index 21e90ccf23f..32dfe5f8db9 100644
|
||||
--- a/server/security.h
|
||||
+++ b/server/security.h
|
||||
@@ -67,6 +67,8 @@ extern const ACL *token_get_default_dacl( struct token *token );
|
||||
@@ -271,10 +271,10 @@ index 21e90cc..32dfe5f 100644
|
||||
static inline const ACE_HEADER *ace_next( const ACE_HEADER *ace )
|
||||
{
|
||||
diff --git a/server/token.c b/server/token.c
|
||||
index 1184241..5db97b4 100644
|
||||
index 181219d2179..858ec25d792 100644
|
||||
--- a/server/token.c
|
||||
+++ b/server/token.c
|
||||
@@ -836,6 +836,12 @@ int token_assign_label( struct token *token, PSID label )
|
||||
@@ -845,6 +845,12 @@ int token_assign_label( struct token *token, PSID label )
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -287,7 +287,7 @@ index 1184241..5db97b4 100644
|
||||
struct token *token_create_admin( void )
|
||||
{
|
||||
struct token *token = NULL;
|
||||
@@ -1262,6 +1268,11 @@ const SID *token_get_primary_group( struct token *token )
|
||||
@@ -1271,6 +1277,11 @@ const SID *token_get_primary_group( struct token *token )
|
||||
return token->primary_group;
|
||||
}
|
||||
|
||||
@@ -300,5 +300,5 @@ index 1184241..5db97b4 100644
|
||||
{
|
||||
GENERIC_MAPPING mapping;
|
||||
--
|
||||
1.9.1
|
||||
2.20.1
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 0616176a3276be4ae49dc86c7d96b11240afca78 Mon Sep 17 00:00:00 2001
|
||||
From 5bf0baa79c46ec44dfd5e1340e96ff9289bc37f8 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
|
||||
@@ -7,9 +7,9 @@ Subject: [PATCH] programs/runas: Basic implementation for starting processes
|
||||
---
|
||||
configure.ac | 1 +
|
||||
programs/runas/Makefile.in | 8 ++
|
||||
programs/runas/runas.c | 214 +++++++++++++++++++++++++++++++++++++++++++++
|
||||
programs/runas/runas.h | 26 ++++++
|
||||
programs/runas/runas.rc | 39 +++++++++
|
||||
programs/runas/runas.c | 214 +++++++++++++++++++++++++++++++++++++
|
||||
programs/runas/runas.h | 26 +++++
|
||||
programs/runas/runas.rc | 39 +++++++
|
||||
5 files changed, 288 insertions(+)
|
||||
create mode 100644 programs/runas/Makefile.in
|
||||
create mode 100644 programs/runas/runas.c
|
||||
@@ -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 b9ef668..404ab7a 100644
|
||||
index 499c4f37ca..6f12614af1 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -3879,6 +3879,7 @@ WINE_CONFIG_MAKEFILE(programs/regedit/tests)
|
||||
@@ -3891,6 +3891,7 @@ WINE_CONFIG_MAKEFILE(programs/regedit/tests)
|
||||
WINE_CONFIG_MAKEFILE(programs/regsvcs)
|
||||
WINE_CONFIG_MAKEFILE(programs/regsvr32)
|
||||
WINE_CONFIG_MAKEFILE(programs/rpcss)
|
||||
@@ -30,12 +30,12 @@ index b9ef668..404ab7a 100644
|
||||
WINE_CONFIG_MAKEFILE(programs/sc)
|
||||
diff --git a/programs/runas/Makefile.in b/programs/runas/Makefile.in
|
||||
new file mode 100644
|
||||
index 0000000..be9434b
|
||||
index 0000000000..33aa00ab03
|
||||
--- /dev/null
|
||||
+++ b/programs/runas/Makefile.in
|
||||
@@ -0,0 +1,8 @@
|
||||
+MODULE = runas.exe
|
||||
+APPMODE = -mconsole -municode
|
||||
+APPMODE = -mconsole -municode -mno-cygwin
|
||||
+IMPORTS = advapi32 user32
|
||||
+
|
||||
+C_SRCS = \
|
||||
@@ -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..8e96aff
|
||||
index 0000000000..412755afa0
|
||||
--- /dev/null
|
||||
+++ b/programs/runas/runas.c
|
||||
@@ -0,0 +1,214 @@
|
||||
@@ -69,7 +69,7 @@ index 0000000..8e96aff
|
||||
+ */
|
||||
+
|
||||
+#include <windows.h>
|
||||
+#include <wine/unicode.h>
|
||||
+#include <wchar.h>
|
||||
+#include <wine/debug.h>
|
||||
+
|
||||
+#include "runas.h"
|
||||
@@ -153,10 +153,10 @@ index 0000000..8e96aff
|
||||
+
|
||||
+static WCHAR *starts_with(WCHAR *str, const WCHAR *start)
|
||||
+{
|
||||
+ DWORD start_len = strlenW(start);
|
||||
+ if (strlenW(str) < start_len)
|
||||
+ DWORD start_len = lstrlenW(start);
|
||||
+ if (lstrlenW(str) < start_len)
|
||||
+ return NULL;
|
||||
+ if (strncmpW(str, start, start_len))
|
||||
+ if (wcsncmp(str, start, start_len))
|
||||
+ return NULL;
|
||||
+ return str + start_len;
|
||||
+}
|
||||
@@ -176,8 +176,8 @@ index 0000000..8e96aff
|
||||
+ WCHAR *arg;
|
||||
+
|
||||
+ if ((arg = starts_with(argv[i], trustlevelW)))
|
||||
+ cmd->trustlevel = strtoulW(arg, NULL, 0);
|
||||
+ else if (!strcmpW(argv[i], showtrustlevelsW))
|
||||
+ cmd->trustlevel = wcstoul(arg, NULL, 0);
|
||||
+ else if (!lstrcmpW(argv[i], showtrustlevelsW))
|
||||
+ show_trustlevels();
|
||||
+ else
|
||||
+ WINE_FIXME("Ignoring parameter %s\n", wine_dbgstr_w(argv[i]));
|
||||
@@ -264,7 +264,7 @@ index 0000000..8e96aff
|
||||
+}
|
||||
diff --git a/programs/runas/runas.h b/programs/runas/runas.h
|
||||
new file mode 100644
|
||||
index 0000000..40599a3
|
||||
index 0000000000..40599a3b33
|
||||
--- /dev/null
|
||||
+++ b/programs/runas/runas.h
|
||||
@@ -0,0 +1,26 @@
|
||||
@@ -296,7 +296,7 @@ index 0000000..40599a3
|
||||
+#define STRING_START_ERROR 104
|
||||
diff --git a/programs/runas/runas.rc b/programs/runas/runas.rc
|
||||
new file mode 100644
|
||||
index 0000000..f9297a4
|
||||
index 0000000000..f9297a4479
|
||||
--- /dev/null
|
||||
+++ b/programs/runas/runas.rc
|
||||
@@ -0,0 +1,39 @@
|
||||
@@ -340,5 +340,5 @@ index 0000000..f9297a4
|
||||
+ %2!u!: %3\n"
|
||||
+}
|
||||
--
|
||||
2.7.4
|
||||
2.23.0.rc1
|
||||
|
||||
|
@@ -1,5 +1,4 @@
|
||||
Fixes: [40613] Basic implementation for token integrity levels and UAC handling
|
||||
Fixes: [39262] Run explorer.exe as unevaluated process
|
||||
Depends: advapi32-CreateRestrictedToken
|
||||
Depends: server-Misc_ACL
|
||||
Depends: Staging
|
||||
|
@@ -1,26 +1,26 @@
|
||||
From 7f05362e86a285551a5694e98fa9abecb99018a0 Mon Sep 17 00:00:00 2001
|
||||
From 19efcf925a49a5d7e0b82eb6e4797b0ac725f2dc 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:07:35 +0100
|
||||
Subject: [PATCH] ext-ms-win-xaml-pal-l1-1-0: Add dll and add stub for
|
||||
XamlBehaviorEnabled.
|
||||
|
||||
---
|
||||
configure.ac | 1 +
|
||||
dlls/ext-ms-win-xaml-pal-l1-1-0/Makefile.in | 4 +++
|
||||
.../ext-ms-win-xaml-pal-l1-1-0.spec | 6 ++++
|
||||
dlls/ext-ms-win-xaml-pal-l1-1-0/main.c | 35 +++++++++++++++++++
|
||||
configure.ac | 1 +
|
||||
dlls/ext-ms-win-xaml-pal-l1-1-0/Makefile.in | 4 +++
|
||||
.../ext-ms-win-xaml-pal-l1-1-0.spec | 6 ++++
|
||||
dlls/ext-ms-win-xaml-pal-l1-1-0/main.c | 35 ++++++++++++++++++++++
|
||||
4 files changed, 46 insertions(+)
|
||||
create mode 100644 dlls/ext-ms-win-xaml-pal-l1-1-0/Makefile.in
|
||||
create mode 100644 dlls/ext-ms-win-xaml-pal-l1-1-0/ext-ms-win-xaml-pal-l1-1-0.spec
|
||||
create mode 100644 dlls/ext-ms-win-xaml-pal-l1-1-0/main.c
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 420f6311db3..30718491bb8 100644
|
||||
index 8484c83..a9b51d2 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -3289,6 +3289,7 @@ WINE_CONFIG_MAKEFILE(dlls/ext-ms-win-rtcore-ntuser-sysparams-l1-1-0)
|
||||
WINE_CONFIG_MAKEFILE(dlls/ext-ms-win-security-credui-l1-1-0)
|
||||
WINE_CONFIG_MAKEFILE(dlls/ext-ms-win-security-cryptui-l1-1-0)
|
||||
@@ -3255,6 +3255,7 @@ WINE_CONFIG_MAKEFILE(dlls/ext-ms-win-shell-comctl32-init-l1-1-0)
|
||||
WINE_CONFIG_MAKEFILE(dlls/ext-ms-win-shell-comdlg32-l1-1-0)
|
||||
WINE_CONFIG_MAKEFILE(dlls/ext-ms-win-shell-shell32-l1-2-0)
|
||||
WINE_CONFIG_MAKEFILE(dlls/ext-ms-win-uxtheme-themes-l1-1-0)
|
||||
+WINE_CONFIG_MAKEFILE(dlls/ext-ms-win-xaml-pal-l1-1-0)
|
||||
WINE_CONFIG_MAKEFILE(dlls/faultrep)
|
||||
@@ -28,7 +28,7 @@ index 420f6311db3..30718491bb8 100644
|
||||
WINE_CONFIG_MAKEFILE(dlls/feclient)
|
||||
diff --git a/dlls/ext-ms-win-xaml-pal-l1-1-0/Makefile.in b/dlls/ext-ms-win-xaml-pal-l1-1-0/Makefile.in
|
||||
new file mode 100644
|
||||
index 00000000000..6382d85272b
|
||||
index 0000000..6382d85
|
||||
--- /dev/null
|
||||
+++ b/dlls/ext-ms-win-xaml-pal-l1-1-0/Makefile.in
|
||||
@@ -0,0 +1,4 @@
|
||||
@@ -38,7 +38,7 @@ index 00000000000..6382d85272b
|
||||
+ main.c
|
||||
diff --git a/dlls/ext-ms-win-xaml-pal-l1-1-0/ext-ms-win-xaml-pal-l1-1-0.spec b/dlls/ext-ms-win-xaml-pal-l1-1-0/ext-ms-win-xaml-pal-l1-1-0.spec
|
||||
new file mode 100644
|
||||
index 00000000000..c167f5e753e
|
||||
index 0000000..c167f5e
|
||||
--- /dev/null
|
||||
+++ b/dlls/ext-ms-win-xaml-pal-l1-1-0/ext-ms-win-xaml-pal-l1-1-0.spec
|
||||
@@ -0,0 +1,6 @@
|
||||
@@ -50,7 +50,7 @@ index 00000000000..c167f5e753e
|
||||
+@ stub XamlPalUninitialize
|
||||
diff --git a/dlls/ext-ms-win-xaml-pal-l1-1-0/main.c b/dlls/ext-ms-win-xaml-pal-l1-1-0/main.c
|
||||
new file mode 100644
|
||||
index 00000000000..3e282758f41
|
||||
index 0000000..3e28275
|
||||
--- /dev/null
|
||||
+++ b/dlls/ext-ms-win-xaml-pal-l1-1-0/main.c
|
||||
@@ -0,0 +1,35 @@
|
||||
@@ -90,5 +90,5 @@ index 00000000000..3e282758f41
|
||||
+ return TRUE;
|
||||
+}
|
||||
--
|
||||
2.17.0
|
||||
1.9.1
|
||||
|
||||
|
@@ -1,15 +1,15 @@
|
||||
From 9a67b4c62e5a575a38081114d4434f274355020e Mon Sep 17 00:00:00 2001
|
||||
From 21b4b65eadc9e39008ccadc48307fcfea05a24fb Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Tue, 12 Apr 2016 01:02:34 +0200
|
||||
Subject: [PATCH] uiautomationcore: Add dll and stub some functions.
|
||||
|
||||
---
|
||||
dlls/uiautomationcore/Makefile.in | 1 +
|
||||
dlls/uiautomationcore/uia_main.c | 53 ++++++++++++++++++++++++++++++++++-----
|
||||
dlls/uiautomationcore/uia_main.c | 53 +++++++++++++++++++++++++++----
|
||||
2 files changed, 48 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/dlls/uiautomationcore/Makefile.in b/dlls/uiautomationcore/Makefile.in
|
||||
index 5221450..5173f23 100644
|
||||
index b6edec5f6a9..bf2204d5ab4 100644
|
||||
--- a/dlls/uiautomationcore/Makefile.in
|
||||
+++ b/dlls/uiautomationcore/Makefile.in
|
||||
@@ -1,5 +1,6 @@
|
||||
@@ -17,10 +17,10 @@ index 5221450..5173f23 100644
|
||||
IMPORTLIB = uiautomationcore
|
||||
+IMPORTS = uuid
|
||||
|
||||
C_SRCS = \
|
||||
uia_main.c
|
||||
EXTRADLLFLAGS = -mno-cygwin
|
||||
|
||||
diff --git a/dlls/uiautomationcore/uia_main.c b/dlls/uiautomationcore/uia_main.c
|
||||
index f0d8247..b9c24b4 100644
|
||||
index f0d8247724d..b9c24b4b963 100644
|
||||
--- a/dlls/uiautomationcore/uia_main.c
|
||||
+++ b/dlls/uiautomationcore/uia_main.c
|
||||
@@ -1,4 +1,5 @@
|
||||
@@ -122,5 +122,5 @@ index f0d8247..b9c24b4 100644
|
||||
}
|
||||
|
||||
--
|
||||
1.9.1
|
||||
2.17.1
|
||||
|
||||
|
@@ -1,141 +0,0 @@
|
||||
From 23ce6bcd9ebd67d6b5ed991bad555ecbc014a08d Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Mon, 8 Feb 2016 04:55:07 +0100
|
||||
Subject: avifil32: Correctly handle compressed frames when desired format is
|
||||
specified.
|
||||
|
||||
---
|
||||
dlls/avifil32/getframe.c | 102 +++++++++++++++++++++++------------------------
|
||||
1 file changed, 50 insertions(+), 52 deletions(-)
|
||||
|
||||
diff --git a/dlls/avifil32/getframe.c b/dlls/avifil32/getframe.c
|
||||
index 46b1683..7d98d2e 100644
|
||||
--- a/dlls/avifil32/getframe.c
|
||||
+++ b/dlls/avifil32/getframe.c
|
||||
@@ -406,8 +406,6 @@ static HRESULT WINAPI IGetFrame_fnSetFormat(IGetFrame *iface,
|
||||
lpbi->biSize + lpbi->biClrUsed * sizeof(RGBQUAD));
|
||||
if (lpbi->biBitCount <= 8)
|
||||
ICDecompressGetPalette(This->hic, This->lpInFormat, This->lpOutFormat);
|
||||
-
|
||||
- return AVIERR_OK;
|
||||
} else {
|
||||
if (bBestDisplay) {
|
||||
ICGetDisplayFormat(This->hic, This->lpInFormat,
|
||||
@@ -417,64 +415,64 @@ static HRESULT WINAPI IGetFrame_fnSetFormat(IGetFrame *iface,
|
||||
AVIFILE_CloseCompressor(This);
|
||||
return AVIERR_NOCOMPRESSOR;
|
||||
}
|
||||
+ }
|
||||
|
||||
- /* check output format */
|
||||
- if (This->lpOutFormat->biClrUsed == 0 &&
|
||||
- This->lpOutFormat->biBitCount <= 8)
|
||||
- This->lpOutFormat->biClrUsed = 1u << This->lpOutFormat->biBitCount;
|
||||
- if (This->lpOutFormat->biSizeImage == 0 &&
|
||||
- This->lpOutFormat->biCompression == BI_RGB) {
|
||||
- This->lpOutFormat->biSizeImage =
|
||||
- DIBWIDTHBYTES(*This->lpOutFormat) * This->lpOutFormat->biHeight;
|
||||
- }
|
||||
+ /* check output format */
|
||||
+ if (This->lpOutFormat->biClrUsed == 0 &&
|
||||
+ This->lpOutFormat->biBitCount <= 8)
|
||||
+ This->lpOutFormat->biClrUsed = 1u << This->lpOutFormat->biBitCount;
|
||||
+ if (This->lpOutFormat->biSizeImage == 0 &&
|
||||
+ This->lpOutFormat->biCompression == BI_RGB) {
|
||||
+ This->lpOutFormat->biSizeImage =
|
||||
+ DIBWIDTHBYTES(*This->lpOutFormat) * This->lpOutFormat->biHeight;
|
||||
+ }
|
||||
|
||||
- if (lpBits == NULL) {
|
||||
- DWORD size = This->lpOutFormat->biClrUsed * sizeof(RGBQUAD);
|
||||
+ if (lpBits == NULL) {
|
||||
+ DWORD size = This->lpOutFormat->biClrUsed * sizeof(RGBQUAD);
|
||||
|
||||
- size += This->lpOutFormat->biSize + This->lpOutFormat->biSizeImage;
|
||||
- This->lpOutFormat = HeapReAlloc(GetProcessHeap(), 0, This->lpOutFormat, size);
|
||||
- if (This->lpOutFormat == NULL) {
|
||||
- AVIFILE_CloseCompressor(This);
|
||||
- return AVIERR_MEMORY;
|
||||
- }
|
||||
- This->lpOutBuffer = DIBPTR(This->lpOutFormat);
|
||||
- } else
|
||||
- This->lpOutBuffer = lpBits;
|
||||
-
|
||||
- /* for user size was irrelevant */
|
||||
- if (dx == -1)
|
||||
- dx = This->lpOutFormat->biWidth;
|
||||
- if (dy == -1)
|
||||
- dy = This->lpOutFormat->biHeight;
|
||||
-
|
||||
- /* need to resize? */
|
||||
- if (x != 0 || y != 0) {
|
||||
- if (dy == This->lpOutFormat->biHeight &&
|
||||
- dx == This->lpOutFormat->biWidth)
|
||||
- This->bResize = FALSE;
|
||||
- else
|
||||
- This->bResize = TRUE;
|
||||
+ size += This->lpOutFormat->biSize + This->lpOutFormat->biSizeImage;
|
||||
+ This->lpOutFormat = HeapReAlloc(GetProcessHeap(), 0, This->lpOutFormat, size);
|
||||
+ if (This->lpOutFormat == NULL) {
|
||||
+ AVIFILE_CloseCompressor(This);
|
||||
+ return AVIERR_MEMORY;
|
||||
}
|
||||
+ This->lpOutBuffer = DIBPTR(This->lpOutFormat);
|
||||
+ } else
|
||||
+ This->lpOutBuffer = lpBits;
|
||||
+
|
||||
+ /* for user size was irrelevant */
|
||||
+ if (dx == -1)
|
||||
+ dx = This->lpOutFormat->biWidth;
|
||||
+ if (dy == -1)
|
||||
+ dy = This->lpOutFormat->biHeight;
|
||||
+
|
||||
+ /* need to resize? */
|
||||
+ if (x != 0 || y != 0) {
|
||||
+ if (dy == This->lpOutFormat->biHeight &&
|
||||
+ dx == This->lpOutFormat->biWidth)
|
||||
+ This->bResize = FALSE;
|
||||
+ else
|
||||
+ This->bResize = TRUE;
|
||||
+ }
|
||||
|
||||
- if (This->bResize) {
|
||||
- This->x = x;
|
||||
- This->y = y;
|
||||
- This->dx = dx;
|
||||
- This->dy = dy;
|
||||
-
|
||||
- if (ICDecompressExBegin(This->hic,0,This->lpInFormat,This->lpInBuffer,0,
|
||||
- 0,This->lpInFormat->biWidth,
|
||||
- This->lpInFormat->biHeight,This->lpOutFormat,
|
||||
- This->lpOutBuffer, x, y, dx, dy) == ICERR_OK)
|
||||
- return AVIERR_OK;
|
||||
- } else if (ICDecompressBegin(This->hic, This->lpInFormat,
|
||||
- This->lpOutFormat) == ICERR_OK)
|
||||
+ if (This->bResize) {
|
||||
+ This->x = x;
|
||||
+ This->y = y;
|
||||
+ This->dx = dx;
|
||||
+ This->dy = dy;
|
||||
+
|
||||
+ if (ICDecompressExBegin(This->hic,0,This->lpInFormat,This->lpInBuffer,0,
|
||||
+ 0,This->lpInFormat->biWidth,
|
||||
+ This->lpInFormat->biHeight,This->lpOutFormat,
|
||||
+ This->lpOutBuffer, x, y, dx, dy) == ICERR_OK)
|
||||
return AVIERR_OK;
|
||||
+ } else if (ICDecompressBegin(This->hic, This->lpInFormat,
|
||||
+ This->lpOutFormat) == ICERR_OK)
|
||||
+ return AVIERR_OK;
|
||||
|
||||
- AVIFILE_CloseCompressor(This);
|
||||
+ AVIFILE_CloseCompressor(This);
|
||||
|
||||
- return AVIERR_COMPRESSOR;
|
||||
- }
|
||||
+ return AVIERR_COMPRESSOR;
|
||||
}
|
||||
|
||||
static const struct IGetFrameVtbl igetframeVtbl = {
|
||||
--
|
||||
2.7.0
|
||||
|
@@ -1 +0,0 @@
|
||||
Fixes: Correctly handle compressed frames when desired format is specified
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user