ReactOS.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
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
List overview
Download
Ros-diffs
May 2008
----- 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
ros-diffs@reactos.org
25 participants
586 discussions
Start a n
N
ew thread
[winesync] 33559: Autosyncing with Wine HEAD
by winesync@svn.reactos.org
Author: winesync Date: Sat May 17 14:46:54 2008 New Revision: 33559 URL:
http://svn.reactos.org/svn/reactos?rev=33559&view=rev
Log: Autosyncing with Wine HEAD Modified: trunk/rostests/winetests/msi/msi.rbuild trunk/rostests/winetests/msi/package.c Modified: trunk/rostests/winetests/msi/msi.rbuild URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/msi/msi.rbuild?…
============================================================================== --- trunk/rostests/winetests/msi/msi.rbuild [iso-8859-1] (original) +++ trunk/rostests/winetests/msi/msi.rbuild [iso-8859-1] Sat May 17 14:46:54 2008 @@ -16,15 +16,16 @@ <file>suminfo.c</file> <file>testlist.c</file> <library>wine</library> + <library>uuid</library> <library>cabinet</library> <library>msi</library> <library>shell32</library> <library>ole32</library> <library>oleaut32</library> + <library>user32</library> <library>advapi32</library> <library>kernel32</library> <library>version</library> - <library>uuid</library> <library>ntdll</library> </module> </group> Modified: trunk/rostests/winetests/msi/package.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/msi/package.c?r…
============================================================================== --- trunk/rostests/winetests/msi/package.c [iso-8859-1] (original) +++ trunk/rostests/winetests/msi/package.c [iso-8859-1] Sat May 17 14:46:54 2008 @@ -1631,6 +1631,46 @@ r = MsiEvaluateCondition(hpkg, "&nofeature"); ok( r == MSICONDITION_FALSE, "wrong return val (%d)\n", r); + MsiSetProperty(hpkg, "A", "2"); + MsiSetProperty(hpkg, "X", "50"); + + r = MsiEvaluateCondition(hpkg, "2 <= X"); + ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); + + r = MsiEvaluateCondition(hpkg, "A <= X"); + ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); + + r = MsiEvaluateCondition(hpkg, "A <= 50"); + ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); + + MsiSetProperty(hpkg, "X", "50val"); + + r = MsiEvaluateCondition(hpkg, "2 <= X"); + ok( r == MSICONDITION_FALSE, "wrong return val (%d)\n", r); + + r = MsiEvaluateCondition(hpkg, "A <= X"); + ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); + + MsiSetProperty(hpkg, "A", "7"); + MsiSetProperty(hpkg, "X", "50"); + + r = MsiEvaluateCondition(hpkg, "7 <= X"); + ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); + + r = MsiEvaluateCondition(hpkg, "A <= X"); + ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); + + r = MsiEvaluateCondition(hpkg, "A <= 50"); + ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); + + MsiSetProperty(hpkg, "X", "50val"); + + r = MsiEvaluateCondition(hpkg, "2 <= X"); + ok( r == MSICONDITION_FALSE, "wrong return val (%d)\n", r); + + r = MsiEvaluateCondition(hpkg, "A <= X"); + ok( r == MSICONDITION_FALSE, "wrong return val (%d)\n", r); + MsiCloseHandle( hpkg ); DeleteFile(msifile); } @@ -4708,6 +4748,7 @@ DWORD size, type; LANGID langid; HKEY hkey1, hkey2; + int res; UINT r; GetCurrentDirectory(MAX_PATH, path); @@ -4800,6 +4841,16 @@ r = MsiGetProperty(hpkg, "UserLanguageID", buf, &size); ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS< got %d\n", r); ok( !lstrcmpA(buf, path), "Expected \"%s\", got \"%s\"\n", path, buf); + + res = GetSystemMetrics(SM_CXSCREEN); + size = MAX_PATH; + r = MsiGetProperty(hpkg, "ScreenX", buf, &size); + ok(atol(buf) == res, "Expected %d, got %ld\n", res, atol(buf)); + + res = GetSystemMetrics(SM_CYSCREEN); + size = MAX_PATH; + r = MsiGetProperty(hpkg, "ScreenY", buf, &size); + ok(atol(buf) == res, "Expected %d, got %ld\n", res, atol(buf)); CloseHandle(hkey1); CloseHandle(hkey2);
16 years, 8 months
1
0
0
0
[winesync] 33558: Autosyncing with Wine HEAD
by winesync@svn.reactos.org
Author: winesync Date: Sat May 17 14:46:01 2008 New Revision: 33558 URL:
http://svn.reactos.org/svn/reactos?rev=33558&view=rev
Log: Autosyncing with Wine HEAD Added: trunk/reactos/dll/win32/msi/msi_Da.rc (with props) trunk/reactos/dll/win32/msi/msi_Si.rc (with props) Modified: trunk/reactos/dll/win32/msi/action.c trunk/reactos/dll/win32/msi/classes.c trunk/reactos/dll/win32/msi/cond.tab.c trunk/reactos/dll/win32/msi/cond.y trunk/reactos/dll/win32/msi/custom.c trunk/reactos/dll/win32/msi/dialog.c trunk/reactos/dll/win32/msi/files.c trunk/reactos/dll/win32/msi/format.c trunk/reactos/dll/win32/msi/helpers.c trunk/reactos/dll/win32/msi/install.c trunk/reactos/dll/win32/msi/msi.c trunk/reactos/dll/win32/msi/msi.rbuild trunk/reactos/dll/win32/msi/msi.rc trunk/reactos/dll/win32/msi/msi_main.c trunk/reactos/dll/win32/msi/msi_ros.diff trunk/reactos/dll/win32/msi/msipriv.h trunk/reactos/dll/win32/msi/msiquery.c trunk/reactos/dll/win32/msi/msiserver.idl trunk/reactos/dll/win32/msi/package.c trunk/reactos/dll/win32/msi/registry.c trunk/reactos/dll/win32/msi/source.c trunk/reactos/dll/win32/msi/sql.tab.c trunk/reactos/dll/win32/msi/sql.y trunk/reactos/dll/win32/msi/suminfo.c trunk/reactos/dll/win32/msi/table.c trunk/reactos/dll/win32/msi/tokenize.c trunk/reactos/dll/win32/msi/where.c Modified: trunk/reactos/dll/win32/msi/action.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/action.c?rev…
============================================================================== --- trunk/reactos/dll/win32/msi/action.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/action.c [iso-8859-1] Sat May 17 14:46:01 2008 @@ -33,6 +33,10 @@ #include "msipriv.h" #include "winuser.h" #include "shlobj.h" +#include "objbase.h" +#include "mscoree.h" +#include "fusion.h" +#include "shlwapi.h" #include "wine/unicode.h" #include "winver.h" @@ -1246,6 +1250,9 @@ { MSIFEATURE *feature; + if ( !name ) + return NULL; + LIST_FOR_EACH_ENTRY( feature, &package->features, MSIFEATURE, entry ) { if ( !lstrcmpW( feature->Feature, name ) ) @@ -1985,7 +1992,7 @@ if (MSI_EvaluateConditionW(package,Condition) == MSICONDITION_TRUE) { int level = MSI_RecordGetInteger(row,2); - TRACE("Reseting feature %s to level %i\n", debugstr_w(name), level); + TRACE("Resetting feature %s to level %i\n", debugstr_w(name), level); feature->Level = level; } } @@ -2118,7 +2125,10 @@ {'C','o','s','t','i','n','g','C','o','m','p','l','e','t','e',0 }; static const WCHAR szlevel[] = {'I','N','S','T','A','L','L','L','E','V','E','L',0}; + static const WCHAR szOutOfDiskSpace[] = + {'O','u','t','O','f','D','i','s','k','S','p','a','c','e',0}; static const WCHAR szOne[] = { '1', 0 }; + static const WCHAR szZero[] = { '0', 0 }; MSICOMPONENT *comp; UINT rc; MSIQUERY * view; @@ -2169,6 +2179,9 @@ if (!level) MSI_SetPropertyW(package,szlevel, szOne); msi_free(level); + + /* FIXME: check volume disk space */ + MSI_SetPropertyW(package, szOutOfDiskSpace, szZero); ACTION_UpdateFeatureInstallStates(package); @@ -2426,7 +2439,7 @@ { static const WCHAR szEmpty[] = {0}; value_data = (LPSTR)strdupW(szEmpty); - size = 0; + size = sizeof(szEmpty); type = REG_SZ; } @@ -2767,7 +2780,7 @@ } } - /* add a count for permenent */ + /* add a count for permanent */ if (comp->Attributes & msidbComponentAttributesPermanent) count ++; @@ -2826,7 +2839,7 @@ comp->RefCount); /* * Write the keypath out if the component is to be registered - * and delete the key if the component is to be deregistered + * and delete the key if the component is to be unregistered */ if (ACTION_VerifyComponentForAction( comp, INSTALLSTATE_LOCAL)) { @@ -3101,7 +3114,7 @@ buffer = MSI_RecordGetString(row,2); target_folder = resolve_folder(package, buffer,FALSE,FALSE,TRUE,NULL); - /* may be needed because of a bug somehwere else */ + /* may be needed because of a bug somewhere else */ create_full_pathW(target_folder); filename = msi_dup_record_field( row, 3 ); @@ -3345,13 +3358,30 @@ /* ok there is a lot more done here but i need to figure out what */ - rc = MSIREG_OpenProductsKey(package->ProductCode,&hkey,TRUE); - if (rc != ERROR_SUCCESS) - goto end; - - rc = MSIREG_OpenUserProductsKey(package->ProductCode,&hukey,TRUE); - if (rc != ERROR_SUCCESS) - goto end; + if (package->Context == MSIINSTALLCONTEXT_MACHINE) + { + rc = MSIREG_OpenLocalClassesProductKey(package->ProductCode, &hukey, TRUE); + if (rc != ERROR_SUCCESS) + goto end; + + rc = MSIREG_OpenLocalSystemInstallProps(package->ProductCode, &props, TRUE); + if (rc != ERROR_SUCCESS) + goto end; + } + else + { + rc = MSIREG_OpenProductsKey(package->ProductCode,&hkey,TRUE); + if (rc != ERROR_SUCCESS) + goto end; + + rc = MSIREG_OpenUserProductsKey(package->ProductCode,&hukey,TRUE); + if (rc != ERROR_SUCCESS) + goto end; + + rc = MSIREG_OpenCurrentUserInstallProps(package->ProductCode, &props, TRUE); + if (rc != ERROR_SUCCESS) + goto end; + } rc = RegCreateKeyW(hukey, szSourceList, &source); if (rc != ERROR_SUCCESS) @@ -3363,10 +3393,6 @@ if (rc != ERROR_SUCCESS) goto end; - rc = MSIREG_OpenInstallPropertiesKey(package->ProductCode,&props,TRUE); - if (rc != ERROR_SUCCESS) - goto end; - buffer = msi_dup_property( package, INSTALLPROPERTY_PRODUCTNAMEW ); msi_reg_set_val_str( hukey, INSTALLPROPERTY_PRODUCTNAMEW, buffer ); msi_free(buffer); @@ -3400,19 +3426,19 @@ buffer = strrchrW( package->PackagePath, '\\') + 1; rc = MsiSourceListSetInfoW( package->ProductCode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT, + package->Context, MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAMEW, buffer ); if (rc != ERROR_SUCCESS) goto end; rc = MsiSourceListSetInfoW( package->ProductCode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT, + package->Context, MSICODE_PRODUCT, INSTALLPROPERTY_MEDIAPACKAGEPATHW, szEmpty ); if (rc != ERROR_SUCCESS) goto end; rc = MsiSourceListSetInfoW( package->ProductCode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT, + package->Context, MSICODE_PRODUCT, INSTALLPROPERTY_DISKPROMPTW, szEmpty ); if (rc != ERROR_SUCCESS) goto end; @@ -3759,8 +3785,10 @@ size = strlenW(feature->Feature_Parent)*sizeof(WCHAR); if (!absent) { + static const WCHAR emptyW[] = {0}; + size += sizeof(WCHAR); RegSetValueExW(hukey,feature->Feature,0,REG_SZ, - (LPBYTE)feature->Feature_Parent,size); + (LPBYTE)(feature->Feature_Parent ? feature->Feature_Parent : emptyW),size); } else { @@ -3896,7 +3924,7 @@ msi_reg_set_val_str( hkey, INSTALLPROPERTY_LOCALPACKAGEW, packagefile ); - r = MSIREG_OpenInstallPropertiesKey(package->ProductCode, &props, TRUE); + r = MSIREG_OpenCurrentUserInstallProps(package->ProductCode, &props, TRUE); if (r != ERROR_SUCCESS) return r; @@ -3986,9 +4014,18 @@ if (rc != ERROR_SUCCESS) return rc; - rc = MSIREG_OpenInstallPropertiesKey(package->ProductCode, &props, TRUE); - if (rc != ERROR_SUCCESS) - return rc; + if (package->Context == MSIINSTALLCONTEXT_MACHINE) + { + rc = MSIREG_OpenLocalSystemInstallProps(package->ProductCode, &props, TRUE); + if (rc != ERROR_SUCCESS) + return rc; + } + else + { + rc = MSIREG_OpenCurrentUserInstallProps(package->ProductCode, &props, TRUE); + if (rc != ERROR_SUCCESS) + return rc; + } /* dump all the info i can grab */ /* FIXME: Flesh out more information */ @@ -4060,7 +4097,7 @@ msi_free(upgrade_code); } - + RegCloseKey(hkey); rc = MSIREG_OpenUserDataProductKey(package->ProductCode, &hudkey, TRUE); @@ -4221,13 +4258,13 @@ DWORD size = 0; rc = MsiSourceListGetInfoW(package->ProductCode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT, + package->Context, MSICODE_PRODUCT, INSTALLPROPERTY_DISKPROMPTW,NULL,&size); if (rc == ERROR_MORE_DATA) { prompt = msi_alloc(size * sizeof(WCHAR)); MsiSourceListGetInfoW(package->ProductCode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT, + package->Context, MSICODE_PRODUCT, INSTALLPROPERTY_DISKPROMPTW,prompt,&size); } else @@ -4286,7 +4323,7 @@ if (!productid) return ERROR_SUCCESS; - rc = MSIREG_OpenInstallPropertiesKey(package->ProductCode, &hkey, TRUE); + rc = MSIREG_OpenCurrentUserInstallProps(package->ProductCode, &hkey, TRUE); if (rc != ERROR_SUCCESS) goto end; @@ -5046,7 +5083,7 @@ static UINT ITERATE_WriteEnvironmentString( MSIRECORD *rec, LPVOID param ) { MSIPACKAGE *package = param; - LPCWSTR name, value, comp; + LPCWSTR name, value; LPWSTR data = NULL, newval = NULL; LPWSTR deformatted = NULL, ptr; DWORD flags, type, size; @@ -5066,7 +5103,6 @@ name = MSI_RecordGetString(rec, 2); value = MSI_RecordGetString(rec, 3); - comp = MSI_RecordGetString(rec, 4); res = env_set_flags(&name, &value, &flags); if (res != ERROR_SUCCESS) @@ -5514,6 +5550,169 @@ return ERROR_SUCCESS; rc = MSI_IterateRecords(view, NULL, ITERATE_MoveFiles, package); + msiobj_release(&view->hdr); + + return rc; +} + +static HRESULT (WINAPI *pCreateAssemblyCache)(IAssemblyCache **ppAsmCache, + DWORD dwReserved); +static HRESULT (WINAPI *pLoadLibraryShim)(LPCWSTR szDllName, LPCWSTR szVersion, + LPVOID pvReserved, HMODULE *phModDll); + +static BOOL init_functionpointers(void) +{ + HRESULT hr; + HMODULE hfusion; + HMODULE hmscoree; + + static const WCHAR szFusion[] = {'f','u','s','i','o','n','.','d','l','l',0}; + + hmscoree = LoadLibraryA("mscoree.dll"); + if (!hmscoree) + { + WARN("mscoree.dll not available\n"); + return FALSE; + } + + pLoadLibraryShim = (void *)GetProcAddress(hmscoree, "LoadLibraryShim"); + if (!pLoadLibraryShim) + { + WARN("LoadLibraryShim not available\n"); + FreeLibrary(hmscoree); + return FALSE; + } + + hr = pLoadLibraryShim(szFusion, NULL, NULL, &hfusion); + if (FAILED(hr)) + { + WARN("fusion.dll not available\n"); + FreeLibrary(hmscoree); + return FALSE; + } + + pCreateAssemblyCache = (void *)GetProcAddress(hfusion, "CreateAssemblyCache"); + + FreeLibrary(hmscoree); + return TRUE; +} + +static UINT install_assembly(LPWSTR path) +{ + IAssemblyCache *cache; + HRESULT hr; + UINT r = ERROR_FUNCTION_FAILED; + + if (!init_functionpointers() || !pCreateAssemblyCache) + return ERROR_FUNCTION_FAILED; + + hr = pCreateAssemblyCache(&cache, 0); + if (FAILED(hr)) + goto done; + + hr = IAssemblyCache_InstallAssembly(cache, 0, path, NULL); + if (FAILED(hr)) + ERR("Failed to install assembly: %s %08x\n", debugstr_w(path), hr); + + r = ERROR_SUCCESS; + +done: + IAssemblyCache_Release(cache); + return r; +} + +static UINT ITERATE_PublishAssembly( MSIRECORD *rec, LPVOID param ) +{ + MSIPACKAGE *package = param; + MSICOMPONENT *comp; + MSIFEATURE *feature; + MSIFILE *file; + WCHAR path[MAX_PATH]; + LPCWSTR app; + DWORD attr; + UINT r; + + comp = get_loaded_component(package, MSI_RecordGetString(rec, 1)); + if (!comp || !comp->Enabled || + !(comp->Action & (INSTALLSTATE_LOCAL | INSTALLSTATE_SOURCE))) + { + ERR("Component not set for install, not publishing assembly\n"); + return ERROR_SUCCESS; + } + + feature = find_feature_by_name(package, MSI_RecordGetString(rec, 2)); + if (feature) + msi_feature_set_state(feature, INSTALLSTATE_LOCAL); + + if (MSI_RecordGetString(rec, 3)) + FIXME("Manifest unhandled\n"); + + app = MSI_RecordGetString(rec, 4); + if (app) + { + FIXME("Assembly should be privately installed\n"); + return ERROR_SUCCESS; + } + + attr = MSI_RecordGetInteger(rec, 5); + if (attr == msidbAssemblyAttributesWin32) + { + FIXME("Win32 assemblies not handled\n"); + return ERROR_SUCCESS; + } + + /* FIXME: extract all files belonging to this component */ + file = msi_find_file(package, comp->KeyPath); + + GetTempPathW(MAX_PATH, path); + + if (file->IsCompressed) + { + r = msi_extract_file(package, file, path); + if (r != ERROR_SUCCESS) + { + ERR("Failed to extract temporary assembly\n"); + return r; + } + + PathAddBackslashW(path); + lstrcatW(path, file->FileName); + } + else + { + PathAddBackslashW(path); + lstrcatW(path, file->FileName); + + if (!CopyFileW(file->SourcePath, path, FALSE)) + { + ERR("Failed to copy temporary assembly: %d\n", GetLastError()); + return ERROR_FUNCTION_FAILED; + } + } + + r = install_assembly(path); + if (r != ERROR_SUCCESS) + ERR("Failed to install assembly\n"); + + /* FIXME: write Installer assembly reg values */ + + return r; +} + +static UINT ACTION_MsiPublishAssemblies( MSIPACKAGE *package ) +{ + UINT rc; + MSIQUERY *view; + + static const WCHAR ExecSeqQuery[] = + {'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ', + '`','M','s','i','A','s','s','e','m','b','l','y','`',0}; + + rc = MSI_DatabaseOpenViewW(package->db, ExecSeqQuery, &view); + if (rc != ERROR_SUCCESS) + return ERROR_SUCCESS; + + rc = MSI_IterateRecords(view, NULL, ITERATE_PublishAssembly, package); msiobj_release(&view->hdr); return rc; @@ -5605,13 +5804,6 @@ static const WCHAR table[] = { 'E','n','v','i','r','o','n','m','e','n','t',0 }; return msi_unimplemented_action_stub( package, "RemoveEnvironmentStrings", table ); -} - -static UINT ACTION_MsiPublishAssemblies( MSIPACKAGE *package ) -{ - static const WCHAR table[] = { - 'M','s','i','A','s','s','e','m','b','l','y',0 }; - return msi_unimplemented_action_stub( package, "MsiPublishAssemblies", table ); } static UINT ACTION_MsiUnpublishAssemblies( MSIPACKAGE *package ) Modified: trunk/reactos/dll/win32/msi/classes.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/classes.c?re…
============================================================================== --- trunk/reactos/dll/win32/msi/classes.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/classes.c [iso-8859-1] Sat May 17 14:46:01 2008 @@ -971,6 +971,8 @@ { if (progid->Class) return progid->Class->clsid; + if (progid->Parent == progid) + break; progid = progid->Parent; } return NULL; Modified: trunk/reactos/dll/win32/msi/cond.tab.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/cond.tab.c?r…
============================================================================== --- trunk/reactos/dll/win32/msi/cond.tab.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/cond.tab.c [iso-8859-1] Sat May 17 14:46:01 2008 @@ -218,13 +218,13 @@ static const WCHAR szEmpty[] = { 0 }; static INT compare_int( INT a, INT operator, INT b ); -static INT compare_string( LPCWSTR a, INT operator, LPCWSTR b ); - -static INT compare_and_free_strings( LPWSTR a, INT op, LPWSTR b ) +static INT compare_string( LPCWSTR a, INT operator, LPCWSTR b, BOOL convert ); + +static INT compare_and_free_strings( LPWSTR a, INT op, LPWSTR b, BOOL convert ) { INT r; - r = compare_string( a, op, b ); + r = compare_string( a, op, b, convert ); msi_free( a ); msi_free( b ); return r; @@ -538,8 +538,8 @@ 175, 182, 186, 190, 195, 199, 208, 217, 221, 225, 229, 233, 238, 243, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, - 267, 268, 272, 276, 283, 292, 296, 305, 314, 323, - 335, 342, 356, 365 + 267, 268, 272, 276, 283, 292, 296, 305, 314, 327, + 339, 346, 360, 369 }; #endif @@ -1467,28 +1467,28 @@ case 17: #line 218 "cond.y" { - (yyval.value) = compare_and_free_strings( (yyvsp[-2].string), (yyvsp[-1].value), (yyvsp[0].string) ); + (yyval.value) = compare_and_free_strings( (yyvsp[-2].string), (yyvsp[-1].value), (yyvsp[0].string), TRUE ); ;} break; case 18: #line 222 "cond.y" { - (yyval.value) = compare_and_free_strings( (yyvsp[-2].string), (yyvsp[-1].value), (yyvsp[0].string) ); + (yyval.value) = compare_and_free_strings( (yyvsp[-2].string), (yyvsp[-1].value), (yyvsp[0].string), TRUE ); ;} break; case 19: #line 226 "cond.y" { - (yyval.value) = compare_and_free_strings( (yyvsp[-2].string), (yyvsp[-1].value), (yyvsp[0].string) ); + (yyval.value) = compare_and_free_strings( (yyvsp[-2].string), (yyvsp[-1].value), (yyvsp[0].string), TRUE ); ;} break; case 20: #line 230 "cond.y" { - (yyval.value) = compare_and_free_strings( (yyvsp[-2].string), (yyvsp[-1].value), (yyvsp[0].string) ); + (yyval.value) = compare_and_free_strings( (yyvsp[-2].string), (yyvsp[-1].value), (yyvsp[0].string), FALSE ); ;} break; @@ -1666,13 +1666,17 @@ INSTALLSTATE install = INSTALLSTATE_UNKNOWN, action = INSTALLSTATE_UNKNOWN; MSI_GetFeatureStateW(cond->package, (yyvsp[0].string), &install, &action ); - (yyval.value) = action; + if (action == INSTALLSTATE_UNKNOWN) + (yyval.value) = MSICONDITION_FALSE; + else + (yyval.value) = action; + msi_free( (yyvsp[0].string) ); ;} break; case 49: -#line 324 "cond.y" +#line 328 "cond.y" { COND_input* cond = (COND_input*) info; INSTALLSTATE install = INSTALLSTATE_UNKNOWN, action = INSTALLSTATE_UNKNOWN; @@ -1684,7 +1688,7 @@ break; case 50: -#line 336 "cond.y" +#line 340 "cond.y" { COND_input* cond = (COND_input*) info; @@ -1694,7 +1698,7 @@ break; case 51: -#line 343 "cond.y" +#line 347 "cond.y" { UINT len = GetEnvironmentVariableW( (yyvsp[0].string), NULL, 0 ); (yyval.string) = NULL; @@ -1708,7 +1712,7 @@ break; case 52: -#line 357 "cond.y" +#line 361 "cond.y" { (yyval.string) = COND_GetString(&(yyvsp[0].str)); if( !(yyval.string) ) @@ -1717,7 +1721,7 @@ break; case 53: -#line 366 "cond.y" +#line 370 "cond.y" { LPWSTR szNum = COND_GetString(&(yyvsp[0].str)); if( !szNum ) @@ -1732,7 +1736,7 @@ } /* Line 1126 of yacc.c. */ -#line 1736 "cond.tab.c" +#line 1740 "cond.tab.c" yyvsp -= yylen; yyssp -= yylen; @@ -2000,7 +2004,7 @@ } -#line 375 "cond.y" +#line 379 "cond.y" @@ -2032,6 +2036,9 @@ static BOOL str_is_number( LPCWSTR str ) { int i; + + if (!*str) + return FALSE; for (i = 0; i < lstrlenW( str ); i++) if (!isdigitW(str[i])) @@ -2079,7 +2086,7 @@ return 0; } -static INT compare_string( LPCWSTR a, INT operator, LPCWSTR b ) +static INT compare_string( LPCWSTR a, INT operator, LPCWSTR b, BOOL convert ) { if (operator >= COND_SS && operator <= COND_RHS) return compare_substring( a, operator, b ); @@ -2087,6 +2094,9 @@ /* null and empty string are equivalent */ if (!a) a = szEmpty; if (!b) b = szEmpty; + + if (convert && str_is_number(a) && str_is_number(b)) + return compare_int( atoiW(a), operator, atoiW(b) ); /* a or b may be NULL */ switch (operator) Modified: trunk/reactos/dll/win32/msi/cond.y URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/cond.y?rev=3…
============================================================================== --- trunk/reactos/dll/win32/msi/cond.y [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/cond.y [iso-8859-1] Sat May 17 14:46:01 2008 @@ -67,13 +67,13 @@ static const WCHAR szEmpty[] = { 0 }; static INT compare_int( INT a, INT operator, INT b ); -static INT compare_string( LPCWSTR a, INT operator, LPCWSTR b ); - -static INT compare_and_free_strings( LPWSTR a, INT op, LPWSTR b ) +static INT compare_string( LPCWSTR a, INT operator, LPCWSTR b, BOOL convert ); + +static INT compare_and_free_strings( LPWSTR a, INT op, LPWSTR b, BOOL convert ) { INT r; - r = compare_string( a, op, b ); + r = compare_string( a, op, b, convert ); msi_free( a ); msi_free( b ); return r; @@ -216,19 +216,19 @@ } | symbol_s operator symbol_s { - $$ = compare_and_free_strings( $1, $2, $3 ); + $$ = compare_and_free_strings( $1, $2, $3, TRUE ); } | symbol_s operator literal { - $$ = compare_and_free_strings( $1, $2, $3 ); + $$ = compare_and_free_strings( $1, $2, $3, TRUE ); } | literal operator symbol_s { - $$ = compare_and_free_strings( $1, $2, $3 ); + $$ = compare_and_free_strings( $1, $2, $3, TRUE ); } | literal operator literal { - $$ = compare_and_free_strings( $1, $2, $3 ); + $$ = compare_and_free_strings( $1, $2, $3, FALSE ); } | literal operator value_i { @@ -408,6 +408,9 @@ { int i; + if (!*str) + return FALSE; + for (i = 0; i < lstrlenW( str ); i++) if (!isdigitW(str[i])) return FALSE; @@ -454,7 +457,7 @@ return 0; } -static INT compare_string( LPCWSTR a, INT operator, LPCWSTR b ) +static INT compare_string( LPCWSTR a, INT operator, LPCWSTR b, BOOL convert ) { if (operator >= COND_SS && operator <= COND_RHS) return compare_substring( a, operator, b ); @@ -462,6 +465,9 @@ /* null and empty string are equivalent */ if (!a) a = szEmpty; if (!b) b = szEmpty; + + if (convert && str_is_number(a) && str_is_number(b)) + return compare_int( atoiW(a), operator, atoiW(b) ); /* a or b may be NULL */ switch (operator) Modified: trunk/reactos/dll/win32/msi/custom.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/custom.c?rev…
============================================================================== --- trunk/reactos/dll/win32/msi/custom.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/custom.c [iso-8859-1] Sat May 17 14:46:01 2008 @@ -17,6 +17,9 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ + +#include "config.h" +#include "wine/port.h" #define COBJMACROS Modified: trunk/reactos/dll/win32/msi/dialog.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/dialog.c?rev…
============================================================================== --- trunk/reactos/dll/win32/msi/dialog.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/dialog.c [iso-8859-1] Sat May 17 14:46:01 2008 @@ -2055,7 +2055,8 @@ LPNMTREEVIEWW tv = (LPNMTREEVIEWW)param; MSIRECORD *row, *rec; MSIFOLDER *folder; - LPCWSTR dir; + MSIFEATURE *feature; + LPCWSTR dir, title = NULL; UINT r = ERROR_SUCCESS; static const WCHAR select[] = { @@ -2069,7 +2070,16 @@ info->selected = tv->itemNew.hItem; - row = MSI_QueryGetRecord( dialog->package->db, select, tv->itemNew.pszText ); + if (!(tv->itemNew.mask & TVIF_TEXT)) + { + feature = msi_seltree_feature_from_item( control->hwnd, tv->itemNew.hItem ); + if (feature) + title = feature->Title; + } + else + title = tv->itemNew.pszText; + + row = MSI_QueryGetRecord( dialog->package->db, select, title ); if (!row) return ERROR_FUNCTION_FAILED; @@ -3472,6 +3482,9 @@ TRACE("%p %s\n", package, debugstr_w(szDialogName)); + if (!hMsiHiddenWindow) + msi_dialog_register_class(); + /* allocate the structure for the dialog to use */ dialog = msi_alloc_zero( sizeof *dialog + sizeof(WCHAR)*strlenW(szDialogName) ); if( !dialog ) Modified: trunk/reactos/dll/win32/msi/files.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/files.c?rev=…
============================================================================== --- trunk/reactos/dll/win32/msi/files.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/files.c [iso-8859-1] Sat May 17 14:46:01 2008 @@ -57,20 +57,7 @@ static const WCHAR cszTempFolder[]= {'T','e','m','p','F','o','l','d','e','r',0}; -struct media_info { - UINT disk_id; - UINT type; - UINT last_sequence; - LPWSTR disk_prompt; - LPWSTR cabinet; - LPWSTR first_volume; - LPWSTR volume_label; - BOOL is_continuous; - BOOL is_extracted; - WCHAR source[MAX_PATH]; -}; - -static BOOL source_matches_volume(struct media_info *mi, LPWSTR source_root) +static BOOL source_matches_volume(MSIMEDIAINFO *mi, LPWSTR source_root) { WCHAR volume_name[MAX_PATH + 1]; @@ -84,7 +71,7 @@ return !lstrcmpW(mi->volume_label, volume_name); } -static UINT msi_change_media( MSIPACKAGE *package, struct media_info *mi ) +static UINT msi_change_media( MSIPACKAGE *package, MSIMEDIAINFO *mi ) { LPSTR msg; LPWSTR error, error_dialog; @@ -169,7 +156,7 @@ typedef struct { MSIPACKAGE* package; - struct media_info *mi; + MSIMEDIAINFO *mi; } CabData; static void * cabinet_alloc(ULONG cb) @@ -265,7 +252,7 @@ ui_progress( package, 2, f->FileSize, 0, 0); } -static UINT msi_media_get_disk_info( MSIPACKAGE *package, struct media_info *mi ) +static UINT msi_media_get_disk_info( MSIPACKAGE *package, MSIMEDIAINFO *mi ) { MSIRECORD *row; LPWSTR ptr; @@ -311,7 +298,7 @@ case fdintNEXT_CABINET: { CabData *data = (CabData *)pfdin->pv; - struct media_info *mi = data->mi; + MSIMEDIAINFO *mi = data->mi; LPWSTR cab = strdupAtoW(pfdin->psz1); UINT rc; @@ -423,18 +410,18 @@ } /*********************************************************************** - * extract_cabinet_file + * msi_cabextract * * Extract files from a cab file. */ -static BOOL extract_cabinet_file(MSIPACKAGE* package, struct media_info *mi) +BOOL msi_cabextract(MSIPACKAGE* package, MSIMEDIAINFO *mi, + PFNFDINOTIFY notify, LPVOID data) { LPSTR cabinet, cab_path = NULL; LPWSTR ptr; HFDI hfdi; ERF erf; BOOL ret = FALSE; - CabData data; TRACE("Extracting %s\n", debugstr_w(mi->source)); @@ -457,10 +444,7 @@ cab_path[ptr - mi->source] = '\0'; - data.package = package; - data.mi = mi; - - ret = FDICopy(hfdi, cabinet, cab_path, 0, cabinet_notify, NULL, &data); + ret = FDICopy(hfdi, cabinet, cab_path, 0, notify, NULL, data); if (!ret) ERR("FDICopy failed\n"); @@ -495,7 +479,7 @@ file->SourcePath = build_directory_name(2, path, file->File); } -static void free_media_info( struct media_info *mi ) +void msi_free_media_info( MSIMEDIAINFO *mi ) { msi_free( mi->disk_prompt ); msi_free( mi->cabinet ); @@ -504,7 +488,7 @@ msi_free( mi ); } -static UINT load_media_info(MSIPACKAGE *package, MSIFILE *file, struct media_info *mi) +UINT msi_load_media_info(MSIPACKAGE *package, MSIFILE *file, MSIMEDIAINFO *mi) { MSIRECORD *row; LPWSTR source_dir; @@ -581,11 +565,11 @@ } if (mi->type == DRIVE_CDROM || mi->type == DRIVE_REMOVABLE) - msi_package_add_media_disk(package, MSIINSTALLCONTEXT_USERUNMANAGED, + msi_package_add_media_disk(package, package->Context, MSICODE_PRODUCT, mi->disk_id, mi->volume_label, mi->disk_prompt); - msi_package_add_info(package, MSIINSTALLCONTEXT_USERUNMANAGED, + msi_package_add_info(package, package->Context, options, INSTALLPROPERTY_LASTUSEDSOURCEW, source); msi_free(source_dir); @@ -593,7 +577,7 @@ } /* FIXME: search NETWORK and URL sources as well */ -static UINT find_published_source(MSIPACKAGE *package, struct media_info *mi) +static UINT find_published_source(MSIPACKAGE *package, MSIMEDIAINFO *mi) { WCHAR source[MAX_PATH]; WCHAR volume[MAX_PATH]; @@ -603,7 +587,7 @@ UINT r; r = MsiSourceListGetInfoW(package->ProductCode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT, + package->Context, MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDSOURCEW, source, &size); if (r != ERROR_SUCCESS) return r; @@ -612,7 +596,7 @@ volumesz = MAX_PATH; promptsz = MAX_PATH; while (MsiSourceListEnumMediaDisksW(package->ProductCode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, + package->Context, MSICODE_PRODUCT, index++, &id, volume, &volumesz, prompt, &promptsz) == ERROR_SUCCESS) { @@ -634,7 +618,7 @@ return ERROR_FUNCTION_FAILED; } -static UINT ready_media(MSIPACKAGE *package, MSIFILE *file, struct media_info *mi) +static UINT ready_media(MSIPACKAGE *package, MSIFILE *file, MSIMEDIAINFO *mi) { UINT rc = ERROR_SUCCESS; @@ -642,7 +626,7 @@ if (mi->is_continuous) return ERROR_SUCCESS; - rc = load_media_info(package, file, mi); + rc = msi_load_media_info(package, file, mi); if (rc != ERROR_SUCCESS) { ERR("Unable to load media info\n"); @@ -808,7 +792,7 @@ */ UINT ACTION_InstallFiles(MSIPACKAGE *package) { - struct media_info *mi; + MSIMEDIAINFO *mi; UINT rc = ERROR_SUCCESS; MSIFILE *file; @@ -825,7 +809,7 @@ */ msi_create_component_directories( package ); - mi = msi_alloc_zero( sizeof(struct media_info) ); + mi = msi_alloc_zero( sizeof(MSIMEDIAINFO) ); LIST_FOR_EACH_ENTRY( file, &package->files, MSIFILE, entry ) { @@ -841,6 +825,8 @@ if (file->Sequence > mi->last_sequence || mi->is_continuous || (file->IsCompressed && !mi->is_extracted)) { + CabData data; + rc = ready_media(package, file, mi); if (rc != ERROR_SUCCESS) { @@ -848,7 +834,11 @@ break; } - if (file->IsCompressed && !extract_cabinet_file(package, mi)) + data.mi = mi; + data.package = package; + + if (file->IsCompressed && + !msi_cabextract(package, mi, cabinet_notify, &data)) { ERR("Failed to extract cabinet: %s\n", debugstr_w(mi->cabinet)); rc = ERROR_FUNCTION_FAILED; @@ -881,7 +871,7 @@ } } - free_media_info( mi ); + msi_free_media_info( mi ); return rc; } Modified: trunk/reactos/dll/win32/msi/format.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/format.c?rev…
============================================================================== --- trunk/reactos/dll/win32/msi/format.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/format.c [iso-8859-1] Sat May 17 14:46:01 2008 @@ -921,28 +921,13 @@ HRESULT hr; IWineMsiRemotePackage *remote_package; BSTR value = NULL; - DWORD len; awstring wstr; remote_package = (IWineMsiRemotePackage *)msi_get_remote( hInstall ); if (remote_package) { - len = 0; hr = IWineMsiRemotePackage_FormatRecord( remote_package, hRecord, - NULL, &len ); - if (FAILED(hr)) - goto done; - - len++; - value = SysAllocStringLen( NULL, len ); - if (!value) - { - r = ERROR_OUTOFMEMORY; - goto done; - } - - hr = IWineMsiRemotePackage_FormatRecord( remote_package, hRecord, - value, &len ); + &value ); if (FAILED(hr)) goto done; Modified: trunk/reactos/dll/win32/msi/helpers.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/helpers.c?re…
============================================================================== --- trunk/reactos/dll/win32/msi/helpers.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/helpers.c [iso-8859-1] Sat May 17 14:46:01 2008 @@ -19,7 +19,7 @@ */ /* - * Here are helper functions formally in action.c that are used by a variaty of + * Here are helper functions formally in action.c that are used by a variety of * actions and functions. */ @@ -31,6 +31,8 @@ #include "wine/debug.h" #include "msipriv.h" #include "winuser.h" +#include "winreg.h" +#include "shlwapi.h" #include "wine/unicode.h" #include "msidefs.h" @@ -885,7 +887,7 @@ return output; } -/* update compoennt state based on a feature change */ +/* update component state based on a feature change */ void ACTION_UpdateComponentStates(MSIPACKAGE *package, LPCWSTR szFeature) { INSTALLSTATE newstate; @@ -1054,3 +1056,122 @@ MessageBoxW( NULL, text, title, type ); } + +typedef struct +{ + MSIPACKAGE *package; + MSIMEDIAINFO *mi; + MSIFILE *file; + LPWSTR destination; +} CabData; + +static INT_PTR cabinet_notify(FDINOTIFICATIONTYPE fdint, PFDINOTIFICATION pfdin) +{ + TRACE("(%d)\n", fdint); + + switch (fdint) + { + case fdintNEXT_CABINET: + { + ERR("continuous cabinets not handled\n"); + return 0; + } + + case fdintCOPY_FILE: + { + CabData *data = (CabData*) pfdin->pv; + LPWSTR file, path; + DWORD attrs, size; + HANDLE handle; + MSIFILE *f; + + file = strdupAtoW(pfdin->psz1); + f = get_loaded_file(data->package, file); + msi_free(file); + + if (!f) + { + WARN("unknown file in cabinet (%s)\n",debugstr_a(pfdin->psz1)); + return 0; + } + + if (lstrcmpW(f->File, data->file->File)) + return 0; + + size = lstrlenW(data->destination) + lstrlenW(data->file->FileName) + 2; + path = msi_alloc(size * sizeof(WCHAR)); + lstrcpyW(path, data->destination); + PathAddBackslashW(path); + lstrcatW(path, data->file->FileName); + + TRACE("extracting %s\n", debugstr_w(path)); + + attrs = f->Attributes & (FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM); + if (!attrs) attrs = FILE_ATTRIBUTE_NORMAL; + + handle = CreateFileW(path, GENERIC_READ | GENERIC_WRITE, 0, + NULL, CREATE_ALWAYS, attrs, NULL); + if (handle == INVALID_HANDLE_VALUE) + { + if (GetFileAttributesW(path) == INVALID_FILE_ATTRIBUTES) + ERR("failed to create %s (error %d)\n", + debugstr_w(path), GetLastError()); + + msi_free(path); + return 0; + } + + msi_free(path); + return (INT_PTR)handle; + } + + case fdintCLOSE_FILE_INFO: + { + FILETIME ft; + FILETIME ftLocal; + HANDLE handle = (HANDLE)pfdin->hf; + + if (!DosDateTimeToFileTime(pfdin->date, pfdin->time, &ft)) + return -1; + if (!LocalFileTimeToFileTime(&ft, &ftLocal)) + return -1; + if (!SetFileTime(handle, &ftLocal, 0, &ftLocal)) + return -1; + CloseHandle(handle); + return 1; + } + + default: + return 0; + } +} + +UINT msi_extract_file(MSIPACKAGE *package, MSIFILE *file, LPWSTR destdir) +{ + MSIMEDIAINFO *mi; + CabData data; + UINT r; + + mi = msi_alloc_zero(sizeof(MSIMEDIAINFO)); + if (!mi) + return ERROR_OUTOFMEMORY; + + r = msi_load_media_info(package, file, mi); + if (r != ERROR_SUCCESS) + goto done; + + data.package = package; + data.mi = mi; + data.file = file; + data.destination = destdir; + + if (!msi_cabextract(package, mi, cabinet_notify, &data)) + { + ERR("Failed to extract cabinet file\n"); + r = ERROR_FUNCTION_FAILED; + } + +done: + msi_free_media_info(mi); + return r; +} Modified: trunk/reactos/dll/win32/msi/install.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/install.c?re…
============================================================================== --- trunk/reactos/dll/win32/msi/install.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/install.c [iso-8859-1] Sat May 17 14:46:01 2008 @@ -1169,15 +1169,16 @@ TRACE("%p %i\n", package, iInstallLevel); - if (iInstallLevel<1 || iInstallLevel>32767) + if (iInstallLevel > 32767) return ERROR_INVALID_PARAMETER; + + if (iInstallLevel < 1) + return MSI_SetFeatureStates( package ); sprintfW( level, fmt, iInstallLevel ); r = MSI_SetPropertyW( package, szInstallLevel, level ); if ( r == ERROR_SUCCESS ) - { r = MSI_SetFeatureStates( package ); - } return r; } Modified: trunk/reactos/dll/win32/msi/msi.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/msi.c?rev=33…
============================================================================== --- trunk/reactos/dll/win32/msi/msi.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/msi.c [iso-8859-1] Sat May 17 14:46:01 2008 @@ -630,7 +630,7 @@ if (classes) MSIREG_OpenLocalSystemProductKey(szProduct, &userdata, FALSE); else - MSIREG_OpenInstallPropertiesKey(szProduct, &userdata, FALSE); + MSIREG_OpenCurrentUserInstallProps(szProduct, &userdata, FALSE); if (!lstrcmpW(szAttribute, INSTALLPROPERTY_HELPLINKW) || !lstrcmpW(szAttribute, INSTALLPROPERTY_HELPTELEPHONEW) || @@ -939,7 +939,7 @@ if (dwContext == MSIINSTALLCONTEXT_USERUNMANAGED) { package = INSTALLPROPERTY_LOCALPACKAGEW; - MSIREG_OpenInstallPropertiesKey(szProductCode, &props, FALSE); + MSIREG_OpenCurrentUserInstallProps(szProductCode, &props, FALSE); if (!props && !prod) goto done; @@ -947,7 +947,7 @@ else if (dwContext == MSIINSTALLCONTEXT_USERMANAGED) { package = managed_local_package; - MSIREG_OpenInstallPropertiesKey(szProductCode, &props, FALSE); + MSIREG_OpenCurrentUserInstallProps(szProductCode, &props, FALSE); if (!props && !managed) goto done; @@ -1066,7 +1066,7 @@ if (!prod && !classes) goto done; - /* FIME */ + /* FIXME */ val = strdupW(empty); r = msi_copy_outval(val, szValue, pcchValue); } @@ -1197,7 +1197,7 @@ if (context == MSIINSTALLCONTEXT_MACHINE) r = MSIREG_OpenLocalSystemProductKey(prodcode, &hkey, FALSE); else - r = MSIREG_OpenInstallPropertiesKey(prodcode, &hkey, FALSE); + r = MSIREG_OpenCurrentUserInstallProps(prodcode, &hkey, FALSE); if (r != ERROR_SUCCESS) return FALSE; @@ -1303,57 +1303,67 @@ INSTALLSTATE WINAPI MsiQueryProductStateW(LPCWSTR szProduct) { - UINT rc; - INSTALLSTATE state = INSTALLSTATE_UNKNOWN; - HKEY hkey = 0, props = 0; - DWORD sz; - BOOL userkey_exists = FALSE; - - static const int GUID_LEN = 38; - static const WCHAR szInstallProperties[] = { - 'I','n','s','t','a','l','l','P','r','o','p','e','r','t','i','e','s',0 - }; + INSTALLSTATE state = INSTALLSTATE_ADVERTISED; + HKEY prodkey = 0, userdata = 0; + BOOL user = TRUE; + DWORD val; + UINT r; + static const WCHAR szWindowsInstaller[] = { - 'W','i','n','d','o','w','s','I','n','s','t','a','l','l','e','r',0 - }; + 'W','i','n','d','o','w','s','I','n','s','t','a','l','l','e','r',0}; TRACE("%s\n", debugstr_w(szProduct)); - if (!szProduct || !*szProduct || lstrlenW(szProduct) != GUID_LEN) + if (!szProduct || !*szProduct) return INSTALLSTATE_INVALIDARG; - rc = MSIREG_OpenUserProductsKey(szProduct,&hkey,FALSE); - if (rc == ERROR_SUCCESS) - { - userkey_exists = TRUE; - state = INSTALLSTATE_ADVERTISED; - RegCloseKey(hkey); - } - - rc = MSIREG_OpenUserDataProductKey(szProduct,&hkey,FALSE); - if (rc != ERROR_SUCCESS) - goto end; - - rc = RegOpenKeyW(hkey, szInstallProperties, &props); - if (rc != ERROR_SUCCESS) - goto end; - - sz = sizeof(state); - rc = RegQueryValueExW(props,szWindowsInstaller,NULL,NULL,(LPVOID)&state, &sz); - if (rc != ERROR_SUCCESS) - goto end; - - if (state) + if (lstrlenW(szProduct) != GUID_SIZE - 1) + return INSTALLSTATE_INVALIDARG; + + r = MSIREG_OpenLocalManagedProductKey(szProduct, &prodkey, FALSE); + if (r != ERROR_SUCCESS) + { + r = MSIREG_OpenUserProductsKey(szProduct, &prodkey, FALSE); + if (r != ERROR_SUCCESS) + { + r = MSIREG_OpenLocalClassesProductKey(szProduct, &prodkey, FALSE); + if (r == ERROR_SUCCESS) + user = FALSE; + } + } + + if (user) + { + r = MSIREG_OpenCurrentUserInstallProps(szProduct, &userdata, FALSE); + if (r != ERROR_SUCCESS) + goto done; + } + else + { + r = MSIREG_OpenLocalSystemInstallProps(szProduct, &userdata, FALSE); + if (r != ERROR_SUCCESS) + goto done; + } + + if (!msi_reg_get_val_dword(userdata, szWindowsInstaller, &val)) + goto done; + + if (val) state = INSTALLSTATE_DEFAULT; else state = INSTALLSTATE_UNKNOWN; - if (state == INSTALLSTATE_DEFAULT && !userkey_exists) - state = INSTALLSTATE_ABSENT; - -end: - RegCloseKey(props); - RegCloseKey(hkey); +done: + if (!prodkey) + { + state = INSTALLSTATE_UNKNOWN; + + if (userdata) + state = INSTALLSTATE_ABSENT; + } + + RegCloseKey(prodkey); + RegCloseKey(userdata); return state; } @@ -1786,7 +1796,7 @@ * szFeature [I] Feature's GUID string * * RETURNS - * INSTALLSTATE_LOCAL Feature is installed and useable + * INSTALLSTATE_LOCAL Feature is installed and usable * INSTALLSTATE_ABSENT Feature is absent * INSTALLSTATE_ADVERTISED Feature should be installed on demand * INSTALLSTATE_UNKNOWN An error occurred Modified: trunk/reactos/dll/win32/msi/msi.rbuild URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/msi.rbuild?r…
============================================================================== --- trunk/reactos/dll/win32/msi/msi.rbuild [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/msi.rbuild [iso-8859-1] Sat May 17 14:46:01 2008 @@ -54,6 +54,7 @@ <include base="msi" root="intermediate">.</include> <file>msi.spec</file> <library>wine</library> + <library>uuid</library> <library>urlmon</library> <library>wininet</library> <library>comctl32</library> @@ -68,15 +69,14 @@ <library>advapi32</library> <library>kernel32</library> <library>odbccp32</library> - <library>uuid</library> <library>ntdll</library> - <dependency>msiserver</dependency> - <dependency>msiheader</dependency> + <dependency>msi_msiserver_typelib</dependency> + <dependency>msi_msiserver_header</dependency> </module> -<module name="msiserver" type="embeddedtypelib" allowwarnings="true"> +<module name="msi_msiserver_header" type="idlheader"> <file>msiserver.idl</file> </module> -<module name="msiheader" type="idlheader"> +<module name="msi_msiserver_typelib" type="embeddedtypelib" allowwarnings="true"> <file>msiserver.idl</file> </module> </group> Modified: trunk/reactos/dll/win32/msi/msi.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/msi.rc?rev=3…
============================================================================== --- trunk/reactos/dll/win32/msi/msi.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/msi.rc [iso-8859-1] Sat May 17 14:46:01 2008 @@ -28,6 +28,7 @@ #include "version.rc" #include "msi_Bg.rc" +#include "msi_Da.rc" #include "msi_De.rc" #include "msi_En.rc" #include "msi_Eo.rc" @@ -42,11 +43,13 @@ #include "msi_Pl.rc" #include "msi_Pt.rc" #include "msi_Ru.rc" +#include "msi_Si.rc" #include "msi_Sv.rc" #include "msi_Tr.rc" LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +/* @makedep: msiserver.tlb */ 1 TYPELIB LOADONCALL DISCARDABLE msiserver.tlb /* @makedep: instadvert.bmp */ Added: trunk/reactos/dll/win32/msi/msi_Da.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/msi_Da.rc?re…
============================================================================== --- trunk/reactos/dll/win32/msi/msi_Da.rc (added) +++ trunk/reactos/dll/win32/msi/msi_Da.rc [iso-8859-1] Sat May 17 14:46:01 2008 @@ -1,0 +1,34 @@ +/* + * Danish language support + * + * Copyright (C) 2008 Jens Albretsen <jens(a)albretsen.dk> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +LANGUAGE LANG_DANISH, SUBLANG_DEFAULT + +STRINGTABLE DISCARDABLE +{ + 4 "Kunne ikke åbne den specificerede installationspakke. Kontroller stien og prøv igen." + 5 "kunne ikke finden stien '%s'." + 9 "indsæt disk '%s'" + 10 "forkerte parametere." + 11 "angiv kataloget som indeholder '%s'." + 12 "featurens installationskilde mangler." + 13 "featurens netværksdrev mangler." + 14 "feature fra:" + 15 "Vælg kataloget som indeholder '%s'." +} Propchange: trunk/reactos/dll/win32/msi/msi_Da.rc ------------------------------------------------------------------------------ svn:eol-style = native Added: trunk/reactos/dll/win32/msi/msi_Si.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/msi_Si.rc?re…
============================================================================== --- trunk/reactos/dll/win32/msi/msi_Si.rc (added) +++ trunk/reactos/dll/win32/msi/msi_Si.rc [iso-8859-1] Sat May 17 14:46:01 2008 @@ -1,0 +1,38 @@ +/* + * Slovenian resources for MSI + * + * Copyright 2008 Rok Mandeljc + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#pragma code_page(65001) + +LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT + +STRINGTABLE DISCARDABLE +{ + 4 "Navedenega namestitvenega paketa ni mogoÄe odpreti. Preverite ime datoteke in poskusite znova." + 5 "pot %s ne obstaja" + 9 "vnesite disk %s" + 10 "neveljavni parametri" + 11 "vnesite ime mape, ki vsebuje %s" + 12 "manjkajoÄ namestitveni vir za namestitev funkcije" + 13 "manjkajoÄ omrežni pogon za namestitev funkcijo" + 14 "funkcija z:" + 15 "izberite mapo, ki vsebuje %s" +} + +#pragma code_page(default) Propchange: trunk/reactos/dll/win32/msi/msi_Si.rc ------------------------------------------------------------------------------ svn:eol-style = native Modified: trunk/reactos/dll/win32/msi/msi_main.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/msi_main.c?r…
============================================================================== --- trunk/reactos/dll/win32/msi/msi_main.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/msi_main.c [iso-8859-1] Sat May 17 14:46:01 2008 @@ -72,7 +72,6 @@ case DLL_PROCESS_ATTACH: msi_hInstance = hinstDLL; DisableThreadLibraryCalls(hinstDLL); - msi_dialog_register_class(); break; case DLL_PROCESS_DETACH: if (msi_typelib) ITypeLib_Release( msi_typelib ); Modified: trunk/reactos/dll/win32/msi/msi_ros.diff URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/msi_ros.diff…
============================================================================== --- trunk/reactos/dll/win32/msi/msi_ros.diff [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/msi_ros.diff [iso-8859-1] Sat May 17 14:46:01 2008 @@ -2,7 +2,7 @@ =================================================================== --- cond.tab.c (revision 31639) +++ cond.tab.c (working copy) -@@ -0,0 +1,2429 @@ +@@ -0,0 +1,2439 @@ +/* A Bison parser, made by GNU Bison 2.1. */ + +/* Skeleton parser for Yacc-like parsing with Bison, @@ -223,13 +223,13 @@ +static const WCHAR szEmpty[] = { 0 }; + +static INT compare_int( INT a, INT operator, INT b ); -+static INT compare_string( LPCWSTR a, INT operator, LPCWSTR b ); -+ -+static INT compare_and_free_strings( LPWSTR a, INT op, LPWSTR b ) ++static INT compare_string( LPCWSTR a, INT operator, LPCWSTR b, BOOL convert ); ++ ++static INT compare_and_free_strings( LPWSTR a, INT op, LPWSTR b, BOOL convert ) +{ + INT r; + -+ r = compare_string( a, op, b ); ++ r = compare_string( a, op, b, convert ); + msi_free( a ); + msi_free( b ); + return r; @@ -543,8 +543,8 @@ + 175, 182, 186, 190, 195, 199, 208, 217, 221, 225, + 229, 233, 238, 243, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, -+ 267, 268, 272, 276, 283, 292, 296, 305, 314, 323, -+ 335, 342, 356, 365 ++ 267, 268, 272, 276, 283, 292, 296, 305, 314, 327, ++ 339, 346, 360, 369 +}; +#endif + @@ -1472,28 +1472,28 @@ + case 17: +#line 218 "cond.y" + { -+ (yyval.value) = compare_and_free_strings( (yyvsp[-2].string), (yyvsp[-1].value), (yyvsp[0].string) ); ++ (yyval.value) = compare_and_free_strings( (yyvsp[-2].string), (yyvsp[-1].value), (yyvsp[0].string), TRUE ); + ;} + break; + + case 18: +#line 222 "cond.y" + { -+ (yyval.value) = compare_and_free_strings( (yyvsp[-2].string), (yyvsp[-1].value), (yyvsp[0].string) ); ++ (yyval.value) = compare_and_free_strings( (yyvsp[-2].string), (yyvsp[-1].value), (yyvsp[0].string), TRUE ); + ;} + break; + + case 19: +#line 226 "cond.y" + { -+ (yyval.value) = compare_and_free_strings( (yyvsp[-2].string), (yyvsp[-1].value), (yyvsp[0].string) ); ++ (yyval.value) = compare_and_free_strings( (yyvsp[-2].string), (yyvsp[-1].value), (yyvsp[0].string), TRUE ); + ;} + break; + + case 20: +#line 230 "cond.y" + { -+ (yyval.value) = compare_and_free_strings( (yyvsp[-2].string), (yyvsp[-1].value), (yyvsp[0].string) ); ++ (yyval.value) = compare_and_free_strings( (yyvsp[-2].string), (yyvsp[-1].value), (yyvsp[0].string), FALSE ); + ;} + break; + @@ -1671,13 +1671,17 @@ + INSTALLSTATE install = INSTALLSTATE_UNKNOWN, action = INSTALLSTATE_UNKNOWN; + + MSI_GetFeatureStateW(cond->package, (yyvsp[0].string), &install, &action ); -+ (yyval.value) = action; ++ if (action == INSTALLSTATE_UNKNOWN) ++ (yyval.value) = MSICONDITION_FALSE; ++ else ++ (yyval.value) = action; ++ + msi_free( (yyvsp[0].string) ); + ;} + break; + + case 49: -+#line 324 "cond.y" ++#line 328 "cond.y" + { + COND_input* cond = (COND_input*) info; + INSTALLSTATE install = INSTALLSTATE_UNKNOWN, action = INSTALLSTATE_UNKNOWN; @@ -1689,7 +1693,7 @@ + break; + + case 50: -+#line 336 "cond.y" ++#line 340 "cond.y" + { + COND_input* cond = (COND_input*) info; + @@ -1699,7 +1703,7 @@ + break; + + case 51: -+#line 343 "cond.y" ++#line 347 "cond.y" + { + UINT len = GetEnvironmentVariableW( (yyvsp[0].string), NULL, 0 ); + (yyval.string) = NULL; @@ -1713,7 +1717,7 @@ + break; + + case 52: -+#line 357 "cond.y" ++#line 361 "cond.y" + { + (yyval.string) = COND_GetString(&(yyvsp[0].str)); + if( !(yyval.string) ) @@ -1722,7 +1726,7 @@ + break; + + case 53: -+#line 366 "cond.y" ++#line 370 "cond.y" + { + LPWSTR szNum = COND_GetString(&(yyvsp[0].str)); + if( !szNum ) @@ -1737,7 +1741,7 @@ + } + +/* Line 1126 of yacc.c. */ -+#line 1736 "cond.tab.c" ++#line 1740 "cond.tab.c" + + yyvsp -= yylen; + yyssp -= yylen; @@ -2005,7 +2009,7 @@ +} + + -+#line 375 "cond.y" ++#line 379 "cond.y" + + + @@ -2037,6 +2041,9 @@ +static BOOL str_is_number( LPCWSTR str ) +{ + int i; ++ ++ if (!*str) ++ return FALSE; + + for (i = 0; i < lstrlenW( str ); i++) + if (!isdigitW(str[i])) @@ -2084,7 +2091,7 @@ + return 0; +} + -+static INT compare_string( LPCWSTR a, INT operator, LPCWSTR b ) ++static INT compare_string( LPCWSTR a, INT operator, LPCWSTR b, BOOL convert ) +{ + if (operator >= COND_SS && operator <= COND_RHS) + return compare_substring( a, operator, b ); @@ -2092,6 +2099,9 @@ + /* null and empty string are equivalent */ + if (!a) a = szEmpty; + if (!b) b = szEmpty; ++ ++ if (convert && str_is_number(a) && str_is_number(b)) ++ return compare_int( atoiW(a), operator, atoiW(b) ); + + /* a or b may be NULL */ + switch (operator) @@ -2623,7 +2633,7 @@ =================================================================== --- sql.tab.c (revision 31639) +++ sql.tab.c (working copy) -@@ -0,0 +1,2580 @@ +@@ -0,0 +1,2579 @@ +/* A Bison parser, made by GNU Bison 2.1. */ + +/* Skeleton parser for Yacc-like parsing with Bison, @@ -3188,13 +3198,13 @@ +static const unsigned short int yyrline[] = +{ + 0, 124, 124, 132, 133, 134, 135, 136, 137, 141, -+ 152, 165, 177, 192, 202, 215, 228, 238, 248, 261, -+ 265, 272, 282, 292, 299, 308, 312, 316, 323, 327, -+ 334, 338, 342, 346, 350, 354, 358, 365, 374, 387, -+ 391, 395, 411, 432, 433, 437, 444, 445, 461, 471, -+ 484, 489, 498, 504, 510, 516, 522, 528, 534, 540, -+ 546, 552, 558, 567, 568, 572, 579, 590, 591, 599, -+ 607, 613, 619, 625, 634, 643, 649, 658, 665, 674 ++ 151, 164, 176, 191, 201, 214, 227, 237, 247, 260, ++ 264, 271, 281, 291, 298, 307, 311, 315, 322, 326, ++ 333, 337, 341, 345, 349, 353, 357, 364, 373, 386, ++ 390, 394, 410, 431, 432, 436, 443, 444, 460, 470, ++ 483, 488, 497, 503, 509, 515, 521, 527, 533, 539, ++ 545, 551, 557, 566, 567, 571, 578, 589, 590, 598, ++ 606, 612, 618, 624, 633, 642, 648, 657, 664, 673 +}; +#endif + @@ -4068,9 +4078,8 @@ + { + SQL_input *sql = (SQL_input*) info; + MSIVIEW *insert = NULL; -+ UINT r; -+ -+ r = INSERT_CreateView( sql->db, &insert, (yyvsp[-7].string), (yyvsp[-5].column_list), (yyvsp[-1].column_list), FALSE ); ++ ++ INSERT_CreateView( sql->db, &insert, (yyvsp[-7].string), (yyvsp[-5].column_list), (yyvsp[-1].column_list), FALSE ); + if( !insert ) + YYABORT; + (yyval.query) = insert; @@ -4078,7 +4087,7 @@ + break; + + case 10: -+#line 153 "sql.y" ++#line 152 "sql.y" + { + SQL_input *sql = (SQL_input*) info; + MSIVIEW *insert = NULL; @@ -4091,7 +4100,7 @@ + break; + + case 11: -+#line 166 "sql.y" ++#line 165 "sql.y" + { + SQL_input* sql = (SQL_input*) info; + MSIVIEW *create = NULL; @@ -4106,7 +4115,7 @@ + break; + + case 12: -+#line 178 "sql.y" ++#line 177 "sql.y" + { + SQL_input* sql = (SQL_input*) info; + MSIVIEW *create = NULL; @@ -4121,7 +4130,7 @@ + break; + + case 13: -+#line 193 "sql.y" ++#line 192 "sql.y" + { + SQL_input* sql = (SQL_input*) info; + MSIVIEW *update = NULL; @@ -4134,7 +4143,7 @@ + break; + + case 14: -+#line 203 "sql.y" ++#line 202 "sql.y" + { + SQL_input* sql = (SQL_input*) info; + MSIVIEW *update = NULL; @@ -4147,7 +4156,7 @@ + break; + + case 15: -+#line 216 "sql.y" ++#line 215 "sql.y" + { + SQL_input* sql = (SQL_input*) info; + MSIVIEW *delete = NULL; @@ -4160,7 +4169,7 @@ + break; + + case 16: -+#line 229 "sql.y" ++#line 228 "sql.y" + { + SQL_input* sql = (SQL_input*) info; + MSIVIEW *alter = NULL; @@ -4173,7 +4182,7 @@ + break; + + case 17: -+#line 239 "sql.y" ++#line 238 "sql.y" + { + SQL_input *sql = (SQL_input *)info; + MSIVIEW *alter = NULL; @@ -4186,7 +4195,7 @@ + break; + + case 18: -+#line 249 "sql.y" ++#line 248 "sql.y" + { + SQL_input *sql = (SQL_input *)info; + MSIVIEW *alter = NULL; @@ -4199,21 +4208,21 @@ + break; + + case 19: -+#line 262 "sql.y" ++#line 261 "sql.y" + { + (yyval.integer) = 1; + ;} + break; + + case 20: -+#line 266 "sql.y" ++#line 265 "sql.y" + { + (yyval.integer) = -1; + ;} + break; + + case 21: -+#line 273 "sql.y" ++#line 272 "sql.y" + { + if( SQL_MarkPrimaryKeys( (yyvsp[-3].column_list), (yyvsp[0].column_list) ) ) + (yyval.column_list) = (yyvsp[-3].column_list); @@ -4223,7 +4232,7 @@ + break; + + case 22: -+#line 283 "sql.y" ++#line 282 "sql.y" + { + column_info *ci; + @@ -4236,14 +4245,14 @@ + break; + + case 23: -+#line 293 "sql.y" ++#line 292 "sql.y" + { + (yyval.column_list) = (yyvsp[0].column_list); + ;} + break; + + case 24: -+#line 300 "sql.y" ++#line 299 "sql.y" + { + (yyval.column_list) = (yyvsp[-1].column_list); + (yyval.column_list)->type = ((yyvsp[0].column_type) | MSITYPE_VALID); @@ -4252,91 +4261,91 @@ + break; + + case 25: -+#line 309 "sql.y" ++#line 308 "sql.y" + { + (yyval.column_type) = (yyvsp[0].column_type); + ;} + break; + + case 26: -+#line 313 "sql.y" ++#line 312 "sql.y" + { + (yyval.column_type) = (yyvsp[-1].column_type) | MSITYPE_LOCALIZABLE; + ;} + break; + + case 27: -+#line 317 "sql.y" ++#line 316 "sql.y" + { + (yyval.column_type) = (yyvsp[-1].column_type) | MSITYPE_TEMPORARY; + ;} + break; + + case 28: -+#line 324 "sql.y" ++#line 323 "sql.y" + { + (yyval.column_type) |= MSITYPE_NULLABLE; + ;} + break; + + case 29: -+#line 328 "sql.y" ++#line 327 "sql.y" + { + (yyval.column_type) = (yyvsp[-2].column_type); + ;} + break; + + case 30: -+#line 335 "sql.y" ++#line 334 "sql.y" + { + (yyval.column_type) = MSITYPE_STRING | 1; + ;} + break; + + case 31: -+#line 339 "sql.y" ++#line 338 "sql.y" + { + (yyval.column_type) = MSITYPE_STRING | 0x400 | (yyvsp[-1].column_type); + ;} + break; + + case 32: -+#line 343 "sql.y" ++#line 342 "sql.y" + { + (yyval.column_type) = 2; + ;} + break; + + case 33: -+#line 347 "sql.y" ++#line 346 "sql.y" + { + (yyval.column_type) = 2; + ;} + break; + + case 34: -+#line 351 "sql.y" ++#line 350 "sql.y" + { + (yyval.column_type) = 2; + ;} + break; + + case 35: -+#line 355 "sql.y" ++#line 354 "sql.y" + { + (yyval.column_type) = 4; + ;} + break; + + case 36: -+#line 359 "sql.y" ++#line 358 "sql.y" + { + (yyval.column_type) = MSITYPE_STRING | MSITYPE_VALID; + ;} + break; + + case 37: -+#line 366 "sql.y" ++#line 365 "sql.y" + { + if( ( (yyvsp[0].integer) > 255 ) || ( (yyvsp[0].integer) < 0 ) ) + YYABORT; @@ -4345,7 +4354,7 @@ + break; + + case 38: -+#line 375 "sql.y" ++#line 374 "sql.y" + { + UINT r; + @@ -4361,14 +4370,14 @@ + break; + + case 40: -+#line 392 "sql.y" ++#line 391 "sql.y" + { + (yyval.query) = (yyvsp[0].query); + ;} + break; + + case 41: -+#line 396 "sql.y" ++#line 395 "sql.y" + { + SQL_input* sql = (SQL_input*) info; + UINT r; @@ -4384,7 +4393,7 @@ + break; + + case 42: -+#line 412 "sql.y" ++#line 411 "sql.y" + { + SQL_input* sql = (SQL_input*) info; + UINT r; @@ -4405,21 +4414,21 @@ + break; + + case 44: -+#line 434 "sql.y" ++#line 433 "sql.y" + { + (yyvsp[-2].column_list)->next = (yyvsp[0].column_list); + ;} + break; + + case 45: -+#line 438 "sql.y" ++#line 437 "sql.y" + { + (yyval.column_list) = NULL; + ;} + break; + + case 47: -+#line 446 "sql.y" ++#line 445 "sql.y" + { + SQL_input* sql = (SQL_input*) info; + UINT r; @@ -4435,7 +4444,7 @@ + break; + + case 48: -+#line 462 "sql.y" ++#line 461 "sql.y" + { + SQL_input* sql = (SQL_input*) info; + UINT r; @@ -4448,7 +4457,7 @@ + break; + + case 49: -+#line 472 "sql.y" ++#line 471 "sql.y" + { + SQL_input* sql = (SQL_input*) info; + UINT r; @@ -4461,14 +4470,14 @@ + break; + + case 50: -+#line 485 "sql.y" ++#line 484 "sql.y" + { + (yyval.string) = strdupW((yyvsp[0].string)); + ;} + break; + + case 51: -+#line 490 "sql.y" ++#line 489 "sql.y" + { + (yyval.string) = parser_add_table((yyvsp[0].string), (yyvsp[-2].string)); + if (!(yyval.string)) @@ -4477,7 +4486,7 @@ + break; + + case 52: -+#line 499 "sql.y" ++#line 498 "sql.y" + { + (yyval.expr) = (yyvsp[-1].expr); + if( !(yyval.expr) ) @@ -4486,7 +4495,7 @@ + break; + + case 53: -+#line 505 "sql.y" ++#line 504 "sql.y" + { + (yyval.expr) = EXPR_complex( info, (yyvsp[-2].expr), OP_AND, (yyvsp[0].expr) ); + if( !(yyval.expr) ) @@ -4495,7 +4504,7 @@ + break; + + case 54: -+#line 511 "sql.y" ++#line 510 "sql.y" + { + (yyval.expr) = EXPR_complex( info, (yyvsp[-2].expr), OP_OR, (yyvsp[0].expr) ); + if( !(yyval.expr) ) @@ -4504,7 +4513,7 @@ + break; + + case 55: -+#line 517 "sql.y" ++#line 516 "sql.y" + { + (yyval.expr) = EXPR_complex( info, (yyvsp[-2].expr), OP_EQ, (yyvsp[0].expr) ); + if( !(yyval.expr) ) @@ -4513,7 +4522,7 @@ + break; + + case 56: -+#line 523 "sql.y" ++#line 522 "sql.y" + { + (yyval.expr) = EXPR_complex( info, (yyvsp[-2].expr), OP_GT, (yyvsp[0].expr) ); + if( !(yyval.expr) ) @@ -4522,7 +4531,7 @@ + break; + + case 57: -+#line 529 "sql.y" ++#line 528 "sql.y" + { + (yyval.expr) = EXPR_complex( info, (yyvsp[-2].expr), OP_LT, (yyvsp[0].expr) ); + if( !(yyval.expr) ) @@ -4531,7 +4540,7 @@ + break; + + case 58: -+#line 535 "sql.y" ++#line 534 "sql.y" + { + (yyval.expr) = EXPR_complex( info, (yyvsp[-2].expr), OP_LE, (yyvsp[0].expr) ); + if( !(yyval.expr) ) @@ -4540,7 +4549,7 @@ + break; + + case 59: -+#line 541 "sql.y" ++#line 540 "sql.y" + { + (yyval.expr) = EXPR_complex( info, (yyvsp[-2].expr), OP_GE, (yyvsp[0].expr) ); + if( !(yyval.expr) ) @@ -4549,7 +4558,7 @@ + break; + + case 60: -+#line 547 "sql.y" ++#line 546 "sql.y" + { + (yyval.expr) = EXPR_complex( info, (yyvsp[-2].expr), OP_NE, (yyvsp[0].expr) ); + if( !(yyval.expr) ) @@ -4558,7 +4567,7 @@ + break; + + case 61: -+#line 553 "sql.y" ++#line 552 "sql.y" + { + (yyval.expr) = EXPR_unary( info, (yyvsp[-2].expr), OP_ISNULL ); + if( !(yyval.expr) ) @@ -4567,7 +4576,7 @@ + break; + + case 62: -+#line 559 "sql.y" ++#line 558 "sql.y" + { + (yyval.expr) = EXPR_unary( info, (yyvsp[-3].expr), OP_NOTNULL ); + if( !(yyval.expr) ) @@ -4576,7 +4585,7 @@ + break; + + case 65: -+#line 573 "sql.y" ++#line 572 "sql.y" + { + (yyval.column_list) = parser_alloc_column( info, NULL, NULL ); + if( !(yyval.column_list) ) @@ -4586,7 +4595,7 @@ + break; + + case 66: -+#line 580 "sql.y" ++#line 579 "sql.y" + { + (yyval.column_list) = parser_alloc_column( info, NULL, NULL ); + if( !(yyval.column_list) ) @@ -4597,7 +4606,7 @@ + break; + + case 68: -+#line 592 "sql.y" ++#line 591 "sql.y" + { + (yyval.column_list) = (yyvsp[-2].column_list); + (yyval.column_list)->next = (yyvsp[0].column_list); @@ -4605,7 +4614,7 @@ + break; + + case 69: -+#line 600 "sql.y" ++#line 599 "sql.y" + { + (yyval.column_list) = (yyvsp[-2].column_list); + (yyval.column_list)->val = (yyvsp[0].expr); @@ -4613,7 +4622,7 @@ + break; + + case 70: -+#line 608 "sql.y" ++#line 607 "sql.y" + { + (yyval.expr) = EXPR_ival( info, (yyvsp[0].integer) ); + if( !(yyval.expr) ) @@ -4622,7 +4631,7 @@ + break; + + case 71: -+#line 614 "sql.y" ++#line 613 "sql.y" + { + (yyval.expr) = EXPR_ival( info, -(yyvsp[0].integer) ); + if( !(yyval.expr) ) @@ -4631,7 +4640,7 @@ + break; + + case 72: -+#line 620 "sql.y" ++#line 619 "sql.y" + { + (yyval.expr) = EXPR_sval( info, &(yyvsp[0].str) ); + if( !(yyval.expr) ) @@ -4640,7 +4649,7 @@ + break; + + case 73: -+#line 626 "sql.y" ++#line 625 "sql.y" + { + (yyval.expr) = EXPR_wildcard( info ); + if( !(yyval.expr) ) @@ -4649,7 +4658,7 @@ + break; + + case 74: -+#line 635 "sql.y" ++#line 634 "sql.y" + { + (yyval.expr) = EXPR_column( info, (yyvsp[0].column_list) ); + if( !(yyval.expr) ) @@ -4658,7 +4667,7 @@ + break; + + case 75: -+#line 644 "sql.y" ++#line 643 "sql.y" + { + (yyval.column_list) = parser_alloc_column( info, (yyvsp[-2].string), (yyvsp[0].string) ); + if( !(yyval.column_list) ) @@ -4667,7 +4676,7 @@ + break; + + case 76: -+#line 650 "sql.y" ++#line 649 "sql.y" + { + (yyval.column_list) = parser_alloc_column( info, NULL, (yyvsp[0].string) ); + if( !(yyval.column_list) ) @@ -4676,14 +4685,14 @@ + break; + + case 77: -+#line 659 "sql.y" ++#line 658 "sql.y" + { + (yyval.string) = (yyvsp[0].string); + ;} + break; + + case 78: -+#line 666 "sql.y" ++#line 665 "sql.y" + { + (yyval.string) = SQL_getstring( info, &(yyvsp[0].str) ); + if( !(yyval.string) ) @@ -4692,7 +4701,7 @@ + break; + + case 79: -+#line 675 "sql.y" ++#line 674 "sql.y" + { + (yyval.integer) = SQL_getint( info ); + ;} @@ -4703,7 +4712,7 @@ + } + +/* Line 1126 of yacc.c. */ -+#line 2081 "sql.tab.c" ++#line 2080 "sql.tab.c" + + yyvsp -= yylen; + yyssp -= yylen; @@ -4971,7 +4980,7 @@ +} + + -+#line 680 "sql.y" ++#line 679 "sql.y" + + +static LPWSTR parser_add_table(LPWSTR list, LPWSTR table) Modified: trunk/reactos/dll/win32/msi/msipriv.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/msipriv.h?re…
============================================================================== --- trunk/reactos/dll/win32/msi/msipriv.h [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/msipriv.h [iso-8859-1] Sat May 17 14:46:01 2008 @@ -26,6 +26,7 @@ #include "windef.h" #include "winbase.h" +#include "fdi.h" #include "msi.h" #include "msiquery.h" #include "objbase.h" @@ -133,6 +134,20 @@ LPWSTR disk_prompt; } MSIMEDIADISK; +typedef struct tagMSIMEDIAINFO +{ + UINT disk_id; + UINT type; + UINT last_sequence; + LPWSTR disk_prompt; + LPWSTR cabinet; + LPWSTR first_volume; + LPWSTR volume_label; + BOOL is_continuous; + BOOL is_extracted; + WCHAR source[MAX_PATH]; +} MSIMEDIAINFO; + typedef struct _column_info { LPCWSTR table; @@ -307,6 +322,7 @@ float center_y; UINT WordCount; + UINT Context; struct list subscriptions; @@ -757,7 +773,8 @@ extern UINT MSIREG_OpenProductsKey(LPCWSTR szProduct, HKEY* key, BOOL create); extern UINT MSIREG_OpenPatchesKey(LPCWSTR szPatch, HKEY* key, BOOL create); extern UINT MSIREG_OpenUserDataProductKey(LPCWSTR szProduct, HKEY* key, BOOL create); -extern UINT MSIREG_OpenInstallPropertiesKey(LPCWSTR szProduct, HKEY* key, BOOL create); +extern UINT MSIREG_OpenCurrentUserInstallProps(LPCWSTR szProduct, HKEY* key, BOOL create); +extern UINT MSIREG_OpenLocalSystemInstallProps(LPCWSTR szProduct, HKEY* key, BOOL create); extern UINT MSIREG_OpenUserFeaturesKey(LPCWSTR szProduct, HKEY* key, BOOL create); extern UINT MSIREG_OpenUserComponentsKey(LPCWSTR szComponent, HKEY* key, BOOL create); extern UINT MSIREG_OpenUpgradeCodesKey(LPCWSTR szProduct, HKEY* key, BOOL create); @@ -887,6 +904,10 @@ extern void msi_ui_error( DWORD msg_id, DWORD type ); extern UINT msi_set_last_used_source(LPCWSTR product, LPCWSTR usersid, MSIINSTALLCONTEXT context, DWORD options, LPCWSTR value); +extern UINT msi_load_media_info(MSIPACKAGE *package, MSIFILE *file, MSIMEDIAINFO *mi); +extern void msi_free_media_info(MSIMEDIAINFO *mi); +extern BOOL msi_cabextract(MSIPACKAGE* package, MSIMEDIAINFO *mi, PFNFDINOTIFY notify, LPVOID data); +extern UINT msi_extract_file(MSIPACKAGE *package, MSIFILE *file, LPWSTR destdir); /* control event stuff */ extern VOID ControlEvent_FireSubscribedEvent(MSIPACKAGE *package, LPCWSTR event, Modified: trunk/reactos/dll/win32/msi/msiquery.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/msiquery.c?r…
============================================================================== --- trunk/reactos/dll/win32/msi/msiquery.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/msiquery.c [iso-8859-1] Sat May 17 14:46:01 2008 @@ -869,14 +869,11 @@ '`','T','a','b','l','e','`',' ','=',' ','\'','%','s','\'',0 }; struct msi_primary_key_record_info info; MSIQUERY *query = NULL; - MSIVIEW *view; - UINT r; - + UINT r; + r = MSI_OpenQuery( db, &query, sql, table ); if( r != ERROR_SUCCESS ) return r; - - view = query->view; /* count the number of primary key records */ info.n = 0; Modified: trunk/reactos/dll/win32/msi/msiserver.idl URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/msiserver.id…
============================================================================== --- trunk/reactos/dll/win32/msi/msiserver.idl [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/msiserver.idl [iso-8859-1] Sat May 17 14:46:01 2008 @@ -70,7 +70,7 @@ HRESULT SetComponentState( [in] BSTR component, [in] INSTALLSTATE state ); HRESULT GetLanguage( [out] LANGID *language ); HRESULT SetInstallLevel( [in] int level ); - HRESULT FormatRecord( [in] MSIHANDLE record, [out] BSTR value, [out] DWORD *size ); + HRESULT FormatRecord( [in] MSIHANDLE record, [out] BSTR *value ); HRESULT EvaluateCondition( [in] BSTR condition ); } Modified: trunk/reactos/dll/win32/msi/package.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/package.c?re…
============================================================================== --- trunk/reactos/dll/win32/msi/package.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/package.c [iso-8859-1] Sat May 17 14:46:01 2008 @@ -416,7 +416,6 @@ static const WCHAR szColorBits[] = {'C','o','l','o','r','B','i','t','s',0}; static const WCHAR szIntFormat[] = {'%','d',0}; static const WCHAR szIntel[] = { 'I','n','t','e','l',0 }; - static const WCHAR szAllUsers[] = { 'A','L','L','U','S','E','R','S',0 }; static const WCHAR szUserInfo[] = { 'S','O','F','T','W','A','R','E','\\', 'M','i','c','r','o','s','o','f','t','\\', @@ -542,7 +541,6 @@ /* in a wine environment the user is always admin and privileged */ MSI_SetPropertyW(package,szAdminUser,szOne); MSI_SetPropertyW(package,szPriv,szOne); - MSI_SetPropertyW(package, szAllUsers, szOne); /* set the os things */ OSVersion.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXW); @@ -762,6 +760,30 @@ return r; } +static UINT msi_set_context(MSIPACKAGE *package) +{ + WCHAR val[10]; + DWORD sz = 10; + DWORD num; + UINT r; + + static const WCHAR szOne[] = {'1',0}; + static const WCHAR szAllUsers[] = {'A','L','L','U','S','E','R','S',0}; + + package->Context = MSIINSTALLCONTEXT_USERUNMANAGED; + + r = MSI_GetPropertyW(package, szAllUsers, val, &sz); + if (r == ERROR_SUCCESS) + { + num = atolW(val); + if (num == 1 || num == 2) + package->Context = MSIINSTALLCONTEXT_MACHINE; + } + + MSI_SetPropertyW(package, szAllUsers, szOne); + return ERROR_SUCCESS; +} + MSIPACKAGE *MSI_CreatePackage( MSIDATABASE *db, LPCWSTR base_url ) { static const WCHAR szLevel[] = { 'U','I','L','e','v','e','l',0 }; @@ -801,6 +823,8 @@ if (package->WordCount & MSIWORDCOUNT_ADMINISTRATIVE) msi_load_admin_properties( package ); + + msi_set_context( package ); } return package; @@ -1788,10 +1812,19 @@ } static HRESULT WINAPI mrp_FormatRecord( IWineMsiRemotePackage *iface, MSIHANDLE record, - BSTR value, DWORD *size ) -{ - msi_remote_package_impl* This = mrp_from_IWineMsiRemotePackage( iface ); - UINT r = MsiFormatRecordW(This->package, record, (LPWSTR)value, size); + BSTR *value) +{ + DWORD size = 0; + msi_remote_package_impl* This = mrp_from_IWineMsiRemotePackage( iface ); + UINT r = MsiFormatRecordW(This->package, record, NULL, &size); + if (r == ERROR_SUCCESS) + { + *value = SysAllocStringLen(NULL, size); + if (!*value) + return E_OUTOFMEMORY; + size++; + r = MsiFormatRecordW(This->package, record, *value, &size); + } return HRESULT_FROM_WIN32(r); } Modified: trunk/reactos/dll/win32/msi/registry.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/registry.c?r…
============================================================================== --- trunk/reactos/dll/win32/msi/registry.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/registry.c [iso-8859-1] Sat May 17 14:46:01 2008 @@ -381,7 +381,7 @@ LPWSTR msi_version_dword_to_str(DWORD version) { - const WCHAR fmt[] = { '%','u','.','%','u','.','%','u',0 }; + static const WCHAR fmt[] = { '%','u','.','%','u','.','%','u',0 }; LPWSTR str = msi_alloc(20); sprintfW(str, fmt, (version&0xff000000)>>24, @@ -392,7 +392,10 @@ LONG msi_reg_set_val_str( HKEY hkey, LPCWSTR name, LPCWSTR value ) { - DWORD len = value ? (lstrlenW(value) + 1) * sizeof (WCHAR) : 0; + static const WCHAR emptyW[] = {0}; + DWORD len; + if (!value) value = emptyW; + len = (lstrlenW(value) + 1) * sizeof (WCHAR); return RegSetValueExW( hkey, name, 0, REG_SZ, (const BYTE *)value, len ); } @@ -753,34 +756,53 @@ return rc; } -UINT MSIREG_OpenInstallPropertiesKey(LPCWSTR szProduct, HKEY *key, BOOL create) -{ - UINT rc; - WCHAR squished_pc[GUID_SIZE]; - WCHAR keypath[0x200]; - LPWSTR usersid; +static UINT MSIREG_OpenInstallProps(LPCWSTR szProduct, LPCWSTR szUserSID, + HKEY *key, BOOL create) +{ + UINT rc; + WCHAR squished_pc[GUID_SIZE]; + WCHAR keypath[0x200]; TRACE("%s\n", debugstr_w(szProduct)); if (!squash_guid(szProduct, squished_pc)) return ERROR_FUNCTION_FAILED; TRACE("squished (%s)\n", debugstr_w(squished_pc)); - rc = get_user_sid(&usersid); - if (rc != ERROR_SUCCESS || !usersid) - { - ERR("Failed to retrieve user SID: %d\n", rc); - return rc; - } - - sprintfW(keypath, szInstallProperties_fmt, usersid, squished_pc); + sprintfW(keypath, szInstallProperties_fmt, szUserSID, squished_pc); if (create) rc = RegCreateKeyW(HKEY_LOCAL_MACHINE, keypath, key); else rc = RegOpenKeyW(HKEY_LOCAL_MACHINE, keypath, key); + return rc; +} + +UINT MSIREG_OpenCurrentUserInstallProps(LPCWSTR szProduct, HKEY *key, + BOOL create) +{ + UINT rc; + LPWSTR usersid; + + rc = get_user_sid(&usersid); + if (rc != ERROR_SUCCESS || !usersid) + { + ERR("Failed to retrieve user SID: %d\n", rc); + return rc; + } + + rc = MSIREG_OpenInstallProps(szProduct, usersid, key, create); + LocalFree(usersid); return rc; +} + +UINT MSIREG_OpenLocalSystemInstallProps(LPCWSTR szProduct, HKEY *key, + BOOL create) +{ + static const WCHAR localsid[] = {'S','-','1','-','5','-','1','8',0}; + + return MSIREG_OpenInstallProps(szProduct, localsid, key, create); } UINT MSIREG_DeleteUserDataProductKey(LPCWSTR szProduct) Modified: trunk/reactos/dll/win32/msi/source.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/source.c?rev…
============================================================================== --- trunk/reactos/dll/win32/msi/source.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/source.c [iso-8859-1] Sat May 17 14:46:01 2008 @@ -153,7 +153,6 @@ LPWSTR usersid = NULL; LPWSTR volume = NULL; LPWSTR prompt = NULL; - DWORD volumesz, promptsz; UINT r = ERROR_INVALID_PARAMETER; TRACE("(%s, %s, %d, %d, %d, %p, %p, %p, %p, %p)\n", debugstr_a(szProductCodeOrPatchCode), @@ -183,11 +182,11 @@ goto done; if (szVolumeLabel && pcchVolumeLabel) - volumesz = WideCharToMultiByte(CP_ACP, 0, volume, -1, szVolumeLabel, + WideCharToMultiByte(CP_ACP, 0, volume, -1, szVolumeLabel, *pcchVolumeLabel + 1, NULL, NULL); if (szDiskPrompt) - promptsz = WideCharToMultiByte(CP_ACP, 0, prompt, -1, szDiskPrompt, + WideCharToMultiByte(CP_ACP, 0, prompt, -1, szDiskPrompt, *pcchDiskPrompt + 1, NULL, NULL); done: @@ -823,7 +822,7 @@ } else if (strcmpW(INSTALLPROPERTY_PACKAGENAMEW, szProperty)==0) { - DWORD size = lstrlenW(szValue)*sizeof(WCHAR); + DWORD size = (lstrlenW(szValue) + 1) * sizeof(WCHAR); rc = RegSetValueExW(sourcekey, INSTALLPROPERTY_PACKAGENAMEW, 0, REG_SZ, (const BYTE *)szValue, size); if (rc != ERROR_SUCCESS) Modified: trunk/reactos/dll/win32/msi/sql.tab.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/sql.tab.c?re…
============================================================================== --- trunk/reactos/dll/win32/msi/sql.tab.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/sql.tab.c [iso-8859-1] Sat May 17 14:46:01 2008 @@ -562,13 +562,13 @@ static const unsigned short int yyrline[] = { 0, 124, 124, 132, 133, 134, 135, 136, 137, 141, - 152, 165, 177, 192, 202, 215, 228, 238, 248, 261, - 265, 272, 282, 292, 299, 308, 312, 316, 323, 327, - 334, 338, 342, 346, 350, 354, 358, 365, 374, 387, - 391, 395, 411, 432, 433, 437, 444, 445, 461, 471, - 484, 489, 498, 504, 510, 516, 522, 528, 534, 540, - 546, 552, 558, 567, 568, 572, 579, 590, 591, 599, - 607, 613, 619, 625, 634, 643, 649, 658, 665, 674 + 151, 164, 176, 191, 201, 214, 227, 237, 247, 260, + 264, 271, 281, 291, 298, 307, 311, 315, 322, 326, + 333, 337, 341, 345, 349, 353, 357, 364, 373, 386, + 390, 394, 410, 431, 432, 436, 443, 444, 460, 470, + 483, 488, 497, 503, 509, 515, 521, 527, 533, 539, + 545, 551, 557, 566, 567, 571, 578, 589, 590, 598, + 606, 612, 618, 624, 633, 642, 648, 657, 664, 673 }; #endif @@ -1442,9 +1442,8 @@ { SQL_input *sql = (SQL_input*) info; MSIVIEW *insert = NULL; - UINT r; - - r = INSERT_CreateView( sql->db, &insert, (yyvsp[-7].string), (yyvsp[-5].column_list), (yyvsp[-1].column_list), FALSE ); + + INSERT_CreateView( sql->db, &insert, (yyvsp[-7].string), (yyvsp[-5].column_list), (yyvsp[-1].column_list), FALSE ); if( !insert ) YYABORT; (yyval.query) = insert; @@ -1452,7 +1451,7 @@ break; case 10: -#line 153 "sql.y" +#line 152 "sql.y" { SQL_input *sql = (SQL_input*) info; MSIVIEW *insert = NULL; @@ -1465,7 +1464,7 @@ break; case 11: -#line 166 "sql.y" +#line 165 "sql.y" { SQL_input* sql = (SQL_input*) info; MSIVIEW *create = NULL; @@ -1480,7 +1479,7 @@ break; case 12: -#line 178 "sql.y" +#line 177 "sql.y" { SQL_input* sql = (SQL_input*) info; MSIVIEW *create = NULL; @@ -1495,7 +1494,7 @@ break; case 13: -#line 193 "sql.y" +#line 192 "sql.y" { SQL_input* sql = (SQL_input*) info; MSIVIEW *update = NULL; @@ -1508,7 +1507,7 @@ break; case 14: -#line 203 "sql.y" +#line 202 "sql.y" { SQL_input* sql = (SQL_input*) info; MSIVIEW *update = NULL; @@ -1521,7 +1520,7 @@ break; case 15: -#line 216 "sql.y" +#line 215 "sql.y" { SQL_input* sql = (SQL_input*) info; MSIVIEW *delete = NULL; @@ -1534,7 +1533,7 @@ break; case 16: -#line 229 "sql.y" +#line 228 "sql.y" { SQL_input* sql = (SQL_input*) info; MSIVIEW *alter = NULL; @@ -1547,7 +1546,7 @@ break; case 17: -#line 239 "sql.y" +#line 238 "sql.y" { SQL_input *sql = (SQL_input *)info; MSIVIEW *alter = NULL; @@ -1560,7 +1559,7 @@ break; case 18: -#line 249 "sql.y" +#line 248 "sql.y" { SQL_input *sql = (SQL_input *)info; MSIVIEW *alter = NULL; @@ -1573,21 +1572,21 @@ break; case 19: -#line 262 "sql.y" +#line 261 "sql.y" { (yyval.integer) = 1; ;} break; case 20: -#line 266 "sql.y" +#line 265 "sql.y" { (yyval.integer) = -1; ;} break; case 21: -#line 273 "sql.y" +#line 272 "sql.y" { if( SQL_MarkPrimaryKeys( (yyvsp[-3].column_list), (yyvsp[0].column_list) ) ) (yyval.column_list) = (yyvsp[-3].column_list); @@ -1597,7 +1596,7 @@ break; case 22: -#line 283 "sql.y" +#line 282 "sql.y" { column_info *ci; @@ -1610,14 +1609,14 @@ break; case 23: -#line 293 "sql.y" +#line 292 "sql.y" { (yyval.column_list) = (yyvsp[0].column_list); ;} break; case 24: -#line 300 "sql.y" +#line 299 "sql.y" { (yyval.column_list) = (yyvsp[-1].column_list); (yyval.column_list)->type = ((yyvsp[0].column_type) | MSITYPE_VALID); @@ -1626,91 +1625,91 @@ break; case 25: -#line 309 "sql.y" +#line 308 "sql.y" { (yyval.column_type) = (yyvsp[0].column_type); ;} break; case 26: -#line 313 "sql.y" +#line 312 "sql.y" { (yyval.column_type) = (yyvsp[-1].column_type) | MSITYPE_LOCALIZABLE; ;} break; case 27: -#line 317 "sql.y" +#line 316 "sql.y" { (yyval.column_type) = (yyvsp[-1].column_type) | MSITYPE_TEMPORARY; ;} break; case 28: -#line 324 "sql.y" +#line 323 "sql.y" { (yyval.column_type) |= MSITYPE_NULLABLE; ;} break; case 29: -#line 328 "sql.y" +#line 327 "sql.y" { (yyval.column_type) = (yyvsp[-2].column_type); ;} break; case 30: -#line 335 "sql.y" +#line 334 "sql.y" { (yyval.column_type) = MSITYPE_STRING | 1; ;} break; case 31: -#line 339 "sql.y" +#line 338 "sql.y" { (yyval.column_type) = MSITYPE_STRING | 0x400 | (yyvsp[-1].column_type); ;} break; case 32: -#line 343 "sql.y" +#line 342 "sql.y" { (yyval.column_type) = 2; ;} break; case 33: -#line 347 "sql.y" +#line 346 "sql.y" { (yyval.column_type) = 2; ;} break; case 34: -#line 351 "sql.y" +#line 350 "sql.y" { (yyval.column_type) = 2; ;} break; case 35: -#line 355 "sql.y" +#line 354 "sql.y" { (yyval.column_type) = 4; ;} break; case 36: -#line 359 "sql.y" +#line 358 "sql.y" { (yyval.column_type) = MSITYPE_STRING | MSITYPE_VALID; ;} break; case 37: -#line 366 "sql.y" +#line 365 "sql.y" { if( ( (yyvsp[0].integer) > 255 ) || ( (yyvsp[0].integer) < 0 ) ) YYABORT; @@ -1719,7 +1718,7 @@ break; case 38: -#line 375 "sql.y" +#line 374 "sql.y" { UINT r; @@ -1735,14 +1734,14 @@ break; case 40: -#line 392 "sql.y" +#line 391 "sql.y" { (yyval.query) = (yyvsp[0].query); ;} break; case 41: -#line 396 "sql.y" +#line 395 "sql.y" { SQL_input* sql = (SQL_input*) info; UINT r; @@ -1758,7 +1757,7 @@ break; case 42: -#line 412 "sql.y" +#line 411 "sql.y" { SQL_input* sql = (SQL_input*) info; UINT r; @@ -1779,21 +1778,21 @@ break; case 44: -#line 434 "sql.y" +#line 433 "sql.y" { (yyvsp[-2].column_list)->next = (yyvsp[0].column_list); ;} break; case 45: -#line 438 "sql.y" +#line 437 "sql.y" { (yyval.column_list) = NULL; ;} break; case 47: -#line 446 "sql.y" +#line 445 "sql.y" { SQL_input* sql = (SQL_input*) info; UINT r; @@ -1809,7 +1808,7 @@ break; case 48: -#line 462 "sql.y" +#line 461 "sql.y" { SQL_input* sql = (SQL_input*) info; UINT r; @@ -1822,7 +1821,7 @@ break; case 49: -#line 472 "sql.y" +#line 471 "sql.y" { SQL_input* sql = (SQL_input*) info; UINT r; @@ -1835,14 +1834,14 @@ break; case 50: -#line 485 "sql.y" +#line 484 "sql.y" { (yyval.string) = strdupW((yyvsp[0].string)); ;} break; case 51: -#line 490 "sql.y" +#line 489 "sql.y" { (yyval.string) = parser_add_table((yyvsp[0].string), (yyvsp[-2].string)); if (!(yyval.string)) @@ -1851,7 +1850,7 @@ break; case 52: -#line 499 "sql.y" +#line 498 "sql.y" { (yyval.expr) = (yyvsp[-1].expr); if( !(yyval.expr) ) @@ -1860,7 +1859,7 @@ break; case 53: -#line 505 "sql.y" +#line 504 "sql.y" { (yyval.expr) = EXPR_complex( info, (yyvsp[-2].expr), OP_AND, (yyvsp[0].expr) ); if( !(yyval.expr) ) @@ -1869,7 +1868,7 @@ break; case 54: -#line 511 "sql.y" +#line 510 "sql.y" { (yyval.expr) = EXPR_complex( info, (yyvsp[-2].expr), OP_OR, (yyvsp[0].expr) ); if( !(yyval.expr) ) @@ -1878,7 +1877,7 @@ break; case 55: -#line 517 "sql.y" +#line 516 "sql.y" { (yyval.expr) = EXPR_complex( info, (yyvsp[-2].expr), OP_EQ, (yyvsp[0].expr) ); if( !(yyval.expr) ) @@ -1887,7 +1886,7 @@ break; case 56: -#line 523 "sql.y" +#line 522 "sql.y" { (yyval.expr) = EXPR_complex( info, (yyvsp[-2].expr), OP_GT, (yyvsp[0].expr) ); if( !(yyval.expr) ) @@ -1896,7 +1895,7 @@ break; case 57: -#line 529 "sql.y" +#line 528 "sql.y" { (yyval.expr) = EXPR_complex( info, (yyvsp[-2].expr), OP_LT, (yyvsp[0].expr) ); if( !(yyval.expr) ) @@ -1905,7 +1904,7 @@ break; case 58: -#line 535 "sql.y" +#line 534 "sql.y" { (yyval.expr) = EXPR_complex( info, (yyvsp[-2].expr), OP_LE, (yyvsp[0].expr) ); if( !(yyval.expr) ) @@ -1914,7 +1913,7 @@ break; case 59: -#line 541 "sql.y" +#line 540 "sql.y" { (yyval.expr) = EXPR_complex( info, (yyvsp[-2].expr), OP_GE, (yyvsp[0].expr) ); if( !(yyval.expr) ) @@ -1923,7 +1922,7 @@ break; case 60: -#line 547 "sql.y" +#line 546 "sql.y" { (yyval.expr) = EXPR_complex( info, (yyvsp[-2].expr), OP_NE, (yyvsp[0].expr) ); if( !(yyval.expr) ) @@ -1932,7 +1931,7 @@ break; case 61: -#line 553 "sql.y" +#line 552 "sql.y" { (yyval.expr) = EXPR_unary( info, (yyvsp[-2].expr), OP_ISNULL ); if( !(yyval.expr) ) @@ -1941,7 +1940,7 @@ break; case 62: -#line 559 "sql.y" +#line 558 "sql.y" { (yyval.expr) = EXPR_unary( info, (yyvsp[-3].expr), OP_NOTNULL ); if( !(yyval.expr) ) @@ -1950,7 +1949,7 @@ break; case 65: -#line 573 "sql.y" +#line 572 "sql.y" { (yyval.column_list) = parser_alloc_column( info, NULL, NULL ); if( !(yyval.column_list) ) @@ -1960,7 +1959,7 @@ break; case 66: -#line 580 "sql.y" +#line 579 "sql.y" { (yyval.column_list) = parser_alloc_column( info, NULL, NULL ); if( !(yyval.column_list) ) @@ -1971,7 +1970,7 @@ break; case 68: -#line 592 "sql.y" +#line 591 "sql.y" { (yyval.column_list) = (yyvsp[-2].column_list); (yyval.column_list)->next = (yyvsp[0].column_list); @@ -1979,7 +1978,7 @@ break; case 69: -#line 600 "sql.y" +#line 599 "sql.y" { (yyval.column_list) = (yyvsp[-2].column_list); (yyval.column_list)->val = (yyvsp[0].expr); @@ -1987,7 +1986,7 @@ break; case 70: -#line 608 "sql.y" +#line 607 "sql.y" { (yyval.expr) = EXPR_ival( info, (yyvsp[0].integer) ); if( !(yyval.expr) ) @@ -1996,7 +1995,7 @@ break; case 71: -#line 614 "sql.y" +#line 613 "sql.y" { (yyval.expr) = EXPR_ival( info, -(yyvsp[0].integer) ); if( !(yyval.expr) ) @@ -2005,7 +2004,7 @@ break; case 72: -#line 620 "sql.y" +#line 619 "sql.y" { (yyval.expr) = EXPR_sval( info, &(yyvsp[0].str) ); if( !(yyval.expr) ) @@ -2014,7 +2013,7 @@ break; case 73: -#line 626 "sql.y" +#line 625 "sql.y" { (yyval.expr) = EXPR_wildcard( info ); if( !(yyval.expr) ) @@ -2023,7 +2022,7 @@ break; case 74: -#line 635 "sql.y" +#line 634 "sql.y" { (yyval.expr) = EXPR_column( info, (yyvsp[0].column_list) ); if( !(yyval.expr) ) @@ -2032,7 +2031,7 @@ break; case 75: -#line 644 "sql.y" +#line 643 "sql.y" { (yyval.column_list) = parser_alloc_column( info, (yyvsp[-2].string), (yyvsp[0].string) ); if( !(yyval.column_list) ) @@ -2041,7 +2040,7 @@ break; case 76: -#line 650 "sql.y" +#line 649 "sql.y" { (yyval.column_list) = parser_alloc_column( info, NULL, (yyvsp[0].string) ); if( !(yyval.column_list) ) @@ -2050,14 +2049,14 @@ break; case 77: -#line 659 "sql.y" +#line 658 "sql.y" { (yyval.string) = (yyvsp[0].string); ;} break; case 78: -#line 666 "sql.y" +#line 665 "sql.y" { (yyval.string) = SQL_getstring( info, &(yyvsp[0].str) ); if( !(yyval.string) ) @@ -2066,7 +2065,7 @@ break; case 79: -#line 675 "sql.y" +#line 674 "sql.y" { (yyval.integer) = SQL_getint( info ); ;} @@ -2077,7 +2076,7 @@ } /* Line 1126 of yacc.c. */ -#line 2081 "sql.tab.c" +#line 2080 "sql.tab.c" yyvsp -= yylen; yyssp -= yylen; @@ -2345,7 +2344,7 @@ } -#line 680 "sql.y" +#line 679 "sql.y" static LPWSTR parser_add_table(LPWSTR list, LPWSTR table) Modified: trunk/reactos/dll/win32/msi/sql.y URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/sql.y?rev=33…
============================================================================== --- trunk/reactos/dll/win32/msi/sql.y [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/sql.y [iso-8859-1] Sat May 17 14:46:01 2008 @@ -142,9 +142,8 @@ { SQL_input *sql = (SQL_input*) info; MSIVIEW *insert = NULL; - UINT r; - - r = INSERT_CreateView( sql->db, &insert, $3, $5, $9, FALSE ); + + INSERT_CreateView( sql->db, &insert, $3, $5, $9, FALSE ); if( !insert ) YYABORT; $$ = insert; Modified: trunk/reactos/dll/win32/msi/suminfo.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/suminfo.c?re…
============================================================================== --- trunk/reactos/dll/win32/msi/suminfo.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/suminfo.c [iso-8859-1] Sat May 17 14:46:01 2008 @@ -371,7 +371,7 @@ LPBYTE data = NULL; ULONG count, sz; HRESULT r; - int i, n; + int i; /* write the header */ sz = sizeof set_hdr; @@ -397,7 +397,6 @@ section_hdr.cbSection = sizeof section_hdr; section_hdr.cbSection += (get_property_count( si->property ) * sizeof idofs[0]); section_hdr.cProperties = 0; - n = 0; for( i = 0; i < MSI_MAX_PROPS; i++ ) { sz = write_property_to_data( &si->property[i], NULL ); Modified: trunk/reactos/dll/win32/msi/table.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/table.c?rev=…
============================================================================== --- trunk/reactos/dll/win32/msi/table.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/table.c [iso-8859-1] Sat May 17 14:46:01 2008 @@ -1795,9 +1795,6 @@ return ERROR_NO_MORE_ITEMS; *row = entry->row; - - if (tv->order) - *row = tv->order->reorder[*row]; return ERROR_SUCCESS; } Modified: trunk/reactos/dll/win32/msi/tokenize.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/tokenize.c?r…
============================================================================== --- trunk/reactos/dll/win32/msi/tokenize.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/tokenize.c [iso-8859-1] Sat May 17 14:46:01 2008 @@ -77,6 +77,7 @@ /* ** These are the keywords +** They MUST be in alphabetical order */ static const Keyword aKeywordTable[] = { { ADD_W, TK_ADD }, Modified: trunk/reactos/dll/win32/msi/where.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/where.c?rev=…
============================================================================== --- trunk/reactos/dll/win32/msi/where.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msi/where.c [iso-8859-1] Sat May 17 14:46:01 2008 @@ -86,6 +86,9 @@ { MSIHASHENTRY *entry; + if (!table) + return ERROR_SUCCESS; + if (!(entry = table[row % MSI_HASH_TABLE_SIZE])) { WARN("Row not found in hash table!\n"); @@ -503,15 +506,12 @@ MSIRECORD *rec, UINT row ) { MSIWHEREVIEW *wv = (MSIWHEREVIEW*)view; - UINT r; TRACE("%p %d %p\n", wv, eModifyMode, rec); - r = WHERE_execute(view, NULL); - if (r != ERROR_SUCCESS) - return r; - find_entry_in_hash(wv->reorder, row - 1, &row); + row++; + return wv->table->ops->modify( wv->table, eModifyMode, rec, row ); }
16 years, 8 months
1
0
0
0
[ekohl] 33557: Add code to create, delete and rename user groups.
by ekohl@svn.reactos.org
Author: ekohl Date: Sat May 17 11:06:54 2008 New Revision: 33557 URL:
http://svn.reactos.org/svn/reactos?rev=33557&view=rev
Log: Add code to create, delete and rename user groups. Modified: trunk/reactos/dll/cpl/usrmgr/groups.c trunk/reactos/dll/cpl/usrmgr/lang/en-US.rc trunk/reactos/dll/cpl/usrmgr/resource.h Modified: trunk/reactos/dll/cpl/usrmgr/groups.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/usrmgr/groups.c?re…
============================================================================== --- trunk/reactos/dll/cpl/usrmgr/groups.c [iso-8859-1] (original) +++ trunk/reactos/dll/cpl/usrmgr/groups.c [iso-8859-1] Sat May 17 11:06:54 2008 @@ -1,5 +1,4 @@ -/* $Id$ - * +/* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS User Manager Control Panel * FILE: dll/cpl/usrmgr/groups.c @@ -70,10 +69,9 @@ for (i = 0; i < entriesread; i++) { memset(&lvi, 0x00, sizeof(lvi)); - lvi.mask = LVIF_TEXT | LVIF_STATE | LVIF_IMAGE; // | LVIF_PARAM; -// lvi.lParam = (LPARAM)VarData; + lvi.mask = LVIF_TEXT | LVIF_STATE | LVIF_IMAGE; lvi.pszText = pBuffer[i].lgrpi1_name; - lvi.state = 0; //(i == 0) ? LVIS_SELECTED : 0; + lvi.state = 0; lvi.iImage = 0; iItem = ListView_InsertItem(hwndListView, &lvi); @@ -88,6 +86,186 @@ break; } +} + + +INT_PTR CALLBACK +NewGroupDlgProc(HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam) +{ + PLOCALGROUP_INFO_1 groupInfo; + INT nLength; + + UNREFERENCED_PARAMETER(wParam); + + groupInfo = (PLOCALGROUP_INFO_1)GetWindowLongPtr(hwndDlg, DWLP_USER); + + switch (uMsg) + { + case WM_INITDIALOG: + SetWindowLongPtr(hwndDlg, DWLP_USER, lParam); + groupInfo = (PLOCALGROUP_INFO_1)lParam; + SendDlgItemMessage(hwndDlg, IDC_GROUP_NEW_NAME, EM_SETLIMITTEXT, 20, 0); + break; + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDC_GROUP_NEW_NAME: + if (HIWORD(wParam) == EN_CHANGE) + { + nLength = SendDlgItemMessage(hwndDlg, IDC_GROUP_NEW_NAME, WM_GETTEXTLENGTH, 0, 0); + EnableWindow(GetDlgItem(hwndDlg, IDOK), (nLength > 0)); + } + break; + + case IDOK: + + nLength = SendDlgItemMessage(hwndDlg, IDC_GROUP_NEW_NAME, WM_GETTEXTLENGTH, 0, 0); + if (nLength > 0) + { + groupInfo->lgrpi1_name = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (nLength + 1) * sizeof(WCHAR)); + GetDlgItemText(hwndDlg, IDC_GROUP_NEW_NAME, groupInfo->lgrpi1_name, nLength + 1); + } + + nLength = SendDlgItemMessage(hwndDlg, IDC_GROUP_NEW_DESCRIPTION, WM_GETTEXTLENGTH, 0, 0); + if (nLength > 0) + { + groupInfo->lgrpi1_comment = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (nLength + 1) * sizeof(WCHAR)); + GetDlgItemText(hwndDlg, IDC_GROUP_NEW_DESCRIPTION, groupInfo->lgrpi1_comment, nLength + 1); + } + + EndDialog(hwndDlg, IDOK); + break; + + case IDCANCEL: + EndDialog(hwndDlg, IDCANCEL); + break; + } + break; + + default: + return FALSE; + } + + return TRUE; +} + + +static VOID +GroupNew(HWND hwndDlg) +{ + NET_API_STATUS status; + LOCALGROUP_INFO_1 group; + LV_ITEM lvi; + INT iItem; + HWND hwndLV; + + ZeroMemory(&group, sizeof(LOCALGROUP_INFO_1)); + + if (DialogBoxParam(hApplet, + MAKEINTRESOURCE(IDD_GROUP_NEW), + hwndDlg, + NewGroupDlgProc, + (LPARAM)&group) == IDOK) + { +#if 0 + status = NetLocalGroupAdd(NULL, + 1, + (LPBYTE)&group, + NULL); +#else + status = NERR_Success; +#endif + if (status != NERR_Success) + { + TCHAR szText[256]; + wsprintf(szText, TEXT("Error: %u"), status); + MessageBox(NULL, szText, TEXT("NetUserAdd"), MB_ICONERROR | MB_OK); + return; + } + + hwndLV = GetDlgItem(hwndDlg, IDC_GROUPS_LIST); + + ZeroMemory(&lvi, sizeof(lvi)); + lvi.mask = LVIF_TEXT | LVIF_STATE | LVIF_IMAGE; + lvi.pszText = group.lgrpi1_name; + lvi.state = 0; + lvi.iImage = 0; + iItem = ListView_InsertItem(hwndLV, &lvi); + + ListView_SetItemText(hwndLV, iItem, 1, + group.lgrpi1_comment); + } + + if (group.lgrpi1_name) + HeapFree(GetProcessHeap, 0, group.lgrpi1_name); + + if (group.lgrpi1_comment) + HeapFree(GetProcessHeap, 0, group.lgrpi1_comment); +} + + +static VOID +GroupRename(HWND hwndDlg) +{ + INT nItem; + HWND hwndLV; + + hwndLV = GetDlgItem(hwndDlg, IDC_GROUPS_LIST); + nItem = ListView_GetNextItem(hwndLV, -1, LVNI_SELECTED); + if (nItem != -1) + { + (void)ListView_EditLabel(hwndLV, nItem); + } +} + + +static BOOL +GroupDelete(HWND hwndDlg) +{ + TCHAR szGroupName[UNLEN]; + TCHAR szText[256]; + INT nItem; + HWND hwndLV; + NET_API_STATUS status; + + hwndLV = GetDlgItem(hwndDlg, IDC_GROUPS_LIST); + nItem = ListView_GetNextItem(hwndLV, -1, LVNI_SELECTED); + if (nItem == -1) + return FALSE; + + /* Get the new group name */ + ListView_GetItemText(hwndLV, + nItem, 0, + szGroupName, + UNLEN); + + /* Display a warning message because the delete operation cannot be reverted */ + wsprintf(szText, TEXT("Dou you really want to delete the user group \"%s\"?"), szGroupName); + if (MessageBox(NULL, szText, TEXT("User Groups"), MB_ICONWARNING | MB_YESNO) == IDNO) + return FALSE; + + /* Delete the group */ +#if 0 + status = NetLocalGroupDel(NULL, szGroupName); +#else + status = NERR_Success; +#endif + if (status != NERR_Success) + { + TCHAR szText[256]; + wsprintf(szText, TEXT("Error: %u"), status); + MessageBox(NULL, szText, TEXT("NetLocalGroupDel"), MB_ICONERROR | MB_OK); + return FALSE; + } + + /* Delete the group from the list */ + (void)ListView_DeleteItem(hwndLV, nItem); + + return TRUE; } @@ -113,13 +291,80 @@ SetGroupsListColumns(hwndListView); UpdateGroupsList(hwndListView); - -// (void)ListView_SetColumnWidth(hwndListView, 3, LVSCW_AUTOSIZE_USEHEADER); -// (void)ListView_Update(hwndListView, 0); -} - - -static VOID +} + + +static BOOL +OnBeginLabelEdit(LPNMLVDISPINFO pnmv) +{ + HWND hwndEdit; + + hwndEdit = ListView_GetEditControl(pnmv->hdr.hwndFrom); + if (hwndEdit == NULL) + return TRUE; + + SendMessage(hwndEdit, EM_SETLIMITTEXT, 20, 0); + + return FALSE; +} + + +static BOOL +OnEndLabelEdit(LPNMLVDISPINFO pnmv) +{ + TCHAR szOldGroupName[UNLEN]; + TCHAR szNewGroupName[UNLEN]; + LOCALGROUP_INFO_0 lgrpi0; + NET_API_STATUS status; + + /* Leave, if there is no valid listview item */ + if (pnmv->item.iItem == -1) + return FALSE; + + /* Get the new user name */ + ListView_GetItemText(pnmv->hdr.hwndFrom, + pnmv->item.iItem, 0, + szOldGroupName, + UNLEN); + + /* Leave, if the user canceled the edit action */ + if (pnmv->item.pszText == NULL) + return FALSE; + + /* Get the new user name */ + lstrcpy(szNewGroupName, pnmv->item.pszText); + + /* Leave, if the user name was not changed */ + if (lstrcmp(szOldGroupName, szNewGroupName) == 0) + return FALSE; + + + /* Change the user name */ + lgrpi0.lgrpi0_name = szNewGroupName; + +#if 0 + status = NetLocalGroupSetInfo(NULL, szOldGroupName, 0, (LPBYTE)&lgrpi0, NULL); +#else + status = NERR_Success; +#endif + if (status != NERR_Success) + { + TCHAR szText[256]; + wsprintf(szText, TEXT("Error: %u"), status); + MessageBox(NULL, szText, TEXT("NetLocalGroupSetInfo"), MB_ICONERROR | MB_OK); + return FALSE; + } + + /* Update the listview item */ + ListView_SetItemText(pnmv->hdr.hwndFrom, + pnmv->item.iItem, 0, + szNewGroupName); + + return TRUE; +} + + +static BOOL OnNotify(HWND hwndDlg, PGROUP_DATA pGroupData, NMHDR *phdr) { LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)phdr; @@ -147,9 +392,17 @@ TrackPopupMenu(GetSubMenu(pGroupData->hPopupMenu, (lpnmlv->iItem == -1) ? 0 : 1), TPM_LEFTALIGN, lpnmlv->ptAction.x, lpnmlv->ptAction.y, 0, hwndDlg, NULL); break; + + case LVN_BEGINLABELEDIT: + return OnBeginLabelEdit((LPNMLVDISPINFO)phdr); + + case LVN_ENDLABELEDIT: + return OnEndLabelEdit((LPNMLVDISPINFO)phdr); } break; } + + return FALSE; } @@ -180,11 +433,24 @@ break; case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDM_GROUP_NEW: + GroupNew(hwndDlg); + break; + + case IDM_GROUP_RENAME: + GroupRename(hwndDlg); + break; + + case IDM_GROUP_DELETE: + GroupDelete(hwndDlg); + break; + } break; case WM_NOTIFY: - OnNotify(hwndDlg, pGroupData, (NMHDR *)lParam); - break; + return OnNotify(hwndDlg, pGroupData, (NMHDR *)lParam); case WM_DESTROY: DestroyMenu(pGroupData->hPopupMenu); Modified: trunk/reactos/dll/cpl/usrmgr/lang/en-US.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/usrmgr/lang/en-US.…
============================================================================== --- trunk/reactos/dll/cpl/usrmgr/lang/en-US.rc [iso-8859-1] (original) +++ trunk/reactos/dll/cpl/usrmgr/lang/en-US.rc [iso-8859-1] Sat May 17 11:06:54 2008 @@ -84,20 +84,34 @@ END +IDD_GROUP_NEW DIALOGEX DISCARDABLE 0, 0, 267, 74 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_SHELLFONT +CAPTION "New Group" +FONT 8, "MS Shell Dlg" +BEGIN + EDITTEXT IDC_GROUP_NEW_NAME,107,7,153,14,ES_AUTOHSCROLL + RTEXT "Group name:", -1,7,10,96,8 + EDITTEXT IDC_GROUP_NEW_DESCRIPTION,107,25,153,14,ES_AUTOHSCROLL + RTEXT "Description:", -1,7,28,96,8 + DEFPUSHBUTTON "OK",IDOK,156,53,50,14,WS_DISABLED + PUSHBUTTON "Cancel",IDCANCEL,210,53,50,14 +END + + /* Menus */ IDM_POPUP_GROUP MENU DISCARDABLE BEGIN POPUP "" BEGIN - MENUITEM "New Group...", IDM_GROUP_NEW, GRAYED + MENUITEM "New Group...", IDM_GROUP_NEW END POPUP "" BEGIN MENUITEM "Add Member", IDM_GROUP_ADD_MEMBER, GRAYED MENUITEM SEPARATOR - MENUITEM "Delete", IDM_GROUP_DELETE, GRAYED - MENUITEM "Rename", IDM_GROUP_RENAME, GRAYED + MENUITEM "Delete", IDM_GROUP_DELETE + MENUITEM "Rename", IDM_GROUP_RENAME MENUITEM SEPARATOR MENUITEM "Properties", IDM_GROUP_PROPERTIES, GRAYED END Modified: trunk/reactos/dll/cpl/usrmgr/resource.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/usrmgr/resource.h?…
============================================================================== --- trunk/reactos/dll/cpl/usrmgr/resource.h [iso-8859-1] (original) +++ trunk/reactos/dll/cpl/usrmgr/resource.h [iso-8859-1] Sat May 17 11:06:54 2008 @@ -63,6 +63,11 @@ #define IDC_USER_NEW_DISABLED 369 +#define IDD_GROUP_NEW 370 +#define IDC_GROUP_NEW_NAME 371 +#define IDC_GROUP_NEW_DESCRIPTION 372 + + /* Strings */ #define IDS_CPLNAME 2000
16 years, 8 months
1
0
0
0
[mpiulachs] 33556: -make rbuild files XML compliant by adding the XInclude namespace -sync winetest to WINE-rc1 -add a rbuild file for winetest (not added to build yet) note: minor winetest modifications should be made like loading tests from a folder at startup
by mpiulachs@svn.reactos.org
Author: mpiulachs Date: Sat May 17 10:44:47 2008 New Revision: 33556 URL:
http://svn.reactos.org/svn/reactos?rev=33556&view=rev
Log: -make rbuild files XML compliant by adding the XInclude namespace -sync winetest to WINE-rc1 -add a rbuild file for winetest (not added to build yet) note: minor winetest modifications should be made like loading tests from a folder at startup Added: trunk/rostests/winetests/winetest/maketest (with props) trunk/rostests/winetests/winetest/winetest.ico (with props) trunk/rostests/winetests/winetest/winetest.rbuild (with props) Modified: trunk/rostests/win32/kernel32/directory.rbuild trunk/rostests/win32/kernel32/tests/kernel32.rbuild trunk/rostests/win32/smss/smss.rbuild trunk/rostests/win32/testsets.rbuild trunk/rostests/win32/user32/drawcaption/drawcaption.rbuild trunk/rostests/win32/user32/user32.rbuild trunk/rostests/winetests/directory.rbuild trunk/rostests/winetests/rpcrt4/rpcrt4.rbuild trunk/rostests/winetests/winetest/dist.rc trunk/rostests/winetests/winetest/gui.c trunk/rostests/winetests/winetest/main.c trunk/rostests/winetests/winetest/resource.h trunk/rostests/winetests/winetest/send.c trunk/rostests/winetests/winetest/tests.rc trunk/rostests/winetests/winetest/util.c trunk/rostests/winetests/winetest/winetest.h trunk/rostests/winetests/winetest/winetest.rc Modified: trunk/rostests/win32/kernel32/directory.rbuild URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/win32/kernel32/directory.…
============================================================================== --- trunk/rostests/win32/kernel32/directory.rbuild [iso-8859-1] (original) +++ trunk/rostests/win32/kernel32/directory.rbuild [iso-8859-1] Sat May 17 10:44:47 2008 @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!DOCTYPE project SYSTEM "tools/rbuild/project.dtd"> -<group> +<group xmlns:xi="
http://www.w3.org/2001/XInclude
"> <directory name="queuetest"> <xi:include href="queuetest/queuetest.rbuild" /> </directory> Modified: trunk/rostests/win32/kernel32/tests/kernel32.rbuild URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/win32/kernel32/tests/kern…
============================================================================== --- trunk/rostests/win32/kernel32/tests/kernel32.rbuild [iso-8859-1] (original) +++ trunk/rostests/win32/kernel32/tests/kernel32.rbuild [iso-8859-1] Sat May 17 10:44:47 2008 @@ -1,3 +1,6 @@ +<?xml version="1.0"?> +<!DOCTYPE project SYSTEM "tools/rbuild/project.dtd"> +<group xmlns:xi="
http://www.w3.org/2001/XInclude
"> <module name="kernel32_test" type="test"> <include base="rtshared">.</include> <include base="kernel32">.</include> @@ -20,3 +23,4 @@ <file>CreateFile.c</file> <xi:include href="stubs.rbuild" /> </module> +</group> Modified: trunk/rostests/win32/smss/smss.rbuild URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/win32/smss/smss.rbuild?re…
============================================================================== --- trunk/rostests/win32/smss/smss.rbuild [iso-8859-1] (original) +++ trunk/rostests/win32/smss/smss.rbuild [iso-8859-1] Sat May 17 10:44:47 2008 @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!DOCTYPE project SYSTEM "tools/rbuild/project.dtd"> -<group> +<group xmlns:xi="
http://www.w3.org/2001/XInclude
"> <directory name="movefile"> <xi:include href="movefile/movefile.rbuild" /> </directory> Modified: trunk/rostests/win32/testsets.rbuild URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/win32/testsets.rbuild?rev…
============================================================================== --- trunk/rostests/win32/testsets.rbuild [iso-8859-1] (original) +++ trunk/rostests/win32/testsets.rbuild [iso-8859-1] Sat May 17 10:44:47 2008 @@ -1,19 +1,19 @@ <?xml version="1.0"?> <!DOCTYPE project SYSTEM "tools/rbuild/project.dtd"> -<group> -<directory name="kernel32"> - <xi:include href="kernel32/directory.rbuild" /> -</directory> -<directory name="kmtloader"> - <xi:include href="kmtloader/kmtloader.rbuild" /> -</directory> -<directory name="smss"> - <xi:include href="smss/smss.rbuild" /> -</directory> -<directory name="user32"> - <xi:include href="user32/user32.rbuild" /> -</directory> -<!--directory name="win32k"> - <xi:include href="win32k/win32k.rbuild" /> -</directory--> +<group xmlns:xi="
http://www.w3.org/2001/XInclude
"> + <directory name="kernel32"> + <xi:include href="kernel32/directory.rbuild" /> + </directory> + <directory name="kmtloader"> + <xi:include href="kmtloader/kmtloader.rbuild" /> + </directory> + <directory name="smss"> + <xi:include href="smss/smss.rbuild" /> + </directory> + <directory name="user32"> + <xi:include href="user32/user32.rbuild" /> + </directory> + <!--directory name="win32k"> + <xi:include href="win32k/win32k.rbuild" /> + </directory--> </group> Modified: trunk/rostests/win32/user32/drawcaption/drawcaption.rbuild URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/win32/user32/drawcaption/…
============================================================================== --- trunk/rostests/win32/user32/drawcaption/drawcaption.rbuild [iso-8859-1] (original) +++ trunk/rostests/win32/user32/drawcaption/drawcaption.rbuild [iso-8859-1] Sat May 17 10:44:47 2008 @@ -1,3 +1,6 @@ +<?xml version="1.0"?> +<!DOCTYPE project SYSTEM "tools/rbuild/project.dtd"> +<group> <module name="drawcap" type="win32cui" installbase="system32" installname="drawcap.exe"> <include base="drawcap">.</include> <define name="__USE_W32API" /> @@ -27,3 +30,4 @@ <file>capicon.c</file> <file>capicon.rc</file> </module> +</group> Modified: trunk/rostests/win32/user32/user32.rbuild URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/win32/user32/user32.rbuil…
============================================================================== --- trunk/rostests/win32/user32/user32.rbuild [iso-8859-1] (original) +++ trunk/rostests/win32/user32/user32.rbuild [iso-8859-1] Sat May 17 10:44:47 2008 @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!DOCTYPE project SYSTEM "tools/rbuild/project.dtd"> -<group> +<group xmlns:xi="
http://www.w3.org/2001/XInclude
"> <directory name="drawcaption"> <xi:include href="drawcaption/drawcaption.rbuild" /> </directory> Modified: trunk/rostests/winetests/directory.rbuild URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/directory.rbuil…
============================================================================== --- trunk/rostests/winetests/directory.rbuild [iso-8859-1] (original) +++ trunk/rostests/winetests/directory.rbuild [iso-8859-1] Sat May 17 10:44:47 2008 @@ -124,4 +124,9 @@ <directory name="wininet"> <xi:include href="wininet/wininet.rbuild" /> </directory> + <!-- + <directory name="winetest"> + <xi:include href="winetest/winetest.rbuild" /> + </directory> + --> </group> Modified: trunk/rostests/winetests/rpcrt4/rpcrt4.rbuild URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/rpcrt4/rpcrt4.r…
============================================================================== --- trunk/rostests/winetests/rpcrt4/rpcrt4.rbuild [iso-8859-1] (original) +++ trunk/rostests/winetests/rpcrt4/rpcrt4.rbuild [iso-8859-1] Sat May 17 10:44:47 2008 @@ -1,27 +1,31 @@ -<module name="rpcrt4_winetest_server" type="rpcserver" allowwarnings="true"> - <file>server.idl</file> -</module> -<module name="rpcrt4_winetest_client" type="rpcclient"> - <file>server.idl</file> -</module> -<module name="rpcrt4_winetest" type="win32cui" installbase="bin" installname="rpcrt4_winetest.exe" allowwarnings="true"> - <include base="rpcrt4_winetest">.</include> - <include root="intermediate" base="rpcrt4_winetest">.</include> - <define name="__USE_W32API" /> - <library>wine</library> - <library>pseh</library> - <library>ole32</library> - <library>uuid</library> - <library>rpcrt4_winetest_server</library> - <library>rpcrt4_winetest_client</library> - <library>rpcrt4</library> - <library>kernel32</library> - <library>ntdll</library> - <file>cstub.c</file> - <file>generated.c</file> - <file>ndr_marshall.c</file> - <file>rpc.c</file> - <file>rpc_async.c</file> - <file>server.c</file> - <file>testlist.c</file> -</module> +<?xml version="1.0"?> +<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd"> +<group> + <module name="rpcrt4_winetest_server" type="rpcserver" allowwarnings="true"> + <file>server.idl</file> + </module> + <module name="rpcrt4_winetest_client" type="rpcclient"> + <file>server.idl</file> + </module> + <module name="rpcrt4_winetest" type="win32cui" installbase="bin" installname="rpcrt4_winetest.exe" allowwarnings="true"> + <include base="rpcrt4_winetest">.</include> + <include root="intermediate" base="rpcrt4_winetest">.</include> + <define name="__USE_W32API" /> + <library>wine</library> + <library>pseh</library> + <library>ole32</library> + <library>uuid</library> + <library>rpcrt4_winetest_server</library> + <library>rpcrt4_winetest_client</library> + <library>rpcrt4</library> + <library>kernel32</library> + <library>ntdll</library> + <file>cstub.c</file> + <file>generated.c</file> + <file>ndr_marshall.c</file> + <file>rpc.c</file> + <file>rpc_async.c</file> + <file>server.c</file> + <file>testlist.c</file> + </module> +</group> Modified: trunk/rostests/winetests/winetest/dist.rc URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/winetest/dist.r…
============================================================================== --- trunk/rostests/winetests/winetest/dist.rc [iso-8859-1] (original) +++ trunk/rostests/winetests/winetest/dist.rc [iso-8859-1] Sat May 17 10:44:47 2008 @@ -15,11 +15,17 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "winetest.rc" +#include "tests.rc" -WINE_BUILD STRINGRES "build.id" -BUILD_INFO STRINGRES "build.nfo" -TESTS_URL STRINGRES "tests.url" +/* @makedep: build.id */ +//WINE_BUILD STRINGRES "build.id" + +/* @makedep: build.nfo */ +//BUILD_INFO STRINGRES "build.nfo" + +/* @makedep: tests.url */ +//TESTS_URL STRINGRES "tests.url" Modified: trunk/rostests/winetests/winetest/gui.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/winetest/gui.c?…
============================================================================== --- trunk/rostests/winetests/winetest/gui.c [iso-8859-1] (original) +++ trunk/rostests/winetests/winetest/gui.c [iso-8859-1] Sat May 17 10:44:47 2008 @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include <windows.h> @@ -130,7 +130,7 @@ { const int pgID = IDC_ST0 + progressGroup * 2; char *str = vstrmake (NULL, ap); - + progressCurr++; SetDlgItemText (dialog, pgID, str); SendDlgItemMessage (dialog, pgID+1, PBM_SETPOS, @@ -323,7 +323,7 @@ return CallWindowProcA (DefEditProc, hwnd, msg, wParam, lParam); } -static BOOL CALLBACK +static INT_PTR CALLBACK AskTagProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { int len; @@ -376,7 +376,7 @@ return MBdefault (va_arg (ap, int)); } -static BOOL CALLBACK +static INT_PTR CALLBACK AboutProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { @@ -390,7 +390,7 @@ return FALSE; } -static BOOL CALLBACK +static INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { @@ -518,7 +518,7 @@ } } } - + va_start (ap, t); if (t < sizeof text_funcs / sizeof text_funcs[0] && t < sizeof GUI_funcs / sizeof GUI_funcs[0]) ret = funcs[t](ap); Modified: trunk/rostests/winetests/winetest/main.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/winetest/main.c…
============================================================================== --- trunk/rostests/winetests/winetest/main.c [iso-8859-1] (original) +++ trunk/rostests/winetests/winetest/main.c [iso-8859-1] Sat May 17 10:44:47 2008 @@ -17,7 +17,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * * This program is dedicated to Anna Lindh, * Swedish Minister of Foreign Affairs. @@ -39,6 +39,7 @@ #include "winetest.h" #include "resource.h" +#include <reason.h> struct wine_test { @@ -57,8 +58,43 @@ char *tag = NULL; static struct wine_test *wine_tests; +static int nr_of_files, nr_of_tests; static struct rev_info *rev_infos = NULL; static const char whitespace[] = " \t\r\n"; +static const char testexe[] = "_test.exe"; + +static char * get_file_version(char * file_name) +{ + static char version[32]; + DWORD size; + DWORD handle; + + size = GetFileVersionInfoSizeA(file_name, &handle); + if (size) { + char * data = xmalloc(size); + if (data) { + if (GetFileVersionInfoA(file_name, handle, size, data)) { + static char backslash[] = "\\"; + VS_FIXEDFILEINFO *pFixedVersionInfo; + UINT len; + if (VerQueryValueA(data, backslash, (LPVOID *)&pFixedVersionInfo, &len)) { + sprintf(version, "%d.%d.%d.%d", + pFixedVersionInfo->dwFileVersionMS >> 16, + pFixedVersionInfo->dwFileVersionMS & 0xffff, + pFixedVersionInfo->dwFileVersionLS >> 16, + pFixedVersionInfo->dwFileVersionLS & 0xffff); + } else + sprintf(version, "version not available"); + } else + sprintf(version, "unknown"); + free(data); + } else + sprintf(version, "failed"); + } else + sprintf(version, "version not available"); + + return version; +} static int running_under_wine (void) { @@ -96,6 +132,8 @@ { OSVERSIONINFOEX ver; BOOL ext; + int is_win2k3_r2; + const char *(*wine_get_build_id)(void); ver.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if (!(ext = GetVersionEx ((OSVERSIONINFO *) &ver))) @@ -111,6 +149,13 @@ " dwBuildNumber=%ld\n PlatformId=%ld\n szCSDVersion=%s\n", ver.dwMajorVersion, ver.dwMinorVersion, ver.dwBuildNumber, ver.dwPlatformId, ver.szCSDVersion); + + wine_get_build_id = (void *)GetProcAddress(GetModuleHandleA("ntdll.dll"), "wine_get_build_id"); + if (wine_get_build_id) xprintf( " WineBuild=%s\n", wine_get_build_id() ); + + is_win2k3_r2 = GetSystemMetrics(SM_SERVERR2); + if(is_win2k3_r2) + xprintf(" R2 build number=%d\n", is_win2k3_r2); if (!ext) return; @@ -159,10 +204,7 @@ static const char* get_test_source_file(const char* test, const char* subtest) { static const char* special_dirs[][2] = { - { "gdi32", "gdi"}, { "kernel32", "kernel" }, - { "msacm32", "msacm" }, - { "user32", "user" }, { "winspool.drv", "winspool" }, - { "ws2_32", "winsock" }, { 0, 0 } + { 0, 0 } }; static char buffer[MAX_PATH]; int i; @@ -181,7 +223,7 @@ static const char* get_file_rev(const char* file) { const struct rev_info* rev; - + for(rev = rev_infos; rev->file; rev++) { if (strcmp(rev->file, file) == 0) return rev->rev; } @@ -205,7 +247,7 @@ len = LoadStringA (module, REV_INFO+i, revinfo, sizeof(revinfo)); if (len == 0) break; /* end of revision info */ - if (len >= sizeof(revinfo) - 1) + if (len >= sizeof(revinfo) - 1) report (R_FATAL, "Revision info too long."); if(!(p = strrchr(revinfo, ':'))) report (R_FATAL, "Revision info malformed (i=%d)", i); @@ -215,13 +257,13 @@ } } -static void* extract_rcdata (int id, int type, DWORD* size) +static void* extract_rcdata (LPTSTR name, int type, DWORD* size) { HRSRC rsrc; HGLOBAL hdl; LPVOID addr; - - if (!(rsrc = FindResource (NULL, (LPTSTR)id, MAKEINTRESOURCE(type))) || + + if (!(rsrc = FindResource (NULL, name, MAKEINTRESOURCE(type))) || !(*size = SizeofResource (0, rsrc)) || !(hdl = LoadResource (0, rsrc)) || !(addr = LockResource (hdl))) @@ -231,26 +273,19 @@ /* Fills in the name and exename fields */ static void -extract_test (struct wine_test *test, const char *dir, int id) +extract_test (struct wine_test *test, const char *dir, LPTSTR res_name) { BYTE* code; DWORD size; FILE* fout; - int strlen, bufflen = 128; char *exepos; - code = extract_rcdata (id, TESTRES, &size); - if (!code) report (R_FATAL, "Can't find test resource %d: %d", - id, GetLastError ()); - test->name = xmalloc (bufflen); - while ((strlen = LoadStringA (NULL, id, test->name, bufflen)) - == bufflen - 1) { - bufflen *= 2; - test->name = xrealloc (test->name, bufflen); - } - if (!strlen) report (R_FATAL, "Can't read name of test %d.", id); + code = extract_rcdata (res_name, TESTRES, &size); + if (!code) report (R_FATAL, "Can't find test resource %s: %d", + res_name, GetLastError ()); + test->name = xstrdup( res_name ); test->exename = strmake (NULL, "%s/%s", dir, test->name); - exepos = strstr (test->name, "_test.exe"); + exepos = strstr (test->name, testexe); if (!exepos) report (R_FATAL, "Not an .exe file: %s", test->name); *exepos = 0; test->name = xrealloc (test->name, exepos - test->name + 1); @@ -269,7 +304,7 @@ value of WaitForSingleObject. */ static int -run_ex (char *cmd, const char *out, DWORD ms) +run_ex (char *cmd, const char *out, const char *tempdir, DWORD ms) { STARTUPINFO si; PROCESS_INFORMATION pi; @@ -277,8 +312,7 @@ DWORD wait, status; GetStartupInfo (&si); - si.wShowWindow = SW_HIDE; - si.dwFlags = STARTF_USESHOWWINDOW; + si.dwFlags = 0; if (out) { fd = open (out, O_WRONLY | O_CREAT, 0666); @@ -292,8 +326,8 @@ close (fd); } - if (!CreateProcessA (NULL, cmd, NULL, NULL, TRUE, 0, - NULL, NULL, &si, &pi)) { + if (!CreateProcessA (NULL, cmd, NULL, NULL, TRUE, CREATE_DEFAULT_ERROR_MODE, + NULL, tempdir, &si, &pi)) { status = -2; } else { CloseHandle (pi.hThread); @@ -346,7 +380,7 @@ } static void -get_subtests (const char *tempdir, struct wine_test *test, int id) +get_subtests (const char *tempdir, struct wine_test *test, LPTSTR res_name) { char *subname, *cmd; FILE *subfile; @@ -360,9 +394,9 @@ subname = tempnam (0, "sub"); if (!subname) report (R_FATAL, "Can't name subtests file."); - extract_test (test, tempdir, id); + extract_test (test, tempdir, res_name); cmd = strmake (NULL, "%s --list", test->exename); - run_ex (cmd, subname, 5000); + run_ex (cmd, subname, tempdir, 5000); free (cmd); subfile = fopen (subname, "r"); @@ -411,7 +445,7 @@ } static void -run_test (struct wine_test* test, const char* subtest) +run_test (struct wine_test* test, const char* subtest, const char *tempdir) { int status; const char* file = get_test_source_file(test->name, subtest); @@ -419,7 +453,7 @@ char *cmd = strmake (NULL, "%s %s", test->exename, subtest); xprintf ("%s:%s start %s %s\n", test->name, subtest, file, rev); - status = run_ex (cmd, NULL, 120000); + status = run_ex (cmd, NULL, tempdir, 120000); free (cmd); xprintf ("%s:%s done (%d)\n", test->name, subtest, status); } @@ -432,14 +466,43 @@ return TRUE; } +static BOOL CALLBACK +extract_test_proc (HMODULE hModule, LPCTSTR lpszType, + LPTSTR lpszName, LONG_PTR lParam) +{ + const char *tempdir = (const char *)lParam; + char dllname[MAX_PATH]; + HMODULE dll; + + /* Check if the main dll is present on this system */ + CharLowerA(lpszName); + strcpy(dllname, lpszName); + *strstr(dllname, testexe) = 0; + + dll = LoadLibraryExA(dllname, NULL, LOAD_LIBRARY_AS_DATAFILE); + if (!dll) { + xprintf (" %s=dll is missing\n", dllname); + return TRUE; + } + FreeLibrary(dll); + + xprintf (" %s=%s\n", dllname, get_file_version(dllname)); + + get_subtests( tempdir, &wine_tests[nr_of_files], lpszName ); + nr_of_tests += wine_tests[nr_of_files].subtest_count; + nr_of_files++; + return TRUE; +} + static char * run_tests (char *logname) { - int nr_of_files = 0, nr_of_tests = 0, i; + int i; char *tempdir, *shorttempdir; int logfile; char *strres, *eol, *nextline; DWORD strsize; + char build[64]; SetErrorMode (SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX); @@ -475,18 +538,19 @@ report (R_FATAL, "Could not create directory: %s", tempdir); report (R_DIR, tempdir); - xprintf ("Version 3\n"); - strres = extract_rcdata (WINE_BUILD, STRINGRES, &strsize); + xprintf ("Version 4\n"); + strres = extract_rcdata (MAKEINTRESOURCE(WINE_BUILD), STRINGRES, &strsize); xprintf ("Tests from build "); - if (strres) xprintf ("%.*s", strsize, strres); + if (LoadStringA( 0, IDS_BUILD_ID, build, sizeof(build) )) xprintf( "%s\n", build ); + else if (strres) xprintf ("%.*s", strsize, strres); else xprintf ("-\n"); - strres = extract_rcdata (TESTS_URL, STRINGRES, &strsize); + strres = extract_rcdata (MAKEINTRESOURCE(TESTS_URL), STRINGRES, &strsize); xprintf ("Archive: "); if (strres) xprintf ("%.*s", strsize, strres); else xprintf ("-\n"); xprintf ("Tag: %s\n", tag); xprintf ("Build info:\n"); - strres = extract_rcdata (BUILD_INFO, STRINGRES, &strsize); + strres = extract_rcdata (MAKEINTRESOURCE(BUILD_INFO), STRINGRES, &strsize); while (strres) { eol = memchr (strres, '\n', strsize); if (!eol) { @@ -502,7 +566,7 @@ } xprintf ("Operating system version:\n"); print_version (); - xprintf ("Test output:\n" ); + xprintf ("Dll info:\n" ); report (R_STATUS, "Counting tests"); if (!EnumResourceNames (NULL, MAKEINTRESOURCE(TESTRES), @@ -513,10 +577,15 @@ report (R_STATUS, "Extracting tests"); report (R_PROGRESS, 0, nr_of_files); - for (i = 0; i < nr_of_files; i++) { - get_subtests (tempdir, wine_tests+i, i); - nr_of_tests += wine_tests[i].subtest_count; - } + nr_of_files = 0; + nr_of_tests = 0; + if (!EnumResourceNames (NULL, MAKEINTRESOURCE(TESTRES), + extract_test_proc, (LPARAM)tempdir)) + report (R_FATAL, "Can't enumerate test files: %d", + GetLastError ()); + + xprintf ("Test output:\n" ); + report (R_DELTA, 0, "Extracting: Done"); report (R_STATUS, "Running tests"); @@ -528,7 +597,7 @@ for (j = 0; j < test->subtest_count; j++) { report (R_STEP, "Running: %s:%s", test->name, test->subtests[j]); - run_test (test, test->subtests[j]); + run_test (test, test->subtests[j], tempdir); } } report (R_DELTA, 0, "Running: Done"); @@ -545,15 +614,16 @@ static void usage (void) { - fprintf (stderr, "\ -Usage: winetest [OPTION]...\n\n\ - -c console mode, no GUI\n\ - -e preserve the environment\n\ - -h print this message and exit\n\ - -q quiet mode, no output at all\n\ - -o FILE put report into FILE, do not submit\n\ - -s FILE submit FILE, do not run tests\n\ - -t TAG include TAG of characters [-.0-9a-zA-Z] in the report\n"); + fprintf (stderr, +"Usage: winetest [OPTION]...\n\n" +" -c console mode, no GUI\n" +" -e preserve the environment\n" +" -h print this message and exit\n" +" -p shutdown when the tests are done\n" +" -q quiet mode, no output at all\n" +" -o FILE put report into FILE, do not submit\n" +" -s FILE submit FILE, do not run tests\n" +" -t TAG include TAG of characters [-.0-9a-zA-Z] in the report\n"); } int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, @@ -562,6 +632,7 @@ char *logname = NULL; const char *cp, *submit = NULL; int reset_env = 1; + int poweroff = 0; int interactive = 1; /* initialize the revision information first */ @@ -583,8 +654,12 @@ reset_env = 0; break; case 'h': + case '?': usage (); exit (0); + case 'p': + poweroff = 1; + break; case 'q': report (R_QUIET); interactive = 0; @@ -618,15 +693,24 @@ cmdLine = strtok (NULL, whitespace); } if (!submit) { + static CHAR platform_windows[] = "WINETEST_PLATFORM=windows", + platform_wine[] = "WINETEST_PLATFORM=wine", + debug_yes[] = "WINETEST_DEBUG=1", + interactive_no[] = "WINETEST_INTERACTIVE=0", + report_success_no[] = "WINETEST_REPORT_SUCCESS=0"; + CHAR *platform; + report (R_STATUS, "Starting up"); if (!running_on_visible_desktop ()) report (R_FATAL, "Tests must be run on a visible desktop"); - if (reset_env && (putenv ("WINETEST_PLATFORM=windows") || - putenv ("WINETEST_DEBUG=1") || - putenv ("WINETEST_INTERACTIVE=0") || - putenv ("WINETEST_REPORT_SUCCESS=0"))) + platform = running_under_wine () ? platform_wine : platform_windows; + + if (reset_env && (putenv (platform) || + putenv (debug_yes) || + putenv (interactive_no) || + putenv (report_success_no))) report (R_FATAL, "Could not reset environment: %d", errno); if (!tag) { @@ -647,5 +731,21 @@ } else run_tests (logname); report (R_STATUS, "Finished"); } + if (poweroff) + { + HANDLE hToken; + TOKEN_PRIVILEGES npr; + + /* enable the shutdown privilege for the current process */ + if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)) + { + LookupPrivilegeValueA(0, SE_SHUTDOWN_NAME, &npr.Privileges[0].Luid); + npr.PrivilegeCount = 1; + npr.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; + AdjustTokenPrivileges(hToken, FALSE, &npr, 0, 0, 0); + CloseHandle(hToken); + } + ExitWindowsEx(EWX_SHUTDOWN | EWX_POWEROFF | EWX_FORCEIFHUNG, SHTDN_REASON_MAJOR_OTHER | SHTDN_REASON_MINOR_OTHER); + } exit (0); } Added: trunk/rostests/winetests/winetest/maketest URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/winetest/makete…
============================================================================== --- trunk/rostests/winetests/winetest/maketest (added) +++ trunk/rostests/winetests/winetest/maketest [iso-8859-1] Sat May 17 10:44:47 2008 @@ -1,0 +1,25 @@ +#!/bin/sh + +TOPSRCDIR="$1" +shift + +echo "/* Automatically generated -- do not edit! */" +echo "STRINGTABLE {" + +i=0 +cd $TOPSRCDIR +if [ -d .git ] +then + git-ls-files -c -s --abbrev=10 -- "dlls/*/tests/*.c" |\ + sed -ne "s|^[0-7]* \([0-9a-f]*\) [0-9] \(.*\)$|\2:\1|p" +else + for dir in dlls/*/tests; do + sed -ne "s|^/\([^.]*.c\)/\([^/]*\).*|$dir/\1:\2|p" $dir/CVS/Entries 2>/dev/null + done +fi |\ +while read line; do + echo "REV_INFO+$i \"$line\"" + i=`expr $i + 1` +done + +echo "}" Propchange: trunk/rostests/winetests/winetest/maketest ------------------------------------------------------------------------------ svn:eol-style = native Modified: trunk/rostests/winetests/winetest/resource.h URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/winetest/resour…
============================================================================== --- trunk/rostests/winetests/winetest/resource.h [iso-8859-1] (original) +++ trunk/rostests/winetests/winetest/resource.h [iso-8859-1] Sat May 17 10:44:47 2008 @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #define IDI_WINE 1 @@ -23,6 +23,8 @@ #define IDD_STATUS 100 #define IDD_ABOUT 101 #define IDD_TAG 102 + +#define IDC_STATIC -1 #define IDC_ST0 1000 #define IDC_PB0 1001 @@ -40,6 +42,8 @@ #define IDC_EDIT 4000 #define IDC_ABOUT 4001 +#define IDS_BUILD_ID 1 + /* Resource types */ #define TESTRES 1000 Modified: trunk/rostests/winetests/winetest/send.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/winetest/send.c…
============================================================================== --- trunk/rostests/winetests/winetest/send.c [iso-8859-1] (original) +++ trunk/rostests/winetests/winetest/send.c [iso-8859-1] Sat May 17 10:44:47 2008 @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include <winsock.h> @@ -107,7 +107,7 @@ SOCKET s; FILE *f; #define BUFLEN 8192 - unsigned char buffer[BUFLEN+1]; + char buffer[BUFLEN+1]; size_t bytes_read, total, filesize; char *str; int ret; @@ -137,11 +137,11 @@ } fseek (f, 0, SEEK_END); filesize = ftell (f); - if (filesize > 1024*1024) { + if (filesize > 1.5*1024*1024) { report (R_WARNING, - "File too big (%.1f MB > 1 MB); submitting partial report.", + "File too big (%.1f MB > 1.5 MB); submitting partial report.", filesize/1024.0/1024); - filesize = 1024*1024; + filesize = 1.5*1024*1024; } fseek (f, 0, SEEK_SET); @@ -178,7 +178,7 @@ if (send_buf (s, body2, sizeof body2 - 1)) { report (R_WARNING, "Error sending trailer: %d, %d", errno, WSAGetLastError ()); - goto abort2; + goto abort1; } report (R_DELTA, 0, "Network transfer: Done"); Modified: trunk/rostests/winetests/winetest/tests.rc URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/winetest/tests.…
============================================================================== --- trunk/rostests/winetests/winetest/tests.rc [iso-8859-1] (original) +++ trunk/rostests/winetests/winetest/tests.rc [iso-8859-1] Sat May 17 10:44:47 2008 @@ -1,8 +1,8 @@ /* Automatically generated -- do not edit! */ #include "resource.h" STRINGTABLE { -0 "advapi32_test.exe" -1 "comctl32_test.exe" +0 "advapi32_winetest.exe" +1 "comctl32_winetest.exe" } -0 TESTRES "../../../../../output-i386/regtests/winetest/advapi32/advapi32_test.exe" -1 TESTRES "output-i386/regtests/winetest/comctl32/comctl32_test.exe" +0 TESTRES "output-i386/modules/rostests/winetests/advapi32/advapi32_winetest.exe" +1 TESTRES "output-i386/modules/rostests/winetests/comctl32/comctl32_winetest.exe" Modified: trunk/rostests/winetests/winetest/util.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/winetest/util.c…
============================================================================== --- trunk/rostests/winetests/winetest/util.c [iso-8859-1] (original) +++ trunk/rostests/winetests/winetest/util.c [iso-8859-1] Sat May 17 10:44:47 2008 @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include <unistd.h> @@ -38,6 +38,13 @@ if (len && !p) report (R_FATAL, "Out of memory."); return p; +} + +char *xstrdup( const char *str ) +{ + char *res = strdup( str ); + if (!res) report (R_FATAL, "Out of memory."); + return res; } static char *vstrfmtmake (size_t *lenp, const char *fmt, va_list ap) Modified: trunk/rostests/winetests/winetest/winetest.h URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/winetest/winete…
============================================================================== --- trunk/rostests/winetests/winetest/winetest.h [iso-8859-1] (original) +++ trunk/rostests/winetests/winetest/winetest.h [iso-8859-1] Sat May 17 10:44:47 2008 @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINETESTS_H @@ -30,6 +30,7 @@ void warning (const char* msg); void *xmalloc (size_t len); void *xrealloc (void *op, size_t len); +char *xstrdup( const char *str ); void xprintf (const char *fmt, ...); char *vstrmake (size_t *lenp, va_list ap); char *strmake (size_t *lenp, ...); Added: trunk/rostests/winetests/winetest/winetest.ico URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/winetest/winete…
============================================================================== Binary file - no diff available. Propchange: trunk/rostests/winetests/winetest/winetest.ico ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: trunk/rostests/winetests/winetest/winetest.rbuild URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/winetest/winete…
============================================================================== --- trunk/rostests/winetests/winetest/winetest.rbuild (added) +++ trunk/rostests/winetests/winetest/winetest.rbuild [iso-8859-1] Sat May 17 10:44:47 2008 @@ -1,0 +1,19 @@ +<?xml version="1.0"?> +<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd"> +<module name="winetest" type="win32gui" installbase="system32" allowwarnings="true"> + <include base="winetest">.</include> + <define name="_WIN32_IE">0x600</define> + <define name="_WIN32_WINNT">0x501</define> + <library>comctl32</library> + <library>version</library> + <library>user32</library> + <library>gdi32</library> + <library>advapi32</library> + <library>ws2_32</library> + <library>kernel32</library> + <file>gui.c</file> + <file>main.c</file> + <file>send.c</file> + <file>util.c</file> + <file>dist.rc</file> +</module> Propchange: trunk/rostests/winetests/winetest/winetest.rbuild ------------------------------------------------------------------------------ svn:eol-style = native Modified: trunk/rostests/winetests/winetest/winetest.rc URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/winetest/winete…
============================================================================== --- trunk/rostests/winetests/winetest/winetest.rc [iso-8859-1] (original) +++ trunk/rostests/winetests/winetest/winetest.rc [iso-8859-1] Sat May 17 10:44:47 2008 @@ -15,16 +15,24 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include <windows.h> -#include <winres.h> +#include <windef.h> +#include <winuser.h> +#include <commctrl.h> + #include "resource.h" -#include "tests.rc" + +#ifdef BUILD_SHA1 +STRINGTABLE +BEGIN + IDS_BUILD_ID BUILD_SHA1 +END +#endif IDD_TAG DIALOG 0, 0, 150, 65 -STYLE WS_POPUP +STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "No tag supplied" BEGIN CTEXT "Please supply a tag for your report. You can use letters, digits, dashes and periods." @@ -44,7 +52,7 @@ CONTROL "PB1", IDC_PB1, PROGRESS_CLASS, 0, 5, 40, 150, 15 LTEXT "Network transfer:", IDC_ST2, 10, 60, 140, 10 CONTROL "PB2", IDC_PB2, PROGRESS_CLASS, 0, 5, 70, 150, 10 - + LTEXT "Tag:", IDC_STATIC, 10, 89, 100, 10 EDITTEXT IDC_TAG, 25, 88, 125, 10, ES_READONLY @@ -72,75 +80,90 @@ DEFPUSHBUTTON "Close", IDCANCEL, 55, 40, 40, 14 END -/* BINRES wine.ico */ -IDI_WINE ICON "wine.ico" -/* { - '00 00 01 00 02 00 20 20 10 00 00 00 00 00 E8 02' - '00 00 26 00 00 00 10 10 10 00 00 00 00 00 28 01' - '00 00 0E 03 00 00 28 00 00 00 20 00 00 00 40 00' - '00 00 01 00 04 00 00 00 00 00 00 02 00 00 00 00' - '00 00 00 00 00 00 10 00 00 00 00 00 00 00 39 02' - 'B1 00 23 02 6C 00 0F 03 29 00 1B 02 51 00 FF FF' - 'FF 00 1B 1A 1B 00 1E 02 63 00 33 02 A1 00 08 08' - '08 00 14 03 3C 00 0C 04 1E 00 2E 02 8E 00 10 0F' - '10 00 2A 02 82 00 29 02 7D 00 03 02 04 00 44 44' - '44 44 44 44 44 44 55 44 44 44 44 44 44 44 44 44' - '44 44 44 44 8F FF 84 44 44 44 44 44 44 44 44 44' - '44 44 44 8F F8 F8 44 44 44 44 44 44 44 44 44 44' - '44 44 8F FF F5 44 44 44 44 44 44 44 44 44 44 44' - '44 5C F8 C8 F5 44 44 44 44 44 44 44 44 44 44 44' - '44 44 44 44 85 44 44 44 44 44 44 44 44 44 44 44' - '44 44 44 44 4C 44 44 44 44 44 44 44 44 44 44 44' - '44 44 44 44 4C 44 44 44 44 44 44 44 44 44 44 44' - '44 44 44 44 45 54 44 44 44 44 44 44 44 44 44 44' - '44 44 44 44 45 F4 44 44 44 44 44 44 44 44 44 44' - '44 44 44 44 45 FF 44 44 44 44 44 44 44 44 44 44' - '44 44 44 44 48 FF F4 44 44 44 44 44 44 44 44 44' - '44 44 44 44 48 23 9A 84 44 44 44 44 44 44 44 44' - '44 44 44 44 42 B7 7E AF 44 44 44 44 44 44 44 44' - '44 44 44 44 49 00 00 EA C4 44 44 44 44 44 44 44' - '44 44 44 44 46 00 00 01 F4 44 44 44 44 44 44 44' - '44 44 44 44 46 00 00 00 9F 44 44 44 44 44 44 44' - '44 44 44 44 46 00 70 00 EF 44 44 44 44 44 44 44' - '44 44 44 44 43 00 00 00 79 F4 44 44 44 44 44 44' - '44 44 44 44 49 00 00 00 0E F4 44 44 44 44 44 44' - '44 44 44 44 42 00 00 00 07 24 44 44 44 44 44 44' - '44 44 44 44 43 B0 00 00 00 34 44 44 44 44 44 44' - '44 44 44 44 4C 30 00 00 00 1F 44 44 44 44 44 44' - '44 44 44 44 48 27 E1 1D B1 2C 44 44 44 44 44 44' - '44 44 44 44 44 A9 CC CF F8 48 C4 44 44 44 44 44' - '44 44 44 44 44 58 44 44 44 45 C4 44 44 44 44 44' - '44 44 44 44 44 4C 44 44 44 44 84 44 44 44 44 44' - '44 44 44 44 44 48 44 44 44 44 C4 44 44 44 44 44' - '44 44 44 44 44 48 C4 44 44 44 C4 44 44 44 44 44' - '44 44 44 44 44 44 F4 44 44 4C C4 44 44 44 44 44' - '44 44 44 44 44 44 84 44 F8 84 44 44 44 44 44 44' - '44 44 44 44 44 44 48 F8 44 44 44 44 44 44 FF FF' - '3F FF FF F0 7F FF FF C0 FF FF FF 03 FF FF FC 03' - 'FF FF FF F3 FF FF FF FB FF FF FF FB FF FF FF F9' - 'FF FF FF F9 FF FF FF F8 FF FF FF F8 7F FF FF F8' - '1F FF FF F8 0F FF FF F8 07 FF FF F8 07 FF FF F8' - '03 FF FF F8 03 FF FF F8 01 FF FF F8 01 FF FF F8' - '01 FF FF F8 01 FF FF F8 00 FF FF F8 00 FF FF FC' - '02 7F FF FC FE 7F FF FE FF 7F FF FE FF 7F FF FE' - '7F 7F FF FF 7E 7F FF FF 71 FF FF FF 8F FF 28 00' - '00 00 10 00 00 00 20 00 00 00 01 00 04 00 00 00' - '00 00 80 00 00 00 00 00 00 00 00 00 00 00 10 00' - '00 00 00 00 00 00 3A 02 B1 00 0A 06 14 00 12 03' - '33 00 FF FF FF 00 12 12 12 00 0B 0B 0B 00 1B 1B' - '1B 00 25 02 6F 00 2E 02 92 00 1A 02 52 00 36 02' - 'A6 00 15 03 3E 00 04 04 05 00 13 11 19 00 1E 02' - '62 00 2A 02 82 00 33 33 33 CC 43 33 33 33 33 33' - 'CC 5C 33 33 33 33 33 36 C5 53 33 33 33 33 33 33' - '33 43 33 33 33 33 33 33 33 65 33 33 33 33 33 33' - '33 DC 33 33 33 33 33 33 33 17 EC 33 33 33 33 33' - '33 B0 07 53 33 33 33 33 33 90 00 B3 33 33 33 33' - '33 B0 00 FC 33 33 33 33 33 BA 00 A2 33 33 33 33' - '33 C7 88 82 33 33 33 33 33 3D D5 14 43 33 33 33' - '33 35 33 33 53 33 33 33 33 33 53 33 53 33 33 33' - '33 33 C5 5C 33 33 FC 7F 00 00 F0 FF 00 00 E1 FF' - '00 00 FD FF 00 00 FC FF 00 00 FC FF 00 00 FC 3F' - '00 00 FC 1F 00 00 FC 1F 00 00 FC 0F 00 00 FC 0F' - '00 00 FC 0F 00 00 FE 07 00 00 FE F7 00 00 FF 77' - '00 00 FF 0F 00 00' -} */ +/* @makedep: winetest.ico */ +IDI_WINE ICON "winetest.ico" + +/* list of tests (automatically generated by make_makefiles) */ + +/* +advapi32_test.exe TESTRES "advapi32_test.exe" +advpack_test.exe TESTRES "advpack_test.exe" +browseui_test.exe TESTRES "browseui_test.exe" +cabinet_test.exe TESTRES "cabinet_test.exe" +comcat_test.exe TESTRES "comcat_test.exe" +comctl32_test.exe TESTRES "comctl32_test.exe" +comdlg32_test.exe TESTRES "comdlg32_test.exe" +credui_test.exe TESTRES "credui_test.exe" +crypt32_test.exe TESTRES "crypt32_test.exe" +cryptnet_test.exe TESTRES "cryptnet_test.exe" +d3d8_test.exe TESTRES "d3d8_test.exe" +d3d9_test.exe TESTRES "d3d9_test.exe" +d3drm_test.exe TESTRES "d3drm_test.exe" +d3dx8_test.exe TESTRES "d3dx8_test.exe" +d3dx9_36_test.exe TESTRES "d3dx9_36_test.exe" +ddraw_test.exe TESTRES "ddraw_test.exe" +dinput_test.exe TESTRES "dinput_test.exe" +dnsapi_test.exe TESTRES "dnsapi_test.exe" +dplayx_test.exe TESTRES "dplayx_test.exe" +dsound_test.exe TESTRES "dsound_test.exe" +fusion_test.exe TESTRES "fusion_test.exe" +gdi32_test.exe TESTRES "gdi32_test.exe" +gdiplus_test.exe TESTRES "gdiplus_test.exe" +hlink_test.exe TESTRES "hlink_test.exe" +imm32_test.exe TESTRES "imm32_test.exe" +inetcomm_test.exe TESTRES "inetcomm_test.exe" +infosoft_test.exe TESTRES "infosoft_test.exe" +iphlpapi_test.exe TESTRES "iphlpapi_test.exe" +itss_test.exe TESTRES "itss_test.exe" +jscript_test.exe TESTRES "jscript_test.exe" +kernel32_test.exe TESTRES "kernel32_test.exe" +localspl_test.exe TESTRES "localspl_test.exe" +localui_test.exe TESTRES "localui_test.exe" +lz32_test.exe TESTRES "lz32_test.exe" +mapi32_test.exe TESTRES "mapi32_test.exe" +mlang_test.exe TESTRES "mlang_test.exe" +msacm32_test.exe TESTRES "msacm32_test.exe" +mscms_test.exe TESTRES "mscms_test.exe" +mshtml_test.exe TESTRES "mshtml_test.exe" +msi_test.exe TESTRES "msi_test.exe" +msvcrt_test.exe TESTRES "msvcrt_test.exe" +msvcrtd_test.exe TESTRES "msvcrtd_test.exe" +msxml3_test.exe TESTRES "msxml3_test.exe" +netapi32_test.exe TESTRES "netapi32_test.exe" +ntdll_test.exe TESTRES "ntdll_test.exe" +ntdsapi_test.exe TESTRES "ntdsapi_test.exe" +ntprint_test.exe TESTRES "ntprint_test.exe" +odbccp32_test.exe TESTRES "odbccp32_test.exe" +ole32_test.exe TESTRES "ole32_test.exe" +oleaut32_test.exe TESTRES "oleaut32_test.exe" +opengl32_test.exe TESTRES "opengl32_test.exe" +pdh_test.exe TESTRES "pdh_test.exe" +psapi_test.exe TESTRES "psapi_test.exe" +qedit_test.exe TESTRES "qedit_test.exe" +qmgr_test.exe TESTRES "qmgr_test.exe" +quartz_test.exe TESTRES "quartz_test.exe" +riched20_test.exe TESTRES "riched20_test.exe" +riched32_test.exe TESTRES "riched32_test.exe" +rpcrt4_test.exe TESTRES "rpcrt4_test.exe" +rsaenh_test.exe TESTRES "rsaenh_test.exe" +schannel_test.exe TESTRES "schannel_test.exe" +secur32_test.exe TESTRES "secur32_test.exe" +serialui_test.exe TESTRES "serialui_test.exe" +setupapi_test.exe TESTRES "setupapi_test.exe" +shdocvw_test.exe TESTRES "shdocvw_test.exe" +shell32_test.exe TESTRES "shell32_test.exe" +shlwapi_test.exe TESTRES "shlwapi_test.exe" +snmpapi_test.exe TESTRES "snmpapi_test.exe" +spoolss_test.exe TESTRES "spoolss_test.exe" +urlmon_test.exe TESTRES "urlmon_test.exe" +user32_test.exe TESTRES "user32_test.exe" +userenv_test.exe TESTRES "userenv_test.exe" +usp10_test.exe TESTRES "usp10_test.exe" +uxtheme_test.exe TESTRES "uxtheme_test.exe" +version_test.exe TESTRES "version_test.exe" +wininet_test.exe TESTRES "wininet_test.exe" +winmm_test.exe TESTRES "winmm_test.exe" +winspool.drv_test.exe TESTRES "winspool.drv_test.exe" +wintrust_test.exe TESTRES "wintrust_test.exe" +ws2_32_test.exe TESTRES "ws2_32_test.exe" +*/
16 years, 8 months
1
0
0
0
[ekohl] 33555: Limit the maximum user name length to 20 characters when a user name is changed from within the users list.
by ekohl@svn.reactos.org
Author: ekohl Date: Sat May 17 10:19:01 2008 New Revision: 33555 URL:
http://svn.reactos.org/svn/reactos?rev=33555&view=rev
Log: Limit the maximum user name length to 20 characters when a user name is changed from within the users list. Modified: trunk/reactos/dll/cpl/usrmgr/users.c Modified: trunk/reactos/dll/cpl/usrmgr/users.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/usrmgr/users.c?rev…
============================================================================== --- trunk/reactos/dll/cpl/usrmgr/users.c [iso-8859-1] (original) +++ trunk/reactos/dll/cpl/usrmgr/users.c [iso-8859-1] Sat May 17 10:19:01 2008 @@ -487,6 +487,21 @@ static BOOL +OnBeginLabelEdit(LPNMLVDISPINFO pnmv) +{ + HWND hwndEdit; + + hwndEdit = ListView_GetEditControl(pnmv->hdr.hwndFrom); + if (hwndEdit == NULL) + return TRUE; + + SendMessage(hwndEdit, EM_SETLIMITTEXT, 20, 0); + + return FALSE; +} + + +static BOOL OnEndLabelEdit(LPNMLVDISPINFO pnmv) { TCHAR szOldUserName[UNLEN]; @@ -564,14 +579,17 @@ case NM_DBLCLK: break; - case LVN_ENDLABELEDIT: - return OnEndLabelEdit((LPNMLVDISPINFO)phdr); - case NM_RCLICK: ClientToScreen(GetDlgItem(hwndDlg, IDC_USERS_LIST), &lpnmlv->ptAction); TrackPopupMenu(GetSubMenu(pUserData->hPopupMenu, (lpnmlv->iItem == -1) ? 0 : 1), TPM_LEFTALIGN, lpnmlv->ptAction.x, lpnmlv->ptAction.y, 0, hwndDlg, NULL); break; + + case LVN_BEGINLABELEDIT: + return OnBeginLabelEdit((LPNMLVDISPINFO)phdr); + + case LVN_ENDLABELEDIT: + return OnEndLabelEdit((LPNMLVDISPINFO)phdr); } break; }
16 years, 8 months
1
0
0
0
[ekohl] 33554: New user dialog: Implement user options properly.
by ekohl@svn.reactos.org
Author: ekohl Date: Sat May 17 09:00:39 2008 New Revision: 33554 URL:
http://svn.reactos.org/svn/reactos?rev=33554&view=rev
Log: New user dialog: Implement user options properly. Modified: trunk/reactos/dll/cpl/usrmgr/users.c Modified: trunk/reactos/dll/cpl/usrmgr/users.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/usrmgr/users.c?rev…
============================================================================== --- trunk/reactos/dll/cpl/usrmgr/users.c [iso-8859-1] (original) +++ trunk/reactos/dll/cpl/usrmgr/users.c [iso-8859-1] Sat May 17 09:00:39 2008 @@ -116,6 +116,36 @@ } +static VOID +UpdateUserOptions(HWND hwndDlg, + PUSER_INFO_3 userInfo, + BOOL bInit) +{ + EnableWindow(GetDlgItem(hwndDlg, IDC_USER_NEW_CANNOT_CHANGE), + !userInfo->usri3_password_expired); + EnableWindow(GetDlgItem(hwndDlg, IDC_USER_NEW_NEVER_EXPIRES), + !userInfo->usri3_password_expired); + + EnableWindow(GetDlgItem(hwndDlg, IDC_USER_NEW_FORCE_CHANGE), + (userInfo->usri3_flags & (UF_PASSWD_CANT_CHANGE | UF_DONT_EXPIRE_PASSWD)) == 0); + + if (bInit) + { + CheckDlgButton(hwndDlg, IDC_USER_NEW_FORCE_CHANGE, + userInfo->usri3_password_expired ? BST_CHECKED : BST_UNCHECKED); + + CheckDlgButton(hwndDlg, IDC_USER_NEW_CANNOT_CHANGE, + (userInfo->usri3_flags & UF_PASSWD_CANT_CHANGE) ? BST_CHECKED : BST_UNCHECKED); + + CheckDlgButton(hwndDlg, IDC_USER_NEW_NEVER_EXPIRES, + (userInfo->usri3_flags & UF_DONT_EXPIRE_PASSWD) ? BST_CHECKED : BST_UNCHECKED); + + CheckDlgButton(hwndDlg, IDC_USER_NEW_DISABLED, + (userInfo->usri3_flags & UF_ACCOUNTDISABLE) ? BST_CHECKED : BST_UNCHECKED); + } +} + + INT_PTR CALLBACK NewUserDlgProc(HWND hwndDlg, UINT uMsg, @@ -127,12 +157,15 @@ UNREFERENCED_PARAMETER(wParam); + userInfo = (PUSER_INFO_3)GetWindowLongPtr(hwndDlg, DWLP_USER); + switch (uMsg) { case WM_INITDIALOG: + userInfo = (PUSER_INFO_3)lParam; SetWindowLongPtr(hwndDlg, DWLP_USER, lParam); SendDlgItemMessage(hwndDlg, IDC_USER_NEW_NAME, EM_SETLIMITTEXT, 20, 0); - CheckDlgButton(hwndDlg, IDC_USER_NEW_FORCE_CHANGE, BST_CHECKED); + UpdateUserOptions(hwndDlg, userInfo, TRUE); break; case WM_COMMAND: @@ -146,6 +179,25 @@ } break; + case IDC_USER_NEW_FORCE_CHANGE: + userInfo->usri3_password_expired = !userInfo->usri3_password_expired; + UpdateUserOptions(hwndDlg, userInfo, FALSE); + break; + + case IDC_USER_NEW_CANNOT_CHANGE: + userInfo->usri3_flags ^= UF_PASSWD_CANT_CHANGE; + UpdateUserOptions(hwndDlg, userInfo, FALSE); + break; + + case IDC_USER_NEW_NEVER_EXPIRES: + userInfo->usri3_flags ^= UF_DONT_EXPIRE_PASSWD; + UpdateUserOptions(hwndDlg, userInfo, FALSE); + break; + + case IDC_USER_NEW_DISABLED: + userInfo->usri3_flags ^= UF_ACCOUNTDISABLE; + break; + case IDOK: if (!CheckUserName(hwndDlg, IDC_USER_NEW_NAME)) { @@ -161,8 +213,7 @@ break; } - userInfo = (LPUSER_INFO_3)GetWindowLongPtr(hwndDlg, DWLP_USER); - + /* Store the user name */ nLength = SendDlgItemMessage(hwndDlg, IDC_USER_NEW_NAME, WM_GETTEXTLENGTH, 0, 0); if (nLength > 0) { @@ -170,6 +221,7 @@ GetDlgItemText(hwndDlg, IDC_USER_NEW_NAME, userInfo->usri3_name, nLength + 1); } + /* Store the full user name */ nLength = SendDlgItemMessage(hwndDlg, IDC_USER_NEW_FULL_NAME, WM_GETTEXTLENGTH, 0, 0); if (nLength > 0) { @@ -177,6 +229,7 @@ GetDlgItemText(hwndDlg, IDC_USER_NEW_FULL_NAME, userInfo->usri3_full_name, nLength + 1); } + /* Store the description */ nLength = SendDlgItemMessage(hwndDlg, IDC_USER_NEW_DESCRIPTION, WM_GETTEXTLENGTH, 0, 0); if (nLength > 0) { @@ -191,12 +244,6 @@ userInfo->usri3_password = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (nLength + 1) * sizeof(WCHAR)); GetDlgItemText(hwndDlg, IDC_USER_NEW_PASSWORD1, userInfo->usri3_password, nLength + 1); } - - if (IsDlgButtonChecked(hwndDlg, IDC_USER_NEW_FORCE_CHANGE) == BST_CHECKED) - userInfo->usri3_password_expired = TRUE; - - if (IsDlgButtonChecked(hwndDlg, IDC_USER_NEW_DISABLED) == BST_CHECKED) - userInfo->usri3_flags |= UF_ACCOUNTDISABLE; EndDialog(hwndDlg, IDOK); break; @@ -231,6 +278,8 @@ user.usri3_acct_expires = TIMEQ_FOREVER; user.usri3_max_storage = USER_MAXSTORAGE_UNLIMITED; user.usri3_primary_group_id = DOMAIN_GROUP_RID_USERS; + + user.usri3_password_expired = TRUE; if (DialogBoxParam(hApplet, MAKEINTRESOURCE(IDD_USER_NEW),
16 years, 8 months
1
0
0
0
[jimtabor] 33553: Add DCE pointer to window class. Start support for real Class DCEs.
by jimtabor@svn.reactos.org
Author: jimtabor Date: Sat May 17 06:55:24 2008 New Revision: 33553 URL:
http://svn.reactos.org/svn/reactos?rev=33553&view=rev
Log: Add DCE pointer to window class. Start support for real Class DCEs. Modified: trunk/reactos/include/reactos/win32k/ntuser.h Modified: trunk/reactos/include/reactos/win32k/ntuser.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/include/reactos/win32k/ntu…
============================================================================== --- trunk/reactos/include/reactos/win32k/ntuser.h [iso-8859-1] (original) +++ trunk/reactos/include/reactos/win32k/ntuser.h [iso-8859-1] Sat May 17 06:55:24 2008 @@ -76,6 +76,7 @@ PCALLPROC CallProcList; INT ClsExtra; INT WndExtra; + PVOID Dce; HINSTANCE hInstance; HANDLE hIcon; /* FIXME - Use pointer! */ HANDLE hIconSm; /* FIXME - Use pointer! */
16 years, 8 months
1
0
0
0
[pschweitzer] 33552: Synced urlmon.dll with Wine HEAD. This *does not* fix Downloader, but it now returns an error message.
by pschweitzer@svn.reactos.org
Author: pschweitzer Date: Sat May 17 05:36:13 2008 New Revision: 33552 URL:
http://svn.reactos.org/svn/reactos?rev=33552&view=rev
Log: Synced urlmon.dll with Wine HEAD. This *does not* fix Downloader, but it now returns an error message. Modified: trunk/reactos/dll/win32/urlmon/file.c trunk/reactos/dll/win32/urlmon/urlmon.rbuild Modified: trunk/reactos/dll/win32/urlmon/file.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/urlmon/file.c?re…
============================================================================== --- trunk/reactos/dll/win32/urlmon/file.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/urlmon/file.c [iso-8859-1] Sat May 17 05:36:13 2008 @@ -119,6 +119,9 @@ ReleaseBindInfo(&bindinfo); + if(!szUrl || !*szUrl) + return E_INVALIDARG; + if(lstrlenW(szUrl) < sizeof(wszFile)/sizeof(WCHAR) || memcmp(szUrl, wszFile, sizeof(wszFile))) return MK_E_SYNTAX; @@ -153,6 +156,9 @@ break; } } + + if(file_name[1] == '|') + file_name[1] = ':'; This->file = CreateFileW(file_name, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); Modified: trunk/reactos/dll/win32/urlmon/urlmon.rbuild URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/urlmon/urlmon.rb…
============================================================================== --- trunk/reactos/dll/win32/urlmon/urlmon.rbuild [iso-8859-1] (original) +++ trunk/reactos/dll/win32/urlmon/urlmon.rbuild [iso-8859-1] Sat May 17 05:36:13 2008 @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd"> <group> -<module name="urlmon" type="win32dll" baseaddress="${BASEADDRESS_URLMON}" installbase="system32" installname="urlmon.dll" allowwarnings="true"> +<module name="urlmon" type="win32dll" baseaddress="${BASEADDRESS_URLMON}" installbase="system32" installname="urlmon.dll" allowwarnings="true" entrypoint="0"> <autoregister infsection="OleControlDlls" type="Both" /> <importlibrary definition="urlmon.spec.def" /> <include base="urlmon">.</include> @@ -28,13 +28,13 @@ <file>rsrc.rc</file> <file>urlmon.spec</file> <library>wine</library> + <library>uuid</library> <library>ole32</library> <library>shlwapi</library> <library>wininet</library> <library>user32</library> <library>advapi32</library> <library>kernel32</library> - <library>uuid</library> <library>ntdll</library> </module> </group>
16 years, 8 months
1
0
0
0
[mpiulachs] 33551: Add ROS_BUILDENGINE variable to determine the location of rbuild - Allows using an rbuild executable other than the one found in the same source tree (tools\rbuild)
by mpiulachs@svn.reactos.org
Author: mpiulachs Date: Sat May 17 04:56:15 2008 New Revision: 33551 URL:
http://svn.reactos.org/svn/reactos?rev=33551&view=rev
Log: Add ROS_BUILDENGINE variable to determine the location of rbuild - Allows using an rbuild executable other than the one found in the same source tree (tools\rbuild) Modified: trunk/reactos/Makefile Modified: trunk/reactos/Makefile URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/Makefile?rev=33551&r1=3355…
============================================================================== --- trunk/reactos/Makefile [iso-8859-1] (original) +++ trunk/reactos/Makefile [iso-8859-1] Sat May 17 04:56:15 2008 @@ -125,6 +125,9 @@ # # ROS_AUTOMAKE # Alternate name of makefile.auto +# +# ROS_BUILDENGINE +# The Build engine to be used. The variable defaults to rbuild (RBUILD_TARGET) # # check for versions of make that don't have features we need... @@ -395,14 +398,19 @@ $(BUILDNO_H) \ $(GENDIB_DIB_FILES) \ $(NCI_SERVICE_FILES) + ifeq ($(ARCH),powerpc) PREAUTO += $(OFW_INTERFACE_SERVICE_FILES) $(PPCMMU_TARGETS) endif -$(ROS_AUTOMAKE): $(RBUILD_TARGET) $(XMLBUILDFILES) | $(PREAUTO) +ifeq ($(ROS_BUILDENGINE),) +ROS_BUILDENGINE=$(RBUILD_TARGET) +endif + +$(ROS_AUTOMAKE): $(ROS_BUILDENGINE) $(XMLBUILDFILES) | $(PREAUTO) ${mkdir} $(OUTPUT_)media$(SEP)inf 2>$(NUL) $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) mingw + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) mingw world: all bootcd livecd @@ -435,143 +443,143 @@ $(Q)$(RGENSTAT_TARGET) apistatus.lst apistatus.xml .PHONY: cb -cb: $(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) cb +cb: $(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) cb .PHONY: msbuild -msbuild: $(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) msbuild +msbuild: $(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) msbuild .PHONY: msbuild_clean -msbuild_clean: $(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -c msbuild +msbuild_clean: $(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -c msbuild .PHONY: depmap -depmap: $(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) depmap +depmap: $(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) depmap .PHONY: vreport -vreport:$(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) vreport +vreport:$(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) vreport .PHONY: msvc -msvc: $(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) msvc +msvc: $(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) msvc .PHONY: msvc6 -msvc6: $(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs6.00 -voversionconfiguration msvc +msvc6: $(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs6.00 -voversionconfiguration msvc .PHONY: msvc7 -msvc7: $(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs7.00 -voversionconfiguration msvc +msvc7: $(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs7.00 -voversionconfiguration msvc .PHONY: msvc71 -msvc71: $(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs7.10 -voversionconfiguration msvc +msvc71: $(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs7.10 -voversionconfiguration msvc .PHONY: msvc8 -msvc8: $(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs8.00 -voversionconfiguration msvc +msvc8: $(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs8.00 -voversionconfiguration msvc .PHONY: msvc9 -msvc9: $(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs9.00 -voversionconfiguration msvc +msvc9: $(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs9.00 -voversionconfiguration msvc .PHONY: msvc6_clean -msvc6_clean: $(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -c -vs6.00 -voversionconfiguration msvc +msvc6_clean: $(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -c -vs6.00 -voversionconfiguration msvc .PHONY: msvc7_clean -msvc7_clean: $(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -c -vs7.00 -voversionconfiguration msvc +msvc7_clean: $(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -c -vs7.00 -voversionconfiguration msvc .PHONY: msvc71_clean -msvc71_clean: $(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -c -vs7.10 -voversionconfiguration msvc +msvc71_clean: $(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -c -vs7.10 -voversionconfiguration msvc .PHONY: msvc8_clean -msvc8_clean: $(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -c -vs8.00 -voversionconfiguration msvc +msvc8_clean: $(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -c -vs8.00 -voversionconfiguration msvc .PHONY: msvc9_clean -msvc9_clean: $(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -c -vs9.00 -voversionconfiguration msvc +msvc9_clean: $(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -c -vs9.00 -voversionconfiguration msvc .PHONY: msvc_clean -msvc_clean: $(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -c msvc +msvc_clean: $(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -c msvc .PHONY: msvc_clean_all -msvc_clean_all: $(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -c -vs6.00 -voversionconfiguration msvc - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -c -vs7.00 -voversionconfiguration msvc - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -c -vs7.10 -voversionconfiguration msvc - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -c -vs8.10 -voversionconfiguration msvc +msvc_clean_all: $(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -c -vs6.00 -voversionconfiguration msvc + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -c -vs7.00 -voversionconfiguration msvc + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -c -vs7.10 -voversionconfiguration msvc + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -c -vs8.10 -voversionconfiguration msvc .PHONY: msvc7_install_debug -msvc7_install_debug: $(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs7.00 -vcdebug -voversionconfiguration msvc +msvc7_install_debug: $(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs7.00 -vcdebug -voversionconfiguration msvc .PHONY: msvc7_install_release -msvc7_install_release: $(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs7.00 -vcrelease -voversionconfiguration msvc +msvc7_install_release: $(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs7.00 -vcrelease -voversionconfiguration msvc .PHONY: msvc7_install_speed -msvc7_install_speed: $(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs7.00 -vcspeed -voversionconfiguration msvc +msvc7_install_speed: $(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs7.00 -vcspeed -voversionconfiguration msvc .PHONY: msvc71_install_debug -msvc71_install_debug: $(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs7.10 -vcdebug -voversionconfiguration msvc +msvc71_install_debug: $(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs7.10 -vcdebug -voversionconfiguration msvc .PHONY: msvc71_install_release -msvc71_install_release: $(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs7.10 -vcrelease -voversionconfiguration msvc +msvc71_install_release: $(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs7.10 -vcrelease -voversionconfiguration msvc .PHONY: msvc71_install_speed -msvc71_install_speed: $(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs7.10 -vcspeed -voversionconfiguration msvc +msvc71_install_speed: $(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs7.10 -vcspeed -voversionconfiguration msvc .PHONY: msvc8_install_debug -msvc8_install_debug: $(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs8.00 -vcdebug -voversionconfiguration msvc +msvc8_install_debug: $(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs8.00 -vcdebug -voversionconfiguration msvc .PHONY: msvc8_install_release -msvc8_install_release: $(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs8.00 -vcrelease -voversionconfiguration msvc +msvc8_install_release: $(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs8.00 -vcrelease -voversionconfiguration msvc .PHONY: msvc8_install_speed -msvc8_install_speed: $(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs8.00 -vcspeed -voversionconfiguration msvc +msvc8_install_speed: $(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) -vs8.00 -vcspeed -voversionconfiguration msvc .PHONY: makefile_auto_clean makefile_auto_clean: @@ -581,6 +589,6 @@ clean: makefile_auto_clean .PHONY: depends -depends: $(RBUILD_TARGET) - $(ECHO_RBUILD) - $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) mingw +depends: $(ROS_BUILDENGINE) + $(ECHO_RBUILD) + $(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) mingw
16 years, 8 months
1
0
0
0
[hpoussin] 33550: Add fusion.idl from Wine
by hpoussin@svn.reactos.org
Author: hpoussin Date: Sat May 17 04:53:01 2008 New Revision: 33550 URL:
http://svn.reactos.org/svn/reactos?rev=33550&view=rev
Log: Add fusion.idl from Wine Added: trunk/reactos/include/psdk/fusion.idl (with props) Modified: trunk/reactos/include/psdk/msidefs.h trunk/reactos/include/psdk/psdk.rbuild Added: trunk/reactos/include/psdk/fusion.idl URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/include/psdk/fusion.idl?re…
============================================================================== --- trunk/reactos/include/psdk/fusion.idl (added) +++ trunk/reactos/include/psdk/fusion.idl [iso-8859-1] Sat May 17 04:53:01 2008 @@ -1,0 +1,345 @@ +/* + * Copyright 2008 James Hawkins + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +import "objidl.idl"; + +interface IAssemblyCache; +interface IAssemblyCacheItem; +interface IAssemblyEnum; +interface IAssemblyName; + +typedef enum +{ + ASM_CACHE_ZAP = 0x1, + ASM_CACHE_GAC = 0x2, + ASM_CACHE_DOWNLOAD = 0x4, + ASM_CACHE_ROOT = 0x8 +} ASM_CACHE_FLAGS; + +typedef enum +{ + peNone = 0x00000000, + peMSIL = 0x00000001, + peI386 = 0x00000002, + peIA64 = 0x00000003, + peAMD64 = 0x00000004, + peInvalid = 0xffffffff +} PEKIND; + +typedef enum _tagAssemblyComparisonResult +{ + ACR_Unknown, + ACR_EquivalentFullMatch, + ACR_EquivalentWeakNamed, + ACR_EquivalentFXUnified, + ACR_EquivalentUnified, + ACR_NonEquivalentVersion, + ACR_NonEquivalent, + ACR_EquivalentPartialMatch, + ACR_EquivalentPartialWeakNamed, + ACR_EquivalentPartialUnified, + ACR_EquivalentPartialFXUnified, + ACR_NonEquivalentPartialVersion +} AssemblyComparisonResult; + +[ + local, + object, + uuid(e707dcde-d1cd-11d2-bab9-00c04f8eceae), + pointer_default(unique) +] +interface IAssemblyCache : IUnknown +{ + typedef struct _FUSION_INSTALL_REFERENCE_ + { + DWORD cbSize; + DWORD dwFlags; + GUID guidScheme; + LPCWSTR szIdentifier; + LPCWSTR szNonCannonicalData; + } FUSION_INSTALL_REFERENCE, *LPFUSION_INSTALL_REFERENCE; + + typedef const FUSION_INSTALL_REFERENCE *LPCFUSION_INSTALL_REFERENCE; + + typedef struct _ASSEMBLY_INFO + { + ULONG cbAssemblyInfo; + DWORD dwAssemblyFlags; + ULARGE_INTEGER uliAssemblySizeInKB; + LPWSTR pszCurrentAssemblyPathBuf; + ULONG cchBuf; + } ASSEMBLY_INFO; + + cpp_quote("#define IASSEMBLYCACHE_INSTALL_FLAG_REFRESH 0x00000001") + cpp_quote("#define IASSEMBLYCACHE_INSTALL_FLAG_FORCE_REFRESH 0x00000002") + + cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_UNINSTALLED 1") + cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_STILL_IN_USE 2") + cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_ALREADY_UNINSTALLED 3") + cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_DELETE_PENDING 4") + cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_HAS_INSTALL_REFERENCES 5") + cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_REFERENCE_NOT_FOUND 6") + + cpp_quote("#define QUERYASMINFO_FLAG_VALIDATE 0x00000001") + cpp_quote("#define QUERYASMINFO_FLAG_GETSIZE 0x00000002") + + cpp_quote("#define ASSEMBLYINFO_FLAG_INSTALLED 0x00000001") + cpp_quote("#define ASSEMBLYINFO_FLAG_PAYLOADRESIDENT 0x00000002") + + HRESULT UninstallAssembly( + [in] DWORD dwFlags, + [in] LPCWSTR pszAssemblyName, + [in] LPCFUSION_INSTALL_REFERENCE pRefData, + [out, optional] ULONG *pulDisposition); + + HRESULT QueryAssemblyInfo( + [in] DWORD dwFlags, + [in] LPCWSTR pszAssemblyName, + [in, out] ASSEMBLY_INFO *pAsmInfo); + + HRESULT CreateAssemblyCacheItem( + [in] DWORD dwFlags, + [in] PVOID pvReserved, + [out] IAssemblyCacheItem **ppAsmItem, + [in, optional] LPCWSTR pszAssemblyName); + + HRESULT CreateAssemblyScavenger([out] IUnknown **ppUnkReserved); + + HRESULT InstallAssembly( + [in] DWORD dwFlags, + [in] LPCWSTR pszManifestFilePath, + [in] LPCFUSION_INSTALL_REFERENCE pRefData); +} + +[ + local, + object, + uuid(9e3aaeb4-d1cd-11d2-bab9-00c04f8eceae), + pointer_default(unique) +] +interface IAssemblyCacheItem : IUnknown +{ + cpp_quote("#define STREAM_FORMAT_COMPLIB_MODULE 0") + cpp_quote("#define STREAM_FORMAT_COMPLIB_MANIFEST 1") + cpp_quote("#define STREAM_FORMAT_WIN32_MODULE 2") + cpp_quote("#define STREAM_FORMAT_WIN32_MANIFEST 4") + + cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_FLAG_REFRESH 0x00000001") + cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_FLAG_FORCE_REFRESH 0x00000002") + + cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_INSTALLED 1") + cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_REFRESHED 2") + cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_ALREADY_INSTALLED 3") + + HRESULT CreateStream( + [in] DWORD dwFlags, + [in] LPCWSTR pszStreamName, + [in] DWORD dwFormat, + [in] DWORD dwFormatFlags, + [out] IStream **ppIStream, + [in, optional] ULARGE_INTEGER *puliMaxSize); + + HRESULT Commit( + [in] DWORD dwFlags, + [out, optional] ULONG *pulDisposition); + + HRESULT AbortItem(); +} + +[ + local, + object, + uuid(CD193BC0-B4BC-11d2-9833-00C04FC31D2E), + pointer_default(unique) +] +interface IAssemblyName: IUnknown +{ + typedef [unique] IAssemblyName *LPASSEMBLYNAME; + + typedef enum + { + CANOF_PARSE_DISPLAY_NAME = 0x1, + CANOF_SET_DEFAULT_VALUES = 0x2, + CANOF_VERIFY_FRIEND_ASSEMBLYNAME = 0x4, + CANOF_PARSE_FRIEND_DISPLAY_NAME = CANOF_PARSE_DISPLAY_NAME | + CANOF_VERIFY_FRIEND_ASSEMBLYNAME + } CREATE_ASM_NAME_OBJ_FLAGS; + + typedef enum + { + ASM_NAME_PUBLIC_KEY = 0, + ASM_NAME_PUBLIC_KEY_TOKEN, + ASM_NAME_HASH_VALUE, + ASM_NAME_NAME, + ASM_NAME_MAJOR_VERSION, + ASM_NAME_MINOR_VERSION, + ASM_NAME_BUILD_NUMBER, + ASM_NAME_REVISION_NUMBER, + ASM_NAME_CULTURE, + ASM_NAME_PROCESSOR_ID_ARRAY, + ASM_NAME_OSINFO_ARRAY, + ASM_NAME_HASH_ALGID, + ASM_NAME_ALIAS, + ASM_NAME_CODEBASE_URL, + ASM_NAME_CODEBASE_LASTMOD, + ASM_NAME_NULL_PUBLIC_KEY, + ASM_NAME_NULL_PUBLIC_KEY_TOKEN, + ASM_NAME_CUSTOM, + ASM_NAME_NULL_CUSTOM, + ASM_NAME_MVID, + ASM_NAME_FILE_MAJOR_VERSION, + ASM_NAME_FILE_MINOR_VERSION, + ASM_NAME_FILE_BUILD_NUMBER, + ASM_NAME_FILE_REVISION_NUMBER, + ASM_NAME_RETARGET, + ASM_NAME_SIGNATURE_BLOB, + ASM_NAME_CONFIG_MASK, + ASM_NAME_ARCHITECTURE, + ASM_NAME_MAX_PARAMS + } ASM_NAME; + + typedef enum + { + ASM_DISPLAYF_VERSION = 0x1, + ASM_DISPLAYF_CULTURE = 0x2, + ASM_DISPLAYF_PUBLIC_KEY_TOKEN = 0x4, + ASM_DISPLAYF_PUBLIC_KEY = 0x8, + ASM_DISPLAYF_CUSTOM = 0x10, + ASM_DISPLAYF_PROCESSORARCHITECTURE = 0x20, + ASM_DISPLAYF_LANGUAGEID = 0x40, + ASM_DISPLAYF_RETARGET = 0x80, + ASM_DISPLAYF_CONFIG_MASK = 0x100, + ASM_DISPLAYF_MVID = 0x200, + + ASM_DISPLAYF_FULL = ASM_DISPLAYF_VERSION | + ASM_DISPLAYF_CULTURE | + ASM_DISPLAYF_PUBLIC_KEY_TOKEN | + ASM_DISPLAYF_RETARGET | + ASM_DISPLAYF_PROCESSORARCHITECTURE, + } ASM_DISPLAY_FLAGS; + + typedef enum + { + ASM_CMPF_NAME = 0x1, + ASM_CMPF_MAJOR_VERSION = 0x2, + ASM_CMPF_MINOR_VERSION = 0x4, + ASM_CMPF_BUILD_NUMBER = 0x8, + ASM_CMPF_REVISION_NUMBER = 0x10, + ASM_CMPF_VERSION = ASM_CMPF_MAJOR_VERSION | + ASM_CMPF_MINOR_VERSION | + ASM_CMPF_BUILD_NUMBER | + ASM_CMPF_REVISION_NUMBER, + ASM_CMPF_PUBLIC_KEY_TOKEN = 0x20, + ASM_CMPF_CULTURE = 0x40, + ASM_CMPF_CUSTOM = 0x80, + ASM_CMPF_DEFAULT = 0x100, + ASM_CMPF_RETARGET = 0x200, + ASM_CMPF_ARCHITECTURE = 0x400, + ASM_CMPF_CONFIG_MASK = 0x800, + ASM_CMPF_MVID = 0x1000, + ASM_CMPF_SIGNATURE = 0x2000, + ASM_CMPF_IL_ALL = ASM_CMPF_NAME | + ASM_CMPF_VERSION | + ASM_CMPF_PUBLIC_KEY_TOKEN | + ASM_CMPF_CULTURE, + ASM_CMPF_IL_NO_VERSION = ASM_CMPF_NAME | + ASM_CMPF_PUBLIC_KEY_TOKEN | + ASM_CMPF_CULTURE + } ASM_CMP_FLAGS; + + HRESULT SetProperty( + [in] DWORD PropertyId, + [in] LPVOID pvProperty, + [in] DWORD cbProperty); + + HRESULT GetProperty( + [in] DWORD PropertyId, + [out] LPVOID pvProperty, + [in, out] LPDWORD pcbProperty); + + HRESULT Finalize(); + + HRESULT GetDisplayName( + [out] LPOLESTR szDisplayName, + [in, out] LPDWORD pccDisplayName, + [in] DWORD dwDisplayFlags); + + HRESULT Reserved( + [in] REFIID refIID, + [in] IUnknown *pUnkReserved1, + [in] IUnknown *pUnkReserved2, + [in] LPCOLESTR szReserved, + [in] LONGLONG llReserved, + [in] LPVOID pvReserved, + [in] DWORD cbReserved, + [out] LPVOID *ppReserved); + + HRESULT GetName( + [in, out] LPDWORD lpcwBuffer, + [out] WCHAR *pwzName); + + HRESULT GetVersion( + [out] LPDWORD pdwVersionHi, + [out] LPDWORD pdwVersionLow); + + HRESULT IsEqual( + [in] IAssemblyName *pName, + [in] DWORD dwCmpFlags); + + HRESULT Clone([out] IAssemblyName **pName); +} + +[ + local, + object, + uuid(21b8916c-f28e-11d2-a473-00c04f8ef448), + pointer_default(unique) +] +interface IAssemblyEnum : IUnknown +{ + HRESULT GetNextAssembly( + [in] LPVOID pvReserved, + [out] IAssemblyName **ppName, + [in] DWORD dwFlags); + + HRESULT Reset(void); + + HRESULT Clone([out] IAssemblyEnum **ppEnum); +} + +[ + local, + object, + uuid(582dac66-e678-449f-aba6-6faaec8a9394), + pointer_default(unique) +] +interface IInstallReferenceItem : IUnknown +{ + +} + +[ + local, + object, + uuid(56b1a988-7c0c-4aa2-8639-c3eb5a90226f), + pointer_default(unique) +] +interface IInstallReferenceEnum : IUnknown +{ + +} Propchange: trunk/reactos/include/psdk/fusion.idl ------------------------------------------------------------------------------ svn:eol-style = native Modified: trunk/reactos/include/psdk/msidefs.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/include/psdk/msidefs.h?rev…
============================================================================== --- trunk/reactos/include/psdk/msidefs.h [iso-8859-1] (original) +++ trunk/reactos/include/psdk/msidefs.h [iso-8859-1] Sat May 17 04:53:01 2008 @@ -203,6 +203,12 @@ enum msidbMoveFileOptions { msidbMoveFileOptionsMove = 0x00000001, +}; + +enum msidbAssemblyAttributes +{ + msidbAssemblyAttributesURT = 0x00000000, + msidbAssemblyAttributesWin32 = 0x00000001, }; /* Modified: trunk/reactos/include/psdk/psdk.rbuild URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/include/psdk/psdk.rbuild?r…
============================================================================== --- trunk/reactos/include/psdk/psdk.rbuild [iso-8859-1] (original) +++ trunk/reactos/include/psdk/psdk.rbuild [iso-8859-1] Sat May 17 04:53:01 2008 @@ -7,6 +7,7 @@ <file>dispex.idl</file> <file>docobj.idl</file> <file>downloadmgr.idl</file> + <file>fusion.idl</file> <file>hlink.idl</file> <file>htiframe.idl</file> <file>iads.idl</file>
16 years, 8 months
1
0
0
0
← Newer
1
...
21
22
23
24
25
26
27
...
59
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
Results per page:
10
25
50
100
200