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
May 2007
----- 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
3 participants
715 discussions
Start a n
N
ew thread
Andrey Turkin : shlwapi: Implement IUnknown_CPContainerInvokeParam.
by Alexandre Julliard
04 May '07
04 May '07
Module: wine Branch: master Commit: 82997149528bf50c61d91feb0ab2b431214cd571 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=82997149528bf50c61d91feb0…
Author: Andrey Turkin <andrey.turkin(a)gmail.com> Date: Fri May 4 10:46:36 2007 +0400 shlwapi: Implement IUnknown_CPContainerInvokeParam. --- dlls/shlwapi/ordinal.c | 77 +++++++++++++++++++++++++++++++++++++++++++++ dlls/shlwapi/shlwapi.spec | 2 +- 2 files changed, 78 insertions(+), 1 deletions(-) diff --git a/dlls/shlwapi/ordinal.c b/dlls/shlwapi/ordinal.c index f480482..213980c 100644 --- a/dlls/shlwapi/ordinal.c +++ b/dlls/shlwapi/ordinal.c @@ -2962,6 +2962,83 @@ HRESULT WINAPI IConnectionPoint_OnChanged(IConnectionPoint* lpCP, DISPID dispID) } /************************************************************************* + * @ [SHLWAPI.286] + * + * IUnknown_CPContainerInvokeParam + */ +HRESULT WINAPIV IUnknown_CPContainerInvokeParam( + IUnknown *container, + REFIID riid, + DISPID dispId, + VARIANTARG* buffer, + DWORD cParams, ...) +{ + HRESULT result; + IConnectionPoint *iCP; + IConnectionPointContainer *iCPC; + + if (!container) + return E_NOINTERFACE; + + result = IUnknown_QueryInterface(container, &IID_IConnectionPointContainer,(LPVOID*) &iCPC); + if (SUCCEEDED(result)) + { + result = IConnectionPointContainer_FindConnectionPoint(iCPC, riid, &iCP); + IConnectionPointContainer_Release(iCPC); + } + + if (SUCCEEDED(result)) + { + ULONG cnt; + VARIANTARG *curvar = buffer+cParams-1; + DISPPARAMS dispParams = {buffer, NULL, cParams, 0}; + va_list valist; + + va_start(valist, cParams); + for(cnt=cParams;cnt>0;cnt--,curvar--) /* backwards for some reason */ + { + enum VARENUM vt = va_arg(valist, enum VARENUM); + memset(curvar, 0, sizeof(*curvar)); + if (vt & VT_BYREF) + { + V_VT(curvar) = vt; + V_BYREF(curvar) = va_arg(valist, LPVOID); + } else + switch(vt) + { + case VT_BSTR: + V_VT(curvar) = vt; + V_BSTR(curvar) = va_arg(valist, BSTR); + break; + case VT_DISPATCH: + V_VT(curvar) = vt; + V_DISPATCH(curvar) = va_arg(valist, IDispatch*); + break; + case VT_BOOL: + V_VT(curvar) = vt; + V_BOOL(curvar) = va_arg(valist, int); + break; + case VT_UNKNOWN: + V_VT(curvar) = vt; + V_UNKNOWN(curvar) = va_arg(valist, IUnknown*); + break; + case VT_I4: + default: + V_VT(curvar) = VT_I4; + V_I4(curvar) = va_arg(valist, LONG); + break; + } + } + va_end(valist); + + result = SHLWAPI_InvokeByIID(iCP, riid, dispId, &dispParams); + IConnectionPoint_Release(iCP); + } + + return result; +} + +/************************************************************************* * @ [SHLWAPI.287] * * Notify an IConnectionPointContainer object of changes. diff --git a/dlls/shlwapi/shlwapi.spec b/dlls/shlwapi/shlwapi.spec index cca778d..ec7d259 100644 --- a/dlls/shlwapi/shlwapi.spec +++ b/dlls/shlwapi/shlwapi.spec @@ -283,7 +283,7 @@ 283 stub -noname IConnectionPoint_InvokeWithCancel 284 stdcall -noname IConnectionPoint_SimpleInvoke(ptr long ptr) 285 stdcall -noname IConnectionPoint_OnChanged(ptr long) -286 stub -noname IUnknown_CPContainerInvokeParam +286 varargs -noname IUnknown_CPContainerInvokeParam(ptr ptr long ptr long) 287 stdcall -noname IUnknown_CPContainerOnChanged(ptr long) 288 stub -noname IUnknown_CPContainerInvokeIndirect 289 stdcall -noname PlaySoundWrapW(wstr long long)
1
0
0
0
Misha Koshelev : msi/tests: automation: Integrate test_createrecord_and_version properly.
by Alexandre Julliard
04 May '07
04 May '07
Module: wine Branch: master Commit: d49b251db9f2b9785c4693366893ffb2aa4c5abf URL:
http://source.winehq.org/git/wine.git/?a=commit;h=d49b251db9f2b9785c4693366…
Author: Misha Koshelev <mk144210(a)bcm.edu> Date: Thu May 3 19:02:31 2007 -0500 msi/tests: automation: Integrate test_createrecord_and_version properly. --- dlls/msi/tests/automation.c | 139 +++++++++++++++++++++---------------------- 1 files changed, 68 insertions(+), 71 deletions(-) diff --git a/dlls/msi/tests/automation.c b/dlls/msi/tests/automation.c index 0340148..c84c54b 100644 --- a/dlls/msi/tests/automation.c +++ b/dlls/msi/tests/automation.c @@ -400,74 +400,6 @@ static void test_dispid(void) } } -/* FIXME: This should be integrated better into the rest of the tests */ -static void test_createrecord_and_version(void) -{ - IDispatch *record = NULL; - DISPPARAMS param; - VARIANTARG varg; - VARIANT result; - DISPID dispid; - DISPID arg; - HRESULT r; - - arg = 0; - - V_UINT(&varg) = 1; - V_VT(&varg) = VT_I4; - - param.cArgs = 1; - param.cNamedArgs = 0; - param.rgvarg = &varg; - param.rgdispidNamedArgs = &arg; - - dispid = get_dispid( pInstaller, "CreateRecord" ); - - r = IDispatch_Invoke( pInstaller, dispid, &IID_NULL, 0, - DISPATCH_METHOD, ¶m, &result, NULL, NULL); - todo_wine ok( r == S_OK, "dispatch failed %08x\n", r); - if (SUCCEEDED(r)) - { - ok( V_VT(&result) == VT_DISPATCH, "type wrong\n"); - - record = V_DISPATCH(&result); - - memset( &result, 0, sizeof result ); - dispid = get_dispid( record, "FieldCount" ); - - param.cArgs = 0; - param.cNamedArgs = 0; - param.rgvarg = &varg; - param.rgdispidNamedArgs = &arg; - - r = IDispatch_Invoke( record, dispid, &IID_NULL, 0, - DISPATCH_PROPERTYGET, ¶m, &result, NULL, NULL ); - ok( r == S_OK, "dispatch failed %08x\n", r); - - ok( V_VT(&result) == VT_I4, "type wrong\n"); - ok( V_I4(&result) == 1, "field count wrong\n"); - - IDispatch_Release( record ); - } - else - skip( "failed to create record\n"); - - memset( &result, 0, sizeof result ); - dispid = get_dispid( pInstaller, "Version" ); - - param.cArgs = 0; - param.cNamedArgs = 0; - param.rgvarg = &varg; - param.rgdispidNamedArgs = &arg; - - r = IDispatch_Invoke( pInstaller, dispid, &IID_NULL, 0, - DISPATCH_PROPERTYGET, ¶m, &result, NULL, NULL ); - todo_wine { - ok( r == S_OK, "dispatch failed %08x\n", r); - ok( V_VT(&result) == VT_BSTR, "type wrong %d\n", V_VT(&result)); - } -} - /* Test basic IDispatch functions */ static void test_dispatch(void) { @@ -534,6 +466,9 @@ static HRESULT invoke(IDispatch *pDispatch, LPCSTR szName, WORD wFlags, DISPPARA int i; UINT len; + memset(pVarResult, 0, sizeof(VARIANT)); + VariantInit(pVarResult); + len = MultiByteToWideChar(CP_ACP, 0, szName, -1, NULL, 0 ); name = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR) ); if (!name) return E_FAIL; @@ -543,7 +478,6 @@ static HRESULT invoke(IDispatch *pDispatch, LPCSTR szName, WORD wFlags, DISPPARA ok(SUCCEEDED(hr), "IDispatch::GetIDsOfNames returned 0x%08x\n", hr); if (!SUCCEEDED(hr)) return hr; - VariantInit(pVarResult); memset(&excepinfo, 0, sizeof(excepinfo)); hr = IDispatch_Invoke(pDispatch, dispid, &IID_NULL, LOCALE_NEUTRAL, wFlags, pDispParams, pVarResult, &excepinfo, NULL); @@ -565,6 +499,22 @@ static HRESULT invoke(IDispatch *pDispatch, LPCSTR szName, WORD wFlags, DISPPARA /* Object_Property helper functions */ +static HRESULT Installer_CreateRecord(int count, IDispatch **pRecord) +{ + VARIANT varresult; + VARIANTARG vararg[1]; + DISPPARAMS dispparams = {vararg, NULL, sizeof(vararg)/sizeof(VARIANTARG), 0}; + HRESULT hr; + + VariantInit(&vararg[0]); + V_VT(&vararg[0]) = VT_I4; + V_I4(&vararg[0]) = count; + + hr = invoke(pInstaller, "CreateRecord", DISPATCH_METHOD, &dispparams, &varresult, VT_DISPATCH); + *pRecord = V_DISPATCH(&varresult); + return hr; +} + static HRESULT Installer_OpenPackage(LPCWSTR szPackagePath, int options, IDispatch **pSession) { VARIANT varresult; @@ -584,6 +534,18 @@ static HRESULT Installer_OpenPackage(LPCWSTR szPackagePath, int options, IDispat return hr; } +static HRESULT Installer_VersionGet(LPCWSTR szVersion) +{ + VARIANT varresult; + DISPPARAMS dispparams = {NULL, NULL, 0, 0}; + HRESULT hr; + + hr = invoke(pInstaller, "Version", DISPATCH_PROPERTYGET, &dispparams, &varresult, VT_BSTR); + lstrcpyW((WCHAR *)szVersion, V_BSTR(&varresult)); + VariantClear(&varresult); + return hr; +} + static HRESULT Session_PropertyGet(IDispatch *pSession, LPCWSTR szName, LPCWSTR szReturn) { VARIANT varresult; @@ -801,6 +763,16 @@ static HRESULT View_Close(IDispatch *pView) return invoke(pView, "Close", DISPATCH_METHOD, &dispparams, &varresult, VT_EMPTY); } +static HRESULT Record_FieldCountGet(IDispatch *pRecord, int *pFieldCount) +{ + VARIANT varresult; + DISPPARAMS dispparams = {NULL, NULL, 0, 0}; + HRESULT hr = invoke(pRecord, "FieldCount", DISPATCH_PROPERTYGET, &dispparams, &varresult, VT_I4); + *pFieldCount = V_I4(&varresult); + VariantClear(&varresult); + return hr; +} + static HRESULT Record_StringDataGet(IDispatch *pRecord, int iField, LPCWSTR szString) { VARIANT varresult; @@ -1013,10 +985,29 @@ static void test_Installer(void) WCHAR szPath[MAX_PATH]; HRESULT hr; UINT len; - IDispatch *pSession = NULL; + IDispatch *pSession = NULL, *pRecord = NULL; if (!pInstaller) return; + /* Installer::CreateRecord */ + todo_wine { + hr = Installer_CreateRecord(1, &pRecord); + ok(SUCCEEDED(hr), "Installer_CreateRecord failed, hresult 0x%08x\n", hr); + ok(pRecord != NULL, "Installer_CreateRecord should not have returned NULL record\n"); + } + if (pRecord) + { + int iFieldCount = 0; + + /* Record::FieldCountGet */ + hr = Record_FieldCountGet(pRecord, &iFieldCount); + ok(SUCCEEDED(hr), "Record_FiledCountGet failed, hresult 0x%08x\n", hr); + ok(iFieldCount == 1, "Record_FieldCountGet result was %d but expected 1\n", iFieldCount); + + IDispatch_Release(pRecord); + } + + /* Prepare package */ create_database(msifile, tables, sizeof(tables) / sizeof(msi_table)); len = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, CURR_DIR, -1, szPath, MAX_PATH); @@ -1036,6 +1027,13 @@ static void test_Installer(void) } DeleteFileA(msifile); + + /* Installer::Version */ + todo_wine { + memset(szPath, 0, sizeof(szPath)); + hr = Installer_VersionGet(szPath); + ok(SUCCEEDED(hr), "Installer_VersionGet failed, hresult 0x%08x\n", hr); + } } START_TEST(automation) @@ -1069,7 +1067,6 @@ START_TEST(automation) ok (SUCCEEDED(hr), "IUnknown::QueryInterface returned 0x%08x\n", hr); test_dispid(); - test_createrecord_and_version(); test_dispatch(); test_Installer();
1
0
0
0
Misha Koshelev : msi/tests: automation: Convert method names to Unicode on the fly to simplify adding new tests.
by Alexandre Julliard
04 May '07
04 May '07
Module: wine Branch: master Commit: 357f3db286f3c6594cb370bda362893a3368ea44 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=357f3db286f3c6594cb370bda…
Author: Misha Koshelev <mk144210(a)bcm.edu> Date: Thu May 3 19:02:06 2007 -0500 msi/tests: automation: Convert method names to Unicode on the fly to simplify adding new tests. --- dlls/msi/tests/automation.c | 72 ++++++++++++++++--------------------------- 1 files changed, 27 insertions(+), 45 deletions(-) Diff:
http://source.winehq.org/git/wine.git/?a=commitdiff;h=357f3db286f3c6594cb37…
1
0
0
0
Misha Koshelev : msi/tests: automation: Free memory after string conversion .
by Alexandre Julliard
04 May '07
04 May '07
Module: wine Branch: master Commit: 1752f36413126001c2355aba244dfecc4a4abafc URL:
http://source.winehq.org/git/wine.git/?a=commit;h=1752f36413126001c2355aba2…
Author: Misha Koshelev <mk144210(a)bcm.edu> Date: Thu May 3 19:01:10 2007 -0500 msi/tests: automation: Free memory after string conversion. --- dlls/msi/tests/automation.c | 15 +++++++++------ 1 files changed, 9 insertions(+), 6 deletions(-) diff --git a/dlls/msi/tests/automation.c b/dlls/msi/tests/automation.c index 475eb3b..999a3cd 100644 --- a/dlls/msi/tests/automation.c +++ b/dlls/msi/tests/automation.c @@ -334,16 +334,19 @@ static DISPID get_dispid( IDispatch *disp, const char *name ) { LPOLESTR str; UINT len; - DISPID id; + DISPID id = -1; HRESULT r; len = MultiByteToWideChar(CP_ACP, 0, name, -1, NULL, 0 ); str = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR) ); - len = MultiByteToWideChar(CP_ACP, 0, name, -1, str, len ); - - r = IDispatch_GetIDsOfNames( disp, &IID_NULL, &str, 1, 0, &id ); - if (r != S_OK) - return -1; + if (str) + { + len = MultiByteToWideChar(CP_ACP, 0, name, -1, str, len ); + r = IDispatch_GetIDsOfNames( disp, &IID_NULL, &str, 1, 0, &id ); + HeapFree(GetProcessHeap(), 0, str); + if (r != S_OK) + return -1; + } return id; }
1
0
0
0
Bill Medland : oleaut32/tests: Some boundary tests on VarBstrFromDate.
by Alexandre Julliard
04 May '07
04 May '07
Module: wine Branch: master Commit: 804d0139b71ad8013f5428f8bf571f54ac37169f URL:
http://source.winehq.org/git/wine.git/?a=commit;h=804d0139b71ad8013f5428f8b…
Author: Bill Medland <billmedland(a)shaw.ca> Date: Thu May 3 15:58:52 2007 -0700 oleaut32/tests: Some boundary tests on VarBstrFromDate. --- dlls/oleaut32/tests/vartype.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/dlls/oleaut32/tests/vartype.c b/dlls/oleaut32/tests/vartype.c index 3b65a4e..d6f2693 100644 --- a/dlls/oleaut32/tests/vartype.c +++ b/dlls/oleaut32/tests/vartype.c @@ -4784,6 +4784,8 @@ static void test_VarBstrFromDate(void) BSTR_DATE(365.25, "12/30/1900 6:00:00 AM"); BSTR_DATE(1461.0, "12/31/1903"); BSTR_DATE(1461.5, "12/31/1903 12:00:00 PM"); + todo_wine { BSTR_DATE(-657434.0, "1/1/100"); } + BSTR_DATE(2958465.0, "12/31/9999"); } #define BSTR_DEC(l, a, b, c, d, e) \
1
0
0
0
Bill Medland : kernel32/tests: Boundary test cases for SystemTimeToFileTime and GetDateFormat.
by Alexandre Julliard
04 May '07
04 May '07
Module: wine Branch: master Commit: a70df444aec2ebf80ff63b0b76b4f9187a21420b URL:
http://source.winehq.org/git/wine.git/?a=commit;h=a70df444aec2ebf80ff63b0b7…
Author: Bill Medland <billmedland(a)shaw.ca> Date: Thu May 3 16:11:08 2007 -0700 kernel32/tests: Boundary test cases for SystemTimeToFileTime and GetDateFormat. --- dlls/kernel32/tests/locale.c | 28 ++++++++++++++++++++++++++++ dlls/kernel32/tests/time.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 0 deletions(-) diff --git a/dlls/kernel32/tests/locale.c b/dlls/kernel32/tests/locale.c index 08f4982..9f1d7d7 100644 --- a/dlls/kernel32/tests/locale.c +++ b/dlls/kernel32/tests/locale.c @@ -424,6 +424,34 @@ static void test_GetDateFormatW(void) STRINGSW("dddd d MMMM yyyy","Wednesday 23 October 2002"); /* Incorrect DOW and time */ ret = GetDateFormatW (lcid, 0, &curtime, input, buffer, COUNTOF(buffer)); EXPECT_VALID; EXPECT_LENW; EXPECT_EQW; + + /* Limit tests */ + + curtime.wYear = 1601; + curtime.wMonth = 1; + curtime.wDay = 1; + curtime.wDayOfWeek = 0; /* Irrelevant */ + curtime.wHour = 0; + curtime.wMinute = 0; + curtime.wSecond = 0; + curtime.wMilliseconds = 0; + STRINGSW("dddd d MMMM yyyy","Monday 1 January 1601"); + SetLastError(0xdeadbeef); + ret = GetDateFormatW (lcid, 0, &curtime, input, buffer, COUNTOF(buffer)); + EXPECT_VALID; EXPECT_LENW; EXPECT_EQW; + + curtime.wYear = 1600; + curtime.wMonth = 12; + curtime.wDay = 31; + curtime.wDayOfWeek = 0; /* Irrelevant */ + curtime.wHour = 23; + curtime.wMinute = 59; + curtime.wSecond = 59; + curtime.wMilliseconds = 999; + STRINGSW("dddd d MMMM yyyy","Friday 31 December 1600"); + SetLastError(0xdeadbeef); + ret = GetDateFormatW (lcid, 0, &curtime, input, buffer, COUNTOF(buffer)); + EXPECT_INVALID; } diff --git a/dlls/kernel32/tests/time.c b/dlls/kernel32/tests/time.c index 4ce3851..5f4c5b4 100644 --- a/dlls/kernel32/tests/time.c +++ b/dlls/kernel32/tests/time.c @@ -73,6 +73,23 @@ (st).wSecond = 32; \ (st).wMilliseconds = 123; +#define SETUP_ZEROTIME(st) \ + (st).wYear = 1601; \ + (st).wMonth = 1; \ + (st).wDay = 1; \ + (st).wHour = 0; \ + (st).wMinute = 0; \ + (st).wSecond = 0; \ + (st).wMilliseconds = 0; + +#define SETUP_EARLY(st) \ + (st).wYear = 1600; \ + (st).wMonth = 12; \ + (st).wDay = 31; \ + (st).wHour = 23; \ + (st).wMinute = 59; \ + (st).wSecond = 59; \ + (st).wMilliseconds = 999; static void test_conversions(void) @@ -82,6 +99,17 @@ static void test_conversions(void) memset(&ft,0,sizeof ft); + SETUP_EARLY(st) + ok (!SystemTimeToFileTime(&st, &ft), "Conversion succeeded EARLY\n"); + ok (GetLastError() == ERROR_INVALID_PARAMETER, "EARLY should be INVALID\n"); + + SETUP_ZEROTIME(st) + ok (SystemTimeToFileTime(&st, &ft), "Conversion failed ZERO_TIME\n"); + ok( (!((ft.dwHighDateTime != 0) || (ft.dwLowDateTime != 0))), + "Wrong time for ATIME: %08x %08x (correct %08x %08x)\n", + ft.dwLowDateTime, ft.dwHighDateTime, 0, 0); + + SETUP_ATIME(st) ok (SystemTimeToFileTime(&st,&ft), "Conversion Failed ATIME\n"); ok( (!((ft.dwHighDateTime != ATIME_HI) || (ft.dwLowDateTime!=ATIME_LOW))),
1
0
0
0
Juan Lang : wincrypt.h: Add missing definitions.
by Alexandre Julliard
04 May '07
04 May '07
Module: wine Branch: master Commit: b7019a7a642d1de3a9a79f3ea3b6b11e72a3282b URL:
http://source.winehq.org/git/wine.git/?a=commit;h=b7019a7a642d1de3a9a79f3ea…
Author: Juan Lang <juan_lang(a)yahoo.com> Date: Thu May 3 15:19:22 2007 -0700 wincrypt.h: Add missing definitions. --- include/wincrypt.h | 224 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 224 insertions(+), 0 deletions(-) diff --git a/include/wincrypt.h b/include/wincrypt.h index 90fc1c8..2219bd5 100644 --- a/include/wincrypt.h +++ b/include/wincrypt.h @@ -1941,6 +1941,10 @@ static const WCHAR CERT_TRUST_PUB_AUTHENTICODE_FLAGS_VALUE_NAME[] = #define CERT_FILE_STORE_COMMIT_ENABLE_FLAG 0x00010000 +/* CertCloseStore dwFlags */ +#define CERT_CLOSE_STORE_FORCE_FLAG 0x00000001 +#define CERT_CLOSE_STORE_CHECK_FLAG 0x00000002 + /* dwAddDisposition */ #define CERT_STORE_ADD_NEW 1 #define CERT_STORE_ADD_USE_EXISTING 2 @@ -3004,6 +3008,183 @@ typedef struct _CERT_CHAIN_ENGINE_CONFIG DWORD CycleDetectionModulus; } CERT_CHAIN_ENGINE_CONFIG, *PCERT_CHAIN_ENGINE_CONFIG; +/* message-related definitions */ + +typedef BOOL (WINAPI *PFN_CMSG_STREAM_OUTPUT)(const void *pvArg, BYTE *pbData, + DWORD cbData, BOOL fFinal); + +#define CMSG_INDEFINITE_LENGTH 0xffffffff + +typedef struct _CMSG_STREAM_INFO +{ + DWORD cbContent; + PFN_CMSG_STREAM_OUTPUT pfnStreamOutput; + void *pvArg; +} CMSG_STREAM_INFO, *PCMSG_STREAM_INFO; + +typedef struct _CERT_ISSUER_SERIAL_NUMBER +{ + CERT_NAME_BLOB Issuer; + CRYPT_INTEGER_BLOB SerialNumber; +} CERT_ISSUER_SERIAL_NUMBER, *PCERT_ISSUER_SERIAL_NUMBER; + +typedef struct _CERT_ID +{ + DWORD dwIdChoice; + union { + CERT_ISSUER_SERIAL_NUMBER IssuerSerialNumber; + CRYPT_HASH_BLOB KeyId; + CRYPT_HASH_BLOB HashId; + } DUMMYUNIONNAME; +} CERT_ID, *PCERT_ID; + +#undef CMSG_DATA /* may be defined by sys/socket.h */ +#define CMSG_DATA 1 +#define CMSG_SIGNED 2 +#define CMSG_ENVELOPED 3 +#define CMSG_SIGNED_AND_ENVELOPED 4 +#define CMSG_HASHED 5 +#define CMSG_ENCRYPTED 6 + +#define CMSG_ALL_FLAGS ~0U +#define CMSG_DATA_FLAG (1 << CMSG_DATA) +#define CMSG_SIGNED_FLAG (1 << CMSG_SIGNED) +#define CMSG_ENVELOPED_FLAG (1 << CMSG_ENVELOPED) +#define CMSG_SIGNED_AND_ENVELOPED_FLAG (1 << CMSG_SIGNED_AND_ENVELOPED) +#define CMSG_ENCRYPTED_FLAG (1 << CMSG_ENCRYPTED) + +typedef struct _CMSG_SIGNER_ENCODE_INFO +{ + DWORD cbSize; + PCERT_INFO pCertInfo; + HCRYPTPROV hCryptProv; + DWORD dwKeySpec; + CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm; + void *pvHashAuxInfo; + DWORD cAuthAttr; + PCRYPT_ATTRIBUTE rgAuthAttr; + DWORD cUnauthAttr; + PCRYPT_ATTRIBUTE rgUnauthAttr; + CERT_ID SignerId; + CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm; + void *pvHashEncryptionAuxInfo; +} CMSG_SIGNER_ENCODE_INFO, *PCMSG_SIGNER_ENCODE_INFO; + +typedef struct _CMSG_SIGNED_ENCODE_INFO +{ + DWORD cbSize; + DWORD cSigners; + PCMSG_SIGNER_ENCODE_INFO rgSigners; + DWORD cCertEncoded; + PCERT_BLOB rgCertEncoded; + DWORD cCrlEncoded; + PCRL_BLOB rgCrlEncoded; + DWORD cAttrCertEncoded; + PCERT_BLOB rgAttrCertEncoded; +} CMSG_SIGNED_ENCODE_INFO, *PCMSG_SIGNED_ENCODE_INFO; + +typedef struct _CMSG_ENVELOPED_ENCODE_INFO +{ + DWORD cbSize; + HCRYPTPROV hCryptProv; + CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm; + void *pvEncryptionAuxInfo; + DWORD cRecipients; + PCERT_INFO *rgpRecipientCert; +} CMSG_ENVELOPED_ENCODE_INFO, *PCMSG_ENVELOPED_ENCODE_INFO; + +typedef struct _CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO +{ + DWORD cbSize; + CMSG_SIGNED_ENCODE_INFO SignedInfo; + CMSG_ENVELOPED_ENCODE_INFO EnvelopedInfo; +} CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO, + *PCMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO; + +typedef struct _CMSG_HASHED_ENCODE_INFO +{ + DWORD cbSize; + HCRYPTPROV hCryptProv; + CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm; + void *pvHashAuxInfo; +} CMSG_HASHED_ENCODE_INFO, *PCMSG_HASHED_ENCODE_INFO; + +typedef struct _CMSG_ENCRYPTED_ENCODE_INFO +{ + DWORD cbSize; + CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm; + void *pvEncryptionAuxInfo; +} CMSG_ENCRYPTED_ENCODE_INFO, *PCMSG_ENCRYPTED_ENCODE_INFO; + +#define CMSG_BARE_CONTENT_FLAG 0x00000001 +#define CMSG_LENGTH_ONLY_FLAG 0x00000002 +#define CMSG_DETACHED_FLAG 0x00000004 +#define CMSG_AUTHENTICATED_ATTRIBUTES_FLAG 0x00000008 +#define CMSG_CONTENTS_OCTETS_FLAG 0x00000010 +#define CMSG_MAX_LENGTH_FLAG 0x00000020 + +#define CMSG_CTRL_VERIFY_SIGNATURE 1 +#define CMSG_CTRL_DECRYPT 2 +#define CMSG_CTRL_VERIFY_HASH 5 +#define CMSG_CTRL_ADD_SIGNER 6 +#define CMSG_CTRL_DEL_SIGNER 7 +#define CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR 8 +#define CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR 9 +#define CMSG_CTRL_ADD_CERT 10 +#define CMSG_CTRL_DEL_CERT 11 +#define CMSG_CTRL_ADD_CRL 12 +#define CMSG_CTRL_DEL_CRL 13 + +typedef struct _CMSG_CTRL_DECRYPT_PARA +{ + DWORD cbSize; + HCRYPTPROV hCryptProv; + DWORD dwKeySpec; + DWORD dwRecipientIndex; +} CMSG_CTRL_DECRYPT_PARA, *PCMSG_CTRL_DECRYPT_PARA; + +typedef struct _CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA +{ + DWORD cbSize; + DWORD dwSignerIndex; + CRYPT_DATA_BLOB blob; +} CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA, + *PCMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA; + +typedef struct _CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA +{ + DWORD cbSize; + DWORD dwSignerIndex; + DWORD dwUnauthAttrIndex; +} CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA, + *PCMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA; + +#define CMSG_TYPE_PARAM 1 +#define CMSG_CONTENT_PARAM 2 +#define CMSG_BARE_CONTENT_PARAM 3 +#define CMSG_INNER_CONTENT_PARAM 4 +#define CMSG_SIGNER_COUNT_PARAM 5 +#define CMSG_SIGNER_INFO_PARAM 6 +#define CMSG_SIGNER_CERT_INFO_PARAM 7 +#define CMSG_SIGNER_HASH_ALGORITHM_PARAM 8 +#define CMSG_SIGNER_AUTH_ATTR_PARAM 9 +#define CMSG_SIGNER_UNAUTH_ATTR_PARAM 10 +#define CMSG_CERT_COUNT_PARAM 11 +#define CMSG_CERT_PARAM 12 +#define CMSG_CRL_COUNT_PARAM 13 +#define CMSG_CRL_PARAM 14 +#define CMSG_ENVELOPE_ALGORITHM_PARAM 15 +#define CMSG_RECIPIENT_COUNT_PARAM 17 +#define CMSG_RECIPIENT_INDEX_PARAM 18 +#define CMSG_RECIPIENT_INFO_PARAM 19 +#define CMSG_HASH_ALGORITHM_PARAM 20 +#define CMSG_HASH_DATA_PARAM 21 +#define CMSG_COMPUTED_HASH_PARAM 22 +#define CMSG_ENCRYPT_PARAM 26 +#define CMSG_ENCRYPTED_DIGEST 27 +#define CMSG_ENCODED_SIGNER 28 +#define CMSG_ENCODED_MESSAGE 29 + /* function declarations */ /* advapi32.dll */ BOOL WINAPI CryptAcquireContextA(HCRYPTPROV *phProv, LPCSTR pszContainer, @@ -3509,6 +3690,49 @@ BOOL WINAPI CertStrToNameW(DWORD dwCertEncodingType, LPCWSTR pszX500, LPCWSTR *ppszError); #define CertStrToName WINELIB_NAME_AW(CertStrToName) +DWORD WINAPI CryptMsgCalculateEncodedLength(DWORD dwMsgEncodingType, + DWORD dwFlags, DWORD dwMsgType, const void *pvMsgEncodeInfo, + LPSTR pszInnerContentObjID, DWORD cbData); + +BOOL WINAPI CryptMsgClose(HCRYPTMSG hCryptMsg); + +DWORD WINAPI CryptMsgControl(HCRYPTMSG hCryptMsg, DWORD dwFlags, + DWORD dwCtrlType, const void *pvCtrlPara); + +BOOL WINAPI CryptMsgCountersign(HCRYPTMSG hCryptMsg, DWORD dwIndex, + DWORD dwCountersigners, PCMSG_SIGNER_ENCODE_INFO rgCountersigners); + +BOOL WINAPI CryptMsgCountersignEncoded(DWORD dwEncodingType, PBYTE pbSignerInfo, + DWORD cbSignerInfo, DWORD cCountersigners, + PCMSG_SIGNER_ENCODE_INFO rgCountersigners, PBYTE pbCountersignature, + PDWORD pcbCountersignature); + +HCRYPTMSG WINAPI CryptMsgDuplicate(HCRYPTMSG hCryptMsg); + +BOOL WINAPI CryptMsgGetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType, + DWORD dwIndex, void *pvData, DWORD *pcbData); + +HCRYPTMSG WINAPI CryptMsgOpenToDecode(DWORD dwMsgEncodingType, DWORD dwFlags, + DWORD dwMsgType, HCRYPTPROV hCryptProv, PCERT_INFO pRecipientInfo, + PCMSG_STREAM_INFO pStreamInfo); + +HCRYPTMSG WINAPI CryptMsgOpenToEncode(DWORD dwMsgEncodingType, DWORD dwFlags, + DWORD dwMsgType, const void *pvMsgEncodeInfo, LPSTR pszInnerContentObjID, + PCMSG_STREAM_INFO pStreamInfo); + +HCRYPTMSG WINAPI CryptMsgUpdate(HCRYPTMSG hCryptMsg, const BYTE *pbData, + DWORD cbData, BOOL fFinal); + +BOOL WINAPI CryptMsgVerifyCountersignatureEncoded(HCRYPTPROV hCryptProv, + DWORD dwEncodingType, PBYTE pbSignerInfo, DWORD cbSignerInfo, + PBYTE pbSignerInfoCountersignature, DWORD cbSignerInfoCountersignature, + PCERT_INFO pciCountersigner); + +BOOL WINAPI CryptMsgVerifyCountersignatureEncodedEx(HCRYPTPROV hCryptProv, + DWORD dwEncodingType, PBYTE pbSignerInfo, DWORD cbSignerInfo, + PBYTE pbSignerInfoCountersignature, DWORD cbSignerInfoCountersignature, + DWORD dwSignerType, void *pvSigner, DWORD dwFlags, void *pvReserved); + BOOL WINAPI CryptSignMessage(PCRYPT_SIGN_MESSAGE_PARA pSignPara, BOOL fDetachedSignature, DWORD cToBeSigned, const BYTE *rgpbToBeSigned[], DWORD rgcbToBeSigned[], BYTE *pbSignedBlob, DWORD *pcbSignedBlob);
1
0
0
0
Rob Shearman : setupapi: Partially implement SetupQueryInfOriginalFileInformationW.
by Alexandre Julliard
04 May '07
04 May '07
Module: wine Branch: master Commit: c572ddb40c461d9f945e33169493ef82ce11ab6a URL:
http://source.winehq.org/git/wine.git/?a=commit;h=c572ddb40c461d9f945e33169…
Author: Rob Shearman <rob(a)codeweavers.com> Date: Thu May 3 22:41:04 2007 +0100 setupapi: Partially implement SetupQueryInfOriginalFileInformationW. Implement SetupQueryInfOriginalFileInformationA on top of SetupQueryInfOriginalFileInformationW. --- dlls/setupapi/query.c | 52 +++++++++++++++++++++++++++++++++++++++++-- dlls/setupapi/tests/misc.c | 38 ++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 3 deletions(-) diff --git a/dlls/setupapi/query.c b/dlls/setupapi/query.c index a580b92..1961375 100644 --- a/dlls/setupapi/query.c +++ b/dlls/setupapi/query.c @@ -616,9 +616,31 @@ BOOL WINAPI SetupQueryInfOriginalFileInformationA( PSP_ALTPLATFORM_INFO AlternativePlatformInfo, PSP_ORIGINAL_FILE_INFO_A OriginalFileInfo) { - FIXME("(%p, %d, %p, %p): stub\n", InfInformation, InfIndex, + BOOL ret; + SP_ORIGINAL_FILE_INFO_W OriginalFileInfoW; + + TRACE("(%p, %d, %p, %p)\n", InfInformation, InfIndex, AlternativePlatformInfo, OriginalFileInfo); - return FALSE; + + if (OriginalFileInfo->cbSize != sizeof(*OriginalFileInfo)) + { + ERR("incorrect OriginalFileInfo->cbSize of %d\n", OriginalFileInfo->cbSize); + SetLastError( ERROR_INVALID_USER_BUFFER ); + return FALSE; + } + + OriginalFileInfoW.cbSize = sizeof(OriginalFileInfoW); + ret = SetupQueryInfOriginalFileInformationW(InfInformation, InfIndex, + AlternativePlatformInfo, &OriginalFileInfoW); + if (ret) + { + WideCharToMultiByte(CP_ACP, 0, OriginalFileInfoW.OriginalInfName, MAX_PATH, + OriginalFileInfo->OriginalInfName, MAX_PATH, NULL, NULL); + WideCharToMultiByte(CP_ACP, 0, OriginalFileInfoW.OriginalCatalogName, MAX_PATH, + OriginalFileInfo->OriginalCatalogName, MAX_PATH, NULL, NULL); + } + + return ret; } /*********************************************************************** @@ -629,7 +651,31 @@ BOOL WINAPI SetupQueryInfOriginalFileInformationW( PSP_ALTPLATFORM_INFO AlternativePlatformInfo, PSP_ORIGINAL_FILE_INFO_W OriginalFileInfo) { + LPCWSTR inf_name; + FIXME("(%p, %d, %p, %p): stub\n", InfInformation, InfIndex, AlternativePlatformInfo, OriginalFileInfo); - return FALSE; + + if (OriginalFileInfo->cbSize != sizeof(*OriginalFileInfo)) + { + ERR("incorrect OriginalFileInfo->cbSize of %d\n", OriginalFileInfo->cbSize); + return ERROR_INVALID_USER_BUFFER; + } + + /* FIXME: we should get OriginalCatalogName from CatalogFile line in + * the original inf file and cache it, but that would require building a + * .pnf file. */ + OriginalFileInfo->OriginalCatalogName[0] = '\0'; + + /* FIXME: not quite correct as we just return the same file name as + * destination (copied) inf file, not the source (original) inf file. + * to fix it properly would require building a .pnf file */ + /* file name is stored in VersionData field of InfInformation */ + inf_name = strrchrW((LPWSTR)&InfInformation->VersionData[0], '\\'); + if (inf_name) inf_name++; + else inf_name = (LPWSTR)&InfInformation->VersionData[0]; + + strcpyW(OriginalFileInfo->OriginalInfName, inf_name); + + return TRUE; } diff --git a/dlls/setupapi/tests/misc.c b/dlls/setupapi/tests/misc.c index e6beba5..84b1ce1 100644 --- a/dlls/setupapi/tests/misc.c +++ b/dlls/setupapi/tests/misc.c @@ -103,6 +103,42 @@ static BOOL check_format(LPSTR path, LPSTR inf) return (!inf) ? res : res && (inf == path + lstrlen(check) - 3); } +static void test_original_file_name(LPCSTR original, LPCSTR dest) +{ + HINF hinf; + PSP_INF_INFORMATION pspii; + SP_ORIGINAL_FILE_INFO spofi; + BOOL res; + DWORD size; + + hinf = SetupOpenInfFileA(dest, NULL, INF_STYLE_WIN4, NULL); + ok(hinf != NULL, "SetupOpenInfFileA failed with error %d\n", GetLastError()); + + res = SetupGetInfInformation(hinf, INFINFO_INF_SPEC_IS_HINF, NULL, 0, &size); + ok(res, "SetupGetInfInformation failed with error %d\n", GetLastError()); + + pspii = HeapAlloc(GetProcessHeap(), 0, size); + + res = SetupGetInfInformation(hinf, INFINFO_INF_SPEC_IS_HINF, pspii, size, NULL); + ok(res, "SetupGetInfInformation failed with error %d\n", GetLastError()); + + spofi.cbSize = 0; + res = SetupQueryInfOriginalFileInformationA(pspii, 0, NULL, &spofi); + ok(!res && GetLastError() == ERROR_INVALID_USER_BUFFER, + "SetupQueryInfOriginalFileInformationA should have failed with ERROR_INVALID_USER_BUFFER instead of %d\n", GetLastError()); + + spofi.cbSize = sizeof(spofi); + res = SetupQueryInfOriginalFileInformationA(pspii, 0, NULL, &spofi); + ok(res, "SetupQueryInfOriginalFileInformationA failed with error %d\n", GetLastError()); + ok(!spofi.OriginalCatalogName[0], "spofi.OriginalCatalogName should have been \"\" instead of \"%s\"\n", spofi.OriginalCatalogName); + todo_wine + ok(!strcmp(original, spofi.OriginalInfName), "spofi.OriginalInfName of %s didn't match real original name %s\n", spofi.OriginalInfName, original); + + HeapFree(GetProcessHeap(), 0, pspii); + + SetupCloseInfFile(hinf); +} + static void test_SetupCopyOEMInf(void) { CHAR toolong[MAX_PATH * 2]; @@ -233,6 +269,8 @@ static void test_SetupCopyOEMInf(void) ok(file_exists(path), "Expected source inf to exist\n"); ok(size == lstrlen(dest_save) + 1, "Expected size to be lstrlen(dest_save) + 1\n"); + test_original_file_name(strrchr(path, '\\') + 1, dest); + /* get the DestinationInfFileName, DestinationInfFileNameSize, and DestinationInfFileNameComponent */ SetLastError(0xdeadbeef); res = pSetupCopyOEMInfA(path, NULL, SPOST_NONE, 0, dest, MAX_PATH, &size, &inf);
1
0
0
0
Rob Shearman : setupapi: Add stubs for SetupQueryInfOriginalFileInformationA/W.
by Alexandre Julliard
04 May '07
04 May '07
Module: wine Branch: master Commit: 712bffb54e224db72a6c95c5e4598738781e0155 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=712bffb54e224db72a6c95c5e…
Author: Rob Shearman <rob(a)codeweavers.com> Date: Thu May 3 22:40:21 2007 +0100 setupapi: Add stubs for SetupQueryInfOriginalFileInformationA/W. --- dlls/setupapi/query.c | 26 ++++++++++++++++++++++++++ dlls/setupapi/setupapi.spec | 4 ++-- include/setupapi.h | 20 ++++++++++++++++++++ 3 files changed, 48 insertions(+), 2 deletions(-) diff --git a/dlls/setupapi/query.c b/dlls/setupapi/query.c index 82eb62d..a580b92 100644 --- a/dlls/setupapi/query.c +++ b/dlls/setupapi/query.c @@ -607,3 +607,29 @@ BOOL WINAPI SetupGetTargetPathW( HINF hinf, PINFCONTEXT context, PCWSTR section, HeapFree( GetProcessHeap(), 0, dir ); return TRUE; } + +/*********************************************************************** + * SetupQueryInfOriginalFileInformationA (SETUPAPI.@) + */ +BOOL WINAPI SetupQueryInfOriginalFileInformationA( + PSP_INF_INFORMATION InfInformation, UINT InfIndex, + PSP_ALTPLATFORM_INFO AlternativePlatformInfo, + PSP_ORIGINAL_FILE_INFO_A OriginalFileInfo) +{ + FIXME("(%p, %d, %p, %p): stub\n", InfInformation, InfIndex, + AlternativePlatformInfo, OriginalFileInfo); + return FALSE; +} + +/*********************************************************************** + * SetupQueryInfOriginalFileInformationW (SETUPAPI.@) + */ +BOOL WINAPI SetupQueryInfOriginalFileInformationW( + PSP_INF_INFORMATION InfInformation, UINT InfIndex, + PSP_ALTPLATFORM_INFO AlternativePlatformInfo, + PSP_ORIGINAL_FILE_INFO_W OriginalFileInfo) +{ + FIXME("(%p, %d, %p, %p): stub\n", InfInformation, InfIndex, + AlternativePlatformInfo, OriginalFileInfo); + return FALSE; +} diff --git a/dlls/setupapi/setupapi.spec b/dlls/setupapi/setupapi.spec index b523644..006f1fc 100644 --- a/dlls/setupapi/setupapi.spec +++ b/dlls/setupapi/setupapi.spec @@ -463,8 +463,8 @@ @ stub SetupQueryFileLogW @ stdcall SetupQueryInfFileInformationA(ptr long str long ptr) @ stdcall SetupQueryInfFileInformationW(ptr long wstr long ptr) -@ stub SetupQueryInfOriginalFileInformationA -@ stub SetupQueryInfOriginalFileInformationW +@ stdcall SetupQueryInfOriginalFileInformationA(ptr long ptr ptr) +@ stdcall SetupQueryInfOriginalFileInformationW(ptr long ptr ptr) @ stub SetupQueryInfVersionInformationA @ stub SetupQueryInfVersionInformationW @ stub SetupQuerySourceListA diff --git a/include/setupapi.h b/include/setupapi.h index 837278c..475ad75 100644 --- a/include/setupapi.h +++ b/include/setupapi.h @@ -343,6 +343,23 @@ typedef struct _FILEPATHS_W DECL_WINELIB_SETUPAPI_TYPE_AW(FILEPATHS) DECL_WINELIB_SETUPAPI_TYPE_AW(PFILEPATHS) +typedef struct _SP_ORIGINAL_FILE_INFO_A +{ + DWORD cbSize; + CHAR OriginalInfName[MAX_PATH]; + CHAR OriginalCatalogName[MAX_PATH]; +} SP_ORIGINAL_FILE_INFO_A, *PSP_ORIGINAL_FILE_INFO_A; + +typedef struct _SP_ORIGINAL_FILE_INFO_W +{ + DWORD cbSize; + WCHAR OriginalInfName[MAX_PATH]; + WCHAR OriginalCatalogName[MAX_PATH]; +} SP_ORIGINAL_FILE_INFO_W, *PSP_ORIGINAL_FILE_INFO_W; + +DECL_WINELIB_SETUPAPI_TYPE_AW(SP_ORIGINAL_FILE_INFO) +DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_ORIGINAL_FILE_INFO) + #define SPFILENOTIFY_STARTQUEUE 0x0001 #define SPFILENOTIFY_ENDQUEUE 0x0002 #define SPFILENOTIFY_STARTSUBQUEUE 0x0003 @@ -880,6 +897,9 @@ INT WINAPI SetupPromptReboot( HSPFILEQ, HWND, BOOL); BOOL WINAPI SetupQueryInfFileInformationA(PSP_INF_INFORMATION, UINT, PSTR, DWORD, PDWORD); BOOL WINAPI SetupQueryInfFileInformationW(PSP_INF_INFORMATION, UINT, PWSTR, DWORD, PDWORD); #define SetupQueryInfFileInformation WINELIB_NAME_AW(SetupQueryInFileInformation) +BOOL WINAPI SetupQueryInfOriginalFileInformationA(PSP_INF_INFORMATION, UINT, PSP_ALTPLATFORM_INFO, PSP_ORIGINAL_FILE_INFO_A); +BOOL WINAPI SetupQueryInfOriginalFileInformationW(PSP_INF_INFORMATION, UINT, PSP_ALTPLATFORM_INFO, PSP_ORIGINAL_FILE_INFO_W); +#define SetupQueryInfOriginalFileInformation WINELIB_NAME_AW(SetupQueryInfOriginalFileInformation) BOOL WINAPI SetupQueueCopyA(HSPFILEQ,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,DWORD); BOOL WINAPI SetupQueueCopyW(HSPFILEQ,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,DWORD); #define SetupQueueCopy WINELIB_NAME_AW(SetupQueueCopy)
1
0
0
0
Rob Shearman : setupapi: The inf file containing the SourceDisksFiles and SourceDisksNames sections is the same as hinf if there is no layout file specified .
by Alexandre Julliard
04 May '07
04 May '07
Module: wine Branch: master Commit: 66d5cb2967b89fe98076948917070a0d3f4b925d URL:
http://source.winehq.org/git/wine.git/?a=commit;h=66d5cb2967b89fe9807694891…
Author: Rob Shearman <rob(a)codeweavers.com> Date: Thu May 3 22:39:44 2007 +0100 setupapi: The inf file containing the SourceDisksFiles and SourceDisksNames sections is the same as hinf if there is no layout file specified. So pass the correct inf handle to SetupQueueDefaultCopyW and SetupQueueCopySectionW. --- dlls/setupapi/install.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dlls/setupapi/install.c b/dlls/setupapi/install.c index 46f1b94..902216e 100644 --- a/dlls/setupapi/install.c +++ b/dlls/setupapi/install.c @@ -113,9 +113,9 @@ static BOOL copy_files_callback( HINF hinf, PCWSTR field, void *arg ) struct files_callback_info *info = arg; if (field[0] == '@') /* special case: copy single file */ - SetupQueueDefaultCopyW( info->queue, info->layout, info->src_root, NULL, field+1, info->copy_flags ); + SetupQueueDefaultCopyW( info->queue, info->layout ? info->layout : hinf, info->src_root, NULL, field+1, info->copy_flags ); else - SetupQueueCopySectionW( info->queue, info->src_root, info->layout, hinf, field, info->copy_flags ); + SetupQueueCopySectionW( info->queue, info->src_root, info->layout ? info->layout : hinf, hinf, field, info->copy_flags ); return TRUE; }
1
0
0
0
← Newer
1
...
60
61
62
63
64
65
66
...
72
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
Results per page:
10
25
50
100
200