Compare commits

..

12 Commits
v3.16 ... v3.17

Author SHA1 Message Date
Zebediah Figura
dc83f04f04 Release v3.17 2018-09-29 21:15:51 -05:00
Zebediah Figura
761ca063a0 Rebase against f11563c65fa50e2f8b7e39cade34bb7a998b26f7. 2018-09-28 16:57:12 -05:00
Zebediah Figura
732d40058d Rebase against d8f3f1b71726b793f2f9a86225a73a7d286e62b3. 2018-09-28 11:01:58 -05:00
Zebediah Figura
64561065d2 Rebase against dbaaee8e4d72b929e86c590a9e40c48ea86468c4. 2018-09-25 15:47:42 -05:00
Zebediah Figura
1bd95055a7 Rebase against 52fecef1a237368eee84ebc9b366107ee2509562. 2018-09-24 20:14:52 -05:00
Zebediah Figura
3f082c2d0a Rebase against b1a3b9e5ce74990777fca94658833802cb7b7a09. 2018-09-20 18:18:30 -05:00
Zebediah Figura
42312b1e3f Compiler_Warnings: Remove workarounds for older GCC version. 2018-09-19 16:52:37 -05:00
Zebediah Figura
a840ce50e7 ntoskrnl-Synchronization: Add patchset. 2018-09-18 21:31:16 -05:00
Zebediah Figura
912b650b76 Rebase against 93994dfc0b99789e3a9c1490b4d93082f34b8dcc. 2018-09-18 20:42:30 -05:00
Zebediah Figura
5ae728e2ec Rebase against 8a985174ebc1b041d9a4f1abbdc184fe692d25bf.
Also fix wined3d-Indexed_Vertex_Blending rebase, again.
2018-09-17 20:55:00 -05:00
Alistair Leslie-Hughes
9517e98320 Removed dsound-Revert_Cleanup patchset
This patchset appears not to correct anything and is just here
to make applying other patchsets easier.
2018-09-17 18:15:46 +10:00
Alistair Leslie-Hughes
bd3794c11e Removed opengl32-Revert_Disable_Ext patchset
All regression this was attempted to work around appear to be fixed.
Infact this is now causing a regression of its own
https://bugs.winehq.org/show_bug.cgi?id=45826
2018-09-17 18:15:46 +10:00
62 changed files with 2232 additions and 1495 deletions

View File

@@ -1,24 +0,0 @@
From 560a25c662f7b56d2b895759be1ea65c64d0f5af Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sun, 4 Jun 2017 12:57:17 +0200
Subject: ws2_32/tests: Work around an incorrect detection in GCC 7.
---
dlls/ws2_32/tests/sock.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c
index 677a750ec6b..65c82e36524 100644
--- a/dlls/ws2_32/tests/sock.c
+++ b/dlls/ws2_32/tests/sock.c
@@ -3601,6 +3601,7 @@ static DWORD WINAPI SelectReadThread(void *param)
struct sockaddr_in addr;
struct timeval select_timeout;
+ memset(&readfds, 0, sizeof(readfds));
FD_ZERO(&readfds);
FD_SET(par->s, &readfds);
select_timeout.tv_sec=5;
--
2.13.0

View File

