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
September 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
446 discussions
Start a n
N
ew thread
Nikolay Sivov : shell32: System shellfolders don' t support GetDefaultSearchGUID() in recent versions.
by Alexandre Julliard
27 Sep '17
27 Sep '17
Module: wine Branch: master Commit: 2406d6cd84bd93b6f3f321d2f86291ab8b2ebce7 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=2406d6cd84bd93b6f3f321d2f…
Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Wed Sep 27 11:13:43 2017 +0300 shell32: System shellfolders don't support GetDefaultSearchGUID() in recent versions. Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/shell32/cpanelfolder.c | 5 +++-- dlls/shell32/recyclebin.c | 5 +++-- dlls/shell32/shfldr_desktop.c | 5 ++--- dlls/shell32/shfldr_fs.c | 6 ++--- dlls/shell32/shfldr_mycomp.c | 5 ++--- dlls/shell32/shfldr_netplaces.c | 6 ++--- dlls/shell32/shfldr_printers.c | 5 ++--- dlls/shell32/shfldr_unixfs.c | 5 ++--- dlls/shell32/tests/shlfolder.c | 49 +++++++++++++++++++++++++++++++++++++++++ 9 files changed, 68 insertions(+), 23 deletions(-) diff --git a/dlls/shell32/cpanelfolder.c b/dlls/shell32/cpanelfolder.c index f12faf7..ea5e9e2 100644 --- a/dlls/shell32/cpanelfolder.c +++ b/dlls/shell32/cpanelfolder.c @@ -711,12 +711,13 @@ static HRESULT WINAPI ISF_ControlPanel_fnSetNameOf(IShellFolder2 *iface, HWND hw return E_FAIL; } -static HRESULT WINAPI ISF_ControlPanel_fnGetDefaultSearchGUID(IShellFolder2 *iface, GUID *pguid) +static HRESULT WINAPI ISF_ControlPanel_fnGetDefaultSearchGUID(IShellFolder2 *iface, GUID *guid) { ICPanelImpl *This = impl_from_IShellFolder2(iface); - FIXME("(%p)\n", This); + TRACE("(%p)->(%p)\n", This, guid); return E_NOTIMPL; } + static HRESULT WINAPI ISF_ControlPanel_fnEnumSearches(IShellFolder2 *iface, IEnumExtraSearch **ppenum) { diff --git a/dlls/shell32/recyclebin.c b/dlls/shell32/recyclebin.c index 7d34af2..5d4725e 100644 --- a/dlls/shell32/recyclebin.c +++ b/dlls/shell32/recyclebin.c @@ -567,9 +567,10 @@ static HRESULT WINAPI RecycleBin_GetCurFolder(IPersistFolder2 *iface, LPITEMIDLI return S_OK; } -static HRESULT WINAPI RecycleBin_GetDefaultSearchGUID(IShellFolder2 *iface, GUID *pguid) +static HRESULT WINAPI RecycleBin_GetDefaultSearchGUID(IShellFolder2 *iface, GUID *guid) { - FIXME("stub\n"); + RecycleBin *This = impl_from_IShellFolder2(iface); + TRACE("(%p)->(%p)\n", This, guid); return E_NOTIMPL; } diff --git a/dlls/shell32/shfldr_desktop.c b/dlls/shell32/shfldr_desktop.c index bc5935f..880291c 100644 --- a/dlls/shell32/shfldr_desktop.c +++ b/dlls/shell32/shfldr_desktop.c @@ -753,11 +753,10 @@ static HRESULT WINAPI ISF_Desktop_fnSetNameOf (IShellFolder2 * iface, return E_FAIL; } -static HRESULT WINAPI ISF_Desktop_fnGetDefaultSearchGUID(IShellFolder2 *iface, - GUID * pguid) +static HRESULT WINAPI ISF_Desktop_fnGetDefaultSearchGUID(IShellFolder2 *iface, GUID *guid) { IDesktopFolderImpl *This = impl_from_IShellFolder2(iface); - FIXME ("(%p)->(%p) stub\n", This, pguid); + TRACE("(%p)->(%p)\n", This, guid); return E_NOTIMPL; } diff --git a/dlls/shell32/shfldr_fs.c b/dlls/shell32/shfldr_fs.c index 0c1d95e..1fb4f1b 100644 --- a/dlls/shell32/shfldr_fs.c +++ b/dlls/shell32/shfldr_fs.c @@ -910,13 +910,13 @@ static HRESULT WINAPI IShellFolder_fnSetNameOf (IShellFolder2 * iface, return E_FAIL; } -static HRESULT WINAPI IShellFolder_fnGetDefaultSearchGUID (IShellFolder2 *iface, - GUID * pguid) +static HRESULT WINAPI IShellFolder_fnGetDefaultSearchGUID(IShellFolder2 *iface, GUID *guid) { IGenericSFImpl *This = impl_from_IShellFolder2(iface); - FIXME ("(%p)\n", This); + TRACE("(%p)->(%p)\n", This, guid); return E_NOTIMPL; } + static HRESULT WINAPI IShellFolder_fnEnumSearches (IShellFolder2 * iface, IEnumExtraSearch ** ppenum) { diff --git a/dlls/shell32/shfldr_mycomp.c b/dlls/shell32/shfldr_mycomp.c index c514cd8..3ed887c 100644 --- a/dlls/shell32/shfldr_mycomp.c +++ b/dlls/shell32/shfldr_mycomp.c @@ -768,11 +768,10 @@ static HRESULT WINAPI ISF_MyComputer_fnSetNameOf ( return E_FAIL; } -static HRESULT WINAPI ISF_MyComputer_fnGetDefaultSearchGUID ( - IShellFolder2 * iface, GUID * pguid) +static HRESULT WINAPI ISF_MyComputer_fnGetDefaultSearchGUID(IShellFolder2 *iface, GUID *guid) { IMyComputerFolderImpl *This = impl_from_IShellFolder2(iface); - FIXME ("(%p)\n", This); + TRACE("(%p)->(%p)\n", This, guid); return E_NOTIMPL; } static HRESULT WINAPI ISF_MyComputer_fnEnumSearches ( diff --git a/dlls/shell32/shfldr_netplaces.c b/dlls/shell32/shfldr_netplaces.c index e41359b..d973e40 100644 --- a/dlls/shell32/shfldr_netplaces.c +++ b/dlls/shell32/shfldr_netplaces.c @@ -501,12 +501,10 @@ static HRESULT WINAPI ISF_NetworkPlaces_fnSetNameOf (IShellFolder2 * iface, return E_FAIL; } -static HRESULT WINAPI ISF_NetworkPlaces_fnGetDefaultSearchGUID ( - IShellFolder2 * iface, GUID * pguid) +static HRESULT WINAPI ISF_NetworkPlaces_fnGetDefaultSearchGUID(IShellFolder2 *iface, GUID *guid) { IGenericSFImpl *This = impl_from_IShellFolder2(iface); - - FIXME ("(%p)\n", This); + TRACE("(%p)->(%p)\n", This, guid); return E_NOTIMPL; } diff --git a/dlls/shell32/shfldr_printers.c b/dlls/shell32/shfldr_printers.c index 08841fb..66260ac 100644 --- a/dlls/shell32/shfldr_printers.c +++ b/dlls/shell32/shfldr_printers.c @@ -251,11 +251,10 @@ static HRESULT WINAPI IShellFolder_Printers_fnSetNameOf ( return E_FAIL; } -static HRESULT WINAPI IShellFolder_Printers_fnGetDefaultSearchGUID ( - IShellFolder2 * iface, GUID * pguid) +static HRESULT WINAPI IShellFolder_Printers_fnGetDefaultSearchGUID(IShellFolder2 *iface, GUID *guid) { IPrintersFolderImpl *This = impl_from_IShellFolder2(iface); - FIXME ("(%p) stub\n", This); + TRACE("(%p)->(%p)\n", This, guid); return E_NOTIMPL; } diff --git a/dlls/shell32/shfldr_unixfs.c b/dlls/shell32/shfldr_unixfs.c index d9ac506..345e965 100644 --- a/dlls/shell32/shfldr_unixfs.c +++ b/dlls/shell32/shfldr_unixfs.c @@ -1454,11 +1454,10 @@ static HRESULT WINAPI ShellFolder2_GetDefaultColumnState(IShellFolder2* iface, return E_NOTIMPL; } -static HRESULT WINAPI ShellFolder2_GetDefaultSearchGUID(IShellFolder2* iface, - GUID *guid) +static HRESULT WINAPI ShellFolder2_GetDefaultSearchGUID(IShellFolder2* iface, GUID *guid) { UnixFolder *This = impl_from_IShellFolder2(iface); - FIXME("(%p)->(%p): stub\n", This, guid); + TRACE("(%p)->(%p)\n", This, guid); return E_NOTIMPL; } diff --git a/dlls/shell32/tests/shlfolder.c b/dlls/shell32/tests/shlfolder.c index 8ce7d74..1ee0274 100644 --- a/dlls/shell32/tests/shlfolder.c +++ b/dlls/shell32/tests/shlfolder.c @@ -5446,6 +5446,54 @@ static void test_GetDefaultColumn(void) CoUninitialize(); } +static void test_GetDefaultSearchGUID(void) +{ + static const CLSID *folders[] = + { + &CLSID_MyComputer, + &CLSID_MyDocuments, + &CLSID_ControlPanel, + &CLSID_NetworkPlaces, + &CLSID_Printers, + &CLSID_RecycleBin, + &CLSID_ShellDesktop, + }; + HRESULT hr; + int i; + + CoInitialize(NULL); + + for (i = 0; i < sizeof(folders)/sizeof(folders[0]); i++) + { + IShellFolder2 *folder; + GUID guid; + + hr = CoCreateInstance(folders[i], NULL, CLSCTX_INPROC_SERVER, &IID_IShellFolder2, (void **)&folder); + if (hr != S_OK) + { + win_skip("Failed to create folder %s, hr %#x.\n", wine_dbgstr_guid(folders[i]), hr); + continue; + } + + if (0) + { + /* crashes on XP */ + hr = IShellFolder2_GetDefaultSearchGUID(folder, NULL); + ok(hr == E_NOTIMPL, "Unexpected hr %#x.\n", hr); + } + + memcpy(&guid, &CLSID_MyComputer, sizeof(guid)); + hr = IShellFolder2_GetDefaultSearchGUID(folder, &guid); + ok(hr == E_NOTIMPL || broken(hr == S_OK) /* Method was last supported on XP */, "Unexpected hr %#x.\n", hr); + if (hr == E_NOTIMPL) + ok(IsEqualGUID(&guid, &CLSID_MyComputer), "Unexpected guid %s.\n", wine_dbgstr_guid(&guid)); + + IShellFolder2_Release(folder); + } + + CoUninitialize(); +} + START_TEST(shlfolder) { init_function_pointers(); @@ -5486,6 +5534,7 @@ START_TEST(shlfolder) test_SHCreateDefaultContextMenu(); test_DataObject(); test_GetDefaultColumn(); + test_GetDefaultSearchGUID(); OleUninitialize(); }
1
0
0
0
Nikolay Sivov : shell32: System shellfolders don' t implement GetDefaultColumn().
by Alexandre Julliard
27 Sep '17
27 Sep '17
Module: wine Branch: master Commit: babd22b4431b76a2c9fde3771fc691a08c3e9e82 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=babd22b4431b76a2c9fde3771…
Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Wed Sep 27 11:13:42 2017 +0300 shell32: System shellfolders don't implement GetDefaultColumn(). Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/shell32/cpanelfolder.c | 12 +++++----- dlls/shell32/recyclebin.c | 10 ++++---- dlls/shell32/shfldr_desktop.c | 13 ++++------- dlls/shell32/shfldr_fs.c | 12 +++------- dlls/shell32/shfldr_mycomp.c | 14 +++++------ dlls/shell32/shfldr_netplaces.c | 13 ++++------- dlls/shell32/shfldr_printers.c | 8 ++++--- dlls/shell32/shfldr_unixfs.c | 12 +++------- dlls/shell32/tests/shlfolder.c | 52 +++++++++++++++++++++++++++++++++++++++++ 9 files changed, 88 insertions(+), 58 deletions(-) diff --git a/dlls/shell32/cpanelfolder.c b/dlls/shell32/cpanelfolder.c index 527ddfd..f12faf7 100644 --- a/dlls/shell32/cpanelfolder.c +++ b/dlls/shell32/cpanelfolder.c @@ -724,17 +724,17 @@ static HRESULT WINAPI ISF_ControlPanel_fnEnumSearches(IShellFolder2 *iface, FIXME("(%p)\n", This); return E_NOTIMPL; } -static HRESULT WINAPI ISF_ControlPanel_fnGetDefaultColumn(IShellFolder2 *iface, DWORD dwRes, - ULONG *pSort, ULONG *pDisplay) + +static HRESULT WINAPI ISF_ControlPanel_fnGetDefaultColumn(IShellFolder2 *iface, DWORD reserved, + ULONG *sort, ULONG *display) { ICPanelImpl *This = impl_from_IShellFolder2(iface); - TRACE("(%p)\n", This); + TRACE("(%p)->(%#x %p %p)\n", This, reserved, sort, display); - if (pSort) *pSort = 0; - if (pDisplay) *pDisplay = 0; - return S_OK; + return E_NOTIMPL; } + static HRESULT WINAPI ISF_ControlPanel_fnGetDefaultColumnState(IShellFolder2 *iface, UINT iColumn, DWORD *pcsFlags) { diff --git a/dlls/shell32/recyclebin.c b/dlls/shell32/recyclebin.c index 80e5aad..7d34af2 100644 --- a/dlls/shell32/recyclebin.c +++ b/dlls/shell32/recyclebin.c @@ -580,13 +580,13 @@ static HRESULT WINAPI RecycleBin_EnumSearches(IShellFolder2 *iface, IEnumExtraSe return E_NOTIMPL; } -static HRESULT WINAPI RecycleBin_GetDefaultColumn(IShellFolder2 *iface, DWORD dwReserved, ULONG *pSort, ULONG *pDisplay) +static HRESULT WINAPI RecycleBin_GetDefaultColumn(IShellFolder2 *iface, DWORD reserved, ULONG *sort, ULONG *display) { RecycleBin *This = impl_from_IShellFolder2(iface); - TRACE("(%p, %x, %p, %p)\n", This, dwReserved, pSort, pDisplay); - *pSort = 0; - *pDisplay = 0; - return S_OK; + + TRACE("(%p)->(%#x, %p, %p)\n", This, reserved, sort, display); + + return E_NOTIMPL; } static HRESULT WINAPI RecycleBin_GetDefaultColumnState(IShellFolder2 *iface, UINT iColumn, SHCOLSTATEF *pcsFlags) diff --git a/dlls/shell32/shfldr_desktop.c b/dlls/shell32/shfldr_desktop.c index 8d85dfd..bc5935f 100644 --- a/dlls/shell32/shfldr_desktop.c +++ b/dlls/shell32/shfldr_desktop.c @@ -769,20 +769,15 @@ static HRESULT WINAPI ISF_Desktop_fnEnumSearches (IShellFolder2 *iface, return E_NOTIMPL; } -static HRESULT WINAPI ISF_Desktop_fnGetDefaultColumn (IShellFolder2 * iface, - DWORD reserved, ULONG * pSort, ULONG * pDisplay) +static HRESULT WINAPI ISF_Desktop_fnGetDefaultColumn(IShellFolder2 *iface, DWORD reserved, ULONG *sort, ULONG *display) { IDesktopFolderImpl *This = impl_from_IShellFolder2(iface); - TRACE ("(%p)->(%d %p %p)\n", This, reserved, pSort, pDisplay); + TRACE ("(%p)->(%#x, %p, %p)\n", This, reserved, sort, display); - if (pSort) - *pSort = 0; - if (pDisplay) - *pDisplay = 0; - - return S_OK; + return E_NOTIMPL; } + static HRESULT WINAPI ISF_Desktop_fnGetDefaultColumnState ( IShellFolder2 * iface, UINT iColumn, DWORD * pcsFlags) { diff --git a/dlls/shell32/shfldr_fs.c b/dlls/shell32/shfldr_fs.c index 31c0043..0c1d95e 100644 --- a/dlls/shell32/shfldr_fs.c +++ b/dlls/shell32/shfldr_fs.c @@ -926,19 +926,13 @@ static HRESULT WINAPI IShellFolder_fnEnumSearches (IShellFolder2 * iface, } static HRESULT WINAPI -IShellFolder_fnGetDefaultColumn (IShellFolder2 * iface, DWORD dwRes, - ULONG * pSort, ULONG * pDisplay) +IShellFolder_fnGetDefaultColumn(IShellFolder2 *iface, DWORD reserved, ULONG *sort, ULONG *display) { IGenericSFImpl *This = impl_from_IShellFolder2(iface); - TRACE ("(%p)\n", This); - - if (pSort) - *pSort = 0; - if (pDisplay) - *pDisplay = 0; + TRACE("(%p)->(%#x, %p, %p)\n", This, reserved, sort, display); - return S_OK; + return E_NOTIMPL; } static HRESULT WINAPI diff --git a/dlls/shell32/shfldr_mycomp.c b/dlls/shell32/shfldr_mycomp.c index f5df7e1..c514cd8 100644 --- a/dlls/shell32/shfldr_mycomp.c +++ b/dlls/shell32/shfldr_mycomp.c @@ -782,19 +782,17 @@ static HRESULT WINAPI ISF_MyComputer_fnEnumSearches ( FIXME ("(%p)\n", This); return E_NOTIMPL; } -static HRESULT WINAPI ISF_MyComputer_fnGetDefaultColumn ( - IShellFolder2 *iface, DWORD dwRes, ULONG *pSort, ULONG *pDisplay) + +static HRESULT WINAPI ISF_MyComputer_fnGetDefaultColumn(IShellFolder2 *iface, DWORD reserved, + ULONG *sort, ULONG *display) { IMyComputerFolderImpl *This = impl_from_IShellFolder2(iface); - TRACE ("(%p)\n", This); + TRACE("(%p)->(%#x, %p, %p)\n", This, reserved, sort, display); - if (pSort) - *pSort = 0; - if (pDisplay) - *pDisplay = 0; - return S_OK; + return E_NOTIMPL; } + static HRESULT WINAPI ISF_MyComputer_fnGetDefaultColumnState ( IShellFolder2 * iface, UINT iColumn, DWORD * pcsFlags) { diff --git a/dlls/shell32/shfldr_netplaces.c b/dlls/shell32/shfldr_netplaces.c index f7834a2..e41359b 100644 --- a/dlls/shell32/shfldr_netplaces.c +++ b/dlls/shell32/shfldr_netplaces.c @@ -519,19 +519,14 @@ static HRESULT WINAPI ISF_NetworkPlaces_fnEnumSearches (IShellFolder2 * iface, return E_NOTIMPL; } -static HRESULT WINAPI ISF_NetworkPlaces_fnGetDefaultColumn (IShellFolder2 * iface, - DWORD dwRes, ULONG * pSort, ULONG * pDisplay) +static HRESULT WINAPI ISF_NetworkPlaces_fnGetDefaultColumn(IShellFolder2 *iface, DWORD reserved, + ULONG *sort, ULONG *display) { IGenericSFImpl *This = impl_from_IShellFolder2(iface); - TRACE ("(%p)\n", This); - - if (pSort) - *pSort = 0; - if (pDisplay) - *pDisplay = 0; + TRACE("(%p)->(%#x, %p, %p)\n", This, reserved, sort, display); - return S_OK; + return E_NOTIMPL; } static HRESULT WINAPI ISF_NetworkPlaces_fnGetDefaultColumnState ( diff --git a/dlls/shell32/shfldr_printers.c b/dlls/shell32/shfldr_printers.c index 16d1adb..08841fb 100644 --- a/dlls/shell32/shfldr_printers.c +++ b/dlls/shell32/shfldr_printers.c @@ -267,11 +267,13 @@ static HRESULT WINAPI IShellFolder_Printers_fnEnumSearches ( return E_NOTIMPL; } -static HRESULT WINAPI IShellFolder_Printers_fnGetDefaultColumn ( - IShellFolder2 *iface, DWORD dwRes, ULONG *pSort, ULONG *pDisplay) +static HRESULT WINAPI IShellFolder_Printers_fnGetDefaultColumn(IShellFolder2 *iface, DWORD reserved, + ULONG *sort, ULONG *display) { IPrintersFolderImpl *This = impl_from_IShellFolder2(iface); - FIXME("(%p) stub\n", This); + + TRACE("(%p)->(%#x, %p, %p)\n", This, reserved, sort, display); + return E_NOTIMPL; } diff --git a/dlls/shell32/shfldr_unixfs.c b/dlls/shell32/shfldr_unixfs.c index e74e4db..d9ac506 100644 --- a/dlls/shell32/shfldr_unixfs.c +++ b/dlls/shell32/shfldr_unixfs.c @@ -1437,19 +1437,13 @@ static HRESULT WINAPI ShellFolder2_EnumSearches(IShellFolder2* iface, IEnumExtra return E_NOTIMPL; } -static HRESULT WINAPI ShellFolder2_GetDefaultColumn(IShellFolder2* iface, - DWORD dwReserved, ULONG *pSort, ULONG *pDisplay) +static HRESULT WINAPI ShellFolder2_GetDefaultColumn(IShellFolder2* iface, DWORD reserved, ULONG *sort, ULONG *display) { UnixFolder *This = impl_from_IShellFolder2(iface); - TRACE("(%p)->(0x%x %p %p)\n", This, dwReserved, pSort, pDisplay); + TRACE("(%p)->(%#x, %p, %p)\n", This, reserved, sort, display); - if (pSort) - *pSort = 0; - if (pDisplay) - *pDisplay = 0; - - return S_OK; + return E_NOTIMPL; } static HRESULT WINAPI ShellFolder2_GetDefaultColumnState(IShellFolder2* iface, diff --git a/dlls/shell32/tests/shlfolder.c b/dlls/shell32/tests/shlfolder.c index 739e685..8ce7d74 100644 --- a/dlls/shell32/tests/shlfolder.c +++ b/dlls/shell32/tests/shlfolder.c @@ -5395,6 +5395,57 @@ static void test_DataObject(void) IDataObject_Release(data_obj); } +static void test_GetDefaultColumn(void) +{ + static const CLSID *folders[] = + { + &CLSID_MyComputer, + &CLSID_MyDocuments, + &CLSID_ControlPanel, + &CLSID_NetworkPlaces, + &CLSID_Printers, + &CLSID_RecycleBin, + &CLSID_ShellDesktop, + }; + HRESULT hr; + int i; + + CoInitialize(NULL); + + for (i = 0; i < sizeof(folders)/sizeof(folders[0]); i++) + { + IShellFolder2 *folder; + ULONG sort, display; + + hr = CoCreateInstance(folders[i], NULL, CLSCTX_INPROC_SERVER, &IID_IShellFolder2, (void **)&folder); + if (hr != S_OK) + { + win_skip("Failed to create folder %s, hr %#x.\n", wine_dbgstr_guid(folders[i]), hr); + continue; + } + + hr = IShellFolder2_GetDefaultColumn(folder, 0, NULL, NULL); + ok(hr == E_NOTIMPL, "Unexpected hr %#x.\n", hr); + + sort = display = 123; + hr = IShellFolder2_GetDefaultColumn(folder, 0, &sort, &display); + ok(hr == E_NOTIMPL, "Unexpected hr %#x.\n", hr); + ok(sort == 123 && display == 123, "Unexpected default column.\n"); + + display = 123; + hr = IShellFolder2_GetDefaultColumn(folder, 0, NULL, &display); + ok(hr == E_NOTIMPL, "Unexpected hr %#x.\n", hr); + ok(display == 123, "Unexpected default column.\n"); + + sort = 123; + hr = IShellFolder2_GetDefaultColumn(folder, 0, &sort, NULL); + ok(hr == E_NOTIMPL, "Unexpected hr %#x.\n", hr); + ok(sort == 123, "Unexpected default column.\n"); + } + + CoUninitialize(); +} + START_TEST(shlfolder) { init_function_pointers(); @@ -5434,6 +5485,7 @@ START_TEST(shlfolder) test_ShellItemArrayGetAttributes(); test_SHCreateDefaultContextMenu(); test_DataObject(); + test_GetDefaultColumn(); OleUninitialize(); }
1
0
0
0
Henri Verbeet : d2d1: Implement d2d_radial_gradient_brush_GetGradientStopCollection().
by Alexandre Julliard
27 Sep '17
27 Sep '17
Module: wine Branch: master Commit: 48dfe437f9053001ce2c24cd5958258f3e7f74d3 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=48dfe437f9053001ce2c24cd5…
Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Wed Sep 27 09:47:56 2017 +0200 d2d1: Implement d2d_radial_gradient_brush_GetGradientStopCollection(). Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/d2d1/brush.c | 11 +++++++++-- dlls/d2d1/d2d1_private.h | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/dlls/d2d1/brush.c b/dlls/d2d1/brush.c index 20e5b0e..f141c72 100644 --- a/dlls/d2d1/brush.c +++ b/dlls/d2d1/brush.c @@ -622,7 +622,10 @@ static ULONG STDMETHODCALLTYPE d2d_radial_gradient_brush_Release(ID2D1RadialGrad TRACE("%p decreasing refcount to %u.\n", iface, refcount); if (!refcount) + { + ID2D1GradientStopCollection_Release(&brush->u.radial.gradient->ID2D1GradientStopCollection_iface); d2d_brush_destroy(brush); + } return refcount; } @@ -744,9 +747,11 @@ static float STDMETHODCALLTYPE d2d_radial_gradient_brush_GetRadiusY(ID2D1RadialG static void STDMETHODCALLTYPE d2d_radial_gradient_brush_GetGradientStopCollection(ID2D1RadialGradientBrush *iface, ID2D1GradientStopCollection **gradient) { - FIXME("iface %p, gradient %p stub!\n", iface, gradient); + struct d2d_brush *brush = impl_from_ID2D1RadialGradientBrush(iface); + + TRACE("iface %p, gradient %p.\n", iface, gradient); - *gradient = NULL; + ID2D1GradientStopCollection_AddRef(*gradient = &brush->u.radial.gradient->ID2D1GradientStopCollection_iface); } static const struct ID2D1RadialGradientBrushVtbl d2d_radial_gradient_brush_vtbl = @@ -780,6 +785,8 @@ HRESULT d2d_radial_gradient_brush_create(ID2D1Factory *factory, return E_OUTOFMEMORY; d2d_brush_init(b, factory, D2D_BRUSH_TYPE_RADIAL, brush_desc, (ID2D1BrushVtbl *)&d2d_radial_gradient_brush_vtbl); + b->u.radial.gradient = unsafe_impl_from_ID2D1GradientStopCollection(gradient); + ID2D1GradientStopCollection_AddRef(&b->u.radial.gradient->ID2D1GradientStopCollection_iface); b->u.radial.centre = gradient_desc->center; b->u.radial.offset = gradient_desc->gradientOriginOffset; diff --git a/dlls/d2d1/d2d1_private.h b/dlls/d2d1/d2d1_private.h index b0c7fed..ccff6df 100644 --- a/dlls/d2d1/d2d1_private.h +++ b/dlls/d2d1/d2d1_private.h @@ -241,6 +241,7 @@ struct d2d_brush } linear; struct { + struct d2d_gradient *gradient; D2D1_POINT_2F centre; D2D1_POINT_2F offset; } radial;
1
0
0
0
Henri Verbeet : d2d1: Implement d2d_radial_gradient_brush_SetGradientOriginOffset().
by Alexandre Julliard
27 Sep '17
27 Sep '17
Module: wine Branch: master Commit: 5aef3d6352f352a49e2f20d9b11197b0b8b70d54 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=5aef3d6352f352a49e2f20d9b…
Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Wed Sep 27 09:47:55 2017 +0200 d2d1: Implement d2d_radial_gradient_brush_SetGradientOriginOffset(). Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/d2d1/brush.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dlls/d2d1/brush.c b/dlls/d2d1/brush.c index 8a080e1..20e5b0e 100644 --- a/dlls/d2d1/brush.c +++ b/dlls/d2d1/brush.c @@ -688,7 +688,11 @@ static void STDMETHODCALLTYPE d2d_radial_gradient_brush_SetCenter(ID2D1RadialGra static void STDMETHODCALLTYPE d2d_radial_gradient_brush_SetGradientOriginOffset(ID2D1RadialGradientBrush *iface, D2D1_POINT_2F offset) { - FIXME("iface %p, offset {%.8e, %.8e} stub!\n", iface, offset.x, offset.y); + struct d2d_brush *brush = impl_from_ID2D1RadialGradientBrush(iface); + + TRACE("iface %p, offset {%.8e, %.8e}.\n", iface, offset.x, offset.y); + + brush->u.radial.offset = offset; } static void STDMETHODCALLTYPE d2d_radial_gradient_brush_SetRadiusX(ID2D1RadialGradientBrush *iface, float radius)
1
0
0
0
Henri Verbeet : d2d1: Implement d2d_radial_gradient_brush_GetGradientOriginOffset().
by Alexandre Julliard
27 Sep '17
27 Sep '17
Module: wine Branch: master Commit: 2148545e25f0eb6e7322c0ec254cbf71641f117f URL:
http://source.winehq.org/git/wine.git/?a=commit;h=2148545e25f0eb6e7322c0ec2…
Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Wed Sep 27 09:47:54 2017 +0200 d2d1: Implement d2d_radial_gradient_brush_GetGradientOriginOffset(). Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/d2d1/brush.c | 7 +++++-- dlls/d2d1/d2d1_private.h | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/dlls/d2d1/brush.c b/dlls/d2d1/brush.c index 9df2301..8a080e1 100644 --- a/dlls/d2d1/brush.c +++ b/dlls/d2d1/brush.c @@ -715,9 +715,11 @@ static D2D1_POINT_2F * STDMETHODCALLTYPE d2d_radial_gradient_brush_GetCenter(ID2 static D2D1_POINT_2F * STDMETHODCALLTYPE d2d_radial_gradient_brush_GetGradientOriginOffset( ID2D1RadialGradientBrush *iface, D2D1_POINT_2F *offset) { - FIXME("iface %p, offset %p stub!\n", iface, offset); + struct d2d_brush *brush = impl_from_ID2D1RadialGradientBrush(iface); + + TRACE("iface %p, offset %p.\n", iface, offset); - d2d_point_set(offset, 0.0f, 0.0f); + *offset = brush->u.radial.offset; return offset; } @@ -775,6 +777,7 @@ HRESULT d2d_radial_gradient_brush_create(ID2D1Factory *factory, d2d_brush_init(b, factory, D2D_BRUSH_TYPE_RADIAL, brush_desc, (ID2D1BrushVtbl *)&d2d_radial_gradient_brush_vtbl); b->u.radial.centre = gradient_desc->center; + b->u.radial.offset = gradient_desc->gradientOriginOffset; TRACE("Created brush %p.\n", b); *brush = b; diff --git a/dlls/d2d1/d2d1_private.h b/dlls/d2d1/d2d1_private.h index 6054a1d..b0c7fed 100644 --- a/dlls/d2d1/d2d1_private.h +++ b/dlls/d2d1/d2d1_private.h @@ -242,6 +242,7 @@ struct d2d_brush struct { D2D1_POINT_2F centre; + D2D1_POINT_2F offset; } radial; struct {
1
0
0
0
Henri Verbeet : d2d1: Implement d2d_radial_gradient_brush_SetCenter().
by Alexandre Julliard
27 Sep '17
27 Sep '17
Module: wine Branch: master Commit: 85c4419859d41455ffd5c421219d40cae8f3e37f URL:
http://source.winehq.org/git/wine.git/?a=commit;h=85c4419859d41455ffd5c4212…
Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Wed Sep 27 09:47:53 2017 +0200 d2d1: Implement d2d_radial_gradient_brush_SetCenter(). Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/d2d1/brush.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dlls/d2d1/brush.c b/dlls/d2d1/brush.c index 01ebc0d..9df2301 100644 --- a/dlls/d2d1/brush.c +++ b/dlls/d2d1/brush.c @@ -678,7 +678,11 @@ static void STDMETHODCALLTYPE d2d_radial_gradient_brush_GetTransform(ID2D1Radial static void STDMETHODCALLTYPE d2d_radial_gradient_brush_SetCenter(ID2D1RadialGradientBrush *iface, D2D1_POINT_2F centre) { - FIXME("iface %p, centre {%.8e, %.8e} stub!\n", iface, centre.x, centre.y); + struct d2d_brush *brush = impl_from_ID2D1RadialGradientBrush(iface); + + TRACE("iface %p, centre {%.8e, %.8e}.\n", iface, centre.x, centre.y); + + brush->u.radial.centre = centre; } static void STDMETHODCALLTYPE d2d_radial_gradient_brush_SetGradientOriginOffset(ID2D1RadialGradientBrush *iface,
1
0
0
0
Henri Verbeet : d2d1: Implement d2d_radial_gradient_brush_GetCenter().
by Alexandre Julliard
27 Sep '17
27 Sep '17
Module: wine Branch: master Commit: 4482324455485c7bed9a3d977dcdf576845f37e6 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=4482324455485c7bed9a3d977…
Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Wed Sep 27 09:47:52 2017 +0200 d2d1: Implement d2d_radial_gradient_brush_GetCenter(). Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/d2d1/brush.c | 10 +++++++--- dlls/d2d1/d2d1_private.h | 7 ++++++- dlls/d2d1/render_target.c | 2 +- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/dlls/d2d1/brush.c b/dlls/d2d1/brush.c index 7f4c7bb..01ebc0d 100644 --- a/dlls/d2d1/brush.c +++ b/dlls/d2d1/brush.c @@ -700,9 +700,11 @@ static void STDMETHODCALLTYPE d2d_radial_gradient_brush_SetRadiusY(ID2D1RadialGr static D2D1_POINT_2F * STDMETHODCALLTYPE d2d_radial_gradient_brush_GetCenter(ID2D1RadialGradientBrush *iface, D2D1_POINT_2F *centre) { - FIXME("iface %p, centre %p stub!\n", iface, centre); + struct d2d_brush *brush = impl_from_ID2D1RadialGradientBrush(iface); + + TRACE("iface %p, centre %p.\n", iface, centre); - d2d_point_set(centre, 0.0f, 0.0f); + *centre = brush->u.radial.centre; return centre; } @@ -758,7 +760,8 @@ static const struct ID2D1RadialGradientBrushVtbl d2d_radial_gradient_brush_vtbl d2d_radial_gradient_brush_GetGradientStopCollection, }; -HRESULT d2d_radial_gradient_brush_create(ID2D1Factory *factory, const D2D1_BRUSH_PROPERTIES *brush_desc, +HRESULT d2d_radial_gradient_brush_create(ID2D1Factory *factory, + const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *gradient_desc, const D2D1_BRUSH_PROPERTIES *brush_desc, ID2D1GradientStopCollection *gradient, struct d2d_brush **brush) { struct d2d_brush *b; @@ -767,6 +770,7 @@ HRESULT d2d_radial_gradient_brush_create(ID2D1Factory *factory, const D2D1_BRUSH return E_OUTOFMEMORY; d2d_brush_init(b, factory, D2D_BRUSH_TYPE_RADIAL, brush_desc, (ID2D1BrushVtbl *)&d2d_radial_gradient_brush_vtbl); + b->u.radial.centre = gradient_desc->center; TRACE("Created brush %p.\n", b); *brush = b; diff --git a/dlls/d2d1/d2d1_private.h b/dlls/d2d1/d2d1_private.h index 0a4bb89..6054a1d 100644 --- a/dlls/d2d1/d2d1_private.h +++ b/dlls/d2d1/d2d1_private.h @@ -241,6 +241,10 @@ struct d2d_brush } linear; struct { + D2D1_POINT_2F centre; + } radial; + struct + { struct d2d_bitmap *bitmap; D2D1_EXTEND_MODE extend_mode_x; D2D1_EXTEND_MODE extend_mode_y; @@ -255,7 +259,8 @@ HRESULT d2d_solid_color_brush_create(ID2D1Factory *factory, const D2D1_COLOR_F * HRESULT d2d_linear_gradient_brush_create(ID2D1Factory *factory, const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *gradient_desc, const D2D1_BRUSH_PROPERTIES *brush_desc, ID2D1GradientStopCollection *gradient, struct d2d_brush **brush) DECLSPEC_HIDDEN; -HRESULT d2d_radial_gradient_brush_create(ID2D1Factory *factory, const D2D1_BRUSH_PROPERTIES *brush_desc, +HRESULT d2d_radial_gradient_brush_create(ID2D1Factory *factory, + const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *gradient_desc, const D2D1_BRUSH_PROPERTIES *brush_desc, ID2D1GradientStopCollection *gradient, struct d2d_brush **brush) DECLSPEC_HIDDEN; HRESULT d2d_bitmap_brush_create(ID2D1Factory *factory, ID2D1Bitmap *bitmap, const D2D1_BITMAP_BRUSH_PROPERTIES *bitmap_brush_desc, const D2D1_BRUSH_PROPERTIES *brush_desc, diff --git a/dlls/d2d1/render_target.c b/dlls/d2d1/render_target.c index a5fee20..2f41f44 100644 --- a/dlls/d2d1/render_target.c +++ b/dlls/d2d1/render_target.c @@ -417,7 +417,7 @@ static HRESULT STDMETHODCALLTYPE d2d_d3d_render_target_CreateRadialGradientBrush iface, gradient_brush_desc, brush_desc, gradient, brush); if (SUCCEEDED(hr = d2d_radial_gradient_brush_create(render_target->factory, - brush_desc, gradient, &object))) + gradient_brush_desc, brush_desc, gradient, &object))) *brush = (ID2D1RadialGradientBrush *)&object->ID2D1Brush_iface; return hr;
1
0
0
0
Alistair Leslie-Hughes : hnetcfg: Implement INetFwPolicy2 get_Rules.
by Alexandre Julliard
27 Sep '17
27 Sep '17
Module: wine Branch: master Commit: 19e72fe14921a30fb332321342868d352fc5b56f URL:
http://source.winehq.org/git/wine.git/?a=commit;h=19e72fe14921a30fb33232134…
Author: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Date: Mon Sep 25 22:43:37 2017 +0000 hnetcfg: Implement INetFwPolicy2 get_Rules. Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/hnetcfg/hnetcfg_private.h | 1 + dlls/hnetcfg/policy.c | 245 ++++++++++++++++++++++++++++++++++++++++- dlls/hnetcfg/tests/policy.c | 37 +++++++ 3 files changed, 281 insertions(+), 2 deletions(-) diff --git a/dlls/hnetcfg/hnetcfg_private.h b/dlls/hnetcfg/hnetcfg_private.h index 812d970..5245883 100644 --- a/dlls/hnetcfg/hnetcfg_private.h +++ b/dlls/hnetcfg/hnetcfg_private.h @@ -26,6 +26,7 @@ enum type_id INetFwPolicy_tid, INetFwPolicy2_tid, INetFwProfile_tid, + INetFwRules_tid, last_tid }; diff --git a/dlls/hnetcfg/policy.c b/dlls/hnetcfg/policy.c index 285ee0f..c2f3252 100644 --- a/dlls/hnetcfg/policy.c +++ b/dlls/hnetcfg/policy.c @@ -48,6 +48,7 @@ static inline fw_policy *impl_from_INetFwPolicy( INetFwPolicy *iface ) typedef struct fw_policy2 { INetFwPolicy2 INetFwPolicy2_iface; + INetFwRules *fw_policy2_rules; LONG refs; } fw_policy2; @@ -56,6 +57,224 @@ static inline fw_policy2 *impl_from_INetFwPolicy2( INetFwPolicy2 *iface ) return CONTAINING_RECORD(iface, fw_policy2, INetFwPolicy2_iface); } +typedef struct fw_rules +{ + INetFwRules INetFwRules_iface; + LONG refs; +} fw_rules; + +static inline fw_rules *impl_from_INetFwRules( INetFwRules *iface ) +{ + return CONTAINING_RECORD(iface, fw_rules, INetFwRules_iface); +} + +static HRESULT WINAPI netfw_rules_QueryInterface( + INetFwRules *iface, + REFIID riid, + void **object) +{ + fw_rules *This = impl_from_INetFwRules( iface ); + + TRACE("%p %s %p\n", This, debugstr_guid( riid ), object ); + + if ( IsEqualGUID( riid, &IID_INetFwRules ) || + IsEqualGUID( riid, &IID_IDispatch ) || + IsEqualGUID( riid, &IID_IUnknown ) ) + { + *object = iface; + } + else + { + FIXME("interface %s not implemented\n", debugstr_guid(riid)); + return E_NOINTERFACE; + } + INetFwRules_AddRef( iface ); + return S_OK; +} + +static ULONG WINAPI netfw_rules_AddRef( + INetFwRules *iface ) +{ + fw_rules *This = impl_from_INetFwRules( iface ); + return InterlockedIncrement( &This->refs ); +} + +static ULONG WINAPI netfw_rules_Release( + INetFwRules *iface ) +{ + fw_rules *This = impl_from_INetFwRules( iface ); + LONG refs = InterlockedDecrement( &This->refs ); + if (!refs) + { + TRACE("destroying %p\n", This); + HeapFree( GetProcessHeap(), 0, This ); + } + return refs; +} + +static HRESULT WINAPI netfw_rules_GetTypeInfoCount( + INetFwRules *iface, + UINT *pctinfo ) +{ + fw_rules *This = impl_from_INetFwRules( iface ); + + TRACE("%p %p\n", This, pctinfo); + *pctinfo = 1; + return S_OK; +} + +static HRESULT WINAPI netfw_rules_GetTypeInfo( + INetFwRules *iface, + UINT iTInfo, + LCID lcid, + ITypeInfo **ppTInfo) +{ + fw_rules *This = impl_from_INetFwRules( iface ); + + TRACE("%p %u %u %p\n", This, iTInfo, lcid, ppTInfo); + return get_typeinfo( INetFwRules_tid, ppTInfo ); +} + +static HRESULT WINAPI netfw_rules_GetIDsOfNames( + INetFwRules *iface, + REFIID riid, + LPOLESTR *rgszNames, + UINT cNames, + LCID lcid, + DISPID *rgDispId) +{ + fw_rules *This = impl_from_INetFwRules( iface ); + ITypeInfo *typeinfo; + HRESULT hr; + + TRACE("%p %s %p %u %u %p\n", This, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId); + + hr = get_typeinfo( INetFwRules_tid, &typeinfo ); + if (SUCCEEDED(hr)) + { + hr = ITypeInfo_GetIDsOfNames( typeinfo, rgszNames, cNames, rgDispId ); + ITypeInfo_Release( typeinfo ); + } + return hr; +} + +static HRESULT WINAPI netfw_rules_Invoke( + INetFwRules *iface, + DISPID dispIdMember, + REFIID riid, + LCID lcid, + WORD wFlags, + DISPPARAMS *pDispParams, + VARIANT *pVarResult, + EXCEPINFO *pExcepInfo, + UINT *puArgErr) +{ + fw_rules *This = impl_from_INetFwRules( iface ); + ITypeInfo *typeinfo; + HRESULT hr; + + TRACE("%p %d %s %d %d %p %p %p %p\n", This, dispIdMember, debugstr_guid(riid), + lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); + + hr = get_typeinfo( INetFwRules_tid, &typeinfo ); + if (SUCCEEDED(hr)) + { + hr = ITypeInfo_Invoke( typeinfo, &This->INetFwRules_iface, dispIdMember, + wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr ); + ITypeInfo_Release( typeinfo ); + } + return hr; +} + +static HRESULT WINAPI netfw_rules_get_Count( + INetFwRules *iface, + LONG *count) +{ + fw_rules *This = impl_from_INetFwRules( iface ); + + FIXME("%p, %p\n", This, count); + + if (count) + *count = 0; + + return S_OK; +} + +static HRESULT WINAPI netfw_rules_Add( + INetFwRules *iface, + INetFwRule *rule) +{ + fw_rules *This = impl_from_INetFwRules( iface ); + + FIXME("%p, %p\n", This, rule); + return E_NOTIMPL; +} + +static HRESULT WINAPI netfw_rules_Remove( + INetFwRules *iface, + BSTR name) +{ + fw_rules *This = impl_from_INetFwRules( iface ); + + FIXME("%p, %s\n", This, debugstr_w(name)); + return E_NOTIMPL; +} + +static HRESULT WINAPI netfw_rules_Item( + INetFwRules *iface, + BSTR name, + INetFwRule **rule) +{ + fw_rules *This = impl_from_INetFwRules( iface ); + + FIXME("%p, %s, %p\n", This, debugstr_w(name), rule); + return E_NOTIMPL; +} + +static HRESULT WINAPI netfw_rules_get__NewEnum( + INetFwRules *iface, + IUnknown **newEnum) +{ + fw_rules *This = impl_from_INetFwRules( iface ); + + FIXME("%p, %p\n", This, newEnum); + return E_NOTIMPL; +} + +static const struct INetFwRulesVtbl fw_rules_vtbl = +{ + netfw_rules_QueryInterface, + netfw_rules_AddRef, + netfw_rules_Release, + netfw_rules_GetTypeInfoCount, + netfw_rules_GetTypeInfo, + netfw_rules_GetIDsOfNames, + netfw_rules_Invoke, + netfw_rules_get_Count, + netfw_rules_Add, + netfw_rules_Remove, + netfw_rules_Item, + netfw_rules_get__NewEnum +}; + +static HRESULT create_INetFwRules(INetFwRules **object) +{ + fw_rules *rules; + + TRACE("(%p)\n", object); + + rules = HeapAlloc( GetProcessHeap(), 0, sizeof(*rules) ); + if (!rules) return E_OUTOFMEMORY; + + rules->INetFwRules_iface.lpVtbl = &fw_rules_vtbl; + rules->refs = 1; + + *object = &rules->INetFwRules_iface; + + TRACE("returning iface %p\n", *object); + return S_OK; +} + static ULONG WINAPI fw_policy_AddRef( INetFwPolicy *iface ) { @@ -238,6 +457,11 @@ static HRESULT WINAPI fwpolicy2_QueryInterface(INetFwPolicy2 *iface, REFIID riid { *out = iface; } + else if( IsEqualGUID( riid, &IID_INetFwRules ) ) + { + TRACE("INetFwRules not supported\n"); + return E_NOINTERFACE; + } else { FIXME("interface %s not implemented\n", debugstr_guid(riid)); @@ -259,6 +483,7 @@ static ULONG WINAPI fwpolicy2_Release(INetFwPolicy2 *iface) LONG refs = InterlockedDecrement( &fw_policy->refs ); if (!refs) { + INetFwRules_Release(fw_policy->fw_policy2_rules); TRACE("destroying %p\n", fw_policy); HeapFree( GetProcessHeap(), 0, fw_policy ); } @@ -411,8 +636,18 @@ static HRESULT WINAPI fwpolicy2_get_Rules(INetFwPolicy2 *iface, INetFwRules **ru { fw_policy2 *This = impl_from_INetFwPolicy2( iface ); - FIXME("%p %p\n", This, rules); - return E_NOTIMPL; + TRACE("%p %p\n", This, rules); + + if(!rules) + return E_POINTER; + + if(rules) + { + *rules = This->fw_policy2_rules; + INetFwRules_AddRef(This->fw_policy2_rules); + } + + return S_OK; } static HRESULT WINAPI fwpolicy2_get_ServiceRestriction(INetFwPolicy2 *iface, INetFwServiceRestriction **ServiceRestriction) @@ -542,6 +777,12 @@ HRESULT NetFwPolicy2_create( IUnknown *outer, void **obj ) *obj = &fp->INetFwPolicy2_iface; + if (FAILED(create_INetFwRules(&fp->fw_policy2_rules))) + { + HeapFree( GetProcessHeap(), 0, fp ); + return E_OUTOFMEMORY; + } + TRACE("returning iface %p\n", *obj); return S_OK; } diff --git a/dlls/hnetcfg/tests/policy.c b/dlls/hnetcfg/tests/policy.c index a3ed4b2..7b5bef0 100644 --- a/dlls/hnetcfg/tests/policy.c +++ b/dlls/hnetcfg/tests/policy.c @@ -28,6 +28,41 @@ #include "netfw.h" +static void test_policy2_rules(INetFwPolicy2 *policy2) +{ + HRESULT hr; + INetFwRules *rules, *rules2; + INetFwServiceRestriction *restriction; + + hr = INetFwPolicy2_QueryInterface(policy2, &IID_INetFwRules, (void**)&rules); + ok(hr == E_NOINTERFACE, "got 0x%08x\n", hr); + + hr = INetFwPolicy2_get_Rules(policy2, &rules); + ok(hr == S_OK, "got %08x\n", hr); + + hr = INetFwPolicy2_get_Rules(policy2, &rules2); + ok(hr == S_OK, "got %08x\n", hr); + ok(rules == rules2, "Different pointers\n"); + + hr = INetFwPolicy2_get_ServiceRestriction(policy2, &restriction); + todo_wine ok(hr == S_OK, "got %08x\n", hr); + if(hr == S_OK) + { + INetFwRules *rules3; + + hr = INetFwServiceRestriction_get_Rules(restriction, &rules3); + ok(hr == S_OK, "got %08x\n", hr); + ok(rules != rules3, "same pointers\n"); + + if(rules3) + INetFwRules_Release(rules3); + INetFwServiceRestriction_Release(restriction); + } + + INetFwRules_Release(rules); + INetFwRules_Release(rules2); +} + static void test_interfaces(void) { INetFwMgr *manager; @@ -57,6 +92,8 @@ static void test_interfaces(void) &IID_INetFwPolicy2, (void**)&policy2); if(hr == S_OK) { + test_policy2_rules(policy2); + INetFwPolicy2_Release(policy2); } else
1
0
0
0
Alexandre Julliard : ntdll: Support loading binaries that start inside the DOS area.
by Alexandre Julliard
27 Sep '17
27 Sep '17
Module: wine Branch: master Commit: a27f187503f55de4b0c703bdb2d24dd07cd63cc1 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=a27f187503f55de4b0c703bdb…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Wed Sep 27 09:30:05 2017 +0200 ntdll: Support loading binaries that start inside the DOS area. Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntdll/virtual.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dlls/ntdll/virtual.c b/dlls/ntdll/virtual.c index c64a31d..d0d25c7 100644 --- a/dlls/ntdll/virtual.c +++ b/dlls/ntdll/virtual.c @@ -1593,6 +1593,8 @@ void virtual_init(void) { preload_reserve_start = (void *)start; preload_reserve_end = (void *)end; + /* some apps start inside the DOS area */ + address_space_start = min( address_space_start, preload_reserve_start ); } }
1
0
0
0
Alex Henrie : shell32: Implement ShellExec_RunDLL.
by Alexandre Julliard
27 Sep '17
27 Sep '17
Module: wine Branch: master Commit: 67826491a69f9cddfea6feef0ba27ddd0efe384a URL:
http://source.winehq.org/git/wine.git/?a=commit;h=67826491a69f9cddfea6feef0…
Author: Alex Henrie <alexhenrie24(a)gmail.com> Date: Mon Sep 25 22:52:52 2017 -0600 shell32: Implement ShellExec_RunDLL. Signed-off-by: Alex Henrie <alexhenrie24(a)gmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/shell32/shell32.spec | 6 +++--- dlls/shell32/shlexec.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/dlls/shell32/shell32.spec b/dlls/shell32/shell32.spec index 6974332..6d2c61b 100644 --- a/dlls/shell32/shell32.spec +++ b/dlls/shell32/shell32.spec @@ -440,9 +440,9 @@ @ stub SheShortenPathW @ stdcall ShellAboutA(long str str long) @ stdcall ShellAboutW(long wstr wstr long) -@ stub ShellExec_RunDLL -@ stub ShellExec_RunDLLA -@ stub ShellExec_RunDLLW +@ stdcall ShellExec_RunDLL(long long str long) ShellExec_RunDLLA +@ stdcall ShellExec_RunDLLA(long long str long) +@ stdcall ShellExec_RunDLLW(long long wstr long) @ stdcall ShellExecuteA(long str str str str long) @ stdcall ShellExecuteEx (long) ShellExecuteExA @ stdcall ShellExecuteExA (long) diff --git a/dlls/shell32/shlexec.c b/dlls/shell32/shlexec.c index c0ef53a..7a432c6 100644 --- a/dlls/shell32/shlexec.c +++ b/dlls/shell32/shlexec.c @@ -2016,6 +2016,58 @@ HINSTANCE WINAPI WOWShellExecute(HWND hWnd, LPCSTR lpVerb,LPCSTR lpFile, } /************************************************************************* + * ShellExec_RunDLLW [SHELL32.@] + */ +void WINAPI ShellExec_RunDLLW(HWND hwnd, HINSTANCE instance, WCHAR *cmdline, int cmdshow) +{ + BOOL in_single_quotes = FALSE, in_double_quotes = FALSE; + WCHAR *args; + + TRACE("%p, %p, %s, %d\n", hwnd, instance, debugstr_w(cmdline), cmdshow); + + /* Replace the first whitespace character in the command line string with a + null terminator to separate the program name from the program arguments */ + for (args = cmdline; *args; args++) + { + switch (*args) + { + case '\\': + args++; /* skip the next character */ + break; + case '\'': + if (!in_double_quotes) + in_single_quotes = !in_single_quotes; + break; + case '"': + if (!in_single_quotes) + in_double_quotes = !in_double_quotes; + break; + case ' ': + case '\t': + if (!in_single_quotes && !in_double_quotes) + { + *args = 0; + args++; + goto execute; + } + } + } + +execute: + ShellExecuteW(hwnd, NULL, cmdline, args, NULL, cmdshow); +} + +/************************************************************************* + * ShellExec_RunDLLA [SHELL32.@] + */ +void WINAPI ShellExec_RunDLLA(HWND hwnd, HINSTANCE instance, CHAR *cmdline, int cmdshow) +{ + WCHAR *cmdlineW; + ShellExec_RunDLLW(hwnd, instance, __SHCloneStrAtoW(&cmdlineW, cmdline), cmdshow); + SHFree(cmdlineW); +} + +/************************************************************************* * OpenAs_RunDLLA [SHELL32.@] */ void WINAPI OpenAs_RunDLLA(HWND hwnd, HINSTANCE hinst, LPCSTR cmdline, int cmdshow)
1
0
0
0
← Newer
1
2
3
4
5
6
7
8
9
...
45
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
Results per page:
10
25
50
100
200