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
July 2017
----- 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
632 discussions
Start a n
N
ew thread
Alexandre Julliard : krnl386: Add a simple wrapper for CommonUnimpStub instead of saving/ restoring all registers.
by Alexandre Julliard
24 Jul '17
24 Jul '17
Module: wine Branch: master Commit: f91b4bd4104731018fa33f851d5536888b3b349d URL:
http://source.winehq.org/git/wine.git/?a=commit;h=f91b4bd4104731018fa33f851…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Mon Jul 24 11:19:32 2017 +0200 krnl386: Add a simple wrapper for CommonUnimpStub instead of saving/restoring all registers. Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/kernel32/kernel32.spec | 2 +- dlls/krnl386.exe16/krnl386.exe16.spec | 2 +- dlls/krnl386.exe16/thunk.c | 37 ++++++++++++++++++++++++----------- 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index 15cb998..f67141d 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -24,7 +24,7 @@ 14 stdcall -noname -i386 -private k32LoadStringA(long long ptr long) krnl386.exe16.k32LoadStringA 15 varargs -noname -i386 -private k32wsprintfA(str str) krnl386.exe16.k32wsprintfA 16 stdcall -noname -i386 -private k32wvsprintfA(ptr str ptr) krnl386.exe16.k32wvsprintfA - 17 stdcall -noname -i386 -private -register CommonUnimpStub() krnl386.exe16.CommonUnimpStub + 17 stdcall -noname -i386 -private -norelay CommonUnimpStub() krnl386.exe16.CommonUnimpStub 18 stdcall -noname -i386 -private GetProcessDword(long long) krnl386.exe16.GetProcessDword 19 stub -noname -i386 ThunkTheTemplateHandle 20 stdcall -noname -i386 -private DosFileHandleToWin32Handle(long) krnl386.exe16.DosFileHandleToWin32Handle diff --git a/dlls/krnl386.exe16/krnl386.exe16.spec b/dlls/krnl386.exe16/krnl386.exe16.spec index 66d33dd..09e2cf6 100644 --- a/dlls/krnl386.exe16/krnl386.exe16.spec +++ b/dlls/krnl386.exe16/krnl386.exe16.spec @@ -565,7 +565,7 @@ @ stdcall -arch=win32 k32LoadStringA(long long ptr long) @ varargs -arch=win32 k32wsprintfA(str str) @ stdcall -arch=win32 k32wvsprintfA(ptr str ptr) -@ stdcall -arch=win32 -register CommonUnimpStub() +@ stdcall -arch=win32 -norelay CommonUnimpStub() @ stdcall -arch=win32 GetProcessDword(long long) @ stdcall -arch=win32 DosFileHandleToWin32Handle(long) @ stdcall -arch=win32 Win32HandleToDosFileHandle(long) diff --git a/dlls/krnl386.exe16/thunk.c b/dlls/krnl386.exe16/thunk.c index 8940605..9126125 100644 --- a/dlls/krnl386.exe16/thunk.c +++ b/dlls/krnl386.exe16/thunk.c @@ -2123,22 +2123,37 @@ LPVOID WINAPI GetPK16SysVar(void) /********************************************************************** * CommonUnimpStub (KERNEL32.17) */ -void WINAPI __regs_CommonUnimpStub( CONTEXT *context ) +int WINAPI __regs_CommonUnimpStub( const char *name, int type ) { - FIXME("generic stub: %s\n", ((LPSTR)context->Eax ? (LPSTR)context->Eax : "?")); + FIXME("generic stub %s\n", debugstr_a(name)); - switch ((context->Ecx >> 4) & 0x0f) + switch (type) { - case 15: context->Eax = -1; break; - case 14: context->Eax = 0x78; break; - case 13: context->Eax = 0x32; break; - case 1: context->Eax = 1; break; - default: context->Eax = 0; break; + case 15: return -1; + case 14: return ERROR_CALL_NOT_IMPLEMENTED; + case 13: return ERROR_NOT_SUPPORTED; + case 1: return 1; + default: return 0; } - - context->Esp += (context->Ecx & 0x0f) * 4; } -DEFINE_REGS_ENTRYPOINT( CommonUnimpStub, 0 ) +__ASM_STDCALL_FUNC( CommonUnimpStub, 0, + "pushl %ecx\n\t" + __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") + "shrl $4,%ecx\n\t" + "andl $0xf,%ecx\n\t" + "pushl %ecx\n\t" + __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") + "pushl %eax\n\t" + __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") + "call " __ASM_NAME("__regs_CommonUnimpStub") __ASM_STDCALL(8) "\n\t" + __ASM_CFI(".cfi_adjust_cfa_offset -8\n\t") + "popl %ecx\n\t" + __ASM_CFI(".cfi_adjust_cfa_offset -4\n\t") + "andl $0xf,%ecx\n\t" + "movl (%esp),%edx\n\t" + "leal (%esp,%ecx,4),%esp\n\t" + "movl %edx,(%esp)\n\t" + "ret" ) /********************************************************************** * HouseCleanLogicallyDeadHandles (KERNEL32.33)
1
0
0
0
Alexandre Julliard : krnl386: Simplify a couple of register functions.
by Alexandre Julliard
24 Jul '17
24 Jul '17
Module: wine Branch: master Commit: 92d5ce3c76f0ae9cb070b39626c3e2f4bcd53243 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=92d5ce3c76f0ae9cb070b3962…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Mon Jul 24 11:15:14 2017 +0200 krnl386: Simplify a couple of register functions. Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/kernel32/kernel32.spec | 6 +++--- dlls/krnl386.exe16/krnl386.exe16.spec | 6 +++--- dlls/krnl386.exe16/thunk.c | 18 +++--------------- 3 files changed, 9 insertions(+), 21 deletions(-) diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index dedbb93..15cb998 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -49,12 +49,12 @@ 39 stdcall -noname -i386 -private -register FreeMappedBuffer() krnl386.exe16.FreeMappedBuffer 40 stdcall -noname -i386 -private -register OT_32ThkLSF() krnl386.exe16.OT_32ThkLSF 41 stdcall -noname -i386 -private ThunkInitLSF(long str long str str) krnl386.exe16.ThunkInitLSF - 42 stdcall -noname -i386 -private -register LogApiThkLSF(str) krnl386.exe16.LogApiThkLSF + 42 stdcall -noname -i386 -private -norelay LogApiThkLSF(str) krnl386.exe16.LogApiThkLSF 43 stdcall -noname -i386 -private ThunkInitLS(long str long str str) krnl386.exe16.ThunkInitLS - 44 stdcall -noname -i386 -private -register LogApiThkSL(str) krnl386.exe16.LogApiThkSL + 44 stdcall -noname -i386 -private -norelay LogApiThkSL(str) krnl386.exe16.LogApiThkSL 45 stdcall -noname -i386 -private -register Common32ThkLS() krnl386.exe16.Common32ThkLS 46 stdcall -noname -i386 -private ThunkInitSL(long str long str str) krnl386.exe16.ThunkInitSL - 47 stdcall -noname -i386 -private -register LogCBThkSL(str) krnl386.exe16.LogCBThkSL + 47 stdcall -noname -i386 -private -norelay LogCBThkSL(str) krnl386.exe16.LogCBThkSL 48 stdcall -noname -i386 -private ReleaseThunkLock(ptr) krnl386.exe16.ReleaseThunkLock 49 stdcall -noname -i386 -private RestoreThunkLock(long) krnl386.exe16.RestoreThunkLock diff --git a/dlls/krnl386.exe16/krnl386.exe16.spec b/dlls/krnl386.exe16/krnl386.exe16.spec index 8d40f0f..66d33dd 100644 --- a/dlls/krnl386.exe16/krnl386.exe16.spec +++ b/dlls/krnl386.exe16/krnl386.exe16.spec @@ -588,12 +588,12 @@ @ stdcall -arch=win32 -register FreeMappedBuffer() @ stdcall -arch=win32 -register OT_32ThkLSF() @ stdcall -arch=win32 ThunkInitLSF(ptr str long str str) -@ stdcall -arch=win32 -register LogApiThkLSF(str) +@ stdcall -arch=win32 -norelay LogApiThkLSF(str) @ stdcall -arch=win32 ThunkInitLS(ptr str long str str) -@ stdcall -arch=win32 -register LogApiThkSL(str) +@ stdcall -arch=win32 -norelay LogApiThkSL(str) @ stdcall -arch=win32 -register Common32ThkLS() @ stdcall -arch=win32 ThunkInitSL(ptr str long str str) -@ stdcall -arch=win32 -register LogCBThkSL(str) +@ stdcall -arch=win32 -norelay LogCBThkSL(str) @ stdcall -arch=win32 ReleaseThunkLock(ptr) @ stdcall -arch=win32 RestoreThunkLock(long) @ stdcall -arch=win32 -register W32S_BackTo32() diff --git a/dlls/krnl386.exe16/thunk.c b/dlls/krnl386.exe16/thunk.c index 9e12d27..8940605 100644 --- a/dlls/krnl386.exe16/thunk.c +++ b/dlls/krnl386.exe16/thunk.c @@ -187,33 +187,21 @@ void WINAPI LogApiThk( LPSTR func ) * * NOTE: needs to preserve all registers! */ -void WINAPI __regs_LogApiThkLSF( LPSTR func, CONTEXT *context ) -{ - TRACE( "%s\n", debugstr_a(func) ); -} -DEFINE_REGS_ENTRYPOINT( LogApiThkLSF, 1 ) +__ASM_STDCALL_FUNC( LogApiThkLSF, 4, "ret $4" ) /*********************************************************************** * LogApiThkSL (KERNEL32.44) * * NOTE: needs to preserve all registers! */ -void WINAPI __regs_LogApiThkSL( LPSTR func, CONTEXT *context ) -{ - TRACE( "%s\n", debugstr_a(func) ); -} -DEFINE_REGS_ENTRYPOINT( LogApiThkSL, 1 ) +__ASM_STDCALL_FUNC( LogApiThkSL, 4, "ret $4" ) /*********************************************************************** * LogCBThkSL (KERNEL32.47) * * NOTE: needs to preserve all registers! */ -void WINAPI __regs_LogCBThkSL( LPSTR func, CONTEXT *context ) -{ - TRACE( "%s\n", debugstr_a(func) ); -} -DEFINE_REGS_ENTRYPOINT( LogCBThkSL, 1 ) +__ASM_STDCALL_FUNC( LogCBThkSL, 4, "ret $4" ) /*********************************************************************** * Generates a FT_Prolog call.
1
0
0
0
Alexandre Julliard : ntdll: Use RtlCaptureContext also in RtlUnwind.
by Alexandre Julliard
24 Jul '17
24 Jul '17
Module: wine Branch: master Commit: dc63fbf98d1af6396533a9af2cfb1eb996a18035 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=dc63fbf98d1af6396533a9af2…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Mon Jul 24 10:59:45 2017 +0200 ntdll: Use RtlCaptureContext also in RtlUnwind. Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- .../api-ms-win-core-rtlsupport-l1-1-0.spec | 2 +- .../api-ms-win-core-rtlsupport-l1-2-0.spec | 2 +- dlls/ntdll/ntdll.spec | 2 +- dlls/ntdll/signal_i386.c | 29 +++++++++++++++++++++- dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 2 +- 5 files changed, 32 insertions(+), 5 deletions(-) diff --git a/dlls/api-ms-win-core-rtlsupport-l1-1-0/api-ms-win-core-rtlsupport-l1-1-0.spec b/dlls/api-ms-win-core-rtlsupport-l1-1-0/api-ms-win-core-rtlsupport-l1-1-0.spec index 2922b1c..428fd06 100644 --- a/dlls/api-ms-win-core-rtlsupport-l1-1-0/api-ms-win-core-rtlsupport-l1-1-0.spec +++ b/dlls/api-ms-win-core-rtlsupport-l1-1-0/api-ms-win-core-rtlsupport-l1-1-0.spec @@ -10,6 +10,6 @@ @ stdcall RtlPcToFileHeader(ptr ptr) ntdll.RtlPcToFileHeader @ stdcall -norelay RtlRaiseException(ptr) ntdll.RtlRaiseException @ stdcall -arch=x86_64 RtlRestoreContext(ptr ptr) ntdll.RtlRestoreContext -@ stdcall -register RtlUnwind(ptr ptr ptr ptr) ntdll.RtlUnwind +@ stdcall -norelay RtlUnwind(ptr ptr ptr ptr) ntdll.RtlUnwind @ stdcall -arch=x86_64 RtlUnwindEx(ptr ptr ptr ptr ptr ptr) ntdll.RtlUnwindEx @ stdcall -arch=x86_64 RtlVirtualUnwind(long long long ptr ptr ptr ptr ptr) ntdll.RtlVirtualUnwind diff --git a/dlls/api-ms-win-core-rtlsupport-l1-2-0/api-ms-win-core-rtlsupport-l1-2-0.spec b/dlls/api-ms-win-core-rtlsupport-l1-2-0/api-ms-win-core-rtlsupport-l1-2-0.spec index 68f2e86..a037b0d 100644 --- a/dlls/api-ms-win-core-rtlsupport-l1-2-0/api-ms-win-core-rtlsupport-l1-2-0.spec +++ b/dlls/api-ms-win-core-rtlsupport-l1-2-0/api-ms-win-core-rtlsupport-l1-2-0.spec @@ -3,4 +3,4 @@ @ stdcall RtlCompareMemory(ptr ptr long) ntdll.RtlCompareMemory @ stdcall RtlPcToFileHeader(ptr ptr) ntdll.RtlPcToFileHeader @ stdcall -norelay RtlRaiseException(ptr) ntdll.RtlRaiseException -@ stdcall -register RtlUnwind(ptr ptr ptr ptr) ntdll.RtlUnwind +@ stdcall -norelay RtlUnwind(ptr ptr ptr ptr) ntdll.RtlUnwind diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec index 141f50d..68d7f22 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -940,7 +940,7 @@ # @ stub RtlUnlockBootStatusData @ stdcall RtlUnlockHeap(long) # @ stub RtlUnlockMemoryStreamRegion -@ stdcall -register RtlUnwind(ptr ptr ptr ptr) +@ stdcall -norelay RtlUnwind(ptr ptr ptr ptr) @ stdcall -arch=x86_64 RtlUnwindEx(ptr ptr ptr ptr ptr ptr) @ stdcall RtlUpcaseUnicodeChar(long) @ stdcall RtlUpcaseUnicodeString(ptr ptr long) diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c index ead1d56..9d7b726 100644 --- a/dlls/ntdll/signal_i386.c +++ b/dlls/ntdll/signal_i386.c @@ -2667,6 +2667,11 @@ void WINAPI __regs_RtlUnwind( EXCEPTION_REGISTRATION_RECORD* pEndFrame, PVOID ta pRecord->ExceptionFlags |= EH_UNWINDING | (pEndFrame ? 0 : EH_EXIT_UNWIND); TRACE( "code=%x flags=%x\n", pRecord->ExceptionCode, pRecord->ExceptionFlags ); + TRACE( "eax=%08x ebx=%08x ecx=%08x edx=%08x esi=%08x edi=%08x\n", + context->Eax, context->Ebx, context->Ecx, context->Edx, context->Esi, context->Edi ); + TRACE( "ebp=%08x esp=%08x eip=%08x cs=%04x ds=%04x fs=%04x gs=%04x flags=%08x\n", + context->Ebp, context->Esp, context->Eip, LOWORD(context->SegCs), LOWORD(context->SegDs), + LOWORD(context->SegFs), LOWORD(context->SegGs), context->EFlags ); /* get chain of exception frames */ frame = NtCurrentTeb()->Tib.ExceptionList; @@ -2697,8 +2702,30 @@ void WINAPI __regs_RtlUnwind( EXCEPTION_REGISTRATION_RECORD* pEndFrame, PVOID ta } frame = __wine_pop_frame( frame ); } + + NtSetContextThread( GetCurrentThread(), context ); } -DEFINE_REGS_ENTRYPOINT( RtlUnwind, 4 ) +__ASM_STDCALL_FUNC( RtlUnwind, 16, + "pushl %ebp\n\t" + __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") + __ASM_CFI(".cfi_rel_offset %ebp,0\n\t") + "movl %esp,%ebp\n\t" + __ASM_CFI(".cfi_def_cfa_register %ebp\n\t") + "leal -(0x2cc+8)(%esp),%esp\n\t" /* sizeof(CONTEXT) + alignment */ + "pushl %esp\n\t" /* context */ + "call " __ASM_NAME("RtlCaptureContext") __ASM_STDCALL(4) "\n\t" + "leal 24(%ebp),%eax\n\t" + "movl %eax,0xc4(%esp)\n\t" /* context->Esp */ + "pushl %esp\n\t" + "pushl 20(%ebp)\n\t" + "pushl 16(%ebp)\n\t" + "pushl 12(%ebp)\n\t" + "pushl 8(%ebp)\n\t" + "call " __ASM_NAME("__regs_RtlUnwind") __ASM_STDCALL(20) "\n\t" + "leave\n\t" + __ASM_CFI(".cfi_def_cfa %esp,4\n\t") + __ASM_CFI(".cfi_same_value %ebp\n\t") + "ret $16" ) /* actually never returns */ /******************************************************************* diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec index 1f60f61..0da60b5 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -1185,7 +1185,7 @@ @ stdcall RtlUnicodeToMultiByteSize(ptr ptr long) ntdll.RtlUnicodeToMultiByteSize @ stdcall RtlUnicodeToOemN(ptr long ptr ptr long) ntdll.RtlUnicodeToOemN @ stub RtlUnlockBootStatusData -@ stdcall -register RtlUnwind(ptr ptr ptr ptr) ntdll.RtlUnwind +@ stdcall -norelay RtlUnwind(ptr ptr ptr ptr) ntdll.RtlUnwind @ stdcall -arch=x86_64 RtlUnwindEx(ptr ptr ptr ptr ptr ptr) ntdll.RtlUnwindEx @ stdcall RtlUpcaseUnicodeChar(long) ntdll.RtlUpcaseUnicodeChar @ stdcall RtlUpcaseUnicodeString(ptr ptr long) ntdll.RtlUpcaseUnicodeString
1
0
0
0
Alexandre Julliard : ntdll: Get some values from the parent stackframe in RtlCaptureContext.
by Alexandre Julliard
24 Jul '17
24 Jul '17
Module: wine Branch: master Commit: 2bb668b1da1d39c0e1797f08afe3b2570c08cc48 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=2bb668b1da1d39c0e1797f08a…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Mon Jul 24 10:39:42 2017 +0200 ntdll: Get some values from the parent stackframe in RtlCaptureContext. Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntdll/signal_i386.c | 29 +++++++++++++++-------------- dlls/ntdll/tests/exception.c | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 14 deletions(-) diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c index 9275ad9..ead1d56 100644 --- a/dlls/ntdll/signal_i386.c +++ b/dlls/ntdll/signal_i386.c @@ -1236,15 +1236,16 @@ __ASM_STDCALL_FUNC( RtlCaptureContext, 4, "movl %ebx,0xa4(%eax)\n\t" /* context->Ebx */ "movl %edx,0xa8(%eax)\n\t" /* context->Edx */ "movl %ecx,0xac(%eax)\n\t" /* context->Ecx */ - "movl %ebp,0xb4(%eax)\n\t" /* context->Ebp */ - "movl 4(%esp),%edx\n\t" + "movl 0(%ebp),%edx\n\t" + "movl %edx,0xb4(%eax)\n\t" /* context->Ebp */ + "movl 4(%ebp),%edx\n\t" "movl %edx,0xb8(%eax)\n\t" /* context->Eip */ "movw %cs,0xbc(%eax)\n\t" /* context->SegCs */ "pushfl\n\t" __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") "popl 0xc0(%eax)\n\t" /* context->EFlags */ __ASM_CFI(".cfi_adjust_cfa_offset -4\n\t") - "leal 8(%esp),%edx\n\t" + "leal 8(%ebp),%edx\n\t" "movl %edx,0xc4(%eax)\n\t" /* context->Esp */ "movw %ss,0xc8(%eax)\n\t" /* context->SegSs */ "popl 0xb0(%eax)\n\t" /* context->Eax */ @@ -2715,29 +2716,29 @@ NTSTATUS WINAPI NtRaiseException( EXCEPTION_RECORD *rec, CONTEXT *context, BOOL * RtlRaiseException (NTDLL.@) */ __ASM_STDCALL_FUNC( RtlRaiseException, 4, + "pushl %ebp\n\t" + __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") + __ASM_CFI(".cfi_rel_offset %ebp,0\n\t") + "movl %esp,%ebp\n\t" + __ASM_CFI(".cfi_def_cfa_register %ebp\n\t") "leal -0x2cc(%esp),%esp\n\t" /* sizeof(CONTEXT) */ - __ASM_CFI(".cfi_adjust_cfa_offset 0x2cc\n\t") "pushl %esp\n\t" /* context */ - __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") "call " __ASM_NAME("RtlCaptureContext") __ASM_STDCALL(4) "\n\t" - __ASM_CFI(".cfi_adjust_cfa_offset -4\n\t") - "movl 0x2cc(%esp),%eax\n\t" /* return address */ - "movl 0x2d0(%esp),%ecx\n\t" /* rec */ - "movl %eax,0xb8(%esp)\n\t" /* context->Eip */ + "movl 4(%ebp),%eax\n\t" /* return address */ + "movl 8(%ebp),%ecx\n\t" /* rec */ "movl %eax,12(%ecx)\n\t" /* rec->ExceptionAddress */ - "leal 0x2d4(%esp),%eax\n\t" + "leal 12(%ebp),%eax\n\t" "movl %eax,0xc4(%esp)\n\t" /* context->Esp */ "movl %esp,%eax\n\t" "pushl $1\n\t" - __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") "pushl %eax\n\t" - __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") "pushl %ecx\n\t" - __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") "call " __ASM_NAME("NtRaiseException") __ASM_STDCALL(12) "\n\t" - __ASM_CFI(".cfi_adjust_cfa_offset -12\n\t") "pushl %eax\n\t" "call " __ASM_NAME("RtlRaiseStatus") __ASM_STDCALL(4) "\n\t" + "leave\n\t" + __ASM_CFI(".cfi_def_cfa %esp,4\n\t") + __ASM_CFI(".cfi_same_value %ebp\n\t") "ret $4" ) /* actually never returns */ diff --git a/dlls/ntdll/tests/exception.c b/dlls/ntdll/tests/exception.c index 14e6da3..6e901e9 100644 --- a/dlls/ntdll/tests/exception.c +++ b/dlls/ntdll/tests/exception.c @@ -42,6 +42,7 @@ static NTSTATUS (WINAPI *pNtGetContextThread)(HANDLE,CONTEXT*); static NTSTATUS (WINAPI *pNtSetContextThread)(HANDLE,CONTEXT*); static NTSTATUS (WINAPI *pRtlRaiseException)(EXCEPTION_RECORD *rec); static PVOID (WINAPI *pRtlUnwind)(PVOID, PVOID, PEXCEPTION_RECORD, PVOID); +static VOID (WINAPI *pRtlCaptureContext)(CONTEXT*); static PVOID (WINAPI *pRtlAddVectoredExceptionHandler)(ULONG first, PVECTORED_EXCEPTION_HANDLER func); static ULONG (WINAPI *pRtlRemoveVectoredExceptionHandler)(PVOID handler); static PVOID (WINAPI *pRtlAddVectoredContinueHandler)(ULONG first, PVECTORED_EXCEPTION_HANDLER func); @@ -1471,6 +1472,42 @@ static void test_thread_context(void) memset( &context, 0xcc, sizeof(context) ); memset( &expect, 0xcc, sizeof(expect) ); + func_ptr( &expect, pRtlCaptureContext, &context, 0 ); + trace( "expect: eax=%08x ebx=%08x ecx=%08x edx=%08x esi=%08x edi=%08x ebp=%08x esp=%08x " + "eip=%08x cs=%04x ds=%04x es=%04x fs=%04x gs=%04x ss=%04x flags=%08x prev=%08x\n", + expect.Eax, expect.Ebx, expect.Ecx, expect.Edx, expect.Esi, expect.Edi, + expect.Ebp, expect.Esp, expect.Eip, expect.SegCs, expect.SegDs, expect.SegEs, + expect.SegFs, expect.SegGs, expect.SegSs, expect.EFlags, expect.prev_frame ); + trace( "actual: eax=%08x ebx=%08x ecx=%08x edx=%08x esi=%08x edi=%08x ebp=%08x esp=%08x " + "eip=%08x cs=%04x ds=%04x es=%04x fs=%04x gs=%04x ss=%04x flags=%08x\n", + context.Eax, context.Ebx, context.Ecx, context.Edx, context.Esi, context.Edi, + context.Ebp, context.Esp, context.Eip, context.SegCs, context.SegDs, context.SegEs, + context.SegFs, context.SegGs, context.SegSs, context.EFlags ); + + ok( context.ContextFlags == (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS) || + broken( context.ContextFlags == 0xcccccccc ), /* <= vista */ + "wrong flags %08x\n", context.ContextFlags ); + COMPARE( Eax ); + COMPARE( Ebx ); + COMPARE( Ecx ); + COMPARE( Edx ); + COMPARE( Esi ); + COMPARE( Edi ); + COMPARE( Eip ); + COMPARE( SegCs ); + COMPARE( SegDs ); + COMPARE( SegEs ); + COMPARE( SegFs ); + COMPARE( SegGs ); + COMPARE( SegSs ); + COMPARE( EFlags ); + /* Ebp is from the previous stackframe */ + ok( context.Ebp == expect.prev_frame, "wrong Ebp %08x/%08x\n", context.Ebp, expect.prev_frame ); + /* Esp is the value on entry to the previous stackframe */ + ok( context.Esp == expect.Ebp + 8, "wrong Esp %08x/%08x\n", context.Esp, expect.Ebp + 8 ); + + memset( &context, 0xcc, sizeof(context) ); + memset( &expect, 0xcc, sizeof(expect) ); context.ContextFlags = CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS; status = func_ptr( &expect, pNtGetContextThread, (void *)GetCurrentThread(), &context ); ok( status == STATUS_SUCCESS, "NtGetContextThread failed %08x\n", status ); @@ -2530,6 +2567,7 @@ START_TEST(exception) pNtReadVirtualMemory = (void *)GetProcAddress( hntdll, "NtReadVirtualMemory" ); pRtlUnwind = (void *)GetProcAddress( hntdll, "RtlUnwind" ); pRtlRaiseException = (void *)GetProcAddress( hntdll, "RtlRaiseException" ); + pRtlCaptureContext = (void *)GetProcAddress( hntdll, "RtlCaptureContext" ); pNtTerminateProcess = (void *)GetProcAddress( hntdll, "NtTerminateProcess" ); pRtlAddVectoredExceptionHandler = (void *)GetProcAddress( hntdll, "RtlAddVectoredExceptionHandler" );
1
0
0
0
Alexandre Julliard : ntdll: Add an assembly wrapper to return correct values for the current thread in NtGetContextThread.
by Alexandre Julliard
24 Jul '17
24 Jul '17
Module: wine Branch: master Commit: 1c4990518269a570476b76c02d11c98808f61b93 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=1c4990518269a570476b76c02…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Mon Jul 24 10:33:53 2017 +0200 ntdll: Add an assembly wrapper to return correct values for the current thread in NtGetContextThread. Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntdll/ntdll.spec | 4 +- dlls/ntdll/signal_i386.c | 128 ++++++++++++++++++++++--------------------- dlls/ntdll/tests/exception.c | 91 ++++++++++++++++++++++++++++++ 3 files changed, 160 insertions(+), 63 deletions(-) Diff:
http://source.winehq.org/git/wine.git/?a=commitdiff;h=1c4990518269a570476b7…
1
0
0
0
Alistair Leslie-Hughes : wmvcore: Support IWMPacketSize2 interfaces in IWMReader.
by Alexandre Julliard
24 Jul '17
24 Jul '17
Module: wine Branch: master Commit: 998fe046b59dd1e8c5458a739763c1c19bd89690 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=998fe046b59dd1e8c5458a739…
Author: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Date: Sun Jul 23 00:52:05 2017 +0000 wmvcore: Support IWMPacketSize2 interfaces in IWMReader. Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/wmvcore/tests/wmvcore.c | 4 +-- dlls/wmvcore/wmvcore_main.c | 70 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 2 deletions(-) diff --git a/dlls/wmvcore/tests/wmvcore.c b/dlls/wmvcore/tests/wmvcore.c index dc41eb3..b11a5bf 100644 --- a/dlls/wmvcore/tests/wmvcore.c +++ b/dlls/wmvcore/tests/wmvcore.c @@ -118,10 +118,10 @@ static void test_wmreader_interfaces(void) ok(hr == S_OK, "Failed 0x%08x\n", hr); hr = IWMReader_QueryInterface(reader, &IID_IWMPacketSize, (void **)&packet); - todo_wine ok(hr == S_OK, "Failed 0x%08x\n", hr); + ok(hr == S_OK, "Failed 0x%08x\n", hr); hr = IWMReader_QueryInterface(reader, &IID_IWMPacketSize2, (void **)&packet2); - todo_wine ok(hr == S_OK, "Failed 0x%08x\n", hr); + ok(hr == S_OK, "Failed 0x%08x\n", hr); hr = IWMReader_QueryInterface(reader, &IID_IWMReaderAccelerator, (void **)&accel); ok(hr == S_OK, "Failed 0x%08x\n", hr); diff --git a/dlls/wmvcore/wmvcore_main.c b/dlls/wmvcore/wmvcore_main.c index 5d536ae..be07909 100644 --- a/dlls/wmvcore/wmvcore_main.c +++ b/dlls/wmvcore/wmvcore_main.c @@ -76,6 +76,7 @@ typedef struct { IWMLanguageList IWMLanguageList_iface; IReferenceClock IReferenceClock_iface; IWMProfile3 IWMProfile3_iface; + IWMPacketSize2 IWMPacketSize2_iface; LONG ref; } WMReader; @@ -157,6 +158,12 @@ static HRESULT WINAPI WMReader_QueryInterface(IWMReader *iface, REFIID riid, voi }else if(IsEqualGUID(riid, &IID_IWMProfile3)) { TRACE("(%p)->(IWMProfile3 %p)\n", This, ppv); *ppv = &This->IWMProfile3_iface; + }else if(IsEqualGUID(riid, &IID_IWMPacketSize)) { + TRACE("(%p)->(IWMPacketSize %p)\n", This, ppv); + *ppv = &This->IWMPacketSize2_iface; + }else if(IsEqualGUID(riid, &IID_IWMPacketSize2)) { + TRACE("(%p)->(IWMPacketSize2 %p)\n", This, ppv); + *ppv = &This->IWMPacketSize2_iface; }else { *ppv = NULL; FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv); @@ -1999,6 +2006,68 @@ static const IWMProfile3Vtbl WMProfile3Vtbl = profile3_GetExpectedPacketCount }; +static inline WMReader *impl_from_IWMPacketSize2(IWMPacketSize2 *iface) +{ + return CONTAINING_RECORD(iface, WMReader, IWMPacketSize2_iface); +} + +static HRESULT WINAPI packetsize_QueryInterface(IWMPacketSize2 *iface, REFIID riid, void **ppv) +{ + WMReader *This = impl_from_IWMPacketSize2(iface); + return IWMReader_QueryInterface(&This->IWMReader_iface, riid, ppv); +} + +static ULONG WINAPI packetsize_AddRef(IWMPacketSize2 *iface) +{ + WMReader *This = impl_from_IWMPacketSize2(iface); + return IWMReader_AddRef(&This->IWMReader_iface); +} + +static ULONG WINAPI packetsize_Release(IWMPacketSize2 *iface) +{ + WMReader *This = impl_from_IWMPacketSize2(iface); + return IWMReader_Release(&This->IWMReader_iface); +} + +static HRESULT WINAPI packetsize_GetMaxPacketSize(IWMPacketSize2 *iface, DWORD *size) +{ + WMReader *This = impl_from_IWMPacketSize2(iface); + FIXME("%p, %p\n", This, size); + return E_NOTIMPL; +} + +static HRESULT WINAPI packetsize_SetMaxPacketSize(IWMPacketSize2 *iface, DWORD size) +{ + WMReader *This = impl_from_IWMPacketSize2(iface); + FIXME("%p, %d\n", This, size); + return E_NOTIMPL; +} + +static HRESULT WINAPI packetsize_GetMinPacketSize(IWMPacketSize2 *iface, DWORD *size) +{ + WMReader *This = impl_from_IWMPacketSize2(iface); + FIXME("%p, %p\n", This, size); + return E_NOTIMPL; +} + +static HRESULT WINAPI packetsize_SetMinPacketSize(IWMPacketSize2 *iface, DWORD size) +{ + WMReader *This = impl_from_IWMPacketSize2(iface); + FIXME("%p, %d\n", This, size); + return E_NOTIMPL; +} + +static const IWMPacketSize2Vtbl WMPacketSize2Vtbl = +{ + packetsize_QueryInterface, + packetsize_AddRef, + packetsize_Release, + packetsize_GetMaxPacketSize, + packetsize_SetMaxPacketSize, + packetsize_GetMinPacketSize, + packetsize_SetMinPacketSize +}; + HRESULT WINAPI WMCreateReader(IUnknown *reserved, DWORD rights, IWMReader **ret_reader) { WMReader *reader; @@ -2021,6 +2090,7 @@ HRESULT WINAPI WMCreateReader(IUnknown *reserved, DWORD rights, IWMReader **ret_ reader->IWMLanguageList_iface.lpVtbl = &WMLanguageListVtbl; reader->IReferenceClock_iface.lpVtbl = &ReferenceClockVtbl; reader->IWMProfile3_iface.lpVtbl = &WMProfile3Vtbl; + reader->IWMPacketSize2_iface.lpVtbl = &WMPacketSize2Vtbl; reader->ref = 1; *ret_reader = &reader->IWMReader_iface;
1
0
0
0
Alistair Leslie-Hughes : wmvcore: Support IWMProfile3 interfaces in IWMReader.
by Alexandre Julliard
24 Jul '17
24 Jul '17
Module: wine Branch: master Commit: 0570cf9b67150cbba7b62df07d95c4369f2a0494 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=0570cf9b67150cbba7b62df07…
Author: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Date: Sun Jul 23 00:51:55 2017 +0000 wmvcore: Support IWMProfile3 interfaces in IWMReader. Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/wmvcore/tests/wmvcore.c | 6 +- dlls/wmvcore/wmvcore_main.c | 289 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 292 insertions(+), 3 deletions(-) Diff:
http://source.winehq.org/git/wine.git/?a=commitdiff;h=0570cf9b67150cbba7b62…
1
0
0
0
Alistair Leslie-Hughes : wmvcore: Support IReferenceClock interfaces in IWMReader.
by Alexandre Julliard
24 Jul '17
24 Jul '17
Module: wine Branch: master Commit: 98e94b25b3917ef211a8b6e133bc2e23253013ff URL:
http://source.winehq.org/git/wine.git/?a=commit;h=98e94b25b3917ef211a8b6e13…
Author: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Date: Sun Jul 23 00:51:45 2017 +0000 wmvcore: Support IReferenceClock interfaces in IWMReader. Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/wmvcore/tests/wmvcore.c | 6 ++++ dlls/wmvcore/wmvcore_main.c | 71 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) diff --git a/dlls/wmvcore/tests/wmvcore.c b/dlls/wmvcore/tests/wmvcore.c index 5bfec25..ca99d5a 100644 --- a/dlls/wmvcore/tests/wmvcore.c +++ b/dlls/wmvcore/tests/wmvcore.c @@ -83,6 +83,7 @@ static void test_wmreader_interfaces(void) IWMDRMReader3 *drmreader3; IWMReaderPlaylistBurn *playlist; IWMLanguageList *langlist; + IReferenceClock *refclock; hr = WMCreateReader( NULL, 0, &reader ); ok(hr == S_OK, "WMCreateReader failed 0x%08x\n", hr); @@ -155,6 +156,9 @@ static void test_wmreader_interfaces(void) hr = IWMReader_QueryInterface(reader, &IID_IWMLanguageList, (void **)&langlist); ok(hr == S_OK, "Failed 0x%08x\n", hr); + hr = IWMReader_QueryInterface(reader, &IID_IReferenceClock, (void **)&refclock); + ok(hr == S_OK, "Failed 0x%08x\n", hr); + if(packet) IWMPacketSize_Release(packet); if(packet2) @@ -191,6 +195,8 @@ static void test_wmreader_interfaces(void) IWMReaderPlaylistBurn_Release(playlist); if(langlist) IWMLanguageList_Release(langlist); + if(refclock) + IReferenceClock_Release(refclock); IWMReader_Release(reader); } diff --git a/dlls/wmvcore/wmvcore_main.c b/dlls/wmvcore/wmvcore_main.c index 9619463..b762958 100644 --- a/dlls/wmvcore/wmvcore_main.c +++ b/dlls/wmvcore/wmvcore_main.c @@ -74,6 +74,7 @@ typedef struct { IWMReaderPlaylistBurn IWMReaderPlaylistBurn_iface; IWMHeaderInfo3 IWMHeaderInfo3_iface; IWMLanguageList IWMLanguageList_iface; + IReferenceClock IReferenceClock_iface; LONG ref; } WMReader; @@ -143,6 +144,9 @@ static HRESULT WINAPI WMReader_QueryInterface(IWMReader *iface, REFIID riid, voi }else if(IsEqualGUID(riid, &IID_IWMLanguageList)) { TRACE("(%p)->(IWMLanguageList %p)\n", This, ppv); *ppv = &This->IWMLanguageList_iface; + }else if(IsEqualGUID(riid, &IID_IReferenceClock)) { + TRACE("(%p)->(IWMLanguageList %p)\n", This, ppv); + *ppv = &This->IReferenceClock_iface; }else { *ppv = NULL; FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv); @@ -1641,6 +1645,72 @@ static const IWMLanguageListVtbl WMLanguageListVtbl = langlist_AddLanguageByRFC1766String }; +static inline WMReader *impl_from_IReferenceClock(IReferenceClock *iface) +{ + return CONTAINING_RECORD(iface, WMReader, IReferenceClock_iface); +} + +static HRESULT WINAPI refclock_QueryInterface(IReferenceClock *iface, REFIID riid, void **ppv) +{ + WMReader *This = impl_from_IReferenceClock(iface); + return IWMReader_QueryInterface(&This->IWMReader_iface, riid, ppv); +} + +static ULONG WINAPI refclock_AddRef(IReferenceClock *iface) +{ + WMReader *This = impl_from_IReferenceClock(iface); + return IWMReader_AddRef(&This->IWMReader_iface); +} + +static ULONG WINAPI refclock_Release(IReferenceClock *iface) +{ + WMReader *This = impl_from_IReferenceClock(iface); + return IWMReader_Release(&This->IWMReader_iface); +} + +static HRESULT WINAPI refclock_GetTime(IReferenceClock *iface, REFERENCE_TIME *time) +{ + WMReader *This = impl_from_IReferenceClock(iface); + FIXME("%p, %p\n", This, time); + return E_NOTIMPL; +} + +static HRESULT WINAPI refclock_AdviseTime(IReferenceClock *iface, REFERENCE_TIME basetime, + REFERENCE_TIME streamtime, HEVENT event, DWORD_PTR *cookie) +{ + WMReader *This = impl_from_IReferenceClock(iface); + FIXME("%p, %s, %s, %lu, %p\n", This, wine_dbgstr_longlong(basetime), + wine_dbgstr_longlong(streamtime), event, cookie); + return E_NOTIMPL; +} + +static HRESULT WINAPI refclock_AdvisePeriodic(IReferenceClock *iface, REFERENCE_TIME starttime, + REFERENCE_TIME period, HSEMAPHORE semaphore, DWORD_PTR *cookie) +{ + WMReader *This = impl_from_IReferenceClock(iface); + FIXME("%p, %s, %s, %lu, %p\n", This, wine_dbgstr_longlong(starttime), + wine_dbgstr_longlong(period), semaphore, cookie); + return E_NOTIMPL; +} + +static HRESULT WINAPI refclock_Unadvise(IReferenceClock *iface, DWORD_PTR cookie) +{ + WMReader *This = impl_from_IReferenceClock(iface); + FIXME("%p, %lu\n", This, cookie); + return E_NOTIMPL; +} + +static const IReferenceClockVtbl ReferenceClockVtbl = +{ + refclock_QueryInterface, + refclock_AddRef, + refclock_Release, + refclock_GetTime, + refclock_AdviseTime, + refclock_AdvisePeriodic, + refclock_Unadvise +}; + HRESULT WINAPI WMCreateReader(IUnknown *reserved, DWORD rights, IWMReader **ret_reader) { WMReader *reader; @@ -1661,6 +1731,7 @@ HRESULT WINAPI WMCreateReader(IUnknown *reserved, DWORD rights, IWMReader **ret_ reader->IWMReaderPlaylistBurn_iface.lpVtbl = &WMReaderPlaylistBurnVtbl; reader->IWMHeaderInfo3_iface.lpVtbl = &WMHeaderInfo3Vtbl; reader->IWMLanguageList_iface.lpVtbl = &WMLanguageListVtbl; + reader->IReferenceClock_iface.lpVtbl = &ReferenceClockVtbl; reader->ref = 1; *ret_reader = &reader->IWMReader_iface;
1
0
0
0
Alistair Leslie-Hughes : wmvcore: Support IWMLanguageList interfaces in IWMReader.
by Alexandre Julliard
24 Jul '17
24 Jul '17
Module: wine Branch: master Commit: 163aac1670b9fb45061ff69f4c29efc971ee6055 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=163aac1670b9fb45061ff69f4…
Author: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Date: Sun Jul 23 00:51:36 2017 +0000 wmvcore: Support IWMLanguageList interfaces in IWMReader. Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/wmvcore/tests/wmvcore.c | 6 +++++ dlls/wmvcore/wmvcore_main.c | 62 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/dlls/wmvcore/tests/wmvcore.c b/dlls/wmvcore/tests/wmvcore.c index 6080a93..5bfec25 100644 --- a/dlls/wmvcore/tests/wmvcore.c +++ b/dlls/wmvcore/tests/wmvcore.c @@ -82,6 +82,7 @@ static void test_wmreader_interfaces(void) IWMDRMReader2 *drmreader2; IWMDRMReader3 *drmreader3; IWMReaderPlaylistBurn *playlist; + IWMLanguageList *langlist; hr = WMCreateReader( NULL, 0, &reader ); ok(hr == S_OK, "WMCreateReader failed 0x%08x\n", hr); @@ -151,6 +152,9 @@ static void test_wmreader_interfaces(void) hr = IWMReader_QueryInterface(reader, &IID_IWMReaderPlaylistBurn, (void **)&playlist); ok(hr == S_OK, "Failed 0x%08x\n", hr); + hr = IWMReader_QueryInterface(reader, &IID_IWMLanguageList, (void **)&langlist); + ok(hr == S_OK, "Failed 0x%08x\n", hr); + if(packet) IWMPacketSize_Release(packet); if(packet2) @@ -185,6 +189,8 @@ static void test_wmreader_interfaces(void) IWMReaderTypeNegotiation_Release(negotiation); if(playlist) IWMReaderPlaylistBurn_Release(playlist); + if(langlist) + IWMLanguageList_Release(langlist); IWMReader_Release(reader); } diff --git a/dlls/wmvcore/wmvcore_main.c b/dlls/wmvcore/wmvcore_main.c index 790aef0..9619463 100644 --- a/dlls/wmvcore/wmvcore_main.c +++ b/dlls/wmvcore/wmvcore_main.c @@ -73,6 +73,7 @@ typedef struct { IWMReaderTimecode IWMReaderTimecode_iface; IWMReaderPlaylistBurn IWMReaderPlaylistBurn_iface; IWMHeaderInfo3 IWMHeaderInfo3_iface; + IWMLanguageList IWMLanguageList_iface; LONG ref; } WMReader; @@ -139,6 +140,9 @@ static HRESULT WINAPI WMReader_QueryInterface(IWMReader *iface, REFIID riid, voi }else if(IsEqualGUID(riid, &IID_IWMHeaderInfo3)) { TRACE("(%p)->(IWMHeaderInfo3 %p)\n", This, ppv); *ppv = &This->IWMHeaderInfo3_iface; + }else if(IsEqualGUID(riid, &IID_IWMLanguageList)) { + TRACE("(%p)->(IWMLanguageList %p)\n", This, ppv); + *ppv = &This->IWMLanguageList_iface; }else { *ppv = NULL; FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv); @@ -1580,6 +1584,63 @@ static const IWMHeaderInfo3Vtbl WMHeaderInfo3Vtbl = headerinfo_AddCodecInfo }; + +static inline WMReader *impl_from_IWMLanguageList(IWMLanguageList *iface) +{ + return CONTAINING_RECORD(iface, WMReader, IWMLanguageList_iface); +} + +static HRESULT WINAPI langlist_QueryInterface(IWMLanguageList *iface, REFIID riid, void **ppv) +{ + WMReader *This = impl_from_IWMLanguageList(iface); + return IWMReader_QueryInterface(&This->IWMReader_iface, riid, ppv); +} + +static ULONG WINAPI langlist_AddRef(IWMLanguageList *iface) +{ + WMReader *This = impl_from_IWMLanguageList(iface); + return IWMReader_AddRef(&This->IWMReader_iface); +} + +static ULONG WINAPI langlist_Release(IWMLanguageList *iface) +{ + WMReader *This = impl_from_IWMLanguageList(iface); + return IWMReader_Release(&This->IWMReader_iface); +} + +static HRESULT WINAPI langlist_GetLanguageCount(IWMLanguageList *iface, WORD *count) +{ + WMReader *This = impl_from_IWMLanguageList(iface); + FIXME("%p, %p\n", This, count); + return E_NOTIMPL; +} + +static HRESULT WINAPI langlist_GetLanguageDetails(IWMLanguageList *iface, WORD index, + WCHAR *language, WORD *length) +{ + WMReader *This = impl_from_IWMLanguageList(iface); + FIXME("%p, %d, %p, %p\n", This, index, language, length); + return E_NOTIMPL; +} + +static HRESULT WINAPI langlist_AddLanguageByRFC1766String(IWMLanguageList *iface, LPCWSTR_WMSDK_TYPE_SAFE language, + WORD *index) +{ + WMReader *This = impl_from_IWMLanguageList(iface); + FIXME("%p, %p, %p\n", This, language, index); + return E_NOTIMPL; +} + +static const IWMLanguageListVtbl WMLanguageListVtbl = +{ + langlist_QueryInterface, + langlist_AddRef, + langlist_Release, + langlist_GetLanguageCount, + langlist_GetLanguageDetails, + langlist_AddLanguageByRFC1766String +}; + HRESULT WINAPI WMCreateReader(IUnknown *reserved, DWORD rights, IWMReader **ret_reader) { WMReader *reader; @@ -1599,6 +1660,7 @@ HRESULT WINAPI WMCreateReader(IUnknown *reserved, DWORD rights, IWMReader **ret_ reader->IWMReaderTimecode_iface.lpVtbl = &WMReaderTimecodeVtbl; reader->IWMReaderPlaylistBurn_iface.lpVtbl = &WMReaderPlaylistBurnVtbl; reader->IWMHeaderInfo3_iface.lpVtbl = &WMHeaderInfo3Vtbl; + reader->IWMLanguageList_iface.lpVtbl = &WMLanguageListVtbl; reader->ref = 1; *ret_reader = &reader->IWMReader_iface;
1
0
0
0
Alistair Leslie-Hughes : wmvcore: Support IWMHeaderInfo/2/ 3 interfaces in IWMReader.
by Alexandre Julliard
24 Jul '17
24 Jul '17
Module: wine Branch: master Commit: b1702c41b5323af5795d10e0d6e36b40b9dfa94f URL:
http://source.winehq.org/git/wine.git/?a=commit;h=b1702c41b5323af5795d10e0d…
Author: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Date: Sun Jul 23 00:51:26 2017 +0000 wmvcore: Support IWMHeaderInfo/2/3 interfaces in IWMReader. Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/wmvcore/tests/wmvcore.c | 6 +- dlls/wmvcore/wmvcore_main.c | 230 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 233 insertions(+), 3 deletions(-) Diff:
http://source.winehq.org/git/wine.git/?a=commitdiff;h=b1702c41b5323af5795d1…
1
0
0
0
← Newer
1
...
8
9
10
11
12
13
14
...
64
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
Results per page:
10
25
50
100
200