winehq.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
January
2003
December
November
October
September
August
July
June
May
April
March
February
January
2002
December
November
October
September
August
July
June
May
April
March
February
January
2001
December
November
October
September
August
July
June
May
April
March
February
List overview
wine-commits
October 2021
----- 2025 -----
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
----- 2003 -----
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
----- 2002 -----
December 2002
November 2002
October 2002
September 2002
August 2002
July 2002
June 2002
May 2002
April 2002
March 2002
February 2002
January 2002
----- 2001 -----
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001
June 2001
May 2001
April 2001
March 2001
February 2001
wine-commits@winehq.org
2 participants
1165 discussions
Start a n
N
ew thread
Jacek Caban : makedep: Don't use -fno-builtin for importlibs.
by Alexandre Julliard
04 Oct '21
04 Oct '21
Module: wine Branch: master Commit: d5c585c6aa4d9a742e38bfd41235be4d7dd0c4f4 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=d5c585c6aa4d9a742e38bfd4…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Fri Oct 1 17:24:00 2021 +0200 makedep: Don't use -fno-builtin for importlibs. Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- tools/makedep.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/makedep.c b/tools/makedep.c index 81f65f52dd8..121fd4f3565 100644 --- a/tools/makedep.c +++ b/tools/makedep.c @@ -3022,7 +3022,7 @@ static void output_source_default( struct makefile *make, struct incl_file *sour output( "\t%s$(CROSSCC) -c -o $@ %s", cmd_prefix( "CC" ), source->filename ); output_filenames( defines ); output_filenames( extra_cross_cflags ); - if (source->file->flags & FLAG_C_IMPLIB || (make->module && is_crt_module( make->module ))) + if (make->module && is_crt_module( make->module )) output_filename( "-fno-builtin" ); output_filenames( cpp_flags ); output_filename( "$(CROSSCFLAGS)" );
1
0
0
0
Jacek Caban : makedep: Use -fno-builtin for CRT DLLs on PE targets.
by Alexandre Julliard
04 Oct '21
04 Oct '21
Module: wine Branch: master Commit: 63e6eaedeee2643d365e5cd63f38e0b74ac05b44 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=63e6eaedeee2643d365e5cd6…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Fri Oct 1 17:21:47 2021 +0200 makedep: Use -fno-builtin for CRT DLLs on PE targets. Just like we do for other targets with cross compiler enabled. Fixes PE-only i686 build with llvm-mingw, which otherwise uses unexpected optimizations. Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- tools/makedep.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/makedep.c b/tools/makedep.c index 78befe58603..81f65f52dd8 100644 --- a/tools/makedep.c +++ b/tools/makedep.c @@ -3004,6 +3004,8 @@ static void output_source_default( struct makefile *make, struct incl_file *sour { output_filenames( dll_flags ); if (source->use_msvcrt) output_filenames( msvcrt_flags ); + if (!*dll_ext && make->module && is_crt_module( make->module )) + output_filename( "-fno-builtin" ); } output_filenames( extra_cflags ); output_filenames( cpp_flags );
1
0
0
0
Paul Gofman : kernelbase: Fix string size variable overflow in GetModuleFileNameW().
by Alexandre Julliard
04 Oct '21
04 Oct '21
Module: wine Branch: master Commit: 7c523f48677abb5d8cf7d2b2f1cff919e57c8e99 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=7c523f48677abb5d8cf7d2b2…
Author: Paul Gofman <pgofman(a)codeweavers.com> Date: Mon Oct 4 12:21:10 2021 +0300 kernelbase: Fix string size variable overflow in GetModuleFileNameW(). Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=51833
Signed-off-by: Paul Gofman <pgofman(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/kernel32/tests/module.c | 5 +++++ dlls/kernelbase/loader.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/dlls/kernel32/tests/module.c b/dlls/kernel32/tests/module.c index 2487b9d65ab..60654754302 100644 --- a/dlls/kernel32/tests/module.c +++ b/dlls/kernel32/tests/module.c @@ -190,6 +190,11 @@ static void testGetModuleFileName(const char* name) ok(len1A / 2 == len2A, "Correct length in GetModuleFilenameA with buffer too small (%d/%d)\n", len1A / 2, len2A); + + len1A = GetModuleFileNameA(hMod, bufA, 0x10000); + ok(len1A > 0, "Getting module filename for handle %p\n", hMod); + len1W = GetModuleFileNameW(hMod, bufW, 0x10000); + ok(len1W > 0, "Getting module filename for handle %p\n", hMod); } static void testGetModuleFileName_Wrong(void) diff --git a/dlls/kernelbase/loader.c b/dlls/kernelbase/loader.c index 145d721bc26..de9ff2ba1a5 100644 --- a/dlls/kernelbase/loader.c +++ b/dlls/kernelbase/loader.c @@ -311,7 +311,7 @@ DWORD WINAPI DECLSPEC_HOTPATCH GetModuleFileNameW( HMODULE module, LPWSTR filena } name.Buffer = filename; - name.MaximumLength = size * sizeof(WCHAR); + name.MaximumLength = min( size, UNICODE_STRING_MAX_CHARS ) * sizeof(WCHAR); status = LdrGetDllFullName( module, &name ); if (!status || status == STATUS_BUFFER_TOO_SMALL) len = name.Length / sizeof(WCHAR); SetLastError( RtlNtStatusToDosError( status ));
1
0
0
0
Huw Davies : nsiproxy: Introduce a unix-side handle returned by icmp_send_echo().
by Alexandre Julliard
04 Oct '21
04 Oct '21
Module: wine Branch: master Commit: 20fb14bf278da37f95931cbac3c829e8bcd572cd URL:
https://source.winehq.org/git/wine.git/?a=commit;h=20fb14bf278da37f95931cba…
Author: Huw Davies <huw(a)codeweavers.com> Date: Mon Oct 4 12:23:22 2021 +0100 nsiproxy: Introduce a unix-side handle returned by icmp_send_echo(). This represents the state of the icmp request for use on the PE-side. Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/nsiproxy.sys/device.c | 10 ++++- dlls/nsiproxy.sys/icmp_echo.c | 77 +++++++++++++++++++++++++++++++++++- dlls/nsiproxy.sys/nsi.c | 1 + dlls/nsiproxy.sys/nsiproxy_private.h | 1 + dlls/nsiproxy.sys/unix_private.h | 1 + 5 files changed, 87 insertions(+), 3 deletions(-) diff --git a/dlls/nsiproxy.sys/device.c b/dlls/nsiproxy.sys/device.c index 5ae243a4111..cd0bc0e4db2 100644 --- a/dlls/nsiproxy.sys/device.c +++ b/dlls/nsiproxy.sys/device.c @@ -58,6 +58,7 @@ static NTSTATUS nsiproxy_call( unsigned int code, void *args ) enum unix_calls { + icmp_close, icmp_send_echo, nsi_enumerate_all_ex, nsi_get_all_parameters_ex, @@ -309,7 +310,7 @@ static void handle_queued_send_echo( IRP *irp ) status = nsiproxy_call( icmp_send_echo, ¶ms ); TRACE( "icmp_send_echo rets %08x\n", status ); - if (1) + if (status != STATUS_PENDING) { irp->IoStatus.Status = status; if (status == STATUS_SUCCESS) @@ -320,6 +321,13 @@ static void handle_queued_send_echo( IRP *irp ) } IoCompleteRequest( irp, IO_NO_INCREMENT ); } + else + { + /* FIXME */ + nsiproxy_call( icmp_close, params.handle ); + irp->IoStatus.Status = STATUS_NOT_SUPPORTED; + IoCompleteRequest( irp, IO_NO_INCREMENT ); + } } static DWORD WINAPI request_thread_proc( void *arg ) diff --git a/dlls/nsiproxy.sys/icmp_echo.c b/dlls/nsiproxy.sys/icmp_echo.c index 8ec506f823c..90a779fb67e 100644 --- a/dlls/nsiproxy.sys/icmp_echo.c +++ b/dlls/nsiproxy.sys/icmp_echo.c @@ -104,6 +104,68 @@ struct icmp_data const struct family_ops *ops; }; +#define MAX_HANDLES 256 /* Max number of simultaneous pings - could become dynamic if need be */ +static struct icmp_data *handle_table[MAX_HANDLES]; +static pthread_mutex_t handle_lock = PTHREAD_MUTEX_INITIALIZER; +static struct icmp_data **next_free, **next_unused = handle_table; + +static HANDLE handle_alloc( struct icmp_data *data ) +{ + struct icmp_data **entry; + HANDLE h; + + pthread_mutex_lock( &handle_lock ); + entry = next_free; + if (entry) next_free = *(struct icmp_data ***)entry; + else if (next_unused < handle_table + MAX_HANDLES) entry = next_unused++; + else + { + pthread_mutex_unlock( &handle_lock ); + FIXME( "Exhausted icmp handle count\n" ); + return 0; + } + *entry = data; + h = LongToHandle( entry - handle_table + 1 ); + pthread_mutex_unlock( &handle_lock ); + TRACE( "returning handle %p\n", h ); + return h; +} + +static struct icmp_data **handle_entry( HANDLE h ) +{ + unsigned int idx = HandleToLong( h ); + + if (!idx || idx > MAX_HANDLES) + { + ERR( "Invalid icmp handle\n" ); + return NULL; + } + return handle_table + idx - 1; +} + +static struct icmp_data *handle_data( HANDLE h ) +{ + struct icmp_data **entry = handle_entry( h ); + + if (!entry) return NULL; + return *entry; +} + +static void handle_free( HANDLE h ) +{ + struct icmp_data **entry; + + TRACE( "%p\n", h ); + pthread_mutex_lock( &handle_lock ); + entry = handle_entry( h ); + if (entry) + { + *(struct icmp_data ***)entry = next_free; + next_free = entry; + } + pthread_mutex_unlock( &handle_lock ); +} + static void ipv4_init_icmp_hdr( struct icmp_data *data, struct icmp_hdr *icmp_hdr ) { icmp_hdr->type = ICMP4_ECHO_REQUEST; @@ -315,7 +377,18 @@ NTSTATUS icmp_send_echo( void *args ) return STATUS_SUCCESS; } - /* FIXME */ + params->handle = handle_alloc( data ); + if (!params->handle) icmp_data_free( data ); + return params->handle ? STATUS_PENDING : STATUS_NO_MEMORY; +} + +NTSTATUS icmp_close( void *args ) +{ + HANDLE handle = args; + struct icmp_data *data = handle_data( handle ); + + if (!data) return STATUS_INVALID_PARAMETER; icmp_data_free( data ); - return STATUS_NOT_SUPPORTED; + handle_free( handle ); + return STATUS_SUCCESS; } diff --git a/dlls/nsiproxy.sys/nsi.c b/dlls/nsiproxy.sys/nsi.c index 25219a1c3fe..dec66ad6a33 100644 --- a/dlls/nsiproxy.sys/nsi.c +++ b/dlls/nsiproxy.sys/nsi.c @@ -147,6 +147,7 @@ static NTSTATUS unix_nsi_get_parameter_ex( void *args ) const unixlib_entry_t __wine_unix_call_funcs[] = { + icmp_close, icmp_send_echo, unix_nsi_enumerate_all_ex, unix_nsi_get_all_parameters_ex, diff --git a/dlls/nsiproxy.sys/nsiproxy_private.h b/dlls/nsiproxy.sys/nsiproxy_private.h index 9831998793d..b40a6198c7c 100644 --- a/dlls/nsiproxy.sys/nsiproxy_private.h +++ b/dlls/nsiproxy.sys/nsiproxy_private.h @@ -24,5 +24,6 @@ struct icmp_send_echo_params void *request; DWORD request_size; BYTE ttl, tos; + HANDLE handle; ULONG ip_status; }; diff --git a/dlls/nsiproxy.sys/unix_private.h b/dlls/nsiproxy.sys/unix_private.h index 0dfe9e69dbc..7f81336e3f1 100644 --- a/dlls/nsiproxy.sys/unix_private.h +++ b/dlls/nsiproxy.sys/unix_private.h @@ -157,4 +157,5 @@ static inline int ascii_strcasecmp( const char *s1, const char *s2 ) return ascii_strncasecmp( s1, s2, -1 ); } +NTSTATUS icmp_close( void *args ) DECLSPEC_HIDDEN; NTSTATUS icmp_send_echo( void *args ) DECLSPEC_HIDDEN;
1
0
0
0
Huw Davies : nsiproxy: Actually send the ICMP ECHO request.
by Alexandre Julliard
04 Oct '21
04 Oct '21
Module: wine Branch: master Commit: aa4e0d466b961b999900f5ab73e41859130ddcfc URL:
https://source.winehq.org/git/wine.git/?a=commit;h=aa4e0d466b961b999900f5ab…
Author: Huw Davies <huw(a)codeweavers.com> Date: Mon Oct 4 12:23:21 2021 +0100 nsiproxy: Actually send the ICMP ECHO request. However, don't yet wait for the reply. Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/nsiproxy.sys/Makefile.in | 1 + dlls/nsiproxy.sys/device.c | 37 +++- dlls/nsiproxy.sys/icmp_echo.c | 321 +++++++++++++++++++++++++++++++++++ dlls/nsiproxy.sys/nsi.c | 1 + dlls/nsiproxy.sys/nsiproxy_private.h | 28 +++ dlls/nsiproxy.sys/unix_private.h | 2 + 6 files changed, 387 insertions(+), 3 deletions(-) Diff:
https://source.winehq.org/git/wine.git/?a=commitdiff;h=aa4e0d466b961b999900…
1
0
0
0
Huw Davies : nsiproxy: Introduce IOCTL_NSIPROXY_WINE_ICMP_ECHO.
by Alexandre Julliard
04 Oct '21
04 Oct '21
Module: wine Branch: master Commit: f59a64144ba29fb1a382d8fbbb2fd4a71dd30cf6 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=f59a64144ba29fb1a382d8fb…
Author: Huw Davies <huw(a)codeweavers.com> Date: Mon Oct 4 12:23:20 2021 +0100 nsiproxy: Introduce IOCTL_NSIPROXY_WINE_ICMP_ECHO. With this patch the irp is simply marked as pending and transferred to the request thread which completes the irp with STATUS_NOT_SUPPORTED. Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/nsiproxy.sys/device.c | 103 +++++++++++++++++++++++++++++++++++++++++++++ include/wine/nsi.h | 34 +++++++++++++++ 2 files changed, 137 insertions(+) diff --git a/dlls/nsiproxy.sys/device.c b/dlls/nsiproxy.sys/device.c index fb330ddfc93..f4cefd4b794 100644 --- a/dlls/nsiproxy.sys/device.c +++ b/dlls/nsiproxy.sys/device.c @@ -36,6 +36,18 @@ WINE_DEFAULT_DEBUG_CHANNEL(nsi); static unixlib_handle_t nsiproxy_handle; +static HANDLE request_event; + +#define DECLARE_CRITICAL_SECTION(cs) \ + static CRITICAL_SECTION cs; \ + static CRITICAL_SECTION_DEBUG cs##_debug = \ + { 0, 0, &cs, { &cs##_debug.ProcessLocksList, &cs##_debug.ProcessLocksList }, \ + 0, 0, { (DWORD_PTR)(__FILE__ ": " # cs) }}; \ + static CRITICAL_SECTION cs = { &cs##_debug, -1, 0, 0, 0, 0 }; +DECLARE_CRITICAL_SECTION( nsiproxy_cs ); + +#define LIST_ENTRY_INIT( list ) { .Flink = &(list), .Blink = &(list) } +static LIST_ENTRY request_queue = LIST_ENTRY_INIT( request_queue ); static NTSTATUS nsiproxy_call( unsigned int code, void *args ) { @@ -162,6 +174,59 @@ static NTSTATUS nsiproxy_get_parameter( IRP *irp ) return status; } +static void WINAPI icmp_echo_cancel( DEVICE_OBJECT *device, IRP *irp ) +{ + TRACE( "device %p, irp %p.\n", device, irp ); + + IoReleaseCancelSpinLock( irp->CancelIrql ); + + /* FIXME: at the moment just let the request thread bail */ + return; +} + +static NTSTATUS nsiproxy_icmp_echo( IRP *irp ) +{ + IO_STACK_LOCATION *irpsp = IoGetCurrentIrpStackLocation( irp ); + struct nsiproxy_icmp_echo *in = (struct nsiproxy_icmp_echo *)irp->AssociatedIrp.SystemBuffer; + DWORD in_len = irpsp->Parameters.DeviceIoControl.InputBufferLength; + DWORD out_len = irpsp->Parameters.DeviceIoControl.OutputBufferLength; + + TRACE( "\n" ); + + if (in_len < offsetof(struct nsiproxy_icmp_echo, data[0]) || + in_len < offsetof(struct nsiproxy_icmp_echo, data[((in->opt_size + 3) & ~3) + in->req_size]) || + out_len < sizeof(struct nsiproxy_icmp_echo_reply)) + return STATUS_INVALID_PARAMETER; + + switch (in->dst.si_family) + { + case AF_INET: + if (in->dst.Ipv4.sin_addr.s_addr == INADDR_ANY) return STATUS_INVALID_ADDRESS_WILDCARD; + break; + default: + return STATUS_INVALID_PARAMETER; + } + + EnterCriticalSection( &nsiproxy_cs ); + + IoSetCancelRoutine( irp, icmp_echo_cancel ); + if (irp->Cancel && !IoSetCancelRoutine( irp, NULL )) + { + /* IRP was canceled before we set cancel routine */ + InitializeListHead( &irp->Tail.Overlay.ListEntry ); + LeaveCriticalSection( &nsiproxy_cs ); + return STATUS_CANCELLED; + } + + InsertTailList( &request_queue, &irp->Tail.Overlay.ListEntry ); + IoMarkIrpPending( irp ); + + LeaveCriticalSection( &nsiproxy_cs ); + SetEvent( request_event ); + + return STATUS_PENDING; +} + static NTSTATUS WINAPI nsi_ioctl( DEVICE_OBJECT *device, IRP *irp ) { IO_STACK_LOCATION *irpsp = IoGetCurrentIrpStackLocation( irp ); @@ -186,6 +251,10 @@ static NTSTATUS WINAPI nsi_ioctl( DEVICE_OBJECT *device, IRP *irp ) status = nsiproxy_get_parameter( irp ); break; + case IOCTL_NSIPROXY_WINE_ICMP_ECHO: + status = nsiproxy_icmp_echo( irp ); + break; + default: FIXME( "ioctl %x not supported\n", irpsp->Parameters.DeviceIoControl.IoControlCode ); status = STATUS_NOT_SUPPORTED; @@ -220,10 +289,40 @@ static int add_device( DRIVER_OBJECT *driver ) return 1; } +static DWORD WINAPI request_thread_proc( void *arg ) +{ + LIST_ENTRY *entry; + + while (WaitForSingleObject( request_event, INFINITE ) == WAIT_OBJECT_0) + { + TRACE( "request_event triggered\n" ); + EnterCriticalSection( &nsiproxy_cs ); + while ((entry = RemoveHeadList( &request_queue )) != &request_queue ) + { + IRP *irp = CONTAINING_RECORD( entry, IRP, Tail.Overlay.ListEntry ); + + if (irp->Cancel) + { + irp->IoStatus.Status = STATUS_CANCELLED; + TRACE( "already cancelled\n" ); + IoCompleteRequest( irp, IO_NO_INCREMENT ); + continue; + } + + /* FIXME */ + irp->IoStatus.Status = STATUS_NOT_SUPPORTED; + IoCompleteRequest( irp, IO_NO_INCREMENT ); + } + LeaveCriticalSection( &nsiproxy_cs ); + } + return 0; +} + NTSTATUS WINAPI DriverEntry( DRIVER_OBJECT *driver, UNICODE_STRING *path ) { HMODULE instance; NTSTATUS status; + HANDLE thread; TRACE( "(%p, %s)\n", driver, debugstr_w( path->Buffer ) ); @@ -236,5 +335,9 @@ NTSTATUS WINAPI DriverEntry( DRIVER_OBJECT *driver, UNICODE_STRING *path ) add_device( driver ); + request_event = CreateEventW( NULL, FALSE, FALSE, NULL ); + thread = CreateThread( NULL, 0, request_thread_proc, NULL, 0, NULL ); + CloseHandle( thread ); + return STATUS_SUCCESS; } diff --git a/include/wine/nsi.h b/include/wine/nsi.h index 7b8cb29e9d5..9664b534b09 100644 --- a/include/wine/nsi.h +++ b/include/wine/nsi.h @@ -380,6 +380,7 @@ struct nsi_udp_endpoint_static #define IOCTL_NSIPROXY_WINE_ENUMERATE_ALL CTL_CODE(FILE_DEVICE_NETWORK, 0x400, METHOD_BUFFERED, 0) #define IOCTL_NSIPROXY_WINE_GET_ALL_PARAMETERS CTL_CODE(FILE_DEVICE_NETWORK, 0x401, METHOD_BUFFERED, 0) #define IOCTL_NSIPROXY_WINE_GET_PARAMETER CTL_CODE(FILE_DEVICE_NETWORK, 0x402, METHOD_BUFFERED, 0) +#define IOCTL_NSIPROXY_WINE_ICMP_ECHO CTL_CODE(FILE_DEVICE_NETWORK, 0x403, METHOD_BUFFERED, 0) /* input for IOCTL_NSIPROXY_WINE_ENUMERATE_ALL */ struct nsiproxy_enumerate_all @@ -420,6 +421,39 @@ struct nsiproxy_get_parameter BYTE key[1]; /* key_size */ }; +/* input for IOCTL_NSIPROXY_WINE_ICMP_ECHO */ +struct nsiproxy_icmp_echo +{ + SOCKADDR_INET src; + SOCKADDR_INET dst; + BYTE ttl; + BYTE tos; + BYTE flags; + DWORD opt_size; + DWORD req_size; + DWORD timeout; + BYTE data[1]; /* ((opt_size + 3) & ~3) + req_size */ +}; + +/* output for IOCTL_NSIPROXY_WINE_ICMP_ECHO - cf. ICMP_ECHO_REPLY */ +struct nsiproxy_icmp_echo_reply +{ + SOCKADDR_INET addr; + ULONG status; + ULONG round_trip_time; + USHORT data_size; + USHORT num_of_pkts; + DWORD data_offset; + struct + { + BYTE ttl; + BYTE tos; + BYTE flags; + BYTE options_size; + DWORD options_offset; + } opts; +}; + /* Undocumented Nsi api */ #define NSI_PARAM_TYPE_RW 0
1
0
0
0
Huw Davies : nsiproxy: Let the general dispatch function update the irp's status.
by Alexandre Julliard
04 Oct '21
04 Oct '21
Module: wine Branch: master Commit: 7ed25b6c16fce6d608b9f047faaac69e58fea89c URL:
https://source.winehq.org/git/wine.git/?a=commit;h=7ed25b6c16fce6d608b9f047…
Author: Huw Davies <huw(a)codeweavers.com> Date: Mon Oct 4 12:23:19 2021 +0100 nsiproxy: Let the general dispatch function update the irp's status. Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/nsiproxy.sys/device.c | 77 ++++++++++++++++++++++------------------------ 1 file changed, 36 insertions(+), 41 deletions(-) diff --git a/dlls/nsiproxy.sys/device.c b/dlls/nsiproxy.sys/device.c index 3afd76487ff..fb330ddfc93 100644 --- a/dlls/nsiproxy.sys/device.c +++ b/dlls/nsiproxy.sys/device.c @@ -20,7 +20,6 @@ #include <stdarg.h> -#define NONAMELESSUNION #include "ntstatus.h" #define WIN32_NO_STATUS #include "windef.h" @@ -50,7 +49,7 @@ enum unix_calls nsi_get_parameter_ex, }; -static void nsiproxy_enumerate_all( IRP *irp ) +static NTSTATUS nsiproxy_enumerate_all( IRP *irp ) { IO_STACK_LOCATION *irpsp = IoGetCurrentIrpStackLocation( irp ); struct nsiproxy_enumerate_all *in = (struct nsiproxy_enumerate_all *)irp->AssociatedIrp.SystemBuffer; @@ -58,18 +57,12 @@ static void nsiproxy_enumerate_all( IRP *irp ) void *out = irp->AssociatedIrp.SystemBuffer; DWORD out_len = irpsp->Parameters.DeviceIoControl.OutputBufferLength; struct nsi_enumerate_all_ex enum_all; + NTSTATUS status; - if (in_len != sizeof(*in)) - { - irp->IoStatus.u.Status = STATUS_INVALID_PARAMETER; - return; - } + if (in_len != sizeof(*in)) return STATUS_INVALID_PARAMETER; if (out_len < sizeof(DWORD) + (in->key_size + in->rw_size + in->dynamic_size + in->static_size) * in->count) - { - irp->IoStatus.u.Status = STATUS_INVALID_PARAMETER; - return; - } + return STATUS_INVALID_PARAMETER; enum_all.unknown[0] = 0; enum_all.unknown[1] = 0; @@ -87,16 +80,18 @@ static void nsiproxy_enumerate_all( IRP *irp ) enum_all.static_size = in->static_size; enum_all.count = in->count; - irp->IoStatus.u.Status = nsiproxy_call( nsi_enumerate_all_ex, &enum_all ); - if (irp->IoStatus.u.Status == STATUS_SUCCESS || irp->IoStatus.u.Status == STATUS_BUFFER_OVERFLOW) + status = nsiproxy_call( nsi_enumerate_all_ex, &enum_all ); + if (status == STATUS_SUCCESS || status == STATUS_BUFFER_OVERFLOW) { irp->IoStatus.Information = out_len; *(DWORD *)out = enum_all.count; } else irp->IoStatus.Information = 0; + + return status; } -static void nsiproxy_get_all_parameters( IRP *irp ) +static NTSTATUS nsiproxy_get_all_parameters( IRP *irp ) { IO_STACK_LOCATION *irpsp = IoGetCurrentIrpStackLocation( irp ); struct nsiproxy_get_all_parameters *in = (struct nsiproxy_get_all_parameters *)irp->AssociatedIrp.SystemBuffer; @@ -104,19 +99,14 @@ static void nsiproxy_get_all_parameters( IRP *irp ) BYTE *out = irp->AssociatedIrp.SystemBuffer; DWORD out_len = irpsp->Parameters.DeviceIoControl.OutputBufferLength; struct nsi_get_all_parameters_ex get_all; + NTSTATUS status; - if (in_len < FIELD_OFFSET(struct nsiproxy_get_all_parameters, key[0]) || - in_len < FIELD_OFFSET(struct nsiproxy_get_all_parameters, key[in->key_size])) - { - irp->IoStatus.u.Status = STATUS_INVALID_PARAMETER; - return; - } + if (in_len < offsetof(struct nsiproxy_get_all_parameters, key[0]) || + in_len < offsetof(struct nsiproxy_get_all_parameters, key[in->key_size])) + return STATUS_INVALID_PARAMETER; if (out_len < in->rw_size + in->dynamic_size + in->static_size) - { - irp->IoStatus.u.Status = STATUS_INVALID_PARAMETER; - return; - } + return STATUS_INVALID_PARAMETER; get_all.unknown[0] = 0; get_all.unknown[1] = 0; @@ -133,11 +123,13 @@ static void nsiproxy_get_all_parameters( IRP *irp ) get_all.static_data = out + in->rw_size + in->dynamic_size; get_all.static_size = in->static_size; - irp->IoStatus.u.Status = nsiproxy_call( nsi_get_all_parameters_ex, &get_all ); - irp->IoStatus.Information = (irp->IoStatus.u.Status == STATUS_SUCCESS) ? out_len : 0; + status = nsiproxy_call( nsi_get_all_parameters_ex, &get_all ); + irp->IoStatus.Information = (status == STATUS_SUCCESS) ? out_len : 0; + + return status; } -static void nsiproxy_get_parameter( IRP *irp ) +static NTSTATUS nsiproxy_get_parameter( IRP *irp ) { IO_STACK_LOCATION *irpsp = IoGetCurrentIrpStackLocation( irp ); struct nsiproxy_get_parameter *in = (struct nsiproxy_get_parameter *)irp->AssociatedIrp.SystemBuffer; @@ -145,13 +137,11 @@ static void nsiproxy_get_parameter( IRP *irp ) void *out = irp->AssociatedIrp.SystemBuffer; DWORD out_len = irpsp->Parameters.DeviceIoControl.OutputBufferLength; struct nsi_get_parameter_ex get_param; + NTSTATUS status; - if (in_len < FIELD_OFFSET(struct nsiproxy_get_parameter, key[0]) || - in_len < FIELD_OFFSET(struct nsiproxy_get_parameter, key[in->key_size])) - { - irp->IoStatus.u.Status = STATUS_INVALID_PARAMETER; - return; - } + if (in_len < offsetof(struct nsiproxy_get_parameter, key[0]) || + in_len < offsetof(struct nsiproxy_get_parameter, key[in->key_size])) + return STATUS_INVALID_PARAMETER; get_param.unknown[0] = 0; get_param.unknown[1] = 0; @@ -166,8 +156,10 @@ static void nsiproxy_get_parameter( IRP *irp ) get_param.data_size = out_len; get_param.data_offset = in->data_offset; - irp->IoStatus.u.Status = nsiproxy_call( nsi_get_parameter_ex, &get_param ); - irp->IoStatus.Information = irp->IoStatus.u.Status == STATUS_SUCCESS ? out_len : 0; + status = nsiproxy_call( nsi_get_parameter_ex, &get_param ); + irp->IoStatus.Information = (status == STATUS_SUCCESS) ? out_len : 0; + + return status; } static NTSTATUS WINAPI nsi_ioctl( DEVICE_OBJECT *device, IRP *irp ) @@ -183,25 +175,28 @@ static NTSTATUS WINAPI nsi_ioctl( DEVICE_OBJECT *device, IRP *irp ) switch (irpsp->Parameters.DeviceIoControl.IoControlCode) { case IOCTL_NSIPROXY_WINE_ENUMERATE_ALL: - nsiproxy_enumerate_all( irp ); + status = nsiproxy_enumerate_all( irp ); break; case IOCTL_NSIPROXY_WINE_GET_ALL_PARAMETERS: - nsiproxy_get_all_parameters( irp ); + status = nsiproxy_get_all_parameters( irp ); break; case IOCTL_NSIPROXY_WINE_GET_PARAMETER: - nsiproxy_get_parameter( irp ); + status = nsiproxy_get_parameter( irp ); break; default: FIXME( "ioctl %x not supported\n", irpsp->Parameters.DeviceIoControl.IoControlCode ); - irp->IoStatus.u.Status = STATUS_NOT_SUPPORTED; + status = STATUS_NOT_SUPPORTED; break; } - status = irp->IoStatus.u.Status; - IoCompleteRequest( irp, IO_NO_INCREMENT ); + if (status != STATUS_PENDING) + { + irp->IoStatus.Status = status; + IoCompleteRequest( irp, IO_NO_INCREMENT ); + } return status; }
1
0
0
0
Huw Davies : nsiproxy: Rename private unixlib header to unix_private.h.
by Alexandre Julliard
04 Oct '21
04 Oct '21
Module: wine Branch: master Commit: ef45e119182a34b71892e253e38e7ff7e438b531 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=ef45e119182a34b71892e253…
Author: Huw Davies <huw(a)codeweavers.com> Date: Mon Oct 4 12:23:18 2021 +0100 nsiproxy: Rename private unixlib header to unix_private.h. Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/nsiproxy.sys/ip.c | 2 +- dlls/nsiproxy.sys/ndis.c | 2 +- dlls/nsiproxy.sys/nsi.c | 2 +- dlls/nsiproxy.sys/tcp.c | 2 +- dlls/nsiproxy.sys/udp.c | 2 +- dlls/nsiproxy.sys/{nsiproxy_private.h => unix_private.h} | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dlls/nsiproxy.sys/ip.c b/dlls/nsiproxy.sys/ip.c index 2e69c289c16..c7ec2e89b16 100644 --- a/dlls/nsiproxy.sys/ip.c +++ b/dlls/nsiproxy.sys/ip.c @@ -103,7 +103,7 @@ #include "wine/nsi.h" #include "wine/debug.h" -#include "nsiproxy_private.h" +#include "unix_private.h" WINE_DEFAULT_DEBUG_CHANNEL(nsi); diff --git a/dlls/nsiproxy.sys/ndis.c b/dlls/nsiproxy.sys/ndis.c index 8971b69c2db..3e37bcecc78 100644 --- a/dlls/nsiproxy.sys/ndis.c +++ b/dlls/nsiproxy.sys/ndis.c @@ -91,7 +91,7 @@ #include "wine/debug.h" #include "wine/unixlib.h" -#include "nsiproxy_private.h" +#include "unix_private.h" WINE_DEFAULT_DEBUG_CHANNEL(nsi); diff --git a/dlls/nsiproxy.sys/nsi.c b/dlls/nsiproxy.sys/nsi.c index ccfc325a085..565ae2d11dd 100644 --- a/dlls/nsiproxy.sys/nsi.c +++ b/dlls/nsiproxy.sys/nsi.c @@ -36,7 +36,7 @@ #include "wine/nsi.h" #include "wine/debug.h" #include "wine/unixlib.h" -#include "nsiproxy_private.h" +#include "unix_private.h" WINE_DEFAULT_DEBUG_CHANNEL(nsi); diff --git a/dlls/nsiproxy.sys/tcp.c b/dlls/nsiproxy.sys/tcp.c index 55311a4affc..1ed80afbe4b 100644 --- a/dlls/nsiproxy.sys/tcp.c +++ b/dlls/nsiproxy.sys/tcp.c @@ -105,7 +105,7 @@ #include "wine/debug.h" #include "wine/server.h" -#include "nsiproxy_private.h" +#include "unix_private.h" #ifndef HAVE_NETINET_TCP_FSM_H #define TCPS_ESTABLISHED 1 diff --git a/dlls/nsiproxy.sys/udp.c b/dlls/nsiproxy.sys/udp.c index 0cc2cadbc98..403431acbef 100644 --- a/dlls/nsiproxy.sys/udp.c +++ b/dlls/nsiproxy.sys/udp.c @@ -85,7 +85,7 @@ #include "wine/debug.h" #include "wine/server.h" -#include "nsiproxy_private.h" +#include "unix_private.h" WINE_DEFAULT_DEBUG_CHANNEL(nsi); diff --git a/dlls/nsiproxy.sys/nsiproxy_private.h b/dlls/nsiproxy.sys/unix_private.h similarity index 99% rename from dlls/nsiproxy.sys/nsiproxy_private.h rename to dlls/nsiproxy.sys/unix_private.h index acc60ce4806..97e264e9b1a 100644 --- a/dlls/nsiproxy.sys/nsiproxy_private.h +++ b/dlls/nsiproxy.sys/unix_private.h @@ -1,5 +1,5 @@ /* - * nsiproxy.sys + * nsiproxy.sys unixlib private header * * Copyright 2021 Huw Davies *
1
0
0
0
Nikolay Sivov : widl: Allow [hidden] and [version] on modules.
by Alexandre Julliard
04 Oct '21
04 Oct '21
Module: wine Branch: master Commit: 73686845d1c78a3ed705501f56013af373094c00 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=73686845d1c78a3ed705501f…
Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Mon Oct 4 13:09:16 2021 +0300 widl: Allow [hidden] and [version] on modules. Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- tools/widl/parser.y | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/widl/parser.y b/tools/widl/parser.y index 51050a24fa3..fa863921c92 100644 --- a/tools/widl/parser.y +++ b/tools/widl/parser.y @@ -2347,7 +2347,7 @@ struct allowed_attr allowed_attr[] = /* ATTR_HELPSTRING */ { 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, "helpstring" }, /* ATTR_HELPSTRINGCONTEXT */ { 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, "helpstringcontext" }, /* ATTR_HELPSTRINGDLL */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "helpstringdll" }, - /* ATTR_HIDDEN */ { 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, "hidden" }, + /* ATTR_HIDDEN */ { 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, "hidden" }, /* ATTR_ID */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, "id" }, /* ATTR_IDEMPOTENT */ { 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "idempotent" }, /* ATTR_IGNORE */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "ignore" }, @@ -2406,7 +2406,7 @@ struct allowed_attr allowed_attr[] = /* ATTR_UUID */ { 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, "uuid" }, /* ATTR_V1ENUM */ { 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "v1_enum" }, /* ATTR_VARARG */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "vararg" }, - /* ATTR_VERSION */ { 1, 0, 0, 1, 0, 0, 1, 1, 0, 2, 0, 0, 1, 0, 0, 1, 0, 1, "version" }, + /* ATTR_VERSION */ { 1, 0, 0, 1, 0, 0, 1, 1, 0, 2, 0, 0, 1, 0, 1, 1, 0, 1, "version" }, /* ATTR_VIPROGID */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "vi_progid" }, /* ATTR_WIREMARSHAL */ { 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "wire_marshal" }, };
1
0
0
0
Nikolay Sivov : widl: Allow modules without attributes.
by Alexandre Julliard
04 Oct '21
04 Oct '21
Module: wine Branch: master Commit: e3893d6bfd6f72c367efd776a8b41696f096b015 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=e3893d6bfd6f72c367efd776…
Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Mon Oct 4 13:09:15 2021 +0300 widl: Allow modules without attributes. Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- tools/widl/parser.y | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/widl/parser.y b/tools/widl/parser.y index 4c361e81dd1..51050a24fa3 100644 --- a/tools/widl/parser.y +++ b/tools/widl/parser.y @@ -1082,7 +1082,7 @@ dispinterfaceref: module: tMODULE typename { $$ = type_module_declare($2); } ; -moduledef: attributes module '{' int_statements '}' semicolon_opt +moduledef: m_attributes module '{' int_statements '}' semicolon_opt { $$ = type_module_define($2, $1, $4); } ;
1
0
0
0
← Newer
1
...
105
106
107
108
109
110
111
...
117
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
Results per page:
10
25
50
100
200