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
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
April 2008
----- 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
21 participants
395 discussions
Start a n
N
ew thread
[janderwald] 32905: - use a list box for the OpenWithDialog - implement SHOpenWithDialog api - refactor item loading code - display app icon and description for each entry - use comctl32 mru apis for handling OpenWithList entries - highlight selected entry on focus
by janderwald@svn.reactos.org
Author: janderwald Date: Thu Apr 10 07:29:08 2008 New Revision: 32905 URL:
http://svn.reactos.org/svn/reactos?rev=32905&view=rev
Log: - use a list box for the OpenWithDialog - implement SHOpenWithDialog api - refactor item loading code - display app icon and description for each entry - use comctl32 mru apis for handling OpenWithList entries - highlight selected entry on focus Modified: trunk/reactos/dll/win32/shell32/lang/bg-BG.rc trunk/reactos/dll/win32/shell32/lang/ca-ES.rc trunk/reactos/dll/win32/shell32/lang/cs-CZ.rc trunk/reactos/dll/win32/shell32/lang/da-DK.rc trunk/reactos/dll/win32/shell32/lang/de-DE.rc trunk/reactos/dll/win32/shell32/lang/el-GR.rc trunk/reactos/dll/win32/shell32/lang/en-GB.rc trunk/reactos/dll/win32/shell32/lang/en-US.rc trunk/reactos/dll/win32/shell32/lang/eo-EO.rc trunk/reactos/dll/win32/shell32/lang/es-ES.rc trunk/reactos/dll/win32/shell32/lang/fi-FI.rc trunk/reactos/dll/win32/shell32/lang/fr-FR.rc trunk/reactos/dll/win32/shell32/lang/hu-HU.rc trunk/reactos/dll/win32/shell32/lang/it-IT.rc trunk/reactos/dll/win32/shell32/lang/ja-JP.rc trunk/reactos/dll/win32/shell32/lang/ko-KO.rc trunk/reactos/dll/win32/shell32/lang/nb-NO.rc trunk/reactos/dll/win32/shell32/lang/nl-NL.rc trunk/reactos/dll/win32/shell32/lang/pl-PL.rc trunk/reactos/dll/win32/shell32/lang/pt-BR.rc trunk/reactos/dll/win32/shell32/lang/pt-PT.rc trunk/reactos/dll/win32/shell32/lang/ru-RU.rc trunk/reactos/dll/win32/shell32/lang/sk-SK.rc trunk/reactos/dll/win32/shell32/lang/sl-SI.rc trunk/reactos/dll/win32/shell32/lang/sv-SE.rc trunk/reactos/dll/win32/shell32/lang/tr-TR.rc trunk/reactos/dll/win32/shell32/lang/uk-UA.rc trunk/reactos/dll/win32/shell32/lang/wa-WA.rc trunk/reactos/dll/win32/shell32/lang/zh-CN.rc trunk/reactos/dll/win32/shell32/lang/zh-TW.rc trunk/reactos/dll/win32/shell32/she_ocmenu.c trunk/reactos/dll/win32/shell32/shresdef.h [This mail would be too long, it was shortened to contain the URLs only.] Modified: trunk/reactos/dll/win32/shell32/lang/bg-BG.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/bg-…
Modified: trunk/reactos/dll/win32/shell32/lang/ca-ES.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/ca-…
Modified: trunk/reactos/dll/win32/shell32/lang/cs-CZ.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/cs-…
Modified: trunk/reactos/dll/win32/shell32/lang/da-DK.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/da-…
Modified: trunk/reactos/dll/win32/shell32/lang/de-DE.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/de-…
Modified: trunk/reactos/dll/win32/shell32/lang/el-GR.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/el-…
Modified: trunk/reactos/dll/win32/shell32/lang/en-GB.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/en-…
Modified: trunk/reactos/dll/win32/shell32/lang/en-US.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/en-…
Modified: trunk/reactos/dll/win32/shell32/lang/eo-EO.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/eo-…
Modified: trunk/reactos/dll/win32/shell32/lang/es-ES.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/es-…
Modified: trunk/reactos/dll/win32/shell32/lang/fi-FI.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/fi-…
Modified: trunk/reactos/dll/win32/shell32/lang/fr-FR.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/fr-…
Modified: trunk/reactos/dll/win32/shell32/lang/hu-HU.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/hu-…
Modified: trunk/reactos/dll/win32/shell32/lang/it-IT.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/it-…
Modified: trunk/reactos/dll/win32/shell32/lang/ja-JP.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/ja-…
Modified: trunk/reactos/dll/win32/shell32/lang/ko-KO.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/ko-…
Modified: trunk/reactos/dll/win32/shell32/lang/nb-NO.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/nb-…
Modified: trunk/reactos/dll/win32/shell32/lang/nl-NL.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/nl-…
Modified: trunk/reactos/dll/win32/shell32/lang/pl-PL.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/pl-…
Modified: trunk/reactos/dll/win32/shell32/lang/pt-BR.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/pt-…
Modified: trunk/reactos/dll/win32/shell32/lang/pt-PT.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/pt-…
Modified: trunk/reactos/dll/win32/shell32/lang/ru-RU.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/ru-…
Modified: trunk/reactos/dll/win32/shell32/lang/sk-SK.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/sk-…
Modified: trunk/reactos/dll/win32/shell32/lang/sl-SI.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/sl-…
Modified: trunk/reactos/dll/win32/shell32/lang/sv-SE.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/sv-…
Modified: trunk/reactos/dll/win32/shell32/lang/tr-TR.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/tr-…
Modified: trunk/reactos/dll/win32/shell32/lang/uk-UA.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/uk-…
Modified: trunk/reactos/dll/win32/shell32/lang/wa-WA.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/wa-…
Modified: trunk/reactos/dll/win32/shell32/lang/zh-CN.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/zh-…
Modified: trunk/reactos/dll/win32/shell32/lang/zh-TW.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/zh-…
Modified: trunk/reactos/dll/win32/shell32/she_ocmenu.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/she_ocme…
Modified: trunk/reactos/dll/win32/shell32/shresdef.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/shresdef…
16 years, 8 months
1
0
0
0
[dreimer] 32904: Update downloader.xml to up to date Versions.
by dreimer@svn.reactos.org
Author: dreimer Date: Thu Apr 10 06:36:32 2008 New Revision: 32904 URL:
http://svn.reactos.org/svn/reactos?rev=32904&view=rev
Log: Update downloader.xml to up to date Versions. Modified: trunk/rosapps/downloader/downloader.xml Modified: trunk/rosapps/downloader/downloader.xml URL:
http://svn.reactos.org/svn/reactos/trunk/rosapps/downloader/downloader.xml?…
============================================================================== --- trunk/rosapps/downloader/downloader.xml [iso-8859-1] (original) +++ trunk/rosapps/downloader/downloader.xml [iso-8859-1] Thu Apr 10 06:36:32 2008 @@ -8,38 +8,38 @@ <location>
http://svn.reactos.org/packages/Firefox%20Setup%201.5.0.12.exe
</location> </application> <application name="Firefox 2.0"> - <regname>Mozilla Firefox (2.0.0.11)</regname> - <licence>MPL/GPL/LGPL</licence> - <version>2.0.0.11</version> + <regname>Mozilla Firefox (2.0.0.13)</regname> + <licence>MPL/GPL/LGPL</licence> + <version>2.0.0.13</version> <description>The most popular and one of the best free Web Browsers out there.</description> - <location>
http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.11/win32/en-U…
</location> + <location>
http://releases.mozilla.org/pub/mozilla.org/firefox/releases/latest-2.0/win…
</location> </application> <application name="Opera"> <regname>Opera</regname> <licence>Freeware</licence> - <version>9.24</version> + <version>9.26</version> <description>The most popular and one of the best free Web Browsers out there.</description> - <location>
http://mirror.nwps.ws/opera/win/924/en/Opera_9.24_Classic_Setup.exe
</location> + <location>
http://mirror.nwps.ws/opera/win/926/en/Opera_9.26_Classic_Setup.exe
</location> </application> <application name="Thunderbird 1.5"> <regname>Mozilla Thunderbird (1.5)</regname> <licence>MPL/GPL/LGPL</licence> <version>1.5.0.14</version> <description>The most popular and one of the best free Mail Clients out there.</description> - <location>
http://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/1.5.0.14/win32/…
</location> + <location>
http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/latest-1.5…
</location> </application> <application name="Thunderbird 2.0"> - <regname>Mozilla Thunderbird (2.0.0.9)</regname> - <licence>MPL/GPL/LGPL</licence> - <version>2.0.0.9</version> + <regname>Mozilla Thunderbird (2.0.0.12)</regname> + <licence>MPL/GPL/LGPL</licence> + <version>2.0.0.12</version> <description>The most popular and one of the best free Mail Clients out there.</description> - <location>
http://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/2.0.0.9/win32/e…
</location> + <location>
http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/latest-2.0…
</location> </application> <application name="SeaMonkey"> - <regname>SeaMonkey (1.1.7)</regname> - <version>1.1.7</version> + <regname>SeaMonkey (1.1.9)</regname> + <version>1.1.9</version> <description>Mozilla Suite is alive. This is the one and only Browser, Mail, Chat, and Composer bundle you will ever need.</description> - <location>
http://ftp-mozilla.netscape.com/pub/mozilla.org/seamonkey/releases/1.1.7/se…
</location> + <location>
http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/1.1.9/seamon…
</location> </application> <application name="Mozilla ActiveX Control"> <regname>Mozilla ActiveX Control v1.7.12 (ReactOS special)</regname> @@ -65,9 +65,9 @@ </application> <application name="Miranda IM"> <regname>Miranda IM</regname> - <version>0.7.3</version> + <version>0.7.4</version> <description>Open source multiprotocol instant messaging application - May not work completely.</description> - <location>
http://ovh.dl.sourceforge.net/sourceforge/miranda/miranda-im-v0.7.3-unicode…
</location> + <location>
http://ovh.dl.sourceforge.net/sourceforge/miranda/miranda-im-v0.7.4-unicode…
</location> </application> <application name="Putty"> <regname>PuTTY version 0.60</regname> @@ -79,16 +79,16 @@ </category> <category name="Office" icon="2"> <application name="Abiword"> - <regname>"AbiWord 2.4.6 (remove only)"</regname> - <version>2.4.6</version> + <regname>"AbiWord 2.6.2 (remove only)"</regname> + <version>2.6.2</version> <description>Word processor.</description> - <location>
http://www.abiword.org/downloads/abiword/2.4.6/Windows/abiword-setup-2.4.6.…
</location> + <location>
http://www.abiword.org/downloads/abiword/2.6.2/Windows/abiword-setup-2.6.2.…
</location> </application> <application name="OpenOffice"> - <regname>
OpenOffice.org
2.3</regname> - <version>2.3.0</version> + <regname>
OpenOffice.org
2.4</regname> + <version>2.4.0</version> <description>THE Open Source Office Suite.</description> - <location>
http://ftp.tu-chemnitz.de/pub/openoffice-extended/stable/2.3.0/OOo_2.3.0_Wi…
</location> + <location>
http://ftp.tu-chemnitz.de/pub/openoffice-extended/stable/2.4.0/OOo_2.4.0_Wi…
</location> </application> </category> <category name="Graphics" icon="3"> @@ -104,10 +104,10 @@ <location>
http://irfanview.tuwien.ac.at/plugins/irfanview_plugins_410_setup.exe
</location> </application> <application name="TuxPaint"> - <regname>Tux Paint 0.9.18</regname> - <version>0.9.18</version> + <regname>Tux Paint 0.9.19</regname> + <version>0.9.19</version> <description>An Open Source bitmap graphics editor geared towards young children.</description> - <location>
http://ovh.dl.sourceforge.net/sourceforge/tuxpaint/tuxpaint-0.9.18-win32-in…
</location> + <location>
http://ovh.dl.sourceforge.net/sourceforge/tuxpaint/tuxpaint-0.9.19-win32-in…
</location> </application> <application name="zeckensack's glide wrapper"> <regname>GlidewrapZbag</regname> @@ -120,10 +120,10 @@ </category> <category name="Development" icon="5"> <application name="ReactOS Build Environment"> - <regname>ReactOS Build Environment 1.0</regname> - <version>1.0</version> + <regname>ReactOS Build Environment 1.2</regname> + <version>1.2</version> <description>Allows you to build the ReactOS Source. For more instructions see ReactOS wiki.</description> - <location>
http://kent.dl.sourceforge.net/sourceforge/reactos/RosBE-1.0.exe
</location> + <location>
http://ovh.dl.sourceforge.net/sourceforge/reactos/RosBE-1.2.exe
</location> </application> <application name="MinGW"> <regname>MinGW 5.1.3</regname> @@ -132,18 +132,18 @@ <location>
http://ovh.dl.sourceforge.net/sourceforge/mingw/MinGW-5.1.3.exe
</location> </application> <application name="FreeBASIC"> - <regname>FreeBASIC 0.18.2b</regname> - <version>0.18.2b</version> + <regname>FreeBASIC 0.18.4b</regname> + <version>0.18.4b</version> <description>Open Source BASIC Compiler. The BASIC syntax is compatible to QBASIC.</description> - <location>
http://ovh.dl.sourceforge.net/sourceforge/fbc/FreeBASIC-v0.18.2b-win32.exe
</location> + <location>
http://ovh.dl.sourceforge.net/sourceforge/fbc/FreeBASIC-v0.18.4b-win32.exe
</location> </application> </category> <category name="Games & Fun" icon="6"> <application name="ScummVM"> - <regname>ScummVM 0.10.0</regname> - <version>0.10.0</version> + <regname>ScummVM 0.11.1</regname> + <version>0.11.1</version> <description>SamNMax, Day of Tentacle, etc on ReactOS</description> - <location>
http://ovh.dl.sourceforge.net/sourceforge/scummvm/scummvm-0.10.0-win32.exe
</location> + <location>
http://ovh.dl.sourceforge.net/sourceforge/scummvm/scummvm-0.11.1-win32.exe
</location> </application> <application name="Diablo 2 Shareware"> <regname>Diablo II Shareware</regname> @@ -158,10 +158,10 @@ <location>
http://www.muppetlabs.com/~breadbox/pub/software/tworld/tworld-1.3.0-win32-…
</location> </application> <application name="OpenTTD"> - <regname>OpenTTD 0.5.3</regname> - <version>0.5.3-RC2</version> + <regname>OpenTTD 0.6.0</regname> + <version>0.6.0</version> <description>Open Source clone of the "Transport Tycoon Deluxe" game engine. You need a copy of Transport Tycoon.</description> - <location>
http://ovh.dl.sourceforge.net/sourceforge/openttd/openttd-0.5.3-RC2-win32.e…
</location> + <location>
http://ovh.dl.sourceforge.net/sourceforge/openttd/openttd-0.6.0-win32.exe
</location> </application> <application name="LBreakout2"> <regname>LBreakout2 2.4.1</regname> @@ -182,11 +182,11 @@ <location>
http://ovh.dl.sourceforge.net/sourceforge/lgames/lmarbles-1.0.6-win32.exe
</location> </application> <application name="WinBoard"> - <regname>WinBoard 4.2.6</regname> - <version>4.2.6</version> + <regname>WinBoard 4.2.7b</regname> + <version>4.2.7b</version> <licence>GPL 3</licence> <description>WinBoard is a graphical chessboard for the Windows/ReactOS that can serve as a user interface for GNU Chess, Crafty, and other chess engines, for the Internet Chess Servers, and for electronic mail correspondence chess.</description> - <location>
http://ftp.gnu.org/gnu/winboard/winboard-4_2_6.exe
</location> + <location>
http://ftp.gnu.org/gnu/winboard/winboard-4_2_7b.exe
</location> </application> </category> <category name="Science" icon="11"> @@ -197,16 +197,16 @@ </category> <category name="Tools" icon="7"> <application name="7-Zip"> - <regname>7-Zip 4.56</regname> - <version>4.56</version> + <regname>7-Zip 4.57</regname> + <version>4.57</version> <description>Utility to create and open 7zip, zip, tar, rar and other archive files.</description> - <location>
http://ovh.dl.sourceforge.net/sourceforge/sevenzip/7z456.exe
</location> + <location>
http://ovh.dl.sourceforge.net/sourceforge/sevenzip/7z457.exe
</location> </application> <application name="uTorrent"> <regname>µTorrent</regname> - <version>1.7.5</version> + <version>1.7.7</version> <description>Small and fast BitTorrent Client.</description> - <location>
http://download.utorrent.com/1.7.5/utorrent.exe
</location> + <location>
http://download.utorrent.com/1.7.7/utorrent.exe
</location> </application> <application name="Audio Grabber"> <regname>Audiograbber 1.83 SE</regname> @@ -217,9 +217,9 @@ </category> <category name="Others" icon="8"> <application name="Simple Direct Media Layer (SDL) Runtime"> - <version>1.2.12</version> + <version>1.2.13</version> <description>Needed for many Open Source Games to run. You need 7-Zip or a similar Utility to extract it.</description> - <location>
http://www.libsdl.org/release/SDL-1.2.12-win32.zip
</location> + <location>
http://www.libsdl.org/release/SDL-1.2.13-win32.zip
</location> </application> <application name="DOSBox"> <version>0.72</version>
16 years, 8 months
1
0
0
0
[winesync] 32903: Autosyncing with Wine HEAD
by winesync@svn.reactos.org
Author: winesync Date: Thu Apr 10 06:28:55 2008 New Revision: 32903 URL:
http://svn.reactos.org/svn/reactos?rev=32903&view=rev
Log: Autosyncing with Wine HEAD Modified: trunk/reactos/dll/win32/version/info.c trunk/reactos/dll/win32/version/install.c trunk/reactos/dll/win32/version/version.rbuild trunk/reactos/dll/win32/version/version_ros.diff Modified: trunk/reactos/dll/win32/version/info.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/version/info.c?r…
============================================================================== --- trunk/reactos/dll/win32/version/info.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/version/info.c [iso-8859-1] Thu Apr 10 06:28:55 2008 @@ -253,6 +253,7 @@ if(!hModule) { WARN("Could not load %s\n", debugstr_w(filename)); + return 0; } hRsrc = FindResourceW(hModule, @@ -382,7 +383,10 @@ if(hModule < 32) { WARN("Could not load %s\n", debugstr_a(filename)); - return 0; + if (hModule == ERROR_BAD_FORMAT) + return 0xFFFFFFFF; + else + return 0x0; } hRsrc = FindResource16(hModule, MAKEINTRESOURCEA(VS_VERSION_INFO), Modified: trunk/reactos/dll/win32/version/install.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/version/install.…
============================================================================== --- trunk/reactos/dll/win32/version/install.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/version/install.c [iso-8859-1] Thu Apr 10 06:28:55 2008 @@ -367,7 +367,8 @@ LPCSTR pdest; char destfn[260],tmpfn[260],srcfn[260]; HFILE hfsrc,hfdst; - DWORD attr,ret,xret,tmplast; + DWORD attr,xret,tmplast; + LONG ret; LPBYTE buf1,buf2; OFSTRUCT ofs; @@ -419,30 +420,31 @@ } ret = LZCopy(hfsrc,hfdst); _lclose(hfdst); - if (((LONG)ret) < 0) { + if (ret < 0) { /* translate LZ errors into VIF_xxx */ switch (ret) { case LZERROR_BADINHANDLE: case LZERROR_READ: case LZERROR_BADVALUE: case LZERROR_UNKNOWNALG: - ret = VIF_CANNOTREADSRC; + xret = VIF_CANNOTREADSRC; break; case LZERROR_BADOUTHANDLE: case LZERROR_WRITE: - ret = VIF_OUTOFSPACE; + xret = VIF_OUTOFSPACE; break; case LZERROR_GLOBALLOC: case LZERROR_GLOBLOCK: - ret = VIF_OUTOFMEMORY; + xret = VIF_OUTOFMEMORY; break; default: /* unknown error, should not happen */ - ret = 0; + FIXME("Unknown LZCopy error %d, ignoring.\n", ret); + xret = 0; break; } - if (ret) { + if (xret) { LZClose(hfsrc); - return ret; + return xret; } } } Modified: trunk/reactos/dll/win32/version/version.rbuild URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/version/version.…
============================================================================== --- trunk/reactos/dll/win32/version/version.rbuild [iso-8859-1] (original) +++ trunk/reactos/dll/win32/version/version.rbuild [iso-8859-1] Thu Apr 10 06:28:55 2008 @@ -1,19 +1,21 @@ <?xml version="1.0"?> <!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd"> -<module name="version" type="win32dll" entrypoint="0" baseaddress="${BASEADDRESS_VERSION}" installbase="system32" installname="version.dll" allowwarnings="true"> +<group> +<module name="version" type="win32dll" baseaddress="${BASEADDRESS_VERSION}" installbase="system32" installname="version.dll" allowwarnings="true" entrypoint="0"> <importlibrary definition="version.spec.def" /> <include base="version">.</include> <include base="ReactOS">include/reactos/wine</include> <define name="__WINESRC__" /> <define name="WINVER">0x600</define> <define name="_WIN32_WINNT">0x600</define> - <library>wine</library> - <library>lz32</library> - <library>kernel32</library> - <library>ntdll</library> <file>info.c</file> <file>install.c</file> <file>resource.c</file> <file>version.rc</file> <file>version.spec</file> + <library>wine</library> + <library>lz32</library> + <library>kernel32</library> + <library>ntdll</library> </module> +</group> Modified: trunk/reactos/dll/win32/version/version_ros.diff URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/version/version_…
============================================================================== --- trunk/reactos/dll/win32/version/version_ros.diff [iso-8859-1] (original) +++ trunk/reactos/dll/win32/version/version_ros.diff [iso-8859-1] Thu Apr 10 06:28:55 2008 @@ -10,7 +10,7 @@ #include "wine/winuser16.h" #include "wine/unicode.h" #include "winerror.h" -@@ -302,6 +303,7 @@ +@@ -303,6 +304,7 @@ return len; } @@ -18,7 +18,7 @@ /*********************************************************************** * VERSION_GetFileVersionInfo_16 [internal] * -@@ -435,6 +438,7 @@ +@@ -439,6 +442,7 @@ return len; } @@ -26,7 +26,7 @@ /*********************************************************************** * GetFileVersionInfoSizeW [VERSION.@] -@@ -468,6 +471,10 @@ +@@ -472,6 +475,10 @@ if (!len) { @@ -37,7 +37,7 @@ LPSTR filenameA; len = WideCharToMultiByte( CP_ACP, 0, filename, -1, NULL, 0, NULL, NULL ); -@@ -499,6 +506,7 @@ +@@ -503,6 +510,7 @@ * doesn't seem to be a problem (len is bigger than info->wLength). */ len = (len - sizeof(VS_FIXEDFILEINFO)) * 4; @@ -45,7 +45,7 @@ } else { -@@ -563,6 +571,10 @@ +@@ -567,6 +575,10 @@ if (!len) { @@ -56,7 +56,7 @@ LPSTR filenameA; len = WideCharToMultiByte( CP_ACP, 0, filename, -1, NULL, 0, NULL, NULL ); -@@ -578,6 +590,7 @@ +@@ -582,6 +594,7 @@ return FALSE; } /* We have a 16bit resource. */
16 years, 8 months
1
0
0
0
[dreimer] 32902: Bug 3165 Korean translation of devmgmt & eventvwr by Seungju Kim (admin@manateeshome.com) Bug 3172 Updated spanish translation for Shell32.dll by Javier Remacha (remialdo@gmail.com) Bug 3173 Bulgarian language update for ReactOS by (sstpr@narod.ru) Bug 3174 Bulgarian language update of RosApps by (sstpr@narod.ru) Bug 3175 Czech translation: usetup by (radekliska@gmail.com)
by dreimer@svn.reactos.org
Author: dreimer Date: Thu Apr 10 05:27:56 2008 New Revision: 32902 URL:
http://svn.reactos.org/svn/reactos?rev=32902&view=rev
Log: Bug 3165 Korean translation of devmgmt & eventvwr by Seungju Kim (admin(a)manateeshome.com) Bug 3172 Updated spanish translation for Shell32.dll by Javier Remacha (remialdo(a)gmail.com) Bug 3173 Bulgarian language update for ReactOS by (sstpr(a)narod.ru) Bug 3174 Bulgarian language update of RosApps by (sstpr(a)narod.ru) Bug 3175 Czech translation: usetup by (radekliska(a)gmail.com) Added: trunk/reactos/base/applications/mscutils/devmgmt/lang/ko-KO.rc (with props) trunk/reactos/base/applications/mscutils/eventvwr/lang/ko-KO.rc (with props) trunk/reactos/base/applications/wordpad/Si.rc (with props) Modified: trunk/reactos/base/applications/games/solitaire/lang/bg-BG.rc trunk/reactos/base/applications/games/winemine/lang/bg-BG.rc trunk/reactos/base/applications/mscutils/devmgmt/rsrc.rc trunk/reactos/base/applications/mscutils/eventvwr/rsrc.rc trunk/reactos/base/applications/mstsc/connectdialog.c trunk/reactos/base/applications/mstsc/lang/bg-BG.rc trunk/reactos/base/applications/mstsc/lang/es-ES.rc trunk/reactos/base/applications/notepad/lang/bg-BG.rc trunk/reactos/base/applications/taskmgr/lang/es-ES.rc trunk/reactos/base/applications/wordpad/De.rc trunk/reactos/base/applications/wordpad/Ru.rc trunk/reactos/base/applications/wordpad/rsrc.rc trunk/reactos/base/applications/wordpad/wordpad.c trunk/reactos/base/applications/wordpad/wordpad.ico trunk/reactos/base/setup/usetup/lang/bg-BG.h trunk/reactos/base/setup/usetup/lang/cs-CZ.h trunk/reactos/base/setup/usetup/mui.c trunk/reactos/dll/cpl/desk/lang/bg-BG.rc trunk/reactos/dll/cpl/mmsys/lang/bg-BG.rc trunk/reactos/dll/cpl/ncpa/lang/bg-BG.rc trunk/reactos/dll/win32/shell32/lang/bg-BG.rc trunk/reactos/dll/win32/shell32/lang/es-ES.rc trunk/reactos/dll/win32/syssetup/lang/bg-BG.rc [This mail would be too long, it was shortened to contain the URLs only.] Modified: trunk/reactos/base/applications/games/solitaire/lang/bg-BG.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/games/so…
Modified: trunk/reactos/base/applications/games/winemine/lang/bg-BG.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/games/wi…
Added: trunk/reactos/base/applications/mscutils/devmgmt/lang/ko-KO.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils…
Modified: trunk/reactos/base/applications/mscutils/devmgmt/rsrc.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils…
Added: trunk/reactos/base/applications/mscutils/eventvwr/lang/ko-KO.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils…
Modified: trunk/reactos/base/applications/mscutils/eventvwr/rsrc.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils…
Modified: trunk/reactos/base/applications/mstsc/connectdialog.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mstsc/co…
Modified: trunk/reactos/base/applications/mstsc/lang/bg-BG.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mstsc/la…
Modified: trunk/reactos/base/applications/mstsc/lang/es-ES.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mstsc/la…
Modified: trunk/reactos/base/applications/notepad/lang/bg-BG.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/notepad/…
Modified: trunk/reactos/base/applications/taskmgr/lang/es-ES.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/taskmgr/…
Modified: trunk/reactos/base/applications/wordpad/De.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/wordpad/…
Modified: trunk/reactos/base/applications/wordpad/Ru.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/wordpad/…
Added: trunk/reactos/base/applications/wordpad/Si.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/wordpad/…
Modified: trunk/reactos/base/applications/wordpad/rsrc.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/wordpad/…
Modified: trunk/reactos/base/applications/wordpad/wordpad.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/wordpad/…
Modified: trunk/reactos/base/applications/wordpad/wordpad.ico URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/wordpad/…
Modified: trunk/reactos/base/setup/usetup/lang/bg-BG.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/setup/usetup/lang/bg-…
Modified: trunk/reactos/base/setup/usetup/lang/cs-CZ.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/setup/usetup/lang/cs-…
Modified: trunk/reactos/base/setup/usetup/mui.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/setup/usetup/mui.c?re…
Modified: trunk/reactos/dll/cpl/desk/lang/bg-BG.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/desk/lang/bg-BG.rc…
Modified: trunk/reactos/dll/cpl/mmsys/lang/bg-BG.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/mmsys/lang/bg-BG.r…
Modified: trunk/reactos/dll/cpl/ncpa/lang/bg-BG.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/ncpa/lang/bg-BG.rc…
Modified: trunk/reactos/dll/win32/shell32/lang/bg-BG.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/bg-…
Modified: trunk/reactos/dll/win32/shell32/lang/es-ES.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/es-…
Modified: trunk/reactos/dll/win32/syssetup/lang/bg-BG.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/syssetup/lang/bg…
16 years, 8 months
1
0
0
0
[dreimer] 32901: Bug 3165 Korean translation of devmgmt & eventvwr by Seungju Kim (admin@manateeshome.com) Bug 3172 Updated spanish translation for Shell32.dll by Javier Remacha (remialdo@gmail.com) Bug 3173 Bulgarian language update for ReactOS by (sstpr@narod.ru) Bug 3174 Bulgarian language update of RosApps by (sstpr@narod.ru) Bug 3175 Czech translation: usetup by (radekliska@gmail.com)
by dreimer@svn.reactos.org
Author: dreimer Date: Thu Apr 10 05:27:09 2008 New Revision: 32901 URL:
http://svn.reactos.org/svn/reactos?rev=32901&view=rev
Log: Bug 3165 Korean translation of devmgmt & eventvwr by Seungju Kim (admin(a)manateeshome.com) Bug 3172 Updated spanish translation for Shell32.dll by Javier Remacha (remialdo(a)gmail.com) Bug 3173 Bulgarian language update for ReactOS by (sstpr(a)narod.ru) Bug 3174 Bulgarian language update of RosApps by (sstpr(a)narod.ru) Bug 3175 Czech translation: usetup by (radekliska(a)gmail.com) Added: trunk/rosapps/imagesoft/lang/bg-BG.rc (with props) Modified: trunk/rosapps/devutils/vgafontedit/lang/bg-BG.rc trunk/rosapps/imagesoft/rsrc.rc Modified: trunk/rosapps/devutils/vgafontedit/lang/bg-BG.rc URL:
http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/vgafontedit/lang/…
============================================================================== --- trunk/rosapps/devutils/vgafontedit/lang/bg-BG.rc [iso-8859-1] (original) +++ trunk/rosapps/devutils/vgafontedit/lang/bg-BG.rc [iso-8859-1] Thu Apr 10 05:27:09 2008 @@ -47,12 +47,12 @@ MENUITEM "Èçõîä êàòî\tAlt+F4", ID_FILE_EXIT END - POPUP "&Edit" + POPUP "&Îáðàáîòêà" BEGIN - MENUITEM "Copy\tCtrl+C", ID_EDIT_COPY - MENUITEM "Paste\tCtrl+V", ID_EDIT_PASTE + MENUITEM "&Çàïîìíÿíå\tCtrl+C", ID_EDIT_COPY + MENUITEM "&Ïîñòàâÿíå\tCtrl+V", ID_EDIT_PASTE MENUITEM SEPARATOR - MENUITEM "Edit Glyph...", ID_EDIT_GLYPH + MENUITEM "Îáðàáîòêà íà çíàê...", ID_EDIT_GLYPH END POPUP "&Ïðîçîðåö" @@ -89,6 +89,6 @@ IDS_TOOLTIP_OPEN, "Îòâàðÿíå" IDS_TOOLTIP_SAVE, "Çàïèñ" IDS_TOOLTIP_EDIT_GLYPH, "Îáðàáîòêà íà çíàê" - IDS_TOOLTIP_COPY, "Copy" - IDS_TOOLTIP_PASTE, "Paste" + IDS_TOOLTIP_COPY, "Çàïîìíÿíå" + IDS_TOOLTIP_PASTE, "Ïîñòàâÿíå" END Added: trunk/rosapps/imagesoft/lang/bg-BG.rc URL:
http://svn.reactos.org/svn/reactos/trunk/rosapps/imagesoft/lang/bg-BG.rc?re…
============================================================================== --- trunk/rosapps/imagesoft/lang/bg-BG.rc (added) +++ trunk/rosapps/imagesoft/lang/bg-BG.rc [iso-8859-1] Thu Apr 10 05:27:09 2008 @@ -1,0 +1,239 @@ +LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT + +STRINGTABLE DISCARDABLE +BEGIN + IDS_APPNAME "ImageSoft" + IDS_VERSION "â0,1" +END + +IDR_MAINMENU MENU + +BEGIN + POPUP "&Ôàéë" + BEGIN + MENUITEM "&Íîâ...", ID_NEW + MENUITEM "&Îòâàðÿíå...", ID_OPEN + MENUITEM SEPARATOR + MENUITEM "&Çàòâàðÿíå\tCtrl+F4", ID_CLOSE, GRAYED + MENUITEM "Çàòâàðÿíå íà âñè÷êè", ID_CLOSEALL,GRAYED + MENUITEM SEPARATOR + MENUITEM "&Çàïèñ", ID_SAVE, GRAYED + MENUITEM "Çàïèñ &êàòî...", ID_SAVEAS, GRAYED + MENUITEM SEPARATOR + MENUITEM "&Ïå÷àòåí èçãëåä", ID_PRINTPRE,GRAYED + MENUITEM "&Ðàçïå÷àòâàíå...", ID_PRINT, GRAYED + MENUITEM SEPARATOR + MENUITEM "&Ñâîéñòâà", ID_PROP, GRAYED + MENUITEM SEPARATOR + MENUITEM "Èç&õîä\tAlt+F4", ID_EXIT + END + + POPUP "&Îáðàáîòêà" + BEGIN + MENUITEM "&Îòìÿíà", ID_UNDO, GRAYED + MENUITEM "&Âðúùàíå", ID_REDO, GRAYED + MENUITEM SEPARATOR + MENUITEM "Îò&ðÿçâàíå", ID_CUT, GRAYED + MENUITEM "Çà&ïîìíÿíå", ID_COPY, GRAYED + MENUITEM "&Ïîñòàâÿíå", ID_PASTE, GRAYED + MENUITEM "Ïîñòàâÿíå êàòî íîâî èç&îáðàæåíèå", ID_PASTENEWIMAGE, GRAYED + MENUITEM SEPARATOR + MENUITEM "Èçáîð íà âñè&÷êè", ID_SELALL, GRAYED + END + + POPUP "Èç&ãëåä" + BEGIN + MENUITEM "&Ñðåäñòâà", ID_TOOLS + MENUITEM "&Öâåòîâå", ID_COLOR + MENUITEM "&Äíåâíèê", ID_HISTORY + MENUITEM "Ëåíòà ñúñòîÿíèå", ID_STATUSBAR + END + + POPUP "&Íàñòðîéêà" + BEGIN + MENUITEM "ßðêîñò...", ID_BRIGHTNESS + MENUITEM "Êîíòðàñò...", ID_CONTRAST + MENUITEM "Îòòåíúê/Íàñèùàíå", -1, GRAYED + POPUP "Öâÿò" + BEGIN + MENUITEM "×åðíî- áÿëî" ID_BLACKANDWHITE + MENUITEM "Îáðúùàíå íà öâåòîâåòå" ID_INVERTCOLORS + END + MENUITEM SEPARATOR + MENUITEM "Ðàçìèâàíå", ID_BLUR + MENUITEM "Èçîñòðÿíå", ID_SHARPEN + MENUITEM "Çàîáëÿíå íà ðúáîâåòå", -1, GRAYED + MENUITEM "Äîáàâÿíå íà ñÿíêà", -1, GRAYED + MENUITEM SEPARATOR + MENUITEM "Ðàçìåð íà èçîáðàæåíèåòî", -1, GRAYED + MENUITEM "Îáðúùàíå", -1, GRAYED + MENUITEM "Îãëåäàëî", -1, GRAYED + MENUITEM "Çàâúðòàíå", -1, GRAYED + + END + + POPUP "&Öâåòîâå" + BEGIN + MENUITEM "&Îáðàáîòêà íà öâåòîâåòå...", ID_EDITCOLOURS + END + POPUP "&Ïðîçîðåö" + BEGIN + MENUITEM "Íà&äèïëÿíå", ID_WINDOW_CASCADE + MENUITEM "Âîäîðàâíî íàñòåëâàíå", ID_WINDOW_TILE_HORZ + MENUITEM "&Îòâåñíî íàñòåëâàíå", ID_WINDOW_TILE_VERT + MENUITEM "Ïîä&ðåæäàíå íà çíà÷åòàòà", ID_WINDOW_ARRANGE + MENUITEM SEPARATOR + MENUITEM "&Ñëåäâàù\tCtrl+F6", ID_WINDOW_NEXT + END + POPUP "Ïîìî&ù" + BEGIN + MENUITEM "&Çà...", ID_ABOUT + END +END + +IDR_POPUP MENU +BEGIN + POPUP "popup" + BEGIN + + MENUITEM SEPARATOR + + END +END + + +IDD_BRIGHTNESS DIALOGEX 6, 5, 220, 120 +CAPTION "ßðêîñò" +FONT 8,"MS Shell Dlg", 0, 0 +STYLE DS_SHELLFONT | WS_BORDER | WS_DLGFRAME | WS_SYSMENU | DS_MODALFRAME +BEGIN + LTEXT "", IDC_PICPREVIEW, 0, 1, 132, 96, SS_OWNERDRAW | SS_SUNKEN + LTEXT "Öâåòîâà ôîðìà:", IDC_STATIC, 135, 5, 60, 9 + GROUPBOX "", IDC_BRI_GROUP, 138 ,30, 77, 48 + CONTROL "Ïúëíîöâåòíî (×ÇÑ)", IDC_BRI_FULL, "Button", BS_AUTORADIOBUTTON, 138, 18, 80, 9 + CONTROL "×åðâåíî", IDC_BRI_RED, "Button", BS_AUTORADIOBUTTON, 142, 38, 55, 9 + CONTROL "Çåëåíî", IDC_BRI_GREEN, "Button", BS_AUTORADIOBUTTON, 142, 51, 55, 9 + CONTROL "Ñèíüî", IDC_BRI_BLUE, "Button", BS_AUTORADIOBUTTON, 142, 64, 55, 9 + EDITTEXT IDC_BRI_EDIT, 98, 103, 28, 13 + CONTROL "", IDC_BRI_TRACKBAR, "msctls_trackbar32", TBS_BOTH | TBS_NOTICKS | WS_TABSTOP, 2, 105, 90, 11 + PUSHBUTTON "Äîáðå", IDOK, 142, 88, 48, 13 + PUSHBUTTON "Îòêàç", IDCANCEL, 142, 105, 48, 13 +END + +IDD_ABOUTBOX DIALOGEX 22,16,210,182 +CAPTION "Çà ImageSoft" +FONT 8,"MS Shell Dlg",0,0 +STYLE DS_SHELLFONT | WS_BORDER | WS_DLGFRAME | WS_SYSMENU | DS_MODALFRAME +//EXSTYLE WS_EX_LAYERED +BEGIN + LTEXT "ImageSoft v0.1\nCopyright (C) 2006\nThomas Weidenmueller (w3seek(a)reactos.org)\nGed Murphy (gedmurphy(a)gmail.com)", IDC_STATIC, 48, 7, 150, 36 + PUSHBUTTON "Çàòâàðÿíå", IDOK, 75, 162, 44, 15 + ICON IDI_IMAGESOFTICON, IDC_STATIC, 10, 10, 7, 30 + EDITTEXT IDC_LICENSE_EDIT, 8, 44, 194, 107, WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | ES_READONLY | ES_MULTILINE +END + + +IDD_IMAGE_PROP DIALOGEX 6, 5, 170, 163 +CAPTION "Ñâîéñòâà íà èçîáðàæåíèåòî" +FONT 8,"MS Shell Dlg",0,0 +STYLE DS_SHELLFONT | WS_BORDER | WS_DLGFRAME | WS_SYSMENU | DS_MODALFRAME +BEGIN + LTEXT "Èìå:", IDC_STATIC, 12, 5, 38, 9 + EDITTEXT IDC_IMAGE_NAME_EDIT, 68, 3, 94, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + GROUPBOX "Ñâîéñòâà íà ïëàòíîòî", IDC_STATIC, 4, 22, 162, 98 + LTEXT "Âèä:", IDC_STATIC, 12, 36, 42, 9 + CONTROL "", IDC_IMAGETYPE, "ComboBox", WS_CHILD | WS_VISIBLE | WS_TABSTOP | CBS_DROPDOWNLIST, 58, 35, 88, 54 + LTEXT "Øèðèíà:", IDC_STATIC, 12, 51, 42, 9 + EDITTEXT IDC_WIDTH_EDIT, 68, 49, 32, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_NUMBER + LTEXT "", IDC_WIDTH_STAT, 94, 51, 40, 9 + LTEXT "Âèñî÷èíà:", IDC_STATIC, 12, 68, 42, 9 + EDITTEXT IDC_HEIGHT_EDIT, 68, 66, 32, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_NUMBER + LTEXT "", IDC_HEIGHT_STAT, 94, 68, 40, 9 + LTEXT "Ðàçäåëèòåëíà ñïîñîáíîñò:", IDC_STATIC, 12, 82, 46, 18 + EDITTEXT IDC_RES_EDIT, 68, 83, 32, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_NUMBER + LTEXT "", IDC_RES_STAT, 94, 84, 40, 9 + LTEXT "Åäèíèöè:", IDC_STATIC, 12, 99, 42, 9 + CONTROL "", IDC_UNIT, "ComboBox", WS_CHILD | WS_VISIBLE | WS_TABSTOP | CBS_DROPDOWNLIST, 58, 99, 54, 50 + LTEXT "Ðàçìåðè:", IDC_STATIC, 12, 125, 42, 9 + LTEXT "", IDC_IMAGE_SIZE, 68, 125, 54, 9 + PUSHBUTTON "Äîáðå", IDOK, 50, 144, 48, 13 + PUSHBUTTON "Îòêàç", IDCANCEL, 102, 144, 48, 13 +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_LICENSE "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\r\n\r\nThis program 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 General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA." + IDS_READY " Ãîòîâî." + IDS_TOOLBAR_STANDARD "Ñòàíäàðòíî" + IDS_TOOLBAR_TEST "Ïðîáà" + IDS_IMAGE_NAME "Èçîáðàæåíèå %1!u!" + IDS_FLT_TOOLS "Ñðåäñòâà" + IDS_FLT_COLORS "Öâåòîâå" + IDS_FLT_HISTORY "Èñòîðèÿ (äíåâíèê)" +END + +/* imageprop.c */ +STRINGTABLE DISCARDABLE +BEGIN + IDS_IMAGE_MONOCHROME "Åäíîöâåòíî (1 ðàçðÿä)" + IDS_IMAGE_GREYSCALE "Ñèâî- áÿëî (8 ðàçðÿäà)" + IDS_IMAGE_PALETTE "Ïàëèòðà îò 256 öâÿòà" + IDS_IMAGE_TRUECOLOR "Èñòèíñêà öâåòíîñò (24 ðàçðÿäà)" + + IDS_UNIT_PIXELS "Òî÷êè" + IDS_UNIT_CM "ñì" + IDS_UNIT_INCHES "Öîëà" + IDS_UNIT_DOTSCM "Òî÷êè/ ñì" + IDS_UNIT_DPI "Ò/Ö" + IDS_UNIT_KB "%d ÊÁ" + IDS_UNIT_MB "%d ÌÁ" +END + +/* Tooltips */ +STRINGTABLE DISCARDABLE +BEGIN + IDS_TOOLTIP_NEW "Íîâ" + IDS_TOOLTIP_OPEN "Îòâàðÿíå" + IDS_TOOLTIP_SAVE "Çàïèñ" + IDS_TOOLTIP_PRINTPRE "Ïå÷àòåí èçãëåä" + IDS_TOOLTIP_PRINT "Ðàçïå÷àòâàíå" + IDS_TOOLTIP_CUT "Îòðÿçâàíå" + IDS_TOOLTIP_COPY "Çàïîìíÿíå" + IDS_TOOLTIP_PASTE "Ïîñòàâÿíå" + IDS_TOOLTIP_UNDO "Îòìÿíà" + IDS_TOOLTIP_REDO "Âðúùàíå" +END + + +/* Hints */ +STRINGTABLE DISCARDABLE +BEGIN + IDS_HINT_BLANK " " + IDS_HINT_NEW " Ñúçäàâà íîâ äîêóìåíò." + IDS_HINT_OPEN " Îòâàðÿ ñúùåñòâóâàù äîêóìåíò." + IDS_HINT_CLOSE " Çàòâàðÿ òîçè ïðîçîðåö." + IDS_HINT_CLOSEALL " Çàòâàðÿ âñè÷êè ïðîçîðöè." + IDS_HINT_SAVE " Çàòâàðÿ äåéíèÿ äîêóìåíò." + IDS_HINT_SAVEAS " Çàòâàðÿ äåéíèÿ äîêóìåíò ïîä íîâî èìå." + IDS_HINT_PRINTPRE " Ïîêàçâà ïå÷àòåí èçãëåä íà äîêóìåíòà." + IDS_HINT_PRINT " Ðàçïå÷àòâà äåéíèÿ äîêóìåíò." + IDS_HINT_PROP " Ïîêàçâà ñâîéñòâàòà íà äåéíîòî èçîáðàæåíèå." + IDS_HINT_EXIT " Èçëèçà îò ïðèëîæåíèåòî" + + IDS_HINT_TOOLS " Ïîêàçâà èëè ñêðèâà ïëàâàùèÿ ïðîçîðåö íà ñðåäñòâàòà." + IDS_HINT_COLORS " Ïîêàçâà ëè ñêðèâà ïëàâàùèÿ ïðîçîðåö íà öâåòîâåòå." + IDS_HINT_HISTORY " Ïîêàçâà èëè ñêðèâà ïëàâàùèÿ ïðîçîðåö íà èñòîðèÿòà." + IDS_HINT_STATUS " Ïîêàçâà èëè ñêðèâà ëåíòàòà íà ñúñòîÿíèåòî." + + IDS_HINT_CASCADE " Ïîäðåæäà ïðîçîðöèòå òàêà, ÷å äà ñå çàñòúïâàò." + IDS_HINT_TILE_HORZ " Ïîäðåæäà ïðîçîðöèòå êàòî íåçàñòúïâàùè ñå ïëî÷êè." + IDS_HINT_TILE_VERT " Ïîäðåæäà ïðîçîðöèòå êàòî íåçàñòúïâàùè ñå ïëî÷êè." + IDS_HINT_ARRANGE " Ïîäðåæäà çíà÷åòàòà íà äúíîòî íà ïðîçîðåöà." + IDS_HINT_NEXT " Çàäåéñòâà ñëåäâàùèÿ ïðîçîðåö." + + IDS_HINT_SYS_RESTORE " Âúçñòàíîâÿâà ïðîçîðåöà äî îáè÷àéíèòå ìó ðàçìåðè." + IDS_HINT_SYS_MOVE " Ìåñòè ïðîçîðåöà." + IDS_HINT_SYS_SIZE " Ïðåîðàçìåðÿâà ïðîçîðåöà." + IDS_HINT_SYS_MINIMIZE " Ñìàëÿâà ïðîçîðåöà â çíà÷å." + IDS_HINT_SYS_MAXIMIZE " Ðàçãðúùà ïðîçîðåöà íà öÿë åêðàí." +END Propchange: trunk/rosapps/imagesoft/lang/bg-BG.rc ------------------------------------------------------------------------------ svn:eol-style = native Modified: trunk/rosapps/imagesoft/rsrc.rc URL:
http://svn.reactos.org/svn/reactos/trunk/rosapps/imagesoft/rsrc.rc?rev=3290…
============================================================================== --- trunk/rosapps/imagesoft/rsrc.rc [iso-8859-1] (original) +++ trunk/rosapps/imagesoft/rsrc.rc [iso-8859-1] Thu Apr 10 05:27:09 2008 @@ -6,6 +6,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL /* include localised resources */ +#include "lang/bg-BG.rc" #include "lang/en-GB.rc" #include "lang/en-US.rc" #include "lang/es-ES.rc"
16 years, 8 months
1
0
0
0
[cwittich] 32900: some more work on xen support - DomU will now be started but debug output isn't handled yet
by cwittich@svn.reactos.org
Author: cwittich Date: Wed Apr 9 14:06:26 2008 New Revision: 32900 URL:
http://svn.reactos.org/svn/reactos?rev=32900&view=rev
Log: some more work on xen support - DomU will now be started but debug output isn't handled yet Modified: trunk/reactos/tools/sysreg/rosboot_test.cpp Modified: trunk/reactos/tools/sysreg/rosboot_test.cpp URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/sysreg/rosboot_test.…
============================================================================== --- trunk/reactos/tools/sysreg/rosboot_test.cpp [iso-8859-1] (original) +++ trunk/reactos/tools/sysreg/rosboot_test.cpp [iso-8859-1] Wed Apr 9 14:06:26 2008 @@ -194,7 +194,7 @@ } remove(image.c_str ()); - const char * options[] = {NULL, + const char * options[] = {NULL, "create", "-f", #ifdef __LINUX__ @@ -664,23 +664,31 @@ } //--------------------------------------------------------------------------------------- - bool RosBootTest::configureXen() - { + bool RosBootTest::configureXen() + { if (!xenGetCaps()) { return false; } - cerr << "Xen isn't supported yet." << endl; + if (!isFileExisting(m_XenConfig)) + { + cerr << "Xen configuration file missing" << endl; + return false; + } - return false; - } -//--------------------------------------------------------------------------------------- - bool RosBootTest::configureVmWare() - { + m_BootCmd = m_EmuPath + "/xm create " + m_XenConfig; + if (!executeBootCmd()) + return false; + + return true; + } +//--------------------------------------------------------------------------------------- + bool RosBootTest::configureVmWare() + { cerr << "VmWare is currently not yet supported" << endl; return false; - } + } //--------------------------------------------------------------------------------------- bool RosBootTest::readConfigurationValues(ConfigParser &conf_parser) { @@ -691,7 +699,7 @@ return false; } - if (ROS_EMU_TYPE == "xen") + if (m_EmuType == "xen") { if (!conf_parser.getStringValue(RosBootTest::XEN_CONFIG_FILE, m_XenConfig)) {
16 years, 8 months
1
0
0
0
[dchapyshev] 32899: Implemented (from Wine): BeginUpdateResourceA, BeginUpdateResourceW, UpdateResourceA, UpdateResourceW, EnumResourceLanguagesW, EnumResourceLanguagesA, EndUpdateResourceA, EndUpdateResourceW, EnumResourceTypesW, EnumResourceTypesA Small fixes: GetSystemInfo, IsProcessorFeaturePresent, LockResource
by dchapyshev@svn.reactos.org
Author: dchapyshev Date: Wed Apr 9 14:05:08 2008 New Revision: 32899 URL:
http://svn.reactos.org/svn/reactos?rev=32899&view=rev
Log: Implemented (from Wine): BeginUpdateResourceA, BeginUpdateResourceW, UpdateResourceA, UpdateResourceW, EnumResourceLanguagesW, EnumResourceLanguagesA, EndUpdateResourceA, EndUpdateResourceW, EnumResourceTypesW, EnumResourceTypesA Small fixes: GetSystemInfo, IsProcessorFeaturePresent, LockResource Modified: trunk/reactos/dll/win32/kernel32/misc/res.c trunk/reactos/dll/win32/kernel32/misc/sysinfo.c Modified: trunk/reactos/dll/win32/kernel32/misc/res.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/misc/re…
============================================================================== --- trunk/reactos/dll/win32/kernel32/misc/res.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/kernel32/misc/res.c [iso-8859-1] Wed Apr 9 14:05:08 2008 @@ -9,6 +9,7 @@ * Ge van Geldorp * Gunnar Dalsnes * David Welch + * Dmitry Chapyshev */ #include <k32.h> @@ -19,6 +20,1073 @@ #define STUB \ SetLastError(ERROR_CALL_NOT_IMPLEMENTED); \ DPRINT1("%s() is UNIMPLEMENTED!\n", __FUNCTION__) + +/* Strustures and functions from include/wine/list.h */ +struct list +{ + struct list *next; + struct list *prev; +}; + +static inline void list_init( struct list *list ) +{ + list->next = list->prev = list; +} + +/* add an element before the specified one */ +static inline void list_add_before( struct list *elem, struct list *to_add ) +{ + to_add->next = elem; + to_add->prev = elem->prev; + elem->prev->next = to_add; + elem->prev = to_add; +} + +/* add element at the tail of the list */ +static inline void list_add_tail( struct list *list, struct list *elem ) +{ + list_add_before( list, elem ); +} + +/* remove an element from its list */ +static inline void list_remove( struct list *elem ) +{ + elem->next->prev = elem->prev; + elem->prev->next = elem->next; +} + +/* get the next element */ +static inline struct list *list_next( const struct list *list, const struct list *elem ) +{ + struct list *ret = elem->next; + if (elem->next == list) ret = NULL; + return ret; +} + +/* get the first element */ +static inline struct list *list_head( const struct list *list ) +{ + return list_next( list, list ); +} + + +/* + * Data structure for updating resources. + * Type/Name/Language is a keyset for accessing resource data. + * + * QUEUEDUPDATES (root) -> + * list of struct resource_dir_entry (Type) -> + * list of struct resource_dir_entry (Name) -> + * list of struct resource_data Language + Data + */ + +typedef struct +{ + LPWSTR pFileName; + BOOL bDeleteExistingResources; + struct list root; +} QUEUEDUPDATES; + +/* this structure is the leaf */ +struct resource_data { + struct list entry; + LANGID lang; + DWORD codepage; + DWORD cbData; + void *lpData; +}; + +struct resource_size_info { + DWORD types_ofs; + DWORD names_ofs; + DWORD langs_ofs; + DWORD data_entry_ofs; + DWORD strings_ofs; + DWORD data_ofs; + DWORD total_size; +}; + +/* this structure is shared for types and names */ +struct resource_dir_entry { + struct list entry; + LPWSTR id; + struct list children; +}; + +struct mapping_info { + HANDLE file; + HANDLE mapping; + void *base; + DWORD size; + BOOL read_write; +}; + +static int resource_strcmp( LPCWSTR a, LPCWSTR b ) +{ + if ( a == b ) + return 0; + if (HIWORD( a ) && HIWORD( b ) ) + return lstrcmpW( a, b ); + /* strings come before ids */ + if (HIWORD( a ) && !HIWORD( b )) + return -1; + if (HIWORD( b ) && !HIWORD( a )) + return 1; + return ( a < b ) ? -1 : 1; +} + + +static LPWSTR res_strdupW( LPCWSTR str ) +{ + LPWSTR ret; + UINT len; + + if (HIWORD(str) == 0) + return (LPWSTR) (UINT_PTR) LOWORD(str); + len = (lstrlenW( str ) + 1) * sizeof (WCHAR); + ret = HeapAlloc( GetProcessHeap(), 0, len ); + memcpy( ret, str, len ); + return ret; +} + + +static IMAGE_NT_HEADERS *get_nt_header( void *base, DWORD mapping_size ) +{ + IMAGE_NT_HEADERS *nt; + IMAGE_DOS_HEADER *dos; + + if (mapping_size<sizeof (*dos)) + return NULL; + + dos = base; + if (dos->e_magic != IMAGE_DOS_SIGNATURE) + return NULL; + + if ((dos->e_lfanew + sizeof (*nt)) > mapping_size) + return NULL; + + nt = (void*) ((BYTE*)base + dos->e_lfanew); + + if (nt->Signature != IMAGE_NT_SIGNATURE) + return NULL; + + return nt; +} + +static IMAGE_SECTION_HEADER *get_section_header( void *base, DWORD mapping_size, DWORD *num_sections ) +{ + IMAGE_NT_HEADERS *nt; + IMAGE_SECTION_HEADER *sec; + DWORD section_ofs; + + nt = get_nt_header( base, mapping_size ); + if (!nt) + return NULL; + + /* check that we don't go over the end of the file accessing the sections */ + section_ofs = FIELD_OFFSET(IMAGE_NT_HEADERS, OptionalHeader) + nt->FileHeader.SizeOfOptionalHeader; + if ((nt->FileHeader.NumberOfSections * sizeof (*sec) + section_ofs) > mapping_size) + return NULL; + + if (num_sections) + *num_sections = nt->FileHeader.NumberOfSections; + + /* from here we have a valid PE exe to update */ + return (void*) ((BYTE*)nt + section_ofs); +} + +static BOOL check_pe_exe( HANDLE file, QUEUEDUPDATES *updates ) +{ + const IMAGE_NT_HEADERS *nt; + const IMAGE_SECTION_HEADER *sec; + BOOL ret = FALSE; + HANDLE mapping; + DWORD mapping_size, num_sections = 0; + void *base = NULL; + + mapping_size = GetFileSize( file, NULL ); + + mapping = CreateFileMappingW( file, NULL, PAGE_READONLY, 0, 0, NULL ); + if (!mapping) + goto done; + + base = MapViewOfFile( mapping, FILE_MAP_READ, 0, 0, mapping_size ); + if (!base) + goto done; + + nt = get_nt_header( base, mapping_size ); + if (!nt) + goto done; + + DPRINT("resources: %08x %08x\n", + nt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].VirtualAddress, + nt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].Size); + + sec = get_section_header( base, mapping_size, &num_sections ); + if (!sec) + goto done; + + ret = TRUE; + +done: + if (base) + UnmapViewOfFile( base ); + if (mapping) + CloseHandle( mapping ); + + return ret; +} + + +static struct resource_data *allocate_resource_data( WORD Language, DWORD codepage, + LPVOID lpData, DWORD cbData, BOOL copy_data ) +{ + struct resource_data *resdata; + + if (!lpData || !cbData) + return NULL; + + resdata = HeapAlloc( GetProcessHeap(), 0, sizeof *resdata + (copy_data ? cbData : 0) ); + if (resdata) + { + resdata->lang = Language; + resdata->codepage = codepage; + resdata->cbData = cbData; + if (copy_data) + { + resdata->lpData = &resdata[1]; + memcpy( resdata->lpData, lpData, cbData ); + } + else + resdata->lpData = lpData; + } + + return resdata; +} + +/* get pointer to object containing list element */ +#define LIST_ENTRY(elem, type, field) \ + ((type *)((char *)(elem) - (unsigned int)(&((type *)0)->field))) + +/* iterate through the list using a list entry */ +#define LIST_FOR_EACH_ENTRY(elem, list, type, field) \ + for ((elem) = LIST_ENTRY((list)->next, type, field); \ + &(elem)->field != (list); \ + (elem) = LIST_ENTRY((elem)->field.next, type, field)) + +static void add_resource_dir_entry( struct list *dir, struct resource_dir_entry *resdir ) +{ + struct resource_dir_entry *ent; + + LIST_FOR_EACH_ENTRY( ent, dir, struct resource_dir_entry, entry ) + { + if (0>resource_strcmp( ent->id, resdir->id )) + continue; + + list_add_before( &ent->entry, &resdir->entry ); + return; + } + list_add_tail( dir, &resdir->entry ); +} + +static void add_resource_data_entry( struct list *dir, struct resource_data *resdata ) +{ + struct resource_data *ent; + + LIST_FOR_EACH_ENTRY( ent, dir, struct resource_data, entry ) + { + if (ent->lang < resdata->lang) + continue; + + list_add_before( &ent->entry, &resdata->entry ); + return; + } + list_add_tail( dir, &resdata->entry ); +} + +static struct resource_dir_entry *find_resource_dir_entry( struct list *dir, LPCWSTR id ) +{ + struct resource_dir_entry *ent; + + /* match either IDs or strings */ + LIST_FOR_EACH_ENTRY( ent, dir, struct resource_dir_entry, entry ) + if (!resource_strcmp( id, ent->id )) + return ent; + + return NULL; +} + + +static struct resource_data *find_resource_data( struct list *dir, LANGID lang ) +{ + struct resource_data *res_data; + + /* match only languages here */ + LIST_FOR_EACH_ENTRY( res_data, dir, struct resource_data, entry ) + if ( lang == res_data->lang ) + return res_data; + + return NULL; +} + + +static BOOL update_add_resource( QUEUEDUPDATES *updates, LPCWSTR Type, LPCWSTR Name, + struct resource_data *resdata, BOOL overwrite_existing ) +{ + struct resource_dir_entry *restype, *resname; + struct resource_data *existing; + + DPRINT("%p %s %s %p %d\n", updates, + Type, Name, resdata, overwrite_existing ); + + restype = find_resource_dir_entry( &updates->root, Type ); + if (!restype) + { + restype = HeapAlloc( GetProcessHeap(), 0, sizeof *restype ); + restype->id = res_strdupW( Type ); + list_init( &restype->children ); + add_resource_dir_entry( &updates->root, restype ); + } + + resname = find_resource_dir_entry( &restype->children, Name ); + if (!resname) + { + resname = HeapAlloc( GetProcessHeap(), 0, sizeof *resname ); + resname->id = res_strdupW( Name ); + list_init( &resname->children ); + add_resource_dir_entry( &restype->children, resname ); + } + + /* + * If there's an existing resource entry with matching (Type,Name,Language) + * it needs to be removed before adding the new data. + */ + existing = find_resource_data( &resname->children, resdata->lang ); + if (existing) + { + if (!overwrite_existing) + return TRUE; + list_remove( &existing->entry ); + HeapFree( GetProcessHeap(), 0, existing ); + } + + add_resource_data_entry( &resname->children, resdata ); + + return TRUE; +} + + +/* retrieve the resource name to pass to the ntdll functions */ +static NTSTATUS get_res_nameA( LPCSTR name, UNICODE_STRING *str ) +{ + if (!HIWORD(name)) + { + str->Buffer = (LPWSTR)name; + return STATUS_SUCCESS; + } + if (name[0] == '#') + { + ULONG value; + if (RtlCharToInteger( name + 1, 10, &value ) != STATUS_SUCCESS || HIWORD(value)) + return STATUS_INVALID_PARAMETER; + str->Buffer = (LPWSTR)value; + return STATUS_SUCCESS; + } + RtlCreateUnicodeStringFromAsciiz( str, name ); + RtlUpcaseUnicodeString( str, str, FALSE ); + return STATUS_SUCCESS; +} + +/* retrieve the resource name to pass to the ntdll functions */ +static NTSTATUS get_res_nameW( LPCWSTR name, UNICODE_STRING *str ) +{ + if (!HIWORD(name)) + { + str->Buffer = (LPWSTR)name; + return STATUS_SUCCESS; + } + if (name[0] == '#') + { + ULONG value; + RtlInitUnicodeString( str, name + 1 ); + if (RtlUnicodeStringToInteger( str, 10, &value ) != STATUS_SUCCESS || HIWORD(value)) + return STATUS_INVALID_PARAMETER; + str->Buffer = (LPWSTR)value; + return STATUS_SUCCESS; + } + RtlCreateUnicodeString( str, name ); + RtlUpcaseUnicodeString( str, str, FALSE ); + return STATUS_SUCCESS; +} + + +/* + * FIXME: + * Assumes that the resources are in .rsrc + * and .rsrc is the last section in the file. + * Not sure whether updating resources will other cases on Windows. + * If the resources lie in a section containing other data, + * resizing that section could possibly cause trouble. + * If the section with the resources isn't last, the remaining + * sections need to be moved down in the file, and the section header + * would need to be adjusted. + * If we needed to add a section, what would we name it? + * If we needed to add a section and there wasn't space in the file + * header, how would that work? + * Seems that at least some of these cases can't be handled properly. + */ +static IMAGE_SECTION_HEADER *get_resource_section( void *base, DWORD mapping_size ) +{ + IMAGE_SECTION_HEADER *sec; + IMAGE_NT_HEADERS *nt; + DWORD i, num_sections = 0; + + nt = get_nt_header( base, mapping_size ); + if (!nt) + return NULL; + + sec = get_section_header( base, mapping_size, &num_sections ); + if (!sec) + return NULL; + + /* find the resources section */ + for (i=0; i<num_sections; i++) + if (!memcmp(sec[i].Name, ".rsrc", 6)) + break; + + if (i == num_sections) + { + DPRINT("FIXME: .rsrc doesn't exist\n"); + return NULL; + } + + /* check that the resources section is last */ + if (i != num_sections - 1) + { + DPRINT("FIXME: .rsrc isn't the last section\n"); + return NULL; + } + + return &sec[i]; +} + + +static const IMAGE_SECTION_HEADER *section_from_rva( void *base, DWORD mapping_size, DWORD rva ) +{ + const IMAGE_SECTION_HEADER *sec; + DWORD num_sections = 0; + int i; + + sec = get_section_header( base, mapping_size, &num_sections ); + if (!sec) + return NULL; + + for (i=num_sections-1; i>=0; i--) + { + if (sec[i].VirtualAddress <= rva && + rva <= (DWORD)sec[i].VirtualAddress + sec[i].SizeOfRawData) + { + return &sec[i]; + } + } + + return NULL; +} + + +static void *address_from_rva( void *base, DWORD mapping_size, DWORD rva, DWORD len ) +{ + const IMAGE_SECTION_HEADER *sec; + + sec = section_from_rva( base, mapping_size, rva ); + if (!sec) + return NULL; + + if (rva + len <= (DWORD)sec->VirtualAddress + sec->SizeOfRawData) + return (void*)((LPBYTE) base + (sec->PointerToRawData + rva - sec->VirtualAddress)); + + return NULL; +} + + +static void res_free_str( LPWSTR str ) +{ + if (HIWORD(str)) + HeapFree( GetProcessHeap(), 0, str ); +} + + +static LPWSTR resource_dup_string( const IMAGE_RESOURCE_DIRECTORY *root, const IMAGE_RESOURCE_DIRECTORY_ENTRY *entry ) +{ + const IMAGE_RESOURCE_DIR_STRING_U* string; + LPWSTR s; + + if (!entry->NameIsString) + return UIntToPtr(entry->Id); + + string = (const IMAGE_RESOURCE_DIR_STRING_U*) (((const char *)root) + entry->NameOffset); + s = HeapAlloc(GetProcessHeap(), 0, (string->Length + 1)*sizeof (WCHAR) ); + memcpy( s, string->NameString, (string->Length + 1)*sizeof (WCHAR) ); + s[string->Length] = 0; + + return s; +} + + +/* this function is based on the code in winedump's pe.c */ +static BOOL enumerate_mapped_resources( QUEUEDUPDATES *updates, + void *base, DWORD mapping_size, + const IMAGE_RESOURCE_DIRECTORY *root ) +{ + const IMAGE_RESOURCE_DIRECTORY *namedir, *langdir; + const IMAGE_RESOURCE_DIRECTORY_ENTRY *e1, *e2, *e3; + const IMAGE_RESOURCE_DATA_ENTRY *data; + DWORD i, j, k; + + DPRINT("version (%d.%d) %d named %d id entries\n", + root->MajorVersion, root->MinorVersion, root->NumberOfNamedEntries, root->NumberOfIdEntries); + + for (i = 0; i< root->NumberOfNamedEntries + root->NumberOfIdEntries; i++) + { + LPWSTR Type; + + e1 = (const IMAGE_RESOURCE_DIRECTORY_ENTRY*)(root + 1) + i; + + Type = resource_dup_string( root, e1 ); + + namedir = (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + e1->OffsetToDirectory); + for (j = 0; j < namedir->NumberOfNamedEntries + namedir->NumberOfIdEntries; j++) + { + LPWSTR Name; + + e2 = (const IMAGE_RESOURCE_DIRECTORY_ENTRY*)(namedir + 1) + j; + + Name = resource_dup_string( root, e2 ); + + langdir = (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + e2->OffsetToDirectory); + for (k = 0; k < langdir->NumberOfNamedEntries + langdir->NumberOfIdEntries; k++) + { + LANGID Lang; + void *p; + struct resource_data *resdata; + + e3 = (const IMAGE_RESOURCE_DIRECTORY_ENTRY*)(langdir + 1) + k; + + Lang = e3->Id; + + data = (const IMAGE_RESOURCE_DATA_ENTRY *)((const char *)root + e3->OffsetToData); + + p = address_from_rva( base, mapping_size, data->OffsetToData, data->Size ); + + resdata = allocate_resource_data( Lang, data->CodePage, p, data->Size, FALSE ); + if (resdata) + update_add_resource( updates, Type, Name, resdata, FALSE ); + } + res_free_str( Name ); + } + res_free_str( Type ); + } + + return TRUE; +} + + +static BOOL read_mapped_resources( QUEUEDUPDATES *updates, void *base, DWORD mapping_size ) +{ + const IMAGE_RESOURCE_DIRECTORY *root; + const IMAGE_NT_HEADERS *nt; + const IMAGE_SECTION_HEADER *sec; + DWORD num_sections = 0, i; + + nt = get_nt_header( base, mapping_size ); + if (!nt) + return FALSE; + + sec = get_section_header( base, mapping_size, &num_sections ); + if (!sec) + return FALSE; + + for (i=0; i<num_sections; i++) + if (!memcmp(sec[i].Name, ".rsrc", 6)) + break; + + if (i == num_sections) + return TRUE; + + /* check the resource data is inside the mapping */ + if (sec[i].PointerToRawData > mapping_size || + (sec[i].PointerToRawData + sec[i].SizeOfRawData) > mapping_size) + return TRUE; + + DPRINT("found .rsrc at %08x, size %08x\n", sec[i].PointerToRawData, sec[i].SizeOfRawData); + + root = (void*) ((BYTE*)base + sec[i].PointerToRawData); + enumerate_mapped_resources( updates, base, mapping_size, root ); + + return TRUE; +} + + +static BOOL unmap_file_from_memory( struct mapping_info *mi ) +{ + if (mi->base) + UnmapViewOfFile( mi->base ); + mi->base = NULL; + if (mi->mapping) + CloseHandle( mi->mapping ); + mi->mapping = NULL; + return TRUE; +} + + +static BOOL map_file_into_memory( struct mapping_info *mi ) +{ + DWORD page_attr, perm; + + if (mi->read_write) + { + page_attr = PAGE_READWRITE; + perm = FILE_MAP_WRITE | FILE_MAP_READ; + } + else + { + page_attr = PAGE_READONLY; + perm = FILE_MAP_READ; + } + + mi->mapping = CreateFileMappingW( mi->file, NULL, page_attr, 0, 0, NULL ); + if (!mi->mapping) + return FALSE; + + mi->base = MapViewOfFile( mi->mapping, perm, 0, 0, mi->size ); + if (!mi->base) + return FALSE; + + return TRUE; +} + + +static struct mapping_info *create_mapping( LPCWSTR name, BOOL rw ) +{ + struct mapping_info *mi; + + mi = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof *mi ); + if (!mi) + return NULL; + + mi->read_write = rw; + + mi->file = CreateFileW( name, GENERIC_READ | (rw ? GENERIC_WRITE : 0), + 0, NULL, OPEN_EXISTING, 0, 0 ); + + if (mi->file != INVALID_HANDLE_VALUE) + { + mi->size = GetFileSize( mi->file, NULL ); + + if (map_file_into_memory( mi )) + return mi; + } + + unmap_file_from_memory( mi ); + HeapFree( GetProcessHeap(), 0, mi ); + + return NULL; +} + + +static void get_resource_sizes( QUEUEDUPDATES *updates, struct resource_size_info *si ) +{ + struct resource_dir_entry *types, *names; + struct resource_data *data; + DWORD num_types = 0, num_names = 0, num_langs = 0, strings_size = 0, data_size = 0; + + memset( si, 0, sizeof *si ); + + LIST_FOR_EACH_ENTRY( types, &updates->root, struct resource_dir_entry, entry ) + { + num_types++; + if (HIWORD( types->id )) + strings_size += sizeof (WORD) + lstrlenW( types->id )*sizeof (WCHAR); + + LIST_FOR_EACH_ENTRY( names, &types->children, struct resource_dir_entry, entry ) + { + num_names++; + + if (HIWORD( names->id )) + strings_size += sizeof (WORD) + lstrlenW( names->id )*sizeof (WCHAR); + + LIST_FOR_EACH_ENTRY( data, &names->children, struct resource_data, entry ) + { + num_langs++; + data_size += (data->cbData + 3) & ~3; + } + } + } + + /* names are at the end of the types */ + si->names_ofs = sizeof (IMAGE_RESOURCE_DIRECTORY) + + num_types * sizeof (IMAGE_RESOURCE_DIRECTORY_ENTRY); + + /* language directories are at the end of the names */ + si->langs_ofs = si->names_ofs + + num_types * sizeof (IMAGE_RESOURCE_DIRECTORY) + + num_names * sizeof (IMAGE_RESOURCE_DIRECTORY_ENTRY); + + si->data_entry_ofs = si->langs_ofs + + num_names * sizeof (IMAGE_RESOURCE_DIRECTORY) + + num_langs * sizeof (IMAGE_RESOURCE_DIRECTORY_ENTRY); + + si->strings_ofs = si->data_entry_ofs + + num_langs * sizeof (IMAGE_RESOURCE_DATA_ENTRY); + + si->data_ofs = si->strings_ofs + ((strings_size + 3) & ~3); + + si->total_size = si->data_ofs + data_size; + + DPRINT("names %08x langs %08x data entries %08x strings %08x data %08x total %08x\n", + si->names_ofs, si->langs_ofs, si->data_entry_ofs, + si->strings_ofs, si->data_ofs, si->total_size); +} + + +static BOOL resize_mapping( struct mapping_info *mi, DWORD new_size ) +{ + if (!unmap_file_from_memory( mi )) + return FALSE; + + /* change the file size */ + SetFilePointer( mi->file, new_size, NULL, FILE_BEGIN ); + if (!SetEndOfFile( mi->file )) + { + DPRINT("failed to set file size to %08x\n", new_size ); + return FALSE; + } + + mi->size = new_size; + + return map_file_into_memory( mi ); +} + + +static DWORD get_init_data_size( void *base, DWORD mapping_size ) +{ + DWORD i, sz = 0, num_sections = 0; + IMAGE_SECTION_HEADER *s; + + s = get_section_header( base, mapping_size, &num_sections ); + + for (i=0; i<num_sections; i++) + if (s[i].Characteristics & IMAGE_SCN_CNT_INITIALIZED_DATA) + sz += s[i].SizeOfRawData; + + DPRINT("size = %08x\n", sz); + + return sz; +} + + +static void res_write_padding( BYTE *res_base, DWORD size ) +{ + static const BYTE pad[] = { + 'P','A','D','D','I','N','G','X','X','P','A','D','D','I','N','G' }; + DWORD i; + + for ( i = 0; i < size / sizeof pad; i++ ) + memcpy( &res_base[i*sizeof pad], pad, sizeof pad ); + memcpy( &res_base[i*sizeof pad], pad, size%sizeof pad ); +} + + +static void destroy_mapping( struct mapping_info *mi ) +{ + if (!mi) + return; + unmap_file_from_memory( mi ); + if (mi->file) + CloseHandle( mi->file ); + HeapFree( GetProcessHeap(), 0, mi ); +} + + +static void free_resource_directory( struct list *head, int level ) +{ + struct list *ptr = NULL; + + while ((ptr = list_head( head ))) + { + list_remove( ptr ); + if (level) + { + struct resource_dir_entry *ent; + + ent = LIST_ENTRY( ptr, struct resource_dir_entry, entry ); + res_free_str( ent->id ); + free_resource_directory( &ent->children, level - 1 ); + HeapFree(GetProcessHeap(), 0, ent); + } + else + { + struct resource_data *data; + + data = LIST_ENTRY( ptr, struct resource_data, entry ); + HeapFree( GetProcessHeap(), 0, data ); + } + } +} + + +static BOOL write_resources( QUEUEDUPDATES *updates, LPBYTE base, struct resource_size_info *si, DWORD rva ) +{ + struct resource_dir_entry *types, *names; + struct resource_data *data; + IMAGE_RESOURCE_DIRECTORY *root; + + DPRINT("%p %p %p %08x\n", updates, base, si, rva ); + + memset( base, 0, si->total_size ); + + /* the root entry always exists */ + root = (IMAGE_RESOURCE_DIRECTORY*) base; + memset( root, 0, sizeof *root ); + root->MajorVersion = 4; + si->types_ofs = sizeof *root; + LIST_FOR_EACH_ENTRY( types, &updates->root, struct resource_dir_entry, entry ) + { + IMAGE_RESOURCE_DIRECTORY_ENTRY *e1; + IMAGE_RESOURCE_DIRECTORY *namedir; + + e1 = (IMAGE_RESOURCE_DIRECTORY_ENTRY*) &base[si->types_ofs]; + memset( e1, 0, sizeof *e1 ); + if (HIWORD( types->id )) + { + WCHAR *strings; + DWORD len; + + root->NumberOfNamedEntries++; + e1->NameIsString = 1; + e1->NameOffset = si->strings_ofs; + + strings = (WCHAR*) &base[si->strings_ofs]; + len = lstrlenW( types->id ); + strings[0] = len; + memcpy( &strings[1], types->id, len * sizeof (WCHAR) ); + si->strings_ofs += (len + 1) * sizeof (WCHAR); + } + else + { + root->NumberOfIdEntries++; + e1->Id = LOWORD( types->id ); + } + e1->OffsetToDirectory = si->names_ofs; + e1->DataIsDirectory = TRUE; + si->types_ofs += sizeof (IMAGE_RESOURCE_DIRECTORY_ENTRY); + + namedir = (IMAGE_RESOURCE_DIRECTORY*) &base[si->names_ofs]; + memset( namedir, 0, sizeof *namedir ); + namedir->MajorVersion = 4; + si->names_ofs += sizeof (IMAGE_RESOURCE_DIRECTORY); + + LIST_FOR_EACH_ENTRY( names, &types->children, struct resource_dir_entry, entry ) + { + IMAGE_RESOURCE_DIRECTORY_ENTRY *e2; + IMAGE_RESOURCE_DIRECTORY *langdir; + + e2 = (IMAGE_RESOURCE_DIRECTORY_ENTRY*) &base[si->names_ofs]; + memset( e2, 0, sizeof *e2 ); + if (HIWORD( names->id )) + { + WCHAR *strings; + DWORD len; + + namedir->NumberOfNamedEntries++; + e2->NameIsString = 1; + e2->NameOffset = si->strings_ofs; + + strings = (WCHAR*) &base[si->strings_ofs]; + len = lstrlenW( names->id ); + strings[0] = len; + memcpy( &strings[1], names->id, len * sizeof (WCHAR) ); + si->strings_ofs += (len + 1) * sizeof (WCHAR); + } + else + { + namedir->NumberOfIdEntries++; + e2->Id = LOWORD( names->id ); + } + e2->OffsetToDirectory = si->langs_ofs; + e2->DataIsDirectory = TRUE; + si->names_ofs += sizeof (IMAGE_RESOURCE_DIRECTORY_ENTRY); + + langdir = (IMAGE_RESOURCE_DIRECTORY*) &base[si->langs_ofs]; + memset( langdir, 0, sizeof *langdir ); + langdir->MajorVersion = 4; + si->langs_ofs += sizeof (IMAGE_RESOURCE_DIRECTORY); + + LIST_FOR_EACH_ENTRY( data, &names->children, struct resource_data, entry ) + { + IMAGE_RESOURCE_DIRECTORY_ENTRY *e3; + IMAGE_RESOURCE_DATA_ENTRY *de; + int pad_size; + + e3 = (IMAGE_RESOURCE_DIRECTORY_ENTRY*) &base[si->langs_ofs]; + memset( e3, 0, sizeof *e3 ); + langdir->NumberOfIdEntries++; + e3->Id = LOWORD( data->lang ); + e3->OffsetToData = si->data_entry_ofs; + + si->langs_ofs += sizeof (IMAGE_RESOURCE_DIRECTORY_ENTRY); + + /* write out all the data entries */ + de = (IMAGE_RESOURCE_DATA_ENTRY*) &base[si->data_entry_ofs]; + memset( de, 0, sizeof *de ); + de->OffsetToData = si->data_ofs + rva; + de->Size = data->cbData; + de->CodePage = data->codepage; + si->data_entry_ofs += sizeof (IMAGE_RESOURCE_DATA_ENTRY); + + /* write out the resource data */ + memcpy( &base[si->data_ofs], data->lpData, data->cbData ); + si->data_ofs += data->cbData; + + pad_size = (-si->data_ofs)&3; + res_write_padding( &base[si->data_ofs], pad_size ); + si->data_ofs += pad_size; + } + } + } + + return TRUE; +} + + +static BOOL write_raw_resources( QUEUEDUPDATES *updates ) +{ + static const WCHAR prefix[] = { 'r','e','s','u',0 }; + WCHAR tempdir[MAX_PATH], tempfile[MAX_PATH]; + DWORD mapping_size, section_size, old_size; + BOOL ret = FALSE; + IMAGE_SECTION_HEADER *sec; + IMAGE_NT_HEADERS *nt; + struct resource_size_info res_size; + BYTE *res_base; + struct mapping_info *read_map = NULL, *write_map = NULL; + + /* copy the exe to a temp file then update the temp file... */ + tempdir[0] = 0; + if (!GetTempPathW( MAX_PATH, tempdir )) + return ret; + + if (!GetTempFileNameW( tempdir, prefix, 0, tempfile )) + return ret; + + if (!CopyFileW( updates->pFileName, tempfile, FALSE )) + goto done; + + DPRINT("tempfile %s\n", tempfile); + + if (!updates->bDeleteExistingResources) + { + read_map = create_mapping( updates->pFileName, FALSE ); + if (!read_map) + goto done; + + ret = read_mapped_resources( updates, read_map->base, read_map->size ); + if (!ret) + { + DPRINT("failed to read existing resources\n"); + goto done; + } + } + + write_map = create_mapping( tempfile, TRUE ); + if (!write_map) + goto done; + + nt = get_nt_header( write_map->base, write_map->size ); + if (!nt) + goto done; + + if (nt->OptionalHeader.SectionAlignment <= 0) + { + DPRINT("invalid section alignment %04x\n", nt->OptionalHeader.SectionAlignment); + goto done; + } + + sec = get_resource_section( write_map->base, write_map->size ); + if (!sec) + goto done; + + if ((sec->SizeOfRawData + sec->PointerToRawData) != write_map->size) + { + DPRINT("FIXME: .rsrc isn't at the end of the image %08x + %08x != %08x\n", + sec->SizeOfRawData, sec->PointerToRawData, write_map->size); + goto done; + } + + DPRINT("before .rsrc at %08x, size %08x\n", sec->PointerToRawData, sec->SizeOfRawData); + + get_resource_sizes( updates, &res_size ); + + /* round up the section size */ + section_size = res_size.total_size; + section_size += (-section_size) % nt->OptionalHeader.SectionAlignment; + + mapping_size = sec->PointerToRawData + section_size; + + DPRINT("requires %08x (%08x) bytes\n", res_size.total_size, section_size ); + + /* check if the file size needs to be changed */ + if (section_size != sec->SizeOfRawData) + { + old_size = write_map->size; + + DPRINT("file size %08x -> %08x\n", old_size, mapping_size); + + /* unmap the file before changing the file size */ + ret = resize_mapping( write_map, mapping_size ); + + /* get the pointers again - they might be different after remapping */ + nt = get_nt_header( write_map->base, mapping_size ); + if (!nt) + { + DPRINT("couldn't get NT header\n"); + goto done; + } + + sec = get_resource_section( write_map->base, mapping_size ); + if (!sec) + goto done; + + /* adjust the PE header information */ + nt->OptionalHeader.SizeOfImage += (mapping_size - old_size); + sec->SizeOfRawData = section_size; + sec->Misc.VirtualSize = section_size; + nt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].Size = res_size.total_size; + nt->OptionalHeader.SizeOfInitializedData = get_init_data_size( write_map->base, mapping_size ); + } + + res_base = (LPBYTE) write_map->base + sec->PointerToRawData; + + DPRINT("base = %p offset = %08x\n", write_map->base, sec->PointerToRawData); + + ret = write_resources( updates, res_base, &res_size, sec->VirtualAddress ); + + res_write_padding( res_base + res_size.total_size, section_size - res_size.total_size ); + + DPRINT("after .rsrc at %08x, size %08x\n", sec->PointerToRawData, sec->SizeOfRawData); + +done: + destroy_mapping( read_map ); + destroy_mapping( write_map ); + + if (ret) + ret = CopyFileW( tempfile, updates->pFileName, FALSE ); + + DeleteFileW( tempfile ); + + return ret; +} + /* * @implemented @@ -212,7 +1280,7 @@ /* - * @unimplemented + * @implemented */ LPVOID STDCALL @@ -220,12 +1288,12 @@ HGLOBAL hResData ) { - return hResData; -} - - -/* - * @unimplemented + return (LPVOID)hResData; +} + + +/* + * @implemented */ HANDLE STDCALL @@ -234,13 +1302,49 @@ BOOL bDeleteExistingResources ) { - STUB; - return FALSE; -} - - -/* - * @unimplemented + QUEUEDUPDATES *updates = NULL; + HANDLE hUpdate, file, ret = NULL; + + DPRINT("%s, %d\n", pFileName, bDeleteExistingResources); + + hUpdate = GlobalAlloc(GHND, sizeof(QUEUEDUPDATES)); + if (!hUpdate) + return ret; + + updates = GlobalLock(hUpdate); + if (updates) + { + list_init( &updates->root ); + updates->bDeleteExistingResources = bDeleteExistingResources; + updates->pFileName = HeapAlloc(GetProcessHeap(), 0, (lstrlenW(pFileName)+1)*sizeof(WCHAR)); + if (updates->pFileName) + { + lstrcpyW(updates->pFileName, pFileName); + + file = CreateFileW( pFileName, GENERIC_READ | GENERIC_WRITE, + 0, NULL, OPEN_EXISTING, 0, 0 ); + + /* if resources are deleted, only the file's presence is checked */ + if (file != INVALID_HANDLE_VALUE && + (bDeleteExistingResources || check_pe_exe( file, updates ))) + ret = hUpdate; + else + HeapFree( GetProcessHeap(), 0, updates->pFileName ); + + CloseHandle( file ); + } + GlobalUnlock(hUpdate); + } + + if (!ret) + GlobalFree(hUpdate); + + return ret; +} + + +/* + * @implemented */ HANDLE STDCALL @@ -249,13 +1353,17 @@ BOOL bDeleteExistingResources ) { - STUB; - return FALSE; -} - - -/* - * @unimplemented + UNICODE_STRING FileNameW; + HANDLE ret; + RtlCreateUnicodeStringFromAsciiz(&FileNameW, pFileName); + ret = BeginUpdateResourceW(FileNameW.Buffer, bDeleteExistingResources); + RtlFreeUnicodeString(&FileNameW); + return ret; +} + + +/* + * @implemented */ BOOL STDCALL @@ -264,13 +1372,29 @@ BOOL fDiscard ) { - STUB; - return FALSE; -} - - -/* - * @unimplemented + QUEUEDUPDATES *updates; + BOOL ret; + + DPRINT("%p %d\n", hUpdate, fDiscard); + + updates = GlobalLock(hUpdate); + if (!updates) + return FALSE; + + ret = fDiscard || write_raw_resources( updates ); + + free_resource_directory( &updates->root, 2 ); + + HeapFree( GetProcessHeap(), 0, updates->pFileName ); + GlobalUnlock( hUpdate ); + GlobalFree( hUpdate ); + + return ret; +} + + +/* + * @implemented */ BOOL STDCALL @@ -287,81 +1411,103 @@ /* - * @unimplemented + * @implemented */ BOOL STDCALL -EnumResourceLanguagesW ( - HINSTANCE hModule, - LPCWSTR lpType, - LPCWSTR lpName, - ENUMRESLANGPROCW lpEnumFunc, - LONG lParam +EnumResourceLanguagesW( + HMODULE hmod, + LPCWSTR type, + LPCWSTR name, + ENUMRESLANGPROCW lpfun, + LONG_PTR lparam ) { - STUB; - return FALSE; -} - - -BOOL -STDCALL -EnumResourceLanguagesA ( - HINSTANCE hModule, - LPCSTR lpType, - LPCSTR lpName, - ENUMRESLANGPROCA lpEnumFunc, - LONG lParam + int i; + BOOL ret = FALSE; + NTSTATUS status; + UNICODE_STRING typeW, nameW; + LDR_RESOURCE_INFO info; + PIMAGE_RESOURCE_DIRECTORY basedir, resdir; + PIMAGE_RESOURCE_DIRECTORY_ENTRY et; + + DPRINT( "%p %s %s %p %lx\n", hmod, type, name, lpfun, lparam ); + + if (!hmod) hmod = GetModuleHandleW( NULL ); + typeW.Buffer = nameW.Buffer = NULL; + if ((status = LdrFindResourceDirectory_U( hmod, NULL, 0, &basedir )) != STATUS_SUCCESS) + goto done; + if ((status = get_res_nameW( type, &typeW )) != STATUS_SUCCESS) + goto done; + if ((status = get_res_nameW( name, &nameW )) != STATUS_SUCCESS) + goto done; + info.Type = (ULONG_PTR)typeW.Buffer; + info.Name = (ULONG_PTR)nameW.Buffer; + if ((status = LdrFindResourceDirectory_U( hmod, &info, 2, &resdir )) != STATUS_SUCCESS) + goto done; + + et = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(resdir + 1); + for (i = 0; i < resdir->NumberOfNamedEntries + resdir->NumberOfIdEntries; i++) + { + ret = lpfun( hmod, type, name, et[i].Id, lparam ); + if (!ret) break; + } +done: + if (HIWORD(typeW.Buffer)) HeapFree( GetProcessHeap(), 0, typeW.Buffer ); + if (HIWORD(nameW.Buffer)) HeapFree( GetProcessHeap(), 0, nameW.Buffer ); + if (status != STATUS_SUCCESS) SetLastError( RtlNtStatusToDosError(status) ); + return ret; +} + + +/* + * @implemented + */ +BOOL STDCALL +EnumResourceLanguagesA( + HMODULE hmod, + LPCSTR type, + LPCSTR name, + ENUMRESLANGPROCA lpfun, + LONG_PTR lparam ) { - STUB; - return FALSE; -} - - - -/* retrieve the resource name to pass to the ntdll functions */ -static NTSTATUS get_res_nameA( LPCSTR name, UNICODE_STRING *str ) -{ - if (!HIWORD(name)) - { - str->Buffer = (LPWSTR)name; - return STATUS_SUCCESS; - } - if (name[0] == '#') - { - ULONG value; - if (RtlCharToInteger( name + 1, 10, &value ) != STATUS_SUCCESS || HIWORD(value)) - return STATUS_INVALID_PARAMETER; - str->Buffer = (LPWSTR)value; - return STATUS_SUCCESS; - } - RtlCreateUnicodeStringFromAsciiz( str, name ); - RtlUpcaseUnicodeString( str, str, FALSE ); - return STATUS_SUCCESS; -} - -/* retrieve the resource name to pass to the ntdll functions */ -static NTSTATUS get_res_nameW( LPCWSTR name, UNICODE_STRING *str ) -{ - if (!HIWORD(name)) - { - str->Buffer = (LPWSTR)name; - return STATUS_SUCCESS; - } - if (name[0] == '#') - { - ULONG value; - RtlInitUnicodeString( str, name + 1 ); - if (RtlUnicodeStringToInteger( str, 10, &value ) != STATUS_SUCCESS || HIWORD(value)) - return STATUS_INVALID_PARAMETER; - str->Buffer = (LPWSTR)value; - return STATUS_SUCCESS; - } - RtlCreateUnicodeString( str, name ); - RtlUpcaseUnicodeString( str, str, FALSE ); - return STATUS_SUCCESS; -} + int i; + BOOL ret = FALSE; + NTSTATUS status; + UNICODE_STRING typeW, nameW; + LDR_RESOURCE_INFO info; + PIMAGE_RESOURCE_DIRECTORY basedir, resdir; + PIMAGE_RESOURCE_DIRECTORY_ENTRY et; + + DPRINT( "%p %s %s %p %lx\n", hmod, type, name, lpfun, lparam ); + + if (!hmod) hmod = GetModuleHandleA( NULL ); + typeW.Buffer = nameW.Buffer = NULL; + if ((status = LdrFindResourceDirectory_U( hmod, NULL, 0, &basedir )) != STATUS_SUCCESS) + goto done; + if ((status = get_res_nameA( type, &typeW )) != STATUS_SUCCESS) + goto done; + if ((status = get_res_nameA( name, &nameW )) != STATUS_SUCCESS) + goto done; + info.Type = (ULONG_PTR)typeW.Buffer; + info.Name = (ULONG_PTR)nameW.Buffer; + if ((status = LdrFindResourceDirectory_U( hmod, &info, 2, &resdir )) != STATUS_SUCCESS) + goto done; + + et = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(resdir + 1); + for (i = 0; i < resdir->NumberOfNamedEntries + resdir->NumberOfIdEntries; i++) + { + ret = lpfun( hmod, type, name, et[i].Id, lparam ); + if (!ret) break; + } +done: + if (HIWORD(typeW.Buffer)) HeapFree( GetProcessHeap(), 0, typeW.Buffer ); + if (HIWORD(nameW.Buffer)) HeapFree( GetProcessHeap(), 0, nameW.Buffer ); + if (status != STATUS_SUCCESS) SetLastError( RtlNtStatusToDosError(status) ); + return ret; +} + /********************************************************************** * EnumResourceNamesA (KERNEL32.@) @@ -487,39 +1633,119 @@ } /* - * @unimplemented + * @implemented */ BOOL STDCALL EnumResourceTypesW ( - HINSTANCE hModule, - ENUMRESTYPEPROCW lpEnumFunc, - LONG lParam + HMODULE hmod, + ENUMRESTYPEPROCW lpfun, + LONG_PTR lparam ) { - STUB; - return FALSE; -} - - -/* - * @unimplemented + int i, len = 0; + BOOL ret = FALSE; + LPWSTR type = NULL; + NTSTATUS status; + PIMAGE_RESOURCE_DIRECTORY resdir; + PIMAGE_RESOURCE_DIRECTORY_ENTRY et; + PIMAGE_RESOURCE_DIR_STRING_U str; + + DPRINT( "%p %p %lx\n", hmod, lpfun, lparam ); + + if (!hmod) hmod = GetModuleHandleW( NULL ); + + if ((status = LdrFindResourceDirectory_U( hmod, NULL, 0, &resdir )) != STATUS_SUCCESS) + { + SetLastError( RtlNtStatusToDosError(status) ); + return FALSE; + } + et = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(resdir + 1); + for (i = 0; i < resdir->NumberOfNamedEntries + resdir->NumberOfIdEntries; i++) + { + if (et[i].NameIsString) + { + str = (PIMAGE_RESOURCE_DIR_STRING_U)((const BYTE *)resdir + et[i].NameOffset); + if (str->Length + 1 > len) + { + len = str->Length + 1; + HeapFree( GetProcessHeap(), 0, type ); + if (!(type = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ))) return FALSE; + } + memcpy(type, str->NameString, str->Length * sizeof (WCHAR)); + type[str->Length] = 0; + ret = lpfun(hmod,type,lparam); + } + else + { + ret = lpfun( hmod, UIntToPtr(et[i].Id), lparam ); + } + if (!ret) break; + } + HeapFree( GetProcessHeap(), 0, type ); + return ret; +} + + +/* + * @implemented */ BOOL STDCALL EnumResourceTypesA ( - HINSTANCE hModule, - ENUMRESTYPEPROCA lpEnumFunc, - LONG lParam + HMODULE hmod, + ENUMRESTYPEPROCA lpfun, + LONG_PTR lparam ) { - STUB; - return FALSE; -} - - -/* - * @unimplemented + int i; + BOOL ret = FALSE; + LPSTR type = NULL; + DWORD len = 0, newlen; + NTSTATUS status; + PIMAGE_RESOURCE_DIRECTORY resdir; + PIMAGE_RESOURCE_DIRECTORY_ENTRY et; + PIMAGE_RESOURCE_DIR_STRING_U str; + + DPRINT( "%p %p %lx\n", hmod, lpfun, lparam ); + + if (!hmod) hmod = GetModuleHandleA( NULL ); + + if ((status = LdrFindResourceDirectory_U( hmod, NULL, 0, &resdir )) != STATUS_SUCCESS) + { + SetLastError( RtlNtStatusToDosError(status) ); + return FALSE; + } + et = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(resdir + 1); + for (i = 0; i < resdir->NumberOfNamedEntries+resdir->NumberOfIdEntries; i++) + { + if (et[i].NameIsString) + { + str = (PIMAGE_RESOURCE_DIR_STRING_U)((const BYTE *)resdir + et[i].NameOffset); + newlen = WideCharToMultiByte( CP_ACP, 0, str->NameString, str->Length, NULL, 0, NULL, NULL); + if (newlen + 1 > len) + { + len = newlen + 1; + HeapFree( GetProcessHeap(), 0, type ); + if (!(type = HeapAlloc( GetProcessHeap(), 0, len ))) return FALSE; + } + WideCharToMultiByte( CP_ACP, 0, str->NameString, str->Length, type, len, NULL, NULL); + type[newlen] = 0; + ret = lpfun(hmod,type,lparam); + } + else + { + ret = lpfun( hmod, UIntToPtr(et[i].Id), lparam ); + } + if (!ret) break; + } + HeapFree( GetProcessHeap(), 0, type ); + return ret; +} + + +/* + * @implemented */ BOOL STDCALL @@ -532,13 +1758,26 @@ DWORD cbData ) { - STUB; - return FALSE; -} - - -/* - * @unimplemented + BOOL ret; + UNICODE_STRING TypeW; + UNICODE_STRING NameW; + if(!HIWORD(lpType)) + TypeW.Buffer = ULongToPtr(LOWORD(lpType)); + else + RtlCreateUnicodeStringFromAsciiz(&TypeW, lpType); + if(!HIWORD(lpName)) + NameW.Buffer = ULongToPtr(LOWORD(lpName)); + else + RtlCreateUnicodeStringFromAsciiz(&NameW, lpName); + ret = UpdateResourceW(hUpdate, TypeW.Buffer, NameW.Buffer, wLanguage, lpData, cbData); + if(HIWORD(lpType)) RtlFreeUnicodeString(&TypeW); + if(HIWORD(lpName)) RtlFreeUnicodeString(&NameW); + return ret; +} + + +/* + * @implemented */ BOOL STDCALL @@ -551,8 +1790,22 @@ DWORD cbData ) { - STUB; - return FALSE; + QUEUEDUPDATES *updates; + BOOL ret = FALSE; + + DPRINT("%p %s %s %08x %p %d\n", hUpdate, + lpType, lpName, wLanguage, lpData, cbData); + + updates = GlobalLock(hUpdate); + if (updates) + { + struct resource_data *data; + data = allocate_resource_data( wLanguage, 0, lpData, cbData, TRUE ); + if (data) + ret = update_add_resource( updates, lpType, lpName, data, TRUE ); + GlobalUnlock(hUpdate); + } + return ret; } /* EOF */ Modified: trunk/reactos/dll/win32/kernel32/misc/sysinfo.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/misc/sy…
============================================================================== --- trunk/reactos/dll/win32/kernel32/misc/sysinfo.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/kernel32/misc/sysinfo.c [iso-8859-1] Wed Apr 9 14:05:08 2008 @@ -146,7 +146,7 @@ Si->dwProcessorType = PROCESSOR_PPC_620; break; default: - Si->dwProcessorType = -1; + Si->dwProcessorType = 0; } break; @@ -171,12 +171,12 @@ /* - * @unimplemented + * @implemented */ BOOL STDCALL IsProcessorFeaturePresent(DWORD ProcessorFeature) { - if (ProcessorFeature >= PROCESSOR_FEATURE_MAX) + if (ProcessorFeature > PROCESSOR_FEATURE_MAX) return(FALSE); return((BOOL)SharedUserData->ProcessorFeatures[ProcessorFeature]);
16 years, 8 months
1
0
0
0
[cwittich] 32898: add EMU_TYPE_XEN and initial Xen detection (including hvm support)
by cwittich@svn.reactos.org
Author: cwittich Date: Wed Apr 9 11:29:14 2008 New Revision: 32898 URL:
http://svn.reactos.org/svn/reactos?rev=32898&view=rev
Log: add EMU_TYPE_XEN and initial Xen detection (including hvm support) Modified: trunk/reactos/tools/sysreg/rosboot_test.cpp trunk/reactos/tools/sysreg/rosboot_test.h Modified: trunk/reactos/tools/sysreg/rosboot_test.cpp URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/sysreg/rosboot_test.…
============================================================================== --- trunk/reactos/tools/sysreg/rosboot_test.cpp [iso-8859-1] (original) +++ trunk/reactos/tools/sysreg/rosboot_test.cpp [iso-8859-1] Wed Apr 9 11:29:14 2008 @@ -53,6 +53,7 @@ string RosBootTest::ROS_EMU_TYPE= "ROS_EMU_TYPE"; string RosBootTest::EMU_TYPE_QEMU = "qemu"; string RosBootTest::EMU_TYPE_VMWARE = "vmware"; + string RosBootTest::EMU_TYPE_XEN = "xen"; string RosBootTest::ROS_HDD_IMAGE= "ROS_HDD_IMAGE"; string RosBootTest::ROS_CD_IMAGE = "ROS_CD_IMAGE"; string RosBootTest::ROS_MAX_TIME = "ROS_MAX_TIME"; @@ -64,6 +65,7 @@ string RosBootTest::ROS_EMU_KILL = "ROS_EMU_KILL"; string RosBootTest::ROS_EMU_MEM = "ROS_EMU_MEM"; string RosBootTest::ROS_BOOT_CMD = "ROS_BOOT_CMD"; + string RosBootTest::XEN_CONFIG_FILE = "XEN_CONFIG_FILE"; #ifdef __LINUX__ string RosBootTest::ROS_EMU_PATH = "ROS_EMU_PATH_LIN"; @@ -621,13 +623,58 @@ m_DataSource = new NamedPipeReader(); if (!executeBootCmd()) { + cerr << "Error: failed to launch emulator with: " << m_BootCmd << endl; return false; } return true; } - + +//--------------------------------------------------------------------------------------- + bool RosBootTest::xenGetCaps() + { + FILE *fp; + int ch, i; + char buffer[2048]; + + fp = popen("xm info", "r"); + if (!fp) + { + cerr << "Error getting Xen caps." << endl; + return false; + } + for (i=0;(i<2049)&&(feof(fp) == 0 && ((ch = fgetc(fp)) != -1)); i++) + { + buffer[i] = (char) ch; + } + buffer[i] = '\0'; + pclose(fp); + + if (strstr(buffer, "hvm") == 0) + { + cerr << "No hvm support detected!" << endl; + return false; + } + else + { + return true; + } + + } + +//--------------------------------------------------------------------------------------- + bool RosBootTest::configureXen() + { + if (!xenGetCaps()) + { + return false; + } + + cerr << "Xen isn't supported yet." << endl; + + return false; + } //--------------------------------------------------------------------------------------- bool RosBootTest::configureVmWare() { @@ -637,17 +684,25 @@ //--------------------------------------------------------------------------------------- bool RosBootTest::readConfigurationValues(ConfigParser &conf_parser) { -#if 0 + if (!conf_parser.getStringValue(RosBootTest::ROS_EMU_TYPE, m_EmuType)) { cerr << "Error: ROS_EMU_TYPE is not set" << endl; return false; } -#endif + + if (ROS_EMU_TYPE == "xen") + { + if (!conf_parser.getStringValue(RosBootTest::XEN_CONFIG_FILE, m_XenConfig)) + { + cerr << "Error: XEN_CONFIG_FILE is not set" << endl; + return false; + } + } if (!conf_parser.getStringValue(RosBootTest::ROS_EMU_PATH, m_EmuPath)) { - cerr << "Error: ROS_EMU_PATH is not set" << endl; + cerr << "Error: ROS_EMU_PATH_[LIN/WIN] is not set" << endl; return false; } if (!m_HDDImage.length()) @@ -702,7 +757,7 @@ { return false; } -#if 0 + if (m_EmuType == EMU_TYPE_QEMU) { if (!configureQemu()) @@ -719,6 +774,14 @@ return false; } } + else if (m_EmuType == EMU_TYPE_XEN) + { + if (!configureXen()) + { + cerr << "Error: failed to configure xen" << endl; + return false; + } + } else { /// @@ -727,13 +790,6 @@ cerr << "Error: ROS_EMU_TYPE value is not supported:" << m_EmuType << "=" << EMU_TYPE_QEMU << endl; return false; } -#else - if (!configureQemu()) - { - cerr << "Error: failed to configure qemu" << endl; - return false; - } -#endif if (m_DelayRead) { Modified: trunk/reactos/tools/sysreg/rosboot_test.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/sysreg/rosboot_test.…
============================================================================== --- trunk/reactos/tools/sysreg/rosboot_test.h [iso-8859-1] (original) +++ trunk/reactos/tools/sysreg/rosboot_test.h [iso-8859-1] Wed Apr 9 11:29:14 2008 @@ -43,6 +43,7 @@ static string ROS_EMU_TYPE; static string EMU_TYPE_QEMU; static string EMU_TYPE_VMWARE; + static string EMU_TYPE_XEN; static string ROS_EMU_PATH; static string ROS_HDD_IMAGE; static string ROS_CD_IMAGE; @@ -55,6 +56,7 @@ static string ROS_EMU_KILL; static string ROS_EMU_MEM; static string ROS_BOOT_CMD; + static string XEN_CONFIG_FILE; //--------------------------------------------------------------------------------------- /// @@ -107,8 +109,10 @@ bool readConfigurationValues(ConfigParser & conf_parser); bool configureQemu(); bool configureVmWare(); + bool configureXen(); bool hasQemuNoRebootOption(); void cleanup(); + bool xenGetCaps(); //--------------------------------------------------------------------------------------- /// /// dumpCheckpoints @@ -155,6 +159,7 @@ string m_Src; string m_DebugPort; string m_PidFile; + string m_XenConfig; DataSource * m_DataSource; OsSupport::ProcessID m_Pid;
16 years, 8 months
1
0
0
0
[gedmurphy] 32897: Test code for loading and unloading a driver via 3 different methods. SCM, native methods and via the relatively unknown NtSetSystemInformation methods. Needs rbuild files to test in ros.
by gedmurphy@svn.reactos.org
Author: gedmurphy Date: Wed Apr 9 08:43:34 2008 New Revision: 32897 URL:
http://svn.reactos.org/svn/reactos?rev=32897&view=rev
Log: Test code for loading and unloading a driver via 3 different methods. SCM, native methods and via the relatively unknown NtSetSystemInformation methods. Needs rbuild files to test in ros. Added: trunk/rostests/win32/DriverLoading/ trunk/rostests/win32/DriverLoading/Application/ trunk/rostests/win32/DriverLoading/Application/Application.vcproj (with props) trunk/rostests/win32/DriverLoading/Application/DriverTester.h (with props) trunk/rostests/win32/DriverLoading/Application/main.c (with props) trunk/rostests/win32/DriverLoading/Application/umode.c (with props) trunk/rostests/win32/DriverLoading/Application/undoc.c (with props) trunk/rostests/win32/DriverLoading/Driver/ trunk/rostests/win32/DriverLoading/Driver/Driver.vcproj (with props) trunk/rostests/win32/DriverLoading/Driver/driver.c (with props) trunk/rostests/win32/DriverLoading/DriverTester.sln (with props) Added: trunk/rostests/win32/DriverLoading/Application/Application.vcproj URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/win32/DriverLoading/Appli…
============================================================================== --- trunk/rostests/win32/DriverLoading/Application/Application.vcproj (added) +++ trunk/rostests/win32/DriverLoading/Application/Application.vcproj [iso-8859-1] Wed Apr 9 08:43:34 2008 @@ -1,0 +1,214 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="9.00" + Name="Application" + ProjectGUID="{EABF0755-CD33-43CC-9062-DD5C5E0AC229}" + RootNamespace="app" + Keyword="Win32Proj" + TargetFrameworkVersion="131072" + > + <Platforms> + <Platform + Name="Win32" + /> + </Platforms> + <ToolFiles> + </ToolFiles> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory="$(SolutionDir)$(ConfigurationName)" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="1" + CharacterSet="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" + MinimalRebuild="true" + BasicRuntimeChecks="3" + RuntimeLibrary="3" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="4" + CallingConvention="2" + CompileAs="1" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="ntdll.lib" + LinkIncremental="2" + GenerateDebugInformation="true" + SubSystem="1" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Release|Win32" + OutputDirectory="$(SolutionDir)$(ConfigurationName)" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="1" + CharacterSet="1" + WholeProgramOptimization="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" + RuntimeLibrary="2" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="true" + DebugInformationFormat="3" + CallingConvention="2" + CompileAs="1" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="ntdll.lib" + LinkIncremental="2" + GenerateDebugInformation="false" + SubSystem="1" + OptimizeReferences="0" + EnableCOMDATFolding="0" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" + UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" + > + <File + RelativePath=".\main.c" + > + </File> + <File + RelativePath=".\umode.c" + > + </File> + <File + RelativePath=".\undoc.c" + > + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl;inc;xsd" + UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" + > + <File + RelativePath=".\DriverTester.h" + > + </File> + </Filter> + <Filter + Name="Resource Files" + Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" + UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" + > + </Filter> + </Files> + <Globals> + </Globals> +</VisualStudioProject> Propchange: trunk/rostests/win32/DriverLoading/Application/Application.vcproj ------------------------------------------------------------------------------ svn:eol-style = native Added: trunk/rostests/win32/DriverLoading/Application/DriverTester.h URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/win32/DriverLoading/Appli…
============================================================================== --- trunk/rostests/win32/DriverLoading/Application/DriverTester.h (added) +++ trunk/rostests/win32/DriverLoading/Application/DriverTester.h [iso-8859-1] Wed Apr 9 08:43:34 2008 @@ -1,0 +1,72 @@ +#define _WIN32_WINNT 0x0500 +#include <windows.h> +#include <stdio.h> +#include <winternl.h> + +#define DRIVER_NAME L"TestDriver" + +#define STATUS_SUCCESS ((NTSTATUS)0x00000000L) +#define STATUS_PRIVILEGE_NOT_HELD ((NTSTATUS)0xC0000061L) + +typedef LONG NTSTATUS; + +// +// umode methods +// +BOOL RegisterDriver(LPCWSTR lpDriverName, LPCWSTR lpPathName); +BOOL StartDriver(LPCWSTR lpDriverName); +BOOL StopDriver(LPCWSTR lpDriverName); +BOOL UnregisterDriver(LPCWSTR lpDriverName); + +// +// undoc methods +// +BOOL ConvertPath(LPCWSTR lpPath, LPWSTR lpDevice); +BOOL LoadVia_SystemLoadGdiDriverInformation(LPWSTR lpDriverPath); +BOOL LoadVia_SystemExtendServiceTableInformation(LPWSTR lpDriverPath); +BOOL NtStartDriver(LPCWSTR lpService); +BOOL NtStopDriver(LPCWSTR lpService); + + +// +// undocumented stuff +// +#define SystemLoadGdiDriverInformation 26 +#define SystemExtendServiceTableInformation 38 +NTSYSAPI NTSTATUS NTAPI +NtSetSystemInformation(IN INT SystemInformationClass, + IN PVOID SystemInformation, + IN ULONG SystemInformationLength ); +NTSTATUS +NtUnloadDriver(IN PUNICODE_STRING DriverServiceName); + +typedef struct _SYSTEM_GDI_DRIVER_INFORMATION +{ + UNICODE_STRING DriverName; + PVOID ImageAddress; + PVOID SectionPointer; + PVOID EntryPoint; + PIMAGE_EXPORT_DIRECTORY ExportSectionPointer; + ULONG ImageLength; +} SYSTEM_GDI_DRIVER_INFORMATION, *PSYSTEM_GDI_DRIVER_INFORMATION; + +typedef enum _OBJECT_INFORMATION_CLASS { + ObjectBasicInformation, + ObjectNameInformation, + ObjectTypeInformation, + ObjectAllTypesInformation, + ObjectHandleInformation +} OBJECT_INFO_CLASS; + +NTSTATUS NtQueryObject(IN HANDLE Handle, + IN OBJECT_INFO_CLASS ObjectInformationClass, + OUT PVOID ObjectInformation, + IN ULONG ObjectInformationLength, + OUT PULONG ReturnLength); + + +typedef struct _OBJECT_NAME_INFORMATION { + UNICODE_STRING Name; +} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION; + + Propchange: trunk/rostests/win32/DriverLoading/Application/DriverTester.h ------------------------------------------------------------------------------ svn:eol-style = native Added: trunk/rostests/win32/DriverLoading/Application/main.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/win32/DriverLoading/Appli…
============================================================================== --- trunk/rostests/win32/DriverLoading/Application/main.c (added) +++ trunk/rostests/win32/DriverLoading/Application/main.c [iso-8859-1] Wed Apr 9 08:43:34 2008 @@ -1,0 +1,157 @@ +#include "DriverTester.h" + +static BOOL +Initialize(LPCWSTR lpDriverPath) +{ + if (!RegisterDriver(DRIVER_NAME, lpDriverPath)) + { + wprintf(L"[%lu] Failed to install %s\n", GetLastError(), DRIVER_NAME); + return FALSE; + } + + return TRUE; +} + +static BOOL +Uninitialize(LPCWSTR lpDriverPath) +{ + if (!UnregisterDriver(DRIVER_NAME)) + { + wprintf(L"[%lu] Failed to unregister %s\n", GetLastError(), DRIVER_NAME); + return FALSE; + } + + return TRUE; +} + +static BOOL +UsermodeMethod(LPCWSTR lpDriverPath) +{ + wprintf(L"\nStarting %s.sys via the SCM\n", DRIVER_NAME); + + if (!StartDriver(DRIVER_NAME)) + { + wprintf(L"[%lu] Failed to start %s\n", GetLastError(), DRIVER_NAME); + UnregisterDriver(DRIVER_NAME); + return FALSE; + } + + wprintf(L"\tStarted\n"); + + wprintf(L"Stopping %s.sys via the SCM\n", DRIVER_NAME); + + if (!StopDriver(DRIVER_NAME)) + { + wprintf(L"[%lu] Failed to stop %s\n", GetLastError(), DRIVER_NAME); + UnregisterDriver(DRIVER_NAME); + return FALSE; + } + + wprintf(L"\tStopped\n"); + + return TRUE; +} + +static BOOL +UndocumentedMethod(LPCWSTR lpDriverPath) +{ + wprintf(L"\nStarting %s.sys via native API\n", DRIVER_NAME); + + if (!NtStartDriver(DRIVER_NAME)) + { + wprintf(L"[%lu] Failed to start %s\n", GetLastError(), DRIVER_NAME); + UnregisterDriver(DRIVER_NAME); + return FALSE; + } + + wprintf(L"\tStarted\n"); + + wprintf(L"Stopping %s.sys via native API\n", DRIVER_NAME); + + if (!NtStopDriver(DRIVER_NAME)) + { + wprintf(L"[%lu] Failed to stop %s\n", GetLastError(), DRIVER_NAME); + UnregisterDriver(DRIVER_NAME); + return FALSE; + } + + wprintf(L"\tStopped\n"); + + return TRUE; +} + + +static BOOL +SneakyUndocumentedMethods(LPCWSTR lpDriverPath) +{ + WCHAR szDevice[MAX_PATH]; + + if (ConvertPath(lpDriverPath, szDevice)) + { + wprintf(L"\nStarting %s.sys via NtSetSystemInformation with SystemLoadGdiDriverInformation\n", DRIVER_NAME); + if (LoadVia_SystemLoadGdiDriverInformation(szDevice)) + { + wprintf(L"\tStarted\n"); + + NtStopDriver(DRIVER_NAME); + } + + wprintf(L"\nStarting %s.sys via NtSetSystemInformation with SystemExtendServiceTableInformation\n", DRIVER_NAME); + if (LoadVia_SystemExtendServiceTableInformation(szDevice)) + { + wprintf(L"\tStarted\n"); + + NtStopDriver(DRIVER_NAME); + } + + return TRUE; + } + + return FALSE; +} + + +int __cdecl wmain(int argc, wchar_t *argv[]) +{ + WCHAR buf[MAX_PATH]; + + if (argc != 2) + { + wprintf(L"Usage: DriverTester.exe <path>"); + return -1; + } + + if (!SearchPathW(NULL, + argv[1], + L".sys", + MAX_PATH, + buf, + NULL)) + { + wprintf(L"%s does not exist", argv[1]); + return -1; + } + + if (Initialize(argv[1])) + { + // + // Load using conventional SCM methods + // + UsermodeMethod(argv[1]); + + // + // Load using undocumented NtLoad/UnloadDriver + // + UndocumentedMethod(argv[1]); + + // + // Load using hidden unknown methods + // + SneakyUndocumentedMethods(argv[1]); + + Uninitialize(argv[1]); + } + + return 0; +} + Propchange: trunk/rostests/win32/DriverLoading/Application/main.c ------------------------------------------------------------------------------ svn:eol-style = native Added: trunk/rostests/win32/DriverLoading/Application/umode.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/win32/DriverLoading/Appli…
============================================================================== --- trunk/rostests/win32/DriverLoading/Application/umode.c (added) +++ trunk/rostests/win32/DriverLoading/Application/umode.c [iso-8859-1] Wed Apr 9 08:43:34 2008 @@ -1,0 +1,162 @@ +#include "DriverTester.h" + + +BOOL +RegisterDriver(LPCWSTR lpDriverName, + LPCWSTR lpPathName) +{ + SC_HANDLE hSCManager; + SC_HANDLE hService; + + hSCManager = OpenSCManagerW(NULL, + NULL, + SC_MANAGER_ALL_ACCESS); + if (!hSCManager) + return FALSE; + +retry: + hService = CreateServiceW(hSCManager, + lpDriverName, + lpDriverName, + SERVICE_ALL_ACCESS, + SERVICE_KERNEL_DRIVER, + SERVICE_DEMAND_START, + SERVICE_ERROR_NORMAL, + lpPathName, + NULL, + NULL, + NULL, + NULL, + NULL); + + if (hService) + { + CloseServiceHandle(hService); + CloseServiceHandle(hSCManager); + return TRUE; + } + else + { + DWORD err = GetLastError(); + + if (err == ERROR_SERVICE_MARKED_FOR_DELETE) + { + StopDriver(DRIVER_NAME); + goto retry; + } + + CloseServiceHandle(hSCManager); + + // return TRUE if the driver is already registered + return (err == ERROR_SERVICE_EXISTS); + } +} + +BOOL +StartDriver(LPCWSTR lpDriverName) +{ + SC_HANDLE hSCManager; + SC_HANDLE hService; + BOOL bRet; + + hSCManager = OpenSCManagerW(NULL, + NULL, + SC_MANAGER_ALL_ACCESS); + if (!hSCManager) + return FALSE; + + hService = OpenServiceW(hSCManager, + lpDriverName, + SERVICE_ALL_ACCESS); + if (!hService) + { + CloseServiceHandle(hSCManager); + return FALSE; + } + + bRet = StartServiceW(hService, 0, NULL); + if (!bRet) + { + if (GetLastError() == ERROR_SERVICE_ALREADY_RUNNING) + { + wprintf(L"%s.sys already running\n", DRIVER_NAME); + bRet = TRUE; + } + } + + CloseServiceHandle(hService); + CloseServiceHandle(hSCManager); + + return bRet; +} + +BOOL +StopDriver(LPCWSTR lpDriverName) +{ + SC_HANDLE hSCManager; + SC_HANDLE hService; + SERVICE_STATUS serviceStatus; + BOOL bRet; + + hSCManager = OpenSCManagerW(NULL, + NULL, + SC_MANAGER_ALL_ACCESS); + if (!hSCManager) + return FALSE; + + hService = OpenServiceW(hSCManager, + lpDriverName, + SERVICE_ALL_ACCESS); + if (!hService) + { + CloseServiceHandle(hSCManager); + return FALSE; + } + + bRet = ControlService(hService, + SERVICE_CONTROL_STOP, + &serviceStatus); + if (!bRet) + { + if (GetLastError() == ERROR_SERVICE_NOT_ACTIVE) + { + wprintf(L"%s.sys wasn't running\n", DRIVER_NAME); + bRet = TRUE; + } + } + + CloseServiceHandle(hService); + CloseServiceHandle(hSCManager); + + return bRet; +} + +BOOL +UnregisterDriver(LPCWSTR lpDriverName) +{ + SC_HANDLE hService; + SC_HANDLE hSCManager; + BOOL bRet; + + hSCManager = OpenSCManagerW(NULL, + NULL, + SC_MANAGER_ALL_ACCESS); + if (!hSCManager) + return FALSE; + + hService = OpenServiceW(hSCManager, + lpDriverName, + SERVICE_ALL_ACCESS); + if (!hService) + { + CloseServiceHandle(hSCManager); + return FALSE; + } + + bRet = DeleteService(hService); + + CloseServiceHandle(hService); + CloseServiceHandle(hSCManager); + + return bRet; +} Propchange: trunk/rostests/win32/DriverLoading/Application/umode.c ------------------------------------------------------------------------------ svn:eol-style = native Added: trunk/rostests/win32/DriverLoading/Application/undoc.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/win32/DriverLoading/Appli…
============================================================================== --- trunk/rostests/win32/DriverLoading/Application/undoc.c (added) +++ trunk/rostests/win32/DriverLoading/Application/undoc.c [iso-8859-1] Wed Apr 9 08:43:34 2008 @@ -1,0 +1,276 @@ +#include "DriverTester.h" + +static BOOL +SetPrivilege(BOOL bSet) +{ + TOKEN_PRIVILEGES tp; + HANDLE hToken; + LUID luid; + + if (!OpenProcessToken(GetCurrentProcess(), + TOKEN_ADJUST_PRIVILEGES, + &hToken)) + { + return FALSE; + } + + if(!LookupPrivilegeValue(NULL, + SE_LOAD_DRIVER_NAME, + &luid)) + { + CloseHandle(hToken); + return FALSE; + } + + tp.PrivilegeCount = 1; + tp.Privileges[0].Luid = luid; + + if (bSet) + { + tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; + } + else + { + tp.Privileges[0].Attributes = 0; + } + + AdjustTokenPrivileges(hToken, + FALSE, + &tp, + sizeof(TOKEN_PRIVILEGES), + NULL, + NULL); + if (GetLastError() != ERROR_SUCCESS) + { + CloseHandle(hToken); + return FALSE; + } + + CloseHandle(hToken); + + return TRUE; +} + + +BOOL +ConvertPath(LPCWSTR lpPath, + LPWSTR lpDevice) +{ + LPWSTR lpFullPath = NULL; + DWORD size; + + if (lpPath) + { + size = GetLongPathNameW(lpPath, + 0, + 0); + if (!size) + return FALSE; + + size = (size + 1) * sizeof(WCHAR); + + lpFullPath = HeapAlloc(GetProcessHeap(), + 0, + size); + if (!lpFullPath) + return FALSE; + + if (GetLongPathNameW(lpPath, + lpFullPath, + size)) + { + HANDLE hDevice; + POBJECT_NAME_INFORMATION pObjName; + NTSTATUS Status; + DWORD len; + + hDevice = CreateFileW(lpFullPath, + GENERIC_READ | GENERIC_WRITE, + 0, + NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + NULL); + + HeapFree(GetProcessHeap(), 0, lpFullPath); + + if(hDevice == INVALID_HANDLE_VALUE) + { + wprintf(L"[%x] Failed to open %s\n", GetLastError(), DRIVER_NAME); + return FALSE; + } + + size = MAX_PATH * sizeof(WCHAR); + pObjName = HeapAlloc(GetProcessHeap(), 0, size); + if (!pObjName) + return FALSE; + + Status = NtQueryObject(hDevice, + ObjectNameInformation, + pObjName, + size, + &size); + if (Status == STATUS_SUCCESS) + { + len = pObjName->Name.Length / sizeof(WCHAR); + wcsncpy(lpDevice, pObjName->Name.Buffer, len); + lpDevice[len] = UNICODE_NULL; + + HeapFree(GetProcessHeap(), 0, pObjName); + + return TRUE; + } + + HeapFree(GetProcessHeap(), 0, pObjName); + } + } + + return FALSE; +} + + +BOOL +NtStartDriver(LPCWSTR lpService) +{ + WCHAR szDriverPath[MAX_PATH]; + UNICODE_STRING DriverPath; + NTSTATUS Status = -1; + + wcscpy(szDriverPath, + L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\"); + wcscat(szDriverPath, + lpService); + + RtlInitUnicodeString(&DriverPath, + szDriverPath); + + if (SetPrivilege(TRUE)) + { + Status = NtLoadDriver(&DriverPath); + if (Status != STATUS_SUCCESS) + { + DWORD err = RtlNtStatusToDosError(Status); + wprintf(L"NtUnloadDriver failed [%lu]\n", err); + } + + SetPrivilege(FALSE); + } + + return (Status == STATUS_SUCCESS); +} + + +BOOL +NtStopDriver(LPCWSTR lpService) +{ + WCHAR szDriverPath[MAX_PATH]; + UNICODE_STRING DriverPath; + NTSTATUS Status = -1; + + wcscpy(szDriverPath, + L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\"); + wcscat(szDriverPath, + lpService); + + RtlInitUnicodeString(&DriverPath, + szDriverPath); + + if (SetPrivilege(TRUE)) + { + Status = NtUnloadDriver(&DriverPath); + if (Status != STATUS_SUCCESS) + { + DWORD err = RtlNtStatusToDosError(Status); + wprintf(L"NtUnloadDriver failed [%lu]\n", err); + } + + SetPrivilege(FALSE); + } + + return (Status == STATUS_SUCCESS); +} + + +// +// We shouldn't be able to call this from umode. +// Returns true if +// +BOOL +LoadVia_SystemLoadGdiDriverInformation(LPWSTR lpDriverPath) +{ + NTSTATUS Status; + SYSTEM_GDI_DRIVER_INFORMATION Buffer; + DWORD bufSize; + + bufSize = sizeof(SYSTEM_GDI_DRIVER_INFORMATION); + + ZeroMemory(&Buffer, bufSize); + RtlInitUnicodeString(&Buffer.DriverName, lpDriverPath); + + if (SetPrivilege(TRUE)) + { + Status = NtSetSystemInformation(SystemLoadGdiDriverInformation, + &Buffer, + bufSize); + if (Status == STATUS_PRIVILEGE_NOT_HELD) + { + wprintf(L"SystemLoadGdiDriverInformation can only be used in kmode.\n"); + } + else if (Status == STATUS_SUCCESS) + { + wprintf(L"SystemLoadGdiDriverInformation incorrectly loaded the driver\n"); + NtUnloadDriver(&Buffer.DriverName); + + return TRUE; + } + else + { + DWORD err = RtlNtStatusToDosError(Status); + wprintf(L"LoadVia_SystemLoadGdiDriverInformation failed [%lu]\n", err); + } + + SetPrivilege(FALSE); + } + + return FALSE; +} + + +BOOL +LoadVia_SystemExtendServiceTableInformation(LPWSTR lpDriverPath) +{ + NTSTATUS Status; + UNICODE_STRING Buffer; + DWORD bufSize; + + RtlInitUnicodeString(&Buffer, lpDriverPath); + bufSize = sizeof(UNICODE_STRING); + + if (SetPrivilege(TRUE)) + { + Status = NtSetSystemInformation(SystemExtendServiceTableInformation, + &Buffer, + bufSize); + if (Status == STATUS_PRIVILEGE_NOT_HELD) + { + wprintf(L"SystemExtendServiceTableInformation can only be used in kmode.\n"); + } + else if (Status == STATUS_SUCCESS) + { + wprintf(L"SystemExtendServiceTableInformation incorrectly loaded the driver\n"); + NtUnloadDriver(&Buffer); + + return TRUE; + } + else + { + DWORD err = RtlNtStatusToDosError(Status); + wprintf(L"LoadVia_SystemExtendServiceTableInformation failed [%lu] - 0x%x\n", err, Status); + } + + SetPrivilege(FALSE); + } + + return FALSE; +} + Propchange: trunk/rostests/win32/DriverLoading/Application/undoc.c ------------------------------------------------------------------------------ svn:eol-style = native Added: trunk/rostests/win32/DriverLoading/Driver/Driver.vcproj URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/win32/DriverLoading/Drive…
============================================================================== --- trunk/rostests/win32/DriverLoading/Driver/Driver.vcproj (added) +++ trunk/rostests/win32/DriverLoading/Driver/Driver.vcproj [iso-8859-1] Wed Apr 9 08:43:34 2008 @@ -1,0 +1,213 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="9.00" + Name="Driver" + ProjectGUID="{983A51E3-3E69-4C26-B34B-7F17089CD4E3}" + RootNamespace="driver" + Keyword="Win32Proj" + TargetFrameworkVersion="131072" + > + <Platforms> + <Platform + Name="Win32" + /> + </Platforms> + <ToolFiles> + </ToolFiles> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory="$(SolutionDir)$(ConfigurationName)" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="1" + CharacterSet="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + PreprocessorDefinitions="_DEBUG;_CONSOLE;_X86_" + MinimalRebuild="true" + BasicRuntimeChecks="0" + RuntimeLibrary="3" + BufferSecurityCheck="false" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="true" + DebugInformationFormat="4" + CallingConvention="2" + CompileAs="1" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="ntoskrnl.lib hal.lib" + OutputFile="$(OutDir)\$(ProjectName).sys" + LinkIncremental="2" + EnableUAC="false" + GenerateDebugInformation="true" + SubSystem="3" + Driver="1" + EntryPointSymbol="DriverEntry" + RandomizedBaseAddress="0" + DataExecutionPrevention="0" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Release|Win32" + OutputDirectory="$(SolutionDir)$(ConfigurationName)" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="1" + CharacterSet="1" + WholeProgramOptimization="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + WholeProgramOptimization="false" + PreprocessorDefinitions="NDEBUG;_CONSOLE;_X86_" + RuntimeLibrary="2" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="true" + DebugInformationFormat="3" + CallingConvention="2" + CompileAs="1" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="ntoskrnl.lib hal.lib" + OutputFile="$(OutDir)\$(ProjectName).sys" + LinkIncremental="1" + EnableUAC="false" + GenerateDebugInformation="true" + SubSystem="3" + Driver="1" + OptimizeReferences="2" + EnableCOMDATFolding="2" + EntryPointSymbol="DriverEntry" + RandomizedBaseAddress="0" + DataExecutionPrevention="0" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" + UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" + > + <File + RelativePath=".\driver.c" + > + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl;inc;xsd" + UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" + > + </Filter> + <Filter + Name="Resource Files" + Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" + UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" + > + </Filter> + </Files> + <Globals> + </Globals> +</VisualStudioProject> Propchange: trunk/rostests/win32/DriverLoading/Driver/Driver.vcproj ------------------------------------------------------------------------------ svn:eol-style = native Added: trunk/rostests/win32/DriverLoading/Driver/driver.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/win32/DriverLoading/Drive…
============================================================================== --- trunk/rostests/win32/DriverLoading/Driver/driver.c (added) +++ trunk/rostests/win32/DriverLoading/Driver/driver.c [iso-8859-1] Wed Apr 9 08:43:34 2008 @@ -1,0 +1,18 @@ +#include <ntddk.h> + +VOID +DriverUnload(PDRIVER_OBJECT pDriverObject) +{ + DbgPrint("Test driver unloaded sucessfully\n"); +} + +NTSTATUS +DriverEntry(PDRIVER_OBJECT DriverObject, + PUNICODE_STRING RegistryPath) +{ + DriverObject->DriverUnload = DriverUnload; + + DbgPrint("Test driver loaded sucessfully\n"); + + return STATUS_SUCCESS; +} Propchange: trunk/rostests/win32/DriverLoading/Driver/driver.c ------------------------------------------------------------------------------ svn:eol-style = native Added: trunk/rostests/win32/DriverLoading/DriverTester.sln URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/win32/DriverLoading/Drive…
============================================================================== --- trunk/rostests/win32/DriverLoading/DriverTester.sln (added) +++ trunk/rostests/win32/DriverLoading/DriverTester.sln [iso-8859-1] Wed Apr 9 08:43:34 2008 @@ -1,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Application", "Application\Application.vcproj", "{EABF0755-CD33-43CC-9062-DD5C5E0AC229}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Driver", "Driver\Driver.vcproj", "{983A51E3-3E69-4C26-B34B-7F17089CD4E3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {EABF0755-CD33-43CC-9062-DD5C5E0AC229}.Debug|Win32.ActiveCfg = Debug|Win32 + {EABF0755-CD33-43CC-9062-DD5C5E0AC229}.Debug|Win32.Build.0 = Debug|Win32 + {EABF0755-CD33-43CC-9062-DD5C5E0AC229}.Release|Win32.ActiveCfg = Release|Win32 + {EABF0755-CD33-43CC-9062-DD5C5E0AC229}.Release|Win32.Build.0 = Release|Win32 + {983A51E3-3E69-4C26-B34B-7F17089CD4E3}.Debug|Win32.ActiveCfg = Debug|Win32 + {983A51E3-3E69-4C26-B34B-7F17089CD4E3}.Debug|Win32.Build.0 = Debug|Win32 + {983A51E3-3E69-4C26-B34B-7F17089CD4E3}.Release|Win32.ActiveCfg = Release|Win32 + {983A51E3-3E69-4C26-B34B-7F17089CD4E3}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal Propchange: trunk/rostests/win32/DriverLoading/DriverTester.sln ------------------------------------------------------------------------------ svn:eol-style = native
16 years, 8 months
1
0
0
0
[janderwald] 32896: - fix api call convention
by janderwald@svn.reactos.org
Author: janderwald Date: Wed Apr 9 06:08:46 2008 New Revision: 32896 URL:
http://svn.reactos.org/svn/reactos?rev=32896&view=rev
Log: - fix api call convention Modified: trunk/reactos/include/psdk/shlobj.h Modified: trunk/reactos/include/psdk/shlobj.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/include/psdk/shlobj.h?rev=…
============================================================================== --- trunk/reactos/include/psdk/shlobj.h [iso-8859-1] (original) +++ trunk/reactos/include/psdk/shlobj.h [iso-8859-1] Wed Apr 9 06:08:46 2008 @@ -1530,7 +1530,7 @@ OPEN_AS_INFO_FLAGS oaifInFlags; } OPENASINFO; -HRESULT SHOpenWithDialog( +HRESULT WINAPI SHOpenWithDialog( HWND hwndParent, const OPENASINFO *poainfo );
16 years, 8 months
1
0
0
0
← Newer
1
...
27
28
29
30
31
32
33
...
40
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
Results per page:
10
25
50
100
200