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
March 2022
----- 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
1138 discussions
Start a n
N
ew thread
Alexandre Julliard : wow64: Add a wrapper for NtInitializeNlsFiles().
by Alexandre Julliard
21 Mar '22
21 Mar '22
Module: wine Branch: master Commit: 4258f98244f21cb80a588c4ebaaff738ec9b01f6 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=4258f98244f21cb80a588c4e…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Mon Mar 21 11:51:41 2022 +0100 wow64: Add a wrapper for NtInitializeNlsFiles(). Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/wow64/syscall.h | 1 + dlls/wow64/virtual.c | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/dlls/wow64/syscall.h b/dlls/wow64/syscall.h index 0c2ba574031..a3af9174c49 100644 --- a/dlls/wow64/syscall.h +++ b/dlls/wow64/syscall.h @@ -97,6 +97,7 @@ SYSCALL_ENTRY( NtGetNlsSectionPtr ) \ SYSCALL_ENTRY( NtGetWriteWatch ) \ SYSCALL_ENTRY( NtImpersonateAnonymousToken ) \ + SYSCALL_ENTRY( NtInitializeNlsFiles ) \ SYSCALL_ENTRY( NtInitiatePowerAction ) \ SYSCALL_ENTRY( NtIsProcessInJob ) \ SYSCALL_ENTRY( NtListenPort ) \ diff --git a/dlls/wow64/virtual.c b/dlls/wow64/virtual.c index fc470c07923..e89373f4239 100644 --- a/dlls/wow64/virtual.c +++ b/dlls/wow64/virtual.c @@ -208,6 +208,24 @@ NTSTATUS WINAPI wow64_NtGetWriteWatch( UINT *args ) } +/********************************************************************** + * wow64_NtInitializeNlsFiles + */ +NTSTATUS WINAPI wow64_NtInitializeNlsFiles( UINT *args ) +{ + ULONG *addr32 = get_ptr( &args ); + LCID *lcid = get_ptr( &args ); + LARGE_INTEGER *size = get_ptr( &args ); + + void *addr; + NTSTATUS status; + + status = NtInitializeNlsFiles( addr_32to64( &addr, addr32 ), lcid, size ); + if (!status) put_addr( addr32, addr ); + return status; +} + + /********************************************************************** * wow64_NtLockVirtualMemory */
1
0
0
0
Alexandre Julliard : ntdll: Implement NtInitializeNlsFiles().
by Alexandre Julliard
21 Mar '22
21 Mar '22
Module: wine Branch: master Commit: 5ed078dc14c7c40815c3f65a8718207d861d0320 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=5ed078dc14c7c40815c3f65a…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Mon Mar 21 11:51:13 2022 +0100 ntdll: Implement NtInitializeNlsFiles(). Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntdll/ntdll.spec | 2 ++ dlls/ntdll/unix/env.c | 63 +++++++++++++++++++++++++++++++++++------------- dlls/ntdll/unix/loader.c | 3 ++- include/winternl.h | 1 + 4 files changed, 51 insertions(+), 18 deletions(-) diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec index d514bca5e11..6d134770596 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -235,6 +235,7 @@ @ stdcall -syscall NtImpersonateAnonymousToken(long) # @ stub NtImpersonateClientOfPort # @ stub NtImpersonateThread +@ stdcall -syscall NtInitializeNlsFiles(ptr ptr ptr) # @ stub NtInitializeRegistry @ stdcall -syscall NtInitiatePowerAction (long long long long) @ stdcall -syscall NtIsProcessInJob(long long) @@ -1257,6 +1258,7 @@ @ stdcall -private -syscall ZwImpersonateAnonymousToken(long) NtImpersonateAnonymousToken # @ stub ZwImpersonateClientOfPort # @ stub ZwImpersonateThread +@ stdcall -private -syscall ZwInitializeNlsFiles(ptr ptr ptr) NtInitializeNlsFiles # @ stub ZwInitializeRegistry @ stdcall -private -syscall ZwInitiatePowerAction(long long long long) NtInitiatePowerAction @ stdcall -private -syscall ZwIsProcessInJob(long long) NtIsProcessInJob diff --git a/dlls/ntdll/unix/env.c b/dlls/ntdll/unix/env.c index 227bcdbfa0f..2302ee46e86 100644 --- a/dlls/ntdll/unix/env.c +++ b/dlls/ntdll/unix/env.c @@ -153,22 +153,15 @@ static void *read_nls_file( ULONG type, ULONG id ) return ret; } -static NTSTATUS open_nls_data_file( ULONG type, ULONG id, HANDLE *file ) +static NTSTATUS open_nls_data_file( const char *path, const WCHAR *sysdir, HANDLE *file ) { - static const WCHAR sortdirW[] = {'\\','?','?','\\','C',':','\\','w','i','n','d','o','w','s','\\', - 'g','l','o','b','a','l','i','z','a','t','i','o','n','\\', - 's','o','r','t','i','n','g','\\',0}; - NTSTATUS status = STATUS_OBJECT_NAME_NOT_FOUND; OBJECT_ATTRIBUTES attr; UNICODE_STRING valueW; - WCHAR buffer[ARRAY_SIZE(sortdirW) + 16]; - char *p, *path = get_nls_file_path( type, id ); - - if (!path) return STATUS_OBJECT_NAME_NOT_FOUND; + WCHAR buffer[64]; + char *p, *ntpath; - /* try to open file in system dir */ - wcscpy( buffer, type == NLS_SECTION_SORTKEYS ? sortdirW : system_dir ); + wcscpy( buffer, system_dir ); p = strrchr( path, '/' ) + 1; ascii_to_unicode( buffer + wcslen(buffer), p, strlen(p) + 1 ); init_unicode_string( &valueW, buffer ); @@ -176,13 +169,12 @@ static NTSTATUS open_nls_data_file( ULONG type, ULONG id, HANDLE *file ) status = open_unix_file( file, path, GENERIC_READ, &attr, 0, FILE_SHARE_READ, FILE_OPEN, FILE_SYNCHRONOUS_IO_ALERT, NULL, 0 ); - free( path ); if (status != STATUS_NO_SUCH_FILE) return status; - if ((status = nt_to_unix_file_name( &attr, &path, FILE_OPEN ))) return status; - status = open_unix_file( file, path, GENERIC_READ, &attr, 0, FILE_SHARE_READ, + if ((status = nt_to_unix_file_name( &attr, &ntpath, FILE_OPEN ))) return status; + status = open_unix_file( file, ntpath, GENERIC_READ, &attr, 0, FILE_SHARE_READ, FILE_OPEN, FILE_SYNCHRONOUS_IO_ALERT, NULL, 0 ); - free( path ); + free( ntpath ); return status; } @@ -2438,6 +2430,9 @@ void *create_startup_info( const UNICODE_STRING *nt_image, const RTL_USER_PROCES */ NTSTATUS WINAPI NtGetNlsSectionPtr( ULONG type, ULONG id, void *unknown, void **ptr, SIZE_T *size ) { + static const WCHAR sortdirW[] = {'\\','?','?','\\','C',':','\\','w','i','n','d','o','w','s','\\', + 'g','l','o','b','a','l','i','z','a','t','i','o','n','\\', + 's','o','r','t','i','n','g','\\',0}; UNICODE_STRING nameW; OBJECT_ATTRIBUTES attr; WCHAR name[32]; @@ -2450,7 +2445,12 @@ NTSTATUS WINAPI NtGetNlsSectionPtr( ULONG type, ULONG id, void *unknown, void ** InitializeObjectAttributes( &attr, &nameW, 0, 0, NULL ); if ((status = NtOpenSection( &handle, SECTION_MAP_READ, &attr ))) { - if ((status = open_nls_data_file( type, id, &file ))) return status; + char *path = get_nls_file_path( type, id ); + + if (!path) return STATUS_OBJECT_NAME_NOT_FOUND; + status = open_nls_data_file( path, type == NLS_SECTION_SORTKEYS ? sortdirW : system_dir, &file ); + free( path ); + if (status) return status; attr.Attributes = OBJ_OPENIF | OBJ_PERMANENT; status = NtCreateSection( &handle, SECTION_MAP_READ, &attr, NULL, PAGE_READONLY, SEC_COMMIT, file ); NtClose( file ); @@ -2461,8 +2461,37 @@ NTSTATUS WINAPI NtGetNlsSectionPtr( ULONG type, ULONG id, void *unknown, void ** status = map_section( handle, ptr, size, PAGE_READONLY ); NtClose( handle ); } + return status; +} + + +/************************************************************************** + * NtInitializeNlsFiles (NTDLL.@) + */ +NTSTATUS WINAPI NtInitializeNlsFiles( void **ptr, LCID *lcid, LARGE_INTEGER *size ) +{ + const char *dir = build_dir ? build_dir : data_dir; + char *path; + HANDLE handle, file; + SIZE_T mapsize; + NTSTATUS status; + + if (!(path = malloc( strlen(dir) + sizeof("/nls/locale.nls") ))) return STATUS_NO_MEMORY; + strcpy( path, dir ); + strcat( path, "/nls/locale.nls" ); + status = open_nls_data_file( path, system_dir, &file ); + free( path ); + if (!status) + { + status = NtCreateSection( &handle, SECTION_MAP_READ, NULL, NULL, PAGE_READONLY, SEC_COMMIT, file ); + NtClose( file ); + } + if (!status) + { + status = map_section( handle, ptr, &mapsize, PAGE_READONLY ); + NtClose( handle ); } - NtClose( handle ); + *lcid = system_lcid; return status; } diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c index 97fb624d6d2..d1c42ddc0f3 100644 --- a/dlls/ntdll/unix/loader.c +++ b/dlls/ntdll/unix/loader.c @@ -196,7 +196,8 @@ static void * const syscalls[] = NtGetNlsSectionPtr, NtGetWriteWatch, NtImpersonateAnonymousToken, - NtInitiatePowerAction , + NtInitializeNlsFiles, + NtInitiatePowerAction, NtIsProcessInJob, NtListenPort, NtLoadDriver, diff --git a/include/winternl.h b/include/winternl.h index 4c49f5eae47..68c174d6086 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -3995,6 +3995,7 @@ NTSYSAPI NTSTATUS WINAPI NtGetWriteWatch(HANDLE,ULONG,PVOID,SIZE_T,PVOID*,ULONG NTSYSAPI NTSTATUS WINAPI NtImpersonateAnonymousToken(HANDLE); NTSYSAPI NTSTATUS WINAPI NtImpersonateClientOfPort(HANDLE,PPORT_MESSAGE); NTSYSAPI NTSTATUS WINAPI NtImpersonateThread(HANDLE,HANDLE,PSECURITY_QUALITY_OF_SERVICE); +NTSYSAPI NTSTATUS WINAPI NtInitializeNlsFiles(void**,LCID*,LARGE_INTEGER*); NTSYSAPI NTSTATUS WINAPI NtInitializeRegistry(BOOLEAN); NTSYSAPI NTSTATUS WINAPI NtInitiatePowerAction(POWER_ACTION,SYSTEM_POWER_STATE,ULONG,BOOLEAN); NTSYSAPI NTSTATUS WINAPI NtIsProcessInJob(HANDLE,HANDLE);
1
0
0
0
Alexandre Julliard : ntdll: Add a helper function to map a section.
by Alexandre Julliard
21 Mar '22
21 Mar '22
Module: wine Branch: master Commit: cd4fcf9a112181149c5dde9cbd0b481de6161b4d URL:
https://source.winehq.org/git/wine.git/?a=commit;h=cd4fcf9a112181149c5dde9c…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Mon Mar 21 11:50:33 2022 +0100 ntdll: Add a helper function to map a section. Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntdll/unix/env.c | 7 +++---- dlls/ntdll/unix/loader.c | 6 +----- dlls/ntdll/unix/unix_private.h | 8 ++++++++ 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/dlls/ntdll/unix/env.c b/dlls/ntdll/unix/env.c index 3f9f7f1b3b7..227bcdbfa0f 100644 --- a/dlls/ntdll/unix/env.c +++ b/dlls/ntdll/unix/env.c @@ -2458,10 +2458,9 @@ NTSTATUS WINAPI NtGetNlsSectionPtr( ULONG type, ULONG id, void *unknown, void ** } if (!status) { - *ptr = NULL; - *size = 0; - status = NtMapViewOfSection( handle, GetCurrentProcess(), ptr, 0, 0, NULL, size, - ViewShare, 0, PAGE_READONLY ); + status = map_section( handle, ptr, size, PAGE_READONLY ); + NtClose( handle ); + } } NtClose( handle ); return status; diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c index 5eb201bd90b..97fb624d6d2 100644 --- a/dlls/ntdll/unix/loader.c +++ b/dlls/ntdll/unix/loader.c @@ -2032,11 +2032,7 @@ static void load_apiset_dll(void) } if (!status) { - ptr = NULL; - size = 0; - status = NtMapViewOfSection( mapping, NtCurrentProcess(), &ptr, - is_win64 && wow_peb ? 0x7fffffff : 0, 0, NULL, - &size, ViewShare, 0, PAGE_READONLY ); + status = map_section( mapping, &ptr, &size, PAGE_READONLY ); NtClose( mapping ); } if (!status) diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h index b1595c792c0..434f98cdc5a 100644 --- a/dlls/ntdll/unix/unix_private.h +++ b/dlls/ntdll/unix/unix_private.h @@ -450,4 +450,12 @@ static inline void init_unicode_string( UNICODE_STRING *str, const WCHAR *data ) str->Buffer = (WCHAR *)data; } +static inline NTSTATUS map_section( HANDLE mapping, void **ptr, SIZE_T *size, ULONG protect ) +{ + *ptr = NULL; + *size = 0; + return NtMapViewOfSection( mapping, NtCurrentProcess(), ptr, is_win64 && wow_peb ? 0x7fffffff : 0, + 0, NULL, size, ViewShare, 0, protect ); +} + #endif /* __NTDLL_UNIX_PRIVATE_H */
1
0
0
0
Alexandre Julliard : make_unicode: Generate locale.nls using the Unicode CLDR data.
by Alexandre Julliard
21 Mar '22
21 Mar '22
Module: wine Branch: master Commit: 8cdb593f5a7e026caee10b6787cf686f3276b65b URL:
https://source.winehq.org/git/wine.git/?a=commit;h=8cdb593f5a7e026caee10b67…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Mon Mar 21 11:45:05 2022 +0100 make_unicode: Generate locale.nls using the Unicode CLDR data. Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- loader/wine.inf.in | 1 + nls/Makefile.in | 1 + nls/locale.nls | Bin 0 -> 625428 bytes tools/make_unicode | 1874 +++++++++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 1875 insertions(+), 1 deletion(-) Diff:
https://source.winehq.org/git/wine.git/?a=commitdiff;h=8cdb593f5a7e026caee1…
1
0
0
0
Rémi Bernon : dinput/tests: Add more HID device and extension pointers tests.
by Alexandre Julliard
21 Mar '22
21 Mar '22
Module: wine Branch: master Commit: c44ba8735c54de5ef759e31b3da4ecb3b763d4c2 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=c44ba8735c54de5ef759e31b…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Mon Mar 21 09:54:15 2022 +0100 dinput/tests: Add more HID device and extension pointers tests. Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/dinput/tests/driver.c | 50 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 44 insertions(+), 6 deletions(-) diff --git a/dlls/dinput/tests/driver.c b/dlls/dinput/tests/driver.c index 579d82cfeed..54a281072f9 100644 --- a/dlls/dinput/tests/driver.c +++ b/dlls/dinput/tests/driver.c @@ -406,6 +406,33 @@ struct hid_device KSPIN_LOCK lock; }; +static DRIVER_OBJECT *expect_driver; +static DEVICE_OBJECT *expect_bus_pdo; +static DEVICE_OBJECT *expect_hid_fdo; +static DEVICE_OBJECT *expect_hid_pdo; +static struct hid_device *expect_hid_ext; + +static void check_device( DEVICE_OBJECT *device ) +{ + static int checked_fdo, checked_pdo; + HID_DEVICE_EXTENSION *ext = device->DeviceExtension; + + ok( device == expect_hid_pdo || device == expect_hid_fdo, "got device %p\n", device ); + ok( device->DriverObject == expect_driver, "got DriverObject %p\n", device->DriverObject ); + if (!device->NextDevice) ok( device == expect_hid_fdo, "got device %p\n", device ); + else ok( device->NextDevice == expect_hid_fdo, "got NextDevice %p\n", device->NextDevice ); + ok( !device->AttachedDevice, "got AttachedDevice %p\n", device->AttachedDevice ); + + if (device == expect_hid_pdo && checked_pdo++) return; + if (device == expect_hid_fdo && checked_fdo++) return; + + todo_wine_if( device != expect_hid_fdo ) + ok( ext->MiniDeviceExtension == expect_hid_ext, "got MiniDeviceExtension %p\n", ext->MiniDeviceExtension ); + if (ext->MiniDeviceExtension != expect_hid_ext) return; + ok( ext->PhysicalDeviceObject == expect_bus_pdo, "got PhysicalDeviceObject %p\n", ext->PhysicalDeviceObject ); + ok( ext->NextDeviceObject == expect_bus_pdo, "got NextDeviceObject %p\n", ext->NextDeviceObject ); +} + static NTSTATUS WINAPI driver_pnp( DEVICE_OBJECT *device, IRP *irp ) { IO_STACK_LOCATION *stack = IoGetCurrentIrpStackLocation( irp ); @@ -493,6 +520,9 @@ static NTSTATUS WINAPI driver_internal_ioctl( DEVICE_OBJECT *device, IRP *irp ) if (winetest_debug > 1) trace( "%s: device %p, code %#lx %s\n", __func__, device, code, debugstr_ioctl(code) ); + ok( expect_hid_fdo == device, "got device %p\n", device ); + check_device( device ); + ok( got_start_device, "expected IRP_MN_START_DEVICE before any ioctls\n" ); irp->IoStatus.Information = 0; @@ -706,7 +736,7 @@ static NTSTATUS WINAPI driver_internal_ioctl( DEVICE_OBJECT *device, IRP *irp ) return ret; } -static NTSTATUS( WINAPI *hidclass_driver_ioctl )(DEVICE_OBJECT *device, IRP *irp); +static NTSTATUS (WINAPI *hidclass_driver_ioctl)( DEVICE_OBJECT *device, IRP *irp ); static NTSTATUS WINAPI driver_ioctl( DEVICE_OBJECT *device, IRP *irp ) { IO_STACK_LOCATION *stack = IoGetCurrentIrpStackLocation( irp ); @@ -716,6 +746,10 @@ static NTSTATUS WINAPI driver_ioctl( DEVICE_OBJECT *device, IRP *irp ) if (winetest_debug > 1) trace( "%s: device %p, code %#lx %s\n", __func__, device, code, debugstr_ioctl(code) ); + if (!expect_hid_pdo) expect_hid_pdo = device; + else ok( expect_hid_pdo == device, "got device %p\n", device ); + check_device( device ); + switch (code) { case IOCTL_WINETEST_HID_SET_EXPECT: @@ -750,12 +784,14 @@ static NTSTATUS WINAPI driver_add_device( DRIVER_OBJECT *driver, DEVICE_OBJECT * if (winetest_debug > 1) trace( "%s: driver %p, device %p\n", __func__, driver, device ); - /* We should be given the FDO, not the PDO. */ - ok( !!ext->PhysicalDeviceObject, "expected non-NULL pdo\n" ); - ok( ext->NextDeviceObject == ext->PhysicalDeviceObject, "got pdo %p, next %p\n", - ext->PhysicalDeviceObject, ext->NextDeviceObject ); + expect_hid_fdo = device; + expect_bus_pdo = ext->PhysicalDeviceObject; + expect_hid_ext = ext->MiniDeviceExtension; + todo_wine - ok( ext->NextDeviceObject->AttachedDevice == device, "wrong attached device\n" ); + ok( expect_bus_pdo->AttachedDevice == device, "got AttachedDevice %p\n", expect_bus_pdo->AttachedDevice ); + ok( driver == expect_driver, "got driver %p\n", driver ); + check_device( device ); ret = IoRegisterDeviceInterface( ext->PhysicalDeviceObject, &control_class, NULL, &control_symlink ); ok( !ret, "got %#lx\n", ret ); @@ -809,6 +845,8 @@ NTSTATUS WINAPI DriverEntry( DRIVER_OBJECT *driver, UNICODE_STRING *registry ) HANDLE hkey; DWORD size; + expect_driver = driver; + if ((ret = winetest_init())) return ret; if (winetest_debug > 1) trace( "%s: driver %p\n", __func__, driver );
1
0
0
0
Rémi Bernon : dinput/tests: Introduce a new find_hid_device_path helper.
by Alexandre Julliard
21 Mar '22
21 Mar '22
Module: wine Branch: master Commit: d470e7832cd632d88b1561b208103e950ccf83e5 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=d470e7832cd632d88b1561b2…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Mon Mar 21 09:54:14 2022 +0100 dinput/tests: Introduce a new find_hid_device_path helper. Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/dinput/tests/hid.c | 106 ++++++++++++++++++++++-------------------------- 1 file changed, 48 insertions(+), 58 deletions(-) diff --git a/dlls/dinput/tests/hid.c b/dlls/dinput/tests/hid.c index b5683b18850..6203f67bb25 100644 --- a/dlls/dinput/tests/hid.c +++ b/dlls/dinput/tests/hid.c @@ -489,6 +489,42 @@ static void pnp_driver_stop(void) ok( ret || GetLastError() == ERROR_FILE_NOT_FOUND, "Failed to delete file, error %lu\n", GetLastError() ); } +static BOOL find_hid_device_path( WCHAR *device_path ) +{ + char buffer[FIELD_OFFSET( SP_DEVICE_INTERFACE_DETAIL_DATA_W, DevicePath[MAX_PATH] )] = {0}; + SP_DEVICE_INTERFACE_DATA iface = {sizeof(SP_DEVICE_INTERFACE_DATA)}; + SP_DEVICE_INTERFACE_DETAIL_DATA_W *iface_detail = (void *)buffer; + SP_DEVINFO_DATA device = {sizeof(SP_DEVINFO_DATA)}; + ULONG i, len = wcslen( device_path ); + HDEVINFO set; + BOOL ret; + + set = SetupDiGetClassDevsW( &GUID_DEVINTERFACE_HID, NULL, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT ); + ok( set != INVALID_HANDLE_VALUE, "Failed to get device list, error %#lx\n", GetLastError() ); + + for (i = 0; SetupDiEnumDeviceInfo( set, i, &device ); ++i) + { + ret = SetupDiEnumDeviceInterfaces( set, &device, &GUID_DEVINTERFACE_HID, 0, &iface ); + ok( ret, "Failed to get interface, error %#lx\n", GetLastError() ); + ok( IsEqualGUID( &iface.InterfaceClassGuid, &GUID_DEVINTERFACE_HID ), "wrong class %s\n", + debugstr_guid( &iface.InterfaceClassGuid ) ); + ok( iface.Flags == SPINT_ACTIVE, "got flags %#lx\n", iface.Flags ); + + iface_detail->cbSize = sizeof(*iface_detail); + ret = SetupDiGetDeviceInterfaceDetailW( set, &iface, iface_detail, sizeof(buffer), NULL, NULL ); + ok( ret, "Failed to get interface path, error %#lx\n", GetLastError() ); + + if (!wcsncmp( iface_detail->DevicePath, device_path, len )) break; + } + + ret = SetupDiDestroyDeviceInfoList( set ); + ok( ret, "Failed to destroy set, error %lu\n", GetLastError() ); + + ret = !wcsncmp( iface_detail->DevicePath, device_path, len ); + if (ret) wcscpy( device_path, iface_detail->DevicePath ); + return ret; +} + static BOOL pnp_driver_start(void) { static const WCHAR hardware_id[] = L"test_hardware_id\0"; @@ -2337,50 +2373,22 @@ static void test_hidp( HANDLE file, HANDLE async_file, int report_id, BOOL polle static void test_hid_device( DWORD report_id, DWORD polled, const HIDP_CAPS *expect_caps ) { - char buffer[FIELD_OFFSET( SP_DEVICE_INTERFACE_DETAIL_DATA_W, DevicePath[MAX_PATH] )]; - SP_DEVICE_INTERFACE_DATA iface = {sizeof(SP_DEVICE_INTERFACE_DATA)}; - SP_DEVICE_INTERFACE_DETAIL_DATA_W *iface_detail = (void *)buffer; - SP_DEVINFO_DATA device = {sizeof(SP_DEVINFO_DATA)}; ULONG count, poll_freq, out_len; + WCHAR device_path[MAX_PATH]; HANDLE file, async_file; - BOOL ret, found = FALSE; OBJECT_ATTRIBUTES attr; UNICODE_STRING string; IO_STATUS_BLOCK io; NTSTATUS status; - unsigned int i; - HDEVINFO set; + BOOL ret; winetest_push_context( "id %ld%s", report_id, polled ? " poll" : "" ); - set = SetupDiGetClassDevsW( &GUID_DEVINTERFACE_HID, NULL, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT ); - ok( set != INVALID_HANDLE_VALUE, "failed to get device list, error %#lx\n", GetLastError() ); - - for (i = 0; SetupDiEnumDeviceInfo( set, i, &device ); ++i) - { - ret = SetupDiEnumDeviceInterfaces( set, &device, &GUID_DEVINTERFACE_HID, 0, &iface ); - ok( ret, "failed to get interface, error %#lx\n", GetLastError() ); - ok( IsEqualGUID( &iface.InterfaceClassGuid, &GUID_DEVINTERFACE_HID ), "wrong class %s\n", - debugstr_guid( &iface.InterfaceClassGuid ) ); - ok( iface.Flags == SPINT_ACTIVE, "got flags %#lx\n", iface.Flags ); - - iface_detail->cbSize = sizeof(*iface_detail); - ret = SetupDiGetDeviceInterfaceDetailW( set, &iface, iface_detail, sizeof(buffer), NULL, NULL ); - ok( ret, "failed to get interface path, error %#lx\n", GetLastError() ); - - if (wcsstr( iface_detail->DevicePath, L"\\\\?\\hid#winetest#1" )) - { - found = TRUE; - break; - } - } - - SetupDiDestroyDeviceInfoList( set ); - - todo_wine - ok( found, "didn't find device\n" ); + swprintf( device_path, MAX_PATH, L"\\\\?\\hid#winetest#" ); + ret = find_hid_device_path( device_path ); + ok( ret, "Failed to find HID device matching %s\n", debugstr_w( device_path ) ); - file = CreateFileW( iface_detail->DevicePath, FILE_READ_ACCESS | FILE_WRITE_ACCESS, + file = CreateFileW( device_path, FILE_READ_ACCESS | FILE_WRITE_ACCESS, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL ); ok( file != INVALID_HANDLE_VALUE, "got error %lu\n", GetLastError() ); @@ -2411,7 +2419,7 @@ static void test_hid_device( DWORD report_id, DWORD polled, const HIDP_CAPS *exp ok( ret, "HidD_GetNumInputBuffers failed last error %lu\n", GetLastError() ); ok( count == 16, "HidD_GetNumInputBuffers returned %lu\n", count ); - async_file = CreateFileW( iface_detail->DevicePath, FILE_READ_ACCESS | FILE_WRITE_ACCESS, + async_file = CreateFileW( device_path, FILE_READ_ACCESS | FILE_WRITE_ACCESS, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED | FILE_FLAG_NO_BUFFERING, NULL ); ok( async_file != INVALID_HANDLE_VALUE, "got error %lu\n", GetLastError() ); @@ -3133,17 +3141,13 @@ static void test_hidp_kdr(void) }, }; - char buffer[FIELD_OFFSET( SP_DEVICE_INTERFACE_DETAIL_DATA_W, DevicePath[MAX_PATH] )]; - SP_DEVICE_INTERFACE_DATA iface = {sizeof(SP_DEVICE_INTERFACE_DATA)}; - SP_DEVICE_INTERFACE_DETAIL_DATA_W *iface_detail = (void *)buffer; - SP_DEVINFO_DATA device = {sizeof(SP_DEVINFO_DATA)}; WCHAR cwd[MAX_PATH], tempdir[MAX_PATH]; PHIDP_PREPARSED_DATA preparsed_data; DWORD i, report_id = 0, polled = 0; + WCHAR device_path[MAX_PATH]; struct hidp_kdr *kdr; char context[64]; LSTATUS status; - HDEVINFO set; HANDLE file; HKEY hkey; BOOL ret; @@ -3183,25 +3187,11 @@ static void test_hidp_kdr(void) if (!hid_device_start()) goto done; - set = SetupDiGetClassDevsW( &GUID_DEVINTERFACE_HID, NULL, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT ); - ok( set != INVALID_HANDLE_VALUE, "failed to get device list, error %#lx\n", GetLastError() ); - for (i = 0; SetupDiEnumDeviceInfo( set, i, &device ); ++i) - { - ret = SetupDiEnumDeviceInterfaces( set, &device, &GUID_DEVINTERFACE_HID, 0, &iface ); - ok( ret, "failed to get interface, error %#lx\n", GetLastError() ); - ok( IsEqualGUID( &iface.InterfaceClassGuid, &GUID_DEVINTERFACE_HID ), "wrong class %s\n", - debugstr_guid( &iface.InterfaceClassGuid ) ); - ok( iface.Flags == SPINT_ACTIVE, "got flags %#lx\n", iface.Flags ); - - iface_detail->cbSize = sizeof(*iface_detail); - ret = SetupDiGetDeviceInterfaceDetailW( set, &iface, iface_detail, sizeof(buffer), NULL, NULL ); - ok( ret, "failed to get interface path, error %#lx\n", GetLastError() ); - - if (wcsstr( iface_detail->DevicePath, L"\\\\?\\hid#winetest#1" )) break; - } - SetupDiDestroyDeviceInfoList( set ); + swprintf( device_path, MAX_PATH, L"\\\\?\\hid#winetest#" ); + ret = find_hid_device_path( device_path ); + ok( ret, "Failed to find HID device matching %s\n", debugstr_w( device_path ) ); - file = CreateFileW( iface_detail->DevicePath, FILE_READ_ACCESS | FILE_WRITE_ACCESS, + file = CreateFileW( device_path, FILE_READ_ACCESS | FILE_WRITE_ACCESS, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL ); ok( file != INVALID_HANDLE_VALUE, "got error %lu\n", GetLastError() );
1
0
0
0
Rémi Bernon : dinput/tests: Remove the HID driver IRP_MJ_POWER handler.
by Alexandre Julliard
21 Mar '22
21 Mar '22
Module: wine Branch: master Commit: acbfddd38c2803d99a6d6fa74caa9776e26a6640 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=acbfddd38c2803d99a6d6fa7…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Mon Mar 21 09:54:13 2022 +0100 dinput/tests: Remove the HID driver IRP_MJ_POWER handler. Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/dinput/tests/driver.c | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/dlls/dinput/tests/driver.c b/dlls/dinput/tests/driver.c index e4101853833..579d82cfeed 100644 --- a/dlls/dinput/tests/driver.c +++ b/dlls/dinput/tests/driver.c @@ -457,18 +457,6 @@ static NTSTATUS WINAPI driver_pnp( DEVICE_OBJECT *device, IRP *irp ) return IoCallDriver( ext->NextDeviceObject, irp ); } -static NTSTATUS WINAPI driver_power( DEVICE_OBJECT *device, IRP *irp ) -{ - HID_DEVICE_EXTENSION *ext = device->DeviceExtension; - - /* We do not expect power IRPs as part of normal operation. */ - ok( 0, "unexpected call\n" ); - - PoStartNextPowerIrp( irp ); - IoSkipCurrentIrpStackLocation( irp ); - return PoCallDriver( ext->NextDeviceObject, irp ); -} - #define check_buffer( a, b ) check_buffer_( __LINE__, a, b ) static void check_buffer_( int line, HID_XFER_PACKET *packet, struct hid_expect *expect ) { @@ -889,7 +877,6 @@ NTSTATUS WINAPI DriverEntry( DRIVER_OBJECT *driver, UNICODE_STRING *registry ) driver->DriverExtension->AddDevice = driver_add_device; driver->DriverUnload = driver_unload; driver->MajorFunction[IRP_MJ_PNP] = driver_pnp; - driver->MajorFunction[IRP_MJ_POWER] = driver_power; driver->MajorFunction[IRP_MJ_DEVICE_CONTROL] = driver_ioctl; driver->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = driver_internal_ioctl; driver->MajorFunction[IRP_MJ_CREATE] = driver_create;
1
0
0
0
Rémi Bernon : dinput/tests: Rename HID driver identifiers and files.
by Alexandre Julliard
21 Mar '22
21 Mar '22
Module: wine Branch: master Commit: f6d2495c508108177770a1d34813bd4d504505de URL:
https://source.winehq.org/git/wine.git/?a=commit;h=f6d2495c508108177770a1d3…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Mon Mar 21 09:54:12 2022 +0100 dinput/tests: Rename HID driver identifiers and files. Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/dinput/tests/Makefile.in | 8 ++--- dlls/dinput/tests/dinput_test.h | 4 +-- dlls/dinput/tests/{driver_hid.c => driver.c} | 0 dlls/dinput/tests/{driver_hid.spec => driver.spec} | 0 dlls/dinput/tests/force_feedback.c | 4 +-- dlls/dinput/tests/hid.c | 38 ++++++++++++++-------- dlls/dinput/tests/hotplug.c | 4 +-- dlls/dinput/tests/joystick8.c | 10 +++--- 8 files changed, 40 insertions(+), 28 deletions(-) diff --git a/dlls/dinput/tests/Makefile.in b/dlls/dinput/tests/Makefile.in index 5ba0e5be4d7..c1b887f8dcb 100644 --- a/dlls/dinput/tests/Makefile.in +++ b/dlls/dinput/tests/Makefile.in @@ -1,15 +1,15 @@ TESTDLL = dinput.dll IMPORTS = dinput dinput8 ole32 version user32 advapi32 hid uuid crypt32 newdev setupapi wintrust winmm -driver_hid_IMPORTS = winecrt0 ntoskrnl hal hidclass -driver_hid_EXTRADLLFLAGS = -nodefaultlibs -nostartfiles -Wl,--subsystem,native +driver_IMPORTS = winecrt0 ntoskrnl hal hidclass +driver_EXTRADLLFLAGS = -nodefaultlibs -nostartfiles -Wl,--subsystem,native SOURCES = \ device.c \ device8.c \ dinput.c \ - driver_hid.c \ - driver_hid.spec \ + driver.c \ + driver.spec \ force_feedback.c \ hid.c \ hotplug.c \ diff --git a/dlls/dinput/tests/dinput_test.h b/dlls/dinput/tests/dinput_test.h index 97eed949a36..c0027c07094 100644 --- a/dlls/dinput/tests/dinput_test.h +++ b/dlls/dinput/tests/dinput_test.h @@ -52,8 +52,8 @@ extern const WCHAR expect_path_end[]; extern HINSTANCE instance; extern BOOL localized; /* object names get translated */ -BOOL pnp_driver_start( const WCHAR *resource ); -void pnp_driver_stop(void); +BOOL hid_device_start(void); +void hid_device_stop(void); void cleanup_registry_keys(void); diff --git a/dlls/dinput/tests/driver_hid.c b/dlls/dinput/tests/driver.c similarity index 100% rename from dlls/dinput/tests/driver_hid.c rename to dlls/dinput/tests/driver.c diff --git a/dlls/dinput/tests/driver_hid.spec b/dlls/dinput/tests/driver.spec similarity index 100% rename from dlls/dinput/tests/driver_hid.spec rename to dlls/dinput/tests/driver.spec diff --git a/dlls/dinput/tests/force_feedback.c b/dlls/dinput/tests/force_feedback.c index ce460147f9d..ca3f6293304 100644 --- a/dlls/dinput/tests/force_feedback.c +++ b/dlls/dinput/tests/force_feedback.c @@ -2999,7 +2999,7 @@ static BOOL test_force_feedback_joystick( DWORD version ) CloseHandle( file ); done: - pnp_driver_stop(); + hid_device_stop(); cleanup_registry_keys(); SetCurrentDirectoryW( cwd ); winetest_pop_context(); @@ -4317,7 +4317,7 @@ static void test_device_managed_effect(void) CloseHandle( file ); done: - pnp_driver_stop(); + hid_device_stop(); cleanup_registry_keys(); SetCurrentDirectoryW( cwd ); winetest_pop_context(); diff --git a/dlls/dinput/tests/hid.c b/dlls/dinput/tests/hid.c index 83635146324..b5683b18850 100644 --- a/dlls/dinput/tests/hid.c +++ b/dlls/dinput/tests/hid.c @@ -415,8 +415,9 @@ static void unload_driver( SC_HANDLE service ) CloseServiceHandle( service ); } -void pnp_driver_stop(void) +static void pnp_driver_stop(void) { + const WCHAR *service_name = L"winetest"; SP_DEVINFO_DATA device = {sizeof(SP_DEVINFO_DATA)}; WCHAR path[MAX_PATH], dest[MAX_PATH], *filepart; SC_HANDLE manager, service; @@ -453,7 +454,7 @@ void pnp_driver_stop(void) manager = OpenSCManagerW( NULL, NULL, SC_MANAGER_CONNECT ); ok( !!manager, "failed to open service manager, error %lu\n", GetLastError() ); - service = OpenServiceW( manager, L"winetest", SERVICE_STOP | DELETE ); + service = OpenServiceW( manager, service_name, SERVICE_STOP | DELETE ); if (service) unload_driver( service ); else ok( GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST, "got error %lu\n", GetLastError() ); @@ -488,11 +489,12 @@ void pnp_driver_stop(void) ok( ret || GetLastError() == ERROR_FILE_NOT_FOUND, "Failed to delete file, error %lu\n", GetLastError() ); } -BOOL pnp_driver_start( const WCHAR *resource ) +static BOOL pnp_driver_start(void) { static const WCHAR hardware_id[] = L"test_hardware_id\0"; SP_DEVINFO_DATA device = {sizeof(SP_DEVINFO_DATA)}; WCHAR path[MAX_PATH], filename[MAX_PATH]; + const WCHAR *service_name = L"winetest"; SC_HANDLE manager, service; const CERT_CONTEXT *cert; int old_mute_threshold; @@ -504,7 +506,7 @@ BOOL pnp_driver_start( const WCHAR *resource ) old_mute_threshold = winetest_mute_threshold; winetest_mute_threshold = 1; - load_resource( resource, filename ); + load_resource( L"driver.dll", filename ); ret = MoveFileExW( filename, L"winetest.sys", MOVEFILE_COPY_ALLOWED | MOVEFILE_REPLACE_EXISTING ); ok( ret, "failed to move file, error %lu\n", GetLastError() ); @@ -570,7 +572,7 @@ BOOL pnp_driver_start( const WCHAR *resource ) manager = OpenSCManagerW( NULL, NULL, SC_MANAGER_CONNECT ); ok( !!manager, "failed to open service manager, error %lu\n", GetLastError() ); - service = OpenServiceW( manager, L"winetest", SERVICE_START ); + service = OpenServiceW( manager, service_name, SERVICE_START ); ok( !!service, "failed to open service, error %lu\n", GetLastError() ); ret = StartServiceW( service, 0, NULL ); @@ -590,6 +592,16 @@ BOOL pnp_driver_start( const WCHAR *resource ) return ret || GetLastError() == ERROR_SERVICE_ALREADY_RUNNING; } +void hid_device_stop(void) +{ + pnp_driver_stop(); +} + +BOOL hid_device_start(void) +{ + return pnp_driver_start(); +} + #define check_hidp_caps( a, b ) check_hidp_caps_( __LINE__, a, b ) static inline void check_hidp_caps_( int line, HIDP_CAPS *caps, const HIDP_CAPS *exp ) { @@ -2809,9 +2821,9 @@ static void test_hid_driver( DWORD report_id, DWORD polled ) status = RegSetValueExW( hkey, L"Context", 0, REG_BINARY, (void *)context, sizeof(context) ); ok( !status, "RegSetValueExW returned %#lx\n", status ); - if (pnp_driver_start( L"driver_hid.dll" )) test_hid_device( report_id, polled, &caps ); + if (hid_device_start()) test_hid_device( report_id, polled, &caps ); + hid_device_stop(); - pnp_driver_stop(); SetCurrentDirectoryW( cwd ); } @@ -3169,7 +3181,7 @@ static void test_hidp_kdr(void) status = RegSetValueExW( hkey, L"Context", 0, REG_BINARY, (void *)context, sizeof(context) ); ok( !status, "RegSetValueExW returned %#lx\n", status ); - if (!pnp_driver_start( L"driver_hid.dll" )) goto done; + if (!hid_device_start()) goto done; set = SetupDiGetClassDevsW( &GUID_DEVINTERFACE_HID, NULL, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT ); ok( set != INVALID_HANDLE_VALUE, "failed to get device list, error %#lx\n", GetLastError() ); @@ -3286,7 +3298,7 @@ static void test_hidp_kdr(void) CloseHandle( file ); done: - pnp_driver_stop(); + hid_device_stop(); SetCurrentDirectoryW( cwd ); } @@ -3360,7 +3372,7 @@ BOOL dinput_driver_start_( const char *file, int line, const BYTE *desc_buf, ULO status = RegSetValueExW( hkey, L"Context", 0, REG_BINARY, (void *)context, sizeof(context) ); ok_(file, line)( !status, "RegSetValueExW returned %#lx\n", status ); - return pnp_driver_start( L"driver_hid.dll" ); + return hid_device_start(); } BOOL dinput_test_init_( const char *file, int line ) @@ -3395,7 +3407,7 @@ BOOL dinput_test_init_( const char *file, int line ) FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, 0, NULL ); ok( okfile != INVALID_HANDLE_VALUE, "failed to create file, error %lu\n", GetLastError() ); - subtest( "driver_hid" ); + subtest( "driver" ); return TRUE; } @@ -3555,9 +3567,9 @@ DWORD WINAPI dinput_test_device_thread( void *stop_event ) status = RegSetValueExW( hkey, L"Context", 0, REG_BINARY, (void *)context, sizeof(context) ); ok( !status, "RegSetValueExW returned %#lx\n", status ); - pnp_driver_start( L"driver_hid.dll" ); + hid_device_start(); WaitForSingleObject( stop_event, INFINITE ); - pnp_driver_stop(); + hid_device_stop(); SetCurrentDirectoryW( cwd ); diff --git a/dlls/dinput/tests/hotplug.c b/dlls/dinput/tests/hotplug.c index 3580964e187..e212f874be3 100644 --- a/dlls/dinput/tests/hotplug.c +++ b/dlls/dinput/tests/hotplug.c @@ -185,7 +185,7 @@ static BOOL test_input_lost( DWORD version ) ok( hr == DI_OK, "GetDeviceData returned %#lx\n", hr ); ok( count == 0, "got %lu expected 0\n", count ); - pnp_driver_stop(); + hid_device_stop(); hr = IDirectInputDevice8_GetDeviceState( device, sizeof(state), &state ); ok( hr == DIERR_INPUTLOST, "GetDeviceState returned %#lx\n", hr ); @@ -218,7 +218,7 @@ static BOOL test_input_lost( DWORD version ) ok( ref == 0, "Release returned %ld\n", ref ); done: - pnp_driver_stop(); + hid_device_stop(); cleanup_registry_keys(); SetCurrentDirectoryW( cwd ); diff --git a/dlls/dinput/tests/joystick8.c b/dlls/dinput/tests/joystick8.c index c4cfceeee3e..ca7cc9a1a32 100644 --- a/dlls/dinput/tests/joystick8.c +++ b/dlls/dinput/tests/joystick8.c @@ -2084,7 +2084,7 @@ static void test_simple_joystick( DWORD version ) CloseHandle( file ); done: - pnp_driver_stop(); + hid_device_stop(); cleanup_registry_keys(); SetCurrentDirectoryW( cwd ); winetest_pop_context(); @@ -2616,7 +2616,7 @@ static BOOL test_device_types( DWORD version ) ok( ref == 0, "Release returned %ld\n", ref ); done: - pnp_driver_stop(); + hid_device_stop(); cleanup_registry_keys(); SetCurrentDirectoryW( cwd ); winetest_pop_context(); @@ -2842,7 +2842,7 @@ static void test_driving_wheel_axes(void) ok( ref == 0, "Release returned %ld\n", ref ); done: - pnp_driver_stop(); + hid_device_stop(); cleanup_registry_keys(); SetCurrentDirectoryW( cwd ); winetest_pop_context(); @@ -3200,7 +3200,7 @@ static BOOL test_winmm_joystick(void) CloseHandle( file ); done: - pnp_driver_stop(); + hid_device_stop(); cleanup_registry_keys(); SetCurrentDirectoryW( cwd ); @@ -3395,7 +3395,7 @@ static void test_windows_gaming_input(void) IRawGameControllerStatics_Release( controller_statics ); done: - pnp_driver_stop(); + hid_device_stop(); cleanup_registry_keys(); SetCurrentDirectoryW( cwd ); }
1
0
0
0
Rémi Bernon : dinput/tests: Add more debug traces to the HID driver.
by Alexandre Julliard
21 Mar '22
21 Mar '22
Module: wine Branch: master Commit: 4c336655c9f6c8690807192b1a5ea83a6e36bdef URL:
https://source.winehq.org/git/wine.git/?a=commit;h=4c336655c9f6c8690807192b…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Mon Mar 21 09:54:11 2022 +0100 dinput/tests: Add more debug traces to the HID driver. Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/dinput/tests/driver_hid.c | 27 +++++++++++---- dlls/dinput/tests/driver_hid.h | 75 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+), 7 deletions(-) diff --git a/dlls/dinput/tests/driver_hid.c b/dlls/dinput/tests/driver_hid.c index 99aa9bd688c..e4101853833 100644 --- a/dlls/dinput/tests/driver_hid.c +++ b/dlls/dinput/tests/driver_hid.c @@ -411,11 +411,12 @@ static NTSTATUS WINAPI driver_pnp( DEVICE_OBJECT *device, IRP *irp ) IO_STACK_LOCATION *stack = IoGetCurrentIrpStackLocation( irp ); HID_DEVICE_EXTENSION *ext = device->DeviceExtension; struct hid_device *impl = ext->MiniDeviceExtension; + ULONG code = stack->MinorFunction; KIRQL irql; - if (winetest_debug > 1) trace( "pnp %#x\n", stack->MinorFunction ); + if (winetest_debug > 1) trace( "%s: device %p, code %#lx %s\n", __func__, device, code, debugstr_pnp(code) ); - switch (stack->MinorFunction) + switch (code) { case IRP_MN_START_DEVICE: ++got_start_device; @@ -502,7 +503,7 @@ static NTSTATUS WINAPI driver_internal_ioctl( DEVICE_OBJECT *device, IRP *irp ) KIRQL irql; LONG index; - if (winetest_debug > 1) trace( "ioctl %#lx\n", code ); + if (winetest_debug > 1) trace( "%s: device %p, code %#lx %s\n", __func__, device, code, debugstr_ioctl(code) ); ok( got_start_device, "expected IRP_MN_START_DEVICE before any ioctls\n" ); @@ -725,6 +726,8 @@ static NTSTATUS WINAPI driver_ioctl( DEVICE_OBJECT *device, IRP *irp ) ULONG code = stack->Parameters.DeviceIoControl.IoControlCode; KIRQL irql; + if (winetest_debug > 1) trace( "%s: device %p, code %#lx %s\n", __func__, device, code, debugstr_ioctl(code) ); + switch (code) { case IOCTL_WINETEST_HID_SET_EXPECT: @@ -752,27 +755,32 @@ static NTSTATUS WINAPI driver_ioctl( DEVICE_OBJECT *device, IRP *irp ) return hidclass_driver_ioctl( device, irp ); } -static NTSTATUS WINAPI driver_add_device( DRIVER_OBJECT *driver, DEVICE_OBJECT *fdo ) +static NTSTATUS WINAPI driver_add_device( DRIVER_OBJECT *driver, DEVICE_OBJECT *device ) { - HID_DEVICE_EXTENSION *ext = fdo->DeviceExtension; + HID_DEVICE_EXTENSION *ext = device->DeviceExtension; NTSTATUS ret; + if (winetest_debug > 1) trace( "%s: driver %p, device %p\n", __func__, driver, device ); + /* We should be given the FDO, not the PDO. */ ok( !!ext->PhysicalDeviceObject, "expected non-NULL pdo\n" ); ok( ext->NextDeviceObject == ext->PhysicalDeviceObject, "got pdo %p, next %p\n", ext->PhysicalDeviceObject, ext->NextDeviceObject ); todo_wine - ok( ext->NextDeviceObject->AttachedDevice == fdo, "wrong attached device\n" ); + ok( ext->NextDeviceObject->AttachedDevice == device, "wrong attached device\n" ); ret = IoRegisterDeviceInterface( ext->PhysicalDeviceObject, &control_class, NULL, &control_symlink ); ok( !ret, "got %#lx\n", ret ); - fdo->Flags &= ~DO_DEVICE_INITIALIZING; + if (winetest_debug > 1) trace( "Created HID FDO %p for Bus PDO %p\n", device, ext->PhysicalDeviceObject ); + + device->Flags &= ~DO_DEVICE_INITIALIZING; return STATUS_SUCCESS; } static NTSTATUS WINAPI driver_create( DEVICE_OBJECT *device, IRP *irp ) { + if (winetest_debug > 1) trace( "%s: device %p\n", __func__, device ); ok( 0, "unexpected call\n" ); irp->IoStatus.Status = STATUS_SUCCESS; IoCompleteRequest( irp, IO_NO_INCREMENT ); @@ -781,6 +789,7 @@ static NTSTATUS WINAPI driver_create( DEVICE_OBJECT *device, IRP *irp ) static NTSTATUS WINAPI driver_close( DEVICE_OBJECT *device, IRP *irp ) { + if (winetest_debug > 1) trace( "%s: device %p\n", __func__, device ); ok( 0, "unexpected call\n" ); irp->IoStatus.Status = STATUS_SUCCESS; IoCompleteRequest( irp, IO_NO_INCREMENT ); @@ -789,6 +798,7 @@ static NTSTATUS WINAPI driver_close( DEVICE_OBJECT *device, IRP *irp ) static void WINAPI driver_unload( DRIVER_OBJECT *driver ) { + if (winetest_debug > 1) trace( "%s: driver %p\n", __func__, driver ); input_queue_cleanup( &input_queue ); expect_queue_cleanup( &expect_queue ); winetest_cleanup(); @@ -812,6 +822,7 @@ NTSTATUS WINAPI DriverEntry( DRIVER_OBJECT *driver, UNICODE_STRING *registry ) DWORD size; if ((ret = winetest_init())) return ret; + if (winetest_debug > 1) trace( "%s: driver %p\n", __func__, driver ); InitializeObjectAttributes( &attr, registry, 0, NULL, NULL ); ret = ZwOpenKey( &hkey, KEY_ALL_ACCESS, &attr ); @@ -833,6 +844,8 @@ NTSTATUS WINAPI DriverEntry( DRIVER_OBJECT *driver, UNICODE_STRING *registry ) ok( !ret, "ZwQueryValueKey returned %#lx\n", ret ); memcpy( &polled, buffer + info_size, size - info_size ); params.DevicesArePolled = polled; + /* polled mode calls this in a state where printing anything locks the system up */ + if (polled) winetest_debug = 0; RtlInitUnicodeString( &name_str, L"Descriptor" ); size = info_size + sizeof(report_descriptor_buf); diff --git a/dlls/dinput/tests/driver_hid.h b/dlls/dinput/tests/driver_hid.h index 089d12b70fc..80073a6ae3f 100644 --- a/dlls/dinput/tests/driver_hid.h +++ b/dlls/dinput/tests/driver_hid.h @@ -31,9 +31,11 @@ #define WIN32_NO_STATUS #include "windef.h" #include "winbase.h" +#include "winioctl.h" #include "winternl.h" #include "ddk/wdm.h" +#include "ddk/hidclass.h" DEFINE_GUID(control_class,0xdeadbeef,0x29ef,0x4538,0xa5,0xfd,0xb6,0x95,0x73,0xa3,0x62,0xc0); @@ -65,6 +67,79 @@ struct winetest_shared_data LONG todo_failures; }; +static inline const char *debugstr_pnp( ULONG code ) +{ + switch (code) + { + case IRP_MN_START_DEVICE: return "IRP_MN_START_DEVICE"; + case IRP_MN_QUERY_REMOVE_DEVICE: return "IRP_MN_QUERY_REMOVE_DEVICE"; + case IRP_MN_REMOVE_DEVICE: return "IRP_MN_REMOVE_DEVICE"; + case IRP_MN_CANCEL_REMOVE_DEVICE: return "IRP_MN_CANCEL_REMOVE_DEVICE"; + case IRP_MN_STOP_DEVICE: return "IRP_MN_STOP_DEVICE"; + case IRP_MN_QUERY_STOP_DEVICE: return "IRP_MN_QUERY_STOP_DEVICE"; + case IRP_MN_CANCEL_STOP_DEVICE: return "IRP_MN_CANCEL_STOP_DEVICE"; + case IRP_MN_QUERY_DEVICE_RELATIONS: return "IRP_MN_QUERY_DEVICE_RELATIONS"; + case IRP_MN_QUERY_INTERFACE: return "IRP_MN_QUERY_INTERFACE"; + case IRP_MN_QUERY_CAPABILITIES: return "IRP_MN_QUERY_CAPABILITIES"; + case IRP_MN_QUERY_RESOURCES: return "IRP_MN_QUERY_RESOURCES"; + case IRP_MN_QUERY_RESOURCE_REQUIREMENTS: return "IRP_MN_QUERY_RESOURCE_REQUIREMENTS"; + case IRP_MN_QUERY_DEVICE_TEXT: return "IRP_MN_QUERY_DEVICE_TEXT"; + case IRP_MN_FILTER_RESOURCE_REQUIREMENTS: return "IRP_MN_FILTER_RESOURCE_REQUIREMENTS"; + case IRP_MN_READ_CONFIG: return "IRP_MN_READ_CONFIG"; + case IRP_MN_WRITE_CONFIG: return "IRP_MN_WRITE_CONFIG"; + case IRP_MN_EJECT: return "IRP_MN_EJECT"; + case IRP_MN_SET_LOCK: return "IRP_MN_SET_LOCK"; + case IRP_MN_QUERY_ID: return "IRP_MN_QUERY_ID"; + case IRP_MN_QUERY_PNP_DEVICE_STATE: return "IRP_MN_QUERY_PNP_DEVICE_STATE"; + case IRP_MN_QUERY_BUS_INFORMATION: return "IRP_MN_QUERY_BUS_INFORMATION"; + case IRP_MN_DEVICE_USAGE_NOTIFICATION: return "IRP_MN_DEVICE_USAGE_NOTIFICATION"; + case IRP_MN_SURPRISE_REMOVAL: return "IRP_MN_SURPRISE_REMOVAL"; + case IRP_MN_QUERY_LEGACY_BUS_INFORMATION: return "IRP_MN_QUERY_LEGACY_BUS_INFORMATION"; + default: return "unknown"; + } +} + +static inline const char *debugstr_ioctl( ULONG code ) +{ + switch (code) + { + case HID_CTL_CODE(0): return "IOCTL_HID_GET_DEVICE_DESCRIPTOR"; + case HID_CTL_CODE(1): return "IOCTL_HID_GET_REPORT_DESCRIPTOR"; + case HID_CTL_CODE(2): return "IOCTL_HID_READ_REPORT"; + case HID_CTL_CODE(3): return "IOCTL_HID_WRITE_REPORT"; + case HID_CTL_CODE(4): return "IOCTL_HID_GET_STRING"; + case HID_CTL_CODE(7): return "IOCTL_HID_ACTIVATE_DEVICE"; + case HID_CTL_CODE(8): return "IOCTL_HID_DEACTIVATE_DEVICE"; + case HID_CTL_CODE(9): return "IOCTL_HID_GET_DEVICE_ATTRIBUTES"; + case HID_CTL_CODE(10): return "IOCTL_HID_SEND_IDLE_NOTIFICATION_REQUEST"; + case HID_OUT_CTL_CODE(102): return "IOCTL_GET_PHYSICAL_DESCRIPTOR"; + case HID_CTL_CODE(101): return "IOCTL_HID_FLUSH_QUEUE"; + case HID_CTL_CODE(100): return "IOCTL_HID_GET_COLLECTION_DESCRIPTOR"; + case HID_BUFFER_CTL_CODE(106): return "IOCTL_HID_GET_COLLECTION_INFORMATION"; + case HID_OUT_CTL_CODE(100): return "IOCTL_HID_GET_FEATURE"; + case HID_OUT_CTL_CODE(103): return "IOCTL_HID_GET_HARDWARE_ID"; + case HID_OUT_CTL_CODE(120): return "IOCTL_HID_GET_INDEXED_STRING"; + case HID_OUT_CTL_CODE(104): return "IOCTL_HID_GET_INPUT_REPORT"; + case HID_OUT_CTL_CODE(110): return "IOCTL_HID_GET_MANUFACTURER_STRING"; + case HID_BUFFER_CTL_CODE(104): return "IOCTL_GET_NUM_DEVICE_INPUT_BUFFERS"; + case HID_BUFFER_CTL_CODE(102): return "IOCTL_HID_GET_POLL_FREQUENCY_MSEC"; + case HID_OUT_CTL_CODE(111): return "IOCTL_HID_GET_PRODUCT_STRING"; + case HID_OUT_CTL_CODE(112): return "IOCTL_HID_GET_SERIALNUMBER_STRING"; + case HID_IN_CTL_CODE(100): return "IOCTL_HID_SET_FEATURE"; + case HID_BUFFER_CTL_CODE(105): return "IOCTL_SET_NUM_DEVICE_INPUT_BUFFERS"; + case HID_IN_CTL_CODE(101): return "IOCTL_HID_SET_OUTPUT_REPORT"; + case HID_BUFFER_CTL_CODE(103): return "IOCTL_HID_SET_POLL_FREQUENCY_MSEC"; + case HID_BUFFER_CTL_CODE(100): return "IOCTL_HID_GET_DRIVER_CONFIG"; + case HID_BUFFER_CTL_CODE(101): return "IOCTL_HID_SET_DRIVER_CONFIG"; + case HID_OUT_CTL_CODE(121): return "IOCTL_HID_GET_MS_GENRE_DESCRIPTOR"; + case IOCTL_WINETEST_HID_SET_EXPECT: return "IOCTL_WINETEST_HID_SET_EXPECT"; + case IOCTL_WINETEST_HID_WAIT_EXPECT: return "IOCTL_WINETEST_HID_WAIT_EXPECT"; + case IOCTL_WINETEST_HID_SEND_INPUT: return "IOCTL_WINETEST_HID_SEND_INPUT"; + case IOCTL_WINETEST_HID_SET_CONTEXT: return "IOCTL_WINETEST_HID_SET_CONTEXT"; + default: return "unknown"; + } +} + #ifndef __WINE_WINE_TEST_H #if !defined( __WINE_USE_MSVCRT ) || defined( __MINGW32__ )
1
0
0
0
Jinoh Kang : riched20: Set REOBJECT's cp correctly in IRichEditOle::GetObject.
by Alexandre Julliard
21 Mar '22
21 Mar '22
Module: wine Branch: master Commit: 194ba06c403fd72fbfb95048385c9ca4838af169 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=194ba06c403fd72fbfb95048…
Author: Jinoh Kang <jinoh.kang.kr(a)gmail.com> Date: Mon Mar 21 04:38:42 2022 +0900 riched20: Set REOBJECT's cp correctly in IRichEditOle::GetObject. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=52705
Signed-off-by: Jinoh Kang <jinoh.kang.kr(a)gmail.com> Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/riched20/richole.c | 1 + dlls/riched20/tests/richole.c | 41 +++++++++++++++++++++-------------------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/dlls/riched20/richole.c b/dlls/riched20/richole.c index 74a25a96830..a23f4c82730 100644 --- a/dlls/riched20/richole.c +++ b/dlls/riched20/richole.c @@ -1320,6 +1320,7 @@ IRichEditOle_fnGetObject(IRichEditOle *iface, LONG iob, } } ME_CopyReObject(lpreobject, &reobj->obj, dwFlags); + lpreobject->cp = run_char_ofs( reobj->run, 0 ); return S_OK; } diff --git a/dlls/riched20/tests/richole.c b/dlls/riched20/tests/richole.c index 08c1ce8ced4..24284a24484 100644 --- a/dlls/riched20/tests/richole.c +++ b/dlls/riched20/tests/richole.c @@ -3214,9 +3214,9 @@ static void fill_reobject_struct(REOBJECT *reobj, LONG cp, LPOLEOBJECT poleobj, reobj->dwUser = user; } -#define CHECK_REOBJECT_STRUCT(reole,index,flags,cp,poleobj,pstg,polesite,user) \ - _check_reobject_struct(reole, index, flags, cp, poleobj, pstg, polesite, user, __LINE__) -static void _check_reobject_struct(IRichEditOle *reole, LONG index, DWORD flags, LONG cp, +#define CHECK_REOBJECT_STRUCT(reole,index,flags,cp,cp_check,poleobj,pstg,polesite,user) \ + _check_reobject_struct(reole, index, flags, cp, cp_check, poleobj, pstg, polesite, user, __LINE__) +static void _check_reobject_struct(IRichEditOle *reole, LONG index, DWORD flags, LONG cp, LONG cp_check, LPOLEOBJECT poleobj, LPSTORAGE pstg, LPOLECLIENTSITE polesite, DWORD user, int line) { REOBJECT reobj; @@ -3226,6 +3226,7 @@ static void _check_reobject_struct(IRichEditOle *reole, LONG index, DWORD flags, reobj.cp = cp; hr = IRichEditOle_GetObject(reole, index, &reobj, flags); ok(hr == S_OK, "IRichEditOle_GetObject failed: %#lx.\n", hr); + ok_(__FILE__,line)(reobj.cp == cp_check, "expected cp = %ld, got %ld.\n", cp_check, reobj.cp); ok_(__FILE__,line)(reobj.poleobj == poleobj, "got wrong object interface.\n"); ok_(__FILE__,line)(reobj.pstg == pstg, "got wrong storage interface.\n"); ok_(__FILE__,line)(reobj.polesite == polesite, "got wrong site interface.\n"); @@ -3294,9 +3295,9 @@ static void test_InsertObject(void) ok(count == 3, "got wrong object count: %ld\n", count); /* tests below show that order of rebject (from 0 to 2) is: reo1,reo3,reo2 */ - CHECK_REOBJECT_STRUCT(reole, 0, REO_GETOBJ_ALL_INTERFACES, 0, NULL, NULL, reo1.polesite, 1); - CHECK_REOBJECT_STRUCT(reole, 1, REO_GETOBJ_ALL_INTERFACES, 0, NULL, NULL, reo3.polesite, 3); - CHECK_REOBJECT_STRUCT(reole, 2, REO_GETOBJ_ALL_INTERFACES, 0, NULL, NULL, reo2.polesite, 2); + CHECK_REOBJECT_STRUCT(reole, 0, REO_GETOBJ_ALL_INTERFACES, 0, 0, NULL, NULL, reo1.polesite, 1); + CHECK_REOBJECT_STRUCT(reole, 1, REO_GETOBJ_ALL_INTERFACES, 0, 1, NULL, NULL, reo3.polesite, 3); + CHECK_REOBJECT_STRUCT(reole, 2, REO_GETOBJ_ALL_INTERFACES, 0, 2, NULL, NULL, reo2.polesite, 2); hr = IRichEditOle_GetObject(reole, 2, NULL, REO_GETOBJ_ALL_INTERFACES); ok(hr == E_INVALIDARG, "IRichEditOle_GetObject should fail: 0x%08lx\n", hr); @@ -3305,8 +3306,8 @@ static void test_InsertObject(void) hr = IRichEditOle_GetObject(reole, 2, &received_reo, REO_GETOBJ_ALL_INTERFACES); ok(hr == E_INVALIDARG, "IRichEditOle_GetObject should fail: 0x%08lx\n", hr); - CHECK_REOBJECT_STRUCT(reole, 2, REO_GETOBJ_PSTG, 0, NULL, NULL, NULL, 2); - CHECK_REOBJECT_STRUCT(reole, 2, REO_GETOBJ_POLESITE, 0, NULL, NULL, reo2.polesite, 2); + CHECK_REOBJECT_STRUCT(reole, 2, REO_GETOBJ_PSTG, 0, 2, NULL, NULL, NULL, 2); + CHECK_REOBJECT_STRUCT(reole, 2, REO_GETOBJ_POLESITE, 0, 2, NULL, NULL, reo2.polesite, 2); hr = IRichEditOle_GetObject(reole, 3, &received_reo, REO_GETOBJ_POLESITE); ok(hr == E_INVALIDARG, "IRichEditOle_GetObject should fail: 0x%08lx\n", hr); @@ -3327,9 +3328,9 @@ static void test_InsertObject(void) ok(hr == S_OK, "IRichEditOle_GetObject failed: 0x%08lx\n", hr); ok(received_reo.polesite == NULL, "Got wrong site interface.\n"); - CHECK_REOBJECT_STRUCT(reole, REO_IOB_USE_CP, REO_GETOBJ_ALL_INTERFACES, 0, NULL, NULL, reo1.polesite, 1); - CHECK_REOBJECT_STRUCT(reole, REO_IOB_USE_CP, REO_GETOBJ_ALL_INTERFACES, 1, NULL, NULL, reo3.polesite, 3); - CHECK_REOBJECT_STRUCT(reole, REO_IOB_USE_CP, REO_GETOBJ_ALL_INTERFACES, 2, NULL, NULL, reo2.polesite, 2); + CHECK_REOBJECT_STRUCT(reole, REO_IOB_USE_CP, REO_GETOBJ_ALL_INTERFACES, 0, 0, NULL, NULL, reo1.polesite, 1); + CHECK_REOBJECT_STRUCT(reole, REO_IOB_USE_CP, REO_GETOBJ_ALL_INTERFACES, 1, 1, NULL, NULL, reo3.polesite, 3); + CHECK_REOBJECT_STRUCT(reole, REO_IOB_USE_CP, REO_GETOBJ_ALL_INTERFACES, 2, 2, NULL, NULL, reo2.polesite, 2); received_reo.cbStruct = sizeof(received_reo); received_reo.polesite = (IOleClientSite *)0xdeadbeef; @@ -3341,25 +3342,25 @@ static void test_InsertObject(void) ok(received_reo.dwUser == 4, "Got wrong user-defined value: %ld.\n", received_reo.dwUser); SendMessageA(hwnd, EM_SETSEL, 0, 1); - CHECK_REOBJECT_STRUCT(reole, REO_IOB_SELECTION, REO_GETOBJ_ALL_INTERFACES, 0, NULL, NULL, reo1.polesite, 1); + CHECK_REOBJECT_STRUCT(reole, REO_IOB_SELECTION, REO_GETOBJ_ALL_INTERFACES, 0, 0, NULL, NULL, reo1.polesite, 1); SendMessageA(hwnd, EM_SETSEL, 1, 2); - CHECK_REOBJECT_STRUCT(reole, REO_IOB_SELECTION, REO_GETOBJ_ALL_INTERFACES, 0, NULL, NULL, reo3.polesite, 3); + CHECK_REOBJECT_STRUCT(reole, REO_IOB_SELECTION, REO_GETOBJ_ALL_INTERFACES, 0, 1, NULL, NULL, reo3.polesite, 3); SendMessageA(hwnd, EM_SETSEL, 2, 3); - CHECK_REOBJECT_STRUCT(reole, REO_IOB_SELECTION, REO_GETOBJ_ALL_INTERFACES, 0, NULL, NULL, reo2.polesite, 2); + CHECK_REOBJECT_STRUCT(reole, REO_IOB_SELECTION, REO_GETOBJ_ALL_INTERFACES, 0, 2, NULL, NULL, reo2.polesite, 2); SendMessageA(hwnd, EM_SETSEL, 0, 2); - CHECK_REOBJECT_STRUCT(reole, REO_IOB_SELECTION, REO_GETOBJ_ALL_INTERFACES, 0, NULL, NULL, reo1.polesite, 1); + CHECK_REOBJECT_STRUCT(reole, REO_IOB_SELECTION, REO_GETOBJ_ALL_INTERFACES, 0, 0, NULL, NULL, reo1.polesite, 1); SendMessageA(hwnd, EM_SETSEL, 1, 3); - CHECK_REOBJECT_STRUCT(reole, REO_IOB_SELECTION, REO_GETOBJ_ALL_INTERFACES, 0, NULL, NULL, reo3.polesite, 3); + CHECK_REOBJECT_STRUCT(reole, REO_IOB_SELECTION, REO_GETOBJ_ALL_INTERFACES, 0, 1, NULL, NULL, reo3.polesite, 3); SendMessageA(hwnd, EM_SETSEL, 2, 0); - CHECK_REOBJECT_STRUCT(reole, REO_IOB_SELECTION, REO_GETOBJ_ALL_INTERFACES, 0, NULL, NULL, reo1.polesite, 1); + CHECK_REOBJECT_STRUCT(reole, REO_IOB_SELECTION, REO_GETOBJ_ALL_INTERFACES, 0, 0, NULL, NULL, reo1.polesite, 1); SendMessageA(hwnd, EM_SETSEL, 0, 6); - CHECK_REOBJECT_STRUCT(reole, REO_IOB_SELECTION, REO_GETOBJ_ALL_INTERFACES, 0, NULL, NULL, reo1.polesite, 1); + CHECK_REOBJECT_STRUCT(reole, REO_IOB_SELECTION, REO_GETOBJ_ALL_INTERFACES, 0, 0, NULL, NULL, reo1.polesite, 1); SendMessageA(hwnd, EM_SETSEL, 4, 5); received_reo.cbStruct = sizeof(received_reo); @@ -3380,14 +3381,14 @@ static void test_InsertObject(void) SendMessageW(hwnd, EM_SETSEL, 3, 4); result = SendMessageW(hwnd, EM_SELECTIONTYPE, 0, 0); ok(result == SEL_OBJECT, "Got selection type: %lx.\n", result); - CHECK_REOBJECT_STRUCT(reole, REO_IOB_SELECTION, REO_GETOBJ_ALL_INTERFACES, 1, NULL, NULL, reo1.polesite, 1); + CHECK_REOBJECT_STRUCT(reole, REO_IOB_SELECTION, REO_GETOBJ_ALL_INTERFACES, 1, 3, NULL, NULL, reo1.polesite, 1); SendMessageW(hwnd, EM_SETSEL, 2, 4); result = SendMessageW(hwnd, EM_SELECTIONTYPE, 0, 0); ok(result == (SEL_TEXT | SEL_OBJECT), "Got selection type: %lx.\n", result); SendMessageW(hwnd, EM_SETSEL, 5, 6); - CHECK_REOBJECT_STRUCT(reole, REO_IOB_SELECTION, REO_GETOBJ_ALL_INTERFACES, 1, NULL, NULL, reo2.polesite, 2); + CHECK_REOBJECT_STRUCT(reole, REO_IOB_SELECTION, REO_GETOBJ_ALL_INTERFACES, 1, 5, NULL, NULL, reo2.polesite, 2); expected_string = L"abc\xfffc""d\xfffc""efg"; gettextex.cb = sizeof(buffer);
1
0
0
0
← Newer
1
...
35
36
37
38
39
40
41
...
114
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
Results per page:
10
25
50
100
200