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
June 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
1 participants
811 discussions
Start a n
N
ew thread
Roman Pišl : ntdll: Don't pretend that the whole address space is reserved on non-i386.
by Alexandre Julliard
30 Jun '21
30 Jun '21
Module: wine Branch: master Commit: 0ec555e58ea9d5b33f4c825e96965ad0cb15d00f URL:
https://source.winehq.org/git/wine.git/?a=commit;h=0ec555e58ea9d5b33f4c825e…
Author: Roman Pišl <rpisl(a)seznam.cz> Date: Wed Jun 30 14:53:47 2021 +0200 ntdll: Don't pretend that the whole address space is reserved on non-i386. This is analogous to 61dcca5dbf4d0021f420dc87248b39a1dc1542db. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=50735
Signed-off-by: Roman Pišl <rpisl(a)seznam.cz> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntdll/unix/virtual.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c index ef623c0b17a..2484450055d 100644 --- a/dlls/ntdll/unix/virtual.c +++ b/dlls/ntdll/unix/virtual.c @@ -4012,10 +4012,18 @@ static int CDECL get_free_mem_state_callback( void *start, SIZE_T size, void *ar else /* outside of the reserved area, pretend it's allocated */ { info->RegionSize = (char *)start - (char *)info->BaseAddress; +#ifdef __i386__ info->State = MEM_RESERVE; info->Protect = PAGE_NOACCESS; info->AllocationProtect = PAGE_NOACCESS; info->Type = MEM_PRIVATE; +#else + info->State = MEM_FREE; + info->Protect = PAGE_NOACCESS; + info->AllocationBase = 0; + info->AllocationProtect = 0; + info->Type = 0; +#endif } return 1; }
1
0
0
0
Rémi Bernon : hidclass.sys: Disable the keyboard device interface on removal.
by Alexandre Julliard
30 Jun '21
30 Jun '21
Module: wine Branch: master Commit: 9a56ba033685d7b8d5a726cf8801ac17758e1cbd URL:
https://source.winehq.org/git/wine.git/?a=commit;h=9a56ba033685d7b8d5a726cf…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Tue Jun 29 11:47:31 2021 +0200 hidclass.sys: Disable the keyboard device interface on removal. Instead of enabling it. Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/hidclass.sys/pnp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dlls/hidclass.sys/pnp.c b/dlls/hidclass.sys/pnp.c index 4953bd3bebc..5f59257cdf7 100644 --- a/dlls/hidclass.sys/pnp.c +++ b/dlls/hidclass.sys/pnp.c @@ -466,7 +466,7 @@ static NTSTATUS pdo_pnp(DEVICE_OBJECT *device, IRP *irp) if (ext->u.pdo.is_mouse) IoSetDeviceInterfaceState(&ext->u.pdo.mouse_link_name, FALSE); if (ext->u.pdo.is_keyboard) - IoSetDeviceInterfaceState(&ext->u.pdo.keyboard_link_name, TRUE); + IoSetDeviceInterfaceState(&ext->u.pdo.keyboard_link_name, FALSE); if (ext->u.pdo.thread) {
1
0
0
0
Rémi Bernon : winebus.sys: Add missing keyboard free_device callback.
by Alexandre Julliard
30 Jun '21
30 Jun '21
Module: wine Branch: master Commit: ab8f8258a5b0d4aea1dd487e5c9547da60c7819d URL:
https://source.winehq.org/git/wine.git/?a=commit;h=ab8f8258a5b0d4aea1dd487e…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Tue Jun 29 11:47:30 2021 +0200 winebus.sys: Add missing keyboard free_device callback. Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/winebus.sys/main.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dlls/winebus.sys/main.c b/dlls/winebus.sys/main.c index c1c59b8a8e1..23195dfa75a 100644 --- a/dlls/winebus.sys/main.c +++ b/dlls/winebus.sys/main.c @@ -552,6 +552,10 @@ static void mouse_device_create(void) IoInvalidateDeviceRelations(bus_pdo, BusRelations); } +static void keyboard_free_device(DEVICE_OBJECT *device) +{ +} + static NTSTATUS keyboard_get_reportdescriptor(DEVICE_OBJECT *device, BYTE *buffer, DWORD length, DWORD *ret_length) { TRACE("buffer %p, length %u.\n", buffer, length); @@ -606,6 +610,7 @@ static NTSTATUS keyboard_set_feature_report(DEVICE_OBJECT *device, UCHAR id, BYT static const platform_vtbl keyboard_vtbl = { + .free_device = keyboard_free_device, .get_reportdescriptor = keyboard_get_reportdescriptor, .get_string = keyboard_get_string, .begin_report_processing = keyboard_begin_report_processing,
1
0
0
0
Rémi Bernon : ntoskrnl.exe: Implement Ke(Initialize|Insert|Remove)DeviceQueue.
by Alexandre Julliard
30 Jun '21
30 Jun '21
Module: wine Branch: master Commit: 2862ff6ba7852d6684dc1557a240c0ca01d9bdc1 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=2862ff6ba7852d6684dc1557…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Wed Jun 30 10:19:10 2021 +0200 ntoskrnl.exe: Implement Ke(Initialize|Insert|Remove)DeviceQueue. Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 6 +- dlls/ntoskrnl.exe/sync.c | 47 +++++++++++++ dlls/ntoskrnl.exe/tests/driver.c | 128 ++++++++++++++++++++++++++++++++++++ include/ddk/wdm.h | 4 ++ 4 files changed, 182 insertions(+), 3 deletions(-) Diff:
https://source.winehq.org/git/wine.git/?a=commitdiff;h=2862ff6ba7852d6684dc…
1
0
0
0
Rémi Bernon : winebus.sys: Handle IRP_MN_SURPRISE_REMOVAL and set removed flag.
by Alexandre Julliard
30 Jun '21
30 Jun '21
Module: wine Branch: master Commit: 0f4820233523604cfd499093d891e6acf25abc37 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=0f4820233523604cfd499093…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Wed Jun 30 10:19:09 2021 +0200 winebus.sys: Handle IRP_MN_SURPRISE_REMOVAL and set removed flag. Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/winebus.sys/main.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/dlls/winebus.sys/main.c b/dlls/winebus.sys/main.c index b1e44c147bd..c1c59b8a8e1 100644 --- a/dlls/winebus.sys/main.c +++ b/dlls/winebus.sys/main.c @@ -372,10 +372,6 @@ void bus_unlink_hid_device(DEVICE_OBJECT *device) EnterCriticalSection(&device_list_cs); list_remove(&pnp_device->entry); LeaveCriticalSection(&device_list_cs); - - EnterCriticalSection(&ext->cs); - ext->removed = TRUE; - LeaveCriticalSection(&ext->cs); } void bus_remove_hid_device(DEVICE_OBJECT *device) @@ -698,13 +694,18 @@ static NTSTATUS pdo_pnp_dispatch(DEVICE_OBJECT *device, IRP *irp) status = STATUS_SUCCESS; break; + case IRP_MN_SURPRISE_REMOVAL: + EnterCriticalSection(&ext->cs); + remove_pending_irps(device); + ext->removed = TRUE; + LeaveCriticalSection(&ext->cs); + break; + case IRP_MN_REMOVE_DEVICE: { struct pnp_device *pnp_device = ext->pnp_device; - EnterCriticalSection(&ext->cs); remove_pending_irps(device); - LeaveCriticalSection(&ext->cs); ext->vtbl->free_device(device);
1
0
0
0
Rémi Bernon : winebus.sys: Introduce new remove_pending_irps helper.
by Alexandre Julliard
30 Jun '21
30 Jun '21
Module: wine Branch: master Commit: 25155186c6afb903018778a348cb3db85309f37e URL:
https://source.winehq.org/git/wine.git/?a=commit;h=25155186c6afb903018778a3…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Wed Jun 30 10:19:08 2021 +0200 winebus.sys: Introduce new remove_pending_irps helper. Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/winebus.sys/main.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/dlls/winebus.sys/main.c b/dlls/winebus.sys/main.c index a512015d478..b1e44c147bd 100644 --- a/dlls/winebus.sys/main.c +++ b/dlls/winebus.sys/main.c @@ -235,6 +235,20 @@ static WCHAR *get_compatible_ids(DEVICE_OBJECT *device) return dst; } +static void remove_pending_irps(DEVICE_OBJECT *device) +{ + struct device_extension *ext = device->DeviceExtension; + LIST_ENTRY *entry; + + while ((entry = RemoveHeadList(&ext->irp_queue)) != &ext->irp_queue) + { + IRP *queued_irp = CONTAINING_RECORD(entry, IRP, Tail.Overlay.s.ListEntry); + queued_irp->IoStatus.u.Status = STATUS_DELETE_PENDING; + queued_irp->IoStatus.Information = 0; + IoCompleteRequest(queued_irp, IO_NO_INCREMENT); + } +} + DEVICE_OBJECT *bus_create_hid_device(const WCHAR *busidW, WORD vid, WORD pid, WORD input, DWORD version, DWORD uid, const WCHAR *serialW, BOOL is_gamepad, const platform_vtbl *vtbl, DWORD platform_data_size) @@ -687,16 +701,9 @@ static NTSTATUS pdo_pnp_dispatch(DEVICE_OBJECT *device, IRP *irp) case IRP_MN_REMOVE_DEVICE: { struct pnp_device *pnp_device = ext->pnp_device; - LIST_ENTRY *entry; EnterCriticalSection(&ext->cs); - while ((entry = RemoveHeadList(&ext->irp_queue)) != &ext->irp_queue) - { - IRP *queued_irp = CONTAINING_RECORD(entry, IRP, Tail.Overlay.s.ListEntry); - queued_irp->IoStatus.u.Status = STATUS_DELETE_PENDING; - queued_irp->IoStatus.Information = 0; - IoCompleteRequest(queued_irp, IO_NO_INCREMENT); - } + remove_pending_irps(device); LeaveCriticalSection(&ext->cs); ext->vtbl->free_device(device);
1
0
0
0
Rémi Bernon : ntoskrnl.exe/tests: Add some pending / remove tests.
by Alexandre Julliard
30 Jun '21
30 Jun '21
Module: wine Branch: master Commit: 19d1375bce83bfeca08cab2c869b325304507ace URL:
https://source.winehq.org/git/wine.git/?a=commit;h=19d1375bce83bfeca08cab2c…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Wed Jun 30 10:19:07 2021 +0200 ntoskrnl.exe/tests: Add some pending / remove tests. This shows that removing a device should send IRP_MN_SURPRISE_REMOVAL only, and that it's still possible to use DeviceIoControl on already opened handles. IRP_MN_REMOVE_DEVICE should only be sent when all then opened handles are closed. Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntoskrnl.exe/tests/driver.h | 2 + dlls/ntoskrnl.exe/tests/driver_pnp.c | 99 ++++++++++++++++++++++++++++++++++-- dlls/ntoskrnl.exe/tests/ntoskrnl.c | 30 ++++++++++- 3 files changed, 125 insertions(+), 6 deletions(-) diff --git a/dlls/ntoskrnl.exe/tests/driver.h b/dlls/ntoskrnl.exe/tests/driver.h index 2c62baa0a61..455695ad36b 100644 --- a/dlls/ntoskrnl.exe/tests/driver.h +++ b/dlls/ntoskrnl.exe/tests/driver.h @@ -35,6 +35,8 @@ #define IOCTL_WINETEST_RETURN_STATUS CTL_CODE(FILE_DEVICE_UNKNOWN, 0x80a, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_WINETEST_MISMATCHED_STATUS CTL_CODE(FILE_DEVICE_UNKNOWN, 0x80b, METHOD_NEITHER, FILE_ANY_ACCESS) #define IOCTL_WINETEST_COMPLETION CTL_CODE(FILE_DEVICE_UNKNOWN, 0x80c, METHOD_NEITHER, FILE_ANY_ACCESS) +#define IOCTL_WINETEST_MARK_PENDING CTL_CODE(FILE_DEVICE_UNKNOWN, 0x80d, METHOD_NEITHER, FILE_ANY_ACCESS) +#define IOCTL_WINETEST_CHECK_REMOVED CTL_CODE(FILE_DEVICE_UNKNOWN, 0x80e, METHOD_NEITHER, FILE_ANY_ACCESS) #define IOCTL_WINETEST_BUS_MAIN CTL_CODE(FILE_DEVICE_BUS_EXTENDER, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_WINETEST_BUS_REGISTER_IFACE CTL_CODE(FILE_DEVICE_BUS_EXTENDER, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS) diff --git a/dlls/ntoskrnl.exe/tests/driver_pnp.c b/dlls/ntoskrnl.exe/tests/driver_pnp.c index 774c98bae89..98ca2ff7961 100644 --- a/dlls/ntoskrnl.exe/tests/driver_pnp.c +++ b/dlls/ntoskrnl.exe/tests/driver_pnp.c @@ -41,6 +41,56 @@ static UNICODE_STRING control_symlink, bus_symlink; static DRIVER_OBJECT *driver_obj; static DEVICE_OBJECT *bus_fdo, *bus_pdo; +static DWORD remove_device_count; +static DWORD surprise_removal_count; +static DWORD query_remove_device_count; +static DWORD cancel_remove_device_count; + +struct irp_queue +{ + KSPIN_LOCK lock; + LIST_ENTRY list; +}; + +static IRP *irp_queue_pop(struct irp_queue *queue) +{ + KIRQL irql; + IRP *irp; + + KeAcquireSpinLock(&queue->lock, &irql); + if (IsListEmpty(&queue->list)) irp = NULL; + else irp = CONTAINING_RECORD(RemoveHeadList(&queue->list), IRP, Tail.Overlay.ListEntry); + KeReleaseSpinLock(&queue->lock, irql); + + return irp; +} + +static void irp_queue_push(struct irp_queue *queue, IRP *irp) +{ + KIRQL irql; + + KeAcquireSpinLock(&queue->lock, &irql); + InsertTailList(&queue->list, &irp->Tail.Overlay.ListEntry); + KeReleaseSpinLock(&queue->lock, irql); +} + +static void irp_queue_clear(struct irp_queue *queue) +{ + IRP *irp; + + while ((irp = irp_queue_pop(queue))) + { + irp->IoStatus.Status = STATUS_DELETE_PENDING; + IoCompleteRequest(irp, IO_NO_INCREMENT); + } +} + +static void irp_queue_init(struct irp_queue *queue) +{ + KeInitializeSpinLock(&queue->lock); + InitializeListHead(&queue->list); +} + struct device { struct list entry; @@ -49,6 +99,7 @@ struct device BOOL removed; UNICODE_STRING child_symlink; DEVICE_POWER_STATE power_state; + struct irp_queue irp_queue; }; static struct list device_list = LIST_INIT(device_list); @@ -207,6 +258,8 @@ static NTSTATUS pdo_pnp(DEVICE_OBJECT *device_obj, IRP *irp) POWER_STATE state = {.DeviceState = PowerDeviceD0}; NTSTATUS status; + irp_queue_init(&device->irp_queue); + ok(!stack->Parameters.StartDevice.AllocatedResources, "expected no resources\n"); ok(!stack->Parameters.StartDevice.AllocatedResourcesTranslated, "expected no translated resources\n"); @@ -223,6 +276,14 @@ static NTSTATUS pdo_pnp(DEVICE_OBJECT *device_obj, IRP *irp) } case IRP_MN_REMOVE_DEVICE: + /* should've been checked and reset by IOCTL_WINETEST_CHECK_REMOVED */ + ok(remove_device_count == 0, "expected no IRP_MN_REMOVE_DEVICE\n"); + todo_wine ok(surprise_removal_count == 0, "expected no IRP_MN_SURPRISE_REMOVAL\n"); + ok(query_remove_device_count == 0, "expected no IRP_MN_QUERY_REMOVE_DEVICE\n"); + ok(cancel_remove_device_count == 0, "expected no IRP_MN_CANCEL_REMOVE_DEVICE\n"); + + remove_device_count++; + irp_queue_clear(&device->irp_queue); if (device->removed) { IoSetDeviceInterfaceState(&device->child_symlink, FALSE); @@ -289,8 +350,20 @@ static NTSTATUS pdo_pnp(DEVICE_OBJECT *device_obj, IRP *irp) break; } - case IRP_MN_QUERY_REMOVE_DEVICE: case IRP_MN_SURPRISE_REMOVAL: + surprise_removal_count++; + irp_queue_clear(&device->irp_queue); + ret = STATUS_SUCCESS; + break; + + case IRP_MN_QUERY_REMOVE_DEVICE: + query_remove_device_count++; + irp_queue_clear(&device->irp_queue); + ret = STATUS_SUCCESS; + break; + + case IRP_MN_CANCEL_REMOVE_DEVICE: + cancel_remove_device_count++; ret = STATUS_SUCCESS; break; } @@ -579,8 +652,10 @@ static NTSTATUS fdo_ioctl(IRP *irp, IO_STACK_LOCATION *stack, ULONG code) } } -static NTSTATUS pdo_ioctl(struct device *device, IRP *irp, IO_STACK_LOCATION *stack, ULONG code) +static NTSTATUS pdo_ioctl(DEVICE_OBJECT *device_obj, IRP *irp, IO_STACK_LOCATION *stack, ULONG code) { + struct device *device = device_obj->DeviceExtension; + switch (code) { case IOCTL_WINETEST_CHILD_GET_ID: @@ -590,6 +665,22 @@ static NTSTATUS pdo_ioctl(struct device *device, IRP *irp, IO_STACK_LOCATION *st irp->IoStatus.Information = sizeof(device->id); return STATUS_SUCCESS; + case IOCTL_WINETEST_MARK_PENDING: + IoMarkIrpPending(irp); + irp_queue_push(&device->irp_queue, irp); + return STATUS_PENDING; + + case IOCTL_WINETEST_CHECK_REMOVED: + ok(remove_device_count == 0, "expected IRP_MN_REMOVE_DEVICE\n"); + ok(surprise_removal_count == 1, "expected IRP_MN_SURPRISE_REMOVAL\n"); + ok(query_remove_device_count == 0, "expected no IRP_MN_QUERY_REMOVE_DEVICE\n"); + ok(cancel_remove_device_count == 0, "expected no IRP_MN_CANCEL_REMOVE_DEVICE\n"); + remove_device_count = 0; + surprise_removal_count = 0; + query_remove_device_count = 0; + cancel_remove_device_count = 0; + return STATUS_SUCCESS; + default: ok(0, "Unexpected ioctl %#x.\n", code); return STATUS_NOT_IMPLEMENTED; @@ -605,10 +696,10 @@ static NTSTATUS WINAPI driver_ioctl(DEVICE_OBJECT *device, IRP *irp) if (device == bus_fdo) status = fdo_ioctl(irp, stack, code); else - status = pdo_ioctl(device->DeviceExtension, irp, stack, code); + status = pdo_ioctl(device, irp, stack, code); irp->IoStatus.Status = status; - IoCompleteRequest(irp, IO_NO_INCREMENT); + if (status != STATUS_PENDING) IoCompleteRequest(irp, IO_NO_INCREMENT); return status; } diff --git a/dlls/ntoskrnl.exe/tests/ntoskrnl.c b/dlls/ntoskrnl.exe/tests/ntoskrnl.c index a3c2a303a59..71dbfe1a5e9 100644 --- a/dlls/ntoskrnl.exe/tests/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/tests/ntoskrnl.c @@ -1150,10 +1150,11 @@ static void test_pnp_devices(void) }; HDEVNOTIFY notify_handle; DWORD size, type, dword; + HANDLE bus, child, tmp; OBJECT_ATTRIBUTES attr; UNICODE_STRING string; + OVERLAPPED ovl = {0}; IO_STATUS_BLOCK io; - HANDLE bus, child; HDEVINFO set; HWND window; BOOL ret; @@ -1349,6 +1350,14 @@ static void test_pnp_devices(void) CloseHandle(child); + ret = NtOpenFile(&child, SYNCHRONIZE, &attr, &io, 0, 0); + ok(!ret, "failed to open child: %#x\n", ret); + + ret = DeviceIoControl(child, IOCTL_WINETEST_MARK_PENDING, NULL, 0, NULL, 0, &size, &ovl); + ok(!ret, "DeviceIoControl succeded\n"); + ok(GetLastError() == ERROR_IO_PENDING, "got error %u\n", GetLastError()); + ok(size == 0, "got size %u\n", size); + id = 1; ret = DeviceIoControl(bus, IOCTL_WINETEST_BUS_REMOVE_CHILD, &id, sizeof(id), NULL, 0, &size, NULL); ok(ret, "got error %u\n", GetLastError()); @@ -1357,7 +1366,24 @@ static void test_pnp_devices(void) ok(got_child_arrival == 1, "got %u child arrival messages\n", got_child_arrival); ok(got_child_removal == 1, "got %u child removal messages\n", got_child_removal); - ret = NtOpenFile(&child, SYNCHRONIZE, &attr, &io, 0, FILE_SYNCHRONOUS_IO_NONALERT); + ret = DeviceIoControl(child, IOCTL_WINETEST_CHECK_REMOVED, NULL, 0, NULL, 0, &size, NULL); + todo_wine ok(ret, "got error %u\n", GetLastError()); + + ret = NtOpenFile(&tmp, SYNCHRONIZE, &attr, &io, 0, FILE_SYNCHRONOUS_IO_NONALERT); + todo_wine ok(ret == STATUS_NO_SUCH_DEVICE, "got %#x\n", ret); + + ret = GetOverlappedResult(child, &ovl, &size, TRUE); + ok(!ret, "unexpected success.\n"); + ok(GetLastError() == ERROR_ACCESS_DENIED, "got error %u\n", GetLastError()); + ok(size == 0, "got size %u\n", size); + + CloseHandle(child); + + pump_messages(); + ok(got_child_arrival == 1, "got %u child arrival messages\n", got_child_arrival); + ok(got_child_removal == 1, "got %u child removal messages\n", got_child_removal); + + ret = NtOpenFile(&tmp, SYNCHRONIZE, &attr, &io, 0, FILE_SYNCHRONOUS_IO_NONALERT); ok(ret == STATUS_OBJECT_NAME_NOT_FOUND, "got %#x\n", ret); CloseHandle(bus);
1
0
0
0
Rémi Bernon : include: Declare KeInitializeSpinLock as static FORCEINLINE.
by Alexandre Julliard
30 Jun '21
30 Jun '21
Module: wine Branch: master Commit: bd260831625b6cc06c81b936ba93c1ba63f53a1a URL:
https://source.winehq.org/git/wine.git/?a=commit;h=bd260831625b6cc06c81b936…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Wed Jun 30 10:19:06 2021 +0200 include: Declare KeInitializeSpinLock as static FORCEINLINE. And internally rename the ntoskrnl.exe export. Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 2 +- dlls/ntoskrnl.exe/sync.c | 2 +- include/ddk/wdm.h | 5 ++++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec index 5fdaa922f45..9bea60817b3 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -575,7 +575,7 @@ @ stdcall KeInitializeMutex(ptr long) @ stub KeInitializeQueue @ stdcall KeInitializeSemaphore(ptr long long) -@ stdcall KeInitializeSpinLock(ptr) +@ stdcall KeInitializeSpinLock(ptr) NTOSKRNL_KeInitializeSpinLock @ stdcall KeInitializeTimer(ptr) @ stdcall KeInitializeTimerEx(ptr long) @ stub KeInsertByKeyDeviceQueue diff --git a/dlls/ntoskrnl.exe/sync.c b/dlls/ntoskrnl.exe/sync.c index 445c8d890ab..2751032f13d 100644 --- a/dlls/ntoskrnl.exe/sync.c +++ b/dlls/ntoskrnl.exe/sync.c @@ -523,7 +523,7 @@ NTSTATUS WINAPI KeDelayExecutionThread( KPROCESSOR_MODE mode, BOOLEAN alertable, /*********************************************************************** * KeInitializeSpinLock (NTOSKRNL.EXE.@) */ -void WINAPI KeInitializeSpinLock( KSPIN_LOCK *lock ) +void WINAPI NTOSKRNL_KeInitializeSpinLock( KSPIN_LOCK *lock ) { TRACE("lock %p.\n", lock); *lock = 0; diff --git a/include/ddk/wdm.h b/include/ddk/wdm.h index 447833c4bc9..ca369c22d09 100644 --- a/include/ddk/wdm.h +++ b/include/ddk/wdm.h @@ -1754,7 +1754,10 @@ void WINAPI KeInitializeDpc(KDPC*,PKDEFERRED_ROUTINE,void*); void WINAPI KeInitializeEvent(PRKEVENT,EVENT_TYPE,BOOLEAN); void WINAPI KeInitializeMutex(PRKMUTEX,ULONG); void WINAPI KeInitializeSemaphore(PRKSEMAPHORE,LONG,LONG); -void WINAPI KeInitializeSpinLock(KSPIN_LOCK*); +static FORCEINLINE void WINAPI KeInitializeSpinLock( KSPIN_LOCK *lock ) +{ + *lock = 0; +} void WINAPI KeInitializeTimerEx(PKTIMER,TIMER_TYPE); void WINAPI KeInitializeTimer(KTIMER*); void WINAPI KeLeaveCriticalRegion(void);
1
0
0
0
Huw Davies : nsi: Implement NsiAllocateAndGetTable() and NsiFreeTable().
by Alexandre Julliard
30 Jun '21
30 Jun '21
Module: wine Branch: master Commit: f579cea53b7d25e50d4c5d412d20a2062e6501bd URL:
https://source.winehq.org/git/wine.git/?a=commit;h=f579cea53b7d25e50d4c5d41…
Author: Huw Davies <huw(a)codeweavers.com> Date: Wed Jun 30 09:59:25 2021 +0100 nsi: Implement NsiAllocateAndGetTable() and NsiFreeTable(). Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/nsi/nsi.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++--- dlls/nsi/tests/nsi.c | 5 ++--- 2 files changed, 52 insertions(+), 6 deletions(-) diff --git a/dlls/nsi/nsi.c b/dlls/nsi/nsi.c index 981fcdba954..37054dd0de6 100644 --- a/dlls/nsi/nsi.c +++ b/dlls/nsi/nsi.c @@ -39,9 +39,52 @@ DWORD WINAPI NsiAllocateAndGetTable( DWORD unk, const NPI_MODULEID *module, DWOR void **rw_data, DWORD rw_size, void **dynamic_data, DWORD dynamic_size, void **static_data, DWORD static_size, DWORD *count, DWORD unk2 ) { - FIXME( "%d %p %d %p %d %p %d %p %d %p %d %p %d: stub\n", unk, module, table, key_data, key_size, + DWORD err, num = 0; + void *data[4] = { NULL }; + DWORD sizes[4] = { key_size, rw_size, dynamic_size, static_size }; + int i, attempt; + + TRACE( "%d %p %d %p %d %p %d %p %d %p %d %p %d\n", unk, module, table, key_data, key_size, rw_data, rw_size, dynamic_data, dynamic_size, static_data, static_size, count, unk2 ); - return ERROR_CALL_NOT_IMPLEMENTED; + + for (attempt = 0; attempt < 5; attempt++) + { + err = NsiEnumerateObjectsAllParameters( unk, 0, module, table, NULL, 0, NULL, 0, NULL, 0, NULL, 0, &num ); + if (err) return err; + + for (i = 0; i < ARRAY_SIZE(data); i++) + { + if (sizes[i]) + { + data[i] = heap_alloc( sizes[i] * num ); + if (!data[i]) + { + err = ERROR_OUTOFMEMORY; + goto err; + } + } + } + + err = NsiEnumerateObjectsAllParameters( unk, 0, module, table, data[0], sizes[0], data[1], sizes[1], + data[2], sizes[2], data[3], sizes[3], &num ); + if (err != ERROR_MORE_DATA) break; + + NsiFreeTable( data[0], data[1], data[2], data[3] ); + memset( data, 0, sizeof(data) ); + } + + if (!err) + { + if (sizes[0]) *key_data = data[0]; + if (sizes[1]) *rw_data = data[1]; + if (sizes[2]) *dynamic_data = data[2]; + if (sizes[3]) *static_data = data[3]; + *count = num; + } + +err: + if (err) NsiFreeTable( data[0], data[1], data[2], data[3] ); + return err; } DWORD WINAPI NsiEnumerateObjectsAllParameters( DWORD unk, DWORD unk2, const NPI_MODULEID *module, DWORD table, @@ -128,7 +171,11 @@ DWORD WINAPI NsiEnumerateObjectsAllParametersEx( struct nsi_enumerate_all_ex *pa void WINAPI NsiFreeTable( void *key_data, void *rw_data, void *dynamic_data, void *static_data ) { - FIXME( "%p %p %p %p: stub\n", key_data, rw_data, dynamic_data, static_data ); + TRACE( "%p %p %p %p\n", key_data, rw_data, dynamic_data, static_data ); + heap_free( key_data ); + heap_free( rw_data ); + heap_free( dynamic_data ); + heap_free( static_data ); } DWORD WINAPI NsiGetAllParameters( DWORD unk, const NPI_MODULEID *module, DWORD table, const void *key, DWORD key_size, diff --git a/dlls/nsi/tests/nsi.c b/dlls/nsi/tests/nsi.c index 51b149e9f65..35ca0bb07c9 100644 --- a/dlls/nsi/tests/nsi.c +++ b/dlls/nsi/tests/nsi.c @@ -54,9 +54,7 @@ static void test_nsi_api( void ) (void **)&stat_tbl, sizeof(*stat_tbl), &count, 0 ); if (!err) break; } -todo_wine ok( !err, "got %d\n", err ); - if (err) return; rw_size = rw_sizes[i]; for (i = 0; i < count; i++) @@ -68,7 +66,9 @@ todo_wine err = NsiGetAllParameters( 1, &NPI_MS_NDIS_MODULEID, NSI_NDIS_IFINFO_TABLE, luid_tbl + i, sizeof(*luid_tbl), &get_rw, rw_size, &get_dyn, sizeof(get_dyn), &get_stat, sizeof(get_stat) ); +todo_wine ok( !err, "got %d\n", err ); + if (err) break; /* test a selection of members */ ok( IsEqualGUID( &get_rw.network_guid, &rw->network_guid ), "mismatch\n" ); ok( get_rw.alias.Length == rw->alias.Length, "mismatch\n" ); @@ -273,7 +273,6 @@ static void test_ndis_ifinfo( void ) (void **)&stat_tbl, sizeof(*stat_tbl), &count, 0 ); if (!err) break; } -todo_wine ok( !err, "got %d\n", err ); if (err) return; rw_size = rw_sizes[i];
1
0
0
0
Huw Davies : nsiproxy: Implement NDIS ifinfo enumerate_all.
by Alexandre Julliard
30 Jun '21
30 Jun '21
Module: wine Branch: master Commit: 2fc0872cac93ad22df2505741790042c8709802b URL:
https://source.winehq.org/git/wine.git/?a=commit;h=2fc0872cac93ad22df250574…
Author: Huw Davies <huw(a)codeweavers.com> Date: Wed Jun 30 09:59:24 2021 +0100 nsiproxy: Implement NDIS ifinfo enumerate_all. Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/nsiproxy.sys/Makefile.in | 3 +- dlls/nsiproxy.sys/ndis.c | 499 +++++++++++++++++++++++++++++++++++ dlls/nsiproxy.sys/nsi.c | 40 ++- dlls/nsiproxy.sys/nsiproxy_private.h | 17 ++ 4 files changed, 557 insertions(+), 2 deletions(-) Diff:
https://source.winehq.org/git/wine.git/?a=commitdiff;h=2fc0872cac93ad22df25…
1
0
0
0
← Newer
1
2
3
4
...
82
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
Results per page:
10
25
50
100
200