@@ -1,67 +0,0 @@
From cd34de81164087b3593d0ec9416e2f157a5df40d Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Fri, 8 Aug 2014 19:33:14 -0600
Subject: Appease the blessed version of gcc (4.5) when -Werror is enabled.
---
dlls/d3d9/tests/visual.c | 2 +-
dlls/netapi32/netapi32.c | 2 +-
dlls/wined3d/glsl_shader.c | 2 +-
tools/makedep.c | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/dlls/d3d9/tests/visual.c b/dlls/d3d9/tests/visual.c
index c8a6a1fa5a8..0261d3708e6 100644
--- a/dlls/d3d9/tests/visual.c
+++ b/dlls/d3d9/tests/visual.c
@@ -12304,7 +12304,7 @@ static void yuv_layout_test(void)
IDirect3D9 *d3d;
D3DCOLOR color;
DWORD ref_color;
- BYTE *buf, *chroma_buf, *u_buf, *v_buf;
+ BYTE *buf, *chroma_buf, *u_buf = NULL, *v_buf = NULL;
UINT width = 20, height = 16;
IDirect3DDevice9 *device;
ULONG refcount;
diff --git a/dlls/netapi32/netapi32.c b/dlls/netapi32/netapi32.c
index 278d4528b01..1c5f110b828 100644
--- a/dlls/netapi32/netapi32.c
+++ b/dlls/netapi32/netapi32.c
@@ -780,7 +780,7 @@ static NET_API_STATUS share_info_to_samba( DWORD level, const BYTE *buf, unsigne
static NET_API_STATUS share_add( LMSTR servername, DWORD level, LPBYTE buf, LPDWORD parm_err )
{
char *server = NULL;
- unsigned char *info;
+ unsigned char *info = NULL;
NET_API_STATUS status;
if (servername && !(server = strdup_unixcp( servername ))) return ERROR_OUTOFMEMORY;
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index f96f48d97d1..8fe3318cd78 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -9721,7 +9721,7 @@ static void set_glsl_shader_program(const struct wined3d_context *context, const
GLuint ds_id = 0;
GLuint gs_id = 0;
GLuint ps_id = 0;
- struct list *ps_list, *vs_list;
+ struct list *ps_list = NULL, *vs_list = NULL;
WORD attribs_map;
struct wined3d_string_buffer *tmp_name;
diff --git a/tools/makedep.c b/tools/makedep.c
index 296356b0a57..5a2873b56f1 100644
--- a/tools/makedep.c
+++ b/tools/makedep.c
@@ -1608,7 +1608,7 @@ static const char *get_make_variable( const struct makefile *make, const char *n
static char *get_expanded_make_variable( const struct makefile *make, const char *name )
{
const char *var;
- char *p, *end, *expand, *tmp;
+ char *p, *end, *expand, *tmp = NULL;
var = get_make_variable( make, name );
if (!var) return NULL;
--
2.13.1

View File

@@ -1,4 +1,4 @@
From 79ff79dba6d5c8008c53e4bcf5e38c3a54271091 Mon Sep 17 00:00:00 2001
From e8bc998c7b00a18a724f6cfd2823aefcd8b1b15c Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Tue, 22 Mar 2016 21:54:26 +0100
Subject: d2d1: Avoid implicit cast of interface pointer.
@@ -9,10 +9,10 @@ Subject: d2d1: Avoid implicit cast of interface pointer.
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/dlls/d2d1/brush.c b/dlls/d2d1/brush.c
index 7f4c7bbb763..30d25fec4b4 100644
index b03af89..319a188 100644
--- a/dlls/d2d1/brush.c
+++ b/dlls/d2d1/brush.c
@@ -251,7 +251,7 @@ static void d2d_brush_init(struct d2d_brush *brush, ID2D1Factory *factory,
@@ -256,7 +256,7 @@ static void d2d_brush_init(struct d2d_brush *brush, ID2D1Factory *factory,
static inline struct d2d_brush *impl_from_ID2D1SolidColorBrush(ID2D1SolidColorBrush *iface)
{
@@ -21,7 +21,7 @@ index 7f4c7bbb763..30d25fec4b4 100644
}
static HRESULT STDMETHODCALLTYPE d2d_solid_color_brush_QueryInterface(ID2D1SolidColorBrush *iface,
@@ -394,7 +394,7 @@ HRESULT d2d_solid_color_brush_create(ID2D1Factory *factory, const D2D1_COLOR_F *
@@ -399,7 +399,7 @@ HRESULT d2d_solid_color_brush_create(ID2D1Factory *factory, const D2D1_COLOR_F *
static inline struct d2d_brush *impl_from_ID2D1LinearGradientBrush(ID2D1LinearGradientBrush *iface)
{
@@ -30,7 +30,7 @@ index 7f4c7bbb763..30d25fec4b4 100644
}
static HRESULT STDMETHODCALLTYPE d2d_linear_gradient_brush_QueryInterface(ID2D1LinearGradientBrush *iface,
@@ -580,7 +580,7 @@ HRESULT d2d_linear_gradient_brush_create(ID2D1Factory *factory, const D2D1_LINEA
@@ -586,7 +586,7 @@ HRESULT d2d_linear_gradient_brush_create(ID2D1Factory *factory,
static inline struct d2d_brush *impl_from_ID2D1RadialGradientBrush(ID2D1RadialGradientBrush *iface)
{
@@ -39,20 +39,20 @@ index 7f4c7bbb763..30d25fec4b4 100644
}
static HRESULT STDMETHODCALLTYPE d2d_radial_gradient_brush_QueryInterface(ID2D1RadialGradientBrush *iface,
@@ -776,7 +776,7 @@ HRESULT d2d_radial_gradient_brush_create(ID2D1Factory *factory, const D2D1_BRUSH
@@ -818,7 +818,7 @@ HRESULT d2d_radial_gradient_brush_create(ID2D1Factory *factory,
static inline struct d2d_brush *impl_from_ID2D1BitmapBrush(ID2D1BitmapBrush *iface)
static inline struct d2d_brush *impl_from_ID2D1BitmapBrush1(ID2D1BitmapBrush1 *iface)
{
- return CONTAINING_RECORD(iface, struct d2d_brush, ID2D1Brush_iface);
+ return CONTAINING_RECORD((ID2D1Brush *)iface, struct d2d_brush, ID2D1Brush_iface);
}
static HRESULT STDMETHODCALLTYPE d2d_bitmap_brush_QueryInterface(ID2D1BitmapBrush *iface,
static HRESULT STDMETHODCALLTYPE d2d_bitmap_brush_QueryInterface(ID2D1BitmapBrush1 *iface,
diff --git a/dlls/d2d1/geometry.c b/dlls/d2d1/geometry.c
index a9588985642..b8457a9e1ea 100644
index d716fb1..18d8deb 100644
--- a/dlls/d2d1/geometry.c
+++ b/dlls/d2d1/geometry.c
@@ -3024,7 +3024,7 @@ static const struct ID2D1GeometrySinkVtbl d2d_geometry_sink_vtbl =
@@ -2987,7 +2987,7 @@ static const struct ID2D1GeometrySinkVtbl d2d_geometry_sink_vtbl =
static inline struct d2d_geometry *impl_from_ID2D1PathGeometry(ID2D1PathGeometry *iface)
{
@@ -61,7 +61,7 @@ index a9588985642..b8457a9e1ea 100644
}
static HRESULT STDMETHODCALLTYPE d2d_path_geometry_QueryInterface(ID2D1PathGeometry *iface, REFIID iid, void **out)
@@ -3540,7 +3540,7 @@ void d2d_path_geometry_init(struct d2d_geometry *geometry, ID2D1Factory *factory
@@ -3503,7 +3503,7 @@ void d2d_path_geometry_init(struct d2d_geometry *geometry, ID2D1Factory *factory
static inline struct d2d_geometry *impl_from_ID2D1RectangleGeometry(ID2D1RectangleGeometry *iface)
{
@@ -70,7 +70,7 @@ index a9588985642..b8457a9e1ea 100644
}
static HRESULT STDMETHODCALLTYPE d2d_rectangle_geometry_QueryInterface(ID2D1RectangleGeometry *iface,
@@ -3876,7 +3876,7 @@ fail:
@@ -3839,7 +3839,7 @@ fail:
static inline struct d2d_geometry *impl_from_ID2D1TransformedGeometry(ID2D1TransformedGeometry *iface)
{
@@ -80,5 +80,5 @@ index a9588985642..b8457a9e1ea 100644
static HRESULT STDMETHODCALLTYPE d2d_transformed_geometry_QueryInterface(ID2D1TransformedGeometry *iface,
--
2.14.1
2.7.4

View File

@@ -1,2 +1 @@
Depends: server-Misc_ACL
Depends: server-CreateProcess_ACLs

View File

@@ -1,4 +1,4 @@
From 45713db2d90bd8833415ad2af1920cc792767535 Mon Sep 17 00:00:00 2001
From 6dc2138136a0699c8e8d1337b646a09b93cd8b0f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sat, 5 Aug 2017 04:02:16 +0200
Subject: [PATCH] kernel32: Implement CreateProcessInternalW.
@@ -11,7 +11,7 @@ Subject: [PATCH] kernel32: Implement CreateProcessInternalW.
4 files changed, 17 insertions(+), 12 deletions(-)
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec
index de6f007..a3607d1 100644
index cb9c73a..98d5000 100644
--- a/dlls/kernel32/kernel32.spec
+++ b/dlls/kernel32/kernel32.spec
@@ -315,7 +315,7 @@
@@ -24,10 +24,10 @@ index de6f007..a3607d1 100644
@ stdcall CreateProcessW(wstr wstr ptr ptr long long ptr wstr ptr ptr)
@ stdcall CreateRemoteThread(long ptr long ptr long long ptr)
diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c
index f568022..e270ca7 100644
index 658a0b1..15460aa 100644
--- a/dlls/kernel32/process.c
+++ b/dlls/kernel32/process.c
@@ -2438,12 +2438,13 @@ static LPWSTR get_file_name( LPCWSTR appname, LPWSTR cmdline, LPWSTR buffer,
@@ -2588,12 +2588,13 @@ static LPWSTR get_file_name( LPCWSTR appname, LPWSTR cmdline, LPWSTR buffer,
return ret;
}
@@ -47,17 +47,17 @@ index f568022..e270ca7 100644
{
BOOL retv = FALSE;
HANDLE hFile = 0;
@@ -2456,6 +2457,9 @@ static BOOL create_process_impl( LPCWSTR app_name, LPWSTR cmd_line, LPSECURITY_A
@@ -2608,6 +2609,9 @@ static BOOL create_process_impl( LPCWSTR app_name, LPWSTR cmd_line, LPSECURITY_A
TRACE("app %s cmdline %s\n", debugstr_w(app_name), debugstr_w(cmd_line) );
+ if (token) FIXME("Creating a process with a token is not yet implemented\n");
+ 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, &binary_info )))
if (!(tidy_cmdline = get_file_name( app_name, cmd_line, name, ARRAY_SIZE( name ), &hFile, &is_64bit )))
return FALSE;
@@ -2607,8 +2611,8 @@ BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessA( LPCSTR app_name, LPSTR cmd_line, L
if (hFile == INVALID_HANDLE_VALUE) goto done;
@@ -2774,8 +2778,8 @@ BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessA( LPCSTR app_name, LPSTR cmd_line, L
FIXME("StartupInfo.lpReserved is used, please report (%s)\n",
debugstr_a(startup_info->lpReserved));
@@ -68,7 +68,7 @@ index f568022..e270ca7 100644
done:
HeapFree( GetProcessHeap(), 0, app_nameW );
HeapFree( GetProcessHeap(), 0, cmd_lineW );
@@ -2627,8 +2631,8 @@ BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessW( LPCWSTR app_name, LPWSTR cmd_line,
@@ -2794,8 +2798,8 @@ BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessW( LPCWSTR app_name, LPWSTR cmd_line,
LPVOID env, LPCWSTR cur_dir, LPSTARTUPINFOW startup_info,
LPPROCESS_INFORMATION info )
{
@@ -80,7 +80,7 @@ index f568022..e270ca7 100644
diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec
index fb7fafe..9d6c5f9 100644
index 7d8439f..cfc3bec 100644
--- a/dlls/kernelbase/kernelbase.spec
+++ b/dlls/kernelbase/kernelbase.spec
@@ -209,7 +209,7 @@
@@ -93,10 +93,10 @@ index fb7fafe..9d6c5f9 100644
@ stdcall CreateRemoteThread(long ptr long ptr long long ptr) kernel32.CreateRemoteThread
@ stdcall CreateRemoteThreadEx(long ptr long ptr ptr long ptr ptr) kernel32.CreateRemoteThreadEx
diff --git a/include/winbase.h b/include/winbase.h
index 667df96..b77bced 100644
index de52e5a..99e761e 100644
--- a/include/winbase.h
+++ b/include/winbase.h
@@ -1856,6 +1856,7 @@ WINBASEAPI BOOL WINAPI CreateProcessW(LPCWSTR,LPWSTR,LPSECURITY_ATTRIBUTE
@@ -1863,6 +1863,7 @@ WINBASEAPI BOOL WINAPI CreateProcessW(LPCWSTR,LPWSTR,LPSECURITY_ATTRIBUTE
WINADVAPI BOOL WINAPI CreateProcessAsUserA(HANDLE,LPCSTR,LPSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCSTR,LPSTARTUPINFOA,LPPROCESS_INFORMATION);
WINADVAPI BOOL WINAPI CreateProcessAsUserW(HANDLE,LPCWSTR,LPWSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCWSTR,LPSTARTUPINFOW,LPPROCESS_INFORMATION);
#define CreateProcessAsUser WINELIB_NAME_AW(CreateProcessAsUser)
@@ -105,5 +105,5 @@ index 667df96..b77bced 100644
WINBASEAPI HANDLE WINAPI CreateRemoteThread(HANDLE,LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPDWORD);
WINBASEAPI HANDLE WINAPI CreateRemoteThreadEx(HANDLE,LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPPROC_THREAD_ATTRIBUTE_LIST,LPDWORD);
--
1.9.1
2.7.4

View File

@@ -1,4 +1,4 @@
From b534f2d905c3ba205c9a4f895149e6be8425b31e Mon Sep 17 00:00:00 2001
From ed2822f9c9c1178b78872b13aa5d5df1a397bd35 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, 59 insertions(+), 21 deletions(-)
diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c
index e270ca7..633065b 100644
index e9d10ee..4ea7f1d 100644
--- a/dlls/kernel32/process.c
+++ b/dlls/kernel32/process.c
@@ -2036,7 +2036,7 @@ static NTSTATUS create_struct_sd(PSECURITY_DESCRIPTOR nt_sd, struct security_des
@@ -2203,7 +2203,7 @@ static NTSTATUS alloc_object_attributes( const SECURITY_ATTRIBUTES *attr, struct
* Create a new process. If hFile is a valid handle we have an exe
* file, otherwise it is a Winelib app.
*/
@@ -27,15 +27,15 @@ index e270ca7..633065b 100644
LPCWSTR cur_dir, LPSECURITY_ATTRIBUTES psa, LPSECURITY_ATTRIBUTES tsa,
BOOL inherit, DWORD flags, LPSTARTUPINFOW startup,
LPPROCESS_INFORMATION info, LPCSTR unixdir,
@@ -2182,6 +2182,7 @@ static BOOL create_process( HANDLE hFile, LPCWSTR filename, LPWSTR cmd_line, LPW
@@ -2316,6 +2316,7 @@ static BOOL create_process( HANDLE hFile, LPCWSTR filename, LPWSTR cmd_line, LPW
req->access = PROCESS_ALL_ACCESS;
req->cpu = cpu;
req->info_size = startup_info_size;
req->env_size = (env_end - env) * sizeof(WCHAR);
req->process_sd_size = process_sd_size;
+ req->token = wine_server_obj_handle( token );
wine_server_add_data( req, objattr, attr_len );
wine_server_add_data( req, startup_info, startup_info_size );
wine_server_add_data( req, env, (env_end - env) * sizeof(WCHAR) );
@@ -2282,7 +2283,7 @@ error:
@@ -2432,7 +2433,7 @@ error:
*
* Create a new VDM process for a 16-bit or DOS application.
*/
@@ -43,17 +43,17 @@ index e270ca7..633065b 100644
+static BOOL create_vdm_process( HANDLE token, LPCWSTR filename, LPWSTR cmd_line, LPWSTR env, LPCWSTR cur_dir,
LPSECURITY_ATTRIBUTES psa, LPSECURITY_ATTRIBUTES tsa,
BOOL inherit, DWORD flags, LPSTARTUPINFOW startup,
LPPROCESS_INFORMATION info, LPCSTR unixdir,
@@ -2306,7 +2307,7 @@ static BOOL create_vdm_process( LPCWSTR filename, LPWSTR cmd_line, LPWSTR env, L
return FALSE;
}
LPPROCESS_INFORMATION info, LPCSTR unixdir, int exec_only )
@@ -2458,7 +2459,7 @@ static BOOL create_vdm_process( LPCWSTR filename, LPWSTR cmd_line, LPWSTR env, L
sprintfW(new_cmd_line, argsW, winevdmW, buffer, cmd_line);
memset( &pe_info, 0, sizeof(pe_info) );
pe_info.machine = IMAGE_FILE_MACHINE_I386;
- ret = create_process( 0, winevdmW, new_cmd_line, env, cur_dir, psa, tsa, inherit,
+ ret = create_process( token, 0, winevdmW, new_cmd_line, env, cur_dir, psa, tsa, inherit,
flags, startup, info, unixdir, binary_info, exec_only );
flags, startup, info, unixdir, &pe_info, exec_only );
HeapFree( GetProcessHeap(), 0, new_cmd_line );
return ret;
@@ -2318,7 +2319,7 @@ static BOOL create_vdm_process( LPCWSTR filename, LPWSTR cmd_line, LPWSTR env, L
@@ -2470,7 +2471,7 @@ static BOOL create_vdm_process( LPCWSTR filename, LPWSTR cmd_line, LPWSTR env, L
*
* Create a new cmd shell process for a .BAT file.
*/
@@ -62,7 +62,7 @@ index e270ca7..633065b 100644
LPSECURITY_ATTRIBUTES psa, LPSECURITY_ATTRIBUTES tsa,
BOOL inherit, DWORD flags, LPSTARTUPINFOW startup,
LPPROCESS_INFORMATION info )
@@ -2346,8 +2347,8 @@ static BOOL create_cmd_process( LPCWSTR filename, LPWSTR cmd_line, LPVOID env, L
@@ -2498,8 +2499,8 @@ static BOOL create_cmd_process( LPCWSTR filename, LPWSTR cmd_line, LPVOID env, L
strcatW( newcmdline, quotW );
strcatW( newcmdline, cmd_line );
strcatW( newcmdline, quotW );
@@ -73,7 +73,7 @@ index e270ca7..633065b 100644
HeapFree( GetProcessHeap(), 0, newcmdline );
return ret;
}
@@ -2457,7 +2458,9 @@ BOOL WINAPI CreateProcessInternalW( HANDLE token, LPCWSTR app_name, LPWSTR cmd_l
@@ -2611,7 +2612,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) );
@@ -83,41 +83,38 @@ index e270ca7..633065b 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 ),
@@ -2515,20 +2518,20 @@ BOOL WINAPI CreateProcessInternalW( HANDLE token, LPCWSTR app_name, LPWSTR cmd_l
debugstr_w(name), (binary_info.flags & BINARY_FLAG_64BIT) ? 64 : 32,
wine_dbgstr_longlong(binary_info.res_start), wine_dbgstr_longlong(binary_info.res_end),
binary_info.arch, (binary_info.flags & BINARY_FLAG_FAKEDLL) ? ", fakedll" : "" );
if (!(tidy_cmdline = get_file_name( app_name, cmd_line, name, ARRAY_SIZE( name ), &hFile, &is_64bit )))
@@ -2688,18 +2691,18 @@ BOOL WINAPI CreateProcessInternalW( HANDLE token, LPCWSTR app_name, LPWSTR cmd_l
debugstr_w(name), is_64bit_arch(pe_info.machine) ? 64 : 32,
wine_dbgstr_longlong(pe_info.base), wine_dbgstr_longlong(pe_info.base + pe_info.map_size),
pe_info.machine );
- retv = create_process( hFile, name, tidy_cmdline, envW, cur_dir, process_attr, thread_attr,
+ retv = create_process( token, hFile, name, tidy_cmdline, envW, cur_dir, process_attr, thread_attr,
inherit, flags, startup_info, info, unixdir, &binary_info, FALSE );
inherit, flags, startup_info, info, unixdir, &pe_info, FALSE );
break;
case BINARY_OS216:
case BINARY_WIN16:
case BINARY_DOS:
TRACE( "starting %s as Win16/DOS binary\n", debugstr_w(name) );
- retv = create_vdm_process( name, tidy_cmdline, envW, cur_dir, process_attr, thread_attr,
+ retv = create_vdm_process( token, name, tidy_cmdline, envW, cur_dir, process_attr, thread_attr,
inherit, flags, startup_info, info, unixdir, &binary_info, FALSE );
inherit, flags, startup_info, info, unixdir, FALSE );
break;
case BINARY_UNIX_LIB:
TRACE( "starting %s as %d-bit Winelib app\n",
debugstr_w(name), (binary_info.flags & BINARY_FLAG_64BIT) ? 64 : 32 );
debugstr_w(name), is_64bit_arch(pe_info.machine) ? 64 : 32 );
- retv = create_process( hFile, name, tidy_cmdline, envW, cur_dir, process_attr, thread_attr,
+ retv = create_process( token, hFile, name, tidy_cmdline, envW, cur_dir, process_attr, thread_attr,
inherit, flags, startup_info, info, unixdir, &binary_info, FALSE );
inherit, flags, startup_info, info, unixdir, &pe_info, FALSE );
break;
case BINARY_UNKNOWN:
@@ -2540,7 +2543,7 @@ BOOL WINAPI CreateProcessInternalW( HANDLE token, LPCWSTR app_name, LPWSTR cmd_l
@@ -2709,14 +2712,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) );
binary_info.type = BINARY_DOS;
binary_info.arch = IMAGE_FILE_MACHINE_I386;
- retv = create_vdm_process( name, tidy_cmdline, envW, cur_dir, process_attr, thread_attr,
+ retv = create_vdm_process( token, name, tidy_cmdline, envW, cur_dir, process_attr, thread_attr,
inherit, flags, startup_info, info, unixdir,
&binary_info, FALSE );
inherit, flags, startup_info, info, unixdir, FALSE );
break;
@@ -2548,7 +2551,7 @@ BOOL WINAPI CreateProcessInternalW( HANDLE token, LPCWSTR app_name, LPWSTR cmd_l
}
if (!strcmpiW( p, batW ) || !strcmpiW( p, cmdW ) )
{
TRACE( "starting %s as batch binary\n", debugstr_w(name) );
@@ -126,44 +123,44 @@ index e270ca7..633065b 100644
inherit, flags, startup_info, info );
break;
}
@@ -2668,12 +2671,12 @@ static void exec_process( LPCWSTR name )
debugstr_w(name), (binary_info.flags & BINARY_FLAG_64BIT) ? 64 : 32,
wine_dbgstr_longlong(binary_info.res_start), wine_dbgstr_longlong(binary_info.res_end),
binary_info.arch );
@@ -2832,12 +2835,12 @@ static void exec_process( LPCWSTR name )
debugstr_w(name), is_64bit_arch(pe_info.machine) ? 64 : 32,
wine_dbgstr_longlong(pe_info.base), wine_dbgstr_longlong(pe_info.base + pe_info.map_size),
pe_info.machine );
- create_process( hFile, name, GetCommandLineW(), NULL, NULL, NULL, NULL,
+ create_process( NULL, hFile, name, GetCommandLineW(), NULL, NULL, NULL, NULL,
FALSE, 0, &startup_info, &info, NULL, &binary_info, TRUE );
FALSE, 0, &startup_info, &info, NULL, &pe_info, TRUE );
break;
case BINARY_UNIX_LIB:
TRACE( "%s is a Unix library, starting as Winelib app\n", debugstr_w(name) );
- create_process( hFile, name, GetCommandLineW(), NULL, NULL, NULL, NULL,
+ create_process( NULL, hFile, name, GetCommandLineW(), NULL, NULL, NULL, NULL,
FALSE, 0, &startup_info, &info, NULL, &binary_info, TRUE );
FALSE, 0, &startup_info, &info, NULL, &pe_info, TRUE );
break;
case BINARY_UNKNOWN:
@@ -2687,7 +2690,7 @@ static void exec_process( LPCWSTR name )
@@ -2847,7 +2850,7 @@ static void exec_process( LPCWSTR name )
/* fall through */
case BINARY_WIN16:
case BINARY_DOS:
TRACE( "starting %s as Win16/DOS binary\n", debugstr_w(name) );
- create_vdm_process( name, GetCommandLineW(), NULL, NULL, NULL, NULL,
+ create_vdm_process( NULL, name, GetCommandLineW(), NULL, NULL, NULL, NULL,
FALSE, 0, &startup_info, &info, NULL, &binary_info, TRUE );
FALSE, 0, &startup_info, &info, NULL, TRUE );
break;
default:
diff --git a/server/process.c b/server/process.c
index 81cea2f..7d2206f 100644
index 653e513..2bb49e2 100644
--- a/server/process.c
+++ b/server/process.c
@@ -496,7 +496,7 @@ static void start_sigkill_timer( struct process *process )
/* create a new process and its main thread */
@@ -486,7 +486,7 @@ static void start_sigkill_timer( struct process *process )
/* create a new process */
/* if the function fails the fd is closed */
-struct thread *create_process( int fd, struct thread *parent_thread, int inherit_all )
+struct thread *create_process( int fd, struct thread *parent_thread, int inherit_all, struct token *token )
struct process *create_process( int fd, struct thread *parent_thread, int inherit_all,
- const struct security_descriptor *sd )
+ const struct security_descriptor *sd, struct token *token )
{
struct process *process;
struct thread *thread = NULL;
@@ -567,7 +567,7 @@ struct thread *create_process( int fd, struct thread *parent_thread, int inherit
@@ -562,7 +562,7 @@ struct process *create_process( int fd, struct thread *parent_thread, int inheri
: 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 */
@@ -172,15 +169,15 @@ index 81cea2f..7d2206f 100644
process->affinity = parent->affinity;
}
if (!process->handles || !process->token) goto error;
@@ -1147,6 +1147,7 @@ DECL_HANDLER(new_process)
struct startup_info *info;
struct thread *thread;
struct process *process;
@@ -1128,6 +1128,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;
+ struct token *token = NULL;
struct process *parent = current->process;
int socket_fd = thread_get_inflight_fd( current, req->socket_fd );
const struct security_descriptor *process_sd = NULL, *thread_sd = NULL;
@@ -1182,9 +1183,27 @@ DECL_HANDLER(new_process)
@@ -1168,13 +1169,31 @@ DECL_HANDLER(new_process)
return;
}
@@ -203,75 +200,79 @@ index 81cea2f..7d2206f 100644
+
if (!req->info_size) /* create an orphaned process */
{
- create_process( socket_fd, NULL, 0 );
+ create_process( socket_fd, NULL, 0, token );
- if ((process = create_process( socket_fd, NULL, 0, sd )))
+ if ((process = create_process( socket_fd, NULL, 0, sd, token )))
{
create_thread( -1, process, NULL );
release_object( process );
}
+ if (token) release_object( token );
return;
}
@@ -1192,6 +1211,7 @@ DECL_HANDLER(new_process)
@@ -1182,6 +1201,7 @@ DECL_HANDLER(new_process)
if (!(info = alloc_object( &startup_info_ops )))
{
close( socket_fd );
+ if (token) release_object( token );
return;
}
info->exe_file = NULL;
@@ -1274,7 +1294,7 @@ DECL_HANDLER(new_process)
}
info->process = NULL;
@@ -1228,7 +1248,7 @@ DECL_HANDLER(new_process)
#undef FIXUP_LEN
}
- if (!(thread = create_process( socket_fd, current, req->inherit_all ))) goto done;
+ if (!(thread = create_process( socket_fd, current, req->inherit_all, token ))) goto done;
process = thread->process;
- if (!(process = create_process( socket_fd, current, req->inherit_all, sd ))) goto done;
+ if (!(process = create_process( socket_fd, current, req->inherit_all, sd, token ))) goto done;
process->startup_info = (struct startup_info *)grab_object( info );
@@ -1356,6 +1376,7 @@ DECL_HANDLER(new_process)
}
@@ -1290,6 +1310,7 @@ DECL_HANDLER(new_process)
reply->handle = alloc_handle_no_access_check( parent, process, req->access, objattr->attributes );
done:
+ if (token) release_object( token );
if (process) release_object( process );
release_object( info );
}
diff --git a/server/process.h b/server/process.h
index 78e88ec..313c36a 100644
index 1128dba..ec44e02 100644
--- a/server/process.h
+++ b/server/process.h
@@ -114,7 +114,7 @@ struct process_snapshot
extern unsigned int alloc_ptid( void *ptr );
@@ -116,7 +116,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 thread *create_process( int fd, struct thread *parent_thread, int inherit_all );
+extern struct thread *create_process( int fd, struct thread *parent_thread, int inherit_all, struct token *token );
extern struct process *create_process( int fd, struct thread *parent_thread, int inherit_all,
- const struct security_descriptor *sd );
+ const struct security_descriptor *sd, struct token *token );
extern data_size_t init_process( struct thread *thread );
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 b29df0a..95a120e 100644
index 2ddc62f..897aa2b 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -748,6 +748,7 @@ struct rawinput_device
@@ -743,6 +743,7 @@ struct rawinput_device
unsigned int access; /* access rights for process object */
cpu_type_t cpu; /* CPU that the new process will use */
data_size_t info_size; /* size of startup info */
data_size_t env_size; /* size of the environment */
data_size_t process_sd_size;/* size of the process security descriptor */
+ 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,env_size); /* environment for new process */
VARARG(process_sd,security_descriptor,process_sd_size); /* security descriptor to set on the process */
VARARG(env,unicode_str); /* environment for new process */
diff --git a/server/request.c b/server/request.c
index 6120bc5..a648c30 100644
index c10c4e6..86f293f 100644
--- a/server/request.c
+++ b/server/request.c
@@ -570,7 +570,7 @@ static void master_socket_poll_event( struct fd *fd, int event )
@@ -577,7 +577,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 );
- create_process( client, NULL, 0 );
+ create_process( client, NULL, 0, NULL );
}
}
- if ((process = create_process( client, NULL, 0, NULL )))
+ if ((process = create_process( client, NULL, 0, NULL, NULL )))
{
create_thread( -1, process, NULL );
release_object( process );
diff --git a/server/security.h b/server/security.h
index 21e90cc..32dfe5f 100644
--- a/server/security.h
@@ -286,7 +287,7 @@ 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 de1d624..2804247 100644
index 1184241..5db97b4 100644
--- a/server/token.c
+++ b/server/token.c
@@ -836,6 +836,12 @@ int token_assign_label( struct token *token, PSID label )
@@ -302,7 +303,7 @@ index de1d624..2804247 100644
struct token *token_create_admin( void )
{
struct token *token = NULL;
@@ -1263,6 +1269,11 @@ const SID *token_get_primary_group( struct token *token )
@@ -1262,6 +1268,11 @@ const SID *token_get_primary_group( struct token *token )
return token->primary_group;
}
@@ -315,5 +316,5 @@ index de1d624..2804247 100644
{
GENERIC_MAPPING mapping;
--
1.9.1
2.7.4

View File

@@ -1,20 +1,20 @@
From b14282d138ff6a5ad1d5c152d0a556c9ca648c36 Mon Sep 17 00:00:00 2001
From 6d8fd34cabbcbc64062675be610fb8704fcdc3ec Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Mon, 7 Aug 2017 03:33:26 +0200
Subject: [PATCH] server: Correctly assign security labels for tokens.
---
dlls/advapi32/tests/security.c | 21 +++++++++--------
server/process.c | 8 +------
dlls/advapi32/tests/security.c | 21 ++++++++++-----------
server/process.c | 8 +-------
server/security.h | 2 +-
server/token.c | 41 ++++++++++++++++++++--------------
server/token.c | 41 ++++++++++++++++++++++++-----------------
4 files changed, 36 insertions(+), 36 deletions(-)
diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c
index 0271cd72e0..3b07e7cd2f 100644
index bf4161c..0610ec7 100644
--- a/dlls/advapi32/tests/security.c
+++ b/dlls/advapi32/tests/security.c
@@ -7215,7 +7215,6 @@ static void test_token_security_descriptor(void)
@@ -7186,7 +7186,6 @@ static void test_token_security_descriptor(void)
defaulted = TRUE;
ret = GetSecurityDescriptorDacl(sd2, &present, &acl2, &defaulted);
ok(ret, "GetSecurityDescriptorDacl failed with error %u\n", GetLastError());
@@ -22,7 +22,7 @@ index 0271cd72e0..3b07e7cd2f 100644
ok(present, "DACL not present\n");
if (present)
@@ -7336,7 +7335,7 @@ static void test_token_security_descriptor(void)
@@ -7307,7 +7306,7 @@ static void test_token_security_descriptor(void)
ok(ret, "GetAce failed with error %u\n", GetLastError());
ok(ace->Header.AceType == SYSTEM_MANDATORY_LABEL_ACE_TYPE,
"Unexpected ACE type %#x\n", ace->Header.AceType);
@@ -31,7 +31,7 @@ index 0271cd72e0..3b07e7cd2f 100644
"Expected medium integrity level\n");
}
@@ -7389,8 +7388,8 @@ static void test_token_security_descriptor(void)
@@ -7360,8 +7359,8 @@ static void test_token_security_descriptor(void)
sacl = NULL;
ret = GetSecurityDescriptorSacl(sd3, &present, &sacl, &defaulted);
ok(ret, "GetSecurityDescriptorSacl failed with error %u\n", GetLastError());
@@ -42,7 +42,7 @@ index 0271cd72e0..3b07e7cd2f 100644
if (sacl)
{
@@ -7439,8 +7438,8 @@ static void test_token_security_descriptor(void)
@@ -7410,8 +7409,8 @@ static void test_token_security_descriptor(void)
sacl = NULL;
ret = GetSecurityDescriptorSacl(sd3, &present, &sacl, &defaulted);
ok(ret, "GetSecurityDescriptorSacl failed with error %u\n", GetLastError());
@@ -53,7 +53,7 @@ index 0271cd72e0..3b07e7cd2f 100644
if (sacl)
{
@@ -7504,8 +7503,8 @@ static void test_token_security_descriptor(void)
@@ -7475,8 +7474,8 @@ static void test_token_security_descriptor(void)
ret = GetSecurityDescriptorSacl(sd3, &present, &sacl, &defaulted);
ok(ret, "GetSecurityDescriptorSacl failed with error %u\n", GetLastError());
@@ -64,7 +64,7 @@ index 0271cd72e0..3b07e7cd2f 100644
if (sacl)
{
@@ -7542,8 +7541,8 @@ static void test_token_security_descriptor(void)
@@ -7513,8 +7512,8 @@ static void test_token_security_descriptor(void)
sacl = NULL;
ret = GetSecurityDescriptorSacl(sd3, &present, &sacl, &defaulted);
ok(ret, "GetSecurityDescriptorSacl failed with error %u\n", GetLastError());
@@ -75,7 +75,7 @@ index 0271cd72e0..3b07e7cd2f 100644
if (sacl)
{
@@ -7761,7 +7760,7 @@ static void test_child_token_sd_medium(void)
@@ -7732,7 +7731,7 @@ static void test_child_token_sd_medium(void)
ok(ret, "GetAce failed with error %u\n", GetLastError());
ok(ace_label->Header.AceType == SYSTEM_MANDATORY_LABEL_ACE_TYPE,
"Unexpected ACE type %#x\n", ace_label->Header.AceType);
@@ -85,10 +85,10 @@ index 0271cd72e0..3b07e7cd2f 100644
memset(buffer_integrity, 0, sizeof(buffer_integrity));
diff --git a/server/process.c b/server/process.c
index 7d2206f274..74cc320f44 100644
index b7c9da3..250f777 100644
--- a/server/process.c
+++ b/server/process.c
@@ -567,17 +567,11 @@ struct thread *create_process( int fd, struct thread *parent_thread, int inherit
@@ -562,17 +562,11 @@ struct process *create_process( int fd, struct thread *parent_thread, int inheri
: 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 */
@@ -104,11 +104,11 @@ index 7d2206f274..74cc320f44 100644
- if (!token_assign_label( process->token, security_high_label_sid ))
- goto error;
-
/* create the main thread */
if (pipe( request_pipe ) == -1)
{
set_fd_events( process->msg_fd, POLLIN ); /* start listening to events */
return process;
diff --git a/server/security.h b/server/security.h
index 32dfe5f8db..87377ccd67 100644
index 32dfe5f..87377cc 100644
--- a/server/security.h
+++ b/server/security.h
@@ -59,7 +59,7 @@ extern int token_assign_label( struct token *token, PSID label );
@@ -121,7 +121,7 @@ index 32dfe5f8db..87377ccd67 100644
const LUID_AND_ATTRIBUTES *reqprivs,
unsigned int count, LUID_AND_ATTRIBUTES *usedprivs);
diff --git a/server/token.c b/server/token.c
index 28042471b0..e5639fc0d5 100644
index 5db97b4..bd251c7 100644
--- a/server/token.c
+++ b/server/token.c
@@ -668,7 +668,7 @@ static int filter_privilege( struct privilege *privilege, const LUID_AND_ATTRIBU
@@ -146,7 +146,7 @@ index 28042471b0..e5639fc0d5 100644
return token;
}
@@ -907,6 +913,12 @@ struct token *token_create_admin( void )
@@ -906,6 +912,12 @@ struct token *token_create_admin( void )
admin_source, NULL, -1, TokenElevationTypeFull, &high_label_sid );
/* we really need a primary group */
assert( token->primary_group );
@@ -159,7 +159,7 @@ index 28042471b0..e5639fc0d5 100644
}
free( logon_sid );
@@ -965,6 +977,12 @@ static struct token *token_create_limited( void )
@@ -964,6 +976,12 @@ static struct token *token_create_limited( void )
admin_source, NULL, -1, TokenElevationTypeLimited, &medium_label_sid );
/* we really need a primary group */
assert( token->primary_group );
@@ -172,7 +172,7 @@ index 28042471b0..e5639fc0d5 100644
}
free( logon_sid );
@@ -1433,7 +1451,8 @@ DECL_HANDLER(duplicate_token)
@@ -1432,7 +1450,8 @@ DECL_HANDLER(duplicate_token)
TOKEN_DUPLICATE,
&token_ops )))
{
@@ -182,7 +182,7 @@ index 28042471b0..e5639fc0d5 100644
if (token)
{
unsigned int access = req->access ? req->access : get_handle_access( current->process, req->handle );
@@ -1463,7 +1482,7 @@ DECL_HANDLER(filter_token)
@@ -1462,7 +1481,7 @@ DECL_HANDLER(filter_token)
group_count = get_sid_count( filter_groups, get_req_data_size() - priv_count * sizeof(LUID_AND_ATTRIBUTES) );
token = token_duplicate( src_token, src_token->primary, src_token->impersonation_level, NULL,
@@ -191,7 +191,7 @@ index 28042471b0..e5639fc0d5 100644
if (token)
{
unsigned int access = get_handle_access( current->process, req->handle );
@@ -1789,23 +1808,11 @@ DECL_HANDLER(set_token_default_dacl)
@@ -1788,23 +1807,11 @@ DECL_HANDLER(set_token_default_dacl)
DECL_HANDLER(create_token)
{
struct token *token;
@@ -218,5 +218,5 @@ index 28042471b0..e5639fc0d5 100644
}
}
--
2.18.0
2.7.4

View File

@@ -1,6 +1,5 @@
Fixes: [40613] Basic implementation for token integrity levels and UAC handling
Fixes: [39262] Run explorer.exe as unevaluated process
Depends: advapi32-CreateRestrictedToken
Depends: server-CreateProcess_ACLs
Depends: server-Misc_ACL
Depends: Staging

View File

@@ -1,4 +1,4 @@
From 46f234ba973f5c9c60cd1d39f2c61202f92458b7 Mon Sep 17 00:00:00 2001
From 37a07b352d184b7d7c53084eb6e2d3190f8f581d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Wed, 29 Jul 2015 17:09:50 +0200
Subject: [PATCH] ddraw: Create rendering targets in video memory if possible.
@@ -12,10 +12,10 @@ Based on a patch by Henri Verbeet.
4 files changed, 38 insertions(+), 15 deletions(-)
diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index 9115a59..3f14a9a 100644
index e9e06ee..6677220 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -4241,7 +4241,7 @@ static HRESULT WINAPI d3d7_CreateDevice(IDirect3D7 *iface, REFCLSID riid,
@@ -4211,7 +4211,7 @@ static HRESULT WINAPI d3d7_CreateDevice(IDirect3D7 *iface, REFCLSID riid,
TRACE("iface %p, riid %s, surface %p, device %p.\n", iface, debugstr_guid(riid), surface, device);
wined3d_mutex_lock();
@@ -24,7 +24,7 @@ index 9115a59..3f14a9a 100644
{
*device = &object->IDirect3DDevice7_iface;
}
@@ -4270,7 +4270,7 @@ static HRESULT WINAPI d3d3_CreateDevice(IDirect3D3 *iface, REFCLSID riid,
@@ -4240,7 +4240,7 @@ static HRESULT WINAPI d3d3_CreateDevice(IDirect3D3 *iface, REFCLSID riid,
return CLASS_E_NOAGGREGATION;
wined3d_mutex_lock();
@@ -33,7 +33,7 @@ index 9115a59..3f14a9a 100644
{
*device = &device_impl->IDirect3DDevice3_iface;
}
@@ -4296,7 +4296,7 @@ static HRESULT WINAPI d3d2_CreateDevice(IDirect3D2 *iface, REFCLSID riid,
@@ -4266,7 +4266,7 @@ static HRESULT WINAPI d3d2_CreateDevice(IDirect3D2 *iface, REFCLSID riid,
iface, debugstr_guid(riid), surface, device);
wined3d_mutex_lock();
@@ -43,10 +43,10 @@ index 9115a59..3f14a9a 100644
*device = &device_impl->IDirect3DDevice2_iface;
}
diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h
index 61f5347..baeb9db 100644
index 495cb8b..4af638b 100644
--- a/dlls/ddraw/ddraw_private.h
+++ b/dlls/ddraw/ddraw_private.h
@@ -305,6 +305,7 @@ struct d3d_device
@@ -303,6 +303,7 @@ struct d3d_device
IUnknown IUnknown_inner;
LONG ref;
UINT version;
@@ -54,7 +54,7 @@ index 61f5347..baeb9db 100644
IUnknown *outer_unknown;
struct wined3d_device *wined3d_device;
@@ -349,7 +350,7 @@ struct d3d_device
@@ -347,7 +348,7 @@ struct d3d_device
struct wined3d_vec4 user_clip_planes[D3DMAXUSERCLIPPLANES];
};
@@ -64,7 +64,7 @@ index 61f5347..baeb9db 100644
enum wined3d_depth_buffer_type d3d_device_update_depth_stencil(struct d3d_device *device) DECLSPEC_HIDDEN;
diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c
index c2d87dd..43f7402 100644
index 7866c28..81ace96 100644
--- a/dlls/ddraw/device.c
+++ b/dlls/ddraw/device.c
@@ -1854,7 +1854,7 @@ static HRESULT d3d_device7_SetRenderTarget(IDirect3DDevice7 *iface,
@@ -94,7 +94,7 @@ index c2d87dd..43f7402 100644
{
WARN("Surface %p is not in video memory.\n", target_impl);
IDirectDrawSurface_AddRef(target);
@@ -6903,7 +6903,7 @@ enum wined3d_depth_buffer_type d3d_device_update_depth_stencil(struct d3d_device
@@ -6891,7 +6891,7 @@ enum wined3d_depth_buffer_type d3d_device_update_depth_stencil(struct d3d_device
return WINED3D_ZB_TRUE;
}
@@ -103,7 +103,7 @@ index c2d87dd..43f7402 100644
struct ddraw_surface *target, IUnknown *rt_iface, UINT version, IUnknown *outer_unknown)
{
static const D3DMATRIX ident =
@@ -6926,6 +6926,7 @@ static HRESULT d3d_device_init(struct d3d_device *device, struct ddraw *ddraw,
@@ -6914,6 +6914,7 @@ static HRESULT d3d_device_init(struct d3d_device *device, struct ddraw *ddraw,
device->IUnknown_inner.lpVtbl = &d3d_device_inner_vtbl;
device->ref = 1;
device->version = version;
@@ -111,7 +111,7 @@ index c2d87dd..43f7402 100644
if (outer_unknown)
device->outer_unknown = outer_unknown;
@@ -6976,14 +6977,18 @@ static HRESULT d3d_device_init(struct d3d_device *device, struct ddraw *ddraw,
@@ -6964,14 +6965,18 @@ static HRESULT d3d_device_init(struct d3d_device *device, struct ddraw *ddraw,
return D3D_OK;
}
@@ -133,8 +133,8 @@ index c2d87dd..43f7402 100644
if (!(target->surface_desc.ddsCaps.dwCaps & DDSCAPS_3DDEVICE)
|| (target->surface_desc.ddsCaps.dwCaps & DDSCAPS_ZBUFFER))
@@ -6998,7 +7003,7 @@ HRESULT d3d_device_create(struct ddraw *ddraw, struct ddraw_surface *target, IUn
return DDERR_NOPALETTEATTACHED;
@@ -6994,7 +6999,7 @@ HRESULT d3d_device_create(struct ddraw *ddraw, struct ddraw_surface *target, IUn
return DDERR_OUTOFMEMORY;
}
- if (!(target->surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY))
@@ -142,7 +142,7 @@ index c2d87dd..43f7402 100644
{
WARN("Surface %p is not in video memory.\n", target);
return D3DERR_SURFACENOTINVIDMEM;
@@ -7024,7 +7029,7 @@ HRESULT d3d_device_create(struct ddraw *ddraw, struct ddraw_surface *target, IUn
@@ -7012,7 +7017,7 @@ HRESULT d3d_device_create(struct ddraw *ddraw, struct ddraw_surface *target, IUn
return DDERR_OUTOFMEMORY;
}
@@ -152,10 +152,10 @@ index c2d87dd..43f7402 100644
WARN("Failed to initialize device, hr %#x.\n", hr);
heap_free(object);
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c
index a30b44f..9d4e83c 100644
index d201d9d..41fe6a1 100644
--- a/dlls/ddraw/surface.c
+++ b/dlls/ddraw/surface.c
@@ -209,7 +209,7 @@ static HRESULT WINAPI ddraw_surface7_QueryInterface(IDirectDrawSurface7 *iface,
@@ -226,7 +226,7 @@ static HRESULT WINAPI ddraw_surface7_QueryInterface(IDirectDrawSurface7 *iface,
{
HRESULT hr;
@@ -164,7 +164,7 @@ index a30b44f..9d4e83c 100644
1, &This->device1, (IUnknown *)&This->IDirectDrawSurface_iface)))
{
This->device1 = NULL;
@@ -6111,7 +6111,24 @@ HRESULT ddraw_surface_create(struct ddraw *ddraw, const DDSURFACEDESC2 *surface_
@@ -6155,7 +6155,24 @@ HRESULT ddraw_surface_create(struct ddraw *ddraw, const DDSURFACEDESC2 *surface_
if (desc->ddsCaps.dwCaps & DDSCAPS_SYSTEMMEMORY)
{
@@ -191,5 +191,5 @@ index a30b44f..9d4e83c 100644
}
else
--
1.9.1
2.7.4

View File

@@ -1,29 +1,28 @@
From 76cd66f5f32045665fe392401b63738a5a089072 Mon Sep 17 00:00:00 2001
From f66f232de49f8fd3e14e8f328e16e89b83e7dcc8 Mon Sep 17 00:00:00 2001
From: Mark Harmstone <mark@harmstone.com>
Date: Fri, 27 Mar 2015 20:58:37 +0000
Subject: dsound: Add EAX init and free stubs.
Subject: [PATCH] dsound: Add EAX init and free stubs.
---
dlls/dsound/buffer.c | 5 +++++
dlls/dsound/buffer.c | 4 ++++
dlls/dsound/dsound_private.h | 2 ++
dlls/dsound/eax.c | 28 +++++++++++++++++++++++++++-
3 files changed, 34 insertions(+), 1 deletion(-)
3 files changed, 33 insertions(+), 1 deletion(-)
diff --git a/dlls/dsound/buffer.c b/dlls/dsound/buffer.c
index 1c318f5..c098043 100644
index 720bec9..7e9e478 100644
--- a/dlls/dsound/buffer.c
+++ b/dlls/dsound/buffer.c
@@ -1130,6 +1130,9 @@ HRESULT IDirectSoundBufferImpl_Create(
HeapFree(GetProcessHeap(),0,dsb);
dsb = NULL;
}
+
+ if (dsb->device->eax.using_eax)
+ init_eax_buffer(dsb);
}
@@ -1104,6 +1104,8 @@ HRESULT secondarybuffer_create(DirectSoundDevice *device, const DSBUFFERDESC *ds
DSOUND_RecalcVolPan(&(dsb->volpan));
IDirectSoundBuffer8_AddRef(&dsb->IDirectSoundBuffer8_iface);
@@ -1169,6 +1172,8 @@ void secondarybuffer_destroy(IDirectSoundBufferImpl *This)
RtlInitializeResource(&dsb->lock);
+ if (dsb->device->eax.using_eax)
+ init_eax_buffer(dsb);
/* register buffer */
err = DirectSoundDevice_AddBuffer(device, dsb);
@@ -1147,6 +1149,8 @@ void secondarybuffer_destroy(IDirectSoundBufferImpl *This)
HeapFree(GetProcessHeap(), 0, This->filters);
}
@@ -33,10 +32,10 @@ index 1c318f5..c098043 100644
TRACE("(%p) released\n", This);
diff --git a/dlls/dsound/dsound_private.h b/dlls/dsound/dsound_private.h
index c732b52..a918cd2 100644
index e412533..6c90726 100644
--- a/dlls/dsound/dsound_private.h
+++ b/dlls/dsound/dsound_private.h
@@ -240,6 +240,8 @@ HRESULT WINAPI EAX_Get(IDirectSoundBufferImpl *buf, REFGUID guidPropSet,
@@ -235,6 +235,8 @@ HRESULT WINAPI EAX_Get(IDirectSoundBufferImpl *buf, REFGUID guidPropSet,
HRESULT WINAPI EAX_Set(IDirectSoundBufferImpl *buf, REFGUID guidPropSet,
ULONG dwPropID, void *pInstanceData, ULONG cbInstanceData, void *pPropData,
ULONG cbPropData) DECLSPEC_HIDDEN;
@@ -98,5 +97,5 @@ index 3931681..c0afb0f 100644
HRESULT WINAPI EAX_Get(IDirectSoundBufferImpl *buf, REFGUID guidPropSet,
--
2.3.3
1.9.1

View File

@@ -1,7 +1,7 @@
From de001ceaf5bab22bacfd14c927bfa8c0f29c74a1 Mon Sep 17 00:00:00 2001
From 630c89c7e41eb1cde6dd99bf5c3462d173236b3a Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sat, 4 Apr 2015 21:09:18 +0200
Subject: dsound: Various improvements to EAX support.
Subject: [PATCH] dsound: Various improvements to EAX support.
The previous version had several problems (see wine-staging bug 195):
* IDirectSoundBufferImpl_Duplicate doesn't initialize EAX properties
@@ -16,18 +16,18 @@ update it later when necessary (-> much faster). Moreover, to avoid unnecessary
locking, we initialize the EAX-specific properties always (for both the device and
the buffers).
---
dlls/dsound/buffer.c | 11 ++++---
dlls/dsound/buffer.c | 6 ++--
dlls/dsound/dsound.c | 2 ++
dlls/dsound/dsound_eax.h | 1 +
dlls/dsound/dsound_private.h | 1 +
dlls/dsound/eax.c | 68 +++++++++++++++++++-------------------------
5 files changed, 39 insertions(+), 44 deletions(-)
5 files changed, 37 insertions(+), 41 deletions(-)
diff --git a/dlls/dsound/buffer.c b/dlls/dsound/buffer.c
index c098043..3641e32 100644
index 7e9e478..088a5e7 100644
--- a/dlls/dsound/buffer.c
+++ b/dlls/dsound/buffer.c
@@ -1092,8 +1092,6 @@ HRESULT IDirectSoundBufferImpl_Create(
@@ -1078,8 +1078,6 @@ HRESULT secondarybuffer_create(DirectSoundDevice *device, const DSBUFFERDESC *ds
/* calculate fragment size and write lead */
DSOUND_RecalcFormat(dsb);
@@ -36,26 +36,7 @@ index c098043..3641e32 100644
if (dsb->dsbd.dwFlags & DSBCAPS_CTRL3D) {
dsb->ds3db_ds3db.dwSize = sizeof(DS3DBUFFER);
dsb->ds3db_ds3db.vPosition.x = 0.0;
@@ -1121,6 +1119,8 @@ HRESULT IDirectSoundBufferImpl_Create(
/* register buffer if not primary */
if (!(dsbd->dwFlags & DSBCAPS_PRIMARYBUFFER)) {
+ init_eax_buffer(dsb);
+
err = DirectSoundDevice_AddBuffer(device, dsb);
if (err != DS_OK) {
HeapFree(GetProcessHeap(),0,dsb->buffer->memory);
@@ -1130,9 +1130,6 @@ HRESULT IDirectSoundBufferImpl_Create(
HeapFree(GetProcessHeap(),0,dsb);
dsb = NULL;
}
-
- if (dsb->device->eax.using_eax)
- init_eax_buffer(dsb);
}
IDirectSoundBuffer8_AddRef(&dsb->IDirectSoundBuffer8_iface);
@@ -1188,7 +1185,7 @@ HRESULT IDirectSoundBufferImpl_Duplicate(
@@ -1165,7 +1163,7 @@ HRESULT IDirectSoundBufferImpl_Duplicate(
HRESULT hres = DS_OK;
TRACE("(%p,%p,%p)\n", device, ppdsb, pdsb);
@@ -64,7 +45,7 @@ index c098043..3641e32 100644
if (dsb == NULL) {
WARN("out of memory\n");
*ppdsb = NULL;
@@ -1225,6 +1222,8 @@ HRESULT IDirectSoundBufferImpl_Duplicate(
@@ -1202,6 +1200,8 @@ HRESULT IDirectSoundBufferImpl_Duplicate(
RtlInitializeResource(&dsb->lock);
@@ -74,10 +55,10 @@ index c098043..3641e32 100644
hres = DirectSoundDevice_AddBuffer(device, dsb);
if (hres != DS_OK) {
diff --git a/dlls/dsound/dsound.c b/dlls/dsound/dsound.c
index 551c40a..4abb142 100644
index 59e2fcd..13cda26 100644
--- a/dlls/dsound/dsound.c
+++ b/dlls/dsound/dsound.c
@@ -186,6 +186,8 @@ static HRESULT DirectSoundDevice_Create(DirectSoundDevice ** ppDevice)
@@ -181,6 +181,8 @@ static HRESULT DirectSoundDevice_Create(DirectSoundDevice ** ppDevice)
RtlInitializeResource(&(device->buffer_list_lock));
@@ -99,10 +80,10 @@ index a650108..a555a75 100644
float *SampleBuffer;
diff --git a/dlls/dsound/dsound_private.h b/dlls/dsound/dsound_private.h
index cc55d70..a9987d0 100644
index 6f8dddd..039154a 100644
--- a/dlls/dsound/dsound_private.h
+++ b/dlls/dsound/dsound_private.h
@@ -240,6 +240,7 @@ HRESULT WINAPI EAX_Get(IDirectSoundBufferImpl *buf, REFGUID guidPropSet,
@@ -235,6 +235,7 @@ HRESULT WINAPI EAX_Get(IDirectSoundBufferImpl *buf, REFGUID guidPropSet,
HRESULT WINAPI EAX_Set(IDirectSoundBufferImpl *buf, REFGUID guidPropSet,
ULONG dwPropID, void *pInstanceData, ULONG cbInstanceData, void *pPropData,
ULONG cbPropData) DECLSPEC_HIDDEN;
@@ -272,5 +253,5 @@ index a05b00e..e10156e 100644
switch (dwPropID) {
case DSPROPERTY_EAXBUFFER_ALL:
--
2.4.0
1.9.1

View File

@@ -1,3 +1,2 @@
Fixes: Software support for Environmental Audio Extensions (EAX)
Depends: dsound-Fast_Mixer
Depends: dsound-Revert_Cleanup

View File

@@ -1,106 +0,0 @@
From 49a87ca03766da11e80ec5f0677d1cd7d46b17ca Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Wed, 23 Dec 2015 00:58:57 +0100
Subject: Revert "dsound: Use a better name for
IDirectSoundBufferImpl_Create()."
This reverts commit bb72548f3870b1df03ad9fe7ad2e543a69d5d574.
---
dlls/dsound/buffer.c | 24 +++++++++++++++---------
dlls/dsound/dsound.c | 7 +++++--
dlls/dsound/dsound_private.h | 6 ++++--
3 files changed, 24 insertions(+), 13 deletions(-)
diff --git a/dlls/dsound/buffer.c b/dlls/dsound/buffer.c
index e85a5d1..c59090a 100644
--- a/dlls/dsound/buffer.c
+++ b/dlls/dsound/buffer.c
@@ -983,15 +983,19 @@ static const IDirectSoundBuffer8Vtbl dsbvt =
IDirectSoundBufferImpl_GetObjectInPath
};
-HRESULT secondarybuffer_create(DirectSoundDevice *device, const DSBUFFERDESC *dsbd,
- IDirectSoundBuffer **buffer)
+HRESULT IDirectSoundBufferImpl_Create(
+ DirectSoundDevice * device,
+ IDirectSoundBufferImpl **pdsb,
+ LPCDSBUFFERDESC dsbd)
{
IDirectSoundBufferImpl *dsb;
LPWAVEFORMATEX wfex = dsbd->lpwfxFormat;
HRESULT err = DS_OK;
DWORD capf = 0;
- TRACE("(%p,%p,%p)\n", device, dsbd, buffer);
+ TRACE("(%p,%p,%p)\n",device,pdsb,dsbd);
+
+ *pdsb = NULL;
if (dsbd->dwBufferBytes < DSBSIZE_MIN || dsbd->dwBufferBytes > DSBSIZE_MAX) {
WARN("invalid parameter: dsbd->dwBufferBytes = %d\n", dsbd->dwBufferBytes);
@@ -1103,12 +1107,14 @@ HRESULT secondarybuffer_create(DirectSoundDevice *device, const DSBUFFERDESC *ds
RtlInitializeResource(&dsb->lock);
- /* register buffer */
- err = DirectSoundDevice_AddBuffer(device, dsb);
- if (err == DS_OK)
- *buffer = (IDirectSoundBuffer*)&dsb->IDirectSoundBuffer8_iface;
- else
- IDirectSoundBuffer8_Release(&dsb->IDirectSoundBuffer8_iface);
+ /* register buffer if not primary */
+ if (!(dsbd->dwFlags & DSBCAPS_PRIMARYBUFFER)) {
+ err = DirectSoundDevice_AddBuffer(device, dsb);
+ if (err == DS_OK)
+ *pdsb = dsb;
+ else
+ IDirectSoundBuffer8_Release(&dsb->IDirectSoundBuffer8_iface);
+ }
return err;
}
diff --git a/dlls/dsound/dsound.c b/dlls/dsound/dsound.c
index fb9fd66..64bfbd3 100644
--- a/dlls/dsound/dsound.c
+++ b/dlls/dsound/dsound.c
@@ -461,6 +461,8 @@ static HRESULT DirectSoundDevice_CreateSoundBuffer(
WARN("primarybuffer_create() failed\n");
}
} else {
+ IDirectSoundBufferImpl * dsb;
+
if (dsbd->lpwfxFormat == NULL) {
WARN("invalid parameter: dsbd->lpwfxFormat can't be NULL for "
"secondary buffer\n");
@@ -537,8 +539,9 @@ static HRESULT DirectSoundDevice_CreateSoundBuffer(
return DSERR_INVALIDPARAM;
}
- hres = secondarybuffer_create(device, dsbd, ppdsb);
- if (SUCCEEDED(hres)) {
+ hres = IDirectSoundBufferImpl_Create(device, &dsb, dsbd);
+ if (dsb) {
+ *ppdsb = (IDirectSoundBuffer*)&dsb->IDirectSoundBuffer8_iface;
if (dsbd->dwFlags & DSBCAPS_LOCHARDWARE)
device->drvcaps.dwFreeHwMixingAllBuffers--;
} else
diff --git a/dlls/dsound/dsound_private.h b/dlls/dsound/dsound_private.h
index 63d1226..303ce0e 100644
--- a/dlls/dsound/dsound_private.h
+++ b/dlls/dsound/dsound_private.h
@@ -181,8 +181,10 @@ void put_stereo2surround51(const IDirectSoundBufferImpl *dsb, DWORD pos, DWORD c
void put_surround512stereo(const IDirectSoundBufferImpl *dsb, DWORD pos, DWORD channel, float value) DECLSPEC_HIDDEN;
void put_quad2stereo(const IDirectSoundBufferImpl *dsb, DWORD pos, DWORD channel, float value) DECLSPEC_HIDDEN;
-HRESULT secondarybuffer_create(DirectSoundDevice *device, const DSBUFFERDESC *dsbd,
- IDirectSoundBuffer **buffer) DECLSPEC_HIDDEN;
+HRESULT IDirectSoundBufferImpl_Create(
+ DirectSoundDevice *device,
+ IDirectSoundBufferImpl **ppdsb,
+ LPCDSBUFFERDESC dsbd) DECLSPEC_HIDDEN;
HRESULT IDirectSoundBufferImpl_Duplicate(
DirectSoundDevice *device,
IDirectSoundBufferImpl **ppdsb,
--
2.8.0

View File

@@ -1,116 +0,0 @@
From 974a901f92d5197d3db6356df454bdd47dea39da Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Wed, 23 Dec 2015 00:59:07 +0100
Subject: Revert "dsound: Simplify error handling when creating a sound
buffer."
This reverts commit d51d55bab8995f94dcc78ce8418a4149836c27b0.
---
dlls/dsound/buffer.c | 46 ++++++++++++++++++++++++++++++----------------
1 file changed, 30 insertions(+), 16 deletions(-)
diff --git a/dlls/dsound/buffer.c b/dlls/dsound/buffer.c
index d7717fd..5aa2834 100644
--- a/dlls/dsound/buffer.c
+++ b/dlls/dsound/buffer.c
@@ -992,28 +992,29 @@ HRESULT IDirectSoundBufferImpl_Create(
LPWAVEFORMATEX wfex = dsbd->lpwfxFormat;
HRESULT err = DS_OK;
DWORD capf = 0;
-
TRACE("(%p,%p,%p)\n",device,pdsb,dsbd);
- *pdsb = NULL;
-
if (dsbd->dwBufferBytes < DSBSIZE_MIN || dsbd->dwBufferBytes > DSBSIZE_MAX) {
WARN("invalid parameter: dsbd->dwBufferBytes = %d\n", dsbd->dwBufferBytes);
+ *pdsb = NULL;
return DSERR_INVALIDPARAM; /* FIXME: which error? */
}
dsb = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(*dsb));
- if (!dsb)
+ if (dsb == 0) {
+ WARN("out of memory\n");
+ *pdsb = NULL;
return DSERR_OUTOFMEMORY;
+ }
TRACE("Created buffer at %p\n", dsb);
- dsb->ref = 1;
+ dsb->ref = 0;
dsb->refn = 0;
dsb->ref3D = 0;
dsb->refiks = 0;
- dsb->numIfaces = 1;
+ dsb->numIfaces = 0;
dsb->device = device;
dsb->IDirectSoundBuffer8_iface.lpVtbl = &dsbvt;
dsb->IDirectSoundNotify_iface.lpVtbl = &dsnvt;
@@ -1024,8 +1025,9 @@ HRESULT IDirectSoundBufferImpl_Create(
CopyMemory(&dsb->dsbd, dsbd, dsbd->dwSize);
dsb->pwfx = DSOUND_CopyFormat(wfex);
- if (!dsb->pwfx) {
- IDirectSoundBuffer8_Release(&dsb->IDirectSoundBuffer8_iface);
+ if (dsb->pwfx == NULL) {
+ HeapFree(GetProcessHeap(),0,dsb);
+ *pdsb = NULL;
return DSERR_OUTOFMEMORY;
}
@@ -1050,16 +1052,22 @@ HRESULT IDirectSoundBufferImpl_Create(
/* Allocate an empty buffer */
dsb->buffer = HeapAlloc(GetProcessHeap(),0,sizeof(*(dsb->buffer)));
- if (!dsb->buffer) {
- IDirectSoundBuffer8_Release(&dsb->IDirectSoundBuffer8_iface);
+ if (dsb->buffer == NULL) {
+ WARN("out of memory\n");
+ HeapFree(GetProcessHeap(),0,dsb->pwfx);
+ HeapFree(GetProcessHeap(),0,dsb);
+ *pdsb = NULL;
return DSERR_OUTOFMEMORY;
}
/* Allocate system memory for buffer */
dsb->buffer->memory = HeapAlloc(GetProcessHeap(),0,dsb->buflen);
- if (!dsb->buffer->memory) {
+ if (dsb->buffer->memory == NULL) {
WARN("out of memory\n");
- IDirectSoundBuffer8_Release(&dsb->IDirectSoundBuffer8_iface);
+ HeapFree(GetProcessHeap(),0,dsb->pwfx);
+ HeapFree(GetProcessHeap(),0,dsb->buffer);
+ HeapFree(GetProcessHeap(),0,dsb);
+ *pdsb = NULL;
return DSERR_OUTOFMEMORY;
}
@@ -1110,12 +1118,18 @@ HRESULT IDirectSoundBufferImpl_Create(
/* register buffer if not primary */
if (!(dsbd->dwFlags & DSBCAPS_PRIMARYBUFFER)) {
err = DirectSoundDevice_AddBuffer(device, dsb);
- if (err == DS_OK)
- *pdsb = dsb;
- else
- IDirectSoundBuffer8_Release(&dsb->IDirectSoundBuffer8_iface);
+ if (err != DS_OK) {
+ HeapFree(GetProcessHeap(),0,dsb->buffer->memory);
+ HeapFree(GetProcessHeap(),0,dsb->buffer);
+ RtlDeleteResource(&dsb->lock);
+ HeapFree(GetProcessHeap(),0,dsb->pwfx);
+ HeapFree(GetProcessHeap(),0,dsb);
+ dsb = NULL;
+ }
}
+ IDirectSoundBuffer8_AddRef(&dsb->IDirectSoundBuffer8_iface);
+ *pdsb = dsb;
return err;
}
--
2.6.4

View File

@@ -1,4 +1,4 @@
From b0949848b3ba61c901fd705c5769b2014a96dabf Mon Sep 17 00:00:00 2001
From 04ccb4bc45d41ab247076f3d83329236a1c30125 Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Sat, 3 Jan 2015 20:55:43 -0700
Subject: kernel32: Consider the working directory first when launching
@@ -9,12 +9,12 @@ Subject: kernel32: Consider the working directory first when launching
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c
index 0a087ab..ec9d991 100644
index 98ea09b..a5433d7 100644
--- a/dlls/kernel32/process.c
+++ b/dlls/kernel32/process.c
@@ -259,9 +259,17 @@ static HANDLE open_exe_file( const WCHAR *name, struct binary_info *binary_info
static BOOL find_exe_file( const WCHAR *name, WCHAR *buffer, int buflen,
HANDLE *handle, struct binary_info *binary_info )
@@ -441,9 +441,17 @@ static HANDLE open_exe_file( const WCHAR *name, BOOL *is_64bit )
*/
static BOOL find_exe_file( const WCHAR *name, WCHAR *buffer, int buflen, HANDLE *handle )
{
+ WCHAR cur_dir[MAX_PATH];
+
@@ -32,5 +32,5 @@ index 0a087ab..ec9d991 100644
!SearchPathW( NULL, name, NULL, buflen, buffer, NULL )) return FALSE;
--
1.9.1
2.7.4

View File

@@ -1,4 +1,4 @@
From 25b0ee6993d4a790a2acf8f90ee8bc9dc261fce8 Mon Sep 17 00:00:00 2001
From f840f5b4a1378ee7e1c669547deb8cce1325909c Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Mon, 2 Jan 2017 15:34:21 +0800
Subject: [PATCH] server: All fields up to CheckSum are mandatory regardless of
@@ -9,7 +9,7 @@ Subject: [PATCH] server: All fields up to CheckSum are mandatory regardless of
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/server/mapping.c b/server/mapping.c
index 1ed8c9d..ce0bf52 100644
index 2955766..877eec1 100644
--- a/server/mapping.c
+++ b/server/mapping.c
@@ -580,11 +580,10 @@ static unsigned int get_image_params( struct mapping *mapping, file_pos_t file_s
@@ -25,8 +25,8 @@ index 1ed8c9d..ce0bf52 100644
- if (size < sizeof(nt)) memset( (char *)&nt + size, 0, sizeof(nt) - size );
if (nt.Signature != IMAGE_NT_SIGNATURE)
{
if (*(WORD *)&nt.Signature == IMAGE_OS2_SIGNATURE) return STATUS_INVALID_IMAGE_NE_FORMAT;
@@ -594,6 +593,10 @@ static unsigned int get_image_params( struct mapping *mapping, file_pos_t file_s
IMAGE_OS2_HEADER *os2 = (IMAGE_OS2_HEADER *)&nt;
@@ -597,6 +596,10 @@ static unsigned int get_image_params( struct mapping *mapping, file_pos_t file_s
switch (nt.opt.hdr32.Magic)
{
case IMAGE_NT_OPTIONAL_HDR32_MAGIC:
@@ -37,7 +37,7 @@ index 1ed8c9d..ce0bf52 100644
switch (nt.FileHeader.Machine)
{
case IMAGE_FILE_MACHINE_I386:
@@ -636,6 +639,10 @@ static unsigned int get_image_params( struct mapping *mapping, file_pos_t file_s
@@ -639,6 +642,10 @@ static unsigned int get_image_params( struct mapping *mapping, file_pos_t file_s
break;
case IMAGE_NT_OPTIONAL_HDR64_MAGIC:
@@ -49,5 +49,5 @@ index 1ed8c9d..ce0bf52 100644
switch (nt.FileHeader.Machine)
{
--
1.9.1
2.7.4

View File

@@ -1,4 +1,4 @@
From c04c1737fad3efc975d9cedcd2f12547cc482f68 Mon Sep 17 00:00:00 2001
From 3b075f8bd5e11c89d3c5c86350a492b21a8f2437 Mon Sep 17 00:00:00 2001
From: Qian Hong <qhong@codeweavers.com>
Date: Fri, 17 Apr 2015 00:59:02 +0800
Subject: ntdll/tests: Added tests to set disposition on file which is mapped
@@ -9,15 +9,15 @@ Subject: ntdll/tests: Added tests to set disposition on file which is mapped
1 file changed, 70 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
index 2e630e3..740e44a 100644
index 42eece5..34ece75 100644
--- a/dlls/ntdll/tests/file.c
+++ b/dlls/ntdll/tests/file.c
@@ -2099,12 +2099,13 @@ static void test_file_disposition_information(void)
@@ -2618,12 +2618,13 @@ static void test_file_disposition_information(void)
{
char tmp_path[MAX_PATH], buffer[MAX_PATH + 16];
DWORD dirpos;
- HANDLE handle, handle2;
+ HANDLE handle, handle2, mapping;
- HANDLE handle, handle2, handle3;
+ HANDLE handle, handle2, handle3, mapping;
NTSTATUS res;
IO_STATUS_BLOCK io;
FILE_DISPOSITION_INFORMATION fdi;
@@ -27,7 +27,7 @@ index 2e630e3..740e44a 100644
GetTempPathA( MAX_PATH, tmp_path );
@@ -2269,6 +2270,74 @@ static void test_file_disposition_information(void)
@@ -2946,6 +2947,74 @@ todo_wine
todo_wine
ok( !fileDeleted, "Directory shouldn't have been deleted\n" );
RemoveDirectoryA( buffer );
@@ -103,5 +103,5 @@ index 2e630e3..740e44a 100644
static void test_iocompletion(void)
--
2.5.0
2.7.4

View File

@@ -1,4 +1,4 @@
From 8ebb22fe5f693288dd36dca0aa911164385b6e77 Mon Sep 17 00:00:00 2001
From 62a2aa4ae486d307eb3616bf715924983c6d3458 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Mon, 3 Apr 2017 05:30:27 +0200
Subject: [PATCH] ntdll: Implement HashLinks field in LDR module data.
@@ -10,7 +10,7 @@ Subject: [PATCH] ntdll: Implement HashLinks field in LDR module data.
3 files changed, 144 insertions(+), 2 deletions(-)
diff --git a/dlls/kernel32/tests/loader.c b/dlls/kernel32/tests/loader.c
index 037c01e..369d48b 100644
index e7a1a43..7528098 100644
--- a/dlls/kernel32/tests/loader.c
+++ b/dlls/kernel32/tests/loader.c
@@ -29,6 +29,7 @@
@@ -21,7 +21,7 @@ index 037c01e..369d48b 100644
#include "wine/test.h"
#include "delayloadhandler.h"
@@ -3573,6 +3574,79 @@ static void test_InMemoryOrderModuleList(void)
@@ -3600,6 +3601,79 @@ static void test_InMemoryOrderModuleList(void)
ok(entry2 == mark2, "expected entry2 == mark2, got %p and %p\n", entry2, mark2);
}
@@ -101,17 +101,17 @@ index 037c01e..369d48b 100644
START_TEST(loader)
{
int argc;
@@ -3637,4 +3711,5 @@ START_TEST(loader)
@@ -3664,4 +3738,5 @@ START_TEST(loader)
test_import_resolution();
test_ExitProcess();
test_InMemoryOrderModuleList();
+ test_HashLinks();
}
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
index c24fa95..246bc0b 100644
index da83b27..9493770 100644
--- a/dlls/ntdll/loader.c
+++ b/dlls/ntdll/loader.c
@@ -96,6 +96,9 @@ static const char * const reason_names[] =
@@ -93,6 +93,9 @@ static const char * const reason_names[] =
static const WCHAR dllW[] = {'.','d','l','l',0};
@@ -121,7 +121,7 @@ index c24fa95..246bc0b 100644
/* internal representation of 32bit modules. per process. */
typedef struct _wine_modref
{
@@ -382,6 +385,52 @@ static void call_ldr_notifications( ULONG reason, LDR_MODULE *module )
@@ -376,6 +379,52 @@ static void call_ldr_notifications( ULONG reason, LDR_MODULE *module )
}
/*************************************************************************
@@ -174,7 +174,7 @@ index c24fa95..246bc0b 100644
* get_modref
*
* Looks for the referenced HMODULE in the current process
@@ -1100,7 +1149,12 @@ static WINE_MODREF *alloc_module( HMODULE hModule, LPCWSTR filename, LPCWSTR fak
@@ -1094,7 +1143,12 @@ static WINE_MODREF *alloc_module( HMODULE hModule, LPCWSTR filename )
&wm->ldr.InLoadOrderModuleList);
InsertTailList(&NtCurrentTeb()->Peb->LdrData->InMemoryOrderModuleList,
&wm->ldr.InMemoryOrderModuleList);
@@ -187,7 +187,7 @@ index c24fa95..246bc0b 100644
if (!(nt->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_NX_COMPAT))
{
@@ -1864,6 +1918,7 @@ static void load_builtin_callback( void *module, const char *filename )
@@ -1768,6 +1822,7 @@ static void load_builtin_callback( void *module, const char *filename )
/* the module has only be inserted in the load & memory order lists */
RemoveEntryList(&wm->ldr.InLoadOrderModuleList);
RemoveEntryList(&wm->ldr.InMemoryOrderModuleList);
@@ -195,7 +195,7 @@ index c24fa95..246bc0b 100644
/* FIXME: free the modref */
builtin_load_info->status = STATUS_DLL_NOT_FOUND;
return;
@@ -2124,6 +2179,7 @@ static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, LPCWSTR fakemo
@@ -2028,6 +2083,7 @@ static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file,
/* the module has only be inserted in the load & memory order lists */
RemoveEntryList(&wm->ldr.InLoadOrderModuleList);
RemoveEntryList(&wm->ldr.InMemoryOrderModuleList);
@@ -203,7 +203,7 @@ index c24fa95..246bc0b 100644
/* FIXME: there are several more dangling references
* left. Including dlls loaded by this dll before the
@@ -3299,6 +3355,7 @@ static void free_modref( WINE_MODREF *wm )
@@ -3030,6 +3086,7 @@ static void free_modref( WINE_MODREF *wm )
{
RemoveEntryList(&wm->ldr.InLoadOrderModuleList);
RemoveEntryList(&wm->ldr.InMemoryOrderModuleList);
@@ -211,7 +211,7 @@ index c24fa95..246bc0b 100644
if (wm->ldr.InInitializationOrderModuleList.Flink)
RemoveEntryList(&wm->ldr.InInitializationOrderModuleList);
@@ -3696,6 +3753,9 @@ void WINAPI LdrInitializeThunk( void *kernel_start, ULONG_PTR unknown2,
@@ -3357,6 +3414,9 @@ void WINAPI LdrInitializeThunk( void *kernel_start, ULONG_PTR unknown2,
RemoveEntryList( &wm->ldr.InMemoryOrderModuleList );
InsertHeadList( &peb->LdrData->InMemoryOrderModuleList, &wm->ldr.InMemoryOrderModuleList );
@@ -221,15 +221,15 @@ index c24fa95..246bc0b 100644
if ((status = virtual_alloc_thread_stack( NtCurrentTeb(), 0, 0, NULL )) != STATUS_SUCCESS)
{
ERR( "Main exe initialization for %s failed, status %x\n",
@@ -3842,6 +3902,7 @@ void __wine_process_init(void)
@@ -3505,6 +3565,7 @@ void __wine_process_init(void)
NTSTATUS status;
ANSI_STRING func_name;
void (* DECLSPEC_NORETURN CDECL init_func)(void);
+ DWORD i;
main_exe_file = thread_init();
thread_init();
@@ -3851,6 +3912,10 @@ void __wine_process_init(void)
@@ -3514,6 +3575,10 @@ void __wine_process_init(void)
load_global_options();
@@ -241,10 +241,10 @@ index c24fa95..246bc0b 100644
wine_dll_set_callback( load_builtin_callback );
diff --git a/include/winternl.h b/include/winternl.h
index 558f643..737e7f1 100644
index c07cdec..4f04a28 100644
--- a/include/winternl.h
+++ b/include/winternl.h
@@ -2171,8 +2171,7 @@ typedef struct _LDR_MODULE
@@ -2192,8 +2192,7 @@ typedef struct _LDR_MODULE
ULONG Flags;
SHORT LoadCount;
SHORT TlsIndex;
@@ -254,7 +254,7 @@ index 558f643..737e7f1 100644
ULONG TimeDateStamp;
HANDLE ActivationContext;
PVOID PatchInformation;
@@ -2182,6 +2181,9 @@ typedef struct _LDR_MODULE
@@ -2203,6 +2202,9 @@ typedef struct _LDR_MODULE
PVOID ContextInformation;
ULONG_PTR OriginalBase;
LARGE_INTEGER LoadTime;
@@ -265,5 +265,5 @@ index 558f643..737e7f1 100644
typedef struct _LDR_DLL_LOADED_NOTIFICATION_DATA
--
1.9.1
2.7.4

View File

@@ -1,4 +1,4 @@
From 97655d49034368dde4a9565f15692ae9416b8bc8 Mon Sep 17 00:00:00 2001
From 204020058c317ff7180f3d637da102526751ac29 Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Thu, 16 Jan 2014 20:56:49 -0700
Subject: [PATCH] ntdll: Add support for junction point creation.
@@ -6,20 +6,18 @@ Subject: [PATCH] ntdll: Add support for junction point creation.
---
dlls/ntdll/file.c | 91 +++++++++++++++++++++++++++++++++++++++++++++++
dlls/ntdll/tests/file.c | 94 +++++++++++++++++++++++++++++++++++++++++++++++++
include/Makefile.in | 1 +
include/ntifs.h | 50 ++++++++++++++++++++++++++
4 files changed, 236 insertions(+)
create mode 100644 include/ntifs.h
include/ddk/ntifs.h | 26 ++++++++++++++
3 files changed, 211 insertions(+)
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index c4528fe..8cd673a 100644
index 348a6b6..d34a28d 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -108,12 +108,14 @@
#include "winioctl.h"
#include "ddk/ntddk.h"
#include "ddk/ntddser.h"
+#include "ntifs.h"
+#include "ddk/ntifs.h"
WINE_DEFAULT_DEBUG_CHANNEL(ntdll);
WINE_DECLARE_DEBUG_CHANNEL(winediag);
@@ -107,7 +105,7 @@ index c4528fe..8cd673a 100644
/**************************************************************************
* NtFsControlFile [NTDLL.@]
* ZwFsControlFile [NTDLL.@]
@@ -1738,11 +1810,30 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc
@@ -1728,11 +1800,30 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc
}
break;
}
@@ -139,18 +137,18 @@ index c4528fe..8cd673a 100644
return server_ioctl_file( handle, event, apc, apc_context, io, code,
in_buffer, in_size, out_buffer, out_size );
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
index bf87000..198e415 100644
index 6d5ce72..60b32f5 100644
--- a/dlls/ntdll/tests/file.c
+++ b/dlls/ntdll/tests/file.c
@@ -37,6 +37,7 @@
#include "winternl.h"
@@ -38,6 +38,7 @@
#include "winuser.h"
#include "winioctl.h"
+#include "ntifs.h"
#include "winnls.h"
+#include "ddk/ntifs.h"
#ifndef IO_COMPLETION_ALL_ACCESS
#define IO_COMPLETION_ALL_ACCESS 0x001F0003
@@ -4335,6 +4336,98 @@ static void test_query_ea(void)
@@ -4540,6 +4541,98 @@ static void test_query_ea(void)
#undef EA_BUFFER_SIZE
}
@@ -249,53 +247,20 @@ index bf87000..198e415 100644
START_TEST(file)
{
HMODULE hkernel32 = GetModuleHandleA("kernel32.dll");
@@ -4401,4 +4494,5 @@ START_TEST(file)
@@ -4607,4 +4700,5 @@ START_TEST(file)
test_ioctl();
test_flush_buffers_file();
test_query_ea();
+ test_junction_points();
}
diff --git a/include/Makefile.in b/include/Makefile.in
index 78ab095..dc2bede 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -469,6 +469,7 @@ SOURCES = \
ntddstor.h \
ntdef.h \
ntdsapi.h \
+ ntifs.h \
ntlsa.h \
ntquery.h \
ntsecapi.h \
diff --git a/include/ntifs.h b/include/ntifs.h
new file mode 100644
index 0000000..85100fe
--- /dev/null
+++ b/include/ntifs.h
@@ -0,0 +1,50 @@
+/*
+ * Win32 definitions for Windows NT
+ *
+ * Copyright 2012 Erich Hoover
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __WINE_NTIFS_H
+#define __WINE_NTIFS_H
+
diff --git a/include/ddk/ntifs.h b/include/ddk/ntifs.h
index a1ed847..ccbd2a7 100644
--- a/include/ddk/ntifs.h
+++ b/include/ddk/ntifs.h
@@ -132,4 +132,30 @@ typedef struct _FS_FILTER_CALLBACKS
BOOLEAN WINAPI FsRtlIsNameInExpression(PUNICODE_STRING, PUNICODE_STRING, BOOLEAN, PWCH);
NTSTATUS WINAPI ObQueryNameString(PVOID,POBJECT_NAME_INFORMATION,ULONG,PULONG);
+typedef struct _REPARSE_DATA_BUFFER {
+ ULONG ReparseTag;
+ USHORT ReparseDataLength;
@@ -322,7 +287,7 @@ index 0000000..85100fe
+ };
+} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
+
+#endif /* __WINE_NTIFS_H */
#endif
--
1.9.1
2.7.4

View File

@@ -1,4 +1,4 @@
From 029fb5b0aa9c8ecb76da3aae5a2394072bf2fa33 Mon Sep 17 00:00:00 2001
From 1fe09b6fd1dd6fe7520932c2c226728301d5d099 Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Thu, 16 Jan 2014 21:00:21 -0700
Subject: [PATCH] ntdll: Add support for deleting junction points.
@@ -6,11 +6,11 @@ Subject: [PATCH] ntdll: Add support for deleting junction points.
---
dlls/ntdll/file.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++
dlls/ntdll/tests/file.c | 22 +++++++++++++++++++++
include/ntifs.h | 12 ++++++++++++
include/ddk/ntifs.h | 12 ++++++++++++
3 files changed, 85 insertions(+)
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index 73f9de4..4594c57 100644
index 66cc16a..9b8d4c8 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -1775,6 +1775,41 @@ cleanup:
@@ -55,7 +55,7 @@ index 73f9de4..4594c57 100644
/**************************************************************************
* NtFsControlFile [NTDLL.@]
* ZwFsControlFile [NTDLL.@]
@@ -1871,6 +1906,22 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc
@@ -1861,6 +1896,22 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc
status = STATUS_SUCCESS;
break;
@@ -79,10 +79,10 @@ index 73f9de4..4594c57 100644
{
REPARSE_DATA_BUFFER *buffer = (REPARSE_DATA_BUFFER *)out_buffer;
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
index 286d1e4..a5cb3b7 100644
index 94d5a04..a92961d 100644
--- a/dlls/ntdll/tests/file.c
+++ b/dlls/ntdll/tests/file.c
@@ -4360,12 +4360,15 @@ static void test_junction_points(void)
@@ -4565,12 +4565,15 @@ static void test_junction_points(void)
static const WCHAR junctionW[] = {'\\','j','u','n','c','t','i','o','n',0};
WCHAR path[MAX_PATH], junction_path[MAX_PATH], target_path[MAX_PATH];
static const WCHAR targetW[] = {'\\','t','a','r','g','e','t',0};
@@ -98,7 +98,7 @@ index 286d1e4..a5cb3b7 100644
UNICODE_STRING nameW;
HANDLE hJunction;
WCHAR *dest;
@@ -4413,6 +4416,8 @@ static void test_junction_points(void)
@@ -4618,6 +4621,8 @@ static void test_junction_points(void)
win_skip("Failed to open junction point directory handle (0x%x).\n", GetLastError());
goto cleanup;
}
@@ -107,7 +107,7 @@ index 286d1e4..a5cb3b7 100644
buffer_len = build_reparse_buffer(nameW.Buffer, &buffer);
bret = DeviceIoControl(hJunction, FSCTL_SET_REPARSE_POINT, (LPVOID)buffer, buffer_len, NULL, 0, &dwret, 0);
ok(bret, "Failed to create junction point! (0x%x)\n", GetLastError());
@@ -4427,6 +4432,23 @@ static void test_junction_points(void)
@@ -4632,6 +4637,23 @@ static void test_junction_points(void)
ok(bret, "Failed to read junction point!\n");
ok((memcmp(dest, nameW.Buffer, string_len) == 0), "Junction point destination does not match ('%s' != '%s')!\n",
wine_dbgstr_w(dest), wine_dbgstr_w(nameW.Buffer));
@@ -131,11 +131,11 @@ index 286d1e4..a5cb3b7 100644
CloseHandle(hJunction);
cleanup:
diff --git a/include/ntifs.h b/include/ntifs.h
index 85100fe..10820e4 100644
--- a/include/ntifs.h
+++ b/include/ntifs.h
@@ -47,4 +47,16 @@ typedef struct _REPARSE_DATA_BUFFER {
diff --git a/include/ddk/ntifs.h b/include/ddk/ntifs.h
index ccbd2a7..679d8ba 100644
--- a/include/ddk/ntifs.h
+++ b/include/ddk/ntifs.h
@@ -158,4 +158,16 @@ typedef struct _REPARSE_DATA_BUFFER {
};
} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
@@ -151,7 +151,7 @@ index 85100fe..10820e4 100644
+
+#define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer)
+
#endif /* __WINE_NTIFS_H */
#endif
--
1.9.1
2.7.4

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