diff --git a/reactos/ReactOS-i386.rbuild b/reactos/ReactOS-i386.rbuild index ab188d6887c..74b4ab753ba 100644 --- a/reactos/ReactOS-i386.rbuild +++ b/reactos/ReactOS-i386.rbuild @@ -38,6 +38,6 @@ -fno-strict-aliasing -Wno-strict-aliasing -Wpointer-arith - -enable-stdcall-fixup + -disable-stdcall-fixup diff --git a/reactos/base/applications/cacls/lang/fr-FR.rc b/reactos/base/applications/cacls/lang/fr-FR.rc index c5b9d7c310f..114acca4adb 100644 --- a/reactos/base/applications/cacls/lang/fr-FR.rc +++ b/reactos/base/applications/cacls/lang/fr-FR.rc @@ -7,17 +7,17 @@ IDS_HELP, "Affiche ou change la liste des contr CACLS nomfichier [/T] [/E] [/C] [/G user:perm [...]] [/R user [...]]\n\ [/P user:perm [...]] [/D user [...]]\n\ nomfichier Affiche les ACLs du fichier.\n\ - /T Change les ACLs des fichiers specifiйs dans\n\ + /T Change les ACLs des fichiers spйcifiйs dans\n\ le rйpertoire en cours et tous les sous-rйpertoires.\n\ /E Йdite les ACL au lieu de les remplacer.\n\ /C Continuer en cas de refus d'accиs.\n\ - /G user:perm Accorder des droit d'accиs а l'utilisateur spйcifiй.\n\ + /G user:perm Accorder des droits d'accиs а l'utilisateur spйcifiй.\n\ Perm peut valoir : R Lecture\n\ W Йcriture\n\ C Modification (Йcriture)\n\ F Contrфle total\n\ /R user Supprime les droits d'accиs de l'utilisateur spйcifiй (valide uniquement avec /E).\n\ - /P user:perm Remplace les droits d'accиs de l'utilisateur specifiй.\n\ + /P user:perm Remplace les droits d'accиs de l'utilisateur spйcifiй.\n\ Perm peut valoir : N Aucun \n\ R Lecture\n\ W Йcriture\n\ @@ -27,11 +27,11 @@ CACLS nomfichier [/T] [/E] [/C] [/G user:perm [...]] [/R user [...]]\n\ Il est possible d'utiliser des caractиres joker pour sйlectionner plus d'un fichier avec une commande.\n\ Il est possible de spйcifier plus d'un utilisateur dans une commande.\n\n\ Abrйviations:\n\ - CI - Heritage du conteneur.\n\ + CI - Hйritage du conteneur.\n\ Le ACE sera appliquй aux rйpertoires.\n\ OI - Hйritage de l'objet.\n\ Le ACE sera appliquй aux fichiers.\n\ - IO - Heritage seul.\n\ + IO - Hйritage seul.\n\ Le ACE ne sera pas appliquй au fichier/rйpertoire actuel.\n" IDS_ABBR_CI, "(CI)" diff --git a/reactos/base/applications/cacls/lang/nb-NO.rc b/reactos/base/applications/cacls/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/cacls/lang/nb-NO.rc rename to reactos/base/applications/cacls/lang/no-NO.rc diff --git a/reactos/base/applications/cacls/rsrc.rc b/reactos/base/applications/cacls/rsrc.rc index 76acd37485a..d892f4a1904 100644 --- a/reactos/base/applications/cacls/rsrc.rc +++ b/reactos/base/applications/cacls/rsrc.rc @@ -11,7 +11,7 @@ #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/ko-KR.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" diff --git a/reactos/base/applications/calc/lang/cs-CZ.rc b/reactos/base/applications/calc/lang/cs-CZ.rc index 0451f91d66c..fca7a7d8f77 100644 --- a/reactos/base/applications/calc/lang/cs-CZ.rc +++ b/reactos/base/applications/calc/lang/cs-CZ.rc @@ -1,6 +1,6 @@ /* FILE: base/applications/calc/lang/cs-CZ.rc * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) - * UPDATED: 2008-06-28 + * UPDATED: 2008-07-27 */ LANGUAGE LANG_CZECH, SUBLANG_DEFAULT @@ -368,7 +368,7 @@ BEGIN MENUITEM SEPARATOR MENUITEM "Seskupovбnн инslic", IDM_VIEW_GROUP, CHECKED END - POPUP "Help" + POPUP "Nбpovмda" BEGIN MENUITEM "Tйmata nбpovмdy", IDM_HELP_HELP MENUITEM SEPARATOR @@ -401,7 +401,7 @@ BEGIN MENUITEM SEPARATOR MENUITEM "Seskupovбnн инslic", IDM_VIEW_GROUP, CHECKED END - POPUP "Help" + POPUP "Nбpovмda" BEGIN MENUITEM "Tйmata nбpovмdy", IDM_HELP_HELP MENUITEM SEPARATOR @@ -416,19 +416,19 @@ BEGIN MENUITEM "Kopнrovat\tCTRL-C", IDM_EDIT_COPY MENUITEM "Vloћit\tCTRL-V", IDM_EDIT_PASTE END - POPUP "View" + POPUP "Zobrazit" BEGIN MENUITEM "Standardnн", IDM_VIEW_STANDARD, CHECKED MENUITEM "Vмdeckб", IDM_VIEW_SCIENTIFIC, CHECKED MENUITEM "Pшevody", IDM_VIEW_CONVERSION MENUITEM SEPARATOR - MENUITEM "Seskupovбnн инslic", IDM_VIEW_GROUP, CHECKED + MENUITEM "Seskupovбnн инslic", IDM_VIEW_GROUP, CHECKED END - POPUP "Help" + POPUP "Nбpovмda" BEGIN - MENUITEM "Tйmata nбpovмdy", IDM_HELP_HELP + MENUITEM "Tйmata nбpovмdy", IDM_HELP_HELP MENUITEM SEPARATOR - MENUITEM "O ReactOS kalkulaиce", IDM_HELP_ABOUT + MENUITEM "O ReactOS kalkulaиce", IDM_HELP_ABOUT END END diff --git a/reactos/base/applications/calc/lang/es-ES.rc b/reactos/base/applications/calc/lang/es-ES.rc index 9fbb4854329..0c9db5a28b9 100644 --- a/reactos/base/applications/calc/lang/es-ES.rc +++ b/reactos/base/applications/calc/lang/es-ES.rc @@ -1,6 +1,6 @@ /* *Spanish Language resource file - * Traducido por: Javier Remacha 2007-12-31 + * Traducido por: Javier Remacha 2008 */ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL @@ -240,16 +240,16 @@ CAPTION "ReactOS Calculator" MENU IDR_MENU_STANDARD FONT 8, "MS Shell Dlg" BEGIN - PUSHBUTTON "Convert",IDC_BUTTON_CONVERT,35,105,76,17 + PUSHBUTTON "Convertir",IDC_BUTTON_CONVERT,35,105,76,17 COMBOBOX IDC_COMBO_CATEGORY,4,31,140,168,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | CBS_SORT - LTEXT "Category:",IDC_STATIC,4,20,56,8 + LTEXT "Categorнa:",IDC_STATIC,4,20,56,8 COMBOBOX IDC_COMBO_FROM,4,60,140,168,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | CBS_SORT - LTEXT "Convert from:",IDC_STATIC,4,49,56,8 + LTEXT "Convertir de:",IDC_STATIC,4,49,56,8 COMBOBOX IDC_COMBO_TO,4,87,140,168,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | CBS_SORT - LTEXT "Convert to:",IDC_STATIC,4,76,56,8 + LTEXT "Convertir a:",IDC_STATIC,4,76,56,8 CONTROL "C",IDC_BUTTON_CANC,"Button",BS_OWNERDRAW | BS_CENTER | BS_VCENTER | BS_NOTIFY | WS_TABSTOP,276,24,40,17 CONTROL "CE",IDC_BUTTON_CE,"Button",BS_OWNERDRAW | BS_CENTER | @@ -449,50 +449,50 @@ END // types of conversion STRINGTABLE DISCARDABLE BEGIN - IDS_CONV_AREA "Area" - IDS_CONV_CONSUMPTION "Consumption (engines)" - IDS_CONV_CURRENCY "Currencies" - IDS_CONV_ENERGY "Energy" - IDS_CONV_LENGTH "Lenghts" - IDS_CONV_POWER "Power" - IDS_CONV_PRESSURE "Pressure" - IDS_CONV_TEMPERATURE "Temperature" - IDS_CONV_VELOCITY "Velocity" - IDS_CONV_VOLUME "Volume" - IDS_CONV_WEIGHT "Weights" + IDS_CONV_AREA "Бrea" + IDS_CONV_CONSUMPTION "Consumo (motores)" + IDS_CONV_CURRENCY "Monedas" + IDS_CONV_ENERGY "Energнa" + IDS_CONV_LENGTH "Longitud" + IDS_CONV_POWER "Potencia" + IDS_CONV_PRESSURE "Presiуn" + IDS_CONV_TEMPERATURE "Temperatura" + IDS_CONV_VELOCITY "Velocidad" + IDS_CONV_VOLUME "Volumen" + IDS_CONV_WEIGHT "Peso" END // TYPES OF AREAS STRINGTABLE DISCARDABLE BEGIN IDS_AREA_ACRES "Acres" - IDS_AREA_ACRES_BRAZIL "Acres (Brazil)" - IDS_AREA_ACRES_FRANCE "Acres (France)" - IDS_AREA_ACRES_SCOTS "Acres (Scots)" + IDS_AREA_ACRES_BRAZIL "Acres (Brasil)" + IDS_AREA_ACRES_FRANCE "Acres (Francia)" + IDS_AREA_ACRES_SCOTS "Acres (Escocia)" IDS_AREA_ACRES_US "Acres (US)" - IDS_AREA_ARES "Ares" + IDS_AREA_ARES "Бrea" IDS_AREA_CHOU "Chou" IDS_AREA_DANBO "Danbo" - IDS_AREA_HECTARES "Hectares" + IDS_AREA_HECTARES "Hectбrias" IDS_AREA_JEONGBO "Jeongbo" - IDS_AREA_MORGEN_HUNGARY "Morgen (Hungary)" + IDS_AREA_MORGEN_HUNGARY "Morgen (Hungrнa)" IDS_AREA_MU "Mu" IDS_AREA_PING "Ping" IDS_AREA_PYEONG "Pyeong" IDS_AREA_PYEONGBANGJA "Pyeongbangja" IDS_AREA_RAI "Rai" IDS_AREA_SE "Se" - IDS_AREA_SQUARE_CENTIMETERS "Square centimeters" + IDS_AREA_SQUARE_CENTIMETERS "Centнmetros cuadrados" IDS_AREA_SQUARE_CHR "Square chr" - IDS_AREA_SQUARE_FATHOMS "Square fathoms" - IDS_AREA_SQUARE_FATHOMS_HUNGARY "Square fathoms (Hungary)" - IDS_AREA_SQUARE_FEET "Square feet" - IDS_AREA_SQUARE_INCHES "Square inches" - IDS_AREA_SQUARE_KILOMETERS "Square kilometers" + IDS_AREA_SQUARE_FATHOMS "Braza cuadrada" + IDS_AREA_SQUARE_FATHOMS_HUNGARY "Braza cuadrada (Hungrнa)" + IDS_AREA_SQUARE_FEET "Pies cuadrados" + IDS_AREA_SQUARE_INCHES "Pulgadas cuadradas" + IDS_AREA_SQUARE_KILOMETERS "Kilуmetros cuadrados" IDS_AREA_SQUARE_LAR "Square lar" - IDS_AREA_SQUARE_METER "Square meter" - IDS_AREA_SQUARE_MILES "Square miles" - IDS_AREA_SQUARE_MILLIMETERS "Square millimeters" + IDS_AREA_SQUARE_METER "Metros cuadrado" + IDS_AREA_SQUARE_MILES "Millas cuadradas" + IDS_AREA_SQUARE_MILLIMETERS "Milнmetros cuadrados" IDS_AREA_SQUARE_SHAKU "Square shaku" IDS_AREA_SQUARE_TSUEN "Square tsuen" IDS_AREA_SQUARE_VA "Square va" @@ -504,44 +504,44 @@ END // TYPES OF COMSUMPTIONS STRINGTABLE DISCARDABLE BEGIN - IDS_CONSUMPTION_KM_PER_L "Kilometer/liter" - IDS_CONSUMPTION_L_PER_100_KM "Liters/100 kilometers" - IDS_CONSUMPTION_MILES_GALLON_UK "Miles/gallon (UK)" - IDS_CONSUMPTION_MILES_GALLON_US "Miles/gallon (US)" + IDS_CONSUMPTION_KM_PER_L "Kilometros/litro" + IDS_CONSUMPTION_L_PER_100_KM "Litros/100 kilometros" + IDS_CONSUMPTION_MILES_GALLON_UK "Millas/galуn (UK)" + IDS_CONSUMPTION_MILES_GALLON_US "Millas/galуn (US)" END // TYPES OF CURRENCIES STRINGTABLE DISCARDABLE BEGIN - IDS_CURRENCY_AUSTRIAN_SCHILLING "Austrian schilling" - IDS_CURRENCY_BELGIAN_FRANC "Belgian franc" - IDS_CURRENCY_CYPRIOT_POUND "Cypriot pound" - IDS_CURRENCY_DEUTSCHE_MARK "Deutsche Mark" - IDS_CURRENCY_DUTCH_GUILDER "Dutch guilder" + IDS_CURRENCY_AUSTRIAN_SCHILLING "Schilling Austriaco" + IDS_CURRENCY_BELGIAN_FRANC "Franco Belga" + IDS_CURRENCY_CYPRIOT_POUND "Libra Chipriota" + IDS_CURRENCY_DEUTSCHE_MARK "Marco Alemбn" + IDS_CURRENCY_DUTCH_GUILDER "Florнn Neerlandйs" IDS_CURRENCY_EURO "Euro" - IDS_CURRENCY_FINNISH_MARKKA "Finnish markka" - IDS_CURRENCY_FRENCH_FRANC "French franc" - IDS_CURRENCY_GREEK_DRACHMA "Greek Drachma" - IDS_CURRENCY_IRISH_POUND "Irish pound" - IDS_CURRENCY_ITALIAN_LIRA "Italian lira" - IDS_CURRENCY_LUXEMBOURG_FRANC "Luxembourg franc" - IDS_CURRENCY_MALTESE_LIRA "Maltese lira" - IDS_CURRENCY_PORTOGUESE_ESCUDO "Portoguese escudo" - IDS_CURRENCY_SLOVENIAN_TOLAR "Slovenian tolar" - IDS_CURRENCY_SPANISH_PESETA "Spanish peseta" + IDS_CURRENCY_FINNISH_MARKKA "Marco Finlandйs" + IDS_CURRENCY_FRENCH_FRANC "Franco Frances" + IDS_CURRENCY_GREEK_DRACHMA "Drachma Griego" + IDS_CURRENCY_IRISH_POUND "Libra Irlandesa" + IDS_CURRENCY_ITALIAN_LIRA "Lira Italiana" + IDS_CURRENCY_LUXEMBOURG_FRANC "Franco Luxemburguйs" + IDS_CURRENCY_MALTESE_LIRA "Lira Maltesa" + IDS_CURRENCY_PORTOGUESE_ESCUDO "Escudo Portuguйs" + IDS_CURRENCY_SLOVENIAN_TOLAR "Tolar Esloveno" + IDS_CURRENCY_SPANISH_PESETA "Peseta Espaсola" END // TYPES OF ENERGIES STRINGTABLE DISCARDABLE BEGIN - IDS_ENERGY_15_C_CALORIES "15 ^C calories" - IDS_ENERGY_ERGS "Ergs" - IDS_ENERGY_IT_CALORIES "International Table calories" - IDS_ENERGY_JOULES "Joules" - IDS_ENERGY_KILOJOULES "Kilojoules" - IDS_ENERGY_KILOWATT_HOURS "Kilowatt hours" - IDS_ENERGY_NUTRITION_CALORIES "Nutrition calories" - IDS_ENERGY_TH_CALORIES "Thermochemical calorie" + IDS_ENERGY_15_C_CALORIES "15 ^C calorнas" + IDS_ENERGY_ERGS "Ergios" + IDS_ENERGY_IT_CALORIES "Tabla internacional de calorнas" + IDS_ENERGY_JOULES "Julios" + IDS_ENERGY_KILOJOULES "Kilojulios" + IDS_ENERGY_KILOWATT_HOURS "Kilowatios hora" + IDS_ENERGY_NUTRITION_CALORIES "Calorнas nutricionales" + IDS_ENERGY_TH_CALORIES "Calorнas termoquнmicas" END // TYPES OF LENGTHS @@ -550,33 +550,33 @@ BEGIN IDS_LENGTH_ANGSTROMS "Angstroms" IDS_LENGTH_ASTRONOMILA_UNITS "Astronomila units" IDS_LENGTH_BARLEYCORNS "Barleycorns" - IDS_LENGTH_CENTIMETERS "Centimeters" - IDS_LENGTH_CHAINS_UK "Chains (UK)" + IDS_LENGTH_CENTIMETERS "Centнmetros" + IDS_LENGTH_CHAINS_UK "Cadenas (UK)" IDS_LENGTH_CHI "Chi" IDS_LENGTH_CHOU "Chou" IDS_LENGTH_CHR "Chr" IDS_LENGTH_CUN "Cun" IDS_LENGTH_FATHOMS "Fathoms" IDS_LENGTH_FATHOMS_HUNGARY "Fathoms (Hungary)" - IDS_LENGTH_FEET "Feet" + IDS_LENGTH_FEET "Pies" IDS_LENGTH_FURLONGS "Furlongs" IDS_LENGTH_GAN "Gan" IDS_LENGTH_HANDS "Hands" IDS_LENGTH_HUNH "Hunh" - IDS_LENGTH_INCHES "Inches" + IDS_LENGTH_INCHES "Pulgadas" IDS_LENGTH_JA "Ja" IDS_LENGTH_JEONG "Jeong" IDS_LENGTH_KABIET "Kabiet" IDS_LENGTH_KEN "Ken" IDS_LENGTH_KEUB "Keub" - IDS_LENGTH_KILOMETERS "Kilometers" + IDS_LENGTH_KILOMETERS "Kilometros" IDS_LENGTH_LAR "Lar" - IDS_LENGTH_LIGHT_YEARS "Light years" + IDS_LENGTH_LIGHT_YEARS "Aсos luz" IDS_LENGTH_LINKS_UK "Links (UK)" - IDS_LENGTH_METERS "Meters" - IDS_LENGTH_MILES "Miles" - IDS_LENGTH_MILLIMETERS "Millimeters" - IDS_LENGTH_NAUTICAL_MILES "Nautical miles" + IDS_LENGTH_METERS "Metros" + IDS_LENGTH_MILES "Millas" + IDS_LENGTH_MILLIMETERS "Milнmetros" + IDS_LENGTH_NAUTICAL_MILES "Millas nauticas" IDS_LENGTH_NIEU "Nieu" IDS_LENGTH_PARSECS "Parsecs" IDS_LENGTH_PICAS "Picas" @@ -597,20 +597,20 @@ END // TYPES OF POWERS STRINGTABLE DISCARDABLE BEGIN - IDS_POWER_HORSEPOWER "Horsepower" - IDS_POWER_KILOWATTS "Kilowatts" - IDS_POWER_MEGAWATTS "Megawatts" - IDS_POWER_WATTS "Watts" + IDS_POWER_HORSEPOWER "Caballos de vapor" + IDS_POWER_KILOWATTS "Kilowatios" + IDS_POWER_MEGAWATTS "Megawatios" + IDS_POWER_WATTS "Watios" END // TYPE OF PRESSURES STRINGTABLE DISCARDABLE BEGIN - IDS_PRESSURE_ATMOSPHERES "Atmospheres" - IDS_PRESSURE_BARS "Bars" - IDS_PRESSURE_MM_OF_MERCURY "Millimeters of mercury" - IDS_PRESSURE_PASCALS "Pascals" - IDS_PRESSURE_PSI "Pounds-force per square inch" + IDS_PRESSURE_ATMOSPHERES "Atmуsferas" + IDS_PRESSURE_BARS "Bares" + IDS_PRESSURE_MM_OF_MERCURY "Milнmetros de mercurio" + IDS_PRESSURE_PASCALS "Pascales" + IDS_PRESSURE_PSI "Libras fuerza por pulgada cuadrada" END // TYPES OF TEMPERATURES @@ -625,46 +625,46 @@ END // TYPES OF VELOCITIES STRINGTABLE DISCARDABLE BEGIN - IDS_VELOCITY_FEET_HOUR "Feet/hour" - IDS_VELOCITY_KILOMETERS_HOUR "Kilometers/hour" + IDS_VELOCITY_FEET_HOUR "Pies/hora" + IDS_VELOCITY_KILOMETERS_HOUR "Kilometros/hora" IDS_VELOCITY_KNOTS "Knots" IDS_VELOCITY_MACH "Mach" - IDS_VELOCITY_METERS_SECOND "Meters/second" - IDS_VELOCITY_MILES_HOUR "Miles/hour" + IDS_VELOCITY_METERS_SECOND "Metros/segundo" + IDS_VELOCITY_MILES_HOUR "Millas/hora" END // TYPES OF VOLUMES STRINGTABLE DISCARDABLE BEGIN - IDS_VOLUME_BARRELS_UK "Barrels (UK)" - IDS_VOLUME_BARRELS_OIL "Barrels oil" + IDS_VOLUME_BARRELS_UK "Barriles (UK)" + IDS_VOLUME_BARRELS_OIL "Barriles de petroleo" IDS_VOLUME_BUN "Bun" - IDS_VOLUME_BUSHELS_UK "Bushels (UK)" - IDS_VOLUME_BUSHELS_US "Bushels (US)" - IDS_VOLUME_CUBIC_CENTIMETERS "Cubic centimeters" - IDS_VOLUME_CUBIC_FEET "Cubic feet" - IDS_VOLUME_CUBIC_INCHES "Cubic inches" - IDS_VOLUME_CUBIC_METERS "Cubic meters" - IDS_VOLUME_CUBIC_YARDS "Cubic yards" + IDS_VOLUME_BUSHELS_UK "Celemнn (UK)" + IDS_VOLUME_BUSHELS_US "Celemнn (US)" + IDS_VOLUME_CUBIC_CENTIMETERS "Centнmetros cъbicos" + IDS_VOLUME_CUBIC_FEET "Pнes cъbicos" + IDS_VOLUME_CUBIC_INCHES "Pulgadas cъbicas" + IDS_VOLUME_CUBIC_METERS "Metros cъbicos" + IDS_VOLUME_CUBIC_YARDS "Yardas cъbicas" IDS_VOLUME_DOE "Doe" - IDS_VOLUME_FLUID_OUNCES_UK "Fluid ounces (UK)" - IDS_VOLUME_FLUID_OUNCES_US "Fluid ounces (US)" - IDS_VOLUME_GALLONS_UK "Gallons (UK)" - IDS_VOLUME_GALLONS_DRY_US "Gallons, dry (US)" - IDS_VOLUME_GALLONS_LIQUID_US "Gallons, liquid (US)" + IDS_VOLUME_FLUID_OUNCES_UK "Onza lнquida (UK)" + IDS_VOLUME_FLUID_OUNCES_US "Onza lнquida (US)" + IDS_VOLUME_GALLONS_UK "Galones (UK)" + IDS_VOLUME_GALLONS_DRY_US "Galones, dry (US)" + IDS_VOLUME_GALLONS_LIQUID_US "Galones, liquid (US)" IDS_VOLUME_GOU "Gou" IDS_VOLUME_HOP "Hop" IDS_VOLUME_ICCE "Icce" IDS_VOLUME_KWIAN "Kwian" - IDS_VOLUME_LITERS "Liters" + IDS_VOLUME_LITERS "Litros" IDS_VOLUME_MAL "Mal" - IDS_VOLUME_MILLILITERS "Milliliters" - IDS_VOLUME_PINTS_UK "Pints (UK)" - IDS_VOLUME_PINTS_DRY_US "Pints, dry (US)" - IDS_VOLUME_PINTS_LIQUID_US "Pints, liquid (US)" - IDS_VOLUME_QUARTS_UK "Quarts (UK)" - IDS_VOLUME_QUARTS_DRY_US "Quarts, dry (US)" - IDS_VOLUME_QUARTS_LIQUID_US "Quarts, liquid (US)" + IDS_VOLUME_MILLILITERS "Mililitros" + IDS_VOLUME_PINTS_UK "Pintas (UK)" + IDS_VOLUME_PINTS_DRY_US "Pintas, dry (US)" + IDS_VOLUME_PINTS_LIQUID_US "Pintas, liquid (US)" + IDS_VOLUME_QUARTS_UK "Cuartos (UK)" + IDS_VOLUME_QUARTS_DRY_US "Cuartos, dry (US)" + IDS_VOLUME_QUARTS_LIQUID_US "Cuartos, liquid (US)" IDS_VOLUME_SEKI "Seki" IDS_VOLUME_SYOU "Syou" IDS_VOLUME_TANANLOUNG "Tananloung" @@ -676,29 +676,29 @@ END STRINGTABLE DISCARDABLE BEGIN IDS_WEIGHT_BAHT "Baht" - IDS_WEIGHT_CARATS "Carats" + IDS_WEIGHT_CARATS "Quilates" IDS_WEIGHT_CHUNG "Chung" IDS_WEIGHT_DON "Don" IDS_WEIGHT_GEUN "Geun" - IDS_WEIGHT_GRAMS "Grams" + IDS_WEIGHT_GRAMS "Gramos" IDS_WEIGHT_GWAN "Gwan" IDS_WEIGHT_HARB "Harb" IDS_WEIGHT_JIN_CHINA "Jin (China)" IDS_WEIGHT_JIN_TAIWAN "Jin (Taiwan)" IDS_WEIGHT_KAN "Kan" - IDS_WEIGHT_KILOGRAMS "Kilograms" + IDS_WEIGHT_KILOGRAMS "Kilogramos" IDS_WEIGHT_KIN "Kin" IDS_WEIGHT_LIANG_CHINA "Liang (China)" IDS_WEIGHT_LIANG_TAIWAN "Liang (Taiwan)" IDS_WEIGHT_MONME "Monme" - IDS_WEIGHT_OUNCES_AVOIRDUPOIS "Ounces, avoirdupois" - IDS_WEIGHT_OUNCES_TROY "Ounces, troy" - IDS_WEIGHT_POUNDS "Pounds" + IDS_WEIGHT_OUNCES_AVOIRDUPOIS "Onza, avoirdupois" + IDS_WEIGHT_OUNCES_TROY "Onza, troy" + IDS_WEIGHT_POUNDS "Libras" IDS_WEIGHT_QUINTAL_METRIC "Quintal (metric)" IDS_WEIGHT_SALOUNG "Saloung" IDS_WEIGHT_STONES "Stones" IDS_WEIGHT_TAMLUNG "Tamlung" - IDS_WEIGHT_TONNES "Tonnes" - IDS_WEIGHT_TONS_UK "Tons (UK)" - IDS_WEIGHT_TONS_US "Tons (US)" + IDS_WEIGHT_TONNES "Toneladas" + IDS_WEIGHT_TONS_UK "Toneladas (UK)" + IDS_WEIGHT_TONS_US "Toneladas (US)" END diff --git a/reactos/base/applications/calc/lang/nb-NO.rc b/reactos/base/applications/calc/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/calc/lang/nb-NO.rc rename to reactos/base/applications/calc/lang/no-NO.rc diff --git a/reactos/base/applications/calc/lang/ru-RU.rc b/reactos/base/applications/calc/lang/ru-RU.rc index af027ccf90a..3f608ff23f1 100644 --- a/reactos/base/applications/calc/lang/ru-RU.rc +++ b/reactos/base/applications/calc/lang/ru-RU.rc @@ -231,20 +231,20 @@ END IDD_DIALOG_CONVERSION DIALOGEX 0, 0, 320, 130 STYLE WS_MINIMIZEBOX | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "ReactOS Calculator" +CAPTION "Калькулятор ReactOS" MENU IDR_MENU_STANDARD FONT 8, "MS Shell Dlg" BEGIN - PUSHBUTTON "Convert",IDC_BUTTON_CONVERT,35,105,76,17 + PUSHBUTTON "Конвертировать",IDC_BUTTON_CONVERT,35,105,76,17 COMBOBOX IDC_COMBO_CATEGORY,4,31,140,168,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | CBS_SORT - LTEXT "Category:",IDC_STATIC,4,20,56,8 + LTEXT "Категория:",IDC_STATIC,4,20,56,8 COMBOBOX IDC_COMBO_FROM,4,60,140,168,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | CBS_SORT - LTEXT "Convert from:",IDC_STATIC,4,49,56,8 + LTEXT "Конвертировать из:",IDC_STATIC,4,49,75,8 COMBOBOX IDC_COMBO_TO,4,87,140,168,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | CBS_SORT - LTEXT "Convert to:",IDC_STATIC,4,76,56,8 + LTEXT "Конвертировать в:",IDC_STATIC,4,76,75,8 CONTROL "C",IDC_BUTTON_CANC,"Button",BS_OWNERDRAW | BS_CENTER | BS_VCENTER | BS_NOTIFY | WS_TABSTOP,276,24,40,17 CONTROL "CE",IDC_BUTTON_CE,"Button",BS_OWNERDRAW | BS_CENTER | @@ -444,256 +444,256 @@ END // types of conversion STRINGTABLE DISCARDABLE BEGIN - IDS_CONV_AREA "Area" - IDS_CONV_CONSUMPTION "Consumption (engines)" - IDS_CONV_CURRENCY "Currencies" - IDS_CONV_ENERGY "Energy" - IDS_CONV_LENGTH "Lenghts" - IDS_CONV_POWER "Power" - IDS_CONV_PRESSURE "Pressure" - IDS_CONV_TEMPERATURE "Temperature" - IDS_CONV_VELOCITY "Velocity" - IDS_CONV_VOLUME "Volume" - IDS_CONV_WEIGHT "Weights" + IDS_CONV_AREA "Площадь" + IDS_CONV_CONSUMPTION "Расход топлива (двигатели)" + IDS_CONV_CURRENCY "Валюта" + IDS_CONV_ENERGY "Энергия" + IDS_CONV_LENGTH "Длинна" + IDS_CONV_POWER "Мощность" + IDS_CONV_PRESSURE "Давление" + IDS_CONV_TEMPERATURE "Температура" + IDS_CONV_VELOCITY "Скорость" + IDS_CONV_VOLUME "Объем" + IDS_CONV_WEIGHT "Вес" END // TYPES OF AREAS STRINGTABLE DISCARDABLE BEGIN - IDS_AREA_ACRES "Acres" - IDS_AREA_ACRES_BRAZIL "Acres (Brazil)" - IDS_AREA_ACRES_FRANCE "Acres (France)" - IDS_AREA_ACRES_SCOTS "Acres (Scots)" - IDS_AREA_ACRES_US "Acres (US)" - IDS_AREA_ARES "Ares" - IDS_AREA_CHOU "Chou" - IDS_AREA_DANBO "Danbo" - IDS_AREA_HECTARES "Hectares" - IDS_AREA_JEONGBO "Jeongbo" - IDS_AREA_MORGEN_HUNGARY "Morgen (Hungary)" - IDS_AREA_MU "Mu" - IDS_AREA_PING "Ping" - IDS_AREA_PYEONG "Pyeong" - IDS_AREA_PYEONGBANGJA "Pyeongbangja" - IDS_AREA_RAI "Rai" - IDS_AREA_SE "Se" - IDS_AREA_SQUARE_CENTIMETERS "Square centimeters" - IDS_AREA_SQUARE_CHR "Square chr" - IDS_AREA_SQUARE_FATHOMS "Square fathoms" - IDS_AREA_SQUARE_FATHOMS_HUNGARY "Square fathoms (Hungary)" - IDS_AREA_SQUARE_FEET "Square feet" - IDS_AREA_SQUARE_INCHES "Square inches" - IDS_AREA_SQUARE_KILOMETERS "Square kilometers" - IDS_AREA_SQUARE_LAR "Square lar" - IDS_AREA_SQUARE_METER "Square meter" - IDS_AREA_SQUARE_MILES "Square miles" - IDS_AREA_SQUARE_MILLIMETERS "Square millimeters" - IDS_AREA_SQUARE_SHAKU "Square shaku" - IDS_AREA_SQUARE_TSUEN "Square tsuen" - IDS_AREA_SQUARE_VA "Square va" - IDS_AREA_SQUARE_YARD "Square yard" - IDS_AREA_TAN "Tan" - IDS_AREA_TSUBO "Tsubo" + IDS_AREA_ACRES "акр" + IDS_AREA_ACRES_BRAZIL "акр (бразильский)" + IDS_AREA_ACRES_FRANCE "акр (французский)" + IDS_AREA_ACRES_SCOTS "акр (шотландский)" + IDS_AREA_ACRES_US "акр (США)" + IDS_AREA_ARES "ар" + IDS_AREA_CHOU "чоу" + IDS_AREA_DANBO "дамбо" + IDS_AREA_HECTARES "гектар" + IDS_AREA_JEONGBO "дженгбо" + IDS_AREA_MORGEN_HUNGARY "морген (венгерский)" + IDS_AREA_MU "му" + IDS_AREA_PING "пин" + IDS_AREA_PYEONG "пён" + IDS_AREA_PYEONGBANGJA "пёнбанджа" + IDS_AREA_RAI "рай" + IDS_AREA_SE "хэйхо сяку" + IDS_AREA_SQUARE_CENTIMETERS "квадратный сантиметр" + IDS_AREA_SQUARE_CHR "квадратный ча" + IDS_AREA_SQUARE_FATHOMS "квадратный фатом" + IDS_AREA_SQUARE_FATHOMS_HUNGARY "квадратный фатом (венгерский)" + IDS_AREA_SQUARE_FEET "квадратный фут" + IDS_AREA_SQUARE_INCHES "квадратный дюйм" + IDS_AREA_SQUARE_KILOMETERS "квадратный километр" + IDS_AREA_SQUARE_LAR "квадратный лар" + IDS_AREA_SQUARE_METER "квадратный метр" + IDS_AREA_SQUARE_MILES "квадратная миля" + IDS_AREA_SQUARE_MILLIMETERS "квадратный миллиметр" + IDS_AREA_SQUARE_SHAKU "квадратный шаку" + IDS_AREA_SQUARE_TSUEN "квадратный тсуэн" + IDS_AREA_SQUARE_VA "квадратная ва" + IDS_AREA_SQUARE_YARD "квадратный ярд" + IDS_AREA_TAN "тан" + IDS_AREA_TSUBO "цубо" END // TYPES OF COMSUMPTIONS STRINGTABLE DISCARDABLE BEGIN - IDS_CONSUMPTION_KM_PER_L "Kilometer/liter" - IDS_CONSUMPTION_L_PER_100_KM "Liters/100 kilometers" - IDS_CONSUMPTION_MILES_GALLON_UK "Miles/gallon (UK)" - IDS_CONSUMPTION_MILES_GALLON_US "Miles/gallon (US)" + IDS_CONSUMPTION_KM_PER_L "километр/литр" + IDS_CONSUMPTION_L_PER_100_KM "литров/100 километров" + IDS_CONSUMPTION_MILES_GALLON_UK "миль/галлон (британский)" + IDS_CONSUMPTION_MILES_GALLON_US "миль/галлон (США)" END // TYPES OF CURRENCIES STRINGTABLE DISCARDABLE BEGIN - IDS_CURRENCY_AUSTRIAN_SCHILLING "Austrian schilling" - IDS_CURRENCY_BELGIAN_FRANC "Belgian franc" - IDS_CURRENCY_CYPRIOT_POUND "Cypriot pound" - IDS_CURRENCY_DEUTSCHE_MARK "Deutsche Mark" - IDS_CURRENCY_DUTCH_GUILDER "Dutch guilder" - IDS_CURRENCY_EURO "Euro" - IDS_CURRENCY_FINNISH_MARKKA "Finnish markka" - IDS_CURRENCY_FRENCH_FRANC "French franc" - IDS_CURRENCY_GREEK_DRACHMA "Greek Drachma" - IDS_CURRENCY_IRISH_POUND "Irish pound" - IDS_CURRENCY_ITALIAN_LIRA "Italian lira" - IDS_CURRENCY_LUXEMBOURG_FRANC "Luxembourg franc" - IDS_CURRENCY_MALTESE_LIRA "Maltese lira" - IDS_CURRENCY_PORTOGUESE_ESCUDO "Portoguese escudo" - IDS_CURRENCY_SLOVENIAN_TOLAR "Slovenian tolar" - IDS_CURRENCY_SPANISH_PESETA "Spanish peseta" + IDS_CURRENCY_AUSTRIAN_SCHILLING "Австралийский шиллинг" + IDS_CURRENCY_BELGIAN_FRANC "Бельгийский франк" + IDS_CURRENCY_CYPRIOT_POUND "Киприотский фунт" + IDS_CURRENCY_DEUTSCHE_MARK "Немецкая марка" + IDS_CURRENCY_DUTCH_GUILDER "Голландский гульден" + IDS_CURRENCY_EURO "Евро" + IDS_CURRENCY_FINNISH_MARKKA "Финская марка" + IDS_CURRENCY_FRENCH_FRANC "Французский франк" + IDS_CURRENCY_GREEK_DRACHMA "Греческая драхма" + IDS_CURRENCY_IRISH_POUND "Ирландский фунт" + IDS_CURRENCY_ITALIAN_LIRA "Итальянская лира" + IDS_CURRENCY_LUXEMBOURG_FRANC "Люксембургский франк" + IDS_CURRENCY_MALTESE_LIRA "Мальтийская лира" + IDS_CURRENCY_PORTOGUESE_ESCUDO "Португальское эскудо" + IDS_CURRENCY_SLOVENIAN_TOLAR "Словенский толар" + IDS_CURRENCY_SPANISH_PESETA "Испанская песета" END // TYPES OF ENERGIES STRINGTABLE DISCARDABLE BEGIN - IDS_ENERGY_15_C_CALORIES "15 ^C calories" - IDS_ENERGY_ERGS "Ergs" - IDS_ENERGY_IT_CALORIES "International Table calories" - IDS_ENERGY_JOULES "Joules" - IDS_ENERGY_KILOJOULES "Kilojoules" - IDS_ENERGY_KILOWATT_HOURS "Kilowatt hours" - IDS_ENERGY_NUTRITION_CALORIES "Nutrition calories" - IDS_ENERGY_TH_CALORIES "Thermochemical calorie" + IDS_ENERGY_15_C_CALORIES "калория патнадцатиградусная" + IDS_ENERGY_ERGS "эрг" + IDS_ENERGY_IT_CALORIES "калория международная" + IDS_ENERGY_JOULES "джоуль" + IDS_ENERGY_KILOJOULES "килоджоуль" + IDS_ENERGY_KILOWATT_HOURS "киловатт-час" + IDS_ENERGY_NUTRITION_CALORIES "калория пищевая" + IDS_ENERGY_TH_CALORIES "калория термохимическая" END // TYPES OF LENGTHS STRINGTABLE DISCARDABLE BEGIN - IDS_LENGTH_ANGSTROMS "Angstroms" - IDS_LENGTH_ASTRONOMILA_UNITS "Astronomila units" - IDS_LENGTH_BARLEYCORNS "Barleycorns" - IDS_LENGTH_CENTIMETERS "Centimeters" - IDS_LENGTH_CHAINS_UK "Chains (UK)" - IDS_LENGTH_CHI "Chi" - IDS_LENGTH_CHOU "Chou" - IDS_LENGTH_CHR "Chr" - IDS_LENGTH_CUN "Cun" - IDS_LENGTH_FATHOMS "Fathoms" - IDS_LENGTH_FATHOMS_HUNGARY "Fathoms (Hungary)" - IDS_LENGTH_FEET "Feet" - IDS_LENGTH_FURLONGS "Furlongs" - IDS_LENGTH_GAN "Gan" - IDS_LENGTH_HANDS "Hands" - IDS_LENGTH_HUNH "Hunh" - IDS_LENGTH_INCHES "Inches" - IDS_LENGTH_JA "Ja" - IDS_LENGTH_JEONG "Jeong" - IDS_LENGTH_KABIET "Kabiet" - IDS_LENGTH_KEN "Ken" - IDS_LENGTH_KEUB "Keub" - IDS_LENGTH_KILOMETERS "Kilometers" - IDS_LENGTH_LAR "Lar" - IDS_LENGTH_LIGHT_YEARS "Light years" - IDS_LENGTH_LINKS_UK "Links (UK)" - IDS_LENGTH_METERS "Meters" - IDS_LENGTH_MILES "Miles" - IDS_LENGTH_MILLIMETERS "Millimeters" - IDS_LENGTH_NAUTICAL_MILES "Nautical miles" - IDS_LENGTH_NIEU "Nieu" - IDS_LENGTH_PARSECS "Parsecs" - IDS_LENGTH_PICAS "Picas" - IDS_LENGTH_RI_JAPAN "Ri (Japan)" - IDS_LENGTH_RI_KOREA "Ri (Korea)" - IDS_LENGTH_SAWK "Sawk" - IDS_LENGTH_SEN "Sen" - IDS_LENGTH_SHAKU "Shaku" - IDS_LENGTH_SPAN "Span" - IDS_LENGTH_SUN "Sun" - IDS_LENGTH_TSUEN "Tsuen" - IDS_LENGTH_VA "Va" - IDS_LENGTH_YARDS "Yards" - IDS_LENGTH_YOTE "Yote" - IDS_LENGTH_ZHANG "Zhang" + IDS_LENGTH_ANGSTROMS "ангстрем" + IDS_LENGTH_ASTRONOMILA_UNITS "астрономическая еденица" + IDS_LENGTH_BARLEYCORNS "барлейкорн" + IDS_LENGTH_CENTIMETERS "сантиметр" + IDS_LENGTH_CHAINS_UK "чейн (британский)" + IDS_LENGTH_CHI "чи" + IDS_LENGTH_CHOU "чоу" + IDS_LENGTH_CHR "ча" + IDS_LENGTH_CUN "цунь" + IDS_LENGTH_FATHOMS "фатом" + IDS_LENGTH_FATHOMS_HUNGARY "фатом (венгерский)" + IDS_LENGTH_FEET "фут" + IDS_LENGTH_FURLONGS "фарлонг" + IDS_LENGTH_GAN "гань" + IDS_LENGTH_HANDS "ладонь" + IDS_LENGTH_HUNH "ханх" + IDS_LENGTH_INCHES "дюйм" + IDS_LENGTH_JA "я" + IDS_LENGTH_JEONG "джеонг" + IDS_LENGTH_KABIET "кабьет" + IDS_LENGTH_KEN "кен" + IDS_LENGTH_KEUB "кеуб" + IDS_LENGTH_KILOMETERS "километр" + IDS_LENGTH_LAR "лар" + IDS_LENGTH_LIGHT_YEARS "световой год" + IDS_LENGTH_LINKS_UK "линк (британский)" + IDS_LENGTH_METERS "метр" + IDS_LENGTH_MILES "миля" + IDS_LENGTH_MILLIMETERS "миллиметр" + IDS_LENGTH_NAUTICAL_MILES "морская миля" + IDS_LENGTH_NIEU "ньё" + IDS_LENGTH_PARSECS "парсек" + IDS_LENGTH_PICAS "пика" + IDS_LENGTH_RI_JAPAN "ри (японская)" + IDS_LENGTH_RI_KOREA "ри (корейская)" + IDS_LENGTH_SAWK "соук" + IDS_LENGTH_SEN "сен" + IDS_LENGTH_SHAKU "шаку" + IDS_LENGTH_SPAN "спан" + IDS_LENGTH_SUN "сан" + IDS_LENGTH_TSUEN "тсуэн" + IDS_LENGTH_VA "ва" + IDS_LENGTH_YARDS "ярд" + IDS_LENGTH_YOTE "йоут" + IDS_LENGTH_ZHANG "чжан" END // TYPES OF POWERS STRINGTABLE DISCARDABLE BEGIN - IDS_POWER_HORSEPOWER "Horsepower" - IDS_POWER_KILOWATTS "Kilowatts" - IDS_POWER_MEGAWATTS "Megawatts" - IDS_POWER_WATTS "Watts" + IDS_POWER_HORSEPOWER "лошадинная сила" + IDS_POWER_KILOWATTS "киловатт" + IDS_POWER_MEGAWATTS "мегаватт" + IDS_POWER_WATTS "ватт" END // TYPE OF PRESSURES STRINGTABLE DISCARDABLE BEGIN - IDS_PRESSURE_ATMOSPHERES "Atmospheres" - IDS_PRESSURE_BARS "Bars" - IDS_PRESSURE_MM_OF_MERCURY "Millimeters of mercury" - IDS_PRESSURE_PASCALS "Pascals" - IDS_PRESSURE_PSI "Pounds-force per square inch" + IDS_PRESSURE_ATMOSPHERES "атмосфера (физическая)" + IDS_PRESSURE_BARS "бар" + IDS_PRESSURE_MM_OF_MERCURY "миллиметр ртутного столба" + IDS_PRESSURE_PASCALS "паскаль" + IDS_PRESSURE_PSI "фунт на квадратный дюйм" END // TYPES OF TEMPERATURES STRINGTABLE DISCARDABLE BEGIN - IDS_TEMPERATURE_CELSIUS "Celsius" - IDS_TEMPERATURE_FAHRENHEIT "Fahrenheit" - IDS_TEMPERATURE_KELVIN "Kelvin" - IDS_TEMPERATURE_RANKINE "Rankine" + IDS_TEMPERATURE_CELSIUS "градус (по шкале Цельсия)" + IDS_TEMPERATURE_FAHRENHEIT "градус (по шкале Фаренгейта)" + IDS_TEMPERATURE_KELVIN "градус (по шкале Кельвина)" + IDS_TEMPERATURE_RANKINE "градус (по шкале Rankine)" END // TYPES OF VELOCITIES STRINGTABLE DISCARDABLE BEGIN - IDS_VELOCITY_FEET_HOUR "Feet/hour" - IDS_VELOCITY_KILOMETERS_HOUR "Kilometers/hour" - IDS_VELOCITY_KNOTS "Knots" - IDS_VELOCITY_MACH "Mach" - IDS_VELOCITY_METERS_SECOND "Meters/second" - IDS_VELOCITY_MILES_HOUR "Miles/hour" + IDS_VELOCITY_FEET_HOUR "фут в час" + IDS_VELOCITY_KILOMETERS_HOUR "километр/час" + IDS_VELOCITY_KNOTS "узел" + IDS_VELOCITY_MACH "мах" + IDS_VELOCITY_METERS_SECOND "метр в секунду" + IDS_VELOCITY_MILES_HOUR "миль в час" END // TYPES OF VOLUMES STRINGTABLE DISCARDABLE BEGIN - IDS_VOLUME_BARRELS_UK "Barrels (UK)" - IDS_VOLUME_BARRELS_OIL "Barrels oil" - IDS_VOLUME_BUN "Bun" - IDS_VOLUME_BUSHELS_UK "Bushels (UK)" - IDS_VOLUME_BUSHELS_US "Bushels (US)" - IDS_VOLUME_CUBIC_CENTIMETERS "Cubic centimeters" - IDS_VOLUME_CUBIC_FEET "Cubic feet" - IDS_VOLUME_CUBIC_INCHES "Cubic inches" - IDS_VOLUME_CUBIC_METERS "Cubic meters" - IDS_VOLUME_CUBIC_YARDS "Cubic yards" - IDS_VOLUME_DOE "Doe" - IDS_VOLUME_FLUID_OUNCES_UK "Fluid ounces (UK)" - IDS_VOLUME_FLUID_OUNCES_US "Fluid ounces (US)" - IDS_VOLUME_GALLONS_UK "Gallons (UK)" - IDS_VOLUME_GALLONS_DRY_US "Gallons, dry (US)" - IDS_VOLUME_GALLONS_LIQUID_US "Gallons, liquid (US)" - IDS_VOLUME_GOU "Gou" - IDS_VOLUME_HOP "Hop" - IDS_VOLUME_ICCE "Icce" - IDS_VOLUME_KWIAN "Kwian" - IDS_VOLUME_LITERS "Liters" - IDS_VOLUME_MAL "Mal" - IDS_VOLUME_MILLILITERS "Milliliters" - IDS_VOLUME_PINTS_UK "Pints (UK)" - IDS_VOLUME_PINTS_DRY_US "Pints, dry (US)" - IDS_VOLUME_PINTS_LIQUID_US "Pints, liquid (US)" - IDS_VOLUME_QUARTS_UK "Quarts (UK)" - IDS_VOLUME_QUARTS_DRY_US "Quarts, dry (US)" - IDS_VOLUME_QUARTS_LIQUID_US "Quarts, liquid (US)" - IDS_VOLUME_SEKI "Seki" - IDS_VOLUME_SYOU "Syou" - IDS_VOLUME_TANANLOUNG "Tananloung" - IDS_VOLUME_TANG "Tang" - IDS_VOLUME_TO "To" + IDS_VOLUME_BARRELS_UK "баррель (британский)" + IDS_VOLUME_BARRELS_OIL "баррель нефтяной" + IDS_VOLUME_BUN "бун" + IDS_VOLUME_BUSHELS_UK "бушель (британский)" + IDS_VOLUME_BUSHELS_US "бушель (США)" + IDS_VOLUME_CUBIC_CENTIMETERS "кубический сантиметр" + IDS_VOLUME_CUBIC_FEET "кубический фут" + IDS_VOLUME_CUBIC_INCHES "кубический дюйм" + IDS_VOLUME_CUBIC_METERS "кубический метр" + IDS_VOLUME_CUBIC_YARDS "кубический ярд" + IDS_VOLUME_DOE "то" + IDS_VOLUME_FLUID_OUNCES_UK "жидкая унция (британская)" + IDS_VOLUME_FLUID_OUNCES_US "жидкая унция (США)" + IDS_VOLUME_GALLONS_UK "галлон (британский)" + IDS_VOLUME_GALLONS_DRY_US "галлон (для жидкостей, США)" + IDS_VOLUME_GALLONS_LIQUID_US "галлон (для сухих веществ, США)" + IDS_VOLUME_GOU "гоу" + IDS_VOLUME_HOP "хоп" + IDS_VOLUME_ICCE "иккэ" + IDS_VOLUME_KWIAN "квиан" + IDS_VOLUME_LITERS "литр" + IDS_VOLUME_MAL "маль" + IDS_VOLUME_MILLILITERS "миллилитр" + IDS_VOLUME_PINTS_UK "пинта (британская)" + IDS_VOLUME_PINTS_DRY_US "пинта (для жидкостей, США)" + IDS_VOLUME_PINTS_LIQUID_US "пинта (для сухих веществ, США)" + IDS_VOLUME_QUARTS_UK "кварта (британская)" + IDS_VOLUME_QUARTS_DRY_US "кварта (для жидкостей, США)" + IDS_VOLUME_QUARTS_LIQUID_US "кварта (для сухих веществ, США)" + IDS_VOLUME_SEKI "сэки" + IDS_VOLUME_SYOU "сё" + IDS_VOLUME_TANANLOUNG "тананлунг" + IDS_VOLUME_TANG "тан" + IDS_VOLUME_TO "ту" END // TYPES OF WEIGHTS STRINGTABLE DISCARDABLE BEGIN - IDS_WEIGHT_BAHT "Baht" - IDS_WEIGHT_CARATS "Carats" - IDS_WEIGHT_CHUNG "Chung" - IDS_WEIGHT_DON "Don" - IDS_WEIGHT_GEUN "Geun" - IDS_WEIGHT_GRAMS "Grams" - IDS_WEIGHT_GWAN "Gwan" - IDS_WEIGHT_HARB "Harb" - IDS_WEIGHT_JIN_CHINA "Jin (China)" - IDS_WEIGHT_JIN_TAIWAN "Jin (Taiwan)" - IDS_WEIGHT_KAN "Kan" - IDS_WEIGHT_KILOGRAMS "Kilograms" - IDS_WEIGHT_KIN "Kin" - IDS_WEIGHT_LIANG_CHINA "Liang (China)" - IDS_WEIGHT_LIANG_TAIWAN "Liang (Taiwan)" - IDS_WEIGHT_MONME "Monme" - IDS_WEIGHT_OUNCES_AVOIRDUPOIS "Ounces, avoirdupois" - IDS_WEIGHT_OUNCES_TROY "Ounces, troy" - IDS_WEIGHT_POUNDS "Pounds" - IDS_WEIGHT_QUINTAL_METRIC "Quintal (metric)" - IDS_WEIGHT_SALOUNG "Saloung" - IDS_WEIGHT_STONES "Stones" - IDS_WEIGHT_TAMLUNG "Tamlung" - IDS_WEIGHT_TONNES "Tonnes" - IDS_WEIGHT_TONS_UK "Tons (UK)" - IDS_WEIGHT_TONS_US "Tons (US)" + IDS_WEIGHT_BAHT "бат" + IDS_WEIGHT_CARATS "карат" + IDS_WEIGHT_CHUNG "чанг" + IDS_WEIGHT_DON "дон" + IDS_WEIGHT_GEUN "джин" + IDS_WEIGHT_GRAMS "грамм" + IDS_WEIGHT_GWAN "кван" + IDS_WEIGHT_HARB "хап" + IDS_WEIGHT_JIN_CHINA "джин (китайский)" + IDS_WEIGHT_JIN_TAIWAN "джин (тайвань)" + IDS_WEIGHT_KAN "канн" + IDS_WEIGHT_KILOGRAMS "килограмм" + IDS_WEIGHT_KIN "кын" + IDS_WEIGHT_LIANG_CHINA "лианг (китайский)" + IDS_WEIGHT_LIANG_TAIWAN "лианг (тайвань)" + IDS_WEIGHT_MONME "монм" + IDS_WEIGHT_OUNCES_AVOIRDUPOIS "унция (американская)" + IDS_WEIGHT_OUNCES_TROY "унция (тройская)" + IDS_WEIGHT_POUNDS "фунт" + IDS_WEIGHT_QUINTAL_METRIC "квинтал (метрический)" + IDS_WEIGHT_SALOUNG "салунг" + IDS_WEIGHT_STONES "стоун" + IDS_WEIGHT_TAMLUNG "тамлунг" + IDS_WEIGHT_TONNES "тонна" + IDS_WEIGHT_TONS_UK "тонна (UK)" + IDS_WEIGHT_TONS_US "тонна (US)" END diff --git a/reactos/base/applications/calc/resource.rc b/reactos/base/applications/calc/resource.rc index 15df7e98c35..b3aac73edd7 100644 --- a/reactos/base/applications/calc/resource.rc +++ b/reactos/base/applications/calc/resource.rc @@ -47,7 +47,7 @@ IDB_BITMAP_ROS BITMAP DISCARDABLE "res/ROS_logo.bmp" #include "lang/es-ES.rc" #include "lang/it-IT.rc" #include "lang/ko-KR.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" diff --git a/reactos/base/applications/charmap/lang/nb-NO.rc b/reactos/base/applications/charmap/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/charmap/lang/nb-NO.rc rename to reactos/base/applications/charmap/lang/no-NO.rc diff --git a/reactos/base/applications/charmap/rsrc.rc b/reactos/base/applications/charmap/rsrc.rc index d0ff68182e1..14d1406a94a 100644 --- a/reactos/base/applications/charmap/rsrc.rc +++ b/reactos/base/applications/charmap/rsrc.rc @@ -16,7 +16,7 @@ IDI_ICON ICON "res/charmap.ico" #include "lang/it-IT.rc" #include "lang/ko-KR.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" diff --git a/reactos/base/applications/cmdutils/find/lang/no-NO.rc b/reactos/base/applications/cmdutils/find/lang/no-NO.rc new file mode 100644 index 00000000000..d564684f86f --- /dev/null +++ b/reactos/base/applications/cmdutils/find/lang/no-NO.rc @@ -0,0 +1,17 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +STRINGTABLE DISCARDABLE +BEGIN + +IDS_USAGE, "FINN: Skriv alle linjene for filen som inneholder en streng.\n\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] \"streng\" [ fil... ]\n\ + /C Teller nummer av linjer som inneholder strenger\n\ + /I Ignorere sak\n\ + /N Nummer viste linjer, start med 1\n\ + /V Skriv linjer som ikke inneholder en streng" + +IDS_NO_SUCH_FILE, "FINN: %s: Ingen filer\n" + +IDS_CANNOT_OPEN, "FINN: %s: Kan ikke еpne filen\n" + +END diff --git a/reactos/base/applications/cmdutils/find/rsrc.rc b/reactos/base/applications/cmdutils/find/rsrc.rc index d753dc1cd6a..c665efc8b44 100644 --- a/reactos/base/applications/cmdutils/find/rsrc.rc +++ b/reactos/base/applications/cmdutils/find/rsrc.rc @@ -11,6 +11,7 @@ #include "lang/fr-FR.rc" #include "lang/it-IT.rc" #include "lang/lt-LT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" #include "lang/ru-RU.rc" diff --git a/reactos/base/applications/cmdutils/more/lang/no-NO.rc b/reactos/base/applications/cmdutils/more/lang/no-NO.rc new file mode 100644 index 00000000000..61ccaa5269d --- /dev/null +++ b/reactos/base/applications/cmdutils/more/lang/no-NO.rc @@ -0,0 +1,15 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +STRINGTABLE DISCARDABLE +BEGIN + IDS_USAGE, "Vis data side-etter-side pе skjermen.\n\n\ + MORE < [Stasjon:][Mappe]Filnavn\n\ + command | MORE \n\ + MORE [Stasjon:][Mappe]Filenavn\n\n\ + [Stasjon:][Mappe]Filnavn En fil, Velg innhold som skal vises.\n\ + Command\t\t En kommando, Velg output som skal vises.\n\n\ + At the prompt ""-- Fortsett --"" du kan trykke en tast for е vise neste side.\n" + + IDS_CONTINUE, " -- Fortsett (100%) -- " + IDS_FILE_ACCESS, "Fеr ikke tilgang til filen %s." +END diff --git a/reactos/base/applications/cmdutils/more/rsrc.rc b/reactos/base/applications/cmdutils/more/rsrc.rc index 1a88878e6ee..7ef6cef3090 100644 --- a/reactos/base/applications/cmdutils/more/rsrc.rc +++ b/reactos/base/applications/cmdutils/more/rsrc.rc @@ -11,6 +11,7 @@ #include "lang/fr-FR.rc" #include "lang/it-IT.rc" #include "lang/lt-LT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/base/applications/dxdiag/lang/nb-NO.rc b/reactos/base/applications/dxdiag/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/dxdiag/lang/nb-NO.rc rename to reactos/base/applications/dxdiag/lang/no-NO.rc diff --git a/reactos/base/applications/dxdiag/rsrc.rc b/reactos/base/applications/dxdiag/rsrc.rc index 098752cc6a9..8e076dfd33d 100644 --- a/reactos/base/applications/dxdiag/rsrc.rc +++ b/reactos/base/applications/dxdiag/rsrc.rc @@ -9,7 +9,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/en-US.rc" #include "lang/es-ES.rc" #include "lang/fr-FR.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/base/applications/games/solitaire/lang/nb-NO.rc b/reactos/base/applications/games/solitaire/lang/no-NO.rc similarity index 73% rename from reactos/base/applications/games/solitaire/lang/nb-NO.rc rename to reactos/base/applications/games/solitaire/lang/no-NO.rc index 89c2da5771a..8eea320beb7 100644 --- a/reactos/base/applications/games/solitaire/lang/nb-NO.rc +++ b/reactos/base/applications/games/solitaire/lang/no-NO.rc @@ -15,22 +15,22 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL IDD_OPTIONS DIALOGEX DISCARDABLE 0, 0, 186, 118 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_SHELLFONT -CAPTION "Options" +CAPTION "Innstillinger" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Cards", -1, 7, 7, 65, 40 - AUTORADIOBUTTON "Draw &One", IDC_OPT_DRAWONE, 14, 19, 52, 10, WS_GROUP | WS_TABSTOP - AUTORADIOBUTTON "Draw &Three", IDC_OPT_DRAWTHREE, 14, 32, 52, 10 + GROUPBOX "Kort", -1, 7, 7, 65, 40 + AUTORADIOBUTTON "Velg &et", IDC_OPT_DRAWONE, 14, 19, 52, 10, WS_GROUP | WS_TABSTOP + AUTORADIOBUTTON "Velg &tre", IDC_OPT_DRAWTHREE, 14, 32, 52, 10 - AUTOCHECKBOX "&Show Time", IDC_OPT_SHOWTIME, 7 ,51 ,65 ,10, WS_TABSTOP | WS_DISABLED - AUTOCHECKBOX "S&tatus bar", IDC_OPT_STATUSBAR, 7, 66, 64, 10, WS_TABSTOP + AUTOCHECKBOX "&Vis tid", IDC_OPT_SHOWTIME, 7 ,51 ,65 ,10, WS_TABSTOP | WS_DISABLED + AUTOCHECKBOX "S&tatuslinje", IDC_OPT_STATUSBAR, 7, 66, 64, 10, WS_TABSTOP DEFPUSHBUTTON "OK", IDOK, 35, 97, 50, 14 PUSHBUTTON "Avbryt", IDCANCEL, 101, 97, 50, 14 END IDD_CARDBACK DIALOGEX 6, 6, 221, 96 -CAPTION "Select Card Back" +CAPTION "Velg kort" FONT 8, "MS Shell Dlg" STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_SHELLFONT BEGIN @@ -39,7 +39,7 @@ BEGIN CONTROL "", IDC_CARDBACK3, "Static", SS_NOTIFY, 112, 7, 50, 61 CONTROL "", IDC_CARDBACK4, "Static", SS_NOTIFY, 166, 7, 50, 61 DEFPUSHBUTTON "OK", IDOK, 104, 77, 54, 13 - PUSHBUTTON "Cancel", IDCANCEL, 162, 77, 54, 13 + PUSHBUTTON "Avbryt", IDCANCEL, 162, 77, 54, 13 END @@ -47,10 +47,10 @@ END STRINGTABLE BEGIN - IDS_SOL_NAME "Solitaire" - IDS_SOL_ABOUT "Solitaire by J Brown\n\nCardLib version 1.0." - IDS_SOL_QUIT "Quit the current game?" - IDS_SOL_WIN "Congratulations, you win!!" + IDS_SOL_NAME "Kabal" + IDS_SOL_ABOUT "Kabal av J Brown\n\nCardLib versjon 1.0." + IDS_SOL_QUIT "Slutt nеvжrende spill?" + IDS_SOL_WIN "Gratulerer, du vant!!" END diff --git a/reactos/base/applications/games/solitaire/rsrc.rc b/reactos/base/applications/games/solitaire/rsrc.rc index 88f2c096a4d..7971eaaad07 100644 --- a/reactos/base/applications/games/solitaire/rsrc.rc +++ b/reactos/base/applications/games/solitaire/rsrc.rc @@ -17,7 +17,7 @@ IDI_SOLITAIRE ICON DISCARDABLE "solitaire.ico" #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/base/applications/games/winemine/lang/nb-NO.rc b/reactos/base/applications/games/winemine/lang/no-NO.rc similarity index 92% rename from reactos/base/applications/games/winemine/lang/nb-NO.rc rename to reactos/base/applications/games/winemine/lang/no-NO.rc index 9ca7ff13306..99620f3b157 100644 --- a/reactos/base/applications/games/winemine/lang/nb-NO.rc +++ b/reactos/base/applications/games/winemine/lang/no-NO.rc @@ -4,14 +4,14 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL STRINGTABLE BEGIN - IDS_SECONDS, "seconds" + IDS_SECONDS, "Sekunder" IDS_NOBODY, "Ingen" - IDS_ABOUT, "by Joshua Thielen and ReactOS developers" + IDS_ABOUT, "av Joshua Thielen og ReactOS utviklere" END IDM_WINEMINE MENU DISCARDABLE BEGIN - POPUP "&Game" + POPUP "&Spill" BEGIN MENUITEM "&Nytt\tF2", IDM_NEW MENUITEM SEPARATOR @@ -48,12 +48,12 @@ BEGIN LTEXT "", IDC_NAME2, 132, 30, 55, 8 LTEXT "", IDC_NAME3, 132, 40, 55, 8 DEFPUSHBUTTON "OK", IDOK, 127, 57, 50, 15 - PUSHBUTTON "&Reset Scores", IDRESET, 18, 57, 67, 15 + PUSHBUTTON "&Nullstill poeng", IDRESET, 18, 57, 67, 15 END IDD_CONGRATS DIALOGEX DISCARDABLE 0, 0, 160, 60 STYLE DS_MODALFRAME | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP | DS_SHELLFONT -CAPTION "gratulerer!" +CAPTION "Gratulerer!" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Skriv inn navnet ditt", IDIGNORE, 25, 10, 150, 10 @@ -63,7 +63,7 @@ END IDD_CUSTOM DIALOGEX DISCARDABLE 0, 0, 139, 80 STYLE DS_MODALFRAME | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP | DS_SHELLFONT -CAPTION "Custom Game" +CAPTION "Tilpasse spill" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Hшyde:", IDNONE, 5, 15, 43, 10 diff --git a/reactos/base/applications/games/winemine/rsrc.rc b/reactos/base/applications/games/winemine/rsrc.rc index 7c05121b4a2..bc9d766cfed 100644 --- a/reactos/base/applications/games/winemine/rsrc.rc +++ b/reactos/base/applications/games/winemine/rsrc.rc @@ -29,7 +29,7 @@ IDB_MINES BITMAP MOVEABLE "rc/mines.bmp" #include "lang/it-IT.rc" #include "lang/ko-KR.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" diff --git a/reactos/base/applications/kbswitch/lang/nb-NO.rc b/reactos/base/applications/kbswitch/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/kbswitch/lang/nb-NO.rc rename to reactos/base/applications/kbswitch/lang/no-NO.rc diff --git a/reactos/base/applications/kbswitch/rsrc.rc b/reactos/base/applications/kbswitch/rsrc.rc index 4754df4ecc9..b8eb13b6888 100644 --- a/reactos/base/applications/kbswitch/rsrc.rc +++ b/reactos/base/applications/kbswitch/rsrc.rc @@ -5,7 +5,7 @@ #include "lang/es-ES.rc" #include "lang/fr-FR.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/base/applications/logoff/lang/nb-NO.rc b/reactos/base/applications/logoff/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/logoff/lang/nb-NO.rc rename to reactos/base/applications/logoff/lang/no-NO.rc diff --git a/reactos/base/applications/logoff/rsrc.rc b/reactos/base/applications/logoff/rsrc.rc index 3594e0de1b0..57c6e127aec 100644 --- a/reactos/base/applications/logoff/rsrc.rc +++ b/reactos/base/applications/logoff/rsrc.rc @@ -12,7 +12,7 @@ #include "lang/it-IT.rc" #include "lang/ko-KR.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/base/applications/mmc/lang/nb_NO.rc b/reactos/base/applications/mmc/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/mmc/lang/nb_NO.rc rename to reactos/base/applications/mmc/lang/no-NO.rc diff --git a/reactos/base/applications/mmc/rsrc.rc b/reactos/base/applications/mmc/rsrc.rc index c369698d59a..7e30904c6fd 100644 --- a/reactos/base/applications/mmc/rsrc.rc +++ b/reactos/base/applications/mmc/rsrc.rc @@ -12,7 +12,7 @@ #include "lang/it-IT.rc" #include "lang/ko-KR.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" #include "lang/ru-RU.rc" diff --git a/reactos/base/applications/msconfig/lang/fr-FR.rc b/reactos/base/applications/msconfig/lang/fr-FR.rc index 05aa845c0cd..e116455ce87 100644 --- a/reactos/base/applications/msconfig/lang/fr-FR.rc +++ b/reactos/base/applications/msconfig/lang/fr-FR.rc @@ -156,7 +156,7 @@ BEGIN IDS_TOOLS_REGEDIT_CMD "regedit.exe" IDS_TOOLS_SYSDM_NAME "Propriйtйs systиme" - IDS_TOOLS_SYSDM_DESCR "Affiche/modifie des information а propos de l'ordinateur." + IDS_TOOLS_SYSDM_DESCR "Affiche/modifie des informations а propos de l'ordinateur." IDS_TOOLS_SYSDM_CMD "control.exe" IDS_TOOLS_SYSDM_PARAM "sysdm.cpl" diff --git a/reactos/base/applications/msconfig/lang/nb-NO.rc b/reactos/base/applications/msconfig/lang/no-NO.rc similarity index 81% rename from reactos/base/applications/msconfig/lang/nb-NO.rc rename to reactos/base/applications/msconfig/lang/no-NO.rc index f888b4d62f7..0229bcfd6c2 100644 --- a/reactos/base/applications/msconfig/lang/nb-NO.rc +++ b/reactos/base/applications/msconfig/lang/no-NO.rc @@ -4,7 +4,7 @@ IDD_MSCONFIG_DIALOG DIALOGEX DISCARDABLE 0, 0, 378, 220 STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME -CAPTION "System configuration program" +CAPTION "Systemkonfigurasjon" FONT 8, "MS Shell Dlg" BEGIN CONTROL "kategori1",IDC_TAB,"SysTabControl32",WS_TABSTOP,2,2,374,195 @@ -28,18 +28,18 @@ STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN FONT 8, "MS Shell Dlg" BEGIN CONTROL "", 237, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_EDITLABELS | TVS_SHOWSELALWAYS | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 2, 1, 280, 148 - PUSHBUTTON "Move &Up", IDC_BTN_SYSTEM_UP, 290, 5, 66, 14 - PUSHBUTTON "Move &Down", IDC_BTN_SYSTEM_DOWN, 290, 25, 66, 14 + PUSHBUTTON "Flytt &opp", IDC_BTN_SYSTEM_UP, 290, 5, 66, 14 + PUSHBUTTON "Flytt &ned", IDC_BTN_SYSTEM_DOWN, 290, 25, 66, 14 - PUSHBUTTON "&Enable", IDC_BTN_SYSTEM_ENABLE, 290, 50, 66, 14 - PUSHBUTTON "D&isable", IDC_BTN_SYSTEM_DISABLE, 290, 70, 66, 14 + PUSHBUTTON "&Aktiver", IDC_BTN_SYSTEM_ENABLE, 290, 50, 66, 14 + PUSHBUTTON "D&eaktiver", IDC_BTN_SYSTEM_DISABLE, 290, 70, 66, 14 - PUSHBUTTON "&Find", IDC_BTN_SYSTEM_FIND, 290, 95, 66, 14 - PUSHBUTTON "&New", IDC_BTN_SYSTEM_NEW, 290, 115, 66, 14 - PUSHBUTTON "Edi&t", IDC_BTN_SYSTEM_EDIT, 290, 135, 66, 14 + PUSHBUTTON "&Finn", IDC_BTN_SYSTEM_FIND, 290, 95, 66, 14 + PUSHBUTTON "&Ny", IDC_BTN_SYSTEM_NEW, 290, 115, 66, 14 + PUSHBUTTON "Re&diger", IDC_BTN_SYSTEM_EDIT, 290, 135, 66, 14 - PUSHBUTTON "Ena&ble All", IDC_BTN_SYSTEM_ACTIVATE, 123, 155, 66, 14 - PUSHBUTTON "Disable A&ll",IDC_BTN_SYSTEM_DEACTIVATE, 195, 155, 66, 14 + PUSHBUTTON "A&ktiver Alt", IDC_BTN_SYSTEM_ACTIVATE, 123, 155, 66, 14 + PUSHBUTTON "Dektiver A<",IDC_BTN_SYSTEM_DEACTIVATE, 195, 155, 66, 14 END IDD_TOOLS_PAGE DIALOGEX DISCARDABLE 0, 0, 362, 175 @@ -83,11 +83,11 @@ BEGIN PUSHBUTTON "Flytt &Opp", IDC_BTN_MOVE_UP_BOOT_OPTION, 190, 65, 70, 12 PUSHBUTTON "Flytt &Ned", IDC_BTN_MOVE_DOWN_BOOT_OPTION, 280, 65, 70, 12 GROUPBOX "Oppstarts alternativer", -1, 10, 80, 250, 90,0,WS_EX_TRANSPARENT - CHECKBOX "/SA&FEBOOT", IDC_CBX_SAFE_BOOT, 15, 90, 50, 10 - CHECKBOX "/&NOGUIBOOT", IDC_CBX_NO_GUI_BOOT, 15, 105, 55, 10 - CHECKBOX "/&BOOTLOG", IDC_CBX_BOOT_LOG, 15, 120, 50, 10 - CHECKBOX "/BAS&EVIDEO", IDC_CBX_BASE_VIDEO, 15, 135, 55, 10 - CHECKBOX "/S&OS", IDC_CBX_SOS, 15, 150, 50, 10 + CHECKBOX "/Sik&ker oppstart", IDC_CBX_SAFE_BOOT, 15, 90, 50, 10 + CHECKBOX "/&Ingen grafisk oppstart", IDC_CBX_NO_GUI_BOOT, 15, 105, 55, 10 + CHECKBOX "/&Oppstart logg", IDC_CBX_BOOT_LOG, 15, 120, 50, 10 + CHECKBOX "/Enkel& grafikk", IDC_CBX_BASE_VIDEO, 15, 135, 55, 10 + CHECKBOX "/H&jelp", IDC_CBX_SOS, 15, 150, 50, 10 PUSHBUTTON "Av&anserte alternativer...", IDC_BTN_ADVANCED_OPTIONS, 100, 150, 70, 12 LTEXT "&Tidsavbrudd:", -1, 280, 91, 30, 10 EDITTEXT IDC_TXT_BOOT_TIMEOUT, 310, 90, 25, 12, ES_LEFT @@ -98,21 +98,21 @@ IDD_FREELDR_ADVANCED_PAGE DIALOGEX DISCARDABLE 0, 0, 175, 175 STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN FONT 8, "MS Shell Dlg" BEGIN - CHECKBOX "/&MAXMEM=", IDC_CBX_MAX_MEM, 10, 10, 50, 10 + CHECKBOX "/&Maksimalt minnestшrrelse:=", IDC_CBX_MAX_MEM, 10, 10, 50, 10 EDITTEXT IDC_TXT_MAX_MEM, 80, 10, 60, 12 CONTROL "",IDC_SCR_MAX_MEM, "msctls_updown32", 0x50000000, 140, 10, 11, 11 - CHECKBOX "/&NUMPROC=", IDC_CBX_NUM_PROC, 10, 25, 50, 10 + CHECKBOX "/&Antall prosessorer:=", IDC_CBX_NUM_PROC, 10, 25, 50, 10 COMBOBOX IDC_DRP_NUM_PROC, 80, 25, 60, 10, CBS_DROPDOWNLIST | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP - CHECKBOX "/&PCILOCK", IDC_CBX_PCI_LOCK, 10, 40, 50, 10 + CHECKBOX "/&PCI lеs", IDC_CBX_PCI_LOCK, 10, 40, 50, 10 CHECKBOX "/P&ROFIL", IDC_CBX_PROFILE, 10, 55, 50, 10 CHECKBOX "/&IRQ", IDC_CBX_IRQ, 10, 70, 40, 12 EDITTEXT IDC_TXT_IRQ, 80, 70, 60, 12, ES_LEFT - CHECKBOX "/&DEBUG", IDC_CBX_DEBUG, 10, 85, 40, 10 - CHECKBOX "/D&EBUGPORT", IDC_CBX_DEBUG_PORT, 20, 100, 60, 10 + CHECKBOX "/&Globale feilsшkingsinnstillinger", IDC_CBX_DEBUG, 10, 85, 40, 10 + CHECKBOX "/F&eilsшkingsport:", IDC_CBX_DEBUG_PORT, 20, 100, 60, 10 COMBOBOX IDC_DRP_DEBUG_PORT, 80, 100, 60, 10, CBS_DROPDOWNLIST | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP - CHECKBOX "/&BAUDRATE", IDC_CBX_BAUD_RATE, 20, 115, 50, 10 + CHECKBOX "/&Overfшringshastighet", IDC_CBX_BAUD_RATE, 20, 115, 50, 10 COMBOBOX IDC_DRP_DRP_BAUD_RATE, 80, 115, 60, 10, CBS_DROPDOWNLIST | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP - CHECKBOX "/&CHANNEL", IDC_CBX_CHANNEL, 20, 130, 50, 10 + CHECKBOX "/&Kanal", IDC_CBX_CHANNEL, 20, 130, 50, 10 EDITTEXT IDC_TXT_CHANNEL, 80, 130, 60, 12, ES_LEFT CONTROL "",IDC_SCR_CHANNEL, "msctls_updown32", 0x50000000, 140, 130, 11, 11 PUSHBUTTON "Ok", IDC_OK, 20, 160, 50, 12 @@ -121,7 +121,7 @@ END STRINGTABLE DISCARDABLE BEGIN - IDS_MSCONFIG "System konfigurasjon program" + IDS_MSCONFIG "Systemkonfigurasjon" IDS_TAB_GENERAL "Generelt" IDS_TAB_SYSTEM "SYSTEM.INI" IDS_TAB_FREELDR "FREELDR.INI" diff --git a/reactos/base/applications/msconfig/lang/ru-RU.rc b/reactos/base/applications/msconfig/lang/ru-RU.rc index 159e4168855..901e11b3552 100644 --- a/reactos/base/applications/msconfig/lang/ru-RU.rc +++ b/reactos/base/applications/msconfig/lang/ru-RU.rc @@ -145,11 +145,11 @@ BEGIN IDS_TOOLS_COLUMN_NAME "Название" IDS_TOOLS_COLUMN_DESCR "Описание" - IDS_TOOLS_CMD_NAME "Комндная строка" + IDS_TOOLS_CMD_NAME "Командная строка" IDS_TOOLS_CMD_DESCR "" IDS_TOOLS_CMD_CMD "cmd.exe" - IDS_TOOLS_INFO_NAME "Version" + IDS_TOOLS_INFO_NAME "О программе" IDS_TOOLS_INFO_DESCR "Показать информацию о версии." IDS_TOOLS_INFO_CMD "winver.exe" diff --git a/reactos/base/applications/msconfig/rsrc.rc b/reactos/base/applications/msconfig/rsrc.rc index fd535d53d7b..d111a478d42 100644 --- a/reactos/base/applications/msconfig/rsrc.rc +++ b/reactos/base/applications/msconfig/rsrc.rc @@ -21,7 +21,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/ko-KR.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" diff --git a/reactos/base/applications/mscutils/devmgmt/lang/nb-NO.rc b/reactos/base/applications/mscutils/devmgmt/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/lang/nb-NO.rc rename to reactos/base/applications/mscutils/devmgmt/lang/no-NO.rc diff --git a/reactos/base/applications/mscutils/devmgmt/rsrc.rc b/reactos/base/applications/mscutils/devmgmt/rsrc.rc index b07413f81ef..68a036b4d2e 100644 --- a/reactos/base/applications/mscutils/devmgmt/rsrc.rc +++ b/reactos/base/applications/mscutils/devmgmt/rsrc.rc @@ -21,7 +21,7 @@ IDB_EXIT BITMAP DISCARDABLE "res/exit.bmp" #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/ko-KR.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/base/applications/mscutils/eventvwr/lang/nb-NO.rc b/reactos/base/applications/mscutils/eventvwr/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/mscutils/eventvwr/lang/nb-NO.rc rename to reactos/base/applications/mscutils/eventvwr/lang/no-NO.rc diff --git a/reactos/base/applications/mscutils/eventvwr/lang/sk-SK.rc b/reactos/base/applications/mscutils/eventvwr/lang/sk-SK.rc index 96f0f77ae5a..0ffd814093b 100644 --- a/reactos/base/applications/mscutils/eventvwr/lang/sk-SK.rc +++ b/reactos/base/applications/mscutils/eventvwr/lang/sk-SK.rc @@ -1,5 +1,6 @@ -/* TRANSLATOR: Mбrio Kaиmбr /Mario Kacmar/ aka Kario (kario@szm.sk) - * DATE OF TR: 21-06-2008 +/* TRANSLATOR : Mбrio Kaиmбr /Mario Kacmar/ aka Kario (kario@szm.sk) + * DATE OF TR : 21-06-2008 + * LAST CHANGE: 28-07-2008 */ LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT @@ -39,8 +40,8 @@ CAPTION " FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON IDI_EVENTVWR,IDC_MYICON,14,9,21,20 - LTEXT "Zobrazovaи udalostн systйmu ReactOS, verzia programu 1.0",IDC_STATIC,49,10,119,8,SS_NOPREFIX - LTEXT "Autorskй prбva (C) 2007 Marc Piulachs (marc.piulachs@codexchange.net)",IDC_STATIC,49,20,119,22 + LTEXT "Zobrazovaи udalostн systйmu ReactOS, verzia 1.0",IDC_STATIC,49,10,167,8,SS_NOPREFIX + LTEXT "Autorskй prбva (C) 2007 Marc Piulachs (marc.piulachs@codexchange.net)",IDC_STATIC,49,20,167,22 DEFPUSHBUTTON "OK",IDOK,90,48,42,16,WS_GROUP END @@ -59,7 +60,7 @@ CAPTION "Podrobnosti o udalosti" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN DEFPUSHBUTTON "&Zavrieќ",IDOK,12,258,50,14 - PUSHBUTTON "&Predchбdzajъca",IDPREVIOUS,78,258,50,14 + PUSHBUTTON "&Predoљlб",IDPREVIOUS,78,258,50,14 PUSHBUTTON "&Nasledujъca",IDNEXT,144,258,50,14 PUSHBUTTON "&Pomocnнk",IDHELP,210,258,50,14 EDITTEXT IDC_EVENTTEXTEDIT,14,81,247,108,ES_MULTILINE | ES_READONLY @@ -93,8 +94,8 @@ BEGIN IDC_EVENTLOG_ERROR_TYPE "Chyba" IDC_EVENTLOG_WARNING_TYPE "Upozornenie" IDC_EVENTLOG_INFORMATION_TYPE "Informбcia" - IDC_EVENTLOG_AUDIT_SUCCESS "Audit Success" - IDC_EVENTLOG_AUDIT_FAILURE "Audit Failure" - IDC_EVENTLOG_SUCCESS "Success" + IDC_EVENTLOG_AUDIT_SUCCESS "Kontrola uspeљnб" + IDC_EVENTLOG_AUDIT_FAILURE "Kontrola zlyhala" + IDC_EVENTLOG_SUCCESS "Ъspech" //Success IDC_EVENTLOG_UNKNOWN_TYPE "Neznбma udalosќ" END diff --git a/reactos/base/applications/mscutils/eventvwr/rsrc.rc b/reactos/base/applications/mscutils/eventvwr/rsrc.rc index d36cc8e9554..f69aaf573e4 100644 --- a/reactos/base/applications/mscutils/eventvwr/rsrc.rc +++ b/reactos/base/applications/mscutils/eventvwr/rsrc.rc @@ -17,7 +17,7 @@ IDI_ERRORICON ICON "res/error.ico" #include "lang/fr-FR.rc" #include "lang/it-IT.rc" #include "lang/ko-KR.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/base/applications/mscutils/servman/lang/nb-NO.rc b/reactos/base/applications/mscutils/servman/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/mscutils/servman/lang/nb-NO.rc rename to reactos/base/applications/mscutils/servman/lang/no-NO.rc diff --git a/reactos/base/applications/mscutils/servman/rsrc.rc b/reactos/base/applications/mscutils/servman/rsrc.rc index 2498a2394bd..3cfb859fce2 100644 --- a/reactos/base/applications/mscutils/servman/rsrc.rc +++ b/reactos/base/applications/mscutils/servman/rsrc.rc @@ -25,7 +25,7 @@ IDB_RESTART BITMAP DISCARDABLE "res/restart.bmp" #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/ko-KR.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/th-TH.rc" diff --git a/reactos/base/applications/mstsc/lang/nb-NO.rc b/reactos/base/applications/mstsc/lang/no-NO.rc similarity index 97% rename from reactos/base/applications/mstsc/lang/nb-NO.rc rename to reactos/base/applications/mstsc/lang/no-NO.rc index 7ea7beb6e91..21f0caf4a37 100644 --- a/reactos/base/applications/mstsc/lang/nb-NO.rc +++ b/reactos/base/applications/mstsc/lang/no-NO.rc @@ -38,7 +38,7 @@ END IDD_CONNECTDIALOG DIALOGEX 0, 0, 260, 262 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Remote Desktop Connection" +CAPTION "Tilkobling til eksternt skrivebord" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN DEFPUSHBUTTON "Koble til",IDOK,147,245,50,14 @@ -59,5 +59,5 @@ BEGIN IDS_FULLSCREEN "Full skjerm" IDS_BROWSESERVER "" IDS_HEADERTEXT1 "Eksternt skrivebord" - IDS_HEADERTEXT2 "Koble til" + IDS_HEADERTEXT2 "Tilkobling" END diff --git a/reactos/base/applications/mstsc/rsrc.rc b/reactos/base/applications/mstsc/rsrc.rc index dfb32712711..96abeddcfae 100644 --- a/reactos/base/applications/mstsc/rsrc.rc +++ b/reactos/base/applications/mstsc/rsrc.rc @@ -22,7 +22,7 @@ IDB_SPECT BITMAP "res/spectrum.bmp" #include "lang/it-IT.rc" #include "lang/ko-KR.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/base/applications/network/ipconfig/ipconfig.rc b/reactos/base/applications/network/ipconfig/ipconfig.rc index 0b5a5253879..d471073b6f7 100644 --- a/reactos/base/applications/network/ipconfig/ipconfig.rc +++ b/reactos/base/applications/network/ipconfig/ipconfig.rc @@ -14,6 +14,7 @@ #include "lang/fr-FR.rc" #include "lang/id-ID.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/base/applications/network/ipconfig/lang/no-NO.rc b/reactos/base/applications/network/ipconfig/lang/no-NO.rc new file mode 100644 index 00000000000..df361e608b9 --- /dev/null +++ b/reactos/base/applications/network/ipconfig/lang/no-NO.rc @@ -0,0 +1,65 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +STRINGTABLE DISCARDABLE +BEGIN + IDS_BCAST "Broadcast" + IDS_P2P "Peer To Peer" + IDS_MIXED "Mikset" + IDS_HYBRID "Hybrid" + IDS_UNKNOWN "Ukjent" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_OTHER "Other Type Of Adapter" + IDS_ETH "Ethernet Adapter" + IDS_TOKEN "Token Ring Adapter" + IDS_FDDI "FDDI Adapter" + IDS_PPP "PPP Adapter" + IDS_LOOP "Loopback Adapter" + IDS_SLIP "SLIP Adapter" +END + +STRINGTABLE DISCARDABLE +BEGIN +/* Please keep the spacing/formatting as per En.rc when translating */ + IDS_USAGE + "\nUSAGE:\n \ + ipconfig [/? | /all | /renew [kort] | /release [kort] |\n \ + /flushdns | /displaydns | /registerdns |\n \ + /showclassid kort |\n \ + /setclassid kort [classid] ]\n \ + \n \ + der\n \ + kort Tilkoblingsnavn\n \ + (jokertegnene * og ? er tillatt, se eksemplene)\n \ + \n \ + Eksempler:\n \ + /? Viser denne hjelpe meldingen\n \ + /all Viser detaljert informasjon.\n \ + /release Frigir IP addressen for det angitte kortet.\n \ + /renew Forny alle IP addresser for alle valgte kort.\n \ + /flushdns Tшmmer DNS Resolver-bufferen.\n \ + /registerdns Oppdaterer alle DHCP leieavtaler og registerer DNS navn pе nytt.\n \ + /displaydns Viser innhold av DNS Resolver-bufferen.\n \ + /showclassid Viser alle klasse IDene for DHCP som er tillatt for kortet.\n \ + /setclassid Endrer klasse-IDene for DHCP.\n \ + \n \ + Standardverdien er е bare vise IP-addressen, nettverksmasken og\n \ + standard gatewayen for hver kort knyttet til TCP/IP.\n \ + \n \ + For Release og Renew, hvis ingen kortnavn er angitt, vil IP addressen\n \ + for alle kort knyttet til TCP/IP frigis eller fornyes hvis det ikke angis et kortnavn.\n \ + \n \ + For Setclassid, fjernes ClassId hvis det ikke angis en ClassId.\n \ + \n \ + Examples:\n \ + > ipconfig ... Vis informasjon.\n \ + > ipconfig /all ... Vis detaljert informasjon\n \ + > ipconfig /renew ... Forny alle kort\n \ + > ipconfig /renew EL* ... Forny alle kort med navn som\n \ + begynner med EL\n \ + > ipconfig /release *Til* ... Frigi alle samsvarende tilkoblinger,\n \ + for eksempel ""Lokal tilkobling 1"" eller\n \ + ""Lokaltilkobling 2""\n" +END diff --git a/reactos/base/applications/notepad/dialog.c b/reactos/base/applications/notepad/dialog.c index 21be3355c80..38a8131c443 100644 --- a/reactos/base/applications/notepad/dialog.c +++ b/reactos/base/applications/notepad/dialog.c @@ -235,10 +235,13 @@ static VOID DoSaveFile(VOID) } #endif - if (!WriteText(hFile, (LPWSTR)pTemp, size, Globals.iEncoding, Globals.iEoln)) - ShowLastError(); - else - SendMessage(Globals.hEdit, EM_SETMODIFY, FALSE, 0); + if (size) + { + if (!WriteText(hFile, (LPWSTR)pTemp, size, Globals.iEncoding, Globals.iEoln)) + ShowLastError(); + else + SendMessage(Globals.hEdit, EM_SETMODIFY, FALSE, 0); + } CloseHandle(hFile); HeapFree(GetProcessHeap(), 0, pTemp); diff --git a/reactos/base/applications/notepad/lang/nb-NO.rc b/reactos/base/applications/notepad/lang/no-NO.rc similarity index 90% rename from reactos/base/applications/notepad/lang/nb-NO.rc rename to reactos/base/applications/notepad/lang/no-NO.rc index b09ae58e152..bd869c31fcd 100644 --- a/reactos/base/applications/notepad/lang/nb-NO.rc +++ b/reactos/base/applications/notepad/lang/no-NO.rc @@ -43,7 +43,7 @@ BEGIN POPUP "&Fil" BEGIN MENUITEM "&Ny...", CMD_NEW - MENUITEM "&?ne\tCtrl+O", CMD_OPEN + MENUITEM "&Еpne\tCtrl+O", CMD_OPEN MENUITEM "&Lagre\tCtrl+S", CMD_SAVE MENUITEM "Lagre &som...", CMD_SAVE_AS MENUITEM SEPARATOR @@ -65,7 +65,7 @@ BEGIN MENUITEM "&Finn...\tCtrl+F", CMD_SEARCH MENUITEM "Finn &neste\tF3", CMD_SEARCH_NEXT MENUITEM "Erstatt\tCtrl+H", CMD_REPLACE - MENUITEM "G?il...\tCtrl+G", CMD_GOTO + MENUITEM "Gе til...\tCtrl+G", CMD_GOTO MENUITEM SEPARATOR MENUITEM "Merk &alt\tCtrl+A", CMD_SELECT_ALL MENUITEM "&Klokkeslett/dato\tF5", CMD_TIME_DATE @@ -82,7 +82,7 @@ BEGIN POPUP "&Hjelp" BEGIN MENUITEM "&Emner i hjelp", CMD_HELP_CONTENTS - MENUITEM "&S?", CMD_HELP_SEARCH + MENUITEM "&Sшk", CMD_HELP_SEARCH MENUITEM "&Hjelp om hjelp", CMD_HELP_ON_HELP MENUITEM SEPARATOR MENUITEM "&Om" CMD_ABOUT @@ -107,7 +107,7 @@ LTEXT "&Venstre:", 0x145, 20, 55, 30, 10, WS_CHILD EDITTEXT /*STRING_PAGESETUP_LEFTVALUE,*/ 0x147, 50, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP LTEXT "&Topp:", 0x148, 20, 73, 30, 10, WS_CHILD EDITTEXT /*STRING_PAGESETUP_TOPVALUE,*/ 0x14A, 50, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP -LTEXT "&H?", 0x14B, 100, 55, 30, 10, WS_CHILD +LTEXT "&Hшyre", 0x14B, 100, 55, 30, 10, WS_CHILD EDITTEXT /*STRING_PAGESETUP_RIGHTVALUE,*/ 0x14D, 130, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP LTEXT "&Bunn:", 0x14E,100, 73, 30, 10, WS_CHILD EDITTEXT /*STRING_PAGESETUP_BOTTOMVALUE,*/ 0x150, 130, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP @@ -134,7 +134,7 @@ END DIALOG_GOTO DIALOGEX 0,0,165,50 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU FONT 8, "MS Shell Dlg" -CAPTION "G?l linje" +CAPTION "Gе til linje" BEGIN EDITTEXT ID_LINENUMBER,54,10,106,12,WS_CHILD | WS_BORDER | WS_TABSTOP LTEXT "Line nummer:",0x155,5,12,41,12,WS_CHILD | WS_TABSTOP | ES_NUMBER @@ -147,10 +147,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU CAPTION "Om ReactOS Notisblokk" FONT 8, "MS Shell Dlg" BEGIN - CONTROL "ReactOS Notisblokk v1.0\r\nCopyright 1997,98 Marcel Baur \r\nCopyright 2000 Mike McCormack \r\nCopyright 2002 Sylvain Petreolle \r\nCopyright 2002 Andriy Palamarchuk\r\n", - -1,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,46,7,232,39 + CONTROL "ReactOS Notisblokk v1.0\r\nenerett 1997,98 Marcel Baur \r\nEnerett 2000 Mike McCormack \r\nEnerett 2002 Sylvain Petreolle \r\nEnerett 2002 Andriy Palamarchuk\r\n", + -1,"Statisk",SS_LEFTNOWORDWRAP | WS_GROUP,46,7,232,39 CONTROL " ", - -1,"Static",0x50000000,8,48,272,11 + -1,"Statisk",0x50000000,8,48,272,11 DEFPUSHBUTTON "Avslutt",IDOK,114,149,44,15,WS_GROUP ICON IDI_NPICON,-1,12,9,20,30 EDITTEXT IDC_LICENSE,8,64,272,81,ES_MULTILINE | @@ -183,15 +183,15 @@ STRING_TEXT_FILES_TXT, "Tekst filer (*.txt)" STRING_TOOLARGE, "Filen '%s' er for stor for notisblokk.\n \ Vennligst bruk en annen editor." -STRING_NOTEXT, "Du utf?ikke innskrivet tekst. \ +STRING_NOTEXT, "Du utfшrer innskrivet tekst. \ \nVennligst skriv noe og pr?jen" STRING_DOESNOTEXIST, "Filen '%s'\n eksistere ikke\n\n \ Vil du opprette en ny fil?" STRING_NOTSAVED, "Filen '%s'\nhar ikke blitt lagret\n\n \ Vil du lagre endringen?" STRING_NOTFOUND, "'%s' ble ikke funnet." -STRING_OUT_OF_MEMORY, "Ikke nok minne for ?ullf?enne \ -oppgaven. \nAvslutt en eller mere applikasjoner for ?ke mengden av \nledig \ +STRING_OUT_OF_MEMORY, "Ikke nok minne for е еpne \ +oppgaven. \nAvslutt en eller mere applikasjoner for шke mengden av \nledig \ minne." STRING_CANNOTFIND "Kan ikke finne '%s'" STRING_ANSI, "ANSI" diff --git a/reactos/base/applications/notepad/rsrc.rc b/reactos/base/applications/notepad/rsrc.rc index 9d811018523..ee169bc15da 100644 --- a/reactos/base/applications/notepad/rsrc.rc +++ b/reactos/base/applications/notepad/rsrc.rc @@ -49,7 +49,7 @@ IDI_NPICON ICON "res/notepad.ico" #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/pt-PT.rc" diff --git a/reactos/base/applications/notepad/text.c b/reactos/base/applications/notepad/text.c index f99420f91ba..3b6fe23e3fa 100644 --- a/reactos/base/applications/notepad/text.c +++ b/reactos/base/applications/notepad/text.c @@ -316,79 +316,73 @@ done: BOOL WriteText(HANDLE hFile, LPCWSTR pszText, DWORD dwTextLen, int iEncoding, int iEoln) { - WCHAR wcBom; - WCHAR wcEoln; - BYTE bEoln; - LPBYTE pbEoln = NULL; - DWORD dwDummy, dwPos, dwNext, dwEolnSize = 0; + WCHAR wcBom; + BYTE bEoln[1]; + LPBYTE pbEoln = NULL; + DWORD dwDummy, dwPos, dwNext, dwEolnSize = 0; - /* Write the proper byte order marks if not ANSI */ - if (iEncoding != ENCODING_ANSI) - { - wcBom = 0xFEFF; - if (!WriteEncodedText(hFile, &wcBom, 1, iEncoding)) - return FALSE; - } + /* Write the proper byte order marks if not ANSI */ + if (iEncoding != ENCODING_ANSI) + { + wcBom = 0xFEFF; + if (!WriteEncodedText(hFile, &wcBom, 1, iEncoding)) + return FALSE; + } - /* Identify the proper eoln to use */ - switch(iEoln) - { - case EOLN_LF: - bEoln = '\n'; - pbEoln = &bEoln; - dwEolnSize = sizeof(bEoln); - break; - case EOLN_CR: - bEoln = '\r'; - pbEoln = &bEoln; - dwEolnSize = sizeof(bEoln); - break; - } + /* Identify the proper eoln to use */ + switch(iEoln) + { + case EOLN_LF: + bEoln[0] = '\n'; + pbEoln = (LPBYTE) &bEoln; + dwEolnSize = 1; + break; + case EOLN_CR: + bEoln[0] = '\r'; + pbEoln = (LPBYTE) &bEoln; + dwEolnSize = 1; + break; + case EOLN_CRLF: + bEoln[0] = '\r'; + bEoln[1] = '\n'; + pbEoln = (LPBYTE) &bEoln; + dwEolnSize = 2; + break; + default: + return FALSE; + } - /* If we have an eoln, make sure it is of the proper encoding */ - if (pbEoln && ((iEncoding == ENCODING_UNICODE) || (iEncoding == ENCODING_UNICODE_BE))) - { - wcEoln = bEoln; - pbEoln = (LPBYTE) &wcEoln; - dwEolnSize = sizeof(wcEoln); - } + dwPos = 0; - dwPos = 0; + /* pszText eoln are always \r\n */ - while(dwPos < dwTextLen) - { - if (pbEoln) - { - /* Find the next eoln */ - dwNext = dwPos; - while(dwNext < dwTextLen-1) - { - if ((pszText[dwNext] == '\r') && (pszText[dwNext+1] == '\n')) - break; - dwNext++; - } - } - else - { - /* No eoln conversion is necessary */ - dwNext = dwTextLen; - } + do + { + /* Find the next eoln */ + dwNext = dwPos; + while(dwNext < dwTextLen) + { + if (pszText[dwNext] == '\r' && pszText[dwNext + 1] == '\n') + break; + dwNext++; + } - if (!WriteEncodedText(hFile, &pszText[dwPos], dwNext - dwPos, iEncoding)) - return FALSE; - dwPos = dwNext; + /* Write text (without eoln) */ + if (!WriteEncodedText(hFile, &pszText[dwPos], dwNext - dwPos, iEncoding)) + return FALSE; - /* are we at an eoln? */ - while ((dwPos < dwTextLen-1) && - ((pszText[dwPos] == '\r') && (pszText[dwPos+1] == '\n'))) - { - if (!WriteFile(hFile, pbEoln, dwEolnSize, &dwDummy, NULL)) - return FALSE; - dwPos += 2; - } - } - while(dwPos < dwTextLen); + /* Write eoln */ + if (dwNext != dwTextLen) + { + if (!WriteFile(hFile, pbEoln, dwEolnSize, &dwDummy, NULL)) + return FALSE; + } - return TRUE; + /* Skip \r\n */ + dwPos = dwNext + 2; + } + while (dwPos < dwTextLen); + + return TRUE; } diff --git a/reactos/base/applications/regedit/clb/clb.def b/reactos/base/applications/regedit/clb/clb.def deleted file mode 100644 index 805736e65b7..00000000000 --- a/reactos/base/applications/regedit/clb/clb.def +++ /dev/null @@ -1,10 +0,0 @@ -LIBRARY clb.dll - -EXPORTS -ClbAddData @1 -ClbSetColumnWidths @2 -ClbStyleW @3 -ClbWndProc @4 -CustomControlInfoW @5 - -; EOF diff --git a/reactos/base/applications/regedit/clb/clb.rbuild b/reactos/base/applications/regedit/clb/clb.rbuild index b3a0cf5c23c..2e8d86aa7fb 100644 --- a/reactos/base/applications/regedit/clb/clb.rbuild +++ b/reactos/base/applications/regedit/clb/clb.rbuild @@ -1,7 +1,7 @@ - + . 0x0500 0x0600 @@ -13,5 +13,6 @@ comctl32 clb.c clb.rc + clb.spec precomp.h diff --git a/reactos/base/applications/regedit/clb/clb.spec b/reactos/base/applications/regedit/clb/clb.spec new file mode 100644 index 00000000000..a3ba3f2a321 --- /dev/null +++ b/reactos/base/applications/regedit/clb/clb.spec @@ -0,0 +1,5 @@ +1 stdcall ClbAddData(long long long) +2 stdcall ClbSetColumnWidths(long long long) +3 stdcall ClbStyleW(ptr ptr) +4 stdcall ClbWndProc(ptr long ptr ptr) +5 stdcall CustomControlInfoW(ptr) diff --git a/reactos/base/applications/regedit/clb/lang/nb-NO.rc b/reactos/base/applications/regedit/clb/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/regedit/clb/lang/nb-NO.rc rename to reactos/base/applications/regedit/clb/lang/no-NO.rc diff --git a/reactos/base/applications/regedit/clb/lang/sk-SK.rc b/reactos/base/applications/regedit/clb/lang/sk-SK.rc new file mode 100644 index 00000000000..2479cd67b7f --- /dev/null +++ b/reactos/base/applications/regedit/clb/lang/sk-SK.rc @@ -0,0 +1,31 @@ +/* TRANSLATOR : Mбrio Kaиmбr /Mario Kacmar/ aka Kario (kario@szm.sk) + * DATE OF TR.: 07-07-2008 + */ + +LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT + +IDD_COLUMNLISTBOXSTYLES DIALOGEX 0, 0, 227, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Column List Box Styles" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Column List Box Styles", -1, 6, 7, 158, 71 + CHECKBOX "&Standard", 1710, 10, 20, 42, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + CHECKBOX "&Border", 1713, 10, 30, 34, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + CHECKBOX "S&ort", 1705, 10, 40, 26, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + CHECKBOX "Notif&y", 1706, 10, 50, 32, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + CHECKBOX "V&ert. Scroll Bar", 1707, 10, 60, 64, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + CHECKBOX "&Multiple Selection", -1, 79, 20, 72, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP | WS_DISABLED + CHECKBOX "E&xtended Selection", -1, 79, 30, 77, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP | WS_DISABLED + CHECKBOX "&Popout Headings", 1714, 79, 40, 68, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + CHECKBOX "&Springy Columns", 1715, 79, 50, 66, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + GROUPBOX "Basic Styles", -1, 6, 80, 158, 34 + CHECKBOX "&Visible", 1701, 10, 92, 34, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + CHECKBOX "&Disabled", 1702, 10, 102, 41, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + CHECKBOX "&Group", 1703, 79, 92, 32, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + CHECKBOX "&Tab Stop", 1704, 79, 102, 44, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + PUSHBUTTON "OK", IDOK, 37, 125, 40, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Zruљiќ", IDCANCEL, 93, 125, 40, 14, BS_PUSHBUTTON | WS_GROUP | WS_TABSTOP + CHECKBOX "&Disable No-Scroll", 1708, 79, 60, 66, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP +END + diff --git a/reactos/base/applications/regedit/clb/rsrc.rc b/reactos/base/applications/regedit/clb/rsrc.rc index bfbacf851b2..b0990837b8d 100644 --- a/reactos/base/applications/regedit/clb/rsrc.rc +++ b/reactos/base/applications/regedit/clb/rsrc.rc @@ -37,7 +37,8 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/pl-PL.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" +#include "lang/sk-SK.rc" #include "lang/th-TH.rc" #include "lang/uk-UA.rc" #include "lang/ru-RU.rc" diff --git a/reactos/base/applications/regedit/lang/de-DE.rc b/reactos/base/applications/regedit/lang/de-DE.rc index 850ae76f057..e0df2c0754a 100644 --- a/reactos/base/applications/regedit/lang/de-DE.rc +++ b/reactos/base/applications/regedit/lang/de-DE.rc @@ -363,7 +363,7 @@ END STRINGTABLE DISCARDABLE BEGIN IDS_EXPAND "&Expandieren" - IDS_COLLAPSE "&Schlissen" + IDS_COLLAPSE "&SchlieЯen" IDS_GOTO_SUGGESTED_KEY "&Gehe zu '%s'" IDS_FINISHEDFIND "Durchsuchen der Registry beendet." END diff --git a/reactos/base/applications/regedit/lang/fr-FR.rc b/reactos/base/applications/regedit/lang/fr-FR.rc index a28b2e41fcb..b3e7f078d75 100644 --- a/reactos/base/applications/regedit/lang/fr-FR.rc +++ b/reactos/base/applications/regedit/lang/fr-FR.rc @@ -138,8 +138,8 @@ BEGIN MENUITEM "Valeur chaоne", ID_EDIT_NEW_STRINGVALUE MENUITEM "Valeur &binaire", ID_EDIT_NEW_BINARYVALUE MENUITEM "Valeur mot &double", ID_EDIT_NEW_DWORDVALUE - MENUITEM "&Multi-String Value", ID_EDIT_NEW_MULTISTRINGVALUE - MENUITEM "&Expandable String Value", ID_EDIT_NEW_EXPANDABLESTRINGVALUE + MENUITEM "Valeur chaоne &multiple", ID_EDIT_NEW_MULTISTRINGVALUE + MENUITEM "Valeur chaоne &extensible", ID_EDIT_NEW_EXPANDABLESTRINGVALUE END END POPUP "" @@ -152,8 +152,8 @@ BEGIN MENUITEM "Valeur chaоne", ID_EDIT_NEW_STRINGVALUE MENUITEM "Valeur &binaire", ID_EDIT_NEW_BINARYVALUE MENUITEM "Valeur mot &double", ID_EDIT_NEW_DWORDVALUE - MENUITEM "&Multi-String Value", ID_EDIT_NEW_MULTISTRINGVALUE - MENUITEM "&Expandable String Value", ID_EDIT_NEW_EXPANDABLESTRINGVALUE + MENUITEM "Valeur chaоne &multiple", ID_EDIT_NEW_MULTISTRINGVALUE + MENUITEM "Valeur chaоne &extensible", ID_EDIT_NEW_EXPANDABLESTRINGVALUE END MENUITEM "Cherche", ID_EDIT_FIND MENUITEM SEPARATOR diff --git a/reactos/base/applications/regedit/lang/it-IT.rc b/reactos/base/applications/regedit/lang/it-IT.rc index 7d8378d7281..544c45de42e 100644 --- a/reactos/base/applications/regedit/lang/it-IT.rc +++ b/reactos/base/applications/regedit/lang/it-IT.rc @@ -86,7 +86,7 @@ BEGIN MENUITEM "Valore stringa &espandibile", ID_EDIT_NEW_EXPANDABLESTRINGVALUE END MENUITEM SEPARATOR - MENUITEM "&Permissions...", ID_EDIT_PERMISSIONS + MENUITEM "&Permessi...", ID_EDIT_PERMISSIONS MENUITEM SEPARATOR MENUITEM "&Elimina\tDel", ID_EDIT_DELETE MENUITEM "&Rinomina", ID_EDIT_RENAME diff --git a/reactos/base/applications/regedit/lang/nb-NO.rc b/reactos/base/applications/regedit/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/regedit/lang/nb-NO.rc rename to reactos/base/applications/regedit/lang/no-NO.rc diff --git a/reactos/base/applications/regedit/lang/sk-SK.rc b/reactos/base/applications/regedit/lang/sk-SK.rc new file mode 100644 index 00000000000..b1a8cf6686d --- /dev/null +++ b/reactos/base/applications/regedit/lang/sk-SK.rc @@ -0,0 +1,453 @@ +/* TRANSLATOR : Mбrio Kaиmбr /Mario Kacmar/ aka Kario (kario@szm.sk) + * DATE OF TR.: 07-07-2008 + * LAST CHANGE: 28-07-2008 + */ + +LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT + +ID_ACCEL ACCELERATORS +BEGIN + VK_DELETE, ID_EDIT_DELETE, VIRTKEY, NOINVERT + "^F", ID_EDIT_FIND + VK_F3, ID_EDIT_FINDNEXT, VIRTKEY, NOINVERT + VK_F5, ID_VIEW_REFRESH, VIRTKEY, NOINVERT + VK_F1, ID_HELP_HELPTOPICS, VIRTKEY, NOINVERT +END + +/* + * Menu + */ + +IDC_REGEDIT MENU DISCARDABLE +BEGIN + POPUP "&Sъbor" + BEGIN + MENUITEM "S&konиiќ", ID_REGISTRY_EXIT + END + POPUP "&Pomocnнk" + BEGIN + MENUITEM "И&o je ...", ID_HELP_ABOUT + END +END + +IDR_REGEDIT_MENU MENU DISCARDABLE +BEGIN + POPUP "&Sъbor" + BEGIN + MENUITEM "&Importovaќ...", ID_REGISTRY_IMPORTREGISTRYFILE + + MENUITEM "&Exportovaќ...", ID_REGISTRY_EXPORTREGISTRYFILE + + MENUITEM SEPARATOR + MENUITEM "Load Hive...", ID_REGISTRY_LOADHIVE, GRAYED + MENUITEM "Unload Hive...", ID_REGISTRY_UNLOADHIVE, GRAYED + MENUITEM SEPARATOR + MENUITEM "&Pripojiќ registre v sieti...", + ID_REGISTRY_CONNECTNETWORKREGISTRY + + MENUITEM "&Odpojiќ registre v sieti...", + ID_REGISTRY_DISCONNECTNETWORKREGISTRY + , GRAYED + MENUITEM SEPARATOR + MENUITEM "&Tlaиiќ\tCtrl+P", ID_REGISTRY_PRINT, GRAYED + MENUITEM SEPARATOR + MENUITEM "S&konиiќ", ID_REGISTRY_EXIT + END + POPUP "&Upraviќ" + BEGIN + MENUITEM "&Zmeniќ", ID_EDIT_MODIFY + MENUITEM SEPARATOR + POPUP "&Novэ" + BEGIN + MENUITEM "&Kѕъи", ID_EDIT_NEW_KEY + MENUITEM SEPARATOR + MENUITEM "&Reќazcovб hodnota", ID_EDIT_NEW_STRINGVALUE + MENUITEM "&Binбrna hodnota", ID_EDIT_NEW_BINARYVALUE + MENUITEM "&DWORD hodnota", ID_EDIT_NEW_DWORDVALUE + MENUITEM "&Viacreќazcovб hodnota", ID_EDIT_NEW_MULTISTRINGVALUE + MENUITEM "Rozљнrit&eѕnб reќazcovб hodnota", ID_EDIT_NEW_EXPANDABLESTRINGVALUE + END + MENUITEM SEPARATOR + MENUITEM "&Oprбvnenia...", ID_EDIT_PERMISSIONS + MENUITEM SEPARATOR + MENUITEM "&Vymazaќ\tDel", ID_EDIT_DELETE + MENUITEM "&Premenovaќ", ID_EDIT_RENAME + MENUITEM SEPARATOR + MENUITEM "&Kopнrovaќ nбzov kѕъиa", ID_EDIT_COPYKEYNAME + MENUITEM SEPARATOR + MENUITEM "&Hѕadaќ\tCtrl+F", ID_EDIT_FIND + MENUITEM "Hѕa&daќ пalej\tF3", ID_EDIT_FINDNEXT + END + POPUP "&Zobraziќ" + BEGIN + MENUITEM "Stavovэ &riadok", ID_VIEW_STATUSBAR + MENUITEM SEPARATOR + MENUITEM "Rozde&lenie", ID_VIEW_SPLIT + MENUITEM SEPARATOR + MENUITEM "&Obnoviќ\tF5", ID_VIEW_REFRESH + END + POPUP "&Obѕъbenй" + BEGIN + MENUITEM "&Pridaќ k obѕъbenэm", ID_FAVOURITES_ADDTOFAVOURITES + , GRAYED + MENUITEM "&Odstrбniќ z obѕъbenэch", ID_FAVOURITES_REMOVEFAVOURITE + , GRAYED + END + POPUP "&Pomocnнk" + BEGIN + MENUITEM "&Tйmy pomocnнka\tF1", ID_HELP_HELPTOPICS + MENUITEM SEPARATOR + MENUITEM "И&o je Editor registrov", ID_HELP_ABOUT + END +END + +IDR_POPUP_MENUS MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Zmeniќ", ID_EDIT_MODIFY + MENUITEM "Zmeniќ binбre ъdaje", ID_EDIT_MODIFY_BIN + MENUITEM SEPARATOR + MENUITEM "&Vymazaќ\tDel", ID_EDIT_DELETE + MENUITEM "&Premenovaќ", ID_EDIT_RENAME + END + POPUP "" + BEGIN + POPUP "&Novэ" + BEGIN + MENUITEM "&Kѕъи", ID_EDIT_NEW_KEY + MENUITEM SEPARATOR + MENUITEM "&Reќazcovб hodnota", ID_EDIT_NEW_STRINGVALUE + MENUITEM "&Binбrna hodnota", ID_EDIT_NEW_BINARYVALUE + MENUITEM "&DWORD hodnota", ID_EDIT_NEW_DWORDVALUE + MENUITEM "&Viacreќazcovб hodnota", ID_EDIT_NEW_MULTISTRINGVALUE + MENUITEM "Rozљнrit&eѕnб reќazcovб hodnota", ID_EDIT_NEW_EXPANDABLESTRINGVALUE + END + END + POPUP "" + BEGIN + MENUITEM "Expand/Collapse", ID_TREE_EXPANDBRANCH + POPUP "&Novэ" + BEGIN + MENUITEM "&Kѕъи", ID_EDIT_NEW_KEY + MENUITEM SEPARATOR + MENUITEM "&Reќazcovб hodnota", ID_EDIT_NEW_STRINGVALUE + MENUITEM "&Binбrna hodnota", ID_EDIT_NEW_BINARYVALUE + MENUITEM "&DWORD hodnota", ID_EDIT_NEW_DWORDVALUE + MENUITEM "&Viacreќazcovб hodnota", ID_EDIT_NEW_MULTISTRINGVALUE + MENUITEM "Rozљнrit&eѕnб reќazcovб hodnota", ID_EDIT_NEW_EXPANDABLESTRINGVALUE + END + MENUITEM "&Find", ID_EDIT_FIND + MENUITEM SEPARATOR + MENUITEM "&Vymazaќ", ID_TREE_DELETE + MENUITEM "&Premenovaќ", ID_TREE_RENAME + MENUITEM SEPARATOR + MENUITEM "&Export", ID_TREE_EXPORT + MENUITEM "&Permissions...", ID_TREE_PERMISSIONS, GRAYED + MENUITEM SEPARATOR + MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME + END +END + + +/* + * Dialog + */ + +IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | + WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Ъprava reќazca" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Value &name:",IDC_STATIC,6,6,134,8 + EDITTEXT IDC_VALUE_NAME,6,17,240,12,ES_AUTOHSCROLL | ES_READONLY + LTEXT "&Value data:",IDC_STATIC,6,35,161,8 + EDITTEXT IDC_VALUE_DATA,6,46,240,12,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",IDOK,142,64,50,14 + PUSHBUTTON "Zruљiќ",IDCANCEL,196,64,50,14 +END + +IDD_EDIT_MULTI_STRING DIALOGEX 32, 24, 252, 174 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | + WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Ъprava viacnбsobnйho reќazca" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Value &name:",IDC_STATIC,6,6,134,8 + EDITTEXT IDC_VALUE_NAME,6,17,240,12,ES_AUTOHSCROLL | ES_READONLY + LTEXT "&Value data:",IDC_STATIC,6,35,161,8 + EDITTEXT IDC_VALUE_DATA,6,46,240,102,ES_AUTOHSCROLL | ES_MULTILINE | ES_WANTRETURN | ES_AUTOVSCROLL | WS_VSCROLL + DEFPUSHBUTTON "OK",IDOK,142,154,50,14 + PUSHBUTTON "Zruљiќ",IDCANCEL,196,154,50,14 +END + +IDD_EDIT_BIN_DATA DIALOGEX 32, 24, 252, 174 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | + WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Ъprava binбrnej hodnoty" //upraviќ, upravenie +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Value &name:",IDC_STATIC,6,6,134,8 + EDITTEXT IDC_VALUE_NAME,6,17,240,12,ES_AUTOHSCROLL | ES_READONLY + LTEXT "&Value data:",IDC_STATIC,6,35,161,8 + CONTROL "",IDC_VALUE_DATA,"HexEdit32",WS_VSCROLL | WS_BORDER | WS_TABSTOP,6,46,240,102 + DEFPUSHBUTTON "OK",IDOK,142,154,50,14 + PUSHBUTTON "Zruљiќ",IDCANCEL,196,154,50,14 +END + + +IDD_EDIT_DWORD DIALOGEX 32, 24, 252, 104 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | + WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Ъprava DWORD hodnoty" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Value &name:",IDC_STATIC,6,6,134,8 + EDITTEXT IDC_VALUE_NAME,6,17,240,12,ES_AUTOHSCROLL | ES_READONLY + LTEXT "&Value data:",IDC_STATIC,6,35,161,8 + EDITTEXT IDC_VALUE_DATA,6,46,116,12,ES_AUTOHSCROLL + GROUPBOX "Base",IDC_STATIC,130,35,116,39 + AUTORADIOBUTTON "&Hexadecimal",IDC_FORMAT_HEX,141,46,60,10,WS_GROUP + AUTORADIOBUTTON "&Decimal",IDC_FORMAT_DEC,141,59,60,10 + DEFPUSHBUTTON "OK",IDOK,142,82,50,14 + PUSHBUTTON "Zruљiќ",IDCANCEL,196,82,50,14 +END + +/* + * String Table + */ + +STRINGTABLE DISCARDABLE +BEGIN + IDS_LIST_COLUMN_NAME "Nбzov" + IDS_LIST_COLUMN_TYPE "Typ" + IDS_LIST_COLUMN_DATA "Ъdaje" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_APP_TITLE "Editor registrov" + IDC_REGEDIT "REGEDIT" + IDC_REGEDIT_FRAME "REGEDIT_FRAME" +END + +STRINGTABLE DISCARDABLE +BEGIN + ID_REGISTRY_MENU "Contains commands for working with the whole registry" + ID_EDIT_MENU "Contains commands for editing values or keys" + ID_VIEW_MENU "Contains commands for customising the registry window" + ID_FAVOURITES_MENU "Contains commands for accessing frequently used keys" + ID_HELP_MENU "Contains commands for displaying help and information about registry editor" + ID_EDIT_NEW_MENU "Contains commands for creating new keys or values" +END + +STRINGTABLE DISCARDABLE +BEGIN + ID_EDIT_MODIFY "Modifies the value's data" + ID_EDIT_NEW_KEY "Pridб novэ kѕъи" + ID_EDIT_NEW_STRINGVALUE "Pridб novъ reќazcovъ hodnotu" + ID_EDIT_NEW_BINARYVALUE "Pridб novъ binбrnu hodnotu" + ID_EDIT_NEW_DWORDVALUE "Pridб novъ double word hodnotu" + ID_REGISTRY_IMPORTREGISTRYFILE "Imports a text file into the registry" + ID_REGISTRY_EXPORTREGISTRYFILE + "Exports all or part of the registry to a text file" + ID_REGISTRY_CONNECTNETWORKREGISTRY + "Connects to a remote computer's registry" + ID_REGISTRY_DISCONNECTNETWORKREGISTRY + "Disconnects from a remote computer's registry" + ID_REGISTRY_PRINT "Prints all or part of the registry" +/* ID_HELP_HELPTOPICS "Opens registry editor help" */ + ID_HELP_ABOUT "Displays program information, version number and copyright" +END + +STRINGTABLE DISCARDABLE +BEGIN + ID_REGISTRY_EXIT "Ukonин editor registrov" + ID_FAVOURITES_ADDTOFAVOURITES "Adds keys to the favourites list" + ID_FAVOURITES_REMOVEFAVOURITE "Removes keys from the favourites list" + ID_VIEW_STATUSBAR "Zobrazн alebo skryje stavovэ riadok" + ID_VIEW_SPLIT "Change position of split between two panes" + ID_VIEW_REFRESH "Refreshes the window" + ID_EDIT_DELETE "Deletes the selection" + ID_EDIT_RENAME "Renames the selection" + ID_EDIT_COPYKEYNAME "Copies the name of the selected key to the clipboard" + ID_EDIT_FIND "Finds a text string in a key, value or data" + ID_EDIT_FINDNEXT "Finds next occurrence of text specified in previous search" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_ERROR "Chyba" + IDS_WARNING "Upozornenie" + IDS_BAD_KEY "Can't query key '%s'" + IDS_BAD_VALUE "Can't query value '%s'" + IDS_UNSUPPORTED_TYPE "Can't edit keys of this type (%ld)" + IDS_TOO_BIG_VALUE "Hodnota je prнliљ veѕkб (%ld)" + IDS_MULTI_SZ_EMPTY_STRING "Data of type REG_MULTI_SZ cannot contain empty strings.\nThe empty strings have been removed from the list." + IDS_QUERY_DELETE_KEY_ONE "Are you sure you want to delete this key?" + IDS_QUERY_DELETE_KEY_MORE "Are you sure you want to delete these keys?" + IDS_QUERY_DELETE_KEY_CONFIRM "Confirm Key Delete" + IDS_QUERY_DELETE_ONE "Are you sure you want to delete this value?" + IDS_QUERY_DELETE_MORE "Are you sure you want to delete these values?" + IDS_QUERY_DELETE_CONFIRM "Confirm Value Delete" + IDS_ERR_DELVAL_CAPTION "Error Deleting Values" + IDS_ERR_DELETEVALUE "Unable to delete all specified values!" + IDS_ERR_RENVAL_CAPTION "Error Renaming Value" + IDS_ERR_RENVAL_TOEMPTY "Cannot rename %s. The specified value name is empty. Try another name and try again." + IDS_NEW_KEY "Novэ kѕъи #%d" + IDS_NEW_VALUE "Novб hodnota #%d" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_BINARY_EMPTY "(binбrna hodnota nulovej dећky)" + IDS_DEFAULT_VALUE_NAME "(Predvolenй)" + IDS_VALUE_NOT_SET "(hodnota nie nastavenб)" + IDS_UNKNOWN_TYPE "Neznбmy typ: (0x%lx)" + IDS_MY_COMPUTER "Tento poинtaи" + IDS_IMPORT_REG_FILE "Import Registry File" + IDS_EXPORT_REG_FILE "Export Registry File" + IDS_INVALID_DWORD "(neplatnб DWORD hodnota)" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_FLT_REGFILE "Registration File" + IDS_FLT_REGFILES "Registration Files" + IDS_FLT_REGFILES_FLT "*.reg" + IDS_FLT_REGEDIT4 "Win9x/NT4 Registration Files (REGEDIT4)" + IDS_FLT_REGEDIT4_FLT "*.reg" + IDS_FLT_ALLFILES "Vљetky sъbory (*.*)" + IDS_FLT_ALLFILES_FLT "*.*" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_ACCESS_FULLCONTROL "Full Control" + IDS_ACCESS_READ "Read" + IDS_ACCESS_QUERYVALUE "Query Value" + IDS_ACCESS_SETVALUE "Set Value" + IDS_ACCESS_CREATESUBKEY "Create Subkey" + IDS_ACCESS_ENUMERATESUBKEYS "Enumerate Subkeys" + IDS_ACCESS_NOTIFY "Notify" + IDS_ACCESS_CREATELINK "Create Link" + IDS_ACCESS_DELETE "Delete" + IDS_ACCESS_WRITEDAC "Write DAC" + IDS_ACCESS_WRITEOWNER "Write Owner" + IDS_ACCESS_READCONTROL "Read Control" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_INHERIT_THISKEYONLY "This key only" + IDS_INHERIT_THISKEYANDSUBKEYS "This key and subkeys" + IDS_INHERIT_SUBKEYSONLY "Subkeys only" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_EXPAND "&Expand" + IDS_COLLAPSE "&Collapse" + IDS_GOTO_SUGGESTED_KEY "&Go to '%s'" + IDS_FINISHEDFIND "Finished searching through the registry." +END + +/*****************************************************************/ + + +/* + * Dialog + */ + +IDD_EXPORTRANGE DIALOGEX DISCARDABLE 50, 50, 370, 50 +STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | + WS_BORDER +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Export Range",IDC_STATIC,2,0,366,48 + CONTROL "&All",IDC_EXPORT_ALL,"Button",BS_AUTORADIOBUTTON,10,10, 29,11 + CONTROL "S&elected Branch",IDC_EXPORT_BRANCH,"Button",BS_AUTORADIOBUTTON,10,22, 100,11 + EDITTEXT IDC_EXPORT_BRANCH_TEXT,30,34,335,12 +END + +IDD_ADDFAVORITES DIALOGEX DISCARDABLE 0, 0, 186, 46 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Add to Favorites" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK",IDOK,129,7,50,14 + PUSHBUTTON "Zruљiќ",IDCANCEL,129,24,50,14 + LTEXT "&Favorite Name:",IDC_STATIC,7,7,70,10 + EDITTEXT IDC_FAVORITENAME,7,26,110,13,ES_AUTOHSCROLL +END + +IDD_REMOVEFAVORITES DIALOGEX DISCARDABLE 0, 0, 164, 135 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Remove Favorites" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK",IDOK,107,114,50,14 + PUSHBUTTON "Zruљiќ",IDCANCEL,7,114,50,14 + CONTROL "List1",IDC_FAVORITESLIST,"SysListView32",LVS_LIST | + WS_BORDER | WS_TABSTOP,7,20,150,90 + LTEXT "Select Favorite(s):",IDC_STATIC,7,7,99,12 +END + +IDD_FIND DIALOGEX DISCARDABLE 0, 0, 254, 82 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Find" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Find Next",IDOK,197,7,50,14 + PUSHBUTTON "Zruљiќ",IDCANCEL,197,24,50,14 + GROUPBOX "Look at",IDC_STATIC,7,25,63,51 + LTEXT "Fi&nd what:",IDC_STATIC,7,8,37,10 + EDITTEXT IDC_FINDWHAT,47,7,142,13,ES_AUTOHSCROLL + CONTROL "&Kѕъиe",IDC_LOOKAT_KEYS,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,36,35,8 + CONTROL "&Hodnoty",IDC_LOOKAT_VALUES,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,48,36,8 + CONTROL "Ъ&daje",IDC_LOOKAT_DATA,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,60,42,8 + CONTROL "Match &whole string only",IDC_MATCHSTRING,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,83,32,94,13 + CONTROL "Match &case",IDC_MATCHCASE,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,83,48,90,12 +END + +IDD_FINDING DIALOGEX 0, 0, 145, 50 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | + WS_CAPTION | WS_SYSMENU +CAPTION "Find" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + ICON IDI_REGEDIT,IDC_STATIC,7,7,20,20 + PUSHBUTTON "&Zruљiќ",IDCANCEL,93,29,45,14 + LTEXT "Searching the registry...",IDC_STATIC,33,12,83,8 +END + +/* + * TEXTINCLUDE + */ + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + + + +/* + * String Table + */ + +/* + *STRINGTABLE DISCARDABLE + *BEGIN + * ID_HELP_HELPTOPICS "Otvorн pomocnнka pre Editor registrov." + * ID_HELP_ABOUT "Zobrazuje informбcie programu, инslo verzie a autorskй prбva." + *END + */ + +/*****************************************************************/ diff --git a/reactos/base/applications/regedit/rsrc.rc b/reactos/base/applications/regedit/rsrc.rc index bd6709af3c8..46c0d255986 100644 --- a/reactos/base/applications/regedit/rsrc.rc +++ b/reactos/base/applications/regedit/rsrc.rc @@ -40,13 +40,14 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/ko-KR.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" #include "lang/pt-PT.rc" #include "lang/ru-RU.rc" #include "lang/sl-SI.rc" +#include "lang/sk-SK.rc" #include "lang/sv-SE.rc" #include "lang/th-TH.rc" #include "lang/uk-UA.rc" diff --git a/reactos/base/applications/regedit/treeview.c b/reactos/base/applications/regedit/treeview.c index ce2881f62f0..9165daba3b1 100644 --- a/reactos/base/applications/regedit/treeview.c +++ b/reactos/base/applications/regedit/treeview.c @@ -24,14 +24,12 @@ /* Image_Open, Image_Closed, and Image_Root - integer variables for indexes of the images. */ /* CX_ICON and CY_ICON - width and height of an icon. */ /* NUM_ICON - number of icons to add to the image list. */ -int Image_Open; -int Image_Closed; -int Image_Root; +static int Image_Open = 0; +static int Image_Closed = 0; +static int Image_Root = 0; static LPTSTR pathBuffer; -#define CX_ICON 16 -#define CY_ICON 16 #define NUM_ICONS 3 static BOOL get_item_path(HWND hwndTV, HTREEITEM hItem, HKEY* phKey, LPTSTR* pKeyPath, int* pPathLen, int* pMaxLen) @@ -415,24 +413,57 @@ static BOOL InitTreeViewImageLists(HWND hwndTV) HICON hico; /* handle to icon */ /* Create the image list. */ - if ((himl = ImageList_Create(CX_ICON, CY_ICON, - ILC_MASK|ILC_COLOR32, 0, NUM_ICONS)) == NULL) + if ((himl = ImageList_Create(GetSystemMetrics(SM_CXSMICON), + GetSystemMetrics(SM_CYSMICON), + ILC_MASK | ILC_COLOR32, + 0, + NUM_ICONS)) == NULL) + { return FALSE; + } /* Add the open file, closed file, and document bitmaps. */ - hico = LoadIcon(hInst, MAKEINTRESOURCE(IDI_OPEN_FILE)); - Image_Open = ImageList_AddIcon(himl, hico); + hico = LoadImage(hInst, + MAKEINTRESOURCE(IDI_OPEN_FILE), + IMAGE_ICON, + GetSystemMetrics(SM_CXSMICON), + GetSystemMetrics(SM_CYSMICON), + 0); + if (hico) + { + Image_Open = ImageList_AddIcon(himl, hico); + DestroyIcon(hico); + } - hico = LoadIcon(hInst, MAKEINTRESOURCE(IDI_CLOSED_FILE)); - Image_Closed = ImageList_AddIcon(himl, hico); + hico = LoadImage(hInst, + MAKEINTRESOURCE(IDI_CLOSED_FILE), + IMAGE_ICON, + GetSystemMetrics(SM_CXSMICON), + GetSystemMetrics(SM_CYSMICON), + 0); + if (hico) + { + Image_Closed = ImageList_AddIcon(himl, hico); + DestroyIcon(hico); + } - hico = LoadIcon(hInst, MAKEINTRESOURCE(IDI_ROOT)); - Image_Root = ImageList_AddIcon(himl, hico); + hico = LoadImage(hInst, + MAKEINTRESOURCE(IDI_ROOT), + IMAGE_ICON, + GetSystemMetrics(SM_CXSMICON), + GetSystemMetrics(SM_CYSMICON), + 0); + if (hico) + { + Image_Root = ImageList_AddIcon(himl, hico); + DestroyIcon(hico); + } /* Fail if not all of the images were added. */ if (ImageList_GetImageCount(himl) < NUM_ICONS) { - return FALSE; + ImageList_Destroy(himl); + return FALSE; } /* Associate the image list with the tree view control. */ diff --git a/reactos/base/applications/screensavers/3dtext/lang/no-NO.rc b/reactos/base/applications/screensavers/3dtext/lang/no-NO.rc new file mode 100644 index 00000000000..07f9dc5f5c7 --- /dev/null +++ b/reactos/base/applications/screensavers/3dtext/lang/no-NO.rc @@ -0,0 +1,17 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +DLG_SCRNSAVECONFIGURE DIALOGEX 0, 0, 273, 178 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "3D Tekst skjermsparer innstillinger" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "OK",IDOK,216,7,50,14 + PUSHBUTTON "Avbryt",IDCANCEL,216,24,50,14 + EDITTEXT IDC_MESSAGE_TEXT,18,28,122,14,ES_AUTOHSCROLL + LTEXT "Tilpass tekst",IDC_STATIC,18,17,65,8 +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_DESCRIPTION "3D Tekst skjermsparer" +END diff --git a/reactos/base/applications/screensavers/3dtext/rsrc.rc b/reactos/base/applications/screensavers/3dtext/rsrc.rc index d567c12dd44..6b9ded6e2f5 100644 --- a/reactos/base/applications/screensavers/3dtext/rsrc.rc +++ b/reactos/base/applications/screensavers/3dtext/rsrc.rc @@ -19,6 +19,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/fr-FR.rc" #include "lang/it-IT.rc" #include "lang/lt-LT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/base/applications/screensavers/logon/lang/no-NO.rc b/reactos/base/applications/screensavers/logon/lang/no-NO.rc new file mode 100644 index 00000000000..3740677c302 --- /dev/null +++ b/reactos/base/applications/screensavers/logon/lang/no-NO.rc @@ -0,0 +1,7 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +STRINGTABLE DISCARDABLE +BEGIN + IDS_DESCRIPTION "Pеlogging skjermsparer" + IDS_TEXT "Ingen valg trenges е bli satt." +END diff --git a/reactos/base/applications/screensavers/logon/logon.rc b/reactos/base/applications/screensavers/logon/logon.rc index dbcea631175..5ab8c22d1b0 100644 --- a/reactos/base/applications/screensavers/logon/logon.rc +++ b/reactos/base/applications/screensavers/logon/logon.rc @@ -22,6 +22,7 @@ IDB_SERVER BITMAP DISCARDABLE "res/1.bmp" #include "lang/fr-FR.rc" #include "lang/lt-LT.rc" #include "lang/nl-NL.rc" +#include "lang/no-NO.rc" #include "lang/sk-SK.rc" #include "lang/uk-UA.rc" #include "lang/ru-RU.rc" diff --git a/reactos/base/applications/shutdown/lang/nb-NO.rc b/reactos/base/applications/shutdown/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/shutdown/lang/nb-NO.rc rename to reactos/base/applications/shutdown/lang/no-NO.rc diff --git a/reactos/base/applications/shutdown/rsrc.rc b/reactos/base/applications/shutdown/rsrc.rc index 223444a1b99..8424e473d5c 100644 --- a/reactos/base/applications/shutdown/rsrc.rc +++ b/reactos/base/applications/shutdown/rsrc.rc @@ -8,7 +8,7 @@ #include "lang/fr-FR.rc" #include "lang/ko-KR.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/base/applications/sndvol32/lang/nb-NO.rc b/reactos/base/applications/sndvol32/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/sndvol32/lang/nb-NO.rc rename to reactos/base/applications/sndvol32/lang/no-NO.rc diff --git a/reactos/base/applications/sndvol32/rsrc.rc b/reactos/base/applications/sndvol32/rsrc.rc index 9ce7fc5170f..a58d947ba2d 100644 --- a/reactos/base/applications/sndvol32/rsrc.rc +++ b/reactos/base/applications/sndvol32/rsrc.rc @@ -18,7 +18,7 @@ IDI_MAINAPP ICON DISCARDABLE resources/sndvol32.ico #include "lang/ja-JP.rc" #include "lang/lt-LT.rc" #include "lang/nl-NL.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" #include "lang/ru-RU.rc" diff --git a/reactos/base/applications/taskmgr/lang/nb-NO.rc b/reactos/base/applications/taskmgr/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/taskmgr/lang/nb-NO.rc rename to reactos/base/applications/taskmgr/lang/no-NO.rc diff --git a/reactos/base/applications/taskmgr/rsrc.rc b/reactos/base/applications/taskmgr/rsrc.rc index 116e01552ff..c7f79027bcb 100644 --- a/reactos/base/applications/taskmgr/rsrc.rc +++ b/reactos/base/applications/taskmgr/rsrc.rc @@ -15,7 +15,7 @@ #ifdef __GCC__ #include "lang/ja-JP.rc" #endif -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" diff --git a/reactos/base/applications/winhlp32/hlpfile.c b/reactos/base/applications/winhlp32/hlpfile.c index 93042ead4e0..77be1378e34 100644 --- a/reactos/base/applications/winhlp32/hlpfile.c +++ b/reactos/base/applications/winhlp32/hlpfile.c @@ -55,19 +55,19 @@ static BOOL HLPFILE_DoReadHlpFile(HLPFILE*, LPCSTR); static BOOL HLPFILE_ReadFileToBuffer(HLPFILE*, HFILE); static BOOL HLPFILE_FindSubFile(HLPFILE*, LPCSTR, BYTE**, BYTE**); static BOOL HLPFILE_SystemCommands(HLPFILE*); -static INT HLPFILE_UncompressedLZ77_Size(BYTE *ptr, BYTE *end); -static BYTE* HLPFILE_UncompressLZ77(BYTE *ptr, BYTE *end, BYTE *newptr); +static INT HLPFILE_UncompressedLZ77_Size(const BYTE *ptr, const BYTE *end); +static BYTE* HLPFILE_UncompressLZ77(const BYTE *ptr, const BYTE *end, BYTE *newptr); static BOOL HLPFILE_UncompressLZ77_Phrases(HLPFILE*); static BOOL HLPFILE_Uncompress_Phrases40(HLPFILE*); static BOOL HLPFILE_Uncompress_Topic(HLPFILE*); static BOOL HLPFILE_GetContext(HLPFILE*); static BOOL HLPFILE_GetKeywords(HLPFILE*); static BOOL HLPFILE_GetMap(HLPFILE*); -static BOOL HLPFILE_AddPage(HLPFILE*, BYTE*, BYTE*, unsigned, unsigned); -static BOOL HLPFILE_SkipParagraph(HLPFILE*, BYTE *, BYTE*, unsigned*); +static BOOL HLPFILE_AddPage(HLPFILE*, const BYTE*, const BYTE*, unsigned, unsigned); +static BOOL HLPFILE_SkipParagraph(HLPFILE*, const BYTE*, const BYTE*, unsigned*); static void HLPFILE_Uncompress2(HLPFILE*, const BYTE*, const BYTE*, BYTE*, const BYTE*); static BOOL HLPFILE_Uncompress3(HLPFILE*, char*, const char*, const BYTE*, const BYTE*); -static void HLPFILE_UncompressRLE(const BYTE* src, const BYTE* end, BYTE** dst, unsigned dstsz); +static void HLPFILE_UncompressRLE(const BYTE* src, const BYTE* end, BYTE* dst, unsigned dstsz); static BOOL HLPFILE_ReadFont(HLPFILE* hlpfile); /*********************************************************************** @@ -370,10 +370,10 @@ static BOOL HLPFILE_DoReadHlpFile(HLPFILE *hlpfile, LPCSTR lpszPath) * * HLPFILE_AddPage */ -static BOOL HLPFILE_AddPage(HLPFILE *hlpfile, BYTE *buf, BYTE *end, unsigned ref, unsigned offset) +static BOOL HLPFILE_AddPage(HLPFILE *hlpfile, const BYTE *buf, const BYTE *end, unsigned ref, unsigned offset) { HLPFILE_PAGE* page; - BYTE* title; + const BYTE* title; UINT titlesize, blocksize, datalen; char* ptr; HLPFILE_MACRO*macro; @@ -457,70 +457,70 @@ static BOOL HLPFILE_AddPage(HLPFILE *hlpfile, BYTE *buf, BYTE *end, unsigned ref return TRUE; } -static long fetch_long(BYTE** ptr) +static long fetch_long(const BYTE** ptr) { long ret; if (*(*ptr) & 1) { - ret = (*(unsigned long*)(*ptr) - 0x80000000L) / 2; + ret = (*(const unsigned long*)(*ptr) - 0x80000000L) / 2; (*ptr) += 4; } else { - ret = (*(unsigned short*)(*ptr) - 0x8000) / 2; + ret = (*(const unsigned short*)(*ptr) - 0x8000) / 2; (*ptr) += 2; } return ret; } -static unsigned long fetch_ulong(BYTE** ptr) +static unsigned long fetch_ulong(const BYTE** ptr) { unsigned long ret; if (*(*ptr) & 1) { - ret = *(unsigned long*)(*ptr) / 2; + ret = *(const unsigned long*)(*ptr) / 2; (*ptr) += 4; } else { - ret = *(unsigned short*)(*ptr) / 2; + ret = *(const unsigned short*)(*ptr) / 2; (*ptr) += 2; } return ret; } -static short fetch_short(BYTE** ptr) +static short fetch_short(const BYTE** ptr) { short ret; if (*(*ptr) & 1) { - ret = (*(unsigned short*)(*ptr) - 0x8000) / 2; + ret = (*(const unsigned short*)(*ptr) - 0x8000) / 2; (*ptr) += 2; } else { - ret = (*(unsigned char*)(*ptr) - 0x80) / 2; + ret = (*(const unsigned char*)(*ptr) - 0x80) / 2; (*ptr)++; } return ret; } -static unsigned short fetch_ushort(BYTE** ptr) +static unsigned short fetch_ushort(const BYTE** ptr) { unsigned short ret; if (*(*ptr) & 1) { - ret = *(unsigned short*)(*ptr) / 2; + ret = *(const unsigned short*)(*ptr) / 2; (*ptr) += 2; } else { - ret = *(unsigned char*)(*ptr) / 2; + ret = *(const unsigned char*)(*ptr) / 2; (*ptr)++; } return ret; @@ -530,9 +530,9 @@ static unsigned short fetch_ushort(BYTE** ptr) * * HLPFILE_SkipParagraph */ -static BOOL HLPFILE_SkipParagraph(HLPFILE *hlpfile, BYTE *buf, BYTE *end, unsigned* len) +static BOOL HLPFILE_SkipParagraph(HLPFILE *hlpfile, const BYTE *buf, const BYTE *end, unsigned* len) { - BYTE *tmp; + const BYTE *tmp; if (!hlpfile->first_page) {WINE_WARN("no page\n"); return FALSE;}; if (buf + 0x19 > end) {WINE_WARN("header too small\n"); return FALSE;}; @@ -553,11 +553,11 @@ static BOOL HLPFILE_SkipParagraph(HLPFILE *hlpfile, BYTE *buf, BYTE *end, unsign * * Decompress the data part of a bitmap or a metafile */ -static BYTE* HLPFILE_DecompressGfx(BYTE* src, unsigned csz, unsigned sz, BYTE packing) +static const BYTE* HLPFILE_DecompressGfx(const BYTE* src, unsigned csz, unsigned sz, BYTE packing, + BYTE** alloc) { - BYTE* dst; + const BYTE* dst; BYTE* tmp; - BYTE* tmp2; unsigned sz77; WINE_TRACE("Unpacking (%d) from %u bytes to %u bytes\n", packing, csz, sz); @@ -568,19 +568,18 @@ static BYTE* HLPFILE_DecompressGfx(BYTE* src, unsigned csz, unsigned sz, BYTE if (sz != csz) WINE_WARN("Bogus gfx sizes (uncompressed): %u / %u\n", sz, csz); dst = src; + *alloc = NULL; break; case 1: /* RunLen */ - tmp = dst = HeapAlloc(GetProcessHeap(), 0, sz); + dst = *alloc = HeapAlloc(GetProcessHeap(), 0, sz); if (!dst) return NULL; - HLPFILE_UncompressRLE(src, src + csz, &tmp, sz); - if (tmp - dst != sz) - WINE_WARN("Bogus gfx sizes (RunLen): %lu/%u\n", (SIZE_T)(tmp - dst), sz); + HLPFILE_UncompressRLE(src, src + csz, *alloc, sz); break; case 2: /* LZ77 */ sz77 = HLPFILE_UncompressedLZ77_Size(src, src + csz); - dst = HeapAlloc(GetProcessHeap(), 0, sz77); + dst = *alloc = HeapAlloc(GetProcessHeap(), 0, sz77); if (!dst) return NULL; - HLPFILE_UncompressLZ77(src, src + csz, dst); + HLPFILE_UncompressLZ77(src, src + csz, *alloc); if (sz77 != sz) WINE_WARN("Bogus gfx sizes (LZ77): %u / %u\n", sz77, sz); break; @@ -589,15 +588,13 @@ static BYTE* HLPFILE_DecompressGfx(BYTE* src, unsigned csz, unsigned sz, BYTE tmp = HeapAlloc(GetProcessHeap(), 0, sz77); if (!tmp) return FALSE; HLPFILE_UncompressLZ77(src, src + csz, tmp); - dst = tmp2 = HeapAlloc(GetProcessHeap(), 0, sz); + dst = *alloc = HeapAlloc(GetProcessHeap(), 0, sz); if (!dst) { HeapFree(GetProcessHeap(), 0, tmp); return FALSE; } - HLPFILE_UncompressRLE(tmp, tmp + sz77, &tmp2, sz); - if (tmp2 - dst != sz) - WINE_WARN("Bogus gfx sizes (LZ77+RunLen): %lu / %u\n", (SIZE_T)(tmp2 - dst), sz); + HLPFILE_UncompressRLE(tmp, tmp + sz77, *alloc, sz); HeapFree(GetProcessHeap(), 0, tmp); break; default: @@ -779,10 +776,11 @@ static BOOL HLPFILE_RtfAddTransparentBitmap(struct RtfData* rd, const BITMAPINFO * HLPFILE_RtfAddBitmap * */ -static BOOL HLPFILE_RtfAddBitmap(struct RtfData* rd, BYTE* beg, BYTE type, BYTE pack) +static BOOL HLPFILE_RtfAddBitmap(struct RtfData* rd, const BYTE* beg, BYTE type, BYTE pack) { - BYTE* ptr; - BYTE* pict_beg; + const BYTE* ptr; + const BYTE* pict_beg; + BYTE* alloc = NULL; BITMAPINFO* bi; unsigned long off, csz; unsigned nc = 0; @@ -840,7 +838,7 @@ static BOOL HLPFILE_RtfAddBitmap(struct RtfData* rd, BYTE* beg, BYTE type, BYTE ptr += 4; } } - pict_beg = HLPFILE_DecompressGfx(beg + off, csz, bi->bmiHeader.biSizeImage, pack); + pict_beg = HLPFILE_DecompressGfx(beg + off, csz, bi->bmiHeader.biSizeImage, pack, &alloc); if (clrImportant == 1 && nc > 0) { @@ -868,7 +866,7 @@ static BOOL HLPFILE_RtfAddBitmap(struct RtfData* rd, BYTE* beg, BYTE type, BYTE ret = TRUE; done: HeapFree(GetProcessHeap(), 0, bi); - if (pict_beg != beg + off) HeapFree(GetProcessHeap(), 0, pict_beg); + HeapFree(GetProcessHeap(), 0, alloc); return ret; } @@ -877,12 +875,13 @@ done: * HLPFILE_RtfAddMetaFile * */ -static BOOL HLPFILE_RtfAddMetaFile(struct RtfData* rd, BYTE* beg, BYTE pack) +static BOOL HLPFILE_RtfAddMetaFile(struct RtfData* rd, const BYTE* beg, BYTE pack) { - BYTE* ptr; + const BYTE* ptr; unsigned long size, csize; unsigned long off, hsoff; - BYTE* bits; + const BYTE* bits; + BYTE* alloc = NULL; char tmp[256]; unsigned mm; BOOL ret; @@ -907,13 +906,13 @@ static BOOL HLPFILE_RtfAddMetaFile(struct RtfData* rd, BYTE* beg, BYTE pack) WINE_TRACE("sz=%lu csz=%lu offs=%lu/%u,%lu\n", size, csize, off, ptr - beg, hsoff); - bits = HLPFILE_DecompressGfx(beg + off, csize, size, pack); + bits = HLPFILE_DecompressGfx(beg + off, csize, size, pack, &alloc); if (!bits) return FALSE; ret = HLPFILE_RtfAddHexBytes(rd, bits, size) && HLPFILE_RtfAddControl(rd, "}"); - if (bits != beg + off) HeapFree(GetProcessHeap(), 0, bits); + HeapFree(GetProcessHeap(), 0, alloc); return ret; } @@ -923,7 +922,7 @@ static BOOL HLPFILE_RtfAddMetaFile(struct RtfData* rd, BYTE* beg, BYTE pack) * */ static BOOL HLPFILE_RtfAddGfxByAddr(struct RtfData* rd, HLPFILE *hlpfile, - BYTE* ref, unsigned long size) + const BYTE* ref, unsigned long size) { unsigned i, numpict; @@ -932,9 +931,9 @@ static BOOL HLPFILE_RtfAddGfxByAddr(struct RtfData* rd, HLPFILE *hlpfile, for (i = 0; i < numpict; i++) { - BYTE* beg; - BYTE* ptr; - BYTE type, pack; + const BYTE* beg; + const BYTE* ptr; + BYTE type, pack; WINE_TRACE("Offset[%d] = %x\n", i, GET_UINT(ref, (1 + i) * 4)); beg = ptr = ref + GET_UINT(ref, (1 + i) * 4); @@ -1043,7 +1042,7 @@ static BOOL HLPFILE_BrowseParagraph(HLPFILE_PAGE* page, struct RtfData* rd, BYTE *buf, BYTE* end, unsigned* parlen) { UINT textsize; - BYTE *format, *format_end; + const BYTE *format, *format_end; char *text, *text_base, *text_end; long size, blocksize, datalen; unsigned short bits; @@ -1640,7 +1639,7 @@ BOOL HLPFILE_BrowsePage(HLPFILE_PAGE* page, struct RtfData* rd, case 0x20: case 0x23: if (!HLPFILE_BrowseParagraph(page, rd, buf, end, &parlen)) return FALSE; - if (relative >= index * 0x8000 + offs) + if (relative > index * 0x8000 + offs) rd->char_pos_rel = rd->char_pos; offs += parlen; break; @@ -1887,6 +1886,17 @@ static BOOL HLPFILE_SystemCommands(HLPFILE* hlpfile) hlpfile->flags = flags; hlpfile->charset = DEFAULT_CHARSET; + if (hlpfile->version <= 16) + { + char *str = (char*)buf + 0x15; + + hlpfile->lpszTitle = HeapAlloc(GetProcessHeap(), 0, strlen(str) + 1); + if (!hlpfile->lpszTitle) return FALSE; + lstrcpy(hlpfile->lpszTitle, str); + WINE_TRACE("Title: %s\n", hlpfile->lpszTitle); + /* Nothing more to parse */ + return TRUE; + } for (ptr = buf + 0x15; ptr + 4 <= end; ptr += GET_USHORT(ptr, 2) + 4) { char *str = (char*) ptr + 4; @@ -1996,7 +2006,7 @@ static BOOL HLPFILE_SystemCommands(HLPFILE* hlpfile) * * HLPFILE_UncompressedLZ77_Size */ -static INT HLPFILE_UncompressedLZ77_Size(BYTE *ptr, BYTE *end) +static INT HLPFILE_UncompressedLZ77_Size(const BYTE *ptr, const BYTE *end) { int i, newsize = 0; @@ -2023,7 +2033,7 @@ static INT HLPFILE_UncompressedLZ77_Size(BYTE *ptr, BYTE *end) * * HLPFILE_UncompressLZ77 */ -static BYTE *HLPFILE_UncompressLZ77(BYTE *ptr, BYTE *end, BYTE *newptr) +static BYTE *HLPFILE_UncompressLZ77(const BYTE *ptr, const BYTE *end, BYTE *newptr) { int i; @@ -2349,10 +2359,10 @@ static BOOL HLPFILE_Uncompress3(HLPFILE* hlpfile, char* dst, const char* dst_end * * */ -static void HLPFILE_UncompressRLE(const BYTE* src, const BYTE* end, BYTE** dst, unsigned dstsz) +static void HLPFILE_UncompressRLE(const BYTE* src, const BYTE* end, BYTE* dst, unsigned dstsz) { BYTE ch; - BYTE* sdst = *dst + dstsz; + BYTE* sdst = dst + dstsz; while (src < end) { @@ -2360,21 +2370,21 @@ static void HLPFILE_UncompressRLE(const BYTE* src, const BYTE* end, BYTE** dst, if (ch & 0x80) { ch &= 0x7F; - if ((*dst) + ch <= sdst) - memcpy(*dst, src, ch); + if (dst + ch <= sdst) + memcpy(dst, src, ch); src += ch; } else { - if ((*dst) + ch <= sdst) - memset(*dst, (char)*src, ch); + if (dst + ch <= sdst) + memset(dst, (char)*src, ch); src++; } - *dst += ch; + dst += ch; } - if (*dst != sdst) + if (dst != sdst) WINE_WARN("Buffer X-flow: d(%lu) instead of d(%u)\n", - (SIZE_T)(*dst - (sdst - dstsz)), dstsz); + (SIZE_T)(dst - (sdst - dstsz)), dstsz); } /************************************************************************** @@ -2641,5 +2651,6 @@ void HLPFILE_FreeHlpFile(HLPFILE* hlpfile) HeapFree(GetProcessHeap(), 0, hlpfile->phrases_offsets); HeapFree(GetProcessHeap(), 0, hlpfile->phrases_buffer); HeapFree(GetProcessHeap(), 0, hlpfile->topic_map); + HeapFree(GetProcessHeap(), 0, hlpfile->help_on_file); HeapFree(GetProcessHeap(), 0, hlpfile); } diff --git a/reactos/base/applications/winhlp32/hlpfile.h b/reactos/base/applications/winhlp32/hlpfile.h index d1467c1208d..829a9b9fff5 100644 --- a/reactos/base/applications/winhlp32/hlpfile.h +++ b/reactos/base/applications/winhlp32/hlpfile.h @@ -132,6 +132,11 @@ typedef struct tagHlpFileFile unsigned numWindows; HLPFILE_WINDOWINFO* windows; HICON hIcon; + + BOOL has_popup_color; + COLORREF popup_color; + + LPSTR help_on_file; } HLPFILE; /* diff --git a/reactos/base/applications/winhlp32/lang/da-DK.rc b/reactos/base/applications/winhlp32/lang/da-DK.rc index 886943ae381..927fc32079f 100644 --- a/reactos/base/applications/winhlp32/lang/da-DK.rc +++ b/reactos/base/applications/winhlp32/lang/da-DK.rc @@ -73,8 +73,6 @@ FONT 8, "MS Shell Dlg" CAPTION "Index" { LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER - PUSHBUTTON "&OK", IDOK, 40, 170, 50, 12 - PUSHBUTTON "&Annuller", IDCANCEL, 120, 170, 50, 12 } /* Strings */ diff --git a/reactos/base/applications/winhlp32/lang/de-DE.rc b/reactos/base/applications/winhlp32/lang/de-DE.rc index 1be4838fd1e..49cda6d152e 100644 --- a/reactos/base/applications/winhlp32/lang/de-DE.rc +++ b/reactos/base/applications/winhlp32/lang/de-DE.rc @@ -72,8 +72,6 @@ FONT 8, "MS Shell Dlg" CAPTION "Index" { LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER - PUSHBUTTON "&OK", IDOK, 40, 170, 50, 12 - PUSHBUTTON "&Abbrechen", IDCANCEL, 120, 170, 50, 12 } /* Strings */ diff --git a/reactos/base/applications/winhlp32/lang/en-US.rc b/reactos/base/applications/winhlp32/lang/en-US.rc index 7c46e2b2879..1276f9ccc1e 100644 --- a/reactos/base/applications/winhlp32/lang/en-US.rc +++ b/reactos/base/applications/winhlp32/lang/en-US.rc @@ -72,8 +72,6 @@ FONT 8, "MS Shell Dlg" CAPTION "Index" { LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER - PUSHBUTTON "&OK", IDOK, 40, 170, 50, 12 - PUSHBUTTON "&Cancel", IDCANCEL, 120, 170, 50, 12 } IDD_SEARCH DIALOG DISCARDABLE 0, 0, 200, 190 LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT diff --git a/reactos/base/applications/winhlp32/lang/fr-FR.rc b/reactos/base/applications/winhlp32/lang/fr-FR.rc index 2c6d112c2ea..60acba8b5f8 100644 --- a/reactos/base/applications/winhlp32/lang/fr-FR.rc +++ b/reactos/base/applications/winhlp32/lang/fr-FR.rc @@ -75,8 +75,6 @@ FONT 8, "MS Shell Dlg" CAPTION "Index" { LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER - PUSHBUTTON "&OK", IDOK, 40, 170, 50, 12 - PUSHBUTTON "&Annuler", IDCANCEL, 120, 170, 50, 12 } /* Strings */ diff --git a/reactos/base/applications/winhlp32/lang/ko-KR.rc b/reactos/base/applications/winhlp32/lang/ko-KR.rc index 18c59ab9196..3b059741b91 100644 --- a/reactos/base/applications/winhlp32/lang/ko-KR.rc +++ b/reactos/base/applications/winhlp32/lang/ko-KR.rc @@ -73,10 +73,15 @@ FONT 8, "MS Shell Dlg" CAPTION "АОµ¦Ѕє" { LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER - PUSHBUTTON "И®АО(&O)", IDOK, 40, 170, 50, 12 - PUSHBUTTON "ГлјТ(&C)", IDCANCEL, 120, 170, 50, 12 } +IDD_SEARCH DIALOG DISCARDABLE 0, 0, 200, 190 LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT +STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Shell Dlg" +CAPTION "ГЈ±в" +{ + LTEXT "ѕЖБч ±ёЗцµЗБц ѕКАЅ", -1, 10, 10, 180, 150 +} /* Strings */ diff --git a/reactos/base/applications/winhlp32/lang/nl-NL.rc b/reactos/base/applications/winhlp32/lang/nl-NL.rc index 4dece1d4903..6a8747a859e 100644 --- a/reactos/base/applications/winhlp32/lang/nl-NL.rc +++ b/reactos/base/applications/winhlp32/lang/nl-NL.rc @@ -72,8 +72,14 @@ FONT 8, "MS Shell Dlg" CAPTION "Index" { LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER - PUSHBUTTON "&OK", IDOK, 40, 170, 50, 12 - PUSHBUTTON "&Annuleren", IDCANCEL, 120, 170, 50, 12 +} + +IDD_SEARCH DIALOG DISCARDABLE 0, 0, 200, 190 LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL +STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Shell Dlg" +CAPTION "Zoeken" +{ + LTEXT "Nog niet geimplementeerd", -1, 10, 10, 180, 150 } /* Strings */ diff --git a/reactos/base/applications/winhlp32/lang/nb-NO.rc b/reactos/base/applications/winhlp32/lang/no-NO.rc similarity index 88% rename from reactos/base/applications/winhlp32/lang/nb-NO.rc rename to reactos/base/applications/winhlp32/lang/no-NO.rc index 2301c7cd966..1632da6d427 100644 --- a/reactos/base/applications/winhlp32/lang/nb-NO.rc +++ b/reactos/base/applications/winhlp32/lang/no-NO.rc @@ -26,17 +26,17 @@ MAIN_MENU MENU LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL MENUITEM "&Еpne", MNID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "Skriv &ut", MNID_FILE_PRINT - MENUITEM "Opp&sett av skriveren ...", MNID_FILE_SETUP + MENUITEM "Opp&sett av skriveren...", MNID_FILE_SETUP MENUITEM SEPARATOR MENUITEM "&Avslutt", MNID_FILE_EXIT } POPUP "R&ediger" { - MENUITEM "&Kopier ...", MNID_EDIT_COPYDLG + MENUITEM "&Kopier...", MNID_EDIT_COPYDLG MENUITEM SEPARATOR - MENUITEM "K&ommenter ...", MNID_EDIT_ANNOTATE + MENUITEM "K&ommenter...", MNID_EDIT_ANNOTATE } POPUP "&Bokmerke" { - MENUITEM "&Definer ...", MNID_BKMK_DEFINE + MENUITEM "&Definer...", MNID_BKMK_DEFINE } POPUP "&Innstillinger" { POPUP "Synlighet" @@ -58,7 +58,7 @@ MAIN_MENU MENU LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL MENUITEM "&Hjelp til Hjelp", MNID_HELP_HELPON MENUITEM "All&tid шverst", MNID_HELP_HELPTOP MENUITEM SEPARATOR - MENUITEM "&Informasjon ...", MNID_HELP_ABOUT + MENUITEM "&Informasjon...", MNID_HELP_ABOUT #ifdef WINELIB MENUITEM "&Om Wine", MNID_HELP_WINE #endif @@ -71,8 +71,6 @@ FONT 8, "MS Shell Dlg" CAPTION "Innhold" { LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER - PUSHBUTTON "&OK", IDOK, 40, 170, 50, 12 - PUSHBUTTON "&Avbryt", IDCANCEL, 120, 170, 50, 12 } /* Strings */ @@ -98,9 +96,9 @@ CONTEXT_MENU MENU LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL BEGIN POPUP "" BEGIN - MENUITEM "Kommentar ...", MNID_CTXT_ANNOTATE + MENUITEM "Kommentar...", MNID_CTXT_ANNOTATE MENUITEM "Kopier", MNID_CTXT_COPY - MENUITEM "Skriv ut ...", MNID_CTXT_PRINT + MENUITEM "Skriv ut...", MNID_CTXT_PRINT POPUP "Skriftstшrrelse" BEGIN MENUITEM "Liten", MNID_CTXT_FONTS_SMALL diff --git a/reactos/base/applications/winhlp32/lang/pl-PL.rc b/reactos/base/applications/winhlp32/lang/pl-PL.rc index b8234273e64..17d5d22e346 100644 --- a/reactos/base/applications/winhlp32/lang/pl-PL.rc +++ b/reactos/base/applications/winhlp32/lang/pl-PL.rc @@ -73,8 +73,6 @@ FONT 8, "MS Shell Dlg" CAPTION "Indeks" { LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER - PUSHBUTTON "&OK", IDOK, 40, 170, 50, 12 - PUSHBUTTON "&Anuluj", IDCANCEL, 120, 170, 50, 12 } /* Strings */ diff --git a/reactos/base/applications/winhlp32/lang/ru-RU.rc b/reactos/base/applications/winhlp32/lang/ru-RU.rc index b2ea9ad5656..af0097b7eea 100644 --- a/reactos/base/applications/winhlp32/lang/ru-RU.rc +++ b/reactos/base/applications/winhlp32/lang/ru-RU.rc @@ -71,8 +71,6 @@ FONT 8, "MS Shell Dlg" CAPTION "Указатель" { LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER - PUSHBUTTON "&OK", IDOK, 40, 170, 50, 12 - PUSHBUTTON "&Отмена", IDCANCEL, 120, 170, 50, 12 } /* Strings */ @@ -85,13 +83,13 @@ STID_INFO, " STID_NOT_IMPLEMENTED, "Не реализованно" STID_HLPFILE_ERROR_s, "Ошибка при чтении файла помощи `%s'" STID_INDEX, "&Содержание" -STID_CONTENTS, "Summary" +STID_CONTENTS, "Начало" STID_BACK, "&Назад" STID_ALL_FILES, "Все файлы (*.*)" STID_HELP_FILES_HLP, "Файлы справки (*.hlp)" STID_FILE_NOT_FOUND_s "Не могу найти '%s'. Вы хотите найти этот файл самостоятельно?" STID_NO_RICHEDIT "Не могу найти richedit" -STID_PSH_INDEX, "Help topics: " +STID_PSH_INDEX, "Содержание: " } CONTEXT_MENU MENU LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT diff --git a/reactos/base/applications/winhlp32/lang/sl-SI.rc b/reactos/base/applications/winhlp32/lang/sl-SI.rc index f28b9f1c028..f1a213d9ab9 100644 --- a/reactos/base/applications/winhlp32/lang/sl-SI.rc +++ b/reactos/base/applications/winhlp32/lang/sl-SI.rc @@ -73,8 +73,6 @@ FONT 8, "MS Shell Dlg" CAPTION "Indeks" { LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER - PUSHBUTTON "&V redu", IDOK, 40, 170, 50, 12 - PUSHBUTTON "&PrekliДЌi", IDCANCEL, 120, 170, 50, 12 } /* Strings */ diff --git a/reactos/base/applications/winhlp32/lex.yy.c b/reactos/base/applications/winhlp32/lex.yy.c index 76267739db1..c644d1be831 100644 --- a/reactos/base/applications/winhlp32/lex.yy.c +++ b/reactos/base/applications/winhlp32/lex.yy.c @@ -387,7 +387,7 @@ char *yytext; * Help Viewer * * Copyright 1996 Ulrich Schmid - * Copyright 2002 Eric Pouech + * Copyright 2002,2008 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -421,16 +421,22 @@ char *yytext; WINE_DEFAULT_DEBUG_CHANNEL(winhelp); -static LPCSTR macroptr; -static LPSTR strptr; -static int quote_stack[32]; -static unsigned int quote_stk_idx = 0; +struct lex_data { + LPCSTR macroptr; + LPSTR strptr; + int quote_stack[32]; + unsigned quote_stk_idx; + LPSTR cache_string[32]; + int cache_used; +}; +static struct lex_data* lex_data = NULL; + struct lexret yylval; #define YY_INPUT(buf,result,max_size)\ - if ((result = *macroptr ? 1 : 0)) buf[0] = *macroptr++; + if ((result = *lex_data->macroptr ? 1 : 0)) buf[0] = *lex_data->macroptr++; -#line 434 "lex.yy.c" +#line 440 "lex.yy.c" /* Macros after this point can all be overridden by user definitions in * section 1. @@ -581,10 +587,10 @@ YY_DECL register char *yy_cp, *yy_bp; register int yy_act; -#line 49 "macro.lex.l" +#line 55 "macro.lex.l" -#line 588 "lex.yy.c" +#line 594 "lex.yy.c" if ( yy_init ) { @@ -669,92 +675,94 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP -#line 51 "macro.lex.l" +#line 57 "macro.lex.l" yylval.integer = strtol(yytext, NULL, 10); return INTEGER; YY_BREAK case 2: YY_RULE_SETUP -#line 52 "macro.lex.l" +#line 58 "macro.lex.l" yylval.integer = strtol(yytext, NULL, 16); return INTEGER; YY_BREAK case 3: YY_RULE_SETUP -#line 54 "macro.lex.l" +#line 60 "macro.lex.l" return MACRO_Lookup(yytext, &yylval); YY_BREAK case 4: -#line 57 "macro.lex.l" +#line 63 "macro.lex.l" case 5: -#line 58 "macro.lex.l" +#line 64 "macro.lex.l" case 6: -#line 59 "macro.lex.l" +#line 65 "macro.lex.l" case 7: -#line 60 "macro.lex.l" +#line 66 "macro.lex.l" case 8: -#line 61 "macro.lex.l" +#line 67 "macro.lex.l" case 9: YY_RULE_SETUP -#line 61 "macro.lex.l" +#line 67 "macro.lex.l" { - if (quote_stk_idx == 0 || - (yytext[0] == '\"' && quote_stack[quote_stk_idx - 1] != '\"') || + if (lex_data->quote_stk_idx == 0 || + (yytext[0] == '\"' && lex_data->quote_stack[lex_data->quote_stk_idx - 1] != '\"') || (yytext[0] == '`')) { /* opening a new one */ - if (quote_stk_idx == 0) + if (lex_data->quote_stk_idx == 0) { - strptr = HeapAlloc(GetProcessHeap(), 0, strlen(macroptr) + 1); - yylval.string = strptr; + assert(lex_data->cache_used < sizeof(lex_data->cache_string) / sizeof(lex_data->cache_string[0])); + lex_data->strptr = lex_data->cache_string[lex_data->cache_used] = HeapAlloc(GetProcessHeap(), 0, strlen(lex_data->macroptr) + 1); + yylval.string = lex_data->strptr; + lex_data->cache_used++; BEGIN(quote); } - else *strptr++ = yytext[0]; - quote_stack[quote_stk_idx++] = yytext[0]; - assert(quote_stk_idx < sizeof(quote_stack) / sizeof(quote_stack[0])); + else *lex_data->strptr++ = yytext[0]; + lex_data->quote_stack[lex_data->quote_stk_idx++] = yytext[0]; + assert(lex_data->quote_stk_idx < sizeof(lex_data->quote_stack) / sizeof(lex_data->quote_stack[0])); } else { if (yytext[0] == '`') assert(0); /* close the current quote */ - if (--quote_stk_idx == 0) + if (--lex_data->quote_stk_idx == 0) { BEGIN INITIAL; - *strptr++ = '\0'; + *lex_data->strptr++ = '\0'; return STRING; } - else *strptr++ = yytext[0]; + else *lex_data->strptr++ = yytext[0]; } } YY_BREAK case 10: YY_RULE_SETUP -#line 91 "macro.lex.l" -*strptr++ = yytext[0]; +#line 99 "macro.lex.l" +*lex_data->strptr++ = yytext[0]; YY_BREAK case 11: YY_RULE_SETUP -#line 92 "macro.lex.l" -*strptr++ = yytext[1]; +#line 100 "macro.lex.l" +*lex_data->strptr++ = yytext[1]; YY_BREAK case YY_STATE_EOF(quote): -#line 93 "macro.lex.l" +#line 101 "macro.lex.l" return 0; YY_BREAK case 12: YY_RULE_SETUP -#line 95 "macro.lex.l" +#line 103 "macro.lex.l" YY_BREAK case 13: YY_RULE_SETUP -#line 96 "macro.lex.l" +#line 104 "macro.lex.l" return yytext[0]; YY_BREAK case 14: YY_RULE_SETUP -#line 97 "macro.lex.l" +#line 105 "macro.lex.l" ECHO; YY_BREAK -#line 758 "lex.yy.c" +#line 766 "lex.yy.c" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -1640,7 +1648,7 @@ int main() return 0; } #endif -#line 97 "macro.lex.l" +#line 105 "macro.lex.l" #if 0 @@ -1807,11 +1815,17 @@ static int MACRO_CallVoidFunc(FARPROC fn, const char* args) BOOL MACRO_ExecuteMacro(LPCSTR macro) { + struct lex_data curr_lex_data, *prev_lex_data; + BOOL ret = TRUE; int t; WINE_TRACE("%s\n", wine_dbgstr_a(macro)); - macroptr = macro; + prev_lex_data = lex_data; + lex_data = &curr_lex_data; + + memset(lex_data, 0, sizeof(*lex_data)); + lex_data->macroptr = macro; while ((t = yylex()) != EMPTY) { @@ -1830,17 +1844,18 @@ BOOL MACRO_ExecuteMacro(LPCSTR macro) } switch (t = yylex()) { - case EMPTY: return 1; + case EMPTY: goto done; case ';': break; - default: return 0; + default: ret = FALSE; goto done; } } - HeapFree(GetProcessHeap(), 0, strptr); - strptr = NULL; - quote_stk_idx = 0; +done: + for (t = 0; t < lex_data->cache_used; t++) + HeapFree(GetProcessHeap(), 0, lex_data->cache_string[t]); + lex_data = prev_lex_data; - return 1; + return ret; } #ifndef yywrap diff --git a/reactos/base/applications/winhlp32/macro.c b/reactos/base/applications/winhlp32/macro.c index c055c71649e..1c970c7fead 100644 --- a/reactos/base/applications/winhlp32/macro.c +++ b/reactos/base/applications/winhlp32/macro.c @@ -2,7 +2,7 @@ * Help Viewer * * Copyright 1996 Ulrich Schmid - * Copyright 2002 Eric Pouech + * Copyright 2002, 2008 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -555,8 +555,14 @@ void CALLBACK MACRO_GotoMark(LPCSTR str) void CALLBACK MACRO_HelpOn(void) { + LPCSTR file; + WINE_TRACE("()\n"); - MACRO_JumpContents((Globals.wVersion > 4) ? "winhelp32.hlp" : "winhelp.hlp", NULL); + file = Globals.active_win->page->file->help_on_file; + if (!file) + file = (Globals.wVersion > 4) ? "winhlp32.hlp" : "winhelp.hlp"; + + MACRO_JumpContents(file, NULL); } void CALLBACK MACRO_HelpOnTop(void) @@ -890,12 +896,19 @@ void CALLBACK MACRO_SetContents(LPCSTR str, LONG u) void CALLBACK MACRO_SetHelpOnFile(LPCSTR str) { - WINE_FIXME("(\"%s\")\n", str); + WINE_TRACE("(\"%s\")\n", str); + + HeapFree(GetProcessHeap(), 0, Globals.active_win->page->file->help_on_file); + Globals.active_win->page->file->help_on_file = HeapAlloc(GetProcessHeap(), 0, strlen(str) + 1); + if (Globals.active_win->page->file->help_on_file) + strcpy(Globals.active_win->page->file->help_on_file, str); } -void CALLBACK MACRO_SetPopupColor(LONG u1, LONG u2, LONG u3) +void CALLBACK MACRO_SetPopupColor(LONG r, LONG g, LONG b) { - WINE_FIXME("(%u, %u, %u)\n", u1, u2, u3); + WINE_TRACE("(%x, %x, %x)\n", r, g, b); + Globals.active_win->page->file->has_popup_color = TRUE; + Globals.active_win->page->file->popup_color = RGB(r, g, b); } void CALLBACK MACRO_ShellExecute(LPCSTR str1, LPCSTR str2, LONG u1, LONG u2, LPCSTR str3, LPCSTR str4) diff --git a/reactos/base/applications/winhlp32/macro.lex.l b/reactos/base/applications/winhlp32/macro.lex.l index 03c518f2959..0594a2d6fc5 100644 --- a/reactos/base/applications/winhlp32/macro.lex.l +++ b/reactos/base/applications/winhlp32/macro.lex.l @@ -3,7 +3,7 @@ * Help Viewer * * Copyright 1996 Ulrich Schmid - * Copyright 2002 Eric Pouech + * Copyright 2002,2008 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -36,14 +36,20 @@ WINE_DEFAULT_DEBUG_CHANNEL(winhelp); -static LPCSTR macroptr; -static LPSTR strptr; -static int quote_stack[32]; -static unsigned int quote_stk_idx = 0; +struct lex_data { + LPCSTR macroptr; + LPSTR strptr; + int quote_stack[32]; + unsigned quote_stk_idx; + LPSTR cache_string[32]; + int cache_used; +}; +static struct lex_data* lex_data = NULL; + struct lexret yylval; #define YY_INPUT(buf,result,max_size)\ - if ((result = *macroptr ? 1 : 0)) buf[0] = *macroptr++; + if ((result = *lex_data->macroptr ? 1 : 0)) buf[0] = *lex_data->macroptr++; %} %% @@ -59,37 +65,39 @@ struct lexret yylval; \` | \" | \' { - if (quote_stk_idx == 0 || - (yytext[0] == '\"' && quote_stack[quote_stk_idx - 1] != '\"') || + if (lex_data->quote_stk_idx == 0 || + (yytext[0] == '\"' && lex_data->quote_stack[lex_data->quote_stk_idx - 1] != '\"') || (yytext[0] == '`')) { /* opening a new one */ - if (quote_stk_idx == 0) + if (lex_data->quote_stk_idx == 0) { - strptr = HeapAlloc(GetProcessHeap(), 0, strlen(macroptr) + 1); - yylval.string = strptr; + assert(lex_data->cache_used < sizeof(lex_data->cache_string) / sizeof(lex_data->cache_string[0])); + lex_data->strptr = lex_data->cache_string[lex_data->cache_used] = HeapAlloc(GetProcessHeap(), 0, strlen(lex_data->macroptr) + 1); + yylval.string = lex_data->strptr; + lex_data->cache_used++; BEGIN(quote); } - else *strptr++ = yytext[0]; - quote_stack[quote_stk_idx++] = yytext[0]; - assert(quote_stk_idx < sizeof(quote_stack) / sizeof(quote_stack[0])); + else *lex_data->strptr++ = yytext[0]; + lex_data->quote_stack[lex_data->quote_stk_idx++] = yytext[0]; + assert(lex_data->quote_stk_idx < sizeof(lex_data->quote_stack) / sizeof(lex_data->quote_stack[0])); } else { if (yytext[0] == '`') assert(0); /* close the current quote */ - if (--quote_stk_idx == 0) + if (--lex_data->quote_stk_idx == 0) { BEGIN INITIAL; - *strptr++ = '\0'; + *lex_data->strptr++ = '\0'; return STRING; } - else *strptr++ = yytext[0]; + else *lex_data->strptr++ = yytext[0]; } } -. *strptr++ = yytext[0]; -\\. *strptr++ = yytext[1]; +. *lex_data->strptr++ = yytext[0]; +\\. *lex_data->strptr++ = yytext[1]; <> return 0; " " @@ -260,11 +268,17 @@ static int MACRO_CallVoidFunc(FARPROC fn, const char* args) BOOL MACRO_ExecuteMacro(LPCSTR macro) { + struct lex_data curr_lex_data, *prev_lex_data; + BOOL ret = TRUE; int t; WINE_TRACE("%s\n", wine_dbgstr_a(macro)); - macroptr = macro; + prev_lex_data = lex_data; + lex_data = &curr_lex_data; + + memset(lex_data, 0, sizeof(*lex_data)); + lex_data->macroptr = macro; while ((t = yylex()) != EMPTY) { @@ -283,17 +297,18 @@ BOOL MACRO_ExecuteMacro(LPCSTR macro) } switch (t = yylex()) { - case EMPTY: return 1; + case EMPTY: goto done; case ';': break; - default: return 0; + default: ret = FALSE; goto done; } } - HeapFree(GetProcessHeap(), 0, strptr); - strptr = NULL; - quote_stk_idx = 0; +done: + for (t = 0; t < lex_data->cache_used; t++) + HeapFree(GetProcessHeap(), 0, lex_data->cache_string[t]); + lex_data = prev_lex_data; - return 1; + return ret; } #ifndef yywrap diff --git a/reactos/base/applications/winhlp32/rsrc.rc b/reactos/base/applications/winhlp32/rsrc.rc index cc63711f795..484f0e98a6c 100644 --- a/reactos/base/applications/winhlp32/rsrc.rc +++ b/reactos/base/applications/winhlp32/rsrc.rc @@ -42,7 +42,7 @@ IDI_WINHELP ICON DISCARDABLE winhelp.ico #include "lang/ko-KR.rc" // #include "lang/lt-LT.rc" #include "lang/nl-NL.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" // #include "lang/rm-CH.rc" diff --git a/reactos/base/applications/winhlp32/winhelp.c b/reactos/base/applications/winhlp32/winhelp.c index 407d92ff617..91f68c297cd 100644 --- a/reactos/base/applications/winhlp32/winhelp.c +++ b/reactos/base/applications/winhlp32/winhelp.c @@ -5,6 +5,7 @@ * 2002 Sylvain Petreolle * 2002, 2008 Eric Pouech * 2004 Ken Belleau + * 2008 Kirill K. Smirnov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -58,7 +59,7 @@ static void WINHELP_DeleteButtons(WINHELP_WINDOW*); static void WINHELP_SetupText(HWND hWnd, WINHELP_WINDOW *win, ULONG relative); static void WINHELP_DeletePageLinks(HLPFILE_PAGE* page); -WINHELP_GLOBALS Globals = {3, NULL, TRUE, NULL, NULL, NULL, NULL, NULL, {{{NULL,NULL}},0}}; +WINHELP_GLOBALS Globals = {3, NULL, TRUE, NULL, NULL, NULL, NULL, NULL, {{{NULL,NULL}},0}, NULL}; #define CTL_ID_BUTTON 0x700 #define CTL_ID_TEXT 0x701 @@ -228,7 +229,10 @@ static HLPFILE_WINDOWINFO* WINHELP_GetPopupWindowInfo(HLPFILE* hlpfile, wi.style = SW_SHOW; wi.win_style = WS_POPUP | WS_BORDER; - wi.sr_color = parent->info->sr_color; + if (parent->page->file->has_popup_color) + wi.sr_color = parent->page->file->popup_color; + else + wi.sr_color = parent->info->sr_color; wi.nsr_color = 0xFFFFFF; return &wi; @@ -1098,6 +1102,8 @@ static DWORD CALLBACK WINHELP_RtfStreamIn(DWORD_PTR cookie, BYTE* buff, static void WINHELP_SetupText(HWND hTextWnd, WINHELP_WINDOW* win, ULONG relative) { + /* At first clear area - needed by EM_POSFROMCHAR/EM_SETSCROLLPOS */ + SendMessage(hTextWnd, WM_SETTEXT, 0, (LPARAM)""); SendMessage(hTextWnd, WM_SETREDRAW, FALSE, 0); SendMessage(hTextWnd, EM_SETBKGNDCOLOR, 0, (LPARAM)win->info->sr_color); /* set word-wrap to window size (undocumented) */ @@ -1127,10 +1133,6 @@ static void WINHELP_SetupText(HWND hTextWnd, WINHELP_WINDOW* win, ULONG relative pt.x = 0; pt.y = ptl.y; SendMessage(hTextWnd, EM_SETSCROLLPOS, 0, (LPARAM)&pt); } - else - { - SendMessage(hTextWnd, WM_SETTEXT, 0, (LPARAM)""); - } SendMessage(hTextWnd, WM_SETREDRAW, TRUE, 0); InvalidateRect(hTextWnd, NULL, TRUE); } @@ -1169,10 +1171,21 @@ static LRESULT CALLBACK WINHELP_ButtonBoxWndProc(HWND hWnd, UINT msg, WPARAM wPa 0, 0, 0, 0, hWnd, (HMENU) button->wParam, Globals.hInstance, 0); - if (button->hWnd) { + if (button->hWnd) + { if (Globals.button_proc == NULL) + { + NONCLIENTMETRICSW ncm; Globals.button_proc = (WNDPROC) GetWindowLongPtr(button->hWnd, GWLP_WNDPROC); + + ncm.cbSize = sizeof(NONCLIENTMETRICSW); + SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, + sizeof(NONCLIENTMETRICSW), &ncm, 0); + Globals.hButtonFont = CreateFontIndirectW(&ncm.lfMenuFont); + } SetWindowLongPtr(button->hWnd, GWLP_WNDPROC, (LONG_PTR) WINHELP_ButtonWndProc); + if (Globals.hButtonFont) + SendMessage(button->hWnd, WM_SETFONT, (WPARAM)Globals.hButtonFont, TRUE); } } hDc = GetDC(button->hWnd); @@ -1558,12 +1571,6 @@ struct index_data /************************************************************************** * WINHELP_IndexDlgProc * - * Index dialog callback function. - * - * nResult passed to EndDialog: - * 1: CANCEL button - * >1: valid offset value +2. - * EndDialog itself can return 0 (error). */ INT_PTR CALLBACK WINHELP_IndexDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { @@ -1579,6 +1586,15 @@ INT_PTR CALLBACK WINHELP_IndexDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM id->jump = FALSE; id->offset = 1; return TRUE; + case WM_COMMAND: + switch (HIWORD(wParam)) + { + case LBN_DBLCLK: + if (LOWORD(wParam) == IDC_INDEXLIST) + SendMessage(GetParent(hWnd), PSM_PRESSBUTTON, PSBTN_OK, 0); + break; + } + break; case WM_NOTIFY: switch (((NMHDR*)lParam)->code) { diff --git a/reactos/base/applications/winhlp32/winhelp.h b/reactos/base/applications/winhlp32/winhelp.h index 4d8e0446f7e..ac3f874c792 100644 --- a/reactos/base/applications/winhlp32/winhelp.h +++ b/reactos/base/applications/winhlp32/winhelp.h @@ -137,6 +137,7 @@ typedef struct WNDPROC button_proc; WINHELP_DLL* dlls; WINHELP_PAGESET history; + HFONT hButtonFont; } WINHELP_GLOBALS; extern WINHELP_GLOBALS Globals; diff --git a/reactos/base/applications/wordpad/En.rc b/reactos/base/applications/wordpad/En.rc index 87f5a97f007..b9e455226c7 100644 --- a/reactos/base/applications/wordpad/En.rc +++ b/reactos/base/applications/wordpad/En.rc @@ -234,4 +234,8 @@ BEGIN "Are you sure that you wish to do this?" STRING_INVALID_NUMBER, "Invalid number format" STRING_OLE_STORAGE_NOT_SUPPORTED, "OLE storage documents are not supported" + STRING_WRITE_FAILED, "Could not save the file." + STRING_WRITE_ACCESS_DENIED, "You do not have access to save the file." + STRING_OPEN_FAILED, "Could not open the file." + STRING_OPEN_ACCESS_DENIED, "You do not have access to open the file." END diff --git a/reactos/base/applications/wordpad/Nl.rc b/reactos/base/applications/wordpad/Nl.rc index bde4be3661d..73da63f28dd 100644 --- a/reactos/base/applications/wordpad/Nl.rc +++ b/reactos/base/applications/wordpad/Nl.rc @@ -1,5 +1,6 @@ /* * Copyright 2006 by Hans Leidekker + * Copyright 2008 by Frans Kool * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -24,12 +25,12 @@ BEGIN BEGIN MENUITEM "&Nieuw...\tCtrl+N" ID_FILE_NEW MENUITEM "&Openen...\tCtrl+O", ID_FILE_OPEN - MENUITEM "O&pslaan\tCtrl+S", ID_FILE_SAVE + MENUITEM "Op&slaan\tCtrl+S", ID_FILE_SAVE MENUITEM "Ops&laan als...", ID_FILE_SAVEAS MENUITEM SEPARATOR MENUITEM "&Print...\tCtrl+P", ID_PRINT - MENUITEM "Print previe&w...", ID_PREVIEW - MENUITEM "Pag&e setup...", ID_PRINTSETUP + MENUITEM "Print &voorbeeld...", ID_PREVIEW + MENUITEM "Pa&gina setup...", ID_PRINTSETUP MENUITEM SEPARATOR MENUITEM "&Afsluiten", ID_FILE_EXIT END @@ -44,9 +45,9 @@ BEGIN MENUITEM "&Verwijderen\tDel", ID_EDIT_CLEAR MENUITEM "&Alles selecteren\tCtrl+A", ID_EDIT_SELECTALL MENUITEM SEPARATOR - MENUITEM "&Find...\tCrtl+F", ID_FIND - MENUITEM "Find &next\tF3", ID_FIND_NEXT - MENUITEM "&Replace...\tCtrl+H", ID_REPLACE + MENUITEM "&Zoeken...\tCrtl+F", ID_FIND + MENUITEM "Zoek vo&lgende\tF3", ID_FIND_NEXT + MENUITEM "Ve&rvang...\tCtrl+H", ID_REPLACE MENUITEM SEPARATOR MENUITEM "Alleen &lezen", ID_EDIT_READONLY MENUITEM "&Gewijzigd", ID_EDIT_MODIFIED @@ -60,24 +61,24 @@ BEGIN MENUITEM "&Haal tekst", ID_EDIT_GETTEXT END END - POPUP "&View" + POPUP "&Bekijken" BEGIN - MENUITEM "&Toolbar", ID_TOGGLE_TOOLBAR - MENUITEM "&Formatbar", ID_TOGGLE_FORMATBAR - MENUITEM "&Ruler", ID_TOGGLE_RULER - MENUITEM "&Statusbar", ID_TOGGLE_STATUSBAR + MENUITEM "&Toolbalk", ID_TOGGLE_TOOLBAR + MENUITEM "&Formaatbalk", ID_TOGGLE_FORMATBAR + MENUITEM "&Lineaal", ID_TOGGLE_RULER + MENUITEM "&Statusbalk", ID_TOGGLE_STATUSBAR MENUITEM SEPARATOR - MENUITEM "&Options...", ID_VIEWPROPERTIES + MENUITEM "&Opties...", ID_VIEWPROPERTIES END - POPUP "&Insert" + POPUP "&Invoegen" BEGIN - MENUITEM "&Date and time...", ID_DATETIME + MENUITEM "&Datum en tijd...", ID_DATETIME END POPUP "&Opmaak" BEGIN - MENUITEM "&Font...", ID_FONTSETTINGS + MENUITEM "&Lettertype...", ID_FONTSETTINGS MENUITEM "&Bullet points" ID_BULLET - MENUITEM "&Paragraph..." ID_PARAFORMAT + MENUITEM "&Paragraaf..." ID_PARAFORMAT MENUITEM "&Tabs..." ID_TABSTOPS POPUP "&Achtergrond" BEGIN @@ -87,7 +88,7 @@ BEGIN END POPUP "&Help" BEGIN - MENUITEM "&About Wine Wordpad" ID_ABOUT + MENUITEM "&Over Wine Wordpad" ID_ABOUT END END @@ -100,48 +101,48 @@ BEGIN MENUITEM "&Plakken", ID_EDIT_PASTE MENUITEM SEPARATOR MENUITEM "&Bullet points" ID_BULLET - MENUITEM "&Paragraph...", ID_PARAFORMAT + MENUITEM "&Paragraaf...", ID_PARAFORMAT END END IDD_DATETIME DIALOG DISCARDABLE 30, 20, 130, 80 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -CAPTION "Date and time" +CAPTION "Datum en tijd" FONT 10, "MS Sans Serif" BEGIN - LTEXT "Available formats",0,3,2,100,15 + LTEXT "Beschikbare formaten",0,3,2,100,15 LISTBOX IDC_DATETIME,3,12,80,65,LBS_NOINTEGRALHEIGHT PUSHBUTTON "&OK",IDOK,87,12,40,12 - PUSHBUTTON "&Cancel",IDCANCEL,87,26,40,12 + PUSHBUTTON "&Annuleren",IDCANCEL,87,26,40,12 END IDD_NEWFILE DIALOG DISCARDABLE 30, 20, 140, 80 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -CAPTION "New" +CAPTION "Nieuw" FONT 10, "MS Sans Serif" BEGIN - LTEXT "New document type",0,3,2,100,15 + LTEXT "Nieuw document type",0,3,2,100,15 LISTBOX IDC_NEWFILE,3,12,90,65,LBS_NOINTEGRALHEIGHT PUSHBUTTON "&OK",IDOK,97,12,40,12 - PUSHBUTTON "&Cancel",IDCANCEL,97,26,40,12 + PUSHBUTTON "&Annuleren",IDCANCEL,97,26,40,12 END IDD_PARAFORMAT DIALOG DISCARDABLE 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Paragraph format" +Caption "Paragraaf formaat" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Indentation", 0, 10, 10, 120, 68 - LTEXT "Left", 0, 15, 22, 40, 13 + LTEXT "Links", 0, 15, 22, 40, 13 EDITTEXT IDC_PARA_LEFT, 55, 20, 60, 13 - LTEXT "Right", 0, 15, 40, 40, 13 + LTEXT "Rechts", 0, 15, 40, 40, 13 EDITTEXT IDC_PARA_RIGHT, 55, 38, 60, 13 - LTEXT "First line", 0, 15, 58, 40, 13 + LTEXT "Eerste regel", 0, 15, 58, 40, 13 EDITTEXT IDC_PARA_FIRST, 55, 56, 60, 13 - LTEXT "Alignment", 0, 15, 87, 40, 13 + LTEXT "Uitlijning", 0, 15, 87, 40, 13 COMBOBOX IDC_PARA_ALIGN, 55, 85, 60, 60, CBS_DROPDOWNLIST PUSHBUTTON "&OK", IDOK, 137, 15, 50, 15 - PUSHBUTTON "&Cancel", IDCANCEL, 137, 33, 50, 15 + PUSHBUTTON "&Annuleren", IDCANCEL, 137, 33, 50, 15 END IDD_TABSTOPS DIALOG DISCARDABLE 30, 20, 200, 110 @@ -151,11 +152,11 @@ FONT 8, "MS SHell DLg" BEGIN GROUPBOX "Tab stops", 0, 10, 10, 120, 90 COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE | CBS_SORT - DEFPUSHBUTTON "&Add", ID_TAB_ADD, 20, 80, 45, 15 - PUSHBUTTON "&Remove", ID_TAB_DEL, 72, 80, 45, 15 + DEFPUSHBUTTON "&Toevoegen", ID_TAB_ADD, 20, 80, 45, 15 + PUSHBUTTON "&Verwijderen", ID_TAB_DEL, 72, 80, 45, 15 PUSHBUTTON "&OK", IDOK, 137, 15, 50, 15 - PUSHBUTTON "&Cancel", IDCANCEL, 137, 33, 50, 15 - PUSHBUTTON "Remove al&l", ID_TAB_EMPTY, 137, 51, 50, 15 + PUSHBUTTON "&Annuleren", IDCANCEL, 137, 33, 50, 15 + PUSHBUTTON "Verwijder al&len", ID_TAB_EMPTY, 137, 51, 50, 15 END IDD_FORMATOPTS DIALOG DISCARDABLE 0, 0, 280, 110 @@ -163,59 +164,59 @@ STYLE DS_SYSMODAL Caption "" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Line wrapping", 0, 10, 10, 130, 85 - RADIOBUTTON "Wrap text by the &window border", IDC_PAGEFMT_WW, 18, 25, 117, 15 - RADIOBUTTON "Wrap text by the &margin", IDC_PAGEFMT_WM, 18, 45, 117, 15 + GROUPBOX "Regel afbreken", 0, 10, 10, 130, 85 + RADIOBUTTON "Breek tekst af bij &venster rand", IDC_PAGEFMT_WW, 18, 25, 117, 15 + RADIOBUTTON "Breek tekst af bij de &marge", IDC_PAGEFMT_WM, 18, 45, 117, 15 GROUPBOX "Toolbars", 0, 150, 10, 120, 85 - CHECKBOX "&Toolbar", IDC_PAGEFMT_TB, 160, 20, 80, 15 - CHECKBOX "&Formatbar", IDC_PAGEFMT_FB, 160, 38, 80, 15 - CHECKBOX "&Ruler", IDC_PAGEFMT_RU, 160, 56, 80, 15 - CHECKBOX "&Statusbar", IDC_PAGEFMT_SB, 160, 74, 80, 15 + CHECKBOX "&Toolbalk", IDC_PAGEFMT_TB, 160, 20, 80, 15 + CHECKBOX "&Formaatbalk", IDC_PAGEFMT_FB, 160, 38, 80, 15 + CHECKBOX "&Lineaal", IDC_PAGEFMT_RU, 160, 56, 80, 15 + CHECKBOX "&Statusbalk", IDC_PAGEFMT_SB, 160, 74, 80, 15 LTEXT "", IDC_PAGEFMT_ID, 0,0,0,0 END STRINGTABLE DISCARDABLE BEGIN - STRING_RICHTEXT_FILES_RTF, "Rich text format (*.rtf)" - STRING_TEXT_FILES_TXT, "Text documents (*.txt)" - STRING_TEXT_FILES_UNICODE_TXT, "Unicode text document (*.txt)" - STRING_ALL_FILES, "All documents (*.*)" + STRING_RICHTEXT_FILES_RTF, "Rich text formaat (*.rtf)" + STRING_TEXT_FILES_TXT, "Tekst documenten (*.txt)" + STRING_TEXT_FILES_UNICODE_TXT, "Unicode tekst document (*.txt)" + STRING_ALL_FILES, "Alle documenten (*.*)" END STRINGTABLE DISCARDABLE BEGIN - STRING_ALIGN_LEFT, "Left" - STRING_ALIGN_RIGHT, "Right" - STRING_ALIGN_CENTER, "Center" + STRING_ALIGN_LEFT, "Links" + STRING_ALIGN_RIGHT, "Rechts" + STRING_ALIGN_CENTER, "Gecentreerd" END STRINGTABLE DISCARDABLE BEGIN - STRING_NEWFILE_RICHTEXT, "Rich text document" - STRING_NEWFILE_TXT, "Text document" - STRING_NEWFILE_TXT_UNICODE, "Unicode text document" + STRING_NEWFILE_RICHTEXT, "Rich tekst document" + STRING_NEWFILE_TXT, "Tekst document" + STRING_NEWFILE_TXT_UNICODE, "Unicode tekst document" END STRINGTABLE DISCARDABLE BEGIN - STRING_PRINTER_FILES_PRN, "Printer files (*.PRN)" + STRING_PRINTER_FILES_PRN, "Printer bestanden (*.PRN)" END STRINGTABLE DISCARDABLE BEGIN - STRING_VIEWPROPS_TITLE, "Options" - STRING_VIEWPROPS_TEXT, "Text" - STRING_VIEWPROPS_RICHTEXT, "Rich text" + STRING_VIEWPROPS_TITLE, "Opties" + STRING_VIEWPROPS_TEXT, "Tekst" + STRING_VIEWPROPS_RICHTEXT, "Rich tekst" END STRINGTABLE DISCARDABLE BEGIN STRING_PREVIEW_PRINT, "Print" - STRING_PREVIEW_NEXTPAGE, "Next page" - STRING_PREVIEW_PREVPAGE, "Previous page" - STRING_PREVIEW_TWOPAGES, "Two pages" - STRING_PREVIEW_ONEPAGE, "One page" - STRING_PREVIEW_CLOSE, "Close" + STRING_PREVIEW_NEXTPAGE, "Volgende pagina" + STRING_PREVIEW_PREVPAGE, "Vorige pagina" + STRING_PREVIEW_TWOPAGES, "Twee pagina's" + STRING_PREVIEW_ONEPAGE, "Een pagina" + STRING_PREVIEW_CLOSE, "Sluiten" END STRINGTABLE DISCARDABLE @@ -226,12 +227,16 @@ END STRINGTABLE DISCARDABLE BEGIN STRING_DEFAULT_FILENAME, "Document" - STRING_PROMPT_SAVE_CHANGES, "Save changes to '%s'?" - STRING_SEARCH_FINISHED, "Finished searching the document." - STRING_LOAD_RICHED_FAILED, "Failed to load the RichEdit library." - STRING_SAVE_LOSEFORMATTING, "You have chosen to save in plain text format, " \ - "which will cause all formatting to be lost. " \ - "Are you sure that you wish to do this?" - STRING_INVALID_NUMBER, "Invalid number format" - STRING_OLE_STORAGE_NOT_SUPPORTED, "OLE storage documents are not supported" + STRING_PROMPT_SAVE_CHANGES, "Wijzigingen opslaan van '%s'?" + STRING_SEARCH_FINISHED, "Doorzoeken van document beeindigd." + STRING_LOAD_RICHED_FAILED, "Laden van de RichEdit library is mislukt." + STRING_SAVE_LOSEFORMATTING, "U koos voor opslaan in gewoon tekst formaat, " \ + "waardoor alle formatering verloren zal gaan. " \ + "Weet u zeker dat u dit wilt?" + STRING_INVALID_NUMBER, "Foutief nummer formaat" + STRING_OLE_STORAGE_NOT_SUPPORTED, "OLE storage documenten zijn niet ondersteund" + STRING_WRITE_FAILED, "Bestand kon niet opgeslagen worden." + STRING_WRITE_ACCESS_DENIED, "Onvoldoende rechten om het bestand op te slaan." + STRING_OPEN_FAILED, "Bestand kon niet geopend worden." + STRING_OPEN_ACCESS_DENIED, "Onvoldoende rechten om het bestand te openen." END diff --git a/reactos/base/applications/wordpad/No.rc b/reactos/base/applications/wordpad/No.rc index 411e58aef94..5a3be26d136 100644 --- a/reactos/base/applications/wordpad/No.rc +++ b/reactos/base/applications/wordpad/No.rc @@ -234,4 +234,8 @@ BEGIN "sikker pе at du vil fortsette?" STRING_INVALID_NUMBER, "Ugyldig tallformat" STRING_OLE_STORAGE_NOT_SUPPORTED, "OLE storage documents are not supported" + STRING_WRITE_FAILED, "Klarte ikke lagre filen." + STRING_WRITE_ACCESS_DENIED, "Du har ikke tilgang til е lagre filen." + STRING_OPEN_FAILED, "Klarte ikke еpne filen." + STRING_OPEN_ACCESS_DENIED, "Du har ikke tilgang til е еpne filen." END diff --git a/reactos/base/applications/wordpad/print.c b/reactos/base/applications/wordpad/print.c index c0cd182d17e..933c8b845d6 100644 --- a/reactos/base/applications/wordpad/print.c +++ b/reactos/base/applications/wordpad/print.c @@ -814,7 +814,7 @@ void update_preview(HWND hWnd) InvalidateRect(hWnd, &rc, TRUE); } -LRESULT preview_command(HWND hWnd, WPARAM wParam, LPARAM lParam) +LRESULT preview_command(HWND hWnd, WPARAM wParam) { switch(LOWORD(wParam)) { diff --git a/reactos/base/applications/wordpad/wordpad.c b/reactos/base/applications/wordpad/wordpad.c index 3259c2bf50d..0fb22b40847 100644 --- a/reactos/base/applications/wordpad/wordpad.c +++ b/reactos/base/applications/wordpad/wordpad.c @@ -699,6 +699,22 @@ static void set_fileformat(WPARAM format) target_device(hMainWnd, wordWrap[reg_formatindex(fileFormat)]); } +static void ShowOpenError(DWORD Code) +{ + LPWSTR Message; + + switch(Code) + { + case ERROR_ACCESS_DENIED: + Message = MAKEINTRESOURCEW(STRING_OPEN_ACCESS_DENIED); + break; + + default: + Message = MAKEINTRESOURCEW(STRING_OPEN_FAILED); + } + MessageBoxW(hMainWnd, Message, wszAppTitle, MB_ICONEXCLAMATION | MB_OK); +} + static void DoOpenFile(LPCWSTR szOpenFileName) { HANDLE hFile; @@ -710,7 +726,10 @@ static void DoOpenFile(LPCWSTR szOpenFileName) hFile = CreateFileW(szOpenFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) + { + ShowOpenError(GetLastError()); return; + } ReadFile(hFile, fileStart, 5, &readOut, NULL); SetFilePointer(hFile, 0, NULL, FILE_BEGIN); @@ -754,6 +773,22 @@ static void DoOpenFile(LPCWSTR szOpenFileName) update_font_list(); } +static void ShowWriteError(DWORD Code) +{ + LPWSTR Message; + + switch(Code) + { + case ERROR_ACCESS_DENIED: + Message = MAKEINTRESOURCEW(STRING_WRITE_ACCESS_DENIED); + break; + + default: + Message = MAKEINTRESOURCEW(STRING_WRITE_FAILED); + } + MessageBoxW(hMainWnd, Message, wszAppTitle, MB_ICONEXCLAMATION | MB_OK); +} + static void DoSaveFile(LPCWSTR wszSaveFileName, WPARAM format) { HANDLE hFile; @@ -764,7 +799,10 @@ static void DoSaveFile(LPCWSTR wszSaveFileName, WPARAM format) FILE_ATTRIBUTE_NORMAL, NULL); if(hFile == INVALID_HANDLE_VALUE) + { + ShowWriteError(GetLastError()); return; + } if(format == (SF_TEXT | SF_UNICODE)) { @@ -2430,7 +2468,7 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lPara case WM_COMMAND: if(preview_isactive()) { - return preview_command( hWnd, wParam, lParam ); + return preview_command( hWnd, wParam ); } return OnCommand( hWnd, wParam, lParam ); @@ -2533,7 +2571,6 @@ int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hOldInstance, LPSTR szCmdPar set_caption(NULL); set_bar_states(); set_fileformat(SF_RTF); - SendMessageW(hEditorWnd, EM_EMPTYUNDOBUFFER, 0, 0); hPopupMenu = LoadMenuW(hInstance, MAKEINTRESOURCEW(IDM_POPUP)); get_default_printer_opts(); target_device(hMainWnd, wordWrap[reg_formatindex(fileFormat)]); diff --git a/reactos/base/applications/wordpad/wordpad.h b/reactos/base/applications/wordpad/wordpad.h index 53a6c1378a9..9f093b32a79 100644 --- a/reactos/base/applications/wordpad/wordpad.h +++ b/reactos/base/applications/wordpad/wordpad.h @@ -193,6 +193,10 @@ #define STRING_SAVE_LOSEFORMATTING 1704 #define STRING_INVALID_NUMBER 1705 #define STRING_OLE_STORAGE_NOT_SUPPORTED 1706 +#define STRING_WRITE_FAILED 1707 +#define STRING_WRITE_ACCESS_DENIED 1708 +#define STRING_OPEN_FAILED 1709 +#define STRING_OPEN_ACCESS_DENIED 1710 LPWSTR file_basename(LPWSTR); @@ -200,7 +204,7 @@ void dialog_printsetup(HWND); void dialog_print(HWND, LPWSTR); void target_device(HWND, DWORD); void print_quick(LPWSTR); -LRESULT preview_command(HWND, WPARAM, LPARAM); +LRESULT preview_command(HWND, WPARAM); void init_preview(HWND, LPWSTR); void close_preview(HWND); BOOL preview_isactive(void); diff --git a/reactos/base/setup/reactos/lang/it-IT.rc b/reactos/base/setup/reactos/lang/it-IT.rc index 75d7d61c819..d0c3a5c821b 100644 --- a/reactos/base/setup/reactos/lang/it-IT.rc +++ b/reactos/base/setup/reactos/lang/it-IT.rc @@ -1,12 +1,127 @@ -/* $Id$ */ - LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -/* String Tables */ -STRINGTABLE DISCARDABLE +IDD_STARTPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Installazione di ReactOS" +FONT 8, "MS Shell Dlg" BEGIN - IDS_CAPTION "Installazione di ReactOS" - IDS_TEXT "Non и possibile installare direttamente ReactOS da questo CD!\n\nPer installare ReactOS, riavvia il computer da questo CD." + LTEXT "Benvenuto al wizard di installazione di ReactOS.", IDC_STARTTITLE, 115, 8, 195, 24 + LTEXT "Non и ancora possibile installare ReactOS direttamente da questo CD! "\ + "E' necessario riavviare il computer da questo CD per procedere "\ + "alla instalazione di ReactOS.", IDC_STATIC, 115, 40, 195, 100 + LTEXT "Cliccare Fine per uscire.", IDC_STATIC, 115, 169, 195, 17 END +IDD_LANGSELPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Installazione di ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "IDB_LOGO", IDB_ROSLOGO, "Static", WS_CHILD | WS_VISIBLE | SS_OWNERDRAW, 18, 0, 290, 99 + CONTROL "Lingua per l'installazione:", IDC_STATIC, "Static", WS_CHILD | WS_VISIBLE | WS_GROUP | SS_RIGHT, 20, 109, 106, 11 + CONTROL "", IDC_LANGUAGES, "ComboBox", WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST, 132, 107, 176, 142 + CONTROL "Tastiera o metodo di input:", IDC_STATIC, "Static", WS_CHILD | WS_VISIBLE | WS_GROUP | SS_RIGHT, 20, 142, 106, 11 + CONTROL "", IDC_KEYLAYOUT, "ComboBox", WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST, 132, 141, 176, 81 + LTEXT "Cliccare Avanti per selezionare il tipo di installazione.", IDC_STATIC, 10, 180 ,297, 10 +END + +IDD_TYPEPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Installazione di ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Tipo di installazione", IDC_STATIC, "Button", BS_GROUPBOX, 10,0,297,172 + CONTROL "Installa ReactOS", IDC_INSTALL, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 20, 15, 277, 10 + CONTROL "Ripara o aggiorna una installazione precedente di ReactOS", IDC_SETUP, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_DISABLED , 20, 30, 277, 10 + LTEXT "Cliccare Avanti per impostare i dispositivi.", IDC_STATIC, 10, 180 ,297, 10 +END + +IDD_DEVICEPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Installazione di ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Impostazione dei dispositivi", IDC_STATIC, "Button", BS_GROUPBOX, 10,0,297,172 + LTEXT "Computer:", IDC_STATIC, 20,15, 80, 10 + CONTROL "", IDC_COMPUTER, "ComboBox", WS_TABSTOP | CBS_DROPDOWNLIST , 100, 15, 150, 80 + LTEXT "Display:", IDC_STATIC, 20,35, 80, 10 + CONTROL "", IDC_DISPLAY, "ComboBox", WS_TABSTOP | CBS_DROPDOWNLIST , 100, 35, 150, 80 + LTEXT "Tastiera:", IDC_STATIC, 20,55, 80, 10 + CONTROL "", IDC_KEYBOARD, "ComboBox", WS_TABSTOP | CBS_DROPDOWNLIST , 100, 55, 150, 80 + LTEXT "Cliccare Avanti per scegliere dove effettuare l'installazione.", IDC_STATIC, 10, 180 ,277, 20 +END + +IDD_DRIVEPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Installazione di ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Partizione per l'installazione di ReactOS", IDC_STATIC, "Button", BS_GROUPBOX, 10,1,298,176 + LISTBOX IDC_PARTITION, 20,12,278,142,LBS_HASSTRINGS | WS_VSCROLL + PUSHBUTTON "&Crea", IDC_PARTCREATE, 20,155,50,15 + PUSHBUTTON "&Rimuovi", IDC_PARTDELETE, 76,155,50,15 + PUSHBUTTON "&Opzioni avanzate...", IDC_PARTMOREOPTS, 218,155,80,15 + LTEXT "Cliccare Avanti per iniziare l'installazione.", IDC_STATIC, 10, 180 ,277, 20 +END + +IDD_BOOTOPTIONS DIALOGEX DISCARDABLE 0, 0, 305, 105 +STYLE WS_VISIBLE|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME +CAPTION "Impostazioni avanzate delle partizioni" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Cartella di installazione", IDC_STATIC, "Button", BS_GROUPBOX, 4,1,298,30 + EDITTEXT IDC_PATH, 10,11,278,13, WS_VISIBLE + + CONTROL "Installazione del Boot loader", IDC_STATIC, "Button", BS_GROUPBOX, 4,36,298,41 + + CONTROL "Installazione del Boot loader sul disco fisso (MBR)", IDC_INSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 10,46,278,11 + CONTROL "Non installare il Boot loader", IDC_NOINSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_DISABLED , 10,57,278,11 +END + +IDD_PROCESSPAGE DIALOGEX 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Installazione di ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Azione di installazione", IDC_ACTION, "Button", BS_GROUPBOX, 10,0,297,172 + LTEXT "File da installare...", IDC_ACTIVITY, 20, 50, 277, 10 + LTEXT "test.txt", IDC_ITEM, 30, 80, 257, 10 + CONTROL "", IDC_PROCESSPROGRESS, "msctls_progress32", + PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 20, 120, 277, 8 +END + + +IDD_RESTARTPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Completamento della installazione di ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Completamento della prima fase della installazione di ReactOS", IDC_FINISHTITLE, "Button", BS_GROUPBOX, 10,0,297,172 + LTEXT "La prima fase и stata completata in modo regolare.", IDC_STATIC, 20, 50, 277, 10 + + LTEXT "Quando verrа premuto fine il computer si riavvierа.", IDC_STATIC, 20, 80, 277, 10 + CONTROL "", IDC_RESTART_PROGRESS, "msctls_progress32", PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 20, 120, 277, 8 + LTEXT "Se presente rimuovere il CD dal lettore e per riavviare "\ + "il computer cliccare Fine.", IDC_STATIC, 10, 180, 297, 20 +END + + +STRINGTABLE +BEGIN + IDS_LANGTITLE "Selezione della lingua" + IDS_LANGSUBTITLE "Scegliere la lingua per la installazione e per il sistema finale." + IDS_TYPETITLE "Benvenuti alla installazione di ReactOS" + IDS_TYPESUBTITLE "Scegliere il tipo di installazione." + IDS_DEVICETITLE "Impostazione dei dispositivi di base" + IDS_DEVICESUBTITLE "Impostazione di monitor e tastiera." + IDS_DRIVETITLE "Impostazione della partizione e della cartella per la installazione" + IDS_DRIVESUBTITLE "Preparazione di partizione, cartella di sistema e Boot loader." + IDS_PROCESSTITLE "Preparazione della partizione, copia dei file e configurazione del sistema" + IDS_PROCESSSUBTITLE "Creazione e formattazione della partizione, copia dei file, installazione del Boot loader" + IDS_RESTARTTITLE "Prima fase della installazione completata" + IDS_RESTARTSUBTITLE "La prima fase della installazione и stata completata, riavviare il computer per procedere alla seconda fase" + IDS_ABORTSETUP "ReactOS non и installato completamente sul computer. Se interropete l'installazione ora sarа necessario eseguire l'installazione di nuovo. Volete procedere?" + IDS_ABORTSETUP2 "Volete interrompere l'installazione?" +END + /* EOF */ diff --git a/reactos/base/setup/reactos/lang/nb-NO.rc b/reactos/base/setup/reactos/lang/no-NO.rc similarity index 100% rename from reactos/base/setup/reactos/lang/nb-NO.rc rename to reactos/base/setup/reactos/lang/no-NO.rc diff --git a/reactos/base/setup/reactos/lang/ru-RU.rc b/reactos/base/setup/reactos/lang/ru-RU.rc index be7a7d71a04..587b429083c 100644 --- a/reactos/base/setup/reactos/lang/ru-RU.rc +++ b/reactos/base/setup/reactos/lang/ru-RU.rc @@ -1,12 +1,128 @@ -/* $Id: En.rc 21257 2006-03-08 23:07:09Z audit $ */ +/* $Id: ru-RU.rc 34572 2008-07-18 09:07:54Z mkupfer $ towerr */ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -/* String Tables */ -STRINGTABLE DISCARDABLE +IDD_STARTPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Установка ReactOS" +FONT 8, "MS Shell Dlg" BEGIN - IDS_CAPTION "Установка ReactOS" - IDS_TEXT "Вы не можете установить ReactOS с диска в данный момент!\n\nПожалуйста, загрузите компьютер с этого диска для установки ReactOS." + LTEXT "Вас приветствует программа установки ReactOS.", IDC_STARTTITLE, 115, 8, 195, 24 + LTEXT "Установку ReactOS можно производить только загрузившись с этого диска! "\ + "После перезапуска компьютера выберите загрузку с CD и начните"\ + " установку ReactOS.", IDC_STATIC, 115, 40, 195, 100 + LTEXT "Нажмите кнопку ""Завершить"" для выхода.", IDC_STATIC, 115, 169, 195, 17 END +IDD_LANGSELPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Установка ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "IDB_LOGO", IDB_ROSLOGO, "Static", WS_CHILD | WS_VISIBLE | SS_OWNERDRAW, 18, 0, 290, 99 + CONTROL "Язык системы:", IDC_STATIC, "Static", WS_CHILD | WS_VISIBLE | WS_GROUP | SS_RIGHT, 20, 109, 106, 11 + CONTROL "", IDC_LANGUAGES, "ComboBox", WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST, 132, 107, 176, 142 + CONTROL "Раскладка клавиатуры:", IDC_STATIC, "Static", WS_CHILD | WS_VISIBLE | WS_GROUP | SS_RIGHT, 20, 142, 106, 11 + CONTROL "", IDC_KEYLAYOUT, "ComboBox", WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST, 132, 141, 176, 81 + LTEXT "Для выбора типа установки нажмите ""Далее"".", IDC_STATIC, 10, 180 ,297, 10 +END + +IDD_TYPEPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Установка ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Тип установки", IDC_STATIC, "Button", BS_GROUPBOX, 10,0,297,172 + CONTROL "Установка ReactOS", IDC_INSTALL, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 20, 15, 277, 10 + CONTROL "Восстановить или изменить установленный ранее ReactOS", IDC_SETUP, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_DISABLED , 20, 30, 277, 10 + LTEXT "Для установки устройств нажмите ""Далее"".", IDC_STATIC, 10, 180 ,297, 10 +END + +IDD_DEVICEPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Установка ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Основные устройства", IDC_STATIC, "Button", BS_GROUPBOX, 10,0,297,172 + LTEXT "Компьтер:", IDC_STATIC, 20,15, 80, 10 + CONTROL "", IDC_COMPUTER, "ComboBox", WS_TABSTOP | CBS_DROPDOWNLIST , 100, 15, 150, 80 + LTEXT "Экран:", IDC_STATIC, 20,35, 80, 10 + CONTROL "", IDC_DISPLAY, "ComboBox", WS_TABSTOP | CBS_DROPDOWNLIST , 100, 35, 150, 80 + LTEXT "Клавиатура:", IDC_STATIC, 20,55, 80, 10 + CONTROL "", IDC_KEYBOARD, "ComboBox", WS_TABSTOP | CBS_DROPDOWNLIST , 100, 55, 150, 80 + LTEXT "Для установки устройств нажмите ""Далее"".", IDC_STATIC, 10, 180 ,277, 20 +END + +IDD_DRIVEPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Установка ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Разделы для установки ReactOS", IDC_STATIC, "Button", BS_GROUPBOX, 10,1,298,176 + LISTBOX IDC_PARTITION, 20,12,278,142,LBS_HASSTRINGS | WS_VSCROLL + PUSHBUTTON "&Создать", IDC_PARTCREATE, 20,155,50,15 + PUSHBUTTON "&Удалить", IDC_PARTDELETE, 76,155,50,15 + PUSHBUTTON "&Дополнительные параметры...", IDC_PARTMOREOPTS, 176,155,122,15 + LTEXT "Для начала установки нажмите ""Далее"".", IDC_STATIC, 10, 180 ,277, 20 +END + +IDD_BOOTOPTIONS DIALOGEX DISCARDABLE 0, 0, 305, 105 +STYLE WS_VISIBLE|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME +CAPTION "Дополнительные параметры установки" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Базовый каталог", IDC_STATIC, "Button", BS_GROUPBOX, 4,1,298,30 + EDITTEXT IDC_PATH, 10,12,283,14, WS_VISIBLE + + CONTROL "Установка загрузчика", IDC_STATIC, "Button", BS_GROUPBOX, 4,36,298,41 + + CONTROL "Установить загрузчик на диск (MBR)", IDC_INSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 10,49,278,11 + CONTROL "Не устанавливать загрузчик", IDC_NOINSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_DISABLED , 10,60,278,11 +END + +IDD_PROCESSPAGE DIALOGEX 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Установка ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Производится установка", IDC_ACTION, "Button", BS_GROUPBOX, 10,0,297,172 + LTEXT "Копирование файлов...", IDC_ACTIVITY, 20, 50, 277, 10 + LTEXT "test.txt", IDC_ITEM, 30, 80, 257, 10 + CONTROL "", IDC_PROCESSPROGRESS, "msctls_progress32", + PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 20, 120, 277, 8 +END + + +IDD_RESTARTPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Завершение установки ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Завершение первого этапа установки ReactOS", IDC_FINISHTITLE, "Button", BS_GROUPBOX, 10,0,297,172 + LTEXT "Первый этап установки ReactOS закончен.", IDC_STATIC, 20, 50, 277, 10 + + LTEXT "После нажатия клавиши ""Завершить"" ваш компьютер будет перезагружен.", IDC_STATIC, 20, 80, 277, 10 + CONTROL "", IDC_RESTART_PROGRESS, "msctls_progress32", PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 20, 120, 277, 8 + LTEXT "Вы можете извлечь установочный диск. Для перезагрузки компьютера "\ + "нажмите клавишу ""Завершить"".", IDC_STATIC, 10, 176, 297, 20 +END + + +STRINGTABLE +BEGIN + IDS_LANGTITLE "Выбор языка" + IDS_LANGSUBTITLE "Выберите язык по умолчанию в системе." + IDS_TYPETITLE "Вас приветствует программа установки ReactOS" + IDS_TYPESUBTITLE "Выберите тип установки." + IDS_DEVICETITLE "Установка базовых устройств" + IDS_DEVICESUBTITLE "Настройка параметров экрана и клавиатуры." + IDS_DRIVETITLE "Выбор расположения на диске и системного каталога" + IDS_DRIVESUBTITLE "Подготовка раздела диска, системного каталога и загрузчика." + IDS_PROCESSTITLE "Подготовка раздела диска, копирование системных файлов" + IDS_PROCESSSUBTITLE "Создание раздела на диске, копирование файлов, установка загрузчика" + IDS_RESTARTTITLE "Первый этап установки закончен" + IDS_RESTARTSUBTITLE "Первый этап закончен, для продолжения требуется перезагрузка" + IDS_ABORTSETUP "ReactOS установлен на компьютер не полностью. Если вы закроете программу установки сейчас, в дальнейшем вам придется повторить установку ReactOS. Вы уверены, что необходимо прервать установку?" + IDS_ABORTSETUP2 "Прервать установку?" +END /* EOF */ diff --git a/reactos/base/setup/reactos/reactos.c b/reactos/base/setup/reactos/reactos.c index c08b3da895a..ed32279ac8e 100644 --- a/reactos/base/setup/reactos/reactos.c +++ b/reactos/base/setup/reactos/reactos.c @@ -26,9 +26,11 @@ */ #include +#include #include #include #include +#include #include "resource.h" @@ -36,19 +38,40 @@ HFONT hTitleFont; +typedef struct _LANG +{ + TCHAR LangId[9]; + TCHAR LangName[128]; + LONG DefaultKBLayout; +} LANG, *PLANG; + +typedef struct _KBLAYOUT +{ + TCHAR LayoutId[9]; + TCHAR LayoutName[128]; + TCHAR DllName[128]; +} KBLAYOUT, *PKBLAYOUT; + struct { + // Settings LONG DestDiskNumber; // physical disk LONG DestPartNumber; // partition on disk LONG DestPartSize; // if partition doesn't exist, size of partition LONG FSType; // file system type on partition LONG MBRInstallType; // install bootloader LONG FormatPart; // type of format the partition - WCHAR SelectedLangId[4]; // selected language + TCHAR SelectedLangId[9]; // selected language + TCHAR SelectedKBLayout[9]; // selected kayboard layout WCHAR InstallationDirectory[MAX_PATH]; // installation directory on hdd - WCHAR DefaultLang[20]; // default language - WCHAR DefaultKBLayout[20]; // default keyboard layout BOOLEAN RepairUpdateFlag; // flag for update/repair an installed reactos + // txtsetup.sif data + TCHAR DefaultLang[20]; // default language + TCHAR DefaultKBLayout[20]; // default keyboard layout + PLANG pLanguages; + LONG LangCount; + PKBLAYOUT pKbLayouts; + LONG KbLayoutCount; } SetupData; typedef struct _IMGINFO @@ -201,6 +224,7 @@ LangSelDlgProc(HWND hwndDlg, LPARAM lParam) { PIMGINFO pImgInfo; + LONG i; pImgInfo = (PIMGINFO)GetWindowLongPtr(hwndDlg, DWLP_USER); switch (uMsg) { @@ -211,9 +235,6 @@ LangSelDlgProc(HWND hwndDlg, hwndControl = GetParent(hwndDlg); - /* Center the wizard window */ - CenterWindow (hwndControl); - dwStyle = GetWindowLong(hwndControl, GWL_STYLE); SetWindowLong(hwndControl, GWL_STYLE, dwStyle & ~WS_SYSMENU); @@ -238,6 +259,10 @@ LangSelDlgProc(HWND hwndDlg, WM_SETFONT, (WPARAM)hTitleFont, (LPARAM)TRUE);*/ + for (i=0; i< SetupData.LangCount;i++) + (void)ComboBox_AddString(GetDlgItem(hwndDlg,IDC_LANGUAGES),SetupData.pLanguages[i].LangName); + for (i=0; i< SetupData.KbLayoutCount;i++) + (void)ComboBox_AddString(GetDlgItem(hwndDlg,IDC_KEYLAYOUT),SetupData.pKbLayouts[i].LayoutName); } break; case WM_DRAWITEM: @@ -309,9 +334,6 @@ TypeDlgProc(HWND hwndDlg, hwndControl = GetParent(hwndDlg); - /* Center the wizard window */ - CenterWindow (hwndControl); - dwStyle = GetWindowLong(hwndControl, GWL_STYLE); SetWindowLong(hwndControl, GWL_STYLE, dwStyle & ~WS_SYSMENU); @@ -364,9 +386,6 @@ DeviceDlgProc(HWND hwndDlg, hwndControl = GetParent(hwndDlg); - /* Center the wizard window */ - CenterWindow (hwndControl); - dwStyle = GetWindowLong(hwndControl, GWL_STYLE); SetWindowLong(hwndControl, GWL_STYLE, dwStyle & ~WS_SYSMENU); @@ -417,9 +436,6 @@ DriveDlgProc(HWND hwndDlg, hwndControl = GetParent(hwndDlg); - /* Center the wizard window */ - CenterWindow (hwndControl); - dwStyle = GetWindowLong(hwndControl, GWL_STYLE); SetWindowLong(hwndControl, GWL_STYLE, dwStyle & ~WS_SYSMENU); @@ -471,9 +487,6 @@ ProcessDlgProc(HWND hwndDlg, hwndControl = GetParent(hwndDlg); - /* Center the wizard window */ - CenterWindow (hwndControl); - dwStyle = GetWindowLong(hwndControl, GWL_STYLE); SetWindowLong(hwndControl, GWL_STYLE, dwStyle & ~WS_SYSMENU); @@ -525,9 +538,6 @@ RestartDlgProc(HWND hwndDlg, hwndControl = GetParent(hwndDlg); - /* Center the wizard window */ - CenterWindow (hwndControl); - dwStyle = GetWindowLong(hwndControl, GWL_STYLE); SetWindowLong(hwndControl, GWL_STYLE, dwStyle & ~WS_SYSMENU); @@ -583,9 +593,76 @@ RestartDlgProc(HWND hwndDlg, return FALSE; } +void LoadSetupData() +{ + WCHAR szPath[MAX_PATH]; + WCHAR *ch; + HINF hTxtsetupSif; + INFCONTEXT InfContext; + //TCHAR szValue[MAX_PATH]; + DWORD LineLength; + LONG Count; + //HKEY hKey; + + GetModuleFileNameW(NULL,szPath,MAX_PATH); + ch = strrchrW(szPath,L'\\'); + if (ch != NULL) + *ch = L'\0'; + + wcscat(szPath, L"\\txtsetup.sif"); + hTxtsetupSif = SetupOpenInfFileW(szPath, NULL, INF_STYLE_OLDNT, NULL); + if (hTxtsetupSif != INVALID_HANDLE_VALUE) + { + // get language list + Count = SetupGetLineCount(hTxtsetupSif, _T("Language")); + if (Count > 0) + { + // TODO: alloc memory for all entries and read entries + SetupData.pLanguages = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(LANG) * Count); + if (SetupData.pLanguages != NULL) + { + SetupData.LangCount = Count; + Count = 0; + if (SetupFindFirstLine(hTxtsetupSif, _T("Language"), + NULL,&InfContext)) + do + { + SetupGetStringField(&InfContext, 0, SetupData.pLanguages[Count].LangId, sizeof(SetupData.pLanguages[Count].LangId) / sizeof(TCHAR), &LineLength); + SetupGetStringField(&InfContext, 1, SetupData.pLanguages[Count].LangName, sizeof(SetupData.pLanguages[Count].LangName) / sizeof(TCHAR), &LineLength); + ++Count; + } + while (SetupFindNextLine(&InfContext, &InfContext) && Count < SetupData.LangCount); + } + } + // get keyboard layout list + Count = SetupGetLineCount(hTxtsetupSif, _T("KeyboardLayout")); + if (Count > 0) + { + // TODO: alloc memory for all entries and read entries + SetupData.pKbLayouts = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(KBLAYOUT) * Count); + if (SetupData.pKbLayouts != NULL) + { + SetupData.KbLayoutCount = Count; + Count = 0; + if (SetupFindFirstLine(hTxtsetupSif, _T("KeyboardLayout"), + NULL,&InfContext)) + do + { + SetupGetStringField(&InfContext, 0, SetupData.pKbLayouts[Count].LayoutId, sizeof(SetupData.pKbLayouts[Count].LayoutId) / sizeof(TCHAR), &LineLength); + SetupGetStringField(&InfContext, 1, SetupData.pKbLayouts[Count].LayoutName, sizeof(SetupData.pKbLayouts[Count].LayoutName) / sizeof(TCHAR), &LineLength); + ++Count; + } + while (SetupFindNextLine(&InfContext, &InfContext) && Count < SetupData.LangCount); + } + } + SetupCloseInfFile(hTxtsetupSif); + } +} + BOOL isUnattendSetup() { WCHAR szPath[MAX_PATH]; + WCHAR *ch; HINF hUnattendedInf; INFCONTEXT InfContext; TCHAR szValue[MAX_PATH]; @@ -593,7 +670,10 @@ BOOL isUnattendSetup() //HKEY hKey; BOOL result = 0; - GetCurrentDirectoryW(MAX_PATH, szPath); // FIXME + GetModuleFileNameW(NULL,szPath,MAX_PATH); + ch = strrchrW(szPath,L'\\'); + if (ch != NULL) + *ch = L'\0'; wcscat(szPath, L"\\unattend.inf"); hUnattendedInf = SetupOpenInfFileW(szPath, NULL, INF_STYLE_OLDNT, NULL); @@ -634,6 +714,8 @@ WinMain(HINSTANCE hInst, LoadString(hInst,IDS_ABORTSETUP, abort_msg, sizeof(abort_msg)/sizeof(TCHAR)); LoadString(hInst,IDS_ABORTSETUP2, abort_title,sizeof(abort_title)/sizeof(TCHAR)); + LoadSetupData(); + /* Create the Start page, until setup is working */ psp.dwSize = sizeof(PROPSHEETPAGE); psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER; diff --git a/reactos/base/setup/reactos/rsrc.rc b/reactos/base/setup/reactos/rsrc.rc index f30d6c69cc4..217b12b5db4 100644 --- a/reactos/base/setup/reactos/rsrc.rc +++ b/reactos/base/setup/reactos/rsrc.rc @@ -15,13 +15,13 @@ #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc"*/ #include "lang/pl-PL.rc" -/*#include "lang/pt-BR.rc" -#include "lang/ru-RU.rc"*/ -#include "lang/sk-SK.rc" -/*#include "lang/sv-SE.rc" +/*#include "lang/pt-BR.rc"*/ +#include "lang/ru-RU.rc" +/*#include "lang/sk-SK.rc" +#include "lang/sv-SE.rc" #include "lang/th-TH.rc" #include "lang/uk-UA.rc" #include "lang/zh-CN.rc"*/ diff --git a/reactos/base/setup/usetup/interface/usetup.c b/reactos/base/setup/usetup/interface/usetup.c index 0b984ffe282..a40728bb76c 100644 --- a/reactos/base/setup/usetup/interface/usetup.c +++ b/reactos/base/setup/usetup/interface/usetup.c @@ -3081,35 +3081,39 @@ FileCopyPage(PINPUT_RECORD Ir) TRUE, MUIGetString(STRING_SETUPCOPYINGFILES)); + // fit memory bars to screen width, distribute them uniform + unsigned int mem_bar_width = (xScreen - 26) / 5; + mem_bar_width -= mem_bar_width % 2; // make even + /* ATTENTION: The following progress bars are debug stuff, which should not be translated!! */ /* Create the paged pool progress bar */ CopyContext.MemoryBars[0] = CreateProgressBar(13, 40, - 18, + 13 + mem_bar_width, 43, - 10, + 13, 44, FALSE, - MUIGetString(STRING_PAGEDMEM)); + "Paged Memory"); /* Create the non paged pool progress bar */ - CopyContext.MemoryBars[1] = CreateProgressBar(28, + CopyContext.MemoryBars[1] = CreateProgressBar((xScreen / 2)- (mem_bar_width / 2), 40, - 33, + (xScreen / 2) + (mem_bar_width / 2), 43, - 24, + (xScreen / 2)- (mem_bar_width / 2), 44, FALSE, - MUIGetString(STRING_NONPAGEDMEM)); + "Nonpaged Memory"); /* Create the global memory progress bar */ - CopyContext.MemoryBars[2] = CreateProgressBar(43, + CopyContext.MemoryBars[2] = CreateProgressBar(xScreen - 13 - mem_bar_width, 40, - 48, + xScreen - 13, 43, - 40, + xScreen - 13 - mem_bar_width, 44, FALSE, - MUIGetString(STRING_FREEMEM)); + "Free Memory"); /* Do the file copying */ SetupCommitFileQueueW(NULL, diff --git a/reactos/base/setup/usetup/lang/bg-BG.h b/reactos/base/setup/usetup/lang/bg-BG.h index 0735258838b..ca3889eed20 100644 --- a/reactos/base/setup/usetup/lang/bg-BG.h +++ b/reactos/base/setup/usetup/lang/bg-BG.h @@ -1623,12 +1623,6 @@ MUI_STRING bgBGStrings[] = "\xB3 ‡ ЇЁб ­  д ©«: %S"}, {STRING_SETUPCOPYINGFILES, "’ҐзҐ § ЇЁбў ­Ґ ­  д ©«®ўҐвҐ..."}, - {STRING_PAGEDMEM, - "‘ва ­Ёа ­ "}, - {STRING_NONPAGEDMEM, - "ЌҐбва ­Ёа ­ "}, - {STRING_FREEMEM, - "‘ў®Ў®¤­  Ї ¬Ґв"}, {STRING_REGHIVEUPDATE, " ЋбкўаҐ¬Ґ­пў ­Ґ ­  ॣЁбвк୨⥠஥ўҐ..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/lang/cs-CZ.h b/reactos/base/setup/usetup/lang/cs-CZ.h index b1163d1baf6..15727f76e54 100644 --- a/reactos/base/setup/usetup/lang/cs-CZ.h +++ b/reactos/base/setup/usetup/lang/cs-CZ.h @@ -1620,12 +1620,6 @@ MUI_STRING csCZStrings[] = "\xB3 KopЎruji soubor: %S"}, {STRING_SETUPCOPYINGFILES, "Instalace kopЎruje soubory..."}, - {STRING_PAGEDMEM, - "Str nkov no"}, - {STRING_NONPAGEDMEM, - "Nestr nkov no"}, - {STRING_FREEMEM, - "Voln  pamШњ"}, {STRING_REGHIVEUPDATE, " Aktualizuji registr..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/lang/de-DE.h b/reactos/base/setup/usetup/lang/de-DE.h index b45ca8d5759..53bc8563781 100644 --- a/reactos/base/setup/usetup/lang/de-DE.h +++ b/reactos/base/setup/usetup/lang/de-DE.h @@ -1614,12 +1614,6 @@ MUI_STRING deDEStrings[] = "\xB3 Kopiere Datei: %S"}, {STRING_SETUPCOPYINGFILES, "Setup kopiert Dateien..."}, - {STRING_PAGEDMEM, - "Ausgel. Sp."}, - {STRING_NONPAGEDMEM, - "Nicht ausgel. Sp."}, - {STRING_FREEMEM, - "Freier Sp."}, {STRING_REGHIVEUPDATE, " Registry hives werden aktualisiert..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/lang/el-GR.h b/reactos/base/setup/usetup/lang/el-GR.h index 7beda68759f..a8e88460b15 100644 --- a/reactos/base/setup/usetup/lang/el-GR.h +++ b/reactos/base/setup/usetup/lang/el-GR.h @@ -1643,12 +1643,6 @@ MUI_STRING elGRStrings[] = "\xB3 Copying file: %S"}, {STRING_SETUPCOPYINGFILES, "Setup is copying files..."}, - {STRING_PAGEDMEM, - "Paged Memory"}, - {STRING_NONPAGEDMEM, - "Nonpaged Memory"}, - {STRING_FREEMEM, - "Free Memory"}, {STRING_REGHIVEUPDATE, " Updating registry hives..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/lang/en-US.h b/reactos/base/setup/usetup/lang/en-US.h index 0b0a00c37f7..a22d19506f2 100644 --- a/reactos/base/setup/usetup/lang/en-US.h +++ b/reactos/base/setup/usetup/lang/en-US.h @@ -1615,12 +1615,6 @@ MUI_STRING enUSStrings[] = "\xB3 Copying file: %S"}, {STRING_SETUPCOPYINGFILES, "Setup is copying files..."}, - {STRING_PAGEDMEM, - "Paged Memory"}, - {STRING_NONPAGEDMEM, - "Nonpaged Memory"}, - {STRING_FREEMEM, - "Free Memory"}, {STRING_REGHIVEUPDATE, " Updating registry hives..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/lang/es-ES.h b/reactos/base/setup/usetup/lang/es-ES.h index faa35c980a2..930ebbd2226 100644 --- a/reactos/base/setup/usetup/lang/es-ES.h +++ b/reactos/base/setup/usetup/lang/es-ES.h @@ -1613,12 +1613,6 @@ MUI_STRING esESStrings[] = "\xB3 Copiando archivo: %S"}, {STRING_SETUPCOPYINGFILES, "El instalador est  copiando archivos..."}, - {STRING_PAGEDMEM, - "Mem. paginada"}, - {STRING_NONPAGEDMEM, - "Mem. nopaginada"}, - {STRING_FREEMEM, - "Memoria libre"}, {STRING_REGHIVEUPDATE, " Actualizando el  rbol del registro..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/lang/fr-FR.h b/reactos/base/setup/usetup/lang/fr-FR.h index 85b79cd0e38..797a99b3411 100644 --- a/reactos/base/setup/usetup/lang/fr-FR.h +++ b/reactos/base/setup/usetup/lang/fr-FR.h @@ -1626,12 +1626,6 @@ MUI_STRING frFRStrings[] = "\xB3 Copie du fichier: %S"}, {STRING_SETUPCOPYINGFILES, "Setup copie les fichiers..."}, - {STRING_PAGEDMEM, - "M‚moire pagin‚e"}, - {STRING_NONPAGEDMEM, - "M‚moire non pagin‚e"}, - {STRING_FREEMEM, - "M‚moire libre"}, {STRING_REGHIVEUPDATE, " Mise … jour de la base de registre..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/lang/it-IT.h b/reactos/base/setup/usetup/lang/it-IT.h index 7f866744118..15da462ae9e 100644 --- a/reactos/base/setup/usetup/lang/it-IT.h +++ b/reactos/base/setup/usetup/lang/it-IT.h @@ -1614,12 +1614,6 @@ MUI_STRING itITStrings[] = "\xB3 Copia di: %S"}, {STRING_SETUPCOPYINGFILES, "Copia dei file in corso..."}, - {STRING_PAGEDMEM, - "Memoria paginata"}, - {STRING_NONPAGEDMEM, - "Memoria non paginata"}, - {STRING_FREEMEM, - "Memoria libera"}, {STRING_REGHIVEUPDATE, " Aggiornamento degli hives del registro..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/lang/lt-LT.h b/reactos/base/setup/usetup/lang/lt-LT.h index b78543ed188..6e95e79643a 100644 --- a/reactos/base/setup/usetup/lang/lt-LT.h +++ b/reactos/base/setup/usetup/lang/lt-LT.h @@ -1623,12 +1623,6 @@ MUI_STRING ltLTStrings[] = "\xB3 Copying file: %S"}, {STRING_SETUPCOPYINGFILES, "Setup is copying files..."}, - {STRING_PAGEDMEM, - "Paged Memory"}, - {STRING_NONPAGEDMEM, - "Nonpaged Memory"}, - {STRING_FREEMEM, - "Free Memory"}, {STRING_REGHIVEUPDATE, " Updating registry hives..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/lang/pl-PL.h b/reactos/base/setup/usetup/lang/pl-PL.h index 564b5ccddd5..a3e37b1ede0 100644 --- a/reactos/base/setup/usetup/lang/pl-PL.h +++ b/reactos/base/setup/usetup/lang/pl-PL.h @@ -621,7 +621,7 @@ static MUI_ENTRY plPLQuitPageEntries[] = { 10, 8, - "Upewnij si© ze w Nap©dzie A: nie ma dyskietki i", + "Upewnij si© ѕe w Nap©dzie A: nie ma dyskietki i", TEXT_STYLE_NORMAL }, { @@ -1622,12 +1622,6 @@ MUI_STRING plPLStrings[] = "\xB3 Kopiowanie plikўw: %S"}, {STRING_SETUPCOPYINGFILES, "Instalator kopiuje pliki..."}, - {STRING_PAGEDMEM, - "Stronicowanej"}, - {STRING_NONPAGEDMEM, - "Niestronicowanej"}, - {STRING_FREEMEM, - " Dost©pnej"}, {STRING_REGHIVEUPDATE, " Uaktualnianie..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/lang/ru-RU.h b/reactos/base/setup/usetup/lang/ru-RU.h index 4beda28fef7..104b80b8aef 100644 --- a/reactos/base/setup/usetup/lang/ru-RU.h +++ b/reactos/base/setup/usetup/lang/ru-RU.h @@ -1614,12 +1614,6 @@ MUI_STRING ruRUStrings[] = "\xB3 Љ®ЇЁа®ў ­ЁҐ: %S"}, {STRING_SETUPCOPYINGFILES, "Џа®Ја ¬¬  гбв ­®ўЄЁ Є®ЇЁагҐв д ©«л..."}, - {STRING_PAGEDMEM, - " ‘ва ­Ёз­ п"}, - {STRING_NONPAGEDMEM, - " ЌҐбва ­Ёз­ п"}, - {STRING_FREEMEM, - "‘ў®Ў®¤­ п Ї ¬пвм"}, {STRING_REGHIVEUPDATE, " ЋЎ­®ў«Ґ­ЁҐ Єгбв®ў ॥бва ..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/lang/sk-SK.h b/reactos/base/setup/usetup/lang/sk-SK.h index 6ea1d2fe8ea..38c7a022c4a 100644 --- a/reactos/base/setup/usetup/lang/sk-SK.h +++ b/reactos/base/setup/usetup/lang/sk-SK.h @@ -1622,12 +1622,6 @@ MUI_STRING skSKStrings[] = "\xB3 KopЎruje sa sЈbor: %S"}, {STRING_SETUPCOPYINGFILES, "Inзtal tor kopЎruje sЈbory..."}, - {STRING_PAGEDMEM, - "Str nkovan "}, //reњazec "Str nkovan  pam„њ" sa nevmestЎ - {STRING_NONPAGEDMEM, - "Nestr nkovan "}, //reњazec "Nestr nkovan  pam„њ" sa nevmestЎ - {STRING_FREEMEM, - "Vo–n  pam„њ"}, {STRING_REGHIVEUPDATE, " Aktualizujem polo§ky registrov..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/lang/sv-SE.h b/reactos/base/setup/usetup/lang/sv-SE.h index 79d2f63cb0c..12211da722a 100644 --- a/reactos/base/setup/usetup/lang/sv-SE.h +++ b/reactos/base/setup/usetup/lang/sv-SE.h @@ -1613,12 +1613,6 @@ MUI_STRING svSEStrings[] = "\xB3 Copying file: %S"}, {STRING_SETUPCOPYINGFILES, "Setup is copying files..."}, - {STRING_PAGEDMEM, - "Paged Memory"}, - {STRING_NONPAGEDMEM, - "Nonpaged Memory"}, - {STRING_FREEMEM, - "Free Memory"}, {STRING_REGHIVEUPDATE, " Updating registry hives..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/lang/uk-UA.h b/reactos/base/setup/usetup/lang/uk-UA.h index fcb41845a80..7f6253859ad 100644 --- a/reactos/base/setup/usetup/lang/uk-UA.h +++ b/reactos/base/setup/usetup/lang/uk-UA.h @@ -1614,12 +1614,6 @@ MUI_STRING ukUAStrings[] = "\xB3 Copying file: %S"}, {STRING_SETUPCOPYINGFILES, "Setup is copying files..."}, - {STRING_PAGEDMEM, - "Paged Memory"}, - {STRING_NONPAGEDMEM, - "Nonpaged Memory"}, - {STRING_FREEMEM, - "Free Memory"}, {STRING_REGHIVEUPDATE, " Updating registry hives..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/mui.h b/reactos/base/setup/usetup/mui.h index ec6aa6f7268..41ac6eb0b0b 100644 --- a/reactos/base/setup/usetup/mui.h +++ b/reactos/base/setup/usetup/mui.h @@ -96,9 +96,6 @@ MUIGetString(ULONG Number); #define STRING_TXTSETUPFAILED 14 #define STRING_COPYING 15 #define STRING_SETUPCOPYINGFILES 16 -#define STRING_PAGEDMEM 17 -#define STRING_NONPAGEDMEM 18 -#define STRING_FREEMEM 19 #define STRING_REGHIVEUPDATE 20 #define STRING_IMPORTFILE 21 #define STRING_DISPLAYETTINGSUPDATE 22 diff --git a/reactos/base/setup/vmwinst/lang/cs-CZ.rc b/reactos/base/setup/vmwinst/lang/cs-CZ.rc index 324e806ea24..6a487da02b9 100644 --- a/reactos/base/setup/vmwinst/lang/cs-CZ.rc +++ b/reactos/base/setup/vmwinst/lang/cs-CZ.rc @@ -95,7 +95,7 @@ BEGIN IDS_FAILEDTOSELVGADRIVER "Nepodaшilo se zaktivovat ReactOS VGA ovladaи!" IDS_FAILEDTOSELVBEDRIVER "Nepodaшilo se zaktivovat ReactOS VBE ovladaи!" IDS_UNINSTNOTICE "Podpщrnй soubory VMware(r) SVGA ovladaиe nebyly odstranмny.\nSmaћte je, prosнm, po restarovбnн systйmu." - IDS_FAILEDTOADDREGENTRIES "Failed to create registry entries for the VMware(r) SVGA driver!" + IDS_FAILEDTOADDREGENTRIES "Nepodaшilo se vytvoшit v registru zбpis pro VMware(r) SVGA ovladaи!" END STRINGTABLE diff --git a/reactos/base/setup/vmwinst/lang/nb-NO.rc b/reactos/base/setup/vmwinst/lang/no-NO.rc similarity index 100% rename from reactos/base/setup/vmwinst/lang/nb-NO.rc rename to reactos/base/setup/vmwinst/lang/no-NO.rc diff --git a/reactos/base/setup/vmwinst/rsrc.rc b/reactos/base/setup/vmwinst/rsrc.rc index 21e1663396d..efbb68a5f2c 100644 --- a/reactos/base/setup/vmwinst/rsrc.rc +++ b/reactos/base/setup/vmwinst/rsrc.rc @@ -25,7 +25,7 @@ IDB_HEADER BITMAP "resources/header.bmp" #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/uk-UA.rc" diff --git a/reactos/base/setup/welcome/lang/nb-NO.rc b/reactos/base/setup/welcome/lang/no-NO.rc similarity index 100% rename from reactos/base/setup/welcome/lang/nb-NO.rc rename to reactos/base/setup/welcome/lang/no-NO.rc diff --git a/reactos/base/setup/welcome/rsrc.rc b/reactos/base/setup/welcome/rsrc.rc index c6fa217c92b..34bf603a040 100644 --- a/reactos/base/setup/welcome/rsrc.rc +++ b/reactos/base/setup/welcome/rsrc.rc @@ -52,7 +52,7 @@ END #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" diff --git a/reactos/base/shell/cmd/alias.c b/reactos/base/shell/cmd/alias.c index d4e4ae39aa3..0c317f82d88 100644 --- a/reactos/base/shell/cmd/alias.c +++ b/reactos/base/shell/cmd/alias.c @@ -89,8 +89,6 @@ VOID ExpandAlias (LPTSTR cmd, INT maxlen) TCHAR* position; LPTSTR Token; LPTSTR tmp; - LPTSTR ip, cp; - BOOL bModeSetA = FALSE; tmp = cmd_alloc(maxlen); if (!tmp) @@ -136,27 +134,6 @@ VOID ExpandAlias (LPTSTR cmd, INT maxlen) _tcscpy(cmd, buffer); } - ip = cp = cmd; - - while (*ip) - { - if ( (*ip == _T('%')) || (*ip == _T('!')) ) - { - UINT envNameLen; - LPCTSTR envVal = GetParsedEnvVar ( ip, &envNameLen, bModeSetA ); - if ( envVal ) - { - ip += envNameLen; - cp = _stpcpy ( cp, envVal ); - } - } - - if (*ip != _T('\0') && (_istcntrl (*ip))) - *ip = _T(' '); - *cp++ = *ip++; - } - *cp = _T('\0'); - cmd_free(buffer); cmd_free(tmp); diff --git a/reactos/base/shell/cmd/batch.c b/reactos/base/shell/cmd/batch.c index 5184b32dbaa..bbf1ff5a63f 100644 --- a/reactos/base/shell/cmd/batch.c +++ b/reactos/base/shell/cmd/batch.c @@ -263,10 +263,10 @@ BOOL Batch (LPTSTR fullname, LPTSTR firstword, LPTSTR param) cmd_free (bc->raw_params); } - ZeroMemory(bc->BatchFilePath, sizeof(bc->BatchFilePath)); + GetFullPathName(fullname, sizeof(bc->BatchFilePath), bc->BatchFilePath, &tmp); + *tmp = '\0'; + bc->hBatchFile = hFile; - tmp = _tcsrchr(fullname, '\\'); - _tcsncpy(bc->BatchFilePath, fullname, ((_tcslen(fullname) - _tcslen(tmp)) + 1)); SetFilePointer (bc->hBatchFile, 0, NULL, FILE_BEGIN); bc->bEcho = bEcho; /* Preserve echo across batch calls */ bc->shiftlevel = 0; diff --git a/reactos/base/shell/cmd/cmd.c b/reactos/base/shell/cmd/cmd.c index 8dd6a60b9f4..84c1e959069 100644 --- a/reactos/base/shell/cmd/cmd.c +++ b/reactos/base/shell/cmd/cmd.c @@ -712,11 +712,6 @@ VOID ParseCommandLine (LPTSTR cmd) TRACE ("ParseCommandLine: (\'%s\')\n", debugstr_aw(s)); -#ifdef FEATURE_ALIASES - /* expand all aliases */ - ExpandAlias (s, CMDLINE_LENGTH); -#endif /* FEATURE_ALIAS */ - #ifdef FEATURE_REDIRECTION /* find the temp path to store temporary files */ Length = GetTempPath (MAX_PATH, szTempPath); @@ -1092,57 +1087,20 @@ GetEnvVarOrSpecial ( LPCTSTR varName ) static LPTSTR ret = NULL; static UINT retlen = 0; UINT size; - TCHAR varNameFixed[MAX_PATH]; - TCHAR ReturnValue[MAX_PATH]; - LPTSTR position; - LPTSTR Token; - SIZE_T i = 0; - INT StringPart[1] = {0}; - - position = _tcsstr(varName, _T(":~")); - if (position) - _tcsncpy(varNameFixed, varName, (int) (position - varName)); - else - _tcscpy(varNameFixed, varName); - size = GetEnvironmentVariable ( varNameFixed, ret, retlen ); + size = GetEnvironmentVariable ( varName, ret, retlen ); if ( size > retlen ) { if ( !GrowIfNecessary ( size, &ret, &retlen ) ) return NULL; - size = GetEnvironmentVariable ( varNameFixed, ret, retlen ); + size = GetEnvironmentVariable ( varName, ret, retlen ); } if ( size ) - { - if (position) - { - position += 2; - if (_tcschr(position, _T(',')) != NULL) - { - Token = _tcstok(position, _T(",")); - while ((Token != NULL) && (i < 2)) - { - StringPart[i] = _ttoi(Token); - i++; - Token = _tcstok (NULL, _T(",")); - } - if (i > 0) - { - if (StringPart[1] < 0) - StringPart[1] = _tcslen(ret + StringPart[0]) + StringPart[1]; - _tcsncpy(ReturnValue, ret + StringPart[0], StringPart[1]); - _tcscpy(ret, ReturnValue); - } - } - return ret; - } - else - return ret; - } + return ret; /* env var doesn't exist, look for a "special" one */ /* %CD% */ - if (_tcsicmp(varNameFixed,_T("cd")) ==0) + if (_tcsicmp(varName,_T("cd")) ==0) { size = GetCurrentDirectory ( retlen, ret ); if ( size > retlen ) @@ -1156,7 +1114,7 @@ GetEnvVarOrSpecial ( LPCTSTR varName ) return ret; } /* %TIME% */ - else if (_tcsicmp(varNameFixed,_T("time")) ==0) + else if (_tcsicmp(varName,_T("time")) ==0) { SYSTEMTIME t; if ( !GrowIfNecessary ( MAX_PATH, &ret, &retlen ) ) @@ -1168,7 +1126,7 @@ GetEnvVarOrSpecial ( LPCTSTR varName ) return ret; } /* %DATE% */ - else if (_tcsicmp(varNameFixed,_T("date")) ==0) + else if (_tcsicmp(varName,_T("date")) ==0) { if ( !GrowIfNecessary ( GetDateFormat(LOCALE_USER_DEFAULT, DATE_SHORTDATE, NULL, NULL, NULL, 0), &ret, &retlen ) ) @@ -1182,7 +1140,7 @@ GetEnvVarOrSpecial ( LPCTSTR varName ) } /* %RANDOM% */ - else if (_tcsicmp(varNameFixed,_T("random")) ==0) + else if (_tcsicmp(varName,_T("random")) ==0) { if ( !GrowIfNecessary ( MAX_PATH, &ret, &retlen ) ) return NULL; @@ -1192,13 +1150,13 @@ GetEnvVarOrSpecial ( LPCTSTR varName ) } /* %CMDCMDLINE% */ - else if (_tcsicmp(varNameFixed,_T("cmdcmdline")) ==0) + else if (_tcsicmp(varName,_T("cmdcmdline")) ==0) { return GetCommandLine(); } /* %CMDEXTVERSION% */ - else if (_tcsicmp(varNameFixed,_T("cmdextversion")) ==0) + else if (_tcsicmp(varName,_T("cmdextversion")) ==0) { if ( !GrowIfNecessary ( MAX_PATH, &ret, &retlen ) ) return NULL; @@ -1208,7 +1166,7 @@ GetEnvVarOrSpecial ( LPCTSTR varName ) } /* %ERRORLEVEL% */ - else if (_tcsicmp(varNameFixed,_T("errorlevel")) ==0) + else if (_tcsicmp(varName,_T("errorlevel")) ==0) { if ( !GrowIfNecessary ( MAX_PATH, &ret, &retlen ) ) return NULL; @@ -1216,30 +1174,17 @@ GetEnvVarOrSpecial ( LPCTSTR varName ) return ret; } - GrowIfNecessary(_tcslen(varNameFixed) + 3, &ret, &retlen); - _stprintf(ret,_T("%%%s%%"),varNameFixed); - return ret; /* not found - return orginal string */ + return NULL; } LPCTSTR -GetParsedEnvVar ( LPCTSTR varName, UINT* varNameLen, BOOL ModeSetA ) +GetBatchVar ( LPCTSTR varName, UINT* varNameLen ) { static LPTSTR ret = NULL; static UINT retlen = 0; - LPTSTR p, tmp; - UINT size; - TCHAR c; if ( varNameLen ) - *varNameLen = 0; - SetLastError(0); - c = *varName; - - if ( (*varName != '!') && (*varName++ != '%') ) - return NULL; - - if (c == _T('!')) - varName++; + *varNameLen = 1; switch ( *varName ) { @@ -1248,7 +1193,7 @@ GetParsedEnvVar ( LPCTSTR varName, UINT* varNameLen, BOOL ModeSetA ) if (_tcsncicmp(varName, _T("dp0"), 3) == 0) { if ( varNameLen ) - *varNameLen = 5; + *varNameLen = 4; return bc->BatchFilePath; } case _T('0'): @@ -1261,60 +1206,16 @@ GetParsedEnvVar ( LPCTSTR varName, UINT* varNameLen, BOOL ModeSetA ) case _T('7'): case _T('8'): case _T('9'): - if ((tmp = FindArg (*varName - _T('0')))) - { - if ( varNameLen ) - *varNameLen = 2; - if ( !*tmp ) - return _T(""); - if ( !GrowIfNecessary ( _tcslen(tmp)+1, &ret, &retlen ) ) - return NULL; - _tcscpy ( ret, tmp ); - return ret; - } - if ( !GrowIfNecessary ( 3, &ret, &retlen ) ) - return NULL; - ret[0] = _T('%'); - ret[1] = *varName; - ret[2] = 0; - if ( varNameLen ) - *varNameLen = 2; - return ret; + return FindArg(*varName - _T('0')); case _T('*'): - if(bc == NULL) - { - // - // No batch file to see here, move along - // - if ( !GrowIfNecessary ( 3, &ret, &retlen ) ) - return NULL; - ret[0] = _T('%'); - ret[1] = _T('*'); - ret[2] = 0; - if ( varNameLen ) - *varNameLen = 2; - return ret; - } - // // Copy over the raw params(not including the batch file name // - if ( !GrowIfNecessary ( _tcslen(bc->raw_params)+1, &ret, &retlen ) ) - return NULL; - if ( varNameLen ) - *varNameLen = 2; - _tcscpy ( ret, bc->raw_params ); - return ret; + return bc->raw_params; case _T('%'): - if ( !GrowIfNecessary ( 2, &ret, &retlen ) ) - return NULL; - ret[0] = _T('%'); - ret[1] = 0; - if ( varNameLen ) - *varNameLen = 2; - return ret; + return _T("%"); case _T('?'): /* TODO FIXME 10 is only max size for 32-bit */ @@ -1322,35 +1223,164 @@ GetParsedEnvVar ( LPCTSTR varName, UINT* varNameLen, BOOL ModeSetA ) return NULL; _sntprintf ( ret, retlen, _T("%u"), nErrorLevel); ret[retlen-1] = 0; - if ( varNameLen ) - *varNameLen = 2; - return ret; - } - if ( ModeSetA ) - { - /* HACK for set/a */ - if ( !GrowIfNecessary ( 2, &ret, &retlen ) ) - return NULL; - ret[0] = _T('%'); - ret[1] = 0; if ( varNameLen ) *varNameLen = 1; return ret; } - p = _tcschr ( varName, c ); - if ( !p ) + return NULL; +} + +BOOL +SubstituteVars(TCHAR *Src, TCHAR *Dest, TCHAR Delim, BOOL bIsBatch) +{ +#define APPEND(From, Length) { \ + if (Dest + (Length) > DestEnd) \ + goto too_long; \ + memcpy(Dest, From, (Length) * sizeof(TCHAR)); \ + Dest += Length; } +#define APPEND1(Char) { \ + if (Dest >= DestEnd) \ + goto too_long; \ + *Dest++ = Char; } + + TCHAR *DestEnd = Dest + CMDLINE_LENGTH - 1; + const TCHAR *Var; + int VarLength; + TCHAR *SubstStart; + TCHAR EndChr; + while (*Src) { - SetLastError ( ERROR_INVALID_PARAMETER ); - return NULL; + if (*Src != Delim) + { + APPEND1(*Src++) + continue; + } + + Src++; + if (bIsBatch && Delim == _T('%')) + { + UINT NameLen; + Var = GetBatchVar(Src, &NameLen); + if (Var != NULL) + { + VarLength = _tcslen(Var); + APPEND(Var, VarLength) + Src += NameLen; + continue; + } + } + + /* Find the end of the variable name. A colon (:) will usually + * end the name and begin the optional modifier, but not if it + * is immediately followed by the delimiter (%VAR:%). */ + SubstStart = Src; + while (*Src != Delim && !(*Src == _T(':') && Src[1] != Delim)) + { + if (!*Src) + goto bad_subst; + Src++; + } + + EndChr = *Src; + *Src = _T('\0'); + Var = GetEnvVarOrSpecial(SubstStart); + *Src++ = EndChr; + if (Var == NULL) + { + /* In a batch file, %NONEXISTENT% "expands" to an empty string */ + if (bIsBatch) + continue; + goto bad_subst; + } + VarLength = _tcslen(Var); + + if (EndChr == Delim) + { + /* %VAR% - use as-is */ + APPEND(Var, VarLength) + } + else if (*Src == _T('~')) + { + /* %VAR:~[start][,length]% - substring + * Negative values are offsets from the end */ + int Start = _tcstol(Src + 1, &Src, 0); + int End = VarLength; + if (Start < 0) + Start += VarLength; + Start = max(Start, 0); + Start = min(Start, VarLength); + if (*Src == _T(',')) + { + End = _tcstol(Src + 1, &Src, 0); + End += (End < 0) ? VarLength : Start; + End = max(End, Start); + End = min(End, VarLength); + } + if (*Src++ != Delim) + goto bad_subst; + APPEND(&Var[Start], End - Start); + } + else + { + /* %VAR:old=new% - replace all occurrences of old with new + * %VAR:*old=new% - replace first occurrence only, + * and remove everything before it */ + TCHAR *Old, *New; + DWORD OldLength, NewLength; + BOOL Star = FALSE; + int LastMatch = 0, i = 0; + + if (*Src == _T('*')) + { + Star = TRUE; + Src++; + } + + /* the string to replace may contain the delimiter */ + Src = _tcschr(Old = Src, _T('=')); + if (Src == NULL) + goto bad_subst; + OldLength = Src++ - Old; + if (OldLength == 0) + goto bad_subst; + + Src = _tcschr(New = Src, Delim); + if (Src == NULL) + goto bad_subst; + NewLength = Src++ - New; + + while (i < VarLength) + { + if (_tcsnicmp(&Var[i], Old, OldLength) == 0) + { + if (!Star) + APPEND(&Var[LastMatch], i - LastMatch) + APPEND(New, NewLength) + i += OldLength; + LastMatch = i; + if (Star) + break; + continue; + } + i++; + } + APPEND(&Var[LastMatch], VarLength - LastMatch) + } + continue; + + bad_subst: + Src = SubstStart; + if (!bIsBatch) + APPEND1(Delim) } - size = p-varName; - if ( varNameLen ) - *varNameLen = size + 2; - p = alloca ( (size+1) * sizeof(TCHAR) ); - memmove ( p, varName, size * sizeof(TCHAR) ); - p[size] = 0; - varName = p; - return GetEnvVarOrSpecial ( varName ); + *Dest = _T('\0'); + return TRUE; +too_long: + ConOutResPrintf(STRING_ALIAS_ERROR); + nErrorLevel = 9023; + return FALSE; +#undef APPEND +#undef APPEND1 } @@ -1365,10 +1395,7 @@ ProcessInput (BOOL bFlag) TCHAR commandline[CMDLINE_LENGTH]; TCHAR readline[CMDLINE_LENGTH]; LPTSTR ip; - LPTSTR cp; - LPCTSTR tmp; BOOL bEchoThisLine; - BOOL bModeSetA; BOOL bIsBatch; do @@ -1393,94 +1420,8 @@ ProcessInput (BOOL bFlag) while ( _istspace(*ip) ) ++ip; - cp = commandline; - bModeSetA = FALSE; - while (*ip) - { - if ( (*ip == _T('%')) || (*ip == _T('!')) ) - { - UINT envNameLen; - LPCTSTR envVal = GetParsedEnvVar ( ip, &envNameLen, bModeSetA ); - if ( envVal ) - { - ip += envNameLen; - cp = _stpcpy ( cp, envVal ); - } - } - - if (*ip != _T('\0') && (_istcntrl (*ip))) - *ip = _T(' '); - *cp++ = *ip++; - - /* HACK HACK HACK check whether bModeSetA needs to be toggled */ - *cp = 0; - tmp = commandline; - tmp += _tcsspn(tmp,_T(" \t")); - /* first we find and skip and pre-redirections... */ - while (( tmp ) && - ( _tcschr(_T("<>"),*tmp) - || !_tcsncmp(tmp,_T("1>"),2) - || !_tcsncmp(tmp,_T("2>"),2) )) - { - if ( _istdigit(*tmp) ) - tmp += 2; - else - tmp++; - tmp += _tcsspn(tmp,_T(" \t")); - if ( *tmp == _T('\"') ) - { - tmp = _tcschr(tmp+1,_T('\"')); - if ( tmp ) - ++tmp; - } - else - tmp = _tcspbrk(tmp,_T(" \t")); - if ( tmp ) - tmp += _tcsspn(tmp,_T(" \t")); - } - /* we should now be pointing to the actual command - * (if there is one yet)*/ - if ( tmp ) - { - /* if we're currently substituting ( which is default ) - * check to see if we've parsed out a set/a. if so, we - * need to disable substitution until we come across a - * redirection */ - if ( !bModeSetA ) - { - /* look for set /a */ - if ( !_tcsnicmp(tmp,_T("set"),3) ) - { - tmp += 3; - tmp += _tcsspn(tmp,_T(" \t")); - if ( !_tcsnicmp(tmp,_T("/a"),2) ) - bModeSetA = TRUE; - } - } - /* if we're not currently substituting, it means we're - * already inside a set /a. now we need to look for - * a redirection in order to turn redirection back on */ - else - { - /* look for redirector of some kind after the command */ - while ( (tmp = _tcspbrk ( tmp, _T("^<>|") )) ) - { - if ( *tmp == _T('^') ) - { - if ( _tcschr(_T("<>|&"), *++tmp ) && *tmp ) - ++tmp; - } - else - { - bModeSetA = FALSE; - break; - } - } - } - } - } - - *cp = _T('\0'); + if (!SubstituteVars(ip, commandline, _T('%'), bIsBatch)) + continue; /* JPP 19980807 */ /* Echo batch file line */ @@ -1490,6 +1431,11 @@ ProcessInput (BOOL bFlag) ConOutPuts (commandline); } + /* FIXME: !vars! should be substituted later, after parsing. */ + if (!SubstituteVars(commandline, readline, _T('!'), bIsBatch)) + continue; + _tcscpy(commandline, readline); + if (!CheckCtrlBreak(BREAK_INPUT) && *commandline) { ParseCommandLine (commandline); diff --git a/reactos/base/shell/cmd/cmd.rc b/reactos/base/shell/cmd/cmd.rc index 25f04ade853..5e358d9d9b2 100644 --- a/reactos/base/shell/cmd/cmd.rc +++ b/reactos/base/shell/cmd/cmd.rc @@ -18,7 +18,7 @@ #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/pl-PL.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/ru-RU.rc" #include "lang/uk-UA.rc" diff --git a/reactos/base/shell/cmd/cmdinput.c b/reactos/base/shell/cmd/cmdinput.c index fdba537068a..573a21b62ac 100644 --- a/reactos/base/shell/cmd/cmdinput.c +++ b/reactos/base/shell/cmd/cmdinput.c @@ -587,4 +587,9 @@ VOID ReadCommand (LPTSTR str, INT maxlen) while (!bReturn); SetCursorType (bInsert, TRUE); + +#ifdef FEATURE_ALIASES + /* expand all aliases */ + ExpandAlias (str, maxlen); +#endif /* FEATURE_ALIAS */ } diff --git a/reactos/base/shell/cmd/label.c b/reactos/base/shell/cmd/label.c index f87d294b873..745ff900dcd 100644 --- a/reactos/base/shell/cmd/label.c +++ b/reactos/base/shell/cmd/label.c @@ -57,7 +57,7 @@ INT cmd_label (LPTSTR cmd, LPTSTR param) szRootPath[0] = szCurPath[0]; } - _tcsncpy (szLabel, param, 12); + _tcsncat(szLabel, param, 79); /* check root path */ if (!IsValidPathName (szRootPath)) @@ -67,30 +67,35 @@ INT cmd_label (LPTSTR cmd, LPTSTR param) return 1; } - GetVolumeInformation(szRootPath, szOldLabel, 80, &dwSerialNr, - NULL, NULL, NULL, 0); - - /* print drive info */ - if (szOldLabel[0] != _T('\0')) - { - ConOutResPrintf(STRING_LABEL_HELP2, _totupper(szRootPath[0]), szOldLabel); - } - else - { - ConOutResPrintf(STRING_LABEL_HELP3, _totupper(szRootPath[0])); - } - - /* print the volume serial number */ - ConOutResPrintf(STRING_LABEL_HELP4, HIWORD(dwSerialNr), LOWORD(dwSerialNr)); - if (szLabel[0] == _T('\0')) { + GetVolumeInformation(szRootPath, szOldLabel, 80, &dwSerialNr, + NULL, NULL, NULL, 0); + + /* print drive info */ + if (szOldLabel[0] != _T('\0')) + { + ConOutResPrintf(STRING_LABEL_HELP2, _totupper(szRootPath[0]), szOldLabel); + } + else + { + ConOutResPrintf(STRING_LABEL_HELP3, _totupper(szRootPath[0])); + } + + /* print the volume serial number */ + ConOutResPrintf(STRING_LABEL_HELP4, HIWORD(dwSerialNr), LOWORD(dwSerialNr)); + ConOutResPuts(STRING_LABEL_HELP5); ConInString(szLabel, 80); } - SetVolumeLabel(szRootPath, szLabel); + if (!SetVolumeLabel(szRootPath, szLabel)) + { + ConOutFormatMessage(GetLastError()); + nErrorLevel = 1; + return 1; + } return 0; } diff --git a/reactos/base/shell/cmd/lang/nb-NO.rc b/reactos/base/shell/cmd/lang/no-NO.rc similarity index 100% rename from reactos/base/shell/cmd/lang/nb-NO.rc rename to reactos/base/shell/cmd/lang/no-NO.rc diff --git a/reactos/base/shell/cmd/start.c b/reactos/base/shell/cmd/start.c index b160dd1bf85..5532c542268 100644 --- a/reactos/base/shell/cmd/start.c +++ b/reactos/base/shell/cmd/start.c @@ -15,14 +15,42 @@ #ifdef INCLUDE_CMD_START +/* Find the end of an option, and turn it into a nul-terminated string + * in place. (It's moved back one character, to make room for the nul) */ +static TCHAR *GetParameter(TCHAR **pPointer) +{ + BOOL bInQuote = FALSE; + TCHAR *start = *pPointer; + TCHAR *p; + for (p = start; *p; p++) + { + if (!bInQuote && (*p == _T('/') || _istspace(*p))) + break; + bInQuote ^= (*p == _T('"')); + p[-1] = *p; + } + p[-1] = _T('\0'); + *pPointer = p; + return start - 1; +} + +static void StripQuotes(TCHAR *in) +{ + TCHAR *out = in; + for (; *in; in++) + { + if (*in != _T('"')) + *out++ = *in; + } + *out = _T('\0'); +} INT cmd_start (LPTSTR First, LPTSTR Rest) { TCHAR szFullName[CMDLINE_LENGTH]; - TCHAR first[CMDLINE_LENGTH]; - TCHAR *rest = NULL; + TCHAR rest[CMDLINE_LENGTH]; TCHAR *param = NULL; - TCHAR RestWithoutArgs[CMDLINE_LENGTH]; + TCHAR *dot; INT size; LPTSTR comspec; BOOL bWait = FALSE; @@ -31,62 +59,95 @@ INT cmd_start (LPTSTR First, LPTSTR Rest) TCHAR szFullCmdLine [CMDLINE_LENGTH]; PROCESS_INFORMATION prci; STARTUPINFO stui; - LPTSTR *arg; - INT argc = 0; INT i = 0; DWORD Priority = 0; + LPTSTR lpTitle = NULL; + LPTSTR lpDirectory = NULL; + WORD wShowWindow = SW_SHOWNORMAL; - RestWithoutArgs[0] = _T('\0'); - _tcscpy(first,First); - arg = split (Rest, &argc, FALSE); - - - for (i = 0; i < argc; i++) + while (1) { - if (!_tcsncmp (arg[i], _T("/?"), 2)) + if (_istspace(*Rest)) { - freep(arg); - ConOutResPaging(TRUE,STRING_START_HELP1); - return 0; + Rest++; } - else if(!_tcsicmp(arg[i], _T("/LOW"))) + else if (*Rest == _T('"') && !lpTitle) { - Priority = IDLE_PRIORITY_CLASS; + lpTitle = GetParameter(&Rest); + StripQuotes(lpTitle); } - else if(!_tcsicmp(arg[i], _T("/NORMAL"))) + else if (*Rest == L'/') { - Priority = NORMAL_PRIORITY_CLASS; - } - else if(!_tcsicmp(arg[i], _T("/HIGH"))) - { - Priority = HIGH_PRIORITY_CLASS; - } - else if(!_tcsicmp(arg[i], _T("/REALTIME"))) - { - Priority = REALTIME_PRIORITY_CLASS; - } - else if(!_tcsicmp(arg[i], _T("/ABOVENORMAL"))) - { - Priority = ABOVE_NORMAL_PRIORITY_CLASS; - } - else if(!_tcsicmp(arg[i], _T("/BELOWNORMAL"))) - { - Priority = BELOW_NORMAL_PRIORITY_CLASS; + LPTSTR option; + Rest++; + option = GetParameter(&Rest); + if (*option == _T('?')) + { + ConOutResPaging(TRUE,STRING_START_HELP1); + return 0; + } + else if (_totupper(*option) == _T('D')) + { + lpDirectory = option + 1; + if (!*lpDirectory) + { + while (_istspace(*Rest)) + Rest++; + lpDirectory = GetParameter(&Rest); + } + StripQuotes(lpDirectory); + } + else if (!_tcsicmp(option, _T("MIN"))) + { + wShowWindow = SW_MINIMIZE; + } + else if (!_tcsicmp(option, _T("MAX"))) + { + wShowWindow = SW_MAXIMIZE; + } + else if (!_tcsicmp(option, _T("LOW"))) + { + Priority = IDLE_PRIORITY_CLASS; + } + else if (!_tcsicmp(option, _T("NORMAL"))) + { + Priority = NORMAL_PRIORITY_CLASS; + } + else if (!_tcsicmp(option, _T("HIGH"))) + { + Priority = HIGH_PRIORITY_CLASS; + } + else if (!_tcsicmp(option, _T("REALTIME"))) + { + Priority = REALTIME_PRIORITY_CLASS; + } + else if (!_tcsicmp(option, _T("ABOVENORMAL"))) + { + Priority = ABOVE_NORMAL_PRIORITY_CLASS; + } + else if (!_tcsicmp(option, _T("BELOWNORMAL"))) + { + Priority = BELOW_NORMAL_PRIORITY_CLASS; + } + else if (!_tcsicmp(option, _T("W")) || + !_tcsicmp(option, _T("WAIT"))) + { + bWait = TRUE; + } + else + { + ConErrResPrintf(STRING_TYPE_ERROR1, option); + return 0; + } } else { - if(RestWithoutArgs[0] != _T('\0')) - { - _tcscat(RestWithoutArgs,_T(" ")); - } - _tcscat(RestWithoutArgs,arg[i]); + /* It's not an option - must be the beginning of + * the actual command. Leave the loop. */ + break; } } - - - - - freep (arg); + _tcscpy(rest, Rest); /* get comspec */ comspec = cmd_alloc ( MAX_PATH * sizeof(TCHAR)); @@ -99,10 +160,7 @@ INT cmd_start (LPTSTR First, LPTSTR Rest) size = GetEnvironmentVariable (_T("COMSPEC"), comspec, MAX_PATH); if(GetLastError() == ERROR_ENVVAR_NOT_FOUND) { - RestWithoutArgs[0] = _T('c'); - RestWithoutArgs[1] = _T('m'); - RestWithoutArgs[2] = _T('d'); - RestWithoutArgs[3] = _T('\0'); + _tcscpy(comspec, _T("cmd")); } else { @@ -119,102 +177,47 @@ INT cmd_start (LPTSTR First, LPTSTR Rest) nErrorLevel = 0; - if(!_tcslen(RestWithoutArgs)) + if(!*rest) { - _tcscpy(RestWithoutArgs,_T("\"")); - _tcscat(RestWithoutArgs,comspec); - _tcscat(RestWithoutArgs,_T("\"")); + _tcscpy(rest,_T("\"")); + _tcscat(rest,comspec); + _tcscat(rest,_T("\"")); } - rest = cmd_alloc ( (_tcslen(RestWithoutArgs) + 1) * sizeof(TCHAR)); - if (rest == NULL) - { - if(comspec != NULL) - cmd_free(comspec); - error_out_of_memory(); - return 1; - } - - param = cmd_alloc ( (_tcslen(RestWithoutArgs) + 1) * sizeof(TCHAR)); - if (param == NULL) - { - if(comspec != NULL) - cmd_free(comspec); - cmd_free(rest); - error_out_of_memory(); - return 1; - } - - param[0] = _T('\0'); - - - _tcscpy(rest,RestWithoutArgs); - /* Parsing the command that gets called by start, and it's parameters */ - if(!_tcschr(rest,_T('\"'))) { - INT count = _tcslen(rest); - - /* find the end of the command and start of the args */ - for(i = 0; i < count; i++) - { - if(rest[i] == _T(' ')) - { - - _tcscpy(param,&rest[i+1]); - rest[i] = _T('\0'); - break; - } - } - } - else - { - INT count = _tcslen(rest); BOOL bInside = FALSE; /* find the end of the command and put the arguments in param */ - for(i = 0; i < count; i++) + for(i = 0; rest[i]; i++) { if(rest[i] == _T('\"')) bInside = !bInside; if((rest[i] == _T(' ')) && !bInside) { - _tcscpy(param,&rest[i+1]); + param = &rest[i+1]; rest[i] = _T('\0'); break; } } - i = 0; /* remove any slashes */ - while(i < count) - { - if(rest[i] == _T('\"')) - memmove(&rest[i],&rest[i + 1], _tcslen(&rest[i]) * sizeof(TCHAR)); - else - i++; - } + StripQuotes(rest); } /* check for a drive change */ - if (!_tcscmp (first + 1, _T(":")) && _istalpha (*first)) + if (!_tcscmp (rest + 1, _T(":")) && _istalpha (*rest)) { TCHAR szPath[CMDLINE_LENGTH]; _tcscpy (szPath, _T("A:")); - szPath[0] = _totupper (*first); + szPath[0] = _totupper (*rest); SetCurrentDirectory (szPath); GetCurrentDirectory (CMDLINE_LENGTH, szPath); - if (szPath[0] != (TCHAR)_totupper (*first)) + if (szPath[0] != (TCHAR)_totupper (*rest)) ConErrResPuts (STRING_FREE_ERROR1); - if (rest != NULL) - cmd_free(rest); - - if (param != NULL) - cmd_free(param); - if (comspec != NULL) - cmd_free(comspec); + cmd_free(comspec); return 0; } @@ -224,66 +227,48 @@ INT cmd_start (LPTSTR First, LPTSTR Rest) { error_bad_command (); - if (rest != NULL) - cmd_free(rest); - - if (param != NULL) - cmd_free(param); - - if (comspec != NULL) - cmd_free(comspec); + cmd_free(comspec); return 1; } /* check if this is a .BAT or .CMD file */ - if (!_tcsicmp (_tcsrchr (szFullName, _T('.')), _T(".bat")) || - !_tcsicmp (_tcsrchr (szFullName, _T('.')), _T(".cmd"))) + dot = _tcsrchr (szFullName, _T('.')); + if (dot && (!_tcsicmp (dot, _T(".bat")) || !_tcsicmp (dot, _T(".cmd")))) { bBat = TRUE; - memset(szFullCmdLine,0,CMDLINE_LENGTH * sizeof(TCHAR)); - - - _tcscpy(szFullCmdLine,comspec); - - memcpy(&szFullCmdLine[_tcslen(szFullCmdLine)],_T("\" /K \""), 6 * sizeof(TCHAR)); - memcpy(&szFullCmdLine[_tcslen(szFullCmdLine)], szFullName, _tcslen(szFullName) * sizeof(TCHAR)); - memcpy(&szFullCmdLine[1], &szFullCmdLine[0], _tcslen(szFullCmdLine) * sizeof(TCHAR)); - szFullCmdLine[0] = _T('\"'); - szFullCmdLine[_tcslen(szFullCmdLine)] = _T('\"'); - } - + _stprintf(szFullCmdLine, _T("\"%s\" /K \"%s\""), comspec, szFullName); TRACE ("[BATCH: %s %s]\n", debugstr_aw(szFullName), debugstr_aw(rest)); - - + } + else + { TRACE ("[EXEC: %s %s]\n", debugstr_aw(szFullName), debugstr_aw(rest)); /* build command line for CreateProcess() */ - if (bBat == FALSE) - { - _tcscpy (szFullCmdLine, first); + _tcscpy (szFullCmdLine, rest); if( param != NULL ) { _tcscat(szFullCmdLine, _T(" ") ); _tcscat (szFullCmdLine, param); } - } + } /* fill startup info */ memset (&stui, 0, sizeof (STARTUPINFO)); stui.cb = sizeof (STARTUPINFO); stui.dwFlags = STARTF_USESHOWWINDOW; - stui.wShowWindow = SW_SHOWDEFAULT; + stui.lpTitle = lpTitle; + stui.wShowWindow = wShowWindow; if (bBat == TRUE) { bCreate = CreateProcess (NULL, szFullCmdLine, NULL, NULL, FALSE, - CREATE_NEW_CONSOLE | Priority, NULL, NULL, &stui, &prci); + CREATE_NEW_CONSOLE | Priority, NULL, lpDirectory, &stui, &prci); } else { bCreate = CreateProcess (szFullName, szFullCmdLine, NULL, NULL, FALSE, - CREATE_NEW_CONSOLE | Priority, NULL, NULL, &stui, &prci); + CREATE_NEW_CONSOLE | Priority, NULL, lpDirectory, &stui, &prci); } if (bCreate) @@ -308,14 +293,7 @@ INT cmd_start (LPTSTR First, LPTSTR Rest) } - if (rest != NULL) - cmd_free(rest); - - if (param != NULL) - cmd_free(param); - - if (comspec != NULL) - cmd_free(comspec); + cmd_free(comspec); return 0; } diff --git a/reactos/base/shell/cmd/where.c b/reactos/base/shell/cmd/where.c index 9c0fa73877b..32c2f3dd0c3 100644 --- a/reactos/base/shell/cmd/where.c +++ b/reactos/base/shell/cmd/where.c @@ -83,56 +83,25 @@ /* searches for file using path info. */ BOOL -SearchForExecutableSingle (LPCTSTR pFileName, LPTSTR pFullName, LPTSTR pExtension) +SearchForExecutableSingle (LPCTSTR pFileName, LPTSTR pFullName, LPTSTR pPathExt, LPTSTR pDirectory) { - TCHAR szPathBuffer[CMDLINE_LENGTH]; - LPTSTR pszBuffer = NULL; - DWORD dwBuffer, len; + TCHAR szPathBuffer[CMDLINE_LENGTH], *pszPathEnd; LPTSTR s,f; /* initialize full name buffer */ *pFullName = _T('\0'); - TRACE ("SearchForExecutableSingle: \'%s\' with ext: \'%s\'\n", - debugstr_aw(pFileName), debugstr_aw(pExtension)); + TRACE ("SearchForExecutableSingle: \'%s\' in dir: \'%s\'\n", + debugstr_aw(pFileName), debugstr_aw(pDirectory)); - /* Check if valid directly on specified path */ - if (_tcschr (pFileName, _T('\\')) != NULL) + pszPathEnd = szPathBuffer; + if (pDirectory != NULL) { - LPTSTR pFilePart; - TRACE ("Absolute or relative path is given.\n"); - - if (GetFullPathName (pFileName, - CMDLINE_LENGTH, - szPathBuffer, - &pFilePart) ==0) - return FALSE; - - if(pFilePart == 0) - return FALSE; - /* Add extension and test file: */ - if (pExtension) - _tcscat(szPathBuffer, pExtension); - - if (IsExistingFile (szPathBuffer)) - { - TRACE ("Found: \'%s\'\n", debugstr_aw(szPathBuffer)); - _tcscpy (pFullName, szPathBuffer); - return TRUE; - } - return FALSE; + _tcscpy(szPathBuffer, pDirectory); + pszPathEnd += _tcslen(pszPathEnd); + *pszPathEnd++ = _T('\\'); } - - /* search in current directory */ - len = GetCurrentDirectory (CMDLINE_LENGTH, szPathBuffer); - if (szPathBuffer[len - 1] != _T('\\')) - { - szPathBuffer[len] = _T('\\'); - szPathBuffer[len + 1] = _T('\0'); - } - _tcscat (szPathBuffer, pFileName); - - if (pExtension) - _tcscat (szPathBuffer, pExtension); + _tcscpy(pszPathEnd, pFileName); + pszPathEnd += _tcslen(pszPathEnd); if (IsExistingFile (szPathBuffer)) { @@ -141,56 +110,30 @@ SearchForExecutableSingle (LPCTSTR pFileName, LPTSTR pFullName, LPTSTR pExtensio return TRUE; } - - - /* load environment varable PATH into buffer */ - pszBuffer = (LPTSTR)cmd_alloc (ENV_BUFFER_SIZE * sizeof(TCHAR)); - dwBuffer = GetEnvironmentVariable (_T("PATH"), pszBuffer, ENV_BUFFER_SIZE); - if (dwBuffer > ENV_BUFFER_SIZE) - { - pszBuffer = (LPTSTR)cmd_realloc (pszBuffer, dwBuffer * sizeof (TCHAR)); - GetEnvironmentVariable (_T("PATH"), pszBuffer, dwBuffer); - } - - - /* search in PATH */ - s = pszBuffer; + s = pPathExt; while (s && *s) { f = _tcschr (s, _T(';')); if (f) { - _tcsncpy (szPathBuffer, s, (size_t)(f-s)); - szPathBuffer[f-s] = _T('\0'); + _tcsncpy (pszPathEnd, s, (size_t)(f-s)); + pszPathEnd[f-s] = _T('\0'); s = f + 1; } else { - _tcscpy (szPathBuffer, s); + _tcscpy (pszPathEnd, s); s = NULL; } - len = _tcslen(szPathBuffer); - if (szPathBuffer[len - 1] != _T('\\')) - { - szPathBuffer[len] = _T('\\'); - szPathBuffer[len + 1] = _T('\0'); - } - _tcscat (szPathBuffer, pFileName); - - if (pExtension) - _tcscat (szPathBuffer, pExtension); - if (IsExistingFile (szPathBuffer)) { TRACE ("Found: \'%s\'\n", debugstr_aw(szPathBuffer)); - cmd_free (pszBuffer); _tcscpy (pFullName, szPathBuffer); return TRUE; } } - cmd_free (pszBuffer); return FALSE; } @@ -199,60 +142,64 @@ BOOL SearchForExecutable (LPCTSTR pFileName, LPTSTR pFullName) { static TCHAR pszDefaultPathExt[] = _T(".COM;.EXE;.BAT;.CMD"); - LPTSTR pszBuffer = NULL; + LPTSTR pszPathExt, pszPath; LPTSTR pCh; - LPTSTR pExt; DWORD dwBuffer; TRACE ("SearchForExecutable: \'%s\'\n", debugstr_aw(pFileName)); + /* load environment varable PATHEXT */ - pszBuffer = (LPTSTR)cmd_alloc (ENV_BUFFER_SIZE * sizeof(TCHAR)); - dwBuffer = GetEnvironmentVariable (_T("PATHEXT"), pszBuffer, ENV_BUFFER_SIZE); + pszPathExt = (LPTSTR)cmd_alloc (ENV_BUFFER_SIZE * sizeof(TCHAR)); + dwBuffer = GetEnvironmentVariable (_T("PATHEXT"), pszPathExt, ENV_BUFFER_SIZE); if (dwBuffer > ENV_BUFFER_SIZE) { - pszBuffer = (LPTSTR)cmd_realloc (pszBuffer, dwBuffer * sizeof (TCHAR)); - GetEnvironmentVariable (_T("PATHEXT"), pszBuffer, dwBuffer); + pszPathExt = (LPTSTR)cmd_realloc (pszPathExt, dwBuffer * sizeof (TCHAR)); + GetEnvironmentVariable (_T("PATHEXT"), pszPathExt, dwBuffer); } else if (0 == dwBuffer) { - _tcscpy(pszBuffer, pszDefaultPathExt); + _tcscpy(pszPathExt, pszDefaultPathExt); } - TRACE ("SearchForExecutable(): Loaded PATHEXT: %s\n", debugstr_aw(pszBuffer)); - - pExt = _tcsrchr(pFileName, _T('.')); - if (pExt != NULL) + /* Check if valid directly on specified path */ + if (SearchForExecutableSingle(pFileName, pFullName, pszPathExt, NULL)) { - LPTSTR pszBuffer2; - pszBuffer2 = cmd_dup(pszBuffer); - if (pszBuffer2) - { - pCh = _tcstok(pszBuffer2, _T(";")); - while (pCh) - { - if (0 == _tcsicmp(pCh, pExt)) - { - cmd_free(pszBuffer); - cmd_free(pszBuffer2); - return SearchForExecutableSingle(pFileName, pFullName, NULL); - } - pCh = _tcstok(NULL, _T(";")); - } - cmd_free(pszBuffer2); - } + cmd_free(pszPathExt); + return TRUE; } - pCh = _tcstok(pszBuffer, _T(";")); + /* If an explicit directory was given, stop here - no need to search PATH. */ + if (pFileName[1] == _T(':') || _tcschr(pFileName, _T('\\'))) + { + cmd_free(pszPathExt); + return FALSE; + } + + /* load environment varable PATH into buffer */ + pszPath = (LPTSTR)cmd_alloc (ENV_BUFFER_SIZE * sizeof(TCHAR)); + dwBuffer = GetEnvironmentVariable (_T("PATH"), pszPath, ENV_BUFFER_SIZE); + if (dwBuffer > ENV_BUFFER_SIZE) + { + pszPath = (LPTSTR)cmd_realloc (pszPath, dwBuffer * sizeof (TCHAR)); + GetEnvironmentVariable (_T("PATH"), pszPath, dwBuffer); + } + + TRACE ("SearchForExecutable(): Loaded PATH: %s\n", debugstr_aw(pszPath)); + + /* search in PATH */ + pCh = _tcstok(pszPath, _T(";")); while (pCh) { - if (SearchForExecutableSingle(pFileName, pFullName, pCh)) + if (SearchForExecutableSingle(pFileName, pFullName, pszPathExt, pCh)) { - cmd_free(pszBuffer); + cmd_free(pszPath); + cmd_free(pszPathExt); return TRUE; } pCh = _tcstok(NULL, _T(";")); } - cmd_free(pszBuffer); + cmd_free(pszPath); + cmd_free(pszPathExt); return FALSE; } diff --git a/reactos/base/shell/explorer-new/explorer.rc b/reactos/base/shell/explorer-new/explorer.rc index 0beca08259f..d18c40967fa 100644 --- a/reactos/base/shell/explorer-new/explorer.rc +++ b/reactos/base/shell/explorer-new/explorer.rc @@ -12,6 +12,7 @@ IDI_START ICON DISCARDABLE res/start.ico IDB_STARTMENU BITMAP DISCARDABLE res/logov.bmp #include "lang/bg-BG.rc" +#include "lang/cs-CZ.rc" #include "lang/de-DE.rc" #include "lang/en-US.rc" #include "lang/es-ES.rc" @@ -19,6 +20,7 @@ IDB_STARTMENU BITMAP DISCARDABLE res/logov.bmp #include "lang/it-IT.rc" #include "lang/ko-KR.rc" #include "lang/lt-LT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/base/shell/explorer-new/lang/cs-CZ.rc b/reactos/base/shell/explorer-new/lang/cs-CZ.rc new file mode 100644 index 00000000000..3244e159761 --- /dev/null +++ b/reactos/base/shell/explorer-new/lang/cs-CZ.rc @@ -0,0 +1,64 @@ +/* FILE: shell/explorer-new/lang/cs-CZ.rc + * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) + * UPDATED: 2008-07-27 + */ + +LANGUAGE LANG_CZECH, SUBLANG_DEFAULT + +IDM_TRAYWND MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Uzamknout hlavnн panel", ID_LOCKTASKBAR + MENUITEM "Vl&astnosti", ID_SHELL_CMD_PROPERTIES + END +END + +IDM_STARTMENU MENUEX DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "", -1, MFT_SEPARATOR + POPUP "&Programy", IDM_PROGRAMS + BEGIN + MENUITEM "(Prбzdnй)", -1, MFT_STRING, MFS_GRAYED + END + POPUP "&Oblнbenй", IDM_FAVORITES + BEGIN + MENUITEM "(Prбzdnй)", -1, MFT_STRING, MFS_GRAYED + END + POPUP "&Dokumenty", IDM_DOCUMENTS + BEGIN + MENUITEM "(Prбzdnй)", -1, MFT_STRING, MFS_GRAYED + END + POPUP "&Nastavenн", IDM_SETTINGS + BEGIN + MENUITEM "&Ovlбdacн panely", IDM_CONTROLPANEL, MFT_STRING, MFS_GRAYED + MENUITEM "", -1, MFT_SEPARATOR + MENUITEM "&Zabezpeиenн...", IDM_SECURITY, MFT_STRING, MFS_ENABLED + MENUITEM "&Sнќovб pшipojenн", IDM_NETWORKCONNECTIONS, MFT_STRING, MFS_ENABLED + MENUITEM "&Tiskбrny a faxy", IDM_PRINTERSANDFAXES, MFT_STRING, MFS_ENABLED + MENUITEM "&Hlavnн panel a nabнdka Start", IDM_TASKBARANDSTARTMENU, MFT_STRING, MFS_ENABLED + END + POPUP "&Hledat", IDM_SEARCH + BEGIN + MENUITEM "", -1, MFT_SEPARATOR + END + MENUITEM "Nбpovмd&a a odbornб pomoc", IDM_HELPANDSUPPORT, MFT_STRING, MFS_ENABLED + MENUITEM "&Spustit...", IDM_RUN, MFT_STRING, MFS_ENABLED + MENUITEM "", 450, MFT_SEPARATOR, MFS_ENABLED + MENUITEM "S&ynchronizovat", IDM_SYNCHRONIZE, MFT_STRING, MFS_ENABLED + MENUITEM "Odh&lбsit %s...", IDM_LOGOFF, MFT_STRING, MFS_ENABLED + MENUITEM "Odpoj&it...", IDM_DISCONNECT, MFT_STRING, MFS_ENABLED + MENUITEM "Odpo&jit poинtaи z doku", IDM_UNDOCKCOMPUTER, MFT_STRING, MFS_ENABLED + MENUITEM "&Vypnout...", IDM_SHUTDOWN, MFT_STRING, MFS_ENABLED + END +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_START "Start" + IDS_PROPERTIES "Vl&astnosti" + IDS_OPEN_ALL_USERS "Ote&vшнt sloћku All Users" + IDS_EXPLORE_ALL_USERS "Pro&chбzet sloћku All Users" +END diff --git a/reactos/base/shell/explorer-new/lang/no-NO.rc b/reactos/base/shell/explorer-new/lang/no-NO.rc new file mode 100644 index 00000000000..fc835755520 --- /dev/null +++ b/reactos/base/shell/explorer-new/lang/no-NO.rc @@ -0,0 +1,59 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDM_TRAYWND MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Lеs oppgavelinjen", ID_LOCKTASKBAR + MENUITEM "E&genskaper", ID_SHELL_CMD_PROPERTIES + END +END + +IDM_STARTMENU MENUEX DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "", -1, MFT_SEPARATOR + POPUP "&Programmer", IDM_PROGRAMS + BEGIN + MENUITEM "(Tom)", -1, MFT_STRING, MFS_GRAYED + END + POPUP "F&avoritter", IDM_FAVORITES + BEGIN + MENUITEM "(Tom)", -1, MFT_STRING, MFS_GRAYED + END + POPUP "&Dokumenter", IDM_DOCUMENTS + BEGIN + MENUITEM "(Tom)", -1, MFT_STRING, MFS_GRAYED + END + POPUP "&Innstillinger", IDM_SETTINGS + BEGIN + MENUITEM "&Kontrollpanel", IDM_CONTROLPANEL, MFT_STRING, MFS_GRAYED + MENUITEM "", -1, MFT_SEPARATOR + MENUITEM "&Sikkerhet...", IDM_SECURITY, MFT_STRING, MFS_ENABLED + MENUITEM "&Nettverk tilkoblinger", IDM_NETWORKCONNECTIONS, MFT_STRING, MFS_ENABLED + MENUITEM "&Printere og Fakser", IDM_PRINTERSANDFAXES, MFT_STRING, MFS_ENABLED + MENUITEM "&Oppgavelinje og Start meny", IDM_TASKBARANDSTARTMENU, MFT_STRING, MFS_ENABLED + END + POPUP "Sш&k", IDM_SEARCH + BEGIN + MENUITEM "", -1, MFT_SEPARATOR + END + MENUITEM "&Hjelp og Stшtte", IDM_HELPANDSUPPORT, MFT_STRING, MFS_ENABLED + MENUITEM "&Kjшr...", IDM_RUN, MFT_STRING, MFS_ENABLED + MENUITEM "", 450, MFT_SEPARATOR, MFS_ENABLED + MENUITEM "S&ynkroniser", IDM_SYNCHRONIZE, MFT_STRING, MFS_ENABLED + MENUITEM "&Logg av %s...", IDM_LOGOFF, MFT_STRING, MFS_ENABLED + MENUITEM "K&oble fra...", IDM_DISCONNECT, MFT_STRING, MFS_ENABLED + MENUITEM "Lеs datamaskin&en", IDM_UNDOCKCOMPUTER, MFT_STRING, MFS_ENABLED + MENUITEM "Sl&е av...", IDM_SHUTDOWN, MFT_STRING, MFS_ENABLED + END +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_START "Start" + IDS_PROPERTIES "E&genskaper" + IDS_OPEN_ALL_USERS "Е&pne alle brukere" + IDS_EXPLORE_ALL_USERS "U&tforsk alle brukere" +END diff --git a/reactos/base/shell/explorer-new/lang/ru-RU.rc b/reactos/base/shell/explorer-new/lang/ru-RU.rc index 0240a6f5c10..ec874784b2e 100644 --- a/reactos/base/shell/explorer-new/lang/ru-RU.rc +++ b/reactos/base/shell/explorer-new/lang/ru-RU.rc @@ -18,15 +18,15 @@ BEGIN MENUITEM "", -1, MFT_SEPARATOR POPUP "&Программы", IDM_PROGRAMS BEGIN - MENUITEM "(Пусто)", -1, MFT_STRING, MFS_GRAYED + MENUITEM "(пусто)", -1, MFT_STRING, MFS_GRAYED END POPUP "&Избранное", IDM_FAVORITES BEGIN - MENUITEM "(Пусто)", -1, MFT_STRING, MFS_GRAYED + MENUITEM "(пусто)", -1, MFT_STRING, MFS_GRAYED END POPUP "&Документы", IDM_DOCUMENTS BEGIN - MENUITEM "(Пусто)", -1, MFT_STRING, MFS_GRAYED + MENUITEM "(пусто)", -1, MFT_STRING, MFS_GRAYED END POPUP "&Настройки", IDM_SETTINGS BEGIN diff --git a/reactos/base/shell/explorer/explorer-cz.rc b/reactos/base/shell/explorer/explorer-cz.rc index b9fec5c7c22..033137dd671 100644 --- a/reactos/base/shell/explorer/explorer-cz.rc +++ b/reactos/base/shell/explorer/explorer-cz.rc @@ -330,7 +330,7 @@ BEGIN IDS_START "Start" IDS_LOGOFF "Odhlбsit se..." IDS_SHUTDOWN "Vypnout..." - IDS_RESTART "Restart..." + IDS_RESTART "Restartovat..." IDS_LAUNCH "Spustit..." IDS_START_HELP "Pomoc" IDS_SEARCH_FILES "Hledat" @@ -381,8 +381,8 @@ BEGIN IDS_DESKTOPBAR_SETTINGS "Nastavenн plochy" IDS_DESKTOP "Plocha" IDS_TASKBAR "Panel ъloh" - IDS_NAMECOLUMN "Name" - IDS_PATHCOLUMN "Path" + IDS_NAMECOLUMN "Nбzev" + IDS_PATHCOLUMN "Cesta" IDS_MENUCOLUMN "Menu path" END diff --git a/reactos/base/shell/explorer/explorer-ru.rc b/reactos/base/shell/explorer/explorer-ru.rc index 78db734b84f..f658bb3bcd4 100644 --- a/reactos/base/shell/explorer/explorer-ru.rc +++ b/reactos/base/shell/explorer/explorer-ru.rc @@ -57,13 +57,13 @@ BEGIN END POPUP "&Инструменты" BEGIN - MENUITEM "&Настройка", ID_TOOLS_OPTIONS + MENUITEM "&Параметры", ID_TOOLS_OPTIONS END POPUP "По&мощь" BEGIN MENUITEM "&Частые вопросы по Проводнику...", ID_EXPLORER_FAQ - MENUITEM "О &Проводнике", ID_ABOUT_EXPLORER - MENUITEM "О &ReactOS", ID_ABOUT_WINDOWS + MENUITEM "О &программе...", ID_ABOUT_EXPLORER + MENUITEM "О &ReactOS...", ID_ABOUT_WINDOWS END END @@ -71,10 +71,10 @@ IDM_DESKTOPBAR MENU DISCARDABLE BEGIN POPUP "" BEGIN - MENUITEM "&Настройки...", ID_DESKTOPBAR_SETTINGS + MENUITEM "&Параметры...", ID_DESKTOPBAR_SETTINGS MENUITEM "&Диспетчер задач", ID_TASKMGR MENUITEM SEPARATOR - MENUITEM "&О Проводнике", ID_ABOUT_EXPLORER + MENUITEM "&О программе...", ID_ABOUT_EXPLORER END END @@ -96,7 +96,7 @@ BEGIN MENUITEM "&Настройка уведомлений...", ID_CONFIG_NOTIFYAREA MENUITEM "Настройка даты/&времени", ID_CONFIG_TIME MENUITEM SEPARATOR - MENUITEM "&О Проводнике", ID_ABOUT_EXPLORER + MENUITEM "&О программе...", ID_ABOUT_EXPLORER END END @@ -120,13 +120,13 @@ BEGIN END POPUP "&Инструменты" BEGIN - MENUITEM "&Опции", ID_TOOLS_OPTIONS + MENUITEM "&Параметры", ID_TOOLS_OPTIONS END POPUP "&Справка" BEGIN MENUITEM "&Частые вопросы по Проводнику...", ID_EXPLORER_FAQ - MENUITEM "О &Проводнике", ID_ABOUT_EXPLORER - MENUITEM "О &ReactOS", ID_ABOUT_WINDOWS + MENUITEM "О &Проводнике...", ID_ABOUT_EXPLORER + MENUITEM "О &ReactOS...", ID_ABOUT_WINDOWS END END @@ -169,7 +169,7 @@ END IDD_DESKBAR_DESKTOP DIALOGEX DISCARDABLE 0, 0, 212, 194 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Свойства Рабочего стола" +CAPTION "Свойства: Рабочий стол" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Выберите, наиболее предпочтительный для вас, \nспособ выравнивания значков", @@ -339,7 +339,7 @@ BEGIN IDS_PROGRAMS "Программы" IDS_SETTINGS "Настройка" IDS_EXPLORE "Обзор" - IDS_EMPTY "(Пусто)" + IDS_EMPTY "(пусто)" IDS_RECENT "Недавние документы" IDS_ADMIN "Администрирование" END diff --git a/reactos/base/shell/explorer/taskbar/desktopbar.cpp b/reactos/base/shell/explorer/taskbar/desktopbar.cpp index cf31ab61f3e..6b1b8418580 100644 --- a/reactos/base/shell/explorer/taskbar/desktopbar.cpp +++ b/reactos/base/shell/explorer/taskbar/desktopbar.cpp @@ -405,11 +405,11 @@ int DesktopBar::Command(int id, int code) break; case ID_ABOUT_EXPLORER: - explorer_about(_hwnd); + explorer_about(g_Globals._hwndDesktop); break; case ID_DESKTOPBAR_SETTINGS: - ExplorerPropertySheet(_hwnd); + ExplorerPropertySheet(g_Globals._hwndDesktop); break; case ID_MINIMIZE_ALL: diff --git a/reactos/base/shell/explorer/utility/utility.cpp b/reactos/base/shell/explorer/utility/utility.cpp index fdb74c2738d..bc928bed1e3 100644 --- a/reactos/base/shell/explorer/utility/utility.cpp +++ b/reactos/base/shell/explorer/utility/utility.cpp @@ -382,10 +382,12 @@ BOOL RunDLL(HWND hwnd, LPCTSTR dllname, LPCSTR procname, LPCTSTR cmdline, UINT n BOOL launch_cpanel(HWND hwnd, LPCTSTR applet) { - //launch_file(_hwnd, applet, SW_SHOWNORMAL); // This would be enough, but we want the to use the most direct and fastest call. - //launch_file(_hwnd, String(TEXT("rundll32.exe /d shell32.dll,Control_RunDLL "))+applet, SW_SHOWNORMAL); + TCHAR parameters[MAX_PATH]; + + _tcscpy(parameters, TEXT("shell32.dll,Control_RunDLL ")); + _tcscat(parameters, applet); - return RunDLL(hwnd, TEXT("shell32"), CONTROL_RUNDLL, applet, SW_SHOWNORMAL); + return ((int)ShellExecute(hwnd, TEXT("open"), TEXT("rundll32.exe"), parameters, NULL, SW_SHOWDEFAULT) > 32); } diff --git a/reactos/base/system/autochk/autochk.c b/reactos/base/system/autochk/autochk.c index 8fa15d403df..c4b62e6294a 100644 --- a/reactos/base/system/autochk/autochk.c +++ b/reactos/base/system/autochk/autochk.c @@ -16,7 +16,7 @@ #include #include -//#define NDEBUG +#define NDEBUG #include /* DEFINES ******************************************************************/ @@ -277,6 +277,7 @@ CheckVolume( ANSI_STRING ChkdskFunctionName = RTL_CONSTANT_STRING("ChkdskEx"); PVOID Provider; CHKDSKEX ChkdskFunc; + WCHAR NtDrivePath[64]; UNICODE_STRING DrivePathU; NTSTATUS Status; @@ -315,7 +316,11 @@ CheckVolume( /* Call provider */ //PrintString(" Verifying volume %S\n", DrivePath); - RtlInitUnicodeString(&DrivePathU, DrivePath); + swprintf(NtDrivePath, L"\\??\\"); + wcscat(NtDrivePath, DrivePath); + NtDrivePath[wcslen(NtDrivePath)-1] = 0; + RtlInitUnicodeString(&DrivePathU, NtDrivePath); + Status = ChkdskFunc(&DrivePathU, TRUE, // FixErrors TRUE, // Verbose diff --git a/reactos/base/system/expand/lang/nb-NO.rc b/reactos/base/system/expand/lang/no-NO.rc similarity index 100% rename from reactos/base/system/expand/lang/nb-NO.rc rename to reactos/base/system/expand/lang/no-NO.rc diff --git a/reactos/base/system/expand/lang/ru-RU.rc b/reactos/base/system/expand/lang/ru-RU.rc index 25a4ce12f2f..723d14a8ea1 100644 --- a/reactos/base/system/expand/lang/ru-RU.rc +++ b/reactos/base/system/expand/lang/ru-RU.rc @@ -5,7 +5,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_Copy, "Утилита распаковки файлов ReactOS, версия 1.0\n\ -Copyright Victor Schneider 1997\n\n\ +Авторские права (с) Виктор Шнейдер 1997\n\n\ Использование: %s исходный_файл [выходной_файл]\n" IDS_FAILS "Не удалось выполнить LZCopy, возвращено: %ld\n" diff --git a/reactos/base/system/expand/rsrc.rc b/reactos/base/system/expand/rsrc.rc index 7ef591bbd43..45e22c26596 100644 --- a/reactos/base/system/expand/rsrc.rc +++ b/reactos/base/system/expand/rsrc.rc @@ -15,7 +15,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" #include "lang/ru-RU.rc" diff --git a/reactos/base/system/format/lang/nb-NO.rc b/reactos/base/system/format/lang/no-NO.rc similarity index 100% rename from reactos/base/system/format/lang/nb-NO.rc rename to reactos/base/system/format/lang/no-NO.rc diff --git a/reactos/base/system/format/lang/sk-SK.rc b/reactos/base/system/format/lang/sk-SK.rc index 9d5f75561ba..bc6a926fd44 100644 --- a/reactos/base/system/format/lang/sk-SK.rc +++ b/reactos/base/system/format/lang/sk-SK.rc @@ -1,5 +1,6 @@ -/* TRANSLATOR: Mбrio Kaиmбr /Mario Kacmar/ aka Kario (kario@szm.sk) - * DATE OF TR: 15-02-2008 +/* TRANSLATOR : M rio Kaџm r /Mario Kacmar/ aka Kario (kario@szm.sk) + * DATE OF TR.: 07-08-2008 + * LAST CHANGE: 08-08-2008 */ #include "resource.h" @@ -7,13 +8,13 @@ LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT STRINGTABLE DISCARDABLE BEGIN -/* menovka zvдzku = volume label, drive = jednotka */ -STRING_HELP, "Pouћitie: %S jednotka: [-FS:systйm sъborov] [-V:menovka] [-Q] [-A:veѕkosќ] [-C]\n\n\ - [jednotka:] Specifies the drive to format.\n\ - -FS:systйm sъborov Specifies the type of file system (%s).\n\ - -V:menovka Specifies volume label.\n\ - -Q Performs a quick format.\n\ - -A:veѕkosќ Overrides the default allocation unit size. Default settings\n\ +/* menovka zv„zku = volume label, drive = jednotka */ +STRING_HELP, "Pou§itie: %S jednotka: [-FS:syst‚m sЈborov] [-V:menovka] [-Q] [-A:ve–kosњ] [-C]\n\n\ + [jednotka:] Urџuje jednotku k naform tovaniu.\n\ + -FS:syst‚m sЈborov Urџuje typ sЈborov‚ho syst‚mu (%s).\n\ + -V:menovka Urџuje menovku zv„zku.\n\ + -Q Vykon va rмchle form tovanie.\n\ + -A:ve–kosњ Overrides the default allocation unit size. Default settings\n\ are strongly recommended for general use\n\ NTFS supports 512, 1024, 2048, 4096, 8192, 16K, 32K, 64K.\n\ FAT supports 8192, 16K, 32K, 64K, 128K, 256K.\n\ @@ -22,31 +23,31 @@ STRING_HELP, "Pou -C Files created on the new volume will be compressed by\n\ default.\n\n" -STRING_COMPLETE "Dokonиenй na %lu percent.\r" +STRING_COMPLETE "Dokonџen‚ na %lu percent.\r" -STRING_FORMAT_FAIL "FormatEx was unable to complete successfully.\n\n" +STRING_FORMAT_FAIL "FormatEx nebol schopnм Јspeзne skonџiњ.\n\n" -STRING_NO_SUPPORT "Operбcia nie je podporovanб" +STRING_NO_SUPPORT "Oper cia nie je podporovan " STRING_FMIFS_FAIL "Could not located FMIFS entry points.\n\n" -STRING_UNKNOW_ARG "Neznбmy argument: %S\n" +STRING_UNKNOW_ARG "Nezn my argument: %S\n" -STRING_DRIVE_PARM "Chэba nevyhnutnэ parameter jednotky.\n\n" +STRING_DRIVE_PARM "Chмba nevyhnutnм parameter jednotky.\n\n" STRING_ERROR_DRIVE_TYPE "Could not get drive type" -STRING_INSERT_DISK "Vloћte novъ disketu do jednotky %C:\na potom stlaиte ENTER..." +STRING_INSERT_DISK "Vlo§te novЈ disketu do jednotky %C:\na potom stlaџte ENTER..." STRING_NO_VOLUME "Could not query volume" STRING_NO_VOLUME_SIZE "Could not query volume size" -STRING_FILESYSTEM "Typ systйmu sъborov je %S.\n" +STRING_FILESYSTEM "Typ syst‚mu sЈborov je %S.\n" -STRING_LABEL_NAME_EDIT "Vloћte sъиasnъ menovku zvдzku pre jednotku %C: " +STRING_LABEL_NAME_EDIT "Vlo§te sЈџasnЈ menovku zv„zku pre jednotku %C: " -STRING_ERROR_LABEL "Bola zadanб nesprбvna menovka zvдzku pre tъto jednotku.\n" +STRING_ERROR_LABEL "Bola zadan  nespr vna menovka zv„zku pre tЈto jednotku.\n" STRING_YN_FORMAT "\nWARNING, ALL DATA ON NON_REMOVABLE DISK\n\ DRIVE %C: WILL BE LOST!\nProceed with Format (A/N)? " @@ -55,19 +56,19 @@ STRING_YES_NO_FAQ "AN" STRING_VERIFYING "Overovanie" -STRING_FAST_FMT "Rэchle formбtovanie" +STRING_FAST_FMT "Rмchle form tovanie" -STRING_CREATE_FSYS "Vytvбram љtruktъru sъborovйho systйmu.\n" +STRING_CREATE_FSYS "Vytv ram зtruktЈru sЈborov‚ho syst‚mu.\n" -STRING_FMT_COMPLETE "Formбtovanie dokonиenй.\n" +STRING_FMT_COMPLETE "Form tovanie dokonџen‚.\n" -STRING_VOL_COMPRESS "Zvдzok nepodporuje kompresiu.\n" +STRING_VOL_COMPRESS "Zv„zok nepodporuje kompresiu.\n" -STRING_ENTER_LABEL "Menovka zvдzku (11 znakov, ak nechcete zadaќ tak iba Enter)? " +STRING_ENTER_LABEL "Menovka zv„zku (11 znakov, ak nechcete zadaњ, stlaџte ENTER)? " -STRING_NO_LABEL "Zvдzok sa nedб pomenovaќ" +STRING_NO_LABEL "Zv„zok sa ned  pomenovaњ" -STRING_FREE_SPACE "\nCelkovй diskovй miesto: %I64d bajtov.\nDostupnй miesto na disku: %I64d bajtov.\n" +STRING_FREE_SPACE "\nCelkov‚ diskov‚ miesto: %I64d bajtov.\nDostupn‚ miesto na disku: %I64d bajtov.\n" -STRING_SERIAL_NUMBER "\nSйriovй инslo zvдzku je %04X-%04X\n" +STRING_SERIAL_NUMBER "\nS‚riov‚ џЎslo zv„zku je %04X-%04X\n" END diff --git a/reactos/base/system/format/rsrc.rc b/reactos/base/system/format/rsrc.rc index c74d980c54b..61d06ce3d8d 100644 --- a/reactos/base/system/format/rsrc.rc +++ b/reactos/base/system/format/rsrc.rc @@ -13,7 +13,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/base/system/regsvr32/lang/fr-FR.rc b/reactos/base/system/regsvr32/lang/fr-FR.rc index c75e69c42cf..c0f38daab3c 100644 --- a/reactos/base/system/regsvr32/lang/fr-FR.rc +++ b/reactos/base/system/regsvr32/lang/fr-FR.rc @@ -12,13 +12,13 @@ STRINGTABLE DISCARDABLE BEGIN IDS_UsageMessage, "%s\n\nUtilisation : regsvr32 [/u] [/s] [/c] [/n] [/i[:lignedecommande]] nomDLL\n\ -/u - Serveur non enregistrй\n\ +/u - Dйsenregistrement du serveur\n\ /s - Silence; ne pas afficher les messages\n\ /c - Sortie sur la console\n\ /i - Installe la DLL avec des options dans la [:lignedecommande] ; si /u est prйsent, cela provoque la dйsinstallation de la DLL\n\ -/n - Ne pas faire d'appel au serveur d'enregistrement ; cette option doit кtre utilisй avec l'option /i" +/n - Ne pas faire d'appel au serveur d'enregistrement ; cette option doit кtre utilisйe avec l'option /i" -IDS_NoDllSpecified, "Pas de DLL indiquй." +IDS_NoDllSpecified, "Aucune indication de nom de DLL." IDS_InvalidFlag, "Option non reconnue : %s" diff --git a/reactos/base/system/regsvr32/lang/nb-NO.rc b/reactos/base/system/regsvr32/lang/no-NO.rc similarity index 100% rename from reactos/base/system/regsvr32/lang/nb-NO.rc rename to reactos/base/system/regsvr32/lang/no-NO.rc diff --git a/reactos/base/system/regsvr32/rsrc.rc b/reactos/base/system/regsvr32/rsrc.rc index 430087b1247..40f5a83dd89 100644 --- a/reactos/base/system/regsvr32/rsrc.rc +++ b/reactos/base/system/regsvr32/rsrc.rc @@ -13,7 +13,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" #include "lang/ru-RU.rc" diff --git a/reactos/base/system/rundll32/lang/nb-NO.rc b/reactos/base/system/rundll32/lang/no-NO.rc similarity index 100% rename from reactos/base/system/rundll32/lang/nb-NO.rc rename to reactos/base/system/rundll32/lang/no-NO.rc diff --git a/reactos/base/system/rundll32/rsrc.rc b/reactos/base/system/rundll32/rsrc.rc index 852c5db861d..d3eed5e4f77 100644 --- a/reactos/base/system/rundll32/rsrc.rc +++ b/reactos/base/system/rundll32/rsrc.rc @@ -14,7 +14,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" diff --git a/reactos/base/system/smss/smapiexec.c b/reactos/base/system/smss/smapiexec.c index 87d7089f7d8..77f08871d2f 100644 --- a/reactos/base/system/smss/smapiexec.c +++ b/reactos/base/system/smss/smapiexec.c @@ -265,6 +265,8 @@ SMAPI(SmExecPgm) DPRINT1("SM: %s: SmCreateClient failed (Status=0x%08lx)\n", __FUNCTION__, Status); } + NtClose(ProcessInfo.ThreadHandle); + NtClose(ProcessInfo.ProcessHandle); } } else diff --git a/reactos/base/system/userinit/lang/nb-NO.rc b/reactos/base/system/userinit/lang/no-NO.rc similarity index 100% rename from reactos/base/system/userinit/lang/nb-NO.rc rename to reactos/base/system/userinit/lang/no-NO.rc diff --git a/reactos/base/system/userinit/rsrc.rc b/reactos/base/system/userinit/rsrc.rc index 1ea1b86e5ed..f6682401068 100644 --- a/reactos/base/system/userinit/rsrc.rc +++ b/reactos/base/system/userinit/rsrc.rc @@ -16,7 +16,7 @@ LANGUAGE LANG_NEUTRAL,SUBLANG_NEUTRAL #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" #include "lang/ru-RU.rc" diff --git a/reactos/base/system/userinit/userinit.c b/reactos/base/system/userinit/userinit.c index d339ee3cbde..6b81fe38bfa 100644 --- a/reactos/base/system/userinit/userinit.c +++ b/reactos/base/system/userinit/userinit.c @@ -263,7 +263,6 @@ TryToStartShell( StartAutoApplications(CSIDL_STARTUP); StartAutoApplications(CSIDL_COMMON_STARTUP); - WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); return TRUE; diff --git a/reactos/base/system/winlogon/lang/nb-NO.rc b/reactos/base/system/winlogon/lang/no-NO.rc similarity index 100% rename from reactos/base/system/winlogon/lang/nb-NO.rc rename to reactos/base/system/winlogon/lang/no-NO.rc diff --git a/reactos/base/system/winlogon/rsrc.rc b/reactos/base/system/winlogon/rsrc.rc index 5b9f3b32e92..858b73c8ced 100644 --- a/reactos/base/system/winlogon/rsrc.rc +++ b/reactos/base/system/winlogon/rsrc.rc @@ -17,7 +17,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" diff --git a/reactos/baseaddress.rbuild b/reactos/baseaddress.rbuild index 4e67dbcfe9b..45bb2d5addd 100644 --- a/reactos/baseaddress.rbuild +++ b/reactos/baseaddress.rbuild @@ -73,6 +73,7 @@ + @@ -184,6 +185,7 @@ + diff --git a/reactos/boot/bootdata/hivecls_arm.inf b/reactos/boot/bootdata/hivecls_arm.inf index b15f6def132..8167b2d011f 100644 --- a/reactos/boot/bootdata/hivecls_arm.inf +++ b/reactos/boot/bootdata/hivecls_arm.inf @@ -185,6 +185,7 @@ HKCR,"lnkfile","IsShortcut",0x00000000,"yes" HKCR,"lnkfile\CLSID","",0x00000000,"{00021401-0000-0000-C000-000000000046}" HKCR,"lnkfile\shellex\IconHandler","",0x00000000,"{00021401-0000-0000-C000-000000000046}" HKCR,"lnkfile\shellex\ContextMenuHandlers\{00021401-0000-0000-C000-000000000046}","",0x00000000,"" +HKCR,"lnkfile\shellex\PropertySheetHandlers\Shellink Property Page", "", 0x00000000, "{00021401-0000-0000-C000-000000000046}" ; Text Documents HKCR,".log","",0x00000000,"txtfile" diff --git a/reactos/boot/bootdata/hivecls_i386.inf b/reactos/boot/bootdata/hivecls_i386.inf index b15f6def132..8167b2d011f 100644 --- a/reactos/boot/bootdata/hivecls_i386.inf +++ b/reactos/boot/bootdata/hivecls_i386.inf @@ -185,6 +185,7 @@ HKCR,"lnkfile","IsShortcut",0x00000000,"yes" HKCR,"lnkfile\CLSID","",0x00000000,"{00021401-0000-0000-C000-000000000046}" HKCR,"lnkfile\shellex\IconHandler","",0x00000000,"{00021401-0000-0000-C000-000000000046}" HKCR,"lnkfile\shellex\ContextMenuHandlers\{00021401-0000-0000-C000-000000000046}","",0x00000000,"" +HKCR,"lnkfile\shellex\PropertySheetHandlers\Shellink Property Page", "", 0x00000000, "{00021401-0000-0000-C000-000000000046}" ; Text Documents HKCR,".log","",0x00000000,"txtfile" diff --git a/reactos/boot/bootdata/hivesft_arm.inf b/reactos/boot/bootdata/hivesft_arm.inf index fea8b84e020..94fc6e4cef1 100644 --- a/reactos/boot/bootdata/hivesft_arm.inf +++ b/reactos/boot/bootdata/hivesft_arm.inf @@ -32,6 +32,8 @@ HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce",,0x00000012 HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons",,0x00000012 HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu",,0x00000012 HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu","{208D2C60-3AEA-1069-A2D7-08002B30309D}",0x00010001,0x00000000 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Bitbucket",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Bitbucket\Volume",,0x00000012 ; CMD Settings HKLM,"SOFTWARE\Microsoft\Command Processor","AutoRun",0x00020000,"" diff --git a/reactos/boot/bootdata/hivesft_i386.inf b/reactos/boot/bootdata/hivesft_i386.inf index fea8b84e020..550eec22d37 100644 --- a/reactos/boot/bootdata/hivesft_i386.inf +++ b/reactos/boot/bootdata/hivesft_i386.inf @@ -32,6 +32,8 @@ HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce",,0x00000012 HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons",,0x00000012 HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu",,0x00000012 HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu","{208D2C60-3AEA-1069-A2D7-08002B30309D}",0x00010001,0x00000000 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Bitbucket",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Bitbucket\Volume",,0x00000012 ; CMD Settings HKLM,"SOFTWARE\Microsoft\Command Processor","AutoRun",0x00020000,"" @@ -72,6 +74,7 @@ HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList",,0x00000012 ; Font substitutes ; SysFontSubstitutes are also returned by EnumFontFamilies, FontSubstitutes aren't +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts",,0x00000012 HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes",,0x00000012 ; Time zone settings diff --git a/reactos/boot/bootdata/packages/reactos.dff b/reactos/boot/bootdata/packages/reactos.dff index 74981749731..9d97b16a4ac 100644 --- a/reactos/boot/bootdata/packages/reactos.dff +++ b/reactos/boot/bootdata/packages/reactos.dff @@ -15,7 +15,7 @@ Signature = "$ReactOS$" [Directories] 1 = system32 2 = system32\drivers -3 = media\fonts +3 = Fonts 4 = 5 = system32\drivers\etc 6 = inf diff --git a/reactos/boot/bootdata/txtsetup.sif b/reactos/boot/bootdata/txtsetup.sif index f4c3c838e60..1c1bcf39602 100644 --- a/reactos/boot/bootdata/txtsetup.sif +++ b/reactos/boot/bootdata/txtsetup.sif @@ -8,7 +8,7 @@ Signature = "$ReactOS$" 3 = system32\config 4 = system32\drivers 5 = media -6 = media\fonts +6 = Fonts 7 = bin [SourceDisksFiles] @@ -32,8 +32,8 @@ ntfs.sys=,,,,,,,,,,,,4 pci.sys=,,,,,,,,,,,,4 scsiport.sys=,,,,,,x,,,,,,4 uniata.sys=,,,,,,,,,,,,4 -fastfat.sys=,,,,,,,,,,,,4 -ext2.sys=,,,,,,,,,,,,4 +fastfat.sys=,,,,,,x,,,,,,4 +ext2.sys=,,,,,,x,,,,,,4 [HardwareIdsDatabase] *PNP0C08 = acpi diff --git a/reactos/boot/freeldr/fdebug/fdebug.rc b/reactos/boot/freeldr/fdebug/fdebug.rc index 14fa23248d0..15f787de361 100644 --- a/reactos/boot/freeldr/fdebug/fdebug.rc +++ b/reactos/boot/freeldr/fdebug/fdebug.rc @@ -6,6 +6,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US IDI_FDEBUG ICON "fdebug.ico" #include "lang/bg-BG.rc" +#include "lang/cs-CZ.rc" #include "lang/de-DE.rc" #include "lang/el-GR.rc" #include "lang/en-US.rc" @@ -15,7 +16,7 @@ IDI_FDEBUG ICON "fdebug.ico" #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/ja-JP.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/boot/freeldr/fdebug/lang/cs-CZ.rc b/reactos/boot/freeldr/fdebug/lang/cs-CZ.rc new file mode 100644 index 00000000000..2f0e3b51b7d --- /dev/null +++ b/reactos/boot/freeldr/fdebug/lang/cs-CZ.rc @@ -0,0 +1,192 @@ +// FILE: boot/freeldr/fdebug/lang/cs-CZ.rc +// TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) +// UPDATED: 2008-07-27 + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_CZECH, SUBLANG_DEFAULT +#pragma code_page(1250) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +IDC_FDEBUG MENU DISCARDABLE +BEGIN + POPUP "&Soubor" + BEGIN + MENUITEM "&Pшipojit", IDM_FILE_CONNECT + MENUITEM "&Odpojit", IDM_FILE_DISCONNECT, GRAYED + MENUITEM SEPARATOR + MENUITEM "&Vymazat obrazovku", IDM_FILE_CLEARDISPLAY + MENUITEM SEPARATOR + MENUITEM "&Spustit zachytбvбnн", IDM_FILE_STARTCAPTURE + MENUITEM "&Zastavit zachytбvбnн", IDM_FILE_STOPCAPTURE, GRAYED + MENUITEM SEPARATOR + MENUITEM "&Mнsnн echo", IDM_FILE_LOCALECHO + MENUITEM SEPARATOR + MENUITEM "&Ukonиit", IDM_EXIT + END + POPUP "&Nбpovмda" + BEGIN + MENUITEM "&O programu...", IDM_ABOUT + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Accelerator +// + +IDC_FDEBUG ACCELERATORS MOVEABLE PURE +BEGIN + 63, IDM_ABOUT, ASCII, ALT // "?" + 47, IDM_ABOUT, ASCII, ALT // "/" +END + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""windows.h""\r\n" + "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""resource.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO DISCARDABLE +BEGIN + IDD_ABOUTBOX, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 252 + TOPMARGIN, 7 + BOTTOMMARGIN, 203 + END + + IDD_CONNECTION, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 189 + TOPMARGIN, 7 + BOTTOMMARGIN, 93 + END + + IDD_CAPTURE, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 244 + TOPMARGIN, 7 + BOTTOMMARGIN, 88 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_ABOUTBOX DIALOGEX DISCARDABLE 22, 17, 259, 210 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "O FreeLoader Debuggeru" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "FreeLoader Debugger v1.0\nCopyright (C) 2003\nby Brian Palmer (brianp@reactos.org)", + IDC_STATIC,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,53,28, + 122,26 + DEFPUSHBUTTON "OK",IDOK,183,189,44,14,WS_GROUP + ICON IDI_FDEBUG,IDC_STATIC,19,30,20,20 + EDITTEXT IDC_LICENSE_EDIT,53,63,174,107,ES_MULTILINE | + ES_READONLY | WS_VSCROLL +END + +IDD_CONNECTION DIALOGEX DISCARDABLE 0, 0, 196, 100 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Moћnosti pшipojenн" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Zadejte COM port (napш. COM1):",IDC_STATIC,7,7,108,8 + EDITTEXT IDC_COMPORT,7,17,182,14,ES_AUTOHSCROLL + LTEXT "Zadejte rychlost v baudech (napш. 115200):",IDC_STATIC,7,38,114, + 8 + EDITTEXT IDC_BAUTRATE,7,48,182,14,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",IDOK,45,79,50,14 + PUSHBUTTON "Storno",IDCANCEL,100,79,50,14 +END + +IDD_CAPTURE DIALOGEX DISCARDABLE 0, 0, 251, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Zachytбvacн soubor" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Nбzev zachytбvacнho souboru:",IDC_STATIC,7,17,62,8 + EDITTEXT IDC_CAPTUREFILENAME,7,26,181,14,ES_AUTOHSCROLL + PUSHBUTTON "&Prochбzet",IDC_BROWSE,194,26,50,14 + DEFPUSHBUTTON "OK",IDOK,139,74,50,14 + PUSHBUTTON "Storno",IDCANCEL,194,74,50,14 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + IDS_APP_TITLE "fdebug" + IDS_HELLO "Hello World!" + IDC_FDEBUG "FDEBUG" +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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA." +END + +#endif // Czech resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/reactos/boot/freeldr/fdebug/lang/nb-NO.rc b/reactos/boot/freeldr/fdebug/lang/no-NO.rc similarity index 100% rename from reactos/boot/freeldr/fdebug/lang/nb-NO.rc rename to reactos/boot/freeldr/fdebug/lang/no-NO.rc diff --git a/reactos/boot/freeldr/freeldr/arch/arm/loader.c b/reactos/boot/freeldr/freeldr/arch/arm/loader.c index 0287de5efe2..06bf7ca281b 100644 --- a/reactos/boot/freeldr/freeldr/arch/arm/loader.c +++ b/reactos/boot/freeldr/freeldr/arch/arm/loader.c @@ -1052,7 +1052,7 @@ ArmPrepareForReactOS(IN BOOLEAN Setup) // // Allocate the ARM Shared Heap // - ArmSharedHeap = MmAllocateMemory(PAGE_SIZE); + ArmSharedHeap = MmAllocateMemoryWithType(PAGE_SIZE, LoaderOsloaderHeap); ArmSharedHeapSize = 0; if (!ArmSharedHeap) return; diff --git a/reactos/boot/freeldr/freeldr/arch/i386/hwpci.c b/reactos/boot/freeldr/freeldr/arch/i386/hwpci.c index f8e609e32cf..b31e8975329 100644 --- a/reactos/boot/freeldr/freeldr/arch/i386/hwpci.c +++ b/reactos/boot/freeldr/freeldr/arch/i386/hwpci.c @@ -173,7 +173,7 @@ DetectPciIrqRoutingTable(PCONFIGURATION_COMPONENT_DATA BusKey) /* Set 'Configuration Data' value */ Size = FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST, PartialDescriptors) + 2 * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) + Table->Size; - PartialResourceList = MmAllocateMemory(Size); + PartialResourceList = MmHeapAlloc(Size); if (PartialResourceList == NULL) { DbgPrint((DPRINT_HWDETECT, @@ -203,7 +203,7 @@ DetectPciIrqRoutingTable(PCONFIGURATION_COMPONENT_DATA BusKey) /* Set 'Configuration Data' value */ FldrSetConfigurationData(TableKey, PartialResourceList, Size); - MmFreeMemory(PartialResourceList); + MmHeapFree(PartialResourceList); } } @@ -246,7 +246,7 @@ DetectPciBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) /* Set 'Configuration Data' value */ Size = FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST, PartialDescriptors); - PartialResourceList = MmAllocateMemory(Size); + PartialResourceList = MmHeapAlloc(Size); if (PartialResourceList == NULL) { DbgPrint((DPRINT_HWDETECT, @@ -259,7 +259,7 @@ DetectPciBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) /* Set 'Configuration Data' value */ FldrSetConfigurationData(BiosKey, PartialResourceList, Size); - MmFreeMemory(PartialResourceList); + MmHeapFree(PartialResourceList); DetectPciIrqRoutingTable(BiosKey); @@ -288,7 +288,7 @@ DetectPciBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) PartialDescriptors) + sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) + sizeof(PCI_REGISTRY_INFO); - PartialResourceList = MmAllocateMemory(Size); + PartialResourceList = MmHeapAlloc(Size); if (!PartialResourceList) { DbgPrint((DPRINT_HWDETECT, @@ -311,14 +311,14 @@ DetectPciBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) /* Set 'Configuration Data' value */ FldrSetConfigurationData(BusKey, PartialResourceList, Size); - MmFreeMemory(PartialResourceList); + MmHeapFree(PartialResourceList); } else { /* Set 'Configuration Data' value */ Size = FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST, PartialDescriptors); - PartialResourceList = MmAllocateMemory(Size); + PartialResourceList = MmHeapAlloc(Size); if (!PartialResourceList) { DbgPrint((DPRINT_HWDETECT, @@ -331,7 +331,7 @@ DetectPciBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) /* Set 'Configuration Data' value */ FldrSetConfigurationData(BusKey, PartialResourceList, Size); - MmFreeMemory(PartialResourceList); + MmHeapFree(PartialResourceList); } /* Increment bus number */ diff --git a/reactos/boot/freeldr/freeldr/arch/i386/xboxhw.c b/reactos/boot/freeldr/freeldr/arch/i386/xboxhw.c index 0708aea1fb8..c4dc6d5057e 100644 --- a/reactos/boot/freeldr/freeldr/arch/i386/xboxhw.c +++ b/reactos/boot/freeldr/freeldr/arch/i386/xboxhw.c @@ -42,7 +42,7 @@ SetHarddiskConfigurationData(PCONFIGURATION_COMPONENT_DATA DiskKey, /* Set 'Configuration Data' value */ Size = sizeof(CM_PARTIAL_RESOURCE_LIST) + sizeof(CM_DISK_GEOMETRY_DEVICE_DATA); - PartialResourceList = MmAllocateMemory(Size); + PartialResourceList = MmHeapAlloc(Size); if (PartialResourceList == NULL) { DbgPrint((DPRINT_HWDETECT, @@ -77,7 +77,7 @@ SetHarddiskConfigurationData(PCONFIGURATION_COMPONENT_DATA DiskKey, else { DbgPrint((DPRINT_HWDETECT, "Reading disk geometry failed\n")); - MmFreeMemory(PartialResourceList); + MmHeapFree(PartialResourceList); return; } DbgPrint((DPRINT_HWDETECT, @@ -89,7 +89,7 @@ SetHarddiskConfigurationData(PCONFIGURATION_COMPONENT_DATA DiskKey, DiskGeometry->BytesPerSector)); FldrSetConfigurationData(DiskKey, PartialResourceList, Size); - MmFreeMemory(PartialResourceList); + MmHeapFree(PartialResourceList); } @@ -225,7 +225,7 @@ DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA SystemKey, /* Allocate resource descriptor */ Size = sizeof(CM_PARTIAL_RESOURCE_LIST) + sizeof(CM_INT13_DRIVE_PARAMETER) * DiskCount; - PartialResourceList = MmAllocateMemory(Size); + PartialResourceList = MmHeapAlloc(Size); if (PartialResourceList == NULL) { DbgPrint((DPRINT_HWDETECT, @@ -268,7 +268,7 @@ DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA SystemKey, /* Set 'Configuration Data' value */ FldrSetConfigurationData(SystemKey, PartialResourceList, Size); - MmFreeMemory(PartialResourceList); + MmHeapFree(PartialResourceList); /* Create and fill subkey for each harddisk */ for (i = 0; i < DiskCount; i++) @@ -323,7 +323,7 @@ DetectIsaBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) /* Set 'Configuration Data' value */ Size = sizeof(CM_PARTIAL_RESOURCE_LIST) - sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR); - PartialResourceList = MmAllocateMemory(Size); + PartialResourceList = MmHeapAlloc(Size); if (PartialResourceList == NULL) { DbgPrint((DPRINT_HWDETECT, @@ -339,7 +339,7 @@ DetectIsaBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) /* Set 'Configuration Data' value */ FldrSetConfigurationData(BusKey, PartialResourceList, Size); - MmFreeMemory(PartialResourceList); + MmHeapFree(PartialResourceList); /* Detect ISA/BIOS devices */ diff --git a/reactos/boot/freeldr/freeldr/arch/powerpc/mboot.c b/reactos/boot/freeldr/freeldr/arch/powerpc/mboot.c index 7e1ccd2f13a..feef98a59d3 100644 --- a/reactos/boot/freeldr/freeldr/arch/powerpc/mboot.c +++ b/reactos/boot/freeldr/freeldr/arch/powerpc/mboot.c @@ -459,7 +459,7 @@ FrLdrMapModule(FILE *KernelImage, PCHAR ImageName, PCHAR MemLoadAddr, ULONG Kern phnum = ehdr.e_phnum; shsize = ehdr.e_shentsize; shnum = ehdr.e_shnum; - sptr = (PCHAR)MmAllocateMemory(shnum * shsize); + sptr = (PCHAR)MmHeapAlloc(shnum * shsize); /* Read section headers */ FsSetFilePointer(KernelImage, ehdr.e_shoff); @@ -560,14 +560,14 @@ FrLdrMapModule(FILE *KernelImage, PCHAR ImageName, PCHAR MemLoadAddr, ULONG Kern if (!ELF_SECTION(targetSection)->sh_addr) continue; - RelocSection = MmAllocateMemory(shdr->sh_size); + RelocSection = MmHeapAlloc(shdr->sh_size); FsSetFilePointer(KernelImage, relstart); FsReadFile(KernelImage, shdr->sh_size, NULL, RelocSection); /* Get the symbol section */ shdr = ELF_SECTION(shdr->sh_link); - SymbolSection = MmAllocateMemory(shdr->sh_size); + SymbolSection = MmHeapAlloc(shdr->sh_size); FsSetFilePointer(KernelImage, shdr->sh_offset); FsReadFile(KernelImage, shdr->sh_size, NULL, SymbolSection); @@ -642,11 +642,11 @@ FrLdrMapModule(FILE *KernelImage, PCHAR ImageName, PCHAR MemLoadAddr, ULONG Kern #endif } - MmFreeMemory(SymbolSection); - MmFreeMemory(RelocSection); + MmHeapFree(SymbolSection); + MmHeapFree(RelocSection); } - MmFreeMemory(sptr); + MmHeapFree(sptr); ModuleData->ModStart = (ULONG)MemLoadAddr; /* Increase the next Load Base */ diff --git a/reactos/boot/freeldr/freeldr/reactos/reactos.c b/reactos/boot/freeldr/freeldr/reactos/reactos.c index ac5b9a10fd0..d661f0a35e8 100644 --- a/reactos/boot/freeldr/freeldr/reactos/reactos.c +++ b/reactos/boot/freeldr/freeldr/reactos/reactos.c @@ -189,7 +189,7 @@ FrLdrLoadImage(IN PCHAR szFileName, return LoadBase; } -static BOOLEAN +BOOLEAN FrLdrLoadNlsFile(PCSTR szFileName, PCSTR szModuleName) { diff --git a/reactos/boot/freeldr/freeldr/reactos/setupldr.c b/reactos/boot/freeldr/freeldr/reactos/setupldr.c index f2163f2f3c4..dcc4bc0f4dc 100644 --- a/reactos/boot/freeldr/freeldr/reactos/setupldr.c +++ b/reactos/boot/freeldr/freeldr/reactos/setupldr.c @@ -38,133 +38,16 @@ extern ULONG_PTR KernelBase; extern ROS_KERNEL_ENTRY_POINT KernelEntryPoint; extern BOOLEAN FrLdrLoadDriver(PCHAR szFileName, INT nPos); +extern BOOLEAN FrLdrLoadNlsFile(PCSTR szFileName, PCSTR szModuleName); #define USE_UI -BOOLEAN -NTAPI -static FrLdrLoadKernel(IN PCHAR szFileName, - IN INT nPos) -{ - PFILE FilePointer; - PCHAR szShortName; - CHAR szBuffer[256]; - PVOID LoadBase; - PIMAGE_NT_HEADERS NtHeader; - - /* Extract Kernel filename without path */ - szShortName = strrchr(szFileName, '\\'); - if (!szShortName) - { - /* No path, leave it alone */ - szShortName = szFileName; - } - else - { - /* Skip the path */ - szShortName = szShortName + 1; - } - - /* Open the Kernel */ - FilePointer = FsOpenFile(szFileName); - if (!FilePointer) - { - /* Return failure on the short name */ - strcpy(szBuffer, szShortName); - strcat(szBuffer, " not found."); - UiMessageBox(szBuffer); - return FALSE; - } - - /* Update the status bar with the current file */ - strcpy(szBuffer, "Reading "); - strcat(szBuffer, szShortName); - UiDrawStatusText(szBuffer); - - /* Do the actual loading */ - LoadBase = FrLdrReadAndMapImage(FilePointer, szShortName, 1); - - /* Get the NT header, kernel base and kernel entry */ - NtHeader = RtlImageNtHeader(LoadBase); - KernelBase = NtHeader->OptionalHeader.ImageBase; - KernelEntryPoint = (ROS_KERNEL_ENTRY_POINT)(KernelBase + NtHeader->OptionalHeader.AddressOfEntryPoint); - LoaderBlock.KernelBase = KernelBase; - - /* Update Processbar and return success */ - return TRUE; -} - -static BOOLEAN -LoadDriver(PCSTR szSourcePath, PCSTR szFileName) -{ - return FrLdrLoadDriver((PCHAR)szFileName, 0); -} - - -static BOOLEAN -LoadNlsFile(PCSTR szSourcePath, PCSTR szFileName, PCSTR szModuleName) -{ - CHAR szFullName[256]; - CHAR szBuffer[80]; - PFILE FilePointer; - PCSTR szShortName; - - if (szSourcePath[0] != '\\') - { - strcpy(szFullName, "\\"); - strcat(szFullName, szSourcePath); - } - else - { - strcpy(szFullName, szSourcePath); - } - - if (szFullName[strlen(szFullName)] != '\\') - { - strcat(szFullName, "\\"); - } - - if (szFileName[0] != '\\') - { - strcat(szFullName, szFileName); - } - else - { - strcat(szFullName, szFileName + 1); - } - - szShortName = strrchr(szFileName, '\\'); - if (szShortName == NULL) - szShortName = szFileName; - else - szShortName = szShortName + 1; - - - FilePointer = FsOpenFile(szFullName); - if (FilePointer == NULL) - { - printf("Could not find %s\n", szFileName); - return(FALSE); - } - - /* - * Update the status bar with the current file - */ - sprintf(szBuffer, "Setup is loading files (%s)", szShortName); - UiDrawStatusText(szBuffer); - - /* Load the driver */ - FrLdrLoadModule(FilePointer, szModuleName, NULL); - - return(TRUE); -} - VOID RunLoader(VOID) { - ULONG i; - const char *SourcePath; - const char *LoadOptions = "", *DbgLoadOptions = ""; - const char *sourcePaths[] = { + ULONG i; + LPCSTR SourcePath; + LPCSTR LoadOptions, DbgLoadOptions; + LPCSTR sourcePaths[] = { "", /* Only for floppy boot */ #if defined(_M_IX86) "\\I386", @@ -175,11 +58,13 @@ VOID RunLoader(VOID) #endif "\\reactos", NULL }; - char szKernelName[256]; + CHAR FileName[256]; HINF InfHandle; ULONG ErrorLine; INFCONTEXT InfContext; + PIMAGE_NT_HEADERS NtHeader; + PVOID LoadBase; /* Setup multiboot information structure */ LoaderBlock.CommandLine = reactos_kernel_cmdline; @@ -226,9 +111,6 @@ VOID RunLoader(VOID) extern BOOLEAN FrLdrBootType; FrLdrBootType = TRUE; - /* Initialize registry */ - RegInitializeRegistry(); - /* Detect hardware */ UiDrawStatusText("Detecting hardware..."); LoaderBlock.ArchExtra = (ULONG_PTR)MachHwDetect(); @@ -244,6 +126,7 @@ VOID RunLoader(VOID) return; } + UiDrawStatusText("Loading txtsetup.sif..."); /* Open 'txtsetup.sif' */ for (i = MachDiskBootingFromFloppy() ? 0 : 1; ; i++) { @@ -253,9 +136,8 @@ VOID RunLoader(VOID) printf("Failed to open 'txtsetup.sif'\n"); return; } - strcpy(szKernelName, SourcePath); - strcat(szKernelName, "\\txtsetup.sif"); - if (InfOpenFile (&InfHandle, szKernelName, &ErrorLine)) + sprintf(FileName,"%s\\txtsetup.sif", SourcePath); + if (InfOpenFile (&InfHandle, FileName, &ErrorLine)) break; } if (!*SourcePath) @@ -271,6 +153,8 @@ VOID RunLoader(VOID) if (!InfGetDataField (&InfContext, 1, &DbgLoadOptions)) DbgLoadOptions = ""; } +#else + DbgLoadOptions = ""; #endif if (!strlen(DbgLoadOptions) && !InfFindFirstLine (InfHandle, "SetupData", @@ -294,20 +178,22 @@ VOID RunLoader(VOID) strcat(strcat(strcat(strcat(reactos_kernel_cmdline, SourcePath), " "), LoadOptions), DbgLoadOptions); - strcpy(SystemRoot, SourcePath); - strcat(SystemRoot, "\\"); - /* Setup the boot path and kernel path */ strcpy(szBootPath, SourcePath); - strcpy(szKernelName, szBootPath); - strcat(szKernelName, "\\ntoskrnl.exe"); - /* Setup the HAL path */ - strcpy(szHalName, szBootPath); - strcat(szHalName, "\\hal.dll"); + sprintf(SystemRoot,"%s\\", SourcePath); + sprintf(FileName,"%s\\ntoskrnl.exe", SourcePath); + sprintf(szHalName,"%s\\hal.dll", SourcePath); /* Load the kernel */ - if (!FrLdrLoadKernel(szKernelName, 5)) return; + LoadBase = FrLdrLoadImage(FileName, 5, 1); + if (!LoadBase) return; + + /* Get the NT header, kernel base and kernel entry */ + NtHeader = RtlImageNtHeader(LoadBase); + KernelBase = SWAPD(NtHeader->OptionalHeader.ImageBase); + KernelEntryPoint = (ROS_KERNEL_ENTRY_POINT)(KernelBase + SWAPD(NtHeader->OptionalHeader.AddressOfEntryPoint)); + LoaderBlock.KernelBase = KernelBase; /* Insert boot disk 2 */ if (MachDiskBootingFromFloppy()) @@ -343,8 +229,9 @@ VOID RunLoader(VOID) return; } + sprintf(FileName,"%s\\%s", SourcePath,LoadOptions); /* Load ANSI codepage file */ - if (!LoadNlsFile(SourcePath, LoadOptions, "ansi.nls")) + if (!FrLdrLoadNlsFile(FileName, "ansi.nls")) { UiMessageBox("Failed to load the ANSI codepage file."); return; @@ -368,8 +255,9 @@ VOID RunLoader(VOID) return; } + sprintf(FileName,"%s\\%s", SourcePath,LoadOptions); /* Load OEM codepage file */ - if (!LoadNlsFile(SourcePath, LoadOptions, "oem.nls")) + if (!FrLdrLoadNlsFile(FileName, "oem.nls")) { UiMessageBox("Failed to load the OEM codepage file."); return; @@ -393,8 +281,9 @@ VOID RunLoader(VOID) return; } + sprintf(FileName,"%s\\%s", SourcePath,LoadOptions); /* Load Unicode casemap file */ - if (!LoadNlsFile(SourcePath, LoadOptions, "casemap.nls")) + if (!FrLdrLoadNlsFile(FileName, "casemap.nls")) { UiMessageBox("Failed to load the Unicode casemap file."); return; @@ -425,7 +314,7 @@ VOID RunLoader(VOID) { if (strcmp(Media, "x") == 0) { - if (!LoadDriver(SourcePath, DriverName)) + if (!FrLdrLoadDriver((PCHAR)DriverName,0)) { DbgPrint((DPRINT_WARNING, "could not load %s, %s\n", SourcePath, DriverName)); return; diff --git a/reactos/boot/freeldr/freeldr/windows/conversion.c b/reactos/boot/freeldr/freeldr/windows/conversion.c index f99810c4954..87ba43ee331 100644 --- a/reactos/boot/freeldr/freeldr/windows/conversion.c +++ b/reactos/boot/freeldr/freeldr/windows/conversion.c @@ -1,128 +1,128 @@ -/* - * PROJECT: EFI Windows Loader - * LICENSE: GPL - See COPYING in the top level directory - * FILE: freeldr/winldr/conversion.c - * PURPOSE: Physical <-> Virtual addressing mode conversions - * PROGRAMMERS: Aleksey Bragin (aleksey@reactos.org) - */ - -/* INCLUDES ***************************************************************/ - -#include - -//#include -#include - -/* FUNCTIONS **************************************************************/ - -/* Arch-specific addresses translation implementation */ -PVOID -VaToPa(PVOID Va) -{ - return (PVOID)((ULONG_PTR)Va & ~KSEG0_BASE); -} - -PVOID -PaToVa(PVOID Pa) -{ - return (PVOID)((ULONG_PTR)Pa | KSEG0_BASE); -} - -VOID -List_PaToVa(LIST_ENTRY *ListEntry) -{ - LIST_ENTRY *ListHead = ListEntry; - LIST_ENTRY *Next = ListEntry->Flink; - LIST_ENTRY *NextPA; - - //Print(L"\n\nList_Entry: %X, First Next: %X\n", ListEntry, Next); - // - // Walk through the whole list - // - if (Next != NULL) - { - while (Next != PaToVa(ListHead)) - { - NextPA = VaToPa(Next); - //Print(L"Current: %X, Flink: %X, Blink: %X\n", Next, NextPA->Flink, NextPA->Blink); - - NextPA->Flink = PaToVa((PVOID)NextPA->Flink); - NextPA->Blink = PaToVa((PVOID)NextPA->Blink); - - //Print(L"After converting Flink: %X, Blink: %X\n", NextPA->Flink, NextPA->Blink); - - Next = NextPA->Flink; - } - - // - // Finally convert first Flink/Blink - // - ListEntry->Flink = PaToVa((PVOID)ListEntry->Flink); - if (ListEntry->Blink) - ListEntry->Blink = PaToVa((PVOID)ListEntry->Blink); - } -} - -// This function converts only Child->Child, and calls itself for each Sibling -VOID -ConvertConfigToVA(PCONFIGURATION_COMPONENT_DATA Start) -{ - PCONFIGURATION_COMPONENT_DATA Child; - PCONFIGURATION_COMPONENT_DATA Sibling; - - DbgPrint((DPRINT_WINDOWS, "ConvertConfigToVA(Start 0x%X)\n", Start)); - Child = Start; - - while (Child != NULL) - { - if (Child->ConfigurationData) - Child->ConfigurationData = PaToVa(Child->ConfigurationData); - - if (Child->Child) - Child->Child = PaToVa(Child->Child); - - if (Child->Parent) - Child->Parent = PaToVa(Child->Parent); - - if (Child->Sibling) - Child->Sibling = PaToVa(Child->Sibling); - - if (Child->ComponentEntry.Identifier) - Child->ComponentEntry.Identifier = PaToVa(Child->ComponentEntry.Identifier); - - DbgPrint((DPRINT_WINDOWS, "Device 0x%X class %d type %d id '%s', parent %p\n", Child, - Child->ComponentEntry.Class, Child->ComponentEntry.Type, VaToPa(Child->ComponentEntry.Identifier), Child->Parent)); - - // Go through siblings list - Sibling = VaToPa(Child->Sibling); - while (Sibling != NULL) - { - if (Sibling->ConfigurationData) - Sibling->ConfigurationData = PaToVa(Sibling->ConfigurationData); - - if (Sibling->Child) - Sibling->Child = PaToVa(Sibling->Child); - - if (Sibling->Parent) - Sibling->Parent = PaToVa(Sibling->Parent); - - if (Sibling->Sibling) - Sibling->Sibling = PaToVa(Sibling->Sibling); - - if (Sibling->ComponentEntry.Identifier) - Sibling->ComponentEntry.Identifier = PaToVa(Sibling->ComponentEntry.Identifier); - - DbgPrint((DPRINT_WINDOWS, "Device 0x%X class %d type %d id '%s', parent %p\n", Sibling, - Sibling->ComponentEntry.Class, Sibling->ComponentEntry.Type, VaToPa(Sibling->ComponentEntry.Identifier), Sibling->Parent)); - - // Recurse into the Child tree - if (VaToPa(Sibling->Child) != NULL) - ConvertConfigToVA(VaToPa(Sibling->Child)); - - Sibling = VaToPa(Sibling->Sibling); - } - - // Go to the next child - Child = VaToPa(Child->Child); - } -} +/* + * PROJECT: EFI Windows Loader + * LICENSE: GPL - See COPYING in the top level directory + * FILE: freeldr/winldr/conversion.c + * PURPOSE: Physical <-> Virtual addressing mode conversions + * PROGRAMMERS: Aleksey Bragin (aleksey@reactos.org) + */ + +/* INCLUDES ***************************************************************/ + +#include + +//#include +#include + +/* FUNCTIONS **************************************************************/ + +/* Arch-specific addresses translation implementation */ +PVOID +VaToPa(PVOID Va) +{ + return (PVOID)((ULONG_PTR)Va & ~KSEG0_BASE); +} + +PVOID +PaToVa(PVOID Pa) +{ + return (PVOID)((ULONG_PTR)Pa | KSEG0_BASE); +} + +VOID +List_PaToVa(LIST_ENTRY *ListEntry) +{ + LIST_ENTRY *ListHead = ListEntry; + LIST_ENTRY *Next = ListEntry->Flink; + LIST_ENTRY *NextPA; + + //Print(L"\n\nList_Entry: %X, First Next: %X\n", ListEntry, Next); + // + // Walk through the whole list + // + if (Next != NULL) + { + while (Next != PaToVa(ListHead)) + { + NextPA = VaToPa(Next); + //Print(L"Current: %X, Flink: %X, Blink: %X\n", Next, NextPA->Flink, NextPA->Blink); + + NextPA->Flink = PaToVa((PVOID)NextPA->Flink); + NextPA->Blink = PaToVa((PVOID)NextPA->Blink); + + //Print(L"After converting Flink: %X, Blink: %X\n", NextPA->Flink, NextPA->Blink); + + Next = NextPA->Flink; + } + + // + // Finally convert first Flink/Blink + // + ListEntry->Flink = PaToVa((PVOID)ListEntry->Flink); + if (ListEntry->Blink) + ListEntry->Blink = PaToVa((PVOID)ListEntry->Blink); + } +} + +// This function converts only Child->Child, and calls itself for each Sibling +VOID +ConvertConfigToVA(PCONFIGURATION_COMPONENT_DATA Start) +{ + PCONFIGURATION_COMPONENT_DATA Child; + PCONFIGURATION_COMPONENT_DATA Sibling; + + DbgPrint((DPRINT_WINDOWS, "ConvertConfigToVA(Start 0x%X)\n", Start)); + Child = Start; + + while (Child != NULL) + { + if (Child->ConfigurationData) + Child->ConfigurationData = PaToVa(Child->ConfigurationData); + + if (Child->Child) + Child->Child = PaToVa(Child->Child); + + if (Child->Parent) + Child->Parent = PaToVa(Child->Parent); + + if (Child->Sibling) + Child->Sibling = PaToVa(Child->Sibling); + + if (Child->ComponentEntry.Identifier) + Child->ComponentEntry.Identifier = PaToVa(Child->ComponentEntry.Identifier); + + DbgPrint((DPRINT_WINDOWS, "Device 0x%X class %d type %d id '%s', parent %p\n", Child, + Child->ComponentEntry.Class, Child->ComponentEntry.Type, VaToPa(Child->ComponentEntry.Identifier), Child->Parent)); + + // Go through siblings list + Sibling = VaToPa(Child->Sibling); + while (Sibling != NULL) + { + if (Sibling->ConfigurationData) + Sibling->ConfigurationData = PaToVa(Sibling->ConfigurationData); + + if (Sibling->Child) + Sibling->Child = PaToVa(Sibling->Child); + + if (Sibling->Parent) + Sibling->Parent = PaToVa(Sibling->Parent); + + if (Sibling->Sibling) + Sibling->Sibling = PaToVa(Sibling->Sibling); + + if (Sibling->ComponentEntry.Identifier) + Sibling->ComponentEntry.Identifier = PaToVa(Sibling->ComponentEntry.Identifier); + + DbgPrint((DPRINT_WINDOWS, "Device 0x%X class %d type %d id '%s', parent %p\n", Sibling, + Sibling->ComponentEntry.Class, Sibling->ComponentEntry.Type, VaToPa(Sibling->ComponentEntry.Identifier), Sibling->Parent)); + + // Recurse into the Child tree + if (VaToPa(Sibling->Child) != NULL) + ConvertConfigToVA(VaToPa(Sibling->Child)); + + Sibling = VaToPa(Sibling->Sibling); + } + + // Go to the next child + Child = VaToPa(Child->Child); + } +} diff --git a/reactos/boot/freeldr/freeldr/windows/peloader.c b/reactos/boot/freeldr/freeldr/windows/peloader.c index a3792388669..aa5e3ad9b80 100644 --- a/reactos/boot/freeldr/freeldr/windows/peloader.c +++ b/reactos/boot/freeldr/freeldr/windows/peloader.c @@ -1,830 +1,830 @@ -/* - * PROJECT: FreeLoader - * LICENSE: GPL - See COPYING in the top level directory - * FILE: freeldr/winldr/peloader.c - * PURPOSE: Provides routines for loading PE files. To be merged with - * arch/i386/loader.c in future - * This article was very handy during development: - * http://msdn.microsoft.com/msdnmag/issues/02/03/PE2/ - * PROGRAMMERS: Aleksey Bragin (aleksey@reactos.org) - * The source code in this file is based on the work of respective - * authors of PE loading code in ReactOS and Brian Palmer and - * Alex Ionescu's arch/i386/loader.c, and my research project - * (creating a native EFI loader for Windows) - */ - -/* INCLUDES ***************************************************************/ -#include -#include - - -BOOLEAN -WinLdrpCompareDllName(IN PCH DllName, - IN PUNICODE_STRING UnicodeName); - -BOOLEAN -WinLdrpBindImportName(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, - IN PVOID DllBase, - IN PVOID ImageBase, - IN PIMAGE_THUNK_DATA ThunkData, - IN PIMAGE_EXPORT_DIRECTORY ExportDirectory, - IN ULONG ExportSize, - IN BOOLEAN ProcessForwards); - -BOOLEAN -WinLdrpLoadAndScanReferencedDll(PLOADER_PARAMETER_BLOCK WinLdrBlock, - PCCH DirectoryPath, - PCH ImportName, - PLDR_DATA_TABLE_ENTRY *DataTableEntry); - -BOOLEAN -WinLdrpScanImportAddressTable(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, - IN PVOID DllBase, - IN PVOID ImageBase, - IN PIMAGE_THUNK_DATA ThunkData); - - - -/* FUNCTIONS **************************************************************/ - -/* Returns TRUE if DLL has already been loaded - looks in LoadOrderList in LPB */ -BOOLEAN -WinLdrCheckForLoadedDll(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, - IN PCH DllName, - OUT PLDR_DATA_TABLE_ENTRY *LoadedEntry) -{ - PLDR_DATA_TABLE_ENTRY DataTableEntry; - LIST_ENTRY *ModuleEntry; - - DbgPrint((DPRINT_WINDOWS, "WinLdrCheckForLoadedDll: DllName %X, LoadedEntry: %X\n", - DllName, LoadedEntry)); - - /* Just go through each entry in the LoadOrderList and compare loaded module's - name with a given name */ - ModuleEntry = WinLdrBlock->LoadOrderListHead.Flink; - while (ModuleEntry != &WinLdrBlock->LoadOrderListHead) - { - /* Get pointer to the current DTE */ - DataTableEntry = CONTAINING_RECORD(ModuleEntry, - LDR_DATA_TABLE_ENTRY, - InLoadOrderLinks); - - DbgPrint((DPRINT_WINDOWS, "WinLdrCheckForLoadedDll: DTE %p, EP %p\n", - DataTableEntry, DataTableEntry->EntryPoint)); - - /* Compare names */ - if (WinLdrpCompareDllName(DllName, &DataTableEntry->BaseDllName)) - { - /* Yes, found it, report pointer to the loaded module's DTE - to the caller and increase load count for it */ - *LoadedEntry = DataTableEntry; - DataTableEntry->LoadCount++; - DbgPrint((DPRINT_WINDOWS, "WinLdrCheckForLoadedDll: LoadedEntry %X\n", DataTableEntry)); - return TRUE; - } - - /* Go to the next entry */ - ModuleEntry = ModuleEntry->Flink; - } - - /* Nothing found */ - return FALSE; -} - -BOOLEAN -WinLdrScanImportDescriptorTable(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, - IN PCCH DirectoryPath, - IN PLDR_DATA_TABLE_ENTRY ScanDTE) -{ - PLDR_DATA_TABLE_ENTRY DataTableEntry; - PIMAGE_IMPORT_DESCRIPTOR ImportTable; - ULONG ImportTableSize; - PCH ImportName; - BOOLEAN Status; - - /* Get a pointer to the import table of this image */ - ImportTable = (PIMAGE_IMPORT_DESCRIPTOR)RtlImageDirectoryEntryToData(VaToPa(ScanDTE->DllBase), - TRUE, IMAGE_DIRECTORY_ENTRY_IMPORT, &ImportTableSize); - - { - UNICODE_STRING BaseName; - BaseName.Buffer = VaToPa(ScanDTE->BaseDllName.Buffer); - BaseName.MaximumLength = ScanDTE->BaseDllName.MaximumLength; - BaseName.Length = ScanDTE->BaseDllName.Length; - DbgPrint((DPRINT_WINDOWS, "WinLdrScanImportDescriptorTable(): %wZ ImportTable = 0x%X\n", - &BaseName, ImportTable)); - } - - /* If image doesn't have any import directory - just return success */ - if (ImportTable == NULL) - return TRUE; - - /* Loop through all entries */ - for (;(ImportTable->Name != 0) && (ImportTable->FirstThunk != 0);ImportTable++) - { - /* Get pointer to the name */ - ImportName = (PCH)VaToPa(RVA(ScanDTE->DllBase, ImportTable->Name)); - DbgPrint((DPRINT_WINDOWS, "WinLdrScanImportDescriptorTable(): Looking at %s\n", ImportName)); - - /* In case we get a reference to ourselves - just skip it */ - if (WinLdrpCompareDllName(ImportName, &ScanDTE->BaseDllName)) - continue; - - /* Load the DLL if it is not already loaded */ - if (!WinLdrCheckForLoadedDll(WinLdrBlock, ImportName, &DataTableEntry)) - { - Status = WinLdrpLoadAndScanReferencedDll(WinLdrBlock, - DirectoryPath, - ImportName, - &DataTableEntry); - - if (!Status) - { - DbgPrint((DPRINT_WINDOWS, "WinLdrpLoadAndScanReferencedDll() failed\n")); - return Status; - } - } - - /* Scan its import address table */ - Status = WinLdrpScanImportAddressTable( - WinLdrBlock, - DataTableEntry->DllBase, - ScanDTE->DllBase, - (PIMAGE_THUNK_DATA)RVA(ScanDTE->DllBase, ImportTable->FirstThunk)); - - if (!Status) - { - DbgPrint((DPRINT_WINDOWS, "WinLdrpScanImportAddressTable() failed\n")); - return Status; - } - } - - return TRUE; -} - -BOOLEAN -WinLdrAllocateDataTableEntry(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, - IN PCCH BaseDllName, - IN PCCH FullDllName, - IN PVOID BasePA, - OUT PLDR_DATA_TABLE_ENTRY *NewEntry) -{ - PVOID BaseVA = PaToVa(BasePA); - PWSTR Buffer; - PLDR_DATA_TABLE_ENTRY DataTableEntry; - PIMAGE_NT_HEADERS NtHeaders; - USHORT Length; - - /* Allocate memory for a data table entry, zero-initialize it */ - DataTableEntry = (PLDR_DATA_TABLE_ENTRY)MmHeapAlloc(sizeof(LDR_DATA_TABLE_ENTRY)); - if (DataTableEntry == NULL) - return FALSE; - RtlZeroMemory(DataTableEntry, sizeof(LDR_DATA_TABLE_ENTRY)); - - /* Get NT headers from the image */ - NtHeaders = RtlImageNtHeader(BasePA); - - /* Initialize corresponding fields of DTE based on NT headers value */ - DataTableEntry->DllBase = BaseVA; - DataTableEntry->SizeOfImage = NtHeaders->OptionalHeader.SizeOfImage; - DataTableEntry->EntryPoint = RVA(BaseVA, NtHeaders->OptionalHeader.AddressOfEntryPoint); - DataTableEntry->SectionPointer = 0; - DataTableEntry->CheckSum = NtHeaders->OptionalHeader.CheckSum; - - /* Initialize BaseDllName field (UNICODE_STRING) from the Ansi BaseDllName - by simple conversion - copying each character */ - Length = (USHORT)(strlen(BaseDllName) * sizeof(WCHAR)); - Buffer = (PWSTR)MmHeapAlloc(Length); - if (Buffer == NULL) - { - MmHeapFree(DataTableEntry); - return FALSE; - } - RtlZeroMemory(Buffer, Length); - - DataTableEntry->BaseDllName.Length = Length; - DataTableEntry->BaseDllName.MaximumLength = Length; - DataTableEntry->BaseDllName.Buffer = PaToVa(Buffer); - while (*BaseDllName != 0) - { - *Buffer++ = *BaseDllName++; - } - - /* Initialize FullDllName field (UNICODE_STRING) from the Ansi FullDllName - using the same method */ - Length = (USHORT)(strlen(FullDllName) * sizeof(WCHAR)); - Buffer = (PWSTR)MmHeapAlloc(Length); - if (Buffer == NULL) - { - MmHeapFree(DataTableEntry); - return FALSE; - } - RtlZeroMemory(Buffer, Length); - - DataTableEntry->FullDllName.Length = Length; - DataTableEntry->FullDllName.MaximumLength = Length; - DataTableEntry->FullDllName.Buffer = PaToVa(Buffer); - while (*FullDllName != 0) - { - *Buffer++ = *FullDllName++; - } - - /* Initialize what's left - LoadCount which is 1, and set Flags so that - we know this entry is processed */ - DataTableEntry->Flags = LDRP_ENTRY_PROCESSED; - DataTableEntry->LoadCount = 1; - - /* Insert this DTE to a list in the LPB */ - InsertTailList(&WinLdrBlock->LoadOrderListHead, &DataTableEntry->InLoadOrderLinks); - - /* Save pointer to a newly allocated and initialized entry */ - *NewEntry = DataTableEntry; - - /* Return success */ - return TRUE; -} - -/* WinLdrLoadImage loads the specified image from the file (it doesn't - perform any additional operations on the filename, just directly - calls the file I/O routines), and relocates it so that it's ready - to be used when paging is enabled. - Addressing mode: physical - */ -BOOLEAN -WinLdrLoadImage(IN PCHAR FileName, - TYPE_OF_MEMORY MemoryType, - OUT PVOID *ImageBasePA) -{ - PFILE FileHandle; - PVOID PhysicalBase; - PVOID VirtualBase = NULL; - UCHAR HeadersBuffer[SECTOR_SIZE * 2]; - PIMAGE_NT_HEADERS NtHeaders; - PIMAGE_SECTION_HEADER SectionHeader; - ULONG VirtualSize, SizeOfRawData, NumberOfSections; - BOOLEAN Status; - ULONG i, BytesRead; - - CHAR ProgressString[256]; - - /* Inform user we are loading files */ - sprintf(ProgressString, "Loading %s...", FileName); - UiDrawProgressBarCenter(1, 100, ProgressString); - - /* Open the image file */ - FileHandle = FsOpenFile(FileName); - - if (FileHandle == NULL) - { - //Print(L"Can not open the file %s\n",FileName); - UiMessageBox("Can not open the file"); - return FALSE; - } - - /* Load the first 2 sectors of the image so we can read the PE header */ - Status = FsReadFile(FileHandle, SECTOR_SIZE * 2, NULL, HeadersBuffer); - if (!Status) - { - //Print(L"Error reading from file %s\n", FileName); - UiMessageBox("Error reading from file"); - FsCloseFile(FileHandle); - return FALSE; - } - - /* Now read the MZ header to get the offset to the PE Header */ - NtHeaders = RtlImageNtHeader(HeadersBuffer); - - if (!NtHeaders) - { - //Print(L"Error - no NT header found in %s\n", FileName); - UiMessageBox("Error - no NT header found"); - FsCloseFile(FileHandle); - return FALSE; - } - - /* Ensure this is executable image */ - if (((NtHeaders->FileHeader.Characteristics & IMAGE_FILE_EXECUTABLE_IMAGE) == 0)) - { - //Print(L"Not an executable image %s\n", FileName); - UiMessageBox("Not an executable image"); - FsCloseFile(FileHandle); - return FALSE; - } - - /* Store number of sections to read and a pointer to the first section */ - NumberOfSections = NtHeaders->FileHeader.NumberOfSections; - SectionHeader = IMAGE_FIRST_SECTION(NtHeaders); - - /* Try to allocate this memory, if fails - allocate somewhere else */ - PhysicalBase = MmAllocateMemoryAtAddress(NtHeaders->OptionalHeader.SizeOfImage, - (PVOID)((ULONG)NtHeaders->OptionalHeader.ImageBase & (KSEG0_BASE - 1)), - MemoryType); - - if (PhysicalBase == NULL) - { - /* It's ok, we don't panic - let's allocate again at any other "low" place */ - PhysicalBase = MmAllocateMemoryWithType(NtHeaders->OptionalHeader.SizeOfImage, MemoryType); - - if (PhysicalBase == NULL) - { - //Print(L"Failed to alloc pages for image %s\n", FileName); - UiMessageBox("Failed to alloc pages for image"); - FsCloseFile(FileHandle); - return FALSE; - } - } - - /* This is the real image base - in form of a virtual address */ - VirtualBase = PaToVa(PhysicalBase); - - DbgPrint((DPRINT_WINDOWS, "Base PA: 0x%X, VA: 0x%X\n", PhysicalBase, VirtualBase)); - - /* Set to 0 position and fully load the file image */ - FsSetFilePointer(FileHandle, 0); - - Status = FsReadFile(FileHandle, NtHeaders->OptionalHeader.SizeOfHeaders, NULL, PhysicalBase); - - if (!Status) - { - //Print(L"Error reading headers %s\n", FileName); - UiMessageBox("Error reading headers"); - FsCloseFile(FileHandle); - return FALSE; - } - - /* Reload the NT Header */ - NtHeaders = RtlImageNtHeader(PhysicalBase); - - /* Load the first section */ - SectionHeader = IMAGE_FIRST_SECTION(NtHeaders); - - /* Fill output parameters */ - *ImageBasePA = PhysicalBase; - - /* Walk through each section and read it (check/fix any possible - bad situations, if they arise) */ - for (i = 0; i < NumberOfSections; i++) - { - VirtualSize = SectionHeader->Misc.VirtualSize; - SizeOfRawData = SectionHeader->SizeOfRawData; - - /* Handle a case when VirtualSize equals 0 */ - if (VirtualSize == 0) - VirtualSize = SizeOfRawData; - - /* If PointerToRawData is 0, then force its size to be also 0 */ - if (SectionHeader->PointerToRawData == 0) - { - SizeOfRawData = 0; - } - else - { - /* Cut the loaded size to the VirtualSize extents */ - if (SizeOfRawData > VirtualSize) - SizeOfRawData = VirtualSize; - } - - /* Actually read the section (if its size is not 0) */ - if (SizeOfRawData != 0) - { - /* Seek to the correct position */ - FsSetFilePointer(FileHandle, SectionHeader->PointerToRawData); - - DbgPrint((DPRINT_WINDOWS, "SH->VA: 0x%X\n", SectionHeader->VirtualAddress)); - - /* Read this section from the file, size = SizeOfRawData */ - Status = FsReadFile(FileHandle, SizeOfRawData, &BytesRead, (PUCHAR)PhysicalBase + SectionHeader->VirtualAddress); - - if (!Status && (BytesRead == 0)) - { - DbgPrint((DPRINT_WINDOWS, "WinLdrLoadImage(): Error reading section from file!\n")); - break; - } - } - - /* Size of data is less than the virtual size - fill up the remainder with zeroes */ - if (SizeOfRawData < VirtualSize) - { - DbgPrint((DPRINT_WINDOWS, "WinLdrLoadImage(): SORD %d < VS %d", SizeOfRawData, VirtualSize)); - RtlZeroMemory((PVOID)(SectionHeader->VirtualAddress + (ULONG)PhysicalBase + SizeOfRawData), VirtualSize - SizeOfRawData); - } - - SectionHeader++; - } - - /* We are done with the file - close it */ - FsCloseFile(FileHandle); - - /* If loading failed - return right now */ - if (!Status) - return FALSE; - - - /* Relocate the image, if it needs it */ - if (NtHeaders->OptionalHeader.ImageBase != (ULONG)VirtualBase) - { - DbgPrint((DPRINT_WINDOWS, "Relocating %p -> %p\n", - NtHeaders->OptionalHeader.ImageBase, VirtualBase)); - Status = (BOOLEAN)LdrRelocateImageWithBias(PhysicalBase, - (ULONG_PTR)VirtualBase - (ULONG_PTR)PhysicalBase, - "FreeLdr", - TRUE, - TRUE, /* in case of conflict still return success */ - FALSE); - } - - return Status; -} - -/* PRIVATE FUNCTIONS *******************************************************/ - -/* DllName - physical, UnicodeString->Buffer - virtual */ -BOOLEAN -WinLdrpCompareDllName(IN PCH DllName, - IN PUNICODE_STRING UnicodeName) -{ - PWSTR Buffer; - UNICODE_STRING UnicodeNamePA; - ULONG i, Length; - - /* First obvious check: for length of two names */ - Length = strlen(DllName); - - UnicodeNamePA.Length = UnicodeName->Length; - UnicodeNamePA.MaximumLength = UnicodeName->MaximumLength; - UnicodeNamePA.Buffer = VaToPa(UnicodeName->Buffer); - DbgPrint((DPRINT_WINDOWS, "WinLdrpCompareDllName: %s and %wZ, Length = %d " - "UN->Length %d\n", DllName, &UnicodeNamePA, Length, UnicodeName->Length)); - - if ((Length * sizeof(WCHAR)) > UnicodeName->Length) - return FALSE; - - /* Store pointer to unicode string's buffer */ - Buffer = VaToPa(UnicodeName->Buffer); - - /* Loop character by character */ - for (i = 0; i < Length; i++) - { - /* Compare two characters, uppercasing them */ - if (toupper(*DllName) != toupper((CHAR)*Buffer)) - return FALSE; - - /* Move to the next character */ - DllName++; - Buffer++; - } - - /* Check, if strings either fully match, or match till the "." (w/o extension) */ - if ((UnicodeName->Length == Length * sizeof(WCHAR)) || (*Buffer == L'.')) - { - /* Yes they do */ - return TRUE; - } - - /* Strings don't match, return FALSE */ - return FALSE; -} - -BOOLEAN -WinLdrpBindImportName(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, - IN PVOID DllBase, - IN PVOID ImageBase, - IN PIMAGE_THUNK_DATA ThunkData, - IN PIMAGE_EXPORT_DIRECTORY ExportDirectory, - IN ULONG ExportSize, - IN BOOLEAN ProcessForwards) -{ - ULONG Ordinal; - PULONG NameTable, FunctionTable; - PUSHORT OrdinalTable; - LONG High, Low, Middle, Result; - ULONG Hint; - - //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName(): DllBase 0x%X, ImageBase 0x%X, ThunkData 0x%X, ExportDirectory 0x%X, ExportSize %d, ProcessForwards 0x%X\n", - // DllBase, ImageBase, ThunkData, ExportDirectory, ExportSize, ProcessForwards)); - - /* Check passed DllBase param */ - if(DllBase == NULL) - { - DbgPrint((DPRINT_WINDOWS, "WARNING: DllBase == NULL!\n")); - return FALSE; - } - - /* Convert all non-critical pointers to PA from VA */ - ThunkData = VaToPa(ThunkData); - - /* Is the reference by ordinal? */ - if (IMAGE_SNAP_BY_ORDINAL(ThunkData->u1.Ordinal) && !ProcessForwards) - { - /* Yes, calculate the ordinal */ - Ordinal = (ULONG)(IMAGE_ORDINAL(ThunkData->u1.Ordinal) - (UINT32)ExportDirectory->Base); - //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName(): Ordinal %d\n", Ordinal)); - } - else - { - /* It's reference by name, we have to look it up in the export directory */ - if (!ProcessForwards) - { - /* AddressOfData in thunk entry will become a virtual address (from relative) */ - //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName(): ThunkData->u1.AOD was %p\n", ThunkData->u1.AddressOfData)); - ThunkData->u1.AddressOfData = - (ULONG)RVA(ImageBase, ThunkData->u1.AddressOfData); - //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName(): ThunkData->u1.AOD became %p\n", ThunkData->u1.AddressOfData)); - } - - /* Get pointers to Name and Ordinal tables (RVA -> VA) */ - NameTable = (PULONG)VaToPa(RVA(DllBase, ExportDirectory->AddressOfNames)); - OrdinalTable = (PUSHORT)VaToPa(RVA(DllBase, ExportDirectory->AddressOfNameOrdinals)); - - //DbgPrint((DPRINT_WINDOWS, "NameTable 0x%X, OrdinalTable 0x%X, ED->AddressOfNames 0x%X, ED->AOFO 0x%X\n", - // NameTable, OrdinalTable, ExportDirectory->AddressOfNames, ExportDirectory->AddressOfNameOrdinals)); - - /* Get the hint, convert it to a physical pointer */ - Hint = ((PIMAGE_IMPORT_BY_NAME)VaToPa((PVOID)ThunkData->u1.AddressOfData))->Hint; - //DbgPrint((DPRINT_WINDOWS, "HintIndex %d\n", Hint)); - - /* If Hint is less than total number of entries in the export directory, - and import name == export name, then we can just get it from the OrdinalTable */ - if ( - (Hint < ExportDirectory->NumberOfNames) && - ( - strcmp(VaToPa(&((PIMAGE_IMPORT_BY_NAME)VaToPa((PVOID)ThunkData->u1.AddressOfData))->Name[0]), - (PCHAR)VaToPa( RVA(DllBase, NameTable[Hint])) ) == 0 - ) - ) - { - Ordinal = OrdinalTable[Hint]; - //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName(): Ordinal %d\n", Ordinal)); - } - else - { - /* It's not the easy way, we have to lookup import name in the name table. - Let's use a binary search for this task. */ - - //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName() looking up the import name using binary search...\n")); - - /* Low boundary is set to 0, and high boundary to the maximum index */ - Low = 0; - High = ExportDirectory->NumberOfNames - 1; - - /* Perform a binary-search loop */ - while (High >= Low) - { - /* Divide by 2 by shifting to the right once */ - Middle = (Low + High) >> 1; - - /* Compare the names */ - Result = strcmp(VaToPa(&((PIMAGE_IMPORT_BY_NAME)VaToPa((PVOID)ThunkData->u1.AddressOfData))->Name[0]), - (PCHAR)VaToPa(RVA(DllBase, NameTable[Middle]))); - - /*DbgPrint((DPRINT_WINDOWS, "Binary search: comparing Import '__', Export '%s'\n",*/ - /*VaToPa(&((PIMAGE_IMPORT_BY_NAME)VaToPa(ThunkData->u1.AddressOfData))->Name[0]),*/ - /*(PCHAR)VaToPa(RVA(DllBase, NameTable[Middle]))));*/ - - /*DbgPrint((DPRINT_WINDOWS, "TE->u1.AOD %p, fulladdr %p\n", - ThunkData->u1.AddressOfData, - ((PIMAGE_IMPORT_BY_NAME)VaToPa(ThunkData->u1.AddressOfData))->Name ));*/ - - - /* Depending on result of strcmp, perform different actions */ - if (Result < 0) - { - /* Adjust top boundary */ - High = Middle - 1; - } - else if (Result > 0) - { - /* Adjust bottom boundary */ - Low = Middle + 1; - } - else - { - /* Yay, found it! */ - break; - } - } - - /* If high boundary is less than low boundary, then no result found */ - if (High < Low) - { - //Print(L"Error in binary search\n"); - DbgPrint((DPRINT_WINDOWS, "Error in binary search!\n")); - return FALSE; - } - - /* Everything allright, get the ordinal */ - Ordinal = OrdinalTable[Middle]; - - //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName() found Ordinal %d\n", Ordinal)); - } - } - - /* Check ordinal number for validity! */ - if (Ordinal >= ExportDirectory->NumberOfFunctions) - { - DbgPrint((DPRINT_WINDOWS, "Ordinal number is invalid!\n")); - return FALSE; - } - - /* Get a pointer to the function table */ - FunctionTable = (PULONG)VaToPa(RVA(DllBase, ExportDirectory->AddressOfFunctions)); - - /* Save a pointer to the function */ - ThunkData->u1.Function = (ULONG)RVA(DllBase, FunctionTable[Ordinal]); - - /* Is it a forwarder? (function pointer isn't within the export directory) */ - if (((ULONG)VaToPa((PVOID)ThunkData->u1.Function) > (ULONG)ExportDirectory) && - ((ULONG)VaToPa((PVOID)ThunkData->u1.Function) < ((ULONG)ExportDirectory + ExportSize))) - { - PLDR_DATA_TABLE_ENTRY DataTableEntry; - CHAR ForwardDllName[255]; - PIMAGE_EXPORT_DIRECTORY RefExportDirectory; - ULONG RefExportSize; - - /* Save the name of the forward dll */ - RtlCopyMemory(ForwardDllName, (PCHAR)VaToPa((PVOID)ThunkData->u1.Function), sizeof(ForwardDllName)); - - /* Strip out its extension */ - *strchr(ForwardDllName,'.') = '\0'; - - DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName(): ForwardDllName %s\n", ForwardDllName)); - if (!WinLdrCheckForLoadedDll(WinLdrBlock, ForwardDllName, &DataTableEntry)) - { - /* We can't continue if DLL couldn't be loaded, so bomb out with an error */ - //Print(L"Error loading DLL!\n"); - DbgPrint((DPRINT_WINDOWS, "Error loading DLL!\n")); - return FALSE; - } - - /* Get pointer to the export directory of loaded DLL */ - RefExportDirectory = (PIMAGE_EXPORT_DIRECTORY) - RtlImageDirectoryEntryToData(VaToPa(DataTableEntry->DllBase), - TRUE, - IMAGE_DIRECTORY_ENTRY_EXPORT, - &RefExportSize); - - /* Fail if it's NULL */ - if (RefExportDirectory) - { - UCHAR Buffer[128]; - IMAGE_THUNK_DATA RefThunkData; - PIMAGE_IMPORT_BY_NAME ImportByName; - PCHAR ImportName; - BOOLEAN Status; - - /* Get pointer to the import name */ - ImportName = strchr((PCHAR)VaToPa((PVOID)ThunkData->u1.Function), '.') + 1; - - /* Create a IMAGE_IMPORT_BY_NAME structure, pointing to the local Buffer */ - ImportByName = (PIMAGE_IMPORT_BY_NAME)Buffer; - - /* Fill the name with the import name */ - RtlCopyMemory(ImportByName->Name, ImportName, strlen(ImportName)+1); - - /* Set Hint to 0 */ - ImportByName->Hint = 0; - - /* And finally point ThunkData's AddressOfData to that structure */ - RefThunkData.u1.AddressOfData = (ULONG)ImportByName; - - /* And recursively call ourselves */ - Status = WinLdrpBindImportName( - WinLdrBlock, - DataTableEntry->DllBase, - ImageBase, - &RefThunkData, - RefExportDirectory, - RefExportSize, - TRUE); - - /* Fill out the ThunkData with data from RefThunkData */ - ThunkData->u1 = RefThunkData.u1; - - /* Return what we got from the recursive call */ - return Status; - } - else - { - /* Fail if ExportDirectory is NULL */ - return FALSE; - } - } - - /* Success! */ - return TRUE; -} - -BOOLEAN -WinLdrpLoadAndScanReferencedDll(PLOADER_PARAMETER_BLOCK WinLdrBlock, - PCCH DirectoryPath, - PCH ImportName, - PLDR_DATA_TABLE_ENTRY *DataTableEntry) -{ - CHAR FullDllName[256]; - BOOLEAN Status; - PVOID BasePA; - - /* Prepare the full path to the file to be loaded */ - strcpy(FullDllName, DirectoryPath); - strcat(FullDllName, ImportName); - - DbgPrint((DPRINT_WINDOWS, "Loading referenced DLL: %s\n", FullDllName)); - //Print(L"Loading referenced DLL: %s\n", FullDllName); - - /* Load the image */ - Status = WinLdrLoadImage(FullDllName, LoaderHalCode, &BasePA); - - if (!Status) - { - DbgPrint((DPRINT_WINDOWS, "WinLdrLoadImage() failed\n")); - return Status; - } - - /* Allocate DTE for newly loaded DLL */ - Status = WinLdrAllocateDataTableEntry(WinLdrBlock, - ImportName, - FullDllName, - BasePA, - DataTableEntry); - - if (!Status) - { - DbgPrint((DPRINT_WINDOWS, - "WinLdrAllocateDataTableEntry() failed with Status=0x%X\n", Status)); - return Status; - } - - /* Scan its dependencies too */ - DbgPrint((DPRINT_WINDOWS, - "WinLdrScanImportDescriptorTable() calling ourselves for %S\n", - VaToPa((*DataTableEntry)->BaseDllName.Buffer))); - Status = WinLdrScanImportDescriptorTable(WinLdrBlock, DirectoryPath, *DataTableEntry); - - if (!Status) - { - DbgPrint((DPRINT_WINDOWS, - "WinLdrScanImportDescriptorTable() failed with Status=0x%X\n", Status)); - return Status; - } - - return TRUE; -} - -BOOLEAN -WinLdrpScanImportAddressTable(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, - IN PVOID DllBase, - IN PVOID ImageBase, - IN PIMAGE_THUNK_DATA ThunkData) -{ - PIMAGE_EXPORT_DIRECTORY ExportDirectory = NULL; - BOOLEAN Status; - ULONG ExportSize; - - DbgPrint((DPRINT_WINDOWS, "WinLdrpScanImportAddressTable(): DllBase 0x%X, " - "ImageBase 0x%X, ThunkData 0x%X\n", DllBase, ImageBase, ThunkData)); - - /* Obtain the export table from the DLL's base */ - if (DllBase == NULL) - { - //Print(L"Error, DllBase == NULL!\n"); - return FALSE; - } - else - { - ExportDirectory = - (PIMAGE_EXPORT_DIRECTORY)RtlImageDirectoryEntryToData(VaToPa(DllBase), - TRUE, - IMAGE_DIRECTORY_ENTRY_EXPORT, - &ExportSize); - } - - DbgPrint((DPRINT_WINDOWS, "WinLdrpScanImportAddressTable(): ExportDirectory 0x%X\n", ExportDirectory)); - - /* If pointer to Export Directory is */ - if (ExportDirectory == NULL) - return FALSE; - - /* Go through each entry in the thunk table and bind it */ - while (((PIMAGE_THUNK_DATA)VaToPa(ThunkData))->u1.AddressOfData != 0) - { - /* Bind it */ - Status = WinLdrpBindImportName( - WinLdrBlock, - DllBase, - ImageBase, - ThunkData, - ExportDirectory, - ExportSize, - FALSE); - - /* Move to the next entry */ - ThunkData++; - - /* Return error if binding was unsuccessful */ - if (!Status) - return Status; - } - - /* Return success */ - return TRUE; -} +/* + * PROJECT: FreeLoader + * LICENSE: GPL - See COPYING in the top level directory + * FILE: freeldr/winldr/peloader.c + * PURPOSE: Provides routines for loading PE files. To be merged with + * arch/i386/loader.c in future + * This article was very handy during development: + * http://msdn.microsoft.com/msdnmag/issues/02/03/PE2/ + * PROGRAMMERS: Aleksey Bragin (aleksey@reactos.org) + * The source code in this file is based on the work of respective + * authors of PE loading code in ReactOS and Brian Palmer and + * Alex Ionescu's arch/i386/loader.c, and my research project + * (creating a native EFI loader for Windows) + */ + +/* INCLUDES ***************************************************************/ +#include +#include + + +BOOLEAN +WinLdrpCompareDllName(IN PCH DllName, + IN PUNICODE_STRING UnicodeName); + +BOOLEAN +WinLdrpBindImportName(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, + IN PVOID DllBase, + IN PVOID ImageBase, + IN PIMAGE_THUNK_DATA ThunkData, + IN PIMAGE_EXPORT_DIRECTORY ExportDirectory, + IN ULONG ExportSize, + IN BOOLEAN ProcessForwards); + +BOOLEAN +WinLdrpLoadAndScanReferencedDll(PLOADER_PARAMETER_BLOCK WinLdrBlock, + PCCH DirectoryPath, + PCH ImportName, + PLDR_DATA_TABLE_ENTRY *DataTableEntry); + +BOOLEAN +WinLdrpScanImportAddressTable(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, + IN PVOID DllBase, + IN PVOID ImageBase, + IN PIMAGE_THUNK_DATA ThunkData); + + + +/* FUNCTIONS **************************************************************/ + +/* Returns TRUE if DLL has already been loaded - looks in LoadOrderList in LPB */ +BOOLEAN +WinLdrCheckForLoadedDll(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, + IN PCH DllName, + OUT PLDR_DATA_TABLE_ENTRY *LoadedEntry) +{ + PLDR_DATA_TABLE_ENTRY DataTableEntry; + LIST_ENTRY *ModuleEntry; + + DbgPrint((DPRINT_WINDOWS, "WinLdrCheckForLoadedDll: DllName %X, LoadedEntry: %X\n", + DllName, LoadedEntry)); + + /* Just go through each entry in the LoadOrderList and compare loaded module's + name with a given name */ + ModuleEntry = WinLdrBlock->LoadOrderListHead.Flink; + while (ModuleEntry != &WinLdrBlock->LoadOrderListHead) + { + /* Get pointer to the current DTE */ + DataTableEntry = CONTAINING_RECORD(ModuleEntry, + LDR_DATA_TABLE_ENTRY, + InLoadOrderLinks); + + DbgPrint((DPRINT_WINDOWS, "WinLdrCheckForLoadedDll: DTE %p, EP %p\n", + DataTableEntry, DataTableEntry->EntryPoint)); + + /* Compare names */ + if (WinLdrpCompareDllName(DllName, &DataTableEntry->BaseDllName)) + { + /* Yes, found it, report pointer to the loaded module's DTE + to the caller and increase load count for it */ + *LoadedEntry = DataTableEntry; + DataTableEntry->LoadCount++; + DbgPrint((DPRINT_WINDOWS, "WinLdrCheckForLoadedDll: LoadedEntry %X\n", DataTableEntry)); + return TRUE; + } + + /* Go to the next entry */ + ModuleEntry = ModuleEntry->Flink; + } + + /* Nothing found */ + return FALSE; +} + +BOOLEAN +WinLdrScanImportDescriptorTable(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, + IN PCCH DirectoryPath, + IN PLDR_DATA_TABLE_ENTRY ScanDTE) +{ + PLDR_DATA_TABLE_ENTRY DataTableEntry; + PIMAGE_IMPORT_DESCRIPTOR ImportTable; + ULONG ImportTableSize; + PCH ImportName; + BOOLEAN Status; + + /* Get a pointer to the import table of this image */ + ImportTable = (PIMAGE_IMPORT_DESCRIPTOR)RtlImageDirectoryEntryToData(VaToPa(ScanDTE->DllBase), + TRUE, IMAGE_DIRECTORY_ENTRY_IMPORT, &ImportTableSize); + + { + UNICODE_STRING BaseName; + BaseName.Buffer = VaToPa(ScanDTE->BaseDllName.Buffer); + BaseName.MaximumLength = ScanDTE->BaseDllName.MaximumLength; + BaseName.Length = ScanDTE->BaseDllName.Length; + DbgPrint((DPRINT_WINDOWS, "WinLdrScanImportDescriptorTable(): %wZ ImportTable = 0x%X\n", + &BaseName, ImportTable)); + } + + /* If image doesn't have any import directory - just return success */ + if (ImportTable == NULL) + return TRUE; + + /* Loop through all entries */ + for (;(ImportTable->Name != 0) && (ImportTable->FirstThunk != 0);ImportTable++) + { + /* Get pointer to the name */ + ImportName = (PCH)VaToPa(RVA(ScanDTE->DllBase, ImportTable->Name)); + DbgPrint((DPRINT_WINDOWS, "WinLdrScanImportDescriptorTable(): Looking at %s\n", ImportName)); + + /* In case we get a reference to ourselves - just skip it */ + if (WinLdrpCompareDllName(ImportName, &ScanDTE->BaseDllName)) + continue; + + /* Load the DLL if it is not already loaded */ + if (!WinLdrCheckForLoadedDll(WinLdrBlock, ImportName, &DataTableEntry)) + { + Status = WinLdrpLoadAndScanReferencedDll(WinLdrBlock, + DirectoryPath, + ImportName, + &DataTableEntry); + + if (!Status) + { + DbgPrint((DPRINT_WINDOWS, "WinLdrpLoadAndScanReferencedDll() failed\n")); + return Status; + } + } + + /* Scan its import address table */ + Status = WinLdrpScanImportAddressTable( + WinLdrBlock, + DataTableEntry->DllBase, + ScanDTE->DllBase, + (PIMAGE_THUNK_DATA)RVA(ScanDTE->DllBase, ImportTable->FirstThunk)); + + if (!Status) + { + DbgPrint((DPRINT_WINDOWS, "WinLdrpScanImportAddressTable() failed\n")); + return Status; + } + } + + return TRUE; +} + +BOOLEAN +WinLdrAllocateDataTableEntry(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, + IN PCCH BaseDllName, + IN PCCH FullDllName, + IN PVOID BasePA, + OUT PLDR_DATA_TABLE_ENTRY *NewEntry) +{ + PVOID BaseVA = PaToVa(BasePA); + PWSTR Buffer; + PLDR_DATA_TABLE_ENTRY DataTableEntry; + PIMAGE_NT_HEADERS NtHeaders; + USHORT Length; + + /* Allocate memory for a data table entry, zero-initialize it */ + DataTableEntry = (PLDR_DATA_TABLE_ENTRY)MmHeapAlloc(sizeof(LDR_DATA_TABLE_ENTRY)); + if (DataTableEntry == NULL) + return FALSE; + RtlZeroMemory(DataTableEntry, sizeof(LDR_DATA_TABLE_ENTRY)); + + /* Get NT headers from the image */ + NtHeaders = RtlImageNtHeader(BasePA); + + /* Initialize corresponding fields of DTE based on NT headers value */ + DataTableEntry->DllBase = BaseVA; + DataTableEntry->SizeOfImage = NtHeaders->OptionalHeader.SizeOfImage; + DataTableEntry->EntryPoint = RVA(BaseVA, NtHeaders->OptionalHeader.AddressOfEntryPoint); + DataTableEntry->SectionPointer = 0; + DataTableEntry->CheckSum = NtHeaders->OptionalHeader.CheckSum; + + /* Initialize BaseDllName field (UNICODE_STRING) from the Ansi BaseDllName + by simple conversion - copying each character */ + Length = (USHORT)(strlen(BaseDllName) * sizeof(WCHAR)); + Buffer = (PWSTR)MmHeapAlloc(Length); + if (Buffer == NULL) + { + MmHeapFree(DataTableEntry); + return FALSE; + } + RtlZeroMemory(Buffer, Length); + + DataTableEntry->BaseDllName.Length = Length; + DataTableEntry->BaseDllName.MaximumLength = Length; + DataTableEntry->BaseDllName.Buffer = PaToVa(Buffer); + while (*BaseDllName != 0) + { + *Buffer++ = *BaseDllName++; + } + + /* Initialize FullDllName field (UNICODE_STRING) from the Ansi FullDllName + using the same method */ + Length = (USHORT)(strlen(FullDllName) * sizeof(WCHAR)); + Buffer = (PWSTR)MmHeapAlloc(Length); + if (Buffer == NULL) + { + MmHeapFree(DataTableEntry); + return FALSE; + } + RtlZeroMemory(Buffer, Length); + + DataTableEntry->FullDllName.Length = Length; + DataTableEntry->FullDllName.MaximumLength = Length; + DataTableEntry->FullDllName.Buffer = PaToVa(Buffer); + while (*FullDllName != 0) + { + *Buffer++ = *FullDllName++; + } + + /* Initialize what's left - LoadCount which is 1, and set Flags so that + we know this entry is processed */ + DataTableEntry->Flags = LDRP_ENTRY_PROCESSED; + DataTableEntry->LoadCount = 1; + + /* Insert this DTE to a list in the LPB */ + InsertTailList(&WinLdrBlock->LoadOrderListHead, &DataTableEntry->InLoadOrderLinks); + + /* Save pointer to a newly allocated and initialized entry */ + *NewEntry = DataTableEntry; + + /* Return success */ + return TRUE; +} + +/* WinLdrLoadImage loads the specified image from the file (it doesn't + perform any additional operations on the filename, just directly + calls the file I/O routines), and relocates it so that it's ready + to be used when paging is enabled. + Addressing mode: physical + */ +BOOLEAN +WinLdrLoadImage(IN PCHAR FileName, + TYPE_OF_MEMORY MemoryType, + OUT PVOID *ImageBasePA) +{ + PFILE FileHandle; + PVOID PhysicalBase; + PVOID VirtualBase = NULL; + UCHAR HeadersBuffer[SECTOR_SIZE * 2]; + PIMAGE_NT_HEADERS NtHeaders; + PIMAGE_SECTION_HEADER SectionHeader; + ULONG VirtualSize, SizeOfRawData, NumberOfSections; + BOOLEAN Status; + ULONG i, BytesRead; + + CHAR ProgressString[256]; + + /* Inform user we are loading files */ + sprintf(ProgressString, "Loading %s...", FileName); + UiDrawProgressBarCenter(1, 100, ProgressString); + + /* Open the image file */ + FileHandle = FsOpenFile(FileName); + + if (FileHandle == NULL) + { + //Print(L"Can not open the file %s\n",FileName); + UiMessageBox("Can not open the file"); + return FALSE; + } + + /* Load the first 2 sectors of the image so we can read the PE header */ + Status = FsReadFile(FileHandle, SECTOR_SIZE * 2, NULL, HeadersBuffer); + if (!Status) + { + //Print(L"Error reading from file %s\n", FileName); + UiMessageBox("Error reading from file"); + FsCloseFile(FileHandle); + return FALSE; + } + + /* Now read the MZ header to get the offset to the PE Header */ + NtHeaders = RtlImageNtHeader(HeadersBuffer); + + if (!NtHeaders) + { + //Print(L"Error - no NT header found in %s\n", FileName); + UiMessageBox("Error - no NT header found"); + FsCloseFile(FileHandle); + return FALSE; + } + + /* Ensure this is executable image */ + if (((NtHeaders->FileHeader.Characteristics & IMAGE_FILE_EXECUTABLE_IMAGE) == 0)) + { + //Print(L"Not an executable image %s\n", FileName); + UiMessageBox("Not an executable image"); + FsCloseFile(FileHandle); + return FALSE; + } + + /* Store number of sections to read and a pointer to the first section */ + NumberOfSections = NtHeaders->FileHeader.NumberOfSections; + SectionHeader = IMAGE_FIRST_SECTION(NtHeaders); + + /* Try to allocate this memory, if fails - allocate somewhere else */ + PhysicalBase = MmAllocateMemoryAtAddress(NtHeaders->OptionalHeader.SizeOfImage, + (PVOID)((ULONG)NtHeaders->OptionalHeader.ImageBase & (KSEG0_BASE - 1)), + MemoryType); + + if (PhysicalBase == NULL) + { + /* It's ok, we don't panic - let's allocate again at any other "low" place */ + PhysicalBase = MmAllocateMemoryWithType(NtHeaders->OptionalHeader.SizeOfImage, MemoryType); + + if (PhysicalBase == NULL) + { + //Print(L"Failed to alloc pages for image %s\n", FileName); + UiMessageBox("Failed to alloc pages for image"); + FsCloseFile(FileHandle); + return FALSE; + } + } + + /* This is the real image base - in form of a virtual address */ + VirtualBase = PaToVa(PhysicalBase); + + DbgPrint((DPRINT_WINDOWS, "Base PA: 0x%X, VA: 0x%X\n", PhysicalBase, VirtualBase)); + + /* Set to 0 position and fully load the file image */ + FsSetFilePointer(FileHandle, 0); + + Status = FsReadFile(FileHandle, NtHeaders->OptionalHeader.SizeOfHeaders, NULL, PhysicalBase); + + if (!Status) + { + //Print(L"Error reading headers %s\n", FileName); + UiMessageBox("Error reading headers"); + FsCloseFile(FileHandle); + return FALSE; + } + + /* Reload the NT Header */ + NtHeaders = RtlImageNtHeader(PhysicalBase); + + /* Load the first section */ + SectionHeader = IMAGE_FIRST_SECTION(NtHeaders); + + /* Fill output parameters */ + *ImageBasePA = PhysicalBase; + + /* Walk through each section and read it (check/fix any possible + bad situations, if they arise) */ + for (i = 0; i < NumberOfSections; i++) + { + VirtualSize = SectionHeader->Misc.VirtualSize; + SizeOfRawData = SectionHeader->SizeOfRawData; + + /* Handle a case when VirtualSize equals 0 */ + if (VirtualSize == 0) + VirtualSize = SizeOfRawData; + + /* If PointerToRawData is 0, then force its size to be also 0 */ + if (SectionHeader->PointerToRawData == 0) + { + SizeOfRawData = 0; + } + else + { + /* Cut the loaded size to the VirtualSize extents */ + if (SizeOfRawData > VirtualSize) + SizeOfRawData = VirtualSize; + } + + /* Actually read the section (if its size is not 0) */ + if (SizeOfRawData != 0) + { + /* Seek to the correct position */ + FsSetFilePointer(FileHandle, SectionHeader->PointerToRawData); + + DbgPrint((DPRINT_WINDOWS, "SH->VA: 0x%X\n", SectionHeader->VirtualAddress)); + + /* Read this section from the file, size = SizeOfRawData */ + Status = FsReadFile(FileHandle, SizeOfRawData, &BytesRead, (PUCHAR)PhysicalBase + SectionHeader->VirtualAddress); + + if (!Status && (BytesRead == 0)) + { + DbgPrint((DPRINT_WINDOWS, "WinLdrLoadImage(): Error reading section from file!\n")); + break; + } + } + + /* Size of data is less than the virtual size - fill up the remainder with zeroes */ + if (SizeOfRawData < VirtualSize) + { + DbgPrint((DPRINT_WINDOWS, "WinLdrLoadImage(): SORD %d < VS %d", SizeOfRawData, VirtualSize)); + RtlZeroMemory((PVOID)(SectionHeader->VirtualAddress + (ULONG)PhysicalBase + SizeOfRawData), VirtualSize - SizeOfRawData); + } + + SectionHeader++; + } + + /* We are done with the file - close it */ + FsCloseFile(FileHandle); + + /* If loading failed - return right now */ + if (!Status) + return FALSE; + + + /* Relocate the image, if it needs it */ + if (NtHeaders->OptionalHeader.ImageBase != (ULONG)VirtualBase) + { + DbgPrint((DPRINT_WINDOWS, "Relocating %p -> %p\n", + NtHeaders->OptionalHeader.ImageBase, VirtualBase)); + Status = (BOOLEAN)LdrRelocateImageWithBias(PhysicalBase, + (ULONG_PTR)VirtualBase - (ULONG_PTR)PhysicalBase, + "FreeLdr", + TRUE, + TRUE, /* in case of conflict still return success */ + FALSE); + } + + return Status; +} + +/* PRIVATE FUNCTIONS *******************************************************/ + +/* DllName - physical, UnicodeString->Buffer - virtual */ +BOOLEAN +WinLdrpCompareDllName(IN PCH DllName, + IN PUNICODE_STRING UnicodeName) +{ + PWSTR Buffer; + UNICODE_STRING UnicodeNamePA; + ULONG i, Length; + + /* First obvious check: for length of two names */ + Length = strlen(DllName); + + UnicodeNamePA.Length = UnicodeName->Length; + UnicodeNamePA.MaximumLength = UnicodeName->MaximumLength; + UnicodeNamePA.Buffer = VaToPa(UnicodeName->Buffer); + DbgPrint((DPRINT_WINDOWS, "WinLdrpCompareDllName: %s and %wZ, Length = %d " + "UN->Length %d\n", DllName, &UnicodeNamePA, Length, UnicodeName->Length)); + + if ((Length * sizeof(WCHAR)) > UnicodeName->Length) + return FALSE; + + /* Store pointer to unicode string's buffer */ + Buffer = VaToPa(UnicodeName->Buffer); + + /* Loop character by character */ + for (i = 0; i < Length; i++) + { + /* Compare two characters, uppercasing them */ + if (toupper(*DllName) != toupper((CHAR)*Buffer)) + return FALSE; + + /* Move to the next character */ + DllName++; + Buffer++; + } + + /* Check, if strings either fully match, or match till the "." (w/o extension) */ + if ((UnicodeName->Length == Length * sizeof(WCHAR)) || (*Buffer == L'.')) + { + /* Yes they do */ + return TRUE; + } + + /* Strings don't match, return FALSE */ + return FALSE; +} + +BOOLEAN +WinLdrpBindImportName(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, + IN PVOID DllBase, + IN PVOID ImageBase, + IN PIMAGE_THUNK_DATA ThunkData, + IN PIMAGE_EXPORT_DIRECTORY ExportDirectory, + IN ULONG ExportSize, + IN BOOLEAN ProcessForwards) +{ + ULONG Ordinal; + PULONG NameTable, FunctionTable; + PUSHORT OrdinalTable; + LONG High, Low, Middle, Result; + ULONG Hint; + + //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName(): DllBase 0x%X, ImageBase 0x%X, ThunkData 0x%X, ExportDirectory 0x%X, ExportSize %d, ProcessForwards 0x%X\n", + // DllBase, ImageBase, ThunkData, ExportDirectory, ExportSize, ProcessForwards)); + + /* Check passed DllBase param */ + if(DllBase == NULL) + { + DbgPrint((DPRINT_WINDOWS, "WARNING: DllBase == NULL!\n")); + return FALSE; + } + + /* Convert all non-critical pointers to PA from VA */ + ThunkData = VaToPa(ThunkData); + + /* Is the reference by ordinal? */ + if (IMAGE_SNAP_BY_ORDINAL(ThunkData->u1.Ordinal) && !ProcessForwards) + { + /* Yes, calculate the ordinal */ + Ordinal = (ULONG)(IMAGE_ORDINAL(ThunkData->u1.Ordinal) - (UINT32)ExportDirectory->Base); + //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName(): Ordinal %d\n", Ordinal)); + } + else + { + /* It's reference by name, we have to look it up in the export directory */ + if (!ProcessForwards) + { + /* AddressOfData in thunk entry will become a virtual address (from relative) */ + //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName(): ThunkData->u1.AOD was %p\n", ThunkData->u1.AddressOfData)); + ThunkData->u1.AddressOfData = + (ULONG)RVA(ImageBase, ThunkData->u1.AddressOfData); + //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName(): ThunkData->u1.AOD became %p\n", ThunkData->u1.AddressOfData)); + } + + /* Get pointers to Name and Ordinal tables (RVA -> VA) */ + NameTable = (PULONG)VaToPa(RVA(DllBase, ExportDirectory->AddressOfNames)); + OrdinalTable = (PUSHORT)VaToPa(RVA(DllBase, ExportDirectory->AddressOfNameOrdinals)); + + //DbgPrint((DPRINT_WINDOWS, "NameTable 0x%X, OrdinalTable 0x%X, ED->AddressOfNames 0x%X, ED->AOFO 0x%X\n", + // NameTable, OrdinalTable, ExportDirectory->AddressOfNames, ExportDirectory->AddressOfNameOrdinals)); + + /* Get the hint, convert it to a physical pointer */ + Hint = ((PIMAGE_IMPORT_BY_NAME)VaToPa((PVOID)ThunkData->u1.AddressOfData))->Hint; + //DbgPrint((DPRINT_WINDOWS, "HintIndex %d\n", Hint)); + + /* If Hint is less than total number of entries in the export directory, + and import name == export name, then we can just get it from the OrdinalTable */ + if ( + (Hint < ExportDirectory->NumberOfNames) && + ( + strcmp(VaToPa(&((PIMAGE_IMPORT_BY_NAME)VaToPa((PVOID)ThunkData->u1.AddressOfData))->Name[0]), + (PCHAR)VaToPa( RVA(DllBase, NameTable[Hint])) ) == 0 + ) + ) + { + Ordinal = OrdinalTable[Hint]; + //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName(): Ordinal %d\n", Ordinal)); + } + else + { + /* It's not the easy way, we have to lookup import name in the name table. + Let's use a binary search for this task. */ + + //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName() looking up the import name using binary search...\n")); + + /* Low boundary is set to 0, and high boundary to the maximum index */ + Low = 0; + High = ExportDirectory->NumberOfNames - 1; + + /* Perform a binary-search loop */ + while (High >= Low) + { + /* Divide by 2 by shifting to the right once */ + Middle = (Low + High) >> 1; + + /* Compare the names */ + Result = strcmp(VaToPa(&((PIMAGE_IMPORT_BY_NAME)VaToPa((PVOID)ThunkData->u1.AddressOfData))->Name[0]), + (PCHAR)VaToPa(RVA(DllBase, NameTable[Middle]))); + + /*DbgPrint((DPRINT_WINDOWS, "Binary search: comparing Import '__', Export '%s'\n",*/ + /*VaToPa(&((PIMAGE_IMPORT_BY_NAME)VaToPa(ThunkData->u1.AddressOfData))->Name[0]),*/ + /*(PCHAR)VaToPa(RVA(DllBase, NameTable[Middle]))));*/ + + /*DbgPrint((DPRINT_WINDOWS, "TE->u1.AOD %p, fulladdr %p\n", + ThunkData->u1.AddressOfData, + ((PIMAGE_IMPORT_BY_NAME)VaToPa(ThunkData->u1.AddressOfData))->Name ));*/ + + + /* Depending on result of strcmp, perform different actions */ + if (Result < 0) + { + /* Adjust top boundary */ + High = Middle - 1; + } + else if (Result > 0) + { + /* Adjust bottom boundary */ + Low = Middle + 1; + } + else + { + /* Yay, found it! */ + break; + } + } + + /* If high boundary is less than low boundary, then no result found */ + if (High < Low) + { + //Print(L"Error in binary search\n"); + DbgPrint((DPRINT_WINDOWS, "Error in binary search!\n")); + return FALSE; + } + + /* Everything allright, get the ordinal */ + Ordinal = OrdinalTable[Middle]; + + //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName() found Ordinal %d\n", Ordinal)); + } + } + + /* Check ordinal number for validity! */ + if (Ordinal >= ExportDirectory->NumberOfFunctions) + { + DbgPrint((DPRINT_WINDOWS, "Ordinal number is invalid!\n")); + return FALSE; + } + + /* Get a pointer to the function table */ + FunctionTable = (PULONG)VaToPa(RVA(DllBase, ExportDirectory->AddressOfFunctions)); + + /* Save a pointer to the function */ + ThunkData->u1.Function = (ULONG)RVA(DllBase, FunctionTable[Ordinal]); + + /* Is it a forwarder? (function pointer isn't within the export directory) */ + if (((ULONG)VaToPa((PVOID)ThunkData->u1.Function) > (ULONG)ExportDirectory) && + ((ULONG)VaToPa((PVOID)ThunkData->u1.Function) < ((ULONG)ExportDirectory + ExportSize))) + { + PLDR_DATA_TABLE_ENTRY DataTableEntry; + CHAR ForwardDllName[255]; + PIMAGE_EXPORT_DIRECTORY RefExportDirectory; + ULONG RefExportSize; + + /* Save the name of the forward dll */ + RtlCopyMemory(ForwardDllName, (PCHAR)VaToPa((PVOID)ThunkData->u1.Function), sizeof(ForwardDllName)); + + /* Strip out its extension */ + *strchr(ForwardDllName,'.') = '\0'; + + DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName(): ForwardDllName %s\n", ForwardDllName)); + if (!WinLdrCheckForLoadedDll(WinLdrBlock, ForwardDllName, &DataTableEntry)) + { + /* We can't continue if DLL couldn't be loaded, so bomb out with an error */ + //Print(L"Error loading DLL!\n"); + DbgPrint((DPRINT_WINDOWS, "Error loading DLL!\n")); + return FALSE; + } + + /* Get pointer to the export directory of loaded DLL */ + RefExportDirectory = (PIMAGE_EXPORT_DIRECTORY) + RtlImageDirectoryEntryToData(VaToPa(DataTableEntry->DllBase), + TRUE, + IMAGE_DIRECTORY_ENTRY_EXPORT, + &RefExportSize); + + /* Fail if it's NULL */ + if (RefExportDirectory) + { + UCHAR Buffer[128]; + IMAGE_THUNK_DATA RefThunkData; + PIMAGE_IMPORT_BY_NAME ImportByName; + PCHAR ImportName; + BOOLEAN Status; + + /* Get pointer to the import name */ + ImportName = strchr((PCHAR)VaToPa((PVOID)ThunkData->u1.Function), '.') + 1; + + /* Create a IMAGE_IMPORT_BY_NAME structure, pointing to the local Buffer */ + ImportByName = (PIMAGE_IMPORT_BY_NAME)Buffer; + + /* Fill the name with the import name */ + RtlCopyMemory(ImportByName->Name, ImportName, strlen(ImportName)+1); + + /* Set Hint to 0 */ + ImportByName->Hint = 0; + + /* And finally point ThunkData's AddressOfData to that structure */ + RefThunkData.u1.AddressOfData = (ULONG)ImportByName; + + /* And recursively call ourselves */ + Status = WinLdrpBindImportName( + WinLdrBlock, + DataTableEntry->DllBase, + ImageBase, + &RefThunkData, + RefExportDirectory, + RefExportSize, + TRUE); + + /* Fill out the ThunkData with data from RefThunkData */ + ThunkData->u1 = RefThunkData.u1; + + /* Return what we got from the recursive call */ + return Status; + } + else + { + /* Fail if ExportDirectory is NULL */ + return FALSE; + } + } + + /* Success! */ + return TRUE; +} + +BOOLEAN +WinLdrpLoadAndScanReferencedDll(PLOADER_PARAMETER_BLOCK WinLdrBlock, + PCCH DirectoryPath, + PCH ImportName, + PLDR_DATA_TABLE_ENTRY *DataTableEntry) +{ + CHAR FullDllName[256]; + BOOLEAN Status; + PVOID BasePA; + + /* Prepare the full path to the file to be loaded */ + strcpy(FullDllName, DirectoryPath); + strcat(FullDllName, ImportName); + + DbgPrint((DPRINT_WINDOWS, "Loading referenced DLL: %s\n", FullDllName)); + //Print(L"Loading referenced DLL: %s\n", FullDllName); + + /* Load the image */ + Status = WinLdrLoadImage(FullDllName, LoaderHalCode, &BasePA); + + if (!Status) + { + DbgPrint((DPRINT_WINDOWS, "WinLdrLoadImage() failed\n")); + return Status; + } + + /* Allocate DTE for newly loaded DLL */ + Status = WinLdrAllocateDataTableEntry(WinLdrBlock, + ImportName, + FullDllName, + BasePA, + DataTableEntry); + + if (!Status) + { + DbgPrint((DPRINT_WINDOWS, + "WinLdrAllocateDataTableEntry() failed with Status=0x%X\n", Status)); + return Status; + } + + /* Scan its dependencies too */ + DbgPrint((DPRINT_WINDOWS, + "WinLdrScanImportDescriptorTable() calling ourselves for %S\n", + VaToPa((*DataTableEntry)->BaseDllName.Buffer))); + Status = WinLdrScanImportDescriptorTable(WinLdrBlock, DirectoryPath, *DataTableEntry); + + if (!Status) + { + DbgPrint((DPRINT_WINDOWS, + "WinLdrScanImportDescriptorTable() failed with Status=0x%X\n", Status)); + return Status; + } + + return TRUE; +} + +BOOLEAN +WinLdrpScanImportAddressTable(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, + IN PVOID DllBase, + IN PVOID ImageBase, + IN PIMAGE_THUNK_DATA ThunkData) +{ + PIMAGE_EXPORT_DIRECTORY ExportDirectory = NULL; + BOOLEAN Status; + ULONG ExportSize; + + DbgPrint((DPRINT_WINDOWS, "WinLdrpScanImportAddressTable(): DllBase 0x%X, " + "ImageBase 0x%X, ThunkData 0x%X\n", DllBase, ImageBase, ThunkData)); + + /* Obtain the export table from the DLL's base */ + if (DllBase == NULL) + { + //Print(L"Error, DllBase == NULL!\n"); + return FALSE; + } + else + { + ExportDirectory = + (PIMAGE_EXPORT_DIRECTORY)RtlImageDirectoryEntryToData(VaToPa(DllBase), + TRUE, + IMAGE_DIRECTORY_ENTRY_EXPORT, + &ExportSize); + } + + DbgPrint((DPRINT_WINDOWS, "WinLdrpScanImportAddressTable(): ExportDirectory 0x%X\n", ExportDirectory)); + + /* If pointer to Export Directory is */ + if (ExportDirectory == NULL) + return FALSE; + + /* Go through each entry in the thunk table and bind it */ + while (((PIMAGE_THUNK_DATA)VaToPa(ThunkData))->u1.AddressOfData != 0) + { + /* Bind it */ + Status = WinLdrpBindImportName( + WinLdrBlock, + DllBase, + ImageBase, + ThunkData, + ExportDirectory, + ExportSize, + FALSE); + + /* Move to the next entry */ + ThunkData++; + + /* Return error if binding was unsuccessful */ + if (!Status) + return Status; + } + + /* Return success */ + return TRUE; +} diff --git a/reactos/boot/freeldr/freeldr/windows/winldr.c b/reactos/boot/freeldr/freeldr/windows/winldr.c index 622d258d8f7..4bd5ee5002f 100644 --- a/reactos/boot/freeldr/freeldr/windows/winldr.c +++ b/reactos/boot/freeldr/freeldr/windows/winldr.c @@ -364,55 +364,55 @@ WinLdrLoadBootDrivers(PLOADER_PARAMETER_BLOCK LoaderBlock, PVOID WinLdrLoadModule(PCSTR ModuleName, ULONG *Size, TYPE_OF_MEMORY MemoryType) { - PFILE FileHandle; - PVOID PhysicalBase; - ULONG FileSize; - BOOLEAN Status; - - //CHAR ProgressString[256]; - - /* Inform user we are loading files */ - //sprintf(ProgressString, "Loading %s...", FileName); - //UiDrawProgressBarCenter(1, 100, ProgressString); - - DbgPrint((DPRINT_WINDOWS, "Loading module %s\n", ModuleName)); - *Size = 0; - - /* Open the image file */ - FileHandle = FsOpenFile(ModuleName); - - if (FileHandle == NULL) - { - /* In case of errors, we just return, without complaining to the user */ - return NULL; - } - - /* Get this file's size */ - FileSize = FsGetFileSize(FileHandle); - *Size = FileSize; - - /* Allocate memory */ - PhysicalBase = MmAllocateMemoryWithType(FileSize, MemoryType); - if (PhysicalBase == NULL) - { - FsCloseFile(FileHandle); - return NULL; - } - - /* Load whole file */ - Status = FsReadFile(FileHandle, FileSize, NULL, PhysicalBase); - if (!Status) - { - FsCloseFile(FileHandle); - return NULL; - } - - DbgPrint((DPRINT_WINDOWS, "Loaded %s at 0x%x with size 0x%x\n", ModuleName, PhysicalBase, FileSize)); - - /* We are done with the file - close it */ - FsCloseFile(FileHandle); - - return PhysicalBase; + PFILE FileHandle; + PVOID PhysicalBase; + ULONG FileSize; + BOOLEAN Status; + + //CHAR ProgressString[256]; + + /* Inform user we are loading files */ + //sprintf(ProgressString, "Loading %s...", FileName); + //UiDrawProgressBarCenter(1, 100, ProgressString); + + DbgPrint((DPRINT_WINDOWS, "Loading module %s\n", ModuleName)); + *Size = 0; + + /* Open the image file */ + FileHandle = FsOpenFile(ModuleName); + + if (FileHandle == NULL) + { + /* In case of errors, we just return, without complaining to the user */ + return NULL; + } + + /* Get this file's size */ + FileSize = FsGetFileSize(FileHandle); + *Size = FileSize; + + /* Allocate memory */ + PhysicalBase = MmAllocateMemoryWithType(FileSize, MemoryType); + if (PhysicalBase == NULL) + { + FsCloseFile(FileHandle); + return NULL; + } + + /* Load whole file */ + Status = FsReadFile(FileHandle, FileSize, NULL, PhysicalBase); + if (!Status) + { + FsCloseFile(FileHandle); + return NULL; + } + + DbgPrint((DPRINT_WINDOWS, "Loaded %s at 0x%x with size 0x%x\n", ModuleName, PhysicalBase, FileSize)); + + /* We are done with the file - close it */ + FsCloseFile(FileHandle); + + return PhysicalBase; } diff --git a/reactos/boot/freeldr/freeldr/windows/wlmemory.c b/reactos/boot/freeldr/freeldr/windows/wlmemory.c index 6ae0d1dbca6..b8d5d435863 100644 --- a/reactos/boot/freeldr/freeldr/windows/wlmemory.c +++ b/reactos/boot/freeldr/freeldr/windows/wlmemory.c @@ -1,960 +1,960 @@ -/* - * PROJECT: EFI Windows Loader - * LICENSE: GPL - See COPYING in the top level directory - * FILE: freeldr/winldr/wlmemory.c - * PURPOSE: Memory related routines - * PROGRAMMERS: Aleksey Bragin (aleksey@reactos.org) - */ - -/* INCLUDES ***************************************************************/ - -#include - -#include -#include - -extern ULONG TotalNLSSize; -extern ULONG LoaderPagesSpanned; - -// This is needed because headers define wrong one for ReactOS -#undef KIP0PCRADDRESS -#define KIP0PCRADDRESS 0xffdff000 - -#define HYPER_SPACE_ENTRY 0x300 - -PCHAR MemTypeDesc[] = { - "ExceptionBlock ", // ? - "SystemBlock ", // ? - "Free ", - "Bad ", // used - "LoadedProgram ", // == Free - "FirmwareTemporary ", // == Free - "FirmwarePermanent ", // == Bad - "OsloaderHeap ", // used - "OsloaderStack ", // == Free - "SystemCode ", - "HalCode ", - "BootDriver ", // not used - "ConsoleInDriver ", // ? - "ConsoleOutDriver ", // ? - "StartupDpcStack ", // ? - "StartupKernelStack", // ? - "StartupPanicStack ", // ? - "StartupPcrPage ", // ? - "StartupPdrPage ", // ? - "RegistryData ", // used - "MemoryData ", // not used - "NlsData ", // used - "SpecialMemory ", // == Bad - "BBTMemory " // == Bad - }; - -VOID -WinLdrpDumpMemoryDescriptors(PLOADER_PARAMETER_BLOCK LoaderBlock); - - -VOID -MempAddMemoryBlock(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, - ULONG BasePage, - ULONG PageCount, - ULONG Type); -VOID -WinLdrInsertDescriptor(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, - IN PMEMORY_ALLOCATION_DESCRIPTOR NewDescriptor); - -VOID -WinLdrRemoveDescriptor(IN PMEMORY_ALLOCATION_DESCRIPTOR Descriptor); - -VOID -WinLdrSetProcessorContext(PVOID GdtIdt, IN ULONG Pcr, IN ULONG Tss); - -// This is needed only for SetProcessorContext routine -#pragma pack(2) - typedef struct - { - USHORT Limit; - ULONG Base; - } GDTIDT; -#pragma pack(4) - -// this is needed for new IDT filling -#if 0 -extern ULONG_PTR i386DivideByZero; -extern ULONG_PTR i386DebugException; -extern ULONG_PTR i386NMIException; -extern ULONG_PTR i386Breakpoint; -extern ULONG_PTR i386Overflow; -extern ULONG_PTR i386BoundException; -extern ULONG_PTR i386InvalidOpcode; -extern ULONG_PTR i386FPUNotAvailable; -extern ULONG_PTR i386DoubleFault; -extern ULONG_PTR i386CoprocessorSegment; -extern ULONG_PTR i386InvalidTSS; -extern ULONG_PTR i386SegmentNotPresent; -extern ULONG_PTR i386StackException; -extern ULONG_PTR i386GeneralProtectionFault; -extern ULONG_PTR i386PageFault; // exc 14 -extern ULONG_PTR i386CoprocessorError; // exc 16 -extern ULONG_PTR i386AlignmentCheck; // exc 17 -#endif - -/* GLOBALS ***************************************************************/ - -PHARDWARE_PTE PDE; -PHARDWARE_PTE HalPageTable; - -PUCHAR PhysicalPageTablesBuffer; -PUCHAR KernelPageTablesBuffer; -ULONG PhysicalPageTables; -ULONG KernelPageTables; - -MEMORY_ALLOCATION_DESCRIPTOR *Mad; -ULONG MadCount = 0; - - -/* FUNCTIONS **************************************************************/ - -BOOLEAN -MempAllocatePageTables() -{ - ULONG NumPageTables, TotalSize; - PUCHAR Buffer; - // It's better to allocate PDE + PTEs contigiuos - - // Max number of entries = MaxPageNum >> 10 - // FIXME: This is a number to describe ALL physical memory - // and windows doesn't expect ALL memory mapped... - NumPageTables = (GetSystemMemorySize() >> MM_PAGE_SHIFT) >> 10; - - DbgPrint((DPRINT_WINDOWS, "NumPageTables = %d\n", NumPageTables)); - - // Allocate memory block for all these things: - // PDE, HAL mapping page table, physical mapping, kernel mapping - TotalSize = (1+1+NumPageTables*2)*MM_PAGE_SIZE; - - // PDE+HAL+KernelPTEs == MemoryData - Buffer = MmAllocateMemoryWithType( - TotalSize - NumPageTables*MM_PAGE_SIZE, LoaderMemoryData); - - // Physical PTEs = FirmwareTemporary - PhysicalPageTablesBuffer = MmAllocateMemoryWithType( - NumPageTables*MM_PAGE_SIZE, LoaderFirmwareTemporary); - - if (Buffer + (TotalSize - NumPageTables*MM_PAGE_SIZE) != - PhysicalPageTablesBuffer) - { - DbgPrint((DPRINT_WINDOWS, "There was a problem allocating two adjacent blocks of memory!")); - } - - if (Buffer == NULL || PhysicalPageTablesBuffer == NULL) - { - UiMessageBox("Impossible to allocate memory block for page tables!"); - return FALSE; - } - - // Zero all this memory block - RtlZeroMemory(Buffer, TotalSize); - - // Set up pointers correctly now - PDE = (PHARDWARE_PTE)Buffer; - - // Map the page directory at 0xC0000000 (maps itself) - PDE[HYPER_SPACE_ENTRY].PageFrameNumber = (ULONG)PDE >> MM_PAGE_SHIFT; - PDE[HYPER_SPACE_ENTRY].Valid = 1; - PDE[HYPER_SPACE_ENTRY].Write = 1; - - // The last PDE slot is allocated for HAL's memory mapping (Virtual Addresses 0xFFC00000 - 0xFFFFFFFF) - HalPageTable = (PHARDWARE_PTE)&Buffer[MM_PAGE_SIZE*1]; - - // Map it - PDE[1023].PageFrameNumber = (ULONG)HalPageTable >> MM_PAGE_SHIFT; - PDE[1023].Valid = 1; - PDE[1023].Write = 1; - - // Store pointer to the table for easier access - KernelPageTablesBuffer = &Buffer[MM_PAGE_SIZE*2]; - - // Zero counters of page tables used - PhysicalPageTables = 0; - KernelPageTables = 0; - - return TRUE; -} - -VOID -MempAllocatePTE(ULONG Entry, PHARDWARE_PTE *PhysicalPT, PHARDWARE_PTE *KernelPT) -{ - //Print(L"Creating PDE Entry %X\n", Entry); - - // Identity mapping - *PhysicalPT = (PHARDWARE_PTE)&PhysicalPageTablesBuffer[PhysicalPageTables*MM_PAGE_SIZE]; - PhysicalPageTables++; - - PDE[Entry].PageFrameNumber = (ULONG)*PhysicalPT >> MM_PAGE_SHIFT; - PDE[Entry].Valid = 1; - PDE[Entry].Write = 1; - - if (Entry+(KSEG0_BASE >> 22) > 1023) - { - DbgPrint((DPRINT_WINDOWS, "WARNING! Entry: %X > 1023\n", Entry+(KSEG0_BASE >> 22))); - } - - // Kernel-mode mapping - *KernelPT = (PHARDWARE_PTE)&KernelPageTablesBuffer[KernelPageTables*MM_PAGE_SIZE]; - KernelPageTables++; - - PDE[Entry+(KSEG0_BASE >> 22)].PageFrameNumber = ((ULONG)*KernelPT >> MM_PAGE_SHIFT); - PDE[Entry+(KSEG0_BASE >> 22)].Valid = 1; - PDE[Entry+(KSEG0_BASE >> 22)].Write = 1; -} - -BOOLEAN -MempSetupPaging(IN ULONG StartPage, - IN ULONG NumberOfPages) -{ - PHARDWARE_PTE PhysicalPT; - PHARDWARE_PTE KernelPT; - ULONG Entry, Page; - - //Print(L"MempSetupPaging: SP 0x%X, Number: 0x%X\n", StartPage, NumberOfPages); - - // HACK - if (StartPage+NumberOfPages >= 0x80000) - { - // - // We can't map this as it requires more than 1 PDE - // and in fact it's not possible at all ;) - // - //Print(L"skipping...\n"); - return TRUE; - } - - // - // Now actually set up the page tables for identity mapping - // - for (Page=StartPage; Page < StartPage+NumberOfPages; Page++) - { - Entry = Page >> 10; - - if (((PULONG)PDE)[Entry] == 0) - { - MempAllocatePTE(Entry, &PhysicalPT, &KernelPT); - } - else - { - PhysicalPT = (PHARDWARE_PTE)(PDE[Entry].PageFrameNumber << MM_PAGE_SHIFT); - KernelPT = (PHARDWARE_PTE)(PDE[Entry+(KSEG0_BASE >> 22)].PageFrameNumber << MM_PAGE_SHIFT); - } - - if (Page == 0) - { - PhysicalPT[Page & 0x3ff].PageFrameNumber = Page; - PhysicalPT[Page & 0x3ff].Valid = 0; - PhysicalPT[Page & 0x3ff].Write = 0; - - KernelPT[Page & 0x3ff].PageFrameNumber = Page; - KernelPT[Page & 0x3ff].Valid = 0; - KernelPT[Page & 0x3ff].Write = 0; - } - else - { - PhysicalPT[Page & 0x3ff].PageFrameNumber = Page; - PhysicalPT[Page & 0x3ff].Valid = 1; - PhysicalPT[Page & 0x3ff].Write = 1; - - KernelPT[Page & 0x3ff].PageFrameNumber = Page; - KernelPT[Page & 0x3ff].Valid = 1; - KernelPT[Page & 0x3ff].Write = 1; - } - } - - return TRUE; -} - -VOID -MempDisablePages() -{ - int i; - - // - // We need to delete kernel mapping from memory areas which are - // marked as Special or Permanent memory (thus non-accessible) - // - - for (i=0; i LoaderPagesSpanned) - EndPage = LoaderPagesSpanned; - } - - for (Page = StartPage; Page < EndPage; Page++) - { - PHARDWARE_PTE KernelPT; - ULONG Entry = (Page >> 10) + (KSEG0_BASE >> 22); - - if (PDE[Entry].Valid) - { - KernelPT = (PHARDWARE_PTE)(PDE[Entry].PageFrameNumber << MM_PAGE_SHIFT); - - if (KernelPT) - { - KernelPT[Page & 0x3ff].PageFrameNumber = 0; - KernelPT[Page & 0x3ff].Valid = 0; - KernelPT[Page & 0x3ff].Write = 0; - } - } - } - } - } -} - -VOID -MempAddMemoryBlock(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, - ULONG BasePage, - ULONG PageCount, - ULONG Type) -{ - BOOLEAN Status; - - // - // Check for some weird stuff at the top - // - if (BasePage + PageCount > 0xF0000) - { - // - // Just skip this, without even adding to MAD list - // - return; - } - - // - // Set Base page, page count and type - // - Mad[MadCount].BasePage = BasePage; - Mad[MadCount].PageCount = PageCount; - Mad[MadCount].MemoryType = Type; - - // - // Check if it's more than the allowed for OS loader - // if yes - don't map the pages, just add as FirmwareTemporary - // - if (BasePage + PageCount > LoaderPagesSpanned) - { - if (Mad[MadCount].MemoryType != LoaderSpecialMemory && - Mad[MadCount].MemoryType != LoaderFirmwarePermanent && - Mad[MadCount].MemoryType != LoaderFree) - { - DbgPrint((DPRINT_WINDOWS, "Setting page %x %x to Temporary from %d\n", - BasePage, PageCount, Mad[MadCount].MemoryType)); - Mad[MadCount].MemoryType = LoaderFirmwareTemporary; - } - - WinLdrInsertDescriptor(LoaderBlock, &Mad[MadCount]); - MadCount++; - - return; - } - - // - // Add descriptor - // - WinLdrInsertDescriptor(LoaderBlock, &Mad[MadCount]); - MadCount++; - - // - // Map it (don't map low 1Mb because it was already contigiously - // mapped in WinLdrTurnOnPaging) - // - if (BasePage >= 0x100) - { - Status = MempSetupPaging(BasePage, PageCount); - if (!Status) - { - DbgPrint((DPRINT_WINDOWS, "Error during MempSetupPaging\n")); - return; - } - } -} - -#ifdef _M_IX86 - -BOOLEAN LocalAPIC = FALSE; -ULONG_PTR APICAddress = 0; - -VOID -WinLdrpMapApic() -{ - /* Check if we have a local APIC */ - asm(".intel_syntax noprefix\n"); - asm("mov eax, 1\n"); - asm("cpuid\n"); - asm("shr edx, 9\n"); - asm("and edx, 0x1\n"); - asm("mov _LocalAPIC, edx\n"); - asm(".att_syntax\n"); - - /* If there is no APIC, just return */ - if (!LocalAPIC) - return; - - asm(".intel_syntax noprefix\n"); - asm("mov ecx, 0x1B\n"); - asm("rdmsr\n"); - asm("mov edx, eax\n"); - asm("and edx, 0xFFFFF000\n"); - asm("mov _APICAddress, edx"); - asm(".att_syntax\n"); - - DbgPrint((DPRINT_WINDOWS, "Local APIC detected at address 0x%x\n", - APICAddress)); - - /* Map it */ - HalPageTable[(APIC_BASE - 0xFFC00000) >> MM_PAGE_SHIFT].PageFrameNumber - = APICAddress >> MM_PAGE_SHIFT; - HalPageTable[(APIC_BASE - 0xFFC00000) >> MM_PAGE_SHIFT].Valid = 1; - HalPageTable[(APIC_BASE - 0xFFC00000) >> MM_PAGE_SHIFT].Write = 1; - HalPageTable[(APIC_BASE - 0xFFC00000) >> MM_PAGE_SHIFT].WriteThrough = 1; - HalPageTable[(APIC_BASE - 0xFFC00000) >> MM_PAGE_SHIFT].CacheDisable = 1; -} -#else -VOID -WinLdrpMapApic() -{ - /* Implement it for another arch */ -} -#endif - -BOOLEAN -WinLdrTurnOnPaging(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, - ULONG PcrBasePage, - ULONG TssBasePage, - PVOID GdtIdt) -{ - ULONG i, PagesCount, MemoryMapSizeInPages; - ULONG LastPageIndex, LastPageType, MemoryMapStartPage; - PPAGE_LOOKUP_TABLE_ITEM MemoryMap; - ULONG NoEntries; - PKTSS Tss; - BOOLEAN Status; - - // - // Creating a suitable memory map for the Windows can be tricky, so let's - // give a few advices: - // 1) One must not map the whole available memory pages to PDE! - // Map only what's needed - 16Mb, 24Mb, 32Mb max I think, - // thus occupying 4, 6 or 8 PDE entries for identical mapping, - // the same quantity for KSEG0_BASE mapping, one more entry for - // hyperspace and one more entry for HAL physical pages mapping. - // 2) Memory descriptors must map *the whole* physical memory - // showing any memory above 16/24/32 as FirmwareTemporary - // - // 3) Overall memory blocks count must not exceed 30 (?? why?) - // - - // - // During MmInitMachineDependent, the kernel zeroes PDE at the following address - // 0xC0300000 - 0xC03007FC - // - // Then it finds the best place for non-paged pool: - // StartPde C0300F70, EndPde C0300FF8, NumberOfPages C13, NextPhysPage 3AD - // - - // Before we start mapping pages, create a block of memory, which will contain - // PDE and PTEs - if (MempAllocatePageTables() == FALSE) - return FALSE; - - // Allocate memory for memory allocation descriptors - Mad = MmHeapAlloc(sizeof(MEMORY_ALLOCATION_DESCRIPTOR) * 1024); - - // Setup an entry for each descriptor - MemoryMap = MmGetMemoryMap(&NoEntries); - if (MemoryMap == NULL) - { - UiMessageBox("Can not retrieve the current memory map"); - return FALSE; - } - - // Calculate parameters of the memory map - MemoryMapStartPage = (ULONG_PTR)MemoryMap >> MM_PAGE_SHIFT; - MemoryMapSizeInPages = NoEntries * sizeof(PAGE_LOOKUP_TABLE_ITEM); - - DbgPrint((DPRINT_WINDOWS, "Got memory map with %d entries\n", NoEntries)); - - // Always contigiously map low 1Mb of memory - Status = MempSetupPaging(0, 0x100); - if (!Status) - { - DbgPrint((DPRINT_WINDOWS, "Error during MempSetupPaging of low 1Mb\n")); - return FALSE; - } - - // Construct a good memory map from what we've got, - // but mark entries which the memory allocation bitmap takes - // as free entries (this is done in order to have the ability - // to place mem alloc bitmap outside lower 16Mb zone) - PagesCount = 1; - LastPageIndex = 0; - LastPageType = MemoryMap[0].PageAllocated; - for(i=1;i= MemoryMapStartPage && - i < (MemoryMapStartPage+MemoryMapSizeInPages)) - { - // Exclude it if current page belongs to the memory map - MemoryMap[i].PageAllocated = LoaderFree; - } - - // Process entry - if (MemoryMap[i].PageAllocated == LastPageType && - (i != NoEntries-1) ) - { - PagesCount++; - } - else - { - // Add the resulting region - MempAddMemoryBlock(LoaderBlock, LastPageIndex, PagesCount, LastPageType); - - // Reset our counter vars - LastPageIndex = i; - LastPageType = MemoryMap[i].PageAllocated; - PagesCount = 1; - } - } - - // TEMP, DEBUG! - // adding special reserved memory zones for vmware workstation -#if 0 - { - Mad[MadCount].BasePage = 0xfec00; - Mad[MadCount].PageCount = 0x10; - Mad[MadCount].MemoryType = LoaderSpecialMemory; - WinLdrInsertDescriptor(LoaderBlock, &Mad[MadCount]); - MadCount++; - - Mad[MadCount].BasePage = 0xfee00; - Mad[MadCount].PageCount = 0x1; - Mad[MadCount].MemoryType = LoaderSpecialMemory; - WinLdrInsertDescriptor(LoaderBlock, &Mad[MadCount]); - MadCount++; - - Mad[MadCount].BasePage = 0xfffe0; - Mad[MadCount].PageCount = 0x20; - Mad[MadCount].MemoryType = LoaderSpecialMemory; - WinLdrInsertDescriptor(LoaderBlock, &Mad[MadCount]); - MadCount++; - } -#endif - - DbgPrint((DPRINT_WINDOWS, "MadCount: %d\n", MadCount)); - - WinLdrpDumpMemoryDescriptors(LoaderBlock); //FIXME: Delete! - - // Map our loader image, so we can continue running - /*Status = MempSetupPaging(OsLoaderBase >> MM_PAGE_SHIFT, OsLoaderSize >> MM_PAGE_SHIFT); - if (!Status) - { - UiMessageBox("Error during MempSetupPaging"); - return; - }*/ - - //VideoDisplayString(L"Hello from VGA, going into the kernel\n"); - DbgPrint((DPRINT_WINDOWS, "HalPageTable: 0x%X\n", HalPageTable)); - - // Page Tables have been setup, make special handling for PCR and TSS - // (which is done in BlSetupFotNt in usual ntldr) - HalPageTable[(KI_USER_SHARED_DATA - 0xFFC00000) >> MM_PAGE_SHIFT].PageFrameNumber = PcrBasePage+1; - HalPageTable[(KI_USER_SHARED_DATA - 0xFFC00000) >> MM_PAGE_SHIFT].Valid = 1; - HalPageTable[(KI_USER_SHARED_DATA - 0xFFC00000) >> MM_PAGE_SHIFT].Write = 1; - - HalPageTable[(KIP0PCRADDRESS - 0xFFC00000) >> MM_PAGE_SHIFT].PageFrameNumber = PcrBasePage; - HalPageTable[(KIP0PCRADDRESS - 0xFFC00000) >> MM_PAGE_SHIFT].Valid = 1; - HalPageTable[(KIP0PCRADDRESS - 0xFFC00000) >> MM_PAGE_SHIFT].Write = 1; - - // Map APIC - WinLdrpMapApic(); - - // Map VGA memory - //VideoMemoryBase = MmMapIoSpace(0xb8000, 4000, MmNonCached); - //DbgPrint((DPRINT_WINDOWS, "VideoMemoryBase: 0x%X\n", VideoMemoryBase)); - - Tss = (PKTSS)(KSEG0_BASE | (TssBasePage << MM_PAGE_SHIFT)); - - // Unmap what is not needed from kernel page table - MempDisablePages(); - - // Fill the memory descriptor list and - //PrepareMemoryDescriptorList(); - DbgPrint((DPRINT_WINDOWS, "Memory Descriptor List prepared, printing PDE\n")); - List_PaToVa(&LoaderBlock->MemoryDescriptorListHead); - -#ifdef DBG - { - ULONG *PDE_Addr=(ULONG *)PDE;//0xC0300000; - int j; - - DbgPrint((DPRINT_WINDOWS, "\nPDE\n")); - - for (i=0; i<128; i++) - { - DbgPrint((DPRINT_WINDOWS, "0x%04X | ", i*8)); - - for (j=0; j<8; j++) - { - DbgPrint((DPRINT_WINDOWS, "0x%08X ", PDE_Addr[i*8+j])); - } - - DbgPrint((DPRINT_WINDOWS, "\n")); - } - } -#endif - - - // Enable paging - //BS->ExitBootServices(ImageHandle,MapKey); - - // Disable Interrupts - _disable(); - - // Re-initalize EFLAGS - Ke386EraseFlags(); - - // Set the PDBR - __writecr3((ULONG_PTR)PDE); - - // Enable paging by modifying CR0 - __writecr0(__readcr0() | CR0_PG); - - // Set processor context - WinLdrSetProcessorContext(GdtIdt, KIP0PCRADDRESS, KSEG0_BASE | (TssBasePage << MM_PAGE_SHIFT)); - - // Zero KI_USER_SHARED_DATA page - memset((PVOID)KI_USER_SHARED_DATA, 0, MM_PAGE_SIZE); - - return TRUE; -} - -// Two special things this func does: it sorts descriptors, -// and it merges free ones -VOID -WinLdrInsertDescriptor(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, - IN PMEMORY_ALLOCATION_DESCRIPTOR NewDescriptor) -{ - PLIST_ENTRY ListHead = &LoaderBlock->MemoryDescriptorListHead; - PLIST_ENTRY PreviousEntry, NextEntry; - PMEMORY_ALLOCATION_DESCRIPTOR PreviousDescriptor = NULL, NextDescriptor = NULL; - - DbgPrint((DPRINT_WINDOWS, "BP=0x%X PC=0x%X %s\n", NewDescriptor->BasePage, - NewDescriptor->PageCount, MemTypeDesc[NewDescriptor->MemoryType])); - - /* Find a place where to insert the new descriptor to */ - PreviousEntry = ListHead; - NextEntry = ListHead->Flink; - while (NextEntry != ListHead) - { - NextDescriptor = CONTAINING_RECORD(NextEntry, - MEMORY_ALLOCATION_DESCRIPTOR, - ListEntry); - if (NewDescriptor->BasePage < NextDescriptor->BasePage) - break; - - PreviousEntry = NextEntry; - PreviousDescriptor = NextDescriptor; - NextEntry = NextEntry->Flink; - } - - /* Don't forget about merging free areas */ - if (NewDescriptor->MemoryType != LoaderFree) - { - /* Just insert, nothing to merge */ - InsertHeadList(PreviousEntry, &NewDescriptor->ListEntry); - } - else - { - /* Previous block also free? */ - if ((PreviousEntry != ListHead) && (PreviousDescriptor->MemoryType == LoaderFree) && - ((PreviousDescriptor->BasePage + PreviousDescriptor->PageCount) == - NewDescriptor->BasePage)) - { - /* Just enlarge previous descriptor's PageCount */ - PreviousDescriptor->PageCount += NewDescriptor->PageCount; - NewDescriptor = PreviousDescriptor; - } - else - { - /* Nope, just insert */ - InsertHeadList(PreviousEntry, &NewDescriptor->ListEntry); - } - - /* Next block is free ?*/ - if ((NextEntry != ListHead) && - (NextDescriptor->MemoryType == LoaderFree) && - ((NewDescriptor->BasePage + NewDescriptor->PageCount) == NextDescriptor->BasePage)) - { - /* Enlarge next descriptor's PageCount */ - NewDescriptor->PageCount += NextDescriptor->PageCount; - RemoveEntryList(&NextDescriptor->ListEntry); - } - } - - return; -} - -VOID -WinLdrSetProcessorContext(PVOID GdtIdt, IN ULONG Pcr, IN ULONG Tss) -{ - GDTIDT GdtDesc, IdtDesc, OldIdt; - PKGDTENTRY pGdt; - PKIDTENTRY pIdt; - ULONG Ldt = 0; - //ULONG i; - - DbgPrint((DPRINT_WINDOWS, "GDtIdt %p, Pcr %p, Tss 0x%08X\n", - GdtIdt, Pcr, Tss)); - - // Kernel expects the PCR to be zero-filled on startup - // FIXME: Why zero it here when we can zero it right after allocation? - RtlZeroMemory((PVOID)Pcr, MM_PAGE_SIZE); //FIXME: Why zero only 1 page when we allocate 2? - - // Get old values of GDT and IDT - Ke386GetGlobalDescriptorTable(GdtDesc); - Ke386GetInterruptDescriptorTable(IdtDesc); - - // Save old IDT - OldIdt.Base = IdtDesc.Base; - OldIdt.Limit = IdtDesc.Limit; - - // Prepare new IDT+GDT - GdtDesc.Base = KSEG0_BASE | (ULONG_PTR)GdtIdt; - GdtDesc.Limit = NUM_GDT * sizeof(KGDTENTRY) - 1; - IdtDesc.Base = (ULONG)((PUCHAR)GdtDesc.Base + GdtDesc.Limit + 1); - IdtDesc.Limit = NUM_IDT * sizeof(KIDTENTRY) - 1; - - // ======================== - // Fill all descriptors now - // ======================== - - pGdt = (PKGDTENTRY)GdtDesc.Base; - pIdt = (PKIDTENTRY)IdtDesc.Base; - - // - // Code selector (0x8) - // Flat 4Gb - // - pGdt[1].LimitLow = 0xFFFF; - pGdt[1].BaseLow = 0; - pGdt[1].HighWord.Bytes.BaseMid = 0; - pGdt[1].HighWord.Bytes.Flags1 = 0x9A; - pGdt[1].HighWord.Bytes.Flags2 = 0xCF; - pGdt[1].HighWord.Bytes.BaseHi = 0; - - // - // Data selector (0x10) - // Flat 4Gb - // - pGdt[2].LimitLow = 0xFFFF; - pGdt[2].BaseLow = 0; - pGdt[2].HighWord.Bytes.BaseMid = 0; - pGdt[2].HighWord.Bytes.Flags1 = 0x92; - pGdt[2].HighWord.Bytes.Flags2 = 0xCF; - pGdt[2].HighWord.Bytes.BaseHi = 0; - - // - // Selector (0x18) - // Flat 2Gb - // - pGdt[3].LimitLow = 0xFFFF; - pGdt[3].BaseLow = 0; - pGdt[3].HighWord.Bytes.BaseMid = 0; - pGdt[3].HighWord.Bytes.Flags1 = 0xFA; - pGdt[3].HighWord.Bytes.Flags2 = 0xCF; - pGdt[3].HighWord.Bytes.BaseHi = 0; - - // - // Selector (0x20) - // Flat 2Gb - // - pGdt[4].LimitLow = 0xFFFF; - pGdt[4].BaseLow = 0; - pGdt[4].HighWord.Bytes.BaseMid = 0; - pGdt[4].HighWord.Bytes.Flags1 = 0xF2; - pGdt[4].HighWord.Bytes.Flags2 = 0xCF; - pGdt[4].HighWord.Bytes.BaseHi = 0; - - // - // TSS Selector (0x28) - // - pGdt[5].LimitLow = 0x78-1; //FIXME: Check this - pGdt[5].BaseLow = (USHORT)(Tss & 0xffff); - pGdt[5].HighWord.Bytes.BaseMid = (UCHAR)((Tss >> 16) & 0xff); - pGdt[5].HighWord.Bytes.Flags1 = 0x89; - pGdt[5].HighWord.Bytes.Flags2 = 0x00; - pGdt[5].HighWord.Bytes.BaseHi = (UCHAR)((Tss >> 24) & 0xff); - - // - // PCR Selector (0x30) - // - pGdt[6].LimitLow = 0x01; - pGdt[6].BaseLow = (USHORT)(Pcr & 0xffff); - pGdt[6].HighWord.Bytes.BaseMid = (UCHAR)((Pcr >> 16) & 0xff); - pGdt[6].HighWord.Bytes.Flags1 = 0x92; - pGdt[6].HighWord.Bytes.Flags2 = 0xC0; - pGdt[6].HighWord.Bytes.BaseHi = (UCHAR)((Pcr >> 24) & 0xff); - - // - // Selector (0x38) - // - pGdt[7].LimitLow = 0xFFFF; - pGdt[7].BaseLow = 0; - pGdt[7].HighWord.Bytes.BaseMid = 0; - pGdt[7].HighWord.Bytes.Flags1 = 0xF3; - pGdt[7].HighWord.Bytes.Flags2 = 0x40; - pGdt[7].HighWord.Bytes.BaseHi = 0; - - // - // Some BIOS stuff (0x40) - // - pGdt[8].LimitLow = 0xFFFF; - pGdt[8].BaseLow = 0x400; - pGdt[8].HighWord.Bytes.BaseMid = 0; - pGdt[8].HighWord.Bytes.Flags1 = 0xF2; - pGdt[8].HighWord.Bytes.Flags2 = 0x0; - pGdt[8].HighWord.Bytes.BaseHi = 0; - - // - // Selector (0x48) - // - pGdt[9].LimitLow = 0; - pGdt[9].BaseLow = 0; - pGdt[9].HighWord.Bytes.BaseMid = 0; - pGdt[9].HighWord.Bytes.Flags1 = 0; - pGdt[9].HighWord.Bytes.Flags2 = 0; - pGdt[9].HighWord.Bytes.BaseHi = 0; - - // - // Selector (0x50) - // - pGdt[10].LimitLow = 0xFFFF; //FIXME: Not correct! - pGdt[10].BaseLow = 0; - pGdt[10].HighWord.Bytes.BaseMid = 0x2; - pGdt[10].HighWord.Bytes.Flags1 = 0x89; - pGdt[10].HighWord.Bytes.Flags2 = 0; - pGdt[10].HighWord.Bytes.BaseHi = 0; - - // - // Selector (0x58) - // - pGdt[11].LimitLow = 0xFFFF; - pGdt[11].BaseLow = 0; - pGdt[11].HighWord.Bytes.BaseMid = 0x2; - pGdt[11].HighWord.Bytes.Flags1 = 0x9A; - pGdt[11].HighWord.Bytes.Flags2 = 0; - pGdt[11].HighWord.Bytes.BaseHi = 0; - - // - // Selector (0x60) - // - pGdt[12].LimitLow = 0xFFFF; - pGdt[12].BaseLow = 0; //FIXME: Maybe not correct, but noone cares - pGdt[12].HighWord.Bytes.BaseMid = 0x2; - pGdt[12].HighWord.Bytes.Flags1 = 0x92; - pGdt[12].HighWord.Bytes.Flags2 = 0; - pGdt[12].HighWord.Bytes.BaseHi = 0; - - // - // Video buffer Selector (0x68) - // - pGdt[13].LimitLow = 0x3FFF; - pGdt[13].BaseLow = 0x8000; - pGdt[13].HighWord.Bytes.BaseMid = 0x0B; - pGdt[13].HighWord.Bytes.Flags1 = 0x92; - pGdt[13].HighWord.Bytes.Flags2 = 0; - pGdt[13].HighWord.Bytes.BaseHi = 0; - - // - // Points to GDT (0x70) - // - pGdt[14].LimitLow = NUM_GDT*sizeof(KGDTENTRY) - 1; - pGdt[14].BaseLow = 0x7000; - pGdt[14].HighWord.Bytes.BaseMid = 0xFF; - pGdt[14].HighWord.Bytes.Flags1 = 0x92; - pGdt[14].HighWord.Bytes.Flags2 = 0; - pGdt[14].HighWord.Bytes.BaseHi = 0xFF; - - // - // Some unused descriptors should go here - // - - // Copy the old IDT - RtlCopyMemory(pIdt, (PVOID)OldIdt.Base, OldIdt.Limit); - - // Mask interrupts - //asm("cli\n"); // they are already masked before enabling paged mode - - // Load GDT+IDT - Ke386SetGlobalDescriptorTable(GdtDesc); - Ke386SetInterruptDescriptorTable(IdtDesc); - - // Jump to proper CS and clear prefetch queue - asm("ljmp $0x08, $mb1\n" - "mb1:\n"); - - // Set SS selector - asm(".intel_syntax noprefix\n"); - asm("mov ax, 0x10\n"); // DataSelector=0x10 - asm("mov ss, ax\n"); - asm(".att_syntax\n"); - - // Set DS and ES selectors - Ke386SetDs(0x10); - Ke386SetEs(0x10); // this is vital for rep stosd - - // LDT = not used ever, thus set to 0 - Ke386SetLocalDescriptorTable(Ldt); - - // Load TSR - Ke386SetTr(0x28); - - // Clear GS - asm(".intel_syntax noprefix\n"); - asm("push 0\n"); - asm("pop gs\n"); - asm(".att_syntax\n"); - - // Set FS to PCR - Ke386SetFs(0x30); - - // Real end of the function, just for information - /* do not uncomment! - pop edi; - pop esi; - pop ebx; - mov esp, ebp; - pop ebp; - ret - */ -} +/* + * PROJECT: EFI Windows Loader + * LICENSE: GPL - See COPYING in the top level directory + * FILE: freeldr/winldr/wlmemory.c + * PURPOSE: Memory related routines + * PROGRAMMERS: Aleksey Bragin (aleksey@reactos.org) + */ + +/* INCLUDES ***************************************************************/ + +#include + +#include +#include + +extern ULONG TotalNLSSize; +extern ULONG LoaderPagesSpanned; + +// This is needed because headers define wrong one for ReactOS +#undef KIP0PCRADDRESS +#define KIP0PCRADDRESS 0xffdff000 + +#define HYPER_SPACE_ENTRY 0x300 + +PCHAR MemTypeDesc[] = { + "ExceptionBlock ", // ? + "SystemBlock ", // ? + "Free ", + "Bad ", // used + "LoadedProgram ", // == Free + "FirmwareTemporary ", // == Free + "FirmwarePermanent ", // == Bad + "OsloaderHeap ", // used + "OsloaderStack ", // == Free + "SystemCode ", + "HalCode ", + "BootDriver ", // not used + "ConsoleInDriver ", // ? + "ConsoleOutDriver ", // ? + "StartupDpcStack ", // ? + "StartupKernelStack", // ? + "StartupPanicStack ", // ? + "StartupPcrPage ", // ? + "StartupPdrPage ", // ? + "RegistryData ", // used + "MemoryData ", // not used + "NlsData ", // used + "SpecialMemory ", // == Bad + "BBTMemory " // == Bad + }; + +VOID +WinLdrpDumpMemoryDescriptors(PLOADER_PARAMETER_BLOCK LoaderBlock); + + +VOID +MempAddMemoryBlock(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, + ULONG BasePage, + ULONG PageCount, + ULONG Type); +VOID +WinLdrInsertDescriptor(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, + IN PMEMORY_ALLOCATION_DESCRIPTOR NewDescriptor); + +VOID +WinLdrRemoveDescriptor(IN PMEMORY_ALLOCATION_DESCRIPTOR Descriptor); + +VOID +WinLdrSetProcessorContext(PVOID GdtIdt, IN ULONG Pcr, IN ULONG Tss); + +// This is needed only for SetProcessorContext routine +#pragma pack(2) + typedef struct + { + USHORT Limit; + ULONG Base; + } GDTIDT; +#pragma pack(4) + +// this is needed for new IDT filling +#if 0 +extern ULONG_PTR i386DivideByZero; +extern ULONG_PTR i386DebugException; +extern ULONG_PTR i386NMIException; +extern ULONG_PTR i386Breakpoint; +extern ULONG_PTR i386Overflow; +extern ULONG_PTR i386BoundException; +extern ULONG_PTR i386InvalidOpcode; +extern ULONG_PTR i386FPUNotAvailable; +extern ULONG_PTR i386DoubleFault; +extern ULONG_PTR i386CoprocessorSegment; +extern ULONG_PTR i386InvalidTSS; +extern ULONG_PTR i386SegmentNotPresent; +extern ULONG_PTR i386StackException; +extern ULONG_PTR i386GeneralProtectionFault; +extern ULONG_PTR i386PageFault; // exc 14 +extern ULONG_PTR i386CoprocessorError; // exc 16 +extern ULONG_PTR i386AlignmentCheck; // exc 17 +#endif + +/* GLOBALS ***************************************************************/ + +PHARDWARE_PTE PDE; +PHARDWARE_PTE HalPageTable; + +PUCHAR PhysicalPageTablesBuffer; +PUCHAR KernelPageTablesBuffer; +ULONG PhysicalPageTables; +ULONG KernelPageTables; + +MEMORY_ALLOCATION_DESCRIPTOR *Mad; +ULONG MadCount = 0; + + +/* FUNCTIONS **************************************************************/ + +BOOLEAN +MempAllocatePageTables() +{ + ULONG NumPageTables, TotalSize; + PUCHAR Buffer; + // It's better to allocate PDE + PTEs contigiuos + + // Max number of entries = MaxPageNum >> 10 + // FIXME: This is a number to describe ALL physical memory + // and windows doesn't expect ALL memory mapped... + NumPageTables = (GetSystemMemorySize() >> MM_PAGE_SHIFT) >> 10; + + DbgPrint((DPRINT_WINDOWS, "NumPageTables = %d\n", NumPageTables)); + + // Allocate memory block for all these things: + // PDE, HAL mapping page table, physical mapping, kernel mapping + TotalSize = (1+1+NumPageTables*2)*MM_PAGE_SIZE; + + // PDE+HAL+KernelPTEs == MemoryData + Buffer = MmAllocateMemoryWithType( + TotalSize - NumPageTables*MM_PAGE_SIZE, LoaderMemoryData); + + // Physical PTEs = FirmwareTemporary + PhysicalPageTablesBuffer = MmAllocateMemoryWithType( + NumPageTables*MM_PAGE_SIZE, LoaderFirmwareTemporary); + + if (Buffer + (TotalSize - NumPageTables*MM_PAGE_SIZE) != + PhysicalPageTablesBuffer) + { + DbgPrint((DPRINT_WINDOWS, "There was a problem allocating two adjacent blocks of memory!")); + } + + if (Buffer == NULL || PhysicalPageTablesBuffer == NULL) + { + UiMessageBox("Impossible to allocate memory block for page tables!"); + return FALSE; + } + + // Zero all this memory block + RtlZeroMemory(Buffer, TotalSize); + + // Set up pointers correctly now + PDE = (PHARDWARE_PTE)Buffer; + + // Map the page directory at 0xC0000000 (maps itself) + PDE[HYPER_SPACE_ENTRY].PageFrameNumber = (ULONG)PDE >> MM_PAGE_SHIFT; + PDE[HYPER_SPACE_ENTRY].Valid = 1; + PDE[HYPER_SPACE_ENTRY].Write = 1; + + // The last PDE slot is allocated for HAL's memory mapping (Virtual Addresses 0xFFC00000 - 0xFFFFFFFF) + HalPageTable = (PHARDWARE_PTE)&Buffer[MM_PAGE_SIZE*1]; + + // Map it + PDE[1023].PageFrameNumber = (ULONG)HalPageTable >> MM_PAGE_SHIFT; + PDE[1023].Valid = 1; + PDE[1023].Write = 1; + + // Store pointer to the table for easier access + KernelPageTablesBuffer = &Buffer[MM_PAGE_SIZE*2]; + + // Zero counters of page tables used + PhysicalPageTables = 0; + KernelPageTables = 0; + + return TRUE; +} + +VOID +MempAllocatePTE(ULONG Entry, PHARDWARE_PTE *PhysicalPT, PHARDWARE_PTE *KernelPT) +{ + //Print(L"Creating PDE Entry %X\n", Entry); + + // Identity mapping + *PhysicalPT = (PHARDWARE_PTE)&PhysicalPageTablesBuffer[PhysicalPageTables*MM_PAGE_SIZE]; + PhysicalPageTables++; + + PDE[Entry].PageFrameNumber = (ULONG)*PhysicalPT >> MM_PAGE_SHIFT; + PDE[Entry].Valid = 1; + PDE[Entry].Write = 1; + + if (Entry+(KSEG0_BASE >> 22) > 1023) + { + DbgPrint((DPRINT_WINDOWS, "WARNING! Entry: %X > 1023\n", Entry+(KSEG0_BASE >> 22))); + } + + // Kernel-mode mapping + *KernelPT = (PHARDWARE_PTE)&KernelPageTablesBuffer[KernelPageTables*MM_PAGE_SIZE]; + KernelPageTables++; + + PDE[Entry+(KSEG0_BASE >> 22)].PageFrameNumber = ((ULONG)*KernelPT >> MM_PAGE_SHIFT); + PDE[Entry+(KSEG0_BASE >> 22)].Valid = 1; + PDE[Entry+(KSEG0_BASE >> 22)].Write = 1; +} + +BOOLEAN +MempSetupPaging(IN ULONG StartPage, + IN ULONG NumberOfPages) +{ + PHARDWARE_PTE PhysicalPT; + PHARDWARE_PTE KernelPT; + ULONG Entry, Page; + + //Print(L"MempSetupPaging: SP 0x%X, Number: 0x%X\n", StartPage, NumberOfPages); + + // HACK + if (StartPage+NumberOfPages >= 0x80000) + { + // + // We can't map this as it requires more than 1 PDE + // and in fact it's not possible at all ;) + // + //Print(L"skipping...\n"); + return TRUE; + } + + // + // Now actually set up the page tables for identity mapping + // + for (Page=StartPage; Page < StartPage+NumberOfPages; Page++) + { + Entry = Page >> 10; + + if (((PULONG)PDE)[Entry] == 0) + { + MempAllocatePTE(Entry, &PhysicalPT, &KernelPT); + } + else + { + PhysicalPT = (PHARDWARE_PTE)(PDE[Entry].PageFrameNumber << MM_PAGE_SHIFT); + KernelPT = (PHARDWARE_PTE)(PDE[Entry+(KSEG0_BASE >> 22)].PageFrameNumber << MM_PAGE_SHIFT); + } + + if (Page == 0) + { + PhysicalPT[Page & 0x3ff].PageFrameNumber = Page; + PhysicalPT[Page & 0x3ff].Valid = 0; + PhysicalPT[Page & 0x3ff].Write = 0; + + KernelPT[Page & 0x3ff].PageFrameNumber = Page; + KernelPT[Page & 0x3ff].Valid = 0; + KernelPT[Page & 0x3ff].Write = 0; + } + else + { + PhysicalPT[Page & 0x3ff].PageFrameNumber = Page; + PhysicalPT[Page & 0x3ff].Valid = 1; + PhysicalPT[Page & 0x3ff].Write = 1; + + KernelPT[Page & 0x3ff].PageFrameNumber = Page; + KernelPT[Page & 0x3ff].Valid = 1; + KernelPT[Page & 0x3ff].Write = 1; + } + } + + return TRUE; +} + +VOID +MempDisablePages() +{ + int i; + + // + // We need to delete kernel mapping from memory areas which are + // marked as Special or Permanent memory (thus non-accessible) + // + + for (i=0; i LoaderPagesSpanned) + EndPage = LoaderPagesSpanned; + } + + for (Page = StartPage; Page < EndPage; Page++) + { + PHARDWARE_PTE KernelPT; + ULONG Entry = (Page >> 10) + (KSEG0_BASE >> 22); + + if (PDE[Entry].Valid) + { + KernelPT = (PHARDWARE_PTE)(PDE[Entry].PageFrameNumber << MM_PAGE_SHIFT); + + if (KernelPT) + { + KernelPT[Page & 0x3ff].PageFrameNumber = 0; + KernelPT[Page & 0x3ff].Valid = 0; + KernelPT[Page & 0x3ff].Write = 0; + } + } + } + } + } +} + +VOID +MempAddMemoryBlock(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, + ULONG BasePage, + ULONG PageCount, + ULONG Type) +{ + BOOLEAN Status; + + // + // Check for some weird stuff at the top + // + if (BasePage + PageCount > 0xF0000) + { + // + // Just skip this, without even adding to MAD list + // + return; + } + + // + // Set Base page, page count and type + // + Mad[MadCount].BasePage = BasePage; + Mad[MadCount].PageCount = PageCount; + Mad[MadCount].MemoryType = Type; + + // + // Check if it's more than the allowed for OS loader + // if yes - don't map the pages, just add as FirmwareTemporary + // + if (BasePage + PageCount > LoaderPagesSpanned) + { + if (Mad[MadCount].MemoryType != LoaderSpecialMemory && + Mad[MadCount].MemoryType != LoaderFirmwarePermanent && + Mad[MadCount].MemoryType != LoaderFree) + { + DbgPrint((DPRINT_WINDOWS, "Setting page %x %x to Temporary from %d\n", + BasePage, PageCount, Mad[MadCount].MemoryType)); + Mad[MadCount].MemoryType = LoaderFirmwareTemporary; + } + + WinLdrInsertDescriptor(LoaderBlock, &Mad[MadCount]); + MadCount++; + + return; + } + + // + // Add descriptor + // + WinLdrInsertDescriptor(LoaderBlock, &Mad[MadCount]); + MadCount++; + + // + // Map it (don't map low 1Mb because it was already contigiously + // mapped in WinLdrTurnOnPaging) + // + if (BasePage >= 0x100) + { + Status = MempSetupPaging(BasePage, PageCount); + if (!Status) + { + DbgPrint((DPRINT_WINDOWS, "Error during MempSetupPaging\n")); + return; + } + } +} + +#ifdef _M_IX86 + +BOOLEAN LocalAPIC = FALSE; +ULONG_PTR APICAddress = 0; + +VOID +WinLdrpMapApic() +{ + /* Check if we have a local APIC */ + asm(".intel_syntax noprefix\n"); + asm("mov eax, 1\n"); + asm("cpuid\n"); + asm("shr edx, 9\n"); + asm("and edx, 0x1\n"); + asm("mov _LocalAPIC, edx\n"); + asm(".att_syntax\n"); + + /* If there is no APIC, just return */ + if (!LocalAPIC) + return; + + asm(".intel_syntax noprefix\n"); + asm("mov ecx, 0x1B\n"); + asm("rdmsr\n"); + asm("mov edx, eax\n"); + asm("and edx, 0xFFFFF000\n"); + asm("mov _APICAddress, edx"); + asm(".att_syntax\n"); + + DbgPrint((DPRINT_WINDOWS, "Local APIC detected at address 0x%x\n", + APICAddress)); + + /* Map it */ + HalPageTable[(APIC_BASE - 0xFFC00000) >> MM_PAGE_SHIFT].PageFrameNumber + = APICAddress >> MM_PAGE_SHIFT; + HalPageTable[(APIC_BASE - 0xFFC00000) >> MM_PAGE_SHIFT].Valid = 1; + HalPageTable[(APIC_BASE - 0xFFC00000) >> MM_PAGE_SHIFT].Write = 1; + HalPageTable[(APIC_BASE - 0xFFC00000) >> MM_PAGE_SHIFT].WriteThrough = 1; + HalPageTable[(APIC_BASE - 0xFFC00000) >> MM_PAGE_SHIFT].CacheDisable = 1; +} +#else +VOID +WinLdrpMapApic() +{ + /* Implement it for another arch */ +} +#endif + +BOOLEAN +WinLdrTurnOnPaging(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, + ULONG PcrBasePage, + ULONG TssBasePage, + PVOID GdtIdt) +{ + ULONG i, PagesCount, MemoryMapSizeInPages; + ULONG LastPageIndex, LastPageType, MemoryMapStartPage; + PPAGE_LOOKUP_TABLE_ITEM MemoryMap; + ULONG NoEntries; + PKTSS Tss; + BOOLEAN Status; + + // + // Creating a suitable memory map for the Windows can be tricky, so let's + // give a few advices: + // 1) One must not map the whole available memory pages to PDE! + // Map only what's needed - 16Mb, 24Mb, 32Mb max I think, + // thus occupying 4, 6 or 8 PDE entries for identical mapping, + // the same quantity for KSEG0_BASE mapping, one more entry for + // hyperspace and one more entry for HAL physical pages mapping. + // 2) Memory descriptors must map *the whole* physical memory + // showing any memory above 16/24/32 as FirmwareTemporary + // + // 3) Overall memory blocks count must not exceed 30 (?? why?) + // + + // + // During MmInitMachineDependent, the kernel zeroes PDE at the following address + // 0xC0300000 - 0xC03007FC + // + // Then it finds the best place for non-paged pool: + // StartPde C0300F70, EndPde C0300FF8, NumberOfPages C13, NextPhysPage 3AD + // + + // Before we start mapping pages, create a block of memory, which will contain + // PDE and PTEs + if (MempAllocatePageTables() == FALSE) + return FALSE; + + // Allocate memory for memory allocation descriptors + Mad = MmHeapAlloc(sizeof(MEMORY_ALLOCATION_DESCRIPTOR) * 1024); + + // Setup an entry for each descriptor + MemoryMap = MmGetMemoryMap(&NoEntries); + if (MemoryMap == NULL) + { + UiMessageBox("Can not retrieve the current memory map"); + return FALSE; + } + + // Calculate parameters of the memory map + MemoryMapStartPage = (ULONG_PTR)MemoryMap >> MM_PAGE_SHIFT; + MemoryMapSizeInPages = NoEntries * sizeof(PAGE_LOOKUP_TABLE_ITEM); + + DbgPrint((DPRINT_WINDOWS, "Got memory map with %d entries\n", NoEntries)); + + // Always contigiously map low 1Mb of memory + Status = MempSetupPaging(0, 0x100); + if (!Status) + { + DbgPrint((DPRINT_WINDOWS, "Error during MempSetupPaging of low 1Mb\n")); + return FALSE; + } + + // Construct a good memory map from what we've got, + // but mark entries which the memory allocation bitmap takes + // as free entries (this is done in order to have the ability + // to place mem alloc bitmap outside lower 16Mb zone) + PagesCount = 1; + LastPageIndex = 0; + LastPageType = MemoryMap[0].PageAllocated; + for(i=1;i= MemoryMapStartPage && + i < (MemoryMapStartPage+MemoryMapSizeInPages)) + { + // Exclude it if current page belongs to the memory map + MemoryMap[i].PageAllocated = LoaderFree; + } + + // Process entry + if (MemoryMap[i].PageAllocated == LastPageType && + (i != NoEntries-1) ) + { + PagesCount++; + } + else + { + // Add the resulting region + MempAddMemoryBlock(LoaderBlock, LastPageIndex, PagesCount, LastPageType); + + // Reset our counter vars + LastPageIndex = i; + LastPageType = MemoryMap[i].PageAllocated; + PagesCount = 1; + } + } + + // TEMP, DEBUG! + // adding special reserved memory zones for vmware workstation +#if 0 + { + Mad[MadCount].BasePage = 0xfec00; + Mad[MadCount].PageCount = 0x10; + Mad[MadCount].MemoryType = LoaderSpecialMemory; + WinLdrInsertDescriptor(LoaderBlock, &Mad[MadCount]); + MadCount++; + + Mad[MadCount].BasePage = 0xfee00; + Mad[MadCount].PageCount = 0x1; + Mad[MadCount].MemoryType = LoaderSpecialMemory; + WinLdrInsertDescriptor(LoaderBlock, &Mad[MadCount]); + MadCount++; + + Mad[MadCount].BasePage = 0xfffe0; + Mad[MadCount].PageCount = 0x20; + Mad[MadCount].MemoryType = LoaderSpecialMemory; + WinLdrInsertDescriptor(LoaderBlock, &Mad[MadCount]); + MadCount++; + } +#endif + + DbgPrint((DPRINT_WINDOWS, "MadCount: %d\n", MadCount)); + + WinLdrpDumpMemoryDescriptors(LoaderBlock); //FIXME: Delete! + + // Map our loader image, so we can continue running + /*Status = MempSetupPaging(OsLoaderBase >> MM_PAGE_SHIFT, OsLoaderSize >> MM_PAGE_SHIFT); + if (!Status) + { + UiMessageBox("Error during MempSetupPaging"); + return; + }*/ + + //VideoDisplayString(L"Hello from VGA, going into the kernel\n"); + DbgPrint((DPRINT_WINDOWS, "HalPageTable: 0x%X\n", HalPageTable)); + + // Page Tables have been setup, make special handling for PCR and TSS + // (which is done in BlSetupFotNt in usual ntldr) + HalPageTable[(KI_USER_SHARED_DATA - 0xFFC00000) >> MM_PAGE_SHIFT].PageFrameNumber = PcrBasePage+1; + HalPageTable[(KI_USER_SHARED_DATA - 0xFFC00000) >> MM_PAGE_SHIFT].Valid = 1; + HalPageTable[(KI_USER_SHARED_DATA - 0xFFC00000) >> MM_PAGE_SHIFT].Write = 1; + + HalPageTable[(KIP0PCRADDRESS - 0xFFC00000) >> MM_PAGE_SHIFT].PageFrameNumber = PcrBasePage; + HalPageTable[(KIP0PCRADDRESS - 0xFFC00000) >> MM_PAGE_SHIFT].Valid = 1; + HalPageTable[(KIP0PCRADDRESS - 0xFFC00000) >> MM_PAGE_SHIFT].Write = 1; + + // Map APIC + WinLdrpMapApic(); + + // Map VGA memory + //VideoMemoryBase = MmMapIoSpace(0xb8000, 4000, MmNonCached); + //DbgPrint((DPRINT_WINDOWS, "VideoMemoryBase: 0x%X\n", VideoMemoryBase)); + + Tss = (PKTSS)(KSEG0_BASE | (TssBasePage << MM_PAGE_SHIFT)); + + // Unmap what is not needed from kernel page table + MempDisablePages(); + + // Fill the memory descriptor list and + //PrepareMemoryDescriptorList(); + DbgPrint((DPRINT_WINDOWS, "Memory Descriptor List prepared, printing PDE\n")); + List_PaToVa(&LoaderBlock->MemoryDescriptorListHead); + +#ifdef DBG + { + ULONG *PDE_Addr=(ULONG *)PDE;//0xC0300000; + int j; + + DbgPrint((DPRINT_WINDOWS, "\nPDE\n")); + + for (i=0; i<128; i++) + { + DbgPrint((DPRINT_WINDOWS, "0x%04X | ", i*8)); + + for (j=0; j<8; j++) + { + DbgPrint((DPRINT_WINDOWS, "0x%08X ", PDE_Addr[i*8+j])); + } + + DbgPrint((DPRINT_WINDOWS, "\n")); + } + } +#endif + + + // Enable paging + //BS->ExitBootServices(ImageHandle,MapKey); + + // Disable Interrupts + _disable(); + + // Re-initalize EFLAGS + Ke386EraseFlags(); + + // Set the PDBR + __writecr3((ULONG_PTR)PDE); + + // Enable paging by modifying CR0 + __writecr0(__readcr0() | CR0_PG); + + // Set processor context + WinLdrSetProcessorContext(GdtIdt, KIP0PCRADDRESS, KSEG0_BASE | (TssBasePage << MM_PAGE_SHIFT)); + + // Zero KI_USER_SHARED_DATA page + memset((PVOID)KI_USER_SHARED_DATA, 0, MM_PAGE_SIZE); + + return TRUE; +} + +// Two special things this func does: it sorts descriptors, +// and it merges free ones +VOID +WinLdrInsertDescriptor(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, + IN PMEMORY_ALLOCATION_DESCRIPTOR NewDescriptor) +{ + PLIST_ENTRY ListHead = &LoaderBlock->MemoryDescriptorListHead; + PLIST_ENTRY PreviousEntry, NextEntry; + PMEMORY_ALLOCATION_DESCRIPTOR PreviousDescriptor = NULL, NextDescriptor = NULL; + + DbgPrint((DPRINT_WINDOWS, "BP=0x%X PC=0x%X %s\n", NewDescriptor->BasePage, + NewDescriptor->PageCount, MemTypeDesc[NewDescriptor->MemoryType])); + + /* Find a place where to insert the new descriptor to */ + PreviousEntry = ListHead; + NextEntry = ListHead->Flink; + while (NextEntry != ListHead) + { + NextDescriptor = CONTAINING_RECORD(NextEntry, + MEMORY_ALLOCATION_DESCRIPTOR, + ListEntry); + if (NewDescriptor->BasePage < NextDescriptor->BasePage) + break; + + PreviousEntry = NextEntry; + PreviousDescriptor = NextDescriptor; + NextEntry = NextEntry->Flink; + } + + /* Don't forget about merging free areas */ + if (NewDescriptor->MemoryType != LoaderFree) + { + /* Just insert, nothing to merge */ + InsertHeadList(PreviousEntry, &NewDescriptor->ListEntry); + } + else + { + /* Previous block also free? */ + if ((PreviousEntry != ListHead) && (PreviousDescriptor->MemoryType == LoaderFree) && + ((PreviousDescriptor->BasePage + PreviousDescriptor->PageCount) == + NewDescriptor->BasePage)) + { + /* Just enlarge previous descriptor's PageCount */ + PreviousDescriptor->PageCount += NewDescriptor->PageCount; + NewDescriptor = PreviousDescriptor; + } + else + { + /* Nope, just insert */ + InsertHeadList(PreviousEntry, &NewDescriptor->ListEntry); + } + + /* Next block is free ?*/ + if ((NextEntry != ListHead) && + (NextDescriptor->MemoryType == LoaderFree) && + ((NewDescriptor->BasePage + NewDescriptor->PageCount) == NextDescriptor->BasePage)) + { + /* Enlarge next descriptor's PageCount */ + NewDescriptor->PageCount += NextDescriptor->PageCount; + RemoveEntryList(&NextDescriptor->ListEntry); + } + } + + return; +} + +VOID +WinLdrSetProcessorContext(PVOID GdtIdt, IN ULONG Pcr, IN ULONG Tss) +{ + GDTIDT GdtDesc, IdtDesc, OldIdt; + PKGDTENTRY pGdt; + PKIDTENTRY pIdt; + ULONG Ldt = 0; + //ULONG i; + + DbgPrint((DPRINT_WINDOWS, "GDtIdt %p, Pcr %p, Tss 0x%08X\n", + GdtIdt, Pcr, Tss)); + + // Kernel expects the PCR to be zero-filled on startup + // FIXME: Why zero it here when we can zero it right after allocation? + RtlZeroMemory((PVOID)Pcr, MM_PAGE_SIZE); //FIXME: Why zero only 1 page when we allocate 2? + + // Get old values of GDT and IDT + Ke386GetGlobalDescriptorTable(GdtDesc); + Ke386GetInterruptDescriptorTable(IdtDesc); + + // Save old IDT + OldIdt.Base = IdtDesc.Base; + OldIdt.Limit = IdtDesc.Limit; + + // Prepare new IDT+GDT + GdtDesc.Base = KSEG0_BASE | (ULONG_PTR)GdtIdt; + GdtDesc.Limit = NUM_GDT * sizeof(KGDTENTRY) - 1; + IdtDesc.Base = (ULONG)((PUCHAR)GdtDesc.Base + GdtDesc.Limit + 1); + IdtDesc.Limit = NUM_IDT * sizeof(KIDTENTRY) - 1; + + // ======================== + // Fill all descriptors now + // ======================== + + pGdt = (PKGDTENTRY)GdtDesc.Base; + pIdt = (PKIDTENTRY)IdtDesc.Base; + + // + // Code selector (0x8) + // Flat 4Gb + // + pGdt[1].LimitLow = 0xFFFF; + pGdt[1].BaseLow = 0; + pGdt[1].HighWord.Bytes.BaseMid = 0; + pGdt[1].HighWord.Bytes.Flags1 = 0x9A; + pGdt[1].HighWord.Bytes.Flags2 = 0xCF; + pGdt[1].HighWord.Bytes.BaseHi = 0; + + // + // Data selector (0x10) + // Flat 4Gb + // + pGdt[2].LimitLow = 0xFFFF; + pGdt[2].BaseLow = 0; + pGdt[2].HighWord.Bytes.BaseMid = 0; + pGdt[2].HighWord.Bytes.Flags1 = 0x92; + pGdt[2].HighWord.Bytes.Flags2 = 0xCF; + pGdt[2].HighWord.Bytes.BaseHi = 0; + + // + // Selector (0x18) + // Flat 2Gb + // + pGdt[3].LimitLow = 0xFFFF; + pGdt[3].BaseLow = 0; + pGdt[3].HighWord.Bytes.BaseMid = 0; + pGdt[3].HighWord.Bytes.Flags1 = 0xFA; + pGdt[3].HighWord.Bytes.Flags2 = 0xCF; + pGdt[3].HighWord.Bytes.BaseHi = 0; + + // + // Selector (0x20) + // Flat 2Gb + // + pGdt[4].LimitLow = 0xFFFF; + pGdt[4].BaseLow = 0; + pGdt[4].HighWord.Bytes.BaseMid = 0; + pGdt[4].HighWord.Bytes.Flags1 = 0xF2; + pGdt[4].HighWord.Bytes.Flags2 = 0xCF; + pGdt[4].HighWord.Bytes.BaseHi = 0; + + // + // TSS Selector (0x28) + // + pGdt[5].LimitLow = 0x78-1; //FIXME: Check this + pGdt[5].BaseLow = (USHORT)(Tss & 0xffff); + pGdt[5].HighWord.Bytes.BaseMid = (UCHAR)((Tss >> 16) & 0xff); + pGdt[5].HighWord.Bytes.Flags1 = 0x89; + pGdt[5].HighWord.Bytes.Flags2 = 0x00; + pGdt[5].HighWord.Bytes.BaseHi = (UCHAR)((Tss >> 24) & 0xff); + + // + // PCR Selector (0x30) + // + pGdt[6].LimitLow = 0x01; + pGdt[6].BaseLow = (USHORT)(Pcr & 0xffff); + pGdt[6].HighWord.Bytes.BaseMid = (UCHAR)((Pcr >> 16) & 0xff); + pGdt[6].HighWord.Bytes.Flags1 = 0x92; + pGdt[6].HighWord.Bytes.Flags2 = 0xC0; + pGdt[6].HighWord.Bytes.BaseHi = (UCHAR)((Pcr >> 24) & 0xff); + + // + // Selector (0x38) + // + pGdt[7].LimitLow = 0xFFFF; + pGdt[7].BaseLow = 0; + pGdt[7].HighWord.Bytes.BaseMid = 0; + pGdt[7].HighWord.Bytes.Flags1 = 0xF3; + pGdt[7].HighWord.Bytes.Flags2 = 0x40; + pGdt[7].HighWord.Bytes.BaseHi = 0; + + // + // Some BIOS stuff (0x40) + // + pGdt[8].LimitLow = 0xFFFF; + pGdt[8].BaseLow = 0x400; + pGdt[8].HighWord.Bytes.BaseMid = 0; + pGdt[8].HighWord.Bytes.Flags1 = 0xF2; + pGdt[8].HighWord.Bytes.Flags2 = 0x0; + pGdt[8].HighWord.Bytes.BaseHi = 0; + + // + // Selector (0x48) + // + pGdt[9].LimitLow = 0; + pGdt[9].BaseLow = 0; + pGdt[9].HighWord.Bytes.BaseMid = 0; + pGdt[9].HighWord.Bytes.Flags1 = 0; + pGdt[9].HighWord.Bytes.Flags2 = 0; + pGdt[9].HighWord.Bytes.BaseHi = 0; + + // + // Selector (0x50) + // + pGdt[10].LimitLow = 0xFFFF; //FIXME: Not correct! + pGdt[10].BaseLow = 0; + pGdt[10].HighWord.Bytes.BaseMid = 0x2; + pGdt[10].HighWord.Bytes.Flags1 = 0x89; + pGdt[10].HighWord.Bytes.Flags2 = 0; + pGdt[10].HighWord.Bytes.BaseHi = 0; + + // + // Selector (0x58) + // + pGdt[11].LimitLow = 0xFFFF; + pGdt[11].BaseLow = 0; + pGdt[11].HighWord.Bytes.BaseMid = 0x2; + pGdt[11].HighWord.Bytes.Flags1 = 0x9A; + pGdt[11].HighWord.Bytes.Flags2 = 0; + pGdt[11].HighWord.Bytes.BaseHi = 0; + + // + // Selector (0x60) + // + pGdt[12].LimitLow = 0xFFFF; + pGdt[12].BaseLow = 0; //FIXME: Maybe not correct, but noone cares + pGdt[12].HighWord.Bytes.BaseMid = 0x2; + pGdt[12].HighWord.Bytes.Flags1 = 0x92; + pGdt[12].HighWord.Bytes.Flags2 = 0; + pGdt[12].HighWord.Bytes.BaseHi = 0; + + // + // Video buffer Selector (0x68) + // + pGdt[13].LimitLow = 0x3FFF; + pGdt[13].BaseLow = 0x8000; + pGdt[13].HighWord.Bytes.BaseMid = 0x0B; + pGdt[13].HighWord.Bytes.Flags1 = 0x92; + pGdt[13].HighWord.Bytes.Flags2 = 0; + pGdt[13].HighWord.Bytes.BaseHi = 0; + + // + // Points to GDT (0x70) + // + pGdt[14].LimitLow = NUM_GDT*sizeof(KGDTENTRY) - 1; + pGdt[14].BaseLow = 0x7000; + pGdt[14].HighWord.Bytes.BaseMid = 0xFF; + pGdt[14].HighWord.Bytes.Flags1 = 0x92; + pGdt[14].HighWord.Bytes.Flags2 = 0; + pGdt[14].HighWord.Bytes.BaseHi = 0xFF; + + // + // Some unused descriptors should go here + // + + // Copy the old IDT + RtlCopyMemory(pIdt, (PVOID)OldIdt.Base, OldIdt.Limit); + + // Mask interrupts + //asm("cli\n"); // they are already masked before enabling paged mode + + // Load GDT+IDT + Ke386SetGlobalDescriptorTable(GdtDesc); + Ke386SetInterruptDescriptorTable(IdtDesc); + + // Jump to proper CS and clear prefetch queue + asm("ljmp $0x08, $mb1\n" + "mb1:\n"); + + // Set SS selector + asm(".intel_syntax noprefix\n"); + asm("mov ax, 0x10\n"); // DataSelector=0x10 + asm("mov ss, ax\n"); + asm(".att_syntax\n"); + + // Set DS and ES selectors + Ke386SetDs(0x10); + Ke386SetEs(0x10); // this is vital for rep stosd + + // LDT = not used ever, thus set to 0 + Ke386SetLocalDescriptorTable(Ldt); + + // Load TSR + Ke386SetTr(0x28); + + // Clear GS + asm(".intel_syntax noprefix\n"); + asm("push 0\n"); + asm("pop gs\n"); + asm(".att_syntax\n"); + + // Set FS to PCR + Ke386SetFs(0x30); + + // Real end of the function, just for information + /* do not uncomment! + pop edi; + pop esi; + pop ebx; + mov esp, ebp; + pop ebp; + ret + */ +} diff --git a/reactos/dll/3rdparty/dxtn/internal.h b/reactos/dll/3rdparty/dxtn/internal.h index e5aad300363..b7e01dbe938 100644 --- a/reactos/dll/3rdparty/dxtn/internal.h +++ b/reactos/dll/3rdparty/dxtn/internal.h @@ -29,7 +29,7 @@ #ifdef __WIN32__ #define TAPI __declspec(dllexport) -#define TAPIENTRY /*__stdcall*/ +#define TAPIENTRY __stdcall #else #define TAPI #define TAPIENTRY diff --git a/reactos/dll/3rdparty/mesa32/mesa32.rbuild b/reactos/dll/3rdparty/mesa32/mesa32.rbuild index 77e1ade8565..5afb01eb1ba 100644 --- a/reactos/dll/3rdparty/mesa32/mesa32.rbuild +++ b/reactos/dll/3rdparty/mesa32/mesa32.rbuild @@ -2,6 +2,7 @@ + -enable-stdcall-fixup ntdll kernel32 msvcrt diff --git a/reactos/dll/cpl/access/lang/fr-FR.rc b/reactos/dll/cpl/access/lang/fr-FR.rc index 85f90982050..d1cc15e2f74 100644 --- a/reactos/dll/cpl/access/lang/fr-FR.rc +++ b/reactos/dll/cpl/access/lang/fr-FR.rc @@ -19,7 +19,7 @@ BEGIN PUSHBUTTON "P&aramиtres",IDC_FILTER_BUTTON,PROPSHEETWIDTH-PROPSHEETPADDING(17),LABELLINE(13)+2,PROPSHEETPADDING(15),14 GROUPBOX "Touches bascules",-1,PROPSHEETPADDING(1),LABELLINE(16)+3,PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1) - LTEXT "Utilisez les touches &bascules si vous voulez entendre un son йmis а chaques fois que vous appuyez sur Verr. maj, Verr. num, et Arrкt dйfil.",-1,PROPSHEETPADDING(2),LABELLINE(18)-3,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3) + LTEXT "Utilisez les touches &bascules si vous voulez entendre un son йmis а chaque fois que vous appuyez sur Verr. maj, Verr. num, et Arrкt dйfil.",-1,PROPSHEETPADDING(2),LABELLINE(18)-3,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3) AUTOCHECKBOX "Utiliser les touches bascules",IDC_TOGGLE_BOX,PROPSHEETPADDING(2),LABELLINE(20)+2,PROPSHEETWIDTH-PROPSHEETPADDING(20),14 PUSHBUTTON "Para&mиtres",IDC_TOGGLE_BUTTON,PROPSHEETWIDTH-PROPSHEETPADDING(17),LABELLINE(20)+2,PROPSHEETPADDING(15),14 diff --git a/reactos/dll/cpl/access/lang/no-NO.rc b/reactos/dll/cpl/access/lang/no-NO.rc new file mode 100644 index 00000000000..1c2914c47d2 --- /dev/null +++ b/reactos/dll/cpl/access/lang/no-NO.rc @@ -0,0 +1,304 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + + +IDD_PROPPAGEKEYBOARD DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Tastatur" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Treige taster",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1) + LTEXT "Bruk treige taster hvis du vil bruke Shift, Ctrl, Alt eller ved е trykke bare en om gangen.",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3) + AUTOCHECKBOX "&Bruk Trege taster",IDC_STICKY_BOX,PROPSHEETPADDING(2),LABELLINE(5)+2,PROPSHEETWIDTH-PROPSHEETPADDING(20),14 + PUSHBUTTON "&Innstillinger",IDC_STICKY_BUTTON,PROPSHEETWIDTH-PROPSHEETPADDING(17),LABELLINE(5)+2,PROPSHEETPADDING(15),14 + + GROUPBOX "Filtertaster",-1,PROPSHEETPADDING(1),LABELLINE(8)+5,PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(7)+2 + LTEXT "Bruk filtertaster hvis du vil at Reactos skal ignorere lette eller gjentatte tastetrykk, eller senke repetisjonshastigheten.",-1,PROPSHEETPADDING(2),LABELLINE(10)-3,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3) + AUTOCHECKBOX "Bruk &filtertaster",IDC_FILTER_BOX,PROPSHEETPADDING(2),LABELLINE(13)+2,PROPSHEETWIDTH-PROPSHEETPADDING(20),14 + PUSHBUTTON "I&nnstillinger",IDC_FILTER_BUTTON,PROPSHEETWIDTH-PROPSHEETPADDING(17),LABELLINE(13)+2,PROPSHEETPADDING(15),14 + + GROUPBOX "Veksletaster",-1,PROPSHEETPADDING(1),LABELLINE(16)+3,PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1) + LTEXT "Bruk vekseltaster hvis du vil hшre lydsignaler nеr du trykker pе Caps Lock, Num Lock, eller Scroll Lock.",-1,PROPSHEETPADDING(2),LABELLINE(18)-3,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(2) + AUTOCHECKBOX "Bruk &Vekseltaster",IDC_TOGGLE_BOX,PROPSHEETPADDING(2),LABELLINE(20)+2,PROPSHEETWIDTH-PROPSHEETPADDING(20),14 + PUSHBUTTON "Innstill&inger",IDC_TOGGLE_BUTTON,PROPSHEETWIDTH-PROPSHEETPADDING(17),LABELLINE(20)+2,PROPSHEETPADDING(15),14 + + AUTOCHECKBOX "Vi&s ekstra tastatur hjelp i programmer",IDC_KEYBOARD_EXTRA,PROPSHEETPADDING(1),LABELLINE(23)+3,PROPSHEETWIDTH-PROPSHEETPADDING(2),14 +END + + +IDD_PROPPAGESOUND DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Lyd" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Skjermsignal",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(10)+PROPSHEETPADDING(1) + LTEXT "Bruk skjermsignal hvis du vil at Reactos skal gi en visuell varsling nеr systemet lager lyd.",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3) + AUTOCHECKBOX "Bruk &skjermsignal",IDC_SENTRY_BOX,PROPSHEETPADDING(2),LABELLINE(5)+2,PROPSHEETPADDING(15),14 + LTEXT "Velg fшlgende varsling:", IDC_SENTRY_TEXT, PROPSHEETPADDING(2),LABELLINE(8)-2,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(1) + COMBOBOX IDC_SENTRY_COMBO, PROPSHEETPADDING(2), LABELLINE(9), PROPSHEETWIDTH-PROPSHEETPADDING(4), LABELLINE(6), CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + GROUPBOX "Lydvisning",-1,PROPSHEETPADDING(1),LABELLINE(12)+5,PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(7)+2 + LTEXT "Bruk lydvisning hvis du vil at programmene skal vise en melding nеr de snakker eller lager lyder.",-1,PROPSHEETPADDING(2),LABELLINE(14)-3,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3) + AUTOCHECKBOX "Bruk L&ydvisning",IDC_SSHOW_BOX,PROPSHEETPADDING(2),LABELLINE(16)+2,PROPSHEETWIDTH-PROPSHEETPADDING(4),14 +END + + +IDD_PROPPAGEDISPLAY DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Skjerm" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Hшykontrast",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1) + LTEXT "Velg dette alternativet hvis du vil at Reactos skal bruke farger og skrifter som er laget for е gjшre det lett leselig.",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3) + AUTOCHECKBOX "&Bruk hшykontrast",IDC_CONTRAST_BOX,PROPSHEETPADDING(2),LABELLINE(5)+2,PROPSHEETWIDTH-PROPSHEETPADDING(20),14 + PUSHBUTTON "&Innstillinger",IDC_CONTRAST_BUTTON,PROPSHEETWIDTH-PROPSHEETPADDING(17),LABELLINE(5)+2,PROPSHEETPADDING(15),14 + + GROUPBOX "Pekealternativer",-1,PROPSHEETPADDING(1),LABELLINE(8)+5,PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(13) + LTEXT "Flytt gidebryterne for е endre hastigheten markшren blinker med (markшrblink) og markшrens bredde.",-1,PROPSHEETPADDING(2),LABELLINE(9)+5,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(2) + CTEXT "Blinkehastighet:",-1,PROPSHEETPADDING(2),LABELLINE(12)+5,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(1) + LTEXT "Ingen",-1,PROPSHEETPADDING(3),LABELLINE(14)+2,PROPSHEETPADDING(6),LABELLINE(1) + LTEXT "Rask",-1,PROPSHEETWIDTH-PROPSHEETPADDING(9),LABELLINE(14)+2,PROPSHEETPADDING(6),LABELLINE(1) + CONTROL "",IDC_CURSOR_BLINK_TRACK,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,PROPSHEETPADDING(10),LABELLINE(14),PROPSHEETWIDTH-PROPSHEETPADDING(20),LABELLINE(2) + CTEXT "Bredde:",-1,PROPSHEETPADDING(2),LABELLINE(17),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(1) + LTEXT "Smal",-1,PROPSHEETPADDING(3),LABELLINE(18)+7,PROPSHEETPADDING(6),LABELLINE(1) + LTEXT "Bred",-1,PROPSHEETWIDTH-PROPSHEETPADDING(9),LABELLINE(18)+7,PROPSHEETPADDING(6),LABELLINE(1) + CONTROL "",IDC_CURSOR_WIDTH_TRACK,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,PROPSHEETPADDING(10),LABELLINE(18)+5,PROPSHEETWIDTH-PROPSHEETPADDING(20),LABELLINE(2) + LTEXT "",IDC_CURSOR_WIDTH_TEXT,PROPSHEETPADDING(3),LABELLINE(16),PROPSHEETPADDING(4),LABELLINE(1)+5 +END + + +IDD_PROPPAGEMOUSE DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Mus" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Musetaster",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1) + LTEXT "Bruk musetaster hvis du vil flytte pekeren ved hjelp av det numeriske tastaturet.",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3) + AUTOCHECKBOX "Bruk &Musetaster",IDC_MOUSE_BOX,PROPSHEETPADDING(2),LABELLINE(5)+2,PROPSHEETWIDTH-PROPSHEETPADDING(20),14 + PUSHBUTTON "&Innstillinger",IDC_MOUSE_BUTTON,PROPSHEETWIDTH-PROPSHEETPADDING(17),LABELLINE(5)+2,PROPSHEETPADDING(15),14 +END + + +IDD_PROPPAGEGENERAL DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Generielt" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Automatisk tilbakestilling",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(5) + AUTOCHECKBOX "&Deaktiver tilgjengelighetsfunksjonene etter inaktivitet i:",IDC_RESET_BOX,PROPSHEETPADDING(2),LABELLINE(2)-2,PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + COMBOBOX IDC_RESET_COMBO, PROPSHEETPADDING(4), LABELLINE(4), PROPSHEETPADDING(10), LABELLINE(5), + CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + GROUPBOX "Varsling",-1,PROPSHEETPADDING(1),LABELLINE(7)-2,PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(5) + AUTOCHECKBOX "Gi advarsel nеr en funksjon aktiveres",IDC_NOTIFICATION_MESSAGE,PROPSHEETPADDING(2),LABELLINE(8)-2,PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + AUTOCHECKBOX "Gi et lydsignal nеr en funksjon aktiveres eller deaktiveres",IDC_NOTIFICATION_SOUND,PROPSHEETPADDING(2),LABELLINE(10)-2,PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + + GROUPBOX "Serielle taster",-1,PROPSHEETPADDING(1),LABELLINE(13)-4,PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(5) + LTEXT "Ved hjelp av funkasjonen serielle taster kan du bruke tastaturet og musen pе forskjellige mеter.",-1,PROPSHEETPADDING(2),LABELLINE(14)-4,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(2) + AUTOCHECKBOX "Bruk &Serielle taster",IDC_SERIAL_BOX,PROPSHEETPADDING(2),LABELLINE(16)-4,PROPSHEETWIDTH-PROPSHEETPADDING(20),14 + PUSHBUTTON "I&nnstillinger",IDC_SERIAL_BUTTON,PROPSHEETWIDTH-PROPSHEETPADDING(17),LABELLINE(16)-4,PROPSHEETPADDING(15),14 + + GROUPBOX "Administrative alternativer",-1,PROPSHEETPADDING(1),LABELLINE(19)-4,PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(5) + AUTOCHECKBOX "Bruk alle innstillinger pе skrivebordet ved p&еlogging",IDC_ADMIN_LOGON_BOX,PROPSHEETPADDING(2),LABELLINE(20)-4,PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + AUTOCHECKBOX "Bruk alle innstillinger som &standard for nye brukere",IDC_ADMIN_USERS_BOX,PROPSHEETPADDING(2),LABELLINE(22)-4,PROPSHEETWIDTH-PROPSHEETPADDING(4),14 +END + + +IDD_STICKYKEYSOPTIONS DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Innstillinger for trege taster" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Hurtigtast",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1) + LTEXT "Trykk SHIFT 5 ganger for е aktivere hurtigtasten.",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3) + AUTOCHECKBOX "B&ruk hurtigtast",IDC_STICKY_ACTIVATE_CHECK,PROPSHEETPADDING(2),LABELLINE(5)+2,PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + + GROUPBOX "Alternativ",-1,PROPSHEETPADDING(1),LABELLINE(9),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(4)+PROPSHEETPADDING(1) + AUTOCHECKBOX "&Trykk endringstasten 2 ganger for е lеse den",IDC_STICKY_LOCK_CHECK,PROPSHEETPADDING(2),LABELLINE(10)+2,PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + AUTOCHECKBOX "&Deaktiver trege taster hvis 2 taster trykkes samtidig",IDC_STICKY_UNLOCK_CHECK,PROPSHEETPADDING(2),LABELLINE(12),PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + + GROUPBOX "Varsling",-1,PROPSHEETPADDING(1),LABELLINE(15),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(4)+PROPSHEETPADDING(1) + AUTOCHECKBOX "&Gi et lydsignal nеr endringstasten trykkes",IDC_STICKY_SOUND_CHECK,PROPSHEETPADDING(2),LABELLINE(16)+2,PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + AUTOCHECKBOX "&Vis status for trege taster pе skjermen",IDC_STICKY_STATUS_CHECK,PROPSHEETPADDING(2),LABELLINE(18),PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + + DEFPUSHBUTTON "OK", IDOK, PROPSHEETWIDTH-111, PROPSHEETHEIGHT-21, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, PROPSHEETWIDTH-57, PROPSHEETHEIGHT-21, 50, 14 +END + + +IDD_FILTERKEYSOPTIONS DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Innstillinger for filtertaster" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Hurtigtast",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1) + LTEXT "Hurtigtast for filtertaster er: \nHold nede hшyre Skift-tast i 8 sekunder.",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3) + AUTOCHECKBOX "&Bruk hurtigtast",IDC_FILTER_ACTIVATE_CHECK,PROPSHEETPADDING(2),LABELLINE(5)+2,PROPSHEETWIDTH-PROPSHEETPADDING(20),14 + + GROUPBOX "Filteralternativer",-1,PROPSHEETPADDING(1),LABELLINE(8)+5,PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(8)+5 + AUTORADIOBUTTON "Ign&orer gjentatte tastetrykk",IDC_FILTER_BOUNCE_RADIO,PROPSHEETPADDING(2),LABELLINE(9)+7,PROPSHEETPADDING(20),LABELLINE(1),WS_GROUP|WS_TABSTOP + AUTORADIOBUTTON "Ign&orer raske tastetrykk og senk repetisjonshastigheten",IDC_FILTER_REPEAT_RADIO,PROPSHEETPADDING(2),LABELLINE(11)+5,PROPSHEETPADDING(20),LABELLINE(2),BS_TOP|BS_MULTILINE + PUSHBUTTON "&Innstillinger",IDC_FILTER_BOUNCE_BUTTON,PROPSHEETWIDTH-PROPSHEETPADDING(17),LABELLINE(9)+5,PROPSHEETPADDING(15),14,WS_GROUP + PUSHBUTTON "I&nnstillinger",IDC_FILTER_REPEAT_BUTTON,PROPSHEETWIDTH-PROPSHEETPADDING(17),LABELLINE(11)+5,PROPSHEETPADDING(15),14,WS_GROUP + LTEXT "&Klikk og skriv her hvis du vil teste innstillingene for filtertaster:",-1,PROPSHEETPADDING(2),LABELLINE(14)+1,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(1) + EDITTEXT IDC_FILTER_TEST_EDIT,PROPSHEETPADDING(2),LABELLINE(15)+1,PROPSHEETWIDTH-PROPSHEETPADDING(4),14,WS_GROUP|ES_AUTOHSCROLL + + GROUPBOX "Varsling",-1,PROPSHEETPADDING(1),LABELLINE(17)+6,PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(4)+3 + AUTOCHECKBOX "&Gi lydsignal nеr taster trykkes eller godtas",IDC_FILTER_SOUND_CHECK,PROPSHEETPADDING(2),LABELLINE(19),PROPSHEETWIDTH-PROPSHEETPADDING(4),10 + AUTOCHECKBOX "V&is status for filtertaster pе skjermen",IDC_FILTER_STATUS_CHECK,PROPSHEETPADDING(2),LABELLINE(20)+6,PROPSHEETWIDTH-PROPSHEETPADDING(4),10 + + DEFPUSHBUTTON "OK", IDOK, PROPSHEETWIDTH-111, PROPSHEETHEIGHT-21, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, PROPSHEETWIDTH-57, PROPSHEETHEIGHT-21, 50, 14 +END + + +IDD_TOGGLEKEYSOPTIONS DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Innstillinger for veksletaster" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Hurtigtast",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1) + LTEXT "Hurtigtasten for veksletaster er: \nHold nede Num Lock-tasten i 5 sekunder.",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3) + AUTOCHECKBOX "Bruk &hurtigtast",IDC_TOGGLE_ACTIVATE_CHECK,PROPSHEETPADDING(2),LABELLINE(5)+2,PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + + DEFPUSHBUTTON "OK", IDOK, PROPSHEETWIDTH-111, PROPSHEETHEIGHT-21, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, PROPSHEETWIDTH-57, PROPSHEETHEIGHT-21, 50, 14 +END + + +IDD_CONTRASTOPTIONS DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Innstillinger for hшykontrast" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Hurtigtast",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1) + LTEXT "Hurtigtasten for hшykontrast er: \nTrykk .",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3) + AUTOCHECKBOX "&Bruk hurtigtast",IDC_CONTRAST_ACTIVATE_CHECK,PROPSHEETPADDING(2),LABELLINE(5)+2,PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + + GROUPBOX "Utseendeoppsett med hшykontrast",-1,PROPSHEETPADDING(1),LABELLINE(9),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(4)+PROPSHEETPADDING(1) + LTEXT "Gjeldende hшykontrastoppsett er:",-1,PROPSHEETPADDING(2),LABELLINE(10)+2,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(1) + COMBOBOX IDC_CONTRAST_COMBO, PROPSHEETPADDING(2), LABELLINE(11)+2, PROPSHEETWIDTH-PROPSHEETPADDING(4), LABELLINE(6), + CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + DEFPUSHBUTTON "OK", IDOK, PROPSHEETWIDTH-111, PROPSHEETHEIGHT-21, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, PROPSHEETWIDTH-57, PROPSHEETHEIGHT-21, 50, 14 +END + + +IDD_MOUSEKEYSOPTIONS DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Innstillinger for musetaster" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Hurtigtast",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1) + LTEXT "Hurtigtasten for musetaster er: \nTrykk pе .",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3) + AUTOCHECKBOX "&Bruk hurtigtast",IDC_MOUSEKEYS_ACTIVATE_CHECK,PROPSHEETPADDING(2),LABELLINE(5)+2,PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + + GROUPBOX "Pekehastighet",-1,PROPSHEETPADDING(1),LABELLINE(9),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(9) + + LTEXT "&Maks hastighet:",-1,PROPSHEETPADDING(2),LABELLINE(10)+4,PROPSHEETPADDING(8),LABELLINE(1) + LTEXT "Lav",-1,PROPSHEETPADDING(11),LABELLINE(10)+4,PROPSHEETPADDING(3),LABELLINE(1) + CONTROL "",IDC_MOUSEKEYS_SPEED_TRACK,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,PROPSHEETPADDING(15),LABELLINE(10)+2,PROPSHEETWIDTH-PROPSHEETPADDING(22),LABELLINE(2) + LTEXT "Hшyt",-1,PROPSHEETWIDTH-PROPSHEETPADDING(7),LABELLINE(10)+4,PROPSHEETPADDING(3),LABELLINE(1) + + LTEXT "&Akselerasjon:",-1,PROPSHEETPADDING(2),LABELLINE(13)+4,PROPSHEETPADDING(8),LABELLINE(1) + LTEXT "Treg",-1,PROPSHEETPADDING(11),LABELLINE(13)+4,PROPSHEETPADDING(3),LABELLINE(1) + CONTROL "",IDC_MOUSEKEYS_ACCEL_TRACK,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,PROPSHEETPADDING(15),LABELLINE(13)+2,PROPSHEETWIDTH-PROPSHEETPADDING(22),LABELLINE(2) + LTEXT "Rask",-1,PROPSHEETWIDTH-PROPSHEETPADDING(7),LABELLINE(13)+4,PROPSHEETPADDING(3),LABELLINE(1) + + AUTOCHECKBOX "&Hold nede Ctrl for raskere og Shift for langsommere",IDC_MOUSEKEYS_SPEED_CHECK,PROPSHEETPADDING(2),LABELLINE(16),PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + + LTEXT "Bruk musetaster nеr Num Lock er:",-1,PROPSHEETPADDING(1),LABELLINE(18)+7,PROPSHEETPADDING(20),LABELLINE(1) + AUTORADIOBUTTON "P&е",IDC_MOUSEKEYS_ON_RADIO,PROPSHEETWIDTH-PROPSHEETPADDING(14),LABELLINE(18)+7,PROPSHEETPADDING(5),LABELLINE(1) + AUTORADIOBUTTON "A&v",IDC_MOUSEKEYS_OFF_RADIO,PROPSHEETWIDTH-PROPSHEETPADDING(8),LABELLINE(18)+7,PROPSHEETPADDING(5),LABELLINE(1) + + AUTOCHECKBOX "&Vis status for musetaster pе skjermen",IDC_MOUSEKEYS_STATUS_CHECK,PROPSHEETPADDING(1),LABELLINE(20)+2,PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + + DEFPUSHBUTTON "OK", IDOK, PROPSHEETWIDTH-111, PROPSHEETHEIGHT-21, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, PROPSHEETWIDTH-57, PROPSHEETHEIGHT-21, 50, 14 +END + + +IDD_BOUNCEKEYSOPTIONS DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Avanserte innstillinger for filtertaster" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Bounce Keys",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(5) + LTEXT "&Ignorer tastetrykk som gjentas raskere enn:",-1,PROPSHEETPADDING(2),LABELLINE(2)+1,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(2) + COMBOBOX IDC_BOUNCE_TIME_COMBO, PROPSHEETPADDING(2), LABELLINE(3)+5, PROPSHEETWIDTH-PROPSHEETPADDING(4), LABELLINE(6), + CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + LTEXT "&Testomrеde:",-1,PROPSHEETPADDING(1),LABELLINE(7)+3,PROPSHEETPADDING(8),LABELLINE(1) + EDITTEXT IDC_BOUNCE_TEST_EDIT,PROPSHEETPADDING(10),LABELLINE(7),PROPSHEETWIDTH-PROPSHEETPADDING(11),14,ES_AUTOHSCROLL + + DEFPUSHBUTTON "OK", IDOK, PROPSHEETWIDTH-111, PROPSHEETHEIGHT-21, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, PROPSHEETWIDTH-57, PROPSHEETHEIGHT-21, 50, 14 +END + + +IDD_REPEATKEYSOPTIONS DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Avanserte innstillinger for filtertaster" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Repeat Keys",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(12) + LTEXT "Overstyr innstillingene under tastatur i kontrollpanel:",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(2) + + AUTORADIOBUTTON "&Ingen repetisjon",IDC_REPEAT_NOREPEAT_RADIO,PROPSHEETPADDING(2),LABELLINE(3)+3,78,LABELLINE(1),WS_GROUP + AUTORADIOBUTTON "&Senk repetisjonshastigheten",IDC_REPEAT_REPEAT_RADIO,PROPSHEETPADDING(2),LABELLINE(4)+7,131,LABELLINE(1) + + LTEXT "Repetisjons&forskinkelse:",-1,PROPSHEETPADDING(4),LABELLINE(6)+4,PROPSHEETPADDING(10),LABELLINE(1) + COMBOBOX IDC_REPEAT_DELAY_COMBO, PROPSHEETPADDING(4), LABELLINE(7)+6, PROPSHEETWIDTH-PROPSHEETPADDING(6), LABELLINE(6), + CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + LTEXT "Repetisjons&hastigheten:",-1,PROPSHEETPADDING(4),LABELLINE(9)+6,PROPSHEETPADDING(10),LABELLINE(1) + COMBOBOX IDC_REPEAT_REPEAT_COMBO, PROPSHEETPADDING(4), LABELLINE(10)+8, PROPSHEETWIDTH-PROPSHEETPADDING(6), LABELLINE(7), + CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + GROUPBOX "Sene taster",-1,PROPSHEETPADDING(1),LABELLINE(14),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(4)+4 + LTEXT "&Tastene mе holdes nede i:",-1,PROPSHEETPADDING(2),LABELLINE(15),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(1) + COMBOBOX IDC_REPEAT_WAIT_COMBO, PROPSHEETPADDING(2), LABELLINE(16)+4, PROPSHEETWIDTH-PROPSHEETPADDING(4), LABELLINE(8), + CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + LTEXT "&Testomrеde:",-1,PROPSHEETPADDING(1),LABELLINE(20),PROPSHEETPADDING(8),LABELLINE(1) + EDITTEXT IDC_REPEAT_TEST_EDIT,PROPSHEETPADDING(10),LABELLINE(19)+7,PROPSHEETWIDTH-PROPSHEETPADDING(11),14,ES_AUTOHSCROLL + + DEFPUSHBUTTON "OK", IDOK, PROPSHEETWIDTH-111, PROPSHEETHEIGHT-21, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, PROPSHEETWIDTH-57, PROPSHEETHEIGHT-21, 50, 14 +END + + +IDD_SERIALKEYSOPTIONS DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Innstillinger for serielle taster" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Serielle taster",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(10) + LTEXT "Velg porten der du vil koble til en alternativ innenhet.",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(2) + + LTEXT "&Seriell port:",-1,PROPSHEETPADDING(2),LABELLINE(3)+5,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(2) + COMBOBOX IDC_SERIAL_PORT_COMBO, PROPSHEETPADDING(2), LABELLINE(4)+7, PROPSHEETWIDTH-PROPSHEETPADDING(4), LABELLINE(6), + CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + LTEXT "&Overfшrings-hastighet:",-1,PROPSHEETPADDING(2),LABELLINE(7),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(2) + COMBOBOX IDC_SERIAL_BAUD_COMBO, PROPSHEETPADDING(2), LABELLINE(8)+2, PROPSHEETWIDTH-PROPSHEETPADDING(4), LABELLINE(8), + CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + DEFPUSHBUTTON "OK", IDOK, PROPSHEETWIDTH-111, PROPSHEETHEIGHT-21, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, PROPSHEETWIDTH-57, PROPSHEETHEIGHT-21, 50, 14 +END + + +STRINGTABLE +BEGIN + IDS_CPLSYSTEMNAME "Tilgjengelighetsalternativer" + IDS_CPLSYSTEMDESCRIPTION "Tilpass tilgjengelighetsalternativer funksjon for din datamaskin." + + IDS_SENTRY_NONE "[Ingen]" + IDS_SENTRY_TITLE "Flash the titlebar" + IDS_SENTRY_WINDOW "Flash the active window" + IDS_SENTRY_DISPLAY "Flash the desktop" + + IDS_SECONDS "Sekunder" + IDS_MINUTES "Minutter" +END diff --git a/reactos/dll/cpl/access/rsrc.rc b/reactos/dll/cpl/access/rsrc.rc index 96328a4e537..81ecdd62b45 100644 --- a/reactos/dll/cpl/access/rsrc.rc +++ b/reactos/dll/cpl/access/rsrc.rc @@ -13,6 +13,7 @@ #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/nl-NL.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/cpl/appwiz-new/lang/cs-CZ.rc b/reactos/dll/cpl/appwiz-new/lang/cs-CZ.rc new file mode 100644 index 00000000000..47db0fba254 --- /dev/null +++ b/reactos/dll/cpl/appwiz-new/lang/cs-CZ.rc @@ -0,0 +1,204 @@ +/* FILE: dll/cpl/appwiz-new/lang/cs-CZ.rc + * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) + * UPDATED: 2008-07-27 + */ + +LANGUAGE LANG_CZECH, SUBLANG_DEFAULT + +IDR_POPUP_APP MENU +BEGIN + POPUP "popup" + BEGIN + MENUITEM "&Odebrat", ID_APP_REMOVE + MENUITEM "&Zmмnit", ID_APP_MODIFY, GRAYED + END +END + +IDD_NETINSTALL DIALOGEX 0, 0, 242, 221 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Sнќovб instalace" +FONT 8, "MS Shell Dlg" +BEGIN + PUSHBUTTON "&Instalovat...", IDC_INSTALL, 150, 171, 85, 14 + LTEXT "&Nбsledujнcн software mщћe bэt automaticky nainstalovбn systйmem ReactOS. Program vybranэ v seznamu nainstalujete klepnutнm na tlaинtko Instalovat.", IDC_NETTEXT, 40, 6, 195, 32 + LISTBOX IDC_NETPROGLIST, 7, 42, 228, 125, LBS_STANDARD | WS_TABSTOP + ICON IDI_APPICO, IDC_NETICON, 9, 10, 20, 20 +END + +IDD_CREATESHORTCUT DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Vytvoшit zбstupce" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "Tento prщvodce pomщћe s vytvoшenнm zбstupcщ k mнstnнm иi sнќovнm programщm, souborщm, poинtaищm nebo internetovэm adresбm.", -1, 97, 7, 195, 28 + LTEXT "&Zadejte umнstмnн poloћky:", IDC_LOCATIONITEM, 98, 46, 196, 8 + EDITTEXT IDC_LOCITEMEDIT, 97, 58, 133, 14, ES_AUTOHSCROLL + PUSHBUTTON "P&rochбzet...", IDC_LOCBROWSE, 233, 58, 60, 14 + LTEXT "Pokraиujte klepnutнm na tlaинtko Dalљн.", -1, 97, 95, 198, 8 +END + +IDD_SELPROGFOLDER DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Vэbмr sloћky" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Zvolte sloћku, kam bude tento zбstupce umнstмn:", -1, 100, 7, 193, 10 + CONTROL "", IDC_SELFOLDER, "SYSTREEVIEW32", WS_BORDER | WS_TABSTOP | 0x00000028, 100, 19, 193, 90 + PUSHBUTTON "&Novб sloћka...", IDC_NEWFOLDERBTN, 218, 116, 75, 14 + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT +END + +IDD_SELPROGTITLE DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Vэbмr popisku programu" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Zadejte nбzev tohoto zбstupce:", -1, 100, 10, 194, 10 + EDITTEXT IDC_NAMESCEDIT, 100, 23, 194, 14, ES_AUTOHSCROLL + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "Kliknutнm na Dokonиit se vytvoшн zбstupce.", -1, 100, 61, 194, 8 +END + +IDD_SELPROGICON DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Vэbмr ikony" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Zvolte ikonu pro tohoto zбstupce:", -1, 100, 8, 195, 10 + LISTBOX IDC_SELICONLIST, 100, 20, 192, 130, LBS_OWNERDRAWFIXED | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | LBS_DISABLENOSCROLL | WS_HSCROLL | WS_TABSTOP + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT +END + +IDD_INSTFROMCD DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Nainstalovat program z diskety nebo CD-ROM" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "", IDC_HEADTEXT, 101, 7, 193, 28 + ICON 0, IDC_INSTFROMCDICON, 100, 60, 18, 20 + LTEXT "", IDC_INSTFROMCDTEXT, 123, 66, 146, 8 +END + +IDD_RUNINSTPROG DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Spustit instalaиnн program" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "", IDC_HEADTEXT, 101, 6, 195, 28 + LTEXT "&Otevшнt:", IDC_LOCATIONITEM, 100, 53, 195, 8 + EDITTEXT IDC_LOCITEMEDIT, 98, 64, 133, 14, ES_AUTOHSCROLL + PUSHBUTTON "P&rochбzet...", IDC_LOCBROWSE, 234, 64, 60, 14 +END + +IDD_CHANGEUSEROPT DIALOG 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Zmмnit uћivatelskй nastavenн" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "Tento program lze umoћnit kaћdйmu uћivateli.", 1012, 101, 5, 194, 40 + AUTORADIOBUTTON "Instalovat", IDC_INSTALLRB, 108, 51, 146, 14, BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "Spustit", IDC_LOCATIONITEM, 108, 74, 146, 14, BS_MULTILINE | NOT WS_TABSTOP +END + +IDD_FINISHADMINST DIALOG 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Dokonиit administrбtorskou instalaci" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "Kliknutнm na Dokonиit se zmмnн mapovбnн ini zpмt.", IDC_HEADTEXT, 98, 7, 196, 40 +END + +IDD_AFTERINST DIALOG 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Po instalaci" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "Prosнm stisknмte tlaинtko Dalљн.", IDC_HEADTEXT, 98, 7, 197, 40 +END + +IDD_RUNINSTPROG2 DIALOG 0, 0, 250, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Spustit instalaиnн program" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Prosнm urиete umнstмnн odinstalaиnнho programu.", IDC_UNINSTLOCTEXT, 9, 8, 235, 37 + LTEXT "&Pшнkazovэ шбdek pro odinstalaиnн program:", IDC_LOCATIONITEM, 9, 57, 237, 8 + EDITTEXT IDC_LOCITEMEDIT, 7, 69, 165, 14, ES_AUTOHSCROLL + PUSHBUTTON "P&rochбzet...", IDC_LOCBROWSE, 178, 69, 66, 14 + DEFPUSHBUTTON "OK", IDOK, 118, 100, 60, 14 + PUSHBUTTON "Storno", IDCANCEL, 184, 100, 60, 14 +END + +IDD_WARNING DIALOG 20, 20, 255, 100 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Varovбnн" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_WARNINGICON, 8, 10, 20, 20 + LTEXT "K tomuto poинtaиi jsou pшihlбљenн dalљн uћivatelй.", -1, 37, 8, 214, 10 + LTEXT "Odinstalace programu, kterэ je spuљtмn jinэm uћivatelem, nemusн probмhnout kompletnм.", -1, 37, 23, 212, 22 + LTEXT "Pro ъplnou zmмnu nebo odstranмnн programu se pшepnмte na ostatnн uћivatele a odhlaљte je.", IDC_WARNINGTEXT, 37, 46, 212, 26 + PUSHBUTTON "&Pшepnout uћivatele", IDC_SWITCHUSER, 61, 81, 60, 14 + PUSHBUTTON "Po&kraиovat", IDOK, 125, 81, 60, 14 + PUSHBUTTON "Storno", IDCANCEL, 189, 81, 60, 14 +END + +IDD_REMSHORTCUTS DIALOGEX 20, 20, 220, 200 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Odebrat zбstupce/sloћky" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Pro odebrбnн vybranй poloћky ze Start menu klepnмte na tlaинtko Odstranit.", IDC_UNINSTLOCTEXT, 10, 7, 204, 16 + CONTROL "", IDC_SELFOLDER, "SYSTREEVIEW32", WS_BORDER | WS_TABSTOP | 0x00000023, 10, 28, 200, 145 + PUSHBUTTON "&Odebrat", IDC_REMOVEBTN, 84, 182, 60, 14 + DEFPUSHBUTTON "Zavшнt", IDOK, 151, 182, 60, 14 +END + +IDD_ADDLATER DIALOGEX 0, 0, 220, 160 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTERMOUSE | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Pшidat pozdмji" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Lze zvolit datum a иas, kdy mб bэt tento program pшidбn do tohoto poинtaиe. Napшнklad je moћnй nastavit pшidбnн na dobu vaљн nepшнtomnosti u poинtaиe.", IDC_UNINSTLOCTEXT, 7, 4, 208, 33 + AUTORADIOBUTTON "&Pшidat program pozdмji", IDC_ADDPROGLATER, 7, 47, 207, 10, WS_GROUP + CONTROL "Picker", 12368, "SYSDATETIMEPICK32", WS_BORDER | WS_TABSTOP | 0x0000000C, 29, 62, 107, 14 + AUTORADIOBUTTON "&Nepшidбvat program", IDC_NOTADDPROG, 7, 87, 208, 10 + DEFPUSHBUTTON "OK", IDOK, 89, 141, 60, 14, WS_GROUP + PUSHBUTTON "Storno", IDCANCEL, 154, 141, 60, 14, NOT WS_TABSTOP +END + +STRINGTABLE +BEGIN + IDS_CPLSYSTEMNAME "Pшidat nebo odebrat programy" + IDS_CPLSYSTEMDESCRIPTION "Nainstaluje nebo odebere programy a souибsti systйmu ReactOS." + IDS_UNABLEOPEN_UNINSTKEY "Nelze otevшнt klни Uninstall" + IDS_LIST_TITLE "Seznam" + IDS_SIZE_TITLE "Velikost (MB)" + IDS_LAST_USED "Naposledy pouћito" + IDS_PROGANDUPDATES "Programy & aktualizace" + IDS_PROGRAMS_ONLY "Jen programy" + IDS_UPDATES_ONLY "Jen aktualizace" + IDS_WELCOME_TITLE "Vнtejte v prщvodci k Pшidat nebo odebrat programy" + IDS_WELCOME_MSG "Prosнm zvolte kategorii vlevo иi zvolte aplikaci v seznamu pro odebrбnн nebo zobrazenн informacн." + IDS_SEARCH_TEXT "Hledat v seznamu..." + IDS_REMOVE_BTN "&Odebrat" + IDS_MODIFY_BTN "&Zmмnit" + IDS_UNABLEREAD_UNINSTSTR "Nelze naинst. Tento zбpis je neplatnэ nebo byl vytvoшen MSI instalбtorem." + IDS_INF_REG_OWNER "Registrovanэ vlastnнk: " + IDS_INF_PRODUCT_ID "ID produktu: " + IDS_INF_PUBLISHER "Vydavatel: " + IDS_INF_VERSION "Verze: " + IDS_INF_CONTACT "Kontakt: " + IDS_INF_SUP_INFO "Informace o podpoшe: " + IDS_INF_SUP_PHONE "Telefon na podporu: " + IDS_INF_PRODUCT_UPD "Aktualizace produktu: " + IDS_INF_README "Readme: " + IDS_INF_COMMENTS "Komentбшe: " + IDS_NO_INFORMATION "O tomto programu nejsou ћбdnй informace." +END diff --git a/reactos/dll/cpl/appwiz-new/lang/no-NO.rc b/reactos/dll/cpl/appwiz-new/lang/no-NO.rc new file mode 100644 index 00000000000..1f9c89d3c49 --- /dev/null +++ b/reactos/dll/cpl/appwiz-new/lang/no-NO.rc @@ -0,0 +1,199 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDR_POPUP_APP MENU +BEGIN + POPUP "popup" + BEGIN + MENUITEM "&Fjern", ID_APP_REMOVE + MENUITEM "&Endre", ID_APP_MODIFY, GRAYED + END +END + +IDD_NETINSTALL DIALOGEX 0, 0, 242, 221 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Nettverk installering" +FONT 8, "MS Shell Dlg" +BEGIN + PUSHBUTTON "&Installering...", IDC_INSTALL, 150, 171, 85, 14 + LTEXT "&Fшlgende programvare kan bli automatisk installert av ReactOS. For е installere et program, velg det fra listen og klikk installer.", IDC_NETTEXT, 40, 6, 195, 32 + LISTBOX IDC_NETPROGLIST, 7, 42, 228, 125, LBS_STANDARD | WS_TABSTOP + ICON IDI_APPICO, IDC_NETICON, 9, 10, 20, 20 +END + +IDD_CREATESHORTCUT DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Opprett snarvei" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "This wizard helps you to create shortcuts to local or network programs, files, folders, computers, or Internet addresses.", -1, 97, 7, 195, 28 + LTEXT "&Type the location of the item:", IDC_LOCATIONITEM, 98, 46, 196, 8 + EDITTEXT IDC_LOCITEMEDIT, 97, 58, 133, 14, ES_AUTOHSCROLL + PUSHBUTTON "B&la gjennom...", IDC_LOCBROWSE, 233, 58, 60, 14 + LTEXT "Klikk pе neste for е forsette.", -1, 97, 95, 198, 8 +END + +IDD_SELPROGFOLDER DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Velg Program mappe" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Velg en mappe for е plassere denne snarveien i:", -1, 100, 7, 193, 10 + CONTROL "", IDC_SELFOLDER, "SYSTREEVIEW32", WS_BORDER | WS_TABSTOP | 0x00000028, 100, 19, 193, 90 + PUSHBUTTON "Ny &mappe...", IDC_NEWFOLDERBTN, 218, 116, 75, 14 + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT +END + +IDD_SELPROGTITLE DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Select a Title for the Program" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Type a name for this shortcut:", -1, 100, 10, 194, 10 + EDITTEXT IDC_NAMESCEDIT, 100, 23, 194, 14, ES_AUTOHSCROLL + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "Klikk fullfшrt for е opprette snarveien.", -1, 100, 61, 194, 8 +END + +IDD_SELPROGICON DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Velg en ikon" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Velg en ikon for snarveien:", -1, 100, 8, 195, 10 + LISTBOX IDC_SELICONLIST, 100, 20, 192, 130, LBS_OWNERDRAWFIXED | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | LBS_DISABLENOSCROLL | WS_HSCROLL | WS_TABSTOP + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT +END + +IDD_INSTFROMCD DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Innstaller program fra diskett eller CD-stasjon" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "", IDC_HEADTEXT, 101, 7, 193, 28 + ICON 0, IDC_INSTFROMCDICON, 100, 60, 18, 20 + LTEXT "", IDC_INSTFROMCDTEXT, 123, 66, 146, 8 +END + +IDD_RUNINSTPROG DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Kjшr innstallasjon programmet" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "", IDC_HEADTEXT, 101, 6, 195, 28 + LTEXT "&Еpne:", IDC_LOCATIONITEM, 100, 53, 195, 8 + EDITTEXT IDC_LOCITEMEDIT, 98, 64, 133, 14, ES_AUTOHSCROLL + PUSHBUTTON "B&la gjennom...", IDC_LOCBROWSE, 234, 64, 60, 14 +END + +IDD_CHANGEUSEROPT DIALOG 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Endre bruker valg" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "You have the option to make this new program available to every User.", 1012, 101, 5, 194, 40 + AUTORADIOBUTTON "Installere", IDC_INSTALLRB, 108, 51, 146, 14, BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "Kjшr", IDC_LOCATIONITEM, 108, 74, 146, 14, BS_MULTILINE | NOT WS_TABSTOP +END + +IDD_FINISHADMINST DIALOG 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Finish Admin Install" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "Change ini mapping back by clicking Finish.", IDC_HEADTEXT, 98, 7, 196, 40 +END + +IDD_AFTERINST DIALOG 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Etter Installasjon" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "Vennligst trykk pе neste.", IDC_HEADTEXT, 98, 7, 197, 40 +END + +IDD_RUNINSTPROG2 DIALOG 0, 0, 250, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Kjшr installasjons program" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Please specify the uninstall program location.", IDC_UNINSTLOCTEXT, 9, 8, 235, 37 + LTEXT "&Command line for the uninstall program:", IDC_LOCATIONITEM, 9, 57, 237, 8 + EDITTEXT IDC_LOCITEMEDIT, 7, 69, 165, 14, ES_AUTOHSCROLL + PUSHBUTTON "B&la gjennom...", IDC_LOCBROWSE, 178, 69, 66, 14 + DEFPUSHBUTTON "OK", IDOK, 118, 100, 60, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 184, 100, 60, 14 +END + +IDD_WARNING DIALOG 20, 20, 255, 100 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Advarsel" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_WARNINGICON, 8, 10, 20, 20 + LTEXT "There are other users logged on to this computer.", -1, 37, 8, 214, 10 + LTEXT "If you uninstall this program while another user is running it, the program might not uninstall completely.", -1, 37, 23, 212, 22 + LTEXT "To properly change or remove this program, switch to and log off each user before you continue.", IDC_WARNINGTEXT, 37, 46, 212, 26 + PUSHBUTTON "&Bytt bruker", IDC_SWITCHUSER, 61, 81, 60, 14 + PUSHBUTTON "&Fortsett", IDOK, 125, 81, 60, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 189, 81, 60, 14 +END + +IDD_REMSHORTCUTS DIALOGEX 20, 20, 220, 200 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Fjern snarveier/mapper" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&To remove an item from the Start menu, select the item and click Remove.", IDC_UNINSTLOCTEXT, 10, 7, 204, 16 + CONTROL "", IDC_SELFOLDER, "SYSTREEVIEW32", WS_BORDER | WS_TABSTOP | 0x00000023, 10, 28, 200, 145 + PUSHBUTTON "&Fjern", IDC_REMOVEBTN, 84, 182, 60, 14 + DEFPUSHBUTTON "Lukk", IDOK, 151, 182, 60, 14 +END + +IDD_ADDLATER DIALOGEX 0, 0, 220, 160 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTERMOUSE | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Legg til senere" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "You may choose a date and time when you would like to add this program to your computer. For example, you can schedule this to happen when you are away from your computer.", IDC_UNINSTLOCTEXT, 7, 4, 208, 33 + AUTORADIOBUTTON "&Add program later", IDC_ADDPROGLATER, 7, 47, 207, 10, WS_GROUP + CONTROL "Picker", 12368, "SYSDATETIMEPICK32", WS_BORDER | WS_TABSTOP | 0x0000000C, 29, 62, 107, 14 + AUTORADIOBUTTON "&Do not add program", IDC_NOTADDPROG, 7, 87, 208, 10 + DEFPUSHBUTTON "OK", IDOK, 89, 141, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", IDCANCEL, 154, 141, 60, 14, NOT WS_TABSTOP +END + +STRINGTABLE +BEGIN + IDS_CPLSYSTEMNAME "Legg til eller fjern programmer" + IDS_CPLSYSTEMDESCRIPTION "Innstaller eller fjern programmer og ReactOS komponenter." + IDS_UNABLEOPEN_UNINSTKEY "Unable to open Uninstall Key" + IDS_LIST_TITLE "Liste" + IDS_SIZE_TITLE "Stшrrelse (MB)" + IDS_LAST_USED "Sist bruk" + IDS_PROGANDUPDATES "Programmer & oppdateringer" + IDS_PROGRAMS_ONLY "Bare programmer" + IDS_UPDATES_ONLY "Bare oppdateringer" + IDS_WELCOME_TITLE "Velkommen til assistenten for е legg til eller fjerne programmer" + IDS_WELCOME_MSG "Please choose a category on the left or select application on the list for removing or viewing information." + IDS_SEARCH_TEXT "Sшk i listen..." + IDS_REMOVE_BTN "&Fjern" + IDS_MODIFY_BTN "&Endre" + IDS_UNABLEREAD_UNINSTSTR "Unable to read UninstallString. This entry is invalid or has been created by an MSI installer." + IDS_INF_REG_OWNER "Registerert eier: " + IDS_INF_PRODUCT_ID "Produkt ID: " + IDS_INF_PUBLISHER "Utgiver: " + IDS_INF_VERSION "Versjon: " + IDS_INF_CONTACT "Kontakt: " + IDS_INF_SUP_INFO "Hjelp informasjon: " + IDS_INF_SUP_PHONE "Hjelp telefon: " + IDS_INF_PRODUCT_UPD "Produkt oppdateringer: " + IDS_INF_README "Readme: " + IDS_INF_COMMENTS "Kommentarer: " + IDS_NO_INFORMATION "Ingen informasjon om dette programmet." +END diff --git a/reactos/dll/cpl/appwiz-new/rsrc.rc b/reactos/dll/cpl/appwiz-new/rsrc.rc index 3d1641754f1..12e9c485a66 100644 --- a/reactos/dll/cpl/appwiz-new/rsrc.rc +++ b/reactos/dll/cpl/appwiz-new/rsrc.rc @@ -2,11 +2,13 @@ #include #include "lang/bg-BG.rc" +#include "lang/cs-CZ.rc" #include "lang/de-DE.rc" #include "lang/en-US.rc" #include "lang/es-ES.rc" #include "lang/fr-FR.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/uk-UA.rc" diff --git a/reactos/dll/cpl/appwiz/createlink.c b/reactos/dll/cpl/appwiz/createlink.c index 047f1ff16ac..357e538df59 100644 --- a/reactos/dll/cpl/appwiz/createlink.c +++ b/reactos/dll/cpl/appwiz/createlink.c @@ -188,7 +188,7 @@ FinishDlgProc(HWND hwndDlg, switch(HIWORD(wParam)) { case EN_CHANGE: - if (SendDlgItemMessage(hwndDlg, IDC_SHORTCUT_LOCATION, WM_GETTEXTLENGTH, 0, 0)) + if (SendDlgItemMessage(hwndDlg, IDC_SHORTCUT_NAME, WM_GETTEXTLENGTH, 0, 0)) { PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | PSWIZB_FINISH); } diff --git a/reactos/dll/cpl/appwiz/lang/cs-CZ.rc b/reactos/dll/cpl/appwiz/lang/cs-CZ.rc new file mode 100644 index 00000000000..03f7c7feea7 --- /dev/null +++ b/reactos/dll/cpl/appwiz/lang/cs-CZ.rc @@ -0,0 +1,174 @@ +/* FILE: dll/cpl/appwiz/lang/cs-CZ.rc + * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) + * UPDATED: 2008-07-27 + */ + +LANGUAGE LANG_CZECH, SUBLANG_DEFAULT + +IDR_POPUP_APP MENU +BEGIN + POPUP "popup" + BEGIN + MENUITEM "Zmмnit/&Odebrat",ID_APP_MODIFYREMOVE + MENUITEM "&Informace", ID_APP_INFORMATION + END +END + +IDR_POPUP_UPD MENU +BEGIN + POPUP "popup" + BEGIN + MENUITEM "&Odebrat", ID_UPD_REMOVE + MENUITEM "&Informace", ID_UPD_INFORMATION + END +END + +IDD_PROPPAGEINSTALL DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Zmмnit nebo odebrat programy" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_CPLSYSTEM,-1,PROPSHEETPADDING,6,16,16 + LTEXT "Nбsledujнcн software mщћe bэt automaticky odebrбn. Pro odebrбnн nebo zmмnu jeho instalovanэch komponent jej vyberte ze seznamu a kliknмte na Zmмnit/odebrat.",-1,36,7,PROPSHEETWIDTH-48,22 + LTEXT "Najнt:",-1,PROPSHEETPADDING,33,30,8 + EDITTEXT IDC_FIND_EDIT, PROPSHEETPADDING+30, 30, 180, 14, WS_VISIBLE | WS_TABSTOP + LTEXT "Zobrazit:",-1,250,33,30,8 + COMBOBOX IDC_VIEW_COMBO, 280, 30, 94, 80, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + CONTROL "", IDC_SOFTWARELIST, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_AUTOARRANGE | LVS_SINGLESEL, PROPSHEETPADDING, 50, PROPSHEETWIDTH-12, 155, WS_EX_CLIENTEDGE + PUSHBUTTON "Zmмnit/&odebrat", IDC_ADDREMOVE, PROPSHEETPADDING, 210, 80, 14, WS_DISABLED + PUSHBUTTON "&Informace", IDC_INFO_BUTTON, PROPSHEETPADDING+85, 210, 80, 14, WS_DISABLED +END + +IDD_PROPPAGEUPDATES DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Odebrat aktualizace" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_UPDATES,-1,PROPSHEETPADDING,6,16,16 + LTEXT "Nбsledujнcн aktualizace mohou bэt automaticky odebrбny. Pro odebrбnн aktualizace ji vyberte ze seznamu a kliknмte na Odebrat.",-1,36,7,PROPSHEETWIDTH-48,22 + LTEXT "Najнt:",-1,PROPSHEETPADDING,33,30,8 + EDITTEXT IDC_UPD_FIND_EDIT, PROPSHEETPADDING+30, 30, 180, 14, WS_VISIBLE | WS_TABSTOP + LTEXT "Zobrazit:",-1,250,33,30,8 + COMBOBOX IDC_UPD_VIEW_COMBO, 280, 30, 94, 80, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + CONTROL "", IDC_UPDATESLIST, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_AUTOARRANGE | LVS_SINGLESEL, PROPSHEETPADDING, 50, PROPSHEETWIDTH-12, 155, WS_EX_CLIENTEDGE + PUSHBUTTON "&Odebrat", IDC_UPD_REMOVE, PROPSHEETPADDING, 210, 80, 14, WS_DISABLED + PUSHBUTTON "&Informace", IDC_UPD_INFO_BUTTON, PROPSHEETPADDING+85, 210, 80, 14, WS_DISABLED +END + +IDD_PROPPAGEADD DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Pшidat novй programy" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_CPLSYSTEM,-1,PROPSHEETPADDING,10,32,32 + LTEXT "Novэ program lze nainstalovat kliknutнm na ""Instalovat"".",-1,36,11,PROPSHEETWIDTH-48,8 + PUSHBUTTON "&Instalovat...", IDC_INSTALL, PROPSHEETWIDTH-(90), 46, 80, 14 + LTEXT "", -1, PROPSHEETPADDING, 70, PROPSHEETWIDTH-12, 1, NOT WS_GROUP | SS_SUNKEN + ICON IDI_DOWNLOADICO,-1,PROPSHEETPADDING,80,32,32 + LTEXT "Novэ program lze stбhnout a nainstalovat kliknutнm na ""Download!"".",-1,36,83,PROPSHEETWIDTH-48,17 + PUSHBUTTON "&Download!", IDC_ADD_DOWNLOAD_BUTTON, PROPSHEETWIDTH-(90), 125, 80, 14, WS_DISABLED + LTEXT "", -1, PROPSHEETPADDING, 150, PROPSHEETWIDTH-12, 1, NOT WS_GROUP | SS_SUNKEN + ICON IDI_APPINETICO,-1,PROPSHEETPADDING,160,32,32 + LTEXT "Stisknмte tlaинtko ""Najнt na internetu"" pro vyhledбnн novэch aplikacн dostupnэch pomocн pшipojenн k internetu.",-1,36,161,PROPSHEETWIDTH-48,17 + PUSHBUTTON "&Vlastnosti...", IDC_ADD_PROP_BUTTON, PROPSHEETWIDTH-(175), 205, 80, 14, WS_DISABLED + PUSHBUTTON "&Najнt na internetu", IDC_ADD_FIND_BUTTON, PROPSHEETWIDTH-(90), 205, 80, 14, WS_DISABLED +END + +IDD_PROPPAGEROSSETUP DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "ReactOS Setup" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_REACTOS,-1,PROPSHEETPADDING,6,16,16 + LTEXT "",-1,36,7,PROPSHEETWIDTH-48,22 +END + +IDD_FIRSTPAGE DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Create link" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Text1", -1, 115, 15, 160, 24 + LTEXT "Text2", -1, 115, 35, 160, 17 +END + +IDD_SUBMIT_REPORT DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Create link" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Text1",-1,10,0,225,40 + LTEXT "Text2",-1,10,40,120,20 + LTEXT "Text3",-1,10,55,120,20 +END + +IDD_SHORTCUT_LOCATION DIALOGEX 0, 0, 340, 200 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Vytvoшit zбstupce" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Tento prщvodce pomщћe s vytvoшenнm zбstupcщ na mнstnн\nnebo sнќovй programy, soubory, sloћky, poинtaиe nebo\ninternetovй adresy.", -1, 120, 15, 200, 30 + LTEXT "Zadejte umнstмnн poloћky:", -1, 120, 50, 120, 10 + EDITTEXT IDC_SHORTCUT_LOCATION, 120, 65, 150, 15, ES_LEFT + PUSHBUTTON "Prochбzet...", IDC_SHORTCUT_BROWSE, 272, 65, 55, 15, ES_LEFT + LTEXT "Pokraиujte kliknutнm na Dalљн.", -1, 120, 97, 162, 10 +END + +IDD_SHORTCUT_FINISH DIALOGEX 0, 0, 340, 200 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Zvolte nбzev programu" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "&Zadejte nбzev tohoto zбstupce:", -1, 120, 15, 150, 10 + EDITTEXT IDC_SHORTCUT_NAME, 120, 35, 150, 15, ES_LEFT + LTEXT "Kliknutнm na Dokonиit vytvoшнte zбstupce.", -1, 118, 97, 178, 17 +END + +IDD_INFORMATION DIALOGEX 5, 100, 269, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Informace" +FONT 8, "MS Shell Dlg" +BEGIN + EDITTEXT IDS_INFO_DISPNAME, PROPSHEETPADDING, 6, 258, 15, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Registrovanэ vlastnнk:", -1, PROPSHEETPADDING, 27, 97, 8 + EDITTEXT IDS_INFO_REGOWNER, PROPSHEETPADDING+97, 25, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "ID produktu:", -1, PROPSHEETPADDING, 44, 97, 8 + EDITTEXT IDS_INFO_PRODUCTID, PROPSHEETPADDING+97, 42, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Vydavatel:", -1, PROPSHEETPADDING, 61, 97, 8 + EDITTEXT IDS_INFO_PUBLISHER, PROPSHEETPADDING+97, 59, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Verze:", -1, PROPSHEETPADDING, 78, 97, 8 + EDITTEXT IDS_INFO_VERSION, PROPSHEETPADDING+97, 76, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Kontakt:", -1, PROPSHEETPADDING, 95, 97, 8 + EDITTEXT IDS_INFO_CONTACT, PROPSHEETPADDING+97, 93, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Informace o podpoшe:", -1, PROPSHEETPADDING, 112, 97, 8 + EDITTEXT IDS_INFO_SUPPORTINFO, PROPSHEETPADDING+97, 110, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Telefon na podporu:", -1, PROPSHEETPADDING, 129, 97, 8 + EDITTEXT IDS_INFO_SUPPORTPHONE, PROPSHEETPADDING+97, 127, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Updaty produktu:", -1, PROPSHEETPADDING, 146, 97, 8 + EDITTEXT IDS_INFO_PRODUCT_UPDATES, PROPSHEETPADDING+97, 144, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Readme:", -1, PROPSHEETPADDING, 163, 97, 8 + EDITTEXT IDS_INFO_README, PROPSHEETPADDING+97, 161, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Komentбшe:", -1, PROPSHEETPADDING, 180, 97, 8 + EDITTEXT IDS_INFO_COMMENTS, PROPSHEETPADDING+97, 178, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + PUSHBUTTON "&zavшit", IDCANCEL, 212, 198, 50, 14 +END + +STRINGTABLE +BEGIN + IDS_CPLSYSTEMNAME "Pшidat/Odebrat programy" + IDS_CPLSYSTEMDESCRIPTION "Nastavuje programy a vytvбшн zбstupce." + IDS_ERROR "Chyba" + IDS_UNABLEREAD_UNINSTSTR "Nelze naинst UninstallString. Tento zбpis je neplatnэ nebo byl vytvoшen MSI instalбtorem." + IDS_UNABLEOPEN_UNINSTKEY "Nelze otevшнt klни Uninstall" + IDS_APPLIST "Aktuбlnм nainstalovanй programy" + IDS_UPDATESLIST "Aktuбlnм nainstalovanй aktualizace" + IDS_LARGEICONS "Velkй ikony" + IDS_LIST "Seznam" + IDS_DETAILS "Podrobnosti" + IDS_CREATE_SHORTCUT "Vytvoшit zбstupce" + IDS_ERROR_NOT_FOUND "Soubor %s nebyl nalezen." + IDS_UNABLEREAD_INFORMATION "Nelze otevшнt klниe Information" + IDS_NO_INFORMATION "Ћбdnй informace" + IDS_NONE_APP "Nejsou nainstalovбny ћбdnй aplikace." + IDS_NONE_UPD "Nejsou nainstalovбny ћбdnй aktualizace." +END diff --git a/reactos/dll/cpl/appwiz/lang/no-NO.rc b/reactos/dll/cpl/appwiz/lang/no-NO.rc new file mode 100644 index 00000000000..529a23d67b2 --- /dev/null +++ b/reactos/dll/cpl/appwiz/lang/no-NO.rc @@ -0,0 +1,169 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDR_POPUP_APP MENU +BEGIN + POPUP "popup" + BEGIN + MENUITEM "Endre/&fjerne",ID_APP_MODIFYREMOVE + MENUITEM "&Informasjon", ID_APP_INFORMATION + END +END + +IDR_POPUP_UPD MENU +BEGIN + POPUP "popup" + BEGIN + MENUITEM "&Fjern", ID_UPD_REMOVE + MENUITEM "&Informasjon", ID_UPD_INFORMATION + END +END + +IDD_PROPPAGEINSTALL DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Endre eller fjern programmer" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_CPLSYSTEM,-1,PROPSHEETPADDING,6,16,16 + LTEXT "Fшlgende programvare kan bli fjernet automatisk. For е fjerne et program eller е endre dems innstallerte komponenter, velg de fra listen og klikk Endre/Fjerne.",-1,36,7,PROPSHEETWIDTH-48,22 + LTEXT "Finn:",-1,PROPSHEETPADDING,33,30,8 + EDITTEXT IDC_FIND_EDIT, PROPSHEETPADDING+30, 30, 180, 14, WS_VISIBLE | WS_TABSTOP + LTEXT "Vis:",-1,250,33,30,8 + COMBOBOX IDC_VIEW_COMBO, 280, 30, 94, 80, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + CONTROL "", IDC_SOFTWARELIST, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_AUTOARRANGE | LVS_SINGLESEL, PROPSHEETPADDING, 50, PROPSHEETWIDTH-12, 155, WS_EX_CLIENTEDGE + PUSHBUTTON "Endre/&Fjerne", IDC_ADDREMOVE, PROPSHEETPADDING, 210, 80, 14, WS_DISABLED + PUSHBUTTON "&Informasjon", IDC_INFO_BUTTON, PROPSHEETPADDING+85, 210, 80, 14, WS_DISABLED +END + +IDD_PROPPAGEUPDATES DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Fjern oppdateringer" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_UPDATES,-1,PROPSHEETPADDING,6,16,16 + LTEXT "Fшlgende oppdateringer kan bli fjernet automatisk. For е fjerne oppdateringer, velg de fra listen og klikk Fjerne.",-1,36,7,PROPSHEETWIDTH-48,22 + LTEXT "Finn:",-1,PROPSHEETPADDING,33,30,8 + EDITTEXT IDC_UPD_FIND_EDIT, PROPSHEETPADDING+30, 30, 180, 14, WS_VISIBLE | WS_TABSTOP + LTEXT "Vis:",-1,250,33,30,8 + COMBOBOX IDC_UPD_VIEW_COMBO, 280, 30, 94, 80, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + CONTROL "", IDC_UPDATESLIST, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_AUTOARRANGE | LVS_SINGLESEL, PROPSHEETPADDING, 50, PROPSHEETWIDTH-12, 155, WS_EX_CLIENTEDGE + PUSHBUTTON "&Fjerne", IDC_UPD_REMOVE, PROPSHEETPADDING, 210, 80, 14, WS_DISABLED + PUSHBUTTON "&Informasjon", IDC_UPD_INFO_BUTTON, PROPSHEETPADDING+85, 210, 80, 14, WS_DISABLED +END + +IDD_PROPPAGEADD DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Legg til et nytt program" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_CPLSYSTEM,-1,PROPSHEETPADDING,10,32,32 + LTEXT "For е innstallere et nytt program, klikk ""Innstallere"".",-1,36,11,PROPSHEETWIDTH-48,8 + PUSHBUTTON "&Innstallere...", IDC_INSTALL, PROPSHEETWIDTH-(90), 46, 80, 14 + LTEXT "", -1, PROPSHEETPADDING, 70, PROPSHEETWIDTH-12, 1, NOT WS_GROUP | SS_SUNKEN + ICON IDI_DOWNLOADICO,-1,PROPSHEETPADDING,80,32,32 + LTEXT "For е nedlaste og installere nytt applikasjon, trykk pе ""Nedlasting !"".",-1,36,83,PROPSHEETWIDTH-48,17 + PUSHBUTTON "&Nedlasting !", IDC_ADD_DOWNLOAD_BUTTON, PROPSHEETWIDTH-(90), 125, 80, 14, WS_DISABLED + LTEXT "", -1, PROPSHEETPADDING, 150, PROPSHEETWIDTH-12, 1, NOT WS_GROUP | SS_SUNKEN + ICON IDI_APPINETICO,-1,PROPSHEETPADDING,160,32,32 + LTEXT "Trykk pе ""Finn pе internett"" Knappen for е sшke for nye applikasjoner som er tilgjengelig ved hjelp av internett forbindelsen.",-1,36,161,PROPSHEETWIDTH-48,17 + PUSHBUTTON "&Egenskaper...", IDC_ADD_PROP_BUTTON, PROPSHEETWIDTH-(175), 205, 80, 14, WS_DISABLED + PUSHBUTTON "&Finn pе internett", IDC_ADD_FIND_BUTTON, PROPSHEETWIDTH-(90), 205, 80, 14, WS_DISABLED +END + +IDD_PROPPAGEROSSETUP DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "ReactOS Innstallering" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_REACTOS,-1,PROPSHEETPADDING,6,16,16 + LTEXT "",-1,36,7,PROPSHEETWIDTH-48,22 +END + +IDD_FIRSTPAGE DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Opprett lenke" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Text1", -1, 115, 15, 160, 24 + LTEXT "Text2", -1, 115, 35, 160, 17 +END + +IDD_SUBMIT_REPORT DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Opprett lenke" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Text1",-1,10,0,225,40 + LTEXT "Text2",-1,10,40,120,20 + LTEXT "Text3",-1,10,55,120,20 +END + +IDD_SHORTCUT_LOCATION DIALOGEX 0, 0, 340, 200 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Opprett snarvei" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "This wizard helps you to create shortcuts to local or\nnetwork programs, files, folders, computers, or Internet\naddresses.", -1, 120, 15, 200, 30 + LTEXT "Type the location of the item:", -1, 120, 50, 120, 10 + EDITTEXT IDC_SHORTCUT_LOCATION, 120, 65, 150, 15, ES_LEFT + PUSHBUTTON "Bla gjennom...", IDC_SHORTCUT_BROWSE, 272, 65, 55, 15, ES_LEFT + LTEXT "Trykk pе neste for е fortsette.", -1, 120, 97, 162, 10 +END + +IDD_SHORTCUT_FINISH DIALOGEX 0, 0, 340, 200 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Select a Title for the Program" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "&Type a name for this shortcut:", -1, 120, 15, 150, 10 + EDITTEXT IDC_SHORTCUT_NAME, 120, 35, 150, 15, ES_LEFT + LTEXT "Trykk pе fullfшrt for е opprette snarveien.", -1, 118, 97, 178, 17 +END + +IDD_INFORMATION DIALOGEX 5, 100, 269, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Informasjon" +FONT 8, "MS Shell Dlg" +BEGIN + EDITTEXT IDS_INFO_DISPNAME, PROPSHEETPADDING, 6, 258, 15, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Registerert eier:", -1, PROPSHEETPADDING, 27, 97, 8 + EDITTEXT IDS_INFO_REGOWNER, PROPSHEETPADDING+97, 25, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Produkt ID:", -1, PROPSHEETPADDING, 44, 97, 8 + EDITTEXT IDS_INFO_PRODUCTID, PROPSHEETPADDING+97, 42, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Utgiver:", -1, PROPSHEETPADDING, 61, 97, 8 + EDITTEXT IDS_INFO_PUBLISHER, PROPSHEETPADDING+97, 59, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Versjon:", -1, PROPSHEETPADDING, 78, 97, 8 + EDITTEXT IDS_INFO_VERSION, PROPSHEETPADDING+97, 76, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Kontakt:", -1, PROPSHEETPADDING, 95, 97, 8 + EDITTEXT IDS_INFO_CONTACT, PROPSHEETPADDING+97, 93, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Hjelp informasjon:", -1, PROPSHEETPADDING, 112, 97, 8 + EDITTEXT IDS_INFO_SUPPORTINFO, PROPSHEETPADDING+97, 110, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Hjelp Telefon:", -1, PROPSHEETPADDING, 129, 97, 8 + EDITTEXT IDS_INFO_SUPPORTPHONE, PROPSHEETPADDING+97, 127, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Produkt oppdateringer:", -1, PROPSHEETPADDING, 146, 97, 8 + EDITTEXT IDS_INFO_PRODUCT_UPDATES, PROPSHEETPADDING+97, 144, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Readme:", -1, PROPSHEETPADDING, 163, 97, 8 + EDITTEXT IDS_INFO_README, PROPSHEETPADDING+97, 161, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Kommentarer:", -1, PROPSHEETPADDING, 180, 97, 8 + EDITTEXT IDS_INFO_COMMENTS, PROPSHEETPADDING+97, 178, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + PUSHBUTTON "&Lukk", IDCANCEL, 212, 198, 50, 14 +END + +STRINGTABLE +BEGIN + IDS_CPLSYSTEMNAME "Legg til/Fjern Programmer" + IDS_CPLSYSTEMDESCRIPTION "Sett opp programmer og opprett snarveier." + IDS_ERROR "Feil" + IDS_UNABLEREAD_UNINSTSTR "Unable to read UninstallString. This entry is invalid or has been created by an MSI installer." + IDS_UNABLEOPEN_UNINSTKEY "Ikke mulig е еpne avinnstallert nшkkel" + IDS_APPLIST "Nеvжrende installerte programmer" + IDS_UPDATESLIST "Nеvжrende installerte oppdateringer" + IDS_LARGEICONS "Store ikoner" + IDS_LIST "Liste" + IDS_DETAILS "Detailjer" + IDS_CREATE_SHORTCUT "Opprett snarveier" + IDS_ERROR_NOT_FOUND "Filen %s ble ikke funnet." + IDS_UNABLEREAD_INFORMATION "Ikke mulig е еpne informasjons nшkkel" + IDS_NO_INFORMATION "Ingen informasjon" + IDS_NONE_APP "Det er ingen installerte applikasjoner." + IDS_NONE_UPD "Det er ingen installerte oppdateringer." +END diff --git a/reactos/dll/cpl/appwiz/rsrc.rc b/reactos/dll/cpl/appwiz/rsrc.rc index fda7e20a47d..00d4633551d 100644 --- a/reactos/dll/cpl/appwiz/rsrc.rc +++ b/reactos/dll/cpl/appwiz/rsrc.rc @@ -2,12 +2,14 @@ #include #include "lang/bg-BG.rc" +#include "lang/cs-CZ.rc" #include "lang/de-DE.rc" #include "lang/el-GR.rc" #include "lang/en-US.rc" #include "lang/es-ES.rc" #include "lang/fr-FR.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/cpl/console/colors.c b/reactos/dll/cpl/console/colors.c index 16eabd810a3..25fa28ac64d 100644 --- a/reactos/dll/cpl/console/colors.c +++ b/reactos/dll/cpl/console/colors.c @@ -1,5 +1,4 @@ -/* $Id$ - * +/* * PROJECT: ReactOS Console Configuration DLL * LICENSE: GPL - See COPYING in the top level directory * FILE: dll/win32/console/colors.c diff --git a/reactos/dll/cpl/console/console.c b/reactos/dll/cpl/console/console.c index cdbd817086f..801a0d35c3c 100644 --- a/reactos/dll/cpl/console/console.c +++ b/reactos/dll/cpl/console/console.c @@ -1,5 +1,4 @@ -/* $Id$ - * +/* * PROJECT: ReactOS Console Configuration DLL * LICENSE: GPL - See COPYING in the top level directory * FILE: dll/win32/console/console.c diff --git a/reactos/dll/cpl/console/console.rbuild b/reactos/dll/cpl/console/console.rbuild index a905d98e3f1..7fce9201d08 100644 --- a/reactos/dll/cpl/console/console.rbuild +++ b/reactos/dll/cpl/console/console.rbuild @@ -1,5 +1,5 @@ - + . 0x600 0x501 @@ -13,5 +13,6 @@ layout.c colors.c console.rc + console.spec console.h diff --git a/reactos/dll/cpl/console/console.rc b/reactos/dll/cpl/console/console.rc index 1f40b0d7bc7..d4f5ad07b7f 100644 --- a/reactos/dll/cpl/console/console.rc +++ b/reactos/dll/cpl/console/console.rc @@ -1,5 +1,4 @@ -/* $Id$ - * +/* * PROJECT: ReactOS Console Configuration DLL * LICENSE: GPL - See COPYING in the top level directory * FILE: dll/win32/console/console.rc diff --git a/reactos/dll/cpl/console/font.c b/reactos/dll/cpl/console/font.c index 6efb089f475..8145a081421 100644 --- a/reactos/dll/cpl/console/font.c +++ b/reactos/dll/cpl/console/font.c @@ -1,5 +1,4 @@ -/* $Id$ - * +/* * PROJECT: ReactOS Console Configuration DLL * LICENSE: GPL - See COPYING in the top level directory * FILE: dll/win32/console/font.c diff --git a/reactos/dll/cpl/console/lang/cs-CZ.rc b/reactos/dll/cpl/console/lang/cs-CZ.rc new file mode 100644 index 00000000000..1a5529f9d71 --- /dev/null +++ b/reactos/dll/cpl/console/lang/cs-CZ.rc @@ -0,0 +1,145 @@ +/* FILE: dll/cpl/console/lang/cs-CZ.rc + * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) + * UPDATED: 2008-07-27 + */ + +#include + +LANGUAGE LANG_CZECH, SUBLANG_DEFAULT + +IDD_PROPPAGEOPTIONS DIALOGEX 0, 0, 253, 220 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Moћnosti" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Velikost kurzoru", -1, 7, 7, 120, 70, WS_CHILD | WS_VISIBLE | WS_GROUP + CONTROL "&Malб", IDC_RADIO_SMALL_CURSOR, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 15, 20, 90, 10 + CONTROL "&Stшednн", IDC_RADIO_MEDIUM_CURSOR, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 15, 40, 90, 10 + CONTROL "&Velkб", IDC_RADIO_LARGE_CURSOR, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 15, 60, 90, 10 + GROUPBOX "Moћnosti zobrazenн", -1, 133, 7, 112, 70, WS_CHILD | WS_VISIBLE | WS_GROUP + CONTROL "&Okno", IDC_RADIO_DISPLAY_WINDOW, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 142, 20, 70, 10 + CONTROL "&Celб obrazovka", IDC_RADIO_DISPLAY_FULL, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 142, 40, 70, 10 + GROUPBOX "Historie pшнkazщ", -1, 7, 84, 120, 77, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Velikost v&yrovnбvacн pamмti:", -1, 14, 101, 70, 12 + EDITTEXT IDC_EDIT_BUFFER_SIZE, 90, 97, 30, 15, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_BUFFER_SIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 119, 97, 12, 15 + LTEXT "&Poиet vyrovnбvacнch pamмtн:", -1, 14, 124, 70, 12 + EDITTEXT IDC_EDIT_NUM_BUFFER, 90, 120, 30, 15, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_NUM_BUFFER, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 119, 120, 12, 15 + CHECKBOX "&Zahodit starй duplikбty", IDC_CHECK_DISCARD_DUPLICATES, 12, 140, 110, 15 + GROUPBOX "Moћnosti ъprav", -1, 133, 85, 112, 77, BS_GROUPBOX | WS_CHILD | WS_VISIBLE | WS_GROUP + CHECKBOX "Reћim &rychlэch ъprav", IDC_CHECK_QUICK_EDIT, 140, 97, 102, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CHECKBOX "Reћim v&klбdбnн", IDC_CHECK_INSERT_MODE, 140, 113, 76, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP +END + +IDD_PROPPAGEFONT DIALOGEX 0, 0, 253, 220 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Font" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Nбhled okna:", -1, 10, 10, 94, 10 + LTEXT "Velikost:", -1, 180, 10, 36, 10 + CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74 + LISTBOX IDC_LBOX_FONTS, 181, 20, 55, 80, LBS_DISABLENOSCROLL | WS_VSCROLL + LTEXT "&Font:", -1, 10, 105, 33, 10 + CHECKBOX "&Tuиnй fonty", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10 + LISTBOX IDC_LBOX_TYPE, 10, 120, 110, 40, LBS_DISABLENOSCROLL | WS_VSCROLL + GROUPBOX "", IDC_GROUPBOX_FONT_NAME, 6, 156, 241, 50 + CONTROL "", IDC_STATIC_SELECT_FONT_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 16, 165, 95, 35 + LTEXT "Kaћdэ znak je:", -1, 124, 166, 75, 10 + LTEXT "obrazovkovэch pixelщ љirokэ\nobrazovkovэch pixelщ vysokщ", -1, 136, 180, 101, 20 + LTEXT "", IDC_FONT_SIZE_X, 120, 180, 10, 10 + LTEXT "", IDC_FONT_SIZE_Y, 120, 188, 10, 10 +END + +IDD_PROPPAGELAYOUT DIALOGEX 0, 0, 253, 220 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Vzhled" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Nбhled okna:", -1, 8, 6, 95, 10 + CONTROL "", IDC_STATIC_LAYOUT_WINDOW_PREVIEW, "Static", SS_SUNKEN | SS_OWNERDRAW, 8, 16, 115, 70 + GROUPBOX "Velikost bufferu zobrazenн", -1, 130, 12, 115, 50 + LTEXT "&Љншka:", -1, 140, 28, 40, 10 + LTEXT "&Vэљka:", -1, 140, 46, 39, 10 + EDITTEXT IDC_EDIT_SCREEN_BUFFER_WIDTH, 203, 25, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_SCREEN_BUFFER_WIDTH, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 25, 13, 14 + EDITTEXT IDC_EDIT_SCREEN_BUFFER_HEIGHT, 203, 42, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_SCREEN_BUFFER_HEIGHT, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 42, 13, 14 + GROUPBOX "Velikost okna", -1, 130, 65, 115, 47 + LTEXT "Љ&ншka:", -1, 140, 78, 39, 10 + LTEXT "V&эљka:", -1, 140, 95, 37, 10 + EDITTEXT IDC_EDIT_WINDOW_SIZE_WIDTH, 203, 75, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_WINDOW_SIZE_WIDTH, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 75, 13, 14 + EDITTEXT IDC_EDIT_WINDOW_SIZE_HEIGHT, 203, 92, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_WINDOW_SIZE_HEIGHT, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 92, 13, 14 + GROUPBOX "Umнstмnн okna", -1, 130, 116, 115, 64 + LTEXT "&Zleva:", -1, 140, 132, 38, 10 + LTEXT "&Shora:", -1, 140, 149, 40, 10 + EDITTEXT IDC_EDIT_WINDOW_POS_LEFT, 203, 128, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_WINDOW_POS_LEFT, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 128, 13, 14 + EDITTEXT IDC_EDIT_WINDOW_POS_TOP, 203, 146, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_WINDOW_POS_TOP, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 146, 13, 14 + CHECKBOX "&Okno je umнstмno systйmem", IDC_CHECK_SYSTEM_POS_WINDOW, 137, 165, 104, 10 +END + +IDD_PROPPAGECOLORS DIALOGEX 0, 0, 253, 220 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Barvy" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "&Text zobrazenн", IDC_RADIO_SCREEN_TEXT, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 12, 112, 10 + CONTROL "Pozadн zo&brazenн", IDC_RADIO_SCREEN_BACKGROUND, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 30, 112, 10 + CONTROL "Text &vэbмru", IDC_RADIO_POPUP_TEXT, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 48, 112, 10 + CONTROL "Pozadн vэ&bмru", IDC_RADIO_POPUP_BACKGROUND, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 67, 112, 10 + GROUPBOX "Zvolenй barevnй hodnoty", -1, 129, 7, 118, 73 + LTEXT "Иe&rvenб:", -1, 140, 25, 48, 10 + EDITTEXT IDC_EDIT_COLOR_RED, 210, 22, 30, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_COLOR_RED, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 240, 22, 12, 14 + LTEXT "Zele&nб:", -1, 140, 42, 48, 10 + EDITTEXT IDC_EDIT_COLOR_GREEN, 210, 39, 30, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_COLOR_GREEN, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 240, 39, 12, 14 + LTEXT "&Modrб:", -1, 140, 60, 48, 10 + EDITTEXT IDC_EDIT_COLOR_BLUE, 210, 56, 30, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_COLOR_BLUE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 240, 56, 12, 14 + CONTROL "", IDC_STATIC_COLOR1, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 17, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR2, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 31, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR3, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 45, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR4, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 59, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR5, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 73, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR6, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 87, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR7, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 101, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR8, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 115, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR9, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 129, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR10, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 143, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR11, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 157, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR12, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 171, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR13, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 185, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR14, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 199, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR15, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 213, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR16, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 227, 90, 12, 12 + GROUPBOX "Zvolenй barvy zobrazenн", -1, 7, 111, 240, 40 + CONTROL "", IDC_STATIC_SCREEN_COLOR, "Static", SS_OWNERDRAW | SS_SUNKEN, 15, 124, 224, 20 + GROUPBOX "Zvolenй barvy vэbмru", -1, 7, 162, 240, 40 + CONTROL "", IDC_STATIC_POPUP_COLOR, "Static", SS_OWNERDRAW | SS_SUNKEN, 15, 176, 224, 20 +END + +IDD_APPLYOPTIONS DIALOGEX 0, 0, 220, 79 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Pouћнt vlastnosti" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "&Pouћнt vlastnosti jen pro toto okno", IDC_RADIO_APPLY_CURRENT, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 12, 12, 207, 10 + CONTROL "&Uloћit vlastnosti pro kaћdй dalљн budoucн okno s tнmto nбzvem", IDC_RADIO_APPLY_ALL, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 12, 31, 207, 10 + PUSHBUTTON "OK", IDOK, 58, 58, 50, 14, WS_VISIBLE + PUSHBUTTON "Storno", IDCANCEL, 114, 58, 50, 14, WS_VISIBLE +END + +STRINGTABLE +BEGIN + IDS_CPLNAME "Konzole" + IDS_CPLDESCRIPTION "Nastavit vlastnosti konzole." + IDS_APPLY_SHORTCUT_ALL "Zmмnit zб&stupce, kterэ spustil toto okno" + IDS_SCREEN_TEXT "C:\ReactOS> dir\nSYSTEM 10-01-99 5:00\nSYSTEM32 10-01-99 5:00" + IDS_RASTERFONTS "Rastrovй fonty" +END diff --git a/reactos/dll/cpl/console/lang/no-NO.rc b/reactos/dll/cpl/console/lang/no-NO.rc new file mode 100644 index 00000000000..8c1bddd8dd9 --- /dev/null +++ b/reactos/dll/cpl/console/lang/no-NO.rc @@ -0,0 +1,149 @@ +/* $Id: en-US.rc 31950 2008-01-22 19:08:51Z dreimer $ + * + * PROJECT: ReactOS Console Configuration DLL + * LICENSE: GPL - See COPYING in the top level directory + * FILE: dll/win32/console/lang/en-US.rc + * PURPOSE: English resource file + * PROGRAMMERS: Johannes Anderwald (johannes.anderwald@student.tugraz.at) + */ + +#include + +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_PROPPAGEOPTIONS DIALOGEX 0, 0, 253, 220 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Valg" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Markшrstшrrelse", -1, 7, 7, 120, 70, WS_CHILD | WS_VISIBLE | WS_GROUP + CONTROL "&Smе", IDC_RADIO_SMALL_CURSOR, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 15, 20, 90, 10 + CONTROL "&Middels", IDC_RADIO_MEDIUM_CURSOR, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 15, 40, 90, 10 + CONTROL "&Store", IDC_RADIO_LARGE_CURSOR, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 15, 60, 90, 10 + GROUPBOX "Skjerminnstillinger", -1, 133, 7, 112, 70, WS_CHILD | WS_VISIBLE | WS_GROUP + CONTROL "&Vindu", IDC_RADIO_DISPLAY_WINDOW, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 142, 20, 70, 10 + CONTROL "F&ull skjerm", IDC_RADIO_DISPLAY_FULL, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 142, 40, 70, 10 + GROUPBOX "Kommando historie", -1, 7, 84, 120, 77, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "&Bufferstшrrelse:", -1, 14, 101, 70, 12 + EDITTEXT IDC_EDIT_BUFFER_SIZE, 90, 97, 30, 15, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_BUFFER_SIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 119, 97, 12, 15 + LTEXT "&Antall buffere:", -1, 14, 124, 70, 12 + EDITTEXT IDC_EDIT_NUM_BUFFER, 90, 120, 30, 15, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_NUM_BUFFER, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 119, 120, 12, 15 + CHECKBOX "&Fjern gamle duplikater", IDC_CHECK_DISCARD_DUPLICATES, 12, 140, 110, 15 + GROUPBOX "Rediger valg", -1, 133, 85, 112, 77, BS_GROUPBOX | WS_CHILD | WS_VISIBLE | WS_GROUP + CHECKBOX "&Hurtigredigeringsmodus", IDC_CHECK_QUICK_EDIT, 140, 97, 102, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CHECKBOX "&Innsettingsmodus", IDC_CHECK_INSERT_MODE, 140, 113, 76, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP +END + +IDD_PROPPAGEFONT DIALOGEX 0, 0, 253, 220 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Skrift" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Vindu forhеndsvisning:", -1, 10, 10, 94, 10 + LTEXT "Stшrrelse:", -1, 180, 10, 36, 10 + CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74 + LISTBOX IDC_LBOX_FONTS, 181, 20, 55, 80, LBS_DISABLENOSCROLL | WS_VSCROLL + LTEXT "&Skrift:", -1, 10, 105, 33, 10 + CHECKBOX "&Fet skrift", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10 + LISTBOX IDC_LBOX_TYPE, 10, 120, 110, 40, LBS_DISABLENOSCROLL | WS_VSCROLL + GROUPBOX "", IDC_GROUPBOX_FONT_NAME, 6, 156, 241, 50 + CONTROL "", IDC_STATIC_SELECT_FONT_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 16, 165, 95, 35 + LTEXT "Hver tegn er:", -1, 124, 166, 75, 10 + LTEXT "Skjerm piksel bred\nskjerm piksel hшy", -1, 136, 180, 101, 20 + LTEXT "", IDC_FONT_SIZE_X, 120, 180, 10, 10 + LTEXT "", IDC_FONT_SIZE_Y, 120, 188, 10, 10 +END + +IDD_PROPPAGELAYOUT DIALOGEX 0, 0, 253, 220 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Oppsett" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Vindu forhеndsvisning:", -1, 8, 6, 95, 10 + CONTROL "", IDC_STATIC_LAYOUT_WINDOW_PREVIEW, "Static", SS_SUNKEN | SS_OWNERDRAW, 8, 16, 115, 70 + GROUPBOX "Stшrrelse pе skjermbuffer", -1, 130, 12, 115, 50 + LTEXT "&Bredde:", -1, 140, 28, 40, 10 + LTEXT "&Hшyde:", -1, 140, 46, 39, 10 + EDITTEXT IDC_EDIT_SCREEN_BUFFER_WIDTH, 203, 25, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_SCREEN_BUFFER_WIDTH, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 25, 13, 14 + EDITTEXT IDC_EDIT_SCREEN_BUFFER_HEIGHT, 203, 42, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_SCREEN_BUFFER_HEIGHT, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 42, 13, 14 + GROUPBOX "Vindu stшrrelse", -1, 130, 65, 115, 47 + LTEXT "&B&redde:", -1, 140, 78, 39, 10 + LTEXT "&H&шyde:", -1, 140, 95, 37, 10 + EDITTEXT IDC_EDIT_WINDOW_SIZE_WIDTH, 203, 75, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_WINDOW_SIZE_WIDTH, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 75, 13, 14 + EDITTEXT IDC_EDIT_WINDOW_SIZE_HEIGHT, 203, 92, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_WINDOW_SIZE_HEIGHT, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 92, 13, 14 + GROUPBOX "Vindusplassering", -1, 130, 116, 115, 64 + LTEXT "&Venstre:", -1, 140, 132, 38, 10 + LTEXT "&Topp:", -1, 140, 149, 40, 10 + EDITTEXT IDC_EDIT_WINDOW_POS_LEFT, 203, 128, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_WINDOW_POS_LEFT, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 128, 13, 14 + EDITTEXT IDC_EDIT_WINDOW_POS_TOP, 203, 146, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_WINDOW_POS_TOP, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 146, 13, 14 + CHECKBOX "Automatisk &vindusplassering", IDC_CHECK_SYSTEM_POS_WINDOW, 137, 165, 104, 10 +END + +IDD_PROPPAGECOLORS DIALOGEX 0, 0, 253, 220 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Farger" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Skjerm &tekst", IDC_RADIO_SCREEN_TEXT, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 12, 112, 10 + CONTROL "Skjerm &bakgrunn", IDC_RADIO_SCREEN_BACKGROUND, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 30, 112, 10 + CONTROL "&Hurtigmenytekst", IDC_RADIO_POPUP_TEXT, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 48, 112, 10 + CONTROL "Hurtig&menybakgrunn", IDC_RADIO_POPUP_BACKGROUND, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 67, 112, 10 + GROUPBOX "Valgte fargeverdier", -1, 129, 7, 118, 73 + LTEXT "&Rшd:", -1, 140, 25, 48, 10 + EDITTEXT IDC_EDIT_COLOR_RED, 210, 22, 30, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_COLOR_RED, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 240, 22, 12, 14 + LTEXT "&Grшnn:", -1, 140, 42, 48, 10 + EDITTEXT IDC_EDIT_COLOR_GREEN, 210, 39, 30, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_COLOR_GREEN, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 240, 39, 12, 14 + LTEXT "&Blе:", -1, 140, 60, 48, 10 + EDITTEXT IDC_EDIT_COLOR_BLUE, 210, 56, 30, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_COLOR_BLUE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 240, 56, 12, 14 + CONTROL "", IDC_STATIC_COLOR1, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 17, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR2, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 31, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR3, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 45, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR4, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 59, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR5, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 73, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR6, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 87, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR7, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 101, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR8, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 115, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR9, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 129, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR10, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 143, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR11, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 157, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR12, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 171, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR13, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 185, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR14, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 199, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR15, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 213, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR16, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 227, 90, 12, 12 + GROUPBOX "Valgte skjermfarger", -1, 7, 111, 240, 40 + CONTROL "", IDC_STATIC_SCREEN_COLOR, "Static", SS_OWNERDRAW | SS_SUNKEN, 15, 124, 224, 20 + GROUPBOX "Valgte hurtigmenyfarger", -1, 7, 162, 240, 40 + CONTROL "", IDC_STATIC_POPUP_COLOR, "Static", SS_OWNERDRAW | SS_SUNKEN, 15, 176, 224, 20 +END + +IDD_APPLYOPTIONS DIALOGEX 0, 0, 220, 79 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Godta innstillinger" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "&Godta innstillinger for bare nеvжrende vindu", IDC_RADIO_APPLY_CURRENT, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 12, 12, 207, 10 + CONTROL "&Godta innstillinger for fremtidlige vinduer med samme navn", IDC_RADIO_APPLY_ALL, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 12, 31, 207, 10 + PUSHBUTTON "OK", IDOK, 58, 58, 50, 14, WS_VISIBLE + PUSHBUTTON "Avbryt", IDCANCEL, 114, 58, 50, 14, WS_VISIBLE +END + +STRINGTABLE +BEGIN + IDS_CPLNAME "Konsoll" + IDS_CPLDESCRIPTION "Konfigurere Konsoll innstillinger." + IDS_APPLY_SHORTCUT_ALL "Modify &shortcut that started this window" + IDS_SCREEN_TEXT "C:\ReactOS> dir\nSYSTEM 10-01-99 5:00\nSYSTEM32 10-01-99 5:00" + IDS_RASTERFONTS "Raster Fonts" +END diff --git a/reactos/dll/cpl/console/layout.c b/reactos/dll/cpl/console/layout.c index 9def3f75924..afa0a6771ef 100644 --- a/reactos/dll/cpl/console/layout.c +++ b/reactos/dll/cpl/console/layout.c @@ -1,5 +1,4 @@ -/* $Id$ - * +/* * PROJECT: ReactOS Console Configuration DLL * LICENSE: GPL - See COPYING in the top level directory * FILE: dll/win32/console/layout.c diff --git a/reactos/dll/cpl/console/options.c b/reactos/dll/cpl/console/options.c index ba1eac6e274..221125b6033 100644 --- a/reactos/dll/cpl/console/options.c +++ b/reactos/dll/cpl/console/options.c @@ -1,5 +1,4 @@ -/* $Id$ - * +/* * PROJECT: ReactOS Console Configuration DLL * LICENSE: GPL - See COPYING in the top level directory * FILE: dll/win32/console/options.c diff --git a/reactos/dll/cpl/console/rsrc.rc b/reactos/dll/cpl/console/rsrc.rc index 61d9f1b572f..e1bca5256d2 100644 --- a/reactos/dll/cpl/console/rsrc.rc +++ b/reactos/dll/cpl/console/rsrc.rc @@ -3,11 +3,13 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -#include "lang/en-US.rc" +#include "lang/cs-CZ.rc" #include "lang/de-DE.rc" +#include "lang/en-US.rc" #include "lang/es-ES.rc" #include "lang/id-ID.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/cpl/desk/lang/cs-CZ.rc b/reactos/dll/cpl/desk/lang/cs-CZ.rc index 028177e7339..718ace0b471 100644 --- a/reactos/dll/cpl/desk/lang/cs-CZ.rc +++ b/reactos/dll/cpl/desk/lang/cs-CZ.rc @@ -1,7 +1,7 @@ /* FILE: dll/cpl/desk/lang/cs-CZ.rc * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) - * UPDATED: 2008-04-21 - * THANKS TO: Unknown translator, who translated major part of this file + * UPDATED: 2008-07-27 + * THANKS TO: potapnik, who translated major part of this file */ LANGUAGE LANG_CZECH, SUBLANG_DEFAULT @@ -158,6 +158,13 @@ BEGIN END END +STRINGTABLE +BEGIN + IDS_MULTIPLEMONITORS "(Nмkolik monitorщ)" + IDS_UNKNOWNMONITOR "(Neznбmэ monitor)" + IDS_ADVANCEDTITLEFMT "%s a %s" +END + STRINGTABLE BEGIN IDS_CPLNAME "Obrazovka" diff --git a/reactos/dll/cpl/desk/lang/es-ES.rc b/reactos/dll/cpl/desk/lang/es-ES.rc index 8409dbf75b4..ca582e9460a 100644 --- a/reactos/dll/cpl/desk/lang/es-ES.rc +++ b/reactos/dll/cpl/desk/lang/es-ES.rc @@ -161,7 +161,7 @@ END STRINGTABLE BEGIN - IDS_MULTIPLEMONITORS "(Multiples Monitores)" + IDS_MULTIPLEMONITORS "(Mъltiples Monitores)" IDS_UNKNOWNMONITOR "(Monitor Desconocido)" IDS_ADVANCEDTITLEFMT "%s y %s" END @@ -196,7 +196,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_INACTWIN "Ventana Inactiva" IDS_ACTWIN "Ventana Activa" - IDS_WINTEXT "Texto de la vantana" + IDS_WINTEXT "Texto de la ventana" IDS_MESSBOX "Cuadro de mensaje" IDS_MESSTEXT "Texto del mensaje" IDS_BUTTEXT "Aceptar" diff --git a/reactos/dll/cpl/desk/lang/no-NO.rc b/reactos/dll/cpl/desk/lang/no-NO.rc new file mode 100644 index 00000000000..a7a1e6d6d2b --- /dev/null +++ b/reactos/dll/cpl/desk/lang/no-NO.rc @@ -0,0 +1,223 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_BACKGROUND DIALOGEX DISCARDABLE 0, 0, 246, 204 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Bakgrunn" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDC_BACKGROUND_PREVIEW, "Static", SS_OWNERDRAW, + 70, 10, 105, 70,WS_EX_STATICEDGE + CONTROL "",IDC_BACKGROUND_LIST,"SysListView32",LVS_REPORT | + LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | + WS_BORDER | WS_TABSTOP, 8, 114, 174, 78 + LTEXT "Velg et bilde som du vil bruke som skrivebordbakgrunn:", + IDC_STATIC, 8, 103, 180, 9 + PUSHBUTTON "&Bla gjennom...", IDC_BROWSE_BUTTON, 188, 114, 50, 15 + PUSHBUTTON "&Farger...", IDC_COLOR_BUTTON, 188, 177, 50, 15 + LTEXT "Plassering:", IDC_STATIC, 188, 138, 36, 9 + COMBOBOX IDC_PLACEMENT_COMBO, 188, 149, 50, 54, + CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP +END + + +IDD_SCREENSAVER DIALOGEX 0, 0, 246, 204 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Skjermsparer" +FONT 8, "MS Shell Dlg", 0, 0 +BEGIN + CONTROL "", IDC_SCREENS_PREVIEW, "Static", SS_OWNERDRAW, + 70, 10, 105, 70, WS_EX_STATICEDGE + GROUPBOX "&Skjermsparer",IDC_SCREENS_DUMMY, 8, 92, 230, 52 + COMBOBOX IDC_SCREENS_LIST, 14, 103, 100, 100, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Inn&stillinger",IDC_SCREENS_SETTINGS, 120, 103, 50, 13, WS_GROUP + PUSHBUTTON "Forhеnds&visning ",IDC_SCREENS_TESTSC, 175, 103, 56, 13 + LTEXT "&Vent",IDC_WAITTEXT, 14, 125, 16, 9 + EDITTEXT IDC_SCREENS_TIMEDELAY, 34, 123, 32, 13, ES_RIGHT | WS_GROUP + CONTROL "",IDC_SCREENS_TIME ,UPDOWN_CLASS,UDS_SETBUDDYINT | + UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | + WS_BORDER | WS_GROUP, 54, 123, 12, 13 + LTEXT "minutter", IDC_MINTEXT, 70, 125, 26, 9 + CONTROL "Spшr etter &passord ved gjennopptakelse.",IDC_SCREENS_USEPASSCHK,"button", + BS_AUTOCHECKBOX | WS_TABSTOP, 108, 120, 104, 19 + GROUPBOX "&Strшmsparing funksjon", IDC_SCREENS_DUMMY2, 6, 155, 232, 41 + LTEXT "For е tilpasse strшminnstillingene for din skjerm, klikk pе strшm innstillingene.", + IDC_STATIC, 14, 166, 146 ,20 + PUSHBUTTON "S&trшm...", IDC_SCREENS_POWER_BUTTON, 176, 171, 50, 13 +END + + +IDD_APPEARANCE DIALOGEX DISCARDABLE 0, 0, 246, 204 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Utseende" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDC_APPEARANCE_PREVIEW, "PreviewWndClass", + WS_VISIBLE | WS_BORDER, 7, 7, 232, 120 + LTEXT "Fargevalg", IDC_STATIC, 7, 140, 64, 7 + COMBOBOX IDC_APPEARANCE_COLORSCHEME, 7, 150, 134, 90 , CBS_DROPDOWNLIST | CBS_HASSTRINGS | CBS_SORT | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Avansert", IDC_APPEARANCE_ADVANCED, 182, 150, 56, 15 +END + +IDD_ADVAPPEARANCE DIALOGEX DISCARDABLE 0, 0, 250, 239 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_DLGMODALFRAME | WS_EX_WINDOWEDGE +CAPTION "Avansert utseende" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDC_APPEARANCE_PREVIEW, "PreviewWndClass", + WS_VISIBLE | WS_BORDER, 7, 7, 232, 120 + + LTEXT "Element:", 8, 5, 160, 50, 9 + COMBOBOX IDC_ADVAPPEARANCE_ELEMENT, 5, 170, 130, 90, CBS_DROPDOWNLIST | CBS_HASSTRINGS | CBS_SORT | WS_CHILD | WS_VSCROLL | WS_TABSTOP + + LTEXT "&Stшrrelse", IDC_ADVAPPEARANCE_SIZE_T, 142, 164, 20, 9 + EDITTEXT IDC_ADVAPPEARANCE_SIZE_E, 142, 170, 38, 13, ES_RIGHT | WS_GROUP + CONTROL "", IDC_ADVAPPEARANCE_SIZE_UD, UPDOWN_CLASS, UDS_AUTOBUDDY | WS_BORDER | WS_GROUP | UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_SETBUDDYINT | WS_CHILD | WS_VISIBLE, 172, 170, 10, 13 + + LTEXT "&Farge 1:", IDC_ADVAPPEARANCE_COLOR1_T, 184, 160, 40, 9 + CHECKBOX "-", IDC_ADVAPPEARANCE_COLOR1_B, 184, 170, 28, 13, BS_PUSHLIKE | BS_BITMAP + + LTEXT "&Farge 2:", IDC_ADVAPPEARANCE_COLOR2_T, 216, 160, 40, 9 + CHECKBOX "-", IDC_ADVAPPEARANCE_COLOR2_B, 216, 170, 28, 13, BS_PUSHLIKE | BS_BITMAP + + LTEXT "Skrift:", IDC_ADVAPPEARANCE_FONT_T, 5, 190, 50, 8 + COMBOBOX IDC_ADVAPPEARANCE_FONT_C, 5, 200, 130, 90, CBS_DROPDOWN | CBS_HASSTRINGS | CBS_SORT | WS_VSCROLL | WS_TABSTOP + + LTEXT "Skrift stшrrelse:", IDC_ADVAPPEARANCE_FONTSIZE_T, 142, 190, 41, 8 + COMBOBOX IDC_ADVAPPEARANCE_FONTSIZE_E, 142, 200, 38, 200, CBS_DROPDOWN | WS_VSCROLL + + LTEXT "Farger:", IDC_ADVAPPEARANCE_FONTCOLOR_T, 184, 194, 20, 9 + CHECKBOX "", IDC_ADVAPPEARANCE_FONTCOLOR_B, 184, 200, 28, 13, BS_PUSHLIKE | BS_BITMAP + + AUTOCHECKBOX "B", IDC_ADVAPPEARANCE_FONTBOLD, 216, 200, 14, 13, BS_PUSHLIKE + AUTOCHECKBOX "I ", IDC_ADVAPPEARANCE_FONTITALIC, 230, 200, 14, 13, BS_PUSHLIKE + + PUSHBUTTON "Avbryt", IDCANCEL, 191, 220, 50, 14 + DEFPUSHBUTTON "OK", IDOK, 137, 220, 50, 14 +END + +IDD_SETTINGS DIALOGEX DISCARDABLE 0, 0, 246, 204 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Innstillinger" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Dra skjermikonene for е tilpasse fysisk til din skjerm.",-1,3,3,240,20 + CONTROL "",IDC_SETTINGS_MONSEL,"MONITORSELWNDCLASS",WS_CHILD|WS_VISIBLE|WS_TABSTOP,3,23,240,82,WS_EX_CLIENTEDGE + LTEXT "&Skjerm:",1820,3,107,30,8 + LTEXT "",IDC_SETTINGS_DEVICE,9,116,224,8 + GROUPBOX "&Skjermomrеde",1818,3,127,115,43 + CONTROL "",IDC_SETTINGS_RESOLUTION,"msctls_trackbar32", + TBS_AUTOTICKS | WS_TABSTOP, 30, 137, 58, 17 + LTEXT "Mindre",1815,9,137,15,8,NOT WS_GROUP + LTEXT "Mere",1816,93,137,21,8,NOT WS_GROUP + LTEXT "",IDC_SETTINGS_RESOLUTION_TEXT,10,157,100,10,NOT WS_GROUP | SS_CENTER + GROUPBOX "&Farger",1817,125,127,115,43 + COMBOBOX IDC_SETTINGS_BPP,131,137,103,80,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | + WS_VSCROLL | WS_TABSTOP + CONTROL "",IDC_SETTINGS_SPECTRUM,"Static",SS_OWNERDRAW | SS_SUNKEN,131,155,103,9 + PUSHBUTTON "A&vansert...",IDC_SETTINGS_ADVANCED,170,174,70,14 +END + +IDD_ADVANCED_GENERAL DIALOGEX DISCARDABLE 0, 0, 253, 204 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Generielt" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Vis", -1, 7, 6, 237, 56, WS_GROUP + LTEXT "Skriftstшrrelse:", -1, 14, 20, 222, 8 + COMBOBOX IDC_FONTSIZE_COMBO, 14, 30, 223, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "", IDC_FONTSIZE_COSTOM, 14, 46, 223, 12 + GROUPBOX "Kompatibilitet", -1, 7, 67, 237, 97 + LTEXT "Noen programmer fungerer kanskje ikke skikkelig hvis du ikke starter datamaskinen pе nytt etter е ha endret skjerminnstillingene.\r\n\nGjшr fшlgende etter at skjerminnstillingene er endret:", -1, 12, 78, 228, 34 + AUTORADIOBUTTON "&Start maskinen pе nytt fшr de nye skjerminnstillingene tas i bruk.", IDC_RESTART_RB, 14, 116, 224, 10 + AUTORADIOBUTTON "Bruk de nye skjerminnstillingene uten е starte pе nytt.", IDC_WITHOUTREBOOT_RB, 14, 131, 224, 10 + AUTORADIOBUTTON "Spшr fшr de nye skjerminnstillingene tas i bruk.", IDC_ASKME_RB, 14, 146, 224, 10 +END + +IDR_PREVIEW_MENU MENU +BEGIN + MENUITEM "Vanlig", ID_MENU_NORMAL + MENUITEM "Deaktivert", ID_MENU_DISABLED + MENUITEM "Valgt", ID_MENU_SELECTED +END + +IDM_MONITOR_MENU MENU +BEGIN + POPUP "" + BEGIN + MENUITEM "&Attached", ID_MENU_ATTACHED + MENUITEM "&Primary", ID_MENU_PRIMARY + MENUITEM SEPARATOR + MENUITEM "&Identify", ID_MENU_IDENTIFY + MENUITEM "P&roperties", ID_MENU_PROPERTIES + END +END + +STRINGTABLE +BEGIN + IDS_MULTIPLEMONITORS "(Sammensatt skjermer)" + IDS_UNKNOWNMONITOR "(Ukjent skjerm)" + IDS_ADVANCEDTITLEFMT "%s og %s" +END + +STRINGTABLE +BEGIN + IDS_CPLNAME "Skjerm" + IDS_CPLDESCRIPTION "Tilpass skrivebordskjermen og skjermsparer." + IDS_NONE "(Ingen)" + IDS_CENTER "Midtstill" + IDS_STRETCH "Side ved side" + IDS_TILE "Stukket" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_COLOR_4BIT "16 Farger" + IDS_COLOR_8BIT "256 Farger" + IDS_COLOR_16BIT "Middels farger (16 Bit)" + IDS_COLOR_24BIT "Hшyest farger (24 Bit)" + IDS_COLOR_32BIT "Hшyest farger (32 Bit)" + IDS_PIXEL "%lux%lu piksler" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_BACKGROUND_COMDLG_FILTER "Bilder (*.bmp;*.dib)\0*.bmp;*.dib\0" + IDS_SUPPORTED_EXT "*.bmp;*.dib" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_INACTWIN "Uaktiv vindu" + IDS_ACTWIN "Aktiv vindu" + IDS_WINTEXT "Vindu tekst" + IDS_MESSBOX "Melding boks" + IDS_MESSTEXT "Melding tekst" + IDS_BUTTEXT "OK" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_ELEMENT_1 "Skrivebord" + IDS_ELEMENT_2 "Caption of inactive windows" + IDS_ELEMENT_3 "Border of inactive windows" + IDS_ELEMENT_4 "Caption of active windows" + IDS_ELEMENT_5 "Border of active windows" + IDS_ELEMENT_6 "Meny" + IDS_ELEMENT_7 "Selected Items" + IDS_ELEMENT_8 "Vindu" + IDS_ELEMENT_9 "Scrollbars" + IDS_ELEMENT_10 "3D objects" + IDS_ELEMENT_11 "Palette title" + IDS_ELEMENT_12 "Symbol title" + IDS_ELEMENT_13 "Captionbar" + IDS_ELEMENT_14 "Deactivated menu elements" + IDS_ELEMENT_15 "Dialog" + IDS_ELEMENT_16 "Scrollbar controls" + IDS_ELEMENT_17 "Application background" + IDS_ELEMENT_18 "Small captionbar" + IDS_ELEMENT_19 "Symbol distance (horizontal)" + IDS_ELEMENT_20 "Symbol distance (vertical)" + IDS_ELEMENT_21 "Quickinfo" + IDS_ELEMENT_22 "Symbol" +END diff --git a/reactos/dll/cpl/desk/rsrc.rc b/reactos/dll/cpl/desk/rsrc.rc index 4b5e995d0d1..b9787c7f10d 100644 --- a/reactos/dll/cpl/desk/rsrc.rc +++ b/reactos/dll/cpl/desk/rsrc.rc @@ -13,6 +13,7 @@ #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/nl-NL.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/cpl/desk/settings.c b/reactos/dll/cpl/desk/settings.c index 17540404d5d..5887fc37b37 100644 --- a/reactos/dll/cpl/desk/settings.c +++ b/reactos/dll/cpl/desk/settings.c @@ -57,8 +57,7 @@ GetPossibleSettings(IN LPCTSTR DeviceName, OUT DWORD* pSettingsCount, OUT PSETTI HDC hDC; PSETTINGS_ENTRY Current; DWORD bpp, xres, yres, checkbpp; - DWORD curDispFreq; - + DWORD curDispFreq; /* Get current settings */ *CurrentSettings = NULL; @@ -80,12 +79,12 @@ GetPossibleSettings(IN LPCTSTR DeviceName, OUT DWORD* pSettingsCount, OUT PSETTI while (EnumDisplaySettingsEx(DeviceName, iMode, &devmode, dwFlags)) { - if ((devmode.dmBitsPerPel==4 || - devmode.dmBitsPerPel==8 || - devmode.dmBitsPerPel==16 || - devmode.dmBitsPerPel==24 || - devmode.dmBitsPerPel==32) && - devmode.dmDisplayFrequency==curDispFreq) + if ((devmode.dmBitsPerPel == 4 || + devmode.dmBitsPerPel == 8 || + devmode.dmBitsPerPel == 16 || + devmode.dmBitsPerPel == 24 || + devmode.dmBitsPerPel == 32) && + devmode.dmDisplayFrequency == curDispFreq) { checkbpp=1; } @@ -286,7 +285,7 @@ OnInitDialog(IN HWND hwndDlg) BITMAP bitmap; DWORD Result = 0; DWORD iDevNum = 0; - INT i; + INT i; DISPLAY_DEVICE displayDevice; PGLOBAL_DATA pGlobalData; @@ -365,44 +364,52 @@ OnInitDialog(IN HWND hwndDlg) } /* Initialize the color spectrum bitmaps */ - for(i = 0; i < NUM_SPECTRUM_BITMAPS; i++) - { - pGlobalData->hSpectrumBitmaps[i] = LoadImageW(hApplet, MAKEINTRESOURCEW(IDB_SPECTRUM_4 + i), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR); + for(i = 0; i < NUM_SPECTRUM_BITMAPS; i++) + { + pGlobalData->hSpectrumBitmaps[i] = LoadImageW(hApplet, MAKEINTRESOURCEW(IDB_SPECTRUM_4 + i), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR); - if (pGlobalData->hSpectrumBitmaps[i] != NULL) - { - GetObjectW(pGlobalData->hSpectrumBitmaps[i], sizeof(BITMAP), &bitmap); - - pGlobalData->cxSource[i] = bitmap.bmWidth; - pGlobalData->cySource[i] = bitmap.bmHeight; - } - } + if (pGlobalData->hSpectrumBitmaps[i] != NULL) + { + if (GetObjectW(pGlobalData->hSpectrumBitmaps[i], sizeof(BITMAP), &bitmap) != 0) + { + pGlobalData->cxSource[i] = bitmap.bmWidth; + pGlobalData->cySource[i] = bitmap.bmHeight; + } + else + { + pGlobalData->cxSource[i] = 0; + pGlobalData->cySource[i] = 0; + } + } + } } /* Get the ID for GLOBAL_DATA::hSpectrumBitmaps */ static VOID ShowColorSpectrum(IN HDC hDC, IN LPRECT client, IN DWORD BitsPerPel, IN PGLOBAL_DATA pGlobalData) { - HDC hdcMem; - hdcMem = CreateCompatibleDC(hDC); + HDC hdcMem; + INT iBitmap; - if (hdcMem) - { - INT iBitmap; + hdcMem = CreateCompatibleDC(hDC); - switch(BitsPerPel) - { - case 4: iBitmap = 0; break; - case 8: iBitmap = 1; break; - default: iBitmap = 2; - } + if (!hdcMem) + return; - SelectObject(hdcMem, pGlobalData->hSpectrumBitmaps[iBitmap]); - StretchBlt(hDC, client->left, client->top, client->right - client->left, - client->bottom - client->top, hdcMem, 0, 0, - pGlobalData->cxSource[iBitmap], pGlobalData->cySource[iBitmap], SRCCOPY); - DeleteDC(hdcMem); - } + switch(BitsPerPel) + { + case 4: iBitmap = 0; break; + case 8: iBitmap = 1; break; + default: iBitmap = 2; + } + + SelectObject(hdcMem, pGlobalData->hSpectrumBitmaps[iBitmap]); + StretchBlt(hDC, + client->left, client->top, client->right - client->left, client->bottom - client->top, + hdcMem, 0, 0, + pGlobalData->cxSource[iBitmap], + pGlobalData->cySource[iBitmap], SRCCOPY); + DeleteDC(hdcMem); } static VOID @@ -415,18 +422,18 @@ OnBPPChanged(IN HWND hwndDlg, IN PGLOBAL_DATA pGlobalData) PSETTINGS_ENTRY Current; DWORD dmNewBitsPerPel; DWORD index; - HDC hSpectrumDC; - HWND hSpectrumControl; - RECT client; + HDC hSpectrumDC; + HWND hSpectrumControl; + RECT client; index = (DWORD) SendDlgItemMessage(hwndDlg, IDC_SETTINGS_BPP, CB_GETCURSEL, 0, 0); dmNewBitsPerPel = (DWORD) SendDlgItemMessage(hwndDlg, IDC_SETTINGS_BPP, CB_GETITEMDATA, index, 0); - /* Show a new spectrum bitmap */ - hSpectrumControl = GetDlgItem(hwndDlg, IDC_SETTINGS_SPECTRUM); - hSpectrumDC = GetDC(hSpectrumControl); - GetClientRect(hSpectrumControl, &client); - ShowColorSpectrum(hSpectrumDC, &client, dmNewBitsPerPel, pGlobalData); + /* Show a new spectrum bitmap */ + hSpectrumControl = GetDlgItem(hwndDlg, IDC_SETTINGS_SPECTRUM); + hSpectrumDC = GetDC(hSpectrumControl); + GetClientRect(hSpectrumControl, &client); + ShowColorSpectrum(hSpectrumDC, &client, dmNewBitsPerPel, pGlobalData); /* find if new parameters are valid */ Current = pGlobalData->CurrentDisplayDevice->CurrentSettings; @@ -588,20 +595,20 @@ OnResolutionChanged(IN HWND hwndDlg, IN PGLOBAL_DATA pGlobalData, IN DWORD NewPo UINT CALLBACK SettingsPageCallbackProc(HWND hwnd, UINT uMsg, LPPROPSHEETPAGE ppsp) { - UINT Ret = 0; + UINT Ret = 0; - switch (uMsg) - { - case PSPCB_CREATE: - Ret = RegisterMonitorSelectionControl(hApplet); - break; + switch (uMsg) + { + case PSPCB_CREATE: + Ret = RegisterMonitorSelectionControl(hApplet); + break; - case PSPCB_RELEASE: - UnregisterMonitorSelectionControl(hApplet); - break; - } + case PSPCB_RELEASE: + UnregisterMonitorSelectionControl(hApplet); + break; + } - return Ret; + return Ret; } /* Property page dialog callback */ @@ -612,7 +619,6 @@ SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPar pGlobalData = (PGLOBAL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER); - switch(uMsg) { case WM_INITDIALOG: @@ -625,8 +631,8 @@ SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPar LPDRAWITEMSTRUCT lpDrawItem; lpDrawItem = (LPDRAWITEMSTRUCT) lParam; - if(lpDrawItem->CtlID == IDC_SETTINGS_SPECTRUM) - ShowColorSpectrum(lpDrawItem->hDC, &lpDrawItem->rcItem, pGlobalData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel, pGlobalData); + if (lpDrawItem->CtlID == IDC_SETTINGS_SPECTRUM) + ShowColorSpectrum(lpDrawItem->hDC, &lpDrawItem->rcItem, pGlobalData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel, pGlobalData); break; } @@ -711,111 +717,111 @@ SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPar break; } - case WM_CONTEXTMENU: - { - HWND hwndMonSel; - HMENU hPopup; - UINT uiCmd; - POINT pt, ptClient; - INT Index; + case WM_CONTEXTMENU: + { + HWND hwndMonSel; + HMENU hPopup; + UINT uiCmd; + POINT pt, ptClient; + INT Index; - pt.x = (SHORT)LOWORD(lParam); - pt.y = (SHORT)HIWORD(lParam); + pt.x = (SHORT)LOWORD(lParam); + pt.y = (SHORT)HIWORD(lParam); - hwndMonSel = GetDlgItem(hwndDlg, - IDC_SETTINGS_MONSEL); - if ((HWND)wParam == hwndMonSel) - { - if (pt.x == -1 && pt.y == -1) - { - RECT rcMon; + hwndMonSel = GetDlgItem(hwndDlg, + IDC_SETTINGS_MONSEL); + if ((HWND)wParam == hwndMonSel) + { + if (pt.x == -1 && pt.y == -1) + { + RECT rcMon; - Index = (INT)SendMessage(hwndMonSel, - MSLM_GETCURSEL, - 0, - 0); + Index = (INT)SendMessage(hwndMonSel, + MSLM_GETCURSEL, + 0, + 0); - if (Index >= 0 && - (INT)SendMessage(hwndMonSel, - MSLM_GETMONITORRECT, - Index, - (LPARAM)&rcMon) > 0) - { - pt.x = rcMon.left + ((rcMon.right - rcMon.left) / 2); - pt.y = rcMon.top + ((rcMon.bottom - rcMon.top) / 2); - } - else - pt.x = pt.y = 0; + if (Index >= 0 && + (INT)SendMessage(hwndMonSel, + MSLM_GETMONITORRECT, + Index, + (LPARAM)&rcMon) > 0) + { + pt.x = rcMon.left + ((rcMon.right - rcMon.left) / 2); + pt.y = rcMon.top + ((rcMon.bottom - rcMon.top) / 2); + } + else + pt.x = pt.y = 0; + + MapWindowPoints(hwndMonSel, + NULL, + &pt, + 1); + } + else + { + ptClient = pt; + MapWindowPoints(NULL, + hwndMonSel, + &ptClient, + 1); - MapWindowPoints(hwndMonSel, - NULL, - &pt, - 1); - } - else - { - ptClient = pt; - MapWindowPoints(NULL, - hwndMonSel, - &ptClient, - 1); + Index = (INT)SendMessage(hwndMonSel, + MSLM_HITTEST, + (WPARAM)&ptClient, + 0); + } - Index = (INT)SendMessage(hwndMonSel, - MSLM_HITTEST, - (WPARAM)&ptClient, - 0); - } + if (Index >= 0) + { + hPopup = LoadPopupMenu(hApplet, + MAKEINTRESOURCE(IDM_MONITOR_MENU)); + if (hPopup != NULL) + { + /* FIXME: Enable/Disable menu items */ + EnableMenuItem(hPopup, + ID_MENU_ATTACHED, + MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); + EnableMenuItem(hPopup, + ID_MENU_PRIMARY, + MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); + EnableMenuItem(hPopup, + ID_MENU_IDENTIFY, + MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); + EnableMenuItem(hPopup, + ID_MENU_PROPERTIES, + MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); - if (Index >= 0) - { - hPopup = LoadPopupMenu(hApplet, - MAKEINTRESOURCE(IDM_MONITOR_MENU)); - if (hPopup != NULL) - { - /* FIXME: Enable/Disable menu items */ - EnableMenuItem(hPopup, - ID_MENU_ATTACHED, - MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); - EnableMenuItem(hPopup, - ID_MENU_PRIMARY, - MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); - EnableMenuItem(hPopup, - ID_MENU_IDENTIFY, - MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); - EnableMenuItem(hPopup, - ID_MENU_PROPERTIES, - MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); + uiCmd = (UINT)TrackPopupMenu(hPopup, + TPM_RETURNCMD | TPM_RIGHTBUTTON, + pt.x, + pt.y, + 0, + hwndDlg, + NULL); - uiCmd = (UINT)TrackPopupMenu(hPopup, - TPM_RETURNCMD | TPM_RIGHTBUTTON, - pt.x, - pt.y, - 0, - hwndDlg, - NULL); + switch (uiCmd) + { + case ID_MENU_ATTACHED: + case ID_MENU_PRIMARY: + case ID_MENU_IDENTIFY: + case ID_MENU_PROPERTIES: + /* FIXME: Implement */ + break; + } - switch (uiCmd) - { - case ID_MENU_ATTACHED: - case ID_MENU_PRIMARY: - case ID_MENU_IDENTIFY: - case ID_MENU_PROPERTIES: - /* FIXME: Implement */ - break; - } - - DestroyMenu(hPopup); - } - } - } - break; - } + DestroyMenu(hPopup); + } + } + } + break; + } case WM_DESTROY: { - INT i; - + INT i; PDISPLAY_DEVICE_ENTRY Current = pGlobalData->DisplayDeviceList; + while (Current != NULL) { PDISPLAY_DEVICE_ENTRY Next = Current->Flink; @@ -832,11 +838,11 @@ SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPar HeapFree(GetProcessHeap(), 0, pGlobalData); - for(i = 0; i < NUM_SPECTRUM_BITMAPS; i++) - { - if(pGlobalData->hSpectrumBitmaps[i]) - DeleteObject(pGlobalData->hSpectrumBitmaps[i]); - } + for (i = 0; i < NUM_SPECTRUM_BITMAPS; i++) + { + if (pGlobalData->hSpectrumBitmaps[i]) + DeleteObject(pGlobalData->hSpectrumBitmaps[i]); + } } } return FALSE; diff --git a/reactos/dll/cpl/hdwwiz/hdwwiz.def b/reactos/dll/cpl/hdwwiz/hdwwiz.def deleted file mode 100644 index 63cd59d5a8e..00000000000 --- a/reactos/dll/cpl/hdwwiz/hdwwiz.def +++ /dev/null @@ -1,7 +0,0 @@ -LIBRARY hdwwiz.cpl - -EXPORTS -CPlApplet@16 -InstallNewDevice - -; EOF diff --git a/reactos/dll/cpl/hdwwiz/hdwwiz.rbuild b/reactos/dll/cpl/hdwwiz/hdwwiz.rbuild index 4b8f2efefd0..628c1012c15 100644 --- a/reactos/dll/cpl/hdwwiz/hdwwiz.rbuild +++ b/reactos/dll/cpl/hdwwiz/hdwwiz.rbuild @@ -1,7 +1,7 @@ - + . 0x600 0x501 @@ -9,4 +9,5 @@ kernel32 hdwwiz.c hdwwiz.rc + hdwwiz.spec diff --git a/reactos/dll/cpl/hdwwiz/hdwwiz.spec b/reactos/dll/cpl/hdwwiz/hdwwiz.spec new file mode 100644 index 00000000000..f0fe41e08ce --- /dev/null +++ b/reactos/dll/cpl/hdwwiz/hdwwiz.spec @@ -0,0 +1,2 @@ +@ stdcall CPlApplet(ptr long ptr ptr) +@ stdcall InstallNewDevice(ptr ptr ptr) diff --git a/reactos/dll/cpl/hdwwiz/lang/no-NO.rc b/reactos/dll/cpl/hdwwiz/lang/no-NO.rc new file mode 100644 index 00000000000..d643becd3fd --- /dev/null +++ b/reactos/dll/cpl/hdwwiz/lang/no-NO.rc @@ -0,0 +1,7 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +STRINGTABLE +BEGIN + IDS_CPLNAME "Legg til maskinvare" + IDS_CPLDESCRIPTION "Legg til maskinvare for din datamaskin." +END diff --git a/reactos/dll/cpl/hdwwiz/rsrc.rc b/reactos/dll/cpl/hdwwiz/rsrc.rc index a1530481485..78c9e904b41 100644 --- a/reactos/dll/cpl/hdwwiz/rsrc.rc +++ b/reactos/dll/cpl/hdwwiz/rsrc.rc @@ -13,6 +13,7 @@ #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/nl-NL.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" #include "lang/ru-RU.rc" diff --git a/reactos/dll/cpl/input/lang/no-NO.rc b/reactos/dll/cpl/input/lang/no-NO.rc new file mode 100644 index 00000000000..e66e818b73d --- /dev/null +++ b/reactos/dll/cpl/input/lang/no-NO.rc @@ -0,0 +1,241 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_PROPPAGESETTINGS DIALOGEX 0, 0, 254, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Innstillinger" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Velg tjenesten som du vil ha for hver inndatasprеk som er vist i listen.\nBruk legg til og fjern knappen for е endre denne listen.", -1, 9, 6, 238, 25 + CONTROL "TEKST", IDC_KEYLAYOUT_LIST, "SYSLISTVIEW32", WS_BORDER | WS_VSCROLL | WS_TABSTOP | LVS_SORTASCENDING | LVS_REPORT | 0x0000808D, 8, 36, 237, 101 + PUSHBUTTON "&Sett Standard", IDC_SET_DEFAULT, 101, 159, 144, 14 + PUSHBUTTON "Le&gg til...", IDC_ADD_BUTTON, 27, 142, 70, 14 + PUSHBUTTON "&Fjern...", IDC_REMOVE_BUTTON, 101, 142, 70, 14 + PUSHBUTTON "&Egenskaper...", IDC_PROP_BUTTON, 175, 142, 70, 14 + GROUPBOX "Innstillinger", -1, 7, 185, 240, 36 + PUSHBUTTON "&Tasteinnstillinger...", IDC_KEY_SET_BTN, 14, 198, 110, 14 +END + +IDD_KEYSETTINGS DIALOGEX 0, 0, 272, 163 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Avanserte tasteinnstillinger" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Slе av Caps Lock", -1, 7, 7, 258, 26 + AUTORADIOBUTTON "Trykk CAPS &LOCK nшkkel", IDC_PRESS_CL_KEY_RB, 14, 17, 120, 11, WS_GROUP + AUTORADIOBUTTON "Trykk SHI&FT nшkkel", IDC_PRESS_SHIFT_KEY_RB, 144, 17, 120, 11, NOT WS_TABSTOP + GROUPBOX "Hurtigtast for inndatasprеk", -1, 7, 37, 258, 95 + LTEXT "Valg", -1, 14, 47, 60, 9 + RTEXT "&Tastesekvens", -1, 177, 47, 79, 9 + CONTROL "", IDC_KEY_LISTVIEW, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER | LVS_AUTOARRANGE | LVS_SINGLESEL, 14, 57, 244, 52, WS_EX_CLIENTEDGE + PUSHBUTTON "&Endre hurtigtaster...", IDC_CHANGE_KEY_SEQ_BTN, 152, 113, 106, 14, WS_GROUP + DEFPUSHBUTTON "OK", IDOK, 66, 140, 70, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 146, 140, 70, 14 +END + +IDD_ADD DIALOGEX 20, 20, 227, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Teksttjenester og inndatasprеk" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Inndatasprеk:", -1, 7, 7, 61, 10 + COMBOBOX IDC_INPUT_LANG_COMBO, 7, 17, 212, 150, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL + LTEXT "&Tastaturoppsett/IME:", -1, 7, 36, 110, 10 + COMBOBOX IDC_KEYBOARD_LO_COMBO, 7, 47, 212, 150, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL + DEFPUSHBUTTON "OK", IDOK, 116, 68, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 169, 68, 50, 14 +END + +IDD_CHANGE_KEY_SEQ DIALOGEX 5, 100, 230, 125 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Endre tastesekvens" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "", -1, 9, 5, 155, 110 + AUTOCHECKBOX "&Bytt inndatasprеk", IDC_SWITCH_INPUT_LANG_CB, 15, 15, 105, 12 + LTEXT "Shift", -1, 73, 37, 27, 12 + CTEXT "+", -1, 62, 37, 8, 9 + AUTORADIOBUTTON "&Ctrl", IDC_CTRL_LANG, 29, 31, 30, 11 + AUTORADIOBUTTON "Venstre &ALT", IDC_LEFT_ALT_LANG, 29, 45, 46, 12 + AUTOCHECKBOX "B&ytt tastaturoppsett", IDC_SWITCH_KBLAYOUTS_CB, 16, 65, 141, 12 + LTEXT "Shift", -1, 74, 87, 27, 12 + CTEXT "+", -1, 63, 87, 8, 9 + AUTORADIOBUTTON "C&trl", IDC_CTRL_LAYOUT, 30, 81, 30, 11 + AUTORADIOBUTTON "Venstre A<", IDC_LEFT_ALT_LAYOUT, 30, 95, 44, 12 + DEFPUSHBUTTON "OK", IDOK, 172, 9, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 172, 27, 50, 14 +END + +IDD_INPUT_LANG_PROP DIALOGEX 20, 20, 227, 75 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Inndatasprеk egenskaper" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Inndatasprеk:", -1, 7, 7, 61, 8 + LTEXT "", IDC_INPUT_LANG_STR, 73, 7, 129, 8 + LTEXT "&Tastaturoppsett/IME:", -1, 7, 21, 110, 10 + COMBOBOX IDC_KB_LAYOUT_IME_COMBO, 7, 32, 212, 150, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL + DEFPUSHBUTTON "OK", IDOK, 116, 53, 52, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 169, 53, 52, 14 +END + +STRINGTABLE +BEGIN + IDS_CPLSYSTEMNAME "Teksttjeneste og inndatasprеk" + IDS_CPLSYSTEMDESCRIPTION "Tilpass innstillingene for teksttjenester med sprеk." + IDS_KEYBOARD "Tastatur" + IDS_NONE "(Ingen)" + IDS_UNKNOWN "(Ukjent)" + IDS_RESTART "Vil du starte datamaskinen pе nytt nе?" + IDS_WHATS_THIS "Hva er dette?" + IDS_LANGUAGE "Sprеk" + IDS_LAYOUT "Tastaturoppsett" + IDS_REM_QUESTION "Vil du fjerne valgte tastaturoppsett?" + IDS_CONFIRMATION "Bekreftelse" + IDS_LAYOUT_EXISTS "Dette oppsettet finnes allerede." + IDS_LAYOUT_EXISTS2 "Dette oppsettet finnes allerede og kan ikke bli lagt til." + IDS_CTRL_SHIFT "Ctrl+Shift" + IDS_LEFT_ALT_SHIFT "Venstre Alt+Shift" + IDS_SWITCH_BET_INLANG "Bytt mellom inndatasprеk" +END + +STRINGTABLE +BEGIN + IDS_US_LAYOUT, "US" + IDS_BELGIAN_LAYOUT, "Belgian (Period)" + IDS_BELGIAN_FRENCH_LAYOUT, "Belgian French" + IDS_PORTUGUESE_BRAZILIAN_ABNT_LAYOUT, "Portuguese (Brazilian ABNT)" + IDS_CANADIAN_FRENCH_LAYOUT, "Canadian French" + IDS_CANADIAN_FRENCH_LEGACY_LAYOUT, "Canadian French (Legacy)" + IDS_DANISH_LAYOUT, "Danish" + IDS_DUTCH_LAYOUT, "Dutch" + IDS_FINNISH_LAYOUT, "Finnish" + IDS_FRENCH_LAYOUT, "French" + IDS_GERMAN_LAYOUT, "German" + IDS_GERMAN_IBM_LAYOUT, "German (IBM)" + IDS_ICELANDIC_LAYOUT, "Icelandic" + IDS_IRISH_LAYOUT, "Irish" + IDS_ITALIAN_LAYOUT, "Italian" + IDS_ITALIAN_142_LAYOUT, "Italian (142)" + IDS_LATIN_AMERICAN_LAYOUT, "Latin American" + IDS_NORWEGIAN_LAYOUT, "Norwegian" + IDS_PORTUGUESE_LAYOUT, "Portuguese" + IDS_SPANISH_LAYOUT, "Spanish" + IDS_SPANISH_VARIANTION_LAYOUT, "Spanish Variation" + IDS_SWEDISH_LAYOUT, "Swedish" + IDS_SWISS_FRENCH_LAYOUT, "Swiss French" + IDS_SWISS_GERMAN_LAYOUT, "Swiss German" + IDS_UNITED_KINGDOM_LAYOUT, "United Kingdom" + IDS_UNITED_STATES_INTERNATIONAL_LAYOUT, "United States-International" + IDS_UNITED_STATES_DVORAK_FOR_LEFT_HAND_LAYOUT, "United States-Dvorak for left hand" + IDS_UNITED_STATES_DVORAK_FOR_RIGHT_HAND_LAYOUT, "United States-Dvorak for right hand" + IDS_ALBANIAN_LAYOUT, "Albanian" + IDS_CROATIAN_LAYOUT, "Croatian" + IDS_CZECH_LAYOUT, "Czech" + IDS_CZECH_QWERTY_LAYOUT, "Czech (QWERTY)" + IDS_HUNGARIAN_LAYOUT, "Hungarian" + IDS_HUNGARIAN_101_KEY_LAYOUT, "Hungarian 101-key" + IDS_POLISH_LAYOUT, "Polish (Programmers)" + IDS_POLISH_214_LAYOUT, "Polish (214)" + IDS_ROMANIAN_LAYOUT, "Romanian" + IDS_SERBIAN_LATIN_LAYOUT, "Serbian (Latin)" + IDS_SLOVAK_LAYOUT, "Slovak" + IDS_SLOVAK_QWERTY_LAYOUT, "Slovak (QWERTY)" + IDS_SLOVENIAN_LAYOUT, "Slovenian" + IDS_ESTONIAN_LAYOUT, "Estonian" + IDS_LATVIAN_LAYOUT, "Latvian" + IDS_LATVIAN_QWERTY_LAYOUT, "Latvian (QWERTY)" + IDS_LITHUANIAN_IBM_LAYOUT, "Lithuanian IBM" + IDS_GREEK_LAYOUT, "Greek" + IDS_GREEK_LATIN_LAYOUT, "Greek Latin" + IDS_GREEK_220_LAYOUT, "Greek (220)" + IDS_GREEK_319_LAYOUT, "Greek (319)" + IDS_GREEK_220_LATIN_LAYOUT, "Greek (220) Latin" + IDS_GREEK_319_LATIN_LAYOUT, "Greek (319) Latin" + IDS_BELARUSIAN_LAYOUT, "Belarusian" + IDS_BULGARIAN_LAYOUT, "Bulgarian" + IDS_BULGARIAN_LATIN_LAYOUT, "Bulgarian (Latin)" + IDS_RUSSIAN_LAYOUT, "Russian" + IDS_RUSSIAN_TYPEWRITER_LAYOUT, "Russian (Typewriter)" + IDS_SERBIAN_CYRILLIC_LAYOUT, "Serbian (Cyrillic)" + IDS_UKRAINIAN_LAYOUT, "Ukrainian" + IDS_TURKISH_F_LAYOUT, "Turkish F" + IDS_TURKISH_Q_LAYOUT, "Turkish Q" + IDS_JAPANESE_LAYOUT, "Japanese" + IDS_JAPANESE_INPUT_SYSTEM_MSIME2002_LAYOUT, "Japanese Input System (MS-IME2002)" + IDS_KOREAN_LAYOUT, "Korean" + IDS_KOREAN_INPUT_SYSTEM_MSIME2002_LAYOUT, "Korean Input System (MS-IME2002)" + IDS_CHINESE_TRADITIONAL_USKEYBOARD_LAYOUT, "Chinese (Traditional) - US Keyboard" + IDS_CHINESE_TRADITIONAL_PHONETIC_LAYOUT, "Chinese (Traditional) - Phonetic" + IDS_CHINESE_TRADITIONAL_CHANGJIE_LAYOUT, "Chinese (Traditional) - ChangJie" + IDS_CHINESE_TRADITIONAL_BIG5CODE_LAYOUT, "Chinese (Traditional) - Big5 Code" + IDS_CHINESE_TRADITIONAL_DAYI_LAYOUT, "Chinese (Traditional) - DaYi" + IDS_CHINESE_TRADITIONAL_UNICODE_LAYOUT, "Chinese (Traditional) - Unicode" + IDS_CHINESE_TRADITIONAL_ALPHANUMERIC_LAYOUT, "Chinese (Traditional) - Alphanumeric" + IDS_CHINESE_SIMPLIFIED_USKEYBOARD_LAYOUT, "Chinese (Simplified) - US Keyboard" + IDS_CHINESE_SIMPLIFIED_QUANPIN_LAYOUT, "Chinese (Simplified) - QuanPin" + IDS_CHINESE_SIMPLIFIED_SHUANGPIN_LAYOUT, "Chinese (Simplified) - ShuangPin" + IDS_CHINESE_SIMPLIFIED_ZHENGMA_LAYOUT, "Chinese (Simplified) - ZhengMa" + IDS_CHINESE_SIMPLIFIED_NEIMA_LAYOUT, "Chinese (Simplified) - NeiMa" + IDS_THAI_KEDMANEE_LAYOUT, "Thai Kedmanee" + IDS_THAI_PATTACHOTE_LAYOUT, "Thai Pattachote" + IDS_THAI_KEDMANEE_NONSHIFTLOCK_LAYOUT, "Thai Kedmanee (non-ShiftLock)" + IDS_THAI_PATTACHOTE_NONSHIFTLOCK_LAYOUT, "Thai Pattachote (non-ShiftLock)" + IDS_HEBREW_LAYOUT, "Hebrew" + IDS_ARABIC_101_LAYOUT, "Arabic (101)" + IDS_ARABIC_102_LAYOUT, "Arabic (102)" + IDS_ARABIC_102_AZERTY_LAYOUT, "Arabic (102) AZERTY" + IDS_CZECH_PROGRAMMERS_LAYOUT, "Czech Programmers" + IDS_LITHUANIAN_LAYOUT, "Lithuanian" + IDS_BELGIAN_COMMA_LAYOUT, "Belgian (Comma)" + IDS_CHINESE_TRADITIONAL_NEWPHONETIC_LAYOUT, "Chinese (Traditional) - New Phonetic" + IDS_CHINESE_SIMPLIFIED_MSPINYINIME30_LAYOUT, "Chinese (Simplified) - Microsoft Pinyin IME 3.0" + IDS_UNITED_STATES_DVIRAK_LAYOUT, "United States-Dvorak" + IDS_CHINESE_TRADITIONAL_NEWCHANGJIE_LAYOUT, "Chinese (Traditional) - New ChangJie" + IDS_ASSAMESE_LAYOUT, "Assamese" + IDS_BENGALI_LAYOUT, "Bengali" + IDS_DEVANAGARI_INSCRIPT_LAYOUT, "Devanagari - INSCRIPT" + IDS_GUJARATI_LAYOUT, "Gujarati" + IDS_KANNADA_LAYOUT, "Kannada" + IDS_MALAYALAM_LAYOUT, "Malayalam" + IDS_ORIYA_LAYOUT, "Oriya" + IDS_PUNJABI_LAYOUT, "Punjabi" + IDS_TAMIL_LAYOUT, "Tamil" + IDS_TELUGU_LAYOUT, "Telugu" + IDS_MARATHI_LAYOUT, "Marathi" + IDS_HINDI_TRADITIONAL_LAYOUT, "Hindi Traditional" + IDS_CANTONESE_PHONETIC_LAYOUT, "Cantonese Phonetic" + IDS_FAEROESE_LAYOUT, "Faeroese" + IDS_FYRO_MACEDONIAN_LAYOUT, "FYRO Macedonian" + IDS_CANADIAN_MULTILINGUAL_STD_LAYOUT, "Canadian Multilingual Standard" + IDS_CHINESE_TRADITIONAL_QUICK_LAYOUT, "Chinese (Traditional) - Quick" + IDS_CHINESE_TRADITIONAL_ARRAY_LAYOUT, "Chinese (Traditional) - Array" + IDS_KAZAKH_LAYOUT, "Kazakh" + IDS_UZBEK_CYRILLIC_LAYOUT, "Uzbek Cyrillic" + IDS_AZERI_CYRILLIC_LAYOUT, "Azeri Cyrillic" + IDS_TATAR_LAYOUT, "Tatar" + IDS_AZERI_LATIN_LAYOUT, "Azeri Latin" + IDS_VIETNAMESE_LAYOUT, "Vietnamese" + IDS_GEORGIAN_LAYOUT, "Georgian" + IDS_ARMENIAN_EASTERN_LAYOUT, "Armenian Eastern" + IDS_ARMENIAN_WESTERN_LAYOUT, "Armenian Western" + IDS_GREEK_POLYTONIC_LAYOUT, "Greek Polytonic" + IDS_USENG_TABLE_IBM_ARABIC238L_LAYOUT, "US English Table for IBM Arabic 238_L" + IDS_FARSI_LAYOUT, "Farsi" + IDS_GAELIC_LAYOUT, "Gaelic" + IDS_PORTUGUESE_BRAZIL_ABNT2_LAYOUT, "Portuguese (Brazilian ABNT2)" + IDS_MONGOLIAN_CYRILLIC_LAYOUT, "Mongolian Cyrillic" + IDS_KYRGYZ_CYRILLIC_LAYOUT, "Kyrgyz Cyrillic" + IDS_URDU_LAYOUT, "Urdu" + IDS_SYRIAC_LAYOUT, "Syriac" + IDS_SYRIAC_PHONETIC_LAYOUT, "Syriac Phonetic" + IDS_DIVEHI_PHONETIC_LAYOUT, "Divehi Phonetic" + IDS_DIVEHI_TYPEWRITER_LAYOUT, "Divehi Typewriter" + IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT, "Bulgarian Phonetic (Classic)" + IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Bulgarian Phonetic (BDS 5237-1978)" + IDS_BULGARIAN_BDS_LAYOUT, "Bulgarian BDS 5237-1978" + IDS_GERMAN_RISTOME_LAYOUT, "German (RISTOME)" + IDS_GERMAN_NEO_11_LAYOUT, "German (NEO-1.1)" + IDS_GERMAN_DE_ERGO_LAYOUT, "German (de_ergo)" + IDS_BURMESE_LAYOUT, "Burmese" + IDS_UKRAINIAN_STUDENT_LAYOUT, "Ukrainian (Student)" +END diff --git a/reactos/dll/cpl/input/rsrc.rc b/reactos/dll/cpl/input/rsrc.rc index 96240e46677..6aef01a197f 100644 --- a/reactos/dll/cpl/input/rsrc.rc +++ b/reactos/dll/cpl/input/rsrc.rc @@ -8,6 +8,7 @@ #include "lang/es-ES.rc" #include "lang/fr-FR.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/cpl/intl/lang/it-IT.rc b/reactos/dll/cpl/intl/lang/it-IT.rc index 16530949681..45505030009 100644 --- a/reactos/dll/cpl/intl/lang/it-IT.rc +++ b/reactos/dll/cpl/intl/lang/it-IT.rc @@ -15,7 +15,7 @@ BEGIN LTEXT "Esempi", -1, 14, 73, 70, 10 LTEXT "Numero:", -1, 16, 86, 48, 10 LTEXT "Valuta:", -1, 16, 101, 48, 10 - LTEXT "Ota:", -1, 16, 116, 48, 10 + LTEXT "Ora:", -1, 16, 116, 48, 10 LTEXT "Data breve:", -1, 16, 131, 48, 10 LTEXT "Data estesa:", -1, 16, 146, 48, 10 EDITTEXT IDC_NUMSAMPLE_EDIT, 89, 86, 140, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP @@ -23,7 +23,7 @@ BEGIN EDITTEXT IDC_TIMESAMPLE_EDIT, 89, 116, 140, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP EDITTEXT IDC_SHORTTIMESAMPLE_EDIT, 89, 131, 140, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP EDITTEXT IDC_FULLTIMESAMPLE_EDIT, 89, 146, 140, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP - GROUPBOX "Ubicazione geografica", -1, 5, 172, 234, 55 + GROUPBOX "Posizione geografica", -1, 5, 172, 234, 55 LTEXT "Per ottenere informazioni locali, come notizie e previsioni meteo, selezionare la localitа corrente:", -1, 14, 184, 210, 24 COMBOBOX IDC_LOCATION_COMBO, 14, 207, 217, 160, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | CBS_SORT END diff --git a/reactos/dll/cpl/intl/lang/no-NO.rc b/reactos/dll/cpl/intl/lang/no-NO.rc new file mode 100644 index 00000000000..b08d443f96a --- /dev/null +++ b/reactos/dll/cpl/intl/lang/no-NO.rc @@ -0,0 +1,197 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_GENERALPAGE DIALOGEX 0, 0, 246, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Regionale innstillinger" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Standarder og format", -1, 5, 5, 234, 162 + LTEXT "Dette valget pеvirker hvordan programmer formater tall, valuta, dato, og tid.", -1, 14, 17, 220, 25 + LTEXT "Velg en enhet for е tilpasse til egenskaper, eller klikk tilpasning for е velge dine egne formater:", -1, 14, 37, 220, 22 + COMBOBOX IDC_LANGUAGELIST, 14, 56, 160, 160, CBS_DROPDOWNLIST | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + PUSHBUTTON "Tilpasni&ng...", IDC_SETUP_BUTTON, 178, 56, 52, 13 + LTEXT "Utvalg", -1, 14, 73, 70, 10 + LTEXT "Tall:", -1, 16, 86, 48, 10 + LTEXT "Valuta:", -1, 16, 101, 48, 10 + LTEXT "Tid:", -1, 16, 116, 48, 10 + LTEXT "Kort dato:", -1, 16, 131, 48, 10 + LTEXT "Lang dato:", -1, 16, 146, 48, 10 + EDITTEXT IDC_NUMSAMPLE_EDIT, 89, 86, 140, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + EDITTEXT IDC_MONEYSAMPLE_EDIT, 89, 101, 140, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + EDITTEXT IDC_TIMESAMPLE_EDIT, 89, 116, 140, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + EDITTEXT IDC_SHORTTIMESAMPLE_EDIT, 89, 131, 140, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + EDITTEXT IDC_FULLTIMESAMPLE_EDIT, 89, 146, 140, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + GROUPBOX "Geografisk plassering", -1, 5, 172, 234, 55 + LTEXT "Still din lokalisering sе at noen tjenester kan skaffe deg lokal informasjon; som for eksempel, nyheter og vжr rapporter.", -1, 14, 184, 210, 24 + COMBOBOX IDC_LOCATION_COMBO, 14, 207, 217, 160, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | CBS_SORT +END + +IDD_LANGUAGESPAGE DIALOGEX 0, 0, 246, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Sprеk" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Teksttjenester og inndatasprеk", IDC_GROUPBOX, 5, 5, 234, 52 + LTEXT "Klikk ""Detaljer..."" for е vise eller endre sprеkene og metodene du kan bruke for е skrive inn tekst.", -1, 12, 15, 220, 18 + PUSHBUTTON "De&taljer...", IDC_DETAIL_BUTTON, 177, 34, 54, 14 + GROUPBOX "Ytterligere sprеkstшtte", IDC_GROUPBOX, 5, 62, 234, 82 + LTEXT "De fleste sprеk er innstallert som standard. Merk av i de relevante boksene nedenfor hvis du vil innstallere flere sprеk.", -1, 12, 72, 220, 18 + CHECKBOX "I&nnstaller filer for for omfattende skript og hшyre-mot-venstre sprеk", IDC_INST_FILES_FOR_RTOL_LANG, 12, 92, 215, 22, BS_MULTILINE + CHECKBOX "Inn&staller filer for шstasiatiske sprеk", IDC_INST_FILES_FOR_ASIAN, 12, 114, 180, 22, BS_MULTILINE +END + +IDD_ADVANCEDPAGE DIALOGEX 0, 0, 246, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Avansert" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Sprеk for ikke-Unicode programmer", IDC_GROUPBOX, 5, 5, 234, 90 + COMBOBOX IDC_LANGUAGE_COMBO, 14, 75, 217, 160, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | CBS_SORT + LTEXT "Denne systeminnstillingen gjшr at programmet som ikke stшtter Unicode, viser menyer og dialogbokser pе det opprinnlige sprеket. Det pеvirker ikke Unicode-programmer, men det gjelder for alle brukere pе denne datamaskinen.", -1, 14, 18, 223, 33 + LTEXT "Velg et sprеk som tilsvarer sprеkversjonen av programmet du vil bruke, som ikke er Unicode-programmer:", -1, 14, 55, 223, 18 + GROUPBOX "Konverteringstabeller for tegntabell", -1, 5, 101, 234, 88 + CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70 + GROUPBOX "Standard brukerkonto innstilling", -1, 5, 193, 234, 30 + CHECKBOX "Bruk alle innstillinger pе gjeldende brukerkonto og standard brukerprofil", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE +END + +IDD_NUMBERSPAGE DIALOGEX 0, 0, 246, 234 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Nummer" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Eksempel", -1, 7, 7, 230, 53, WS_CHILD | WS_VISIBLE + LTEXT "Positiv:", -1, 13, 21, 31, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + EDITTEXT IDC_NUMBERSPOSSAMPLE, 43, 19, 72, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Negativ:", -1, 120, 21, 31, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + EDITTEXT IDC_NUMBERSNEGSAMPLE, 154, 19, 72, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "&Desimaltegn:", -1, 8, 67, 96, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_NUMBERDSYMBOL, 137, 65, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "Antall si&fre etter desimaltegn:", -1, 8, 83, 96, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_NUMBERSNDIGDEC, 137, 81, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "Grupperings&symbol for sifre:", -1, 8, 100, 96, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_NUMBERSDIGITGRSYM, 137, 97, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "Siffer&gruppering:", -1, 8, 117, 96, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_NUMBERSDGROUPING, 137, 113, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "M&inustegn:", -1, 8, 134, 96, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_NUMBERSNSIGNSYM, 137, 129, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "Tall&format for negative tall:", -1, 8, 149, 100, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_NUMBERSNNUMFORMAT, 137, 145, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "Vis ledende &nuller:", -1, 8, 166, 96, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_NUMBERSDISPLEADZER, 137, 161, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "&Listeskilletegn:", -1, 8, 181, 96, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_NUMBERSLSEP, 137, 177, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "&Mеlesystem:", -1, 8, 197, 96, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_NUMBERSMEASSYS, 137, 193, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL +END + + +IDD_CURRENCYPAGE DIALOGEX 0, 0, 246, 234 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Valuta" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Eksempel", -1, 7, 7, 230, 33, WS_CHILD | WS_VISIBLE + LTEXT "Positiv:", -1, 13, 21, 31, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + EDITTEXT IDC_CURRENCYPOSSAMPLE, 43, 19, 72, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Negativ:", -1, 120, 21, 31, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + EDITTEXT IDC_CURRENCYNEGSAMPLE, 154, 19, 72, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "&Valutasymbol:", -1, 10, 51, 121, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_CURRENCYSYMBOL, 134, 49, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "&Positivt valutaformat:", -1, 10, 68, 121, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_CURRENCYPOSVALUE, 134, 66, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "&Negativ valutaformat:", -1, 10, 85, 121, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_CURRENCYNEGVALUE, 134, 83, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "&Desimaltegn:", -1, 10, 111, 121, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_CURRENCYDECSEP, 134, 109, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "&Antall sifre etter desimaltegn:", -1, 10, 128, 121, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_CURRENCYDECNUM, 134, 126, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "&Grupperingssymbol for sifre:", -1, 10, 156, 121, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_CURRENCYGRPSEP, 134, 154, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "&Siffergruppering:", -1, 10, 173, 121, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_CURRENCYGRPNUM, 134, 171, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL +END + + +IDD_TIMEPAGE DIALOGEX 0, 0, 246, 234 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Klokkeslett" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Eksempel", -1, 7, 7, 230, 33, WS_CHILD | WS_VISIBLE + LTEXT "Tid eksempel:", -1, 13, 21, 54, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + EDITTEXT IDC_TIMESAMPLE, 68, 19, 84, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "&Klokkeslettformat:", -1, 13, 52, 130, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_TIMEFORMAT, 149, 50, 84, 100, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP + LTEXT "Skilletegn &i klokkeslett:", -1, 13, 70, 130, 10, WS_VISIBLE | WS_GROUP + COMBOBOX IDC_TIMESEPARATOR, 149, 68, 84, 100, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP + LTEXT "A&M-symbol:", -1, 13, 88, 130, 10, WS_VISIBLE | WS_GROUP + COMBOBOX IDC_TIMEAMSYMBOL, 149, 86, 84, 100, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP + LTEXT "&PM-symbol:", -1, 13, 106, 130, 10, WS_VISIBLE | WS_GROUP + COMBOBOX IDC_TIMEPMSYMBOL, 149, 104, 84, 100, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP + GROUPBOX "", -1, 7, 140, 230, 80, WS_VISIBLE + LTEXT "Klokkeslettformat\n\n\ +t = time m = minutt s = sekund a = am/pm\n\n\ +t = 12 timer T = 24 timer\n\ +tt, mm, ss = ledende null t, m, s = ikke ledende null", + -1, 13, 150, 214, 50, WS_CHILD |WS_VISIBLE | WS_GROUP +END + + +IDD_DATEPAGE DIALOGEX 0, 0, 246, 234 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Dato" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Kalender", IDC_GROUPBOX, 7, 7, 230, 74 + LTEXT "Nеr et tosifret еrstall er angitt, tolk som et еr mellom:", -1, 13, 18, 215, 8 + EDITTEXT IDC_FIRSTYEAR_EDIT, 13, 30, 36, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_DISABLED + LTEXT "og", -1, 55, 32, 17, 8 + EDITTEXT IDC_SECONDYEAR_EDIT, 77, 30, 36, 12, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "",IDC_SCR_MAX_YEAR, "msctls_updown32", UDS_NOTHOUSANDS | UDS_WRAP | UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_CHILD | WS_VISIBLE, 113, 30, 10, 12 + LTEXT "Kalender type:", -1, 13, 48, 56, 10 + COMBOBOX IDC_CALTYPE_COMBO, 77, 46, 153, 100, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_DISABLED + LTEXT "Muslim kalender:", -1, 13, 65, 60, 12 + COMBOBOX IDC_HIJCHRON_COMBO, 77, 64, 153, 100, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_DISABLED + GROUPBOX "Kort datoformat", IDC_GROUPBOX, 7, 83, 230, 81 + LTEXT "Eksempel pе kort dato:", -1, 13, 95, 63, 10 + EDITTEXT IDC_SHRTDATESAMPLE_EDIT, 77, 93, 153, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Eksempel - hшyre til venstre:", -1, 13, 109, 60, 16 + EDITTEXT IDC_SHRTDATERTOL_EDIT, 77, 111, 153, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_DISABLED + LTEXT "Kort datoformat:", -1, 13, 131, 60, 10 + COMBOBOX IDC_SHRTDATEFMT_COMBO, 77, 129, 153, 100, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE + LTEXT "Datoskilletegn:", -1, 13, 148, 113, 10 + COMBOBOX IDC_SHRTDATESEP_COMBO, 180, 146, 51, 100, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE + GROUPBOX "Lang datoformat", IDC_GROUPBOX, 7, 167, 230, 64 + LTEXT "Eksempel pе lang dato:", -1, 13, 179, 61, 10 + EDITTEXT IDC_LONGDATESAMPLE_EDIT, 77, 177, 153, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Eksempel - hшyre til venstre:", -1, 13, 193, 61, 16 + EDITTEXT IDC_LONGDATERTOL_EDIT, 77, 195, 153, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_DISABLED + LTEXT "Lang datoformat:", -1, 13, 215, 60, 10 + COMBOBOX IDC_LONGDATEFMT_COMBO, 77, 213, 153, 100, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE +END + + +IDD_SORTPAGE DIALOGEX 0, 0, 246, 234 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Sortering" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Sortering", -1, 7, 7, 230, 74 + LTEXT "Sorting methods define the sorting order of characters, words, files and folders.", -1, 14, 17, 220, 25 + LTEXT "Select a sorting method for your language:", -1, 14, 37, 220, 22 + COMBOBOX IDC_SORTLIST_COMBO, 14, 56, 217, 83, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL +END + + +STRINGTABLE +BEGIN + IDS_CUSTOMIZE_TITLE "Innstillinger for region og sprеk" + IDS_SPAIN "Spanisk (Spain)" +END + +STRINGTABLE +BEGIN + IDS_CPLNAME "Regionale innstillinger" + IDS_CPLDESCRIPTION "Velg sprеk og nummer format, valuta, tid og dato." +END diff --git a/reactos/dll/cpl/intl/rsrc.rc b/reactos/dll/cpl/intl/rsrc.rc index ad8032734d2..6e85a39bbe0 100644 --- a/reactos/dll/cpl/intl/rsrc.rc +++ b/reactos/dll/cpl/intl/rsrc.rc @@ -7,6 +7,7 @@ #include "lang/es-ES.rc" #include "lang/fr-FR.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/cpl/joy/lang/cs-CZ.rc b/reactos/dll/cpl/joy/lang/cs-CZ.rc new file mode 100644 index 00000000000..7711d9b213d --- /dev/null +++ b/reactos/dll/cpl/joy/lang/cs-CZ.rc @@ -0,0 +1,89 @@ +/* FILE: dll/cpl/joy/lang/cs-CZ.rc + * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) + * UPDATED: 2008-07-27 + */ + +LANGUAGE LANG_CZECH, SUBLANG_DEFAULT + +IDD_PROPPAGEMAIN DIALOGEX 0, 0, 252, 205 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Hernн ovladaиe" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_CPLSYSTEM, -1, 7, 7, 20, 20 + LTEXT "Tato nastavenн pomбhajн konfigurovat hernн ovladaиe nainstalovanй na tomto poинtaиi.", -1, 33, 7, 214, 20, NOT WS_GROUP + GROUPBOX "Nai&nstalovanй ovladaиe her", -1, 7, 34, 238, 117 + CONTROL "List1", IDC_CONTROLLER_LIST, "SysListView32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x0000808D, 14, 44, 224, 80 + PUSHBUTTON "&Pшidat...", IDC_ADD_BUTTON, 35, 129, 65, 14 + PUSHBUTTON "&Odebrat", IDC_REMOVE_BUTTON, 104, 129, 65, 14, WS_DISABLED + PUSHBUTTON "&Vlastnosti", IDC_PROPERTIES_BUTTON, 173, 129, 65, 14, WS_DISABLED + PUSHBUTTON "&Rozљншenй...", IDC_ADVANCED_BUTTON, 111, 157, 65, 14 + PUSHBUTTON "Ш&eљenн problйmщ...", IDC_TROUBLESHOOT_BUTTON, 180, 157, 65, 14 + PUSHBUTTON "OK", IDOK, 195, 185, 50, 14 +END + +IDD_ADD DIALOGEX 0, 0, 265, 200 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Pшidat hernн ovladaи" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_CPLSYSTEM, -1, 8, 7, 20, 20 + LTEXT "Vyberte hernн ovladaи ze seznamu nнћe, potй kliknмte na tlaинtko OK. Pokud se vбљ ovladaи v seznamu nenachбzн, kliknмte na tlaинtko Vlastnн.", -1, 35, 7, 210, 33 + LTEXT "&Hernн ovladaиe:", -1, 8, 45, 126, 8 + LISTBOX IDC_GAME_CONTROLLERS_LIST, 7, 55, 251, 57, LBS_STANDARD | LBS_NOINTEGRALHEIGHT | LBS_WANTKEYBOARDINPUT | WS_HSCROLL | WS_TABSTOP + AUTOCHECKBOX "&Zapnout kormidlo a pedбly", IDC_ENABLE_RUDDERS_CHECKBOX, 7, 114, 100, 10, WS_GROUP + LTEXT "&Port:", -1, 7, 134, 38, 8, NOT WS_VISIBLE + COMBOBOX IDC_GAME_PORT_COMBO, 7, 147, 140, 50, CBS_DROPDOWNLIST | CBS_SORT | NOT WS_VISIBLE | WS_VSCROLL + PUSHBUTTON "&Vlastnн...", IDC_CUSTOM_BUTTON, 208, 147, 50, 14 + CONTROL "", -25525, "STATIC", SS_ETCHEDHORZ, 7, 170, 251, 1 + DEFPUSHBUTTON "OK", IDOK, 155, 179, 50, 14 + PUSHBUTTON "Storno", IDCANCEL, 208, 179, 50, 14 +END + +IDD_CUSTOM DIALOGEX 0, 0, 265, 183, 0 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Vlastnн hernн ovladaи" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Zvlбљtnн charakteristiky", -1, 7, 7, 245, 52 + AUTORADIOBUTTON "&Joystick", IDC_JOYSTICK_RADIO, 17, 23, 55, 10 + AUTORADIOBUTTON "&Leteckб шнdнcн pбka nebo kormidlo", IDC_FLIGHT_YOKE_RADIO, 147, 23, 89, 10 + AUTORADIOBUTTON "&Gamepad", IDC_GAME_PAD_RADIO, 17, 40, 65, 10 + AUTORADIOBUTTON "Шнzenн &auta", IDC_RACE_CAR_RADIO, 147, 40, 93, 10 + GROUPBOX "&Osy", -1, 7, 67, 116, 44, WS_GROUP + COMBOBOX IDC_AXES_COMBO, 37, 79, 48, 50, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL + AUTORADIOBUTTON "Kormidlo/Pedбly", IDC_RUDDER_PEDALS_RADIO, 14, 97, 63, 10, NOT WS_VISIBLE + AUTORADIOBUTTON "Osa Z", IDC_Z_AXIS_RADIO, 81, 97, 35, 10, NOT WS_VISIBLE + GROUPBOX "&Tlaинtka", -1, 137, 67, 116, 44 + COMBOBOX IDC_BUTTONS_COMBO, 178, 79, 48, 50, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL, WS_EX_CLIENTEDGE + AUTOCHECKBOX "Obsahuje шнzenн zo&rnйho ъhlu", IDC_INC_POINT_CHECKBOX, 7, 123, 115, 10 + LTEXT "Nбzev hernнho &ovladaиe:", -1, 7, 139, 200, 9 + EDITTEXT IDC_CONTROLLER_NAME_EDIT, 7, 150, 116, 15, ES_AUTOHSCROLL, WS_EX_CLIENTEDGE | WS_EX_STATICEDGE + DEFPUSHBUTTON "OK", IDOK, 137, 150, 50, 14 + PUSHBUTTON "Storno", IDCANCEL, 203, 150, 50, 14 +END + +IDD_ADVANCED DIALOGEX 0, 0, 220, 86 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Rozљншenй nastavenн" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_CPLSYSTEM, -1, 7, 24, 20, 20 + DEFPUSHBUTTON "OK", IDOK, 106, 65, 50, 14 + PUSHBUTTON "Storno", IDCANCEL, 163, 65, 50, 14 + LTEXT "Vyberte zaшнzenн, kterй chcete pouћнvat se starљнmi programy.", -1, 7, 7, 208, 10 + LTEXT "&Preferovanй zaшнzenн:", -1, 34, 24, 70, 10 + COMBOBOX IDC_PREFERRED_DEV_COMBO, 34, 38, 179, 75, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL +END + +STRINGTABLE +BEGIN + IDS_CPLSYSTEMNAME "Hernн ovladaиe" + IDS_CPLSYSTEMDESCRIPTION "Pшidat, odebrat a konfigurovat hernн ovladaиe jako napшнklad joysticky nebo gamepady." + IDS_CONTROLLER "Ovladaи" + IDS_STATUS "Stav" +END diff --git a/reactos/dll/cpl/joy/lang/no-NO.rc b/reactos/dll/cpl/joy/lang/no-NO.rc new file mode 100644 index 00000000000..3b2bcd89112 --- /dev/null +++ b/reactos/dll/cpl/joy/lang/no-NO.rc @@ -0,0 +1,84 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_PROPPAGEMAIN DIALOGEX 0, 0, 252, 205 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Spillkontroller" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_CPLSYSTEM, -1, 7, 7, 20, 20 + LTEXT "Disse innstillingene hjelper deg med е konfigurere spillkontrollerne som er innstallert pе din datamaskin.", -1, 33, 7, 214, 20, NOT WS_GROUP + GROUPBOX "I&nnstallerte spillkontroller", -1, 7, 34, 238, 117 + CONTROL "List1", IDC_CONTROLLER_LIST, "SysListView32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x0000808D, 14, 44, 224, 80 + PUSHBUTTON "&Legg til...", IDC_ADD_BUTTON, 35, 129, 65, 14 + PUSHBUTTON "&Fjern", IDC_REMOVE_BUTTON, 104, 129, 65, 14, WS_DISABLED + PUSHBUTTON "&Egenskaper", IDC_PROPERTIES_BUTTON, 173, 129, 65, 14, WS_DISABLED + PUSHBUTTON "A&vansert...", IDC_ADVANCED_BUTTON, 111, 157, 65, 14 + PUSHBUTTON "&Feilsшk...", IDC_TROUBLESHOOT_BUTTON, 180, 157, 65, 14 + PUSHBUTTON "OK", IDOK, 195, 185, 50, 14 +END + +IDD_ADD DIALOGEX 0, 0, 265, 200 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Legg til spillkontroller" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_CPLSYSTEM, -1, 8, 7, 20, 20 + LTEXT "Velg en spillkontroll fra denne listen, og sе klikk pе OK. Hvis ikke spillkontrolleren dukker opp i listen, klikk pе tilpass.", -1, 35, 7, 210, 33 + LTEXT "&Spillkontroller:", -1, 8, 45, 126, 8 + LISTBOX IDC_GAME_CONTROLLERS_LIST, 7, 55, 251, 57, LBS_STANDARD | LBS_NOINTEGRALHEIGHT | LBS_WANTKEYBOARDINPUT | WS_HSCROLL | WS_TABSTOP + AUTOCHECKBOX "&Aktiver sideror og pedaler", IDC_ENABLE_RUDDERS_CHECKBOX, 7, 114, 100, 10, WS_GROUP + LTEXT "&Spill Port:", -1, 7, 134, 38, 8, NOT WS_VISIBLE + COMBOBOX IDC_GAME_PORT_COMBO, 7, 147, 140, 50, CBS_DROPDOWNLIST | CBS_SORT | NOT WS_VISIBLE | WS_VSCROLL + PUSHBUTTON "&Tilpass...", IDC_CUSTOM_BUTTON, 208, 147, 50, 14 + CONTROL "", -25525, "STATIC", SS_ETCHEDHORZ, 7, 170, 251, 1 + DEFPUSHBUTTON "OK", IDOK, 155, 179, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 208, 179, 50, 14 +END + +IDD_CUSTOM DIALOGEX 0, 0, 265, 183, 0 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Tilpass spillkontroller" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Spesielle egenskaper", -1, 7, 7, 245, 52 + AUTORADIOBUTTON "&Styrespak", IDC_JOYSTICK_RADIO, 17, 23, 55, 10 + AUTORADIOBUTTON "&Flystikke", IDC_FLIGHT_YOKE_RADIO, 147, 23, 89, 10 + AUTORADIOBUTTON "&Spillkontroll", IDC_GAME_PAD_RADIO, 17, 40, 65, 10 + AUTORADIOBUTTON "&Racerbilkontroller", IDC_RACE_CAR_RADIO, 147, 40, 93, 10 + GROUPBOX "&Akser", -1, 7, 67, 116, 44, WS_GROUP + COMBOBOX IDC_AXES_COMBO, 37, 79, 48, 50, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL + AUTORADIOBUTTON "Rudder/Pedaler", IDC_RUDDER_PEDALS_RADIO, 14, 97, 63, 10, NOT WS_VISIBLE + AUTORADIOBUTTON "Z Axis", IDC_Z_AXIS_RADIO, 81, 97, 35, 10, NOT WS_VISIBLE + GROUPBOX "&Knapper", -1, 137, 67, 116, 44 + COMBOBOX IDC_BUTTONS_COMBO, 178, 79, 48, 50, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL, WS_EX_CLIENTEDGE + AUTOCHECKBOX "Inkluderer &synsvinkelreguring", IDC_INC_POINT_CHECKBOX, 7, 123, 115, 10 + LTEXT "K&ontrollernavn:", -1, 7, 139, 200, 9 + EDITTEXT IDC_CONTROLLER_NAME_EDIT, 7, 150, 116, 15, ES_AUTOHSCROLL, WS_EX_CLIENTEDGE | WS_EX_STATICEDGE + DEFPUSHBUTTON "OK", IDOK, 137, 150, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 203, 150, 50, 14 +END + +IDD_ADVANCED DIALOGEX 0, 0, 220, 86 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Avanserte innstillinger" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_CPLSYSTEM, -1, 7, 24, 20, 20 + DEFPUSHBUTTON "OK", IDOK, 106, 65, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 163, 65, 50, 14 + LTEXT "Velg hvilken enhet du vil bruke med eldre programmer.", -1, 7, 7, 208, 10 + LTEXT "&Foretrukket enhet:", -1, 34, 24, 70, 10 + COMBOBOX IDC_PREFERRED_DEV_COMBO, 34, 38, 179, 75, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL +END + +STRINGTABLE +BEGIN + IDS_CPLSYSTEMNAME "Spillkontroller" + IDS_CPLSYSTEMDESCRIPTION "Legg til, fjern, og konfigurer spillkontroller maskinvare som styrespak og spillkontroll." + IDS_CONTROLLER "Kontroller" + IDS_STATUS "Status" +END diff --git a/reactos/dll/cpl/joy/rsrc.rc b/reactos/dll/cpl/joy/rsrc.rc index 3b65c650812..5440928c43e 100644 --- a/reactos/dll/cpl/joy/rsrc.rc +++ b/reactos/dll/cpl/joy/rsrc.rc @@ -2,12 +2,14 @@ #include #include "lang/bg-BG.rc" +#include "lang/cs-CZ.rc" #include "lang/de-DE.rc" #include "lang/el-GR.rc" #include "lang/en-US.rc" #include "lang/es-ES.rc" #include "lang/fr-FR.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/cpl/liccpa/lang/cs-CZ.rc b/reactos/dll/cpl/liccpa/lang/cs-CZ.rc new file mode 100644 index 00000000000..b3e75c38105 --- /dev/null +++ b/reactos/dll/cpl/liccpa/lang/cs-CZ.rc @@ -0,0 +1,32 @@ +/* FILE: dll/cpl/liccpa/lang/cs-CZ.rc + * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) + * UPDATED: 2008-07-27 + */ + +LANGUAGE LANG_CZECH, SUBLANG_DEFAULT + +IDD_PROPPAGE1 DIALOGEX DISCARDABLE 20, 40, 315, 104 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_OVERLAPPED | WS_CAPTION | WS_VISIBLE | WS_SYSMENU +CAPTION "Zvolit licenиnн reћim" +FONT 8, "Helv" +BEGIN + CONTROL "Licenиnн reћim klientщ", 100, "BUTTON", BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 4, 4, 239, 94 + CONTROL "Na zaшнzenн nebo na uћivatele", 102, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE, 13, 79, 107, 12 + CONTROL "Na server. Poиet souиasnэch pшipojenн:", 103, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE, 13, 38, 163, 9 + CONTROL "Produkt:", 105, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE, 13, 20, 31, 8 + CONTROL "", 106, "COMBOBOX", CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP, 49, 20, 171, 12 + CONTROL "OK", 107, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 263, 7, 46, 14 + CONTROL "Storno", 108, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 263, 27, 46, 14 + CONTROL "Nбpovмda", 109, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 263, 48, 46, 14 + CONTROL "Replikace...", 110, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 263, 68, 46, 14 + CONTROL "Pшidat licence", 111, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 30, 56, 65, 15 + CONTROL "Odebrat licence", 112, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 112, 56, 61, 16 + CONTROL "", 114, "EDIT", ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 187, 39, 32, 12 +END + +STRINGTABLE +BEGIN + IDS_CPLNAME_1 "Manaћer licencн" + IDS_CPLDESCRIPTION_1 "Manaћer licencн" + IDS_REACTOS "ReactOS - FreeSoftware" +END diff --git a/reactos/dll/cpl/liccpa/lang/no-NO.rc b/reactos/dll/cpl/liccpa/lang/no-NO.rc new file mode 100644 index 00000000000..14be465ccb9 --- /dev/null +++ b/reactos/dll/cpl/liccpa/lang/no-NO.rc @@ -0,0 +1,27 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_PROPPAGE1 DIALOGEX DISCARDABLE 20, 40, 315, 104 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_OVERLAPPED | WS_CAPTION | WS_VISIBLE | WS_SYSMENU +CAPTION "Velg lisens modus" +FONT 8, "Helv" +BEGIN + CONTROL "klient Lisens modus", 100, "BUTTON", BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 4, 4, 239, 94 + CONTROL "Per enhet eller per bruker", 102, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE, 13, 79, 107, 12 + CONTROL "Per server. Nummer av nеvжrende tilkoblinger:", 103, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE, 13, 38, 163, 9 + CONTROL "Produkt:", 105, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE, 13, 20, 31, 8 + CONTROL "", 106, "COMBOBOX", CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP, 49, 20, 171, 12 + CONTROL "OK", 107, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 263, 7, 46, 14 + CONTROL "Avbryt", 108, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 263, 27, 46, 14 + CONTROL "Hjelp", 109, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 263, 48, 46, 14 + CONTROL "Reproduksjon...", 110, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 263, 68, 46, 14 + CONTROL "Legg til lisens", 111, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 30, 56, 65, 15 + CONTROL "Fjern lisens", 112, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 112, 56, 61, 16 + CONTROL "", 114, "EDIT", ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 187, 39, 32, 12 +END + +STRINGTABLE +BEGIN + IDS_CPLNAME_1 "Lisens Behandler" + IDS_CPLDESCRIPTION_1 "Lisens Behandler" + IDS_REACTOS "ReactOS - Gratis programvare" +END diff --git a/reactos/dll/cpl/liccpa/rsrc.rc b/reactos/dll/cpl/liccpa/rsrc.rc index 8d1333bb3a8..2dcb4c4e158 100644 --- a/reactos/dll/cpl/liccpa/rsrc.rc +++ b/reactos/dll/cpl/liccpa/rsrc.rc @@ -2,6 +2,7 @@ #include "resource.h" #include "lang/bg-BG.rc" +#include "lang/cs-CZ.rc" #include "lang/de-DE.rc" #include "lang/en-US.rc" #include "lang/es-ES.rc" @@ -9,6 +10,7 @@ #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/ja-JP.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/cpl/main/lang/cs-CZ.rc b/reactos/dll/cpl/main/lang/cs-CZ.rc index 2c626bab89d..0bf2a5bbb8f 100644 --- a/reactos/dll/cpl/main/lang/cs-CZ.rc +++ b/reactos/dll/cpl/main/lang/cs-CZ.rc @@ -1,3 +1,9 @@ +/* FILE: dll/cpl/main/lang/cs-CZ.rc + * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) + * THANKS TO: Kamil Hornicek, who translated major part of this file + * UPDATED: 2008-07-27 + */ + LANGUAGE LANG_CZECH, SUBLANG_DEFAULT IDD_KEYBSPEED DIALOGEX 0, 0, 246, 228 @@ -162,11 +168,11 @@ BEGIN IDS_HAND "Vэbмr odkazu" IDS_NONE "(Nenн)" IDS_SYSTEM_SCHEME "(systйmovй schйma)" - IDS_BROWSE_FILTER "Cursors (*.ani, *.cur)\0*.ani;*.cur\0Animated Cursors (*.ani)\0*.ani\0Static Cursors (*.cur)\0*.cur\0All Files\0*.*\0\0" - IDS_BROWSE_TITLE "Browse" - IDS_REMOVE_TITLE "Confirm Scheme Removal" - IDS_REMOVE_TEXT "Are you sure you want to remove the cursor scheme '%s'?" - IDS_OVERWRITE_TITLE "Confirm Cursor Scheme Overwrite" - IDS_OVERWRITE_TEXT "The cursor scheme name you chose is already in use. Do you want to overwrite the existing cursor scheme?" - IDS_ANIMATE_CURSOR "Animated Cursor" + IDS_BROWSE_FILTER "Kurzory (*.ani, *.cur)\0*.ani;*.cur\0Animovanй kurzory (*.ani)\0*.ani\0Statickй kurzory (*.cur)\0*.cur\0Vљechny soubory\0*.*\0\0" + IDS_BROWSE_TITLE "Prochбzet" + IDS_REMOVE_TITLE "Potvrdit odebrбnн kurzorovйho schйmatu" + IDS_REMOVE_TEXT "Jste si jistн, ћe chcete odebrat kurzorovй schйma '%s'?" + IDS_OVERWRITE_TITLE "Potvrdit pшepsбnн kurzorovйho schйmatu" + IDS_OVERWRITE_TEXT "Zvolenэ nбzev kurzorovйho schйmatu je jiћ pouћнvбn. Chcete pшepsat existujнcн kurzorovй schйma?" + IDS_ANIMATE_CURSOR "Animovanэ kurzor" END diff --git a/reactos/dll/cpl/main/lang/no-NO.rc b/reactos/dll/cpl/main/lang/no-NO.rc new file mode 100644 index 00000000000..01432755562 --- /dev/null +++ b/reactos/dll/cpl/main/lang/no-NO.rc @@ -0,0 +1,172 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_KEYBSPEED DIALOGEX 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hastighet" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Repetisjonshastighet", -1, 5, 5, 236, 135 + ICON IDI_REPEAT_DELAY, IDC_ICON_REPEAT_DELAY, 13, 18, 15, 15 + LTEXT "Repetisjon&forsinkelse:", -1, 40, 18, 100, 10 + LTEXT "Lang", -1, 40, 33, 20, 10 + LTEXT "Kort", -1, 200, 33, 20, 10 + CONTROL "",IDC_SLIDER_REPEAT_DELAY, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 33, 130, 17 + ICON IDI_REPEAT_RATE, IDC_ICON_REPEAT_RATE, 13, 70, 15, 15 + LTEXT "&Repetisjonshastighet:", -1, 40, 70, 100, 10 + LTEXT "Langsom", -1, 40, 85, 20, 10 + LTEXT "Rask", -1, 200, 85, 20, 10 + CONTROL "",IDC_SLIDER_REPEAT_RATE, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 85, 130, 17 + LTEXT "Klikk her og hold nede en tast for е &teste repetisjonshastigheten:", -1, 15, 105, 216, 10 + EDITTEXT IDC_EDIT_REPEAT_RATE, 15, 116, 216, 14, WS_CHILD | WS_VISIBLE | WS_GROUP + GROUPBOX "Markшr&blinking:", -1, 5, 145, 236, 50 + LTEXT "", IDC_TEXT_CURSOR_BLINK, 20, 165, 1, 8 + LTEXT "Ingen", -1, 40, 165, 25, 10 + LTEXT "Rask", -1, 200, 165, 30, 10 + CONTROL "",IDC_SLIDER_CURSOR_BLINK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 165, 130, 17 +END + +IDD_HARDWARE DIALOGEX 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Maskinvare" +FONT 8, "MS Shell Dlg" +BEGIN +END + +IDD_CLICK_LOCK DIALOGEX 0, 0, 240, 78 +STYLE DS_SHELLFONT | WS_CAPTION | WS_SYSMENU +CAPTION "Klikklеs" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Kort", -1, 50, 35, 27, 10 + LTEXT "Langt", -1, 157, 35, 27, 10 + CONTROL "",IDC_SLIDER_CLICK_LOCK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 78, 35, 70, 17 + PUSHBUTTON "&OK", IDOK, 110, 59, 60, 14 + PUSHBUTTON "&Avbryt", IDCANCEL, 174, 59, 60, 14 + LTEXT "&Adjust how long you need to hold down a mouse or trackball button before your click is locked",-1,37,5,200,27 + ICON IDI_LOOK_KEY, IDC_ICON_CLICK_LOCK, 5, 5, 15, 15 +END + +IDD_PAGE_BUTTON DIALOGEX 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Knapper" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Knappekonfigurasjon", -1, 5, 5, 236, 70 + CHECKBOX "&Bytt om primжr og sekundжrknappen", IDC_SWAP_MOUSE_BUTTONS, 10, 18, 156, 10 + CONTROL "", IDC_IMAGE_SWAP_MOUSE, "Static", SS_ICON | SS_CENTERIMAGE | WS_VISIBLE, 171, 14, 65, 57, WS_EX_STATICEDGE + LTEXT "Merk av i denne avmerkningsboksen for е gjшre knappen til hшyre til den du bruker til primжrfunksjoner som е velge е dra.", -1, 10, 36, 156, 30 + GROUPBOX "Hastighet pе dobbeltklikking", -1, 5, 78, 236, 70 + LTEXT "Dobbeltklikk mappen for е teste innstillingen. Hvis mappen ikke lukkes eller еpnes, kan du prшve med en langsommere innstilling.", -1, 10, 90, 156, 28 + LTEXT "Hastig&het: Langsom", -1, 10, 123, 50, 10 + LTEXT "Rask", -1, 136, 123, 24, 10 + CONTROL "",IDC_SLIDER_DOUBLE_CLICK_SPEED, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 60, 123, 70, 17 + CONTROL "", IDC_IMAGE_DOUBLE_CLICK_SPEED, "Static", SS_ICON | SS_NOTIFY | SS_CENTERIMAGE | WS_VISIBLE, 171, 87, 65, 57, WS_EX_STATICEDGE + GROUPBOX "Klikklеs", -1, 5, 150, 236, 70 + CHECKBOX "&Slе pе klikklеs", IDC_CHECK_CLICK_LOCK, 10, 160, 70, 20 + PUSHBUTTON "&Innstillinger...", IDC_BUTTON_CLICK_LOCK, 172, 161, 60, 14 + LTEXT "Lar deg merke eller dra uten е holde nede museknappen.Trykk kort pе museknappen hvis du vil aktivere. Klikk museknappen igjen hvis du vil deaktivere.", -1, 10, 180, 224, 30 +END + +IDD_PAGE_POINTER DIALOGEX 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Pekere" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Oppsett", -1, 5, 5, 181, 45 + COMBOBOX IDC_COMBO_CURSOR_SCHEME, 12, 15, 167, 200, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "La&gre som...", IDC_BUTTON_SAVEAS_SCHEME, 65, 31, 60, 14 + PUSHBUTTON "&Slett", IDC_BUTTON_DELETE_SCHEME, 128, 31, 50, 14 + CONTROL "", IDC_IMAGE_CURRENT_CURSOR, "Static", SS_ICON | SS_CENTERIMAGE | WS_VISIBLE, 196, 9, 45, 41, WS_EX_STATICEDGE + LTEXT "&Tilpass", -1, 5, 57, 60, 10 + LISTBOX IDC_LISTBOX_CURSOR, 5, 68, 236, 124, WS_VISIBLE | WS_BORDER | WS_TABSTOP | WS_VSCROLL | LBS_OWNERDRAWFIXED | LBS_NOTIFY + CHECKBOX "&Aktiver pekerskygge", IDC_CHECK_DROP_SHADOW, 5, 198, 105, 10 + PUSHBUTTON "Bruk St&andard", IDC_BUTTON_USE_DEFAULT_CURSOR, 117, 196, 65, 14 + PUSHBUTTON "&Bla gjennom...", IDC_BUTTON_BROWSE_CURSOR, 186, 196, 55, 14 +END + +IDD_CURSOR_SCHEME_SAVEAS DIALOGEX 0, 0, 192, 53 +STYLE DS_SHELLFONT | WS_CAPTION | WS_SYSMENU +CAPTION "Lagre Scheme" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Lagre denne cursor scheme som:", -1, 5, 5, 181, 10 + EDITTEXT IDC_EDIT_SCHEME_NAME, 5, 15, 180, 15, WS_CHILD | WS_VISIBLE | WS_GROUP + PUSHBUTTON "&OK", IDOK, 63, 35, 60, 14 + PUSHBUTTON "&Avbryt", IDCANCEL, 126, 35, 60, 14 +END + + +IDD_PAGE_OPTION DIALOGEX 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Pekeralternativer" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Bevegelse", -1, 5, 5, 236, 60 + LTEXT "Ve&lg en pekehastighet:", -1, 52, 15, 110, 10 + LTEXT "Langsomt", -1, 60, 30, 20, 10 + CONTROL "",IDC_SLIDER_MOUSE_SPEED, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 90, 30, 70, 17 + LTEXT "Rask", -1, 170, 30, 20, 10 + ICON IDI_MOUSE_SPEED, IDC_ICON_MOUSE_SPEED, 18, 20, 32, 32 + CHECKBOX "&Aktiver pekerpresisjon", IDC_CHECK_POINTER_PRECISION, 52, 50, 140, 10 + GROUPBOX "Flytt til standardknapp", -1, 5, 70, 236, 40 + CHECKBOX "Fl&ytt automatisk pekeren til standardknappen i dialogboksene", + IDC_CHECK_SNAP_TO, 52, 84, 183, 20, BS_MULTILINE | BS_TOP + ICON IDI_MOUSE_BUTTON, IDC_ICON_SNAP_TO, 18, 83, 15, 15 + GROUPBOX "Synlighet", -1, 5, 115, 236, 95 + CHECKBOX "&Vis pekerspor:", IDC_CHECK_POINTER_TRAIL, 52, 128, 125, 10 + LTEXT "Kort", IDC_TEXT_TRAIL_SHORT, 54, 143, 25, 10 + LTEXT "Lang", IDC_TEXT_TRAIL_LONG, 157, 143, 30, 10 + ICON IDI_MOUSE_TRAILS, IDC_ICON_POINTER_TRAIL, 20, 128, 15, 15 + CONTROL "", IDC_SLIDER_POINTER_TRAIL ,"msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 80, 143, 70, 17 + CHECKBOX "&Skjul pekeren ved tastetrykk", IDC_CHECK_HIDE_POINTER, 52, 163, 130, 10 + ICON IDI_MOUSE_SPEED, IDC_ICON_HIDE_POINTER, 18, 158, 15, 15 + CHECKBOX "&Vis hvor pekeren er nеr Crtl-tasten trykkes", + IDC_CHECK_SHOW_POINTER, 52, 188, 183, 20, BS_MULTILINE | BS_TOP + ICON IDI_MOUSE_POINTER, IDC_ICON_SHOW_POINTER, 18, 183, 15, 15 +END + +IDD_PAGE_WHEEL DIALOGEX 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Hjul" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Loddrett rulling", -1, 5, 5, 236, 80 + ICON IDI_MOUSE_WHEEL, IDC_ICON_WHEEL, 20, 20, 32, 32 + LTEXT "Rull hjulet ett hakk for е rulle:", -1, 60, 15, 150, 10 + RADIOBUTTON "Fшlgende &antall linjer om gangen:", IDC_RADIO_WHEEL_SCROLL_LINES, 60, 30, 150, 10, WS_VISIBLE | WS_GROUP | WS_TABSTOP + RADIOBUTTON "&En skjermhшyde av gangen", IDC_RADIO_WHEEL_SCROLL_PAGE, 60, 65, 90, 10 + EDITTEXT IDC_EDIT_WHEEL_SCROLL_LINES, 70, 45, 60, 15, ES_RIGHT | WS_VISIBLE | WS_GROUP | WS_TABSTOP + CONTROL "", IDC_UPDOWN_WHEEL_SCROLL_LINES, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER, 125, 45, 12, 12 +END + +STRINGTABLE +BEGIN + IDS_CPLNAME_1 "Mus" + IDS_CPLDESCRIPTION_1 "Endre mus innstillinger." + IDS_CPLNAME_2 "Tastatur" + IDS_CPLDESCRIPTION_2 "Endre tastatur innstillinger." + IDS_ARROW "Vanlig merkering" + IDS_HELP "Hjelp valg" + IDS_APPSTARTING "Arbeider i bakgrunnen" + IDS_WAIT "Busy" + IDS_CROSSHAIR "Precision Select" + IDS_IBEAM "Tekst valgt" + IDS_NWPEN "Handskriving" + IDS_NO "Utilgjengelig" + IDS_SIZENS "Vertical Resize" + IDS_SIZEWE "Horizontal Resize" + IDS_SIZENWSE "Diagonal Resize 1" + IDS_SIZENESW "Diagonal Resize 2" + IDS_SIZEALL "Flytt" + IDS_UPARROW "Alternative Select" + IDS_HAND "Link Select" + IDS_NONE "(Ingen)" + IDS_SYSTEM_SCHEME "(system scheme)" + IDS_BROWSE_FILTER "Cursors (*.ani, *.cur)\0*.ani;*.cur\0Animated Cursors (*.ani)\0*.ani\0Static Cursors (*.cur)\0*.cur\0All Files\0*.*\0\0" + IDS_BROWSE_TITLE "Bla gjennom" + IDS_REMOVE_TITLE "Confirm Cursor Scheme Removal" + IDS_REMOVE_TEXT "Are you sure you want to remove the cursor scheme '%s'?" + IDS_OVERWRITE_TITLE "Confirm Cursor Scheme Overwrite" + IDS_OVERWRITE_TEXT "The cursor scheme name you chose is already in use. Do you want to overwrite the existing cursor scheme?" + IDS_ANIMATE_CURSOR "Animated Cursor" +END diff --git a/reactos/dll/cpl/main/lang/ru-RU.rc b/reactos/dll/cpl/main/lang/ru-RU.rc index 9b61b28d018..a3124561861 100644 --- a/reactos/dll/cpl/main/lang/ru-RU.rc +++ b/reactos/dll/cpl/main/lang/ru-RU.rc @@ -5,24 +5,24 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Скорость" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Повтор вводимого символа", -1, 5, 5, 230, 150 - ICON IDI_REPEAT_DELAY, IDC_ICON_REPEAT_DELAY, 15, 15, 15, 15 - LTEXT "&Задержка перед началом повтора:", -1, 40, 15, 160, 10 - LTEXT "Длиннее", -1, 25, 30, 28, 10 - LTEXT "Короче", -1, 200, 30, 25, 10 - CONTROL "",IDC_SLIDER_REPEAT_DELAY, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 30, 130, 17 + GROUPBOX "Повтор вводимого символа", -1, 5, 5, 236, 150 + ICON IDI_REPEAT_DELAY, IDC_ICON_REPEAT_DELAY, 15, 20, 15, 15 + LTEXT "&Задержка перед началом повтора:", -1, 51, 20, 160, 10 + LTEXT "Длиннее", -1, 50, 42, 35, 11 + LTEXT "Короче", -1, 190, 42, 33, 10 + CONTROL "",IDC_SLIDER_REPEAT_DELAY, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 84, 35, 102, 17 ICON IDI_REPEAT_RATE, IDC_ICON_REPEAT_RATE, 15, 70, 15, 15 - LTEXT "&Скорость повтора:", -1, 40, 70, 100, 10 - LTEXT "Ниже", -1, 40, 85, 20, 10 - LTEXT "Выше", -1, 200, 85, 20, 10 - CONTROL "",IDC_SLIDER_REPEAT_RATE, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 85, 130, 17 - LTEXT "&Чтобы проверить скорость повтора, поместите курсор в поле, нажмите любую клавишу и не отпускайте ее:", -1, 15, 105, 200, 22 - EDITTEXT IDC_EDIT_REPEAT_RATE, 15, 130, 200, 15, WS_CHILD | WS_VISIBLE | WS_GROUP - GROUPBOX "Частота мерцания курсора", -1, 5, 165, 230, 50 - LTEXT "", IDC_TEXT_CURSOR_BLINK, 20, 185, 1, 8 - LTEXT "Ниже", -1, 40, 185, 30, 10 - LTEXT "Выше", -1, 200, 185, 30, 10 - CONTROL "",IDC_SLIDER_CURSOR_BLINK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 185, 130, 17 + LTEXT "&Скорость повтора:", -1, 51, 70, 100, 10 + LTEXT "Ниже", -1, 60, 91, 22, 10 + LTEXT "Выше", -1, 191, 91, 22, 10 + CONTROL "",IDC_SLIDER_REPEAT_RATE, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 84, 85, 102, 17 + LTEXT "&Чтобы проверить скорость повтора, поместите курсор в поле, нажмите любую клавишу и не отпускайте ее:", -1, 15, 105, 216, 22 + EDITTEXT IDC_EDIT_REPEAT_RATE, 15, 130, 213, 15, WS_CHILD | WS_VISIBLE | WS_GROUP + GROUPBOX "Частота мерцания курсора", -1, 5, 160, 236, 50 + LTEXT "", IDC_TEXT_CURSOR_BLINK, 23, 180, 1, 8 + LTEXT "Ниже", -1, 45, 180, 30, 10 + LTEXT "Выше", -1, 205, 180, 30, 10 + CONTROL "",IDC_SLIDER_CURSOR_BLINK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 70, 180, 130, 17 END IDD_HARDWARE DIALOGEX 0, 0, 246, 228 @@ -32,17 +32,17 @@ FONT 8, "MS Shell Dlg" BEGIN END -IDD_CLICK_LOCK DIALOGEX 0, 0, 246, 100 +IDD_CLICK_LOCK DIALOGEX 0, 0, 234, 100 STYLE DS_SHELLFONT | WS_CAPTION | WS_SYSMENU CAPTION "Залипание клавиш" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "Короче", -1, 35, 50, 30, 10 - LTEXT "Длиннее", -1, 140, 50, 30, 10 - CONTROL "",IDC_SLIDER_CLICK_LOCK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 50, 70, 17 - PUSHBUTTON "&OK", IDOK, 120, 75, 50, 15 - PUSHBUTTON "&Отмена", IDCANCEL, 175, 75, 50, 15 - LTEXT "&Adjust how long you need to hold down a mouse or trackball button before your click is locked",-1,60,15,170,30 + LTEXT "Короче", -1, 60, 50, 30, 10 + LTEXT "Дольше", -1, 165, 50, 30, 10 + CONTROL "",IDC_SLIDER_CLICK_LOCK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 90, 50, 70, 17 + PUSHBUTTON "&OK", IDOK, 120, 79, 50, 15 + PUSHBUTTON "&Отмена", IDCANCEL, 177, 79, 50, 15 + LTEXT "&Выберите, как долго следует удерживать нажатой кнопку мыши или трекбола для того, чтобы сработало залипание.",-1,60,15,170,30 ICON IDI_LOOK_KEY, IDC_ICON_CLICK_LOCK, 15, 15, 15, 15 END @@ -51,20 +51,20 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION CAPTION "Кнопки мыши" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Конфигурация кнопок", -1, 5, 5, 230, 70 - CHECKBOX "&Обменять назначение кнопок", IDC_SWAP_MOUSE_BUTTONS, 10, 15, 140, 10 - CONTROL "", IDC_IMAGE_SWAP_MOUSE, "Static", SS_ICON | SS_CENTERIMAGE | WS_VISIBLE, 165, 15, 65, 57, WS_EX_STATICEDGE - LTEXT "Назначает правую кнопку для выполнения таких основных функций, как выбор и перетаскивание. Часто используется теми, кто работает мышью левой рукой.", -1, 10, 30, 150, 30 - GROUPBOX "Скорость выполнения двойного щелчка", -1, 5, 75, 230, 70 - LTEXT "Сделайте двойной щелчок по этому значку. Если папка не открывается или не закрывается, выберите более низкую скорость.", -1, 10, 85, 150, 30 - LTEXT "&Скорость: Ниже", -1, 10, 120, 90, 8 - LTEXT "Выше", -1, 140, 120, 30, 8 - CONTROL "",IDC_SLIDER_DOUBLE_CLICK_SPEED, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 67, 121, 70, 17 - CONTROL "", IDC_IMAGE_DOUBLE_CLICK_SPEED, "Static", SS_ICON | SS_NOTIFY | SS_CENTERIMAGE | WS_VISIBLE, 165, 85, 65, 57, WS_EX_STATICEDGE - GROUPBOX "Залипание кнопки мыши", -1, 5, 150, 230, 70 - CHECKBOX "&Включить залипание", IDC_CHECK_CLICK_LOCK, 10, 160, 84, 20 - PUSHBUTTON "&Параметры...", IDC_BUTTON_CLICK_LOCK, 170, 160, 55, 14 - LTEXT "Позволяет выполнять выделение и перетаскивание без удерживания кнопки нажатой. Для включения ненадолго задержите кнопку мыши в нажатом положении. Для освобождения снова сделайте щелчок.", -1, 10, 180, 200, 30 + GROUPBOX "Конфигурация кнопок", -1, 5, 5, 236, 70 + CHECKBOX "&Обменять назначение кнопок", IDC_SWAP_MOUSE_BUTTONS, 14, 17, 140, 10 + CONTROL "", IDC_IMAGE_SWAP_MOUSE, "Static", SS_ICON | SS_CENTERIMAGE | WS_VISIBLE, 176, 16, 58, 51, WS_EX_STATICEDGE + LTEXT "Назначает правую кнопку для выполнения таких основных функций, как выбор и перетаскивание. Часто используется теми, кто работает мышью левой рукой.", -1, 12, 30, 150, 38 + GROUPBOX "Скорость выполнения двойного щелчка", -1, 5, 79, 236, 70 + LTEXT "Сделайте двойной щелчок по этому значку. Если папка не открывается или не закрывается, выберите более низкую скорость.", -1, 12, 89, 160, 35 + LTEXT "&Скорость: Ниже", -1, 12, 124, 61, 10 + LTEXT "Выше", -1, 146, 124, 24, 10 + CONTROL "",IDC_SLIDER_DOUBLE_CLICK_SPEED, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 71, 125, 70, 17 + CONTROL "", IDC_IMAGE_DOUBLE_CLICK_SPEED, "Static", SS_ICON | SS_NOTIFY | SS_CENTERIMAGE | WS_VISIBLE, 176, 90, 58, 51, WS_EX_STATICEDGE + GROUPBOX "Залипание кнопки мыши", -1, 5, 153, 236, 70 + CHECKBOX "&Включить залипание", IDC_CHECK_CLICK_LOCK, 14, 164, 99, 17 + PUSHBUTTON "&Параметры...", IDC_BUTTON_CLICK_LOCK, 173, 165, 55, 14 + LTEXT "Позволяет выполнять выделение и перетаскивание без удерживания кнопки нажатой. Для включения ненадолго задержите кнопку мыши в нажатом положении. Для освобождения снова сделайте щелчок.", -1, 12, 183, 222, 36 END IDD_PAGE_POINTER DIALOGEX 0, 0, 246, 228 @@ -72,27 +72,27 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION CAPTION "Указатели" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Схема", -1, 5, 5, 170, 45 - COMBOBOX IDC_COMBO_CURSOR_SCHEME, 10, 15, 160, 200, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "Сохранить &как...", IDC_BUTTON_SAVEAS_SCHEME, 60, 30, 65, 15 - PUSHBUTTON "&Удалить", IDC_BUTTON_DELETE_SCHEME, 130, 30, 40, 15 - CONTROL "", IDC_IMAGE_CURRENT_CURSOR, "Static", SS_ICON | SS_CENTERIMAGE | WS_VISIBLE, 190, 9, 45, 41, WS_EX_STATICEDGE + GROUPBOX "Схема", -1, 5, 5, 183, 45 + COMBOBOX IDC_COMBO_CURSOR_SCHEME, 10, 15, 172, 200, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Сохранить &как...", IDC_BUTTON_SAVEAS_SCHEME, 58, 30, 70, 14 + PUSHBUTTON "&Удалить", IDC_BUTTON_DELETE_SCHEME, 132, 30, 50, 14 + CONTROL "", IDC_IMAGE_CURRENT_CURSOR, "Static", SS_ICON | SS_CENTERIMAGE | WS_VISIBLE, 195, 9, 45, 41, WS_EX_STATICEDGE LTEXT "&Настройка", -1, 5, 60, 40, 10 - LISTBOX IDC_LISTBOX_CURSOR, 5, 70, 230, 120, WS_VISIBLE | WS_BORDER | WS_TABSTOP | WS_VSCROLL | LBS_OWNERDRAWFIXED | LBS_NOTIFY - CHECKBOX "Включить &тень указателя", IDC_CHECK_DROP_SHADOW, 5, 203, 105, 10 - PUSHBUTTON "&По умолчанию", IDC_BUTTON_USE_DEFAULT_CURSOR, 115, 200, 60, 15 - PUSHBUTTON "&Обзор", IDC_BUTTON_BROWSE_CURSOR, 180, 200, 55, 15 + LISTBOX IDC_LISTBOX_CURSOR, 5, 70, 235, 125, WS_VISIBLE | WS_BORDER | WS_TABSTOP | WS_VSCROLL | LBS_OWNERDRAWFIXED | LBS_NOTIFY + CHECKBOX "Включить &тень указателя", IDC_CHECK_DROP_SHADOW, 5, 203, 108, 10 + PUSHBUTTON "&По умолчанию", IDC_BUTTON_USE_DEFAULT_CURSOR, 116, 200, 64, 14 + PUSHBUTTON "&Обзор", IDC_BUTTON_BROWSE_CURSOR, 185, 200, 55, 14 END -IDD_CURSOR_SCHEME_SAVEAS DIALOGEX 0, 0, 200, 75 +IDD_CURSOR_SCHEME_SAVEAS DIALOGEX 0, 0, 200, 65 STYLE DS_SHELLFONT | WS_CAPTION | WS_SYSMENU CAPTION "Сохранение схемы" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "Название сохраняемой схемы указателей мыши:", -1, 5, 5, 100, 10 - EDITTEXT IDC_EDIT_SCHEME_NAME, 5, 15, 180, 15, WS_CHILD | WS_VISIBLE | WS_GROUP - PUSHBUTTON "&OK", IDOK, 60, 45, 50, 15 - PUSHBUTTON "&Отмена", IDCANCEL, 115, 45, 50, 15 + LTEXT "Название сохраняемой схемы указателей мыши:", -1, 5, 5, 190, 10 + EDITTEXT IDC_EDIT_SCHEME_NAME, 5, 18, 190, 15, WS_CHILD | WS_VISIBLE | WS_GROUP + PUSHBUTTON "&OK", IDOK, 90, 45, 50, 15 + PUSHBUTTON "&Отмена", IDCANCEL, 145, 45, 50, 15 END @@ -101,28 +101,28 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION CAPTION "Параметры указателя" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Перемещение", -1, 5, 5, 230, 60 + GROUPBOX "Перемещение", -1, 5, 5, 236, 60 LTEXT "&Задайте скорость движение указателя:", -1, 60, 15, 150, 10 LTEXT "Ниже", -1, 60, 30, 20, 10 CONTROL "",IDC_SLIDER_MOUSE_SPEED, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 90, 30, 70, 17 LTEXT "Выше", -1, 170, 30, 20, 10 - ICON IDI_MOUSE_SPEED, IDC_ICON_MOUSE_SPEED, 15, 15, 15, 15 + ICON IDI_MOUSE_SPEED, IDC_ICON_MOUSE_SPEED, 15, 18, 15, 15 CHECKBOX "&Включить повышенную точность установки указателя", IDC_CHECK_POINTER_PRECISION, 20, 50, 205, 10 - GROUPBOX "Исходное положение в диалоговом окне", -1, 5, 65, 230, 40 + GROUPBOX "Исходное положение в диалоговом окне", -1, 5, 71, 236, 42 CHECKBOX "&На кнопке, выбираемой по умолчанию", - IDC_CHECK_SNAP_TO, 40, 82, 170, 20, BS_MULTILINE | BS_TOP - ICON IDI_MOUSE_BUTTON, IDC_ICON_SNAP_TO, 15, 75, 15, 15 - GROUPBOX "Видимость", -1, 5, 105, 230, 95 - CHECKBOX "&Отображать след указателя мыши", IDC_CHECK_POINTER_TRAIL, 40, 115, 135, 10 - LTEXT "Короче", IDC_TEXT_TRAIL_SHORT, 54, 130, 30, 10 - LTEXT "Длиннее", IDC_TEXT_TRAIL_LONG, 160, 130, 30, 10 - ICON IDI_MOUSE_TRAILS, IDC_ICON_POINTER_TRAIL, 15, 115, 15, 15 - CONTROL "", IDC_SLIDER_POINTER_TRAIL ,"msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 82, 130, 70, 17 - CHECKBOX "&Скрывать указатель во время ввода с клавиатуры", IDC_CHECK_HIDE_POINTER, 40, 150, 190, 20 - ICON IDI_MOUSE_SPEED, IDC_ICON_HIDE_POINTER, 15, 145, 15, 15 + IDC_CHECK_SNAP_TO, 44, 88, 170, 20, BS_MULTILINE | BS_TOP + ICON IDI_MOUSE_BUTTON, IDC_ICON_SNAP_TO, 15, 83, 15, 15 + GROUPBOX "Видимость", -1, 5, 118, 236, 104 + CHECKBOX "&Отображать след указателя мыши", IDC_CHECK_POINTER_TRAIL, 44, 135, 135, 10 + LTEXT "Короче", IDC_TEXT_TRAIL_SHORT, 54, 149, 30, 10 + LTEXT "Длиннее", IDC_TEXT_TRAIL_LONG, 160, 149, 30, 10 + ICON IDI_MOUSE_TRAILS, IDC_ICON_POINTER_TRAIL, 15, 134, 15, 15 + CONTROL "", IDC_SLIDER_POINTER_TRAIL ,"msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 82, 146, 70, 17 + CHECKBOX "&Скрывать указатель во время ввода с клавиатуры", IDC_CHECK_HIDE_POINTER, 44, 164, 190, 20 + ICON IDI_MOUSE_SPEED, IDC_ICON_HIDE_POINTER, 15, 167, 15, 15 CHECKBOX "Обозначать поло&жение указателя при нажатии CTRL", - IDC_CHECK_SHOW_POINTER, 40, 175, 170, 20, BS_MULTILINE | BS_TOP - ICON IDI_MOUSE_POINTER, IDC_ICON_SHOW_POINTER, 15, 170, 15, 15 + IDC_CHECK_SHOW_POINTER, 44, 197, 186, 20, BS_MULTILINE | BS_TOP + ICON IDI_MOUSE_POINTER, IDC_ICON_SHOW_POINTER, 15, 194, 15, 15 END IDD_PAGE_WHEEL DIALOGEX 0, 0, 246, 228 @@ -130,9 +130,9 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION CAPTION "Колесико" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Прокрутка", -1, 5, 5, 230, 80 - ICON IDI_MOUSE_WHEEL, IDC_ICON_WHEEL, 20, 20, 32, 32 - LTEXT "Поворот колесика на один щелчок служит для прокрутки:", -1, 20, 15, 212, 10 + GROUPBOX "Прокрутка", -1, 5, 5, 236, 80 + ICON IDI_MOUSE_WHEEL, IDC_ICON_WHEEL, 20, 28, 32, 32 + LTEXT "Поворот колесика на один щелчок служит для прокрутки:", -1, 20, 17, 212, 10 RADIOBUTTON "на указанное количество &строк:", IDC_RADIO_WHEEL_SCROLL_LINES, 60, 30, 150, 10, WS_VISIBLE | WS_GROUP | WS_TABSTOP RADIOBUTTON "на один &экран", IDC_RADIO_WHEEL_SCROLL_PAGE, 60, 65, 90, 10 EDITTEXT IDC_EDIT_WHEEL_SCROLL_LINES, 70, 45, 56, 12, ES_RIGHT | WS_VISIBLE | WS_GROUP | WS_TABSTOP diff --git a/reactos/dll/cpl/main/rsrc.rc b/reactos/dll/cpl/main/rsrc.rc index 96328a4e537..81ecdd62b45 100644 --- a/reactos/dll/cpl/main/rsrc.rc +++ b/reactos/dll/cpl/main/rsrc.rc @@ -13,6 +13,7 @@ #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/nl-NL.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/cpl/mmsys/lang/no-NO.rc b/reactos/dll/cpl/mmsys/lang/no-NO.rc new file mode 100644 index 00000000000..c184c394d22 --- /dev/null +++ b/reactos/dll/cpl/mmsys/lang/no-NO.rc @@ -0,0 +1,267 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_VOLUME DIALOGEX 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Volum" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_CPLICON, IDI_CPLICON, 8,5,32,32 + LTEXT "",IDC_DEVICE_NAME,40,10,194,36 + GROUPBOX "Enhets volum", -1, 7,30,230,100 + CONTROL "", IDC_MUTE_ICON, "Static", SS_ICON | WS_VISIBLE,17,45,32,32 + CONTROL "",IDC_VOLUME_TRACKBAR, "msctls_trackbar32", TBS_AUTOTICKS | TBS_ENABLESELRANGE | TBS_BOTTOM | TBS_HORZ | WS_TABSTOP, 65, 45, 140, 14 + LTEXT "Lavt",-1,62,66,30,17 + LTEXT "Hшyt",-1,195,66,30,17 + CHECKBOX "&Demp", IDC_MUTE_CHECKBOX, 50, 78, 140, 10 + CHECKBOX "Plasser volum &ikon i oppgavelinjen", IDC_ICON_IN_TASKBAR, 50, 92, 140, 10 + PUSHBUTTON "A&vansert...", IDC_ADVANCED_BTN, 150,105,75,15 + GROUPBOX "Hшytaller innstilling", IDC_SPEAKER_SET_BTN, 7,140,230,80 + CONTROL "", IDC_SPEAKIMG, "Static", SS_OWNERDRAW, 4, 160, 70, 70 + LTEXT "Bruk innstillingen under for е endre individuell hшytaller volum og andre innstillinger.",-1,70,155,150,36 + PUSHBUTTON "&Hшytaller Volum...", IDC_SPEAKER_VOL_BTN, 70,195,75,15 + PUSHBUTTON "A&vansert...", IDC_ADVANCED2_BTN, 150,195,75,15 +END + +IDD_SOUNDS DIALOGEX 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Lyder" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Et lydoppsett er et sett med lyder som tilordnes hendelser i ReactOS og programmer. Du kan velge et eksisterende oppsett eller lagre et du har endret pе.",-1,8,7,230,40 + LTEXT "Lydo&ppsett :",-1,8,42,150,17 + COMBOBOX IDC_SOUND_SCHEME, 8, 53, 230, 46, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Lag&re som...", IDC_SAVEAS_BTN, 134,70,50,15 + PUSHBUTTON "&Slett", IDC_DELETE_BTN, 188,70,50,15 + LTEXT "Hvis du vil endre lyder, klikker du pе en programhendelse i listen nedenfor, og velger deretter en lyd som skal brukes. Du kan lagre endringer som et nytt lydoppsett.",-1,8,90,230,40 + LTEXT "&Programhendelser:",-1,8,118,150,17 + CONTROL "", IDC_SCHEME_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | WS_BORDER | WS_TABSTOP, 8, 130, 230, 60, WS_EX_CLIENTEDGE + LTEXT "&Lyder:",IDC_TEXT_SOUND,8,194,80,17, WS_DISABLED + COMBOBOX IDC_SOUND_LIST, 8, 205, 155, 146, CBS_DROPDOWNLIST | CBS_DISABLENOSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | WS_DISABLED + PUSHBUTTON "", IDC_PLAY_SOUND, 168,205,15,15, WS_DISABLED | BS_ICON + PUSHBUTTON "&Bla gjennom...", IDC_BROWSE_SOUND, 188,205,50,15, WS_DISABLED +END + +IDD_AUDIO DIALOGEX 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Avspilling" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Lyd avspilling", -1, 7,7,230,60 + ICON IDI_CPLICON, IDI_CPLICON, 15,20,32,32 + LTEXT "&Standard enhet:",-1,50,20,80,17 + COMBOBOX IDC_DEVICE_PLAY_LIST, 50, 30, 180, 46, CBS_DROPDOWNLIST + PUSHBUTTON "&Volum...", IDC_VOLUME1_BTN, 85,47,70,15 + PUSHBUTTON "Ava&nsert...", IDC_ADV2_BTN, 160,47,70,15 + GROUPBOX "Lyd opptak", -1, 7,75,230,60 + ICON IDI_MICROPHONE_ICON, IDI_MICROPHONE_ICON, 15,88,32,32 + LTEXT "S&tandard enhet:",-1,50,88,80,17 + COMBOBOX IDC_DEVICE_REC_LIST, 50, 98, 180, 46, CBS_DROPDOWNLIST + PUSHBUTTON "V&olum...", IDC_VOLUME2_BTN, 85,115,70,15 + PUSHBUTTON "Avan&sert...", IDC_ADV1_BTN, 160,115,70,15 + GROUPBOX "MIDI musikk avspilling", -1, 7,145,230,60 + ICON IDI_CPLICON, IDI_CPLICON, 15,158,32,32 + LTEXT "St&andard enhet:",-1,50,158,80,17 + COMBOBOX IDC_DEVICE_MIDI_LIST, 50, 168, 180, 46, CBS_DROPDOWNLIST + PUSHBUTTON "Volu&m...", IDC_VOLUME3_BTN, 85,185,70,15 + PUSHBUTTON "O&m...", IDC_ADV3_BTN, 160,185,70,15 + CHECKBOX "&Bruk bare standard enheter", IDC_DEFAULT_DEV_CHECKBOX, 7, 212, 140, 10 +END + +IDD_VOICE DIALOGEX 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Stemme" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Disse innstillingene kontrollerer volumet og avansert valg for stemme avspilling eller opptak enhet som du valgte.",-1,8,7,230,40 + GROUPBOX "Stemme avspilling", -1, 7,37,230,60 + ICON IDI_CPLICON, IDI_CPLICON, 15,50,32,32 + LTEXT "&Standard enhet:",-1,50,50,80,17 + COMBOBOX IDC_DEVICE_VOICE_LIST, 50, 60, 180, 46, CBS_DROPDOWNLIST + PUSHBUTTON "&Volum...", IDC_VOLUME4_BTN, 85,77,70,15 + PUSHBUTTON "Ava&nsert...", IDC_ADV4_BTN, 160,77,70,15 + GROUPBOX "Stemme opptak", -1, 7,105,230,60 + ICON IDI_MICROPHONE_ICON, IDI_MICROPHONE_ICON, 15,118,32,32 + LTEXT "S&tandard enhet:",-1,50,118,80,17 + COMBOBOX IDC_DEVICE_VOICE_REC_LIST, 50, 128, 180, 46, CBS_DROPDOWNLIST + PUSHBUTTON "V&olum...", IDC_VOLUME5_BTN, 85,145,70,15 + PUSHBUTTON "Avan&sert...", IDC_ADV5_BTN, 160,145,70,15 + PUSHBUTTON "&Test maskinvare...", IDC_TEST_HARDWARE, 160,175,70,15 +END + +IDD_HARDWARE DIALOGEX 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Maskinvare" +FONT 8, "MS Shell Dlg" +BEGIN + +END + +IDD_SAVE_SCHEME_AS DIALOG 9, 23, 225, 54 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Lagre Scheme som" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Lagre denne lyd scheme som:", -1, 7, 7, 212, 9 + EDITTEXT 8960, 7, 17, 211, 14, ES_AUTOHSCROLL + DEFPUSHBUTTON "OK", IDOK, 93, 36, 60, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 157, 36, 60, 14 +END + +IDD_SPEAKERS DIALOG 0, 0, 257, 204 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hшytaller" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 4379, -1, 7, 8, 20, 20 + LTEXT "Velg hшytaller oppsett som det mest likt oppsett som du har pе din datamaskin.", -1, 36, 8, 215, 27 + CONTROL 110, 5376, "STATIC", SS_BITMAP | SS_CENTERIMAGE, 37, 40, 209, 112, WS_EX_TRANSPARENT + LTEXT "H&шytaller oppsett:", 8502, 53, 169, 55, 10 + COMBOBOX 5401, 52, 182, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP +END + +IDD_PERFORMANCE1 DIALOG 0, 0, 257, 218 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Ytelse" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Disse innstillingene kontrollere hvordan ReactOS spiller lyd. Denne kan hjelpe deg med е feilsшke lyd-relatert problemer.", 8492, 34, 7, 218, 23 + GROUPBOX "Lyd avspilling", 8494, 7, 32, 243, 152 + ICON 4379, 8512, 8, 8, 20, 20 + LTEXT "&Maskinvare akselerasjon:", 8495, 13, 56, 111, 14 + CONTROL "Slider1", 5395, "MSCTLS_TRACKBAR32", WS_GROUP | WS_TABSTOP | 0x00000401, 150, 54, 62, 18 + LTEXT "&Sample rate conversion quality:", 8496, 13, 123, 103, 14 + CONTROL "Slider1", 5396, "MSCTLS_TRACKBAR32", WS_TABSTOP | 0x00000401, 150, 121, 62, 18 + PUSHBUTTON "&Gjenopprett standard", 5400, 7, 191, 110, 14 + LTEXT "Ingen", 8497, 128, 56, 21, 10 + LTEXT "Full", 8498, 214, 56, 21, 9 + LTEXT "Bra", 8499, 128, 123, 21, 10 + LTEXT "Best", 8500, 214, 123, 23, 9 + LTEXT "This string describes the hardware setting for the capture device", 5399, 13, 145, 227, 21 + LTEXT "This string describes the hardware setting for the render device", 5398, 13, 78, 227, 22 +END + +IDD_PERFORMANCE2 DIALOG 0, 0, 257, 218 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Ytelse" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "These settings control how ReactOS records audio. They can help you troubleshoot audio-related problems.", 8492, 34, 7, 217, 20 + GROUPBOX "Lyd opptak", 8494, 7, 29, 242, 122 + ICON 4380, 8512, 8, 7, 20, 20 + LTEXT "&Maskinvare akselerasjon:", 8495, 13, 46, 103, 17 + CONTROL "Slider1", 5395, "MSCTLS_TRACKBAR32", WS_GROUP | WS_TABSTOP | 0x00000401, 150, 43, 62, 18 + LTEXT "&Sample rate conversion quality:", 8496, 13, 103, 103, 17 + CONTROL "Slider1", 5396, "MSCTLS_TRACKBAR32", WS_TABSTOP | 0x00000401, 150, 101, 62, 18 + PUSHBUTTON "&Gjenopprett standard", 5400, 9, 158, 110, 14 + LTEXT "Ingen", 8497, 125, 46, 24, 10 + LTEXT "Full", 8498, 217, 46, 19, 9 + LTEXT "Bra", 8499, 125, 103, 24, 10 + LTEXT "Best", 8500, 217, 103, 19, 9 + LTEXT "This string describes the hardware setting for the capture device", 5399, 13, 125, 222, 21 + LTEXT "This string describes the hardware setting for the render device", 5398, 13, 68, 218, 24 +END + +IDD_SETUP1 DIALOG 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Oppsett" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "ReactOS lyd", 10243, 7, 5, 213, 192 + ICON 4393, 10241, 26, 26, 20, 20 + LTEXT "This computer cannot play audio because the ReactOS Audio service is not enabled.", 10245, 60, 25, 150, 40 + AUTOCHECKBOX "&Aktiverer ReactOS lyd", 10253, 60, 68, 150, 9 + LTEXT "Notater", 10246, 58, 87, 150, 11 + LTEXT "1. You must be an administrator to enable this service. If you are not logged on as administrator, you will be prompted for an administrator name and password.", 10247, 60, 100, 150, 40 + LTEXT "2. After you enable ReactOS Audio you will have to restart the computer.", 10248, 60, 140, 150, 40 +END + +IDD_MULTICHANNEL DIALOG 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Flere kanaler" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Beskrivelse fеr du her.", 9506, 8, 4, 212, 24 + LTEXT "Lav", 9473, 65, 31, 14, 8 + LTEXT "", 9472, 5, 31, 55, 8 + CONTROL "Slider1", 9475, "MSCTLS_TRACKBAR32", WS_TABSTOP | 0x00000401, 87, 29, 108, 17 + LTEXT "Hшyt", 9474, 202, 31, 17, 8 + LTEXT "Lav", 9477, 65, 50, 14, 8 + LTEXT "", 9476, 5, 50, 55, 8 + CONTROL "Slider1", 9479, "MSCTLS_TRACKBAR32", WS_TABSTOP | 0x00000401, 87, 48, 108, 17 + LTEXT "Hшyt", 9478, 202, 50, 17, 8 + LTEXT "Lav", 9481, 65, 69, 14, 8 + LTEXT "", 9480, 5, 69, 55, 8 + CONTROL "Slider1", 9483, "MSCTLS_TRACKBAR32", WS_TABSTOP | 0x00000401, 87, 67, 108, 17 + LTEXT "Hшyt", 9482, 202, 69, 17, 8 + LTEXT "Lav", 9485, 65, 88, 14, 8 + LTEXT "", 9484, 5, 88, 55, 8 + CONTROL "Slider1", 9487, "MSCTLS_TRACKBAR32", WS_TABSTOP | 0x00000401, 87, 86, 108, 17 + LTEXT "Hшyt", 9486, 202, 88, 17, 8 + LTEXT "Lav", 9489, 65, 107, 14, 8 + LTEXT "", 9488, 5, 107, 55, 8 + CONTROL "Slider1", 9491, "MSCTLS_TRACKBAR32", WS_TABSTOP | 0x00000401, 87, 105, 108, 17 + LTEXT "Hшyt", 9490, 202, 107, 17, 8 + LTEXT "Lav", 9493, 65, 126, 14, 8 + LTEXT "", 9492, 5, 126, 55, 8 + CONTROL "Slider1", 9495, "MSCTLS_TRACKBAR32", WS_TABSTOP | 0x00000401, 87, 124, 108, 17 + LTEXT "Hшyt", 9494, 202, 126, 17, 8 + LTEXT "Lav", 9497, 65, 145, 14, 8 + LTEXT "", 9496, 5, 145, 55, 8 + CONTROL "Slider1", 9499, "MSCTLS_TRACKBAR32", WS_TABSTOP | 0x00000401, 87, 143, 108, 17 + LTEXT "Hшyt", 9498, 202, 145, 17, 8 + LTEXT "Lav", 9501, 65, 164, 14, 8 + LTEXT "", 9500, 5, 164, 55, 8 + CONTROL "Slider1", 9503, "MSCTLS_TRACKBAR32", WS_TABSTOP | 0x00000401, 87, 162, 108, 17 + LTEXT "Hшyt", 9502, 202, 164, 17, 8 + AUTOCHECKBOX "&Move all slide indicators at the same time", 9504, 5, 185, 216, 9 + PUSHBUTTON "Gjenopprett &standard", 9505, 110, 199, 110, 14 +END + +IDD_SETUP2 DIALOG 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Oppsett" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "ReactOS lyd", 10259, 7, 5, 213, 192 + ICON 4394, 10257, 25, 25, 20, 20 + LTEXT "The ReactOS Audio service is now enabled. However, audio may not function properly until you restart ReactOS. If you want to restart now, first save your work and close all programs.", 10261, 60, 25, 150, 50 + LTEXT "For е starte ReactOS pе nytt, trykk pе OK.", 10262, 60, 75, 150, 20 + LTEXT "Hvis du trykker avbryt, vil du trenge е starte pе nytt senere for at ReactOS lyd skal fungere riktig.", 10263, 60, 100, 150, 40 +END + +STRINGTABLE +BEGIN + IDS_CPLNAME "Lyder og lydenheter" + IDS_CPLDESCRIPTION "Changes the sound scheme for your computer, or configure the settings for your speakers and recording devices." + IDS_NO_SOUND "(Ingen)" + + 5825 "Program feil" + 5826 "Avslutt program" + 5827 "Kritisk batteri Alarm" + 5828 "Enhet tilkoblet" + 5829 "Enhet frakoblet" + 5830 "Enhet misslykkes е koble seg til" + 5831 "Tшm papirkurven" + 5832 "Svakt batteri alarm" + 5833 "Maksimere" + 5834 "Meny kommando" + 5835 "Meny popup" + 5836 "Minimere" + 5837 "Ny e-post beskjed" + 5838 "Start navigasjon" + 5839 "Еpne program" + 5840 "Utskrift fullfшrt" + 5841 "Restore Down" + 5842 "Restore Up" + 5843 "Asterisk" + 5844 "Standard lyd" + 5845 "Exclamation" + 5846 "Avslutt ReactOS" + 5847 "Kritisk Stopp" + 5848 "System Notification" + 5849 "Spшrsmеl" + 5850 "Start ReactOS" + 5851 "Start Meny" + 5852 "ReactOS Logg av" + 5853 "ReactOS Logg pе" +END diff --git a/reactos/dll/cpl/mmsys/mmsys.c b/reactos/dll/cpl/mmsys/mmsys.c index 39bb685ba3e..61c10d460ca 100644 --- a/reactos/dll/cpl/mmsys/mmsys.c +++ b/reactos/dll/cpl/mmsys/mmsys.c @@ -76,7 +76,7 @@ ShowDriverSettingsAfterForkW(HWND hwnd, VOID WINAPI ShowDriverSettingsAfterForkA(HWND hwnd, HINSTANCE hInstance, - LPTSTR lpszCmd, + LPSTR lpszCmd, int nCmdShow) { DPRINT1("ShowDriverSettingsAfterForkA() stubs\n"); @@ -85,7 +85,7 @@ ShowDriverSettingsAfterForkA(HWND hwnd, VOID WINAPI ShowDriverSettingsAfterFork(HWND hwnd, HINSTANCE hInstance, - LPTSTR lpszCmd, + LPSTR lpszCmd, int nCmdShow) { DPRINT1("ShowDriverSettingsAfterFork() stubs\n"); @@ -93,9 +93,9 @@ ShowDriverSettingsAfterFork(HWND hwnd, BOOL WINAPI ShowMMCPLPropertySheet(HWND hwnd, - LPCTSTR pszPropSheet, - LPTSTR pszName, - LPTSTR pszCaption) + LPCSTR pszPropSheet, + LPSTR pszName, + LPSTR pszCaption) { DPRINT1("ShowMMCPLPropertySheet() stubs\n"); return TRUE; @@ -122,7 +122,7 @@ mmseRunOnceW(HWND hwnd, VOID WINAPI mmseRunOnceA(HWND hwnd, HINSTANCE hInstance, - LPTSTR lpszCmd, + LPSTR lpszCmd, int nCmdShow) { DPRINT1("mmseRunOnceA() stubs\n"); @@ -149,7 +149,7 @@ MediaPropPageProvider(LPVOID Info, VOID WINAPI ShowFullControlPanel(HWND hwnd, HINSTANCE hInstance, - LPTSTR lpszCmd, + LPSTR lpszCmd, int nCmdShow) { DPRINT1("ShowFullControlPanel() stubs\n"); diff --git a/reactos/dll/cpl/mmsys/mmsys.def b/reactos/dll/cpl/mmsys/mmsys.def deleted file mode 100644 index 697ce75f71b..00000000000 --- a/reactos/dll/cpl/mmsys/mmsys.def +++ /dev/null @@ -1,20 +0,0 @@ -LIBRARY mmsys.cpl - -EXPORTS -CPlApplet@16 -mmseRunOnce -mmseRunOnceW -mmseRunOnceA -ShowMMCPLPropertySheet -ShowAudioPropertySheet -DllCanUnloadNow -DllGetClassObject -ShowDriverSettingsAfterFork -ShowDriverSettingsAfterForkW -ShowDriverSettingsAfterForkA -MediaClassInstaller@12 -MediaPropPageProvider -;Multichannel -ShowFullControlPanel - -; EOF diff --git a/reactos/dll/cpl/mmsys/mmsys.rbuild b/reactos/dll/cpl/mmsys/mmsys.rbuild index 647c5bb230e..80d234d1332 100644 --- a/reactos/dll/cpl/mmsys/mmsys.rbuild +++ b/reactos/dll/cpl/mmsys/mmsys.rbuild @@ -1,7 +1,7 @@ - + . 0x600 0x501 @@ -21,4 +21,5 @@ audio.c voice.c mmsys.rc + mmsys.spec diff --git a/reactos/dll/cpl/mmsys/mmsys.spec b/reactos/dll/cpl/mmsys/mmsys.spec new file mode 100644 index 00000000000..bcdbd159e2a --- /dev/null +++ b/reactos/dll/cpl/mmsys/mmsys.spec @@ -0,0 +1,15 @@ +@ stdcall CPlApplet(ptr long ptr ptr) +@ stdcall mmseRunOnce(ptr ptr str long) +@ stdcall mmseRunOnceW(ptr ptr wstr long) +@ stdcall mmseRunOnceA(ptr ptr str long) +@ stdcall ShowMMCPLPropertySheet(ptr str str str) +@ stdcall ShowAudioPropertySheet(ptr ptr str long) +@ stdcall DllCanUnloadNow() +@ stdcall DllGetClassObject(ptr ptr ptr) +@ stdcall ShowDriverSettingsAfterFork(ptr ptr str long) +@ stdcall ShowDriverSettingsAfterForkW(ptr ptr wstr long) +@ stdcall ShowDriverSettingsAfterForkA(ptr ptr str long) +@ stdcall MediaClassInstaller(long ptr ptr) +@ stdcall MediaPropPageProvider(ptr ptr ptr) +;Multichannel +@ stdcall ShowFullControlPanel(ptr ptr str long) diff --git a/reactos/dll/cpl/mmsys/rsrc.rc b/reactos/dll/cpl/mmsys/rsrc.rc index 8ded3698b79..7ebf3c612f3 100644 --- a/reactos/dll/cpl/mmsys/rsrc.rc +++ b/reactos/dll/cpl/mmsys/rsrc.rc @@ -11,6 +11,7 @@ #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/nl-NL.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" #include "lang/ru-RU.rc" diff --git a/reactos/dll/cpl/ncpa/lang/cs-CZ.rc b/reactos/dll/cpl/ncpa/lang/cs-CZ.rc index bfc5277f6b8..36ad7829e1c 100644 --- a/reactos/dll/cpl/ncpa/lang/cs-CZ.rc +++ b/reactos/dll/cpl/ncpa/lang/cs-CZ.rc @@ -1,3 +1,9 @@ +/* FILE: dll/cpl/ncpa/lang/cs-CZ.rc + * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) + * THANKS TO: potapnik, who translated major part of this file + * UPDATED: 2008-07-27 + */ + LANGUAGE LANG_CZECH, SUBLANG_DEFAULT IDD_PROPPAGENETWORK DIALOGEX DISCARDABLE 0, 0, 246, 228 @@ -37,7 +43,7 @@ CAPTION "Obecn FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Spojenн", -1, 9, 8, 182, 58, BS_GROUPBOX - LTEXT "Status:", -1, 19, 20, 60, 8 + LTEXT "Stav:", -1, 19, 20, 60, 8 LTEXT "Doba pшipojenн:", -1, 19, 34, 60, 8 LTEXT "Rychlost:", -1, 19, 48, 60, 8 GROUPBOX "Aktivita", -1, 9, 74, 182, 70, BS_GROUPBOX @@ -46,7 +52,7 @@ BEGIN ICON IDI_NETSTAT, -1, 110, 85, 18, 20 ICON IDI_HORIZONTAL, -1, 130, 85, 18, 20 LTEXT "Pшijato", -1, 149, 90, 37, 8 - LTEXT "Bytes:", -1, 17, 115, 32, 8 + LTEXT "Bytщ:", -1, 17, 115, 32, 8 RTEXT "000.000.000", IDC_SEND, 63, 115, 44, 8 ICON IDI_VERTICAL, -1, 110, 108, 18, 20 RTEXT "000.000.000", IDC_RECEIVED, 139, 115, 44, 8 @@ -59,21 +65,21 @@ END IDD_CARDSUPPORT DIALOGEX DISCARDABLE 0, 0, 200,180 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Support" +CAPTION "Podpora" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Connection Status", -1, 9, 8, 200, 88, BS_GROUPBOX - LTEXT "Address type:", -1, 22, 20, 80, 8 - LTEXT "IP address:", -1, 22, 34, 80, 8 - LTEXT "SubNet mask:", -1, 22, 48, 80, 8 - LTEXT "Default gateway:", -1, 22, 62, 80, 8 + GROUPBOX "Stav pшipojenн", -1, 9, 8, 200, 88, BS_GROUPBOX + LTEXT "Typ adresy:", -1, 22, 20, 80, 8 + LTEXT "IP adresa:", -1, 22, 34, 80, 8 + LTEXT "Maska podsнtм:", -1, 22, 48, 80, 8 + LTEXT "Vэchozн brбna:", -1, 22, 62, 80, 8 RTEXT "N/A", IDC_DETAILSTYPE, 122, 20, 80, 8 RTEXT "000.000.000.000", IDC_DETAILSIP, 122, 34, 80, 8 RTEXT "000.000.000.000", IDC_DETAILSSUBNET, 122, 48, 80, 8 RTEXT "000.000.000.000", IDC_DETAILSGATEWAY, 122, 62, 80, 8 - PUSHBUTTON "&Details...", IDC_DETAILS, 22, 76, 62, 14 + PUSHBUTTON "&Detaily...", IDC_DETAILS, 22, 76, 62, 14 END IDD_TCPIPPROPERTIES DIALOGEX DISCARDABLE 0, 0, 246, 228 @@ -110,26 +116,26 @@ END STRINGTABLE BEGIN - IDS_ASSIGNED_DHCP "Assigned by DHCP" - IDS_ASSIGNED_MANUAL "Manually configured" + IDS_ASSIGNED_DHCP "Pшiшazeno DHCP" + IDS_ASSIGNED_MANUAL "Ruиnм nastaveno" END STRINGTABLE BEGIN - IDS_ERROR "Error" - IDS_ENTER_VALID_IPADDRESS "You must enter a valid IP address" - IDS_ENTER_VALID_SUBNET "You must enter a valid subnet mask" - IDS_CANNOT_LOAD_CONFIG "Unable to load current config data" - IDS_CANNOT_CREATE_PROPSHEET "Unable to create property sheet" - IDS_OUT_OF_MEMORY "Out of memory" - IDS_CANNOT_SAVE_CHANGES "Unable to save the changes you made" - IDS_STATUS_NON_OPERATIONAL "Non-operational" - IDS_STATUS_UNREACHABLE "No WAN adapter found" - IDS_STATUS_DISCONNECTED "Disconnected" - IDS_STATUS_CONNECTING "Connecting" - IDS_STATUS_CONNECTED "Connected" - IDS_STATUS_OPERATIONAL "Connected" + IDS_ERROR "Chyba" + IDS_ENTER_VALID_IPADDRESS "Je nutnй zadat platnou IP adresu" + IDS_ENTER_VALID_SUBNET "Je nutnй zadat platnou masku podsнtм" + IDS_CANNOT_LOAD_CONFIG "Nelze naинst souиasnй nastavenн" + IDS_CANNOT_CREATE_PROPSHEET "Nelze vytvoшit list vlastnostн" + IDS_OUT_OF_MEMORY "Nedostatek pamмti" + IDS_CANNOT_SAVE_CHANGES "Nelze uloћit provedenй zmмny" + IDS_STATUS_NON_OPERATIONAL "Nefunkиnн" + IDS_STATUS_UNREACHABLE "Nebyl nalezen WAN adaptйr" + IDS_STATUS_DISCONNECTED "Odpojeno" + IDS_STATUS_CONNECTING "Pшipojuji" + IDS_STATUS_CONNECTED "Pшipojeno" + IDS_STATUS_OPERATIONAL "Pшipojeno" IDS_SPEED_MBPS "%d Mbps" - IDS_DURATION_DAY "%d day %s" - IDS_DURATION_DAYS "%d days %s" + IDS_DURATION_DAY "%d den %s" + IDS_DURATION_DAYS "%d dnщ %s" END diff --git a/reactos/dll/cpl/ncpa/lang/nb-NO.rc b/reactos/dll/cpl/ncpa/lang/nb-NO.rc deleted file mode 100644 index d28a79f9f49..00000000000 --- a/reactos/dll/cpl/ncpa/lang/nb-NO.rc +++ /dev/null @@ -1,134 +0,0 @@ -LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL - -IDD_PROPPAGENETWORK DIALOGEX DISCARDABLE 0, 0, 246, 228 -STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Egenskaper for Nettverk" -FONT 8, "MS Shell Dlg" -BEGIN - LTEXT "Network Adapters",-1,9,9,217,8 - LISTBOX IDC_NETCARDLIST,9,21,229,73,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "&Add",IDC_ADD,9,100,60,14 - PUSHBUTTON "&Remove",IDC_REMOVE,72,100,60,14 - PUSHBUTTON "&Properties",IDC_PROPERTIES,179,100,60,14 -END - -IDD_NETPROPERTIES DIALOGEX DISCARDABLE 0, 0, 246, 228 -STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "General" -FONT 8, "MS Shell Dlg" -BEGIN - LTEXT "Connect Using:", -1, 9,9,217,8 - EDITTEXT IDC_NETCARDNAME, 9, 21, 230, 12, WS_DISABLED | WS_BORDER | WS_TABSTOP - PUSHBUTTON "&Configure", IDC_CONFIGURE, 189, 38, 50, 14 - LTEXT "Components checked are used by this connection:", -1, 9, 59, 217, 8 - LISTBOX IDC_COMPONENTSLIST, 9, 71, 230, 55, LBS_NOTIFY | WS_VSCROLL | WS_BORDER | LBS_NOINTEGRALHEIGHT - PUSHBUTTON "&Install", IDC_INSTALL, 9, 130, 65, 14, WS_DISABLED | WS_TABSTOP - PUSHBUTTON "&Uninstall", IDC_UNINSTALL, 90, 130, 65, 14, WS_DISABLED | WS_TABSTOP - PUSHBUTTON "&Properties", IDC_PROPERTIES, 174, 130, 65, 14 - GROUPBOX "Description", -1, 9, 153, 230, 46, BS_GROUPBOX - LTEXT "Component Description goes here...", IDC_DESCRIPTION, 15, 165, 217, 28, WS_GROUP - CHECKBOX "Show Icon in taskbar when connected", IDC_SHOWTASKBAR, 9, 206, 230, 12, BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP -END - - -IDD_CARDPROPERTIES DIALOGEX DISCARDABLE 0, 0, 200,180 -STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "General" -FONT 8, "MS Shell Dlg" -BEGIN - GROUPBOX "Connection", -1, 9, 8, 182, 58, BS_GROUPBOX - LTEXT "Status:", -1, 19, 20, 60, 8 - LTEXT "Duration:", -1, 19, 34, 60, 8 - LTEXT "Speed:", -1, 19, 48, 60, 8 - GROUPBOX "Activity", -1, 9, 74, 182, 70, BS_GROUPBOX - RTEXT "Sent", -1, 26, 90, 60, 8 - ICON IDI_HORIZONTAL, -1, 90, 85, 18, 20 - ICON IDI_NETSTAT, -1, 110, 85, 18, 20 - ICON IDI_HORIZONTAL, -1, 130, 85, 18, 20 - LTEXT "Received", -1, 149, 90, 37, 8 - LTEXT "Bytes:", -1, 17, 115, 32, 8 - RTEXT "000.000.000", IDC_SEND, 63, 115, 44, 8 - ICON IDI_VERTICAL, -1, 110, 108, 18, 20 - RTEXT "000.000.000", IDC_RECEIVED, 139, 115, 44, 8 - PUSHBUTTON "&Properties", IDC_PROPERTIES, 10, 150, 50, 14 - PUSHBUTTON "&Disable", IDC_ENDISABLE, 66, 150, 50, 14 - RTEXT "",IDC_STATUS,83,20,98,8 - RTEXT "",IDC_DURATION,83,34,98,8 - RTEXT "",IDC_SPEED,83,48,98,8 -END - -IDD_CARDSUPPORT DIALOGEX DISCARDABLE 0, 0, 200,180 -STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Support" -FONT 8, "MS Shell Dlg" -BEGIN - GROUPBOX "Connection Status", -1, 9, 8, 200, 88, BS_GROUPBOX - LTEXT "Adressetype:", -1, 22, 20, 80, 8 - LTEXT "IP adresse:", -1, 22, 34, 80, 8 - LTEXT "Subnet maske:", -1, 22, 48, 80, 8 - LTEXT "Default Gateway:", -1, 22, 62, 80, 8 - - RTEXT "N/A", IDC_DETAILSTYPE, 122, 20, 80, 8 - RTEXT "000.000.000.000", IDC_DETAILSIP, 122, 34, 80, 8 - RTEXT "000.000.000.000", IDC_DETAILSSUBNET, 122, 48, 80, 8 - RTEXT "000.000.000.000", IDC_DETAILSGATEWAY, 122, 62, 80, 8 - - PUSHBUTTON "&Detaljer...", IDC_DETAILS, 22, 76, 62, 14 -END - -IDD_TCPIPPROPERTIES DIALOGEX DISCARDABLE 0, 0, 246, 228 -STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "General" -FONT 8, "MS Shell Dlg" -BEGIN - LTEXT "You can get IP settings assigned automatically if your network supports this capability. Otherwise, you need to ask your network administrator for the appropriate IP settings.", -1, 9, 9, 228, 27 - CONTROL "Obtain the IP address automatically", IDC_USEDHCP, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 14, 43, 210, 12 - GROUPBOX "", -1, 9, 61, 228, 70, BS_GROUPBOX - CONTROL "&Use the following IP address:", IDC_NODHCP, "BUTTON", BS_AUTORADIOBUTTON, 14, 59, 105, 12 - LTEXT "IP address:", -1, 14, 75, 135, 8 - CONTROL "",IDC_IPADDR,"SysIPAddress32",WS_TABSTOP,150,75-2,80,12 - LTEXT "Subnet mask:", -1, 14, 90, 135, 8 - CONTROL "",IDC_SUBNETMASK,"SysIPAddress32",WS_TABSTOP,150,90-2,80,12 - LTEXT "Default gateway:", -1, 14, 105, 135, 8 - CONTROL "",IDC_DEFGATEWAY,"SysIPAddress32",WS_TABSTOP,150,105-2,80,12 - CONTROL "Obtain the DNS server address automatically", IDC_AUTODNS, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 14, 139, 210, 12 - GROUPBOX "", -1, 9, 157, 228, 47, BS_GROUPBOX - CONTROL "&Use the following DNS server addresses", IDC_FIXEDDNS, "BUTTON", BS_AUTORADIOBUTTON, 14, 155, 142, 12 - LTEXT "Preferred DNS server:", -1, 14, 171, 135, 8 - CONTROL "",IDC_DNS1,"SysIPAddress32",WS_TABSTOP,150,171-2,80,12 - LTEXT "Alternate DNS server:", -1, 14, 186, 135, 8 - CONTROL "",IDC_DNS2,"SysIPAddress32",WS_TABSTOP,150,186-2,80,12 - PUSHBUTTON "&Advanced", IDC_ADVANCED, 186, 209, 50, 14, WS_DISABLED | WS_TABSTOP -END - -STRINGTABLE -BEGIN - IDS_CPLSYSTEMNAME "Network Properties" - IDS_CPLSYSTEMDESCRIPTION "Customizes network settings." -END - -STRINGTABLE -BEGIN - IDS_ASSIGNED_DHCP "Tilordnet av DHCP" - IDS_ASSIGNED_MANUAL "Manuelt konfigurert" -END - -STRINGTABLE -BEGIN - IDS_ERROR "Feil" - IDS_ENTER_VALID_IPADDRESS "You must enter a valid IP address" - IDS_ENTER_VALID_SUBNET "You must enter a valid subnet mask" - IDS_CANNOT_LOAD_CONFIG "Unable to load current config data" - IDS_CANNOT_CREATE_PROPSHEET "Unable to create property sheet" - IDS_OUT_OF_MEMORY "Out of memory" - IDS_CANNOT_SAVE_CHANGES "Unable to save the changes you made" - IDS_STATUS_NON_OPERATIONAL "Non-operational" - IDS_STATUS_UNREACHABLE "No WAN adapter found" - IDS_STATUS_DISCONNECTED "Disconnected" - IDS_STATUS_CONNECTING "Connecting" - IDS_STATUS_CONNECTED "Connected" - IDS_STATUS_OPERATIONAL "Connected" - IDS_SPEED_MBPS "%d Mbps" - IDS_DURATION_DAY "%d day %s" - IDS_DURATION_DAYS "%d days %s" -END diff --git a/reactos/dll/cpl/ncpa/lang/no-NO.rc b/reactos/dll/cpl/ncpa/lang/no-NO.rc new file mode 100644 index 00000000000..0881c10acd2 --- /dev/null +++ b/reactos/dll/cpl/ncpa/lang/no-NO.rc @@ -0,0 +1,134 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_PROPPAGENETWORK DIALOGEX DISCARDABLE 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Egenskaper for Nettverk" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Nettverkskort",-1,9,9,217,8 + LISTBOX IDC_NETCARDLIST,9,21,229,73,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "&Legg til",IDC_ADD,9,100,60,14 + PUSHBUTTON "&Fjern",IDC_REMOVE,72,100,60,14 + PUSHBUTTON "&Egenskaper",IDC_PROPERTIES,179,100,60,14 +END + +IDD_NETPROPERTIES DIALOGEX DISCARDABLE 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Generielt" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Koble til med:", -1, 9,9,217,8 + EDITTEXT IDC_NETCARDNAME, 9, 21, 230, 12, WS_DISABLED | WS_BORDER | WS_TABSTOP + PUSHBUTTON "&Konfigurer", IDC_CONFIGURE, 189, 38, 50, 14 + LTEXT "Komponenter kontrollert er brukt av denne tilkoblingen:", -1, 9, 59, 217, 8 + LISTBOX IDC_COMPONENTSLIST, 9, 71, 230, 55, LBS_NOTIFY | WS_VSCROLL | WS_BORDER | LBS_NOINTEGRALHEIGHT + PUSHBUTTON "&Installler", IDC_INSTALL, 9, 130, 65, 14, WS_DISABLED | WS_TABSTOP + PUSHBUTTON "&Avinnstallere", IDC_UNINSTALL, 90, 130, 65, 14, WS_DISABLED | WS_TABSTOP + PUSHBUTTON "&Egenskaper", IDC_PROPERTIES, 174, 130, 65, 14 + GROUPBOX "Beskrivelse", -1, 9, 153, 230, 46, BS_GROUPBOX + LTEXT "Komponent beskrivelse kan du fе her...", IDC_DESCRIPTION, 15, 165, 217, 28, WS_GROUP + CHECKBOX "Vis Ikon i oppgavelinjen nеr tilkoblet", IDC_SHOWTASKBAR, 9, 206, 230, 12, BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP +END + + +IDD_CARDPROPERTIES DIALOGEX DISCARDABLE 0, 0, 200,180 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Generielt" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Tilkobling", -1, 9, 8, 182, 58, BS_GROUPBOX + LTEXT "Status:", -1, 19, 20, 60, 8 + LTEXT "Varighet:", -1, 19, 34, 60, 8 + LTEXT "Hastighet:", -1, 19, 48, 60, 8 + GROUPBOX "Aktivitet", -1, 9, 74, 182, 70, BS_GROUPBOX + RTEXT "Sendt", -1, 26, 90, 60, 8 + ICON IDI_HORIZONTAL, -1, 90, 85, 18, 20 + ICON IDI_NETSTAT, -1, 110, 85, 18, 20 + ICON IDI_HORIZONTAL, -1, 130, 85, 18, 20 + LTEXT "Motatt", -1, 149, 90, 37, 8 + LTEXT "Byte:", -1, 17, 115, 32, 8 + RTEXT "000.000.000", IDC_SEND, 63, 115, 44, 8 + ICON IDI_VERTICAL, -1, 110, 108, 18, 20 + RTEXT "000.000.000", IDC_RECEIVED, 139, 115, 44, 8 + PUSHBUTTON "&Egenskaper", IDC_PROPERTIES, 10, 150, 50, 14 + PUSHBUTTON "&Deaktivert", IDC_ENDISABLE, 66, 150, 50, 14 + RTEXT "",IDC_STATUS,83,20,98,8 + RTEXT "",IDC_DURATION,83,34,98,8 + RTEXT "",IDC_SPEED,83,48,98,8 +END + +IDD_CARDSUPPORT DIALOGEX DISCARDABLE 0, 0, 200,180 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hjelp" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Tilkoblingsstatus", -1, 9, 8, 200, 88, BS_GROUPBOX + LTEXT "Adressetype:", -1, 22, 20, 80, 8 + LTEXT "IP adresse:", -1, 22, 34, 80, 8 + LTEXT "Subnet maske:", -1, 22, 48, 80, 8 + LTEXT "Standard Gateway:", -1, 22, 62, 80, 8 + + RTEXT "Ikke tilgjengelig", IDC_DETAILSTYPE, 122, 20, 80, 8 + RTEXT "000.000.000.000", IDC_DETAILSIP, 122, 34, 80, 8 + RTEXT "000.000.000.000", IDC_DETAILSSUBNET, 122, 48, 80, 8 + RTEXT "000.000.000.000", IDC_DETAILSGATEWAY, 122, 62, 80, 8 + + PUSHBUTTON "&Detaljer...", IDC_DETAILS, 22, 76, 62, 14 +END + +IDD_TCPIPPROPERTIES DIALOGEX DISCARDABLE 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Generielt" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Du kan fе IP innstillinger automatisk hvis ditt nettverk stшtter denne muligheten. Ellers, trenger du е spшrre din nettverk administrator for е fе IP innstillingene.", -1, 9, 9, 228, 27 + CONTROL "Motta IP addressen automatisk", IDC_USEDHCP, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 14, 43, 210, 12 + GROUPBOX "", -1, 9, 61, 228, 70, BS_GROUPBOX + CONTROL "&Bruk fшlgende IP addresse:", IDC_NODHCP, "BUTTON", BS_AUTORADIOBUTTON, 14, 59, 105, 12 + LTEXT "IP address:", -1, 14, 75, 135, 8 + CONTROL "",IDC_IPADDR,"SysIPAddress32",WS_TABSTOP,150,75-2,80,12 + LTEXT "Subnet maske:", -1, 14, 90, 135, 8 + CONTROL "",IDC_SUBNETMASK,"SysIPAddress32",WS_TABSTOP,150,90-2,80,12 + LTEXT "Standard gateway:", -1, 14, 105, 135, 8 + CONTROL "",IDC_DEFGATEWAY,"SysIPAddress32",WS_TABSTOP,150,105-2,80,12 + CONTROL "Motta DNS server addresse automatisk", IDC_AUTODNS, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 14, 139, 210, 12 + GROUPBOX "", -1, 9, 157, 228, 47, BS_GROUPBOX + CONTROL "&Bruk fшlgende DNS server addresser", IDC_FIXEDDNS, "BUTTON", BS_AUTORADIOBUTTON, 14, 155, 142, 12 + LTEXT "Forvalgt DNS server:", -1, 14, 171, 135, 8 + CONTROL "",IDC_DNS1,"SysIPAddress32",WS_TABSTOP,150,171-2,80,12 + LTEXT "Alternativ DNS server:", -1, 14, 186, 135, 8 + CONTROL "",IDC_DNS2,"SysIPAddress32",WS_TABSTOP,150,186-2,80,12 + PUSHBUTTON "&Avansert", IDC_ADVANCED, 186, 209, 50, 14, WS_DISABLED | WS_TABSTOP +END + +STRINGTABLE +BEGIN + IDS_CPLSYSTEMNAME "Nettverk egenskaper" + IDS_CPLSYSTEMDESCRIPTION "Tilpass nettverk innstillinger." +END + +STRINGTABLE +BEGIN + IDS_ASSIGNED_DHCP "Tilordnet av DHCP" + IDS_ASSIGNED_MANUAL "Manuelt konfigurert" +END + +STRINGTABLE +BEGIN + IDS_ERROR "Feil" + IDS_ENTER_VALID_IPADDRESS "Du mе skrive inn en gyldig IP addresse" + IDS_ENTER_VALID_SUBNET "Du mе skrive inn en gyldig subnet maske" + IDS_CANNOT_LOAD_CONFIG "Ikke mulig е laste nеvжrende konfigurering data" + IDS_CANNOT_CREATE_PROPSHEET "Ikke mulig е opprette egenskap informasjon" + IDS_OUT_OF_MEMORY "Ikke mere tilgjengelig minne" + IDS_CANNOT_SAVE_CHANGES "Ikke mulig е lagre endringene du gjorde" + IDS_STATUS_NON_OPERATIONAL "Non-operational" + IDS_STATUS_UNREACHABLE "Ingen trеdlшse nettverkskort funnet" + IDS_STATUS_DISCONNECTED "Frakoblet" + IDS_STATUS_CONNECTING "Kobler til" + IDS_STATUS_CONNECTED "Tilkoblet" + IDS_STATUS_OPERATIONAL "Tilkoblet" + IDS_SPEED_MBPS "%d Mbps" + IDS_DURATION_DAY "%d dag %s" + IDS_DURATION_DAYS "%d dager %s" +END diff --git a/reactos/dll/cpl/ncpa/rsrc.rc b/reactos/dll/cpl/ncpa/rsrc.rc index d41c582aff9..a984e6d03b4 100644 --- a/reactos/dll/cpl/ncpa/rsrc.rc +++ b/reactos/dll/cpl/ncpa/rsrc.rc @@ -13,7 +13,7 @@ #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/ja-JP.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" diff --git a/reactos/dll/cpl/powercfg/lang/no-NO.rc b/reactos/dll/cpl/powercfg/lang/no-NO.rc new file mode 100644 index 00000000000..c80fbe06512 --- /dev/null +++ b/reactos/dll/cpl/powercfg/lang/no-NO.rc @@ -0,0 +1,166 @@ +// Norwegian (no) resources by LMH1 + +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_PROPPAGEPOWERSHEMES DIALOGEX 0, 0, 252, 237 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Strшmstyringsplan" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_ACDC, IDI_ACDC, 7, 7, 28, 22 + LTEXT "Velg Strшmstyringsplan med den mest passende innstilling for denne datamaskinen. Vжr oppmerksom pе е endre innstillingene under vil forandre valgte plan.", + -1,37, 6, 209, 36 + GROUPBOX "S&trшmstyringsplan", -1, 6, 43, 240, 50 + COMBOBOX IDC_ENERGYLIST, 14, 54, 224, 92, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL + PUSHBUTTON "&Lagre som...", IDC_SAVEAS_BTN, 109, 72, 70, 14, WS_DISABLED + PUSHBUTTON "&Slett", IDC_DELETE_BTN, 183, 72, 55, 14, WS_DISABLED + GROUPBOX "Ukjent", IDC_GRPDETAIL, 6, 95, 240, 136 + LTEXT "Mens datamaskinen er:",IDC_SAT, 12, 109, 60, 12 + LTEXT "Koblet til",IDC_SAC, 123, 110, 45, 15 + ICON IDI_AC, IDC_IAC, 97, 108, 21, 20 + LTEXT "Kjшrer pе batterier",IDC_SDC, 195, 110, 45, 15 + ICON IDI_DC, IDC_IDC, 170, 108, 21, 20 + LTEXT "Slе av &skjermen:",IDC_MONITOR, 13, 148, 84, 10 + COMBOBOX IDC_MONITORACLIST, 100, 145, 65, 150, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_MONITORDCLIST, 173, 145, 65, 150, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Slе av hardd&isker:",IDC_DISK, 13, 171, 84, 10 + COMBOBOX IDC_DISKACLIST, 100, 167, 65, 150, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_DISKDCLIST, 173, 167, 65, 150, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "System h&vilemodus:",IDC_STANDBY, 13, 191, 84, 10 + COMBOBOX IDC_STANDBYACLIST, 100, 188, 65, 150, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_STANDBYDCLIST, 173, 188, 65, 150, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "System &dvalemodus:",IDC_HYBERNATE, 13, 212, 84, 10 + COMBOBOX IDC_HYBERNATEACLIST, 100, 209, 65, 150, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_HYBERNATEDCLIST, 173, 209, 65, 150, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP +END + +IDD_PROPPAGEALARMS DIALOGEX DISCARDABLE 0, 0, 252, 237 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Alarmer" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Svakt battery alarm",-1, 6, 7, 239, 104 + CONTROL "Aktivere &svakt batteri alarm mens strшmnivеet passerer:",IDC_ALARM1, + "Knapp",BS_AUTOCHECKBOX | WS_TABSTOP, 15, 17, 190, 15 + LTEXT "ukjent",IDC_ALARMVALUE1, 209, 20, 33, 10 + LTEXT "0%",-1, 28, 43, 15, 10 + CONTROL "Slider1",IDC_ALARMBAR1,"msctls_trackbar32",TBS_HORZ | + TBS_AUTOTICKS | WS_TABSTOP, 42, 45, 170, 15 + LTEXT "100%", -1, 214, 43, 25, 10 + PUSHBUTTON "Alar&m handling...",-1, 17, 69, 70, 14,WS_DISABLED + LTEXT "Varsel:",-1, 95, 71, 57, 10 + LTEXT "Ukjent",IDC_ALARMMSG1, 154, 71, 84, 10 + LTEXT "Handling:",-1, 95, 83, 55, 10 + LTEXT "Ukjent",IDC_ALARMAKTION1, 154, 83, 84, 10 + LTEXT "Kjшr Program:",-1, 95, 95, 55, 10 + LTEXT "Ukjent",IDC_ALARMPROG1, 154, 95, 84, 10 + + GROUPBOX "Kritisk batteri alarm",-1, 6, 120, 239, 106 + CONTROL "Aktivere svakt batteri alarm mens strшmnivеet passerer:",IDC_ALARM2, + "Knapp",BS_AUTOCHECKBOX | WS_TABSTOP, 15, 131, 180, 15 + LTEXT "Ukjent",IDC_ALARMVALUE2, 209, 133, 33, 10 + LTEXT "0%",-1, 28, 154, 15, 10 + CONTROL "Slider1",IDC_ALARMBAR2,"msctls_trackbar32",TBS_HORZ | + TBS_AUTOTICKS | WS_TABSTOP, 42, 158, 170, 15 + LTEXT "100%",-1, 214, 154, 25, 10 + PUSHBUTTON "Alar&m handling...",-1, 17, 183, 70, 14, WS_DISABLED + LTEXT "Handling:",-1, 95, 185, 50, 10 + LTEXT "Ukjent",IDC_ALARMMSG2, 154, 185, 84, 10 + LTEXT "Handling:",-1, 95, 198, 45, 10 + LTEXT "Ukjent",IDC_ALARMAKTION2, 154, 198, 84, 10 + LTEXT "Kjшr program:",-1, 95, 211, 50, 10 + LTEXT "Ukjent",IDC_ALARMPROG2, 154, 211, 84, 10 +END + +IDD_PROPPAGEADVANCED DIALOGEX DISCARDABLE 0, 0, 252, 237 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Avansert" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_ACDC,IDI_ACDC, 7, 7, 20, 20 + LTEXT "Velg strшm-sparing innstillinger som du vil bruke.",-1, 37, 6, 207, 20 + GROUPBOX "Valg",-1, 6, 30, 240, 65 + CONTROL "Allti&d vis ikon pе oppgavelinjen",IDC_SYSTRAYBATTERYMETER,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP, 17, 43, 220, 10 + CONTROL "&Spшr etter passord ved gjenopptakelse etter dvalemodus",IDC_PASSWORDLOGON,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP, 17, 60, 220, 10 + CONTROL "&Dim vis nеr pcen kjшrer pе batteri strшm",IDC_VIDEODIMDISPLAY,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP, 17, 78, 220, 10 + GROUPBOX "Strшmknapper",-1, 6, 101, 240, 127 + LTEXT "&When I close the lid of my portable computer:", IDC_SLIDCLOSE, 15, 115, 222, 10 + COMBOBOX IDC_LIDCLOSE, 15, 127, 220, 90, CBS_DROPDOWNLIST | CBS_SORT | + WS_VSCROLL | WS_TABSTOP + LTEXT "Wh&en I press the power button on my computer:", IDC_SPOWERBUTTON, 15, 153, 222, 10 + COMBOBOX IDC_POWERBUTTON, 15, 165, 220, 90, CBS_DROPDOWNLIST | CBS_SORT | + WS_VSCROLL | WS_TABSTOP + LTEXT "Whe&n I press the sleep button on my computer:", IDC_SSLEEPBUTTON, 15, 191, 222, 10 + COMBOBOX IDC_SLEEPBUTTON, 15, 203, 220, 90, CBS_DROPDOWNLIST | CBS_SORT | + WS_VSCROLL | WS_TABSTOP +END + +IDD_PROPPAGEHIBERNATE DIALOGEX DISCARDABLE 0, 0, 252, 237 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Dvalemodus" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_HIBERNATE,IDI_HIBERNATE, 7, 7, 20, 20 + LTEXT "Nеr din datamaskin gеr i dvalemodus, lagres all data i minnet til din harddisk ogsе blir pcen slеtt av. Nеr din datamaskin vеkner fra dvalemodus, gjennoppretter den шkten til forrige stand. ", + -1, 37, 6, 210, 35 + GROUPBOX "Dvalemodus",-1, 6, 41, 240, 32 + CONTROL "Aktiver &dvalemodus",IDC_HIBERNATEFILE,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP, 17, 55, 210, 10 + GROUPBOX "Ledig plass for dvalemodus",-1, 6, 80, 240, 76 + LTEXT "Ledig plass:",-1, 15, 95, 140, 10 + LTEXT "Ukjent",IDC_FREESPACE, 160, 95, 80, 10 + LTEXT "Ledig plass som trengs for dvalemodus:",-1, 15, 115, 140, 10 + LTEXT "Ukjent",IDC_SPACEFORHIBERNATEFILE, 160, 115, 80, 10 + LTEXT "Du trenger ledig plass fшr din datamaskin kan gе i dvalemodus. ",IDC_TOLESSFREESPACE, 15, 135, 224, 20 +END + +STRINGTABLE +BEGIN + IDS_CPLNAME_1 "Strшmvalg" + IDS_CPLDESCRIPTION_1 "Konfigurere energi-sparing innstillinger for din datamaskin." + IDS_PROCENT "%i%%" + IDS_SOUND "Lyd" + IDS_TEXT "Tekst" + IDS_CONFIG1 "Innstillinger for %1 strшmplan" + IDS_CONFIG2 "Avanserte innstillinger for %1" + + IDS_SIZEBYTS "%i byte" + IDS_SIZEMB "%i MB" + + IDS_NOACTION "Ikke gjшr noe" + + IDS_PowerActionNone1 "Ingen handling" + IDS_PowerActionUnknown "Ukjent" + IDS_PowerActionSleep "Ventemodus" + IDS_PowerActionHibernate "Dvalemodus" + IDS_PowerActionShutdown "Slе av" + IDS_PowerActionRestart "Start pе nytt" + IDS_PowerActionShutdownOff "Slе av og slе av strшmmen" + IDS_PowerActionWarmEject "Spшr meg hva som skal gjшres" + IDS_PowerActionNone2 "Ingen" + + IDS_TIMEOUT1 "Etter 1 min" + IDS_TIMEOUT2 "Etter 2 min" + IDS_TIMEOUT3 "Etter 3 min" + IDS_TIMEOUT4 "Etter 5 min" + IDS_TIMEOUT5 "Etter 10 min" + IDS_TIMEOUT6 "Etter 15 min" + IDS_TIMEOUT7 "Etter 20 min" + IDS_TIMEOUT8 "Etter 25 min" + IDS_TIMEOUT9 "Etter 30 min" + IDS_TIMEOUT10 "Etter 45 min" + IDS_TIMEOUT11 "Etter 1 time" + IDS_TIMEOUT12 "Etter 2 timer" + IDS_TIMEOUT13 "Etter 3 timer" + IDS_TIMEOUT14 "Etter 4 timer" + IDS_TIMEOUT15 "Etter 5 timer" + IDS_TIMEOUT16 "Aldri" + + IDS_DEL_SCHEME "Er du sikker pе at du vil slette strшmplanen?" + IDS_DEL_SCHEME_TITLE "Slett planen" +END + + diff --git a/reactos/dll/cpl/powercfg/rsrc.rc b/reactos/dll/cpl/powercfg/rsrc.rc index 576d732a74d..dcc6fb1377a 100644 --- a/reactos/dll/cpl/powercfg/rsrc.rc +++ b/reactos/dll/cpl/powercfg/rsrc.rc @@ -11,6 +11,7 @@ #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/nl-NL.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/cpl/sysdm/lang/cs-CZ.rc b/reactos/dll/cpl/sysdm/lang/cs-CZ.rc index 60173843906..e41cf645cce 100644 --- a/reactos/dll/cpl/sysdm/lang/cs-CZ.rc +++ b/reactos/dll/cpl/sysdm/lang/cs-CZ.rc @@ -1,6 +1,6 @@ /* FILE: dll/cpl/sysdm/lang/cs-CZ.rc * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) - * UPDATED: 2008-06-27 + * UPDATED: 2008-07-01 */ LANGUAGE LANG_CZECH, SUBLANG_DEFAULT @@ -147,11 +147,11 @@ BEGIN LTEXT "Vэchozн operaиnн s&ystйm:", IDC_STATIC, 14, 26, 100, 8 COMBOBOX IDC_STRECOSCOMBO, 14, 37, 224, 46, CBS_DROPDOWNLIST AUTOCHECKBOX "Dob&a zobrazenн seznamu operaиnнch systйmщ:", IDC_STRECLIST, 14, 56, 160, 8 - EDITTEXT IDC_STRRECLISTEDIT, 185, 54, 30, 12 + EDITTEXT IDC_STRRECLISTEDIT, 185, 54, 30, 12, ES_NUMBER CONTROL "", IDC_STRRECLISTUPDWN, "msctls_updown32", UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | WS_CHILD | WS_VISIBLE, 0, 0, 8, 13 LTEXT "sek.", IDC_STATIC, 223, 56, 18, 8 AUTOCHECKBOX "Doba zobrazenн moћnos&tн zotavenн v pшнpadм potшeby:", IDC_STRRECREC, 14, 70, 170, 8 - EDITTEXT IDC_STRRECRECEDIT, 185, 68, 30, 12 + EDITTEXT IDC_STRRECRECEDIT, 185, 68, 30, 12, ES_NUMBER CONTROL "", IDC_STRRECRECUPDWN, "msctls_updown32", UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | WS_CHILD | WS_VISIBLE, 0, 0, 8, 13 LTEXT "s", IDC_STATIC, 223, 70, 18, 8 LTEXT "Soubor s moћnostmi spuљtмnн lze upravit ruиnм kliknutнm na tlaинtko Upravit.", IDC_STATIC, 14, 89, 187, 8 diff --git a/reactos/dll/cpl/sysdm/lang/no-NO.rc b/reactos/dll/cpl/sysdm/lang/no-NO.rc new file mode 100644 index 00000000000..b28e44c1db4 --- /dev/null +++ b/reactos/dll/cpl/sysdm/lang/no-NO.rc @@ -0,0 +1,275 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_PROPPAGEGENERAL DIALOGEX 0, 0, 256, 218 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Generielt" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", IDC_ROSIMG, "Static", SS_OWNERDRAW, 4, 5, 248, 111 + LTEXT "System:", IDC_STATIC, 4, 132, 32, 9 + LTEXT REACTOS_STR_PRODUCT_NAME, IDC_STATIC, 10, 144, 116, 9 + LTEXT "Versjon ", IDC_STATIC, 10, 153, 25, 9 + LTEXT REACTOS_STR_PRODUCT_VERSION, IDC_STATIC, 35, 153, 91, 9 + LTEXT REACTOS_STR_PRODUCT_BUILD, IDC_STATIC, 10, 162, 60, 9 + LTEXT "Maskin:", IDC_STATIC, 124, 132, 34, 9 + LTEXT "", IDC_MACHINELINE1, 130, 144, 118, 9 + LTEXT "", IDC_MACHINELINE2, 130, 153, 118, 9 + LTEXT "", IDC_MACHINELINE3, 130, 162, 118, 9 + LTEXT "", IDC_MACHINELINE4, 130, 171, 118, 9 + LTEXT "", IDC_MACHINELINE5, 130, 180, 118, 9 + CONTROL "Besшk ReactOS Hjemmesiden", IDC_ROSHOMEPAGE_LINK, "SysLink", WS_CHILD | WS_VISIBLE | WS_TABSTOP, 20, 200, 140, 8 + PUSHBUTTON "Vis &lisensen...", IDC_LICENCE, 170, 199, 78, 13 +END + + +IDD_PROPPAGEHARDWARE DIALOGEX 0, 0, 256, 218 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Maskinvare" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Enhetsbehandler", IDC_STATIC, 6, 7, 244, 61 + ICON IDI_DEVMGR, IDC_STATIC, 12, 18, 23, 21, SS_ICON + LTEXT "Enhetsbehandler viser alt av maskinvare enheter som er innstallert pе din datamaskin. Bruk enhetsbehandleren for е endre egenskapene for alle enhetene.", IDC_STATIC, 42, 18, 204, 24 + PUSHBUTTON "&Enhetsbehandler...", IDC_HARDWARE_DEVICE_MANAGER, 154, 48, 90, 15 + + GROUPBOX "Maskinvare veiviser", IDC_STATIC, 6, 79, 244, 61 + ICON IDI_DEVMGR, IDC_STATIC, 12, 90, 23, 21, SS_ICON + LTEXT "Maskinvare veiviseren hjelper deg е installere, avinnstallere, reparere, koble fra, utlшse, og konfigurere din maskinvare.", IDC_STATIC, 42, 90, 204, 24 + PUSHBUTTON "&Maskinvare veiviser...", IDC_HARDWARE_WIZARD, 154, 120, 90, 15 + + GROUPBOX "Maskinvare profiler", IDC_STATIC, 6, 149, 244, 61 + ICON IDI_HARDPROF, IDC_STATIC, 12, 160, 23, 21, SS_ICON + LTEXT "Maskinvare profiler hjelper deg е sette opp og lagre forskjellige maskinvare konfigurasjon.", IDC_STATIC, 42, 160, 204, 24 + PUSHBUTTON "Maskin&vare profiler...", IDC_HARDWARE_PROFILE, 154, 190, 90, 15 +END + + +IDD_PROPPAGEADVANCED DIALOGEX 0, 0, 256, 218 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Avansert" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Du mе vжre logget pе som administrator for е kunne endre de fleste av disse innstillingene.", IDC_STATIC, 12, 5, 236, 8 + GROUPBOX "Ytelse", IDC_STATIC, 6, 18, 244, 50 + LTEXT "Visuelle effekter, prosesorplanlegging, minnebruk og virtuelt minne.", IDC_STATIC, 16, 29, 228, 17 + PUSHBUTTON "Innstillinger", IDC_PERFOR, 194, 48, 50, 15 + + GROUPBOX "Brukerprofiler", IDC_STATIC, 6,75,244,48 + LTEXT "Skrivebordinnstillinger som er relatert til din pеlogging", IDC_STATIC, 16, 88, 228, 20 + PUSHBUTTON "Innstillinger", IDC_USERPROFILE, 194, 103, 50, 15 + + GROUPBOX "Oppstart og gjenoppretting", IDC_STATIC, 6, 131, 244, 52 + LTEXT "Oppstart og gjenoppretting forteller hvordan man kan fе startet og hva som lagde problemet med din datamaskin.", IDC_STATIC, 16, 144, 228, 19 + PUSHBUTTON "Innstillinger", IDC_STAREC, 194, 162, 50, 15 + + PUSHBUTTON "Miljшvariabler", IDC_ENVVAR, 84, 192, 80, 15 + PUSHBUTTON "Feil rapporteringer", IDC_ERRORREPORT, 170, 192, 80, 15 +END + + +IDD_HARDWAREPROFILES DIALOGEX 6, 18, 254, 234 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Maskinvare profiler" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_HARDPROF, IDC_STATIC, 8, 11, 18, 20, SS_ICON + LTEXT "Du kan sette opp maskinvareprofiler for forskjellige maskinvarekonfigurasjoner. Ved oppstart, kan du velge hvilken profil du vil bruke.", IDC_STATIC, 46, 11, 188, 25 + LTEXT "Tilgjengelige maskinvareprofiler:", IDC_STATIC, 8, 41, 120, 8 + LISTBOX IDC_HRDPROFLSTBOX, 8, 52, 215, 54, LBS_NOTIFY + PUSHBUTTON "", IDC_HRDPROFUP, 232, 59, 15, 14, BS_ICON + PUSHBUTTON "", IDC_HRDPROFDWN, 232, 79, 15, 14, BS_ICON + PUSHBUTTON "&Egenskaper", IDC_HRDPROFPROP, 8, 106, 50, 14 + PUSHBUTTON "&Kopier", IDC_HRDPROFCOPY, 63, 106, 50, 14 + PUSHBUTTON "&Endre navn", IDC_HRDPROFRENAME, 118, 106, 50, 14 + PUSHBUTTON "&Slett", IDC_HRDPROFDEL, 173, 106, 50, 14 + + GROUPBOX "Valg av maskinvareprofil", IDC_STATIC, 7, 130, 240, 75 + LTEXT "Nеr ReactOS starter:", IDC_STATIC, 14, 142, 210, 8 + AUTORADIOBUTTON "&Vent til jeg velger en maskinvareprofil", IDC_HRDPROFWAIT, 14, 158, 133, 8, WS_GROUP + AUTORADIOBUTTON "&Velg fшrste profil i listen ovenfor hvis jeg ikke velger profil innen", IDC_HRDPROFSELECT, 14, 173, 190, 8 + LTEXT "sekunder", IDC_STATIC, 65, 187, 35, 8 + EDITTEXT IDC_HRDPROFEDIT, 25, 185, 35, 12 + CONTROL "", IDC_HRDPROFUPDWN, "msctls_updown32", UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | WS_CHILD | WS_VISIBLE, 25, 185, 7, 10 + + DEFPUSHBUTTON "OK", IDOK, 143, 213, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 197, 213, 50, 14 +END + + +IDD_RENAMEPROFILE DIALOGEX 12, 26, 256, 52 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Endre Profil navn" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Fra:", IDC_STATIC, 5, 10, 20, 8 + LTEXT "", IDC_RENPROFEDITFROM, 30, 10, 160, 10 + LTEXT "Til:", IDC_STATIC, 5, 30, 20, 8 + EDITTEXT IDC_RENPROFEDITTO, 30, 30, 160, 12 + + DEFPUSHBUTTON "OK", IDOK, 199, 9, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 199, 30, 50, 14 +END + + +IDD_USERPROFILE DIALOGEX 0, 0, 256, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | DS_SETFONT | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Brukerprofil" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERPROF, IDC_STATIC, 6, 11, 16, 16, SS_ICON + LTEXT "Brukerprofilene lagrer innstillinger for skrivebord og annen informasjon tilknyttet brukerkontoen din. Du kan opprette seperate profiler for hver datamaskin du bruker, eller du kan velge en sentral profil som er den samme pе alle maskinene.", + IDC_STATIC, 40, 11, 211, 35 + LTEXT "Profiler som er lagret pе denne maskinen:", IDC_STATIC, 16, 51, 204, 9 + CONTROL "", IDC_USERPROFILE_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | WS_BORDER | WS_TABSTOP, + 6, 66, 244, 85, WS_EX_CLIENTEDGE + PUSHBUTTON "Endre type", IDC_USERPROFILE_CHANGE, 90, 156, 50, 13 + PUSHBUTTON "Slett", IDC_USERPROFILE_DELETE, 145, 156, 50, 13 + PUSHBUTTON "Kopier til", IDC_USERPROFILE_COPY, 200, 156, 50, 13 + + CONTROL "Еpne Brukerkontoer i Kontrollpanel for е opprette nye brukerkontoer.", IDC_USERACCOUNT_LINK, "SysLink", WS_CHILD | WS_VISIBLE | WS_TABSTOP, 7, 175, 245, 18 + + DEFPUSHBUTTON "OK", IDOK, 134, 200, 54, 13 + PUSHBUTTON "Avbryt", IDCANCEL, 196, 200, 54, 13 +END + + +IDD_STARTUPRECOVERY DIALOGEX 6, 18, 252, 280 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Oppstart og gjenoppretting" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Systemoppstart", IDC_STATIC, 7, 12, 238, 95 + LTEXT "Standard operativ&system:", IDC_STATIC, 14, 26, 100, 8 + COMBOBOX IDC_STRECOSCOMBO, 14, 37, 224, 46, CBS_DROPDOWNLIST + AUTOCHECKBOX "&Tiden operativsystemlisten skal vises:", IDC_STRECLIST, 14, 56, 160, 8 + EDITTEXT IDC_STRRECLISTEDIT, 185, 54, 30, 12 + CONTROL "", IDC_STRRECLISTUPDWN, "msctls_updown32", UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | WS_CHILD | WS_VISIBLE, 0, 0, 8, 13 + LTEXT "sek.", IDC_STATIC, 223, 56, 18, 8 + AUTOCHECKBOX "Tiden &gjenopprettingsalternativene skal vises:", IDC_STRRECREC, 14, 70, 170, 8 + EDITTEXT IDC_STRRECRECEDIT, 185, 68, 30, 12 + CONTROL "", IDC_STRRECRECUPDWN, "msctls_updown32", UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | WS_CHILD | WS_VISIBLE, 0, 0, 8, 13 + LTEXT "sek.", IDC_STATIC, 223, 70, 18, 8 + LTEXT "Klikk pе rediger for е redigere oppstartsalternativfilen.", IDC_STATIC, 14, 89, 187, 8 + PUSHBUTTON "&Rediger", IDC_STRRECEDIT, 188, 87, 50, 14 + + GROUPBOX "Systemfeil", IDC_STATIC, 7, 111, 238, 140 + AUTOCHECKBOX "&Skriv en heldelse til systemloggen", IDC_STRRECWRITEEVENT, 14, 124, 148, 10 + AUTOCHECKBOX "Se&nd et administrativt varsel", IDC_STRRECSENDALERT, 14, 138, 148, 10 + AUTOCHECKBOX "Start pе nytt &automatisk", IDC_STRRECRESTART, 14, 152, 145, 10 + + GROUPBOX "Skriv feilsшkingsinformasjon", IDC_STATIC, 12, 167, 227, 76 + COMBOBOX IDC_STRRECDEBUGCOMBO, 17, 182, 151, 49, CBS_DROPDOWNLIST + LTEXT "Dump &fil:", IDC_STATIC, 17, 202, 150, 8 + EDITTEXT IDC_STRRECDUMPFILE, 17, 210, 153, 12 + AUTOCHECKBOX "&Overskriv eksisterende filer", IDC_STRRECOVERWRITE, 17, 228, 125, 10 + + DEFPUSHBUTTON "OK", IDOK, 141, 259, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 195, 259, 50, 14 +END + + +IDD_VIRTMEM DIALOGEX 6, 6, 223, 248 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Virtuell minne" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Stasjon [Volumnavn]", IDC_STATIC, 12, 5, 96, 9 + LTEXT "Sidevekslingsfilstшrrelse (MB)", IDC_STATIC, 115, 5, 96, 9 + LISTBOX IDC_PAGEFILELIST, 10, 16, 204, 52, LBS_NOTIFY | LBS_USETABSTOPS + GROUPBOX "Sidevekslingsfilstшrrelse for valgte enhet", IDC_DRIVEGROUP, 10, 70, 204, 104 + LTEXT "Stasjon:", IDC_STATIC, 20, 80, 20, 8 + LTEXT "", IDC_DRIVE, 88, 81, 100, 9 + LTEXT "Tilgjengelig ledig plass:", IDC_STATIC, 20, 92, 56, 9 + LTEXT "", IDC_SPACEAVAIL, 88, 92, 104, 9 + LTEXT "&Startstшrrelse (MB):", -1, 22, 118, 75, 9 + LTEXT "Ma&ksimalt stшrrelse (MB):", -1, 22, 131, 75, 9 + AUTORADIOBUTTON "&Tilpass stшrrelse", IDC_CUSTOM, 20, 105, 54, 9, WS_GROUP + AUTORADIOBUTTON "S&ystem styrt stшrrelse", IDC_SYSMANSIZE, 20, 145, 88, 9 + AUTORADIOBUTTON "&Ingen sidevekslingsfil", IDC_NOPAGEFILE, 20, 158, 78,9 + EDITTEXT IDC_INITIALSIZE, 100, 114, 44, 13, NOT WS_BORDER, WS_EX_CLIENTEDGE + EDITTEXT IDC_MAXSIZE, 100, 129, 44, 13, NOT WS_BORDER, WS_EX_CLIENTEDGE + PUSHBUTTON "Still", IDC_SET, 158, 155, 50, 13 + + GROUPBOX "Total stшrrelse pе sidevekslingsfil for alle enheter", IDC_TOTALGROUP, 10, 177, 204, 46 + LTEXT "Minste tilatte:", IDC_STATIC, 18, 188, 58, 9 + LTEXT "", IDC_MINIMUM, 88, 188, 100, 9 + LTEXT "Anbefalt:", IDC_STATIC, 18, 199, 52, 9 + LTEXT "", IDC_RECOMMENDED, 88, 199, 100, 9 + LTEXT "Tildelt nе:", IDC_STATIC, 18, 210, 66, 9 + LTEXT "", IDC_CURRENT, 88, 210, 100, 9 + + DEFPUSHBUTTON "OK", IDOK, 114, 232, 48, 13 + PUSHBUTTON "Avbryt", IDCANCEL, 168, 232, 48, 13 +END + + +IDD_ENVIRONMENT_VARIABLES DIALOGEX 6, 18, 252, 245 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Miljшvariabel" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Brukervariabeler", IDC_STATIC, 7, 12, 238, 100 + + CONTROL "", IDC_USER_VARIABLE_LIST, "SysListView32", + LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_NOSORTHEADER | + WS_VSCROLL | WS_HSCROLL | WS_TABSTOP, 14, 25, 224, 58, WS_EX_CLIENTEDGE + PUSHBUTTON "&Ny...", IDC_USER_VARIABLE_NEW, 80, 90, 50, 14 + PUSHBUTTON "&Rediger...", IDC_USER_VARIABLE_EDIT, 134, 90, 50, 14 + PUSHBUTTON "&Slett", IDC_USER_VARIABLE_DELETE, 188, 90, 50, 14 + GROUPBOX "System variabeler", IDC_STATIC, 7, 116, 238, 100 + + CONTROL "", IDC_SYSTEM_VARIABLE_LIST, "SysListView32", + LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_NOSORTHEADER | + WS_VSCROLL | WS_HSCROLL | WS_TABSTOP, 14, 129, 224, 58, WS_EX_CLIENTEDGE + PUSHBUTTON "N&y...", IDC_SYSTEM_VARIABLE_NEW, 80, 194, 50, 14 + PUSHBUTTON "Re&diger...", IDC_SYSTEM_VARIABLE_EDIT, 134, 194, 50, 14 + PUSHBUTTON "S&lett", IDC_SYSTEM_VARIABLE_DELETE, 188, 194, 50, 14 + DEFPUSHBUTTON "OK", IDOK, 141, 224, 50, 14, WS_GROUP + PUSHBUTTON "Avbryt", IDCANCEL, 195, 224, 50, 14 +END + + +IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Rediger variabel" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Variabel &Navn:", IDC_STATIC, 7, 14, 50, 8 + EDITTEXT IDC_VARIABLE_NAME, 75, 12, 145, 12, ES_AUTOHSCROLL + LTEXT "Variabel &Verdi:", IDC_STATIC, 7, 32, 50, 8 + EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 145, 12, ES_AUTOHSCROLL + DEFPUSHBUTTON "OK", IDOK, 116, 50, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 170, 50, 50, 14 +END + + +IDD_LICENCE DIALOGEX 6, 5, 267, 159 +CAPTION "Lisens" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +STYLE DS_SHELLFONT | WS_BORDER | WS_THICKFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +BEGIN + EDITTEXT IDC_LICENCEEDIT, 6, 3, 255, 131, WS_VSCROLL | ES_READONLY | ES_MULTILINE + DEFPUSHBUTTON "OK", IDOK, 106, 142, 54, 13 +END + + +STRINGTABLE DISCARDABLE +BEGIN + IDS_CPLSYSTEMNAME "System" + IDS_CPLSYSTEMDESCRIPTION "See information about your computer and change various system and hardware settings." + IDS_MEGABYTE "MB Systemminne" + IDS_GIGABYTE "GB Systemminne" + IDS_TERABYTE "TB Systemminne" + IDS_PETABYTE "PB Systemminne" + IDS_VARIABLE "Variable" + IDS_VALUE "Verdi" + IDS_NO_DUMP "(Ingen)" + IDS_MINI_DUMP "Minidump(64KB)" + IDS_KERNEL_DUMP "Kernel dump" + IDS_FULL_DUMP "Fullstendig dump" + IDS_USERPROFILE_NAME "Navn" + IDS_USERPROFILE_SIZE "Stшrrelse" + IDS_USERPROFILE_TYPE "Type" + IDS_USERPROFILE_STATUS "Status" + IDS_USERPROFILE_MODIFIED "Modifisert" +END diff --git a/reactos/dll/cpl/sysdm/rsrc.rc b/reactos/dll/cpl/sysdm/rsrc.rc index ff4d00714bd..f17e7960924 100644 --- a/reactos/dll/cpl/sysdm/rsrc.rc +++ b/reactos/dll/cpl/sysdm/rsrc.rc @@ -10,6 +10,7 @@ #include "lang/fr-FR.rc" #include "lang/id-ID.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/cpl/timedate/lang/cs-CZ.rc b/reactos/dll/cpl/timedate/lang/cs-CZ.rc index 385236894b6..421784ad552 100644 --- a/reactos/dll/cpl/timedate/lang/cs-CZ.rc +++ b/reactos/dll/cpl/timedate/lang/cs-CZ.rc @@ -62,6 +62,6 @@ BEGIN IDS_TIMEZONEUNKNOWN "Neznбmй" IDS_INETTIMESUCSYNC "Иas byl ъspмљnм synchronizovбn z %s %s v %s" IDS_INETTIMENEXTSYNC "Dalљн synchronizace: %s v %s" - IDS_INETTIMESYNCING "Please wait while ReactOS synchronizes the time with %s" - IDS_INETTIMEERROR "An error occured while ReactOS was synchronizing with %s" + IDS_INETTIMESYNCING "Prosнm иekejte, zatнmco systйm ReactOS synchronizuje иas s %s" + IDS_INETTIMEERROR "Pшi synchronizaci иasu s %s nastala chyba" END diff --git a/reactos/dll/cpl/timedate/lang/no-NO.rc b/reactos/dll/cpl/timedate/lang/no-NO.rc new file mode 100644 index 00000000000..958f168f50f --- /dev/null +++ b/reactos/dll/cpl/timedate/lang/no-NO.rc @@ -0,0 +1,68 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_DATETIMEPAGE DIALOGEX 0, 0, 252, 146 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Dato && Tid" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "&Dato", -1, 4, 2, 122, 125 + COMBOBOX IDC_MONTHCB, 11, 17, 50, 120, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + EDITTEXT IDC_YEARTEXT,65, 17, 55, 12, ES_LEFT | WS_GROUP | ES_READONLY + CONTROL "", IDC_YEAR, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_NOTHOUSANDS | + UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | + WS_BORDER | WS_GROUP, 120, 17, 50, 12 + + CONTROL "", IDC_MONTHCALENDAR, "MonthCalWnd", + WS_CHILD | WS_VISIBLE | WS_TABSTOP, + 11, 37, 108, 80, WS_EX_CLIENTEDGE + GROUPBOX "&Tid", -1, 132, 2, 113, 125 + CONTROL "", IDC_TIMEPICKER, "SysDateTimePick32", + DTS_TIMEFORMAT | WS_CHILD | WS_VISIBLE | WS_TABSTOP, + 144, 105, 90, 12 + LTEXT "", IDC_TIMEZONE, 6, 132, 242, 11 + CONTROL "", IDC_CLOCKWND, "ClockWndClass", + WS_CHILD | WS_VISIBLE, 138, 12, 102, 89 +END + + +IDD_TIMEZONEPAGE DIALOGEX 0, 0, 252, 146 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Tidssone" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + COMBOBOX IDC_TIMEZONELIST, 5, 4, 241, 136, + CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + CONTROL "", IDC_WORLD_BACKGROUND, "Static", SS_OWNERDRAW, 5, 20, 240, 110, WS_EX_STATICEDGE + AUTOCHECKBOX "Still klokken automatisk for &sommertid", + IDC_AUTODAYLIGHT, 6, 132, 242, 11, WS_VISIBLE | WS_GROUP | WS_TABSTOP +END + + +IDD_INETTIMEPAGE DIALOGEX 0, 0, 252, 146 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Internett tid" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + AUTOCHECKBOX "Automatisk sykroniser klokken med internett tid serveren", IDC_AUTOSYNC, + 11 ,7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + LTEXT "Server:", IDC_SERVERTEXT, 34, 22, 28, 13 + PUSHBUTTON "Oppdater nе", IDC_UPDATEBUTTON, 187, 22, 49, 14 + LTEXT "", IDC_SUCSYNC, 12, 54, 214, 23 + LTEXT "", IDC_NEXTSYNC, 12, 96, 137, 12 + LTEXT "Synkronisering kan bare brukes nе din datamaskin er koblet til internett.", -1, 12, 114, 225, 25 +END + + +STRINGTABLE +BEGIN + IDS_CPLNAME "Dato/Tid" + IDS_CPLDESCRIPTION "Endre dato, tid og tidsone informajon." + IDS_TIMEZONETEXT "Gjeldende tidssone: %s" + IDS_TIMEZONEINVALID "Ugyldig" + IDS_TIMEZONEUNKNOWN "Ukjent" + IDS_INETTIMESUCSYNC "Tiden har blitt velykket synkronisert med %s pе %s med %s" + IDS_INETTIMENEXTSYNC "Neste synkonisering: %s med %s" + IDS_INETTIMESYNCING "Vennligst vent mens ReactOS sykroniserer tiden med %s" + IDS_INETTIMEERROR "En feil har oppstatt mens ReactOS ble sykronisert med %s" +END diff --git a/reactos/dll/cpl/timedate/monthcal.c b/reactos/dll/cpl/timedate/monthcal.c index c764c120101..d07b13c810b 100644 --- a/reactos/dll/cpl/timedate/monthcal.c +++ b/reactos/dll/cpl/timedate/monthcal.c @@ -75,6 +75,19 @@ MonthCalNotifyControlParent(IN PMONTHCALWND infoPtr, return Ret; } +/* + * for the year range 1..9999 + * return 1 if is leap year otherwise 0 + */ +static WORD LeapYear(IN WORD Year) +{ + return +#ifdef WITH_1752 + (Year <= 1752) ? !(Year % 4) : +#endif + !(Year % 4) && ((Year % 100) || !(Year % 400)); +} + static WORD MonthCalMonthLength(IN WORD Month, IN WORD Year) @@ -82,9 +95,16 @@ MonthCalMonthLength(IN WORD Month, const BYTE MonthDays[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 0}; if(Month == 2) - return MonthDays[Month - 1] + ((Year % 400 == 0) ? 1 : ((Year % 100 != 0) && (Year % 4 == 0)) ? 1 : 0); + return MonthDays[Month - 1] + LeapYear(Year); else - return MonthDays[Month - 1]; + { +#ifdef WITH_1752 + if ((Year == 1752) && (Month == 9)) + return 19; // special case: September 1752 has no 3rd-13th + else +#endif + return MonthDays[Month - 1]; + } } static WORD @@ -134,7 +154,7 @@ MonthCalValidDate(IN WORD Day, if (Month < 1 || Month > 12 || Day == 0 || Day > MonthCalMonthLength(Month, Year) || - Year < 1980 || Year > 2099) + Year < 1899 || Year > 9999) { return FALSE; } diff --git a/reactos/dll/cpl/timedate/rsrc.rc b/reactos/dll/cpl/timedate/rsrc.rc index edda9ad0c49..22644e8bb7f 100644 --- a/reactos/dll/cpl/timedate/rsrc.rc +++ b/reactos/dll/cpl/timedate/rsrc.rc @@ -14,6 +14,7 @@ #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/nl-NL.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/directx/ksproxy/ksproxy.def b/reactos/dll/directx/ksproxy/ksproxy.def deleted file mode 100644 index 3e31ddf2af6..00000000000 --- a/reactos/dll/directx/ksproxy/ksproxy.def +++ /dev/null @@ -1,12 +0,0 @@ -LIBRARY ksproxy.ax -EXPORTS -DllCanUnloadNow -DllGetClassObject -DllRegisterServer -DllUnregisterServer -KsGetMediaType -KsGetMediaTypeCount -KsGetMultiplePinFactoryItems -KsOpenDefaultDevice -KsResolveRequiredAttributes -KsSynchronousDeviceControl diff --git a/reactos/dll/directx/ksproxy/ksproxy.rbuild b/reactos/dll/directx/ksproxy/ksproxy.rbuild index ca2795c8a95..9f427ba5609 100644 --- a/reactos/dll/directx/ksproxy/ksproxy.rbuild +++ b/reactos/dll/directx/ksproxy/ksproxy.rbuild @@ -2,7 +2,7 @@ - + . 0x600 0x600 @@ -11,5 +11,6 @@ ntdll ksproxy.c ksproxy.rc + ksproxy.spec \ No newline at end of file diff --git a/reactos/dll/directx/ksproxy/ksproxy.spec b/reactos/dll/directx/ksproxy/ksproxy.spec new file mode 100644 index 00000000000..c4caec6845e --- /dev/null +++ b/reactos/dll/directx/ksproxy/ksproxy.spec @@ -0,0 +1,10 @@ +@ stdcall DllCanUnloadNow() +@ stdcall DllGetClassObject(ptr ptr ptr) +@ stdcall DllRegisterServer() +@ stdcall DllUnregisterServer() +@ stdcall KsGetMediaType(long ptr ptr long) +@ stdcall KsGetMediaTypeCount(ptr long ptr) +@ stdcall KsGetMultiplePinFactoryItems(ptr long long ptr) +@ stdcall KsOpenDefaultDevice(ptr long ptr) +@ stdcall KsResolveRequiredAttributes(ptr ptr) +@ stdcall KsSynchronousDeviceControl(ptr long ptr long ptr long ptr) diff --git a/reactos/dll/keyboard/kbdbga/kbdbga.def b/reactos/dll/keyboard/kbdbga/kbdbga.def index a22dace20aa..4858a5fb570 100644 --- a/reactos/dll/keyboard/kbdbga/kbdbga.def +++ b/reactos/dll/keyboard/kbdbga/kbdbga.def @@ -4,5 +4,5 @@ LIBRARY kbdbga.dll EXPORTS -KbdLayerDescriptor +KbdLayerDescriptor@0 ;EOF diff --git a/reactos/dll/keyboard/kbdbgm/kbdbgm.def b/reactos/dll/keyboard/kbdbgm/kbdbgm.def index b4633b9c142..79314113131 100644 --- a/reactos/dll/keyboard/kbdbgm/kbdbgm.def +++ b/reactos/dll/keyboard/kbdbgm/kbdbgm.def @@ -4,5 +4,5 @@ LIBRARY kbdbgm.dll EXPORTS -KbdLayerDescriptor +KbdLayerDescriptor@0 ;EOF diff --git a/reactos/dll/keyboard/kbdbgt/kbdbgt.def b/reactos/dll/keyboard/kbdbgt/kbdbgt.def index 2255c5c36ff..4519422ee14 100644 --- a/reactos/dll/keyboard/kbdbgt/kbdbgt.def +++ b/reactos/dll/keyboard/kbdbgt/kbdbgt.def @@ -4,5 +4,5 @@ LIBRARY kbdbgt.dll EXPORTS -KbdLayerDescriptor +KbdLayerDescriptor@0 ;EOF diff --git a/reactos/dll/keyboard/kbdsk/kbdsk.c b/reactos/dll/keyboard/kbdsk/kbdsk.c index 64f89724bea..e071140735e 100644 --- a/reactos/dll/keyboard/kbdsk/kbdsk.c +++ b/reactos/dll/keyboard/kbdsk/kbdsk.c @@ -41,9 +41,9 @@ ROSDATA USHORT scancode_to_vk[] = { '7', '8', '9', '0', VK_OEM_MINUS, VK_OEM_PLUS, VK_BACK, /* - 0f - */ - /* First Letters Row */ + /* First Letters Row - qwertZ */ VK_TAB, 'Q', 'W', 'E', - 'R', 'T', 'Y', 'U', + 'R', 'T', 'Z', 'U', 'I', 'O', 'P', VK_OEM_4, VK_OEM_6, VK_RETURN, /* - 1d - */ @@ -55,7 +55,7 @@ ROSDATA USHORT scancode_to_vk[] = { VK_LSHIFT, VK_OEM_7, /* - 2c - */ /* Third letters row */ - 'Z', 'X', 'C', 'V', + 'Y', 'X', 'C', 'V', 'B', 'N', 'M', VK_OEM_COMMA, VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT|KEXT, /* - 37 - */ @@ -253,8 +253,8 @@ ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = { { 'V', CAPS, {'v', 'V', 0x16, '@'} }, { 'W', CAPS, {'w', 'W', 0x17, '|'} }, { 'X', CAPS, {'x', 'X', 0x18, '#'} }, - { 'Y', CAPS, {'z', 'Z', 0x1a, WCH_NONE} }, // qwertZ - { 'Z', CAPS, {'y', 'Y', 0x19, '>'} }, + { 'Y', CAPS, {'y', 'Y', 0x19, WCH_NONE} }, + { 'Z', CAPS, {'z', 'Z', 0x1a, '>'} }, { 0, 0 } }; diff --git a/reactos/dll/ntdll/csr/capture.c b/reactos/dll/ntdll/csr/capture.c index 414331c9209..ed1c6f00709 100644 --- a/reactos/dll/ntdll/csr/capture.c +++ b/reactos/dll/ntdll/csr/capture.c @@ -2,7 +2,7 @@ * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel * FILE: lib/ntdll/csr/capture.c - * PURPOSE: routines for probing and capturing CSR API Messages + * PURPOSE: Routines for probing and capturing CSR API Messages * PROGRAMMER: Alex Ionescu (alex@relsoft.net) */ diff --git a/reactos/dll/ntdll/def/ntdll_i386.def b/reactos/dll/ntdll/def/ntdll_i386.def index 7508c08a3bc..ad9b6cdfe2c 100644 --- a/reactos/dll/ntdll/def/ntdll_i386.def +++ b/reactos/dll/ntdll/def/ntdll_i386.def @@ -1076,7 +1076,7 @@ toupper towlower towupper vsprintf -vDbgPrintExWithPrefix +vDbgPrintExWithPrefix@20 wcscat wcschr wcscmp diff --git a/reactos/dll/ntdll/main/arm/stubs_asm.s b/reactos/dll/ntdll/dispatch/arm/stubs_asm.s similarity index 100% rename from reactos/dll/ntdll/main/arm/stubs_asm.s rename to reactos/dll/ntdll/dispatch/arm/stubs_asm.s diff --git a/reactos/dll/ntdll/main/dispatch.c b/reactos/dll/ntdll/dispatch/dispatch.c similarity index 92% rename from reactos/dll/ntdll/main/dispatch.c rename to reactos/dll/ntdll/dispatch/dispatch.c index babb174cd96..6fd4f70024f 100644 --- a/reactos/dll/ntdll/main/dispatch.c +++ b/reactos/dll/ntdll/dispatch/dispatch.c @@ -1,6 +1,7 @@ -/* COPYRIGHT: See COPYING in the top level directory +/* + * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS NT Library - * FILE: lib/ntdll/main/dispatch.c + * FILE: dll/ntdll/dispatch/dispatch.c * PURPOSE: User-Mode NT Dispatchers * PROGRAMERS: Alex Ionescu (alex@relsoft.net) * David Welch diff --git a/reactos/dll/ntdll/main/i386/dispatch.S b/reactos/dll/ntdll/dispatch/i386/dispatch.S similarity index 95% rename from reactos/dll/ntdll/main/i386/dispatch.S rename to reactos/dll/ntdll/dispatch/i386/dispatch.S index ff15c626c12..526e5b8f189 100644 --- a/reactos/dll/ntdll/main/i386/dispatch.S +++ b/reactos/dll/ntdll/dispatch/i386/dispatch.S @@ -1,7 +1,7 @@ /* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS NT Library - * FILE: lib/ntdll/main/i386/dispatch.S + * FILE: dl/ntdll/dispatch/i386/dispatch.S * PURPOSE: User-Mode NT Dispatchers * PROGRAMMERS: Alex Ionescu (alex@relsoft.net) */ diff --git a/reactos/dll/ntdll/inc/ntdll.h b/reactos/dll/ntdll/include/ntdll.h similarity index 94% rename from reactos/dll/ntdll/inc/ntdll.h rename to reactos/dll/ntdll/include/ntdll.h index a78550bf761..cb8f21cd134 100644 --- a/reactos/dll/ntdll/inc/ntdll.h +++ b/reactos/dll/ntdll/include/ntdll.h @@ -1,7 +1,7 @@ /* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS System Libraries - * FILE: lib/ntdll/inc/ntdll.h + * FILE: dll/ntdll/include/ntdll.h * PURPOSE: Native Libary Header * PROGRAMMER: Alex Ionescu (alex@relsoft.net) */ diff --git a/reactos/dll/ntdll/inc/ntdllp.h b/reactos/dll/ntdll/include/ntdllp.h similarity index 95% rename from reactos/dll/ntdll/inc/ntdllp.h rename to reactos/dll/ntdll/include/ntdllp.h index 5e9265f1957..903c15e028c 100644 --- a/reactos/dll/ntdll/inc/ntdllp.h +++ b/reactos/dll/ntdll/include/ntdllp.h @@ -1,7 +1,7 @@ /* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS System Libraries - * FILE: lib/ntdll/inc/ntdllp.h + * FILE: dll/ntdll/include/ntdllp.h * PURPOSE: Native Libary Internal Header * PROGRAMMER: Alex Ionescu (alex@relsoft.net) */ diff --git a/reactos/dll/ntdll/ldr/elf.c b/reactos/dll/ntdll/ldr/elf.c index 0996481c22e..ecc82ce0c5d 100644 --- a/reactos/dll/ntdll/ldr/elf.c +++ b/reactos/dll/ntdll/ldr/elf.c @@ -1,6 +1,3 @@ -/* $Id$ -*/ - /* * REACTOS ELF LOADER * @@ -36,6 +33,7 @@ * $FreeBSD: src/libexec/rtld-elf/rtld.c,v 1.101 2004/11/02 09:42:21 ssouhlal Exp $ */ + /* * Dynamic linker for ELF. * diff --git a/reactos/dll/ntdll/ldr/startup.c b/reactos/dll/ntdll/ldr/startup.c index c0ec4f55ea2..350d9447fc2 100644 --- a/reactos/dll/ntdll/ldr/startup.c +++ b/reactos/dll/ntdll/ldr/startup.c @@ -1,5 +1,4 @@ -/* $Id$ - * +/* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel * FILE: lib/ntdll/ldr/startup.c diff --git a/reactos/dll/ntdll/ldr/utils.c b/reactos/dll/ntdll/ldr/utils.c index 7162be82864..641b98285e5 100644 --- a/reactos/dll/ntdll/ldr/utils.c +++ b/reactos/dll/ntdll/ldr/utils.c @@ -1,5 +1,4 @@ -/* $Id$ - * +/* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel * FILE: lib/ntdll/ldr/utils.c diff --git a/reactos/dll/ntdll/ntdll.rbuild b/reactos/dll/ntdll/ntdll.rbuild index 69f9720f422..06759b12e99 100644 --- a/reactos/dll/ntdll/ntdll.rbuild +++ b/reactos/dll/ntdll/ntdll.rbuild @@ -4,8 +4,8 @@ - inc - def + include + include/reactos/subsys @@ -25,11 +25,7 @@ dbgui.c - - startup.c - utils.c - - + dispatch.S @@ -44,6 +40,13 @@ dispatch.c + + ntdll.h + + + startup.c + utils.c + libsupp.c version.c @@ -51,8 +54,5 @@ ntdll.rc - - ntdll.h - \ No newline at end of file diff --git a/reactos/dll/ntdll/rtl/version.c b/reactos/dll/ntdll/rtl/version.c index 6150c8933ba..88cadb21d70 100644 --- a/reactos/dll/ntdll/rtl/version.c +++ b/reactos/dll/ntdll/rtl/version.c @@ -1,5 +1,4 @@ -/* $Id$ - * +/* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS system libraries * FILE: lib/ntdll/rtl/process.c diff --git a/reactos/dll/shellext/deskadp/lang/cs-CZ.rc b/reactos/dll/shellext/deskadp/lang/cs-CZ.rc new file mode 100644 index 00000000000..d54c68a45c7 --- /dev/null +++ b/reactos/dll/shellext/deskadp/lang/cs-CZ.rc @@ -0,0 +1,53 @@ +/* FILE: dll/shellext/deskadp/lang/cs-CZ.rc + * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) + * UPDATED: 2008-07-27 + */ + +LANGUAGE LANG_CZECH, SUBLANG_DEFAULT + +IDD_DISPLAYADAPTER DIALOGEX 0, 0, 252, 226 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Adaptйr" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Typ adaptйru", -1, 7, 3, 237, 50 + LTEXT "", IDC_ADAPTERNAME, 40, 17, 190, 20, SS_NOPREFIX + PUSHBUTTON "&Vlastnosti", IDC_ADAPTERPROPERTIES, 177, 33, 59, 14 + GROUPBOX "Adapter Information", -1, 7, 56, 237, 75 + LTEXT "Typ иipu:", -1, 13, 68, 58, 8 + LTEXT "", IDC_CHIPTYPE, 71, 68, 160, 8, SS_NOPREFIX + LTEXT "Typ DAC:", -1, 13, 80, 58, 8 + LTEXT "", IDC_DACTYPE, 71, 80, 160, 8, SS_NOPREFIX + LTEXT "Velikost pamмti:", -1, 13, 92, 58, 8 + LTEXT "", IDC_MEMORYSIZE, 71, 92, 160, 8, SS_NOPREFIX + LTEXT "Шetмzec adaptйru:", -1, 13, 104, 58, 8 + LTEXT "", IDC_ADAPTERSTRING, 71, 104, 160, 8, SS_NOPREFIX + LTEXT "BIOS informace:", -1, 13, 116, 58, 8 + LTEXT "", IDC_BIOSINFORMATION, 71, 116, 160, 8, SS_NOPREFIX + PUSHBUTTON "&Zobrazit vљechny reћimy...", IDC_LISTALLMODES, 7, 139, 75, 14 +END + +IDD_LISTALLMODES DIALOGEX 0, 0, 225, 135 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME +CAPTION "Zobrazit vљechny reћimy" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + DEFPUSHBUTTON "OK", IDOK, 112, 115, 50, 15 + PUSHBUTTON "Storno", IDCANCEL, 167, 115, 50, 15 + GROUPBOX "Seznam platnэch reћimщ", -1, 6, 7, 212, 98 + LISTBOX IDC_ALLVALIDMODES, 10, 20, 204, 87, LBS_NOTIFY | WS_VSCROLL +END + +STRINGTABLE +BEGIN + IDS_MODEFMT "%d x %d, %s, %s" + IDS_DEFREFRESHRATE "Vэchozн obnovovacн frekvence" + IDES_REFRESHRATEFMT "%d Hz" + IDS_4BPP "16 barev" + IDS_8BPP "256 barev" + IDS_15BPP "High Color (15 bitщ)" + IDS_16BPP "High Color (16 bitщ)" + IDS_24BPP "True Color (24 bitщ)" + IDS_32BPP "True Color (32 bitщ)" +END + diff --git a/reactos/dll/shellext/deskadp/lang/no-NO.rc b/reactos/dll/shellext/deskadp/lang/no-NO.rc new file mode 100644 index 00000000000..cbb0b3bd42b --- /dev/null +++ b/reactos/dll/shellext/deskadp/lang/no-NO.rc @@ -0,0 +1,48 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_DISPLAYADAPTER DIALOGEX 0, 0, 252, 226 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Kort" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Korttype", -1, 7, 3, 237, 50 + LTEXT "", IDC_ADAPTERNAME, 40, 17, 190, 20, SS_NOPREFIX + PUSHBUTTON "&Egenskaper", IDC_ADAPTERPROPERTIES, 177, 33, 59, 14 + GROUPBOX "Kortinformasjon", -1, 7, 56, 237, 75 + LTEXT "Brikketype:", -1, 13, 68, 58, 8 + LTEXT "", IDC_CHIPTYPE, 71, 68, 160, 8, SS_NOPREFIX + LTEXT "DAC-type:", -1, 13, 80, 58, 8 + LTEXT "", IDC_DACTYPE, 71, 80, 160, 8, SS_NOPREFIX + LTEXT "Minne stшrrelse:", -1, 13, 92, 58, 8 + LTEXT "", IDC_MEMORYSIZE, 71, 92, 160, 8, SS_NOPREFIX + LTEXT "Kortstreng:", -1, 13, 104, 58, 8 + LTEXT "", IDC_ADAPTERSTRING, 71, 104, 160, 8, SS_NOPREFIX + LTEXT "BIOS-informasjon:", -1, 13, 116, 58, 8 + LTEXT "", IDC_BIOSINFORMATION, 71, 116, 160, 8, SS_NOPREFIX + PUSHBUTTON "&Vis alle modier...", IDC_LISTALLMODES, 7, 139, 75, 14 +END + +IDD_LISTALLMODES DIALOGEX 0, 0, 225, 135 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME +CAPTION "Vis alle modier" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + DEFPUSHBUTTON "OK", IDOK, 112, 115, 50, 15 + PUSHBUTTON "Avbryt", IDCANCEL, 167, 115, 50, 15 + GROUPBOX "Liste over gyldige modier", -1, 6, 7, 212, 98 + LISTBOX IDC_ALLVALIDMODES, 10, 20, 204, 87, LBS_NOTIFY | WS_VSCROLL +END + +STRINGTABLE +BEGIN + IDS_MODEFMT "%d by %d, %s, %s" + IDS_DEFREFRESHRATE "Standard oppdateringshastighet" + IDES_REFRESHRATEFMT "%d Herts" + IDS_4BPP "16 Farger" + IDS_8BPP "256 Farger" + IDS_15BPP "Middels farger (15 bit)" + IDS_16BPP "Middels farger (16 bit)" + IDS_24BPP "Hшyest farger (24 bit)" + IDS_32BPP "Hшyest farger (32 bit)" +END + diff --git a/reactos/dll/shellext/deskadp/lang/ru-RU.rc b/reactos/dll/shellext/deskadp/lang/ru-RU.rc index a3b8838ccad..7b4e9e1ba90 100644 --- a/reactos/dll/shellext/deskadp/lang/ru-RU.rc +++ b/reactos/dll/shellext/deskadp/lang/ru-RU.rc @@ -40,9 +40,9 @@ BEGIN IDES_REFRESHRATEFMT "%d Гц" IDS_4BPP "16 цветов" IDS_8BPP "256 цветов" - IDS_15BPP "High Color (15 бит)" - IDS_16BPP "High Color (16 бит)" - IDS_24BPP "True Color (24 бита)" - IDS_32BPP "True Color (32 бита)" + IDS_15BPP "Высокое (15 бит)" + IDS_16BPP "Высокое (16 бит)" + IDS_24BPP "Самое высокое (24 бита)" + IDS_32BPP "Самое высокое (32 бита)" END diff --git a/reactos/dll/shellext/deskadp/rsrc.rc b/reactos/dll/shellext/deskadp/rsrc.rc index 21ce8e3eeb0..29c114efc6a 100644 --- a/reactos/dll/shellext/deskadp/rsrc.rc +++ b/reactos/dll/shellext/deskadp/rsrc.rc @@ -2,6 +2,7 @@ #include "resource.h" #include "lang/bg-BG.rc" +#include "lang/cs-CZ.rc" #include "lang/de-DE.rc" #include "lang/el-GR.rc" #include "lang/en-US.rc" @@ -9,6 +10,7 @@ #include "lang/eu-ES.rc" #include "lang/fr-FR.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/shellext/deskmon/lang/cs-CZ.rc b/reactos/dll/shellext/deskmon/lang/cs-CZ.rc new file mode 100644 index 00000000000..454c6d37b4a --- /dev/null +++ b/reactos/dll/shellext/deskmon/lang/cs-CZ.rc @@ -0,0 +1,27 @@ +/* FILE: dll/shellext/deskmon/lang/cs-CZ.rc + * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) + * UPDATED: 2008-07-27 + */ + +LANGUAGE LANG_CZECH, SUBLANG_DEFAULT + +IDD_MONITOR DIALOGEX 0, 0, 252, 226 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Monitor" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Typ monitoru", -1, 7, 3, 237, 52 + LTEXT "", IDC_MONITORNAME, 40, 17, 190, 20, SS_NOPREFIX + LISTBOX IDC_MONITORLIST, 40, 13, 196, 30, WS_VSCROLL + PUSHBUTTON "&Vlastnosti", IDC_MONITORPROPERTIES, 177, 35, 59, 14, WS_DISABLED + GROUPBOX "Nastavenн monitoru", IDS_MONITORSETTINGSGROUP, 7, 58, 237, 63 + LTEXT "&Obnovovacн frekvence obrazovky:", IDS_REFRESHRATELABEL, 13, 73, 225, 8 + COMBOBOX IDC_REFRESHRATE, 13, 85, 225, 200, WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + AUTOCHECKBOX "&Skrэt reћimy, kterй tento monitor nedokбћe zobrazit", IDC_PRUNINGCHECK, 13, 106, 225, 10 +END + +STRINGTABLE +BEGIN + IDS_USEDEFFRQUENCY "Pouћнt vэchozн nastavenн hardwaru" + IDS_FREQFMT "%u Hz" +END diff --git a/reactos/dll/shellext/deskmon/lang/no-NO.rc b/reactos/dll/shellext/deskmon/lang/no-NO.rc new file mode 100644 index 00000000000..002a94ba29b --- /dev/null +++ b/reactos/dll/shellext/deskmon/lang/no-NO.rc @@ -0,0 +1,22 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_MONITOR DIALOGEX 0, 0, 252, 226 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Skjerm" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Skjermtype", -1, 7, 3, 237, 52 + LTEXT "", IDC_MONITORNAME, 40, 17, 190, 20, SS_NOPREFIX + LISTBOX IDC_MONITORLIST, 40, 13, 196, 30, WS_VSCROLL + PUSHBUTTON "&Egenskaper", IDC_MONITORPROPERTIES, 177, 35, 59, 14, WS_DISABLED + GROUPBOX "Innstillinger for skjerm", IDS_MONITORSETTINGSGROUP, 7, 58, 237, 63 + LTEXT "&Skjermoppdateringsfrekvens:", IDS_REFRESHRATELABEL, 13, 73, 225, 8 + COMBOBOX IDC_REFRESHRATE, 13, 85, 225, 200, WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + AUTOCHECKBOX "&Skjul modi som denne skjermen ikke kan vise", IDC_PRUNINGCHECK, 13, 106, 225, 10 +END + +STRINGTABLE +BEGIN + IDS_USEDEFFRQUENCY "Bruk standard maskinvare innstilling" + IDS_FREQFMT "%u Herts" +END diff --git a/reactos/dll/shellext/deskmon/rsrc.rc b/reactos/dll/shellext/deskmon/rsrc.rc index ff0159e0722..55f9f572f39 100644 --- a/reactos/dll/shellext/deskmon/rsrc.rc +++ b/reactos/dll/shellext/deskmon/rsrc.rc @@ -2,6 +2,7 @@ #include "resource.h" #include "lang/bg-BG.rc" +#include "lang/cs-CZ.rc" #include "lang/de-DE.rc" #include "lang/el-GR.rc" #include "lang/en-US.rc" @@ -9,6 +10,7 @@ #include "lang/eu-ES.rc" #include "lang/fr-FR.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/sk-SK.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" diff --git a/reactos/dll/shellext/fontext/fontext.def b/reactos/dll/shellext/fontext/fontext.def deleted file mode 100644 index 1509694f3b4..00000000000 --- a/reactos/dll/shellext/fontext/fontext.def +++ /dev/null @@ -1,6 +0,0 @@ -LIBRARY fontext.dll -EXPORTS -DllCanUnloadNow -DllGetClassObject -DllRegisterServer -DllUnregisterServer diff --git a/reactos/dll/shellext/fontext/fontext.rbuild b/reactos/dll/shellext/fontext/fontext.rbuild index a610f9f3772..7986fee6620 100644 --- a/reactos/dll/shellext/fontext/fontext.rbuild +++ b/reactos/dll/shellext/fontext/fontext.rbuild @@ -1,5 +1,5 @@ - + . 0x0500 0x0600 @@ -18,4 +18,5 @@ fontext.c regsvr.c fontext.rc + fontext.spec diff --git a/reactos/dll/shellext/fontext/fontext.spec b/reactos/dll/shellext/fontext/fontext.spec new file mode 100644 index 00000000000..f0c566e949d --- /dev/null +++ b/reactos/dll/shellext/fontext/fontext.spec @@ -0,0 +1,4 @@ +@ stdcall DllCanUnloadNow() +@ stdcall DllGetClassObject(long long ptr) +@ stdcall DllRegisterServer() +@ stdcall DllUnregisterServer() diff --git a/reactos/dll/shellext/slayer/lang/cs-CZ.rc b/reactos/dll/shellext/slayer/lang/cs-CZ.rc new file mode 100644 index 00000000000..063bad46de8 --- /dev/null +++ b/reactos/dll/shellext/slayer/lang/cs-CZ.rc @@ -0,0 +1,43 @@ +/* FILE: dll/shellext/slayer/lang/cs-CZ.rc + * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) + * UPDATED: 2008-07-27 + */ + +LANGUAGE LANG_CZECH, SUBLANG_DEFAULT + +IDD_SLAYERSHEET DIALOGEX 0, 0, 224, 226 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Kompatibilita" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Pokud jsou problйmy se spouљtмnнm tohoto programu v systйmu ReactOS, zvolte operaиnн systйm, kterэ ReactOS tomuto programu sdмlн.", -1, 7,7,210,31 + GROUPBOX "Reћim kompatibility", IDC_COMPATGROUP, 7,41,210,49 + CHECKBOX "Spustit tento program v reћimu kompatibility pro:", IDC_CHKRUNCOMPATIBILITY, 18,57,188,10, BS_AUTOCHECKBOX | WS_TABSTOP + COMBOBOX IDC_COMPATIBILITYMODE, 18,70,188,85, CBS_HASSTRINGS | CBS_DROPDOWNLIST | WS_TABSTOP | WS_DISABLED + GROUPBOX "Nastavenн zobrazenн", -1, 7,99,210,61, BS_GROUPBOX | WS_DISABLED + CHECKBOX "Spustit v 256 barvбch", IDC_CHKRUNIN256COLORS, 18,114,188,10, BS_AUTOCHECKBOX | WS_TABSTOP | WS_DISABLED + CHECKBOX "Spustit v rozliљenн 640x480", IDC_CHKRUNIN640480RES, 18,129,188,10, BS_AUTOCHECKBOX | WS_TABSTOP | WS_DISABLED + CHECKBOX "Vypnout vizuбlnн motivy", IDC_CHKDISABLEVISUALTHEMES, 18,144,188,10, BS_AUTOCHECKBOX | WS_TABSTOP | WS_DISABLED + PUSHBUTTON "Up&ravit reћimy kompatibility...", IDC_EDITCOMPATIBILITYMODES, 117,167,100,15 + /* CONTROL "Dalљн informace o kompatibilitм programщ.", IDC_INFOLINK, "SysLink", WS_CHILD | WS_TABSTOP | WS_VISIBLE, 7,207,210,10, WS_EX_NOPARENTNOTIFY */ +END + +IDD_EDITCOMPATIBILITYMODES DIALOGEX 0, 0, 230, 139 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Upravit reћimy kompatibility" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LISTBOX IDC_COMPATIBILITYMODE, 9,6,148,108, LBS_NOTIFY | LBS_WANTKEYBOARDINPUT | WS_BORDER + PUSHBUTTON "&Pшidat...", IDC_ADD, 162,6,60,14, WS_DISABLED + PUSHBUTTON "&Upravit...", IDC_EDIT, 162,24,60,14, WS_DISABLED + PUSHBUTTON "S&mazat", IDC_DELETE, 162,42,60,14, WS_DISABLED + PUSHBUTTON "&OK", IDOK, 95,116,60,14 + PUSHBUTTON "&Storno", IDCANCEL, 162,116,60,14 +END + +STRINGTABLE +BEGIN + IDS_SLAYER "Slayer" + IDS_DESCRIPTION "Application Compatibility Layer Shell Extension" +END + diff --git a/reactos/dll/shellext/slayer/lang/no-NO.rc b/reactos/dll/shellext/slayer/lang/no-NO.rc new file mode 100644 index 00000000000..62011ab0c42 --- /dev/null +++ b/reactos/dll/shellext/slayer/lang/no-NO.rc @@ -0,0 +1,38 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_SLAYERSHEET DIALOGEX 0, 0, 224, 226 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Kompaktibilitet" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Hvis du har problemer med е kjшre programmer i ReactOS, velg et operativsystem ReactOS skulle fungere for programmet.", -1, 7,7,210,31 + GROUPBOX "Kompaktibilitetsmodus", IDC_COMPATGROUP, 7,41,210,49 + CHECKBOX "Kjшr dette programmet i kompaktibilitetsmodus for:", IDC_CHKRUNCOMPATIBILITY, 18,57,188,10, BS_AUTOCHECKBOX | WS_TABSTOP + COMBOBOX IDC_COMPATIBILITYMODE, 18,70,188,85, CBS_HASSTRINGS | CBS_DROPDOWNLIST | WS_TABSTOP | WS_DISABLED + GROUPBOX "Skjerminnstillinger", -1, 7,99,210,61, BS_GROUPBOX | WS_DISABLED + CHECKBOX "Kjшr i 256 farger", IDC_CHKRUNIN256COLORS, 18,114,188,10, BS_AUTOCHECKBOX | WS_TABSTOP | WS_DISABLED + CHECKBOX "Kjшr med skjermopplшsning pе 640x480", IDC_CHKRUNIN640480RES, 18,129,188,10, BS_AUTOCHECKBOX | WS_TABSTOP | WS_DISABLED + CHECKBOX "Deaktiver visuelle temaer", IDC_CHKDISABLEVISUALTHEMES, 18,144,188,10, BS_AUTOCHECKBOX | WS_TABSTOP | WS_DISABLED + PUSHBUTTON "E&dit compatibility modes...", IDC_EDITCOMPATIBILITYMODES, 117,167,100,15 + /* CONTROL "Lжr mere om program kompaktibilitet.", IDC_INFOLINK, "SysLink", WS_CHILD | WS_TABSTOP | WS_VISIBLE, 7,207,210,10, WS_EX_NOPARENTNOTIFY */ +END + +IDD_EDITCOMPATIBILITYMODES DIALOGEX 0, 0, 230, 139 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Rediger kompaktibilitetsmodus" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LISTBOX IDC_COMPATIBILITYMODE, 9,6,148,108, LBS_NOTIFY | LBS_WANTKEYBOARDINPUT | WS_BORDER + PUSHBUTTON "&Legg til...", IDC_ADD, 162,6,60,14, WS_DISABLED + PUSHBUTTON "&Rediger...", IDC_EDIT, 162,24,60,14, WS_DISABLED + PUSHBUTTON "&Slett", IDC_DELETE, 162,42,60,14, WS_DISABLED + PUSHBUTTON "&OK", IDOK, 95,116,60,14 + PUSHBUTTON "&Avbryt", IDCANCEL, 162,116,60,14 +END + +STRINGTABLE +BEGIN + IDS_SLAYER "Slayer" + IDS_DESCRIPTION "Application Compatibility Layer Shell Extension" +END + diff --git a/reactos/dll/shellext/slayer/rsrc.rc b/reactos/dll/shellext/slayer/rsrc.rc index d7dab3a0da3..fb3c0393bdc 100644 --- a/reactos/dll/shellext/slayer/rsrc.rc +++ b/reactos/dll/shellext/slayer/rsrc.rc @@ -2,6 +2,7 @@ #include "resource.h" #include "lang/bg-BG.rc" +#include "lang/cs-CZ.rc" #include "lang/de-DE.rc" #include "lang/en-US.rc" #include "lang/es-ES.rc" @@ -11,6 +12,7 @@ #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/nl-NL.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/win32/acledit/acledit.def b/reactos/dll/win32/acledit/acledit.def deleted file mode 100644 index 9c6984aa62f..00000000000 --- a/reactos/dll/win32/acledit/acledit.def +++ /dev/null @@ -1,12 +0,0 @@ -LIBRARY acledit.dll - -EXPORTS -EditAuditInfo -EditOwnerInfo -EditPermissionInfo -FMExtensionProcW -SedDiscretionaryAclEditor -SedSystemAclEditor -SedTakeOwnership - -; EOF diff --git a/reactos/dll/win32/acledit/acledit.rbuild b/reactos/dll/win32/acledit/acledit.rbuild index e71a8ee9ccc..cad5f42e0aa 100644 --- a/reactos/dll/win32/acledit/acledit.rbuild +++ b/reactos/dll/win32/acledit/acledit.rbuild @@ -1,5 +1,5 @@ - + . @@ -11,4 +11,5 @@ acledit.c stubs.c acledit.rc + acledit.spec diff --git a/reactos/dll/win32/acledit/acledit.spec b/reactos/dll/win32/acledit/acledit.spec new file mode 100644 index 00000000000..0d2d559f9fe --- /dev/null +++ b/reactos/dll/win32/acledit/acledit.spec @@ -0,0 +1,7 @@ +@ stdcall EditAuditInfo(long) +@ stdcall EditOwnerInfo(long) +@ stdcall EditPermissionInfo(long) +@ stdcall FMExtensionProcW(ptr long long) +@ stdcall SedDiscretionaryAclEditor(ptr ptr wstr ptr ptr wstr ptr ptr ptr long long ptr long) +@ stdcall SedSystemAclEditor(ptr ptr wstr ptr ptr wstr ptr ptr ptr long ptr long) +@ stdcall SedTakeOwnership(ptr ptr wstr wstr wstr long ptr ptr ptr long long ptr ptr long) diff --git a/reactos/dll/win32/aclui/aclui.rc b/reactos/dll/win32/aclui/aclui.rc index 6bfcfb46a98..7f6f9ad3cd8 100644 --- a/reactos/dll/win32/aclui/aclui.rc +++ b/reactos/dll/win32/aclui/aclui.rc @@ -20,6 +20,7 @@ IDB_USRGRPIMAGES BITMAP "res/usrgrp.bmp" #include "aclui_It.rc" #include "aclui_Ja.rc" #include "aclui_Nl.rc" +#include "aclui_No.rc" #include "aclui_Pl.rc" #include "aclui_Ru.rc" #include "aclui_Sv.rc" diff --git a/reactos/dll/win32/aclui/aclui_No.rc b/reactos/dll/win32/aclui/aclui_No.rc new file mode 100644 index 00000000000..989bb8dffe7 --- /dev/null +++ b/reactos/dll/win32/aclui/aclui_No.rc @@ -0,0 +1,32 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_SECPAGE DIALOGEX 0, 0, 227, 215 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE | WS_CAPTION +CAPTION "Sikkerhet" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "&Grupper eller brukernavn:", -1, 7, 21, 105, 8 + CONTROL "", IDC_PRINCIPALS, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, 7, 31, 213, 52, WS_EX_NOPARENTNOTIFY | WS_EX_CLIENTEDGE + LTEXT "&Eier:", -1, 7, 7, 49, 8 + EDITTEXT IDC_OWNER, 63, 4, 156, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_READONLY + PUSHBUTTON "L&egg til...", IDC_ADD_PRINCIPAL, 116, 87, 50, 14 + PUSHBUTTON "&Fjern", IDC_REMOVE_PRINCIPAL, 170, 87, 50, 14 + LTEXT "", IDC_LABEL_PERMISSIONS_FOR, 7, 107, 105, 8, SS_LEFT | SS_NOPREFIX + LTEXT "Tilatt", IDC_LABEL_ALLOW, 135, 107, 32, 8, SS_CENTER + LTEXT "Nekte", IDC_LABEL_DENY, 176, 107, 32, 8, SS_CENTER + CONTROL "", IDC_ACE_CHECKLIST, "CHECKLIST_ACLUI", WS_CHILD | WS_VISIBLE | WS_TABSTOP, 7, 117, 213, 72, WS_EX_CLIENTEDGE + LTEXT "For spesielle tilatelser eller for avanserte innstillinger, trykk pе avansert.", IDC_LABEL_ADVANCED, 7, 194, 153, 16, SS_LEFT + PUSHBUTTON "A&vansert", IDC_ADVANCED, 165, 194, 55, 14 +END + +STRINGTABLE DISCARDABLE +{ + IDS_PSP_TITLE "Tilatelser for %1" + IDS_UNKNOWN "Ukjent" + IDS_SPECIAL_PERMISSIONS "Spessielle tilatelser" + IDS_PERMISSIONS_FOR "Tilatelser for %1" + IDS_PERMISSIONS "Tilatelser" + IDS_USERDOMAINFORMAT "%1 (%2\\%3)" + IDS_USERFORMAT "%1" +} + diff --git a/reactos/dll/win32/advapi32/advapi32.rbuild b/reactos/dll/win32/advapi32/advapi32.rbuild index 2907beddaf3..e92c7069f37 100644 --- a/reactos/dll/win32/advapi32/advapi32.rbuild +++ b/reactos/dll/win32/advapi32/advapi32.rbuild @@ -42,6 +42,7 @@ ac.c audit.c + cred.c lsa.c misc.c sec.c diff --git a/reactos/dll/win32/advapi32/crypt/crypt.h b/reactos/dll/win32/advapi32/crypt/crypt.h index 2548d5731b1..b36499d574d 100644 --- a/reactos/dll/win32/advapi32/crypt/crypt.h +++ b/reactos/dll/win32/advapi32/crypt/crypt.h @@ -113,6 +113,7 @@ VOID WINAPI MD4Update( MD4_CTX *ctx, const unsigned char *buf, unsigned int len VOID WINAPI MD4Final(MD4_CTX *ctx); void arc4_init(arc4_info *a4i, const BYTE *key, unsigned int keyLen); void arc4_ProcessString(arc4_info *a4i, BYTE *inoutString, unsigned int length); +NTSTATUS WINAPI SystemFunction032(struct ustring *data, struct ustring *key); #endif /* __WINE_CRYPT_H_ */ diff --git a/reactos/dll/win32/advapi32/reg/reg.c b/reactos/dll/win32/advapi32/reg/reg.c index 099bc4a7c0b..fd65e615dc2 100644 --- a/reactos/dll/win32/advapi32/reg/reg.c +++ b/reactos/dll/win32/advapi32/reg/reg.c @@ -1831,7 +1831,11 @@ RegGetValueW( HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, hKey, debugstr_w(pszSubKey), debugstr_w(pszValue), dwFlags, pdwType, pvData, pcbData, cbData); - if ((dwFlags & RRF_RT_REG_EXPAND_SZ) && !(dwFlags & RRF_NOEXPAND)) + if (pvData && !pcbData) + return ERROR_INVALID_PARAMETER; + + if ((dwFlags & RRF_RT_REG_EXPAND_SZ) && !(dwFlags & RRF_NOEXPAND) && + ((dwFlags & RRF_RT_ANY) != RRF_RT_ANY)) return ERROR_INVALID_PARAMETER; if (pszSubKey && pszSubKey[0]) @@ -1849,7 +1853,7 @@ RegGetValueW( HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, (dwType == REG_EXPAND_SZ && !(dwFlags & RRF_NOEXPAND))) { do { - if (pvBuf) HeapFree(GetProcessHeap(), 0, pvBuf); + HeapFree(GetProcessHeap(), 0, pvBuf); pvBuf = HeapAlloc(GetProcessHeap(), 0, cbData); if (!pvBuf) @@ -1858,7 +1862,7 @@ RegGetValueW( HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, break; } - if (ret == ERROR_MORE_DATA) + if (ret == ERROR_MORE_DATA || !pvData) ret = RegQueryValueExW(hKey, pszValue, NULL, &dwType, pvBuf, &cbData); else @@ -1876,19 +1880,20 @@ RegGetValueW( HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, if (ret == ERROR_SUCCESS) { + /* Recheck dwType in case it changed since the first call */ if (dwType == REG_EXPAND_SZ) { cbData = ExpandEnvironmentStringsW(pvBuf, pvData, - pcbData ? *pcbData : 0); + pcbData ? *pcbData : 0) * sizeof(WCHAR); dwType = REG_SZ; - if(pcbData && cbData > *pcbData) + if(pvData && pcbData && cbData > *pcbData) ret = ERROR_MORE_DATA; } - else if (pcbData) + else if (pvData) CopyMemory(pvData, pvBuf, *pcbData); } - if (pvBuf) HeapFree(GetProcessHeap(), 0, pvBuf); + HeapFree(GetProcessHeap(), 0, pvBuf); } if (pszSubKey && pszSubKey[0]) @@ -1896,7 +1901,7 @@ RegGetValueW( HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, RegpApplyRestrictions(dwFlags, dwType, cbData, &ret); - if (pcbData && ret != ERROR_SUCCESS && (dwFlags & RRF_ZEROONFAILURE)) + if (pvData && ret != ERROR_SUCCESS && (dwFlags & RRF_ZEROONFAILURE)) ZeroMemory(pvData, *pcbData); if (pdwType) *pdwType = dwType; @@ -1924,7 +1929,11 @@ RegGetValueA( HKEY hKey, LPCSTR pszSubKey, LPCSTR pszValue, hKey, pszSubKey, pszValue, dwFlags, pdwType, pvData, pcbData, cbData); - if ((dwFlags & RRF_RT_REG_EXPAND_SZ) && !(dwFlags & RRF_NOEXPAND)) + if (pvData && !pcbData) + return ERROR_INVALID_PARAMETER; + + if ((dwFlags & RRF_RT_REG_EXPAND_SZ) && !(dwFlags & RRF_NOEXPAND) && + ((dwFlags & RRF_RT_ANY) != RRF_RT_ANY)) return ERROR_INVALID_PARAMETER; if (pszSubKey && pszSubKey[0]) @@ -1942,7 +1951,7 @@ RegGetValueA( HKEY hKey, LPCSTR pszSubKey, LPCSTR pszValue, (dwType == REG_EXPAND_SZ && !(dwFlags & RRF_NOEXPAND))) { do { - if (pvBuf) HeapFree(GetProcessHeap(), 0, pvBuf); + HeapFree(GetProcessHeap(), 0, pvBuf); pvBuf = HeapAlloc(GetProcessHeap(), 0, cbData); if (!pvBuf) @@ -1951,7 +1960,7 @@ RegGetValueA( HKEY hKey, LPCSTR pszSubKey, LPCSTR pszValue, break; } - if (ret == ERROR_MORE_DATA) + if (ret == ERROR_MORE_DATA || !pvData) ret = RegQueryValueExA(hKey, pszValue, NULL, &dwType, pvBuf, &cbData); else @@ -1969,19 +1978,20 @@ RegGetValueA( HKEY hKey, LPCSTR pszSubKey, LPCSTR pszValue, if (ret == ERROR_SUCCESS) { + /* Recheck dwType in case it changed since the first call */ if (dwType == REG_EXPAND_SZ) { cbData = ExpandEnvironmentStringsA(pvBuf, pvData, pcbData ? *pcbData : 0); dwType = REG_SZ; - if(pcbData && cbData > *pcbData) + if(pvData && pcbData && cbData > *pcbData) ret = ERROR_MORE_DATA; } - else if (pcbData) + else if (pvData) CopyMemory(pvData, pvBuf, *pcbData); } - if (pvBuf) HeapFree(GetProcessHeap(), 0, pvBuf); + HeapFree(GetProcessHeap(), 0, pvBuf); } if (pszSubKey && pszSubKey[0]) @@ -1989,7 +1999,7 @@ RegGetValueA( HKEY hKey, LPCSTR pszSubKey, LPCSTR pszValue, RegpApplyRestrictions(dwFlags, dwType, cbData, &ret); - if (pcbData && ret != ERROR_SUCCESS && (dwFlags & RRF_ZEROONFAILURE)) + if (pvData && ret != ERROR_SUCCESS && (dwFlags & RRF_ZEROONFAILURE)) ZeroMemory(pvData, *pcbData); if (pdwType) *pdwType = dwType; diff --git a/reactos/dll/win32/advapi32/sec/cred.c b/reactos/dll/win32/advapi32/sec/cred.c new file mode 100644 index 00000000000..13d29d56358 --- /dev/null +++ b/reactos/dll/win32/advapi32/sec/cred.c @@ -0,0 +1,1701 @@ +/* + * Credential Management APIs + * + * Copyright 2007 Robert Shearman for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include + +#include "windef.h" +#include "winbase.h" +#include "winreg.h" +#include "wincred.h" +#include "winternl.h" +#include "../crypt/crypt.h" + +#include "wine/unicode.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(cred); + +/* the size of the ARC4 key used to encrypt the password data */ +#define KEY_SIZE 8 + +static const WCHAR wszCredentialManagerKey[] = {'S','o','f','t','w','a','r','e','\\','W','i','n','e','\\', + 'C','r','e','d','e','n','t','i','a','l',' ','M','a','n','a','g','e','r',0}; +static const WCHAR wszEncryptionKeyValue[] = {'E','n','c','r','y','p','t','i','o','n','K','e','y',0}; + +static const WCHAR wszFlagsValue[] = {'F','l','a','g','s',0}; +static const WCHAR wszTypeValue[] = {'T','y','p','e',0}; +static const WCHAR wszCommentValue[] = {'C','o','m','m','e','n','t',0}; +static const WCHAR wszLastWrittenValue[] = {'L','a','s','t','W','r','i','t','t','e','n',0}; +static const WCHAR wszPersistValue[] = {'P','e','r','s','i','s','t',0}; +static const WCHAR wszTargetAliasValue[] = {'T','a','r','g','e','t','A','l','i','a','s',0}; +static const WCHAR wszUserNameValue[] = {'U','s','e','r','N','a','m','e',0}; +static const WCHAR wszPasswordValue[] = {'P','a','s','s','w','o','r','d',0}; + +static DWORD read_credential_blob(HKEY hkey, const BYTE key_data[KEY_SIZE], + LPBYTE credential_blob, + DWORD *credential_blob_size) +{ + DWORD ret; + DWORD type; + + *credential_blob_size = 0; + ret = RegQueryValueExW(hkey, wszPasswordValue, 0, &type, NULL, credential_blob_size); + if (ret != ERROR_SUCCESS) + return ret; + else if (type != REG_BINARY) + return ERROR_REGISTRY_CORRUPT; + if (credential_blob) + { + struct ustring data; + struct ustring key; + + ret = RegQueryValueExW(hkey, wszPasswordValue, 0, &type, (LPVOID)credential_blob, + credential_blob_size); + if (ret != ERROR_SUCCESS) + return ret; + else if (type != REG_BINARY) + return ERROR_REGISTRY_CORRUPT; + + key.Length = key.MaximumLength = KEY_SIZE; + key.Buffer = (unsigned char *)key_data; + + data.Length = data.MaximumLength = *credential_blob_size; + data.Buffer = credential_blob; + SystemFunction032(&data, &key); + } + return ERROR_SUCCESS; +} + +static DWORD registry_read_credential(HKEY hkey, PCREDENTIALW credential, + const BYTE key_data[KEY_SIZE], + char *buffer, DWORD *len) +{ + DWORD type; + DWORD ret; + DWORD count; + + ret = RegQueryValueExW(hkey, NULL, 0, &type, NULL, &count); + if (ret != ERROR_SUCCESS) + return ret; + else if (type != REG_SZ) + return ERROR_REGISTRY_CORRUPT; + *len += count; + if (credential) + { + credential->TargetName = (LPWSTR)buffer; + ret = RegQueryValueExW(hkey, NULL, 0, &type, (LPVOID)credential->TargetName, + &count); + if (ret != ERROR_SUCCESS || type != REG_SZ) return ret; + buffer += count; + } + + ret = RegQueryValueExW(hkey, wszCommentValue, 0, &type, NULL, &count); + if (ret != ERROR_FILE_NOT_FOUND && ret != ERROR_SUCCESS) + return ret; + else if (type != REG_SZ) + return ERROR_REGISTRY_CORRUPT; + *len += count; + if (credential) + { + credential->Comment = (LPWSTR)buffer; + ret = RegQueryValueExW(hkey, wszCommentValue, 0, &type, (LPVOID)credential->Comment, + &count); + if (ret == ERROR_FILE_NOT_FOUND) + credential->Comment = NULL; + else if (ret != ERROR_SUCCESS) + return ret; + else if (type != REG_SZ) + return ERROR_REGISTRY_CORRUPT; + else + buffer += count; + } + + ret = RegQueryValueExW(hkey, wszTargetAliasValue, 0, &type, NULL, &count); + if (ret != ERROR_FILE_NOT_FOUND && ret != ERROR_SUCCESS) + return ret; + else if (type != REG_SZ) + return ERROR_REGISTRY_CORRUPT; + *len += count; + if (credential) + { + credential->TargetAlias = (LPWSTR)buffer; + ret = RegQueryValueExW(hkey, wszTargetAliasValue, 0, &type, (LPVOID)credential->TargetAlias, + &count); + if (ret == ERROR_FILE_NOT_FOUND) + credential->TargetAlias = NULL; + else if (ret != ERROR_SUCCESS) + return ret; + else if (type != REG_SZ) + return ERROR_REGISTRY_CORRUPT; + else + buffer += count; + } + + ret = RegQueryValueExW(hkey, wszUserNameValue, 0, &type, NULL, &count); + if (ret != ERROR_FILE_NOT_FOUND && ret != ERROR_SUCCESS) + return ret; + else if (type != REG_SZ) + return ERROR_REGISTRY_CORRUPT; + *len += count; + if (credential) + { + credential->UserName = (LPWSTR)buffer; + ret = RegQueryValueExW(hkey, wszUserNameValue, 0, &type, (LPVOID)credential->UserName, + &count); + if (ret == ERROR_FILE_NOT_FOUND) + { + credential->UserName = NULL; + ret = ERROR_SUCCESS; + } + else if (ret != ERROR_SUCCESS) + return ret; + else if (type != REG_SZ) + return ERROR_REGISTRY_CORRUPT; + else + buffer += count; + } + + ret = read_credential_blob(hkey, key_data, NULL, &count); + if (ret != ERROR_FILE_NOT_FOUND && ret != ERROR_SUCCESS) + return ret; + *len += count; + if (credential) + { + credential->CredentialBlob = (LPBYTE)buffer; + ret = read_credential_blob(hkey, key_data, credential->CredentialBlob, &count); + if (ret == ERROR_FILE_NOT_FOUND) + { + credential->CredentialBlob = NULL; + ret = ERROR_SUCCESS; + } + else if (ret != ERROR_SUCCESS) + return ret; + credential->CredentialBlobSize = count; + buffer += count; + } + + /* FIXME: Attributes */ + if (credential) + { + credential->AttributeCount = 0; + credential->Attributes = NULL; + } + + if (!credential) return ERROR_SUCCESS; + + count = sizeof(credential->Flags); + ret = RegQueryValueExW(hkey, wszFlagsValue, NULL, &type, (LPVOID)&credential->Flags, + &count); + if (ret != ERROR_SUCCESS) + return ret; + else if (type != REG_DWORD) + return ERROR_REGISTRY_CORRUPT; + count = sizeof(credential->Type); + ret = RegQueryValueExW(hkey, wszTypeValue, NULL, &type, (LPVOID)&credential->Type, + &count); + if (ret != ERROR_SUCCESS) + return ret; + else if (type != REG_DWORD) + return ERROR_REGISTRY_CORRUPT; + + count = sizeof(credential->LastWritten); + ret = RegQueryValueExW(hkey, wszLastWrittenValue, NULL, &type, (LPVOID)&credential->LastWritten, + &count); + if (ret != ERROR_SUCCESS) + return ret; + else if (type != REG_BINARY) + return ERROR_REGISTRY_CORRUPT; + count = sizeof(credential->Persist); + ret = RegQueryValueExW(hkey, wszPersistValue, NULL, &type, (LPVOID)&credential->Persist, + &count); + if (ret == ERROR_SUCCESS && type != REG_DWORD) + return ERROR_REGISTRY_CORRUPT; + return ret; +} + +#ifdef __APPLE__ +static DWORD mac_read_credential_from_item(SecKeychainItemRef item, BOOL require_password, + PCREDENTIALW credential, char *buffer, + DWORD *len) +{ + OSStatus status; + UInt32 i; + UInt32 cred_blob_len; + void *cred_blob; + LPWSTR domain = NULL; + LPWSTR user = NULL; + BOOL user_name_present = FALSE; + SecKeychainAttributeInfo info; + SecKeychainAttributeList *attr_list; + UInt32 info_tags[] = { kSecServerItemAttr, kSecSecurityDomainItemAttr, kSecAccountItemAttr, + kSecCommentItemAttr, kSecCreationDateItemAttr }; + info.count = sizeof(info_tags)/sizeof(info_tags[0]); + info.tag = info_tags; + info.format = NULL; + status = SecKeychainItemCopyAttributesAndData(item, &info, NULL, &attr_list, &cred_blob_len, &cred_blob); + if (status == errSecAuthFailed && !require_password) + { + cred_blob_len = 0; + cred_blob = NULL; + status = SecKeychainItemCopyAttributesAndData(item, &info, NULL, &attr_list, &cred_blob_len, NULL); + } + if (status != noErr) + { + WARN("SecKeychainItemCopyAttributesAndData returned status %ld\n", status); + return ERROR_NOT_FOUND; + } + + for (i = 0; i < attr_list->count; i++) + if (attr_list->attr[i].tag == kSecAccountItemAttr && attr_list->attr[i].data) + { + user_name_present = TRUE; + break; + } + if (!user_name_present) + { + WARN("no kSecAccountItemAttr for item\n"); + return ERROR_NOT_FOUND; + } + + if (buffer) + { + credential->Flags = 0; + credential->Type = CRED_TYPE_DOMAIN_PASSWORD; + credential->TargetName = NULL; + credential->Comment = NULL; + memset(&credential->LastWritten, 0, sizeof(credential->LastWritten)); + credential->CredentialBlobSize = 0; + credential->CredentialBlob = NULL; + credential->Persist = CRED_PERSIST_LOCAL_MACHINE; + credential->AttributeCount = 0; + credential->Attributes = NULL; + credential->TargetAlias = NULL; + credential->UserName = NULL; + } + for (i = 0; i < attr_list->count; i++) + { + switch (attr_list->attr[i].tag) + { + case kSecServerItemAttr: + TRACE("kSecServerItemAttr: %.*s\n", (int)attr_list->attr[i].length, + (char *)attr_list->attr[i].data); + if (!attr_list->attr[i].data) continue; + if (buffer) + { + INT str_len; + credential->TargetName = (LPWSTR)buffer; + str_len = MultiByteToWideChar(CP_UTF8, 0, attr_list->attr[i].data, + attr_list->attr[i].length, (LPWSTR)buffer, 0xffff); + credential->TargetName[str_len] = '\0'; + buffer += (str_len + 1) * sizeof(WCHAR); + *len += (str_len + 1) * sizeof(WCHAR); + } + else + { + INT str_len; + str_len = MultiByteToWideChar(CP_UTF8, 0, attr_list->attr[i].data, + attr_list->attr[i].length, NULL, 0); + *len += (str_len + 1) * sizeof(WCHAR); + } + break; + case kSecAccountItemAttr: + { + INT str_len; + TRACE("kSecAccountItemAttr: %.*s\n", (int)attr_list->attr[i].length, + (char *)attr_list->attr[i].data); + if (!attr_list->attr[i].data) continue; + str_len = MultiByteToWideChar(CP_UTF8, 0, attr_list->attr[i].data, + attr_list->attr[i].length, NULL, 0); + user = HeapAlloc(GetProcessHeap(), 0, (str_len + 1) * sizeof(WCHAR)); + MultiByteToWideChar(CP_UTF8, 0, attr_list->attr[i].data, + attr_list->attr[i].length, user, str_len); + user[str_len] = '\0'; + break; + } + case kSecCommentItemAttr: + TRACE("kSecCommentItemAttr: %.*s\n", (int)attr_list->attr[i].length, + (char *)attr_list->attr[i].data); + if (!attr_list->attr[i].data) continue; + if (buffer) + { + INT str_len; + credential->Comment = (LPWSTR)buffer; + str_len = MultiByteToWideChar(CP_UTF8, 0, attr_list->attr[i].data, + attr_list->attr[i].length, (LPWSTR)buffer, 0xffff); + credential->Comment[str_len] = '\0'; + buffer += (str_len + 1) * sizeof(WCHAR); + *len += (str_len + 1) * sizeof(WCHAR); + } + else + { + INT str_len; + str_len = MultiByteToWideChar(CP_UTF8, 0, attr_list->attr[i].data, + attr_list->attr[i].length, NULL, 0); + *len += (str_len + 1) * sizeof(WCHAR); + } + break; + case kSecSecurityDomainItemAttr: + { + INT str_len; + TRACE("kSecSecurityDomainItemAttr: %.*s\n", (int)attr_list->attr[i].length, + (char *)attr_list->attr[i].data); + if (!attr_list->attr[i].data) continue; + str_len = MultiByteToWideChar(CP_UTF8, 0, attr_list->attr[i].data, + attr_list->attr[i].length, NULL, 0); + domain = HeapAlloc(GetProcessHeap(), 0, (str_len + 1) * sizeof(WCHAR)); + MultiByteToWideChar(CP_UTF8, 0, attr_list->attr[i].data, + attr_list->attr[i].length, domain, str_len); + domain[str_len] = '\0'; + break; + } + case kSecCreationDateItemAttr: + TRACE("kSecCreationDateItemAttr: %.*s\n", (int)attr_list->attr[i].length, + (char *)attr_list->attr[i].data); + if (buffer) + { + LARGE_INTEGER win_time; + struct tm tm; + time_t time; + memset(&tm, 0, sizeof(tm)); + strptime(attr_list->attr[i].data, "%Y%m%d%H%M%SZ", &tm); + time = mktime(&tm); + RtlSecondsSince1970ToTime(time, &win_time); + credential->LastWritten.dwLowDateTime = win_time.u.LowPart; + credential->LastWritten.dwHighDateTime = win_time.u.HighPart; + } + break; + } + } + + if (user) + { + INT str_len; + if (buffer) + credential->UserName = (LPWSTR)buffer; + if (domain) + { + str_len = strlenW(domain); + *len += (str_len + 1) * sizeof(WCHAR); + if (buffer) + { + memcpy(credential->UserName, domain, str_len * sizeof(WCHAR)); + /* FIXME: figure out when to use an '@' */ + credential->UserName[str_len] = '\\'; + buffer += (str_len + 1) * sizeof(WCHAR); + } + } + str_len = strlenW(user); + *len += (str_len + 1) * sizeof(WCHAR); + if (buffer) + { + memcpy(buffer, user, (str_len + 1) * sizeof(WCHAR)); + buffer += (str_len + 1) * sizeof(WCHAR); + TRACE("UserName = %s\n", debugstr_w(credential->UserName)); + } + } + HeapFree(GetProcessHeap(), 0, user); + HeapFree(GetProcessHeap(), 0, domain); + + if (cred_blob) + { + if (buffer) + { + INT str_len; + credential->CredentialBlob = (BYTE *)buffer; + str_len = MultiByteToWideChar(CP_UTF8, 0, cred_blob, cred_blob_len, + (LPWSTR)buffer, 0xffff); + credential->CredentialBlobSize = str_len * sizeof(WCHAR); + buffer += str_len * sizeof(WCHAR); + *len += str_len * sizeof(WCHAR); + } + else + { + INT str_len; + str_len = MultiByteToWideChar(CP_UTF8, 0, cred_blob, cred_blob_len, + NULL, 0); + *len += str_len * sizeof(WCHAR); + } + } + SecKeychainItemFreeAttributesAndData(attr_list, cred_blob); + return ERROR_SUCCESS; +} +#endif + +static DWORD write_credential_blob(HKEY hkey, LPCWSTR target_name, DWORD type, + const BYTE key_data[KEY_SIZE], + const BYTE *credential_blob, DWORD credential_blob_size) +{ + LPBYTE encrypted_credential_blob; + struct ustring data; + struct ustring key; + DWORD ret; + + key.Length = key.MaximumLength = KEY_SIZE; + key.Buffer = (unsigned char *)key_data; + + encrypted_credential_blob = HeapAlloc(GetProcessHeap(), 0, credential_blob_size); + if (!encrypted_credential_blob) return ERROR_OUTOFMEMORY; + + memcpy(encrypted_credential_blob, credential_blob, credential_blob_size); + data.Length = data.MaximumLength = credential_blob_size; + data.Buffer = encrypted_credential_blob; + SystemFunction032(&data, &key); + + ret = RegSetValueExW(hkey, wszPasswordValue, 0, REG_BINARY, (LPVOID)encrypted_credential_blob, credential_blob_size); + HeapFree(GetProcessHeap(), 0, encrypted_credential_blob); + + return ret; +} + +static DWORD registry_write_credential(HKEY hkey, const CREDENTIALW *credential, + const BYTE key_data[KEY_SIZE], BOOL preserve_blob) +{ + DWORD ret; + FILETIME LastWritten; + + GetSystemTimeAsFileTime(&LastWritten); + + ret = RegSetValueExW(hkey, wszFlagsValue, 0, REG_DWORD, (LPVOID)&credential->Flags, + sizeof(credential->Flags)); + if (ret != ERROR_SUCCESS) return ret; + ret = RegSetValueExW(hkey, wszTypeValue, 0, REG_DWORD, (LPVOID)&credential->Type, + sizeof(credential->Type)); + if (ret != ERROR_SUCCESS) return ret; + ret = RegSetValueExW(hkey, NULL, 0, REG_SZ, (LPVOID)credential->TargetName, + sizeof(WCHAR)*(strlenW(credential->TargetName)+1)); + if (ret != ERROR_SUCCESS) return ret; + if (credential->Comment) + { + ret = RegSetValueExW(hkey, wszCommentValue, 0, REG_SZ, (LPVOID)credential->Comment, + sizeof(WCHAR)*(strlenW(credential->Comment)+1)); + if (ret != ERROR_SUCCESS) return ret; + } + ret = RegSetValueExW(hkey, wszLastWrittenValue, 0, REG_BINARY, (LPVOID)&LastWritten, + sizeof(LastWritten)); + if (ret != ERROR_SUCCESS) return ret; + ret = RegSetValueExW(hkey, wszPersistValue, 0, REG_DWORD, (LPVOID)&credential->Persist, + sizeof(credential->Persist)); + if (ret != ERROR_SUCCESS) return ret; + /* FIXME: Attributes */ + if (credential->TargetAlias) + { + ret = RegSetValueExW(hkey, wszTargetAliasValue, 0, REG_SZ, (LPVOID)credential->TargetAlias, + sizeof(WCHAR)*(strlenW(credential->TargetAlias)+1)); + if (ret != ERROR_SUCCESS) return ret; + } + if (credential->UserName) + { + ret = RegSetValueExW(hkey, wszUserNameValue, 0, REG_SZ, (LPVOID)credential->UserName, + sizeof(WCHAR)*(strlenW(credential->UserName)+1)); + if (ret != ERROR_SUCCESS) return ret; + } + if (!preserve_blob) + { + ret = write_credential_blob(hkey, credential->TargetName, credential->Type, + key_data, credential->CredentialBlob, + credential->CredentialBlobSize); + } + return ret; +} + +#ifdef __APPLE__ +static DWORD mac_write_credential(const CREDENTIALW *credential, BOOL preserve_blob) +{ + OSStatus status; + SecKeychainItemRef keychain_item; + char *username; + char *domain = NULL; + char *password; + char *servername; + UInt32 userlen; + UInt32 domainlen = 0; + UInt32 pwlen; + UInt32 serverlen; + LPCWSTR p; + SecKeychainAttribute attrs[1]; + SecKeychainAttributeList attr_list; + + if (credential->Flags) + FIXME("Flags 0x%x not written\n", credential->Flags); + if (credential->Type != CRED_TYPE_DOMAIN_PASSWORD) + FIXME("credential type of %d not supported\n", credential->Type); + if (credential->Persist != CRED_PERSIST_LOCAL_MACHINE) + FIXME("persist value of %d not supported\n", credential->Persist); + if (credential->AttributeCount) + FIXME("custom attributes not supported\n"); + + p = strchrW(credential->UserName, '\\'); + if (p) + { + domainlen = WideCharToMultiByte(CP_UTF8, 0, credential->UserName, + p - credential->UserName, NULL, 0, NULL, NULL); + domain = HeapAlloc(GetProcessHeap(), 0, (domainlen + 1) * sizeof(*domain)); + WideCharToMultiByte(CP_UTF8, 0, credential->UserName, p - credential->UserName, + domain, domainlen, NULL, NULL); + domain[domainlen] = '\0'; + p++; + } + else + p = credential->UserName; + userlen = WideCharToMultiByte(CP_UTF8, 0, p, -1, NULL, 0, NULL, NULL); + username = HeapAlloc(GetProcessHeap(), 0, userlen * sizeof(*username)); + WideCharToMultiByte(CP_UTF8, 0, p, -1, username, userlen, NULL, NULL); + + serverlen = WideCharToMultiByte(CP_UTF8, 0, credential->TargetName, -1, NULL, 0, NULL, NULL); + servername = HeapAlloc(GetProcessHeap(), 0, serverlen * sizeof(*servername)); + WideCharToMultiByte(CP_UTF8, 0, credential->TargetName, -1, servername, serverlen, NULL, NULL); + pwlen = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)credential->CredentialBlob, + credential->CredentialBlobSize / sizeof(WCHAR), NULL, 0, NULL, NULL); + password = HeapAlloc(GetProcessHeap(), 0, pwlen * sizeof(*domain)); + WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)credential->CredentialBlob, + credential->CredentialBlobSize / sizeof(WCHAR), password, pwlen, NULL, NULL); + + TRACE("adding server %s, domain %s, username %s using Keychain\n", servername, domain, username); + status = SecKeychainAddInternetPassword(NULL, strlen(servername), servername, + strlen(domain), domain, strlen(username), + username, 0, NULL, 0, + 0 /* no protocol */, + kSecAuthenticationTypeDefault, + strlen(password), password, &keychain_item); + if (status != noErr) + ERR("SecKeychainAddInternetPassword returned %ld\n", status); + if (status == errSecDuplicateItem) + { + SecKeychainItemRef keychain_item; + + status = SecKeychainFindInternetPassword(NULL, strlen(servername), servername, + strlen(domain), domain, + strlen(username), username, + 0, NULL /* any path */, 0, + 0 /* any protocol */, + 0 /* any authentication type */, + 0, NULL, &keychain_item); + if (status != noErr) + ERR("SecKeychainFindInternetPassword returned %ld\n", status); + } + HeapFree(GetProcessHeap(), 0, domain); + HeapFree(GetProcessHeap(), 0, username); + HeapFree(GetProcessHeap(), 0, servername); + if (status != noErr) + { + HeapFree(GetProcessHeap(), 0, password); + return ERROR_GEN_FAILURE; + } + if (credential->Comment) + { + attr_list.count = 1; + attr_list.attr = attrs; + attrs[0].tag = kSecCommentItemAttr; + attrs[0].length = WideCharToMultiByte(CP_UTF8, 0, credential->Comment, -1, NULL, 0, NULL, NULL); + if (attrs[0].length) attrs[0].length--; + attrs[0].data = HeapAlloc(GetProcessHeap(), 0, attrs[0].length); + WideCharToMultiByte(CP_UTF8, 0, credential->Comment, -1, attrs[0].data, attrs[0].length, NULL, NULL); + } + else + { + attr_list.count = 0; + attr_list.attr = NULL; + } + status = SecKeychainItemModifyAttributesAndData(keychain_item, &attr_list, + preserve_blob ? 0 : strlen(password), + preserve_blob ? NULL : password); + if (credential->Comment) + HeapFree(GetProcessHeap(), 0, attrs[0].data); + HeapFree(GetProcessHeap(), 0, password); + /* FIXME: set TargetAlias attribute */ + CFRelease(keychain_item); + return ERROR_SUCCESS; +} +#endif + +static DWORD open_cred_mgr_key(HKEY *hkey, BOOL open_for_write) +{ + return RegCreateKeyExW(HKEY_CURRENT_USER, wszCredentialManagerKey, 0, + NULL, REG_OPTION_NON_VOLATILE, + KEY_READ | (open_for_write ? KEY_WRITE : 0), NULL, hkey, NULL); +} + +static DWORD get_cred_mgr_encryption_key(HKEY hkeyMgr, BYTE key_data[KEY_SIZE]) +{ + static const BYTE my_key_data[KEY_SIZE] = { 0 }; + DWORD type; + DWORD count; + FILETIME ft; + ULONG seed; + ULONG value; + DWORD ret; + + memcpy(key_data, my_key_data, KEY_SIZE); + + count = KEY_SIZE; + ret = RegQueryValueExW(hkeyMgr, wszEncryptionKeyValue, NULL, &type, (LPVOID)key_data, + &count); + if (ret == ERROR_SUCCESS) + { + if (type != REG_BINARY) + return ERROR_REGISTRY_CORRUPT; + else + return ERROR_SUCCESS; + } + if (ret != ERROR_FILE_NOT_FOUND) + return ret; + + GetSystemTimeAsFileTime(&ft); + seed = ft.dwLowDateTime; + value = RtlUniform(&seed); + *(DWORD *)key_data = value; + seed = ft.dwHighDateTime; + value = RtlUniform(&seed); + *(DWORD *)(key_data + 4) = value; + + ret = RegSetValueExW(hkeyMgr, wszEncryptionKeyValue, 0, REG_BINARY, + (LPVOID)key_data, KEY_SIZE); + if (ret == ERROR_ACCESS_DENIED) + { + ret = open_cred_mgr_key(&hkeyMgr, TRUE); + if (ret == ERROR_SUCCESS) + { + ret = RegSetValueExW(hkeyMgr, wszEncryptionKeyValue, 0, REG_BINARY, + (LPVOID)key_data, KEY_SIZE); + RegCloseKey(hkeyMgr); + } + } + return ret; +} + +static LPWSTR get_key_name_for_target(LPCWSTR target_name, DWORD type) +{ + static const WCHAR wszGenericPrefix[] = {'G','e','n','e','r','i','c',':',' ',0}; + static const WCHAR wszDomPasswdPrefix[] = {'D','o','m','P','a','s','s','w','d',':',' ',0}; + INT len; + LPCWSTR prefix = NULL; + LPWSTR key_name, p; + + len = strlenW(target_name); + if (type == CRED_TYPE_GENERIC) + { + prefix = wszGenericPrefix; + len += sizeof(wszGenericPrefix)/sizeof(wszGenericPrefix[0]); + } + else + { + prefix = wszDomPasswdPrefix; + len += sizeof(wszDomPasswdPrefix)/sizeof(wszDomPasswdPrefix[0]); + } + + key_name = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + if (!key_name) return NULL; + + strcpyW(key_name, prefix); + strcatW(key_name, target_name); + + for (p = key_name; *p; p++) + if (*p == '\\') *p = '_'; + + return key_name; +} + +static BOOL credential_matches_filter(HKEY hkeyCred, LPCWSTR filter) +{ + LPWSTR target_name; + DWORD ret; + DWORD type; + DWORD count; + LPCWSTR p; + + if (!filter) return TRUE; + + ret = RegQueryValueExW(hkeyCred, NULL, 0, &type, NULL, &count); + if (ret != ERROR_SUCCESS) + return FALSE; + else if (type != REG_SZ) + return FALSE; + + target_name = HeapAlloc(GetProcessHeap(), 0, count); + if (!target_name) + return FALSE; + ret = RegQueryValueExW(hkeyCred, NULL, 0, &type, (LPVOID)target_name, &count); + if (ret != ERROR_SUCCESS || type != REG_SZ) + { + HeapFree(GetProcessHeap(), 0, target_name); + return FALSE; + } + + TRACE("comparing filter %s to target name %s\n", debugstr_w(filter), + debugstr_w(target_name)); + + p = strchrW(filter, '*'); + ret = CompareStringW(GetThreadLocale(), 0, filter, + (p && !p[1] ? p - filter : -1), target_name, + (p && !p[1] ? p - filter : -1)) == CSTR_EQUAL; + + HeapFree(GetProcessHeap(), 0, target_name); + return ret; +} + +static DWORD registry_enumerate_credentials(HKEY hkeyMgr, LPCWSTR filter, + LPWSTR target_name, + DWORD target_name_len, BYTE key_data[KEY_SIZE], + PCREDENTIALW *credentials, char **buffer, + DWORD *len, DWORD *count) +{ + DWORD i; + DWORD ret; + for (i = 0;; i++) + { + HKEY hkeyCred; + ret = RegEnumKeyW(hkeyMgr, i, target_name, target_name_len+1); + if (ret == ERROR_NO_MORE_ITEMS) + { + ret = ERROR_SUCCESS; + break; + } + else if (ret != ERROR_SUCCESS) + { + ret = ERROR_SUCCESS; + continue; + } + TRACE("target_name = %s\n", debugstr_w(target_name)); + ret = RegOpenKeyExW(hkeyMgr, target_name, 0, KEY_QUERY_VALUE, &hkeyCred); + if (ret != ERROR_SUCCESS) + { + ret = ERROR_SUCCESS; + continue; + } + if (!credential_matches_filter(hkeyCred, filter)) + { + RegCloseKey(hkeyCred); + continue; + } + if (buffer) + { + *len = sizeof(CREDENTIALW); + credentials[*count] = (PCREDENTIALW)*buffer; + } + else + *len += sizeof(CREDENTIALW); + ret = registry_read_credential(hkeyCred, buffer ? credentials[*count] : NULL, + key_data, buffer ? *buffer + sizeof(CREDENTIALW) : NULL, + len); + RegCloseKey(hkeyCred); + if (ret != ERROR_SUCCESS) break; + if (buffer) *buffer += *len; + (*count)++; + } + return ret; +} + +#ifdef __APPLE__ +static DWORD mac_enumerate_credentials(LPCWSTR filter, PCREDENTIALW *credentials, + char *buffer, DWORD *len, DWORD *count) +{ + SecKeychainSearchRef search; + SecKeychainItemRef item; + OSStatus status; + Boolean saved_user_interaction_allowed; + DWORD ret; + + SecKeychainGetUserInteractionAllowed(&saved_user_interaction_allowed); + SecKeychainSetUserInteractionAllowed(false); + + status = SecKeychainSearchCreateFromAttributes(NULL, kSecInternetPasswordItemClass, NULL, &search); + if (status == noErr) + { + while (SecKeychainSearchCopyNext(search, &item) == noErr) + { + SecKeychainAttributeInfo info; + SecKeychainAttributeList *attr_list; + UInt32 info_tags[] = { kSecServerItemAttr }; + info.count = sizeof(info_tags)/sizeof(info_tags[0]); + info.tag = info_tags; + info.format = NULL; + status = SecKeychainItemCopyAttributesAndData(item, &info, NULL, &attr_list, NULL, NULL); + if (status != noErr) + { + WARN("SecKeychainItemCopyAttributesAndData returned status %ld\n", status); + continue; + } + if (buffer) + { + *len = sizeof(CREDENTIALW); + credentials[*count] = (PCREDENTIALW)buffer; + } + else + *len += sizeof(CREDENTIALW); + if (attr_list->count != 1 || attr_list->attr[0].tag != kSecServerItemAttr) continue; + TRACE("server item: %.*s\n", (int)attr_list->attr[0].length, (char *)attr_list->attr[0].data); + /* FIXME: filter based on attr_list->attr[0].data */ + SecKeychainItemFreeAttributesAndData(attr_list, NULL); + ret = mac_read_credential_from_item(item, FALSE, + buffer ? credentials[*count] : NULL, + buffer ? buffer + sizeof(CREDENTIALW) : NULL, + len); + CFRelease(item); + if (ret == ERROR_SUCCESS) + { + (*count)++; + if (buffer) buffer += *len; + } + } + CFRelease(search); + } + else + ERR("SecKeychainSearchCreateFromAttributes returned status %ld\n", status); + SecKeychainSetUserInteractionAllowed(saved_user_interaction_allowed); + return ERROR_SUCCESS; +} + +static DWORD mac_delete_credential(LPCWSTR TargetName) +{ + OSStatus status; + SecKeychainSearchRef search; + status = SecKeychainSearchCreateFromAttributes(NULL, kSecInternetPasswordItemClass, NULL, &search); + if (status == noErr) + { + SecKeychainItemRef item; + while (SecKeychainSearchCopyNext(search, &item) == noErr) + { + SecKeychainAttributeInfo info; + SecKeychainAttributeList *attr_list; + UInt32 info_tags[] = { kSecServerItemAttr }; + LPWSTR target_name; + INT str_len; + info.count = sizeof(info_tags)/sizeof(info_tags[0]); + info.tag = info_tags; + info.format = NULL; + status = SecKeychainItemCopyAttributesAndData(item, &info, NULL, &attr_list, NULL, NULL); + if (status != noErr) + { + WARN("SecKeychainItemCopyAttributesAndData returned status %ld\n", status); + continue; + } + if (attr_list->count != 1 || attr_list->attr[0].tag != kSecServerItemAttr) + { + CFRelease(item); + continue; + } + str_len = MultiByteToWideChar(CP_UTF8, 0, attr_list->attr[0].data, attr_list->attr[0].length, NULL, 0); + target_name = HeapAlloc(GetProcessHeap(), 0, (str_len + 1) * sizeof(WCHAR)); + MultiByteToWideChar(CP_UTF8, 0, attr_list->attr[0].data, attr_list->attr[0].length, target_name, str_len); + /* nul terminate */ + target_name[str_len] = '\0'; + if (strcmpiW(TargetName, target_name)) + { + CFRelease(item); + HeapFree(GetProcessHeap(), 0, target_name); + continue; + } + HeapFree(GetProcessHeap(), 0, target_name); + SecKeychainItemFreeAttributesAndData(attr_list, NULL); + SecKeychainItemDelete(item); + CFRelease(item); + CFRelease(search); + + return ERROR_SUCCESS; + } + CFRelease(search); + } + return ERROR_NOT_FOUND; +} +#endif + +static void convert_PCREDENTIALW_to_PCREDENTIALA(const CREDENTIALW *CredentialW, PCREDENTIALA CredentialA, DWORD *len) +{ + char *buffer = (char *)CredentialA + sizeof(CREDENTIALA); + INT string_len; + + *len += sizeof(CREDENTIALA); + if (!CredentialA) + { + if (CredentialW->TargetName) *len += WideCharToMultiByte(CP_ACP, 0, CredentialW->TargetName, -1, NULL, 0, NULL, NULL); + if (CredentialW->Comment) *len += WideCharToMultiByte(CP_ACP, 0, CredentialW->Comment, -1, NULL, 0, NULL, NULL); + *len += CredentialW->CredentialBlobSize; + if (CredentialW->TargetAlias) *len += WideCharToMultiByte(CP_ACP, 0, CredentialW->TargetAlias, -1, NULL, 0, NULL, NULL); + if (CredentialW->UserName) *len += WideCharToMultiByte(CP_ACP, 0, CredentialW->UserName, -1, NULL, 0, NULL, NULL); + + return; + } + + CredentialA->Flags = CredentialW->Flags; + CredentialA->Type = CredentialW->Type; + if (CredentialW->TargetName) + { + CredentialA->TargetName = buffer; + + /* Buffer is guaranteed to be large enough */ + string_len = WideCharToMultiByte(CP_ACP, 0, CredentialW->TargetName, -1, CredentialA->TargetName, 0x7FFFFFFF, NULL, NULL); + + buffer += string_len; + *len += string_len; + } + else + CredentialA->TargetName = NULL; + if (CredentialW->Comment) + { + CredentialA->Comment = buffer; + string_len = WideCharToMultiByte(CP_ACP, 0, CredentialW->Comment, -1, CredentialA->Comment, 0x7FFFFFFF, NULL, NULL); + buffer += string_len; + *len += string_len; + } + else + CredentialA->Comment = NULL; + CredentialA->LastWritten = CredentialW->LastWritten; + CredentialA->CredentialBlobSize = CredentialW->CredentialBlobSize; + if (CredentialW->CredentialBlobSize) + { + CredentialA->CredentialBlob =(LPBYTE)buffer; + memcpy(CredentialA->CredentialBlob, CredentialW->CredentialBlob, + CredentialW->CredentialBlobSize); + buffer += CredentialW->CredentialBlobSize; + *len += CredentialW->CredentialBlobSize; + } + else + CredentialA->CredentialBlob = NULL; + CredentialA->Persist = CredentialW->Persist; + CredentialA->AttributeCount = 0; + CredentialA->Attributes = NULL; /* FIXME */ + if (CredentialW->TargetAlias) + { + CredentialA->TargetAlias = buffer; + string_len = WideCharToMultiByte(CP_ACP, 0, CredentialW->TargetAlias, -1, CredentialA->TargetAlias, 0x7FFFFFFF, NULL, NULL); + buffer += string_len; + *len += string_len; + } + else + CredentialA->TargetAlias = NULL; + if (CredentialW->UserName) + { + CredentialA->UserName = buffer; + string_len = WideCharToMultiByte(CP_ACP, 0, CredentialW->UserName, -1, CredentialA->UserName, 0x7FFFFFFF, NULL, NULL); + buffer += string_len; + *len += string_len; + } + else + CredentialA->UserName = NULL; +} + +static void convert_PCREDENTIALA_to_PCREDENTIALW(const CREDENTIALA *CredentialA, PCREDENTIALW CredentialW, DWORD *len) +{ + char *buffer = (char *)CredentialW + sizeof(CREDENTIALW); + INT string_len; + + *len += sizeof(CREDENTIALW); + if (!CredentialW) + { + if (CredentialA->TargetName) *len += sizeof(WCHAR) * MultiByteToWideChar(CP_ACP, 0, CredentialA->TargetName, -1, NULL, 0); + if (CredentialA->Comment) *len += sizeof(WCHAR) * MultiByteToWideChar(CP_ACP, 0, CredentialA->Comment, -1, NULL, 0); + *len += CredentialA->CredentialBlobSize; + if (CredentialA->TargetAlias) *len += sizeof(WCHAR) * MultiByteToWideChar(CP_ACP, 0, CredentialA->TargetAlias, -1, NULL, 0); + if (CredentialA->UserName) *len += sizeof(WCHAR) * MultiByteToWideChar(CP_ACP, 0, CredentialA->UserName, -1, NULL, 0); + + return; + } + + CredentialW->Flags = CredentialA->Flags; + CredentialW->Type = CredentialA->Type; + if (CredentialA->TargetName) + { + CredentialW->TargetName = (LPWSTR)buffer; + string_len = MultiByteToWideChar(CP_ACP, 0, CredentialA->TargetName, -1, CredentialW->TargetName, 0x7FFFFFFF); + buffer += sizeof(WCHAR) * string_len; + *len += sizeof(WCHAR) * string_len; + } + else + CredentialW->TargetName = NULL; + if (CredentialA->Comment) + { + CredentialW->Comment = (LPWSTR)buffer; + string_len = MultiByteToWideChar(CP_ACP, 0, CredentialA->Comment, -1, CredentialW->Comment, 0x7FFFFFFF); + buffer += sizeof(WCHAR) * string_len; + *len += sizeof(WCHAR) * string_len; + } + else + CredentialW->Comment = NULL; + CredentialW->LastWritten = CredentialA->LastWritten; + CredentialW->CredentialBlobSize = CredentialA->CredentialBlobSize; + if (CredentialA->CredentialBlobSize) + { + CredentialW->CredentialBlob =(LPBYTE)buffer; + memcpy(CredentialW->CredentialBlob, CredentialA->CredentialBlob, + CredentialA->CredentialBlobSize); + buffer += CredentialA->CredentialBlobSize; + *len += CredentialA->CredentialBlobSize; + } + else + CredentialW->CredentialBlob = NULL; + CredentialW->Persist = CredentialA->Persist; + CredentialW->AttributeCount = 0; + CredentialW->Attributes = NULL; /* FIXME */ + if (CredentialA->TargetAlias) + { + CredentialW->TargetAlias = (LPWSTR)buffer; + string_len = MultiByteToWideChar(CP_ACP, 0, CredentialA->TargetAlias, -1, CredentialW->TargetAlias, 0x7FFFFFFF); + buffer += sizeof(WCHAR) * string_len; + *len += sizeof(WCHAR) * string_len; + } + else + CredentialW->TargetAlias = NULL; + if (CredentialA->UserName) + { + CredentialW->UserName = (LPWSTR)buffer; + string_len = MultiByteToWideChar(CP_ACP, 0, CredentialA->UserName, -1, CredentialW->UserName, 0x7FFFFFFF); + buffer += sizeof(WCHAR) * string_len; + *len += sizeof(WCHAR) * string_len; + } + else + CredentialW->UserName = NULL; +} + +/****************************************************************************** + * CredDeleteA [ADVAPI32.@] + */ +BOOL WINAPI CredDeleteA(LPCSTR TargetName, DWORD Type, DWORD Flags) +{ + LPWSTR TargetNameW; + DWORD len; + BOOL ret; + + TRACE("(%s, %d, 0x%x)\n", debugstr_a(TargetName), Type, Flags); + + if (!TargetName) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + len = MultiByteToWideChar(CP_ACP, 0, TargetName, -1, NULL, 0); + TargetNameW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + if (!TargetNameW) + { + SetLastError(ERROR_OUTOFMEMORY); + return FALSE; + } + MultiByteToWideChar(CP_ACP, 0, TargetName, -1, TargetNameW, len); + + ret = CredDeleteW(TargetNameW, Type, Flags); + + HeapFree(GetProcessHeap(), 0, TargetNameW); + + return ret; +} + +/****************************************************************************** + * CredDeleteW [ADVAPI32.@] + */ +BOOL WINAPI CredDeleteW(LPCWSTR TargetName, DWORD Type, DWORD Flags) +{ + HKEY hkeyMgr; + DWORD ret; + LPWSTR key_name; + + TRACE("(%s, %d, 0x%x)\n", debugstr_w(TargetName), Type, Flags); + + if (!TargetName) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + if (Type != CRED_TYPE_GENERIC && Type != CRED_TYPE_DOMAIN_PASSWORD) + { + FIXME("unhandled type %d\n", Type); + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + if (Flags) + { + FIXME("unhandled flags 0x%x\n", Flags); + SetLastError(ERROR_INVALID_FLAGS); + return FALSE; + } + +#ifdef __APPLE__ + if (Type == CRED_TYPE_DOMAIN_PASSWORD) + { + ret = mac_delete_credential(TargetName); + if (ret == ERROR_SUCCESS) + return TRUE; + } +#endif + + ret = open_cred_mgr_key(&hkeyMgr, TRUE); + if (ret != ERROR_SUCCESS) + { + WARN("couldn't open/create manager key, error %d\n", ret); + SetLastError(ERROR_NO_SUCH_LOGON_SESSION); + return FALSE; + } + + key_name = get_key_name_for_target(TargetName, Type); + ret = RegDeleteKeyW(hkeyMgr, key_name); + HeapFree(GetProcessHeap(), 0, key_name); + RegCloseKey(hkeyMgr); + if (ret != ERROR_SUCCESS) + { + SetLastError(ERROR_NOT_FOUND); + return FALSE; + } + + return TRUE; +} + +/****************************************************************************** + * CredEnumerateA [ADVAPI32.@] + */ +BOOL WINAPI CredEnumerateA(LPCSTR Filter, DWORD Flags, DWORD *Count, + PCREDENTIALA **Credentials) +{ + LPWSTR FilterW; + PCREDENTIALW *CredentialsW; + DWORD i; + DWORD len; + char *buffer; + + TRACE("(%s, 0x%x, %p, %p)\n", debugstr_a(Filter), Flags, Count, Credentials); + + if (Filter) + { + len = MultiByteToWideChar(CP_ACP, 0, Filter, -1, NULL, 0); + FilterW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + if (!FilterW) + { + SetLastError(ERROR_OUTOFMEMORY); + return FALSE; + } + MultiByteToWideChar(CP_ACP, 0, Filter, -1, FilterW, len); + } + else + FilterW = NULL; + + if (!CredEnumerateW(FilterW, Flags, Count, &CredentialsW)) + { + HeapFree(GetProcessHeap(), 0, FilterW); + return FALSE; + } + HeapFree(GetProcessHeap(), 0, FilterW); + + len = *Count * sizeof(PCREDENTIALA); + for (i = 0; i < *Count; i++) + convert_PCREDENTIALW_to_PCREDENTIALA(CredentialsW[i], NULL, &len); + + *Credentials = HeapAlloc(GetProcessHeap(), 0, len); + if (!*Credentials) + { + CredFree(CredentialsW); + SetLastError(ERROR_OUTOFMEMORY); + return FALSE; + } + + buffer = (char *)&(*Credentials)[*Count]; + for (i = 0; i < *Count; i++) + { + len = 0; + (*Credentials)[i] = (PCREDENTIALA)buffer; + convert_PCREDENTIALW_to_PCREDENTIALA(CredentialsW[i], (*Credentials)[i], &len); + buffer += len; + } + + CredFree(CredentialsW); + + return TRUE; +} + +/****************************************************************************** + * CredEnumerateW [ADVAPI32.@] + */ +BOOL WINAPI CredEnumerateW(LPCWSTR Filter, DWORD Flags, DWORD *Count, + PCREDENTIALW **Credentials) +{ + HKEY hkeyMgr; + DWORD ret; + LPWSTR target_name; + DWORD target_name_len; + DWORD len; + char *buffer; + BYTE key_data[KEY_SIZE]; + + TRACE("(%s, 0x%x, %p, %p)\n", debugstr_w(Filter), Flags, Count, Credentials); + + if (Flags) + { + SetLastError(ERROR_INVALID_FLAGS); + return FALSE; + } + + ret = open_cred_mgr_key(&hkeyMgr, FALSE); + if (ret != ERROR_SUCCESS) + { + WARN("couldn't open/create manager key, error %d\n", ret); + SetLastError(ERROR_NO_SUCH_LOGON_SESSION); + return FALSE; + } + + ret = get_cred_mgr_encryption_key(hkeyMgr, key_data); + if (ret != ERROR_SUCCESS) + { + RegCloseKey(hkeyMgr); + SetLastError(ret); + return FALSE; + } + + ret = RegQueryInfoKeyW(hkeyMgr, NULL, NULL, NULL, NULL, &target_name_len, NULL, NULL, NULL, NULL, NULL, NULL); + if (ret != ERROR_SUCCESS) + { + RegCloseKey(hkeyMgr); + SetLastError(ret); + return FALSE; + } + + target_name = HeapAlloc(GetProcessHeap(), 0, (target_name_len+1)*sizeof(WCHAR)); + if (!target_name) + { + RegCloseKey(hkeyMgr); + SetLastError(ERROR_OUTOFMEMORY); + return FALSE; + } + + *Count = 0; + len = 0; + ret = registry_enumerate_credentials(hkeyMgr, Filter, target_name, target_name_len, + key_data, NULL, NULL, &len, Count); +#ifdef __APPLE__ + if (ret == ERROR_SUCCESS) + ret = mac_enumerate_credentials(Filter, NULL, NULL, &len, Count); +#endif + if (ret == ERROR_SUCCESS && *Count == 0) + ret = ERROR_NOT_FOUND; + if (ret != ERROR_SUCCESS) + { + HeapFree(GetProcessHeap(), 0, target_name); + RegCloseKey(hkeyMgr); + SetLastError(ret); + return FALSE; + } + len += *Count * sizeof(PCREDENTIALW); + + if (ret == ERROR_SUCCESS) + { + buffer = HeapAlloc(GetProcessHeap(), 0, len); + *Credentials = (PCREDENTIALW *)buffer; + if (buffer) + { + buffer += *Count * sizeof(PCREDENTIALW); + *Count = 0; + ret = registry_enumerate_credentials(hkeyMgr, Filter, target_name, + target_name_len, key_data, + *Credentials, &buffer, &len, + Count); +#ifdef __APPLE__ + if (ret == ERROR_SUCCESS) + ret = mac_enumerate_credentials(Filter, *Credentials, + buffer, &len, Count); +#endif + } + else + ret = ERROR_OUTOFMEMORY; + } + + HeapFree(GetProcessHeap(), 0, target_name); + RegCloseKey(hkeyMgr); + + if (ret != ERROR_SUCCESS) + { + SetLastError(ret); + return FALSE; + } + return TRUE; +} + +/****************************************************************************** + * CredFree [ADVAPI32.@] + */ +VOID WINAPI CredFree(PVOID Buffer) +{ + HeapFree(GetProcessHeap(), 0, Buffer); +} + +/****************************************************************************** + * CredReadA [ADVAPI32.@] + */ +BOOL WINAPI CredReadA(LPCSTR TargetName, DWORD Type, DWORD Flags, PCREDENTIALA *Credential) +{ + LPWSTR TargetNameW; + PCREDENTIALW CredentialW; + DWORD len; + + TRACE("(%s, %d, 0x%x, %p)\n", debugstr_a(TargetName), Type, Flags, Credential); + + if (!TargetName) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + len = MultiByteToWideChar(CP_ACP, 0, TargetName, -1, NULL, 0); + TargetNameW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + if (!TargetNameW) + { + SetLastError(ERROR_OUTOFMEMORY); + return FALSE; + } + MultiByteToWideChar(CP_ACP, 0, TargetName, -1, TargetNameW, len); + + if (!CredReadW(TargetNameW, Type, Flags, &CredentialW)) + { + HeapFree(GetProcessHeap(), 0, TargetNameW); + return FALSE; + } + HeapFree(GetProcessHeap(), 0, TargetNameW); + + len = 0; + convert_PCREDENTIALW_to_PCREDENTIALA(CredentialW, NULL, &len); + *Credential = HeapAlloc(GetProcessHeap(), 0, len); + if (!*Credential) + { + SetLastError(ERROR_OUTOFMEMORY); + return FALSE; + } + len = 0; + convert_PCREDENTIALW_to_PCREDENTIALA(CredentialW, *Credential, &len); + + CredFree(CredentialW); + + return TRUE; +} + +/****************************************************************************** + * CredReadW [ADVAPI32.@] + */ +BOOL WINAPI CredReadW(LPCWSTR TargetName, DWORD Type, DWORD Flags, PCREDENTIALW *Credential) +{ + HKEY hkeyMgr; + HKEY hkeyCred; + DWORD ret; + LPWSTR key_name; + DWORD len; + BYTE key_data[KEY_SIZE]; + + TRACE("(%s, %d, 0x%x, %p)\n", debugstr_w(TargetName), Type, Flags, Credential); + + if (!TargetName) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + if (Type != CRED_TYPE_GENERIC && Type != CRED_TYPE_DOMAIN_PASSWORD) + { + FIXME("unhandled type %d\n", Type); + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + if (Flags) + { + FIXME("unhandled flags 0x%x\n", Flags); + SetLastError(ERROR_INVALID_FLAGS); + return FALSE; + } + +#ifdef __APPLE__ + if (Type == CRED_TYPE_DOMAIN_PASSWORD) + { + OSStatus status; + SecKeychainSearchRef search; + status = SecKeychainSearchCreateFromAttributes(NULL, kSecInternetPasswordItemClass, NULL, &search); + if (status == noErr) + { + SecKeychainItemRef item; + while (SecKeychainSearchCopyNext(search, &item) == noErr) + { + SecKeychainAttributeInfo info; + SecKeychainAttributeList *attr_list; + UInt32 info_tags[] = { kSecServerItemAttr }; + LPWSTR target_name; + INT str_len; + info.count = sizeof(info_tags)/sizeof(info_tags[0]); + info.tag = info_tags; + info.format = NULL; + status = SecKeychainItemCopyAttributesAndData(item, &info, NULL, &attr_list, NULL, NULL); + len = sizeof(**Credential); + if (status != noErr) + { + WARN("SecKeychainItemCopyAttributesAndData returned status %ld\n", status); + continue; + } + if (attr_list->count != 1 || attr_list->attr[0].tag != kSecServerItemAttr) + { + CFRelease(item); + continue; + } + str_len = MultiByteToWideChar(CP_UTF8, 0, attr_list->attr[0].data, attr_list->attr[0].length, NULL, 0); + target_name = HeapAlloc(GetProcessHeap(), 0, (str_len + 1) * sizeof(WCHAR)); + MultiByteToWideChar(CP_UTF8, 0, attr_list->attr[0].data, attr_list->attr[0].length, target_name, str_len); + /* nul terminate */ + target_name[str_len] = '\0'; + if (strcmpiW(TargetName, target_name)) + { + CFRelease(item); + HeapFree(GetProcessHeap(), 0, target_name); + continue; + } + HeapFree(GetProcessHeap(), 0, target_name); + SecKeychainItemFreeAttributesAndData(attr_list, NULL); + ret = mac_read_credential_from_item(item, TRUE, NULL, NULL, &len); + if (ret == ERROR_SUCCESS) + { + *Credential = HeapAlloc(GetProcessHeap(), 0, len); + if (*Credential) + { + len = sizeof(**Credential); + ret = mac_read_credential_from_item(item, TRUE, *Credential, + (char *)(*Credential + 1), &len); + } + else + ret = ERROR_OUTOFMEMORY; + CFRelease(item); + CFRelease(search); + if (ret != ERROR_SUCCESS) + { + SetLastError(ret); + return FALSE; + } + return TRUE; + } + CFRelease(item); + } + CFRelease(search); + } + } +#endif + + ret = open_cred_mgr_key(&hkeyMgr, FALSE); + if (ret != ERROR_SUCCESS) + { + WARN("couldn't open/create manager key, error %d\n", ret); + SetLastError(ERROR_NO_SUCH_LOGON_SESSION); + return FALSE; + } + + ret = get_cred_mgr_encryption_key(hkeyMgr, key_data); + if (ret != ERROR_SUCCESS) + { + RegCloseKey(hkeyMgr); + SetLastError(ret); + return FALSE; + } + + key_name = get_key_name_for_target(TargetName, Type); + ret = RegOpenKeyExW(hkeyMgr, key_name, 0, KEY_QUERY_VALUE, &hkeyCred); + HeapFree(GetProcessHeap(), 0, key_name); + if (ret != ERROR_SUCCESS) + { + TRACE("credentials for target name %s not found\n", debugstr_w(TargetName)); + SetLastError(ERROR_NOT_FOUND); + return FALSE; + } + + len = sizeof(**Credential); + ret = registry_read_credential(hkeyCred, NULL, key_data, NULL, &len); + if (ret == ERROR_SUCCESS) + { + *Credential = HeapAlloc(GetProcessHeap(), 0, len); + if (*Credential) + { + len = sizeof(**Credential); + ret = registry_read_credential(hkeyCred, *Credential, key_data, + (char *)(*Credential + 1), &len); + } + else + ret = ERROR_OUTOFMEMORY; + } + + RegCloseKey(hkeyCred); + RegCloseKey(hkeyMgr); + + if (ret != ERROR_SUCCESS) + { + SetLastError(ret); + return FALSE; + } + return TRUE; +} + +/****************************************************************************** + * CredWriteA [ADVAPI32.@] + */ +BOOL WINAPI CredWriteA(PCREDENTIALA Credential, DWORD Flags) +{ + BOOL ret; + DWORD len; + PCREDENTIALW CredentialW; + + TRACE("(%p, 0x%x)\n", Credential, Flags); + + if (!Credential || !Credential->TargetName) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + len = 0; + convert_PCREDENTIALA_to_PCREDENTIALW(Credential, NULL, &len); + CredentialW = HeapAlloc(GetProcessHeap(), 0, len); + if (!CredentialW) + { + SetLastError(ERROR_OUTOFMEMORY); + return FALSE; + } + len = 0; + convert_PCREDENTIALA_to_PCREDENTIALW(Credential, CredentialW, &len); + + ret = CredWriteW(CredentialW, Flags); + + HeapFree(GetProcessHeap(), 0, CredentialW); + + return ret; +} + +/****************************************************************************** + * CredWriteW [ADVAPI32.@] + */ +BOOL WINAPI CredWriteW(PCREDENTIALW Credential, DWORD Flags) +{ + HKEY hkeyMgr; + HKEY hkeyCred; + DWORD ret; + LPWSTR key_name; + BYTE key_data[KEY_SIZE]; + + TRACE("(%p, 0x%x)\n", Credential, Flags); + + if (!Credential || !Credential->TargetName) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + if (Flags & ~CRED_PRESERVE_CREDENTIAL_BLOB) + { + FIXME("unhandled flags 0x%x\n", Flags); + SetLastError(ERROR_INVALID_FLAGS); + return FALSE; + } + + if (Credential->Type != CRED_TYPE_GENERIC && Credential->Type != CRED_TYPE_DOMAIN_PASSWORD) + { + FIXME("unhandled type %d\n", Credential->Type); + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + TRACE("Credential->TargetName = %s\n", debugstr_w(Credential->TargetName)); + TRACE("Credential->UserName = %s\n", debugstr_w(Credential->UserName)); + + if (Credential->Type == CRED_TYPE_DOMAIN_PASSWORD) + { + if (!Credential->UserName || + (!strchrW(Credential->UserName, '\\') && !strchrW(Credential->UserName, '@'))) + { + ERR("bad username %s\n", debugstr_w(Credential->UserName)); + SetLastError(ERROR_BAD_USERNAME); + return FALSE; + } + } + +#ifdef __APPLE__ + if (!Credential->AttributeCount && + Credential->Type == CRED_TYPE_DOMAIN_PASSWORD && + (Credential->Persist == CRED_PERSIST_LOCAL_MACHINE || Credential->Persist == CRED_PERSIST_ENTERPRISE)) + { + ret = mac_write_credential(Credential, Flags & CRED_PRESERVE_CREDENTIAL_BLOB); + if (ret != ERROR_SUCCESS) + { + SetLastError(ret); + return FALSE; + } + return TRUE; + } +#endif + + ret = open_cred_mgr_key(&hkeyMgr, FALSE); + if (ret != ERROR_SUCCESS) + { + WARN("couldn't open/create manager key, error %d\n", ret); + SetLastError(ERROR_NO_SUCH_LOGON_SESSION); + return FALSE; + } + + ret = get_cred_mgr_encryption_key(hkeyMgr, key_data); + if (ret != ERROR_SUCCESS) + { + RegCloseKey(hkeyMgr); + SetLastError(ret); + return FALSE; + } + + key_name = get_key_name_for_target(Credential->TargetName, Credential->Type); + ret = RegCreateKeyExW(hkeyMgr, key_name, 0, NULL, + Credential->Persist == CRED_PERSIST_SESSION ? REG_OPTION_VOLATILE : REG_OPTION_NON_VOLATILE, + KEY_READ|KEY_WRITE, NULL, &hkeyCred, NULL); + HeapFree(GetProcessHeap(), 0, key_name); + if (ret != ERROR_SUCCESS) + { + TRACE("credentials for target name %s not found\n", + debugstr_w(Credential->TargetName)); + SetLastError(ERROR_NOT_FOUND); + return FALSE; + } + + ret = registry_write_credential(hkeyCred, Credential, key_data, + Flags & CRED_PRESERVE_CREDENTIAL_BLOB); + + RegCloseKey(hkeyCred); + RegCloseKey(hkeyMgr); + + if (ret != ERROR_SUCCESS) + { + SetLastError(ret); + return FALSE; + } + return TRUE; +} + +/****************************************************************************** + * CredGetSessionTypes [ADVAPI32.@] + */ +BOOL WINAPI CredGetSessionTypes(DWORD persistCount, LPDWORD persists) +{ + TRACE("(%u, %p)\n", persistCount, persists); + + memset(persists, CRED_PERSIST_NONE, persistCount*sizeof(*persists)); + if (CRED_TYPE_GENERIC < persistCount) + { + persists[CRED_TYPE_GENERIC] = CRED_PERSIST_ENTERPRISE; + + if (CRED_TYPE_DOMAIN_PASSWORD < persistCount) + { + persists[CRED_TYPE_DOMAIN_PASSWORD] = CRED_PERSIST_ENTERPRISE; + } + } + return TRUE; +} diff --git a/reactos/dll/win32/advapi32/sec/lsa.c b/reactos/dll/win32/advapi32/sec/lsa.c index 2b68edeea7e..3428fbe1ba9 100644 --- a/reactos/dll/win32/advapi32/sec/lsa.c +++ b/reactos/dll/win32/advapi32/sec/lsa.c @@ -93,7 +93,7 @@ LsaClose(LSA_HANDLE ObjectHandle) LSAHandleBind(); return LsarClose(LSABindingHandle, - (ULONG_PTR)ObjectHandle); + (unsigned long *)&ObjectHandle); } diff --git a/reactos/dll/win32/advapi32/sec/misc.c b/reactos/dll/win32/advapi32/sec/misc.c index 35868ea2d1b..2455a7c1608 100644 --- a/reactos/dll/win32/advapi32/sec/misc.c +++ b/reactos/dll/win32/advapi32/sec/misc.c @@ -739,9 +739,8 @@ GetUserNameA( LPSTR lpszName, LPDWORD lpSize ) lpSize); if(Ret) { - NameW.Length = (*lpSize) * sizeof(WCHAR); + NameW.Length = (*lpSize - 1) * sizeof(WCHAR); RtlUnicodeStringToAnsiString(&NameA, &NameW, FALSE); - NameA.Buffer[NameA.Length] = '\0'; *lpSize = NameA.Length + 1; } @@ -791,6 +790,7 @@ GetUserNameW ( LPWSTR lpszName, LPDWORD lpSize ) if ( !tu_buf ) { SetLastError ( ERROR_NOT_ENOUGH_MEMORY ); + CloseHandle ( hToken ); return FALSE; } if ( !GetTokenInformation ( hToken, TokenUser, tu_buf, 36, &tu_len ) || tu_len > 36 ) @@ -800,6 +800,7 @@ GetUserNameW ( LPWSTR lpszName, LPDWORD lpSize ) if ( !tu_buf ) { SetLastError ( ERROR_NOT_ENOUGH_MEMORY ); + CloseHandle ( hToken ); return FALSE; } if ( !GetTokenInformation ( hToken, TokenUser, tu_buf, tu_len, &tu_len ) ) @@ -811,6 +812,7 @@ GetUserNameW ( LPWSTR lpszName, LPDWORD lpSize ) return FALSE; } } + CloseHandle ( hToken ); token_user = (TOKEN_USER*)tu_buf; an_len = *lpSize; @@ -836,27 +838,21 @@ GetUserNameW ( LPWSTR lpszName, LPDWORD lpSize ) return FALSE; } } + an_len = *lpSize; if ( !LookupAccountSidW ( NULL, token_user->User.Sid, lpszName, &an_len, domain_name, &dn_len, &snu ) ) { /* don't call SetLastError(), as LookupAccountSid() ought to have set one */ LocalFree ( domain_name ); - CloseHandle ( hToken ); + LocalFree ( tu_buf ); + *lpSize = an_len; return FALSE; } } LocalFree ( domain_name ); LocalFree ( tu_buf ); - CloseHandle ( hToken ); - - if ( an_len > *lpSize ) - { - *lpSize = an_len; - SetLastError(ERROR_INSUFFICIENT_BUFFER); - return FALSE; - } - + *lpSize = an_len + 1; return TRUE; } diff --git a/reactos/dll/win32/advapi32/sec/sec.c b/reactos/dll/win32/advapi32/sec/sec.c index e1dee615345..8eea6e427a1 100644 --- a/reactos/dll/win32/advapi32/sec/sec.c +++ b/reactos/dll/win32/advapi32/sec/sec.c @@ -571,7 +571,7 @@ BOOL WINAPI DecryptFileW(LPCWSTR lpFileName, DWORD dwReserved) { FIXME("%s(%S) not implemented!\n", __FUNCTION__, lpFileName); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return FALSE; + return TRUE; } /* @@ -604,7 +604,7 @@ BOOL WINAPI EncryptFileW(LPCWSTR lpFileName) { FIXME("%s() not implemented!\n", __FUNCTION__); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return FALSE; + return TRUE; } /* diff --git a/reactos/dll/win32/cards/cards.def b/reactos/dll/win32/cards/cards.def deleted file mode 100644 index 0af62e9904a..00000000000 --- a/reactos/dll/win32/cards/cards.def +++ /dev/null @@ -1,8 +0,0 @@ -LIBRARY cards.dll -EXPORTS -WEP -cdtAnimate -cdtDraw -cdtDrawExt -cdtInit -cdtTerm diff --git a/reactos/dll/win32/cards/cards.rbuild b/reactos/dll/win32/cards/cards.rbuild index cab5fdb975d..ace4c0c4a7c 100644 --- a/reactos/dll/win32/cards/cards.rbuild +++ b/reactos/dll/win32/cards/cards.rbuild @@ -1,5 +1,5 @@ - + . @@ -10,4 +10,5 @@ user32 cards.c cards.rc + cards.spec diff --git a/reactos/dll/win32/cards/cards.spec b/reactos/dll/win32/cards/cards.spec new file mode 100644 index 00000000000..ea18c2a3ef7 --- /dev/null +++ b/reactos/dll/win32/cards/cards.spec @@ -0,0 +1,6 @@ +@ stdcall WEP(long) +@ stdcall cdtAnimate(ptr long long long long) +@ stdcall cdtDraw(ptr long long long long long) +@ stdcall cdtDrawExt(ptr long long long long long long long) +@ stdcall cdtInit(ptr ptr) +@ stdcall cdtTerm() diff --git a/reactos/dll/win32/comctl32/comctl32_ros.diff b/reactos/dll/win32/comctl32/comctl32_ros.diff index c25767a938a..7011e3848b2 100644 --- a/reactos/dll/win32/comctl32/comctl32_ros.diff +++ b/reactos/dll/win32/comctl32/comctl32_ros.diff @@ -134,12 +134,3 @@ Index: treeview.c if (infoPtr->cdmode & CDRF_NOTIFYPOSTPAINT) infoPtr->cdmode = TREEVIEW_SendCustomDrawNotify(infoPtr, CDDS_POSTPAINT, hdc, rect); -@@ -3209,7 +3207,7 @@ - { - scrollRect.top = nextItem->rect.top; - -- ScrollWindowEx (infoPtr->hwnd, 0, scrollDist, &scrollRect, NULL, -+ ScrollWindowEx (infoPtr->hwnd, 0, scrollDist, &scrollRect, &scrollRect, - NULL, NULL, SW_ERASE | SW_INVALIDATE); - TREEVIEW_Invalidate(infoPtr, wineItem); - } else { diff --git a/reactos/dll/win32/dbghelp/Makefile.in b/reactos/dll/win32/dbghelp/Makefile.in deleted file mode 100644 index 280e199c9ac..00000000000 --- a/reactos/dll/win32/dbghelp/Makefile.in +++ /dev/null @@ -1,30 +0,0 @@ -TOPSRCDIR = @top_srcdir@ -TOPOBJDIR = ../.. -SRCDIR = @srcdir@ -VPATH = @srcdir@ -MODULE = dbghelp.dll -IMPORTLIB = libdbghelp.$(IMPLIBEXT) -IMPORTS = psapi kernel32 ntdll - -C_SRCS = \ - coff.c \ - dbghelp.c \ - dwarf.c \ - elf_module.c \ - image.c \ - memory.c \ - minidump.c \ - module.c \ - msc.c \ - path.c \ - pe_module.c \ - source.c \ - stabs.c \ - stack.c \ - storage.c \ - symbol.c \ - type.c - -@MAKE_DLL_RULES@ - -@DEPENDENCIES@ # everything below this line is overwritten by make depend diff --git a/reactos/dll/win32/dbghelp/dbghelp.c b/reactos/dll/win32/dbghelp/dbghelp.c index dc3b86a35db..fba22d09baf 100644 --- a/reactos/dll/win32/dbghelp/dbghelp.c +++ b/reactos/dll/win32/dbghelp/dbghelp.c @@ -268,8 +268,14 @@ BOOL WINAPI SymInitializeW(HANDLE hProcess, PCWSTR UserSearchPath, BOOL fInvadeP TRACE("(%p %s %u)\n", hProcess, debugstr_w(UserSearchPath), fInvadeProcess); - if (process_find_by_handle(hProcess)) - FIXME("what to do ??\n"); + if (process_find_by_handle(hProcess)){ + WARN("the symbols for this process have already been initialized!\n"); + + /* MSDN says to only call this function once unless SymCleanup() has been called since the last call. + It also says to call SymRefreshModuleList() instead if you just want the module list refreshed. + Native still returns TRUE even if the process has already been initialized. */ + return TRUE; + } pcs = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*pcs)); if (!pcs) return FALSE; @@ -379,6 +385,8 @@ BOOL WINAPI SymCleanup(HANDLE hProcess) return TRUE; } } + + ERR("this process has not had SymInitialize() called for it!\n"); return FALSE; } diff --git a/reactos/dll/win32/dbghelp/dbghelp.def b/reactos/dll/win32/dbghelp/dbghelp.def deleted file mode 100644 index 18e369af2b8..00000000000 --- a/reactos/dll/win32/dbghelp/dbghelp.def +++ /dev/null @@ -1,199 +0,0 @@ -; $Id: dbghelp.def 27344 2007-08-01 14:12:10Z tkreuzer $ -; -; ReactOS Operating System -; -; This file contains all dbghelp.dll exports -; -LIBRARY dbghelp.dll - -EXPORTS -;SymGetOmapBlockBase -DbgHelpCreateUserDump@12 -DbgHelpCreateUserDumpW@12 -EnumDirTree@24 -EnumDirTreeW@24 -EnumerateLoadedModules64@12 -EnumerateLoadedModules@12 -EnumerateLoadedModulesW64@12 -ExtensionApiVersion@0 -FindDebugInfoFile@12 -FindDebugInfoFileEx@20 -;FindDebugInfoFileExW; not existent on windows, stubbed in wine spec -FindExecutableImage@12 -FindExecutableImageEx@20 -FindExecutableImageExW@20 -FindFileInPath@32 -FindFileInSearchPath@28 -GetTimestampForLoadedLibrary@4 -ImageDirectoryEntryToData@16=ntdll.RtlImageDirectoryEntryToData -ImageDirectoryEntryToDataEx@20 -ImageNtHeader@4=ntdll.RtlImageNtHeader -ImageRvaToSection@12=ntdll.RtlImageRvaToSection -ImageRvaToVa@16=ntdll.RtlImageRvaToVa -ImagehlpApiVersion@0 -ImagehlpApiVersionEx@4 -MakeSureDirectoryPathExists@4 -MapDebugInformation@16 -MiniDumpReadDumpStream@20 -MiniDumpWriteDump@28 -SearchTreeForFile@12 -SearchTreeForFileW@12 -StackWalk64@36 -StackWalk@36 -SymAddSymbol@32 -SymAddSymbolW@32 -SymCleanup@4 -SymDeleteSymbol@28 -SymDeleteSymbolW@28 -SymEnumLines@28 -SymEnumLinesW@28 -SymEnumProcesses@8 -SymEnumSourceFiles@24 -SymEnumSourceFilesW@24 -SymEnumSourceLines@36 -SymEnumSourceLinesW@36 -SymEnumSym@20 -SymEnumSymbols@24 -SymEnumSymbolsForAddr@20 -SymEnumSymbolsForAddrW@20 -SymEnumSymbolsW@24 -SymEnumTypes@20 -SymEnumTypesW@20 -SymEnumerateModules64@12 -SymEnumerateModules@12 -SymEnumerateModulesW64@12 -SymEnumerateSymbols64@20 -SymEnumerateSymbols@16 -SymEnumerateSymbolsW64@20 -SymEnumerateSymbolsW@16 -;SymFindDebugInfoFile; not existent on windows, stubbed in wine spec -;SymFindDebugInfoFileW; not existent on windows, stubbed in wine spec -SymFindFileInPath@40 -SymFindFileInPathW@40 -SymFromAddr@20 -SymFromAddrW@20 -SymFromIndex@20 -SymFromIndexW@20 -SymFromName@12 -SymFromNameW@12 -SymFromToken@20 -SymFromTokenW@20 -SymFunctionTableAccess64@12 -SymFunctionTableAccess@8 -SymGetFileLineOffsets64@20 -SymGetHomeDirectory@12 -SymGetHomeDirectoryW@12 -SymGetLineFromAddr64@20 -SymGetLineFromAddr@16 -SymGetLineFromAddrW64@20 -SymGetLineFromName64@24 -SymGetLineFromName@24 -SymGetLineFromNameW64@24 -SymGetLineNext64@8 -SymGetLineNext@8 -SymGetLineNextW64@8 -SymGetLinePrev64@8 -SymGetLinePrev@8 -SymGetLinePrevW64@8 -SymGetModuleBase64@12 -SymGetModuleBase@8 -SymGetModuleInfo64@16 -SymGetModuleInfo@12 -SymGetModuleInfoW64@16 -SymGetModuleInfoW@12 -SymGetOptions@0 -SymGetScope@20 -SymGetScopeW@20 -SymGetSearchPath@12 -SymGetSearchPathW@12 -SymGetSourceFile@28 -SymGetSourceFileFromToken@20 -SymGetSourceFileFromTokenW@20 -SymGetSourceFileToken@24 -SymGetSourceFileTokenW@24 -;SymGetSourceFileW -;SymGetSourceVarFromToken -;SymGetSourceVarFromTokenW -SymGetSymFromAddr64@20 -SymGetSymFromAddr@16 -SymGetSymFromName64@12 -SymGetSymFromName@12 -SymGetSymNext64@8 -SymGetSymNext@8 -SymGetSymPrev64@8 -SymGetSymPrev@8 -SymGetSymbolFile@32 -SymGetSymbolFileW@32 -SymGetTypeFromName@20 -SymGetTypeFromNameW@20 -SymGetTypeInfo@24 -SymGetTypeInfoEx@16 -SymInitialize@12 -SymInitializeW@12 -SymLoadModule64@28 -SymLoadModule@24 -SymLoadModuleEx@36 -SymLoadModuleExW@36 -SymMatchFileName@16 -SymMatchFileNameW@16 -SymMatchString@12 -SymMatchStringA@12 -SymMatchStringW@12 -SymNext@8 -SymNextW@8 -SymPrev@8 -SymPrevW@8 -;SymRefreshModuleList -SymRegisterCallback64@16 -SymRegisterCallback@12 -SymRegisterCallbackW64@16 -SymRegisterFunctionEntryCallback64@16 -SymRegisterFunctionEntryCallback@12 -SymSearch@44 -SymSearchW@44 -SymSetContext@12 -SymSetHomeDirectory@8 -SymSetHomeDirectoryW@8 -SymSetOptions@4 -SymSetParentWindow@4 -SymSetSearchPath@8 -SymSetSearchPathW@8 -;SymSetSymWithAddr64 -SymSrvDeltaName@20 -SymSrvDeltaNameW@20 -;SymSrvGetFileIndexInfo; not existent on windows, stubbed in wine spec -;SymSrvGetFileIndexInfoW; not existent on windows, stubbed in wine spec -SymSrvGetFileIndexString@24 -SymSrvGetFileIndexStringW@24 -SymSrvGetFileIndexes@20 -SymSrvGetFileIndexesW@20 -SymSrvGetSupplement@16 -SymSrvGetSupplementW@16 -SymSrvIsStore@8 -SymSrvIsStoreW@8 -SymSrvStoreFile@16 -SymSrvStoreFileW@16 -SymSrvStoreSupplement@20 -SymSrvStoreSupplementW@20 -SymUnDName64@12 -SymUnDName@12 -SymUnloadModule64@12 -SymUnloadModule@8 -UnDecorateSymbolName@16 -UnDecorateSymbolNameW@16 -UnmapDebugInformation@4 -WinDbgExtensionDllInit@12 -;block -;dbghelp -;dh -;fptr -;homedir -;lmi -;lminfo -;omap -;srcfiles -;stack_force_ebp -;stackdbg -;sym -;symsrv -;vc7fpo diff --git a/reactos/dll/win32/dbghelp/dbghelp.rbuild b/reactos/dll/win32/dbghelp/dbghelp.rbuild index b7e71c8aaa8..236536ac3e5 100644 --- a/reactos/dll/win32/dbghelp/dbghelp.rbuild +++ b/reactos/dll/win32/dbghelp/dbghelp.rbuild @@ -1,17 +1,14 @@ + + + - + . include/reactos/wine - 0x600 - 0x502 - 0x502 + 0x600 + 0x600 - ntdll - wine - pseh - kernel32 - psapi coff.c dbghelp.c dwarf.c @@ -27,9 +24,14 @@ source.c stabs.c stack.c - stubs.c storage.c symbol.c type.c - dbghelp.rc + dbghelp.spec + wine + psapi + kernel32 + version + ntdll + diff --git a/reactos/dll/win32/dbghelp/dbghelp.rc b/reactos/dll/win32/dbghelp/dbghelp.rc deleted file mode 100644 index 766ec2b7b11..00000000000 --- a/reactos/dll/win32/dbghelp/dbghelp.rc +++ /dev/null @@ -1 +0,0 @@ -#include "wine/wine_common_ver.rc" diff --git a/reactos/dll/win32/dbghelp/dbghelp.spec b/reactos/dll/win32/dbghelp/dbghelp.spec index b023f3d70e3..d304a2a86d4 100644 --- a/reactos/dll/win32/dbghelp/dbghelp.spec +++ b/reactos/dll/win32/dbghelp/dbghelp.spec @@ -15,8 +15,8 @@ @ stub FindFileInPath @ stub FindFileInSearchPath @ stdcall GetTimestampForLoadedLibrary(long) -@ stdcall ImageDirectoryEntryToData(ptr long long ptr) ntdll.RtlImageDirectoryEntryToData -@ stub ImageDirectoryEntryToDataEx +@ stdcall ImageDirectoryEntryToData(ptr long long ptr) +@ stdcall ImageDirectoryEntryToDataEx(ptr long long ptr ptr) @ stdcall ImageNtHeader(ptr) ntdll.RtlImageNtHeader @ stdcall ImageRvaToSection(ptr ptr long) ntdll.RtlImageRvaToSection @ stdcall ImageRvaToVa(ptr ptr long ptr) ntdll.RtlImageRvaToVa @@ -40,15 +40,15 @@ @ stub SymEnumSym @ stdcall SymEnumSymbols(ptr double str ptr ptr) @ stdcall SymEnumSymbolsW(ptr double wstr ptr ptr) -@ stub SymEnumSymbolsForAddr -@ stub SymEnumSymbolsForAddrW +@ stdcall SymEnumSymbolsForAddr (ptr double ptr ptr) +@ stdcall SymEnumSymbolsForAddrW (ptr double ptr ptr) @ stdcall SymEnumTypes(ptr double ptr ptr) @ stdcall SymEnumTypesW(ptr double ptr ptr) @ stdcall SymEnumerateModules(long ptr ptr) @ stdcall SymEnumerateModules64(long ptr ptr) @ stdcall SymEnumerateModulesW64(long ptr ptr) @ stdcall SymEnumerateSymbols(long long ptr ptr) -@ stub SymEnumerateSymbols64 +@ stdcall SymEnumerateSymbols64(long double ptr ptr) @ stub SymEnumerateSymbolsW @ stub SymEnumerateSymbolsW64 @ stub SymFindDebugInfoFile diff --git a/reactos/dll/win32/dbghelp/dbghelp_private.h b/reactos/dll/win32/dbghelp/dbghelp_private.h index 99b8b542f9d..e4cae5befdc 100644 --- a/reactos/dll/win32/dbghelp/dbghelp_private.h +++ b/reactos/dll/win32/dbghelp/dbghelp_private.h @@ -106,7 +106,7 @@ void hash_table_iter_init(const struct hash_table* ht, void* hash_table_iter_up(struct hash_table_iter* hti); #define GET_ENTRY(__i, __t, __f) \ - ((__t*)((char*)(__i) - (unsigned int)(&((__t*)0)->__f))) + ((__t*)((char*)(__i) - FIELD_OFFSET(__t,__f))) extern unsigned dbghelp_options; @@ -206,12 +206,12 @@ struct symt_function struct vector vchildren; /* locals, params, blocks, start/end, labels */ }; -struct symt_function_point +struct symt_hierarchy_point { struct symt symt; /* either SymTagFunctionDebugStart, SymTagFunctionDebugEnd, SymTagLabel */ - struct symt_function* parent; + struct hash_table_elt hash_elt; /* if label (and in compiland's hash table if global) */ + struct symt* parent; /* symt_function or symt_compiland */ struct location loc; - const char* name; /* for labels */ }; struct symt_public @@ -256,6 +256,7 @@ struct symt_basic struct symt_enum { struct symt symt; + struct symt* base_type; const char* name; struct vector vchildren; }; @@ -548,7 +549,7 @@ extern struct symt_block* symt_close_func_block(struct module* module, struct symt_function* func, struct symt_block* block, unsigned pc); -extern struct symt_function_point* +extern struct symt_hierarchy_point* symt_add_function_point(struct module* module, struct symt_function* func, enum SymTagEnum point, @@ -568,6 +569,10 @@ extern struct symt_data* struct symt_compiland* parent, const char* name, struct symt* type, const VARIANT* v); +extern struct symt_hierarchy_point* + symt_new_label(struct module* module, + struct symt_compiland* compiland, + const char* name, unsigned long address); /* type.c */ extern void symt_init_basic(struct module* module); @@ -587,7 +592,8 @@ extern BOOL symt_add_udt_element(struct module* module, struct symt* elt_type, unsigned offset, unsigned size); extern struct symt_enum* - symt_new_enum(struct module* module, const char* typename); + symt_new_enum(struct module* module, const char* typename, + struct symt* basetype); extern BOOL symt_add_enum_element(struct module* module, struct symt_enum* enum_type, const char* name, int value); diff --git a/reactos/dll/win32/dbghelp/dbghelp_ros.diff b/reactos/dll/win32/dbghelp/dbghelp_ros.diff new file mode 100644 index 00000000000..6e26820208e --- /dev/null +++ b/reactos/dll/win32/dbghelp/dbghelp_ros.diff @@ -0,0 +1,79 @@ +Index: dbghelp.spec +=================================================================== +--- dbghelp.spec (revision 35049) ++++ dbghelp.spec (working copy) +@@ -40,8 +40,8 @@ + @ stub SymEnumSym + @ stdcall SymEnumSymbols(ptr double str ptr ptr) + @ stdcall SymEnumSymbolsW(ptr double wstr ptr ptr) +-@ stub SymEnumSymbolsForAddr +-@ stub SymEnumSymbolsForAddrW ++@ stdcall SymEnumSymbolsForAddr (ptr double ptr ptr) ++@ stdcall SymEnumSymbolsForAddrW (ptr double ptr ptr) + @ stdcall SymEnumTypes(ptr double ptr ptr) + @ stdcall SymEnumTypesW(ptr double ptr ptr) + @ stdcall SymEnumerateModules(long ptr ptr) +Index: symbol.c +=================================================================== +--- symbol.c (revision 35049) ++++ symbol.c (working copy) +@@ -1000,6 +1000,30 @@ + } + + /****************************************************************** ++ * SymEnumSymbolsForAddrW (DBGHELP.@) ++ * ++ */ ++BOOL WINAPI SymEnumSymbolsForAddrW(HANDLE hProcess, DWORD64 Address, ++ PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback, ++ PVOID UserContext) ++{ ++ UNIMPLEMENTED; ++ return FALSE; ++} ++ ++/****************************************************************** ++ * SymEnumSymbolsForAddr (DBGHELP.@) ++ * ++ */ ++BOOL WINAPI SymEnumSymbolsForAddr(HANDLE hProcess, DWORD64 Address, ++ PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, ++ PVOID UserContext) ++{ ++ UNIMPLEMENTED; ++ return FALSE; ++} ++ ++/****************************************************************** + * SymEnumSymbolsW (DBGHELP.@) + * + */ +Index: stabs.c +=================================================================== +--- stabs.c (revision 35085) ++++ stabs.c (working copy) +@@ -63,8 +63,6 @@ + + WINE_DEFAULT_DEBUG_CHANNEL(dbghelp_stabs); + ++UINT64 _strtoui64( const char *nptr, char **endptr, int base ); ++ + #ifndef N_UNDF + #define N_UNDF 0x00 + #endif +@@ -468,13 +466,13 @@ + break; + case '-': + prv->sign = -1; +- prv->val = strtoull(++ptd->ptr, &last, 10); ++ prv->val = _strtoui64(++ptd->ptr, &last, 10); + ptd->ptr = last; + break; + case '+': + default: + prv->sign = 1; +- prv->val = strtoull(ptd->ptr, &last, 10); ++ prv->val = _strtoui64(ptd->ptr, &last, 10); + ptd->ptr = last; + break; + } diff --git a/reactos/dll/win32/dbghelp/dwarf.c b/reactos/dll/win32/dbghelp/dwarf.c index a03b0490800..ccd39fbd569 100644 --- a/reactos/dll/win32/dbghelp/dwarf.c +++ b/reactos/dll/win32/dbghelp/dwarf.c @@ -19,6 +19,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#define NONAMELESSUNION + #include "config.h" #include @@ -167,6 +169,13 @@ typedef struct dwarf2_traverse_context_s unsigned char word_size; } dwarf2_traverse_context_t; +/* symt_cache indexes */ +#define sc_void 0 +#define sc_int1 1 +#define sc_int2 2 +#define sc_int4 3 +#define sc_num 4 + typedef struct dwarf2_parse_context_s { const dwarf2_section_t* sections; @@ -179,6 +188,7 @@ typedef struct dwarf2_parse_context_s unsigned long load_offset; unsigned long ref_offset; unsigned char word_size; + struct symt* symt_cache[sc_num]; /* void, int1, int2, int4 */ } dwarf2_parse_context_t; /* stored in the dbghelp's module internal structure for later reuse */ @@ -932,7 +942,7 @@ static struct symt* dwarf2_parse_base_type(dwarf2_parse_context_t* ctx, struct attribute size; struct attribute encoding; enum BasicType bt; - + int cache_idx = -1; if (di->symt) return di->symt; TRACE("%s, for %s\n", dwarf2_debug_ctx(ctx), dwarf2_debug_di(di)); @@ -956,6 +966,25 @@ static struct symt* dwarf2_parse_base_type(dwarf2_parse_context_t* ctx, default: bt = btNoType; break; } di->symt = &symt_new_basic(ctx->module, bt, name.u.string, size.u.uvalue)->symt; + switch (bt) + { + case btVoid: + assert(size.u.uvalue == 0); + cache_idx = sc_void; + break; + case btInt: + switch (size.u.uvalue) + { + case 1: cache_idx = sc_int1; break; + case 2: cache_idx = sc_int2; break; + case 4: cache_idx = sc_int4; break; + } + break; + default: break; + } + if (cache_idx != -1 && !ctx->symt_cache[cache_idx]) + ctx->symt_cache[cache_idx] = di->symt; + if (di->abbrev->have_child) FIXME("Unsupported children\n"); return di->symt; } @@ -991,8 +1020,10 @@ static struct symt* dwarf2_parse_pointer_type(dwarf2_parse_context_t* ctx, if (!dwarf2_find_attribute(ctx, di, DW_AT_byte_size, &size)) size.u.uvalue = 0; if (!(ref_type = dwarf2_lookup_type(ctx, di))) - ref_type = &symt_new_basic(ctx->module, btVoid, "void", 0)->symt; - + { + ref_type = ctx->symt_cache[sc_void]; + assert(ref_type); + } di->symt = &symt_new_pointer(ctx->module, ref_type)->symt; if (di->abbrev->have_child) FIXME("Unsupported children\n"); return di->symt; @@ -1181,6 +1212,7 @@ static struct symt* dwarf2_parse_udt_type(dwarf2_parse_context_t* ctx, case DW_TAG_structure_type: case DW_TAG_class_type: case DW_TAG_union_type: + case DW_TAG_typedef: /* FIXME: we need to handle nested udt definitions */ break; default: @@ -1215,15 +1247,24 @@ static struct symt* dwarf2_parse_enumeration_type(dwarf2_parse_context_t* ctx, { struct attribute name; struct attribute size; + struct symt_basic* basetype; if (di->symt) return di->symt; TRACE("%s, for %s\n", dwarf2_debug_ctx(ctx), dwarf2_debug_di(di)); if (!dwarf2_find_attribute(ctx, di, DW_AT_name, &name)) name.u.string = NULL; - if (!dwarf2_find_attribute(ctx, di, DW_AT_byte_size, &size)) size.u.uvalue = 0; + if (!dwarf2_find_attribute(ctx, di, DW_AT_byte_size, &size)) size.u.uvalue = 4; - di->symt = &symt_new_enum(ctx->module, name.u.string)->symt; + switch (size.u.uvalue) /* FIXME: that's wrong */ + { + case 1: basetype = symt_new_basic(ctx->module, btInt, "char", 1); break; + case 2: basetype = symt_new_basic(ctx->module, btInt, "short", 2); break; + default: + case 4: basetype = symt_new_basic(ctx->module, btInt, "int", 4); break; + } + + di->symt = &symt_new_enum(ctx->module, name.u.string, &basetype->symt)->symt; if (di->abbrev->have_child) /* any interest to not have child ? */ { @@ -1530,7 +1571,11 @@ static struct symt* dwarf2_parse_subprogram(dwarf2_parse_context_t* ctx, TRACE("%s, for %s\n", dwarf2_debug_ctx(ctx), dwarf2_debug_di(di)); - if (!dwarf2_find_attribute(ctx, di, DW_AT_name, &name)) name.u.string = NULL; + if (!dwarf2_find_attribute(ctx, di, DW_AT_name, &name)) + { + WARN("No name for function... dropping function\n"); + return NULL; + } /* if it's an abstract representation of an inline function, there should be * a concrete object that we'll handle */ @@ -1554,7 +1599,10 @@ static struct symt* dwarf2_parse_subprogram(dwarf2_parse_context_t* ctx, is_decl.u.uvalue = 0; if (!(ret_type = dwarf2_lookup_type(ctx, di))) - ret_type = &symt_new_basic(ctx->module, btVoid, "void", 0)->symt; + { + ret_type = ctx->symt_cache[sc_void]; + assert(ret_type); + } /* FIXME: assuming C source code */ sig_type = symt_new_function_signature(ctx->module, ret_type, CV_CALL_FAR_C); @@ -1631,7 +1679,7 @@ static struct symt* dwarf2_parse_subprogram(dwarf2_parse_context_t* ctx, symt_add_function_point(ctx->module, subpgm.func, SymTagCustom, &subpgm.frame, NULL); } - symt_normalize_function(subpgm.ctx->module, subpgm.func); + if (subpgm.func) symt_normalize_function(subpgm.ctx->module, subpgm.func); return di->symt; } @@ -1647,7 +1695,10 @@ static struct symt* dwarf2_parse_subroutine_type(dwarf2_parse_context_t* ctx, TRACE("%s, for %s\n", dwarf2_debug_ctx(ctx), dwarf2_debug_di(di)); if (!(ret_type = dwarf2_lookup_type(ctx, di))) - ret_type = &symt_new_basic(ctx->module, btVoid, "void", 0)->symt; + { + ret_type = ctx->symt_cache[sc_void]; + assert(ret_type); + } /* FIXME: assuming C source code */ sig_type = symt_new_function_signature(ctx->module, ret_type, CV_CALL_FAR_C); @@ -1935,29 +1986,40 @@ static BOOL dwarf2_parse_line_numbers(const dwarf2_section_t* sections, } static BOOL dwarf2_parse_compilation_unit(const dwarf2_section_t* sections, - const dwarf2_comp_unit_t* comp_unit, struct module* module, const struct elf_thunk_area* thunks, - const unsigned char* comp_unit_cursor, + dwarf2_traverse_context_t* mod_ctx, unsigned long load_offset) { dwarf2_parse_context_t ctx; - dwarf2_traverse_context_t traverse; dwarf2_traverse_context_t abbrev_ctx; dwarf2_debug_info_t* di; + dwarf2_traverse_context_t cu_ctx; + const unsigned char* comp_unit_start = mod_ctx->data; + unsigned long cu_length; + unsigned short cu_version; + unsigned long cu_abbrev_offset; BOOL ret = FALSE; - TRACE("Compilation Unit Header found at 0x%x:\n", - comp_unit_cursor - sections[section_debug].address); - TRACE("- length: %lu\n", comp_unit->length); - TRACE("- version: %u\n", comp_unit->version); - TRACE("- abbrev_offset: %lu\n", comp_unit->abbrev_offset); - TRACE("- word_size: %u\n", comp_unit->word_size); + cu_length = dwarf2_parse_u4(mod_ctx); + cu_ctx.data = cu_ctx.start_data = mod_ctx->data; + cu_ctx.end_data = mod_ctx->data + cu_length; + mod_ctx->data += cu_length; + cu_version = dwarf2_parse_u2(&cu_ctx); + cu_abbrev_offset = dwarf2_parse_u4(&cu_ctx); + cu_ctx.word_size = dwarf2_parse_byte(&cu_ctx); - if (comp_unit->version != 2) + TRACE("Compilation Unit Header found at 0x%x:\n", + comp_unit_start - sections[section_debug].address); + TRACE("- length: %lu\n", cu_length); + TRACE("- version: %u\n", cu_version); + TRACE("- abbrev_offset: %lu\n", cu_abbrev_offset); + TRACE("- word_size: %u\n", cu_ctx.word_size); + + if (cu_version != 2) { WARN("%u DWARF version unsupported. Wine dbghelp only support DWARF 2.\n", - comp_unit->version); + cu_version); return FALSE; } @@ -1965,24 +2027,21 @@ static BOOL dwarf2_parse_compilation_unit(const dwarf2_section_t* sections, ctx.sections = sections; ctx.section = section_debug; ctx.module = module; - ctx.word_size = comp_unit->word_size; + ctx.word_size = cu_ctx.word_size; ctx.thunks = thunks; ctx.load_offset = load_offset; - ctx.ref_offset = comp_unit_cursor - sections[section_debug].address; + ctx.ref_offset = comp_unit_start - sections[section_debug].address; + memset(ctx.symt_cache, 0, sizeof(ctx.symt_cache)); + ctx.symt_cache[sc_void] = &symt_new_basic(module, btVoid, "void", 0)->symt; - traverse.start_data = comp_unit_cursor + sizeof(dwarf2_comp_unit_stream_t); - traverse.data = traverse.start_data; - traverse.word_size = comp_unit->word_size; - traverse.end_data = comp_unit_cursor + comp_unit->length + sizeof(unsigned); - - abbrev_ctx.start_data = sections[section_abbrev].address + comp_unit->abbrev_offset; + abbrev_ctx.start_data = sections[section_abbrev].address + cu_abbrev_offset; abbrev_ctx.data = abbrev_ctx.start_data; abbrev_ctx.end_data = sections[section_abbrev].address + sections[section_abbrev].size; - abbrev_ctx.word_size = comp_unit->word_size; + abbrev_ctx.word_size = cu_ctx.word_size; dwarf2_parse_abbrev_set(&abbrev_ctx, &ctx.abbrev_table, &ctx.pool); sparse_array_init(&ctx.debug_info_table, sizeof(dwarf2_debug_info_t), 128); - dwarf2_read_one_debug_info(&ctx, &traverse, &di); + dwarf2_read_one_debug_info(&ctx, &cu_ctx, &di); if (di->abbrev->tag == DW_TAG_compile_unit) { @@ -2069,7 +2128,7 @@ static enum location_error loc_compute_frame(struct process* pcs, psym = vector_at(&func->vchildren, i); if ((*psym)->tag == SymTagCustom) { - pframe = &((struct symt_function_point*)*psym)->loc; + pframe = &((struct symt_hierarchy_point*)*psym)->loc; /* First, recompute the frame information, if needed */ switch (pframe->kind) @@ -2174,8 +2233,10 @@ BOOL dwarf2_parse(struct module* module, unsigned long load_offset, { dwarf2_section_t section[section_max]; unsigned char* ptr; - const unsigned char*comp_unit_cursor = debug; - const unsigned char*end_debug = debug + debug_size; + dwarf2_traverse_context_t mod_ctx; + + mod_ctx.start_data = mod_ctx.data = debug; + mod_ctx.end_data = debug + debug_size; module->loc_compute = dwarf2_location_compute; @@ -2202,20 +2263,9 @@ BOOL dwarf2_parse(struct module* module, unsigned long load_offset, module->dwarf2_info->debug_loc.size = loclist_size; } - while (comp_unit_cursor < end_debug) + while (mod_ctx.data < mod_ctx.end_data) { - const dwarf2_comp_unit_stream_t* comp_unit_stream; - dwarf2_comp_unit_t comp_unit; - - comp_unit_stream = (const dwarf2_comp_unit_stream_t*) comp_unit_cursor; - comp_unit.length = *(const unsigned long*) comp_unit_stream->length; - comp_unit.version = *(const unsigned short*) comp_unit_stream->version; - comp_unit.abbrev_offset = *(const unsigned long*) comp_unit_stream->abbrev_offset; - comp_unit.word_size = *(const unsigned char*) comp_unit_stream->word_size; - - dwarf2_parse_compilation_unit(section, &comp_unit, module, - thunks, comp_unit_cursor, load_offset); - comp_unit_cursor += comp_unit.length + sizeof(unsigned); + dwarf2_parse_compilation_unit(section, module, thunks, &mod_ctx, load_offset); } module->module.SymType = SymDia; module->module.CVSig = 'D' | ('W' << 8) | ('A' << 16) | ('R' << 24); diff --git a/reactos/dll/win32/dbghelp/dwarf.h b/reactos/dll/win32/dbghelp/dwarf.h index c03799ef9ca..6a34bb59b0b 100644 --- a/reactos/dll/win32/dbghelp/dwarf.h +++ b/reactos/dll/win32/dbghelp/dwarf.h @@ -18,34 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -typedef struct -{ - unsigned char length[4]; - unsigned char version[2]; - unsigned char abbrev_offset[4]; - unsigned char word_size[1]; -} dwarf2_comp_unit_stream_t; - -typedef struct -{ - unsigned long length; - unsigned short version; - unsigned long abbrev_offset; - unsigned char word_size; -} dwarf2_comp_unit_t; - -typedef struct -{ - unsigned int length; - unsigned short version; - unsigned int prologue_length; - unsigned char min_insn_length; - unsigned char default_is_stmt; - int line_base; - unsigned char line_range; - unsigned char opcode_base; -} dwarf2_line_info_t; - typedef enum dwarf_tag_e { DW_TAG_padding = 0x00, diff --git a/reactos/dll/win32/dbghelp/minidump.c b/reactos/dll/win32/dbghelp/minidump.c index dd0cd8de551..52458f24f01 100644 --- a/reactos/dll/win32/dbghelp/minidump.c +++ b/reactos/dll/win32/dbghelp/minidump.c @@ -57,8 +57,8 @@ struct dump_context void* pcs_buffer; SYSTEM_PROCESS_INFORMATION* spi; /* module information */ - struct dump_module* module; - unsigned num_module; + struct dump_module* modules; + unsigned num_modules; /* exception information */ /* output information */ MINIDUMP_TYPE type; @@ -71,12 +71,12 @@ struct dump_context }; /****************************************************************** - * fetch_process_info + * fetch_processes_info * * reads system wide process information, and make spi point to the record * for process of id 'pid' */ -static BOOL fetch_process_info(struct dump_context* dc) +static BOOL fetch_processes_info(struct dump_context* dc) { ULONG buf_size = 0x1000; NTSTATUS nts; @@ -119,20 +119,50 @@ static void fetch_thread_stack(struct dump_context* dc, const void* teb_addr, { #ifdef __i386__ /* limiting the stack dumping to the size actually used */ - if (ctx->Esp) - mmd->StartOfMemoryRange = (ctx->Esp - 4); + if (ctx->Esp){ + + /* make sure ESP is within the established range of the stack. It could have + been clobbered by whatever caused the original exception. */ + if (ctx->Esp - 4 < (ULONG_PTR)tib.StackLimit || ctx->Esp - 4 > (ULONG_PTR)tib.StackBase) + mmd->StartOfMemoryRange = (ULONG_PTR)tib.StackLimit; + + else + mmd->StartOfMemoryRange = (ctx->Esp - 4); + } + else mmd->StartOfMemoryRange = (ULONG_PTR)tib.StackLimit; + #elif defined(__powerpc__) - if (ctx->Iar) - mmd->StartOfMemoryRange = ctx->Iar - 4; + if (ctx->Iar){ + + /* make sure IAR is within the established range of the stack. It could have + been clobbered by whatever caused the original exception. */ + if (ctx->Iar - 4 < (ULONG_PTR)tib.StackLimit || ctx->Iar - 4 > (ULONG_PTR)tib.StackBase) + mmd->StartOfMemoryRange = (ULONG_PTR)tib.StackLimit; + + else + mmd->StartOfMemoryRange = (ctx->Iar - 4); + } + else mmd->StartOfMemoryRange = (ULONG_PTR)tib.StackLimit; + #elif defined(__x86_64__) - if (ctx->Rsp) - mmd->StartOfMemoryRange = (ctx->Rsp - 8); + if (ctx->Rsp){ + + /* make sure RSP is within the established range of the stack. It could have + been clobbered by whatever caused the original exception. */ + if (ctx->Rsp - 8 < (ULONG_PTR)tib.StackLimit || ctx->Rsp - 8 > (ULONG_PTR)tib.StackBase) + mmd->StartOfMemoryRange = (ULONG_PTR)tib.StackLimit; + + else + mmd->StartOfMemoryRange = (ctx->Rsp - 8); + } + else mmd->StartOfMemoryRange = (ULONG_PTR)tib.StackLimit; + #else #error unsupported CPU #endif @@ -182,7 +212,6 @@ static BOOL fetch_thread_info(struct dump_context* dc, int thd_idx, if (tid != GetCurrentThreadId() && (mdThd->SuspendCount = SuspendThread(hThread)) != (DWORD)-1) { - mdThd->SuspendCount--; ctx->ContextFlags = CONTEXT_FULL; if (!GetThreadContext(hThread, ctx)) memset(ctx, 0, sizeof(*ctx)); @@ -193,6 +222,7 @@ static BOOL fetch_thread_info(struct dump_context* dc, int thd_idx, else if (tid == GetCurrentThreadId() && except) { CONTEXT lctx, *pctx; + mdThd->SuspendCount = 1; if (except->ClientPointers) { EXCEPTION_POINTERS ep; @@ -204,8 +234,11 @@ static BOOL fetch_thread_info(struct dump_context* dc, int thd_idx, pctx = &lctx; } else pctx = except->ExceptionPointers->ContextRecord; + + *ctx = *pctx; fetch_thread_stack(dc, tbi.TebBaseAddress, pctx, &mdThd->Stack); } + else mdThd->SuspendCount = 0; } } CloseHandle(hThread); @@ -221,24 +254,24 @@ static BOOL add_module(struct dump_context* dc, const WCHAR* name, DWORD base, DWORD size, DWORD timestamp, DWORD checksum, BOOL is_elf) { - if (!dc->module) - dc->module = HeapAlloc(GetProcessHeap(), 0, - ++dc->num_module * sizeof(*dc->module)); + if (!dc->modules) + dc->modules = HeapAlloc(GetProcessHeap(), 0, + ++dc->num_modules * sizeof(*dc->modules)); else - dc->module = HeapReAlloc(GetProcessHeap(), 0, dc->module, - ++dc->num_module * sizeof(*dc->module)); - if (!dc->module) return FALSE; + dc->modules = HeapReAlloc(GetProcessHeap(), 0, dc->modules, + ++dc->num_modules * sizeof(*dc->modules)); + if (!dc->modules) return FALSE; if (is_elf || !GetModuleFileNameExW(dc->hProcess, (HMODULE)base, - dc->module[dc->num_module - 1].name, - sizeof(dc->module[dc->num_module - 1].name) / sizeof(WCHAR))) - lstrcpynW(dc->module[dc->num_module - 1].name, name, - sizeof(dc->module[dc->num_module - 1].name) / sizeof(WCHAR)); - dc->module[dc->num_module - 1].base = base; - dc->module[dc->num_module - 1].size = size; - dc->module[dc->num_module - 1].timestamp = timestamp; - dc->module[dc->num_module - 1].checksum = checksum; - dc->module[dc->num_module - 1].is_elf = is_elf; + dc->modules[dc->num_modules - 1].name, + sizeof(dc->modules[dc->num_modules - 1].name) / sizeof(WCHAR))) + lstrcpynW(dc->modules[dc->num_modules - 1].name, name, + sizeof(dc->modules[dc->num_modules - 1].name) / sizeof(WCHAR)); + dc->modules[dc->num_modules - 1].base = base; + dc->modules[dc->num_modules - 1].size = size; + dc->modules[dc->num_modules - 1].timestamp = timestamp; + dc->modules[dc->num_modules - 1].checksum = checksum; + dc->modules[dc->num_modules - 1].is_elf = is_elf; return TRUE; } @@ -285,7 +318,7 @@ static BOOL fetch_elf_module_info_cb(const WCHAR* name, unsigned long base, return TRUE; } -static void fetch_module_info(struct dump_context* dc) +static void fetch_modules_info(struct dump_context* dc) { EnumerateLoadedModulesW64(dc->hProcess, fetch_pe_module_info_cb, dc); /* Since we include ELF modules in a separate stream from the regular PE ones, @@ -296,6 +329,28 @@ static void fetch_module_info(struct dump_context* dc) elf_enum_modules(dc->hProcess, fetch_elf_module_info_cb, dc); } +static void fetch_module_versioninfo(LPCWSTR filename, VS_FIXEDFILEINFO* ffi) +{ + DWORD handle; + DWORD sz; + static const WCHAR backslashW[] = {'\\', '\0'}; + + memset(ffi, 0, sizeof(*ffi)); + if ((sz = GetFileVersionInfoSizeW(filename, &handle))) + { + void* info = HeapAlloc(GetProcessHeap(), 0, sz); + if (info && GetFileVersionInfoW(filename, handle, sz, info)) + { + VS_FIXEDFILEINFO* ptr; + UINT len; + + if (VerQueryValueW(info, backslashW, (void*)&ptr, &len)) + memcpy(ffi, ptr, min(len, sizeof(*ffi))); + } + HeapFree(GetProcessHeap(), 0, info); + } +} + /****************************************************************** * add_memory_block * @@ -350,9 +405,8 @@ static void append(struct dump_context* dc, void* data, unsigned size) * * Write in File the exception information from pcs */ -static void dump_exception_info(struct dump_context* dc, - const MINIDUMP_EXCEPTION_INFORMATION* except, - DWORD *size) +static unsigned dump_exception_info(struct dump_context* dc, + const MINIDUMP_EXCEPTION_INFORMATION* except) { MINIDUMP_EXCEPTION_STREAM mdExcpt; EXCEPTION_RECORD rec, *prec; @@ -386,13 +440,13 @@ static void dump_exception_info(struct dump_context* dc, mdExcpt.ExceptionRecord.NumberParameters = prec->NumberParameters; mdExcpt.ExceptionRecord.__unusedAlignment = 0; for (i = 0; i < mdExcpt.ExceptionRecord.NumberParameters; i++) - mdExcpt.ExceptionRecord.ExceptionInformation[i] = (DWORD_PTR)prec->ExceptionInformation[i]; + mdExcpt.ExceptionRecord.ExceptionInformation[i] = prec->ExceptionInformation[i]; mdExcpt.ThreadContext.DataSize = sizeof(*pctx); mdExcpt.ThreadContext.Rva = dc->rva + sizeof(mdExcpt); append(dc, &mdExcpt, sizeof(mdExcpt)); - *size = sizeof(mdExcpt); append(dc, pctx, sizeof(*pctx)); + return sizeof(mdExcpt); } /****************************************************************** @@ -400,7 +454,7 @@ static void dump_exception_info(struct dump_context* dc, * * Write in File the modules from pcs */ -static void dump_modules(struct dump_context* dc, BOOL dump_elf, DWORD *size) +static unsigned dump_modules(struct dump_context* dc, BOOL dump_elf) { MINIDUMP_MODULE mdModule; MINIDUMP_MODULE_LIST mdModuleList; @@ -409,11 +463,12 @@ static void dump_modules(struct dump_context* dc, BOOL dump_elf, DWORD *size ULONG i, nmod; RVA rva_base; DWORD flags_out; + unsigned sz; - for (i = nmod = 0; i < dc->num_module; i++) + for (i = nmod = 0; i < dc->num_modules; i++) { - if ((dc->module[i].is_elf && dump_elf) || - (!dc->module[i].is_elf && !dump_elf)) + if ((dc->modules[i].is_elf && dump_elf) || + (!dc->modules[i].is_elf && !dump_elf)) nmod++; } @@ -423,12 +478,17 @@ static void dump_modules(struct dump_context* dc, BOOL dump_elf, DWORD *size * size of mdModuleList * FIXME: if we don't ask for all modules in cb, we'll get a hole in the file */ + + /* the stream size is just the size of the module index. It does not include the data for the + names of each module. *Technically* the names are supposed to go into the common string table + in the minidump file. Since each string is referenced by RVA they can all safely be located + anywhere between streams in the file, so the end of this stream is sufficient. */ rva_base = dc->rva; - dc->rva += *size = sizeof(mdModuleList.NumberOfModules) + sizeof(mdModule) * nmod; - for (i = 0; i < dc->num_module; i++) + dc->rva += sz = sizeof(mdModuleList.NumberOfModules) + sizeof(mdModule) * nmod; + for (i = 0; i < dc->num_modules; i++) { - if ((dc->module[i].is_elf && !dump_elf) || - (!dc->module[i].is_elf && dump_elf)) + if ((dc->modules[i].is_elf && !dump_elf) || + (!dc->modules[i].is_elf && dump_elf)) continue; flags_out = ModuleWriteModule | ModuleWriteMiscRecord | ModuleWriteCvRecord; @@ -438,10 +498,10 @@ static void dump_modules(struct dump_context* dc, BOOL dump_elf, DWORD *size flags_out |= ModuleWriteTlsData; if (dc->type & MiniDumpWithCodeSegs) flags_out |= ModuleWriteCodeSegs; - ms->Length = (lstrlenW(dc->module[i].name) + 1) * sizeof(WCHAR); + ms->Length = (lstrlenW(dc->modules[i].name) + 1) * sizeof(WCHAR); if (sizeof(ULONG) + ms->Length > sizeof(tmp)) FIXME("Buffer overflow!!!\n"); - lstrcpyW(ms->Buffer, dc->module[i].name); + lstrcpyW(ms->Buffer, dc->modules[i].name); if (dc->cb) { @@ -453,10 +513,10 @@ static void dump_modules(struct dump_context* dc, BOOL dump_elf, DWORD *size cbin.CallbackType = ModuleCallback; cbin.u.Module.FullPath = ms->Buffer; - cbin.u.Module.BaseOfImage = dc->module[i].base; - cbin.u.Module.SizeOfImage = dc->module[i].size; - cbin.u.Module.CheckSum = dc->module[i].checksum; - cbin.u.Module.TimeDateStamp = dc->module[i].timestamp; + cbin.u.Module.BaseOfImage = dc->modules[i].base; + cbin.u.Module.SizeOfImage = dc->modules[i].size; + cbin.u.Module.CheckSum = dc->modules[i].checksum; + cbin.u.Module.TimeDateStamp = dc->modules[i].timestamp; memset(&cbin.u.Module.VersionInfo, 0, sizeof(cbin.u.Module.VersionInfo)); cbin.u.Module.CvRecord = NULL; cbin.u.Module.SizeOfCvRecord = 0; @@ -470,14 +530,14 @@ static void dump_modules(struct dump_context* dc, BOOL dump_elf, DWORD *size } if (flags_out & ModuleWriteModule) { - mdModule.BaseOfImage = dc->module[i].base; - mdModule.SizeOfImage = dc->module[i].size; - mdModule.CheckSum = dc->module[i].checksum; - mdModule.TimeDateStamp = dc->module[i].timestamp; + mdModule.BaseOfImage = dc->modules[i].base; + mdModule.SizeOfImage = dc->modules[i].size; + mdModule.CheckSum = dc->modules[i].checksum; + mdModule.TimeDateStamp = dc->modules[i].timestamp; mdModule.ModuleNameRva = dc->rva; ms->Length -= sizeof(WCHAR); append(dc, ms, sizeof(ULONG) + ms->Length + sizeof(WCHAR)); - memset(&mdModule.VersionInfo, 0, sizeof(mdModule.VersionInfo)); /* FIXME */ + fetch_module_versioninfo(ms->Buffer, &mdModule.VersionInfo); mdModule.CvRecord.DataSize = 0; /* FIXME */ mdModule.CvRecord.Rva = 0; /* FIXME */ mdModule.MiscRecord.DataSize = 0; /* FIXME */ @@ -492,6 +552,8 @@ static void dump_modules(struct dump_context* dc, BOOL dump_elf, DWORD *size } writeat(dc, rva_base, &mdModuleList.NumberOfModules, sizeof(mdModuleList.NumberOfModules)); + + return sz; } /****************************************************************** @@ -499,7 +561,7 @@ static void dump_modules(struct dump_context* dc, BOOL dump_elf, DWORD *size * * Dumps into File the information about the system */ -static void dump_system_info(struct dump_context* dc, DWORD *size) +static unsigned dump_system_info(struct dump_context* dc) { MINIDUMP_SYSTEM_INFO mdSysInfo; SYSTEM_INFO sysInfo; @@ -523,16 +585,21 @@ static void dump_system_info(struct dump_context* dc, DWORD *size) mdSysInfo.CSDVersionRva = dc->rva + sizeof(mdSysInfo); mdSysInfo.u1.Reserved1 = 0; + mdSysInfo.u1.s.SuiteMask = VER_SUITE_TERMINAL; + FIXME("fill in CPU vendorID and feature set\n"); memset(&mdSysInfo.Cpu, 0, sizeof(mdSysInfo.Cpu)); append(dc, &mdSysInfo, sizeof(mdSysInfo)); - *size = sizeof(mdSysInfo); + /* write the service pack version string after this stream. It is referenced within the + stream by its RVA in the file. */ slen = lstrlenW(osInfo.szCSDVersion) * sizeof(WCHAR); WriteFile(dc->hFile, &slen, sizeof(slen), &written, NULL); WriteFile(dc->hFile, osInfo.szCSDVersion, slen, &written, NULL); dc->rva += sizeof(ULONG) + slen; + + return sizeof(mdSysInfo); } /****************************************************************** @@ -540,9 +607,8 @@ static void dump_system_info(struct dump_context* dc, DWORD *size) * * Dumps into File the information about running threads */ -static void dump_threads(struct dump_context* dc, - const MINIDUMP_EXCEPTION_INFORMATION* except, - DWORD *size) +static unsigned dump_threads(struct dump_context* dc, + const MINIDUMP_EXCEPTION_INFORMATION* except) { MINIDUMP_THREAD mdThd; MINIDUMP_THREAD_LIST mdThdList; @@ -578,7 +644,7 @@ static void dump_threads(struct dump_context* dc, cbin.CallbackType = ThreadCallback; cbin.u.Thread.ThreadId = dc->spi->ti[i].dwThreadID; cbin.u.Thread.ThreadHandle = 0; /* FIXME */ - memcpy(&cbin.u.Thread.Context, &ctx, sizeof(CONTEXT)); + cbin.u.Thread.Context = ctx; cbin.u.Thread.SizeOfContext = sizeof(CONTEXT); cbin.u.Thread.StackBase = mdThd.Stack.StartOfMemoryRange; cbin.u.Thread.StackEnd = mdThd.Stack.StartOfMemoryRange + @@ -622,7 +688,8 @@ static void dump_threads(struct dump_context* dc, } writeat(dc, rva_base, &mdThdList.NumberOfThreads, sizeof(mdThdList.NumberOfThreads)); - *size = dc->rva - rva_base; + + return dc->rva - rva_base; } /****************************************************************** @@ -630,12 +697,12 @@ static void dump_threads(struct dump_context* dc, * * dumps information about the memory of the process (stack of the threads) */ -static void dump_memory_info(struct dump_context* dc, DWORD* size) +static unsigned dump_memory_info(struct dump_context* dc) { MINIDUMP_MEMORY_LIST mdMemList; MINIDUMP_MEMORY_DESCRIPTOR mdMem; DWORD written; - unsigned i, pos, len; + unsigned i, pos, len, sz; RVA rva_base; char tmp[1024]; @@ -643,9 +710,9 @@ static void dump_memory_info(struct dump_context* dc, DWORD* size) append(dc, &mdMemList.NumberOfMemoryRanges, sizeof(mdMemList.NumberOfMemoryRanges)); rva_base = dc->rva; - dc->rva += mdMemList.NumberOfMemoryRanges * sizeof(mdMem); - *size = sizeof(mdMemList.NumberOfMemoryRanges) + - mdMemList.NumberOfMemoryRanges * sizeof(mdMem); + sz = mdMemList.NumberOfMemoryRanges * sizeof(mdMem); + dc->rva += sz; + sz += sizeof(mdMemList.NumberOfMemoryRanges); for (i = 0; i < dc->num_mem; i++) { @@ -657,7 +724,7 @@ static void dump_memory_info(struct dump_context* dc, DWORD* size) { len = min(dc->mem[i].size - pos, sizeof(tmp)); if (ReadProcessMemory(dc->hProcess, - (void*)(ULONG)(dc->mem[i].base + pos), + (void*)(dc->mem[i].base + pos), tmp, len, NULL)) WriteFile(dc->hFile, tmp, len, &written, NULL); } @@ -668,9 +735,11 @@ static void dump_memory_info(struct dump_context* dc, DWORD* size) writeat(dc, dc->mem[i].rva, &mdMem.Memory.Rva, sizeof(mdMem.Memory.Rva)); } } + + return sz; } -static void dump_misc_info(struct dump_context* dc, DWORD* size) +static unsigned dump_misc_info(struct dump_context* dc) { MINIDUMP_MISC_INFO mmi; @@ -678,8 +747,12 @@ static void dump_misc_info(struct dump_context* dc, DWORD* size) mmi.Flags1 = MINIDUMP_MISC1_PROCESS_ID; mmi.ProcessId = dc->pid; /* FIXME: create/user/kernel time */ + mmi.ProcessCreateTime = 0; + mmi.ProcessKernelTime = 0; + mmi.ProcessUserTime = 0; + append(dc, &mmi, sizeof(mmi)); - *size = sizeof(mmi); + return sizeof(mmi); } /****************************************************************** @@ -692,6 +765,7 @@ BOOL WINAPI MiniDumpWriteDump(HANDLE hProcess, DWORD pid, HANDLE hFile, PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam, PMINIDUMP_CALLBACK_INFORMATION CallbackParam) { + static const MINIDUMP_DIRECTORY emptyDir = {UnusedStream, {0, 0}}; MINIDUMP_HEADER mdHead; MINIDUMP_DIRECTORY mdDir; DWORD i, nStreams, idx_stream; @@ -700,21 +774,24 @@ BOOL WINAPI MiniDumpWriteDump(HANDLE hProcess, DWORD pid, HANDLE hFile, dc.hProcess = hProcess; dc.hFile = hFile; dc.pid = pid; - dc.module = NULL; - dc.num_module = 0; + dc.modules = NULL; + dc.num_modules = 0; dc.cb = CallbackParam; dc.type = DumpType; dc.mem = NULL; dc.num_mem = 0; dc.rva = 0; - if (!fetch_process_info(&dc)) return FALSE; - fetch_module_info(&dc); + if (!fetch_processes_info(&dc)) return FALSE; + fetch_modules_info(&dc); /* 1) init */ nStreams = 6 + (ExceptionParam ? 1 : 0) + (UserStreamParam ? UserStreamParam->UserStreamCount : 0); + /* pad the directory size to a multiple of 4 for alignment purposes */ + nStreams = (nStreams + 3) & ~3; + if (DumpType & MiniDumpWithDataSegs) FIXME("NIY MiniDumpWithDataSegs\n"); if (DumpType & MiniDumpWithFullMemory) @@ -728,12 +805,12 @@ BOOL WINAPI MiniDumpWriteDump(HANDLE hProcess, DWORD pid, HANDLE hFile, /* 2) write header */ mdHead.Signature = MINIDUMP_SIGNATURE; - mdHead.Version = MINIDUMP_VERSION; + mdHead.Version = MINIDUMP_VERSION; /* NOTE: native puts in an 'implementation specific' value in the high order word of this member */ mdHead.NumberOfStreams = nStreams; + mdHead.CheckSum = 0; /* native sets a 0 checksum in its files */ mdHead.StreamDirectoryRva = sizeof(mdHead); mdHead.u.TimeDateStamp = time(NULL); mdHead.Flags = DumpType; - mdHead.CheckSum = 0; append(&dc, &mdHead, sizeof(mdHead)); /* 3) write stream directories */ @@ -745,43 +822,37 @@ BOOL WINAPI MiniDumpWriteDump(HANDLE hProcess, DWORD pid, HANDLE hFile, /* must be first in minidump */ mdDir.StreamType = SystemInfoStream; mdDir.Location.Rva = dc.rva; - dump_system_info(&dc, &mdDir.Location.DataSize); + mdDir.Location.DataSize = dump_system_info(&dc); writeat(&dc, mdHead.StreamDirectoryRva + idx_stream++ * sizeof(mdDir), &mdDir, sizeof(mdDir)); mdDir.StreamType = ThreadListStream; mdDir.Location.Rva = dc.rva; - dump_threads(&dc, ExceptionParam, &mdDir.Location.DataSize); + mdDir.Location.DataSize = dump_threads(&dc, ExceptionParam); writeat(&dc, mdHead.StreamDirectoryRva + idx_stream++ * sizeof(mdDir), &mdDir, sizeof(mdDir)); mdDir.StreamType = ModuleListStream; mdDir.Location.Rva = dc.rva; - dump_modules(&dc, FALSE, &mdDir.Location.DataSize); + mdDir.Location.DataSize = dump_modules(&dc, FALSE); writeat(&dc, mdHead.StreamDirectoryRva + idx_stream++ * sizeof(mdDir), &mdDir, sizeof(mdDir)); mdDir.StreamType = 0xfff0; /* FIXME: this is part of MS reserved streams */ mdDir.Location.Rva = dc.rva; - dump_modules(&dc, TRUE, &mdDir.Location.DataSize); + mdDir.Location.DataSize = dump_modules(&dc, TRUE); writeat(&dc, mdHead.StreamDirectoryRva + idx_stream++ * sizeof(mdDir), &mdDir, sizeof(mdDir)); mdDir.StreamType = MemoryListStream; mdDir.Location.Rva = dc.rva; - dump_memory_info(&dc, &mdDir.Location.DataSize); + mdDir.Location.DataSize = dump_memory_info(&dc); writeat(&dc, mdHead.StreamDirectoryRva + idx_stream++ * sizeof(mdDir), &mdDir, sizeof(mdDir)); mdDir.StreamType = MiscInfoStream; mdDir.Location.Rva = dc.rva; - dump_misc_info(&dc, &mdDir.Location.DataSize); - writeat(&dc, mdHead.StreamDirectoryRva + idx_stream++ * sizeof(mdDir), - &mdDir, sizeof(mdDir)); - - mdDir.StreamType = SystemInfoStream; - mdDir.Location.Rva = dc.rva; - dump_system_info(&dc, &mdDir.Location.DataSize); + mdDir.Location.DataSize = dump_misc_info(&dc); writeat(&dc, mdHead.StreamDirectoryRva + idx_stream++ * sizeof(mdDir), &mdDir, sizeof(mdDir)); @@ -790,7 +861,7 @@ BOOL WINAPI MiniDumpWriteDump(HANDLE hProcess, DWORD pid, HANDLE hFile, { mdDir.StreamType = ExceptionStream; mdDir.Location.Rva = dc.rva; - dump_exception_info(&dc, ExceptionParam, &mdDir.Location.DataSize); + mdDir.Location.DataSize = dump_exception_info(&dc, ExceptionParam); writeat(&dc, mdHead.StreamDirectoryRva + idx_stream++ * sizeof(mdDir), &mdDir, sizeof(mdDir)); } @@ -810,9 +881,14 @@ BOOL WINAPI MiniDumpWriteDump(HANDLE hProcess, DWORD pid, HANDLE hFile, } } + /* fill the remaining directory entries with 0's (unused stream types) */ + /* NOTE: this should always come last in the dump! */ + for (i = idx_stream; i < nStreams; i++) + writeat(&dc, mdHead.StreamDirectoryRva + i * sizeof(emptyDir), &emptyDir, sizeof(emptyDir)); + HeapFree(GetProcessHeap(), 0, dc.pcs_buffer); HeapFree(GetProcessHeap(), 0, dc.mem); - HeapFree(GetProcessHeap(), 0, dc.module); + HeapFree(GetProcessHeap(), 0, dc.modules); return TRUE; } diff --git a/reactos/dll/win32/dbghelp/module.c b/reactos/dll/win32/dbghelp/module.c index 8b2ece0be2f..a53e6b568b9 100644 --- a/reactos/dll/win32/dbghelp/module.c +++ b/reactos/dll/win32/dbghelp/module.c @@ -308,7 +308,7 @@ BOOL module_get_debug(struct module_pair* pair) idslW64.CheckSum = pair->effective->module.CheckSum; idslW64.TimeDateStamp = pair->effective->module.TimeDateStamp; memcpy(idslW64.FileName, pair->effective->module.ImageName, - sizeof(idslW64.FileName)); + sizeof(pair->effective->module.ImageName)); idslW64.Reparse = FALSE; idslW64.hFile = INVALID_HANDLE_VALUE; @@ -555,7 +555,7 @@ DWORD64 WINAPI SymLoadModuleExW(HANDLE hProcess, HANDLE hFile, PCWSTR wImageNam if (wModuleName) module_set_module(module, wModuleName); lstrcpynW(module->module.ImageName, wImageName, - sizeof(module->module.ImageName) / sizeof(CHAR)); + sizeof(module->module.ImageName) / sizeof(WCHAR)); return module->module.BaseOfImage; } @@ -895,7 +895,12 @@ BOOL WINAPI SymGetModuleInfo64(HANDLE hProcess, DWORD64 dwAddr, IMAGEHLP_MODULE64 mi64; IMAGEHLP_MODULEW64 miw64; - if (sizeof(mi64) < ModuleInfo->SizeOfStruct) FIXME("Wrong size\n"); + if (sizeof(mi64) < ModuleInfo->SizeOfStruct) + { + SetLastError(ERROR_MOD_NOT_FOUND); /* NOTE: native returns this error */ + WARN("Wrong size %u\n", ModuleInfo->SizeOfStruct); + return FALSE; + } miw64.SizeOfStruct = sizeof(miw64); if (!SymGetModuleInfoW64(hProcess, dwAddr, &miw64)) return FALSE; diff --git a/reactos/dll/win32/dbghelp/msc.c b/reactos/dll/win32/dbghelp/msc.c index 5e6f8a84bcf..d04ebfb2c5c 100644 --- a/reactos/dll/win32/dbghelp/msc.c +++ b/reactos/dll/win32/dbghelp/msc.c @@ -32,6 +32,8 @@ * Add symbol size to internal symbol table. */ +#define NONAMELESSUNION + #include "config.h" #include "wine/port.h" @@ -125,12 +127,21 @@ static void codeview_init_basic_types(struct module* module) cv_basic_types[T_USHORT] = &symt_new_basic(module, btUInt, "unsigned short", 2)->symt; cv_basic_types[T_ULONG] = &symt_new_basic(module, btUInt, "unsigned long", 4)->symt; cv_basic_types[T_UQUAD] = &symt_new_basic(module, btUInt, "unsigned long long", 8)->symt; + cv_basic_types[T_BOOL08] = &symt_new_basic(module, btBool, "BOOL08", 1)->symt; + cv_basic_types[T_BOOL16] = &symt_new_basic(module, btBool, "BOOL16", 2)->symt; + cv_basic_types[T_BOOL32] = &symt_new_basic(module, btBool, "BOOL32", 4)->symt; + cv_basic_types[T_BOOL64] = &symt_new_basic(module, btBool, "BOOL64", 8)->symt; cv_basic_types[T_REAL32] = &symt_new_basic(module, btFloat, "float", 4)->symt; cv_basic_types[T_REAL64] = &symt_new_basic(module, btFloat, "double", 8)->symt; cv_basic_types[T_RCHAR] = &symt_new_basic(module, btInt, "signed char", 1)->symt; cv_basic_types[T_WCHAR] = &symt_new_basic(module, btWChar, "wchar_t", 2)->symt; + cv_basic_types[T_INT2] = &symt_new_basic(module, btInt, "INT2", 2)->symt; + cv_basic_types[T_UINT2] = &symt_new_basic(module, btUInt, "UINT2", 2)->symt; cv_basic_types[T_INT4] = &symt_new_basic(module, btInt, "INT4", 4)->symt; cv_basic_types[T_UINT4] = &symt_new_basic(module, btUInt, "UINT4", 4)->symt; + cv_basic_types[T_INT8] = &symt_new_basic(module, btInt, "INT8", 8)->symt; + cv_basic_types[T_UINT8] = &symt_new_basic(module, btUInt, "UINT8", 8)->symt; + cv_basic_types[T_HRESULT]= &symt_new_basic(module, btUInt, "HRESULT", 4)->symt; cv_basic_types[T_32PVOID] = &symt_new_pointer(module, cv_basic_types[T_VOID])->symt; cv_basic_types[T_32PCHAR] = &symt_new_pointer(module, cv_basic_types[T_CHAR])->symt; @@ -141,12 +152,21 @@ static void codeview_init_basic_types(struct module* module) cv_basic_types[T_32PUSHORT] = &symt_new_pointer(module, cv_basic_types[T_USHORT])->symt; cv_basic_types[T_32PULONG] = &symt_new_pointer(module, cv_basic_types[T_ULONG])->symt; cv_basic_types[T_32PUQUAD] = &symt_new_pointer(module, cv_basic_types[T_UQUAD])->symt; + cv_basic_types[T_32PBOOL08] = &symt_new_pointer(module, cv_basic_types[T_BOOL08])->symt; + cv_basic_types[T_32PBOOL16] = &symt_new_pointer(module, cv_basic_types[T_BOOL16])->symt; + cv_basic_types[T_32PBOOL32] = &symt_new_pointer(module, cv_basic_types[T_BOOL32])->symt; + cv_basic_types[T_32PBOOL64] = &symt_new_pointer(module, cv_basic_types[T_BOOL64])->symt; cv_basic_types[T_32PREAL32] = &symt_new_pointer(module, cv_basic_types[T_REAL32])->symt; cv_basic_types[T_32PREAL64] = &symt_new_pointer(module, cv_basic_types[T_REAL64])->symt; cv_basic_types[T_32PRCHAR] = &symt_new_pointer(module, cv_basic_types[T_RCHAR])->symt; cv_basic_types[T_32PWCHAR] = &symt_new_pointer(module, cv_basic_types[T_WCHAR])->symt; + cv_basic_types[T_32PINT2] = &symt_new_pointer(module, cv_basic_types[T_INT2])->symt; + cv_basic_types[T_32PUINT2] = &symt_new_pointer(module, cv_basic_types[T_UINT2])->symt; cv_basic_types[T_32PINT4] = &symt_new_pointer(module, cv_basic_types[T_INT4])->symt; cv_basic_types[T_32PUINT4] = &symt_new_pointer(module, cv_basic_types[T_UINT4])->symt; + cv_basic_types[T_32PINT8] = &symt_new_pointer(module, cv_basic_types[T_INT8])->symt; + cv_basic_types[T_32PUINT8] = &symt_new_pointer(module, cv_basic_types[T_UINT8])->symt; + cv_basic_types[T_32PHRESULT]= &symt_new_pointer(module, cv_basic_types[T_HRESULT])->symt; } static int numeric_leaf(int* value, const unsigned short int* leaf) @@ -391,7 +411,7 @@ static void* codeview_cast_symt(struct symt* symt, enum SymTagEnum tag) } static struct symt* codeview_fetch_type(struct codeview_type_parse* ctp, - unsigned typeno) + unsigned typeno, BOOL details) { struct symt* symt; const union codeview_type* p; @@ -405,7 +425,7 @@ static struct symt* codeview_fetch_type(struct codeview_type_parse* ctp, FIXME("Cannot locate type %x\n", typeno); return NULL; } - symt = codeview_parse_one_type(ctp, typeno, p, FALSE); + symt = codeview_parse_one_type(ctp, typeno, p, details); if (!symt) FIXME("Couldn't load forward type %x\n", typeno); return symt; } @@ -421,7 +441,7 @@ static struct symt* codeview_add_type_pointer(struct codeview_type_parse* ctp, existing = codeview_cast_symt(existing, SymTagPointerType); return existing; } - pointee = codeview_fetch_type(ctp, pointee_type); + pointee = codeview_fetch_type(ctp, pointee_type, FALSE); return &symt_new_pointer(ctp->module, pointee)->symt; } @@ -431,8 +451,8 @@ static struct symt* codeview_add_type_array(struct codeview_type_parse* ctp, unsigned int indextype, unsigned int arr_len) { - struct symt* elem = codeview_fetch_type(ctp, elemtype); - struct symt* index = codeview_fetch_type(ctp, indextype); + struct symt* elem = codeview_fetch_type(ctp, elemtype, FALSE); + struct symt* index = codeview_fetch_type(ctp, indextype, FALSE); DWORD arr_max = 0; if (elem) @@ -504,19 +524,19 @@ static void codeview_add_udt_element(struct codeview_type_parse* ctp, { case LF_BITFIELD_V1: symt_add_udt_element(ctp->module, symt, name, - codeview_fetch_type(ctp, cv_type->bitfield_v1.type), + codeview_fetch_type(ctp, cv_type->bitfield_v1.type, FALSE), cv_type->bitfield_v1.bitoff, cv_type->bitfield_v1.nbits); return; case LF_BITFIELD_V2: symt_add_udt_element(ctp->module, symt, name, - codeview_fetch_type(ctp, cv_type->bitfield_v2.type), + codeview_fetch_type(ctp, cv_type->bitfield_v2.type, FALSE), cv_type->bitfield_v2.bitoff, cv_type->bitfield_v2.nbits); return; } } - subtype = codeview_fetch_type(ctp, type); + subtype = codeview_fetch_type(ctp, type, FALSE); if (subtype) { @@ -641,6 +661,11 @@ static int codeview_add_type_struct_field_list(struct codeview_type_parse* ctp, ptr += 2 + 4 + 2 + (1 + type->stmember_v2.p_name.namelen); break; + case LF_STMEMBER_V3: + /* FIXME: ignored for now */ + ptr += 2 + 4 + 2 + (strlen(type->stmember_v3.name) + 1); + break; + case LF_METHOD_V1: /* FIXME: ignored for now */ ptr += 2 + 2 + 2 + (1 + type->method_v1.p_name.namelen); @@ -651,6 +676,11 @@ static int codeview_add_type_struct_field_list(struct codeview_type_parse* ctp, ptr += 2 + 2 + 4 + (1 + type->method_v2.p_name.namelen); break; + case LF_METHOD_V3: + /* FIXME: ignored for now */ + ptr += 2 + 2 + 4 + (strlen(type->method_v3.name) + 1); + break; + case LF_NESTTYPE_V1: /* FIXME: ignored for now */ ptr += 2 + 2 + (1 + type->nesttype_v1.p_name.namelen); @@ -661,6 +691,11 @@ static int codeview_add_type_struct_field_list(struct codeview_type_parse* ctp, ptr += 2 + 2 + 4 + (1 + type->nesttype_v2.p_name.namelen); break; + case LF_NESTTYPE_V3: + /* FIXME: ignored for now */ + ptr += 2 + 2 + 4 + (strlen(type->nesttype_v3.name) + 1); + break; + case LF_VFUNCTAB_V1: /* FIXME: ignored for now */ ptr += 2 + 2; @@ -699,6 +734,20 @@ static int codeview_add_type_struct_field_list(struct codeview_type_parse* ctp, } break; + case LF_ONEMETHOD_V3: + /* FIXME: ignored for now */ + switch ((type->onemethod_v3.attribute >> 2) & 7) + { + case 4: case 6: /* (pure) introducing virtual method */ + ptr += 2 + 2 + 4 + 4 + (strlen(type->onemethod_virt_v3.name) + 1); + break; + + default: + ptr += 2 + 2 + 4 + (strlen(type->onemethod_v3.name) + 1); + break; + } + break; + default: FIXME("Unsupported type %04x in STRUCT field list\n", type->generic.id); return FALSE; @@ -711,7 +760,8 @@ static int codeview_add_type_struct_field_list(struct codeview_type_parse* ctp, static struct symt* codeview_add_type_enum(struct codeview_type_parse* ctp, struct symt* existing, const char* name, - unsigned fieldlistno) + unsigned fieldlistno, + unsigned basetype) { struct symt_enum* symt; @@ -722,7 +772,8 @@ static struct symt* codeview_add_type_enum(struct codeview_type_parse* ctp, } else { - symt = symt_new_enum(ctp->module, name); + symt = symt_new_enum(ctp->module, name, + codeview_fetch_type(ctp, basetype, FALSE)); if (fieldlistno) { const union codeview_reftype* fieldlist; @@ -775,7 +826,7 @@ static void codeview_add_func_signature_args(struct codeview_type_parse* ctp, { const union codeview_reftype* reftype; - sym->rettype = codeview_fetch_type(ctp, ret_type); + sym->rettype = codeview_fetch_type(ctp, ret_type, FALSE); if (args_list && (reftype = codeview_jump_to_type(ctp, args_list))) { int i; @@ -784,12 +835,12 @@ static void codeview_add_func_signature_args(struct codeview_type_parse* ctp, case LF_ARGLIST_V1: for (i = 0; i < reftype->arglist_v1.num; i++) symt_add_function_signature_parameter(ctp->module, sym, - codeview_fetch_type(ctp, reftype->arglist_v1.args[i])); + codeview_fetch_type(ctp, reftype->arglist_v1.args[i], FALSE)); break; case LF_ARGLIST_V2: for (i = 0; i < reftype->arglist_v2.num; i++) symt_add_function_signature_parameter(ctp->module, sym, - codeview_fetch_type(ctp, reftype->arglist_v2.args[i])); + codeview_fetch_type(ctp, reftype->arglist_v2.args[i], FALSE)); break; default: FIXME("Unexpected leaf %x for signature's pmt\n", reftype->generic.id); @@ -812,8 +863,8 @@ static struct symt* codeview_parse_one_type(struct codeview_type_parse* ctp, switch (type->generic.id) { case LF_MODIFIER_V1: - /* FIXME: we don't handle modifiers, - * but readd previous type on the curr_type + /* FIXME: we don't handle modifiers, + * but read previous type on the curr_type */ WARN("Modifier on %x: %s%s%s%s\n", type->modifier_v1.type, @@ -821,9 +872,7 @@ static struct symt* codeview_parse_one_type(struct codeview_type_parse* ctp, type->modifier_v1.attribute & 0x02 ? "volatile " : "", type->modifier_v1.attribute & 0x04 ? "unaligned " : "", type->modifier_v1.attribute & ~0x07 ? "unknown " : ""); - if (!(symt = codeview_get_type(type->modifier_v1.type, TRUE))) - symt = codeview_parse_one_type(ctp, type->modifier_v1.type, - codeview_jump_to_type(ctp, type->modifier_v1.type), details); + symt = codeview_fetch_type(ctp, type->modifier_v1.type, details); break; case LF_MODIFIER_V2: /* FIXME: we don't handle modifiers, but readd previous type on the curr_type */ @@ -833,9 +882,7 @@ static struct symt* codeview_parse_one_type(struct codeview_type_parse* ctp, type->modifier_v2.attribute & 0x02 ? "volatile " : "", type->modifier_v2.attribute & 0x04 ? "unaligned " : "", type->modifier_v2.attribute & ~0x07 ? "unknown " : ""); - if (!(symt = codeview_get_type(type->modifier_v2.type, TRUE))) - symt = codeview_parse_one_type(ctp, type->modifier_v2.type, - codeview_jump_to_type(ctp, type->modifier_v2.type), details); + symt = codeview_fetch_type(ctp, type->modifier_v2.type, details); break; case LF_POINTER_V1: @@ -965,18 +1012,21 @@ static struct symt* codeview_parse_one_type(struct codeview_type_parse* ctp, case LF_ENUM_V1: symt = codeview_add_type_enum(ctp, existing, terminate_string(&type->enumeration_v1.p_name), - type->enumeration_v1.fieldlist); + type->enumeration_v1.fieldlist, + type->enumeration_v1.type); break; case LF_ENUM_V2: symt = codeview_add_type_enum(ctp, existing, terminate_string(&type->enumeration_v2.p_name), - type->enumeration_v2.fieldlist); + type->enumeration_v2.fieldlist, + type->enumeration_v2.type); break; case LF_ENUM_V3: symt = codeview_add_type_enum(ctp, existing, type->enumeration_v3.name, - type->enumeration_v3.fieldlist); + type->enumeration_v3.fieldlist, + type->enumeration_v3.type); break; case LF_PROCEDURE_V1: @@ -1068,8 +1118,8 @@ static int codeview_parse_type_table(struct codeview_type_parse* ctp) * X 1500-150d for V3 types * 8000-8010 for numeric leafes */ - if (type->generic.id & 0x8600) continue; - codeview_parse_one_type(ctp, curr_type, type, TRUE); + if (!(type->generic.id & 0x8600) || (type->generic.id & 0x0100)) + codeview_parse_one_type(ctp, curr_type, type, TRUE); } return TRUE; @@ -1272,6 +1322,7 @@ static int codeview_snarf(const struct msc_debug_info* msc_dbg, const BYTE* root const union codeview_symbol* sym = (const union codeview_symbol*)(root + i); length = sym->generic.len + 2; if (i + length > size) break; + if (!sym->generic.id || length < 4) break; if (length & 3) FIXME("unpadded len %u\n", length); switch (sym->generic.id) @@ -1433,6 +1484,17 @@ static int codeview_snarf(const struct msc_debug_info* msc_dbg, const BYTE* root codeview_get_type(sym->stack_v3.symtype, FALSE), sym->stack_v3.name); break; + case S_BPREL_XXXX_V3: + loc.kind = loc_regrel; + loc.reg = 0; /* FIXME */ + loc.offset = sym->stack_xxxx_v3.offset; + WARN("Supposed stack variable %s (%d)\n", sym->stack_xxxx_v3.name, sym->stack_xxxx_v3.unknown); + symt_add_func_local(msc_dbg->module, curr_func, + sym->stack_xxxx_v3.offset > 0 ? DataIsParam : DataIsLocal, + &loc, block, + codeview_get_type(sym->stack_xxxx_v3.symtype, FALSE), + sym->stack_xxxx_v3.name); + break; case S_REGISTER_V1: loc.kind = loc_register; @@ -1452,6 +1514,15 @@ static int codeview_snarf(const struct msc_debug_info* msc_dbg, const BYTE* root block, codeview_get_type(sym->register_v2.type, FALSE), terminate_string(&sym->register_v2.p_name)); break; + case S_REGISTER_V3: + loc.kind = loc_register; + loc.reg = sym->register_v3.reg; + loc.offset = 0; + symt_add_func_local(msc_dbg->module, curr_func, + DataIsLocal, &loc, + block, codeview_get_type(sym->register_v3.type, FALSE), + sym->register_v3.name); + break; case S_BLOCK_V1: block = symt_open_func_block(msc_dbg->module, curr_func, block, @@ -1490,7 +1561,7 @@ static int codeview_snarf(const struct msc_debug_info* msc_dbg, const BYTE* root while (*ptr1) { ptr2 = ptr1 + strlen(ptr1) + 1; - TRACE("\t%s => %s\n", ptr1, ptr2); + TRACE("\t%s => %s\n", ptr1, debugstr_a(ptr2)); ptr1 = ptr2 + strlen(ptr2) + 1; } } @@ -1504,7 +1575,7 @@ static int codeview_snarf(const struct msc_debug_info* msc_dbg, const BYTE* root while (*ptr1) { ptr2 = ptr1 + strlen(ptr1) + 1; - TRACE("\t%s => %s\n", ptr1, ptr2); + TRACE("\t%s => %s\n", ptr1, debugstr_a(ptr2)); ptr1 = ptr2 + strlen(ptr2) + 1; } } @@ -1525,9 +1596,9 @@ static int codeview_snarf(const struct msc_debug_info* msc_dbg, const BYTE* root symt_add_function_point(msc_dbg->module, curr_func, SymTagLabel, &loc, terminate_string(&sym->label_v1.p_name)); } - else - FIXME("No current function for label %s\n", - terminate_string(&sym->label_v1.p_name)); + else symt_new_label(msc_dbg->module, compiland, + terminate_string(&sym->label_v1.p_name), + codeview_get_address(msc_dbg, sym->label_v1.segment, sym->label_v1.offset)); break; case S_LABEL_V3: if (curr_func) @@ -1537,8 +1608,8 @@ static int codeview_snarf(const struct msc_debug_info* msc_dbg, const BYTE* root symt_add_function_point(msc_dbg->module, curr_func, SymTagLabel, &loc, sym->label_v3.name); } - else - FIXME("No current function for label %s\n", sym->label_v3.name); + else symt_new_label(msc_dbg->module, compiland, sym->label_v3.name, + codeview_get_address(msc_dbg, sym->label_v3.segment, sym->label_v3.offset)); break; case S_CONSTANT_V1: @@ -1651,6 +1722,8 @@ static int codeview_snarf(const struct msc_debug_info* msc_dbg, const BYTE* root break; case S_PUB_FUNC1_V3: case S_PUB_FUNC2_V3: /* using a data_v3 isn't what we'd expect */ +#if 0 + /* FIXME: this is plain wrong (from a simple test) */ if (!(dbghelp_options & SYMOPT_NO_PUBLICS)) { symt_new_public(msc_dbg->module, compiland, @@ -1658,6 +1731,7 @@ static int codeview_snarf(const struct msc_debug_info* msc_dbg, const BYTE* root codeview_get_address(msc_dbg, sym->data_v3.segment, sym->data_v3.offset), 1, TRUE /* FIXME */, TRUE); } +#endif break; case S_MSTOOL_V3: /* just to silence a few warnings */ diff --git a/reactos/dll/win32/dbghelp/path.c b/reactos/dll/win32/dbghelp/path.c index 2e191af791d..7057e265c3e 100644 --- a/reactos/dll/win32/dbghelp/path.c +++ b/reactos/dll/win32/dbghelp/path.c @@ -57,7 +57,7 @@ HANDLE WINAPI FindDebugInfoFile(PCSTR FileName, PCSTR SymbolPath, PSTR DebugFile { HANDLE h; - h = CreateFileA(DebugFilePath, GENERIC_READ, FILE_SHARE_READ, NULL, + h = CreateFileA(FileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (h == INVALID_HANDLE_VALUE) { @@ -79,7 +79,7 @@ HANDLE WINAPI FindDebugInfoFileEx(PCSTR FileName, PCSTR SymbolPath, PVOID CallerData) { FIXME("(%s %s %p %p %p): stub\n", - FileName, SymbolPath, DebugFilePath, Callback, CallerData); + debugstr_a(FileName), debugstr_a(SymbolPath), debugstr_a(DebugFilePath), Callback, CallerData); return NULL; } @@ -191,7 +191,7 @@ BOOL WINAPI SymMatchFileName(PCSTR file, PCSTR match, PCSTR fptr; PCSTR mptr; - TRACE("(%s %s %p %p)\n", file, match, filestop, matchstop); + TRACE("(%s %s %p %p)\n", debugstr_a(file), debugstr_a(match), filestop, matchstop); fptr = file + strlen(file) - 1; mptr = match + strlen(match) - 1; @@ -217,7 +217,7 @@ static BOOL do_searchW(PCWSTR file, PWSTR buffer, BOOL recurse, BOOL found = FALSE; static const WCHAR S_AllW[] = {'*','.','*','\0'}; static const WCHAR S_DotW[] = {'.','\0'}; - static const WCHAR S_DotDotW[] = {'.','\0'}; + static const WCHAR S_DotDotW[] = {'.','.','\0'}; pos = strlenW(buffer); if (buffer[pos - 1] != '\\') buffer[pos++] = '\\'; @@ -478,7 +478,7 @@ BOOL WINAPI SymFindFileInPathW(HANDLE hProcess, PCWSTR searchPath, PCWSTR full_p WCHAR* ptr; const WCHAR* filename; - TRACE("(%p %s %s %p %08x %08x %08x %p %p %p)\n", + TRACE("(hProcess = %p, searchPath = %s, full_path = %s, id = %p, two = 0x%08x, three = 0x%08x, flags = 0x%08x, buffer = %p, cb = %p, user = %p)\n", hProcess, debugstr_w(searchPath), debugstr_w(full_path), id, two, three, flags, buffer, cb, user); diff --git a/reactos/dll/win32/dbghelp/pe_module.c b/reactos/dll/win32/dbghelp/pe_module.c index 3027f5ba00c..283962cb367 100644 --- a/reactos/dll/win32/dbghelp/pe_module.c +++ b/reactos/dll/win32/dbghelp/pe_module.c @@ -22,6 +22,8 @@ */ #include "config.h" +#include "wine/port.h" + #include #include #include @@ -40,7 +42,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(dbghelp); * its debugging information) */ static BOOL pe_load_stabs(const struct process* pcs, struct module* module, - const void* mapping, IMAGE_NT_HEADERS* nth) + void* mapping, IMAGE_NT_HEADERS* nth) { IMAGE_SECTION_HEADER* section; int i, stabsize = 0, stabstrsize = 0; @@ -67,11 +69,13 @@ static BOOL pe_load_stabs(const struct process* pcs, struct module* module, { ret = stabs_parse(module, module->module.BaseOfImage - nth->OptionalHeader.ImageBase, - RtlImageRvaToVa(nth, (void*)mapping, stabs, NULL), + RtlImageRvaToVa(nth, mapping, stabs, NULL), stabsize, - RtlImageRvaToVa(nth, (void*)mapping, stabstr, NULL), + RtlImageRvaToVa(nth, mapping, stabstr, NULL), stabstrsize); } + + TRACE("%s the STABS debug info\n", ret ? "successfully loaded" : "failed to load"); return ret; } @@ -96,7 +100,7 @@ static BOOL pe_load_dbg_file(const struct process* pcs, struct module* module, const IMAGE_DEBUG_DIRECTORY* dbg; BOOL ret = FALSE; - WINE_TRACE("Processing DBG file %s\n", dbg_name); + WINE_TRACE("Processing DBG file %s\n", debugstr_a(dbg_name)); if (SymFindFileInPath(pcs->handle, NULL, dbg_name, NULL, 0, 0, 0, tmp, dbg_match, NULL) && (hFile = CreateFileA(tmp, GENERIC_READ, FILE_SHARE_READ, NULL, @@ -108,7 +112,7 @@ static BOOL pe_load_dbg_file(const struct process* pcs, struct module* module, if (hdr->TimeDateStamp != timestamp) { WINE_ERR("Warning - %s has incorrect internal timestamp\n", - dbg_name); + debugstr_a(dbg_name)); /* * Well, sometimes this happens to DBG files which ARE REALLY the * right .DBG files but nonetheless this check fails. Anyway, @@ -136,7 +140,7 @@ static BOOL pe_load_dbg_file(const struct process* pcs, struct module* module, ERR("Wrong signature in .DBG file %s\n", debugstr_a(tmp)); } else - WINE_ERR("-Unable to peruse .DBG file %s (%s)\n", dbg_name, debugstr_a(tmp)); + WINE_ERR("-Unable to peruse .DBG file %s (%s)\n", debugstr_a(dbg_name), debugstr_a(tmp)); if (dbg_mapping) UnmapViewOfFile(dbg_mapping); if (hMap) CloseHandle(hMap); @@ -151,7 +155,7 @@ static BOOL pe_load_dbg_file(const struct process* pcs, struct module* module, */ static BOOL pe_load_msc_debug_info(const struct process* pcs, struct module* module, - const void* mapping, IMAGE_NT_HEADERS* nth) + void* mapping, IMAGE_NT_HEADERS* nth) { BOOL ret = FALSE; const IMAGE_DATA_DIRECTORY* dir; @@ -163,7 +167,7 @@ static BOOL pe_load_msc_debug_info(const struct process* pcs, nDbg = dir->Size / sizeof(IMAGE_DEBUG_DIRECTORY); if (!nDbg) return FALSE; - dbg = RtlImageRvaToVa(nth, (void*)mapping, dir->VirtualAddress, NULL); + dbg = RtlImageRvaToVa(nth, mapping, dir->VirtualAddress, NULL); /* Parse debug directory */ if (nth->FileHeader.Characteristics & IMAGE_FILE_DEBUG_STRIPPED) @@ -199,7 +203,7 @@ static BOOL pe_load_msc_debug_info(const struct process* pcs, */ static BOOL pe_load_export_debug_info(const struct process* pcs, struct module* module, - const void* mapping, IMAGE_NT_HEADERS* nth) + void* mapping, IMAGE_NT_HEADERS* nth) { unsigned int i; const IMAGE_EXPORT_DIRECTORY* exports; @@ -229,13 +233,13 @@ static BOOL pe_load_export_debug_info(const struct process* pcs, for (i = 0; i < nth->FileHeader.NumberOfSections; i++, section++) { symt_new_public(module, NULL, section->Name, - RtlImageRvaToVa(nth, (void*)mapping, section->VirtualAddress, NULL), + RtlImageRvaToVa(nth, mapping, section->VirtualAddress, NULL), 1, TRUE /* FIXME */, TRUE /* FIXME */); } #endif /* Add exported functions */ - if ((exports = RtlImageDirectoryEntryToData((void*)mapping, FALSE, + if ((exports = RtlImageDirectoryEntryToData(mapping, FALSE, IMAGE_DIRECTORY_ENTRY_EXPORT, &size))) { const WORD* ordinals = NULL; @@ -244,9 +248,9 @@ static BOOL pe_load_export_debug_info(const struct process* pcs, unsigned int j; char buffer[16]; - functions = RtlImageRvaToVa(nth, (void*)mapping, exports->AddressOfFunctions, NULL); - ordinals = RtlImageRvaToVa(nth, (void*)mapping, exports->AddressOfNameOrdinals, NULL); - names = RtlImageRvaToVa(nth, (void*)mapping, exports->AddressOfNames, NULL); + functions = RtlImageRvaToVa(nth, mapping, exports->AddressOfFunctions, NULL); + ordinals = RtlImageRvaToVa(nth, mapping, exports->AddressOfNameOrdinals, NULL); + names = RtlImageRvaToVa(nth, mapping, exports->AddressOfNames, NULL); if (functions && ordinals && names) { @@ -254,7 +258,7 @@ static BOOL pe_load_export_debug_info(const struct process* pcs, { if (!names[i]) continue; symt_new_public(module, NULL, - RtlImageRvaToVa(nth, (void*)mapping, names[i], NULL), + RtlImageRvaToVa(nth, mapping, names[i], NULL), base + functions[ordinals[i]], 1, TRUE /* FIXME */, TRUE /* FIXME */); } @@ -369,6 +373,8 @@ struct module* pe_load_native_module(struct process* pcs, const WCHAR* name, else pe_load_debug_info(pcs, module); } + else + ERR("could not load the module '%s'\n", debugstr_w(loaded_name)); } UnmapViewOfFile(mapping); } @@ -417,3 +423,50 @@ struct module* pe_load_builtin_module(struct process* pcs, const WCHAR* name, } return module; } + +/*********************************************************************** + * ImageDirectoryEntryToDataEx (DBGHELP.@) + * + * Search for specified directory in PE image + * + * PARAMS + * + * base [in] Image base address + * image [in] TRUE - image has been loaded by loader, FALSE - raw file image + * dir [in] Target directory index + * size [out] Receives directory size + * section [out] Receives pointer to section header of section containing directory data + * + * RETURNS + * Success: pointer to directory data + * Failure: NULL + * + */ +PVOID WINAPI ImageDirectoryEntryToDataEx( PVOID base, BOOLEAN image, USHORT dir, PULONG size, PIMAGE_SECTION_HEADER *section ) +{ + const IMAGE_NT_HEADERS *nt; + DWORD addr; + + *size = 0; + if (section) *section = NULL; + + if (!(nt = RtlImageNtHeader( base ))) return NULL; + if (dir >= nt->OptionalHeader.NumberOfRvaAndSizes) return NULL; + if (!(addr = nt->OptionalHeader.DataDirectory[dir].VirtualAddress)) return NULL; + + *size = nt->OptionalHeader.DataDirectory[dir].Size; + if (image || addr < nt->OptionalHeader.SizeOfHeaders) return (char *)base + addr; + + return RtlImageRvaToVa( nt, (HMODULE)base, addr, section ); +} + +/*********************************************************************** + * ImageDirectoryEntryToData (DBGHELP.@) + * + * NOTES + * See ImageDirectoryEntryToDataEx + */ +PVOID WINAPI ImageDirectoryEntryToData( PVOID base, BOOLEAN image, USHORT dir, PULONG size ) +{ + return ImageDirectoryEntryToDataEx( base, image, dir, size, NULL ); +} diff --git a/reactos/dll/win32/dbghelp/stabs.c b/reactos/dll/win32/dbghelp/stabs.c index 8f651b18cba..d68c9dc166b 100644 --- a/reactos/dll/win32/dbghelp/stabs.c +++ b/reactos/dll/win32/dbghelp/stabs.c @@ -30,6 +30,7 @@ */ #include "config.h" +#include "wine/port.h" #include #include @@ -62,6 +63,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(dbghelp_stabs); +UINT64 _strtoui64( const char *nptr, char **endptr, int base ); + #ifndef N_UNDF #define N_UNDF 0x00 #endif @@ -465,13 +468,13 @@ static int stabs_pts_read_range_value(struct ParseTypedefData* ptd, struct pts_r break; case '-': prv->sign = -1; - prv->val = strtoull(++ptd->ptr, &last, 10); + prv->val = _strtoui64(++ptd->ptr, &last, 10); ptd->ptr = last; break; case '+': default: prv->sign = 1; - prv->val = strtoull(ptd->ptr, &last, 10); + prv->val = _strtoui64(ptd->ptr, &last, 10); ptd->ptr = last; break; } @@ -498,7 +501,7 @@ static int stabs_pts_read_range(struct ParseTypedefData* ptd, const char* typena PTS_ABORTIF(ptd, *ptd->ptr++ != ';'); /* ';' */ /* basically, we don't use ref... in some cases, for example, float is declared - * as a derivated type of int... which won't help us... so we guess the types + * as a derived type of int... which won't help us... so we guess the types * from the various formats */ if (lo.sign == 0 && hi.sign < 0) @@ -793,9 +796,9 @@ static int stabs_pts_read_type_def(struct ParseTypedefData* ptd, const char* typ struct symt** ret_dt) { int idx; - long sz = -1; - struct symt* new_dt = NULL; /* newly created data type */ - struct symt* ref_dt; /* referenced data type (pointer...) */ + long sz = -1; + struct symt* new_dt = NULL; /* newly created data type */ + struct symt* ref_dt; /* referenced data type (pointer...) */ long filenr1, subnr1, tmp; /* things are a bit complicated because of the way the typedefs are stored inside @@ -807,7 +810,7 @@ static int stabs_pts_read_type_def(struct ParseTypedefData* ptd, const char* typ while (*ptd->ptr == '=') { ptd->ptr++; - PTS_ABORTIF(ptd, new_dt != btNoType); + PTS_ABORTIF(ptd, new_dt != NULL); /* first handle attribute if any */ switch (*ptd->ptr) @@ -856,7 +859,8 @@ static int stabs_pts_read_type_def(struct ParseTypedefData* ptd, const char* typ new_dt = &symt_new_function_signature(ptd->module, ref_dt, -1)->symt; break; case 'e': - new_dt = &symt_new_enum(ptd->module, typename)->symt; + stabs_get_basic(ptd, 1 /* int */, &ref_dt); + new_dt = &symt_new_enum(ptd->module, typename, ref_dt)->symt; PTS_ABORTIF(ptd, stabs_pts_read_enum(ptd, (struct symt_enum*)new_dt) == -1); break; case 's': @@ -910,7 +914,8 @@ static int stabs_pts_read_type_def(struct ParseTypedefData* ptd, const char* typ switch (tmp) { case 'e': - new_dt = &symt_new_enum(ptd->module, ptd->buf + idx)->symt; + stabs_get_basic(ptd, 1 /* int */, &ref_dt); + new_dt = &symt_new_enum(ptd->module, ptd->buf + idx, ref_dt)->symt; break; case 's': new_dt = &symt_new_udt(ptd->module, ptd->buf + idx, 0, UdtStruct)->symt; @@ -1000,7 +1005,7 @@ static int stabs_pts_read_type_def(struct ParseTypedefData* ptd, const char* typ *stabs_find_ref(filenr1, subnr1) = *ret_dt = new_dt; - TRACE("Adding (%ld,%ld) %s\n", filenr1, subnr1, typename); + TRACE("Adding (%ld,%ld) %s\n", filenr1, subnr1, debugstr_a(typename)); return 0; } @@ -1145,7 +1150,7 @@ static void pending_flush(struct pending_block* pending, struct module* module, * Ends function creation: mainly: * - cleans up line number information * - tries to set up a debug-start tag (FIXME: heuristic to be enhanced) - * - for stabs which have abolute address in them, initializes the size of the + * - for stabs which have absolute address in them, initializes the size of the * function (assuming that current function ends where next function starts) */ static void stabs_finalize_function(struct module* module, struct symt_function* func, diff --git a/reactos/dll/win32/dbghelp/stackframe.h b/reactos/dll/win32/dbghelp/stackframe.h deleted file mode 100644 index c9af8220ea9..00000000000 --- a/reactos/dll/win32/dbghelp/stackframe.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * 16-bit and 32-bit mode stack frame layout - * - * Copyright 1995, 1998 Alexandre Julliard - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef __WINE_STACKFRAME_H -#define __WINE_STACKFRAME_H - -#include -#define NTOS_MODE_USER -#include -#include -#include - -#define SELECTOROF(ptr) (HIWORD(ptr)) -#define OFFSETOF(ptr) (LOWORD(ptr)) - -#include - - /* 32-bit stack layout after CallTo16() */ -typedef struct _STACK32FRAME -{ - DWORD restore_addr; /* 00 return address for restoring code selector */ - DWORD codeselector; /* 04 code selector to restore */ - EXCEPTION_REGISTRATION_RECORD frame; /* 08 Exception frame */ - SEGPTR frame16; /* 10 16-bit frame from last CallFrom16() */ - DWORD edi; /* 14 saved registers */ - DWORD esi; /* 18 */ - DWORD ebx; /* 1c */ - DWORD ebp; /* 20 saved 32-bit frame pointer */ - DWORD retaddr; /* 24 return address */ - DWORD target; /* 28 target address / CONTEXT86 pointer */ - DWORD nb_args; /* 2c number of 16-bit argument bytes */ -} STACK32FRAME; - - /* 16-bit stack layout after CallFrom16() */ -typedef struct _STACK16FRAME -{ - STACK32FRAME *frame32; /* 00 32-bit frame from last CallTo16() */ - DWORD edx; /* 04 saved registers */ - DWORD ecx; /* 08 */ - DWORD ebp; /* 0c */ - WORD ds; /* 10 */ - WORD es; /* 12 */ - WORD fs; /* 14 */ - WORD gs; /* 16 */ - DWORD callfrom_ip; /* 18 callfrom tail IP */ - DWORD module_cs; /* 1c module code segment */ - DWORD relay; /* 20 relay function address */ - WORD entry_ip; /* 22 entry point IP */ - DWORD entry_point; /* 26 API entry point to call, reused as mutex count */ - WORD bp; /* 2a 16-bit stack frame chain */ - WORD ip; /* 2c return address */ - WORD cs; /* 2e */ -} STACK16FRAME; - -#include - -static __inline int MapSL(int size) -{ - return -1; -} - -#define CURRENT_STACK16 ((STACK16FRAME*)MapSL(NtCurrentTeb()->cur_stack)) -#define CURRENT_DS (CURRENT_STACK16->ds) - - -#endif /* __WINE_STACKFRAME_H */ diff --git a/reactos/dll/win32/dbghelp/stubs.c b/reactos/dll/win32/dbghelp/stubs.c deleted file mode 100644 index fcae6713e01..00000000000 --- a/reactos/dll/win32/dbghelp/stubs.c +++ /dev/null @@ -1,745 +0,0 @@ -/* - * File stubs.c - stubs for exported functions - * - * Copyright (C) 2007, Timo Kreuzer - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#define WIN32_NO_STATUS -#include -#include - -#include "dbghelp_private.h" - -#define UNIMPLEMENTED DbgPrint("DBGHELP: %s is unimplemented, please try again later.\n", __FUNCTION__); - -BOOL WINAPI -DbgHelpCreateUserDump(LPSTR pszFileName, - PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback, - PVOID pUserData) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -DbgHelpCreateUserDumpW(LPWSTR pszFileName, - PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback, - PVOID pUserData) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -FindFileInPath(HANDLE hProcess, - LPSTR pszSearchPath, - LPSTR pszFileName, - PVOID id, - DWORD two, - DWORD three, - DWORD dwFlags, - LPSTR pszFilePath) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -FindFileInSearchPath(HANDLE hProcess, - LPSTR pszSearchPath, - LPSTR pszFileName, - DWORD one, - DWORD two, - DWORD three, - LPSTR pszFilePath) -{ - UNIMPLEMENTED; - return FALSE; -} - -PVOID WINAPI -ImageDirectoryEntryToDataEx(PVOID pModuleBase, - BOOLEAN bMappedAsImage, - USHORT DirectoryEntry, - PULONG pulSize, - PIMAGE_SECTION_HEADER *FoundHeader) -{ - UNIMPLEMENTED; - return NULL; -} - -BOOL WINAPI -SymAddSymbol(HANDLE hProcess, - ULONG64 ModBase, - PCSTR pszName, - DWORD64 Address, - DWORD dwSize, - DWORD dwFlags) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymAddSymbolW(HANDLE hProcess, - ULONG64 ModBase, - PCWSTR pszName, - DWORD64 Address, - DWORD dwSize, - DWORD dwFlags) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymDeleteSymbol(HANDLE hProcess, - ULONG64 ModBase, - PCSTR pszName, - DWORD64 Address, - DWORD dwFlags) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymDeleteSymbolW(HANDLE hProcess, - ULONG64 ModBase, - PCWSTR pszName, - DWORD64 Address, - DWORD dwFlags) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymEnumLinesW(HANDLE hProcess, - ULONG64 ModBase, - PCWSTR pszObj, - PCWSTR pszFile, - PSYM_ENUMLINES_CALLBACKW Callback, - PVOID pUserContext) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL SymEnumProcesses(PSYM_ENUMPROCESSES_CALLBACK Callback, - PVOID pUserContext) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymEnumSourceFilesW(HANDLE hProcess, - ULONG64 ModBase, - PCWSTR pszMask, - PSYM_ENUMSOURCEFILES_CALLBACKW Callback, - PVOID pUserContext) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymEnumSourceLines(HANDLE hProcess, - ULONG64 ModBase, - PCSTR pszObject, - PCSTR pszFile, - DWORD dwLine, - DWORD dwFlags, - PSYM_ENUMLINES_CALLBACK Callback, - PVOID pUserContext) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymEnumSourceLinesW(HANDLE hProcess, - ULONG64 ModBase, - PCWSTR pszObject, - PCWSTR pszFile, - DWORD dwLine, - DWORD dwFlags, - PSYM_ENUMLINES_CALLBACKW Callback, - PVOID pUserContext) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymEnumSym(HANDLE hProcess, - ULONG64 ModBase, - PSYM_ENUMERATESYMBOLS_CALLBACK Callback, - PVOID pUserContext) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymEnumSymbolsForAddr(HANDLE hProcess, - DWORD64 Address, - PSYM_ENUMERATESYMBOLS_CALLBACK Callback, - PVOID pUserContext) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymEnumSymbolsForAddrW(HANDLE hProcess, - DWORD64 Address, - PSYM_ENUMERATESYMBOLS_CALLBACKW Callback, - PVOID pUserContext) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymEnumerateSymbols64(HANDLE hProcess, - DWORD64 ModBase, - PSYM_ENUMSYMBOLS_CALLBACK64 Callback, - PVOID pUserContext) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymEnumerateSymbolsW64(HANDLE hProcess, - DWORD64 ModBase, - PSYM_ENUMSYMBOLS_CALLBACK64W Callback, - PVOID pUserContext) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymEnumerateSymbolsW(HANDLE hProcess, - DWORD ModBase, - PSYM_ENUMSYMBOLS_CALLBACKW Callback, - PVOID pUserContext) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymFromIndex(HANDLE hProcess, - ULONG64 ModBase, - DWORD Index, - PSYMBOL_INFO Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymFromIndexW(HANDLE hProcess, - ULONG64 ModBase, - DWORD Index, - PSYMBOL_INFOW Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymFromNameW(HANDLE hProcess, - PCWSTR pszName, - PSYMBOL_INFOW Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymFromToken(HANDLE hProcess, - DWORD64 ModBase, - DWORD Token, - PSYMBOL_INFO Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymFromTokenW(HANDLE hProcess, - DWORD64 ModBase, - DWORD Token, - PSYMBOL_INFOW Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetFileLineOffsets64(HANDLE hProcess, - PSTR pszModuleName, - PSTR pszFileName, - PDWORD64 pBuffer, - ULONG BufferLines) -{ - UNIMPLEMENTED; - return FALSE; -} - -PCHAR WINAPI -SymGetHomeDirectory(DWORD dwType, - PSTR pszDir, - size_t Size) -{ - UNIMPLEMENTED; - return NULL; -} - -PWCHAR WINAPI -SymGetHomeDirectoryW(DWORD dwType, - PWSTR pszDir, - size_t Size) -{ - UNIMPLEMENTED; - return NULL; -} - -BOOL WINAPI -SymGetLineFromName64(HANDLE hProcess, - PCSTR pszModuleName, - PCSTR pszFileName, - DWORD dwLineNumber, - PLONG plDisplacement, - PIMAGEHLP_LINE64 Line) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetLineFromName(HANDLE hProcess, - PCSTR pszModuleName, - PCSTR pszFileName, - DWORD dwLineNumber, - PLONG plDisplacement, - PIMAGEHLP_LINE Line) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetLineFromNameW64(HANDLE hProcess, - PCWSTR pszModuleName, - PCWSTR pszFileName, - DWORD dwLineNumber, - PLONG lpDisplacement, - PIMAGEHLP_LINEW64 Line) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetLineNextW64(HANDLE hProcess, - PIMAGEHLP_LINEW64 Line) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetLinePrevW64(HANDLE hProcess, - PIMAGEHLP_LINEW64 Line) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetScope(HANDLE hProcess, - ULONG64 ModBase, - DWORD Index, - PSYMBOL_INFO Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetScopeW(HANDLE hProcess, - ULONG64 ModBase, - DWORD Index, - PSYMBOL_INFOW Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetSourceFile(HANDLE hProcess, - ULONG64 ModBase, - PCSTR pszParams, - PCSTR pszFileSpec, - PSTR pszFilePath, - DWORD Size) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetSourceFileFromToken(HANDLE hProcess, - PVOID Token, - PCSTR pszParams, - PSTR pszFilePath, - DWORD Size) -{ - UNIMPLEMENTED; - return FALSE; -} - - -BOOL WINAPI -SymGetSourceFileFromTokenW(HANDLE hProcess, - PVOID Token, - PCWSTR pszParams, - PWSTR pszFilePath, - DWORD Size) -{ - UNIMPLEMENTED; - return FALSE; -} - -// SymGetSourceFileW -// SymGetSourceVarFromToken -// SymGetSourceVarFromTokenW - -BOOL WINAPI -SymGetSymFromName64(HANDLE hProcess, - PCSTR pszName, - PIMAGEHLP_SYMBOL64 Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetSymNext64(HANDLE hProcess, - PIMAGEHLP_SYMBOL64 Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetSymPrev64(HANDLE hProcess, - PIMAGEHLP_SYMBOL64 Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetSymbolFile(HANDLE hProcess, - PCSTR pszSymPath, - PCSTR pszImageFile, - DWORD Type, - PSTR SymbolFile, - size_t cSymbolFile, - PSTR DbgFile, - size_t cDbgFile) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetSymbolFileW(HANDLE hProcess, - PCWSTR pszSymPath, - PCWSTR pszImageFile, - DWORD Type, - PWSTR pszSymbolFile, - size_t cSymbolFile, - PWSTR pszDbgFile, - size_t cDbgFile) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetTypeFromNameW(HANDLE hProcess, - ULONG64 ModBase, - PCWSTR pszName, - PSYMBOL_INFOW Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetTypeInfoEx(HANDLE hProcess, - DWORD64 ModBase, - PIMAGEHLP_GET_TYPE_INFO_PARAMS Params) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymMatchStringA(PCSTR pszString, - PCSTR pszExpression, - BOOL bCaseSensitiv) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymMatchStringW(PCWSTR pszString, - PCWSTR pszExpression, - BOOL bCaseSensitiv) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymNext(HANDLE hProcess, - PSYMBOL_INFO Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymNextW(HANDLE hProcess, - PSYMBOL_INFOW Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymPrev(HANDLE hProcess, - PSYMBOL_INFO Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymPrevW(HANDLE hProcess, - PSYMBOL_INFOW Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -// SymRefreshModuleList - -PCHAR WINAPI -SymSetHomeDirectory(HANDLE hProcess, - PCSTR pszDir) -{ - UNIMPLEMENTED; - return NULL; -} - -PWCHAR WINAPI -SymSetHomeDirectoryW(HANDLE hProcess, - PCWSTR pszDir) -{ - UNIMPLEMENTED; - return NULL; -} - -// SymSetSymWithAddr64 - -PCSTR WINAPI -SymSrvDeltaName(HANDLE hProcess, - PCSTR pszSymPath, - PCSTR pszType, - PCSTR pszFile1, - PCSTR pszFile2) -{ - UNIMPLEMENTED; - return NULL; -} - -PCWSTR WINAPI -SymSrvDeltaNameW(HANDLE hProcess, - PCWSTR pszSymPath, - PCWSTR pszType, - PCWSTR pszFile1, - PCWSTR pszFile2) -{ - UNIMPLEMENTED; - return NULL; -} - -BOOL WINAPI -SymSrvGetFileIndexString(HANDLE hProcess, - PCSTR pszSrvPath, - PCSTR pszFile, - PSTR pszIndex, - size_t Size, - DWORD dwFlags) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymSrvGetFileIndexStringW(HANDLE hProcess, - PCWSTR pszSrvPath, - PCWSTR pszFile, - PWSTR pszIndex, - size_t Size, - DWORD dwFlags) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymSrvGetFileIndexes(PCSTR File, - GUID* Id, - DWORD* Val1, - DWORD* Val2, - DWORD dwFlags) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymSrvGetFileIndexesW(PCWSTR File, - GUID* Id, - DWORD* Val1, - DWORD* Val2, - DWORD dwFlags) -{ - UNIMPLEMENTED; - return FALSE; -} - -PCSTR WINAPI -SymSrvGetSupplement(HANDLE hProcess, - PCSTR pszSymPath, - PCSTR pszNode, - PCSTR pszFile) -{ - UNIMPLEMENTED; - return NULL; -} - -PCWSTR WINAPI -SymSrvGetSupplementW(HANDLE hProcess, - PCWSTR pszSymPath, - PCWSTR pszNode, - PCWSTR pszFile) -{ - UNIMPLEMENTED; - return NULL; -} - -BOOL WINAPI -SymSrvIsStore(HANDLE hProcess, - PCSTR pszPath) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymSrvIsStoreW(HANDLE hProcess, - PCWSTR pszPath) -{ - UNIMPLEMENTED; - return FALSE; -} - -PCSTR WINAPI -SymSrvStoreFile(HANDLE hProcess, - PCSTR pszSrvPath, - PCSTR pszFile, - DWORD pszFlags) -{ - UNIMPLEMENTED; - return NULL; -} - -PCWSTR WINAPI -SymSrvStoreFileW(HANDLE hProcess, - PCWSTR pszSrvPath, - PCWSTR pszFile, - DWORD dwFlags) -{ - UNIMPLEMENTED; - return NULL; -} - -PCSTR WINAPI -SymSrvStoreSupplement(HANDLE hProcess, - PCSTR pszSymPath, - PCSTR pszNode, - PCSTR pszFile, - DWORD dwFlags) -{ - UNIMPLEMENTED; - return NULL; -} - -PCWSTR WINAPI -SymSrvStoreSupplementW(HANDLE hProcess, - PCWSTR pszSymPath, - PCWSTR pszNode, - PCWSTR pszFile, - DWORD dwFlags) -{ - UNIMPLEMENTED; - return NULL; -} - -BOOL WINAPI -SymUnDName64(PIMAGEHLP_SYMBOL64 Symbol, - PSTR pszUndecoratedName, - DWORD dwUndecoratedNameLength) -{ - UNIMPLEMENTED; - return FALSE; -} - -DWORD WINAPI -UnDecorateSymbolNameW(PCWSTR DecoratedName, - PWSTR pszUnDecoratedName, - DWORD dwUndecoratedLength, - DWORD dwFlags) -{ - UNIMPLEMENTED; - return 0; -} - - diff --git a/reactos/dll/win32/dbghelp/symbol.c b/reactos/dll/win32/dbghelp/symbol.c index d76811b114d..1d0bbf5d2da 100644 --- a/reactos/dll/win32/dbghelp/symbol.c +++ b/reactos/dll/win32/dbghelp/symbol.c @@ -374,21 +374,21 @@ struct symt_block* symt_close_func_block(struct module* module, GET_ENTRY(block->container, struct symt_block, symt) : NULL; } -struct symt_function_point* symt_add_function_point(struct module* module, - struct symt_function* func, - enum SymTagEnum point, - const struct location* loc, - const char* name) +struct symt_hierarchy_point* symt_add_function_point(struct module* module, + struct symt_function* func, + enum SymTagEnum point, + const struct location* loc, + const char* name) { - struct symt_function_point* sym; + struct symt_hierarchy_point*sym; struct symt** p; if ((sym = pool_alloc(&module->pool, sizeof(*sym)))) { sym->symt.tag = point; - sym->parent = func; + sym->parent = &func->symt; sym->loc = *loc; - sym->name = name ? pool_strdup(&module->pool, name) : NULL; + sym->hash_elt.name = name ? pool_strdup(&module->pool, name) : NULL; p = vector_add(&func->vchildren, &module->pool); *p = &sym->symt; } @@ -478,6 +478,34 @@ struct symt_data* symt_new_constant(struct module* module, return sym; } +struct symt_hierarchy_point* symt_new_label(struct module* module, + struct symt_compiland* compiland, + const char* name, unsigned long address) +{ + struct symt_hierarchy_point* sym; + + TRACE_(dbghelp_symt)("Adding global label value %s:%s\n", + debugstr_w(module->module.ModuleName), name); + + if ((sym = pool_alloc(&module->pool, sizeof(*sym)))) + { + sym->symt.tag = SymTagLabel; + sym->hash_elt.name = pool_strdup(&module->pool, name); + hash_table_add(&module->ht_symbols, &sym->hash_elt); + module->sortlist_valid = FALSE; + sym->loc.kind = loc_absolute; + sym->loc.offset = address; + sym->parent = compiland ? &compiland->symt : NULL; + if (compiland) + { + struct symt** p; + p = vector_add(&compiland->vchildren, &module->pool); + *p = &sym->symt; + } + } + return sym; +} + /* expect sym_info->MaxNameLen to be set before being called */ static void symt_fill_sym_info(const struct module_pair* pair, const struct symt_function* func, @@ -589,8 +617,8 @@ static void symt_fill_sym_info(const struct module_pair* pair, if (sym_info->MaxNameLen) { if (sym->tag != SymTagPublicSymbol || !(dbghelp_options & SYMOPT_UNDNAME) || - (sym_info->NameLen = UnDecorateSymbolName(name, sym_info->Name, - sym_info->MaxNameLen, UNDNAME_COMPLETE) == 0)) + (sym_info->NameLen = UnDecorateSymbolName(name, sym_info->Name, + sym_info->MaxNameLen, UNDNAME_NAME_ONLY) == 0)) { sym_info->NameLen = min(strlen(name), sym_info->MaxNameLen - 1); memcpy(sym_info->Name, name, sym_info->NameLen); @@ -971,6 +999,30 @@ static BOOL CALLBACK sym_enumW(PSYMBOL_INFO si, ULONG size, PVOID ctx) return (sew->cb)(sew->sym_info, size, sew->ctx); } +/****************************************************************** + * SymEnumSymbolsForAddrW (DBGHELP.@) + * + */ +BOOL WINAPI SymEnumSymbolsForAddrW(HANDLE hProcess, DWORD64 Address, + PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback, + PVOID UserContext) +{ + UNIMPLEMENTED; + return FALSE; +} + +/****************************************************************** + * SymEnumSymbolsForAddr (DBGHELP.@) + * + */ +BOOL WINAPI SymEnumSymbolsForAddr(HANDLE hProcess, DWORD64 Address, + PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, + PVOID UserContext) +{ + UNIMPLEMENTED; + return FALSE; +} + /****************************************************************** * SymEnumSymbolsW (DBGHELP.@) * @@ -1027,6 +1079,33 @@ BOOL WINAPI SymEnumerateSymbols(HANDLE hProcess, DWORD BaseOfDll, return SymEnumSymbols(hProcess, BaseOfDll, NULL, sym_enumerate_cb, &se); } +struct sym_enumerate64 +{ + void* ctx; + PSYM_ENUMSYMBOLS_CALLBACK64 cb; +}; + +static BOOL CALLBACK sym_enumerate_cb64(PSYMBOL_INFO syminfo, ULONG size, void* ctx) +{ + struct sym_enumerate64* se = (struct sym_enumerate64*)ctx; + return (se->cb)(syminfo->Name, syminfo->Address, syminfo->Size, se->ctx); +} + +/*********************************************************************** + * SymEnumerateSymbols64 (DBGHELP.@) + */ +BOOL WINAPI SymEnumerateSymbols64(HANDLE hProcess, DWORD64 BaseOfDll, + PSYM_ENUMSYMBOLS_CALLBACK64 EnumSymbolsCallback, + PVOID UserContext) +{ + struct sym_enumerate64 se; + + se.ctx = UserContext; + se.cb = EnumSymbolsCallback; + + return SymEnumSymbols(hProcess, BaseOfDll, NULL, sym_enumerate_cb64, &se); +} + /****************************************************************** * SymFromAddr (DBGHELP.@) * diff --git a/reactos/dll/win32/dbghelp/thread.h b/reactos/dll/win32/dbghelp/thread.h deleted file mode 100644 index 3ee2f8dc1c1..00000000000 --- a/reactos/dll/win32/dbghelp/thread.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Thread definitions - * - * Copyright 1996 Alexandre Julliard - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef __WINE_THREAD_H -#define __WINE_THREAD_H - -#include -#define WIN32_NO_STATUS -#include -#include -#include -#define WINE_NO_TEB -#include - -struct _SECURITY_ATTRIBUTES; -struct tagSYSLEVEL; -struct server_buffer_info; -struct fiber_data; - -struct debug_info -{ - char *str_pos; /* current position in strings buffer */ - char *out_pos; /* current position in output buffer */ - char strings[1024]; /* buffer for temporary strings */ - char output[1024]; /* current output line */ -}; - -#endif /* __WINE_THREAD_H */ diff --git a/reactos/dll/win32/dbghelp/type.c b/reactos/dll/win32/dbghelp/type.c index a8c6778ed90..aeb3e75ae6f 100644 --- a/reactos/dll/win32/dbghelp/type.c +++ b/reactos/dll/win32/dbghelp/type.c @@ -21,6 +21,9 @@ * Note: This really doesn't do much at the moment, but it forms the framework * upon which full support for datatype handling will eventually be built. */ + +#define NONAMELESSUNION + #include "config.h" #include #include @@ -83,7 +86,7 @@ const char* symt_get_name(const struct symt* sym) case SymTagFunction: return ((const struct symt_function*)sym)->hash_elt.name; case SymTagPublicSymbol: return ((const struct symt_public*)sym)->hash_elt.name; case SymTagBaseType: return ((const struct symt_basic*)sym)->hash_elt.name; - case SymTagLabel: return ((const struct symt_function_point*)sym)->name; + case SymTagLabel: return ((const struct symt_hierarchy_point*)sym)->hash_elt.name; case SymTagThunk: return ((const struct symt_thunk*)sym)->hash_elt.name; /* hierarchy tree */ case SymTagEnum: return ((const struct symt_enum*)sym)->name; @@ -243,7 +246,8 @@ BOOL symt_add_udt_element(struct module* module, struct symt_udt* udt_type, return TRUE; } -struct symt_enum* symt_new_enum(struct module* module, const char* typename) +struct symt_enum* symt_new_enum(struct module* module, const char* typename, + struct symt* basetype) { struct symt_enum* sym; @@ -251,6 +255,7 @@ struct symt_enum* symt_new_enum(struct module* module, const char* typename) { sym->symt.tag = SymTagEnum; sym->name = (typename) ? pool_strdup(&module->pool, typename) : NULL; + sym->base_type = basetype; vector_init(&sym->vchildren, sizeof(struct symt*), 8); } return sym; @@ -271,8 +276,7 @@ BOOL symt_add_enum_element(struct module* module, struct symt_enum* enum_type, e->hash_elt.next = NULL; e->kind = DataIsConstant; e->container = &enum_type->symt; - /* CV defines the underlying type for the enumeration */ - e->type = &symt_new_basic(module, btInt, "int", 4)->symt; + e->type = enum_type->base_type; e->u.value.n1.n2.vt = VT_I4; e->u.value.n1.n2.n3.lVal = value; @@ -518,8 +522,10 @@ BOOL symt_get_info(const struct symt* type, IMAGEHLP_SYMBOL_TYPE_INFO req, case SymTagFuncDebugStart: case SymTagFuncDebugEnd: case SymTagLabel: - X(ULONG64) = ((const struct symt_function_point*)type)->parent->address + - ((const struct symt_function_point*)type)->loc.offset; + if (!symt_get_info(((const struct symt_hierarchy_point*)type)->parent, + req, pInfo)) + return FALSE; + X(ULONG64) += ((const struct symt_hierarchy_point*)type)->loc.offset; break; case SymTagThunk: X(ULONG64) = ((const struct symt_thunk*)type)->address; @@ -648,6 +654,9 @@ BOOL symt_get_info(const struct symt* type, IMAGEHLP_SYMBOL_TYPE_INFO req, case SymTagThunk: X(DWORD64) = ((const struct symt_thunk*)type)->size; break; + case SymTagLabel: + X(DWORD64) = 0; + break; default: FIXME("Unsupported sym-tag %s for get-length\n", symt_get_tag_str(type->tag)); @@ -759,7 +768,9 @@ BOOL symt_get_info(const struct symt* type, IMAGEHLP_SYMBOL_TYPE_INFO req, case SymTagFunction: X(DWORD) = (DWORD)((const struct symt_function*)type)->type; break; - /* FIXME: should also work for enums */ + case SymTagEnum: + X(DWORD) = (DWORD)((const struct symt_enum*)type)->base_type; + break; case SymTagFunctionArgType: X(DWORD) = (DWORD)((const struct symt_function_arg_type*)type)->arg_type; break; @@ -768,6 +779,7 @@ BOOL symt_get_info(const struct symt* type, IMAGEHLP_SYMBOL_TYPE_INFO req, symt_get_tag_str(type->tag)); case SymTagPublicSymbol: case SymTagThunk: + case SymTagLabel: return FALSE; } break; @@ -797,10 +809,15 @@ BOOL symt_get_info(const struct symt* type, IMAGEHLP_SYMBOL_TYPE_INFO req, X(DWORD) = (DWORD)((const struct symt_array*)type)->index_type; break; + case TI_GET_CLASSPARENTID: + /* FIXME: we don't support properly C++ for now, pretend this symbol doesn't + * belong to a parent class + */ + return FALSE; + #undef X case TI_GET_ADDRESSOFFSET: - case TI_GET_CLASSPARENTID: case TI_GET_SYMINDEX: case TI_GET_THISADJUST: case TI_GET_VIRTUALBASECLASS: diff --git a/reactos/dll/win32/devmgr/devmgr.rc b/reactos/dll/win32/devmgr/devmgr.rc index a8f054fb24c..7cb64ebddb9 100644 --- a/reactos/dll/win32/devmgr/devmgr.rc +++ b/reactos/dll/win32/devmgr/devmgr.rc @@ -21,6 +21,7 @@ IDI_DEVMGR ICON "resources/devmgr.ico" #include "lang/hu-HU.rc" #include "lang/id-ID.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" #include "lang/ru-RU.rc" diff --git a/reactos/dll/win32/devmgr/lang/no-NO.rc b/reactos/dll/win32/devmgr/lang/no-NO.rc new file mode 100644 index 00000000000..77efbccaaf0 --- /dev/null +++ b/reactos/dll/win32/devmgr/lang/no-NO.rc @@ -0,0 +1,171 @@ +// Norwegain language resource file (Sebastian Gasiorek, 2005-11-13) + +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +STRINGTABLE +BEGIN + IDS_NAME "Navn" + IDS_TYPE "Type" + IDS_MANUFACTURER "Fabrikant: %1" + IDS_LOCATION "Plassering: %1" + IDS_STATUS "Enhetsstatus: %1" + IDS_UNKNOWN "Ukjent" + IDS_LOCATIONSTR "Plassering %1!u! (%2)" + IDS_DEVCODE " (Kode %1!u!)" + IDS_DEVCODE2 " (Kode %2!u!)" + IDS_ENABLEDEVICE "Bruk denne enheten (aktiver)" + IDS_DISABLEDEVICE "Ikke bruk denne enheten (deaktiver)" + IDS_UNKNOWNDEVICE "Ukjent enhet" + IDS_NODRIVERLOADED "Ingen drivere er installert for denne enheten." + IDS_DEVONPARENT "pе %1" + IDS_TROUBLESHOOTDEV "&Feilsшking..." + IDS_ENABLEDEV "A&ktiver enhet" + IDS_REINSTALLDRV "Installere driver pе nytt" + IDS_PROPERTIES "E&genskaper" + IDS_UPDATEDRV "O&ppdater driveren..." + IDS_REBOOT "Restart &datamaskinen..." + IDS_NOTAVAILABLE "Ikke tilgjengelig" + IDS_NOTDIGITALLYSIGNED "ikke digital signert" + IDS_NODRIVERS " Ingen driver filer trengs eller har blitt lastet for denne enheten." +END + +/* error messages, source: http://www.z123.org/techsupport/medm.htm */ +STRINGTABLE +BEGIN + IDS_DEV_NO_PROBLEM "Denne enheten fungerer som den skal." + IDS_DEV_NOT_CONFIGURED "Denne enheten er ikke riktig konfigurert." + IDS_DEV_DEVLOADER_FAILED "ReactOS kunne ikke laste driver for denne enheten fordi datamaskinen rapporterer to $1 buss typer." + IDS_DEV_DEVLOADER_FAILED2 "$1 enhetslaster(e) for denne enheten kunne ikke laste enhetsdriveren." + IDS_DEV_OUT_OF_MEMORY "Driveren for denne enheten kan vжre dеrlig, eller sе kan systemet ditt ha for lite minne eller ha for andre resusser." + IDS_DEV_ENTRY_IS_WRONG_TYPE "Denne enheten virker ikke fordi en av driverene kan vжre dеrlig, eller at ditt register kan vжre dеrlig." + IDS_DEV_LACKED_ARBITRATOR "Driveren for denne enheter trenger en ressurs som ReactOS ikke vet hvordan skal brukes." + IDS_DEV_BOOT_CONFIG_CONFLICT "En annen enhet bruker ressurs som denne enheten trenger е bruke." + IDS_DEV_FAILED_FILTER "Driveren for denne enheten trenger е bli installert pе nytt." + IDS_DEV_DEVLOADER_NOT_FOUND "Denne enheten fungerer ikke som den skal fordi ReactOS kan ikke laste filen $1 som laster driveren for denne enheten." + IDS_DEV_DEVLOADER_NOT_FOUND2 "Denne enheten fungerer ikke som den skal fordi filen $1 som laster driveren for denne enheten er dеrlig." + IDS_DEV_DEVLOADER_NOT_FOUND3 "Enhet mislykket: Prшv е bytt driveren for denne enheten. Hvis dette ikke virker, se pе din maskinvare dokumentasjon." + IDS_DEV_INVALID_DATA "Denne enheten fungerer ikke som den skal fordi BIOS pе din datamaskin rapporterer at ressursen for denne enheten er feil." + IDS_DEV_INVALID_DATA2 "Denne enheten fungerer ikke som den skal fordi BIOS pе enheten rapporterer at ressursen for denne enheten er feil. " + IDS_DEV_FAILED_START "Denne enheten er heller ikke valgt, eller vil ikke fungere riktig, eller sе har den ikke de driverene som trengs." + IDS_DEV_LIAR "ReactOS har stoppet reaksjon mens attempting for е starte denne enheten, og derfor vil den aldri forsшke е starte denne enheten igjen." + IDS_DEV_NORMAL_CONFLICT "Denne enheten kan ikke finne noen ledige $1 ressurser for е kunne brukes." + IDS_DEV_NOT_VERIFIED "Denne enheten er heller ikke valgt, eller vil ikke fungere riktig, eller sе har den ikke alle driverene som trengs." + IDS_DEV_NEED_RESTART "Denne enheten vil ikke fungere som den skal fшr du startet datamaskinen pе nytt." + IDS_DEV_REENUMERATION "Denne enheten har krasjet pе grunn av en ressurs konflikt." + IDS_DEV_PARTIAL_LOG_CONF "ReactOS kunne ikke finne alle ressurser som denne enheten bruker." + IDS_DEV_UNKNOWN_RESOURCE "Driver informasjon filen $1 forteller at denne barne enheten, for е bruke en ressurs som denne foreldre enheten ikke har eller kjenne igjen." + IDS_DEV_REINSTALL "Driveren for denne enheten trenger е bli installert pе nytt." + IDS_DEV_REGISTRY "Det kan vжre noe feil med registeret." + IDS_DEV_WILL_BE_REMOVED "ReactOS fjerner denne enheten." + IDS_DEV_DISABLED "Denne enheten er ikke startet." + IDS_DEV_DISABLED2 "Denne enheten er deaktivert." + IDS_DEV_DEVLOADER_NOT_READY "Oppstartlasteren for denne enheten kan ikke laste de nшdvendige filene." + IDS_DEV_DEVLOADER_NOT_READY2 "Dette skjermkortet fungerer som det skal." + IDS_DEV_DEVLOADER_NOT_READY3 "Oppstartlasteren for denne enheten kan ikke laste de nшdvendige driverene." + IDS_DEV_DEVICE_NOT_THERE "Denne enheten er heller ikke valgt, eller vil ikke fungere riktig, eller sе har den ikke alle driverene som trengs." + IDS_DEV_MOVED "ReactOS starter prosessen for е setter opp denne enheten." + IDS_DEV_TOO_EARLY "ReactOS er i prosessen for е setter opp denne enheten." + IDS_DEV_NO_VALID_LOG_CONF "ReactOS kan\ ikke spesifisere ressursen for denne enheten." + IDS_DEV_FAILED_INSTALL "Driveren for denne enheten er ikke installert." + IDS_DEV_HARDWARE_DISABLED "Denne enheten er deaktivert fordi BIOS for enheten gir ikke andre ressurser." + IDS_DEV_CANT_SHARE_IRQ "Denne enheten bruker en Interrupt Request (IRQ) ressurs som er i bruk av en annen enhet og kan ikke bli delt.\nDu mе endre konflikt innstillingen eller fjerne ekte-modus driver som forеrsaker konflikten." + IDS_DEV_FAILED_ADD "Denne enheten vil ikke fungere som den skal fordi $1 vil ikke fungere som den skal." + IDS_DEV_DISABLED_SERVICE "ReactOS kan ikke installere driveren for denne enheten, fordi den fеr ikke tilgang til driveren eller nettverks plasseringen som har installering filen." + IDS_DEV_TRANSLATION_FAILED "Denne enheten vil\ ikke svare pе grunn av driveren." + IDS_DEV_NO_SOFTCONFIG "ReactOS kan ikke oppdage innstillingene for denne enheten. Ta hensyn til dokumentasjon som kommer med denne enheten og bruker ressursen tab for е sette konfigurasjonen." + IDS_DEV_BIOS_TABLE "Din datamaskin\ system firmware fшlger ikke med nok informasjon til е riktig konfigurere og bruke denne enheten. \nFor е bruke denne enheten, kontakt din datamaskin fabrikant for е fе en firmware eller BIOS oppdatering." + IDS_DEV_IRQ_TRANSLATION_FAILED "Denne enheten trenger en PCI interrupt men den er konfigurert for en ISA interrupt (eller vice versa). \nVennligst bruk datamaskinens\'s system installering program for е rekonfigurere interrupt for denne enheten." + IDS_DEV_FAILED_DRIVER_ENTRY "ReactOS kan ikke initialise enhetsdriveren for denne maskinvaren." + IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD "ReactOS kan ikke laste enhetsdriveren for denne maskinvaren fordi en forrige tilfelle av enhetsdriveren er fremdeles i minnet." + IDS_DEV_DRIVER_FAILED_LOAD "ReactOS kan ikke laste enhetsdriveren for denne maskinvaren. Driveren kan vжre korrupt eller mangler." + IDS_DEV_DRIVER_SERVICE_KEY_INVALID "ReactOS kan ikke fе tilgang til denne maskinvaren fordi dens tjeneste nшkkel informasjon i registret mangler eller er uriktig." + IDS_DEV_LEGACY_SERVICE_NO_DEVICES "ReactOS har fullfшrt е laste denne enhetsdriverne for for maskinvare men kan ikke finne maskinvare enheten." + IDS_DEV_DUPLICATE_DEVICE "ReactOS kan ikke laste enhetsdriveren for denne maskinvaren fordi det er en duplikat enhet som allerede kjшrer pе systemet." + IDS_DEV_FAILED_POST_START "ReactOS har stoppet denne enheten fordi det har rapportert problemer." + IDS_DEV_HALTED "Et program eller tjeneste har slеtt av denne maskinvare enheten." + IDS_DEV_PHANTOM "Nеvжrende, denne maskinvare enheten er ikke koblet til datamaskinen." + IDS_DEV_SYSTEM_SHUTDOWN "ReactOS kan ikke fе tilgang til denne maskinvare enheten fordi operativssystemet er i prosessen for е slеs av." + IDS_DEV_HELD_FOR_EJECT "ReactOS kan ikke bruke denne maskinvare enheten fordi den har blitt forbredt pе sikker fjerning, men har ikke blitt fjernet fra datamaskinen" + IDS_DEV_DRIVER_BLOCKED "Programvaren for denne enheten har blitt blokket fra е starte fordi det et kjent for е ha problemer med ReactOS. Kontact maskinvare produsenten for nye drivere." + IDS_DEV_REGISTRY_TOO_LARGE "ReactOS kan ikke starte ny maskinvare enhet fordi system filen er for stor (Endre Registet stшrrelse begrensning)." + IDS_DEV_SETPROPERTIES_FAILED "ReactOS var ikke tilgjengelig for е endre innstillinger for denne enheten." +END + +IDD_HARDWARE DIALOGEX DISCARDABLE 0, 0, 300, 400 +STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION | DS_SHELLFONT +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Enheter:",IDC_DEVICES,7,6,196,10 + CONTROL "",IDC_LV_DEVICES,"SysListView32",LVS_REPORT | + LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | + LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,16,196,50 + GROUPBOX "Enhets egenskaper",IDC_PROPERTIESGROUP,7,76,196,105 + LTEXT "",IDC_MANUFACTURER,14,88,183,10,SS_ENDELLIPSIS + LTEXT "",IDC_LOCATION,14,100,183,10,SS_ENDELLIPSIS + LTEXT "",IDC_STATUS,14,112,183,30 + PUSHBUTTON "&Feilsшking...",IDC_TROUBLESHOOT,85,140,54,14, + BS_PUSHBUTTON | WS_CHILD | WS_DISABLED | WS_TABSTOP + PUSHBUTTON "E&genskaper",IDC_PROPERTIES,146,140,50,14 +END + +IDD_DEVICEGENERAL DIALOGEX DISCARDABLE 0, 0, 252, 218 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Generielt" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_DEVICON, 7, 7, 20, 20 + LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX + LTEXT "Enhetstype:", -1, 37, 39, 60, 8, SS_NOPREFIX + EDITTEXT IDC_DEVTYPE, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY + LTEXT "Fabrikant:", -1, 37, 53, 60, 8, SS_NOPREFIX + EDITTEXT IDC_DEVMANUFACTURER, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY + LTEXT "Plassering:", -1, 37, 67, 60, 8, SS_NOPREFIX + EDITTEXT IDC_DEVLOCATION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY + GROUPBOX "Enhetsstatus", IDC_DEVSTATUSGROUP, 7, 83, 238, 100 + EDITTEXT IDC_DEVSTATUS, 14, 96, 224, 61, NOT WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL + PUSHBUTTON "&Feilsшking...", IDC_DEVPROBLEM, 148, 163, 90, 15 + LTEXT "&Enhets bruk:", IDC_DEVUSAGELABEL, 7, 188, 222, 8, WS_DISABLED + COMBOBOX IDC_DEVUSAGE, 7, 198, 239, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_DISABLED +END + +IDD_DEVICEDRIVER DIALOGEX DISCARDABLE 0, 0, 252, 218 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Driver" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_DEVICON, 7, 7, 20, 20 + LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX + LTEXT "Driver produsent:", -1, 37, 39, 60, 8, SS_NOPREFIX + EDITTEXT IDC_DRVPROVIDER, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY + LTEXT "Driver dato:", -1, 37, 53, 60, 8, SS_NOPREFIX + EDITTEXT IDC_DRVDATE, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY + LTEXT "Driver versjon:", -1, 37, 67, 60, 8, SS_NOPREFIX + EDITTEXT IDC_DRVVERSION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY + LTEXT "Digital signert:", -1, 37, 81, 60, 8, SS_NOPREFIX + EDITTEXT IDC_DIGITALSIGNER, 100, 81, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY + PUSHBUTTON "&Driver detaljer...", IDC_DRIVERDETAILS, 7, 106, 70, 15 + LTEXT "For е vise detaljer om driver filene.", -1, 91, 110, 154, 17, SS_NOPREFIX +END + +IDD_DRIVERDETAILS DIALOGEX DISCARDABLE 0, 0, 224, 250 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME +CAPTION "Driver fil detaljer" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_DEVICON, 7, 7, 20, 20 + LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX + LTEXT "&Driver filer:", -1, 7, 36, 204, 8 + CONTROL "", IDC_DRIVERFILES, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER | + LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING | + LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 209, 80 + LTEXT "Produsent:", -1, 14, 134, 50, 8 + LTEXT "", IDC_FILEPROVIDER, 66, 134, 155, 8 + LTEXT "Filversjon:", -1, 14, 150, 50, 8 + LTEXT "", IDC_FILEVERSION, 66, 150, 155, 8 + LTEXT "Opphavsrett:", -1, 14, 166, 50, 8 + LTEXT "", IDC_FILECOPYRIGHT, 66, 166, 155, 8 + LTEXT "Digital signert:", -1, 14, 182, 50, 8 + LTEXT "", IDC_DIGITALSIGNER, 66, 182, 155, 8 + PUSHBUTTON "OK", IDOK, 167, 228, 50, 14 +END + diff --git a/reactos/dll/win32/devmgr/lang/ru-RU.rc b/reactos/dll/win32/devmgr/lang/ru-RU.rc index be5e72127c7..1b1861ce7c4 100644 --- a/reactos/dll/win32/devmgr/lang/ru-RU.rc +++ b/reactos/dll/win32/devmgr/lang/ru-RU.rc @@ -9,8 +9,8 @@ BEGIN IDS_STATUS "Состояние устройства: %1" IDS_UNKNOWN "Неизвестно" IDS_LOCATIONSTR "Размещение %1!u! (%2)" - IDS_DEVCODE " (Код %1!u!)" - IDS_DEVCODE2 " (Код %2!u!)" + IDS_DEVCODE " (код %1!u!)" + IDS_DEVCODE2 " (код %2!u!)" IDS_ENABLEDEVICE "Это устройство используется (включено)" IDS_DISABLEDEVICE "Это устройство не используется (выключено)" IDS_UNKNOWNDEVICE "Неизвестное устройство" @@ -58,7 +58,7 @@ BEGIN IDS_DEV_DISABLED "Это устройство не запущено." IDS_DEV_DISABLED2 "Это устройство отключено." IDS_DEV_DEVLOADER_NOT_READY "The loaders for this device cannot load the required drivers." - IDS_DEV_DEVLOADER_NOT_READY2 "This display adapter is functioning correctly." + IDS_DEV_DEVLOADER_NOT_READY2 "Этот адаптер экрана функционирует корректно." IDS_DEV_DEVLOADER_NOT_READY3 "The loaders for this device cannot load the required drivers." IDS_DEV_DEVICE_NOT_THERE "This device is either not present, not working properly, or does not have all the drivers installed." IDS_DEV_MOVED "ReactOS is in the process of setting up this device." diff --git a/reactos/dll/win32/devmgr/lang/sk-SK.rc b/reactos/dll/win32/devmgr/lang/sk-SK.rc index f49eb1bfddb..4d3da98ea51 100644 --- a/reactos/dll/win32/devmgr/lang/sk-SK.rc +++ b/reactos/dll/win32/devmgr/lang/sk-SK.rc @@ -1,6 +1,6 @@ /* TRANSLATOR : Mбrio Kaиmбr /Mario Kacmar/ aka Kario (kario@szm.sk) * DATE OF TR.: 30-05-2008 - * LAST CHANGE: 17-06-2008 + * LAST CHANGE: 30-07-2008 */ LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT @@ -12,7 +12,7 @@ BEGIN IDS_MANUFACTURER "Vэrobca: %1" IDS_LOCATION "Umiestnenie: %1" IDS_STATUS "Stav zariadenia: %1" - IDS_UNKNOWN "Neznбmy" + IDS_UNKNOWN "Neznбme" IDS_LOCATIONSTR "Umiestnenie %1!u! (%2)" IDS_DEVCODE " (Kуd %1!u!)" IDS_DEVCODE2 " (Kуd %2!u!)" @@ -21,14 +21,14 @@ BEGIN IDS_UNKNOWNDEVICE "Neznбme zariadenie" IDS_NODRIVERLOADED "Pre toto zariadenie nie sъ nainљtalovanй ћiadne ovlбdaиe." IDS_DEVONPARENT "na %1" - IDS_TROUBLESHOOTDEV "&Troubleshoot..." + IDS_TROUBLESHOOTDEV "&Rieљenie problйmov..." IDS_ENABLEDEV "E&nable Device" IDS_REINSTALLDRV "Re&install Driver" IDS_PROPERTIES "P&roperties" - IDS_UPDATEDRV "U&pdate Driver..." + IDS_UPDATEDRV "&Aktualizovaќ ovlбdaи..." IDS_REBOOT "Restart &Computer..." IDS_NOTAVAILABLE "Nie je k dispozнcii" //Not available - IDS_NOTDIGITALLYSIGNED "Not digitally signed" + IDS_NOTDIGITALLYSIGNED "Digitбlne nepodpнsanэ" IDS_NODRIVERS "No driver files are required or have been loaded for this device." END @@ -98,7 +98,7 @@ IDD_HARDWARE DIALOGEX DISCARDABLE 0, 0, 300, 400 STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION | DS_SHELLFONT FONT 8, "MS Shell Dlg" BEGIN - LTEXT "&Devices:",IDC_DEVICES,7,6,196,10 + LTEXT "&Zariadenia:",IDC_DEVICES,7,6,196,10 CONTROL "",IDC_LV_DEVICES,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,16,196,50 @@ -106,7 +106,7 @@ BEGIN LTEXT "",IDC_MANUFACTURER,14,88,183,10,SS_ENDELLIPSIS LTEXT "",IDC_LOCATION,14,100,183,10,SS_ENDELLIPSIS LTEXT "",IDC_STATUS,14,112,183,30 - PUSHBUTTON "&Troubleshoot...",IDC_TROUBLESHOOT,85,140,54,14, + PUSHBUTTON "&Rieљenie problйmov...",IDC_TROUBLESHOOT,85,140,54,14, BS_PUSHBUTTON | WS_CHILD | WS_DISABLED | WS_TABSTOP PUSHBUTTON "Vl&astnosti",IDC_PROPERTIES,146,140,50,14 END @@ -126,8 +126,8 @@ BEGIN EDITTEXT IDC_DEVLOCATION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY GROUPBOX "Stav zariadenia", IDC_DEVSTATUSGROUP, 7, 83, 238, 100 EDITTEXT IDC_DEVSTATUS, 14, 96, 224, 61, NOT WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL - PUSHBUTTON "&Troubleshoot...", IDC_DEVPROBLEM, 148, 163, 90, 15 - LTEXT "&Device usage:", IDC_DEVUSAGELABEL, 7, 188, 222, 8, WS_DISABLED + PUSHBUTTON "&Rieљenie problйmov...", IDC_DEVPROBLEM, 148, 163, 90, 15 + LTEXT "&Vyuћitie zariadenia:", IDC_DEVUSAGELABEL, 7, 188, 222, 8, WS_DISABLED COMBOBOX IDC_DEVUSAGE, 7, 198, 239, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_DISABLED END @@ -152,7 +152,7 @@ END IDD_DRIVERDETAILS DIALOGEX DISCARDABLE 0, 0, 224, 250 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME -CAPTION "Detaily sъboru ovlбdaиa" +CAPTION "Detaily o sъboroch ovlбdaиa" FONT 8, "MS Shell Dlg" BEGIN ICON "", IDC_DEVICON, 7, 7, 20, 20 diff --git a/reactos/dll/win32/gdi32/objects/font.c b/reactos/dll/win32/gdi32/objects/font.c index eaeceb97999..becc851ecab 100644 --- a/reactos/dll/win32/gdi32/objects/font.c +++ b/reactos/dll/win32/gdi32/objects/font.c @@ -512,7 +512,7 @@ GetCharABCWidthsFloatW(HDC hdc, UINT LastChar, LPABCFLOAT abcF) { -DPRINT("GetCharABCWidthsFloatW\n"); + DPRINT("GetCharABCWidthsFloatW\n"); if ((!abcF) || (FirstChar > LastChar)) { SetLastError(ERROR_INVALID_PARAMETER); @@ -537,7 +537,7 @@ GetCharWidthFloatW(HDC hdc, UINT iLastChar, PFLOAT pxBuffer) { -DPRINT("GetCharWidthsFloatW\n"); + DPRINT("GetCharWidthsFloatW\n"); if ((!pxBuffer) || (iFirstChar > iLastChar)) { SetLastError(ERROR_INVALID_PARAMETER); @@ -562,7 +562,7 @@ GetCharWidthW(HDC hdc, UINT iLastChar, LPINT lpBuffer) { -DPRINT("GetCharWidthsW\n"); + DPRINT("GetCharWidthsW\n"); if ((!lpBuffer) || (iFirstChar > iLastChar)) { SetLastError(ERROR_INVALID_PARAMETER); @@ -587,7 +587,7 @@ GetCharWidth32W(HDC hdc, UINT iLastChar, LPINT lpBuffer) { -DPRINT("GetCharWidths32W\n"); + DPRINT("GetCharWidths32W\n"); if ((!lpBuffer) || (iFirstChar > iLastChar)) { SetLastError(ERROR_INVALID_PARAMETER); @@ -613,7 +613,7 @@ GetCharABCWidthsW(HDC hdc, UINT LastChar, LPABC lpabc) { -DPRINT("GetCharABCWidthsW\n"); + DPRINT("GetCharABCWidthsW\n"); if ((!lpabc) || (FirstChar > LastChar)) { SetLastError(ERROR_INVALID_PARAMETER); @@ -639,26 +639,35 @@ GetCharWidthA( LPINT lpBuffer ) { -DPRINT("GetCharWidthsA\n"); INT i, wlen, count = (INT)(iLastChar - iFirstChar + 1); LPSTR str; LPWSTR wstr; BOOL ret = TRUE; + DPRINT("GetCharWidthsA\n"); if(count <= 0) return FALSE; - str = HeapAlloc(GetProcessHeap(), 0, count); - for(i = 0; i < count; i++) - str[i] = (BYTE)(iFirstChar + i); + str = HeapAlloc(GetProcessHeap(), 0, count+1); + if (!str) + return FALSE; - wstr = FONT_mbtowc(NULL, str, count, &wlen, NULL); + for(i = 0; i < count; i++) + str[i] = (BYTE)(iFirstChar + i); + str[i] = '\0'; + + wstr = FONT_mbtowc(NULL, str, count+1, &wlen, NULL); + if (!wstr) + { + HeapFree(GetProcessHeap(), 0, str); + return FALSE; + } ret = NtGdiGetCharWidthW( hdc, wstr[0], - (ULONG) count, - (PWCHAR) wstr, - GCW_NOFLOAT, - (PVOID) lpBuffer); + (ULONG) count, + (PWCHAR) wstr, + GCW_NOFLOAT, + (PVOID) lpBuffer); HeapFree(GetProcessHeap(), 0, str); HeapFree(GetProcessHeap(), 0, wstr); @@ -678,26 +687,34 @@ GetCharWidth32A( LPINT lpBuffer ) { -DPRINT("GetCharWidths32A\n"); INT i, wlen, count = (INT)(iLastChar - iFirstChar + 1); LPSTR str; LPWSTR wstr; BOOL ret = TRUE; + DPRINT("GetCharWidths32A\n"); if(count <= 0) return FALSE; - str = HeapAlloc(GetProcessHeap(), 0, count); + str = HeapAlloc(GetProcessHeap(), 0, count+1); + if (!str) + return FALSE; for(i = 0; i < count; i++) - str[i] = (BYTE)(iFirstChar + i); + str[i] = (BYTE)(iFirstChar + i); + str[i] = '\0'; - wstr = FONT_mbtowc(NULL, str, count, &wlen, NULL); + wstr = FONT_mbtowc(NULL, str, count+1, &wlen, NULL); + if (!wstr) + { + HeapFree(GetProcessHeap(), 0, str); + return FALSE; + } ret = NtGdiGetCharWidthW( hdc, wstr[0], - (ULONG) count, - (PWCHAR) wstr, - GCW_NOFLOAT|GCW_WIN32, - (PVOID) lpBuffer); + (ULONG) count, + (PWCHAR) wstr, + GCW_NOFLOAT|GCW_WIN32, + (PVOID) lpBuffer); HeapFree(GetProcessHeap(), 0, str); HeapFree(GetProcessHeap(), 0, wstr); @@ -717,20 +734,27 @@ GetCharWidthFloatA( PFLOAT pxBuffer ) { -DPRINT("GetCharWidthsFloatA\n"); INT i, wlen, count = (INT)(iLastChar - iFirstChar + 1); LPSTR str; LPWSTR wstr; BOOL ret = TRUE; + DPRINT("GetCharWidthsFloatA\n"); if(count <= 0) return FALSE; - str = HeapAlloc(GetProcessHeap(), 0, count); + str = HeapAlloc(GetProcessHeap(), 0, count+1); + if (!str) + return FALSE; for(i = 0; i < count; i++) - str[i] = (BYTE)(iFirstChar + i); - - wstr = FONT_mbtowc(NULL, str, count, &wlen, NULL); + str[i] = (BYTE)(iFirstChar + i); + str[i] = '\0'; + wstr = FONT_mbtowc(NULL, str, count+1, &wlen, NULL); + if (!wstr) + { + HeapFree(GetProcessHeap(), 0, str); + return FALSE; + } ret = NtGdiGetCharWidthW( hdc, wstr[0], (ULONG) count, (PWCHAR) wstr, 0, (PVOID) pxBuffer); HeapFree(GetProcessHeap(), 0, str); @@ -751,26 +775,34 @@ GetCharABCWidthsA( LPABC lpabc ) { -DPRINT("GetCharABCWidthsA\n"); INT i, wlen, count = (INT)(uLastChar - uFirstChar + 1); LPSTR str; LPWSTR wstr; BOOL ret = TRUE; + DPRINT("GetCharABCWidthsA\n"); if(count <= 0) return FALSE; - str = HeapAlloc(GetProcessHeap(), 0, count); + str = HeapAlloc(GetProcessHeap(), 0, count+1); + if (!str) + return FALSE; for(i = 0; i < count; i++) - str[i] = (BYTE)(uFirstChar + i); + str[i] = (BYTE)(uFirstChar + i); + str[i] = '\0'; - wstr = FONT_mbtowc(hdc, str, count, &wlen, NULL); + wstr = FONT_mbtowc(hdc, str, count+1, &wlen, NULL); + if (!wstr) + { + HeapFree(GetProcessHeap(), 0, str); + return FALSE; + } ret = NtGdiGetCharABCWidthsW( hdc, wstr[0], - (ULONG)count, - (PWCHAR)wstr, - GCABCW_NOFLOAT, - (PVOID)lpabc); + (ULONG)count, + (PWCHAR)wstr, + GCABCW_NOFLOAT, + (PVOID)lpabc); HeapFree(GetProcessHeap(), 0, str); HeapFree(GetProcessHeap(), 0, wstr); @@ -790,21 +822,28 @@ GetCharABCWidthsFloatA( LPABCFLOAT lpABCF ) { -DPRINT("GetCharABCWidthsFloatA\n"); INT i, wlen, count = (INT)(iLastChar - iFirstChar + 1); LPSTR str; LPWSTR wstr; BOOL ret = TRUE; + DPRINT("GetCharABCWidthsFloatA\n"); if (count <= 0) return FALSE; - str = HeapAlloc(GetProcessHeap(), 0, count); + str = HeapAlloc(GetProcessHeap(), 0, count+1); + if (!str) + return FALSE; for(i = 0; i < count; i++) str[i] = (BYTE)(iFirstChar + i); + str[i] = '\0'; - wstr = FONT_mbtowc( hdc, str, count, &wlen, NULL ); - + wstr = FONT_mbtowc( hdc, str, count+1, &wlen, NULL ); + if (!wstr) + { + HeapFree( GetProcessHeap(), 0, str ); + return FALSE; + } ret = NtGdiGetCharABCWidthsW( hdc,wstr[0],(ULONG)count, (PWCHAR)wstr, 0, (PVOID)lpABCF); HeapFree( GetProcessHeap(), 0, str ); @@ -824,7 +863,7 @@ GetCharABCWidthsI(HDC hdc, LPWORD pgi, LPABC lpabc) { -DPRINT("GetCharABCWidthsI\n"); + DPRINT("GetCharABCWidthsI\n"); return NtGdiGetCharABCWidthsW( hdc, giFirst, (ULONG) cgi, @@ -845,7 +884,7 @@ GetCharWidthI(HDC hdc, LPINT lpBuffer ) { -DPRINT("GetCharWidthsI\n"); + DPRINT("GetCharWidthsI\n"); if (!lpBuffer || (!pgi && (giFirst == MAXUSHORT))) // Cannot be at max. { SetLastError(ERROR_INVALID_PARAMETER); diff --git a/reactos/dll/win32/gdiplus/brush.c b/reactos/dll/win32/gdiplus/brush.c index 2d15e011a20..13cd3abdf05 100644 --- a/reactos/dll/win32/gdiplus/brush.c +++ b/reactos/dll/win32/gdiplus/brush.c @@ -75,6 +75,24 @@ GpStatus WINGDIPAPI GdipCloneBrush(GpBrush *brush, GpBrush **clone) memcpy(dest->pathdata.Points, src->pathdata.Points, count * sizeof(PointF)); memcpy(dest->pathdata.Types, src->pathdata.Types, count); + /* blending */ + count = src->blendcount; + dest->blendcount = count; + dest->blendfac = GdipAlloc(count * sizeof(REAL)); + dest->blendpos = GdipAlloc(count * sizeof(REAL)); + + if(!dest->blendfac || !dest->blendpos){ + GdipFree(dest->pathdata.Points); + GdipFree(dest->pathdata.Types); + GdipFree(dest->blendfac); + GdipFree(dest->blendpos); + GdipFree(dest); + return OutOfMemory; + } + + memcpy(dest->blendfac, src->blendfac, count * sizeof(REAL)); + memcpy(dest->blendpos, src->blendpos, count * sizeof(REAL)); + break; } case BrushTypeLinearGradient: @@ -180,6 +198,25 @@ GpStatus WINGDIPAPI GdipCreateLineBrushFromRectI(GDIPCONST GpRect* rect, return GdipCreateLineBrushFromRect(&rectF, startcolor, endcolor, mode, wrap, line); } +/* FIXME: angle value completely ignored. Don't know how to use it since native + always set Brush rectangle to rect (independetly of this angle). + Maybe it's used only on drawing. */ +GpStatus WINGDIPAPI GdipCreateLineBrushFromRectWithAngle(GDIPCONST GpRectF* rect, + ARGB startcolor, ARGB endcolor, REAL angle, BOOL isAngleScalable, GpWrapMode wrap, + GpLineGradient **line) +{ + return GdipCreateLineBrushFromRect(rect, startcolor, endcolor, LinearGradientModeForwardDiagonal, + wrap, line); +} + +GpStatus WINGDIPAPI GdipCreateLineBrushFromRectWithAngleI(GDIPCONST GpRect* rect, + ARGB startcolor, ARGB endcolor, REAL angle, BOOL isAngleScalable, GpWrapMode wrap, + GpLineGradient **line) +{ + return GdipCreateLineBrushFromRectI(rect, startcolor, endcolor, LinearGradientModeForwardDiagonal, + wrap, line); +} + GpStatus WINGDIPAPI GdipCreatePathGradient(GDIPCONST GpPointF* points, INT count, GpWrapMode wrap, GpPathGradient **grad) { @@ -194,6 +231,15 @@ GpStatus WINGDIPAPI GdipCreatePathGradient(GDIPCONST GpPointF* points, *grad = GdipAlloc(sizeof(GpPathGradient)); if (!*grad) return OutOfMemory; + (*grad)->blendfac = GdipAlloc(sizeof(REAL)); + if(!(*grad)->blendfac){ + GdipFree(*grad); + return OutOfMemory; + } + (*grad)->blendfac[0] = 1.0; + (*grad)->blendpos = NULL; + (*grad)->blendcount = 1; + (*grad)->pathdata.Count = count; (*grad)->pathdata.Points = GdipAlloc(count * sizeof(PointF)); (*grad)->pathdata.Types = GdipAlloc(count); @@ -265,6 +311,15 @@ GpStatus WINGDIPAPI GdipCreatePathGradientFromPath(GDIPCONST GpPath* path, *grad = GdipAlloc(sizeof(GpPathGradient)); if (!*grad) return OutOfMemory; + (*grad)->blendfac = GdipAlloc(sizeof(REAL)); + if(!(*grad)->blendfac){ + GdipFree(*grad); + return OutOfMemory; + } + (*grad)->blendfac[0] = 1.0; + (*grad)->blendpos = NULL; + (*grad)->blendcount = 1; + (*grad)->pathdata.Count = path->pathdata.Count; (*grad)->pathdata.Points = GdipAlloc(path->pathdata.Count * sizeof(PointF)); (*grad)->pathdata.Types = GdipAlloc(path->pathdata.Count); @@ -457,6 +512,8 @@ GpStatus WINGDIPAPI GdipDeleteBrush(GpBrush *brush) case BrushTypePathGradient: GdipFree(((GpPathGradient*) brush)->pathdata.Points); GdipFree(((GpPathGradient*) brush)->pathdata.Types); + GdipFree(((GpPathGradient*) brush)->blendfac); + GdipFree(((GpPathGradient*) brush)->blendpos); break; case BrushTypeSolidColor: case BrushTypeLinearGradient: @@ -482,6 +539,43 @@ GpStatus WINGDIPAPI GdipGetLineGammaCorrection(GpLineGradient *line, return Ok; } +GpStatus WINGDIPAPI GdipGetLineWrapMode(GpLineGradient *brush, GpWrapMode *wrapmode) +{ + if(!brush || !wrapmode) + return InvalidParameter; + + *wrapmode = brush->wrap; + + return Ok; +} + +GpStatus WINGDIPAPI GdipGetPathGradientBlend(GpPathGradient *brush, REAL *blend, + REAL *positions, INT count) +{ + if(!brush || !blend || !positions || count <= 0) + return InvalidParameter; + + if(count < brush->blendcount) + return InsufficientBuffer; + + memcpy(blend, brush->blendfac, count*sizeof(REAL)); + if(brush->blendcount > 1){ + memcpy(positions, brush->blendpos, count*sizeof(REAL)); + } + + return Ok; +} + +GpStatus WINGDIPAPI GdipGetPathGradientBlendCount(GpPathGradient *brush, INT *count) +{ + if(!brush || !count) + return InvalidParameter; + + *count = brush->blendcount; + + return Ok; +} + GpStatus WINGDIPAPI GdipGetPathGradientCenterPoint(GpPathGradient *grad, GpPointF *point) { @@ -547,6 +641,51 @@ GpStatus WINGDIPAPI GdipGetPathGradientPointCount(GpPathGradient *grad, return Ok; } +GpStatus WINGDIPAPI GdipGetPathGradientRect(GpPathGradient *brush, GpRectF *rect) +{ + GpRectF r; + GpPath* path; + GpStatus stat; + + if(!brush || !rect) + return InvalidParameter; + + stat = GdipCreatePath2(brush->pathdata.Points, brush->pathdata.Types, + brush->pathdata.Count, FillModeAlternate, &path); + if(stat != Ok) return stat; + + stat = GdipGetPathWorldBounds(path, &r, NULL, NULL); + if(stat != Ok){ + GdipDeletePath(path); + return stat; + } + + memcpy(rect, &r, sizeof(GpRectF)); + + GdipDeletePath(path); + + return Ok; +} + +GpStatus WINGDIPAPI GdipGetPathGradientRectI(GpPathGradient *brush, GpRect *rect) +{ + GpRectF rectf; + GpStatus stat; + + if(!brush || !rect) + return InvalidParameter; + + stat = GdipGetPathGradientRect(brush, &rectf); + if(stat != Ok) return stat; + + rect->X = roundr(rectf.X); + rect->Y = roundr(rectf.Y); + rect->Width = roundr(rectf.Width); + rect->Height = roundr(rectf.Height); + + return Ok; +} + GpStatus WINGDIPAPI GdipGetPathGradientSurroundColorsWithCount(GpPathGradient *grad, ARGB *argb, INT *count) { diff --git a/reactos/dll/win32/gdiplus/customlinecap.c b/reactos/dll/win32/gdiplus/customlinecap.c index e8e18bc3806..48a20dfbc10 100644 --- a/reactos/dll/win32/gdiplus/customlinecap.c +++ b/reactos/dll/win32/gdiplus/customlinecap.c @@ -100,6 +100,8 @@ GpStatus WINGDIPAPI GdipCreateCustomLineCap(GpPath* fillPath, GpPath* strokePath (*customCap)->inset = baseInset; (*customCap)->cap = baseCap; + (*customCap)->join = LineJoinMiter; + (*customCap)->scale = 1.0; return Ok; } @@ -116,6 +118,28 @@ GpStatus WINGDIPAPI GdipDeleteCustomLineCap(GpCustomLineCap *customCap) return Ok; } +GpStatus WINGDIPAPI GdipGetCustomLineCapStrokeJoin(GpCustomLineCap* customCap, + GpLineJoin* lineJoin) +{ + if(!customCap || !lineJoin) + return InvalidParameter; + + *lineJoin = customCap->join; + + return Ok; +} + +GpStatus WINGDIPAPI GdipGetCustomLineCapWidthScale(GpCustomLineCap* custom, + REAL* widthScale) +{ + if(!custom || !widthScale) + return InvalidParameter; + + *widthScale = custom->scale; + + return Ok; +} + GpStatus WINGDIPAPI GdipSetCustomLineCapStrokeCaps(GpCustomLineCap* custom, GpLineCap start, GpLineCap end) { @@ -144,12 +168,12 @@ GpStatus WINGDIPAPI GdipSetCustomLineCapBaseCap(GpCustomLineCap* custom, GpStatus WINGDIPAPI GdipGetCustomLineCapBaseInset(GpCustomLineCap* custom, REAL* inset) { - static int calls; + if(!custom || !inset) + return InvalidParameter; - if(!(calls++)) - FIXME("not implemented\n"); + *inset = custom->inset; - return NotImplemented; + return Ok; } GpStatus WINGDIPAPI GdipSetCustomLineCapBaseInset(GpCustomLineCap* custom, @@ -163,15 +187,16 @@ GpStatus WINGDIPAPI GdipSetCustomLineCapBaseInset(GpCustomLineCap* custom, return NotImplemented; } +/*FIXME: LineJoin completely ignored now */ GpStatus WINGDIPAPI GdipSetCustomLineCapStrokeJoin(GpCustomLineCap* custom, GpLineJoin join) { - static int calls; + if(!custom) + return InvalidParameter; - if(!(calls++)) - FIXME("not implemented\n"); + custom->join = join; - return NotImplemented; + return Ok; } GpStatus WINGDIPAPI GdipSetCustomLineCapWidthScale(GpCustomLineCap* custom, diff --git a/reactos/dll/win32/gdiplus/font.c b/reactos/dll/win32/gdiplus/font.c index 78de0a6ae88..70f7bb04b3e 100644 --- a/reactos/dll/win32/gdiplus/font.c +++ b/reactos/dll/win32/gdiplus/font.c @@ -95,10 +95,10 @@ GpStatus WINGDIPAPI GdipCreateFont(GDIPCONST GpFontFamily *fontFamily, { WCHAR facename[LF_FACESIZE]; LOGFONTW* lfw; - const TEXTMETRICW* tmw; + const NEWTEXTMETRICW* tmw; GpStatus stat; - if (!fontFamily || !fontFamily->FamilyName || !font) + if (!fontFamily || !font) return InvalidParameter; TRACE("%p (%s), %f, %d, %d, %p\n", fontFamily, @@ -118,7 +118,7 @@ GpStatus WINGDIPAPI GdipCreateFont(GDIPCONST GpFontFamily *fontFamily, lfw->lfStrikeOut = tmw->tmStruckOut; lfw->lfCharSet = tmw->tmCharSet; lfw->lfPitchAndFamily = tmw->tmPitchAndFamily; - lstrcpynW((lfw->lfFaceName), facename, sizeof(WCHAR) * LF_FACESIZE); + lstrcpynW(lfw->lfFaceName, facename, LF_FACESIZE); switch (unit) { @@ -157,6 +157,9 @@ GpStatus WINGDIPAPI GdipCreateFont(GDIPCONST GpFontFamily *fontFamily, return Ok; } +/******************************************************************************* + * GdipCreateFontFromLogfontW [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipCreateFontFromLogfontW(HDC hdc, GDIPCONST LOGFONTW *logfont, GpFont **font) { @@ -169,7 +172,7 @@ GpStatus WINGDIPAPI GdipCreateFontFromLogfontW(HDC hdc, *font = GdipAlloc(sizeof(GpFont)); if(!*font) return OutOfMemory; - memcpy(&(*font)->lfw.lfFaceName, logfont->lfFaceName, LF_FACESIZE * + memcpy((*font)->lfw.lfFaceName, logfont->lfFaceName, LF_FACESIZE * sizeof(WCHAR)); (*font)->lfw.lfHeight = logfont->lfHeight; (*font)->lfw.lfItalic = logfont->lfItalic; @@ -192,6 +195,9 @@ GpStatus WINGDIPAPI GdipCreateFontFromLogfontW(HDC hdc, return Ok; } +/******************************************************************************* + * GdipCreateFontFromLogfontA [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipCreateFontFromLogfontA(HDC hdc, GDIPCONST LOGFONTA *lfa, GpFont **font) { @@ -210,6 +216,9 @@ GpStatus WINGDIPAPI GdipCreateFontFromLogfontA(HDC hdc, return Ok; } +/******************************************************************************* + * GdipDeleteFont [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipDeleteFont(GpFont* font) { if(!font) @@ -220,6 +229,9 @@ GpStatus WINGDIPAPI GdipDeleteFont(GpFont* font) return Ok; } +/******************************************************************************* + * GdipCreateFontFromDC [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipCreateFontFromDC(HDC hdc, GpFont **font) { HFONT hfont; @@ -283,10 +295,13 @@ GpStatus WINGDIPAPI GdipGetFontUnit(GpFont *font, Unit *unit) return Ok; } -/* FIXME: use graphics */ +/******************************************************************************* + * GdipGetLogFontW [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipGetLogFontW(GpFont *font, GpGraphics *graphics, LOGFONTW *lfw) { + /* FIXME: use graphics */ if(!font || !graphics || !lfw) return InvalidParameter; @@ -295,6 +310,9 @@ GpStatus WINGDIPAPI GdipGetLogFontW(GpFont *font, GpGraphics *graphics, return Ok; } +/******************************************************************************* + * GdipCloneFont [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipCloneFont(GpFont *font, GpFont **cloneFont) { if(!font || !cloneFont) @@ -308,19 +326,56 @@ GpStatus WINGDIPAPI GdipCloneFont(GpFont *font, GpFont **cloneFont) return Ok; } -/* Borrowed from GDI32 */ +/******************************************************************************* + * GdipGetFontHeightGivenDPI [GDIPLUS.@] + * PARAMS + * font [I] Font to retrieve DPI from + * dpi [I] DPI to assume + * height [O] Return value + * + * RETURNS + * SUCCESS: Ok + * FAILURE: InvalidParameter if font or height is NULL + * + * NOTES + * According to MSDN, the result is (lineSpacing)*(fontSize / emHeight)*dpi + * (for anything other than unit Pixel) + */ +GpStatus WINGDIPAPI GdipGetFontHeightGivenDPI(GDIPCONST GpFont *font, REAL dpi, REAL *height) +{ + if (!(font && height)) return InvalidParameter; + + FIXME("%p (%s), %f, %p\n", font, + debugstr_w(font->lfw.lfFaceName), dpi, height); + + return NotImplemented; +} + +/*********************************************************************** + * Borrowed from GDI32: + * + * Elf is really an ENUMLOGFONTEXW, and ntm is a NEWTEXTMETRICEXW. + * We have to use other types because of the FONTENUMPROCW definition. + */ static INT CALLBACK is_font_installed_proc(const LOGFONTW *elf, const TEXTMETRICW *ntm, DWORD type, LPARAM lParam) { + if (!ntm) + { + return 1; + } + + *(NEWTEXTMETRICW*)lParam = *(const NEWTEXTMETRICW*)ntm; + return 0; } -static BOOL is_font_installed(const WCHAR *name) +static BOOL find_installed_font(const WCHAR *name, NEWTEXTMETRICW *ntm) { HDC hdc = GetDC(0); BOOL ret = FALSE; - if(!EnumFontFamiliesW(hdc, name, is_font_installed_proc, 0)) + if(!EnumFontFamiliesW(hdc, name, is_font_installed_proc, (LPARAM)ntm)) ret = TRUE; ReleaseDC(0, hdc); @@ -352,9 +407,7 @@ GpStatus WINGDIPAPI GdipCreateFontFamilyFromName(GDIPCONST WCHAR *name, GpFontFamily **FontFamily) { GpFontFamily* ffamily; - HDC hdc; - HFONT hFont, hfont_old; - LOGFONTW lfw; + NEWTEXTMETRICW ntm; TRACE("%s, %p %p\n", debugstr_w(name), fontCollection, FontFamily); @@ -362,32 +415,45 @@ GpStatus WINGDIPAPI GdipCreateFontFamilyFromName(GDIPCONST WCHAR *name, return InvalidParameter; if (fontCollection) FIXME("No support for FontCollections yet!\n"); - if (!is_font_installed(name)) + + if (!find_installed_font(name, &ntm)) return FontFamilyNotFound; ffamily = GdipAlloc(sizeof (GpFontFamily)); if (!ffamily) return OutOfMemory; - hdc = GetDC(0); - lstrcpynW(lfw.lfFaceName, name, sizeof(WCHAR) * LF_FACESIZE); - hFont = CreateFontIndirectW (&lfw); - hfont_old = SelectObject(hdc, hFont); - - GetTextMetricsW(hdc, &ffamily->tmw); - DeleteObject(SelectObject(hdc, hfont_old)); - - ffamily->FamilyName = GdipAlloc(LF_FACESIZE * sizeof (WCHAR)); - if (!ffamily->FamilyName) - { - GdipFree(ffamily); - ReleaseDC(0, hdc); - return OutOfMemory; - } - - lstrcpynW(ffamily->FamilyName, name, sizeof(WCHAR) * LF_FACESIZE); + ffamily->tmw = ntm; + lstrcpynW(ffamily->FamilyName, name, LF_FACESIZE); *FontFamily = ffamily; - ReleaseDC(0, hdc); + + return Ok; +} + +/******************************************************************************* + * GdipCloneFontFamily [GDIPLUS.@] + * + * Creates a deep copy of a Font Family object + * + * PARAMS + * FontFamily [I] Font to clone + * clonedFontFamily [O] The resulting cloned font + * + * RETURNS + * SUCCESS: Ok + */ +GpStatus WINGDIPAPI GdipCloneFontFamily(GpFontFamily* FontFamily, GpFontFamily** clonedFontFamily) +{ + if (!(FontFamily && clonedFontFamily)) return InvalidParameter; + + TRACE("stub: %p (%s), %p\n", FontFamily, + debugstr_w(FontFamily->FamilyName), clonedFontFamily); + + *clonedFontFamily = GdipAlloc(sizeof(GpFontFamily)); + if (!*clonedFontFamily) return OutOfMemory; + + (*clonedFontFamily)->tmw = FontFamily->tmw; + lstrcpyW((*clonedFontFamily)->FamilyName, FontFamily->FamilyName); return Ok; } @@ -445,12 +511,93 @@ GpStatus WINGDIPAPI GdipDeleteFontFamily(GpFontFamily *FontFamily) return InvalidParameter; TRACE("Deleting %p (%s)\n", FontFamily, debugstr_w(FontFamily->FamilyName)); - GdipFree (FontFamily->FamilyName); GdipFree (FontFamily); return Ok; } +GpStatus WINGDIPAPI GdipGetCellAscent(GDIPCONST GpFontFamily *family, + INT style, UINT16* CellAscent) +{ + if (!(family && CellAscent)) return InvalidParameter; + + *CellAscent = family->tmw.tmAscent; + + return Ok; +} + +GpStatus WINGDIPAPI GdipGetCellDescent(GDIPCONST GpFontFamily *family, + INT style, UINT16* CellDescent) +{ + if (!(family && CellDescent)) return InvalidParameter; + + *CellDescent = family->tmw.tmDescent; + + return Ok; +} + +/******************************************************************************* + * GdipGetEmHeight [GDIPLUS.@] + * + * Gets the height of the specified family in EmHeights + * + * PARAMS + * family [I] Family to retrieve from + * style [I] (optional) style + * EmHeight [O] return value + * + * RETURNS + * SUCCESS: Ok + * FAILURE: InvalidParameter + */ +GpStatus WINGDIPAPI GdipGetEmHeight(GDIPCONST GpFontFamily *family, INT style, UINT16* EmHeight) +{ + if (!(family && EmHeight)) return InvalidParameter; + + TRACE("%p (%s), %d, %p, stub!\n", family, + debugstr_w(family->FamilyName), style, EmHeight); + + *EmHeight = family->tmw.ntmSizeEM; + + return Ok; +} + + +/******************************************************************************* + * GdipGetLineSpacing [GDIPLUS.@] + * + * Returns the line spacing in design units + * + * PARAMS + * family [I] Family to retrieve from + * style [I] (Optional) font style + * LineSpacing [O] Return value + * + * RETURNS + * SUCCESS: Ok + * FAILURE: InvalidParameter (family or LineSpacing was NULL) + */ +GpStatus WINGDIPAPI GdipGetLineSpacing(GDIPCONST GpFontFamily *family, + INT style, UINT16* LineSpacing) +{ + if (!(family && LineSpacing)) return InvalidParameter; + + FIXME("stub!\n"); + + return NotImplemented; +} + +GpStatus WINGDIPAPI GdipIsStyleAvailable(GDIPCONST GpFontFamily* family, + INT style, BOOL* IsStyleAvailable) +{ + FIXME("%p %d %p stub!\n", family, style, IsStyleAvailable); + + if (!(family && IsStyleAvailable)) + return InvalidParameter; + + return NotImplemented; +} + /***************************************************************************** * GdipGetGenericFontFamilyMonospace [GDIPLUS.@] * @@ -515,3 +662,73 @@ GpStatus WINGDIPAPI GdipGetGenericFontFamilySansSerif(GpFontFamily **nativeFamil return GdipCreateFontFamilyFromName(MSSansSerif, NULL, nativeFamily); } + +/***************************************************************************** + * GdipGetGenericFontFamilySansSerif [GDIPLUS.@] + */ +GpStatus WINGDIPAPI GdipNewPrivateFontCollection(GpFontCollection** fontCollection) +{ + FIXME("stub %p\n", fontCollection); + + if (!fontCollection) + return InvalidParameter; + + return NotImplemented; +} + +/***************************************************************************** + * GdipDeletePrivateFontCollection [GDIPLUS.@] + */ +GpStatus WINGDIPAPI GdipDeletePrivateFontCollection(GpFontCollection **fontCollection) +{ + FIXME("stub %p\n", fontCollection); + + if (!fontCollection) + return InvalidParameter; + + return NotImplemented; +} + +/***************************************************************************** + * GdipPrivateAddFontFile [GDIPLUS.@] + */ +GpStatus WINGDIPAPI GdipPrivateAddFontFile(GpFontCollection* fontCollection, + GDIPCONST WCHAR* filename) +{ + FIXME("stub: %p, %s\n", fontCollection, debugstr_w(filename)); + + if (!(fontCollection && filename)) + return InvalidParameter; + + return NotImplemented; +} + +/***************************************************************************** + * GdipGetFontCollectionFamilyCount [GDIPLUS.@] + */ +GpStatus WINGDIPAPI GdipGetFontCollectionFamilyCount( + GpFontCollection* fontCollection, INT* numFound) +{ + FIXME("stub: %p, %p\n", fontCollection, numFound); + + if (!(fontCollection && numFound)) + return InvalidParameter; + + return NotImplemented; +} + +/***************************************************************************** + * GdipGetFontCollectionFamilyList [GDIPLUS.@] + */ +GpStatus WINGDIPAPI GdipGetFontCollectionFamilyList( + GpFontCollection* fontCollection, INT numSought, + GpFontFamily* gpfamilies[], INT* numFound) +{ + FIXME("stub: %p, %d, %p, %p\n", fontCollection, numSought, gpfamilies, + numFound); + + if (!(fontCollection && gpfamilies && numFound)) + return InvalidParameter; + + return NotImplemented; +} diff --git a/reactos/dll/win32/gdiplus/gdiplus.c b/reactos/dll/win32/gdiplus/gdiplus.c index f897eb53e6d..2b50f2c501d 100644 --- a/reactos/dll/win32/gdiplus/gdiplus.c +++ b/reactos/dll/win32/gdiplus/gdiplus.c @@ -285,3 +285,29 @@ REAL convert_unit(HDC hdc, GpUnit unit) return 1.0; } } + +/* Calculates Bezier points from cardinal spline points. */ +void calc_curve_bezier(CONST GpPointF *pts, REAL tension, REAL *x1, + REAL *y1, REAL *x2, REAL *y2) +{ + REAL xdiff, ydiff; + + /* calculate tangent */ + xdiff = pts[2].X - pts[0].X; + ydiff = pts[2].Y - pts[0].Y; + + /* apply tangent to get control points */ + *x1 = pts[1].X - tension * xdiff; + *y1 = pts[1].Y - tension * ydiff; + *x2 = pts[1].X + tension * xdiff; + *y2 = pts[1].Y + tension * ydiff; +} + +/* Calculates Bezier points from cardinal spline endpoints. */ +void calc_curve_bezier_endp(REAL xend, REAL yend, REAL xadj, REAL yadj, + REAL tension, REAL *x, REAL *y) +{ + /* tangent at endpoints is the line from the endpoint to the adjacent point */ + *x = roundr(tension * (xadj - xend) + xend); + *y = roundr(tension * (yadj - yend) + yend); +} diff --git a/reactos/dll/win32/gdiplus/gdiplus.spec b/reactos/dll/win32/gdiplus/gdiplus.spec index 9492065fc8e..18e7eeb3ac5 100644 --- a/reactos/dll/win32/gdiplus/gdiplus.spec +++ b/reactos/dll/win32/gdiplus/gdiplus.spec @@ -4,16 +4,16 @@ @ stdcall GdipAddPathBezierI(ptr long long long long long long long long) @ stdcall GdipAddPathBeziers(ptr ptr long) @ stdcall GdipAddPathBeziersI(ptr ptr long) -@ stub GdipAddPathClosedCurve2 -@ stub GdipAddPathClosedCurve2I -@ stub GdipAddPathClosedCurve -@ stub GdipAddPathClosedCurveI -@ stub GdipAddPathCurve2 -@ stub GdipAddPathCurve2I +@ stdcall GdipAddPathClosedCurve2(ptr ptr long long) +@ stdcall GdipAddPathClosedCurve2I(ptr ptr long long) +@ stdcall GdipAddPathClosedCurve(ptr ptr long) +@ stdcall GdipAddPathClosedCurveI(ptr ptr long) +@ stdcall GdipAddPathCurve2(ptr ptr long long) +@ stdcall GdipAddPathCurve2I(ptr ptr long long) @ stub GdipAddPathCurve3 @ stub GdipAddPathCurve3I -@ stub GdipAddPathCurve -@ stub GdipAddPathCurveI +@ stdcall GdipAddPathCurve(ptr ptr long) +@ stdcall GdipAddPathCurveI(ptr ptr long) @ stdcall GdipAddPathEllipse(ptr long long long long) @ stdcall GdipAddPathEllipseI(ptr long long long long) @ stdcall GdipAddPathLine2(ptr ptr long) @@ -51,7 +51,7 @@ @ stdcall GdipCloneBrush(ptr ptr) @ stdcall GdipCloneCustomLineCap(ptr ptr) @ stdcall GdipCloneFont(ptr ptr) -@ stub GdipCloneFontFamily +@ stdcall GdipCloneFontFamily(ptr ptr) @ stdcall GdipCloneImage(ptr ptr) @ stdcall GdipCloneImageAttributes(ptr ptr) @ stdcall GdipCloneMatrix(ptr ptr) @@ -73,11 +73,11 @@ @ stub GdipCreateBitmapFromDirectDrawSurface @ stdcall GdipCreateBitmapFromFile(wstr ptr) @ stdcall GdipCreateBitmapFromFileICM(wstr ptr) -@ stub GdipCreateBitmapFromGdiDib +@ stdcall GdipCreateBitmapFromGdiDib(ptr ptr ptr) @ stdcall GdipCreateBitmapFromGraphics(long long ptr ptr) -@ stdcall GdipCreateBitmapFromHBITMAP(ptr ptr ptr) +@ stdcall GdipCreateBitmapFromHBITMAP(long long ptr) @ stub GdipCreateBitmapFromHICON -@ stub GdipCreateBitmapFromResource +@ stdcall GdipCreateBitmapFromResource(long wstr ptr) @ stdcall GdipCreateBitmapFromScan0(long long long long ptr ptr) @ stdcall GdipCreateBitmapFromStream(ptr ptr) @ stdcall GdipCreateBitmapFromStreamICM(ptr ptr) @@ -101,8 +101,8 @@ @ stdcall GdipCreateLineBrush(ptr ptr long long long ptr) @ stdcall GdipCreateLineBrushFromRect(ptr long long long long ptr) @ stdcall GdipCreateLineBrushFromRectI(ptr long long long long ptr) -@ stub GdipCreateLineBrushFromRectWithAngle -@ stub GdipCreateLineBrushFromRectWithAngleI +@ stdcall GdipCreateLineBrushFromRectWithAngle(ptr long long long long long ptr) +@ stdcall GdipCreateLineBrushFromRectWithAngleI(ptr long long long long long ptr) @ stdcall GdipCreateLineBrushI(ptr ptr long long long ptr) @ stdcall GdipCreateMatrix2(long long long long long long ptr) @ stdcall GdipCreateMatrix3(ptr ptr ptr) @@ -112,7 +112,7 @@ @ stub GdipCreateMetafileFromFile @ stub GdipCreateMetafileFromStream @ stdcall GdipCreateMetafileFromWmf(ptr long ptr ptr) -@ stub GdipCreateMetafileFromWmfFile +@ stdcall GdipCreateMetafileFromWmfFile(wstr ptr ptr) @ stdcall GdipCreatePath2(ptr ptr long long ptr) @ stdcall GdipCreatePath2I(ptr ptr long long ptr) @ stdcall GdipCreatePath(long ptr) @@ -147,7 +147,7 @@ @ stdcall GdipDeletePath(ptr) @ stdcall GdipDeletePathIter(ptr) @ stdcall GdipDeletePen(ptr) -@ stub GdipDeletePrivateFontCollection +@ stdcall GdipDeletePrivateFontCollection(ptr) @ stdcall GdipDeleteRegion(ptr) @ stdcall GdipDeleteStringFormat(ptr) @ stdcall GdipDisposeImage(ptr) @@ -159,10 +159,10 @@ @ stdcall GdipDrawBeziers(ptr ptr ptr long) @ stdcall GdipDrawBeziersI(ptr ptr ptr long) @ stub GdipDrawCachedBitmap -@ stub GdipDrawClosedCurve2 -@ stub GdipDrawClosedCurve2I -@ stub GdipDrawClosedCurve -@ stub GdipDrawClosedCurveI +@ stdcall GdipDrawClosedCurve2(ptr ptr ptr long long) +@ stdcall GdipDrawClosedCurve2I(ptr ptr ptr long long) +@ stdcall GdipDrawClosedCurve(ptr ptr ptr long) +@ stdcall GdipDrawClosedCurveI(ptr ptr ptr long) @ stdcall GdipDrawCurve2(ptr ptr ptr long long) @ stdcall GdipDrawCurve2I(ptr ptr ptr long long) @ stub GdipDrawCurve3 @@ -222,15 +222,15 @@ @ stdcall GdipFillPath(ptr ptr ptr) @ stdcall GdipFillPie(ptr ptr long long long long long long) @ stdcall GdipFillPieI(ptr ptr long long long long long long) -@ stub GdipFillPolygon2 -@ stub GdipFillPolygon2I +@ stdcall GdipFillPolygon2(ptr ptr ptr long) +@ stdcall GdipFillPolygon2I(ptr ptr ptr long) @ stdcall GdipFillPolygon(ptr ptr ptr long long) @ stdcall GdipFillPolygonI(ptr ptr ptr long long) @ stdcall GdipFillRectangle(ptr ptr long long long long) @ stdcall GdipFillRectangleI(ptr ptr long long long long) @ stdcall GdipFillRectangles(ptr ptr ptr long) @ stdcall GdipFillRectanglesI(ptr ptr ptr long) -@ stub GdipFillRegion +@ stdcall GdipFillRegion(ptr ptr ptr) @ stdcall GdipFindFirstImageItem(ptr ptr) @ stub GdipFindNextImageItem @ stub GdipFlattenPath @@ -242,8 +242,8 @@ @ stub GdipGetAdjustableArrowCapWidth @ stub GdipGetAllPropertyItems @ stdcall GdipGetBrushType(ptr ptr) -@ stub GdipGetCellAscent -@ stub GdipGetCellDescent +@ stdcall GdipGetCellAscent(ptr long ptr) +@ stdcall GdipGetCellDescent(ptr long ptr) @ stdcall GdipGetClip(ptr ptr) @ stub GdipGetClipBounds @ stub GdipGetClipBoundsI @@ -252,23 +252,23 @@ @ stdcall GdipGetCustomLineCapBaseCap(ptr ptr) @ stdcall GdipGetCustomLineCapBaseInset(ptr ptr) @ stub GdipGetCustomLineCapStrokeCaps -@ stub GdipGetCustomLineCapStrokeJoin +@ stdcall GdipGetCustomLineCapStrokeJoin(ptr ptr) @ stub GdipGetCustomLineCapType -@ stub GdipGetCustomLineCapWidthScale +@ stdcall GdipGetCustomLineCapWidthScale(ptr ptr) @ stdcall GdipGetDC(ptr ptr) @ stdcall GdipGetDpiX(ptr ptr) @ stdcall GdipGetDpiY(ptr ptr) @ stub GdipGetEffectParameterSize @ stub GdipGetEffectParameters -@ stub GdipGetEmHeight +@ stdcall GdipGetEmHeight(ptr long ptr) @ stub GdipGetEncoderParameterList @ stub GdipGetEncoderParameterListSize @ stub GdipGetFamily @ stdcall GdipGetFamilyName(ptr ptr long) -@ stub GdipGetFontCollectionFamilyCount -@ stub GdipGetFontCollectionFamilyList +@ stdcall GdipGetFontCollectionFamilyCount(ptr ptr) +@ stdcall GdipGetFontCollectionFamilyList(ptr long ptr ptr) @ stub GdipGetFontHeight -@ stub GdipGetFontHeightGivenDPI +@ stdcall GdipGetFontHeightGivenDPI(ptr long ptr) @ stdcall GdipGetFontSize(ptr ptr) @ stub GdipGetFontStyle @ stdcall GdipGetFontUnit(ptr ptr) @@ -308,9 +308,9 @@ @ stub GdipGetLinePresetBlendCount @ stdcall GdipGetLineRect(ptr ptr) @ stdcall GdipGetLineRectI(ptr ptr) -@ stub GdipGetLineSpacing +@ stdcall GdipGetLineSpacing(ptr long ptr) @ stub GdipGetLineTransform -@ stub GdipGetLineWrapMode +@ stdcall GdipGetLineWrapMode(ptr ptr) @ stub GdipGetLogFontA @ stdcall GdipGetLogFontW(ptr ptr ptr) @ stdcall GdipGetMatrixElements(ptr ptr) @@ -325,8 +325,8 @@ @ stdcall GdipGetPageUnit(ptr ptr) @ stdcall GdipGetPathData(ptr ptr) @ stdcall GdipGetPathFillMode(ptr ptr) -@ stub GdipGetPathGradientBlend -@ stub GdipGetPathGradientBlendCount +@ stdcall GdipGetPathGradientBlend(ptr ptr ptr long) +@ stdcall GdipGetPathGradientBlendCount(ptr ptr) @ stub GdipGetPathGradientCenterColor @ stdcall GdipGetPathGradientCenterPoint(ptr ptr) @ stdcall GdipGetPathGradientCenterPointI(ptr ptr) @@ -336,8 +336,8 @@ @ stdcall GdipGetPathGradientPointCount(ptr ptr) @ stub GdipGetPathGradientPresetBlend @ stub GdipGetPathGradientPresetBlendCount -@ stub GdipGetPathGradientRect -@ stub GdipGetPathGradientRectI +@ stdcall GdipGetPathGradientRect(ptr ptr) +@ stdcall GdipGetPathGradientRectI(ptr ptr) @ stub GdipGetPathGradientSurroundColorCount @ stdcall GdipGetPathGradientSurroundColorsWithCount(ptr ptr ptr) @ stub GdipGetPathGradientTransform @@ -352,18 +352,18 @@ @ stdcall GdipGetPenColor(ptr ptr) @ stub GdipGetPenCompoundArray @ stub GdipGetPenCompoundCount -@ stub GdipGetPenCustomEndCap -@ stub GdipGetPenCustomStartCap +@ stdcall GdipGetPenCustomEndCap(ptr ptr) +@ stdcall GdipGetPenCustomStartCap(ptr ptr) @ stdcall GdipGetPenDashArray(ptr ptr long) @ stdcall GdipGetPenDashCap197819(ptr ptr) -@ stub GdipGetPenDashCount +@ stdcall GdipGetPenDashCount(ptr ptr) @ stdcall GdipGetPenDashOffset(ptr ptr) @ stdcall GdipGetPenDashStyle(ptr ptr) @ stdcall GdipGetPenEndCap(ptr ptr) @ stub GdipGetPenFillType @ stdcall GdipGetPenLineJoin(ptr ptr) @ stdcall GdipGetPenMiterLimit(ptr ptr) -@ stub GdipGetPenMode +@ stdcall GdipGetPenMode(ptr ptr) @ stdcall GdipGetPenStartCap(ptr ptr) @ stub GdipGetPenTransform @ stdcall GdipGetPenUnit(ptr ptr) @@ -387,13 +387,13 @@ @ stdcall GdipGetSmoothingMode(ptr ptr) @ stdcall GdipGetSolidFillColor(ptr ptr) @ stdcall GdipGetStringFormatAlign(ptr ptr) -@ stub GdipGetStringFormatDigitSubstitution -@ stub GdipGetStringFormatFlags +@ stdcall GdipGetStringFormatDigitSubstitution(ptr ptr ptr) +@ stdcall GdipGetStringFormatFlags(ptr ptr) @ stdcall GdipGetStringFormatHotkeyPrefix(ptr ptr) @ stdcall GdipGetStringFormatLineAlign(ptr ptr) -@ stub GdipGetStringFormatMeasurableCharacterRangeCount -@ stub GdipGetStringFormatTabStopCount -@ stub GdipGetStringFormatTabStops +@ stdcall GdipGetStringFormatMeasurableCharacterRangeCount(ptr ptr) +@ stdcall GdipGetStringFormatTabStopCount(ptr ptr) +@ stdcall GdipGetStringFormatTabStops(ptr long ptr ptr) @ stdcall GdipGetStringFormatTrimming(ptr ptr) @ stub GdipGetTextContrast @ stdcall GdipGetTextRenderingHint(ptr ptr) @@ -413,20 +413,20 @@ @ stdcall GdipImageSelectActiveFrame(ptr ptr long) @ stub GdipImageSetAbort @ stub GdipInitializePalette -@ stub GdipInvertMatrix +@ stdcall GdipInvertMatrix(ptr) @ stub GdipIsClipEmpty @ stdcall GdipIsEmptyRegion(ptr ptr ptr) @ stdcall GdipIsEqualRegion(ptr ptr ptr ptr) @ stdcall GdipIsInfiniteRegion(ptr ptr ptr) @ stdcall GdipIsMatrixEqual(ptr ptr ptr) @ stdcall GdipIsMatrixIdentity(ptr ptr) -@ stub GdipIsMatrixInvertible -@ stub GdipIsOutlineVisiblePathPoint +@ stdcall GdipIsMatrixInvertible(ptr ptr) +@ stdcall GdipIsOutlineVisiblePathPoint(ptr long long ptr ptr ptr) @ stdcall GdipIsOutlineVisiblePathPointI(ptr long long ptr ptr ptr) -@ stub GdipIsStyleAvailable +@ stdcall GdipIsStyleAvailable(ptr long ptr) @ stub GdipIsVisibleClipEmpty -@ stub GdipIsVisiblePathPoint -@ stub GdipIsVisiblePathPointI +@ stdcall GdipIsVisiblePathPoint(ptr long long ptr ptr) +@ stdcall GdipIsVisiblePathPointI(ptr long long ptr ptr) @ stub GdipIsVisiblePoint @ stub GdipIsVisiblePointI @ stub GdipIsVisibleRect @@ -439,9 +439,9 @@ @ stdcall GdipLoadImageFromFileICM(wstr ptr) @ stdcall GdipLoadImageFromStream(ptr ptr) @ stdcall GdipLoadImageFromStreamICM(ptr ptr) -@ stub GdipMeasureCharacterRanges +@ stdcall GdipMeasureCharacterRanges(ptr wstr long ptr ptr ptr long ptr) @ stub GdipMeasureDriverString -@ stdcall GdipMeasureString(ptr ptr long ptr ptr ptr ptr ptr ptr) +@ stdcall GdipMeasureString(ptr wstr long ptr ptr ptr ptr ptr ptr) @ stub GdipMultiplyLineTransform @ stdcall GdipMultiplyMatrix(ptr ptr long) @ stub GdipMultiplyPathGradientTransform @@ -449,14 +449,14 @@ @ stub GdipMultiplyTextureTransform @ stdcall GdipMultiplyWorldTransform(ptr ptr long) @ stub GdipNewInstalledFontCollection -@ stub GdipNewPrivateFontCollection +@ stdcall GdipNewPrivateFontCollection(ptr) @ stdcall GdipPathIterCopyData(ptr ptr ptr ptr long long) @ stdcall GdipPathIterEnumerate(ptr ptr ptr ptr long) @ stdcall GdipPathIterGetCount(ptr ptr) -@ stub GdipPathIterGetSubpathCount +@ stdcall GdipPathIterGetSubpathCount(ptr ptr) @ stdcall GdipPathIterHasCurve(ptr ptr) @ stub GdipPathIterIsValid -@ stub GdipPathIterNextMarker +@ stdcall GdipPathIterNextMarker(ptr ptr ptr ptr) @ stub GdipPathIterNextMarkerPath @ stub GdipPathIterNextPathType @ stdcall GdipPathIterNextSubpath(ptr ptr ptr ptr ptr) @@ -464,7 +464,7 @@ @ stdcall GdipPathIterRewind(ptr) @ stub GdipPlayMetafileRecord @ stub GdipPlayTSClientRecord -@ stub GdipPrivateAddFontFile +@ stdcall GdipPrivateAddFontFile(ptr wstr) @ stub GdipPrivateAddMemoryFont @ stub GdipRecordMetafile @ stub GdipRecordMetafileFileName @@ -568,7 +568,7 @@ @ stdcall GdipSetPenCustomEndCap(ptr ptr) @ stdcall GdipSetPenCustomStartCap(ptr ptr) @ stdcall GdipSetPenDashArray(ptr ptr long) -@ stub GdipSetPenDashCap197819 +@ stdcall GdipSetPenDashCap197819(ptr long) @ stdcall GdipSetPenDashOffset(ptr long) @ stdcall GdipSetPenDashStyle(ptr long) @ stdcall GdipSetPenEndCap(ptr long) @@ -586,28 +586,28 @@ @ stdcall GdipSetSmoothingMode(ptr long) @ stdcall GdipSetSolidFillColor(ptr ptr) @ stdcall GdipSetStringFormatAlign(ptr long) -@ stub GdipSetStringFormatDigitSubstitution +@ stdcall GdipSetStringFormatDigitSubstitution(ptr long long) @ stdcall GdipSetStringFormatFlags(ptr long) @ stdcall GdipSetStringFormatHotkeyPrefix(ptr long) @ stdcall GdipSetStringFormatLineAlign(ptr long) -@ stub GdipSetStringFormatMeasurableCharacterRanges -@ stub GdipSetStringFormatTabStops +@ stdcall GdipSetStringFormatMeasurableCharacterRanges(ptr long ptr) +@ stdcall GdipSetStringFormatTabStops(ptr long long ptr) @ stdcall GdipSetStringFormatTrimming(ptr long) @ stub GdipSetTextContrast @ stdcall GdipSetTextRenderingHint(ptr long) @ stdcall GdipSetTextureTransform(ptr ptr) @ stub GdipSetTextureWrapMode @ stdcall GdipSetWorldTransform(ptr ptr) -@ stub GdipShearMatrix +@ stdcall GdipShearMatrix(ptr long long long) @ stdcall GdipStartPathFigure(ptr) -@ stub GdipStringFormatGetGenericDefault -@ stub GdipStringFormatGetGenericTypographic +@ stdcall GdipStringFormatGetGenericDefault(ptr) +@ stdcall GdipStringFormatGetGenericTypographic(ptr) @ stub GdipTestControl @ stdcall GdipTransformMatrixPoints(ptr ptr long) @ stdcall GdipTransformMatrixPointsI(ptr ptr long) @ stdcall GdipTransformPath(ptr ptr) -@ stub GdipTransformPoints -@ stub GdipTransformPointsI +@ stdcall GdipTransformPoints(ptr long long ptr long) +@ stdcall GdipTransformPointsI(ptr long long ptr long) @ stdcall GdipTransformRegion(ptr ptr) @ stub GdipTranslateClip @ stub GdipTranslateClipI diff --git a/reactos/dll/win32/gdiplus/gdiplus_private.h b/reactos/dll/win32/gdiplus/gdiplus_private.h index ed763752575..80fc5a6f0ce 100644 --- a/reactos/dll/win32/gdiplus/gdiplus_private.h +++ b/reactos/dll/win32/gdiplus/gdiplus_private.h @@ -37,6 +37,9 @@ #define MAX_DASHLEN (16) /* this is a limitation of gdi */ #define INCH_HIMETRIC (2540) +#define VERSION_MAGIC 0xdbc01001 +#define TENSION_CONST (0.3) + COLORREF ARGB2COLORREF(ARGB color); extern INT arc2polybezier(GpPointF * points, REAL x1, REAL y1, REAL x2, REAL y2, REAL startAngle, REAL sweepAngle); @@ -44,6 +47,11 @@ extern REAL gdiplus_atan2(REAL dy, REAL dx); extern GpStatus hresult_to_status(HRESULT res); extern REAL convert_unit(HDC hdc, GpUnit unit); +extern void calc_curve_bezier(CONST GpPointF *pts, REAL tension, REAL *x1, + REAL *y1, REAL *x2, REAL *y2); +extern void calc_curve_bezier_endp(REAL xend, REAL yend, REAL xadj, REAL yadj, + REAL tension, REAL *x, REAL *y); + static inline INT roundr(REAL x) { return (INT) floor(x + 0.5); @@ -70,6 +78,7 @@ struct GpPen{ INT numdashes; REAL offset; /* dash offset */ GpBrush *brush; + GpPenAlignment align; }; struct GpGraphics{ @@ -105,6 +114,9 @@ struct GpPathGradient{ BOOL gamma; GpPointF center; GpPointF focus; + REAL* blendfac; /* blend factors */ + REAL* blendpos; /* blend positions */ + INT blendcount; }; struct GpLineGradient{ @@ -144,6 +156,8 @@ struct GpCustomLineCap{ BOOL fill; /* TRUE for fill, FALSE for stroke */ GpLineCap cap; /* as far as I can tell, this value is ignored */ REAL inset; /* how much to adjust the end of the line */ + GpLineJoin join; + REAL scale; }; struct GpImage{ @@ -181,10 +195,15 @@ struct GpFont{ struct GpStringFormat{ INT attr; LANGID lang; + LANGID digitlang; StringAlignment align; StringTrimming trimming; HotkeyPrefix hkprefix; StringAlignment vertalign; + StringDigitSubstitute digitsub; + INT tabcount; + REAL firsttab; + REAL *tabs; }; struct GpFontCollection{ @@ -192,8 +211,44 @@ struct GpFontCollection{ }; struct GpFontFamily{ - TEXTMETRICW tmw; - WCHAR* FamilyName; + NEWTEXTMETRICW tmw; + WCHAR FamilyName[LF_FACESIZE]; +}; + +typedef struct region_element +{ + DWORD type; /* Rectangle, Path, SpecialRectangle, or CombineMode */ + union + { + GpRectF rect; + struct + { + GpPath* path; + struct + { + DWORD size; + DWORD magic; + DWORD count; + DWORD flags; + } pathheader; + } pathdata; + struct + { + struct region_element *left; /* the original region */ + struct region_element *right; /* what *left was combined with */ + } combine; + } elementdata; +} region_element; + +struct GpRegion{ + struct + { + DWORD size; + DWORD checksum; + DWORD magic; + DWORD num_children; + } header; + region_element node; }; #endif diff --git a/reactos/dll/win32/gdiplus/graphics.c b/reactos/dll/win32/gdiplus/graphics.c index 81faee2414a..af8331c7c4f 100644 --- a/reactos/dll/win32/gdiplus/graphics.c +++ b/reactos/dll/win32/gdiplus/graphics.c @@ -42,7 +42,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(gdiplus); /* looks-right constants */ -#define TENSION_CONST (0.3) #define ANCHOR_WIDTH (2.0) #define MAX_ITERS (50) @@ -194,34 +193,6 @@ static void draw_pie(GpGraphics *graphics, REAL x, REAL y, REAL width, pti[2].y, pti[3].x, pti[3].y); } -/* GdipDrawCurve helper function. - * Calculates Bezier points from cardinal spline points. */ -static void calc_curve_bezier(CONST GpPointF *pts, REAL tension, REAL *x1, - REAL *y1, REAL *x2, REAL *y2) -{ - REAL xdiff, ydiff; - - /* calculate tangent */ - xdiff = pts[2].X - pts[0].X; - ydiff = pts[2].Y - pts[0].Y; - - /* apply tangent to get control points */ - *x1 = pts[1].X - tension * xdiff; - *y1 = pts[1].Y - tension * ydiff; - *x2 = pts[1].X + tension * xdiff; - *y2 = pts[1].Y + tension * ydiff; -} - -/* GdipDrawCurve helper function. - * Calculates Bezier points from cardinal spline endpoints. */ -static void calc_curve_bezier_endp(REAL xend, REAL yend, REAL xadj, REAL yadj, - REAL tension, REAL *x, REAL *y) -{ - /* tangent at endpoints is the line from the endpoint to the adjacent point */ - *x = roundr(tension * (xadj - xend) + xend); - *y = roundr(tension * (yadj - yend) + yend); -} - /* Draws the linecap the specified color and size on the hdc. The linecap is in * direction of the line from x1, y1 to x2, y2 and is anchored on x2, y2. Probably * should not be called on an hdc that has a path you care about. */ @@ -881,6 +852,18 @@ err: return retval; } +GpStatus WINGDIPAPI GdipCreateMetafileFromWmfFile(GDIPCONST WCHAR *file, + GDIPCONST WmfPlaceableFileHeader * placeable, GpMetafile **metafile) +{ + HMETAFILE hmf = GetMetaFileW(file); + + TRACE("(%s, %p, %p)\n", debugstr_w(file), placeable, metafile); + + if(!hmf) return InvalidParameter; + + return GdipCreateMetafileFromWmf(hmf, TRUE, placeable, metafile); +} + GpStatus WINGDIPAPI GdipCreateStreamOnFile(GDIPCONST WCHAR * filename, UINT access, IStream **stream) { @@ -1045,6 +1028,69 @@ GpStatus WINGDIPAPI GdipDrawBeziersI(GpGraphics *graphics, GpPen *pen, return ret; } +GpStatus WINGDIPAPI GdipDrawClosedCurve(GpGraphics *graphics, GpPen *pen, + GDIPCONST GpPointF *points, INT count) +{ + return GdipDrawClosedCurve2(graphics, pen, points, count, 1.0); +} + +GpStatus WINGDIPAPI GdipDrawClosedCurveI(GpGraphics *graphics, GpPen *pen, + GDIPCONST GpPoint *points, INT count) +{ + return GdipDrawClosedCurve2I(graphics, pen, points, count, 1.0); +} + +GpStatus WINGDIPAPI GdipDrawClosedCurve2(GpGraphics *graphics, GpPen *pen, + GDIPCONST GpPointF *points, INT count, REAL tension) +{ + GpPointF *ptf; + GpStatus stat; + + if(!graphics || !pen || !points || count <= 0) + return InvalidParameter; + + /* make a full points copy.. */ + ptf = GdipAlloc(sizeof(GpPointF)*(count+1)); + if(!ptf) + return OutOfMemory; + memcpy(ptf, points, sizeof(GpPointF)*count); + + /* ..and add a first point as a last one */ + ptf[count] = ptf[0]; + + stat = GdipDrawCurve2(graphics, pen, ptf, count + 1, tension); + + GdipFree(ptf); + + return stat; +} + +GpStatus WINGDIPAPI GdipDrawClosedCurve2I(GpGraphics *graphics, GpPen *pen, + GDIPCONST GpPoint *points, INT count, REAL tension) +{ + GpPointF *ptf; + GpStatus stat; + INT i; + + if(!points || count <= 0) + return InvalidParameter; + + ptf = GdipAlloc(sizeof(GpPointF)*count); + if(!ptf) + return OutOfMemory; + + for(i = 0; i < count; i++){ + ptf[i].X = (REAL)points[i].X; + ptf[i].Y = (REAL)points[i].Y; + } + + stat = GdipDrawClosedCurve2(graphics, pen, ptf, count, tension); + + GdipFree(ptf); + + return stat; +} + GpStatus WINGDIPAPI GdipDrawCurve(GpGraphics *graphics, GpPen *pen, GDIPCONST GpPointF *points, INT count) { @@ -1929,6 +1975,18 @@ end: return retval; } +GpStatus WINGDIPAPI GdipFillPolygon2(GpGraphics *graphics, GpBrush *brush, + GDIPCONST GpPointF *points, INT count) +{ + return GdipFillPolygon(graphics, brush, points, count, FillModeAlternate); +} + +GpStatus WINGDIPAPI GdipFillPolygon2I(GpGraphics *graphics, GpBrush *brush, + GDIPCONST GpPoint *points, INT count) +{ + return GdipFillPolygonI(graphics, brush, points, count, FillModeAlternate); +} + GpStatus WINGDIPAPI GdipFillRectangle(GpGraphics *graphics, GpBrush *brush, REAL x, REAL y, REAL width, REAL height) { @@ -2039,6 +2097,17 @@ GpStatus WINGDIPAPI GdipFillRectanglesI(GpGraphics *graphics, GpBrush *brush, GD return ret; } +GpStatus WINGDIPAPI GdipFillRegion(GpGraphics* graphics, GpBrush* brush, + GpRegion* region) +{ + if (!(graphics && brush && region)) + return InvalidParameter; + + FIXME("(%p, %p, %p): stub\n", graphics, brush, region); + + return NotImplemented; +} + GpStatus WINGDIPAPI GdipFlush(GpGraphics *graphics, GpFlushIntention intention) { static int calls; @@ -2152,6 +2221,20 @@ GpStatus WINGDIPAPI GdipGetWorldTransform(GpGraphics *graphics, GpMatrix *matrix return Ok; } +GpStatus WINGDIPAPI GdipMeasureCharacterRanges(GpGraphics* graphics, + GDIPCONST WCHAR* string, INT length, GDIPCONST GpFont* font, + GDIPCONST RectF* layoutRect, GDIPCONST GpStringFormat *stringFormat, + INT regionCount, GpRegion** regions) +{ + if (!(graphics && string && font && layoutRect && stringFormat && regions)) + return InvalidParameter; + + FIXME("stub: %p %s %d %p %p %p %d %p\n", graphics, debugstr_w(string), + length, font, layoutRect, stringFormat, regionCount, regions); + + return NotImplemented; +} + /* Find the smallest rectangle that bounds the text when it is printed in rect * according to the format options listed in format. If rect has 0 width and * height, then just find the smallest rectangle that bounds the text when it's @@ -2544,3 +2627,19 @@ GpStatus WINGDIPAPI GdipGetClip(GpGraphics *graphics, GpRegion *region) return NotImplemented; } + +GpStatus WINGDIPAPI GdipTransformPoints(GpGraphics *graphics, GpCoordinateSpace dst_space, + GpCoordinateSpace src_space, GpPointF *points, INT count) +{ + FIXME("(%p, %d, %d, %p, %d): stub\n", graphics, dst_space, src_space, points, count); + + return NotImplemented; +} + +GpStatus WINGDIPAPI GdipTransformPointsI(GpGraphics *graphics, GpCoordinateSpace dst_space, + GpCoordinateSpace src_space, GpPoint *points, INT count) +{ + FIXME("(%p, %d, %d, %p, %d): stub\n", graphics, dst_space, src_space, points, count); + + return NotImplemented; +} diff --git a/reactos/dll/win32/gdiplus/graphicspath.c b/reactos/dll/win32/gdiplus/graphicspath.c index 1022fb45ddd..136afe7bfdb 100644 --- a/reactos/dll/win32/gdiplus/graphicspath.c +++ b/reactos/dll/win32/gdiplus/graphicspath.c @@ -196,6 +196,206 @@ GpStatus WINGDIPAPI GdipAddPathBeziersI(GpPath *path, GDIPCONST GpPoint *points, return ret; } +GpStatus WINGDIPAPI GdipAddPathClosedCurve(GpPath *path, GDIPCONST GpPointF *points, + INT count) +{ + return GdipAddPathClosedCurve2(path, points, count, 1.0); +} + +GpStatus WINGDIPAPI GdipAddPathClosedCurveI(GpPath *path, GDIPCONST GpPoint *points, + INT count) +{ + return GdipAddPathClosedCurve2I(path, points, count, 1.0); +} + +GpStatus WINGDIPAPI GdipAddPathClosedCurve2(GpPath *path, GDIPCONST GpPointF *points, + INT count, REAL tension) +{ + INT i, len_pt = (count + 1)*3-2; + GpPointF *pt; + GpPointF *pts; + REAL x1, x2, y1, y2; + GpStatus stat; + + if(!path || !points || count <= 1) + return InvalidParameter; + + pt = GdipAlloc(len_pt * sizeof(GpPointF)); + pts = GdipAlloc((count + 1)*sizeof(GpPointF)); + if(!pt || !pts){ + GdipFree(pt); + GdipFree(pts); + return OutOfMemory; + } + + /* copy source points to extend with the last one */ + memcpy(pts, points, sizeof(GpPointF)*count); + pts[count] = pts[0]; + + tension = tension * TENSION_CONST; + + for(i = 0; i < count-1; i++){ + calc_curve_bezier(&(pts[i]), tension, &x1, &y1, &x2, &y2); + + pt[3*i+2].X = x1; + pt[3*i+2].Y = y1; + pt[3*i+3].X = pts[i+1].X; + pt[3*i+3].Y = pts[i+1].Y; + pt[3*i+4].X = x2; + pt[3*i+4].Y = y2; + } + + /* points [len_pt-2] and [0] are calculated + separetely to connect splines properly */ + pts[0] = points[count-1]; + pts[1] = points[0]; /* equals to start and end of a resulting path */ + pts[2] = points[1]; + + calc_curve_bezier(pts, tension, &x1, &y1, &x2, &y2); + pt[len_pt-2].X = x1; + pt[len_pt-2].Y = y1; + pt[0].X = pts[1].X; + pt[0].Y = pts[1].Y; + pt[1].X = x2; + pt[1].Y = y2; + /* close path */ + pt[len_pt-1].X = pt[0].X; + pt[len_pt-1].Y = pt[0].Y; + + stat = GdipAddPathBeziers(path, pt, len_pt); + + /* close figure */ + if(stat == Ok){ + INT count = path->pathdata.Count; + path->pathdata.Types[count - 1] |= PathPointTypeCloseSubpath; + path->newfigure = TRUE; + } + + GdipFree(pts); + GdipFree(pt); + + return stat; +} + +GpStatus WINGDIPAPI GdipAddPathClosedCurve2I(GpPath *path, GDIPCONST GpPoint *points, + INT count, REAL tension) +{ + GpPointF *ptf; + INT i; + GpStatus stat; + + if(!path || !points || count <= 1) + return InvalidParameter; + + ptf = GdipAlloc(sizeof(GpPointF)*count); + if(!ptf) + return OutOfMemory; + + for(i = 0; i < count; i++){ + ptf[i].X = (REAL)points[i].X; + ptf[i].Y = (REAL)points[i].Y; + } + + stat = GdipAddPathClosedCurve2(path, ptf, count, tension); + + GdipFree(ptf); + + return stat; +} + +GpStatus WINGDIPAPI GdipAddPathCurve(GpPath *path, GDIPCONST GpPointF *points, INT count) +{ + if(!path || !points || count <= 1) + return InvalidParameter; + + return GdipAddPathCurve2(path, points, count, 1.0); +} + +GpStatus WINGDIPAPI GdipAddPathCurveI(GpPath *path, GDIPCONST GpPoint *points, INT count) +{ + if(!path || !points || count <= 1) + return InvalidParameter; + + return GdipAddPathCurve2I(path, points, count, 1.0); +} + +GpStatus WINGDIPAPI GdipAddPathCurve2(GpPath *path, GDIPCONST GpPointF *points, INT count, + REAL tension) +{ + INT i, len_pt = count*3-2; + GpPointF *pt; + REAL x1, x2, y1, y2; + GpStatus stat; + + if(!path || !points || count <= 1) + return InvalidParameter; + + pt = GdipAlloc(len_pt * sizeof(GpPointF)); + if(!pt) + return OutOfMemory; + + tension = tension * TENSION_CONST; + + calc_curve_bezier_endp(points[0].X, points[0].Y, points[1].X, points[1].Y, + tension, &x1, &y1); + + pt[0].X = points[0].X; + pt[0].Y = points[0].Y; + pt[1].X = x1; + pt[1].Y = y1; + + for(i = 0; i < count-2; i++){ + calc_curve_bezier(&(points[i]), tension, &x1, &y1, &x2, &y2); + + pt[3*i+2].X = x1; + pt[3*i+2].Y = y1; + pt[3*i+3].X = points[i+1].X; + pt[3*i+3].Y = points[i+1].Y; + pt[3*i+4].X = x2; + pt[3*i+4].Y = y2; + } + + calc_curve_bezier_endp(points[count-1].X, points[count-1].Y, + points[count-2].X, points[count-2].Y, tension, &x1, &y1); + + pt[len_pt-2].X = x1; + pt[len_pt-2].Y = y1; + pt[len_pt-1].X = points[count-1].X; + pt[len_pt-1].Y = points[count-1].Y; + + stat = GdipAddPathBeziers(path, pt, len_pt); + + GdipFree(pt); + + return stat; +} + +GpStatus WINGDIPAPI GdipAddPathCurve2I(GpPath *path, GDIPCONST GpPoint *points, + INT count, REAL tension) +{ + GpPointF *ptf; + INT i; + GpStatus stat; + + if(!path || !points || count <= 1) + return InvalidParameter; + + ptf = GdipAlloc(sizeof(GpPointF)*count); + if(!ptf) + return OutOfMemory; + + for(i = 0; i < count; i++){ + ptf[i].X = (REAL)points[i].X; + ptf[i].Y = (REAL)points[i].Y; + } + + stat = GdipAddPathCurve2(path, ptf, count, tension); + + GdipFree(ptf); + + return stat; +} + GpStatus WINGDIPAPI GdipAddPathEllipse(GpPath *path, REAL x, REAL y, REAL width, REAL height) { @@ -729,6 +929,12 @@ GpStatus WINGDIPAPI GdipGetPointCount(GpPath *path, INT *count) GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPointI(GpPath* path, INT x, INT y, GpPen *pen, GpGraphics *graphics, BOOL *result) +{ + return GdipIsOutlineVisiblePathPoint(path, x, y, pen, graphics, result); +} + +GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPoint(GpPath* path, REAL x, REAL y, + GpPen *pen, GpGraphics *graphics, BOOL *result) { static int calls; @@ -741,6 +947,23 @@ GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPointI(GpPath* path, INT x, INT y, return NotImplemented; } +GpStatus WINGDIPAPI GdipIsVisiblePathPointI(GpPath* path, INT x, INT y, GpGraphics *graphics, BOOL *result) +{ + return GdipIsVisiblePathPoint(path, x, y, graphics, result); +} + +GpStatus WINGDIPAPI GdipIsVisiblePathPoint(GpPath* path, REAL x, REAL y, GpGraphics *graphics, BOOL *result) +{ + static int calls; + + if(!path) return InvalidParameter; + + if(!(calls++)) + FIXME("not implemented\n"); + + return NotImplemented; +} + GpStatus WINGDIPAPI GdipStartPathFigure(GpPath *path) { if(!path) diff --git a/reactos/dll/win32/gdiplus/image.c b/reactos/dll/win32/gdiplus/image.c index bf2ac35b14f..197665d0299 100644 --- a/reactos/dll/win32/gdiplus/image.c +++ b/reactos/dll/win32/gdiplus/image.c @@ -244,7 +244,7 @@ GpStatus WINGDIPAPI GdipCloneImage(GpImage *image, GpImage **cloneImage) { if (!(image && cloneImage)) return InvalidParameter; - FIXME("stub: %p, %p", image, cloneImage); + FIXME("stub: %p, %p\n", image, cloneImage); return NotImplemented; } @@ -270,6 +270,47 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromFile(GDIPCONST WCHAR* filename, return stat; } +GpStatus WINGDIPAPI GdipCreateBitmapFromGdiDib(GDIPCONST BITMAPINFO* info, + VOID *bits, GpBitmap **bitmap) +{ + DWORD height, stride; + PixelFormat format; + + FIXME("(%p, %p, %p) - partially implemented\n", info, bits, bitmap); + + height = abs(info->bmiHeader.biHeight); + stride = ((info->bmiHeader.biWidth * info->bmiHeader.biBitCount + 31) >> 3) & ~3; + + if(info->bmiHeader.biHeight > 0) /* bottom-up */ + { + bits = (BYTE*)bits + (height - 1) * stride; + stride = -stride; + } + + switch(info->bmiHeader.biBitCount) { + case 1: + format = PixelFormat1bppIndexed; + break; + case 4: + format = PixelFormat4bppIndexed; + break; + case 8: + format = PixelFormat8bppIndexed; + break; + case 24: + format = PixelFormat24bppRGB; + break; + default: + FIXME("don't know how to handle %d bpp\n", info->bmiHeader.biBitCount); + *bitmap = NULL; + return InvalidParameter; + } + + return GdipCreateBitmapFromScan0(info->bmiHeader.biWidth, height, stride, format, + bits, bitmap); + +} + /* FIXME: no icm */ GpStatus WINGDIPAPI GdipCreateBitmapFromFileICM(GDIPCONST WCHAR* filename, GpBitmap **bitmap) @@ -277,6 +318,26 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromFileICM(GDIPCONST WCHAR* filename, return GdipCreateBitmapFromFile(filename, bitmap); } +GpStatus WINGDIPAPI GdipCreateBitmapFromResource(HINSTANCE hInstance, + GDIPCONST WCHAR* lpBitmapName, GpBitmap** bitmap) +{ + HBITMAP hbm; + GpStatus stat = InvalidParameter; + + if(!lpBitmapName || !bitmap) + return InvalidParameter; + + /* load DIB */ + hbm = (HBITMAP)LoadImageW(hInstance,lpBitmapName,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION); + + if(hbm){ + stat = GdipCreateBitmapFromHBITMAP(hbm, NULL, bitmap); + DeleteObject(hbm); + } + + return stat; +} + GpStatus WINGDIPAPI GdipCreateHBITMAPFromBitmap(GpBitmap* bitmap, HBITMAP* hbmReturn, ARGB background) { @@ -942,6 +1003,9 @@ static encode_image_func *const encode_image_funcs[NUM_ENCODERS_SUPPORTED] = { encode_image_BMP, }; +/***************************************************************************** + * GdipSaveImageToStream [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipSaveImageToStream(GpImage *image, IStream* stream, GDIPCONST CLSID* clsid, GDIPCONST EncoderParameters* params) { @@ -1024,6 +1088,9 @@ GpStatus WINGDIPAPI GdipSaveImageToStream(GpImage *image, IStream* stream, return stat; } +/***************************************************************************** + * GdipSetImagePalette [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipSetImagePalette(GpImage *image, GDIPCONST ColorPalette *palette) { @@ -1070,6 +1137,9 @@ static const ImageCodecInfo codecs[NUM_ENCODERS_SUPPORTED] = }, }; +/***************************************************************************** + * GdipGetImageEncodersSize [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipGetImageEncodersSize(UINT *numEncoders, UINT *size) { if (!numEncoders || !size) @@ -1081,6 +1151,9 @@ GpStatus WINGDIPAPI GdipGetImageEncodersSize(UINT *numEncoders, UINT *size) return Ok; } +/***************************************************************************** + * GdipGetImageEncoders [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipGetImageEncoders(UINT numEncoders, UINT size, ImageCodecInfo *encoders) { if (!encoders || @@ -1092,6 +1165,10 @@ GpStatus WINGDIPAPI GdipGetImageEncoders(UINT numEncoders, UINT size, ImageCodec return Ok; } + +/***************************************************************************** + * GdipCreateBitmapFromHBITMAP [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP hbm, HPALETTE hpal, GpBitmap** bitmap) { BITMAP bm; @@ -1138,6 +1215,9 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP hbm, HPALETTE hpal, GpBi return retval; } +/***************************************************************************** + * GdipSetEffectParameters [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipSetEffectParameters(CGpEffect *effect, const VOID *params, const UINT size) { @@ -1149,6 +1229,9 @@ GpStatus WINGDIPAPI GdipSetEffectParameters(CGpEffect *effect, return NotImplemented; } +/***************************************************************************** + * GdipGetImageFlags [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipGetImageFlags(GpImage *image, UINT *flags) { if(!image || !flags) diff --git a/reactos/dll/win32/gdiplus/matrix.c b/reactos/dll/win32/gdiplus/matrix.c index eb8388454f0..a29508db8b0 100644 --- a/reactos/dll/win32/gdiplus/matrix.c +++ b/reactos/dll/win32/gdiplus/matrix.c @@ -50,6 +50,11 @@ static void matrix_multiply(GDIPCONST REAL * left, GDIPCONST REAL * right, REAL memcpy(out, temp, 6 * sizeof(REAL)); } +static REAL matrix_det(GDIPCONST GpMatrix *matrix) +{ + return matrix->matrix[0]*matrix->matrix[3] - matrix->matrix[1]*matrix->matrix[2]; +} + GpStatus WINGDIPAPI GdipCreateMatrix2(REAL m11, REAL m12, REAL m21, REAL m22, REAL dx, REAL dy, GpMatrix **matrix) { @@ -158,6 +163,43 @@ GpStatus WINGDIPAPI GdipGetMatrixElements(GDIPCONST GpMatrix *matrix, return Ok; } +GpStatus WINGDIPAPI GdipInvertMatrix(GpMatrix *matrix) +{ + GpMatrix copy; + REAL det; + BOOL invertible; + + if(!matrix) + return InvalidParameter; + + GdipIsMatrixInvertible(matrix, &invertible); + if(!invertible) + return InvalidParameter; + + det = matrix_det(matrix); + + copy = *matrix; + /* store result */ + matrix->matrix[0] = copy.matrix[3] / det; + matrix->matrix[1] = -copy.matrix[1] / det; + matrix->matrix[2] = -copy.matrix[2] / det; + matrix->matrix[3] = copy.matrix[0] / det; + matrix->matrix[4] = (copy.matrix[2]*copy.matrix[5]-copy.matrix[3]*copy.matrix[4]) / det; + matrix->matrix[5] = -(copy.matrix[0]*copy.matrix[5]-copy.matrix[1]*copy.matrix[4]) / det; + + return Ok; +} + +GpStatus WINGDIPAPI GdipIsMatrixInvertible(GDIPCONST GpMatrix *matrix, BOOL *result) +{ + if(!matrix || !result) + return InvalidParameter; + + *result = (fabs(matrix_det(matrix)) >= 1e-5); + + return Ok; +} + GpStatus WINGDIPAPI GdipMultiplyMatrix(GpMatrix *matrix, GpMatrix* matrix2, GpMatrixOrder order) { @@ -238,6 +280,30 @@ GpStatus WINGDIPAPI GdipSetMatrixElements(GpMatrix *matrix, REAL m11, REAL m12, return Ok; } +GpStatus WINGDIPAPI GdipShearMatrix(GpMatrix *matrix, REAL shearX, REAL shearY, + GpMatrixOrder order) +{ + REAL shear[6]; + + if(!matrix) + return InvalidParameter; + + /* prepare transformation matrix */ + shear[0] = 1.0; + shear[1] = shearY; + shear[2] = shearX; + shear[3] = 1.0; + shear[4] = 0.0; + shear[5] = 0.0; + + if(order == MatrixOrderAppend) + matrix_multiply(matrix->matrix, shear, matrix->matrix); + else + matrix_multiply(shear, matrix->matrix, matrix->matrix); + + return Ok; +} + GpStatus WINGDIPAPI GdipTransformMatrixPoints(GpMatrix *matrix, GpPointF *pts, INT count) { diff --git a/reactos/dll/win32/gdiplus/pathiterator.c b/reactos/dll/win32/gdiplus/pathiterator.c index abb5dbb30f9..95f17748d64 100644 --- a/reactos/dll/win32/gdiplus/pathiterator.c +++ b/reactos/dll/win32/gdiplus/pathiterator.c @@ -31,24 +31,30 @@ GpStatus WINGDIPAPI GdipCreatePathIter(GpPathIterator **iterator, GpPath* path) { INT size; - if(!iterator || !path) + if(!iterator) return InvalidParameter; - size = path->pathdata.Count; - *iterator = GdipAlloc(sizeof(GpPathIterator)); if(!*iterator) return OutOfMemory; - (*iterator)->pathdata.Types = GdipAlloc(size); - (*iterator)->pathdata.Points = GdipAlloc(size * sizeof(PointF)); + if(path){ + size = path->pathdata.Count; - memcpy((*iterator)->pathdata.Types, path->pathdata.Types, size); - memcpy((*iterator)->pathdata.Points, path->pathdata.Points, - size * sizeof(PointF)); - (*iterator)->pathdata.Count = size; + (*iterator)->pathdata.Types = GdipAlloc(size); + (*iterator)->pathdata.Points = GdipAlloc(size * sizeof(PointF)); - (*iterator)->subpath_pos = 0; - (*iterator)->marker_pos = 0; + memcpy((*iterator)->pathdata.Types, path->pathdata.Types, size); + memcpy((*iterator)->pathdata.Points, path->pathdata.Points,size * sizeof(PointF)); + (*iterator)->pathdata.Count = size; + } + else{ + (*iterator)->pathdata.Types = NULL; + (*iterator)->pathdata.Points = NULL; + (*iterator)->pathdata.Count = 0; + } + + (*iterator)->subpath_pos = 0; + (*iterator)->marker_pos = 0; (*iterator)->pathtype_pos = 0; return Ok; @@ -105,16 +111,62 @@ GpStatus WINGDIPAPI GdipPathIterHasCurve(GpPathIterator* iterator, BOOL* hasCurv return Ok; } +GpStatus WINGDIPAPI GdipPathIterGetSubpathCount(GpPathIterator* iterator, INT* count) +{ + INT i; + + if(!iterator || !count) + return InvalidParameter; + + *count = 0; + for(i = 0; i < iterator->pathdata.Count; i++){ + if(iterator->pathdata.Types[i] == PathPointTypeStart) + (*count)++; + } + + return Ok; +} + +GpStatus WINGDIPAPI GdipPathIterNextMarker(GpPathIterator* iterator, INT *resultCount, + INT* startIndex, INT* endIndex) +{ + INT i; + + if(!iterator || !startIndex || !endIndex) + return InvalidParameter; + + *resultCount = 0; + + /* first call could start with second point as all subsequent, cause + path couldn't contain only one */ + for(i = iterator->marker_pos + 1; i < iterator->pathdata.Count; i++){ + if((iterator->pathdata.Types[i] & PathPointTypePathMarker) || + (i == iterator->pathdata.Count - 1)){ + *startIndex = iterator->marker_pos; + if(iterator->marker_pos > 0) (*startIndex)++; + *endIndex = iterator->marker_pos = i; + *resultCount= *endIndex - *startIndex + 1; + break; + } + } + + return Ok; +} + GpStatus WINGDIPAPI GdipPathIterNextSubpath(GpPathIterator* iterator, INT *resultCount, INT* startIndex, INT* endIndex, BOOL* isClosed) { INT i, count; - if(!iterator) + if(!iterator || !startIndex || !endIndex || !isClosed || !resultCount) return InvalidParameter; count = iterator->pathdata.Count; + /* iterator created with NULL path */ + if(count == 0) + return Ok; + if(iterator->subpath_pos == count){ *startIndex = *endIndex = *resultCount = 0; *isClosed = 1; diff --git a/reactos/dll/win32/gdiplus/pen.c b/reactos/dll/win32/gdiplus/pen.c index 852494f2ac2..104d9de6485 100644 --- a/reactos/dll/win32/gdiplus/pen.c +++ b/reactos/dll/win32/gdiplus/pen.c @@ -116,6 +116,8 @@ GpStatus WINGDIPAPI GdipCreatePen2(GpBrush *brush, REAL width, GpUnit unit, gp_pen->miterlimit = 10.0; gp_pen->dash = DashStyleSolid; gp_pen->offset = 0.0; + gp_pen->customstart = NULL; + gp_pen->customend = NULL; if(!((gp_pen->unit == UnitWorld) || (gp_pen->unit == UnitPixel))) { FIXME("UnitWorld, UnitPixel only supported units\n"); @@ -163,6 +165,32 @@ GpStatus WINGDIPAPI GdipGetPenColor(GpPen *pen, ARGB *argb) return GdipGetSolidFillColor(((GpSolidFill*)pen->brush), argb); } +GpStatus WINGDIPAPI GdipGetPenCustomEndCap(GpPen *pen, GpCustomLineCap** customCap) +{ + if(!pen || !customCap) + return InvalidParameter; + + if(!pen->customend){ + *customCap = NULL; + return Ok; + } + + return GdipCloneCustomLineCap(pen->customend, customCap); +} + +GpStatus WINGDIPAPI GdipGetPenCustomStartCap(GpPen *pen, GpCustomLineCap** customCap) +{ + if(!pen || !customCap) + return InvalidParameter; + + if(!pen->customstart){ + *customCap = NULL; + return Ok; + } + + return GdipCloneCustomLineCap(pen->customstart, customCap); +} + GpStatus WINGDIPAPI GdipGetPenDashArray(GpPen *pen, REAL *dash, INT count) { if(!pen || !dash || count > pen->numdashes) @@ -187,6 +215,16 @@ GpStatus WINGDIPAPI GdipGetPenDashCap197819(GpPen *pen, GpDashCap *dashCap) return Ok; } +GpStatus WINGDIPAPI GdipGetPenDashCount(GpPen *pen, INT *count) +{ + if(!pen || !count) + return InvalidParameter; + + *count = pen->numdashes; + + return Ok; +} + GpStatus WINGDIPAPI GdipGetPenDashOffset(GpPen *pen, REAL *offset) { if(!pen || !offset) @@ -227,6 +265,16 @@ GpStatus WINGDIPAPI GdipGetPenLineJoin(GpPen *pen, GpLineJoin *lineJoin) return Ok; } +GpStatus WINGDIPAPI GdipGetPenMode(GpPen *pen, GpPenAlignment *mode) +{ + if(!pen || !mode) + return InvalidParameter; + + *mode = pen->align; + + return Ok; +} + GpStatus WINGDIPAPI GdipGetPenMiterLimit(GpPen *pen, REAL *miterLimit) { if(!pen || !miterLimit) @@ -292,7 +340,8 @@ GpStatus WINGDIPAPI GdipSetPenCustomEndCap(GpPen *pen, GpCustomLineCap* customCa GpCustomLineCap * cap; GpStatus ret; - if(!pen || !customCap) return InvalidParameter; + /* native crashes on pen == NULL, customCap != NULL */ + if(!customCap) return InvalidParameter; if((ret = GdipCloneCustomLineCap(customCap, &cap)) == Ok){ GdipDeleteCustomLineCap(pen->customend); @@ -308,7 +357,8 @@ GpStatus WINGDIPAPI GdipSetPenCustomStartCap(GpPen *pen, GpCustomLineCap* custom GpCustomLineCap * cap; GpStatus ret; - if(!pen || !customCap) return InvalidParameter; + /* native crashes on pen == NULL, customCap != NULL */ + if(!customCap) return InvalidParameter; if((ret = GdipCloneCustomLineCap(customCap, &cap)) == Ok){ GdipDeleteCustomLineCap(pen->customstart); @@ -357,6 +407,16 @@ GpStatus WINGDIPAPI GdipSetPenDashArray(GpPen *pen, GDIPCONST REAL *dash, return Ok; } +GpStatus WINGDIPAPI GdipSetPenDashCap197819(GpPen *pen, GpDashCap dashCap) +{ + if(!pen) + return InvalidParameter; + + pen->dashcap = dashCap; + + return Ok; +} + /* FIXME: dash offset not used */ GpStatus WINGDIPAPI GdipSetPenDashOffset(GpPen *pen, REAL offset) { @@ -461,12 +521,11 @@ GpStatus WINGDIPAPI GdipSetPenWidth(GpPen *pen, REAL width) return Ok; } - -GpStatus WINGDIPAPI GdipSetPenMode(GpPen *pen, GpPenAlignment penAlignment) +GpStatus WINGDIPAPI GdipSetPenMode(GpPen *pen, GpPenAlignment mode) { if(!pen) return InvalidParameter; - FIXME("stub (%d)\n", penAlignment); + pen->align = mode; return Ok; } diff --git a/reactos/dll/win32/gdiplus/region.c b/reactos/dll/win32/gdiplus/region.c index 3d95723b529..c4007b3ff38 100644 --- a/reactos/dll/win32/gdiplus/region.c +++ b/reactos/dll/win32/gdiplus/region.c @@ -32,8 +32,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(gdiplus); /********************************************************** * - * Data returned by GdipGetRegionData (for rectangle based regions) - * looks something like this: + * Data returned by GdipGetRegionData looks something like this: * * struct region_data_header * { @@ -43,7 +42,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(gdiplus); * DWORD num_ops; number of combining ops * 2 * }; * - * Then follows a sequence of combining ops and RECTFs. + * Then follows a sequence of combining ops and region elements. + * + * A region element is either a RECTF or some path data. * * Combining ops are just stored as their CombineMode value. * @@ -51,22 +52,99 @@ WINE_DEFAULT_DEBUG_CHANNEL(gdiplus); * stored as 0x10000002 (with no following RECTF) and an infinite rect * is stored as 0x10000003 (again with no following RECTF). * - * The combining ops are stored in the reverse order to the RECTFs and in the - * reverse order to which the region was constructed. + * Path data is preceded by the DWORD 0x10000001. Then follows a + * DWORD size and then size bytes of data. * - * When two or more complex regions (ie those with more than one rect) - * are combined, the combining op for the two regions comes first, - * then the combining ops for the rects in region 1, followed by the - * rects for region 1, then follows the combining ops for region 2 and - * finally region 2's rects. Presumably you're supposed to use the - * 0x10000000 rect header to find the end of the op list (the count of - * the rects in each region is not stored). + * The combining ops are stored in the reverse order to the region + * elements and in the reverse order to which the region was + * constructed. * - * When a simple region (1 rect) is combined, it's treated as if a single rect - * is being combined. + * When two or more complex regions (ie those with more than one + * element) are combined, the combining op for the two regions comes + * first, then the combining ops for the region elements in region 1, + * followed by the region elements for region 1, then follows the + * combining ops for region 2 and finally region 2's region elements. + * Presumably you're supposed to use the 0x1000000x header to find the + * end of the op list (the count of the elements in each region is not + * stored). + * + * When a simple region (1 element) is combined, it's treated as if a + * single rect/path is being combined. * */ +typedef enum RegionType +{ + RegionDataRect = 0x10000000, + RegionDataPath = 0x10000001, + RegionDataEmptyRect = 0x10000002, + RegionDataInfiniteRect = 0x10000003, +} RegionType; + +/* Header size as far as header->size is concerned. This doesn't include + * header->size or header->checksum + */ +static const INT sizeheader_size = sizeof(DWORD) * 2; + +static inline INT get_element_size(const region_element* element) +{ + INT needed = sizeof(DWORD); /* DWORD for the type */ + switch(element->type) + { + case RegionDataRect: + return needed + sizeof(GpRect); + case RegionDataPath: + needed += element->elementdata.pathdata.pathheader.size; + needed += sizeof(DWORD); /* Extra DWORD for pathheader.size */ + return needed; + case RegionDataEmptyRect: + case RegionDataInfiniteRect: + return needed; + default: + needed += get_element_size(element->elementdata.combine.left); + needed += get_element_size(element->elementdata.combine.right); + return needed; + } + + return 0; +} + +/* Does not check parameters, caller must do that */ +static inline GpStatus init_region(GpRegion* region, const RegionType type) +{ + region->node.type = type; + region->header.checksum = 0xdeadbeef; + region->header.magic = VERSION_MAGIC; + region->header.num_children = 0; + region->header.size = sizeheader_size + get_element_size(®ion->node); + + return Ok; +} + +static inline void delete_element(region_element* element) +{ + switch(element->type) + { + case RegionDataRect: + break; + case RegionDataPath: + GdipDeletePath(element->elementdata.pathdata.path); + break; + case RegionDataEmptyRect: + case RegionDataInfiniteRect: + break; + default: + delete_element(element->elementdata.combine.left); + delete_element(element->elementdata.combine.right); + GdipFree(element->elementdata.combine.left); + GdipFree(element->elementdata.combine.right); + break; + } +} + +/***************************************************************************** + * GdipCloneRegion [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipCloneRegion(GpRegion *region, GpRegion **clone) { FIXME("(%p %p): stub\n", region, clone); @@ -104,10 +182,16 @@ GpStatus WINGDIPAPI GdipCombineRegionRegion(GpRegion *region1, GpRegion *region2 GpStatus WINGDIPAPI GdipCreateRegion(GpRegion **region) { - FIXME("(%p): stub\n", region); + if(!region) + return InvalidParameter; - *region = NULL; - return NotImplemented; + TRACE("%p\n", region); + + *region = GdipAlloc(sizeof(GpRegion)); + if(!*region) + return OutOfMemory; + + return init_region(*region, RegionDataInfiniteRect); } GpStatus WINGDIPAPI GdipCreateRegionPath(GpPath *path, GpRegion **region) @@ -152,8 +236,15 @@ GpStatus WINGDIPAPI GdipCreateRegionHrgn(HRGN hrgn, GpRegion **region) GpStatus WINGDIPAPI GdipDeleteRegion(GpRegion *region) { - FIXME("(%p): stub\n", region); - return NotImplemented; + TRACE("%p\n", region); + + if (!region) + return InvalidParameter; + + delete_element(®ion->node); + GdipFree(region); + + return Ok; } GpStatus WINGDIPAPI GdipGetRegionBounds(GpRegion *region, GpGraphics *graphics, GpRectF *rect) @@ -179,11 +270,20 @@ GpStatus WINGDIPAPI GdipGetRegionData(GpRegion *region, BYTE *buffer, UINT size, GpStatus WINGDIPAPI GdipGetRegionDataSize(GpRegion *region, UINT *needed) { - FIXME("(%p, %p): stub\n", region, needed); + if (!(region && needed)) + return InvalidParameter; - return NotImplemented; + TRACE("%p, %p\n", region, needed); + + /* header.size doesn't count header.size and header.checksum */ + *needed = region->header.size + sizeof(DWORD) * 2; + + return Ok; } +/***************************************************************************** + * GdipGetRegionHRgn [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipGetRegionHRgn(GpRegion *region, GpGraphics *graphics, HRGN *hrgn) { FIXME("(%p, %p, %p): stub\n", region, graphics, hrgn); @@ -216,22 +316,32 @@ GpStatus WINGDIPAPI GdipIsInfiniteRegion(GpRegion *region, GpGraphics *graphics, GpStatus WINGDIPAPI GdipSetEmpty(GpRegion *region) { - static int calls; + GpStatus stat; - if(!(calls++)) - FIXME("not implemented\n"); + TRACE("%p\n", region); - return NotImplemented; + if (!region) + return InvalidParameter; + + delete_element(®ion->node); + stat = init_region(region, RegionDataEmptyRect); + + return stat; } GpStatus WINGDIPAPI GdipSetInfinite(GpRegion *region) { - static int calls; + GpStatus stat; - if(!(calls++)) - FIXME("not implemented\n"); + if (!region) + return InvalidParameter; - return NotImplemented; + TRACE("%p\n", region); + + delete_element(®ion->node); + stat = init_region(region, RegionDataInfiniteRect); + + return stat; } GpStatus WINGDIPAPI GdipTransformRegion(GpRegion *region, GpMatrix *matrix) diff --git a/reactos/dll/win32/gdiplus/stringformat.c b/reactos/dll/win32/gdiplus/stringformat.c index bd5d6ad0920..201201a866f 100644 --- a/reactos/dll/win32/gdiplus/stringformat.c +++ b/reactos/dll/win32/gdiplus/stringformat.c @@ -43,7 +43,13 @@ GpStatus WINGDIPAPI GdipCreateStringFormat(INT attr, LANGID lang, (*format)->attr = attr; (*format)->lang = lang; + (*format)->digitlang = LANG_NEUTRAL; (*format)->trimming = StringTrimmingCharacter; + (*format)->digitsub = StringDigitSubstituteUser; + /* tabstops */ + (*format)->tabcount = 0; + (*format)->firsttab = 0.0; + (*format)->tabs = NULL; return Ok; } @@ -53,11 +59,29 @@ GpStatus WINGDIPAPI GdipDeleteStringFormat(GpStringFormat *format) if(!format) return InvalidParameter; + GdipFree(format->tabs); GdipFree(format); return Ok; } +GpStatus WINGDIPAPI GdipStringFormatGetGenericDefault(GpStringFormat **format) +{ + GpStatus stat; + + if (!format) + return InvalidParameter; + + stat = GdipCreateStringFormat(0, LANG_NEUTRAL, format); + if(stat != Ok) + return stat; + + (*format)->align = StringAlignmentNear; + (*format)->vertalign = StringAlignmentNear; + + return Ok; +} + GpStatus WINGDIPAPI GdipGetStringFormatAlign(GpStringFormat *format, StringAlignment *align) { @@ -69,6 +93,29 @@ GpStatus WINGDIPAPI GdipGetStringFormatAlign(GpStringFormat *format, return Ok; } +GpStatus WINGDIPAPI GdipGetStringFormatDigitSubstitution(GDIPCONST GpStringFormat *format, + LANGID *language, StringDigitSubstitute *substitute) +{ + if(!format) + return InvalidParameter; + + if(language) *language = format->digitlang; + if(substitute) *substitute = format->digitsub; + + return Ok; +} + +GpStatus WINGDIPAPI GdipGetStringFormatFlags(GDIPCONST GpStringFormat* format, + INT* flags) +{ + if (!(format && flags)) + return InvalidParameter; + + *flags = format->attr; + + return Ok; +} + GpStatus WINGDIPAPI GdipGetStringFormatHotkeyPrefix(GDIPCONST GpStringFormat *format, INT *hkpx) { @@ -91,6 +138,43 @@ GpStatus WINGDIPAPI GdipGetStringFormatLineAlign(GpStringFormat *format, return Ok; } +GpStatus WINGDIPAPI GdipGetStringFormatMeasurableCharacterRangeCount( + GDIPCONST GpStringFormat* format, INT* count) +{ + if (!(format && count)) + return InvalidParameter; + + FIXME("stub: %p %p\n", format, count); + + return NotImplemented; +} + +GpStatus WINGDIPAPI GdipGetStringFormatTabStopCount(GDIPCONST GpStringFormat *format, + INT *count) +{ + if(!format || !count) + return InvalidParameter; + + *count = format->tabcount; + + return Ok; +} + +GpStatus WINGDIPAPI GdipGetStringFormatTabStops(GDIPCONST GpStringFormat *format, INT count, + REAL *firsttab, REAL *tabs) +{ + if(!format || !firsttab || !tabs) + return InvalidParameter; + + /* native simply crashes on count < 0 */ + if(count != 0) + memcpy(tabs, format->tabs, sizeof(REAL)*count); + + *firsttab = format->firsttab; + + return Ok; +} + GpStatus WINGDIPAPI GdipGetStringFormatTrimming(GpStringFormat *format, StringTrimming *trimming) { @@ -113,6 +197,19 @@ GpStatus WINGDIPAPI GdipSetStringFormatAlign(GpStringFormat *format, return Ok; } +/*FIXME: digit substitution actually not implemented, get/set only */ +GpStatus WINGDIPAPI GdipSetStringFormatDigitSubstitution(GpStringFormat *format, + LANGID language, StringDigitSubstitute substitute) +{ + if(!format) + return InvalidParameter; + + format->digitlang = language; + format->digitsub = substitute; + + return Ok; +} + GpStatus WINGDIPAPI GdipSetStringFormatHotkeyPrefix(GpStringFormat *format, INT hkpx) { @@ -135,6 +232,47 @@ GpStatus WINGDIPAPI GdipSetStringFormatLineAlign(GpStringFormat *format, return Ok; } +GpStatus WINGDIPAPI GdipSetStringFormatMeasurableCharacterRanges(GpStringFormat* + format, INT rangeCount, GDIPCONST CharacterRange* ranges) +{ + if (!(format && rangeCount && ranges)) + return InvalidParameter; + + FIXME("stub: %p, %d, %p\n", format, rangeCount, ranges); + + return NotImplemented; +} + +GpStatus WINGDIPAPI GdipSetStringFormatTabStops(GpStringFormat *format, REAL firsttab, + INT count, GDIPCONST REAL *tabs) +{ + if(!format || !tabs) + return InvalidParameter; + + if(count > 0){ + if(firsttab < 0.0) return NotImplemented; + /* first time allocation */ + if(format->tabcount == 0){ + format->tabs = GdipAlloc(sizeof(REAL)*count); + if(!format->tabs) + return OutOfMemory; + } + /* reallocation */ + if((format->tabcount < count) && (format->tabcount > 0)){ + REAL *ptr; + ptr = HeapReAlloc(GetProcessHeap(), 0, format->tabs, sizeof(REAL)*count); + if(!ptr) + return OutOfMemory; + format->tabs = ptr; + } + format->firsttab = firsttab; + format->tabcount = count; + memcpy(format->tabs, tabs, sizeof(REAL)*count); + } + + return Ok; +} + GpStatus WINGDIPAPI GdipSetStringFormatTrimming(GpStringFormat *format, StringTrimming trimming) { @@ -163,7 +301,41 @@ GpStatus WINGDIPAPI GdipCloneStringFormat(GDIPCONST GpStringFormat *format, GpSt **newFormat = *format; + if(format->tabcount > 0){ + (*newFormat)->tabs = GdipAlloc(sizeof(REAL) * format->tabcount); + if(!(*newFormat)->tabs){ + GdipFree(*newFormat); + return OutOfMemory; + } + memcpy((*newFormat)->tabs, format->tabs, sizeof(REAL) * format->tabcount); + } + else + (*newFormat)->tabs = NULL; + TRACE("%p %p\n",format,newFormat); return Ok; } + +GpStatus WINGDIPAPI GdipStringFormatGetGenericTypographic(GpStringFormat **format) +{ + GpStatus stat; + + if(!format) + return InvalidParameter; + + stat = GdipCreateStringFormat(StringFormatFlagsNoFitBlackBox | + StringFormatFlagsLineLimit | + StringFormatFlagsNoClip, LANG_NEUTRAL, format); + if(stat != Ok) + return stat; + + (*format)->digitlang = LANG_NEUTRAL; + (*format)->digitsub = StringDigitSubstituteUser; + (*format)->trimming = StringTrimmingNone; + (*format)->hkprefix = HotkeyPrefixNone; + (*format)->align = StringAlignmentNear; + (*format)->vertalign = StringAlignmentNear; + + return Ok; +} diff --git a/reactos/dll/win32/kernel32/file/file.c b/reactos/dll/win32/kernel32/file/file.c index 50dfeff582e..804d6054d5c 100644 --- a/reactos/dll/win32/kernel32/file/file.c +++ b/reactos/dll/win32/kernel32/file/file.c @@ -353,6 +353,8 @@ FlushFileBuffers(HANDLE hFile) NTSTATUS errCode; IO_STATUS_BLOCK IoStatusBlock; + hFile = TranslateStdHandle(hFile); + if (IsConsoleHandle(hFile)) { return FALSE; @@ -561,20 +563,7 @@ GetFileType(HANDLE hFile) NTSTATUS Status; /* Get real handle */ - switch ((ULONG)hFile) - { - case STD_INPUT_HANDLE: - hFile = NtCurrentPeb()->ProcessParameters->StandardInput; - break; - - case STD_OUTPUT_HANDLE: - hFile = NtCurrentPeb()->ProcessParameters->StandardOutput; - break; - - case STD_ERROR_HANDLE: - hFile = NtCurrentPeb()->ProcessParameters->StandardError; - break; - } + hFile = TranslateStdHandle(hFile); /* Check for console handle */ if (IsConsoleHandle(hFile)) diff --git a/reactos/dll/win32/kernel32/file/rw.c b/reactos/dll/win32/kernel32/file/rw.c index fe358183586..8622e1b61b3 100644 --- a/reactos/dll/win32/kernel32/file/rw.c +++ b/reactos/dll/win32/kernel32/file/rw.c @@ -37,6 +37,8 @@ WriteFile(IN HANDLE hFile, *lpNumberOfBytesWritten = 0; } + hFile = TranslateStdHandle(hFile); + if (IsConsoleHandle((ULONG_PTR)hFile)) { return WriteConsoleA(hFile, @@ -142,6 +144,8 @@ ReadFile(IN HANDLE hFile, *lpNumberOfBytesRead = 0; } + hFile = TranslateStdHandle(hFile); + if (IsConsoleHandle(hFile)) { return ReadConsoleA(hFile, diff --git a/reactos/dll/win32/kernel32/include/kernel32.h b/reactos/dll/win32/kernel32/include/kernel32.h index b2abfa8e828..f843e910499 100755 --- a/reactos/dll/win32/kernel32/include/kernel32.h +++ b/reactos/dll/win32/kernel32/include/kernel32.h @@ -69,10 +69,12 @@ GetConsoleInputWaitHandle (VOID); HANDLE STDCALL OpenConsoleW (LPCWSTR wsName, DWORD dwDesiredAccess, BOOL bInheritHandle, - DWORD dwCreationDistribution); + DWORD dwShareMode); PTEB GetTeb(VOID); +HANDLE FASTCALL TranslateStdHandle(HANDLE hHandle); + PWCHAR FilenameA2W(LPCSTR NameA, BOOL alloc); DWORD FilenameW2A_FitOrFail(LPSTR DestA, INT destLen, LPCWSTR SourceW, INT sourceLen); diff --git a/reactos/dll/win32/kernel32/mem/section.c b/reactos/dll/win32/kernel32/mem/section.c index 68c397c4359..7829ba153e5 100644 --- a/reactos/dll/win32/kernel32/mem/section.c +++ b/reactos/dll/win32/kernel32/mem/section.c @@ -240,12 +240,12 @@ MapViewOfFile(HANDLE hFileMappingObject, */ BOOL NTAPI -UnmapViewOfFile(LPVOID lpBaseAddress) +UnmapViewOfFile(LPCVOID lpBaseAddress) { NTSTATUS Status; /* Unmap the section */ - Status = NtUnmapViewOfSection(NtCurrentProcess(), lpBaseAddress); + Status = NtUnmapViewOfSection(NtCurrentProcess(), (PVOID)lpBaseAddress); if (!NT_SUCCESS(Status)) { /* We failed */ diff --git a/reactos/dll/win32/kernel32/misc/console.c b/reactos/dll/win32/kernel32/misc/console.c index 3104e28ccc4..b638e4ef137 100644 --- a/reactos/dll/win32/kernel32/misc/console.c +++ b/reactos/dll/win32/kernel32/misc/console.c @@ -22,12 +22,11 @@ extern BOOL WINAPI DefaultConsoleCtrlHandler(DWORD Event); extern __declspec(noreturn) VOID CALLBACK ConsoleControlDispatcher(DWORD CodeAndFlag); extern RTL_CRITICAL_SECTION ConsoleLock; +extern BOOL ConsoleInitialized; extern BOOL WINAPI IsDebuggerPresent(VOID); /* GLOBALS *******************************************************************/ -static BOOL IgnoreCtrlEvents = FALSE; - static PHANDLER_ROUTINE* CtrlHandlers = NULL; static ULONG NrCtrlHandlers = 0; static WCHAR InputExeName[MAX_PATH + 1] = L""; @@ -87,6 +86,8 @@ SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST); erException.NumberParameters = 0; RtlRaiseException(&erException); } + + if (!ConsoleInitialized) ExitThread(0); RtlEnterCriticalSection(&ConsoleLock); if(!(nCode == CTRL_C_EVENT && @@ -106,6 +107,7 @@ SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST); default: ExitThread(0); } + if (!ConsoleInitialized) ExitThread(0); RtlEnterCriticalSection(&ConsoleLock); if(!(nCode == CTRL_C_EVENT && @@ -3137,7 +3139,7 @@ SetConsoleTextAttribute( CsrRequest = MAKE_CSR_API(SET_ATTRIB, CSR_CONSOLE); Request.Data.SetAttribRequest.ConsoleHandle = hConsoleOutput; - Request.Data.SetAttribRequest.Attrib = (CHAR)wAttributes; + Request.Data.SetAttribRequest.Attrib = wAttributes; Status = CsrClientCallServer( &Request, NULL, CsrRequest, sizeof( CSR_API_MESSAGE ) ); if( !NT_SUCCESS( Status ) || !NT_SUCCESS( Status = Request.Status ) ) { @@ -3153,7 +3155,7 @@ AddConsoleCtrlHandler(PHANDLER_ROUTINE HandlerRoutine) { if (HandlerRoutine == NULL) { - IgnoreCtrlEvents = TRUE; + NtCurrentPeb()->ProcessParameters->ConsoleFlags = TRUE; return(TRUE); } else @@ -3189,7 +3191,7 @@ RemoveConsoleCtrlHandler(PHANDLER_ROUTINE HandlerRoutine) if (HandlerRoutine == NULL) { - IgnoreCtrlEvents = FALSE; + NtCurrentPeb()->ProcessParameters->ConsoleFlags = FALSE; return(TRUE); } else @@ -3241,7 +3243,7 @@ SetConsoleCtrlHandler(PHANDLER_ROUTINE HandlerRoutine, /*-------------------------------------------------------------- * GenerateConsoleCtrlEvent * - * @unimplemented + * @implemented */ BOOL WINAPI GenerateConsoleCtrlEvent( @@ -3249,9 +3251,30 @@ GenerateConsoleCtrlEvent( DWORD dwProcessGroupId ) { - DPRINT1("GenerateConsoleCtrlEvent(0x%x, 0x%x) UNIMPLEMENTED!\n", dwCtrlEvent, dwProcessGroupId); - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return FALSE; + CSR_API_MESSAGE Request; + ULONG CsrRequest; + NTSTATUS Status; + + if (dwCtrlEvent != CTRL_C_EVENT && dwCtrlEvent != CTRL_BREAK_EVENT) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + CsrRequest = MAKE_CSR_API(GENERATE_CTRL_EVENT, CSR_CONSOLE); + Request.Data.GenerateCtrlEvent.Event = dwCtrlEvent; + Request.Data.GenerateCtrlEvent.ProcessGroup = dwProcessGroupId; + Status = CsrClientCallServer(&Request, + NULL, + CsrRequest, + sizeof(CSR_API_MESSAGE)); + if(!NT_SUCCESS(Status) || !(NT_SUCCESS(Status = Request.Status))) + { + SetLastErrorByStatus(Status); + return FALSE; + } + + return TRUE; } diff --git a/reactos/dll/win32/kernel32/misc/dllmain.c b/reactos/dll/win32/kernel32/misc/dllmain.c index 958a4076d95..caa13c1b11d 100644 --- a/reactos/dll/win32/kernel32/misc/dllmain.c +++ b/reactos/dll/win32/kernel32/misc/dllmain.c @@ -26,9 +26,9 @@ HMODULE hCurrentModule = NULL; HANDLE hBaseDir = NULL; PPEB Peb; ULONG SessionId; +BOOL ConsoleInitialized = FALSE; static BOOL DllInitialized = FALSE; -static BOOL ConsoleInitialized = FALSE; BOOL STDCALL DllMain(HANDLE hInst, @@ -374,6 +374,7 @@ DllMain(HANDLE hDll, /* Delete DLL critical section */ if (ConsoleInitialized == TRUE) { + ConsoleInitialized = FALSE; RtlDeleteCriticalSection (&ConsoleLock); } RtlDeleteCriticalSection (&DllLock); diff --git a/reactos/dll/win32/kernel32/misc/handle.c b/reactos/dll/win32/kernel32/misc/handle.c index 99a550d1b43..3bef56ad1c5 100644 --- a/reactos/dll/win32/kernel32/misc/handle.c +++ b/reactos/dll/win32/kernel32/misc/handle.c @@ -26,6 +26,21 @@ DuplicateConsoleHandle (HANDLE hConsole, /* FUNCTIONS *****************************************************************/ +HANDLE FASTCALL +TranslateStdHandle(HANDLE hHandle) +{ + PRTL_USER_PROCESS_PARAMETERS Ppb = NtCurrentPeb()->ProcessParameters; + + switch ((ULONG_PTR)hHandle) + { + case STD_INPUT_HANDLE: return Ppb->StandardInput; + case STD_OUTPUT_HANDLE: return Ppb->StandardOutput; + case STD_ERROR_HANDLE: return Ppb->StandardError; + } + + return hHandle; +} + /* * @implemented */ @@ -33,25 +48,12 @@ BOOL WINAPI GetHandleInformation (HANDLE hObject, LPDWORD lpdwFlags) { - PRTL_USER_PROCESS_PARAMETERS Ppb; OBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleInfo; ULONG BytesWritten; NTSTATUS Status; DWORD Flags; - Ppb = NtCurrentPeb()->ProcessParameters; - switch ((ULONG_PTR)hObject) - { - case STD_INPUT_HANDLE: - hObject = Ppb->StandardInput; - break; - case STD_OUTPUT_HANDLE: - hObject = Ppb->StandardOutput; - break; - case STD_ERROR_HANDLE: - hObject = Ppb->StandardError; - break; - } + hObject = TranslateStdHandle(hObject); Status = NtQueryObject (hObject, ObjectHandleFlagInformation, @@ -86,24 +88,11 @@ SetHandleInformation (HANDLE hObject, DWORD dwMask, DWORD dwFlags) { - PRTL_USER_PROCESS_PARAMETERS Ppb; OBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleInfo; ULONG BytesWritten; NTSTATUS Status; - Ppb = NtCurrentPeb()->ProcessParameters; - switch ((ULONG)hObject) - { - case STD_INPUT_HANDLE: - hObject = Ppb->StandardInput; - break; - case STD_OUTPUT_HANDLE: - hObject = Ppb->StandardOutput; - break; - case STD_ERROR_HANDLE: - hObject = Ppb->StandardError; - break; - } + hObject = TranslateStdHandle(hObject); Status = NtQueryObject (hObject, ObjectHandleFlagInformation, @@ -149,22 +138,9 @@ BOOL STDCALL CloseHandle(HANDLE hObject) * If the function fails, the return value is zero */ { - PRTL_USER_PROCESS_PARAMETERS Ppb; NTSTATUS Status; - Ppb = NtCurrentPeb()->ProcessParameters; - switch ((ULONG)hObject) - { - case STD_INPUT_HANDLE: - hObject = Ppb->StandardInput; - break; - case STD_OUTPUT_HANDLE: - hObject = Ppb->StandardOutput; - break; - case STD_ERROR_HANDLE: - hObject = Ppb->StandardError; - break; - } + hObject = TranslateStdHandle(hObject); if (IsConsoleHandle(hObject)) { @@ -193,23 +169,10 @@ BOOL STDCALL DuplicateHandle(HANDLE hSourceProcessHandle, BOOL bInheritHandle, DWORD dwOptions) { - PRTL_USER_PROCESS_PARAMETERS Ppb; DWORD SourceProcessId, TargetProcessId; NTSTATUS Status; - Ppb = NtCurrentPeb()->ProcessParameters; - switch ((ULONG)hSourceHandle) - { - case STD_INPUT_HANDLE: - hSourceHandle = Ppb->StandardInput; - break; - case STD_OUTPUT_HANDLE: - hSourceHandle = Ppb->StandardOutput; - break; - case STD_ERROR_HANDLE: - hSourceHandle = Ppb->StandardError; - break; - } + hSourceHandle = TranslateStdHandle(hSourceHandle); if (IsConsoleHandle(hSourceHandle)) { diff --git a/reactos/dll/win32/kernel32/misc/stubs.c b/reactos/dll/win32/kernel32/misc/stubs.c index b11385b2bd7..125177ff165 100644 --- a/reactos/dll/win32/kernel32/misc/stubs.c +++ b/reactos/dll/win32/kernel32/misc/stubs.c @@ -963,6 +963,7 @@ GetVolumePathNameW( ) { STUB; + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return 0; } diff --git a/reactos/dll/win32/kernel32/synch/event.c b/reactos/dll/win32/kernel32/synch/event.c index 6a02b469cc1..d39c0aaccc5 100644 --- a/reactos/dll/win32/kernel32/synch/event.c +++ b/reactos/dll/win32/kernel32/synch/event.c @@ -9,7 +9,6 @@ /* INCLUDES *****************************************************************/ #include - #define NDEBUG #include @@ -73,13 +72,16 @@ CreateEventExW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, /* Now check if we got a name */ if (lpName) RtlInitUnicodeString(&ObjectName, lpName); + /* Check for invalid flags */ if (dwFlags & ~(CREATE_EVENT_INITIAL_SET | CREATE_EVENT_MANUAL_RESET)) { + /* Fail */ SetLastError(ERROR_INVALID_PARAMETER); return NULL; } - InitialState = (dwFlags & CREATE_EVENT_INITIAL_SET) != 0; + /* Set initial state and event type */ + InitialState = (dwFlags & CREATE_EVENT_INITIAL_SET) ? TRUE : FALSE; EventType = (dwFlags & CREATE_EVENT_MANUAL_RESET) ? NotificationEvent : SynchronizationEvent; /* Now convert the object attributes */ @@ -128,12 +130,11 @@ CreateEventA(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, { DWORD dwFlags = 0; - if (bManualReset) - dwFlags |= CREATE_EVENT_MANUAL_RESET; - - if (bInitialState) - dwFlags |= CREATE_EVENT_INITIAL_SET; + /* Set new flags */ + if (bManualReset) dwFlags |= CREATE_EVENT_MANUAL_RESET; + if (bInitialState) dwFlags |= CREATE_EVENT_INITIAL_SET; + /* Call the newer API */ return CreateEventExA(lpEventAttributes, lpName, dwFlags, @@ -149,12 +150,11 @@ CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, { DWORD dwFlags = 0; - if (bManualReset) - dwFlags |= CREATE_EVENT_MANUAL_RESET; - - if (bInitialState) - dwFlags |= CREATE_EVENT_INITIAL_SET; + /* Set new flags */ + if (bManualReset) dwFlags |= CREATE_EVENT_MANUAL_RESET; + if (bInitialState) dwFlags |= CREATE_EVENT_INITIAL_SET; + /* Call the newer API */ return CreateEventExW(lpEventAttributes, lpName, dwFlags, diff --git a/reactos/dll/win32/kernel32/synch/wait.c b/reactos/dll/win32/kernel32/synch/wait.c index 8fc75321dcf..6fea3011a05 100644 --- a/reactos/dll/win32/kernel32/synch/wait.c +++ b/reactos/dll/win32/kernel32/synch/wait.c @@ -41,29 +41,7 @@ WaitForSingleObjectEx(IN HANDLE hHandle, NTSTATUS Status; /* Get real handle */ - switch ((ULONG)hHandle) - { - /* Input handle */ - case STD_INPUT_HANDLE: - - /* Read it from the PEB */ - hHandle = NtCurrentPeb()->ProcessParameters->StandardInput; - break; - - /* Output handle */ - case STD_OUTPUT_HANDLE: - - /* Read it from the PEB */ - hHandle = NtCurrentPeb()->ProcessParameters->StandardOutput; - break; - - /* Error handle */ - case STD_ERROR_HANDLE: - - /* Read it from the PEB */ - hHandle = NtCurrentPeb()->ProcessParameters->StandardError; - break; - } + hHandle = TranslateStdHandle(hHandle); /* Check for console handle */ if ((IsConsoleHandle(hHandle)) && (VerifyConsoleIoHandle(hHandle))) @@ -163,26 +141,7 @@ WaitForMultipleObjectsEx(IN DWORD nCount, for (i = 0; i < nCount; i++) { /* Check what kind of handle this is */ - switch ((ULONG)HandleBuffer[i]) - { - /* Input handle */ - case STD_INPUT_HANDLE: - HandleBuffer[i] = NtCurrentPeb()-> - ProcessParameters->StandardInput; - break; - - /* Output handle */ - case STD_OUTPUT_HANDLE: - HandleBuffer[i] = NtCurrentPeb()-> - ProcessParameters->StandardOutput; - break; - - /* Error handle */ - case STD_ERROR_HANDLE: - HandleBuffer[i] = NtCurrentPeb()-> - ProcessParameters->StandardError; - break; - } + HandleBuffer[i] = TranslateStdHandle(HandleBuffer[i]); /* Check for console handle */ if ((IsConsoleHandle(HandleBuffer[i])) && @@ -249,32 +208,7 @@ SignalObjectAndWait(IN HANDLE hObjectToSignal, NTSTATUS Status; /* Get real handle */ - switch ((ULONG)hObjectToWaitOn) - { - /* Input handle */ - case STD_INPUT_HANDLE: - - /* Read it from the PEB */ - hObjectToWaitOn = NtCurrentPeb()-> - ProcessParameters->StandardInput; - break; - - /* Output handle */ - case STD_OUTPUT_HANDLE: - - /* Read it from the PEB */ - hObjectToWaitOn = NtCurrentPeb()-> - ProcessParameters->StandardOutput; - break; - - /* Error handle */ - case STD_ERROR_HANDLE: - - /* Read it from the PEB */ - hObjectToWaitOn = NtCurrentPeb()-> - ProcessParameters->StandardError; - break; - } + hObjectToWaitOn = TranslateStdHandle(hObjectToWaitOn); /* Check for console handle */ if ((IsConsoleHandle(hObjectToWaitOn)) && diff --git a/reactos/dll/win32/lpk/lpk.def b/reactos/dll/win32/lpk/lpk.def deleted file mode 100644 index c0a90e93ac2..00000000000 --- a/reactos/dll/win32/lpk/lpk.def +++ /dev/null @@ -1,20 +0,0 @@ -; $Id: gdi32.def 33598 2008-05-19 10:20:39Z greatlrd $ -; -; lpk.def -; -; ReactOS Operating System -; -LIBRARY lpk.dll -EXPORTS -LpkInitialize@4 -LpkTabbedTextOut@48 -LpkDllInitialize@12 -LpkDrawTextEx@40 -LpkEditControl@0 -LpkExtTextOut@36 -LpkGetCharacterPlacement@28 -LpkGetTextExtentExPoint@36 -LpkPSMTextOut@24 -LpkUseGDIWidthCache@20 -ftsWordBreak@20 - diff --git a/reactos/dll/win32/lpk/lpk.rbuild b/reactos/dll/win32/lpk/lpk.rbuild index fe83c7ec489..eacdef6f384 100644 --- a/reactos/dll/win32/lpk/lpk.rbuild +++ b/reactos/dll/win32/lpk/lpk.rbuild @@ -1,5 +1,5 @@ - + include 0x0600 @@ -14,4 +14,5 @@ stub.c lpk.rc + lpk.spec diff --git a/reactos/dll/win32/lpk/lpk.spec b/reactos/dll/win32/lpk/lpk.spec new file mode 100644 index 00000000000..01ed057bf63 --- /dev/null +++ b/reactos/dll/win32/lpk/lpk.spec @@ -0,0 +1,11 @@ +@ stdcall LpkInitialize(long) +@ stdcall LpkTabbedTextOut(long long long long long long long long long long long long) +@ stdcall LpkDllInitialize(ptr long ptr) +@ stdcall LpkDrawTextEx(long long long long long long long long long long) +@ extern LpkEditControl +@ stdcall LpkExtTextOut(long long long long long long long long long) +@ stdcall LpkGetCharacterPlacement(long long long long long long long) +@ stdcall LpkGetTextExtentExPoint(long long long long long long long long long) +@ stdcall LpkPSMTextOut(long long long long long long) +@ stdcall LpkUseGDIWidthCache(long long long long long) +@ stdcall ftsWordBreak(long long long long long) diff --git a/reactos/dll/win32/lsasrv/lsarpc.c b/reactos/dll/win32/lsasrv/lsarpc.c index 97b7535eab1..b0d51b392fb 100644 --- a/reactos/dll/win32/lsasrv/lsarpc.c +++ b/reactos/dll/win32/lsasrv/lsarpc.c @@ -8,8 +8,7 @@ #include "lsa_s.h" -#define NDEBUG -#include +#include #define POLICY_DELETE (RTL_HANDLE_VALID << 1) typedef struct _LSAR_POLICY_HANDLE @@ -22,10 +21,12 @@ typedef struct _LSAR_POLICY_HANDLE static RTL_CRITICAL_SECTION PolicyHandleTableLock; static RTL_HANDLE_TABLE PolicyHandleTable; +WINE_DEFAULT_DEBUG_CHANNEL(lsasrv); + /* FUNCTIONS ***************************************************************/ -static NTSTATUS -ReferencePolicyHandle(IN LSA_HANDLE ObjectHandle, +/*static*/ NTSTATUS +ReferencePolicyHandle(IN LSAPR_HANDLE ObjectHandle, IN ACCESS_MASK DesiredAccess, OUT PLSAR_POLICY_HANDLE *Policy) { @@ -56,7 +57,7 @@ ReferencePolicyHandle(IN LSA_HANDLE ObjectHandle, return Status; } -static VOID +/*static*/ VOID DereferencePolicyHandle(IN OUT PLSAR_POLICY_HANDLE Policy, IN BOOLEAN Delete) { @@ -90,7 +91,7 @@ LsarStartRpcServer(VOID) sizeof(LSAR_POLICY_HANDLE), &PolicyHandleTable); - DPRINT("LsarStartRpcServer() called"); + TRACE("LsarStartRpcServer() called"); Status = RpcServerUseProtseqEpW(L"ncacn_np", 10, @@ -98,7 +99,7 @@ LsarStartRpcServer(VOID) NULL); if (Status != RPC_S_OK) { - DPRINT1("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status); + WARN("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status); return; } @@ -107,31 +108,33 @@ LsarStartRpcServer(VOID) NULL); if (Status != RPC_S_OK) { - DPRINT1("RpcServerRegisterIf() failed (Status %lx)\n", Status); + WARN("RpcServerRegisterIf() failed (Status %lx)\n", Status); return; } Status = RpcServerListen(1, 20, TRUE); if (Status != RPC_S_OK) { - DPRINT1("RpcServerListen() failed (Status %lx)\n", Status); + WARN("RpcServerListen() failed (Status %lx)\n", Status); return; } - DPRINT("LsarStartRpcServer() done\n"); + TRACE("LsarStartRpcServer() done\n"); } + /* Function 0 */ -NTSTATUS -LsarClose(IN handle_t BindingHandle, - IN unsigned long ObjectHandle) +NTSTATUS LsarClose( + handle_t hBinding, + LSAPR_HANDLE *ObjectHandle) { +#if 0 PLSAR_POLICY_HANDLE Policy = NULL; NTSTATUS Status; - DPRINT("LsarClose(0x%p) called!\n", ObjectHandle); + TRACE("0x%p\n", ObjectHandle); - Status = ReferencePolicyHandle((LSA_HANDLE)ObjectHandle, + Status = ReferencePolicyHandle(*ObjectHandle, 0, &Policy); if (NT_SUCCESS(Status)) @@ -142,15 +145,974 @@ LsarClose(IN handle_t BindingHandle, } return Status; +#endif + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; } + /* Function 1 */ -NTSTATUS -LsarDelete(IN handle_t BindingHandle, - IN unsigned long ObjectHandle) +NTSTATUS LsarDelete( + handle_t hBinding, + LSAPR_HANDLE ObjectHandle) { - DPRINT1("LsarDelete(0x%p) UNIMPLEMENTED!\n", ObjectHandle); - return STATUS_ACCESS_DENIED; + /* Deprecated */ + return STATUS_NOT_SUPPORTED; } + +/* Function 2 */ +NTSTATUS LsarEnumeratePrivileges( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + DWORD *EnumerationContext, + PLSAPR_PRIVILEGE_ENUM_BUFFER EnumerationBuffer, + DWORD PreferedMaximumLength) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 3 */ +NTSTATUS LsarQuerySecurityObject( + handle_t hBinding, + LSAPR_HANDLE ObjectHandle, + SECURITY_INFORMATION SecurityInformation, + PLSAPR_SR_SECURITY_DESCRIPTOR *SecurityDescriptor) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 4 */ +NTSTATUS LsarSetSecurityObject( + handle_t hBinding, + LSAPR_HANDLE ObjectHandle, + SECURITY_INFORMATION SecurityInformation, + PLSAPR_SR_SECURITY_DESCRIPTOR SecurityDescriptor) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 5 */ +NTSTATUS LsarChangePassword( + handle_t hBinding, + PRPC_UNICODE_STRING String1, + PRPC_UNICODE_STRING String2, + PRPC_UNICODE_STRING String3, + PRPC_UNICODE_STRING String4, + PRPC_UNICODE_STRING String5) +{ + /* Deprecated */ + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 6 */ +NTSTATUS LsarOpenPolicy( + handle_t hBinding, + LPWSTR SystemName, + PLSAPR_OBJECT_ATTRIBUTES ObjectAttributes, + ACCESS_MASK DesiredAccess, + LSAPR_HANDLE *PolicyHandle) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 7 */ +NTSTATUS LsarQueryInformationPolicy( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + POLICY_INFORMATION_CLASS InformationClass, + unsigned long PolicyInformation) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 8 */ +NTSTATUS LsarSetInformationPolicy( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + POLICY_INFORMATION_CLASS InformationClass, + unsigned long *PolicyInformation) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 9 */ +NTSTATUS LsarClearAuditLog( + handle_t hBinding, + LSAPR_HANDLE ObjectHandle) +{ + /* Deprecated */ + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 10 */ +NTSTATUS LsarCreateAccount( + handle_t hBinding, + PRPC_SID AccountSid, + ACCESS_MASK DesiredAccess, + LSAPR_HANDLE *AccountHandle) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 11 */ +NTSTATUS LsarEnumerateAccounts( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + DWORD *EnumerationContext, + PLSAPR_ACCOUNT_ENUM_BUFFER EnumerationBuffer, + DWORD PreferedMaximumLength) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 12 */ +NTSTATUS LsarCreateTrustedDomain( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PLSAPR_TRUST_INFORMATION TrustedDomainInformation, + ACCESS_MASK DesiredAccess, + LSAPR_HANDLE *TrustedDomainHandle) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 13 */ +NTSTATUS LsarEnumerateTrustedDomains( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + DWORD *EnumerationContext, + PLSAPR_TRUSTED_ENUM_BUFFER EnumerationBuffer, + DWORD PreferedMaximumLength) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 14 */ +NTSTATUS LsarLookupNames( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + DWORD Count, + PRPC_UNICODE_STRING Names, + PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + PLSAPR_TRANSLATED_SIDS TranslatedSids, + LSAP_LOOKUP_LEVEL LookupLevel, + DWORD *MappedCount) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 15 */ +NTSTATUS LsarLookupSids( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PLSAPR_SID_ENUM_BUFFER SidEnumBuffer, + PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + PLSAPR_TRANSLATED_NAMES TranslatedNames, + LSAP_LOOKUP_LEVEL LookupLevel, + DWORD *MappedCount) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 16 */ +NTSTATUS LsarCreateSecret( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_UNICODE_STRING SecretName, + ACCESS_MASK DesiredAccess, + LSAPR_HANDLE *SecretHandle) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 17 */ +NTSTATUS LsarOpenAccount( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_SID AccountSid, + ACCESS_MASK DesiredAccess, + LSAPR_HANDLE *AccountHandle) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 18 */ +NTSTATUS LsarEnumeratePrivilegesAccount( + handle_t hBinding, + LSAPR_HANDLE AccountHandle, + PLSAPR_PRIVILEGE_SET *Privileges) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 19 */ +NTSTATUS LsarAddPrivilegesToAccount( + handle_t hBinding, + LSAPR_HANDLE AccountHandle, + PLSAPR_PRIVILEGE_SET Privileges) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 20 */ +NTSTATUS LsarRemovePrivilegesFromAccount( + handle_t hBinding, + LSAPR_HANDLE AccountHandle, + BOOL AllPrivileges, + PLSAPR_PRIVILEGE_SET Privileges) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 21 */ +NTSTATUS LsarGetQuotasForAccount( + handle_t hBinding, + LSAPR_HANDLE AccountHandle, + PQUOTA_LIMITS QuotaLimits) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 22 */ +NTSTATUS LsarSetQuotasForAccount( + handle_t hBinding, + LSAPR_HANDLE AccountHandle, + PQUOTA_LIMITS QuotaLimits) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 23 */ +NTSTATUS LsarGetSystemAccessAccount( + handle_t hBinding, + LSAPR_HANDLE AccountHandle, + ACCESS_MASK *SystemAccess) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 24 */ +NTSTATUS LsarSetSystemAccessAccount( + handle_t hBinding, + LSAPR_HANDLE AccountHandle, + ACCESS_MASK SystemAccess) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 25 */ +NTSTATUS LsarOpenTrustedDomain( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_SID TrustedDomainSid, + ACCESS_MASK DesiredAccess, + LSAPR_HANDLE *TrustedDomainHandle) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 26 */ +NTSTATUS LsarQueryInfoTrustedDomain( + handle_t hBinding, + LSAPR_HANDLE TrustedDomainHandle, + TRUSTED_INFORMATION_CLASS InformationClass, + PLSAPR_TRUSTED_DOMAIN_INFO *TrustedDomainInformation) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 27 */ +NTSTATUS LsarSetInformationTrustedDomain( + handle_t hBinding, + LSAPR_HANDLE TrustedDomainHandle, + TRUSTED_INFORMATION_CLASS InformationClass, + PLSAPR_TRUSTED_DOMAIN_INFO TrustedDomainInformation) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 28 */ +NTSTATUS LsarOpenSecret( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_UNICODE_STRING SecretName, + ACCESS_MASK DesiredAccess, + LSAPR_HANDLE *SecretHandle) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 29 */ +NTSTATUS LsarSetSecret( + handle_t hBinding, + LSAPR_HANDLE *SecretHandle, + PLSAPR_CR_CIPHER_VALUE EncryptedCurrentValue, + PLSAPR_CR_CIPHER_VALUE EncryptedOldValue) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 30 */ +NTSTATUS LsarQuerySecret( + handle_t hBinding, + LSAPR_HANDLE SecretHandle, + PLSAPR_CR_CIPHER_VALUE *EncryptedCurrentValue, + PLARGE_INTEGER CurrentValueSetTime, + PLSAPR_CR_CIPHER_VALUE *EncryptedOldValue, + PLARGE_INTEGER OldValueSetTime) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 31 */ +NTSTATUS LsarLookupPrivilegeValue( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_UNICODE_STRING Name, + PLUID Value) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 32 */ +NTSTATUS LsarLookupPrivilegeName( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PLUID Value, + PRPC_UNICODE_STRING *Name) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 33 */ +NTSTATUS LsarLookupPrivilegeDisplayName( + handle_t hBinding, + USHORT *LanguageReturned) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 34 */ +NTSTATUS LsarDeleteObject( + handle_t hBinding, + LSAPR_HANDLE *ObjectHandle) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 35 */ +NTSTATUS LsarEnumerateAccountsWithUserRight( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_UNICODE_STRING UserRight, + PLSAPR_ACCOUNT_ENUM_BUFFER EnumerationBuffer) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 36 */ +NTSTATUS LsarEnmuerateAccountRights( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_SID AccountSid, + PLSAPR_USER_RIGHT_SET UserRights) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 37 */ +NTSTATUS LsarAddAccountRights( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_SID AccountSid, + PLSAPR_USER_RIGHT_SET UserRights) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 38 */ +NTSTATUS LsarRemoveAccountRights( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_SID AccountSid, + BOOL AllRights, + PLSAPR_USER_RIGHT_SET UserRights) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 39 */ +NTSTATUS LsarQueryTrustedDomainInfo( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_SID TrustedDomainSid, + TRUSTED_INFORMATION_CLASS InformationClass, + PLSAPR_TRUSTED_DOMAIN_INFO *TrustedDomainInformation) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 40 */ +NTSTATUS LsarSetTrustedDomainInfo( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_SID TrustedDomainSid, + TRUSTED_INFORMATION_CLASS InformationClass, + PLSAPR_TRUSTED_DOMAIN_INFO TrustedDomainInformation) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 41 */ +NTSTATUS LsarDeleteTrustedDomain( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_SID TrustedDomainSid) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 42 */ +NTSTATUS LsarStorePrivateData( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_UNICODE_STRING KeyName, + PLSAPR_CR_CIPHER_VALUE EncryptedData) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 43 */ +NTSTATUS LsarRetrievePrivateData( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_UNICODE_STRING KeyName, + PLSAPR_CR_CIPHER_VALUE *EncryptedData) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 44 */ +NTSTATUS LsarOpenPolicy2( + handle_t hBinding, + LPWSTR SystemName, + PLSAPR_OBJECT_ATTRIBUTES ObjectAttributes, + ACCESS_MASK DesiredAccess, + LSAPR_HANDLE *PolicyHandle) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 45 */ +NTSTATUS LsarGetUserName( + handle_t hBinding, + LPWSTR SystemName, + PRPC_UNICODE_STRING *UserName, + PRPC_UNICODE_STRING *DomainName) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 46 */ +NTSTATUS LsarQueryInformationPolicy2( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + POLICY_INFORMATION_CLASS InformationClass, + unsigned long *PolicyInformation) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 47 */ +NTSTATUS LsarSetInformationPolicy2( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + POLICY_INFORMATION_CLASS InformationClass, + unsigned long PolicyInformation) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 48 */ +NTSTATUS LsarQueryTrustedDomainInfoByName( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_UNICODE_STRING TrustedDomainName, + POLICY_INFORMATION_CLASS InformationClass, + unsigned long *PolicyInformation) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 49 */ +NTSTATUS LsarSetTrustedDomainInfoByName( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_UNICODE_STRING TrustedDomainName, + POLICY_INFORMATION_CLASS InformationClass, + unsigned long PolicyInformation) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 50 */ +NTSTATUS LsarEnumerateTrustedDomainsEx( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + DWORD *EnumerationContext, + PLSAPR_TRUSTED_ENUM_BUFFER_EX EnumerationBuffer, + DWORD PreferedMaximumLength) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 51 */ +NTSTATUS LsarCreateTrustedDomainEx( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation, + PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION AuthentificationInformation, + ACCESS_MASK DesiredAccess, + LSAPR_HANDLE *TrustedDomainHandle) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 52 */ +NTSTATUS LsarSetPolicyReplicationHandle( + handle_t hBinding, + PLSAPR_HANDLE PolicyHandle) +{ + /* Deprecated */ + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 53 */ +NTSTATUS LsarQueryDomainInformationPolicy( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + POLICY_INFORMATION_CLASS InformationClass, + unsigned long *PolicyInformation) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 54 */ +NTSTATUS LsarSetDomainInformationPolicy( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + POLICY_INFORMATION_CLASS InformationClass, + unsigned long PolicyInformation) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 55 */ +NTSTATUS LsarOpenTrustedDomainByName( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_UNICODE_STRING TrustedDomainName, + ACCESS_MASK DesiredAccess, + LSAPR_HANDLE *TrustedDomainHandle) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 56 */ +NTSTATUS LsarTestCall( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 57 */ +NTSTATUS LsarLookupSids2( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PLSAPR_SID_ENUM_BUFFER SidEnumBuffer, + PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + PLSAPR_TRANSLATED_NAMES_EX TranslatedNames, + LSAP_LOOKUP_LEVEL LookupLevel, + DWORD *MappedCount, + DWORD LookupOptions, + DWORD ClientRevision) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 58 */ +NTSTATUS LsarLookupNames2( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + DWORD Count, + PRPC_UNICODE_STRING Names, + PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + PLSAPR_TRANSLATED_SID_EX TranslatedSids, + LSAP_LOOKUP_LEVEL LookupLevel, + DWORD *MappedCount, + DWORD LookupOptions, + DWORD ClientRevision) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 59 */ +NTSTATUS LsarCreateTrustedDomainEx2( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation, + PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION_INTERNAL AuthentificationInformation, + ACCESS_MASK DesiredAccess, + LSAPR_HANDLE *TrustedDomainHandle) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 60 */ +NTSTATUS CredrWrite( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 61 */ +NTSTATUS CredrRead( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 62 */ +NTSTATUS CredrEnumerate( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 63 */ +NTSTATUS CredrWriteDomainCredentials( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 64 */ +NTSTATUS CredrReadDomainCredentials( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 65 */ +NTSTATUS CredrDelete( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 66 */ +NTSTATUS CredrGetTargetInfo( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 67 */ +NTSTATUS CredrProfileLoaded( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 68 */ +NTSTATUS LsarLookupNames3( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + DWORD Count, + PRPC_UNICODE_STRING Names, + PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + PLSAPR_TRANSLATED_SID_EX2 TranslatedSids, + LSAP_LOOKUP_LEVEL LookupLevel, + DWORD *MappedCount, + DWORD LookupOptions, + DWORD ClientRevision) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 69 */ +NTSTATUS CredrGetSessionTypes( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 70 */ +NTSTATUS LsarRegisterAuditEvent( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 71 */ +NTSTATUS LsarGenAuditEvent( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 72 */ +NTSTATUS LsarUnregisterAuditEvent( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 73 */ +NTSTATUS LsarQueryForestTrustInformation( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PLSA_UNICODE_STRING TrustedDomainName, + LSA_FOREST_TRUST_RECORD_TYPE HighestRecordType, + PLSA_FOREST_TRUST_INFORMATION *ForestTrustInfo) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 74 */ +NTSTATUS LsarSetForestTrustInformation( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PLSA_UNICODE_STRING TrustedDomainName, + LSA_FOREST_TRUST_RECORD_TYPE HighestRecordType, + PLSA_FOREST_TRUST_INFORMATION ForestTrustInfo, + BOOL CheckOnly, + PLSA_FOREST_TRUST_COLLISION_INFORMATION *CollisionInfo) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 75 */ +NTSTATUS CredrRename( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 76 */ +NTSTATUS LsarLookupSids3( + handle_t hBinding, + PLSAPR_SID_ENUM_BUFFER SidEnumBuffer, + PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + PLSAPR_TRANSLATED_NAMES_EX TranslatedNames, + LSAP_LOOKUP_LEVEL LookupLevel, + DWORD *MappedCount, + DWORD LookupOptions, + DWORD ClientRevision) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 77 */ +NTSTATUS LsarLookupNames4( + handle_t hBinding, + handle_t RpcHandle, + DWORD Count, + PRPC_UNICODE_STRING Names, + PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + PLSAPR_TRANSLATED_SID_EX2 TranslatedSids, + LSAP_LOOKUP_LEVEL LookupLevel, + DWORD *MappedCount, + DWORD LookupOptions, + DWORD ClientRevision) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 78 */ +NTSTATUS LsarOpenPolicySce( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 79 */ +NTSTATUS LsarAdtRegisterSecurityEventSource( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 80 */ +NTSTATUS LsarAdtUnregisterSecurityEventSource( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 81 */ +NTSTATUS LsarAdtReportSecurityEvent( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + /* EOF */ diff --git a/reactos/dll/win32/lsasrv/lsasrv.rbuild b/reactos/dll/win32/lsasrv/lsasrv.rbuild index b87a23a0681..8f1757c9e76 100644 --- a/reactos/dll/win32/lsasrv/lsasrv.rbuild +++ b/reactos/dll/win32/lsasrv/lsasrv.rbuild @@ -5,9 +5,10 @@ 0x600 0x0600 lsa_server - ntdll + wine kernel32 rpcrt4 + ntdll pseh lsarpc.c lsasrv.c diff --git a/reactos/dll/win32/mmdrv/common.c b/reactos/dll/win32/mmdrv/common.c index 0bc5ca2586d..8d64b2ff496 100644 --- a/reactos/dll/win32/mmdrv/common.c +++ b/reactos/dll/win32/mmdrv/common.c @@ -1,258 +1,258 @@ -/* - * - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS Multimedia - * FILE: dll/win32/mmdrv/common.c - * PURPOSE: Multimedia User Mode Driver (Common functions) - * PROGRAMMER: Andrew Greenwood - * UPDATE HISTORY: - * Jan 14, 2007: Created - */ - -#include - -/* - Translates errors to MMRESULT codes. -*/ - -MMRESULT -ErrorToMmResult(UINT error_code) -{ - switch ( error_code ) - { - case NO_ERROR : - case ERROR_IO_PENDING : - return MMSYSERR_NOERROR; - - case ERROR_BUSY : - return MMSYSERR_ALLOCATED; - - case ERROR_NOT_SUPPORTED : - case ERROR_INVALID_FUNCTION : - return MMSYSERR_NOTSUPPORTED; - - case ERROR_NOT_ENOUGH_MEMORY : - return MMSYSERR_NOMEM; - - case ERROR_ACCESS_DENIED : - return MMSYSERR_BADDEVICEID; - - case ERROR_INSUFFICIENT_BUFFER : - return MMSYSERR_INVALPARAM; - }; - - /* If all else fails, it's just a plain old error */ - - return MMSYSERR_ERROR; -} - - -/* - Obtains a device count for a specific kind of device. -*/ - -DWORD -GetDeviceCount(DeviceType device_type) -{ - UINT index = 0; - HANDLE handle; - - /* Cycle through devices until an error occurs */ - - while ( OpenKernelDevice(device_type, index, GENERIC_READ, &handle) == MMSYSERR_NOERROR ) - { - CloseHandle(handle); - index ++; - } - - DPRINT("Found %d devices of type %d\n", index, device_type); - - return index; -} - - -/* - Obtains device capabilities. This could either be done as individual - functions for wave, MIDI and aux, or like this. I chose this method as - it centralizes everything. -*/ - -DWORD -GetDeviceCapabilities( - DeviceType device_type, - DWORD device_id, - PVOID capabilities, - DWORD capabilities_size) -{ - MMRESULT result; - DWORD ioctl; - HANDLE handle; - DWORD bytes_returned; - BOOL device_io_result; - - ASSERT(capabilities); - - /* Choose the right IOCTL for the job */ - - if ( IsWaveDevice(device_type) ) - ioctl = IOCTL_WAVE_GET_CAPABILITIES; - else if ( IsMidiDevice(device_type) ) - ioctl = IOCTL_MIDI_GET_CAPABILITIES; - else if ( IsAuxDevice(device_type) ) - return MMSYSERR_NOTSUPPORTED; /* TODO */ - else - return MMSYSERR_NOTSUPPORTED; - - result = OpenKernelDevice(device_type, - device_id, - GENERIC_READ, - &handle); - - if ( result != MMSYSERR_NOERROR ) - { - DPRINT("Failed to open kernel device\n"); - return result; - } - - device_io_result = DeviceIoControl(handle, - ioctl, - NULL, - 0, - (LPVOID) capabilities, - capabilities_size, - &bytes_returned, - NULL); - - /* Translate result */ - - if ( device_io_result ) - result = MMSYSERR_NOERROR; - else - result = ErrorToMmResult(GetLastError()); - - /* Clean up and return */ - - CloseKernelDevice(handle); - - return result; -} - - -/* - A wrapper around OpenKernelDevice that creates a session, - opens the kernel device, initializes session data and notifies - the client (application) that the device has been opened. Again, - this supports any device type and the only real difference is - the open descriptor. -*/ - -DWORD -OpenDevice( - DeviceType device_type, - DWORD device_id, - PVOID open_descriptor, - DWORD flags, - DWORD private_handle) -{ - SessionInfo* session_info; - MMRESULT result; - DWORD message; - - /* This will automatically check for duplicate sessions */ - result = CreateSession(device_type, device_id, &session_info); - - if ( result != MMSYSERR_NOERROR ) - { - DPRINT("Couldn't allocate session info\n"); - return result; - } - - result = OpenKernelDevice(device_type, - device_id, - GENERIC_READ, - &session_info->kernel_device_handle); - - if ( result != MMSYSERR_NOERROR ) - { - DPRINT("Failed to open kernel device\n"); - DestroySession(session_info); - return result; - } - - /* Set common session data */ - - session_info->flags = flags; - - /* Set wave/MIDI specific data */ - - if ( IsWaveDevice(device_type) ) - { - LPWAVEOPENDESC wave_open_desc = (LPWAVEOPENDESC) open_descriptor; - session_info->callback = wave_open_desc->dwCallback; - session_info->mme_wave_handle = wave_open_desc->hWave; - session_info->app_user_data = wave_open_desc->dwInstance; - } - else - { - DPRINT("Only wave devices are supported at present!\n"); - DestroySession(session_info); - return MMSYSERR_NOTSUPPORTED; - } - - /* Start the processing thread */ - - result = StartSessionThread(session_info); - - if ( result != MMSYSERR_NOERROR ) - { - DestroySession(session_info); - return result; - } - - /* Store the session info */ - - *((SessionInfo**)private_handle) = session_info; - - /* Send the right message */ - - message = (device_type == WaveOutDevice) ? WOM_OPEN : - (device_type == WaveInDevice) ? WIM_OPEN : - (device_type == MidiOutDevice) ? MOM_OPEN : - (device_type == MidiInDevice) ? MIM_OPEN : 0xFFFFFFFF; - - NotifyClient(session_info, message, 0, 0); - - return MMSYSERR_NOERROR; -} - - -/* - Attempts to close a device. This can fail if playback/recording has - not been stopped. We need to make sure it's safe to destroy the - session as well (mainly by killing the session thread.) -*/ - -DWORD -CloseDevice( - DWORD private_handle) -{ - MMRESULT result; - SessionInfo* session_info = (SessionInfo*) private_handle; - /* TODO: Maybe this is best off inside the playback thread? */ - - ASSERT(session_info); - - result = CallSessionThread(session_info, WODM_CLOSE, 0); - - if ( result == MMSYSERR_NOERROR ) - { - /* TODO: Wait for it to be safe to terminate */ - - CloseKernelDevice(session_info->kernel_device_handle); - - DestroySession(session_info); - } - - return result; -} - +/* + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Multimedia + * FILE: dll/win32/mmdrv/common.c + * PURPOSE: Multimedia User Mode Driver (Common functions) + * PROGRAMMER: Andrew Greenwood + * UPDATE HISTORY: + * Jan 14, 2007: Created + */ + +#include + +/* + Translates errors to MMRESULT codes. +*/ + +MMRESULT +ErrorToMmResult(UINT error_code) +{ + switch ( error_code ) + { + case NO_ERROR : + case ERROR_IO_PENDING : + return MMSYSERR_NOERROR; + + case ERROR_BUSY : + return MMSYSERR_ALLOCATED; + + case ERROR_NOT_SUPPORTED : + case ERROR_INVALID_FUNCTION : + return MMSYSERR_NOTSUPPORTED; + + case ERROR_NOT_ENOUGH_MEMORY : + return MMSYSERR_NOMEM; + + case ERROR_ACCESS_DENIED : + return MMSYSERR_BADDEVICEID; + + case ERROR_INSUFFICIENT_BUFFER : + return MMSYSERR_INVALPARAM; + }; + + /* If all else fails, it's just a plain old error */ + + return MMSYSERR_ERROR; +} + + +/* + Obtains a device count for a specific kind of device. +*/ + +DWORD +GetDeviceCount(DeviceType device_type) +{ + UINT index = 0; + HANDLE handle; + + /* Cycle through devices until an error occurs */ + + while ( OpenKernelDevice(device_type, index, GENERIC_READ, &handle) == MMSYSERR_NOERROR ) + { + CloseHandle(handle); + index ++; + } + + DPRINT("Found %d devices of type %d\n", index, device_type); + + return index; +} + + +/* + Obtains device capabilities. This could either be done as individual + functions for wave, MIDI and aux, or like this. I chose this method as + it centralizes everything. +*/ + +DWORD +GetDeviceCapabilities( + DeviceType device_type, + DWORD device_id, + PVOID capabilities, + DWORD capabilities_size) +{ + MMRESULT result; + DWORD ioctl; + HANDLE handle; + DWORD bytes_returned; + BOOL device_io_result; + + ASSERT(capabilities); + + /* Choose the right IOCTL for the job */ + + if ( IsWaveDevice(device_type) ) + ioctl = IOCTL_WAVE_GET_CAPABILITIES; + else if ( IsMidiDevice(device_type) ) + ioctl = IOCTL_MIDI_GET_CAPABILITIES; + else if ( IsAuxDevice(device_type) ) + return MMSYSERR_NOTSUPPORTED; /* TODO */ + else + return MMSYSERR_NOTSUPPORTED; + + result = OpenKernelDevice(device_type, + device_id, + GENERIC_READ, + &handle); + + if ( result != MMSYSERR_NOERROR ) + { + DPRINT("Failed to open kernel device\n"); + return result; + } + + device_io_result = DeviceIoControl(handle, + ioctl, + NULL, + 0, + (LPVOID) capabilities, + capabilities_size, + &bytes_returned, + NULL); + + /* Translate result */ + + if ( device_io_result ) + result = MMSYSERR_NOERROR; + else + result = ErrorToMmResult(GetLastError()); + + /* Clean up and return */ + + CloseKernelDevice(handle); + + return result; +} + + +/* + A wrapper around OpenKernelDevice that creates a session, + opens the kernel device, initializes session data and notifies + the client (application) that the device has been opened. Again, + this supports any device type and the only real difference is + the open descriptor. +*/ + +DWORD +OpenDevice( + DeviceType device_type, + DWORD device_id, + PVOID open_descriptor, + DWORD flags, + DWORD private_handle) +{ + SessionInfo* session_info; + MMRESULT result; + DWORD message; + + /* This will automatically check for duplicate sessions */ + result = CreateSession(device_type, device_id, &session_info); + + if ( result != MMSYSERR_NOERROR ) + { + DPRINT("Couldn't allocate session info\n"); + return result; + } + + result = OpenKernelDevice(device_type, + device_id, + GENERIC_READ, + &session_info->kernel_device_handle); + + if ( result != MMSYSERR_NOERROR ) + { + DPRINT("Failed to open kernel device\n"); + DestroySession(session_info); + return result; + } + + /* Set common session data */ + + session_info->flags = flags; + + /* Set wave/MIDI specific data */ + + if ( IsWaveDevice(device_type) ) + { + LPWAVEOPENDESC wave_open_desc = (LPWAVEOPENDESC) open_descriptor; + session_info->callback = wave_open_desc->dwCallback; + session_info->mme_wave_handle = wave_open_desc->hWave; + session_info->app_user_data = wave_open_desc->dwInstance; + } + else + { + DPRINT("Only wave devices are supported at present!\n"); + DestroySession(session_info); + return MMSYSERR_NOTSUPPORTED; + } + + /* Start the processing thread */ + + result = StartSessionThread(session_info); + + if ( result != MMSYSERR_NOERROR ) + { + DestroySession(session_info); + return result; + } + + /* Store the session info */ + + *((SessionInfo**)private_handle) = session_info; + + /* Send the right message */ + + message = (device_type == WaveOutDevice) ? WOM_OPEN : + (device_type == WaveInDevice) ? WIM_OPEN : + (device_type == MidiOutDevice) ? MOM_OPEN : + (device_type == MidiInDevice) ? MIM_OPEN : 0xFFFFFFFF; + + NotifyClient(session_info, message, 0, 0); + + return MMSYSERR_NOERROR; +} + + +/* + Attempts to close a device. This can fail if playback/recording has + not been stopped. We need to make sure it's safe to destroy the + session as well (mainly by killing the session thread.) +*/ + +DWORD +CloseDevice( + DWORD private_handle) +{ + MMRESULT result; + SessionInfo* session_info = (SessionInfo*) private_handle; + /* TODO: Maybe this is best off inside the playback thread? */ + + ASSERT(session_info); + + result = CallSessionThread(session_info, WODM_CLOSE, 0); + + if ( result == MMSYSERR_NOERROR ) + { + /* TODO: Wait for it to be safe to terminate */ + + CloseKernelDevice(session_info->kernel_device_handle); + + DestroySession(session_info); + } + + return result; +} + diff --git a/reactos/dll/win32/mmdrv/entry.c b/reactos/dll/win32/mmdrv/entry.c index a5131a70125..6edb1a270f8 100644 --- a/reactos/dll/win32/mmdrv/entry.c +++ b/reactos/dll/win32/mmdrv/entry.c @@ -22,7 +22,7 @@ In summary, we just implement to satisfy the MME API (winmm) requirements. */ -LONG +LONG WINAPI DriverProc( DWORD driver_id, HANDLE driver_handle, diff --git a/reactos/dll/win32/mmdrv/kernel.c b/reactos/dll/win32/mmdrv/kernel.c index 19a45522c3d..efba1fce75a 100644 --- a/reactos/dll/win32/mmdrv/kernel.c +++ b/reactos/dll/win32/mmdrv/kernel.c @@ -1,206 +1,206 @@ -/* - * - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS Multimedia - * FILE: dll/win32/mmdrv/kernel.c - * PURPOSE: Multimedia User Mode Driver (kernel interface) - * PROGRAMMER: Andrew Greenwood - * UPDATE HISTORY: - * Jan 14, 2007: Created - */ - -#include - -/* - Devices that we provide access to follow a standard naming convention. - The first wave output, for example, appears as \Device\WaveOut0 - - I'm not entirely certain how drivers find a free name to use, or why - we need to strip the leading \Device from it when opening, but hey... -*/ - -MMRESULT -CobbleDeviceName( - DeviceType device_type, - DWORD device_id, - PWCHAR out_device_name) -{ - WCHAR base_device_name[MAX_DEVICE_NAME_LENGTH]; - - /* Work out the base name from the device type */ - - switch ( device_type ) - { - case WaveOutDevice : - wsprintf(base_device_name, L"%ls", WAVE_OUT_DEVICE_NAME); - break; - - case WaveInDevice : - wsprintf(base_device_name, L"%ls", WAVE_IN_DEVICE_NAME); - break; - - case MidiOutDevice : - wsprintf(base_device_name, L"%ls", MIDI_OUT_DEVICE_NAME); - break; - - case MidiInDevice : - wsprintf(base_device_name, L"%ls", MIDI_IN_DEVICE_NAME); - break; - - case AuxDevice : - wsprintf(base_device_name, L"%ls", AUX_DEVICE_NAME); - break; - - default : - return MMSYSERR_BADDEVICEID; - }; - - /* Now append the device number, removing the leading \Device */ - - wsprintf(out_device_name, - L"\\\\.%ls%d", - base_device_name + strlen("\\Device"), - device_id); - - return MMSYSERR_NOERROR; -} - - -/* - Takes a device type (eg: WaveOutDevice), a device ID, desired access and - a pointer to a location that will store the handle of the opened "file" if - the function succeeds. - - The device type and ID are converted into a device name using the above - function. -*/ - -MMRESULT -OpenKernelDevice( - DeviceType device_type, - DWORD device_id, - DWORD access, - HANDLE* handle) -{ - MMRESULT result; - WCHAR device_name[MAX_DEVICE_NAME_LENGTH]; - DWORD open_flags = 0; - - ASSERT(handle); - - /* Glue the base device name and the ID together */ - - result = CobbleDeviceName(device_type, device_id, device_name); - - DPRINT("Opening kernel device %ls\n", device_name); - - if ( result != MMSYSERR_NOERROR ) - return result; - - /* We want overlapped I/O when writing */ - - if ( access != GENERIC_READ ) - open_flags = FILE_FLAG_OVERLAPPED; - - /* Now try opening... */ - - *handle = CreateFile(device_name, - access, - FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - open_flags, - NULL); - - if ( *handle == INVALID_HANDLE_VALUE ) - return ErrorToMmResult(GetLastError()); - - return MMSYSERR_NOERROR; -} - - -/* - Just an alias for the benefit of having a pair of functions ;) -*/ - -void -CloseKernelDevice(HANDLE device_handle) -{ - CloseHandle(device_handle); -} - - -MMRESULT -SetDeviceData( - HANDLE device_handle, - DWORD ioctl, - PBYTE input_buffer, - DWORD buffer_size) -{ - DPRINT("SetDeviceData\n"); - /* TODO */ - return 0; -} - - -MMRESULT -GetDeviceData( - HANDLE device_handle, - DWORD ioctl, - PBYTE output_buffer, - DWORD buffer_size) -{ - OVERLAPPED overlap; - DWORD bytes_returned; - BOOL success; - DWORD transfer; - - DPRINT("GetDeviceData\n"); - - memset(&overlap, 0, sizeof(overlap)); - - overlap.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); - - if ( ! overlap.hEvent ) - return MMSYSERR_NOMEM; - - success = DeviceIoControl(device_handle, - ioctl, - NULL, - 0, - output_buffer, - buffer_size, - &bytes_returned, - &overlap); - - if ( ! success ) - { - if ( GetLastError() == ERROR_IO_PENDING ) - { - if ( ! GetOverlappedResult(device_handle, &overlap, &transfer, TRUE) ) - { - CloseHandle(overlap.hEvent); - return ErrorToMmResult(GetLastError()); - } - } - else - { - CloseHandle(overlap.hEvent); - return ErrorToMmResult(GetLastError()); - } - } - - while ( TRUE ) - { - SetEvent(overlap.hEvent); - - if ( WaitForSingleObjectEx(overlap.hEvent, 0, TRUE) != WAIT_IO_COMPLETION ) - { - break; - } - } - - CloseHandle(overlap.hEvent); - - return MMSYSERR_NOERROR; -} +/* + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Multimedia + * FILE: dll/win32/mmdrv/kernel.c + * PURPOSE: Multimedia User Mode Driver (kernel interface) + * PROGRAMMER: Andrew Greenwood + * UPDATE HISTORY: + * Jan 14, 2007: Created + */ + +#include + +/* + Devices that we provide access to follow a standard naming convention. + The first wave output, for example, appears as \Device\WaveOut0 + + I'm not entirely certain how drivers find a free name to use, or why + we need to strip the leading \Device from it when opening, but hey... +*/ + +MMRESULT +CobbleDeviceName( + DeviceType device_type, + DWORD device_id, + PWCHAR out_device_name) +{ + WCHAR base_device_name[MAX_DEVICE_NAME_LENGTH]; + + /* Work out the base name from the device type */ + + switch ( device_type ) + { + case WaveOutDevice : + wsprintf(base_device_name, L"%ls", WAVE_OUT_DEVICE_NAME); + break; + + case WaveInDevice : + wsprintf(base_device_name, L"%ls", WAVE_IN_DEVICE_NAME); + break; + + case MidiOutDevice : + wsprintf(base_device_name, L"%ls", MIDI_OUT_DEVICE_NAME); + break; + + case MidiInDevice : + wsprintf(base_device_name, L"%ls", MIDI_IN_DEVICE_NAME); + break; + + case AuxDevice : + wsprintf(base_device_name, L"%ls", AUX_DEVICE_NAME); + break; + + default : + return MMSYSERR_BADDEVICEID; + }; + + /* Now append the device number, removing the leading \Device */ + + wsprintf(out_device_name, + L"\\\\.%ls%d", + base_device_name + strlen("\\Device"), + device_id); + + return MMSYSERR_NOERROR; +} + + +/* + Takes a device type (eg: WaveOutDevice), a device ID, desired access and + a pointer to a location that will store the handle of the opened "file" if + the function succeeds. + + The device type and ID are converted into a device name using the above + function. +*/ + +MMRESULT +OpenKernelDevice( + DeviceType device_type, + DWORD device_id, + DWORD access, + HANDLE* handle) +{ + MMRESULT result; + WCHAR device_name[MAX_DEVICE_NAME_LENGTH]; + DWORD open_flags = 0; + + ASSERT(handle); + + /* Glue the base device name and the ID together */ + + result = CobbleDeviceName(device_type, device_id, device_name); + + DPRINT("Opening kernel device %ls\n", device_name); + + if ( result != MMSYSERR_NOERROR ) + return result; + + /* We want overlapped I/O when writing */ + + if ( access != GENERIC_READ ) + open_flags = FILE_FLAG_OVERLAPPED; + + /* Now try opening... */ + + *handle = CreateFile(device_name, + access, + FILE_SHARE_WRITE, + NULL, + OPEN_EXISTING, + open_flags, + NULL); + + if ( *handle == INVALID_HANDLE_VALUE ) + return ErrorToMmResult(GetLastError()); + + return MMSYSERR_NOERROR; +} + + +/* + Just an alias for the benefit of having a pair of functions ;) +*/ + +void +CloseKernelDevice(HANDLE device_handle) +{ + CloseHandle(device_handle); +} + + +MMRESULT +SetDeviceData( + HANDLE device_handle, + DWORD ioctl, + PBYTE input_buffer, + DWORD buffer_size) +{ + DPRINT("SetDeviceData\n"); + /* TODO */ + return 0; +} + + +MMRESULT +GetDeviceData( + HANDLE device_handle, + DWORD ioctl, + PBYTE output_buffer, + DWORD buffer_size) +{ + OVERLAPPED overlap; + DWORD bytes_returned; + BOOL success; + DWORD transfer; + + DPRINT("GetDeviceData\n"); + + memset(&overlap, 0, sizeof(overlap)); + + overlap.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); + + if ( ! overlap.hEvent ) + return MMSYSERR_NOMEM; + + success = DeviceIoControl(device_handle, + ioctl, + NULL, + 0, + output_buffer, + buffer_size, + &bytes_returned, + &overlap); + + if ( ! success ) + { + if ( GetLastError() == ERROR_IO_PENDING ) + { + if ( ! GetOverlappedResult(device_handle, &overlap, &transfer, TRUE) ) + { + CloseHandle(overlap.hEvent); + return ErrorToMmResult(GetLastError()); + } + } + else + { + CloseHandle(overlap.hEvent); + return ErrorToMmResult(GetLastError()); + } + } + + while ( TRUE ) + { + SetEvent(overlap.hEvent); + + if ( WaitForSingleObjectEx(overlap.hEvent, 0, TRUE) != WAIT_IO_COMPLETION ) + { + break; + } + } + + CloseHandle(overlap.hEvent); + + return MMSYSERR_NOERROR; +} diff --git a/reactos/dll/win32/mmdrv/mmdrv.def b/reactos/dll/win32/mmdrv/mmdrv.def deleted file mode 100644 index d0900515a44..00000000000 --- a/reactos/dll/win32/mmdrv/mmdrv.def +++ /dev/null @@ -1,14 +0,0 @@ -; $Id$ -; -; mmdrv.def -; -; ReactOS Operating System -; -LIBRARY mmdrv.dll -EXPORTS -DriverProc@20 -;widMessage@20 -wodMessage@20 -;midMessage@20 -;modMessage@20 -;auxMessage@20 diff --git a/reactos/dll/win32/mmdrv/mmdrv.rbuild b/reactos/dll/win32/mmdrv/mmdrv.rbuild index 4cf783ba64b..77f8e598915 100644 --- a/reactos/dll/win32/mmdrv/mmdrv.rbuild +++ b/reactos/dll/win32/mmdrv/mmdrv.rbuild @@ -1,5 +1,5 @@ - + . ntdll @@ -13,4 +13,5 @@ common.c wave.c wave_io.c + mmdrv.spec diff --git a/reactos/dll/win32/mmdrv/mmdrv.spec b/reactos/dll/win32/mmdrv/mmdrv.spec new file mode 100644 index 00000000000..e5f942959bb --- /dev/null +++ b/reactos/dll/win32/mmdrv/mmdrv.spec @@ -0,0 +1,6 @@ +@ stdcall DriverProc(long ptr long long long) +;@ stdcall widMessage(long long long long long) +@ stdcall wodMessage(long long long long long) +;@ stdcall midMessage(long long long long long) +;@ stdcall modMessage(long long long long long) +;@ stdcall auxMessage(long long long long long) diff --git a/reactos/dll/win32/mmdrv/mme.c b/reactos/dll/win32/mmdrv/mme.c index 490668e12a7..82ca3e2755c 100644 --- a/reactos/dll/win32/mmdrv/mme.c +++ b/reactos/dll/win32/mmdrv/mme.c @@ -1,143 +1,143 @@ -/* - * - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS Multimedia - * FILE: dll/win32/mmdrv/mme.c - * PURPOSE: Multimedia User Mode Driver (MME Interface) - * PROGRAMMER: Andrew Greenwood - * Aleksey Bragin - * UPDATE HISTORY: - * Jan 14, 2007: Rewritten and tidied up - */ - -#include - -/* - Sends a message to the client (application), such as WOM_DONE. This - is just a wrapper around DriverCallback which translates the - parameters appropriately. -*/ - -BOOL -NotifyClient( - SessionInfo* session_info, - DWORD message, - DWORD parameter1, - DWORD parameter2) -{ - return DriverCallback(session_info->callback, - HIWORD(session_info->flags), - session_info->mme_handle, - message, - session_info->app_user_data, - parameter1, - parameter2); -} - - - -/* - MME Driver Entrypoint - Wave Output -*/ - -APIENTRY DWORD -wodMessage( - DWORD device_id, - DWORD message, - DWORD private_handle, - DWORD parameter1, - DWORD parameter2) -{ - switch ( message ) - { - /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p80.htm */ - case WODM_GETNUMDEVS : - DPRINT("WODM_GETNUMDEVS\n"); - return GetDeviceCount(WaveOutDevice); - - /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p6h.htm */ - case WODM_GETDEVCAPS : - DPRINT("WODM_GETDEVCAPS\n"); - return GetDeviceCapabilities(WaveOutDevice, - device_id, - (PVOID) parameter1, - parameter2); - - /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p85.htm */ - case WODM_OPEN : - { - WAVEOPENDESC* open_desc = (WAVEOPENDESC*) parameter1; - DPRINT("WODM_OPEN\n"); - - if ( parameter2 && WAVE_FORMAT_QUERY ) - return QueryWaveFormat(WaveOutDevice, open_desc->lpFormat); - else - return OpenDevice(WaveOutDevice, - device_id, - open_desc, - parameter2, - private_handle); - } - - /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p6g.htm */ - case WODM_CLOSE : - { - DPRINT("WODM_CLOSE\n"); - return CloseDevice(private_handle); - } - - /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p9w.htm */ - case WODM_WRITE : - { - DPRINT("WODM_WRITE\n"); - return WriteWaveBuffer(private_handle, - (PWAVEHDR) parameter1, - parameter2); - } - - /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p86.htm */ - case WODM_PAUSE : - { - DPRINT("WODM_PAUSE\n"); - return HandleBySessionThread(private_handle, message, 0); - } - - /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p89.htm */ - case WODM_RESTART : - { - DPRINT("WODM_RESTART\n"); - return HandleBySessionThread(private_handle, message, 0); - } - - /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p88.htm */ - case WODM_RESET : - { - DPRINT("WODM_RESET\n"); - return HandleBySessionThread(private_handle, message, 0); - } - - /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p83.htm */ -#if 0 - case WODM_GETPOS : - { - DPRINT("WODM_GETPOS\n"); - return GetPosition(private_handle, - (PMMTIME) parameter1, - parameter2); - } -#endif - - /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p6f.htm */ - case WODM_BREAKLOOP : - { - DPRINT("WODM_BREAKLOOP\n"); - return HandleBySessionThread(private_handle, message, 0); - } - - /* TODO: Others */ - } - - DPRINT("Unsupported message\n"); - return MMSYSERR_NOTSUPPORTED; -} +/* + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Multimedia + * FILE: dll/win32/mmdrv/mme.c + * PURPOSE: Multimedia User Mode Driver (MME Interface) + * PROGRAMMER: Andrew Greenwood + * Aleksey Bragin + * UPDATE HISTORY: + * Jan 14, 2007: Rewritten and tidied up + */ + +#include + +/* + Sends a message to the client (application), such as WOM_DONE. This + is just a wrapper around DriverCallback which translates the + parameters appropriately. +*/ + +BOOL +NotifyClient( + SessionInfo* session_info, + DWORD message, + DWORD parameter1, + DWORD parameter2) +{ + return DriverCallback(session_info->callback, + HIWORD(session_info->flags), + session_info->mme_handle, + message, + session_info->app_user_data, + parameter1, + parameter2); +} + + + +/* + MME Driver Entrypoint + Wave Output +*/ + +APIENTRY DWORD +wodMessage( + DWORD device_id, + DWORD message, + DWORD private_handle, + DWORD parameter1, + DWORD parameter2) +{ + switch ( message ) + { + /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p80.htm */ + case WODM_GETNUMDEVS : + DPRINT("WODM_GETNUMDEVS\n"); + return GetDeviceCount(WaveOutDevice); + + /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p6h.htm */ + case WODM_GETDEVCAPS : + DPRINT("WODM_GETDEVCAPS\n"); + return GetDeviceCapabilities(WaveOutDevice, + device_id, + (PVOID) parameter1, + parameter2); + + /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p85.htm */ + case WODM_OPEN : + { + WAVEOPENDESC* open_desc = (WAVEOPENDESC*) parameter1; + DPRINT("WODM_OPEN\n"); + + if ( parameter2 && WAVE_FORMAT_QUERY ) + return QueryWaveFormat(WaveOutDevice, open_desc->lpFormat); + else + return OpenDevice(WaveOutDevice, + device_id, + open_desc, + parameter2, + private_handle); + } + + /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p6g.htm */ + case WODM_CLOSE : + { + DPRINT("WODM_CLOSE\n"); + return CloseDevice(private_handle); + } + + /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p9w.htm */ + case WODM_WRITE : + { + DPRINT("WODM_WRITE\n"); + return WriteWaveBuffer(private_handle, + (PWAVEHDR) parameter1, + parameter2); + } + + /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p86.htm */ + case WODM_PAUSE : + { + DPRINT("WODM_PAUSE\n"); + return HandleBySessionThread(private_handle, message, 0); + } + + /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p89.htm */ + case WODM_RESTART : + { + DPRINT("WODM_RESTART\n"); + return HandleBySessionThread(private_handle, message, 0); + } + + /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p88.htm */ + case WODM_RESET : + { + DPRINT("WODM_RESET\n"); + return HandleBySessionThread(private_handle, message, 0); + } + + /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p83.htm */ +#if 0 + case WODM_GETPOS : + { + DPRINT("WODM_GETPOS\n"); + return GetPosition(private_handle, + (PMMTIME) parameter1, + parameter2); + } +#endif + + /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p6f.htm */ + case WODM_BREAKLOOP : + { + DPRINT("WODM_BREAKLOOP\n"); + return HandleBySessionThread(private_handle, message, 0); + } + + /* TODO: Others */ + } + + DPRINT("Unsupported message\n"); + return MMSYSERR_NOTSUPPORTED; +} diff --git a/reactos/dll/win32/mmdrv/mmioctl.h b/reactos/dll/win32/mmdrv/mmioctl.h index 5cdc5812b77..977b91540e4 100644 --- a/reactos/dll/win32/mmdrv/mmioctl.h +++ b/reactos/dll/win32/mmdrv/mmioctl.h @@ -1,147 +1,147 @@ -/* - * - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS Multimedia - * FILE: dll/win32/mmdrv/mmioctl.h - * PURPOSE: Multimedia system NT4 compatibility - * PROGRAMMER: Andrew Greenwood - * UPDATE HISTORY: - * Jan 13, 2007: Split from mmdrv.h - */ - -#ifndef MMDRV_IOCTLS -#define MMDRV_IOCTLS - - -#include -#include -#include -#include - - -/* - Base names of the supported devices, as provided by drivers running in - kernel mode. - - \Device\WaveIn0 etc. -*/ - -#define WAVE_OUT_DEVICE_NAME L"\\Device\\WaveOut" -#define WAVE_IN_DEVICE_NAME L"\\Device\\WaveIn" -#define MIDI_OUT_DEVICE_NAME L"\\Device\\MidiOut" -#define MIDI_IN_DEVICE_NAME L"\\Device\\MidiIn" -#define AUX_DEVICE_NAME L"\\Device\\MMAux" - - -/* - Base IOCTL codes -*/ - -#define IOCTL_SOUND_BASE FILE_DEVICE_SOUND -#define IOCTL_WAVE_BASE 0x0000 -#define IOCTL_MIDI_BASE 0x0080 -#define IOCTL_AUX_BASE 0x0100 - - -/* - Wave IOCTLs -*/ - -#define IOCTL_WAVE_QUERY_FORMAT \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) - -#define IOCTL_WAVE_SET_FORMAT \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0002, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_WAVE_GET_CAPABILITIES \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) - -#define IOCTL_WAVE_SET_STATE \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0004, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_WAVE_GET_STATE \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0005, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_WAVE_GET_POSITION \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0006, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_WAVE_SET_VOLUME \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS) - -#define IOCTL_WAVE_GET_VOLUME \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0008, METHOD_BUFFERED, FILE_READ_ACCESS) - -#define IOCTL_WAVE_SET_PITCH \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0009, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_WAVE_GET_PITCH \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000A, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_WAVE_SET_PLAYBACK_RATE \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000B, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_WAVE_GET_PLAYBACK_RATE \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000C, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_WAVE_PLAY \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000D, METHOD_IN_DIRECT, FILE_WRITE_ACCESS) - -#define IOCTL_WAVE_RECORD \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000E, METHOD_OUT_DIRECT, FILE_WRITE_ACCESS) - -#define IOCTL_WAVE_BREAK_LOOP \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000F, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_WAVE_SET_LOW_PRIORITY \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0010, METHOD_BUFFERED, FILE_WRITE_ACCESS) - - -/* - MIDI IOCTLs -*/ - -#define IOCTL_MIDI_GET_CAPABILITIES \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) - -#define IOCTL_MIDI_SET_STATE \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0002, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_MIDI_GET_STATE \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0003, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_MIDI_SET_VOLUME \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS) - -#define IOCTL_MIDI_GET_VOLUME \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS) - -#define IOCTL_MIDI_PLAY \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0006, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_MIDI_RECORD \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0007, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_MIDI_CACHE_PATCHES \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0008, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_MIDI_CACHE_DRUM_PATCHES \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0009, METHOD_BUFFERED, FILE_WRITE_ACCESS) - - -/* - Aux IOCTLs -*/ - -#define IOCTL_AUX_GET_CAPABILITIES \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) - -#define IOCTL_AUX_SET_VOLUME \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS) - -#define IOCTL_AUX_GET_VOLUME \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) - -#define IOCTL_SOUND_GET_CHANGED_VOLUME \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS) - -#endif +/* + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Multimedia + * FILE: dll/win32/mmdrv/mmioctl.h + * PURPOSE: Multimedia system NT4 compatibility + * PROGRAMMER: Andrew Greenwood + * UPDATE HISTORY: + * Jan 13, 2007: Split from mmdrv.h + */ + +#ifndef MMDRV_IOCTLS +#define MMDRV_IOCTLS + + +#include +#include +#include +#include + + +/* + Base names of the supported devices, as provided by drivers running in + kernel mode. + + \Device\WaveIn0 etc. +*/ + +#define WAVE_OUT_DEVICE_NAME L"\\Device\\WaveOut" +#define WAVE_IN_DEVICE_NAME L"\\Device\\WaveIn" +#define MIDI_OUT_DEVICE_NAME L"\\Device\\MidiOut" +#define MIDI_IN_DEVICE_NAME L"\\Device\\MidiIn" +#define AUX_DEVICE_NAME L"\\Device\\MMAux" + + +/* + Base IOCTL codes +*/ + +#define IOCTL_SOUND_BASE FILE_DEVICE_SOUND +#define IOCTL_WAVE_BASE 0x0000 +#define IOCTL_MIDI_BASE 0x0080 +#define IOCTL_AUX_BASE 0x0100 + + +/* + Wave IOCTLs +*/ + +#define IOCTL_WAVE_QUERY_FORMAT \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) + +#define IOCTL_WAVE_SET_FORMAT \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0002, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_WAVE_GET_CAPABILITIES \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) + +#define IOCTL_WAVE_SET_STATE \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0004, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_WAVE_GET_STATE \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0005, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_WAVE_GET_POSITION \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0006, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_WAVE_SET_VOLUME \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS) + +#define IOCTL_WAVE_GET_VOLUME \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0008, METHOD_BUFFERED, FILE_READ_ACCESS) + +#define IOCTL_WAVE_SET_PITCH \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0009, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_WAVE_GET_PITCH \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000A, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_WAVE_SET_PLAYBACK_RATE \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000B, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_WAVE_GET_PLAYBACK_RATE \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000C, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_WAVE_PLAY \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000D, METHOD_IN_DIRECT, FILE_WRITE_ACCESS) + +#define IOCTL_WAVE_RECORD \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000E, METHOD_OUT_DIRECT, FILE_WRITE_ACCESS) + +#define IOCTL_WAVE_BREAK_LOOP \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000F, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_WAVE_SET_LOW_PRIORITY \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0010, METHOD_BUFFERED, FILE_WRITE_ACCESS) + + +/* + MIDI IOCTLs +*/ + +#define IOCTL_MIDI_GET_CAPABILITIES \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) + +#define IOCTL_MIDI_SET_STATE \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0002, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_MIDI_GET_STATE \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0003, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_MIDI_SET_VOLUME \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS) + +#define IOCTL_MIDI_GET_VOLUME \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS) + +#define IOCTL_MIDI_PLAY \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0006, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_MIDI_RECORD \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0007, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_MIDI_CACHE_PATCHES \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0008, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_MIDI_CACHE_DRUM_PATCHES \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0009, METHOD_BUFFERED, FILE_WRITE_ACCESS) + + +/* + Aux IOCTLs +*/ + +#define IOCTL_AUX_GET_CAPABILITIES \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) + +#define IOCTL_AUX_SET_VOLUME \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS) + +#define IOCTL_AUX_GET_VOLUME \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) + +#define IOCTL_SOUND_GET_CHANGED_VOLUME \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS) + +#endif diff --git a/reactos/dll/win32/mmdrv/session.c b/reactos/dll/win32/mmdrv/session.c index 87b71deba25..b9d63e7d9b5 100644 --- a/reactos/dll/win32/mmdrv/session.c +++ b/reactos/dll/win32/mmdrv/session.c @@ -1,245 +1,245 @@ -/* - * - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS Multimedia - * FILE: dll/win32/mmdrv/session.c - * PURPOSE: Multimedia User Mode Driver (session management) - * PROGRAMMER: Andrew Greenwood - * UPDATE HISTORY: - * Jan 14, 2007: Created - */ - -#include - -/* Each session is tracked, but the list must be locked when in use */ - -SessionInfo* session_list = NULL; -CRITICAL_SECTION session_lock; - - -/* - Obtains a pointer to the session associated with a device type and ID. - If no session exists, returns NULL. This is mainly used to see if a - session already exists prior to creating a new one. -*/ - -SessionInfo* -GetSession( - DeviceType device_type, - DWORD device_id) -{ - SessionInfo* session_info; - - EnterCriticalSection(&session_lock); - session_info = session_list; - - while ( session_info ) - { - if ( ( session_info->device_type == device_type ) && - ( session_info->device_id == device_id ) ) - { - LeaveCriticalSection(&session_lock); - return session_info; - } - - session_info = session_info->next; - } - - LeaveCriticalSection(&session_lock); - return NULL; -} - - -/* - Creates a new session, associated with the specified device type and ID. - Whilst the session list is locked, this also checks to see if an existing - session is associated with the device. -*/ - -MMRESULT -CreateSession( - DeviceType device_type, - DWORD device_id, - SessionInfo** session_info) -{ - HANDLE heap = GetProcessHeap(); - - ASSERT(session_info); - - EnterCriticalSection(&session_lock); - - /* Ensure we're not creating a duplicate session */ - - if ( GetSession(device_type, device_id) ) - { - DPRINT("Already allocated session\n"); - LeaveCriticalSection(&session_lock); - return MMSYSERR_ALLOCATED; - } - - *session_info = HeapAlloc(heap, HEAP_ZERO_MEMORY, sizeof(SessionInfo)); - - if ( ! *session_info ) - { - DPRINT("Failed to allocate mem for session info\n"); - LeaveCriticalSection(&session_lock); - return MMSYSERR_NOMEM; - } - - (*session_info)->device_type = device_type; - (*session_info)->device_id = device_id; - - /* Add to the list */ - - (*session_info)->next = session_list; - session_list = *session_info; - - LeaveCriticalSection(&session_lock); - - return MMSYSERR_NOERROR; -} - - -/* - Removes a session from the list and destroys it. This function does NOT - perform any additional cleanup. Think of it as a slightly more advanced - free() -*/ - -VOID -DestroySession(SessionInfo* session) -{ - HANDLE heap = GetProcessHeap(); - SessionInfo* session_node; - SessionInfo* session_prev; - - /* TODO: More cleanup stuff */ - - /* Remove from the list */ - - EnterCriticalSection(&session_lock); - - session_node = session_list; - session_prev = NULL; - - while ( session_node ) - { - if ( session_node == session ) - { - /* Bridge the gap for when we go */ - session_prev->next = session->next; - break; - } - - /* Save the previous node, fetch the next */ - session_prev = session_node; - session_node = session_node->next; - } - - LeaveCriticalSection(&session_lock); - - HeapFree(heap, 0, session); -} - - -/* - Allocates events and other resources for the session thread, starts it, - and waits for it to announce that it is ready to work for us. -*/ - -MMRESULT -StartSessionThread(SessionInfo* session_info) -{ - LPTASKCALLBACK task; - MMRESULT result; - - ASSERT(session_info); - - /* This is our "ready" event, sent when the thread is idle */ - - session_info->thread.ready_event = CreateEvent(NULL, FALSE, FALSE, NULL); - - if ( ! session_info->thread.ready_event ) - { - DPRINT("Couldn't create thread_ready event\n"); - return MMSYSERR_NOMEM; - } - - /* This is our "go" event, sent when we want the thread to do something */ - - session_info->thread.go_event = CreateEvent(NULL, FALSE, FALSE, NULL); - - if ( ! session_info->thread.go_event ) - { - DPRINT("Couldn't create thread_go event\n"); - CloseHandle(session_info->thread.ready_event); - return MMSYSERR_NOMEM; - } - - /* TODO - other kinds of devices need attention, too */ - task = ( session_info->device_type == WaveOutDevice ) - ? (LPTASKCALLBACK) WaveThread : NULL; - - ASSERT(task); - - /* Effectively, this is a beefed-up CreateThread */ - - result = mmTaskCreate(task, - &session_info->thread.handle, - (DWORD) session_info); - - if ( result != MMSYSERR_NOERROR ) - { - DPRINT("Task creation failed\n"); - CloseHandle(session_info->thread.ready_event); - CloseHandle(session_info->thread.go_event); - return result; - } - - /* Wait for the thread to be ready before completing */ - - WaitForSingleObject(session_info->thread.ready_event, INFINITE); - - return MMSYSERR_NOERROR; -} - - -/* - The session thread is pretty simple. Upon creation, it announces that it - is ready to do stuff for us. When we want it to perform an action, we use - CallSessionThread with an appropriate function and parameter, then tell - the thread we want it to do something. When it's finished, it announces - that it is ready once again. -*/ - -MMRESULT -CallSessionThread( - SessionInfo* session_info, - ThreadFunction function, - PVOID thread_parameter) -{ - ASSERT(session_info); - - session_info->thread.function = function; - session_info->thread.parameter = thread_parameter; - - DPRINT("Calling session thread\n"); - SetEvent(session_info->thread.go_event); - - DPRINT("Waiting for thread response\n"); - WaitForSingleObject(session_info->thread.ready_event, INFINITE); - - return session_info->thread.result; -} - - -DWORD -HandleBySessionThread( - DWORD private_handle, - DWORD message, - DWORD parameter) -{ - return CallSessionThread((SessionInfo*) private_handle, - message, - (PVOID) parameter); -} +/* + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Multimedia + * FILE: dll/win32/mmdrv/session.c + * PURPOSE: Multimedia User Mode Driver (session management) + * PROGRAMMER: Andrew Greenwood + * UPDATE HISTORY: + * Jan 14, 2007: Created + */ + +#include + +/* Each session is tracked, but the list must be locked when in use */ + +SessionInfo* session_list = NULL; +CRITICAL_SECTION session_lock; + + +/* + Obtains a pointer to the session associated with a device type and ID. + If no session exists, returns NULL. This is mainly used to see if a + session already exists prior to creating a new one. +*/ + +SessionInfo* +GetSession( + DeviceType device_type, + DWORD device_id) +{ + SessionInfo* session_info; + + EnterCriticalSection(&session_lock); + session_info = session_list; + + while ( session_info ) + { + if ( ( session_info->device_type == device_type ) && + ( session_info->device_id == device_id ) ) + { + LeaveCriticalSection(&session_lock); + return session_info; + } + + session_info = session_info->next; + } + + LeaveCriticalSection(&session_lock); + return NULL; +} + + +/* + Creates a new session, associated with the specified device type and ID. + Whilst the session list is locked, this also checks to see if an existing + session is associated with the device. +*/ + +MMRESULT +CreateSession( + DeviceType device_type, + DWORD device_id, + SessionInfo** session_info) +{ + HANDLE heap = GetProcessHeap(); + + ASSERT(session_info); + + EnterCriticalSection(&session_lock); + + /* Ensure we're not creating a duplicate session */ + + if ( GetSession(device_type, device_id) ) + { + DPRINT("Already allocated session\n"); + LeaveCriticalSection(&session_lock); + return MMSYSERR_ALLOCATED; + } + + *session_info = HeapAlloc(heap, HEAP_ZERO_MEMORY, sizeof(SessionInfo)); + + if ( ! *session_info ) + { + DPRINT("Failed to allocate mem for session info\n"); + LeaveCriticalSection(&session_lock); + return MMSYSERR_NOMEM; + } + + (*session_info)->device_type = device_type; + (*session_info)->device_id = device_id; + + /* Add to the list */ + + (*session_info)->next = session_list; + session_list = *session_info; + + LeaveCriticalSection(&session_lock); + + return MMSYSERR_NOERROR; +} + + +/* + Removes a session from the list and destroys it. This function does NOT + perform any additional cleanup. Think of it as a slightly more advanced + free() +*/ + +VOID +DestroySession(SessionInfo* session) +{ + HANDLE heap = GetProcessHeap(); + SessionInfo* session_node; + SessionInfo* session_prev; + + /* TODO: More cleanup stuff */ + + /* Remove from the list */ + + EnterCriticalSection(&session_lock); + + session_node = session_list; + session_prev = NULL; + + while ( session_node ) + { + if ( session_node == session ) + { + /* Bridge the gap for when we go */ + session_prev->next = session->next; + break; + } + + /* Save the previous node, fetch the next */ + session_prev = session_node; + session_node = session_node->next; + } + + LeaveCriticalSection(&session_lock); + + HeapFree(heap, 0, session); +} + + +/* + Allocates events and other resources for the session thread, starts it, + and waits for it to announce that it is ready to work for us. +*/ + +MMRESULT +StartSessionThread(SessionInfo* session_info) +{ + LPTASKCALLBACK task; + MMRESULT result; + + ASSERT(session_info); + + /* This is our "ready" event, sent when the thread is idle */ + + session_info->thread.ready_event = CreateEvent(NULL, FALSE, FALSE, NULL); + + if ( ! session_info->thread.ready_event ) + { + DPRINT("Couldn't create thread_ready event\n"); + return MMSYSERR_NOMEM; + } + + /* This is our "go" event, sent when we want the thread to do something */ + + session_info->thread.go_event = CreateEvent(NULL, FALSE, FALSE, NULL); + + if ( ! session_info->thread.go_event ) + { + DPRINT("Couldn't create thread_go event\n"); + CloseHandle(session_info->thread.ready_event); + return MMSYSERR_NOMEM; + } + + /* TODO - other kinds of devices need attention, too */ + task = ( session_info->device_type == WaveOutDevice ) + ? (LPTASKCALLBACK) WaveThread : NULL; + + ASSERT(task); + + /* Effectively, this is a beefed-up CreateThread */ + + result = mmTaskCreate(task, + &session_info->thread.handle, + (DWORD) session_info); + + if ( result != MMSYSERR_NOERROR ) + { + DPRINT("Task creation failed\n"); + CloseHandle(session_info->thread.ready_event); + CloseHandle(session_info->thread.go_event); + return result; + } + + /* Wait for the thread to be ready before completing */ + + WaitForSingleObject(session_info->thread.ready_event, INFINITE); + + return MMSYSERR_NOERROR; +} + + +/* + The session thread is pretty simple. Upon creation, it announces that it + is ready to do stuff for us. When we want it to perform an action, we use + CallSessionThread with an appropriate function and parameter, then tell + the thread we want it to do something. When it's finished, it announces + that it is ready once again. +*/ + +MMRESULT +CallSessionThread( + SessionInfo* session_info, + ThreadFunction function, + PVOID thread_parameter) +{ + ASSERT(session_info); + + session_info->thread.function = function; + session_info->thread.parameter = thread_parameter; + + DPRINT("Calling session thread\n"); + SetEvent(session_info->thread.go_event); + + DPRINT("Waiting for thread response\n"); + WaitForSingleObject(session_info->thread.ready_event, INFINITE); + + return session_info->thread.result; +} + + +DWORD +HandleBySessionThread( + DWORD private_handle, + DWORD message, + DWORD parameter) +{ + return CallSessionThread((SessionInfo*) private_handle, + message, + (PVOID) parameter); +} diff --git a/reactos/dll/win32/mmdrv/wave_io.c b/reactos/dll/win32/mmdrv/wave_io.c index 3c34e0211d2..a7923cb29dd 100644 --- a/reactos/dll/win32/mmdrv/wave_io.c +++ b/reactos/dll/win32/mmdrv/wave_io.c @@ -1,40 +1,40 @@ -/* - Don't use this. -*/ - -#include - -/* - Complete a partial wave buffer transaction -*/ - -void -CompleteWaveOverlap( - DWORD error_code, - DWORD bytes_transferred, - LPOVERLAPPED overlapped) -{ - DPRINT("Complete partial wave overlap\n"); -} - -/* - Helper function to set up loops -*/ - -VOID -UpdateWaveLoop(SessionInfo* session_info) -{ -} - - -/* - The hub of all wave I/O. This ensures a constant stream of buffers are - passed between the land of usermode and kernelmode. -*/ - -VOID -PerformWaveIO( - SessionInfo* session_info) -{ - -} +/* + Don't use this. +*/ + +#include + +/* + Complete a partial wave buffer transaction +*/ + +void +CompleteWaveOverlap( + DWORD error_code, + DWORD bytes_transferred, + LPOVERLAPPED overlapped) +{ + DPRINT("Complete partial wave overlap\n"); +} + +/* + Helper function to set up loops +*/ + +VOID +UpdateWaveLoop(SessionInfo* session_info) +{ +} + + +/* + The hub of all wave I/O. This ensures a constant stream of buffers are + passed between the land of usermode and kernelmode. +*/ + +VOID +PerformWaveIO( + SessionInfo* session_info) +{ + +} diff --git a/reactos/dll/win32/modemui/lang/no-NO.rc b/reactos/dll/win32/modemui/lang/no-NO.rc new file mode 100644 index 00000000000..d844c9da6a1 --- /dev/null +++ b/reactos/dll/win32/modemui/lang/no-NO.rc @@ -0,0 +1,613 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDM_MENU MENU +BEGIN + POPUP "" + BEGIN + MENUITEM "&Duplicate...", 0 + MENUITEM "F&jern", 1 + MENUITEM "&Vis logg", 2 + MENUITEM SEPARATOR + MENUITEM "E&genskaper", 3 + MENUITEM "K&opier egenskaper", 4 + MENUITEM "B&ruk egenskaper", 5 + END +END + +IDD_ADVANCED DIALOGEX 17, 12, 238, 210 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Avansert" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Ekstra egenskaper", 1018, 6, 6, 225, 70 + LTEXT "E&kstra initialisering kommandoer:", 1011, 16, 20, 143, 8 + EDITTEXT 1016, 16, 31, 205, 13, ES_AUTOHSCROLL + LTEXT "&Vent for kredittkort tone:", 1007, 16, 55, 109, 8, NOT WS_VISIBLE + EDITTEXT 1008, 133, 52, 26, 12, ES_RIGHT | NOT WS_VISIBLE | WS_GROUP + CONTROL "", 1009, "MSCTLS_UPDOWN32", NOT WS_VISIBLE | WS_BORDER | WS_GROUP | 0x00000036, 159, 52, 12, 12 + LTEXT "sekunder", 1010, 173, 54, 40, 8, NOT WS_VISIBLE + GROUPBOX "&Land/Region valg", 1012, 6, 80, 225, 75 + COMBOBOX 1013, 18, 99, 203, 50, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "&Avansert port innstillinger...", 1100, 107, 170, 125, 14 + DEFPUSHBUTTON "Endre &standard innstillinger...", 3, 107, 188, 125, 14 +END + +IDD_GENERAL DIALOGEX 0, 0, 238, 210 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Generielt" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Port:", 1018, 9, 8, 32, 10 + LTEXT "Com port", 1095, 48, 8, 181, 10 + GROUPBOX "&Hшytaller volum", 1029, 10, 21, 218, 48 + CONTROL "", 1032, "MSCTLS_TRACKBAR32", WS_GROUP | WS_TABSTOP | 0x00000001, 84, 40, 66, 20 + RTEXT "Av", 1045, 56, 40, 22, 8 + LTEXT "Hшyt", 1001, 155, 40, 25, 11 + GROUPBOX "&Maksimum port hastighet", 1031, 10, 78, 218, 46 + COMBOBOX 1036, 18, 100, 202, 69, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + GROUPBOX "Dial Kontroll", 1060, 10, 133, 218, 51 + AUTOCHECKBOX "&Vent for dial tone fшr nummerslеing", 1003, 27, 157, 174, 10 +END + +IDD_DISTINCTIVE_RING DIALOGEX 0, 0, 238, 210 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Distinctive Ring" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "", 1068, 10, 7, 218, 145 + AUTOCHECKBOX "&This phone line has Distinctive Ring Services", 1069, 20, 7, 184, 10 + CTEXT "Ring Pattern", -1, 84, 21, 70, 8 + CTEXT "Type of Call", -1, 159, 21, 63, 8 + LTEXT "&Primary address:", 1070, 20, 41, 62, 8 + COMBOBOX 1073, 84, 37, 71, 61, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | WS_VSCROLL | NOT WS_TABSTOP + COMBOBOX 1082, 160, 37, 62, 61, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Addresse &1:", 1071, 20, 59, 62, 8 + COMBOBOX 1074, 84, 55, 71, 61, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | WS_VSCROLL | NOT WS_TABSTOP + COMBOBOX 1083, 160, 55, 62, 61, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Addresse &2:", 1072, 20, 77, 62, 8 + COMBOBOX 1075, 84, 73, 71, 61, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | WS_VSCROLL | NOT WS_TABSTOP + COMBOBOX 1084, 160, 73, 62, 61, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Addresse &3:", 1076, 20, 95, 62, 8 + COMBOBOX 1077, 84, 91, 71, 61, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | WS_VSCROLL | NOT WS_TABSTOP + COMBOBOX 1085, 160, 91, 62, 61, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Priority &callers:", 1078, 20, 112, 62, 8 + COMBOBOX 1079, 84, 109, 71, 61, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | WS_VSCROLL | NOT WS_TABSTOP + COMBOBOX 1086, 160, 109, 62, 61, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Call&back:", 1080, 20, 131, 62, 8 + COMBOBOX 1081, 84, 127, 71, 61, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | WS_VSCROLL | NOT WS_TABSTOP + COMBOBOX 1087, 160, 127, 62, 61, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP +END + +IDD_DISTINCTIVE_RING_2 DIALOGEX 0, 0, 238, 210 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Distinctive Ring" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "", 1068, 10, 7, 218, 87 + AUTOCHECKBOX "&This phone line has Distinctive Ring Services", 1069, 19, 7, 177, 10 + CTEXT "Ring Pattern", -1, 20, 21, 74, 8 + CTEXT "Type of Call", -1, 96, 21, 65, 8 + LTEXT "&Enkelt ring:", 1088, 20, 37, 53, 8 + COMBOBOX 1091, 96, 37, 65, 61, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Dobbelt ring:", 1089, 20, 57, 53, 8 + COMBOBOX 1092, 96, 55, 65, 61, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "T&rippel ring:", 1090, 20, 76, 53, 8 + COMBOBOX 1093, 96, 73, 65, 61, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP +END + +IDD_DIAGNOSTICS DIALOGEX 0, 0, 238, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Diagnostics" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", 1042, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000084D, 19, 18, 200, 58 + CONTROL "", 1041, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000084D, 19, 84, 200, 58 + PUSHBUTTON "&Query Modem", 1096, 138, 149, 75, 14 + AUTOCHECKBOX "Ta opp &Logg", 1020, 18, 187, 98, 10 + PUSHBUTTON "&Vis logg", 1094, 138, 184, 75, 14, WS_DISABLED + GROUPBOX "Modem Informasjon", 1047, 10, 6, 217, 164 + GROUPBOX "Logging", -1, 10, 173, 217, 32 +END + +IDD_PLEASE_WAIT DIALOGEX 0, 0, 195, 72 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "Vennligst vent..." +FONT 8, "MS Shell Dlg" +BEGIN + ICON 5100, -1, 9, 7, 20, 20 + LTEXT "Kommuniserer med modemet. Dette kan ta noen sekunder.", -1, 42, 7, 146, 28 + DEFPUSHBUTTON "Avbryt", 2, 72, 52, 50, 14 +END + +IDD_GENERAL_2 DIALOGEX 0, 0, 238, 210 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Generiel" +FONT 8, "MS Shell Dlg" +BEGIN + AUTOCHECKBOX "&Operator assisted (manual) dial", 1002, 19, 22, 150, 10 + AUTOCHECKBOX "&Disconnect a call if idle for more than", 1042, 19, 38, 143, 10 + EDITTEXT 1043, 168, 35, 25, 13, ES_AUTOHSCROLL | ES_NUMBER + LTEXT "&Cancel the call if not connected within", -1, 19, 56, 147, 10 + EDITTEXT 1040, 168, 54, 25, 13, ES_AUTOHSCROLL | ES_NUMBER + RTEXT "&Port hastighet:", 1034, 16, 102, 93, 8 + COMBOBOX 1036, 114, 100, 84, 69, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + RTEXT "D&ata Protocol:", 1032, 16, 122, 93, 8 + COMBOBOX 1037, 114, 119, 84, 69, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + RTEXT "Comp&ression:", 1035, 16, 139, 93, 8 + COMBOBOX 1099, 114, 137, 84, 69, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + RTEXT "&Flow control:", 1027, 16, 157, 93, 8 + COMBOBOX 1031, 114, 155, 84, 61, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + GROUPBOX "Call preferences", 1060, 11, 7, 217, 66 + LTEXT "min", 1044, 195, 38, 22, 8 + LTEXT "sek", 1041, 194, 56, 22, 8 + GROUPBOX "Data tilkobling egenskap", -1, 11, 82, 217, 94 +END + +IDD_ADVANCED_2 DIALOGEX 17, 12, 238, 210 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Avansert" +FONT 8, "MS Shell Dlg" +BEGIN + AUTOCHECKBOX "Bring up terminal window &before dialing", 1000, 20, 21, 200, 10 + AUTOCHECKBOX "Bring up terminal window a&fter dialing", 1001, 20, 38, 200, 10 + RTEXT "&Data bits:", 1024, 18, 79, 93, 8 + COMBOBOX 1025, 114, 77, 106, 61, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + RTEXT "&Parity:", 1026, 18, 97, 93, 8 + COMBOBOX 1028, 114, 95, 106, 60, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + RTEXT "&Stopp bits:", 1029, 18, 115, 93, 8 + COMBOBOX 1030, 114, 113, 106, 45, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + RTEXT "&Modulation:", 1045, 18, 133, 93, 8 + COMBOBOX 1038, 114, 131, 106, 69, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + GROUPBOX "Terminal Window", 1004, 10, 7, 217, 49 + GROUPBOX "Maskinvare innstillinger", 1005, 10, 64, 217, 89 +END + +IDD_ISDN DIALOGEX 0, 0, 238, 210 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "ISDN" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Endre &type", -1, 11, 6, 217, 39 + COMBOBOX 1104, 17, 20, 204, 69, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + GROUPBOX "&Fшrst nummer", -1, 11, 50, 217, 50 + EDITTEXT 1017, 33, 62, 188, 13, ES_AUTOHSCROLL | ES_NUMBER + LTEXT "S&PID/EAZ:", 1027, 34, 83, 67, 8 + EDITTEXT 1107, 104, 79, 117, 13, ES_AUTOHSCROLL | ES_NUMBER + GROUPBOX "&Andre nummer", -1, 11, 105, 217, 49 + EDITTEXT 1018, 33, 114, 189, 13, ES_AUTOHSCROLL | ES_NUMBER + LTEXT "SPI&D/EAZ:", 1028, 35, 135, 68, 8 + EDITTEXT 1108, 105, 132, 117, 13, ES_AUTOHSCROLL | ES_NUMBER +END + +IDD_PLEASE_WAIT_2 DIALOGEX 0, 0, 195, 72 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "Vennligst vent" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 5100, -1, 9, 7, 20, 20 + LTEXT "Sender land/region informasjon til Modemet.", -1, 42, 7, 146, 28 +END + +IDD_WARNING DIALOGEX 0, 0, 360, 105 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "Advarsel" +FONT 8, "MS Shell Dlg" +BEGIN + AUTOCHECKBOX "Ikke vis denne meldingen igjen", 1109, 17, 73, 118, 10 + DEFPUSHBUTTON "OK", 1, 302, 84, 50, 14 + LTEXT "Some modems do not properly handle initialization strings of this length.", -1, 50, 27, 304, 8 + LTEXT "Information about this limitation can be obtained from your modem manufacturer.", -1, 50, 41, 304, 8 + ICON 5100, -1, 15, 14, 20, 20 + LTEXT "You have entered a modem initialization string greater than 57 characters long.", -1, 50, 14, 304, 8 +END + +IDD_MODEMS DIALOGEX 0, 0, 252, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Modemer" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 5100, 1057, 6, 7, 20, 20 + LTEXT "Fшlgende &modemer er innstallert:", -1, 44, 12, 203, 9 + CONTROL "", 113, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x00000849, 7, 32, 238, 158, WS_EX_CLIENTEDGE + PUSHBUTTON "L&egg til...", 110, 56, 198, 60, 14 + PUSHBUTTON "&Fjern", 112, 121, 198, 60, 14 + PUSHBUTTON "&Egenskaper", 109, 185, 198, 60, 14 +END + +IDD_PLEASE_WAIT_3 DIALOGEX 0, 0, 195, 72 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "Vennligst vent..." +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Stopp", 2, 74, 53, 50, 14 + ICON 5100, -1, 9, 7, 20, 20 + LTEXT "Fjerner", -1, 40, 8, 151, 8 + LTEXT "Modem", 1005, 40, 16, 151, 25 +END + +STRINGTABLE +BEGIN + 180 "RS-232 Serieport" + 181 "Eksternt Modem" + 182 "Internt Modem" + 183 "PCMCIA Modem" + 184 "Parallel Modem" + 185 "Parallel Port" + 200 "110" + 201 "1200" + 202 "2400" + 203 "4800" + 204 "9600" + 206 "19200" + 207 "38400" + 210 "115200" + 211 "57600" + 216 "300" + 220 "230400" + 221 "460800" + 222 "921600" + 240 "4" + 241 "5" + 242 "6" + 243 "7" + 244 "8" + 250 "Even" + 251 "Odd" + 252 "Ingen" + 253 "Mark" + 254 "Space" + 255 "1" + 256 "1.5" + 257 "2" + 260 "Xon / Xoff" + 261 "Maskinvare" + 262 "Ingen" + 263 "On" + 264 "Low" + 265 "V.23 (Minitel)" + 266 "Standard" + 267 "Non-standard (Bell, HST)" + 270 "Append to &Log" + 300 "Unspecified" + 301 "Data" + 302 "Faks" + 303 "Stemme" + 304 "Ingen" + 320 "Sprеk/region innstilling oppdatert" + 340 "Modem" + 341 "Modem innstilling" + 342 "Modem addresse" + 400 "Country/region setting not updated" + 401 "Some modems do not accept user initialization commands greater than 57 characters.\n\nInformation about this limitation can be obtained from your modem manufacturer" + 402 "Advarsel" + 460 "There is not enough memory to view the General dialog box.\nClose some files or programs, and then try again." + 461 "There is not enough memory to view the Modem Settings dialog box.\nClose some files or programs, and then try again." + 463 "Each calling address must be set to 'Automatic' or to a unique ring pattern.\n\nChange the duplicate ring pattern to a different one." + 465 "Standard EC" + 466 "Forced EC" + 467 "Cellular" + 468 "Disabled" + 469 "Enabled" + 470 "Disabled" + 480 "AUTO (1 Ch.)" + 481 "AUTO (2 Ch.)" + 482 "PPP (56K)" + 483 "PPP (64K)" + 484 "PPP (112K)" + 485 "PPP (112K,PAP)" + 486 "PPP (112K,CHAP)" + 487 "PPP (112K,MSCHAP)" + 488 "PPP (128K)" + 489 "PPP (128K,PAP)" + 490 "PPP (128K,CHAP)" + 491 "PPP (128K,MSCHAP)" + 500 "V.120 (64K)" + 501 "V.120 (56K)" + 502 "V.120 (112K)" + 503 "V.120 (128K)" + 504 "X.75 (64K)" + 505 "X.75 (128K)" + 506 "X.75 (T.70)" + 507 "X.75 (BTX)" + 508 "V.110 (1.2K)" + 509 "V.110 (2.4K)" + 510 "V.110 (4.8K)" + 511 "V.110 (9.6K)" + 512 "V.110 (12.0K)" + 513 "V.110 (14.4K)" + 514 "V.110 (19.2K)" + 515 "V.110 (28.8K)" + 516 "V.110 (38.4K)" + 517 "V.110 (57.6K)" + 518 "Analog (V.34/V.90)" + 550 "ESS5 (AT&T) (North America)" + 551 "AT&T Point to Multipoint" + 552 "National ISDN 1 (NI-1)" + 553 "Northern Telecom DMS 100 (NT1)" + 554 "NTT INS64 (Japan)" + 555 "European ISDN (DSS1)" + 556 "German National (1TR6) (rarely used)" + 557 "French National (VN3) (rarely used)" + 558 "Belgium National (rarely used)" + 559 "Australian National (rarely used)" + 560 "Unknown switch" + 570 "The ISDN Configuration for this modem\nis not complete.\n\nPlease fill out the information in the\nISDN Tab before using this modem." + 600 "PPP (56K,GSM)" + 601 "PPP (64K,GSM)" + 602 "V.120 (64K,GSM)" + 604 "V.110 (1.2K,GSM)" + 605 "V.110 (2.4K,GSM)" + 606 "V.110 (4.8K,GSM)" + 607 "V.110 (9.6K,GSM)" + 608 "V.110 (12.0K,GSM)" + 609 "V.110 (14.4K,GSM)" + 610 "V.110 (19.2K,GSM)" + 611 "V.110 (28.8K,GSM)" + 612 "V.110 (38.4K,GSM)" + 613 "V.110 (57.6K,GSM)" + 614 "Analog RLP" + 615 "Analog NRLP" + 616 "GPRS" + 617 "PIAFS - incoming" + 618 "PIAFS - outgoing" + 700 "Use current TAPI location" + 2006 "Attached To" + 2007 "Not present" + 2008 "Not functional" + 2009 "Needs reboot" + 2010 "#To finish setting up your modem, you must restart your computer.\n\nDo you want to restart your computer now?" + 2011 "Modem not properly installed" + 2012 "Unknown port" + 3000 "Modem installering" + 3018 "Modemer" + 3019 "Installs a new modem and changes modem properties." + 3053 "The modem properties cannot be displayed because the modem is not available.\n\nRestart the system and try again." + 3054 "Properties for Modems" + 3060 "Are you sure you want to remove the selected modem(s) from your system?" + 3061 "ReactOS was unable to remove the modem '%1' from %2." + 3062 "Modem" + 3069 "There is not enough memory to open the modem control panel.\n\nClose some programs and try again." + 3073 "You must be a System Administrator to install a modem." + 3074 "No modems are installed. You must be a System Administrator to install a modem." + 3076 "You must shut down and restart your computer before the new settings will take effect.\n\nDo you want to restart your computer now?" + 3077 "Network Settings Change" + 3200 "300 Baud" + 3201 "1200 Baud" + 3202 "2400 Baud" + 3203 "9600 Baud" + 3204 "19.2K Baud" + 3205 "38.4K Baud" + 3206 "57.6K Baud" + 3207 "No response" + 3212 "Command" + 3213 "Response" + 3214 "The port that the modem is attached could not be opened. This may be the result of a hardware conflict. Check the device manager to verify all devices are functional." + 3215 "The port that the modem is using is currently open by another application. Exit any application that may currently be using the port." + 3218 "OpenComm" + 3221 "115K Baud" + 3222 "Oppdaterer" + 3223 "Feil" + 3233 "Fullfшrt" + 3236 "The modem failed to respond. Make sure it is properly connected and turned on. If it is an internal modem or is connected, verify that the interrupt for the port is properly set." + 3237 "COMMAND NOT SUPPORTED" + 3238 "Field" + 3239 "Value" + 3240 " Default Preferences" + 3241 " Connection Preferences" + 6144 "Japan" + 6145 "Albania" + 6146 "Algeria" + 6147 "American Samoa" + 6148 "Germany (Country/region code 04)" + 6149 "Anguilla" + 6150 "Antigua and Barbuda" + 6151 "Argentina" + 6152 "Ascension Island" + 6153 "Australia" + 6154 "Austria" + 6155 "Bahamas" + 6156 "Bahrain" + 6157 "Bangladesh" + 6158 "Barbados" + 6159 "Belgium" + 6160 "Belize" + 6161 "Benin" + 6162 "Bermuda" + 6163 "Bhutan" + 6164 "Bolivia" + 6165 "Botswana" + 6166 "Brazil" + 6167 "Country/region code (23)" + 6168 "British Indian Ocean Territory" + 6169 "British Virgin Islands" + 6170 "Brunei" + 6171 "Bulgaria" + 6172 "Myanmar" + 6173 "Burundi" + 6174 "Belarus" + 6175 "Cameroon" + 6176 "Canada" + 6177 "Cape Verde" + 6178 "Cayman Islands" + 6179 "Central African Republic" + 6180 "Chad" + 6181 "Chile" + 6182 "China" + 6183 "Colombia" + 6184 "Comoros" + 6185 "Congo" + 6186 "Cook Islands" + 6187 "Costa Rica" + 6188 "Cuba" + 6189 "Cyprus" + 6190 "Czech Republic" + 6191 "Cambodia" + 6192 "North Korea" + 6193 "Denmark" + 6194 "Djibouti" + 6195 "Dominican Republic" + 6196 "Dominica" + 6197 "Ecuador" + 6198 "Egypt" + 6199 "El Salvador" + 6200 "Equatorial Guinea" + 6201 "Ethiopia" + 6202 "Falkland Islands (Islas Malvinas)" + 6203 "Fiji Islands" + 6204 "Finland" + 6205 "France" + 6206 "French Polynesia" + 6207 "Country/region code (63)" + 6208 "Gabon" + 6209 "Gambia" + 6210 "Germany (Country/region code 66)" + 6211 "Angola" + 6212 "Ghana" + 6213 "Gibraltar" + 6214 "Greece" + 6215 "Grenada" + 6216 "Guam" + 6217 "Guatemala" + 6218 "Guernsey" + 6219 "Guinea" + 6220 "Guinea-Bissau" + 6221 "Guyana" + 6222 "Haiti" + 6223 "Honduras" + 6224 "Hong Kong SAR" + 6225 "Hungary" + 6226 "Iceland" + 6227 "India" + 6228 "Indonesia" + 6229 "Iran" + 6230 "Iraq" + 6231 "Ireland" + 6232 "Israel" + 6233 "Italy" + 6234 "Cote d'Ivoire" + 6235 "Jamaica" + 6236 "Afghanistan" + 6237 "Jersey" + 6238 "Jordan" + 6239 "Kenya" + 6240 "Kiribati" + 6241 "Korea" + 6242 "Kuwait" + 6243 "Laos" + 6244 "Lebanon" + 6245 "Lesotho" + 6246 "Liberia" + 6247 "Libya" + 6248 "Liechtenstein" + 6249 "Luxembourg" + 6250 "Macau SAR" + 6251 "Madagascar" + 6252 "Malaysia" + 6253 "Malawi" + 6254 "Maldives" + 6255 "Mali" + 6256 "Malta" + 6257 "Mauritania" + 6258 "Mauritius" + 6259 "Mexico" + 6260 "Monaco" + 6261 "Mongolia" + 6262 "Montserrat" + 6263 "Morocco" + 6264 "Mozambique" + 6265 "Nauru" + 6266 "Nepal" + 6267 "Netherlands" + 6268 "Netherlands Antilles" + 6269 "New Caledonia" + 6270 "New Zealand" + 6271 "Nicaragua" + 6272 "Niger" + 6273 "Nigeria" + 6274 "Norway" + 6275 "Oman" + 6276 "Pakistan" + 6277 "Panama" + 6278 "Papua New Guinea" + 6279 "Paraguay" + 6280 "Peru" + 6281 "Philippines" + 6282 "Poland" + 6283 "Portugal" + 6284 "Puerto Rico" + 6285 "Qatar" + 6286 "Romania" + 6287 "Rwanda" + 6288 "St. Kitts and Nevis" + 6289 "Country/region code (145)" + 6290 "St. Helena" + 6291 "St. Lucia" + 6292 "San Marino" + 6293 "Country/region code (148)" + 6294 "Sao Tome and Principe" + 6295 "St. Vincent and the Grenadines" + 6296 "Saudi Arabia" + 6297 "Senegal" + 6298 "Seychelles" + 6299 "Sierra Leone" + 6300 "Singapore" + 6301 "Solomon Islands" + 6302 "Somalia" + 6303 "South Africa" + 6304 "Spain" + 6305 "Sri Lanka" + 6306 "Sudan" + 6307 "Suriname" + 6308 "Swaziland" + 6309 "Sweden" + 6310 "Switzerland" + 6311 "Syria" + 6312 "Tanzania" + 6313 "Thailand" + 6314 "Togo" + 6315 "Tonga" + 6316 "Trinidad and Tobago" + 6317 "Tunisia" + 6318 "Turkey" + 6319 "Turks and Caicos Islands" + 6320 "Tuvalu" + 6321 "Uganda" + 6322 "Ukraine" + 6323 "United Arab Emirates" + 6324 "United Kingdom" + 6325 "United States" + 6326 "Burkina Faso" + 6327 "Uruguay" + 6328 "Country/region code (184)" + 6329 "Vanuatu" + 6330 "Vatican City" + 6331 "Venezuela" + 6332 "Vietnam" + 6333 "Wallis and Futuna" + 6334 "Samoa" + 6335 "Yemen" + 6336 "Yemen" + 6337 "Country/region code (193)" + 6338 "Congo (DRC)" + 6339 "Zambia" + 6340 "Zimbabwe" + 6501 "Moldova" + 6502 "Estonia" + 6503 "Lithuania" + 6504 "Armenia" + 6505 "Georgia" + 6506 "Azerbaijan" + 6507 "Turkmenistan" + 6508 "Uzbekistan" + 6509 "Kazakhstan" + 6510 "Tajikistan" + 6511 "Kyrgyzstan" + 6512 "Latvia" + 6513 "Russia" + 6600 "Croatia" + 6601 "Slovenia" + 6602 "Macedonia, FYRO" + 6603 "Bosnia and Herzegovina" + 6604 "Yugoslavia" + 20013 "Maskinvare ID" +END diff --git a/reactos/dll/win32/modemui/modemui.rc b/reactos/dll/win32/modemui/modemui.rc index 21b2cf4c6b3..e1e7862a3cd 100644 --- a/reactos/dll/win32/modemui/modemui.rc +++ b/reactos/dll/win32/modemui/modemui.rc @@ -16,6 +16,7 @@ IDI_703 ICON "res/703.ico" #include "lang/de-DE.rc" #include "lang/en-US.rc" #include "lang/es-ES.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/uk-UA.rc" diff --git a/reactos/dll/win32/mpr/pwcache.c b/reactos/dll/win32/mpr/pwcache.c index a760dd26d25..8e3c1911f1f 100644 --- a/reactos/dll/win32/mpr/pwcache.c +++ b/reactos/dll/win32/mpr/pwcache.c @@ -74,7 +74,7 @@ static LPSTR MPR_GetValueName( LPCSTR pbResource, WORD cbResource, BYTE nType ) * WNetCachePassword [MPR.@] Saves password in cache * * NOTES - * only the parameter count is verifyed + * Only the parameter count is verified * * ---- everything below this line might be wrong (js) ----- * RETURNS @@ -221,7 +221,7 @@ DWORD WINAPI WNetGetCachedPassword( * WNetEnumCachedPasswords [MPR.@] * * NOTES - * the parameter count is verifyed + * The parameter count is verified * * This function is a huge security risk, as virii and such can use * it to grab all the passwords in the cache. It's bad enough to diff --git a/reactos/dll/win32/msacm32/msacm.rc b/reactos/dll/win32/msacm32/msacm.rc index 89f06c3f79f..7f1e32bc584 100644 --- a/reactos/dll/win32/msacm32/msacm.rc +++ b/reactos/dll/win32/msacm32/msacm.rc @@ -31,6 +31,7 @@ #include "msacm_It.rc" #include "msacm_Ja.rc" #include "msacm_Nl.rc" +#include "msacm_No.rc" #include "msacm_Pl.rc" #include "msacm_Pt.rc" #include "msacm_Ru.rc" diff --git a/reactos/dll/win32/msacm32/msacm_No.rc b/reactos/dll/win32/msacm32/msacm_No.rc new file mode 100644 index 00000000000..04a81d689d6 --- /dev/null +++ b/reactos/dll/win32/msacm32/msacm_No.rc @@ -0,0 +1,56 @@ +/* + * Norwegian resource file for MS ACM + * + * Copyright 2000 Eric Pouech + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Lyd utvalg" +FONT 8, "MS Shell Dlg" +BEGIN + + LTEXT "&Navn:", -1, 5, 5, 115, 8, NOT WS_GROUP + + COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60, + CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + + PUSHBUTTON "&Lagre som...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14 + PUSHBUTTON "&Fjern", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14 + + LTEXT "&Format:", -1, 5, 41, 44, 8, NOT WS_GROUP + + COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60, + CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + + LTEXT "&Attributter:", -1, 5, 59, 44, 8, NOT WS_GROUP + +#if 0 + COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60, + CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | + CBS_OWNERDRAWFIXED | CBS_HASSTRINGS +#else + COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60, + CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP +#endif + DEFPUSHBUTTON "OK", IDOK, 48, 80, 40, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 92, 80, 40, 14 + PUSHBUTTON "&Hjelp", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14 + +END diff --git a/reactos/dll/win32/msafd/misc/dllmain.c b/reactos/dll/win32/msafd/misc/dllmain.c index 72f6fd8a8a3..4c520e132af 100644 --- a/reactos/dll/win32/msafd/misc/dllmain.c +++ b/reactos/dll/win32/msafd/misc/dllmain.c @@ -279,17 +279,19 @@ DWORD MsafdReturnWithErrno( NTSTATUS Status, LPINT Errno, DWORD Received, if( Errno ) { switch (Status) { case STATUS_CANT_WAIT: *Errno = WSAEWOULDBLOCK; break; - case STATUS_TIMEOUT: + case STATUS_TIMEOUT: *Errno = WSAETIMEDOUT; break; case STATUS_SUCCESS: /* Return Number of bytes Read */ if( ReturnedBytes ) *ReturnedBytes = Received; break; - case STATUS_END_OF_FILE: *Errno = WSAESHUTDOWN; *ReturnedBytes = 0; break; + case STATUS_END_OF_FILE: *Errno = WSAESHUTDOWN; break; case STATUS_PENDING: *Errno = WSA_IO_PENDING; break; case STATUS_BUFFER_OVERFLOW: *Errno = WSAEMSGSIZE; break; - default: { + case STATUS_INSUFFICIENT_RESOURCES: *Errno = WSA_NOT_ENOUGH_MEMORY; break; + case STATUS_INVALID_CONNECTION: *Errno = WSAEAFNOSUPPORT; break; + case STATUS_REMOTE_NOT_LISTENING: *Errno = WSAECONNRESET; break; + default: DbgPrint("MSAFD: Error %x is unknown\n", Status); *Errno = WSAEINVAL; break; - } break; } } @@ -513,6 +515,7 @@ WSPBind( /* Wait for return */ if (Status == STATUS_PENDING) { WaitForSingleObject(SockEvent, INFINITE); + Status = IOSB.Status; } /* Set up Socket Data */ @@ -522,7 +525,7 @@ WSPBind( NtClose( SockEvent ); return MsafdReturnWithErrno - ( IOSB.Status, lpErrno, IOSB.Information, NULL ); + ( Status, lpErrno, 0, NULL ); } int @@ -566,6 +569,7 @@ WSPListen( /* Wait for return */ if (Status == STATUS_PENDING) { WaitForSingleObject(SockEvent, INFINITE); + Status = IOSB.Status; } /* Set to Listening */ @@ -574,7 +578,7 @@ WSPListen( NtClose( SockEvent ); return MsafdReturnWithErrno - ( IOSB.Status, lpErrno, IOSB.Information, NULL ); + ( Status, lpErrno, 0, NULL ); } @@ -1247,7 +1251,7 @@ WSPConnect( NtClose( SockEvent ); - return MsafdReturnWithErrno( IOSB.Status, lpErrno, 0, NULL ); + return MsafdReturnWithErrno( Status, lpErrno, 0, NULL ); } int WSPAPI @@ -1310,13 +1314,14 @@ WSPShutdown( /* Wait for return */ if (Status == STATUS_PENDING) { WaitForSingleObject(SockEvent, INFINITE); + Status = IOSB.Status; } AFD_DbgPrint(MID_TRACE,("Ending\n")); NtClose( SockEvent ); - return MsafdReturnWithErrno( IOSB.Status, lpErrno, 0, NULL ); + return MsafdReturnWithErrno( Status, lpErrno, 0, NULL ); } @@ -1401,7 +1406,7 @@ WSPGetSockName( } return MsafdReturnWithErrno - ( IOSB.Status, lpErrno, 0, NULL ); + ( Status, lpErrno, 0, NULL ); } @@ -1486,7 +1491,7 @@ WSPGetPeerName( } return MsafdReturnWithErrno - ( IOSB.Status, lpErrno, 0, NULL ); + ( Status, lpErrno, 0, NULL ); } INT diff --git a/reactos/dll/win32/msgina/lang/it-IT.rc b/reactos/dll/win32/msgina/lang/it-IT.rc index 85bb0465a15..7763a98af87 100644 --- a/reactos/dll/win32/msgina/lang/it-IT.rc +++ b/reactos/dll/win32/msgina/lang/it-IT.rc @@ -57,8 +57,8 @@ STRINGTABLE BEGIN IDS_LOGGEDOUTSAS "Benvenuti!" IDS_LOCKEDSAS "Il computer al momento и bloccato." - IDS_PRESSCTRLALTDELETE "Premere Ctrl+Alt+Canc per accedre." + IDS_PRESSCTRLALTDELETE "Premere Ctrl+Alt+Canc per accedere." IDS_ASKFORUSER "Nome utente: " IDS_ASKFORPASSWORD "Password: " - IDS_FORCELOGOFF "Questo terminerа la sessione dell'utente attuale e verranno persi tutti i dati non salvati. Volete procedere?" + IDS_FORCELOGOFF "Verrа terminata la sessione dell'utente attuale e tutti i dati non salvati verranno persi. Volete procedere?" END diff --git a/reactos/dll/win32/msgina/lang/nb-NO.rc b/reactos/dll/win32/msgina/lang/no-NO.rc similarity index 100% rename from reactos/dll/win32/msgina/lang/nb-NO.rc rename to reactos/dll/win32/msgina/lang/no-NO.rc diff --git a/reactos/dll/win32/msgina/lang/ru-RU.rc b/reactos/dll/win32/msgina/lang/ru-RU.rc index b572312fc2e..ef731f4743f 100644 --- a/reactos/dll/win32/msgina/lang/ru-RU.rc +++ b/reactos/dll/win32/msgina/lang/ru-RU.rc @@ -15,7 +15,7 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS CAPTION "Добро пожаловать в ReactOS" FONT 8,"MS Shell Dlg",400,0,1 BEGIN - LTEXT "Нажите клавиши Control-Alt-Delete",IDC_STATIC,16,18,144,14 + LTEXT "Нажмите клавиши Control-Alt-Delete...",IDC_STATIC, 29, 22, 144, 14 END IDD_LOGGEDOUT_DLG DIALOGEX 0,0,275,147 @@ -23,28 +23,28 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS CAPTION "Вход" FONT 8,"MS Shell Dlg",400,0,1 BEGIN - PUSHBUTTON "OK",IDOK,51,122,50,14,BS_DEFPUSHBUTTON - PUSHBUTTON "Отмена",IDCANCEL,115,122,50,14 - PUSHBUTTON "Выключение",IDC_SHUTDOWN,179,122,50,14 - LTEXT "Имя пользователя:",IDC_STATIC,36,75,40,8 - LTEXT "Пароль:",IDC_STATIC,36,93,42,8 + PUSHBUTTON "OK", IDOK, 47, 122, 50, 14, BS_DEFPUSHBUTTON + PUSHBUTTON "Отмена", IDCANCEL, 109, 122, 50, 14 + PUSHBUTTON "Выключение", IDC_SHUTDOWN, 171, 122, 58, 14 + RTEXT "Имя пользователя:", IDC_STATIC, 6, 75, 70, 8 + RTEXT "Пароль:", IDC_STATIC, 6, 93, 70, 8 EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD CONTROL "",IDC_ROSLOGO,"Static",SS_BLACKFRAME,7,7,261,51 END -IDD_LOGGEDON_DLG DIALOGEX 0,0,247,116 +IDD_LOGGEDON_DLG DIALOGEX 0, 0, 284, 116 STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU CAPTION "Безопасность" FONT 8,"MS Shell Dlg",400,0,1 BEGIN - PUSHBUTTON "Отмена",IDCANCEL,170,95,70,14 - PUSHBUTTON "Завершение сеанса",IDC_LOGOFF,90,76,70,14 - PUSHBUTTON "Выключение",IDC_SHUTDOWN,170,76,70,14 - LTEXT "Что нужно сделать?",IDC_STATIC,86,53,87,8 - PUSHBUTTON "Заблокировать компьютер",IDC_LOCK,10,76,70,14 - PUSHBUTTON "Диспетчер задач",IDC_TASKMGR,90,95,70,14 - CONTROL "",IDC_ROSLOGO,"Static",SS_BLACKFRAME,7,7,230,38 + PUSHBUTTON "Отмена", IDCANCEL, 206, 95, 70, 14 + PUSHBUTTON "Завершение сеанса", IDC_LOGOFF, 115, 76, 86, 14 + PUSHBUTTON "Выключение",IDC_SHUTDOWN, 206, 76, 70, 14 + LTEXT "Выберите необходимое действие:", IDC_STATIC, 8, 59, 130, 8 + PUSHBUTTON "Заблокировать компьютер", IDC_LOCK, 7, 76, 103, 14 + PUSHBUTTON "Диспетчер задач",IDC_TASKMGR, 115, 95, 86, 14 + CONTROL "",IDC_ROSLOGO,"Static",SS_BLACKFRAME, 7, 7, 269, 38 END STRINGTABLE diff --git a/reactos/dll/win32/msgina/msgina.c b/reactos/dll/win32/msgina/msgina.c index c3de530092a..d017f6430b9 100644 --- a/reactos/dll/win32/msgina/msgina.c +++ b/reactos/dll/win32/msgina/msgina.c @@ -247,6 +247,8 @@ WlxStartApplication( CurrentDirectory, &StartupInfo, &ProcessInformation); + CloseHandle(ProcessInformation.hProcess); + CloseHandle(ProcessInformation.hThread); CloseHandle(hAppToken); if (!ret) WARN("CreateProcessAsUserW() failed with error %lu\n", GetLastError()); diff --git a/reactos/dll/win32/msgina/msgina.rc b/reactos/dll/win32/msgina/msgina.rc index 142bc89ace2..030fef4ca14 100644 --- a/reactos/dll/win32/msgina/msgina.rc +++ b/reactos/dll/win32/msgina/msgina.rc @@ -16,7 +16,7 @@ IDI_ROSLOGO BITMAP "resources/reactos.bmp" #include "lang/fr-FR.rc" #include "lang/id-ID.rc" #include "lang/it-IT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/win32/msvcrt/msvcrt.rbuild b/reactos/dll/win32/msvcrt/msvcrt.rbuild index a5a985284b9..cbacf30cd67 100644 --- a/reactos/dll/win32/msvcrt/msvcrt.rbuild +++ b/reactos/dll/win32/msvcrt/msvcrt.rbuild @@ -11,6 +11,7 @@ + -enable-stdcall-fixup diff --git a/reactos/dll/win32/netid/lang/no-NO.rc b/reactos/dll/win32/netid/lang/no-NO.rc new file mode 100644 index 00000000000..ec17355510f --- /dev/null +++ b/reactos/dll/win32/netid/lang/no-NO.rc @@ -0,0 +1,74 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_PROPPAGECOMPUTER DIALOGEX 0, 0, 256, 218 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Datamaskinnavn" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_COMPNAME, IDC_STATIC, 4, 3, 26, 24, SS_ICON + LTEXT "ReactOS bruker fшlgende informasjon for е identifisere datamaskinen pе nettverket.", IDC_STATIC, 40, 5, 204, 20 + LTEXT "Beskrivelse av datamaskinen:", IDC_STATIC, 6, 40, 90, 9 + EDITTEXT IDC_COMPDESC, 98, 38, 146, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + LTEXT "Fullt datamaskinnavn:", IDC_STATIC, 6, 68, 85, 9 + LTEXT "(Standard)", IDC_COMPUTERNAME, 98, 68, 144, 11 + LTEXT "Arbeidsgruppe:", IDC_WORKGROUPDOMAIN, 6, 84, 64, 9 + LTEXT "(Tom)", IDC_WORKGROUPDOMAIN_NAME, 98, 84, 144, 9 + LTEXT "Klikk nettverks-ID for е bruke veiviseren for nettverksidentifikasjon til е bli med i et domene og opprette en lokal brukerkonto.", IDC_STATIC, 6, 113, 172, 24 + PUSHBUTTON "&Nettverk-ID...", IDC_NETWORK_ID, 190, 114, 58, 15 + LTEXT "Klikk Endre for е gi datamaskinen et nytt navn eller bli med i et domenet.", IDC_STATIC, 6, 149, 170, 17 + PUSHBUTTON "&Endre...",IDC_NETWORK_PROPERTY, 190, 149, 58, 15 + LTEXT "OBS: Bare Administratorer kan endre disse innstillingene pе denne datamaskinen.", IDC_STATIC, 6, 179, 300, 9 +END + +IDD_PROPPAGECOMPNAMECHENGE DIALOGEX 0, 0, 232, 222 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Endring i datamaskinnavn" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "(message goes here)", 1017, 7, 5, 218, 30 + LTEXT "&Datamaskinnavn:", -1, 7, 41, 219, 8 + EDITTEXT 1002, 7, 53, 218, 14, ES_AUTOHSCROLL | ES_OEMCONVERT + LTEXT "Fullt datamaskinnavn:", 1016, 7, 72, 218, 10 + EDITTEXT 1001, 7, 82, 219, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + PUSHBUTTON "&Mer...", 1003, 150, 102, 75, 14 + GROUPBOX "Medlem av", 1018, 7, 119, 219, 73 + AUTORADIOBUTTON "&Domene:", 1008, 17, 132, 192, 10, WS_GROUP + AUTORADIOBUTTON "&Arbeidsgruppe:", 1004, 17, 161, 191, 10 + EDITTEXT 116, 28, 144, 181, 14, ES_AUTOHSCROLL | WS_GROUP + PUSHBUTTON "&Finn min domene", 1010, 7, 203, 109, 14, NOT WS_VISIBLE | WS_DISABLED + EDITTEXT 1007, 28, 172, 181, 14, ES_UPPERCASE | ES_AUTOHSCROLL | ES_OEMCONVERT + DEFPUSHBUTTON "OK", 1, 121, 203, 50, 14, WS_GROUP + PUSHBUTTON "Avbryt", 2, 176, 203, 50, 14 +END + +IDD_PROPPAGEDNSANDNETBIOS DIALOGEX 0, 0, 266, 125 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_CAPTION +CAPTION "DNS-suffiks og NetBIOS-datamaskinnavn" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Primжrt DNS-suffiks for denne datamaskinen:", -1, 7, 5, 253, 8 + EDITTEXT 1011, 7, 17, 252, 14, ES_AUTOHSCROLL + AUTOCHECKBOX "&Endre primжrt DNS-suffiks nеr domenemedlemskap endres", 115, 11, 39, 250, 10 + LTEXT "&NetBIOS-datamaskinnavn:", -1, 7, 57, 148, 8 + EDITTEXT 1013, 7, 69, 150, 14, ES_UPPERCASE | ES_AUTOHSCROLL | ES_READONLY + DEFPUSHBUTTON "OK", 1, 153, 104, 50, 14 + PUSHBUTTON "Avbryt", 2, 209, 104, 50, 14 + LTEXT "Dette navnet brukes for interoperabilitet med eldre datamaskiner og tjenester.", 13, 7, 88, 253, 8 +END + +STRINGTABLE +BEGIN + 1 "* Ukjent *" + 2 "ARBEIDSGRUPPE" + 3 "The following error occurred while attempting to read domain membership information:" + 4 "Endring i datamaskinnavn" + 5 "Arbeidsgruppe:" + 6 "Domene:" + 22 "Velkommen til %1 arbeidsgruppen." + 23 "Velkommen til %1 domene." + 24 "Du mе starte denne datamaskinen pе nytt for at endringene skal tre i kraft." + 1021 "Note: Only Administrators can change the identification of this computer." + 1022 "Note: The identification of the computer cannot be changed because:" + 3210 "&Detaljer >>" + 3220 "<< &Detaljer" +END diff --git a/reactos/dll/win32/netid/rsrc.rc b/reactos/dll/win32/netid/rsrc.rc index 795afbc2de0..b4e6945271f 100644 --- a/reactos/dll/win32/netid/rsrc.rc +++ b/reactos/dll/win32/netid/rsrc.rc @@ -10,6 +10,7 @@ #include "lang/fr-FR.rc" #include "lang/id-ID.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/win32/newdev/lang/nb-NO.rc b/reactos/dll/win32/newdev/lang/no-NO.rc similarity index 100% rename from reactos/dll/win32/newdev/lang/nb-NO.rc rename to reactos/dll/win32/newdev/lang/no-NO.rc diff --git a/reactos/dll/win32/newdev/lang/sk-SK.rc b/reactos/dll/win32/newdev/lang/sk-SK.rc index 9f34db196ca..ccb70f080e4 100644 --- a/reactos/dll/win32/newdev/lang/sk-SK.rc +++ b/reactos/dll/win32/newdev/lang/sk-SK.rc @@ -1,6 +1,6 @@ /* TRANSLATOR : Mбrio Kaиmбr /Mario Kacmar/ aka Kario (kario@szm.sk) * DATE OF TR.: 15-02-2008 - * LAST CHANGE: 27-06-2008 + * LAST CHANGE: 24-07-2008 */ LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT @@ -16,7 +16,7 @@ BEGIN IDC_STATIC,120,21,195,16 LTEXT "Kliknite na tlaиidlo Пalej pre pokraиovanie.",IDC_STATIC,120,169,195,17 LTEXT "NEZNБME ZARIADENIE",IDC_DEVICE,134,36,164,11 - LTEXT "UPOZORNENIE! NAINЉTALOVANIE VLASNTNЙHO ZARIADENIA MФЋE SPФSOBIЌ ZAMАZANIE VБЉHO POИНTAИA ALEBO ZNEFUNKИNIЌ ZAVБDZANIE OPERAИNЙHO SYSTЙMU!",IDC_STATIC,120,59,195,16 + LTEXT "UPOZORNENIE! NAINЉTALOVANIE VLASTNЙHO ZARIADENIA MФЋE SPФSOBIЌ ZAMАZANIE VБЉHO POИНTAИA ALEBO ZNEFUNKИNIЌ ZAVБDZANIE OPERAИNЙHO SYSTЙMU!",IDC_STATIC,120,59,195,36 CONTROL "Nainљtalovaќ ovlбdaи automaticky",IDC_RADIO_AUTO,"Button", BS_AUTORADIOBUTTON,120,112,178,13 CONTROL "Nainљtalovaќ ovlбdaи zo zadanйho umiestnenia",IDC_RADIO_MANUAL, diff --git a/reactos/dll/win32/newdev/rsrc.rc b/reactos/dll/win32/newdev/rsrc.rc index 607b3343487..897e4a5dcb7 100644 --- a/reactos/dll/win32/newdev/rsrc.rc +++ b/reactos/dll/win32/newdev/rsrc.rc @@ -16,7 +16,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/hu-HU.rc" #include "lang/id-ID.rc" #include "lang/it-IT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/win32/ntmarta/ntmarta.c b/reactos/dll/win32/ntmarta/ntmarta.c index c18b65223f6..7f7f523066b 100644 --- a/reactos/dll/win32/ntmarta/ntmarta.c +++ b/reactos/dll/win32/ntmarta/ntmarta.c @@ -16,7 +16,7 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -/* $Id$ +/* $Id: ntmarta.c 31176 2007-12-12 07:04:12Z weiden $ * * PROJECT: ReactOS MARTA provider * FILE: lib/ntmarta/ntmarta.c diff --git a/reactos/dll/win32/ntmarta/ntmarta.rbuild b/reactos/dll/win32/ntmarta/ntmarta.rbuild index b1a2e7d96f3..bbe1ac33df6 100644 --- a/reactos/dll/win32/ntmarta/ntmarta.rbuild +++ b/reactos/dll/win32/ntmarta/ntmarta.rbuild @@ -1,5 +1,5 @@ - + . 0x0500 0x600 @@ -10,5 +10,6 @@ user32 ntmarta.c ntmarta.rc + ntmarta.spec ntmarta.h diff --git a/reactos/dll/win32/ntmarta/ntmarta.def b/reactos/dll/win32/ntmarta/ntmarta.spec similarity index 60% rename from reactos/dll/win32/ntmarta/ntmarta.def rename to reactos/dll/win32/ntmarta/ntmarta.spec index e001a860320..f1c90fa7f75 100644 --- a/reactos/dll/win32/ntmarta/ntmarta.def +++ b/reactos/dll/win32/ntmarta/ntmarta.spec @@ -1,16 +1,13 @@ -LIBRARY ntmarta.dll - -EXPORTS -AccFreeIndexArray -AccGetInheritanceSource +@ stdcall AccFreeIndexArray(ptr long ptr) +@ stdcall AccGetInheritanceSource(wstr long long long ptr long ptr ptr ptr ptr) ;AccProvHandleGrantAccessRights -AccRewriteGetExplicitEntriesFromAcl -AccRewriteGetHandleRights -AccRewriteGetNamedRights -AccRewriteSetEntriesInAcl -AccRewriteSetHandleRights -AccRewriteSetNamedRights -AccTreeResetNamedSecurityInfo +@ stdcall AccRewriteGetExplicitEntriesFromAcl(ptr ptr ptr) +@ stdcall AccRewriteGetHandleRights(ptr long long ptr ptr ptr ptr ptr) +@ stdcall AccRewriteGetNamedRights(wstr long long ptr ptr ptr ptr ptr) +@ stdcall AccRewriteSetEntriesInAcl(long ptr ptr ptr) +@ stdcall AccRewriteSetHandleRights(ptr long long ptr) +@ stdcall AccRewriteSetNamedRights(wstr long long ptr) +@ stdcall AccTreeResetNamedSecurityInfo(wstr long long ptr ptr ptr ptr long ptr ptr ptr) ;AccConvertAccessMaskToActrlAccess ;AccConvertAccessToSD ;AccConvertAccessToSecurityDescriptor @@ -43,5 +40,3 @@ AccTreeResetNamedSecurityInfo ;AccSetEntriesInAList ;EventGuidToName ;EventNameFree - -; EOF diff --git a/reactos/dll/win32/odbccp32/odbccp32.rbuild b/reactos/dll/win32/odbccp32/odbccp32.rbuild index 774eb44ecfb..f8d461c36a8 100644 --- a/reactos/dll/win32/odbccp32/odbccp32.rbuild +++ b/reactos/dll/win32/odbccp32/odbccp32.rbuild @@ -1,7 +1,7 @@ - + . include/reactos/wine diff --git a/reactos/dll/win32/rasdlg/lang/no-NO.rc b/reactos/dll/win32/rasdlg/lang/no-NO.rc new file mode 100644 index 00000000000..39378672f4a --- /dev/null +++ b/reactos/dll/win32/rasdlg/lang/no-NO.rc @@ -0,0 +1,2373 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +102 DIALOGEX 0, 0, 255, 265 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Alternativ telefonnummer" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Velg alternativ telefonnummer som du vil bruke for denne tilkoblingen.", 1018, 7, 5, 243, 16 + LTEXT "&Telefonnummer:", 1019, 7, 27, 238, 8 + CONTROL "", 1012, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000848D, 7, 38, 217, 144 + PUSHBUTTON "Flytt &opp", 1017, 230, 40, 18, 16, BS_ICON + PUSHBUTTON "Flytt &ned", 1015, 230, 61, 18, 16, BS_ICON + PUSHBUTTON "&Legg til...", 1013, 7, 187, 70, 14 + PUSHBUTTON "&Rediger...", 1016, 81, 187, 70, 14 + PUSHBUTTON "&Slett", 1014, 154, 187, 70, 14 + AUTOCHECKBOX "Hvis &nummeret mislykkes, prшv neste nummer", 1011, 8, 210, 243, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&Flytt vellykket nummer til toppen av denne listen", 1010, 8, 228, 243, 10, BS_TOP | BS_MULTILINE + DEFPUSHBUTTON "OK", 1, 122, 245, 60, 14 + PUSHBUTTON "Avbryt", 2, 188, 245, 60, 14 +END + +103 DIALOGEX 6, 18, 250, 170 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "Nettverk tilkoblinger" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", 1029, 5, 5, 241, 35, NOT WS_GROUP + LTEXT "T&ilkoblinger:", -1, 5, 46, 238, 10 + CONTROL "List1", 1677, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000440D, 5, 57, 240, 57 + AUTOCHECKBOX "&Ikke spшr meg igjen til neste tiden jeg logger pе", 1022, 8, 125, 235, 10 + PUSHBUTTON "&Innstillinger", 1026, 7, 149, 60, 14 + DEFPUSHBUTTON "&Koble til...", 1024, 117, 149, 60, 14 + PUSHBUTTON "Avbryt", 1025, 183, 149, 60, 14 +END + +104 DIALOGEX 6, 18, 269, 263 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Line Bundling Errors" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 32516, 1031, 7, 7, 20, 20 + LTEXT "One or more additional lines did not connect. ", 1033, 37, 8, 216, 20 + CONTROL "", 1032, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x00008401, 37, 83, 224, 136 + AUTOCHECKBOX "&Do not attempt failed lines in the future", 1030, 38, 226, 222, 10 + DEFPUSHBUTTON "&Accept", 1, 135, 242, 60, 14 + PUSHBUTTON "&Hang Up", 2, 201, 242, 60, 14 + LTEXT "If only a single line connected, the server may not be configured to accept multi-link calls. Check 'Do not attempt failed lines' to avoid unnecessary connection charges in such a case.", -1, 37, 36, 224, 44 +END + +105 DIALOGEX 0, 0, 261, 253 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Avansert sikkerhet innstilling" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Pеlogging sikkerhet", 1547, 7, 33, 246, 191 + LTEXT "&Data encryption:", 1546, 7, 5, 247, 10 + COMBOBOX 1495, 7, 17, 247, 76, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + AUTORADIOBUTTON "Use &Extensible Authentication Protocol (EAP)", 1544, 17, 47, 226, 8, WS_GROUP + LTEXT "EAP Type", -1, 18, 64, 35, 8, NOT WS_VISIBLE | NOT WS_GROUP + COMBOBOX 1034, 53, 62, 191, 42, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "E&genskaper", 1035, 184, 77, 60, 14 + AUTORADIOBUTTON "Allow these &protocols", 1545, 17, 92, 224, 10 + AUTOCHECKBOX "&Unencrypted password (PAP)", 1491, 28, 105, 215, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTOCHECKBOX "&Shiva Password Authentication Protocol (SPAP)", 1496, 28, 119, 214, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&Challenge Handshake Authentication Protocol (CHAP)", 1494, 28, 133, 215, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&MS CHAP (MS-CHAP)", 1493, 28, 148, 212, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Allow older MS-CHAP version for &Win 95 servers", 200, 46, 162, 198, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "M&icrosoft CHAP Version 2 (MS-CHAP v2)", 1492, 28, 176, 200, 10, BS_TOP | BS_MULTILINE + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 28, 189, 208, 1 + AUTOCHECKBOX "&For MS-CHAP based protocols, automatically use my ReactOS logon name and password (and domain if any)", 1549, 28, 195, 213, 24, BS_TOP | BS_MULTILINE + DEFPUSHBUTTON "OK", 1, 127, 232, 60, 14 + PUSHBUTTON "Avbryt", 2, 192, 232, 60, 14 +END + +106 DIALOGEX 6, 18, 255, 109 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Tilkobling fullfшrt" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 97, 91, 60, 14 + ICON 563, 1046, 7, 7, 20, 20 + LTEXT "'Connection name' er nе tilkoblet.", 1047, 40, 7, 212, 16 + LTEXT "To check the status of this connection or disconnect, right-click its icon in the Network Connections folder, or click its icon on the taskbar (if present).", -1, 40, 30, 212, 34 + AUTOCHECKBOX "&Ikke vis denne meldingen igjen", 1045, 40, 69, 212, 10, BS_TOP | BS_MULTILINE +END + +107 DIALOGEX 0, 0, 258, 167 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Telefonnummer", 1053, 7, 5, 243, 92 + LTEXT "&Area code:", 1055, 18, 17, 54, 8 + COMBOBOX 1049, 17, 30, 55, 129, CBS_DROPDOWN | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Phone number:", 1057, 77, 17, 166, 8, NOT WS_GROUP + EDITTEXT 1051, 77, 30, 163, 14, ES_AUTOHSCROLL + LTEXT "&Country/region code:", 1056, 18, 48, 221, 8, NOT WS_GROUP + COMBOBOX 1054, 17, 61, 224, 93, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + AUTOCHECKBOX "&Use dialing rules", 1048, 20, 81, 219, 10, BS_TOP | BS_MULTILINE + GROUPBOX "Co&mment", 1052, 7, 102, 243, 36 + EDITTEXT 1050, 17, 115, 224, 14, ES_AUTOHSCROLL + DEFPUSHBUTTON "OK", 1, 127, 147, 60, 14 + PUSHBUTTON "Avbryt", 2, 191, 147, 60, 14 +END + +108 DIALOGEX 6, 18, 222, 104 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Endre passord" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Your password on the remote network has expired. Enter passwords, then press OK to set a new one.", 1062, 7, 5, 210, 24 + LTEXT "&Ny passord:", 1064, 8, 43, 108, 8 + EDITTEXT 1060, 118, 38, 98, 14, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "&Bekreft det nye passordet:", 1061, 8, 61, 102, 8 + EDITTEXT 1058, 118, 57, 98, 14, ES_PASSWORD | ES_AUTOHSCROLL + DEFPUSHBUTTON "OK", 1, 90, 84, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 2, 154, 84, 60, 14 +END + +109 DIALOGEX 6, 18, 223, 122 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Endre passord" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Your password on the remote network has expired. Enter passwords, then press OK to set a new one.", 1062, 7, 5, 212, 29 + LTEXT "&Old password:", 1063, 7, 42, 108, 8 + EDITTEXT 1059, 116, 38, 100, 14, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "&Ny passord:", 1064, 7, 60, 108, 8 + EDITTEXT 1060, 116, 56, 100, 14, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "&Bekreft det nye passordet:", 1061, 7, 78, 108, 8 + EDITTEXT 1058, 116, 74, 100, 14, ES_PASSWORD | ES_AUTOHSCROLL + DEFPUSHBUTTON "OK", 1, 92, 101, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 2, 156, 101, 60, 14 +END + +110 DIALOGEX 12, 16, 230, 105 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Callback" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "You have 'Set By Caller' callback privilege on the server. Press OK and the server will call you back at the number below. Press Cancel to skip callback.", 1066, 5, 5, 221, 39, SS_NOPREFIX + LTEXT "&Enter your modem's phone number:", 1067, 5, 46, 222, 8, NOT WS_GROUP + EDITTEXT 1065, 5, 57, 221, 14, ES_AUTOHSCROLL + DEFPUSHBUTTON "OK", 1, 100, 85, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 2, 164, 85, 60, 14 +END + +111 DIALOGEX 6, 19, 265, 135 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Error Connecting to %1" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 32515, 1068, 7, 7, 20, 20, WS_GROUP + LTEXT "", 1070, 34, 7, 226, 105 + DEFPUSHBUTTON "Do not dial=88", 1, 4, 117, 128, 14, WS_GROUP + PUSHBUTTON "Avbryt", 2, 136, 117, 60, 14 + PUSHBUTTON "&Mere Info", 1069, 200, 117, 60, 14 +END + +112 DIALOGEX 6, 18, 263, 219 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Automatic Dialing And Hanging Up" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS can automatically dial and hang up devices depending on how much information is being sent and received.", 1085, 9, 7, 253, 30 + GROUPBOX "Automatic dialing", -1, 6, 38, 249, 71 + LTEXT "Dial another line when this connection meets both of the following conditions:", 1083, 16, 51, 237, 16, NOT WS_GROUP + LTEXT "Activity at &least:", -1, 16, 73, 100, 8 + COMBOBOX 1079, 117, 70, 60, 100, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Duration at least:", 1084, 16, 92, 99, 8, NOT WS_GROUP + COMBOBOX 1080, 117, 89, 90, 162, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + GROUPBOX "Automatic hangup", -1, 6, 113, 248, 81 + LTEXT "Hang up any device used for this connection when it meets both of the following conditions:", 1086, 16, 127, 230, 18, NOT WS_GROUP + LTEXT "Activity no &more than:", -1, 16, 150, 92, 8 + COMBOBOX 1081, 115, 146, 60, 100, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "D&uration at least:", 1087, 16, 168, 92, 8, NOT WS_GROUP + COMBOBOX 1082, 115, 166, 90, 151, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + DEFPUSHBUTTON "OK", 1, 131, 199, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 2, 194, 199, 60, 14 +END + +113 DIALOGEX 21, 46, 225, 65 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "Koble til %1..." +FONT 8, "MS Shell Dlg" +BEGIN + ICON 563, 1417, 7, 7, 20, 20 + LTEXT "", 1097, 36, 7, 185, 35, SS_NOPREFIX + PUSHBUTTON "Avbryt", 2, 83, 47, 60, 14 +END + +114 DIALOGEX 6, 18, 225, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Dial-Up Nettverk" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 563, 1098, 7, 6, 20, 20, WS_GROUP + LTEXT "The autodial attempt failed. Do you want to disable autodial from this location?", 1099, 40, 6, 181, 34, NOT WS_GROUP + PUSHBUTTON "&Ja", 1, 60, 42, 50, 14 + DEFPUSHBUTTON "&Nei", 2, 115, 42, 50, 14 +END + +115 DIALOGEX 0, 0, 263, 124 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Koble til %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 263, 50 + LTEXT "D&ial:", 1412, 9, 60, 68, 8 + COMBOBOX 1416, 88, 56, 165, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Dialing &from:", 1415, 9, 77, 71, 8 + COMBOBOX 1414, 88, 75, 89, 112, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "Dialing &Rules", 1108, 181, 75, 72, 14 + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 8, 96, 245, 1 + DEFPUSHBUTTON "&Dial", 1590, 8, 103, 61, 14 + PUSHBUTTON "Avbryt", 1591, 70, 103, 60, 14 + PUSHBUTTON "Eg&enskaper", 1107, 132, 103, 60, 14 + PUSHBUTTON "&Hjelp", 1592, 194, 103, 60, 14 +END + +116 DIALOGEX 0, 0, 265, 176 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Koble til %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&Brukernavn:", 1413, 8, 60, 88, 8 + EDITTEXT 1104, 103, 57, 154, 14, ES_AUTOHSCROLL + LTEXT "&Passord:", 1112, 8, 79, 88, 8 + EDITTEXT 1103, 103, 76, 154, 14, ES_PASSWORD | ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN, 8, 97, 248, 1 + AUTOCHECKBOX "&Save this user name and password for the following users:", 1101, 14, 105, 239, 13, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "Me o&nly", 1622, 26, 120, 226, 11, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "&Anyone who uses this computer", 1623, 26, 134, 229, 11, BS_LEFT | BS_TOP | BS_MULTILINE + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 8, 149, 248, 1 + DEFPUSHBUTTON "&Dial", 1590, 8, 156, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 1591, 71, 156, 60, 14 + PUSHBUTTON "Ege&nskaper", 1107, 133, 156, 60, 14 + PUSHBUTTON "&Hjelp", 1592, 195, 156, 60, 14 +END + +117 DIALOGEX 0, 0, 263, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Koble til %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&Brukernavn:", 1413, 9, 61, 92, 8 + EDITTEXT 1104, 102, 57, 154, 14, ES_AUTOHSCROLL + LTEXT "&Passord:", 1112, 9, 80, 92, 8 + EDITTEXT 1103, 102, 76, 154, 14, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "Do&mene:", 1110, 9, 99, 91, 8 + EDITTEXT 1102, 102, 95, 154, 14, ES_UPPERCASE | ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN, 9, 116, 247, 1 + AUTOCHECKBOX "&Save this user name and password for the following users:", 1101, 12, 123, 243, 13, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "Me o&nly", 1622, 25, 137, 229, 11, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "&Anyone who uses this computer", 1623, 25, 151, 230, 11, BS_LEFT | BS_TOP | BS_MULTILINE + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 9, 167, 247, 1 + DEFPUSHBUTTON "&Dial", 1590, 8, 173, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 1591, 71, 173, 60, 14 + PUSHBUTTON "Eg&enskaper", 1107, 133, 173, 60, 14 + PUSHBUTTON "&Hjelp", 1592, 195, 173, 60, 14 +END + +118 DIALOGEX 0, 0, 265, 220 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Koble til %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&Brukernavn:", 1413, 10, 61, 92, 8 + EDITTEXT 1104, 104, 57, 154, 14, ES_AUTOHSCROLL + LTEXT "&Passord:", 1112, 10, 80, 92, 8 + EDITTEXT 1103, 104, 76, 154, 14, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "Do&mene:", 1110, 10, 100, 92, 8 + EDITTEXT 1102, 104, 95, 154, 14, ES_UPPERCASE | ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN, 11, 116, 247, 1 + AUTOCHECKBOX "&Save this user name and password for the following users:", 1101, 16, 124, 239, 13, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "Me o&nly", 1622, 29, 139, 225, 11, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "&Anyone who uses this computer", 1623, 29, 152, 225, 11, BS_LEFT | BS_TOP | BS_MULTILINE + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 167, 247, 1 + LTEXT "D&ial:", 1412, 10, 177, 90, 8 + COMBOBOX 1416, 102, 173, 154, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 192, 247, 1 + DEFPUSHBUTTON "&Dial", 1590, 10, 199, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 1591, 72, 199, 60, 14 + PUSHBUTTON "Eg&enskaper", 1107, 134, 199, 60, 14 + PUSHBUTTON "&Hjelp", 1592, 196, 199, 60, 14 +END + +119 DIALOGEX 0, 0, 265, 200 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Koble til %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&Brukernavn:", 1413, 10, 62, 91, 8 + EDITTEXT 1104, 104, 58, 154, 14, ES_AUTOHSCROLL + LTEXT "&Passord:", 1112, 10, 81, 92, 8 + EDITTEXT 1103, 104, 77, 154, 14, ES_PASSWORD | ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN, 10, 97, 247, 1 + AUTOCHECKBOX "&Save this user name and password for the following users:", 1101, 12, 103, 243, 13, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "Me o&nly", 1622, 24, 117, 229, 11, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "&Anyone who uses this computer", 1623, 24, 132, 229, 11, BS_LEFT | BS_TOP | BS_MULTILINE + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 147, 247, 1 + LTEXT "D&ial:", 1412, 13, 157, 88, 8 + COMBOBOX 1416, 103, 154, 154, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 173, 247, 1 + DEFPUSHBUTTON "&Dial", 1590, 10, 180, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 1591, 72, 180, 60, 14 + PUSHBUTTON "Egen&skaper", 1107, 134, 180, 60, 14 + PUSHBUTTON "&Hjelp", 1592, 197, 180, 60, 14 +END + +121 DIALOGEX 6, 18, 230, 131 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "ISDN Configuration" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Line type:", 1155, 9, 9, 65, 8 + COMBOBOX 1153, 76, 7, 148, 42, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + AUTOCHECKBOX "&Negotiate line type", 1150, 23, 26, 199, 10, BS_TOP | BS_MULTILINE | WS_GROUP + GROUPBOX " ", 1152, 8, 48, 214, 51, WS_GROUP + AUTOCHECKBOX "&Use old proprietary protocol", 1149, 17, 48, 102, 10, BS_TOP | BS_MULTILINE + LTEXT "&Channels to use:", 1154, 16, 65, 100, 8, NOT WS_GROUP + EDITTEXT 1151, 119, 61, 94, 14, ES_AUTOHSCROLL + AUTOCHECKBOX "&Enable hardware compression", 1148, 16, 82, 198, 10, BS_TOP | BS_MULTILINE + PUSHBUTTON "OK", 1, 99, 109, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 2, 163, 109, 60, 14 +END + +122 DIALOGEX 6, 18, 220, 68 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "ISDN Configure" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Line type:", 1155, 9, 11, 55, 8 + COMBOBOX 1153, 67, 7, 148, 43, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + AUTOCHECKBOX "&Negotiate line type", 1150, 21, 28, 194, 10, BS_TOP | BS_MULTILINE | WS_GROUP + PUSHBUTTON "OK", 1, 90, 49, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 2, 154, 49, 60, 14 +END + +123 DIALOGEX 11, 20, 350, 275 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + EDITTEXT 1161, 5, 5, 338, 236, ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | WS_GROUP + LTEXT "I&P address:", 1163, 7, 253, 68, 8 + CONTROL "", 1160, "RASIPADDRESS", WS_TABSTOP, 76, 250, 117, 14 + DEFPUSHBUTTON "", 1162, 197, 252, 16, 13, NOT WS_VISIBLE | WS_GROUP | NOT WS_TABSTOP + PUSHBUTTON "&Fullfшrt", 1, 219, 252, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 2, 283, 252, 60, 14 +END + +124 DIALOGEX 6, 17, 350, 266 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + EDITTEXT 1161, 5, 4, 340, 236, ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | WS_GROUP + DEFPUSHBUTTON "", 1162, 7, 247, 50, 14, NOT WS_VISIBLE | WS_GROUP | NOT WS_TABSTOP + PUSHBUTTON "&Fullfшrt", 1, 222, 247, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 2, 286, 247, 60, 14 +END + +125 DIALOGEX 12, 16, 261, 190 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Modem Configuration" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 15102, 1238, 7, 7, 20, 20 + LTEXT "Modem", -1, 25, 27, 24, 8, NOT WS_VISIBLE | NOT WS_GROUP + EDITTEXT 1235, 40, 7, 214, 16, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER + LTEXT "&Maximum speed (bps):", 1243, 7, 36, 110, 8 + COMBOBOX 1239, 119, 34, 136, 186, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Modem &protocol", 1244, 7, 52, 111, 8 + COMBOBOX 1245, 119, 50, 136, 186, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + GROUPBOX "Hardware features", 1237, 6, 70, 248, 61, WS_GROUP + AUTOCHECKBOX "E&nable hardware flow control", 1232, 19, 82, 217, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "En&able modem error control", 1231, 19, 98, 217, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Enable m&odem compression", 1229, 19, 115, 217, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&Show terminal window", 1234, 8, 136, 246, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Enable mo&dem speaker", 1230, 8, 151, 247, 10, BS_TOP | BS_MULTILINE | WS_GROUP + DEFPUSHBUTTON "OK", 1, 129, 171, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 2, 194, 171, 60, 14 +END + +126 DIALOGEX 0, 0, 270, 117 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Select Network Component Type" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Click the type of network component you want to install:", -1, 8, 7, 258, 8 + CONTROL "", 1251, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 8, 20, 188, 58 + GROUPBOX "", -1, 8, 81, 188, 30 + LTEXT "", 1250, 12, 90, 177, 17 + DEFPUSHBUTTON "&Legg til...", 1252, 205, 20, 60, 14 + PUSHBUTTON "Avbryt", 2, 205, 38, 60, 14 +END + +127 DIALOGEX 16, 20, 260, 135 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "NetWare or Compatible Connections" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 32515, 1278, 7, 7, 21, 20, WS_GROUP + LTEXT "You have connections to a NetWare compatible network. These connections will be closed when the PPP IPX connection is established.", 1279, 42, 7, 215, 37 + LTEXT "Before dialing, to avoid data loss, either close all files using these connections or uncheck IPX on this entry's Network Protocol settings.", 1280, 42, 46, 215, 38, NOT WS_GROUP + AUTOCHECKBOX "&Do not display this message in the future", 1277, 42, 86, 215, 10, BS_TOP | BS_MULTILINE | WS_GROUP + DEFPUSHBUTTON "OK", 1, 65, 112, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 2, 134, 112, 60, 14 +END + +128 DIALOGEX 7, 22, 236, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Manual Dial" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Pick up the handset and dial (or ask the operator to dial). After dialing is complete, click OK. Listen to handset until silent, and then hang up.", 1281, 8, 8, 219, 32 + LTEXT "Telefonnummer:", 1282, 8, 46, 91, 8 + LTEXT "", 1283, 103, 46, 126, 8, NOT WS_GROUP + DEFPUSHBUTTON "OK", 1, 104, 70, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 2, 168, 70, 60, 14 +END + +129 DIALOGEX 6, 20, 260, 85 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Network Protocol Connection Result" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 32516, 1328, 7, 7, 21, 20, WS_GROUP + LTEXT "", 1329, 38, 7, 216, 24, NOT WS_GROUP + AUTOCHECKBOX "&Do not request the failed protocols next time", 1327, 40, 44, 215, 10, BS_TOP | BS_MULTILINE | WS_GROUP + PUSHBUTTON "&Accept", 1, 129, 64, 60, 14 + PUSHBUTTON "&Hang Up", 2, 193, 64, 60, 14 +END + +133 DIALOGEX 6, 18, 231, 211 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "X.25 Logon Settings" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Select your X.25 network provider and type the X.121 address of the remote server:", 1408, 7, 4, 220, 27 + LTEXT "&Nettverk:", 1410, 9, 35, 213, 8, NOT WS_GROUP + COMBOBOX 1406, 9, 46, 215, 125, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "X.121&address:", 1407, 9, 66, 213, 8, NOT WS_GROUP + EDITTEXT 1402, 8, 77, 215, 14, ES_AUTOHSCROLL + GROUPBOX "Optional", 1405, 8, 95, 215, 79 + LTEXT "&User data:", 1411, 19, 109, 182, 8, NOT WS_GROUP + EDITTEXT 1404, 19, 120, 193, 14, ES_AUTOHSCROLL + LTEXT "&Facilities:", 1409, 19, 138, 182, 8, NOT WS_GROUP + EDITTEXT 1403, 19, 149, 193, 14, ES_AUTOHSCROLL + DEFPUSHBUTTON "OK", 1, 100, 189, 60, 14 + PUSHBUTTON "Avbryt", 2, 164, 189, 60, 14 +END + +146 DIALOGEX 6, 18, 230, 210 +STYLE DS_SHELLFONT | WS_CHILD | WS_VISIBLE | WS_CAPTION +CAPTION "Autodial" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "If you are disconnected from a network, autodial attempts to connect to a network whenever you try to access remote information.", -1, 7, 4, 219, 32 + LTEXT "&Enable autodial by location:", 1006, 8, 42, 213, 8 + CONTROL "", 1004, "SYSLISTVIEW32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x0000C401, 7, 53, 216, 109 + AUTOCHECKBOX "Al&ways ask me before autodialing", 1496, 8, 170, 218, 9, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&Disable autodial while I am logged on", 1550, 8, 185, 217, 9, BS_TOP | BS_MULTILINE +END + +147 DIALOGEX 6, 18, 230, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_VISIBLE | WS_CAPTION +CAPTION "Dialing" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "These preferences apply to 'Login using Dial-Up Networking' at Ctrl-Alt-Del login. You, as an administrator, have access to this sheet.", 1007, 7, 4, 221, 40, NOT WS_GROUP + LTEXT "&Number of redial attempts:", 1005, 7, 55, 154, 8 + EDITTEXT 1001, 164, 52, 60, 14, ES_AUTOHSCROLL + LTEXT "&Seconds between redial attempts:", 1009, 7, 73, 156, 8, NOT WS_GROUP + EDITTEXT 1003, 164, 70, 60, 14, ES_AUTOHSCROLL + LTEXT "I&dle seconds before hanging up:", 1008, 7, 91, 154, 8, NOT WS_GROUP + EDITTEXT 1002, 164, 88, 60, 14, ES_AUTOHSCROLL +END + +148 DIALOGEX 6, 18, 230, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_VISIBLE | WS_CAPTION +CAPTION "Callback" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "When you dial into a server, it may offer to call you back to reduce your phone charges. Specify whether you want callback. (Callback is not supported for virtual private network (VPN) connections.)", 1043, 8, 4, 219, 43 + AUTORADIOBUTTON "&No callback", 1041, 7, 48, 219, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "A&sk me during dialing when the server offers", 1040, 7, 61, 219, 10, BS_TOP | BS_MULTILINE + AUTORADIOBUTTON "Al&ways call me back at the number(s) below:", 1042, 7, 74, 219, 10, BS_TOP | BS_MULTILINE + CONTROL "", 1037, "SYSLISTVIEW32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x00008401, 16, 88, 204, 94 + PUSHBUTTON "&Edit...", 1039, 96, 190, 60, 14 + PUSHBUTTON "&Delete", 1038, 159, 190, 60, 14 +END + +149 DIALOGEX 6, 18, 317, 142 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "You need to set the dial-in credentials that remote routers will use when connecting to this interface. A user account will be created on this router with the information that you enter here.", 1094, 8, 5, 307, 35 + LTEXT "&User name:", 1078, 8, 47, 124, 8, NOT WS_GROUP + EDITTEXT 1074, 135, 45, 175, 12, ES_AUTOHSCROLL | WS_DISABLED + LTEXT "&Password:", 1077, 8, 68, 124, 8, NOT WS_GROUP + EDITTEXT 1073, 135, 66, 175, 12, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "&Confirm password:", 1075, 8, 90, 124, 8, NOT WS_GROUP + EDITTEXT 1071, 135, 87, 175, 12, ES_PASSWORD | ES_AUTOHSCROLL +END + +150 DIALOGEX 6, 18, 321, 144 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "You need to set the dial out credentials that this interface will use when connecting to the remote router. These credentials must match the dial in credentials configured on the remote router.", 1094, 8, 5, 308, 33 + LTEXT "&Brukernavn:", 1096, 8, 43, 130, 8, NOT WS_GROUP + EDITTEXT 1091, 140, 40, 175, 12, ES_AUTOHSCROLL + LTEXT "&Domene:", 1093, 8, 63, 130, 8, NOT WS_GROUP + EDITTEXT 1089, 140, 60, 175, 12, ES_UPPERCASE | ES_AUTOHSCROLL + LTEXT "&Passord:", 1095, 8, 81, 130, 8, NOT WS_GROUP + EDITTEXT 1090, 140, 78, 175, 12, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "&Bekreft passord:", 1092, 8, 99, 130, 8, NOT WS_GROUP + EDITTEXT 1088, 140, 96, 175, 12, ES_PASSWORD | ES_AUTOHSCROLL +END + +153 DIALOGEX 0, 0, 315, 140 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Type a name you want for this connection:", -1, 8, 4, 190, 8 + EDITTEXT 1114, 8, 17, 190, 12, ES_AUTOHSCROLL + LTEXT "Click Finish to save it in the Network Connections folder.", -1, 8, 38, 193, 8 + LTEXT "To edit this connection later, select it, click the File menu, and then click Properties.", -1, 8, 58, 193, 16 +END + +155 DIALOGEX 0, 0, 231, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "Generielt" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Connec&t using:", 1124, 7, 5, 219, 8 + CONTROL "", 1128, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x00004C0D, 7, 17, 198, 44, WS_EX_CLIENTEDGE + PUSHBUTTON "&Opp", 1132, 210, 18, 16, 14, BS_ICON + PUSHBUTTON "&Ned", 1131, 210, 36, 16, 14, BS_ICON + AUTOCHECKBOX "A&ll devices call the same numbers", 1119, 9, 66, 133, 14, BS_TOP | BS_MULTILINE + PUSHBUTTON "C&onfigure...", 1130, 144, 66, 60, 14 + GROUPBOX "Sample type", 1125, 8, 84, 215, 100, WS_GROUP + LTEXT "Ar&ea code:", 1133, 17, 102, 52, 8 + COMBOBOX 1122, 17, 112, 52, 110, CBS_DROPDOWN | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Phone number:", 1135, 71, 102, 139, 8 + EDITTEXT 1123, 73, 112, 79, 14, ES_AUTOHSCROLL + PUSHBUTTON "Alter&nates", 1129, 154, 112, 60, 14 + LTEXT "Country/re&gion code:", 1134, 17, 132, 197, 8 + COMBOBOX 1126, 17, 143, 193, 130, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + AUTOCHECKBOX "U&se dialing rules", 1121, 17, 163, 132, 14, BS_TOP | BS_MULTILINE + PUSHBUTTON "Dialing &Rules", 1136, 151, 161, 60, 14 + AUTOCHECKBOX "Sho&w icon in notification area when connected", 1120, 10, 192, 214, 19, BS_TOP | BS_MULTILINE +END + +156 DIALOGEX 0, 0, 231, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "Generielt" +FONT 8, "MS Shell Dlg" +BEGIN + PUSHBUTTON "C&onfigure...", 1130, 164, 38, 60, 14 + GROUPBOX "Sample text", 1125, 8, 55, 217, 100, WS_GROUP + LTEXT "Ar&ea code:", 1133, 17, 72, 48, 8 + COMBOBOX 1122, 17, 83, 48, 119, CBS_DROPDOWN | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Phone number:", 1135, 71, 72, 146, 8 + EDITTEXT 1123, 71, 83, 81, 14, ES_AUTOHSCROLL + PUSHBUTTON "Alter&nates", 1129, 155, 83, 63, 14 + LTEXT "Country/re&gion code:", 1134, 17, 103, 193, 8 + COMBOBOX 1126, 17, 114, 201, 130, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + AUTOCHECKBOX "U&se dialing rules", 1121, 19, 134, 136, 12, BS_TOP | BS_MULTILINE + PUSHBUTTON "Dialing &Rules", 1136, 157, 132, 60, 14 + AUTOCHECKBOX "Sho&w icon in notification area when connected", 1120, 12, 164, 209, 18, BS_TOP | BS_MULTILINE + LTEXT "Connect using:", 1124, 8, 5, 217, 8 + CONTROL "", 1127, "SYSLISTVIEW32", WS_DISABLED | WS_BORDER | 0x0000EC0D, 7, 18, 217, 15 +END + +157 DIALOGEX 6, 18, 235, 160 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Appearance" +FONT 8, "MS Shell Dlg" +BEGIN + AUTOCHECKBOX "&Preview phone numbers before dialing", 1142, 8, 10, 224, 10, WS_GROUP + AUTOCHECKBOX "Show &location setting before dialing", 1139, 8, 27, 224, 10 + AUTOCHECKBOX "Allo&w location edits during login", 1140, 21, 43, 212, 10 + AUTOCHECKBOX "Show &connection progress while dialing", 1143, 8, 59, 224, 10 + AUTOCHECKBOX "Clo&se on dial", 1137, 8, 76, 224, 10 + AUTOCHECKBOX "All&ow phonebook edits during login", 1141, 8, 94, 224, 10 + AUTOCHECKBOX "&Use wizard to create new phonebook entries", 1144, 22, 111, 210, 10 +END + +158 DIALOGEX 6, 18, 235, 160 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Appearance" +FONT 8, "MS Shell Dlg" +BEGIN + AUTOCHECKBOX "&Preview phone numbers before dialing", 1142, 8, 10, 223, 10, WS_GROUP + AUTOCHECKBOX "Show &location setting before dialing", 1139, 8, 27, 206, 10 + AUTOCHECKBOX "Start dial-up networking &monitor before dialing", 1138, 8, 44, 226, 10 + AUTOCHECKBOX "Show &connection progress while dialing", 1143, 8, 61, 224, 10 + AUTOCHECKBOX "Clo&se on dial", 1137, 8, 79, 220, 10 + AUTOCHECKBOX "&Use wizard to create new phonebook entries", 1144, 8, 97, 220, 10 + AUTOCHECKBOX "Always prompt &before auto-dialing", 1136, 8, 114, 220, 10 +END + +160 DIALOGEX 6, 18, 320, 145 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CHILD | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Select a name for this demand dial interface. A common practice is to name interfaces after the network or router to which they connect.", 1158, 7, 5, 309, 29 + LTEXT "&Interface name:", 1159, 17, 41, 285, 8, NOT WS_GROUP + EDITTEXT 1157, 17, 53, 284, 12, ES_AUTOHSCROLL + AUTOCHECKBOX "I &know all about demand-dial interfaces and would rather edit the properties directly", 1156, 24, 100, 258, 31, BS_TOP | BS_MULTILINE | NOT WS_VISIBLE | WS_DISABLED +END + +162 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Sikkerhet" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Security options", 1580, 8, 3, 215, 139 + AUTORADIOBUTTON "&Typical (recommended settings)", 1540, 14, 16, 201, 9, BS_NOTIFY | WS_GROUP + AUTORADIOBUTTON "A&dvanced (custom settings)", 1541, 14, 102, 198, 8, BS_NOTIFY + LTEXT "&Validate my identity as follows:", 1537, 26, 29, 187, 8, NOT WS_GROUP + COMBOBOX 1178, 26, 40, 184, 78, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + AUTOCHECKBOX "A&utomatically use my ReactOS logon name and password (and domain if any)", 1174, 26, 58, 184, 20, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Requ&ire data encryption (disconnect if none)", 1169, 26, 82, 183, 10, BS_TOP | BS_MULTILINE + LTEXT "Using these settings requires a knowledge of security protocols.", 1539, 15, 114, 134, 20 + PUSHBUTTON "&Settings...", 1180, 151, 115, 60, 14 + GROUPBOX "Interactive logon and scripting", 1177, 8, 146, 215, 62, WS_GROUP + AUTOCHECKBOX "S&how terminal window", 1173, 14, 159, 198, 11, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&Run script:", 1172, 14, 172, 57, 10, BS_TOP | BS_MULTILINE + COMBOBOX 1179, 72, 171, 140, 104, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "&Rediger...", 1182, 87, 187, 60, 14 + PUSHBUTTON "&Bla igjennom...", 1181, 151, 187, 60, 14 +END + +163 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "You have more than one dial-up device on your computer.", -1, 6, 3, 307, 13 + LTEXT "&Select the devices to use in this connection:", -1, 6, 15, 307, 11 + CONTROL "", 1228, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C415, 7, 28, 304, 77 +END + +165 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Nettverk" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Typ&e of dial-up server I am calling:", 1583, 7, 4, 219, 8 + COMBOBOX 1418, 7, 17, 215, 46, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "&Innstilling", 1419, 160, 35, 60, 14 + LTEXT "This c&onnection uses the following items:", 1684, 8, 64, 219, 10 + CONTROL "", 1251, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C40D, 7, 75, 216, 53 + PUSHBUTTON "I&nstaller...", 1252, 7, 133, 67, 14 + PUSHBUTTON "&Avinstaller", 1254, 80, 133, 67, 14 + PUSHBUTTON "E&genskaper", 1253, 153, 133, 67, 14 + GROUPBOX "Beskrivelse", 1585, 9, 158, 213, 43 + LTEXT "", 1250, 18, 167, 195, 25 +END + +166 DIALOGEX 6, 18, 320, 145 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Enter the IP address of a DNS or WINS server on the remote network, or leave as 0.0.0.0 if you expect the remote router to provide them, or do not know.", 1275, 7, 2, 311, 25 + LTEXT "&DNS server:", 1274, 7, 29, 160, 8, NOT WS_GROUP + CONTROL "", 1272, "RASIPADDRESS", WS_TABSTOP, 21, 41, 85, 12 + LTEXT "&WINS server:", 1276, 7, 65, 166, 8, NOT WS_GROUP + CONTROL "", 1273, "RASIPADDRESS", WS_TABSTOP, 21, 77, 85, 12 +END + +167 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Options" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Dialing options", 1289, 7, 2, 213, 64 + AUTOCHECKBOX "&Display progress while connecting", 1284, 16, 14, 201, 10 + AUTOCHECKBOX "&Prompt for name and password, certificate, etc.", 1554, 16, 27, 201, 10 + AUTOCHECKBOX "Include &ReactOS logon domain", 1555, 16, 39, 201, 10 + AUTOCHECKBOX "Prompt for phone &number", 1285, 16, 52, 200, 10, BS_TOP | BS_MULTILINE + GROUPBOX "Redialing options", 1290, 6, 72, 213, 79 + LTEXT "&Redial attempts:", 1300, 16, 87, 123, 8 + EDITTEXT 1287, 141, 84, 69, 14, ES_AUTOHSCROLL | ES_NUMBER + LTEXT "&Time between redial attempts:", 1301, 16, 103, 123, 8 + COMBOBOX 1292, 141, 101, 70, 123, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Idle ti&me before hanging up:", 1299, 16, 120, 123, 8 + COMBOBOX 1291, 141, 116, 70, 108, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + AUTOCHECKBOX "Redial if &line is dropped", 1286, 16, 136, 199, 10, BS_TOP | BS_MULTILINE + GROUPBOX "Multiple devices", 1288, 7, 156, 213, 32 + COMBOBOX 1551, 16, 169, 128, 45, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "C&onfigure...", 1293, 150, 168, 60, 14 + PUSHBUTTON "&X.25", 1295, 7, 194, 50, 14 + PUSHBUTTON "&Virtual \"tunnel\" connection", 1294, 62, 194, 120, 14, NOT WS_VISIBLE | WS_DISABLED +END + +168 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Type the phone number below. ", -1, 7, 4, 306, 14 + LTEXT "&Phone number:", 1308, 7, 19, 130, 8 + EDITTEXT 1304, 7, 30, 304, 14, ES_AUTOHSCROLL + LTEXT "You might need to include a \"1\" or the area code, or both. If you are not sure you need the extra numbers, dial the phone number on your telephone. If you hear a modem sound, the number dialed is correct.", -1, 20, 50, 291, 53 +END + +169 DIALOGEX 6, 18, 235, 135 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Phonebook" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Use this phonebook:", 1326, 8, 8, 222, 8 + AUTORADIOBUTTON "The &system phonebook", 1325, 14, 22, 216, 10, WS_GROUP + AUTORADIOBUTTON "My &personal phonebook", 1324, 14, 34, 216, 10 + AUTORADIOBUTTON "This a<ernate phonebook:", 1323, 14, 46, 217, 10 + COMBOBOX 1321, 26, 61, 201, 77, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_GROUP | NOT WS_TABSTOP + PUSHBUTTON "&Browse...", 1322, 167, 81, 60, 14 +END + +170 DIALOGEX 6, 18, 235, 135 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Phonebook" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Use this phonebook:", 1326, 8, 8, 223, 8 + AUTORADIOBUTTON "The &system phonebook", 1325, 14, 22, 217, 10, WS_GROUP + AUTORADIOBUTTON "This a<ernate phonebook:", 1323, 14, 36, 216, 10 + COMBOBOX 1321, 26, 51, 203, 77, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_GROUP | NOT WS_TABSTOP + PUSHBUTTON "&Browse...", 1322, 169, 69, 60, 14 +END + +171 DIALOGEX 6, 18, 317, 144 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Enter this router's IP address on the remote network or if you expect the remote router to provide the address, leave as 0.0.0.0. Usually the operator of the remote network or router will tell you what to use.", 1331, 5, 4, 308, 35 + LTEXT "My &IP address:", 1332, 4, 51, 100, 8, NOT WS_GROUP + CONTROL "", 1330, "RASIPADDRESS", WS_TABSTOP, 21, 62, 104, 12 + LTEXT "Note: If you have a network adapter installed, you should NOT choose the same address as your network adapter.", 1333, 5, 94, 306, 36, NOT WS_GROUP +END + +172 DIALOGEX 6, 18, 317, 144 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Some dial-up servers and routers require an interactive login after connecting. You can run a script automatically to respond for you.", 1339, 5, 3, 309, 27 + AUTOCHECKBOX "Show &terminal window", 1462, 15, 31, 162, 10 + AUTOCHECKBOX "&Run script:", 1463, 15, 45, 58, 10 + COMBOBOX 1334, 30, 60, 275, 88, CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "&Rediger...", 1335, 180, 77, 60, 14 + PUSHBUTTON "&Bla gjennom...", 1465, 244, 77, 60, 14 +END + +173 DIALOGEX 6, 18, 230, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_VISIBLE | WS_CAPTION +CAPTION "Dialing" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Dialing policy", 1344, 9, 4, 213, 53, WS_GROUP + LTEXT "&Number of redial attempts:", 1349, 16, 22, 140, 8, NOT WS_GROUP + EDITTEXT 1340, 158, 19, 56, 14, ES_AUTOHSCROLL + LTEXT "&Seconds between redial attempts:", 1351, 16, 38, 140, 8, NOT WS_GROUP + EDITTEXT 1342, 158, 36, 56, 14, ES_AUTOHSCROLL + GROUPBOX "Connection type", 1343, 9, 63, 213, 56, WS_GROUP + LTEXT "Idl&e seconds before hanging up:", 1350, 28, 88, 124, 8, NOT WS_GROUP + AUTORADIOBUTTON "&Demand dial connection", 1347, 16, 78, 135, 10, WS_GROUP + AUTORADIOBUTTON "&Persistent connection", 1348, 16, 103, 199, 10, NOT WS_TABSTOP, WS_EX_TRANSPARENT + EDITTEXT 1341, 159, 85, 56, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Callback...", 1345, 150, 125, 70, 14, WS_GROUP + PUSHBUTTON "&Multiple Lines...", 1346, 74, 125, 70, 14 +END + +174 DIALOGEX 0, 0, 215, 226 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Router" +FONT 8, "MS Shell Dlg" +BEGIN + CTEXT "NYI...need spec from KCrocker", -1, 57, 86, 106, 28 +END + +175 DIALOGEX 6, 18, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Completing the demand dial interface wizard.", 1352, 122, 5, 192, 32 + LTEXT "To create this interface and enable it on the router, click Finish.", 1354, 122, 41, 192, 26, NOT WS_GROUP + LTEXT "To edit this interface in the Routing and RemoteAccess Manager, select it in Routing Interfaces and press Properties.", 1355, 122, 68, 190, 39, NOT WS_GROUP +END + +179 DIALOGEX 6, 18, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Select the &modem or adapter this interface will use.", 1356, 7, 4, 306, 11 + CONTROL "", 1355, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C415, 6, 15, 305, 80 + LTEXT "The list shows devices set up for routing.", 1357, 15, 98, 288, 37, NOT WS_GROUP +END + +180 DIALOGEX 6, 18, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Enter the phone number of the dial-up server or router you are calling. Alternate phone numbers, if any, are dialed automatically if the primary number cannot be reached.", 1360, 7, 4, 305, 42 + LTEXT "&Phone number or address:", 1361, 7, 50, 275, 8, NOT WS_GROUP + EDITTEXT 1358, 7, 62, 304, 14, ES_AUTOHSCROLL + PUSHBUTTON "Alternates...", 1359, 250, 80, 60, 14 +END + +181 DIALOGEX 6, 18, 230, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_VISIBLE | WS_CAPTION +CAPTION "Security" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Authentication and encryption policy", 1367, 6, 8, 216, 103, WS_GROUP + AUTORADIOBUTTON "A&ccept any authentication including clear text", 1370, 16, 20, 195, 10, BS_TOP | BS_MULTILINE + AUTORADIOBUTTON "Acc&ept only encrypted authentication", 1373, 16, 36, 195, 10, BS_TOP | BS_MULTILINE + AUTORADIOBUTTON "Accept &only MS encrypted authentication", 1374, 16, 52, 195, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&Require data encryption", 1363, 27, 65, 184, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTOCHECKBOX "Require &strong data encryption", 1364, 41, 80, 172, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Use t&wo-way authentication", 1362, 17, 95, 194, 10, BS_TOP | BS_MULTILINE + PUSHBUTTON "&Unsave Password", 1369, 59, 117, 80, 14, WS_GROUP + PUSHBUTTON "A&vansert...", 1368, 142, 117, 80, 14, NOT WS_VISIBLE | WS_DISABLED + AUTOCHECKBOX "&Detect file and print sharing before dialing", 1365, 7, 198, 218, 10, BS_TOP | BS_MULTILINE | NOT WS_VISIBLE | WS_DISABLED +END + +182 DIALOGEX 6, 18, 248, 148 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Sikkerhet" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Authentication and encryption policy", 1367, 7, 8, 200, 98, WS_GROUP + AUTORADIOBUTTON "Accept any authentication including &clear text", 1370, 14, 24, 183, 10 + AUTORADIOBUTTON "Accept only &encrypted authentication", 1373, 14, 39, 183, 10 + AUTORADIOBUTTON "Accept only &MS encrypted authentication", 1374, 14, 53, 184, 10 + AUTOCHECKBOX "Require &data encryption", 1363, 33, 67, 165, 10, WS_GROUP + AUTOCHECKBOX "Require &strong data encryption", 1364, 48, 79, 152, 10 + AUTOCHECKBOX "&Use current username and password ", 1366, 31, 91, 165, 10 + PUSHBUTTON "Unsave &password", 1369, 6, 114, 100, 14, WS_GROUP + PUSHBUTTON "&Advanced...", 1368, 109, 114, 60, 14, NOT WS_VISIBLE | WS_DISABLED + AUTOCHECKBOX "Detect &file and print sharing before dialing", 1365, 14, 134, 193, 10, NOT WS_VISIBLE | WS_DISABLED +END + +183 DIALOGEX 6, 18, 317, 144 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Check all that apply:", 1388, 7, 4, 296, 9 + AUTOCHECKBOX "Route &IP packets on this interface.", 1386, 20, 19, 285, 11, BS_LEFT | BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Route IP&X packets on this interface.", 1387, 20, 35, 287, 11, BS_LEFT | BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&Add a user account so a remote router can dial in.", 1382, 20, 52, 287, 11, BS_LEFT | BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Send a &plain-text password if that is the only way to connect.", 1385, 20, 70, 287, 11, BS_LEFT | BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&Use scripting to complete the connection with the remote router.", 1384, 20, 87, 289, 22, BS_LEFT | BS_TOP | BS_MULTILINE +END + +184 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED +FONT 8, "MS Shell Dlg" +BEGIN +END + +186 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "A connection that is created for your use only is saved in your user account and is not available unless you are logged on.", -1, 7, 4, 306, 23 + LTEXT "Create this connection for:", -1, 14, 27, 288, 12 + AUTORADIOBUTTON "&Anyone's use", 1400, 26, 40, 265, 10, BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + AUTORADIOBUTTON "&My use only", 1401, 26, 55, 265, 10, BS_TOP | BS_MULTILINE | NOT WS_TABSTOP +END + +498 DIALOGEX 12, 16, 215, 126 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS was unable to connect to the network using the user name and password you provided. Please re-enter the user name and password.", 1396, 7, 6, 206, 36 + LTEXT "&User name:", 1399, 8, 51, 49, 8 + EDITTEXT 1394, 66, 46, 143, 14, ES_AUTOHSCROLL + LTEXT "&Password:", 1397, 8, 70, 49, 8, NOT WS_GROUP + EDITTEXT 1393, 66, 64, 143, 14, ES_PASSWORD | ES_AUTOHSCROLL + AUTOCHECKBOX "&Save password", 1391, 66, 84, 143, 10 + CONTROL "", 1398, "STATIC", SS_ETCHEDHORZ | WS_GROUP, 7, 98, 200, 1 + DEFPUSHBUTTON "OK", 1, 81, 104, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 145, 104, 60, 14 +END + +500 DIALOGEX 12, 16, 215, 173 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS was unable to connect to the network using the user name and password you provided. Please re-enter the user name and password.", 1396, 7, 6, 209, 26 + LTEXT "&User name:", 1399, 7, 72, 44, 8 + EDITTEXT 1394, 97, 69, 115, 14, ES_AUTOHSCROLL + LTEXT "&Password:", 1397, 7, 90, 45, 8, NOT WS_GROUP + EDITTEXT 1393, 97, 87, 115, 14, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "&Domain:", 1395, 7, 108, 53, 8, NOT WS_GROUP + EDITTEXT 1392, 97, 105, 115, 14, ES_UPPERCASE | ES_AUTOHSCROLL + AUTOCHECKBOX "&Save user name and password", 1391, 85, 125, 123, 10, BS_TOP | BS_MULTILINE + DEFPUSHBUTTON "OK", 1, 87, 146, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 151, 146, 60, 14 + CONTROL "", 1398, "STATIC", SS_ETCHEDHORZ | WS_GROUP, 7, 140, 205, 1 + LTEXT "You can enter a domain name or leave the domain field empty.\n(Domain names are not required for connections to the Internet)", -1, 8, 38, 209, 26 +END + +502 DIALOGEX 20, 60, 215, 73 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "PPP Settings" +FONT 8, "MS Shell Dlg" +BEGIN + AUTOCHECKBOX "&Enable LCP extensions", 1423, 9, 7, 200, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "E&nable software compression", 1424, 9, 22, 201, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Negotiate &multi-link for single link connections", 1557, 9, 37, 202, 10, BS_TOP | BS_MULTILINE + DEFPUSHBUTTON "OK", 1, 82, 53, 60, 14 + PUSHBUTTON "Cancel", 2, 148, 53, 60, 14 +END + +509 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Choose the role you want for this computer:", -1, 10, 5, 275, 9 + AUTORADIOBUTTON "&Host", 1483, 31, 20, 265, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "&Guest", 1484, 31, 44, 265, 10, BS_TOP | BS_MULTILINE + LTEXT "This computer has the information you want to access.", -1, 45, 31, 253, 13, NOT WS_GROUP | WS_TABSTOP + LTEXT "This computer is used to access information on the host computer.", -1, 43, 56, 253, 23, NOT WS_GROUP +END + +511 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Select a device:", -1, 8, 5, 261, 8 + COMBOBOX 1485, 9, 18, 302, 62, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP +END + +528 DIALOGEX 0, 0, 227, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Connections" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Logon privileges", 1582, 8, 10, 213, 63 + LTEXT "Non-administrators may be allowed to create or modify connections before logging on.", 1581, 16, 21, 194, 30 + AUTOCHECKBOX "Allo&w creating and modifying connections before logon", 1497, 16, 56, 195, 10, BS_TOP | BS_MULTILINE +END + +532 DIALOGEX 0, 0, 263, 263 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Router Callback" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "When you dial into a router, it may offer to call you back to reduce your phone charges or to increase security. Specify whether you want callback or not.", 1043, 7, 5, 253, 24 + AUTORADIOBUTTON "&No callback", 1501, 9, 36, 252, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "Al&ways call me back at the number(s) below:", 1502, 9, 48, 252, 10, BS_TOP | BS_MULTILINE, WS_EX_TRANSPARENT + CONTROL "", 1503, "SYSLISTVIEW32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x00008401, 15, 63, 240, 143 + PUSHBUTTON "&Edit...", 1504, 131, 213, 60, 14 + PUSHBUTTON "&Delete", 1505, 194, 213, 60, 14 + CONTROL "", -1, "STATIC", SS_ETCHEDHORZ, 7, 233, 249, 1 + DEFPUSHBUTTON "OK", 1, 132, 242, 60, 14 + PUSHBUTTON "Cancel", 2, 196, 242, 60, 14 +END + +534 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Options" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Connection type", 1289, 7, 7, 215, 55 + AUTORADIOBUTTON "&Demand dial", 1506, 16, 20, 199, 9, BS_TOP | BS_MULTILINE | WS_GROUP | NOT WS_TABSTOP + LTEXT "Idle ti&me before hanging up:", 1299, 27, 33, 99, 8, NOT WS_GROUP + COMBOBOX 1291, 144, 30, 70, 108, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + AUTORADIOBUTTON "&Persistent connection", 1507, 16, 47, 197, 9, BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + GROUPBOX "Dialing policy", 1290, 7, 66, 215, 48 + LTEXT "&Redial attempts:", 1300, 14, 79, 123, 8 + EDITTEXT 1287, 143, 76, 70, 14, ES_AUTOHSCROLL | ES_NUMBER + LTEXT "A&verage redial intervals:", 1301, 14, 96, 123, 8 + COMBOBOX 1292, 143, 94, 70, 123, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + GROUPBOX "Multiple devices", 1288, 7, 116, 215, 35 + COMBOBOX 1551, 16, 130, 128, 41, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "C&onfigure...", 1293, 150, 129, 65, 14 + PUSHBUTTON "Call&back", 1302, 8, 195, 60, 14 + PUSHBUTTON "&X.25", 1295, 73, 195, 50, 14 +END + +539 DIALOGEX 0, 0, 265, 110 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&User name:", 1413, 14, 64, 84, 8 + EDITTEXT 1104, 102, 62, 154, 14, ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 9, 82, 247, 1 + DEFPUSHBUTTON "&Dial", 1590, 8, 89, 60, 14 + PUSHBUTTON "Cancel", 1591, 71, 89, 60, 14 + PUSHBUTTON "Pr&operties", 1107, 133, 89, 60, 14 + PUSHBUTTON "&Help", 1592, 195, 89, 60, 14 +END + +540 DIALOGEX 0, 0, 265, 133 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&User name:", 1413, 10, 64, 90, 8 + EDITTEXT 1104, 105, 60, 154, 14, ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 7, 80, 252, 1 + LTEXT "D&ial:", 1412, 10, 91, 92, 10 + COMBOBOX 1416, 105, 88, 154, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 7, 107, 251, 1 + DEFPUSHBUTTON "&Dial", 1590, 8, 113, 60, 14 + PUSHBUTTON "Cancel", 1591, 71, 113, 60, 14 + PUSHBUTTON "Pr&operties", 1107, 134, 113, 60, 14 + PUSHBUTTON "&Help", 1592, 197, 113, 60, 14 +END + +541 DIALOGEX 0, 0, 265, 157 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&User name:", 1413, 12, 67, 87, 8 + EDITTEXT 1104, 103, 63, 154, 14, ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 9, 84, 248, 1 + LTEXT "D&ial:", 1412, 11, 96, 48, 8 + COMBOBOX 1416, 103, 92, 154, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Dialing &from:", 1415, 10, 114, 46, 8 + COMBOBOX 1414, 102, 110, 87, 112, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "Dialing &Rules", 1108, 193, 110, 64, 14 + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 7, 130, 250, 1 + DEFPUSHBUTTON "&Dial", 1590, 6, 136, 60, 14 + PUSHBUTTON "Cancel", 1591, 69, 136, 60, 14 + PUSHBUTTON "Pr&operties", 1107, 132, 136, 60, 14 + PUSHBUTTON "&Help", 1592, 196, 136, 60, 14 +END + +544 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Internet Connection Sharing allows other computers on your local network to access external resources through this connection.", -1, 10, 5, 300, 22 + AUTOCHECKBOX "&Enable Internet Connection Sharing for this connection", 1512, 21, 31, 272, 10 + LTEXT "To dial this connection automatically when a computer on your local network attempts to access external resources, select the following check box.", 1514, 10, 56, 294, 22 + AUTOCHECKBOX "Enab&le on-demand dialing", 1513, 21, 86, 260, 10 +END + +545 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Shared access allows other computers on your local network to access external resources through this dial-up connection. You can enable shared access for one connection and one local network at a time.", -1, 10, 5, 300, 25 + LTEXT "&Select the local network that will access resources through this connection:", -1, 21, 35, 285, 8 + COMBOBOX 1522, 21, 48, 231, 56, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP +END + +546 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "You can configure this connection to use your smart card to log you into the remote network. Select whether to use your smart card with this connection.", -1, 10, 5, 303, 22 + AUTORADIOBUTTON "&Use my smart card ", 1524, 26, 29, 264, 12, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP | NOT WS_TABSTOP + AUTORADIOBUTTON "&Do not use my smart card ", 1525, 26, 44, 261, 16, BS_LEFT | BS_TOP | BS_MULTILINE | NOT WS_TABSTOP +END + +547 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "Demand Dial Interface Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Welcome to the Demand Dial Interface Wizard.", 1530, 122, 8, 192, 32 + LTEXT "Using this wizard you can create a demand dial interface to connect this router to other routers.", 1531, 122, 43, 192, 37 + LTEXT "Press Next to continue.", 1532, 122, 85, 191, 29 +END + +548 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + AUTORADIOBUTTON "Connect using a &modem, ISDN adapter, or other physical device.", 1531, 21, 17, 290, 15, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP | NOT WS_TABSTOP + AUTORADIOBUTTON "Connect using &virtual private networking (VPN)", 1532, 21, 38, 291, 15, BS_LEFT | BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + AUTORADIOBUTTON "Connect using PPP over Ethernet (PPPoE)", 1688, 21, 58, 290, 12, NOT WS_TABSTOP +END + +550 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CHILD | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Enter the name or IP address of the router to which you are connecting.", 1535, 10, 8, 289, 18 + LTEXT "&Host name or IP address (such as reactos.org or 145.52.0.1):", 1537, 21, 35, 285, 8 + EDITTEXT 1536, 21, 47, 285, 14, ES_AUTOHSCROLL +END + +551 DIALOGEX 0, 0, 265, 127 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&User name:", 1413, 12, 62, 89, 8 + EDITTEXT 1104, 104, 58, 154, 14, ES_AUTOHSCROLL + LTEXT "Do&main:", 1110, 12, 82, 90, 8 + EDITTEXT 1102, 104, 79, 154, 14, ES_UPPERCASE | ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 99, 248, 1 + DEFPUSHBUTTON "&Dial", 1590, 9, 106, 61, 14 + PUSHBUTTON "Cancel", 1591, 72, 106, 60, 14 + PUSHBUTTON "Pr&operties", 1107, 135, 106, 60, 14 + PUSHBUTTON "&Help", 1592, 198, 106, 60, 14 +END + +552 DIALOGEX 0, 0, 265, 159 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&User name:", 1413, 10, 67, 91, 10 + EDITTEXT 1104, 104, 64, 154, 14, ES_AUTOHSCROLL + LTEXT "Do&main:", 1110, 11, 86, 91, 8 + EDITTEXT 1102, 104, 83, 154, 14, ES_UPPERCASE | ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 103, 248, 1 + LTEXT "D&ial:", 1412, 10, 115, 91, 8 + COMBOBOX 1416, 104, 111, 154, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 132, 248, 1 + DEFPUSHBUTTON "&Dial", 1590, 8, 139, 60, 14 + PUSHBUTTON "Cancel", 1591, 71, 139, 60, 14 + PUSHBUTTON "Pr&operties", 1107, 134, 139, 60, 14 + PUSHBUTTON "&Help", 1592, 198, 139, 60, 14 +END + +553 DIALOGEX 0, 0, 265, 183 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&User name:", 1413, 10, 68, 92, 10 + EDITTEXT 1104, 104, 65, 154, 14, ES_AUTOHSCROLL + LTEXT "Do&main:", 1110, 10, 90, 91, 8 + EDITTEXT 1102, 104, 86, 154, 14, ES_UPPERCASE | ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 106, 248, 1 + LTEXT "D&ial:", 1412, 10, 118, 92, 8 + COMBOBOX 1416, 104, 114, 154, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Dialing &from:", 1415, 10, 137, 91, 8 + COMBOBOX 1414, 104, 134, 87, 112, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "Dialing &Rules", 1108, 194, 134, 65, 14 + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 154, 248, 1 + DEFPUSHBUTTON "&Dial", 1590, 8, 162, 60, 14 + PUSHBUTTON "Cancel", 1591, 71, 162, 60, 14 + PUSHBUTTON "Pr&operties", 1107, 134, 162, 60, 14 + PUSHBUTTON "&Help", 1592, 198, 162, 60, 14 +END + +554 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Connec&t using:", 1124, 7, 4, 193, 8 + CONTROL "", 1128, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x00004C0D, 7, 17, 195, 44, WS_EX_CLIENTEDGE + PUSHBUTTON "&Up", 1132, 208, 18, 16, 14, BS_ICON + PUSHBUTTON "&Down", 1131, 208, 36, 16, 14, BS_ICON + AUTOCHECKBOX "A&ll devices call the same numbers", 1119, 7, 65, 131, 21, BS_TOP | BS_MULTILINE + PUSHBUTTON "C&onfigure...", 1130, 140, 66, 60, 14 + GROUPBOX "Sample type", 1125, 7, 87, 213, 56, WS_GROUP + LTEXT "&Phone number:", 1135, 19, 102, 191, 8 + EDITTEXT 1123, 17, 112, 138, 14, ES_AUTOHSCROLL + PUSHBUTTON "Alter&nates", 1129, 161, 112, 50, 14 + AUTOCHECKBOX "Sho&w icon in notification area when connected", 1120, 11, 194, 212, 20, BS_TOP | BS_MULTILINE +END + +555 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + PUSHBUTTON "C&onfigure...", 1130, 160, 38, 60, 14 + LTEXT "&Phone number:", 1135, 8, 72, 194, 8 + EDITTEXT 1123, 8, 83, 148, 14, ES_AUTOHSCROLL + PUSHBUTTON "Alter&nates", 1129, 160, 83, 60, 14 + AUTOCHECKBOX "Sho&w icon in notification area when connected", 1120, 11, 194, 213, 10, BS_TOP | BS_MULTILINE + LTEXT "Connec&t using:", 1124, 8, 5, 214, 8 + CONTROL "", 1127, "SYSLISTVIEW32", WS_DISABLED | WS_BORDER | 0x0000EC0D, 7, 18, 214, 15 +END + +556 DIALOGEX 0, 0, 220, 165 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Program Settings" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Description of program running on your network:", -1, 7, 5, 203, 8 + EDITTEXT 1565, 7, 17, 206, 14, ES_AUTOHSCROLL + LTEXT "&Internet server port number:", -1, 7, 35, 202, 8 + EDITTEXT 1566, 7, 47, 113, 14, ES_AUTOHSCROLL | ES_NUMBER + AUTORADIOBUTTON "&TCP", 1548, 128, 49, 30, 10, NOT WS_TABSTOP + AUTORADIOBUTTON "&UDP", 1567, 166, 49, 31, 10, NOT WS_TABSTOP + LTEXT "&Listen for Internet server responses on port or port range:\n(for example: 1024-1209, 1300-1310, 1450)", -1, 7, 70, 207, 22 + LTEXT "T&CP:", -1, 7, 100, 28, 8 + EDITTEXT 1569, 50, 97, 162, 14, ES_AUTOHSCROLL + LTEXT "UD&P:", -1, 7, 121, 30, 8 + EDITTEXT 1551, 51, 117, 162, 14, ES_AUTOHSCROLL + DEFPUSHBUTTON "OK", 1, 90, 144, 60, 14 + PUSHBUTTON "Cancel", 2, 154, 144, 60, 14 +END + +557 DIALOGEX 0, 0, 217, 164 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Service Settings" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Description of service:", -1, 7, 5, 203, 8 + EDITTEXT 1552, 7, 18, 205, 14, ES_AUTOHSCROLL + LTEXT "&Name or IP address (for example 192.168.0.12) of the computer hosting this service on your network:", -1, 7, 37, 208, 16 + EDITTEXT 1556, 7, 57, 203, 14, ES_AUTOHSCROLL + LTEXT "&Port number where this service resides:", -1, 7, 85, 203, 8 + EDITTEXT 1553, 7, 97, 113, 14, ES_AUTOHSCROLL | ES_NUMBER + AUTORADIOBUTTON "&TCP", 1554, 128, 99, 30, 10, NOT WS_TABSTOP + AUTORADIOBUTTON "&UDP", 1555, 166, 99, 31, 10, NOT WS_TABSTOP + DEFPUSHBUTTON "OK", 1, 86, 143, 60, 14 + PUSHBUTTON "Cancel", 2, 150, 143, 60, 14 +END + +558 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Programs" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "The Internet connection on this computer has been customized to allow the following programs to run properly over your network:", -1, 7, 7, 218, 28 + CONTROL "List1", 1558, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000441D, 7, 37, 215, 155, WS_EX_CLIENTEDGE + PUSHBUTTON "A&dd...", 1538, 7, 197, 67, 14 + PUSHBUTTON "Edi&t...", 1559, 80, 197, 67, 14 + PUSHBUTTON "D&elete", 1568, 153, 197, 67, 14 +END + +559 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Services" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Select the services running on your network that Internet users can access.", -1, 7, 5, 216, 22 + LTEXT "Services:", -1, 7, 27, 143, 8 + CONTROL "List1", 1560, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000441D, 7, 37, 215, 155, WS_EX_CLIENTEDGE + PUSHBUTTON "A&dd...", 1561, 7, 197, 67, 14 + PUSHBUTTON "Edi&t...", 1563, 80, 197, 67, 14 + PUSHBUTTON "D&elete", 1562, 153, 197, 67, 14 +END + +560 DIALOGEX 6, 18, 240, 88 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Initial Connection" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", 6, 68, 68, 50, 14 + PUSHBUTTON "&No", 7, 125, 68, 50, 14 + ICON 32516, 1575, 7, 7, 20, 20 + LTEXT "", 1576, 40, 7, 190, 33 + AUTOCHECKBOX "&Don't display this reminder again", 1579, 40, 48, 192, 11, BS_TOP | BS_MULTILINE +END + +567 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Type the name of your service in the following text box. If you leave the text box blank, ReactOS will automatically detect and configure your service when you connect.", -1, 10, 7, 301, 25 + LTEXT "&Service name (optional):", -1, 22, 32, 229, 8 + EDITTEXT 1593, 22, 44, 275, 14, ES_AUTOHSCROLL +END + +568 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Service name:", 1686, 7, 5, 217, 10 + EDITTEXT 1594, 7, 17, 217, 14, ES_AUTOHSCROLL + AUTOCHECKBOX "Sho&w icon in notification area when connected", 1120, 9, 196, 215, 8 +END + +569 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Security" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Security options", 1580, 8, 4, 213, 151 + AUTORADIOBUTTON "&Typical (recommended settings)", 1540, 14, 16, 197, 9, BS_NOTIFY | WS_GROUP + AUTORADIOBUTTON "A&dvanced (custom settings)", 1541, 14, 100, 197, 8, BS_NOTIFY + LTEXT "&Validate my identity as follows:", 1537, 26, 29, 183, 8, NOT WS_GROUP + COMBOBOX 1178, 26, 40, 184, 78, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + AUTOCHECKBOX "A&utomatically use my ReactOS logon name and password (and domain if any)", 1174, 26, 59, 182, 20, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Requ&ire data encryption (disconnect if none)", 1169, 26, 83, 182, 10, BS_TOP | BS_MULTILINE + LTEXT "Using these settings requires a knowledge of security protocols.", 1539, 26, 111, 136, 20 + PUSHBUTTON "&Settings...", 1180, 151, 134, 60, 14 + PUSHBUTTON "I&PSec Settings...", 1598, 126, 163, 85, 14 +END + +570 DIALOGEX 0, 0, 265, 126 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "IPSec Settings" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 151, 104, 50, 14 + PUSHBUTTON "Cancel", 2, 207, 104, 50, 14 + AUTOCHECKBOX "&Use pre-shared key for authentication", 1604, 21, 15, 217, 10 + LTEXT "&Key:", 1602, 20, 31, 44, 12 + EDITTEXT 1605, 66, 30, 172, 12, ES_AUTOHSCROLL + AUTOCHECKBOX "Allow certificiates from my user store in addition to machine certificates", 1606, 20, 50, 242, 13, WS_DISABLED + AUTOCHECKBOX "Use a specific certificate", 1607, 20, 67, 239, 10, WS_DISABLED + PUSHBUTTON "Select", 1608, 31, 84, 50, 14, WS_DISABLED + COMBOBOX 1610, 91, 84, 135, 30, CBS_DROPDOWN | CBS_SORT | WS_DISABLED | WS_VSCROLL | NOT WS_TABSTOP +END + +571 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Security Logging" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Logging Options:", -1, 6, 8, 216, 47 + AUTOCHECKBOX "Log unsuccessful &inbound connection attempts", 1642, 14, 22, 201, 10 + AUTOCHECKBOX "Log successful &outbound connections", 1641, 14, 37, 200, 10 + GROUPBOX "Log file options:", -1, 7, 64, 215, 91 + LTEXT "&Name:", -1, 14, 78, 199, 8 + EDITTEXT 1674, 14, 90, 199, 14, ES_READONLY + PUSHBUTTON "&Browse...", 1639, 153, 108, 60, 14 + LTEXT "&Size limit:", -1, 14, 133, 67, 8 + EDITTEXT 1640, 86, 130, 50, 14, ES_AUTOHSCROLL | ES_NUMBER + LTEXT "KB", -1, 140, 133, 20, 8 + PUSHBUTTON "&Restore Defaults", 1643, 135, 197, 85, 14 +END + +572 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "ICMP" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Internet Control Message Protocol (ICMP) allows the computers on a network to share error and status information. Select the requests for information from the Internet that this computer will respond to:", -1, 7, 5, 215, 37 + CONTROL "IList1", 1644, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000440D, 7, 45, 215, 100, WS_EX_CLIENTEDGE + GROUPBOX "Description:", -1, 7, 153, 215, 55 + LTEXT "", 1645, 14, 171, 199, 32 +END + +574 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Advanced" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", 575, 7, 60, 213, 100 +END + +577 DIALOGEX 0, 0, 312, 144 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Type the name of the ISP in the following text box.", 1681, 10, 3, 296, 11 + LTEXT "N&ame:", 1690, 18, 20, 127, 10 + EDITTEXT 1680, 17, 32, 222, 14, ES_AUTOHSCROLL + LTEXT "The name you type here will be the name of the connection you are creating.", 1683, 17, 52, 282, 42 +END + +580 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CHILD | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + AUTORADIOBUTTON "&Automatic selection", 1534, 21, 20, 288, 11, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP | NOT WS_TABSTOP + AUTORADIOBUTTON "&Point to Point Tunneling Protocol (PPTP)", 1532, 21, 39, 290, 11, BS_LEFT | BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + AUTORADIOBUTTON "&Layer 2 Tunneling Protocol (L2TP)", 1533, 21, 56, 286, 11, BS_LEFT | BS_TOP | BS_MULTILINE | NOT WS_TABSTOP +END + +1420 DIALOGEX 0, 0, 265, 108 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "D&ial:", 1412, 14, 63, 86, 8 + COMBOBOX 1416, 104, 60, 154, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 80, 248, 1 + DEFPUSHBUTTON "&Dial", 1590, 9, 87, 60, 14 + PUSHBUTTON "Cancel", 1591, 72, 87, 60, 14 + PUSHBUTTON "Pr&operties", 1107, 135, 87, 60, 14 + PUSHBUTTON "&Help", 1592, 198, 87, 60, 14 +END + +1421 DIALOGEX 0, 0, 265, 223 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&User name:", 1413, 10, 61, 90, 8 + EDITTEXT 1104, 104, 58, 154, 14, ES_AUTOHSCROLL + LTEXT "&Password:", 1112, 11, 81, 90, 8 + EDITTEXT 1103, 104, 77, 154, 14, ES_PASSWORD | ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN, 10, 98, 248, 1 + AUTOCHECKBOX "&Save this user name and password for the following users:", 1101, 14, 105, 242, 13, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "Me o&nly", 1622, 26, 119, 225, 11, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "&Anyone who uses this computer", 1623, 26, 133, 225, 11, BS_LEFT | BS_TOP | BS_MULTILINE + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 149, 248, 1 + LTEXT "D&ial:", 1412, 14, 161, 87, 8 + COMBOBOX 1416, 104, 157, 154, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Dialing &from:", 1415, 14, 178, 88, 8 + COMBOBOX 1414, 104, 175, 87, 112, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "Dialing &Rules", 1108, 193, 175, 65, 14 + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 196, 248, 1 + DEFPUSHBUTTON "&Dial", 1590, 9, 202, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", 1591, 72, 202, 60, 14 + PUSHBUTTON "Pr&operties", 1107, 135, 202, 60, 14 + PUSHBUTTON "&Help", 1592, 198, 202, 60, 14 +END + +1422 DIALOGEX 0, 0, 265, 242 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&User name:", 1413, 10, 67, 91, 8 + EDITTEXT 1104, 104, 63, 154, 14, ES_AUTOHSCROLL + LTEXT "&Password:", 1112, 10, 85, 92, 8 + EDITTEXT 1103, 104, 82, 154, 14, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "Do&main:", 1110, 10, 104, 92, 8 + EDITTEXT 1102, 104, 101, 154, 14, ES_UPPERCASE | ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN, 10, 121, 248, 1 + AUTOCHECKBOX "&Save this user name and password for the following users:", 1101, 12, 127, 242, 13, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "Me o&nly", 1622, 24, 141, 227, 11, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "&Anyone who uses this computer", 1623, 24, 155, 230, 11, BS_LEFT | BS_TOP | BS_MULTILINE + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 170, 248, 1 + LTEXT "D&ial:", 1412, 14, 182, 87, 8 + COMBOBOX 1416, 104, 178, 154, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Dialing &from:", 1415, 14, 198, 87, 8 + COMBOBOX 1414, 104, 195, 87, 112, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "Dialing &Rules", 1108, 193, 195, 65, 14 + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 215, 248, 1 + DEFPUSHBUTTON "&Dial", 1590, 8, 221, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", 1591, 71, 221, 60, 14 + PUSHBUTTON "Pr&operties", 1107, 134, 221, 60, 14 + PUSHBUTTON "&Help", 1592, 198, 221, 60, 14 +END + +1425 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Host name or IP address of destination (such as reactos.org or 145.52.0.1):", 1430, 7, 5, 217, 18 + EDITTEXT 1427, 7, 25, 215, 14, ES_AUTOHSCROLL + GROUPBOX "First connect", 1431, 9, 48, 213, 78 + LTEXT "ReactOS can first connect the public network, such as the Internet, before trying to establish this virtual connection.", 1432, 17, 63, 199, 24 + AUTOCHECKBOX "&Dial another connection first:", 1428, 19, 89, 183, 10 + COMBOBOX 1429, 29, 103, 182, 87, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + AUTOCHECKBOX "Sho&w icon in notification area when connected", 1120, 10, 192, 213, 13 +END + +1426 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Options" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Dialing options", 1289, 8, 7, 214, 56 + AUTOCHECKBOX "&Display progress while connecting", 1284, 16, 17, 199, 10 + AUTOCHECKBOX "&Prompt for name and password, certificate, etc.", 1554, 16, 32, 199, 10 + AUTOCHECKBOX "Include &ReactOS logon domain", 1555, 16, 47, 178, 10 + GROUPBOX "Redialing options", 1290, 8, 68, 214, 89 + LTEXT "&Redial attempts:", 1300, 16, 81, 121, 8 + EDITTEXT 1287, 140, 77, 70, 14, ES_AUTOHSCROLL | ES_NUMBER + LTEXT "&Time between redial attempts:", 1301, 16, 99, 121, 8 + COMBOBOX 1292, 141, 95, 70, 123, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Idle ti&me before hanging up:", 1299, 16, 117, 121, 8 + COMBOBOX 1291, 141, 113, 70, 108, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + AUTOCHECKBOX "Redial if &line is dropped", 1286, 16, 138, 199, 10, BS_TOP | BS_MULTILINE +END + +1427 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Type the host name or Internet Protocol (IP) address of the computer to which you are connecting.", -1, 10, 6, 275, 16 + LTEXT "&Host name or IP address (for example, reactos.org or 145.52.0.1 ):", -1, 21, 28, 277, 11 + EDITTEXT 1433, 21, 42, 275, 14, ES_AUTOHSCROLL +END + +1428 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS can automatically dial the initial connection to the Internet or other public network, before establishing the virtual connection.", -1, 10, 6, 275, 24 + AUTORADIOBUTTON "&Do not dial the initial connection.", 1509, 32, 31, 271, 10, BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + AUTORADIOBUTTON "&Automatically dial this initial connection:", 1510, 32, 45, 269, 10, BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + COMBOBOX 1435, 43, 62, 253, 87, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP +END + +1436 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Select a device:", 1597, 8, 5, 213, 8 + COMBOBOX 1437, 7, 17, 217, 166, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + AUTOCHECKBOX "Sho&w icon in notification area when connected", 1120, 11, 195, 213, 10, BS_TOP | BS_MULTILINE + PUSHBUTTON "C&onfigure...", 1130, 160, 34, 60, 14 +END + +1448 DIALOGEX 10, 20, 265, 71 +STYLE DS_SHELLFONT | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Network Connections" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "C&hoose a network connection:", 1456, 7, 7, 251, 10 + COMBOBOX 1457, 8, 18, 250, 140, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + DEFPUSHBUTTON "&Connect...", 1449, 7, 50, 60, 14 + PUSHBUTTON "Cancel", 1455, 70, 50, 60, 14 + PUSHBUTTON "&New...", 1459, 134, 50, 60, 14 + PUSHBUTTON "P&roperties", 1460, 198, 50, 60, 14 +END + +1466 DIALOGEX 6, 18, 265, 262 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Sample text", 1469, 7, 7, 251, 8 + EDITTEXT 1470, 7, 17, 193, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Add", 1471, 77, 36, 60, 14 + PUSHBUTTON "&Replace", 1472, 141, 36, 60, 14 + LTEXT "Sample text", 1473, 7, 57, 193, 8 + LISTBOX 1474, 7, 68, 193, 145, WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "", 1475, 206, 68, 51, 14, BS_BITMAP | WS_GROUP + PUSHBUTTON "&Down", 1476, 206, 86, 51, 14, BS_BITMAP + PUSHBUTTON "D&elete", 1477, 141, 215, 60, 14 + CONTROL "", 1479, "STATIC", SS_ETCHEDHORZ, 7, 233, 249, 1 + PUSHBUTTON "OK", 1, 132, 242, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 196, 242, 60, 14 +END + +1467 DIALOGEX 6, 18, 263, 263 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Sample text", 1469, 7, 7, 197, 8 + EDITTEXT 1470, 7, 17, 193, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Add", 1471, 76, 36, 60, 14 + PUSHBUTTON "&Replace", 1472, 141, 36, 60, 14 + LTEXT "Sample text", 1473, 7, 57, 193, 8 + LISTBOX 1474, 7, 68, 193, 135, WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "&Up", 1475, 206, 68, 51, 14, BS_BITMAP | WS_GROUP + PUSHBUTTON "&Down", 1476, 206, 86, 51, 14, BS_BITMAP + PUSHBUTTON "D&elete", 1477, 141, 204, 60, 14 + AUTOCHECKBOX "Sample text", 1478, 7, 225, 249, 10, BS_TOP | BS_MULTILINE + PUSHBUTTON "OK", 1, 132, 242, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 196, 242, 60, 14 +END + +1468 DIALOGEX 6, 18, 263, 263 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Sample text", 1469, 7, 5, 249, 8 + EDITTEXT 1470, 7, 17, 249, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Add", 1471, 132, 36, 60, 14 + PUSHBUTTON "&Replace", 1472, 196, 36, 60, 14 + LTEXT "Sample text", 1473, 7, 55, 251, 8 + LISTBOX 1474, 7, 68, 249, 140, LBS_STANDARD | WS_TABSTOP + PUSHBUTTON "D&elete", 1477, 196, 214, 60, 14, WS_GROUP + CONTROL "", 1479, "STATIC", SS_ETCHEDHORZ, 7, 233, 249, 1 + PUSHBUTTON "OK", 1, 132, 242, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 196, 242, 60, 14 +END + +1469 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + AUTORADIOBUTTON "Dial-up to &private network.", 1488, 24, 9, 116, 10, NOT WS_TABSTOP + AUTORADIOBUTTON "Connect to a private network &through the Internet.", 1489, 24, 34, 206, 10, NOT WS_TABSTOP + AUTORADIOBUTTON "&Connect directly to another computer.", 1490, 24, 59, 157, 10, NOT WS_TABSTOP + AUTORADIOBUTTON "Connect to the network via b&roadband", 1491, 24, 83, 273, 10, NOT WS_TABSTOP + LTEXT "Connect using my phone line (modem or ISDN).", -1, 45, 21, 156, 8 + LTEXT "Create a Virtual Private Network (VPN) connection or tunnel through the internet.", -1, 45, 46, 266, 8 + LTEXT "Connect using my serial, parallel, or infrared port.", -1, 45, 71, 266, 8 + LTEXT "Connect through my broadband connection.", -1, 45, 95, 266, 8 +END + +1480 DIALOGEX 0, 0, 230, 61 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Phone Number Editor" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Please enter the new phone number:", 1481, 7, 7, 218, 8 + EDITTEXT 1482, 7, 17, 217, 15, ES_AUTOHSCROLL + DEFPUSHBUTTON "OK", 1, 99, 40, 60, 14 + PUSHBUTTON "Cancel", 2, 163, 40, 60, 14 +END + +1481 DIALOGEX 0, 0, 321, 157 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Type an ISP account name and password, then write down this information and store it in a safe place. (If you have forgotten an existing account name or password, contact your ISP.)", 1689, 10, 4, 308, 25 + LTEXT "&User name:", 1636, 23, 35, 89, 15 + EDITTEXT 1614, 115, 34, 190, 15, ES_AUTOHSCROLL + LTEXT "&Password:", 1637, 23, 55, 90, 13 + EDITTEXT 1615, 115, 54, 190, 15, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "&Confirm password:", 1638, 23, 74, 88, 13 + EDITTEXT 1616, 115, 73, 190, 15, ES_PASSWORD | ES_AUTOHSCROLL + AUTOCHECKBOX "U&se this account name and password when anyone connects to the Internet from this computer", 1596, 23, 91, 291, 17, BS_LEFT | BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&Make this the default Internet connection", 1595, 23, 112, 288, 14 + AUTOCHECKBOX "&Turn on Internet Connection Firewall for this connection", 1682, 23, 133, 290, 14 +END + +1660 DIALOGEX 0, 0, 258, 78 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Internet Connection Firewall" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 32515, -1, 7, 7, 20, 20 + LTEXT "Turning off the Internet Connection Firewall could expose your computer to unauthorized access over the Internet. Are you sure you want to turn it off?", -1, 44, 5, 212, 24 + AUTOCHECKBOX "&Do not show this dialog again", 1662, 42, 40, 210, 10 + DEFPUSHBUTTON "&Yes", 6, 74, 60, 50, 14 + PUSHBUTTON "&No", 7, 128, 60, 50, 14 +END + +7000 DIALOGEX 0, 0, 215, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&User name:", -1, 7, 8, 90, 12, SS_CENTERIMAGE + EDITTEXT 7001, 101, 7, 108, 14, ES_AUTOHSCROLL + LTEXT "&Full name:", -1, 7, 26, 90, 12 + EDITTEXT 7002, 101, 25, 108, 14, ES_AUTOHSCROLL + LTEXT "&Password:", -1, 7, 44, 90, 12 + EDITTEXT 7003, 101, 43, 108, 14, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "&Confirm password:", -1, 7, 62, 91, 12 + EDITTEXT 7004, 101, 61, 108, 14, ES_PASSWORD | ES_AUTOHSCROLL + PUSHBUTTON "OK", 1, 84, 82, 60, 14 + PUSHBUTTON "Cancel", 2, 149, 82, 60, 14 +END + +7005 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_CONTEXTHELP | WS_CHILD | WS_CAPTION +CAPTION "Callback" +FONT 8, "MS Shell Dlg" +BEGIN + AUTORADIOBUTTON "&Do not allow callback", 7009, 9, 7, 219, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "All&ow the caller to set the callback number", 7006, 9, 20, 218, 10, BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + AUTORADIOBUTTON "Al&ways use the following callback number:", 7007, 9, 34, 217, 10, BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + EDITTEXT 7008, 19, 49, 204, 14, ES_AUTOHSCROLL | WS_GROUP +END + +7010 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_CONTEXTHELP | WS_CHILD | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Incoming connections", -1, 7, 4, 214, 110, WS_GROUP + LTEXT "Allow incoming connections on these devices.", -1, 17, 17, 195, 8 + LTEXT "&Devices:", -1, 17, 29, 29, 8 + CONTROL "", 7011, "SYSLISTVIEW32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x00004405, 17, 41, 193, 47, WS_EX_CLIENTEDGE + AUTOCHECKBOX "&Enable multilink", 7012, 17, 96, 121, 10, BS_TOP | BS_MULTILINE | WS_GROUP + PUSHBUTTON "P&roperties", 7013, 145, 94, 65, 14, WS_GROUP + GROUPBOX "Virtual private network", -1, 6, 122, 214, 49, WS_GROUP + AUTOCHECKBOX "Allo&w others to make private connections to my computer by tunneling through the Internet or other network", 7014, 17, 137, 195, 27, BS_TOP | BS_MULTILINE | WS_GROUP + AUTOCHECKBOX "&Show icon in notification area when connected", 7015, 12, 184, 209, 10, BS_TOP | BS_MULTILINE | WS_GROUP +END + +7016 DIALOGEX 0, 0, 265, 190 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Incoming TCP/IP Properties" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Network access", -1, 6, 5, 252, 32 + AUTOCHECKBOX "Allow &callers to access my local area network", 7017, 20, 20, 228, 9, BS_LEFT | BS_TOP | BS_MULTILINE + GROUPBOX "TCP/IP address assignment", -1, 6, 42, 250, 122 + AUTORADIOBUTTON "&Assign TCP/IP addresses automatically using DHCP", 7019, 20, 54, 231, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "S&pecify TCP/IP addresses", 7020, 20, 71, 231, 10, BS_TOP | BS_MULTILINE + LTEXT "&From:", -1, 29, 88, 53, 8 + CONTROL "", 7018, "RASIPADDRESS", WS_GROUP | WS_TABSTOP, 90, 85, 103, 13 + LTEXT "&To:", -1, 29, 105, 53, 8 + CONTROL "", 7021, "RASIPADDRESS", WS_GROUP | WS_TABSTOP, 90, 102, 103, 13 + LTEXT "Total:", -1, 29, 124, 53, 10 + LTEXT "", 7024, 90, 121, 150, 14, 0, WS_EX_STATICEDGE + AUTOCHECKBOX "Allo&w calling computer to specify its own IP address", 7022, 20, 144, 231, 10, BS_TOP | BS_MULTILINE | WS_GROUP + DEFPUSHBUTTON "OK", 1, 133, 169, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 197, 169, 60, 14 +END + +7025 DIALOGEX 0, 0, 250, 157 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Incoming IPX Properties" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Network access", -1, 8, 6, 234, 32 + AUTOCHECKBOX "Allow &callers to access my local area network", 7032, 18, 19, 194, 12, BS_LEFT | BS_TOP | BS_MULTILINE + GROUPBOX "Network number assignment", -1, 8, 43, 234, 87 + AUTOCHECKBOX "&Assign same network number to all computers", 7028, 17, 56, 203, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "Assi&gn network numbers automatically", 7026, 28, 68, 191, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "&Specify network numbers:", 7027, 28, 81, 189, 10, BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + EDITTEXT 7029, 40, 92, 154, 14, ES_UPPERCASE | WS_GROUP + AUTOCHECKBOX "Allo&w callers to specify their own node numbers", 7031, 17, 113, 208, 11, BS_TOP | BS_MULTILINE | WS_GROUP + DEFPUSHBUTTON "OK", 1, 116, 136, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 181, 136, 60, 14 +END + +7033 DIALOGEX 0, 0, 220, 50 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Incoming Protocol Properties" +FONT 8, "MS Shell Dlg" +BEGIN + AUTOCHECKBOX "Allow &callers to access my local area network", 7034, 7, 7, 208, 18, BS_LEFT | BS_TOP | BS_MULTILINE + DEFPUSHBUTTON "OK", 1, 86, 30, 60, 14 + PUSHBUTTON "Cancel", 2, 151, 30, 60, 14 +END + +7035 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Networking" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Network components:", -1, 7, 7, 217, 9 + CONTROL "", 7036, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000440D, 7, 17, 215, 89, WS_EX_CLIENTEDGE + PUSHBUTTON "&Install...", 7037, 9, 110, 67, 14, WS_GROUP + PUSHBUTTON "&Uninstall", 7038, 80, 110, 67, 14, WS_GROUP + PUSHBUTTON "P&roperties", 7039, 153, 110, 67, 14, WS_GROUP + GROUPBOX "Description", -1, 7, 138, 213, 69 + LTEXT "", 7040, 17, 150, 193, 48 +END + +7042 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_CONTEXTHELP | WS_CHILD | WS_CAPTION +CAPTION "Users" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Users allowed to connect:", -1, 7, 5, 213, 8 + CONTROL "", 7043, "SYSLISTVIEW32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x0000440D, 7, 19, 214, 83, WS_EX_CLIENTEDGE + PUSHBUTTON "&New...", 7044, 7, 107, 67, 14, WS_GROUP + PUSHBUTTON "&Delete", 7045, 80, 107, 67, 14, WS_GROUP + PUSHBUTTON "P&roperties", 7046, 153, 107, 67, 14, WS_GROUP + AUTOCHECKBOX "Re&quire all users to secure their passwords and data.", 7048, 8, 151, 217, 12, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Al&ways allow directly connected devices such as palmtop computers to connect without providing a password.", 7049, 8, 169, 217, 23, BS_TOP | BS_MULTILINE + LTEXT "Note that other factors, such as a disabled user account, may affect a user's ability to connect.", -1, 9, 126, 212, 23 +END + +7049 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Select the check box next to each user who should be allowed a connection to this computer. Note that other factors, such as a disabled user account, may affect a user's ability to connect.", -1, 10, 1, 275, 27 + LTEXT "&Users allowed to connect:", -1, 10, 28, 275, 8 + CONTROL "", 7043, "SYSLISTVIEW32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x0000440D, 10, 42, 275, 73 + PUSHBUTTON "&Add...", 7044, 10, 122, 65, 14, WS_GROUP + PUSHBUTTON "&Remove", 7045, 79, 122, 65, 14, WS_GROUP + PUSHBUTTON "&Properties", 7046, 147, 122, 65, 14, WS_GROUP +END + +7050 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Select the check box next to each device you want to use for incoming connections.", -1, 10, 4, 299, 10 + LTEXT "&Connection devices:", -1, 10, 16, 275, 8 + CONTROL "", 7011, "SYSLISTVIEW32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x0000440D, 10, 26, 297, 87 + PUSHBUTTON "P&roperties", 7013, 243, 120, 65, 14, WS_GROUP +END + +7051 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Select the check box next to each type of networking software that should be enabled for incoming connections.", -1, 10, 1, 288, 20 + LTEXT "Networking &software:", -1, 10, 24, 274, 8 + CONTROL "", 7036, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000440D, 10, 34, 286, 33 + PUSHBUTTON "&Install...", 7037, 108, 71, 60, 14, WS_GROUP + PUSHBUTTON "&Uninstall", 7038, 172, 71, 60, 14, WS_GROUP + PUSHBUTTON "&Properties", 7039, 236, 71, 60, 14, WS_GROUP + LTEXT "", 7040, 21, 105, 273, 38 + LTEXT "Description:", -1, 21, 95, 275, 8 +END + +7052 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Virtual private connections to your computer through the Internet are possible only if your computer has a known name or IP address on the Internet.", -1, 10, 4, 290, 20 + AUTORADIOBUTTON "&Allow virtual private connections", 7053, 29, 63, 265, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "&Do not allow virtual private connections", 7054, 29, 78, 265, 10, BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + LTEXT "Do you want to allow virtual private connections to this computer?", -1, 17, 49, 275, 8 + LTEXT " If you allow VPN connections, ReactOS will modify the Internet Connection Firewall to allow your computer to send and receive VPN packets.", -1, 10, 25, 293, 25 +END + +7055 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Device for this connection:", -1, 23, 24, 275, 8 + COMBOBOX 7056, 22, 36, 275, 125, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Devices other than the one you select will not be affected and may be used for other purposes.", -1, 10, 4, 275, 17 + PUSHBUTTON "&Properties", 7061, 232, 53, 65, 14, WS_GROUP +END + +7379 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN +END + +19900 DIALOGEX 0, 0, 156, 44 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Dial-Up Networking" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 563, 19901, 10, 10, 18, 20 + LTEXT "Waiting for services to start...", 19902, 34, 16, 120, 8 +END + +STRINGTABLE +BEGIN + 187 "&No, do not dial\0" + 188 "You (or a program) have requested information from %1. Which connection do you want to use?\0" + 189 "Add Alternate Phone Number\0" + 190 "Dial only first available device\0" + 191 "Dial all devices\0" + 192 "Dial devices only as needed\0" + 193 "Enter a user name and password with access to the remote network domain.\0" + 194 "Network Address Translation (NAT) is currently installed as a routing protocol,\nand must be removed before enabling Internet Connection Sharing.\nTo remove Network Address Translation, open the Routing and Remote Access Manager\nsnapin and expand the router's entry in the left pane.\nDelete the Network Address Translation routing protocol from the list of IP\nrouting protocols.\0" + 195 "The area code must contain only the digits 0 to 9.\0" + 196 "The entry name must contain at least one non-blank character and cannot begin with a period. Choose a different name.\0" + 197 "You must choose a value from %1 to %2 for this field.\0" + 198 "The custom authentication configuration DLL could not be loaded. Make sure the custom authentication package is correctly installed.\0" + 199 "The connection selected was established by the Multiprotocol router.\nPlease use the 'Routing and RAS Admin' tool to hang up the connection.\0" + 200 "Comment\0" + 201 "The custom authentication package configuration failed.\0" + 202 "TCP/IP is not installed or is disabled for Routing and Remote Access. In Control Panel, start Network, go to the Services page, choose 'Routing and Remote Access Service' Properties, and press the Network button.\0" + 203 "IPX is not installed or is disabled for Routing and Remote Access. You can install/enable IPX by viewing the properties of any connection in \"Connections\" folder.\0" + 204 "Remove the selected device(s) from the list?\0" + 205 "Delete %1 from the phonebook?\0" + 206 "Disconnect from %1?\0" + 207 "A file named %1 already exists. Overwrite it?\0" + 208 "Syntax errors were found in the script. Do you wish to view the error log?\0" + 209 "'%1' is now connected. \0" + 210 "Right-click the Dial-Up Networking Monitor on the task bar to hang up or check the status of your connection.\0" + 212 "Connected successfully.\0" + 213 "The custom authentication method selected must be initialized by pressing Properties.\0" + 214 "lnk\0" + 215 "Dial-up shortcut files (*.rnk)\0" + 216 "*.rnk\0" + 217 "Create Dial-Up Shortcut\0" + 218 "Link to %1 failed. Reconnect pending...\0" + 219 "Cannot retrieve framing information.\0" + 220 "Cannot retrieve port information.\0" + 221 "Cannot retrieve projection information.\0" + 222 "Cannot load connection list.\0" + 223 "Client:\0" + 224 "Details\0" + 225 "Device:\0" + 226 "Network:\0" + 227 "(not connected)\0" + 228 "&Connect...\0" + 229 "Hang &Up\0" + 230 "Dial-up Connection\0" + 231 "Modem configuration set to defaults\0" + 232 "COM1\0" + 233 "Remote Router\0" + 234 "Modem or device\0" + 235 "Please enter a username for this interface's account on the remote router.\0" + 236 "An entry named %1 already exists. Choose a different name.\0" + 237 "You may want to allow sending your password without encryption.\0" + 238 "Password Encryption\0" + 239 "The wizard is ready to create your connection.\0" + 240 "Finished\0" + 241 "Phone &number:\0" + 242 "Call Me Back At\0" + 243 "Edit Alternate Phone Number\0" + 244 "Since this connection is currently active, some settings will not take effect until the next time you dial it.\0" + 245 "There are no connections available to all users. You must logon before dialing.\0" + 246 "The phonebook is empty.\n\nPress OK to add an entry.\0" + 247 "Due to import/export restrictions, data encryption is not available in this version of ReactOS.\0" + 248 "Please enter an X.25 address on the next screen.\0" + 249 "Error %1: %2\0" + 250 "%1\n\nError %2: %3\0" + 251 "%1\n\nError %2: %3\nDiagnostic: %4\0" + 252 "%1\n\nError %2: %3\nFail Code: %4\0" + 253 "%1\n\nError %2: %3\n\nPress F1 for more information.\0" + 254 "%1\n\nError %2: %3\nName: %4\0" + 255 "%1\n\n%4\0" + 256 "%1\n\nError %2: %3\nResponse: %4\0" + 257 "Fail Code: 0x%1\n\0" + 258 "Name: %1\n\0" + 259 "%1 CP reported error %2: %3\n\0" + 260 "%1 CP connected successfully.\n\0" + 261 "You can choose which dial-up protocol to use.\0" + 262 "Choose Dial-up Protocol\0" + 263 "Press Finish to save '%1'.\0" + 264 "netcfg.hlp\0" + 265 "&Move successful number to the top of the list on connection\0" + 266 "&New phone number:\0" + 267 "&Phone numbers:\0" + 268 "Phone Numbers\0" + 269 "You may enter a fixed IP address.\0" + 270 "IP Address\0" + 271 "The Internet protocols (TCP/IP), are not installed or are disabled for Remote Access. In Control Panel, start Network, go to the Services page, choose 'Remote Access Service' Properties, and press the Network button.\0" + 272 "TCP/IP\0" + 273 "IPSec, default policy\0" + 274 "IPX/SPX or compatible\0" + 275 " (the current location)\0" + 276 "ISDN\0" + 277 "All available ISDN lines multi-linked\0" + 278 "64K Digital\0" + 279 "56K Digital\0" + 280 "56K Voice\0" + 281 "You may need a special procedure before connecting.\0" + 282 "Choose Logon Options\0" + 283 "%d%%\0" + 284 "Phone number for %s\0" + 285 "&New location:\0" + 286 "&Locations:\0" + 287 "Locations\0" + 288 "This is the device that will be used to make the connection.\0" + 289 "Select a Device\0" + 290 "Multiple Lines cannot be bundled unless you are calling a PPP server.\0" + 291 "Modem\0" + 292 "The modem is not installed.\0" + 293 "MS Point-to-Point Encryption, 128 bit RSA/RC4\0" + 294 "MS Point-to-Point Encryption, 40 bit RSA/RC4\0" + 295 "Multiple Lines\0" + 296 "(Press Configure to set)\0" + 297 "You may enter fixed DNS and WINS addresses.\0" + 298 "Name Server Addresses\0" + 299 "Down-level RAS\0" + 300 "PPP\0" + 301 "PPP multi-link\0" + 302 "SLIP\0" + 303 "NetBEUI\0" + 304 "A personal phonebook has been created and initialized with the contents of the system phonebook.\0" + 305 "No alternate phonebook is selected.\0" + 306 "That device cannot be dynamically configured.\0" + 307 "The entry cannot be deleted because it is connected.\0" + 308 "No entry is selected. Press the New button to create an entry.\0" + 309 "A non-zero IP address must be supplied when 'specify an IP address' is selected.\0" + 310 "An X.25 Address is required when an X.25 dial-up network or X.25 device is selected.\0" + 311 "(none)\0" + 312 "'%1' is already in the list.\0" + 313 "Secure my password and my data\0" + 314 "The %1 protocol cannot be selected because it is not installed or is disabled for Remote Access. To change, in Control Panel start Network, choose Services page, Remote Access Properties, and press the Network button.\0" + 315 "Cannot save password.\0" + 316 "Cannot display data.\0" + 317 "Cannot get auto-dial information.\0" + 318 "Cannot load dialog.\0" + 319 "Cannot disable shared access.\0" + 320 "Cannot load property page.\0" + 321 "Cannot load phonebook.\0" + 322 "Cannot load RAS Manager port information.\0" + 323 "Cannot read user preferences from registry.\0" + 324 "Cannot load script information.\0" + 325 "Cannot view script.log with notepad.exe\0" + 326 "Cannot edit switch.inf with notepad.exe\0" + 327 "Cannot load TAPI information.\0" + 328 "Cannot load X.25 information.\0" + 329 "Cannot create new phonebook.\0" + 330 "Cannot enable shared access.\0" + 331 "Cannot connect the phonebook entry.\0" + 332 "Cannot get send/receive buffer.\0" + 333 "Cannot get status information for a port.\0" + 334 "Cannot retrieve protocol information.\0" + 335 "Cannot receive buffer from device.\0" + 336 "Cannot send buffer to device.\0" + 337 "Cannot retrieve data.\0" + 338 "Cannot save TAPI information.\0" + 339 "Cannot save data.\0" + 340 "The script has halted.\0" + 341 "The script has halted due to an error. Do you wish to view the error log?\0" + 342 "Cannot set auto-dial information.\0" + 343 "Cannot delete saved password.\0" + 344 "Cannot write phonebook.\0" + 345 "Writing preferences to registry\0" + 346 "Cannot write the shortcut file.\0" + 347 "OK\0" + 348 "What is your ISP's phone number?\0" + 349 "Phone Number to Dial\0" + 350 "The Password and Confirm password fields do not match.\0" + 351 "The New Password and Confirm New Password fields do not match.\0" + 352 "pbk\0" + 353 "Phonebook files (*.pbk)\0" + 354 "*.pbk\0" + 355 "Open Phonebook\0" + 356 "Clone Phonebook Entry\0" + 357 "Edit Phonebook Entry\0" + 358 "New Phonebook Entry\0" + 359 "Phone number\0" + 360 "Phone numbers\0" + 361 "Network Connections\0" + 362 "You must select at least one network protocol.\0" + 363 "Before you can call PPP servers you must install a network protocol with the Control Network applet.\0" + 364 "&New prefix:\0" + 365 "&Prefixes:\0" + 366 "Phone Number Prefixes\0" + 367 "One or more requested network protocols did not connect successfully.\n\n\0" + 368 "Press Accept to use the connection as is, or Hang Up to disconnect.\0" + 369 "Point-to-point protocol settings to use when %1 initiates a demand dial connection on interface %2:\0" + 370 "[To change the saved password, click here]\0" + 405 "NetBEUI protocol is required to call older RAS servers.\0" + 406 "Before you can call older RAS servers you must install the NetBEUI protocol. NetBEUI can be installed with the Control Panel Network applet.\0" + 407 "&Redial\0" + 408 "You have chosen to disable one or more transports. Doing so requires the routing managers and routing protocols for the disabled transports to be removed from this demand-dial interface.\nClick Yes if you want to conti \n \n\n\n\n\n\nnue, or No if you want to re-enable the transports.\0" + 409 "Internet Connection Sharing\0" + 410 "Demand-dial interface dial-in account.\0" + 411 "You now need to set the dial-out credentials that interface '%1' will use when connecting to the remote router. These credentials must match the dial-in credentials configured on the remote router. When connecting to a \n \n\n\n\n\n\nWin NT4/2000 router, the user name must also match the interface name of the remote router.\0" + 412 "mpradmin.hlp\0" + 413 "&Move successful number or address to the top of the list on connection\0" + 414 "&New phone number or address:\0" + 415 "&Phone numbers or addresses:\0" + 416 "Numbers and Addresses\0" + 417 "PPP: Win 95/98/NT4/2000, Internet\0" + 418 "None\0" + 419 "SLIP: Unix Connection\0" + 420 "All devices connected.\0" + 421 "Receiving registration result...\0" + 422 "Sending callback information...\0" + 423 "Sending new password...\0" + 424 "Calculating link speed...\0" + 425 "Checking authentication status...\0" + 426 "Registering your computer on the network...\0" + 427 "Retrying authentication...\0" + 428 "Verifying username and password...\0" + 429 "Authenticated.\0" + 430 "Connecting through %1...\0" + 431 "Dialing...\0" + 432 "Modems connecting...\0" + 433 "Connecting over cable...\0" + 434 "Dialing %1...\0" + 435 "Connecting over X.25 to %1...\0" + 436 "Postconnecting through %1...\0" + 437 "Preconnecting through %1...\0" + 438 "Connected.\0" + 439 "Device connected.\0" + 440 "Disconnected.\0" + 441 "Modem connected.\0" + 442 "Cable connected.\0" + 443 "Opening port...\0" + 444 "X.25 connected.\0" + 445 "Port opened.\0" + 446 "Postconnect complete.\0" + 447 "Preconnect complete.\0" + 448 "Preparing for callback...\0" + 449 "Checking network protocol connections...\0" + 450 "Verifying username and password...\0" + 451 "Connected, bundling additional lines\0" + 452 "Unknown state.\0" + 453 "Waiting for callback...\0" + 454 "Waiting for modem reset...\0" + 455 "Make the phone number change permanent?\0" + 456 "scp\0" + 457 "*.scp\0" + 458 "Dial-up script files (*.scp)\0" + 459 "Browse Dial-Up Scripts\0" + 460 "You must check at least one modem or adapter.\0" + 461 "Phone number\0" + 462 "TCP/IP protocol is required to call SLIP servers.\0" + 463 "Before you can call SLIP servers you must install the TCP/IP protocol. TCP/IP can be installed with the Control Panel Network applet.\0" + 464 "Status\0" + 465 "&New suffix:\0" + 466 "&Suffixes:\0" + 467 "Phone Number Suffixes\0" + 468 "You can go on to choose special settings, if necessary.\0" + 469 "Custom Settings\0" + 470 "Manual Modem Command Terminal\0" + 471 "After Dial Terminal\0" + 472 "Before Dial Terminal\0" + 473 "SLIP Login Terminal\0" + 474 "10 minutes\0" + 475 "10 seconds\0" + 476 "1 hour\0" + 477 "1 minute\0" + 478 "24 hours\0" + 479 "2 hours\0" + 480 "2 minutes\0" + 481 "30 minutes\0" + 482 "30 seconds\0" + 483 "3 seconds\0" + 484 "4 hours\0" + 485 "4 minutes\0" + 486 "5 minutes\0" + 487 "5 seconds\0" + 488 "8 hours\0" + 489 "never\0" + 490 "You can make the new connection available to any user or only to yourself.\0" + 491 "Connection Availability\0" + 492 "Discard multiple line settings for the entry?\0" + 493 "Unavailable device\0" + 494 "Logon Preferences\0" + 495 "Dial-up Preferences\0" + 496 "X.25\0" + 497 "X.25 PAD\0" + 498 "You can let other computers access resources through this dial-up connection.\0" + 499 "VPN Server Selection\0" + 500 "Cannot enable on-demand dialing.\0" + 501 "What is the name or address of the VPN server?\0" + 502 "Cannot disable on-demand dialing.\0" + 503 "Public Network\0" + 504 "ReactOS can make sure the public network is connected first.\0" + 505 "VPN1\0" + 506 "Internet Connection Sharing\0" + 507 "You can let a local network access resources through this dial-up connection.\0" + 508 "Host or Guest?\0" + 509 "Internet Connection Sharing is currently enabled for connection '%1'.\n\nIt will now be enabled for connection '%2' instead.\0" + 510 "To connect two computers, your computer must be identified as either a host or a guest.\0" + 511 "When Internet Connection Sharing is enabled, your LAN adapter will be set to use IP address 192.168.0.1. Your computer may lose connectivity with other computers on your network. If these other computers have static IP addresses, you should set them to obtain their IP addresses automatically. Are you sure you want to enable Internet Connection Sharing?\0" + 512 "Select a Device\0" + 513 "This is the device that will be used to make the connection.\0" + 514 "&Connect\0" + 515 "Let the server determine encryption\0" + 516 "Always encrypt my data\0" + 517 "Use MPPE-40 data encryption\0" + 518 "Use MPPE-128 data encryption\0" + 519 "The current encryption selection requires MS-CHAP or EAP authentication.\0" + 520 "Custom Authentication Message\0" + 521 "Connecting to %1...\0" + 522 "Connection Name\0" + 523 "Automatic\0" + 524 "PPTP VPN\0" + 525 "L2TP IPSec VPN\0" + 526 "Select the type of the connection.\0" + 527 "Type of Connection\0" + 528 "hh.exe netcfg.chm::/trouble_all.htm\0" + 529 "Virtual Private Connection\0" + 530 "Use any form of authentication required including clear text. Do not encrypt data.\0" + 531 "Use any form of authentication that requires passwords to be encrypted. Do not encrypt data.\0" + 532 "Please type a name for the entry.\0" + 533 "Encrypt passwords and data.\0" + 534 "Please type a port number between 1 and 65535.\0" + 535 "Specify custom authentication and data encryption with the Settings button.\0" + 536 "Use any form of authentication that requires encrypted passwords. Do not encrypt data.\0" + 537 "Encrypt passwords and data.\0" + 538 "Specify custom authentication and data encryption with the Settings button.\0" + 539 "The port number is already used by another entry.\nPlease enter a unique port number.\0" + 540 "Please enter one or more ports for incoming responses.\0" + 541 "Please select the entry to be deleted.\0" + 542 "1 second\0" + 543 "Please select the entry to be modified.\0" + 549 "What is the name of the other computer you are connecting to?\0" + 576 "20 minutes\0" + 579 "Specify a name for this connection to your workplace.\0" + 581 "Network Application Settings\0" + 582 "Type a name for this connection in the following box.\0" + 583 "Type the name of the other computer in the following box.\0" + 584 "Type the name of your ISP in the following box.\0" + 585 "What is the name of the service that provides your Internet connection?\0" + 586 "Please type the IP address of the server computer on the private network.\0" + 587 "Advanced Settings\0" + 588 "The entry name begins with a period. or contains some invalid characters. \nChoose a different name.\0" + 589 "Properties\0" + 1512 "Communications Port\0" + 1523 " channel\0" + 1526 "Smart Cards\0" + 1527 "You can use your smart card with this connection.\0" + 1528 "Direct Connection\0" + 1529 "Please select a device for this connection.\0" + 1530 "Verdana Bold\0" + 1531 "12\0" + 1532 "Connection Type\0" + 1533 "Select the type of demand dial interface you want to create.\0" + 1534 "Select a device\0" + 1535 "This is the device that will be used to make the connection.\0" + 1536 "Phone Number\0" + 1537 "Enter the phone number of the remote server or router you are calling.\0" + 1538 "VPN Type\0" + 1539 "Select the type of VPN interface you want to create.\0" + 1540 "Destination Address\0" + 1541 "What is the name or address of the remote router?\0" + 1544 "IP Address\0" + 1545 "Configure this router's IP address for this interface.\0" + 1546 "Name Server Addresses\0" + 1547 "Configure DNS and WINS addresses for use by this interface.\0" + 1548 "Router Scripting\0" + 1549 "You can set up a scripting for connecting to the remote router.\0" + 1550 "Dial In Credentials\0" + 1551 "Configure the user name and password that the remote router will use when it dials in to this server.\0" + 1552 "Dial Out Credentials\0" + 1553 "Configure the user name and password to be used when connecting to the remote router.\0" + 1554 "Interface Name\0" + 1555 "Select the name by which this new interface will be known.\0" + 1556 "No available devices\0" + 1557 "A user account named %1 already exists on the local computer. Should the demand dial interface be configured to use this user account?\0" + 1558 "There are no security protocol settings for SLIP server connections.\0" + 1559 "Allow unsecured password\0" + 1560 "Require secured password\0" + 1561 "Use smart card\0" + 1562 "You must select at least one password authentication protocol.\0" + 1563 "No encryption allowed (server will disconnect if it requires encryption)\0" + 1564 "Optional encryption (connect even if no encryption)\0" + 1565 "Require encryption (disconnect if server declines)\0" + 1566 "Maximum strength encryption (disconnect if server declines)\0" + 1567 " (encryption enabled)\0" + 1568 "Internet Account Information\0" + 1569 "You will need an account name and password to sign in to your Internet account.\0" + 1570 "The selected EAP package does not provide encryption keys. Select an EAP package that does provide keys or select not to encrypt.\0" + 1571 "The current encryption selection requires EAP or some version of MS-CHAP logon security methods.\0" + 1572 "Protocols and Security\0" + 1573 "Select transports and security options for this connection.\0" + 1574 "The protocols you have selected include PAP, SPAP, and/or CHAP. If one of these is negotiated, data encryption will not occur. Do you want to keep these settings?\0" + 1575 "To connect to '%1', you must first be connected to '%2'. Do you want to connect to '%2' now?\0" + 1576 "Connecting over parallel cable...\0" + 1577 "Connecting over infrared...\0" + 1578 "Parallel cable connected.\0" + 1579 "Infrared connected.\0" + 1580 "This connection was configured to use a data encryption strength that is not supported by the installed software. The security properties of this connection have been reset to the available encryption strengths.\0" + 1581 "Typ&e of VPN:\0" + 1582 "Please enter a user name.\0" + 1583 "This user name and password will be saved for your own use. There is already a user name and password saved for all other users of this connection. Do you want to delete the user name and password saved for all other users?\0" + 1584 "For example, you could type the name of your workplace or the name of a server you will connect to.\0" + 1585 "Account Information\0" + 1586 "The controls on this property sheet are disabled because the system must first be rebooted before any configuration changes can be made.\0" + 1587 "The controls on this property sheet are disabled because one or more other Network property sheets are already open. To use these controls, close all these property sheets and then reopen this one.\0" + 1588 "Some of the controls on this property sheet are disabled because you do not have sufficient privileges to access them.\0" + 1589 "The following message was received from your service provider:\r\n\r\n%1\0" + 1590 "Reconnect %1\0" + 1591 "Service Name\0" + 1592 "What is the name of the service that provides your broadband connection?\0" + 1593 "You will need an account name and password to sign on to your account\0" + 1594 "PPPOE1-0\0" + 1595 "Point-to-Point Protocol over Ethernet (PPPoE)\0" + 1596 "Type of &broadband connection to make:\0" + 1611 "Broadband Connection\0" + 1612 "You have selected to use a preshared key but you have not entered one. \nPlease enter a preshared key.\0" + 1613 "Cannot Commit Credentials\0" + 1634 "Because the Windows Management Instrumentation (WMI) service has been disabled, ReactOS cannot display the properties of this connection or the home network.\n\nTo configure the properties of this connection or your home network, you must first enable the WMI service. To do this, in the Administrative Tools control panel, double-click Services, right-click Windows Management Instrumentation, and then click Start.\0" + 1635 "ReactOS cannot display the properties of this connection. The Windows Management Instrumentation (WMI) information might be corrupted. To correct this, use System Restore to restore ReactOS to an earlier time (called a restore point). System Restore is located in the System Tools folder in Accessories.\0" + 1646 "Allow incoming echo request\0" + 1647 "Allow incoming timestamp request\0" + 1648 "Allow incoming mask request\0" + 1649 "Allow incoming router request\0" + 1650 "Allow outgoing destination unreachable\0" + 1651 "Allow outgoing source quench\0" + 1652 "Allow outgoing parameter problem\0" + 1653 "Allow outgoing time exceeded\0" + 1654 "Allow redirect\0" + 1655 "log\0" + 1656 "*.log\0" + 1657 "Firewall log files (*.log)\0" + 1658 "Browse\0" + 1663 "Select a private network connection\0" + 1664 "To enable Internet Connection Sharing a connection must be selected for the private network. Please select a connection from the list of available connections.\0" + 1665 "Messages sent to this computer will be repeated back to the sender. This is commonly used for troubleshooting, for example, to ping a machine.\0" + 1666 "Data sent to this computer can be acknowledged with a confirmation message indicating the time that the data was received.\0" + 1667 "This computer will listen for and respond to requests for more information about the public network to which it is attached.\0" + 1668 "This computer will respond to requests for information about the routes it recognizes.\0" + 1669 "Data sent over the Internet that fails to reach this computer due to an error will be discarded and acknowledged with a \"destination unreachable\" message explaining the failure.\0" + 1670 "When this computer's ability to process incoming data cannot keep up with the rate of a transmission, data will be dropped and the sender will be asked to slow down.\0" + 1671 "When this computer discards data it has received due to a problematic header, it will reply to the sender with a \"bad header\" error message.\0" + 1672 "When this computer discards an incomplete data transmission because the entire transmission required more time than allowed, it will reply to the sender with a \"time expired\" message.\0" + 1673 "Data sent from this computer will be rerouted if the default path changes.\0" + 1675 "The value entered for the log file size is not valid. Enter a value between 1 and 32767 k.\0" + 1685 "Your user account does not have permission to use this connection. Usually, this is because you are logged in as Guest.\0" + 1686 "Type an account name and password. (If you have forgotten an existing account name or password, contact your network administrator.)\0" + 1687 "Computer N&ame\0" + 1688 "ISP N&ame\0" + 1689 "Company N&ame\0" + 1690 "What is the phone number you will use to make this connection?\n\0" + 7301 "Incoming TCP/IP Properties\0" + 7302 "You must choose a value from %1 to %2 for this field.\0" + 7306 "Incoming Connections Error\0" + 7307 "Incoming Connections General Error\0" + 7308 "Incoming Connections\0" + 7309 "Incoming Connections Networking Error\0" + 7310 "Incoming Connections Multilink Status Error\0" + 7311 "Incoming Connections Error\0" + 7312 "Incoming Connections Initialization Error\0" + 7313 "Incoming Connections TCP/IP Properties Error\0" + 7314 "Incoming Connections IPX Properties Error\0" + 7315 "Incoming Connections Error\0" + 7316 "Generic\0" + 7317 "Device\0" + 7318 "Miscellaneous Database\0" + 7319 "User Database\0" + 7320 "Protocol Database\0" + 7321 "You must enter a logon name for the new user or press cancel.\0" + 7322 "The password you entered was too short.\0" + 7323 "The passwords entered are not the same. Please re-enter them.\0" + 7324 "An internal error has occured. \0" + 7325 "Listview\0" + 7326 "An error has occurred while attempting to commit the changes you have made to the local user database. \0" + 7327 "You have insufficient priveleges to add a user to the local system database. \0" + 7328 "The user you are trying create already exists in the local user database.\0" + 7329 "The user was not added to the local user database because the password you entered was rejected.\0" + 7330 "Unable to reload the system user database because of an internal error.\0" + 7331 "An internal error has occurred: The local user database handle is corrupt.\0" + 7332 "Unable to load the resources neccessary to display the user tab.\0" + 7333 "An internal error occured while attempting to rollback the changes you made to the local user database. \0" + 7334 "The device database handle is corrupt.\0" + 7335 "Unable to load the resources neccessary to display the general tab.\0" + 7336 "An error has occurred while attempting to commit some of the device/vpn related changes you have made. \0" + 7337 "An internal error occured.\0" + 7338 "An internal error occurred: The networking component database handle is corrupt.\0" + 7339 "An internal error has occurred. \0" + 7340 "An error has occurred while attempting to commit the changes you have made to the networking components.\0" + 7341 "An internal error occured.\0" + 7342 "Unable to commit the changes you made to the TCP/IP protocol to the system. \0" + 7343 "Unable to save the changes you made to the IPX protocol to the system. \0" + 7344 "Unable to display the TCP/IP properties.\0" + 7345 "Unable to display the IPX properties.\0" + 7346 "Unable to load TCP/IP properties from the system. \0" + 7347 "Unable to load IPX properties from the system. \0" + 7348 "Incoming Connections depend on the Routing and Remote Access service which was unable to start. For more information, check the system event log.\0" + 7349 "Unable to allow the editing of networking components at this time because they are currently being modified elsewhere.\0" + 7350 "The new user you entered was not added to the local user database because the name or password entered violated a system policy (it was too large, too small, or ill-formed). \0" + 7351 "The system is unable to delete the requested user. \0" + 7352 "Unable to remove the selected network component because it is in use.\0" + 7353 "Incoming Connections Warning\0" + 7354 "Any users that you delete will be permanently removed from the system even if cancel is pressed. Are you sure you want to permanently remove %s? \0" + 7355 "You are about to switch to a system management console. This Incoming Connections property sheet will be closed and any changes you may have made will be committed to the system. Is it ok to continue?\0" + 7356 "Your Network Mask value has been changed. A zero bit in a mask can only be followed by other zero bits. For example, a Network Mask value, expressed in decimal dotted notation, of 255.255.0.0, is valid, but 255.0.255.0 is not. \n\0" + 7357 "User Permissions\0" + 7358 "You can specify the users who can connect to this computer.\0" + 7359 "Devices for Incoming Connections\0" + 7360 "You can choose the devices your computer uses to accept incoming connections.\0" + 7361 "Incoming Virtual Private Network (VPN) Connection\0" + 7362 "Another computer can connect to yours through a VPN connection\0" + 7363 "Networking Software\0" + 7364 "Networking software allows this computer to accept connections from other kinds of computers.\0" + 7365 "Completing the New Connection Wizard\0" + 7366 " \0" + 7367 "Incoming Connections\0" + 7371 "No hardware capable of accepting calls is installed.\0" + 7372 " \0" + 7373 "Assign specified &network number:\0" + 7374 "Assign &network numbers sequentially from:\0" + 7375 "Ny bruker\0" + 7376 "Connection Device\0" + 7377 "What device do you want to use to make this connection?\0" + 7378 "No devices capable of accepting direct connections are currently installed.\0" + 7379 "New Incoming Connection Warning\0" + 7380 "Because this Win 2000 Server belongs to or controls a domain, you must use the Routing and Remote Access system console to configure this machine to receive incoming connections. Cancel changes and switch to this console?\n\0" + 7381 "A&ssign network number automatically\0" + 7382 "A&ssign network numbers automatically\0" + 7383 "Incoming Connections can not issue the ipx network numbers 00000000 or FFFFFFFF. Please either change the assigned network numbers or use automatic network number assignment.\0" + 7384 "to\0" + 7385 "Communications Port (%s)\0" + 7386 "Network Connections does not display some specialized options for inbound connections that have been set using the Local User Manager or Remote Access Policy consoles. For complete and correct information on incoming connections, you will need to use these consoles.\0" + 7387 "The user callback mode you have selected requires you to enter a valid callback number.\0" + 7388 "ReactOS must reboot to complete the operation. Is it ok to reboot now?\0" + 7389 "The currently selected device has no configuration options available.\0" + 7390 "Invalid Range\0" + 7391 "You have requested that '%1' be disabled for Incoming Connections. In order to disable this, you must stop the 'Server' service. Once stopped, any shared directories or printers on this computer will no longer be available to any other computer. Do you want to bring up a system console that will allow you to stop the 'Server' service?\r\n\nUnder Computer Management, click System Tools and then click Services. In the right pane, right-click Server and click stop.\0" + 7392 "This serial port is not enabled for use in a direct connection to another computer. It will be enabled after you complete this wizard. You can then configure the port speed and other properties by right-clicking the icon for this connection and selecting Properties.\n\0" + 7393 "Incoming Connections\0" + 7394 "The IP address pool you've entered is invalid.\0" + 7395 "The mask provided is invalid.\0" + 7396 "The start address entered for the TCP/IP pool is invalid. It must lie between 1.0.0.0 and 224.0.0.0 and it must not be in the form 127.x.x.x.\0" + 7397 "The TCP/IP pool entered is invalid because the address is more specific than the mask.\0" + 7398 "The start address must be less than the end address.\0" + 7399 "The Routing and Remote Access Service is in the process of stopping. Until it stops, the Incoming Connections option is not available. Please wait a few moments and retry.\0" + 7400 "%s (%s)\0" + 7401 "%s (%d channels)\0" + 7402 "Incoming Connection VPN (PPTP)\0" + 7403 "Incoming Connection VPN (L2TP)\0" + 7404 "IP Security (IKE)\0" + 7405 "127.0.0.1\0" + 7406 "You do not have sufficient privileges to set up Incoming Connections\0" +29900 "Cannot load the Remote Access Connection Manager service.\0" +29901 "Cannot load the file MPRAPI.DLL in the system32 directory.\0" +END diff --git a/reactos/dll/win32/rasdlg/rasdlg.rc b/reactos/dll/win32/rasdlg/rasdlg.rc index 469ab060a7e..1af7f8e15b9 100644 --- a/reactos/dll/win32/rasdlg/rasdlg.rc +++ b/reactos/dll/win32/rasdlg/rasdlg.rc @@ -36,6 +36,7 @@ #include "lang/de-DE.rc" #include "lang/en-US.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/uk-UA.rc" diff --git a/reactos/dll/win32/riched20/riched20.rbuild b/reactos/dll/win32/riched20/riched20.rbuild index 736d3a3b520..e01a41bb17b 100644 --- a/reactos/dll/win32/riched20/riched20.rbuild +++ b/reactos/dll/win32/riched20/riched20.rbuild @@ -8,6 +8,7 @@ 0x600 0x600 + -enable-stdcall-fixup caret.c clipboard.c context.c diff --git a/reactos/dll/win32/samsrv/samsrv.rbuild b/reactos/dll/win32/samsrv/samsrv.rbuild index a2ebe7f0476..44f8c06f6d9 100644 --- a/reactos/dll/win32/samsrv/samsrv.rbuild +++ b/reactos/dll/win32/samsrv/samsrv.rbuild @@ -1,10 +1,11 @@ - + . ntdll kernel32 samsrv.c samsrv.rc + samsrv.spec diff --git a/reactos/dll/win32/samsrv/samsrv.def b/reactos/dll/win32/samsrv/samsrv.spec similarity index 96% rename from reactos/dll/win32/samsrv/samsrv.def rename to reactos/dll/win32/samsrv/samsrv.spec index 9f0b45a555a..31b31ac2e77 100644 --- a/reactos/dll/win32/samsrv/samsrv.def +++ b/reactos/dll/win32/samsrv/samsrv.spec @@ -1,5 +1,3 @@ -LIBRARY samsrv -EXPORTS ;SamIAccountRestrictions ;SamIConnect ;SamICreateAccountByRid @@ -18,12 +16,12 @@ EXPORTS ;SamIFree_SAMPR_USER_INFO_BUFFER ;SamIGetPrivateData ;SamIGetSerialNumberDomain -SamIInitialize +@ stdcall SamIInitialize() ;SamINotifyDelta ;SamISetAuditingInformation ;SamISetPrivateData ;SamISetSerialNumberDomain -SampInitializeRegistry +@ stdcall SampInitializeRegistry() ;SampRtlConvertUlongToUnicodeString ;SamrAddMemberToAlias ;SamrAddMemberToGroup diff --git a/reactos/dll/win32/serialui/lang/no-NO.rc b/reactos/dll/win32/serialui/lang/no-NO.rc new file mode 100644 index 00000000000..d5a896d1814 --- /dev/null +++ b/reactos/dll/win32/serialui/lang/no-NO.rc @@ -0,0 +1,41 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +STRINGTABLE LOADONCALL DISCARDABLE +BEGIN + IDS_EVENPARITY, "Even" + IDS_MARKPARITY, "Mark" + IDS_NOPARITY, "No parity" + IDS_ODDPARITY, "Odd" + IDS_SPACEPARITY, "Space" + + IDS_ONESTOPBIT, "1 stopp bit" + IDS_ONE5STOPBITS, "1.5 stopp bits" + IDS_TWOSTOPBITS, "2 stopp bits" + + IDS_FC_NO, "Nei" + IDS_FC_CTSRTS, "CTS/RTS" + IDS_FC_XONXOFF, "XON/XOFF" + + IDS_TITLE, "Egenskaper for %s" +END + +IDD_COMMDLG DIALOGEX 6,5,222,175 +FONT 8, "MS Shell Dlg" +STYLE 0x10C80080 +EXSTYLE 0x00000001 +BEGIN + CONTROL "",IDC_GRP1,"Button",0x50000007,6,5,210,146,0x00000000 + CONTROL "OK",IDC_OKBTN,"Button",0x50010000,98,156,56,13,0x00000000 + CONTROL "Avbryt",IDC_CANCELBTN,"Button",0x50010000,158,156,56,13,0x00000000 + CONTROL "Baud rate:",IDC_STC1,"Static",0x50000000,24,31,42,9,0x00000000 + CONTROL "Byte stшrrelse:",IDC_STC2,"Static",0x50000000,24,53,42,9,0x00000000 + CONTROL "Parity:",IDC_STC3,"Static",0x50000000,24,73,42,9,0x00000000 + CONTROL "Stop bits:",IDC_STC4,"Static",0x50000000,24,96,42,9,0x00000000 + CONTROL "Flow kontroll:",IDC_STC5,"Static",0x50000000,24,120,42,9,0x00000000 + CONTROL "",IDC_BAUDRATE,"ComboBox",0x50210003,98,29,100,50,0x00000000 + CONTROL "",IDC_BYTESIZE,"ComboBox",0x50210003,98,49,100,50,0x00000000 + CONTROL "",IDC_PARITY,"ComboBox",0x50210003,98,72,100,50,0x00000000 + CONTROL "",IDC_STOPBITS,"ComboBox",0x50210003,98,94,100,50,0x00000000 + CONTROL "",IDC_FLOW,"ComboBox",0x50210003,98,116,100,50,0x00000000 +END + diff --git a/reactos/dll/win32/serialui/serialui.def b/reactos/dll/win32/serialui/serialui.def deleted file mode 100644 index 79883898b7b..00000000000 --- a/reactos/dll/win32/serialui/serialui.def +++ /dev/null @@ -1,10 +0,0 @@ -LIBRARY serialui.dll - -EXPORTS -drvCommConfigDialogW -drvCommConfigDialogA -drvSetDefaultCommConfigW -drvSetDefaultCommConfigA -drvGetDefaultCommConfigW -drvGetDefaultCommConfigA - diff --git a/reactos/dll/win32/serialui/serialui.rbuild b/reactos/dll/win32/serialui/serialui.rbuild index 9099b0a2a6a..5d09b18436c 100644 --- a/reactos/dll/win32/serialui/serialui.rbuild +++ b/reactos/dll/win32/serialui/serialui.rbuild @@ -1,9 +1,10 @@ - + . kernel32 user32 shlwapi serialui.c serialui.rc + serialui.spec diff --git a/reactos/dll/win32/serialui/serialui.rc b/reactos/dll/win32/serialui/serialui.rc index 97fd401e8c1..b015c0af101 100644 --- a/reactos/dll/win32/serialui/serialui.rc +++ b/reactos/dll/win32/serialui/serialui.rc @@ -17,6 +17,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/fr-FR.rc" #include "lang/id-ID.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/uk-UA.rc" diff --git a/reactos/dll/win32/serialui/serialui.spec b/reactos/dll/win32/serialui/serialui.spec new file mode 100644 index 00000000000..9f806ac9713 --- /dev/null +++ b/reactos/dll/win32/serialui/serialui.spec @@ -0,0 +1,6 @@ +@ stdcall drvCommConfigDialogA(str ptr ptr) +@ stdcall drvCommConfigDialogW(wstr ptr ptr) +@ stdcall drvSetDefaultCommConfigA(str ptr long) +@ stdcall drvSetDefaultCommConfigW(wstr ptr long) +@ stdcall drvGetDefaultCommConfigA(str ptr ptr) +@ stdcall drvGetDefaultCommConfigW(wstr ptr ptr) diff --git a/reactos/dll/win32/setupapi/lang/nb-NO.rc b/reactos/dll/win32/setupapi/lang/no-NO.rc similarity index 83% rename from reactos/dll/win32/setupapi/lang/nb-NO.rc rename to reactos/dll/win32/setupapi/lang/no-NO.rc index 889e40a555b..cfb1091b657 100644 --- a/reactos/dll/win32/setupapi/lang/nb-NO.rc +++ b/reactos/dll/win32/setupapi/lang/no-NO.rc @@ -25,7 +25,7 @@ STYLE DS_MODALFRAME | DS_SHELLFONT | WS_POPUP | WS_VISIBLE | WS_CAPTION CAPTION "Kopierer filer . . ." FONT 8, "MS Shell Dlg" BEGIN - PUSHBUTTON "Cancel", IDCANCEL, 79, 84, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP + PUSHBUTTON "Avbryt", IDCANCEL, 79, 84, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP LTEXT "Kilde:", -1, 7, 7, 77, 11, WS_CHILD | WS_VISIBLE | WS_GROUP LTEXT "", SOURCESTRORD, 7, 18, 194, 11, WS_CHILD | WS_VISIBLE | WS_GROUP LTEXT "Mеl:", -1, 7, 30, 77, 11, WS_CHILD | WS_VISIBLE | WS_GROUP @@ -35,7 +35,7 @@ END STRINGTABLE DISCARDABLE BEGIN - IDS_QUERY_REBOOT_TEXT "Your computer needs to be rebooted to finish installation. Do you want to proceed?" - IDS_QUERY_REBOOT_CAPTION "Reboot" - IDS_INF_FILE "Setup Information" + IDS_QUERY_REBOOT_TEXT "Din datamaskin trenger е startes pе nytt for е fullfшre installasjonen. Vil du starte pе nytt?" + IDS_QUERY_REBOOT_CAPTION "Start pе nytt" + IDS_INF_FILE "Installerings informasjon" END diff --git a/reactos/dll/win32/setupapi/setupapi.rc b/reactos/dll/win32/setupapi/setupapi.rc index 3dc453b4ab6..f6328364f8a 100644 --- a/reactos/dll/win32/setupapi/setupapi.rc +++ b/reactos/dll/win32/setupapi/setupapi.rc @@ -37,7 +37,7 @@ #include "lang/ja-JP.rc" #include "lang/ko-KR.rc" #include "lang/nl-NL.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" #include "lang/ru-RU.rc" diff --git a/reactos/dll/win32/shell32/classes.c b/reactos/dll/win32/shell32/classes.c index 7d0332aa0f0..9b85d4efa2e 100644 --- a/reactos/dll/win32/shell32/classes.c +++ b/reactos/dll/win32/shell32/classes.c @@ -386,6 +386,11 @@ BOOL HCR_GetClassNameW(REFIID riid, LPWSTR szDest, DWORD len) if(LoadStringW(shell32_hInstance, IDS_CONTROLPANEL, szDest, buflen)) ret = TRUE; } + else if (IsEqualIID(riid, &CLSID_AdminFolderShortcut)) + { + if(LoadStringW(shell32_hInstance, IDS_ADMINISTRATIVETOOLS, szDest, buflen)) + ret = TRUE; + } } TRACE("-- %s\n", debugstr_w(szDest)); diff --git a/reactos/dll/win32/shell32/cpanelfolder.c b/reactos/dll/win32/shell32/cpanelfolder.c index a5cb0328d85..36aadb03a06 100644 --- a/reactos/dll/win32/shell32/cpanelfolder.c +++ b/reactos/dll/win32/shell32/cpanelfolder.c @@ -18,7 +18,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" +#include "wine/config.h" #include "wine/port.h" #include @@ -63,24 +63,33 @@ typedef struct { const IPersistFolder2Vtbl *lpVtblPersistFolder2; const IShellExecuteHookWVtbl *lpVtblShellExecuteHookW; const IShellExecuteHookAVtbl *lpVtblShellExecuteHookA; - + const IContextMenu2Vtbl *lpVtblContextMenu; IUnknown *pUnkOuter; /* used for aggregation */ /* both paths are parsible from the desktop */ LPITEMIDLIST pidlRoot; /* absolute pidl */ int dwAttributes; /* attributes returned by GetAttributesOf FIXME: use it */ + LPCITEMIDLIST *apidl; + UINT cidl; } ICPanelImpl; static const IShellFolder2Vtbl vt_ShellFolder2; static const IPersistFolder2Vtbl vt_PersistFolder2; static const IShellExecuteHookWVtbl vt_ShellExecuteHookW; static const IShellExecuteHookAVtbl vt_ShellExecuteHookA; +static const IContextMenu2Vtbl vt_ContextMenu; static inline ICPanelImpl *impl_from_IPersistFolder2( IPersistFolder2 *iface ) { return (ICPanelImpl *)((char*)iface - FIELD_OFFSET(ICPanelImpl, lpVtblPersistFolder2)); } +static inline ICPanelImpl *impl_from_IContextMenu( IContextMenu2 *iface ) +{ + return (ICPanelImpl *)((char*)iface - FIELD_OFFSET(ICPanelImpl, lpVtblContextMenu)); +} + + static inline ICPanelImpl *impl_from_IShellExecuteHookW( IShellExecuteHookW *iface ) { return (ICPanelImpl *)((char*)iface - FIELD_OFFSET(ICPanelImpl, lpVtblShellExecuteHookW)); @@ -105,6 +114,7 @@ static inline ICPanelImpl *impl_from_IShellExecuteHookA( IShellExecuteHookA *ifa #define _IShellExecuteHookW_(This) (IShellExecuteHookW*)&(This->lpVtblShellExecuteHookW) #define _IShellExecuteHookA_(This) (IShellExecuteHookA*)&(This->lpVtblShellExecuteHookA) + /*********************************************************************** * IShellFolder [ControlPanel] implementation */ @@ -135,10 +145,13 @@ HRESULT WINAPI IControlPanel_Constructor(IUnknown* pUnkOuter, REFIID riid, LPVOI return E_OUTOFMEMORY; sf->ref = 0; + sf->apidl = NULL; + sf->cidl = 0; sf->lpVtbl = &vt_ShellFolder2; sf->lpVtblPersistFolder2 = &vt_PersistFolder2; sf->lpVtblShellExecuteHookW = &vt_ShellExecuteHookW; sf->lpVtblShellExecuteHookA = &vt_ShellExecuteHookA; + sf->lpVtblContextMenu = &vt_ContextMenu; sf->pidlRoot = _ILCreateControlPanel(); /* my qualified pidl */ sf->pUnkOuter = pUnkOuter ? pUnkOuter : _IUnknown_ (sf); @@ -611,7 +624,10 @@ ISF_ControlPanel_fnGetUIObjectOf(IShellFolder2 * iface, *ppvOut = NULL; if (IsEqualIID(riid, &IID_IContextMenu) &&(cidl >= 1)) { - hr = CDefFolderMenu_Create2(This->pidlRoot, hwndOwner, cidl, apidl, (IShellFolder*)iface, NULL, 0, NULL, (IContextMenu**)&pObj); + pObj = (IUnknown*)(&This->lpVtblContextMenu); + This->apidl = apidl; + This->cidl = cidl; + IUnknown_AddRef(pObj); } else if (IsEqualIID(riid, &IID_IDataObject) &&(cidl >= 1)) { pObj = (LPUNKNOWN) IDataObject_Constructor(hwndOwner, This->pidlRoot, apidl, cidl); hr = S_OK; @@ -968,6 +984,45 @@ static ULONG STDMETHODCALLTYPE IShellExecuteHookW_fnRelease(IShellExecuteHookW* return IUnknown_Release(This->pUnkOuter); } +HRESULT +ExecuteAppletFromCLSID(LPOLESTR pOleStr) +{ + WCHAR szCmd[MAX_PATH]; + WCHAR szExpCmd[MAX_PATH]; + PROCESS_INFORMATION pi; + STARTUPINFOW si; + WCHAR szBuffer[90] = { 'C', 'L', 'S', 'I', 'D', '\\', 0 }; + DWORD dwType, dwSize; + + wcscpy(&szBuffer[6], pOleStr); + wcscat(szBuffer, L"\\shell\\open\\command"); + + dwSize = sizeof(szCmd); + if (RegGetValueW(HKEY_CLASSES_ROOT, szBuffer, NULL, RRF_RT_REG_SZ, &dwType, (PVOID)szCmd, &dwSize) != ERROR_SUCCESS) + { + ERR("RegGetValueW failed with %u\n", GetLastError()); + return E_FAIL; + } + +#if 0 + if (dwType != RRF_RT_REG_SZ && dwType != RRF_RT_REG_EXPAND_SZ) + return E_FAIL; +#endif + + if (!ExpandEnvironmentStringsW(szCmd, szExpCmd, sizeof(szExpCmd)/sizeof(WCHAR))) + return E_FAIL; + + ZeroMemory(&si, sizeof(si)); + si.cb = sizeof(si); + if (!CreateProcessW(NULL, szExpCmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) + return E_FAIL; + + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + return S_OK; +} + + static HRESULT WINAPI IShellExecuteHookW_fnExecute(IShellExecuteHookW* iface, LPSHELLEXECUTEINFOW psei) { static const WCHAR wCplopen[] = {'c','p','l','o','p','e','n','\0'}; @@ -978,18 +1033,33 @@ static HRESULT WINAPI IShellExecuteHookW_fnExecute(IShellExecuteHookW* iface, LP WCHAR path[MAX_PATH]; WCHAR params[MAX_PATH]; BOOL ret; + HRESULT hr; int l; TRACE("(%p)->execute(%p)\n", This, psei); if (!psei) - return E_INVALIDARG; + return E_INVALIDARG; pcpanel = _ILGetCPanelPointer(ILFindLastID(psei->lpIDList)); if (!pcpanel) - return E_INVALIDARG; + { + LPOLESTR pOleStr; + IID * iid = _ILGetGUIDPointer(ILFindLastID(psei->lpIDList)); + if (!iid) + return E_INVALIDARG; + if (StringFromCLSID(iid, &pOleStr) == S_OK) + { + + hr = ExecuteAppletFromCLSID(pOleStr); + CoTaskMemFree(pOleStr); + return hr; + } + + return E_INVALIDARG; + } path[0] = '\"'; /* Return value from MultiByteToWideChar includes terminating NUL, which * compensates for the starting double quote we just put in */ @@ -1009,9 +1079,9 @@ static HRESULT WINAPI IShellExecuteHookW_fnExecute(IShellExecuteHookW* iface, LP ret = ShellExecuteExW(&sei_tmp); if (ret) - return S_OK; + return S_OK; else - return S_FALSE; + return S_FALSE; } static const IShellExecuteHookWVtbl vt_ShellExecuteHookW = @@ -1100,3 +1170,230 @@ static const IShellExecuteHookAVtbl vt_ShellExecuteHookA = IShellExecuteHookA_fnRelease, IShellExecuteHookA_fnExecute }; + +/************************************************************************** +* IContextMenu2 Implementation +*/ + +/************************************************************************ + * ICPanel_IContextMenu_QueryInterface + */ +static HRESULT WINAPI ICPanel_IContextMenu2_QueryInterface(IContextMenu2 * iface, REFIID iid, LPVOID * ppvObject) +{ + ICPanelImpl *This = impl_from_IContextMenu(iface); + + TRACE("(%p)\n", This); + + return IUnknown_QueryInterface(_IUnknown_(This), iid, ppvObject); +} + +/************************************************************************ + * ICPanel_IContextMenu_AddRef + */ +static ULONG WINAPI ICPanel_IContextMenu2_AddRef(IContextMenu2 * iface) +{ + ICPanelImpl *This = impl_from_IContextMenu(iface); + + TRACE("(%p)->(count=%u)\n", This, This->ref); + + return IUnknown_AddRef(_IUnknown_(This)); +} + +/************************************************************************ + * ICPanel_IContextMenu_Release + */ +static ULONG WINAPI ICPanel_IContextMenu2_Release(IContextMenu2 * iface) +{ + ICPanelImpl *This = impl_from_IContextMenu(iface); + + TRACE("(%p)->(count=%u)\n", This, This->ref); + + return IUnknown_Release(_IUnknown_(This)); +} + +/************************************************************************** +* ICPanel_IContextMenu_QueryContextMenu() +*/ +static HRESULT WINAPI ICPanel_IContextMenu2_QueryContextMenu( + IContextMenu2 *iface, + HMENU hMenu, + UINT indexMenu, + UINT idCmdFirst, + UINT idCmdLast, + UINT uFlags) +{ + char szBuffer[30] = {0}; + ULONG Count = 1; + + ICPanelImpl *This = impl_from_IContextMenu(iface); + + TRACE("(%p)->(hmenu=%p indexmenu=%x cmdfirst=%x cmdlast=%x flags=%x )\n", + This, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags); + + if (LoadStringA(shell32_hInstance, IDS_OPEN, szBuffer, sizeof(szBuffer)/sizeof(char))) + { + szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_DEFAULT); + Count++; + } + + if (LoadStringA(shell32_hInstance, IDS_CREATELINK, szBuffer, sizeof(szBuffer)/sizeof(char))) + { + if (Count) + { + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_SEPARATOR, NULL, MFS_ENABLED); + } + szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; + + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_ENABLED); + Count++; + } + return MAKE_HRESULT(SEVERITY_SUCCESS, 0, Count); +} + + +/************************************************************************** +* ICPanel_IContextMenu_InvokeCommand() +*/ +static HRESULT WINAPI ICPanel_IContextMenu2_InvokeCommand( + IContextMenu2 *iface, + LPCMINVOKECOMMANDINFO lpcmi) +{ + SHELLEXECUTEINFOW sei; + WCHAR szPath[MAX_PATH]; + char szTarget[MAX_PATH]; + STRRET strret; + WCHAR* pszPath; + INT Length, cLength; + PIDLCPanelStruct *pcpanel; + IPersistFile * ppf; + IShellLinkA * isl; + ICPanelImpl *This = impl_from_IContextMenu(iface); + + TRACE("(%p)->(invcom=%p verb=%p wnd=%p)\n",This,lpcmi,lpcmi->lpVerb, lpcmi->hwnd); + + if (lpcmi->lpVerb == MAKEINTRESOURCE(1)) + { + ZeroMemory(&sei, sizeof(sei)); + sei.cbSize = sizeof(sei); + sei.fMask = SEE_MASK_INVOKEIDLIST; + sei.lpIDList = ILCombine(This->pidlRoot, This->apidl[0]); + sei.hwnd = lpcmi->hwnd; + sei.nShow = SW_SHOWNORMAL; + sei.lpVerb = L"open"; + ShellExecuteExW(&sei); + if (sei.hInstApp <= (HINSTANCE)32) + return E_FAIL; + } + else if (lpcmi->lpVerb == MAKEINTRESOURCE(2)) + { + if (!SHGetSpecialFolderPathW(NULL, szPath, CSIDL_DESKTOPDIRECTORY, FALSE)) + return E_FAIL; + + pszPath = PathAddBackslashW(szPath); + if (!pszPath) + return E_FAIL; + + if (IShellFolder_GetDisplayNameOf((IShellFolder*)This, This->apidl[0], SHGDN_FORPARSING, &strret) != S_OK) + return E_FAIL; + + Length = MAX_PATH - (pszPath - szPath); + cLength = strlen(strret.u.cStr); + if (Length < cLength + 5) + { + FIXME("\n"); + return E_FAIL; + } + + if (MultiByteToWideChar(CP_ACP, 0, strret.u.cStr, cLength +1, pszPath, Length)) + { + pszPath += cLength; + Length -= cLength; + } + + if (Length > 10) + { + wcscpy(pszPath, L" - "); + cLength = LoadStringW(shell32_hInstance, IDS_LNK_FILE, &pszPath[3], Length -4) + 3; + if (cLength + 5 > Length) + cLength = Length - 5; + Length -= cLength; + pszPath += cLength; + } + wcscpy(pszPath, L".lnk"); + + pcpanel = _ILGetCPanelPointer(ILFindLastID(This->apidl[0])); + if (pcpanel) + { + strncpy(szTarget, pcpanel->szName, MAX_PATH); + } + else + { + FIXME("\n"); + return E_FAIL; + } + if (SUCCEEDED(IShellLink_Constructor(NULL, &IID_IShellLinkA, (LPVOID*)&isl))) + { + IShellLinkA_SetPath(isl, szTarget); + if (SUCCEEDED(IShellLinkA_QueryInterface(isl, &IID_IPersistFile, (LPVOID*)&ppf))) + { + IPersistFile_Save(ppf, szPath, TRUE); + IPersistFile_Release(ppf); + } + IShellLinkA_Release(isl); + } + return NOERROR; + } + return S_OK; +} + +/************************************************************************** + * ICPanel_IContextMenu_GetCommandString() + * + */ +static HRESULT WINAPI ICPanel_IContextMenu2_GetCommandString( + IContextMenu2 *iface, + UINT_PTR idCommand, + UINT uFlags, + UINT* lpReserved, + LPSTR lpszName, + UINT uMaxNameLen) +{ + ICPanelImpl *This = impl_from_IContextMenu(iface); + + TRACE("(%p)->(idcom=%lx flags=%x %p name=%p len=%x)\n",This, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen); + + + FIXME("unknown command string\n"); + return E_FAIL; +} + + + +/************************************************************************** +* ICPanel_IContextMenu_HandleMenuMsg() +*/ +static HRESULT WINAPI ICPanel_IContextMenu2_HandleMenuMsg( + IContextMenu2 *iface, + UINT uMsg, + WPARAM wParam, + LPARAM lParam) +{ + ICPanelImpl *This = impl_from_IContextMenu(iface); + + TRACE("ICPanel_IContextMenu_HandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n",This, uMsg, wParam, lParam); + + return E_NOTIMPL; +} + +static const IContextMenu2Vtbl vt_ContextMenu = +{ + ICPanel_IContextMenu2_QueryInterface, + ICPanel_IContextMenu2_AddRef, + ICPanel_IContextMenu2_Release, + ICPanel_IContextMenu2_QueryContextMenu, + ICPanel_IContextMenu2_InvokeCommand, + ICPanel_IContextMenu2_GetCommandString, + ICPanel_IContextMenu2_HandleMenuMsg +}; + diff --git a/reactos/dll/win32/shell32/desktop.c b/reactos/dll/win32/shell32/desktop.c new file mode 100644 index 00000000000..513327db164 --- /dev/null +++ b/reactos/dll/win32/shell32/desktop.c @@ -0,0 +1,782 @@ +/* + * Shell Desktop + * + * Copyright 2008 Thomas Bluemel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#define COBJMACROS +#define NONAMELESSUNION +#define NONAMELESSSTRUCT + +#include + +#include "windef.h" +#include "winbase.h" +#include "wingdi.h" +#include "winnls.h" +#include "winuser.h" +#include "shellapi.h" +#include "shlobj.h" +#include "undocshell.h" +#include "shell32_main.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(desktop); + +#define SHDESK_TAG 0x4b534544 + +static const WCHAR szProgmanClassName[] = {'P','r','o','g','m','a','n'}; +static const WCHAR szProgmanWindowName[] = { + 'P','r','o','g','r','a','m',' ','M','a','n','a','g','e','r' +}; + +static const IShellBrowserVtbl SHDESK_Vtbl; +static const ICommDlgBrowserVtbl SHDESK_ICommDlgBrowser_Vtbl; +static const IServiceProviderVtbl SHDESK_IServiceProvider_Vtbl; + +typedef struct _SHDESK +{ + DWORD Tag; + const IShellBrowserVtbl *lpVtbl; + const ICommDlgBrowserVtbl *lpVtblCommDlgBrowser; + const IServiceProviderVtbl *lpVtblServiceProvider; + LONG Ref; + HWND hWnd; + HWND hWndShellView; + HWND hWndDesktopListView; + IShellDesktop *ShellDesk; + IShellView *DesktopView; + IShellBrowser *DefaultShellBrowser; + LPITEMIDLIST pidlDesktopDirectory; + LPITEMIDLIST pidlDesktop; +} SHDESK, *PSHDESK; + +static IUnknown * +IUnknown_from_impl(SHDESK *This) +{ + return (IUnknown *)&This->lpVtbl; +} + +static IShellBrowser * +IShellBrowser_from_impl(SHDESK *This) +{ + return (IShellBrowser *)&This->lpVtbl; +} + +static IOleWindow * +IOleWindow_from_impl(SHDESK *This) +{ + return (IOleWindow *)&This->lpVtbl; +} + +static ICommDlgBrowser * +ICommDlgBrowser_from_impl(SHDESK *This) +{ + return (ICommDlgBrowser *)&This->lpVtblCommDlgBrowser; +} + +static IServiceProvider * +IServiceProvider_from_impl(SHDESK *This) +{ + return (IServiceProvider *)&This->lpVtblServiceProvider; +} + +static SHDESK * +impl_from_IShellBrowser(IShellBrowser *iface) +{ + return (SHDESK *)((ULONG_PTR)iface - FIELD_OFFSET(SHDESK, lpVtbl)); +} + +static SHDESK * +impl_from_ICommDlgBrowser(ICommDlgBrowser *iface) +{ + return (SHDESK *)((ULONG_PTR)iface - FIELD_OFFSET(SHDESK, lpVtblCommDlgBrowser)); +} + +static SHDESK * +impl_from_IServiceProvider(IServiceProvider *iface) +{ + return (SHDESK *)((ULONG_PTR)iface - FIELD_OFFSET(SHDESK, lpVtblServiceProvider)); +} + +static void +SHDESK_Free(SHDESK *This) +{ + if (This->ShellDesk != NULL) + IShellDesktop_Release(This->ShellDesk); + + if (This->DesktopView != NULL) + { + if (This->hWndShellView != NULL) + IShellView_DestroyViewWindow(This->DesktopView); + + IShellView_Release(This->DesktopView); + This->DesktopView = NULL; + This->hWndShellView = NULL; + This->hWndDesktopListView = NULL; + } + + if (This->pidlDesktopDirectory != NULL) + { + ILFree(This->pidlDesktopDirectory); + This->pidlDesktopDirectory = NULL; + } + + if (This->pidlDesktop != NULL) + { + ILFree(This->pidlDesktop); + This->pidlDesktop = NULL; + } + + ZeroMemory(This, sizeof(SHDESK)); + LocalFree((HLOCAL)This); +} + +static ULONG STDMETHODCALLTYPE +SHDESK_Release(IShellBrowser *iface) +{ + SHDESK *This = impl_from_IShellBrowser(iface); + ULONG Ret; + + Ret = InterlockedDecrement(&This->Ref); + if (Ret == 0) + SHDESK_Free(This); + + return Ret; +} + +static ULONG STDMETHODCALLTYPE +SHDESK_AddRef(IShellBrowser *iface) +{ + SHDESK *This = impl_from_IShellBrowser(iface); + + return InterlockedIncrement(&This->Ref); +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_QueryInterface(IShellBrowser *iface, REFIID riid, LPVOID *ppvObj) +{ + SHDESK *This; + + if (ppvObj == NULL) + return E_POINTER; + + This = impl_from_IShellBrowser(iface); + + if (IsEqualIID(riid, &IID_IUnknown)) + { + *ppvObj = IUnknown_from_impl(This); + } + else if (This->DefaultShellBrowser != NULL) + { + return IShellBrowser_QueryInterface(This->DefaultShellBrowser, riid, ppvObj); + } + else if (IsEqualIID(riid, &IID_IOleWindow)) + { + *ppvObj = IOleWindow_from_impl(This); + } + else if (IsEqualIID(riid, &IID_IShellBrowser)) + { + *ppvObj = IShellBrowser_from_impl(This); + } + else if (IsEqualIID(riid, &IID_ICommDlgBrowser)) + { + *ppvObj = ICommDlgBrowser_from_impl(This); + } + else if (IsEqualIID(riid, &IID_IServiceProvider)) + { + *ppvObj = IServiceProvider_from_impl(This); + } + else + { + *ppvObj = NULL; + return E_NOINTERFACE; + } + + SHDESK_AddRef(iface); + return S_OK; +} + +static PSHDESK +SHDESK_Create(HWND hWnd, LPCREATESTRUCT lpCreateStruct) +{ + IShellFolder *psfDesktopFolder; + IShellDesktop *ShellDesk; + CSFV csfv; + SHDESK *This; + HRESULT hRet; + + ShellDesk = (IShellDesktop *)lpCreateStruct->lpCreateParams; + if (ShellDesk == NULL) + { + WARN("No IShellDesk interface provided!"); + return NULL; + } + + This = (PSHDESK)LocalAlloc(LMEM_FIXED, sizeof(SHDESK)); + if (This == NULL) + return NULL; + + ZeroMemory(This, sizeof(SHDESK)); + This->Tag = SHDESK_TAG; + This->lpVtbl = &SHDESK_Vtbl; + This->lpVtblCommDlgBrowser = &SHDESK_ICommDlgBrowser_Vtbl; + This->lpVtblServiceProvider = &SHDESK_IServiceProvider_Vtbl; + This->Ref = 1; + This->hWnd = hWnd; + This->ShellDesk = ShellDesk; + IShellDesktop_AddRef(ShellDesk); + + This->pidlDesktopDirectory = SHCloneSpecialIDList(This->hWnd, CSIDL_DESKTOPDIRECTORY, FALSE); + hRet = SHGetSpecialFolderLocation(This->hWnd, CSIDL_DESKTOP, &This->pidlDesktop); + if (!SUCCEEDED(hRet)) + goto Fail; + + hRet = SHGetDesktopFolder(&psfDesktopFolder); + if (!SUCCEEDED(hRet)) + goto Fail; + + ZeroMemory(&csfv, sizeof(csfv)); + csfv.cbSize = sizeof(csfv); + csfv.pshf = psfDesktopFolder; + csfv.psvOuter = NULL; + + hRet = SHCreateShellFolderViewEx(&csfv, &This->DesktopView); + IShellFolder_Release(psfDesktopFolder); + + if (!SUCCEEDED(hRet)) + { +Fail: + SHDESK_Release(IShellBrowser_from_impl(This)); + return NULL; + } + + return This; +} + +static BOOL +SHDESK_CreateDeskWnd(SHDESK *This) +{ + IShellBrowser *ShellBrowser; + FOLDERSETTINGS fs; + RECT rcClient; + HRESULT hRet; + + if (!GetClientRect(This->hWnd, + &rcClient)) + { + return FALSE; + } + + ShellBrowser = IShellBrowser_from_impl(This); + + fs.ViewMode = FVM_ICON; + fs.fFlags = FWF_DESKTOP | FWF_NOCLIENTEDGE | FWF_NOSCROLL | FWF_TRANSPARENT; + hRet = IShellView_CreateViewWindow(This->DesktopView, NULL, &fs, ShellBrowser, &rcClient, &This->hWndShellView); + if (!SUCCEEDED(hRet)) + return FALSE; + + return TRUE; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_GetWindow(IShellBrowser *iface, HWND *phwnd) +{ + SHDESK *This = impl_from_IShellBrowser(iface); + + if (This->hWnd != NULL) + { + *phwnd = This->hWnd; + return S_OK; + } + + *phwnd = NULL; + return E_UNEXPECTED; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_ContextSensitiveHelp(IShellBrowser *iface, BOOL fEnterMode) +{ + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_InsertMenusSB(IShellBrowser *iface, HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths) +{ + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_SetMenuSB(IShellBrowser *iface, HMENU hmenuShared, HOLEMENU holemenuRes, HWND hwndActiveObject) +{ + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_RemoveMenusSB(IShellBrowser *iface, HMENU hmenuShared) +{ + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_SetStatusTextSB(IShellBrowser *iface, LPCOLESTR lpszStatusText) +{ + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_EnableModelessSB(IShellBrowser *iface, BOOL fEnable) +{ + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_TranslateAcceleratorSB(IShellBrowser *iface, LPMSG lpmsg, WORD wID) +{ + return S_FALSE; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_BrowseObject(IShellBrowser *iface, LPCITEMIDLIST pidl, UINT wFlags) +{ + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_GetViewStateStream(IShellBrowser *iface, DWORD grfMode, IStream **ppStrm) +{ + return E_NOTIMPL; +} + +static HWND +DesktopGetWindowControl(IN SHDESK *This, + IN UINT id) +{ + switch (id) + { + case FCW_TOOLBAR: + case FCW_STATUS: + case FCW_TREE: + case FCW_PROGRESS: + return NULL; + + default: + return NULL; + } + +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_GetControlWindow(IShellBrowser *iface, UINT id, HWND *lphwnd) +{ + SHDESK *This = impl_from_IShellBrowser(iface); + HWND hWnd; + + hWnd = DesktopGetWindowControl(This, + id); + if (hWnd != NULL) + { + *lphwnd = hWnd; + return S_OK; + } + + *lphwnd = NULL; + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_SendControlMsg(IShellBrowser *iface, UINT id, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *pret) +{ + SHDESK *This = impl_from_IShellBrowser(iface); + HWND hWnd; + + if (pret == NULL) + return E_POINTER; + + hWnd = DesktopGetWindowControl(This, + id); + if (hWnd != NULL) + { + *pret = SendMessage(hWnd, + uMsg, + wParam, + lParam); + return S_OK; + } + + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_QueryActiveShellView(IShellBrowser *iface, IShellView **ppshv) +{ + IShellView *ActiveView; + SHDESK *This = impl_from_IShellBrowser(iface); + + ActiveView = This->DesktopView; + SHDESK_AddRef(iface); + *ppshv = ActiveView; + + return S_OK; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_OnViewWindowActive(IShellBrowser *iface, IShellView *ppshv) +{ + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_SetToolbarItems(IShellBrowser *iface, LPTBBUTTON lpButtons, UINT nButtons, UINT uFlags) +{ + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_ICommDlgBrowser_QueryInterface(ICommDlgBrowser *iface, REFIID riid, LPVOID *ppvObj) +{ + SHDESK *This = impl_from_ICommDlgBrowser(iface); + IShellBrowser *ShellBrowser = IShellBrowser_from_impl(This); + + return SHDESK_QueryInterface(ShellBrowser, riid, ppvObj); +} + +static ULONG STDMETHODCALLTYPE +SHDESK_ICommDlgBrowser_Release(ICommDlgBrowser *iface) +{ + SHDESK *This = impl_from_ICommDlgBrowser(iface); + IShellBrowser *ShellBrowser = IShellBrowser_from_impl(This); + + return SHDESK_Release(ShellBrowser); +} + +static ULONG STDMETHODCALLTYPE +SHDESK_ICommDlgBrowser_AddRef(ICommDlgBrowser *iface) +{ + SHDESK *This = impl_from_ICommDlgBrowser(iface); + IShellBrowser *ShellBrowser = IShellBrowser_from_impl(This); + + return SHDESK_AddRef(ShellBrowser); +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_ICommDlgBrowser_OnDefaultCommand(ICommDlgBrowser *iface, IShellView *ppshv) +{ + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_ICommDlgBrowser_OnStateChange(ICommDlgBrowser *iface, IShellView *ppshv, ULONG uChange) +{ + return S_OK; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_ICommDlgBrowser_IncludeObject(ICommDlgBrowser *iface, IShellView *ppshv, LPCITEMIDLIST pidl) +{ + return S_OK; +} + +static const ICommDlgBrowserVtbl SHDESK_ICommDlgBrowser_Vtbl = +{ + /* IUnknown */ + SHDESK_ICommDlgBrowser_QueryInterface, + SHDESK_ICommDlgBrowser_AddRef, + SHDESK_ICommDlgBrowser_Release, + /* ICommDlgBrowser */ + SHDESK_ICommDlgBrowser_OnDefaultCommand, + SHDESK_ICommDlgBrowser_OnStateChange, + SHDESK_ICommDlgBrowser_IncludeObject +}; + +static HRESULT STDMETHODCALLTYPE +SHDESK_IServiceProvider_QueryInterface(IServiceProvider *iface, REFIID riid, LPVOID *ppvObj) +{ + SHDESK *This = impl_from_IServiceProvider(iface); + IShellBrowser *ShellBrowser = IShellBrowser_from_impl(This); + + return SHDESK_QueryInterface(ShellBrowser, riid, ppvObj); +} + +static ULONG STDMETHODCALLTYPE +SHDESK_IServiceProvider_Release(IServiceProvider *iface) +{ + SHDESK *This = impl_from_IServiceProvider(iface); + IShellBrowser *ShellBrowser = IShellBrowser_from_impl(This); + + return SHDESK_Release(ShellBrowser); +} + +static ULONG STDMETHODCALLTYPE +SHDESK_IServiceProvider_AddRef(IServiceProvider *iface) +{ + SHDESK *This = impl_from_IServiceProvider(iface); + IShellBrowser *ShellBrowser = IShellBrowser_from_impl(This); + + return SHDESK_AddRef(ShellBrowser); +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_IServiceProvider_QueryService(IServiceProvider *iface, REFGUID guidService, REFIID riid, PVOID *ppv) +{ + /* FIXME - handle guidService */ + return SHDESK_IServiceProvider_QueryInterface(iface, riid, ppv); +} + +static const IServiceProviderVtbl SHDESK_IServiceProvider_Vtbl = +{ + /* IUnknown */ + SHDESK_IServiceProvider_QueryInterface, + SHDESK_IServiceProvider_AddRef, + SHDESK_IServiceProvider_Release, + /* IServiceProvider */ + SHDESK_IServiceProvider_QueryService +}; + +static BOOL +SHDESK_MessageLoop(SHDESK *This) +{ + MSG Msg; + BOOL bRet; + + while ((bRet = GetMessage(&Msg, NULL, 0, 0)) != 0) + { + if (bRet != -1) + { + TranslateMessage(&Msg); + DispatchMessage(&Msg); + } + } + + return TRUE; +} + +static LRESULT CALLBACK +ProgmanWindowProc(IN HWND hwnd, + IN UINT uMsg, + IN WPARAM wParam, + IN LPARAM lParam) +{ + SHDESK *This = NULL; + LRESULT Ret = FALSE; + + if (uMsg != WM_NCCREATE) + { + This = (SHDESK*)GetWindowLongPtrW(hwnd, + 0); + if (This == NULL) + goto DefMsgHandler; + } + + if (This != NULL || uMsg == WM_NCCREATE) + { + switch (uMsg) + { + case WM_ERASEBKGND: + PaintDesktop((HDC)wParam); + break; + + case WM_GETISHELLBROWSER: + Ret = (LRESULT)IShellBrowser_from_impl(This); + break; + + case WM_SIZE: + if (wParam == SIZE_MINIMIZED) + { + /* Hey, we're the desktop!!! */ + ShowWindow(hwnd, + SW_RESTORE); + } + else + { + RECT rcDesktop; + + rcDesktop.left = GetSystemMetrics(SM_XVIRTUALSCREEN); + rcDesktop.top = GetSystemMetrics(SM_YVIRTUALSCREEN); + rcDesktop.right = GetSystemMetrics(SM_CXVIRTUALSCREEN); + rcDesktop.bottom = GetSystemMetrics(SM_CYVIRTUALSCREEN); + + /* FIXME: Update work area */ + } + break; + + case WM_SYSCOLORCHANGE: + { + InvalidateRect(This->hWnd, + NULL, + TRUE); + + if (This->hWndShellView != NULL) + { + /* Forward the message */ + SendMessageW(This->hWndShellView, + WM_SYSCOLORCHANGE, + wParam, + lParam); + } + break; + } + + case WM_CREATE: + { + IShellDesktop_RegisterDesktopWindow(This->ShellDesk, + This->hWnd); + + if (!SHDESK_CreateDeskWnd(This)) + WARN("Could not create the desktop view control!\n"); + break; + } + + case WM_NCCREATE: + { + LPCREATESTRUCT CreateStruct = (LPCREATESTRUCT)lParam; + This = SHDESK_Create(hwnd, CreateStruct); + if (This == NULL) + { + WARN("Failed to create desktop structure\n"); + break; + } + + SetWindowLongPtrW(hwnd, + 0, + (LONG_PTR)This); + Ret = TRUE; + break; + } + + case WM_NCDESTROY: + { + SHDESK_Free(This); + break; + } + + default: +DefMsgHandler: + Ret = DefWindowProcW(hwnd, uMsg, wParam, lParam); + break; + } + } + + return Ret; +} + +static BOOL +RegisterProgmanWindowClass(VOID) +{ + WNDCLASSW wcProgman; + + wcProgman.style = CS_DBLCLKS; + wcProgman.lpfnWndProc = ProgmanWindowProc; + wcProgman.cbClsExtra = 0; + wcProgman.cbWndExtra = sizeof(PSHDESK); + wcProgman.hInstance = shell32_hInstance; + wcProgman.hIcon = NULL; + wcProgman.hCursor = LoadCursor(NULL, + IDC_ARROW); + wcProgman.hbrBackground = (HBRUSH)(COLOR_BACKGROUND + 1); + wcProgman.lpszMenuName = NULL; + wcProgman.lpszClassName = szProgmanClassName; + + return RegisterClassW(&wcProgman) != 0; +} + + +/************************************************************************* + * SHCreateDesktop [SHELL32.200] + * + */ +HANDLE WINAPI SHCreateDesktop(IShellDesktop *ShellDesk) +{ + HWND hWndDesk; + RECT rcDesk; + + if (ShellDesk == NULL) + { + SetLastError(ERROR_INVALID_PARAMETER); + return NULL; + } + + if (RegisterProgmanWindowClass() == 0) + { + WARN("Failed to register the Progman window class!\n"); + return NULL; + } + + rcDesk.left = GetSystemMetrics(SM_XVIRTUALSCREEN); + rcDesk.top = GetSystemMetrics(SM_YVIRTUALSCREEN); + rcDesk.right = rcDesk.left + GetSystemMetrics(SM_CXVIRTUALSCREEN); + rcDesk.bottom = rcDesk.top + GetSystemMetrics(SM_CYVIRTUALSCREEN); + + if (IsRectEmpty(&rcDesk)) + { + rcDesk.left = rcDesk.top = 0; + rcDesk.right = GetSystemMetrics(SM_CXSCREEN); + rcDesk.bottom = GetSystemMetrics(SM_CYSCREEN); + } + + hWndDesk = CreateWindowExW(0, szProgmanClassName, szProgmanWindowName, + WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, + rcDesk.left, rcDesk.top, rcDesk.right, rcDesk.bottom, + NULL, NULL, shell32_hInstance, (LPVOID)ShellDesk); + if (hWndDesk != NULL) + return (HANDLE)GetWindowLongPtr(hWndDesk, 0); + + return NULL; +} + +/************************************************************************* + * SHCreateDesktop [SHELL32.201] + * + */ +BOOL WINAPI SHDesktopMessageLoop(HANDLE hDesktop) +{ + PSHDESK Desk = (PSHDESK)hDesktop; + + if (Desk == NULL || Desk->Tag != SHDESK_TAG) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + return SHDESK_MessageLoop(Desk); +} + +static const IShellBrowserVtbl SHDESK_Vtbl = +{ + /* IUnknown */ + SHDESK_QueryInterface, + SHDESK_AddRef, + SHDESK_Release, + /* IOleWindow */ + SHDESK_GetWindow, + SHDESK_ContextSensitiveHelp, + /* IShellBrowser */ + SHDESK_InsertMenusSB, + SHDESK_SetMenuSB, + SHDESK_RemoveMenusSB, + SHDESK_SetStatusTextSB, + SHDESK_EnableModelessSB, + SHDESK_TranslateAcceleratorSB, + SHDESK_BrowseObject, + SHDESK_GetViewStateStream, + SHDESK_GetControlWindow, + SHDESK_SendControlMsg, + SHDESK_QueryActiveShellView, + SHDESK_OnViewWindowActive, + SHDESK_SetToolbarItems +}; diff --git a/reactos/dll/win32/shell32/drive.c b/reactos/dll/win32/shell32/drive.c index 2956c270818..5bc61a30268 100644 --- a/reactos/dll/win32/shell32/drive.c +++ b/reactos/dll/win32/shell32/drive.c @@ -26,29 +26,27 @@ #define ConvertUlongToLargeInteger RtlConvertUlongToLargeInteger #define LargeIntegerSubtract RtlLargeIntegerSubtract #define MAX_PROPERTY_SHEET_PAGE 32 + +#define WIN32_NO_STATUS +#define NTOS_MODE_USER +#define UNICODE +#define _UNICODE +#include +#include + #include #include #include -#include "winerror.h" -#include "windef.h" -#include "winbase.h" -#include "winreg.h" -#include "wingdi.h" -#include "winuser.h" -#include "commdlg.h" #include "wine/debug.h" - -#include "shellapi.h" -#include -#include "shlobj.h" -#include "shell32_main.h" #include "shresdef.h" -#include "undocshell.h" + +#include +#include #include #include #include -#include #include +#include WINE_DEFAULT_DEBUG_CHANNEL(shell); @@ -59,14 +57,64 @@ typedef enum HWPD_MAX = HWPD_LARGELIST } HWPAGE_DISPLAYMODE, *PHWPAGE_DISPLAYMODE; +typedef +BOOLEAN +(NTAPI *INITIALIZE_FMIFS)( + IN PVOID hinstDll, + IN DWORD dwReason, + IN PVOID reserved +); +typedef +BOOLEAN +(NTAPI *QUERY_AVAILABLEFSFORMAT)( + IN DWORD Index, + IN OUT PWCHAR FileSystem, + OUT UCHAR* Major, + OUT UCHAR* Minor, + OUT BOOLEAN* LastestVersion +); +typedef +BOOLEAN +(NTAPI *ENABLEVOLUMECOMPRESSION)( + IN PWCHAR DriveRoot, + IN USHORT Compression +); + +typedef +VOID +(NTAPI *FORMAT_EX)( + IN PWCHAR DriveRoot, + IN FMIFS_MEDIA_FLAG MediaFlag, + IN PWCHAR Format, + IN PWCHAR Label, + IN BOOLEAN QuickFormat, + IN ULONG ClusterSize, + IN PFMIFSCALLBACK Callback +); + + +typedef struct +{ + WCHAR Drive; + UINT Options; + HMODULE hLibrary; + QUERY_AVAILABLEFSFORMAT QueryAvailableFileSystemFormat; + FORMAT_EX FormatEx; + ENABLEVOLUMECOMPRESSION EnableVolumeCompression; + UINT Result; +}FORMAT_DRIVE_CONTEXT, *PFORMAT_DRIVE_CONTEXT; + HWND WINAPI DeviceCreateHardwarePageEx(HWND hWndParent, LPGUID lpGuids, UINT uNumberOfGuids, HWPAGE_DISPLAYMODE DisplayMode); +HPROPSHEETPAGE SH_CreatePropertySheetPage(LPSTR resname, DLGPROC dlgproc, LPARAM lParam, LPWSTR szTitle); + #define DRIVE_PROPERTY_PAGES (3) +extern HINSTANCE shell32_hInstance; static LARGE_INTEGER @@ -201,11 +249,11 @@ InitializeGeneralDriveDialog(HWND hwndDlg, WCHAR * szDrive) Result = GetFreeBytesShare(TotalNumberOfFreeBytes, TotalNumberOfBytes); /* set free bytes percentage */ - sprintfW(szResult, L"%02d%%", Result.QuadPart); + swprintf(szResult, L"%02d%%", Result.QuadPart); SendDlgItemMessageW(hwndDlg, 14007, WM_SETTEXT, (WPARAM)0, (LPARAM)szResult); /* store used share amount */ Result = LargeIntegerSubtract(ConvertUlongToLargeInteger(100), Result); - sprintfW(szResult, L"%02d%%", Result.QuadPart); + swprintf(szResult, L"%02d%%", Result.QuadPart); SendDlgItemMessageW(hwndDlg, 14005, WM_SETTEXT, (WPARAM)0, (LPARAM)szResult); if (LoadStringW(shell32_hInstance, IDS_DRIVE_FIXED, szBuffer, sizeof(szBuffer) / sizeof(WCHAR))) SendDlgItemMessageW(hwndDlg, 14002, WM_SETTEXT, (WPARAM)0, (LPARAM)szBuffer); @@ -214,7 +262,7 @@ InitializeGeneralDriveDialog(HWND hwndDlg, WCHAR * szDrive) } /* set drive description */ SendDlgItemMessageW(hwndDlg, 14010, WM_GETTEXT, (WPARAM)50, (LPARAM)szFormat); - sprintfW(szBuffer, szFormat, szDrive); + swprintf(szBuffer, szFormat, szDrive); SendDlgItemMessageW(hwndDlg, 14010, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szBuffer); } @@ -493,3 +541,510 @@ SH_ShowDriveProperties(WCHAR * drive) else return TRUE; } + + + + + +VOID +InsertDefaultClusterSizeForFs(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) +{ + WCHAR szFs[100] = {0}; + WCHAR szDrive[4] = { L'C', ':', '\\', 0 }; + INT iSelIndex; + ULARGE_INTEGER FreeBytesAvailableUser, TotalNumberOfBytes; + DWORD ClusterSize; + LRESULT lIndex; + HWND hDlgCtrl; + + hDlgCtrl = GetDlgItem(hwndDlg, 28677); + iSelIndex = SendMessage(hDlgCtrl, CB_GETCURSEL, 0, 0); + if (iSelIndex == CB_ERR) + return; + + if (SendMessageW(hDlgCtrl, CB_GETLBTEXT, iSelIndex, (LPARAM)szFs) == CB_ERR) + return; + + szFs[(sizeof(szFs)/sizeof(WCHAR))-1] = L'\0'; + szDrive[0] = pContext->Drive + 'A'; + + if (!GetDiskFreeSpaceExW(szDrive, &FreeBytesAvailableUser, &TotalNumberOfBytes, NULL)) + return; + + if (!wcsicmp(szFs, L"FAT16") || + !wcsicmp(szFs, L"FAT")) //REACTOS HACK + { + if (TotalNumberOfBytes.QuadPart <= (16 * 1024 * 1024)) + ClusterSize = 2048; + else if (TotalNumberOfBytes.QuadPart <= (32 * 1024 * 1024)) + ClusterSize = 512; + else if (TotalNumberOfBytes.QuadPart <= (64 * 1024 * 1024)) + ClusterSize = 1024; + else if (TotalNumberOfBytes.QuadPart <= (128 * 1024 * 1024)) + ClusterSize = 2048; + else if (TotalNumberOfBytes.QuadPart <= (256 * 1024 * 1024)) + ClusterSize = 4096; + else if (TotalNumberOfBytes.QuadPart <= (512 * 1024 * 1024)) + ClusterSize = 8192; + else if (TotalNumberOfBytes.QuadPart <= (1024 * 1024 * 1024)) + ClusterSize = 16384; + else if (TotalNumberOfBytes.QuadPart <= (2048LL * 1024LL * 1024LL)) + ClusterSize = 32768; + else if (TotalNumberOfBytes.QuadPart <= (4096LL * 1024LL * 1024LL)) + ClusterSize = 8192; + else + { + TRACE("FAT16 is not supported on hdd larger than 4G current %lu\n", TotalNumberOfBytes.QuadPart); + SendMessageW(hDlgCtrl, CB_DELETESTRING, iSelIndex, 0); + return; + } + if (LoadStringW(shell32_hInstance, IDS_DEFAULT_CLUSTER_SIZE, szFs, sizeof(szFs)/sizeof(WCHAR))) + { + hDlgCtrl = GetDlgItem(hwndDlg, 28680); + szFs[(sizeof(szFs)/sizeof(WCHAR))-1] = L'\0'; + SendMessageW(hDlgCtrl, CB_RESETCONTENT, 0, 0); + lIndex = SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szFs); + if (lIndex != CB_ERR) + SendMessageW(hDlgCtrl, CB_SETITEMDATA, lIndex, (LPARAM)ClusterSize); + SendMessageW(hDlgCtrl, CB_SETCURSEL, 0, 0); + } + } + else if (!wcsicmp(szFs, L"FAT32")) + { + if (TotalNumberOfBytes.QuadPart <=(64 * 1024 * 1024)) + ClusterSize = 512; + else if (TotalNumberOfBytes.QuadPart <= (128 * 1024 * 1024)) + ClusterSize = 1024; + else if (TotalNumberOfBytes.QuadPart <= (256 * 1024 * 1024)) + ClusterSize = 2048; + else if (TotalNumberOfBytes.QuadPart <= (8192LL * 1024LL * 1024LL)) + ClusterSize = 2048; + else if (TotalNumberOfBytes.QuadPart <= (16384LL * 1024LL * 1024LL)) + ClusterSize = 8192; + else if (TotalNumberOfBytes.QuadPart <= (32768LL * 1024LL * 1024LL)) + ClusterSize = 16384; + else + { + TRACE("FAT32 is not supported on hdd larger than 32G current %lu\n", TotalNumberOfBytes.QuadPart); + SendMessageW(hDlgCtrl, CB_DELETESTRING, iSelIndex, 0); + return; + } + + if (LoadStringW(shell32_hInstance, IDS_DEFAULT_CLUSTER_SIZE, szFs, sizeof(szFs)/sizeof(WCHAR))) + { + hDlgCtrl = GetDlgItem(hwndDlg, 28680); + szFs[(sizeof(szFs)/sizeof(WCHAR))-1] = L'\0'; + SendMessageW(hDlgCtrl, CB_RESETCONTENT, 0, 0); + lIndex = SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szFs); + if (lIndex != CB_ERR) + SendMessageW(hDlgCtrl, CB_SETITEMDATA, lIndex, (LPARAM)ClusterSize); + SendMessageW(hDlgCtrl, CB_SETCURSEL, 0, 0); + } + } + else if (!wcsicmp(szFs, L"NTFS")) + { + if (TotalNumberOfBytes.QuadPart <=(512 * 1024 * 1024)) + ClusterSize = 512; + else if (TotalNumberOfBytes.QuadPart <= (1024 * 1024 * 1024)) + ClusterSize = 1024; + else if (TotalNumberOfBytes.QuadPart <= (2048LL * 1024LL * 1024LL)) + ClusterSize = 2048; + else + ClusterSize = 2048; + + hDlgCtrl = GetDlgItem(hwndDlg, 28680); + if (LoadStringW(shell32_hInstance, IDS_DEFAULT_CLUSTER_SIZE, szFs, sizeof(szFs)/sizeof(WCHAR))) + { + szFs[(sizeof(szFs)/sizeof(WCHAR))-1] = L'\0'; + SendMessageW(hDlgCtrl, CB_RESETCONTENT, 0, 0); + lIndex = SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szFs); + if (lIndex != CB_ERR) + SendMessageW(hDlgCtrl, CB_SETITEMDATA, lIndex, (LPARAM)ClusterSize); + SendMessageW(hDlgCtrl, CB_SETCURSEL, 0, 0); + } + ClusterSize = 512; + for (lIndex = 0; lIndex < 4; lIndex++) + { + TotalNumberOfBytes.QuadPart = ClusterSize; + if (StrFormatByteSizeW(TotalNumberOfBytes.QuadPart, szFs, sizeof(szFs)/sizeof(WCHAR))) + { + lIndex = SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szFs); + if (lIndex != CB_ERR) + SendMessageW(hDlgCtrl, CB_SETITEMDATA, lIndex, (LPARAM)ClusterSize); + } + ClusterSize *= 2; + } + } + else + { + FIXME("unknown fs\n"); + SendDlgItemMessageW(hwndDlg, 28680, CB_RESETCONTENT, iSelIndex, 0); + return; + } +} + +VOID +InitializeFormatDriveDlg(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) +{ + WCHAR szText[120]; + WCHAR szDrive[4] = { L'C', ':', '\\', 0 }; + WCHAR szFs[30] = {0}; + INT Length, TempLength; + DWORD dwSerial, dwMaxComp, dwFileSys; + ULARGE_INTEGER FreeBytesAvailableUser, TotalNumberOfBytes; + DWORD dwIndex, dwDefault; + UCHAR uMinor, uMajor; + BOOLEAN Latest; + HWND hDlgCtrl; + + Length = GetWindowTextW(hwndDlg, szText, sizeof(szText)/sizeof(WCHAR)); + szDrive[0] = pContext->Drive + L'A'; + if (GetVolumeInformationW(szDrive, &szText[Length+1], (sizeof(szText)/sizeof(WCHAR))- Length - 2, &dwSerial, &dwMaxComp, &dwFileSys, szFs, sizeof(szFs)/sizeof(WCHAR))) + { + szText[Length] = L' '; + szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0'; + TempLength = wcslen(&szText[Length+1]); + if (!TempLength) + { + /* load default volume label */ + TempLength = LoadStringW(shell32_hInstance, IDS_DRIVE_FIXED, &szText[Length+1], (sizeof(szText)/sizeof(WCHAR))- Length - 2); + } + else + { + /* set volume label */ + szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0'; + SendDlgItemMessageW(hwndDlg, 28679, WM_SETTEXT, 0, (LPARAM)&szText[Length+1]); + } + Length += TempLength + 1; + } + + if (Length + 4 < (sizeof(szText)/sizeof(WCHAR))) + { + szText[Length] = L' '; + szText[Length+1] = L'('; + szText[Length+2] = szDrive[0]; + szText[Length+3] = L')'; + Length +=4; + } + + if (Length < (sizeof(szText)/sizeof(WCHAR))) + szText[Length] = L'\0'; + else + szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0'; + + /* set window text */ + SetWindowTextW(hwndDlg, szText); + + if (GetDiskFreeSpaceExW(szDrive, &FreeBytesAvailableUser, &TotalNumberOfBytes, NULL)) + { + if (StrFormatByteSizeW(TotalNumberOfBytes.QuadPart, szText, sizeof(szText)/sizeof(WCHAR))) + { + /* add drive capacity */ + szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0'; + SendDlgItemMessageW(hwndDlg, 28673, CB_ADDSTRING, 0, (LPARAM)szText); + SendDlgItemMessageW(hwndDlg, 28673, CB_SETCURSEL, 0, (LPARAM)0); + } + } + + if (pContext->Options & SHFMT_OPT_FULL) + { + /* check quick format button */ + SendDlgItemMessageW(hwndDlg, 28674, BM_SETCHECK, BST_CHECKED, 0); + } + + /* enumerate all available filesystems */ + dwIndex = 0; + dwDefault = 0; + hDlgCtrl = GetDlgItem(hwndDlg, 28677); + + while(pContext->QueryAvailableFileSystemFormat(dwIndex, szText, &uMajor, &uMinor, &Latest)) + { + szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0'; + if (!wcsicmp(szText, szFs)) + dwDefault = dwIndex; + + SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szText); + dwIndex++; + } + + if (!dwIndex) + { + ERR("no filesystem providers\n"); + return; + } + + /* select default filesys */ + SendMessageW(hDlgCtrl, CB_SETCURSEL, dwDefault, 0); + /* setup cluster combo */ + InsertDefaultClusterSizeForFs(hwndDlg, pContext); + /* hide progress control */ + ShowWindow(GetDlgItem(hwndDlg, 28678), SW_HIDE); +} + +HWND FormatDrvDialog = NULL; +BOOLEAN bSuccess = FALSE; + + +BOOLEAN +NTAPI +FormatExCB( + IN CALLBACKCOMMAND Command, + IN ULONG SubAction, + IN PVOID ActionInfo) +{ + PDWORD Progress; + PBOOLEAN pSuccess; + switch(Command) + { + case PROGRESS: + Progress = (PDWORD)ActionInfo; + SendDlgItemMessageW(FormatDrvDialog, 28678, PBM_SETPOS, (WPARAM)*Progress, 0); + break; + case DONE: + pSuccess = (PBOOLEAN)ActionInfo; + bSuccess = (*pSuccess); + break; + + case VOLUMEINUSE: + case INSUFFICIENTRIGHTS: + case FSNOTSUPPORTED: + case CLUSTERSIZETOOSMALL: + bSuccess = FALSE; + FIXME("\n"); + break; + + default: + break; + } + + return TRUE; +} + + + + + +VOID +FormatDrive(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) +{ + WCHAR szDrive[4] = { L'C', ':', '\\', 0 }; + WCHAR szFileSys[40] = {0}; + WCHAR szLabel[40] = {0}; + INT iSelIndex; + UINT Length; + HWND hDlgCtrl; + BOOL QuickFormat; + DWORD ClusterSize; + + /* set volume path */ + szDrive[0] = pContext->Drive; + + /* get filesystem */ + hDlgCtrl = GetDlgItem(hwndDlg, 28677); + iSelIndex = SendMessageW(hDlgCtrl, CB_GETCURSEL, 0, 0); + if (iSelIndex == CB_ERR) + { + FIXME("\n"); + return; + } + Length = SendMessageW(hDlgCtrl, CB_GETLBTEXTLEN, iSelIndex, 0); + if (Length == CB_ERR || Length + 1> sizeof(szFileSys)/sizeof(WCHAR)) + { + FIXME("\n"); + return; + } + + /* retrieve the file system */ + SendMessageW(hDlgCtrl, CB_GETLBTEXT, iSelIndex, (LPARAM)szFileSys); + szFileSys[(sizeof(szFileSys)/sizeof(WCHAR))-1] = L'\0'; + + /* retrieve the volume label */ + hDlgCtrl = GetWindow(hwndDlg, 28679); + Length = SendMessageW(hDlgCtrl, WM_GETTEXTLENGTH, 0, 0); + if (Length + 1 > sizeof(szLabel)/sizeof(WCHAR)) + { + FIXME("\n"); + return; + } + SendMessageW(hDlgCtrl, WM_GETTEXT, sizeof(szLabel)/sizeof(WCHAR), (LPARAM)szLabel); + szLabel[(sizeof(szLabel)/sizeof(WCHAR))-1] = L'\0'; + + /* check for quickformat */ + if (SendDlgItemMessageW(hwndDlg, 28674, BM_GETCHECK, 0, 0) == BST_CHECKED) + QuickFormat = TRUE; + else + QuickFormat = FALSE; + + /* get the cluster size */ + hDlgCtrl = GetDlgItem(hwndDlg, 28680); + iSelIndex = SendMessageW(hDlgCtrl, CB_GETCURSEL, 0, 0); + if (iSelIndex == CB_ERR) + { + FIXME("\n"); + return; + } + ClusterSize = SendMessageW(hDlgCtrl, CB_GETITEMDATA, iSelIndex, 0); + if (ClusterSize == CB_ERR) + { + FIXME("\n"); + return; + } + + hDlgCtrl = GetDlgItem(hwndDlg, 28680); + ShowWindow(hDlgCtrl, SW_SHOW); + SendMessageW(hDlgCtrl, PBM_SETRANGE, 0, MAKELPARAM(0, 100)); + bSuccess = FALSE; + + /* FIXME + * will cause display problems + * when performing more than one format + */ + FormatDrvDialog = hwndDlg; + + pContext->FormatEx(szDrive, + FMIFS_HARDDISK, /* FIXME */ + szFileSys, + szLabel, + QuickFormat, + ClusterSize, + FormatExCB); + + ShowWindow(hDlgCtrl, SW_HIDE); + FormatDrvDialog = NULL; + if (!bSuccess) + { + pContext->Result = SHFMT_ERROR; + } + else if (QuickFormat) + { + pContext->Result = SHFMT_OPT_FULL; + } + else + { + pContext->Result = FALSE; + } +} + + +BOOL +CALLBACK +FormatDriveDlg(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + PFORMAT_DRIVE_CONTEXT pContext; + + switch(uMsg) + { + case WM_INITDIALOG: + InitializeFormatDriveDlg(hwndDlg, (PFORMAT_DRIVE_CONTEXT)lParam); + SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)lParam); + return TRUE; + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case IDOK: + pContext = (PFORMAT_DRIVE_CONTEXT)GetWindowLongPtr(hwndDlg, DWLP_USER); + FormatDrive(hwndDlg, pContext); + break; + case IDCANCEL: + pContext = (PFORMAT_DRIVE_CONTEXT)GetWindowLongPtr(hwndDlg, DWLP_USER); + EndDialog(hwndDlg, pContext->Result); + break; + case 28677: // filesystem combo + if (HIWORD(wParam) == CBN_SELENDOK) + { + pContext = (PFORMAT_DRIVE_CONTEXT)GetWindowLongPtr(hwndDlg, DWLP_USER); + InsertDefaultClusterSizeForFs(hwndDlg, pContext); + } + break; + } + } + return FALSE; +} + + +BOOL +InitializeFmifsLibrary(PFORMAT_DRIVE_CONTEXT pContext) +{ + INITIALIZE_FMIFS InitFmifs; + BOOLEAN ret; + HMODULE hLibrary; + + hLibrary = pContext->hLibrary = LoadLibraryW(L"fmifs.dll"); + if(!hLibrary) + { + ERR("failed to load fmifs.dll\n"); + return FALSE; + } + + InitFmifs = (INITIALIZE_FMIFS)GetProcAddress(hLibrary, "InitializeFmIfs"); + if (!InitFmifs) + { + ERR("InitializeFmIfs export is missing\n"); + FreeLibrary(hLibrary); + return FALSE; + } + + ret = (*InitFmifs)(NULL, DLL_PROCESS_ATTACH, NULL); + if (!ret) + { + ERR("fmifs failed to initialize\n"); + FreeLibrary(hLibrary); + return FALSE; + } + + pContext->QueryAvailableFileSystemFormat = (QUERY_AVAILABLEFSFORMAT)GetProcAddress(hLibrary, "QueryAvailableFileSystemFormat"); + if (!pContext->QueryAvailableFileSystemFormat) + { + ERR("QueryAvailableFileSystemFormat export is missing\n"); + FreeLibrary(hLibrary); + return FALSE; + } + + pContext->FormatEx = (FORMAT_EX) GetProcAddress(hLibrary, "FormatEx"); + if (!pContext->FormatEx) + { + ERR("FormatEx export is missing\n"); + FreeLibrary(hLibrary); + return FALSE; + } + + pContext->EnableVolumeCompression = (ENABLEVOLUMECOMPRESSION) GetProcAddress(hLibrary, "EnableVolumeCompression"); + if (!pContext->FormatEx) + { + ERR("EnableVolumeCompression export is missing\n"); + FreeLibrary(hLibrary); + return FALSE; + } + + return TRUE; +} + +/************************************************************************* + * SHFormatDrive (SHELL32.@) + */ + +DWORD +WINAPI +SHFormatDrive(HWND hwnd, UINT drive, UINT fmtID, UINT options) +{ + FORMAT_DRIVE_CONTEXT Context; + int result; + + TRACE("%p, 0x%08x, 0x%08x, 0x%08x - stub\n", hwnd, drive, fmtID, options); + + if (!InitializeFmifsLibrary(&Context)) + { + ERR("failed to initialize fmifs\n"); + return SHFMT_NOFORMAT; + } + + Context.Drive = drive; + Context.Options = options; + + result = DialogBoxParamW(shell32_hInstance, L"FORMAT_DLG", hwnd, FormatDriveDlg, (LPARAM)&Context); + + FreeLibrary(Context.hLibrary); + return result; +} + + diff --git a/reactos/dll/win32/shell32/folder_options.c b/reactos/dll/win32/shell32/folder_options.c index e17cc3b840f..f7fb6c239e0 100644 --- a/reactos/dll/win32/shell32/folder_options.c +++ b/reactos/dll/win32/shell32/folder_options.c @@ -41,6 +41,7 @@ #include "shlwapi.h" WINE_DEFAULT_DEBUG_CHANNEL (fprop); +#define MAX_PROPERTY_SHEET_PAGE (32) /// Folder Options: /// CLASSKEY = HKEY_CLASSES_ROOT\CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF} @@ -50,6 +51,16 @@ WINE_DEFAULT_DEBUG_CHANNEL (fprop); /// ShellFolder Attributes: 0x0 +typedef struct +{ + DWORD cFiles; + DWORD cFolder; + LARGE_INTEGER bSize; + HWND hwndDlg; + WCHAR szFolderPath[MAX_PATH]; +}FOLDER_PROPERTIES_CONTEXT, *PFOLDER_PROPERTIES_CONTEXT; + + INT_PTR CALLBACK FolderOptionsGeneralDlg( @@ -276,5 +287,273 @@ VOID WINAPI Options_RunDLLW(HWND hWnd, HINSTANCE hInst, LPCWSTR cmd, DWORD nCmdS Options_RunDLLCommon(hWnd, hInst, StrToIntW(cmd), nCmdShow); } +static +DWORD WINAPI +CountFolderAndFiles(LPVOID lParam) +{ + WIN32_FIND_DATAW FindData; + HANDLE hFile; + UINT Length; + LPWSTR pOffset; + BOOL ret; + PFOLDER_PROPERTIES_CONTEXT pContext = (PFOLDER_PROPERTIES_CONTEXT) lParam; + + pOffset = PathAddBackslashW(pContext->szFolderPath); + if (!pOffset) + return 0; + + Length = pOffset - pContext->szFolderPath; + + wcscpy(pOffset, L"*.*"); + hFile = FindFirstFileW(pContext->szFolderPath, &FindData); + if (hFile == INVALID_HANDLE_VALUE) + return 0; + + do + { + ret = FindNextFileW(hFile, &FindData); + if (ret) + { + if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) + { + if (FindData.cFileName[0] == L'.' && FindData.cFileName[1] == L'.' && + FindData.cFileName[2] == L'\0') + continue; + + pContext->cFolder++; + wcscpy(pOffset, FindData.cFileName); + CountFolderAndFiles((LPVOID)pContext); + pOffset[0] = L'\0'; + } + else + { + pContext->cFiles++; + pContext->bSize.u.LowPart += FindData.nFileSizeLow; + pContext->bSize.u.HighPart += FindData.nFileSizeHigh; + } + } + else if (GetLastError() == ERROR_NO_MORE_FILES) + { + break; + } + }while(1); + + FindClose(hFile); + return 1; +} + +static +VOID +InitializeFolderGeneralDlg(PFOLDER_PROPERTIES_CONTEXT pContext) +{ + LPWSTR pFolderName; + WIN32_FILE_ATTRIBUTE_DATA FolderAttribute; + FILETIME ft; + SYSTEMTIME dt; + WCHAR szBuffer[MAX_PATH+5]; + WCHAR szFormat[30] = {0}; + + static const WCHAR wFormat[] = {'%','0','2','d','/','%','0','2','d','/','%','0','4','d',' ',' ','%','0','2','d',':','%','0','2','u',0}; + + pFolderName = wcsrchr(pContext->szFolderPath, L'\\'); + if (!pFolderName) + return; + + /* set folder name */ + SendDlgItemMessageW(pContext->hwndDlg, 14001, WM_SETTEXT, 0, (LPARAM) (pFolderName + 1)); + /* set folder location */ + pFolderName[0] = L'\0'; + if (wcslen(pContext->szFolderPath) == 2) + { + /* folder is located at root */ + WCHAR szDrive[4] = {L'C',L':',L'\\',L'\0'}; + szDrive[0] = pContext->szFolderPath[0]; + SendDlgItemMessageW(pContext->hwndDlg, 14007, WM_SETTEXT, 0, (LPARAM) szDrive); + } + else + { + SendDlgItemMessageW(pContext->hwndDlg, 14007, WM_SETTEXT, 0, (LPARAM) pContext->szFolderPath); + } + pFolderName[0] = L'\\'; + /* get folder properties */ + if (GetFileAttributesExW(pContext->szFolderPath, GetFileExInfoStandard, (LPVOID)&FolderAttribute)) + { + if (FolderAttribute.dwFileAttributes & FILE_ATTRIBUTE_READONLY) + { + /* check readonly button */ + SendDlgItemMessage(pContext->hwndDlg, 14021, BM_SETCHECK, BST_CHECKED, 0); + } + + if (FolderAttribute.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) + { + /* check hidden button */ + SendDlgItemMessage(pContext->hwndDlg, 14022, BM_SETCHECK, BST_CHECKED, 0); + } + + if (FileTimeToLocalFileTime(&FolderAttribute.ftCreationTime, &ft)) + { + FileTimeToSystemTime(&ft, &dt); + sprintfW (szBuffer, wFormat, dt.wDay, dt.wMonth, dt.wYear, dt.wHour, dt.wMinute); + SendDlgItemMessageW(pContext->hwndDlg, 14015, WM_SETTEXT, 0, (LPARAM) szBuffer); + } + } + /* now enumerate enumerate contents */ + wcscpy(szBuffer, pContext->szFolderPath); + CountFolderAndFiles((LPVOID)pContext); + wcscpy(pContext->szFolderPath, szBuffer); + /* set folder details */ + LoadStringW(shell32_hInstance, IDS_FILE_FOLDER, szFormat, sizeof(szFormat)/sizeof(WCHAR)); + szFormat[(sizeof(szFormat)/sizeof(WCHAR))-1] = L'\0'; + sprintfW(szBuffer, szFormat, pContext->cFiles, pContext->cFolder); + SendDlgItemMessageW(pContext->hwndDlg, 14011, WM_SETTEXT, 0, (LPARAM) szBuffer); + + if (StrFormatByteSizeW(pContext->bSize.QuadPart, szBuffer, sizeof(szBuffer)/sizeof(WCHAR))) + { + /* store folder size */ + SendDlgItemMessageW(pContext->hwndDlg, 14009, WM_SETTEXT, 0, (LPARAM) szBuffer); + } +} + + +INT_PTR +CALLBACK +FolderPropertiesGeneralDlg( + HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam +) +{ + LPPROPSHEETPAGEW ppsp; + PFOLDER_PROPERTIES_CONTEXT pContext; + HICON hIcon; + WIN32_FILE_ATTRIBUTE_DATA FolderAttribute; + LONG res; + LPPSHNOTIFY lppsn; + DWORD Attribute; + + switch(uMsg) + { + case WM_INITDIALOG: + ppsp = (LPPROPSHEETPAGEW)lParam; + if (ppsp == NULL) + break; + hIcon = LoadIconW(shell32_hInstance, MAKEINTRESOURCEW(IDI_SHELL_FOLDER_OPEN)); + if (hIcon) + SendDlgItemMessageW(hwndDlg, 14000, STM_SETICON, (WPARAM)hIcon, 0); + + pContext = SHAlloc(sizeof(FOLDER_PROPERTIES_CONTEXT)); + if (pContext) + { + ZeroMemory(pContext, sizeof(FOLDER_PROPERTIES_CONTEXT)); + pContext->hwndDlg = hwndDlg; + wcscpy(pContext->szFolderPath, (LPWSTR)ppsp->lParam); + SetWindowLongPtr(hwndDlg, DWL_USER, (LONG_PTR)pContext); + InitializeFolderGeneralDlg(pContext); + } + return TRUE; + case WM_COMMAND: + if (HIWORD(wParam) == BN_CLICKED) + { + PropSheet_Changed(GetParent(hwndDlg), hwndDlg); + } + break; + case WM_DESTROY: + pContext = (PFOLDER_PROPERTIES_CONTEXT)GetWindowLong(hwndDlg, DWL_USER); + SHFree((LPVOID)pContext); + break; + case WM_NOTIFY: + pContext = (PFOLDER_PROPERTIES_CONTEXT)GetWindowLong(hwndDlg, DWL_USER); + lppsn = (LPPSHNOTIFY) lParam; + if (lppsn->hdr.code == PSN_APPLY) + { + if (GetFileAttributesExW(pContext->szFolderPath, GetFileExInfoStandard, (LPVOID)&FolderAttribute)) + { + res = SendDlgItemMessageW(hwndDlg, 14021, BM_GETCHECK, 0, 0); + if (res == BST_CHECKED) + FolderAttribute.dwFileAttributes |= FILE_ATTRIBUTE_READONLY; + else + FolderAttribute.dwFileAttributes &= (~FILE_ATTRIBUTE_READONLY); + + res = SendDlgItemMessageW(hwndDlg, 14022, BM_GETCHECK, 0, 0); + if (res == BST_CHECKED) + FolderAttribute.dwFileAttributes |= FILE_ATTRIBUTE_HIDDEN; + else + FolderAttribute.dwFileAttributes &= (~FILE_ATTRIBUTE_HIDDEN); + + Attribute = FolderAttribute.dwFileAttributes & +(FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY); + + SetFileAttributesW(pContext->szFolderPath, Attribute); + } + SetWindowLong( hwndDlg, DWL_MSGRESULT, PSNRET_NOERROR ); + return TRUE; + } + break; + } + return FALSE; +} + +static +BOOL +CALLBACK +FolderAddPropSheetPageProc(HPROPSHEETPAGE hpage, LPARAM lParam) +{ + PROPSHEETHEADERW *ppsh = (PROPSHEETHEADERW *)lParam; + if (ppsh != NULL && ppsh->nPages < MAX_PROPERTY_SHEET_PAGE) + { + ppsh->u3.phpage[ppsh->nPages++] = hpage; + return TRUE; + } + return FALSE; +} + +BOOL +SH_ShowFolderProperties(LPWSTR pwszFolder) +{ + HPROPSHEETPAGE hppages[MAX_PROPERTY_SHEET_PAGE]; + HPROPSHEETPAGE hpage; + PROPSHEETHEADERW psh; + BOOL ret; + WCHAR szName[MAX_PATH] = {0}; + HPSXA hpsx; + LPWSTR pFolderName; + + if (!PathIsDirectoryW(pwszFolder)) + return FALSE; + + pFolderName = wcsrchr(pwszFolder, L'\\'); + if (!pFolderName) + return FALSE; + + wcscpy(szName, pFolderName + 1); + + hpage = SH_CreatePropertySheetPage("SHELL_FOLDER_GENERAL_DLG", FolderPropertiesGeneralDlg, (LPARAM)pwszFolder, NULL); + if (!hpage) + return FALSE; + + ZeroMemory(&psh, sizeof(PROPSHEETHEADERW)); + hppages[psh.nPages] = hpage; + psh.nPages++; + psh.dwSize = sizeof(PROPSHEETHEADERW); + psh.dwFlags = PSH_PROPTITLE; + psh.hwndParent = NULL; + psh.u3.phpage = hppages; + psh.pszCaption = szName; + + hpsx = SHCreatePropSheetExtArray(HKEY_CLASSES_ROOT, + L"Folder", + MAX_PROPERTY_SHEET_PAGE-1); + + SHAddFromPropSheetExtArray(hpsx, + (LPFNADDPROPSHEETPAGE)FolderAddPropSheetPageProc, + (LPARAM)&psh); + + ret = PropertySheetW(&psh); + if (ret < 0) + return FALSE; + else + return TRUE; +} diff --git a/reactos/dll/win32/shell32/fprop.c b/reactos/dll/win32/shell32/fprop.c index 329aa9fbd5a..6cb44310181 100644 --- a/reactos/dll/win32/shell32/fprop.c +++ b/reactos/dll/win32/shell32/fprop.c @@ -778,8 +778,7 @@ SH_ShowPropertiesDialog(PCWSTR lpf) if (PathIsDirectoryW(wFileName)) { - FIXME("directory resources are missing\n"); - return FALSE; + return SH_ShowFolderProperties(wFileName); } if (wcslen(wFileName) == 3) diff --git a/reactos/dll/win32/shell32/lang/bg-BG.rc b/reactos/dll/win32/shell32/lang/bg-BG.rc index 802961b4c5a..e8281537cf5 100644 --- a/reactos/dll/win32/shell32/lang/bg-BG.rc +++ b/reactos/dll/win32/shell32/lang/bg-BG.rc @@ -199,6 +199,27 @@ BEGIN PUSHBUTTON "Прекъсване", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Общи" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Общи" @@ -336,7 +357,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Отваряне с" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN @@ -545,6 +566,20 @@ BEGIN AUTOCHECKBOX "&Използване на уплътняване", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Смяна на значе" @@ -574,14 +609,25 @@ BEGIN IDS_SHV_COLUMN9 "Забележки" IDS_SHV_COLUMN10 "Собственик" IDS_SHV_COLUMN11 "Група" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Първоначално място" IDS_SHV_COLUMN_DELDATE "Дата на изтриване" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" // special folders IDS_DESKTOP "Работна площ" IDS_MYCOMPUTER "Моят компютър" IDS_RECYCLEBIN_FOLDER_NAME "Кошче" IDS_CONTROLPANEL "Крило за управление" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" // context menus IDS_VIEW_LARGE "&Големи значета" @@ -590,6 +636,12 @@ BEGIN IDS_VIEW_DETAILS "&Подробен" IDS_SELECT "Избор" IDS_OPEN "Отваряне" + IDS_CREATELINK "Създаване на &връзка" + IDS_COPY "За&помняне" + IDS_DELETE "Из&триване" + IDS_PROPERTIES "&Свойства" + IDS_CUT "Из&рязване" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Създаването на нова папка е невъзможно: недостатъчни права." IDS_CREATEFOLDER_CAPTION "Грешка при създаване на нова папка" @@ -691,6 +743,12 @@ BEGIN IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/ca-ES.rc b/reactos/dll/win32/shell32/lang/ca-ES.rc index 8b1d40eff38..7a93e48c92b 100644 --- a/reactos/dll/win32/shell32/lang/ca-ES.rc +++ b/reactos/dll/win32/shell32/lang/ca-ES.rc @@ -199,6 +199,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -337,7 +358,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN @@ -543,6 +564,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" @@ -571,14 +606,25 @@ BEGIN IDS_SHV_COLUMN9 "Comments" IDS_SHV_COLUMN10 "Owner" IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Desktop" IDS_MYCOMPUTER "My Computer" IDS_RECYCLEBIN_FOLDER_NAME "Trash" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "Lar&ge Icons" @@ -587,6 +633,12 @@ BEGIN IDS_VIEW_DETAILS "&Details" IDS_SELECT "Select" IDS_OPEN "Open" + IDS_CREATELINK "Create &Link" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" @@ -687,4 +739,11 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/cs-CZ.rc b/reactos/dll/win32/shell32/lang/cs-CZ.rc index f6387bbae00..49b5605cccf 100644 --- a/reactos/dll/win32/shell32/lang/cs-CZ.rc +++ b/reactos/dll/win32/shell32/lang/cs-CZ.rc @@ -201,6 +201,27 @@ BEGIN PUSHBUTTON "Storno", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Obecnй" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Obecnй" @@ -339,7 +360,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Otevшнt v..." FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN @@ -545,6 +566,20 @@ BEGIN AUTOCHECKBOX "&Aktivovat kompresi", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Zmмnit ikonu" @@ -573,14 +608,25 @@ BEGIN IDS_SHV_COLUMN9 "Komentбш" IDS_SHV_COLUMN10 "Vlastnнk" IDS_SHV_COLUMN11 "Skupina" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Pщvodnн umнstмnн" IDS_SHV_COLUMN_DELDATE "Odstranмno" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Plocha" IDS_MYCOMPUTER "Tento poинtaи" IDS_RECYCLEBIN_FOLDER_NAME "Koљ" IDS_CONTROLPANEL "Ovlбdacн panely" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "&Vedle sebe" @@ -589,6 +635,12 @@ BEGIN IDS_VIEW_DETAILS "&Podrobnosti" IDS_SELECT "Vybrat" IDS_OPEN "Otevшнt" + IDS_CREATELINK "Vytvoшit zбstupc&e" + IDS_COPY "&Kopнrovat" + IDS_DELETE "O&dstranit" + IDS_PROPERTIES "&Vlastnosti" + IDS_CUT "Vyj&mout" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Nelze vytvoшit novou sloћku, protoћe pшнstup byl odepшen." IDS_CREATEFOLDER_CAPTION "Chyba pшi pokusu vytvoшit novэ adresбш" @@ -688,4 +740,11 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/da-DK.rc b/reactos/dll/win32/shell32/lang/da-DK.rc index fbd8eb86422..fb665bdf8dc 100644 --- a/reactos/dll/win32/shell32/lang/da-DK.rc +++ b/reactos/dll/win32/shell32/lang/da-DK.rc @@ -199,6 +199,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -337,7 +358,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN @@ -543,6 +564,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" @@ -571,14 +606,25 @@ BEGIN IDS_SHV_COLUMN9 "Comments" IDS_SHV_COLUMN10 "Owner" IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Desktop" IDS_MYCOMPUTER "My Computer" IDS_RECYCLEBIN_FOLDER_NAME "Trash" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "Lar&ge Icons" @@ -587,6 +633,12 @@ BEGIN IDS_VIEW_DETAILS "&Details" IDS_SELECT "Select" IDS_OPEN "Open" + IDS_CREATELINK "Create &Link" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" @@ -687,4 +739,11 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/de-DE.rc b/reactos/dll/win32/shell32/lang/de-DE.rc index cd9127950b3..ae8fab4a46c 100644 --- a/reactos/dll/win32/shell32/lang/de-DE.rc +++ b/reactos/dll/win32/shell32/lang/de-DE.rc @@ -201,6 +201,28 @@ BEGIN PUSHBUTTON "Abbrechen", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Typ:", 14004, 8, 35, 50, 10 + LTEXT "Dateiordner", 14005, 68, 35, 160, 10 + LTEXT "Ort:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "GrцЯe:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Inhalt:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Erstellt:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Schreibgeschьtzt", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Versteckt", 14022, 126, 150, 50, 10 +END + + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Allgemein" @@ -339,7 +361,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Цffnen mit" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN @@ -525,7 +547,7 @@ END FORMAT_DLG DIALOGEX 50, 50, 184, 218 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION -CAPTION "Formatieren" +CAPTION "Formatieren von" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Starten", IDOK, 53, 198, 60, 14 @@ -544,6 +566,21 @@ BEGIN AUTOCHECKBOX "&Komprimierung aktivieren", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Ьberprьfen des Datentrдgers" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Starten", IDOK, 53, 100, 60, 14 + GROUPBOX "Optionen fьr die Datentrдgerprьfung", -1, 7, 6, 179, 50 + PUSHBUTTON "S&chlieЯen", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "&Dateisystemfehler automatisch korrigieren", 14000, 16, 15, 165, 10 + AUTOCHECKBOX "&Fehlerhafte Sektoren suchen/wiederherstellen", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 0, 7, 60, 179, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Anderes Symbol" @@ -572,14 +609,26 @@ BEGIN IDS_SHV_COLUMN9 "Kommentar" IDS_SHV_COLUMN10 "Besitzer" IDS_SHV_COLUMN11 "Gruppe" + IDS_SHV_COLUMN12 "Dateinamen" + IDS_SHV_COLUMN13 "Kategorie" IDS_SHV_COLUMN_DELFROM "Ursprung" IDS_SHV_COLUMN_DELDATE "Gelцscht am" + IDS_SHV_COLUMN_FONTTYPE "Schriftartentyp" + IDS_SHV_COLUMN_WORKGROUP "Arbeitsgruppe" + IDS_SHV_NETWORKLOCATION "Netzwerkstandort" + IDS_SHV_COLUMN_DOCUMENTS "Dokumente" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Kommentare" + IDS_SHV_COLUMN_LOCATION "Ort" + IDS_SHV_COLUMN_MODEL "Model" + /* special folders */ IDS_DESKTOP "Desktop" IDS_MYCOMPUTER "Arbeitsplatz" IDS_RECYCLEBIN_FOLDER_NAME "Papierkorb" IDS_CONTROLPANEL "Systemsteuerung" + IDS_ADMINISTRATIVETOOLS "Verwaltung" /* context menus */ IDS_VIEW_LARGE "&GroЯe Symbole" @@ -588,6 +637,12 @@ BEGIN IDS_VIEW_DETAILS "&Details" IDS_SELECT "Auswдhlen" IDS_OPEN "Цffnen" + IDS_CREATELINK "&Verknьpfung erstellen" + IDS_COPY "Kopieren" + IDS_DELETE "Lцschen" + IDS_PROPERTIES "Eigenschaften" + IDS_CUT "Ausschneiden" + IDS_RESTORE "Wiederherstellen" IDS_CREATEFOLDER_DENIED "Es konnte kein neues Verzeichnis erstellt werden: Zugriff verweigert." IDS_CREATEFOLDER_CAPTION "Es trat ein Fehler beim Erstellen eines neuen Verzeichnisses auf." @@ -687,4 +742,11 @@ BEGIN IDS_PRINT_VERB "Drucken" IDS_PLAY_VERB "Abspielen" IDS_PREVIEW_VERB "Vorschau" + + IDS_FILE_FOLDER "%u Dateien, %u Ordner" + IDS_PRINTERS "Drucker" + IDS_FONTS "Schriftarten" + IDS_INSTALLNEWFONT "Neue Schriftart installieren..." + + IDS_DEFAULT_CLUSTER_SIZE "StandardgrцЯe" END diff --git a/reactos/dll/win32/shell32/lang/el-GR.rc b/reactos/dll/win32/shell32/lang/el-GR.rc index 4e6c802930c..f2ac5f9ac87 100644 --- a/reactos/dll/win32/shell32/lang/el-GR.rc +++ b/reactos/dll/win32/shell32/lang/el-GR.rc @@ -199,6 +199,27 @@ BEGIN PUSHBUTTON "ўкхсп", IDCANCEL, 120, 120, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "ГенйкЬ" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 130 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "ГенйкЬ" @@ -337,7 +358,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "ўнпйгмб ме" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN @@ -543,6 +564,21 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" @@ -571,14 +607,25 @@ BEGIN IDS_SHV_COLUMN9 "Учьлйб" IDS_SHV_COLUMN10 "КЬфпчпт" IDS_SHV_COLUMN11 "ПмЬдб" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "БсчйкЮ иЭуз" IDS_SHV_COLUMN_DELDATE "ЗмеспмзнЯб дйбгсбцЮт" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "ЕрйцЬнейб есгбуЯбт" IDS_MYCOMPUTER "П хрплпгйуфЮт мпх" IDS_RECYCLEBIN_FOLDER_NAME "КЬдпт бнбкэклщузт" IDS_CONTROLPANEL "РЯнбкбт елЭгчпх" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "&МегЬлб ейкпнЯдйб" @@ -587,6 +634,12 @@ BEGIN IDS_VIEW_DETAILS "Л&ерфпмЭсейет" IDS_SELECT "ЕрйлпгЮ" IDS_OPEN "ўнпйгмб" + IDS_CREATELINK "ДзмйпхсгЯб &ухнфьмехузт" + IDS_COPY "Б&нфйгсбцЮ" + IDS_DELETE "&ДйбгсбцЮ" + IDS_PROPERTIES "&Йдйьфзфет" + IDS_CUT "Б&рпкпрЮ" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Ден Юфбн дхнбфЮ з дзмйпхсгЯб фпх цбкЭлпх: Ден ерйфсЭрефбй з рсьувбуз." IDS_CREATEFOLDER_CAPTION "УцЬлмб кбфЬ фзн дзмйпхсгЯб нЭпх цбкЭлпх" @@ -687,4 +740,11 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/en-GB.rc b/reactos/dll/win32/shell32/lang/en-GB.rc index a86741214f6..65d588245ad 100644 --- a/reactos/dll/win32/shell32/lang/en-GB.rc +++ b/reactos/dll/win32/shell32/lang/en-GB.rc @@ -199,6 +199,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -543,6 +564,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" @@ -571,14 +606,25 @@ BEGIN IDS_SHV_COLUMN9 "Comments" IDS_SHV_COLUMN10 "Owner" IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Desktop" IDS_MYCOMPUTER "My Computer" IDS_RECYCLEBIN_FOLDER_NAME "Recycle Bin" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "Lar&ge Icons" @@ -587,6 +633,12 @@ BEGIN IDS_VIEW_DETAILS "&Details" IDS_SELECT "Select" IDS_OPEN "Open" + IDS_CREATELINK "Create &Link" + IDS_COPY "&Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "C&ut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" @@ -687,4 +739,11 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/en-US.rc b/reactos/dll/win32/shell32/lang/en-US.rc index ea9191a5c6c..2b2cf1a4770 100644 --- a/reactos/dll/win32/shell32/lang/en-US.rc +++ b/reactos/dll/win32/shell32/lang/en-US.rc @@ -199,6 +199,28 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -543,6 +565,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" @@ -571,14 +607,25 @@ BEGIN IDS_SHV_COLUMN9 "Comments" IDS_SHV_COLUMN10 "Owner" IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Desktop" IDS_MYCOMPUTER "My Computer" IDS_RECYCLEBIN_FOLDER_NAME "Trash" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "Lar&ge Icons" @@ -587,6 +634,12 @@ BEGIN IDS_VIEW_DETAILS "&Details" IDS_SELECT "Select" IDS_OPEN "Open" + IDS_CREATELINK "Create &Link" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" @@ -687,4 +740,11 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/es-ES.rc b/reactos/dll/win32/shell32/lang/es-ES.rc index 0462112840b..cfbeea723e6 100644 --- a/reactos/dll/win32/shell32/lang/es-ES.rc +++ b/reactos/dll/win32/shell32/lang/es-ES.rc @@ -2,6 +2,7 @@ * Copyright 1998 Juergen Schmied * Copyright 2003,2004 Josй Manuel Ferrer Ortiz * Actualizado Javier Remacha 2008 + * ACtualizado Victor Martinez 2008 * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -201,6 +202,27 @@ BEGIN PUSHBUTTON "Cancelar", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Tipo:", 14004, 8, 35, 50, 10 + LTEXT "Carpeta de archivos", 14005, 68, 35, 160, 10 + LTEXT "Ubicaciуn:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Tamaсo:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contiene:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Creado:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Sуlo lectura", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Oculto", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -233,14 +255,14 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Versiуn" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - LTEXT "Versiуn del archivo: ", 14000, 10, 10, 60, 10 + LTEXT "Versiуn del archivo: ", 14000, 10, 10, 62, 14 LTEXT "", 14001, 77, 10, 152, 10 LTEXT "Descripciуn: ", 14002, 10, 27, 45, 10 LTEXT "", 14003, 77, 27, 152, 10 LTEXT "Copyright: ", 14004, 10, 46, 66, 10 LTEXT "", 14005, 77, 46, 152, 10 GROUPBOX "Mбs informaciуn de la versiуn: ", 14006, 6, 70, 222, 115 - LTEXT "Nombre del elemento: ", 14007, 13, 82, 60, 10 + LTEXT "Nombre del elemento:", 14007, 13, 82, 65, 10 LTEXT "Valor: ", 14008, 112, 82, 45, 10 LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY @@ -339,7 +361,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Abrir con" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN @@ -545,6 +567,20 @@ BEGIN AUTOCHECKBOX "&Habilitar compresiуn", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Cambiar Icono" @@ -573,14 +609,25 @@ BEGIN IDS_SHV_COLUMN9 "Comentarios" IDS_SHV_COLUMN10 "Propietario" IDS_SHV_COLUMN11 "Grupo" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Ubicaciуn original" IDS_SHV_COLUMN_DELDATE "Fecha de eliminaciуn" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Escritorio" IDS_MYCOMPUTER "Mi PC" IDS_RECYCLEBIN_FOLDER_NAME "Papelera de reciclaje" IDS_CONTROLPANEL "Panel de control" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "Iconos &grandes" @@ -589,6 +636,12 @@ BEGIN IDS_VIEW_DETAILS "&Detalles" IDS_SELECT "Seleccionar" IDS_OPEN "Abrir" + IDS_CREATELINK "C&rear acceso directo" + IDS_COPY "&Copiar" + IDS_DELETE "&Eliminar" + IDS_PROPERTIES "&Propiedades" + IDS_CUT "C&ortar" + IDS_RESTORE "Restaurar" IDS_CREATEFOLDER_DENIED "No se puede crear nueva carpeta: Permiso denegado." IDS_CREATEFOLDER_CAPTION "Error durante la creaciуn de una nueva carpeta" @@ -682,11 +735,18 @@ BEGIN IDS_LNK_FILE "Acceso directo" IDS_SYS_FILE "Archivo del sistema" - IDS_OPEN_VERB "Open" - IDS_RUNAS_VERB "Run as " - IDS_EDIT_VERB "Edit" - IDS_FIND_VERB "Find" - IDS_PRINT_VERB "Print" - IDS_PLAY_VERB "Play" - IDS_PREVIEW_VERB "Preview" + IDS_OPEN_VERB "Abrir" + IDS_RUNAS_VERB "Ejecutar como ..." + IDS_EDIT_VERB "Editar" + IDS_FIND_VERB "Buscar" + IDS_PRINT_VERB "Imprimir" + IDS_PLAY_VERB "Reproducir" + IDS_PREVIEW_VERB "Vista previa" + + IDS_FILE_FOLDER "%u Archivos, %u Carpetas" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/fi-FI.rc b/reactos/dll/win32/shell32/lang/fi-FI.rc index 38e5938ea1f..a845f945013 100644 --- a/reactos/dll/win32/shell32/lang/fi-FI.rc +++ b/reactos/dll/win32/shell32/lang/fi-FI.rc @@ -199,6 +199,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -337,7 +358,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN @@ -543,6 +564,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" @@ -571,14 +606,25 @@ BEGIN IDS_SHV_COLUMN9 "Kommentit" IDS_SHV_COLUMN10 "Omistaja" IDS_SHV_COLUMN11 "Ryhmд" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Tyцpцytд" IDS_MYCOMPUTER "Oma Tietokone" IDS_RECYCLEBIN_FOLDER_NAME "Trash" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "&Suuret Kuvakkeet" @@ -587,6 +633,12 @@ BEGIN IDS_VIEW_DETAILS "&Tiedot" IDS_SELECT "Valitse" IDS_OPEN "Avaa" + IDS_CREATELINK "Lu&o Linkki" + IDS_COPY "&Kopioi" + IDS_DELETE "&Poista" + IDS_PROPERTIES "&Ominaisuudet" + IDS_CUT "&Leikkaa" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Uutta kansiota ei voitu luoda: Oikeudet eivдt riitд." IDS_CREATEFOLDER_CAPTION "Virhe luotaessa uutta kansiota" @@ -687,4 +739,11 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/fr-FR.rc b/reactos/dll/win32/shell32/lang/fr-FR.rc index 9a7d66b75d6..764fac64741 100644 --- a/reactos/dll/win32/shell32/lang/fr-FR.rc +++ b/reactos/dll/win32/shell32/lang/fr-FR.rc @@ -101,7 +101,7 @@ FONT 8, "MS Shell Dlg" BEGIN LTEXT "", IDD_TITLE, 10, 8, 198, 24 LTEXT "", IDD_STATUS, 10, 25, 198, 12 - LTEXT "Dossier:", IDD_FOLDER, 10, 152, 40, 12 + LTEXT "Dossier :", IDD_FOLDER, 10, 152, 40, 12 CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP PUSHBUTTON "Crйer un nouveau dossier", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP @@ -171,19 +171,19 @@ CAPTION "Raccourci" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE - LTEXT "Type de la cible:", 14004, 8, 38, 64, 10 + LTEXT "Type de la cible :", 14004, 8, 38, 64, 10 LTEXT "", 14005, 78, 38, 142, 10 - LTEXT "Localisation de la cible:", 14006, 8, 58, 64, 10 + LTEXT "Localisation de la cible :", 14006, 8, 58, 64, 10 LTEXT "", 14007, 79, 58, 141, 10 - LTEXT "Cible:", 14008, 8, 77, 45, 10 + LTEXT "Cible :", 14008, 8, 77, 45, 10 EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL - LTEXT "Dйmarrer dans:", 14010, 8, 96, 57, 10 + LTEXT "Dйmarrer dans :", 14010, 8, 96, 57, 10 EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL - LTEXT "Touche de raccourci:", 14014, 8, 115, 57, 10 + LTEXT "Touche de raccourci :", 14014, 8, 115, 57, 10 EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT - LTEXT "Exйcuter:", 14016, 8, 134, 57, 10 + LTEXT "Exйcuter :", 14016, 8, 134, 57, 10 EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL - LTEXT "C&ommentaire:", 14018, 8, 152, 57, 10 + LTEXT "C&ommentaire :", 14018, 8, 152, 57, 10 EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL PUSHBUTTON "Trouver la cible...", 14020, 9, 172, 70, 14, ES_LEFT PUSHBUTTON "&Changer d'icфne...", 14021, 84, 172, 70, 14, ES_LEFT @@ -203,6 +203,27 @@ BEGIN PUSHBUTTON "Annuler", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Gйnйral" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type de fichier :", 14004, 8, 35, 50, 10 + LTEXT "Dossier", 14005, 68, 35, 160, 10 + LTEXT "Localisation :", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Taille :", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contient :", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Crйй :", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "Lectu&re-seule", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "Cac&hй", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Gйnйral" @@ -210,21 +231,21 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY - LTEXT "Type de fichier:", 14004, 8, 35, 50, 10 + LTEXT "Type de fichier :", 14004, 8, 35, 50, 10 LTEXT "Fichier", 14005, 68, 35, 160, 10 - LTEXT "Ouvrir avec:", 14006, 8, 53, 50, 10 + LTEXT "Ouvrir avec :", 14006, 8, 53, 50, 10 LTEXT "", 14007, 68, 53, 160, 10 - LTEXT "Localisation:", 14008, 8, 72, 45, 10 + LTEXT "Localisation :", 14008, 8, 72, 45, 10 LTEXT "", 14009, 68, 72, 315, 10 - LTEXT "Taille:", 14010, 8, 93, 45, 10 + LTEXT "Taille :", 14010, 8, 93, 45, 10 LTEXT "", 14011, 68, 93, 160, 10 - LTEXT "Crйй:", 14014, 8, 118, 45, 10 + LTEXT "Crйй :", 14014, 8, 118, 45, 10 LTEXT "", 14015, 68, 118, 160, 10 - LTEXT "Modifiй:", 14016, 8, 140, 45, 10 + LTEXT "Modifiй :", 14016, 8, 140, 45, 10 LTEXT "", 14017, 68, 140, 160, 10 - LTEXT "Accйdй:", 14018, 8, 160, 45, 10 + LTEXT "Accйdй :", 14018, 8, 160, 45, 10 LTEXT "", 14019, 68, 160, 160, 10 - LTEXT "Attributs:", 14020, 8, 189, 45, 10 + LTEXT "Attributs :", 14020, 8, 189, 45, 10 CHECKBOX "Lectu&re-seule", 14021, 58, 189, 67, 10 CHECKBOX "Cac&hй", 14022, 126, 189, 50, 10 CHECKBOX "&Archive", 14023, 181, 189, 49, 10 @@ -235,15 +256,15 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Version" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - LTEXT "Version du fichier: ", 14000, 10, 10, 55, 10 + LTEXT "Version du fichier : ", 14000, 10, 10, 55, 10 LTEXT "", 14001, 77, 10, 152, 10 - LTEXT "Description: ", 14002, 10, 27, 45, 10 + LTEXT "Description : ", 14002, 10, 27, 45, 10 LTEXT "", 14003, 77, 27, 152, 10 - LTEXT "Copyright: ", 14004, 10, 46, 66, 10 + LTEXT "Copyright : ", 14004, 10, 46, 66, 10 LTEXT "", 14005, 77, 46, 152, 10 - GROUPBOX "Autres informations de version: ", 14006, 6, 70, 222, 115 - LTEXT "Nom de l'йlйment: ", 14007, 13, 82, 50, 10 - LTEXT "Valeur: ", 14008, 112, 82, 45, 10 + GROUPBOX "Autres informations de version : ", 14006, 6, 70, 222, 115 + LTEXT "Nom de l'йlйment : ", 14007, 13, 82, 50, 10 + LTEXT "Valeur : ", 14008, 112, 82, 45, 10 LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY END @@ -254,23 +275,23 @@ CAPTION "G FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN EDITTEXT 14001, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP - LTEXT "Type:", -1, 15, 55, 40, 10 + LTEXT "Type :", -1, 15, 55, 40, 10 LTEXT "", 14002, 110, 55, 100, 10 - LTEXT "Systиme de fichier:", -1, 15, 70, 100, 10 + LTEXT "Systиme de fichiers :", -1, 15, 70, 100, 10 LTEXT "", 14003, 110, 70, 100, 10 CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 - LTEXT "Espace utilisй:", -1, 25, 90, 120, 10 + LTEXT "Espace utilisй :", -1, 25, 90, 120, 10 LTEXT "", 14004, 110, 90, 120, 10 LTEXT "", 14005, 200, 90, 40, 10 CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 - LTEXT "Espace libre:", -1, 25, 105, 70, 10 + LTEXT "Espace libre :", -1, 25, 105, 70, 10 LTEXT "", 14006, 110, 105, 120, 10 LTEXT "", 14007, 200, 105, 40, 10 - LTEXT "Capacitй:", -1, 25, 125, 80, 10 + LTEXT "Capacitй :", -1, 25, 125, 80, 10 LTEXT "", 14008, 110, 125, 120, 10 LTEXT "", 14009, 200, 125, 40, 10 @@ -312,14 +333,14 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN LTEXT "Quel compte d'utilisateur dйsirez-vous utiliser pour lancer ce programme?", -1, 10, 20, 220, 20 CHECKBOX "Utilisateur actuel %s", 14000, 10, 45, 150, 10 - LTEXT "Protйger mon ordinateur et mes donnйes de l'activй de programme non autorisйs", -1, 25, 57, 200, 10, WS_DISABLED + LTEXT "Protйger mon ordinateur et mes donnйes des activitйs des programmes non autorisйs", -1, 25, 57, 200, 10, WS_DISABLED CHECKBOX "Cette option peut empкcher les virus d'ordinateur d'endommager votre ordinateur ou vos donnйes personnelles, nйanmoins sйlectionner cette option pourrait empкcher le programme de fonctionner correctement.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE - CHECKBOX "L'utilisateur suivant:", 14002, 10, 100, 90, 10 - LTEXT "Nom d'utilisateur:", -1, 20, 118, 54, 10 + CHECKBOX "L'utilisateur suivant :", 14002, 10, 100, 90, 10 + LTEXT "Nom d'utilisateur :", -1, 20, 118, 54, 10 COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP - LTEXT "Mot de passe:", -1, 20, 143, 53, 10 + LTEXT "Mot de passe :", -1, 20, 143, 53, 10 EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP @@ -341,7 +362,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Ouvrir avec" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN @@ -364,8 +385,8 @@ BEGIN GROUPBOX "Tвches", -1, 7, 10, 249, 45 //ICON -AUTORADIOBUTTON "Montrer les tвches communes dans les dossiers", 14001, 40, 25, 120, 10, WS_TABSTOP -AUTORADIOBUTTON "Utilisez les dossiers ReactOS class&iques", 14002, 40, 37, 120, 10, WS_TABSTOP +AUTORADIOBUTTON "Afficher les tвches habituelles dans les dossiers", 14001, 40, 25, 120, 10, WS_TABSTOP +AUTORADIOBUTTON "Utiliser les dossiers ReactOS class&iques", 14002, 40, 37, 120, 10, WS_TABSTOP GROUPBOX "Parcourir les dossiers", -1, 7, 60, 249, 45, WS_TABSTOP //ICON AUTORADIOBUTTON "Ouvrir tous les dossiers dans la &mкme fenкtre", 14004, 40, 70, 140, 10, WS_TABSTOP @@ -373,9 +394,9 @@ AUTORADIOBUTTON "Ouvrir chaque dossier dans sa propre fen GROUPBOX "Cliquer sur les йlйments de la faзon suivante", -1, 7, 110, 249, 60 //ICON AUTORADIOBUTTON "Clic unique pour ouvrir un йlйment (pointer pour sйlectionner)", 14007, 40, 120, 170, 10, WS_TABSTOP -AUTORADIOBUTTON "Toujours souligner les titres des icфnes avec mon navigateur", 14008, 50, 132, 170, 10, WS_TABSTOP +AUTORADIOBUTTON "Toujours souligner les titres des icфnes comme dans le navigateur", 14008, 50, 132, 170, 10, WS_TABSTOP AUTORADIOBUTTON "Souligner les titres des icфnes seulement quand je les &pointe", 14009, 50, 144, 170, 10, WS_TABSTOP -AUTORADIOBUTTON "&Double-cliquer pour ouvrir un йlйment (clic unique pour sйlectionner)", 14010, 40, 156, 170, 10, WS_TABSTOP +AUTORADIOBUTTON "&Double-cliquer pour ouvrir un йlйment (clic unique pour le sйlectionner)", 14010, 40, 156, 170, 10, WS_TABSTOP PUSHBUTTON "Pa&ramиtres par dйfaut", 14011, 180, 180, 60, 14, WS_TABSTOP END @@ -396,19 +417,19 @@ END FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION -CAPTION "Types de fichier" +CAPTION "Types de fichiers" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN -LTEXT "&Types de fichier enregistrйs :", -1, 7, 10, 70, 10 +LTEXT "&Types de fichiers enregistrйs :", -1, 7, 10, 70, 10 CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 PUSHBUTTON "&Nouveau", 14001, 120, 110, 50, 14, WS_TABSTOP PUSHBUTTON "Supprimer", 14002, 180, 110, 50, 14, WS_TABSTOP -GROUPBOX "Dйtails pour l'extension '%s'", 14003, 7, 130, 249, 70 +GROUPBOX "Dйtails concernant l'extension '%s'", 14003, 7, 130, 249, 70 LTEXT "Ouvrir avec :", -1, 12, 140, 40, 10 //ICON LTEXT "Nom de l'application", 14005, 100, 140, 40, 10 -PUSHBUTTON "&Changer...", 14006, 180, 140, 50, 14, WS_TABSTOP -LTEXT "Les fichiers avec l'extension '%s' sont du type '%s'. Pour\nchanger les paramиtres qui concernent tous les fichiers '%s', cliquez\nsur Avancй.", 14007, 12, 155, 160, 30 +PUSHBUTTON "&Modifier...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Les fichiers avec l'extension '%s' sont de type '%s'. Pour\nmodifier les paramиtres qui concernent tous les fichiers '%s', cliquez\nsur Avancй.", 14007, 12, 155, 160, 30 PUSHBUTTON "A&vancй", 14008, 180, 175, 50, 14, WS_TABSTOP END @@ -460,7 +481,7 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLIN CAPTION "Exйcution automatique" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "Sйlectionnez un type de contenu, puis choisissez une action que ReactOS rйalisera automatiquement que ce type sera utilisй dans ce pйriphйrique :", 1000, 7, 7, 215, 20 + LTEXT "Sйlectionnez un type de contenu, puis choisissez une action que ReactOS rйalisera automatiquement quand ce type sera utilisй dans ce pйriphйrique :", 1000, 7, 7, 215, 20 CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 GROUPBOX "Actions", -1, 7, 45, 212, 146 AUTORADIOBUTTON "Sйlectionnez une action а rйaliser :", 1005, 14, 54, 202, 10, WS_GROUP @@ -475,7 +496,7 @@ CAPTION "Contenu mixte" FONT 8, "MS Shell Dlg" BEGIN ICON "", 1000, 5, 7, 21, 20 - LTEXT "Ce disque ou dispositif contient plus d'un type de fichier.", 1001, 32, 7, 191, 20 + LTEXT "Ce disque ou dispositif contient plus d'un type de fichiers.", 1001, 32, 7, 191, 20 LTEXT "Que voulez-vous que ReactOS fasse ?", 1002, 32, 31, 188, 8 CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 @@ -535,7 +556,7 @@ BEGIN PUSHBUTTON "Fermer", IDCANCEL, 118, 198, 60, 14 LTEXT "Ca&pacitй :", -1, 7, 6, 169, 9 COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP - LTEXT "Systиme de fichier", -1, 7, 35, 170, 9 + LTEXT "Systиme de fichiers", -1, 7, 35, 170, 9 COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 LTEXT "Taille d'unitй d'&allocation", -1, 7, 64, 170, 9 @@ -547,6 +568,20 @@ BEGIN AUTOCHECKBOX "Activer la compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Changer l'icфne" @@ -575,14 +610,25 @@ BEGIN IDS_SHV_COLUMN9 "Commentaires" IDS_SHV_COLUMN10 "Propriйtaire" IDS_SHV_COLUMN11 "Groupe" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Localisation d'origine" IDS_SHV_COLUMN_DELDATE "Date de suppression" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Bureau" IDS_MYCOMPUTER "Poste de travail" IDS_RECYCLEBIN_FOLDER_NAME "Corbeille" - IDS_CONTROLPANEL "Panneau de contrфle" + IDS_CONTROLPANEL "Panneau de configuration" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "&Grandes icфnes" @@ -591,19 +637,25 @@ BEGIN IDS_VIEW_DETAILS "&Dйtails" IDS_SELECT "Sйlectionner" IDS_OPEN "Ouvrir" + IDS_CREATELINK "Crйer un &lien" + IDS_COPY "&Copier" + IDS_DELETE "&Supprimer" + IDS_PROPERTIES "&Propriйtйs" + IDS_CUT "C&ouper" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Impossible de crйer le nouveau dossier : permission refusйe." IDS_CREATEFOLDER_CAPTION "Erreur lors de la crйation du nouveau dossier" IDS_DELETEITEM_CAPTION "Confirmer la suppression du fichier" IDS_DELETEFOLDER_CAPTION "Confirmer la suppression du dossier" - IDS_DELETEITEM_TEXT "Кtes-vous sыr de vouloir supprimer '%1'?" + IDS_DELETEITEM_TEXT "Кtes-vous sыr de vouloir supprimer '%1' ?" IDS_DELETEMULTIPLE_TEXT "Кtes-vous sыr de vouloir supprimer ces %1 йlйments ?" - IDS_DELETESELECTED_TEXT "Кtes-vous sыr de vouloir supprimer l(es) йlement(s) sйlectionnй(s)?" - IDS_TRASHITEM_TEXT "Кtes-vous sыr de vouloir envoyer '%1' а la Corbeille?" - IDS_TRASHFOLDER_TEXT "Кtes-vous sыr de vouloir envoyer '%1' et tout ce qu'il contient а la Corbeille?" - IDS_TRASHMULTIPLE_TEXT "Кtes-vous sыr de vouloir envoyer ces %1 йlйments а la Corbeille?" - IDS_CANTTRASH_TEXT "L'йlйment '%1' ne peut кtre envoyй а la Corbeille. Voulez-vous le supprimer?" - IDS_OVERWRITEFILE_TEXT "Ce dossier contient dйjа un fichier nommй '%1'.\n\nVoulez-vous le remplacer?" + IDS_DELETESELECTED_TEXT "Кtes-vous sыr de vouloir supprimer l(es) йlement(s) sйlectionnй(s) ?" + IDS_TRASHITEM_TEXT "Кtes-vous sыr de vouloir envoyer '%1' а la Corbeille ?" + IDS_TRASHFOLDER_TEXT "Кtes-vous sыr de vouloir envoyer '%1' et tout ce qu'il contient а la Corbeille ?" + IDS_TRASHMULTIPLE_TEXT "Кtes-vous sыr de vouloir envoyer ces %1 йlйments а la Corbeille ?" + IDS_CANTTRASH_TEXT "L'йlйment '%1' ne peut кtre envoyй а la Corbeille. Voulez-vous le supprimer ?" + IDS_OVERWRITEFILE_TEXT "Ce dossier contient dйjа un fichier nommй '%1'.\n\nVoulez-vous le remplacer ?" IDS_OVERWRITEFILE_CAPTION "Confirmer l'йcrasement du fichier" IDS_OVERWRITEFOLDER_TEXT "Ce dossier contient dйjа un dossier nommй '%1'.\n\n"\ "Si les fichiers dans le dossier de destination ont les mкmes noms que ceux dans le\n"\ @@ -612,9 +664,9 @@ BEGIN /* message box strings */ IDS_RESTART_TITLE "Redйmarrer" - IDS_RESTART_PROMPT "Voulez-vous redйmarrer votre ordinateur?" + IDS_RESTART_PROMPT "Voulez-vous redйmarrer votre ordinateur ?" IDS_SHUTDOWN_TITLE "Arrкter" - IDS_SHUTDOWN_PROMPT "Voulez-vous fermer la session ReactOS?" + IDS_SHUTDOWN_PROMPT "Voulez-vous fermer la session ReactOS ?" /* shell folder path default values */ IDS_PROGRAMS "Menu Dйmarrer\\Programmes" @@ -691,4 +743,11 @@ BEGIN IDS_PRINT_VERB "Imprimer" IDS_PLAY_VERB "Lire" IDS_PREVIEW_VERB "Apercevoir" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/hu-HU.rc b/reactos/dll/win32/shell32/lang/hu-HU.rc index 6e7cd052a5b..99a511153d9 100644 --- a/reactos/dll/win32/shell32/lang/hu-HU.rc +++ b/reactos/dll/win32/shell32/lang/hu-HU.rc @@ -202,6 +202,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -340,7 +361,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN @@ -546,6 +567,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" @@ -574,14 +609,25 @@ BEGIN IDS_SHV_COLUMN9 "Megjegyzйsek" IDS_SHV_COLUMN10 "Tulajdonos" IDS_SHV_COLUMN11 "Csoport" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Asztal" IDS_MYCOMPUTER "Szбmнtуgйp" IDS_RECYCLEBIN_FOLDER_NAME "Trash" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "Nagy kйpek" @@ -590,6 +636,12 @@ BEGIN IDS_VIEW_DETAILS "Rйszletek" IDS_SELECT "Kivбlaszt" IDS_OPEN "Megnyit" + IDS_CREATELINK "Parancsikon lйtrehozбsa" + IDS_COPY "Mбsolбs" + IDS_DELETE "Tцrlйs" + IDS_PROPERTIES "Tulajdonsбgok" + IDS_CUT "Kivбgбs" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Nem hozhatу lйtre ъj mappa: Nincs hozzб engedйlyed." IDS_CREATEFOLDER_CAPTION "Hiba a mappa lйtrehozбsakor" @@ -690,4 +742,11 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/it-IT.rc b/reactos/dll/win32/shell32/lang/it-IT.rc index 627035bbbe4..e0e7033d547 100644 --- a/reactos/dll/win32/shell32/lang/it-IT.rc +++ b/reactos/dll/win32/shell32/lang/it-IT.rc @@ -200,6 +200,27 @@ BEGIN PUSHBUTTON "Annulla", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Generale" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Generale" @@ -338,7 +359,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Apri con" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN @@ -544,6 +565,20 @@ BEGIN AUTOCHECKBOX "Abilita la &Compressione", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Cambia icona" @@ -572,14 +607,25 @@ BEGIN IDS_SHV_COLUMN9 "Commenti" IDS_SHV_COLUMN10 "Proprietario" IDS_SHV_COLUMN11 "Gruppo" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Posizione originale" IDS_SHV_COLUMN_DELDATE "Data di cancellazione" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Desktop" IDS_MYCOMPUTER "Risorse del Computer" IDS_RECYCLEBIN_FOLDER_NAME "Cestino" IDS_CONTROLPANEL "Pannello di controllo" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "&Icone Grandi" @@ -588,6 +634,12 @@ BEGIN IDS_VIEW_DETAILS "&Dettagli" IDS_SELECT "Selezione" IDS_OPEN "Apri" + IDS_CREATELINK "&Crea Collegamento" + IDS_COPY "&Copia" + IDS_DELETE "&Cancella" + IDS_PROPERTIES "&Proprietа" + IDS_CUT "&Taglia" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Impossibile creare la cartella: Accesso negato." IDS_CREATEFOLDER_CAPTION "Errore durante la creazione della cartella" @@ -688,4 +740,11 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/ja-JP.rc b/reactos/dll/win32/shell32/lang/ja-JP.rc index b935b01b875..3aa95f8ef99 100644 --- a/reactos/dll/win32/shell32/lang/ja-JP.rc +++ b/reactos/dll/win32/shell32/lang/ja-JP.rc @@ -199,6 +199,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -337,7 +358,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 9, "MS UI Gothic", 0, 0, 0x0 BEGIN @@ -543,6 +564,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" @@ -571,14 +606,25 @@ BEGIN IDS_SHV_COLUMN9 "ѓRѓЃѓ“ѓg" IDS_SHV_COLUMN10 "ЏЉ—LЋТ" IDS_SHV_COLUMN11 "ѓOѓ‹Ѓ[ѓv" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "ѓfѓXѓNѓgѓbѓv" IDS_MYCOMPUTER "ѓ}ѓC ѓRѓ“ѓsѓ…Ѓ[ѓ^" IDS_RECYCLEBIN_FOLDER_NAME "Trash" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "‘е‚«‚ўѓAѓCѓRѓ“(&G)" @@ -587,6 +633,12 @@ BEGIN IDS_VIEW_DETAILS "ЏЪЌЧ(&D)" IDS_SELECT "‘I‘р" IDS_OPEN "ЉJ‚­" + IDS_CREATELINK "ѓVѓ‡Ѓ[ѓgѓJѓbѓg‚МЌмђ¬(&L)" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "ђV‚µ‚ўѓtѓHѓ‹ѓ_‚рЌмђ¬‚Е‚«‚Ь‚№‚с‚Е‚µ‚Ѕ: ѓAѓNѓZѓXЊ ‚Є‚ ‚и‚Ь‚№‚сЃB" IDS_CREATEFOLDER_CAPTION "ђV‚µ‚ўѓtѓHѓ‹ѓ_‚МЌмђ¬’†‚ЙѓGѓ‰Ѓ[‚Є”­ђ¶‚µ‚Ь‚µ‚Ѕ" @@ -687,4 +739,11 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" + END diff --git a/reactos/dll/win32/shell32/lang/ko-KR.rc b/reactos/dll/win32/shell32/lang/ko-KR.rc index b93febc0c8c..eae30075385 100644 --- a/reactos/dll/win32/shell32/lang/ko-KR.rc +++ b/reactos/dll/win32/shell32/lang/ko-KR.rc @@ -199,6 +199,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -337,7 +358,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN @@ -543,6 +564,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" @@ -571,14 +606,25 @@ BEGIN IDS_SHV_COLUMN9 "Comments" IDS_SHV_COLUMN10 "Owner" IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Desktop" IDS_MYCOMPUTER "My Computer" IDS_RECYCLEBIN_FOLDER_NAME "Trash" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "Lar&ge Icons" @@ -587,6 +633,12 @@ BEGIN IDS_VIEW_DETAILS "&Details" IDS_SELECT "Select" IDS_OPEN "Open" + IDS_CREATELINK "Create &Link" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" @@ -687,4 +739,11 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/nl-NL.rc b/reactos/dll/win32/shell32/lang/nl-NL.rc index 1c2db4b8595..9a3aef600af 100644 --- a/reactos/dll/win32/shell32/lang/nl-NL.rc +++ b/reactos/dll/win32/shell32/lang/nl-NL.rc @@ -199,6 +199,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -337,7 +358,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN @@ -543,6 +564,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" @@ -571,14 +606,25 @@ BEGIN IDS_SHV_COLUMN9 "Comments" IDS_SHV_COLUMN10 "Owner" IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Desktop" IDS_MYCOMPUTER "My Computer" IDS_RECYCLEBIN_FOLDER_NAME "Trash" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "Lar&ge Icons" @@ -587,6 +633,12 @@ BEGIN IDS_VIEW_DETAILS "&Details" IDS_SELECT "Select" IDS_OPEN "Open" + IDS_CREATELINK "Create &Link" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" @@ -687,4 +739,11 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/nb-NO.rc b/reactos/dll/win32/shell32/lang/no-NO.rc similarity index 58% rename from reactos/dll/win32/shell32/lang/nb-NO.rc rename to reactos/dll/win32/shell32/lang/no-NO.rc index db5e1bf31fb..7d71a5a0058 100644 --- a/reactos/dll/win32/shell32/lang/nb-NO.rc +++ b/reactos/dll/win32/shell32/lang/no-NO.rc @@ -92,17 +92,17 @@ END SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -CAPTION "Browse for Folder" +CAPTION "Bla etter mappe" FONT 8, "MS Shell Dlg" BEGIN LTEXT "", IDD_TITLE, 10, 8, 198, 24 LTEXT "", IDD_STATUS, 10, 25, 198, 12 - LTEXT "Folder:", IDD_FOLDER, 10, 152, 40, 12 + LTEXT "Mappe:", IDD_FOLDER, 10, 152, 40, 12 CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Make New Folder", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Lag en ny mappe", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Avbryt", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP END SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 @@ -125,14 +125,14 @@ FONT 8, "MS Shell Dlg" BEGIN ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 - LTEXT "Version " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT "Versjon " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 - LTEXT "This ReactOS version is registered to:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "Denne ReactOS versjonen er registert til:", IDC_STATIC, 35, 115, 180, 10 LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ - LTEXT "Installed physical memory:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "Fysisk minne tilgjengelig:", IDC_STATIC, 35, 152, 130, 10 LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 DEFPUSHBUTTON "OK", IDOK, 220, 178, 50, 14 @@ -143,7 +143,7 @@ IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 STYLE DS_SHELLFONT | WS_CHILD FONT 8, "MS Shell Dlg" BEGIN - LTEXT "ReactOS was brought to you by:", IDC_STATIC, 0, 0, 180, 10 + LTEXT "ReactOS ble laget av:", IDC_STATIC, 0, 0, 180, 10 LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 END @@ -158,297 +158,297 @@ BEGIN CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP PUSHBUTTON "Avbryt", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP - PUSHBUTTON "&Bla . . .", 12288, 170, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "&Bla gjennom .", 12288, 170, 63, 54, 14, WS_TABSTOP END SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Shortcut" +CAPTION "Snarvei" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE LTEXT "Target type:", 14004, 10, 30, 50, 10 LTEXT "", 14005, 70, 30, 150, 10 - LTEXT "Target location:", 14006, 10, 40, 70, 10 + LTEXT "Target sted:", 14006, 10, 40, 70, 10 LTEXT "", 14007, 70, 40, 150, 10 LTEXT "Target:", 14008, 10, 55, 45, 10 EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT | ES_AUTOHSCROLL - LTEXT "&Start in:",14010, 10, 65, 57, 10 + LTEXT "&Start i:",14010, 10, 65, 57, 10 EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT | ES_AUTOHSCROLL - LTEXT "Shortcut &key:", 14014, 10, 80, 57, 10 + LTEXT "Snarvei &nшkkel:", 14014, 10, 80, 57, 10 EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT - LTEXT "Run:", 14016, 10, 90, 57, 10 + LTEXT "Kjшr:", 14016, 10, 90, 57, 10 EDITTEXT 14017, 70, 90, 150, 10, ES_AUTOHSCROLL - LTEXT "C&omment:", 14018, 10, 100, 57, 10 + LTEXT "K&ommentar:", 14018, 10, 100, 57, 10 EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT | ES_AUTOHSCROLL - PUSHBUTTON "&Find Target...", 14020, 10, 115, 63, 14, ES_LEFT - PUSHBUTTON "&Change Icon...", 14021, 83, 115, 63, 14, ES_LEFT - PUSHBUTTON "A&dvanced...", 14022, 156, 115, 63, 14, ES_LEFT + PUSHBUTTON "&Finn mеl...", 14020, 10, 115, 63, 14, ES_LEFT + PUSHBUTTON "&Endre ikon...", 14021, 83, 115, 63, 14, ES_LEFT + PUSHBUTTON "A&vansert...", 14022, 156, 115, 63, 14, ES_LEFT END SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION -CAPTION "Extended Properties" +CAPTION "Utvidet Egenskaper" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - LTEXT "Choose the advanced properties you want for this shortcut.", -1, 5, 30, 210, 10 - CHECKBOX "Run with different credentials", 14000, 25, 50, 150, 10 - LTEXT "This option can allow you to run the this shortcut as another user, or continue as yourself while protecting your computer and data from unauthorized program activity.", -1, 50, 60, 175, 40 - CHECKBOX "Run in seperate memory space", 14001, 25, 100, 90, 10, WS_DISABLED + LTEXT "Velg avansert egenskaper som du vil for denne snarveien.", -1, 5, 30, 210, 10 + CHECKBOX "Kjшr med forskjellig credentials", 14000, 25, 50, 150, 10 + LTEXT "Dette valget vil godta deg е kjшre denne snarveien med en annen bruker, eller fortsette som deg selv mens du beskytter din datamaskin og data fra uautorisert program aktivitet.", -1, 50, 60, 175, 40 + CHECKBOX "Kjшr i seperat ledig minne plass", 14001, 25, 100, 90, 10, WS_DISABLED PUSHBUTTON "OK", IDOK, 25, 120, 50, 15, WS_VISIBLE - PUSHBUTTON "Abort", IDCANCEL, 120, 120, 50, 15, WS_VISIBLE + PUSHBUTTON "Avbryt", IDCANCEL, 120, 120, 50, 15, WS_VISIBLE END SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "General" +CAPTION "Generielt" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY - LTEXT "Type of file:", 14004, 8, 35, 50, 10 - LTEXT "File", 14005, 68, 35, 160, 10 - LTEXT "Opens with:", 14006, 8, 53, 50, 10 + LTEXT "Filtype:", 14004, 8, 35, 50, 10 + LTEXT "Fil", 14005, 68, 35, 160, 10 + LTEXT "Еpne med:", 14006, 8, 53, 50, 10 LTEXT "", 14007, 68, 53, 160, 10 - LTEXT "Location:", 14008, 8, 72, 45, 10 + LTEXT "Lokalisjon:", 14008, 8, 72, 45, 10 LTEXT "", 14009, 68, 72, 315, 10 - LTEXT "Size:", 14010, 8, 93, 45, 10 + LTEXT "Stшrrelse:", 14010, 8, 93, 45, 10 LTEXT "", 14011, 68, 93, 160, 10 - LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "Opprettet:", 14014, 8, 118, 45, 10 LTEXT "", 14015, 68, 118, 160, 10 - LTEXT "Modified:", 14016, 8, 140, 45, 10 + LTEXT "Modifisert:", 14016, 8, 140, 45, 10 LTEXT "", 14017, 68, 140, 160, 10 - LTEXT "Accessed:", 14018, 8, 160, 45, 10 + LTEXT "Еpnet:", 14018, 8, 160, 45, 10 LTEXT "", 14019, 68, 160, 160, 10 - LTEXT "Attributes:", 14020, 8, 189, 45, 10 - CHECKBOX "&Read-only", 14021, 58, 189, 67, 10 - CHECKBOX "&Hidden", 14022, 126, 189, 50, 10 - CHECKBOX "&Archive", 14023, 181, 189, 49, 10 + LTEXT "Rettigheter:", 14020, 8, 189, 45, 10 + CHECKBOX "&Bare-lesbar", 14021, 58, 189, 67, 10 + CHECKBOX "&Skjult", 14022, 126, 189, 50, 10 + CHECKBOX "&Arkiv", 14023, 181, 189, 49, 10 END SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Version" +CAPTION "Versjon" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - LTEXT "File version: ", 14000, 10, 10, 55, 10 + LTEXT "Filversjon: ", 14000, 10, 10, 55, 10 LTEXT "", 14001, 77, 10, 152, 10 - LTEXT "Description: ", 14002, 10, 27, 45, 10 + LTEXT "Beskrivelse: ", 14002, 10, 27, 45, 10 LTEXT "", 14003, 77, 27, 152, 10 - LTEXT "Copyright: ", 14004, 10, 46, 66, 10 + LTEXT "Enerett: ", 14004, 10, 46, 66, 10 LTEXT "", 14005, 77, 46, 152, 10 GROUPBOX "Other version information: ", 14006, 6, 70, 222, 115 - LTEXT "Item name: ", 14007, 13, 82, 50, 10 - LTEXT "Value: ", 14008, 112, 82, 45, 10 + LTEXT "Enhetsnavn: ", 14007, 13, 82, 50, 10 + LTEXT "Verdi: ", 14008, 112, 82, 45, 10 LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY END DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "General" +CAPTION "Generielt" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN EDITTEXT 14001, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP LTEXT "Type:", -1, 15, 55, 40, 10 LTEXT "", 14002, 110, 55, 100, 10 - LTEXT "File system:", -1, 15, 70, 100, 10 + LTEXT "Filsystem:", -1, 15, 70, 100, 10 LTEXT "", 14003, 110, 70, 100, 10 CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 - LTEXT "Used space:", -1, 25, 90, 120, 10 + LTEXT "Brukt plass:", -1, 25, 90, 120, 10 LTEXT "", 14004, 110, 90, 120, 10 LTEXT "", 14005, 200, 90, 40, 10 CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 - LTEXT "Free space:", -1, 25, 105, 70, 10 + LTEXT "Ledig plass:", -1, 25, 105, 70, 10 LTEXT "", 14006, 110, 105, 120, 10 LTEXT "", 14007, 200, 105, 40, 10 - LTEXT "Capacity:", -1, 25, 125, 80, 10 + LTEXT "Kapasitet:", -1, 25, 125, 80, 10 LTEXT "", 14008, 110, 125, 120, 10 LTEXT "", 14009, 200, 125, 40, 10 CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 - LTEXT "Drive %s", 14010, 100, 170, 40, 10 - PUSHBUTTON "Disk Cleanup", 14011, 180, 175, 50, 15, WS_TABSTOP - CHECKBOX "Compress drive to save disk space", 14012, 15, 205, 180, 10, WS_DISABLED - CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED + LTEXT "Stasjon %s", 14010, 100, 170, 40, 10 + PUSHBUTTON "Diskoppryding", 14011, 180, 175, 50, 15, WS_TABSTOP + CHECKBOX "Komprimer denne stasjonen for е frigjшre diskplass", 14012, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "Indekser denne stasjonen for raskere sшking", 14012, 15, 220, 200, 10, WS_DISABLED END DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Tools" +CAPTION "Verktшy" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - GROUPBOX "Error-checking", -1, 5, 5, 230, 60 - LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20 - PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP - GROUPBOX "Defragmentation", -1, 5, 65, 230, 60 - LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20 - PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP - GROUPBOX "Backup", -1, 5, 130, 230, 60 - LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20 - PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP + GROUPBOX "Feilsшking", -1, 5, 5, 230, 60 + LTEXT "Dette alternativet vil kontrollere volumet for \nfeil.", -1, 40, 25, 160, 20 + PUSHBUTTON "Kontroller nе...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Defragmentering", -1, 5, 65, 230, 60 + LTEXT "Dette alternativet defragmenterer filene pе volumet.", -1, 40, 85, 160, 20 + PUSHBUTTON "Defragmenter Nе...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Sikkerhetskopi", -1, 5, 130, 230, 60 + LTEXT "Dette alternativet tar sikkerhetskopi av filene pе volumet.", -1, 40, 150, 160, 20 + PUSHBUTTON "Ta sikkerhetskopi...", 14002, 130, 170, 90, 15, WS_TABSTOP END DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Hardware" +CAPTION "Maskinvare" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN END RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Run As" +CAPTION "Kjшr som" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - LTEXT "Which user account do you want to use to run this program?", -1, 10, 20, 220, 20 + LTEXT "Hvilken brukerkonto vil du bruke for е kjшre dette programmet?", -1, 10, 20, 220, 20 CHECKBOX "Current User %s", 14000, 10, 45, 150, 10 - LTEXT "Protect my computer and data from unauthorized program activity", -1, 25, 57, 200, 10, WS_DISABLED - CHECKBOX "This option can prevent computer viruses from harming your computer or personal data, but selecting it might cause the program to function improperly.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE - CHECKBOX "The following user:", 14002, 10, 100, 90, 10 - LTEXT "User name:", -1, 20, 118, 54, 10 + LTEXT "Beskytt min datamaskin og data fra uautorisert program aktivitet", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "Dette valget kan forebygge data virus fra е uskadeliggjшre din datamaskin eller personlige data, men utvelging det skulle kanskje forеrsake program til funksjon formatfeil.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "Fшlgende bruker:", 14002, 10, 100, 90, 10 + LTEXT "Brukernavn:", -1, 20, 118, 54, 10 COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP - LTEXT "Password:", -1, 20, 143, 53, 10 + LTEXT "Passord:", -1, 20, 143, 53, 10 EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP - PUSHBUTTON "Cancel", 14008, 122, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Avbryt", 14008, 122, 170, 60, 14, WS_TABSTOP END BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Recycle Bin Properties" +CAPTION "Papirkurv egenskaper" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 - GROUPBOX "Settings for selected location", -1, 10, 72, 220, 70 - RADIOBUTTON "&Custom size:", 14001, 20, 90, 80, 10, WS_TABSTOP + GROUPBOX "Innstilling for valgte sted", -1, 10, 72, 220, 70 + RADIOBUTTON "&Tilpasse stшrrelse:", 14001, 20, 90, 80, 10, WS_TABSTOP EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER - LTEXT "M&aximum size(MB):", -1, 20, 105, 70, 10 - RADIOBUTTON "Do not move files to the &Recycle Bin. Remove files immediately when deleted.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP - AUTOCHECKBOX "&Display delete confirmation dialog", 14004, 20, 155, 140, 10, WS_TABSTOP + LTEXT "M&aksimalt stшrrelse (MB):", -1, 20, 105, 70, 10 + RADIOBUTTON "Ikke flytt filer til &Papirkurven. Slett filene umiddelbart nеr de slettes.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&Vis slettet bekreftelse dialog", 14004, 20, 155, 140, 10, WS_TABSTOP END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION -CAPTION "Open With" +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Еpne med" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 - LTEXT "Choose the program you want to use to open this file:", -1, 44, 12, 211, 10 - LTEXT "File: ", 14001, 44, 25, 188, 10 - GROUPBOX "&Programs", -1, 7, 42, 249, 187 + LTEXT "Velg programmet du vil bruke for е еpne denne filen:", -1, 44, 12, 211, 10 + LTEXT "Fil: ", 14001, 44, 25, 188, 10 + GROUPBOX "&Program", -1, 7, 42, 249, 187 LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE - AUTOCHECKBOX "&Always use the selected program to open this kind of file", 14003, 20, 193, 225, 10 - PUSHBUTTON "&Browse...", 14004, 198, 207, 50, 14 + AUTOCHECKBOX "&Alltid bruk valgte program for е еpne denne filtypen", 14003, 20, 193, 225, 10 + PUSHBUTTON "&Utforsk...", 14004, 198, 207, 50, 14 PUSHBUTTON "OK", 14005, 150, 236, 50, 14 - PUSHBUTTON "Cancel", 14006, 206, 236, 50, 14 + PUSHBUTTON "Avbryt", 14006, 206, 236, 50, 14 END FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION -CAPTION "General" +CAPTION "Generielt" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN -GROUPBOX "Tasks", -1, 7, 10, 249, 45 +GROUPBOX "Oppgaver", -1, 7, 10, 249, 45 //ICON -AUTORADIOBUTTON "Show common tasks in &folders", 14001, 40, 25, 120, 10, WS_TABSTOP -AUTORADIOBUTTON "Use ReactOS class&ic folders", 14002, 40, 37, 120, 10, WS_TABSTOP -GROUPBOX "Browse folders", -1, 7, 60, 249, 45, WS_TABSTOP +AUTORADIOBUTTON "Vis felles oppgaver i &mapper", 14001, 40, 25, 120, 10, WS_TABSTOP +AUTORADIOBUTTON "Bruk ReactOS klass&isk mapper", 14002, 40, 37, 120, 10, WS_TABSTOP +GROUPBOX "Utforsk mapper", -1, 7, 60, 249, 45, WS_TABSTOP //ICON -AUTORADIOBUTTON "Open each folder in the sa&me window", 14004, 40, 70, 140, 10, WS_TABSTOP -AUTORADIOBUTTON "Open each folder in its own &window", 14005, 40, 82, 140, 10, WS_TABSTOP -GROUPBOX "Click items as follows", -1, 7, 110, 249, 60 +AUTORADIOBUTTON "Еpne hver mapper i sa&mme vindu", 14004, 40, 70, 140, 10, WS_TABSTOP +AUTORADIOBUTTON "Еpne hver mapper i sitt egen &vindu", 14005, 40, 82, 140, 10, WS_TABSTOP +GROUPBOX "Klikk enheter som fшlgende", -1, 7, 110, 249, 60 //ICON -AUTORADIOBUTTON "&Single-click to open an item (point to select)", 14007, 40, 120, 170, 10, WS_TABSTOP -AUTORADIOBUTTON "Underline icon titles consistent with my &browser", 14008, 50, 132, 170, 10, WS_TABSTOP -AUTORADIOBUTTON "Underline icon titles only when I &point at them", 14009, 50, 144, 170, 10, WS_TABSTOP -AUTORADIOBUTTON "&Double-click to open an item (single-click to select)", 14010, 40, 156, 170, 10, WS_TABSTOP -PUSHBUTTON "&Restore Defaults", 14011, 180, 180, 60, 14, WS_TABSTOP +AUTORADIOBUTTON "&Enkelt-klikk for е еpne en enhet (peker for е velge)", 14007, 40, 120, 170, 10, WS_TABSTOP +AUTORADIOBUTTON "Utheve ikon titteler konsekvent med min &utforsker", 14008, 50, 132, 170, 10, WS_TABSTOP +AUTORADIOBUTTON "UUtheve ikon titteler bare mens jeg &peker pе de", 14009, 50, 144, 170, 10, WS_TABSTOP +AUTORADIOBUTTON "&Dobbelt klikk for е еpne enheten (Enkelt-klikk for е velge)", 14010, 40, 156, 170, 10, WS_TABSTOP +PUSHBUTTON "&Gjenopprette standard", 14011, 180, 180, 60, 14, WS_TABSTOP END FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION -CAPTION "View" +CAPTION "Vis" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN -GROUPBOX "Folder views", -1, 7, 10, 249, 60 +GROUPBOX "Mappe visning", -1, 7, 10, 249, 60 //ICON -LTEXT "You can apply the view(such as Details or Tiles) that\nyou are using for this folder to all folders.", -1, 60, 20, 180, 20 -PUSHBUTTON "Apply to A&ll Folders", 14001, 60, 50, 80, 14, WS_TABSTOP -PUSHBUTTON "&Reset All Folders", 14002, 150, 50, 80, 14, WS_TABSTOP -LTEXT "Advanced settings:", -1, 7, 80, 100, 10 +LTEXT "Du kan bruke visning (slik som detalj eller Tiles) som\ndu bruker for denne mappen til alle mappene.", -1, 60, 20, 180, 20 +PUSHBUTTON "Bruk til a&lle mappene", 14001, 60, 50, 80, 14, WS_TABSTOP +PUSHBUTTON "&Gjenopprett alle mapper", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Avanserte innstillinger:", -1, 7, 80, 100, 10 CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 -PUSHBUTTON "Restore &Defaults", 14004, 180, 210, 80, 14, WS_TABSTOP +PUSHBUTTON "Gjenopprett &standard", 14004, 180, 210, 80, 14, WS_TABSTOP END FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION -CAPTION "File Types" +CAPTION "Filtyper" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN -LTEXT "Registered file &types:", -1, 7, 10, 70, 10 +LTEXT "Registerert fil&typer:", -1, 7, 10, 70, 10 CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 -PUSHBUTTON "&New", 14001, 120, 110, 50, 14, WS_TABSTOP -PUSHBUTTON "&Delete", 14002, 180, 110, 50, 14, WS_TABSTOP -GROUPBOX "Details for '%s' extension", 14003, 7, 130, 249, 70 -LTEXT "Opens with:", -1, 12, 140, 40, 10 +PUSHBUTTON "&Ny", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "&Slett", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Detailjer for '%s' utvidelser", 14003, 7, 130, 249, 70 +LTEXT "Еpne med:", -1, 12, 140, 40, 10 //ICON LTEXT "Appname", 14005, 100, 140, 40, 10 -PUSHBUTTON "&Change...", 14006, 180, 140, 50, 14, WS_TABSTOP -LTEXT "Files with extension '%s' are of type '%s'. To\nchange settings that affect all '%s' files, click\nAdvanced.", 14007, 12, 155, 160, 30 -PUSHBUTTON "Ad&vanced", 14008, 180, 175, 50, 14, WS_TABSTOP +PUSHBUTTON "&Endre...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Filer med utvidelser '%s' are of type '%s'. To\nchange settings that affect all '%s' files, click\nAdvanced.", 14007, 12, 155, 160, 30 +PUSHBUTTON "Av&ansert", 14008, 180, 175, 50, 14, WS_TABSTOP END CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION -CAPTION "Confirm File Replace" +CAPTION "Bekrefte fil erstattning" FONT 8, "MS Shell Dlg" BEGIN - DEFPUSHBUTTON "&Yes", IDYES, 20, 122, 60, 14 - PUSHBUTTON "Yes to &All", 12807, 85, 122, 60, 14 - PUSHBUTTON "&No", IDNO, 150, 122, 60, 14 - PUSHBUTTON "Cancel", IDCANCEL, 215, 122, 60, 14 + DEFPUSHBUTTON "&Ja", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Ja for &Alt", 12807, 85, 122, 60, 14 + PUSHBUTTON "&Nei", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 215, 122, 60, 14 ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL - LTEXT "This folder already contains a file named '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX - LTEXT "This folder already contains a read-only file named '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX - LTEXT "This folder already contains a system file named '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX - LTEXT "Would you like to replace the existing file", -1, 44, 35, 228, 10, SS_NOPREFIX - LTEXT "(unknown date and size)", 12302, 79, 51, 198, 20, SS_NOPREFIX + LTEXT "Denne mappen inneholder allerede en fil som heter '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "Denne mappen inneholder allerede en bare-lesbar fil som heter '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Denne mappen inneholder allerede en systemfil som heter '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Vil du overskrive eksisterende fil", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(ukjent dato og stшrrelse)", 12302, 79, 51, 198, 20, SS_NOPREFIX ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL - LTEXT "with this one?", -1, 44, 75, 228, 10, SS_NOPREFIX - LTEXT "(unknown date and size)", 12303, 79, 91, 198, 20, SS_NOPREFIX + LTEXT "med denne ene?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(ukjent dato og stшrrelse)", 12303, 79, 91, 198, 20, SS_NOPREFIX ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL END LOGOFF_DLG DIALOGEX 0, 0, 190, 60 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION -CAPTION "Log Off ReactOS" +CAPTION "Logg av ReactOS" FONT 8, "MS Shell Dlg" BEGIN ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL - LTEXT "Are you sure you want to log off?", -1, 43, 11, 140, 22 + LTEXT "Er du sikker pе at du vil logge av?", -1, 43, 11, 140, 22 DEFPUSHBUTTON "&Log Off", IDOK, 57, 40, 60, 14 - PUSHBUTTON "Cancel", IDCANCEL, 122, 40, 60, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 122, 40, 60, 14 END DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION -CAPTION "Disconnect ReactOS" +CAPTION "Koble fra ReactOS" FONT 8, "MS Shell Dlg" BEGIN ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL - LTEXT "Are you sure you want to disconnect?", -1, 49, 12, 137, 23 - DEFPUSHBUTTON "&Disconnect", IDOK, 57, 40, 60, 14 - PUSHBUTTON "Cancel", IDCANCEL, 123, 40, 60, 14 + LTEXT "Er du sikker pе du vil koble fra?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Koble fra", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 123, 40, 60, 14 END AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 @@ -458,11 +458,11 @@ FONT 8, "MS Shell Dlg" BEGIN LTEXT "&Select a content type, then choose an action for ReactOS to perform automatically when that type is used in this device:", 1000, 7, 7, 215, 20 CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 - GROUPBOX "Actions", -1, 7, 45, 212, 146 - AUTORADIOBUTTON "Select an action to &perform:", 1005, 14, 54, 202, 10, WS_GROUP + GROUPBOX "Handlinger", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Velg en handling for е &utfшre:", 1005, 14, 54, 202, 10, WS_GROUP CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 AUTORADIOBUTTON "Prompt me each time to &choose an action", 1006, 14, 177, 202, 10 - PUSHBUTTON "&Restore Defaults", 1008, 108, 197, 110, 14, WS_DISABLED + PUSHBUTTON "&Gjenopprett standard", 1008, 108, 197, 110, 14, WS_DISABLED END MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 @@ -471,11 +471,11 @@ CAPTION "Mixed Content" FONT 8, "MS Shell Dlg" BEGIN ICON "", 1000, 5, 7, 21, 20 - LTEXT "This disk or device contains more than one type of content.", 1001, 32, 7, 191, 20 - LTEXT "What do you want ReactOS to do?", 1002, 32, 31, 188, 8 + LTEXT "Denne disken eller enheten inneholder mere enn en type med innhold.", 1001, 32, 7, 191, 20 + LTEXT "Hva vil du at ReactOS skal gjшre?", 1002, 32, 31, 188, 8 CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 - PUSHBUTTON "Cancel", IDCANCEL, 160, 186, 60, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 160, 186, 60, 14 END MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 @@ -484,14 +484,14 @@ CAPTION "Mixed Content" FONT 8, "MS Shell Dlg" BEGIN ICON "", 1000, 5, 7, 21, 20 - LTEXT "ReactOS can perform the same action each time you insert a disk or connect a device with this kind of file:", 1001, 30, 7, 193, 20 + LTEXT "ReactOS kan gjшre den samme handlingen hver gang du setter inn en disk eller kobler til en enhet med denne filtypen:", 1001, 30, 7, 193, 20 ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP - LTEXT "What do you want ReactOS to do?", 1002, 32, 41, 190, 8 + LTEXT "Hva vil du at ReactOS skal gjшre?", 1002, 32, 41, 190, 8 CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 - AUTOCHECKBOX "Always do the selected action.", 1004, 32, 171, 190, 10 + AUTOCHECKBOX "Gjшr alltid den valgte handlingen.", 1004, 32, 171, 190, 10 DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 - PUSHBUTTON "Cancel", IDCANCEL, 160, 185, 60, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 160, 185, 60, 14 END AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 @@ -500,26 +500,26 @@ CAPTION "Autoplay" FONT 8, "MS Shell Dlg" BEGIN ICON "", 1000, 5, 7, 21, 20 - LTEXT "ReactOS can perform the same action each time you connect this device.", 1001, 32, 7, 190, 22 - LTEXT "&What do you want ReactOS to do?", 1002, 32, 31, 190, 8 + LTEXT "ReactOS kan gjшre den samme handlingen hver gang du kobler til en enhet.", 1001, 32, 7, 190, 22 + LTEXT "&Hva vil du at ReactOS skal gjшre?", 1002, 32, 31, 190, 8 CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 - AUTOCHECKBOX "&Always perform the selected action", 1004, 32, 143, 190, 8 + AUTOCHECKBOX "&Alltid utfшr den valgte handlingen", 1004, 32, 143, 190, 8 DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 - PUSHBUTTON "Cancel", IDCANCEL, 159, 160, 60, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 159, 160, 60, 14 END SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION -CAPTION "Shut Down ReactOS" +CAPTION "Slе av ReactOS" FONT 8, "MS Shell Dlg" BEGIN ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP - LTEXT "What do you want the computer to do?", -1, 39, 7, 167, 10 + LTEXT "Hva vil du at datamaskinen skal gjшre?", -1, 39, 7, 167, 10 COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL LTEXT "Maintains your session, keeping the computer running on low power with data still in memory. The computer wakes up when you press a key or move the mouse.", 8225, 39, 40, 167, 37 DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP - PUSHBUTTON "Cancel", IDCANCEL, 75, 82, 60, 14 - PUSHBUTTON "&Help", IDHELP, 144, 82, 60, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Hjelp", IDHELP, 144, 82, 60, 14 END FORMAT_DLG DIALOGEX 50, 50, 184, 218 @@ -528,33 +528,47 @@ CAPTION "Format" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Start", IDOK, 53, 198, 60, 14 - PUSHBUTTON "&Close", IDCANCEL, 118, 198, 60, 14 - LTEXT "Ca&pacity:", -1, 7, 6, 169, 9 + PUSHBUTTON "&Lukk", IDCANCEL, 118, 198, 60, 14 + LTEXT "Ka&pasitet:", -1, 7, 6, 169, 9 COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP - LTEXT "&File system", -1, 7, 35, 170, 9 + LTEXT "&Filsystem", -1, 7, 35, 170, 9 COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 LTEXT "&Allocation unit size", -1, 7, 64, 170, 9 COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP - LTEXT "Volume &label", -1, 7, 93, 170, 9 + LTEXT "Volum &label", -1, 7, 93, 170, 9 EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL - GROUPBOX "Format &options", 4610, 7, 121, 170, 49 - AUTOCHECKBOX "&Quick Format", 28674, 16, 135, 155, 10 - AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 + GROUPBOX "Formatterings &valg", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "&Rask formattering", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Utfшr komprimering", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 END IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION -CAPTION "Change Icon" +CAPTION "Endre Ikon" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN LTEXT "Filename:", -1, 7, 14, 208, 10 - PUSHBUTTON "Browse...",IDC_BUTTON_PATH, 148, 24,67,14 + PUSHBUTTON "Utforsk...",IDC_BUTTON_PATH, 148, 24,67,14 EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL LTEXT "Icons:", -1, 7, 47, 208, 10 LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 - PUSHBUTTON "Cancel",IDCANCEL, 167, 181, 50, 14 + PUSHBUTTON "Avbryt",IDCANCEL, 167, 181, 50, 14 END STRINGTABLE DISCARDABLE @@ -571,14 +585,25 @@ BEGIN IDS_SHV_COLUMN9 "Kommentarer" IDS_SHV_COLUMN10 "Eier" IDS_SHV_COLUMN11 "Gruppe" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Opprinnelig plassering" IDS_SHV_COLUMN_DELDATE "Dato slettet" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Skrivebord" IDS_MYCOMPUTER "Min datamaskin" IDS_RECYCLEBIN_FOLDER_NAME "Papirkurv" - IDS_CONTROLPANEL "Control Panel" + IDS_CONTROLPANEL "Kontrollpanel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "&Store ikoner" @@ -587,6 +612,12 @@ BEGIN IDS_VIEW_DETAILS "&Detaljer" IDS_SELECT "Velg" IDS_OPEN "Еpne" + IDS_CREATELINK "&Opprett snarvei" + IDS_COPY "&Kopier" + IDS_DELETE "&Slett" + IDS_PROPERTIES "Egenska&per" + IDS_CUT "Klipp &ut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Kunne ikke opprette ny mappe: tilgang nektet." IDS_CREATEFOLDER_CAPTION "Klarte ikke opprette ny mappe" @@ -599,18 +630,18 @@ BEGIN IDS_TRASHFOLDER_TEXT "Virkelig legge «%1» og alt innholdet i papirkurven?" IDS_TRASHMULTIPLE_TEXT "Virkelig legge disse %1 valgte elementene i papirkurven?" IDS_CANTTRASH_TEXT "Elementet «%1» kan ikke legges i papirkurven. Vil du slette det i stedet?" - IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?" + IDS_OVERWRITEFILE_TEXT "Denne mapppen innholder allerede en fil som heter '%1'.\n\nVil du overskrive denne?" IDS_OVERWRITEFILE_CAPTION "Bekreft overskriving av fil" - IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\ - "If the files in the destination folder have the same names as files in the\n"\ - "selected folder they will be replaced. Do you still want to move or copy\n"\ - "the folder?" + IDS_OVERWRITEFOLDER_TEXT "Denne mappen inneholder allerede en mappe som heter '%1'.\n\n"\ + "Hvis filene i destinasjon mappen har samme navn filer i \n"\ + "valgte mapper her vil bli overskrevet. Шnsker du fortsatt е flytte eller kopiere \n"\ + "denne mappen?" /* message box strings */ IDS_RESTART_TITLE "Starte pе nytt" - IDS_RESTART_PROMPT "Vil du simulere en omstart av Windows?" + IDS_RESTART_PROMPT "Vil du starte datamaskinen pе nytt?" IDS_SHUTDOWN_TITLE "Avslutt" - IDS_SHUTDOWN_PROMPT "Vil du avslutte Wine-шkten?" + IDS_SHUTDOWN_PROMPT "Vil du slе av datamaskinen?" /* shell folder path default values */ IDS_PROGRAMS "Start-meny\\Programmer" @@ -618,7 +649,7 @@ BEGIN IDS_FAVORITES "Favoritter" IDS_STARTUP "Start-meny\\Programmer\\Oppstart" IDS_RECENT "Siste" - IDS_SENDTO "SendTo" + IDS_SENDTO "SendTil" IDS_STARTMENU "Start-meny" IDS_MYMUSIC "Min musikk" IDS_MYVIDEO "Mine videoklipp" @@ -628,8 +659,8 @@ BEGIN IDS_APPDATA "Programdata" IDS_PRINTHOOD "Skrivere" IDS_LOCAL_APPDATA "Lokale innstillinger\\Programdata" - IDS_INTERNET_CACHE "Lokale innstillinger\\Temporary Internet Files" - IDS_COOKIES "Cookies" + IDS_INTERNET_CACHE "Lokale innstillinger\\Midligtidig internett filer" + IDS_COOKIES "Informasjonskapsel" IDS_HISTORY "Lokale innstillinger\\Logg" IDS_PROGRAM_FILES "Programfiler" IDS_MYPICTURES "Mine bilder" @@ -640,45 +671,44 @@ BEGIN IDS_COMMON_PICTURES "Dokumenter\\Mine bilder" IDS_COMMON_VIDEO "Dokumenter\\Mine videoklipp" IDS_CDBURN_AREA "Lokale innstillinger\\Programdata\\Microsoft\\CD Burning" - IDS_NETWORKPLACE "My Network Places" + IDS_NETWORKPLACE "Mine nettverkssteder" IDS_NEWFOLDER "Ny mappe" - IDS_DRIVE_FIXED "Local Disk" + IDS_DRIVE_FIXED "Lokal Disk" IDS_DRIVE_CDROM "CDROM" - IDS_DRIVE_NETWORK "Network Disk" + IDS_DRIVE_NETWORK "Nettverk disk" - IDS_OPEN_WITH "Open With" - IDS_OPEN_WITH_CHOOSE "Choose Program..." + IDS_OPEN_WITH "Еpne med" + IDS_OPEN_WITH_CHOOSE "Velg program..." - IDS_SHELL_ABOUT_AUTHORS "&Authors" - IDS_SHELL_ABOUT_BACK "< &Back" + IDS_SHELL_ABOUT_AUTHORS "&Forfatter" + IDS_SHELL_ABOUT_BACK "< &Tilbake" FCIDM_SHVIEW_NEW "Ny" FCIDM_SHVIEW_NEWFOLDER "Ny &mappe" FCIDM_SHVIEW_NEWLINK "Ny &snarvei" - IDS_FOLDER_OPTIONS "Folder Options" - IDS_RECYCLEBIN_LOCATION "Recycle Bin Location" - IDS_RECYCLEBIN_DISKSPACE "Space Available" - IDS_EMPTY_BITBUCKET "Empty Recycle Bin" - IDS_PICK_ICON_TITLE "Choose Icon" - IDS_PICK_ICON_FILTER "Icon Files(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" - IDS_OPEN_WITH_FILTER "Executable Files\0*.exe\0" - IDS_DIRECTORY "Folder" - IDS_VIRTUAL_DRIVER "Virtual Device Driver" - IDS_BAT_FILE "ReactOS Batch File" - IDS_CMD_FILE "ReactOS Command Script" - IDS_COM_FILE "Dos Application" - IDS_CPL_FILE "Control Panel Item" - IDS_CUR_FILE "Cursor" - IDS_DLL_FILE "Application Extension" - IDS_DRV_FILE "Device Driver" - IDS_EXE_FILE "Application" - IDS_FON_FILE "Font file" - IDS_TTF_FILE "TrueType Font file" - IDS_HLP_FILE "Help File" - IDS_INI_FILE "Configuration Settings" - IDS_LNK_FILE "Shortcut" - IDS_SYS_FILE "System file" + IDS_FOLDER_OPTIONS "Mappe valg" + IDS_RECYCLEBIN_LOCATION "Papirkurv localtion" + IDS_RECYCLEBIN_DISKSPACE "Ledig plass" + IDS_PICK_ICON_TITLE "Velg Ikon" + IDS_PICK_ICON_FILTER "Ikon Fil(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Kjшrbare filer\0*.exe\0" + IDS_DIRECTORY "Mappe" + IDS_VIRTUAL_DRIVER "Virtuell enhet driver" + IDS_BAT_FILE "ReactOS Batch fil" + IDS_CMD_FILE "ReactOS Kommando skript" + IDS_COM_FILE "Dos applikasjon" + IDS_CPL_FILE "Kontrollpanel enhet" + IDS_CUR_FILE "Markшr" + IDS_DLL_FILE "Applikasjon utvidelse" + IDS_DRV_FILE "Enhet driver" + IDS_EXE_FILE "Applikasjon" + IDS_FON_FILE "Skrift fil" + IDS_TTF_FILE "TrueType skrift fil" + IDS_HLP_FILE "Hjelp fil" + IDS_INI_FILE "Konfigurasjon innstilling" + IDS_LNK_FILE "Snarvei" + IDS_SYS_FILE "Systemfil" IDS_OPEN_VERB "Open" IDS_RUNAS_VERB "Run as " @@ -687,4 +717,11 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/pl-PL.rc b/reactos/dll/win32/shell32/lang/pl-PL.rc index d28d74843c2..2dd997f9dab 100644 --- a/reactos/dll/win32/shell32/lang/pl-PL.rc +++ b/reactos/dll/win32/shell32/lang/pl-PL.rc @@ -16,7 +16,8 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * - * translation updated by Caemyr - Olaf Siejka (Jan,Mar,Apr,Jul 2008) + * ReactOS shell32 fork translation updated by Caemyr - + * - Olaf Siejka (Jan,Mar,Apr,Jul, Aug 2008) * Use ReactOS forum PM or IRC to contact me * http://www.reactos.org * IRC: irc.freenode.net #reactos-pl; @@ -205,6 +206,27 @@ BEGIN PUSHBUTTON "Przerwij", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Ogуlne" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Rozszerzenie:", 14004, 8, 35, 50, 10 + LTEXT "Katalog", 14005, 68, 35, 160, 10 + LTEXT "Lokalizacja:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Rozmiar:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Zawiera:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Utworzony:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Tylko-do-odczytu", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Ukryty", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Ogуlne" @@ -343,14 +365,14 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Otwуrz za pomoc№" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 LTEXT "Wybierz program, ktуrego chcesz uїyж do otwarcia tego pliku:", -1, 44, 12, 211, 10 LTEXT "Plik: ", 14001, 44, 25, 188, 10 - GROUPBOX "&Programs", -1, 7, 42, 249, 187 + GROUPBOX "&Programy", -1, 7, 42, 249, 187 LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE AUTOCHECKBOX "&Zawsze uїywaj danego programu do otwierania tego typu plikуw", 14003, 20, 193, 225, 10 PUSHBUTTON "&Przegl№daj", 14004, 198, 207, 50, 14 @@ -549,6 +571,20 @@ BEGIN AUTOCHECKBOX "&Wі№cz kompresjк", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Zmiana Ikony" @@ -577,14 +613,25 @@ BEGIN IDS_SHV_COLUMN9 "Komentarz" IDS_SHV_COLUMN10 "Wіaњciciel" IDS_SHV_COLUMN11 "Grupa" - IDS_SHV_COLUMN_DELFROM "Lokacja oryginalna" + IDS_SHV_COLUMN12 "Nazwa pliku" + IDS_SHV_COLUMN13 "Kategoria" + IDS_SHV_COLUMN_DELFROM "Lokalizacja oryginalna" IDS_SHV_COLUMN_DELDATE "Data usuniкcia" + IDS_SHV_COLUMN_FONTTYPE "Czcionka" + IDS_SHV_COLUMN_WORKGROUP "Grupa Robocza" + IDS_SHV_NETWORKLOCATION "Lokalizacja Sieciowa" + IDS_SHV_COLUMN_DOCUMENTS "Dokumenty" + IDS_SHV_COLUMN_STATUS "Stan" + IDS_SHV_COLUMN_COMMENTS "Komentarze" + IDS_SHV_COLUMN_LOCATION "Lokalizacja" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Pulpit" IDS_MYCOMPUTER "Mуj komputer" IDS_RECYCLEBIN_FOLDER_NAME "Kosz" IDS_CONTROLPANEL "Panel Sterowania" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "&Duїe Ikony" @@ -593,6 +640,12 @@ BEGIN IDS_VIEW_DETAILS "&Szczegуіy" IDS_SELECT "Zaznacz" IDS_OPEN "Otwуrz" + IDS_CREATELINK "Utwуrz &Skrуt" + IDS_COPY "Kopiuj" + IDS_DELETE "Usuс" + IDS_PROPERTIES "Wіaњciwoњci" + IDS_CUT "Wytnij" + IDS_RESTORE "Przywrуж" IDS_CREATEFOLDER_DENIED "Nie mogк utworzyж nowego katalogu: Brak dostкpu." IDS_CREATEFOLDER_CAPTION "Bі№d przy tworzeniu nowego katalogu." @@ -693,4 +746,11 @@ BEGIN IDS_PRINT_VERB "Drukuj" IDS_PLAY_VERB "Odtwуrz" IDS_PREVIEW_VERB "Podgl№d" + + IDS_FILE_FOLDER "%u Plikуw, %u Katalogуw" + IDS_PRINTERS "Drukarki" + IDS_FONTS "Czcionki" + IDS_INSTALLNEWFONT "Zainstaluj Now№ Czcionkк..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/pt-BR.rc b/reactos/dll/win32/shell32/lang/pt-BR.rc index dcf0c3cdea4..da7a4a4f932 100644 --- a/reactos/dll/win32/shell32/lang/pt-BR.rc +++ b/reactos/dll/win32/shell32/lang/pt-BR.rc @@ -201,6 +201,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -339,7 +360,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN @@ -545,6 +566,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" @@ -573,14 +608,25 @@ BEGIN IDS_SHV_COLUMN9 "Comentбrios" IDS_SHV_COLUMN10 "Dono" IDS_SHV_COLUMN11 "Grupo" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Бrea de trabalho" IDS_MYCOMPUTER "Meu computador" IDS_RECYCLEBIN_FOLDER_NAME "Trash" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "Нcones &grandes" @@ -589,6 +635,12 @@ BEGIN IDS_VIEW_DETAILS "&Detalhes" IDS_SELECT "Selecionar" IDS_OPEN "Abrir" + IDS_CREATELINK "Criar a&talho" + IDS_COPY "&Copiar" + IDS_DELETE "E&xcluir" + IDS_PROPERTIES "Propriedades" + IDS_CUT "C&ortar" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Nгo pode criar nova pasta: Permissгo negada." IDS_CREATEFOLDER_CAPTION "Erro durante a criaзгo da nova pasta" @@ -689,4 +741,11 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/pt-PT.rc b/reactos/dll/win32/shell32/lang/pt-PT.rc index fbfad2a7ddc..cc6c78f9a42 100644 --- a/reactos/dll/win32/shell32/lang/pt-PT.rc +++ b/reactos/dll/win32/shell32/lang/pt-PT.rc @@ -201,6 +201,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -339,7 +360,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN @@ -545,6 +566,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" @@ -573,14 +608,25 @@ BEGIN IDS_SHV_COLUMN9 "Comentбrios" IDS_SHV_COLUMN10 "Dono" IDS_SHV_COLUMN11 "Grupo" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Ambiente de trabalho" IDS_MYCOMPUTER "O Meu Computador" IDS_RECYCLEBIN_FOLDER_NAME "Trash" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "Нcones &grandes" @@ -589,6 +635,12 @@ BEGIN IDS_VIEW_DETAILS "&Detalhes" IDS_SELECT "Seleccionar" IDS_OPEN "Abrir" + IDS_CREATELINK "Create &Link" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Nгo й possнvel criar nova pasta: Permissгo negada." IDS_CREATEFOLDER_CAPTION "Erro durante a criaзгo da nova pasta" @@ -689,4 +741,11 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/ru-RU.rc b/reactos/dll/win32/shell32/lang/ru-RU.rc index 8e414908e47..5da6844743f 100644 --- a/reactos/dll/win32/shell32/lang/ru-RU.rc +++ b/reactos/dll/win32/shell32/lang/ru-RU.rc @@ -200,6 +200,27 @@ BEGIN PUSHBUTTON "Отмена", IDCANCEL, 120, 123, 50, 14, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Общие" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Тип файла:", 14004, 8, 35, 50, 10 + LTEXT "Папка", 14005, 68, 35, 160, 10 + LTEXT "Расположение:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Размер:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Содержит:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Создано:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Только чтение", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Скрыто", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Общие" @@ -337,7 +358,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Выбор программы" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN @@ -542,6 +563,20 @@ BEGIN AUTOCHECKBOX "&Использовать сжатие", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Изменение значка" @@ -570,14 +605,25 @@ BEGIN IDS_SHV_COLUMN9 "Комментарий" IDS_SHV_COLUMN10 "Владелец" IDS_SHV_COLUMN11 "Группа" + IDS_SHV_COLUMN12 "Имя файла" + IDS_SHV_COLUMN13 "Категория" IDS_SHV_COLUMN_DELFROM "Изначальное расположение" IDS_SHV_COLUMN_DELDATE "Дата удаления" + IDS_SHV_COLUMN_FONTTYPE "Тип шрифта" + IDS_SHV_COLUMN_WORKGROUP "Рабочая группа" + IDS_SHV_NETWORKLOCATION "Сетевое расположение" + IDS_SHV_COLUMN_DOCUMENTS "Документы" + IDS_SHV_COLUMN_STATUS "Состояние" + IDS_SHV_COLUMN_COMMENTS "Коментарии" + IDS_SHV_COLUMN_LOCATION "Расположение" + IDS_SHV_COLUMN_MODEL "Модель" /* special folders */ IDS_DESKTOP "Рабочий стол" IDS_MYCOMPUTER "Мой компьютер" IDS_RECYCLEBIN_FOLDER_NAME "Корзина" IDS_CONTROLPANEL "Панель управления" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "&Большие значки" @@ -586,6 +632,12 @@ BEGIN IDS_VIEW_DETAILS "&Подробно" IDS_SELECT "&Выбрать" IDS_OPEN "&Открыть" + IDS_CREATELINK "Создать &ярлык" + IDS_COPY "Копировать" + IDS_DELETE "Удалить" + IDS_PROPERTIES "Свойства" + IDS_CUT "Вырезать" + IDS_RESTORE "Востановить" IDS_CREATEFOLDER_DENIED "Невозможно создать папку - нет полномочий." IDS_CREATEFOLDER_CAPTION "Ошибка во время создания папки" @@ -678,11 +730,18 @@ BEGIN IDS_LNK_FILE "Ярлык" IDS_SYS_FILE "Системный файл" - IDS_OPEN_VERB "Open" - IDS_RUNAS_VERB "Run as " - IDS_EDIT_VERB "Edit" - IDS_FIND_VERB "Find" - IDS_PRINT_VERB "Print" - IDS_PLAY_VERB "Play" - IDS_PREVIEW_VERB "Preview" + IDS_OPEN_VERB "Открыть" + IDS_RUNAS_VERB "Запустить как " + IDS_EDIT_VERB "Изменить" + IDS_FIND_VERB "Поиск" + IDS_PRINT_VERB "Печать" + IDS_PLAY_VERB "Воспроизвести" + IDS_PREVIEW_VERB "Предпросмотр" + + IDS_FILE_FOLDER "%u файлов, %u папок" + IDS_PRINTERS "Принтеры" + IDS_FONTS "Шрифты" + IDS_INSTALLNEWFONT "Установить новый шрифт..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/sk-SK.rc b/reactos/dll/win32/shell32/lang/sk-SK.rc index 15143b58cc7..d8ebb75e35f 100644 --- a/reactos/dll/win32/shell32/lang/sk-SK.rc +++ b/reactos/dll/win32/shell32/lang/sk-SK.rc @@ -1,7 +1,7 @@ /* TRANSLATOR : Mбrio Kaиmбr /Mario Kacmar/ aka Kario (kario@szm.sk) * NOTE : partially translated * TRANSLATED : 26-12-2007 - * LAST CHANGE: 07-07-2008 + * LAST CHANGE: 30-07-2008 */ /* @@ -205,6 +205,27 @@ BEGIN PUSHBUTTON "Preruљiќ", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Vљeobecnй" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Typ:", 14004, 8, 35, 50, 10 + LTEXT "Prieиinok", 14005, 68, 35, 160, 10 + LTEXT "Umiestnenie:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Veѕkosќ:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Obsahuje:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Vytvorenэ:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Iba na инtanie", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Skrytэ", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Vљeobecnй" @@ -220,15 +241,15 @@ BEGIN LTEXT "", 14009, 68, 72, 315, 10 LTEXT "Veѕkosќ:", 14010, 8, 93, 45, 10 LTEXT "", 14011, 68, 93, 160, 10 - LTEXT "Vytvorenй:", 14014, 8, 118, 45, 10 + LTEXT "Vytvorenэ:", 14014, 8, 118, 45, 10 LTEXT "", 14015, 68, 118, 160, 10 - LTEXT "Zmenenй:", 14016, 8, 140, 45, 10 + LTEXT "Zmenenэ:", 14016, 8, 140, 45, 10 LTEXT "", 14017, 68, 140, 160, 10 - LTEXT "Otvorenй:", 14018, 8, 160, 45, 10 + LTEXT "Otvorenэ:", 14018, 8, 160, 45, 10 LTEXT "", 14019, 68, 160, 160, 10 LTEXT "Atribъty:", 14020, 8, 189, 45, 10 CHECKBOX "&Iba na инtanie", 14021, 58, 189, 67, 10 - CHECKBOX "S&krytэ", 14022, 126, 189, 50, 10 + CHECKBOX "&Skrytэ", 14022, 126, 189, 50, 10 CHECKBOX "&Archнvny", 14023, 181, 189, 49, 10 END @@ -278,10 +299,10 @@ BEGIN CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 - LTEXT "Jednotka %s", 14010, 100, 170, 40, 10 + LTEXT "Jednotka %s", 14010, 100, 170, 45, 10 PUSHBUTTON "&Иistenie disku", 14011, 180, 175, 50, 15, WS_TABSTOP CHECKBOX "Uљetriќ miesto na disku &kompresiou jednotky", 14012, 15, 205, 180, 10, WS_DISABLED - CHECKBOX "&Povoliќ indexovanie pre tento disk, a zrэchliќ tak hѕadanie sъborov", 14012, 15, 220, 200, 10, WS_DISABLED + CHECKBOX "&Povoliќ indexovanie pre tento disk, a zrэchliќ tak hѕadanie sъborov", 14012, 15, 220, 220, 10, WS_DISABLED END DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 @@ -339,11 +360,11 @@ BEGIN EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER LTEXT "&Maximбlna veѕkosќ (MB):", -1, 20, 105, 70, 10 RADIOBUTTON "Sъbory nepremiestтovaќ do &koљa. Zmazanй sъbory hneп odstrбniќ.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP - AUTOCHECKBOX "Zobrazovaќ &dialуgovй okno potvrdenia odstrбnenia", 14004, 20, 155, 140, 10, WS_TABSTOP + AUTOCHECKBOX "Zobrazovaќ &dialуgovй okno potvrdenia odstrбnenia", 14004, 20, 155, 196, 10, WS_TABSTOP END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Otvoriќ v programe" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN @@ -549,6 +570,20 @@ BEGIN AUTOCHECKBOX "Z&apnъќ kompresiu", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Zmena ikony" @@ -577,14 +612,25 @@ BEGIN IDS_SHV_COLUMN9 "Poznбmky" //Comments IDS_SHV_COLUMN10 "Vlastnнk" IDS_SHV_COLUMN11 "Skupina" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Pфvod" //Pфvodnй umiestnenie IDS_SHV_COLUMN_DELDATE "Odstrбnenэ" //Dбtum zmazania + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Pracovnб plocha" IDS_MYCOMPUTER "Tento poинtaи" IDS_RECYCLEBIN_FOLDER_NAME "Kфљ" IDS_CONTROLPANEL "Ovlбdacн panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "&Veѕkй ikony" @@ -593,6 +639,12 @@ BEGIN IDS_VIEW_DETAILS "&Podrobnosti" IDS_SELECT "Vybraќ" IDS_OPEN "Otvoriќ" + IDS_CREATELINK "Vytvoriќ o&dkaz" + IDS_COPY "&Kopнrova" + IDS_DELETE "&Odstrбni" + IDS_PROPERTIES "Vl&astnosti" + IDS_CUT "&Vystrihnъќ" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Nie je moћnй vytvoriќ novэ prieиinok: Prнstup zamietnutэ." IDS_CREATEFOLDER_CAPTION "Chyba poиas vytvбrania novйho prieиinka" @@ -693,4 +745,11 @@ BEGIN IDS_PRINT_VERB "Tlaиiќ" IDS_PLAY_VERB "Prehraќ" IDS_PREVIEW_VERB "Preview" //Nбhѕad, Ukбћka, Prezrieќ ??? + + IDS_FILE_FOLDER "sъbory: %u, prieиinky: %u" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/sl-SI.rc b/reactos/dll/win32/shell32/lang/sl-SI.rc index 5ae50fa8b27..9ce5ceb6723 100644 --- a/reactos/dll/win32/shell32/lang/sl-SI.rc +++ b/reactos/dll/win32/shell32/lang/sl-SI.rc @@ -199,6 +199,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -337,7 +358,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN @@ -543,6 +564,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" @@ -571,14 +606,25 @@ BEGIN IDS_SHV_COLUMN9 "Comments" IDS_SHV_COLUMN10 "Owner" IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Desktop" IDS_MYCOMPUTER "My Computer" IDS_RECYCLEBIN_FOLDER_NAME "Trash" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "Lar&ge Icons" @@ -587,6 +633,12 @@ BEGIN IDS_VIEW_DETAILS "&Details" IDS_SELECT "Select" IDS_OPEN "Open" + IDS_CREATELINK "Create &Link" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" @@ -687,4 +739,11 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/sv-SE.rc b/reactos/dll/win32/shell32/lang/sv-SE.rc index 20a778f8f1c..b5edf7351f2 100644 --- a/reactos/dll/win32/shell32/lang/sv-SE.rc +++ b/reactos/dll/win32/shell32/lang/sv-SE.rc @@ -199,6 +199,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -337,7 +358,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN @@ -543,6 +564,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" @@ -571,14 +606,25 @@ BEGIN IDS_SHV_COLUMN9 "Comments" IDS_SHV_COLUMN10 "Owner" IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Desktop" IDS_MYCOMPUTER "My Computer" IDS_RECYCLEBIN_FOLDER_NAME "Trash" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "Lar&ge Icons" @@ -587,6 +633,12 @@ BEGIN IDS_VIEW_DETAILS "&Details" IDS_SELECT "Select" IDS_OPEN "Open" + IDS_CREATELINK "Create &Link" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" @@ -687,4 +739,11 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/tr-TR.rc b/reactos/dll/win32/shell32/lang/tr-TR.rc index a1d1e38fc26..3c0c50e5b12 100644 --- a/reactos/dll/win32/shell32/lang/tr-TR.rc +++ b/reactos/dll/win32/shell32/lang/tr-TR.rc @@ -199,6 +199,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -337,7 +358,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN @@ -543,6 +564,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" @@ -571,14 +606,25 @@ BEGIN IDS_SHV_COLUMN9 "Aзэklamalar" IDS_SHV_COLUMN10 "Sahip" IDS_SHV_COLUMN11 "Grup" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Цzgьn konum" IDS_SHV_COLUMN_DELDATE "Silinme tarihi" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Masaьstь" IDS_MYCOMPUTER "Bilgisayarэm" IDS_RECYCLEBIN_FOLDER_NAME "Зцp" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "Bь&yьk Simgeler" @@ -587,6 +633,12 @@ BEGIN IDS_VIEW_DETAILS "&Ayrэntэlэ" IDS_SELECT "Seз" IDS_OPEN "Aз" + IDS_CREATELINK "Kэsayol O&luюtur" + IDS_COPY "K&opyala" + IDS_DELETE "&Sil" + IDS_PROPERTIES "&Цzellikler" + IDS_CUT "&Kes" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Yeni dizin oluюturulamэyor: Eriюim engellendi." IDS_CREATEFOLDER_CAPTION "Dizin oluюturma sэrasэnda hata" @@ -687,4 +739,11 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/uk-UA.rc b/reactos/dll/win32/shell32/lang/uk-UA.rc index 7fc6a01b726..f1fd47c86f6 100644 --- a/reactos/dll/win32/shell32/lang/uk-UA.rc +++ b/reactos/dll/win32/shell32/lang/uk-UA.rc @@ -200,6 +200,27 @@ BEGIN PUSHBUTTON "Скасувати", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Загальні" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Загальні" @@ -544,6 +565,20 @@ BEGIN AUTOCHECKBOX "&Використовувати стискання", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Зміна значка" @@ -572,13 +607,25 @@ BEGIN IDS_SHV_COLUMN9 "Примітка" IDS_SHV_COLUMN10 "Власник" IDS_SHV_COLUMN11 "Група" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Вихідне розташування" IDS_SHV_COLUMN_DELDATE "Дата видалення" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Робочий стіл" IDS_MYCOMPUTER "Мій Комп'ютер" IDS_RECYCLEBIN_FOLDER_NAME "Кошик" + IDS_CONTROLPANEL "Панель керування" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "&Великі значки" @@ -587,7 +634,12 @@ BEGIN IDS_VIEW_DETAILS "&Подробиці" IDS_SELECT "Ви&брати" IDS_OPEN "Ві&дкрити" - IDS_CONTROLPANEL "Панель керування" + IDS_CREATELINK "Створити &ярлик" + IDS_COPY "&Копіювати" + IDS_DELETE "В&идалити" + IDS_PROPERTIES "В&ластивості" + IDS_CUT "&Вирізати" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Не вдалося створити нову папку: Відмова у доступі." IDS_CREATEFOLDER_CAPTION "Помилка при створенні нової папки" @@ -688,4 +740,11 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/zh-CN.rc b/reactos/dll/win32/shell32/lang/zh-CN.rc index 2df6b1d923f..e67b019a999 100644 --- a/reactos/dll/win32/shell32/lang/zh-CN.rc +++ b/reactos/dll/win32/shell32/lang/zh-CN.rc @@ -188,6 +188,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -326,7 +347,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN @@ -532,6 +553,20 @@ BEGIN AUTOCHECKBOX "ЖфУГС№Лх(&E)", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "ёьёДНј±к" @@ -560,14 +595,25 @@ BEGIN IDS_SHV_COLUMN9 "Comments" IDS_SHV_COLUMN10 "Owner" IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "ЧАГж" IDS_MYCOMPUTER "ОТµДµзДФ" IDS_RECYCLEBIN_FOLDER_NAME "»ШКХХѕ" IDS_CONTROLPANEL "їШЦЖГж°е" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "ґуНј±к(&G)" @@ -576,6 +622,12 @@ BEGIN IDS_VIEW_DETAILS "ПкПёРЕПў(&D)" IDS_SELECT "Select" IDS_OPEN "Open" + IDS_CREATELINK "ґґЅЁїмЅЭ·ЅКЅ(&L)" + IDS_COPY "ёґЦЖ(&C)" + IDS_DELETE "Йѕіэ(&D)" + IDS_PROPERTIES "КфРФ(&P)" + IDS_CUT "јфЗР(&U)" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" @@ -667,5 +719,20 @@ BEGIN IDS_INI_FILE "Configuration Settings" IDS_LNK_FILE "Shortcut" IDS_SYS_FILE "System file" + + IDS_OPEN_VERB "Open" + IDS_RUNAS_VERB "Run as " + IDS_EDIT_VERB "Edit" + IDS_FIND_VERB "Find" + IDS_PRINT_VERB "Print" + IDS_PLAY_VERB "Play" + IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/zh-TW.rc b/reactos/dll/win32/shell32/lang/zh-TW.rc index 3099bf47f4b..e76c86a85ec 100644 --- a/reactos/dll/win32/shell32/lang/zh-TW.rc +++ b/reactos/dll/win32/shell32/lang/zh-TW.rc @@ -200,6 +200,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -338,7 +359,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN @@ -544,6 +565,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" @@ -572,14 +607,25 @@ BEGIN IDS_SHV_COLUMN9 "Comments" IDS_SHV_COLUMN10 "Owner" IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Desktop" IDS_MYCOMPUTER "My Computer" IDS_RECYCLEBIN_FOLDER_NAME "Trash" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "Lar&ge Icons" @@ -588,6 +634,12 @@ BEGIN IDS_VIEW_DETAILS "&Details" IDS_SELECT "Select" IDS_OPEN "Open" + IDS_CREATELINK "Create &Link" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" @@ -688,6 +740,14 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" + END #pragma code_page(default) diff --git a/reactos/dll/win32/shell32/pidl.c b/reactos/dll/win32/shell32/pidl.c index 9cf62ce0d94..452e85695e7 100644 --- a/reactos/dll/win32/shell32/pidl.c +++ b/reactos/dll/win32/shell32/pidl.c @@ -1387,21 +1387,7 @@ LPITEMIDLIST _ILCreateControlPanel(void) LPITEMIDLIST _ILCreatePrinters(void) { - LPITEMIDLIST parent = _ILCreateGuid(PT_GUID, &CLSID_MyComputer), ret = NULL; - - TRACE("()\n"); - if (parent) - { - LPITEMIDLIST printers = _ILCreateGuid(PT_YAGUID, &CLSID_Printers); - - if (printers) - { - ret = ILCombine(parent, printers); - SHFree(printers); - } - SHFree(parent); - } - return ret; + return _ILCreateGuid(PT_YAGUID, &CLSID_Printers); } LPITEMIDLIST _ILCreateNetwork(void) @@ -1416,6 +1402,12 @@ LPITEMIDLIST _ILCreateBitBucket(void) return _ILCreateGuid(PT_GUID, &CLSID_RecycleBin); } +LPITEMIDLIST _ILCreateAdminTools(void) +{ + TRACE("()\n"); + return _ILCreateGuid(PT_GUID, &CLSID_AdminFolderShortcut); +} + LPITEMIDLIST _ILCreateGuid(PIDLTYPE type, REFIID guid) { LPITEMIDLIST pidlOut; @@ -1643,6 +1635,11 @@ LPITEMIDLIST _ILCreateNetHood(void) return _ILCreateGuid(PT_GUID, &CLSID_NetworkPlaces); } +LPITEMIDLIST _ILCreateFont(void) +{ + + return _ILCreateGuid(PT_GUID, &CLSID_FontsFolderShortcut); +} BOOL _ILIsMyComputer(LPCITEMIDLIST pidl) { @@ -1666,6 +1663,18 @@ BOOL _ILIsBitBucket(LPCITEMIDLIST pidl) return FALSE; } +BOOL _ILIsAdminTools(LPCITEMIDLIST pidl) +{ + REFIID iid = _ILGetGUIDPointer(pidl); + + TRACE("(%p)\n",pidl); + + if (iid) + return IsEqualIID(iid, &CLSID_AdminFolderShortcut); + else + return FALSE; +} + BOOL _ILIsSpecialFolder (LPCITEMIDLIST pidl) { LPPIDLDATA lpPData = _ILGetDataPointer(pidl); diff --git a/reactos/dll/win32/shell32/pidl.h b/reactos/dll/win32/shell32/pidl.h index 148d901859d..eee285e16a5 100644 --- a/reactos/dll/win32/shell32/pidl.h +++ b/reactos/dll/win32/shell32/pidl.h @@ -107,6 +107,7 @@ #define PT_IESPECIAL2 0xb1 #define PT_SHARE 0xc3 + #include "pshpack1.h" typedef BYTE PIDLTYPE; @@ -119,6 +120,31 @@ typedef struct tagPIDLCPanelStruct CHAR szName[1]; /*10*/ /* terminated by 0x00, followed by display name and comment string */ } PIDLCPanelStruct; +typedef struct tagPIDLFontStruct +{ + BYTE dummy; + WORD offsFile; + WCHAR szName[1]; +} PIDLFontStruct; + +typedef struct tagPIDLPrinterStruct +{ + BYTE dummy; + DWORD Attributes; + WORD offsServer; + WCHAR szName[1]; +}PIDLPrinterStruct; + +typedef struct tagPIDLRecycleStruct +{ + FILETIME LastModification; + FILETIME DeletionTime; + ULARGE_INTEGER FileSize; + ULARGE_INTEGER PhysicalFileSize; + DWORD Attributes; + WCHAR szName[1]; +}PIDLRecycleStruct; + typedef struct tagGUIDStruct { BYTE dummy; /* offset 01 is unknown */ @@ -179,7 +205,10 @@ typedef struct tagPIDLDATA CHAR szName[1]; /*06*/ /* terminated by 0x00 0x00 */ } htmlhelp; struct tagPIDLCPanelStruct cpanel; - struct tagValueW valueW; + struct tagValueW valueW; + struct tagPIDLFontStruct cfont; + struct tagPIDLPrinterStruct cprinter; + struct tagPIDLRecycleStruct crecycle; }u; } PIDLDATA, *LPPIDLDATA; #include "poppack.h" @@ -207,6 +236,7 @@ BOOL _ILIsMyComputer (LPCITEMIDLIST pidl); BOOL _ILIsMyDocuments (LPCITEMIDLIST pidl); BOOL _ILIsControlPanel (LPCITEMIDLIST pidl); BOOL _ILIsBitBucket (LPCITEMIDLIST pidl); +BOOL _ILIsAdminTools (LPCITEMIDLIST pidl); BOOL _ILIsNetHood (LPCITEMIDLIST pidl); BOOL _ILIsDrive (LPCITEMIDLIST pidl); BOOL _ILIsFolder (LPCITEMIDLIST pidl); @@ -255,7 +285,9 @@ LPITEMIDLIST _ILCreateIExplore (void); LPITEMIDLIST _ILCreateControlPanel (void); LPITEMIDLIST _ILCreatePrinters (void); LPITEMIDLIST _ILCreateNetwork (void); -LPITEMIDLIST _ILCreateNetHood (void); +LPITEMIDLIST _ILCreateNetHood (void); +LPITEMIDLIST _ILCreateAdminTools (void); +LPITEMIDLIST _ILCreateFont (void); LPITEMIDLIST _ILCreateBitBucket (void); LPITEMIDLIST _ILCreateDrive (LPCWSTR); diff --git a/reactos/dll/win32/shell32/regsvr.c b/reactos/dll/win32/shell32/regsvr.c index 1af1893301f..c127059a5ec 100644 --- a/reactos/dll/win32/shell32/regsvr.c +++ b/reactos/dll/win32/shell32/regsvr.c @@ -602,24 +602,62 @@ static struct regsvr_coclass const coclass_list[] = { }, { &CLSID_Printers, "Printers & Fax", - 0, + IDS_PRINTERS, + NULL, + "shell32.dll", + "Apartment", + SHELLFOLDER_ATTRIBUTES, + SFGAO_FOLDER, + 0, + NULL, + NULL, + IDI_SHELL_PRINTER + }, + { &CLSID_MyComputer, + "My Computer", + IDS_MYCOMPUTER, NULL, "shell32.dll", "Apartment" }, - { &CLSID_MyComputer, - "My Computer", - IDS_MYCOMPUTER, - NULL, - "shell32.dll", - "Apartment" - }, { &CLSID_NetworkPlaces, - "My Network Places", - IDS_NETWORKPLACE, - NULL, - "shell32.dll", - "Apartment" + "My Network Places", + IDS_NETWORKPLACE, + NULL, + "shell32.dll", + "Apartment", + SHELLFOLDER_ATTRIBUTES, + SFGAO_FOLDER, + 0, + NULL, + NULL, + IDI_SHELL_MY_NETWORK_PLACES + }, + { &CLSID_FontsFolderShortcut, + "Fonts", + IDS_FONTS, + NULL, + "shell32.dll", + "Apartment", + SHELLFOLDER_ATTRIBUTES, + SFGAO_FOLDER, + 0, + NULL, + NULL, + IDI_SHELL_FONTS_FOLDER + }, + { &CLSID_AdminFolderShortcut, + "Administrative Tools", + IDS_ADMINISTRATIVETOOLS, + NULL, + "shell32.dll", + "Apartment", + SHELLFOLDER_ATTRIBUTES, + SFGAO_FOLDER, + 0, + NULL, + NULL, + IDI_SHELL_ADMINTOOLS //FIXME }, { &CLSID_Shortcut, "Shortcut", @@ -730,7 +768,10 @@ static const WCHAR wszRecycleBin[] = { 'T','r','a','s','h', 0 }; static const WCHAR wszMyComputer[] = { 'M','y','C','o','m','p','u','t','e','r',0 }; static const WCHAR wszControlPanel[] = { 'C','o','n','t','r','o','l','P','a','n','e','l',0 }; static const WCHAR wszFolderOptions[] = { 'F','o','l','d','e','r',' ','O','p','t','i','o','n','s',0 }; - +static const WCHAR wszNethoodFolder[] = { 'N','e','t','h','o','o','d',' ','f','o','l','d','e','r',0}; +static const WCHAR wszPrinters[] = { 'P','r','i','n','t','e','r','s',0 }; +static const WCHAR wszFonts[] = { 'F','o','n','t','s',0 }; +static const WCHAR wszAdminTools[] = { 'A','d','m','i','n','T','o','o','l','s',0 }; const GUID CLSID_FolderOptions = { 0x6DFD7C5C, 0x2451, 0x11d3, {0xa2,0x99,0x00,0xC0,0x4F,0x8e,0xf6,0xaf} }; static struct regsvr_namespace const namespace_extensions_list[] = { @@ -746,6 +787,11 @@ static struct regsvr_namespace const namespace_extensions_list[] = { wszDesktop, wszMyDocuments }, + { + &CLSID_NetworkPlaces, + wszDesktop, + wszNethoodFolder + }, { &CLSID_RecycleBin, wszDesktop, @@ -761,13 +807,21 @@ static struct regsvr_namespace const namespace_extensions_list[] = { wszControlPanel, wszFolderOptions }, -#if 0 + { + &CLSID_FontsFolderShortcut, + wszControlPanel, + wszFonts + }, { &CLSID_Printers, wszControlPanel, wszPrinters }, -#endif + { + &CLSID_AdminFolderShortcut, + wszControlPanel, + wszAdminTools + }, { NULL } }; diff --git a/reactos/dll/win32/shell32/res/icons/172.ico b/reactos/dll/win32/shell32/res/icons/172.ico index 2dfb1d7d2ab..cf3a1413d1d 100644 Binary files a/reactos/dll/win32/shell32/res/icons/172.ico and b/reactos/dll/win32/shell32/res/icons/172.ico differ diff --git a/reactos/dll/win32/shell32/res/icons/20.ico b/reactos/dll/win32/shell32/res/icons/20.ico index 6778c565e3f..4174b5fb88f 100644 Binary files a/reactos/dll/win32/shell32/res/icons/20.ico and b/reactos/dll/win32/shell32/res/icons/20.ico differ diff --git a/reactos/dll/win32/shell32/res/icons/236.ico b/reactos/dll/win32/shell32/res/icons/236.ico index 4724c8c5c7e..59b8aef43ab 100644 Binary files a/reactos/dll/win32/shell32/res/icons/236.ico and b/reactos/dll/win32/shell32/res/icons/236.ico differ diff --git a/reactos/dll/win32/shell32/res/icons/237.ico b/reactos/dll/win32/shell32/res/icons/237.ico index c73c7893e11..38f4843bc95 100644 Binary files a/reactos/dll/win32/shell32/res/icons/237.ico and b/reactos/dll/win32/shell32/res/icons/237.ico differ diff --git a/reactos/dll/win32/shell32/res/icons/238.ico b/reactos/dll/win32/shell32/res/icons/238.ico index aef8e931462..6acb384ab57 100644 Binary files a/reactos/dll/win32/shell32/res/icons/238.ico and b/reactos/dll/win32/shell32/res/icons/238.ico differ diff --git a/reactos/dll/win32/shell32/res/icons/315.ico b/reactos/dll/win32/shell32/res/icons/315.ico index 5cb813f2d07..631a88c90cf 100644 Binary files a/reactos/dll/win32/shell32/res/icons/315.ico and b/reactos/dll/win32/shell32/res/icons/315.ico differ diff --git a/reactos/dll/win32/shell32/res/icons/319.ico b/reactos/dll/win32/shell32/res/icons/319.ico index 41040d9188d..a3324fe62e1 100644 Binary files a/reactos/dll/win32/shell32/res/icons/319.ico and b/reactos/dll/win32/shell32/res/icons/319.ico differ diff --git a/reactos/dll/win32/shell32/res/icons/32.ico b/reactos/dll/win32/shell32/res/icons/32.ico index 2a5bf8d0004..578ab0123af 100644 Binary files a/reactos/dll/win32/shell32/res/icons/32.ico and b/reactos/dll/win32/shell32/res/icons/32.ico differ diff --git a/reactos/dll/win32/shell32/res/icons/326.ico b/reactos/dll/win32/shell32/res/icons/326.ico index 4d9041a5111..0d901c550d4 100644 Binary files a/reactos/dll/win32/shell32/res/icons/326.ico and b/reactos/dll/win32/shell32/res/icons/326.ico differ diff --git a/reactos/dll/win32/shell32/res/icons/33.ico b/reactos/dll/win32/shell32/res/icons/33.ico index 5276b06bd97..df31dc28d1b 100644 Binary files a/reactos/dll/win32/shell32/res/icons/33.ico and b/reactos/dll/win32/shell32/res/icons/33.ico differ diff --git a/reactos/dll/win32/shell32/res/icons/37.ico b/reactos/dll/win32/shell32/res/icons/37.ico index 6778c565e3f..f5953fe9a32 100644 Binary files a/reactos/dll/win32/shell32/res/icons/37.ico and b/reactos/dll/win32/shell32/res/icons/37.ico differ diff --git a/reactos/dll/win32/shell32/res/icons/46.ico b/reactos/dll/win32/shell32/res/icons/46.ico index 639935d2bf7..bc5711c71a0 100644 Binary files a/reactos/dll/win32/shell32/res/icons/46.ico and b/reactos/dll/win32/shell32/res/icons/46.ico differ diff --git a/reactos/dll/win32/shell32/res/icons/48.ico b/reactos/dll/win32/shell32/res/icons/48.ico index 0422e2b8172..f1f858eb2c0 100644 Binary files a/reactos/dll/win32/shell32/res/icons/48.ico and b/reactos/dll/win32/shell32/res/icons/48.ico differ diff --git a/reactos/dll/win32/shell32/res/icons/5.ico b/reactos/dll/win32/shell32/res/icons/5.ico index 066d5ddca2c..7fd4302eb78 100644 Binary files a/reactos/dll/win32/shell32/res/icons/5.ico and b/reactos/dll/win32/shell32/res/icons/5.ico differ diff --git a/reactos/dll/win32/shell32/shell32.rbuild b/reactos/dll/win32/shell32/shell32.rbuild index 6011eb59060..991848772af 100644 --- a/reactos/dll/win32/shell32/shell32.rbuild +++ b/reactos/dll/win32/shell32/shell32.rbuild @@ -24,6 +24,7 @@ version devmgr winspool + winmm authors.c autocomplete.c brsfolder.c @@ -35,6 +36,7 @@ dataobject.c dde.c debughlp.c + desktop.c dialogs.c dragdrophelper.c enumidlist.c @@ -53,8 +55,9 @@ shfldr_desktop.c shfldr_fs.c shfldr_mycomp.c - shlfldr_mydocuments.c + shfldr_mydocuments.c shfldr_printers.c + shfldr_admintools.c shlexec.c shlfileop.c shlfolder.c @@ -70,9 +73,10 @@ shell32.spec fprop.c drive.c - recyclebin.c + shfldr_recyclebin.c she_ocmenu.c shv_item_new.c folder_options.c shfldr_netplaces.c + shfldr_fonts.c diff --git a/reactos/dll/win32/shell32/shell32.rc b/reactos/dll/win32/shell32/shell32.rc index a6318e2c88f..ac7834b0f25 100644 --- a/reactos/dll/win32/shell32/shell32.rc +++ b/reactos/dll/win32/shell32/shell32.rc @@ -63,7 +63,7 @@ END #include "lang/ja-JP.rc" #include "lang/ko-KR.rc" #include "lang/nl-NL.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" #include "lang/pt-PT.rc" diff --git a/reactos/dll/win32/shell32/shell32.spec b/reactos/dll/win32/shell32/shell32.spec index 553bc79f88c..da323432f82 100644 --- a/reactos/dll/win32/shell32/shell32.spec +++ b/reactos/dll/win32/shell32/shell32.spec @@ -189,8 +189,8 @@ 197 stub -noname SHGlobalDefect 198 stdcall -noname SHAbortInvokeCommand() 199 stub SHGetFileIcon - 200 stub SHLocalAlloc - 201 stub SHLocalFree + 200 stdcall SHCreateDesktop(ptr) + 201 stdcall SHDesktopMessageLoop(ptr) 202 stub SHLocalReAlloc 203 stub AddCommasW 204 stub ShortSizeFormatW diff --git a/reactos/dll/win32/shell32/shell32_main.h b/reactos/dll/win32/shell32/shell32_main.h index f7aa72d8658..ec01b3b5a69 100644 --- a/reactos/dll/win32/shell32/shell32_main.h +++ b/reactos/dll/win32/shell32/shell32_main.h @@ -95,6 +95,8 @@ HRESULT WINAPI ISF_MyComputer_Constructor(IUnknown * pUnkOuter, REFIID riid, LPV HRESULT WINAPI ISF_Printers_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv); HRESULT WINAPI ISF_MyDocuments_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv); HRESULT WINAPI ISF_NetworkPlaces_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv); +HRESULT WINAPI ISF_Fonts_Constructor (IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv); +HRESULT WINAPI ISF_AdminTools_Constructor (IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv); HRESULT WINAPI IDropTargetHelper_Constructor (IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv); HRESULT WINAPI IFileSystemBindData_Constructor(const WIN32_FIND_DATAW *pfd, LPBC *ppV); HRESULT WINAPI IControlPanel_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv); @@ -247,4 +249,5 @@ HPROPSHEETPAGE SH_CreatePropertySheetPage(LPSTR resname, DLGPROC dlgproc, LPARAM BOOL SH_ShowDriveProperties(WCHAR * drive); BOOL SH_ShowRecycleBinProperties(WCHAR sDrive); BOOL SH_ShowPropertiesDialog(PCWSTR lpf); +BOOL SH_ShowFolderProperties(LPWSTR pwszFolder); #endif diff --git a/reactos/dll/win32/shell32/shellole.c b/reactos/dll/win32/shell32/shellole.c index 0ec2af3da96..c4e7de7f977 100644 --- a/reactos/dll/win32/shell32/shellole.c +++ b/reactos/dll/win32/shell32/shellole.c @@ -75,8 +75,10 @@ static const struct { {&CLSID_FolderShortcut, &FolderShortcut_Constructor}, #endif {&CLSID_MyDocuments, &ISF_MyDocuments_Constructor}, - {&CLSID_NetworkPlaces, &ISF_NetworkPlaces_Constructor}, + {&CLSID_NetworkPlaces, &ISF_NetworkPlaces_Constructor}, + {&CLSID_FontsFolderShortcut, &ISF_Fonts_Constructor}, {&CLSID_Printers, &ISF_Printers_Constructor}, + {&CLSID_AdminFolderShortcut, &ISF_AdminTools_Constructor}, {&CLSID_RecycleBin, &RecycleBin_Constructor}, {&CLSID_OpenWith, &SHEOW_Constructor}, {&dummy1, &INewItem_Constructor}, diff --git a/reactos/dll/win32/shell32/shellord.c b/reactos/dll/win32/shell32/shellord.c index a221859af01..f3811d54c46 100644 --- a/reactos/dll/win32/shell32/shellord.c +++ b/reactos/dll/win32/shell32/shellord.c @@ -1962,14 +1962,18 @@ BOOL WINAPI SHGetNewLinkInfoW(LPCWSTR pszLinkTo, LPCWSTR pszDir, LPWSTR pszName, return FALSE; } - +/************************************************************************* + * SHStartNetConnectionDialog (SHELL32.@) + */ HRESULT WINAPI SHStartNetConnectionDialog(HWND hwnd, LPCSTR pszRemoteName, DWORD dwType) { FIXME("%p, %s, 0x%08x - stub\n", hwnd, debugstr_a(pszRemoteName), dwType); return S_OK; } - +/************************************************************************* + * SHEmptyRecycleBinA (SHELL32.@) + */ HRESULT WINAPI SHEmptyRecycleBinA(HWND hwnd, LPCSTR pszRootPath, DWORD dwFlags) { LPWSTR szRootPathW = NULL; @@ -2001,26 +2005,58 @@ HRESULT WINAPI SHEmptyRecycleBinA(HWND hwnd, LPCSTR pszRootPath, DWORD dwFlags) HRESULT WINAPI SHEmptyRecycleBinW(HWND hwnd, LPCWSTR pszRootPath, DWORD dwFlags) { - BOOL ret; + WCHAR szPath[MAX_PATH] = {0}; + DWORD dwSize, dwType; + LONG ret; TRACE("%p, %s, 0x%08x\n", hwnd, debugstr_w(pszRootPath), dwFlags); - FIXME("0x%08x flags ignored\n", dwFlags); - ret = EmptyRecycleBinW(pszRootPath); + if (!(dwFlags & SHERB_NOCONFIRMATION)) + { + /* FIXME + * enumerate available files + * show confirmation dialog + */ + FIXME("show confirmation dialog\n"); + } + + if (dwFlags & SHERB_NOPROGRESSUI) + { + ret = EmptyRecycleBinW(pszRootPath); + } + else + { + /* FIXME + * show a progress dialog + */ + ret = EmptyRecycleBinW(pszRootPath); + } + if (!ret) return HRESULT_FROM_WIN32(GetLastError()); - /* FIXME: update icon? */ + if (!(dwFlags & SHERB_NOSOUND)) + { + dwSize = sizeof(szPath); + ret = RegGetValueW(HKEY_CURRENT_USER, + L"AppEvents\\Schemes\\Apps\\Explorer\\EmptyRecycleBin\\.Current", + NULL, + RRF_RT_REG_EXPAND_SZ, + &dwType, + (PVOID)szPath, + &dwSize); + if (ret != ERROR_SUCCESS) + return S_OK; + + if (dwType != REG_EXPAND_SZ) /* type dismatch */ + return S_OK; + + szPath[(sizeof(szPath)/sizeof(WCHAR))-1] = L'\0'; + PlaySoundW(szPath, NULL, SND_FILENAME); + } return S_OK; } -DWORD WINAPI SHFormatDrive(HWND hwnd, UINT drive, UINT fmtID, UINT options) -{ - FIXME("%p, 0x%08x, 0x%08x, 0x%08x - stub\n", hwnd, drive, fmtID, options); - - return SHFMT_NOFORMAT; -} - HRESULT WINAPI SHQueryRecycleBinA(LPCSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo) { LPWSTR szRootPathW = NULL; diff --git a/reactos/dll/win32/shell32/shfldr_admintools.c b/reactos/dll/win32/shell32/shfldr_admintools.c new file mode 100644 index 00000000000..bc67dd2b020 --- /dev/null +++ b/reactos/dll/win32/shell32/shfldr_admintools.c @@ -0,0 +1,780 @@ +/* + * Virtual Admin Tools Folder + * + * Copyright 2008 Johannes Anderwald + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "config.h" +#include "wine/port.h" + +#include +#include +#include +#include + +#define COBJMACROS +#define NONAMELESSUNION +#define NONAMELESSSTRUCT + +#include "winerror.h" +#include "windef.h" +#include "winbase.h" +#include "winreg.h" +#include "wingdi.h" +#include "winuser.h" +#include "winspool.h" + +#include "ole2.h" +#include "shlguid.h" + +#include "enumidlist.h" +#include "pidl.h" +#include "undocshell.h" +#include "shell32_main.h" +#include "shresdef.h" +#include "shlwapi.h" +#include "shellfolder.h" +#include "wine/debug.h" +#include "debughlp.h" +#include "shfldr.h" +#include "shresdef.h" + +WINE_DEFAULT_DEBUG_CHANNEL (shell); + +/* List shortcuts of + * CSIDL_COMMON_ADMINTOOLS + * Note: CSIDL_ADMINTOOLS is ignored, tested with Window XP SP3+ + */ + +/*********************************************************************** + * AdminTools folder implementation + */ + +typedef struct { + IShellFolder2Vtbl *lpVtbl; + IPersistFolder2Vtbl *lpVtblPersistFolder2; + + LONG ref; + + CLSID *pclsid; + + LPITEMIDLIST pidlRoot; /* absolute pidl */ + LPWSTR szTarget; + + int dwAttributes; /* attributes returned by GetAttributesOf FIXME: use it */ +} IGenericSFImpl; + +static const shvheader AdminToolsSFHeader[] = { + {IDS_SHV_COLUMN8, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN2, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, + {IDS_SHV_COLUMN3, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, + {IDS_SHV_COLUMN4, SHCOLSTATE_TYPE_DATE | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 12} +}; + +#define COLUMN_NAME 0 +#define COLUMN_SIZE 1 +#define COLUMN_TYPE 2 +#define COLUMN_DATE 3 + +#define AdminToolsHELLVIEWCOLUMNS (4) + + +#define _IPersistFolder2_Offset ((int)(&(((IGenericSFImpl*)0)->lpVtblPersistFolder2))) +#define _ICOM_THIS_From_IPersistFolder2(class, name) class* This = (class*)(((char*)name)-_IPersistFolder2_Offset); + +#define _IUnknown_(This) (IShellFolder*)&(This->lpVtbl) +#define _IShellFolder_(This) (IShellFolder*)&(This->lpVtbl) + +#define _IPersist_(This) (IPersist*)&(This->lpVtblPersistFolder2) +#define _IPersistFolder_(This) (IPersistFolder*)&(This->lpVtblPersistFolder2) +#define _IPersistFolder2_(This) (IPersistFolder2*)&(This->lpVtblPersistFolder2) + +/************************************************************************** + * ISF_AdminTools_fnQueryInterface + * + * NOTE does not support IPersist/IPersistFolder + */ +static HRESULT WINAPI ISF_AdminTools_fnQueryInterface( + IShellFolder2 * iface, REFIID riid, LPVOID * ppvObj) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + TRACE ("(%p)->(%s,%p)\n", This, shdebugstr_guid (riid), ppvObj); + + *ppvObj = NULL; + + if (IsEqualIID (riid, &IID_IUnknown) || + IsEqualIID (riid, &IID_IShellFolder) || + IsEqualIID (riid, &IID_IShellFolder2)) + { + *ppvObj = This; + } + + else if (IsEqualIID (riid, &IID_IPersist) || + IsEqualIID (riid, &IID_IPersistFolder) || + IsEqualIID (riid, &IID_IPersistFolder2)) + { + *ppvObj = _IPersistFolder2_ (This); + } + + if (*ppvObj) + { + IUnknown_AddRef ((IUnknown *) (*ppvObj)); + TRACE ("-- Interface: (%p)->(%p)\n", ppvObj, *ppvObj); + return S_OK; + } + TRACE ("-- Interface: E_NOINTERFACE\n"); + return E_NOINTERFACE; +} + +static ULONG WINAPI ISF_AdminTools_fnAddRef (IShellFolder2 * iface) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + ULONG refCount = InterlockedIncrement(&This->ref); + + TRACE ("(%p)->(count=%lu)\n", This, refCount - 1); + + return refCount; +} + +static ULONG WINAPI ISF_AdminTools_fnRelease (IShellFolder2 * iface) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + ULONG refCount = InterlockedDecrement(&This->ref); + + TRACE ("(%p)->(count=%lu)\n", This, refCount + 1); + + if (!refCount) + { + TRACE ("-- destroying IShellFolder(%p)\n", This); + if (This->pidlRoot) + SHFree (This->pidlRoot); + LocalFree ((HLOCAL) This); + return 0; + } + return refCount; +} + +/************************************************************************** + * ISF_AdminTools_fnParseDisplayName + * + */ +static HRESULT WINAPI ISF_AdminTools_fnParseDisplayName (IShellFolder2 * iface, + HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, + DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + TRACE("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n", + This, hwndOwner, pbc, lpszDisplayName, debugstr_w(lpszDisplayName), + pchEaten, ppidl, pdwAttributes); + + *ppidl = 0; + if (pchEaten) + *pchEaten = 0; + + return E_NOTIMPL; +} + +/************************************************************************** + * CreateAdminToolsEnumList() + */ +static BOOL CreateAdminToolsEnumList(IEnumIDList *list, IGenericSFImpl *This, DWORD dwFlags) +{ + TRACE("(%p)->(flags=0x%08x)\n", list, dwFlags); + /* enumerate the elements in %windir%\desktop */ + return CreateFolderEnumList(list, This->szTarget, dwFlags); +} + +/************************************************************************** + * ISF_AdminTools_fnEnumObjects + */ +static HRESULT WINAPI ISF_AdminTools_fnEnumObjects (IShellFolder2 * iface, + HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST * ppEnumIDList) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + TRACE ("(%p)->(HWND=%p flags=0x%08lx pplist=%p)\n", + This, hwndOwner, dwFlags, ppEnumIDList); + + if(!ppEnumIDList) return E_OUTOFMEMORY; + *ppEnumIDList = IEnumIDList_Constructor(); + if (*ppEnumIDList) + CreateAdminToolsEnumList(*ppEnumIDList, This, dwFlags); + + TRACE ("-- (%p)->(new ID List: %p)\n", This, *ppEnumIDList); + + return (*ppEnumIDList) ? S_OK : E_OUTOFMEMORY; +} + +/************************************************************************** + * ISF_AdminTools_fnBindToObject + */ +static HRESULT WINAPI ISF_AdminTools_fnBindToObject (IShellFolder2 * iface, + LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID * ppvOut) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + TRACE ("(%p)->(pidl=%p,%p,%s,%p)\n", This, + pidl, pbcReserved, shdebugstr_guid (riid), ppvOut); + + return SHELL32_BindToChild (This->pidlRoot, NULL, pidl, riid, ppvOut); +} + +/************************************************************************** + * ISF_AdminTools_fnBindToStorage + */ +static HRESULT WINAPI ISF_AdminTools_fnBindToStorage (IShellFolder2 * iface, + LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID * ppvOut) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + FIXME ("(%p)->(pidl=%p,%p,%s,%p) stub\n", + This, pidl, pbcReserved, shdebugstr_guid (riid), ppvOut); + + *ppvOut = NULL; + return E_NOTIMPL; +} + +/************************************************************************** + * ISF_AdminTools_fnCompareIDs + */ +static HRESULT WINAPI ISF_AdminTools_fnCompareIDs (IShellFolder2 * iface, + LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + int nReturn; + + TRACE ("(%p)->(0x%08lx,pidl1=%p,pidl2=%p)\n", This, lParam, pidl1, pidl2); + nReturn = SHELL32_CompareIDs (_IShellFolder_ (This), lParam, pidl1, pidl2); + TRACE ("-- %i\n", nReturn); + return nReturn; +} + +/************************************************************************** + * ISF_AdminTools_fnCreateViewObject + */ +static HRESULT WINAPI ISF_AdminTools_fnCreateViewObject (IShellFolder2 * iface, + HWND hwndOwner, REFIID riid, LPVOID * ppvOut) +{ + + LPSHELLVIEW pShellView; + HRESULT hr = E_INVALIDARG; + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + TRACE ("(%p)->(hwnd=%p,%s,%p)\n", This, + hwndOwner, shdebugstr_guid (riid), ppvOut); + + if (!ppvOut) + return hr; + + *ppvOut = NULL; + + if (IsEqualIID (riid, &IID_IDropTarget)) + { + WARN ("IDropTarget not implemented\n"); + hr = E_NOTIMPL; + } + else if (IsEqualIID (riid, &IID_IShellView)) + { + pShellView = IShellView_Constructor ((IShellFolder *) iface); + if (pShellView) + { + hr = IShellView_QueryInterface (pShellView, riid, ppvOut); + IShellView_Release (pShellView); + } + } + TRACE ("-- (%p)->(interface=%p)\n", This, ppvOut); + return hr; +} + +/************************************************************************** + * ISF_AdminTools_fnGetAttributesOf + */ +static HRESULT WINAPI ISF_AdminTools_fnGetAttributesOf (IShellFolder2 * iface, + UINT cidl, LPCITEMIDLIST * apidl, DWORD * rgfInOut) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + HRESULT hr = S_OK; + static const DWORD dwAdminToolsAttributes = + SFGAO_STORAGE | SFGAO_HASPROPSHEET | SFGAO_STORAGEANCESTOR | + SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_FILESYSTEM; + + TRACE ("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n", + This, cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0); + + if (!rgfInOut) + return E_INVALIDARG; + if (cidl && !apidl) + return E_INVALIDARG; + + if (*rgfInOut == 0) + *rgfInOut = ~0; + + if(cidl == 0) { + *rgfInOut &= dwAdminToolsAttributes; + } else { + while (cidl > 0 && *apidl) { + pdump (*apidl); + if (_ILIsAdminTools(*apidl)) { + *rgfInOut &= dwAdminToolsAttributes; + } else { + SHELL32_GetItemAttributes (_IShellFolder_ (This), *apidl, rgfInOut); + } + apidl++; + cidl--; + } + } + /* make sure SFGAO_VALIDATE is cleared, some apps depend on that */ + *rgfInOut &= ~SFGAO_VALIDATE; + + TRACE ("-- result=0x%08x\n", *rgfInOut); + + return hr; +} + +/************************************************************************** + * ISF_AdminTools_fnGetUIObjectOf + * + * PARAMETERS + * HWND hwndOwner, //[in ] Parent window for any output + * UINT cidl, //[in ] array size + * LPCITEMIDLIST* apidl, //[in ] simple pidl array + * REFIID riid, //[in ] Requested Interface + * UINT* prgfInOut, //[ ] reserved + * LPVOID* ppvObject) //[out] Resulting Interface + * + */ +static HRESULT WINAPI ISF_AdminTools_fnGetUIObjectOf (IShellFolder2 * iface, + HWND hwndOwner, UINT cidl, LPCITEMIDLIST * apidl, + REFIID riid, UINT * prgfInOut, LPVOID * ppvOut) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + LPITEMIDLIST pidl; + IUnknown *pObj = NULL; + HRESULT hr = E_INVALIDARG; + + TRACE ("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n", + This, hwndOwner, cidl, apidl, shdebugstr_guid (riid), prgfInOut, ppvOut); + + if (!ppvOut) + return hr; + + *ppvOut = NULL; + + if (IsEqualIID (riid, &IID_IContextMenu)) + { + hr = CDefFolderMenu_Create2(This->pidlRoot, hwndOwner, cidl, apidl, (IShellFolder*)iface, NULL, 0, NULL, (IContextMenu**)&pObj); + } + else if (IsEqualIID (riid, &IID_IDataObject) && (cidl >= 1)) + { + pObj = (LPUNKNOWN) IDataObject_Constructor( hwndOwner, + This->pidlRoot, apidl, cidl); + hr = S_OK; + } + else if (IsEqualIID (riid, &IID_IExtractIconA) && (cidl == 1)) + { + pidl = ILCombine (This->pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconA_Constructor (pidl); + SHFree (pidl); + hr = S_OK; + } + else if (IsEqualIID (riid, &IID_IExtractIconW) && (cidl == 1)) + { + pidl = ILCombine (This->pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconW_Constructor (pidl); + SHFree (pidl); + hr = S_OK; + } + else if (IsEqualIID (riid, &IID_IDropTarget) && (cidl >= 1)) + { + hr = IShellFolder_QueryInterface (iface, + &IID_IDropTarget, (LPVOID *) & pObj); + } + else if ((IsEqualIID(riid,&IID_IShellLinkW) || + IsEqualIID(riid,&IID_IShellLinkA)) && (cidl == 1)) + { + pidl = ILCombine (This->pidlRoot, apidl[0]); + hr = IShellLink_ConstructFromFile(NULL, riid, pidl, (LPVOID*)&pObj); + SHFree (pidl); + } + else + hr = E_NOINTERFACE; + + if (SUCCEEDED(hr) && !pObj) + hr = E_OUTOFMEMORY; + + *ppvOut = pObj; + TRACE ("(%p)->hr=0x%08x\n", This, hr); + return hr; +} + +/************************************************************************** + * ISF_AdminTools_fnGetDisplayNameOf + * + */ +static HRESULT WINAPI ISF_AdminTools_fnGetDisplayNameOf (IShellFolder2 * iface, + LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + HRESULT hr = S_OK; + LPWSTR pszPath; + + TRACE ("(%p)->(pidl=%p,0x%08x,%p)\n", This, pidl, dwFlags, strRet); + pdump (pidl); + + if (!strRet) + return E_INVALIDARG; + + pszPath = CoTaskMemAlloc((MAX_PATH +1) * sizeof(WCHAR)); + if (!pszPath) + return E_OUTOFMEMORY; + + ZeroMemory(pszPath, (MAX_PATH +1) * sizeof(WCHAR)); + + if (_ILIsAdminTools (pidl)) + { + if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) && + (GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING)) + strcpyW(pszPath, This->szTarget); + else + HCR_GetClassNameW(&CLSID_AdminFolderShortcut, pszPath, MAX_PATH); + } + else if (_ILIsPidlSimple(pidl)) + { + _ILSimpleGetTextW(pidl, pszPath, MAX_PATH); + } + else if (_ILIsSpecialFolder(pidl)) + { + BOOL bSimplePidl = _ILIsPidlSimple(pidl); + + if (bSimplePidl) + { + _ILSimpleGetTextW(pidl, pszPath, MAX_PATH); + } + else + { + FIXME("special pidl\n"); + } + + if ((dwFlags & SHGDN_FORPARSING) && !bSimplePidl) + { + int len = 0; + + strcpyW(pszPath, This->szTarget); + PathAddBackslashW(pszPath); + len = lstrlenW(pszPath); + + if (!SUCCEEDED(SHELL32_GetDisplayNameOfChild(iface, pidl, dwFlags | SHGDN_INFOLDER, pszPath + len, MAX_PATH + 1 - len))) + { + CoTaskMemFree(pszPath); + return E_OUTOFMEMORY; + } + + } + } + + if (SUCCEEDED(hr)) + { + strRet->uType = STRRET_WSTR; + strRet->u.pOleStr = pszPath; + } + else + CoTaskMemFree(pszPath); + + TRACE ("-- (%p)->(%s,0x%08x)\n", This, debugstr_w(strRet->u.pOleStr), hr); + return hr; +} + +/************************************************************************** + * ISF_AdminTools_fnSetNameOf + * Changes the name of a file object or subfolder, possibly changing its item + * identifier in the process. + * + * PARAMETERS + * HWND hwndOwner, //[in ] Owner window for output + * LPCITEMIDLIST pidl, //[in ] simple pidl of item to change + * LPCOLESTR lpszName, //[in ] the items new display name + * DWORD dwFlags, //[in ] SHGNO formatting flags + * LPITEMIDLIST* ppidlOut) //[out] simple pidl returned + */ +static HRESULT WINAPI ISF_AdminTools_fnSetNameOf (IShellFolder2 * iface, + HWND hwndOwner, LPCITEMIDLIST pidl, /* simple pidl */ + LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + FIXME ("(%p)->(%p,pidl=%p,%s,%lu,%p)\n", This, hwndOwner, pidl, + debugstr_w (lpName), dwFlags, pPidlOut); + + return E_FAIL; +} + +static HRESULT WINAPI ISF_AdminTools_fnGetDefaultSearchGUID(IShellFolder2 *iface, + GUID * pguid) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + FIXME ("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI ISF_AdminTools_fnEnumSearches (IShellFolder2 *iface, + IEnumExtraSearch ** ppenum) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + FIXME ("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI ISF_AdminTools_fnGetDefaultColumn (IShellFolder2 * iface, + DWORD dwRes, ULONG * pSort, ULONG * pDisplay) +{ + if (pSort) + *pSort = 0; + if (pDisplay) + *pDisplay = 0; + + return S_OK; +} +static HRESULT WINAPI ISF_AdminTools_fnGetDefaultColumnState ( + IShellFolder2 * iface, UINT iColumn, DWORD * pcsFlags) +{ + if (!pcsFlags || iColumn >= AdminToolsHELLVIEWCOLUMNS) + return E_INVALIDARG; + *pcsFlags = AdminToolsSFHeader[iColumn].pcsFlags; + return S_OK; + +} + +static HRESULT WINAPI ISF_AdminTools_fnGetDetailsEx (IShellFolder2 * iface, + LPCITEMIDLIST pidl, const SHCOLUMNID * pscid, VARIANT * pv) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + FIXME ("(%p): stub\n", This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI ISF_AdminTools_fnGetDetailsOf (IShellFolder2 * iface, + LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS * psd) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + WCHAR buffer[MAX_PATH] = {0}; + HRESULT hr = E_FAIL; + + TRACE("(%p)->(%p %i %p): stub\n", This, pidl, iColumn, psd); + + if (iColumn >= AdminToolsHELLVIEWCOLUMNS) + return E_FAIL; + + psd->fmt = AdminToolsSFHeader[iColumn].fmt; + psd->cxChar = AdminToolsSFHeader[iColumn].cxChar; + if (pidl == NULL) + { + psd->str.uType = STRRET_WSTR; + if (LoadStringW(shell32_hInstance, AdminToolsSFHeader[iColumn].colnameid, buffer, MAX_PATH)) + hr = SHStrDupW(buffer, &psd->str.u.pOleStr); + + return hr; + } + + psd->str.uType = STRRET_CSTR; + switch (iColumn) + { + case COLUMN_NAME: + psd->str.uType = STRRET_WSTR; + hr = IShellFolder_GetDisplayNameOf(iface, pidl, + SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str); + break; + case COLUMN_SIZE: + _ILGetFileSize (pidl, psd->str.u.cStr, MAX_PATH); + break; + case COLUMN_TYPE: + _ILGetFileType (pidl, psd->str.u.cStr, MAX_PATH); + break; + case COLUMN_DATE: + _ILGetFileDate (pidl, psd->str.u.cStr, MAX_PATH); + break; + } + + return hr; +} + +static HRESULT WINAPI ISF_AdminTools_fnMapColumnToSCID ( + IShellFolder2 * iface, UINT column, SHCOLUMNID * pscid) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + FIXME ("(%p): stub\n", This); + return E_NOTIMPL; +} + +static IShellFolder2Vtbl vt_ShellFolder2 = +{ + ISF_AdminTools_fnQueryInterface, + ISF_AdminTools_fnAddRef, + ISF_AdminTools_fnRelease, + ISF_AdminTools_fnParseDisplayName, + ISF_AdminTools_fnEnumObjects, + ISF_AdminTools_fnBindToObject, + ISF_AdminTools_fnBindToStorage, + ISF_AdminTools_fnCompareIDs, + ISF_AdminTools_fnCreateViewObject, + ISF_AdminTools_fnGetAttributesOf, + ISF_AdminTools_fnGetUIObjectOf, + ISF_AdminTools_fnGetDisplayNameOf, + ISF_AdminTools_fnSetNameOf, + /* ShellFolder2 */ + ISF_AdminTools_fnGetDefaultSearchGUID, + ISF_AdminTools_fnEnumSearches, + ISF_AdminTools_fnGetDefaultColumn, + ISF_AdminTools_fnGetDefaultColumnState, + ISF_AdminTools_fnGetDetailsEx, + ISF_AdminTools_fnGetDetailsOf, + ISF_AdminTools_fnMapColumnToSCID +}; + +/************************************************************************ + * IPF_AdminTools_QueryInterface + */ +static HRESULT WINAPI IPF_AdminTools_QueryInterface ( + IPersistFolder2 * iface, REFIID iid, LPVOID * ppvObj) +{ + _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface); + + TRACE ("(%p)\n", This); + + return IUnknown_QueryInterface (_IUnknown_ (This), iid, ppvObj); +} + +/************************************************************************ + * IPF_AdminTools_AddRef + */ +static ULONG WINAPI IPF_AdminTools_AddRef (IPersistFolder2 * iface) +{ + _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface); + + TRACE ("(%p)->(count=%lu)\n", This, This->ref); + + return IUnknown_AddRef (_IUnknown_ (This)); +} + +/************************************************************************ + * IPF_AdminTools_Release + */ +static ULONG WINAPI IPF_AdminTools_Release (IPersistFolder2 * iface) +{ + _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface); + + TRACE ("(%p)->(count=%lu)\n", This, This->ref); + + return IUnknown_Release (_IUnknown_ (This)); +} + +/************************************************************************ + * IPF_AdminTools_GetClassID + */ +static HRESULT WINAPI IPF_AdminTools_GetClassID ( + IPersistFolder2 * iface, CLSID * lpClassId) +{ + _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface); + + TRACE ("(%p)\n", This); + + memcpy(lpClassId, &CLSID_AdminFolderShortcut, sizeof(CLSID)); + + return S_OK; +} + +/************************************************************************ + * IPF_AdminTools_Initialize + * + */ +static HRESULT WINAPI IPF_AdminTools_Initialize ( + IPersistFolder2 * iface, LPCITEMIDLIST pidl) +{ + _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface); + FIXME ("(%p)->(%p): stub\n", This, pidl); + return E_NOTIMPL; +} + +/************************************************************************** + * IPF_AdminTools_fnGetCurFolder + */ +static HRESULT WINAPI IPF_AdminTools_GetCurFolder ( + IPersistFolder2 * iface, LPITEMIDLIST * pidl) +{ + _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface); + + TRACE ("(%p)->(%p)\n", This, pidl); + + *pidl = ILClone (This->pidlRoot); + return S_OK; +} + +static IPersistFolder2Vtbl vt_PersistFolder2 = +{ + IPF_AdminTools_QueryInterface, + IPF_AdminTools_AddRef, + IPF_AdminTools_Release, + IPF_AdminTools_GetClassID, + IPF_AdminTools_Initialize, + IPF_AdminTools_GetCurFolder +}; + +/************************************************************************** + * ISF_AdminTools_Constructor + */ +HRESULT WINAPI ISF_AdminTools_Constructor ( + IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv) +{ + IGenericSFImpl *sf; + HRESULT hr; + + TRACE ("unkOut=%p %s\n", pUnkOuter, shdebugstr_guid (riid)); + + if (pUnkOuter) + return CLASS_E_NOAGGREGATION; + + sf = HeapAlloc( GetProcessHeap(), 0, sizeof(*sf) ); + if (!sf) + return E_OUTOFMEMORY; + + sf->szTarget = HeapAlloc( GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR) ); + if (!sf->szTarget) + { + HeapFree(GetProcessHeap(), 0, sf); + return E_OUTOFMEMORY; + } + if (!SHGetSpecialFolderPathW(NULL, sf->szTarget, CSIDL_COMMON_ADMINTOOLS, FALSE)) + { + HeapFree(GetProcessHeap(), 0, sf->szTarget); + HeapFree(GetProcessHeap(), 0, sf); + } + + sf->ref = 1; + sf->lpVtbl = &vt_ShellFolder2; + sf->lpVtblPersistFolder2 = &vt_PersistFolder2; + sf->pidlRoot = _ILCreateAdminTools(); /* my qualified pidl */ + + hr = IUnknown_QueryInterface( _IUnknown_(sf), riid, ppv ); + IUnknown_Release( _IUnknown_(sf) ); + + TRACE ("--(%p)\n", *ppv); + return hr; +} diff --git a/reactos/dll/win32/shell32/shfldr_fonts.c b/reactos/dll/win32/shell32/shfldr_fonts.c new file mode 100644 index 00000000000..10b0595e107 --- /dev/null +++ b/reactos/dll/win32/shell32/shfldr_fonts.c @@ -0,0 +1,1073 @@ +/* + * Fonts folder + * + * Copyright 2008 Johannes Anderwald + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "config.h" +#include "wine/port.h" + +#include +#include +#include +#include + +#define COBJMACROS +#define NONAMELESSUNION +#define NONAMELESSSTRUCT + +#include "winerror.h" +#include "windef.h" +#include "winbase.h" +#include "winreg.h" + +#include "pidl.h" +#include "enumidlist.h" +#include "undocshell.h" +#include "shell32_main.h" +#include "shresdef.h" +#include "wine/debug.h" +#include "debughlp.h" +#include "shfldr.h" +#include "shlwapi.h" + + +WINE_DEFAULT_DEBUG_CHANNEL (shell); + +/*********************************************************************** +* IShellFolder implementation +*/ + +typedef struct { + const IShellFolder2Vtbl *lpVtbl; + LONG ref; + const IContextMenu2Vtbl *lpVtblContextMenuFontItem; + const IPersistFolder2Vtbl *lpVtblPersistFolder2; + + /* both paths are parsible from the desktop */ + LPITEMIDLIST pidlRoot; /* absolute pidl */ + LPCITEMIDLIST apidl; /* currently focused font item */ +} IGenericSFImpl; + +static const IShellFolder2Vtbl vt_ShellFolder2; +static const IPersistFolder2Vtbl vt_NP_PersistFolder2; +static const IContextMenu2Vtbl vt_ContextMenu2FontItem; + +#define _IPersistFolder2_Offset ((int)(&(((IGenericSFImpl*)0)->lpVtblPersistFolder2))) +#define _ICOM_THIS_From_IPersistFolder2(class, name) class* This = (class*)(((char*)name)-_IPersistFolder2_Offset); +#define _IContextMenuFontItem_Offset ((int)(&(((IGenericSFImpl*)0)->lpVtblContextMenuFontItem))) +#define _ICOM_THIS_From_IContextMenu2FontItem(class, name) class* This = (class*)(((char*)name)-_IContextMenuFontItem_Offset); + +#define _IUnknown_(This) (IUnknown*)&(This->lpVtbl) +#define _IShellFolder_(This) (IShellFolder*)&(This->lpVtbl) +#define _IPersistFolder2_(This) (IPersistFolder2*)&(This->lpVtblPersistFolder2) + +static shvheader FontsSFHeader[] = { + {IDS_SHV_COLUMN8, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN_FONTTYPE , SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN2, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN12, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15} +}; + +#define COLUMN_NAME 0 +#define COLUMN_TYPE 1 +#define COLUMN_SIZE 2 +#define COLUMN_FILENAME 3 + + +#define FontsSHELLVIEWCOLUMNS (4) + +/************************************************************************** +* ISF_Fonts_Constructor +*/ +HRESULT WINAPI ISF_Fonts_Constructor (IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv) +{ + IGenericSFImpl *sf; + + TRACE ("unkOut=%p %s\n", pUnkOuter, shdebugstr_guid (riid)); + + if (!ppv) + return E_POINTER; + if (pUnkOuter) + return CLASS_E_NOAGGREGATION; + + sf = (IGenericSFImpl *) HeapAlloc ( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof (IGenericSFImpl)); + if (!sf) + return E_OUTOFMEMORY; + + sf->ref = 0; + sf->lpVtbl = &vt_ShellFolder2; + sf->lpVtblPersistFolder2 = &vt_NP_PersistFolder2; + sf->lpVtblContextMenuFontItem = &vt_ContextMenu2FontItem; + sf->pidlRoot = _ILCreateFont(); /* my qualified pidl */ + + if (!SUCCEEDED (IUnknown_QueryInterface (_IUnknown_ (sf), riid, ppv))) + { + IUnknown_Release (_IUnknown_ (sf)); + return E_NOINTERFACE; + } + + TRACE ("--(%p)\n", sf); + return S_OK; +} + +/************************************************************************** + * ISF_Fonts_fnQueryInterface + * + * NOTE + * supports not IPersist/IPersistFolder + */ +static HRESULT WINAPI ISF_Fonts_fnQueryInterface (IShellFolder2 *iface, REFIID riid, LPVOID *ppvObj) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + TRACE ("(%p)->(%s,%p)\n", This, shdebugstr_guid (riid), ppvObj); + + *ppvObj = NULL; + + if (IsEqualIID (riid, &IID_IUnknown) || + IsEqualIID (riid, &IID_IShellFolder) || + IsEqualIID (riid, &IID_IShellFolder2)) + { + *ppvObj = This; + } + else if (IsEqualIID (riid, &IID_IPersist) || + IsEqualIID (riid, &IID_IPersistFolder) || + IsEqualIID (riid, &IID_IPersistFolder2)) + { + *ppvObj = _IPersistFolder2_ (This); + } + + if (*ppvObj) + { + IUnknown_AddRef ((IUnknown *) (*ppvObj)); + TRACE ("-- Interface: (%p)->(%p)\n", ppvObj, *ppvObj); + return S_OK; + } + TRACE ("-- Interface: E_NOINTERFACE\n"); + return E_NOINTERFACE; +} + +static ULONG WINAPI ISF_Fonts_fnAddRef (IShellFolder2 * iface) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + ULONG refCount = InterlockedIncrement(&This->ref); + + TRACE ("(%p)->(count=%u)\n", This, refCount - 1); + + return refCount; +} + +static ULONG WINAPI ISF_Fonts_fnRelease (IShellFolder2 * iface) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + ULONG refCount = InterlockedDecrement(&This->ref); + + TRACE ("(%p)->(count=%u)\n", This, refCount + 1); + + if (!refCount) { + TRACE ("-- destroying IShellFolder(%p)\n", This); + SHFree (This->pidlRoot); + HeapFree (GetProcessHeap(), 0, This); + } + return refCount; +} + +/************************************************************************** +* ISF_Fonts_fnParseDisplayName +*/ +static HRESULT WINAPI ISF_Fonts_fnParseDisplayName (IShellFolder2 * iface, + HWND hwndOwner, LPBC pbcReserved, LPOLESTR lpszDisplayName, + DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + HRESULT hr = E_UNEXPECTED; + + TRACE ("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n", This, + hwndOwner, pbcReserved, lpszDisplayName, debugstr_w (lpszDisplayName), + pchEaten, ppidl, pdwAttributes); + + *ppidl = 0; + if (pchEaten) + *pchEaten = 0; /* strange but like the original */ + + TRACE ("(%p)->(-- ret=0x%08x)\n", This, hr); + + return hr; +} + +static LPITEMIDLIST _ILCreateFontItem(LPWSTR pszFont, LPWSTR pszFile) +{ + PIDLDATA tmp; + LPITEMIDLIST pidl; + PIDLFontStruct * p; + int size0 = (char*)&tmp.u.cfont.szName-(char*)&tmp.u.cfont; + int size = size0; + + tmp.type = 0x00; + tmp.u.cfont.dummy = 0xFF; + tmp.u.cfont.offsFile = wcslen(pszFont) + 1; + + size += (tmp.u.cfont.offsFile + wcslen(pszFile) + 1) * sizeof(WCHAR); + + pidl = (LPITEMIDLIST)SHAlloc(size + 4); + if (!pidl) + return pidl; + + pidl->mkid.cb = size+2; + memcpy(pidl->mkid.abID, &tmp, 2+size0); + + p = &((PIDLDATA*)pidl->mkid.abID)->u.cfont; + wcscpy(p->szName, pszFont); + wcscpy(p->szName + tmp.u.cfont.offsFile, pszFile); + + *(WORD*)((char*)pidl+(size+2)) = 0; + return pidl; +} + +static PIDLFontStruct * _ILGetFontStruct(LPCITEMIDLIST pidl) +{ + LPPIDLDATA pdata = _ILGetDataPointer(pidl); + + if (pdata && pdata->type==0x00) + return (PIDLFontStruct*)&(pdata->u.cfont); + + return NULL; +} + + + +/************************************************************************** + * CreateFontsEnumListss() + */ +static BOOL CreateFontsEnumList(IEnumIDList *list, DWORD dwFlags) +{ + WCHAR szPath[MAX_PATH]; + WCHAR szName[LF_FACESIZE+20]; + WCHAR szFile[MAX_PATH]; + LPWSTR pszPath; + UINT Length; + LONG ret; + DWORD dwType, dwName, dwFile, dwIndex; + LPITEMIDLIST pidl; + HKEY hKey; + + if (dwFlags & SHCONTF_NONFOLDERS) + { + if (!SHGetSpecialFolderPathW(NULL, szPath, CSIDL_FONTS, FALSE)) + return FALSE; + + pszPath = PathAddBackslashW(szPath); + if (!pszPath) + return FALSE; + if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts", 0, KEY_READ, &hKey)!= ERROR_SUCCESS) + return FALSE; + + Length = pszPath - szPath; + dwIndex = 0; + do + { + dwName = sizeof(szName)/sizeof(WCHAR); + dwFile = sizeof(szFile)/sizeof(WCHAR); + ret = RegEnumValueW(hKey, dwIndex++, szName, &dwName, NULL, &dwType, (LPVOID)szFile, &dwFile); + if (ret == ERROR_SUCCESS) + { + szFile[(sizeof(szFile)/sizeof(WCHAR))-1] = L'\0'; + if (dwType == REG_SZ && wcslen(szFile) + Length + 1< (sizeof(szPath)/sizeof(WCHAR))) + { + wcscpy(&szPath[Length], szFile); + pidl = _ILCreateFontItem(szName, szPath); + TRACE("pidl %p name %s path %s\n", pidl, debugstr_w(szName), debugstr_w(szPath)); + if (pidl) + { + if (!AddToEnumList(list, pidl)) + SHFree(pidl); + } + } + } + }while(ret != ERROR_NO_MORE_ITEMS); + RegCloseKey(hKey); + + } + return TRUE; +} + +/************************************************************************** +* ISF_Fonts_fnEnumObjects +*/ +static HRESULT WINAPI ISF_Fonts_fnEnumObjects (IShellFolder2 * iface, + HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST * ppEnumIDList) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + TRACE ("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", This, + hwndOwner, dwFlags, ppEnumIDList); + + *ppEnumIDList = IEnumIDList_Constructor(); + if(*ppEnumIDList) + CreateFontsEnumList(*ppEnumIDList, dwFlags); + + TRACE ("-- (%p)->(new ID List: %p)\n", This, *ppEnumIDList); + + return (*ppEnumIDList) ? S_OK : E_OUTOFMEMORY; +} + +/************************************************************************** +* ISF_Fonts_fnBindToObject +*/ +static HRESULT WINAPI ISF_Fonts_fnBindToObject (IShellFolder2 * iface, + LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID * ppvOut) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + TRACE ("(%p)->(pidl=%p,%p,%s,%p)\n", This, + pidl, pbcReserved, shdebugstr_guid (riid), ppvOut); + + return SHELL32_BindToChild (This->pidlRoot, NULL, pidl, riid, ppvOut); +} + +/************************************************************************** +* ISF_Fonts_fnBindToStorage +*/ +static HRESULT WINAPI ISF_Fonts_fnBindToStorage (IShellFolder2 * iface, + LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID * ppvOut) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + FIXME ("(%p)->(pidl=%p,%p,%s,%p) stub\n", This, + pidl, pbcReserved, shdebugstr_guid (riid), ppvOut); + + *ppvOut = NULL; + return E_NOTIMPL; +} + +/************************************************************************** +* ISF_Fonts_fnCompareIDs +*/ + +static HRESULT WINAPI ISF_Fonts_fnCompareIDs (IShellFolder2 * iface, + LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + int nReturn; + + TRACE ("(%p)->(0x%08lx,pidl1=%p,pidl2=%p)\n", This, lParam, pidl1, pidl2); + nReturn = SHELL32_CompareIDs (_IShellFolder_ (This), lParam, pidl1, pidl2); + TRACE ("-- %i\n", nReturn); + return nReturn; +} + +/************************************************************************** +* ISF_Fonts_fnCreateViewObject +*/ +static HRESULT WINAPI ISF_Fonts_fnCreateViewObject (IShellFolder2 * iface, + HWND hwndOwner, REFIID riid, LPVOID * ppvOut) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + LPSHELLVIEW pShellView; + HRESULT hr = E_INVALIDARG; + + TRACE ("(%p)->(hwnd=%p,%s,%p)\n", This, + hwndOwner, shdebugstr_guid (riid), ppvOut); + + if (!ppvOut) + return hr; + + *ppvOut = NULL; + + if (IsEqualIID (riid, &IID_IDropTarget)) + { + WARN ("IDropTarget not implemented\n"); + hr = E_NOTIMPL; + } + else if (IsEqualIID (riid, &IID_IContextMenu)) + { + WARN ("IContextMenu not implemented\n"); + hr = E_NOTIMPL; + } + else if (IsEqualIID (riid, &IID_IShellView)) + { + pShellView = IShellView_Constructor ((IShellFolder *) iface); + if (pShellView) + { + hr = IShellView_QueryInterface (pShellView, riid, ppvOut); + IShellView_Release (pShellView); + } + } + TRACE ("-- (%p)->(interface=%p)\n", This, ppvOut); + return hr; +} + +/************************************************************************** +* ISF_Fonts_fnGetAttributesOf +*/ +static HRESULT WINAPI ISF_Fonts_fnGetAttributesOf (IShellFolder2 * iface, + UINT cidl, LPCITEMIDLIST * apidl, DWORD * rgfInOut) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + HRESULT hr = S_OK; + + TRACE ("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n", This, + cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0); + + if (!rgfInOut) + return E_INVALIDARG; + if (cidl && !apidl) + return E_INVALIDARG; + + if (*rgfInOut == 0) + *rgfInOut = ~0; + + if (cidl == 0) + { + IShellFolder *psfParent = NULL; + LPCITEMIDLIST rpidl = NULL; + + hr = SHBindToParent(This->pidlRoot, &IID_IShellFolder, (LPVOID*)&psfParent, (LPCITEMIDLIST*)&rpidl); + if(SUCCEEDED(hr)) + { + SHELL32_GetItemAttributes (psfParent, rpidl, rgfInOut); + IShellFolder_Release(psfParent); + } + } + else + { + while (cidl > 0 && *apidl) + { + pdump (*apidl); + SHELL32_GetItemAttributes (_IShellFolder_ (This), *apidl, rgfInOut); + apidl++; + cidl--; + } + } + + /* make sure SFGAO_VALIDATE is cleared, some apps depend on that */ + *rgfInOut &= ~SFGAO_VALIDATE; + + TRACE ("-- result=0x%08x\n", *rgfInOut); + return hr; +} + +/************************************************************************** +* ISF_Fonts_fnGetUIObjectOf +* +* PARAMETERS +* hwndOwner [in] Parent window for any output +* cidl [in] array size +* apidl [in] simple pidl array +* riid [in] Requested Interface +* prgfInOut [ ] reserved +* ppvObject [out] Resulting Interface +* +*/ +static HRESULT WINAPI ISF_Fonts_fnGetUIObjectOf (IShellFolder2 * iface, + HWND hwndOwner, UINT cidl, LPCITEMIDLIST * apidl, REFIID riid, + UINT * prgfInOut, LPVOID * ppvOut) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + LPITEMIDLIST pidl; + IUnknown *pObj = NULL; + HRESULT hr = E_INVALIDARG; + + TRACE ("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n", This, + hwndOwner, cidl, apidl, shdebugstr_guid (riid), prgfInOut, ppvOut); + + if (!ppvOut) + return hr; + + *ppvOut = NULL; + + if (IsEqualIID (riid, &IID_IContextMenu) && (cidl >= 1)) + { + pObj = (IUnknown*)(&This->lpVtblContextMenuFontItem); + This->apidl = apidl[0]; + IUnknown_AddRef(pObj); + hr = S_OK; + } + else if (IsEqualIID (riid, &IID_IDataObject) && (cidl >= 1)) + { + pObj = (LPUNKNOWN) IDataObject_Constructor (hwndOwner, This->pidlRoot, apidl, cidl); + hr = S_OK; + } + else if (IsEqualIID (riid, &IID_IExtractIconA) && (cidl == 1)) + { + pidl = ILCombine (This->pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconA_Constructor (pidl); + SHFree (pidl); + hr = S_OK; + } + else if (IsEqualIID (riid, &IID_IExtractIconW) && (cidl == 1)) + { + pidl = ILCombine (This->pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconW_Constructor (pidl); + SHFree (pidl); + hr = S_OK; + } + else if (IsEqualIID (riid, &IID_IDropTarget) && (cidl >= 1)) + { + hr = IShellFolder_QueryInterface (iface, &IID_IDropTarget, (LPVOID *) & pObj); + } + else + hr = E_NOINTERFACE; + + if (SUCCEEDED(hr) && !pObj) + hr = E_OUTOFMEMORY; + + *ppvOut = pObj; + TRACE ("(%p)->hr=0x%08x\n", This, hr); + return hr; +} + +/************************************************************************** +* ISF_Fonts_fnGetDisplayNameOf +* +*/ +static HRESULT WINAPI ISF_Fonts_fnGetDisplayNameOf (IShellFolder2 * iface, + LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + PIDLFontStruct * pfont; + + TRACE("ISF_Fonts_fnGetDisplayNameOf (%p)->(pidl=%p,0x%08x,%p)\n", This, pidl, dwFlags, strRet); + pdump (pidl); + + if (!strRet) + return E_INVALIDARG; + + pfont = _ILGetFontStruct(pidl); + if (!pfont) + return E_INVALIDARG; + + strRet->u.pOleStr = CoTaskMemAlloc((wcslen(pfont->szName)+1) * sizeof(WCHAR)); + if (!strRet->u.pOleStr) + return E_OUTOFMEMORY; + + wcscpy(strRet->u.pOleStr, pfont->szName); + strRet->uType = STRRET_WSTR; + + return S_OK; +} + +/************************************************************************** +* ISF_Fonts_fnSetNameOf +* Changes the name of a file object or subfolder, possibly changing its item +* identifier in the process. +* +* PARAMETERS +* hwndOwner [in] Owner window for output +* pidl [in] simple pidl of item to change +* lpszName [in] the items new display name +* dwFlags [in] SHGNO formatting flags +* ppidlOut [out] simple pidl returned +*/ +static HRESULT WINAPI ISF_Fonts_fnSetNameOf (IShellFolder2 * iface, + HWND hwndOwner, LPCITEMIDLIST pidl, /*simple pidl */ + LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + FIXME ("(%p)->(%p,pidl=%p,%s,%u,%p)\n", This, + hwndOwner, pidl, debugstr_w (lpName), dwFlags, pPidlOut); + return E_FAIL; +} + +static HRESULT WINAPI ISF_Fonts_fnGetDefaultSearchGUID ( + IShellFolder2 * iface, GUID * pguid) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + FIXME ("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI ISF_Fonts_fnEnumSearches (IShellFolder2 * iface, + IEnumExtraSearch ** ppenum) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + FIXME ("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI ISF_Fonts_fnGetDefaultColumn (IShellFolder2 * iface, + DWORD dwRes, ULONG * pSort, ULONG * pDisplay) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + TRACE ("(%p)\n", This); + + if (pSort) + *pSort = 0; + if (pDisplay) + *pDisplay = 0; + + return S_OK; +} + +static HRESULT WINAPI ISF_Fonts_fnGetDefaultColumnState ( + IShellFolder2 * iface, UINT iColumn, DWORD * pcsFlags) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + TRACE ("(%p)\n", This); + + if (!pcsFlags || iColumn >= FontsSHELLVIEWCOLUMNS) + return E_INVALIDARG; + *pcsFlags = FontsSFHeader[iColumn].pcsFlags; + return S_OK; +} + +static HRESULT WINAPI ISF_Fonts_fnGetDetailsEx (IShellFolder2 * iface, + LPCITEMIDLIST pidl, const SHCOLUMNID * pscid, VARIANT * pv) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + FIXME ("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI ISF_Fonts_fnGetDetailsOf (IShellFolder2 * iface, + LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS * psd) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + WCHAR buffer[MAX_PATH] = {0}; + HRESULT hr = E_FAIL; + PIDLFontStruct * pfont; + HANDLE hFile; + LARGE_INTEGER FileSize; + SHFILEINFOW fi; + + TRACE("(%p, %p, %d, %p)\n", This, pidl, iColumn, psd); + + if (iColumn >= FontsSHELLVIEWCOLUMNS) + return E_FAIL; + + psd->fmt = FontsSFHeader[iColumn].fmt; + psd->cxChar = FontsSFHeader[iColumn].cxChar; + if (pidl == NULL) + { + psd->str.uType = STRRET_WSTR; + if (LoadStringW(shell32_hInstance, FontsSFHeader[iColumn].colnameid, buffer, MAX_PATH)) + hr = SHStrDupW(buffer, &psd->str.u.pOleStr); + + return hr; + } + + if (iColumn == COLUMN_NAME) + { + psd->str.uType = STRRET_WSTR; + return IShellFolder2_GetDisplayNameOf(iface, pidl, SHGDN_NORMAL, &psd->str); + } + + psd->str.uType = STRRET_CSTR; + psd->str.u.cStr[0] = '\0'; + + switch(iColumn) + { + case COLUMN_TYPE: + pfont = _ILGetFontStruct(pidl); + if (pfont) + { + if (SHGetFileInfoW(pfont->szName + pfont->offsFile, 0, &fi, sizeof(fi), SHGFI_TYPENAME)) + { + psd->str.u.pOleStr = CoTaskMemAlloc((wcslen(fi.szTypeName)+1) * sizeof(WCHAR)); + if (!psd->str.u.pOleStr) + return E_OUTOFMEMORY; + wcscpy(psd->str.u.pOleStr, fi.szTypeName); + psd->str.uType = STRRET_WSTR; + return S_OK; + } + } + break; + case COLUMN_SIZE: + pfont = _ILGetFontStruct(pidl); + if (pfont) + { + hFile = CreateFileW(pfont->szName + pfont->offsFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (hFile != INVALID_HANDLE_VALUE) + { + if (GetFileSizeEx(hFile, &FileSize)) + { + if (StrFormatByteSizeW(FileSize.QuadPart, buffer, sizeof(buffer)/sizeof(WCHAR))) + { + psd->str.u.pOleStr = CoTaskMemAlloc(wcslen(buffer) + 1); + if (!psd->str.u.pOleStr) + return E_OUTOFMEMORY; + wcscpy(psd->str.u.pOleStr, buffer); + psd->str.uType = STRRET_WSTR; + CloseHandle(hFile); + return S_OK; + } + } + CloseHandle(hFile); + } + } + break; + case COLUMN_FILENAME: + pfont = _ILGetFontStruct(pidl); + if (pfont) + { + psd->str.u.pOleStr = CoTaskMemAlloc((wcslen(pfont->szName + pfont->offsFile) + 1) * sizeof(WCHAR)); + if (psd->str.u.pOleStr) + { + psd->str.uType = STRRET_WSTR; + wcscpy(psd->str.u.pOleStr, pfont->szName + pfont->offsFile); + return S_OK; + } + else + return E_OUTOFMEMORY; + } + break; + } + + return E_FAIL; +} + +static HRESULT WINAPI ISF_Fonts_fnMapColumnToSCID (IShellFolder2 * iface, + UINT column, SHCOLUMNID * pscid) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + FIXME ("(%p)\n", This); + + return E_NOTIMPL; +} + +static const IShellFolder2Vtbl vt_ShellFolder2 = { + ISF_Fonts_fnQueryInterface, + ISF_Fonts_fnAddRef, + ISF_Fonts_fnRelease, + ISF_Fonts_fnParseDisplayName, + ISF_Fonts_fnEnumObjects, + ISF_Fonts_fnBindToObject, + ISF_Fonts_fnBindToStorage, + ISF_Fonts_fnCompareIDs, + ISF_Fonts_fnCreateViewObject, + ISF_Fonts_fnGetAttributesOf, + ISF_Fonts_fnGetUIObjectOf, + ISF_Fonts_fnGetDisplayNameOf, + ISF_Fonts_fnSetNameOf, + /* ShellFolder2 */ + ISF_Fonts_fnGetDefaultSearchGUID, + ISF_Fonts_fnEnumSearches, + ISF_Fonts_fnGetDefaultColumn, + ISF_Fonts_fnGetDefaultColumnState, + ISF_Fonts_fnGetDetailsEx, + ISF_Fonts_fnGetDetailsOf, + ISF_Fonts_fnMapColumnToSCID +}; + +/************************************************************************ + * INPFldr_PersistFolder2_QueryInterface + */ +static HRESULT WINAPI INPFldr_PersistFolder2_QueryInterface (IPersistFolder2 * iface, + REFIID iid, LPVOID * ppvObj) +{ + _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface); + + TRACE ("(%p)\n", This); + + return IUnknown_QueryInterface (_IUnknown_ (This), iid, ppvObj); +} + +/************************************************************************ + * INPFldr_PersistFolder2_AddRef + */ +static ULONG WINAPI INPFldr_PersistFolder2_AddRef (IPersistFolder2 * iface) +{ + _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface); + + TRACE ("(%p)->(count=%u)\n", This, This->ref); + + return IUnknown_AddRef (_IUnknown_ (This)); +} + +/************************************************************************ + * ISFPersistFolder_Release + */ +static ULONG WINAPI INPFldr_PersistFolder2_Release (IPersistFolder2 * iface) +{ + _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface); + + TRACE ("(%p)->(count=%u)\n", This, This->ref); + + return IUnknown_Release (_IUnknown_ (This)); +} + +/************************************************************************ + * INPFldr_PersistFolder2_GetClassID + */ +static HRESULT WINAPI INPFldr_PersistFolder2_GetClassID ( + IPersistFolder2 * iface, CLSID * lpClassId) +{ + _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface); + + TRACE ("(%p)\n", This); + + if (!lpClassId) + return E_POINTER; + + *lpClassId = CLSID_FontsFolderShortcut; + + return S_OK; +} + +/************************************************************************ + * INPFldr_PersistFolder2_Initialize + * + * NOTES: it makes no sense to change the pidl + */ +static HRESULT WINAPI INPFldr_PersistFolder2_Initialize ( + IPersistFolder2 * iface, LPCITEMIDLIST pidl) +{ + _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface); + + TRACE ("(%p)->(%p)\n", This, pidl); + + return E_NOTIMPL; +} + +/************************************************************************** + * IPersistFolder2_fnGetCurFolder + */ +static HRESULT WINAPI INPFldr_PersistFolder2_GetCurFolder ( + IPersistFolder2 * iface, LPITEMIDLIST * pidl) +{ + _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface); + + TRACE ("(%p)->(%p)\n", This, pidl); + + if (!pidl) + return E_POINTER; + + *pidl = ILClone (This->pidlRoot); + + return S_OK; +} + +static const IPersistFolder2Vtbl vt_NP_PersistFolder2 = +{ + INPFldr_PersistFolder2_QueryInterface, + INPFldr_PersistFolder2_AddRef, + INPFldr_PersistFolder2_Release, + INPFldr_PersistFolder2_GetClassID, + INPFldr_PersistFolder2_Initialize, + INPFldr_PersistFolder2_GetCurFolder +}; + +/************************************************************************** +* IContextMenu2 Implementation +*/ + +/************************************************************************ + * ISF_Fonts_IContextMenu_QueryInterface + */ +static HRESULT WINAPI ISF_Fonts_IContextMenu2_QueryInterface(IContextMenu2 * iface, REFIID iid, LPVOID * ppvObject) +{ + _ICOM_THIS_From_IContextMenu2FontItem(IGenericSFImpl, iface); + + TRACE("(%p)\n", This); + + return IUnknown_QueryInterface(_IUnknown_(This), iid, ppvObject); +} + +/************************************************************************ + * ISF_Fonts_IContextMenu_AddRef + */ +static ULONG WINAPI ISF_Fonts_IContextMenu2_AddRef(IContextMenu2 * iface) +{ + _ICOM_THIS_From_IContextMenu2FontItem(IGenericSFImpl, iface); + + TRACE("(%p)->(count=%u)\n", This, This->ref); + + return IUnknown_AddRef(_IUnknown_(This)); +} + +/************************************************************************ + * ISF_Fonts_IContextMenu_Release + */ +static ULONG WINAPI ISF_Fonts_IContextMenu2_Release(IContextMenu2 * iface) +{ + _ICOM_THIS_From_IContextMenu2FontItem(IGenericSFImpl, iface); + + TRACE("(%p)->(count=%u)\n", This, This->ref); + + return IUnknown_Release(_IUnknown_(This)); +} + +/************************************************************************** +* ISF_Fonts_IContextMenu_QueryContextMenu() +*/ +static HRESULT WINAPI ISF_Fonts_IContextMenu2_QueryContextMenu( + IContextMenu2 *iface, + HMENU hMenu, + UINT indexMenu, + UINT idCmdFirst, + UINT idCmdLast, + UINT uFlags) +{ + char szBuffer[30] = {0}; + ULONG Count = 1; + + _ICOM_THIS_From_IContextMenu2FontItem(IGenericSFImpl, iface); + + TRACE("(%p)->(hmenu=%p indexmenu=%x cmdfirst=%x cmdlast=%x flags=%x )\n", + This, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags); + + if (LoadStringA(shell32_hInstance, IDS_OPEN, szBuffer, sizeof(szBuffer)/sizeof(char))) + { + szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_DEFAULT); + Count++; + } + + if (LoadStringA(shell32_hInstance, IDS_PRINT_VERB, szBuffer, sizeof(szBuffer)/sizeof(char))) + { + szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_STRING, szBuffer, MFS_ENABLED); + } + + if (LoadStringA(shell32_hInstance, IDS_COPY, szBuffer, sizeof(szBuffer)/sizeof(char))) + { + szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED); + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_STRING, szBuffer, MFS_ENABLED); + } + + if (LoadStringA(shell32_hInstance, IDS_DELETE, szBuffer, sizeof(szBuffer)/sizeof(char))) + { + szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED); + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_ENABLED); + } + + if (LoadStringA(shell32_hInstance, IDS_PROPERTIES, szBuffer, sizeof(szBuffer)/sizeof(char))) + { + szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED); + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_ENABLED); + } + + return MAKE_HRESULT(SEVERITY_SUCCESS, 0, Count); +} + + +/************************************************************************** +* ISF_Fonts_IContextMenu_InvokeCommand() +*/ +static HRESULT WINAPI ISF_Fonts_IContextMenu2_InvokeCommand( + IContextMenu2 *iface, + LPCMINVOKECOMMANDINFO lpcmi) +{ + _ICOM_THIS_From_IContextMenu2FontItem(IGenericSFImpl, iface); + SHELLEXECUTEINFOW sei; + PIDLFontStruct * pfont; + SHFILEOPSTRUCTW op; + + TRACE("(%p)->(invcom=%p verb=%p wnd=%p)\n",This,lpcmi,lpcmi->lpVerb, lpcmi->hwnd); + + if (lpcmi->lpVerb == MAKEINTRESOURCE(1) || lpcmi->lpVerb == MAKEINTRESOURCE(2) || lpcmi->lpVerb == MAKEINTRESOURCE(7)) + { + ZeroMemory(&sei, sizeof(sei)); + sei.cbSize = sizeof(sei); + sei.hwnd = lpcmi->hwnd; + sei.nShow = SW_SHOWNORMAL; + if (lpcmi->lpVerb == MAKEINTRESOURCE(1)) + sei.lpVerb = L"open"; + else if (lpcmi->lpVerb == MAKEINTRESOURCE(2)) + sei.lpVerb = L"print"; + else if (lpcmi->lpVerb == MAKEINTRESOURCE(7)) + sei.lpVerb = L"properties"; + + pfont = _ILGetFontStruct(This->apidl); + sei.lpFile = pfont->szName + pfont->offsFile; + + ShellExecuteExW(&sei); + if (sei.hInstApp <= (HINSTANCE)32) + return E_FAIL; + } + else if (lpcmi->lpVerb == MAKEINTRESOURCE(4)) + { + FIXME("implement font copying\n"); + return E_NOTIMPL; + } + else if (lpcmi->lpVerb == MAKEINTRESOURCE(6)) + { + ZeroMemory(&op, sizeof(op)); + op.hwnd = lpcmi->hwnd; + op.wFunc = FO_DELETE; + op.fFlags = FOF_ALLOWUNDO; + pfont = _ILGetFontStruct(This->apidl); + op.pFrom = pfont->szName + pfont->offsFile; + SHFileOperationW(&op); + } + + return S_OK; +} + +/************************************************************************** + * ISF_Fonts_IContextMenu_GetCommandString() + * + */ +static HRESULT WINAPI ISF_Fonts_IContextMenu2_GetCommandString( + IContextMenu2 *iface, + UINT_PTR idCommand, + UINT uFlags, + UINT* lpReserved, + LPSTR lpszName, + UINT uMaxNameLen) +{ + _ICOM_THIS_From_IContextMenu2FontItem(IGenericSFImpl, iface); + + TRACE("(%p)->(idcom=%lx flags=%x %p name=%p len=%x)\n",This, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen); + + + return E_FAIL; +} + + + +/************************************************************************** +* ISF_Fonts_IContextMenu_HandleMenuMsg() +*/ +static HRESULT WINAPI ISF_Fonts_IContextMenu2_HandleMenuMsg( + IContextMenu2 *iface, + UINT uMsg, + WPARAM wParam, + LPARAM lParam) +{ + _ICOM_THIS_From_IContextMenu2FontItem(IGenericSFImpl, iface); + + TRACE("ISF_Fonts_IContextMenu_HandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n",This, uMsg, wParam, lParam); + + return E_NOTIMPL; +} + +static const IContextMenu2Vtbl vt_ContextMenu2FontItem = +{ + ISF_Fonts_IContextMenu2_QueryInterface, + ISF_Fonts_IContextMenu2_AddRef, + ISF_Fonts_IContextMenu2_Release, + ISF_Fonts_IContextMenu2_QueryContextMenu, + ISF_Fonts_IContextMenu2_InvokeCommand, + ISF_Fonts_IContextMenu2_GetCommandString, + ISF_Fonts_IContextMenu2_HandleMenuMsg +}; + + + + + + diff --git a/reactos/dll/win32/shell32/shfldr_mycomp.c b/reactos/dll/win32/shell32/shfldr_mycomp.c index 2d7d9dc56f3..b54e7d2e9ee 100644 --- a/reactos/dll/win32/shell32/shfldr_mycomp.c +++ b/reactos/dll/win32/shell32/shfldr_mycomp.c @@ -684,24 +684,52 @@ static HRESULT WINAPI ISF_MyComputer_fnGetDisplayNameOf (IShellFolder2 *iface, } else if (_ILIsDrive(pidl)) { - _ILSimpleGetTextW (pidl, pszPath, MAX_PATH); /* append my own path */ + _ILSimpleGetTextW (pidl, pszPath, MAX_PATH); /* append my own path */ /* long view "lw_name (C:)" */ if (!(dwFlags & SHGDN_FORPARSING)) { - DWORD dwVolumeSerialNumber, dwMaximumComponetLength, dwFileSystemFlags; WCHAR wszDrive[18] = {0}; + DWORD dwVolumeSerialNumber, dwMaximumComponentLength, dwFileSystemFlags; static const WCHAR wszOpenBracket[] = {' ','(',0}; static const WCHAR wszCloseBracket[] = {')',0}; - GetVolumeInformationW (pszPath, wszDrive, - sizeof(wszDrive)/sizeof(wszDrive[0]) - 6, + lstrcpynW(wszDrive, pszPath, 4); + pszPath[0] = L'\0'; + GetVolumeInformationW (wszDrive, pszPath, + MAX_PATH - 7, &dwVolumeSerialNumber, - &dwMaximumComponetLength, &dwFileSystemFlags, NULL, 0); - strcatW (wszDrive, wszOpenBracket); - lstrcpynW (wszDrive + strlenW(wszDrive), pszPath, 3); - strcatW (wszDrive, wszCloseBracket); - strcpyW (pszPath, wszDrive); + &dwMaximumComponentLength, &dwFileSystemFlags, NULL, 0); + pszPath[MAX_PATH-1] = L'\0'; + if (!wcslen(pszPath)) + { + UINT DriveType, ResourceId; + DriveType = GetDriveTypeW(wszDrive); + switch(DriveType) + { + case DRIVE_FIXED: + ResourceId = IDS_DRIVE_FIXED; + break; + case DRIVE_REMOTE: + ResourceId = IDS_DRIVE_NETWORK; + break; + case DRIVE_CDROM: + ResourceId = IDS_DRIVE_CDROM; + break; + default: + ResourceId = 0; + } + if (ResourceId) + { + dwFileSystemFlags = LoadStringW(shell32_hInstance, ResourceId, pszPath, MAX_PATH); + if (dwFileSystemFlags > MAX_PATH - 7) + pszPath[MAX_PATH-7] = L'\0'; + } + } + strcatW (pszPath, wszOpenBracket); + wszDrive[2] = L'\0'; + strcatW (pszPath, wszDrive); + strcatW (pszPath, wszCloseBracket); } } else diff --git a/reactos/dll/win32/shell32/shlfldr_mydocuments.c b/reactos/dll/win32/shell32/shfldr_mydocuments.c similarity index 100% rename from reactos/dll/win32/shell32/shlfldr_mydocuments.c rename to reactos/dll/win32/shell32/shfldr_mydocuments.c diff --git a/reactos/dll/win32/shell32/shfldr_netplaces.c b/reactos/dll/win32/shell32/shfldr_netplaces.c index 1216341d8ee..adf27f33fb6 100644 --- a/reactos/dll/win32/shell32/shfldr_netplaces.c +++ b/reactos/dll/win32/shell32/shfldr_netplaces.c @@ -45,6 +45,7 @@ #include "wine/debug.h" #include "debughlp.h" #include "shfldr.h" +#include "shlwapi.h" WINE_DEFAULT_DEBUG_CHANNEL (shell); @@ -73,11 +74,18 @@ static const IPersistFolder2Vtbl vt_NP_PersistFolder2; #define _IPersistFolder2_(This) (IPersistFolder2*)&(This->lpVtblPersistFolder2) static shvheader NetworkPlacesSFHeader[] = { - {IDS_SHV_COLUMN1, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, - {IDS_SHV_COLUMN9, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10} + {IDS_SHV_COLUMN8, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN13, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, + {IDS_SHV_COLUMN_WORKGROUP, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_NETWORKLOCATION, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15} }; -#define NETWORKPLACESSHELLVIEWCOLUMNS 2 +#define COLUMN_NAME 0 +#define COLUMN_CATEGORY 1 +#define COLUMN_WORKGROUP 2 +#define COLUMN_NETLOCATION 3 + +#define NETWORKPLACESSHELLVIEWCOLUMNS 4 /************************************************************************** * ISF_NetworkPlaces_Constructor @@ -209,11 +217,11 @@ static HRESULT WINAPI ISF_NetworkPlaces_fnEnumObjects (IShellFolder2 * iface, TRACE ("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", This, hwndOwner, dwFlags, ppEnumIDList); - *ppEnumIDList = IEnumIDList_Constructor(); + *ppEnumIDList = NULL; //IEnumIDList_Constructor(); TRACE ("-- (%p)->(new ID List: %p)\n", This, *ppEnumIDList); - - return (*ppEnumIDList) ? S_OK : E_OUTOFMEMORY; + return S_FALSE; + // return (*ppEnumIDList) ? S_OK : E_OUTOFMEMORY; } /************************************************************************** @@ -517,6 +525,25 @@ static HRESULT WINAPI ISF_NetworkPlaces_fnGetDetailsOf (IShellFolder2 * iface, LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS * psd) { IGenericSFImpl *This = (IGenericSFImpl *)iface; + WCHAR buffer[MAX_PATH] = {0}; + HRESULT hr = E_FAIL; + + if (iColumn >= NETWORKPLACESSHELLVIEWCOLUMNS) + return E_FAIL; + + psd->fmt = NetworkPlacesSFHeader[iColumn].fmt; + psd->cxChar = NetworkPlacesSFHeader[iColumn].cxChar; + if (pidl == NULL) + { + psd->str.uType = STRRET_WSTR; + if (LoadStringW(shell32_hInstance, NetworkPlacesSFHeader[iColumn].colnameid, buffer, MAX_PATH)) + hr = SHStrDupW(buffer, &psd->str.u.pOleStr); + + return hr; + } + + if (iColumn == COLUMN_NAME) + return IShellFolder2_GetDisplayNameOf(iface, pidl, SHGDN_NORMAL, &psd->str); FIXME ("(%p)->(%p %i %p)\n", This, pidl, iColumn, psd); diff --git a/reactos/dll/win32/shell32/shfldr_printers.c b/reactos/dll/win32/shell32/shfldr_printers.c index 98867c0f90d..9e31aa2abee 100644 --- a/reactos/dll/win32/shell32/shfldr_printers.c +++ b/reactos/dll/win32/shell32/shfldr_printers.c @@ -71,6 +71,26 @@ typedef struct #define _IExtractIconA_Offset ((int)(&(((IExtractIconWImpl*)0)->lpvtblExtractIconA))) #define _ICOM_THIS_From_IExtractIconA(class, name) class* This = (class*)(((char*)name)-_IExtractIconA_Offset); +static shvheader PrinterSFHeader[] = { + {IDS_SHV_COLUMN8, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN_DOCUMENTS , SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN_STATUS, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN_COMMENTS, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN_LOCATION, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN_MODEL, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15} +}; + +#define COLUMN_NAME 0 +#define COLUMN_DOCUMENTS 1 +#define COLUMN_STATUS 2 +#define COLUMN_COMMENTS 3 +#define COLUMN_LOCATION 4 +#define COLUMN_MODEL 5 + + +#define PrinterSHELLVIEWCOLUMNS (6) + + /************************************************************************** * IExtractIconW_QueryInterface */ @@ -416,6 +436,61 @@ static HRESULT WINAPI ISF_Printers_fnParseDisplayName (IShellFolder2 * iface, return E_NOTIMPL; } +static LPITEMIDLIST _ILCreatePrinterItem(PRINTER_INFO_4W *pi) +{ + PIDLDATA tmp; + LPITEMIDLIST pidl; + PIDLPrinterStruct * p; + int size0 = (char*)&tmp.u.cprinter.szName-(char*)&tmp.u.cprinter; + int size = size0; + + tmp.type = 0x00; + tmp.u.cprinter.dummy = 0xFF; + if (pi->pPrinterName) + tmp.u.cprinter.offsServer = wcslen(pi->pPrinterName) + 1; + else + tmp.u.cprinter.offsServer = 1; + + size += tmp.u.cprinter.offsServer * sizeof(WCHAR); + if (pi->pServerName) + size += ( + wcslen(pi->pServerName) + 1) * sizeof(WCHAR); + else + size += sizeof(WCHAR); + + pidl = (LPITEMIDLIST)SHAlloc(size + 4); + if (!pidl) + return pidl; + + pidl->mkid.cb = size+2; + memcpy(pidl->mkid.abID, &tmp, 2+size0); + + p = &((PIDLDATA*)pidl->mkid.abID)->u.cprinter; + + p->Attributes = pi->Attributes; + if (pi->pPrinterName) + wcscpy(p->szName, pi->pPrinterName); + else + p->szName[0] = L'\0'; + + if (pi->pServerName) + wcscpy(p->szName + p->offsServer, pi->pServerName); + else + p->szName[p->offsServer] = L'\0'; + + *(WORD*)((char*)pidl+(size+2)) = 0; + return pidl; +} + +static PIDLPrinterStruct * _ILGetPrinterStruct(LPCITEMIDLIST pidl) +{ + LPPIDLDATA pdata = _ILGetDataPointer(pidl); + + if (pdata && pdata->type==0x00) + return (PIDLPrinterStruct*)&(pdata->u.cfont); + + return NULL; +} + /************************************************************************** * CreatePrintersEnumList() */ @@ -428,10 +503,13 @@ static BOOL CreatePrintersEnumList(IEnumIDList *list, DWORD dwFlags) /* enumerate the folders */ if (dwFlags & SHCONTF_NONFOLDERS) { - DWORD needed, num, i; + DWORD needed = 0, num = 0, i; PRINTER_INFO_4W *pi; EnumPrintersW(PRINTER_ENUM_LOCAL, NULL, 4, NULL, 0, &needed, &num); + if (!needed) + return ret; + pi = HeapAlloc(GetProcessHeap(), 0, needed); if(!EnumPrintersW(PRINTER_ENUM_LOCAL, NULL, 4, (LPBYTE)pi, needed, &needed, &num)) { HeapFree(GetProcessHeap(), 0, pi); @@ -439,13 +517,13 @@ static BOOL CreatePrintersEnumList(IEnumIDList *list, DWORD dwFlags) } for(i = 0; i < num; i++) { - DWORD len = strlenW(pi[i].pPrinterName); - LPITEMIDLIST pidl = _ILAlloc(PT_VALUEW, (len + 1) * sizeof(WCHAR)); - LPPIDLDATA data = _ILGetDataPointer(pidl); - memcpy(data->u.valueW.name, pi[i].pPrinterName, (len + 1) * sizeof(WCHAR)); - AddToEnumList(list, pidl); + LPITEMIDLIST pidl = _ILCreatePrinterItem(&pi[i]); + if (pidl) + { + if (!AddToEnumList(list, pidl)) + SHFree(pidl); + } } - HeapFree(GetProcessHeap(), 0, pi); } return ret; @@ -480,10 +558,10 @@ static HRESULT WINAPI ISF_Printers_fnBindToObject (IShellFolder2 * iface, { IGenericSFImpl *This = (IGenericSFImpl *)iface; - FIXME ("(%p)->(pidl=%p,%p,%s,%p)\n", - This, pidl, pbcReserved, shdebugstr_guid (riid), ppvOut); + TRACE ("(%p)->(pidl=%p,%p,%s,%p)\n", This, + pidl, pbcReserved, shdebugstr_guid (riid), ppvOut); - return E_NOTIMPL; + return SHELL32_BindToChild (This->pidlRoot, NULL, pidl, riid, ppvOut); } /************************************************************************** @@ -508,9 +586,12 @@ static HRESULT WINAPI ISF_Printers_fnCompareIDs (IShellFolder2 * iface, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) { IGenericSFImpl *This = (IGenericSFImpl *)iface; + int nReturn; - FIXME ("(%p)->(0x%08lx,pidl1=%p,pidl2=%p): stub\n", This, lParam, pidl1, pidl2); - return E_NOTIMPL; + TRACE ("(%p)->(0x%08lx,pidl1=%p,pidl2=%p)\n", This, lParam, pidl1, pidl2); + nReturn = SHELL32_CompareIDs (_IShellFolder_ (This), lParam, pidl1, pidl2); + TRACE ("-- %i\n", nReturn); + return nReturn; } /************************************************************************** @@ -519,12 +600,40 @@ static HRESULT WINAPI ISF_Printers_fnCompareIDs (IShellFolder2 * iface, static HRESULT WINAPI ISF_Printers_fnCreateViewObject (IShellFolder2 * iface, HWND hwndOwner, REFIID riid, LPVOID * ppvOut) { + + LPSHELLVIEW pShellView; + HRESULT hr = E_INVALIDARG; IGenericSFImpl *This = (IGenericSFImpl *)iface; - FIXME ("(%p)->(hwnd=%p,%s,%p): stub\n", - This, hwndOwner, shdebugstr_guid (riid), ppvOut); + TRACE ("(%p)->(hwnd=%p,%s,%p)\n", This, + hwndOwner, shdebugstr_guid (riid), ppvOut); - return E_NOTIMPL; + if (!ppvOut) + return hr; + + *ppvOut = NULL; + + if (IsEqualIID (riid, &IID_IDropTarget)) + { + WARN ("IDropTarget not implemented\n"); + hr = E_NOTIMPL; + } + else if (IsEqualIID (riid, &IID_IContextMenu)) + { + WARN ("IContextMenu not implemented\n"); + hr = E_NOTIMPL; + } + else if (IsEqualIID (riid, &IID_IShellView)) + { + pShellView = IShellView_Constructor ((IShellFolder *) iface); + if (pShellView) + { + hr = IShellView_QueryInterface (pShellView, riid, ppvOut); + IShellView_Release (pShellView); + } + } + TRACE ("-- (%p)->(interface=%p)\n", This, ppvOut); + return hr; } /************************************************************************** @@ -594,8 +703,7 @@ static HRESULT WINAPI ISF_Printers_fnGetDisplayNameOf (IShellFolder2 * iface, LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet) { IGenericSFImpl *This = (IGenericSFImpl *)iface; - WCHAR *name; - DWORD len; + PIDLPrinterStruct * p; TRACE ("(%p)->(pidl=%p,0x%08lx,%p)\n", This, pidl, dwFlags, strRet); pdump (pidl); @@ -603,13 +711,15 @@ static HRESULT WINAPI ISF_Printers_fnGetDisplayNameOf (IShellFolder2 * iface, if (!strRet) return E_INVALIDARG; - name = _ILGetDataPointer(pidl)->u.valueW.name; - len = strlenW(name); + p = _ILGetPrinterStruct(pidl); + if (!p) + return E_INVALIDARG; - strRet->uType = STRRET_WSTR; - strRet->u.pOleStr = SHAlloc((len + 1) * sizeof(WCHAR)); - memcpy(strRet->u.pOleStr, name, (len + 1) * sizeof(WCHAR)); + strRet->u.pOleStr = SHAlloc(p->offsServer * sizeof(WCHAR)); + if (!strRet->u.pOleStr) + return E_OUTOFMEMORY; + memcpy((LPVOID)strRet->u.pOleStr, (LPVOID)p->szName, p->offsServer * sizeof(WCHAR)); TRACE("ret %s\n", debugstr_w(strRet->u.pOleStr)); return S_OK; @@ -659,20 +769,21 @@ static HRESULT WINAPI ISF_Printers_fnEnumSearches (IShellFolder2 *iface, static HRESULT WINAPI ISF_Printers_fnGetDefaultColumn (IShellFolder2 * iface, DWORD dwRes, ULONG * pSort, ULONG * pDisplay) { - IGenericSFImpl *This = (IGenericSFImpl *)iface; + if (pSort) + *pSort = 0; + if (pDisplay) + *pDisplay = 0; - FIXME ("(%p): stub\n", This); - - return E_NOTIMPL; + return S_OK; } static HRESULT WINAPI ISF_Printers_fnGetDefaultColumnState ( IShellFolder2 * iface, UINT iColumn, DWORD * pcsFlags) { - IGenericSFImpl *This = (IGenericSFImpl *)iface; + if (!pcsFlags || iColumn >= PrinterSHELLVIEWCOLUMNS) + return E_INVALIDARG; + *pcsFlags = PrinterSFHeader[iColumn].pcsFlags; + return S_OK; - FIXME ("(%p): stub\n", This); - - return E_NOTIMPL; } static HRESULT WINAPI ISF_Printers_fnGetDetailsEx (IShellFolder2 * iface, @@ -688,8 +799,33 @@ static HRESULT WINAPI ISF_Printers_fnGetDetailsOf (IShellFolder2 * iface, LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS * psd) { IGenericSFImpl *This = (IGenericSFImpl *)iface; + WCHAR buffer[MAX_PATH] = {0}; + HRESULT hr = E_FAIL; - FIXME ("(%p)->(%p %i %p): stub\n", This, pidl, iColumn, psd); + TRACE("(%p)->(%p %i %p): stub\n", This, pidl, iColumn, psd); + + if (iColumn >= PrinterSHELLVIEWCOLUMNS) + return E_FAIL; + + psd->fmt = PrinterSFHeader[iColumn].fmt; + psd->cxChar = PrinterSFHeader[iColumn].cxChar; + if (pidl == NULL) + { + psd->str.uType = STRRET_WSTR; + if (LoadStringW(shell32_hInstance, PrinterSFHeader[iColumn].colnameid, buffer, MAX_PATH)) + hr = SHStrDupW(buffer, &psd->str.u.pOleStr); + + return hr; + } + + if (iColumn == COLUMN_NAME) + { + psd->str.uType = STRRET_WSTR; + return IShellFolder2_GetDisplayNameOf(iface, pidl, SHGDN_NORMAL, &psd->str); + } + + psd->str.uType = STRRET_CSTR; + psd->str.u.cStr[0] = '\0'; return E_NOTIMPL; } diff --git a/reactos/dll/win32/shell32/recyclebin.c b/reactos/dll/win32/shell32/shfldr_recyclebin.c similarity index 51% rename from reactos/dll/win32/shell32/recyclebin.c rename to reactos/dll/win32/shell32/shfldr_recyclebin.c index 0bf9260b98b..aae4772cdf5 100644 --- a/reactos/dll/win32/shell32/recyclebin.c +++ b/reactos/dll/win32/shell32/shfldr_recyclebin.c @@ -77,26 +77,6 @@ static const columninfo RecycleBinColumns[] = #define COLUMNS_COUNT 6 -static HRESULT FormatDateTime(LPWSTR buffer, int size, FILETIME ft) -{ - FILETIME lft; - SYSTEMTIME time; - int ret; - - FileTimeToLocalFileTime(&ft, &lft); - FileTimeToSystemTime(&lft, &time); - - ret = GetDateFormatW(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &time, NULL, buffer, size); - if (ret>0 && retlpVtbl = &recycleBinVtbl; - obj->lpSEI = &eivt; + obj->lpSEI = &eivt; obj->lpPersistFolderVtbl = &recycleBinPersistVtbl; - obj->lpCmt = &recycleBincmVtbl; + obj->lpContextMenu2 = NULL; if (FAILED(ret = IUnknown_QueryInterface((IUnknown *)obj, riid, ppOutput))) { RecycleBin_Destructor(obj); @@ -183,9 +180,11 @@ static HRESULT WINAPI RecycleBin_QueryInterface(IShellFolder2 *iface, REFIID rii || IsEqualGUID(riid, &IID_IPersistFolder2)) *ppvObject = &This->lpPersistFolderVtbl; - if (IsEqualIID(riid, &IID_IContextMenu)) - *ppvObject = &This->lpCmt; - + if (IsEqualIID(riid, &IID_IContextMenu) || IsEqualGUID(riid, &IID_IContextMenu2)) + { + This->lpContextMenu2 = &recycleBincmVtblFolder; + *ppvObject = &This->lpContextMenu2; + } if(IsEqualIID(riid, &IID_IShellExtInit)) { *ppvObject = &(This->lpSEI); @@ -237,16 +236,51 @@ UnpackDetailsFromPidl(LPCITEMIDLIST pidl) return (PDELETED_FILE_DETAILS_W)&pidl->mkid.abID; } +static LPITEMIDLIST _ILCreateRecycleItem(PDELETED_FILE_DETAILS_W pFileDetails) +{ + PIDLDATA tmp; + LPITEMIDLIST pidl; + PIDLRecycleStruct * p; + int size0 = (char*)&tmp.u.crecycle.szName-(char*)&tmp.u.crecycle; + int size = size0; + + tmp.type = 0x00; + size += (wcslen(pFileDetails->FileName) + 1) * sizeof(WCHAR); + + pidl = (LPITEMIDLIST)SHAlloc(size + 4); + if (!pidl) + return pidl; + + pidl->mkid.cb = size+2; + memcpy(pidl->mkid.abID, &tmp, 2+size0); + + p = &((PIDLDATA*)pidl->mkid.abID)->u.crecycle; + RtlCopyMemory(p, pFileDetails, sizeof(DELETED_FILE_DETAILS_W)); + wcscpy(p->szName, pFileDetails->FileName); + *(WORD*)((char*)pidl+(size+2)) = 0; + return pidl; +} + +static PIDLRecycleStruct * _ILGetRecycleStruct(LPCITEMIDLIST pidl) +{ + LPPIDLDATA pdata = _ILGetDataPointer(pidl); + + if (pdata && pdata->type==0x00) + return (PIDLRecycleStruct*)&(pdata->u.crecycle); + + return NULL; +} + BOOL WINAPI -CBEnumBitBucket(IN PVOID Context, IN HANDLE hDeletedFile) +CBSearchBitBucket(IN PVOID Context, IN HANDLE hDeletedFile) { + PSEARCH_CONTEXT pContext = (PSEARCH_CONTEXT)Context; + PDELETED_FILE_DETAILS_W pFileDetails; - DWORD dwSize, dwTotalSize; - LPITEMIDLIST pidl = NULL; + DWORD dwSize; BOOL ret; - TRACE("CBEnumBitBucket entered\n"); if (!GetDeletedFileDetailsW(hDeletedFile, 0, NULL, @@ -256,29 +290,87 @@ CBEnumBitBucket(IN PVOID Context, IN HANDLE hDeletedFile) ERR("GetDeletedFileDetailsW failed\n"); return FALSE; } - dwTotalSize = FIELD_OFFSET(ITEMIDLIST, mkid.abID) + dwSize; - pidl = SHAlloc(dwTotalSize); - if (!pidl) + pFileDetails = SHAlloc(dwSize); + if (!pFileDetails) { ERR("No memory\n"); return FALSE; } - pidl->mkid.cb = dwTotalSize; - pFileDetails = UnpackDetailsFromPidl(pidl); - if (!GetDeletedFileDetailsW(hDeletedFile, dwSize, pFileDetails, NULL)) { ERR("GetDeletedFileDetailsW failed\n"); - SHFree(pidl); + SHFree(pFileDetails); + return FALSE; + } + + ret = memcmp(pFileDetails, pContext->pFileDetails, dwSize); + if (!ret) + { + pContext->hDeletedFile = hDeletedFile; + pContext->bFound = TRUE; + } + else + CloseRecycleBinHandle(hDeletedFile); + + SHFree(pFileDetails); + return ret; +} + + + +BOOL +WINAPI +CBEnumBitBucket(IN PVOID Context, IN HANDLE hDeletedFile) +{ + PDELETED_FILE_DETAILS_W pFileDetails; + DWORD dwSize; + LPITEMIDLIST pidl = NULL; + BOOL ret; + + if (!GetDeletedFileDetailsW(hDeletedFile, + 0, + NULL, + &dwSize) && + GetLastError() != ERROR_INSUFFICIENT_BUFFER) + { + ERR("GetDeletedFileDetailsW failed\n"); + return FALSE; + } + + pFileDetails = SHAlloc(dwSize); + if (!pFileDetails) + { + ERR("No memory\n"); + return FALSE; + } + + if (!GetDeletedFileDetailsW(hDeletedFile, + dwSize, + pFileDetails, + NULL)) + { + ERR("GetDeletedFileDetailsW failed\n"); + SHFree(pFileDetails); + return FALSE; + } + + pidl = _ILCreateRecycleItem(pFileDetails); + if (!pidl) + { + SHFree(pFileDetails); return FALSE; } ret = AddToEnumList((IEnumIDList*)Context, pidl); + + if (!ret) + SHFree(pidl); + SHFree(pFileDetails); TRACE("Returning %d\n", ret); CloseRecycleBinHandle(hDeletedFile); return ret; @@ -345,27 +437,42 @@ static HRESULT WINAPI RecycleBin_CompareIDs(IShellFolder2 *iface, LPARAM lParam, static HRESULT WINAPI RecycleBin_CreateViewObject(IShellFolder2 *iface, HWND hwndOwner, REFIID riid, void **ppv) { RecycleBin *This = (RecycleBin *)iface; - HRESULT ret; + LPSHELLVIEW pShellView; + HRESULT hr = E_NOINTERFACE; + TRACE("(%p, %p, %s, %p)\n", This, hwndOwner, debugstr_guid(riid), ppv); + if (!ppv) + return hr; + *ppv = NULL; - if (IsEqualGUID(riid, &IID_IShellView)) + + if (IsEqualIID (riid, &IID_IDropTarget)) { - IShellView *tmp; - CSFV sfv; - - ZeroMemory(&sfv, sizeof(sfv)); - sfv.cbSize = sizeof(sfv); - sfv.pshf = (IShellFolder *)This; - - TRACE("Calling SHCreateShellFolderViewEx\n"); - ret = SHCreateShellFolderViewEx(&sfv, &tmp); - TRACE("Result: %08x, output: %p\n", (unsigned int)ret, tmp); - *ppv = tmp; - return ret; + WARN ("IDropTarget not implemented\n"); + hr = E_NOTIMPL; } + else if (IsEqualIID (riid, &IID_IContextMenu) || IsEqualIID (riid, &IID_IContextMenu2)) + { + This->lpContextMenu2 = &recycleBincmVtblFolder; + *ppv = &This->lpContextMenu2; + This->refCount++; + hr = S_OK; + } + else if (IsEqualIID (riid, &IID_IShellView)) + { + pShellView = IShellView_Constructor ((IShellFolder *) iface); + if (pShellView) + { + hr = IShellView_QueryInterface (pShellView, riid, ppv); + IShellView_Release (pShellView); + } + } + else + return hr; + TRACE ("-- (%p)->(interface=%p)\n", This, ppv); + return hr; - return E_NOINTERFACE; } static HRESULT WINAPI RecycleBin_GetAttributesOf(IShellFolder2 *This, UINT cidl, LPCITEMIDLIST *apidl, @@ -376,17 +483,49 @@ static HRESULT WINAPI RecycleBin_GetAttributesOf(IShellFolder2 *This, UINT cidl, return S_OK; } -static HRESULT WINAPI RecycleBin_GetUIObjectOf(IShellFolder2 *This, HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl, - REFIID riid, UINT *rgfReserved, void **ppv) +static HRESULT WINAPI RecycleBin_GetUIObjectOf(IShellFolder2 *iface, HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl, + REFIID riid, UINT *prgfInOut, void **ppv) { - FIXME("(%p, %p, %d, {%p, ...}, %s, %p, %p): stub!\n", This, hwndOwner, cidl, apidl[0], debugstr_guid(riid), rgfReserved, ppv); + IUnknown *pObj = NULL; + HRESULT hr = E_INVALIDARG; + RecycleBin * This = (RecycleBin*)iface; + + TRACE ("(%p)->(%p,%u,apidl=%p, %p %p)\n", This, + hwndOwner, cidl, apidl, prgfInOut, ppv); + + if (!ppv) + return hr; + *ppv = NULL; - return E_NOTIMPL; + + if ((IsEqualIID (riid, &IID_IContextMenu) || IsEqualIID(riid, &IID_IContextMenu2)) && (cidl >= 1)) + { + This->lpContextMenu2 = &recycleBincmVtblBitbucketItem; + pObj = (IUnknown*)(&This->lpContextMenu2); + This->apidl = apidl[0]; + IUnknown_AddRef(pObj); + hr = S_OK; + } + else if (IsEqualIID (riid, &IID_IDropTarget) && (cidl >= 1)) + { + hr = IShellFolder_QueryInterface (iface, &IID_IDropTarget, (LPVOID *) & pObj); + } + else + hr = E_NOINTERFACE; + + if (SUCCEEDED(hr) && !pObj) + hr = E_OUTOFMEMORY; + + *ppv = pObj; + TRACE ("(%p)->hr=0x%08x\n", This, hr); + return hr; } static HRESULT WINAPI RecycleBin_GetDisplayNameOf(IShellFolder2 *This, LPCITEMIDLIST pidl, SHGDNF uFlags, STRRET *pName) { - PDELETED_FILE_DETAILS_W pFileDetails; + PIDLRecycleStruct *pFileDetails; + LPWSTR pFileName; + TRACE("(%p, %p, %x, %p)\n", This, pidl, (unsigned int)uFlags, pName); @@ -400,12 +539,27 @@ static HRESULT WINAPI RecycleBin_GetDisplayNameOf(IShellFolder2 *This, LPCITEMID return S_OK; } - pFileDetails = UnpackDetailsFromPidl(pidl); - pName->uType = STRRET_WSTR; - pName->u.pOleStr = StrDupW(&pFileDetails->FileName[0]); + pFileDetails = _ILGetRecycleStruct(pidl); + if (!pFileDetails) + { + pName->u.cStr[0] = 0; + pName->uType = STRRET_CSTR; + return E_INVALIDARG; + } + + pFileName = wcsrchr(pFileDetails->szName, L'\\'); + if (!pFileName) + { + pName->u.cStr[0] = 0; + pName->uType = STRRET_CSTR; + return E_UNEXPECTED; + } + + pName->u.pOleStr = StrDupW(pFileName + 1); if (pName->u.pOleStr == NULL) return E_OUTOFMEMORY; + pName->uType = STRRET_WSTR; return S_OK; } @@ -416,34 +570,6 @@ static HRESULT WINAPI RecycleBin_SetNameOf(IShellFolder2 *This, HWND hwnd, LPCIT return E_FAIL; /* not supported */ } -static HRESULT WINAPI RecycleBin_GetClassID(IPersistFolder2 *This, CLSID *pClassID) -{ - TRACE("(%p, %p)\n", This, pClassID); - if (This == NULL || pClassID == NULL) - return E_INVALIDARG; - memcpy(pClassID, &CLSID_RecycleBin, sizeof(CLSID)); - return S_OK; -} - -static HRESULT WINAPI RecycleBin_Initialize(IPersistFolder2 *iface, LPCITEMIDLIST pidl) -{ - RecycleBin *This = impl_from_IPersistFolder(iface); - TRACE("(%p, %p)\n", This, pidl); - - This->pidl = ILClone(pidl); - if (This->pidl == NULL) - return E_OUTOFMEMORY; - return S_OK; -} - -static HRESULT WINAPI RecycleBin_GetCurFolder(IPersistFolder2 *iface, LPITEMIDLIST *ppidl) -{ - RecycleBin *This = impl_from_IPersistFolder(iface); - TRACE("\n"); - *ppidl = ILClone(This->pidl); - return S_OK; -} - static HRESULT WINAPI RecycleBin_GetDefaultSearchGUID(IShellFolder2 *iface, GUID *pguid) { FIXME("stub\n"); @@ -482,11 +608,34 @@ static HRESULT WINAPI RecycleBin_GetDetailsEx(IShellFolder2 *iface, LPCITEMIDLIS return E_NOTIMPL; } +static HRESULT FormatDateTime(LPWSTR buffer, int size, FILETIME * ft) +{ + FILETIME lft; + SYSTEMTIME time; + int ret; + + FileTimeToLocalFileTime(ft, &lft); + FileTimeToSystemTime(&lft, &time); + + ret = GetDateFormatW(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &time, NULL, buffer, size); + if (ret>0 && ret= COLUMNS_COUNT) @@ -503,25 +652,38 @@ static HRESULT WINAPI RecycleBin_GetDetailsOf(IShellFolder2 *iface, LPCITEMIDLIS if (iColumn == COLUMN_NAME) return RecycleBin_GetDisplayNameOf(iface, pidl, SHGDN_NORMAL, &pDetails->str); - pFileDetails = UnpackDetailsFromPidl(pidl); + pFileDetails = _ILGetRecycleStruct(pidl); switch (iColumn) { case COLUMN_DATEDEL: - FormatDateTime(buffer, MAX_PATH, pFileDetails->DeletionTime); + FormatDateTime(buffer, MAX_PATH, &pFileDetails->DeletionTime); break; case COLUMN_DELFROM: - lstrcpyW(buffer, &pFileDetails->FileName[0]); - PathRemoveFileSpecW(buffer); + pszBackslash = wcsrchr(pFileDetails->szName, L'\\'); + Length = (pszBackslash - pFileDetails->szName); + memcpy((LPVOID)buffer, pFileDetails->szName, Length * sizeof(WCHAR)); + buffer[Length] = L'\0'; break; case COLUMN_SIZE: StrFormatKBSizeW(pFileDetails->FileSize.QuadPart, buffer, MAX_PATH); break; case COLUMN_MTIME: - FormatDateTime(buffer, MAX_PATH, pFileDetails->LastModification); + FormatDateTime(buffer, MAX_PATH, &pFileDetails->LastModification); break; case COLUMN_TYPE: - /* TODO */ - buffer[0] = 0; + szTypeName[0] = L'\0'; + lstrcpyW(buffer,PathFindExtensionW(pFileDetails->szName)); + if (!( HCR_MapTypeToValueW(buffer, buffer, sizeof(buffer)/sizeof(WCHAR), TRUE) && + HCR_MapTypeToValueW(buffer, szTypeName, sizeof(szTypeName)/sizeof(WCHAR), FALSE ))) + { + lstrcpyW (szTypeName, PathFindExtensionW(pFileDetails->szName)); + strcatW(szTypeName, L"-"); + Length = wcslen(szTypeName); + if (LoadStringW(shell32_hInstance, IDS_SHV_COLUMN1, &szTypeName[Length], (sizeof(szTypeName)/sizeof(WCHAR))- Length)) + szTypeName[(sizeof(szTypeName)/sizeof(WCHAR))-1] = L'\0'; + } + pDetails->str.uType = STRRET_WSTR; + return SHStrDupW(szTypeName, &pDetails->str.u.pOleStr); break; default: return E_FAIL; @@ -571,6 +733,34 @@ static const IShellFolder2Vtbl recycleBinVtbl = RecycleBin_MapColumnToSCID }; +static HRESULT WINAPI RecycleBin_IPersistFolder2_GetClassID(IPersistFolder2 *This, CLSID *pClassID) +{ + TRACE("(%p, %p)\n", This, pClassID); + if (This == NULL || pClassID == NULL) + return E_INVALIDARG; + memcpy(pClassID, &CLSID_RecycleBin, sizeof(CLSID)); + return S_OK; +} + +static HRESULT WINAPI RecycleBin_IPersistFolder2_Initialize(IPersistFolder2 *iface, LPCITEMIDLIST pidl) +{ + RecycleBin *This = impl_from_IPersistFolder(iface); + TRACE("(%p, %p)\n", This, pidl); + + This->pidl = ILClone(pidl); + if (This->pidl == NULL) + return E_OUTOFMEMORY; + return S_OK; +} + +static HRESULT WINAPI RecycleBin_IPersistFolder2_GetCurFolder(IPersistFolder2 *iface, LPITEMIDLIST *ppidl) +{ + RecycleBin *This = impl_from_IPersistFolder(iface); + TRACE("\n"); + *ppidl = ILClone(This->pidl); + return S_OK; +} + static HRESULT WINAPI RecycleBin_IPersistFolder2_QueryInterface(IPersistFolder2 *This, REFIID riid, void **ppvObject) { return RecycleBin_QueryInterface((IShellFolder2 *)impl_from_IPersistFolder(This), riid, ppvObject); @@ -594,23 +784,13 @@ static const IPersistFolder2Vtbl recycleBinPersistVtbl = RecycleBin_IPersistFolder2_Release, /* IPersist */ - RecycleBin_GetClassID, + RecycleBin_IPersistFolder2_GetClassID, /* IPersistFolder */ - RecycleBin_Initialize, + RecycleBin_IPersistFolder2_Initialize, /* IPersistFolder2 */ - RecycleBin_GetCurFolder + RecycleBin_IPersistFolder2_GetCurFolder }; -/************************************************************************* - * SHUpdateRecycleBinIcon [SHELL32.@] - * - * Undocumented - */ -HRESULT WINAPI SHUpdateRecycleBinIcon(void) -{ - FIXME("stub\n"); - return S_OK; -} /************************************************************************* * BitBucket IShellExtInit interface */ @@ -659,31 +839,31 @@ static const IShellExtInitVtbl eivt = */ static HRESULT WINAPI -RecycleBin_IContextMenu_QueryInterface( IContextMenu* iface, REFIID riid, void** ppvObject ) +RecycleBin_IContextMenu2Folder_QueryInterface( IContextMenu2* iface, REFIID riid, void** ppvObject ) { - return RecycleBin_QueryInterface((IShellFolder2 *)impl_from_IContextMenu(iface), riid, ppvObject); + return RecycleBin_QueryInterface((IShellFolder2 *)impl_from_IContextMenu2(iface), riid, ppvObject); } static ULONG WINAPI -RecycleBin_IContextMenu_AddRef( IContextMenu* iface ) +RecycleBin_IContextMenu2Folder_AddRef( IContextMenu2* iface ) { - return RecycleBin_AddRef((IShellFolder2 *)impl_from_IContextMenu(iface)); + return RecycleBin_AddRef((IShellFolder2 *)impl_from_IContextMenu2(iface)); } static ULONG WINAPI -RecycleBin_IContextMenu_Release( IContextMenu* iface ) +RecycleBin_IContextMenu2Folder_Release( IContextMenu2* iface ) { - return RecycleBin_Release((IShellFolder2 *)impl_from_IContextMenu(iface)); + return RecycleBin_Release((IShellFolder2 *)impl_from_IContextMenu2(iface)); } static HRESULT WINAPI -RecycleBin_IContextMenu_QueryContextMenu( IContextMenu* iface, HMENU hmenu, UINT indexMenu, +RecycleBin_IContextMenu2Folder_QueryContextMenu( IContextMenu2* iface, HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags ) { WCHAR szBuffer[100]; MENUITEMINFOW mii; int id = 1; - RecycleBin * This = impl_from_IContextMenu(iface); + RecycleBin * This = impl_from_IContextMenu2(iface); TRACE("%p %p %u %u %u %u\n", This, hmenu, indexMenu, idCmdFirst, idCmdLast, uFlags ); @@ -715,7 +895,7 @@ RecycleBin_IContextMenu_QueryContextMenu( IContextMenu* iface, HMENU hmenu, UINT mii.wID = idCmdFirst + id++; if (!InsertMenuItemW( hmenu, idCmdLast, TRUE, &mii )) { - TRACE("RecycleBin_IContextMenu_QueryContextMenu failed to insert item properties"); + TRACE("RecycleBin_IContextMenu2Folder_QueryContextMenu failed to insert item properties"); return E_FAIL; } This->iIdEmpty = 2; @@ -723,13 +903,13 @@ RecycleBin_IContextMenu_QueryContextMenu( IContextMenu* iface, HMENU hmenu, UINT } static HRESULT WINAPI -RecycleBin_IContextMenu_InvokeCommand( IContextMenu* iface, LPCMINVOKECOMMANDINFO lpici ) +RecycleBin_IContextMenu2Folder_InvokeCommand( IContextMenu2* iface, LPCMINVOKECOMMANDINFO lpici ) { HRESULT hr; LPSHELLBROWSER lpSB; LPSHELLVIEW lpSV = NULL; - RecycleBin * This = impl_from_IContextMenu(iface); + RecycleBin * This = impl_from_IContextMenu2(iface); TRACE("%p %p verb %p\n", This, lpici, lpici->lpVerb); @@ -765,10 +945,10 @@ RecycleBin_IContextMenu_InvokeCommand( IContextMenu* iface, LPCMINVOKECOMMANDINF } static HRESULT WINAPI -RecycleBin_IContextMenu_GetCommandString( IContextMenu* iface, UINT_PTR idCmd, UINT uType, +RecycleBin_IContextMenu2Folder_GetCommandString( IContextMenu2* iface, UINT_PTR idCmd, UINT uType, UINT* pwReserved, LPSTR pszName, UINT cchMax ) { - RecycleBin * This = impl_from_IContextMenu(iface); + RecycleBin * This = impl_from_IContextMenu2(iface); FIXME("%p %lu %u %p %p %u\n", This, idCmd, uType, pwReserved, pszName, cchMax ); @@ -776,16 +956,227 @@ RecycleBin_IContextMenu_GetCommandString( IContextMenu* iface, UINT_PTR idCmd, U return E_NOTIMPL; } -static const IContextMenuVtbl recycleBincmVtbl = +/************************************************************************** +* RecycleBin_IContextMenu2Item_HandleMenuMsg() +*/ +static HRESULT WINAPI RecycleBin_IContextMenu2Folder_HandleMenuMsg( + IContextMenu2 *iface, + UINT uMsg, + WPARAM wParam, + LPARAM lParam) { - RecycleBin_IContextMenu_QueryInterface, - RecycleBin_IContextMenu_AddRef, - RecycleBin_IContextMenu_Release, - RecycleBin_IContextMenu_QueryContextMenu, - RecycleBin_IContextMenu_InvokeCommand, - RecycleBin_IContextMenu_GetCommandString + RecycleBin * This = impl_from_IContextMenu2(iface); + + TRACE("RecycleBin_IContextMenu2Item_IContextMenu2Folder_HandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n",This, uMsg, wParam, lParam); + + return E_NOTIMPL; +} + + +static const IContextMenu2Vtbl recycleBincmVtblFolder = +{ + RecycleBin_IContextMenu2Folder_QueryInterface, + RecycleBin_IContextMenu2Folder_AddRef, + RecycleBin_IContextMenu2Folder_Release, + RecycleBin_IContextMenu2Folder_QueryContextMenu, + RecycleBin_IContextMenu2Folder_InvokeCommand, + RecycleBin_IContextMenu2Folder_GetCommandString, + RecycleBin_IContextMenu2Folder_HandleMenuMsg }; + +/************************************************************************** +* IContextMenu2 Bitbucket Item Implementation +*/ + +/************************************************************************ + * RecycleBin_IContextMenu2Item_QueryInterface + */ +static HRESULT WINAPI RecycleBin_IContextMenu2Item_QueryInterface(IContextMenu2 * iface, REFIID iid, LPVOID * ppvObject) +{ + RecycleBin * This = impl_from_IContextMenu2(iface); + + TRACE("(%p)\n", This); + + return RecycleBin_QueryInterface((IShellFolder2*)This, iid, ppvObject); +} + +/************************************************************************ + * RecycleBin_IContextMenu2Item_AddRef + */ +static ULONG WINAPI RecycleBin_IContextMenu2Item_AddRef(IContextMenu2 * iface) +{ + RecycleBin * This = impl_from_IContextMenu2(iface); + + TRACE("(%p)->(count=%u)\n", This, This->refCount); + + return RecycleBin_AddRef((IShellFolder2*)This); +} + +/************************************************************************ + * RecycleBin_IContextMenu2Item_Release + */ +static ULONG WINAPI RecycleBin_IContextMenu2Item_Release(IContextMenu2 * iface) +{ + RecycleBin * This = impl_from_IContextMenu2(iface); + + TRACE("(%p)->(count=%u)\n", This, This->refCount); + + return RecycleBin_Release((IShellFolder2*)This); +} + +/************************************************************************** +* RecycleBin_IContextMenu2Item_QueryContextMenu() +*/ +static HRESULT WINAPI RecycleBin_IContextMenu2Item_QueryContextMenu( + IContextMenu2 *iface, + HMENU hMenu, + UINT indexMenu, + UINT idCmdFirst, + UINT idCmdLast, + UINT uFlags) +{ + char szBuffer[30] = {0}; + ULONG Count = 1; + + RecycleBin * This = impl_from_IContextMenu2(iface); + + TRACE("(%p)->(hmenu=%p indexmenu=%x cmdfirst=%x cmdlast=%x flags=%x )\n", + This, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags); + + if (LoadStringA(shell32_hInstance, IDS_RESTORE, szBuffer, sizeof(szBuffer)/sizeof(char))) + { + szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_ENABLED); + Count++; + } + + if (LoadStringA(shell32_hInstance, IDS_CUT, szBuffer, sizeof(szBuffer)/sizeof(char))) + { + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED); + szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_STRING, szBuffer, MFS_ENABLED); + } + + if (LoadStringA(shell32_hInstance, IDS_DELETE, szBuffer, sizeof(szBuffer)/sizeof(char))) + { + szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED); + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_STRING, szBuffer, MFS_ENABLED); + } + + if (LoadStringA(shell32_hInstance, IDS_PROPERTIES, szBuffer, sizeof(szBuffer)/sizeof(char))) + { + szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED); + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_DEFAULT); + } + + return MAKE_HRESULT(SEVERITY_SUCCESS, 0, Count); +} + + +/************************************************************************** +* RecycleBin_IContextMenu2Item_InvokeCommand() +*/ +static HRESULT WINAPI RecycleBin_IContextMenu2Item_InvokeCommand( + IContextMenu2 *iface, + LPCMINVOKECOMMANDINFO lpcmi) +{ + + SEARCH_CONTEXT Context; + RecycleBin * This = impl_from_IContextMenu2(iface); + static LPCWSTR szDrive = L"C:\\"; + + TRACE("(%p)->(invcom=%p verb=%p wnd=%p)\n",This,lpcmi,lpcmi->lpVerb, lpcmi->hwnd); + + if (lpcmi->lpVerb == MAKEINTRESOURCE(1) || lpcmi->lpVerb == MAKEINTRESOURCE(5)) + { + Context.pFileDetails = _ILGetRecycleStruct(This->apidl); + Context.bFound = FALSE; + + EnumerateRecycleBinW(szDrive, CBSearchBitBucket, (PVOID)&Context); + if (!Context.bFound) + return E_FAIL; + + if (lpcmi->lpVerb == MAKEINTRESOURCE(1)) + { + /* restore file */ + if (RestoreFile(Context.hDeletedFile)) + return S_OK; + else + return E_FAIL; + } + else + { + DeleteFileHandleToRecycleBin(Context.hDeletedFile); + return E_NOTIMPL; + } + } + else if (lpcmi->lpVerb == MAKEINTRESOURCE(3)) + { + FIXME("implement cut\n"); + return E_NOTIMPL; + } + else if (lpcmi->lpVerb == MAKEINTRESOURCE(7)) + { + FIXME("implement properties\n"); + return E_NOTIMPL; + } + + return S_OK; +} + +/************************************************************************** + * RecycleBin_IContextMenu2Item_GetCommandString() + * + */ +static HRESULT WINAPI RecycleBin_IContextMenu2Item_GetCommandString( + IContextMenu2 *iface, + UINT_PTR idCommand, + UINT uFlags, + UINT* lpReserved, + LPSTR lpszName, + UINT uMaxNameLen) +{ + RecycleBin * This = impl_from_IContextMenu2(iface); + + TRACE("(%p)->(idcom=%lx flags=%x %p name=%p len=%x)\n",This, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen); + + + return E_FAIL; +} + + + +/************************************************************************** +* RecycleBin_IContextMenu2Item_HandleMenuMsg() +*/ +static HRESULT WINAPI RecycleBin_IContextMenu2Item_HandleMenuMsg( + IContextMenu2 *iface, + UINT uMsg, + WPARAM wParam, + LPARAM lParam) +{ + RecycleBin * This = impl_from_IContextMenu2(iface); + + TRACE("RecycleBin_IContextMenu2Item_HandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n",This, uMsg, wParam, lParam); + + return E_NOTIMPL; +} + +static const IContextMenu2Vtbl recycleBincmVtblBitbucketItem = +{ + RecycleBin_IContextMenu2Item_QueryInterface, + RecycleBin_IContextMenu2Item_AddRef, + RecycleBin_IContextMenu2Item_Release, + RecycleBin_IContextMenu2Item_QueryContextMenu, + RecycleBin_IContextMenu2Item_InvokeCommand, + RecycleBin_IContextMenu2Item_GetCommandString, + RecycleBin_IContextMenu2Item_HandleMenuMsg +}; + + void toggleNukeOnDeleteOption(HWND hwndDlg, BOOL bEnable) { if (bEnable) @@ -809,9 +1200,10 @@ InitializeBitBucketDlg(HWND hwndDlg, WCHAR DefaultDrive) WCHAR CurDrive = L'A'; WCHAR szDrive[] = L"A:\\"; DWORD dwDrives; - WCHAR szName[30]; + WCHAR szName[100]; WCHAR szVolume[100]; DWORD MaxComponent, Flags; + DWORD dwSerial; LVCOLUMNW lc; HWND hDlgCtrl; LVITEMW li; @@ -820,7 +1212,8 @@ InitializeBitBucketDlg(HWND hwndDlg, WCHAR DefaultDrive) RECT rect; int columnSize; int defIndex = 0; - DWORD dwNukeOnDelete, dwSize; + DWORD dwSize; + PDRIVE_ITEM_CONTEXT pItem = NULL, pDefault = NULL, pFirst = NULL; hDlgCtrl = GetDlgItem(hwndDlg, 14000); @@ -858,23 +1251,45 @@ InitializeBitBucketDlg(HWND hwndDlg, WCHAR DefaultDrive) UINT Type = GetDriveTypeW(szDrive); if (Type == DRIVE_FIXED) //FIXME { - if (!GetVolumeInformationW(szDrive, szName, sizeof(szName) / sizeof(WCHAR), NULL, &MaxComponent, &Flags, NULL, 0)) + if (!GetVolumeInformationW(szDrive, szName, sizeof(szName) / sizeof(WCHAR), &dwSerial, &MaxComponent, &Flags, NULL, 0)) { szName[0] = 0; + dwSerial = -1; } + sprintfW(szVolume, L"%s (%c)", szName, szDrive[0]); memset(&li, 0x0, sizeof(LVITEMW)); li.mask = LVIF_TEXT | LVIF_PARAM; li.iSubItem = 0; li.pszText = szVolume; li.iItem = itemCount; - li.lParam = CurDrive; (void)ListView_InsertItemW(hDlgCtrl, &li); if (GetDiskFreeSpaceExW(szDrive, &FreeBytesAvailable , &TotalNumberOfBytes, &TotalNumberOfFreeBytes)) { if (StrFormatByteSizeW(TotalNumberOfFreeBytes.QuadPart, szVolume, sizeof(szVolume) / sizeof(WCHAR))) { - memset(&li, 0x0, sizeof(LVITEMW)); + + pItem = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DRIVE_ITEM_CONTEXT)); + if (pItem) + { + sprintfW(szName, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Bitbucket\\Volume\\%04X-%04X", LOWORD(dwSerial), HIWORD(dwSerial)); + dwSize = sizeof(DWORD); + RegGetValueW(HKEY_CURRENT_USER, szName, L"MaxCapacity", RRF_RT_DWORD, NULL, &pItem->dwMaxCapacity, &dwSize); + dwSize = sizeof(DWORD); + RegGetValueW(HKEY_CURRENT_USER, szName, L"NukeOnDelete", RRF_RT_DWORD, NULL, &pItem->dwNukeOnDelete, &dwSize); + pItem->dwSerial = dwSerial; + li.mask = LVIF_PARAM; + li.lParam = (LPARAM)pItem; + (void)ListView_SetItemW(hDlgCtrl, &li); + if (CurDrive == DefaultDrive) + { + defIndex = itemCount; + pDefault = pItem; + } + } + if (!pFirst) + pFirst = pItem; + li.mask = LVIF_TEXT; li.iSubItem = 1; li.pszText = szVolume; @@ -882,12 +1297,6 @@ InitializeBitBucketDlg(HWND hwndDlg, WCHAR DefaultDrive) (void)ListView_SetItemW(hDlgCtrl, &li); } } - - if (CurDrive == DefaultDrive) - { - defIndex = itemCount; - } - itemCount++; } } @@ -896,27 +1305,114 @@ InitializeBitBucketDlg(HWND hwndDlg, WCHAR DefaultDrive) dwDrives = (dwDrives >> 1); }while(dwDrives); + if (!pDefault) + pDefault = pFirst; + if (pDefault) + { + toggleNukeOnDeleteOption(hwndDlg, pDefault->dwNukeOnDelete); + SetDlgItemInt(hwndDlg, 14002, pDefault->dwMaxCapacity, FALSE); + } + ZeroMemory(&li, sizeof(li)); li.mask = LVIF_STATE; - li.state = LVIS_FOCUSED; + li.stateMask = (UINT)-1; + li.state = LVIS_FOCUSED|LVIS_SELECTED; li.iItem = defIndex; (void)ListView_SetItemW(hDlgCtrl, &li); - wcscpy(szVolume, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Bitbucket\\c"); - szVolume[62] = DefaultDrive; +} - dwSize = sizeof(dwNukeOnDelete); - if (RegGetValueW(HKEY_LOCAL_MACHINE, szVolume, L"NukeOnDelete", RRF_RT_REG_DWORD, NULL, &dwNukeOnDelete, &dwSize) == ERROR_SUCCESS) +static BOOL StoreDriveSettings(HWND hwndDlg) +{ + int iCount, iIndex; + HWND hDlgCtrl = GetDlgItem(hwndDlg, 14000); + LVITEMW li; + PDRIVE_ITEM_CONTEXT pItem; + HKEY hKey, hSubKey; + WCHAR szSerial[20]; + DWORD dwSize; + + + if (RegOpenKeyExW(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Bitbucket\\Volume", 0, KEY_WRITE, &hKey) != ERROR_SUCCESS) + return FALSE; + + iCount = ListView_GetItemCount(hDlgCtrl); + + ZeroMemory(&li, sizeof(li)); + li.mask = LVIF_PARAM; + + for(iIndex = 0; iIndex < iCount; iIndex++) { - toggleNukeOnDeleteOption(hwndDlg, dwNukeOnDelete); + li.iItem = iIndex; + if (ListView_GetItemW(hDlgCtrl, &li)) + { + pItem = (PDRIVE_ITEM_CONTEXT)li.lParam; + sprintfW(szSerial, L"%04X-%04X", LOWORD(pItem->dwSerial), HIWORD(pItem->dwSerial)); + if (RegCreateKeyExW(hKey, szSerial, 0, NULL, 0, KEY_WRITE, NULL, &hSubKey, NULL) == ERROR_SUCCESS) + { + dwSize = sizeof(DWORD); + RegSetValueExW(hSubKey, L"NukeOnDelete", 0, REG_DWORD, (LPVOID)&pItem->dwNukeOnDelete, dwSize); + dwSize = sizeof(DWORD); + RegSetValueExW(hSubKey, L"MaxCapacity", 0, REG_DWORD, (LPVOID)&pItem->dwMaxCapacity, dwSize); + RegCloseKey(hSubKey); + } + } } - else + RegCloseKey(hKey); + return TRUE; + +} + +static VOID FreeDriveItemContext(HWND hwndDlg) +{ + int iCount, iIndex; + HWND hDlgCtrl = GetDlgItem(hwndDlg, 14000); + LVITEMW li; + + iCount = ListView_GetItemCount(hDlgCtrl); + + ZeroMemory(&li, sizeof(li)); + li.mask = LVIF_PARAM; + + for(iIndex = 0; iIndex < iCount; iIndex++) { - /* default to NukeOnDelete - */ - toggleNukeOnDeleteOption(hwndDlg, TRUE); + li.iItem = iIndex; + if (ListView_GetItemW(hDlgCtrl, &li)) + { + HeapFree(GetProcessHeap(), 0, (LPVOID)li.lParam); + } } } +INT +GetDefaultItem(HWND hwndDlg, LVITEMW * li) +{ + HWND hDlgCtrl; + UINT iItemCount, iIndex; + + hDlgCtrl = GetDlgItem(hwndDlg, 14000); + if (!hDlgCtrl) + return -1; + + iItemCount = ListView_GetItemCount(hDlgCtrl); + if (!iItemCount) + return -1; + + ZeroMemory(li, sizeof(LVITEMW)); + li->mask = LVIF_PARAM | LVIF_STATE; + li->stateMask = (UINT)-1; + for (iIndex = 0; iIndex < iItemCount; iIndex++) + { + li->iItem = iIndex; + if (ListView_GetItemW(hDlgCtrl, li)) + { + if (li->state & LVIS_SELECTED) + return iIndex; + } + } + return -1; + +} + INT_PTR CALLBACK BitBucketDlg( @@ -926,12 +1422,23 @@ BitBucketDlg( LPARAM lParam ) { + LPPSHNOTIFY lppsn; + LPNMLISTVIEW lppl; + LVITEMW li; + PDRIVE_ITEM_CONTEXT pItem; + BOOL bSuccess; + UINT uResult; + switch(uMsg) { case WM_INITDIALOG: InitializeBitBucketDlg(hwndDlg, (WCHAR)lParam); + if (GetDlgCtrlID((HWND)wParam) != 14000) + { + SetFocus(GetDlgItem(hwndDlg, 14000)); + return FALSE; + } return TRUE; - case WM_COMMAND: switch(LOWORD(wParam)) { @@ -948,6 +1455,67 @@ BitBucketDlg( break; } break; + case WM_NOTIFY: + lppsn = (LPPSHNOTIFY) lParam; + lppl = (LPNMLISTVIEW) lParam; + if (lppsn->hdr.code == PSN_APPLY) + { + if (GetDefaultItem(hwndDlg, &li) > -1) + { + pItem = (PDRIVE_ITEM_CONTEXT)li.lParam; + if (pItem) + { + uResult = GetDlgItemInt(hwndDlg, 14002, &bSuccess, FALSE); + if (bSuccess) + pItem->dwMaxCapacity = uResult; + if (SendDlgItemMessageW(hwndDlg, 14003, BM_GETCHECK, 0, 0) == BST_CHECKED) + pItem->dwNukeOnDelete = TRUE; + else + pItem->dwNukeOnDelete = FALSE; + } + } + if (StoreDriveSettings(hwndDlg)) + { + SetWindowLong( hwndDlg, DWL_MSGRESULT, PSNRET_NOERROR ); + return TRUE; + } + } + else if (lppl->hdr.code == LVN_ITEMCHANGING) + { + ZeroMemory(&li, sizeof(li)); + li.mask = LVIF_PARAM; + li.iItem = lppl->iItem; + if (!ListView_GetItemW(lppl->hdr.hwndFrom, &li)) + return TRUE; + + pItem = (PDRIVE_ITEM_CONTEXT)li.lParam; + if (!pItem) + return TRUE; + + if (!(lppl->uOldState & LVIS_FOCUSED) && (lppl->uNewState & LVIS_FOCUSED)) + { + /* new focused item */ + toggleNukeOnDeleteOption(lppl->hdr.hwndFrom, pItem->dwNukeOnDelete); + SetDlgItemInt(hwndDlg, 14002, pItem->dwMaxCapacity, FALSE); + } + else if ((lppl->uOldState & LVIS_FOCUSED) && !(lppl->uNewState & LVIS_FOCUSED)) + { + /* kill focus */ + uResult = GetDlgItemInt(hwndDlg, 14002, &bSuccess, FALSE); + if (bSuccess) + pItem->dwMaxCapacity = uResult; + if (SendDlgItemMessageW(hwndDlg, 14003, BM_GETCHECK, 0, 0) == BST_CHECKED) + pItem->dwNukeOnDelete = TRUE; + else + pItem->dwNukeOnDelete = FALSE; + } + return TRUE; + + } + break; + case WM_DESTROY: + FreeDriveItemContext(hwndDlg); + break; } return FALSE; } @@ -972,7 +1540,7 @@ BOOL SH_ShowRecycleBinProperties(WCHAR sDrive) hprop = SH_CreatePropertySheetPage("BITBUCKET_PROPERTIES_DLG", BitBucketDlg, (LPARAM)sDrive, NULL); if (!hprop) { - ERR("Failed to create property sheet"); + ERR("Failed to create property sheet\n"); return FALSE; } hpsp[psh.nPages] = hprop; @@ -989,58 +1557,78 @@ BOOL SH_ShowRecycleBinProperties(WCHAR sDrive) BOOL TRASH_CanTrashFile(LPCWSTR wszPath) { - LONG res; + LONG ret; + DWORD dwNukeOnDelete, dwType, VolSerialNumber, MaxComponentLength; + DWORD FileSystemFlags, dwSize, dwDisposition; HKEY hKey; - DWORD RegSerial, dwNukeOnDelete, dwType; - DWORD dwLength; + WCHAR szBuffer[10]; + WCHAR szKey[150] = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Bitbucket\\Volume\\"; - - static WCHAR szKey[] = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Bitbucket\\c"; if (wszPath[1] != L':') { - /* path is UNC */ - return FALSE; - } - - szKey[62] = wszPath[0]; - res = RegOpenKeyExW(HKEY_LOCAL_MACHINE, szKey, 0, KEY_QUERY_VALUE, &hKey); - if (res != ERROR_SUCCESS) - { - FIXME("Failed to open registry path"); - return FALSE; - } - dwLength = sizeof(RegSerial); - res = RegQueryValueExW(hKey, L"VolumeSerialNumber", NULL, &dwType, (LPBYTE)&RegSerial, &dwLength); - if (res == ERROR_SUCCESS) - { - DWORD FileSystemFlags, MaxComponentLength, VolSerialNumber; - - GetVolumeInformationW(wszPath, NULL, 0, &VolSerialNumber, &MaxComponentLength, &FileSystemFlags, NULL, 0); - if (VolSerialNumber != RegSerial) - { - /* FIXME - * the current volume was mounted on a different path - */ - FIXME("mismatched serial volume number"); - RegCloseKey(hKey); - return FALSE; - } - } - - dwLength = sizeof(dwNukeOnDelete); - res = RegQueryValueExW(hKey, L"NukeOnDelete", NULL, &dwType, (LPBYTE)&dwNukeOnDelete, &dwLength); - if (res == ERROR_SUCCESS && dwNukeOnDelete == 0x0) - { - RegCloseKey(hKey); + /* path is UNC */ return FALSE; } - /* FIXME - * check if trash is already full - */ + if (GetDriveTypeW(wszPath) != DRIVE_FIXED) + { + /* no bitbucket on removable media */ + return FALSE; + } - RegCloseKey(hKey); - return TRUE; + if (!GetVolumeInformationW(wszPath, NULL, 0, &VolSerialNumber, &MaxComponentLength, &FileSystemFlags, NULL, 0)) + { + ERR("GetVolumeInformationW failed with %u\n", GetLastError()); + return FALSE; + } + + sprintfW(szBuffer, L"%04X-%04X", LOWORD(VolSerialNumber), HIWORD(VolSerialNumber)); + wcscat(szKey, szBuffer); + + if (RegCreateKeyExW(HKEY_CURRENT_USER, szKey, 0, NULL, 0, KEY_WRITE, NULL, &hKey, &dwDisposition) != ERROR_SUCCESS) + { + ERR("RegCreateKeyExW failed\n"); + return FALSE; + } + + if (dwDisposition & REG_CREATED_NEW_KEY) + { + /* per default move to bitbucket */ + dwNukeOnDelete = 0; + RegSetValueExW(hKey, L"NukeOnDelete", 0, REG_DWORD, (LPBYTE)&dwNukeOnDelete, sizeof(DWORD)); + /* per default unlimited size */ + dwSize = -1; + RegSetValueExW(hKey, L"MaxCapacity", 0, REG_DWORD, (LPBYTE)&dwSize, sizeof(DWORD)); + RegCloseKey(hKey); + return TRUE; + } + else + { + dwSize = sizeof(dwNukeOnDelete); + ret = RegQueryValueExW(hKey, L"NukeOnDelete", NULL, &dwType, (LPBYTE)&dwNukeOnDelete, &dwSize); + if (ret != ERROR_SUCCESS) + { + if (ret == ERROR_FILE_NOT_FOUND) + { + /* restore key and enable bitbucket */ + dwNukeOnDelete = 0; + RegSetValueExW(hKey, L"NukeOnDelete", 0, REG_DWORD, (LPBYTE)&dwNukeOnDelete, sizeof(DWORD)); + } + RegCloseKey(hKey); + return TRUE; + } + else if (dwNukeOnDelete) + { + /* do not delete to bitbucket */ + RegCloseKey(hKey); + return FALSE; + } + /* FIXME + * check if bitbucket is full + */ + RegCloseKey(hKey); + return TRUE; + } } BOOL @@ -1049,3 +1637,17 @@ TRASH_TrashFile(LPCWSTR wszPath) TRACE("(%s)\n", debugstr_w(wszPath)); return DeleteFileToRecycleBinW(wszPath); } + +/************************************************************************* + * SHUpdateRecycleBinIcon [SHELL32.@] + * + * Undocumented + */ +HRESULT WINAPI SHUpdateRecycleBinIcon(void) +{ + FIXME("stub\n"); + + + + return S_OK; +} diff --git a/reactos/dll/win32/shell32/shresdef.h b/reactos/dll/win32/shell32/shresdef.h index 45a52307666..3a06fe0abcd 100644 --- a/reactos/dll/win32/shell32/shresdef.h +++ b/reactos/dll/win32/shell32/shresdef.h @@ -87,6 +87,8 @@ #define IDS_DRIVE_CDROM 73 #define IDS_DRIVE_NETWORK 74 #define IDS_NETWORKPLACE 75 +#define IDS_FONTS 76 +#define IDS_PRINTERS 77 #define IDS_CREATEFOLDER_DENIED 128 #define IDS_CREATEFOLDER_CAPTION 129 @@ -140,6 +142,26 @@ #define IDS_PRINT_VERB 304 #define IDS_PLAY_VERB 305 #define IDS_PREVIEW_VERB 306 +#define IDS_FILE_FOLDER 307 +#define IDS_CREATELINK 308 +#define IDS_INSTALLNEWFONT 309 +#define IDS_SHV_COLUMN_FONTTYPE 310 +#define IDS_SHV_COLUMN12 311 +#define IDS_SHV_COLUMN13 312 +#define IDS_SHV_COLUMN_WORKGROUP 313 +#define IDS_SHV_NETWORKLOCATION 314 +#define IDS_COPY 315 +#define IDS_DELETE 316 +#define IDS_PROPERTIES 317 +#define IDS_SHV_COLUMN_DOCUMENTS 318 +#define IDS_SHV_COLUMN_STATUS 319 +#define IDS_SHV_COLUMN_COMMENTS 320 +#define IDS_SHV_COLUMN_LOCATION 321 +#define IDS_SHV_COLUMN_MODEL 322 +#define IDS_CUT 323 +#define IDS_RESTORE 324 +#define IDS_DEFAULT_CLUSTER_SIZE 325 +#define IDS_ADMINISTRATIVETOOLS 326 /* Note: this string is referenced from the registry */ #define IDS_RECYCLEBIN_FOLDER_NAME 8964 @@ -215,6 +237,7 @@ #define IDI_SHELL_CONFIRM_DELETE 161 #define IDI_SHELL_MY_DOCUMENTS 235 #define IDI_SHELL_CONTROL_PANEL1 330 +#define IDI_SHELL_ADMINTOOLS 328 /* AVI resources, windows shell32 has 14 of them: 150-152 and 160-170 FIXME: Need to add them, but for now just let them use the same: searching.avi diff --git a/reactos/dll/win32/shell32/shv_item_cmenu.c b/reactos/dll/win32/shell32/shv_item_cmenu.c index ecabf764aae..257f89152db 100644 --- a/reactos/dll/win32/shell32/shv_item_cmenu.c +++ b/reactos/dll/win32/shell32/shv_item_cmenu.c @@ -554,6 +554,9 @@ SH_AddStaticEntryToMenu(HMENU hMenu, UINT indexMenu, ItemCmImpl * This) idResource = IDS_PLAY_VERB; else if (!wcsicmp(curEntry->szVerb, L"preview")) idResource = IDS_PREVIEW_VERB; + else if (!wcsicmp(curEntry->szVerb, L"cplopen")) + idResource = IDS_OPEN_VERB; + else idResource = 0; @@ -857,7 +860,6 @@ static void DoProperties( ShellExecuteA(hwnd, "open", "rundll32.exe shell32.dll,Control_RunDLL desk.cpl", NULL, NULL, SW_SHOWNORMAL); return; } -#if 0 else if (_ILIsDrive(This->apidl[0])) { WCHAR buffer[111]; @@ -865,7 +867,14 @@ static void DoProperties( SH_ShowDriveProperties(buffer); return; } -#endif + else if (_ILIsNetHood(This->apidl[0])) + { + /* FIXME + * implement nethood properties + */ + FIXME("implement nethood property dialog\n"); + return; + } else if (_ILIsBitBucket(This->apidl[0])) { ///FIXME diff --git a/reactos/dll/win32/shell32/shv_item_new.c b/reactos/dll/win32/shell32/shv_item_new.c index c49c8ac4468..f8f52c057f3 100644 --- a/reactos/dll/win32/shell32/shv_item_new.c +++ b/reactos/dll/win32/shell32/shv_item_new.c @@ -84,7 +84,7 @@ GetKeyDescription(LPWSTR szKeyName, LPWSTR szResult) dwError = RegGetValueW(hKey,NULL,NULL, RRF_RT_REG_SZ,NULL,szDesc,&dwDesc); if(dwError == ERROR_SUCCESS) { - if (wcsncmp(szDesc, szKeyName, dwDesc / sizeof(WCHAR))) + if (wcsncmp(szKeyName, szDesc, dwDesc / sizeof(WCHAR))) { /* recurse for to a linked key */ if (!GetKeyDescription(szDesc, szResult)) @@ -576,7 +576,7 @@ static inline INewMenuImpl *impl_from_IShellExtInit( IShellExtInit *iface ) } #endif -static inline INewMenuImpl *impl_from_IContextMenu( IContextMenu2 *iface ) +static __inline INewMenuImpl * impl_from_IContextMenu( IContextMenu2 *iface ) { return (INewMenuImpl *)((char*)iface - FIELD_OFFSET(INewMenuImpl, lpVtblContextMenu)); } @@ -717,6 +717,7 @@ INewItem_IContextMenu_fnInvokeCommand( IContextMenu2* iface, if (LOWORD(lpici->lpVerb) == 0) { DoNewFolder(This, lpSV); + return S_OK; } hr = DoShellNewCmd(This, lpici); diff --git a/reactos/dll/win32/shell32/undocshell.h b/reactos/dll/win32/shell32/undocshell.h index 4d7f6bdb5f4..d4ebf03c1cd 100644 --- a/reactos/dll/win32/shell32/undocshell.h +++ b/reactos/dll/win32/shell32/undocshell.h @@ -548,6 +548,37 @@ BOOL WINAPI SHInitRestricted(LPCVOID unused, LPCVOID inpRegKey); DEFINE_GUID(CLSID_OpenWith, 0x09799AFB, 0xAD67, 0x11d1, 0xAB,0xCD,0x00,0xC0,0x4F,0xC3,0x09,0x36); DEFINE_GUID(CLSID_StartMenu, 0x4622AD11, 0xFF23, 0x11D0, 0x8D,0x34,0x00,0xA0,0xC9,0x0F,0x27,0x19); +/* Shell Desktop functions */ + +#undef INTERFACE +#define INTERFACE IShellDesktop +DECLARE_INTERFACE_(IShellDesktop,IUnknown) +{ + /*** IUnknown ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + /*** IShellDesktopTray ***/ + STDMETHOD_(ULONG,GetState)(THIS) PURE; + STDMETHOD(GetTrayWindow)(THIS_ HWND*) PURE; + STDMETHOD(RegisterDesktopWindow)(THIS_ HWND) PURE; + STDMETHOD(Unknown)(THIS_ DWORD,DWORD) PURE; +}; +#undef INTERFACE + +#define IShellDesktop_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b) +#define IShellDesktop_AddRef(T) (T)->lpVtbl->AddRef(T) +#define IShellDesktop_Release(T) (T)->lpVtbl->Release(T) +#define IShellDesktop_GetState(T) (T)->lpVtbl->GetState(T) +#define IShellDesktop_GetTrayWindow(T,a) (T)->lpVtbl->GetTrayWindow(T,a) +#define IShellDesktop_RegisterDesktopWindow(T,a) (T)->lpVtbl->RegisterDesktopWindow(T,a) +#define IShellDesktop_Unknown(T,a,b) (T)->lpVtbl->Unknown(T,a,b) + +#define WM_GETISHELLBROWSER (WM_USER+7) + +HANDLE WINAPI SHCreateDesktop(IShellDesktop*); +BOOL WINAPI SHDesktopMessageLoop(HANDLE); + #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ diff --git a/reactos/dll/win32/shimgvw/lang/de-DE.rc b/reactos/dll/win32/shimgvw/lang/de-DE.rc new file mode 100644 index 00000000000..7cf930eec19 --- /dev/null +++ b/reactos/dll/win32/shimgvw/lang/de-DE.rc @@ -0,0 +1,17 @@ +LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL + +STRINGTABLE +BEGIN + IDS_APPTITLE "ReactOS Picture und Fax Viewer" + IDS_SETASDESKBG "Als Desktop Hintergrund einstellen" + + /* Tooltips */ + IDS_TOOLTIP_NEXT_PIC "Nдchstes Bild" + IDS_TOOLTIP_PREV_PIC "Vorheriges Bild" + IDS_TOOLTIP_ZOOM_IN "Zoom In (+)" + IDS_TOOLTIP_ZOOM_OUT "Zoom Out (-)" + IDS_TOOLTIP_ROT_CLOCKW "Drehen im Uhrzeigersinn (Strg+K)" + IDS_TOOLTIP_ROT_COUNCW "Drehen gegen den Uhrzeigersinn (Strg+L)" + IDS_TOOLTIP_PRINT "Drucken (Strg+P)" + IDS_TOOLTIP_SAVEAS "Speichern unter... (Strg+S)" +END diff --git a/reactos/dll/win32/shimgvw/lang/no-NO.rc b/reactos/dll/win32/shimgvw/lang/no-NO.rc new file mode 100644 index 00000000000..5acffadc7a5 --- /dev/null +++ b/reactos/dll/win32/shimgvw/lang/no-NO.rc @@ -0,0 +1,17 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +STRINGTABLE +BEGIN + IDS_APPTITLE "ReactOS bilde og Faks Viser" + IDS_SETASDESKBG "Sett som skrivebord bakgrunn" + + /* Tooltips */ + IDS_TOOLTIP_NEXT_PIC "Neste bilde" + IDS_TOOLTIP_PREV_PIC "Forrige bilde" + IDS_TOOLTIP_ZOOM_IN "Forstшrre (+)" + IDS_TOOLTIP_ZOOM_OUT "Forminske (-)" + IDS_TOOLTIP_ROT_CLOCKW "Med urviseren (Ctrl+K)" + IDS_TOOLTIP_ROT_COUNCW "Dreie mot urviseren (Ctrl+L)" + IDS_TOOLTIP_PRINT "Skriv ut (Ctrl+P)" + IDS_TOOLTIP_SAVEAS "Lagre som... (Ctrl+S)" +END diff --git a/reactos/dll/win32/shimgvw/rsrc.rc b/reactos/dll/win32/shimgvw/rsrc.rc index 07af2f81a6a..83ce5c9d9bd 100644 --- a/reactos/dll/win32/shimgvw/rsrc.rc +++ b/reactos/dll/win32/shimgvw/rsrc.rc @@ -2,8 +2,10 @@ #include "resource.h" #include "lang/cs-CZ.rc" +#include "lang/de-DE.rc" #include "lang/en-US.rc" #include "lang/es-ES.rc" +#include "lang/no-NO.rc" #include "lang/lt-LT.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/win32/shimgvw/shimgvw.c b/reactos/dll/win32/shimgvw/shimgvw.c index 914e0673fc8..7b97f0f56ed 100644 --- a/reactos/dll/win32/shimgvw/shimgvw.c +++ b/reactos/dll/win32/shimgvw/shimgvw.c @@ -403,7 +403,7 @@ ImageView_WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) return DefWindowProc(hwnd, Message, wParam, lParam); } -LONG +LONG WINAPI ImageView_CreateWindow(HWND hwnd, LPWSTR szFileName) { struct GdiplusStartupInput gdiplusStartupInput; @@ -464,19 +464,19 @@ ImageView_CreateWindow(HWND hwnd, LPWSTR szFileName) return -1; } -VOID +VOID WINAPI ImageView_FullscreenW(HWND hwnd, HINSTANCE hInst, LPCWSTR path, int nShow) { ImageView_CreateWindow(hwnd, (LPWSTR)path); } -VOID +VOID WINAPI ImageView_Fullscreen(HWND hwnd, HINSTANCE hInst, LPCWSTR path, int nShow) { ImageView_CreateWindow(hwnd, (LPWSTR)path); } -VOID +VOID WINAPI ImageView_FullscreenA(HWND hwnd, HINSTANCE hInst, LPCSTR path, int nShow) { WCHAR szFile[MAX_PATH]; @@ -487,25 +487,25 @@ ImageView_FullscreenA(HWND hwnd, HINSTANCE hInst, LPCSTR path, int nShow) } } -VOID +VOID WINAPI ImageView_PrintTo(HWND hwnd, HINSTANCE hInst, LPCWSTR path, int nShow) { DPRINT("ImageView_PrintTo() not implemented\n"); } -VOID +VOID WINAPI ImageView_PrintToA(HWND hwnd, HINSTANCE hInst, LPCSTR path, int nShow) { DPRINT("ImageView_PrintToA() not implemented\n"); } -VOID +VOID WINAPI ImageView_PrintToW(HWND hwnd, HINSTANCE hInst, LPCWSTR path, int nShow) { DPRINT("ImageView_PrintToW() not implemented\n"); } -VOID +VOID WINAPI imageview_fullscreenW(HWND hwnd, HINSTANCE hInst, LPCWSTR path, int nShow) { DPRINT("ImageView_fullscreenW() not implemented\n"); diff --git a/reactos/dll/win32/shlwapi/shlwapi_No.rc b/reactos/dll/win32/shlwapi/shlwapi_No.rc index 4df42c87dd0..37a39899e88 100644 --- a/reactos/dll/win32/shlwapi/shlwapi_No.rc +++ b/reactos/dll/win32/shlwapi/shlwapi_No.rc @@ -37,7 +37,7 @@ FONT 8, "MS Shell Dlg" STRINGTABLE DISCARDABLE { IDS_BYTES_FORMAT "%ld byte" - IDS_TIME_INTERVAL_HOURS " hr" + IDS_TIME_INTERVAL_HOURS " t" IDS_TIME_INTERVAL_MINUTES " min" - IDS_TIME_INTERVAL_SECONDS " sec" + IDS_TIME_INTERVAL_SECONDS " sek" } diff --git a/reactos/dll/win32/snmpapi/snmpapi.def b/reactos/dll/win32/snmpapi/snmpapi.def deleted file mode 100644 index 44e08bad3c2..00000000000 --- a/reactos/dll/win32/snmpapi/snmpapi.def +++ /dev/null @@ -1,43 +0,0 @@ -; SNMPAPI.DLL - ReactOS Sockets 2 Simple Network Management Protocol API DLL - -LIBRARY snmpapi.dll - -EXPORTS -SnmpSvcAddrIsIpx -SnmpSvcAddrToSocket -SnmpSvcGetEnterpriseOID -SnmpSvcGetUptime -SnmpSvcInitUptime -SnmpSvcSetLogLevel -SnmpSvcSetLogType -SnmpTfxClose -SnmpTfxOpen -SnmpTfxQuery -SnmpUtilAnsiToUnicode -SnmpUtilAsnAnyCpy@8 -SnmpUtilAsnAnyFree -SnmpUtilDbgPrint -SnmpUtilIdsToA -SnmpUtilMemAlloc -SnmpUtilMemFree -SnmpUtilMemReAlloc -SnmpUtilOctetsCmp -SnmpUtilOctetsCpy -SnmpUtilOctetsFree -SnmpUtilOctetsNCmp -SnmpUtilOidAppend@8 -SnmpUtilOidCmp -SnmpUtilOidCpy@8 -SnmpUtilOidFree@4 -SnmpUtilOidNCmp@12 -SnmpUtilOidToA@4 -SnmpUtilPrintAsnAny -SnmpUtilPrintOid -SnmpUtilUTF8ToUnicode -SnmpUtilUnicodeToAnsi -SnmpUtilUnicodeToUTF8 -SnmpUtilVarBindCpy -SnmpUtilVarBindFree -SnmpUtilVarBindListCpy -SnmpUtilVarBindListFree -; EOF diff --git a/reactos/dll/win32/snmpapi/snmpapi.rbuild b/reactos/dll/win32/snmpapi/snmpapi.rbuild index 93e2a1bd839..e6ee0f88dc8 100644 --- a/reactos/dll/win32/snmpapi/snmpapi.rbuild +++ b/reactos/dll/win32/snmpapi/snmpapi.rbuild @@ -1,9 +1,10 @@ - + . ntdll kernel32 snmpapi.c snmpapi.rc + snmpapi.spec diff --git a/reactos/dll/win32/snmpapi/snmpapi.rc b/reactos/dll/win32/snmpapi/snmpapi.rc index 8b8ac565744..8abcfc8650d 100644 --- a/reactos/dll/win32/snmpapi/snmpapi.rc +++ b/reactos/dll/win32/snmpapi/snmpapi.rc @@ -1,4 +1,4 @@ -/* $Id$ */ +/* $Id: snmpapi.rc 22410 2006-06-19 12:34:31Z gedmurphy $ */ #define REACTOS_VERSION_DLL #define REACTOS_STR_FILE_DESCRIPTION "ReactOS Sockets 2 SNMP Helper API\0" diff --git a/reactos/dll/win32/snmpapi/snmpapi.spec b/reactos/dll/win32/snmpapi/snmpapi.spec new file mode 100644 index 00000000000..fb8f792aeeb --- /dev/null +++ b/reactos/dll/win32/snmpapi/snmpapi.spec @@ -0,0 +1,37 @@ +@ stdcall SnmpSvcAddrIsIpx(ptr ptr) +@ stdcall SnmpSvcAddrToSocket(ptr ptr) +@ stdcall SnmpSvcGetEnterpriseOID(ptr ptr) +@ stdcall SnmpSvcGetUptime() +@ stdcall SnmpSvcInitUptime() +@ stdcall SnmpSvcSetLogLevel(long) +@ stdcall SnmpSvcSetLogType(long) +@ stdcall SnmpTfxClose(ptr ptr) +@ stdcall SnmpTfxOpen(ptr ptr) +@ stdcall SnmpTfxQuery(ptr ptr) +@ stdcall SnmpUtilAnsiToUnicode(ptr ptr) +@ stdcall SnmpUtilAsnAnyCpy(ptr ptr) +@ stdcall SnmpUtilAsnAnyFree(ptr) +@ cdecl SnmpUtilDbgPrint(long str) +@ stdcall SnmpUtilIdsToA(ptr long) +@ stdcall SnmpUtilMemAlloc(long) +@ stdcall SnmpUtilMemFree(ptr) +@ stdcall SnmpUtilMemReAlloc(ptr long) +@ stdcall SnmpUtilOctetsCmp(ptr ptr) +@ stdcall SnmpUtilOctetsCpy(ptr ptr) +@ stdcall SnmpUtilOctetsFree(ptr) +@ stdcall SnmpUtilOctetsNCmp(ptr ptr long) +@ stdcall SnmpUtilOidAppend(ptr ptr) +@ stdcall SnmpUtilOidCmp(ptr ptr) +@ stdcall SnmpUtilOidCpy(ptr ptr) +@ stdcall SnmpUtilOidFree(ptr) +@ stdcall SnmpUtilOidNCmp(ptr ptr long) +@ stdcall SnmpUtilOidToA(ptr) +@ stdcall SnmpUtilPrintAsnAny(ptr) +@ stdcall SnmpUtilPrintOid(ptr) +@ stdcall SnmpUtilUTF8ToUnicode(ptr ptr) +@ stdcall SnmpUtilUnicodeToAnsi(ptr ptr) +@ stdcall SnmpUtilUnicodeToUTF8(ptr ptr) +@ stdcall SnmpUtilVarBindCpy(ptr ptr) +@ stdcall SnmpUtilVarBindFree(ptr) +@ stdcall SnmpUtilVarBindListCpy(ptr ptr) +@ stdcall SnmpUtilVarBindListFree(ptr) diff --git a/reactos/dll/win32/sxs/sxs.c b/reactos/dll/win32/sxs/sxs.c new file mode 100644 index 00000000000..cd64de562f6 --- /dev/null +++ b/reactos/dll/win32/sxs/sxs.c @@ -0,0 +1,45 @@ +/* + * sxs main + * + * Copyright 2007 EA Durbin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include + +#include "windef.h" +#include "winbase.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(sxs); + + +/*********************************************************************** + * DllMain (SXS.@) + * + */ +BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) +{ + switch(fdwReason) + { + case DLL_WINE_PREATTACH: + return FALSE; /* prefer native version */ + case DLL_PROCESS_ATTACH: + DisableThreadLibraryCalls( hinstDLL ); + break; + } + return TRUE; +} diff --git a/reactos/dll/win32/sxs/sxs.rbuild b/reactos/dll/win32/sxs/sxs.rbuild new file mode 100644 index 00000000000..7559626a809 --- /dev/null +++ b/reactos/dll/win32/sxs/sxs.rbuild @@ -0,0 +1,17 @@ + + + + + + . + include/reactos/wine + + 0x600 + 0x600 + sxs.c + sxs.spec + wine + kernel32 + ntdll + + \ No newline at end of file diff --git a/reactos/dll/win32/sxs/sxs.spec b/reactos/dll/win32/sxs/sxs.spec new file mode 100644 index 00000000000..012d06b9c38 --- /dev/null +++ b/reactos/dll/win32/sxs/sxs.spec @@ -0,0 +1,2 @@ +@ stub CreateAssemblyCache +@ stub CreateAssemblyNameObject diff --git a/reactos/dll/win32/syssetup/lang/it-IT.rc b/reactos/dll/win32/syssetup/lang/it-IT.rc index 7a54ca124ae..0c240c09d11 100644 --- a/reactos/dll/win32/syssetup/lang/it-IT.rc +++ b/reactos/dll/win32/syssetup/lang/it-IT.rc @@ -50,9 +50,9 @@ FONT 8, "MS Shell Dlg" BEGIN LTEXT "Scrivere il proprio nome completo e il nome della propria ditta o organizzazione.", IDC_STATIC, 20, 7, 242, 21 - LTEXT "No&me:", IDC_STATIC, 20, 37, 120, 8 + LTEXT "No&me:", IDC_STATIC, 20, 37, 108, 8 EDITTEXT IDC_OWNERNAME, 132, 35, 163, 14, WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL - LTEXT "&Organizzazione:", IDC_STATIC, 20, 57, 120, 8 + LTEXT "&Organizzazione:", IDC_STATIC, 20, 57, 108, 8 EDITTEXT IDC_OWNERORGANIZATION, 132, 55, 163, 14, WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL END diff --git a/reactos/dll/win32/syssetup/lang/nb-NO.rc b/reactos/dll/win32/syssetup/lang/no-NO.rc similarity index 95% rename from reactos/dll/win32/syssetup/lang/nb-NO.rc rename to reactos/dll/win32/syssetup/lang/no-NO.rc index 9b8e21b6750..43d45c87457 100644 --- a/reactos/dll/win32/syssetup/lang/nb-NO.rc +++ b/reactos/dll/win32/syssetup/lang/no-NO.rc @@ -203,33 +203,33 @@ BEGIN IDS_CMT_CALC "Start Kalkulator" IDS_CMT_CMD "Еpne command prompt" IDS_CMT_EXPLORER "Start Explorer" - IDS_CMT_NOTEPAD "Start Tekst Editor" - IDS_CMT_REGEDIT "Start Register Editor" - IDS_CMT_WORDPAD "Start Dokument Editor" + IDS_CMT_NOTEPAD "Start Tekstredigering" + IDS_CMT_REGEDIT "Start Registerredigering" + IDS_CMT_WORDPAD "Start Dokument redigering" IDS_CMT_SCREENSHOT "Ta skjermbilde" IDS_CMT_DEVMGMT "Start Enhetsbehandler" IDS_CMT_SERVMAN "Start Tjenestebehandler" - IDS_CMT_RDESKTOP "Launch Remote Desktop" + IDS_CMT_RDESKTOP "Start Ekstern skrivebord" END STRINGTABLE BEGIN IDS_GAMES "Spill" - IDS_CMT_SOLITAIRE "Solitaire" - IDS_CMT_WINEMINE "WineMine" + IDS_CMT_SOLITAIRE "Kabal" + IDS_CMT_WINEMINE "Minnesveiper" END STRINGTABLE BEGIN - IDS_SYS_TOOLS "System Tools" - IDS_CMT_CHARMAP "CharMap" - IDS_CMT_KBSWITCH "Keyboard Layout Switcher" + IDS_SYS_TOOLS "System verktшy" + IDS_CMT_CHARMAP "Tegnkart" + IDS_CMT_KBSWITCH "Endre tastatur valg" END STRINGTABLE BEGIN - IDS_SYS_ACCESSIBILITY "Accessibility" - IDS_CMT_MAGNIFY "Magnify" + IDS_SYS_ACCESSIBILITY "Tilgjengelighet" + IDS_CMT_MAGNIFY "Forstшrrelse" END STRINGTABLE diff --git a/reactos/dll/win32/syssetup/syssetup.rc b/reactos/dll/win32/syssetup/syssetup.rc index 7a415d663d1..a7bcbe4ed3d 100644 --- a/reactos/dll/win32/syssetup/syssetup.rc +++ b/reactos/dll/win32/syssetup/syssetup.rc @@ -52,7 +52,7 @@ IDR_GPL RT_TEXT "COPYING" #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/ja-JP.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/win32/tapiui/lang/no-NO.rc b/reactos/dll/win32/tapiui/lang/no-NO.rc new file mode 100644 index 00000000000..35a31630c94 --- /dev/null +++ b/reactos/dll/win32/tapiui/lang/no-NO.rc @@ -0,0 +1,446 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +101 DIALOGEX 0, 0, 252, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Dialing Rules" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 201, 2000, 7, 7, 21, 20 + LTEXT "The list below displays the locations you have specified. Select the location from which you are dialing.", -1, 35, 7, 210, 16 + LTEXT "&Locations:", -1, 7, 35, 210, 8 + CONTROL "", 1033, "SysListView32", WS_BORDER | WS_TABSTOP | 0x0000011D, 7, 46, 238, 105, WS_EX_CLIENTEDGE + PUSHBUTTON "&Ny...", 1030, 87, 155, 50, 14 + PUSHBUTTON "&Rediger...", 1031, 141, 155, 50, 14 + PUSHBUTTON "&Slett", 1032, 195, 155, 50, 14 + LTEXT "Phone number will be dialed as:", 1052, 7, 181, 100, 8 + LTEXT "", 1053, 14, 195, 224, 16 +END + +102 DIALOGEX 0, 0, 252, 255 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Generielt" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 202, 2000, 7, 7, 20, 20 + LTEXT "Location &name:", -1, 35, 11, 56, 8, SS_CENTERIMAGE + EDITTEXT 1038, 96, 8, 149, 14, ES_AUTOHSCROLL + LTEXT "Specify the location from which you will be dialing.", 2001, 7, 33, 238, 8 + LTEXT "Sprеk/®ion:", -1, 7, 49, 161, 8 + COMBOBOX 1006, 7, 60, 175, 200, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL + LTEXT "Area &code:", -1, 190, 49, 48, 8 + EDITTEXT 1034, 190, 60, 48, 12, ES_AUTOHSCROLL + GROUPBOX "Dialing rules", 2002, 7, 80, 238, 92 + LTEXT "When dialing from this location, use the following rules:", 2003, 14, 92, 224, 8 + LTEXT "To access an outside line for &local calls, dial:", -1, 14, 106, 170, 8 + EDITTEXT 1010, 190, 104, 48, 12, ES_AUTOHSCROLL + LTEXT "To access an outside line for long-&distance calls, dial:", -1, 14, 122, 170, 8 + EDITTEXT 1011, 190, 120, 48, 12, ES_AUTOHSCROLL + LTEXT "Use this carri&er code to make long-distance calls:", -1, 14, 138, 170, 8 + EDITTEXT 1059, 190, 136, 48, 12, ES_AUTOHSCROLL + LTEXT "Use this carrier code to make &international calls:", -1, 14, 154, 170, 8 + EDITTEXT 1060, 190, 152, 48, 12, ES_AUTOHSCROLL + AUTOCHECKBOX "To disable call &waiting, dial:", 1035, 14, 177, 170, 10 + COMBOBOX 1013, 190, 176, 48, 73, CBS_DROPDOWN | CBS_SORT | WS_VSCROLL + LTEXT "Dial using:", -1, 14, 195, 40, 8 + AUTORADIOBUTTON "&Tone", 1036, 58, 194, 50, 10, NOT WS_TABSTOP + AUTORADIOBUTTON "&Pulse", 1037, 112, 194, 50, 10, NOT WS_TABSTOP + LTEXT "Phone number will be dialed as:", 1052, 7, 219, 100, 8 + LTEXT "", 1053, 14, 232, 224, 16 +END + +103 DIALOGEX 0, 0, 252, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Area Code Rules" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "An area code rule determines how phone numbers are dialed from your current area code to other area codes and within your area code.", 2000, 7, 7, 238, 16 + LTEXT "Area &code rules:", -1, 7, 31, 238, 8 + CONTROL "", 1033, "SysListView32", WS_BORDER | WS_TABSTOP | 0x0000801D, 7, 42, 238, 99, WS_EX_CLIENTEDGE + PUSHBUTTON "&Ny...", 1030, 87, 147, 50, 14 + PUSHBUTTON "&Rediger...", 1031, 141, 147, 50, 14 + PUSHBUTTON "&Slett", 1032, 195, 147, 50, 14 + GROUPBOX "Beskrivelse", 2006, 7, 166, 238, 45 + LTEXT "", 1039, 14, 180, 224, 24 +END + +104 DIALOGEX 0, 0, 252, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Calling Card" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Select the calling card you will use, or click New to add a different card.", 2000, 7, 7, 238, 8 + LTEXT "Card &Types:", -1, 7, 23, 238, 8 + CONTROL "", 1033, "SysListView32", WS_BORDER | WS_TABSTOP | 0x0000400D, 7, 34, 238, 63, WS_EX_CLIENTEDGE + PUSHBUTTON "&Ny...", 1030, 87, 103, 50, 14 + PUSHBUTTON "&Rediger...", 1031, 141, 103, 50, 14 + PUSHBUTTON "&Slett", 1032, 195, 103, 50, 14 + LTEXT "K&onto nummer:", -1, 7, 127, 91, 8 + EDITTEXT 1018, 102, 125, 143, 12, ES_AUTOHSCROLL + LTEXT "&Personlig ID nummer (PIN):", -1, 7, 145, 91, 8 + EDITTEXT 1019, 102, 143, 143, 12, ES_AUTOHSCROLL + GROUPBOX "Access phone numbers for", 2001, 7, 158, 238, 53 + LTEXT "Long distance calls:", -1, 14, 172, 84, 8 + LTEXT "", 1042, 102, 172, 136, 8 + LTEXT "International calls:", -1, 14, 184, 84, 8 + LTEXT "", 1043, 102, 184, 136, 8 + LTEXT "Local calls:", -1, 14, 196, 84, 8 + LTEXT "", 1051, 102, 196, 136, 8 +END + +105 DIALOGEX 0, 0, 252, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Generiel" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 203, 2000, 7, 7, 20, 20 + LTEXT "&Calling card name:", -1, 35, 12, 64, 8, SS_CENTERIMAGE + EDITTEXT 1047, 105, 9, 140, 14, ES_AUTOHSCROLL + LTEXT "Account &number:", -1, 7, 35, 238, 8 + EDITTEXT 1018, 7, 46, 116, 14, ES_AUTOHSCROLL + LTEXT "&Personal Identification Number (PIN):", -1, 7, 68, 238, 8 + EDITTEXT 1019, 7, 80, 116, 14, ES_AUTOHSCROLL + LTEXT "This calling card will be used when:", 1056, 14, 117, 224, 8 + GROUPBOX "Calling card details", 2001, 7, 105, 238, 66 + LTEXT "", 1000, 22, 131, 216, 8 + LTEXT "", 1001, 22, 143, 216, 8 + LTEXT "", 1002, 22, 155, 216, 8 +END + +106 DIALOGEX 0, 0, 252, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Long Distance" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Access number for &long distance calls:", -1, 7, 7, 238, 8 + EDITTEXT 1044, 7, 18, 140, 14, ES_AUTOHSCROLL + LTEXT "Use the buttons below to enter the dialing steps for making long-distance calls. Enter these steps in the exact order as they appear on your calling card.", 2000, 7, 40, 238, 24 + LTEXT "Calling ca&rd dialing steps:", -1, 7, 72, 80, 8 + CONTROL "List1", 1033, "SysListView32", WS_BORDER | WS_TABSTOP | 0x0000400D, 7, 83, 184, 74, WS_EX_CLIENTEDGE + PUSHBUTTON "Flytt &opp", 1022, 195, 83, 50, 14 + PUSHBUTTON "&Flytt ned", 1023, 195, 101, 50, 14 + PUSHBUTTON "&Slett", 1024, 195, 119, 50, 14 + PUSHBUTTON "Konto &Nummer", 1025, 7, 161, 90, 14 + PUSHBUTTON "&Konto Nummer", 1018, 101, 161, 90, 14 + PUSHBUTTON "&PIN", 1019, 7, 179, 90, 14 + PUSHBUTTON "D&estination Number...", 1020, 101, 179, 90, 14 + PUSHBUTTON "&Wait for Prompt...", 1017, 7, 197, 90, 14 + PUSHBUTTON "&Specify Digits...", 1021, 101, 197, 90, 14 +END + +107 DIALOGEX 0, 0, 252, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "International" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Access number for &international calls:", -1, 7, 7, 238, 8 + EDITTEXT 1045, 7, 18, 140, 14, ES_AUTOHSCROLL + LTEXT "Use the buttons below to enter the dialing steps for making international calls. Enter these steps in the exact order as they appear on your calling card.", 2000, 7, 40, 244, 24 + LTEXT "Calling ca&rd dialing steps:", -1, 7, 72, 80, 8 + CONTROL "List1", 1033, "SysListView32", WS_BORDER | WS_TABSTOP | 0x0000400D, 7, 83, 184, 74, WS_EX_CLIENTEDGE + PUSHBUTTON "Flytt &opp", 1022, 195, 83, 50, 14 + PUSHBUTTON "&Flytt ned", 1023, 195, 101, 50, 14 + PUSHBUTTON "&Slett", 1024, 195, 119, 50, 14 + PUSHBUTTON "Tilgang &nummer", 1025, 7, 161, 90, 14 + PUSHBUTTON "A&ccount Number", 1018, 101, 161, 90, 14 + PUSHBUTTON "&PIN", 1019, 7, 179, 90, 14 + PUSHBUTTON "D&estination Number...", 1020, 101, 179, 90, 14 + PUSHBUTTON "&Wait for Prompt...", 1017, 7, 197, 90, 14 + PUSHBUTTON "&Specify Digits...", 1021, 101, 197, 90, 14 +END + +108 DIALOGEX 0, 0, 252, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Local Calls" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Access number for &local calls:", -1, 7, 7, 238, 8 + EDITTEXT 1008, 7, 18, 140, 14, ES_AUTOHSCROLL + LTEXT "Use the buttons below to enter the dialing steps for making local calls. Enter these steps in the exact order as they appear on your calling card. To make local calls without using your calling card, leave this section blank.", 2000, 7, 40, 238, 24 + LTEXT "Calling ca&rd dialing steps:", -1, 7, 72, 238, 8 + CONTROL "List1", 1033, "SysListView32", WS_BORDER | WS_TABSTOP | 0x0000400D, 7, 83, 184, 74, WS_EX_CLIENTEDGE + PUSHBUTTON "Flytt &opp", 1022, 195, 83, 50, 14 + PUSHBUTTON "&Flytt ned", 1023, 195, 101, 50, 14 + PUSHBUTTON "&Slett", 1024, 195, 119, 50, 14 + PUSHBUTTON "Access &Number", 1025, 7, 161, 90, 14 + PUSHBUTTON "A&ccount Number", 1018, 101, 161, 90, 14 + PUSHBUTTON "&PIN", 1019, 7, 179, 90, 14 + PUSHBUTTON "D&estination Number...", 1020, 101, 179, 90, 14 + PUSHBUTTON "&Wait for Prompt...", 1017, 7, 197, 90, 14 + PUSHBUTTON "&Specify Digits...", 1021, 101, 197, 90, 14 +END + +109 DIALOGEX 0, 0, 252, 257 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "New Area Code Rule" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "This area code rule will only apply to calls made to the area code and prefix combination you specify below.", 2000, 7, 6, 238, 16 + LTEXT "Area code you are calling:", -1, 7, 31, 110, 8 + LTEXT "A&rea code:", -1, 7, 47, 36, 8 + EDITTEXT 1034, 46, 44, 50, 14, ES_AUTOHSCROLL + LTEXT "Specify the prefixes to be used for this area code rule.", -1, 14, 78, 224, 8 + AUTORADIOBUTTON "&Include all the prefixes within this area code", 1014, 14, 90, 224, 12, NOT WS_TABSTOP + AUTORADIOBUTTON "Include &only the prefixes in the list below:", 1015, 14, 104, 224, 12, NOT WS_TABSTOP + LTEXT "&Prefixes to include:", 1057, 26, 117, 119, 8 + CONTROL "List1", 1033, "SysListView32", WS_BORDER | WS_TABSTOP | 0x0000411D, 25, 128, 66, 32, WS_EX_CLIENTEDGE + PUSHBUTTON "&Add...", 1005, 95, 128, 50, 14 + PUSHBUTTON "D&elete", 1024, 95, 146, 50, 14 + LTEXT "When dialing phone numbers that contain the prefixes above:", -1, 14, 184, 224, 8 + AUTOCHECKBOX "&Dial:", 1012, 14, 198, 30, 12 + EDITTEXT 1007, 46, 196, 42, 14, ES_AUTOHSCROLL + AUTOCHECKBOX "Include the area &code", 1029, 14, 214, 85, 12 + DEFPUSHBUTTON "OK", 1, 141, 236, 50, 14 + PUSHBUTTON "Cancel", 2, 195, 236, 50, 14 + RTEXT "Area code", 2001, 133, 31, 51, 8 + LTEXT "Prefix", 2002, 200, 31, 45, 8 + CONTROL "", 2003, "STATIC", SS_BLACKFRAME | SS_SUNKEN, 180, 41, 1, 6 + CONTROL "", 2004, "STATIC", SS_BLACKFRAME | SS_SUNKEN, 203, 41, 1, 6 + RTEXT "X - X X X - X X X - X X X X", 2005, 133, 48, 112, 8 + GROUPBOX "Prefixes", -1, 7, 64, 238, 102 + GROUPBOX "Rules", -1, 7, 170, 238, 60 +END + +110 DIALOGEX 0, 0, 227, 82 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", 1003, 7, 7, 213, 8 + LTEXT "", 1039, 7, 23, 213, 8 + EDITTEXT 1031, 7, 34, 213, 14, ES_AUTOHSCROLL + DEFPUSHBUTTON "OK", 1, 116, 62, 50, 14 + PUSHBUTTON "Avbryt", 2, 170, 62, 50, 14 +END + +111 DIALOGEX 0, 0, 252, 124 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Vent for" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Select the type of prompt to wait for before continuing with the dialing sequence.", 2000, 7, 7, 238, 16 + AUTORADIOBUTTON "Wait for a &dial tone", 1009, 7, 31, 238, 10, WS_GROUP + AUTORADIOBUTTON "Wait for a &voice message to complete", 1016, 7, 47, 238, 10, NOT WS_TABSTOP + AUTORADIOBUTTON "Wait for a specific length of &time:", 1048, 7, 63, 238, 10, NOT WS_TABSTOP + EDITTEXT 1050, 18, 77, 36, 14, ES_AUTOHSCROLL | WS_GROUP + CONTROL "Spin1", 1049, "msctls_updown32", 0x00000036, 42, 78, 11, 14 + LTEXT "&sekunder", -1, 58, 81, 187, 8 + DEFPUSHBUTTON "OK", 1, 141, 103, 50, 14 + PUSHBUTTON "Avbryt", 2, 195, 103, 50, 14 +END + +112 DIALOGEX 0, 0, 252, 111 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Destination number" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "This step will place the destination number that you will be dialing into the calling card sequence. When dialing the destination number, which parts of the number do you want to dial?", 2000, 7, 7, 238, 24 + AUTOCHECKBOX "Dial the &country/region code", 1027, 7, 39, 238, 10 + AUTOCHECKBOX "Dial the &area code", 1034, 7, 55, 238, 10 + AUTOCHECKBOX "Dial the &number", 1008, 7, 71, 238, 10, WS_DISABLED + DEFPUSHBUTTON "OK", 1, 141, 92, 50, 14 + PUSHBUTTON "Avbryt", 2, 195, 92, 50, 14 +END + +113 DIALOGEX 0, 0, 252, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Avansert" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 201, 2000, 7, 7, 20, 20 + LTEXT "The following telephony providers are installed on this computer:", -1, 40, 7, 205, 8 + LTEXT "&Providers:", -1, 7, 35, 238, 8 + LISTBOX 1033, 7, 46, 238, 147, LBS_STANDARD | LBS_NOINTEGRALHEIGHT | WS_TABSTOP + PUSHBUTTON "L&egg til...", 1005, 87, 197, 50, 14 + PUSHBUTTON "&Fjern", 1024, 141, 197, 50, 14 + PUSHBUTTON "&Konfigurer...", 1031, 195, 197, 50, 14 +END + +114 DIALOGEX 20, 15, 252, 127 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Add Provider" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Select the provider you wish to install from the list below, and click Add.", 2000, 7, 7, 241, 8 + LTEXT "&Telephony providers:", -1, 7, 23, 144, 10 + LISTBOX 1055, 7, 34, 238, 74, LBS_STANDARD | WS_TABSTOP + PUSHBUTTON "&Legg til", 1005, 141, 106, 50, 14 + DEFPUSHBUTTON "Avbryt", 2, 195, 106, 50, 14 +END + +115 DIALOGEX 10, 10, 303, 228 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Location Information" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 302, 302, "STATIC", SS_BITMAP, 10, 10, 88, 155 + LTEXT "Before you can make any phone or modem connections, ReactOS needs the following information about your current location.", 2000, 107, 15, 188, 25 + LTEXT "&What country/region are you in now?", -1, 107, 43, 189, 10 + COMBOBOX 1006, 107, 55, 180, 200, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL + LTEXT "What area &code (or city code) are you in now?", -1, 107, 74, 189, 10 + EDITTEXT 1034, 107, 87, 45, 12, ES_AUTOHSCROLL + LTEXT "If you need to specify a ca&rrier code, what is it?", -1, 107, 105, 189, 10 + EDITTEXT 1058, 106, 118, 45, 12, ES_UPPERCASE | ES_AUTOHSCROLL + LTEXT "If you dial a number to access an &outside line, what is it?", -1, 107, 137, 189, 10 + EDITTEXT 1010, 107, 149, 45, 12, ES_UPPERCASE | ES_AUTOHSCROLL + LTEXT "The phone system at this location uses:", -1, 107, 168, 189, 10 + AUTORADIOBUTTON "&Tone dialing", 1036, 107, 178, 57, 14, WS_GROUP | NOT WS_TABSTOP + AUTORADIOBUTTON "&Pulse dialing", 1037, 175, 178, 57, 14, NOT WS_TABSTOP + DEFPUSHBUTTON "OK", 1, 192, 204, 50, 14 + PUSHBUTTON "Cancel", 2, 246, 204, 50, 14 +END + +400 DIALOGEX 0, 0, 290, 151 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 302, 302, "STATIC", SS_BITMAP, 0, 0, 88, 155 + LTEXT "Before you can make any phone or modem connections, ReactOS needs the following information about your current location.", 2000, 95, 2, 188, 25 + LTEXT "&What country/region are you in now?", -1, 95, 30, 188, 10 + COMBOBOX 1006, 95, 41, 177, 68, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL + LTEXT "What area &code (or city code) are you in now?", -1, 95, 61, 188, 10 + EDITTEXT 1034, 95, 73, 40, 14, ES_AUTOHSCROLL + LTEXT "If you dial a number to access an &outside line, what is it?", -1, 95, 96, 188, 10 + EDITTEXT 1010, 95, 107, 40, 14, ES_UPPERCASE | ES_AUTOHSCROLL + LTEXT "The phone system at this location uses:", -1, 95, 129, 159, 10 + AUTORADIOBUTTON "&Tone dialing", 1036, 95, 139, 55, 12, WS_GROUP | NOT WS_TABSTOP + AUTORADIOBUTTON "&Pulse dialing", 1037, 155, 139, 55, 12, NOT WS_TABSTOP +END + +500 DIALOGEX 0, 0, 235, 88 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "ReactOS Explorer" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 504, 501, 13, 14, 21, 20 + LTEXT "", 502, 47, 15, 180, 32 + AUTOCHECKBOX "&In the future, always trust this page", 503, 50, 47, 147, 12 + DEFPUSHBUTTON "&OK", 505, 110, 65, 50, 14 + PUSHBUTTON "&Avbryt", 506, 164, 65, 50, 14 +END + +STRINGTABLE +BEGIN + 1 "Telefon og Modem valg" + 2 "Configure dialing rules and properties for using your modem." + 3 "Location" + 4 "To create a new location, click New." + 5 "New Location" + 6 "Edit Location" + 7 "New Calling Card" + 8 "Edit Calling Card" + 9 "Area Code" + 10 "Prefixes" + 11 "Rule" + 12 "The character you entered is invalid.\n\nValid characters are 0 through 9, *, #, and comma." + 13 "The character you entered is invalid.\n\nValid characters are 0 through 9, *, #, space, and comma." + 14 "The character you entered is invalid.\n\nValid characters are 0 through 9." + 15 "The character you entered is invalid." + 16 "Dial %1" + 17 "Dial %1 plus area code" + 18 "Dial area code" + 19 "Dial number only" + 20 "All" + 21 "Selected" + 22 "Edit Area Code Rule" + 23 "Select a rule in the list above to view its description, or click New to add a rule." + 24 "Dial '%2' plus the area code before the number for all calls within the %1 area code." + 25 "Dial '%2' before the number for all calls within the %1 area code." + 26 "Dial the area code before the number for all calls within the %1 area code." + 27 "Dial only the number for all calls within the %1 area code." + 28 "Dial '%2' plus the area code before the number for calls within the %1 area code, containing the prefixes you specified." + 29 "Dial '%2' before the number for calls within the %1 area code, containing the prefixes you specified." + 30 "Dial the area code before the number for calls within the %1 area code, containing the prefixes you specified." + 31 "Dial only the number for calls within the %1 area code, containing the prefixes you specified." + 32 "Dial a '1' before calls within all other area codes, and include the area code for all prefixes." + 33 "Add Prefix" + 34 "Enter one or more prefixes separated by spaces or commas." + 35 "Specify Digits" + 36 "Enter one or more digits (including * and #) to be dialed." + 37 "You tried to enter an invalid character.\n\nValid characters are 0 thru 9 and space." + 38 "Wait for %1!d! seconds." + 39 "Dial the access number." + 40 "Dial the account number." + 41 "Dial the PIN number." + 42 "Wait for a dial tone." + 43 "Wait for a voice message to end." + 44 "Dial the country/region code, area code, and number." + 45 "Dial the country/region code and number." + 46 "Dial the area code and number." + 47 "Dial the country/region code." + 48 "Dial the area code." + 49 "Dial the number." + 50 "dialing long distance calls." + 51 "dialing international calls." + 52 "dialing local calls." + 53 "There are no rules defined for how this calling card should be used." + 54 "You must enter the long distance carrier code for this location." + 55 "You must enter a name for this location." + 56 "You must enter the area code for this location." + 57 "You must select the number to dial to disable call waiting." + 58 "You must select the country or region that you are calling from." + 59 "Missing Information" + 60 "The location name you have entered is already in use. Please enter a unique name." + 61 "This calling card is missing some required information. To use this card, click Edit to provide more information, or select a different card." + 62 "You must select a default calling card. Select a card from the list, or click New to create a new card." + 63 "You must enter the calling card name." + 64 "You must enter the account number." + 65 "You must enter the PIN number." + 66 "There are no rules defined for this calling card. To create a rule, select the Long Distance, International, or Local Calls tab." + 67 "Your long distance rule requires your calling card's long distance access number." + 68 "Your international rule requires your calling card's international access number." + 69 "Your local rule requires your calling card's local access number." + 70 "Ingen" + 71 "Are you sure you want to remove the selected Telephony Service Provider?" + 72 "" + 73 "You must enter the prefixes for which this rule applies." + 74 "&Digits:" + 75 "&Prefixes:" + 76 "You tried to enter an invalid character.\n\nValid characters are 0 thru 9, space, and comma." + 77 "Confirm Delete" + 78 "Are you sure you want to delete this location?" + 79 "Are you sure you want to delete this calling card?" + 80 "Are you sure you want to delete this area code rule?" + 81 "You must enter the digits to dial." + 82 "The calling card name you have entered is already in use. Please enter a unique name." + 83 "ReactOS needs telephone information about the location from which you will be dialing. If you cancel without providing this information, this program may not function correctly when dialing. In addition, some applications respond to your canceling this dialog box by immediately re-posting it.\nAre you sure you want to cancel?" + 84 "Confirm Cancel" + 85 "My Location" + 86 "" + 87 "The character you entered is invalid.\n\nValid characters are 0 through 9, A through D, *, #, +, !, space, and comma." + 88 "You must enter the international carrier code for this location." + 89 "You must enter the carrier code for this location." + 90 "This page is attempting to make or monitor telephone calls or other multimedia connections on your computer.\nDo you want allow it to continue?" + 91 "This page is attempting to access directory information on your network.\nDo you want to allow it to continue?" + 92 "This page is attempting to access or change network conferencing information.\nDo you want to allow it to continue?" + 93 "This page is attempting to access or change registry information.\nDo you want to allow it to continue?" + 1064 "Phone And Modem control panel can not be opened. You may have a problem starting telephony service." + 1065 "Remove Provider" + 15800 "23" + 15801 "0,\"None (Direct Dial)\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",1" + 15802 "1,\"AT&T Direct Dial via 1010ATT1\",\"\",\"G\",\"J1FG\",\"J011EFG\",\"\",\"\",\"1010288\",\"1010288\",1" + 15803 "2,\"AT&T via 1010ATT0\",\"\",\"G\",\"J0FG$TH\",\"J01EFG$TH\",\"\",\"\",\"1010288\",\"1010288\",1" + 15804 "3,\"AT&T via 1-800-321-0288\",\"\",\"G\",\"J$TFG$TH\",\"J$T01EFG$TH\",\"\",\"\",\"18003210288\",\"18003210288\",1" + 15805 "4,\"MCI Direct Dial via 10102221\",\"\",\"G\",\"J1FG\",\"J011EFG\",\"\",\"\",\"1010222\",\"1010222\",1" + 15806 "5,\"MCI via 10102220\",\"\",\"G\",\"J0FG$TH\",\"J01EFG$TH\",\"\",\"\",\"1010222\",\"1010222\",1" + 15807 "6,\"MCI via 1-800-888-8000\",\"\",\"G\",\"J,,,,,,TH,,FG\",\"J,,,,,,TH,,011EFG\",\"\",\"\",\"18008888000\",\"18008888000\",1" + 15808 "7,\"MCI via 1-800-674-0700\",\"\",\"G\",\"J,,,,,,TH,,FG\",\"J,,,,,,TH,,011EFG\",\"\",\"\",\"18006740700\",\"18006740700\",1" + 15809 "8,\"MCI via 1-800-674-7000\",\"\",\"G\",\"J,,,,,,TH,,FG\",\"J,,,,,,TH,,011EFG\",\"\",\"\",\"18006747000\",\"18006747000\",1" + 15810 "9,\"US Sprint Direct Dial via 10103331\",\"\",\"G\",\"J1FG\",\"J011EFG\",\"\",\"\",\"1010333\",\"1010333\",1" + 15811 "10,\"US Sprint via 10103330\",\"\",\"G\",\"J0FG$TH\",\"J01EFG$TH\",\"\",\"\",\"1010333\",\"1010333\",1" + 15812 "11,\"US Sprint via 1-800-877-8000\",\"\",\"G\",\"J,,,T0FG,,H\",\"J,,,T01EFG#,H\",\"\",\"\",\"18008778000\",\"18008778000\",1" + 15813 "12,\"Calling Card via 0\",\"\",\"G\",\"0FG$TH\",\"01EFG$TH\",\"\",\"\",\"\",\"\",1" + 15814 "13,\"Carte France Telecom\",\"\",\"T3010,H,0FG#\",\"T3010,H,0FG#\",\"T3010,H,00EFG#\",\"\",\"\",\"\",\"\",1" + 15815 "14,\"Mercury (UK)\",\"\",\"J$TH,0FG\",\"J$TH,0FG\",\"J$TH,0FG\",\"\",\"0500800800\",\"0500800800\",\"0500800800\",1" + 15816 "15,\"British Telecom (UK)\",\"\",\"J$H,0FG\",\"J$H,0FG\",\"J$H,00EFG\",\"\",\"144\",\"144\".\"144\",1" + 15817 "16,\"CLEAR Communications (New Zealand)\",\"\",\"J$TH,0FG\",\"J$TH,0FG\",\"J$TH,00EFG\",\"\",\"0502333\",\"0502333\",\"0502333\",1" + 15818 "17,\"Telecom New Zealand\",\"\",\"J,0FG?H\",\"J,0FG?H\",\"J,00EFG?H\",\"\",\"012\",\"012\",\"012\",1" + 15819 "18,\"Global Card (Taiwan to USA)\",\"\",\"G\",\"0FG\",\"J,102880$TFG$H\",\"\",\"\",\"\",\"0080\",1" + 15820 "19,\"Telstra (Australia) via 1818 (voice)\",\"\",\"J$TH,FG#\",\"J$TH,FG#\",\"J$TH,0011EFG#\",\"\",\"1818\",\"1818\",\"1818\",1" + 15821 "20,\"Telstra (Australia) via 1818 (fax)\",\"\",\"J$TH,FG#\",\"J$TH,FG#\",\"J$TH,0015EFG#\",\"\",\"1818\",\"1818\",\"1818\",1" + 15822 "21,\"Optus (Australia) via 1812\",\"\",\"FG\",\"FG\",\"J@TH,0011EFG\",\"\",\"\",\"\",\"1812\",1" + 15823 "22,\"Optus (Australia) via 008551812\",\"\",\"FG\",\"FG\",\"J@TH,0011EFG\",\"\",\"\",\"\",\"008551812\",1" +END diff --git a/reactos/dll/win32/tapiui/tapiui.rc b/reactos/dll/win32/tapiui/tapiui.rc index ecd80915dbf..0546f0fc681 100644 --- a/reactos/dll/win32/tapiui/tapiui.rc +++ b/reactos/dll/win32/tapiui/tapiui.rc @@ -17,6 +17,7 @@ IDB_WIZARD BITMAP "res/302.bmp" #include "lang/de-DE.rc" #include "lang/en-US.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/uk-UA.rc" diff --git a/reactos/dll/win32/user32/include/user32p.h b/reactos/dll/win32/user32/include/user32p.h index 760d1991c9b..24a9c9f4d82 100644 --- a/reactos/dll/win32/user32/include/user32p.h +++ b/reactos/dll/win32/user32/include/user32p.h @@ -186,6 +186,7 @@ extern int SPY_Init(void); #define VALIDATE_TYPE_CALLPROC 7 #define VALIDATE_TYPE_ACCEL 8 #define VALIDATE_TYPE_MONITOR 12 +#define VALIDATE_TYPE_EVENT 15 #define FIRST_USER_HANDLE 0x0020 /* first possible value for low word of user handle */ #define LAST_USER_HANDLE 0xffef /* last possible value for low word of user handle */ diff --git a/reactos/dll/win32/user32/lang/de-DE.rc b/reactos/dll/win32/user32/lang/de-DE.rc index cfc5ee6db2f..9df5f13e9dc 100644 --- a/reactos/dll/win32/user32/lang/de-DE.rc +++ b/reactos/dll/win32/user32/lang/de-DE.rc @@ -43,11 +43,11 @@ SYSMENU MENU LOADONCALL MOVEABLE DISCARDABLE BEGIN MENUITEM "&Wiederherstellen", 61728 MENUITEM "&Verschieben", 61456 - MENUITEM "&Grцsse", 61440 + MENUITEM "&GrцЯe", 61440 MENUITEM "Mi&nimieren", 61472 MENUITEM "Ma&ximieren", 61488 MENUITEM SEPARATOR - MENUITEM "S&chliessen\tAlt-F4", 61536 + MENUITEM "S&chlieЯen\tAlt-F4", 61536 END ///////////////////////////////////////////////////////////////////////////// diff --git a/reactos/dll/win32/user32/lang/nb-NO.rc b/reactos/dll/win32/user32/lang/no-NO.rc similarity index 100% rename from reactos/dll/win32/user32/lang/nb-NO.rc rename to reactos/dll/win32/user32/lang/no-NO.rc diff --git a/reactos/dll/win32/user32/misc/misc.c b/reactos/dll/win32/user32/misc/misc.c index bbe7322e44c..84bb9613a61 100644 --- a/reactos/dll/win32/user32/misc/misc.c +++ b/reactos/dll/win32/user32/misc/misc.c @@ -336,7 +336,7 @@ GetUser32Handle(HANDLE handle) /* * Decide whether an object is located on the desktop or shared heap */ -static const BOOL g_ObjectHeapTypeShared[VALIDATE_TYPE_MONITOR + 1] = +static const BOOL g_ObjectHeapTypeShared[VALIDATE_TYPE_EVENT + 1] = { FALSE, /* VALIDATE_TYPE_FREE (not used) */ TRUE, /* VALIDATE_TYPE_WIN */ /* FIXME: FALSE once WINDOW_OBJECT is deleted! */ @@ -350,7 +350,10 @@ static const BOOL g_ObjectHeapTypeShared[VALIDATE_TYPE_MONITOR + 1] = FALSE, /* (not used) */ FALSE, /* (not used) */ FALSE, /* (not used) */ - TRUE /* VALIDATE_TYPE_MONITOR */ + TRUE, /* VALIDATE_TYPE_MONITOR */ + FALSE, /* (not used) */ + FALSE, /* (not used) */ + TRUE /* VALIDATE_TYPE_EVENT */ }; // @@ -363,7 +366,7 @@ ValidateHandle(HANDLE handle, UINT uType) PVOID ret; PUSER_HANDLE_ENTRY pEntry; - ASSERT(uType <= VALIDATE_TYPE_MONITOR); + ASSERT(uType <= VALIDATE_TYPE_EVENT); pEntry = GetUser32Handle(handle); @@ -418,7 +421,7 @@ ValidateHandleNoErr(HANDLE handle, UINT uType) PVOID ret; PUSER_HANDLE_ENTRY pEntry; - ASSERT(uType <= VALIDATE_TYPE_MONITOR); + ASSERT(uType <= VALIDATE_TYPE_EVENT); pEntry = GetUser32Handle(handle); diff --git a/reactos/dll/win32/user32/resources/ocr_help.cur b/reactos/dll/win32/user32/resources/ocr_help.cur index 92f4d41402e..52cd8599491 100644 Binary files a/reactos/dll/win32/user32/resources/ocr_help.cur and b/reactos/dll/win32/user32/resources/ocr_help.cur differ diff --git a/reactos/dll/win32/user32/resources/ocr_no.cur b/reactos/dll/win32/user32/resources/ocr_no.cur index 41de76c6da9..f88fbd5c9a6 100644 Binary files a/reactos/dll/win32/user32/resources/ocr_no.cur and b/reactos/dll/win32/user32/resources/ocr_no.cur differ diff --git a/reactos/dll/win32/user32/resources/ocr_pen.cur b/reactos/dll/win32/user32/resources/ocr_pen.cur index b180f3d97d0..551e85bf12f 100644 Binary files a/reactos/dll/win32/user32/resources/ocr_pen.cur and b/reactos/dll/win32/user32/resources/ocr_pen.cur differ diff --git a/reactos/dll/win32/user32/resources/ocr_sizeall.cur b/reactos/dll/win32/user32/resources/ocr_sizeall.cur index eab28d08f1d..d7610fa9227 100644 Binary files a/reactos/dll/win32/user32/resources/ocr_sizeall.cur and b/reactos/dll/win32/user32/resources/ocr_sizeall.cur differ diff --git a/reactos/dll/win32/user32/user32.def b/reactos/dll/win32/user32/user32.def index 6560179b1dd..ab4a7004921 100644 --- a/reactos/dll/win32/user32/user32.def +++ b/reactos/dll/win32/user32/user32.def @@ -707,7 +707,7 @@ UnregisterUserApiHook@0 UpdateLayeredWindow@36 UpdatePerUserSystemParameters@8 UpdateWindow@4 -User32InitializeImmEntryTable +User32InitializeImmEntryTable@4 UserClientDllInitialize=DllMain@12 UserHandleGrantAccess@12 ;UserLpkPSMTextOut diff --git a/reactos/dll/win32/user32/user32.rc b/reactos/dll/win32/user32/user32.rc index 76735b68b9a..230c7f96f18 100644 --- a/reactos/dll/win32/user32/user32.rc +++ b/reactos/dll/win32/user32/user32.rc @@ -94,7 +94,7 @@ OBM_MNARROW BITMAP "resources/obm_mnarrow.bmp" #include "lang/id-ID.rc" #include "lang/ja-JP.rc" #include "lang/nl-NL.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/win32/user32/windows/hook.c b/reactos/dll/win32/user32/windows/hook.c index 1bba40d9161..7e4d39b1569 100644 --- a/reactos/dll/win32/user32/windows/hook.c +++ b/reactos/dll/win32/user32/windows/hook.c @@ -524,7 +524,9 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength) // FIXME("UHOOK Memory: %x: %x\n",Common, Msg); Result = Common->Proc(Common->Code, Common->wParam, (LPARAM) Msg); break; + case WH_FOREGROUNDIDLE: case WH_KEYBOARD: + case WH_SHELL: Result = Common->Proc(Common->Code, Common->wParam, Common->lParam); break; default: diff --git a/reactos/dll/win32/user32/windows/window.c b/reactos/dll/win32/user32/windows/window.c index 7b97c8a55b8..f598c38f999 100644 --- a/reactos/dll/win32/user32/windows/window.c +++ b/reactos/dll/win32/user32/windows/window.c @@ -46,8 +46,13 @@ User32CallSendAsyncProcForKernel(PVOID Arguments, ULONG ArgumentLength) BOOL STDCALL AllowSetForegroundWindow(DWORD dwProcessId) { - UNIMPLEMENTED; - return(FALSE); + static BOOL show_message = TRUE; + if (show_message) + { + UNIMPLEMENTED; + show_message = FALSE; + } + return TRUE; } diff --git a/reactos/dll/win32/userenv/lang/nb-NO.rc b/reactos/dll/win32/userenv/lang/no-NO.rc similarity index 100% rename from reactos/dll/win32/userenv/lang/nb-NO.rc rename to reactos/dll/win32/userenv/lang/no-NO.rc diff --git a/reactos/dll/win32/userenv/lang/ru-RU.rc b/reactos/dll/win32/userenv/lang/ru-RU.rc index 0b606c38212..31bf5d55566 100644 --- a/reactos/dll/win32/userenv/lang/ru-RU.rc +++ b/reactos/dll/win32/userenv/lang/ru-RU.rc @@ -22,7 +22,7 @@ STRINGTABLE BEGIN IDS_PROFILEPATH "%SystemDrive%\\Documents and Settings" IDS_APPDATA "Application Data" - IDS_DESKTOP "Desktop" + IDS_DESKTOP "Рабочий стол" IDS_FAVORITES "Избранное" IDS_STARTMENU "Главное меню" IDS_PROGRAMS "Главное меню\\Программы" diff --git a/reactos/dll/win32/userenv/setup.c b/reactos/dll/win32/userenv/setup.c index 291063976cf..7397fd612aa 100644 --- a/reactos/dll/win32/userenv/setup.c +++ b/reactos/dll/win32/userenv/setup.c @@ -305,7 +305,7 @@ InitializeProfiles (VOID) /* Set 'Fonts' folder path */ GetWindowsDirectoryW(szBuffer, MAX_PATH); - wcscat(szBuffer, L"\\media\\fonts"); + wcscat(szBuffer, L"\\fonts"); dwLength = (wcslen(szBuffer) + 1) * sizeof(WCHAR); Error = RegSetValueExW(hKey, diff --git a/reactos/dll/win32/userenv/userenv.rc b/reactos/dll/win32/userenv/userenv.rc index a05ff2a0b4e..2f64786b6fb 100644 --- a/reactos/dll/win32/userenv/userenv.rc +++ b/reactos/dll/win32/userenv/userenv.rc @@ -48,7 +48,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/ja-JP.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" diff --git a/reactos/dll/win32/vdmdbg/vdmdbg.def b/reactos/dll/win32/vdmdbg/vdmdbg.def deleted file mode 100644 index ee6cdd0ad00..00000000000 --- a/reactos/dll/win32/vdmdbg/vdmdbg.def +++ /dev/null @@ -1,56 +0,0 @@ -; -; vdmdbg.def -; -; Exports for VDMDBG DLL -; -; Copyright (C) 1998 Free Software Foundation, Inc. -; Created by J.J. van der Heijden -; -; This file is part of the Windows32 API Library. -; Based on the November 1997 Platform SDK -; -; This library is free software; you can redistribute it and/or -; modify it under the terms of the GNU Library General Public -; License as published by the Free Software Foundation; either -; version 2 of the License, or (at your option) any later version. -; -; This library is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -; Library General Public License for more details. -; -; You should have received a copy of the GNU Library General Public -; License along with this library; see the file COPYING.LIB. -; If not, write to the Free Software Foundation, -; 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -; -LIBRARY VDMDBG -EXPORTS -VDMBreakThread -VDMDetectWOW -VDMEnumProcessWOW -VDMEnumTaskWOW -VDMEnumTaskWOWEx -;VDMGetAddrExpression -VDMGetContext -VDMGetDbgFlags -VDMGetModuleSelector -VDMGetPointer -VDMGetSegmentInfo -;VDMGetSegtablePointer -VDMGetSelectorModule -;VDMGetSymbol -;VDMGetThreadContext -;VDMGetThreadSelectorEntry -VDMGlobalFirst -VDMGlobalNext -VDMIsModuleLoaded -VDMKillWOW -VDMModuleFirst -VDMModuleNext -VDMProcessException -VDMSetContext -VDMSetDbgFlags -;VDMSetThreadContext -VDMStartTaskInWOW -VDMTerminateTaskWOW diff --git a/reactos/dll/win32/vdmdbg/vdmdbg.rbuild b/reactos/dll/win32/vdmdbg/vdmdbg.rbuild index 7edd52d038a..80e2434d146 100644 --- a/reactos/dll/win32/vdmdbg/vdmdbg.rbuild +++ b/reactos/dll/win32/vdmdbg/vdmdbg.rbuild @@ -1,8 +1,9 @@ - + . ntdll kernel32 vdmdbg.c + vdmdbg.spec vdmdbg.h diff --git a/reactos/dll/win32/vdmdbg/vdmdbg.spec b/reactos/dll/win32/vdmdbg/vdmdbg.spec new file mode 100644 index 00000000000..c469866ca77 --- /dev/null +++ b/reactos/dll/win32/vdmdbg/vdmdbg.spec @@ -0,0 +1,28 @@ +@ stdcall VDMBreakThread(ptr ptr) +@ stdcall VDMDetectWOW() +@ stdcall VDMEnumProcessWOW(ptr ptr) +@ stdcall VDMEnumTaskWOW(long ptr ptr) +@ stdcall VDMEnumTaskWOWEx(long ptr ptr) +;VDMGetAddrExpression +@ stdcall VDMGetContext(ptr ptr ptr) +@ stdcall VDMGetDbgFlags(ptr) +@ stdcall VDMGetModuleSelector(ptr ptr long str ptr) +@ stdcall VDMGetPointer(ptr ptr long long long) +@ stdcall VDMGetSegmentInfo(long long long ptr) +;VDMGetSegtablePointer +@ stdcall VDMGetSelectorModule(ptr ptr long ptr str long str long) +;VDMGetSymbol +;VDMGetThreadContext +;VDMGetThreadSelectorEntry +@ stdcall VDMGlobalFirst(ptr ptr ptr long ptr ptr) +@ stdcall VDMGlobalNext(ptr ptr ptr long ptr ptr) +@ stdcall VDMIsModuleLoaded(str) +@ stdcall VDMKillWOW() +@ stdcall VDMModuleFirst(ptr ptr ptr ptr ptr) +@ stdcall VDMModuleNext(ptr ptr ptr ptr ptr) +@ stdcall VDMProcessException(ptr) +@ stdcall VDMSetContext(ptr ptr ptr) +@ stdcall VDMSetDbgFlags(ptr long) +;VDMSetThreadContext +@ stdcall VDMStartTaskInWOW(long str long) +@ stdcall VDMTerminateTaskWOW(long long) diff --git a/reactos/dll/win32/wdmaud.drv/wdmaud.c b/reactos/dll/win32/wdmaud.drv/wdmaud.c index c8f80fe34e3..2a3d61d426b 100644 --- a/reactos/dll/win32/wdmaud.drv/wdmaud.c +++ b/reactos/dll/win32/wdmaud.drv/wdmaud.c @@ -216,7 +216,7 @@ modMessage(UINT uDevice, return MMSYSERR_NOTSUPPORTED; } -LRESULT +LRESULT APIENTRY DriverProc(DWORD dwDriverID, HDRVR hDriver, UINT uiMessage, diff --git a/reactos/dll/win32/wdmaud.drv/wdmaud.def b/reactos/dll/win32/wdmaud.drv/wdmaud.def deleted file mode 100644 index daefb1b5ed7..00000000000 --- a/reactos/dll/win32/wdmaud.drv/wdmaud.def +++ /dev/null @@ -1,9 +0,0 @@ -LIBRARY wdmaud.drv - -EXPORTS -DriverProc -mxdMessage -auxMessage -wodMessage -widMessage -modMessage diff --git a/reactos/dll/win32/wdmaud.drv/wdmaud.rbuild b/reactos/dll/win32/wdmaud.drv/wdmaud.rbuild index d3ff91e5edb..c9db2a8999c 100644 --- a/reactos/dll/win32/wdmaud.drv/wdmaud.rbuild +++ b/reactos/dll/win32/wdmaud.drv/wdmaud.rbuild @@ -1,5 +1,5 @@ - + . advapi32 @@ -9,4 +9,5 @@ winmm wdmaud.c wdmaud.rc + wdmaud.spec diff --git a/reactos/dll/win32/wdmaud.drv/wdmaud.spec b/reactos/dll/win32/wdmaud.drv/wdmaud.spec new file mode 100644 index 00000000000..d6195cce4a3 --- /dev/null +++ b/reactos/dll/win32/wdmaud.drv/wdmaud.spec @@ -0,0 +1,6 @@ +@ stdcall DriverProc(ptr long long ptr ptr) +@ stdcall mxdMessage(long long long long long) +@ stdcall auxMessage(long long long long long) +@ stdcall wodMessage(long long long long long) +@ stdcall widMessage(long long long long long) +@ stdcall modMessage(long long long long long) diff --git a/reactos/dll/win32/win32.rbuild b/reactos/dll/win32/win32.rbuild index 23cf5d72992..ef58b5e7b08 100644 --- a/reactos/dll/win32/win32.rbuild +++ b/reactos/dll/win32/win32.rbuild @@ -313,6 +313,9 @@ + + + diff --git a/reactos/dll/win32/ws2_32/misc/ns.c b/reactos/dll/win32/ws2_32/misc/ns.c index bf2cda5a8b2..1db254dee9b 100644 --- a/reactos/dll/win32/ws2_32/misc/ns.c +++ b/reactos/dll/win32/ws2_32/misc/ns.c @@ -1407,28 +1407,33 @@ getaddrinfo(const char FAR * nodename, if (!WSAINITIALIZED) return WSANOTINITIALISED; - /* converting port number */ - port = strtoul(servname, NULL, 10); - /* service name was specified? */ - if (port == 0) + if (servname) { - /* protocol was specified? */ - if (hints && hints->ai_protocol) + /* converting port number */ + port = strtoul(servname, NULL, 10); + /* service name was specified? */ + if (port == 0) { - pent = getprotobynumber(hints->ai_protocol); - if (pent == NULL) - return WSAEINVAL; - proto = pent->p_name; + /* protocol was specified? */ + if (hints && hints->ai_protocol) + { + pent = getprotobynumber(hints->ai_protocol); + if (pent == NULL) + return WSAEINVAL; + proto = pent->p_name; + } + else + proto = NULL; + se = getservbyname(servname, proto); + if (se == NULL) + return WSATYPE_NOT_FOUND; + port = se->s_port; } else - proto = NULL; - se = getservbyname(servname, proto); - if (se == NULL) - return WSAHOST_NOT_FOUND; - port = se->s_port; + port = htons(port); } else - port = htons(port); + port = 0; if (nodename) { diff --git a/reactos/dll/win32/wshtcpip/wshtcpip.def b/reactos/dll/win32/wshtcpip/wshtcpip.def deleted file mode 100644 index 642f35ea21b..00000000000 --- a/reactos/dll/win32/wshtcpip/wshtcpip.def +++ /dev/null @@ -1,23 +0,0 @@ -; WSHTCPIP.DLL - Windows Sockets Helper DLL for TCP/IP - -LIBRARY wshtcpip.dll - -EXPORTS -WSHAddressToString -WSHEnumProtocols -WSHGetBroadcastSockaddr -WSHGetProviderGuid -WSHGetSockaddrType -WSHGetSocketInformation -WSHGetWildcardSockaddr -WSHGetWinsockMapping -WSHGetWSAProtocolInfo -WSHIoctl -WSHJoinLeaf -WSHNotify -WSHOpenSocket -WSHOpenSocket2 -WSHSetSocketInformation -WSHStringToAddress - -; EOF diff --git a/reactos/dll/win32/wshtcpip/wshtcpip.rbuild b/reactos/dll/win32/wshtcpip/wshtcpip.rbuild index 0fd9a7d9eb6..6bf2724e9e7 100644 --- a/reactos/dll/win32/wshtcpip/wshtcpip.rbuild +++ b/reactos/dll/win32/wshtcpip/wshtcpip.rbuild @@ -1,11 +1,12 @@ - + . ntdll kernel32 ws2_32 wshtcpip.c wshtcpip.rc + wshtcpip.spec diff --git a/reactos/dll/win32/wshtcpip/wshtcpip.rc b/reactos/dll/win32/wshtcpip/wshtcpip.rc index ae23c666e26..c8ccea72952 100644 --- a/reactos/dll/win32/wshtcpip/wshtcpip.rc +++ b/reactos/dll/win32/wshtcpip/wshtcpip.rc @@ -1,4 +1,4 @@ -/* $Id$ */ +/* $Id: wshtcpip.rc 21805 2006-05-05 15:40:59Z fireball $ */ #define REACTOS_VERSION_DLL #define REACTOS_STR_FILE_DESCRIPTION "Windows Sockets 2 API\0" diff --git a/reactos/dll/win32/wshtcpip/wshtcpip.spec b/reactos/dll/win32/wshtcpip/wshtcpip.spec new file mode 100644 index 00000000000..bf9c7743528 --- /dev/null +++ b/reactos/dll/win32/wshtcpip/wshtcpip.spec @@ -0,0 +1,16 @@ +@ stdcall WSHAddressToString(ptr long ptr ptr ptr) +@ stdcall WSHEnumProtocols(ptr wstr ptr ptr) +@ stdcall WSHGetBroadcastSockaddr(ptr ptr ptr) +@ stdcall WSHGetProviderGuid(wstr ptr) +@ stdcall WSHGetSockaddrType(ptr long ptr) +@ stdcall WSHGetSocketInformation(ptr long ptr ptr long long ptr long) +@ stdcall WSHGetWildcardSockaddr(ptr ptr ptr) +@ stdcall WSHGetWinsockMapping(ptr long) +@ stdcall WSHGetWSAProtocolInfo(wstr ptr ptr) +@ stdcall WSHIoctl(ptr long ptr ptr long ptr long ptr long ptr ptr ptr ptr) +@ stdcall WSHJoinLeaf(ptr long ptr ptr ptr long ptr long ptr ptr ptr ptr long) +@ stdcall WSHNotify(ptr long ptr ptr long) +@ stdcall WSHOpenSocket(ptr ptr ptr ptr ptr ptr) +@ stdcall WSHOpenSocket2(ptr ptr ptr long long ptr ptr ptr) +@ stdcall WSHSetSocketInformation(ptr long ptr ptr long long ptr long) +@ stdcall WSHStringToAddress(wstr long ptr ptr ptr) diff --git a/reactos/drivers/directx/dxapi/dxapi.def b/reactos/drivers/directx/dxapi/dxapi.def deleted file mode 100644 index bcb4d177d78..00000000000 --- a/reactos/drivers/directx/dxapi/dxapi.def +++ /dev/null @@ -1,15 +0,0 @@ -; $Id: videoprt.def 27062 2007-06-07 21:13:06Z greatlrd $ -; -; dxapi.def - export definition file for ReactOS -; -EXPORTS -DxApi@20 -DxApiGetVersion@0 -;DxApiInitialize@32 -;DxAutoflipUpdate@20 -;DxEnableIRQ@8 -;DxLoseObject@8 -;DxUpdateCapture@12 -GsDriverEntry@8 - - diff --git a/reactos/drivers/directx/dxapi/dxapi.rbuild b/reactos/drivers/directx/dxapi/dxapi.rbuild index 5a356f9ad84..55dbdf266e9 100644 --- a/reactos/drivers/directx/dxapi/dxapi.rbuild +++ b/reactos/drivers/directx/dxapi/dxapi.rbuild @@ -2,7 +2,7 @@ - + . @@ -11,4 +11,5 @@ installbase="system32/drivers" installname="dxapi.sys"> videoprt main.c dxapi.rc + dxapi.spec diff --git a/reactos/drivers/directx/dxapi/dxapi.spec b/reactos/drivers/directx/dxapi/dxapi.spec new file mode 100644 index 00000000000..c40b5cd16e2 --- /dev/null +++ b/reactos/drivers/directx/dxapi/dxapi.spec @@ -0,0 +1,8 @@ +@ stdcall DxApi(long ptr long ptr long) +@ stdcall DxApiGetVersion() +;DxApiInitialize +;DxAutoflipUpdate +;DxEnableIRQ +;DxLoseObject +;DxUpdateCapture +@ stdcall GsDriverEntry(ptr ptr) diff --git a/reactos/drivers/directx/dxapi/main.c b/reactos/drivers/directx/dxapi/main.c index 870d8a7d6b4..c26ee5978b1 100644 --- a/reactos/drivers/directx/dxapi/main.c +++ b/reactos/drivers/directx/dxapi/main.c @@ -12,7 +12,7 @@ #include "dxapi_driver.h" -NTSTATUS +NTSTATUS NTAPI DriverEntry(IN PVOID Context1, IN PVOID Context2) { @@ -23,7 +23,7 @@ DriverEntry(IN PVOID Context1, return STATUS_SUCCESS; } -NTSTATUS +NTSTATUS NTAPI GsDriverEntry(IN PVOID Context1, IN PVOID Context2) { @@ -45,7 +45,8 @@ GsDriverEntry(IN PVOID Context1, * none * *--*/ -ULONG +DXAPI +ULONG PASCAL DxApiGetVersion() { /* MSDN say this always return Direct Sound version 4.02 */ @@ -98,7 +99,7 @@ DxApiGetVersion() *--*/ DXAPI -DWORD +DWORD PASCAL DxApi(IN DWORD dwFunctionNum, IN LPVOID lpvInBuffer, IN DWORD cbInBuffer, diff --git a/reactos/drivers/directx/dxg/dxg.def b/reactos/drivers/directx/dxg/dxg.def deleted file mode 100644 index 6500bd5809a..00000000000 --- a/reactos/drivers/directx/dxg/dxg.def +++ /dev/null @@ -1,9 +0,0 @@ -; $Id: videoprt.def 27062 2007-06-07 21:13:06Z greatlrd $ -; -; dxg.def - export definition file for ReactOS -; -EXPORTS -DriverEntry@8 -DxDdCleanupDxGraphics@0 -DxDdStartupDxGraphics@24 - diff --git a/reactos/drivers/directx/dxg/dxg.rbuild b/reactos/drivers/directx/dxg/dxg.rbuild index 1e2a5d24b82..920183fa3b9 100644 --- a/reactos/drivers/directx/dxg/dxg.rbuild +++ b/reactos/drivers/directx/dxg/dxg.rbuild @@ -1,7 +1,7 @@ - + . include subsystems/win32/win32k/include @@ -14,4 +14,5 @@ eng.c historic.c dxg.rc + dxg.spec diff --git a/reactos/drivers/directx/dxg/dxg.spec b/reactos/drivers/directx/dxg/dxg.spec new file mode 100644 index 00000000000..d9114368705 --- /dev/null +++ b/reactos/drivers/directx/dxg/dxg.spec @@ -0,0 +1,3 @@ +@ stdcall DriverEntry(ptr ptr) +@ stdcall DxDdCleanupDxGraphics() +@ stdcall DxDdStartupDxGraphics(long ptr long ptr ptr ptr) diff --git a/reactos/drivers/directx/dxg/dxg_int.h b/reactos/drivers/directx/dxg/dxg_int.h index 081b6513967..52354783bbf 100644 --- a/reactos/drivers/directx/dxg/dxg_int.h +++ b/reactos/drivers/directx/dxg/dxg_int.h @@ -72,9 +72,9 @@ typedef struct _EDD_SURFACE_LOCAL } EDD_SURFACE_LOCAL, *PEDD_SURFACE_LOCAL; /* exported functions */ -NTSTATUS DriverEntry(IN PVOID Context1, IN PVOID Context2); -NTSTATUS GsDriverEntry(IN PVOID Context1, IN PVOID Context2); -NTSTATUS DxDdCleanupDxGraphics(); +NTSTATUS NTAPI DriverEntry(IN PVOID Context1, IN PVOID Context2); +NTSTATUS NTAPI GsDriverEntry(IN PVOID Context1, IN PVOID Context2); +NTSTATUS APIENTRY DxDdCleanupDxGraphics(); /* Global pointers */ extern ULONG gcSizeDdHmgr; diff --git a/reactos/drivers/directx/dxg/main.c b/reactos/drivers/directx/dxg/main.c index ba82eeb78fa..91104c23b6c 100644 --- a/reactos/drivers/directx/dxg/main.c +++ b/reactos/drivers/directx/dxg/main.c @@ -25,7 +25,7 @@ const ULONG gcDxgFuncs = DXG_INDEX_DxDdIoctl + 1; -NTSTATUS +NTSTATUS NTAPI DriverEntry(IN PVOID Context1, IN PVOID Context2) { @@ -117,6 +117,7 @@ DxDdStartupDxGraphics (ULONG SizeEngDrv, NTSTATUS +APIENTRY DxDdCleanupDxGraphics() { DdHmgDestroy(); diff --git a/reactos/drivers/directx/dxgthk/dxgthk.def b/reactos/drivers/directx/dxgthk/dxgthk.def deleted file mode 100644 index ce0bc1b844f..00000000000 --- a/reactos/drivers/directx/dxgthk/dxgthk.def +++ /dev/null @@ -1,26 +0,0 @@ -; $Id: videoprt.def 27062 2007-06-07 21:13:06Z greatlrd $ -; -; dxg.def - export definition file for ReactOS -; -EXPORTS -DriverEntry@8 -EngAcquireSemaphore@4=win32k.EngAcquireSemaphore@4 -EngAllocMem@12=win32k.EngAllocMem@12 -EngAllocUserMem@8=win32k.EngAllocUserMem@8 -EngCopyBits@24=win32k.EngCopyBits@24 -EngCreateBitmap@24=win32k.EngCreateBitmap@24 -EngCreatePalette@24=win32k.EngCreatePalette@24 -EngCreateSemaphore@0=win32k.EngCreateSemaphore@0 -EngDeletePalette@4=win32k.EngDeletePalette@4 -EngDeleteSemaphore@4=win32k.EngDeleteSemaphore@4 -EngDeleteSurface@4=win32k.EngDeleteSurface@4 -EngFindImageProcAddress@8=win32k.EngFindImageProcAddress@8 -EngFreeMem@4=win32k.EngFreeMem@4 -EngFreeUserMem@4=win32k.EngFreeUserMem@4 -EngLoadImage@4=win32k.EngLoadImage@4 -EngLockSurface@4=win32k.EngLockSurface@4 -EngReleaseSemaphore@4=win32k.EngReleaseSemaphore@4 -EngSetLastError@4=win32k.EngSetLastError@4 -EngUnloadImage@4=win32k.EngUnloadImage@4 -EngUnlockSurface@4=win32k.EngUnlockSurface@4 - diff --git a/reactos/drivers/directx/dxgthk/dxgthk.rbuild b/reactos/drivers/directx/dxgthk/dxgthk.rbuild index d6e2448d1db..c69bce2e9c4 100644 --- a/reactos/drivers/directx/dxgthk/dxgthk.rbuild +++ b/reactos/drivers/directx/dxgthk/dxgthk.rbuild @@ -2,10 +2,11 @@ - + . win32k main.c dxgthk.rc + dxgthk.spec diff --git a/reactos/drivers/directx/dxgthk/dxgthk.spec b/reactos/drivers/directx/dxgthk/dxgthk.spec new file mode 100644 index 00000000000..dbe265ef2e0 --- /dev/null +++ b/reactos/drivers/directx/dxgthk/dxgthk.spec @@ -0,0 +1,20 @@ +@ stdcall DriverEntry(ptr ptr) +@ stdcall EngAcquireSemaphore(ptr) win32k.EngAcquireSemaphore +@ stdcall EngAllocMem(long long long) win32k.EngAllocMem +@ stdcall EngAllocUserMem(long long) win32k.EngAllocUserMem +@ stdcall EngCopyBits(ptr ptr ptr ptr ptr ptr) win32k.EngCopyBits +@ stdcall EngCreateBitmap(long long long long ptr) win32k.EngCreateBitmap +@ stdcall EngCreatePalette(long long long long long long) win32k.EngCreatePalette +@ stdcall EngCreateSemaphore() win32k.EngCreateSemaphore +@ stdcall EngDeletePalette(ptr) win32k.EngDeletePalette +@ stdcall EngDeleteSemaphore(ptr) win32k.EngDeleteSemaphore +@ stdcall EngDeleteSurface(ptr) win32k.EngDeleteSurface +@ stdcall EngFindImageProcAddress(ptr str) win32k.EngFindImageProcAddress +@ stdcall EngFreeMem(ptr) win32k.EngFreeMem +@ stdcall EngFreeUserMem(ptr) win32k.EngFreeUserMem +@ stdcall EngLoadImage(wstr) win32k.EngLoadImage +@ stdcall EngLockSurface(ptr) win32k.EngLockSurface +@ stdcall EngReleaseSemaphore(ptr) win32k.EngReleaseSemaphore +@ stdcall EngSetLastError(long) win32k.EngSetLastError +@ stdcall EngUnloadImage(ptr) win32k.EngUnloadImage +@ stdcall EngUnlockSurface(ptr) win32k.EngUnlockSurface diff --git a/reactos/drivers/directx/dxgthk/main.c b/reactos/drivers/directx/dxgthk/main.c index 11add7a18e0..87ec3e0fc76 100644 --- a/reactos/drivers/directx/dxgthk/main.c +++ b/reactos/drivers/directx/dxgthk/main.c @@ -12,7 +12,7 @@ /* DDK/NDK/SDK Headers */ #include -NTSTATUS +NTSTATUS NTAPI DriverEntry(IN PVOID Context1, IN PVOID Context2) { diff --git a/reactos/drivers/filesystems/fastfat/fcb.c b/reactos/drivers/filesystems/fastfat/fcb.c index f42d3a62b62..8ae22b8411d 100644 --- a/reactos/drivers/filesystems/fastfat/fcb.c +++ b/reactos/drivers/filesystems/fastfat/fcb.c @@ -332,7 +332,6 @@ vfatFCBInitializeCacheFromVolume (PVCB vcb, PVFATFCB fcb) fcb->FileObject = fileObject; fcb->RefCount++; - /* FIXME: Guard by SEH. */ CcInitializeCacheMap(fileObject, (PCC_FILE_SIZES)(&fcb->RFCB.AllocationSize), FALSE, diff --git a/reactos/drivers/filesystems/fastfat/fsctl.c b/reactos/drivers/filesystems/fastfat/fsctl.c index 99ff3faf3f1..fed155a672b 100644 --- a/reactos/drivers/filesystems/fastfat/fsctl.c +++ b/reactos/drivers/filesystems/fastfat/fsctl.c @@ -537,7 +537,6 @@ VfatMount (PVFAT_IRP_CONTEXT IrpContext) Fcb->RFCB.ValidDataLength = Fcb->RFCB.FileSize; Fcb->RFCB.AllocationSize = Fcb->RFCB.FileSize; - /* FIXME: Guard by SEH. */ CcInitializeCacheMap(DeviceExt->FATFileObject, (PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize), FALSE, diff --git a/reactos/drivers/filesystems/fastfat/rw.c b/reactos/drivers/filesystems/fastfat/rw.c index dfb12ffe661..11ed87212ae 100644 --- a/reactos/drivers/filesystems/fastfat/rw.c +++ b/reactos/drivers/filesystems/fastfat/rw.c @@ -671,7 +671,6 @@ VfatRead(PVFAT_IRP_CONTEXT IrpContext) CHECKPOINT; if (IrpContext->FileObject->PrivateCacheMap == NULL) { - /* FIXME: Guard by SEH. */ CcInitializeCacheMap(IrpContext->FileObject, (PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize), FALSE, @@ -965,7 +964,6 @@ NTSTATUS VfatWrite (PVFAT_IRP_CONTEXT IrpContext) if (IrpContext->FileObject->PrivateCacheMap == NULL) { - /* FIXME: Guard by SEH. */ CcInitializeCacheMap(IrpContext->FileObject, (PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize), FALSE, diff --git a/reactos/drivers/network/afd/afd/bind.c b/reactos/drivers/network/afd/afd/bind.c index d11c2a9fa27..73bb6a617ab 100644 --- a/reactos/drivers/network/afd/afd/bind.c +++ b/reactos/drivers/network/afd/afd/bind.c @@ -48,10 +48,10 @@ AfdBindSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Called\n")); - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); if( !(BindReq = LockRequest( Irp, IrpSp )) ) return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, - Irp, 0, NULL, FALSE ); + Irp, 0, NULL ); FCB->LocalAddress = TaCopyTransportAddress( &BindReq->Address ); @@ -61,7 +61,7 @@ AfdBindSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp, if( NT_SUCCESS(Status) ) FCB->State = SOCKET_STATE_BOUND; - else return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL, FALSE ); + else return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); AFD_DbgPrint(MID_TRACE,("FCB->Flags %x\n", FCB->Flags)); @@ -87,6 +87,6 @@ AfdBindSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp, if( Status == STATUS_PENDING ) Status = STATUS_SUCCESS; } - return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL, TRUE ); + return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); } diff --git a/reactos/drivers/network/afd/afd/connect.c b/reactos/drivers/network/afd/afd/connect.c index a93aa6a847d..77d9f0aa94a 100644 --- a/reactos/drivers/network/afd/afd/connect.c +++ b/reactos/drivers/network/afd/afd/connect.c @@ -33,26 +33,32 @@ NTSTATUS WarmSocketForConnection( PAFD_FCB FCB ) { } NTSTATUS MakeSocketIntoConnection( PAFD_FCB FCB ) { - NTSTATUS Status = STATUS_NO_MEMORY; + NTSTATUS Status; /* Allocate the receive area and start receiving */ FCB->Recv.Window = ExAllocatePool( NonPagedPool, FCB->Recv.Size ); + + if( !FCB->Recv.Window ) return STATUS_NO_MEMORY; + FCB->Send.Window = ExAllocatePool( NonPagedPool, FCB->Send.Size ); + if( !FCB->Send.Window ) { + ExFreePool( FCB->Recv.Window ); + return STATUS_NO_MEMORY; + } + FCB->State = SOCKET_STATE_CONNECTED; - if( FCB->Recv.Window ) { - Status = TdiReceive( &FCB->ReceiveIrp.InFlightRequest, - FCB->Connection.Object, - TDI_RECEIVE_NORMAL, - FCB->Recv.Window, - FCB->Recv.Size, - &FCB->ReceiveIrp.Iosb, - ReceiveComplete, - FCB ); - } + Status = TdiReceive( &FCB->ReceiveIrp.InFlightRequest, + FCB->Connection.Object, + TDI_RECEIVE_NORMAL, + FCB->Recv.Window, + FCB->Recv.Size, + &FCB->ReceiveIrp.Iosb, + ReceiveComplete, + FCB ); return Status; } @@ -71,7 +77,7 @@ static NTSTATUS NTAPI StreamSocketConnectComplete /* I was wrong about this before as we can have pending writes to a not * yet connected socket */ - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); AFD_DbgPrint(MID_TRACE,("Irp->IoStatus.Status = %x\n", Irp->IoStatus.Status)); @@ -95,14 +101,16 @@ static NTSTATUS NTAPI StreamSocketConnectComplete AFD_DbgPrint(MID_TRACE,("Completing connect %x\n", NextIrp)); NextIrp->IoStatus.Status = Status; NextIrp->IoStatus.Information = 0; + if( NextIrp->MdlAddress ) UnlockRequest( NextIrp, IoGetCurrentIrpStackLocation( NextIrp ) ); IoCompleteRequest( NextIrp, IO_NETWORK_INCREMENT ); } if( NT_SUCCESS(Status) ) { Status = MakeSocketIntoConnection( FCB ); - if( FCB->Send.Window && - !IsListEmpty( &FCB->PendingIrpList[FUNCTION_SEND] ) ) { + if( !NT_SUCCESS(Status) ) return Status; + + if( !IsListEmpty( &FCB->PendingIrpList[FUNCTION_SEND] ) ) { NextIrpEntry = RemoveHeadList(&FCB->PendingIrpList[FUNCTION_SEND]); NextIrp = CONTAINING_RECORD(NextIrpEntry, IRP, Tail.Overlay.ListEntry); @@ -137,10 +145,10 @@ AfdStreamSocketConnect(PDEVICE_OBJECT DeviceObject, PIRP Irp, PAFD_CONNECT_INFO ConnectReq; AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB)); - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); if( !(ConnectReq = LockRequest( Irp, IrpSp )) ) return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp, - 0, NULL, FALSE ); + 0, NULL ); AFD_DbgPrint(MID_TRACE,("Connect request:\n")); #if 0 @@ -157,7 +165,7 @@ AfdStreamSocketConnect(PDEVICE_OBJECT DeviceObject, PIRP Irp, case SOCKET_STATE_CONNECTING: return LeaveIrpUntilLater( FCB, Irp, FUNCTION_CONNECT ); - case SOCKET_STATE_CREATED: { + case SOCKET_STATE_CREATED: FCB->LocalAddress = TaCopyTransportAddress( &ConnectReq->RemoteAddress ); @@ -177,12 +185,12 @@ AfdStreamSocketConnect(PDEVICE_OBJECT DeviceObject, PIRP Irp, if( NT_SUCCESS(Status) ) FCB->State = SOCKET_STATE_BOUND; else - return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL, - TRUE ); + return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); } else return UnlockAndMaybeComplete - ( FCB, STATUS_NO_MEMORY, Irp, 0, NULL, TRUE ); - } /* Drop through to SOCKET_STATE_BOUND */ + ( FCB, STATUS_NO_MEMORY, Irp, 0, NULL ); + + /* Drop through to SOCKET_STATE_BOUND */ case SOCKET_STATE_BOUND: FCB->RemoteAddress = @@ -228,5 +236,5 @@ AfdStreamSocketConnect(PDEVICE_OBJECT DeviceObject, PIRP Irp, break; } - return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL, TRUE ); + return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); } diff --git a/reactos/drivers/network/afd/afd/context.c b/reactos/drivers/network/afd/afd/context.c index 2c9055f7408..18744884ed0 100644 --- a/reactos/drivers/network/afd/afd/context.c +++ b/reactos/drivers/network/afd/afd/context.c @@ -20,7 +20,7 @@ AfdGetContext( PDEVICE_OBJECT DeviceObject, PIRP Irp, PAFD_FCB FCB = FileObject->FsContext; UINT ContextSize = IrpSp->Parameters.DeviceIoControl.OutputBufferLength; - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); if( FCB->ContextSize < ContextSize ) ContextSize = FCB->ContextSize; @@ -33,7 +33,7 @@ AfdGetContext( PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status)); - return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL, FALSE ); + return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); } NTSTATUS STDCALL @@ -43,7 +43,7 @@ AfdSetContext( PDEVICE_OBJECT DeviceObject, PIRP Irp, PFILE_OBJECT FileObject = IrpSp->FileObject; PAFD_FCB FCB = FileObject->FsContext; - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); if( FCB->ContextSize < IrpSp->Parameters.DeviceIoControl.InputBufferLength ) { @@ -64,5 +64,5 @@ AfdSetContext( PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status)); - return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL, FALSE ); + return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); } diff --git a/reactos/drivers/network/afd/afd/info.c b/reactos/drivers/network/afd/afd/info.c index 7e3d5e8d44a..9a3ead68093 100644 --- a/reactos/drivers/network/afd/afd/info.c +++ b/reactos/drivers/network/afd/afd/info.c @@ -26,7 +26,7 @@ AfdGetInfo( PDEVICE_OBJECT DeviceObject, PIRP Irp, _SEH_TRY { if( !SocketAcquireStateLock( FCB ) ) { - Status = LostSocket( Irp, FALSE ); + Status = LostSocket( Irp ); _SEH_YIELD(return Status); } @@ -69,7 +69,7 @@ AfdGetInfo( PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status)); - return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL, FALSE ); + return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); } NTSTATUS STDCALL @@ -84,11 +84,11 @@ AfdGetSockOrPeerName( PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB)); - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); if( FCB->AddressFile.Object == NULL) { return UnlockAndMaybeComplete( FCB, STATUS_UNSUCCESSFUL, Irp, 0, - NULL, FALSE ); + NULL ); } Mdl = IoAllocateMdl @@ -159,5 +159,5 @@ AfdGetSockOrPeerName( PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status)); - return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL, FALSE ); + return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); } diff --git a/reactos/drivers/network/afd/afd/listen.c b/reactos/drivers/network/afd/afd/listen.c index f00c686cf17..63d4b359f30 100644 --- a/reactos/drivers/network/afd/afd/listen.c +++ b/reactos/drivers/network/afd/afd/listen.c @@ -18,7 +18,10 @@ static VOID SatisfyAccept( PAFD_DEVICE_EXTENSION DeviceExt, PAFD_TDI_OBJECT_QELT Qelt ) { PAFD_FCB FCB = NewFileObject->FsContext; - if( !SocketAcquireStateLock( FCB ) ) return; + if( !SocketAcquireStateLock( FCB ) ) { + LostSocket( Irp ); + return; + } /* Transfer the connection to the new socket, launch the opening read */ AFD_DbgPrint(MID_TRACE,("Completing a real accept (FCB %x)\n", FCB)); @@ -28,6 +31,8 @@ static VOID SatisfyAccept( PAFD_DEVICE_EXTENSION DeviceExt, FCB->RemoteAddress = TaCopyTransportAddress( Qelt->ConnInfo->RemoteAddress ); + if( Irp->MdlAddress ) UnlockRequest( Irp, IoGetCurrentIrpStackLocation( Irp ) ); + Irp->IoStatus.Information = 0; Irp->IoStatus.Status = STATUS_SUCCESS; IoCompleteRequest( Irp, IO_NETWORK_INCREMENT ); @@ -67,6 +72,8 @@ static VOID SatisfyPreAccept( PIRP Irp, PAFD_TDI_OBJECT_QELT Qelt ) { AFD_DbgPrint(MID_TRACE,("IPAddr->Address[0].Address[0].sin_addr %x\n", IPAddr->Address[0].Address[0].in_addr)); + if( Irp->MdlAddress ) UnlockRequest( Irp, IoGetCurrentIrpStackLocation( Irp ) ); + Irp->IoStatus.Information = ((PCHAR)&IPAddr[1]) - ((PCHAR)ListenReceive); Irp->IoStatus.Status = STATUS_SUCCESS; IoCompleteRequest( Irp, IO_NETWORK_INCREMENT ); @@ -135,6 +142,8 @@ static NTSTATUS NTAPI ListenComplete ListEntry ) ); } + if( FCB->ListenIrp.ConnectionCallInfo ) ExFreePool( FCB->ListenIrp.ConnectionCallInfo ); + if( FCB->ListenIrp.ConnectionReturnInfo ) ExFreePool( FCB->ListenIrp.ConnectionReturnInfo ); FCB->NeedsNewListen = TRUE; /* Trigger a select return if appropriate */ @@ -157,16 +166,16 @@ NTSTATUS AfdListenSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB)); - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); if( !(ListenReq = LockRequest( Irp, IrpSp )) ) return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp, - 0, NULL, FALSE ); + 0, NULL ); if( FCB->State != SOCKET_STATE_BOUND ) { Status = STATUS_UNSUCCESSFUL; AFD_DbgPrint(MID_TRACE,("Could not listen an unbound socket\n")); - return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL, TRUE ); + return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); } FCB->DelayedAccept = ListenReq->UseDelayedAcceptance; @@ -175,10 +184,12 @@ NTSTATUS AfdListenSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp, Status = WarmSocketForConnection( FCB ); - FCB->State = SOCKET_STATE_LISTENING; - AFD_DbgPrint(MID_TRACE,("Status from warmsocket %x\n", Status)); + if( !NT_SUCCESS(Status) ) return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); + + FCB->State = SOCKET_STATE_LISTENING; + TdiBuildNullConnectionInfo ( &FCB->ListenIrp.ConnectionCallInfo, FCB->LocalAddress->Address[0].AddressType ); @@ -198,7 +209,7 @@ NTSTATUS AfdListenSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp, Status = STATUS_SUCCESS; AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status)); - return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL, TRUE ); + return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); } NTSTATUS AfdWaitForListen( PDEVICE_OBJECT DeviceObject, PIRP Irp, @@ -209,7 +220,7 @@ NTSTATUS AfdWaitForListen( PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Called\n")); - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); if( !IsListEmpty( &FCB->PendingConnections ) ) { PLIST_ENTRY PendingConn = FCB->PendingConnections.Flink; @@ -246,7 +257,7 @@ NTSTATUS AfdAccept( PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Called\n")); - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); FCB->EventsFired &= ~AFD_EVENT_ACCEPT; @@ -268,7 +279,7 @@ NTSTATUS AfdAccept( PDEVICE_OBJECT DeviceObject, PIRP Irp, &FCB->ListenIrp.Iosb, ListenComplete, FCB ); - } + } else return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); FCB->NeedsNewListen = FALSE; } diff --git a/reactos/drivers/network/afd/afd/lock.c b/reactos/drivers/network/afd/afd/lock.c index b9da3224a99..43f0633614c 100644 --- a/reactos/drivers/network/afd/afd/lock.c +++ b/reactos/drivers/network/afd/afd/lock.c @@ -112,14 +112,18 @@ VOID UnlockBuffers( PAFD_WSABUF Buf, UINT Count, BOOL Address ) { PAFD_MAPBUF Map = (PAFD_MAPBUF)(Buf + Count + Lock); UINT i; + if( !Buf ) return; + for( i = 0; i < Count + Lock; i++ ) { if( Map[i].Mdl ) { MmUnlockPages( Map[i].Mdl ); IoFreeMdl( Map[i].Mdl ); + Map[i].Mdl = NULL; } } ExFreePool( Buf ); + Buf = NULL; } /* Produce a kernel-land handle array with handles replaced by object @@ -235,8 +239,10 @@ VOID SocketStateUnlock( PAFD_FCB FCB ) { NTSTATUS NTAPI UnlockAndMaybeComplete ( PAFD_FCB FCB, NTSTATUS Status, PIRP Irp, UINT Information, - PIO_COMPLETION_ROUTINE Completion, - BOOL ShouldUnlock ) { + PIO_COMPLETION_ROUTINE Completion ) { + + Irp->IoStatus.Status = Status; + Irp->IoStatus.Information = Information; if( Status == STATUS_PENDING ) { /* We should firstly mark this IRP as pending, because @@ -244,29 +250,23 @@ NTSTATUS NTAPI UnlockAndMaybeComplete before we return from SocketStateUnlock(). */ IoMarkIrpPending( Irp ); SocketStateUnlock( FCB ); - if( ShouldUnlock ) - UnlockRequest( Irp, IoGetCurrentIrpStackLocation( Irp ) ); } else { + if ( Irp->MdlAddress ) UnlockRequest( Irp, IoGetCurrentIrpStackLocation( Irp ) ); SocketStateUnlock( FCB ); - Irp->IoStatus.Status = Status; - Irp->IoStatus.Information = Information; if( Completion ) Completion( FCB->DeviceExt->DeviceObject, Irp, FCB ); - if( ShouldUnlock ) - UnlockRequest( Irp, IoGetCurrentIrpStackLocation( Irp ) ); IoCompleteRequest( Irp, IO_NETWORK_INCREMENT ); } return Status; } -NTSTATUS LostSocket( PIRP Irp, BOOL ShouldUnlockIrp ) { +NTSTATUS LostSocket( PIRP Irp ) { NTSTATUS Status = STATUS_INVALID_PARAMETER; AFD_DbgPrint(MIN_TRACE,("Called.\n")); Irp->IoStatus.Information = 0; Irp->IoStatus.Status = Status; - if( ShouldUnlockIrp ) - UnlockRequest( Irp, IoGetCurrentIrpStackLocation( Irp ) ); + if ( Irp->MdlAddress ) UnlockRequest( Irp, IoGetCurrentIrpStackLocation( Irp ) ); IoCompleteRequest( Irp, IO_NO_INCREMENT ); return Status; } @@ -274,7 +274,7 @@ NTSTATUS LostSocket( PIRP Irp, BOOL ShouldUnlockIrp ) { NTSTATUS LeaveIrpUntilLater( PAFD_FCB FCB, PIRP Irp, UINT Function ) { InsertTailList( &FCB->PendingIrpList[Function], &Irp->Tail.Overlay.ListEntry ); - return UnlockAndMaybeComplete( FCB, STATUS_PENDING, Irp, 0, NULL, FALSE ); + return UnlockAndMaybeComplete( FCB, STATUS_PENDING, Irp, 0, NULL ); } VOID SocketCalloutEnter( PAFD_FCB FCB ) { diff --git a/reactos/drivers/network/afd/afd/main.c b/reactos/drivers/network/afd/afd/main.c index ade36494317..a689ce56098 100644 --- a/reactos/drivers/network/afd/afd/main.c +++ b/reactos/drivers/network/afd/afd/main.c @@ -114,9 +114,6 @@ AfdCreateSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp, FCB->TdiDeviceName.MaximumLength = FCB->TdiDeviceName.Length; FCB->TdiDeviceName.Buffer = ExAllocatePool( NonPagedPool, FCB->TdiDeviceName.Length ); - RtlCopyMemory( FCB->TdiDeviceName.Buffer, - ConnectInfo->TransportName, - FCB->TdiDeviceName.Length ); if( !FCB->TdiDeviceName.Buffer ) { ExFreePool(FCB); @@ -126,6 +123,10 @@ AfdCreateSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp, return STATUS_NO_MEMORY; } + RtlCopyMemory( FCB->TdiDeviceName.Buffer, + ConnectInfo->TransportName, + FCB->TdiDeviceName.Length ); + AFD_DbgPrint(MID_TRACE,("Success: %s %wZ\n", EaInfo->EaName, &FCB->TdiDeviceName)); } else { @@ -165,16 +166,19 @@ VOID DestroySocket( PAFD_FCB FCB ) { InFlightRequest[0] = &FCB->ListenIrp; InFlightRequest[1] = &FCB->ReceiveIrp; InFlightRequest[2] = &FCB->SendIrp; + InFlightRequest[3] = &FCB->ConnectIrp; /* Return early here because we might be called in the mean time. */ if( FCB->Critical || FCB->ListenIrp.InFlightRequest || FCB->ReceiveIrp.InFlightRequest || - FCB->SendIrp.InFlightRequest ) { - AFD_DbgPrint(MIN_TRACE,("Leaving socket alive (%x %x %x)\n", + FCB->SendIrp.InFlightRequest || + FCB->ConnectIrp.InFlightRequest ) { + AFD_DbgPrint(MIN_TRACE,("Leaving socket alive (%x %x %x %x)\n", FCB->ListenIrp.InFlightRequest, FCB->ReceiveIrp.InFlightRequest, - FCB->SendIrp.InFlightRequest)); + FCB->SendIrp.InFlightRequest, + FCB->ConnectIrp.InFlightRequest)); ReturnEarly = TRUE; } @@ -183,11 +187,10 @@ VOID DestroySocket( PAFD_FCB FCB ) { /* Cancel our pending requests */ for( i = 0; i < IN_FLIGHT_REQUESTS; i++ ) { - NTSTATUS Status = STATUS_NO_SUCH_FILE; if( InFlightRequest[i]->InFlightRequest ) { AFD_DbgPrint(MID_TRACE,("Cancelling in flight irp %d (%x)\n", i, InFlightRequest[i]->InFlightRequest)); - InFlightRequest[i]->InFlightRequest->IoStatus.Status = Status; + InFlightRequest[i]->InFlightRequest->IoStatus.Status = STATUS_CANCELLED; InFlightRequest[i]->InFlightRequest->IoStatus.Information = 0; IoCancelIrp( InFlightRequest[i]->InFlightRequest ); } @@ -205,6 +208,8 @@ VOID DestroySocket( PAFD_FCB FCB ) { ExFreePool( FCB->AddressFrom ); if( FCB->LocalAddress ) ExFreePool( FCB->LocalAddress ); + if( FCB->RemoteAddress ) + ExFreePool( FCB->RemoteAddress ); ExFreePool(FCB->TdiDeviceName.Buffer); @@ -255,11 +260,11 @@ AfdDisconnect(PDEVICE_OBJECT DeviceObject, PIRP Irp, NTSTATUS Status; USHORT Flags = 0; - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); if( !(DisReq = LockRequest( Irp, IrpSp )) ) return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, - Irp, 0, NULL, FALSE ); + Irp, 0, NULL ); if (NULL == FCB->RemoteAddress) { @@ -272,7 +277,7 @@ AfdDisconnect(PDEVICE_OBJECT DeviceObject, PIRP Irp, if( !NT_SUCCESS(Status) || !ConnInfo ) return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, - Irp, 0, NULL, TRUE ); + Irp, 0, NULL ); } if( DisReq->DisconnectType & AFD_DISCONNECT_SEND ) @@ -292,7 +297,7 @@ AfdDisconnect(PDEVICE_OBJECT DeviceObject, PIRP Irp, if (ConnInfo) ExFreePool( ConnInfo ); - return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL, TRUE ); + return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); } static NTSTATUS STDCALL @@ -311,6 +316,8 @@ AfdDispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp) ASSERT(FileObject == IrpSp->FileObject); } + Irp->IoStatus.Information = 0; + switch(IrpSp->MajorFunction) { /* opening and closing handles to the device */ @@ -455,7 +462,6 @@ AfdDispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp) default: Status = STATUS_NOT_IMPLEMENTED; - Irp->IoStatus.Information = 0; AFD_DbgPrint(MIN_TRACE, ("Unknown IOCTL (0x%x)\n", IrpSp->Parameters.DeviceIoControl. IoControlCode)); diff --git a/reactos/drivers/network/afd/afd/read.c b/reactos/drivers/network/afd/afd/read.c index 48091aefe7b..05f723ba9c2 100644 --- a/reactos/drivers/network/afd/afd/read.c +++ b/reactos/drivers/network/afd/afd/read.c @@ -129,7 +129,7 @@ static NTSTATUS ReceiveActivity( PAFD_FCB FCB, PIRP Irp ) { PIRP NextIrp; PIO_STACK_LOCATION NextIrpSp; PAFD_RECV_INFO RecvReq; - UINT TotalBytesCopied = 0; + UINT TotalBytesCopied = 0, RetBytesCopied = 0; NTSTATUS Status = STATUS_SUCCESS, RetStatus = STATUS_PENDING; AFD_DbgPrint(MID_TRACE,("%x %x\n", FCB, Irp)); @@ -168,11 +168,8 @@ static NTSTATUS ReceiveActivity( PAFD_FCB FCB, PIRP Irp ) { FCB, FCB->Recv.Content)); /*OskitDumpBuffer( FCB->Recv.Window, FCB->Recv.Content );*/ - Status = STATUS_SUCCESS; - /* Try to clear some requests */ - while( !IsListEmpty( &FCB->PendingIrpList[FUNCTION_RECV] ) && - NT_SUCCESS(Status) ) { + while( !IsListEmpty( &FCB->PendingIrpList[FUNCTION_RECV] ) ) { NextIrpEntry = RemoveHeadList(&FCB->PendingIrpList[FUNCTION_RECV]); NextIrp = @@ -197,7 +194,10 @@ static NTSTATUS ReceiveActivity( PAFD_FCB FCB, PIRP Irp ) { RecvReq->BufferCount, FALSE ); NextIrp->IoStatus.Status = Status; NextIrp->IoStatus.Information = TotalBytesCopied; - if( NextIrp == Irp ) RetStatus = Status; + if( NextIrp == Irp ) { + RetStatus = Status; + RetBytesCopied = TotalBytesCopied; + } if( NextIrp->MdlAddress ) UnlockRequest( NextIrp, IoGetCurrentIrpStackLocation( NextIrp ) ); IoCompleteRequest( NextIrp, IO_NETWORK_INCREMENT ); } @@ -213,6 +213,12 @@ static NTSTATUS ReceiveActivity( PAFD_FCB FCB, PIRP Irp ) { AFD_DbgPrint(MID_TRACE,("RetStatus for irp %x is %x\n", Irp, RetStatus)); + /* Sometimes we're called with a NULL Irp */ + if( Irp ) { + Irp->IoStatus.Status = RetStatus; + Irp->IoStatus.Information = RetBytesCopied; + } + return RetStatus; } @@ -227,11 +233,6 @@ NTSTATUS NTAPI ReceiveComplete ASSERT_IRQL(APC_LEVEL); - if (Irp->Cancel) { - FCB->ReceiveIrp.InFlightRequest = NULL; - return STATUS_SUCCESS; - } - if( !SocketAcquireStateLock( FCB ) ) return Status; FCB->ReceiveIrp.InFlightRequest = NULL; @@ -273,21 +274,21 @@ AfdConnectedSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB)); - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); if( FCB->State != SOCKET_STATE_CONNECTED && FCB->State != SOCKET_STATE_CONNECTING ) { AFD_DbgPrint(MID_TRACE,("Called recv on wrong kind of socket (s%x)\n", FCB->State)); return UnlockAndMaybeComplete( FCB, STATUS_UNSUCCESSFUL, - Irp, 0, NULL, FALSE ); + Irp, 0, NULL ); } if( FCB->Flags & AFD_ENDPOINT_CONNECTIONLESS ) { AFD_DbgPrint(MID_TRACE,("Receive on connection-less sockets not implemented\n")); return UnlockAndMaybeComplete( FCB, STATUS_NOT_IMPLEMENTED, - Irp, 0, NULL, FALSE ); + Irp, 0, NULL ); } FCB->EventsFired &= ~AFD_EVENT_RECEIVE; @@ -295,7 +296,7 @@ AfdConnectedSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp, if( !(RecvReq = LockRequest( Irp, IrpSp )) ) return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, - Irp, 0, NULL, FALSE ); + Irp, 0, NULL ); AFD_DbgPrint(MID_TRACE,("Recv flags %x\n", RecvReq->AfdFlags)); @@ -306,7 +307,7 @@ AfdConnectedSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp, if( !RecvReq->BufferArray ) { return UnlockAndMaybeComplete( FCB, STATUS_ACCESS_VIOLATION, - Irp, 0, NULL, TRUE ); + Irp, 0, NULL ); } Irp->IoStatus.Status = STATUS_PENDING; @@ -326,7 +327,7 @@ AfdConnectedSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp, RemoveEntryList( &Irp->Tail.Overlay.ListEntry ); UnlockBuffers( RecvReq->BufferArray, RecvReq->BufferCount, FALSE ); return UnlockAndMaybeComplete( FCB, Status, Irp, - TotalBytesCopied, NULL, TRUE ); + TotalBytesCopied, NULL ); } else if( Status == STATUS_PENDING ) { AFD_DbgPrint(MID_TRACE,("Leaving read irp\n")); IoMarkIrpPending( Irp ); @@ -448,11 +449,6 @@ PacketSocketRecvComplete( AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB)); - if (Irp->Cancel) { - FCB->ReceiveIrp.InFlightRequest = NULL; - return STATUS_SUCCESS; - } - if( !SocketAcquireStateLock( FCB ) ) return STATUS_UNSUCCESSFUL; FCB->ReceiveIrp.InFlightRequest = NULL; @@ -477,10 +473,14 @@ PacketSocketRecvComplete( InsertTailList( &FCB->DatagramList, &DatagramRecv->ListEntry ); } else Status = STATUS_NO_MEMORY; + if( !NT_SUCCESS( Status ) ) { + SocketStateUnlock( FCB ); + return Status; + } + /* Satisfy as many requests as we can */ - while( NT_SUCCESS(Status) && - !IsListEmpty( &FCB->DatagramList ) && + while( !IsListEmpty( &FCB->DatagramList ) && !IsListEmpty( &FCB->PendingIrpList[FUNCTION_RECV] ) ) { AFD_DbgPrint(MID_TRACE,("Looping trying to satisfy request\n")); ListEntry = RemoveHeadList( &FCB->DatagramList ); @@ -501,6 +501,7 @@ PacketSocketRecvComplete( Status = NextIrp->IoStatus.Status = STATUS_BUFFER_TOO_SMALL; NextIrp->IoStatus.Information = DatagramRecv->Len; UnlockBuffers( RecvReq->BufferArray, RecvReq->BufferCount, TRUE ); + if ( NextIrp->MdlAddress ) UnlockRequest( NextIrp, IoGetCurrentIrpStackLocation( NextIrp ) ); IoCompleteRequest( NextIrp, IO_NETWORK_INCREMENT ); } else { AFD_DbgPrint(MID_TRACE,("Satisfying\n")); @@ -509,6 +510,7 @@ PacketSocketRecvComplete( (PUINT)&NextIrp->IoStatus.Information ); AFD_DbgPrint(MID_TRACE,("Unlocking\n")); UnlockBuffers( RecvReq->BufferArray, RecvReq->BufferCount, TRUE ); + if ( NextIrp->MdlAddress ) UnlockRequest( NextIrp, IoGetCurrentIrpStackLocation( NextIrp ) ); AFD_DbgPrint(MID_TRACE,("Completing\n")); IoCompleteRequest( NextIrp, IO_NETWORK_INCREMENT ); } @@ -557,29 +559,29 @@ AfdPacketSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB)); - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); FCB->EventsFired &= ~AFD_EVENT_RECEIVE; /* Check that the socket is bound */ if( FCB->State != SOCKET_STATE_BOUND ) return UnlockAndMaybeComplete - ( FCB, STATUS_UNSUCCESSFUL, Irp, 0, NULL, FALSE ); + ( FCB, STATUS_UNSUCCESSFUL, Irp, 0, NULL ); if( !(RecvReq = LockRequest( Irp, IrpSp )) ) return UnlockAndMaybeComplete - ( FCB, STATUS_NO_MEMORY, Irp, 0, NULL, FALSE ); + ( FCB, STATUS_NO_MEMORY, Irp, 0, NULL ); AFD_DbgPrint(MID_TRACE,("Recv flags %x\n", RecvReq->AfdFlags)); RecvReq->BufferArray = LockBuffers( RecvReq->BufferArray, - RecvReq->BufferCount, + RecvReq->BufferCount, RecvReq->Address, RecvReq->AddressLength, TRUE, TRUE ); if( !RecvReq->BufferArray ) { /* access violation in userspace */ - return UnlockAndMaybeComplete - ( FCB, STATUS_ACCESS_VIOLATION, Irp, 0, NULL, FALSE ); + return UnlockAndMaybeComplete + ( FCB, STATUS_ACCESS_VIOLATION, Irp, 0, NULL ); } if( !IsListEmpty( &FCB->DatagramList ) ) { @@ -600,8 +602,10 @@ AfdPacketSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp, PollReeval( FCB->DeviceExt, FCB->FileObject ); + UnlockBuffers( RecvReq->BufferArray, RecvReq->BufferCount, TRUE ); + return UnlockAndMaybeComplete - ( FCB, Status, Irp, RecvReq->BufferArray[0].len, NULL, TRUE ); + ( FCB, Status, Irp, Irp->IoStatus.Information, NULL ); } else { Status = SatisfyPacketRecvRequest ( FCB, Irp, DatagramRecv, @@ -614,14 +618,16 @@ AfdPacketSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp, PollReeval( FCB->DeviceExt, FCB->FileObject ); + UnlockBuffers( RecvReq->BufferArray, RecvReq->BufferCount, TRUE ); + return UnlockAndMaybeComplete - ( FCB, Status, Irp, Irp->IoStatus.Information, NULL, TRUE ); + ( FCB, Status, Irp, Irp->IoStatus.Information, NULL ); } } else if( RecvReq->AfdFlags & AFD_IMMEDIATE ) { AFD_DbgPrint(MID_TRACE,("Nonblocking\n")); Status = STATUS_CANT_WAIT; PollReeval( FCB->DeviceExt, FCB->FileObject ); - return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL, TRUE ); + return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); } else { PollReeval( FCB->DeviceExt, FCB->FileObject ); return LeaveIrpUntilLater( FCB, Irp, FUNCTION_RECV ); diff --git a/reactos/drivers/network/afd/afd/select.c b/reactos/drivers/network/afd/afd/select.c index 6d506bf4b01..1888340cd3d 100644 --- a/reactos/drivers/network/afd/afd/select.c +++ b/reactos/drivers/network/afd/afd/select.c @@ -85,6 +85,7 @@ static VOID SignalSocket( PollReq->Handles[i].Status)); } UnlockHandles( AFD_HANDLES(PollReq), PollReq->HandleCount ); + if( Irp->MdlAddress ) UnlockRequest( Irp, IoGetCurrentIrpStackLocation( Irp ) ); AFD_DbgPrint(MID_TRACE,("Completing\n")); IoCompleteRequest( Irp, IO_NETWORK_INCREMENT ); AFD_DbgPrint(MID_TRACE,("Done\n")); @@ -262,6 +263,8 @@ AfdSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status)); + Irp->IoStatus.Status = Status; + return Status; } @@ -276,14 +279,14 @@ AfdEventSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp, if ( !EventSelectInfo ) { return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp, - 0, NULL, FALSE ); + 0, NULL ); } AFD_DbgPrint(MID_TRACE,("Called (Event %x Triggers %x)\n", EventSelectInfo->EventObject, EventSelectInfo->Events)); if( !SocketAcquireStateLock( FCB ) ) { - return LostSocket( Irp, TRUE ); + return LostSocket( Irp ); } FCB->EventSelectTriggers = FCB->EventsFired = 0; @@ -309,7 +312,7 @@ AfdEventSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status)); return UnlockAndMaybeComplete( FCB, STATUS_SUCCESS, Irp, - 0, NULL, TRUE ); + 0, NULL ); } NTSTATUS STDCALL @@ -324,18 +327,18 @@ AfdEnumEvents( PDEVICE_OBJECT DeviceObject, PIRP Irp, if ( !EnumReq ) { return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp, - 0, NULL, FALSE ); + 0, NULL ); } if( !SocketAcquireStateLock( FCB ) ) { - return LostSocket( Irp, TRUE ); + return LostSocket( Irp ); } EnumReq->PollEvents = FCB->PollState; RtlZeroMemory( EnumReq->EventStatus, sizeof(EnumReq->EventStatus) ); return UnlockAndMaybeComplete( FCB, STATUS_SUCCESS, Irp, - 0, NULL, TRUE ); + 0, NULL ); } /* * * NOTE ALWAYS CALLED AT DISPATCH_LEVEL * * */ @@ -389,6 +392,11 @@ VOID PollReeval( PAFD_DEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject ) { /* Take care of any event select signalling */ FCB = (PAFD_FCB)FileObject->FsContext; + if( !FCB ) { + KeReleaseSpinLock( &DeviceExt->Lock, OldIrql ); + return; + } + /* Not sure if i can do this at DISPATCH_LEVEL ... try it at passive */ AFD_DbgPrint(MID_TRACE,("Current State: %x, Events Fired: %x, " "Select Triggers %x\n", @@ -399,11 +407,6 @@ VOID PollReeval( PAFD_DEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject ) { EventSelect = FCB->EventSelect; } - if( !FCB ) { - KeReleaseSpinLock( &DeviceExt->Lock, OldIrql ); - return; - } - /* Now signal normal select irps */ ThePollEnt = DeviceExt->Polls.Flink; diff --git a/reactos/drivers/network/afd/afd/tdi.c b/reactos/drivers/network/afd/afd/tdi.c index d998fabd0db..a80452d2284 100644 --- a/reactos/drivers/network/afd/afd/tdi.c +++ b/reactos/drivers/network/afd/afd/tdi.c @@ -291,9 +291,18 @@ NTSTATUS TdiConnect( AFD_DbgPrint(MAX_TRACE, ("Called\n")); - assert(ConnectionObject); + if (!ConnectionObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad connection object.\n")); + *Irp = NULL; + return STATUS_INVALID_PARAMETER; + } DeviceObject = IoGetRelatedDeviceObject(ConnectionObject); + if (!DeviceObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n")); + *Irp = NULL; + return STATUS_INVALID_PARAMETER; + } *Irp = TdiBuildInternalDeviceControlIrp(TDI_CONNECT, /* Sub function */ DeviceObject, /* Device object */ @@ -340,9 +349,16 @@ NTSTATUS TdiAssociateAddressFile( AFD_DbgPrint(MAX_TRACE, ("Called. AddressHandle (0x%X) ConnectionObject (0x%X)\n", AddressHandle, ConnectionObject)); - assert(ConnectionObject); + if (!ConnectionObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad connection object.\n")); + return STATUS_INVALID_PARAMETER; + } DeviceObject = IoGetRelatedDeviceObject(ConnectionObject); + if (!DeviceObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n")); + return STATUS_INVALID_PARAMETER; + } KeInitializeEvent(&Event, NotificationEvent, FALSE); @@ -390,7 +406,18 @@ NTSTATUS TdiListen AFD_DbgPrint(MAX_TRACE, ("Called\n")); + if (!ConnectionObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad connection object.\n")); + *Irp = NULL; + return STATUS_INVALID_PARAMETER; + } + DeviceObject = IoGetRelatedDeviceObject(ConnectionObject); + if (!DeviceObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n")); + *Irp = NULL; + return STATUS_INVALID_PARAMETER; + } Status = TdiBuildNullConnectionInfo(RequestConnectionInfo, TDI_ADDRESS_TYPE_IP); @@ -449,9 +476,16 @@ NTSTATUS TdiSetEventHandler( AFD_DbgPrint(MAX_TRACE, ("Called\n")); - assert(FileObject); + if (!FileObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad file object.\n")); + return STATUS_INVALID_PARAMETER; + } DeviceObject = IoGetRelatedDeviceObject(FileObject); + if (!DeviceObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n")); + return STATUS_INVALID_PARAMETER; + } KeInitializeEvent(&Event, NotificationEvent, FALSE); @@ -507,7 +541,16 @@ NTSTATUS TdiQueryDeviceControl( KEVENT Event; PIRP Irp; + if (!FileObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad file object.\n")); + return STATUS_INVALID_PARAMETER; + } + DeviceObject = IoGetRelatedDeviceObject(FileObject); + if (!DeviceObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n")); + return STATUS_INVALID_PARAMETER; + } KeInitializeEvent(&Event, NotificationEvent, FALSE); @@ -552,7 +595,16 @@ NTSTATUS TdiQueryInformation( KEVENT Event; PIRP Irp; + if (!FileObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad file object.\n")); + return STATUS_INVALID_PARAMETER; + } + DeviceObject = IoGetRelatedDeviceObject(FileObject); + if (!DeviceObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n")); + return STATUS_INVALID_PARAMETER; + } KeInitializeEvent(&Event, NotificationEvent, FALSE); @@ -579,7 +631,6 @@ NTSTATUS TdiQueryInformation( return Status; } -#if 0 NTSTATUS TdiQueryInformationEx( PFILE_OBJECT FileObject, ULONG Entity, @@ -755,7 +806,6 @@ NTSTATUS TdiQueryAddress( return Status; } -#endif NTSTATUS TdiSend ( PIRP *Irp, @@ -771,9 +821,16 @@ NTSTATUS TdiSend NTSTATUS Status = STATUS_SUCCESS; PMDL Mdl; + if (!TransportObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad transport object.\n")); + *Irp = NULL; + return STATUS_INVALID_PARAMETER; + } + DeviceObject = IoGetRelatedDeviceObject(TransportObject); if (!DeviceObject) { AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n")); + *Irp = NULL; return STATUS_INVALID_PARAMETER; } @@ -799,6 +856,7 @@ NTSTATUS TdiSend if (!Mdl) { AFD_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); IoFreeIrp(*Irp); + *Irp = NULL; return STATUS_INSUFFICIENT_RESOURCES; } @@ -806,15 +864,12 @@ NTSTATUS TdiSend MmProbeAndLockPages(Mdl, KernelMode, IoModifyAccess); } _SEH_HANDLE { AFD_DbgPrint(MIN_TRACE, ("MmProbeAndLockPages() failed.\n")); + IoFreeMdl(Mdl); IoFreeIrp(*Irp); - Status = STATUS_INSUFFICIENT_RESOURCES; + *Irp = NULL; + _SEH_YIELD(return STATUS_INSUFFICIENT_RESOURCES); } _SEH_END; - if( !NT_SUCCESS(Status) ) { - IoFreeIrp(*Irp); - return Status; - } - AFD_DbgPrint(MID_TRACE,("AFD>>> Got an MDL: %x\n", Mdl)); TdiBuildSend(*Irp, /* I/O Request Packet */ @@ -847,9 +902,16 @@ NTSTATUS TdiReceive( PDEVICE_OBJECT DeviceObject; PMDL Mdl; + if (!TransportObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad transport object.\n")); + *Irp = NULL; + return STATUS_INVALID_PARAMETER; + } + DeviceObject = IoGetRelatedDeviceObject(TransportObject); if (!DeviceObject) { AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n")); + *Irp = NULL; return STATUS_INVALID_PARAMETER; } @@ -875,6 +937,7 @@ NTSTATUS TdiReceive( if (!Mdl) { AFD_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); IoFreeIrp(*Irp); + *Irp = NULL; return STATUS_INSUFFICIENT_RESOURCES; } @@ -884,15 +947,12 @@ NTSTATUS TdiReceive( AFD_DbgPrint(MIN_TRACE, ("probe and lock done\n")); } _SEH_HANDLE { AFD_DbgPrint(MIN_TRACE, ("MmProbeAndLockPages() failed.\n")); + IoFreeMdl(Mdl); IoFreeIrp(*Irp); - Status = STATUS_INSUFFICIENT_RESOURCES; + *Irp = NULL; + _SEH_YIELD(return STATUS_INSUFFICIENT_RESOURCES); } _SEH_END; - if( !NT_SUCCESS(Status) ) { - IoFreeIrp(*Irp); - return Status; - } - AFD_DbgPrint(MID_TRACE,("AFD>>> Got an MDL: %x\n", Mdl)); TdiBuildReceive(*Irp, /* I/O Request Packet */ @@ -942,9 +1002,16 @@ NTSTATUS TdiReceiveDatagram( NTSTATUS Status; PMDL Mdl; + if (!TransportObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad tranport object.\n")); + *Irp = NULL; + return STATUS_INVALID_PARAMETER; + } + DeviceObject = IoGetRelatedDeviceObject(TransportObject); if (!DeviceObject) { AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n")); + *Irp = NULL; return STATUS_INVALID_PARAMETER; } @@ -970,6 +1037,7 @@ NTSTATUS TdiReceiveDatagram( if (!Mdl) { AFD_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); IoFreeIrp(*Irp); + *Irp = NULL; return STATUS_INSUFFICIENT_RESOURCES; } @@ -977,7 +1045,9 @@ NTSTATUS TdiReceiveDatagram( MmProbeAndLockPages(Mdl, KernelMode, IoModifyAccess); } _SEH_HANDLE { AFD_DbgPrint(MIN_TRACE, ("MmProbeAndLockPages() failed.\n")); + IoFreeMdl(Mdl); IoFreeIrp(*Irp); + *Irp = NULL; _SEH_YIELD(return STATUS_INSUFFICIENT_RESOURCES); } _SEH_END; @@ -1028,11 +1098,18 @@ NTSTATUS TdiSendDatagram( NTSTATUS Status; PMDL Mdl; + if (!TransportObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad transport object.\n")); + *Irp = NULL; + return STATUS_INVALID_PARAMETER; + } + AFD_DbgPrint(MID_TRACE,("Called(TransportObject %x)\n", TransportObject)); DeviceObject = IoGetRelatedDeviceObject(TransportObject); if (!DeviceObject) { AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n")); + *Irp = NULL; return STATUS_INVALID_PARAMETER; } @@ -1059,6 +1136,7 @@ NTSTATUS TdiSendDatagram( if (!Mdl) { AFD_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); IoFreeIrp(*Irp); + *Irp = NULL; return STATUS_INSUFFICIENT_RESOURCES; } @@ -1066,7 +1144,9 @@ NTSTATUS TdiSendDatagram( MmProbeAndLockPages(Mdl, KernelMode, IoModifyAccess); } _SEH_HANDLE { AFD_DbgPrint(MIN_TRACE, ("MmProbeAndLockPages() failed.\n")); + IoFreeMdl(Mdl); IoFreeIrp(*Irp); + *Irp = NULL; _SEH_YIELD(return STATUS_INSUFFICIENT_RESOURCES); } _SEH_END; @@ -1103,10 +1183,13 @@ NTSTATUS TdiDisconnect( KEVENT Event; PIRP Irp; - DeviceObject = IoGetRelatedDeviceObject(TransportObject); - KeInitializeEvent(&Event, NotificationEvent, FALSE); + if (!TransportObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad transport object.\n")); + return STATUS_INVALID_PARAMETER; + } + AFD_DbgPrint(MID_TRACE,("Called(TransportObject %x)\n", TransportObject)); DeviceObject = IoGetRelatedDeviceObject(TransportObject); diff --git a/reactos/drivers/network/afd/afd/tdiconn.c b/reactos/drivers/network/afd/afd/tdiconn.c index 97dafd491ab..392adc8c885 100644 --- a/reactos/drivers/network/afd/afd/tdiconn.c +++ b/reactos/drivers/network/afd/afd/tdiconn.c @@ -8,6 +8,7 @@ * 20040708 Created */ #include +#include #include "debug.h" #include "tdiconn.h" @@ -126,9 +127,11 @@ NTSTATUS TdiBuildNullConnectionInfo Status = TdiBuildNullConnectionInfoInPlace( ConnInfo, Type ); - if (!NT_SUCCESS(Status)) + if (!NT_SUCCESS(Status)) { ExFreePool( ConnInfo ); - else + *ConnectionInfo = NULL; + return Status; + } else *ConnectionInfo = ConnInfo; ConnInfo->RemoteAddress = (PTA_ADDRESS)&ConnInfo[1]; @@ -144,9 +147,13 @@ TdiBuildConnectionInfoInPlace PTRANSPORT_ADDRESS Address ) { NTSTATUS Status = STATUS_SUCCESS; - RtlCopyMemory( ConnectionInfo->RemoteAddress, - Address, - ConnectionInfo->RemoteAddressLength ); + _SEH_TRY { + RtlCopyMemory( ConnectionInfo->RemoteAddress, + Address, + ConnectionInfo->RemoteAddressLength ); + } _SEH_HANDLE { + Status = _SEH_GetExceptionCode(); + } _SEH_END; return Status; } diff --git a/reactos/drivers/network/afd/afd/write.c b/reactos/drivers/network/afd/afd/write.c index 19407d85169..c2341e66faf 100644 --- a/reactos/drivers/network/afd/afd/write.c +++ b/reactos/drivers/network/afd/afd/write.c @@ -40,11 +40,6 @@ static NTSTATUS NTAPI SendComplete ASSERT_IRQL(APC_LEVEL); - if (Irp->Cancel) { - FCB->ReceiveIrp.InFlightRequest = NULL; - return STATUS_SUCCESS; - } - if( !SocketAcquireStateLock( FCB ) ) return Status; FCB->SendIrp.InFlightRequest = NULL; @@ -74,6 +69,8 @@ static NTSTATUS NTAPI SendComplete NextIrp->IoStatus.Status = Status; NextIrp->IoStatus.Information = 0; + if ( NextIrp->MdlAddress ) UnlockRequest( NextIrp, IoGetCurrentIrpStackLocation( NextIrp ) ); + IoCompleteRequest( NextIrp, IO_NETWORK_INCREMENT ); } @@ -88,8 +85,7 @@ static NTSTATUS NTAPI SendComplete FCB->Send.BytesUsed -= Irp->IoStatus.Information; if( !FCB->Send.BytesUsed && - !IsListEmpty( &FCB->PendingIrpList[FUNCTION_SEND] ) && - NT_SUCCESS(Status) ) { + !IsListEmpty( &FCB->PendingIrpList[FUNCTION_SEND] ) ) { NextIrpEntry = RemoveHeadList(&FCB->PendingIrpList[FUNCTION_SEND]); NextIrp = @@ -151,7 +147,7 @@ static NTSTATUS NTAPI SendComplete AFD_DbgPrint(MID_TRACE,("Dismissing request: %x\n", Status)); return UnlockAndMaybeComplete( FCB, Status, NextIrp, TotalBytesCopied, - NULL, TRUE ); + NULL ); } else if( NextIrp ) { AFD_DbgPrint(MID_TRACE,("Could not do any more with Irp %x\n", NextIrp)); @@ -174,11 +170,6 @@ static NTSTATUS NTAPI PacketSocketSendComplete Irp->IoStatus.Status, Irp->IoStatus.Information)); - if (Irp->Cancel) { - FCB->ReceiveIrp.InFlightRequest = NULL; - return STATUS_SUCCESS; - } - /* It's ok if the FCB already died */ if( !SocketAcquireStateLock( FCB ) ) return STATUS_SUCCESS; @@ -211,7 +202,7 @@ AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB)); - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); FCB->EventsFired &= ~AFD_EVENT_SEND; @@ -223,11 +214,11 @@ AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, /* Check that the socket is bound */ if( FCB->State != SOCKET_STATE_BOUND ) return UnlockAndMaybeComplete( FCB, STATUS_UNSUCCESSFUL, Irp, - 0, NULL, FALSE ); + 0, NULL ); if( !(SendReq = LockRequest( Irp, IrpSp )) ) return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp, 0, - NULL, FALSE ); + NULL ); /* Must lock buffers before handing off user data */ SendReq->BufferArray = LockBuffers( SendReq->BufferArray, @@ -235,23 +226,30 @@ AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, NULL, NULL, FALSE, FALSE ); + if( !SendReq->BufferArray ) { + return UnlockAndMaybeComplete( FCB, STATUS_ACCESS_VIOLATION, + Irp, 0, NULL ); + } + TdiBuildConnectionInfo( &TargetAddress, FCB->RemoteAddress ); - SocketCalloutEnter( FCB ); + if( TargetAddress ) { + SocketCalloutEnter( FCB ); - Status = TdiSendDatagram - ( &FCB->SendIrp.InFlightRequest, - FCB->AddressFile.Object, - SendReq->BufferArray[0].buf, - SendReq->BufferArray[0].len, - TargetAddress, - &FCB->SendIrp.Iosb, - PacketSocketSendComplete, - FCB ); + Status = TdiSendDatagram + ( &FCB->SendIrp.InFlightRequest, + FCB->AddressFile.Object, + SendReq->BufferArray[0].buf, + SendReq->BufferArray[0].len, + TargetAddress, + &FCB->SendIrp.Iosb, + PacketSocketSendComplete, + FCB ); - SocketCalloutLeave( FCB ); + SocketCalloutLeave( FCB ); - ExFreePool( TargetAddress ); + ExFreePool( TargetAddress ); + } else Status = STATUS_NO_MEMORY; if( Status == STATUS_PENDING ) Status = STATUS_SUCCESS; @@ -259,12 +257,12 @@ AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, return UnlockAndMaybeComplete( FCB, Status, Irp, SendReq->BufferArray[0].len, - NULL, TRUE ); + NULL ); } if( !(SendReq = LockRequest( Irp, IrpSp )) ) return UnlockAndMaybeComplete - ( FCB, STATUS_NO_MEMORY, Irp, TotalBytesCopied, NULL, FALSE ); + ( FCB, STATUS_NO_MEMORY, Irp, TotalBytesCopied, NULL ); AFD_DbgPrint(MID_TRACE,("Socket state %d\n", FCB->State)); @@ -272,7 +270,7 @@ AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, if( SendReq->AfdFlags & AFD_IMMEDIATE ) { AFD_DbgPrint(MID_TRACE,("Nonblocking\n")); return UnlockAndMaybeComplete - ( FCB, STATUS_CANT_WAIT, Irp, 0, NULL, TRUE ); + ( FCB, STATUS_CANT_WAIT, Irp, 0, NULL ); } else { AFD_DbgPrint(MID_TRACE,("Queuing request\n")); return LeaveIrpUntilLater( FCB, Irp, FUNCTION_SEND ); @@ -287,6 +285,11 @@ AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, NULL, NULL, FALSE, FALSE ); + if( !SendReq->BufferArray ) { + return UnlockAndMaybeComplete( FCB, STATUS_ACCESS_VIOLATION, + Irp, 0, NULL ); + } + AFD_DbgPrint(MID_TRACE,("FCB->Send.BytesUsed = %d\n", FCB->Send.BytesUsed)); @@ -323,7 +326,7 @@ AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Empty send\n")); return UnlockAndMaybeComplete - ( FCB, Status, Irp, TotalBytesCopied, NULL, TRUE ); + ( FCB, Status, Irp, TotalBytesCopied, NULL ); } AFD_DbgPrint(MID_TRACE,("Completed %d bytes\n", TotalBytesCopied)); @@ -353,14 +356,14 @@ AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, Status, TotalBytesCopied)); return UnlockAndMaybeComplete - ( FCB, Status, Irp, TotalBytesCopied, NULL, TRUE ); + ( FCB, Status, Irp, TotalBytesCopied, NULL ); } } if( SendReq->AfdFlags & AFD_IMMEDIATE ) { AFD_DbgPrint(MID_TRACE,("Nonblocking\n")); return UnlockAndMaybeComplete - ( FCB, STATUS_CANT_WAIT, Irp, 0, NULL, TRUE ); + ( FCB, STATUS_CANT_WAIT, Irp, 0, NULL ); } else { AFD_DbgPrint(MID_TRACE,("Queuing request\n")); return LeaveIrpUntilLater( FCB, Irp, FUNCTION_SEND ); @@ -378,7 +381,7 @@ AfdPacketSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB)); - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); FCB->EventsFired &= ~AFD_EVENT_SEND; FCB->PollState &= ~AFD_EVENT_SEND; @@ -386,10 +389,10 @@ AfdPacketSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, /* Check that the socket is bound */ if( FCB->State != SOCKET_STATE_BOUND ) return UnlockAndMaybeComplete - ( FCB, STATUS_UNSUCCESSFUL, Irp, 0, NULL, FALSE ); + ( FCB, STATUS_UNSUCCESSFUL, Irp, 0, NULL ); if( !(SendReq = LockRequest( Irp, IrpSp )) ) return UnlockAndMaybeComplete - ( FCB, STATUS_NO_MEMORY, Irp, 0, NULL, FALSE ); + ( FCB, STATUS_NO_MEMORY, Irp, 0, NULL ); AFD_DbgPrint (MID_TRACE,("RemoteAddress #%d Type %d\n", @@ -426,6 +429,6 @@ AfdPacketSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Dismissing request: %x\n", Status)); return UnlockAndMaybeComplete - ( FCB, Status, Irp, SendReq->BufferArray[0].len, NULL, TRUE ); + ( FCB, Status, Irp, SendReq->BufferArray[0].len, NULL ); } diff --git a/reactos/drivers/network/afd/include/afd.h b/reactos/drivers/network/afd/include/afd.h index 02a5fa11b60..e77d64bf598 100644 --- a/reactos/drivers/network/afd/include/afd.h +++ b/reactos/drivers/network/afd/include/afd.h @@ -28,6 +28,55 @@ #define MIN(x,y) (((x)<(y))?(x):(y)) #endif +#define IOCTL_TCP_QUERY_INFORMATION_EX \ + CTL_CODE(FILE_DEVICE_NETWORK, 0, METHOD_NEITHER, FILE_ANY_ACCESS) + +#define TL_INSTANCE 0 +#define IP_MIB_STATS_ID 1 +#define IP_MIB_ADDRTABLE_ENTRY_ID 0x102 + +typedef struct IPSNMP_INFO { + ULONG Forwarding; + ULONG DefaultTTL; + ULONG InReceives; + ULONG InHdrErrors; + ULONG InAddrErrors; + ULONG ForwDatagrams; + ULONG InUnknownProtos; + ULONG InDiscards; + ULONG InDelivers; + ULONG OutRequests; + ULONG RoutingDiscards; + ULONG OutDiscards; + ULONG OutNoRoutes; + ULONG ReasmTimeout; + ULONG ReasmReqds; + ULONG ReasmOks; + ULONG ReasmFails; + ULONG FragOks; + ULONG FragFails; + ULONG FragCreates; + ULONG NumIf; + ULONG NumAddr; + ULONG NumRoutes; +} IPSNMP_INFO, *PIPSNMP_INFO; + +typedef struct IPADDR_ENTRY { + ULONG Addr; + ULONG Index; + ULONG Mask; + ULONG BcastAddr; + ULONG ReasmSize; + USHORT Context; + USHORT Pad; +} IPADDR_ENTRY, *PIPADDR_ENTRY; + +#define DN2H(dw) \ + ((((dw) & 0xFF000000L) >> 24) | \ + (((dw) & 0x00FF0000L) >> 8) | \ + (((dw) & 0x0000FF00L) << 8) | \ + (((dw) & 0x000000FFL) << 24)) + #define SOCKET_STATE_INVALID_TRANSITION ((DWORD)-1) #define SOCKET_STATE_CREATED 0 #define SOCKET_STATE_BOUND 1 @@ -206,10 +255,9 @@ UINT SocketAcquireStateLock( PAFD_FCB FCB ); NTSTATUS NTAPI UnlockAndMaybeComplete ( PAFD_FCB FCB, NTSTATUS Status, PIRP Irp, UINT Information, - PIO_COMPLETION_ROUTINE Completion, - BOOL ShouldUnlockIrp ); + PIO_COMPLETION_ROUTINE Completion ); VOID SocketStateUnlock( PAFD_FCB FCB ); -NTSTATUS LostSocket( PIRP Irp, BOOL ShouldUnlockIrp ); +NTSTATUS LostSocket( PIRP Irp ); PAFD_HANDLE LockHandles( PAFD_HANDLE HandleArray, UINT HandleCount ); VOID UnlockHandles( PAFD_HANDLE HandleArray, UINT HandleCount ); PVOID LockRequest( PIRP Irp, PIO_STACK_LOCATION IrpSp ); diff --git a/reactos/drivers/network/tcpip/datalink/lan.c b/reactos/drivers/network/tcpip/datalink/lan.c index 94239036f99..a26e8d4e864 100644 --- a/reactos/drivers/network/tcpip/datalink/lan.c +++ b/reactos/drivers/network/tcpip/datalink/lan.c @@ -839,20 +839,25 @@ static NTSTATUS FindDeviceDescForAdapter( PUNICODE_STRING Name, ExAllocatePool(NonPagedPool, sizeof(KEY_BASIC_INFORMATION)); ULONG KbioLength = sizeof(KEY_BASIC_INFORMATION), ResultLength; + if( !Kbio ) return STATUS_INSUFFICIENT_RESOURCES; + RtlInitUnicodeString (&EnumKeyName, CCS_ROOT L"\\Control\\Class\\" TCPIP_GUID); Status = OpenRegistryKey( &EnumKeyName, &EnumKey ); - if( !NT_SUCCESS(Status) ) + if( !NT_SUCCESS(Status) ) { TI_DbgPrint(DEBUG_DATALINK,("Couldn't open Enum key %wZ: %x\n", &EnumKeyName, Status)); + ExFreePool( Kbio ); + return Status; + } for( i = 0; NT_SUCCESS(Status); i++ ) { Status = ZwEnumerateKey( EnumKey, i, KeyBasicInformation, Kbio, KbioLength, &ResultLength ); - if( Status == STATUS_BUFFER_TOO_SMALL ) { + if( Status == STATUS_BUFFER_TOO_SMALL || Status == STATUS_BUFFER_OVERFLOW ) { ExFreePool( Kbio ); KbioLength = ResultLength; Kbio = ExAllocatePool( NonPagedPool, KbioLength ); @@ -860,8 +865,12 @@ static NTSTATUS FindDeviceDescForAdapter( PUNICODE_STRING Name, Status = ZwEnumerateKey( EnumKey, i, KeyBasicInformation, Kbio, KbioLength, &ResultLength ); - TI_DbgPrint(DEBUG_DATALINK,("Couldn't enum key child %d\n", i)); - return Status; + if( !NT_SUCCESS(Status) ) { + TI_DbgPrint(DEBUG_DATALINK,("Couldn't enum key child %d\n", i)); + NtClose( EnumKey ); + ExFreePool( Kbio ); + return Status; + } } if( NT_SUCCESS(Status) ) { @@ -873,6 +882,7 @@ static NTSTATUS FindDeviceDescForAdapter( PUNICODE_STRING Name, ( &EnumKeyName, &TargetKeyName, Name, DeviceDesc ); if( NT_SUCCESS(Status) ) { NtClose( EnumKey ); + ExFreePool( Kbio ); return Status; } else Status = STATUS_SUCCESS; } @@ -881,6 +891,7 @@ static NTSTATUS FindDeviceDescForAdapter( PUNICODE_STRING Name, RtlInitUnicodeString( DeviceDesc, L"" ); AppendUnicodeString( DeviceDesc, &TargetKeyName, FALSE ); NtClose( EnumKey ); + ExFreePool( Kbio ); return STATUS_UNSUCCESSFUL; } diff --git a/reactos/drivers/network/tcpip/tcpip/dispatch.c b/reactos/drivers/network/tcpip/tcpip/dispatch.c index 59107bb8cfd..94232ca7b1b 100644 --- a/reactos/drivers/network/tcpip/tcpip/dispatch.c +++ b/reactos/drivers/network/tcpip/tcpip/dispatch.c @@ -1022,9 +1022,6 @@ NTSTATUS DispTdiSendDatagram( if (Status != STATUS_PENDING) { DispDataRequestComplete(Irp, Status, Irp->IoStatus.Information); - /* Return STATUS_PENDING because DispPrepareIrpForCancel - marks Irp as pending */ - Status = STATUS_PENDING; } else IoMarkIrpPending( Irp ); } diff --git a/reactos/drivers/network/tcpip/tcpip/main.c b/reactos/drivers/network/tcpip/tcpip/main.c index 9e795c15c2b..19c5a67a681 100644 --- a/reactos/drivers/network/tcpip/tcpip/main.c +++ b/reactos/drivers/network/tcpip/tcpip/main.c @@ -518,6 +518,8 @@ TiDispatchInternal( if( Complete ) IRPFinish( Irp, Status ); + else + Irp->IoStatus.Status = Status; return Status; } diff --git a/reactos/drivers/network/tcpip/tcpip/pool.c b/reactos/drivers/network/tcpip/tcpip/pool.c index e1ff8e2c38e..9ded1ac6639 100644 --- a/reactos/drivers/network/tcpip/tcpip/pool.c +++ b/reactos/drivers/network/tcpip/tcpip/pool.c @@ -48,11 +48,20 @@ VOID PoolFreeBuffer( } PVOID TcpipAllocateFromNPagedLookasideList( PNPAGED_LOOKASIDE_LIST List ) { - return ExAllocateFromNPagedLookasideList( List ); + PVOID Buffer; + + Buffer = ExAllocateFromNPagedLookasideList( List ); + + TI_DbgPrint(DEBUG_MEMORY, ("Allocated from Nonpaged Lookaside List at (0x%X).\n", Buffer)); + + return Buffer; } VOID TcpipFreeToNPagedLookasideList( PNPAGED_LOOKASIDE_LIST List, PVOID Thing ) { + + TI_DbgPrint(DEBUG_MEMORY, ("Freeing buffer (0x%X) to Nonpaged Lookaside List.\n", Thing)); + ExFreeToNPagedLookasideList( List, Thing ); } diff --git a/reactos/drivers/storage/scsiport/scsiport.c b/reactos/drivers/storage/scsiport/scsiport.c index 2f63cb5ee16..ca829e96f2f 100644 --- a/reactos/drivers/storage/scsiport/scsiport.c +++ b/reactos/drivers/storage/scsiport/scsiport.c @@ -4405,8 +4405,7 @@ SpiCompletionRoutine(PDEVICE_OBJECT DeviceObject, if (Irp->MdlAddress != NULL) { - /* We don't need to unlock this MDL because the request could - * only have come from dispatch level */ + MmUnlockPages(Irp->MdlAddress); IoFreeMdl(Irp->MdlAddress); Irp->MdlAddress = NULL; } diff --git a/reactos/drivers/video/videoprt/dma.c b/reactos/drivers/video/videoprt/dma.c index ffc19d386aa..9986050cb61 100644 --- a/reactos/drivers/video/videoprt/dma.c +++ b/reactos/drivers/video/videoprt/dma.c @@ -1,143 +1,274 @@ /* - * VideoPort driver - * - * Copyright (C) 2002, 2003, 2004 ReactOS Team - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; see the file COPYING.LIB. - * If not, write to the Free Software Foundation, - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * + * PROJECT: ReactOS Videoport + * LICENSE: GPL - See COPYING in the top level directory + * FILE: drivers/video/videoprt/dma.c + * PURPOSE: Videoport Direct Memory Access Support + * PROGRAMMERS: ... */ -#include "videoprt.h" +/* INCLUDES ******************************************************************/ + +#include +#define NDEBUG +#include /* PUBLIC FUNCTIONS ***********************************************************/ /* * @implemented */ - -PVOID NTAPI -VideoPortAllocateCommonBuffer( - IN PVOID HwDeviceExtension, - IN PVP_DMA_ADAPTER VpDmaAdapter, - IN ULONG DesiredLength, - OUT PPHYSICAL_ADDRESS LogicalAddress, - IN BOOLEAN CacheEnabled, - PVOID Reserved) +PVOID +NTAPI +VideoPortAllocateCommonBuffer(IN PVOID HwDeviceExtension, + IN PVP_DMA_ADAPTER VpDmaAdapter, + IN ULONG DesiredLength, + OUT PPHYSICAL_ADDRESS LogicalAddress, + IN BOOLEAN CacheEnabled, + PVOID Reserved) { - return HalAllocateCommonBuffer( - (PADAPTER_OBJECT)VpDmaAdapter, - DesiredLength, - LogicalAddress, - CacheEnabled); + /* Forward to HAL */ + return HalAllocateCommonBuffer((PADAPTER_OBJECT)VpDmaAdapter, + DesiredLength, + LogicalAddress, + CacheEnabled); } /* * @implemented */ - -VOID NTAPI -VideoPortReleaseCommonBuffer( - IN PVOID HwDeviceExtension, - IN PVP_DMA_ADAPTER VpDmaAdapter, - IN ULONG Length, - IN PHYSICAL_ADDRESS LogicalAddress, - IN PVOID VirtualAddress, - IN BOOLEAN CacheEnabled) +VOID +NTAPI +VideoPortReleaseCommonBuffer(IN PVOID HwDeviceExtension, + IN PVP_DMA_ADAPTER VpDmaAdapter, + IN ULONG Length, + IN PHYSICAL_ADDRESS LogicalAddress, + IN PVOID VirtualAddress, + IN BOOLEAN CacheEnabled) { - HalFreeCommonBuffer( - (PADAPTER_OBJECT)VpDmaAdapter, - Length, - LogicalAddress, - VirtualAddress, - CacheEnabled); + /* Forward to HAL */ + HalFreeCommonBuffer((PADAPTER_OBJECT)VpDmaAdapter, + Length, + LogicalAddress, + VirtualAddress, + CacheEnabled); } /* * @unimplemented */ - -VOID NTAPI -VideoPortPutDmaAdapter( - IN PVOID HwDeviceExtension, - IN PVP_DMA_ADAPTER VpDmaAdapter) +VOID +NTAPI +VideoPortPutDmaAdapter(IN PVOID HwDeviceExtension, + IN PVP_DMA_ADAPTER VpDmaAdapter) { UNIMPLEMENTED; } /* - * @unimplemented + * @implemented */ - -PVP_DMA_ADAPTER NTAPI -VideoPortGetDmaAdapter( - IN PVOID HwDeviceExtension, - IN PVP_DEVICE_DESCRIPTION VpDeviceExtension) +PVP_DMA_ADAPTER +NTAPI +VideoPortGetDmaAdapter(IN PVOID HwDeviceExtension, + IN PVP_DEVICE_DESCRIPTION VpDeviceExtension) { - DEVICE_DESCRIPTION DeviceDescription; - PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension; - ULONG NumberOfMapRegisters; - PVP_DMA_ADAPTER Adapter; + DEVICE_DESCRIPTION DeviceDescription; + PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension = VIDEO_PORT_GET_DEVICE_EXTENSION(HwDeviceExtension); + ULONG NumberOfMapRegisters; - DeviceExtension = VIDEO_PORT_GET_DEVICE_EXTENSION(HwDeviceExtension); + /* Zero the structure */ + RtlZeroMemory(&DeviceDescription, + sizeof(DEVICE_DESCRIPTION)); - TRACE_(VIDEOPRT, "VideoPortGetDmaAdapter\n"); + /* Initialize the structure */ + DeviceDescription.Version = DEVICE_DESCRIPTION_VERSION; + DeviceDescription.Master = TRUE /* ?? */; + DeviceDescription.DmaWidth = Width8Bits; + DeviceDescription.DmaSpeed = Compatible; - DeviceDescription.Version = DEVICE_DESCRIPTION_VERSION; - DeviceDescription.Master = TRUE /* ?? */; - DeviceDescription.ScatterGather = VpDeviceExtension->ScatterGather; - DeviceDescription.DemandMode = FALSE /* ?? */; - DeviceDescription.AutoInitialize = FALSE /* ?? */; - DeviceDescription.Dma32BitAddresses = VpDeviceExtension->Dma32BitAddresses; - DeviceDescription.IgnoreCount = FALSE /* ?? */; - DeviceDescription.Reserved1 = FALSE; - DeviceDescription.BusNumber = DeviceExtension->SystemIoBusNumber; - DeviceDescription.DmaChannel = 0 /* ?? */; - DeviceDescription.InterfaceType = DeviceExtension->AdapterInterfaceType; - DeviceDescription.DmaWidth = Width8Bits; - DeviceDescription.DmaSpeed = Compatible; - DeviceDescription.MaximumLength = VpDeviceExtension->MaximumLength; - DeviceDescription.DmaPort = 0; + /* Copy data from caller's device extension */ + DeviceDescription.ScatterGather = VpDeviceExtension->ScatterGather; + DeviceDescription.Dma32BitAddresses = VpDeviceExtension->Dma32BitAddresses; + DeviceDescription.Dma64BitAddresses = VpDeviceExtension->Dma64BitAddresses; + DeviceDescription.MaximumLength = VpDeviceExtension->MaximumLength; - Adapter = - (PVP_DMA_ADAPTER)HalGetAdapter(&DeviceDescription, &NumberOfMapRegisters); - INFO_(VIDEOPRT, "Adapter %p\n", Adapter); - return(Adapter); + /* Copy data from the internal device extension */ + DeviceDescription.BusNumber = DeviceExtension->SystemIoBusNumber; + DeviceDescription.InterfaceType = DeviceExtension->AdapterInterfaceType; + + return (PVP_DMA_ADAPTER)HalGetAdapter(&DeviceDescription, + &NumberOfMapRegisters); } /* * @implemented */ -VOID NTAPI -VideoPortFreeCommonBuffer( IN PVOID HwDeviceExtension, - IN ULONG Length, - IN PVOID VirtualAddress, - IN PHYSICAL_ADDRESS LogicalAddress, - IN BOOLEAN CacheEnabled) +VOID +NTAPI +VideoPortFreeCommonBuffer(IN PVOID HwDeviceExtension, + IN ULONG Length, + IN PVOID VirtualAddress, + IN PHYSICAL_ADDRESS LogicalAddress, + IN BOOLEAN CacheEnabled) { - DEVICE_DESCRIPTION DeviceDescription; - PVP_DMA_ADAPTER VpDmaAdapter; + DEVICE_DESCRIPTION DeviceDescription; + PVP_DMA_ADAPTER VpDmaAdapter; - VpDmaAdapter = VideoPortGetDmaAdapter( - HwDeviceExtension, - (PVP_DEVICE_DESCRIPTION)&DeviceDescription); - - HalFreeCommonBuffer( - (PADAPTER_OBJECT)VpDmaAdapter, - Length, - LogicalAddress, - VirtualAddress, - CacheEnabled); + /* FIXME: Broken code*/ + VpDmaAdapter = VideoPortGetDmaAdapter(HwDeviceExtension, + (PVP_DEVICE_DESCRIPTION)&DeviceDescription); + HalFreeCommonBuffer((PADAPTER_OBJECT)VpDmaAdapter, + Length, + LogicalAddress, + VirtualAddress, + CacheEnabled); +} + +/* + * @unimplemented + */ +PVOID +NTAPI +VideoPortGetCommonBuffer(IN PVOID HwDeviceExtension, + IN ULONG DesiredLength, + IN ULONG Alignment, + OUT PPHYSICAL_ADDRESS LogicalAddress, + OUT PULONG pActualLength, + IN BOOLEAN CacheEnabled) +{ + UNIMPLEMENTED; + return NULL; +} + +/* + * @implemented + */ +BOOLEAN +NTAPI +VideoPortUnmapDmaMemory( + PVOID HwDeviceExtension, + PVOID VirtualAddress, + HANDLE ProcessHandle, + PDMA BoardMemoryHandle) +{ + /* Deprecated */ + return FALSE; +} + +/* + * @implemented + */ +PDMA +NTAPI +VideoPortMapDmaMemory(IN PVOID HwDeviceExtension, + IN PVIDEO_REQUEST_PACKET pVrp, + IN PHYSICAL_ADDRESS BoardAddress, + IN PULONG Length, + IN PULONG InIoSpace, + IN PVOID MappedUserEvent, + IN PVOID DisplayDriverEvent, + IN OUT PVOID *VirtualAddress) +{ + /* Deprecated */ + return NULL; +} + +/* + * @implemented + */ +VOID +NTAPI +VideoPortSetDmaContext(IN PVOID HwDeviceExtension, + OUT PDMA pDma, + IN PVOID InstanceContext) +{ + /* Deprecated */ + return; +} + +/* + * @implemented + */ +BOOLEAN +NTAPI +VideoPortSignalDmaComplete(IN PVOID HwDeviceExtension, + IN PDMA pDmaHandle) +{ + /* Deprecated */ + return FALSE; +} + +/* + * @unimplemented + */ +VP_STATUS +NTAPI +VideoPortStartDma(IN PVOID HwDeviceExtension, + IN PVP_DMA_ADAPTER VpDmaAdapter, + IN PVOID Mdl, + IN ULONG Offset, + IN OUT PULONG pLength, + IN PEXECUTE_DMA ExecuteDmaRoutine, + IN PVOID Context, + IN BOOLEAN WriteToDevice) +{ + UNIMPLEMENTED; + + /* Lie and return success */ + return NO_ERROR; +} + +/* + * @implemented + */ +PVOID +NTAPI +VideoPortGetDmaContext(IN PVOID HwDeviceExtension, + IN PDMA pDma) +{ + /* Deprecated */ + return NULL; +} + +/* + * @implemented + */ +PDMA +NTAPI +VideoPortDoDma(IN PVOID HwDeviceExtension, + IN PDMA pDma, + IN DMA_FLAGS DmaFlags) +{ + /* Deprecated */ + return NULL; +} + +/* + * @unimplemented + */ +PDMA +NTAPI +VideoPortAssociateEventsWithDmaHandle(IN PVOID HwDeviceExtension, + IN OUT PVIDEO_REQUEST_PACKET pVrp, + IN PVOID MappedUserEvent, + IN PVOID DisplayDriverEvent) +{ + UNIMPLEMENTED; + return NULL; +} + +/* + * @unimplemented + */ +VP_STATUS +NTAPI +VideoPortCompleteDma(IN PVOID HwDeviceExtension, + IN PVP_DMA_ADAPTER VpDmaAdapter, + IN PVP_SCATTER_GATHER_LIST VpScatterGather, + IN BOOLEAN WriteToDevice) +{ + UNIMPLEMENTED; + + /* Lie and return success */ + return NO_ERROR; } diff --git a/reactos/drivers/video/videoprt/videoprt.def b/reactos/drivers/video/videoprt/videoprt.def deleted file mode 100644 index b0515ffd799..00000000000 --- a/reactos/drivers/video/videoprt/videoprt.def +++ /dev/null @@ -1,118 +0,0 @@ -; -; videoprt.def - export definition file for ReactOS -; -EXPORTS -VideoPortAcquireDeviceLock@4 -VideoPortAcquireSpinLock@12 -VideoPortAcquireSpinLockAtDpcLevel@8 -VideoPortAllocateBuffer@12 -VideoPortAllocateCommonBuffer@24 -VideoPortAllocateContiguousMemory -VideoPortAllocatePool@16 -;VideoPortAssociateEventsWithDmaHandle -VideoPortCheckForDeviceExistence@28 -VideoPortClearEvent@8 -VideoPortCompareMemory@12=NTOSKRNL.RtlCompareMemory -;VideoPortCompleteDma -VideoPortCreateEvent@16 -VideoPortCreateSecondaryDisplay@12 -VideoPortCreateSpinLock@8 -VideoPortDDCMonitorHelper@16 -VideoPortDebugPrint -VideoPortDeleteEvent@8 -VideoPortDeleteSpinLock@8 -VideoPortDisableInterrupt@4 -;VideoPortDoDma -VideoPortEnableInterrupt@4 -VideoPortEnumerateChildren@8 -;VideoPortFlushRegistry -VideoPortFreeCommonBuffer -VideoPortFreeDeviceBase@8 -VideoPortFreePool@8 -VideoPortGetAccessRanges@32 -VideoPortGetAgpServices@8 -VideoPortGetAssociatedDeviceExtension@4 -;VideoPortGetAssociatedDeviceID -VideoPortGetBusData@24 -;VideoPortGetBytesUsed -;VideoPortGetCommonBuffer -VideoPortGetCurrentIrql@0 -VideoPortGetDeviceBase@20 -VideoPortGetDeviceData@16 -VideoPortGetDmaAdapter@8 -;VideoPortGetDmaContext -;VideoPortGetMdl -VideoPortGetRegistryParameters@20 -VideoPortGetRomImage@16 -VideoPortGetVersion@8 -VideoPortGetVgaStatus@8 -VideoPortInitialize@16 -VideoPortInt10@8 -VideoPortInterlockedDecrement@4=NTOSKRNL.InterlockedDecrement -VideoPortInterlockedExchange@8=NTOSKRNL.InterlockedExchange -VideoPortInterlockedIncrement@4=NTOSKRNL.InterlockedIncrement -VideoPortLockBuffer@16 -;VideoPortLockPages -VideoPortLogError@16 -VideoPortMapBankedMemory@40 -;VideoPortMapDmaMemory -VideoPortMapMemory@24 -VideoPortMoveMemory@12=NTOSKRNL.RtlMoveMemory -VideoPortPutDmaAdapter@8 -VideoPortQueryPerformanceCounter@8 -VideoPortQueryServices@12 -VideoPortQuerySystemTime@4=NTOSKRNL.KeQuerySystemTime -VideoPortQueueDpc@12 -VideoPortReadPortUchar@4=HAL.READ_PORT_UCHAR -VideoPortReadPortUshort@4=HAL.READ_PORT_USHORT -VideoPortReadPortUlong@4=HAL.READ_PORT_ULONG -VideoPortReadPortBufferUchar@12=HAL.READ_PORT_BUFFER_UCHAR -VideoPortReadPortBufferUshort@12=HAL.READ_PORT_BUFFER_USHORT -VideoPortReadPortBufferUlong@12=HAL.READ_PORT_BUFFER_ULONG -VideoPortReadRegisterUchar@4=NTOSKRNL.READ_REGISTER_UCHAR -VideoPortReadRegisterUshort@4=NTOSKRNL.READ_REGISTER_USHORT -VideoPortReadRegisterUlong@4=NTOSKRNL.READ_REGISTER_ULONG -VideoPortReadRegisterBufferUchar@12=NTOSKRNL.READ_REGISTER_BUFFER_UCHAR -VideoPortReadRegisterBufferUshort@12=NTOSKRNL.READ_REGISTER_BUFFER_USHORT -VideoPortReadRegisterBufferUlong@12=NTOSKRNL.READ_REGISTER_BUFFER_ULONG -;VideoPortReadStateEvent -VideoPortRegisterBugcheckCallback@16 -VideoPortReleaseBuffer@8 -VideoPortReleaseCommonBuffer@28 -VideoPortReleaseDeviceLock@4 -VideoPortReleaseSpinLock@12 -VideoPortReleaseSpinLockFromDpcLevel@8 -VideoPortScanRom@16 -VideoPortSetBusData@24 -;VideoPortSetBytesUsed -;VideoPortSetDmaContext -VideoPortSetEvent@8 -VideoPortSetRegistryParameters@16 -VideoPortSetTrappedEmulatorPorts@12 -;VideoPortSignalDmaComplete -VideoPortStallExecution@4=HAL.KeStallExecutionProcessor -;VideoPortStartDma -VideoPortStartTimer@4 -VideoPortStopTimer@4 -VideoPortSynchronizeExecution@16 -VideoPortUnlockBuffer@8 -;VideoPortUnlockPages -;VideoPortUnmapDmaMemory -VideoPortUnmapMemory@12 -VideoPortVerifyAccessRanges@12 -VideoPortWaitForSingleObject@12 -VideoPortWritePortUchar@8=HAL.WRITE_PORT_UCHAR -VideoPortWritePortUshort@8=HAL.WRITE_PORT_USHORT -VideoPortWritePortUlong@8=HAL.WRITE_PORT_ULONG -VideoPortWritePortBufferUchar@12=HAL.WRITE_PORT_BUFFER_UCHAR -VideoPortWritePortBufferUshort@12=HAL.WRITE_PORT_BUFFER_USHORT -VideoPortWritePortBufferUlong@12=HAL.WRITE_PORT_BUFFER_ULONG -VideoPortWriteRegisterUchar@8=NTOSKRNL.WRITE_REGISTER_UCHAR -VideoPortWriteRegisterUshort@8=NTOSKRNL.WRITE_REGISTER_USHORT -VideoPortWriteRegisterUlong@8=NTOSKRNL.WRITE_REGISTER_ULONG -VideoPortWriteRegisterBufferUchar@12=NTOSKRNL.WRITE_REGISTER_BUFFER_UCHAR -VideoPortWriteRegisterBufferUshort@12=NTOSKRNL.WRITE_REGISTER_BUFFER_USHORT -VideoPortWriteRegisterBufferUlong@12=NTOSKRNL.WRITE_REGISTER_BUFFER_ULONG -VideoPortZeroMemory@8=NTOSKRNL.RtlZeroMemory -VideoPortZeroDeviceMemory@8=NTOSKRNL.RtlZeroMemory -VpNotifyEaData@8 diff --git a/reactos/drivers/video/videoprt/videoprt.rbuild b/reactos/drivers/video/videoprt/videoprt.rbuild index 0df55a135fd..4555223509e 100644 --- a/reactos/drivers/video/videoprt/videoprt.rbuild +++ b/reactos/drivers/video/videoprt/videoprt.rbuild @@ -1,7 +1,7 @@ - + . include @@ -22,4 +22,5 @@ timer.c videoprt.c videoprt.rc + videoprt.spec diff --git a/reactos/drivers/video/videoprt/videoprt.spec b/reactos/drivers/video/videoprt/videoprt.spec new file mode 100644 index 00000000000..61a147cb665 --- /dev/null +++ b/reactos/drivers/video/videoprt/videoprt.spec @@ -0,0 +1,114 @@ +@ stdcall VideoPortAcquireDeviceLock(ptr) +@ stdcall VideoPortAcquireSpinLock(ptr ptr ptr) +@ stdcall VideoPortAcquireSpinLockAtDpcLevel(ptr ptr) +@ stdcall VideoPortAllocateBuffer(ptr long ptr) +@ stdcall VideoPortAllocateCommonBuffer(ptr ptr long ptr long ptr) +@ stdcall VideoPortAllocateContiguousMemory(ptr long long long) +@ stdcall VideoPortAllocatePool(ptr long long long) +;VideoPortAssociateEventsWithDmaHandle +@ stdcall VideoPortCheckForDeviceExistence(ptr long long long long long long) +@ stdcall VideoPortClearEvent(ptr ptr) +@ stdcall VideoPortCompareMemory(ptr ptr long) NTOSKRNL.RtlCompareMemory +;VideoPortCompleteDma +@ stdcall VideoPortCreateEvent(ptr long ptr ptr) +@ stdcall VideoPortCreateSecondaryDisplay(ptr ptr long) +@ stdcall VideoPortCreateSpinLock(ptr ptr) +@ stdcall VideoPortDDCMonitorHelper(ptr ptr ptr long) +@ cdecl VideoPortDebugPrint(long ptr) +@ stdcall VideoPortDeleteEvent(ptr ptr) +@ stdcall VideoPortDeleteSpinLock(ptr ptr) +@ stdcall VideoPortDisableInterrupt(ptr) +;VideoPortDoDma +@ stdcall VideoPortEnableInterrupt(ptr) +@ stdcall VideoPortEnumerateChildren(ptr ptr) +;VideoPortFlushRegistry +@ stdcall VideoPortFreeCommonBuffer(ptr long ptr long long long) +@ stdcall VideoPortFreeDeviceBase(ptr ptr) +@ stdcall VideoPortFreePool(ptr ptr) +@ stdcall VideoPortGetAccessRanges(ptr long ptr long ptr ptr ptr ptr) +@ stdcall VideoPortGetAgpServices(ptr ptr) +@ stdcall VideoPortGetAssociatedDeviceExtension(ptr) +;VideoPortGetAssociatedDeviceID +@ stdcall VideoPortGetBusData(ptr long long ptr long long) +;VideoPortGetBytesUsed +;VideoPortGetCommonBuffer +@ stdcall VideoPortGetCurrentIrql() +@ stdcall VideoPortGetDeviceBase(ptr long long long long) +@ stdcall VideoPortGetDeviceData(ptr long ptr ptr) +@ stdcall VideoPortGetDmaAdapter(ptr ptr) +;VideoPortGetDmaContext +;VideoPortGetMdl +@ stdcall VideoPortGetRegistryParameters(ptr wstr long ptr ptr) +@ stdcall VideoPortGetRomImage(ptr ptr long long) +@ stdcall VideoPortGetVersion(ptr ptr) +@ stdcall VideoPortGetVgaStatus(ptr ptr) +@ stdcall VideoPortInitialize(ptr ptr ptr ptr) +@ stdcall VideoPortInt10(ptr ptr) +@ fastcall VideoPortInterlockedDecrement(ptr) NTOSKRNL.InterlockedDecrement +@ fastcall VideoPortInterlockedExchange(ptr long) NTOSKRNL.InterlockedExchange +@ fastcall VideoPortInterlockedIncrement(ptr) NTOSKRNL.InterlockedIncrement +@ stdcall VideoPortLockBuffer(ptr ptr long long) +;VideoPortLockPages +@ stdcall VideoPortLogError(ptr ptr long long) +@ stdcall VideoPortMapBankedMemory(ptr long long ptr ptr ptr long long ptr ptr) +;VideoPortMapDmaMemory +@ stdcall VideoPortMapMemory(ptr long long ptr ptr ptr) +@ stdcall VideoPortMoveMemory(ptr ptr long) NTOSKRNL.RtlMoveMemory +@ stdcall VideoPortPutDmaAdapter(ptr ptr) +@ stdcall VideoPortQueryPerformanceCounter(ptr ptr) +@ stdcall VideoPortQueryServices(ptr long ptr) +@ stdcall VideoPortQuerySystemTime(ptr) NTOSKRNL.KeQuerySystemTime +@ stdcall VideoPortQueueDpc(ptr ptr ptr) +@ stdcall VideoPortReadPortUchar(ptr) HAL.READ_PORT_UCHAR +@ stdcall VideoPortReadPortUshort(ptr) HAL.READ_PORT_USHORT +@ stdcall VideoPortReadPortUlong(ptr) HAL.READ_PORT_ULONG +@ stdcall VideoPortReadPortBufferUchar(ptr ptr long) HAL.READ_PORT_BUFFER_UCHAR +@ stdcall VideoPortReadPortBufferUshort(ptr ptr long) HAL.READ_PORT_BUFFER_USHORT +@ stdcall VideoPortReadPortBufferUlong(ptr ptr long) HAL.READ_PORT_BUFFER_ULONG +@ stdcall VideoPortReadRegisterUchar(ptr) NTOSKRNL.READ_REGISTER_UCHAR +@ stdcall VideoPortReadRegisterUshort(ptr) NTOSKRNL.READ_REGISTER_USHORT +@ stdcall VideoPortReadRegisterUlong(ptr) NTOSKRNL.READ_REGISTER_ULONG +@ stdcall VideoPortReadRegisterBufferUchar(ptr ptr long) NTOSKRNL.READ_REGISTER_BUFFER_UCHAR +@ stdcall VideoPortReadRegisterBufferUshort(ptr ptr long) NTOSKRNL.READ_REGISTER_BUFFER_USHORT +@ stdcall VideoPortReadRegisterBufferUlong(ptr ptr long) NTOSKRNL.READ_REGISTER_BUFFER_ULONG +;VideoPortReadStateEvent +@ stdcall VideoPortRegisterBugcheckCallback(ptr long ptr long) +@ stdcall VideoPortReleaseBuffer(ptr ptr) +@ stdcall VideoPortReleaseCommonBuffer(ptr ptr long long long ptr long) +@ stdcall VideoPortReleaseDeviceLock(ptr) +@ stdcall VideoPortReleaseSpinLock(ptr ptr long) +@ stdcall VideoPortReleaseSpinLockFromDpcLevel(ptr ptr) +@ stdcall VideoPortScanRom(ptr ptr long ptr) +@ stdcall VideoPortSetBusData(ptr long long ptr long long) +;VideoPortSetBytesUsed +;VideoPortSetDmaContext +@ stdcall VideoPortSetEvent(ptr ptr) +@ stdcall VideoPortSetRegistryParameters(ptr wstr ptr long) +@ stdcall VideoPortSetTrappedEmulatorPorts(ptr long ptr) +;VideoPortSignalDmaComplete +@ stdcall VideoPortStallExecution(ptr) HAL.KeStallExecutionProcessor +;VideoPortStartDma +@ stdcall VideoPortStartTimer(ptr) +@ stdcall VideoPortStopTimer(ptr) +@ stdcall VideoPortSynchronizeExecution(ptr long ptr ptr) +@ stdcall VideoPortUnlockBuffer(ptr ptr) +;VideoPortUnlockPages +;VideoPortUnmapDmaMemory +@ stdcall VideoPortUnmapMemory(ptr ptr ptr) +@ stdcall VideoPortVerifyAccessRanges(ptr long ptr) +@ stdcall VideoPortWaitForSingleObject(ptr ptr ptr) +@ stdcall VideoPortWritePortUchar(ptr long) HAL.WRITE_PORT_UCHAR +@ stdcall VideoPortWritePortUshort(ptr long) HAL.WRITE_PORT_USHORT +@ stdcall VideoPortWritePortUlong(ptr long) HAL.WRITE_PORT_ULONG +@ stdcall VideoPortWritePortBufferUchar(ptr ptr long) HAL.WRITE_PORT_BUFFER_UCHAR +@ stdcall VideoPortWritePortBufferUshort(ptr ptr long) HAL.WRITE_PORT_BUFFER_USHORT +@ stdcall VideoPortWritePortBufferUlong(ptr ptr long) HAL.WRITE_PORT_BUFFER_ULONG +@ stdcall VideoPortWriteRegisterUchar(ptr long) NTOSKRNL.WRITE_REGISTER_UCHAR +@ stdcall VideoPortWriteRegisterUshort(ptr long) NTOSKRNL.WRITE_REGISTER_USHORT +@ stdcall VideoPortWriteRegisterUlong(ptr long) NTOSKRNL.WRITE_REGISTER_ULONG +@ stdcall VideoPortWriteRegisterBufferUchar(ptr ptr long) NTOSKRNL.WRITE_REGISTER_BUFFER_UCHAR +@ stdcall VideoPortWriteRegisterBufferUshort(ptr ptr long) NTOSKRNL.WRITE_REGISTER_BUFFER_USHORT +@ stdcall VideoPortWriteRegisterBufferUlong(ptr ptr long) NTOSKRNL.WRITE_REGISTER_BUFFER_ULONG +@ stdcall VideoPortZeroMemory(ptr long) NTOSKRNL.RtlZeroMemory +@ stdcall VideoPortZeroDeviceMemory(ptr long) NTOSKRNL.RtlZeroMemory +@ stdcall VpNotifyEaData(ptr ptr) diff --git a/reactos/hal/hal/hal_arm.def b/reactos/hal/hal/hal_arm.def deleted file mode 100644 index 33020ec4dff..00000000000 --- a/reactos/hal/hal/hal_arm.def +++ /dev/null @@ -1,101 +0,0 @@ -; Hardware Abstraction Layer - ReactOS Operating System - -LIBRARY hal.dll - -EXPORTS -ExAcquireFastMutex=ExiAcquireFastMutex -ExReleaseFastMutex=ExiReleaseFastMutex -ExTryToAcquireFastMutex=ExiTryToAcquireFastMutex -HalClearSoftwareInterrupt -HalRequestSoftwareInterrupt -HalSystemVectorDispatchEntry -KeAcquireInStackQueuedSpinLock -KeAcquireInStackQueuedSpinLockRaiseToSynch -KeAcquireSpinLockRaiseToSynch -KeAcquireQueuedSpinLock -KeAcquireQueuedSpinLockRaiseToSynch -KeReleaseInStackQueuedSpinLock -KeReleaseQueuedSpinLock -KeTryToAcquireQueuedSpinLock -KeTryToAcquireQueuedSpinLockRaiseToSynch -KfAcquireSpinLock -KfLowerIrql -KfRaiseIrql -KfReleaseSpinLock - -HalAcquireDisplayOwnership -HalAdjustResourceList -HalAllProcessorsStarted -HalAllocateAdapterChannel -HalAllocateCommonBuffer -HalAllocateCrashDumpRegisters -HalAssignSlotResources -HalBeginSystemInterrupt -HalCalibratePerformanceCounter -HalDisableSystemInterrupt -HalDisplayString -HalEnableSystemInterrupt -HalEndSystemInterrupt -HalFlushCommonBuffer -HalFreeCommonBuffer -HalGetAdapter -HalGetBusData -HalGetBusDataByOffset -HalGetEnvironmentVariable -HalGetInterruptSource -HalGetInterruptVector -HalHandleNMI -HalInitSystem -HalInitializeProcessor -HalMakeBeep -HalProcessorIdle -HalQueryDisplayParameters -HalQueryRealTimeClock -HalReadDmaCounter -HalReportResourceUsage -HalRequestIpi -HalReturnToFirmware -HalSetBusData -HalSetBusDataByOffset -HalSetDisplayParameters -HalSetEnvironmentVariable -HalSetProfileInterval -HalSetRealTimeClock -HalSetTimeIncrement -HalStartNextProcessor -HalStartProfileInterrupt -HalStopProfileInterrupt -HalSweepIcache -HalSweepDcache -HalTranslateBusAddress -IoAssignDriveLetters=HalpAssignDriveLetters -IoFlushAdapterBuffers -IoFreeAdapterChannel -IoFreeMapRegisters -IoMapTransfer -IoReadPartitionTable=HalpReadPartitionTable -IoSetPartitionInformation=HalpSetPartitionInformation -IoWritePartitionTable=HalpWritePartitionTable -KeAcquireSpinLock -KdComPortInUse=_KdComPortInUse DATA -KeFlushWriteBuffer -KeGetCurrentIrql -KeLowerIrql -KeQueryPerformanceCounter -KeRaiseIrql -KeRaiseIrqlToDpcLevel -KeRaiseIrqlToSynchLevel -KeReleaseSpinLock -KeStallExecutionProcessor -READ_PORT_BUFFER_UCHAR -READ_PORT_BUFFER_ULONG -READ_PORT_BUFFER_USHORT -READ_PORT_UCHAR -READ_PORT_ULONG -READ_PORT_USHORT -WRITE_PORT_BUFFER_UCHAR -WRITE_PORT_BUFFER_ULONG -WRITE_PORT_BUFFER_USHORT -WRITE_PORT_UCHAR -WRITE_PORT_ULONG -WRITE_PORT_USHORT diff --git a/reactos/hal/halarm/up/halup.rbuild b/reactos/hal/halarm/up/halup.rbuild index 0576021a4d0..1d13227b541 100644 --- a/reactos/hal/halarm/up/halup.rbuild +++ b/reactos/hal/halarm/up/halup.rbuild @@ -1,7 +1,7 @@ - + ../include include diff --git a/reactos/include/ddk/ddkmapi.h b/reactos/include/ddk/ddkmapi.h index 86a13994711..4500cc6f58f 100644 --- a/reactos/include/ddk/ddkmapi.h +++ b/reactos/include/ddk/ddkmapi.h @@ -330,7 +330,7 @@ typedef struct _DDSETSKIPFIELD DXAPI -DWORD +DWORD PASCAL DxApi(IN DWORD dwFunctionNum, IN LPVOID lpvInBuffer, IN DWORD cbInBuffer, diff --git a/reactos/include/ddk/video.h b/reactos/include/ddk/video.h index e618718fe88..bfb1e24c383 100644 --- a/reactos/include/ddk/video.h +++ b/reactos/include/ddk/video.h @@ -1348,7 +1348,7 @@ BOOLEAN DDKAPI VideoPortSignalDmaComplete( IN PVOID HwDeviceExtension, - IN PVOID pDmaHandle); + IN PDMA pDmaHandle); VPAPI VOID diff --git a/reactos/include/ddk/winddk.h b/reactos/include/ddk/winddk.h index dccdadc64b4..da4119e9663 100644 --- a/reactos/include/ddk/winddk.h +++ b/reactos/include/ddk/winddk.h @@ -747,6 +747,15 @@ typedef struct _KUSER_SHARED_DATA #define IRP_MN_REGINFO_EX 0x0b +typedef enum _IO_PAGING_PRIORITY +{ + IoPagingPriorityInvalid, + IoPagingPriorityNormal, + IoPagingPriorityHigh, + IoPagingPriorityReserved1, + IoPagingPriorityReserved2 +} IO_PAGING_PRIORITY; + typedef enum _IO_ALLOCATION_ACTION { KeepObject = 1, DeallocateObject, @@ -4835,6 +4844,11 @@ typedef struct _KBUGCHECK_CALLBACK_RECORD { UCHAR State; } KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD; +typedef BOOLEAN +(DDKAPI *PNMI_CALLBACK)( + IN PVOID Context, + IN BOOLEAN Handled); + /* * VOID * KeInitializeCallbackRecord( @@ -11501,7 +11515,7 @@ DbgPrintEx( IN ...); ULONG -DDKCDECLAPI +NTAPI vDbgPrintEx( IN ULONG ComponentId, IN ULONG Level, @@ -11509,7 +11523,7 @@ vDbgPrintEx( IN va_list ap); ULONG -DDKCDECLAPI +NTAPI vDbgPrintExWithPrefix( IN LPCSTR Prefix, IN ULONG ComponentId, diff --git a/reactos/include/ndk/cmfuncs.h b/reactos/include/ndk/cmfuncs.h index f8aac16d104..b9cd568d22a 100644 --- a/reactos/include/ndk/cmfuncs.h +++ b/reactos/include/ndk/cmfuncs.h @@ -234,7 +234,7 @@ NTSTATUS NTAPI NtQueryOpenSubKeys( IN POBJECT_ATTRIBUTES TargetKey, - IN ULONG HandleCount + OUT PULONG HandleCount ); NTSTATUS diff --git a/reactos/include/ndk/i386/ketypes.h b/reactos/include/ndk/i386/ketypes.h index 414ef1df675..d165f72c924 100644 --- a/reactos/include/ndk/i386/ketypes.h +++ b/reactos/include/ndk/i386/ketypes.h @@ -654,7 +654,7 @@ typedef struct _KIPCR USHORT MinorVersion; KAFFINITY SetMember; ULONG StallScaleFactor; - UCHAR SparedUnused; + UCHAR SpareUnused; UCHAR Number; UCHAR Reserved; UCHAR L2CacheAssociativity; diff --git a/reactos/include/ndk/ketypes.h b/reactos/include/ndk/ketypes.h index 0d34d054a34..3255bccae23 100644 --- a/reactos/include/ndk/ketypes.h +++ b/reactos/include/ndk/ketypes.h @@ -952,10 +952,10 @@ typedef struct _KPROCESS DISPATCHER_HEADER Header; LIST_ENTRY ProfileListHead; #if (NTDDI_VERSION >= NTDDI_LONGHORN) - ULONG DirectoryTableBase; - ULONG Unused0; + ULONG_PTR DirectoryTableBase; + ULONG_PTR Unused0; #else - LARGE_INTEGER DirectoryTableBase; + ULONG_PTR DirectoryTableBase[2]; #endif #if defined(_M_IX86) KGDTENTRY LdtDescriptor; diff --git a/reactos/include/ndk/pstypes.h b/reactos/include/ndk/pstypes.h index ad7e9dd196c..77498367863 100644 --- a/reactos/include/ndk/pstypes.h +++ b/reactos/include/ndk/pstypes.h @@ -1426,9 +1426,9 @@ typedef struct _EJOB ULONG PeakProcessMemoryUsed; ULONG PeakJobMemoryUsed; ULONG CurrentJobMemoryUsed; -#if (NTDDI_VERSION == NTDDI_WINXP) +#if (NTDDI_VERSION >= NTDDI_WINXP) && (NTDDI_VERSION < NTDDI_WS03) FAST_MUTEX MemoryLimitsLock; -#elif (NTDDI_VERSION == NTDDI_WS03) +#elif (NTDDI_VERSION >= NTDDI_WS03) && (NTDDI_VERSION < NTDDI_LONGHORN) KGUARDED_MUTEX MemoryLimitsLock; #elif (NTDDI_VERSION >= NTDDI_LONGHORN) EX_PUSH_LOCK MemoryLimitsLock; diff --git a/reactos/include/psdk/dbghelp.h b/reactos/include/psdk/dbghelp.h index b62fdf28e52..c8bb33ca4fb 100644 --- a/reactos/include/psdk/dbghelp.h +++ b/reactos/include/psdk/dbghelp.h @@ -88,7 +88,7 @@ typedef struct _tagADDRESS64 #define SYMF_THUNK 0x00002000 #define SYMF_TLSREL 0x00004000 -typedef enum +typedef enum { SymNone = 0, SymCoff, @@ -378,7 +378,6 @@ typedef struct _IMAGEHLP_DUPLICATE_SYMBOL64 /* latest SDK defines: */ #define SYMOPT_ALLOW_ABSOLUTE_SYMBOLS 0x00000800 #define SYMOPT_IGNORE_NT_SYMPATH 0x00001000 - #define SYMOPT_INCLUDE_32BIT_MODULES 0x00002000 #define SYMOPT_PUBLICS_ONLY 0x00004000 #define SYMOPT_NO_PUBLICS 0x00008000 @@ -430,7 +429,7 @@ typedef struct _DBGHELP_MODLOAD_DATA typedef DWORD RVA; typedef ULONG64 RVA64; -typedef enum _MINIDUMP_TYPE +typedef enum _MINIDUMP_TYPE { MiniDumpNormal = 0x0000, MiniDumpWithDataSegs = 0x0001, @@ -469,7 +468,7 @@ typedef struct _MINIDUMP_THREAD_CALLBACK ULONG64 StackEnd; } MINIDUMP_THREAD_CALLBACK, *PMINIDUMP_THREAD_CALLBACK; -typedef struct _MINIDUMP_THREAD_EX_CALLBACK +typedef struct _MINIDUMP_THREAD_EX_CALLBACK { ULONG ThreadId; HANDLE ThreadHandle; @@ -486,7 +485,7 @@ typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK ULONG ThreadId; } MINIDUMP_INCLUDE_THREAD_CALLBACK, *PMINIDUMP_INCLUDE_THREAD_CALLBACK; -typedef enum _THREAD_WRITE_FLAGS +typedef enum _THREAD_WRITE_FLAGS { ThreadWriteThread = 0x0001, ThreadWriteStack = 0x0002, @@ -497,7 +496,7 @@ typedef enum _THREAD_WRITE_FLAGS ThreadWriteThreadInfo = 0x0040 } THREAD_WRITE_FLAGS; -typedef struct _MINIDUMP_MODULE_CALLBACK +typedef struct _MINIDUMP_MODULE_CALLBACK { PWCHAR FullPath; ULONG64 BaseOfImage; @@ -511,12 +510,12 @@ typedef struct _MINIDUMP_MODULE_CALLBACK ULONG SizeOfMiscRecord; } MINIDUMP_MODULE_CALLBACK, *PMINIDUMP_MODULE_CALLBACK; -typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK +typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK { ULONG64 BaseOfImage; } MINIDUMP_INCLUDE_MODULE_CALLBACK, *PMINIDUMP_INCLUDE_MODULE_CALLBACK; -typedef enum _MODULE_WRITE_FLAGS +typedef enum _MODULE_WRITE_FLAGS { ModuleWriteModule = 0x0001, ModuleWriteDataSeg = 0x0002, @@ -527,12 +526,12 @@ typedef enum _MODULE_WRITE_FLAGS ModuleWriteCodeSegs = 0x0040, } MODULE_WRITE_FLAGS; -typedef struct _MINIDUMP_CALLBACK_INPUT +typedef struct _MINIDUMP_CALLBACK_INPUT { ULONG ProcessId; HANDLE ProcessHandle; ULONG CallbackType; - union + union { MINIDUMP_THREAD_CALLBACK Thread; MINIDUMP_THREAD_EX_CALLBACK ThreadEx; @@ -544,7 +543,7 @@ typedef struct _MINIDUMP_CALLBACK_INPUT typedef struct _MINIDUMP_CALLBACK_OUTPUT { - union + union { ULONG ModuleWriteFlags; ULONG ThreadWriteFlags; @@ -558,19 +557,19 @@ typedef struct _MINIDUMP_CALLBACK_OUTPUT typedef BOOL (WINAPI* MINIDUMP_CALLBACK_ROUTINE)(PVOID, const PMINIDUMP_CALLBACK_INPUT, PMINIDUMP_CALLBACK_OUTPUT); -typedef struct _MINIDUMP_CALLBACK_INFORMATION +typedef struct _MINIDUMP_CALLBACK_INFORMATION { MINIDUMP_CALLBACK_ROUTINE CallbackRoutine; void* CallbackParam; } MINIDUMP_CALLBACK_INFORMATION, *PMINIDUMP_CALLBACK_INFORMATION; -typedef struct _MINIDUMP_LOCATION_DESCRIPTOR +typedef struct _MINIDUMP_LOCATION_DESCRIPTOR { ULONG DataSize; RVA Rva; } MINIDUMP_LOCATION_DESCRIPTOR; -typedef struct _MINIDUMP_LOCATION_DESCRIPTOR64 +typedef struct _MINIDUMP_LOCATION_DESCRIPTOR64 { ULONG64 DataSize; RVA64 Rva; @@ -615,7 +614,7 @@ typedef struct _MINIDUMP_HEADER DWORD NumberOfStreams; RVA StreamDirectoryRva; DWORD CheckSum; - union + union { DWORD Reserved; DWORD TimeDateStamp; @@ -662,7 +661,7 @@ typedef struct _MINIDUMP_MODULE ULONG64 Reserved1; } MINIDUMP_MODULE, *PMINIDUMP_MODULE; -typedef struct _MINIDUMP_MODULE_LIST +typedef struct _MINIDUMP_MODULE_LIST { ULONG NumberOfModules; MINIDUMP_MODULE Modules[1]; /* FIXME: 0-sized array not supported */ @@ -713,7 +712,7 @@ typedef struct _MINIDUMP_SYSTEM_INFO ULONG FeatureInformation; ULONG AMDExtendedCpuFeatures; } X86CpuInfo; - struct + struct { ULONG64 ProcessorFeatures[2]; } OtherCpuInfo; @@ -784,13 +783,6 @@ BOOL WINAPI MiniDumpReadDumpStream(PVOID, ULONG, PMINIDUMP_DIRECTORY*, PVOID*, #include -/************************* - * User mode dump * - *************************/ -typedef BOOL (WINAPI *PDBGHELP_CREATE_USER_DUMP_CALLBACK)(DWORD, PVOID*, LPDWORD, PVOID); -BOOL WINAPI DbgHelpCreateUserDump(LPSTR, PDBGHELP_CREATE_USER_DUMP_CALLBACK, PVOID); -BOOL WINAPI DbgHelpCreateUserDumpW(LPWSTR, PDBGHELP_CREATE_USER_DUMP_CALLBACK, PVOID); - /************************* * MODULE handling * *************************/ @@ -906,7 +898,7 @@ typedef struct _SYMBOL_INFO_PACKAGEW WCHAR name[MAX_SYM_NAME+1]; } SYMBOL_INFO_PACKAGEW, *PSYMBOL_INFO_PACKAGEW; -typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO +typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO { TI_GET_SYMTAG, TI_GET_SYMNAME, @@ -961,7 +953,7 @@ typedef struct _IMAGEHLP_GET_TYPE_INFO_PARAMS PULONG64 ReqsValid; } IMAGEHLP_GET_TYPE_INFO_PARAMS, *PIMAGEHLP_GET_TYPE_INFO_PARAMS; -typedef struct _TI_FINDCHILDREN_PARAMS +typedef struct _TI_FINDCHILDREN_PARAMS { ULONG Count; ULONG Start; @@ -1076,7 +1068,7 @@ BOOL WINAPI SymGetLineNextW64(HANDLE, PIMAGEHLP_LINEW64); BOOL WINAPI SymGetLineFromName(HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE); BOOL WINAPI SymGetLineFromName64(HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE64); BOOL WINAPI SymGetLineFromNameW64(HANDLE, PCWSTR, PCWSTR, DWORD, PLONG, PIMAGEHLP_LINEW64); -BOOL WINAPI SymGetFileLineOffsets64(HANDLE, PSTR, PSTR, PDWORD64, ULONG); +ULONG WINAPI SymGetFileLineOffsets64(HANDLE, PCSTR, PCSTR, PDWORD64, ULONG); BOOL WINAPI SymGetSourceFile(HANDLE, ULONG64, PCSTR, PCSTR, PSTR, DWORD); BOOL WINAPI SymGetSourceFileW(HANDLE, ULONG64, PCWSTR, PCWSTR, PWSTR, DWORD); BOOL WINAPI SymGetSourceFileToken(HANDLE, ULONG64, PCSTR, PVOID*, DWORD*); @@ -1131,7 +1123,8 @@ HANDLE WINAPI SymFindDebugInfoFile(HANDLE, PCSTR, PSTR, PFIND_DEBUG_FILE_CALLBAC HANDLE WINAPI SymFindDebugInfoFileW(HANDLE, PCWSTR, PWSTR, PFIND_DEBUG_FILE_CALLBACKW, PVOID); typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACK)(PCSTR, PVOID); typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACKW)(PCWSTR, PVOID); -BOOL WINAPI FindFileInPath(HANDLE, LPSTR, LPSTR, PVOID, DWORD, DWORD, DWORD, LPSTR); +BOOL WINAPI FindFileInPath(HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD, + PSTR, PFINDFILEINPATHCALLBACK, PVOID); BOOL WINAPI SymFindFileInPath(HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD, PSTR, PFINDFILEINPATHCALLBACK, PVOID); BOOL WINAPI SymFindFileInPathW(HANDLE, PCWSTR, PCWSTR, PVOID, DWORD, DWORD, DWORD, @@ -1177,11 +1170,6 @@ PWSTR WINAPI SymGetHomeDirectoryW(DWORD, PWSTR, size_t); *************************/ BOOL WINAPI SymSetContext(HANDLE, PIMAGEHLP_STACK_FRAME, PIMAGEHLP_CONTEXT); -/************************* - * Processes * - *************************/ -typedef BOOL (*PSYM_ENUMPROCESSES_CALLBACK)(HANDLE, PVOID); -BOOL SymEnumProcesses(PSYM_ENUMPROCESSES_CALLBACK, PVOID); /************************* * Stack management * diff --git a/reactos/include/psdk/gdiplusenums.h b/reactos/include/psdk/gdiplusenums.h index 8e1148d7847..bc52bd5d732 100644 --- a/reactos/include/psdk/gdiplusenums.h +++ b/reactos/include/psdk/gdiplusenums.h @@ -227,6 +227,14 @@ enum StringAlignment StringAlignmentFar = 2 }; +enum StringDigitSubstitute +{ + StringDigitSubstituteUser = 0, + StringDigitSubstituteNone = 1, + StringDigitSubstituteNational = 2, + StringDigitSubstituteTraditional = 3 +}; + enum StringFormatFlags { StringFormatFlagsDirectionRightToLeft = 0x00000001, @@ -314,6 +322,13 @@ enum FlushIntention FlushIntentionSync = 1 }; +enum CoordinateSpace +{ + CoordinateSpaceWorld, + CoordinateSpacePage, + CoordinateSpaceDevice +}; + #ifndef __cplusplus typedef enum Unit Unit; @@ -339,6 +354,7 @@ typedef enum EmfType EmfType; typedef enum CompositingMode CompositingMode; typedef enum TextRenderingHint TextRenderingHint; typedef enum StringAlignment StringAlignment; +typedef enum StringDigitSubstitute StringDigitSubstitute; typedef enum StringTrimming StringTrimming; typedef enum FontStyle FontStyle; typedef enum StringFormatFlags StringFormatFlags; @@ -347,6 +363,7 @@ typedef enum PenAlignment GpPenAlignment; typedef enum ImageCodecFlags ImageCodecFlags; typedef enum CombineMode CombineMode; typedef enum FlushIntention FlushIntention; +typedef enum CoordinateSpace CoordinateSpace; #endif /* end of c typedefs */ diff --git a/reactos/include/psdk/gdiplusflat.h b/reactos/include/psdk/gdiplusflat.h index 9ef7ad75b5f..dc938ac0656 100644 --- a/reactos/include/psdk/gdiplusflat.h +++ b/reactos/include/psdk/gdiplusflat.h @@ -33,19 +33,25 @@ GpStatus WINGDIPAPI GdipCreatePen2(GpBrush*,REAL,GpUnit,GpPen**); GpStatus WINGDIPAPI GdipDeletePen(GpPen*); GpStatus WINGDIPAPI GdipGetPenBrushFill(GpPen*,GpBrush**); GpStatus WINGDIPAPI GdipGetPenColor(GpPen*,ARGB*); +GpStatus WINGDIPAPI GdipGetPenCustomStartCap(GpPen*,GpCustomLineCap**); +GpStatus WINGDIPAPI GdipGetPenCustomEndCap(GpPen*,GpCustomLineCap**); GpStatus WINGDIPAPI GdipGetPenDashArray(GpPen*,REAL*,INT); +GpStatus WINGDIPAPI GdipGetPenDashCount(GpPen*,INT*); GpStatus WINGDIPAPI GdipGetPenDashOffset(GpPen*,REAL*); GpStatus WINGDIPAPI GdipGetPenDashStyle(GpPen*,GpDashStyle*); +GpStatus WINGDIPAPI GdipGetPenMode(GpPen*,GpPenAlignment*); GpStatus WINGDIPAPI GdipSetPenBrushFill(GpPen*,GpBrush*); GpStatus WINGDIPAPI GdipSetPenColor(GpPen*,ARGB); GpStatus WINGDIPAPI GdipSetPenCustomEndCap(GpPen*,GpCustomLineCap*); GpStatus WINGDIPAPI GdipSetPenCustomStartCap(GpPen*,GpCustomLineCap*); GpStatus WINGDIPAPI GdipSetPenDashArray(GpPen*,GDIPCONST REAL*,INT); +GpStatus WINGDIPAPI GdipSetPenDashCap197819(GpPen*,GpDashCap); GpStatus WINGDIPAPI GdipSetPenDashOffset(GpPen*,REAL); GpStatus WINGDIPAPI GdipSetPenDashStyle(GpPen*,GpDashStyle); GpStatus WINGDIPAPI GdipSetPenEndCap(GpPen*,GpLineCap); GpStatus WINGDIPAPI GdipSetPenLineCap197819(GpPen*,GpLineCap,GpLineCap,GpDashCap); GpStatus WINGDIPAPI GdipSetPenLineJoin(GpPen*,GpLineJoin); +GpStatus WINGDIPAPI GdipSetPenMode(GpPen*,GpPenAlignment); GpStatus WINGDIPAPI GdipSetPenMiterLimit(GpPen*,REAL); GpStatus WINGDIPAPI GdipSetPenStartCap(GpPen*,GpLineCap); GpStatus WINGDIPAPI GdipSetPenWidth(GpPen*,REAL); @@ -69,9 +75,15 @@ GpStatus WINGDIPAPI GdipCreateLineBrushFromRect(GDIPCONST GpRectF*,ARGB,ARGB, LinearGradientMode,GpWrapMode,GpLineGradient**); GpStatus WINGDIPAPI GdipCreateLineBrushFromRectI(GDIPCONST GpRect*,ARGB,ARGB, LinearGradientMode,GpWrapMode,GpLineGradient**); +GpStatus WINGDIPAPI GdipCreateLineBrushFromRectWithAngle(GDIPCONST GpRectF*, + ARGB,ARGB,REAL,BOOL,GpWrapMode,GpLineGradient**); +GpStatus WINGDIPAPI GdipCreateLineBrushFromRectWithAngleI(GDIPCONST GpRect*, + ARGB,ARGB,REAL,BOOL,GpWrapMode,GpLineGradient**); + GpStatus WINGDIPAPI GdipCreateMetafileFromEmf(HENHMETAFILE,BOOL,GpMetafile**); GpStatus WINGDIPAPI GdipCreateMetafileFromWmf(HMETAFILE,BOOL, GDIPCONST WmfPlaceableFileHeader*,GpMetafile**); +GpStatus WINGDIPAPI GdipCreateMetafileFromWmfFile(GDIPCONST WCHAR*, GDIPCONST WmfPlaceableFileHeader*,GpMetafile**); GpStatus WINGDIPAPI GdipCreateStreamOnFile(GDIPCONST WCHAR*,UINT,IStream**); GpStatus WINGDIPAPI GdipDeleteGraphics(GpGraphics *); GpStatus WINGDIPAPI GdipDrawArc(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,REAL); @@ -80,6 +92,10 @@ GpStatus WINGDIPAPI GdipDrawBezier(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,R GpStatus WINGDIPAPI GdipDrawBezierI(GpGraphics*,GpPen*,INT,INT,INT,INT,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipDrawBeziers(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT); GpStatus WINGDIPAPI GdipDrawBeziersI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT); +GpStatus WINGDIPAPI GdipDrawClosedCurve(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT); +GpStatus WINGDIPAPI GdipDrawClosedCurveI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT); +GpStatus WINGDIPAPI GdipDrawClosedCurve2(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT,REAL); +GpStatus WINGDIPAPI GdipDrawClosedCurve2I(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT,REAL); GpStatus WINGDIPAPI GdipDrawCurve(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT); GpStatus WINGDIPAPI GdipDrawCurveI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT); GpStatus WINGDIPAPI GdipDrawCurve2(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT,REAL); @@ -145,6 +161,10 @@ GpStatus WINGDIPAPI GdipGetTextRenderingHint(GpGraphics*,TextRenderingHint*); GpStatus WINGDIPAPI GdipGetWorldTransform(GpGraphics*,GpMatrix*); GpStatus WINGDIPAPI GdipMeasureString(GpGraphics*,GDIPCONST WCHAR*,INT, GDIPCONST GpFont*,GDIPCONST RectF*,GDIPCONST GpStringFormat*,RectF*,INT*,INT*); +GpStatus WINGDIPAPI GdipMeasureCharacterRanges(GpGraphics*, GDIPCONST WCHAR*, + INT, GDIPCONST GpFont*, GDIPCONST RectF*, GDIPCONST GpStringFormat*, INT, + GpRegion**); + GpStatus WINGDIPAPI GdipReleaseDC(GpGraphics*,HDC); GpStatus WINGDIPAPI GdipRestoreGraphics(GpGraphics*,GraphicsState); GpStatus WINGDIPAPI GdipRotateWorldTransform(GpGraphics*,REAL,GpMatrixOrder); @@ -179,15 +199,20 @@ GpStatus WINGDIPAPI GdipCreateTextureIAI(GpImage*,GDIPCONST GpImageAttributes*, GpStatus WINGDIPAPI GdipDeleteBrush(GpBrush*); GpStatus WINGDIPAPI GdipGetBrushType(GpBrush*,GpBrushType*); GpStatus WINGDIPAPI GdipGetLineGammaCorrection(GpLineGradient*,BOOL*); +GpStatus WINGDIPAPI GdipGetLineWrapMode(GpLineGradient*,GpWrapMode*); GpStatus WINGDIPAPI GdipGetLineRect(GpLineGradient*,GpRectF*); GpStatus WINGDIPAPI GdipGetLineRectI(GpLineGradient*,GpRect*); GpStatus WINGDIPAPI GdipGetLineColors(GpLineGradient*,ARGB*); +GpStatus WINGDIPAPI GdipGetPathGradientBlend(GpPathGradient*,REAL*,REAL*,INT); +GpStatus WINGDIPAPI GdipGetPathGradientBlendCount(GpPathGradient*,INT*); GpStatus WINGDIPAPI GdipGetPathGradientCenterColor(GpPathGradient*,ARGB*); GpStatus WINGDIPAPI GdipGetPathGradientCenterPoint(GpPathGradient*,GpPointF*); GpStatus WINGDIPAPI GdipGetPathGradientCenterPointI(GpPathGradient*,GpPoint*); GpStatus WINGDIPAPI GdipGetPathGradientFocusScales(GpPathGradient*,REAL*,REAL*); GpStatus WINGDIPAPI GdipGetPathGradientGammaCorrection(GpPathGradient*,BOOL*); GpStatus WINGDIPAPI GdipGetPathGradientPointCount(GpPathGradient*,INT*); +GpStatus WINGDIPAPI GdipGetPathGradientRect(GpPathGradient*,GpRectF*); +GpStatus WINGDIPAPI GdipGetPathGradientRectI(GpPathGradient*,GpRect*); GpStatus WINGDIPAPI GdipGetPathGradientSurroundColorsWithCount(GpPathGradient*, ARGB*,INT*); GpStatus WINGDIPAPI GdipGetPathGradientWrapMode(GpPathGradient*,GpWrapMode*); @@ -210,6 +235,10 @@ GpStatus WINGDIPAPI GdipSetPathGradientSurroundColorsWithCount(GpPathGradient*, GpStatus WINGDIPAPI GdipSetPathGradientWrapMode(GpPathGradient*,GpWrapMode); GpStatus WINGDIPAPI GdipSetSolidFillColor(GpSolidFill*,ARGB); GpStatus WINGDIPAPI GdipSetTextureTransform(GpTexture *,GDIPCONST GpMatrix*); +GpStatus WINGDIPAPI GdipTransformPoints(GpGraphics*, GpCoordinateSpace, GpCoordinateSpace, + GpPointF *, INT); +GpStatus WINGDIPAPI GdipTransformPointsI(GpGraphics*, GpCoordinateSpace, GpCoordinateSpace, + GpPoint *, INT); GpStatus WINGDIPAPI GdipAddPathArc(GpPath*,REAL,REAL,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipAddPathArcI(GpPath*,INT,INT,INT,INT,REAL,REAL); @@ -217,6 +246,14 @@ GpStatus WINGDIPAPI GdipAddPathBezier(GpPath*,REAL,REAL,REAL,REAL,REAL,REAL,REAL GpStatus WINGDIPAPI GdipAddPathBezierI(GpPath*,INT,INT,INT,INT,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipAddPathBeziers(GpPath*,GDIPCONST GpPointF*,INT); GpStatus WINGDIPAPI GdipAddPathBeziersI(GpPath*,GDIPCONST GpPoint*,INT); +GpStatus WINGDIPAPI GdipAddPathClosedCurve(GpPath*,GDIPCONST GpPointF*,INT); +GpStatus WINGDIPAPI GdipAddPathClosedCurveI(GpPath*,GDIPCONST GpPoint*,INT); +GpStatus WINGDIPAPI GdipAddPathClosedCurve2(GpPath*,GDIPCONST GpPointF*,INT,REAL); +GpStatus WINGDIPAPI GdipAddPathClosedCurve2I(GpPath*,GDIPCONST GpPoint*,INT,REAL); +GpStatus WINGDIPAPI GdipAddPathCurve(GpPath*,GDIPCONST GpPointF*,INT); +GpStatus WINGDIPAPI GdipAddPathCurveI(GpPath*,GDIPCONST GpPoint*,INT); +GpStatus WINGDIPAPI GdipAddPathCurve2(GpPath*,GDIPCONST GpPointF*,INT,REAL); +GpStatus WINGDIPAPI GdipAddPathCurve2I(GpPath*,GDIPCONST GpPoint*,INT,REAL); GpStatus WINGDIPAPI GdipAddPathEllipse(GpPath*,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipAddPathEllipseI(GpPath*,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipAddPathLine(GpPath*,REAL,REAL,REAL,REAL); @@ -247,10 +284,12 @@ GpStatus WINGDIPAPI GdipGetPathTypes(GpPath*,BYTE*,INT); GpStatus WINGDIPAPI GdipGetPathWorldBounds(GpPath*,GpRectF*,GDIPCONST GpMatrix*,GDIPCONST GpPen*); GpStatus WINGDIPAPI GdipGetPathWorldBoundsI(GpPath*,GpRect*,GDIPCONST GpMatrix*,GDIPCONST GpPen*); GpStatus WINGDIPAPI GdipGetPointCount(GpPath*,INT*); - GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPoint(GpPath*,REAL,REAL,GpPen*, +GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPoint(GpPath*,REAL,REAL,GpPen*, GpGraphics*,BOOL*); GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPointI(GpPath*,INT,INT,GpPen*, GpGraphics*,BOOL*); +GpStatus WINGDIPAPI GdipIsVisiblePathPoint(GpPath*,REAL,REAL,GpGraphics*,BOOL*); +GpStatus WINGDIPAPI GdipIsVisiblePathPointI(GpPath*,INT,INT,GpGraphics*,BOOL*); GpStatus WINGDIPAPI GdipResetPath(GpPath*); GpStatus WINGDIPAPI GdipSetPathFillMode(GpPath*,GpFillMode); GpStatus WINGDIPAPI GdipStartPathFigure(GpPath*); @@ -261,8 +300,11 @@ GpStatus WINGDIPAPI GdipCreateMatrix(GpMatrix**); GpStatus WINGDIPAPI GdipCreateMatrix2(REAL,REAL,REAL,REAL,REAL,REAL,GpMatrix**); GpStatus WINGDIPAPI GdipCreateMatrix3(GDIPCONST GpRectF *,GDIPCONST GpPointF*,GpMatrix**); GpStatus WINGDIPAPI GdipCreateMatrix3I(GDIPCONST GpRect*,GDIPCONST GpPoint*,GpMatrix**); +GpStatus WINGDIPAPI GdipInvertMatrix(GpMatrix*); +GpStatus WINGDIPAPI GdipShearMatrix(GpMatrix*,REAL,REAL,GpMatrixOrder); GpStatus WINGDIPAPI GdipIsMatrixEqual(GDIPCONST GpMatrix*, GDIPCONST GpMatrix*, BOOL*); GpStatus WINGDIPAPI GdipIsMatrixIdentity(GDIPCONST GpMatrix*, BOOL*); +GpStatus WINGDIPAPI GdipIsMatrixInvertible(GDIPCONST GpMatrix*, BOOL*); GpStatus WINGDIPAPI GdipDeleteMatrix(GpMatrix*); GpStatus WINGDIPAPI GdipGetMatrixElements(GDIPCONST GpMatrix*,REAL*); @@ -281,9 +323,11 @@ GpStatus WINGDIPAPI GdipCreatePathIter(GpPathIterator**,GpPath*); GpStatus WINGDIPAPI GdipDeletePathIter(GpPathIterator*); GpStatus WINGDIPAPI GdipPathIterCopyData(GpPathIterator*,INT*,GpPointF*,BYTE*, INT,INT); +GpStatus WINGDIPAPI GdipPathIterNextMarker(GpPathIterator*,INT*,INT*,INT*); GpStatus WINGDIPAPI GdipPathIterNextSubpath(GpPathIterator*,INT*,INT*,INT*,BOOL*); GpStatus WINGDIPAPI GdipPathIterRewind(GpPathIterator*); GpStatus WINGDIPAPI GdipPathIterGetCount(GpPathIterator*,INT*); +GpStatus WINGDIPAPI GdipPathIterGetSubpathCount(GpPathIterator*,INT*); GpStatus WINGDIPAPI GdipPathIterEnumerate(GpPathIterator*,INT*,GpPointF*,BYTE*,INT); GpStatus WINGDIPAPI GdipPathIterHasCurve(GpPathIterator*,BOOL*); @@ -294,6 +338,10 @@ GpStatus WINGDIPAPI GdipDeleteCustomLineCap(GpCustomLineCap*); GpStatus WINGDIPAPI GdipSetCustomLineCapStrokeCaps(GpCustomLineCap*,GpLineCap, GpLineCap); GpStatus WINGDIPAPI GdipGetCustomLineCapBaseCap(GpCustomLineCap*,GpLineCap*); +GpStatus WINGDIPAPI GdipGetCustomLineCapBaseInset(GpCustomLineCap*,REAL*); +GpStatus WINGDIPAPI GdipGetCustomLineCapStrokeJoin(GpCustomLineCap*,GpLineJoin*); +GpStatus WINGDIPAPI GdipSetCustomLineCapStrokeJoin(GpCustomLineCap*,GpLineJoin); +GpStatus WINGDIPAPI GdipGetCustomLineCapWidthScale(GpCustomLineCap*,REAL*); GpStatus WINGDIPAPI GdipBitmapGetPixel(GpBitmap*,INT,INT,ARGB*); GpStatus WINGDIPAPI GdipBitmapSetPixel(GpBitmap*,INT,INT,ARGB); @@ -306,7 +354,9 @@ GpStatus WINGDIPAPI GdipConvertToEmfPlusToFile(const GpGraphics*,GpMetafile*,INT GpStatus WINGDIPAPI GdipConvertToEmfPlusToStream(const GpGraphics*,GpMetafile*,INT*,IStream*,EmfType,const WCHAR*,GpMetafile**); GpStatus WINGDIPAPI GdipCreateBitmapFromFile(GDIPCONST WCHAR*,GpBitmap**); GpStatus WINGDIPAPI GdipCreateBitmapFromFileICM(GDIPCONST WCHAR*,GpBitmap**); +GpStatus WINGDIPAPI GdipCreateBitmapFromGdiDib(GDIPCONST BITMAPINFO*,VOID*,GpBitmap**); GpStatus WINGDIPAPI GdipCreateBitmapFromGraphics(INT,INT,GpGraphics*,GpBitmap**); +GpStatus WINGDIPAPI GdipCreateBitmapFromResource(HINSTANCE,GDIPCONST WCHAR*,GpBitmap**); GpStatus WINGDIPAPI GdipCreateBitmapFromScan0(INT,INT,INT,PixelFormat,BYTE*, GpBitmap**); GpStatus WINGDIPAPI GdipCreateBitmapFromStream(IStream*,GpBitmap**); @@ -370,25 +420,52 @@ GpStatus WINGDIPAPI GdipGetLogFontW(GpFont*,GpGraphics*,LOGFONTW*); GpStatus WINGDIPAPI GdipCloneFont(GpFont*,GpFont**); GpStatus WINGDIPAPI GdipGetFontUnit(GpFont*, Unit*); GpStatus WINGDIPAPI GdipGetFontSize(GpFont*, REAL*); +GpStatus WINGDIPAPI GdipGetFontHeightGivenDPI(GDIPCONST GpFont*, REAL, REAL*); GpStatus WINGDIPAPI GdipCreateFontFamilyFromName(GDIPCONST WCHAR*, GpFontCollection*, GpFontFamily**); +GpStatus WINGDIPAPI GdipCloneFontFamily(GpFontFamily*, GpFontFamily**); GpStatus WINGDIPAPI GdipDeleteFontFamily(GpFontFamily*); GpStatus WINGDIPAPI GdipGetFamilyName(GDIPCONST GpFontFamily*, WCHAR*, LANGID); +GpStatus WINGDIPAPI GdipGetCellAscent(GDIPCONST GpFontFamily*, INT, UINT16*); +GpStatus WINGDIPAPI GdipGetCellDescent(GDIPCONST GpFontFamily*, INT, UINT16*); +GpStatus WINGDIPAPI GdipGetEmHeight(GDIPCONST GpFontFamily*, INT, UINT16*); +GpStatus WINGDIPAPI GdipGetLineSpacing(GDIPCONST GpFontFamily*, INT, UINT16*); +GpStatus WINGDIPAPI GdipIsStyleAvailable(GDIPCONST GpFontFamily *, INT, BOOL*); GpStatus WINGDIPAPI GdipGetGenericFontFamilySansSerif(GpFontFamily**); GpStatus WINGDIPAPI GdipGetGenericFontFamilySerif(GpFontFamily**); GpStatus WINGDIPAPI GdipGetGenericFontFamilyMonospace(GpFontFamily**); +GpStatus WINGDIPAPI GdipNewPrivateFontCollection(GpFontCollection**); +GpStatus WINGDIPAPI GdipDeletePrivateFontCollection(GpFontCollection**); +GpStatus WINGDIPAPI GdipPrivateAddFontFile(GpFontCollection*, GDIPCONST WCHAR*); +GpStatus WINGDIPAPI GdipGetFontCollectionFamilyCount(GpFontCollection*, INT*); +GpStatus WINGDIPAPI GdipGetFontCollectionFamilyList(GpFontCollection*, INT, + GpFontFamily*[], INT*); + GpStatus WINGDIPAPI GdipCreateStringFormat(INT,LANGID,GpStringFormat**); GpStatus WINGDIPAPI GdipDeleteStringFormat(GpStringFormat*); +GpStatus WINGDIPAPI GdipStringFormatGetGenericDefault(GpStringFormat **); +GpStatus WINGDIPAPI GdipStringFormatGetGenericTypographic(GpStringFormat **); GpStatus WINGDIPAPI GdipGetStringFormatAlign(GpStringFormat*,StringAlignment*); +GpStatus WINGDIPAPI GdipGetStringFormatDigitSubstitution(GDIPCONST GpStringFormat*,LANGID*, + StringDigitSubstitute*); +GpStatus WINGDIPAPI GdipGetStringFormatFlags(GDIPCONST GpStringFormat*, INT*); GpStatus WINGDIPAPI GdipGetStringFormatHotkeyPrefix(GDIPCONST GpStringFormat*,INT*); GpStatus WINGDIPAPI GdipGetStringFormatLineAlign(GpStringFormat*,StringAlignment*); +GpStatus WINGDIPAPI GdipGetStringFormatMeasurableCharacterRangeCount( + GDIPCONST GpStringFormat*, INT*); +GpStatus WINGDIPAPI GdipGetStringFormatTabStopCount(GDIPCONST GpStringFormat*,INT*); +GpStatus WINGDIPAPI GdipGetStringFormatTabStops(GDIPCONST GpStringFormat*,INT,REAL*,REAL*); GpStatus WINGDIPAPI GdipGetStringFormatTrimming(GpStringFormat*,StringTrimming*); GpStatus WINGDIPAPI GdipSetStringFormatAlign(GpStringFormat*,StringAlignment); +GpStatus WINGDIPAPI GdipSetStringFormatDigitSubstitution(GpStringFormat*,LANGID,StringDigitSubstitute); GpStatus WINGDIPAPI GdipSetStringFormatHotkeyPrefix(GpStringFormat*,INT); GpStatus WINGDIPAPI GdipSetStringFormatLineAlign(GpStringFormat*,StringAlignment); +GpStatus WINGDIPAPI GdipSetStringFormatMeasurableCharacterRanges( + GpStringFormat*, INT, GDIPCONST CharacterRange*); +GpStatus WINGDIPAPI GdipSetStringFormatTabStops(GpStringFormat*,REAL,INT,GDIPCONST REAL*); GpStatus WINGDIPAPI GdipSetStringFormatTrimming(GpStringFormat*,StringTrimming); GpStatus WINGDIPAPI GdipCloneStringFormat(GDIPCONST GpStringFormat*,GpStringFormat**); diff --git a/reactos/include/psdk/gdiplusgpstubs.h b/reactos/include/psdk/gdiplusgpstubs.h index e2f8ab7e0ce..bb7c47f3a5a 100644 --- a/reactos/include/psdk/gdiplusgpstubs.h +++ b/reactos/include/psdk/gdiplusgpstubs.h @@ -21,7 +21,6 @@ #ifdef __cplusplus -class GpGraphics {}; class GpGraphics {}; class GpBrush {}; class GpSolidFill : public GpBrush {}; @@ -86,5 +85,6 @@ typedef Point GpPoint; typedef WrapMode GpWrapMode; typedef Color GpColor; typedef FlushIntention GpFlushIntention; +typedef CoordinateSpace GpCoordinateSpace; #endif diff --git a/reactos/include/psdk/gdiplustypes.h b/reactos/include/psdk/gdiplustypes.h index 29616e9d34f..4f97432bc64 100644 --- a/reactos/include/psdk/gdiplustypes.h +++ b/reactos/include/psdk/gdiplustypes.h @@ -236,6 +236,12 @@ typedef struct Rect INT Height; } Rect; +typedef struct CharacterRange +{ + INT First; + INT Length; +} CharacterRange; + typedef enum Status Status; #endif /* end of c typedefs */ diff --git a/reactos/include/psdk/ntgdi.h b/reactos/include/psdk/ntgdi.h index b7239f9b6e5..751c7685663 100644 --- a/reactos/include/psdk/ntgdi.h +++ b/reactos/include/psdk/ntgdi.h @@ -2843,6 +2843,7 @@ NtGdiFullscreenControl( W32KAPI DWORD +APIENTRY NtGdiGetCharSet( IN HDC hdc ); @@ -2897,6 +2898,7 @@ NtGdiQueryFontAssocInfo( #if (_WIN32_WINNT >= 0x0500) W32KAPI DWORD +APIENTRY NtGdiGetFontUnicodeRanges( IN HDC hdc, OUT OPTIONAL LPGLYPHSET pgs @@ -2906,6 +2908,7 @@ NtGdiGetFontUnicodeRanges( #ifdef LANGPACK W32KAPI BOOL +APIENTRY NtGdiGetRealizationInfo( IN HDC hdc, OUT PREALIZATION_INFO pri, @@ -2915,6 +2918,7 @@ NtGdiGetRealizationInfo( W32KAPI BOOL +APIENTRY NtGdiAddRemoteMMInstanceToDC( IN HDC hdc, IN DOWNLOADDESIGNVECTOR *pddv, @@ -3518,6 +3522,7 @@ NtGdiEngCheckAbort( W32KAPI DHPDEV +APIENTRY NtGdiGetDhpdev( IN HDEV hdev ); diff --git a/reactos/include/psdk/shellapi.h b/reactos/include/psdk/shellapi.h index e952d5a0dff..0ec5510a089 100644 --- a/reactos/include/psdk/shellapi.h +++ b/reactos/include/psdk/shellapi.h @@ -304,6 +304,10 @@ typedef struct _SHNAMEMAPPINGW { } SHNAMEMAPPINGW, *LPSHNAMEMAPPINGW; #include +#define SHERB_NOCONFIRMATION 0x1 +#define SHERB_NOPROGRESSUI 0x2 +#define SHERB_NOSOUND 0x4 + LPWSTR * WINAPI CommandLineToArgvW(LPCWSTR,int*); void WINAPI DragAcceptFiles(HWND,BOOL); void WINAPI DragFinish(HDROP); diff --git a/reactos/include/psdk/shlguid.h b/reactos/include/psdk/shlguid.h index e76a6ddb548..49060f374dc 100644 --- a/reactos/include/psdk/shlguid.h +++ b/reactos/include/psdk/shlguid.h @@ -116,7 +116,8 @@ DEFINE_GUID(CLSID_ControlPanel, 0x21EC2020, 0x3AEA, 0x1069, 0xA2, 0xDD, 0x08, 0x DEFINE_GUID(CLSID_Printers, 0x2227A280, 0x3AEA, 0x1069, 0xA2, 0xDE, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D); DEFINE_GUID(CLSID_MyDocuments, 0x450d8fba, 0xad25, 0x11d0, 0x98, 0xa8, 0x08, 0x00, 0x36, 0x1b, 0x11, 0x03); DEFINE_GUID(CLSID_FolderShortcut, 0x0AFACED1, 0xE828, 0x11D1, 0x91, 0x87, 0xB5, 0x32, 0xF1, 0xE9, 0x57, 0x5D); - +DEFINE_GUID(CLSID_FontsFolderShortcut, 0xD20EA4E1, 0x3957, 0x11D2, 0xA4, 0x0B, 0x0C, 0x50, 0x20, 0x52, 0x41,0x52); +DEFINE_GUID(CLSID_AdminFolderShortcut, 0xD20EA4E1, 0x3957, 0x11D2, 0xA4, 0x0B, 0x0C, 0x50, 0x20, 0x52, 0x41, 0x53); DEFINE_GUID(IID_IQueryAssociations, 0xc46ca590, 0x3c3f, 0x11d2, 0xbe, 0xe6, 0x00, 0x00, 0xf8, 0x05, 0xca, 0x57); DEFINE_GUID(CLSID_DragDropHelper, 0x4657278a, 0x411b, 0x11d2, 0x83, 0x9a, 0x00, 0xc0, 0x4f, 0xd9, 0x18, 0xd0); diff --git a/reactos/include/psdk/winbase.h b/reactos/include/psdk/winbase.h index fdb865c6160..28ece8ba31d 100644 --- a/reactos/include/psdk/winbase.h +++ b/reactos/include/psdk/winbase.h @@ -2141,7 +2141,7 @@ BOOL WINAPI UnlockFile(HANDLE,DWORD,DWORD,DWORD,DWORD); BOOL WINAPI UnlockFileEx(HANDLE,DWORD,DWORD,DWORD,LPOVERLAPPED); #define UnlockResource(h) (h) #define UnlockSegment(w) GlobalUnfix((HANDLE)(w)) /* Obsolete: Has no effect. */ -BOOL WINAPI UnmapViewOfFile(PVOID); +BOOL WINAPI UnmapViewOfFile(LPCVOID); #if (_WIN32_WINNT >= 0x0500) BOOL WINAPI UnregisterWait(HANDLE); BOOL WINAPI UnregisterWaitEx(HANDLE,HANDLE); diff --git a/reactos/include/psdk/winnt.h b/reactos/include/psdk/winnt.h index d9bf6aa3c4b..586f09c6ef0 100644 --- a/reactos/include/psdk/winnt.h +++ b/reactos/include/psdk/winnt.h @@ -2035,7 +2035,7 @@ typedef struct _LDT_ENTRY #endif /* FIXME: add more machines */ -#if defined(__i386__) && !defined(__PowerPC__) +#if defined(_X86_) && !defined(__PowerPC__) #define SIZE_OF_80387_REGISTERS 80 #define CONTEXT_i386 0x10000 #define CONTEXT_i486 0x10000 diff --git a/reactos/include/reactos/arc/arc.h b/reactos/include/reactos/arc/arc.h index f1401bf76ec..b57001bae81 100644 --- a/reactos/include/reactos/arc/arc.h +++ b/reactos/include/reactos/arc/arc.h @@ -412,7 +412,8 @@ typedef struct _FIRMWARE_INFORMATION_LOADER_BLOCK { ULONG FirmwareTypeEfi:1; ULONG Reserved:31; - union { + union + { EFI_FIRMWARE_INFORMATION EfiInformation; PCAT_FIRMWARE_INFORMATION PcatInformation; } u; @@ -447,7 +448,7 @@ typedef struct _LOADER_PARAMETER_BLOCK { I386_LOADER_BLOCK I386; ALPHA_LOADER_BLOCK Alpha; - IA64_LOADER_BLOCK Ia64; + IA64_LOADER_BLOCK IA64; PPC_LOADER_BLOCK PowerPC; ARM_LOADER_BLOCK Arm; } u; diff --git a/reactos/include/reactos/arc/setupblk.h b/reactos/include/reactos/arc/setupblk.h index 7edc13e04c6..4ee17414787 100644 --- a/reactos/include/reactos/arc/setupblk.h +++ b/reactos/include/reactos/arc/setupblk.h @@ -1,6 +1,12 @@ #ifndef _SETUPBLK_ #define _SETUPBLK_ +// +// Setup Flags +// +#define SETUPLDR_TEXT_MODE 0x1 +#define SETUPLDR_REMOTE_BOOT 0x2 + // // Type of file described in DETECTED_DEVICE_FILE // diff --git a/reactos/include/reactos/idl/lsa.idl b/reactos/include/reactos/idl/lsa.idl index 1f02f1bf651..b886527505c 100644 --- a/reactos/include/reactos/idl/lsa.idl +++ b/reactos/include/reactos/idl/lsa.idl @@ -2,9 +2,592 @@ * Local Security Authority interface definition */ -#include "include/reactos/idl/wtypes.idl" +#include -#define LSA_HANDLE unsigned long +typedef [context_handle] unsigned long LSAPR_HANDLE; +typedef LSAPR_HANDLE *PLSAPR_HANDLE; + +cpp_quote("#ifndef _WINNT_H"); +typedef LARGE_INTEGER LUID; +cpp_quote("#endif"); + +cpp_quote("#ifndef _NTDEF_"); + +typedef long NTSTATUS; + +typedef struct _STRING { + WORD Length; + WORD MaximumLength; + [size_is(MaximumLength), length_is(Length)] LPSTR Buffer; +} STRING, *PSTRING; + +cpp_quote("#endif"); + +typedef struct _LSAPR_ACL { + BYTE AclRevision; + BYTE Sbz1; + WORD AclSize; + [size_is(AclSize - 4)] BYTE Dummy1[*]; +} LSAPR_ACL, *PLSAPR_ACL; + +typedef WORD SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL; + +typedef struct _LSAPR_SECURITY_DESCRIPTOR { + BYTE Revision; + BYTE Sbz1; + SECURITY_DESCRIPTOR_CONTROL Control; + PRPC_SID Owner; + PRPC_SID Group; + LSAPR_ACL *Sacl; + /* FIXME: should be PLSAPR_ACL Sacl; */ + LSAPR_ACL *Dacl; + /* FIXME: should be PLSAPR_ACL Dacl; */ +} LSAPR_SECURITY_DESCRIPTOR, *PLSAPR_SECURITY_DESCRIPTOR; + +cpp_quote("#if 0"); + +typedef enum _SECURITY_IMPERSONATION_LEVEL { + SecurityAnonymous = 0, + SecurityIdentification, + SecurityImpersonation, + SecurityDelegation, +} SECURITY_IMPERSONATION_LEVEL, *PSECURITY_IMPERSONATION_LEVEL; + +typedef BYTE SECURITY_CONTEXT_TRACKING_MODE, *PSECURITY_CONTEXT_TRACKING_MODE; + +typedef struct _SECURITY_QUALITY_OF_SERVICE { + DWORD Length; + SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; + SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode; + BYTE EffectiveOnly; +} SECURITY_QUALITY_OF_SERVICE, *PSECURITY_QUALITY_OF_SERVICE; + +cpp_quote("#endif"); + +typedef struct _LSAPR_OBJECT_ATTRIBUTES { + DWORD Length; + BYTE *RootDirectory; + PSTRING ObjectName; + DWORD Attributes; + PLSAPR_SECURITY_DESCRIPTOR SecurityDescriptor; + PSECURITY_QUALITY_OF_SERVICE SecurityQualityOfService; +} LSAPR_OBJECT_ATTRIBUTES, *PLSAPR_OBJECT_ATTRIBUTES; + +typedef unsigned long ACCESS_MASK; + +typedef unsigned long SECURITY_INFORMATION; + +typedef struct _LSAPR_POLICY_PRIVILEGE_DEF { + RPC_UNICODE_STRING Name; + LUID LocalValue; +} LSAPR_POLICY_PRIVILEGE_DEF, *PLSAPR_POLICY_PRIVILEGE_DEF; + +typedef struct _LSAPR_PRIVILEGE_ENUM_BUFFER { + DWORD Entries; + [size_is(Entries)] PLSAPR_POLICY_PRIVILEGE_DEF Privileges; +} LSAPR_PRIVILEGE_ENUM_BUFFER, *PLSAPR_PRIVILEGE_ENUM_BUFFER; + +typedef struct _LSAPR_ACCOUNT_INFORMATION { + PRPC_SID Sid; +} LSAPR_ACCOUNT_INFORMATION, *PLSAPR_ACCOUNT_INFORMATION; + +typedef struct _LSAPR_ACCOUNT_ENUM_BUFFER { + DWORD EntriesRead; + [size_is(EntriesRead)] PLSAPR_ACCOUNT_INFORMATION Information; +} LSAPR_ACCOUNT_ENUM_BUFFER, *PLSAPR_ACCOUNT_ENUM_BUFFER; + +cpp_quote("#ifndef _NTSECAPI_H"); +typedef RPC_UNICODE_STRING LSA_UNICODE_STRING, *PLSA_UNICODE_STRING; +cpp_quote("#endif"); + +typedef struct _LSAPR_TRUST_INFORMATION { + RPC_UNICODE_STRING Name; + PRPC_SID Sid; +} LSAPR_TRUST_INFORMATION, *PLSAPR_TRUST_INFORMATION; + +typedef struct _LSAPR_REFERENCED_DOMAIN_LIST { + DWORD Entries; + [size_is(Entries)] PLSAPR_TRUST_INFORMATION Domains; + DWORD MaxEntries; +} LSAPR_REFERENCED_DOMAIN_LIST, *PLSAPR_REFERENCED_DOMAIN_LIST; + +cpp_quote("#if 0"); + +typedef enum _SID_NAME_USE { + SidTypeUser = 1, + SidTypeGroup, + SidTypeDomain, + SidTypeAlias, + SidTypeWellKnownGroup, + SidTypeDeletedAccount, + SidTypeInvalid, + SidTypeUnknown, + SidTypeComputer, + SidTypeLabel, +} SID_NAME_USE, *PSID_NAME_USE; + +cpp_quote("#endif"); + +cpp_quote("#ifndef _NTDEF_"); + +typedef struct _LSA_TRANSLATED_SID { + SID_NAME_USE Use; + DWORD RelativeId; + LONG DomainIndex; +} LSA_TRANSLATED_SID, *PLSA_TRANSLATED_SID; + +cpp_quote("#endif"); + +typedef struct _LSAPR_TRANSLATED_SIDS { + DWORD Entries; + [size_is(Entries)] PLSA_TRANSLATED_SID Sids; +} LSAPR_TRANSLATED_SIDS, *PLSAPR_TRANSLATED_SIDS; + +typedef enum _LSAP_LOOKUP_LEVEL { + LsapLookupWksta = 1, + LsapLookupPDC, + LsapLookupTDL, + LsapLookupGC, + LsapLookupXForestReferral, + LsapLookupXForestResolve, + LsapLookupRODCReferralToFullDC, +} LSAP_LOOKUP_LEVEL, *PLSAP_LOOKUP_LEVEL; + +typedef struct _LSAPR_SID_INFORMATION { + PRPC_SID Sid; +} LSAPR_SID_INFORMATION, *PLSAPR_SID_INFORMATION; + +typedef struct _LSAPR_SID_ENUM_BUFFER { + DWORD Entries; + [size_is(Entries)] PLSAPR_SID_INFORMATION SidInfo; +} LSAPR_SID_ENUM_BUFFER, *PLSAPR_SID_ENUM_BUFFER; + +typedef struct _LSAPR_TRANSLATED_NAME { + SID_NAME_USE Use; + RPC_UNICODE_STRING Name; + LONG DomainIndex; +} LSAPR_TRANSLATED_NAME, *PLSAPR_TRANSLATED_NAME; + +typedef struct _LSAPR_TRANSLATED_NAMES { + DWORD Entries; + [size_is(Entries)] PLSAPR_TRANSLATED_NAME Names; +} LSAPR_TRANSLATED_NAMES, *PLSAPR_TRANSLATED_NAMES; + +typedef struct _LSAPR_TRANSLATED_NAME_EX { + SID_NAME_USE Use; + RPC_UNICODE_STRING Name; + LONG DomainIndex; + DWORD Flags; +} LSAPR_TRANSLATED_NAME_EX, *PLSAPR_TRANSLATED_NAME_EX; + +typedef struct _LSAPR_TRANSLATED_NAMES_EX { + DWORD Entries; + [size_is(Entries)] PLSAPR_TRANSLATED_NAME_EX Names; +} LSAPR_TRANSLATED_NAMES_EX, *PLSAPR_TRANSLATED_NAMES_EX; + +typedef struct _LSAPR_TRANSLATED_SID_EX { + SID_NAME_USE Use; + DWORD RelativeId; + LONG DomainIndex; + DWORD Flags; +} LSAPR_TRANSLATED_SID_EX, *PLSAPR_TRANSLATED_SID_EX; + +typedef struct _LSAPR_TRANSLATED_SIDS_EX { + DWORD Entries; + [size_is(Entries)] PLSAPR_TRANSLATED_SID_EX Sids; +} LSAPR_TRANSLATED_SIDS_EX, *PLSAPR_TRANSLATED_SIDS_EX; + +typedef struct _LSAPR_TRANSLATED_SID_EX2 { + SID_NAME_USE Use; + PRPC_SID Sid; + LONG DomainIndex; + DWORD Flags; +} LSAPR_TRANSLATED_SID_EX2, *PLSAPR_TRANSLATED_SID_EX2; + +typedef struct _LSAPR_TRANSLATED_SIDS_EX2 { + DWORD Entries; + [size_is(Entries)] PLSAPR_TRANSLATED_SID_EX2 Sids; +} LSAPR_TRANSLATED_SIDS_EX2, *PLSAPR_TRANSLATED_SIDS_EX2; + +typedef LSAPR_TRUST_INFORMATION LSAPR_TRUSTED_DOMAIN_INFORMATION_BASIC; + +typedef struct _LSAPR_SR_SECURITY_DESCRIPTOR { + DWORD Length; + [size_is(Length)] BYTE *SecurityDescriptor; +} LSAPR_SR_SECURITY_DESCRIPTOR, *PLSAPR_SR_SECURITY_DESCRIPTOR; + +cpp_quote("#ifndef _NTSECAPI_H"); +typedef enum _POLICY_INFORMATION_CLASS { + PolicyAuditLogInformation = 1, + PolicyAuditEventsInformation, + PolicyPrimaryDomainInformation, + PolicyPdAccountInformation, + PolicyAccountDomainInformation, + PolicyLsaServerRoleInformation, + PolicyReplicaSourceInformation, + PolicyDefaultQuotaInformation, + PolicyModificationInformation, + PolicyAuditFullSetInformation, + PolicyAuditFullQueryInformation, + PolicyDnsDomainInformation, + PolicyDnsDomainInformationInt, + PolicyLocalAccountDomainInformation, + PolicyLastEntry, +} POLICY_INFORMATION_CLASS, *PPOLICY_INFORMATION_CLASS; + +typedef struct _POLICY_AUDIT_LOG_INFO { + DWORD AuditLogPercentFull; + DWORD MaximumLogSize; + LARGE_INTEGER AuditRetentionPeriod; + BYTE AuditLogFullShutdownInProgress; + LARGE_INTEGER TimeToShutdown; + DWORD NextAuditRecordId; +} POLICY_AUDIT_LOG_INFO, *PPOLICY_AUDIT_LOG_INFO; +cpp_quote("#endif"); + +typedef struct _LSAPR_POLICY_AUDIT_EVENTS_INFO { + BYTE AuditingMode; + [size_is(MaximumAuditEventCount)] DWORD *EventAuditingOptions; + DWORD MaximumAuditEventCount; +} LSAPR_POLICY_AUDIT_EVENTS_INFO, *PLSAPR_POLICY_AUDIT_EVENTS_INFO; + +typedef struct _LSAPR_POLICY_PRIMARY_DOM_INFO { + RPC_UNICODE_STRING Name; + PRPC_SID Sid; +} LSAPR_POLICY_PRIMARY_DOM_INFO, *PLSAPR_POLICY_PRIMARY_DOM_INFO; + +typedef struct _LSAPR_POLICY_ACCOUNT_DOM_INFO { + RPC_UNICODE_STRING DomainName; + PRPC_SID Sid; +} LSAPR_POLICY_ACCOUNT_DOM_INFO, *PLSAPR_POLICY_ACCOUNT_DOM_INFO; + +typedef struct _LSAPR_POLICY_PD_ACCOUNT_INFO { + RPC_UNICODE_STRING Name; +} LSAPR_POLICY_PD_ACCOUNT_INFO, *PLSAPR_POLICY_PD_ACCOUNT_INFO; + +cpp_quote("#ifndef _NTSECAPI_H"); +typedef enum _POLICY_LSA_SERVER_ROLE { + PolicyServerRoleBackup = 2, + PolicyServerRolePrimary, +} POLICY_LSA_SERVER_ROLE, *PPOLICY_LSA_SERVER_ROLE; + +typedef struct _POLICY_LSA_SERVER_ROLE_INFO { + POLICY_LSA_SERVER_ROLE LsaServerRole; +} POLICY_LSA_SERVER_ROLE_INFO, *PPOLICY_LSA_SERVER_ROLE_INFO; +cpp_quote("#endif"); + +typedef struct _POLICY_LSA_REPLICA_SRCE_INFO { + RPC_UNICODE_STRING ReplicaSource; + RPC_UNICODE_STRING ReplicaAccountName; +} POLICY_LSA_REPLICA_SRCE_INFO, *PPOLICY_LSA_REPLICA_SRCE_INFO; + +cpp_quote("#ifndef _WINNT_H"); +typedef struct _QUOTA_LIMITS { + INT64 PagedPoolLimit; + INT64 NonPagedPoolLimit; + INT64 MinimumWorkingSetSize; + INT64 MaximumWorkingSetSize; + INT64 PagefileLimit; + LARGE_INTEGER TimeLimit; +} QUOTA_LIMITS, *PQUOTA_LIMITS; +cpp_quote("#endif"); + +cpp_quote("#ifndef _NTSECAPI_H"); +typedef struct _POLICY_DEFAULT_QUOTA_INFO { + QUOTA_LIMITS QuotaLimits; +} POLICY_DEFAULT_QUOTA_INFO, *PPOLICY_DEFAULT_QUOTA_INFO; + +typedef struct _POLICY_MODIFICATION_INFO { + LARGE_INTEGER ModifiedId; + LARGE_INTEGER DatabaseCreationTime; +} POLICY_MODIFICATION_INFO, *PPOLICY_MODIFICATION_INFO; +cpp_quote("#endif"); + +typedef struct _POLICY_FULL_SET_INFO { + BOOL ShutDownOnFull; +} POLICY_FULL_SET_INFO, *PPOLICY_FULL_SET_INFO; + +cpp_quote("#ifndef _NTSECAPI_H"); +typedef struct _POLICY_AUDIT_FULL_QUERY_INFO { + BOOL ShutDownOnFull; + BOOL LogIsFull; +} POLICY_AUDIT_FULL_QUERY_INFO, *PPOLICY_AUDIT_FULL_QUERY_INFO; +cpp_quote("#endif"); + +typedef struct _LSAPR_POLICY_DNS_DOMAIN_INFO { + RPC_UNICODE_STRING Name; + RPC_UNICODE_STRING DnsDomainName; + RPC_UNICODE_STRING DnsForestName; + GUID DomainGuid; + PRPC_SID Sid; +} LSAPR_POLICY_DNS_DOMAIN_INFO, *PLSAPR_POLICY_DNS_DOMAIN_INFO; + +/*typedef +[switch_type(POLICY_INFORMATION_CLASS)] union _LSAPR_POLICY_INFORMATION { + [case(PolicyAuditLogInformation)] POLICY_AUDIT_LOG_INFO PolicyAuditLogInfo; + [case(PolicyAuditEventsInformation)] POLICY_AUDIT_EVENTS_INFO PolicyAuditEventsInfo; + [case(PolicyPrimaryDomainInformation)] POLICY_PRIMARY_DOM_INFO PolicyPrimaryDomInfo; + [case(PolicyPdAccountInformation)] POLICY_PD_ACCOUNT_INFO PolicyPdAccountInfo; + [case(PolicyAccountDomainInformation)] POLICY_ACCOUNT_DOM_INFO PolicyAccountDomainInfo; + [case(PolicyLsaServerRoleInformation)] POLICY_LSA_SERVER_ROLE_INFO PolicyServerRoleInfo; + [case(PolicyReplicaSourceInformation)] POLICY_REPLICA_SRCE_INFO PolicyReplicaSourceInfo; + [case(PolicyDefaultQuotaInformation)] POLICY_DEFAULT_QUOTA_INFO PolicyDefaultQuotaInfo; + [case(PolicyModificationInformation)] POLICY_MODIFICATION_INFO PolicyModificationInfo; + [case(PolicyAuditFullSetInformation)] POLICY_AUDIT_FULL_SET_INFO PolicyAuditFullSetInfo; + [case(PolicyAuditFullQueryInformation)] POLICY_AUDIT_FULL_QUERY_INFO PolicyAuditFullQueryInfo; + [case(PolicyDnsDomainInformation)] LSAPR_DNS_DOMAIN_INFO PolicyDnsDomainInfo; + [case(PolicyDnsDomainInformationInt)] LSAPR_DNS_DOMAIN_INFO PolicyDnsDomainInfoInt; + [case(PolicyLocalAccountDomainInformation)] LSAPR_POLICY_ACCOUNT_DOM_INFO PolicyLocalAccountDomainInfo; +} LSAPR_POLICY_INFORMATION, *PLSAPR_POLICY_INFORMATION;*/ + +typedef struct _LSAPR_TRUSTED_ENUM_BUFFER { + DWORD EntriesRead; + [size_is(EntriesRead)] PLSAPR_TRUST_INFORMATION Information; +} LSAPR_TRUSTED_ENUM_BUFFER, *PLSAPR_TRUSTED_ENUM_BUFFER; + +cpp_quote("#ifndef _NTSECAPI_H"); +typedef enum _TRUSTED_INFORMATION_CLASS { + TrustedDomainNameInformation = 1, + TrustedControllersInformation, + TrustedPosixOffsetInformation, + TrustedPasswordInformation, + TrustedDomainInformationBasic, + TrustedDomainInformationEx, + TrustedDomainAuthInformation, + TrustedDomainFullInformation, + TrustedDomainAuthInformationInternal, + TrustedDomainFullInformationInternal, + TrustedDomainInformationEx2Internal, + TrustedDomainFullInformation2Internal, + TrustedDomainSupportedEncryptionTypes, +} TRUSTED_INFORMATION_CLASS, *PTRUSTED_INFORMATION_CLASS; +cpp_quote("#endif"); + +typedef struct _LSAPR_TRUSTED_DOMAIN_NAME_INFO { + RPC_UNICODE_STRING Name; +} LSAPR_TRUSTED_DOMAIN_NAME_INFO, *PLSAPR_TRUSTED_DOMAIN_NAME_INFO; + +typedef struct _LSAPR_TRUSTED_CONTROLLERS_INFO { + DWORD Entries; + [size_is(Entries)] PRPC_UNICODE_STRING Names; +} LSAPR_TRUSTED_CONTROLLERS_INFO, *PLSAPR_TRUSTED_CONTROLLERS_INFO; + +cpp_quote("#ifndef _NTSECAPI_H"); +typedef struct _TRUSTED_POSIX_OFFSET_INFO { + DWORD Offset; +} TRUSTED_POSIX_OFFSET_INFO, *PTRUSTED_POSIX_OFFSET_INFO; +cpp_quote("#endif"); + +typedef struct _LSAPR_CR_CIPHER_VALUE { + DWORD Length; + DWORD MaximumLength; + [size_is(MaximumLength), length_is(Length)] BYTE *Buffer; +} LSAPR_CR_CIPHER_VALUE, *PLSAPR_CR_CIPHER_VALUE; + +typedef struct _LSAPR_TRUSTED_PASSWORD_INFO { + PLSAPR_CR_CIPHER_VALUE Password; + PLSAPR_CR_CIPHER_VALUE OldPassword; +} LSAPR_TRUSTED_PASSWORD_INFO, *PLSAPR_TRUSTED_PASSWORD_INFO; + +typedef struct _LSAPR_USER_RIGHT_SET { + DWORD Entries; + [size_is(Entries)] PRPC_UNICODE_STRING UserRights; +} LSAPR_USER_RIGHT_SET, *PLSAPR_USER_RIGHT_SET; + +cpp_quote("#ifndef _NTSECAPI_H"); +typedef enum _POLICY_DOMAIN_INFORMATION_CLASS { + PolicyDomainQualityOfServiceInformation = 1, + PolicyDomainEfsInformation = 2, + PolicyDomainKerberosTicketInformation = 3, +} POLICY_DOMAIN_INFORMATION_CLASS, *PPOLICY_DOMAIN_INFORMATION_CLASS; + +typedef struct _POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO { + DWORD QualityOfService; +} POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO, *PPOLICY_DOMAIN_QUALITY_OF_SERVICE_INFO; +cpp_quote("#endif"); + +typedef struct _LSAPR_POLICY_DOMAIN_EFS_INFO { + DWORD InfoLength; + [size_is(InfoLength)] BYTE *EfsBlob; +} LSAPR_POLICY_DOMAIN_EFS_INFO, *PLSAPR_POLICY_DOMAIN_EFS_INFO; + +cpp_quote("#ifndef _NTSECAPI_H"); +typedef struct _POLICY_DOMAIN_KERBEROS_TICKET_INFO { + DWORD AuthenticationOptions; + LARGE_INTEGER MaxServiceTicketAge; + LARGE_INTEGER MaxTicketAge; + LARGE_INTEGER MaxRenewAge; + LARGE_INTEGER MaxClockSkew; + LARGE_INTEGER Reserved; +} POLICY_DOMAIN_KERBEROS_TICKET_INFO, *PPOLICY_DOMAIN_KERBEROS_TICKET_INFO; +cpp_quote("#endif"); + +typedef +[switch_type(POLICY_DOMAIN_INFORMATION_CLASS)] union _LSAPR_POLICY_DOMAIN_INFORMATION { + [case(PolicyDomainQualityOfServiceInformation)] POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO PolicyDomainQualityOfServiceInfo; + [case(PolicyDomainEfsInformation)] LSAPR_POLICY_DOMAIN_EFS_INFO PolicyDomainEfsInfo; + [case(PolicyDomainKerberosTicketInformation)] POLICY_DOMAIN_KERBEROS_TICKET_INFO PolicyDomainKerbTicketInfo; +} LSAPR_POLICY_DOMAIN_INFORMATION, *PLSAPR_POLICY_DOMAIN_INFORMATION; + +typedef struct _LSAPR_TRUSTED_DOMAIN_INFORMATION_EX { + RPC_UNICODE_STRING Name; + RPC_UNICODE_STRING FlatName; + PRPC_SID Sid; + DWORD TrustDirection; + DWORD TrustType; + DWORD TrustAttributes; +} LSAPR_TRUSTED_DOMAIN_INFORMATION_EX, *PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX; + +typedef struct _LSAPR_TRUSTED_ENUM_BUFFER_EX { + DWORD EntriesRead; + [size_is(EntriesRead)] PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX EnumerationBuffer; +} LSAPR_TRUSTED_ENUM_BUFFER_EX, *PLSAPR_TRUSTED_ENUM_BUFFER_EX; + +typedef struct _LSAPR_TRUSTED_DOMAIN_INFORMATION_EX2 { + RPC_UNICODE_STRING Name; + RPC_UNICODE_STRING FlatName; + PRPC_SID Sid; + DWORD TrustDirection; + DWORD TrustType; + DWORD TrustAttributes; + DWORD ForestTrustLength; + [size_is(ForestTrustLength)] BYTE *ForestTrustInfo; +} LSAPR_TRUSTED_DOMAIN_INFORMATION_EX2, *PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX2; + +typedef struct _LSAPR_AUTH_INFORMATION { + LARGE_INTEGER LastUpdateTime; + DWORD AuthType; + DWORD AuthInfoLength; + [size_is(AuthInfoLength)] BYTE *AuthInfo; +} LSAPR_AUTH_INFORMATION, *PLSAPR_AUTH_INFORMATION; + +typedef struct _LSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION { + DWORD IncomingAuthInfos; + PLSAPR_AUTH_INFORMATION IncomingAuthenticationInformation; + PLSAPR_AUTH_INFORMATION IncomingPreviousAuthenticationInformation; + DWORD OutgoingAuthInfos; + PLSAPR_AUTH_INFORMATION OutgoingAuthenticationInformation; + PLSAPR_AUTH_INFORMATION OutgoingPreviousAuthenticationInformation; +} LSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION, *PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION; + +typedef struct _LSAPR_TRUSTED_DOMAIN_AUTH_BLOB { + DWORD AuthSize; + [size_is(AuthSize)] BYTE *AuthBlob; +} LSAPR_TRUSTED_DOMAIN_AUTH_BLOB, *PLSAPR_TRUSTED_DOMAIN_AUTH_BLOB; + +typedef struct _LSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION_INTERNAL { + LSAPR_TRUSTED_DOMAIN_AUTH_BLOB AuthBlob; +} LSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION_INTERNAL, *PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION_INTERNAL; + +typedef struct _LSAPR_TRUSTED_DOMAIN_FULL_INFORMATION { + LSAPR_TRUSTED_DOMAIN_INFORMATION_EX Information; + TRUSTED_POSIX_OFFSET_INFO PosixOffset; + LSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION AuthInformation; +} LSAPR_TRUSTED_DOMAIN_FULL_INFORMATION, *PLSAPR_TRUSTED_DOMAIN_FULL_INFORMATION; + +typedef struct _LSAPR_TRUSTED_DOMAIN_FULL_INFORMATION_INTERNAL { + LSAPR_TRUSTED_DOMAIN_INFORMATION_EX Information; + TRUSTED_POSIX_OFFSET_INFO PosixOffset; + LSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION_INTERNAL AuthInformation; +} LSAPR_TRUSTED_DOMAIN_FULL_INFORMATION_INTERNAL, *PLSAPR_TRUSTED_DOMAIN_FULL_INFORMATION_INTERNAL; + +typedef struct _LSAPR_TRUSTED_DOMAIN_FULL_INFORMATION2 { + LSAPR_TRUSTED_DOMAIN_INFORMATION_EX2 Information; + TRUSTED_POSIX_OFFSET_INFO PosixOffset; + LSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION AuthInformation; +} LSAPR_TRUSTED_DOMAIN_FULL_INFORMATION2, *PLSAPR_TRUSTED_DOMAIN_FULL_INFORMATION2; + +typedef struct _TRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES { + DWORD SupportedEncryptionTypes; +} TRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES, *PTRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES; + +typedef +[switch_type(TRUSTED_INFORMATION_CLASS)] union _LSAPR_TRUSTED_DOMAIN_INFO { + [case(TrustedDomainNameInformation)] LSAPR_TRUSTED_DOMAIN_NAME_INFO TrustedDomainNameInfo; + [case(TrustedControllersInformation)] LSAPR_TRUSTED_CONTROLLERS_INFO TrustedControllersInfo; + [case(TrustedPosixOffsetInformation)] TRUSTED_POSIX_OFFSET_INFO TrustedPosixOffsetInfo; + [case(TrustedPasswordInformation)] LSAPR_TRUSTED_PASSWORD_INFO TrustedPasswordInfo; + [case(TrustedDomainInformationBasic)] LSAPR_TRUSTED_DOMAIN_INFORMATION_BASIC TrustedDomainInfoBasic; + [case(TrustedDomainInformationEx)] LSAPR_TRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInfoEx; + [case(TrustedDomainAuthInformation)] LSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION TrustedAuthInfo; + [case(TrustedDomainFullInformation)] LSAPR_TRUSTED_DOMAIN_FULL_INFORMATION TrustedFullInfo; + [case(TrustedDomainAuthInformationInternal)] LSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION_INTERNAL TrustedAuthInfoInternal; + [case(TrustedDomainFullInformationInternal)] LSAPR_TRUSTED_DOMAIN_FULL_INFORMATION_INTERNAL TrustedFullInfoInternal; + [case(TrustedDomainInformationEx2Internal)] LSAPR_TRUSTED_DOMAIN_INFORMATION_EX2 TrustedDomainInfoEx2; + [case(TrustedDomainFullInformation2Internal)] LSAPR_TRUSTED_DOMAIN_FULL_INFORMATION2 TrustedFullInfo2; + [case(TrustedDomainSupportedEncryptionTypes)] TRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES TrustedDomainSETs; +} LSAPR_TRUSTED_DOMAIN_INFO, *PLSAPR_TRUSTED_DOMAIN_INFO; + +cpp_quote("#ifndef _WINNT_H"); +typedef struct _LUID { + ULONG LowPart; + LONG HightPart; +} LUID, *PLUID; +cpp_quote("#endif"); + +typedef struct _LSAPR_LUID_AND_ATTRIBUTES { + LUID Luid; + DWORD Attributes; +} LSAPR_LUID_AND_ATTRIBUTES, *PLSAPR_LUID_AND_ATTRIBUTES; + +typedef struct _LSAPR_PRIVILEGE_SET { + DWORD PrivilegeCount; + DWORD Control; + [size_is(PrivilegeCount)] LSAPR_LUID_AND_ATTRIBUTES Privilege[*]; +} LSAPR_PRIVILEGE_SET, *PLSAPR_PRIVILEGE_SET; + +cpp_quote("#ifndef _NTSECAPI_H"); +typedef enum _LSA_FOREST_TRUST_RECORD_TYPE { + ForestTrustTopLevelName = 0, + ForestTrustTopLevelNameEx = 1, + ForestTrustDomainInfo = 2, +} LSA_FOREST_TRUST_RECORD_TYPE; + +typedef struct _LSA_FOREST_TRUST_BINARY_DATA { + DWORD Length; + [size_is(Length)] BYTE *Buffer; +} LSA_FOREST_TRUST_BINARY_DATA, *PLSA_FOREST_TRUST_BINARY_DATA; + +typedef struct _LSA_FOREST_TRUST_DOMAIN_INFO { + PRPC_SID Sid; + LSA_UNICODE_STRING DnsName; + LSA_UNICODE_STRING NetbiosName; +} LSA_FOREST_TRUST_DOMAIN_INFO, *PLSA_FOREST_TRUST_DOMAIN_INFO; + +typedef struct _LSA_FOREST_TRUST_RECORD { + DWORD Flags; + LSA_FOREST_TRUST_RECORD_TYPE ForestTrustType; + LARGE_INTEGER Time; + [switch_type(LSA_FOREST_TRUST_RECORD_TYPE), switch_is(ForestTrustType)] union { + [case(ForestTrustTopLevelName, ForestTrustTopLevelNameEx)] LSA_UNICODE_STRING TopLevelName; + [case(ForestTrustDomainInfo)] LSA_FOREST_TRUST_DOMAIN_INFO DomainInfo; + [default] LSA_FOREST_TRUST_BINARY_DATA Data; + } ForestTrustData; +} LSA_FOREST_TRUST_RECORD, *PLSA_FOREST_TRUST_RECORD; + +typedef struct _LSA_FOREST_TRUST_INFORMATION { + DWORD RecordCount; + [size_is(RecordCount)] PLSA_FOREST_TRUST_RECORD *Entries; +} LSA_FOREST_TRUST_INFORMATION, *PLSA_FOREST_TRUST_INFORMATION; + +typedef enum _LSA_FOREST_TRUST_COLLISION_RECORD_TYPE { + CollisionTdo = 0, + CollisionXref, + CollisionOther, +} LSA_FOREST_TRUST_COLLISION_RECORD_TYPE; + +typedef struct _LSA_FOREST_TRUST_COLLISION_RECORD { + DWORD Index; + LSA_FOREST_TRUST_COLLISION_RECORD_TYPE Type; + DWORD Flags; + LSA_UNICODE_STRING Name; +} LSA_FOREST_TRUST_COLLISION_RECORD, *PLSA_FOREST_TRUST_COLLISION_RECORD; + +typedef struct _LSA_FOREST_TRUST_COLLISION_INFORMATION { + DWORD RecordCount; + [size_is(RecordCount)] PLSA_FOREST_TRUST_COLLISION_RECORD *Entries; +} LSA_FOREST_TRUST_COLLISION_INFORMATION, *PLSA_FOREST_TRUST_COLLISION_INFORMATION; +cpp_quote("#endif"); [ uuid(12345778-1234-abcd-ef00-0123456789ab), @@ -16,29 +599,591 @@ ] interface lsarpc { -/* - cpp_quote("#if 0") - typedef [handle, unique] wchar_t *LPWSTR; - typedef [handle, unique] char *LPSTR; - cpp_quote("#endif") - typedef [context_handle] void *LSA_HANDLE; - typedef LSA_HANDLE *PLSA_HANDLE; - typedef unsigned int NTSTATUS; -*/ - - cpp_quote("#if 0") - typedef struct _LSA_UNICODE_STRING { - unsigned short Length; - unsigned short MaximumLength; - [size_is(MaximumLength)] wchar_t *Buffer; - } LSA_UNICODE_STRING, *PLSA_UNICODE_STRING; - cpp_quote("#endif") - /* Function 0 */ - NTSTATUS LsarClose(handle_t BindingHandle, - [in] LSA_HANDLE ObjectHandle); + NTSTATUS LsarClose( + [in] handle_t hBinding, + [in, out] LSAPR_HANDLE *ObjectHandle); /* Function 1 */ - NTSTATUS LsarDelete(handle_t BindingHandle, - [in] LSA_HANDLE ObjectHandle); + NTSTATUS LsarDelete( + [in] handle_t hBinding, + [in] LSAPR_HANDLE ObjectHandle); + + /* Function 2 */ + NTSTATUS LsarEnumeratePrivileges( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in, out] DWORD *EnumerationContext, + [out] PLSAPR_PRIVILEGE_ENUM_BUFFER EnumerationBuffer, + [in] DWORD PreferedMaximumLength); + + /* Function 3 */ + NTSTATUS LsarQuerySecurityObject( + [in] handle_t hBinding, + [in] LSAPR_HANDLE ObjectHandle, + [in] SECURITY_INFORMATION SecurityInformation, + [out] PLSAPR_SR_SECURITY_DESCRIPTOR *SecurityDescriptor); + + /* Function 4 */ + NTSTATUS LsarSetSecurityObject( + [in] handle_t hBinding, + [in] LSAPR_HANDLE ObjectHandle, + [in] SECURITY_INFORMATION SecurityInformation, + [in] PLSAPR_SR_SECURITY_DESCRIPTOR SecurityDescriptor); + + /* Function 5 */ + NTSTATUS LsarChangePassword( + [in] handle_t hBinding, + [in] PRPC_UNICODE_STRING String1, + [in] PRPC_UNICODE_STRING String2, + [in] PRPC_UNICODE_STRING String3, + [in] PRPC_UNICODE_STRING String4, + [in] PRPC_UNICODE_STRING String5); + + /* Function 6 */ + NTSTATUS LsarOpenPolicy( + [in] handle_t hBinding, + [in, unique] LPWSTR SystemName, + [in] PLSAPR_OBJECT_ATTRIBUTES ObjectAttributes, + [in] ACCESS_MASK DesiredAccess, + [out] LSAPR_HANDLE *PolicyHandle); + + /* Function 7 */ + NTSTATUS LsarQueryInformationPolicy( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] POLICY_INFORMATION_CLASS InformationClass, + [in] unsigned long PolicyInformation); + /* FIXME: should be [in, switch_is(InformationClass)] PLSAPR_POLICY_INFORMATION PolicyInformation); */ + + /* Function 8 */ + NTSTATUS LsarSetInformationPolicy( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] POLICY_INFORMATION_CLASS InformationClass, + [out] unsigned long *PolicyInformation); + /* FIXME: should be [out, switch_is(InformationClass)] PLSAPR_POLICY_INFORMATION *PolicyInformation); */ + + /* Function 9 */ + NTSTATUS LsarClearAuditLog( + [in] handle_t hBinding, + [in] LSAPR_HANDLE ObjectHandle); + + /* Function 10 */ + NTSTATUS LsarCreateAccount( + [in] handle_t hBinding, + [in] PRPC_SID AccountSid, + [in] ACCESS_MASK DesiredAccess, + [out] LSAPR_HANDLE *AccountHandle); + + /* Function 11 */ + NTSTATUS LsarEnumerateAccounts( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in, out] DWORD *EnumerationContext, + [out] PLSAPR_ACCOUNT_ENUM_BUFFER EnumerationBuffer, + [in] DWORD PreferedMaximumLength); + + /* Function 12 */ + NTSTATUS LsarCreateTrustedDomain( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PLSAPR_TRUST_INFORMATION TrustedDomainInformation, + [in] ACCESS_MASK DesiredAccess, + [out] LSAPR_HANDLE *TrustedDomainHandle); + + /* Function 13 */ + NTSTATUS LsarEnumerateTrustedDomains( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in, out] DWORD *EnumerationContext, + [out] PLSAPR_TRUSTED_ENUM_BUFFER EnumerationBuffer, + [in] DWORD PreferedMaximumLength); + + /* Function 14 */ + NTSTATUS LsarLookupNames( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] DWORD Count, + [in, size_is(Count)] PRPC_UNICODE_STRING Names, + [out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + [in, out] PLSAPR_TRANSLATED_SIDS TranslatedSids, + [in] LSAP_LOOKUP_LEVEL LookupLevel, + [in, out] DWORD *MappedCount); + + /* Function 15 */ + NTSTATUS LsarLookupSids( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PLSAPR_SID_ENUM_BUFFER SidEnumBuffer, + [out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + [in, out] PLSAPR_TRANSLATED_NAMES TranslatedNames, + [in] LSAP_LOOKUP_LEVEL LookupLevel, + [in, out] DWORD *MappedCount); + + /* Function 16 */ + NTSTATUS LsarCreateSecret( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_UNICODE_STRING SecretName, + [in] ACCESS_MASK DesiredAccess, + [out] LSAPR_HANDLE *SecretHandle); + + /* Function 17 */ + NTSTATUS LsarOpenAccount( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_SID AccountSid, + [in] ACCESS_MASK DesiredAccess, + [out] LSAPR_HANDLE *AccountHandle); + + /* Function 18 */ + NTSTATUS LsarEnumeratePrivilegesAccount( + [in] handle_t hBinding, + [in] LSAPR_HANDLE AccountHandle, + [out] PLSAPR_PRIVILEGE_SET *Privileges); + + /* Function 19 */ + NTSTATUS LsarAddPrivilegesToAccount( + [in] handle_t hBinding, + [in] LSAPR_HANDLE AccountHandle, + [in] PLSAPR_PRIVILEGE_SET Privileges); + + /* Function 20 */ + NTSTATUS LsarRemovePrivilegesFromAccount( + [in] handle_t hBinding, + [in] LSAPR_HANDLE AccountHandle, + [in] BOOL AllPrivileges, + [in, unique] PLSAPR_PRIVILEGE_SET Privileges); + + /* Function 21 */ + NTSTATUS LsarGetQuotasForAccount( + [in] handle_t hBinding, + [in] LSAPR_HANDLE AccountHandle, + [out] PQUOTA_LIMITS QuotaLimits); + + /* Function 22 */ + NTSTATUS LsarSetQuotasForAccount( + [in] handle_t hBinding, + [in] LSAPR_HANDLE AccountHandle, + [in] PQUOTA_LIMITS QuotaLimits); + + /* Function 23 */ + NTSTATUS LsarGetSystemAccessAccount( + [in] handle_t hBinding, + [in] LSAPR_HANDLE AccountHandle, + [out] ACCESS_MASK *SystemAccess); + + /* Function 24 */ + NTSTATUS LsarSetSystemAccessAccount( + [in] handle_t hBinding, + [in] LSAPR_HANDLE AccountHandle, + [in] ACCESS_MASK SystemAccess); + + /* Function 25 */ + NTSTATUS LsarOpenTrustedDomain( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_SID TrustedDomainSid, + [in] ACCESS_MASK DesiredAccess, + [out] LSAPR_HANDLE *TrustedDomainHandle); + + /* Function 26 */ + NTSTATUS LsarQueryInfoTrustedDomain( + [in] handle_t hBinding, + [in] LSAPR_HANDLE TrustedDomainHandle, + [in] TRUSTED_INFORMATION_CLASS InformationClass, + [out, switch_is(InformationClass)] PLSAPR_TRUSTED_DOMAIN_INFO *TrustedDomainInformation); + + /* Function 27 */ + NTSTATUS LsarSetInformationTrustedDomain( + [in] handle_t hBinding, + [in] LSAPR_HANDLE TrustedDomainHandle, + [in] TRUSTED_INFORMATION_CLASS InformationClass, + [in, switch_is(InformationClass)] PLSAPR_TRUSTED_DOMAIN_INFO TrustedDomainInformation); + + /* Function 28 */ + NTSTATUS LsarOpenSecret( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_UNICODE_STRING SecretName, + [in] ACCESS_MASK DesiredAccess, + [out] LSAPR_HANDLE *SecretHandle); + + /* Function 29 */ + NTSTATUS LsarSetSecret( + [in] handle_t hBinding, + [in] LSAPR_HANDLE *SecretHandle, + [in, unique] PLSAPR_CR_CIPHER_VALUE EncryptedCurrentValue, + [in, unique] PLSAPR_CR_CIPHER_VALUE EncryptedOldValue); + + /* Function 30 */ + NTSTATUS LsarQuerySecret( + [in] handle_t hBinding, + [in] LSAPR_HANDLE SecretHandle, + [in, out, unique] PLSAPR_CR_CIPHER_VALUE *EncryptedCurrentValue, + [in, out, unique] PLARGE_INTEGER CurrentValueSetTime, + [in, out, unique] PLSAPR_CR_CIPHER_VALUE *EncryptedOldValue, + [in, out, unique] PLARGE_INTEGER OldValueSetTime); + + /* Function 31 */ + NTSTATUS LsarLookupPrivilegeValue( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_UNICODE_STRING Name, + [out] PLUID Value); + + /* Function 32 */ + NTSTATUS LsarLookupPrivilegeName( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PLUID Value, + [out] PRPC_UNICODE_STRING *Name); + + /* Function 33 */ + NTSTATUS LsarLookupPrivilegeDisplayName( + [in] handle_t hBinding, + /*[in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_UNICODE_STRING Name, + [in] USHORT ClientLanguage, + [in] USHORT ClientSystemDefaultLanguage, + [out] PRPC_UNICODE_STRING *DisplayName,*/ + [out] USHORT *LanguageReturned); + + /* Function 34 */ + NTSTATUS LsarDeleteObject( + [in] handle_t hBinding, + [in, out] LSAPR_HANDLE *ObjectHandle); + +cpp_quote("#if _WIN32_WINNT >= 0x0351") + + /* Function 35 */ + NTSTATUS LsarEnumerateAccountsWithUserRight( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in, unique] PRPC_UNICODE_STRING UserRight, + [out] PLSAPR_ACCOUNT_ENUM_BUFFER EnumerationBuffer); + + /* Function 36 */ + NTSTATUS LsarEnmuerateAccountRights( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_SID AccountSid, + [out] PLSAPR_USER_RIGHT_SET UserRights); + + /* Function 37 */ + NTSTATUS LsarAddAccountRights( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_SID AccountSid, + [in] PLSAPR_USER_RIGHT_SET UserRights); + + /* Function 38 */ + NTSTATUS LsarRemoveAccountRights( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_SID AccountSid, + [in] BOOL AllRights, + [in] PLSAPR_USER_RIGHT_SET UserRights); + + /* Function 39 */ + NTSTATUS LsarQueryTrustedDomainInfo( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_SID TrustedDomainSid, + [in] TRUSTED_INFORMATION_CLASS InformationClass, + [out, switch_is(InformationClass)] PLSAPR_TRUSTED_DOMAIN_INFO *TrustedDomainInformation); + + /* Function 40 */ + NTSTATUS LsarSetTrustedDomainInfo( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_SID TrustedDomainSid, + [in] TRUSTED_INFORMATION_CLASS InformationClass, + [in, switch_is(InformationClass)] PLSAPR_TRUSTED_DOMAIN_INFO TrustedDomainInformation); + + /* Function 41 */ + NTSTATUS LsarDeleteTrustedDomain( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_SID TrustedDomainSid); + + /* Function 42 */ + NTSTATUS LsarStorePrivateData( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_UNICODE_STRING KeyName, + [in, unique] PLSAPR_CR_CIPHER_VALUE EncryptedData); + + /* Function 43 */ + NTSTATUS LsarRetrievePrivateData( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_UNICODE_STRING KeyName, + [in, out] PLSAPR_CR_CIPHER_VALUE *EncryptedData); + + /* Function 44 */ + NTSTATUS LsarOpenPolicy2( + [in] handle_t hBinding, + [in, unique, string] LPWSTR SystemName, + [in] PLSAPR_OBJECT_ATTRIBUTES ObjectAttributes, + [in] ACCESS_MASK DesiredAccess, + [out] LSAPR_HANDLE *PolicyHandle); + + /* Function 45 */ + NTSTATUS LsarGetUserName( + [in] handle_t hBinding, + [in, unique, string] LPWSTR SystemName, + [in, out] PRPC_UNICODE_STRING *UserName, + [in, out, unique] PRPC_UNICODE_STRING *DomainName); + +cpp_quote("#if _WIN32_WINNT >= 0x0500") + + /* Function 46 */ + NTSTATUS LsarQueryInformationPolicy2( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] POLICY_INFORMATION_CLASS InformationClass, + [out] unsigned long *PolicyInformation); + /* FIXME: should be [out, switch_is(InformationClass)] PLSAPR_POLICY_INFORMATION *PolicyInformation); */ + + /* Function 47 */ + NTSTATUS LsarSetInformationPolicy2( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] POLICY_INFORMATION_CLASS InformationClass, + [in] unsigned long PolicyInformation); + /* FIXME: should be [in, switch_is(InformationClass)] PLSAPR_POLICY_INFORMATION PolicyInformation); */ + + /* Function 48 */ + NTSTATUS LsarQueryTrustedDomainInfoByName( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_UNICODE_STRING TrustedDomainName, + [in] POLICY_INFORMATION_CLASS InformationClass, + [out] unsigned long *PolicyInformation); + /* FIXME: should be [out, switch_is(InformationClass)] PLSAPR_POLICY_INFORMATION *PolicyInformation); */ + + /* Function 49 */ + NTSTATUS LsarSetTrustedDomainInfoByName( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_UNICODE_STRING TrustedDomainName, + [in] POLICY_INFORMATION_CLASS InformationClass, + [in] unsigned long PolicyInformation); + /* FIXME: should be [in, switch_is(InformationClass)] PLSAPR_POLICY_INFORMATION PolicyInformation); */ + + /* Function 50 */ + NTSTATUS LsarEnumerateTrustedDomainsEx( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in, out] DWORD *EnumerationContext, + [out] PLSAPR_TRUSTED_ENUM_BUFFER_EX EnumerationBuffer, + [in] DWORD PreferedMaximumLength); + + /* Function 51 */ + NTSTATUS LsarCreateTrustedDomainEx( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation, + [in] PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION AuthentificationInformation, + [in] ACCESS_MASK DesiredAccess, + [out] LSAPR_HANDLE *TrustedDomainHandle); + + /* Function 52 */ + NTSTATUS LsarSetPolicyReplicationHandle( + [in] handle_t hBinding, + [in, out] PLSAPR_HANDLE PolicyHandle); + + /* Function 53 */ + NTSTATUS LsarQueryDomainInformationPolicy( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] POLICY_INFORMATION_CLASS InformationClass, + [out] unsigned long *PolicyInformation); + /* FIXME: should be [out, switch_is(InformationClass)] PLSAPR_POLICY_INFORMATION *PolicyInformation); */ + + /* Function 54 */ + NTSTATUS LsarSetDomainInformationPolicy( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] POLICY_INFORMATION_CLASS InformationClass, + [in] unsigned long PolicyInformation); + /* FIXME: should be [in, switch_is(InformationClass)] PLSAPR_POLICY_INFORMATION PolicyInformation); */ + + /* Function 55 */ + NTSTATUS LsarOpenTrustedDomainByName( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_UNICODE_STRING TrustedDomainName, + [in] ACCESS_MASK DesiredAccess, + [out] LSAPR_HANDLE *TrustedDomainHandle); + + /* Function 56 */ + NTSTATUS LsarTestCall( + [in] handle_t hBinding); /* FIXME */ + + /* Function 57 */ + NTSTATUS LsarLookupSids2( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PLSAPR_SID_ENUM_BUFFER SidEnumBuffer, + [out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + [in, out] PLSAPR_TRANSLATED_NAMES_EX TranslatedNames, + [in] LSAP_LOOKUP_LEVEL LookupLevel, + [in, out] DWORD *MappedCount, + [in] DWORD LookupOptions, + [in] DWORD ClientRevision); + + /* Function 58 */ + NTSTATUS LsarLookupNames2( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] DWORD Count, + [in, size_is(Count)] PRPC_UNICODE_STRING Names, + [out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + [in, out] PLSAPR_TRANSLATED_SID_EX TranslatedSids, + [in] LSAP_LOOKUP_LEVEL LookupLevel, + [in, out] DWORD *MappedCount, + [in] DWORD LookupOptions, + [in] DWORD ClientRevision); + + /* Function 59 */ + NTSTATUS LsarCreateTrustedDomainEx2( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation, + [in] PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION_INTERNAL AuthentificationInformation, + [in] ACCESS_MASK DesiredAccess, + [out] LSAPR_HANDLE *TrustedDomainHandle); + +cpp_quote("#if _WIN32_WINNT >= 0x0501") + + /* Function 60 */ + NTSTATUS CredrWrite( + [in] handle_t hBinding); /* FIXME */ + + /* Function 61 */ + NTSTATUS CredrRead( + [in] handle_t hBinding); /* FIXME */ + + /* Function 62 */ + NTSTATUS CredrEnumerate( + [in] handle_t hBinding); /* FIXME */ + + /* Function 63 */ + NTSTATUS CredrWriteDomainCredentials( + [in] handle_t hBinding); /* FIXME */ + + /* Function 64 */ + NTSTATUS CredrReadDomainCredentials( + [in] handle_t hBinding); /* FIXME */ + + /* Function 65 */ + NTSTATUS CredrDelete( + [in] handle_t hBinding); /* FIXME */ + + /* Function 66 */ + NTSTATUS CredrGetTargetInfo( + [in] handle_t hBinding); /* FIXME */ + + /* Function 67 */ + NTSTATUS CredrProfileLoaded( + [in] handle_t hBinding); /* FIXME */ + + /* Function 68 */ + NTSTATUS LsarLookupNames3( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] DWORD Count, + [in, size_is(Count)] PRPC_UNICODE_STRING Names, + [out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + [in, out] PLSAPR_TRANSLATED_SID_EX2 TranslatedSids, + [in] LSAP_LOOKUP_LEVEL LookupLevel, + [in, out] DWORD *MappedCount, + [in] DWORD LookupOptions, + [in] DWORD ClientRevision); + + /* Function 69 */ + NTSTATUS CredrGetSessionTypes( + [in] handle_t hBinding); /* FIXME */ + + /* Function 70 */ + NTSTATUS LsarRegisterAuditEvent( + [in] handle_t hBinding); /* FIXME */ + + /* Function 71 */ + NTSTATUS LsarGenAuditEvent( + [in] handle_t hBinding); /* FIXME */ + + /* Function 72 */ + NTSTATUS LsarUnregisterAuditEvent( + [in] handle_t hBinding); /* FIXME */ + + /* Function 73 */ + NTSTATUS LsarQueryForestTrustInformation( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PLSA_UNICODE_STRING TrustedDomainName, + [in] LSA_FOREST_TRUST_RECORD_TYPE HighestRecordType, + [out] PLSA_FOREST_TRUST_INFORMATION *ForestTrustInfo); + + /* Function 74 */ + NTSTATUS LsarSetForestTrustInformation( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PLSA_UNICODE_STRING TrustedDomainName, + [in] LSA_FOREST_TRUST_RECORD_TYPE HighestRecordType, + [in] PLSA_FOREST_TRUST_INFORMATION ForestTrustInfo, + [in] BOOL CheckOnly, + [out] PLSA_FOREST_TRUST_COLLISION_INFORMATION *CollisionInfo); + + /* Function 75 */ + NTSTATUS CredrRename( + [in] handle_t hBinding); /* FIXME */ + + /* Function 76 */ + NTSTATUS LsarLookupSids3( + [in] handle_t hBinding, + [in] PLSAPR_SID_ENUM_BUFFER SidEnumBuffer, + [out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + [in, out] PLSAPR_TRANSLATED_NAMES_EX TranslatedNames, + [in] LSAP_LOOKUP_LEVEL LookupLevel, + [in, out] DWORD *MappedCount, + [in] DWORD LookupOptions, + [in] DWORD ClientRevision); + + /* Function 77 */ + NTSTATUS LsarLookupNames4( + [in] handle_t hBinding, + [in] handle_t RpcHandle, + [in] DWORD Count, + [in, size_is(Count)] PRPC_UNICODE_STRING Names, + [out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + [in, out] PLSAPR_TRANSLATED_SID_EX2 TranslatedSids, + [in] LSAP_LOOKUP_LEVEL LookupLevel, + [in, out] DWORD *MappedCount, + [in] DWORD LookupOptions, + [in] DWORD ClientRevision); + + /* Function 78 */ + NTSTATUS LsarOpenPolicySce( + [in] handle_t hBinding); /* FIXME */ + + /* Function 79 */ + NTSTATUS LsarAdtRegisterSecurityEventSource( + [in] handle_t hBinding); /* FIXME */ + + /* Function 80 */ + NTSTATUS LsarAdtUnregisterSecurityEventSource( + [in] handle_t hBinding); /* FIXME */ + + /* Function 81 */ + NTSTATUS LsarAdtReportSecurityEvent( + [in] handle_t hBinding); /* FIXME */ + +cpp_quote("#endif /* _WIN32_WINNT >= 0x0501 */") +cpp_quote("#endif /* _WIN32_WINNT >= 0x0500 */") +cpp_quote("#endif /* _WIN32_WINNT >= 0x0351 */") + } diff --git a/reactos/include/reactos/subsys/csrss/csrss.h b/reactos/include/reactos/subsys/csrss/csrss.h index 6aa80f3596b..b23bf0c29e2 100644 --- a/reactos/include/reactos/subsys/csrss/csrss.h +++ b/reactos/include/reactos/subsys/csrss/csrss.h @@ -163,7 +163,7 @@ typedef struct typedef struct { HANDLE ConsoleHandle; - CHAR Attrib; + WORD Attrib; } CSRSS_SET_ATTRIB, *PCSRSS_SET_ATTRIB; typedef struct @@ -460,6 +460,12 @@ typedef struct DWORD Length; } CSRSS_GET_CONSOLE_ALIASES_EXES_LENGTH, *PCSRSS_GET_CONSOLE_ALIASES_EXES_LENGTH; +typedef struct +{ + DWORD Event; + DWORD ProcessGroup; +} CSRSS_GENERATE_CTRL_EVENT, *PCSRSS_GENERATE_CTRL_EVENT; + #define CSR_API_MESSAGE_HEADER_SIZE(Type) (FIELD_OFFSET(CSR_API_MESSAGE, Data) + sizeof(Type)) @@ -537,6 +543,7 @@ typedef struct #define GET_ALL_CONSOLE_ALIASES_LENGTH (0x3B) #define GET_CONSOLE_ALIASES_EXES (0x3C) #define GET_CONSOLE_ALIASES_EXES_LENGTH (0x3D) +#define GENERATE_CTRL_EVENT (0x3E) /* Keep in sync with definition below. */ #define CSRSS_HEADER_SIZE (sizeof(PORT_MESSAGE) + sizeof(ULONG) + sizeof(NTSTATUS)) @@ -608,6 +615,7 @@ typedef struct _CSR_API_MESSAGE CSRSS_GET_ALL_CONSOLE_ALIASES_LENGTH GetAllConsoleAliasesLength; CSRSS_GET_CONSOLE_ALIASES_EXES GetConsoleAliasesExes; CSRSS_GET_CONSOLE_ALIASES_EXES_LENGTH GetConsoleAliasesExesLength; + CSRSS_GENERATE_CTRL_EVENT GenerateCtrlEvent; } Data; } CSR_API_MESSAGE, *PCSR_API_MESSAGE; diff --git a/reactos/include/reactos/win32k/ntgdityp.h b/reactos/include/reactos/win32k/ntgdityp.h index 08987867200..ac13e60cff8 100644 --- a/reactos/include/reactos/win32k/ntgdityp.h +++ b/reactos/include/reactos/win32k/ntgdityp.h @@ -101,6 +101,9 @@ typedef enum _TRANSFORMTYPE enum { MX_SCALE = 1, + MX_IDENTITYSCALE = 2, + MX_INTEGER = 4, + MX_NOTRANSLATE = 8, }; typedef enum GDIObjType @@ -356,6 +359,19 @@ typedef struct _MATRIX_S FLONG flAccel; } MATRIX_S; +typedef struct _MATRIX +{ + FLOATOBJ efM11; + FLOATOBJ efM12; + FLOATOBJ efM21; + FLOATOBJ efM22; + FLOATOBJ efDx; + FLOATOBJ efDy; + FIX fxDx; + FIX fxDy; + FLONG flAccel; +} MATRIX, *PMATRIX; + /* Gdi XForm storage union */ typedef union { diff --git a/reactos/include/reactos/wine/mscvpdb.h b/reactos/include/reactos/wine/mscvpdb.h index 1aa70a85f97..306d8934ca2 100644 --- a/reactos/include/reactos/wine/mscvpdb.h +++ b/reactos/include/reactos/wine/mscvpdb.h @@ -81,7 +81,7 @@ * For the evolution of types, the need of the second flavor was the * number of types to be defined (limited to 0xFFFF, including the C * basic types); the need of the third flavor is the increase of - * symbol size (to be greated than 256), which was likely needed for + * symbol size (to be greater than 256), which was likely needed for * complex C++ types (nested + templates). * * It's somehow difficult to represent the layout of those types on @@ -343,9 +343,9 @@ union codeview_type { unsigned short int len; short int id; - unsigned this_type; - unsigned int class_type; unsigned int rvtype; + unsigned int class_type; + unsigned this_type; unsigned char call; unsigned char reserved; unsigned short params; @@ -732,41 +732,317 @@ union codeview_fieldtype * bit mode. There are many other types listed in the documents, but these * are apparently not used by the compiler, or represent pointer types * that are not used. + * + * Official MS documentation says that type (< 0x4000, so 12 bits) is made of: + * +----------+------+------+----------+------+ + * | 11 | 10-8 | 7-4 | 3 | 2-0 | + * +----------+------+------+----------+------+ + * | reserved | mode | type | reserved | size | + * +----------+------+------+----------+------+ + * In recent PDB files, type 8 exists, and is seen as an HRESULT... So we've + * added this basic type... as if bit 3 had been integrated into the size field */ -#define T_NOTYPE 0x0000 /* Notype */ -#define T_ABS 0x0001 /* Abs */ -#define T_VOID 0x0003 /* Void */ -#define T_CHAR 0x0010 /* signed char */ -#define T_SHORT 0x0011 /* short */ -#define T_LONG 0x0012 /* long */ -#define T_QUAD 0x0013 /* long long */ -#define T_UCHAR 0x0020 /* unsigned char */ -#define T_USHORT 0x0021 /* unsigned short */ -#define T_ULONG 0x0022 /* unsigned long */ -#define T_UQUAD 0x0023 /* unsigned long long */ -#define T_REAL32 0x0040 /* float */ -#define T_REAL64 0x0041 /* double */ -#define T_RCHAR 0x0070 /* real char */ -#define T_WCHAR 0x0071 /* wide char */ -#define T_INT4 0x0074 /* int */ -#define T_UINT4 0x0075 /* unsigned int */ -#define T_32PVOID 0x0403 /* 32 bit near pointer to void */ -#define T_32PCHAR 0x0410 /* 16:32 near pointer to signed char */ -#define T_32PSHORT 0x0411 /* 16:32 near pointer to short */ -#define T_32PLONG 0x0412 /* 16:32 near pointer to int */ -#define T_32PQUAD 0x0413 /* 16:32 near pointer to long long */ -#define T_32PUCHAR 0x0420 /* 16:32 near pointer to unsigned char */ -#define T_32PUSHORT 0x0421 /* 16:32 near pointer to unsigned short */ -#define T_32PULONG 0x0422 /* 16:32 near pointer to unsigned int */ -#define T_32PUQUAD 0x0423 /* 16:32 near pointer to long long */ -#define T_32PREAL32 0x0440 /* 16:32 near pointer to float */ -#define T_32PREAL64 0x0441 /* 16:32 near pointer to float */ -#define T_32PRCHAR 0x0470 /* 16:32 near pointer to real char */ -#define T_32PWCHAR 0x0471 /* 16:32 near pointer to real char */ -#define T_32PINT4 0x0474 /* 16:32 near pointer to int */ -#define T_32PUINT4 0x0475 /* 16:32 near pointer to unsigned int */ +/* the type number of a built-in type is a 16-bit value specified in the following format: + bit # | 11 | 10-8 | 7-4 | 3 | 2-0 | + field | reserved | mode | type | reserved | size | + where + is one of the following types: + 0x00 Special + 0x01 Signed integral value + 0x02 Unsigned integral value + 0x03 Boolean + 0x04 Real + 0x05 Complex + 0x06 Special2 + 0x07 Real int value + 0x08 Reserved + 0x09 Reserved + 0x0a Reserved + 0x0b Reserved + 0x0c Reserved + 0x0d Reserved + 0x0e Reserved + 0x0f Reserved for debugger expression evaluator + + is an enumerated value for each of the types. + Type = special + 0x00 No type + 0x01 Absolute symbol + 0x02 Segment + 0x03 Void + 0x04 Basic 8-byte currency value + 0x05 Near Basic string + 0x06 Far Basic string + 0x07 Untranslated type from previous Microsoft symbol formats + Type = signed/unsigned integral and Boolean values + 0x00 1 byte + 0x01 2 byte + 0x02 4 byte + 0x03 8 byte + 0x04 Reserved + 0x05 Reserved + 0x06 Reserved + 0x07 Reserved + Type = real and complex + 0x00 32 bit + 0x01 64 bit + 0x02 80 bit + 0x03 128 bit + 0x04 48 bit + 0x05 Reserved + 0x06 Reserved + 0x07 Reserved + Type = special2 + 0x00 Bit + 0x01 Pascal CHAR + Type = Real int + 0x00 Char + 0x01 Wide character + 0x02 2-byte signed integer + 0x03 2-byte unsigned integer + 0x04 4-byte signed integer + 0x05 4-byte unsigned integer + 0x06 8-byte signed integer + 0x07 8-byte unsigned integer + + is the pointer mode: + 0x00 Direct; not a pointer + 0x01 Near pointer + 0x02 Far pointer + 0x03 Huge pointer + 0x04 32-bit near pointer + 0x05 32-bit far pointer + 0x06 64-bit near pointer + 0x07 Reserved +*/ + +/* basic types */ +#define T_NOTYPE 0x0000 /* Notype */ +#define T_ABS 0x0001 /* Abs */ +#define T_SEGMENT 0x0002 /* segment type */ +#define T_VOID 0x0003 /* Void */ +#define T_CURRENCY 0x0004 /* basic 8-byte currency value */ +#define T_NBASICSTR 0x0005 /* near basic string */ +#define T_FBASICSTR 0x0006 /* far basic string */ +#define T_NOTTRANS 0x0007 /* untranslated type record from MS symbol format */ +#define T_HRESULT 0x0008 /* HRESULT - or error code ??? */ +#define T_CHAR 0x0010 /* signed char */ +#define T_SHORT 0x0011 /* short */ +#define T_LONG 0x0012 /* long */ +#define T_QUAD 0x0013 /* long long */ +#define T_UCHAR 0x0020 /* unsigned char */ +#define T_USHORT 0x0021 /* unsigned short */ +#define T_ULONG 0x0022 /* unsigned long */ +#define T_UQUAD 0x0023 /* unsigned long long */ +#define T_BOOL08 0x0030 /* 8-bit boolean */ +#define T_BOOL16 0x0031 /* 16-bit boolean */ +#define T_BOOL32 0x0032 /* 32-bit boolean */ +#define T_BOOL64 0x0033 /* 64-bit boolean */ +#define T_REAL32 0x0040 /* float */ +#define T_REAL64 0x0041 /* double */ +#define T_REAL80 0x0042 /* 80-bit real */ +#define T_REAL128 0x0043 /* 128-bit real */ +#define T_REAL48 0x0044 /* 48-bit real */ +#define T_CPLX32 0x0050 /* 32-bit complex number */ +#define T_CPLX64 0x0051 /* 64-bit complex number */ +#define T_CPLX80 0x0052 /* 80-bit complex number */ +#define T_CPLX128 0x0053 /* 128-bit complex number */ +#define T_BIT 0x0060 /* bit */ +#define T_PASCHAR 0x0061 /* pascal CHAR */ +#define T_RCHAR 0x0070 /* real char */ +#define T_WCHAR 0x0071 /* wide char */ +#define T_INT2 0x0072 /* real 16-bit signed int */ +#define T_UINT2 0x0073 /* real 16-bit unsigned int */ +#define T_INT4 0x0074 /* int */ +#define T_UINT4 0x0075 /* unsigned int */ +#define T_INT8 0x0076 /* 64-bit signed int */ +#define T_UINT8 0x0077 /* 64-bit unsigned int */ + + +/* near pointers to basic types */ +#define T_PVOID 0x0103 /* near pointer to void */ +#define T_PCHAR 0x0110 /* Near pointer to 8-bit signed */ +#define T_PSHORT 0x0111 /* Near pointer to 16-bit signed */ +#define T_PLONG 0x0112 /* Near pointer to 32-bit signed */ +#define T_PQUAD 0x0113 /* Near pointer to 64-bit signed */ +#define T_PUCHAR 0x0120 /* Near pointer to 8-bit unsigned */ +#define T_PUSHORT 0x0121 /* Near pointer to 16-bit unsigned */ +#define T_PULONG 0x0122 /* Near pointer to 32-bit unsigned */ +#define T_PUQUAD 0x0123 /* Near pointer to 64-bit unsigned */ +#define T_PBOOL08 0x0130 /* Near pointer to 8-bit Boolean */ +#define T_PBOOL16 0x0131 /* Near pointer to 16-bit Boolean */ +#define T_PBOOL32 0x0132 /* Near pointer to 32-bit Boolean */ +#define T_PBOOL64 0x0133 /* Near pointer to 64-bit Boolean */ +#define T_PREAL32 0x0140 /* Near pointer to 32-bit real */ +#define T_PREAL64 0x0141 /* Near pointer to 64-bit real */ +#define T_PREAL80 0x0142 /* Near pointer to 80-bit real */ +#define T_PREAL128 0x0143 /* Near pointer to 128-bit real */ +#define T_PREAL48 0x0144 /* Near pointer to 48-bit real */ +#define T_PCPLX32 0x0150 /* Near pointer to 32-bit complex */ +#define T_PCPLX64 0x0151 /* Near pointer to 64-bit complex */ +#define T_PCPLX80 0x0152 /* Near pointer to 80-bit complex */ +#define T_PCPLX128 0x0153 /* Near pointer to 128-bit complex */ +#define T_PRCHAR 0x0170 /* Near pointer to a real char */ +#define T_PWCHAR 0x0171 /* Near pointer to a wide char */ +#define T_PINT2 0x0172 /* Near pointer to 16-bit signed int */ +#define T_PUINT2 0x0173 /* Near pointer to 16-bit unsigned int */ +#define T_PINT4 0x0174 /* Near pointer to 32-bit signed int */ +#define T_PUINT4 0x0175 /* Near pointer to 32-bit unsigned int */ +#define T_PINT8 0x0176 /* Near pointer to 64-bit signed int */ +#define T_PUINT8 0x0177 /* Near pointer to 64-bit unsigned int */ + + +/* far pointers to basic types */ +#define T_PFVOID 0x0203 /* Far pointer to void */ +#define T_PFCHAR 0x0210 /* Far pointer to 8-bit signed */ +#define T_PFSHORT 0x0211 /* Far pointer to 16-bit signed */ +#define T_PFLONG 0x0212 /* Far pointer to 32-bit signed */ +#define T_PFQUAD 0x0213 /* Far pointer to 64-bit signed */ +#define T_PFUCHAR 0x0220 /* Far pointer to 8-bit unsigned */ +#define T_PFUSHORT 0x0221 /* Far pointer to 16-bit unsigned */ +#define T_PFULONG 0x0222 /* Far pointer to 32-bit unsigned */ +#define T_PFUQUAD 0x0223 /* Far pointer to 64-bit unsigned */ +#define T_PFBOOL08 0x0230 /* Far pointer to 8-bit Boolean */ +#define T_PFBOOL16 0x0231 /* Far pointer to 16-bit Boolean */ +#define T_PFBOOL32 0x0232 /* Far pointer to 32-bit Boolean */ +#define T_PFBOOL64 0x0233 /* Far pointer to 64-bit Boolean */ +#define T_PFREAL32 0x0240 /* Far pointer to 32-bit real */ +#define T_PFREAL64 0x0241 /* Far pointer to 64-bit real */ +#define T_PFREAL80 0x0242 /* Far pointer to 80-bit real */ +#define T_PFREAL128 0x0243 /* Far pointer to 128-bit real */ +#define T_PFREAL48 0x0244 /* Far pointer to 48-bit real */ +#define T_PFCPLX32 0x0250 /* Far pointer to 32-bit complex */ +#define T_PFCPLX64 0x0251 /* Far pointer to 64-bit complex */ +#define T_PFCPLX80 0x0252 /* Far pointer to 80-bit complex */ +#define T_PFCPLX128 0x0253 /* Far pointer to 128-bit complex */ +#define T_PFRCHAR 0x0270 /* Far pointer to a real char */ +#define T_PFWCHAR 0x0271 /* Far pointer to a wide char */ +#define T_PFINT2 0x0272 /* Far pointer to 16-bit signed int */ +#define T_PFUINT2 0x0273 /* Far pointer to 16-bit unsigned int */ +#define T_PFINT4 0x0274 /* Far pointer to 32-bit signed int */ +#define T_PFUINT4 0x0275 /* Far pointer to 32-bit unsigned int */ +#define T_PFINT8 0x0276 /* Far pointer to 64-bit signed int */ +#define T_PFUINT8 0x0277 /* Far pointer to 64-bit unsigned int */ + + +/* huge pointers to basic types */ +#define T_PHVOID 0x0303 /* Huge pointer to void */ +#define T_PHCHAR 0x0310 /* Huge pointer to 8-bit signed */ +#define T_PHSHORT 0x0311 /* Huge pointer to 16-bit signed */ +#define T_PHLONG 0x0312 /* Huge pointer to 32-bit signed */ +#define T_PHQUAD 0x0313 /* Huge pointer to 64-bit signed */ +#define T_PHUCHAR 0x0320 /* Huge pointer to 8-bit unsigned */ +#define T_PHUSHORT 0x0321 /* Huge pointer to 16-bit unsigned */ +#define T_PHULONG 0x0322 /* Huge pointer to 32-bit unsigned */ +#define T_PHUQUAD 0x0323 /* Huge pointer to 64-bit unsigned */ +#define T_PHBOOL08 0x0330 /* Huge pointer to 8-bit Boolean */ +#define T_PHBOOL16 0x0331 /* Huge pointer to 16-bit Boolean */ +#define T_PHBOOL32 0x0332 /* Huge pointer to 32-bit Boolean */ +#define T_PHBOOL64 0x0333 /* Huge pointer to 64-bit Boolean */ +#define T_PHREAL32 0x0340 /* Huge pointer to 32-bit real */ +#define T_PHREAL64 0x0341 /* Huge pointer to 64-bit real */ +#define T_PHREAL80 0x0342 /* Huge pointer to 80-bit real */ +#define T_PHREAL128 0x0343 /* Huge pointer to 128-bit real */ +#define T_PHREAL48 0x0344 /* Huge pointer to 48-bit real */ +#define T_PHCPLX32 0x0350 /* Huge pointer to 32-bit complex */ +#define T_PHCPLX64 0x0351 /* Huge pointer to 64-bit complex */ +#define T_PHCPLX80 0x0352 /* Huge pointer to 80-bit complex */ +#define T_PHCPLX128 0x0353 /* Huge pointer to 128-bit real */ +#define T_PHRCHAR 0x0370 /* Huge pointer to a real char */ +#define T_PHWCHAR 0x0371 /* Huge pointer to a wide char */ +#define T_PHINT2 0x0372 /* Huge pointer to 16-bit signed int */ +#define T_PHUINT2 0x0373 /* Huge pointer to 16-bit unsigned int */ +#define T_PHINT4 0x0374 /* Huge pointer to 32-bit signed int */ +#define T_PHUINT4 0x0375 /* Huge pointer to 32-bit unsigned int */ +#define T_PHINT8 0x0376 /* Huge pointer to 64-bit signed int */ +#define T_PHUINT8 0x0377 /* Huge pointer to 64-bit unsigned int */ + + +/* 32-bit near pointers to basic types */ +#define T_32PVOID 0x0403 /* 32-bit near pointer to void */ +#define T_32PHRESULT 0x0408 /* 16:32 near pointer to HRESULT - or error code ??? */ +#define T_32PCHAR 0x0410 /* 16:32 near pointer to 8-bit signed */ +#define T_32PSHORT 0x0411 /* 16:32 near pointer to 16-bit signed */ +#define T_32PLONG 0x0412 /* 16:32 near pointer to 32-bit signed */ +#define T_32PQUAD 0x0413 /* 16:32 near pointer to 64-bit signed */ +#define T_32PUCHAR 0x0420 /* 16:32 near pointer to 8-bit unsigned */ +#define T_32PUSHORT 0x0421 /* 16:32 near pointer to 16-bit unsigned */ +#define T_32PULONG 0x0422 /* 16:32 near pointer to 32-bit unsigned */ +#define T_32PUQUAD 0x0423 /* 16:32 near pointer to 64-bit unsigned */ +#define T_32PBOOL08 0x0430 /* 16:32 near pointer to 8-bit Boolean */ +#define T_32PBOOL16 0x0431 /* 16:32 near pointer to 16-bit Boolean */ +#define T_32PBOOL32 0x0432 /* 16:32 near pointer to 32-bit Boolean */ +#define T_32PBOOL64 0x0433 /* 16:32 near pointer to 64-bit Boolean */ +#define T_32PREAL32 0x0440 /* 16:32 near pointer to 32-bit real */ +#define T_32PREAL64 0x0441 /* 16:32 near pointer to 64-bit real */ +#define T_32PREAL80 0x0442 /* 16:32 near pointer to 80-bit real */ +#define T_32PREAL128 0x0443 /* 16:32 near pointer to 128-bit real */ +#define T_32PREAL48 0x0444 /* 16:32 near pointer to 48-bit real */ +#define T_32PCPLX32 0x0450 /* 16:32 near pointer to 32-bit complex */ +#define T_32PCPLX64 0x0451 /* 16:32 near pointer to 64-bit complex */ +#define T_32PCPLX80 0x0452 /* 16:32 near pointer to 80-bit complex */ +#define T_32PCPLX128 0x0453 /* 16:32 near pointer to 128-bit complex */ +#define T_32PRCHAR 0x0470 /* 16:32 near pointer to a real char */ +#define T_32PWCHAR 0x0471 /* 16:32 near pointer to a wide char */ +#define T_32PINT2 0x0472 /* 16:32 near pointer to 16-bit signed int */ +#define T_32PUINT2 0x0473 /* 16:32 near pointer to 16-bit unsigned int */ +#define T_32PINT4 0x0474 /* 16:32 near pointer to 32-bit signed int */ +#define T_32PUINT4 0x0475 /* 16:32 near pointer to 32-bit unsigned int */ +#define T_32PINT8 0x0476 /* 16:32 near pointer to 64-bit signed int */ +#define T_32PUINT8 0x0477 /* 16:32 near pointer to 64-bit unsigned int */ + + +/* 32-bit far pointers to basic types */ +#define T_32PFVOID 0x0503 /* 32-bit far pointer to void */ +#define T_32PFCHAR 0x0510 /* 16:32 far pointer to 8-bit signed */ +#define T_32PFSHORT 0x0511 /* 16:32 far pointer to 16-bit signed */ +#define T_32PFLONG 0x0512 /* 16:32 far pointer to 32-bit signed */ +#define T_32PFQUAD 0x0513 /* 16:32 far pointer to 64-bit signed */ +#define T_32PFUCHAR 0x0520 /* 16:32 far pointer to 8-bit unsigned */ +#define T_32PFUSHORT 0x0521 /* 16:32 far pointer to 16-bit unsigned */ +#define T_32PFULONG 0x0522 /* 16:32 far pointer to 32-bit unsigned */ +#define T_32PFUQUAD 0x0523 /* 16:32 far pointer to 64-bit unsigned */ +#define T_32PFBOOL08 0x0530 /* 16:32 far pointer to 8-bit Boolean */ +#define T_32PFBOOL16 0x0531 /* 16:32 far pointer to 16-bit Boolean */ +#define T_32PFBOOL32 0x0532 /* 16:32 far pointer to 32-bit Boolean */ +#define T_32PFBOOL64 0x0533 /* 16:32 far pointer to 64-bit Boolean */ +#define T_32PFREAL32 0x0540 /* 16:32 far pointer to 32-bit real */ +#define T_32PFREAL64 0x0541 /* 16:32 far pointer to 64-bit real */ +#define T_32PFREAL80 0x0542 /* 16:32 far pointer to 80-bit real */ +#define T_32PFREAL128 0x0543 /* 16:32 far pointer to 128-bit real */ +#define T_32PFREAL48 0x0544 /* 16:32 far pointer to 48-bit real */ +#define T_32PFCPLX32 0x0550 /* 16:32 far pointer to 32-bit complex */ +#define T_32PFCPLX64 0x0551 /* 16:32 far pointer to 64-bit complex */ +#define T_32PFCPLX80 0x0552 /* 16:32 far pointer to 80-bit complex */ +#define T_32PFCPLX128 0x0553 /* 16:32 far pointer to 128-bit complex */ +#define T_32PFRCHAR 0x0570 /* 16:32 far pointer to a real char */ +#define T_32PFWCHAR 0x0571 /* 16:32 far pointer to a wide char */ +#define T_32PFINT2 0x0572 /* 16:32 far pointer to 16-bit signed int */ +#define T_32PFUINT2 0x0573 /* 16:32 far pointer to 16-bit unsigned int */ +#define T_32PFINT4 0x0574 /* 16:32 far pointer to 32-bit signed int */ +#define T_32PFUINT4 0x0575 /* 16:32 far pointer to 32-bit unsigned int */ +#define T_32PFINT8 0x0576 /* 16:32 far pointer to 64-bit signed int */ +#define T_32PFUINT8 0x0577 /* 16:32 far pointer to 64-bit unsigned int */ + + +/* counts, bit masks, and shift values needed to access various parts of the built-in type numbers */ +#define T_MAXPREDEFINEDTYPE 0x0580 /* maximum type index for all built-in types */ +#define T_MAXBASICTYPE 0x0080 /* maximum type index all non-pointer built-in types */ +#define T_BASICTYPE_MASK 0x00ff /* mask of bits that can potentially identify a non-pointer basic type */ +#define T_BASICTYPE_SHIFT 8 /* shift count to push out the basic type bits from a type number */ +#define T_MODE_MASK 0x0700 /* type mode mask (ptr/non-ptr) */ +#define T_SIZE_MASK 0x0007 /* type size mask (depends on 'type' value) */ +#define T_TYPE_MASK 0x00f0 /* type type mask (data treatment mode) */ + +/* bit patterns for the portion of a built-in type number */ +#define T_NEARPTR_BITS 0x0100 +#define T_FARPTR_BITS 0x0200 +#define T_HUGEPTR_BITS 0x0300 +#define T_NEAR32PTR_BITS 0x0400 +#define T_FAR32PTR_BITS 0x0500 +#define T_NEAR64PTR_BITS 0x0600 #define LF_MODIFIER_V1 0x0001 #define LF_POINTER_V1 0x0002 @@ -1065,6 +1341,16 @@ union codeview_symbol char name[1]; } stack_v3; + struct + { + short int len; /* Total length of this entry */ + short int id; /* Always S_BPREL_V3 */ + int offset; /* Stack offset relative to BP */ + unsigned int symtype; + unsigned short unknown; + char name[1]; + } stack_xxxx_v3; + struct { short int len; /* Total length of this entry */ @@ -1307,7 +1593,8 @@ union codeview_symbol #define S_PUB_V3 0x110E #define S_LPROC_V3 0x110F #define S_GPROC_V3 0x1110 -#define S_MSTOOL_V3 0x1116 /* not really understood */ +#define S_BPREL_XXXX_V3 0x1111 /* not really understood, but looks like bprel... */ +#define S_MSTOOL_V3 0x1116 /* compiler command line options and build information */ #define S_PUB_FUNC1_V3 0x1125 /* didn't get the difference between the two */ #define S_PUB_FUNC2_V3 0x1127 @@ -1523,7 +1810,8 @@ typedef struct _PDB_SYMBOLS DWORD unknown; DWORD hash1_file; DWORD hash2_file; - DWORD gsym_file; + WORD gsym_file; + WORD unknown1; DWORD module_size; DWORD offset_size; DWORD hash_size; diff --git a/reactos/lib/fslib/vfatlib/check/boot.c b/reactos/lib/fslib/vfatlib/check/boot.c new file mode 100644 index 00000000000..302fa050aad --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/boot.c @@ -0,0 +1,340 @@ +/* boot.c - Read and analyze ia PC/MS-DOS boot sector */ + +/* Written 1993 by Werner Almesberger */ + +/* FAT32, VFAT, Atari format support, and various fixes additions May 1998 + * by Roman Hodek */ + +#include "vfatlib.h" + +#define NDEBUG +#include + + +#define ROUND_TO_MULTIPLE(n,m) ((n) && (m) ? (n)+(m)-1-((n)-1)%(m) : 0) + /* don't divide by zero */ + +static struct { + __u8 media; + char *descr; +} mediabytes[] = { + { 0xf0, "5.25\" or 3.5\" HD floppy" }, + { 0xf8, "hard disk" }, + { 0xf9, "3,5\" 720k floppy 2s/80tr/9sec or " + "5.25\" 1.2M floppy 2s/80tr/15sec" }, + { 0xfa, "5.25\" 320k floppy 1s/80tr/8sec" }, + { 0xfb, "3.5\" 640k floppy 2s/80tr/8sec" }, + { 0xfc, "5.25\" 180k floppy 1s/40tr/9sec" }, + { 0xfd, "5.25\" 360k floppy 2s/40tr/9sec" }, + { 0xfe, "5.25\" 160k floppy 1s/40tr/8sec" }, + { 0xff, "5.25\" 320k floppy 2s/40tr/8sec" }, +}; + +#if defined __alpha || defined __ia64__ || defined __s390x__ || defined __x86_64__ || defined __ppc64__ +/* Unaligned fields must first be copied byte-wise */ +#define GET_UNALIGNED_W(f) \ + ({ \ + unsigned short __v; \ + memcpy( &__v, &f, sizeof(__v) ); \ + CF_LE_W( *(unsigned short *)&f ); \ + }) +#else +#define GET_UNALIGNED_W(f) CF_LE_W( *(unsigned short *)&f ) +#endif + + +static char *get_media_descr( unsigned char media ) +{ + int i; + + for( i = 0; i < sizeof(mediabytes)/sizeof(*mediabytes); ++i ) { + if (mediabytes[i].media == media) + return( mediabytes[i].descr ); + } + return( "undefined" ); +} + +static void dump_boot(DOS_FS *fs,struct boot_sector *b,unsigned lss) +{ + unsigned short sectors; + char id[9]; + + VfatPrint("Boot sector contents:\n"); + + strncpy(id,(char*)b->system_id,8); + id[8] = 0; + VfatPrint("System ID \"%s\"\n",id); + + VfatPrint("Media byte 0x%02x (%s)\n",b->media,get_media_descr(b->media)); + VfatPrint("%10d bytes per logical sector\n",GET_UNALIGNED_W(b->sector_size)); + VfatPrint("%10d bytes per cluster\n",fs->cluster_size); + VfatPrint("%10d reserved sector%s\n",CF_LE_W(b->reserved), + CF_LE_W(b->reserved) == 1 ? "" : "s"); + VfatPrint("First FAT starts at byte %llu (sector %llu)\n", + (__u64)fs->fat_start, + (__u64)fs->fat_start/lss); + VfatPrint("%10d FATs, %d bit entries\n",b->fats,fs->fat_bits); + VfatPrint("%10d bytes per FAT (= %u sectors)\n",fs->fat_size, + fs->fat_size/lss); + if (!fs->root_cluster) { + VfatPrint("Root directory starts at byte %llu (sector %llu)\n", + (__u64)fs->root_start, + (__u64)fs->root_start/lss); + VfatPrint("%10d root directory entries\n",fs->root_entries); + } + else { + VfatPrint( "Root directory start at cluster %lu (arbitrary size)\n", + fs->root_cluster); + } + VfatPrint("Data area starts at byte %llu (sector %llu)\n", + (__u64)fs->data_start, + (__u64)fs->data_start/lss); + VfatPrint("%10lu data clusters (%llu bytes)\n",fs->clusters, + (__u64)fs->clusters*fs->cluster_size); + VfatPrint("%u sectors/track, %u heads\n",CF_LE_W(b->secs_track), + CF_LE_W(b->heads)); + VfatPrint("%10u hidden sectors\n", CF_LE_L(b->hidden)); + sectors = GET_UNALIGNED_W( b->sectors ); + VfatPrint("%10u sectors total\n", sectors ? sectors : CF_LE_L(b->total_sect)); +} + +static void check_backup_boot(DOS_FS *fs, struct boot_sector *b, int lss) +{ + struct boot_sector b2; + + if (!fs->backupboot_start) { + VfatPrint( "There is no backup boot sector.\n" ); + if (CF_LE_W(b->reserved) < 3) { + VfatPrint( "And there is no space for creating one!\n" ); + return; + } + if (FsCheckFlags & FSCHECK_INTERACTIVE) + VfatPrint( "1) Create one\n2) Do without a backup\n" ); + else VfatPrint( " Auto-creating backup boot block.\n" ); + if (!(FsCheckFlags & FSCHECK_INTERACTIVE) || get_key("12","?") == '1') { + int bbs; + /* The usual place for the backup boot sector is sector 6. Choose + * that or the last reserved sector. */ + if (CF_LE_W(b->reserved) >= 7 && CF_LE_W(b->info_sector) != 6) + bbs = 6; + else { + bbs = CF_LE_W(b->reserved) - 1; + if (bbs == CF_LE_W(b->info_sector)) + --bbs; /* this is never 0, as we checked reserved >= 3! */ + } + fs->backupboot_start = bbs*lss; + b->backup_boot = CT_LE_W(bbs); + fs_write(fs->backupboot_start,sizeof(*b),b); + fs_write((off_t)offsetof(struct boot_sector,backup_boot), + sizeof(b->backup_boot),&b->backup_boot); + VfatPrint( "Created backup of boot sector in sector %d\n", bbs ); + return; + } + else return; + } + + fs_read(fs->backupboot_start,sizeof(b2),&b2); + if (memcmp(b,&b2,sizeof(b2)) != 0) { + /* there are any differences */ + __u8 *p, *q; + int i, pos, first = 1; + char buf[20]; + + VfatPrint( "There are differences between boot sector and its backup.\n" ); + VfatPrint( "Differences: (offset:original/backup)\n " ); + pos = 2; + for( p = (__u8 *)b, q = (__u8 *)&b2, i = 0; i < sizeof(b2); + ++p, ++q, ++i ) { + if (*p != *q) { + sprintf( buf, "%s%u:%02x/%02x", first ? "" : ", ", + (unsigned)(p-(__u8 *)b), *p, *q ); + if (pos + strlen(buf) > 78) VfatPrint( "\n " ), pos = 2; + VfatPrint( "%s", buf ); + pos += strlen(buf); + first = 0; + } + } + VfatPrint( "\n" ); + + if (FsCheckFlags & FSCHECK_INTERACTIVE) + VfatPrint( "1) Copy original to backup\n" + "2) Copy backup to original\n" + "3) No action\n" ); + else VfatPrint( " Not automatically fixing this.\n" ); + switch ((FsCheckFlags & FSCHECK_INTERACTIVE) ? get_key("123","?") : '3') { + case '1': + fs_write(fs->backupboot_start,sizeof(*b),b); + break; + case '2': + fs_write(0,sizeof(b2),&b2); + break; + default: + break; + } + } +} + +static void init_fsinfo(struct info_sector *i) +{ + i->magic = CT_LE_L(0x41615252); + i->signature = CT_LE_L(0x61417272); + i->free_clusters = CT_LE_L(-1); + i->next_cluster = CT_LE_L(2); + i->boot_sign = CT_LE_W(0xaa55); +} + +static void read_fsinfo(DOS_FS *fs, struct boot_sector *b,int lss) +{ + struct info_sector i; + + if (!b->info_sector) { + VfatPrint( "No FSINFO sector\n" ); + if (FsCheckFlags & FSCHECK_INTERACTIVE) + VfatPrint( "1) Create one\n2) Do without FSINFO\n" ); + else VfatPrint( " Not automatically creating it.\n" ); + if ((FsCheckFlags & FSCHECK_INTERACTIVE) && get_key("12","?") == '1') { + /* search for a free reserved sector (not boot sector and not + * backup boot sector) */ + __u32 s; + for( s = 1; s < CF_LE_W(b->reserved); ++s ) + if (s != CF_LE_W(b->backup_boot)) break; + if (s > 0 && s < CF_LE_W(b->reserved)) { + init_fsinfo(&i); + fs_write((off_t)s*lss,sizeof(i),&i); + b->info_sector = CT_LE_W(s); + fs_write((off_t)offsetof(struct boot_sector,info_sector), + sizeof(b->info_sector),&b->info_sector); + if (fs->backupboot_start) + fs_write(fs->backupboot_start+ + offsetof(struct boot_sector,info_sector), + sizeof(b->info_sector),&b->info_sector); + } + else { + VfatPrint( "No free reserved sector found -- " + "no space for FSINFO sector!\n" ); + return; + } + } + else return; + } + + fs->fsinfo_start = CF_LE_W(b->info_sector)*lss; + fs_read(fs->fsinfo_start,sizeof(i),&i); + + if (i.magic != CT_LE_L(0x41615252) || + i.signature != CT_LE_L(0x61417272) || + i.boot_sign != CT_LE_W(0xaa55)) { + VfatPrint( "FSINFO sector has bad magic number(s):\n" ); + if (i.magic != CT_LE_L(0x41615252)) + VfatPrint( " Offset %llu: 0x%08x != expected 0x%08x\n", + (__u64)offsetof(struct info_sector,magic), + CF_LE_L(i.magic),0x41615252); + if (i.signature != CT_LE_L(0x61417272)) + VfatPrint( " Offset %llu: 0x%08x != expected 0x%08x\n", + (__u64)offsetof(struct info_sector,signature), + CF_LE_L(i.signature),0x61417272); + if (i.boot_sign != CT_LE_W(0xaa55)) + VfatPrint( " Offset %llu: 0x%04x != expected 0x%04x\n", + (__u64)offsetof(struct info_sector,boot_sign), + CF_LE_W(i.boot_sign),0xaa55); + if (FsCheckFlags & FSCHECK_INTERACTIVE) + VfatPrint( "1) Correct\n2) Don't correct (FSINFO invalid then)\n" ); + else VfatPrint( " Auto-correcting it.\n" ); + if (!(FsCheckFlags & FSCHECK_INTERACTIVE) || get_key("12","?") == '1') { + init_fsinfo(&i); + fs_write(fs->fsinfo_start,sizeof(i),&i); + } + else fs->fsinfo_start = 0; + } + + if (fs->fsinfo_start) + fs->free_clusters = CF_LE_L(i.free_clusters); +} + +void read_boot(DOS_FS *fs) +{ + struct boot_sector b; + unsigned total_sectors; + unsigned short logical_sector_size, sectors; + unsigned fat_length; + loff_t data_size; + + fs_read(0,sizeof(b),&b); + logical_sector_size = GET_UNALIGNED_W(b.sector_size); + if (!logical_sector_size) die("Logical sector size is zero."); + fs->cluster_size = b.cluster_size*logical_sector_size; + if (!fs->cluster_size) die("Cluster size is zero."); + if (b.fats != 2 && b.fats != 1) + die("Currently, only 1 or 2 FATs are supported, not %d.\n",b.fats); + fs->nfats = b.fats; + sectors = GET_UNALIGNED_W(b.sectors); + total_sectors = sectors ? sectors : CF_LE_L(b.total_sect); + if (FsCheckFlags & FSCHECK_VERBOSE) VfatPrint("Checking we can access the last sector of the filesystem\n"); + /* Can't access last odd sector anyway, so round down */ + fs_test((loff_t)((total_sectors & ~1)-1)*(loff_t)logical_sector_size, + logical_sector_size); + fat_length = CF_LE_W(b.fat_length) ? + CF_LE_W(b.fat_length) : CF_LE_L(b.fat32_length); + fs->fat_start = (off_t)CF_LE_W(b.reserved)*logical_sector_size; + fs->root_start = ((off_t)CF_LE_W(b.reserved)+b.fats*fat_length)* + logical_sector_size; + fs->root_entries = GET_UNALIGNED_W(b.dir_entries); + fs->data_start = fs->root_start+ROUND_TO_MULTIPLE(fs->root_entries << + MSDOS_DIR_BITS,logical_sector_size); + data_size = (loff_t)total_sectors*logical_sector_size-fs->data_start; + fs->clusters = data_size/fs->cluster_size; + fs->root_cluster = 0; /* indicates standard, pre-FAT32 root dir */ + fs->fsinfo_start = 0; /* no FSINFO structure */ + fs->free_clusters = -1; /* unknown */ + if (!b.fat_length && b.fat32_length) { + fs->fat_bits = 32; + fs->root_cluster = CF_LE_L(b.root_cluster); + if (!fs->root_cluster && fs->root_entries) + /* M$ hasn't specified this, but it looks reasonable: If + * root_cluster is 0 but there is a separate root dir + * (root_entries != 0), we handle the root dir the old way. Give a + * warning, but convertig to a root dir in a cluster chain seems + * to complex for now... */ + VfatPrint( "Warning: FAT32 root dir not in cluster chain! " + "Compability mode...\n" ); + else if (!fs->root_cluster && !fs->root_entries) + die("No root directory!"); + else if (fs->root_cluster && fs->root_entries) + VfatPrint( "Warning: FAT32 root dir is in a cluster chain, but " + "a separate root dir\n" + " area is defined. Cannot fix this easily.\n" ); + + fs->backupboot_start = CF_LE_W(b.backup_boot)*logical_sector_size; + check_backup_boot(fs,&b,logical_sector_size); + + read_fsinfo(fs,&b,logical_sector_size); + } + else { + /* On real MS-DOS, a 16 bit FAT is used whenever there would be too + * much clusters otherwise. */ + fs->fat_bits = (fs->clusters > MSDOS_FAT12) ? 16 : 12; + } + + /* On FAT32, the high 4 bits of a FAT entry are reserved */ + fs->eff_fat_bits = (fs->fat_bits == 32) ? 28 : fs->fat_bits; + fs->fat_size = fat_length*logical_sector_size; + if (fs->clusters > ((__u64)fs->fat_size*8/fs->fat_bits)-2) + die("File system has %d clusters but only space for %d FAT entries.", + fs->clusters,((__u64)fs->fat_size*8/fs->fat_bits)-2); + if (!fs->root_entries && !fs->root_cluster) + die("Root directory has zero size."); + if (fs->root_entries & (MSDOS_DPS-1)) + die("Root directory (%d entries) doesn't span an integral number of " + "sectors.",fs->root_entries); + if (logical_sector_size & (SECTOR_SIZE-1)) + die("Logical sector size (%d bytes) is not a multiple of the physical " + "sector size.",logical_sector_size); + /* ++roman: On Atari, these two fields are often left uninitialized */ + if ((!b.secs_track || !b.heads)) + die("Invalid disk format in boot sector."); + if (FsCheckFlags & FSCHECK_VERBOSE) dump_boot(fs,&b,logical_sector_size); +} + +/* Local Variables: */ +/* tab-width: 8 */ +/* End: */ diff --git a/reactos/lib/fslib/vfatlib/check/boot.h b/reactos/lib/fslib/vfatlib/check/boot.h new file mode 100644 index 00000000000..0540c701662 --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/boot.h @@ -0,0 +1,13 @@ +/* boot.h - Read and analyze ia PC/MS-DOS boot sector */ + +/* Written 1993 by Werner Almesberger */ + + +#ifndef _BOOT_H +#define _BOOT_H + +void read_boot(DOS_FS *fs); + +/* Reads the boot sector from the currently open device and initializes *FS */ + +#endif diff --git a/reactos/lib/fslib/vfatlib/check/byteorder.h b/reactos/lib/fslib/vfatlib/check/byteorder.h new file mode 100644 index 00000000000..273f58ad3ff --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/byteorder.h @@ -0,0 +1,59 @@ +#ifndef _I386_BYTEORDER_H +#define _I386_BYTEORDER_H + +//#include "types.h" +#include "compiler.h" + +#ifdef __GNUC__ + +/* For avoiding bswap on i386 */ +//#ifdef __KERNEL__ +//#include +//#endif + +static __inline__ __attribute_const__ __u32 ___arch__swab32(__u32 x) +{ +#ifdef CONFIG_X86_BSWAP + __asm__("bswap %0" : "=r" (x) : "0" (x)); +#else + __asm__("xchgb %b0,%h0\n\t" /* swap lower bytes */ + "rorl $16,%0\n\t" /* swap words */ + "xchgb %b0,%h0" /* swap higher bytes */ + :"=q" (x) + : "0" (x)); +#endif + return x; +} + +static __inline__ __attribute_const__ __u64 ___arch__swab64(__u64 val) +{ + union { + struct { __u32 a,b; } s; + __u64 u; + } v; + v.u = val; +#ifdef CONFIG_X86_BSWAP + asm("bswapl %0 ; bswapl %1 ; xchgl %0,%1" + : "=r" (v.s.a), "=r" (v.s.b) + : "0" (v.s.a), "1" (v.s.b)); +#else + v.s.a = ___arch__swab32(v.s.a); + v.s.b = ___arch__swab32(v.s.b); + asm("xchgl %0,%1" : "=r" (v.s.a), "=r" (v.s.b) : "0" (v.s.a), "1" (v.s.b)); +#endif + return v.u; +} + +/* Do not define swab16. Gcc is smart enough to recognize "C" version and + convert it into rotation or exhange. */ + +#define __arch__swab64(x) ___arch__swab64(x) +#define __arch__swab32(x) ___arch__swab32(x) + +#define __BYTEORDER_HAS_U64__ + +#endif /* __GNUC__ */ + +//#include "little_endian.h" + +#endif /* _I386_BYTEORDER_H */ diff --git a/reactos/lib/fslib/vfatlib/check/byteswap.h b/reactos/lib/fslib/vfatlib/check/byteswap.h new file mode 100644 index 00000000000..0cf37c16848 --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/byteswap.h @@ -0,0 +1,40 @@ +/* Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#ifndef _BYTESWAP_H +#define _BYTESWAP_H 1 + +/* Get the machine specific, optimized definitions. */ +#include "byteswap1.h" + + +/* The following definitions must all be macros since otherwise some + of the possible optimizations are not possible. */ + +/* Return a value with all bytes in the 16 bit argument swapped. */ +#define bswap_16(x) __bswap_16 (x) + +/* Return a value with all bytes in the 32 bit argument swapped. */ +#define bswap_32(x) __bswap_32 (x) + +#if defined __GNUC__ && __GNUC__ >= 2 +/* Return a value with all bytes in the 64 bit argument swapped. */ +# define bswap_64(x) __bswap_64 (x) +#endif + +#endif /* byteswap.h */ diff --git a/reactos/lib/fslib/vfatlib/check/byteswap1.h b/reactos/lib/fslib/vfatlib/check/byteswap1.h new file mode 100644 index 00000000000..33af2088883 --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/byteswap1.h @@ -0,0 +1,133 @@ +/* Macros to swap the order of bytes in integer values. + Copyright (C) 1997, 1998, 2000, 2002, 2003 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#if !defined _BYTESWAP_H && !defined _NETINET_IN_H +# error "Never use directly; include instead." +#endif + +#ifndef _BITS_BYTESWAP_H +#define _BITS_BYTESWAP_H 1 + +/* Swap bytes in 16 bit value. */ +#define __bswap_constant_16(x) \ + ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)) + +#ifdef __GNUC__ +# if __GNUC__ >= 2 +# define __bswap_16(x) \ + (__extension__ \ + ({ register unsigned short int __v, __x = (x); \ + if (__builtin_constant_p (__x)) \ + __v = __bswap_constant_16 (__x); \ + else \ + __asm__ ("rorw $8, %w0" \ + : "=r" (__v) \ + : "0" (__x) \ + : "cc"); \ + __v; })) +# else +/* This is better than nothing. */ +# define __bswap_16(x) \ + (__extension__ \ + ({ register unsigned short int __x = (x); __bswap_constant_16 (__x); })) +# endif +#else +static __inline unsigned short int +__bswap_16 (unsigned short int __bsx) +{ + return __bswap_constant_16 (__bsx); +} +#endif + +/* Swap bytes in 32 bit value. */ +#define __bswap_constant_32(x) \ + ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \ + (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24)) + +#ifdef __GNUC__ +# if __GNUC__ >= 2 +/* To swap the bytes in a word the i486 processors and up provide the + `bswap' opcode. On i386 we have to use three instructions. */ +# if !defined __i486__ && !defined __pentium__ && !defined __pentiumpro__ \ + && !defined __pentium4__ +# define __bswap_32(x) \ + (__extension__ \ + ({ register unsigned int __v, __x = (x); \ + if (__builtin_constant_p (__x)) \ + __v = __bswap_constant_32 (__x); \ + else \ + __asm__ ("rorw $8, %w0;" \ + "rorl $16, %0;" \ + "rorw $8, %w0" \ + : "=r" (__v) \ + : "0" (__x) \ + : "cc"); \ + __v; })) +# else +# define __bswap_32(x) \ + (__extension__ \ + ({ register unsigned int __v, __x = (x); \ + if (__builtin_constant_p (__x)) \ + __v = __bswap_constant_32 (__x); \ + else \ + __asm__ ("bswap %0" : "=r" (__v) : "0" (__x)); \ + __v; })) +# endif +# else +# define __bswap_32(x) \ + (__extension__ \ + ({ register unsigned int __x = (x); __bswap_constant_32 (__x); })) +# endif +#else +static __inline unsigned int +__bswap_32 (unsigned int __bsx) +{ + return __bswap_constant_32 (__bsx); +} +#endif + + +#if defined __GNUC__ && __GNUC__ >= 2 +/* Swap bytes in 64 bit value. */ +#define __bswap_constant_64(x) \ + ((((x) & 0xff00000000000000ull) >> 56) \ + | (((x) & 0x00ff000000000000ull) >> 40) \ + | (((x) & 0x0000ff0000000000ull) >> 24) \ + | (((x) & 0x000000ff00000000ull) >> 8) \ + | (((x) & 0x00000000ff000000ull) << 8) \ + | (((x) & 0x0000000000ff0000ull) << 24) \ + | (((x) & 0x000000000000ff00ull) << 40) \ + | (((x) & 0x00000000000000ffull) << 56)) + +# define __bswap_64(x) \ + (__extension__ \ + ({ union { __extension__ unsigned long long int __ll; \ + unsigned long int __l[2]; } __w, __r; \ + if (__builtin_constant_p (x)) \ + __r.__ll = __bswap_constant_64 (x); \ + else \ + { \ + __w.__ll = (x); \ + __r.__l[0] = __bswap_32 (__w.__l[1]); \ + __r.__l[1] = __bswap_32 (__w.__l[0]); \ + } \ + __r.__ll; })) +#endif + +#endif /* _BITS_BYTESWAP_H */ diff --git a/reactos/lib/fslib/vfatlib/check/check.c b/reactos/lib/fslib/vfatlib/check/check.c new file mode 100644 index 00000000000..e4b76be7204 --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/check.c @@ -0,0 +1,862 @@ +/* check.c - Check and repair a PC/MS-DOS file system */ + +/* Written 1993 by Werner Almesberger */ + +/* FAT32, VFAT, Atari format support, and various fixes additions May 1998 + * by Roman Hodek */ + + +#include "vfatlib.h" +#include + +#define NDEBUG +#include + + + +static DOS_FILE *root; + +/* get start field of a dir entry */ +#define FSTART(p,fs) \ + ((unsigned long)CF_LE_W(p->dir_ent.start) | \ + (fs->fat_bits == 32 ? CF_LE_W(p->dir_ent.starthi) << 16 : 0)) + +#define MODIFY(p,i,v) \ + do { \ + if (p->offset) { \ + p->dir_ent.i = v; \ + fs_write(p->offset+offsetof(DIR_ENT,i), \ + sizeof(p->dir_ent.i),&p->dir_ent.i); \ + } \ + } while(0) + +#define MODIFY_START(p,v,fs) \ + do { \ + unsigned long __v = (v); \ + if (!p->offset) { \ + /* writing to fake entry for FAT32 root dir */ \ + if (!__v) die("Oops, deleting FAT32 root dir!"); \ + fs->root_cluster = __v; \ + p->dir_ent.start = CT_LE_W(__v&0xffff); \ + p->dir_ent.starthi = CT_LE_W(__v>>16); \ + __v = CT_LE_L(__v); \ + fs_write((loff_t)offsetof(struct boot_sector,root_cluster), \ + sizeof(((struct boot_sector *)0)->root_cluster), \ + &__v); \ + } \ + else { \ + MODIFY(p,start,CT_LE_W((__v)&0xffff)); \ + if (fs->fat_bits == 32) \ + MODIFY(p,starthi,CT_LE_W((__v)>>16)); \ + } \ + } while(0) + + +loff_t alloc_rootdir_entry(DOS_FS *fs, DIR_ENT *de, const char *pattern) +{ + static int curr_num = 0; + loff_t offset; + + if (fs->root_cluster) { + DIR_ENT d2; + int i = 0, got = 0; + unsigned long clu_num, prev = 0; + loff_t offset2; + + clu_num = fs->root_cluster; + offset = cluster_start(fs,clu_num); + while (clu_num > 0 && clu_num != -1) { + fs_read(offset,sizeof(DIR_ENT),&d2); + if (IS_FREE(d2.name) && d2.attr != VFAT_LN_ATTR) { + got = 1; + break; + } + i += sizeof(DIR_ENT); + offset += sizeof(DIR_ENT); + if ((i % fs->cluster_size) == 0) { + prev = clu_num; + if ((clu_num = next_cluster(fs,clu_num)) == 0 || clu_num == -1) + break; + offset = cluster_start(fs,clu_num); + } + } + if (!got) { + /* no free slot, need to extend root dir: alloc next free cluster + * after previous one */ + if (!prev) + die("Root directory has no cluster allocated!"); + for (clu_num = prev+1; clu_num != prev; clu_num++) { + if (clu_num >= fs->clusters+2) clu_num = 2; + if (!fs->fat[clu_num].value) + break; + } + if (clu_num == prev) + die("Root directory full and no free cluster"); + set_fat(fs,prev,clu_num); + set_fat(fs,clu_num,-1); + set_owner(fs, clu_num, get_owner(fs, fs->root_cluster)); + /* clear new cluster */ + memset( &d2, 0, sizeof(d2) ); + offset = cluster_start(fs,clu_num); + for( i = 0; i < (int)fs->cluster_size; i += sizeof(DIR_ENT) ) + fs_write( offset+i, sizeof(d2), &d2 ); + } + memset(de,0,sizeof(DIR_ENT)); + while (1) { + sprintf((char*)de->name,pattern,curr_num); + clu_num = fs->root_cluster; + i = 0; + offset2 = cluster_start(fs,clu_num); + while (clu_num > 0 && clu_num != -1) { + fs_read(offset2,sizeof(DIR_ENT),&d2); + if (offset2 != offset && + !strncmp((char*)d2.name,(char*)de->name,MSDOS_NAME)) + break; + i += sizeof(DIR_ENT); + offset2 += sizeof(DIR_ENT); + if ((i % fs->cluster_size) == 0) { + if ((clu_num = next_cluster(fs,clu_num)) == 0 || + clu_num == -1) + break; + offset2 = cluster_start(fs,clu_num); + } + } + if (clu_num == 0 || clu_num == -1) + break; + if (++curr_num >= 10000) die("Unable to create unique name"); + } + } + else { + DIR_ENT *root; + int next_free = 0, scan; + + root = vfalloc(fs->root_entries*sizeof(DIR_ENT)); + fs_read(fs->root_start,fs->root_entries*sizeof(DIR_ENT),root); + + while (next_free < (int)fs->root_entries) + if (IS_FREE(root[next_free].name) && + root[next_free].attr != VFAT_LN_ATTR) + break; + else next_free++; + if (next_free == (int)fs->root_entries) + die("Root directory is full."); + offset = fs->root_start+next_free*sizeof(DIR_ENT); + memset(de,0,sizeof(DIR_ENT)); + while (1) { + sprintf((char*)de->name,pattern,curr_num); + for (scan = 0; scan < (int)fs->root_entries; scan++) + if (scan != next_free && + !strncmp((char*)root[scan].name,(char*)de->name,MSDOS_NAME)) + break; + if (scan == (int)fs->root_entries) break; + if (++curr_num >= 10000) die("Unable to create unique name"); + } + vffree(root); + } + ++FsCheckTotalFiles; + return offset; +} + + +static char *path_name(DOS_FILE *file) +{ +// static char path[PATH_MAX*2]; + static char path[MAX_PATH*2]; + + if (!file) *path = 0; + else { + if (strlen(path_name(file->parent)) > MAX_PATH) + die("Path name too long."); + if (strcmp(path,"/") != 0) strcat(path,"/"); + strcpy(strrchr(path,0),file->lfn?file->lfn:file_name(file->dir_ent.name)); + } + return path; +} + + +static int day_n[] = { 0,31,59,90,120,151,181,212,243,273,304,334,0,0,0,0 }; + /* JanFebMarApr May Jun Jul Aug Sep Oct Nov Dec */ + + +/* Convert a MS-DOS time/date pair to a UNIX date (seconds since 1 1 70). */ + +time_t date_dos2unix(unsigned short time,unsigned short date) +{ + int month,year; + time_t secs; + + month = ((date >> 5) & 15)-1; + year = date >> 9; + secs = (time & 31)*2+60*((time >> 5) & 63)+(time >> 11)*3600+86400* + ((date & 31)-1+day_n[month]+(year/4)+year*365-((year & 3) == 0 && + month < 2 ? 1 : 0)+3653); + /* days since 1.1.70 plus 80's leap day */ + return secs; +} + + +static char *file_stat(DOS_FILE *file) +{ + static char temp[100]; + char tmp[100]; + time_t date; + LARGE_INTEGER time; + TIME_FIELDS time_fields; + + date = date_dos2unix(CF_LE_W(file->dir_ent.time),CF_LE_W(file-> + dir_ent.date)); + + RtlSecondsSince1970ToTime(date, &time); + RtlTimeToTimeFields(&time, &time_fields); + + _snprintf(tmp, sizeof(tmp), "%d:%d:%d %d.%d.%d", + time_fields.Hour, time_fields.Minute, time_fields.Second, + time_fields.Day, time_fields.Month, time_fields.Year); + + _snprintf(temp, sizeof(temp), " Size %u bytes, date %s",CF_LE_L(file->dir_ent.size),tmp); + return temp; +} + + +static int bad_name(unsigned char *name) +{ + int i, spc, suspicious = 0; + char *bad_chars = "*?<>|\"\\/:"; + + /* Do not complain about (and auto-correct) the extended attribute files + * of OS/2. */ + if (strncmp((char*)name,"EA DATA SF",11) == 0 || + strncmp((char*)name,"WP ROOT SF",11) == 0) return 0; + + for (i = 0; i < 8; i++) { + if (name[i] < ' ' || name[i] == 0x7f) return 1; + if (name[i] > 0x7f) ++suspicious; + if (strchr(bad_chars,name[i])) return 1; + } + + for (i = 8; i < 11; i++) { + if (name[i] < ' ' || name[i] == 0x7f) return 1; + if (name[i] > 0x7f) ++suspicious; + if (strchr(bad_chars,name[i])) return 1; + } + + spc = 0; + for (i = 0; i < 8; i++) { + if (name[i] == ' ') + spc = 1; + else if (spc) + /* non-space after a space not allowed, space terminates the name + * part */ + return 1; + } + + spc = 0; + for (i = 8; i < 11; i++) { + if (name[i] == ' ') + spc = 1; + else if (spc) + /* non-space after a space not allowed, space terminates the name + * part */ + return 1; + } + + /* Only complain about too much suspicious chars in interactive mode, + * never correct them automatically. The chars are all basically ok, so we + * shouldn't auto-correct such names. */ + if ((FsCheckFlags & FSCHECK_INTERACTIVE) && suspicious > 6) + return 1; + return 0; +} + + +static void drop_file(DOS_FS *fs,DOS_FILE *file) +{ + unsigned long cluster; + + MODIFY(file,name[0],DELETED_FLAG); + for (cluster = FSTART(file,fs); cluster > 0 && cluster < + fs->clusters+2; cluster = next_cluster(fs,cluster)) + set_owner(fs,cluster,NULL); + --FsCheckTotalFiles; +} + + +static void truncate_file(DOS_FS *fs,DOS_FILE *file,unsigned long clusters) +{ + int deleting; + unsigned long walk,next,prev; + + walk = FSTART(file,fs); + prev = 0; + if ((deleting = !clusters)) MODIFY_START(file,0,fs); + while (walk > 0 && walk != -1) { + next = next_cluster(fs,walk); + if (deleting) set_fat(fs,walk,0); + else if ((deleting = !--clusters)) set_fat(fs,walk,-1); + prev = walk; + walk = next; + } +} + + +static void auto_rename(DOS_FILE *file) +{ + DOS_FILE *first,*walk; + int number; + + if (!file->offset) return; /* cannot rename FAT32 root dir */ + first = file->parent ? file->parent->first : root; + number = 0; + while (1) { + sprintf((char*)file->dir_ent.name,"FSCK%04d",number); + strncpy((char*)file->dir_ent.ext,"REN",3); + for (walk = first; walk; walk = walk->next) + if (walk != file && !strncmp((char*)walk->dir_ent.name,(char*)file->dir_ent. + name,MSDOS_NAME)) break; + if (!walk) { + fs_write(file->offset,MSDOS_NAME,file->dir_ent.name); + return; + } + number++; + } + die("Can't generate a unique name."); +} + + +static void rename_file(DOS_FILE *file) +{ + //unsigned char name[46]; + //unsigned char *walk,*here; + + if (!file->offset) { + VfatPrint( "Cannot rename FAT32 root dir\n" ); + return; /* cannot rename FAT32 root dir */ + } + while (1) { + VfatPrint("New name: "); +#if 0 + fflush(stdout); + if (fgets((char*)name,45,stdin)) { + if ((here = (unsigned char*)strchr((char*)name,'\n'))) *here = 0; + for (walk = (unsigned char*)strrchr((char*)name,0); walk >= name && (*walk == ' ' || + *walk == '\t'); walk--); + walk[1] = 0; + for (walk = name; *walk == ' ' || *walk == '\t'; walk++); + if (file_cvt(walk,file->dir_ent.name)) { + fs_write(file->offset,MSDOS_NAME,file->dir_ent.name); + return; + } + } +#else + return; +#endif + } +} + + +static int handle_dot(DOS_FS *fs,DOS_FILE *file,int dots) +{ + char *name; + + name = strncmp((char*)file->dir_ent.name,MSDOS_DOT,MSDOS_NAME) ? ".." : "."; + if (!(file->dir_ent.attr & ATTR_DIR)) { + VfatPrint("%s\n Is a non-directory.\n",path_name(file)); + if (FsCheckFlags & FSCHECK_INTERACTIVE) + VfatPrint("1) Drop it\n2) Auto-rename\n3) Rename\n" + "4) Convert to directory\n"); + else VfatPrint(" Auto-renaming it.\n"); + switch ((FsCheckFlags & FSCHECK_INTERACTIVE) ? get_key("1234","?") : '2') { + case '1': + drop_file(fs,file); + return 1; + case '2': + auto_rename(file); + VfatPrint(" Renamed to %s\n",file_name(file->dir_ent.name)); + return 0; + case '3': + rename_file(file); + return 0; + case '4': + MODIFY(file,size,CT_LE_L(0)); + MODIFY(file,attr,file->dir_ent.attr | ATTR_DIR); + break; + } + } + if (!dots) { + VfatPrint("Root contains directory \"%s\". Dropping it.\n",name); + drop_file(fs,file); + return 1; + } + return 0; +} + + +static int check_file(DOS_FS *fs,DOS_FILE *file) +{ + DOS_FILE *owner; + int restart; + unsigned long expect,curr,this,clusters,prev,walk,clusters2; + + if (file->dir_ent.attr & ATTR_DIR) { + if (CF_LE_L(file->dir_ent.size)) { + VfatPrint("%s\n Directory has non-zero size. Fixing it.\n", + path_name(file)); + MODIFY(file,size,CT_LE_L(0)); + } + if (file->parent && !strncmp((char*)file->dir_ent.name,MSDOS_DOT,MSDOS_NAME)) { + expect = FSTART(file->parent,fs); + if (FSTART(file,fs) != expect) { + VfatPrint("%s\n Start (%ld) does not point to parent (%ld)\n", + path_name(file),FSTART(file,fs),expect); + MODIFY_START(file,expect,fs); + } + return 0; + } + if (file->parent && !strncmp((char*)file->dir_ent.name,MSDOS_DOTDOT, + MSDOS_NAME)) { + expect = file->parent->parent ? FSTART(file->parent->parent,fs):0; + if (fs->root_cluster && expect == fs->root_cluster) + expect = 0; + if (FSTART(file,fs) != expect) { + VfatPrint("%s\n Start (%lu) does not point to .. (%lu)\n", + path_name(file),FSTART(file,fs),expect); + MODIFY_START(file,expect,fs); + } + return 0; + } + if (FSTART(file,fs)==0){ + VfatPrint ("%s\n Start does point to root directory. Deleting dir. \n", + path_name(file)); + MODIFY(file,name[0],DELETED_FLAG); + return 0; + } + } + if (FSTART(file,fs) >= fs->clusters+2) { + VfatPrint("%s\n Start cluster beyond limit (%lu > %lu). Truncating file.\n", + path_name(file),FSTART(file,fs),fs->clusters+1); + if (!file->offset) + die( "Bad FAT32 root directory! (bad start cluster)\n" ); + MODIFY_START(file,0,fs); + } + clusters = prev = 0; + for (curr = FSTART(file,fs) ? FSTART(file,fs) : + -1; curr != -1; curr = next_cluster(fs,curr)) { + if (!fs->fat[curr].value || bad_cluster(fs,curr)) { + VfatPrint("%s\n Contains a %s cluster (%lu). Assuming EOF.\n", + path_name(file),fs->fat[curr].value ? "bad" : "free",curr); + if (prev) set_fat(fs,prev,-1); + else if (!file->offset) + die( "FAT32 root dir starts with a bad cluster!" ); + else MODIFY_START(file,0,fs); + break; + } + if (!(file->dir_ent.attr & ATTR_DIR) && CF_LE_L(file->dir_ent.size) <= + clusters*fs->cluster_size) { + VfatPrint("%s\n File size is %u bytes, cluster chain length is > %lu " + "bytes.\n Truncating file to %u bytes.\n",path_name(file), + CF_LE_L(file->dir_ent.size),clusters*fs->cluster_size, + CF_LE_L(file->dir_ent.size)); + truncate_file(fs,file,clusters); + break; + } + if ((owner = get_owner(fs,curr))) { + int do_trunc = 0; + VfatPrint("%s and\n",path_name(owner)); + VfatPrint("%s\n share clusters.\n",path_name(file)); + clusters2 = 0; + for (walk = FSTART(owner,fs); walk > 0 && walk != -1; walk = + next_cluster(fs,walk)) + if (walk == curr) break; + else clusters2++; + restart = file->dir_ent.attr & ATTR_DIR; + if (!owner->offset) { + VfatPrint( " Truncating second to %lu bytes because first " + "is FAT32 root dir.\n", clusters2*fs->cluster_size ); + do_trunc = 2; + } + else if (!file->offset) { + VfatPrint( " Truncating first to %lu bytes because second " + "is FAT32 root dir.\n", clusters*fs->cluster_size ); + do_trunc = 1; + } + else if (FsCheckFlags & FSCHECK_INTERACTIVE) + VfatPrint("1) Truncate first to %lu bytes%s\n" + "2) Truncate second to %lu bytes\n",clusters*fs->cluster_size, + restart ? " and restart" : "",clusters2*fs->cluster_size); + else VfatPrint(" Truncating second to %lu bytes.\n",clusters2* + fs->cluster_size); + if (do_trunc != 2 && + (do_trunc == 1 || + ((FsCheckFlags & FSCHECK_INTERACTIVE) && get_key("12","?") == '1'))) { + prev = 0; + clusters = 0; + for (this = FSTART(owner,fs); this > 0 && this != -1; this = + next_cluster(fs,this)) { + if (this == curr) { + if (prev) set_fat(fs,prev,-1); + else MODIFY_START(owner,0,fs); + MODIFY(owner,size,CT_LE_L(clusters*fs->cluster_size)); + if (restart) return 1; + while (this > 0 && this != -1) { + set_owner(fs,this,NULL); + this = next_cluster(fs,this); + } + break; + } + clusters++; + prev = this; + } + if (this != curr) + die("Internal error: didn't find cluster %d in chain" + " starting at %d",curr,FSTART(owner,fs)); + } + else { + if (prev) set_fat(fs,prev,-1); + else MODIFY_START(file,0,fs); + break; + } + } + set_owner(fs,curr,file); + clusters++; + prev = curr; + } + if (!(file->dir_ent.attr & ATTR_DIR) && CF_LE_L(file->dir_ent.size) > + clusters*fs->cluster_size) { + VfatPrint("%s\n File size is %u bytes, cluster chain length is %lu bytes." + "\n Truncating file to %lu bytes.\n",path_name(file),CF_LE_L(file-> + dir_ent.size),clusters*fs->cluster_size,clusters*fs->cluster_size); + MODIFY(file,size,CT_LE_L(clusters*fs->cluster_size)); + } + return 0; +} + + +static int check_files(DOS_FS *fs,DOS_FILE *start) +{ + while (start) { + if (check_file(fs,start)) return 1; + start = start->next; + } + return 0; +} + + +static int check_dir(DOS_FS *fs,DOS_FILE **root,int dots) +{ + DOS_FILE *parent,**walk,**scan; + int dot,dotdot,skip,redo; + int good,bad; + + if (!*root) return 0; + parent = (*root)->parent; + good = bad = 0; + for (walk = root; *walk; walk = &(*walk)->next) + if (bad_name((*walk)->dir_ent.name)) bad++; + else good++; + if (*root && parent && good+bad > 4 && bad > good/2) { + VfatPrint("%s\n Has a large number of bad entries. (%d/%d)\n", + path_name(parent),bad,good+bad); + if (!dots) VfatPrint( " Not dropping root directory.\n" ); + else if (!(FsCheckFlags & FSCHECK_INTERACTIVE)) VfatPrint(" Not dropping it in auto-mode.\n"); + else if (get_key("yn","Drop directory ? (y/n)") == 'y') { + truncate_file(fs,parent,0); + MODIFY(parent,name[0],DELETED_FLAG); + /* buglet: deleted directory stays in the list. */ + return 1; + } + } + dot = dotdot = redo = 0; + walk = root; + while (*walk) { + if (!strncmp((char*)(*walk)->dir_ent.name,MSDOS_DOT,MSDOS_NAME) || + !strncmp((char*)(*walk)->dir_ent.name,MSDOS_DOTDOT,MSDOS_NAME)) { + if (handle_dot(fs,*walk,dots)) { + *walk = (*walk)->next; + continue; + } + if (!strncmp((char*)(*walk)->dir_ent.name,MSDOS_DOT,MSDOS_NAME)) dot++; + else dotdot++; + } + if (!((*walk)->dir_ent.attr & ATTR_VOLUME) && + bad_name((*walk)->dir_ent.name)) { + VfatPrint("%s\n Bad file name.\n",path_name(*walk)); + if (FsCheckFlags & FSCHECK_INTERACTIVE) + VfatPrint("1) Drop file\n2) Rename file\n3) Auto-rename\n" + "4) Keep it\n"); + else VfatPrint(" Auto-renaming it.\n"); + switch ((FsCheckFlags & FSCHECK_INTERACTIVE) ? get_key("1234","?") : '3') { + case '1': + drop_file(fs,*walk); + walk = &(*walk)->next; + continue; + case '2': + rename_file(*walk); + redo = 1; + break; + case '3': + auto_rename(*walk); + VfatPrint(" Renamed to %s\n",file_name((*walk)->dir_ent. + name)); + break; + case '4': + break; + } + } + /* don't check for duplicates of the volume label */ + if (!((*walk)->dir_ent.attr & ATTR_VOLUME)) { + scan = &(*walk)->next; + skip = 0; + while (*scan && !skip) { + if (!((*scan)->dir_ent.attr & ATTR_VOLUME) && + !strncmp((char*)(*walk)->dir_ent.name,(char*)(*scan)->dir_ent.name,MSDOS_NAME)) { + VfatPrint("%s\n Duplicate directory entry.\n First %s\n", + path_name(*walk),file_stat(*walk)); + VfatPrint(" Second %s\n",file_stat(*scan)); + if (FsCheckFlags & FSCHECK_INTERACTIVE) + VfatPrint("1) Drop first\n2) Drop second\n3) Rename first\n" + "4) Rename second\n5) Auto-rename first\n" + "6) Auto-rename second\n"); + else VfatPrint(" Auto-renaming second.\n"); + switch ((FsCheckFlags & FSCHECK_INTERACTIVE) ? get_key("123456","?") : '6') { + case '1': + drop_file(fs,*walk); + *walk = (*walk)->next; + skip = 1; + break; + case '2': + drop_file(fs,*scan); + *scan = (*scan)->next; + continue; + case '3': + rename_file(*walk); + VfatPrint(" Renamed to %s\n",path_name(*walk)); + redo = 1; + break; + case '4': + rename_file(*scan); + VfatPrint(" Renamed to %s\n",path_name(*walk)); + redo = 1; + break; + case '5': + auto_rename(*walk); + VfatPrint(" Renamed to %s\n",file_name((*walk)->dir_ent. + name)); + break; + case '6': + auto_rename(*scan); + VfatPrint(" Renamed to %s\n",file_name((*scan)->dir_ent. + name)); + break; + } + } + scan = &(*scan)->next; + } + if (skip) continue; + } + if (!redo) walk = &(*walk)->next; + else { + walk = root; + dot = dotdot = redo = 0; + } + } + if (dots && !dot) + VfatPrint("%s\n \".\" is missing. Can't fix this yet.\n", + path_name(parent)); + if (dots && !dotdot) + VfatPrint("%s\n \"..\" is missing. Can't fix this yet.\n", + path_name(parent)); + return 0; +} + + +static void test_file(DOS_FS *fs,DOS_FILE *file,int read_test) +{ + DOS_FILE *owner; + unsigned long walk,prev,clusters,next_clu; + + prev = clusters = 0; + for (walk = FSTART(file,fs); walk > 0 && walk < fs->clusters+2; + walk = next_clu) { + next_clu = next_cluster(fs,walk); + if ((owner = get_owner(fs,walk))) { + if (owner == file) { + VfatPrint("%s\n Circular cluster chain. Truncating to %lu " + "cluster%s.\n",path_name(file),clusters,clusters == 1 ? "" : + "s"); + if (prev) set_fat(fs,prev,-1); + else if (!file->offset) + die( "Bad FAT32 root directory! (bad start cluster)\n" ); + else MODIFY_START(file,0,fs); + } + break; + } + if (bad_cluster(fs,walk)) break; + if (read_test) { + if (fs_test(cluster_start(fs,walk),fs->cluster_size)) { + prev = walk; + clusters++; + } + else { + VfatPrint("%s\n Cluster %lu (%lu) is unreadable. Skipping it.\n", + path_name(file),clusters,walk); + if (prev) set_fat(fs,prev,next_cluster(fs,walk)); + else MODIFY_START(file,next_cluster(fs,walk),fs); + set_fat(fs,walk,-2); + } + } + set_owner(fs,walk,file); + } + for (walk = FSTART(file,fs); walk > 0 && walk < fs->clusters+2; + walk = next_cluster(fs,walk)) + if (bad_cluster(fs,walk)) break; + else if (get_owner(fs,walk) == file) set_owner(fs,walk,NULL); + else break; +} + + +static void undelete(DOS_FS *fs,DOS_FILE *file) +{ + unsigned long clusters,left,prev,walk; + + clusters = left = (CF_LE_L(file->dir_ent.size)+fs->cluster_size-1)/ + fs->cluster_size; + prev = 0; + for (walk = FSTART(file,fs); left && walk >= 2 && walk < + fs->clusters+2 && !fs->fat[walk].value; walk++) { + left--; + if (prev) set_fat(fs,prev,walk); + prev = walk; + } + if (prev) set_fat(fs,prev,-1); + else MODIFY_START(file,0,fs); + if (left) + VfatPrint("Warning: Did only undelete %lu of %lu cluster%s.\n",clusters-left, + clusters,clusters == 1 ? "" : "s"); + +} + + +static void new_dir( void ) +{ + lfn_reset(); +} + + +static void add_file(DOS_FS *fs,DOS_FILE ***chain,DOS_FILE *parent, + loff_t offset,FDSC **cp) +{ + DOS_FILE *new; + DIR_ENT de; + FD_TYPE type; + + if (offset) { + fs_read(offset,sizeof(DIR_ENT),&de); + } else { + memcpy(de.name," ",MSDOS_NAME); + de.attr = ATTR_DIR; + de.size = de.time = de.date = 0; + de.start = CT_LE_W(fs->root_cluster & 0xffff); + de.starthi = CT_LE_W((fs->root_cluster >> 16) & 0xffff); + } + if ((type = file_type(cp,(char*)de.name)) != fdt_none) { + if (type == fdt_undelete && (de.attr & ATTR_DIR)) + die("Can't undelete directories."); + file_modify(cp,de.name); + fs_write(offset,1,&de); + } + if (IS_FREE(de.name)) { + lfn_check_orphaned(); + return; + } + if (de.attr == VFAT_LN_ATTR) { + lfn_add_slot(&de,offset); + return; + } + new = qalloc(&FsCheckMemQueue,sizeof(DOS_FILE)); + new->lfn = lfn_get(&de); + new->offset = offset; + memcpy(&new->dir_ent,&de,sizeof(de)); + new->next = new->first = NULL; + new->parent = parent; + if (type == fdt_undelete) undelete(fs,new); + **chain = new; + *chain = &new->next; + if (FsCheckFlags & FSCHECK_LIST_FILES) { + VfatPrint("Checking file %s",path_name(new)); + if (new->lfn) + VfatPrint(" (%s)", file_name(new->dir_ent.name) ); + VfatPrint("\n"); + } + if (offset && + strncmp((char*)de.name,MSDOS_DOT,MSDOS_NAME) != 0 && + strncmp((char*)de.name,MSDOS_DOTDOT,MSDOS_NAME) != 0) + ++FsCheckTotalFiles; + test_file(fs,new,FsCheckFlags & FSCHECK_TEST_READ); +} + + +static int subdirs(DOS_FS *fs,DOS_FILE *parent,FDSC **cp); + + +static int scan_dir(DOS_FS *fs,DOS_FILE *this,FDSC **cp) +{ + DOS_FILE **chain; + int i; + unsigned long clu_num; + + chain = &this->first; + i = 0; + clu_num = FSTART(this,fs); + new_dir(); + while (clu_num > 0 && clu_num != -1) { + add_file(fs,&chain,this,cluster_start(fs,clu_num)+(i % fs-> + cluster_size),cp); + i += sizeof(DIR_ENT); + if (!(i % fs->cluster_size)) + if ((clu_num = next_cluster(fs,clu_num)) == 0 || clu_num == -1) + break; + } + lfn_check_orphaned(); + if (check_dir(fs,&this->first,this->offset)) return 0; + if (check_files(fs,this->first)) return 1; + return subdirs(fs,this,cp); +} + + +static int subdirs(DOS_FS *fs,DOS_FILE *parent,FDSC **cp) +{ + DOS_FILE *walk; + + for (walk = parent ? parent->first : root; walk; walk = walk->next) + if (walk->dir_ent.attr & ATTR_DIR) + if (strncmp((char*)walk->dir_ent.name,MSDOS_DOT,MSDOS_NAME) && + strncmp((char*)walk->dir_ent.name,MSDOS_DOTDOT,MSDOS_NAME)) + if (scan_dir(fs,walk,file_cd(cp,(char*)walk->dir_ent.name))) return 1; + return 0; +} + + +int scan_root(DOS_FS *fs) +{ + DOS_FILE **chain; + int i; + + root = NULL; + chain = &root; + new_dir(); + if (fs->root_cluster) { + add_file(fs,&chain,NULL,0,&fp_root); + } + else { + for (i = 0; i < fs->root_entries; i++) + add_file(fs,&chain,NULL,fs->root_start+i*sizeof(DIR_ENT),&fp_root); + } + lfn_check_orphaned(); + (void) check_dir(fs,&root,0); + if (check_files(fs,root)) return 1; + return subdirs(fs,NULL,&fp_root); +} + +/* Local Variables: */ +/* tab-width: 8 */ +/* End: */ diff --git a/reactos/lib/fslib/vfatlib/check/check.h b/reactos/lib/fslib/vfatlib/check/check.h new file mode 100644 index 00000000000..be3bfea5bc1 --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/check.h @@ -0,0 +1,23 @@ +/* check.h - Check and repair a PC/MS-DOS file system */ + +/* Written 1993 by Werner Almesberger */ + + +#ifndef _CHECK_H +#define _CHECK_H + +loff_t alloc_rootdir_entry(DOS_FS *fs, DIR_ENT *de, const char *pattern); + +/* Allocate a free slot in the root directory for a new file. The file name is + constructed after 'pattern', which must include a %d type format for VfatPrint + and expand to exactly 11 characters. The name actually used is written into + the 'de' structure, the rest of *de is cleared. The offset returned is to + where in the filesystem the entry belongs. */ + +int scan_root(DOS_FS *fs); + +/* Scans the root directory and recurses into all subdirectories. See check.c + for all the details. Returns a non-zero integer if the file system has to + be checked again. */ + +#endif diff --git a/reactos/lib/fslib/vfatlib/check/common.c b/reactos/lib/fslib/vfatlib/check/common.c new file mode 100644 index 00000000000..d8be79e3fcd --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/common.c @@ -0,0 +1,125 @@ +/* common.c - Common functions */ + +/* Written 1993 by Werner Almesberger */ + +/* FAT32, VFAT, Atari format support, and various fixes additions May 1998 + * by Roman Hodek */ + + +#include "vfatlib.h" + +#define NDEBUG +#include + + +typedef struct _link { + void *data; + struct _link *next; +} LINK; + + +void die(char *msg,...) +{ + va_list args; + + va_start(args,msg); + //vfprintf(stderr,msg,args); + DPRINT1("Unrecoverable problem!\n"); + va_end(args); + //fprintf(stderr,"\n"); + //exit(1); +} + +void pdie(char *msg,...) +{ + va_list args; + + va_start(args,msg); + //vfprintf(stderr,msg,args); + DPRINT1("Unrecoverable problem!\n"); + va_end(args); + //fprintf(stderr,":%s\n",strerror(errno)); + //exit(1); + DbgBreakPoint(); +} + + +void *vfalloc(int size) +{ + void *ptr; + + ptr = RtlAllocateHeap(RtlGetProcessHeap (), + 0, + size); + + if (ptr == NULL) + { + DPRINT1("Allocation failed!\n"); + return NULL; + } + + return ptr; +} + +void vffree(void *ptr) +{ + RtlFreeHeap(RtlGetProcessHeap(), 0, ptr); +} + +void *qalloc(void **root,int size) +{ + LINK *link; + + link = vfalloc(sizeof(LINK)); + link->next = *root; + *root = link; + return link->data = vfalloc(size); +} + + +void qfree(void **root) +{ + LINK *this; + + while (*root) { + this = (LINK *) *root; + *root = this->next; + vffree(this->data); + vffree(this); + } +} + + +#ifdef min +#undef min +#endif +int min(int a,int b) +{ + return a < b ? a : b; +} + + +char get_key(char *valid,char *prompt) +{ +#if 0 + int ch,okay; + + while (1) { + if (prompt) VfatPrint("%s ",prompt); + fflush(stdout); + while (ch = getchar(), ch == ' ' || ch == '\t'); + if (ch == EOF) exit(1); + if (!strchr(valid,okay = ch)) okay = 0; + while (ch = getchar(), ch != '\n' && ch != EOF); + if (ch == EOF) exit(1); + if (okay) return okay; + VfatPrint("Invalid input.\n"); + } +#else + return 0; +#endif +} + +/* Local Variables: */ +/* tab-width: 8 */ +/* End: */ diff --git a/reactos/lib/fslib/vfatlib/check/common.h b/reactos/lib/fslib/vfatlib/check/common.h new file mode 100644 index 00000000000..0b001e6da93 --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/common.h @@ -0,0 +1,42 @@ +/* common.h - Common functions */ + +# define MSDOS_FAT12 4084 /* maximum number of clusters in a 12 bit FAT */ + +#include "version.h" + +#ifndef _COMMON_H +#define _COMMON_H + +//void die(char *msg,...) __attribute((noreturn)); +void die(char *msg,...); + +/* Displays a prinf-style message and terminates the program. */ + +//void pdie(char *msg,...) __attribute((noreturn)); +void pdie(char *msg,...); + +/* Like die, but appends an error message according to the state of errno. */ + +void *vfalloc(int size); +void vffree(void *ptr); +/* mallocs SIZE bytes and returns a pointer to the data. Terminates the program + if malloc fails. */ + +void *qalloc(void **root,int size); + +/* Like alloc, but registers the data area in a list described by ROOT. */ + +void qfree(void **root); + +/* Deallocates all qalloc'ed data areas described by ROOT. */ + +//int min(int a,int b); + +/* Returns the smaller integer value of a and b. */ + +char get_key(char *valid,char *prompt); + +/* Displays PROMPT and waits for user input. Only characters in VALID are + accepted. Terminates the program on EOF. Returns the character. */ + +#endif diff --git a/reactos/lib/fslib/vfatlib/check/compiler.h b/reactos/lib/fslib/vfatlib/check/compiler.h new file mode 100644 index 00000000000..2d3edfe38b7 --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/compiler.h @@ -0,0 +1,158 @@ +#ifndef __LINUX_COMPILER_H +#define __LINUX_COMPILER_H + +#ifndef __ASSEMBLY__ + +#ifdef __CHECKER__ +# define __user __attribute__((noderef, address_space(1))) +# define __kernel /* default address space */ +# define __safe __attribute__((safe)) +# define __force __attribute__((force)) +# define __nocast __attribute__((nocast)) +# define __iomem __attribute__((noderef, address_space(2))) +# define __acquires(x) __attribute__((context(0,1))) +# define __releases(x) __attribute__((context(1,0))) +# define __acquire(x) __context__(1) +# define __release(x) __context__(-1) +# define __cond_lock(x) ((x) ? ({ __context__(1); 1; }) : 0) +extern void __chk_user_ptr(void __user *); +extern void __chk_io_ptr(void __iomem *); +#else +# define __user +# define __kernel +# define __safe +# define __force +# define __nocast +# define __iomem +# define __chk_user_ptr(x) (void)0 +# define __chk_io_ptr(x) (void)0 +//# define __builtin_warning(x, y...) (1) +# define __acquires(x) +# define __releases(x) +# define __acquire(x) (void)0 +# define __release(x) (void)0 +# define __cond_lock(x) (x) +#endif + +#ifdef __KERNEL__ + +#if __GNUC__ > 4 +#error no compiler-gcc.h file for this gcc version +#elif __GNUC__ == 4 +# include +#elif __GNUC__ == 3 +# include +#elif __GNUC__ == 2 +# include +#else +# error Sorry, your compiler is too old/not recognized. +#endif + +/* Intel compiler defines __GNUC__. So we will overwrite implementations + * coming from above header files here + */ +#ifdef __INTEL_COMPILER +# include +#endif + +/* + * Generic compiler-dependent macros required for kernel + * build go below this comment. Actual compiler/compiler version + * specific implementations come from the above header files + */ + +#define likely(x) __builtin_expect(!!(x), 1) +#define unlikely(x) __builtin_expect(!!(x), 0) + +/* Optimization barrier */ +#ifndef barrier +# define barrier() __memory_barrier() +#endif + +#ifndef RELOC_HIDE +# define RELOC_HIDE(ptr, off) \ + ({ unsigned long __ptr; \ + __ptr = (unsigned long) (ptr); \ + (typeof(ptr)) (__ptr + (off)); }) +#endif + +#endif /* __KERNEL__ */ + +#endif /* __ASSEMBLY__ */ + +/* + * Allow us to mark functions as 'deprecated' and have gcc emit a nice + * warning for each use, in hopes of speeding the functions removal. + * Usage is: + * int __deprecated foo(void) + */ +#ifndef __deprecated +# define __deprecated /* unimplemented */ +#endif + +#ifdef MODULE +#define __deprecated_for_modules __deprecated +#else +#define __deprecated_for_modules +#endif + +#ifndef __must_check +#define __must_check +#endif + +/* + * Allow us to avoid 'defined but not used' warnings on functions and data, + * as well as force them to be emitted to the assembly file. + * + * As of gcc 3.3, static functions that are not marked with attribute((used)) + * may be elided from the assembly file. As of gcc 3.3, static data not so + * marked will not be elided, but this may change in a future gcc version. + * + * In prior versions of gcc, such functions and data would be emitted, but + * would be warned about except with attribute((unused)). + */ +#ifndef __attribute_used__ +# define __attribute_used__ /* unimplemented */ +#endif + +/* + * From the GCC manual: + * + * Many functions have no effects except the return value and their + * return value depends only on the parameters and/or global + * variables. Such a function can be subject to common subexpression + * elimination and loop optimization just as an arithmetic operator + * would be. + * [...] + */ +#ifndef __attribute_pure__ +# define __attribute_pure__ /* unimplemented */ +#endif + +/* + * From the GCC manual: + * + * Many functions do not examine any values except their arguments, + * and have no effects except the return value. Basically this is + * just slightly more strict class than the `pure' attribute above, + * since function is not allowed to read global memory. + * + * Note that a function that has pointer arguments and examines the + * data pointed to must _not_ be declared `const'. Likewise, a + * function that calls a non-`const' function usually must not be + * `const'. It does not make sense for a `const' function to return + * `void'. + */ +#ifndef __attribute_const__ +# define __attribute_const__ /* unimplemented */ +#endif + +#ifndef noinline +#define noinline +#endif + +#ifndef __always_inline +#define __always_inline inline +#endif + +#endif /* __LINUX_COMPILER_H */ diff --git a/reactos/lib/fslib/vfatlib/check/dosfsck.h b/reactos/lib/fslib/vfatlib/check/dosfsck.h new file mode 100644 index 00000000000..0ddbf2ba35e --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/dosfsck.h @@ -0,0 +1,188 @@ +/* dosfsck.h - Common data structures and global variables */ + +/* Written 1993 by Werner Almesberger */ + +/* FAT32, VFAT, Atari format support, and various fixes additions May 1998 + * by Roman Hodek */ + + +#ifndef _DOSFSCK_H +#define _DOSFSCK_H + +//#include "types.h" + +#ifdef _WIN32 + +typedef unsigned char __u8; +typedef unsigned short __u16; +typedef unsigned int __u32; +typedef unsigned __int64 __u64; +typedef unsigned short __le16; +typedef unsigned int __le32; +typedef __int64 loff_t; +typedef __int64 ll_t; + +#define CF_LE_W(v) (v) +#define CF_LE_L(v) (v) +#define CT_LE_W(v) (v) +#define CT_LE_L(v) (v) + +#endif + +#ifdef _M_IX86 +#include "byteorder.h" +#endif + +#include "msdos_fs.h" + +#if 0 +#undef CF_LE_W +#undef CF_LE_L +#undef CT_LE_W +#undef CT_LE_L +#endif + +#if __BYTE_ORDER == __BIG_ENDIAN +#include "byteswap.h" +#if 0 +#define CF_LE_W(v) bswap_16(v) +#define CF_LE_L(v) bswap_32(v) +#define CT_LE_W(v) CF_LE_W(v) +#define CT_LE_L(v) CF_LE_L(v) +#endif +#else +#define CF_LE_W(v) (v) +#define CF_LE_L(v) (v) +#define CT_LE_W(v) (v) +#define CT_LE_L(v) (v) +#endif /* __BIG_ENDIAN */ + +#define VFAT_LN_ATTR (ATTR_RO | ATTR_HIDDEN | ATTR_SYS | ATTR_VOLUME) + +#include + +/* ++roman: Use own definition of boot sector structure -- the kernel headers' + * name for it is msdos_boot_sector in 2.0 and fat_boot_sector in 2.1 ... */ +struct boot_sector { + __u8 ignored[3]; /* Boot strap short or near jump */ + __u8 system_id[8]; /* Name - can be used to special case + partition manager volumes */ + __u8 sector_size[2]; /* bytes per logical sector */ + __u8 cluster_size; /* sectors/cluster */ + __u16 reserved; /* reserved sectors */ + __u8 fats; /* number of FATs */ + __u8 dir_entries[2]; /* root directory entries */ + __u8 sectors[2]; /* number of sectors */ + __u8 media; /* media code (unused) */ + __u16 fat_length; /* sectors/FAT */ + __u16 secs_track; /* sectors per track */ + __u16 heads; /* number of heads */ + __u32 hidden; /* hidden sectors (unused) */ + __u32 total_sect; /* number of sectors (if sectors == 0) */ + + /* The following fields are only used by FAT32 */ + __u32 fat32_length; /* sectors/FAT */ + __u16 flags; /* bit 8: fat mirroring, low 4: active fat */ + __u8 version[2]; /* major, minor filesystem version */ + __u32 root_cluster; /* first cluster in root directory */ + __u16 info_sector; /* filesystem info sector */ + __u16 backup_boot; /* backup boot sector */ + __u16 reserved2[6]; /* Unused */ + + /* fill up to 512 bytes */ + __u8 junk[448]; +}; + +#include + +struct info_sector { + __u32 magic; /* Magic for info sector ('RRaA') */ + __u8 junk[0x1dc]; + __u32 reserved1; /* Nothing as far as I can tell */ + __u32 signature; /* 0x61417272 ('rrAa') */ + __u32 free_clusters; /* Free cluster count. -1 if unknown */ + __u32 next_cluster; /* Most recently allocated cluster. */ + __u32 reserved2[3]; + __u16 reserved3; + __u16 boot_sign; +}; + +typedef struct { + __u8 name[8],ext[3]; /* name and extension */ + __u8 attr; /* attribute bits */ + __u8 lcase; /* Case for base and extension */ + __u8 ctime_ms; /* Creation time, milliseconds */ + __u16 ctime; /* Creation time */ + __u16 cdate; /* Creation date */ + __u16 adate; /* Last access date */ + __u16 starthi; /* High 16 bits of cluster in FAT32 */ + __u16 time,date,start;/* time, date and first cluster */ + __u32 size; /* file size (in bytes) */ +} DIR_ENT; + +typedef struct _dos_file { + DIR_ENT dir_ent; + char *lfn; + loff_t offset; + struct _dos_file *parent; /* parent directory */ + struct _dos_file *next; /* next entry */ + struct _dos_file *first; /* first entry (directory only) */ +} DOS_FILE; + +typedef struct { + unsigned long value; + unsigned long reserved; + DOS_FILE *owner; + int prev; /* number of previous clusters */ +} FAT_ENTRY; + +typedef struct { + int nfats; + loff_t fat_start; + unsigned int fat_size; /* unit is bytes */ + unsigned int fat_bits; /* size of a FAT entry */ + unsigned int eff_fat_bits; /* # of used bits in a FAT entry */ + unsigned long root_cluster; /* 0 for old-style root dir */ + loff_t root_start; + unsigned int root_entries; + loff_t data_start; + unsigned int cluster_size; + unsigned long clusters; + loff_t fsinfo_start; /* 0 if not present */ + long free_clusters; + loff_t backupboot_start; /* 0 if not present */ + FAT_ENTRY *fat; +} DOS_FS; + +#ifndef offsetof +#define offsetof(t,e) ((int)&(((t *)0)->e)) +#endif + +#define FSCHECK_INTERACTIVE 0x01 +#define FSCHECK_LIST_FILES 0x02 +#define FSCHECK_TEST_READ 0x04 +#define FSCHECK_VERBOSE 0x08 +#define FSCHECK_IMMEDIATE_WRITE 0x10 + +extern ULONG FsCheckFlags; +extern ULONG FsCheckTotalFiles; +extern void *FsCheckMemQueue; + +/* value to use as end-of-file marker */ +#define FAT_EOF(fs) (0xff8 | FAT_EXTD(fs)) +#define FAT_IS_EOF(fs,v) ((unsigned long)(v) >= (0xff8|FAT_EXTD(fs))) +/* value to mark bad clusters */ +#define FAT_BAD(fs) (0xff7 | FAT_EXTD(fs)) +/* range of values used for bad clusters */ +#define FAT_MIN_BAD(fs) (0xff7 | FAT_EXTD(fs)) +#define FAT_MAX_BAD(fs) (0xff7 | FAT_EXTD(fs)) +#define FAT_IS_BAD(fs,v) ((v) >= FAT_MIN_BAD(fs) && (v) <= FAT_MAX_BAD(fs)) + +/* return -16 as a number with fs->fat_bits bits */ +#define FAT_EXTD(fs) (((1 << fs->eff_fat_bits)-1) & ~0xf) + +#endif + +/* Local Variables: */ +/* tab-width: 8 */ +/* End: */ diff --git a/reactos/lib/fslib/vfatlib/check/fat.c b/reactos/lib/fslib/vfatlib/check/fat.c new file mode 100644 index 00000000000..7e2ad9c1d62 --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/fat.c @@ -0,0 +1,361 @@ +/* fat.c - Read/write access to the FAT */ + +/* Written 1993 by Werner Almesberger */ + +/* FAT32, VFAT, Atari format support, and various fixes additions May 1998 + * by Roman Hodek */ + + +#include "vfatlib.h" + +#define NDEBUG +#include + + +//#pragma warning(disable: 4018) + +static void get_fat(FAT_ENTRY *entry,void *fat,unsigned long cluster,DOS_FS *fs) +{ + unsigned char *ptr; + + switch(fs->fat_bits) { + case 12: + ptr = &((unsigned char *) fat)[cluster*3/2]; + entry->value = 0xfff & (cluster & 1 ? (ptr[0] >> 4) | (ptr[1] << 4) : + (ptr[0] | ptr[1] << 8)); + break; + case 16: + entry->value = CF_LE_W(((unsigned short *) fat)[cluster]); + break; + case 32: + /* According to M$, the high 4 bits of a FAT32 entry are reserved and + * are not part of the cluster number. So we cut them off. */ + { + unsigned long e = CF_LE_L(((unsigned int *) fat)[cluster]); + entry->value = e & 0xfffffff; + entry->reserved = e >> 28; + } + break; + default: + die("Bad FAT entry size: %d bits.",fs->fat_bits); + } + entry->owner = NULL; +} + + +void read_fat(DOS_FS *fs) +{ + int eff_size; + unsigned long i; + void *first,*second,*use; + int first_ok,second_ok; + + eff_size = ((fs->clusters+2)*fs->fat_bits+7)/8; + // TMN: Must round up to disk-sector boundary. For now, assume 512-byte disk. + if (eff_size % 512) { + eff_size += 512 - (eff_size % 512); + } + first = vfalloc(eff_size); + fs_read(fs->fat_start,eff_size,first); + use = first; + if (fs->nfats > 1) { + second = vfalloc(eff_size); + fs_read(fs->fat_start+fs->fat_size,eff_size,second); + } + else + second = NULL; + if (second && memcmp(first,second,eff_size) != 0) { + FAT_ENTRY first_media, second_media; + get_fat(&first_media,first,0,fs); + get_fat(&second_media,second,0,fs); + first_ok = (first_media.value & FAT_EXTD(fs)) == FAT_EXTD(fs); + second_ok = (second_media.value & FAT_EXTD(fs)) == FAT_EXTD(fs); + if (first_ok && !second_ok) { + VfatPrint("FATs differ - using first FAT.\n"); + fs_write(fs->fat_start+fs->fat_size,eff_size,use = first); + } + if (!first_ok && second_ok) { + VfatPrint("FATs differ - using second FAT.\n"); + fs_write(fs->fat_start,eff_size,use = second); + } + if (first_ok && second_ok) { + if (FsCheckFlags & FSCHECK_INTERACTIVE) { + VfatPrint("FATs differ but appear to be intact. Use which FAT ?\n" + "1) Use first FAT\n2) Use second FAT\n"); + if (get_key("12","?") == '1') + fs_write(fs->fat_start+fs->fat_size,eff_size,use = first); + else fs_write(fs->fat_start,eff_size,use = second); + } + else { + VfatPrint("FATs differ but appear to be intact. Using first " + "FAT.\n"); + fs_write(fs->fat_start+fs->fat_size,eff_size,use = first); + } + } + if (!first_ok && !second_ok) { + VfatPrint("Both FATs appear to be corrupt. Giving up.\n"); + //exit(1); + } + } + fs->fat = qalloc(&FsCheckMemQueue,sizeof(FAT_ENTRY)*(fs->clusters+2)); + for (i = 2; i < fs->clusters+2; i++) get_fat(&fs->fat[i],use,i,fs); + for (i = 2; i < fs->clusters+2; i++) + if (fs->fat[i].value >= fs->clusters+2 && + (fs->fat[i].value < FAT_MIN_BAD(fs))) { + VfatPrint("Cluster %ld out of range (%ld > %ld). Setting to EOF.\n", + i-2,fs->fat[i].value,fs->clusters+2-1); + set_fat(fs,i,-1); + } + vffree(first); + if (second) + vffree(second); +} + + +void set_fat(DOS_FS *fs,unsigned long cluster,unsigned long new) +{ + unsigned char data[4]; + int size = 0; + loff_t offs = 0LL; + + if ((long)new == -1) + new = FAT_EOF(fs); + else if ((long)new == -2) + new = FAT_BAD(fs); + switch( fs->fat_bits ) { + case 12: + offs = fs->fat_start+cluster*3/2; + if (cluster & 1) { + data[0] = ((new & 0xf) << 4) | (fs->fat[cluster-1].value >> 8); + data[1] = new >> 4; + } + else { + data[0] = new & 0xff; + data[1] = (new >> 8) | (cluster == fs->clusters-1 ? 0 : + (0xff & fs->fat[cluster+1].value) << 4); + } + size = 2; + break; + case 16: + offs = fs->fat_start+cluster*2; + *(unsigned short *) data = CT_LE_W(new); + size = 2; + break; + case 32: + offs = fs->fat_start+cluster*4; + /* According to M$, the high 4 bits of a FAT32 entry are reserved and + * are not part of the cluster number. So we never touch them. */ + *(unsigned long *) data = CT_LE_L( (new & 0xfffffff) | + (fs->fat[cluster].reserved << 28) ); + size = 4; + break; + default: + die("Bad FAT entry size: %d bits.",fs->fat_bits); + } + fs->fat[cluster].value = new; + fs_write(offs,size,&data); + fs_write(offs+fs->fat_size,size,&data); +} + + +int bad_cluster(DOS_FS *fs,unsigned long cluster) +{ + return FAT_IS_BAD(fs,fs->fat[cluster].value); +} + + +unsigned long next_cluster(DOS_FS *fs,unsigned long cluster) +{ + unsigned long value; + + value = fs->fat[cluster].value; + if (FAT_IS_BAD(fs,value)) + die("Internal error: next_cluster on bad cluster"); + return FAT_IS_EOF(fs,value) ? -1 : value; +} + + +loff_t cluster_start(DOS_FS *fs,unsigned long cluster) +{ + return fs->data_start+((loff_t)cluster-2)*fs->cluster_size; +} + + +void set_owner(DOS_FS *fs,unsigned long cluster,DOS_FILE *owner) +{ + if (owner && fs->fat[cluster].owner) + die("Internal error: attempt to change file owner"); + fs->fat[cluster].owner = owner; +} + + +DOS_FILE *get_owner(DOS_FS *fs,unsigned long cluster) +{ + return fs->fat[cluster].owner; +} + + +void fix_bad(DOS_FS *fs) +{ + unsigned long i; + + if (FsCheckFlags & FSCHECK_VERBOSE) + VfatPrint("Checking for bad clusters.\n"); + for (i = 2; i < fs->clusters+2; i++) + if (!get_owner(fs,i) && !FAT_IS_BAD(fs,fs->fat[i].value)) + if (!fs_test(cluster_start(fs,i),fs->cluster_size)) { + VfatPrint("Cluster %lu is unreadable.\n",i); + set_fat(fs,i,-2); + } +} + + +void reclaim_free(DOS_FS *fs) +{ + int reclaimed; + unsigned long i; + + if (FsCheckFlags & FSCHECK_VERBOSE) + VfatPrint("Checking for unused clusters.\n"); + reclaimed = 0; + for (i = 2; i < fs->clusters+2; i++) + if (!get_owner(fs,i) && fs->fat[i].value && + !FAT_IS_BAD(fs,fs->fat[i].value)) { + set_fat(fs,i,0); + reclaimed++; + } + if (reclaimed) + VfatPrint("Reclaimed %d unused cluster%s (%d bytes).\n",reclaimed, + reclaimed == 1 ? "" : "s",reclaimed*fs->cluster_size); +} + + +static void tag_free(DOS_FS *fs,DOS_FILE *ptr) +{ + DOS_FILE *owner; + int prev; + unsigned long i,walk; + + for (i = 2; i < fs->clusters+2; i++) + if (fs->fat[i].value && !FAT_IS_BAD(fs,fs->fat[i].value) && + !get_owner(fs,i) && !fs->fat[i].prev) { + prev = 0; + for (walk = i; walk > 0 && walk != -1; + walk = next_cluster(fs,walk)) { + if (!(owner = get_owner(fs,walk))) set_owner(fs,walk,ptr); + else if (owner != ptr) + die("Internal error: free chain collides with file"); + else { + set_fat(fs,prev,-1); + break; + } + prev = walk; + } + } +} + + +void reclaim_file(DOS_FS *fs) +{ + DOS_FILE dummy; + int reclaimed,files,changed; + unsigned long i,next,walk; + + if (FsCheckFlags & FSCHECK_VERBOSE) + VfatPrint("Reclaiming unconnected clusters.\n"); + for (i = 2; i < fs->clusters+2; i++) fs->fat[i].prev = 0; + for (i = 2; i < fs->clusters+2; i++) { + next = fs->fat[i].value; + if (!get_owner(fs,i) && next && next < fs->clusters+2) { + if (get_owner(fs,next) || !fs->fat[next].value || + FAT_IS_BAD(fs,fs->fat[next].value)) set_fat(fs,i,-1); + else fs->fat[next].prev++; + } + } + do { + tag_free(fs,&dummy); + changed = 0; + for (i = 2; i < fs->clusters+2; i++) + if (fs->fat[i].value && !FAT_IS_BAD(fs,fs->fat[i].value) && + !get_owner(fs, i)) { + if (!fs->fat[fs->fat[i].value].prev--) + die("Internal error: prev going below zero"); + set_fat(fs,i,-1); + changed = 1; + VfatPrint("Broke cycle at cluster %lu in free chain.\n",i); + break; + } + } + while (changed); + files = reclaimed = 0; + for (i = 2; i < fs->clusters+2; i++) + if (get_owner(fs,i) == &dummy && !fs->fat[i].prev) { + DIR_ENT de; + loff_t offset; + files++; + offset = alloc_rootdir_entry(fs,&de,"FSCK%04dREC"); + de.start = CT_LE_W(i&0xffff); + if (fs->fat_bits == 32) + de.starthi = CT_LE_W(i>>16); + for (walk = i; walk > 0 && walk != -1; + walk = next_cluster(fs,walk)) { + de.size = CT_LE_L(CF_LE_L(de.size)+fs->cluster_size); + reclaimed++; + } + fs_write(offset,sizeof(DIR_ENT),&de); + } + if (reclaimed) + VfatPrint("Reclaimed %d unused cluster%s (%d bytes) in %d chain%s.\n", + reclaimed,reclaimed == 1 ? "" : "s",reclaimed*fs->cluster_size,files, + files == 1 ? "" : "s"); +} + + +unsigned long update_free(DOS_FS *fs) +{ + unsigned long i; + unsigned long free = 0; + int do_set = 0; + + for (i = 2; i < fs->clusters+2; i++) + if (!get_owner(fs,i) && !FAT_IS_BAD(fs,fs->fat[i].value)) + ++free; + + if (!fs->fsinfo_start) + return free; + + if (FsCheckFlags & FSCHECK_VERBOSE) + VfatPrint("Checking free cluster summary.\n"); + if (fs->free_clusters >= 0) { + if (free != fs->free_clusters) { + VfatPrint( "Free cluster summary wrong (%ld vs. really %ld)\n", + fs->free_clusters,free); + if (FsCheckFlags & FSCHECK_INTERACTIVE) + VfatPrint( "1) Correct\n2) Don't correct\n" ); + else VfatPrint( " Auto-correcting.\n" ); + if (!(FsCheckFlags & FSCHECK_INTERACTIVE) || get_key("12","?") == '1') + do_set = 1; + } + } + else { + VfatPrint( "Free cluster summary uninitialized (should be %ld)\n", free ); + if (FsCheckFlags & FSCHECK_INTERACTIVE) + VfatPrint( "1) Set it\n2) Leave it uninitialized\n" ); + else VfatPrint( " Auto-setting.\n" ); + if (!(FsCheckFlags & FSCHECK_INTERACTIVE) || get_key("12","?") == '1') + do_set = 1; + } + + if (do_set) { + fs->free_clusters = free; + free = CT_LE_L(free); + fs_write(fs->fsinfo_start+offsetof(struct info_sector,free_clusters), + sizeof(free),&free); + } + + return free; +} + +/* Local Variables: */ +/* tab-width: 8 */ +/* End: */ diff --git a/reactos/lib/fslib/vfatlib/check/fat.h b/reactos/lib/fslib/vfatlib/check/fat.h new file mode 100644 index 00000000000..8c2312d9e64 --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/fat.h @@ -0,0 +1,64 @@ +/* fat.h - Read/write access to the FAT */ + +/* Written 1993 by Werner Almesberger */ + + +#ifndef _FAT_H +#define _FAT_H + +void read_fat(DOS_FS *fs); + +/* Loads the FAT of the file system described by FS. Initializes the FAT, + replaces broken FATs and rejects invalid cluster entries. */ + +void set_fat(DOS_FS *fs,unsigned long cluster,unsigned long new); + +/* Changes the value of the CLUSTERth cluster of the FAT of FS to NEW. Special + values of NEW are -1 (EOF, 0xff8 or 0xfff8) and -2 (bad sector, 0xff7 or + 0xfff7) */ + +int bad_cluster(DOS_FS *fs,unsigned long cluster); + +/* Returns a non-zero integer if the CLUSTERth cluster is marked as bad or zero + otherwise. */ + +unsigned long next_cluster(DOS_FS *fs,unsigned long cluster); + +/* Returns the number of the cluster following CLUSTER, or -1 if this is the + last cluster of the respective cluster chain. CLUSTER must not be a bad + cluster. */ + +loff_t cluster_start(DOS_FS *fs,unsigned long cluster); + +/* Returns the byte offset of CLUSTER, relative to the respective device. */ + +void set_owner(DOS_FS *fs,unsigned long cluster,DOS_FILE *owner); + +/* Sets the owner pointer of the respective cluster to OWNER. If OWNER was NULL + before, it can be set to NULL or any non-NULL value. Otherwise, only NULL is + accepted as the new value. */ + +DOS_FILE *get_owner(DOS_FS *fs,unsigned long cluster); + +/* Returns the owner of the repective cluster or NULL if the cluster has no + owner. */ + +void fix_bad(DOS_FS *fs); + +/* Scans the disk for currently unused bad clusters and marks them as bad. */ + +void reclaim_free(DOS_FS *fs); + +/* Marks all allocated, but unused clusters as free. */ + +void reclaim_file(DOS_FS *fs); + +/* Scans the FAT for chains of allocated, but unused clusters and creates files + for them in the root directory. Also tries to fix all inconsistencies (e.g. + loops, shared clusters, etc.) in the process. */ + +unsigned long update_free(DOS_FS *fs); + +/* Updates free cluster count in FSINFO sector. */ + +#endif diff --git a/reactos/lib/fslib/vfatlib/check/file.c b/reactos/lib/fslib/vfatlib/check/file.c new file mode 100644 index 00000000000..d3cf2ecfa00 --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/file.c @@ -0,0 +1,234 @@ +/* file.c - Additional file attributes */ + +/* Written 1993 by Werner Almesberger */ + +/* FAT32, VFAT, Atari format support, and various fixes additions May 1998 + * by Roman Hodek */ + +/* Need to define this so that islower isn't inlined + (ntdll doesn't export isctype) */ +#define __NO_CTYPE_INLINES + +#include "vfatlib.h" + +#define NDEBUG +#include + +FDSC *fp_root = NULL; + + +static void put_char(char **p,unsigned char c) +{ + if ((c >= ' ' && c < 0x7f) || c >= 0xa0) *(*p)++ = c; + else { + *(*p)++ = '\\'; + *(*p)++ = '0'+(c >> 6); + *(*p)++ = '0'+((c >> 3) & 7); + *(*p)++ = '0'+(c & 7); + } +} + + +char *file_name(unsigned char *fixed) +{ + static char path[MSDOS_NAME*4+2]; + char *p; + int i,j; + + p = path; + for (i = j = 0; i < 8; i++) + if (fixed[i] != ' ') { + while (j++ < i) *p++ = ' '; + put_char(&p,fixed[i]); + } + if (strncmp((char*)fixed+8," ",3)) { + *p++ = '.'; + for (i = j = 0; i < 3; i++) + if (fixed[i+8] != ' ') { + while (j++ < i) *p++ = ' '; + put_char(&p,fixed[i+8]); + } + } + *p = 0; + return path; +} + +int file_cvt(unsigned char *name,unsigned char *fixed) +{ + unsigned char c; + int size,ext,cnt; + + size = 8; + ext = 0; + while (*name) { + c = *name; + if (c < ' ' || c > 0x7e || strchr("*?<>|\"/",c)) { + VfatPrint("Invalid character in name. Use \\ooo for special " + "characters.\n"); + return 0; + } + if (c == '.') { + if (ext) { + VfatPrint("Duplicate dots in name.\n"); + return 0; + } + while (size--) *fixed++ = ' '; + size = 3; + ext = 1; + name++; + continue; + } + if (c == '\\') { + c = 0; + for (cnt = 3; cnt; cnt--) { + if (*name < '0' || *name > '7') { + VfatPrint("Invalid octal character.\n"); + return 0; + } + c = c*8+*name++-'0'; + } + if (cnt < 4) { + VfatPrint("Expected three octal digits.\n"); + return 0; + } + name += 3; + } + if (islower(c)) c = toupper(c); + if (size) { + *fixed++ = c; + size--; + } + name++; + } + if (*name || size == 8) return 0; + if (!ext) { + while (size--) *fixed++ = ' '; + size = 3; + } + while (size--) *fixed++ = ' '; + return 1; +} + + +void file_add(char *path,FD_TYPE type) +{ + FDSC **current,*walk; + char name[MSDOS_NAME]; + char *here; + + current = &fp_root; + if (*path != '/') die("%s: Absolute path required.",path); + path++; + while (1) { + if ((here = strchr(path,'/'))) *here = 0; + if (!file_cvt((unsigned char*)path,(unsigned char *)name)) {return; /*exit(2);*/} + for (walk = *current; walk; walk = walk->next) + if (!here && (!strncmp(name,walk->name,MSDOS_NAME) || (type == + fdt_undelete && !strncmp(name+1,walk->name+1,MSDOS_NAME-1)))) + die("Ambiguous name: \"%s\"",path); + else if (here && !strncmp(name,walk->name,MSDOS_NAME)) break; + if (!walk) { + walk = vfalloc(sizeof(FDSC)); + strncpy(walk->name,name,MSDOS_NAME); + walk->type = here ? fdt_none : type; + walk->first = NULL; + walk->next = *current; + *current = walk; + } + current = &walk->first; + if (!here) break; + *here = '/'; + path = here+1; + } +} + + +FDSC **file_cd(FDSC **curr,char *fixed) +{ + FDSC **walk; + + if (!curr || !*curr) return NULL; + for (walk = curr; *walk; walk = &(*walk)->next) + if (!strncmp((*walk)->name,fixed,MSDOS_NAME) && (*walk)->first) + return &(*walk)->first; + return NULL; +} + + +static FDSC **file_find(FDSC **dir,char *fixed) +{ + if (!dir || !*dir) return NULL; + if (*(unsigned char *) fixed == DELETED_FLAG) { + while (*dir) { + if (!strncmp((*dir)->name+1,fixed+1,MSDOS_NAME-1) && !(*dir)->first) + return dir; + dir = &(*dir)->next; + } + return NULL; + } + while (*dir) { + if (!strncmp((*dir)->name,fixed,MSDOS_NAME) && !(*dir)->first) + return dir; + dir = &(*dir)->next; + } + return NULL; +} + + +FD_TYPE file_type(FDSC **curr,char *fixed) +{ + FDSC **this; + + if ((this = file_find(curr,fixed))) return (*this)->type; + return fdt_none; +} + + +void file_modify(FDSC **curr,unsigned char *fixed) +{ + FDSC **this,*next; + + if (!(this = file_find(curr,(char *)fixed))) + die("Internal error: file_find failed"); + switch ((*this)->type) { + case fdt_drop: + VfatPrint("Dropping %s\n",file_name(fixed)); + *fixed = DELETED_FLAG; + break; + case fdt_undelete: + *fixed = *(*this)->name; + VfatPrint("Undeleting %s\n",file_name(fixed)); + break; + default: + die("Internal error: file_modify"); + } + next = (*this)->next; + vffree(*this); + *this = next; +} + + +static void report_unused(FDSC *this) +{ + FDSC *next; + + while (this) { + next = this->next; + if (this->first) report_unused(this->first); + else if (this->type != fdt_none) + VfatPrint("Warning: did not %s file %s\n",this->type == fdt_drop ? + "drop" : "undelete",file_name((unsigned char*)this->name)); + vffree(this); + this = next; + } +} + + +void file_unused(void) +{ + report_unused(fp_root); +} + +/* Local Variables: */ +/* tab-width: 8 */ +/* End: */ diff --git a/reactos/lib/fslib/vfatlib/check/file.h b/reactos/lib/fslib/vfatlib/check/file.h new file mode 100644 index 00000000000..43b5620f8e6 --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/file.h @@ -0,0 +1,55 @@ +/* file.h - Additional file attributes */ + +/* Written 1993 by Werner Almesberger */ + + +#ifndef _FILE_H +#define _FILE_H + +typedef enum { fdt_none,fdt_drop,fdt_undelete } FD_TYPE; + +typedef struct _fptr { + char name[MSDOS_NAME]; + FD_TYPE type; + struct _fptr *first; /* first entry */ + struct _fptr *next; /* next file in directory */ +} FDSC; + + +extern FDSC *fp_root; + + +char *file_name(unsigned char *fixed); + +/* Returns a pointer to a pretty-printed representation of a fixed MS-DOS file + name. */ + +int file_cvt(unsigned char *name,unsigned char *fixed); + +/* Converts a pretty-printed file name to the fixed MS-DOS format. Returns a + non-zero integer on success, zero on failure. */ + +void file_add(char *path,FD_TYPE type); + +/* Define special attributes for a path. TYPE can be either FDT_DROP or + FDT_UNDELETE. */ + +FDSC **file_cd(FDSC **curr,char *fixed); + +/* Returns a pointer to the directory descriptor of the subdirectory FIXED of + CURR, or NULL if no such subdirectory exists. */ + +FD_TYPE file_type(FDSC **curr,char *fixed); + +/* Returns the attribute of the file FIXED in directory CURR or FDT_NONE if no + such file exists or if CURR is NULL. */ + +void file_modify(FDSC **curr,unsigned char *fixed); + +/* Performs the necessary operation on the entry of CURR that is named FIXED. */ + +void file_unused(void); + +/* Displays warnings for all unused file attributes. */ + +#endif diff --git a/reactos/lib/fslib/vfatlib/check/io.c b/reactos/lib/fslib/vfatlib/check/io.c new file mode 100644 index 00000000000..cea6654d56e --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/io.c @@ -0,0 +1,373 @@ +/* io.c - Virtual disk input/output */ + +/* Written 1993 by Werner Almesberger */ + +/* + * Thu Feb 26 01:15:36 CET 1998: Martin Schulze + * Fixed nasty bug that caused every file with a name like + * xxxxxxxx.xxx to be treated as bad name that needed to be fixed. + */ + +/* FAT32, VFAT, Atari format support, and various fixes additions May 1998 + * by Roman Hodek */ + + +#include "vfatlib.h" + +#define NDEBUG +#include + +#define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS) + +typedef struct _change { + void *data; + loff_t pos; + int size; + struct _change *next; +} CHANGE; + + +static CHANGE *changes,*last; +static int did_change = 0; +static HANDLE fd; +static LARGE_INTEGER CurrentOffset; + +unsigned device_no; + +static int WIN32close(HANDLE fd); +#define close WIN32close +static int WIN32read(HANDLE fd, void *buf, unsigned int len); +#define read WIN32read +static int WIN32write(HANDLE fd, void *buf, unsigned int len); +#define write WIN32write +static loff_t WIN32llseek(HANDLE fd, loff_t offset, int whence); +#ifdef llseek +#undef llseek +#endif +#define llseek WIN32llseek + +//static int is_device = 0; + +void fs_open(PUNICODE_STRING DriveRoot,int rw) +{ + OBJECT_ATTRIBUTES ObjectAttributes; + IO_STATUS_BLOCK Iosb; + NTSTATUS Status; + + InitializeObjectAttributes(&ObjectAttributes, + DriveRoot, + 0, + NULL, + NULL); + + Status = NtOpenFile(&fd, + FILE_GENERIC_READ | (rw ? FILE_GENERIC_WRITE : 0), + &ObjectAttributes, + &Iosb, + rw ? 0 : FILE_SHARE_READ, + FILE_SYNCHRONOUS_IO_ALERT); + if (!NT_SUCCESS(Status)) + { + DPRINT1("NtOpenFile() failed with status 0x%.08x\n", Status); + return; + } + + CurrentOffset.QuadPart = 0LL; + + changes = last = NULL; + did_change = 0; +} + +BOOLEAN fs_isdirty(PUNICODE_STRING DriveRoot) +{ + OBJECT_ATTRIBUTES ObjectAttributes; + ULONG DirtyMask = 0; + WCHAR TempRootBuf[128]; + UNICODE_STRING TempRoot; + HANDLE FileSystem; + IO_STATUS_BLOCK IoSb; + NTSTATUS Status; + + /* Add backslash to the end, so FS will be opened */ + TempRoot.Length = 0; + TempRoot.MaximumLength = sizeof(TempRootBuf); + TempRoot.Buffer = TempRootBuf; + RtlCopyUnicodeString(&TempRoot, DriveRoot); + if (TempRoot.Length == (TempRoot.MaximumLength-1)) return FALSE; + wcscat(TempRoot.Buffer, L"\\"); + TempRoot.Length += sizeof(WCHAR); + + InitializeObjectAttributes(&ObjectAttributes, + &TempRoot, + 0, + NULL, + NULL); + + Status = NtOpenFile(&FileSystem, + FILE_GENERIC_READ, + &ObjectAttributes, + &IoSb, + 0, + 0); + if (!NT_SUCCESS(Status)) + { + DPRINT1("NtOpenFile() failed with status 0x%.08x\n", Status); + return FALSE; + } + + /* Check if volume is dirty */ + Status = NtFsControlFile(FileSystem, + NULL, NULL, NULL, &IoSb, + FSCTL_IS_VOLUME_DIRTY, + NULL, 0, &DirtyMask, sizeof(DirtyMask)); + + if (!NT_SUCCESS(Status)) + { + DPRINT1("NtFsControlFile() failed with Status 0x%08x\n", Status); + /* Close FS handle */ + NtClose(FileSystem); + return FALSE; + } + + /* Close FS handle */ + NtClose(FileSystem); + + return (DirtyMask & 1); +} + + +void fs_read(loff_t pos,int size,void *data) +{ + CHANGE *walk; + int got; +#if 1 // TMN + const size_t readsize_aligned = (size % 512) ? (size + (512 - (size % 512))) : size; // TMN: + const loff_t seekpos_aligned = pos - (pos % 512); // TMN: + const size_t seek_delta = (size_t)(pos - seekpos_aligned); // TMN: + const size_t readsize = (size_t)(pos - seekpos_aligned) + readsize_aligned; // TMN: + char* tmpBuf = vfalloc(readsize_aligned); // TMN: + if (llseek(fd,seekpos_aligned,0) != seekpos_aligned) pdie("Seek to %I64d",pos); + if ((got = read(fd,tmpBuf,readsize_aligned)) < 0) pdie("Read %d bytes at %I64d",size,pos); + assert(got >= size); + got = size; + assert(seek_delta + size <= readsize); + memcpy(data, tmpBuf+seek_delta, size); + vffree(tmpBuf); +#else // TMN: + if (llseek(fd,pos,0) != pos) pdie("Seek to %lld",pos); + if ((got = read(fd,data,size)) < 0) pdie("Read %d bytes at %lld",size,pos); +#endif // TMN: + if (got != size) die("Got %d bytes instead of %d at %I64d",got,size,pos); + for (walk = changes; walk; walk = walk->next) { + if (walk->pos < pos+size && walk->pos+walk->size > pos) { + if (walk->pos < pos) + memcpy(data,(char *) walk->data+pos-walk->pos,min((size_t)size, + (size_t)(walk->size-pos+walk->pos))); + else memcpy((char *) data+walk->pos-pos,walk->data,min((size_t)walk->size, + (size_t)(size+pos-walk->pos))); + } + } +} + + +int fs_test(loff_t pos,int size) +{ + void *scratch; + int okay; + +#if 1 // TMN + const size_t readsize_aligned = (size % 512) ? (size + (512 - (size % 512))) : size; // TMN: + const loff_t seekpos_aligned = pos - (pos % 512); // TMN: + scratch = vfalloc(readsize_aligned); + if (llseek(fd,seekpos_aligned,0) != seekpos_aligned) pdie("Seek to %lld",pos); + okay = read(fd,scratch,readsize_aligned) == (int)readsize_aligned; + vffree(scratch); +#else // TMN: + if (llseek(fd,pos,0) != pos) pdie("Seek to %lld",pos); + scratch = vfalloc(size); + okay = read(fd,scratch,size) == size; + vffree(scratch); +#endif // TMN: + return okay; +} + + +void fs_write(loff_t pos,int size,void *data) +{ + CHANGE *new; + int did; + +#if 1 //SAE + if (FsCheckFlags & FSCHECK_IMMEDIATE_WRITE) { + void *scratch; + const size_t readsize_aligned = (size % 512) ? (size + (512 - (size % 512))) : size; + const loff_t seekpos_aligned = pos - (pos % 512); + const size_t seek_delta = (size_t)(pos - seekpos_aligned); + boolean use_read = (seek_delta != 0) || ((readsize_aligned-size) != 0); + + /* Aloc temp buffer if write is not aligned */ + if (use_read) + scratch = vfalloc(readsize_aligned); + else + scratch = data; + + did_change = 1; + if (llseek(fd,seekpos_aligned,0) != seekpos_aligned) pdie("Seek to %I64d",seekpos_aligned); + + if (use_read) + { + /* Read aligned data */ + if (read(fd,scratch,readsize_aligned) < 0) pdie("Read %d bytes at %I64d",size,pos); + + /* Patch data in memory */ + memcpy((char *)scratch+seek_delta, data, size); + } + + /* Write it back */ + if ((did = write(fd,scratch,readsize_aligned)) == (int)readsize_aligned) + { + if (use_read) vffree(scratch); + return; + } + if (did < 0) pdie("Write %d bytes at %I64d",size,pos); + die("Wrote %d bytes instead of %d at %I64d",did,size,pos); + } + + new = vfalloc(sizeof(CHANGE)); + new->pos = pos; + memcpy(new->data = vfalloc(new->size = size),data,size); + new->next = NULL; + if (last) last->next = new; + else changes = new; + last = new; + +#else //SAE + if (write_immed) { + did_change = 1; + if (llseek(fd,pos,0) != pos) pdie("Seek to %lld",pos); + if ((did = write(fd,data,size)) == size) return; + if (did < 0) pdie("Write %d bytes at %lld",size,pos); + die("Wrote %d bytes instead of %d at %lld",did,size,pos); + } + new = vfalloc(sizeof(CHANGE)); + new->pos = pos; + memcpy(new->data = vfalloc(new->size = size),data,size); + new->next = NULL; + if (last) last->next = new; + else changes = new; + last = new; +#endif //SAE +} + + +static void fs_flush(void) +{ + CHANGE *this; + int old_write_immed = (FsCheckFlags & FSCHECK_IMMEDIATE_WRITE); + + /* Disable writes to the list now */ + FsCheckFlags |= FSCHECK_IMMEDIATE_WRITE; + + while (changes) { + this = changes; + changes = changes->next; + + fs_write(this->pos, this->size, this->data); + + vffree(this->data); + vffree(this); + } + + /* Restore values */ + if (!old_write_immed) FsCheckFlags ^= FSCHECK_IMMEDIATE_WRITE; +} + + +int fs_close(int write) +{ + CHANGE *next; + int changed; + + changed = !!changes; + if (write) fs_flush(); + else while (changes) { + next = changes->next; + vffree(changes->data); + vffree(changes); + changes = next; + } + if (close(fd) < 0) pdie("closing file system"); + return changed || did_change; +} + + +int fs_changed(void) +{ + return !!changes || did_change; +} + +/* Local Variables: */ +/* tab-width: 8 */ +/* End: */ + +static int WIN32close(HANDLE FileHandle) +{ + if (!NT_SUCCESS(NtClose(FileHandle))) return -1; + + return 0; +} + +static int WIN32read(HANDLE FileHandle, void *buf, unsigned int len) +{ + IO_STATUS_BLOCK IoStatusBlock; + NTSTATUS Status; + + Status = NtReadFile(FileHandle, + NULL, + NULL, + NULL, + &IoStatusBlock, + buf, + len, + &CurrentOffset, + NULL); + if (!NT_SUCCESS(Status)) + { + DPRINT1("NtReadFile() failed (Status %lx)\n", Status); + return -1; + } + + CurrentOffset.QuadPart += len; + return (int)len; +} + +static int WIN32write(HANDLE FileHandle, void *buf, unsigned int len) +{ + IO_STATUS_BLOCK IoStatusBlock; + NTSTATUS Status; + + Status = NtWriteFile(FileHandle, + NULL, + NULL, + NULL, + &IoStatusBlock, + buf, + len, + &CurrentOffset, + NULL); + if (!NT_SUCCESS(Status)) + { + DPRINT1("NtWriteFile() failed (Status %lx)\n", Status); + return -1; + } + + CurrentOffset.QuadPart += len; + return (int)len; +} + +static loff_t WIN32llseek(HANDLE fd, loff_t offset, int whence) +{ + CurrentOffset.QuadPart = (ULONGLONG)offset; + + return offset; +} diff --git a/reactos/lib/fslib/vfatlib/check/io.h b/reactos/lib/fslib/vfatlib/check/io.h new file mode 100644 index 00000000000..6c6675f0f9b --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/io.h @@ -0,0 +1,58 @@ +/* io.h - Virtual disk input/output */ + +/* Written 1993 by Werner Almesberger */ + +/* FAT32, VFAT, Atari format support, and various fixes additions May 1998 + * by Roman Hodek */ + + +#ifndef _IO_H +#define _IO_H + +//#include /* for loff_t */ +#include "dosfsck.h" + +/* In earlier versions, an own llseek() was used, but glibc lseek() is + * sufficient (or even better :) for 64 bit offsets in the meantime */ +#define llseek lseek + +void fs_open(PUNICODE_STRING DriveRoot,int rw); + +/* Opens the file system PATH. If RW is zero, the file system is opened + read-only, otherwise, it is opened read-write. */ + +BOOLEAN fs_isdirty(PUNICODE_STRING DriveRoot); + +/* Checks if filesystem is dirty */ + +void fs_read(loff_t pos,int size,void *data); + +/* Reads SIZE bytes starting at POS into DATA. Performs all applicable + changes. */ + +int fs_test(loff_t pos,int size); + +/* Returns a non-zero integer if SIZE bytes starting at POS can be read without + errors. Otherwise, it returns zero. */ + +void fs_write(loff_t pos,int size,void *data); + +/* If write_immed is non-zero, SIZE bytes are written from DATA to the disk, + starting at POS. If write_immed is zero, the change is added to a list in + memory. */ + +int fs_close(int write); + +/* Closes the file system, performs all pending changes if WRITE is non-zero + and removes the list of changes. Returns a non-zero integer if the file + system has been changed since the last fs_open, zero otherwise. */ + +int fs_changed(void); + +/* Determines whether the file system has changed. See fs_close. */ + +extern unsigned device_no; + +/* Major number of device (0 if file) and size (in 512 byte sectors) */ + +#endif diff --git a/reactos/lib/fslib/vfatlib/check/lfn.c b/reactos/lib/fslib/vfatlib/check/lfn.c new file mode 100644 index 00000000000..d57901bd7fd --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/lfn.c @@ -0,0 +1,475 @@ +/* lfn.c - Functions for handling VFAT long filenames */ + +/* Written 1998 by Roman Hodek */ + +#include "vfatlib.h" + +#include // for INT_MAX definition + +#define NDEBUG +#include + +typedef struct { + __u8 id; /* sequence number for slot */ + __u8 name0_4[10]; /* first 5 characters in name */ + __u8 attr; /* attribute byte */ + __u8 reserved; /* always 0 */ + __u8 alias_checksum; /* checksum for 8.3 alias */ + __u8 name5_10[12]; /* 6 more characters in name */ + __u16 start; /* starting cluster number, 0 in long slots */ + __u8 name11_12[4]; /* last 2 characters in name */ +} LFN_ENT; + +#define LFN_ID_START 0x40 +#define LFN_ID_SLOTMASK 0x1f + +#define CHARS_PER_LFN 13 + +/* These modul-global vars represent the state of the LFN parser */ +unsigned char *lfn_unicode = NULL; +unsigned char lfn_checksum; +int lfn_slot = -1; +loff_t *lfn_offsets = NULL; +int lfn_parts = 0; + +static unsigned char fat_uni2esc[64] = { + '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', + 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', + 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', + 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', + 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', + 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', + 'u', 'v', 'w', 'x', 'y', 'z', '+', '-' +}; + +/* This defines which unicode chars are directly convertable to ISO-8859-1 */ +#define UNICODE_CONVERTABLE(cl,ch) (ch == 0 && (cl < 0x80 || cl >= 0xa0)) + +/* for maxlen param */ +#define UNTIL_0 INT_MAX + +static void copy_lfn_part( char *dst, LFN_ENT *lfn ); +static char *cnv_unicode( const unsigned char *uni, int maxlen, int use_q ); + +/* Convert name part in 'lfn' from unicode to ASCII */ +static __inline char* CNV_THIS_PART(LFN_ENT *lfn) +{ \ + char __part_uni[CHARS_PER_LFN*2]; + copy_lfn_part( __part_uni, lfn ); + return cnv_unicode( (unsigned char*)__part_uni, CHARS_PER_LFN, 0 ); +} + +/* Convert name parts collected so far (from previous slots) from unicode to + * ASCII */ +#define CNV_PARTS_SO_FAR() \ + (cnv_unicode( lfn_unicode+(lfn_slot*CHARS_PER_LFN*2), \ + lfn_parts*CHARS_PER_LFN, 0 )) + +/* This function converts an unicode string to a normal ASCII string, assuming + * ISO-8859-1 charset. Characters not in 8859-1 are converted to the same + * escape notation as used by the kernel, i.e. the uuencode-like ":xxx" */ +static char *cnv_unicode( const unsigned char *uni, int maxlen, int use_q ) +{ + const unsigned char *up; + unsigned char *out, *cp; + int len, val; + + for( len = 0, up = uni; (up-uni)/2 < maxlen && (up[0] || up[1]); up += 2 ){ + if (UNICODE_CONVERTABLE(up[0],up[1])) + ++len; + else + len += 4; + } + cp = out = use_q ? qalloc( &FsCheckMemQueue, len+1 ) : vfalloc( len+1 ); + + for( up = uni; (up-uni)/2 < maxlen && (up[0] || up[1]); up += 2 ) { + if (UNICODE_CONVERTABLE(up[0],up[1])) + *cp++ = up[0]; + else { + /* here the same escape notation is used as in the Linux kernel */ + *cp++ = ':'; + val = (up[1] << 8) + up[0]; + cp[2] = fat_uni2esc[val & 0x3f]; + val >>= 6; + cp[1] = fat_uni2esc[val & 0x3f]; + val >>= 6; + cp[0] = fat_uni2esc[val & 0x3f]; + cp += 3; + } + } + *cp = 0; + + return (char *)out; +} + + +static void copy_lfn_part( char *dst, LFN_ENT *lfn ) +{ + memcpy( dst, lfn->name0_4, 10 ); + memcpy( dst+10, lfn->name5_10, 12 ); + memcpy( dst+22, lfn->name11_12, 4 ); +} + + +static void clear_lfn_slots( int start, int end ) +{ + int i; + LFN_ENT empty; + + /* New dir entry is zeroed except first byte, which is set to 0xe5. + * This is to avoid that some FAT-reading OSes (not Linux! ;) stop reading + * a directory at the first zero entry... + */ + memset( &empty, 0, sizeof(empty) ); + empty.id = DELETED_FLAG; + + for( i = start; i <= end; ++i ) { + fs_write( lfn_offsets[i], sizeof(LFN_ENT), &empty ); + } +} + +void lfn_reset( void ) +{ + if (lfn_unicode) + vffree( lfn_unicode ); + lfn_unicode = NULL; + if (lfn_offsets) + vffree( lfn_offsets ); + lfn_offsets = NULL; + lfn_slot = -1; +} + + +/* This function is only called with de->attr == VFAT_LN_ATTR. It stores part + * of the long name. */ +void lfn_add_slot( DIR_ENT *de, loff_t dir_offset ) +{ + LFN_ENT *lfn = (LFN_ENT *)de; + unsigned offset; + + if (de->attr != VFAT_LN_ATTR) + die("lfn_add_slot called with non-LFN directory entry"); + + if (lfn->id & LFN_ID_START) { + if (lfn_slot != -1) { + int can_clear = 0; + /* There is already a LFN "in progess", so it is an error that a + * new start entry is here. */ + /* Causes: 1) if slot# == expected: start bit set mysteriously, 2) + * old LFN overwritten by new one */ + /* Fixes: 1) delete previous LFN 2) if slot# == expected and + * checksum ok: clear start bit */ + /* XXX: Should delay that until next LFN known (then can better + * display the name) */ + VfatPrint( "A new long file name starts within an old one.\n" ); + if ((lfn->id & LFN_ID_SLOTMASK) == lfn_slot && + lfn->alias_checksum == lfn_checksum) { + char *part1 = CNV_THIS_PART(lfn); + char *part2 = CNV_PARTS_SO_FAR(); + VfatPrint( " It could be that the LFN start bit is wrong here\n" + " if \"%s\" seems to match \"%s\".\n", part1, part2 ); + vffree( part1 ); + vffree( part2 ); + can_clear = 1; + } + if (FsCheckFlags & FSCHECK_INTERACTIVE) { + VfatPrint( "1: Delete previous LFN\n2: Leave it as it is.\n" ); + if (can_clear) + VfatPrint( "3: Clear start bit and concatenate LFNs\n" ); + } + else VfatPrint( " Not auto-correcting this.\n" ); + if (FsCheckFlags & FSCHECK_INTERACTIVE) { + switch( get_key( can_clear ? "123" : "12", "?" )) { + case '1': + clear_lfn_slots( 0, lfn_parts-1 ); + lfn_reset(); + break; + case '2': + break; + case '3': + lfn->id &= ~LFN_ID_START; + fs_write( dir_offset+offsetof(LFN_ENT,id), + sizeof(lfn->id), &lfn->id ); + break; + } + } + } + lfn_slot = lfn->id & LFN_ID_SLOTMASK; + lfn_checksum = lfn->alias_checksum; + lfn_unicode = vfalloc( (lfn_slot*CHARS_PER_LFN+1)*2 ); + lfn_offsets = vfalloc( lfn_slot*sizeof(loff_t) ); + lfn_parts = 0; + } + else if (lfn_slot == -1) { + /* No LFN in progress, but slot found; start bit missing */ + /* Causes: 1) start bit got lost, 2) Previous slot with start bit got + * lost */ + /* Fixes: 1) delete LFN, 2) set start bit */ + char *part = CNV_THIS_PART(lfn); + VfatPrint( "Long filename fragment \"%s\" found outside a LFN " + "sequence.\n (Maybe the start bit is missing on the " + "last fragment)\n", part ); + if (FsCheckFlags & FSCHECK_INTERACTIVE) { + VfatPrint( "1: Delete fragment\n2: Leave it as it is.\n" + "3: Set start bit\n" ); + } + else VfatPrint( " Not auto-correcting this.\n" ); + if (FsCheckFlags & FSCHECK_INTERACTIVE) { + switch( get_key( "123", "?" )) { + case '1': + if (!lfn_offsets) + lfn_offsets = vfalloc( sizeof(loff_t) ); + lfn_offsets[0] = dir_offset; + clear_lfn_slots( 0, 0 ); + lfn_reset(); + return; + case '2': + lfn_reset(); + return; + case '3': + lfn->id |= LFN_ID_START; + fs_write( dir_offset+offsetof(LFN_ENT,id), + sizeof(lfn->id), &lfn->id ); + lfn_slot = lfn->id & LFN_ID_SLOTMASK; + lfn_checksum = lfn->alias_checksum; + lfn_unicode = vfalloc( (lfn_slot*CHARS_PER_LFN+1)*2 ); + lfn_offsets = vfalloc( lfn_slot*sizeof(loff_t) ); + lfn_parts = 0; + break; + } + } + } + else if ((lfn->id & LFN_ID_SLOTMASK) != lfn_slot) { + /* wrong sequence number */ + /* Causes: 1) seq-no destroyed */ + /* Fixes: 1) delete LFN, 2) fix number (maybe only if following parts + * are ok?, maybe only if checksum is ok?) (Attention: space + * for name was allocated before!) */ + int can_fix = 0; + VfatPrint( "Unexpected long filename sequence number " + "(%d vs. expected %d).\n", + (lfn->id & LFN_ID_SLOTMASK), lfn_slot ); + if (lfn->alias_checksum == lfn_checksum) { + char *part1 = CNV_THIS_PART(lfn); + char *part2 = CNV_PARTS_SO_FAR(); + VfatPrint( " It could be that just the number is wrong\n" + " if \"%s\" seems to match \"%s\".\n", part1, part2 ); + vffree( part1 ); + vffree( part2 ); + can_fix = 1; + } + if (FsCheckFlags & FSCHECK_INTERACTIVE) { + VfatPrint( "1: Delete LFN\n2: Leave it as it is (and ignore LFN so far)\n" ); + if (can_fix) + VfatPrint( "3: Correct sequence number\n" ); + } + else VfatPrint( " Not auto-correcting this.\n" ); + if (FsCheckFlags & FSCHECK_INTERACTIVE) { + switch( get_key( can_fix ? "123" : "12", "?" )) { + case '1': + lfn_offsets[lfn_parts++] = dir_offset; + clear_lfn_slots( 0, lfn_parts-1 ); + lfn_reset(); + return; + case '2': + lfn_reset(); + return; + case '3': + lfn->id = (lfn->id & ~LFN_ID_SLOTMASK) | lfn_slot; + fs_write( dir_offset+offsetof(LFN_ENT,id), + sizeof(lfn->id), &lfn->id ); + break; + } + } + } + + if (lfn->alias_checksum != lfn_checksum) { + /* checksum mismatch */ + /* Causes: 1) checksum field here destroyed */ + /* Fixes: 1) delete LFN, 2) fix checksum */ + VfatPrint( "Checksum in long filename part wrong " + "(%02x vs. expected %02x).\n", + lfn->alias_checksum, lfn_checksum ); + if (FsCheckFlags & FSCHECK_INTERACTIVE) { + VfatPrint( "1: Delete LFN\n2: Leave it as it is.\n" + "3: Correct checksum\n" ); + } + else VfatPrint( " Not auto-correcting this.\n" ); + if (FsCheckFlags & FSCHECK_INTERACTIVE) { + switch( get_key( "123", "?" )) { + case '1': + lfn_offsets[lfn_parts++] = dir_offset; + clear_lfn_slots( 0, lfn_parts-1 ); + lfn_reset(); + return; + case '2': + break; + case '3': + lfn->alias_checksum = lfn_checksum; + fs_write( dir_offset+offsetof(LFN_ENT,alias_checksum), + sizeof(lfn->alias_checksum), &lfn->alias_checksum ); + break; + } + } + } + + if (lfn_slot != -1) { + lfn_slot--; + offset = lfn_slot * CHARS_PER_LFN*2; + copy_lfn_part( (char*)lfn_unicode+offset, lfn ); + if (lfn->id & LFN_ID_START) + lfn_unicode[offset+26] = lfn_unicode[offset+27] = 0; + lfn_offsets[lfn_parts++] = dir_offset; + } + + if (lfn->reserved != 0) { + VfatPrint( "Reserved field in VFAT long filename slot is not 0 " + "(but 0x%02x).\n", lfn->reserved ); + if (FsCheckFlags & FSCHECK_INTERACTIVE) + VfatPrint( "1: Fix.\n2: Leave it.\n" ); + else VfatPrint( "Auto-setting to 0.\n" ); + if (!(FsCheckFlags & FSCHECK_INTERACTIVE) || get_key("12","?") == '1') { + lfn->reserved = 0; + fs_write( dir_offset+offsetof(LFN_ENT,reserved), + sizeof(lfn->reserved), &lfn->reserved ); + } + } + if (lfn->start != CT_LE_W(0)) { + VfatPrint( "Start cluster field in VFAT long filename slot is not 0 " + "(but 0x%04x).\n", lfn->start ); + if (FsCheckFlags & FSCHECK_INTERACTIVE) + VfatPrint( "1: Fix.\n2: Leave it.\n" ); + else VfatPrint( "Auto-setting to 0.\n" ); + if (!(FsCheckFlags & FSCHECK_INTERACTIVE) || get_key("12","?") == '1') { + lfn->start = CT_LE_W(0); + fs_write( dir_offset+offsetof(LFN_ENT,start), + sizeof(lfn->start),&lfn->start ); + } + } +} + + +/* This function is always called when de->attr != VFAT_LN_ATTR is found, to + * retrieve the previously constructed LFN. */ +char *lfn_get( DIR_ENT *de ) +{ + char *lfn; + __u8 sum; + int i; + + if (de->attr == VFAT_LN_ATTR) + die("lfn_get called with LFN directory entry"); + +#if 0 + if (de->lcase) + VfatPrint( "lcase=%02x\n",de->lcase ); +#endif + + if (lfn_slot == -1) + /* no long name for this file */ + return NULL; + + if (lfn_slot != 0) { + /* The long name isn't finished yet. */ + /* Causes: 1) LFN slot overwritten by non-VFAT aware tool */ + /* Fixes: 1) delete LFN 2) move overwriting entry to somewhere else + * and let user enter missing part of LFN (hard to do :-() + * 3) renumber entries and truncate name */ + char *long_name = CNV_PARTS_SO_FAR(); + char *short_name = file_name(de->name); + VfatPrint( "Unfinished long file name \"%s\".\n" + " (Start may have been overwritten by %s)\n", + long_name, short_name ); + vffree( long_name ); + if (FsCheckFlags & FSCHECK_INTERACTIVE) { + VfatPrint( "1: Delete LFN\n2: Leave it as it is.\n" + "3: Fix numbering (truncates long name and attaches " + "it to short name %s)\n", short_name ); + } + else VfatPrint( " Not auto-correcting this.\n" ); + if (FsCheckFlags & FSCHECK_INTERACTIVE) { + switch( get_key( "123", "?" )) { + case '1': + clear_lfn_slots( 0, lfn_parts-1 ); + lfn_reset(); + return NULL; + case '2': + lfn_reset(); + return NULL; + case '3': + for( i = 0; i < lfn_parts; ++i ) { + __u8 id = (lfn_parts-i) | (i==0 ? LFN_ID_START : 0); + fs_write( lfn_offsets[i]+offsetof(LFN_ENT,id), + sizeof(id), &id ); + } + memmove( lfn_unicode, lfn_unicode+lfn_slot*CHARS_PER_LFN*2, + lfn_parts*CHARS_PER_LFN*2 ); + break; + } + } + } + + for (sum = 0, i = 0; i < 11; i++) + sum = (((sum&1) << 7) | ((sum&0xfe) >> 1)) + de->name[i]; + if (sum != lfn_checksum) { + /* checksum doesn't match, long name doesn't apply to this alias */ + /* Causes: 1) alias renamed */ + /* Fixes: 1) Fix checksum in LFN entries */ + char *long_name = CNV_PARTS_SO_FAR(); + char *short_name = file_name(de->name); + VfatPrint( "Wrong checksum for long file name \"%s\".\n" + " (Short name %s may have changed without updating the long name)\n", + long_name, short_name ); + vffree( long_name ); + if (FsCheckFlags & FSCHECK_INTERACTIVE) { + VfatPrint( "1: Delete LFN\n2: Leave it as it is.\n" + "3: Fix checksum (attaches to short name %s)\n", + short_name ); + } + else VfatPrint( " Not auto-correcting this.\n" ); + if (FsCheckFlags & FSCHECK_INTERACTIVE) { + switch( get_key( "123", "?" )) { + case '1': + clear_lfn_slots( 0, lfn_parts-1 ); + lfn_reset(); + return NULL; + case '2': + lfn_reset(); + return NULL; + case '3': + for( i = 0; i < lfn_parts; ++i ) { + fs_write( lfn_offsets[i]+offsetof(LFN_ENT,alias_checksum), + sizeof(sum), &sum ); + } + break; + } + } + } + + lfn = cnv_unicode( lfn_unicode, UNTIL_0, 1 ); + lfn_reset(); + return( lfn ); +} + +void lfn_check_orphaned(void) +{ + char *long_name; + + if (lfn_slot == -1) + return; + + long_name = CNV_PARTS_SO_FAR(); + VfatPrint("Orphaned long file name part \"%s\"\n", long_name); + if (FsCheckFlags & FSCHECK_INTERACTIVE) + VfatPrint( "1: Delete.\n2: Leave it.\n" ); + else VfatPrint( " Auto-deleting.\n" ); + if (!(FsCheckFlags & FSCHECK_INTERACTIVE) || get_key("12","?") == '1') { + clear_lfn_slots(0, lfn_parts - 1); + } + lfn_reset(); +} + +/* Local Variables: */ +/* tab-width: 8 */ +/* End: */ diff --git a/reactos/lib/fslib/vfatlib/check/lfn.h b/reactos/lib/fslib/vfatlib/check/lfn.h new file mode 100644 index 00000000000..21726ef858b --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/lfn.h @@ -0,0 +1,20 @@ +/* lfn.h - Functions for handling VFAT long filenames */ + +/* Written 1998 by Roman Hodek */ + + +#ifndef _LFN_H +#define _LFN_H + +void lfn_reset( void ); +/* Reset the state of the LFN parser. */ + +void lfn_add_slot( DIR_ENT *de, loff_t dir_offset ); +/* Process a dir slot that is a VFAT LFN entry. */ + +char *lfn_get( DIR_ENT *de ); +/* Retrieve the long name for the proper dir entry. */ + +void lfn_check_orphaned(void); + +#endif diff --git a/reactos/lib/fslib/vfatlib/check/msdos_fs.h b/reactos/lib/fslib/vfatlib/check/msdos_fs.h new file mode 100644 index 00000000000..92ef07bfbb7 --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/msdos_fs.h @@ -0,0 +1,184 @@ +#ifndef _LINUX_MSDOS_FS_H +#define _LINUX_MSDOS_FS_H + +/* + * The MS-DOS filesystem constants/structures + */ +#ifdef _M_IX86 +#include "byteorder.h" +#endif + +#define SECTOR_SIZE 512 /* sector size (bytes) */ +#define SECTOR_BITS 9 /* log2(SECTOR_SIZE) */ +#define MSDOS_DPB (MSDOS_DPS) /* dir entries per block */ +#define MSDOS_DPB_BITS 4 /* log2(MSDOS_DPB) */ +#define MSDOS_DPS (SECTOR_SIZE / sizeof(struct msdos_dir_entry)) +#define MSDOS_DPS_BITS 4 /* log2(MSDOS_DPS) */ +#if 0 +#define CF_LE_W(v) le16_to_cpu(v) +#define CF_LE_L(v) le32_to_cpu(v) +#define CT_LE_W(v) cpu_to_le16(v) +#define CT_LE_L(v) cpu_to_le32(v) +#endif + +#define MSDOS_SUPER_MAGIC 0x4d44 /* MD */ + +#define MSDOS_ROOT_INO 1 /* == MINIX_ROOT_INO */ +#define MSDOS_DIR_BITS 5 /* log2(sizeof(struct msdos_dir_entry)) */ + +/* directory limit */ +#define FAT_MAX_DIR_ENTRIES (65536) +#define FAT_MAX_DIR_SIZE (FAT_MAX_DIR_ENTRIES << MSDOS_DIR_BITS) + +#define ATTR_NONE 0 /* no attribute bits */ +#define ATTR_RO 1 /* read-only */ +#define ATTR_HIDDEN 2 /* hidden */ +#define ATTR_SYS 4 /* system */ +#define ATTR_VOLUME 8 /* volume label */ +#define ATTR_DIR 16 /* directory */ +#define ATTR_ARCH 32 /* archived */ + +/* attribute bits that are copied "as is" */ +#define ATTR_UNUSED (ATTR_VOLUME | ATTR_ARCH | ATTR_SYS | ATTR_HIDDEN) +/* bits that are used by the Windows 95/Windows NT extended FAT */ +#define ATTR_EXT (ATTR_RO | ATTR_HIDDEN | ATTR_SYS | ATTR_VOLUME) + +#define CASE_LOWER_BASE 8 /* base is lower case */ +#define CASE_LOWER_EXT 16 /* extension is lower case */ + +#define DELETED_FLAG 0xe5 /* marks file as deleted when in name[0] */ +#define IS_FREE(n) (!*(n) || *(n) == DELETED_FLAG) + +/* valid file mode bits */ +#define MSDOS_VALID_MODE (S_IFREG | S_IFDIR | S_IRWXU | S_IRWXG | S_IRWXO) +/* Convert attribute bits and a mask to the UNIX mode. */ +#define MSDOS_MKMODE(a, m) (m & (a & ATTR_RO ? S_IRUGO|S_IXUGO : S_IRWXUGO)) + +#define MSDOS_NAME 11 /* maximum name length */ +#define MSDOS_LONGNAME 256 /* maximum name length */ +#define MSDOS_SLOTS 21 /* max # of slots for short and long names */ +#define MSDOS_DOT ". " /* ".", padded to MSDOS_NAME chars */ +#define MSDOS_DOTDOT ".. " /* "..", padded to MSDOS_NAME chars */ + +/* media of boot sector */ +#define FAT_VALID_MEDIA(x) ((0xF8 <= (x) && (x) <= 0xFF) || (x) == 0xF0) +#define FAT_FIRST_ENT(s, x) ((MSDOS_SB(s)->fat_bits == 32 ? 0x0FFFFF00 : \ + MSDOS_SB(s)->fat_bits == 16 ? 0xFF00 : 0xF00) | (x)) + +/* start of data cluster's entry (number of reserved clusters) */ +#define FAT_START_ENT 2 + +/* maximum number of clusters */ +#define MAX_FAT12 0xFF4 +#define MAX_FAT16 0xFFF4 +#define MAX_FAT32 0x0FFFFFF6 +#define MAX_FAT(s) (MSDOS_SB(s)->fat_bits == 32 ? MAX_FAT32 : \ + MSDOS_SB(s)->fat_bits == 16 ? MAX_FAT16 : MAX_FAT12) + +/* bad cluster mark */ +#define BAD_FAT12 0xFF7 +#define BAD_FAT16 0xFFF7 +#define BAD_FAT32 0x0FFFFFF7 + +/* standard EOF */ +#define EOF_FAT12 0xFFF +#define EOF_FAT16 0xFFFF +#define EOF_FAT32 0x0FFFFFFF + +#define FAT_ENT_FREE (0) +#define FAT_ENT_BAD (BAD_FAT32) +#define FAT_ENT_EOF (EOF_FAT32) + +#define FAT_FSINFO_SIG1 0x41615252 +#define FAT_FSINFO_SIG2 0x61417272 +#define IS_FSINFO(x) (le32_to_cpu((x)->signature1) == FAT_FSINFO_SIG1 \ + && le32_to_cpu((x)->signature2) == FAT_FSINFO_SIG2) + +/* + * ioctl commands + */ +#define VFAT_IOCTL_READDIR_BOTH _IOR('r', 1, struct dirent [2]) +#define VFAT_IOCTL_READDIR_SHORT _IOR('r', 2, struct dirent [2]) +/* has used 0x72 ('r') in collision, so skip a few */ +#define FAT_IOCTL_GET_ATTRIBUTES _IOR('r', 0x10, __u32) +#define FAT_IOCTL_SET_ATTRIBUTES _IOW('r', 0x11, __u32) + +/* + * vfat shortname flags + */ +#define VFAT_SFN_DISPLAY_LOWER 0x0001 /* convert to lowercase for display */ +#define VFAT_SFN_DISPLAY_WIN95 0x0002 /* emulate win95 rule for display */ +#define VFAT_SFN_DISPLAY_WINNT 0x0004 /* emulate winnt rule for display */ +#define VFAT_SFN_CREATE_WIN95 0x0100 /* emulate win95 rule for create */ +#define VFAT_SFN_CREATE_WINNT 0x0200 /* emulate winnt rule for create */ + +struct fat_boot_sector { + __u8 ignored[3]; /* Boot strap short or near jump */ + __u8 system_id[8]; /* Name - can be used to special case + partition manager volumes */ + __u8 sector_size[2]; /* bytes per logical sector */ + __u8 sec_per_clus; /* sectors/cluster */ + __le16 reserved; /* reserved sectors */ + __u8 fats; /* number of FATs */ + __u8 dir_entries[2]; /* root directory entries */ + __u8 sectors[2]; /* number of sectors */ + __u8 media; /* media code */ + __le16 fat_length; /* sectors/FAT */ + __le16 secs_track; /* sectors per track */ + __le16 heads; /* number of heads */ + __le32 hidden; /* hidden sectors (unused) */ + __le32 total_sect; /* number of sectors (if sectors == 0) */ + + /* The following fields are only used by FAT32 */ + __le32 fat32_length; /* sectors/FAT */ + __le16 flags; /* bit 8: fat mirroring, low 4: active fat */ + __u8 version[2]; /* major, minor filesystem version */ + __le32 root_cluster; /* first cluster in root directory */ + __le16 info_sector; /* filesystem info sector */ + __le16 backup_boot; /* backup boot sector */ + __le16 reserved2[6]; /* Unused */ +}; + +struct fat_boot_fsinfo { + __le32 signature1; /* 0x41615252L */ + __le32 reserved1[120]; /* Nothing as far as I can tell */ + __le32 signature2; /* 0x61417272L */ + __le32 free_clusters; /* Free cluster count. -1 if unknown */ + __le32 next_cluster; /* Most recently allocated cluster */ + __le32 reserved2[4]; +}; + +struct msdos_dir_entry { + __u8 name[8],ext[3]; /* name and extension */ + __u8 attr; /* attribute bits */ + __u8 lcase; /* Case for base and extension */ + __u8 ctime_cs; /* Creation time, centiseconds (0-199) */ + __le16 ctime; /* Creation time */ + __le16 cdate; /* Creation date */ + __le16 adate; /* Last access date */ + __le16 starthi; /* High 16 bits of cluster in FAT32 */ + __le16 time,date,start;/* time, date and first cluster */ + __le32 size; /* file size (in bytes) */ +}; + +/* Up to 13 characters of the name */ +struct msdos_dir_slot { + __u8 id; /* sequence number for slot */ + __u8 name0_4[10]; /* first 5 characters in name */ + __u8 attr; /* attribute byte */ + __u8 reserved; /* always 0 */ + __u8 alias_checksum; /* checksum for 8.3 alias */ + __u8 name5_10[12]; /* 6 more characters in name */ + __le16 start; /* starting cluster number, 0 in long slots */ + __u8 name11_12[4]; /* last 2 characters in name */ +}; + +struct fat_slot_info { + loff_t i_pos; /* on-disk position of directory entry */ + loff_t slot_off; /* offset for slot or de start */ + int nr_slots; /* number of slots + 1(de) in filename */ + struct msdos_dir_entry *de; + struct buffer_head *bh; +}; + +#endif diff --git a/reactos/lib/fslib/vfatlib/check/swab.h b/reactos/lib/fslib/vfatlib/check/swab.h new file mode 100644 index 00000000000..31bd29157f0 --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/swab.h @@ -0,0 +1,192 @@ +#ifndef _LINUX_BYTEORDER_SWAB_H +#define _LINUX_BYTEORDER_SWAB_H + +/* + * linux/byteorder/swab.h + * Byte-swapping, independently from CPU endianness + * swabXX[ps]?(foo) + * + * Francois-Rene Rideau 19971205 + * separated swab functions from cpu_to_XX, + * to clean up support for bizarre-endian architectures. + * + * See asm-i386/byteorder.h and suches for examples of how to provide + * architecture-dependent optimized versions + * + */ + +#include "compiler.h" + +/* casts are necessary for constants, because we never know how for sure + * how U/UL/ULL map to __u16, __u32, __u64. At least not in a portable way. + */ +#define ___swab16(x) \ +({ \ + __u16 __x = (x); \ + ((__u16)( \ + (((__u16)(__x) & (__u16)0x00ffU) << 8) | \ + (((__u16)(__x) & (__u16)0xff00U) >> 8) )); \ +}) + +#define ___swab32(x) \ +({ \ + __u32 __x = (x); \ + ((__u32)( \ + (((__u32)(__x) & (__u32)0x000000ffUL) << 24) | \ + (((__u32)(__x) & (__u32)0x0000ff00UL) << 8) | \ + (((__u32)(__x) & (__u32)0x00ff0000UL) >> 8) | \ + (((__u32)(__x) & (__u32)0xff000000UL) >> 24) )); \ +}) + +#define ___swab64(x) \ +({ \ + __u64 __x = (x); \ + ((__u64)( \ + (__u64)(((__u64)(__x) & (__u64)0x00000000000000ffULL) << 56) | \ + (__u64)(((__u64)(__x) & (__u64)0x000000000000ff00ULL) << 40) | \ + (__u64)(((__u64)(__x) & (__u64)0x0000000000ff0000ULL) << 24) | \ + (__u64)(((__u64)(__x) & (__u64)0x00000000ff000000ULL) << 8) | \ + (__u64)(((__u64)(__x) & (__u64)0x000000ff00000000ULL) >> 8) | \ + (__u64)(((__u64)(__x) & (__u64)0x0000ff0000000000ULL) >> 24) | \ + (__u64)(((__u64)(__x) & (__u64)0x00ff000000000000ULL) >> 40) | \ + (__u64)(((__u64)(__x) & (__u64)0xff00000000000000ULL) >> 56) )); \ +}) + +#define ___constant_swab16(x) \ + ((__u16)( \ + (((__u16)(x) & (__u16)0x00ffU) << 8) | \ + (((__u16)(x) & (__u16)0xff00U) >> 8) )) +#define ___constant_swab32(x) \ + ((__u32)( \ + (((__u32)(x) & (__u32)0x000000ffUL) << 24) | \ + (((__u32)(x) & (__u32)0x0000ff00UL) << 8) | \ + (((__u32)(x) & (__u32)0x00ff0000UL) >> 8) | \ + (((__u32)(x) & (__u32)0xff000000UL) >> 24) )) +#define ___constant_swab64(x) \ + ((__u64)( \ + (__u64)(((__u64)(x) & (__u64)0x00000000000000ffULL) << 56) | \ + (__u64)(((__u64)(x) & (__u64)0x000000000000ff00ULL) << 40) | \ + (__u64)(((__u64)(x) & (__u64)0x0000000000ff0000ULL) << 24) | \ + (__u64)(((__u64)(x) & (__u64)0x00000000ff000000ULL) << 8) | \ + (__u64)(((__u64)(x) & (__u64)0x000000ff00000000ULL) >> 8) | \ + (__u64)(((__u64)(x) & (__u64)0x0000ff0000000000ULL) >> 24) | \ + (__u64)(((__u64)(x) & (__u64)0x00ff000000000000ULL) >> 40) | \ + (__u64)(((__u64)(x) & (__u64)0xff00000000000000ULL) >> 56) )) + +/* + * provide defaults when no architecture-specific optimization is detected + */ +#ifndef __arch__swab16 +# define __arch__swab16(x) ({ __u16 __tmp = (x) ; ___swab16(__tmp); }) +#endif +#ifndef __arch__swab32 +# define __arch__swab32(x) ({ __u32 __tmp = (x) ; ___swab32(__tmp); }) +#endif +#ifndef __arch__swab64 +# define __arch__swab64(x) ({ __u64 __tmp = (x) ; ___swab64(__tmp); }) +#endif + +#ifndef __arch__swab16p +# define __arch__swab16p(x) __arch__swab16(*(x)) +#endif +#ifndef __arch__swab32p +# define __arch__swab32p(x) __arch__swab32(*(x)) +#endif +#ifndef __arch__swab64p +# define __arch__swab64p(x) __arch__swab64(*(x)) +#endif + +#ifndef __arch__swab16s +# define __arch__swab16s(x) do { *(x) = __arch__swab16p((x)); } while (0) +#endif +#ifndef __arch__swab32s +# define __arch__swab32s(x) do { *(x) = __arch__swab32p((x)); } while (0) +#endif +#ifndef __arch__swab64s +# define __arch__swab64s(x) do { *(x) = __arch__swab64p((x)); } while (0) +#endif + + +/* + * Allow constant folding + */ +#if defined(__GNUC__) && (__GNUC__ >= 2) && defined(__OPTIMIZE__) +# define __swab16(x) \ +(__builtin_constant_p((__u16)(x)) ? \ + ___swab16((x)) : \ + __fswab16((x))) +# define __swab32(x) \ +(__builtin_constant_p((__u32)(x)) ? \ + ___swab32((x)) : \ + __fswab32((x))) +# define __swab64(x) \ +(__builtin_constant_p((__u64)(x)) ? \ + ___swab64((x)) : \ + __fswab64((x))) +#else +# define __swab16(x) __fswab16(x) +# define __swab32(x) __fswab32(x) +# define __swab64(x) __fswab64(x) +#endif /* OPTIMIZE */ + + +static __inline__ __attribute_const__ __u16 __fswab16(__u16 x) +{ + return __arch__swab16(x); +} +static __inline__ __u16 __swab16p(const __u16 *x) +{ + return __arch__swab16p(x); +} +static __inline__ void __swab16s(__u16 *addr) +{ + __arch__swab16s(addr); +} + +static __inline__ __attribute_const__ __u32 __fswab32(__u32 x) +{ + return __arch__swab32(x); +} +static __inline__ __u32 __swab32p(const __u32 *x) +{ + return __arch__swab32p(x); +} +static __inline__ void __swab32s(__u32 *addr) +{ + __arch__swab32s(addr); +} + +#ifdef __BYTEORDER_HAS_U64__ +static __inline__ __attribute_const__ __u64 __fswab64(__u64 x) +{ +# ifdef __SWAB_64_THRU_32__ + __u32 h = x >> 32; + __u32 l = x & ((1ULL<<32)-1); + return (((__u64)__swab32(l)) << 32) | ((__u64)(__swab32(h))); +# else + return __arch__swab64(x); +# endif +} +static __inline__ __u64 __swab64p(const __u64 *x) +{ + return __arch__swab64p(x); +} +static __inline__ void __swab64s(__u64 *addr) +{ + __arch__swab64s(addr); +} +#endif /* __BYTEORDER_HAS_U64__ */ + +#if defined(__KERNEL__) +#define swab16 __swab16 +#define swab32 __swab32 +#define swab64 __swab64 +#define swab16p __swab16p +#define swab32p __swab32p +#define swab64p __swab64p +#define swab16s __swab16s +#define swab32s __swab32s +#define swab64s __swab64s +#endif + +#endif /* _LINUX_BYTEORDER_SWAB_H */ diff --git a/reactos/lib/fslib/vfatlib/check/version.h b/reactos/lib/fslib/vfatlib/check/version.h new file mode 100644 index 00000000000..4ef269483fe --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/version.h @@ -0,0 +1,8 @@ +#ifndef _version_h +#define _version_h + +#define VERSION "2.8" +#define VERSION_DATE "28 Feb 2001" + +#endif /* _version_h */ + diff --git a/reactos/lib/fslib/vfatlib/check/vfat.h b/reactos/lib/fslib/vfatlib/check/vfat.h new file mode 100755 index 00000000000..72953d8216b --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/vfat.h @@ -0,0 +1,744 @@ +/* $Id: vfat.h 16656 2005-07-20 02:52:52Z ion $ */ + +#include +#include +#include +#include +#include +#include +#include + +#define USE_ROS_CC_AND_FS + +#include +struct _BootSector +{ + unsigned char magic0, res0, magic1; + unsigned char OEMName[8]; + unsigned short BytesPerSector; + unsigned char SectorsPerCluster; + unsigned short ReservedSectors; + unsigned char FATCount; + unsigned short RootEntries, Sectors; + unsigned char Media; + unsigned short FATSectors, SectorsPerTrack, Heads; + unsigned long HiddenSectors, SectorsHuge; + unsigned char Drive, Res1, Sig; + unsigned long VolumeID; + unsigned char VolumeLabel[11], SysType[8]; + unsigned char Res2[448]; + unsigned short Signatur1; +}; + +struct _BootSector32 +{ + unsigned char magic0, res0, magic1; // 0 + unsigned char OEMName[8]; // 3 + unsigned short BytesPerSector; // 11 + unsigned char SectorsPerCluster; // 13 + unsigned short ReservedSectors; // 14 + unsigned char FATCount; // 16 + unsigned short RootEntries, Sectors; // 17 + unsigned char Media; // 21 + unsigned short FATSectors, SectorsPerTrack, Heads; // 22 + unsigned long HiddenSectors, SectorsHuge; // 28 + unsigned long FATSectors32; // 36 + unsigned short ExtFlag; // 40 + unsigned short FSVersion; // 42 + unsigned long RootCluster; // 44 + unsigned short FSInfoSector; // 48 + unsigned short BootBackup; // 50 + unsigned char Res3[12]; // 52 + unsigned char Drive; // 64 + unsigned char Res4; // 65 + unsigned char ExtBootSignature; // 66 + unsigned long VolumeID; // 67 + unsigned char VolumeLabel[11], SysType[8]; // 71 + unsigned char Res2[420]; // 90 + unsigned short Signature1; // 510 +}; + +struct _BootSectorFatX +{ + unsigned char SysType[4]; // 0 + unsigned long VolumeID; // 4 + unsigned long SectorsPerCluster; // 8 + unsigned short FATCount; // 12 + unsigned long Unknown; // 14 + unsigned char Unused[4078]; // 18 +}; + +struct _FsInfoSector +{ + unsigned long ExtBootSignature2; // 0 + unsigned char Res6[480]; // 4 + unsigned long FSINFOSignature; // 484 + unsigned long FreeCluster; // 488 + unsigned long NextCluster; // 492 + unsigned char Res7[12]; // 496 + unsigned long Signatur2; // 508 +}; + +typedef struct _BootSector BootSector; + +struct _FATDirEntry +{ + union + { + struct { unsigned char Filename[8], Ext[3]; }; + unsigned char ShortName[11]; + }; + unsigned char Attrib; + unsigned char lCase; + unsigned char CreationTimeMs; + unsigned short CreationTime,CreationDate,AccessDate; + unsigned short FirstClusterHigh; // higher + unsigned short UpdateTime; //time create/update + unsigned short UpdateDate; //date create/update + unsigned short FirstCluster; + unsigned long FileSize; +}; + +typedef struct _FATDirEntry FAT_DIR_ENTRY, *PFAT_DIR_ENTRY; + +struct _FATXDirEntry +{ + unsigned char FilenameLength; // 0 + unsigned char Attrib; // 1 + unsigned char Filename[42]; // 2 + unsigned long FirstCluster; // 44 + unsigned long FileSize; // 48 + unsigned short UpdateTime; // 52 + unsigned short UpdateDate; // 54 + unsigned short CreationTime; // 56 + unsigned short CreationDate; // 58 + unsigned short AccessTime; // 60 + unsigned short AccessDate; // 62 +}; + +struct _slot +{ + unsigned char id; // sequence number for slot + WCHAR name0_4[5]; // first 5 characters in name + unsigned char attr; // attribute byte + unsigned char reserved; // always 0 + unsigned char alias_checksum; // checksum for 8.3 alias + WCHAR name5_10[6]; // 6 more characters in name + unsigned char start[2]; // starting cluster number + WCHAR name11_12[2]; // last 2 characters in name +}; + +typedef struct _slot slot; + +#include + +#define VFAT_CASE_LOWER_BASE 8 // base is lower case +#define VFAT_CASE_LOWER_EXT 16 // extension is lower case + +#define LONGNAME_MAX_LENGTH 256 // max length for a long filename + +#define ENTRY_DELETED(DeviceExt, DirEntry) ((DeviceExt)->Flags & VCB_IS_FATX ? FATX_ENTRY_DELETED(&((DirEntry)->FatX)) : FAT_ENTRY_DELETED(&((DirEntry)->Fat))) +#define ENTRY_VOLUME(DeviceExt, DirEntry) ((DeviceExt)->Flags & VCB_IS_FATX ? FATX_ENTRY_VOLUME(&((DirEntry)->FatX)) : FAT_ENTRY_VOLUME(&((DirEntry)->Fat))) +#define ENTRY_END(DeviceExt, DirEntry) ((DeviceExt)->Flags & VCB_IS_FATX ? FATX_ENTRY_END(&((DirEntry)->FatX)) : FAT_ENTRY_END(&((DirEntry)->Fat))) + +#define FAT_ENTRY_DELETED(DirEntry) ((DirEntry)->Filename[0] == 0xe5) +#define FAT_ENTRY_END(DirEntry) ((DirEntry)->Filename[0] == 0) +#define FAT_ENTRY_LONG(DirEntry) (((DirEntry)->Attrib & 0x3f) == 0x0f) +#define FAT_ENTRY_VOLUME(DirEntry) (((DirEntry)->Attrib & 0x1f) == 0x08) + +#define FATX_ENTRY_DELETED(DirEntry) ((DirEntry)->FilenameLength == 0xe5) +#define FATX_ENTRY_END(DirEntry) ((DirEntry)->FilenameLength == 0xff) +#define FATX_ENTRY_LONG(DirEntry) (FALSE) +#define FATX_ENTRY_VOLUME(DirEntry) (((DirEntry)->Attrib & 0x1f) == 0x08) + +#define FAT_ENTRIES_PER_PAGE (PAGE_SIZE / sizeof (FAT_DIR_ENTRY)) +#define FATX_ENTRIES_PER_PAGE (PAGE_SIZE / sizeof (FATX_DIR_ENTRY)) + +typedef struct _FATXDirEntry FATX_DIR_ENTRY, *PFATX_DIR_ENTRY; + +union _DIR_ENTRY +{ + FAT_DIR_ENTRY Fat; + FATX_DIR_ENTRY FatX; +}; + +typedef union _DIR_ENTRY DIR_ENTRY, *PDIR_ENTRY; + +#define BLOCKSIZE 512 + +#define FAT16 (1) +#define FAT12 (2) +#define FAT32 (3) +#define FATX16 (4) +#define FATX32 (5) + +#define VCB_VOLUME_LOCKED 0x0001 +#define VCB_DISMOUNT_PENDING 0x0002 +#define VCB_IS_FATX 0x0004 +#define VCB_IS_DIRTY 0x4000 /* Volume is dirty */ +#define VCB_CLEAR_DIRTY 0x8000 /* Clean dirty flag at shutdown */ + +typedef struct +{ + ULONG VolumeID; + ULONG FATStart; + ULONG FATCount; + ULONG FATSectors; + ULONG rootDirectorySectors; + ULONG rootStart; + ULONG dataStart; + ULONG RootCluster; + ULONG SectorsPerCluster; + ULONG BytesPerSector; + ULONG BytesPerCluster; + ULONG NumberOfClusters; + ULONG FatType; + ULONG Sectors; + BOOLEAN FixedMedia; +} FATINFO, *PFATINFO; + +struct _VFATFCB; +struct _VFAT_DIRENTRY_CONTEXT; + +typedef struct _HASHENTRY +{ + ULONG Hash; + struct _VFATFCB* self; + struct _HASHENTRY* next; +} +HASHENTRY; + +#define FCB_HASH_TABLE_SIZE 65536 + +typedef struct DEVICE_EXTENSION *PDEVICE_EXTENSION; + +typedef NTSTATUS (*PGET_NEXT_CLUSTER)(PDEVICE_EXTENSION,ULONG,PULONG); +typedef NTSTATUS (*PFIND_AND_MARK_AVAILABLE_CLUSTER)(PDEVICE_EXTENSION,PULONG); +typedef NTSTATUS (*PWRITE_CLUSTER)(PDEVICE_EXTENSION,ULONG,ULONG,PULONG); + +typedef NTSTATUS (*PGET_NEXT_DIR_ENTRY)(PVOID*,PVOID*,struct _VFATFCB*,struct _VFAT_DIRENTRY_CONTEXT*,BOOLEAN); + +typedef struct DEVICE_EXTENSION +{ + ERESOURCE DirResource; + ERESOURCE FatResource; + + KSPIN_LOCK FcbListLock; + LIST_ENTRY FcbListHead; + ULONG HashTableSize; + struct _HASHENTRY** FcbHashTable; + + PDEVICE_OBJECT StorageDevice; + PFILE_OBJECT FATFileObject; + FATINFO FatInfo; + ULONG LastAvailableCluster; + ULONG AvailableClusters; + BOOLEAN AvailableClustersValid; + ULONG Flags; + struct _VFATFCB * VolumeFcb; + + /* Pointers to functions for manipulating FAT. */ + PGET_NEXT_CLUSTER GetNextCluster; + PFIND_AND_MARK_AVAILABLE_CLUSTER FindAndMarkAvailableCluster; + PWRITE_CLUSTER WriteCluster; + ULONG CleanShutBitMask; + + /* Pointers to functions for manipulating directory entries. */ + PGET_NEXT_DIR_ENTRY GetNextDirEntry; + + ULONG BaseDateYear; + + LIST_ENTRY VolumeListEntry; +} DEVICE_EXTENSION, VCB, *PVCB; + +typedef struct +{ + PDRIVER_OBJECT DriverObject; + PDEVICE_OBJECT DeviceObject; + ULONG Flags; + ERESOURCE VolumeListLock; + LIST_ENTRY VolumeListHead; + NPAGED_LOOKASIDE_LIST FcbLookasideList; + NPAGED_LOOKASIDE_LIST CcbLookasideList; + NPAGED_LOOKASIDE_LIST IrpContextLookasideList; + FAST_IO_DISPATCH FastIoDispatch; + CACHE_MANAGER_CALLBACKS CacheMgrCallbacks; +} VFAT_GLOBAL_DATA, *PVFAT_GLOBAL_DATA; + +extern PVFAT_GLOBAL_DATA VfatGlobalData; + +#define FCB_CACHE_INITIALIZED 0x0001 +#define FCB_DELETE_PENDING 0x0002 +#define FCB_IS_FAT 0x0004 +#define FCB_IS_PAGE_FILE 0x0008 +#define FCB_IS_VOLUME 0x0010 +#define FCB_IS_DIRTY 0x0020 +#define FCB_IS_FATX_ENTRY 0x0040 + +typedef struct _VFATFCB +{ + /* FCB header required by ROS/NT */ + FSRTL_COMMON_FCB_HEADER RFCB; + SECTION_OBJECT_POINTERS SectionObjectPointers; + ERESOURCE MainResource; + ERESOURCE PagingIoResource; + /* end FCB header required by ROS/NT */ + + /* directory entry for this file or directory */ + DIR_ENTRY entry; + + /* Pointer to attributes in entry */ + PUCHAR Attributes; + + /* long file name, points into PathNameBuffer */ + UNICODE_STRING LongNameU; + + /* short file name */ + UNICODE_STRING ShortNameU; + + /* directory name, points into PathNameBuffer */ + UNICODE_STRING DirNameU; + + /* path + long file name 260 max*/ + UNICODE_STRING PathNameU; + + /* buffer for PathNameU */ + PWCHAR PathNameBuffer; + + /* buffer for ShortNameU */ + WCHAR ShortNameBuffer[13]; + + /* */ + LONG RefCount; + + /* List of FCB's for this volume */ + LIST_ENTRY FcbListEntry; + + /* pointer to the parent fcb */ + struct _VFATFCB* parentFcb; + + /* Flags for the fcb */ + ULONG Flags; + + /* pointer to the file object which has initialized the fcb */ + PFILE_OBJECT FileObject; + + /* Directory index for the short name entry */ + ULONG dirIndex; + + /* Directory index where the long name starts */ + ULONG startIndex; + + /* Share access for the file object */ + SHARE_ACCESS FCBShareAccess; + + /* Incremented on IRP_MJ_CREATE, decremented on IRP_MJ_CLEANUP */ + ULONG OpenHandleCount; + + /* Entry into the hash table for the path + long name */ + HASHENTRY Hash; + + /* Entry into the hash table for the path + short name */ + HASHENTRY ShortHash; + + /* List of byte-range locks for this file */ + FILE_LOCK FileLock; + + /* + * Optimalization: caching of last read/write cluster+offset pair. Can't + * be in VFATCCB because it must be reset everytime the allocated clusters + * change. + */ + FAST_MUTEX LastMutex; + ULONG LastCluster; + ULONG LastOffset; +} VFATFCB, *PVFATFCB; + +typedef struct _VFATCCB +{ + LARGE_INTEGER CurrentByteOffset; + /* for DirectoryControl */ + ULONG Entry; + /* for DirectoryControl */ + UNICODE_STRING SearchPattern; +} VFATCCB, *PVFATCCB; + +#ifndef TAG +#define TAG(A, B, C, D) (ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24)) +#endif + +#define TAG_CCB TAG('V', 'C', 'C', 'B') +#define TAG_FCB TAG('V', 'F', 'C', 'B') +#define TAG_IRP TAG('V', 'I', 'R', 'P') + +#define ENTRIES_PER_SECTOR (BLOCKSIZE / sizeof(FATDirEntry)) + +typedef struct __DOSTIME +{ + USHORT Second:5; + USHORT Minute:6; + USHORT Hour:5; +} +DOSTIME, *PDOSTIME; + +typedef struct __DOSDATE +{ + USHORT Day:5; + USHORT Month:4; + USHORT Year:5; +} +DOSDATE, *PDOSDATE; + +#define IRPCONTEXT_CANWAIT 0x0001 +#define IRPCONTEXT_PENDINGRETURNED 0x0002 + +typedef struct +{ + PIRP Irp; + PDEVICE_OBJECT DeviceObject; + PDEVICE_EXTENSION DeviceExt; + ULONG Flags; + WORK_QUEUE_ITEM WorkQueueItem; + PIO_STACK_LOCATION Stack; + UCHAR MajorFunction; + UCHAR MinorFunction; + PFILE_OBJECT FileObject; + ULONG RefCount; + KEVENT Event; +} VFAT_IRP_CONTEXT, *PVFAT_IRP_CONTEXT; + +typedef struct _VFAT_DIRENTRY_CONTEXT +{ + ULONG StartIndex; + ULONG DirIndex; + DIR_ENTRY DirEntry; + UNICODE_STRING LongNameU; + UNICODE_STRING ShortNameU; +} VFAT_DIRENTRY_CONTEXT, *PVFAT_DIRENTRY_CONTEXT; + + +/* ------------------------------------------------------ shutdown.c */ + +NTSTATUS STDCALL VfatShutdown (PDEVICE_OBJECT DeviceObject, + PIRP Irp); + +/* -------------------------------------------------------- volume.c */ + +NTSTATUS VfatQueryVolumeInformation (PVFAT_IRP_CONTEXT IrpContext); + +NTSTATUS VfatSetVolumeInformation (PVFAT_IRP_CONTEXT IrpContext); + +/* ------------------------------------------------------ blockdev.c */ + +NTSTATUS VfatReadDisk(IN PDEVICE_OBJECT pDeviceObject, + IN PLARGE_INTEGER ReadOffset, + IN ULONG ReadLength, + IN PUCHAR Buffer, + IN BOOLEAN Override); + +NTSTATUS VfatReadDiskPartial (IN PVFAT_IRP_CONTEXT IrpContext, + IN PLARGE_INTEGER ReadOffset, + IN ULONG ReadLength, + IN ULONG BufferOffset, + IN BOOLEAN Wait); + +NTSTATUS VfatWriteDiskPartial(IN PVFAT_IRP_CONTEXT IrpContext, + IN PLARGE_INTEGER WriteOffset, + IN ULONG WriteLength, + IN ULONG BufferOffset, + IN BOOLEAN Wait); + +NTSTATUS VfatBlockDeviceIoControl (IN PDEVICE_OBJECT DeviceObject, + IN ULONG CtlCode, + IN PVOID InputBuffer, + IN ULONG InputBufferSize, + IN OUT PVOID OutputBuffer, + IN OUT PULONG pOutputBufferSize, + IN BOOLEAN Override); + +/* ----------------------------------------------------------- dir.c */ + +NTSTATUS VfatDirectoryControl (PVFAT_IRP_CONTEXT); + +BOOLEAN FsdDosDateTimeToSystemTime (PDEVICE_EXTENSION DeviceExt, + USHORT DosDate, + USHORT DosTime, + PLARGE_INTEGER SystemTime); + +BOOLEAN FsdSystemTimeToDosDateTime (PDEVICE_EXTENSION DeviceExt, + PLARGE_INTEGER SystemTime, + USHORT *pDosDate, + USHORT *pDosTime); + +/* -------------------------------------------------------- create.c */ + +NTSTATUS VfatCreate (PVFAT_IRP_CONTEXT IrpContext); + +NTSTATUS VfatOpenFile (PDEVICE_EXTENSION DeviceExt, + PFILE_OBJECT FileObject, + PVFATFCB* parentFcb); + +NTSTATUS FindFile (PDEVICE_EXTENSION DeviceExt, + PVFATFCB Parent, + PUNICODE_STRING FileToFindU, + PVFAT_DIRENTRY_CONTEXT DirContext, + BOOLEAN First); + +VOID vfat8Dot3ToString (PFAT_DIR_ENTRY pEntry, + PUNICODE_STRING NameU); + +NTSTATUS ReadVolumeLabel(PDEVICE_EXTENSION DeviceExt, + PVPB Vpb); + +/* --------------------------------------------------------- close.c */ + +NTSTATUS VfatClose (PVFAT_IRP_CONTEXT IrpContext); + +NTSTATUS VfatCloseFile(PDEVICE_EXTENSION DeviceExt, + PFILE_OBJECT FileObject); + +/* ------------------------------------------------------- cleanup.c */ + +NTSTATUS VfatCleanup (PVFAT_IRP_CONTEXT IrpContext); + +/* --------------------------------------------------------- fastio.c */ + +VOID +VfatInitFastIoRoutines(PFAST_IO_DISPATCH FastIoDispatch); + +BOOLEAN NTAPI +VfatAcquireForLazyWrite(IN PVOID Context, + IN BOOLEAN Wait); + +VOID NTAPI +VfatReleaseFromLazyWrite(IN PVOID Context); + +BOOLEAN NTAPI +VfatAcquireForReadAhead(IN PVOID Context, + IN BOOLEAN Wait); + +VOID NTAPI +VfatReleaseFromReadAhead(IN PVOID Context); + +/* --------------------------------------------------------- fsctl.c */ + +NTSTATUS VfatFileSystemControl (PVFAT_IRP_CONTEXT IrpContext); + +/* --------------------------------------------------------- finfo.c */ + +NTSTATUS VfatQueryInformation (PVFAT_IRP_CONTEXT IrpContext); + +NTSTATUS VfatSetInformation (PVFAT_IRP_CONTEXT IrpContext); + +NTSTATUS +VfatSetAllocationSizeInformation(PFILE_OBJECT FileObject, + PVFATFCB Fcb, + PDEVICE_EXTENSION DeviceExt, + PLARGE_INTEGER AllocationSize); + +/* --------------------------------------------------------- iface.c */ + +NTSTATUS STDCALL DriverEntry (PDRIVER_OBJECT DriverObject, + PUNICODE_STRING RegistryPath); + +/* --------------------------------------------------------- dirwr.c */ + +NTSTATUS VfatAddEntry (PDEVICE_EXTENSION DeviceExt, + PUNICODE_STRING PathNameU, + PVFATFCB* Fcb, + PVFATFCB ParentFcb, + ULONG RequestedOptions, + UCHAR ReqAttr); + +NTSTATUS VfatUpdateEntry (PVFATFCB pFcb); + +NTSTATUS VfatDelEntry(PDEVICE_EXTENSION, PVFATFCB); + +BOOLEAN +vfatFindDirSpace(PDEVICE_EXTENSION DeviceExt, + PVFATFCB pDirFcb, + ULONG nbSlots, + PULONG start); + +/* -------------------------------------------------------- string.c */ + +VOID +vfatSplitPathName(PUNICODE_STRING PathNameU, + PUNICODE_STRING DirNameU, + PUNICODE_STRING FileNameU); + +BOOLEAN vfatIsLongIllegal(WCHAR c); + +BOOLEAN wstrcmpjoki (PWSTR s1, + PWSTR s2); + +/* ----------------------------------------------------------- fat.c */ + +NTSTATUS FAT12GetNextCluster(PDEVICE_EXTENSION DeviceExt, + ULONG CurrentCluster, + PULONG NextCluster); + +NTSTATUS FAT12FindAndMarkAvailableCluster(PDEVICE_EXTENSION DeviceExt, + PULONG Cluster); + +NTSTATUS FAT12WriteCluster(PDEVICE_EXTENSION DeviceExt, + ULONG ClusterToWrite, + ULONG NewValue, + PULONG OldValue); + +NTSTATUS FAT16GetNextCluster(PDEVICE_EXTENSION DeviceExt, + ULONG CurrentCluster, + PULONG NextCluster); + +NTSTATUS FAT16FindAndMarkAvailableCluster(PDEVICE_EXTENSION DeviceExt, + PULONG Cluster); + +NTSTATUS FAT16WriteCluster(PDEVICE_EXTENSION DeviceExt, + ULONG ClusterToWrite, + ULONG NewValue, + PULONG OldValue); + +NTSTATUS FAT32GetNextCluster(PDEVICE_EXTENSION DeviceExt, + ULONG CurrentCluster, + PULONG NextCluster); + +NTSTATUS FAT32FindAndMarkAvailableCluster(PDEVICE_EXTENSION DeviceExt, + PULONG Cluster); + +NTSTATUS FAT32WriteCluster(PDEVICE_EXTENSION DeviceExt, + ULONG ClusterToWrite, + ULONG NewValue, + PULONG OldValue); + +NTSTATUS OffsetToCluster (PDEVICE_EXTENSION DeviceExt, + ULONG FirstCluster, + ULONG FileOffset, + PULONG Cluster, + BOOLEAN Extend); + +ULONGLONG ClusterToSector (PDEVICE_EXTENSION DeviceExt, + ULONG Cluster); + +NTSTATUS GetNextCluster (PDEVICE_EXTENSION DeviceExt, + ULONG CurrentCluster, + PULONG NextCluster); + +NTSTATUS GetNextClusterExtend (PDEVICE_EXTENSION DeviceExt, + ULONG CurrentCluster, + PULONG NextCluster); + +NTSTATUS CountAvailableClusters (PDEVICE_EXTENSION DeviceExt, + PLARGE_INTEGER Clusters); + +NTSTATUS +WriteCluster(PDEVICE_EXTENSION DeviceExt, + ULONG ClusterToWrite, + ULONG NewValue); + +/* ------------------------------------------------------ direntry.c */ + +ULONG vfatDirEntryGetFirstCluster (PDEVICE_EXTENSION pDeviceExt, + PDIR_ENTRY pDirEntry); + +BOOLEAN VfatIsDirectoryEmpty(PVFATFCB Fcb); + +NTSTATUS FATGetNextDirEntry(PVOID * pContext, + PVOID * pPage, + IN PVFATFCB pDirFcb, + IN PVFAT_DIRENTRY_CONTEXT DirContext, + BOOLEAN First); + +NTSTATUS FATXGetNextDirEntry(PVOID * pContext, + PVOID * pPage, + IN PVFATFCB pDirFcb, + IN PVFAT_DIRENTRY_CONTEXT DirContext, + BOOLEAN First); + +/* ----------------------------------------------------------- fcb.c */ + +PVFATFCB vfatNewFCB (PDEVICE_EXTENSION pVCB, + PUNICODE_STRING pFileNameU); + +VOID vfatDestroyFCB (PVFATFCB pFCB); + +VOID vfatDestroyCCB(PVFATCCB pCcb); + +VOID vfatGrabFCB (PDEVICE_EXTENSION pVCB, + PVFATFCB pFCB); + +VOID vfatReleaseFCB (PDEVICE_EXTENSION pVCB, + PVFATFCB pFCB); + +VOID vfatAddFCBToTable (PDEVICE_EXTENSION pVCB, + PVFATFCB pFCB); + +PVFATFCB vfatGrabFCBFromTable (PDEVICE_EXTENSION pDeviceExt, + PUNICODE_STRING pFileNameU); + +PVFATFCB vfatMakeRootFCB (PDEVICE_EXTENSION pVCB); + +PVFATFCB vfatOpenRootFCB (PDEVICE_EXTENSION pVCB); + +BOOLEAN vfatFCBIsDirectory (PVFATFCB FCB); + +BOOLEAN vfatFCBIsRoot(PVFATFCB FCB); + +NTSTATUS vfatAttachFCBToFileObject (PDEVICE_EXTENSION vcb, + PVFATFCB fcb, + PFILE_OBJECT fileObject); + +NTSTATUS vfatDirFindFile (PDEVICE_EXTENSION pVCB, + PVFATFCB parentFCB, + PUNICODE_STRING FileToFindU, + PVFATFCB * fileFCB); + +NTSTATUS vfatGetFCBForFile (PDEVICE_EXTENSION pVCB, + PVFATFCB *pParentFCB, + PVFATFCB *pFCB, + PUNICODE_STRING pFileNameU); + +NTSTATUS vfatMakeFCBFromDirEntry (PVCB vcb, + PVFATFCB directoryFCB, + PVFAT_DIRENTRY_CONTEXT DirContext, + PVFATFCB * fileFCB); + +/* ------------------------------------------------------------ rw.c */ + +NTSTATUS VfatRead (PVFAT_IRP_CONTEXT IrpContext); + +NTSTATUS VfatWrite (PVFAT_IRP_CONTEXT IrpContext); + +NTSTATUS NextCluster(PDEVICE_EXTENSION DeviceExt, + ULONG FirstCluster, + PULONG CurrentCluster, + BOOLEAN Extend); + +/* ----------------------------------------------------------- misc.c */ + +NTSTATUS VfatQueueRequest(PVFAT_IRP_CONTEXT IrpContext); + +PVFAT_IRP_CONTEXT VfatAllocateIrpContext(PDEVICE_OBJECT DeviceObject, + PIRP Irp); + +VOID VfatFreeIrpContext(PVFAT_IRP_CONTEXT IrpContext); + +NTSTATUS STDCALL VfatBuildRequest (PDEVICE_OBJECT DeviceObject, + PIRP Irp); + +PVOID VfatGetUserBuffer(IN PIRP); + +NTSTATUS VfatLockUserBuffer(IN PIRP, IN ULONG, + IN LOCK_OPERATION); + +NTSTATUS +VfatSetExtendedAttributes(PFILE_OBJECT FileObject, + PVOID Ea, + ULONG EaLength); +/* ------------------------------------------------------------- flush.c */ + +NTSTATUS VfatFlush(PVFAT_IRP_CONTEXT IrpContext); + +NTSTATUS VfatFlushVolume(PDEVICE_EXTENSION DeviceExt, PVFATFCB VolumeFcb); + + +/* EOF */ diff --git a/reactos/lib/fslib/vfatlib/vfatlib.c b/reactos/lib/fslib/vfatlib/vfatlib.c index 8f21dd07750..bbe72705429 100755 --- a/reactos/lib/fslib/vfatlib/vfatlib.c +++ b/reactos/lib/fslib/vfatlib/vfatlib.c @@ -12,6 +12,11 @@ #define NDEBUG #include +PFMIFSCALLBACK ChkdskCallback = NULL; +PVOID FsCheckMemQueue; +ULONG FsCheckFlags; +ULONG FsCheckTotalFiles; + NTSTATUS NTAPI VfatFormat (PUNICODE_STRING DriveRoot, FMIFS_MEDIA_FLAG MediaFlag, @@ -50,7 +55,7 @@ VfatFormat (PUNICODE_STRING DriveRoot, FILE_SYNCHRONOUS_IO_ALERT); if (!NT_SUCCESS(Status)) { - DPRINT("NtOpenFile() failed with status 0x%.08x\n", Status); + DPRINT1("NtOpenFile() failed with status 0x%.08x\n", Status); return Status; } @@ -203,6 +208,25 @@ UpdateProgress (PFORMAT_CONTEXT Context, } } +VOID +VfatPrint(PCHAR Format, ...) +{ + TEXTOUTPUT TextOut; + CHAR TextBuf[512]; + va_list valist; + + va_start(valist, Format); + _vsnprintf(TextBuf, sizeof(TextBuf), Format, valist); + va_end(valist); + + /* Prepare parameters */ + TextOut.Lines = 1; + TextOut.Output = TextBuf; + + /* Do the callback */ + if (ChkdskCallback) ChkdskCallback(OUTPUT, 0, &TextOut); +} + NTSTATUS WINAPI VfatChkdsk( IN PUNICODE_STRING DriveRoot, @@ -212,8 +236,74 @@ VfatChkdsk( IN BOOLEAN ScanDrive, IN PFMIFSCALLBACK Callback) { - UNIMPLEMENTED; - return STATUS_SUCCESS; + BOOLEAN verify, salvage_files; + //ULONG free_clusters; + //DOS_FS fs; + + /* Store callback pointer */ + ChkdskCallback = Callback; + FsCheckMemQueue = NULL; + + /* Set parameters */ + FsCheckFlags = 0; + if (Verbose) FsCheckFlags |= FSCHECK_VERBOSE; + + FsCheckTotalFiles = 0; + + verify = TRUE; + salvage_files = TRUE; +#if 0 + /* Open filesystem */ + fs_open(DriveRoot,FixErrors); + + if (CheckOnlyIfDirty && !fs_isdirty(DriveRoot)) + { + /* No need to check FS */ + return fs_close(FALSE); + } + + read_boot(&fs); + if (verify) VfatPrint("Starting check/repair pass.\n"); + while (read_fat(&fs), scan_root(&fs)) qfree(&FsCheckMemQueue); + if (ScanDrive) fix_bad(&fs); + if (salvage_files) + reclaim_file(&fs); + else + reclaim_free(&fs); + free_clusters = update_free(&fs); + file_unused(); + qfree(&FsCheckMemQueue); + if (verify) + { + VfatPrint("Starting verification pass.\n"); + read_fat(&fs); + scan_root(&fs); + reclaim_free(&fs); + qfree(&FsCheckMemQueue); + } + + if (fs_changed()) + { + if (FixErrors) + { + if (FsCheckFlags & FSCHECK_INTERACTIVE) + FixErrors = get_key("yn","Perform changes ? (y/n)") == 'y'; + else + VfatPrint("Performing changes.\n"); + } + else + { + VfatPrint("Leaving file system unchanged.\n"); + } + } + + VfatPrint("%wZ: %u files, %lu/%lu clusters\n", DriveRoot, + FsCheckTotalFiles, fs.clusters - free_clusters, fs.clusters ); + + return fs_close(FixErrors) ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL; +#else + return STATUS_SUCCESS; +#endif } /* EOF */ diff --git a/reactos/lib/fslib/vfatlib/vfatlib.h b/reactos/lib/fslib/vfatlib/vfatlib.h index e8eca1efbaf..7430a51558b 100755 --- a/reactos/lib/fslib/vfatlib/vfatlib.h +++ b/reactos/lib/fslib/vfatlib/vfatlib.h @@ -10,6 +10,15 @@ #include #include +#include "check/dosfsck.h" +#include "check/common.h" +#include "check/io.h" +#include "check/lfn.h" +#include "check/boot.h" +#include "check/fat.h" +#include "check/file.h" +#include "check/check.h" + #define SECTORSIZE 512 #include @@ -130,4 +139,7 @@ VOID UpdateProgress (PFORMAT_CONTEXT Context, ULONG Increment); +VOID +VfatPrint(PCHAR Format, ...); + /* EOF */ diff --git a/reactos/lib/fslib/vfatlib/vfatlib.rbuild b/reactos/lib/fslib/vfatlib/vfatlib.rbuild index 7569d6eac98..f84c671e5e1 100644 --- a/reactos/lib/fslib/vfatlib/vfatlib.rbuild +++ b/reactos/lib/fslib/vfatlib/vfatlib.rbuild @@ -7,4 +7,14 @@ fat16.c fat32.c vfatlib.c + + + boot.c + check.c + common.c + fat.c + file.c + io.c + lfn.c + diff --git a/reactos/lib/recyclebin/recyclebin.c b/reactos/lib/recyclebin/recyclebin.c index 1a925a41253..7bee36c62d8 100644 --- a/reactos/lib/recyclebin/recyclebin.c +++ b/reactos/lib/recyclebin/recyclebin.c @@ -93,6 +93,26 @@ cleanup: return FALSE; } +BOOL WINAPI +DeleteFileHandleToRecycleBin( + IN HANDLE hDeletedFile) +{ + IRecycleBinFile *rbf = (IRecycleBinFile *)hDeletedFile; + HRESULT hr; + + TRACE("(%p)\n", hDeletedFile); + + hr = IRecycleBinFile_Delete(rbf); + + if (SUCCEEDED(hr)) + return TRUE; + if (HRESULT_FACILITY(hr) == FACILITY_WIN32) + SetLastError(HRESULT_CODE(hr)); + else + SetLastError(ERROR_GEN_FAILURE); + return FALSE; +} + BOOL WINAPI EmptyRecycleBinA( IN LPCSTR pszRoot OPTIONAL) @@ -334,6 +354,18 @@ cleanup: return FALSE; } +BOOL WINAPI +GetRecycleBinDetails( + IN LPCWSTR pszVolume OPTIONAL, + OUT ULARGE_INTEGER *pulTotalItems, + OUT ULARGE_INTEGER *pulTotalSize) +{ + pulTotalItems->QuadPart = 0; + pulTotalSize->QuadPart = 0; + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return FALSE; +} + BOOL WINAPI RestoreFile( IN HANDLE hDeletedFile) diff --git a/reactos/lib/recyclebin/recyclebin.h b/reactos/lib/recyclebin/recyclebin.h index 873751dc383..a1f64e9373b 100644 --- a/reactos/lib/recyclebin/recyclebin.h +++ b/reactos/lib/recyclebin/recyclebin.h @@ -72,6 +72,15 @@ DeleteFileToRecycleBinW( #define DeleteFileToRecycleBin DeleteFileToRecycleBinA #endif +/* Moves a file to the recycle bin. + * hDeletedFile: handle of the deleted file to delete + * Returns TRUE if operation succeeded, FALSE otherwise. + * Remark: The handle is obtained in the PENUMERATE_RECYCLEBIN_CALLBACK callback + */ +BOOL WINAPI +DeleteFileHandleToRecycleBin( + IN HANDLE hDeletedFile); + /* Removes all elements contained in a recycle bin * pszRoot: the name of the drive containing the recycle bin * Returns TRUE if operation succeeded, FALSE otherwise. @@ -138,6 +147,17 @@ GetDeletedFileDetailsW( #define GetDeletedFileDetails GetDeletedFileDetailsA #endif +/* Get details about a whole recycle bin + * pszVolume: + * pulTotalItems: + * pulTotalSize + */ +BOOL WINAPI +GetRecycleBinDetails( + IN LPCWSTR pszVolume OPTIONAL, + OUT ULARGE_INTEGER *pulTotalItems, + OUT ULARGE_INTEGER *pulTotalSize); + /* Restores a deleted file * hDeletedFile: handle of the deleted file to restore * Returns TRUE if operation succeeded, FALSE otherwise. diff --git a/reactos/lib/rtl/thread.c b/reactos/lib/rtl/thread.c index e862e85323e..aafe0b4fb0f 100644 --- a/reactos/lib/rtl/thread.c +++ b/reactos/lib/rtl/thread.c @@ -209,7 +209,10 @@ RtlCreateUserThread(IN HANDLE ProcessHandle, else { /* Return thread data */ - if (ThreadHandle) *ThreadHandle = Handle; + if (ThreadHandle) + *ThreadHandle = Handle; + else + NtClose(Handle); if (ClientId) *ClientId = ThreadCid; } diff --git a/reactos/lib/rtl/unicode.c b/reactos/lib/rtl/unicode.c index eb2f28debb8..4b86aa6a9fd 100644 --- a/reactos/lib/rtl/unicode.c +++ b/reactos/lib/rtl/unicode.c @@ -1515,6 +1515,7 @@ RtlLargeIntegerToChar( IN ULONG Length, IN OUT PCHAR String) { + NTSTATUS Status = STATUS_SUCCESS; ULONG Radix; CHAR temp[65]; ULONGLONG v = Value->QuadPart; @@ -1538,19 +1539,32 @@ RtlLargeIntegerToChar( if (i < 10) *tp = i + '0'; else - *tp = i + 'a' - 10; + *tp = i + 'A' - 10; tp++; } - if ((ULONG)((ULONG_PTR)tp - (ULONG_PTR)temp) >= Length) - return STATUS_BUFFER_TOO_SMALL; + if ((ULONG)((ULONG_PTR)tp - (ULONG_PTR)temp) > Length) + return STATUS_BUFFER_OVERFLOW; - sp = String; - while (tp > temp) - *sp++ = *--tp; - *sp = 0; + //_SEH_TRY + { + sp = String; + while (tp > temp) + *sp++ = *--tp; - return STATUS_SUCCESS; + if((ULONG)((ULONG_PTR)sp - (ULONG_PTR)String) < Length) + *sp = 0; + } +#if 0 + _SEH_HANDLE + { + /* Get the error code */ + Status = _SEH_GetExceptionCode(); + } + _SEH_END; +#endif + + return Status; } /* diff --git a/reactos/lib/sdk/crt/crt.rbuild b/reactos/lib/sdk/crt/crt.rbuild index bba157a2488..bb78b1739bd 100644 --- a/reactos/lib/sdk/crt/crt.rbuild +++ b/reactos/lib/sdk/crt/crt.rbuild @@ -239,10 +239,6 @@ find.c fmode.c lnx_sprintf.c - lnx_vfprintf.c - lnx_vfwprint.c - lnx_vsprintf.c - lnx_vswprintf.c perror.c popen.c waccess.c diff --git a/reactos/lib/sdk/crt/stdio/lnx_sprintf.c b/reactos/lib/sdk/crt/stdio/lnx_sprintf.c index efef2b6d22d..3b48479e7c7 100644 --- a/reactos/lib/sdk/crt/stdio/lnx_sprintf.c +++ b/reactos/lib/sdk/crt/stdio/lnx_sprintf.c @@ -1,9 +1,20 @@ /* - * PROJECT: ReactOS CRT library - * LICENSE: LGPL - See COPYING in the top level directory - * FILE: lib/sdk/crt/stdio/lnx_sprintf.c - * PURPOSE: Base implementation of sprintf - * PROGRAMMERS: Aleksey Bragin (aleksey@reactos.org) + * PROGRAMMERS: David Welch + * Eric Kohl + * + * TODO: + * - Verify the implementation of '%Z'. + */ + +/* + * linux/lib/vsprintf.c + * + * Copyright (C) 1991, 1992 Linus Torvalds + */ + +/* vsprintf.c -- Lars Wirzenius & Linus Torvalds. */ +/* + * Wirzenius wrote this portably, Torvalds fucked it up :-) */ #include @@ -11,18 +22,684 @@ #include #include +#define ZEROPAD 1 /* pad with zero */ +#define SIGN 2 /* unsigned/signed long */ +#define PLUS 4 /* show plus */ +#define SPACE 8 /* space if plus */ +#define LEFT 16 /* left justified */ +#define SPECIAL 32 /* 0x */ +#define LARGE 64 /* use 'ABCDEF' instead of 'abcdef' */ +#define REMOVEHEX 256 /* use 256 as remve 0x frim BASE 16 */ + +static +__inline +int +do_div(long long *n, int base) +{ + int a; + a = ((unsigned long long) *n) % (unsigned) base; + *n = ((unsigned long long) *n) / (unsigned) base; + return a; +} + + +static int skip_atoi(const char **s) +{ + int i=0; + + while (isdigit(**s)) + i = i*10 + *((*s)++) - '0'; + return i; +} + + +static char * +number(char * buf, char * end, long long num, int base, int size, int precision, int type) +{ + char c,sign,tmp[66]; + const char *digits; + const char *small_digits = "0123456789abcdefghijklmnopqrstuvwxyz"; + const char *large_digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + int i; + + digits = (type & LARGE) ? large_digits : small_digits; + if (type & LEFT) + type &= ~ZEROPAD; + if (base < 2 || base > 36) + return 0; + c = (type & ZEROPAD) ? '0' : ' '; + sign = 0; + if (type & SIGN) { + if (num < 0) { + sign = '-'; + num = -num; + size--; + } else if (type & PLUS) { + sign = '+'; + size--; + } else if (type & SPACE) { + sign = ' '; + size--; + } + } + + if ((type & SPECIAL) && ((type & REMOVEHEX) == 0)) { + if (base == 16) + size -= 2; + + } + i = 0; + if ((num == 0) && (precision !=0)) + tmp[i++] = '0'; + else while (num != 0) + tmp[i++] = digits[do_div(&num,base)]; + if (i > precision) + precision = i; + size -= precision; + if (!(type&(ZEROPAD+LEFT))) { + while(size-->0) { + if (buf <= end) + *buf = ' '; + ++buf; + } + } + if (sign) { + if (buf <= end) + *buf = sign; + ++buf; + } + + if ((type & SPECIAL) && ((type & REMOVEHEX) == 0)) { + if (base==16) { + if (buf <= end) + *buf = '0'; + ++buf; + if (buf <= end) + *buf = digits[33]; + ++buf; + } + } + + if (!(type & LEFT)) { + while (size-- > 0) { + if (buf <= end) + *buf = c; + ++buf; + } + } + while (i < precision--) { + if (buf <= end) + *buf = '0'; + ++buf; + } + while (i-- > 0) { + if (buf <= end) + *buf = tmp[i]; + ++buf; + } + while (size-- > 0) { + if (buf <= end) + *buf = ' '; + ++buf; + } + + return buf; +} + +static char * +numberf(char * buf, char * end, double num, int base, int size, int precision, int type) +{ + char c,sign,tmp[66]; + const char *digits; + const char *small_digits = "0123456789abcdefghijklmnopqrstuvwxyz"; + const char *large_digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + int i; + long long x; + + /* FIXME + the float version of number is direcly copy of number + */ + + digits = (type & LARGE) ? large_digits : small_digits; + if (type & LEFT) + type &= ~ZEROPAD; + if (base < 2 || base > 36) + return 0; + c = (type & ZEROPAD) ? '0' : ' '; + sign = 0; + if (type & SIGN) { + if (num < 0) { + sign = '-'; + num = -num; + size--; + } else if (type & PLUS) { + sign = '+'; + size--; + } else if (type & SPACE) { + sign = ' '; + size--; + } + } + if (type & SPECIAL) { + if (base == 16) + size -= 2; + else if (base == 8) + size--; + } + i = 0; + if (num == 0) + tmp[i++] = '0'; + else while (num != 0) + { + x = num; + tmp[i++] = digits[do_div(&x,base)]; + num=x; + } + if (i > precision) + precision = i; + size -= precision; + if (!(type&(ZEROPAD+LEFT))) { + while(size-->0) { + if (buf <= end) + *buf = ' '; + ++buf; + } + } + if (sign) { + if (buf <= end) + *buf = sign; + ++buf; + } + if (type & SPECIAL) { + if (base==8) { + if (buf <= end) + *buf = '0'; + ++buf; + } else if (base==16) { + if (buf <= end) + *buf = '0'; + ++buf; + if (buf <= end) + *buf = digits[33]; + ++buf; + } + } + if (!(type & LEFT)) { + while (size-- > 0) { + if (buf <= end) + *buf = c; + ++buf; + } + } + while (i < precision--) { + if (buf <= end) + *buf = '0'; + ++buf; + } + while (i-- > 0) { + if (buf <= end) + *buf = tmp[i]; + ++buf; + } + while (size-- > 0) { + if (buf <= end) + *buf = ' '; + ++buf; + } + return buf; +} + +static char* +string(char* buf, char* end, const char* s, int len, int field_width, int precision, int flags) +{ + int i; + char c; + + c = (flags & ZEROPAD) ? '0' : ' '; + + if (s == NULL) + { + s = ""; + len = 6; + } + else + { + if (len == -1) + { + len = 0; + while ((unsigned int)len < (unsigned int)precision && s[len]) + len++; + } + else + { + if ((unsigned int)len > (unsigned int)precision) + len = precision; + } + } + if (!(flags & LEFT)) + while (len < field_width--) + { + if (buf <= end) + *buf = c; + ++buf; + } + for (i = 0; i < len; ++i) + { + if (buf <= end) + *buf = *s++; + ++buf; + } + while (len < field_width--) + { + if (buf <= end) + *buf = ' '; + ++buf; + } + return buf; +} + +static char* +stringw(char* buf, char* end, const wchar_t* sw, int len, int field_width, int precision, int flags) +{ + int i; + char c; + + c = (flags & ZEROPAD) ? '0' : ' '; + + if (sw == NULL) + { + sw = L""; + len = 6; + } + else + { + if (len == -1) + { + len = 0; + while ((unsigned int)len < (unsigned int)precision && sw[len]) + len++; + } + else + { + if ((unsigned int)len > (unsigned int)precision) + len = precision; + } + } + if (!(flags & LEFT)) + while (len < field_width--) + { + if (buf <= end) + *buf = c; + buf++; + } + for (i = 0; i < len; ++i) + { + if (buf <= end) + *buf = (unsigned char)(*sw++); + buf++; + } + while (len < field_width--) + { + if (buf <= end) + *buf = ' '; + buf++; + } + return buf; +} + /* * @implemented */ -int -lnx_sprintf(_TCHAR *str, const _TCHAR *fmt, ...) +int __cdecl lnx_vsnprintf(char *buf, size_t cnt, const char *fmt, va_list args) { - va_list arg; - int done; + int len; + unsigned long long num; + double _double; - va_start (arg, fmt); - done = lnx__vstprintf (str, fmt, arg); - va_end (arg); - return done; + int base; + char *str, *end; + const char *s; + const wchar_t *sw; + + int flags; /* flags to number() */ + + int field_width; /* width of output field */ + int precision; /* min. # of digits for integers; max + number of chars for from string */ + int qualifier; /* 'h', 'l', 'L', 'I' or 'w' for integer fields */ + + /* clear the string buffer with zero so we do not need NULL terment it at end */ + + str = buf; + end = buf + cnt - 1; + if (end < buf - 1) { + end = ((char *) -1); + cnt = end - buf + 1; + } + + for ( ; *fmt ; ++fmt) { + if (*fmt != '%') { + if (str <= end) + *str = *fmt; + ++str; + continue; + } + + /* process flags */ + flags = 0; + repeat: + ++fmt; /* this also skips first '%' */ + switch (*fmt) { + case '-': flags |= LEFT; goto repeat; + case '+': flags |= PLUS; goto repeat; + case ' ': flags |= SPACE; goto repeat; + case '#': flags |= SPECIAL; goto repeat; + case '0': flags |= ZEROPAD; goto repeat; + } + + /* get field width */ + field_width = -1; + if (isdigit(*fmt)) + field_width = skip_atoi(&fmt); + else if (*fmt == '*') { + ++fmt; + /* it's the next argument */ + field_width = va_arg(args, int); + if (field_width < 0) { + field_width = -field_width; + flags |= LEFT; + } + } + + /* get the precision */ + precision = -1; + if (*fmt == '.') { + ++fmt; + if (isdigit(*fmt)) + precision = skip_atoi(&fmt); + else if (*fmt == '*') { + ++fmt; + /* it's the next argument */ + precision = va_arg(args, int); + } + if (precision < 0) + precision = 0; + } + + /* get the conversion qualifier */ + qualifier = -1; + if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L' || *fmt == 'w') { + qualifier = *fmt; + ++fmt; + } else if (*fmt == 'I' && *(fmt+1) == '6' && *(fmt+2) == '4') { + qualifier = *fmt; + fmt += 3; + } else if (*fmt == 'I' && *(fmt+1) == '3' && *(fmt+2) == '2') { + qualifier = 'l'; + fmt += 3; + } else if (*fmt == 'F' && *(fmt+1) == 'p') { + fmt += 1; + flags |= REMOVEHEX; + } + + /* default base */ + base = 10; + + switch (*fmt) { + case 'c': /* finished */ + if (qualifier == 'l' || qualifier == 'w') { + wchar_t sw1[2]; + /* print unicode string */ + sw1[0] = (wchar_t) va_arg(args, int); + sw1[1] = 0; + str = stringw(str, end, (wchar_t *)&sw1, -1, field_width, precision, flags); + } else { + char s1[2]; + /* print ascii string */ + s1[0] = ( unsigned char) va_arg(args, int); + s1[1] = 0; + str = string(str, end, (char *)&s1, -1, field_width, precision, flags); + } + continue; + + case 'C': /* finished */ + if (!(flags & LEFT)) + while (--field_width > 0) { + if (str <= end) + *str = ' '; + ++str; + } + if (qualifier == 'h') { + if (str <= end) + *str = (unsigned char) va_arg(args, int); + ++str; + } else { + if (str <= end) + *str = (unsigned char)(wchar_t) va_arg(args, int); + ++str; + } + while (--field_width > 0) { + if (str <= end) + *str = ' '; + ++str; + } + continue; + + case 's': /* finished */ + if (qualifier == 'l' || qualifier == 'w') { + /* print unicode string */ + sw = va_arg(args, wchar_t *); + str = stringw(str, end, sw, -1, field_width, precision, flags); + } else { + /* print ascii string */ + s = va_arg(args, char *); + str = string(str, end, s, -1, field_width, precision, flags); + } + continue; + + case 'S': + if (qualifier == 'h') { + /* print ascii string */ + s = va_arg(args, char *); + str = string(str, end, s, -1, field_width, precision, flags); + } else { + /* print unicode string */ + sw = va_arg(args, wchar_t *); + str = stringw(str, end, sw, -1, field_width, precision, flags); + } + continue; + + case 'Z': + if (qualifier == 'w') { + /* print counted unicode string */ + PUNICODE_STRING pus = va_arg(args, PUNICODE_STRING); + if ((pus == NULL) || (pus->Buffer == NULL)) { + sw = NULL; + len = -1; + } else { + sw = pus->Buffer; + len = pus->Length / sizeof(WCHAR); + } + str = stringw(str, end, sw, len, field_width, precision, flags); + } else { + /* print counted ascii string */ + PANSI_STRING pus = va_arg(args, PANSI_STRING); + if ((pus == NULL) || (pus->Buffer == NULL)) { + s = NULL; + len = -1; + } else { + s = pus->Buffer; + len = pus->Length; + } + str = string(str, end, s, len, field_width, precision, flags); + } + continue; + + case 'p': + if ((flags & LARGE) == 0) + flags |= LARGE; + + if (field_width == -1) { + field_width = 2 * sizeof(void *); + flags |= ZEROPAD; + } + str = number(str, end, + (unsigned long) va_arg(args, void *), 16, + field_width, precision, flags); + continue; + + case 'n': + /* FIXME: What does C99 say about the overflow case here? */ + if (qualifier == 'l') { + long * ip = va_arg(args, long *); + *ip = (str - buf); + } else { + int * ip = va_arg(args, int *); + *ip = (str - buf); + } + continue; + + /* float number formats - set up the flags and "break" */ + case 'e': + case 'E': + case 'f': + case 'g': + case 'G': + _double = (double)va_arg(args, double); + if ( _isnan(_double) ) { + s = "Nan"; + len = 3; + while ( len > 0 ) { + if (str <= end) + *str = *s++; + ++str; + len --; + } + } else if ( _isinf(_double) < 0 ) { + s = "-Inf"; + len = 4; + while ( len > 0 ) { + if (str <= end) + *str = *s++; + ++str; + len --; + } + } else if ( _isinf(_double) > 0 ) { + s = "+Inf"; + len = 4; + while ( len > 0 ) { + if (str <= end) + *str = *s++; + ++str; + len --; + } + } else { + if ( precision == -1 ) + precision = 6; + str = numberf(str, end, (int)_double, base, field_width, precision, flags); + } + + continue; + + + /* integer number formats - set up the flags and "break" */ + case 'o': + base = 8; + break; + + case 'b': + base = 2; + break; + + case 'X': + flags |= LARGE; + case 'x': + base = 16; + break; + + case 'd': + case 'i': + flags |= SIGN; + case 'u': + break; + + default: + if (*fmt) { + if (str <= end) + *str = *fmt; + ++str; + } else + --fmt; + continue; + } + + if (qualifier == 'I') + num = va_arg(args, unsigned long long); + else if (qualifier == 'l') { + if (flags & SIGN) + num = va_arg(args, long); + else + num = va_arg(args, unsigned long); + } + else if (qualifier == 'h') { + if (flags & SIGN) + num = va_arg(args, int); + else + num = va_arg(args, unsigned int); + } + else { + if (flags & SIGN) + num = va_arg(args, int); + else + num = va_arg(args, unsigned int); + } + str = number(str, end, num, base, field_width, precision, flags); + } + if (str <= end) + *str = '\0'; + else if (cnt > 0) + /* don't write out a null byte if the buf size is zero */ + *end = '\0'; + return str-buf; } + +/* + * @implemented + */ +int lnx_sprintf(char * buf, const char *fmt, ...) +{ + va_list args; + int i; + + va_start(args, fmt); + i=lnx_vsnprintf(buf,MAXLONG,fmt,args); + va_end(args); + return i; +} + +#if 0 +/* + * @implemented + */ +int _snprintf(char * buf, size_t cnt, const char *fmt, ...) +{ + va_list args; + int i; + + va_start(args, fmt); + i=_vsnprintf(buf,cnt,fmt,args); + va_end(args); + return i; +} + + +/* + * @implemented + */ +int __cdecl vsprintf(char *buf, const char *fmt, va_list args) +{ + return _vsnprintf(buf,MAXLONG,fmt,args); +} +#endif +/* EOF */ diff --git a/reactos/lib/sdk/crt/stdio/lnx_vfprintf.c b/reactos/lib/sdk/crt/stdio/lnx_vfprintf.c deleted file mode 100644 index 613413df6a2..00000000000 --- a/reactos/lib/sdk/crt/stdio/lnx_vfprintf.c +++ /dev/null @@ -1,874 +0,0 @@ -/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */ -#include - -extern int __mb_cur_max; -int __vfprintf(FILE*, const char*, va_list); - -/* - * @implemented - */ -int lnx_vfprintf(FILE* f, const char* fmt, va_list ap) -{ - int len; - char localbuf[BUFSIZ]; - -#if 0 - __fileno_lock(_fileno(f)); -#endif - if (f->_flag & _IONBF) { - f->_flag &= ~_IONBF; - f->_ptr = f->_base = localbuf; - f->_bufsiz = f->_cnt = BUFSIZ; - len = __vfprintf(f, fmt, ap); - (void)fflush(f); - f->_flag |= _IONBF; - f->_base = NULL; - f->_bufsiz = 0; - f->_cnt = 0; - } else { - len = __vfprintf(f,fmt, ap); - } -#if 0 - __fileno_unlock(_fileno(f)); -#endif - return (ferror(f) ? EOF : len); -} - - -/* - * linux/lib/vsprintf.c - * - * Copyright (C) 1991, 1992 Linus Torvalds - */ - -/* vsprintf.c -- Lars Wirzenius & Linus Torvalds. */ -/* - * Wirzenius wrote this portably, Torvalds fucked it up :-) - */ - -/* - * Appropiated for the reactos kernel, March 1998 -- David Welch - */ - -#include - -#include -#include -#include -#include - - -#define ZEROPAD 1 /* pad with zero */ -#define SIGN 2 /* unsigned/signed long */ -#define PLUS 4 /* show plus */ -#define SPACE 8 /* space if plus */ -#define LEFT 16 /* left justified */ -#define SPECIAL 32 /* 0x */ -#define LARGE 64 /* use 'ABCDEF' instead of 'abcdef' */ -#define ZEROTRUNC 128 /* truncate zero 's */ - - -static int skip_atoi(const char **s) -{ - int i=0; - - while (isdigit(**s)) - i = i*10 + *((*s)++) - '0'; - return i; -} - - -static int do_div(LONGLONG *n,int base) -{ - int __res = ((ULONGLONG) *n) % (unsigned) base; - *n = ((ULONGLONG) *n) / (unsigned) base; - return __res; -} - - -static int number(FILE * f, LONGLONG num, int base, int size, int precision ,int type) -{ - char c,sign,tmp[66]; - const char *digits="0123456789abcdefghijklmnopqrstuvwxyz"; - int i, done = 0; - - if (type & LARGE) - digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - if (type & LEFT) - type &= ~ZEROPAD; - if (base < 2 || base > 36) - return done; - c = (type & ZEROPAD) ? '0' : ' '; - sign = 0; - if (type & SIGN) { - if (num < 0) { - sign = '-'; - num = -num; - size--; - } else if (type & PLUS) { - sign = '+'; - size--; - } else if (type & SPACE) { - sign = ' '; - size--; - } - } - if (type & SPECIAL) { - if (base == 16) - size -= 2; - else if (base == 8) - size--; - } - i = 0; - if (num == 0) - tmp[i++]='0'; - else while (num != 0) - tmp[i++] = digits[do_div(&num,base)]; - if (i > precision) - precision = i; - size -= precision; - if (!(type&(ZEROPAD+LEFT))) - while(size-->0) - { - if (putc(' ',f) == EOF) - return -1; - done++; - } - if (sign) - { - if (putc(sign,f) == EOF) - return -1; - done++; - } - if (type & SPECIAL) { - if (base==8) { - if (putc('0',f) == EOF) - return -1; - done++; - } - else if (base==16) { - if (putc('0', f) == EOF) - return -1; - done++; - if (putc(digits[33],f) == EOF) - return -1; - done++; - } - } - if (!(type & LEFT)) - while (size-- > 0) - { - if (putc(c,f) == EOF) - return -1; - done++; - } - while (i < precision--) - { - if (putc('0', f) == EOF) - return -1; - done++; - } - while (i-- > 0) - { - if (putc(tmp[i],f) == EOF) - return -1; - done++; - } - while (size-- > 0) - { - if (putc(' ', f) == EOF) - return -1; - done++; - } - return done; -} - - -static int numberf(FILE * f, double __n, char exp_sign, int size, int precision, int type) -{ - double exponent = 0.0; - double e; - long ie; - - //int x; - char *buf, *tmp; - int i = 0; - int j = 0; - //int k = 0; - - double frac, intr; - double p; - char sign; - char c; - char ro = 0; - int result, done = 0; - - union - { - double* __n; - double_t* n; - } n; - - n.__n = &__n; - - if ( exp_sign == L'g' || exp_sign == L'G' || exp_sign == L'e' || exp_sign == L'E' ) - { - if ( 0 == n.n->mantissal && 0 == n.n->mantissah && 0 == n.n->exponent ) - { - ie = 0; - } - else - { - ie = ((unsigned int)n.n->exponent - (unsigned int)0x3ff); - } - - exponent = ie/3.321928; - } - - - if ( exp_sign == 'g' || exp_sign == 'G' ) { - type |= ZEROTRUNC; - if ( exponent < -4 || fabs(exponent) >= precision ) - exp_sign -= 2; // g -> e and G -> E - else - exp_sign = 'f'; - } - - if ( exp_sign == 'e' || exp_sign == 'E' ) { - frac = modf(exponent,&e); - if ( frac > 0.5 ) - e++; - else if ( frac < -0.5 ) - e--; - - result = numberf(f,__n/pow(10.0L,e),'f',size-4, precision, type); - if (result < 0) - return -1; - done += result; - if (putc( exp_sign,f) == EOF) - return -1; - done++; - size--; - ie = (long)e; - type = LEFT | PLUS; - if ( ie < 0 ) - type |= SIGN; - - result = number(f,ie, 10,2, 2,type ); - if (result < 0) - return -1; - done += result; - return done; - } - - if ( exp_sign == 'f' ) { - buf = alloca(4096); - if (type & LEFT) { - type &= ~ZEROPAD; - } - - c = (type & ZEROPAD) ? '0' : ' '; - sign = 0; - if (type & SIGN) { - if (__n < 0) { - sign = '-'; - __n = fabs(__n); - size--; - } else if (type & PLUS) { - sign = '+'; - size--; - } else if (type & SPACE) { - sign = ' '; - size--; - } - } - - frac = modf(__n,&intr); - - // # flags forces a . and prevents trucation of trailing zero's - - if ( precision > 0 ) { - //frac = modfl(__n,&intr); - i = precision-1; - while ( i >= 0 ) { - frac*=10.0L; - frac = modf(frac, &p); - buf[i] = (int)p + '0'; - i--; - } - i = precision; - size -= precision; - - ro = 0; - if ( frac > 0.5 ) { - ro = 1; - } - - if ( precision >= 1 || type & SPECIAL) { - buf[i++] = '.'; - size--; - } - } - - if ( intr == 0.0 ) { - buf[i++] = '0'; - size--; - } - else { - while ( intr > 0.0 ) { - p = intr; - intr/=10.0L; - modf(intr, &intr); - - p -= 10.0*intr; - - buf[i++] = (int)p + '0'; - size--; - } - } - - j = 0; - while ( j < i && ro == 1) { - if ( buf[j] >= '0' && buf[j] <= '8' ) { - buf[j]++; - ro = 0; - } - else if ( buf[j] == '9' ) { - buf[j] = '0'; - } - j++; - } - if ( ro == 1 ) - buf[i++] = '1'; - - buf[i] = 0; - - size -= precision; - if (!(type&(ZEROPAD+LEFT))) - while(size-->0) - { - if (putc(' ',f) == EOF) - return -1; - done++; - } - if (sign) - { - if (putc( sign,f) == EOF) - return -1; - done++; - } - - if (!(type&(ZEROPAD+LEFT))) - while(size-->0) - { - if (putc(' ',f) == EOF) - return -1; - done++; - } - if (type & SPECIAL) { - } - - if (!(type & LEFT)) - while (size-- > 0) - { - if (putc(c,f) == EOF) - return -1; - done++; - } - - tmp = buf; - - if ( type & ZEROTRUNC && ((type & SPECIAL) != SPECIAL) ) { - j = 0; - while ( j < i && *tmp == L'0' ) { - tmp++; - i--; - } - if ( j < i && *tmp == L'.' ) { - tmp++; - i--; - } - } - - -// else -// while (i < precision--) -// putc('0', f); - while (i-- > 0) - { - if (putc(tmp[i],f) == EOF) - return -1; - done++; - } - while (size-- > 0) - { - if (putc(' ', f) == EOF) - return -1; - done++; - } - } - return done; -} - - - - -static int string(FILE *f, const char* s, int len, int field_width, int precision, int flags) -{ - int i, done = 0; - if (s == NULL) - { - s = ""; - len = 6; - } - else - { - if (len == -1) - { - len = 0; - while ((unsigned int)len < (unsigned int)precision && s[len]) - len++; - } - else - { - if ((unsigned int)len > (unsigned int)precision) - len = precision; - } - } - if (!(flags & LEFT)) - while (len < field_width--) - { - if (putc(' ', f) == EOF) - return -1; - done++; - } - for (i = 0; i < len; ++i) - { - if (putc(*s++, f) == EOF) - return -1; - done++; - } - while (len < field_width--) - { - if (putc(' ', f) == EOF) - return -1; - done++; - } - return done; -} - -static int stringw(FILE *f, const wchar_t* sw, int len, int field_width, int precision, int flags) -{ - int i, done = 0; - char * mb; - if (sw == NULL) - { - sw = L""; - len = 6; - } - else - { - if (len == -1) - { - len = 0; - while ((unsigned int)len < (unsigned int)precision && sw[len]) - len++; - } - else - { - if ((unsigned int)len > (unsigned int)precision) - len = precision; - } - } - if (!(flags & LEFT)) - while (len < field_width--) - { - if (putc(' ', f) == EOF) - return -1; - done++; - } - mb = malloc(MB_CUR_MAX * sizeof(char)); - if(!mb) - return -1; - for (i = 0; i < len; ++i) - { - int mbcount, j; - mbcount = wctomb(mb, *sw++); - if (mbcount <= 0) - { - break; - } - for (j = 0; j < mbcount; j++) - { - if (putc(mb[j], f) == EOF) - { - free(mb); - return -1; - } - done++; - } - } - while (len < field_width--) - { - if (putc(' ', f) == EOF) - { - free(mb); - return -1; - } - done++; - } - free(mb); - return done; -} - -int __vfprintf(FILE *f, const char *fmt, va_list args) -{ - int len; - ULONGLONG num; - int base; - double _double; - const char *s; - const wchar_t *sw; - int result, done = 0; - - int flags; /* flags to number() */ - - int field_width; /* width of output field */ - int precision; /* min. # of digits for integers; max - number of chars for from string */ - int qualifier = 0; /* 'h', 'l', 'L' or 'I64' for integer fields */ - - for (; *fmt ; ++fmt) { - if (*fmt != '%') { - if (putc(*fmt,f) == EOF) - return -1; - done++; - continue; - } - - /* process flags */ - flags = 0; - repeat: - ++fmt; /* this also skips first '%' */ - switch (*fmt) { - case '-': flags |= LEFT; goto repeat; - case '+': flags |= PLUS; goto repeat; - case ' ': flags |= SPACE; goto repeat; - case '#': flags |= SPECIAL; goto repeat; - case '0': flags |= ZEROPAD; goto repeat; - } - - /* get field width */ - field_width = -1; - if (isdigit(*fmt)) - field_width = skip_atoi(&fmt); - else if (*fmt == '*') { - ++fmt; - /* it's the next argument */ - field_width = va_arg(args, int); - if (field_width < 0) { - field_width = -field_width; - flags |= LEFT; - } - } - - /* get the precision */ - precision = -1; - if (*fmt == '.') { - ++fmt; - if (isdigit(*fmt)) - precision = skip_atoi(&fmt); - else if (*fmt == '*') { - ++fmt; - /* it's the next argument */ - precision = va_arg(args, int); - } - if (precision < 0) - precision = 0; - } - - /* get the conversion qualifier */ - qualifier = 0; - // %Z can be just stand alone or as size_t qualifier - if ( *fmt == 'Z' ) { - qualifier = *fmt; - switch ( *(fmt+1)) { - case 'o': - case 'b': - case 'X': - case 'x': - case 'd': - case 'i': - case 'u': - ++fmt; - break; - default: - break; - } - } else if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L' || *fmt == 'w') { - qualifier = *fmt; - ++fmt; - } else if (*fmt == 'I' && *(fmt+1) == '6' && *(fmt+2) == '4') { - qualifier = *fmt; - fmt += 3; - } - - // go fine with ll instead of L - if ( *fmt == 'l' ) { - ++fmt; - qualifier = 'L'; - } - - /* default base */ - base = 10; - - switch (*fmt) { - case 'c': - if (!(flags & LEFT)) - while (--field_width > 0) - { - if (putc(' ', f) == EOF) - return -1; - done++; - } - if (qualifier == 'l' || qualifier == 'w') - { - if (putc((unsigned char)(wchar_t) va_arg(args, int), f) == EOF) - return -1; - done++; - } - else - { - if (putc((unsigned char) va_arg(args, int), f) == EOF) - return -1; - done++; - } - while (--field_width > 0) - { - if (putc(' ', f) == EOF) - return -1; - done++; - } - continue; - - case 'C': - if (!(flags & LEFT)) - while (--field_width > 0) - { - if (putc(' ', f) == EOF) - return -1; - done++; - } - if (qualifier == 'h') - { - if (putc((unsigned char) va_arg(args, int), f) == EOF) - return -1; - done++; - } - else - { - if (putc((unsigned char)(wchar_t) va_arg(args, int), f) == EOF) - return -1; - done++; - } - while (--field_width > 0) - { - if (putc(' ', f) == EOF) - return -1; - done++; - } - continue; - - case 's': - if (qualifier == 'l' || qualifier == 'w') { - /* print unicode string */ - sw = va_arg(args, wchar_t *); - result = stringw(f, sw, -1, field_width, precision, flags); - } else { - /* print ascii string */ - s = va_arg(args, char *); - result = string(f, s, -1, field_width, precision, flags); - } - if (result < 0) - return -1; - done += result; - continue; - - case 'S': - if (qualifier == 'h') { - /* print ascii string */ - s = va_arg(args, char *); - result = string(f, s, -1, field_width, precision, flags); - } else { - /* print unicode string */ - sw = va_arg(args, wchar_t *); - result = stringw(f, sw, -1, field_width, precision, flags); - } - if (result < 0) - return -1; - done += result; - continue; - - case 'Z': - if (qualifier == 'w') { - /* print counted unicode string */ - PUNICODE_STRING pus = va_arg(args, PUNICODE_STRING); - if ((pus == NULL) || (pus->Buffer == NULL)) { - sw = NULL; - len = -1; - } else { - sw = pus->Buffer; - len = pus->Length / sizeof(WCHAR); - } - result = stringw(f, sw, len, field_width, precision, flags); - } else { - /* print counted ascii string */ - PANSI_STRING pas = va_arg(args, PANSI_STRING); - if ((pas == NULL) || (pas->Buffer == NULL)) { - s = NULL; - len = -1; - } else { - s = pas->Buffer; - len = pas->Length; - } - result = string(f, s, -1, field_width, precision, flags); - } - if (result < 0) - return -1; - done += result; - continue; - - case 'e': - case 'E': - case 'f': - case 'g': - case 'G': - _double = (double)va_arg(args, double); - - if ( _isnan(_double) ) { - s = "Nan"; - len = 3; - while ( len > 0 ) { - if (putc(*s++,f) == EOF) - return -1; - done++; - len --; - } - } else if ( _isinf(_double) < 0 ) { - s = "-Inf"; - len = 4; - while ( len > 0 ) { - if (putc(*s++,f) == EOF) - return -1; - done++; - len --; - } - } else if ( _isinf(_double) > 0 ) { - s = "+Inf"; - len = 4; - while ( len > 0 ) { - if (putc(*s++,f) == EOF) - return -1; - done++; - len --; - } - } else { - if ( precision == -1 ) - precision = 6; - result = numberf(f,_double,*fmt,field_width,precision,flags); - if (result < 0) - return -1; - done += result; - } - continue; - - case 'p': - if (field_width == -1) { - field_width = 2*sizeof(void *); - flags |= ZEROPAD; - } - result = number(f, - (uintptr_t) va_arg(args, void *), 16, - field_width, precision, flags); - if (result < 0) - return -1; - done += result; - continue; - - case 'n': - if (qualifier == 'l') { - long * ip = va_arg(args, long *); - *ip = 0; - } else { - int * ip = va_arg(args, int *); - *ip = 0; - } - continue; - - /* integer number formats - set up the flags and "break" */ - case 'o': - base = 8; - break; - - case 'b': - base = 2; - break; - - case 'X': - flags |= LARGE; - case 'x': - base = 16; - break; - - case 'd': - case 'i': - flags |= SIGN; - case 'u': - break; - - default: - if (*fmt != '%') - { - if (putc('%', f) == EOF) - return -1; - done++; - } - if (*fmt) - { - if (putc(*fmt, f) == EOF) - return -1; - done++; - } - else - --fmt; - continue; - } - - if (qualifier == 'I') - num = va_arg(args, ULONGLONG); - else if (qualifier == 'l') { - if (flags & SIGN) - num = va_arg(args, long); - else - num = va_arg(args, unsigned long); - } - else if (qualifier == 'h') { - if (flags & SIGN) - num = va_arg(args, int); - else - num = va_arg(args, unsigned int); - } - else if (flags & SIGN) - num = va_arg(args, int); - else - num = va_arg(args, unsigned int); - result = number(f, num, base, field_width, precision, flags); - if (result < 0) - return -1; - done += result; - } - //putc('\0',f); - return done; -} - -/* EOF */ diff --git a/reactos/lib/sdk/crt/stdio/lnx_vfwprint.c b/reactos/lib/sdk/crt/stdio/lnx_vfwprint.c deleted file mode 100644 index 9df0b652538..00000000000 --- a/reactos/lib/sdk/crt/stdio/lnx_vfwprint.c +++ /dev/null @@ -1,847 +0,0 @@ -/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */ - -#include - - -int -__vfwprintf(FILE *fp, const wchar_t *fmt0, va_list argp); - - -/* - * @implemented - */ -int -lnx_vfwprintf(FILE *f, const wchar_t *fmt, va_list ap) -{ - int len; - wchar_t localbuf[BUFSIZ]; - -#if 0 - __fileno_lock(_fileno(f)); -#endif - if (f->_flag & _IONBF) { - f->_flag &= ~_IONBF; - f->_ptr = f->_base = (char *)localbuf; - f->_bufsiz = BUFSIZ; - len = __vfwprintf(f,fmt,ap); - (void)fflush(f); - f->_flag |= _IONBF; - f->_base = NULL; - f->_bufsiz = 0; - f->_cnt = 0; - } else - len = __vfwprintf(f,fmt,ap); -#if 0 - __fileno_unlock(_fileno(f)); -#endif - return (ferror(f) ? EOF : len); -} - - - -/* - * linux/lib/vsprintf.c - * - * Copyright (C) 1991, 1992 Linus Torvalds - */ - -/* vsprintf.c -- Lars Wirzenius & Linus Torvalds. */ -/* - * Wirzenius wrote this portably, Torvalds fucked it up :-) - */ - -/* - * Appropiated for the reactos kernel, March 1998 -- David Welch - */ - -#include -#include - -#define ZEROPAD 1 /* pad with zero */ -#define SIGN 2 /* unsigned/signed long */ -#define PLUS 4 /* show plus */ -#define SPACE 8 /* space if plus */ -#define LEFT 16 /* left justified */ -#define SPECIAL 32 /* 0x */ -#define LARGE 64 /* use 'ABCDEF' instead of 'abcdef' */ -#define ZEROTRUNC 128 /* truncate zero 's */ - - -static int skip_wtoi(const wchar_t **s) -{ - int i=0; - - while (iswdigit(**s)) - i = i*10 + *((*s)++) - L'0'; - return i; -} - - -static int do_div(LONGLONG *n,int base) -{ - int __res = ((ULONGLONG) *n) % (unsigned) base; - *n = ((ULONGLONG) *n) / (unsigned) base; - return __res; -} - - -static int number(FILE * f, LONGLONG num, int base, int size, int precision ,int type) -{ - wchar_t c,sign,tmp[66]; - const wchar_t *digits=L"0123456789abcdefghijklmnopqrstuvwxyz"; - int i, done = 0; - - if (type & LARGE) - digits = L"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - if (type & LEFT) - type &= ~ZEROPAD; - if (base < 2 || base > 36) - return done; - c = (type & ZEROPAD) ? L'0' : L' '; - sign = 0; - if (type & SIGN) { - if (num < 0) { - sign = L'-'; - num = -num; - size--; - } else if (type & PLUS) { - sign = L'+'; - size--; - } else if (type & SPACE) { - sign = L' '; - size--; - } - } - if (type & SPECIAL) { - if (base == 16) - size -= 2; - else if (base == 8) - size--; - } - i = 0; - if (num == 0) - tmp[i++]=L'0'; - else while (num != 0) - tmp[i++] = digits[do_div(&num,base)]; - if (i > precision) - precision = i; - size -= precision; - if (!(type&(ZEROPAD+LEFT))) - while(size-->0) - { - if (putwc(L' ',f) == WEOF) - return -1; - done++; - } - - if (sign) - { - if (putwc(sign,f) == WEOF) - return -1; - done++; - } - if (type & SPECIAL) { - if (base==8) { - if (putwc(L'0',f) == WEOF) - return -1; - done++; - } - else if (base==16) { - if (putwc(L'0', f) == WEOF) - return -1; - done++; - if (putwc(digits[33],f) == WEOF) - return -1; - done++; - } - } - if (!(type & LEFT)) - while (size-- > 0) - { - if (putwc(c,f) == WEOF) - return -1; - done++; - } - while (i < precision--) - { - if (putwc(L'0', f) == WEOF) - return -1; - done++; - } - while (i-- > 0) - { - if (putwc(tmp[i],f) == WEOF) - return -1; - done++; - } - while (size-- > 0) - { - if (putwc(L' ', f) == WEOF) - return -1; - done++; - } - return done; -} - - -static int numberf(FILE * f, double __n, wchar_t exp_sign, int size, int precision, int type) -{ - double exponent = 0.0; - double e; - long ie; - - //int x; - char *buf, *tmp; - int i = 0; - int j = 0; - //int k = 0; - - double frac, intr; - double p; - wchar_t sign; - wchar_t c; - char ro = 0; - int result, done = 0; - - union - { - double* __n; - double_t* n; - } n; - - n.__n = &__n; - - if ( exp_sign == L'g' || exp_sign == L'G' || exp_sign == L'e' || exp_sign == L'E' ) - { - if ( 0 == n.n->mantissal && 0 == n.n->mantissah && 0 == n.n->exponent ) - { - ie = 0; - } - else - { - ie = ((unsigned int)n.n->exponent - (unsigned int)0x3ff); - } - - exponent = ie/3.321928; - } - - - if ( exp_sign == L'g' || exp_sign == L'G' ) { - type |= ZEROTRUNC; - if ( exponent < -4 || fabs(exponent) >= precision ) - exp_sign -= 2; // g -> e and G -> E - else - exp_sign = 'f'; - } - - if ( exp_sign == L'e' || exp_sign == L'E' ) { - frac = modf(exponent,&e); - if ( frac > 0.5 ) - e++; - else if ( frac < -0.5 ) - e--; - - result = numberf(f,__n/pow(10.0L,e),L'f',size-4, precision, type); - if (result < 0) - return -1; - done += result; - if (putwc( exp_sign,f) == WEOF) - return -1; - done++; - size--; - ie = (long)e; - type = LEFT | PLUS; - if ( ie < 0 ) - type |= SIGN; - - result = number(f,ie, 10,2, 2,type ); - if (result < 0) - return -1; - done += result; - return done; - } - - if ( exp_sign == 'f' ) { - buf = alloca(4096); - if (type & LEFT) { - type &= ~ZEROPAD; - } - - c = (type & ZEROPAD) ? L'0' : L' '; - sign = 0; - if (type & SIGN) { - if (__n < 0) { - sign = L'-'; - __n = fabs(__n); - size--; - } else if (type & PLUS) { - sign = L'+'; - size--; - } else if (type & SPACE) { - sign = L' '; - size--; - } - } - - frac = modf(__n,&intr); - - // # flags forces a . and prevents trucation of trailing zero's - - if ( precision > 0 ) { - //frac = modfl(__n,&intr); - i = precision-1; - while ( i >= 0 ) { - frac*=10.0L; - frac = modf(frac, &p); - buf[i] = (int)p + L'0'; - i--; - } - i = precision; - size -= precision; - - ro = 0; - if ( frac > 0.5 ) { - ro = 1; - } - - if ( precision >= 1 || type & SPECIAL) { - buf[i++] = '.'; - size--; - } - } - - if ( intr == 0.0 ) { - buf[i++] = L'0'; - size--; - } - else { - while ( intr > 0.0 ) { - p = intr; - intr/=10.0L; - modf(intr, &intr); - - p -= 10.0*intr; - - buf[i++] = (int)p + L'0'; - size--; - } - } - - j = 0; - while ( j < i && ro == 1 ) { - if ( buf[j] >= L'0' && buf[j] <= L'8' ) { - buf[j]++; - ro = 0; - } - else if ( buf[j] == L'9' ) { - buf[j] = L'0'; - } - j++; - } - if ( ro == 1 ) - buf[i++] = L'1'; - - buf[i] = 0; - - size -= precision; - if (!(type&(ZEROPAD+LEFT))) - while(size-->0) - { - if (putwc(L' ',f) == WEOF) - return -1; - done++; - } - if (sign) - { - if (putwc( sign,f) == WEOF) - return -1; - done++; - } - - if (!(type&(ZEROPAD+LEFT))) - while(size-->0) - { - if (putwc(L' ',f) == WEOF) - return -1; - done++; - } - if (type & SPECIAL) { - } - - if (!(type & LEFT)) - while (size-- > 0) - { - if (putwc(c,f) == WEOF) - return -1; - done++; - } - - tmp = buf; - if ( type & ZEROTRUNC && ((type & SPECIAL) != SPECIAL) ) { - j = 0; - while ( j < i && *tmp == L'0' ) { - tmp++; - i--; - } - if ( j < i && *tmp == L'.' ) { - tmp++; - i--; - } - } -// else -// while (i < precision--) -// putwc(L'0', f); - while (i-- > 0) - { - if (putwc(tmp[i],f) == WEOF) - return -1; - done++; - } - while (size-- > 0) - { - if (putwc(L' ', f) == WEOF) - return -1; - done++; - } - } - return done; -} - - - -static int string(FILE *f, const char* s, int len, int field_width, int precision, int flags) -{ - int i, done = 0; - if (s == NULL) - { - s = ""; - len = 6; - } - else - { - if (len == -1) - { - len = 0; - while ((unsigned int)len < (unsigned int)precision && s[len]) - len++; - } - else - { - if ((unsigned int)len > (unsigned int)precision) - len = precision; - } - } - if (!(flags & LEFT)) - while (len < field_width--) - { - if (putwc(L' ', f) == WEOF) - return -1; - done++; - } - for (i = 0; i < len; ++i) - { - if (putwc(*s++, f) == WEOF) - return -1; - done++; - } - while (len < field_width--) - { - if (putwc(L' ', f) == WEOF) - return -1; - done++; - } - return done; -} - -static int stringw(FILE *f, const wchar_t* sw, int len, int field_width, int precision, int flags) -{ - int i, done = 0; - if (sw == NULL) - { - sw = L""; - len = 6; - } - else - { - if (len == -1) - { - len = 0; - while ((unsigned int)len < (unsigned int)precision && sw[len]) - len++; - } - else - { - if ((unsigned int)len > (unsigned int)precision) - len = precision; - } - } - if (!(flags & LEFT)) - while (len < field_width--) - { - if (putwc(L' ', f) == WEOF) - return -1; - done++; - } - for (i = 0; i < len; ++i) - { - if (putwc(*sw++, f) == WEOF) - return -1; - done++; - } - while (len < field_width--) - { - if (putwc(L' ', f) == WEOF) - return -1; - done++; - } - return done; -} - -int __vfwprintf(FILE *f, const wchar_t *fmt, va_list args) -{ - int len = 0; - ULONGLONG num; - int base; - double _double; - const char *s; - const wchar_t* sw; - int result, done = 0; - - int flags; /* flags to number() */ - - int field_width; /* width of output field */ - int precision; /* min. # of digits for integers; max - number of chars for from string */ - int qualifier = 0; /* 'h', 'l', 'L' or 'I64' for integer fields */ - - for (; *fmt ; ++fmt) { - if (*fmt != L'%') { - if (putwc(*fmt,f) == WEOF) - return -1; - done++; - continue; - } - - /* process flags */ - flags = 0; - repeat: - ++fmt; /* this also skips first '%' */ - switch (*fmt) { - case L'-': flags |= LEFT; goto repeat; - case L'+': flags |= PLUS; goto repeat; - case L' ': flags |= SPACE; goto repeat; - case L'#': flags |= SPECIAL; goto repeat; - case L'0': flags |= ZEROPAD; goto repeat; - } - - /* get field width */ - field_width = -1; - if (isxdigit(*fmt)) - field_width = skip_wtoi(&fmt); - else if (*fmt == L'*') { - ++fmt; - /* it's the next argument */ - field_width = va_arg(args, int); - if (field_width < 0) { - field_width = -field_width; - flags |= LEFT; - } - } - - /* get the precision */ - precision = -1; - if (*fmt == L'.') { - ++fmt; - if (iswdigit(*fmt)) - precision = skip_wtoi(&fmt); - else if (*fmt == L'*') { - ++fmt; - /* it's the next argument */ - precision = va_arg(args, int); - } - if (precision < 0) - precision = 0; - } - - /* get the conversion qualifier */ - qualifier=0; - // %Z can be just stand alone or as size_t qualifier - if ( *fmt == 'Z' ) { - qualifier = *fmt; - switch ( *(fmt+1)) { - case L'o': - case L'b': - case L'X': - case L'x': - case L'd': - case L'i': - case L'u': - ++fmt; - break; - default: - break; - } - } else if (*fmt == L'h' || *fmt == L'l' || *fmt == L'L' || *fmt == L'w') { - qualifier = *fmt; - ++fmt; - } else if (*fmt == L'I' && *(fmt+1) == L'6' && *(fmt+2) == L'4') { - qualifier = *fmt; - fmt += 3; - } - - // go fine with ll instead of L - if ( *fmt == L'l' ) { - ++fmt; - qualifier = L'L'; - } - - /* default base */ - base = 10; - - switch (*fmt) { - case L'c': /* finished */ - if (!(flags & LEFT)) - while (--field_width > 0) - { - if (putwc(L' ', f) == WEOF) - return -1; - done++; - } - if (qualifier == L'h') - { - if (putwc((wchar_t) va_arg(args, int), f) == WEOF) - return -1; - } - else - { - if (putwc((wchar_t) va_arg(args, int), f) == WEOF) - return -1; - } - done++; - while (--field_width > 0) - { - if (putwc(L' ', f) == WEOF) - return -1; - done++; - } - continue; - - case L'C': /* finished */ - if (!(flags & LEFT)) - while (--field_width > 0) - { - if (putwc(L' ', f) == WEOF) - return -1; - done++; - } - if (qualifier == L'l' || qualifier == L'w') - { - if (putwc((unsigned char) va_arg(args, int), f) == WEOF) - return -1; - } - else - { - if (putwc((unsigned char) va_arg(args, int), f) == WEOF) - return -1; - } - done++; - while (--field_width > 0) - { - if (putwc(L' ', f) == WEOF) - return -1; - done++; - } - continue; - - case L's': /* finished */ - if (qualifier == L'h') { - /* print ascii string */ - s = va_arg(args, char *); - result = string(f, s, -1, field_width, precision, flags); - } else { - /* print unicode string */ - sw = va_arg(args, wchar_t *); - result = stringw(f, sw, -1, field_width, precision, flags); - } - if (result < 0) - return -1; - done += result; - continue; - - case L'S': - if (qualifier == L'l' || qualifier == L'w') { - /* print unicode string */ - sw = va_arg(args, wchar_t *); - result = stringw(f, sw, -1, field_width, precision, flags); - } else { - /* print ascii string */ - s = va_arg(args, char *); - result = string(f, s, -1, field_width, precision, flags); - } - if (result < 0) - return -1; - done += result; - continue; - - case L'Z': /* finished */ - if (qualifier == L'w') { - /* print counted unicode string */ - PUNICODE_STRING pus = va_arg(args, PUNICODE_STRING); - if ((pus == NULL) || (pus->Buffer)) { - sw = NULL; - len = -1; - } else { - sw = pus->Buffer; - } - result = stringw(f, sw, len, field_width, precision, flags); - } else { - /* print counted ascii string */ - PANSI_STRING pus = va_arg(args, PANSI_STRING); - if ((pus == NULL) || (pus->Buffer)) { - s = NULL; - len = -1; - } else { - s = pus->Buffer; - len = pus->Length; - } - result = string(f, s, len, field_width, precision, flags); - } - if (result < 0) - return -1; - done += result; - continue; - - case L'e': /* finished */ - case L'E': - case L'f': - case L'g': - case L'G': - _double = (double)va_arg(args, double); - - if ( _isnan(_double) ) { - sw = L"Nan"; - len = 3; - while ( len > 0 ) { - if (putwc(*sw++,f) == WEOF) - return -1; - done++; - len --; - } - } else if ( _isinf(_double) < 0 ) { - sw = L"-Inf"; - len = 4; - while ( len > 0 ) { - if (putwc(*sw++,f) == WEOF) - return -1; - done++; - len --; - } - } else if ( _isinf(_double) > 0 ) { - sw = L"+Inf"; - len = 4; - while ( len > 0 ) { - if (putwc(*sw++,f) == WEOF) - return -1; - done++; - len --; - } - } else { - if ( precision == -1 ) - precision = 6; - result = numberf(f,_double,*fmt,field_width,precision,flags); - if (result < 0) - return -1; - done += result; - } - continue; - - case L'p': - if (field_width == -1) { - field_width = 2*sizeof(void *); - flags |= ZEROPAD; - } - result = number(f, - (uintptr_t) va_arg(args, void *), 16, - field_width, precision, flags); - if (result < 0) - return -1; - done += result; - continue; - - case L'n': - if (qualifier == L'l') { - long * ip = va_arg(args, long *); - *ip = 0; - } else { - int * ip = va_arg(args, int *); - *ip = 0; - } - continue; - - /* integer number formats - set up the flags and "break" */ - case L'o': - base = 8; - break; - - case L'b': - base = 2; - break; - - case L'X': - flags |= LARGE; - case L'x': - base = 16; - break; - - case L'd': - case L'i': - flags |= SIGN; - case L'u': - break; - - default: - if (*fmt != L'%') - { - if (putwc(L'%', f) == WEOF) - return -1; - done++; - } - if (*fmt) - { - if (putwc(*fmt, f) == WEOF) - return -1; - done++; - } - else - --fmt; - continue; - } - - if (qualifier == L'I') - num = va_arg(args, ULONGLONG); - else if (qualifier == L'l') { - if (flags & SIGN) - num = va_arg(args, long); - else - num = va_arg(args, unsigned long); - } - else if (qualifier == L'h') { - if (flags & SIGN) - num = va_arg(args, int); - else - num = va_arg(args, unsigned int); - } - else if (flags & SIGN) - num = va_arg(args, int); - else - num = va_arg(args, unsigned int); - result = number(f, num, base, field_width, precision, flags); - if (result < 0) - return -1; - done += result; - } - //putwc(L'\0',f); - return done; -} - -/* EOF */ diff --git a/reactos/lib/sdk/crt/stdio/lnx_vsprintf.c b/reactos/lib/sdk/crt/stdio/lnx_vsprintf.c deleted file mode 100644 index 32fda2185ff..00000000000 --- a/reactos/lib/sdk/crt/stdio/lnx_vsprintf.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */ -#include -#include - -/* - * @implemented - */ -int -lnx__vstprintf(_TCHAR *str, const _TCHAR *fmt, va_list ap) -{ - FILE f = {0}; - int len; - - f._flag = _IOWRT|_IOSTRG|_IOBINARY; - f._ptr = (char*)str; - f._cnt = INT_MAX; - f._file = -1; - len = lnx_vftprintf(&f,fmt, ap); - *(_TCHAR*)f._ptr = 0; - return len; -} - - -/* - * @implemented - */ -int -lnx__vsntprintf(_TCHAR *str, size_t maxlen, const _TCHAR *fmt, va_list ap) -{ - FILE f = {0}; - int len; - - f._flag = _IOWRT|_IOSTRG|_IOBINARY; - f._ptr = (char*)str; - f._cnt = maxlen * sizeof(_TCHAR); - f._file = -1; - len = lnx_vftprintf(&f,fmt, ap); - // what if the buffer is full ?? - *(_TCHAR *)f._ptr = 0; - return len; -} diff --git a/reactos/lib/sdk/crt/stdio/lnx_vswprintf.c b/reactos/lib/sdk/crt/stdio/lnx_vswprintf.c deleted file mode 100644 index 184d8ee6615..00000000000 --- a/reactos/lib/sdk/crt/stdio/lnx_vswprintf.c +++ /dev/null @@ -1,4 +0,0 @@ -#define UNICODE -#define _UNICODE - -#include "lnx_vsprintf.c" diff --git a/reactos/lib/sdk/crt/stdlib/_exit.c b/reactos/lib/sdk/crt/stdlib/_exit.c index 3a5c2d3e8bb..a876fe222e6 100644 --- a/reactos/lib/sdk/crt/stdlib/_exit.c +++ b/reactos/lib/sdk/crt/stdlib/_exit.c @@ -1,6 +1,8 @@ #include #include +extern void _atexit_cleanup(void); + struct __atexit *__atexit_ptr = 0; /* @@ -18,6 +20,7 @@ void exit(int status) */ /* in case the program set it this way */ _setmode(0, O_TEXT); + _atexit_cleanup(); _exit(status); for(;;); } @@ -28,6 +31,7 @@ void exit(int status) */ void _exit(int _status) { + // FIXME: _exit and _c_exit should prevent atexit routines from being called during DLL unload ExitProcess(_status); for(;;); } @@ -37,6 +41,7 @@ void _exit(int _status) */ void _cexit( void ) { + _atexit_cleanup(); // flush } @@ -45,5 +50,6 @@ void _cexit( void ) */ void _c_exit( void ) { + // FIXME: _exit and _c_exit should prevent atexit routines from being called during DLL unload // reset interup vectors } diff --git a/reactos/lib/sdk/crt/string/atoi.c b/reactos/lib/sdk/crt/string/atoi.c index 74f3175565e..2fc1364dc83 100644 --- a/reactos/lib/sdk/crt/string/atoi.c +++ b/reactos/lib/sdk/crt/string/atoi.c @@ -8,5 +8,5 @@ int _ttoi(const _TCHAR *str) { - return (int)_tcstol(str, 0, 10); + return (int)_ttoi64(str); } diff --git a/reactos/lib/sdk/crt/string/atoi64.c b/reactos/lib/sdk/crt/string/atoi64.c index d97d359ee6f..c820dbaba42 100644 --- a/reactos/lib/sdk/crt/string/atoi64.c +++ b/reactos/lib/sdk/crt/string/atoi64.c @@ -20,6 +20,9 @@ _atoi64(const char *nptr) __int64 acc = 0; int neg = 0; + if (nptr == NULL) + return 0; + while(isspace((int)*s)) s++; if (*s == '-') diff --git a/reactos/lib/sdk/crt/string/atol.c b/reactos/lib/sdk/crt/string/atol.c index cc3fe76cd0e..9aa3af57d87 100644 --- a/reactos/lib/sdk/crt/string/atol.c +++ b/reactos/lib/sdk/crt/string/atol.c @@ -8,7 +8,7 @@ long _ttol(const _TCHAR *str) { - return _tcstol(str, 0, 10); + return (long)_ttoi64(str); } int _atoldbl(long double *value, const char *str) diff --git a/reactos/lib/sdk/crt/string/wtoi64.c b/reactos/lib/sdk/crt/string/wtoi64.c index 6e0f9dbdd64..b729f493a56 100644 --- a/reactos/lib/sdk/crt/string/wtoi64.c +++ b/reactos/lib/sdk/crt/string/wtoi64.c @@ -20,6 +20,9 @@ _wtoi64 (const wchar_t *nptr) __int64 value; int sign; + if (nptr == NULL) + return 0; + while (iswctype((int)*nptr, _SPACE)) ++nptr; diff --git a/reactos/lib/sdk/crt/string/wtol.c b/reactos/lib/sdk/crt/string/wtol.c index 9944956384b..a57015e9f7b 100644 --- a/reactos/lib/sdk/crt/string/wtol.c +++ b/reactos/lib/sdk/crt/string/wtol.c @@ -13,6 +13,9 @@ _wtol(const wchar_t *str) unsigned long RunningTotal = 0; char bMinus = 0; + if (str == NULL) + return 0; + while (iswctype(*str, _SPACE) ) { str++; } /* while */ diff --git a/reactos/media/doc/README.WINE b/reactos/media/doc/README.WINE index 288ee4b29d1..97774a15fb6 100644 --- a/reactos/media/doc/README.WINE +++ b/reactos/media/doc/README.WINE @@ -44,7 +44,7 @@ reactos/dll/win32/crypt32 # Synced to Wine-1_0-rc1 reactos/dll/win32/cryptdll # Autosync reactos/dll/win32/cryptnet # Autosync reactos/dll/win32/cryptui # Autosync -reactos/dll/win32/dbghelp # Synced to Wine-20080106 +reactos/dll/win32/dbghelp # Synced to Wine-20080802 reactos/dll/win32/dciman32 # Synced to Wine-1_0-rc2 reactos/dll/win32/gdiplus # Autosync reactos/dll/win32/hhctrl.ocx # Autosync @@ -94,6 +94,7 @@ reactos/dll/win32/shdocvw # Synced to Wine-0_9_5 reactos/dll/win32/shfolder # Autosync reactos/dll/win32/shlwapi # Autosync reactos/dll/win32/stdole2.tlb # Autosync +reactos/dll/win32/sxs # Autosync reactos/dll/win32/tapi32 # Autosync reactos/dll/win32/twain_32 # Out of sync reactos/dll/win32/urlmon # Autosync diff --git a/reactos/media/fonts/fonts.rbuild b/reactos/media/fonts/fonts.rbuild index 534c142ce77..ccc9d2c7e0a 100644 --- a/reactos/media/fonts/fonts.rbuild +++ b/reactos/media/fonts/fonts.rbuild @@ -1,57 +1,57 @@ - DejaVuSans.ttf - DejaVuSans-Bold.ttf - DejaVuSans-BoldOblique.ttf - DejaVuSansCondensed.ttf - DejaVuSansCondensed-Bold.ttf - DejaVuSansCondensed-BoldOblique.ttf - DejaVuSansCondensed-Oblique.ttf - DejaVuSans-ExtraLight.ttf - DejaVuSansMono.ttf - DejaVuSansMono-Bold.ttf - DejaVuSansMono-BoldOblique.ttf - DejaVuSansMono-Oblique.ttf - DejaVuSans-Oblique.ttf - DejaVuSerif.ttf - DejaVuSerif-Bold.ttf - DejaVuSerif-BoldItalic.ttf - DejaVuSerifCondensed.ttf - DejaVuSerifCondensed-Bold.ttf - DejaVuSerifCondensed-BoldItalic.ttf - DejaVuSerifCondensed-Italic.ttf - DejaVuSerif-Italic.ttf - c0419bt_.ttf - c0582bt_.ttf - c0583bt_.ttf - c0611bt_.ttf - c0632bt_.ttf - c0633bt_.ttf - c0648bt_.ttf - c0649bt_.ttf - cour.ttf - courb.ttf - courbi.ttf - helb____.ttf - LiberationMono-Bold.ttf - LiberationMono-BoldItalic.ttf - LiberationMono-Italic.ttf - LiberationMono-Regular.ttf - LiberationSans-Bold.ttf - LiberationSans-BoldItalic.ttf - LiberationSans-Italic.ttf - LiberationSans-Regular.ttf - LiberationSerif-Bold.ttf - LiberationSerif-BoldItalic.ttf - LiberationSerif-Italic.ttf - LiberationSerif-Regular.ttf - Marlett.ttf - tahoma.ttf - tahomabd.ttf - timr____.ttf - UTB_____.ttf - UTBI____.ttf - UTI_____.ttf - UTRG____.ttf + DejaVuSans.ttf + DejaVuSans-Bold.ttf + DejaVuSans-BoldOblique.ttf + DejaVuSansCondensed.ttf + DejaVuSansCondensed-Bold.ttf + DejaVuSansCondensed-BoldOblique.ttf + DejaVuSansCondensed-Oblique.ttf + DejaVuSans-ExtraLight.ttf + DejaVuSansMono.ttf + DejaVuSansMono-Bold.ttf + DejaVuSansMono-BoldOblique.ttf + DejaVuSansMono-Oblique.ttf + DejaVuSans-Oblique.ttf + DejaVuSerif.ttf + DejaVuSerif-Bold.ttf + DejaVuSerif-BoldItalic.ttf + DejaVuSerifCondensed.ttf + DejaVuSerifCondensed-Bold.ttf + DejaVuSerifCondensed-BoldItalic.ttf + DejaVuSerifCondensed-Italic.ttf + DejaVuSerif-Italic.ttf + c0419bt_.ttf + c0582bt_.ttf + c0583bt_.ttf + c0611bt_.ttf + c0632bt_.ttf + c0633bt_.ttf + c0648bt_.ttf + c0649bt_.ttf + cour.ttf + courb.ttf + courbi.ttf + helb____.ttf + LiberationMono-Bold.ttf + LiberationMono-BoldItalic.ttf + LiberationMono-Italic.ttf + LiberationMono-Regular.ttf + LiberationSans-Bold.ttf + LiberationSans-BoldItalic.ttf + LiberationSans-Italic.ttf + LiberationSans-Regular.ttf + LiberationSerif-Bold.ttf + LiberationSerif-BoldItalic.ttf + LiberationSerif-Italic.ttf + LiberationSerif-Regular.ttf + Marlett.ttf + tahoma.ttf + tahomabd.ttf + timr____.ttf + UTB_____.ttf + UTBI____.ttf + UTI_____.ttf + UTRG____.ttf diff --git a/reactos/media/inf/NET_NIC.inf b/reactos/media/inf/NET_NIC.inf index bb2c02149a1..7721fc6c304 100644 Binary files a/reactos/media/inf/NET_NIC.inf and b/reactos/media/inf/NET_NIC.inf differ diff --git a/reactos/media/inf/acpi.inf b/reactos/media/inf/acpi.inf index a299bd71217..c911558b172 100644 Binary files a/reactos/media/inf/acpi.inf and b/reactos/media/inf/acpi.inf differ diff --git a/reactos/media/inf/cdrom.inf b/reactos/media/inf/cdrom.inf index 4d578a04a2e..16bbcf5a4ec 100644 Binary files a/reactos/media/inf/cdrom.inf and b/reactos/media/inf/cdrom.inf differ diff --git a/reactos/media/inf/cpu.inf b/reactos/media/inf/cpu.inf index cac82b6224d..0d44ab23c02 100644 Binary files a/reactos/media/inf/cpu.inf and b/reactos/media/inf/cpu.inf differ diff --git a/reactos/media/inf/display.inf b/reactos/media/inf/display.inf index 3b8d18532fa..5a4f08aa890 100644 Binary files a/reactos/media/inf/display.inf and b/reactos/media/inf/display.inf differ diff --git a/reactos/media/inf/fdc.inf b/reactos/media/inf/fdc.inf index 22625e6548d..a9a5b7909b4 100644 Binary files a/reactos/media/inf/fdc.inf and b/reactos/media/inf/fdc.inf differ diff --git a/reactos/media/inf/hdc.inf b/reactos/media/inf/hdc.inf index 14a181509b6..03d7dc987ea 100644 Binary files a/reactos/media/inf/hdc.inf and b/reactos/media/inf/hdc.inf differ diff --git a/reactos/media/inf/keyboard.inf b/reactos/media/inf/keyboard.inf index 82333a2f8cb..00826d8e10a 100644 Binary files a/reactos/media/inf/keyboard.inf and b/reactos/media/inf/keyboard.inf differ diff --git a/reactos/media/inf/machine.inf b/reactos/media/inf/machine.inf index a4058b49fe6..c9692a04e11 100644 Binary files a/reactos/media/inf/machine.inf and b/reactos/media/inf/machine.inf differ diff --git a/reactos/media/inf/msmouse.inf b/reactos/media/inf/msmouse.inf index e5d06d00a93..4e5ed0a8855 100644 Binary files a/reactos/media/inf/msmouse.inf and b/reactos/media/inf/msmouse.inf differ diff --git a/reactos/media/inf/netisa.inf b/reactos/media/inf/netisa.inf index 228b96e5988..4fc2d85727c 100644 Binary files a/reactos/media/inf/netisa.inf and b/reactos/media/inf/netisa.inf differ diff --git a/reactos/media/inf/ports.inf b/reactos/media/inf/ports.inf index c22f0b05f3b..6504980c5f3 100644 Binary files a/reactos/media/inf/ports.inf and b/reactos/media/inf/ports.inf differ diff --git a/reactos/media/inf/scsi.inf b/reactos/media/inf/scsi.inf index 790863c4186..3c02f161801 100644 Binary files a/reactos/media/inf/scsi.inf and b/reactos/media/inf/scsi.inf differ diff --git a/reactos/media/inf/usb.inf b/reactos/media/inf/usb.inf index b59b8f29831..4418f00db03 100644 Binary files a/reactos/media/inf/usb.inf and b/reactos/media/inf/usb.inf differ diff --git a/reactos/media/inf/usbport.inf b/reactos/media/inf/usbport.inf index 298c58dfd0a..b967fd17e89 100644 Binary files a/reactos/media/inf/usbport.inf and b/reactos/media/inf/usbport.inf differ diff --git a/reactos/media/inf/usbstor.inf b/reactos/media/inf/usbstor.inf index 2ed05f172c5..011b6cc6ee3 100644 Binary files a/reactos/media/inf/usbstor.inf and b/reactos/media/inf/usbstor.inf differ diff --git a/reactos/ntoskrnl/amd64stubs.c b/reactos/ntoskrnl/amd64stubs.c index 0d0263fad8b..603d082b802 100644 --- a/reactos/ntoskrnl/amd64stubs.c +++ b/reactos/ntoskrnl/amd64stubs.c @@ -1,4 +1,5 @@ + #define STUB(x) void x() {} STUB(KdpEnableSafeMem) @@ -129,30 +130,25 @@ STUB(FsRtlUninitializeBaseMcb) STUB(HalDispatchTable) STUB(HeadlessDispatch) STUB(InitializeSListHead) -STUB(IoEnumerateRegisteredFiltersList) STUB(IoFileObjectType) STUB(IoForwardAndCatchIrp) -STUB(IoGetPagingIoPriority) STUB(IoIs32bitProcess) STUB(IoTranslateBusAddress) STUB(IoWMIDeviceObjectToProviderId) STUB(KdDebuggerEnabled) STUB(KdDebuggerNotPresent) -STUB(KdRefreshDebuggerNotPresent) -STUB(KeAcquireInStackQueuedSpinLockForDpc) STUB(KeAcquireQueuedSpinLock) +STUB(_imp__KeAcquireQueuedSpinLock) +STUB(_imp__KeReleaseQueuedSpinLock) STUB(KeAcquireQueuedSpinLockRaiseToSynch) -STUB(KeAcquireSpinLockForDpc) STUB(KeAcquireSpinLockRaiseToDpc) STUB(KeAcquireSpinLockRaiseToSynch) -STUB(KeDeregisterNmiCallback) STUB(KeEnterCriticalRegion) STUB(KeEnterGuardedRegion) STUB(KeExpandKernelStackAndCallout) STUB(KeFlushEntireTb) STUB(KeGenericCallDpc) STUB(KeGetRecommendedSharedDataAlignment) -STUB(KeInitializeCrashDumpHeader) STUB(KeInvalidateAllCaches) STUB(KeIsWaitListEmpty) STUB(KeLastBranchMSR) @@ -162,11 +158,8 @@ STUB(KeQueryActiveProcessors) STUB(KeQueryMultiThreadProcessorSet) STUB(KeQueryPrcbAddress) STUB(KeReadStateMutex) -STUB(KeRegisterNmiCallback) -STUB(KeReleaseInStackQueuedSpinLockForDpc) STUB(KeReleaseQueuedSpinLock) STUB(KeReleaseSpinLock) -STUB(KeReleaseSpinLockForDpc) STUB(KeRestoreFloatingPointState) STUB(KeSaveFloatingPointState) STUB(KeSaveStateForHibernate) @@ -174,7 +167,6 @@ STUB(KeSetDmaIoCoherency) STUB(KeSignalCallDpcDone) STUB(KeSignalCallDpcSynchronize) STUB(KeSynchronizeExecution) -STUB(KeTestSpinLock) STUB(KeTryToAcquireQueuedSpinLock) STUB(KeTryToAcquireQueuedSpinLockRaiseToSynch) STUB(KeUpdateRunTime) @@ -184,7 +176,6 @@ STUB(KeWaitForMutexObject) STUB(KfRaiseIrql) STUB(KiBugCheckData) STUB(KiCpuId) -STUB(MmAllocatePagesForMdlEx) STUB(MmCommitSessionMappedView) STUB(MmCreateMirror) STUB(MmIsIoSpaceActive) diff --git a/reactos/ntoskrnl/config/cmsysini.c b/reactos/ntoskrnl/config/cmsysini.c index 9d1540ce86e..d96919bfa45 100644 --- a/reactos/ntoskrnl/config/cmsysini.c +++ b/reactos/ntoskrnl/config/cmsysini.c @@ -120,7 +120,7 @@ CmpQueryKeyName(IN PVOID ObjectBody, IN KPROCESSOR_MODE PreviousMode) { DPRINT1("CmpQueryKeyName() called\n"); - while (TRUE); + ASSERT(FALSE); return STATUS_SUCCESS; } diff --git a/reactos/ntoskrnl/config/cmvalche.c b/reactos/ntoskrnl/config/cmvalche.c index 038c70a1339..52297a3c582 100644 --- a/reactos/ntoskrnl/config/cmvalche.c +++ b/reactos/ntoskrnl/config/cmvalche.c @@ -55,7 +55,7 @@ CmpGetValueListFromCache(IN PCM_KEY_CONTROL_BLOCK Kcb, *ValueListToRelease = HCELL_NIL; *IndexIsCached = FALSE; - /* Get the hive and value ceche */ + /* Get the hive and value cache */ Hive = Kcb->KeyHive; ChildList = &Kcb->ValueCache; KeyNode = (PCM_KEY_NODE)HvGetCell(Hive, Kcb->KeyCell); diff --git a/reactos/ntoskrnl/config/ntapi.c b/reactos/ntoskrnl/config/ntapi.c index f177ececa49..62a2232d9a1 100644 --- a/reactos/ntoskrnl/config/ntapi.c +++ b/reactos/ntoskrnl/config/ntapi.c @@ -930,7 +930,7 @@ NtQueryMultipleValueKey(IN HANDLE KeyHandle, NTSTATUS NTAPI NtQueryOpenSubKeys(IN POBJECT_ATTRIBUTES TargetKey, - IN ULONG HandleCount) + OUT PULONG HandleCount) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; diff --git a/reactos/ntoskrnl/ex/fastinterlck.c b/reactos/ntoskrnl/ex/fastinterlck.c index 18fd8545cbb..cd3d25d4bd5 100644 --- a/reactos/ntoskrnl/ex/fastinterlck.c +++ b/reactos/ntoskrnl/ex/fastinterlck.c @@ -74,7 +74,8 @@ ExInterlockedFlushSList(IN PSLIST_HEADER ListHead) PSLIST_ENTRY FASTCALL ExInterlockedPushEntrySList(IN PSLIST_HEADER ListHead, - IN PSLIST_ENTRY ListEntry) + IN PSLIST_ENTRY ListEntry, + IN PKSPIN_LOCK Lock) { return InterlockedPushEntrySList(ListHead, ListEntry); } @@ -88,7 +89,7 @@ ExInterlockedPopEntrySList(IN PSLIST_HEADER ListHead, } ULONG -NTAPI +FASTCALL ExfInterlockedAddUlong(IN PULONG Addend, IN ULONG Increment, PKSPIN_LOCK Lock) diff --git a/reactos/ntoskrnl/ex/init.c b/reactos/ntoskrnl/ex/init.c index d27022cc3b6..59c103cbeb2 100644 --- a/reactos/ntoskrnl/ex/init.c +++ b/reactos/ntoskrnl/ex/init.c @@ -869,10 +869,10 @@ ExpInitializeExecutive(IN ULONG Cpu, if (LoaderBlock->SetupLdrBlock) { /* Check if this is text-mode setup */ - if (LoaderBlock->SetupLdrBlock->Flags & 1) ExpInTextModeSetup = TRUE; + if (LoaderBlock->SetupLdrBlock->Flags & SETUPLDR_TEXT_MODE) ExpInTextModeSetup = TRUE; /* Check if this is network boot */ - if (LoaderBlock->SetupLdrBlock->Flags & 2) + if (LoaderBlock->SetupLdrBlock->Flags & SETUPLDR_REMOTE_BOOT) { /* Set variable */ IoRemoteBootClient = TRUE; diff --git a/reactos/ntoskrnl/include/internal/arm/mm.h b/reactos/ntoskrnl/include/internal/arm/mm.h index 83b553fe6a5..5d24793cb16 100644 --- a/reactos/ntoskrnl/include/internal/arm/mm.h +++ b/reactos/ntoskrnl/include/internal/arm/mm.h @@ -166,4 +166,7 @@ typedef enum _ARM_DOMAIN #define PDE_BASE 0xC1000000 #define HYPER_SPACE 0xC1100000 +struct _EPROCESS; +PULONG MmGetPageDirectory(VOID); + #endif diff --git a/reactos/ntoskrnl/include/internal/i386/mm.h b/reactos/ntoskrnl/include/internal/i386/mm.h index 44867629e4b..ce83e73c497 100644 --- a/reactos/ntoskrnl/include/internal/i386/mm.h +++ b/reactos/ntoskrnl/include/internal/i386/mm.h @@ -5,6 +5,8 @@ #ifndef __NTOSKRNL_INCLUDE_INTERNAL_I386_MM_H #define __NTOSKRNL_INCLUDE_INTERNAL_I386_MM_H +#ifdef _M_IX86 + struct _EPROCESS; PULONG MmGetPageDirectory(VOID); @@ -28,4 +30,6 @@ PULONG MmGetPageDirectory(VOID); /* Easy accessing PFN in PTE */ #define PFN_FROM_PTE(v) ((v)->u.Hard.PageFrameNumber) +#endif + #endif /* __NTOSKRNL_INCLUDE_INTERNAL_I386_MM_H */ diff --git a/reactos/ntoskrnl/include/internal/ke.h b/reactos/ntoskrnl/include/internal/ke.h index 302417e1051..dfe1f0b46d5 100644 --- a/reactos/ntoskrnl/include/internal/ke.h +++ b/reactos/ntoskrnl/include/internal/ke.h @@ -537,7 +537,7 @@ KeInitializeProcess( struct _KPROCESS *Process, KPRIORITY Priority, KAFFINITY Affinity, - PLARGE_INTEGER DirectoryTableBase, + PULONG DirectoryTableBase, IN BOOLEAN Enable ); diff --git a/reactos/ntoskrnl/include/internal/mm.h b/reactos/ntoskrnl/include/internal/mm.h index 6e252b2670f..7073011d33d 100644 --- a/reactos/ntoskrnl/include/internal/mm.h +++ b/reactos/ntoskrnl/include/internal/mm.h @@ -1009,6 +1009,22 @@ ULONG NTAPI MmGetLockCountPage(PFN_TYPE Page); +FORCEINLINE +KIRQL +NTAPI +MmAcquirePageListLock() +{ + return KeAcquireQueuedSpinLock(LockQueuePfnLock); +} + +FORCEINLINE +VOID +NTAPI +MmReleasePageListLock(KIRQL oldIrql) +{ + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); +} + VOID NTAPI MmInitializePageList( @@ -1259,14 +1275,14 @@ NTAPI MmCreateProcessAddressSpace( IN ULONG MinWs, IN PEPROCESS Dest, - IN PLARGE_INTEGER DirectoryTableBase + IN PULONG_PTR DirectoryTableBase ); NTSTATUS NTAPI MmInitializeHandBuiltProcess( IN PEPROCESS Process, - IN PLARGE_INTEGER DirectoryTableBase + IN PULONG_PTR DirectoryTableBase ); @@ -1536,16 +1552,12 @@ MmCheckSystemImage( IN BOOLEAN PurgeSection ); -FORCEINLINE +/* ReactOS Mm Hack */ VOID -NTAPI -MiSyncThreadProcessViews(IN PVOID Process, - IN PVOID Address, - IN ULONG Size) -{ - MmUpdatePageDir((PEPROCESS)Process, Address, Size); -} - +FASTCALL +MiSyncThreadProcessViews( + IN PKTHREAD NextThread +); extern PMM_AVL_TABLE MmKernelAddressSpace; diff --git a/reactos/ntoskrnl/include/internal/ntoskrnl.h b/reactos/ntoskrnl/include/internal/ntoskrnl.h index f1e26b22236..7a1742fb93e 100644 --- a/reactos/ntoskrnl/include/internal/ntoskrnl.h +++ b/reactos/ntoskrnl/include/internal/ntoskrnl.h @@ -28,11 +28,15 @@ // We are very lazy on ARM -- we just import intrinsics // Question: Why wasn't this done for x86 too? (see fastintrlck.asm) // -#define InterlockedDecrement _InterlockedDecrement -#define InterlockedIncrement _InterlockedIncrement -#define InterlockedCompareExchange _InterlockedCompareExchange -#define InterlockedExchange _InterlockedExchange -#define InterlockedExchangeAdd _InterlockedExchangeAdd +#define InterlockedDecrement _InterlockedDecrement +#define InterlockedDecrement16 _InterlockedDecrement16 +#define InterlockedIncrement _InterlockedIncrement +#define InterlockedIncrement16 _InterlockedIncrement16 +#define InterlockedCompareExchange _InterlockedCompareExchange +#define InterlockedCompareExchange16 _InterlockedCompareExchange16 +#define InterlockedCompareExchange64 _InterlockedCompareExchange64 +#define InterlockedExchange _InterlockedExchange +#define InterlockedExchangeAdd _InterlockedExchangeAdd #include "ke.h" #ifdef _M_AMD64 diff --git a/reactos/ntoskrnl/io/iomgr/iofunc.c b/reactos/ntoskrnl/io/iomgr/iofunc.c index cc81b783068..e210a183fb5 100644 --- a/reactos/ntoskrnl/io/iomgr/iofunc.c +++ b/reactos/ntoskrnl/io/iomgr/iofunc.c @@ -3355,7 +3355,7 @@ NtSetVolumeInformationFile(IN HANDLE FileHandle, Status = IopPerformSynchronousRequest(DeviceObject, Irp, FileObject, - TRUE, + FALSE, PreviousMode, !LocalEvent, IopOtherTransfer); diff --git a/reactos/ntoskrnl/io/iomgr/irp.c b/reactos/ntoskrnl/io/iomgr/irp.c index f4f7ea4a3de..4b6842d84d8 100644 --- a/reactos/ntoskrnl/io/iomgr/irp.c +++ b/reactos/ntoskrnl/io/iomgr/irp.c @@ -525,6 +525,9 @@ IoAllocateIrp(IN CCHAR StackSize, PNPAGED_LOOKASIDE_LIST List = NULL; PP_NPAGED_LOOKASIDE_NUMBER ListType = LookasideSmallIrpList; + /* Set Charge Quota Flag */ + if (ChargeQuota) Flags |= IRP_QUOTA_CHARGED; + /* Figure out which Lookaside List to use */ if ((StackSize <= 8) && (ChargeQuota == FALSE)) { @@ -586,11 +589,11 @@ IoAllocateIrp(IN CCHAR StackSize, else { /* We have an IRP from Lookaside */ - Flags |= IRP_LOOKASIDE_ALLOCATION; - } + if (ChargeQuota) Flags |= IRP_LOOKASIDE_ALLOCATION; - /* Set Flag */ - if (ChargeQuota) Flags |= IRP_QUOTA_CHARGED; + /* In this case there is no charge quota */ + Flags &= ~IRP_QUOTA_CHARGED; + } /* Now Initialize it */ IoInitializeIrp(Irp, Size, StackSize); @@ -682,31 +685,24 @@ IoBuildAsynchronousFsdRequest(IN ULONG MajorFunction, return NULL; } - if (KeGetCurrentIrql() >= DISPATCH_LEVEL) + /* Probe and Lock */ + _SEH_TRY { - MmBuildMdlForNonPagedPool(Irp->MdlAddress); + /* Do the probe */ + MmProbeAndLockPages(Irp->MdlAddress, + KernelMode, + MajorFunction == IRP_MJ_READ ? + IoWriteAccess : IoReadAccess); } - else + _SEH_HANDLE { - /* Probe and Lock */ - _SEH_TRY - { - /* Do the probe */ - MmProbeAndLockPages(Irp->MdlAddress, - KernelMode, - MajorFunction == IRP_MJ_READ ? - IoWriteAccess : IoReadAccess); - } - _SEH_HANDLE - { - /* Free the IRP and its MDL */ - IoFreeMdl(Irp->MdlAddress); - IoFreeIrp(Irp); - Irp = NULL; - } - _SEH_END; + /* Free the IRP and its MDL */ + IoFreeMdl(Irp->MdlAddress); + IoFreeIrp(Irp); + Irp = NULL; } - + _SEH_END; + /* This is how we know if we failed during the probe */ if (!Irp) return NULL; } @@ -1538,6 +1534,19 @@ IoFreeIrp(IN PIRP Irp) } } +/* + * @unimplemented + */ +IO_PAGING_PRIORITY +NTAPI +IoGetPagingIoPriority(IN PIRP Irp) +{ + UNIMPLEMENTED; + + /* Lie and say this isn't a paging IRP -- FIXME! */ + return IoPagingPriorityInvalid; +} + /* * @implemented */ diff --git a/reactos/ntoskrnl/io/iomgr/volume.c b/reactos/ntoskrnl/io/iomgr/volume.c index 01e940d5ae8..14adb252c10 100644 --- a/reactos/ntoskrnl/io/iomgr/volume.c +++ b/reactos/ntoskrnl/io/iomgr/volume.c @@ -645,6 +645,19 @@ IopMountVolume(IN PDEVICE_OBJECT DeviceObject, /* PUBLIC FUNCTIONS **********************************************************/ +/* + * @unimplemented + */ +NTSTATUS +NTAPI +IoEnumerateRegisteredFiltersList(IN PDRIVER_OBJECT *DriverObjectList, + IN ULONG DriverObjectListSize, + OUT PULONG ActualNumberDriverObjects) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + /* * @implemented */ diff --git a/reactos/ntoskrnl/kd/kdinit.c b/reactos/ntoskrnl/kd/kdinit.c index dfbb09f349d..6746593bb29 100644 --- a/reactos/ntoskrnl/kd/kdinit.c +++ b/reactos/ntoskrnl/kd/kdinit.c @@ -258,7 +258,11 @@ KdInitSystem(ULONG BootPhase, return TRUE; } else - KdpEnableSafeMem(); + { +#ifdef _M_IX86 + KdpEnableSafeMem(); +#endif + } /* Call the Initialization Routines of the Registered Providers */ KdpCallInitRoutine(BootPhase); diff --git a/reactos/ntoskrnl/kd/kdmain.c b/reactos/ntoskrnl/kd/kdmain.c index 22836886792..eacf3ef8e7d 100644 --- a/reactos/ntoskrnl/kd/kdmain.c +++ b/reactos/ntoskrnl/kd/kdmain.c @@ -207,6 +207,19 @@ KdpCallGdb(IN PKTRAP_FRAME TrapFrame, /* PUBLIC FUNCTIONS *********************************************************/ +/* + * @implemented + */ +BOOLEAN +NTAPI +KdRefreshDebuggerNotPresent(VOID) +{ + UNIMPLEMENTED; + + /* Just return whatever was set previously -- FIXME! */ + return KdDebuggerNotPresent; +} + /* * @implemented */ diff --git a/reactos/ntoskrnl/kd64/kdapi.c b/reactos/ntoskrnl/kd64/kdapi.c index e8854d64546..f06250838c7 100644 --- a/reactos/ntoskrnl/kd64/kdapi.c +++ b/reactos/ntoskrnl/kd64/kdapi.c @@ -1300,6 +1300,17 @@ KdDisableDebugger(VOID) return STATUS_SUCCESS; } +/* + * @unimplemented + */ +BOOLEAN +NTAPI +KdRefreshDebuggerNotPresent(VOID) +{ + /* HACK */ + return KdDebuggerNotPresent; +} + NTSTATUS NTAPI NtQueryDebugFilterState(ULONG ComponentId, diff --git a/reactos/ntoskrnl/kdbg/kdb.c b/reactos/ntoskrnl/kdbg/kdb.c index a4040563e10..33d803440b1 100644 --- a/reactos/ntoskrnl/kdbg/kdb.c +++ b/reactos/ntoskrnl/kdbg/kdb.c @@ -1205,9 +1205,9 @@ KdbpInternalEnter() Thread->Tcb.StackLimit = (ULONG_PTR)KdbStack; Thread->Tcb.KernelStack = (char*)KdbStack + KDB_STACK_SIZE; - /*KdbpPrint("Switching to KDB stack 0x%08x-0x%08x\n", Thread->Tcb.StackLimit, Thread->Tcb.StackBase);*/ + /*KdbpPrint("Switching to KDB stack 0x%08x-0x%08x (Current Stack is 0x%08x)\n", Thread->Tcb.StackLimit, Thread->Tcb.StackBase, Esp);*/ - KdbpStackSwitchAndCall(Thread->Tcb.KernelStack, KdbpCallMainLoop); + KdbpStackSwitchAndCall(KdbStack + KDB_STACK_SIZE - sizeof(ULONG), KdbpCallMainLoop); Thread->Tcb.InitialStack = SavedInitialStack; Thread->Tcb.StackBase = SavedStackBase; @@ -1332,7 +1332,7 @@ KdbEnterDebuggerException( if (!NT_SUCCESS(KdbpOverwriteInstruction(KdbCurrentProcess, BreakPoint->Address, BreakPoint->Data.SavedInstruction, NULL))) { - DbgPrint("Couldn't restore original instruction after INT3! Cannot continue execution.\n"); + KdbpPrint("Couldn't restore original instruction after INT3! Cannot continue execution.\n"); KEBUGCHECK(0); } } @@ -1363,7 +1363,7 @@ KdbEnterDebuggerException( if ((KdbSingleStepOver && !KdbpStepOverInstruction(TrapFrame->Eip)) || (!KdbSingleStepOver && !KdbpStepIntoInstruction(TrapFrame->Eip))) { - TrapFrame->EFlags |= X86_EFLAGS_TF; + Context->EFlags |= X86_EFLAGS_TF; } goto continue_execution; /* return */ } @@ -1379,7 +1379,7 @@ KdbEnterDebuggerException( BreakPoint->Type == KdbBreakPointTemporary) { ASSERT(ExceptionCode == STATUS_BREAKPOINT); - TrapFrame->EFlags |= X86_EFLAGS_TF; + Context->EFlags |= X86_EFLAGS_TF; KdbBreakPointToReenable = BreakPoint; } @@ -1412,12 +1412,12 @@ KdbEnterDebuggerException( if (BreakPoint->Type == KdbBreakPointSoftware) { - DbgPrint("Entered debugger on breakpoint #%d: EXEC 0x%04x:0x%08x\n", + KdbpPrint("Entered debugger on breakpoint #%d: EXEC 0x%04x:0x%08x\n", KdbLastBreakPointNr, TrapFrame->SegCs & 0xffff, TrapFrame->Eip); } else if (BreakPoint->Type == KdbBreakPointHardware) { - DbgPrint("Entered debugger on breakpoint #%d: %s 0x%08x\n", + KdbpPrint("Entered debugger on breakpoint #%d: %s 0x%08x\n", KdbLastBreakPointNr, (BreakPoint->Data.Hw.AccessType == KdbAccessRead) ? "READ" : ((BreakPoint->Data.Hw.AccessType == KdbAccessWrite) ? "WRITE" : @@ -1446,36 +1446,38 @@ KdbEnterDebuggerException( if (!NT_SUCCESS(KdbpOverwriteInstruction(KdbCurrentProcess, BreakPoint->Address, 0xCC, &BreakPoint->Data.SavedInstruction))) { - DbgPrint("Warning: Couldn't reenable breakpoint %d\n", + KdbpPrint("Warning: Couldn't reenable breakpoint %d\n", BreakPoint - KdbBreakPoints); } /* Unset TF if we are no longer single stepping. */ if (KdbNumSingleSteps == 0) - TrapFrame->EFlags &= ~X86_EFLAGS_TF; + Context->EFlags &= ~X86_EFLAGS_TF; goto continue_execution; /* return */ } /* Check if we expect a single step */ if ((TrapFrame->Dr6 & 0xf) == 0 && KdbNumSingleSteps > 0) { - /*ASSERT((TrapFrame->Eflags & X86_EFLAGS_TF) != 0);*/ + /*ASSERT((Context->Eflags & X86_EFLAGS_TF) != 0);*/ if (--KdbNumSingleSteps > 0) { if ((KdbSingleStepOver && KdbpStepOverInstruction(TrapFrame->Eip)) || (!KdbSingleStepOver && KdbpStepIntoInstruction(TrapFrame->Eip))) { - TrapFrame->EFlags &= ~X86_EFLAGS_TF; + Context->EFlags &= ~X86_EFLAGS_TF; } else { - TrapFrame->EFlags |= X86_EFLAGS_TF; + Context->EFlags |= X86_EFLAGS_TF; } - goto continue_execution; /* return */ + goto continue_execution; /* return */ } - - TrapFrame->EFlags &= ~X86_EFLAGS_TF; - KdbEnteredOnSingleStep = TRUE; + else + { + Context->EFlags &= ~X86_EFLAGS_TF; + KdbEnteredOnSingleStep = TRUE; + } } else { @@ -1483,7 +1485,7 @@ KdbEnterDebuggerException( { return kdHandleException; } - DbgPrint("Entered debugger on unexpected debug trap!\n"); + KdbpPrint("Entered debugger on unexpected debug trap!\n"); } } else if (ExceptionCode == STATUS_BREAKPOINT) @@ -1498,7 +1500,7 @@ KdbEnterDebuggerException( return kdHandleException; } - DbgPrint("Entered debugger on embedded INT3 at 0x%04x:0x%08x.\n", + KdbpPrint("Entered debugger on embedded INT3 at 0x%04x:0x%08x.\n", TrapFrame->SegCs & 0xffff, TrapFrame->Eip - 1); } else @@ -1512,7 +1514,7 @@ KdbEnterDebuggerException( return ContinueType; } - DbgPrint("Entered debugger on %s-chance exception (Exception Code: 0x%x) (%s)\n", + KdbpPrint("Entered debugger on %s-chance exception (Exception Code: 0x%x) (%s)\n", FirstChance ? "first" : "last", ExceptionCode, ExceptionString); if (ExceptionCode == STATUS_ACCESS_VIOLATION && ExceptionRecord != NULL && ExceptionRecord->NumberParameters != 0) @@ -1530,15 +1532,15 @@ KdbEnterDebuggerException( #endif Err = TrapFrame->ErrCode; - DbgPrint("Memory at 0x%p could not be %s: ", TrapCr2, (Err & (1 << 1)) ? "written" : "read"); + KdbpPrint("Memory at 0x%p could not be %s: ", TrapCr2, (Err & (1 << 1)) ? "written" : "read"); if ((Err & (1 << 0)) == 0) - DbgPrint("Page not present.\n"); + KdbpPrint("Page not present.\n"); else { if ((Err & (1 << 3)) != 0) - DbgPrint("Reserved bits in page directory set.\n"); + KdbpPrint("Reserved bits in page directory set.\n"); else - DbgPrint("Page protection violation.\n"); + KdbpPrint("Page protection violation.\n"); } } } @@ -1579,7 +1581,7 @@ KdbEnterDebuggerException( } else { - KdbCurrentTrapFrame->Tf.EFlags |= X86_EFLAGS_TF; + Context->EFlags |= X86_EFLAGS_TF; } } @@ -1603,7 +1605,7 @@ KdbEnterDebuggerException( continue_execution: /* Clear debug status */ - if (ExceptionCode == STATUS_SINGLE_STEP || ExceptionCode == STATUS_BREAKPOINT) /* FIXME: Why clear DR6 on INT3? */ + if (ExceptionCode == STATUS_BREAKPOINT) /* FIXME: Why clear DR6 on INT3? */ { /* Set the RF flag so we don't trigger the same breakpoint again. */ if (Resume) diff --git a/reactos/ntoskrnl/kdbg/kdb_cli.c b/reactos/ntoskrnl/kdbg/kdb_cli.c index 6fbce3da0ae..6c157563583 100644 --- a/reactos/ntoskrnl/kdbg/kdb_cli.c +++ b/reactos/ntoskrnl/kdbg/kdb_cli.c @@ -1266,7 +1266,7 @@ KdbpCmdProc(ULONG Argc, PCHAR Argv[]) if (Argc >= 2 && _stricmp(Argv[1], "list") == 0) { Entry = PsActiveProcessHead.Flink; - if (Entry == &PsActiveProcessHead) + if (!Entry || Entry == &PsActiveProcessHead) { KdbpPrint("No processes in the system!\n"); return TRUE; @@ -1395,8 +1395,10 @@ KdbpCmdMod(ULONG Argc, PCHAR Argv[]) { if (!KdbpSymFindModuleByIndex(0, &Info)) { - KdbpPrint("No modules.\n"); - return TRUE; + ULONG_PTR ntoskrnlBase = ((ULONG_PTR)KdbpCmdMod) & 0xfff00000; + KdbpPrint(" Base Size Name\n"); + KdbpPrint(" %08x %08x %s\n", ntoskrnlBase, 0, "ntoskrnl.exe"); + return TRUE; } i = 1; } @@ -1915,6 +1917,8 @@ KdbpPrint( TerminalInitialized = TRUE; Length = 0; + KeStallExecutionProcessor(100000); + for (;;) { c = KdbpTryGetCharSerial(5000); @@ -1937,6 +1941,7 @@ KdbpPrint( { /* Try to query number of rows from terminal. A reply looks like "\x1b[8;24;80t" */ TerminalReportsSize = FALSE; + KeStallExecutionProcessor(100000); DbgPrint("\x1b[18t"); c = KdbpTryGetCharSerial(5000); if (c == KEY_ESC) @@ -1968,6 +1973,8 @@ KdbpPrint( } } } + /* Clear further characters */ + while ((c = KdbpTryGetCharSerial(5000)) != -1); } } @@ -2066,7 +2073,7 @@ KdbpPrint( } } - DbgPrint("%s", p); + DbgPrint("%s", p); if (c != '\0') p[i + 1] = c; @@ -2229,13 +2236,14 @@ KdbpReadCommand( /* Read the next char - this is to throw away a \n which most clients should * send after \r. */ + KeStallExecutionProcessor(100000); if (KdbDebugState & KD_DEBUG_KDSERIAL) NextKey = KdbpTryGetCharSerial(5); else NextKey = KdbpTryGetCharKeyboard(&ScanCode, 5); if (NextKey == '\n' || NextKey == -1) /* \n or no response at all */ NextKey = '\0'; - DbgPrint("\n"); + KdbpPrint("\n"); /* * Repeat the last command if the user presses enter. Reduces the * risk of RSI when single-stepping. @@ -2260,9 +2268,9 @@ KdbpReadCommand( Buffer--; *Buffer = 0; if (EchoOn) - DbgPrint("%c %c", KEY_BS, KEY_BS); + KdbpPrint("%c %c", KEY_BS, KEY_BS); else - DbgPrint(" %c", KEY_BS); + KdbpPrint(" %c", KEY_BS); } } else if (ScanCode == KEY_SCAN_UP) @@ -2287,15 +2295,15 @@ KdbpReadCommand( Buffer--; *Buffer = 0; if (EchoOn) - DbgPrint("%c %c", KEY_BS, KEY_BS); + KdbpPrint("%c %c", KEY_BS, KEY_BS); else - DbgPrint(" %c", KEY_BS); + KdbpPrint(" %c", KEY_BS); } i = min(strlen(KdbCommandHistory[CmdHistIndex]), Size - 1); memcpy(Orig, KdbCommandHistory[CmdHistIndex], i); Orig[i] = '\0'; Buffer = Orig + i; - DbgPrint("%s", Orig); + KdbpPrint("%s", Orig); } } else if (ScanCode == KEY_SCAN_DOWN) @@ -2313,22 +2321,22 @@ KdbpReadCommand( Buffer--; *Buffer = 0; if (EchoOn) - DbgPrint("%c %c", KEY_BS, KEY_BS); + KdbpPrint("%c %c", KEY_BS, KEY_BS); else - DbgPrint(" %c", KEY_BS); + KdbpPrint(" %c", KEY_BS); } i = min(strlen(KdbCommandHistory[CmdHistIndex]), Size - 1); memcpy(Orig, KdbCommandHistory[CmdHistIndex], i); Orig[i] = '\0'; Buffer = Orig + i; - DbgPrint("%s", Orig); + KdbpPrint("%s", Orig); } } } else { if (EchoOn) - DbgPrint("%c", Key); + KdbpPrint("%c", Key); *Buffer = Key; Buffer++; @@ -2406,14 +2414,14 @@ KdbpCliMainLoop( { if (!KdbSymPrintAddress((PVOID)KdbCurrentTrapFrame->Tf.Eip)) { - DbgPrint("<%x>", KdbCurrentTrapFrame->Tf.Eip); + KdbpPrint("<%x>", KdbCurrentTrapFrame->Tf.Eip); } - DbgPrint(": "); + KdbpPrint(": "); if (KdbpDisassemble(KdbCurrentTrapFrame->Tf.Eip, KdbUseIntelSyntax) < 0) { - DbgPrint(""); + KdbpPrint(""); } - DbgPrint("\n"); + KdbpPrint("\n"); } /* Flush the input buffer */ @@ -2431,7 +2439,7 @@ KdbpCliMainLoop( do { /* Print the prompt */ - DbgPrint("kdb:> "); + KdbpPrint("kdb:> "); /* Read a command and remember it */ KdbpReadCommand(Command, sizeof (Command)); @@ -2456,7 +2464,7 @@ KdbpCliModuleLoaded(IN PUNICODE_STRING Name) if (!KdbBreakOnModuleLoad) return; - DbgPrint("Module %wZ loaded.\n", Name); + KdbpPrint("Module %wZ loaded.\n", Name); DbgBreakPointWithStatus(DBG_STATUS_CONTROL_C); } diff --git a/reactos/ntoskrnl/kdbg/kdb_symbols.c b/reactos/ntoskrnl/kdbg/kdb_symbols.c index 2d1ba0a796c..7d582651c99 100644 --- a/reactos/ntoskrnl/kdbg/kdb_symbols.c +++ b/reactos/ntoskrnl/kdbg/kdb_symbols.c @@ -26,7 +26,7 @@ typedef struct _IMAGE_SYMBOL_INFO_CACHE { static BOOLEAN LoadSymbols; static LIST_ENTRY SymbolFileListHead; static KSPIN_LOCK SymbolFileListLock; - +BOOLEAN KdbpSymbolsInitialized = FALSE; /* FUNCTIONS ****************************************************************/ @@ -57,6 +57,9 @@ KdbpSymFindUserModule(IN PVOID Address OPTIONAL, INT Count = 0; INT Length; + if (!KdbpSymbolsInitialized) + return FALSE; + CurrentProcess = PsGetCurrentProcess(); if (CurrentProcess != NULL) { @@ -110,6 +113,9 @@ KdbpSymFindModule(IN PVOID Address OPTIONAL, INT Count = 0; INT Length; + if (!KdbpSymbolsInitialized) + return FALSE; + current_entry = PsLoadedModuleList.Flink; while (current_entry != &PsLoadedModuleList) @@ -213,7 +219,7 @@ KdbSymPrintAddress(IN PVOID Address) CHAR FileName[256]; CHAR FunctionName[256]; - if (!KdbpSymFindModuleByAddress(Address, &Info)) + if (!KdbpSymbolsInitialized || !KdbpSymFindModuleByAddress(Address, &Info)) return FALSE; RelativeAddress = (ULONG_PTR) Address - Info.Base; @@ -259,6 +265,11 @@ KdbSymGetAddressInformation(IN PROSSYM_INFO RosSymInfo, OUT PCH FileName OPTIONAL, OUT PCH FunctionName OPTIONAL) { + if (!KdbpSymbolsInitialized) + { + return STATUS_UNSUCCESSFUL; + } + if (NULL == RosSymInfo) { return STATUS_UNSUCCESSFUL; @@ -343,7 +354,7 @@ KdbpSymAddCachedFile(IN PUNICODE_STRING FileName, CacheEntry->FileName.Buffer = ExAllocatePoolWithTag(NonPagedPool, FileName->Length, TAG_KDBS); - RtlInitUnicodeString(&CacheEntry->FileName, FileName->Buffer); + RtlCopyUnicodeString(&CacheEntry->FileName, FileName); ASSERT(CacheEntry->FileName.Buffer); CacheEntry->RefCount = 1; CacheEntry->RosSymInfo = RosSymInfo; @@ -772,6 +783,7 @@ KdbInitialize(PKD_DISPATCH_TABLE DispatchTable, SymbolsInfo.SizeOfImage = DataTableEntry->SizeOfImage; KdbSymProcessSymbols(NULL, &SymbolsInfo); + KdbpSymbolsInitialized = TRUE; } } diff --git a/reactos/ntoskrnl/ke/apc.c b/reactos/ntoskrnl/ke/apc.c index d3e4fefa9dd..688585526e8 100644 --- a/reactos/ntoskrnl/ke/apc.c +++ b/reactos/ntoskrnl/ke/apc.c @@ -207,7 +207,6 @@ KiInsertQueueApc(IN PKAPC Apc, Status = STATUS_KERNEL_APC; /* Wake up the thread */ -Unwait: KiUnwaitThread(Thread, Status, PriorityBoost); } else if (Thread->State == GateWait) @@ -240,7 +239,9 @@ Unwait: /* Set user-mode APC pending */ Thread->ApcState.UserApcPending = TRUE; Status = STATUS_USER_APC; - goto Unwait; + + /* Wake up the thread */ + KiUnwaitThread(Thread, Status, PriorityBoost); } /* Release dispatcher lock */ diff --git a/reactos/ntoskrnl/ke/arm/stubs_asm.s b/reactos/ntoskrnl/ke/arm/stubs_asm.s index ba4c7126798..214b3976085 100644 --- a/reactos/ntoskrnl/ke/arm/stubs_asm.s +++ b/reactos/ntoskrnl/ke/arm/stubs_asm.s @@ -32,8 +32,6 @@ GENERATE_ARM_STUB KeSynchronizeExecution // // User Mode Support // -GENERATE_ARM_STUB KiInitializeUserApc -GENERATE_ARM_STUB KiSwapProcess GENERATE_ARM_STUB KeSwitchKernelStack GENERATE_ARM_STUB RtlCreateUserThread GENERATE_ARM_STUB RtlInitializeContext diff --git a/reactos/ntoskrnl/ke/arm/trapc.c b/reactos/ntoskrnl/ke/arm/trapc.c index 71a56216529..52a4b1743c4 100644 --- a/reactos/ntoskrnl/ke/arm/trapc.c +++ b/reactos/ntoskrnl/ke/arm/trapc.c @@ -87,6 +87,32 @@ KiIdleLoop(VOID) } } +VOID +NTAPI +KiSwapProcess(IN PKPROCESS NewProcess, + IN PKPROCESS OldProcess) +{ + ARM_TTB_REGISTER TtbRegister; + DPRINT1("Swapping from: %p (%16s) to %p (%16s)\n", + OldProcess, ((PEPROCESS)OldProcess)->ImageFileName, + NewProcess, ((PEPROCESS)NewProcess)->ImageFileName); + + // + // Update the page directory base + // + TtbRegister.AsUlong = (ULONG)NewProcess->DirectoryTableBase.LowPart; + ASSERT(TtbRegister.Reserved == 0); + KeArmTranslationTableRegisterSet(TtbRegister); + + // + // FIXME: Flush the TLB + // + + + DPRINT1("Survived!\n"); + while (TRUE); +} + BOOLEAN KiSwapContextInternal(IN PKTHREAD OldThread, IN PKTHREAD NewThread) diff --git a/reactos/ntoskrnl/ke/arm/usercall.c b/reactos/ntoskrnl/ke/arm/usercall.c index 1f11468d834..6d6997d1178 100644 --- a/reactos/ntoskrnl/ke/arm/usercall.c +++ b/reactos/ntoskrnl/ke/arm/usercall.c @@ -261,3 +261,47 @@ KiSystemService(IN PKTHREAD Thread, // Thread->TrapFrame = (PKTRAP_FRAME)TrapFrame->PreviousTrapFrame; } + +VOID +NTAPI +KiInitializeUserApc(IN PKEXCEPTION_FRAME ExceptionFrame, + IN PKTRAP_FRAME TrapFrame, + IN PKNORMAL_ROUTINE NormalRoutine, + IN PVOID NormalContext, + IN PVOID SystemArgument1, + IN PVOID SystemArgument2) +{ + CONTEXT Context; + ULONG_PTR Stack; + ULONG ContextLength; + DPRINT1("User APC: %p %p %p\n", NormalContext, SystemArgument1, SystemArgument2); + + // + // Build the user mode context + // + Context.ContextFlags = CONTEXT_FULL; + KeTrapFrameToContext(TrapFrame, ExceptionFrame, &Context); + + // + // Setup the context on the user stack + // + ContextLength = sizeof(CONTEXT); + Stack = (ULONG_PTR)(Context.Sp & ~7) - ContextLength; + + // + // Make sure the stack is valid, and copy the context + // + ProbeForWrite((PVOID)Stack, ContextLength, sizeof(QUAD)); + RtlMoveMemory((PVOID)Stack, &Context, sizeof(CONTEXT)); + + // + // Setup the trap frame when we return to user mode + // + TrapFrame->R0 = (ULONG)NormalContext; + TrapFrame->R1 = (ULONG)SystemArgument1; + TrapFrame->R2 = (ULONG)SystemArgument2; + TrapFrame->R3 = (ULONG)NormalRoutine; + TrapFrame->R8 = Stack; + TrapFrame->UserSp = Stack; + TrapFrame->UserLr = (ULONG)KeUserApcDispatcher; +} diff --git a/reactos/ntoskrnl/ke/bug.c b/reactos/ntoskrnl/ke/bug.c index 870285b5fd2..dde2c95a38b 100644 --- a/reactos/ntoskrnl/ke/bug.c +++ b/reactos/ntoskrnl/ke/bug.c @@ -1208,6 +1208,21 @@ KeBugCheckWithTf(IN ULONG BugCheckCode, /* PUBLIC FUNCTIONS **********************************************************/ +/* + * @unimplemented + */ +NTSTATUS +NTAPI +KeInitializeCrashDumpHeader(IN ULONG Type, + IN ULONG Flags, + OUT PVOID Buffer, + IN ULONG BufferSize, + OUT ULONG BufferNeeded OPTIONAL) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + /* * @implemented */ @@ -1263,6 +1278,17 @@ KeDeregisterBugCheckReasonCallback( return Status; } +/* + * @unimplemented + */ +NTSTATUS +NTAPI +KeDeregisterNmiCallback(PVOID Handle) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + /* * @implemented */ @@ -1333,6 +1359,18 @@ KeRegisterBugCheckReasonCallback( return Status; } +/* + * @unimplemented + */ +PVOID +NTAPI +KeRegisterNmiCallback(IN PNMI_CALLBACK CallbackRoutine, + IN PVOID Context) +{ + UNIMPLEMENTED; + return NULL; +} + /* * @implemented */ diff --git a/reactos/ntoskrnl/ke/clock.c b/reactos/ntoskrnl/ke/clock.c index ead761da5c8..219289caa36 100644 --- a/reactos/ntoskrnl/ke/clock.c +++ b/reactos/ntoskrnl/ke/clock.c @@ -17,7 +17,6 @@ LARGE_INTEGER KeBootTime; ULONGLONG KeBootTimeBias; volatile KSYSTEM_TIME KeTickCount = {0}; -volatile ULONG KiRawTicks = 0; ULONG KeMaximumIncrement; ULONG KeMinimumIncrement; ULONG KeTimeAdjustment; @@ -95,7 +94,7 @@ KeSetSystemTime(IN PLARGE_INTEGER NewTime, Timer = CONTAINING_RECORD(NextEntry, KTIMER, TimerListEntry); NextEntry = NextEntry->Flink; - /* Is is absolute? */ + /* Is it absolute? */ if (Timer->Header.Absolute) { /* Remove it from the timer list */ diff --git a/reactos/ntoskrnl/ke/config.c b/reactos/ntoskrnl/ke/config.c index 67f374f3d06..01807226548 100644 --- a/reactos/ntoskrnl/ke/config.c +++ b/reactos/ntoskrnl/ke/config.c @@ -19,7 +19,6 @@ */ PCONFIGURATION_COMPONENT_DATA NTAPI -INIT_FUNCTION KeFindConfigurationEntry(IN PCONFIGURATION_COMPONENT_DATA Child, IN CONFIGURATION_CLASS Class, IN CONFIGURATION_TYPE Type, @@ -38,7 +37,6 @@ KeFindConfigurationEntry(IN PCONFIGURATION_COMPONENT_DATA Child, */ PCONFIGURATION_COMPONENT_DATA NTAPI -INIT_FUNCTION KeFindConfigurationNextEntry(IN PCONFIGURATION_COMPONENT_DATA Child, IN CONFIGURATION_CLASS Class, IN CONFIGURATION_TYPE Type, @@ -123,4 +121,3 @@ KeFindConfigurationNextEntry(IN PCONFIGURATION_COMPONENT_DATA Child, /* If we got here, nothign was found */ return NULL; } - diff --git a/reactos/ntoskrnl/ke/freeldr.c b/reactos/ntoskrnl/ke/freeldr.c index 7e5395ec748..cfad4899975 100644 --- a/reactos/ntoskrnl/ke/freeldr.c +++ b/reactos/ntoskrnl/ke/freeldr.c @@ -34,7 +34,7 @@ ULONG (*FrLdrDbgPrint)(const char *Format, ...); /* FreeLDR Loader Data */ PROS_LOADER_PARAMETER_BLOCK KeRosLoaderBlock; -BOOLEAN AcpiTableDetected; +BOOLEAN AcpiTableDetected = FALSE; ADDRESS_RANGE KeMemoryMap[64]; ULONG KeMemoryMapRangeCount; @@ -1190,7 +1190,7 @@ KiRosFrldrLpbToNtLpb(IN PROS_LOADER_PARAMETER_BLOCK RosLoaderBlock, if (LoaderBlock->SetupLdrBlock) { /* All we'll setup right now is the flag for text-mode setup */ - LoaderBlock->SetupLdrBlock->Flags = 1; + LoaderBlock->SetupLdrBlock->Flags = SETUPLDR_TEXT_MODE; } /* Make a copy of the command line */ diff --git a/reactos/ntoskrnl/ke/i386/ctxswitch.S b/reactos/ntoskrnl/ke/i386/ctxswitch.S index 152122722a2..3cff2d27a1c 100644 --- a/reactos/ntoskrnl/ke/i386/ctxswitch.S +++ b/reactos/ntoskrnl/ke/i386/ctxswitch.S @@ -736,6 +736,10 @@ CheckNext: #endif SwapContext: + /* ReactOS Mm Hack */ + mov ecx, esi + call @MiSyncThreadProcessViews@4 + /* Swap context at APC_LEVEL */ mov ecx, APC_LEVEL call @KiSwapContextInternal@0 diff --git a/reactos/ntoskrnl/ke/i386/irqobj.c b/reactos/ntoskrnl/ke/i386/irqobj.c index b6f5ae20737..282d195b820 100644 --- a/reactos/ntoskrnl/ke/i386/irqobj.c +++ b/reactos/ntoskrnl/ke/i386/irqobj.c @@ -19,7 +19,7 @@ ULONG KiISRTimeout = 55; USHORT KiISROverflow = 30000; -extern ULONG KiChainedDispatch2ndLvl; +extern ULONG NTAPI KiChainedDispatch2ndLvl(VOID); /* PRIVATE FUNCTIONS *********************************************************/ @@ -281,7 +281,7 @@ KeConnectInterrupt(IN PKINTERRUPT Interrupt) (Dispatch.Interrupt->Mode == Interrupt->Mode)) { /* The vector is shared and the interrupts are compatible */ - while (TRUE); // FIXME: NOT YET SUPPORTED/TESTED + ASSERT(FALSE); // FIXME: NOT YET SUPPORTED/TESTED Interrupt->Connected = Connected = TRUE; ASSERT(Irql <= SYNCH_LEVEL); diff --git a/reactos/ntoskrnl/ke/i386/kiinit.c b/reactos/ntoskrnl/ke/i386/kiinit.c index 3ec1695aa3e..a87d09638f7 100644 --- a/reactos/ntoskrnl/ke/i386/kiinit.c +++ b/reactos/ntoskrnl/ke/i386/kiinit.c @@ -391,7 +391,7 @@ KiInitializeKernel(IN PKPROCESS InitProcess, { BOOLEAN NpxPresent; ULONG FeatureBits; - LARGE_INTEGER PageDirectory; + ULONG PageDirectory[2]; PVOID DpcStack; ULONG Vendor[3]; @@ -503,11 +503,12 @@ KiInitializeKernel(IN PKPROCESS InitProcess, /* Initialize the Idle Process and the Process Listhead */ InitializeListHead(&KiProcessListHead); - PageDirectory.QuadPart = 0; + PageDirectory[0] = 0; + PageDirectory[1] = 0; KeInitializeProcess(InitProcess, 0, 0xFFFFFFFF, - &PageDirectory, + PageDirectory, FALSE); InitProcess->QuantumReset = MAXCHAR; } diff --git a/reactos/ntoskrnl/ke/i386/systimer.S b/reactos/ntoskrnl/ke/i386/systimer.S index a15d46df1d0..e4ce20d24b6 100644 --- a/reactos/ntoskrnl/ke/i386/systimer.S +++ b/reactos/ntoskrnl/ke/i386/systimer.S @@ -57,9 +57,9 @@ _KiComputeTimerTableIndex@8: ret 8 .endfunc -.globl _KeUpdateRunTime@4 -.func KeUpdateRunTime@4 -_KeUpdateRunTime@4: +.globl _KeUpdateRunTime@8 +.func KeUpdateRunTime@8 +_KeUpdateRunTime@8: /* Get KPCR */ mov eax, [fs:KPCR_SELF] @@ -355,7 +355,7 @@ NoDebug: /* Update system run time */ push [esp] - call _KeUpdateRunTime@4 + call _KeUpdateRunTime@8 jmp Done IncompleteTick2: diff --git a/reactos/ntoskrnl/ke/procobj.c b/reactos/ntoskrnl/ke/procobj.c index 87826d3dd74..e456824d133 100644 --- a/reactos/ntoskrnl/ke/procobj.c +++ b/reactos/ntoskrnl/ke/procobj.c @@ -115,7 +115,7 @@ NTAPI KeInitializeProcess(IN OUT PKPROCESS Process, IN KPRIORITY Priority, IN KAFFINITY Affinity, - IN PLARGE_INTEGER DirectoryTableBase, + IN PULONG DirectoryTableBase, IN BOOLEAN Enable) { #ifdef CONFIG_SMP @@ -134,7 +134,8 @@ KeInitializeProcess(IN OUT PKPROCESS Process, Process->Affinity = Affinity; Process->BasePriority = (CHAR)Priority; Process->QuantumReset = 6; - Process->DirectoryTableBase = *DirectoryTableBase; + Process->DirectoryTableBase[0] = DirectoryTableBase[0]; + Process->DirectoryTableBase[1] = DirectoryTableBase[1]; Process->AutoAlignment = Enable; #if defined(_M_IX86) Process->IopmOffset = KiComputeIopmOffset(IO_ACCESS_MAP_NONE); @@ -446,12 +447,8 @@ KeAttachProcess(IN PKPROCESS Process) ASSERT_PROCESS(Process); ASSERT_IRQL_LESS_OR_EQUAL(DISPATCH_LEVEL); - /* Make sure that we are in the right page directory */ - MiSyncThreadProcessViews(Process, - (PVOID)Thread->StackLimit, - Thread->LargeStack ? - KERNEL_STACK_SIZE : KERNEL_LARGE_STACK_SIZE); - MiSyncThreadProcessViews(Process, Thread, sizeof(ETHREAD)); + /* Make sure that we are in the right page directory (ReactOS Mm Hack) */ + MiSyncThreadProcessViews(Thread); /* Check if we're already in that process */ if (Thread->ApcState.Process == Process) return; @@ -576,12 +573,8 @@ KeStackAttachProcess(IN PKPROCESS Process, ASSERT_PROCESS(Process); ASSERT_IRQL_LESS_OR_EQUAL(DISPATCH_LEVEL); - /* Make sure that we are in the right page directory */ - MiSyncThreadProcessViews(Process, - (PVOID)Thread->StackLimit, - Thread->LargeStack ? - KERNEL_STACK_SIZE : KERNEL_LARGE_STACK_SIZE); - MiSyncThreadProcessViews(Process, Thread, sizeof(ETHREAD)); + /* Make sure that we are in the right page directory (ReactOS Mm Hack) */ + MiSyncThreadProcessViews(Thread); /* Crash system if DPC is being executed! */ if (KeIsExecutingDpc()) diff --git a/reactos/ntoskrnl/ke/spinlock.c b/reactos/ntoskrnl/ke/spinlock.c index 84ed9307c5f..d4be3b5fac3 100644 --- a/reactos/ntoskrnl/ke/spinlock.c +++ b/reactos/ntoskrnl/ke/spinlock.c @@ -260,4 +260,59 @@ KeReleaseInterruptSpinLock(IN PKINTERRUPT Interrupt, KeLowerIrql(OldIrql); } +/* + * @unimplemented + */ +KIRQL +FASTCALL +KeAcquireSpinLockForDpc(IN PKSPIN_LOCK SpinLock) +{ + UNIMPLEMENTED; + return 0; +} + +/* + * @unimplemented + */ +VOID +FASTCALL +KeReleaseSpinLockForDpc(IN PKSPIN_LOCK SpinLock, + IN KIRQL OldIrql) +{ + UNIMPLEMENTED; +} + +/* + * @unimplemented + */ +KIRQL +FASTCALL +KeAcquireInStackQueuedSpinLockForDpc(IN PKSPIN_LOCK SpinLock, + IN PKLOCK_QUEUE_HANDLE LockHandle) +{ + UNIMPLEMENTED; + return 0; +} + +/* + * @unimplemented + */ +VOID +FASTCALL +KeReleaseInStackQueuedSpinLockForDpc(IN PKLOCK_QUEUE_HANDLE LockHandle) +{ + UNIMPLEMENTED; +} + +/* + * @unimplemented + */ +BOOLEAN +FASTCALL +KeTestSpinLock(IN PKSPIN_LOCK SpinLock) +{ + UNIMPLEMENTED; + return FALSE; +} + /* EOF */ diff --git a/reactos/ntoskrnl/ke/thrdobj.c b/reactos/ntoskrnl/ke/thrdobj.c index 41b8b2742d5..dccfe9c4a80 100644 --- a/reactos/ntoskrnl/ke/thrdobj.c +++ b/reactos/ntoskrnl/ke/thrdobj.c @@ -742,7 +742,7 @@ KeInitThread(IN OUT PKTHREAD Thread, } /* Set swap settings */ - Thread->EnableStackSwap = FALSE;//TRUE; + Thread->EnableStackSwap = TRUE; Thread->IdealProcessor = 1; Thread->SwapBusy = FALSE; Thread->KernelStackResident = TRUE; @@ -810,11 +810,8 @@ KeInitThread(IN OUT PKTHREAD Thread, Thread->StackLimit = (ULONG_PTR)KernelStack - KERNEL_STACK_SIZE; Thread->KernelStackResident = TRUE; - /* Make sure that we are in the right page directory */ - MiSyncThreadProcessViews(Process, - (PVOID)Thread->StackLimit, - KERNEL_STACK_SIZE); - MiSyncThreadProcessViews(Process, Thread, sizeof(ETHREAD)); + /* Make sure that we are in the right page directory (ReactOS Mm Hack) */ + MiSyncThreadProcessViews(Thread); /* Enter SEH to avoid crashes due to user mode */ Status = STATUS_SUCCESS; @@ -858,7 +855,7 @@ KeInitializeThread(IN PKPROCESS Process, IN PVOID Teb, IN PVOID KernelStack) { - /* Initailize and start the thread on success */ + /* Initialize and start the thread on success */ if (NT_SUCCESS(KeInitThread(Thread, KernelStack, SystemRoutine, diff --git a/reactos/ntoskrnl/ke/thrdschd.c b/reactos/ntoskrnl/ke/thrdschd.c index 4fb0040704d..15a2d9f61a2 100644 --- a/reactos/ntoskrnl/ke/thrdschd.c +++ b/reactos/ntoskrnl/ke/thrdschd.c @@ -344,9 +344,7 @@ KiSwapThread(IN PKTHREAD CurrentThread, WaitIrql = CurrentThread->WaitIrql; /* REACTOS Mm Hack of Doom */ - MiSyncThreadProcessViews(PsGetCurrentProcess(), - ((PETHREAD)NextThread)->ThreadsProcess, - sizeof(EPROCESS)); + MiSyncThreadProcessViews(NextThread); /* Swap contexts */ ApcState = KiSwapContext(CurrentThread, NextThread); @@ -715,6 +713,9 @@ NtYieldExecution(VOID) /* Sanity check */ ASSERT(OldIrql <= DISPATCH_LEVEL); + /* REACTOS Mm Hack of Doom */ + MiSyncThreadProcessViews(NextThread); + /* Swap to new thread */ KiSwapContext(Thread, NextThread); Status = STATUS_SUCCESS; @@ -731,5 +732,3 @@ NtYieldExecution(VOID) KeLowerIrql(OldIrql); return Status; } - - diff --git a/reactos/ntoskrnl/mm/amd64/page.c b/reactos/ntoskrnl/mm/amd64/page.c index ab0f0836369..ba46336fe08 100644 --- a/reactos/ntoskrnl/mm/amd64/page.c +++ b/reactos/ntoskrnl/mm/amd64/page.c @@ -66,7 +66,7 @@ Mmi386ReleaseMmInfo(PEPROCESS Process) NTSTATUS NTAPI MmInitializeHandBuiltProcess(IN PEPROCESS Process, - IN PLARGE_INTEGER DirectoryTableBase) + IN PULONG_PTR DirectoryTableBase) { UNIMPLEMENTED; return STATUS_UNSUCCESSFUL; @@ -76,7 +76,7 @@ BOOLEAN STDCALL MmCreateProcessAddressSpace(IN ULONG MinWs, IN PEPROCESS Process, - IN PLARGE_INTEGER DirectoryTableBase) + IN PULONG_PTR DirectoryTableBase) { UNIMPLEMENTED; return 0; diff --git a/reactos/ntoskrnl/mm/arm/stubs.c b/reactos/ntoskrnl/mm/arm/stubs.c index b8a1a8ac5fe..950dddd4f33 100644 --- a/reactos/ntoskrnl/mm/arm/stubs.c +++ b/reactos/ntoskrnl/mm/arm/stubs.c @@ -66,9 +66,9 @@ MiGetPageTableForProcess(IN PEPROCESS Process, IN PVOID Address, IN BOOLEAN Create) { - ULONG PdeOffset; - PMMPTE PointerPde; - MMPTE Pte; + //ULONG PdeOffset; + PMMPTE PointerPde, PointerPte; + MMPTE TempPde, TempPte; NTSTATUS Status; PFN_NUMBER Pfn; @@ -85,6 +85,12 @@ MiGetPageTableForProcess(IN PEPROCESS Process, ASSERT(FALSE); } + // + // Get our templates + // + TempPde = MiArmTemplatePde; + TempPte = MiArmTemplatePte; + // // Get the PDE // @@ -99,18 +105,16 @@ MiGetPageTableForProcess(IN PEPROCESS Process, // // Does it exist in the kernel page directory? // - PdeOffset = MiGetPdeOffset(Address); - if (MmGlobalKernelPageDirectory[PdeOffset] == 0) + //PdeOffset = MiGetPdeOffset(Address); + //if (MmGlobalKernelPageDirectory[PdeOffset] == 0) { // // It doesn't. Is this a create operation? If not, fail // if (Create == FALSE) return NULL; - - // - // THIS WHOLE PATH IS TODO - // - ASSERT(FALSE); + kernelHack: + DPRINT1("Must create a page for: %p PDE: %p\n", // Offset: %lx!\n", + Address, PointerPde);//, PdeOffset); // // Allocate a non paged pool page for the PDE @@ -119,20 +123,51 @@ MiGetPageTableForProcess(IN PEPROCESS Process, if (!NT_SUCCESS(Status)) return NULL; // - // Make the entry valid + // Setup the PFN // - Pte.u.Hard.AsUlong = 0xDEADBEEF; + TempPde.u.Hard.L1.Coarse.BaseAddress = (Pfn << PAGE_SHIFT) >> CPT_SHIFT; + + // + // Write the PDE + // + ASSERT(PointerPde->u.Hard.L1.Fault.Type == FaultPte); + ASSERT(TempPde.u.Hard.L1.Coarse.Type == CoarsePte); + *PointerPde = TempPde; // // Save it // - MmGlobalKernelPageDirectory[PdeOffset] = Pte.u.Hard.AsUlong; + //MmGlobalKernelPageDirectory[PdeOffset] = TempPde.u.Hard.AsUlong; + //DPRINT1("KPD: %p PDEADDR: %p\n", &MmGlobalKernelPageDirectory[PdeOffset], MiGetPdeAddress(Address)); + + // + // FIXFIX: Double check with Felix tomorrow + // +///// + // + // Get the PTE for this 1MB region + // + PointerPte = MiGetPteAddress(MiGetPteAddress(Address)); + DPRINT1("PointerPte: %p\n", PointerPte); + + // + // Write the PFN of the PDE + // + TempPte.u.Hard.L2.Small.BaseAddress = Pfn; + + // + // Write the PTE + // + ASSERT(PointerPte->u.Hard.L2.Fault.Type == FaultPte); + ASSERT(TempPte.u.Hard.L2.Small.Type == SmallPte); + *PointerPte = TempPte; +///// } // // Now set the actual PDE // - PointerPde = (PMMPTE)&MmGlobalKernelPageDirectory[PdeOffset]; + //PointerPde = (PMMPTE)&MmGlobalKernelPageDirectory[PdeOffset]; } else { @@ -144,6 +179,7 @@ MiGetPageTableForProcess(IN PEPROCESS Process, // // THIS WHOLE PATH IS TODO // + goto kernelHack; ASSERT(FALSE); // @@ -155,12 +191,12 @@ MiGetPageTableForProcess(IN PEPROCESS Process, // // Make the entry valid // - Pte.u.Hard.AsUlong = 0xDEADBEEF; + TempPte.u.Hard.AsUlong = 0xDEADBEEF; // // Set it // - *PointerPde = Pte; + *PointerPde = TempPte; } } @@ -247,7 +283,7 @@ MmDeletePageTable(IN PEPROCESS Process, // // Invalidate the TLB entry // - MiFlushTlb(PointerPde, MiAddressToPte(Address)); + MiFlushTlb(PointerPde, MiGetPteAddress(Address)); } BOOLEAN @@ -256,12 +292,76 @@ MmCreateProcessAddressSpace(IN ULONG MinWs, IN PEPROCESS Process, IN PLARGE_INTEGER DirectoryTableBase) { + NTSTATUS Status; + ULONG i; + PFN_NUMBER Pfn[2]; + PMMPTE PageDirectory, PointerPde; + MMPTE TempPde; + ASSERT(FALSE); + // - // FIXME-USER: Need to create address space + // Loop two tables (Hyperspace and TTB). Each one is 16KB // - UNIMPLEMENTED; - while (TRUE); - return 0; + // + for (i = 0; i < 8; i++) + { + // + // Allocate a page + // + Status = MmRequestPageMemoryConsumer(MC_NPPOOL, FALSE, &Pfn[i]); + if (!NT_SUCCESS(Status)) ASSERT(FALSE); + } + + // + // Map the base + // + PageDirectory = MmCreateHyperspaceMapping(Pfn[0]); + + // + // Copy the PDEs for kernel-mode + // + RtlCopyMemory(PageDirectory + MiGetPdeOffset(MmSystemRangeStart), + MmGlobalKernelPageDirectory + MiGetPdeOffset(MmSystemRangeStart), + (1024 - MiGetPdeOffset(MmSystemRangeStart)) * sizeof(ULONG)); + + + // + // Setup the PDE for the table base + // + TempPde = MiArmTemplatePde; + TempPde.u.Hard.L1.Coarse.BaseAddress = (Pfn[0] << PAGE_SHIFT) >> CPT_SHIFT; + PointerPde = &PageDirectory[MiGetPdeOffset(PTE_BASE)]; + + // + // Write the PDE + // + ASSERT(PointerPde->u.Hard.L1.Fault.Type == FaultPte); + ASSERT(TempPde.u.Hard.L1.Coarse.Type == CoarsePte); + *PointerPde = TempPde; + + // + // Setup the PDE for the hyperspace + // + TempPde.u.Hard.L1.Coarse.BaseAddress = (Pfn[1] << PAGE_SHIFT) >> CPT_SHIFT; + PointerPde = &PageDirectory[MiGetPdeOffset(HYPER_SPACE)]; + + // + // Write the PDE + // + ASSERT(PointerPde->u.Hard.L1.Fault.Type == FaultPte); + ASSERT(TempPde.u.Hard.L1.Coarse.Type == CoarsePte); + *PointerPde = TempPde; + + // + // Unmap the page directory + // + MmDeleteHyperspaceMapping(PageDirectory); + + // + // Return the page table base + // + DirectoryTableBase->QuadPart = Pfn[0] << PAGE_SHIFT; + return TRUE; } VOID @@ -349,86 +449,63 @@ MmEnableVirtualMapping(IN PEPROCESS Process, NTSTATUS NTAPI -MmCreateVirtualMappingInternal(IN PVOID Address, +MmCreateVirtualMappingInternal(IN PEPROCESS Process, + IN PVOID Address, IN ULONG Protection, IN PPFN_NUMBER Pages, IN ULONG PageCount, IN BOOLEAN MarkAsMapped) { - PMMPTE PointerPte, LastPte, PointerPde, LastPde; - MMPTE TempPte, TempPde; - NTSTATUS Status; - PFN_NUMBER Pfn; + PMMPTE PointerPte = NULL; + MMPTE TempPte; + PVOID Addr; + ULONG OldPdeOffset, PdeOffset, i; DPRINT("[KMAP]: %p %d\n", Address, PageCount); //ASSERT(Address >= MmSystemRangeStart); // - // Get our templates + // Get our template PTE // TempPte = MiArmTemplatePte; - TempPde = MiArmTemplatePde; // - // Check if we have PDEs for this region + // Loop every page // - PointerPde = MiGetPdeAddress(Address); - LastPde = PointerPde + (PageCount / 256); - while (PointerPde <= LastPde) + Addr = Address; + OldPdeOffset = MiGetPdeOffset(Addr) + 1; + for (i = 0; i < PageCount; i++) { // - // Check if we need to allocate the PDE + // Get the next PDE offset and check if it's a new one // - if (PointerPde->u.Hard.L1.Fault.Type == FaultPte) + PdeOffset = MiGetPdeOffset(Addr); + if (OldPdeOffset != PdeOffset) { // - // Request a page + // Get rid of the old L2 Table, if this was the last PTE on it // - Status = MmRequestPageMemoryConsumer(MC_NPPOOL, FALSE, &Pfn); - if (!NT_SUCCESS(Status)) return Status; + MiUnmapPageTable(PointerPte); // - // Setup the PFN + // Get the PTE for this address, and create the PDE for it // - TempPde.u.Hard.L1.Coarse.BaseAddress = (Pfn << PAGE_SHIFT) >> CPT_SHIFT; - + PointerPte = MiGetPageTableForProcess(NULL, Addr, TRUE); + ASSERT(PointerPte); + } + else + { // - // Write the PDE + // Go to the next PTE on this PDE // - ASSERT(PointerPde->u.Hard.L1.Fault.Type == FaultPte); - ASSERT(TempPde.u.Hard.L1.Coarse.Type == CoarsePte); - *PointerPde = TempPde; - - // - // Get the PTE for this 1MB region - // - PointerPte = MiGetPteAddress(MiGetPteAddress(Address)); - - // - // Write the PFN of the PDE - // - TempPte.u.Hard.L2.Small.BaseAddress = Pfn; - - // - // Write the PTE - // - ASSERT(PointerPte->u.Hard.L2.Fault.Type == FaultPte); - ASSERT(TempPte.u.Hard.L2.Small.Type == SmallPte); - *PointerPte = TempPte; + ASSERT(PointerPte); + PointerPte++; } // - // Next + // Save the current PDE // - PointerPde++; - } - - // - // Get start and end address and loop each PTE - // - PointerPte = MiGetPteAddress(Address); - LastPte = PointerPte + PageCount - 1; - while (PointerPte <= LastPte) - { + OldPdeOffset = PdeOffset; + // // Mark it as mapped // @@ -447,9 +524,9 @@ MmCreateVirtualMappingInternal(IN PVOID Address, *PointerPte = TempPte; // - // Next + // Move to the next page // - PointerPte++; + Addr = (PVOID)((ULONG_PTR)Addr + PAGE_SIZE); } // @@ -468,7 +545,8 @@ MmCreateVirtualMappingForKernel(IN PVOID Address, // // Call the internal version // - return MmCreateVirtualMappingInternal(Address, + return MmCreateVirtualMappingInternal(NULL, + Address, Protection, Pages, PageCount, @@ -491,7 +569,8 @@ MmCreateVirtualMappingUnsafe(IN PEPROCESS Process, // // Call the internal version // - return MmCreateVirtualMappingInternal(Address, + return MmCreateVirtualMappingInternal(Process, + Address, Protection, Pages, PageCount, diff --git a/reactos/ntoskrnl/mm/freelist.c b/reactos/ntoskrnl/mm/freelist.c index ad84db26df1..0327faf8f99 100644 --- a/reactos/ntoskrnl/mm/freelist.c +++ b/reactos/ntoskrnl/mm/freelist.c @@ -30,7 +30,6 @@ PPHYSICAL_PAGE MmPageArray; ULONG MmPageArraySize; -static KSPIN_LOCK PageListLock; /* List of pages allocated to the MC_USER Consumer */ static LIST_ENTRY UserPageListHead; /* List of pages zeroed by the ZPW (MmZeroPageThreadMain) */ @@ -54,16 +53,16 @@ MmGetLRUFirstUserPage(VOID) PHYSICAL_PAGE* PageDescriptor; KIRQL oldIrql; - KeAcquireSpinLock(&PageListLock, &oldIrql); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); NextListEntry = UserPageListHead.Flink; if (NextListEntry == &UserPageListHead) { - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); return 0; } PageDescriptor = CONTAINING_RECORD(NextListEntry, PHYSICAL_PAGE, ListEntry); ASSERT_PFN(PageDescriptor); - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); return PageDescriptor - MmPageArray; } @@ -74,12 +73,12 @@ MmInsertLRULastUserPage(PFN_TYPE Pfn) KIRQL oldIrql; PPHYSICAL_PAGE Page; - KeAcquireSpinLock(&PageListLock, &oldIrql); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(Pfn); ASSERT(Page->Flags.Type == MM_PHYSICAL_PAGE_USED); ASSERT(Page->Flags.Consumer == MC_USER); InsertTailList(&UserPageListHead, &Page->ListEntry); - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); } PFN_TYPE @@ -91,18 +90,18 @@ MmGetLRUNextUserPage(PFN_TYPE PreviousPfn) KIRQL oldIrql; PPHYSICAL_PAGE Page; - KeAcquireSpinLock(&PageListLock, &oldIrql); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(PreviousPfn); ASSERT(Page->Flags.Type == MM_PHYSICAL_PAGE_USED); ASSERT(Page->Flags.Consumer == MC_USER); NextListEntry = Page->ListEntry.Flink; if (NextListEntry == &UserPageListHead) { - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); return 0; } PageDescriptor = CONTAINING_RECORD(NextListEntry, PHYSICAL_PAGE, ListEntry); - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); return PageDescriptor - MmPageArray; } @@ -130,7 +129,7 @@ MmGetContinuousPages(ULONG NumberOfBytes, NrPages = PAGE_ROUND_UP(NumberOfBytes) / PAGE_SIZE; - KeAcquireSpinLock(&PageListLock, &oldIrql); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); last = min(HighestAcceptableAddress.LowPart / PAGE_SIZE, MmPageArraySize - 1); boundary = BoundaryAddressMultiple.LowPart / PAGE_SIZE; @@ -197,7 +196,7 @@ MmGetContinuousPages(ULONG NumberOfBytes, Page->MapCount = 0; Page->SavedSwapEntry = 0; } - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); for (i = start; i < (start + length); i++) { if (MiGetPfnEntry(i)->Flags.Zero == 0) @@ -212,7 +211,7 @@ MmGetContinuousPages(ULONG NumberOfBytes, return start; } } - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); return 0; } @@ -243,7 +242,6 @@ MmInitializePageList(VOID) PMEMORY_ALLOCATION_DESCRIPTOR Md; /* Initialize the page lists */ - KeInitializeSpinLock(&PageListLock); InitializeListHead(&UserPageListHead); InitializeListHead(&FreeUnzeroedPageListHead); InitializeListHead(&FreeZeroedPageListHead); @@ -374,9 +372,9 @@ MmSetFlagsPage(PFN_TYPE Pfn, ULONG Flags) { KIRQL oldIrql; - KeAcquireSpinLock(&PageListLock, &oldIrql); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); MiGetPfnEntry(Pfn)->AllFlags = Flags; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); } VOID @@ -385,9 +383,9 @@ MmSetRmapListHeadPage(PFN_TYPE Pfn, struct _MM_RMAP_ENTRY* ListHead) { KIRQL oldIrql; - KeAcquireSpinLock(&PageListLock, &oldIrql); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); MiGetPfnEntry(Pfn)->RmapListHead = ListHead; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); } struct _MM_RMAP_ENTRY* @@ -397,9 +395,9 @@ MmGetRmapListHeadPage(PFN_TYPE Pfn) KIRQL oldIrql; struct _MM_RMAP_ENTRY* ListHead; - KeAcquireSpinLock(&PageListLock, &oldIrql); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); ListHead = MiGetPfnEntry(Pfn)->RmapListHead; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); return(ListHead); } @@ -413,7 +411,7 @@ MmMarkPageMapped(PFN_TYPE Pfn) if (Pfn <= MmPageArraySize) { - KeAcquireSpinLock(&PageListLock, &oldIrql); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(Pfn); if (Page->Flags.Type == MM_PHYSICAL_PAGE_FREE) { @@ -422,7 +420,7 @@ MmMarkPageMapped(PFN_TYPE Pfn) } Page->MapCount++; Page->ReferenceCount++; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); } } @@ -435,7 +433,7 @@ MmMarkPageUnmapped(PFN_TYPE Pfn) if (Pfn <= MmPageArraySize) { - KeAcquireSpinLock(&PageListLock, &oldIrql); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(Pfn); if (Page->Flags.Type == MM_PHYSICAL_PAGE_FREE) { @@ -449,7 +447,7 @@ MmMarkPageUnmapped(PFN_TYPE Pfn) } Page->MapCount--; Page->ReferenceCount--; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); } } @@ -460,9 +458,9 @@ MmGetFlagsPage(PFN_TYPE Pfn) KIRQL oldIrql; ULONG Flags; - KeAcquireSpinLock(&PageListLock, &oldIrql); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); Flags = MiGetPfnEntry(Pfn)->AllFlags; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); return(Flags); } @@ -474,9 +472,9 @@ MmSetSavedSwapEntryPage(PFN_TYPE Pfn, SWAPENTRY SavedSwapEntry) { KIRQL oldIrql; - KeAcquireSpinLock(&PageListLock, &oldIrql); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); MiGetPfnEntry(Pfn)->SavedSwapEntry = SavedSwapEntry; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); } SWAPENTRY @@ -486,9 +484,9 @@ MmGetSavedSwapEntryPage(PFN_TYPE Pfn) SWAPENTRY SavedSwapEntry; KIRQL oldIrql; - KeAcquireSpinLock(&PageListLock, &oldIrql); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); SavedSwapEntry = MiGetPfnEntry(Pfn)->SavedSwapEntry; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); return(SavedSwapEntry); } @@ -507,7 +505,7 @@ MmReferencePageUnsafe(PFN_TYPE Pfn) return; } - KeAcquireSpinLock(&PageListLock, &oldIrql); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(Pfn); if (Page->Flags.Type != MM_PHYSICAL_PAGE_USED) @@ -517,7 +515,7 @@ MmReferencePageUnsafe(PFN_TYPE Pfn) } Page->ReferenceCount++; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); } VOID @@ -539,7 +537,7 @@ MmGetReferenceCountPage(PFN_TYPE Pfn) DPRINT("MmGetReferenceCountPage(PhysicalAddress %x)\n", Pfn << PAGE_SHIFT); - KeAcquireSpinLock(&PageListLock, &oldIrql); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(Pfn); if (Page->Flags.Type != MM_PHYSICAL_PAGE_USED) { @@ -549,7 +547,7 @@ MmGetReferenceCountPage(PFN_TYPE Pfn) RCount = Page->ReferenceCount; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); return(RCount); } @@ -572,7 +570,7 @@ MmDereferencePage(PFN_TYPE Pfn) DPRINT("MmDereferencePage(PhysicalAddress %x)\n", Pfn << PAGE_SHIFT); - KeAcquireSpinLock(&PageListLock, &oldIrql); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(Pfn); @@ -630,7 +628,7 @@ MmDereferencePage(PFN_TYPE Pfn) KeSetEvent(&ZeroPageThreadEvent, IO_NO_INCREMENT, FALSE); } } - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); } ULONG @@ -643,7 +641,7 @@ MmGetLockCountPage(PFN_TYPE Pfn) DPRINT("MmGetLockCountPage(PhysicalAddress %x)\n", Pfn << PAGE_SHIFT); - KeAcquireSpinLock(&PageListLock, &oldIrql); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(Pfn); if (Page->Flags.Type != MM_PHYSICAL_PAGE_USED) @@ -653,7 +651,7 @@ MmGetLockCountPage(PFN_TYPE Pfn) } LockCount = Page->LockCount; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); return(LockCount); } @@ -667,7 +665,7 @@ MmLockPageUnsafe(PFN_TYPE Pfn) DPRINT("MmLockPageUnsafe(PhysicalAddress %x)\n", Pfn << PAGE_SHIFT); - KeAcquireSpinLock(&PageListLock, &oldIrql); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(Pfn); if (Page->Flags.Type != MM_PHYSICAL_PAGE_USED) @@ -677,7 +675,7 @@ MmLockPageUnsafe(PFN_TYPE Pfn) } Page->LockCount++; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); } VOID @@ -698,7 +696,7 @@ MmUnlockPage(PFN_TYPE Pfn) DPRINT("MmUnlockPage(PhysicalAddress %x)\n", Pfn << PAGE_SHIFT); - KeAcquireSpinLock(&PageListLock, &oldIrql); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(Pfn); if (Page->Flags.Type != MM_PHYSICAL_PAGE_USED) @@ -708,7 +706,7 @@ MmUnlockPage(PFN_TYPE Pfn) } Page->LockCount--; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); } PFN_TYPE @@ -723,7 +721,7 @@ MmAllocPage(ULONG Consumer, SWAPENTRY SavedSwapEntry) DPRINT("MmAllocPage()\n"); - KeAcquireSpinLock(&PageListLock, &oldIrql); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); if (IsListEmpty(&FreeZeroedPageListHead)) { if (IsListEmpty(&FreeUnzeroedPageListHead)) @@ -732,14 +730,14 @@ MmAllocPage(ULONG Consumer, SWAPENTRY SavedSwapEntry) if (MmStats.NrTotalPages == 0) { /* Allocate an early page -- we'll account for it later */ - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); PfnOffset = MmAllocEarlyPage(); MiZeroPage(PfnOffset); return PfnOffset; } DPRINT1("MmAllocPage(): Out of memory\n"); - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); return 0; } ListEntry = RemoveTailList(&FreeUnzeroedPageListHead); @@ -781,7 +779,7 @@ MmAllocPage(ULONG Consumer, SWAPENTRY SavedSwapEntry) MmStats.NrSystemPages++; MmStats.NrFreePages--; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); PfnOffset = PageDescriptor - MmPageArray; if (NeedClear) @@ -835,7 +833,7 @@ MmAllocPagesSpecifyRange(ULONG Consumer, if (HighestPage > MmPageArraySize) HighestPage = MmPageArraySize; - KeAcquireSpinLock(&PageListLock, &oldIrql); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); if (LowestPage == 0 && HighestPage == MmPageArraySize) { PLIST_ENTRY ListEntry; @@ -854,7 +852,7 @@ MmAllocPagesSpecifyRange(ULONG Consumer, { if (NumberOfPagesFound == 0) { - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); DPRINT1("MmAllocPagesSpecifyRange(): Out of memory\n"); return -1; } @@ -925,7 +923,7 @@ MmAllocPagesSpecifyRange(ULONG Consumer, break; } } - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); /* Zero unzero-ed pages */ for (i = 0; i < NumberOfPagesFound; i++) @@ -981,7 +979,7 @@ MmZeroPageThreadMain(PVOID Ignored) return STATUS_SUCCESS; } Count = 0; - KeAcquireSpinLock(&PageListLock, &oldIrql); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); while (!IsListEmpty(&FreeUnzeroedPageListHead)) { ListEntry = RemoveTailList(&FreeUnzeroedPageListHead); @@ -989,11 +987,11 @@ MmZeroPageThreadMain(PVOID Ignored) PageDescriptor = CONTAINING_RECORD(ListEntry, PHYSICAL_PAGE, ListEntry); /* We set the page to used, because MmCreateVirtualMapping failed with unused pages */ PageDescriptor->Flags.Type = MM_PHYSICAL_PAGE_USED; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); Pfn = PageDescriptor - MmPageArray; Status = MiZeroPage(Pfn); - KeAcquireSpinLock(&PageListLock, &oldIrql); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); if (PageDescriptor->MapCount != 0) { DPRINT1("Mapped page on freelist.\n"); @@ -1015,7 +1013,7 @@ MmZeroPageThreadMain(PVOID Ignored) } DPRINT("Zeroed %d pages.\n", Count); KeResetEvent(&ZeroPageThreadEvent); - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); } return STATUS_SUCCESS; diff --git a/reactos/ntoskrnl/mm/i386/page.c b/reactos/ntoskrnl/mm/i386/page.c index 44461618bdc..6e6fdba36ec 100644 --- a/reactos/ntoskrnl/mm/i386/page.c +++ b/reactos/ntoskrnl/mm/i386/page.c @@ -52,9 +52,9 @@ ULONG MmGlobalKernelPageDirectory[1024]; #else __inline LARGE_INTEGER PTE_TO_PAGE(ULONG npage) { - LARGE_INTEGER dummy; - dummy.QuadPart = (LONGLONG)(PAGE_MASK(npage)); - return dummy; + LARGE_INTEGER dummy; + dummy.QuadPart = (LONGLONG)(PAGE_MASK(npage)); + return dummy; } #endif @@ -66,28 +66,28 @@ ULONG_PTR NTAPI MiFlushTlbIpiRoutine(ULONG_PTR Address) { - if (Address == (ULONG_PTR)-1) - { - KeFlushCurrentTb(); - } - else if (Address == (ULONG_PTR)-2) - { - KeFlushCurrentTb(); - } - else - { - __invlpg((PVOID)Address); - } - return 0; + if (Address == (ULONG_PTR)-1) + { + KeFlushCurrentTb(); + } + else if (Address == (ULONG_PTR)-2) + { + KeFlushCurrentTb(); + } + else + { + __invlpg((PVOID)Address); + } + return 0; } VOID MiFlushTlb(PULONG Pt, PVOID Address) { - if ((Pt && MmUnmapPageTable(Pt)) || Address >= MmSystemRangeStart) - { - __invlpg(Address); - } + if ((Pt && MmUnmapPageTable(Pt)) || Address >= MmSystemRangeStart) + { + __invlpg(Address); + } } @@ -95,74 +95,74 @@ MiFlushTlb(PULONG Pt, PVOID Address) PULONG MmGetPageDirectory(VOID) { - return (PULONG)__readcr3(); + return (PULONG)__readcr3(); } static ULONG ProtectToPTE(ULONG flProtect) { - ULONG Attributes = 0; - - if (flProtect & (PAGE_NOACCESS|PAGE_GUARD)) - { - Attributes = 0; - } - else if (flProtect & PAGE_IS_WRITABLE) - { - Attributes = PA_PRESENT | PA_READWRITE; - } - else if (flProtect & (PAGE_IS_READABLE | PAGE_IS_EXECUTABLE)) - { - Attributes = PA_PRESENT; - } - else - { - DPRINT1("Unknown main protection type.\n"); - KEBUGCHECK(0); - } + ULONG Attributes = 0; - if (flProtect & PAGE_SYSTEM) - { - } - else - { - Attributes = Attributes | PA_USER; - } - if (flProtect & PAGE_NOCACHE) - { - Attributes = Attributes | PA_CD; - } - if (flProtect & PAGE_WRITETHROUGH) - { - Attributes = Attributes | PA_WT; - } - return(Attributes); + if (flProtect & (PAGE_NOACCESS|PAGE_GUARD)) + { + Attributes = 0; + } + else if (flProtect & PAGE_IS_WRITABLE) + { + Attributes = PA_PRESENT | PA_READWRITE; + } + else if (flProtect & (PAGE_IS_READABLE | PAGE_IS_EXECUTABLE)) + { + Attributes = PA_PRESENT; + } + else + { + DPRINT1("Unknown main protection type.\n"); + KEBUGCHECK(0); + } + + if (flProtect & PAGE_SYSTEM) + { + } + else + { + Attributes = Attributes | PA_USER; + } + if (flProtect & PAGE_NOCACHE) + { + Attributes = Attributes | PA_CD; + } + if (flProtect & PAGE_WRITETHROUGH) + { + Attributes = Attributes | PA_WT; + } + return(Attributes); } NTSTATUS NTAPI Mmi386ReleaseMmInfo(PEPROCESS Process) { - PUSHORT LdtDescriptor; - ULONG LdtBase; - PULONG PageDir; - ULONG i; - - DPRINT("Mmi386ReleaseMmInfo(Process %x)\n",Process); - - LdtDescriptor = (PUSHORT) &Process->Pcb.LdtDescriptor; - LdtBase = LdtDescriptor[1] | - ((LdtDescriptor[2] & 0xff) << 16) | - ((LdtDescriptor[3] & ~0xff) << 16); - - DPRINT("LdtBase: %x\n", LdtBase); - - if (LdtBase) - { - ExFreePool((PVOID) LdtBase); - } - - PageDir = MmCreateHyperspaceMapping(PTE_TO_PFN(Process->Pcb.DirectoryTableBase.u.LowPart)); + PUSHORT LdtDescriptor; + ULONG LdtBase; + PULONG PageDir; + ULONG i; + + DPRINT("Mmi386ReleaseMmInfo(Process %x)\n",Process); + + LdtDescriptor = (PUSHORT) &Process->Pcb.LdtDescriptor; + LdtBase = LdtDescriptor[1] | + ((LdtDescriptor[2] & 0xff) << 16) | + ((LdtDescriptor[3] & ~0xff) << 16); + + DPRINT("LdtBase: %x\n", LdtBase); + + if (LdtBase) + { + ExFreePool((PVOID) LdtBase); + } + + PageDir = MmCreateHyperspaceMapping(PTE_TO_PFN(Process->Pcb.DirectoryTableBase[0])); for (i = 0; i < ADDR_TO_PDE_OFFSET(MmSystemRangeStart); i++) { if (PageDir[i] != 0) @@ -173,32 +173,28 @@ Mmi386ReleaseMmInfo(PEPROCESS Process) } MmReleasePageMemoryConsumer(MC_NPPOOL, PTE_TO_PFN(PageDir[ADDR_TO_PDE_OFFSET(HYPERSPACE)])); MmDeleteHyperspaceMapping(PageDir); - MmReleasePageMemoryConsumer(MC_NPPOOL, PTE_TO_PFN(Process->Pcb.DirectoryTableBase.u.LowPart)); - -#if defined(__GNUC__) + MmReleasePageMemoryConsumer(MC_NPPOOL, PTE_TO_PFN(Process->Pcb.DirectoryTableBase[0])); - Process->Pcb.DirectoryTableBase.QuadPart = 0LL; -#else + Process->Pcb.DirectoryTableBase[0] = 0; + Process->Pcb.DirectoryTableBase[1] = 0; - Process->Pcb.DirectoryTableBase.QuadPart = 0; -#endif - - DPRINT("Finished Mmi386ReleaseMmInfo()\n"); - return(STATUS_SUCCESS); + DPRINT("Finished Mmi386ReleaseMmInfo()\n"); + return(STATUS_SUCCESS); } NTSTATUS NTAPI MmInitializeHandBuiltProcess(IN PEPROCESS Process, - IN PLARGE_INTEGER DirectoryTableBase) + IN PULONG_PTR DirectoryTableBase) { /* Share the directory base with the idle process */ - *DirectoryTableBase = PsGetCurrentProcess()->Pcb.DirectoryTableBase; - + DirectoryTableBase[0] = PsGetCurrentProcess()->Pcb.DirectoryTableBase[0]; + DirectoryTableBase[1] = PsGetCurrentProcess()->Pcb.DirectoryTableBase[1]; + /* Initialize the Addresss Space */ KeInitializeGuardedMutex(&Process->AddressCreationLock); Process->VadRoot.BalancedRoot.u1.Parent = NULL; - + /* The process now has an address space */ Process->HasAddressSpace = TRUE; return STATUS_SUCCESS; @@ -208,239 +204,240 @@ BOOLEAN STDCALL MmCreateProcessAddressSpace(IN ULONG MinWs, IN PEPROCESS Process, - IN PLARGE_INTEGER DirectoryTableBase) + IN PULONG DirectoryTableBase) { - NTSTATUS Status; - ULONG i, j; - PFN_TYPE Pfn[2]; - PULONG PageDirectory; - - DPRINT("MmCopyMmInfo(Src %x, Dest %x)\n", MinWs, Process); - - for (i = 0; i < 2; i++) - { - Status = MmRequestPageMemoryConsumer(MC_NPPOOL, FALSE, &Pfn[i]); - if (!NT_SUCCESS(Status)) - { - for (j = 0; j < i; j++) - { - MmReleasePageMemoryConsumer(MC_NPPOOL, Pfn[j]); - } - - return FALSE; - } - } - - PageDirectory = MmCreateHyperspaceMapping(Pfn[0]); - - memcpy(PageDirectory + ADDR_TO_PDE_OFFSET(MmSystemRangeStart), - MmGlobalKernelPageDirectory + ADDR_TO_PDE_OFFSET(MmSystemRangeStart), - (1024 - ADDR_TO_PDE_OFFSET(MmSystemRangeStart)) * sizeof(ULONG)); - - DPRINT("Addr %x\n",ADDR_TO_PDE_OFFSET(PAGETABLE_MAP)); - PageDirectory[ADDR_TO_PDE_OFFSET(PAGETABLE_MAP)] = PFN_TO_PTE(Pfn[0]) | PA_PRESENT | PA_READWRITE; - PageDirectory[ADDR_TO_PDE_OFFSET(HYPERSPACE)] = PFN_TO_PTE(Pfn[1]) | PA_PRESENT | PA_READWRITE; - - MmDeleteHyperspaceMapping(PageDirectory); - - DirectoryTableBase->QuadPart = PFN_TO_PTE(Pfn[0]); - DPRINT("Finished MmCopyMmInfo(): %I64x\n", DirectoryTableBase->QuadPart); - return TRUE; + NTSTATUS Status; + ULONG i, j; + PFN_TYPE Pfn[2]; + PULONG_PTR PageDirectory; + + DPRINT("MmCopyMmInfo(Src %x, Dest %x)\n", MinWs, Process); + + for (i = 0; i < 2; i++) + { + Status = MmRequestPageMemoryConsumer(MC_NPPOOL, FALSE, &Pfn[i]); + if (!NT_SUCCESS(Status)) + { + for (j = 0; j < i; j++) + { + MmReleasePageMemoryConsumer(MC_NPPOOL, Pfn[j]); + } + + return FALSE; + } + } + + PageDirectory = MmCreateHyperspaceMapping(Pfn[0]); + + memcpy(PageDirectory + ADDR_TO_PDE_OFFSET(MmSystemRangeStart), + MmGlobalKernelPageDirectory + ADDR_TO_PDE_OFFSET(MmSystemRangeStart), + (1024 - ADDR_TO_PDE_OFFSET(MmSystemRangeStart)) * sizeof(ULONG)); + + DPRINT("Addr %x\n",ADDR_TO_PDE_OFFSET(PAGETABLE_MAP)); + PageDirectory[ADDR_TO_PDE_OFFSET(PAGETABLE_MAP)] = PFN_TO_PTE(Pfn[0]) | PA_PRESENT | PA_READWRITE; + PageDirectory[ADDR_TO_PDE_OFFSET(HYPERSPACE)] = PFN_TO_PTE(Pfn[1]) | PA_PRESENT | PA_READWRITE; + + MmDeleteHyperspaceMapping(PageDirectory); + + DirectoryTableBase[0] = PFN_TO_PTE(Pfn[0]); + DirectoryTableBase[1] = 0; + DPRINT("Finished MmCopyMmInfo(): 0x%x\n", DirectoryTableBase[0]); + return TRUE; } VOID NTAPI MmDeletePageTable(PEPROCESS Process, PVOID Address) { - PEPROCESS CurrentProcess = PsGetCurrentProcess(); - - if (Process != NULL && Process != CurrentProcess) - { - KeAttachProcess(&Process->Pcb); - } - - MiAddressToPde(Address)->u.Long = 0; - MiFlushTlb((PULONG)MiAddressToPde(Address), - MiAddressToPte(Address)); - - if (Address >= MmSystemRangeStart) - { - KEBUGCHECK(0); - // MmGlobalKernelPageDirectory[ADDR_TO_PDE_OFFSET(Address)] = 0; - } - if (Process != NULL && Process != CurrentProcess) - { - KeDetachProcess(); - } + PEPROCESS CurrentProcess = PsGetCurrentProcess(); + + if (Process != NULL && Process != CurrentProcess) + { + KeAttachProcess(&Process->Pcb); + } + + MiAddressToPde(Address)->u.Long = 0; + MiFlushTlb((PULONG)MiAddressToPde(Address), + MiAddressToPte(Address)); + + if (Address >= MmSystemRangeStart) + { + KEBUGCHECK(0); + // MmGlobalKernelPageDirectory[ADDR_TO_PDE_OFFSET(Address)] = 0; + } + if (Process != NULL && Process != CurrentProcess) + { + KeDetachProcess(); + } } VOID NTAPI MmFreePageTable(PEPROCESS Process, PVOID Address) { - PEPROCESS CurrentProcess = PsGetCurrentProcess(); - ULONG i; - PFN_TYPE Pfn; - PULONG PageTable; - - DPRINT("ProcessId %d, Address %x\n", Process->UniqueProcessId, Address); - if (Process != NULL && Process != CurrentProcess) - { - KeAttachProcess(&Process->Pcb); - } - - PageTable = (PULONG)PAGE_ROUND_DOWN((PVOID)MiAddressToPte(Address)); - for (i = 0; i < 1024; i++) - { - if (PageTable[i] != 0) - { + PEPROCESS CurrentProcess = PsGetCurrentProcess(); + ULONG i; + PFN_TYPE Pfn; + PULONG PageTable; + + DPRINT("ProcessId %d, Address %x\n", Process->UniqueProcessId, Address); + if (Process != NULL && Process != CurrentProcess) + { + KeAttachProcess(&Process->Pcb); + } + + PageTable = (PULONG)PAGE_ROUND_DOWN((PVOID)MiAddressToPte(Address)); + for (i = 0; i < 1024; i++) + { + if (PageTable[i] != 0) + { DbgPrint("Page table entry not clear at %x/%x (is %x)\n", ((ULONG)Address / (4*1024*1024)), i, PageTable[i]); KEBUGCHECK(0); - } - } - Pfn = MiAddressToPde(Address)->u.Hard.PageFrameNumber; - MiAddressToPde(Address)->u.Long = 0; - MiFlushTlb((PULONG)MiAddressToPde(Address), MiAddressToPte(Address)); - - if (Address >= MmSystemRangeStart) - { - // MmGlobalKernelPageDirectory[ADDR_TO_PDE_OFFSET(Address)] = 0; - KEBUGCHECK(0); - } - else - { - MmReleasePageMemoryConsumer(MC_NPPOOL, Pfn); - } - if (Process != NULL && Process != CurrentProcess) - { - KeDetachProcess(); - } + } + } + Pfn = MiAddressToPde(Address)->u.Hard.PageFrameNumber; + MiAddressToPde(Address)->u.Long = 0; + MiFlushTlb((PULONG)MiAddressToPde(Address), MiAddressToPte(Address)); + + if (Address >= MmSystemRangeStart) + { + // MmGlobalKernelPageDirectory[ADDR_TO_PDE_OFFSET(Address)] = 0; + KEBUGCHECK(0); + } + else + { + MmReleasePageMemoryConsumer(MC_NPPOOL, Pfn); + } + if (Process != NULL && Process != CurrentProcess) + { + KeDetachProcess(); + } } static PULONG MmGetPageTableForProcess(PEPROCESS Process, PVOID Address, BOOLEAN Create) { - ULONG PdeOffset = ADDR_TO_PDE_OFFSET(Address); - NTSTATUS Status; - PFN_TYPE Pfn; - ULONG Entry; - PULONG Pt, PageDir; - - if (Address < MmSystemRangeStart && Process && Process != PsGetCurrentProcess()) - { - PageDir = MmCreateHyperspaceMapping(PTE_TO_PFN(Process->Pcb.DirectoryTableBase.LowPart)); - if (PageDir == NULL) - { - KEBUGCHECK(0); - } - if (0 == InterlockedCompareExchangeUL(&PageDir[PdeOffset], 0, 0)) - { - if (Create == FALSE) - { - MmDeleteHyperspaceMapping(PageDir); - return NULL; - } - Status = MmRequestPageMemoryConsumer(MC_NPPOOL, FALSE, &Pfn); - if (!NT_SUCCESS(Status) || Pfn == 0) - { - KEBUGCHECK(0); - } - Entry = InterlockedCompareExchangeUL(&PageDir[PdeOffset], PFN_TO_PTE(Pfn) | PA_PRESENT | PA_READWRITE | PA_USER, 0); - if (Entry != 0) - { - MmReleasePageMemoryConsumer(MC_NPPOOL, Pfn); - Pfn = PTE_TO_PFN(Entry); - } - } - else - { - Pfn = PTE_TO_PFN(PageDir[PdeOffset]); - } - MmDeleteHyperspaceMapping(PageDir); - Pt = MmCreateHyperspaceMapping(Pfn); - if (Pt == NULL) - { - KEBUGCHECK(0); - } - return Pt + ADDR_TO_PTE_OFFSET(Address); - } - PageDir = (PULONG)MiAddressToPde(Address); - if (0 == InterlockedCompareExchangeUL(PageDir, 0, 0)) - { - if (Address >= MmSystemRangeStart) - { - if (0 == InterlockedCompareExchangeUL(&MmGlobalKernelPageDirectory[PdeOffset], 0, 0)) - { - if (Create == FALSE) - { - return NULL; - } + ULONG PdeOffset = ADDR_TO_PDE_OFFSET(Address); + NTSTATUS Status; + PFN_TYPE Pfn; + ULONG Entry; + PULONG Pt, PageDir; + + if (Address < MmSystemRangeStart && Process && Process != PsGetCurrentProcess()) + { + PageDir = MmCreateHyperspaceMapping(PTE_TO_PFN(Process->Pcb.DirectoryTableBase[0])); + if (PageDir == NULL) + { + KEBUGCHECK(0); + } + if (0 == InterlockedCompareExchangeUL(&PageDir[PdeOffset], 0, 0)) + { + if (Create == FALSE) + { + MmDeleteHyperspaceMapping(PageDir); + return NULL; + } Status = MmRequestPageMemoryConsumer(MC_NPPOOL, FALSE, &Pfn); - if (!NT_SUCCESS(Status) || Pfn == 0) - { - KEBUGCHECK(0); - } - Entry = PFN_TO_PTE(Pfn) | PA_PRESENT | PA_READWRITE; - if (Ke386GlobalPagesEnabled) - { - Entry |= PA_GLOBAL; - } - if(0 != InterlockedCompareExchangeUL(&MmGlobalKernelPageDirectory[PdeOffset], Entry, 0)) - { - MmReleasePageMemoryConsumer(MC_NPPOOL, Pfn); - } - } - (void)InterlockedExchangeUL(PageDir, MmGlobalKernelPageDirectory[PdeOffset]); - } - else - { - if (Create == FALSE) - { - return NULL; - } - Status = MmRequestPageMemoryConsumer(MC_NPPOOL, FALSE, &Pfn); - if (!NT_SUCCESS(Status) || Pfn == 0) - { - KEBUGCHECK(0); - } - Entry = InterlockedCompareExchangeUL(PageDir, PFN_TO_PTE(Pfn) | PA_PRESENT | PA_READWRITE | PA_USER, 0); - if (Entry != 0) - { - MmReleasePageMemoryConsumer(MC_NPPOOL, Pfn); - } - } - } - return (PULONG)MiAddressToPte(Address); + if (!NT_SUCCESS(Status) || Pfn == 0) + { + KEBUGCHECK(0); + } + Entry = InterlockedCompareExchangeUL(&PageDir[PdeOffset], PFN_TO_PTE(Pfn) | PA_PRESENT | PA_READWRITE | PA_USER, 0); + if (Entry != 0) + { + MmReleasePageMemoryConsumer(MC_NPPOOL, Pfn); + Pfn = PTE_TO_PFN(Entry); + } + } + else + { + Pfn = PTE_TO_PFN(PageDir[PdeOffset]); + } + MmDeleteHyperspaceMapping(PageDir); + Pt = MmCreateHyperspaceMapping(Pfn); + if (Pt == NULL) + { + KEBUGCHECK(0); + } + return Pt + ADDR_TO_PTE_OFFSET(Address); + } + PageDir = (PULONG)MiAddressToPde(Address); + if (0 == InterlockedCompareExchangeUL(PageDir, 0, 0)) + { + if (Address >= MmSystemRangeStart) + { + if (0 == InterlockedCompareExchangeUL(&MmGlobalKernelPageDirectory[PdeOffset], 0, 0)) + { + if (Create == FALSE) + { + return NULL; + } + Status = MmRequestPageMemoryConsumer(MC_NPPOOL, FALSE, &Pfn); + if (!NT_SUCCESS(Status) || Pfn == 0) + { + KEBUGCHECK(0); + } + Entry = PFN_TO_PTE(Pfn) | PA_PRESENT | PA_READWRITE; + if (Ke386GlobalPagesEnabled) + { + Entry |= PA_GLOBAL; + } + if(0 != InterlockedCompareExchangeUL(&MmGlobalKernelPageDirectory[PdeOffset], Entry, 0)) + { + MmReleasePageMemoryConsumer(MC_NPPOOL, Pfn); + } + } + (void)InterlockedExchangeUL(PageDir, MmGlobalKernelPageDirectory[PdeOffset]); + } + else + { + if (Create == FALSE) + { + return NULL; + } + Status = MmRequestPageMemoryConsumer(MC_NPPOOL, FALSE, &Pfn); + if (!NT_SUCCESS(Status) || Pfn == 0) + { + KEBUGCHECK(0); + } + Entry = InterlockedCompareExchangeUL(PageDir, PFN_TO_PTE(Pfn) | PA_PRESENT | PA_READWRITE | PA_USER, 0); + if (Entry != 0) + { + MmReleasePageMemoryConsumer(MC_NPPOOL, Pfn); + } + } + } + return (PULONG)MiAddressToPte(Address); } BOOLEAN MmUnmapPageTable(PULONG Pt) { - if (Pt >= (PULONG)PAGETABLE_MAP && Pt < (PULONG)PAGETABLE_MAP + 1024*1024) - { - return TRUE; - } - - if (Pt) - { - MmDeleteHyperspaceMapping((PVOID)PAGE_ROUND_DOWN(Pt)); - } - return FALSE; + if (Pt >= (PULONG)PAGETABLE_MAP && Pt < (PULONG)PAGETABLE_MAP + 1024*1024) + { + return TRUE; + } + + if (Pt) + { + MmDeleteHyperspaceMapping((PVOID)PAGE_ROUND_DOWN(Pt)); + } + return FALSE; } static ULONG MmGetPageEntryForProcess(PEPROCESS Process, PVOID Address) { - ULONG Pte; - PULONG Pt; - - Pt = MmGetPageTableForProcess(Process, Address, FALSE); - if (Pt) - { - Pte = *Pt; - MmUnmapPageTable(Pt); - return Pte; - } - return 0; + ULONG Pte; + PULONG Pt; + + Pt = MmGetPageTableForProcess(Process, Address, FALSE); + if (Pt) + { + Pte = *Pt; + MmUnmapPageTable(Pt); + return Pte; + } + return 0; } PFN_TYPE @@ -448,13 +445,13 @@ NTAPI MmGetPfnForProcess(PEPROCESS Process, PVOID Address) { - ULONG Entry; - Entry = MmGetPageEntryForProcess(Process, Address); - if (!(Entry & PA_PRESENT)) - { - return 0; - } - return(PTE_TO_PFN(Entry)); + ULONG Entry; + Entry = MmGetPageEntryForProcess(Process, Address); + if (!(Entry & PA_PRESENT)) + { + return 0; + } + return(PTE_TO_PFN(Entry)); } VOID @@ -464,58 +461,58 @@ MmDisableVirtualMapping(PEPROCESS Process, PVOID Address, BOOLEAN* WasDirty, PPF * FUNCTION: Delete a virtual mapping */ { - BOOLEAN WasValid; - ULONG Pte; - PULONG Pt; - - Pt = MmGetPageTableForProcess(Process, Address, FALSE); - if (Pt == NULL) - { - KEBUGCHECK(0); - } - /* - * Atomically disable the present bit and get the old value. - */ - do - { + BOOLEAN WasValid; + ULONG Pte; + PULONG Pt; + + Pt = MmGetPageTableForProcess(Process, Address, FALSE); + if (Pt == NULL) + { + KEBUGCHECK(0); + } + /* + * Atomically disable the present bit and get the old value. + */ + do + { Pte = *Pt; - } while (Pte != InterlockedCompareExchangeUL(Pt, Pte & ~PA_PRESENT, Pte)); - - MiFlushTlb(Pt, Address); - WasValid = (PAGE_MASK(Pte) != 0); - if (!WasValid) - { - KEBUGCHECK(0); - } - - /* - * Return some information to the caller - */ - if (WasDirty != NULL) - { - *WasDirty = Pte & PA_DIRTY; - } - if (Page != NULL) - { - *Page = PTE_TO_PFN(Pte); - } + } while (Pte != InterlockedCompareExchangeUL(Pt, Pte & ~PA_PRESENT, Pte)); + + MiFlushTlb(Pt, Address); + WasValid = (PAGE_MASK(Pte) != 0); + if (!WasValid) + { + KEBUGCHECK(0); + } + + /* + * Return some information to the caller + */ + if (WasDirty != NULL) + { + *WasDirty = Pte & PA_DIRTY; + } + if (Page != NULL) + { + *Page = PTE_TO_PFN(Pte); + } } VOID NTAPI MmRawDeleteVirtualMapping(PVOID Address) { - PULONG Pt; - - Pt = MmGetPageTableForProcess(NULL, Address, FALSE); - if (Pt && *Pt) - { - /* - * Set the entry to zero - */ - (void)InterlockedExchangeUL(Pt, 0); - MiFlushTlb(Pt, Address); - } + PULONG Pt; + + Pt = MmGetPageTableForProcess(NULL, Address, FALSE); + if (Pt && *Pt) + { + /* + * Set the entry to zero + */ + (void)InterlockedExchangeUL(Pt, 0); + MiFlushTlb(Pt, Address); + } } VOID @@ -526,63 +523,63 @@ MmDeleteVirtualMapping(PEPROCESS Process, PVOID Address, BOOLEAN FreePage, * FUNCTION: Delete a virtual mapping */ { - BOOLEAN WasValid = FALSE; - PFN_TYPE Pfn; - ULONG Pte; - PULONG Pt; - - DPRINT("MmDeleteVirtualMapping(%x, %x, %d, %x, %x)\n", - Process, Address, FreePage, WasDirty, Page); - - Pt = MmGetPageTableForProcess(Process, Address, FALSE); - - if (Pt == NULL) - { - if (WasDirty != NULL) - { + BOOLEAN WasValid = FALSE; + PFN_TYPE Pfn; + ULONG Pte; + PULONG Pt; + + DPRINT("MmDeleteVirtualMapping(%x, %x, %d, %x, %x)\n", + Process, Address, FreePage, WasDirty, Page); + + Pt = MmGetPageTableForProcess(Process, Address, FALSE); + + if (Pt == NULL) + { + if (WasDirty != NULL) + { *WasDirty = FALSE; - } - if (Page != NULL) - { + } + if (Page != NULL) + { *Page = 0; - } - return; - } - - /* - * Atomically set the entry to zero and get the old value. - */ - Pte = InterlockedExchangeUL(Pt, 0); - - MiFlushTlb(Pt, Address); - - WasValid = (PAGE_MASK(Pte) != 0); - if (WasValid) - { - Pfn = PTE_TO_PFN(Pte); - MmMarkPageUnmapped(Pfn); - } - else - { - Pfn = 0; - } - - if (FreePage && WasValid) - { - MmReleasePageMemoryConsumer(MC_NPPOOL, Pfn); - } - - /* - * Return some information to the caller - */ - if (WasDirty != NULL) - { - *WasDirty = Pte & PA_DIRTY ? TRUE : FALSE; - } - if (Page != NULL) - { - *Page = Pfn; - } + } + return; + } + + /* + * Atomically set the entry to zero and get the old value. + */ + Pte = InterlockedExchangeUL(Pt, 0); + + MiFlushTlb(Pt, Address); + + WasValid = (PAGE_MASK(Pte) != 0); + if (WasValid) + { + Pfn = PTE_TO_PFN(Pte); + MmMarkPageUnmapped(Pfn); + } + else + { + Pfn = 0; + } + + if (FreePage && WasValid) + { + MmReleasePageMemoryConsumer(MC_NPPOOL, Pfn); + } + + /* + * Return some information to the caller + */ + if (WasDirty != NULL) + { + *WasDirty = Pte & PA_DIRTY ? TRUE : FALSE; + } + if (Page != NULL) + { + *Page = Pfn; + } } VOID @@ -593,51 +590,51 @@ MmDeletePageFileMapping(PEPROCESS Process, PVOID Address, * FUNCTION: Delete a virtual mapping */ { - ULONG Pte; - PULONG Pt; - - Pt = MmGetPageTableForProcess(Process, Address, FALSE); - - if (Pt == NULL) - { - *SwapEntry = 0; - return; - } - - /* - * Atomically set the entry to zero and get the old value. - */ - Pte = InterlockedExchangeUL(Pt, 0); - - MiFlushTlb(Pt, Address); - - /* - * Return some information to the caller - */ - *SwapEntry = Pte >> 1; + ULONG Pte; + PULONG Pt; + + Pt = MmGetPageTableForProcess(Process, Address, FALSE); + + if (Pt == NULL) + { + *SwapEntry = 0; + return; + } + + /* + * Atomically set the entry to zero and get the old value. + */ + Pte = InterlockedExchangeUL(Pt, 0); + + MiFlushTlb(Pt, Address); + + /* + * Return some information to the caller + */ + *SwapEntry = Pte >> 1; } BOOLEAN Mmi386MakeKernelPageTableGlobal(PVOID PAddress) { - PULONG Pt, Pde; - Pde = (PULONG)MiAddressToPde(PAddress); - if (*Pde == 0) - { - Pt = MmGetPageTableForProcess(NULL, PAddress, FALSE); - if (Pt != NULL) - { + PULONG Pt, Pde; + Pde = (PULONG)MiAddressToPde(PAddress); + if (*Pde == 0) + { + Pt = MmGetPageTableForProcess(NULL, PAddress, FALSE); + if (Pt != NULL) + { return TRUE; - } - } - return(FALSE); + } + } + return(FALSE); } BOOLEAN NTAPI MmIsDirtyPage(PEPROCESS Process, PVOID Address) { - return MmGetPageEntryForProcess(Process, Address) & PA_DIRTY ? TRUE : FALSE; + return MmGetPageEntryForProcess(Process, Address) & PA_DIRTY ? TRUE : FALSE; } BOOLEAN @@ -646,24 +643,24 @@ MmIsAccessedAndResetAccessPage(PEPROCESS Process, PVOID Address) { PULONG Pt; ULONG Pte; - + if (Address < MmSystemRangeStart && Process == NULL) { DPRINT1("MmIsAccessedAndResetAccessPage is called for user space without a process.\n"); KEBUGCHECK(0); } - + Pt = MmGetPageTableForProcess(Process, Address, FALSE); if (Pt == NULL) { KEBUGCHECK(0); } - + do { Pte = *Pt; } while (Pte != InterlockedCompareExchangeUL(Pt, Pte & ~PA_ACCESSED, Pte)); - + if (Pte & PA_ACCESSED) { MiFlushTlb(Pt, Address); @@ -682,25 +679,25 @@ MmSetCleanPage(PEPROCESS Process, PVOID Address) { PULONG Pt; ULONG Pte; - + if (Address < MmSystemRangeStart && Process == NULL) { DPRINT1("MmSetCleanPage is called for user space without a process.\n"); KEBUGCHECK(0); } - + Pt = MmGetPageTableForProcess(Process, Address, FALSE); - + if (Pt == NULL) { KEBUGCHECK(0); } - + do { Pte = *Pt; } while (Pte != InterlockedCompareExchangeUL(Pt, Pte & ~PA_DIRTY, Pte)); - + if (Pte & PA_DIRTY) { MiFlushTlb(Pt, Address); @@ -715,76 +712,76 @@ VOID NTAPI MmSetDirtyPage(PEPROCESS Process, PVOID Address) { - PULONG Pt; - ULONG Pte; - - if (Address < MmSystemRangeStart && Process == NULL) - { - DPRINT1("MmSetDirtyPage is called for user space without a process.\n"); - KEBUGCHECK(0); - } - - Pt = MmGetPageTableForProcess(Process, Address, FALSE); - if (Pt == NULL) - { - KEBUGCHECK(0); - } - - do - { - Pte = *Pt; - } while (Pte != InterlockedCompareExchangeUL(Pt, Pte | PA_DIRTY, Pte)); - if (!(Pte & PA_DIRTY)) - { - MiFlushTlb(Pt, Address); - } - else - { - MmUnmapPageTable(Pt); - } + PULONG Pt; + ULONG Pte; + + if (Address < MmSystemRangeStart && Process == NULL) + { + DPRINT1("MmSetDirtyPage is called for user space without a process.\n"); + KEBUGCHECK(0); + } + + Pt = MmGetPageTableForProcess(Process, Address, FALSE); + if (Pt == NULL) + { + KEBUGCHECK(0); + } + + do + { + Pte = *Pt; + } while (Pte != InterlockedCompareExchangeUL(Pt, Pte | PA_DIRTY, Pte)); + if (!(Pte & PA_DIRTY)) + { + MiFlushTlb(Pt, Address); + } + else + { + MmUnmapPageTable(Pt); + } } VOID NTAPI MmEnableVirtualMapping(PEPROCESS Process, PVOID Address) { - PULONG Pt; - ULONG Pte; - - Pt = MmGetPageTableForProcess(Process, Address, FALSE); - if (Pt == NULL) - { - KEBUGCHECK(0); - } - - do - { - Pte = *Pt; - } while (Pte != InterlockedCompareExchangeUL(Pt, Pte | PA_PRESENT, Pte)); - if (!(Pte & PA_PRESENT)) - { - MiFlushTlb(Pt, Address); - } - else - { - MmUnmapPageTable(Pt); - } + PULONG Pt; + ULONG Pte; + + Pt = MmGetPageTableForProcess(Process, Address, FALSE); + if (Pt == NULL) + { + KEBUGCHECK(0); + } + + do + { + Pte = *Pt; + } while (Pte != InterlockedCompareExchangeUL(Pt, Pte | PA_PRESENT, Pte)); + if (!(Pte & PA_PRESENT)) + { + MiFlushTlb(Pt, Address); + } + else + { + MmUnmapPageTable(Pt); + } } BOOLEAN NTAPI MmIsPagePresent(PEPROCESS Process, PVOID Address) { - return MmGetPageEntryForProcess(Process, Address) & PA_PRESENT ? TRUE : FALSE; + return MmGetPageEntryForProcess(Process, Address) & PA_PRESENT ? TRUE : FALSE; } BOOLEAN NTAPI MmIsPageSwapEntry(PEPROCESS Process, PVOID Address) { - ULONG Entry; - Entry = MmGetPageEntryForProcess(Process, Address); - return !(Entry & PA_PRESENT) && Entry != 0 ? TRUE : FALSE; + ULONG Entry; + Entry = MmGetPageEntryForProcess(Process, Address); + return !(Entry & PA_PRESENT) && Entry != 0 ? TRUE : FALSE; } NTSTATUS @@ -792,80 +789,80 @@ NTAPI MmCreateVirtualMappingForKernel(PVOID Address, ULONG flProtect, PPFN_TYPE Pages, - ULONG PageCount) + ULONG PageCount) { - ULONG Attributes; - ULONG i; - PVOID Addr; - ULONG PdeOffset, oldPdeOffset; - PULONG Pt; - ULONG Pte; - BOOLEAN NoExecute = FALSE; - - DPRINT("MmCreateVirtualMappingForKernel(%x, %x, %x, %d)\n", + ULONG Attributes; + ULONG i; + PVOID Addr; + ULONG PdeOffset, oldPdeOffset; + PULONG Pt; + ULONG Pte; + BOOLEAN NoExecute = FALSE; + + DPRINT("MmCreateVirtualMappingForKernel(%x, %x, %x, %d)\n", Address, flProtect, Pages, PageCount); - - if (Address < MmSystemRangeStart) - { - DPRINT1("MmCreateVirtualMappingForKernel is called for user space\n"); - KEBUGCHECK(0); - } - - Attributes = ProtectToPTE(flProtect); - if (Attributes & 0x80000000) - { - NoExecute = TRUE; - } - Attributes &= 0xfff; - if (Ke386GlobalPagesEnabled) - { - Attributes |= PA_GLOBAL; - } - - Addr = Address; - - oldPdeOffset = ADDR_TO_PDE_OFFSET(Addr); - Pt = MmGetPageTableForProcess(NULL, Addr, TRUE); - if (Pt == NULL) - { - KEBUGCHECK(0); - } - Pt--; - - for (i = 0; i < PageCount; i++, Addr = (PVOID)((ULONG_PTR)Addr + PAGE_SIZE)) - { - if (!(Attributes & PA_PRESENT) && Pages[i] != 0) - { + + if (Address < MmSystemRangeStart) + { + DPRINT1("MmCreateVirtualMappingForKernel is called for user space\n"); + KEBUGCHECK(0); + } + + Attributes = ProtectToPTE(flProtect); + if (Attributes & 0x80000000) + { + NoExecute = TRUE; + } + Attributes &= 0xfff; + if (Ke386GlobalPagesEnabled) + { + Attributes |= PA_GLOBAL; + } + + Addr = Address; + + oldPdeOffset = ADDR_TO_PDE_OFFSET(Addr); + Pt = MmGetPageTableForProcess(NULL, Addr, TRUE); + if (Pt == NULL) + { + KEBUGCHECK(0); + } + Pt--; + + for (i = 0; i < PageCount; i++, Addr = (PVOID)((ULONG_PTR)Addr + PAGE_SIZE)) + { + if (!(Attributes & PA_PRESENT) && Pages[i] != 0) + { DPRINT1("Setting physical address but not allowing access at address " "0x%.8X with attributes %x/%x.\n", Addr, Attributes, flProtect); KEBUGCHECK(0); - } - - PdeOffset = ADDR_TO_PDE_OFFSET(Addr); - if (oldPdeOffset != PdeOffset) - { + } + + PdeOffset = ADDR_TO_PDE_OFFSET(Addr); + if (oldPdeOffset != PdeOffset) + { Pt = MmGetPageTableForProcess(NULL, Addr, TRUE); - if (Pt == NULL) - { - KEBUGCHECK(0); - } - } - else - { + if (Pt == NULL) + { + KEBUGCHECK(0); + } + } + else + { Pt++; - } - oldPdeOffset = PdeOffset; - - Pte = *Pt; - if (Pte != 0) - { + } + oldPdeOffset = PdeOffset; + + Pte = *Pt; + if (Pte != 0) + { KEBUGCHECK(0); - } - (void)InterlockedExchangeUL(Pt, PFN_TO_PTE(Pages[i]) | Attributes); - } - - return(STATUS_SUCCESS); + } + (void)InterlockedExchangeUL(Pt, PFN_TO_PTE(Pages[i]) | Attributes); + } + + return(STATUS_SUCCESS); } NTSTATUS @@ -874,45 +871,45 @@ MmCreatePageFileMapping(PEPROCESS Process, PVOID Address, SWAPENTRY SwapEntry) { - PULONG Pt; - ULONG Pte; - - if (Process == NULL && Address < MmSystemRangeStart) - { - DPRINT1("No process\n"); - KEBUGCHECK(0); - } - if (Process != NULL && Address >= MmSystemRangeStart) - { - DPRINT1("Setting kernel address with process context\n"); - KEBUGCHECK(0); - } - if (SwapEntry & (1 << 31)) - { - KEBUGCHECK(0); - } - - Pt = MmGetPageTableForProcess(Process, Address, TRUE); - if (Pt == NULL) - { - KEBUGCHECK(0); - } - Pte = *Pt; - if (PAGE_MASK((Pte)) != 0) - { - MmMarkPageUnmapped(PTE_TO_PFN((Pte))); - } - (void)InterlockedExchangeUL(Pt, SwapEntry << 1); - if (Pte != 0) - { - MiFlushTlb(Pt, Address); - } - else - { - MmUnmapPageTable(Pt); - } - - return(STATUS_SUCCESS); + PULONG Pt; + ULONG Pte; + + if (Process == NULL && Address < MmSystemRangeStart) + { + DPRINT1("No process\n"); + KEBUGCHECK(0); + } + if (Process != NULL && Address >= MmSystemRangeStart) + { + DPRINT1("Setting kernel address with process context\n"); + KEBUGCHECK(0); + } + if (SwapEntry & (1 << 31)) + { + KEBUGCHECK(0); + } + + Pt = MmGetPageTableForProcess(Process, Address, TRUE); + if (Pt == NULL) + { + KEBUGCHECK(0); + } + Pte = *Pt; + if (PAGE_MASK((Pte)) != 0) + { + MmMarkPageUnmapped(PTE_TO_PFN((Pte))); + } + (void)InterlockedExchangeUL(Pt, SwapEntry << 1); + if (Pte != 0) + { + MiFlushTlb(Pt, Address); + } + else + { + MmUnmapPageTable(Pt); + } + + return(STATUS_SUCCESS); } @@ -924,119 +921,119 @@ MmCreateVirtualMappingUnsafe(PEPROCESS Process, PPFN_TYPE Pages, ULONG PageCount) { - ULONG Attributes; - PVOID Addr; - ULONG i; - ULONG oldPdeOffset, PdeOffset; - PULONG Pt = NULL; - ULONG Pte; - BOOLEAN NoExecute = FALSE; - - DPRINT("MmCreateVirtualMappingUnsafe(%x, %x, %x, %x (%x), %d)\n", - Process, Address, flProtect, Pages, *Pages, PageCount); - - if (Process == NULL) - { - if (Address < MmSystemRangeStart) - { - DPRINT1("No process\n"); - KEBUGCHECK(0); - } - if (PageCount > 0x10000 || - (ULONG_PTR) Address / PAGE_SIZE + PageCount > 0x100000) - { - DPRINT1("Page count to large\n"); - KEBUGCHECK(0); - } - } - else - { - if (Address >= MmSystemRangeStart) - { - DPRINT1("Setting kernel address with process context\n"); - KEBUGCHECK(0); - } - if (PageCount > (ULONG_PTR)MmSystemRangeStart / PAGE_SIZE || - (ULONG_PTR) Address / PAGE_SIZE + PageCount > - (ULONG_PTR)MmSystemRangeStart / PAGE_SIZE) - { - DPRINT1("Page Count to large\n"); - KEBUGCHECK(0); - } - } - - Attributes = ProtectToPTE(flProtect); - if (Attributes & 0x80000000) - { - NoExecute = TRUE; - } - Attributes &= 0xfff; - if (Address >= MmSystemRangeStart) - { - Attributes &= ~PA_USER; - if (Ke386GlobalPagesEnabled) - { - Attributes |= PA_GLOBAL; - } - } - else - { - Attributes |= PA_USER; - } - - Addr = Address; - oldPdeOffset = ADDR_TO_PDE_OFFSET(Addr) + 1; - for (i = 0; i < PageCount; i++, Addr = (PVOID)((ULONG_PTR)Addr + PAGE_SIZE)) - { - if (!(Attributes & PA_PRESENT) && Pages[i] != 0) - { + ULONG Attributes; + PVOID Addr; + ULONG i; + ULONG oldPdeOffset, PdeOffset; + PULONG Pt = NULL; + ULONG Pte; + BOOLEAN NoExecute = FALSE; + + DPRINT("MmCreateVirtualMappingUnsafe(%x, %x, %x, %x (%x), %d)\n", + Process, Address, flProtect, Pages, *Pages, PageCount); + + if (Process == NULL) + { + if (Address < MmSystemRangeStart) + { + DPRINT1("No process\n"); + KEBUGCHECK(0); + } + if (PageCount > 0x10000 || + (ULONG_PTR) Address / PAGE_SIZE + PageCount > 0x100000) + { + DPRINT1("Page count to large\n"); + KEBUGCHECK(0); + } + } + else + { + if (Address >= MmSystemRangeStart) + { + DPRINT1("Setting kernel address with process context\n"); + KEBUGCHECK(0); + } + if (PageCount > (ULONG_PTR)MmSystemRangeStart / PAGE_SIZE || + (ULONG_PTR) Address / PAGE_SIZE + PageCount > + (ULONG_PTR)MmSystemRangeStart / PAGE_SIZE) + { + DPRINT1("Page Count to large\n"); + KEBUGCHECK(0); + } + } + + Attributes = ProtectToPTE(flProtect); + if (Attributes & 0x80000000) + { + NoExecute = TRUE; + } + Attributes &= 0xfff; + if (Address >= MmSystemRangeStart) + { + Attributes &= ~PA_USER; + if (Ke386GlobalPagesEnabled) + { + Attributes |= PA_GLOBAL; + } + } + else + { + Attributes |= PA_USER; + } + + Addr = Address; + oldPdeOffset = ADDR_TO_PDE_OFFSET(Addr) + 1; + for (i = 0; i < PageCount; i++, Addr = (PVOID)((ULONG_PTR)Addr + PAGE_SIZE)) + { + if (!(Attributes & PA_PRESENT) && Pages[i] != 0) + { DPRINT1("Setting physical address but not allowing access at address " "0x%.8X with attributes %x/%x.\n", Addr, Attributes, flProtect); KEBUGCHECK(0); - } - PdeOffset = ADDR_TO_PDE_OFFSET(Addr); - if (oldPdeOffset != PdeOffset) - { + } + PdeOffset = ADDR_TO_PDE_OFFSET(Addr); + if (oldPdeOffset != PdeOffset) + { MmUnmapPageTable(Pt); - Pt = MmGetPageTableForProcess(Process, Addr, TRUE); - if (Pt == NULL) - { - KEBUGCHECK(0); - } - } - else - { + Pt = MmGetPageTableForProcess(Process, Addr, TRUE); + if (Pt == NULL) + { + KEBUGCHECK(0); + } + } + else + { Pt++; - } - oldPdeOffset = PdeOffset; - - Pte = *Pt; - MmMarkPageMapped(Pages[i]); - if (PAGE_MASK((Pte)) != 0 && !((Pte) & PA_PRESENT)) - { + } + oldPdeOffset = PdeOffset; + + Pte = *Pt; + MmMarkPageMapped(Pages[i]); + if (PAGE_MASK((Pte)) != 0 && !((Pte) & PA_PRESENT)) + { KEBUGCHECK(0); - } - if (PAGE_MASK((Pte)) != 0) - { + } + if (PAGE_MASK((Pte)) != 0) + { MmMarkPageUnmapped(PTE_TO_PFN((Pte))); - } - (void)InterlockedExchangeUL(Pt, PFN_TO_PTE(Pages[i]) | Attributes); - if (Pte != 0) - { + } + (void)InterlockedExchangeUL(Pt, PFN_TO_PTE(Pages[i]) | Attributes); + if (Pte != 0) + { if (Address > MmSystemRangeStart || (Pt >= (PULONG)PAGETABLE_MAP && Pt < (PULONG)PAGETABLE_MAP + 1024*1024)) { - MiFlushTlb(Pt, Address); + MiFlushTlb(Pt, Address); } - } - } - if (Addr > Address) - { - MmUnmapPageTable(Pt); - } - - return(STATUS_SUCCESS); + } + } + if (Addr > Address) + { + MmUnmapPageTable(Pt); + } + + return(STATUS_SUCCESS); } NTSTATUS @@ -1047,102 +1044,102 @@ MmCreateVirtualMapping(PEPROCESS Process, PPFN_TYPE Pages, ULONG PageCount) { - ULONG i; - - for (i = 0; i < PageCount; i++) - { - if (!MmIsPageInUse(Pages[i])) - { - DPRINT1("Page at address %x not in use\n", PFN_TO_PTE(Pages[i])); - KEBUGCHECK(0); - } - } - - return(MmCreateVirtualMappingUnsafe(Process, - Address, - flProtect, - Pages, - PageCount)); + ULONG i; + + for (i = 0; i < PageCount; i++) + { + if (!MmIsPageInUse(Pages[i])) + { + DPRINT1("Page at address %x not in use\n", PFN_TO_PTE(Pages[i])); + KEBUGCHECK(0); + } + } + + return(MmCreateVirtualMappingUnsafe(Process, + Address, + flProtect, + Pages, + PageCount)); } ULONG NTAPI MmGetPageProtect(PEPROCESS Process, PVOID Address) { - ULONG Entry; - ULONG Protect; + ULONG Entry; + ULONG Protect; - Entry = MmGetPageEntryForProcess(Process, Address); - - - if (!(Entry & PA_PRESENT)) - { - Protect = PAGE_NOACCESS; - } - else - { - if (Entry & PA_READWRITE) - { - Protect = PAGE_READWRITE; - } - else - { - Protect = PAGE_EXECUTE_READ; - } - if (Entry & PA_CD) - { - Protect |= PAGE_NOCACHE; - } - if (Entry & PA_WT) - { - Protect |= PAGE_WRITETHROUGH; - } - if (!(Entry & PA_USER)) - { - Protect |= PAGE_SYSTEM; - } - - } - return(Protect); + Entry = MmGetPageEntryForProcess(Process, Address); + + + if (!(Entry & PA_PRESENT)) + { + Protect = PAGE_NOACCESS; + } + else + { + if (Entry & PA_READWRITE) + { + Protect = PAGE_READWRITE; + } + else + { + Protect = PAGE_EXECUTE_READ; + } + if (Entry & PA_CD) + { + Protect |= PAGE_NOCACHE; + } + if (Entry & PA_WT) + { + Protect |= PAGE_WRITETHROUGH; + } + if (!(Entry & PA_USER)) + { + Protect |= PAGE_SYSTEM; + } + + } + return(Protect); } VOID NTAPI MmSetPageProtect(PEPROCESS Process, PVOID Address, ULONG flProtect) { - ULONG Attributes = 0; - BOOLEAN NoExecute = FALSE; - PULONG Pt; - - DPRINT("MmSetPageProtect(Process %x Address %x flProtect %x)\n", - Process, Address, flProtect); - - Attributes = ProtectToPTE(flProtect); - if (Attributes & 0x80000000) - { - NoExecute = TRUE; - } - Attributes &= 0xfff; - if (Address >= MmSystemRangeStart) - { - Attributes &= ~PA_USER; - if (Ke386GlobalPagesEnabled) - { - Attributes |= PA_GLOBAL; - } - } - else - { - Attributes |= PA_USER; - } - - Pt = MmGetPageTableForProcess(Process, Address, FALSE); - if (Pt == NULL) - { - KEBUGCHECK(0); - } - InterlockedExchange((PLONG)Pt, PAGE_MASK(*Pt) | Attributes | (*Pt & (PA_ACCESSED|PA_DIRTY))); - MiFlushTlb(Pt, Address); + ULONG Attributes = 0; + BOOLEAN NoExecute = FALSE; + PULONG Pt; + + DPRINT("MmSetPageProtect(Process %x Address %x flProtect %x)\n", + Process, Address, flProtect); + + Attributes = ProtectToPTE(flProtect); + if (Attributes & 0x80000000) + { + NoExecute = TRUE; + } + Attributes &= 0xfff; + if (Address >= MmSystemRangeStart) + { + Attributes &= ~PA_USER; + if (Ke386GlobalPagesEnabled) + { + Attributes |= PA_GLOBAL; + } + } + else + { + Attributes |= PA_USER; + } + + Pt = MmGetPageTableForProcess(Process, Address, FALSE); + if (Pt == NULL) + { + KEBUGCHECK(0); + } + InterlockedExchange((PLONG)Pt, PAGE_MASK(*Pt) | Attributes | (*Pt & (PA_ACCESSED|PA_DIRTY))); + MiFlushTlb(Pt, Address); } /* @@ -1154,155 +1151,155 @@ MmGetPhysicalAddress(PVOID vaddr) * FUNCTION: Returns the physical address corresponding to a virtual address */ { - PHYSICAL_ADDRESS p; - ULONG Pte; - - DPRINT("MmGetPhysicalAddress(vaddr %x)\n", vaddr); - Pte = MmGetPageEntryForProcess(NULL, vaddr); - if (Pte != 0 && Pte & PA_PRESENT) - { - p.QuadPart = PAGE_MASK(Pte); - p.u.LowPart |= (ULONG_PTR)vaddr & (PAGE_SIZE - 1); - } - else - { - p.QuadPart = 0; - } - return p; + PHYSICAL_ADDRESS p; + ULONG Pte; + + DPRINT("MmGetPhysicalAddress(vaddr %x)\n", vaddr); + Pte = MmGetPageEntryForProcess(NULL, vaddr); + if (Pte != 0 && Pte & PA_PRESENT) + { + p.QuadPart = PAGE_MASK(Pte); + p.u.LowPart |= (ULONG_PTR)vaddr & (PAGE_SIZE - 1); + } + else + { + p.QuadPart = 0; + } + return p; } PVOID NTAPI MmCreateHyperspaceMapping(PFN_TYPE Page) { - PVOID Address; - ULONG i; - - ULONG Entry; - PULONG Pte; - Entry = PFN_TO_PTE(Page) | PA_PRESENT | PA_READWRITE; - Pte = (PULONG)MiAddressToPte(HYPERSPACE) + Page % 1024; - if (Page & 1024) - { - for (i = Page % 1024; i < 1024; i++, Pte++) - { + PVOID Address; + ULONG i; + + ULONG Entry; + PULONG Pte; + Entry = PFN_TO_PTE(Page) | PA_PRESENT | PA_READWRITE; + Pte = (PULONG)MiAddressToPte(HYPERSPACE) + Page % 1024; + if (Page & 1024) + { + for (i = Page % 1024; i < 1024; i++, Pte++) + { if (0 == InterlockedCompareExchange((PLONG)Pte, (LONG)Entry, 0)) { - break; + break; } - } - if (i >= 1024) - { + } + if (i >= 1024) + { Pte = (PULONG)MiAddressToPte(HYPERSPACE); for (i = 0; i < Page % 1024; i++, Pte++) { - if (0 == InterlockedCompareExchange((PLONG)Pte, (LONG)Entry, 0)) - { - break; - } + if (0 == InterlockedCompareExchange((PLONG)Pte, (LONG)Entry, 0)) + { + break; + } } if (i >= Page % 1024) { - KEBUGCHECK(0); + KEBUGCHECK(0); } - } - } - else - { - for (i = Page % 1024; (LONG)i >= 0; i--, Pte--) - { + } + } + else + { + for (i = Page % 1024; (LONG)i >= 0; i--, Pte--) + { if (0 == InterlockedCompareExchange((PLONG)Pte, (LONG)Entry, 0)) { - break; + break; } - } - if ((LONG)i < 0) - { + } + if ((LONG)i < 0) + { Pte = (PULONG)MiAddressToPte(HYPERSPACE) + 1023; for (i = 1023; i > Page % 1024; i--, Pte--) { - if (0 == InterlockedCompareExchange((PLONG)Pte, (LONG)Entry, 0)) - { - break; - } + if (0 == InterlockedCompareExchange((PLONG)Pte, (LONG)Entry, 0)) + { + break; + } } if (i <= Page % 1024) { - KEBUGCHECK(0); + KEBUGCHECK(0); } - } - } - Address = (PVOID)((ULONG_PTR)HYPERSPACE + i * PAGE_SIZE); - __invlpg(Address); - return Address; + } + } + Address = (PVOID)((ULONG_PTR)HYPERSPACE + i * PAGE_SIZE); + __invlpg(Address); + return Address; } PFN_TYPE NTAPI MmChangeHyperspaceMapping(PVOID Address, PFN_TYPE NewPage) { - PFN_TYPE Pfn; - ULONG Entry; - - ASSERT (IS_HYPERSPACE(Address)); - - Entry = InterlockedExchange((PLONG)MiAddressToPte(Address), PFN_TO_PTE(NewPage) | PA_PRESENT | PA_READWRITE); - Pfn = PTE_TO_PFN(Entry); - - __invlpg(Address); - return Pfn; + PFN_TYPE Pfn; + ULONG Entry; + + ASSERT (IS_HYPERSPACE(Address)); + + Entry = InterlockedExchange((PLONG)MiAddressToPte(Address), PFN_TO_PTE(NewPage) | PA_PRESENT | PA_READWRITE); + Pfn = PTE_TO_PFN(Entry); + + __invlpg(Address); + return Pfn; } PFN_TYPE NTAPI MmDeleteHyperspaceMapping(PVOID Address) { - PFN_TYPE Pfn; - ULONG Entry; - - ASSERT (IS_HYPERSPACE(Address)); - - Entry = InterlockedExchange((PLONG)MiAddressToPte(Address), 0); - Pfn = PTE_TO_PFN(Entry); - - __invlpg(Address); - return Pfn; + PFN_TYPE Pfn; + ULONG Entry; + + ASSERT (IS_HYPERSPACE(Address)); + + Entry = InterlockedExchange((PLONG)MiAddressToPte(Address), 0); + Pfn = PTE_TO_PFN(Entry); + + __invlpg(Address); + return Pfn; } VOID NTAPI MmUpdatePageDir(PEPROCESS Process, PVOID Address, ULONG Size) { - ULONG StartOffset, EndOffset, Offset; - PULONG Pde; - - if (Address < MmSystemRangeStart) - { - KEBUGCHECK(0); - } - - StartOffset = ADDR_TO_PDE_OFFSET(Address); - EndOffset = ADDR_TO_PDE_OFFSET((PVOID)((ULONG_PTR)Address + Size)); - - if (Process != NULL && Process != PsGetCurrentProcess()) - { - Pde = MmCreateHyperspaceMapping(PTE_TO_PFN(Process->Pcb.DirectoryTableBase.u.LowPart)); - } - else - { - Pde = (PULONG)PAGEDIRECTORY_MAP; - } - for (Offset = StartOffset; Offset <= EndOffset; Offset++) - { - if (Offset != ADDR_TO_PDE_OFFSET(PAGETABLE_MAP)) - { + ULONG StartOffset, EndOffset, Offset; + PULONG Pde; + + if (Address < MmSystemRangeStart) + { + KEBUGCHECK(0); + } + + StartOffset = ADDR_TO_PDE_OFFSET(Address); + EndOffset = ADDR_TO_PDE_OFFSET((PVOID)((ULONG_PTR)Address + Size)); + + if (Process != NULL && Process != PsGetCurrentProcess()) + { + Pde = MmCreateHyperspaceMapping(PTE_TO_PFN(Process->Pcb.DirectoryTableBase[0])); + } + else + { + Pde = (PULONG)PAGEDIRECTORY_MAP; + } + for (Offset = StartOffset; Offset <= EndOffset; Offset++) + { + if (Offset != ADDR_TO_PDE_OFFSET(PAGETABLE_MAP)) + { (void)InterlockedCompareExchangeUL(&Pde[Offset], MmGlobalKernelPageDirectory[Offset], 0); - } - } - if (Pde != (PULONG)PAGEDIRECTORY_MAP) - { - MmDeleteHyperspaceMapping(Pde); - } + } + } + if (Pde != (PULONG)PAGEDIRECTORY_MAP) + { + MmDeleteHyperspaceMapping(Pde); + } } VOID @@ -1310,25 +1307,25 @@ INIT_FUNCTION NTAPI MmInitGlobalKernelPageDirectory(VOID) { - ULONG i; - PULONG CurrentPageDirectory = (PULONG)PAGEDIRECTORY_MAP; - - DPRINT("MmInitGlobalKernelPageDirectory()\n"); - - for (i = ADDR_TO_PDE_OFFSET(MmSystemRangeStart); i < 1024; i++) - { - if (i != ADDR_TO_PDE_OFFSET(PAGETABLE_MAP) && - i != ADDR_TO_PDE_OFFSET(HYPERSPACE) && - 0 == MmGlobalKernelPageDirectory[i] && 0 != CurrentPageDirectory[i]) - { + ULONG i; + PULONG CurrentPageDirectory = (PULONG)PAGEDIRECTORY_MAP; + + DPRINT("MmInitGlobalKernelPageDirectory()\n"); + + for (i = ADDR_TO_PDE_OFFSET(MmSystemRangeStart); i < 1024; i++) + { + if (i != ADDR_TO_PDE_OFFSET(PAGETABLE_MAP) && + i != ADDR_TO_PDE_OFFSET(HYPERSPACE) && + 0 == MmGlobalKernelPageDirectory[i] && 0 != CurrentPageDirectory[i]) + { MmGlobalKernelPageDirectory[i] = CurrentPageDirectory[i]; - if (Ke386GlobalPagesEnabled) - { - MmGlobalKernelPageDirectory[i] |= PA_GLOBAL; - CurrentPageDirectory[i] |= PA_GLOBAL; - } - } - } + if (Ke386GlobalPagesEnabled) + { + MmGlobalKernelPageDirectory[i] |= PA_GLOBAL; + CurrentPageDirectory[i] |= PA_GLOBAL; + } + } + } } VOID @@ -1336,43 +1333,43 @@ INIT_FUNCTION NTAPI MiInitPageDirectoryMap(VOID) { - MEMORY_AREA* kernel_map_desc = NULL; - MEMORY_AREA* hyperspace_desc = NULL; - PHYSICAL_ADDRESS BoundaryAddressMultiple; - PVOID BaseAddress; - NTSTATUS Status; - - DPRINT("MiInitPageDirectoryMap()\n"); - - BoundaryAddressMultiple.QuadPart = 0; - BaseAddress = (PVOID)PAGETABLE_MAP; - Status = MmCreateMemoryArea(MmGetKernelAddressSpace(), - MEMORY_AREA_SYSTEM, - &BaseAddress, - 0x400000, - PAGE_READWRITE, - &kernel_map_desc, - TRUE, - 0, - BoundaryAddressMultiple); - if (!NT_SUCCESS(Status)) - { - KEBUGCHECK(0); - } - BaseAddress = (PVOID)HYPERSPACE; - Status = MmCreateMemoryArea(MmGetKernelAddressSpace(), - MEMORY_AREA_SYSTEM, - &BaseAddress, - 0x400000, - PAGE_READWRITE, - &hyperspace_desc, - TRUE, - 0, - BoundaryAddressMultiple); - if (!NT_SUCCESS(Status)) - { - KEBUGCHECK(0); - } + MEMORY_AREA* kernel_map_desc = NULL; + MEMORY_AREA* hyperspace_desc = NULL; + PHYSICAL_ADDRESS BoundaryAddressMultiple; + PVOID BaseAddress; + NTSTATUS Status; + + DPRINT("MiInitPageDirectoryMap()\n"); + + BoundaryAddressMultiple.QuadPart = 0; + BaseAddress = (PVOID)PAGETABLE_MAP; + Status = MmCreateMemoryArea(MmGetKernelAddressSpace(), + MEMORY_AREA_SYSTEM, + &BaseAddress, + 0x400000, + PAGE_READWRITE, + &kernel_map_desc, + TRUE, + 0, + BoundaryAddressMultiple); + if (!NT_SUCCESS(Status)) + { + KEBUGCHECK(0); + } + BaseAddress = (PVOID)HYPERSPACE; + Status = MmCreateMemoryArea(MmGetKernelAddressSpace(), + MEMORY_AREA_SYSTEM, + &BaseAddress, + 0x400000, + PAGE_READWRITE, + &hyperspace_desc, + TRUE, + 0, + BoundaryAddressMultiple); + if (!NT_SUCCESS(Status)) + { + KEBUGCHECK(0); + } } /* EOF */ diff --git a/reactos/ntoskrnl/mm/mdlsup.c b/reactos/ntoskrnl/mm/mdlsup.c index 1de4283f8f3..bf6cdda206d 100644 --- a/reactos/ntoskrnl/mm/mdlsup.c +++ b/reactos/ntoskrnl/mm/mdlsup.c @@ -391,11 +391,12 @@ MmProbeAndLockPages(IN PMDL Mdl, PVOID Base, Address; ULONG i, j; ULONG NrPages; - NTSTATUS Status; + NTSTATUS Status = STATUS_SUCCESS; PFN_TYPE Page; PEPROCESS CurrentProcess; PETHREAD Thread; PMM_AVL_TABLE AddressSpace; + KIRQL OldIrql = KeGetCurrentIrql(); DPRINT("Probing MDL: %p\n", Mdl); /* Sanity checks */ @@ -486,7 +487,10 @@ MmProbeAndLockPages(IN PMDL Mdl, /* * Lock the pages */ - MmLockAddressSpace(AddressSpace); + if (OldIrql < DISPATCH_LEVEL) + MmLockAddressSpace(AddressSpace); + else + MmAcquirePageListLock(&OldIrql); for (i = 0; i < NrPages; i++) { @@ -500,8 +504,7 @@ MmProbeAndLockPages(IN PMDL Mdl, Status = MmAccessFault(FALSE, Address, AccessMode, NULL); if (!NT_SUCCESS(Status)) { - MmUnlockAddressSpace(AddressSpace); - ExRaiseStatus(STATUS_ACCESS_VIOLATION); + goto cleanup; } } else @@ -524,8 +527,7 @@ MmProbeAndLockPages(IN PMDL Mdl, MmDereferencePage(Page); } } - MmUnlockAddressSpace(AddressSpace); - ExRaiseStatus(STATUS_ACCESS_VIOLATION); + goto cleanup; } } Page = MmGetPfnForProcess(NULL, Address); @@ -539,9 +541,17 @@ MmProbeAndLockPages(IN PMDL Mdl, MmReferencePage(Page); } } - - MmUnlockAddressSpace(AddressSpace); + +cleanup: + if (OldIrql < DISPATCH_LEVEL) + MmUnlockAddressSpace(AddressSpace); + else + MmReleasePageListLock(OldIrql); + + if (!NT_SUCCESS(Status)) + ExRaiseStatus(STATUS_ACCESS_VIOLATION); Mdl->MdlFlags |= MDL_PAGES_LOCKED; + return; } /* @@ -605,6 +615,22 @@ MmAllocatePagesForMdl(IN PHYSICAL_ADDRESS LowAddress, return Mdl; } +/* + * @unimplemented + */ +PMDL +NTAPI +MmAllocatePagesForMdlEx(IN PHYSICAL_ADDRESS LowAddress, + IN PHYSICAL_ADDRESS HighAddress, + IN PHYSICAL_ADDRESS SkipBytes, + IN SIZE_T Totalbytes, + IN MEMORY_CACHING_TYPE CacheType, + IN ULONG Flags) +{ + UNIMPLEMENTED; + return NULL; +} + /* * @implemented */ diff --git a/reactos/ntoskrnl/mm/mm.c b/reactos/ntoskrnl/mm/mm.c index 3d442cee761..860469eb1c5 100644 --- a/reactos/ntoskrnl/mm/mm.c +++ b/reactos/ntoskrnl/mm/mm.c @@ -24,6 +24,20 @@ MM_STATS MmStats; /* FUNCTIONS ****************************************************************/ +VOID +FASTCALL +MiSyncThreadProcessViews(IN PKTHREAD NextThread) +{ + /* Hack Sync because Mm is broken */ + MmUpdatePageDir(PsGetCurrentProcess(), + ((PETHREAD)NextThread)->ThreadsProcess, + sizeof(EPROCESS)); + MmUpdatePageDir(PsGetCurrentProcess(), + (PVOID)((PETHREAD)NextThread)->Tcb.StackLimit, + NextThread->LargeStack ? + KERNEL_LARGE_STACK_SIZE : KERNEL_STACK_SIZE); +} + /* * @implemented */ @@ -356,7 +370,8 @@ MmCommitPagedPoolAddress(PVOID Address, BOOLEAN Locked) ULONG NTAPI MmAdjustWorkingSetSize (ULONG Unknown0, ULONG Unknown1, - ULONG Unknown2) + ULONG Unknown2, + ULONG Unknown3) { UNIMPLEMENTED; return (0); diff --git a/reactos/ntoskrnl/mm/mminit.c b/reactos/ntoskrnl/mm/mminit.c index d32e00e4a12..327a0d66762 100644 --- a/reactos/ntoskrnl/mm/mminit.c +++ b/reactos/ntoskrnl/mm/mminit.c @@ -368,13 +368,13 @@ NTAPI MmInit1(VOID) { PLDR_DATA_TABLE_ENTRY LdrEntry; - LARGE_INTEGER Dummy; + ULONG_PTR Dummy[2]; /* Dump memory descriptors */ if (MiDbgEnableMdDump) MiDbgDumpMemoryDescriptors(); /* Set the page directory */ - PsGetCurrentProcess()->Pcb.DirectoryTableBase.QuadPart = (ULONG_PTR)MmGetPageDirectory(); + PsGetCurrentProcess()->Pcb.DirectoryTableBase[0] = (ULONG_PTR)MmGetPageDirectory(); /* Get the size of FreeLDR's image allocations */ MmBootImageSize = KeLoaderBlock->Extension->LoaderPagesSpanned; @@ -396,7 +396,7 @@ MmInit1(VOID) DbgPrint("Used memory %dKb\n", (MmNumberOfPhysicalPages * PAGE_SIZE) / 1024); /* Initialize the kernel address space */ - MmInitializeHandBuiltProcess(PsGetCurrentProcess(), &Dummy); + MmInitializeHandBuiltProcess(PsGetCurrentProcess(), Dummy); MmKernelAddressSpace = MmGetCurrentAddressSpace(); MmInitGlobalKernelPageDirectory(); diff --git a/reactos/ntoskrnl/mm/physical.c b/reactos/ntoskrnl/mm/physical.c index 9187f32430d..0a04f230ea3 100644 --- a/reactos/ntoskrnl/mm/physical.c +++ b/reactos/ntoskrnl/mm/physical.c @@ -1,89 +1,74 @@ /* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel + * PROJECT: ReactOS Kernel + * LICENSE: GPL - See COPYING in the top level directory * FILE: ntoskrnl/mm/physical.c - * PURPOSE: Physical Memory Manipulation functions - * - * PROGRAMMERS: Alex Ionescu (alex@relsoft.net) + * PURPOSE: Physical Memory Manipulation Routines + * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org) */ /* INCLUDES *****************************************************************/ #include -#include - +#define NDEBUG +#include /* FUNCTIONS *****************************************************************/ - /* * @unimplemented */ NTSTATUS -STDCALL -MmAddPhysicalMemory ( - IN PPHYSICAL_ADDRESS StartAddress, - IN OUT PLARGE_INTEGER NumberOfBytes - ) +NTAPI +MmAddPhysicalMemory (IN PPHYSICAL_ADDRESS StartAddress, + IN OUT PLARGE_INTEGER NumberOfBytes) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; } - /* * @unimplemented */ NTSTATUS -STDCALL -MmMarkPhysicalMemoryAsBad( - IN PPHYSICAL_ADDRESS StartAddress, - IN OUT PLARGE_INTEGER NumberOfBytes - ) +NTAPI +MmMarkPhysicalMemoryAsBad(IN PPHYSICAL_ADDRESS StartAddress, + IN OUT PLARGE_INTEGER NumberOfBytes) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; } - /* * @unimplemented */ NTSTATUS -STDCALL -MmMarkPhysicalMemoryAsGood( - IN PPHYSICAL_ADDRESS StartAddress, - IN OUT PLARGE_INTEGER NumberOfBytes - ) +NTAPI +MmMarkPhysicalMemoryAsGood(IN PPHYSICAL_ADDRESS StartAddress, + IN OUT PLARGE_INTEGER NumberOfBytes) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; } - /* * @unimplemented */ NTSTATUS -STDCALL -MmRemovePhysicalMemory ( - IN PPHYSICAL_ADDRESS StartAddress, - IN OUT PLARGE_INTEGER NumberOfBytes - ) +NTAPI +MmRemovePhysicalMemory(IN PPHYSICAL_ADDRESS StartAddress, + IN OUT PLARGE_INTEGER NumberOfBytes) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; } /* * @unimplemented */ PPHYSICAL_MEMORY_RANGE -STDCALL -MmGetPhysicalMemoryRanges ( - VOID - ) +NTAPI +MmGetPhysicalMemoryRanges(VOID) { - UNIMPLEMENTED; - return 0; + UNIMPLEMENTED; + return 0; } diff --git a/reactos/ntoskrnl/mm/section.c b/reactos/ntoskrnl/mm/section.c index cffbfb3c6e4..d86c77003d8 100644 --- a/reactos/ntoskrnl/mm/section.c +++ b/reactos/ntoskrnl/mm/section.c @@ -1286,7 +1286,7 @@ MmAccessFaultSectionView(PMM_AVL_TABLE AddressSpace, Region->Protect == PAGE_EXECUTE_READWRITE))) { DPRINT("Address 0x%.8X\n", Address); - return(STATUS_UNSUCCESSFUL); + return(STATUS_ACCESS_VIOLATION); } if (IS_SWAP_FROM_SSE(Entry) || diff --git a/reactos/ntoskrnl/ntoskrnl-amd64hack.rbuild b/reactos/ntoskrnl/ntoskrnl-amd64hack.rbuild index 7dc6fd73114..a8e6365861f 100644 --- a/reactos/ntoskrnl/ntoskrnl-amd64hack.rbuild +++ b/reactos/ntoskrnl/ntoskrnl-amd64hack.rbuild @@ -448,7 +448,6 @@ libsupp.c misc.c - strtok.c access.c diff --git a/reactos/ntoskrnl/ntoskrnl-generic.rbuild b/reactos/ntoskrnl/ntoskrnl-generic.rbuild index 2696ae5e2de..3f72f594a78 100644 --- a/reactos/ntoskrnl/ntoskrnl-generic.rbuild +++ b/reactos/ntoskrnl/ntoskrnl-generic.rbuild @@ -2,7 +2,12 @@ - + + + + + + @@ -272,13 +277,13 @@ pnproot.c - - + + kdmemsup.c - - + + @@ -443,7 +448,6 @@ libsupp.c misc.c - strtok.c access.c @@ -466,5 +470,6 @@ wmi.c ntoskrnl.rc + ntoskrnl.spec ntoskrnl_$(ARCH).lnk diff --git a/reactos/ntoskrnl/ntoskrnl.spec b/reactos/ntoskrnl/ntoskrnl.spec new file mode 100644 index 00000000000..f37251e4eda --- /dev/null +++ b/reactos/ntoskrnl/ntoskrnl.spec @@ -0,0 +1,1591 @@ +#include "include/reactos/msvctarget.h" + +@ stdcall CcCanIWrite(ptr long long long) +@ stdcall CcCopyRead(ptr ptr long long ptr ptr) +@ stdcall CcCopyWrite(ptr ptr long long ptr) +@ stdcall CcDeferWrite(ptr ptr ptr ptr long long) +@ stdcall CcFastCopyRead(ptr long long long ptr ptr) +@ stdcall CcFastCopyWrite(ptr long long ptr) +@ extern CcFastMdlReadWait +@ extern CcFastReadNotPossible +@ extern CcFastReadWait +@ stdcall CcFlushCache(ptr ptr long ptr) +@ stdcall CcGetDirtyPages(ptr ptr ptr ptr) +@ stdcall CcGetFileObjectFromBcb(ptr) +@ stdcall CcGetFileObjectFromSectionPtrs(ptr) +@ stdcall CcGetFlushedValidData(ptr long) +@ stdcall CcGetLsnForFileObject(ptr ptr) +@ stdcall CcInitializeCacheMap(ptr ptr long ptr ptr) +@ stdcall CcIsThereDirtyData(ptr) +@ stdcall CcMapData(ptr ptr long long ptr ptr) +@ stdcall CcMdlRead(ptr ptr long ptr ptr) +@ stdcall CcMdlReadComplete(ptr ptr) +@ stdcall CcMdlWriteAbort(ptr ptr) +@ stdcall CcMdlWriteComplete(ptr ptr ptr) +@ stdcall CcPinMappedData(ptr ptr long long ptr) +@ stdcall CcPinRead(ptr ptr long long ptr ptr) +@ stdcall CcPrepareMdlWrite(ptr ptr long ptr ptr) +@ stdcall CcPreparePinWrite(ptr ptr long long long ptr ptr) +@ stdcall CcPurgeCacheSection(ptr ptr long long) +@ stdcall CcRemapBcb(ptr) +@ stdcall CcRepinBcb(ptr) +@ stdcall CcScheduleReadAhead(ptr ptr long) +@ stdcall CcSetAdditionalCacheAttributes(ptr long long) +@ stdcall CcSetBcbOwnerPointer(ptr ptr) +@ stdcall CcSetDirtyPageThreshold(ptr long) +@ stdcall CcSetDirtyPinnedData(ptr ptr) +@ stdcall CcSetFileSizes(ptr ptr) +@ stdcall CcSetLogHandleForFile(ptr ptr ptr) +@ stdcall CcSetReadAheadGranularity(ptr long) +@ stdcall CcUninitializeCacheMap(ptr ptr ptr) +@ stdcall CcUnpinData(ptr) +@ stdcall CcUnpinDataForThread(ptr ptr) +@ stdcall CcUnpinRepinnedBcb(ptr long ptr) +@ stdcall CcWaitForCurrentLazyWriterActivity() +@ stdcall CcZeroData(ptr ptr ptr long) +@ stdcall CmRegisterCallback(ptr ptr ptr) +@ stdcall CmUnRegisterCallback(long long) +@ stdcall DbgBreakPoint() +@ stdcall DbgBreakPointWithStatus(long) +;DbgCommandString +@ stdcall DbgLoadImageSymbols(ptr ptr long) +@ cdecl DbgPrint(str) +@ cdecl DbgPrintEx(long long str) +@ cdecl DbgPrintReturnControlC(str) +@ stdcall DbgPrompt(str ptr long) +@ stdcall DbgQueryDebugFilterState(long long) +@ stdcall DbgSetDebugFilterState(long long long) +@ fastcall ExAcquireFastMutexUnsafe(ptr) +@ stdcall ExAcquireResourceExclusiveLite(ptr long) +@ stdcall ExAcquireResourceSharedLite(ptr long) +@ fastcall ExAcquireRundownProtection(ptr) ExfAcquireRundownProtection +@ fastcall ExAcquireRundownProtectionCacheAware(ptr) ExfAcquireRundownProtectionCacheAware +@ fastcall ExAcquireRundownProtectionCacheAwareEx(ptr long) ExfAcquireRundownProtectionCacheAwareEx +@ fastcall ExAcquireRundownProtectionEx(ptr long) ExfAcquireRundownProtectionEx +@ stdcall ExAcquireSharedStarveExclusive(ptr long) +@ stdcall ExAcquireSharedWaitForExclusive(ptr long) +@ stdcall ExAllocateCacheAwareRundownProtection(long long) +@ stdcall ExAllocateFromPagedLookasideList(ptr) ExiAllocateFromPagedLookasideList +@ stdcall ExAllocatePool(long long) +@ stdcall ExAllocatePoolWithQuota(long long) +@ stdcall ExAllocatePoolWithQuotaTag(long long long) +@ stdcall ExAllocatePoolWithTag(long long long) +@ stdcall ExAllocatePoolWithTagPriority(long long long long) +@ stdcall ExConvertExclusiveToSharedLite(ptr) +@ stdcall ExCreateCallback(ptr ptr long long) +@ stdcall ExDeleteNPagedLookasideList(ptr) +@ stdcall ExDeletePagedLookasideList(ptr) +@ stdcall ExDeleteResourceLite(ptr) +@ extern ExDesktopObjectType +@ stdcall ExDisableResourceBoostLite(ptr) +@ fastcall ExEnterCriticalRegionAndAcquireFastMutexUnsafe(ptr) +@ stdcall ExEnterCriticalRegionAndAcquireResourceExclusive(ptr) +;ExEnterCriticalRegionAndAcquireResourceShared +;ExEnterCriticalRegionAndAcquireSharedWaitForExclusive +@ stdcall ExEnumHandleTable(ptr ptr ptr ptr) +@ extern ExEventObjectType _ExEventObjectType +@ stdcall ExExtendZone(ptr ptr long) +@ stdcall ExFreeCacheAwareRundownProtection(ptr) +@ stdcall ExFreePool(ptr) +@ stdcall ExFreePoolWithTag(ptr long) +@ stdcall ExFreeToPagedLookasideList(ptr ptr) ExiFreeToPagedLookasideList +@ stdcall ExGetCurrentProcessorCounts(ptr ptr ptr) +@ stdcall ExGetCurrentProcessorCpuUsage(ptr) +@ stdcall ExGetExclusiveWaiterCount(ptr) +@ stdcall ExGetPreviousMode() +@ stdcall ExGetSharedWaiterCount(ptr) +@ stdcall ExInitializeNPagedLookasideList(ptr ptr ptr long long long long) +@ stdcall ExInitializePagedLookasideList(ptr ptr ptr long long long long) +@ stdcall ExInitializeResourceLite(ptr) +@ fastcall ExInitializeRundownProtection(ptr) ExfInitializeRundownProtection +@ stdcall ExInitializeRundownProtectionCacheAware(ptr long) +@ stdcall ExInitializeZone(ptr long ptr long) +@ stdcall ExInterlockedAddLargeInteger(ptr long long ptr) +@ fastcall ExInterlockedAddLargeStatistic(ptr long) +@ stdcall ExInterlockedAddUlong(ptr long ptr) +@ fastcall ExInterlockedCompareExchange64(ptr ptr ptr ptr) +@ stdcall ExInterlockedDecrementLong(ptr ptr) +@ stdcall ExInterlockedExchangeUlong(ptr long ptr) +@ stdcall ExInterlockedExtendZone(ptr ptr long ptr) +@ fastcall ExInterlockedFlushSList(ptr) +@ stdcall ExInterlockedIncrementLong(ptr ptr) +@ stdcall ExInterlockedInsertHeadList(ptr ptr ptr) +@ stdcall ExInterlockedInsertTailList(ptr ptr ptr) +@ stdcall ExInterlockedPopEntryList(ptr ptr) +@ fastcall ExInterlockedPopEntrySList(ptr ptr) +@ stdcall ExInterlockedPushEntryList(ptr ptr ptr) +@ fastcall ExInterlockedPushEntrySList(ptr ptr ptr) +@ stdcall ExInterlockedRemoveHeadList(ptr ptr) +@ stdcall ExIsProcessorFeaturePresent(long) +@ stdcall ExIsResourceAcquiredExclusiveLite(ptr) +@ stdcall ExIsResourceAcquiredSharedLite(ptr) +@ stdcall ExLocalTimeToSystemTime(ptr ptr) +@ stdcall ExNotifyCallback(ptr ptr ptr) +@ stdcall ExQueryPoolBlockSize(ptr ptr) +@ stdcall ExQueueWorkItem(ptr long) +@ stdcall ExRaiseAccessViolation() +@ stdcall ExRaiseDatatypeMisalignment() +@ stdcall ExRaiseException(ptr) RtlRaiseException +@ stdcall ExRaiseHardError(long long long ptr long ptr) +@ stdcall ExRaiseStatus(long) RtlRaiseStatus +@ fastcall ExReInitializeRundownProtection(ptr) ExfReInitializeRundownProtection +@ fastcall ExReInitializeRundownProtectionCacheAware(ptr) ExfReInitializeRundownProtectionCacheAware +@ stdcall ExRegisterCallback(ptr ptr ptr) +@ stdcall ExReinitializeResourceLite(ptr) +@ fastcall ExReleaseFastMutexUnsafe(ptr) +@ fastcall ExReleaseFastMutexUnsafeAndLeaveCriticalRegion(ptr) +@ fastcall ExReleaseResourceAndLeaveCriticalRegion(ptr) +@ stdcall ExReleaseResourceForThreadLite(ptr long) +@ fastcall ExReleaseResourceLite(ptr) +@ fastcall ExReleaseRundownProtection(ptr) ExfReleaseRundownProtection +@ fastcall ExReleaseRundownProtectionCacheAware(ptr) ExfReleaseRundownProtectionCacheAware +@ fastcall ExReleaseRundownProtectionCacheAwareEx(ptr long) ExfReleaseRundownProtectionCacheAwareEx +@ fastcall ExReleaseRundownProtectionEx(ptr long) ExfReleaseRundownProtectionEx +@ fastcall ExRundownCompleted(ptr) ExfRundownCompleted +@ fastcall ExRundownCompletedCacheAware(ptr) ExfRundownCompletedCacheAware +@ extern ExSemaphoreObjectType _ExSemaphoreObjectType +@ stdcall ExSetResourceOwnerPointer(ptr ptr) +@ stdcall ExSetTimerResolution(long long) +@ stdcall ExSizeOfRundownProtectionCacheAware() +@ stdcall ExSystemExceptionFilter() +@ stdcall ExSystemTimeToLocalTime(ptr ptr) +@ stdcall ExUnregisterCallback(ptr) +@ stdcall ExUuidCreate(ptr) +@ stdcall ExVerifySuite(long) +@ fastcall ExWaitForRundownProtectionRelease(ptr) ExfWaitForRundownProtectionRelease +@ fastcall ExWaitForRundownProtectionReleaseCacheAware(ptr) ExfWaitForRundownProtectionReleaseCacheAware +@ extern ExWindowStationObjectType +@ fastcall ExfAcquirePushLockExclusive(ptr) +@ fastcall ExfAcquirePushLockShared(ptr) +@ fastcall ExfInterlockedAddUlong(ptr long ptr) +@ fastcall ExfInterlockedCompareExchange64(ptr ptr ptr) +@ fastcall ExfInterlockedInsertHeadList(ptr ptr ptr) +@ fastcall ExfInterlockedInsertTailList(ptr ptr ptr) +@ fastcall ExfInterlockedPopEntryList(ptr ptr) +@ fastcall ExfInterlockedPushEntryList(ptr ptr ptr) +@ fastcall ExfInterlockedRemoveHeadList(ptr ptr) +@ fastcall ExfReleasePushLock(ptr) +@ fastcall ExfReleasePushLockExclusive(ptr) +@ fastcall ExfReleasePushLockShared(ptr) +@ fastcall ExfTryToWakePushLock(ptr) +@ fastcall ExfUnblockPushLock(ptr ptr) +@ fastcall Exfi386InterlockedDecrementLong(ptr) +@ fastcall Exfi386InterlockedExchangeUlong(ptr long) +@ fastcall Exfi386InterlockedIncrementLong(ptr) +@ stdcall Exi386InterlockedDecrementLong(ptr) +@ stdcall Exi386InterlockedExchangeUlong(ptr long long) +@ stdcall Exi386InterlockedIncrementLong(ptr) +@ fastcall ExiAcquireFastMutex(ptr) ExAcquireFastMutex +@ fastcall ExiReleaseFastMutex(ptr) ExReleaseFastMutex +@ fastcall ExiTryToAcquireFastMutex(ptr) ExTryToAcquireFastMutex +@ stdcall FsRtlAcquireFileExclusive(ptr) +;FsRtlAddBaseMcbEntry +@ stdcall FsRtlAddLargeMcbEntry(ptr long long long long long long) +@ stdcall FsRtlAddMcbEntry(ptr long long long) +@ stdcall FsRtlAddToTunnelCache(ptr long long ptr ptr long long ptr) +@ stdcall FsRtlAllocateFileLock(ptr ptr) +@ stdcall FsRtlAllocatePool(long long) +@ stdcall FsRtlAllocatePoolWithQuota(long long) +@ stdcall FsRtlAllocatePoolWithQuotaTag(long long long) +@ stdcall FsRtlAllocatePoolWithTag(long long long) +@ stdcall FsRtlAllocateResource() +@ stdcall FsRtlAreNamesEqual(ptr ptr long wstr) +@ stdcall FsRtlBalanceReads(ptr) +@ stdcall FsRtlCheckLockForReadAccess(ptr ptr) +@ stdcall FsRtlCheckLockForWriteAccess(ptr ptr) +@ stdcall FsRtlCheckOplock(ptr ptr ptr ptr ptr) +@ stdcall FsRtlCopyRead(ptr ptr long long long ptr ptr ptr) +@ stdcall FsRtlCopyWrite(ptr ptr long long long ptr ptr ptr) +@ stdcall FsRtlCreateSectionForDataScan(ptr ptr ptr ptr long ptr ptr long long long) +@ stdcall FsRtlCurrentBatchOplock(ptr) +@ stdcall FsRtlDeleteKeyFromTunnelCache(ptr long long) +@ stdcall FsRtlDeleteTunnelCache(ptr) +@ stdcall FsRtlDeregisterUncProvider(ptr) +@ stdcall FsRtlDissectDbcs(long ptr ptr ptr) +@ stdcall FsRtlDissectName(long ptr ptr ptr) +@ stdcall FsRtlDoesDbcsContainWildCards(ptr) +@ stdcall FsRtlDoesNameContainWildCards(ptr) +@ stdcall FsRtlFastCheckLockForRead(ptr ptr ptr long ptr ptr) +@ stdcall FsRtlFastCheckLockForWrite(ptr ptr ptr long ptr ptr) +@ stdcall FsRtlFastUnlockAll(ptr ptr ptr ptr) +@ stdcall FsRtlFastUnlockAllByKey(ptr ptr ptr long ptr) +@ stdcall FsRtlFastUnlockSingle(ptr ptr ptr ptr ptr long ptr long) +@ stdcall FsRtlFindInTunnelCache(ptr long long ptr ptr ptr ptr ptr) +@ stdcall FsRtlFreeFileLock(ptr) +@ stdcall FsRtlGetFileSize(ptr ptr) +;FsRtlGetNextBaseMcbEntry +@ stdcall FsRtlGetNextFileLock(ptr long) +@ stdcall FsRtlGetNextLargeMcbEntry(ptr long ptr ptr ptr) +@ stdcall FsRtlGetNextMcbEntry(ptr long ptr ptr ptr) +@ stdcall FsRtlIncrementCcFastReadNoWait() +@ stdcall FsRtlIncrementCcFastReadNotPossible() +@ stdcall FsRtlIncrementCcFastReadResourceMiss() +@ stdcall FsRtlIncrementCcFastReadWait() +;FsRtlInitializeBaseMcb +@ stdcall FsRtlInitializeFileLock(ptr ptr ptr) +@ stdcall FsRtlInitializeLargeMcb(ptr long) +@ stdcall FsRtlInitializeMcb(ptr long) +@ stdcall FsRtlInitializeOplock(ptr) +@ stdcall FsRtlInitializeTunnelCache(ptr) +@ stdcall FsRtlInsertPerFileObjectContext(ptr ptr) +@ stdcall FsRtlInsertPerStreamContext(ptr ptr) +@ stdcall FsRtlIsDbcsInExpression(ptr ptr) +@ stdcall FsRtlIsFatDbcsLegal(long ptr long long long) +@ stdcall FsRtlIsHpfsDbcsLegal(long ptr long long long) +@ stdcall FsRtlIsNameInExpression(ptr ptr long wstr) +@ stdcall FsRtlIsNtstatusExpected(long) +@ stdcall FsRtlIsPagingFile(ptr) +@ stdcall FsRtlIsTotalDeviceFailure(ptr) +@ extern FsRtlLegalAnsiCharacterArray _FsRtlLegalAnsiCharacterArray +;FsRtlLookupBaseMcbEntry +@ stdcall FsRtlLookupLargeMcbEntry(ptr long long ptr ptr ptr ptr ptr) +;FsRtlLookupLastBaseMcbEntry +;FsRtlLookupLastBaseMcbEntryAndIndex +@ stdcall FsRtlLookupLastLargeMcbEntry(ptr ptr ptr) +@ stdcall FsRtlLookupLastLargeMcbEntryAndIndex(ptr ptr ptr ptr) +@ stdcall FsRtlLookupLastMcbEntry(ptr ptr ptr) +@ stdcall FsRtlLookupMcbEntry(ptr long ptr ptr ptr) +@ stdcall FsRtlLookupPerFileObjectContext(ptr ptr ptr) +@ stdcall FsRtlLookupPerStreamContextInternal(ptr ptr ptr) +@ stdcall FsRtlMdlRead(ptr ptr long long ptr ptr) +@ stdcall FsRtlMdlReadComplete(ptr ptr) +@ stdcall FsRtlMdlReadCompleteDev(ptr ptr ptr) +@ stdcall FsRtlMdlReadDev(ptr ptr long long ptr ptr ptr) +@ stdcall FsRtlMdlWriteComplete(ptr ptr ptr) +@ stdcall FsRtlMdlWriteCompleteDev(ptr ptr ptr ptr) +@ stdcall FsRtlNormalizeNtstatus(long long) +@ stdcall FsRtlNotifyChangeDirectory(ptr ptr ptr ptr long long ptr) +@ stdcall FsRtlNotifyCleanup(ptr ptr ptr) +@ stdcall FsRtlNotifyFilterChangeDirectory(ptr ptr ptr ptr long long long ptr ptr ptr ptr) +@ stdcall FsRtlNotifyFilterReportChange(ptr ptr ptr long ptr ptr long long ptr ptr) +@ stdcall FsRtlNotifyFullChangeDirectory(ptr ptr ptr ptr long long long ptr ptr ptr) +@ stdcall FsRtlNotifyFullReportChange(ptr ptr ptr long ptr ptr long long ptr) +@ stdcall FsRtlNotifyInitializeSync(ptr) +@ stdcall FsRtlNotifyReportChange(ptr ptr ptr ptr long) +@ stdcall FsRtlNotifyUninitializeSync(ptr) +@ stdcall FsRtlNotifyVolumeEvent(ptr long) +;FsRtlNumberOfRunsInBaseMcb +@ stdcall FsRtlNumberOfRunsInLargeMcb(ptr) +@ stdcall FsRtlNumberOfRunsInMcb(ptr) +@ stdcall FsRtlOplockFsctrl(ptr ptr long) +@ stdcall FsRtlOplockIsFastIoPossible(ptr) +@ stdcall FsRtlPostPagingFileStackOverflow(ptr ptr ptr) +@ stdcall FsRtlPostStackOverflow(ptr ptr ptr) +@ stdcall FsRtlPrepareMdlWrite(ptr ptr long long ptr ptr) +@ stdcall FsRtlPrepareMdlWriteDev(ptr ptr long long ptr ptr ptr) +@ stdcall FsRtlPrivateLock(ptr ptr ptr ptr ptr long long long ptr ptr ptr long) +@ stdcall FsRtlProcessFileLock(ptr ptr ptr) +@ stdcall FsRtlRegisterFileSystemFilterCallbacks(ptr ptr) +@ stdcall FsRtlRegisterUncProvider(ptr ptr long) +@ stdcall FsRtlReleaseFile(ptr) +;FsRtlRemoveBaseMcbEntry +@ stdcall FsRtlRemoveLargeMcbEntry(ptr long long long long) +@ stdcall FsRtlRemoveMcbEntry(ptr long long) +@ stdcall FsRtlRemovePerFileObjectContext(ptr ptr ptr) +@ stdcall FsRtlRemovePerStreamContext(ptr ptr ptr) +;FsRtlResetBaseMcb +@ stdcall FsRtlResetLargeMcb(ptr long) +;FsRtlSplitBaseMcb +@ stdcall FsRtlSplitLargeMcb(ptr long long long long) +@ stdcall FsRtlSyncVolumes(long long long) +@ stdcall FsRtlTeardownPerStreamContexts(ptr) +;FsRtlTruncateBaseMcb +@ stdcall FsRtlTruncateLargeMcb(ptr long long) +@ stdcall FsRtlTruncateMcb(ptr long) +;FsRtlUninitializeBaseMcb +@ stdcall FsRtlUninitializeFileLock(ptr) +@ stdcall FsRtlUninitializeLargeMcb(ptr) +@ stdcall FsRtlUninitializeMcb(ptr) +@ stdcall FsRtlUninitializeOplock(ptr) +@ extern HalDispatchTable _HalDispatchTable +@ fastcall HalExamineMBR(ptr long long ptr) +@ extern HalPrivateDispatchTable +;HeadlessDispatch +@ stdcall InbvAcquireDisplayOwnership() +@ stdcall InbvCheckDisplayOwnership() +@ stdcall InbvDisplayString(str) +@ stdcall InbvEnableBootDriver(long) +@ stdcall InbvEnableDisplayString(long) +@ stdcall InbvInstallDisplayStringFilter(ptr) +@ stdcall InbvIsBootDriverInstalled() +@ stdcall InbvNotifyDisplayOwnershipLost(ptr) +@ stdcall InbvResetDisplay() +@ stdcall InbvSetScrollRegion(long long long long) +@ stdcall InbvSetTextColor(long) +@ stdcall InbvSolidColorFill(long long long long long) +@ extern InitSafeBootMode +@ fastcall InterlockedCompareExchange(ptr long long) +@ fastcall InterlockedDecrement(ptr) +@ fastcall InterlockedExchange(ptr long) +@ fastcall InterlockedExchangeAdd(ptr long) +@ fastcall InterlockedIncrement(ptr) +@ fastcall InterlockedPopEntrySList(ptr) +@ fastcall InterlockedPushEntrySList(ptr ptr) +@ stdcall IoAcquireCancelSpinLock(ptr) +@ stdcall IoAcquireRemoveLockEx(ptr ptr str long long) +@ stdcall IoAcquireVpbSpinLock(ptr) +@ extern IoAdapterObjectType +@ stdcall IoAllocateAdapterChannel(ptr ptr long ptr ptr) +@ stdcall IoAllocateController(ptr ptr ptr ptr) +@ stdcall IoAllocateDriverObjectExtension(ptr ptr long ptr) +@ stdcall IoAllocateErrorLogEntry(ptr long) +@ stdcall IoAllocateIrp(long long) +@ stdcall IoAllocateMdl(ptr long long long ptr) +@ stdcall IoAllocateWorkItem(ptr) +@ fastcall IoAssignDriveLetters(ptr ptr ptr ptr) +@ stdcall IoAssignResources(ptr ptr ptr ptr ptr ptr) +@ stdcall IoAttachDevice(ptr ptr ptr) +@ stdcall IoAttachDeviceByPointer(ptr ptr) +@ stdcall IoAttachDeviceToDeviceStack(ptr ptr) +@ stdcall IoAttachDeviceToDeviceStackSafe(ptr ptr ptr) +@ stdcall IoBuildAsynchronousFsdRequest(long ptr ptr long ptr ptr) +@ stdcall IoBuildDeviceIoControlRequest(long ptr ptr long ptr long long ptr ptr) +@ stdcall IoBuildPartialMdl(ptr ptr ptr long) +@ stdcall IoBuildSynchronousFsdRequest(long ptr ptr long ptr ptr ptr) +@ stdcall IoCallDriver(ptr ptr) +@ stdcall IoCancelFileOpen(ptr ptr) +@ stdcall IoCancelIrp(ptr) +@ stdcall IoCheckDesiredAccess(ptr long) +@ stdcall IoCheckEaBufferValidity(ptr long ptr) +@ stdcall IoCheckFunctionAccess(long long long long ptr ptr) +@ stdcall IoCheckQuerySetFileInformation(long long long) +@ stdcall IoCheckQuerySetVolumeInformation(long long long) +@ stdcall IoCheckQuotaBufferValidity(ptr long ptr) +@ stdcall IoCheckShareAccess(long long ptr ptr long) +@ stdcall IoCompleteRequest(ptr long) +@ stdcall IoConnectInterrupt(ptr ptr ptr ptr long long long long long long long) +@ stdcall IoCreateController(long) +@ stdcall IoCreateDevice(ptr long ptr long long long ptr) +@ stdcall IoCreateDisk(ptr ptr) +@ stdcall IoCreateDriver(ptr ptr) +@ stdcall IoCreateFile(ptr long ptr ptr ptr long long long long ptr long long ptr long) +@ stdcall IoCreateFileSpecifyDeviceObjectHint(ptr long ptr ptr ptr long long long long ptr long long ptr long ptr) +@ stdcall IoCreateNotificationEvent(ptr ptr) +@ stdcall IoCreateStreamFileObject(ptr ptr) +@ stdcall IoCreateStreamFileObjectEx(ptr ptr ptr) +@ stdcall IoCreateStreamFileObjectLite(ptr ptr) +@ stdcall IoCreateSymbolicLink(ptr ptr) +@ stdcall IoCreateSynchronizationEvent(ptr ptr) +@ stdcall IoCreateUnprotectedSymbolicLink(ptr ptr) +@ stdcall IoCsqInitialize(ptr ptr ptr ptr ptr ptr ptr) +@ stdcall IoCsqInitializeEx(ptr ptr ptr ptr ptr ptr ptr) +@ stdcall IoCsqInsertIrp(ptr ptr ptr) +@ stdcall IoCsqInsertIrpEx(ptr ptr ptr ptr) +@ stdcall IoCsqRemoveIrp(ptr ptr) +@ stdcall IoCsqRemoveNextIrp(ptr ptr) +@ stdcall IoDeleteController(ptr) +@ stdcall IoDeleteDevice(ptr) +@ stdcall IoDeleteDriver(ptr) +@ stdcall IoDeleteSymbolicLink(ptr) +@ stdcall IoDetachDevice(ptr) +@ extern IoDeviceHandlerObjectSize +@ extern IoDeviceHandlerObjectType +@ extern IoDeviceObjectType +@ stdcall IoDisconnectInterrupt(ptr) +@ extern IoDriverObjectType +@ stdcall IoEnqueueIrp(ptr) +@ stdcall IoEnumerateDeviceObjectList(ptr ptr long ptr) +@ stdcall IoEnumerateRegisteredFiltersList(ptr long ptr) +@ stdcall IoFastQueryNetworkAttributes(ptr long long ptr ptr) +@ extern IoFileObjectType _IoFileObjectType +@ stdcall IoForwardAndCatchIrp(ptr ptr) IoForwardIrpSynchronously +@ stdcall IoForwardIrpSynchronously(ptr ptr) +@ stdcall IoFreeController(ptr) +@ stdcall IoFreeErrorLogEntry(ptr) +@ stdcall IoFreeIrp(ptr) +@ stdcall IoFreeMdl(ptr) +@ stdcall IoFreeWorkItem(ptr) +@ stdcall IoGetAttachedDevice(ptr) +@ stdcall IoGetAttachedDeviceReference(ptr) +@ stdcall IoGetBaseFileSystemDeviceObject(ptr) +@ stdcall IoGetBootDiskInformation(ptr long) +@ stdcall IoGetConfigurationInformation() +@ stdcall IoGetCurrentProcess() +@ stdcall IoGetDeviceAttachmentBaseRef(ptr) +@ stdcall IoGetDeviceInterfaceAlias(ptr ptr ptr) +@ stdcall IoGetDeviceInterfaces(ptr ptr long ptr) +@ stdcall IoGetDeviceObjectPointer(ptr long ptr ptr) +@ stdcall IoGetDeviceProperty(ptr long long ptr ptr) +@ stdcall IoGetDeviceToVerify(ptr) +@ stdcall IoGetDiskDeviceObject(ptr ptr) +@ stdcall IoGetDmaAdapter(ptr ptr ptr) +@ stdcall IoGetDriverObjectExtension(ptr ptr) +@ stdcall IoGetFileObjectGenericMapping() +@ stdcall IoGetInitialStack() +@ stdcall IoGetLowerDeviceObject(ptr) +@ stdcall IoGetPagingIoPriority(ptr) +@ stdcall IoGetRelatedDeviceObject(ptr) +@ stdcall IoGetRequestorProcess(ptr) +@ stdcall IoGetRequestorProcessId(ptr) +@ stdcall IoGetRequestorSessionId(ptr ptr) +@ stdcall IoGetStackLimits(ptr ptr) +@ stdcall IoGetTopLevelIrp() +@ stdcall IoInitializeIrp(ptr long long) +@ stdcall IoInitializeRemoveLockEx(ptr long long long long) +@ stdcall IoInitializeTimer(ptr ptr ptr) +@ stdcall IoInvalidateDeviceRelations(ptr long) +@ stdcall IoInvalidateDeviceState(ptr) +@ stdcall IoIsFileOriginRemote(ptr) +@ stdcall IoIsOperationSynchronous(ptr) +@ stdcall IoIsSystemThread(ptr) +@ stdcall IoIsValidNameGraftingBuffer(ptr ptr) +@ stdcall IoIsWdmVersionAvailable(long long) +@ stdcall IoMakeAssociatedIrp(ptr long) +@ stdcall IoOpenDeviceInterfaceRegistryKey(ptr long ptr) +@ stdcall IoOpenDeviceRegistryKey(ptr long long ptr) +@ stdcall IoPageRead(ptr ptr ptr ptr ptr) +@ stdcall IoPnPDeliverServicePowerNotification(long long long long) +@ stdcall IoQueryDeviceDescription(ptr ptr ptr ptr ptr ptr ptr ptr) +@ stdcall IoQueryFileDosDeviceName(ptr ptr) +@ stdcall IoQueryFileInformation(ptr long long ptr ptr) +@ stdcall IoQueryVolumeInformation(ptr long long ptr ptr) +@ stdcall IoQueueThreadIrp(ptr) +@ stdcall IoQueueWorkItem(ptr ptr long ptr) +@ stdcall IoRaiseHardError(ptr ptr ptr) +@ stdcall IoRaiseInformationalHardError(long ptr ptr) +@ stdcall IoReadDiskSignature(ptr long ptr) +@ extern IoReadOperationCount +@ fastcall IoReadPartitionTable(ptr long long ptr) +@ stdcall IoReadPartitionTableEx(ptr ptr) +@ extern IoReadTransferCount +@ stdcall IoRegisterBootDriverReinitialization(ptr ptr ptr) +@ stdcall IoRegisterDeviceInterface(ptr ptr ptr ptr) +@ stdcall IoRegisterDriverReinitialization(ptr ptr ptr) +@ stdcall IoRegisterFileSystem(ptr) +@ stdcall IoRegisterFsRegistrationChange(ptr ptr) +@ stdcall IoRegisterLastChanceShutdownNotification(ptr) +@ stdcall IoRegisterPlugPlayNotification(long long ptr ptr ptr ptr ptr) +@ stdcall IoRegisterShutdownNotification(ptr) +@ stdcall IoReleaseCancelSpinLock(long) +@ stdcall IoReleaseRemoveLockAndWaitEx(ptr ptr long) +@ stdcall IoReleaseRemoveLockEx(ptr ptr long) +@ stdcall IoReleaseVpbSpinLock(long) +@ stdcall IoRemoveShareAccess(ptr ptr) +@ stdcall IoReportDetectedDevice(ptr long long long ptr ptr long ptr) +@ stdcall IoReportHalResourceUsage(ptr ptr ptr long) +@ stdcall IoReportResourceForDetection(ptr ptr long ptr ptr long ptr) +@ stdcall IoReportResourceUsage(ptr ptr ptr long ptr ptr long long ptr) +@ stdcall IoReportTargetDeviceChange(ptr ptr) +@ stdcall IoReportTargetDeviceChangeAsynchronous(ptr ptr ptr ptr) +@ stdcall IoRequestDeviceEject(ptr) +@ stdcall IoReuseIrp(ptr long) +@ stdcall IoSetCompletionRoutineEx(ptr ptr ptr ptr long long long) +@ stdcall IoSetDeviceInterfaceState(ptr long) +@ stdcall IoSetDeviceToVerify(ptr ptr) +@ stdcall IoSetFileOrigin(ptr long) +@ stdcall IoSetHardErrorOrVerifyDevice(ptr ptr) +@ stdcall IoSetInformation(ptr ptr long ptr) +@ stdcall IoSetIoCompletion(ptr ptr ptr long ptr long) +@ fastcall IoSetPartitionInformation(ptr long long long) +@ stdcall IoSetPartitionInformationEx(ptr long ptr) +@ stdcall IoSetShareAccess(long long ptr ptr) +@ stdcall IoSetStartIoAttributes(ptr long long) +@ stdcall IoSetSystemPartition(ptr) +@ stdcall IoSetThreadHardErrorMode(long) +@ stdcall IoSetTopLevelIrp(ptr) +@ stdcall IoStartNextPacket(ptr long) +@ stdcall IoStartNextPacketByKey(ptr long long) +@ stdcall IoStartPacket(ptr ptr ptr ptr) +@ stdcall IoStartTimer(ptr) +@ extern IoStatisticsLock +@ stdcall IoStopTimer(ptr) +@ stdcall IoSynchronousInvalidateDeviceRelations(ptr long) +@ stdcall IoSynchronousPageWrite(ptr ptr ptr ptr ptr) +@ stdcall IoThreadToProcess(ptr) +;IoTranslateBusAddress +@ stdcall IoUnregisterFileSystem(ptr) +@ stdcall IoUnregisterFsRegistrationChange(ptr ptr) +@ stdcall IoUnregisterPlugPlayNotification(ptr) +@ stdcall IoUnregisterShutdownNotification(ptr) +@ stdcall IoUpdateShareAccess(ptr ptr) +@ stdcall IoValidateDeviceIoControlAccess(ptr long) +@ stdcall IoVerifyPartitionTable(ptr long) +@ stdcall IoVerifyVolume(ptr long) +@ stdcall IoVolumeDeviceToDosName(ptr ptr) +@ stdcall IoWMIAllocateInstanceIds(ptr long ptr) +@ stdcall IoWMIDeviceObjectToInstanceName(ptr ptr ptr) +@ stdcall IoWMIExecuteMethod(ptr ptr long long ptr ptr) +@ stdcall IoWMIHandleToInstanceName(ptr ptr ptr) +@ stdcall IoWMIOpenBlock(ptr long ptr) +@ stdcall IoWMIQueryAllData(ptr ptr ptr) +@ stdcall IoWMIQueryAllDataMultiple(ptr long ptr ptr) +@ stdcall IoWMIQuerySingleInstance(ptr ptr ptr ptr) +@ stdcall IoWMIQuerySingleInstanceMultiple(ptr ptr long ptr ptr) +@ stdcall IoWMIRegistrationControl(ptr long) +@ stdcall IoWMISetNotificationCallback(ptr ptr ptr) +@ stdcall IoWMISetSingleInstance(ptr ptr long long ptr) +@ stdcall IoWMISetSingleItem(ptr ptr long long long ptr) +@ stdcall IoWMISuggestInstanceName(ptr ptr long ptr) +@ stdcall IoWMIWriteEvent(ptr) +@ stdcall IoWriteErrorLogEntry(ptr) +@ extern IoWriteOperationCount +@ fastcall IoWritePartitionTable(ptr long long long ptr) +@ stdcall IoWritePartitionTableEx(ptr ptr) +@ extern IoWriteTransferCount +@ fastcall IofCallDriver(ptr ptr) +@ fastcall IofCompleteRequest(ptr long) +@ stdcall KdChangeOption(long long ptr long ptr ptr) +@ extern KdDebuggerEnabled _KdDebuggerEnabled +@ extern KdDebuggerNotPresent _KdDebuggerNotPresent +@ stdcall KdDisableDebugger() +@ stdcall KdEnableDebugger() +@ extern KdEnteredDebugger +@ stdcall KdPollBreakIn() +@ stdcall KdPowerTransition(long) +@ stdcall KdRefreshDebuggerNotPresent() +@ stdcall KdSystemDebugControl(long ptr long ptr long ptr long) +@ stdcall Ke386CallBios(long ptr) +;Ke386IoSetAccessProcess +;Ke386QueryIoAccessMap +;Ke386SetIoAccessMap +@ fastcall KeAcquireGuardedMutex(ptr) +@ fastcall KeAcquireGuardedMutexUnsafe(ptr) +@ fastcall KeAcquireInStackQueuedSpinLockAtDpcLevel(ptr ptr) +@ fastcall KeAcquireInStackQueuedSpinLockForDpc(ptr ptr) +@ stdcall KeAcquireInterruptSpinLock(ptr) +@ stdcall KeAcquireSpinLockAtDpcLevel(ptr) +@ fastcall KeAcquireSpinLockForDpc(ptr) +@ stdcall KeAddSystemServiceTable(ptr ptr long ptr long) +@ stdcall KeAreAllApcsDisabled() +@ stdcall KeAreApcsDisabled() +@ stdcall KeAttachProcess(ptr) +@ stdcall KeBugCheck(long) +@ stdcall KeBugCheckEx(long ptr ptr ptr ptr) +@ stdcall KeCancelTimer(ptr) +@ stdcall KeCapturePersistentThreadState(ptr long long long long long ptr) +@ stdcall KeClearEvent(ptr) +@ stdcall KeConnectInterrupt(ptr) +@ stdcall KeDelayExecutionThread(long long ptr) +@ stdcall KeDeregisterBugCheckCallback(ptr) +@ stdcall KeDeregisterBugCheckReasonCallback(ptr) +@ stdcall KeDeregisterNmiCallback(ptr) +@ stdcall KeDetachProcess() +@ stdcall KeDisconnectInterrupt(ptr) +@ stdcall KeEnterCriticalRegion() _KeEnterCriticalRegion +@ stdcall KeEnterGuardedRegion() _KeEnterGuardedRegion +@ stdcall KeEnterKernelDebugger() +@ stdcall KeFindConfigurationEntry(ptr long long ptr) +@ stdcall KeFindConfigurationNextEntry(ptr long long ptr ptr) +@ stdcall KeFlushEntireTb(long long) +@ stdcall KeFlushQueuedDpcs() +;KeGenericCallDpc +@ stdcall KeGetCurrentThread() +@ stdcall KeGetPreviousMode() +@ stdcall KeGetRecommendedSharedDataAlignment() +;KeI386AbiosCall +@ stdcall KeI386AllocateGdtSelectors(ptr long) +;KeI386Call16BitCStyleFunction +;KeI386Call16BitFunction +@ stdcall KeI386FlatToGdtSelector(long long long) +;KeI386GetLid +@ extern KeI386MachineType +@ stdcall KeI386ReleaseGdtSelectors(ptr long) +;KeI386ReleaseLid +;KeI386SetGdtSelector +@ stdcall KeInitializeApc(ptr ptr long ptr ptr ptr long ptr) +@ stdcall KeInitializeCrashDumpHeader(long long ptr long ptr) +@ stdcall KeInitializeDeviceQueue(ptr) +@ stdcall KeInitializeDpc(ptr ptr ptr) +@ stdcall KeInitializeEvent(ptr long long) +@ fastcall KeInitializeGuardedMutex(ptr) +@ stdcall KeInitializeInterrupt(ptr ptr ptr ptr long long long long long long long) +@ stdcall KeInitializeMutant(ptr long) +@ stdcall KeInitializeMutex(ptr long) +@ stdcall KeInitializeQueue(ptr long) +@ stdcall KeInitializeSemaphore(ptr long long) +@ stdcall KeInitializeSpinLock(ptr) +@ stdcall KeInitializeThreadedDpc(ptr ptr ptr) +@ stdcall KeInitializeTimer(ptr) +@ stdcall KeInitializeTimerEx(ptr long) +@ stdcall KeInsertByKeyDeviceQueue(ptr ptr long) +@ stdcall KeInsertDeviceQueue(ptr ptr) +@ stdcall KeInsertHeadQueue(ptr ptr) +@ stdcall KeInsertQueue(ptr ptr) +@ stdcall KeInsertQueueApc(ptr ptr ptr long) +@ stdcall KeInsertQueueDpc(ptr ptr ptr) +@ stdcall KeInvalidateAllCaches() +@ stdcall KeIpiGenericCall(ptr ptr) +@ stdcall KeIsAttachedProcess() +@ stdcall KeIsExecutingDpc() +;KeIsWaitListEmpty +@ stdcall KeLeaveCriticalRegion() _KeLeaveCriticalRegion +@ stdcall KeLeaveGuardedRegion() _KeLeaveGuardedRegion +@ extern KeLoaderBlock +@ extern KeNumberProcessors +@ stdcall KeProfileInterrupt(ptr) +@ stdcall KeProfileInterruptWithSource(ptr long) +@ stdcall KePulseEvent(ptr long long) +@ stdcall KeQueryActiveProcessors() +@ stdcall KeQueryInterruptTime() +@ stdcall KeQueryPriorityThread(ptr) +@ stdcall KeQueryRuntimeThread(ptr ptr) +@ stdcall KeQuerySystemTime(ptr) +@ stdcall KeQueryTickCount(ptr) +@ stdcall KeQueryTimeIncrement() +@ stdcall KeRaiseUserException(long) +@ stdcall KeReadStateEvent(ptr) +@ stdcall KeReadStateMutant(ptr) +@ stdcall KeReadStateMutex(ptr) KeReadStateMutant +@ stdcall KeReadStateQueue(ptr) +@ stdcall KeReadStateSemaphore(ptr) +@ stdcall KeReadStateTimer(ptr) +@ stdcall KeRegisterBugCheckCallback(ptr ptr ptr long ptr) +@ stdcall KeRegisterBugCheckReasonCallback(ptr ptr ptr ptr) +@ stdcall KeRegisterNmiCallback(ptr ptr) +@ fastcall KeReleaseGuardedMutex(ptr) +@ fastcall KeReleaseGuardedMutexUnsafe(ptr) +@ fastcall KeReleaseInStackQueuedSpinLockForDpc(ptr) +@ fastcall KeReleaseInStackQueuedSpinLockFromDpcLevel(ptr) +@ stdcall KeReleaseInterruptSpinLock(ptr long) +@ stdcall KeReleaseMutant(ptr long long long) +@ stdcall KeReleaseMutex(ptr long) +@ stdcall KeReleaseSemaphore(ptr long long long) +@ fastcall KeReleaseSpinLockForDpc(ptr long) +@ stdcall KeReleaseSpinLockFromDpcLevel(ptr) +@ stdcall KeRemoveByKeyDeviceQueue(ptr long) +@ stdcall KeRemoveByKeyDeviceQueueIfBusy(ptr long) +@ stdcall KeRemoveDeviceQueue(ptr) +@ stdcall KeRemoveEntryDeviceQueue(ptr ptr) +@ stdcall KeRemoveQueue(ptr long ptr) +@ stdcall KeRemoveQueueDpc(ptr) +@ stdcall KeRemoveSystemServiceTable(long) +@ stdcall KeResetEvent(ptr) +@ stdcall KeRestoreFloatingPointState(ptr) +@ stdcall KeRevertToUserAffinityThread() +@ stdcall KeRundownQueue(ptr) +@ stdcall KeSaveFloatingPointState(ptr) +@ cdecl KeSaveStateForHibernate(ptr) +@ extern KeServiceDescriptorTable +@ stdcall KeSetAffinityThread(ptr long) +@ stdcall KeSetBasePriorityThread(ptr long) +@ stdcall KeSetDmaIoCoherency(long) +@ stdcall KeSetEvent(ptr long long) +@ stdcall KeSetEventBoostPriority(ptr ptr) +@ stdcall KeSetIdealProcessorThread(ptr long) +@ stdcall KeSetImportanceDpc(ptr long) +@ stdcall KeSetKernelStackSwapEnable(long) +@ stdcall KeSetPriorityThread(ptr long) +@ stdcall KeSetProfileIrql(long) +@ stdcall KeSetSystemAffinityThread(long) +@ stdcall KeSetTargetProcessorDpc(ptr long) +@ stdcall KeSetTimeIncrement(long long) +@ stdcall KeSetTimer(ptr long long ptr) +@ stdcall KeSetTimerEx(ptr long long long ptr) +;KeSignalCallDpcDone +;KeSignalCallDpcSynchronize +@ stdcall KeStackAttachProcess(ptr ptr) +@ stdcall KeSynchronizeExecution(ptr ptr ptr) +@ stdcall KeTerminateThread(long) +@ fastcall KeTestSpinLock(ptr) +@ extern KeTickCount +@ fastcall KeTryToAcquireGuardedMutex(ptr) +@ fastcall KeTryToAcquireSpinLockAtDpcLevel(ptr) +@ stdcall KeUnstackDetachProcess(ptr) +@ stdcall KeUpdateRunTime(ptr long) +#ifdef _M_IX86 +@ stdcall KeUpdateSystemTime() +#else +@ stdcall KeUpdateSystemTime(ptr long long) +#endif +@ stdcall KeUserModeCallback(long ptr long ptr ptr) +@ stdcall KeWaitForMultipleObjects(long ptr long long long long ptr ptr) +@ stdcall KeWaitForMutexObject(ptr long long long ptr) KeWaitForSingleObject +@ stdcall KeWaitForSingleObject(ptr long long long ptr) +@ fastcall KefAcquireSpinLockAtDpcLevel(ptr) +@ fastcall KefReleaseSpinLockFromDpcLevel(ptr) +@ stdcall Kei386EoiHelper() +@ fastcall KiAcquireSpinLock(ptr) +@ extern KiBugCheckData +@ stdcall KiCheckForKernelApcDelivery() +@ stdcall KiCoprocessorError() +@ stdcall KiDeliverApc(long ptr ptr) +@ stdcall KiDispatchInterrupt() +@ extern KiEnableTimerWatchdog +@ stdcall KiIpiServiceRoutine(ptr ptr) +@ fastcall KiReleaseSpinLock(ptr) +@ cdecl KiUnexpectedInterrupt() +;Kii386SpinOnSpinLock +@ stdcall LdrAccessResource(ptr ptr ptr ptr) +@ stdcall LdrEnumResources(ptr ptr long ptr ptr) +@ stdcall LdrFindResourceDirectory_U(ptr ptr long ptr) +@ stdcall LdrFindResource_U(ptr ptr long ptr) +@ extern LpcPortObjectType +@ stdcall LpcRequestPort(ptr ptr) +@ stdcall LpcRequestWaitReplyPort(ptr ptr ptr) +@ stdcall LsaCallAuthenticationPackage(long long long long long long long) +@ stdcall LsaDeregisterLogonProcess(long long) +@ stdcall LsaFreeReturnBuffer(ptr) +@ stdcall LsaLogonUser(ptr ptr long long ptr long ptr ptr ptr ptr ptr ptr ptr ptr) +@ stdcall LsaLookupAuthenticationPackage(long long long) +@ stdcall LsaRegisterLogonProcess(ptr ptr ptr) +@ extern Mm64BitPhysicalAddress +@ stdcall MmAddPhysicalMemory(ptr ptr) +@ stdcall MmAddVerifierThunks(ptr long) +@ stdcall MmAdjustWorkingSetSize(long long long long) +@ stdcall MmAdvanceMdl(ptr long) +@ stdcall MmAllocateContiguousMemory(long long long) +@ stdcall MmAllocateContiguousMemorySpecifyCache(long long long long long long long long) +@ stdcall MmAllocateMappingAddress(long long) +@ stdcall MmAllocateNonCachedMemory(long) +@ stdcall MmAllocatePagesForMdl(ptr ptr ptr ptr ptr ptr ptr) +@ stdcall MmAllocatePagesForMdlEx(long long long long long long long long long) +@ stdcall MmBuildMdlForNonPagedPool(ptr) +@ stdcall MmCanFileBeTruncated(ptr ptr) +;MmCommitSessionMappedView +@ stdcall MmCreateMdl(ptr ptr long) +;MmCreateMirror +@ stdcall MmCreateSection(ptr long ptr ptr long long ptr ptr) +@ stdcall MmDisableModifiedWriteOfSection(long) +@ stdcall MmFlushImageSection(ptr long) +@ stdcall MmForceSectionClosed(ptr long) +@ stdcall MmFreeContiguousMemory(ptr) +@ stdcall MmFreeContiguousMemorySpecifyCache(ptr long long) +@ stdcall MmFreeMappingAddress(ptr long) +@ stdcall MmFreeNonCachedMemory(ptr long) +@ stdcall MmFreePagesFromMdl(ptr) +@ stdcall MmGetPhysicalAddress(ptr) +@ stdcall MmGetPhysicalMemoryRanges() +@ stdcall MmGetSystemRoutineAddress(ptr) +@ stdcall MmGetVirtualForPhysical(long long) +@ stdcall MmGrowKernelStack(ptr) +@ extern MmHighestUserAddress +@ stdcall MmIsAddressValid(ptr) +@ stdcall MmIsDriverVerifying(ptr) +;MmIsIoSpaceActive +@ stdcall MmIsNonPagedSystemAddressValid(ptr) +@ stdcall MmIsRecursiveIoFault() +@ stdcall MmIsThisAnNtAsSystem() +@ stdcall MmIsVerifierEnabled(ptr) +@ stdcall MmLockPagableDataSection(ptr) +@ stdcall MmLockPagableImageSection(ptr) MmLockPagableDataSection +@ stdcall MmLockPagableSectionByHandle(ptr) +@ stdcall MmMapIoSpace(long long long long) +@ stdcall MmMapLockedPages(ptr long) +@ stdcall MmMapLockedPagesSpecifyCache(ptr long long ptr long long) +@ stdcall MmMapLockedPagesWithReservedMapping(ptr long ptr long) +@ stdcall MmMapMemoryDumpMdl(ptr) +@ stdcall MmMapUserAddressesToPage(ptr long ptr) +@ stdcall MmMapVideoDisplay(long long long long) +@ stdcall MmMapViewInSessionSpace(ptr ptr ptr) +@ stdcall MmMapViewInSystemSpace(ptr ptr ptr) +@ stdcall MmMapViewOfSection(ptr ptr ptr long long ptr ptr long long long) +@ stdcall MmMarkPhysicalMemoryAsBad(ptr ptr) +@ stdcall MmMarkPhysicalMemoryAsGood(ptr ptr) +@ stdcall MmPageEntireDriver(ptr) +@ stdcall MmPrefetchPages(long ptr) +@ stdcall MmProbeAndLockPages(ptr long long) +@ stdcall MmProbeAndLockProcessPages(ptr ptr long long) +@ stdcall MmProbeAndLockSelectedPages(ptr ptr long long) +@ stdcall MmProtectMdlSystemAddress(ptr long) +@ stdcall MmQuerySystemSize() +@ stdcall MmRemovePhysicalMemory(ptr ptr) +@ stdcall MmResetDriverPaging(ptr) +@ extern MmSectionObjectType +@ stdcall MmSecureVirtualMemory(ptr long long) +@ stdcall MmSetAddressRangeModified(ptr long) +@ stdcall MmSetBankedSection(long long long long long long) +@ stdcall MmSizeOfMdl(ptr long) +@ extern MmSystemRangeStart +@ stdcall MmTrimAllSystemPagableMemory(long) +@ stdcall MmUnlockPagableImageSection(ptr) +@ stdcall MmUnlockPages(ptr) +@ stdcall MmUnmapIoSpace(ptr long) +@ stdcall MmUnmapLockedPages(ptr ptr) +@ stdcall MmUnmapReservedMapping(ptr long ptr) +@ stdcall MmUnmapVideoDisplay(ptr long) +@ stdcall MmUnmapViewInSessionSpace(ptr) +@ stdcall MmUnmapViewInSystemSpace(ptr) +@ stdcall MmUnmapViewOfSection(ptr ptr) +@ stdcall MmUnsecureVirtualMemory(ptr) +@ extern MmUserProbeAddress +@ extern NlsAnsiCodePage +@ extern NlsLeadByteInfo +@ extern NlsMbCodePageTag +@ extern NlsMbOemCodePageTag +@ extern NlsOemCodePage +@ extern NlsOemLeadByteInfo _NlsOemLeadByteInfo +@ stdcall NtAddAtom(wstr long ptr) +@ stdcall NtAdjustPrivilegesToken(ptr long ptr long ptr ptr) +@ stdcall NtAlertThread(ptr) +@ stdcall NtAllocateLocallyUniqueId(ptr) +@ stdcall NtAllocateUuids(ptr ptr ptr ptr) +@ stdcall NtAllocateVirtualMemory(ptr ptr long ptr long long) +@ extern NtBuildNumber +@ stdcall NtClose(ptr) +@ stdcall NtConnectPort(ptr ptr ptr ptr ptr ptr ptr ptr) +@ stdcall NtCreateEvent(ptr long ptr long long) +@ stdcall NtCreateFile(ptr long ptr ptr ptr long long long long ptr long) +@ stdcall NtCreateSection(ptr long ptr ptr long long ptr) +@ stdcall NtCreateTimer(ptr long ptr long) +@ stdcall NtDeleteAtom(ptr) +@ stdcall NtDeleteFile(ptr) +@ stdcall NtDeviceIoControlFile(ptr ptr ptr ptr ptr long ptr long ptr long) +@ stdcall NtDuplicateObject(ptr ptr ptr ptr long long long) +@ stdcall NtDuplicateToken(ptr long ptr long long ptr) +@ stdcall NtFindAtom(wstr long ptr) +@ stdcall NtFreeVirtualMemory(ptr ptr ptr long) +@ stdcall NtFsControlFile(ptr ptr ptr ptr ptr long ptr long ptr long) +@ extern NtGlobalFlag +@ stdcall NtLockFile(ptr ptr ptr ptr ptr ptr ptr long long long) +@ stdcall NtMakePermanentObject(ptr) +@ stdcall NtMapViewOfSection(ptr ptr ptr long long ptr ptr long long long) +@ stdcall NtNotifyChangeDirectoryFile(ptr ptr ptr ptr ptr ptr long long long) +@ stdcall NtOpenEvent(ptr long ptr) +@ stdcall NtOpenFile(ptr long ptr ptr long long) +@ stdcall NtOpenProcess(ptr long ptr ptr) +@ stdcall NtOpenProcessToken(ptr long ptr) +@ stdcall NtOpenProcessTokenEx(ptr long long ptr) +@ stdcall NtOpenThread(ptr long ptr ptr) +@ stdcall NtOpenThreadToken(ptr long long ptr) +@ stdcall NtOpenThreadTokenEx(ptr long long long ptr) +@ stdcall NtQueryDirectoryFile(ptr ptr ptr ptr ptr ptr long long long ptr long) +@ stdcall NtQueryEaFile(ptr ptr ptr long long ptr long ptr long) +@ stdcall NtQueryInformationAtom(ptr long ptr long ptr) +@ stdcall NtQueryInformationFile(ptr ptr ptr long long) +@ stdcall NtQueryInformationProcess(ptr ptr ptr long ptr) +@ stdcall NtQueryInformationThread(ptr long ptr long ptr) +@ stdcall NtQueryInformationToken(ptr long ptr long ptr) +@ stdcall NtQueryQuotaInformationFile(ptr ptr ptr long long ptr long ptr long) +@ stdcall NtQuerySecurityObject(ptr long ptr long ptr) +@ stdcall NtQuerySystemInformation(long ptr long ptr) +@ stdcall NtQueryVolumeInformationFile(ptr ptr ptr long long) +@ stdcall NtReadFile(ptr ptr ptr ptr ptr ptr long ptr ptr) +@ stdcall NtRequestPort(ptr ptr) +@ stdcall NtRequestWaitReplyPort(ptr ptr ptr) +@ stdcall NtSetEaFile(ptr ptr ptr long) +@ stdcall NtSetEvent(ptr ptr) +@ stdcall NtSetInformationFile(ptr ptr ptr long long) +@ stdcall NtSetInformationProcess(ptr ptr ptr long) +@ stdcall NtSetInformationThread(ptr long ptr long) +@ stdcall NtSetQuotaInformationFile(ptr ptr ptr long) +@ stdcall NtSetSecurityObject(ptr long ptr) +@ stdcall NtSetVolumeInformationFile(ptr ptr ptr long long) +@ stdcall NtShutdownSystem(long) +@ stdcall NtTraceEvent(long long long ptr) +@ stdcall NtUnlockFile(ptr ptr ptr ptr long) +@ stdcall NtVdmControl(long ptr) +@ stdcall NtWaitForSingleObject(ptr long ptr) +@ stdcall NtWriteFile(ptr ptr ptr ptr ptr ptr long ptr ptr) +@ stdcall ObAssignSecurity(ptr ptr ptr ptr) +@ stdcall ObCheckCreateObjectAccess(ptr long ptr ptr long long ptr) +@ stdcall ObCheckObjectAccess(ptr ptr long long ptr) +@ stdcall ObCloseHandle(ptr long) +@ stdcall ObCreateObject(long ptr ptr long ptr long long long ptr) +@ stdcall ObCreateObjectType(ptr ptr ptr ptr) +;ObDeleteCapturedInsertInfo +@ stdcall ObDereferenceObject(ptr) +@ stdcall ObDereferenceObjectDeferDelete(ptr) +@ stdcall ObDereferenceSecurityDescriptor(ptr long) +@ stdcall ObFindHandleForObject(ptr ptr ptr ptr ptr) +@ stdcall ObGetObjectSecurity(ptr ptr ptr) +@ stdcall ObInsertObject(ptr ptr long long ptr ptr) +@ stdcall ObIsKernelHandle(ptr) +@ stdcall ObLogSecurityDescriptor(ptr ptr long) +@ stdcall ObMakeTemporaryObject(ptr) +@ stdcall ObOpenObjectByName(ptr ptr long ptr long ptr ptr) +@ stdcall ObOpenObjectByPointer(ptr long ptr long ptr long ptr) +@ stdcall ObQueryNameString(ptr ptr long ptr) +@ stdcall ObQueryObjectAuditingByHandle(ptr ptr) +@ stdcall ObReferenceObjectByHandle(ptr long ptr long ptr ptr) +@ stdcall ObReferenceObjectByName(ptr long ptr long ptr long ptr ptr) +@ stdcall ObReferenceObjectByPointer(ptr long ptr long) +@ stdcall ObReferenceSecurityDescriptor(ptr long) +@ stdcall ObReleaseObjectSecurity(ptr long) +;ObSetHandleAttributes@12 +@ stdcall ObSetSecurityDescriptorInfo(ptr ptr ptr ptr long ptr) +@ stdcall ObSetSecurityObjectByPointer(ptr long ptr) +@ fastcall ObfDereferenceObject(ptr) +@ fastcall ObfReferenceObject(ptr) +;PfxFindPrefix +;PfxInitialize +;PfxInsertPrefix +;PfxRemovePrefix +@ stdcall PoCallDriver(ptr ptr) +;PoCancelDeviceNotify +@ stdcall PoQueueShutdownWorkItem(ptr) +@ stdcall PoRegisterDeviceForIdleDetection(ptr long long long) +;PoRegisterDeviceNotify +@ stdcall PoRegisterSystemState(ptr long) +@ stdcall PoRequestPowerIrp(ptr long long ptr ptr ptr) +;PoRequestShutdownEvent +;PoSetHiberRange +@ stdcall PoSetDeviceBusy(ptr) +@ stdcall PoSetPowerState(ptr long long) +@ stdcall PoSetSystemState(long) +;PoShutdownBugCheck +@ stdcall PoStartNextPowerIrp(ptr) +@ stdcall PoUnregisterSystemState(ptr) +@ stdcall ProbeForRead(ptr long long) +@ stdcall ProbeForWrite(ptr long long) +@ stdcall PsAssignImpersonationToken(ptr ptr) +@ stdcall PsChargePoolQuota(ptr long long) +@ stdcall PsChargeProcessNonPagedPoolQuota(ptr long) +@ stdcall PsChargeProcessPagedPoolQuota(ptr long) +@ stdcall PsChargeProcessPoolQuota(ptr long long) +@ stdcall PsCreateSystemProcess(ptr long ptr) +@ stdcall PsCreateSystemThread(ptr long ptr ptr ptr ptr ptr) +@ stdcall PsDereferenceImpersonationToken(ptr) PsDereferencePrimaryToken +@ stdcall PsDereferencePrimaryToken(ptr) +@ stdcall PsDisableImpersonation(ptr ptr) +@ stdcall PsEstablishWin32Callouts(ptr) +@ stdcall PsGetContextThread(ptr ptr long) +@ stdcall PsGetCurrentProcess() IoGetCurrentProcess +@ stdcall PsGetCurrentProcessId() +@ stdcall PsGetCurrentProcessSessionId() +@ stdcall PsGetCurrentProcessWin32Process() +@ stdcall PsGetCurrentThread() KeGetCurrentThread +@ stdcall PsGetCurrentThreadId() +@ stdcall PsGetCurrentThreadPreviousMode() +;PsGetCurrentThreadProcess +;PsGetCurrentThreadProcessId +@ stdcall PsGetCurrentThreadStackBase() +@ stdcall PsGetCurrentThreadStackLimit() +;PsGetCurrentThreadTeb +@ stdcall PsGetCurrentThreadWin32Thread() +;PsGetCurrentThreadWin32ThreadAndEnterCriticalRegion +@ stdcall PsGetJobLock(ptr) +@ stdcall PsGetJobSessionId(ptr) +@ stdcall PsGetJobUIRestrictionsClass(ptr) +@ stdcall PsGetProcessCreateTimeQuadPart(ptr) +@ stdcall PsGetProcessDebugPort(ptr) +@ stdcall PsGetProcessExitProcessCalled(ptr) +@ stdcall PsGetProcessExitStatus(ptr) +@ stdcall PsGetProcessExitTime() +@ stdcall PsGetProcessId(ptr) +@ stdcall PsGetProcessImageFileName(ptr) +@ stdcall PsGetProcessInheritedFromUniqueProcessId(ptr) +@ stdcall PsGetProcessJob(ptr) +@ stdcall PsGetProcessPeb(ptr) +@ stdcall PsGetProcessPriorityClass(ptr) +@ stdcall PsGetProcessSectionBaseAddress(ptr) +@ stdcall PsGetProcessSecurityPort(ptr) +@ stdcall PsGetProcessSessionId(ptr) +;PsGetProcessSessionIdEx +@ stdcall PsGetProcessWin32Process(ptr) +@ stdcall PsGetProcessWin32WindowStation(ptr) +@ stdcall PsGetThreadFreezeCount(ptr) +@ stdcall PsGetThreadHardErrorsAreDisabled(ptr) +@ stdcall PsGetThreadId(ptr) +@ stdcall PsGetThreadProcess(ptr) +@ stdcall PsGetThreadProcessId(ptr) +@ stdcall PsGetThreadSessionId(ptr) +@ stdcall PsGetThreadTeb(ptr) +@ stdcall PsGetThreadWin32Thread(ptr) +@ stdcall PsGetVersion(ptr ptr ptr ptr) +@ stdcall PsImpersonateClient(ptr ptr long long long) +@ extern PsInitialSystemProcess +@ stdcall PsIsProcessBeingDebugged(ptr) +;PsIsSystemProcess +@ stdcall PsIsSystemThread(ptr) +@ stdcall PsIsThreadImpersonating(ptr) +@ stdcall PsIsThreadTerminating(ptr) +@ extern PsJobType +@ stdcall PsLookupProcessByProcessId(ptr ptr) +@ stdcall PsLookupProcessThreadByCid(ptr ptr ptr) +@ stdcall PsLookupThreadByThreadId(ptr ptr) +@ extern PsProcessType _PsProcessType +@ stdcall PsReferenceImpersonationToken(ptr ptr ptr ptr) +@ stdcall PsReferencePrimaryToken(ptr) +@ stdcall PsRemoveCreateThreadNotifyRoutine(ptr) +@ stdcall PsRemoveLoadImageNotifyRoutine(ptr) +@ stdcall PsRestoreImpersonation(ptr ptr) +@ stdcall PsReturnPoolQuota(ptr long long) +@ stdcall PsReturnProcessNonPagedPoolQuota(ptr long) +@ stdcall PsReturnProcessPagedPoolQuota(ptr long) +@ stdcall PsRevertThreadToSelf(ptr) +@ stdcall PsRevertToSelf() +@ stdcall PsSetContextThread(ptr ptr long) +@ stdcall PsSetCreateProcessNotifyRoutine(ptr long) +@ stdcall PsSetCreateThreadNotifyRoutine(ptr) +@ stdcall PsSetJobUIRestrictionsClass(ptr long) +@ stdcall PsSetLegoNotifyRoutine(ptr) +@ stdcall PsSetLoadImageNotifyRoutine(ptr) +@ stdcall PsSetProcessPriorityByClass(ptr ptr) +@ stdcall PsSetProcessPriorityClass(ptr long) +@ stdcall PsSetProcessSecurityPort(ptr ptr) +@ stdcall PsSetProcessWin32Process(ptr ptr) +@ stdcall PsSetProcessWindowStation(ptr ptr) +@ stdcall PsSetThreadHardErrorsAreDisabled(ptr long) +@ stdcall PsSetThreadWin32Thread(ptr ptr) +@ stdcall PsTerminateSystemThread(long) +@ extern PsThreadType _PsThreadType +;PsWrapApcWow64Thread +@ stdcall READ_REGISTER_BUFFER_UCHAR(ptr ptr long) +@ stdcall READ_REGISTER_BUFFER_ULONG(ptr ptr long) +@ stdcall READ_REGISTER_BUFFER_USHORT(ptr ptr long) +@ stdcall READ_REGISTER_UCHAR(ptr) +@ stdcall READ_REGISTER_ULONG(ptr) +@ stdcall READ_REGISTER_USHORT(ptr) +@ stdcall KeRosDumpStackFrames(ptr long) +@ stdcall RtlAbsoluteToSelfRelativeSD(ptr ptr ptr) +@ stdcall RtlAddAccessAllowedAce(ptr long long ptr) +@ stdcall RtlAddAccessAllowedAceEx(ptr long long long ptr) +@ stdcall RtlAddAce(ptr long long ptr long) +@ stdcall RtlAddAtomToAtomTable(ptr wstr ptr) +@ stdcall RtlAddRange(ptr long long long long long long ptr ptr) +@ stdcall RtlAllocateAndInitializeSid(ptr long long long long long long long long long ptr) +@ stdcall RtlAllocateHeap(ptr long long) +@ stdcall RtlAnsiCharToUnicodeChar(ptr) +@ stdcall RtlAnsiStringToUnicodeSize(ptr) RtlxAnsiStringToUnicodeSize +@ stdcall RtlAnsiStringToUnicodeString(ptr ptr long) +@ stdcall RtlAppendAsciizToString(ptr str) +@ stdcall RtlAppendStringToString(ptr ptr) +@ stdcall RtlAppendUnicodeStringToString(ptr ptr) +@ stdcall RtlAppendUnicodeToString(ptr wstr) +@ stdcall RtlAreAllAccessesGranted(long long) +@ stdcall RtlAreAnyAccessesGranted(long long) +@ stdcall RtlAreBitsClear(ptr long long) +@ stdcall RtlAreBitsSet(ptr long long) +@ stdcall RtlAssert(str str long str) +@ stdcall RtlCaptureContext(ptr) +@ stdcall RtlCaptureStackBackTrace(long long ptr ptr) +@ stdcall RtlCharToInteger(str long ptr) +@ stdcall RtlCheckRegistryKey(long wstr) +@ stdcall RtlClearAllBits(ptr) +@ stdcall RtlClearBit(ptr long) +@ stdcall RtlClearBits(ptr long long) +@ stdcall RtlCompareMemory(ptr ptr long) +@ stdcall RtlCompareMemoryUlong(ptr long long) +@ stdcall RtlCompareString(ptr ptr long) +@ stdcall RtlCompareUnicodeString(ptr ptr long) +@ stdcall RtlCompressBuffer(long ptr long ptr long long ptr ptr) +@ stdcall RtlCompressChunks(ptr long ptr long ptr long ptr) +@ stdcall RtlConvertLongToLargeInteger(long) +@ stdcall RtlConvertSidToUnicodeString(ptr ptr long) +@ stdcall RtlConvertUlongToLargeInteger(long) +@ stdcall RtlCopyLuid(ptr ptr) +@ stdcall RtlCopyRangeList(ptr ptr) +@ stdcall RtlCopySid(long ptr ptr) +@ stdcall RtlCopyString(ptr ptr) +@ stdcall RtlCopyUnicodeString(ptr ptr) +@ stdcall RtlCreateAcl(ptr long long) +@ stdcall RtlCreateAtomTable(long ptr) +@ stdcall RtlCreateHeap(long ptr long long ptr ptr) +@ stdcall RtlCreateRegistryKey(long wstr) +@ stdcall RtlCreateSecurityDescriptor(ptr long) +@ stdcall RtlCreateSystemVolumeInformationFolder(ptr) +@ stdcall RtlCreateUnicodeString(ptr wstr) +@ stdcall RtlCustomCPToUnicodeN(ptr wstr long ptr ptr long) +@ stdcall RtlDecompressBuffer(long ptr long ptr long ptr) +@ stdcall RtlDecompressChunks(ptr long ptr long ptr long ptr) +@ stdcall RtlDecompressFragment(long ptr long ptr long long ptr ptr) +@ stdcall RtlDelete(ptr) +@ stdcall RtlDeleteAce(ptr long) +@ stdcall RtlDeleteAtomFromAtomTable(ptr ptr) +@ stdcall RtlDeleteElementGenericTable(ptr ptr) +@ stdcall RtlDeleteElementGenericTableAvl(ptr ptr) +@ stdcall RtlDeleteNoSplay(ptr ptr) +@ stdcall RtlDeleteOwnersRanges(ptr ptr) +@ stdcall RtlDeleteRange(ptr long long long long ptr) +@ stdcall RtlDeleteRegistryValue(long wstr wstr) +@ stdcall RtlDescribeChunk(long ptr ptr ptr ptr) +@ stdcall RtlDestroyAtomTable(ptr) +@ stdcall RtlDestroyHeap(ptr) +@ stdcall RtlDowncaseUnicodeString(ptr ptr long) +@ stdcall RtlEmptyAtomTable(ptr long) +@ stdcall RtlEnlargedIntegerMultiply(long long) +@ stdcall RtlEnlargedUnsignedDivide(long long long ptr) +@ stdcall RtlEnlargedUnsignedMultiply(long long) +@ stdcall RtlEnumerateGenericTable(ptr long) +@ stdcall RtlEnumerateGenericTableAvl(ptr long) +@ stdcall RtlEnumerateGenericTableLikeADirectory(ptr ptr ptr long ptr ptr ptr) +@ stdcall RtlEnumerateGenericTableWithoutSplaying(ptr ptr) +@ stdcall RtlEnumerateGenericTableWithoutSplayingAvl(ptr ptr) +@ stdcall RtlEqualLuid(ptr ptr) +@ stdcall RtlEqualSid(ptr ptr) +@ stdcall RtlEqualString(ptr ptr long) +@ stdcall RtlEqualUnicodeString(ptr ptr long) +@ stdcall RtlExtendedIntegerMultiply(long long long) +@ stdcall RtlExtendedLargeIntegerDivide(long long long ptr) +@ stdcall RtlExtendedMagicDivide(long long long long long) +@ stdcall RtlFillMemory(ptr long long) +@ stdcall RtlFillMemoryUlong(ptr long long) +@ stdcall RtlFindClearBits(ptr long long) +@ stdcall RtlFindClearBitsAndSet(ptr long long) +@ stdcall RtlFindClearRuns(ptr ptr long long) +@ stdcall RtlFindFirstRunClear(ptr ptr) +@ stdcall RtlFindLastBackwardRunClear(ptr long ptr) +@ stdcall RtlFindLeastSignificantBit(long long) +@ stdcall RtlFindLongestRunClear(ptr ptr) +@ stdcall RtlFindMessage(ptr long long long ptr) +@ stdcall RtlFindMostSignificantBit(long long) +@ stdcall RtlFindNextForwardRunClear(ptr long ptr) +@ stdcall RtlFindRange(ptr long long long long long long long long ptr ptr ptr) +@ stdcall RtlFindSetBits(ptr long long) +@ stdcall RtlFindSetBitsAndClear(ptr long long) +@ stdcall RtlFindUnicodePrefix(ptr ptr long) +@ stdcall RtlFormatCurrentUserKeyPath(ptr) +@ stdcall RtlFreeAnsiString(ptr) +@ stdcall RtlFreeHeap(ptr long ptr) +@ stdcall RtlFreeOemString(ptr) +@ stdcall RtlFreeRangeList(ptr) +@ stdcall RtlFreeUnicodeString(ptr) +@ stdcall RtlGUIDFromString(ptr ptr) +@ stdcall RtlGenerate8dot3Name(ptr ptr long ptr) +@ stdcall RtlGetAce(ptr long ptr) +@ stdcall RtlGetCallersAddress(ptr ptr) +@ stdcall RtlGetCompressionWorkSpaceSize(long ptr ptr) +@ stdcall RtlGetDaclSecurityDescriptor(ptr ptr ptr ptr) +@ stdcall RtlGetDefaultCodePage(ptr ptr) +@ stdcall RtlGetElementGenericTable(ptr long) +@ stdcall RtlGetElementGenericTableAvl(ptr long) +@ stdcall RtlGetFirstRange(ptr ptr ptr) +@ stdcall RtlGetGroupSecurityDescriptor(ptr ptr ptr) +@ stdcall RtlGetNextRange(ptr ptr long) +@ stdcall RtlGetNtGlobalFlags() +@ stdcall RtlGetOwnerSecurityDescriptor(ptr ptr ptr) +@ stdcall RtlGetSaclSecurityDescriptor(ptr ptr ptr ptr) +@ stdcall RtlGetSetBootStatusData(ptr long long ptr long long) +@ stdcall RtlGetVersion(ptr) +@ stdcall RtlHashUnicodeString(ptr long long ptr) +@ stdcall RtlImageDirectoryEntryToData(ptr long long ptr) +@ stdcall RtlImageNtHeader(ptr) +@ stdcall RtlInitAnsiString(ptr str) +@ stdcall RtlInitAnsiStringEx(ptr str) +@ stdcall RtlInitCodePageTable(ptr ptr) +@ stdcall RtlInitString(ptr str) +@ stdcall RtlInitUnicodeString(ptr wstr) +@ stdcall RtlInitUnicodeStringEx(ptr wstr) +@ stdcall RtlInitializeBitMap(ptr ptr long) +@ stdcall RtlInitializeGenericTable(ptr ptr ptr ptr ptr) +@ stdcall RtlInitializeGenericTableAvl(ptr ptr ptr ptr ptr) +@ stdcall RtlInitializeRangeList(ptr) +@ stdcall RtlInitializeSid(ptr ptr long) +@ stdcall RtlInitializeUnicodePrefix(ptr) +@ stdcall RtlInsertElementGenericTable(ptr ptr long ptr) +@ stdcall RtlInsertElementGenericTableAvl(ptr ptr long ptr) +@ stdcall RtlInsertElementGenericTableFull(ptr ptr long ptr ptr long) +@ stdcall RtlInsertElementGenericTableFullAvl(ptr ptr long ptr ptr ptr) +@ stdcall RtlInsertUnicodePrefix(ptr ptr ptr) +@ stdcall RtlInt64ToUnicodeString(long long long ptr) +@ stdcall RtlIntegerToChar(long long long ptr) +@ stdcall RtlIntegerToUnicode(long long long ptr) +@ stdcall RtlIntegerToUnicodeString(long long ptr) +@ stdcall RtlInvertRangeList(ptr ptr) +@ stdcall RtlIpv4AddressToStringA(ptr ptr) +@ stdcall RtlIpv4AddressToStringExA(ptr long ptr ptr) +@ stdcall RtlIpv4AddressToStringExW(ptr long ptr ptr) +@ stdcall RtlIpv4AddressToStringW(ptr ptr) +@ stdcall RtlIpv4StringToAddressA(str long ptr ptr) +@ stdcall RtlIpv4StringToAddressExA(str long ptr ptr) +@ stdcall RtlIpv4StringToAddressExW(wstr long ptr ptr) +@ stdcall RtlIpv4StringToAddressW(wstr long ptr ptr) +@ stdcall RtlIpv6AddressToStringA(ptr ptr) +@ stdcall RtlIpv6AddressToStringExA(ptr long long ptr ptr) +@ stdcall RtlIpv6AddressToStringExW(ptr long long ptr ptr) +@ stdcall RtlIpv6AddressToStringW(ptr ptr) +@ stdcall RtlIpv6StringToAddressA(str ptr ptr) +@ stdcall RtlIpv6StringToAddressExA(str ptr ptr ptr) +@ stdcall RtlIpv6StringToAddressExW(wstr ptr ptr ptr) +@ stdcall RtlIpv6StringToAddressW(wstr ptr ptr) +@ stdcall RtlIsGenericTableEmpty(ptr) +@ stdcall RtlIsGenericTableEmptyAvl(ptr) +@ stdcall RtlIsNameLegalDOS8Dot3(ptr ptr ptr) +@ stdcall RtlIsRangeAvailable(ptr long long long long long long ptr ptr ptr) +@ stdcall RtlIsValidOemCharacter(ptr) +@ stdcall RtlLargeIntegerAdd(long long long long) +@ stdcall RtlLargeIntegerArithmeticShift(long long long) +@ stdcall RtlLargeIntegerDivide(long long long long ptr) +@ stdcall RtlLargeIntegerNegate(long long) +@ stdcall RtlLargeIntegerShiftLeft(long long long) +@ stdcall RtlLargeIntegerShiftRight(long long long) +@ stdcall RtlLargeIntegerSubtract(long long long long) +@ stdcall RtlLengthRequiredSid(long) +@ stdcall RtlLengthSecurityDescriptor(ptr) +@ stdcall RtlLengthSid(ptr) +@ stdcall RtlLockBootStatusData(ptr) +@ stdcall RtlLookupAtomInAtomTable(ptr wstr ptr) +@ stdcall RtlLookupElementGenericTable(ptr ptr) +@ stdcall RtlLookupElementGenericTableAvl(ptr ptr) +@ stdcall RtlLookupElementGenericTableFull(ptr ptr ptr ptr) +@ stdcall RtlLookupElementGenericTableFullAvl(ptr ptr ptr ptr) +@ stdcall RtlMapGenericMask(ptr ptr) +@ stdcall RtlMapSecurityErrorToNtStatus(long) +@ stdcall RtlMergeRangeLists(ptr ptr ptr long) +@ stdcall RtlMoveMemory(ptr ptr long) +@ stdcall RtlMultiByteToUnicodeN(ptr long ptr str long) +@ stdcall RtlMultiByteToUnicodeSize(ptr str long) +@ stdcall RtlNextUnicodePrefix(ptr long) +@ stdcall RtlNtStatusToDosError(long) +@ stdcall RtlNtStatusToDosErrorNoTeb(long) +@ stdcall RtlNumberGenericTableElements(ptr) +@ stdcall RtlNumberGenericTableElementsAvl(ptr) +@ stdcall RtlNumberOfClearBits(ptr) +@ stdcall RtlNumberOfSetBits(ptr) +@ stdcall RtlOemStringToCountedUnicodeString(ptr ptr long) +@ stdcall RtlOemStringToUnicodeSize(ptr) RtlxOemStringToUnicodeSize +@ stdcall RtlOemStringToUnicodeString(ptr ptr long) +@ stdcall RtlOemToUnicodeN(wstr long ptr ptr long) +@ stdcall RtlPinAtomInAtomTable(ptr ptr) +@ fastcall RtlPrefetchMemoryNonTemporal(ptr long) +@ stdcall RtlPrefixString(ptr ptr long) +@ stdcall RtlPrefixUnicodeString(ptr ptr long) +@ stdcall RtlQueryAtomInAtomTable(ptr ptr ptr ptr ptr ptr) +@ stdcall RtlQueryRegistryValues(long wstr ptr ptr ptr) +@ stdcall RtlQueryTimeZoneInformation(ptr) +@ stdcall RtlRaiseException(ptr) +@ stdcall RtlRandom(ptr) +@ stdcall RtlRandomEx(ptr) +@ stdcall RtlRealPredecessor(ptr) +@ stdcall RtlRealSuccessor(ptr) +@ stdcall RtlRemoveUnicodePrefix(ptr ptr) +@ stdcall RtlReserveChunk(long ptr ptr ptr long) +@ stdcall RtlSecondsSince1970ToTime(long ptr) +@ stdcall RtlSecondsSince1980ToTime(long ptr) +@ stdcall RtlSelfRelativeToAbsoluteSD(ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr) +@ stdcall RtlSelfRelativeToAbsoluteSD2(ptr long) +@ stdcall RtlSetAllBits(ptr) +@ stdcall RtlSetBit(ptr long) +@ stdcall RtlSetBits(ptr long long) +@ stdcall RtlSetDaclSecurityDescriptor(ptr long ptr long) +@ stdcall RtlSetGroupSecurityDescriptor(ptr ptr long) +@ stdcall RtlSetOwnerSecurityDescriptor(ptr ptr long) +@ stdcall RtlSetSaclSecurityDescriptor(ptr long ptr long) +@ stdcall RtlSetTimeZoneInformation(ptr) +@ stdcall RtlSizeHeap(ptr long ptr) +@ stdcall RtlSplay(ptr) +@ stdcall RtlStringFromGUID(ptr ptr) +@ stdcall RtlSubAuthorityCountSid(ptr) +@ stdcall RtlSubAuthoritySid(ptr long) +@ stdcall RtlSubtreePredecessor(ptr) +@ stdcall RtlSubtreeSuccessor(ptr) +@ stdcall RtlTestBit(ptr long) +@ stdcall RtlTimeFieldsToTime(ptr ptr) +@ stdcall RtlTimeToElapsedTimeFields(ptr ptr) +@ stdcall RtlTimeToSecondsSince1970(ptr ptr) +@ stdcall RtlTimeToSecondsSince1980(ptr ptr) +@ stdcall RtlTimeToTimeFields(ptr ptr) +;RtlTraceDatabaseAdd +;RtlTraceDatabaseCreate +;RtlTraceDatabaseDestroy +;RtlTraceDatabaseEnumerate +;RtlTraceDatabaseFind +;RtlTraceDatabaseLock +;RtlTraceDatabaseUnlock +;RtlTraceDatabaseValidate +@ fastcall RtlUlongByteSwap(long) +@ fastcall RtlUlonglongByteSwap(long long) +@ stdcall RtlUnicodeStringToAnsiSize(ptr) RtlxUnicodeStringToAnsiSize +@ stdcall RtlUnicodeStringToAnsiString(ptr ptr long) +@ stdcall RtlUnicodeStringToCountedOemString(ptr ptr long) +@ stdcall RtlUnicodeStringToInteger(ptr long ptr) +@ stdcall RtlUnicodeStringToOemSize(ptr) RtlxUnicodeStringToOemSize +@ stdcall RtlUnicodeStringToOemString(ptr ptr long) +@ stdcall RtlUnicodeToCustomCPN(ptr ptr long ptr wstr long) +@ stdcall RtlUnicodeToMultiByteN(ptr long ptr wstr long) +@ stdcall RtlUnicodeToMultiByteSize(ptr wstr long) +@ stdcall RtlUnicodeToOemN(ptr long ptr wstr long) +@ stdcall RtlUnlockBootStatusData(ptr) +@ stdcall RtlUnwind(ptr ptr ptr ptr) +@ stdcall RtlUpcaseUnicodeChar(long) +@ stdcall RtlUpcaseUnicodeString(ptr ptr long) +@ stdcall RtlUpcaseUnicodeStringToAnsiString(ptr ptr long) +@ stdcall RtlUpcaseUnicodeStringToCountedOemString(ptr ptr long) +@ stdcall RtlUpcaseUnicodeStringToOemString(ptr ptr long) +@ stdcall RtlUpcaseUnicodeToCustomCPN(ptr ptr long ptr wstr long) +@ stdcall RtlUpcaseUnicodeToMultiByteN(ptr long ptr wstr long) +@ stdcall RtlUpcaseUnicodeToOemN(ptr long ptr wstr long) +@ stdcall RtlUpperChar(long) +@ stdcall RtlUpperString(ptr ptr) +@ fastcall RtlUshortByteSwap(long) +@ stdcall RtlValidRelativeSecurityDescriptor(ptr long long) +@ stdcall RtlValidSecurityDescriptor(ptr) +@ stdcall RtlValidSid(ptr) +@ stdcall RtlVerifyVersionInfo(ptr long long long) +@ stdcall RtlVolumeDeviceToDosName(ptr ptr) +@ stdcall RtlWalkFrameChain(ptr long long) +@ stdcall RtlWriteRegistryValue(long wstr wstr long ptr long) +@ stdcall RtlZeroHeap(ptr long) +@ stdcall RtlZeroMemory(ptr long) +@ stdcall RtlxAnsiStringToUnicodeSize(ptr) +@ stdcall RtlxOemStringToUnicodeSize(ptr) +@ stdcall RtlxUnicodeStringToAnsiSize(ptr) +@ stdcall RtlxUnicodeStringToOemSize(ptr) +@ stdcall SeAccessCheck(ptr ptr ptr long long ptr ptr long ptr ptr) +@ stdcall SeAppendPrivileges(ptr ptr) +@ stdcall SeAssignSecurity(ptr ptr ptr long ptr ptr ptr) +@ stdcall SeAssignSecurityEx(ptr ptr ptr ptr long long ptr ptr ptr) +@ stdcall SeAuditHardLinkCreation(ptr ptr long) +@ stdcall SeAuditingFileEvents(long ptr) +@ stdcall SeAuditingFileEventsWithContext(long ptr ptr) +@ stdcall SeAuditingFileOrGlobalEvents(long ptr ptr) +@ stdcall SeAuditingHardLinkEvents(long ptr) +@ stdcall SeAuditingHardLinkEventsWithContext(long ptr ptr) +@ stdcall SeCaptureSecurityDescriptor(ptr long long long ptr) +@ stdcall SeCaptureSubjectContext(ptr) +@ stdcall SeCloseObjectAuditAlarm(ptr ptr long) +@ stdcall SeCreateAccessState(ptr ptr long ptr) +@ stdcall SeCreateClientSecurity(ptr ptr long ptr) +@ stdcall SeCreateClientSecurityFromSubjectContext(ptr ptr long ptr) +@ stdcall SeDeassignSecurity(ptr) +@ stdcall SeDeleteAccessState(ptr) +@ stdcall SeDeleteObjectAuditAlarm(ptr ptr) +@ extern SeExports +@ stdcall SeFilterToken(ptr long ptr ptr ptr ptr) +@ stdcall SeFreePrivileges(ptr) +@ stdcall SeImpersonateClient(ptr ptr) +@ stdcall SeImpersonateClientEx(ptr ptr) +@ stdcall SeLockSubjectContext(ptr) +@ stdcall SeMarkLogonSessionForTerminationNotification(ptr) +@ stdcall SeOpenObjectAuditAlarm(ptr ptr ptr ptr ptr long long long ptr) +@ stdcall SeOpenObjectForDeleteAuditAlarm(ptr ptr ptr ptr ptr long long long ptr) +@ stdcall SePrivilegeCheck(ptr ptr long) +@ stdcall SePrivilegeObjectAuditAlarm(ptr ptr long ptr long long) +@ extern SePublicDefaultDacl +@ stdcall SeQueryAuthenticationIdToken(ptr ptr) +@ stdcall SeQueryInformationToken(ptr long ptr) +@ stdcall SeQuerySecurityDescriptorInfo(ptr ptr ptr ptr) +@ stdcall SeQuerySessionIdToken(ptr ptr) +@ stdcall SeRegisterLogonSessionTerminatedRoutine(ptr) +@ stdcall SeReleaseSecurityDescriptor(ptr long long) +@ stdcall SeReleaseSubjectContext(ptr) +@ stdcall SeSetAccessStateGenericMapping(ptr ptr) +;SeSetAuditParameter +@ stdcall SeSetSecurityDescriptorInfo(ptr ptr ptr ptr long ptr) +@ stdcall SeSetSecurityDescriptorInfoEx(ptr ptr ptr ptr long long ptr) +@ stdcall SeSinglePrivilegeCheck(long long long) +@ extern SeSystemDefaultDacl +@ stdcall SeTokenImpersonationLevel(ptr) +@ stdcall SeTokenIsAdmin(ptr) +@ stdcall SeTokenIsRestricted(ptr) +@ stdcall SeTokenIsWriteRestricted(ptr) +@ stdcall SeTokenType(ptr) +@ stdcall SeUnlockSubjectContext(ptr) +@ stdcall SeUnregisterLogonSessionTerminatedRoutine(ptr) +@ stdcall SeValidSecurityDescriptor(long ptr) +@ stdcall VerSetConditionMask(long long long long) +;VfFailDeviceNode +;VfFailDriver +;VfFailSystemBIOS +;VfIsVerificationEnabled +@ stdcall WRITE_REGISTER_BUFFER_UCHAR(ptr ptr long) +@ stdcall WRITE_REGISTER_BUFFER_ULONG(ptr ptr long) +@ stdcall WRITE_REGISTER_BUFFER_USHORT(ptr ptr long) +@ stdcall WRITE_REGISTER_UCHAR(ptr long) +@ stdcall WRITE_REGISTER_ULONG(ptr long) +@ stdcall WRITE_REGISTER_USHORT(ptr long) +;WmiFlushTrace +;WmiGetClock +;WmiQueryTrace +;WmiQueryTraceInformation +;WmiStartTrace +;WmiStopTrace +;WmiTraceFastEvent +;WmiTraceMessage +;WmiTraceMessageVa +;WmiUpdateTrace +;XIPDispatch +@ stdcall ZwAccessCheckAndAuditAlarm(ptr ptr ptr ptr ptr long ptr long ptr ptr ptr) +@ stdcall ZwAddBootEntry(ptr long) +@ stdcall ZwAddDriverEntry(ptr long) +@ stdcall ZwAdjustPrivilegesToken(ptr long ptr long ptr ptr) +@ stdcall ZwAlertThread(ptr) +@ stdcall ZwAllocateVirtualMemory(ptr ptr long ptr long long) +@ stdcall ZwAssignProcessToJobObject(ptr ptr) +@ stdcall ZwCancelIoFile(ptr ptr) +@ stdcall ZwCancelTimer(ptr ptr) +@ stdcall ZwClearEvent(ptr) +@ stdcall ZwClose(ptr) +@ stdcall ZwCloseObjectAuditAlarm(ptr ptr long) +@ stdcall ZwConnectPort(ptr ptr ptr ptr ptr ptr ptr ptr) +@ stdcall ZwCreateDirectoryObject(ptr long ptr) +@ stdcall ZwCreateEvent(ptr long ptr long long) +@ stdcall ZwCreateFile(ptr long ptr ptr ptr long long long long ptr long) +@ stdcall ZwCreateJobObject(ptr long ptr) +@ stdcall ZwCreateKey(ptr long ptr long ptr long ptr) +@ stdcall ZwCreateSection(ptr long ptr ptr long long ptr) +@ stdcall ZwCreateSymbolicLinkObject(ptr long ptr ptr) +@ stdcall ZwCreateTimer(ptr long ptr long) +@ stdcall ZwDeleteBootEntry(long) +@ stdcall ZwDeleteDriverEntry(long) +@ stdcall ZwDeleteFile(ptr) +@ stdcall ZwDeleteKey(ptr) +@ stdcall ZwDeleteValueKey(ptr ptr) +@ stdcall ZwDeviceIoControlFile(ptr ptr ptr ptr ptr long ptr long ptr long) +@ stdcall ZwDisplayString(ptr) +@ stdcall ZwDuplicateObject(ptr ptr ptr ptr long long long) +@ stdcall ZwDuplicateToken(ptr long ptr long long ptr) +@ stdcall ZwEnumerateBootEntries(ptr ptr) +@ stdcall ZwEnumerateDriverEntries(ptr ptr) +@ stdcall ZwEnumerateKey(ptr long long ptr long ptr) +@ stdcall ZwEnumerateValueKey(ptr long long ptr long ptr) +@ stdcall ZwFlushInstructionCache(ptr ptr long) +@ stdcall ZwFlushKey(ptr) +@ stdcall ZwFlushVirtualMemory(ptr ptr ptr ptr) +@ stdcall ZwFreeVirtualMemory(ptr ptr ptr long) +@ stdcall ZwFsControlFile(ptr ptr ptr ptr ptr long ptr long ptr long) +@ stdcall ZwInitiatePowerAction(long long long long) +@ stdcall ZwIsProcessInJob(ptr ptr) +@ stdcall ZwLoadDriver(ptr) +@ stdcall ZwLoadKey(ptr ptr) +@ stdcall ZwMakeTemporaryObject(ptr) +@ stdcall ZwMapViewOfSection(ptr ptr ptr long long ptr ptr long long long) +@ stdcall ZwModifyBootEntry(ptr) +@ stdcall ZwModifyDriverEntry(ptr) +@ stdcall ZwNotifyChangeKey(ptr ptr ptr ptr ptr long long ptr long long) +@ stdcall ZwOpenDirectoryObject(ptr long ptr) +@ stdcall ZwOpenEvent(ptr long ptr) +@ stdcall ZwOpenFile(ptr long ptr ptr long long) +@ stdcall ZwOpenJobObject(ptr long ptr) +@ stdcall ZwOpenKey(ptr long ptr) +@ stdcall ZwOpenProcess(ptr long ptr ptr) +@ stdcall ZwOpenProcessToken(ptr long ptr) +@ stdcall ZwOpenProcessTokenEx(ptr long long ptr) +@ stdcall ZwOpenSection(ptr long ptr) +@ stdcall ZwOpenSymbolicLinkObject(ptr long ptr) +@ stdcall ZwOpenThread(ptr long ptr ptr) +@ stdcall ZwOpenThreadToken(ptr long long ptr) +@ stdcall ZwOpenThreadTokenEx(ptr long long long ptr) +@ stdcall ZwOpenTimer(ptr long ptr) +@ stdcall ZwPowerInformation(long ptr long ptr long) +@ stdcall ZwPulseEvent(ptr ptr) +@ stdcall ZwQueryBootEntryOrder(ptr ptr) +@ stdcall ZwQueryBootOptions(ptr ptr) +@ stdcall ZwQueryDefaultLocale(long ptr) +@ stdcall ZwQueryDefaultUILanguage(ptr) +@ stdcall ZwQueryDirectoryFile(ptr ptr ptr ptr ptr ptr long long long ptr long) +@ stdcall ZwQueryDirectoryObject(ptr ptr long long long ptr ptr) +@ stdcall ZwQueryDriverEntryOrder(ptr ptr) +@ stdcall ZwQueryEaFile(ptr ptr ptr long long ptr long ptr long) +@ stdcall ZwQueryFullAttributesFile(ptr ptr) +@ stdcall ZwQueryInformationAtom(ptr long ptr long ptr) +@ stdcall ZwQueryInformationFile(ptr ptr ptr long long) +@ stdcall ZwQueryInformationJobObject(ptr long ptr long ptr) +@ stdcall ZwQueryInformationProcess(ptr long ptr long ptr) +@ stdcall ZwQueryInformationThread(ptr long ptr long ptr) +@ stdcall ZwQueryInformationToken(ptr long long long ptr) +@ stdcall ZwQueryInstallUILanguage(ptr) +@ stdcall ZwQueryKey(ptr long ptr long ptr) +@ stdcall ZwQueryObject(ptr long ptr long ptr) +@ stdcall ZwQuerySection(ptr long ptr long ptr) +@ stdcall ZwQuerySecurityObject(ptr long ptr long ptr) +@ stdcall ZwQuerySymbolicLinkObject(ptr ptr ptr) +@ stdcall ZwQuerySystemInformation(long ptr long ptr) +@ stdcall ZwQueryValueKey(ptr ptr long ptr long ptr) +@ stdcall ZwQueryVolumeInformationFile(ptr ptr ptr long long) +@ stdcall ZwReadFile(ptr ptr ptr ptr ptr ptr long ptr ptr) +@ stdcall ZwReplaceKey(ptr ptr ptr) +@ stdcall ZwRequestWaitReplyPort(ptr ptr ptr) +@ stdcall ZwResetEvent(ptr ptr) +@ stdcall ZwRestoreKey(ptr ptr long) +@ stdcall ZwSaveKey(ptr ptr) +@ stdcall ZwSaveKeyEx(ptr ptr long) +@ stdcall ZwSecureConnectPort(ptr ptr ptr ptr ptr ptr ptr ptr ptr) +@ stdcall ZwSetBootEntryOrder(ptr ptr) +@ stdcall ZwSetBootOptions(ptr long) +@ stdcall ZwSetDefaultLocale(long long) +@ stdcall ZwSetDefaultUILanguage(long) +@ stdcall ZwSetDriverEntryOrder(ptr ptr) +@ stdcall ZwSetEaFile(ptr ptr ptr long) +@ stdcall ZwSetEvent(ptr ptr) +@ stdcall ZwSetInformationFile(ptr ptr ptr long long) +@ stdcall ZwSetInformationJobObject(ptr long ptr long) +@ stdcall ZwSetInformationObject(ptr long ptr long) +@ stdcall ZwSetInformationProcess(ptr long ptr long) +@ stdcall ZwSetInformationThread(ptr long ptr long) +@ stdcall ZwSetSecurityObject(ptr long ptr) +@ stdcall ZwSetSystemInformation(long ptr long) +@ stdcall ZwSetSystemTime(ptr ptr) +@ stdcall ZwSetTimer(ptr ptr ptr ptr long long ptr) +@ stdcall ZwSetValueKey(ptr ptr long long ptr long) +@ stdcall ZwSetVolumeInformationFile(ptr ptr ptr long long) +@ stdcall ZwTerminateJobObject(ptr long) +@ stdcall ZwTerminateProcess(ptr long) +@ stdcall ZwTranslateFilePath(ptr long ptr long) +@ stdcall ZwUnloadDriver(ptr) +@ stdcall ZwUnloadKey(ptr) +@ stdcall ZwUnmapViewOfSection(ptr ptr) +@ stdcall ZwWaitForMultipleObjects(long ptr long long ptr) +@ stdcall ZwWaitForSingleObject(ptr long ptr) +@ stdcall ZwWriteFile(ptr ptr ptr ptr ptr ptr long ptr ptr); +@ stdcall ZwYieldExecution() +;_CIcos +;_CIsin +;_CIsqrt +@ cdecl _abnormal_termination() +@ cdecl _alldiv() +@ cdecl _alldvrm() +@ cdecl _allmul() +@ cdecl _alloca_probe() +@ cdecl _allrem() +@ cdecl _allshl() +@ cdecl _allshr() +@ cdecl _aulldiv() +@ cdecl _aulldvrm() +@ cdecl _aullrem() +@ cdecl _aullshr() +@ cdecl _except_handler2() +@ cdecl _except_handler3() +@ cdecl _global_unwind2() +@ cdecl _itoa() +@ cdecl _itow() +@ cdecl _local_unwind2() +@ cdecl _purecall() +@ cdecl _snprintf() +@ cdecl _snwprintf() +@ cdecl _stricmp() +@ cdecl _strlwr() +@ cdecl _strnicmp() +@ cdecl _strnset() +@ cdecl _strrev() +@ cdecl _strset() +@ cdecl _strupr() +@ cdecl _vsnprintf() +@ cdecl _vsnwprintf() +@ cdecl _wcsicmp() +@ cdecl _wcslwr() +@ cdecl _wcsnicmp() +@ cdecl _wcsnset() +@ cdecl _wcsrev() +@ cdecl _wcsupr() +@ cdecl atoi() +@ cdecl atol() +@ cdecl isdigit() +@ cdecl islower() +@ cdecl isprint() +@ cdecl isspace() +@ cdecl isupper() +@ cdecl isxdigit() +@ cdecl mbstowcs() +@ cdecl mbtowc() +@ cdecl memchr() +@ cdecl memcpy() +@ cdecl memmove() +@ cdecl memset() +@ cdecl qsort() +@ cdecl rand() +@ cdecl sprintf() +@ cdecl srand() +@ cdecl strcat() +@ cdecl strchr() +@ cdecl strcmp() +@ cdecl strcpy() +@ cdecl strlen() +@ cdecl strncat() +@ cdecl strncmp() +@ cdecl strncpy() +@ cdecl strrchr() +@ cdecl strspn() +@ cdecl strstr() +@ cdecl swprintf() +@ cdecl tolower() +@ cdecl toupper() +@ cdecl towlower() +@ cdecl towupper() +@ stdcall vDbgPrintEx(long long str ptr) +@ stdcall vDbgPrintExWithPrefix(str long long str ptr) +@ cdecl vsprintf() +@ cdecl wcscat() +@ cdecl wcschr() +@ cdecl wcscmp() +@ cdecl wcscpy() +@ cdecl wcscspn() +@ cdecl wcslen() +@ cdecl wcsncat() +@ cdecl wcsncmp() +@ cdecl wcsncpy() +@ cdecl wcsrchr() +@ cdecl wcsspn() +@ cdecl wcsstr() +@ cdecl wcstombs() +@ cdecl wctomb() diff --git a/reactos/ntoskrnl/ntoskrnl_i386.def b/reactos/ntoskrnl/ntoskrnl_i386.def deleted file mode 100644 index 8097c6783cd..00000000000 --- a/reactos/ntoskrnl/ntoskrnl_i386.def +++ /dev/null @@ -1,1591 +0,0 @@ -; reactos/ntoskrnl/ntoskrnl.def -; -; ReactOS Operating System -; -EXPORTS -CcCanIWrite@16 -CcCopyRead@24 -CcCopyWrite@20 -CcDeferWrite@24 -CcFastCopyRead@24 -CcFastCopyWrite@16 -CcFastMdlReadWait DATA -CcFastReadNotPossible DATA -CcFastReadWait DATA -CcFlushCache@16 -CcGetDirtyPages@16 -CcGetFileObjectFromBcb@4 -CcGetFileObjectFromSectionPtrs@4 -CcGetFlushedValidData@8 -CcGetLsnForFileObject@8 -CcInitializeCacheMap@20 -CcIsThereDirtyData@4 -CcMapData@24 -CcMdlRead@20 -CcMdlReadComplete@8 -CcMdlWriteAbort@8 -CcMdlWriteComplete@12 -CcPinMappedData@20 -CcPinRead@24 -CcPrepareMdlWrite@20 -CcPreparePinWrite@28 -CcPurgeCacheSection@16 -CcRemapBcb@4 -CcRepinBcb@4 -CcScheduleReadAhead@12 -CcSetAdditionalCacheAttributes@12 -CcSetBcbOwnerPointer@8 -CcSetDirtyPageThreshold@8 -CcSetDirtyPinnedData@8 -CcSetFileSizes@8 -CcSetLogHandleForFile@12 -CcSetReadAheadGranularity@8 -CcUninitializeCacheMap@12 -CcUnpinData@4 -CcUnpinDataForThread@8 -CcUnpinRepinnedBcb@12 -CcWaitForCurrentLazyWriterActivity@0 -CcZeroData@16 -CmRegisterCallback@12 -CmUnRegisterCallback@8 -DbgBreakPoint@0 -DbgBreakPointWithStatus@4 -;DbgCommandString -DbgLoadImageSymbols@12 -DbgPrint -DbgPrintEx -DbgPrintReturnControlC -DbgPrompt@12 -DbgQueryDebugFilterState@8 -DbgSetDebugFilterState@12 -@ExAcquireFastMutexUnsafe@4 -ExAcquireResourceExclusiveLite@8 -ExAcquireResourceSharedLite@8 -ExAcquireRundownProtection=@ExfAcquireRundownProtection@4 -ExAcquireRundownProtectionCacheAware=@ExfAcquireRundownProtectionCacheAware@4 -ExAcquireRundownProtectionCacheAwareEx=@ExfAcquireRundownProtectionCacheAwareEx@8 -ExAcquireRundownProtectionEx=@ExfAcquireRundownProtectionEx@8 -ExAcquireSharedStarveExclusive@8 -ExAcquireSharedWaitForExclusive@8 -ExAllocateCacheAwareRundownProtection@8 -ExAllocateFromPagedLookasideList@4=ExiAllocateFromPagedLookasideList@4 -ExAllocatePool@8 -ExAllocatePoolWithQuota@8 -ExAllocatePoolWithQuotaTag@12 -ExAllocatePoolWithTag@12 -ExAllocatePoolWithTagPriority@16 -ExConvertExclusiveToSharedLite@4 -ExCreateCallback@16 -ExDeleteNPagedLookasideList@4 -ExDeletePagedLookasideList@4 -ExDeleteResourceLite@4 -ExDesktopObjectType -ExDisableResourceBoostLite@4 -@ExEnterCriticalRegionAndAcquireFastMutexUnsafe@4 -ExEnterCriticalRegionAndAcquireResourceExclusive@4 -;ExEnterCriticalRegionAndAcquireResourceShared -;ExEnterCriticalRegionAndAcquireSharedWaitForExclusive -ExEnumHandleTable@16 -ExEventObjectType=_ExEventObjectType -ExExtendZone@12 -ExFreeCacheAwareRundownProtection@4 -ExFreePool@4 -ExFreePoolWithTag@8 -ExFreeToPagedLookasideList@8=ExiFreeToPagedLookasideList@8 -ExGetCurrentProcessorCounts@12 -ExGetCurrentProcessorCpuUsage@4 -ExGetExclusiveWaiterCount@4 -ExGetPreviousMode@0 -ExGetSharedWaiterCount@4 -ExInitializeNPagedLookasideList@28 -ExInitializePagedLookasideList@28 -ExInitializeResourceLite@4 -ExInitializeRundownProtection=@ExfInitializeRundownProtection@4 -ExInitializeRundownProtectionCacheAware@8 -ExInitializeZone@16 -ExInterlockedAddLargeInteger@16 -@ExInterlockedAddLargeStatistic@8 -ExInterlockedAddUlong@12 -@ExInterlockedCompareExchange64@16 -ExInterlockedDecrementLong@8 -ExInterlockedExchangeUlong@12 -ExInterlockedExtendZone@16 -@ExInterlockedFlushSList@4 -ExInterlockedIncrementLong@8 -ExInterlockedInsertHeadList@12 -ExInterlockedInsertTailList@12 -ExInterlockedPopEntryList@8 -@ExInterlockedPopEntrySList@8 -ExInterlockedPushEntryList@12 -@ExInterlockedPushEntrySList@12 -ExInterlockedRemoveHeadList@8 -ExIsProcessorFeaturePresent@4 -ExIsResourceAcquiredExclusiveLite@4 -ExIsResourceAcquiredSharedLite@4 -ExLocalTimeToSystemTime@8 -ExNotifyCallback@12 -ExQueryPoolBlockSize@8 -ExQueueWorkItem@8 -ExRaiseAccessViolation@0 -ExRaiseDatatypeMisalignment@0 -ExRaiseException@4=RtlRaiseException@4 -ExRaiseHardError@24 -ExRaiseStatus@4=RtlRaiseStatus@4 -ExReInitializeRundownProtection=@ExfReInitializeRundownProtection@4 -ExReInitializeRundownProtectionCacheAware=@ExfReInitializeRundownProtectionCacheAware@4 -ExRegisterCallback@12 -ExReinitializeResourceLite@4 -@ExReleaseFastMutexUnsafe@4 -@ExReleaseFastMutexUnsafeAndLeaveCriticalRegion@4 -@ExReleaseResourceAndLeaveCriticalRegion@4 -ExReleaseResourceForThreadLite@8 -@ExReleaseResourceLite@4 -ExReleaseRundownProtection=@ExfReleaseRundownProtection@4 -ExReleaseRundownProtectionCacheAware=@ExfReleaseRundownProtectionCacheAware@4 -ExReleaseRundownProtectionCacheAwareEx=@ExfReleaseRundownProtectionCacheAwareEx@8 -ExReleaseRundownProtectionEx=@ExfReleaseRundownProtectionEx@8 -ExRundownCompleted=@ExfRundownCompleted@4 -ExRundownCompletedCacheAware=@ExfRundownCompletedCacheAware@4 -ExSemaphoreObjectType=_ExSemaphoreObjectType -ExSetResourceOwnerPointer@8 -ExSetTimerResolution@8 -ExSizeOfRundownProtectionCacheAware@0 -ExSystemExceptionFilter@0 -ExSystemTimeToLocalTime@8 -ExUnregisterCallback@4 -ExUuidCreate@4 -ExVerifySuite@4 -ExWaitForRundownProtectionRelease=@ExfWaitForRundownProtectionRelease@4 -ExWaitForRundownProtectionReleaseCacheAware=@ExfWaitForRundownProtectionReleaseCacheAware@4 -ExWindowStationObjectType DATA -@ExfAcquirePushLockExclusive@4 -@ExfAcquirePushLockShared@4 -@ExfInterlockedAddUlong@12 -@ExfInterlockedCompareExchange64@12 -@ExfInterlockedInsertHeadList@12 -@ExfInterlockedInsertTailList@12 -@ExfInterlockedPopEntryList@8 -@ExfInterlockedPushEntryList@12 -@ExfInterlockedRemoveHeadList@8 -@ExfReleasePushLock@4 -@ExfReleasePushLockExclusive@4 -@ExfReleasePushLockShared@4 -@ExfTryToWakePushLock@4 -@ExfUnblockPushLock@8 -@Exfi386InterlockedDecrementLong@4 -@Exfi386InterlockedExchangeUlong@8 -@Exfi386InterlockedIncrementLong@4 -Exi386InterlockedDecrementLong@4 -Exi386InterlockedExchangeUlong@12 -Exi386InterlockedIncrementLong@4 -@ExiAcquireFastMutex@4=@ExAcquireFastMutex@4 -@ExiReleaseFastMutex@4=@ExReleaseFastMutex@4 -@ExiTryToAcquireFastMutex@4=@ExTryToAcquireFastMutex@4 -FsRtlAcquireFileExclusive -;FsRtlAddBaseMcbEntry -FsRtlAddLargeMcbEntry -FsRtlAddMcbEntry -FsRtlAddToTunnelCache -FsRtlAllocateFileLock@8 -FsRtlAllocatePool -FsRtlAllocatePoolWithQuota -FsRtlAllocatePoolWithQuotaTag -FsRtlAllocatePoolWithTag@12 -FsRtlAllocateResource -FsRtlAreNamesEqual@16 -FsRtlBalanceReads -FsRtlCheckLockForReadAccess@8 -FsRtlCheckLockForWriteAccess@8 -FsRtlCheckOplock@20 -FsRtlCopyRead@32 -FsRtlCopyWrite -FsRtlCreateSectionForDataScan@40 -FsRtlCurrentBatchOplock@4 -FsRtlDeleteKeyFromTunnelCache -FsRtlDeleteTunnelCache -FsRtlDeregisterUncProvider -FsRtlDissectDbcs -FsRtlDissectName@16 -FsRtlDoesDbcsContainWildCards -FsRtlDoesNameContainWildCards@4 -FsRtlFastCheckLockForRead@24 -FsRtlFastCheckLockForWrite -FsRtlFastUnlockAll@16 -FsRtlFastUnlockAllByKey@20 -FsRtlFastUnlockSingle@32 -FsRtlFindInTunnelCache -FsRtlFreeFileLock@4 -FsRtlGetFileSize -;FsRtlGetNextBaseMcbEntry -FsRtlGetNextFileLock -FsRtlGetNextLargeMcbEntry -FsRtlGetNextMcbEntry -FsRtlIncrementCcFastReadNoWait -FsRtlIncrementCcFastReadNotPossible -FsRtlIncrementCcFastReadResourceMiss -FsRtlIncrementCcFastReadWait -;FsRtlInitializeBaseMcb -FsRtlInitializeFileLock@12 -FsRtlInitializeLargeMcb -FsRtlInitializeMcb -FsRtlInitializeOplock -FsRtlInitializeTunnelCache -FsRtlInsertPerFileObjectContext -FsRtlInsertPerStreamContext -FsRtlIsDbcsInExpression -FsRtlIsFatDbcsLegal@20 -FsRtlIsHpfsDbcsLegal -FsRtlIsNameInExpression@16 -FsRtlIsNtstatusExpected@4 -FsRtlIsPagingFile -FsRtlIsTotalDeviceFailure -FsRtlLegalAnsiCharacterArray=_FsRtlLegalAnsiCharacterArray -;FsRtlLookupBaseMcbEntry -FsRtlLookupLargeMcbEntry -;FsRtlLookupLastBaseMcbEntry -;FsRtlLookupLastBaseMcbEntryAndIndex -FsRtlLookupLastLargeMcbEntry -FsRtlLookupLastLargeMcbEntryAndIndex -FsRtlLookupLastMcbEntry -FsRtlLookupMcbEntry -FsRtlLookupPerFileObjectContext -FsRtlLookupPerStreamContextInternal -FsRtlMdlRead -FsRtlMdlReadComplete -FsRtlMdlReadCompleteDev@12 -FsRtlMdlReadDev@28 -FsRtlMdlWriteComplete -FsRtlMdlWriteCompleteDev@16 -FsRtlNormalizeNtstatus@8 -FsRtlNotifyChangeDirectory -FsRtlNotifyCleanup@12 -FsRtlNotifyFilterChangeDirectory -FsRtlNotifyFilterReportChange -FsRtlNotifyFullChangeDirectory@40 -FsRtlNotifyFullReportChange -FsRtlNotifyInitializeSync@4 -FsRtlNotifyReportChange -FsRtlNotifyUninitializeSync@4 -FsRtlNotifyVolumeEvent@8 -;FsRtlNumberOfRunsInBaseMcb -FsRtlNumberOfRunsInLargeMcb -FsRtlNumberOfRunsInMcb -FsRtlOplockFsctrl@12 -FsRtlOplockIsFastIoPossible@4 -FsRtlPostPagingFileStackOverflow -FsRtlPostStackOverflow -FsRtlPrepareMdlWrite -FsRtlPrepareMdlWriteDev@28 -FsRtlPrivateLock@48 -FsRtlProcessFileLock@12 -FsRtlRegisterFileSystemFilterCallbacks -FsRtlRegisterUncProvider -FsRtlReleaseFile -;FsRtlRemoveBaseMcbEntry -FsRtlRemoveLargeMcbEntry -FsRtlRemoveMcbEntry -FsRtlRemovePerFileObjectContext -FsRtlRemovePerStreamContext -;FsRtlResetBaseMcb -FsRtlResetLargeMcb -;FsRtlSplitBaseMcb -FsRtlSplitLargeMcb -FsRtlSyncVolumes -FsRtlTeardownPerStreamContexts@4 -;FsRtlTruncateBaseMcb -FsRtlTruncateLargeMcb -FsRtlTruncateMcb -;FsRtlUninitializeBaseMcb -FsRtlUninitializeFileLock@4 -FsRtlUninitializeLargeMcb -FsRtlUninitializeMcb -FsRtlUninitializeOplock@4 -HalDispatchTable=_HalDispatchTable -@HalExamineMBR@16 -HalPrivateDispatchTable DATA -;HeadlessDispatch -InbvAcquireDisplayOwnership@0 -InbvCheckDisplayOwnership@0 -InbvDisplayString@4 -InbvEnableBootDriver@4 -InbvEnableDisplayString@4 -InbvInstallDisplayStringFilter@4 -InbvIsBootDriverInstalled@0 -InbvNotifyDisplayOwnershipLost@4 -InbvResetDisplay@0 -InbvSetScrollRegion@16 -InbvSetTextColor@4 -InbvSolidColorFill@20 -InitSafeBootMode DATA -@InterlockedCompareExchange@12 -@InterlockedDecrement@4 -@InterlockedExchange@8 -@InterlockedExchangeAdd@8 -@InterlockedIncrement@4 -@InterlockedPopEntrySList@4 -@InterlockedPushEntrySList@8 -IoAcquireCancelSpinLock@4 -IoAcquireRemoveLockEx@20 -IoAcquireVpbSpinLock@4 -IoAdapterObjectType DATA -IoAllocateAdapterChannel@20 -IoAllocateController@16 -IoAllocateDriverObjectExtension@16 -IoAllocateErrorLogEntry@8 -IoAllocateIrp@8 -IoAllocateMdl@20 -IoAllocateWorkItem@4 -@IoAssignDriveLetters@16 -IoAssignResources@24 -IoAttachDevice@12 -IoAttachDeviceByPointer@8 -IoAttachDeviceToDeviceStack@8 -IoAttachDeviceToDeviceStackSafe@12 -IoBuildAsynchronousFsdRequest@24 -IoBuildDeviceIoControlRequest@36 -IoBuildPartialMdl@16 -IoBuildSynchronousFsdRequest@28 -IoCallDriver@8 -IoCancelFileOpen@8 -IoCancelIrp@4 -IoCheckDesiredAccess@8 -IoCheckEaBufferValidity@12 -IoCheckFunctionAccess@24 -IoCheckQuerySetFileInformation@12 -IoCheckQuerySetVolumeInformation@12 -IoCheckQuotaBufferValidity@12 -IoCheckShareAccess@20 -IoCompleteRequest@8 -IoConnectInterrupt@44 -IoCreateController@4 -IoCreateDevice@28 -IoCreateDisk@8 -IoCreateDriver@8 -IoCreateFile@56 -IoCreateFileSpecifyDeviceObjectHint@60 -IoCreateNotificationEvent@8 -IoCreateStreamFileObject@8 -IoCreateStreamFileObjectEx@12 -IoCreateStreamFileObjectLite@8 -IoCreateSymbolicLink@8 -IoCreateSynchronizationEvent@8 -IoCreateUnprotectedSymbolicLink@8 -IoCsqInitialize@28 -IoCsqInitializeEx@28 -IoCsqInsertIrp@12 -IoCsqInsertIrpEx@16 -IoCsqRemoveIrp@8 -IoCsqRemoveNextIrp@8 -IoDeleteController@4 -IoDeleteDevice@4 -IoDeleteDriver@4 -IoDeleteSymbolicLink@4 -IoDetachDevice@4 -IoDeviceHandlerObjectSize DATA -IoDeviceHandlerObjectType DATA -IoDeviceObjectType DATA -IoDisconnectInterrupt@4 -IoDriverObjectType DATA -IoEnqueueIrp@4 -IoEnumerateDeviceObjectList@16 -;IoEnumerateRegisteredFiltersList -IoFastQueryNetworkAttributes@20 -IoFileObjectType=_IoFileObjectType -IoForwardAndCatchIrp@8=IoForwardIrpSynchronously@8 -IoForwardIrpSynchronously@8 -IoFreeController@4 -IoFreeErrorLogEntry@4 -IoFreeIrp@4 -IoFreeMdl@4 -IoFreeWorkItem@4 -IoGetAttachedDevice@4 -IoGetAttachedDeviceReference@4 -IoGetBaseFileSystemDeviceObject@4 -IoGetBootDiskInformation@8 -IoGetConfigurationInformation@0 -IoGetCurrentProcess@0 -IoGetDeviceAttachmentBaseRef@4 -IoGetDeviceInterfaceAlias@12 -IoGetDeviceInterfaces@16 -IoGetDeviceObjectPointer@16 -IoGetDeviceProperty@20 -IoGetDeviceToVerify@4 -IoGetDiskDeviceObject@8 -IoGetDmaAdapter@12 -IoGetDriverObjectExtension@8 -IoGetFileObjectGenericMapping@0 -IoGetInitialStack@0 -IoGetLowerDeviceObject@4 -;IoGetPagingIoPriority -IoGetRelatedDeviceObject@4 -IoGetRequestorProcess@4 -IoGetRequestorProcessId@4 -IoGetRequestorSessionId@8 -IoGetStackLimits@8 -IoGetTopLevelIrp@0 -IoInitializeIrp@12 -IoInitializeRemoveLockEx@20 -IoInitializeTimer@12 -IoInvalidateDeviceRelations@8 -IoInvalidateDeviceState@4 -IoIsFileOriginRemote@4 -IoIsOperationSynchronous@4 -IoIsSystemThread@4 -IoIsValidNameGraftingBuffer@8 -IoIsWdmVersionAvailable@8 -IoMakeAssociatedIrp@8 -IoOpenDeviceInterfaceRegistryKey@12 -IoOpenDeviceRegistryKey@16 -IoPageRead@20 -IoPnPDeliverServicePowerNotification@16 -IoQueryDeviceDescription@32 -IoQueryFileDosDeviceName@8 -IoQueryFileInformation@20 -IoQueryVolumeInformation@20 -IoQueueThreadIrp@4 -IoQueueWorkItem@16 -IoRaiseHardError@12 -IoRaiseInformationalHardError@12 -IoReadDiskSignature@12 -IoReadOperationCount DATA -@IoReadPartitionTable@16 -IoReadPartitionTableEx@8 -IoReadTransferCount DATA -IoRegisterBootDriverReinitialization@12 -IoRegisterDeviceInterface@16 -IoRegisterDriverReinitialization@12 -IoRegisterFileSystem@4 -IoRegisterFsRegistrationChange@8 -IoRegisterLastChanceShutdownNotification@4 -IoRegisterPlugPlayNotification@28 -IoRegisterShutdownNotification@4 -IoReleaseCancelSpinLock@4 -IoReleaseRemoveLockAndWaitEx@12 -IoReleaseRemoveLockEx@12 -IoReleaseVpbSpinLock@4 -IoRemoveShareAccess@8 -IoReportDetectedDevice@32 -IoReportHalResourceUsage@16 -IoReportResourceForDetection@28 -IoReportResourceUsage@36 -IoReportTargetDeviceChange@8 -IoReportTargetDeviceChangeAsynchronous@16 -IoRequestDeviceEject@4 -IoReuseIrp@8 -IoSetCompletionRoutineEx@28 -IoSetDeviceInterfaceState@8 -IoSetDeviceToVerify@8 -IoSetFileOrigin@8 -IoSetHardErrorOrVerifyDevice@8 -IoSetInformation@16 -IoSetIoCompletion@24 -@IoSetPartitionInformation@16 -IoSetPartitionInformationEx@12 -IoSetShareAccess@16 -IoSetStartIoAttributes@12 -IoSetSystemPartition@4 -IoSetThreadHardErrorMode@4 -IoSetTopLevelIrp@4 -IoStartNextPacket@8 -IoStartNextPacketByKey@12 -IoStartPacket@16 -IoStartTimer@4 -IoStatisticsLock DATA -IoStopTimer@4 -IoSynchronousInvalidateDeviceRelations@8 -IoSynchronousPageWrite@20 -IoThreadToProcess@4 -;IoTranslateBusAddress -IoUnregisterFileSystem@4 -IoUnregisterFsRegistrationChange@8 -IoUnregisterPlugPlayNotification@4 -IoUnregisterShutdownNotification@4 -IoUpdateShareAccess@8 -IoValidateDeviceIoControlAccess@8 -IoVerifyPartitionTable@8 -IoVerifyVolume@8 -IoVolumeDeviceToDosName@8 -IoWMIAllocateInstanceIds@12 -IoWMIDeviceObjectToInstanceName@12 -IoWMIExecuteMethod@24 -IoWMIHandleToInstanceName@12 -IoWMIOpenBlock@12 -IoWMIQueryAllData@12 -IoWMIQueryAllDataMultiple@16 -IoWMIQuerySingleInstance@16 -IoWMIQuerySingleInstanceMultiple@20 -IoWMIRegistrationControl@8 -IoWMISetNotificationCallback@12 -IoWMISetSingleInstance@20 -IoWMISetSingleItem@24 -IoWMISuggestInstanceName@16 -IoWMIWriteEvent@4 -IoWriteErrorLogEntry@4 -IoWriteOperationCount DATA -@IoWritePartitionTable@20 -IoWritePartitionTableEx@8 -IoWriteTransferCount DATA -@IofCallDriver@8 -@IofCompleteRequest@8 -KdChangeOption@24 -KdDebuggerEnabled=_KdDebuggerEnabled -KdDebuggerNotPresent=_KdDebuggerNotPresent -KdDisableDebugger@0 -KdEnableDebugger@0 -KdEnteredDebugger -KdPollBreakIn@0 -KdPowerTransition@4 -;KdRefreshDebuggerNotPresent -KdSystemDebugControl@28 -Ke386CallBios@8 -;Ke386IoSetAccessProcess -;Ke386QueryIoAccessMap -;Ke386SetIoAccessMap -@KeAcquireGuardedMutex@4 -@KeAcquireGuardedMutexUnsafe@4 -@KeAcquireInStackQueuedSpinLockAtDpcLevel@8 -;KeAcquireInStackQueuedSpinLockForDpc -KeAcquireInterruptSpinLock@4 -KeAcquireSpinLockAtDpcLevel@4 -;KeAcquireSpinLockForDpc -KeAddSystemServiceTable@20 -KeAreAllApcsDisabled@0 -KeAreApcsDisabled@0 -KeAttachProcess@4 -KeBugCheck@4 -KeBugCheckEx@20 -KeCancelTimer@4 -KeCapturePersistentThreadState@28 -KeClearEvent@4 -KeConnectInterrupt@4 -KeDelayExecutionThread@12 -KeDeregisterBugCheckCallback@4 -KeDeregisterBugCheckReasonCallback@4 -;KeDeregisterNmiCallback -KeDetachProcess@0 -KeDisconnectInterrupt@4 -KeEnterCriticalRegion@0=_KeEnterCriticalRegion@0 -KeEnterGuardedRegion@0=_KeEnterGuardedRegion@0 -KeEnterKernelDebugger@0 -KeFindConfigurationEntry@16 -KeFindConfigurationNextEntry@20 -KeFlushEntireTb@8 -KeFlushQueuedDpcs@0 -;KeGenericCallDpc -KeGetCurrentThread@0 -KeGetPreviousMode@0 -KeGetRecommendedSharedDataAlignment@0 -;KeI386AbiosCall -KeI386AllocateGdtSelectors@8 -;KeI386Call16BitCStyleFunction -;KeI386Call16BitFunction -KeI386FlatToGdtSelector@12 -;KeI386GetLid -;KeI386MachineType DATA -KeI386ReleaseGdtSelectors@8 -;KeI386ReleaseLid -;KeI386SetGdtSelector -KeInitializeApc@32 -;KeInitializeCrashDumpHeader -KeInitializeDeviceQueue@4 -KeInitializeDpc@12 -KeInitializeEvent@12 -@KeInitializeGuardedMutex@4 -KeInitializeInterrupt@44 -KeInitializeMutant@8 -KeInitializeMutex@8 -KeInitializeQueue@8 -KeInitializeSemaphore@12 -KeInitializeSpinLock@4 -;KeInitializeThreadedDpc -KeInitializeTimer@4 -KeInitializeTimerEx@8 -KeInsertByKeyDeviceQueue@12 -KeInsertDeviceQueue@8 -KeInsertHeadQueue@8 -KeInsertQueue@8 -KeInsertQueueApc@16 -KeInsertQueueDpc@12 -KeInvalidateAllCaches@0 -KeIpiGenericCall@8 -KeIsAttachedProcess@0 -KeIsExecutingDpc@0 -;KeIsWaitListEmpty -KeLeaveCriticalRegion@0=_KeLeaveCriticalRegion@0 -KeLeaveGuardedRegion@0=_KeLeaveGuardedRegion@0 -KeLoaderBlock DATA -KeNumberProcessors DATA -KeProfileInterrupt@4 -KeProfileInterruptWithSource@8 -KePulseEvent@12 -KeQueryActiveProcessors@0 -KeQueryInterruptTime@0 -KeQueryPriorityThread@4 -KeQueryRuntimeThread@8 -KeQuerySystemTime@4 -KeQueryTickCount@4 -KeQueryTimeIncrement@0 -KeRaiseUserException@4 -KeReadStateEvent@4 -KeReadStateMutant@4 -KeReadStateMutex@4=KeReadStateMutant@4 -KeReadStateQueue@4 -KeReadStateSemaphore@4 -KeReadStateTimer@4 -KeRegisterBugCheckCallback@20 -KeRegisterBugCheckReasonCallback@16 -;KeRegisterNmiCallback -@KeReleaseGuardedMutex@4 -@KeReleaseGuardedMutexUnsafe@4 -;KeReleaseInStackQueuedSpinLockForDpc -@KeReleaseInStackQueuedSpinLockFromDpcLevel@4 -KeReleaseInterruptSpinLock@8 -KeReleaseMutant@16 -KeReleaseMutex@8 -KeReleaseSemaphore@16 -;KeReleaseSpinLockForDpc -KeReleaseSpinLockFromDpcLevel@4 -KeRemoveByKeyDeviceQueue@8 -KeRemoveByKeyDeviceQueueIfBusy@8 -KeRemoveDeviceQueue@4 -KeRemoveEntryDeviceQueue@8 -KeRemoveQueue@12 -KeRemoveQueueDpc@4 -KeRemoveSystemServiceTable@4 -KeResetEvent@4 -KeRestoreFloatingPointState@4 -KeRevertToUserAffinityThread@0 -KeRundownQueue@4 -KeSaveFloatingPointState@4 -KeSaveStateForHibernate -KeServiceDescriptorTable DATA -KeSetAffinityThread@8 -KeSetBasePriorityThread@8 -KeSetDmaIoCoherency@4 -KeSetEvent@12 -KeSetEventBoostPriority@8 -KeSetIdealProcessorThread@8 -KeSetImportanceDpc@8 -KeSetKernelStackSwapEnable@4 -KeSetPriorityThread@8 -KeSetProfileIrql@4 -KeSetSystemAffinityThread@4 -KeSetTargetProcessorDpc@8 -KeSetTimeIncrement@8 -KeSetTimer@16 -KeSetTimerEx@20 -;KeSignalCallDpcDone -;KeSignalCallDpcSynchronize -KeStackAttachProcess@8 -KeSynchronizeExecution@12 -KeTerminateThread@4 -;KeTestSpinLock -KeTickCount DATA -@KeTryToAcquireGuardedMutex@4 -@KeTryToAcquireSpinLockAtDpcLevel@4 -KeUnstackDetachProcess@4 -KeUpdateRunTime@4 -KeUpdateSystemTime@0 -KeUserModeCallback@20 -KeWaitForMultipleObjects@32 -KeWaitForMutexObject@20=KeWaitForSingleObject@20 -KeWaitForSingleObject@20 -@KefAcquireSpinLockAtDpcLevel@4 -@KefReleaseSpinLockFromDpcLevel@4 -Kei386EoiHelper@0 -@KiAcquireSpinLock@4 -;KiBugCheckData DATA -KiCheckForKernelApcDelivery@0 -KiCoprocessorError@0 -KiDeliverApc@12 -KiDispatchInterrupt@0 -KiEnableTimerWatchdog -KiIpiServiceRoutine@8 -@KiReleaseSpinLock@4 -KiUnexpectedInterrupt -;Kii386SpinOnSpinLock -LdrAccessResource@16 -LdrEnumResources@20 -LdrFindResourceDirectory_U@16 -LdrFindResource_U@16 -LpcPortObjectType DATA -LpcRequestPort@8 -LpcRequestWaitReplyPort@12 -LsaCallAuthenticationPackage@28 -LsaDeregisterLogonProcess@8 -LsaFreeReturnBuffer@4 -LsaLogonUser@56 -LsaLookupAuthenticationPackage@12 -LsaRegisterLogonProcess@12 -Mm64BitPhysicalAddress DATA -MmAddPhysicalMemory@8 -MmAddVerifierThunks@8 -MmAdjustWorkingSetSize@12 -MmAdvanceMdl@8 -MmAllocateContiguousMemory@12 -MmAllocateContiguousMemorySpecifyCache@32 -MmAllocateMappingAddress@8 -MmAllocateNonCachedMemory@4 -MmAllocatePagesForMdl@28 -;MmAllocatePagesForMdlEx -MmBuildMdlForNonPagedPool@4 -MmCanFileBeTruncated@8 -;MmCommitSessionMappedView -MmCreateMdl@12 -;MmCreateMirror -MmCreateSection@32 -MmDisableModifiedWriteOfSection@4 -MmFlushImageSection@8 -MmForceSectionClosed@8 -MmFreeContiguousMemory@4 -MmFreeContiguousMemorySpecifyCache@12 -MmFreeMappingAddress@8 -MmFreeNonCachedMemory@8 -MmFreePagesFromMdl@4 -MmGetPhysicalAddress@4 -MmGetPhysicalMemoryRanges@0 -MmGetSystemRoutineAddress@4 -MmGetVirtualForPhysical@8 -MmGrowKernelStack@4 -MmHighestUserAddress DATA -MmIsAddressValid@4 -MmIsDriverVerifying@4 -;MmIsIoSpaceActive -MmIsNonPagedSystemAddressValid@4 -MmIsRecursiveIoFault@0 -MmIsThisAnNtAsSystem@0 -MmIsVerifierEnabled@4 -MmLockPagableDataSection@4 -MmLockPagableImageSection@4=MmLockPagableDataSection@4 -MmLockPagableSectionByHandle@4 -MmMapIoSpace@16 -MmMapLockedPages@8 -MmMapLockedPagesSpecifyCache@24 -MmMapLockedPagesWithReservedMapping@16 -MmMapMemoryDumpMdl@4 -MmMapUserAddressesToPage@12 -MmMapVideoDisplay@16 -MmMapViewInSessionSpace@12 -MmMapViewInSystemSpace@12 -MmMapViewOfSection@40 -MmMarkPhysicalMemoryAsBad@8 -MmMarkPhysicalMemoryAsGood@8 -MmPageEntireDriver@4 -MmPrefetchPages@8 -MmProbeAndLockPages@12 -MmProbeAndLockProcessPages@16 -MmProbeAndLockSelectedPages@16 -MmProtectMdlSystemAddress@8 -MmQuerySystemSize@0 -MmRemovePhysicalMemory@8 -MmResetDriverPaging@4 -MmSectionObjectType DATA -MmSecureVirtualMemory@12 -MmSetAddressRangeModified@8 -MmSetBankedSection@24 -MmSizeOfMdl@8 -MmSystemRangeStart DATA -MmTrimAllSystemPagableMemory@4 -MmUnlockPagableImageSection@4 -MmUnlockPages@4 -MmUnmapIoSpace@8 -MmUnmapLockedPages@8 -MmUnmapReservedMapping@12 -MmUnmapVideoDisplay@8 -MmUnmapViewInSessionSpace@4 -MmUnmapViewInSystemSpace@4 -MmUnmapViewOfSection@8 -MmUnsecureVirtualMemory@4 -MmUserProbeAddress DATA -NlsAnsiCodePage DATA -NlsLeadByteInfo DATA -NlsMbCodePageTag DATA -NlsMbOemCodePageTag DATA -NlsOemCodePage DATA -NlsOemLeadByteInfo=_NlsOemLeadByteInfo -NtAddAtom@12 -NtAdjustPrivilegesToken@24 -NtAlertThread@4 -NtAllocateLocallyUniqueId@4 -NtAllocateUuids@16 -NtAllocateVirtualMemory@24 -NtBuildNumber DATA -NtClose@4 -NtConnectPort@32 -NtCreateEvent@20 -NtCreateFile@44 -NtCreateSection@28 -NtCreateTimer@16 -NtDeleteAtom@4 -NtDeleteFile@4 -NtDeviceIoControlFile@40 -NtDuplicateObject@28 -NtDuplicateToken@24 -NtFindAtom@12 -NtFreeVirtualMemory@16 -NtFsControlFile@40 -NtGlobalFlag DATA -NtLockFile@40 -NtMakePermanentObject@4 -NtMapViewOfSection@40 -NtNotifyChangeDirectoryFile@36 -NtOpenEvent@12 -NtOpenFile@24 -NtOpenProcess@16 -NtOpenProcessToken@12 -NtOpenProcessTokenEx@16 -NtOpenThread@16 -NtOpenThreadToken@16 -NtOpenThreadTokenEx@20 -NtQueryDirectoryFile@44 -NtQueryEaFile@36 -NtQueryInformationAtom@20 -NtQueryInformationFile@20 -NtQueryInformationProcess@20 -NtQueryInformationThread@20 -NtQueryInformationToken@20 -NtQueryQuotaInformationFile@36 -NtQuerySecurityObject@20 -NtQuerySystemInformation@16 -NtQueryVolumeInformationFile@20 -NtReadFile@36 -NtRequestPort@8 -NtRequestWaitReplyPort@12 -NtSetEaFile@16 -NtSetEvent@8 -NtSetInformationFile@20 -NtSetInformationProcess@16 -NtSetInformationThread@16 -NtSetQuotaInformationFile@16 -NtSetSecurityObject@12 -NtSetVolumeInformationFile@20 -NtShutdownSystem@4 -NtTraceEvent@16 -NtUnlockFile@20 -NtVdmControl@8 -NtWaitForSingleObject@12 -NtWriteFile@36 -ObAssignSecurity@16 -ObCheckCreateObjectAccess@28 -ObCheckObjectAccess@20 -ObCloseHandle@8 -ObCreateObject@36 -ObCreateObjectType@16 -;ObDeleteCapturedInsertInfo -ObDereferenceObject@4 -ObDereferenceObjectDeferDelete@4 -ObDereferenceSecurityDescriptor@8 -ObFindHandleForObject@20 -ObGetObjectSecurity@12 -ObInsertObject@24 -ObIsKernelHandle@4 -ObLogSecurityDescriptor@12 -ObMakeTemporaryObject@4 -ObOpenObjectByName@28 -ObOpenObjectByPointer@28 -ObQueryNameString@16 -ObQueryObjectAuditingByHandle@8 -ObReferenceObjectByHandle@24 -ObReferenceObjectByName@32 -ObReferenceObjectByPointer@16 -ObReferenceSecurityDescriptor@8 -ObReleaseObjectSecurity@8 -;ObSetHandleAttributes@12 -ObSetSecurityDescriptorInfo@24 -ObSetSecurityObjectByPointer@12 -@ObfDereferenceObject@4 -@ObfReferenceObject@4 -;PfxFindPrefix -;PfxInitialize -;PfxInsertPrefix -;PfxRemovePrefix -PoCallDriver@8 -;PoCancelDeviceNotify -PoQueueShutdownWorkItem@4 -PoRegisterDeviceForIdleDetection@16 -;PoRegisterDeviceNotify -PoRegisterSystemState@8 -PoRequestPowerIrp@24 -;PoRequestShutdownEvent -;PoSetHiberRange -PoSetDeviceBusy@4 -PoSetPowerState@12 -PoSetSystemState@4 -;PoShutdownBugCheck -PoStartNextPowerIrp@4 -PoUnregisterSystemState@4 -ProbeForRead@12 -ProbeForWrite@12 -PsAssignImpersonationToken@8 -PsChargePoolQuota@12 -PsChargeProcessNonPagedPoolQuota@4=PsDereferenceImpersonationToken@4 -PsChargeProcessPagedPoolQuota@8 -PsChargeProcessPoolQuota@12 -PsCreateSystemProcess@12 -PsCreateSystemThread@28 -PsDereferenceImpersonationToken@4=PsDereferencePrimaryToken@4 -PsDereferencePrimaryToken@4 -PsDisableImpersonation@8 -PsEstablishWin32Callouts@4 -PsGetContextThread@12 -PsGetCurrentProcess@0=IoGetCurrentProcess@0 -PsGetCurrentProcessId@0 -PsGetCurrentProcessSessionId@0 -PsGetCurrentProcessWin32Process@0 -PsGetCurrentThread@0=KeGetCurrentThread@0 -PsGetCurrentThreadId@0 -PsGetCurrentThreadPreviousMode@0 -;PsGetCurrentThreadProcess -;PsGetCurrentThreadProcessId -PsGetCurrentThreadStackBase@0 -PsGetCurrentThreadStackLimit@0 -;PsGetCurrentThreadTeb -PsGetCurrentThreadWin32Thread@0 -;PsGetCurrentThreadWin32ThreadAndEnterCriticalRegion -PsGetJobLock@4 -PsGetJobSessionId@4 -PsGetJobUIRestrictionsClass@4 -PsGetProcessCreateTimeQuadPart@4 -PsGetProcessDebugPort@4 -PsGetProcessExitProcessCalled@4 -PsGetProcessExitStatus@4 -PsGetProcessExitTime@0 -PsGetProcessId@4 -PsGetProcessImageFileName@4 -PsGetProcessInheritedFromUniqueProcessId@4 -PsGetProcessJob@4 -PsGetProcessPeb@4 -PsGetProcessPriorityClass@4 -PsGetProcessSectionBaseAddress@4 -PsGetProcessSecurityPort@4 -PsGetProcessSessionId@4 -;PsGetProcessSessionIdEx -PsGetProcessWin32Process@4 -PsGetProcessWin32WindowStation@4 -PsGetThreadFreezeCount@4 -PsGetThreadHardErrorsAreDisabled@4 -PsGetThreadId@4 -PsGetThreadProcess@4 -PsGetThreadProcessId@4 -PsGetThreadSessionId@4 -PsGetThreadTeb@4 -PsGetThreadWin32Thread@4 -PsGetVersion@16 -PsImpersonateClient@20 -PsInitialSystemProcess DATA -PsIsProcessBeingDebugged@4 -;PsIsSystemProcess -PsIsSystemThread@4 -PsIsThreadImpersonating@4 -PsIsThreadTerminating@4 -PsJobType DATA -PsLookupProcessByProcessId@8 -PsLookupProcessThreadByCid@12 -PsLookupThreadByThreadId@8 -PsProcessType=_PsProcessType -PsReferenceImpersonationToken@16 -PsReferencePrimaryToken@4 -PsRemoveCreateThreadNotifyRoutine@4 -PsRemoveLoadImageNotifyRoutine@4 -PsRestoreImpersonation@8 -PsReturnPoolQuota@12 -PsReturnProcessNonPagedPoolQuota@8 -PsReturnProcessPagedPoolQuota@8 -PsRevertThreadToSelf@4 -PsRevertToSelf@0 -PsSetContextThread@12 -PsSetCreateProcessNotifyRoutine@8 -PsSetCreateThreadNotifyRoutine@4 -PsSetJobUIRestrictionsClass@8 -PsSetLegoNotifyRoutine@4 -PsSetLoadImageNotifyRoutine@4 -PsSetProcessPriorityByClass@8 -PsSetProcessPriorityClass@8 -PsSetProcessSecurityPort@8 -PsSetProcessWin32Process@8 -PsSetProcessWindowStation@8 -PsSetThreadHardErrorsAreDisabled@8 -PsSetThreadWin32Thread@8 -PsTerminateSystemThread@4 -PsThreadType=_PsThreadType -;PsWrapApcWow64Thread -READ_REGISTER_BUFFER_UCHAR@12 -READ_REGISTER_BUFFER_ULONG@12 -READ_REGISTER_BUFFER_USHORT@12 -READ_REGISTER_UCHAR@4 -READ_REGISTER_ULONG@4 -READ_REGISTER_USHORT@4 -KeRosDumpStackFrames@8 -RtlAbsoluteToSelfRelativeSD@12 -RtlAddAccessAllowedAce@16 -RtlAddAccessAllowedAceEx@20 -RtlAddAce@20 -RtlAddAtomToAtomTable@12 -RtlAddRange@36 -RtlAllocateAndInitializeSid@44 -RtlAllocateHeap@12 -RtlAnsiCharToUnicodeChar@4 -RtlAnsiStringToUnicodeSize@4=RtlxAnsiStringToUnicodeSize@4 -RtlAnsiStringToUnicodeString@12 -RtlAppendAsciizToString@8 -RtlAppendStringToString@8 -RtlAppendUnicodeStringToString@8 -RtlAppendUnicodeToString@8 -RtlAreAllAccessesGranted@8 -RtlAreAnyAccessesGranted@8 -RtlAreBitsClear@12 -RtlAreBitsSet@12 -RtlAssert@16 -RtlCaptureContext@4 -RtlCaptureStackBackTrace@16 -RtlCharToInteger@12 -RtlCheckRegistryKey@8 -RtlClearAllBits@4 -RtlClearBit@8 -RtlClearBits@12 -RtlCompareMemory@12 -RtlCompareMemoryUlong@12 -RtlCompareString@12 -RtlCompareUnicodeString@12 -RtlCompressBuffer@32 -RtlCompressChunks@28 -RtlConvertLongToLargeInteger@4 -RtlConvertSidToUnicodeString@12 -RtlConvertUlongToLargeInteger@4 -RtlCopyLuid@8 -RtlCopyRangeList@8 -RtlCopySid@12 -RtlCopyString@8 -RtlCopyUnicodeString@8 -RtlCreateAcl@12 -RtlCreateAtomTable@8 -RtlCreateHeap@24 -RtlCreateRegistryKey@8 -RtlCreateSecurityDescriptor@8 -RtlCreateSystemVolumeInformationFolder@4 -RtlCreateUnicodeString@8 -RtlCustomCPToUnicodeN@24 -RtlDecompressBuffer@24 -RtlDecompressChunks@28 -RtlDecompressFragment@32 -RtlDelete@4 -RtlDeleteAce@8 -RtlDeleteAtomFromAtomTable@8 -RtlDeleteElementGenericTable@8 -RtlDeleteElementGenericTableAvl@8 -RtlDeleteNoSplay@8 -RtlDeleteOwnersRanges@8 -RtlDeleteRange@24 -RtlDeleteRegistryValue@12 -RtlDescribeChunk@20 -RtlDestroyAtomTable@4 -RtlDestroyHeap@4 -RtlDowncaseUnicodeString@12 -RtlEmptyAtomTable@8 -RtlEnlargedIntegerMultiply@8 -RtlEnlargedUnsignedDivide@16 -RtlEnlargedUnsignedMultiply@8 -RtlEnumerateGenericTable@8 -RtlEnumerateGenericTableAvl@8 -RtlEnumerateGenericTableLikeADirectory@28 -RtlEnumerateGenericTableWithoutSplaying@8 -RtlEnumerateGenericTableWithoutSplayingAvl@8 -RtlEqualLuid@8 -RtlEqualSid@8 -RtlEqualString@12 -RtlEqualUnicodeString@12 -RtlExtendedIntegerMultiply@12 -RtlExtendedLargeIntegerDivide@16 -RtlExtendedMagicDivide@20 -RtlFillMemory@12 -RtlFillMemoryUlong@12 -RtlFindClearBits@12 -RtlFindClearBitsAndSet@12 -RtlFindClearRuns@16 -RtlFindFirstRunClear@8 -RtlFindLastBackwardRunClear@12 -RtlFindLeastSignificantBit@8 -RtlFindLongestRunClear@8 -RtlFindMessage@20 -RtlFindMostSignificantBit@8 -RtlFindNextForwardRunClear@12 -RtlFindRange@48 -RtlFindSetBits@12 -RtlFindSetBitsAndClear@12 -RtlFindUnicodePrefix@12 -RtlFormatCurrentUserKeyPath@4 -RtlFreeAnsiString@4 -RtlFreeHeap@12 -RtlFreeOemString@4 -RtlFreeRangeList@4 -RtlFreeUnicodeString@4 -RtlGUIDFromString@8 -RtlGenerate8dot3Name@16 -RtlGetAce@12 -RtlGetCallersAddress@8 -RtlGetCompressionWorkSpaceSize@12 -RtlGetDaclSecurityDescriptor@16 -RtlGetDefaultCodePage@8 -RtlGetElementGenericTable@8 -RtlGetElementGenericTableAvl@8 -RtlGetFirstRange@12 -RtlGetGroupSecurityDescriptor@12 -RtlGetNextRange@12 -RtlGetNtGlobalFlags@0 -RtlGetOwnerSecurityDescriptor@12 -RtlGetSaclSecurityDescriptor@16 -RtlGetSetBootStatusData@24 -RtlGetVersion@4 -RtlHashUnicodeString@16 -RtlImageDirectoryEntryToData@16 -RtlImageNtHeader@4 -RtlInitAnsiString@8 -RtlInitAnsiStringEx@8 -RtlInitCodePageTable@8 -RtlInitString@8 -RtlInitUnicodeString@8 -RtlInitUnicodeStringEx@8 -RtlInitializeBitMap@12 -RtlInitializeGenericTable@20 -RtlInitializeGenericTableAvl@20 -RtlInitializeRangeList@4 -RtlInitializeSid@12 -RtlInitializeUnicodePrefix@4 -RtlInsertElementGenericTable@16 -RtlInsertElementGenericTableAvl@16 -RtlInsertElementGenericTableFull@24 -RtlInsertElementGenericTableFullAvl@24 -RtlInsertUnicodePrefix@12 -RtlInt64ToUnicodeString@16 -RtlIntegerToChar@16 -RtlIntegerToUnicode@16 -RtlIntegerToUnicodeString@12 -RtlInvertRangeList@8 -RtlIpv4AddressToStringA@8 -RtlIpv4AddressToStringExA@16 -RtlIpv4AddressToStringExW@16 -RtlIpv4AddressToStringW@8 -RtlIpv4StringToAddressA@16 -RtlIpv4StringToAddressExA@16 -RtlIpv4StringToAddressExW@16 -RtlIpv4StringToAddressW@16 -RtlIpv6AddressToStringA@8 -RtlIpv6AddressToStringExA@20 -RtlIpv6AddressToStringExW@20 -RtlIpv6AddressToStringW@8 -RtlIpv6StringToAddressA@12 -RtlIpv6StringToAddressExA@16 -RtlIpv6StringToAddressExW@16 -RtlIpv6StringToAddressW@12 -RtlIsGenericTableEmpty@4 -RtlIsGenericTableEmptyAvl@4 -RtlIsNameLegalDOS8Dot3@12 -RtlIsRangeAvailable@40 -RtlIsValidOemCharacter@4 -RtlLargeIntegerAdd@16 -RtlLargeIntegerArithmeticShift@12 -RtlLargeIntegerDivide@20 -RtlLargeIntegerNegate@8 -RtlLargeIntegerShiftLeft@12 -RtlLargeIntegerShiftRight@12 -RtlLargeIntegerSubtract@16 -RtlLengthRequiredSid@4 -RtlLengthSecurityDescriptor@4 -RtlLengthSid@4 -RtlLockBootStatusData@4 -RtlLookupAtomInAtomTable@12 -RtlLookupElementGenericTable@8 -RtlLookupElementGenericTableAvl@8 -RtlLookupElementGenericTableFull@16 -RtlLookupElementGenericTableFullAvl@16 -RtlMapGenericMask@8 -RtlMapSecurityErrorToNtStatus@4 -RtlMergeRangeLists@16 -RtlMoveMemory@12 -RtlMultiByteToUnicodeN@20 -RtlMultiByteToUnicodeSize@12 -RtlNextUnicodePrefix@8 -RtlNtStatusToDosError@4 -RtlNtStatusToDosErrorNoTeb@4 -RtlNumberGenericTableElements@4 -RtlNumberGenericTableElementsAvl@4 -RtlNumberOfClearBits@4 -RtlNumberOfSetBits@4 -RtlOemStringToCountedUnicodeString@12 -RtlOemStringToUnicodeSize@4=RtlxOemStringToUnicodeSize@4 -RtlOemStringToUnicodeString@12 -RtlOemToUnicodeN@20 -RtlPinAtomInAtomTable@8 -@RtlPrefetchMemoryNonTemporal@8 -RtlPrefixString@12 -RtlPrefixUnicodeString@12 -RtlQueryAtomInAtomTable@24 -RtlQueryRegistryValues@20 -RtlQueryTimeZoneInformation@4 -RtlRaiseException@4 -RtlRandom@4 -RtlRandomEx@4 -RtlRealPredecessor@4 -RtlRealSuccessor@4 -RtlRemoveUnicodePrefix@8 -RtlReserveChunk@20 -RtlSecondsSince1970ToTime@8 -RtlSecondsSince1980ToTime@8 -RtlSelfRelativeToAbsoluteSD@44 -RtlSelfRelativeToAbsoluteSD2@8 -RtlSetAllBits@4 -RtlSetBit@8 -RtlSetBits@12 -RtlSetDaclSecurityDescriptor@16 -RtlSetGroupSecurityDescriptor@12 -RtlSetOwnerSecurityDescriptor@12 -RtlSetSaclSecurityDescriptor@16 -RtlSetTimeZoneInformation@4 -RtlSizeHeap@12 -RtlSplay@4 -RtlStringFromGUID@8 -RtlSubAuthorityCountSid@4 -RtlSubAuthoritySid@8 -RtlSubtreePredecessor@4 -RtlSubtreeSuccessor@4 -RtlTestBit@8 -RtlTimeFieldsToTime@8 -RtlTimeToElapsedTimeFields@8 -RtlTimeToSecondsSince1970@8 -RtlTimeToSecondsSince1980@8 -RtlTimeToTimeFields@8 -;RtlTraceDatabaseAdd -;RtlTraceDatabaseCreate -;RtlTraceDatabaseDestroy -;RtlTraceDatabaseEnumerate -;RtlTraceDatabaseFind -;RtlTraceDatabaseLock -;RtlTraceDatabaseUnlock -;RtlTraceDatabaseValidate -@RtlUlongByteSwap@4 -@RtlUlonglongByteSwap@8 -RtlUnicodeStringToAnsiSize@4=RtlxUnicodeStringToAnsiSize@4 -RtlUnicodeStringToAnsiString@12 -RtlUnicodeStringToCountedOemString@12 -RtlUnicodeStringToInteger@12 -RtlUnicodeStringToOemSize@4=RtlxUnicodeStringToOemSize@4 -RtlUnicodeStringToOemString@12 -RtlUnicodeToCustomCPN@24 -RtlUnicodeToMultiByteN@20 -RtlUnicodeToMultiByteSize@12 -RtlUnicodeToOemN@20 -RtlUnlockBootStatusData@4 -RtlUnwind@16 -RtlUpcaseUnicodeChar@4 -RtlUpcaseUnicodeString@12 -RtlUpcaseUnicodeStringToAnsiString@12 -RtlUpcaseUnicodeStringToCountedOemString@12 -RtlUpcaseUnicodeStringToOemString@12 -RtlUpcaseUnicodeToCustomCPN@24 -RtlUpcaseUnicodeToMultiByteN@20 -RtlUpcaseUnicodeToOemN@20 -RtlUpperChar@4 -RtlUpperString@8 -@RtlUshortByteSwap@4 -RtlValidRelativeSecurityDescriptor@12 -RtlValidSecurityDescriptor@4 -RtlValidSid@4 -RtlVerifyVersionInfo@16 -RtlVolumeDeviceToDosName@8 -RtlWalkFrameChain@12 -RtlWriteRegistryValue@24 -RtlZeroHeap@8 -RtlZeroMemory@8 -RtlxAnsiStringToUnicodeSize@4 -RtlxOemStringToUnicodeSize@4 -RtlxUnicodeStringToAnsiSize@4 -RtlxUnicodeStringToOemSize@4 -SeAccessCheck@40 -SeAppendPrivileges@8 -SeAssignSecurity@28 -SeAssignSecurityEx@36 -SeAuditHardLinkCreation@12 -SeAuditingFileEvents@8 -SeAuditingFileEventsWithContext@12 -SeAuditingFileOrGlobalEvents@12 -SeAuditingHardLinkEvents@8 -SeAuditingHardLinkEventsWithContext@12 -SeCaptureSecurityDescriptor@20 -SeCaptureSubjectContext@4 -SeCloseObjectAuditAlarm@12 -SeCreateAccessState@16 -SeCreateClientSecurity@16 -SeCreateClientSecurityFromSubjectContext@16 -SeDeassignSecurity@4 -SeDeleteAccessState@4 -SeDeleteObjectAuditAlarm@8 -SeExports DATA -SeFilterToken@24 -SeFreePrivileges@4 -SeImpersonateClient@8 -SeImpersonateClientEx@8 -SeLockSubjectContext@4 -SeMarkLogonSessionForTerminationNotification@4 -SeOpenObjectAuditAlarm@36 -SeOpenObjectForDeleteAuditAlarm@36 -SePrivilegeCheck@12 -SePrivilegeObjectAuditAlarm@24 -SePublicDefaultDacl DATA -SeQueryAuthenticationIdToken@8 -SeQueryInformationToken@12 -SeQuerySecurityDescriptorInfo@16 -SeQuerySessionIdToken@8 -SeRegisterLogonSessionTerminatedRoutine@4 -SeReleaseSecurityDescriptor@12 -SeReleaseSubjectContext@4 -SeSetAccessStateGenericMapping@8 -;SeSetAuditParameter -SeSetSecurityDescriptorInfo@24 -SeSetSecurityDescriptorInfoEx@28 -SeSinglePrivilegeCheck@12 -SeSystemDefaultDacl DATA -SeTokenImpersonationLevel@4 -SeTokenIsAdmin@4 -SeTokenIsRestricted@4 -SeTokenIsWriteRestricted@4 -SeTokenType@4 -SeUnlockSubjectContext@4 -SeUnregisterLogonSessionTerminatedRoutine@4 -SeValidSecurityDescriptor@8 -VerSetConditionMask@16 -;VfFailDeviceNode -;VfFailDriver -;VfFailSystemBIOS -;VfIsVerificationEnabled -WRITE_REGISTER_BUFFER_UCHAR@12 -WRITE_REGISTER_BUFFER_ULONG@12 -WRITE_REGISTER_BUFFER_USHORT@12 -WRITE_REGISTER_UCHAR@8 -WRITE_REGISTER_ULONG@8 -WRITE_REGISTER_USHORT@8 -;WmiFlushTrace -;WmiGetClock -;WmiQueryTrace -;WmiQueryTraceInformation -;WmiStartTrace -;WmiStopTrace -;WmiTraceFastEvent -;WmiTraceMessage -;WmiTraceMessageVa -;WmiUpdateTrace -;XIPDispatch -ZwAccessCheckAndAuditAlarm@44 -ZwAddBootEntry@8 -ZwAddDriverEntry@8 -ZwAdjustPrivilegesToken@24 -ZwAlertThread@4 -ZwAllocateVirtualMemory@24 -ZwAssignProcessToJobObject@8 -ZwCancelIoFile@8 -ZwCancelTimer@8 -ZwClearEvent@4 -ZwClose@4 -ZwCloseObjectAuditAlarm@12 -ZwConnectPort@32 -ZwCreateDirectoryObject@12 -ZwCreateEvent@20 -ZwCreateFile@44 -ZwCreateJobObject@12 -ZwCreateKey@28 -ZwCreateSection@28 -ZwCreateSymbolicLinkObject@16 -ZwCreateTimer@16 -ZwDeleteBootEntry@4 -ZwDeleteDriverEntry@4 -ZwDeleteFile@4 -ZwDeleteKey@4 -ZwDeleteValueKey@8 -ZwDeviceIoControlFile@40 -ZwDisplayString@4 -ZwDuplicateObject@28 -ZwDuplicateToken@24 -ZwEnumerateBootEntries@8 -ZwEnumerateDriverEntries@8 -ZwEnumerateKey@24 -ZwEnumerateValueKey@24 -ZwFlushInstructionCache@12 -ZwFlushKey@4 -ZwFlushVirtualMemory@16 -ZwFreeVirtualMemory@16 -ZwFsControlFile@40 -ZwInitiatePowerAction@16 -ZwIsProcessInJob@8 -ZwLoadDriver@4 -ZwLoadKey@8 -ZwMakeTemporaryObject@4 -ZwMapViewOfSection@40 -ZwModifyBootEntry@4 -ZwModifyDriverEntry@4 -ZwNotifyChangeKey@40 -ZwOpenDirectoryObject@12 -ZwOpenEvent@12 -ZwOpenFile@24 -ZwOpenJobObject@12 -ZwOpenKey@12 -ZwOpenProcess@16 -ZwOpenProcessToken@12 -ZwOpenProcessTokenEx@16 -ZwOpenSection@12 -ZwOpenSymbolicLinkObject@12 -ZwOpenThread@16 -ZwOpenThreadToken@16 -ZwOpenThreadTokenEx@20 -ZwOpenTimer@12 -ZwPowerInformation@20 -ZwPulseEvent@8 -ZwQueryBootEntryOrder@8 -ZwQueryBootOptions@8 -ZwQueryDefaultLocale@8 -ZwQueryDefaultUILanguage@4 -ZwQueryDirectoryFile@44 -ZwQueryDirectoryObject@28 -ZwQueryDriverEntryOrder@8 -ZwQueryEaFile@36 -ZwQueryFullAttributesFile@8 -ZwQueryInformationAtom@20 -ZwQueryInformationFile@20 -ZwQueryInformationJobObject@20 -ZwQueryInformationProcess@20 -ZwQueryInformationThread@20 -ZwQueryInformationToken@20 -ZwQueryInstallUILanguage@4 -ZwQueryKey@20 -ZwQueryObject@20 -ZwQuerySection@20 -ZwQuerySecurityObject@20 -ZwQuerySymbolicLinkObject@12 -ZwQuerySystemInformation@16 -ZwQueryValueKey@24 -ZwQueryVolumeInformationFile@20 -ZwReadFile@36 -ZwReplaceKey@12 -ZwRequestWaitReplyPort@12 -ZwResetEvent@8 -ZwRestoreKey@12 -ZwSaveKey@8 -ZwSaveKeyEx@12 -ZwSecureConnectPort@36 -ZwSetBootEntryOrder@8 -ZwSetBootOptions@8 -ZwSetDefaultLocale@8 -ZwSetDefaultUILanguage@4 -ZwSetDriverEntryOrder@8 -ZwSetEaFile@16 -ZwSetEvent@8 -ZwSetInformationFile@20 -ZwSetInformationJobObject@16 -ZwSetInformationObject@16 -ZwSetInformationProcess@16 -ZwSetInformationThread@16 -ZwSetSecurityObject@12 -ZwSetSystemInformation@12 -ZwSetSystemTime@8 -ZwSetTimer@28 -ZwSetValueKey@24 -ZwSetVolumeInformationFile@20 -ZwTerminateJobObject@8 -ZwTerminateProcess@8 -ZwTranslateFilePath@16 -ZwUnloadDriver@4 -ZwUnloadKey@4 -ZwUnmapViewOfSection@8 -ZwWaitForMultipleObjects@20 -ZwWaitForSingleObject@12 -ZwWriteFile@36 -ZwYieldExecution@0 -;_CIcos -;_CIsin -;_CIsqrt -_abnormal_termination -_alldiv -_alldvrm -_allmul -_alloca_probe -_allrem -_allshl -_allshr -_aulldiv -_aulldvrm -_aullrem -_aullshr -_except_handler2 -_except_handler3 -_global_unwind2 -_itoa -_itow -_local_unwind2 -_purecall -_snprintf -_snwprintf -_stricmp -_strlwr -_strnicmp -_strnset -_strrev -_strset -_strupr -_vsnprintf -_vsnwprintf -_wcsicmp -_wcslwr -_wcsnicmp -_wcsnset -_wcsrev -_wcsupr -atoi -atol -isdigit -islower -isprint -isspace -isupper -isxdigit -mbstowcs -mbtowc -memchr -memcpy -memcmp -memmove -memset -qsort -rand -sprintf -srand -strcat -strchr -strcmp -strcpy -strlen -strncat -strncmp -strncpy -strrchr -strspn -strstr -swprintf -tolower -toupper -towlower -towupper -vDbgPrintEx -vDbgPrintExWithPrefix -vsprintf -wcscat -wcschr -wcscmp -wcscpy -wcscspn -wcslen -wcsncat -wcsncmp -wcsncpy -wcsrchr -wcsspn -wcsstr -wcstombs -wctomb diff --git a/reactos/ntoskrnl/ps/kill.c b/reactos/ntoskrnl/ps/kill.c index 670ddd0b530..042b0c987d0 100644 --- a/reactos/ntoskrnl/ps/kill.c +++ b/reactos/ntoskrnl/ps/kill.c @@ -697,10 +697,10 @@ PspExitThread(IN NTSTATUS ExitStatus) PspW32ProcessCallout(CurrentProcess, FALSE); } - /* Make sure Stack Swap isn't enabled */ - if (Thread->Tcb.EnableStackSwap) + /* Make sure Stack Swap is enabled */ + if (!Thread->Tcb.EnableStackSwap) { - /* Stack swap really shouldn't be on during exit !*/ + /* Stack swap really shouldn't be disabled during exit! */ KEBUGCHECKEX(KERNEL_STACK_LOCKED_AT_EXIT, 0, 0, 0, 0); } @@ -1086,7 +1086,7 @@ PsTerminateSystemThread(IN NTSTATUS ExitStatus) PETHREAD Thread = PsGetCurrentThread(); /* Make sure this is a system thread */ - if (Thread->SystemThread) return STATUS_INVALID_PARAMETER; + if (!Thread->SystemThread) return STATUS_INVALID_PARAMETER; /* Terminate it for real */ return PspTerminateThreadByPointer(Thread, ExitStatus, TRUE); diff --git a/reactos/ntoskrnl/ps/process.c b/reactos/ntoskrnl/ps/process.c index 035efcc02d8..3e549ff9bd8 100644 --- a/reactos/ntoskrnl/ps/process.c +++ b/reactos/ntoskrnl/ps/process.c @@ -365,7 +365,7 @@ PspCreateProcess(OUT PHANDLE ProcessHandle, PDEBUG_OBJECT DebugObject; PSECTION_OBJECT SectionObject; NTSTATUS Status, AccessStatus; - PHYSICAL_ADDRESS DirectoryTableBase = {{0}}; + ULONG DirectoryTableBase[2] = {0,0}; KAFFINITY Affinity; HANDLE_TABLE_ENTRY CidEntry; PETHREAD CurrentThread = PsGetCurrentThread(); @@ -562,7 +562,7 @@ PspCreateProcess(OUT PHANDLE ProcessHandle, /* Create the address space for the child */ if (!MmCreateProcessAddressSpace(MinWs, Process, - &DirectoryTableBase)) + DirectoryTableBase)) { /* Failed */ Status = STATUS_INSUFFICIENT_RESOURCES; @@ -573,7 +573,7 @@ PspCreateProcess(OUT PHANDLE ProcessHandle, { /* Otherwise, we are the boot process, we're already semi-initialized */ Process->ObjectTable = CurrentProcess->ObjectTable; - Status = MmInitializeHandBuiltProcess(Process, &DirectoryTableBase); + Status = MmInitializeHandBuiltProcess(Process, DirectoryTableBase); if (!NT_SUCCESS(Status)) goto CleanupWithRef; } @@ -587,7 +587,7 @@ PspCreateProcess(OUT PHANDLE ProcessHandle, KeInitializeProcess(&Process->Pcb, PROCESS_PRIORITY_NORMAL, Affinity, - &DirectoryTableBase, + DirectoryTableBase, (BOOLEAN)(Process->DefaultHardErrorProcessing & 4)); /* Duplicate Parent Token */ diff --git a/reactos/ntoskrnl/ps/security.c b/reactos/ntoskrnl/ps/security.c index 12b4cf1482a..525b130c076 100644 --- a/reactos/ntoskrnl/ps/security.c +++ b/reactos/ntoskrnl/ps/security.c @@ -255,7 +255,7 @@ PspSetPrimaryToken(IN PEPROCESS Process, PreviousMode)) { /* Failed, dereference */ - if (TokenHandle) ObDereferenceObject(Token); + if (TokenHandle) ObDereferenceObject(NewToken); return STATUS_PRIVILEGE_NOT_HELD; } } @@ -311,13 +311,10 @@ PspSetPrimaryToken(IN PEPROCESS Process, STANDARD_RIGHTS_ALL | PROCESS_SET_QUOTA); } - - /* Dereference the process */ - ObDereferenceObject(Process); } /* Dereference the token */ - if (Token) ObDereferenceObject(NewToken); + if (TokenHandle) ObDereferenceObject(NewToken); return Status; } diff --git a/reactos/ntoskrnl/ps/thread.c b/reactos/ntoskrnl/ps/thread.c index 0a50c3ee303..6de4bfc6490 100644 --- a/reactos/ntoskrnl/ps/thread.c +++ b/reactos/ntoskrnl/ps/thread.c @@ -155,7 +155,7 @@ PspSystemThreadStartup(IN PKSTART_ROUTINE StartRoutine, { if (!(Thread->Terminated) && !(Thread->DeadThread)) { - /* Call it the Start Routine */ + /* Call the Start Routine */ StartRoutine(StartContext); } } diff --git a/reactos/ntoskrnl/rtl/strtok.c b/reactos/ntoskrnl/rtl/strtok.c deleted file mode 100644 index 98ed06b0881..00000000000 --- a/reactos/ntoskrnl/rtl/strtok.c +++ /dev/null @@ -1,109 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel - * FILE: ntoskrnl/rtl/strtok.c - * PURPOSE: Unicode and thread safe implementation of strtok - * - * PROGRAMMERS: David Welch (welch@mcmail.com) - */ - -/* INCLUDES *****************************************************************/ - -#include -#include - - -/* FUNCTIONS *****************************************************************/ - -char* __cdecl strtok(char *s, const char *delim) -{ - const char *spanp; - int c, sc; - char *tok; - static char *last; - - if (s == NULL && (s = last) == NULL) - return (NULL); - - /* - * Skip (span) leading delimiters (s += strspn(s, delim), sort of). - */ - cont: - c = *s++; - for (spanp = delim; (sc = *spanp++) != 0;) { - if (c == sc) - goto cont; - } - - if (c == 0) { /* no non-delimiter characters */ - last = NULL; - return (NULL); - } - tok = s - 1; - - /* - * Scan token (scan for delimiters: s += strcspn(s, delim), sort of). - * Note that delim must have one NUL; we stop if we see that, too. - */ - for (;;) { - c = *s++; - spanp = delim; - do { - if ((sc = *spanp++) == c) { - if (c == 0) - s = NULL; - else - s[-1] = 0; - last = s; - return (tok); - } - } while (sc != 0); - } - /* NOTREACHED */ -} - -PWSTR RtlStrtok(PUNICODE_STRING _string, PWSTR _sep, - PWSTR* temp) -/* - * FUNCTION: Splits a string into tokens - * ARGUMENTS: - * string = string to operate on - * if NULL then continue with previous string - * sep = Token deliminators - * temp = Tempory storage provided by the caller - * ARGUMENTS: Returns the beginning of the next token - */ -{ - PWSTR string; - PWSTR sep; - PWSTR start; - - if (_string!=NULL) - { - string = _string->Buffer; - } - else - { - string = *temp; - } - - start = string; - - while ((*string)!=0) - { - sep = _sep; - while ((*sep)!=0) - { - if ((*string)==(*sep)) - { - *string=0; - *temp=string+1; - return(start); - } - sep++; - } - string++; - } - *temp=NULL; - return(start); -} diff --git a/reactos/subsystems/csr/csrsrv/session.c b/reactos/subsystems/csr/csrsrv/session.c index 5f06e6136c2..bbbe3a09c5c 100644 --- a/reactos/subsystems/csr/csrsrv/session.c +++ b/reactos/subsystems/csr/csrsrv/session.c @@ -21,7 +21,7 @@ HANDLE CsrSmApiPort; PSB_API_ROUTINE CsrServerSbApiDispatch[5] = { CsrSbCreateSession, - CsrSbForeignSessionComplete, + CsrSbTerminateSession, CsrSbForeignSessionComplete, CsrSbCreateProcess, NULL @@ -30,7 +30,7 @@ PSB_API_ROUTINE CsrServerSbApiDispatch[5] = PCHAR CsrServerSbApiName[5] = { "SbCreateSession", - "SbTerminateSEssion", + "SbTerminateSession", "SbForeignSessionComplete", "SbCreateProcess", "Unknown Csr Sb Api Number" diff --git a/reactos/subsystems/csr/csrsrv/srv.h b/reactos/subsystems/csr/csrsrv/srv.h index 895348815cc..3abf76aba9e 100644 --- a/reactos/subsystems/csr/csrsrv/srv.h +++ b/reactos/subsystems/csr/csrsrv/srv.h @@ -122,6 +122,10 @@ BOOLEAN NTAPI CsrSbCreateSession(IN PSB_API_MESSAGE ApiMessage); +BOOLEAN +NTAPI +CsrSbTerminateSession(IN PSB_API_MESSAGE ApiMessage); + BOOLEAN NTAPI CsrSbForeignSessionComplete(IN PSB_API_MESSAGE ApiMessage); diff --git a/reactos/subsystems/csr/csrsrv/status.h b/reactos/subsystems/csr/csrsrv/status.h index e0675003adf..c9ff9aa3aca 100644 --- a/reactos/subsystems/csr/csrsrv/status.h +++ b/reactos/subsystems/csr/csrsrv/status.h @@ -59,7 +59,7 @@ * CsrMoveSatisfiedWait 753E7909 20 - wait.c - IMPLEMENTED * CsrNotifyWait 753E782F 21 - wait.c - IMPLEMENTED * CsrPopulateDosDevices 753E37A5 22 - init.c - IMPLEMENTED - * CsrQueryApiPort 753E4E42 23 - api.c - IMPLEMENTED + * CsrQueryApiPort 753E4E42 23 - api.c - UNIMPLEMENTED * CsrReferenceThread 753E61E5 24 - thread.c - IMPLEMENTED * CsrRevertToSelf 753E615A 25 - thread.c - IMPLEMENTED * CsrServerInitialization 753E3D75 26 - server.c - IMPLEMENTED @@ -84,7 +84,7 @@ /* Public SB API Interface Status (session.c) * CsrSbCreateSession - IMPLEMENTED * CsrSbForeignSessionComplete - IMPLEMENTED - * CsrSbTerminateSession - IMPLEMENTED + * CsrSbTerminateSession - UNIMPLEMENTED * CsrSbCreateProcess - UNIMPLEMENTED */ diff --git a/reactos/subsystems/csr/main.c b/reactos/subsystems/csr/main.c index 7295c547c64..6e8c05db13b 100644 --- a/reactos/subsystems/csr/main.c +++ b/reactos/subsystems/csr/main.c @@ -80,7 +80,7 @@ _main(int argc, ProcessUserModeIOPL, NULL, 0); - if (NT_SUCCESS(Status)) + if (!NT_SUCCESS(Status)) { /* Raise a hard error */ DPRINT1("CSRSS: Could not raise IOPL: %x\n", Status); diff --git a/reactos/subsystems/ntvdm/lang/nb-NO.rc b/reactos/subsystems/ntvdm/lang/no-NO.rc similarity index 100% rename from reactos/subsystems/ntvdm/lang/nb-NO.rc rename to reactos/subsystems/ntvdm/lang/no-NO.rc diff --git a/reactos/subsystems/ntvdm/rsrc.rc b/reactos/subsystems/ntvdm/rsrc.rc index 54fa9c08bc4..e5d40760788 100644 --- a/reactos/subsystems/ntvdm/rsrc.rc +++ b/reactos/subsystems/ntvdm/rsrc.rc @@ -12,7 +12,7 @@ #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/ja-JP.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/th-TH.rc" #include "lang/uk-UA.rc" #include "lang/pl-PL.rc" diff --git a/reactos/subsystems/win32/csrss/api/handle.c b/reactos/subsystems/win32/csrss/api/handle.c index 6b468fd5950..5a9efda16ff 100644 --- a/reactos/subsystems/win32/csrss/api/handle.c +++ b/reactos/subsystems/win32/csrss/api/handle.c @@ -66,10 +66,6 @@ NTSTATUS STDCALL CsrGetObject( PCSRSS_PROCESS_DATA ProcessData, HANDLE Handle, O ULONG h = (ULONG)Handle >> 2; DPRINT("CsrGetObject, Object: %x, %x, %x\n", Object, Handle, ProcessData ? ProcessData->HandleTableSize : 0); - if (ProcessData == NULL) - { - return STATUS_INVALID_PARAMETER; - } RtlEnterCriticalSection(&ProcessData->HandleTableLock); if (!CsrIsConsoleHandle(Handle) || h >= ProcessData->HandleTableSize || (*Object = ProcessData->HandleTable[h].Object) == NULL @@ -117,10 +113,6 @@ CsrReleaseObject(PCSRSS_PROCESS_DATA ProcessData, ULONG h = (ULONG)Handle >> 2; Object_t *Object; - if (ProcessData == NULL) - { - return STATUS_INVALID_PARAMETER; - } RtlEnterCriticalSection(&ProcessData->HandleTableLock); if (h >= ProcessData->HandleTableSize || (Object = ProcessData->HandleTable[h].Object) == NULL) @@ -143,11 +135,6 @@ NTSTATUS STDCALL CsrInsertObject(PCSRSS_PROCESS_DATA ProcessData, ULONG i; PVOID* Block; - if (ProcessData == NULL) - { - return STATUS_INVALID_PARAMETER; - } - RtlEnterCriticalSection(&ProcessData->HandleTableLock); for (i = 0; i < ProcessData->HandleTableSize; i++) @@ -188,9 +175,7 @@ NTSTATUS STDCALL CsrDuplicateHandleTable(PCSRSS_PROCESS_DATA SourceProcessData, { ULONG i; - if (SourceProcessData == NULL || - TargetProcessData == NULL || - TargetProcessData->HandleTableSize) + if (TargetProcessData->HandleTableSize) { return STATUS_INVALID_PARAMETER; } @@ -225,10 +210,6 @@ NTSTATUS STDCALL CsrVerifyObject( PCSRSS_PROCESS_DATA ProcessData, HANDLE Handle { ULONG h = (ULONG)Handle >> 2; - if (ProcessData == NULL) - { - return STATUS_INVALID_PARAMETER; - } if (h >= ProcessData->HandleTableSize || ProcessData->HandleTable[h].Object == NULL) { diff --git a/reactos/subsystems/win32/csrss/api/process.c b/reactos/subsystems/win32/csrss/api/process.c index d96651ff980..b3d954d9e95 100644 --- a/reactos/subsystems/win32/csrss/api/process.c +++ b/reactos/subsystems/win32/csrss/api/process.c @@ -228,7 +228,6 @@ CSR_API(CsrCreateProcess) NewProcessData = CsrCreateProcessData(Request->Data.CreateProcessRequest.NewProcessId); if (NewProcessData == NULL) { - Request->Status = STATUS_NO_MEMORY; return(STATUS_NO_MEMORY); } @@ -242,11 +241,15 @@ CSR_API(CsrCreateProcess) } } - /* Set default shutdown parameters */ - NewProcessData->ShutdownLevel = 0x280; - NewProcessData->ShutdownFlags = 0; + if (Request->Data.CreateProcessRequest.Flags & CREATE_NEW_PROCESS_GROUP) + { + NewProcessData->ProcessGroup = (DWORD)NewProcessData->ProcessId; + } + else + { + NewProcessData->ProcessGroup = ProcessData->ProcessGroup; + } - Request->Status = STATUS_SUCCESS; return(STATUS_SUCCESS); } @@ -255,13 +258,7 @@ CSR_API(CsrTerminateProcess) Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - if (ProcessData == NULL) - { - return(Request->Status = STATUS_INVALID_PARAMETER); - } - ProcessData->Terminated = TRUE; - Request->Status = STATUS_SUCCESS; return STATUS_SUCCESS; } @@ -270,8 +267,6 @@ CSR_API(CsrConnectProcess) Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - Request->Status = STATUS_SUCCESS; - return(STATUS_SUCCESS); } @@ -280,16 +275,9 @@ CSR_API(CsrGetShutdownParameters) Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - if (ProcessData == NULL) - { - return(Request->Status = STATUS_INVALID_PARAMETER); - } - Request->Data.GetShutdownParametersRequest.Level = ProcessData->ShutdownLevel; Request->Data.GetShutdownParametersRequest.Flags = ProcessData->ShutdownFlags; - Request->Status = STATUS_SUCCESS; - return(STATUS_SUCCESS); } @@ -298,16 +286,9 @@ CSR_API(CsrSetShutdownParameters) Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - if (ProcessData == NULL) - { - return(Request->Status = STATUS_INVALID_PARAMETER); - } - ProcessData->ShutdownLevel = Request->Data.SetShutdownParametersRequest.Level; ProcessData->ShutdownFlags = Request->Data.SetShutdownParametersRequest.Flags; - Request->Status = STATUS_SUCCESS; - return(STATUS_SUCCESS); } @@ -316,12 +297,7 @@ CSR_API(CsrGetInputHandle) Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - if (ProcessData == NULL) - { - Request->Data.GetInputHandleRequest.InputHandle = INVALID_HANDLE_VALUE; - Request->Status = STATUS_INVALID_PARAMETER; - } - else if (ProcessData->Console) + if (ProcessData->Console) { Request->Status = CsrInsertObject(ProcessData, &Request->Data.GetInputHandleRequest.InputHandle, @@ -343,12 +319,7 @@ CSR_API(CsrGetOutputHandle) Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - if (ProcessData == NULL) - { - Request->Data.GetOutputHandleRequest.OutputHandle = INVALID_HANDLE_VALUE; - Request->Status = STATUS_INVALID_PARAMETER; - } - else if (ProcessData->Console) + if (ProcessData->Console) { RtlEnterCriticalSection(&ProcessDataLock); Request->Status = CsrInsertObject(ProcessData, @@ -372,15 +343,7 @@ CSR_API(CsrCloseHandle) Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - if (ProcessData == NULL) - { - Request->Status = STATUS_INVALID_PARAMETER; - } - else - { - Request->Status = CsrReleaseObject(ProcessData, Request->Data.CloseHandleRequest.Handle); - } - return Request->Status; + return CsrReleaseObject(ProcessData, Request->Data.CloseHandleRequest.Handle); } CSR_API(CsrVerifyHandle) @@ -406,22 +369,14 @@ CSR_API(CsrDuplicateHandle) Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - if (NULL == ProcessData) - { - DPRINT1("Invalid source process\n"); - Request->Status = STATUS_INVALID_PARAMETER; - return Request->Status; - } - Index = (ULONG)Request->Data.DuplicateHandleRequest.Handle >> 2; RtlEnterCriticalSection(&ProcessData->HandleTableLock); if (Index >= ProcessData->HandleTableSize || (Entry = &ProcessData->HandleTable[Index])->Object == NULL) { DPRINT1("Couldn't dup invalid handle %p\n", Request->Data.DuplicateHandleRequest.Handle); - Request->Status = STATUS_INVALID_HANDLE; RtlLeaveCriticalSection(&ProcessData->HandleTableLock); - return Request->Status; + return STATUS_INVALID_HANDLE; } if (Request->Data.DuplicateHandleRequest.Options & DUPLICATE_SAME_ACCESS) @@ -436,9 +391,8 @@ CSR_API(CsrDuplicateHandle) { DPRINT1("Handle %p only has access %X; requested %X\n", Request->Data.DuplicateHandleRequest.Handle, Entry->Access, DesiredAccess); - Request->Status = STATUS_INVALID_PARAMETER; RtlLeaveCriticalSection(&ProcessData->HandleTableLock); - return Request->Status; + return STATUS_INVALID_PARAMETER; } } @@ -464,18 +418,8 @@ CSR_API(CsrGetInputWaitHandle) Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - if (ProcessData == NULL) - { - - Request->Data.GetConsoleInputWaitHandle.InputWaitHandle = INVALID_HANDLE_VALUE; - Request->Status = STATUS_INVALID_PARAMETER; - } - else - { - Request->Data.GetConsoleInputWaitHandle.InputWaitHandle = ProcessData->ConsoleEvent; - Request->Status = STATUS_SUCCESS; - } - return Request->Status; + Request->Data.GetConsoleInputWaitHandle.InputWaitHandle = ProcessData->ConsoleEvent; + return STATUS_SUCCESS; } /* EOF */ diff --git a/reactos/subsystems/win32/csrss/api/user.c b/reactos/subsystems/win32/csrss/api/user.c index cb9724fda80..de963da0a9a 100644 --- a/reactos/subsystems/win32/csrss/api/user.c +++ b/reactos/subsystems/win32/csrss/api/user.c @@ -26,26 +26,20 @@ static ULONG ServicesProcessId; CSR_API(CsrRegisterServicesProcess) { - NTSTATUS Status; - Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); if (ServicesProcessIdValid == TRUE) { /* Only accept a single call */ - Status = STATUS_INVALID_PARAMETER; + return STATUS_INVALID_PARAMETER; } else { ServicesProcessId = (ULONG)Request->Data.RegisterServicesProcessRequest.ProcessId; ServicesProcessIdValid = TRUE; - Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } - - Request->Status = Status; - - return(Status); } /* EOF */ diff --git a/reactos/subsystems/win32/csrss/api/wapi.c b/reactos/subsystems/win32/csrss/api/wapi.c index bd1c365c5fb..1261bc79b09 100644 --- a/reactos/subsystems/win32/csrss/api/wapi.c +++ b/reactos/subsystems/win32/csrss/api/wapi.c @@ -70,7 +70,6 @@ FASTCALL CsrApiCallHandler(PCSRSS_PROCESS_DATA ProcessData, PCSR_API_MESSAGE Request) { - BOOL Found = FALSE; unsigned DefIndex; ULONG Type; @@ -79,7 +78,7 @@ CsrApiCallHandler(PCSRSS_PROCESS_DATA ProcessData, DPRINT("CSR: API Number: %x ServerID: %x\n",Type, Request->Type >> 16); /* FIXME: Extract DefIndex instead of looping */ - for (DefIndex = 0; ! Found && DefIndex < ApiDefinitionsCount; DefIndex++) + for (DefIndex = 0; DefIndex < ApiDefinitionsCount; DefIndex++) { if (ApiDefinitions[DefIndex].Type == Type) { @@ -92,18 +91,15 @@ CsrApiCallHandler(PCSRSS_PROCESS_DATA ProcessData, } else { - (ApiDefinitions[DefIndex].Handler)(ProcessData, Request); - Found = TRUE; + Request->Status = (ApiDefinitions[DefIndex].Handler)(ProcessData, Request); } + return; } } - if (! Found) - { - DPRINT1("CSR: Unknown request type 0x%x\n", Request->Type); - Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); - Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - Request->Status = STATUS_INVALID_SYSTEM_SERVICE; - } + DPRINT1("CSR: Unknown request type 0x%x\n", Request->Type); + Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); + Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); + Request->Status = STATUS_INVALID_SYSTEM_SERVICE; } BOOL diff --git a/reactos/subsystems/win32/csrss/include/api.h b/reactos/subsystems/win32/csrss/include/api.h index 7ec1d22d176..651da359656 100644 --- a/reactos/subsystems/win32/csrss/include/api.h +++ b/reactos/subsystems/win32/csrss/include/api.h @@ -48,6 +48,7 @@ typedef struct _CSRSS_PROCESS_DATA ULONG HandleTableSize; PCSRSS_HANDLE HandleTable; HANDLE ProcessId; + DWORD ProcessGroup; HANDLE Process; ULONG ShutdownLevel; ULONG ShutdownFlags; diff --git a/reactos/subsystems/win32/csrss/include/conio.h b/reactos/subsystems/win32/csrss/include/conio.h index 38c18b201cf..07dff611589 100644 --- a/reactos/subsystems/win32/csrss/include/conio.h +++ b/reactos/subsystems/win32/csrss/include/conio.h @@ -41,7 +41,7 @@ typedef struct tagCSRSS_SCREEN_BUFFER USHORT ShowX, ShowY; /* beginning offset for the actual display area */ ULONG CurrentX; /* Current X cursor position */ ULONG CurrentY; /* Current Y cursor position */ - BYTE DefaultAttrib; /* default char attribute */ + WORD DefaultAttrib; /* default char attribute */ USHORT VirtualY; /* top row of buffer being displayed, reported to callers */ CONSOLE_CURSOR_INFO CursorInfo; USHORT Mode; @@ -135,6 +135,7 @@ CSR_API(CsrSetConsoleCodePage); CSR_API(CsrGetConsoleOutputCodePage); CSR_API(CsrSetConsoleOutputCodePage); CSR_API(CsrGetProcessList); +CSR_API(CsrGenerateCtrlEvent); #define ConioInitScreenBuffer(Console, Buff) (Console)->Vtbl->InitScreenBuffer((Console), (Buff)) #define ConioDrawRegion(Console, Region) (Console)->Vtbl->DrawRegion((Console), (Region)) diff --git a/reactos/subsystems/win32/csrss/win32csr/alias.c b/reactos/subsystems/win32/csrss/win32csr/alias.c index 8b3254bc66b..79d927fdcd9 100644 --- a/reactos/subsystems/win32/csrss/win32csr/alias.c +++ b/reactos/subsystems/win32/csrss/win32csr/alias.c @@ -312,8 +312,7 @@ CSR_API(CsrAddConsoleAlias) if (lpExeName == NULL || lpSource == NULL) { - Request->Status = STATUS_INVALID_PARAMETER; - return Request->Status; + return STATUS_INVALID_PARAMETER; } Request->Status = ConioConsoleFromProcessData(ProcessData, &Console); @@ -328,9 +327,8 @@ CSR_API(CsrAddConsoleAlias) Header = IntCreateAliasHeader(lpExeName); if (!Header) { - Request->Status = STATUS_INSUFFICIENT_RESOURCES; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_INSUFFICIENT_RESOURCES; } IntInsertAliasHeader(&Console->Aliases, Header); } @@ -355,15 +353,13 @@ CSR_API(CsrAddConsoleAlias) if (!Entry) { - Request->Status = STATUS_INSUFFICIENT_RESOURCES; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_INSUFFICIENT_RESOURCES; } IntInsertAliasEntry(Header, Entry); - Request->Status = STATUS_SUCCESS; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_SUCCESS; } CSR_API(CsrGetConsoleAlias) @@ -387,8 +383,7 @@ CSR_API(CsrGetConsoleAlias) if (Request->Data.GetConsoleAlias.ExeLength == 0 || lpTarget == NULL || Request->Data.GetConsoleAlias.TargetBufferLength == 0 || Request->Data.GetConsoleAlias.SourceLength == 0) { - Request->Status = STATUS_INVALID_PARAMETER; - return Request->Status; + return STATUS_INVALID_PARAMETER; } Request->Status = ConioConsoleFromProcessData(ProcessData, &Console); @@ -400,39 +395,34 @@ CSR_API(CsrGetConsoleAlias) Header = IntFindAliasHeader(Console->Aliases, lpExeName); if (!Header) { - Request->Status = STATUS_INVALID_PARAMETER; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_INVALID_PARAMETER; } Entry = IntGetAliasEntry(Header, lpSource); if (!Entry) { - Request->Status = STATUS_INVALID_PARAMETER; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_INVALID_PARAMETER; } Length = (wcslen(Entry->lpTarget)+1) * sizeof(WCHAR); if (Length > Request->Data.GetConsoleAlias.TargetBufferLength) { - Request->Status = STATUS_BUFFER_TOO_SMALL; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_BUFFER_TOO_SMALL; } if (!ValidateBuffer(ProcessData, lpTarget, Request->Data.GetConsoleAlias.TargetBufferLength)) { - Request->Status = STATUS_ACCESS_VIOLATION; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_ACCESS_VIOLATION; } wcscpy(lpTarget, Entry->lpTarget); Request->Data.GetConsoleAlias.BytesWritten = Length; - Request->Status = STATUS_SUCCESS; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_SUCCESS; } CSR_API(CsrGetAllConsoleAliases) @@ -443,8 +433,7 @@ CSR_API(CsrGetAllConsoleAliases) if (Request->Data.GetAllConsoleAlias.lpExeName == NULL) { - Request->Status = STATUS_INVALID_PARAMETER; - return Request->Status; + return STATUS_INVALID_PARAMETER; } Request->Status = ConioConsoleFromProcessData(ProcessData, &Console); @@ -456,25 +445,22 @@ CSR_API(CsrGetAllConsoleAliases) Header = IntFindAliasHeader(Console->Aliases, Request->Data.GetAllConsoleAlias.lpExeName); if (!Header) { - Request->Status = STATUS_INVALID_PARAMETER; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_INVALID_PARAMETER; } if (IntGetAllConsoleAliasesLength(Header) > Request->Data.GetAllConsoleAlias.AliasBufferLength) { - Request->Status = STATUS_BUFFER_OVERFLOW; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_BUFFER_OVERFLOW; } if (!ValidateBuffer(ProcessData, Request->Data.GetAllConsoleAlias.AliasBuffer, Request->Data.GetAllConsoleAlias.AliasBufferLength)) { - Request->Status = STATUS_ACCESS_VIOLATION; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_ACCESS_VIOLATION; } BytesWritten = IntGetAllConsoleAliases(Header, @@ -482,9 +468,8 @@ CSR_API(CsrGetAllConsoleAliases) Request->Data.GetAllConsoleAlias.AliasBufferLength); Request->Data.GetAllConsoleAlias.BytesWritten = BytesWritten; - Request->Status = STATUS_SUCCESS; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_SUCCESS; } CSR_API(CsrGetAllConsoleAliasesLength) @@ -495,8 +480,7 @@ CSR_API(CsrGetAllConsoleAliasesLength) if (Request->Data.GetAllConsoleAliasesLength.lpExeName == NULL) { - Request->Status = STATUS_INVALID_PARAMETER; - return Request->Status; + return STATUS_INVALID_PARAMETER; } Request->Status = ConioConsoleFromProcessData(ProcessData, &Console); @@ -508,17 +492,14 @@ CSR_API(CsrGetAllConsoleAliasesLength) Header = IntFindAliasHeader(Console->Aliases, Request->Data.GetAllConsoleAliasesLength.lpExeName); if (!Header) { - Request->Status = STATUS_INVALID_PARAMETER; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_INVALID_PARAMETER; } Length = IntGetAllConsoleAliasesLength(Header); Request->Data.GetAllConsoleAliasesLength.Length = Length; - Request->Status = STATUS_SUCCESS; ConioUnlockConsole(Console); - return Request->Status; - + return STATUS_SUCCESS; } CSR_API(CsrGetConsoleAliasesExes) @@ -539,25 +520,22 @@ CSR_API(CsrGetConsoleAliasesExes) if (ExesLength > Request->Data.GetConsoleAliasesExes.Length) { - Request->Status = STATUS_BUFFER_OVERFLOW; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_BUFFER_OVERFLOW; } if (Request->Data.GetConsoleAliasesExes.ExeNames == NULL) { - Request->Status = STATUS_INVALID_PARAMETER; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_INVALID_PARAMETER; } if (!ValidateBuffer(ProcessData, Request->Data.GetConsoleAliasesExes.ExeNames, Request->Data.GetConsoleAliasesExes.Length)) { - Request->Status = STATUS_ACCESS_VIOLATION; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_ACCESS_VIOLATION; } BytesWritten = IntGetConsoleAliasesExes(Console->Aliases, @@ -565,9 +543,8 @@ CSR_API(CsrGetConsoleAliasesExes) Request->Data.GetConsoleAliasesExes.Length); Request->Data.GetConsoleAliasesExes.BytesWritten = BytesWritten; - Request->Status = STATUS_SUCCESS; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_SUCCESS; } CSR_API(CsrGetConsoleAliasesExesLength) diff --git a/reactos/subsystems/win32/csrss/win32csr/appswitch.c b/reactos/subsystems/win32/csrss/win32csr/appswitch.c new file mode 100644 index 00000000000..e978242cca4 --- /dev/null +++ b/reactos/subsystems/win32/csrss/win32csr/appswitch.c @@ -0,0 +1,266 @@ + +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS system libraries + * FILE: subsys/csrss/win32csr/appswitch.c + * PURPOSE: app switching functionality + * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org) + */ + +#include "w32csr.h" +//#define NDEBUG +#include + +typedef struct APPSWITCH_ITEM +{ + HWND hwndDlg; + DWORD zPos; + HICON hIcon; + BOOL bFocus; + struct APPSWITCH_ITEM * Next; + WCHAR szText[1]; +}APPSWITCH_ITEM, *PAPPSWITCH_ITEM; + +static PAPPSWITCH_ITEM pRoot = NULL; +static DWORD NumOfWindows = 0; +static HWND hAppWindowDlg = NULL; +static HHOOK hhk = NULL; + +BOOL +CALLBACK +EnumWindowEnumProc( + HWND hwnd, + LPARAM lParam +) +{ + PAPPSWITCH_ITEM pItem; + UINT Length; + HICON hIcon; + PAPPSWITCH_ITEM pCurItem; + DWORD dwPid; + HANDLE hProcess; + WCHAR szFileName[MAX_PATH] = {0}; + + /* check if the enumerated window is visible */ + if (!IsWindowVisible(hwnd)) + return TRUE; + /* get window icon */ + hIcon = (HICON)SendMessage(hwnd, WM_GETICON, ICON_BIG, 0); + if (!hIcon) + { + GetWindowThreadProcessId(hwnd, &dwPid); + hProcess = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ, FALSE, dwPid); + if (hProcess) + { + if (GetModuleFileNameExW(hProcess, NULL, szFileName, MAX_PATH)) + { + szFileName[MAX_PATH-1] = L'\0'; + ExtractIconExW(szFileName, 0, &hIcon, NULL, 1); + } + } + } + else + { + /* icons from WM_GETICON need to be copied */ + hIcon = CopyIcon(hIcon); + } + /* get the text length */ + Length = SendMessageW(hwnd, WM_GETTEXTLENGTH, 0, 0); + /* allocate item structure for it */ + pItem = (PAPPSWITCH_ITEM)HeapAlloc(Win32CsrApiHeap, HEAP_ZERO_MEMORY, sizeof(APPSWITCH_ITEM) + Length * sizeof(WCHAR)); + if (!pItem) + return TRUE; + if (Length) + { + /* retrieve the window text when available */ + SendMessageW(hwnd, WM_GETTEXT, Length+1, (LPARAM)pItem->szText); + } + /* copy the window icon */ + pItem->hIcon = hIcon; + /* store window handle */ + pItem->hwndDlg = hwnd; + /* is the window the active window */ + if (GetActiveWindow() == hwnd) + pItem->bFocus = TRUE; + + if (!pRoot) + { + /* first item */ + pRoot = pItem; + return TRUE; + } + + /* enumerate the last item */ + pCurItem = pRoot; + while(pCurItem->Next) + pCurItem = pCurItem->Next; + + /* insert it into the list */ + pCurItem->Next = pItem; + NumOfWindows++; + return TRUE; +} + +VOID +EnumerateAppWindows(HDESK hDesk, HWND hwndDlg) +{ + /* initialize defaults */ + pRoot = NULL; + NumOfWindows = 0; + hAppWindowDlg = hwndDlg; + /* enumerate all windows */ + EnumDesktopWindows(hDesk, EnumWindowEnumProc, (LPARAM)NULL); + if (NumOfWindows > 7) + { + /* FIXME resize window */ + } +} + +VOID +MarkNextEntryAsActive() +{ + PAPPSWITCH_ITEM pItem; + + pItem = pRoot; + if (!pRoot) + return; + + while(pItem) + { + if (pItem->bFocus) + { + pItem->bFocus = FALSE; + if (pItem->Next) + pItem->Next->bFocus = TRUE; + else + pRoot->bFocus = TRUE; + } + pItem = pItem->Next; + } + + InvalidateRgn(hAppWindowDlg, NULL, TRUE); +} + + +LRESULT +CALLBACK +KeyboardHookProc( + int nCode, + WPARAM wParam, + LPARAM lParam +) +{ + PKBDLLHOOKSTRUCT hk = (PKBDLLHOOKSTRUCT) lParam; + + if (wParam == WM_SYSKEYUP) + { + /* is tab key pressed */ + if (hk->vkCode == VK_TAB) + { + if (hAppWindowDlg == NULL) + { + /* FIXME + * launch window + */ + DPRINT1("launch alt-tab window\n"); + } + else + { + MarkNextEntryAsActive(); + } + } + } + return CallNextHookEx(hhk, nCode, wParam, lParam); +} + +VOID +PaintAppWindows(HWND hwndDlg, HDC hDc) +{ + DWORD dwIndex, X, Y; + PAPPSWITCH_ITEM pCurItem; + RECT Rect; + DWORD XSize, YSize, XMax; + HBRUSH hBrush; + + X = 10; + Y = 10; + XSize = GetSystemMetrics(SM_CXICON); + YSize = GetSystemMetrics(SM_CYICON); + XMax = (XSize+(XSize/2)) * 7 + X; + pCurItem = pRoot; + + for (dwIndex = 0; dwIndex < NumOfWindows; dwIndex++) + { + if (X >= XMax) + { + X = 10; + Y += YSize + (YSize/2); + } + if (pCurItem->bFocus) + { + hBrush = CreateSolidBrush(RGB(30, 30, 255)); + SetRect(&Rect, X-5, Y-5, X + XSize + 5, Y + YSize + 5); + FillRect(hDc, &Rect, hBrush); + DeleteObject((HGDIOBJ)hBrush); + SendDlgItemMessageW(hwndDlg, IDC_STATIC_CUR_APP, WM_SETTEXT, 0, (LPARAM)pCurItem->szText); + } + + DrawIcon(hDc, X, Y, pCurItem->hIcon); + pCurItem = pCurItem->Next; + X += XSize +(XSize/2); + } +} +VOID +DestroyAppWindows() +{ + PAPPSWITCH_ITEM pCurItem, pNextItem; + + pCurItem = pRoot; + while(pCurItem) + { + pNextItem = pCurItem->Next; + DestroyIcon(pCurItem->hIcon); + HeapFree(Win32CsrApiHeap, 0, pCurItem); + pCurItem = pNextItem; + } + pRoot = NULL; + hAppWindowDlg = NULL; + NumOfWindows = 0; +} + +INT_PTR +CALLBACK +SwitchWindowDlgProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam) +{ + PAINTSTRUCT Paint; + HDESK hInput; + + switch (message) + { + case WM_INITDIALOG: + hInput = OpenInputDesktop(0,0, GENERIC_ALL); + if (hInput) + { + EnumerateAppWindows(hInput, hwndDlg); + CloseDesktop(hInput); + } + return TRUE; + case WM_PAINT: + BeginPaint(hwndDlg, &Paint); + PaintAppWindows(hwndDlg, Paint.hdc); + EndPaint(hwndDlg, &Paint); + break; + case WM_DESTROY: + DestroyAppWindows(); + break; + } + return FALSE; +} + +VOID +STDCALL +InitializeAppSwitchHook() +{ + hhk = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHookProc, NULL, 0); + DPRINT("InitializeAppSwitchHook hhk %p\n", hhk); +} diff --git a/reactos/subsystems/win32/csrss/win32csr/conio.c b/reactos/subsystems/win32/csrss/win32csr/conio.c index a3552543889..19223ad0c20 100644 --- a/reactos/subsystems/win32/csrss/win32csr/conio.c +++ b/reactos/subsystems/win32/csrss/win32csr/conio.c @@ -245,22 +245,12 @@ CSR_API(CsrAllocConsole) Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - if (ProcessData == NULL) - { - DPRINT1("No process data\n"); - return Request->Status = STATUS_INVALID_PARAMETER; - } - if (ProcessData->Console) { DPRINT1("Process already has a console\n"); - Request->Status = STATUS_INVALID_PARAMETER; return STATUS_INVALID_PARAMETER; } - /* Assume success */ - Request->Status = STATUS_SUCCESS; - /* If we don't need a console, then get out of here */ if (!Request->Data.AllocConsoleRequest.ConsoleNeeded) { @@ -278,7 +268,6 @@ CSR_API(CsrAllocConsole) if (NULL == Console) { DPRINT1("Not enough memory for console\n"); - Request->Status = STATUS_NO_MEMORY; return STATUS_NO_MEMORY; } /* initialize list head */ @@ -286,12 +275,12 @@ CSR_API(CsrAllocConsole) /* insert process data required for GUI initialization */ InsertHeadList(&Console->ProcessList, &ProcessData->ProcessEntry); /* Initialize the Console */ - Request->Status = CsrInitConsole(Console); - if (!NT_SUCCESS(Request->Status)) + Status = CsrInitConsole(Console); + if (!NT_SUCCESS(Status)) { DPRINT1("Console init failed\n"); HeapFree(Win32CsrApiHeap, 0, Console); - return Request->Status; + return Status; } } else @@ -322,7 +311,7 @@ CSR_API(CsrAllocConsole) DPRINT1("Failed to insert object\n"); ConioDeleteConsole((Object_t *) Console); ProcessData->Console = 0; - return Request->Status = Status; + return Status; } Status = Win32CsrInsertObject(ProcessData, @@ -337,7 +326,7 @@ CSR_API(CsrAllocConsole) Win32CsrReleaseObject(ProcessData, Request->Data.AllocConsoleRequest.InputHandle); ProcessData->Console = 0; - return Request->Status = Status; + return Status; } } @@ -360,7 +349,7 @@ CSR_API(CsrAllocConsole) Request->Data.AllocConsoleRequest.InputHandle); } ProcessData->Console = 0; - return Request->Status = Status; + return Status; } /* Set the Ctrl Dispatcher */ @@ -384,9 +373,9 @@ CSR_API(CsrFreeConsole) Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - if (ProcessData == NULL || ProcessData->Console == NULL) + if (ProcessData->Console == NULL) { - return Request->Status = STATUS_INVALID_PARAMETER; + return STATUS_INVALID_PARAMETER; } Console = ProcessData->Console; @@ -576,7 +565,7 @@ CSR_API(CsrReadConsole) &Console, GENERIC_READ); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Request->Data.ReadConsoleRequest.EventHandle = ProcessData->ConsoleEvent; for (i = 0; i < nNumberOfCharsToRead && Console->InputEvents.Flink != &Console->InputEvents; i++) @@ -619,7 +608,6 @@ CSR_API(CsrReadConsole) ConioUnlockConsole(Console); HeapFree(Win32CsrApiHeap, 0, Input); Request->Data.ReadConsoleRequest.NrCharactersRead = 0; - Request->Status = STATUS_NOTIFY_CLEANUP; return STATUS_NOTIFY_CLEANUP; } @@ -653,27 +641,27 @@ CSR_API(CsrReadConsole) Request->Data.ReadConsoleRequest.NrCharactersRead = i; if (0 == i) { - Request->Status = STATUS_PENDING; /* we didn't read anything */ + Status = STATUS_PENDING; /* we didn't read anything */ } else if (0 != (Console->Mode & ENABLE_LINE_INPUT)) { if (0 == Console->WaitingLines || (Request->Data.ReadConsoleRequest.Unicode ? (L'\n' != UnicodeBuffer[i - 1]) : ('\n' != Buffer[i - 1]))) { - Request->Status = STATUS_PENDING; /* line buffered, didn't get a complete line */ + Status = STATUS_PENDING; /* line buffered, didn't get a complete line */ } else { Console->WaitingLines--; - Request->Status = STATUS_SUCCESS; /* line buffered, did get a complete line */ + Status = STATUS_SUCCESS; /* line buffered, did get a complete line */ } } else { - Request->Status = STATUS_SUCCESS; /* not line buffered, did read something */ + Status = STATUS_SUCCESS; /* not line buffered, did read something */ } - if (Request->Status == STATUS_PENDING) + if (Status == STATUS_PENDING) { Console->EchoCount = nNumberOfCharsToRead - i; } @@ -690,7 +678,7 @@ CSR_API(CsrReadConsole) Request->Header.u1.s1.DataLength = Request->Header.u1.s1.TotalLength - sizeof(PORT_MESSAGE); } - return Request->Status; + return Status; } BOOLEAN __inline ConioGetIntersection( @@ -846,7 +834,7 @@ CSR_API(CsrWriteConsole) DPRINT1("Invalid request size\n"); Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - return Request->Status = STATUS_INVALID_PARAMETER; + return STATUS_INVALID_PARAMETER; } Status = ConioConsoleFromProcessData(ProcessData, &Console); @@ -855,7 +843,7 @@ CSR_API(CsrWriteConsole) if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } if(Request->Data.WriteConsoleRequest.Unicode) @@ -887,8 +875,8 @@ CSR_API(CsrWriteConsole) Status = ConioLockScreenBuffer(ProcessData, Request->Data.WriteConsoleRequest.ConsoleHandle, &Buff, GENERIC_WRITE); if (NT_SUCCESS(Status)) { - Request->Status = ConioWriteConsole(Console, Buff, Buffer, - Request->Data.WriteConsoleRequest.NrCharactersToWrite, TRUE); + Status = ConioWriteConsole(Console, Buff, Buffer, + Request->Data.WriteConsoleRequest.NrCharactersToWrite, TRUE); if (NT_SUCCESS(Status)) { Written = Request->Data.WriteConsoleRequest.NrCharactersToWrite; @@ -904,7 +892,7 @@ CSR_API(CsrWriteConsole) Request->Data.WriteConsoleRequest.NrCharactersWritten = Written; - return Request->Status = Status; + return Status; } VOID STDCALL @@ -1292,6 +1280,7 @@ ConioProcessKey(MSG *msg, PCSRSS_CONSOLE Console, BOOL TextMode) CSR_API(CsrGetScreenBufferInfo) { NTSTATUS Status; + PCSRSS_CONSOLE Console; PCSRSS_SCREEN_BUFFER Buff; PCONSOLE_SCREEN_BUFFER_INFO pInfo; @@ -1300,10 +1289,16 @@ CSR_API(CsrGetScreenBufferInfo) Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); + Status = ConioConsoleFromProcessData(ProcessData, &Console); + if (! NT_SUCCESS(Status)) + { + return Status; + } Status = ConioLockScreenBuffer(ProcessData, Request->Data.ScreenBufferInfoRequest.ConsoleHandle, &Buff, GENERIC_READ); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + ConioUnlockConsole(Console); + return Status; } pInfo = &Request->Data.ScreenBufferInfoRequest.Info; pInfo->dwSize.X = Buff->MaxX; @@ -1311,17 +1306,16 @@ CSR_API(CsrGetScreenBufferInfo) pInfo->dwCursorPosition.X = Buff->CurrentX; pInfo->dwCursorPosition.Y = Buff->CurrentY; pInfo->wAttributes = Buff->DefaultAttrib; - pInfo->srWindow.Left = 0; - pInfo->srWindow.Right = Buff->MaxX - 1; - pInfo->srWindow.Top = 0; - pInfo->srWindow.Bottom = Buff->MaxY - 1; + pInfo->srWindow.Left = Buff->ShowX; + pInfo->srWindow.Right = Buff->ShowX + Console->Size.X - 1; + pInfo->srWindow.Top = Buff->ShowY; + pInfo->srWindow.Bottom = Buff->ShowY + Console->Size.Y - 1; pInfo->dwMaximumWindowSize.X = Buff->MaxX; pInfo->dwMaximumWindowSize.Y = Buff->MaxY; ConioUnlockScreenBuffer(Buff); + ConioUnlockConsole(Console); - Request->Status = STATUS_SUCCESS; - - return Request->Status; + return STATUS_SUCCESS; } CSR_API(CsrSetCursor) @@ -1337,7 +1331,7 @@ CSR_API(CsrSetCursor) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); @@ -1347,7 +1341,7 @@ CSR_API(CsrSetCursor) if (! NT_SUCCESS(Status)) { ConioUnlockConsole(Console); - return Request->Status = Status; + return Status; } NewCursorX = Request->Data.SetCursorRequest.Position.X; @@ -1357,7 +1351,7 @@ CSR_API(CsrSetCursor) { ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); - return Request->Status = STATUS_INVALID_PARAMETER; + return STATUS_INVALID_PARAMETER; } OldCursorX = Buff->CurrentX; OldCursorY = Buff->CurrentY; @@ -1369,14 +1363,14 @@ CSR_API(CsrSetCursor) { ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); - return Request->Status = STATUS_UNSUCCESSFUL; + return STATUS_UNSUCCESSFUL; } } ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } static VOID FASTCALL @@ -1427,7 +1421,7 @@ CSR_API(CsrWriteConsoleOutputChar) DPRINT1("Invalid request size\n"); Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - return Request->Status = STATUS_INVALID_PARAMETER; + return STATUS_INVALID_PARAMETER; } Status = ConioConsoleFromProcessData(ProcessData, &Console); @@ -1506,7 +1500,7 @@ CSR_API(CsrWriteConsoleOutputChar) ConioUnlockConsole(Console); } Request->Data.WriteConsoleOutputCharRequest.NrCharactersWritten = Written; - return Request->Status = Status; + return Status; } CSR_API(CsrFillOutputChar) @@ -1527,14 +1521,14 @@ CSR_API(CsrFillOutputChar) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Status = ConioLockScreenBuffer(ProcessData, Request->Data.FillOutputRequest.ConsoleHandle, &Buff, GENERIC_WRITE); if (! NT_SUCCESS(Status)) { ConioUnlockConsole(Console); - return Request->Status = Status; + return Status; } X = Request->Data.FillOutputRequest.Position.X; @@ -1572,7 +1566,7 @@ CSR_API(CsrFillOutputChar) ConioUnlockConsole(Console); Length = Request->Data.FillOutputRequest.Length; Request->Data.FillOutputRequest.NrCharactersWritten = Length; - return Request->Status; + return STATUS_SUCCESS; } CSR_API(CsrReadInputEvent) @@ -1592,7 +1586,7 @@ CSR_API(CsrReadInputEvent) Status = ConioLockConsole(ProcessData, Request->Data.ReadInputRequest.ConsoleHandle, &Console, GENERIC_READ); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } /* only get input if there is any */ @@ -1651,7 +1645,7 @@ CSR_API(CsrReadInputEvent) ConioUnlockConsole(Console); - return Request->Status = Status; + return Status; } CSR_API(CsrWriteConsoleOutputAttrib) @@ -1673,7 +1667,7 @@ CSR_API(CsrWriteConsoleOutputAttrib) DPRINT1("Invalid request size\n"); Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - return Request->Status = STATUS_INVALID_PARAMETER; + return STATUS_INVALID_PARAMETER; } Status = ConioConsoleFromProcessData(ProcessData, &Console); @@ -1681,7 +1675,7 @@ CSR_API(CsrWriteConsoleOutputAttrib) Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Status = ConioLockScreenBuffer(ProcessData, @@ -1691,7 +1685,7 @@ CSR_API(CsrWriteConsoleOutputAttrib) if (! NT_SUCCESS(Status)) { ConioUnlockConsole(Console); - return Request->Status = Status; + return Status; } X = Request->Data.WriteConsoleOutputAttribRequest.Coord.X; @@ -1728,7 +1722,7 @@ CSR_API(CsrWriteConsoleOutputAttrib) ConioUnlockScreenBuffer(Buff); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } CSR_API(CsrFillOutputAttrib) @@ -1746,7 +1740,7 @@ CSR_API(CsrFillOutputAttrib) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); @@ -1755,7 +1749,7 @@ CSR_API(CsrFillOutputAttrib) if (! NT_SUCCESS(Status)) { ConioUnlockConsole(Console); - return Request->Status = Status; + return Status; } X = Request->Data.FillOutputAttribRequest.Coord.X; @@ -1788,7 +1782,7 @@ CSR_API(CsrFillOutputAttrib) ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } @@ -1805,13 +1799,13 @@ CSR_API(CsrGetCursorInfo) Status = ConioLockScreenBuffer(ProcessData, Request->Data.GetCursorInfoRequest.ConsoleHandle, &Buff, GENERIC_READ); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Request->Data.GetCursorInfoRequest.Info.bVisible = Buff->CursorInfo.bVisible; Request->Data.GetCursorInfoRequest.Info.dwSize = Buff->CursorInfo.dwSize; ConioUnlockScreenBuffer(Buff); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } CSR_API(CsrSetCursorInfo) @@ -1830,14 +1824,14 @@ CSR_API(CsrSetCursorInfo) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Status = ConioLockScreenBuffer(ProcessData, Request->Data.SetCursorInfoRequest.ConsoleHandle, &Buff, GENERIC_WRITE); if (! NT_SUCCESS(Status)) { ConioUnlockConsole(Console); - return Request->Status = Status; + return Status; } Size = Request->Data.SetCursorInfoRequest.Info.dwSize; @@ -1861,14 +1855,14 @@ CSR_API(CsrSetCursorInfo) { ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); - return Request->Status = STATUS_UNSUCCESSFUL; + return STATUS_UNSUCCESSFUL; } } ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } CSR_API(CsrSetTextAttrib) @@ -1882,14 +1876,14 @@ CSR_API(CsrSetTextAttrib) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Status = ConioLockScreenBuffer(ProcessData, Request->Data.SetCursorRequest.ConsoleHandle, &Buff, GENERIC_WRITE); if (! NT_SUCCESS(Status)) { ConioUnlockConsole(Console); - return Request->Status = Status; + return Status; } Buff->DefaultAttrib = Request->Data.SetAttribRequest.Attrib; @@ -1899,14 +1893,14 @@ CSR_API(CsrSetTextAttrib) { ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); - return Request->Status = STATUS_UNSUCCESSFUL; + return STATUS_UNSUCCESSFUL; } } ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } CSR_API(CsrSetConsoleMode) @@ -1924,7 +1918,7 @@ CSR_API(CsrSetConsoleMode) (Object_t **) &Console, GENERIC_WRITE); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Buff = (PCSRSS_SCREEN_BUFFER)Console; @@ -1943,7 +1937,7 @@ CSR_API(CsrSetConsoleMode) Win32CsrReleaseObjectByPointer((Object_t *)Console); - return Request->Status = Status; + return Status; } CSR_API(CsrGetConsoleMode) @@ -1960,9 +1954,9 @@ CSR_API(CsrGetConsoleMode) (Object_t **) &Console, GENERIC_READ); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } - Request->Status = STATUS_SUCCESS; + Status = STATUS_SUCCESS; Buff = (PCSRSS_SCREEN_BUFFER) Console; if (CONIO_CONSOLE_MAGIC == Console->Header.Type) { @@ -1974,11 +1968,11 @@ CSR_API(CsrGetConsoleMode) } else { - Request->Status = STATUS_INVALID_HANDLE; + Status = STATUS_INVALID_HANDLE; } Win32CsrReleaseObjectByPointer((Object_t *)Console); - return Request->Status; + return Status; } CSR_API(CsrCreateScreenBuffer) @@ -1989,15 +1983,10 @@ CSR_API(CsrCreateScreenBuffer) DPRINT("CsrCreateScreenBuffer\n"); - if (ProcessData == NULL) - { - return Request->Status = STATUS_INVALID_PARAMETER; - } - Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); @@ -2031,13 +2020,9 @@ CSR_API(CsrCreateScreenBuffer) } Status = CsrInitConsoleScreenBuffer(Console, Buff); - if(! NT_SUCCESS(Status)) + if(NT_SUCCESS(Status)) { - Request->Status = Status; - } - else - { - Request->Status = Win32CsrInsertObject(ProcessData, + Status = Win32CsrInsertObject(ProcessData, &Request->Data.CreateScreenBufferRequest.OutputHandle, &Buff->Header, Request->Data.CreateScreenBufferRequest.Access, @@ -2046,11 +2031,11 @@ CSR_API(CsrCreateScreenBuffer) } else { - Request->Status = STATUS_INSUFFICIENT_RESOURCES; + Status = STATUS_INSUFFICIENT_RESOURCES; } ConioUnlockConsole(Console); - return Request->Status; + return Status; } CSR_API(CsrSetScreenBuffer) @@ -2064,7 +2049,7 @@ CSR_API(CsrSetScreenBuffer) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); @@ -2074,14 +2059,14 @@ CSR_API(CsrSetScreenBuffer) if (! NT_SUCCESS(Status)) { ConioUnlockConsole(Console); - return Request->Status = Status; + return Status; } if (Buff == Console->ActiveBuffer) { ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } /* drop reference to old buffer, maybe delete */ @@ -2099,7 +2084,7 @@ CSR_API(CsrSetScreenBuffer) ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } CSR_API(CsrSetTitle) @@ -2117,17 +2102,13 @@ CSR_API(CsrSetTitle) DPRINT1("Invalid request size\n"); Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - return Request->Status = STATUS_INVALID_PARAMETER; + return STATUS_INVALID_PARAMETER; } Status = ConioConsoleFromProcessData(ProcessData, &Console); Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - if(! NT_SUCCESS(Status)) - { - Request->Status = Status; - } - else + if(NT_SUCCESS(Status)) { Buffer = RtlAllocateHeap(RtlGetProcessHeap(), 0, Request->Data.SetTitleRequest.Length); if (Buffer) @@ -2139,21 +2120,21 @@ CSR_API(CsrSetTitle) memcpy(Console->Title.Buffer, Request->Data.SetTitleRequest.Title, Console->Title.Length); if (! ConioChangeTitle(Console)) { - Request->Status = STATUS_UNSUCCESSFUL; + Status = STATUS_UNSUCCESSFUL; } else { - Request->Status = STATUS_SUCCESS; + Status = STATUS_SUCCESS; } } else { - Request->Status = STATUS_NO_MEMORY; + Status = STATUS_NO_MEMORY; } ConioUnlockConsole(Console); } - return Request->Status; + return Status; } CSR_API(CsrGetTitle) @@ -2170,7 +2151,7 @@ CSR_API(CsrGetTitle) if (! NT_SUCCESS(Status)) { DPRINT1("Can't get console\n"); - return Request->Status = Status; + return Status; } /* Copy title of the console to the user title buffer */ @@ -2187,9 +2168,7 @@ CSR_API(CsrGetTitle) Request->Header.u1.s1.TotalLength = Length; Request->Header.u1.s1.DataLength = Length - sizeof(PORT_MESSAGE); } - Request->Status = STATUS_SUCCESS; - - return Request->Status; + return STATUS_SUCCESS; } CSR_API(CsrWriteConsoleOutput) @@ -2212,7 +2191,7 @@ CSR_API(CsrWriteConsoleOutput) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); @@ -2224,7 +2203,7 @@ CSR_API(CsrWriteConsoleOutput) if (! NT_SUCCESS(Status)) { ConioUnlockConsole(Console); - return Request->Status = Status; + return Status; } BufferSize = Request->Data.WriteConsoleOutputRequest.BufferSize; @@ -2237,7 +2216,7 @@ CSR_API(CsrWriteConsoleOutput) { ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); - return Request->Status = STATUS_ACCESS_VIOLATION; + return STATUS_ACCESS_VIOLATION; } WriteRegion.left = Request->Data.WriteConsoleOutputRequest.WriteRegion.Left; WriteRegion.top = Request->Data.WriteConsoleOutputRequest.WriteRegion.Top; @@ -2258,7 +2237,7 @@ CSR_API(CsrWriteConsoleOutput) /* It is okay to have a WriteRegion completely outside the screen buffer. No data is written then. */ - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } for (i = 0, Y = WriteRegion.top; Y <= WriteRegion.bottom; i++, Y++) @@ -2292,7 +2271,7 @@ CSR_API(CsrWriteConsoleOutput) Request->Data.WriteConsoleOutputRequest.WriteRegion.Left = WriteRegion.left; Request->Data.WriteConsoleOutputRequest.WriteRegion.Top = WriteRegion.top; - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } CSR_API(CsrFlushInputBuffer) @@ -2312,7 +2291,7 @@ CSR_API(CsrFlushInputBuffer) GENERIC_WRITE); if(! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } /* Discard all entries in the input event queue */ @@ -2328,7 +2307,7 @@ CSR_API(CsrFlushInputBuffer) ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } CSR_API(CsrScrollConsoleScreenBuffer) @@ -2358,7 +2337,7 @@ CSR_API(CsrScrollConsoleScreenBuffer) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); @@ -2367,7 +2346,7 @@ CSR_API(CsrScrollConsoleScreenBuffer) if (! NT_SUCCESS(Status)) { ConioUnlockConsole(Console); - return Request->Status = Status; + return Status; } ScrollRectangle.left = Request->Data.ScrollConsoleScreenBufferRequest.ScrollRectangle.Left; @@ -2381,7 +2360,7 @@ CSR_API(CsrScrollConsoleScreenBuffer) { ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } /* If the source was clipped on the left or top, adjust the destination accordingly */ @@ -2404,7 +2383,7 @@ CSR_API(CsrScrollConsoleScreenBuffer) { ConioUnlockConsole(Console); ConioUnlockScreenBuffer(Buff); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } } else @@ -2438,7 +2417,7 @@ CSR_API(CsrScrollConsoleScreenBuffer) ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } CSR_API(CsrReadConsoleOutputChar) @@ -2463,14 +2442,14 @@ CSR_API(CsrReadConsoleOutputChar) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Status = ConioLockScreenBuffer(ProcessData, Request->Data.ReadConsoleOutputCharRequest.ConsoleHandle, &Buff, GENERIC_READ); if (! NT_SUCCESS(Status)) { ConioUnlockConsole(Console); - return Request->Status = Status; + return Status; } Xpos = Request->Data.ReadConsoleOutputCharRequest.ReadCoord.X; @@ -2503,7 +2482,6 @@ CSR_API(CsrReadConsoleOutputChar) } *ReadBuffer = 0; - Request->Status = STATUS_SUCCESS; Request->Data.ReadConsoleOutputCharRequest.EndCoord.X = Xpos; Request->Data.ReadConsoleOutputCharRequest.EndCoord.Y = (Ypos - Buff->VirtualY + Buff->MaxY) % Buff->MaxY; @@ -2517,7 +2495,7 @@ CSR_API(CsrReadConsoleOutputChar) Request->Header.u1.s1.DataLength = Request->Header.u1.s1.TotalLength - sizeof(PORT_MESSAGE); } - return Request->Status; + return STATUS_SUCCESS; } @@ -2539,7 +2517,7 @@ CSR_API(CsrReadConsoleOutputAttrib) Status = ConioLockScreenBuffer(ProcessData, Request->Data.ReadConsoleOutputAttribRequest.ConsoleHandle, &Buff, GENERIC_READ); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Xpos = Request->Data.ReadConsoleOutputAttribRequest.ReadCoord.X; @@ -2566,7 +2544,6 @@ CSR_API(CsrReadConsoleOutputAttrib) *ReadBuffer = 0; - Request->Status = STATUS_SUCCESS; Request->Data.ReadConsoleOutputAttribRequest.EndCoord.X = Xpos; Request->Data.ReadConsoleOutputAttribRequest.EndCoord.Y = (Ypos - Buff->VirtualY + Buff->MaxY) % Buff->MaxY; @@ -2580,7 +2557,7 @@ CSR_API(CsrReadConsoleOutputAttrib) Request->Header.u1.s1.DataLength = CurrentLength - sizeof(PORT_MESSAGE); } - return Request->Status; + return STATUS_SUCCESS; } @@ -2600,7 +2577,7 @@ CSR_API(CsrGetNumberOfConsoleInputEvents) Status = ConioLockConsole(ProcessData, Request->Data.GetNumInputEventsRequest.ConsoleHandle, &Console, GENERIC_READ); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } CurrentItem = Console->InputEvents.Flink; @@ -2619,10 +2596,9 @@ CSR_API(CsrGetNumberOfConsoleInputEvents) ConioUnlockConsole(Console); - Request->Status = STATUS_SUCCESS; Request->Data.GetNumInputEventsRequest.NumInputEvents = NumEvents; - return Request->Status; + return STATUS_SUCCESS; } @@ -2645,7 +2621,7 @@ CSR_API(CsrPeekConsoleInput) Status = ConioLockConsole(ProcessData, Request->Data.GetNumInputEventsRequest.ConsoleHandle, &Console, GENERIC_READ); if(! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } InputRecord = Request->Data.PeekConsoleInputRequest.InputRecord; @@ -2656,8 +2632,7 @@ CSR_API(CsrPeekConsoleInput) || (((ULONG_PTR)InputRecord + Size) > ((ULONG_PTR)ProcessData->CsrSectionViewBase + ProcessData->CsrSectionViewSize))) { ConioUnlockConsole(Console); - Request->Status = STATUS_ACCESS_VIOLATION; - return Request->Status ; + return STATUS_ACCESS_VIOLATION; } NumItems = 0; @@ -2691,10 +2666,9 @@ CSR_API(CsrPeekConsoleInput) ConioUnlockConsole(Console); - Request->Status = STATUS_SUCCESS; Request->Data.PeekConsoleInputRequest.Length = NumItems; - return Request->Status; + return STATUS_SUCCESS; } @@ -2724,7 +2698,7 @@ CSR_API(CsrReadConsoleOutput) Status = ConioLockScreenBuffer(ProcessData, Request->Data.ReadConsoleOutputRequest.ConsoleHandle, &Buff, GENERIC_READ); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } CharInfo = Request->Data.ReadConsoleOutputRequest.CharInfo; @@ -2744,8 +2718,7 @@ CSR_API(CsrReadConsoleOutput) || (((ULONG_PTR)CharInfo + Size) > ((ULONG_PTR)ProcessData->CsrSectionViewBase + ProcessData->CsrSectionViewSize))) { ConioUnlockScreenBuffer(Buff); - Request->Status = STATUS_ACCESS_VIOLATION; - return Request->Status ; + return STATUS_ACCESS_VIOLATION; } SizeY = min(BufferSize.Y - BufferCoord.Y, ConioRectHeight(&ReadRegion)); @@ -2757,8 +2730,7 @@ CSR_API(CsrReadConsoleOutput) if (! ConioGetIntersection(&ReadRegion, &ScreenRect, &ReadRegion)) { ConioUnlockScreenBuffer(Buff); - Request->Status = STATUS_SUCCESS; - return Request->Status; + return STATUS_SUCCESS; } for (i = 0, Y = ReadRegion.top; Y < ReadRegion.bottom; ++i, ++Y) @@ -2785,13 +2757,12 @@ CSR_API(CsrReadConsoleOutput) ConioUnlockScreenBuffer(Buff); - Request->Status = STATUS_SUCCESS; Request->Data.ReadConsoleOutputRequest.ReadRegion.Right = ReadRegion.left + SizeX - 1; Request->Data.ReadConsoleOutputRequest.ReadRegion.Bottom = ReadRegion.top + SizeY - 1; Request->Data.ReadConsoleOutputRequest.ReadRegion.Left = ReadRegion.left; Request->Data.ReadConsoleOutputRequest.ReadRegion.Top = ReadRegion.top; - return Request->Status; + return STATUS_SUCCESS; } @@ -2813,7 +2784,7 @@ CSR_API(CsrWriteConsoleInput) Status = ConioLockConsole(ProcessData, Request->Data.WriteConsoleInputRequest.ConsoleHandle, &Console, GENERIC_WRITE); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } InputRecord = Request->Data.WriteConsoleInputRequest.InputRecord; @@ -2824,8 +2795,7 @@ CSR_API(CsrWriteConsoleInput) || (((ULONG_PTR)InputRecord + Size) > ((ULONG_PTR)ProcessData->CsrSectionViewBase + ProcessData->CsrSectionViewSize))) { ConioUnlockConsole(Console); - Request->Status = STATUS_ACCESS_VIOLATION; - return Request->Status ; + return STATUS_ACCESS_VIOLATION; } for (i = 0; i < Length; i++) @@ -2834,8 +2804,7 @@ CSR_API(CsrWriteConsoleInput) if (NULL == Record) { ConioUnlockConsole(Console); - Request->Status = STATUS_INSUFFICIENT_RESOURCES; - return Request->Status; + return STATUS_INSUFFICIENT_RESOURCES; } Record->Echoed = FALSE; @@ -2851,10 +2820,9 @@ CSR_API(CsrWriteConsoleInput) ConioUnlockConsole(Console); - Request->Status = STATUS_SUCCESS; Request->Data.WriteConsoleInputRequest.Length = i; - return Request->Status; + return STATUS_SUCCESS; } /********************************************************************** @@ -2909,7 +2877,7 @@ CSR_API(CsrHardwareStateProperty) if (! NT_SUCCESS(Status)) { DPRINT1("Failed to get console handle in SetConsoleHardwareState\n"); - return Request->Status = Status; + return Status; } switch (Request->Data.ConsoleHardwareStateRequest.SetGet) @@ -2920,17 +2888,17 @@ CSR_API(CsrHardwareStateProperty) case CONSOLE_HARDWARE_STATE_SET: DPRINT("Setting console hardware state.\n"); - Request->Status = SetConsoleHardwareState(Console, Request->Data.ConsoleHardwareStateRequest.State); + Status = SetConsoleHardwareState(Console, Request->Data.ConsoleHardwareStateRequest.State); break; default: - Request->Status = STATUS_INVALID_PARAMETER_2; /* Client: (handle, [set_get], mode) */ + Status = STATUS_INVALID_PARAMETER_2; /* Client: (handle, [set_get], mode) */ break; } ConioUnlockConsole(Console); - return Request->Status; + return Status; } CSR_API(CsrGetConsoleWindow) @@ -2946,13 +2914,13 @@ CSR_API(CsrGetConsoleWindow) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Request->Data.GetConsoleWindowRequest.WindowHandle = Console->hWindow; ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } CSR_API(CsrSetConsoleIcon) @@ -2968,14 +2936,14 @@ CSR_API(CsrSetConsoleIcon) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } - Request->Status = (ConioChangeIcon(Console, Request->Data.SetConsoleIconRequest.WindowIcon) - ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL); + Status = (ConioChangeIcon(Console, Request->Data.SetConsoleIconRequest.WindowIcon) + ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL); ConioUnlockConsole(Console); - return Request->Status; + return Status; } CSR_API(CsrGetConsoleCodePage) @@ -2988,14 +2956,14 @@ CSR_API(CsrGetConsoleCodePage) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); Request->Data.GetConsoleCodePage.CodePage = Console->CodePage; ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } CSR_API(CsrSetConsoleCodePage) @@ -3008,7 +2976,7 @@ CSR_API(CsrSetConsoleCodePage) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); @@ -3017,10 +2985,10 @@ CSR_API(CsrSetConsoleCodePage) { Console->CodePage = Request->Data.SetConsoleCodePage.CodePage; ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } ConioUnlockConsole(Console); - return Request->Status = STATUS_UNSUCCESSFUL; + return STATUS_UNSUCCESSFUL; } CSR_API(CsrGetConsoleOutputCodePage) @@ -3033,14 +3001,14 @@ CSR_API(CsrGetConsoleOutputCodePage) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); Request->Data.GetConsoleOutputCodePage.CodePage = Console->OutputCodePage; ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } CSR_API(CsrSetConsoleOutputCodePage) @@ -3053,7 +3021,7 @@ CSR_API(CsrSetConsoleOutputCodePage) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); @@ -3062,10 +3030,10 @@ CSR_API(CsrSetConsoleOutputCodePage) { Console->OutputCodePage = Request->Data.SetConsoleOutputCodePage.CodePage; ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } ConioUnlockConsole(Console); - return Request->Status = STATUS_UNSUCCESSFUL; + return STATUS_UNSUCCESSFUL; } CSR_API(CsrGetProcessList) @@ -3090,7 +3058,7 @@ CSR_API(CsrGetProcessList) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } DPRINT1("Console_Api Ctrl-C\n"); @@ -3118,7 +3086,43 @@ CSR_API(CsrGetProcessList) Request->Header.u1.s1.TotalLength = Length; Request->Header.u1.s1.DataLength = Length - sizeof(PORT_MESSAGE); } - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; +} + +CSR_API(CsrGenerateCtrlEvent) +{ + PCSRSS_CONSOLE Console; + PCSRSS_PROCESS_DATA current; + PLIST_ENTRY current_entry; + DWORD Group; + NTSTATUS Status; + + Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); + Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); + + Status = ConioConsoleFromProcessData(ProcessData, &Console); + if (! NT_SUCCESS(Status)) + { + return Status; + } + + Group = Request->Data.GenerateCtrlEvent.ProcessGroup; + Status = STATUS_INVALID_PARAMETER; + for (current_entry = Console->ProcessList.Flink; + current_entry != &Console->ProcessList; + current_entry = current_entry->Flink) + { + current = CONTAINING_RECORD(current_entry, CSRSS_PROCESS_DATA, ProcessEntry); + if (Group == 0 || current->ProcessGroup == Group) + { + ConioConsoleCtrlEvent(Request->Data.GenerateCtrlEvent.Event, current); + Status = STATUS_SUCCESS; + } + } + + ConioUnlockConsole(Console); + + return Status; } /* EOF */ diff --git a/reactos/subsystems/win32/csrss/win32csr/desktopbg.c b/reactos/subsystems/win32/csrss/win32csr/desktopbg.c index 79efe582a97..a8ddd0ef537 100644 --- a/reactos/subsystems/win32/csrss/win32csr/desktopbg.c +++ b/reactos/subsystems/win32/csrss/win32csr/desktopbg.c @@ -209,7 +209,7 @@ CSR_API(CsrCreateDesktop) BgInitialized = TRUE; if (! DtbgInit()) { - return Request->Status = STATUS_UNSUCCESSFUL; + return STATUS_UNSUCCESSFUL; } } @@ -222,7 +222,7 @@ CSR_API(CsrCreateDesktop) if (NULL == ThreadData.Event) { DPRINT1("Failed to create event (error %d)\n", GetLastError()); - return Request->Status = STATUS_UNSUCCESSFUL; + return STATUS_UNSUCCESSFUL; } ThreadHandle = CreateThread(NULL, 0, @@ -234,16 +234,14 @@ CSR_API(CsrCreateDesktop) { CloseHandle(ThreadData.Event); DPRINT1("Failed to create desktop window thread.\n"); - return Request->Status = STATUS_UNSUCCESSFUL; + return STATUS_UNSUCCESSFUL; } CloseHandle(ThreadHandle); WaitForSingleObject(ThreadData.Event, INFINITE); CloseHandle(ThreadData.Event); - Request->Status = ThreadData.Status; - - return Request->Status; + return ThreadData.Status; } CSR_API(CsrShowDesktop) @@ -261,13 +259,11 @@ CSR_API(CsrShowDesktop) nmh.ShowDesktop.Width = (int)Request->Data.ShowDesktopRequest.Width; nmh.ShowDesktop.Height = (int)Request->Data.ShowDesktopRequest.Height; - Request->Status = SendMessageW(Request->Data.ShowDesktopRequest.DesktopWindow, - WM_NOTIFY, - (WPARAM)nmh.hdr.hwndFrom, - (LPARAM)&nmh) - ? STATUS_UNSUCCESSFUL : STATUS_SUCCESS; - - return Request->Status; + return SendMessageW(Request->Data.ShowDesktopRequest.DesktopWindow, + WM_NOTIFY, + (WPARAM)nmh.hdr.hwndFrom, + (LPARAM)&nmh) + ? STATUS_UNSUCCESSFUL : STATUS_SUCCESS; } CSR_API(CsrHideDesktop) @@ -282,13 +278,11 @@ CSR_API(CsrHideDesktop) nmh.hdr.idFrom = 0; nmh.hdr.code = PM_HIDE_DESKTOP; - Request->Status = SendMessageW(Request->Data.ShowDesktopRequest.DesktopWindow, - WM_NOTIFY, - (WPARAM)nmh.hdr.hwndFrom, - (LPARAM)&nmh) - ? STATUS_UNSUCCESSFUL : STATUS_SUCCESS; - - return Request->Status; + return SendMessageW(Request->Data.ShowDesktopRequest.DesktopWindow, + WM_NOTIFY, + (WPARAM)nmh.hdr.hwndFrom, + (LPARAM)&nmh) + ? STATUS_UNSUCCESSFUL : STATUS_SUCCESS; } BOOL FASTCALL diff --git a/reactos/subsystems/win32/csrss/win32csr/dllmain.c b/reactos/subsystems/win32/csrss/win32csr/dllmain.c index 0b73d2df16c..554c7a75afb 100644 --- a/reactos/subsystems/win32/csrss/win32csr/dllmain.c +++ b/reactos/subsystems/win32/csrss/win32csr/dllmain.c @@ -16,6 +16,7 @@ /* Not defined in any header file */ extern VOID STDCALL PrivateCsrssManualGuiCheck(LONG Check); extern VOID STDCALL PrivateCsrssInitialized(); +extern VOID STDCALL InitializeAppSwitchHook(); /* GLOBALS *******************************************************************/ @@ -74,6 +75,7 @@ static CSRSS_API_DEFINITION Win32CsrApiDefinitions[] = CSRSS_DEFINE_API(GET_ALL_CONSOLE_ALIASES_LENGTH, CsrGetAllConsoleAliasesLength), CSRSS_DEFINE_API(GET_CONSOLE_ALIASES_EXES, CsrGetConsoleAliasesExes), CSRSS_DEFINE_API(GET_CONSOLE_ALIASES_EXES_LENGTH, CsrGetConsoleAliasesExesLength), + CSRSS_DEFINE_API(GENERATE_CTRL_EVENT, CsrGenerateCtrlEvent), { 0, 0, NULL } }; @@ -94,6 +96,7 @@ DllMain(HANDLE hDll, if (DLL_PROCESS_ATTACH == dwReason) { Win32CsrDllHandle = hDll; + InitializeAppSwitchHook(); } return TRUE; diff --git a/reactos/subsystems/win32/csrss/win32csr/exitros.c b/reactos/subsystems/win32/csrss/win32csr/exitros.c index b13502cfa88..e3dc47a0c81 100644 --- a/reactos/subsystems/win32/csrss/win32csr/exitros.c +++ b/reactos/subsystems/win32/csrss/win32csr/exitros.c @@ -27,8 +27,7 @@ CSR_API(CsrRegisterLogonProcess) { if (0 != LogonProcess) { - Request->Status = STATUS_LOGON_SESSION_EXISTS; - return Request->Status; + return STATUS_LOGON_SESSION_EXISTS; } LogonProcess = Request->Data.RegisterLogonProcessRequest.ProcessId; } @@ -38,15 +37,12 @@ CSR_API(CsrRegisterLogonProcess) { DPRINT1("Current logon process 0x%x, can't deregister from process 0x%x\n", LogonProcess, Request->Header.ClientId.UniqueProcess); - Request->Status = STATUS_NOT_LOGON_PROCESS; - return Request->Status; + return STATUS_NOT_LOGON_PROCESS; } LogonProcess = 0; } - Request->Status = STATUS_SUCCESS; - - return Request->Status; + return STATUS_SUCCESS; } CSR_API(CsrSetLogonNotifyWindow) @@ -61,21 +57,17 @@ CSR_API(CsrSetLogonNotifyWindow) &WindowCreator)) { DPRINT1("Can't get window creator\n"); - Request->Status = STATUS_INVALID_HANDLE; - return Request->Status; + return STATUS_INVALID_HANDLE; } if (WindowCreator != (DWORD)LogonProcess) { DPRINT1("Trying to register window not created by winlogon as notify window\n"); - Request->Status = STATUS_ACCESS_DENIED; - return Request->Status; + return STATUS_ACCESS_DENIED; } LogonNotifyWindow = Request->Data.SetLogonNotifyWindowRequest.LogonNotifyWindow; - Request->Status = STATUS_SUCCESS; - - return Request->Status; + return STATUS_SUCCESS; } typedef struct tagSHUTDOWN_SETTINGS @@ -938,17 +930,15 @@ CSR_API(CsrExitReactos) if (0 == (Request->Data.ExitReactosRequest.Flags & EWX_INTERNAL_FLAG)) { - Request->Status = UserExitReactos((DWORD) Request->Header.ClientId.UniqueProcess, - Request->Data.ExitReactosRequest.Flags); + return UserExitReactos((DWORD) Request->Header.ClientId.UniqueProcess, + Request->Data.ExitReactosRequest.Flags); } else { - Request->Status = InternalExitReactos((DWORD) Request->Header.ClientId.UniqueProcess, - (DWORD) Request->Header.ClientId.UniqueThread, - Request->Data.ExitReactosRequest.Flags); + return InternalExitReactos((DWORD) Request->Header.ClientId.UniqueProcess, + (DWORD) Request->Header.ClientId.UniqueThread, + Request->Data.ExitReactosRequest.Flags); } - - return Request->Status; } /* EOF */ diff --git a/reactos/subsystems/win32/csrss/win32csr/guiconsole.c b/reactos/subsystems/win32/csrss/win32csr/guiconsole.c index 1103ed3caa9..b189b14211b 100644 --- a/reactos/subsystems/win32/csrss/win32csr/guiconsole.c +++ b/reactos/subsystems/win32/csrss/win32csr/guiconsole.c @@ -32,8 +32,6 @@ typedef struct GUI_CONSOLE_DATA_TAG BOOL MouseDown; HMODULE ConsoleLibrary; HANDLE hGuiInitEvent; - HWND hVScrollBar; - HWND hHScrollBar; WCHAR FontName[LF_FACESIZE]; DWORD FontSize; DWORD FontWeight; @@ -44,7 +42,6 @@ typedef struct GUI_CONSOLE_DATA_TAG DWORD NumberOfHistoryBuffers; DWORD HistoryBufferSize; DWORD WindowPosition; - DWORD ScreenBufferSize; DWORD UseRasterFonts; COLORREF ScreenText; COLORREF ScreenBackground; @@ -620,7 +617,6 @@ GuiConsoleUseDefaults(PCSRSS_CONSOLE Console, PGUI_CONSOLE_DATA GuiData, PCSRSS_ GuiData->PopupText = RGB(128, 0, 128); GuiData->PopupBackground = RGB(255, 255, 255); GuiData->WindowPosition = UINT_MAX; - GuiData->ScreenBufferSize = MAKELONG(80, 300); //FIXME GuiData->UseRasterFonts = TRUE; memcpy(GuiData->Colors, s_Colors, sizeof(s_Colors)); @@ -641,35 +637,50 @@ FASTCALL GuiConsoleInitScrollbar(PCSRSS_CONSOLE Console, HWND hwnd) { SCROLLINFO sInfo; + PGUI_CONSOLE_DATA GuiData = Console->PrivateData; + + DWORD Width = Console->Size.X * GuiData->CharWidth + 2 * GetSystemMetrics(SM_CXFIXEDFRAME); + DWORD Height = Console->Size.Y * GuiData->CharHeight + 2 * GetSystemMetrics(SM_CYFIXEDFRAME) + GetSystemMetrics(SM_CYCAPTION); /* set scrollbar sizes */ sInfo.cbSize = sizeof(SCROLLINFO); - sInfo.fMask = SIF_RANGE | SIF_POS; + sInfo.fMask = SIF_RANGE | SIF_PAGE | SIF_POS; sInfo.nMin = 0; - sInfo.nMax = Console->ActiveBuffer->MaxY; - sInfo.nPos = 0; - SetScrollInfo(hwnd, SB_HORZ, &sInfo, TRUE); - ShowScrollBar(hwnd, SB_VERT, TRUE); - - if (Console->ActiveBuffer->MaxX > Console->Size.X) + if (Console->ActiveBuffer->MaxY > Console->Size.Y) { - sInfo.cbSize = sizeof(SCROLLINFO); - sInfo.fMask = SIF_RANGE | SIF_POS; - sInfo.nMin = 0; - sInfo.nPos = 0; - sInfo.nMax = Console->ActiveBuffer->MaxX; - SetScrollInfo(hwnd, SB_HORZ, &sInfo, TRUE); + sInfo.nMax = Console->ActiveBuffer->MaxY - 1; + sInfo.nPage = Console->Size.Y; + sInfo.nPos = Console->ActiveBuffer->ShowY; + SetScrollInfo(hwnd, SB_VERT, &sInfo, TRUE); + Width += GetSystemMetrics(SM_CXVSCROLL); + ShowScrollBar(hwnd, SB_VERT, TRUE); } else { - ShowScrollBar(hwnd, SB_HORZ, FALSE); + ShowScrollBar(hwnd, SB_VERT, FALSE); } + + if (Console->ActiveBuffer->MaxX > Console->Size.X) + { + sInfo.nMax = Console->ActiveBuffer->MaxX - 1; + sInfo.nPage = Console->Size.X; + sInfo.nPos = Console->ActiveBuffer->ShowX; + SetScrollInfo(hwnd, SB_HORZ, &sInfo, TRUE); + Height += GetSystemMetrics(SM_CYHSCROLL); + ShowScrollBar(hwnd, SB_HORZ, TRUE); + } + else + { + ShowScrollBar(hwnd, SB_HORZ, FALSE); + } + + SetWindowPos(hwnd, NULL, 0, 0, Width, Height, + SWP_NOZORDER | SWP_NOMOVE | SWP_NOACTIVATE); } static BOOL FASTCALL GuiConsoleHandleNcCreate(HWND hWnd, CREATESTRUCTW *Create) { - RECT Rect; PCSRSS_CONSOLE Console = (PCSRSS_CONSOLE) Create->lpCreateParams; PGUI_CONSOLE_DATA GuiData = (PGUI_CONSOLE_DATA)Console->PrivateData; HDC Dc; @@ -763,14 +774,6 @@ GuiConsoleHandleNcCreate(HWND hWnd, CREATESTRUCTW *Create) Console->PrivateData = GuiData; SetWindowLongPtrW(hWnd, GWL_USERDATA, (DWORD_PTR) Console); - GetWindowRect(hWnd, &Rect); - Rect.right = Rect.left + Console->Size.X * GuiData->CharWidth + - 2 * GetSystemMetrics(SM_CXFIXEDFRAME); - Rect.bottom = Rect.top + Console->Size.Y * GuiData->CharHeight + - 2 * GetSystemMetrics(SM_CYFIXEDFRAME) + GetSystemMetrics(SM_CYCAPTION); - MoveWindow(hWnd, Rect.left, Rect.top, Rect.right - Rect.left, - Rect.bottom - Rect.top, FALSE); - SetTimer(hWnd, 1, CURSOR_BLINK_TIME, NULL); GuiConsoleCreateSysMenu(Console); GuiConsoleInitScrollbar(Console, hWnd); @@ -861,17 +864,17 @@ GuiConsolePaint(PCSRSS_CONSOLE Console, Buff = Console->ActiveBuffer; - TopLine = rc->top / GuiData->CharHeight; - BottomLine = (rc->bottom + (GuiData->CharHeight - 1)) / GuiData->CharHeight - 1; - LeftChar = rc->left / GuiData->CharWidth; - RightChar = (rc->right + (GuiData->CharWidth - 1)) / GuiData->CharWidth - 1; - LastAttribute = Buff->Buffer[(TopLine * Buff->MaxX + LeftChar) * 2 + 1]; + EnterCriticalSection(&Buff->Header.Lock); + + TopLine = rc->top / GuiData->CharHeight + Buff->ShowY; + BottomLine = (rc->bottom + (GuiData->CharHeight - 1)) / GuiData->CharHeight - 1 + Buff->ShowY; + LeftChar = rc->left / GuiData->CharWidth + Buff->ShowX; + RightChar = (rc->right + (GuiData->CharWidth - 1)) / GuiData->CharWidth - 1 + Buff->ShowX; + LastAttribute = ConioCoordToPointer(Buff, LeftChar, TopLine)[1]; SetTextColor(hDC, GuiConsoleRGBFromAttribute(GuiData, LastAttribute)); SetBkColor(hDC, GuiConsoleRGBFromAttribute(GuiData, LastAttribute >> 4)); - EnterCriticalSection(&Buff->Header.Lock); - if (BottomLine >= Buff->MaxY) BottomLine = Buff->MaxY - 1; if (RightChar >= Buff->MaxX) RightChar = Buff->MaxX - 1; @@ -889,8 +892,8 @@ GuiConsolePaint(PCSRSS_CONSOLE Console, if (*(From + 1) != LastAttribute) { TextOutW(hDC, - Start * GuiData->CharWidth, - Line * GuiData->CharHeight, + (Start - Buff->ShowX) * GuiData->CharWidth, + (Line - Buff->ShowY) * GuiData->CharHeight, GuiData->LineBuffer, Char - Start); Start = Char; @@ -915,8 +918,8 @@ GuiConsolePaint(PCSRSS_CONSOLE Console, } TextOutW(hDC, - Start * GuiData->CharWidth, - Line * GuiData->CharHeight, + (Start - Buff->ShowX) * GuiData->CharWidth, + (Line - Buff->ShowY) * GuiData->CharHeight, GuiData->LineBuffer, RightChar - Start + 1); } @@ -948,8 +951,8 @@ GuiConsolePaint(PCSRSS_CONSOLE Console, OldBrush = SelectObject(hDC, CursorBrush); PatBlt(hDC, - CursorX * GuiData->CharWidth, - CursorY * GuiData->CharHeight + (GuiData->CharHeight - CursorHeight), + (CursorX - Buff->ShowX) * GuiData->CharWidth, + (CursorY - Buff->ShowY) * GuiData->CharHeight + (GuiData->CharHeight - CursorHeight), GuiData->CharWidth, CursorHeight, PATCOPY); @@ -1020,8 +1023,8 @@ GuiConsoleHandlePaint(HWND hWnd, HDC hDCPaint) } } - EndPaint(hWnd, &ps); } + EndPaint(hWnd, &ps); } static VOID FASTCALL @@ -1047,14 +1050,14 @@ GuiConsoleHandleKey(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) } static VOID FASTCALL -GuiIntDrawRegion(PGUI_CONSOLE_DATA GuiData, HWND Wnd, RECT *Region) +GuiIntDrawRegion(PCSRSS_SCREEN_BUFFER Buff, PGUI_CONSOLE_DATA GuiData, HWND Wnd, RECT *Region) { RECT RegionRect; - RegionRect.left = Region->left * GuiData->CharWidth; - RegionRect.top = Region->top * GuiData->CharHeight; - RegionRect.right = (Region->right + 1) * GuiData->CharWidth; - RegionRect.bottom = (Region->bottom + 1) * GuiData->CharHeight; + RegionRect.left = (Region->left - Buff->ShowX) * GuiData->CharWidth; + RegionRect.top = (Region->top - Buff->ShowY) * GuiData->CharHeight; + RegionRect.right = (Region->right + 1 - Buff->ShowX) * GuiData->CharWidth; + RegionRect.bottom = (Region->bottom + 1 - Buff->ShowY) * GuiData->CharHeight; InvalidateRect(Wnd, &RegionRect, FALSE); } @@ -1066,12 +1069,12 @@ GuiDrawRegion(PCSRSS_CONSOLE Console, RECT *Region) if (NULL != Console->hWindow && NULL != GuiData) { - GuiIntDrawRegion(GuiData, Console->hWindow, Region); + GuiIntDrawRegion(Console->ActiveBuffer, GuiData, Console->hWindow, Region); } } static VOID FASTCALL -GuiInvalidateCell(PGUI_CONSOLE_DATA GuiData, HWND Wnd, UINT x, UINT y) +GuiInvalidateCell(PCSRSS_SCREEN_BUFFER Buff, PGUI_CONSOLE_DATA GuiData, HWND Wnd, UINT x, UINT y) { RECT CellRect; @@ -1080,7 +1083,7 @@ GuiInvalidateCell(PGUI_CONSOLE_DATA GuiData, HWND Wnd, UINT x, UINT y) CellRect.right = x; CellRect.bottom = y; - GuiIntDrawRegion(GuiData, Wnd, &CellRect); + GuiIntDrawRegion(Buff, GuiData, Wnd, &CellRect); } static VOID STDCALL @@ -1133,12 +1136,12 @@ GuiWriteStream(PCSRSS_CONSOLE Console, RECT *Region, LONG CursorStartX, LONG Cur SW_INVALIDATE); } - GuiIntDrawRegion(GuiData, Console->hWindow, Region); + GuiIntDrawRegion(Buff, GuiData, Console->hWindow, Region); if (CursorStartX < Region->left || Region->right < CursorStartX || CursorStartY < Region->top || Region->bottom < CursorStartY) { - GuiInvalidateCell(GuiData, Console->hWindow, CursorStartX, CursorStartY); + GuiInvalidateCell(Buff, GuiData, Console->hWindow, CursorStartX, CursorStartY); } CursorEndX = Buff->CurrentX; @@ -1147,7 +1150,7 @@ GuiWriteStream(PCSRSS_CONSOLE Console, RECT *Region, LONG CursorStartX, LONG Cur || CursorEndY < Region->top || Region->bottom < CursorEndY) && (CursorEndX != CursorStartX || CursorEndY != CursorStartY)) { - GuiInvalidateCell(GuiData, Console->hWindow, CursorEndX, CursorEndY); + GuiInvalidateCell(Buff, GuiData, Console->hWindow, CursorEndX, CursorEndY); } } @@ -1456,7 +1459,7 @@ GuiConsoleShowConsoleProperties(HWND hWnd, BOOL Defaults, PGUI_CONSOLE_DATA GuiD SharedInfo.PopupBackground = GuiData->PopupBackground; SharedInfo.WindowSize = (DWORD)MAKELONG(Console->Size.X, Console->Size.Y); SharedInfo.WindowPosition = GuiData->WindowPosition; - SharedInfo.ScreenBuffer = GuiData->ScreenBufferSize; + SharedInfo.ScreenBuffer = (DWORD)MAKELONG(Console->ActiveBuffer->MaxX, Console->ActiveBuffer->MaxY); SharedInfo.UseRasterFonts = GuiData->UseRasterFonts; SharedInfo.FontSize = (DWORD)GuiData->FontSize; SharedInfo.FontWeight = GuiData->FontWeight; @@ -1551,8 +1554,8 @@ static VOID FASTCALL GuiApplyUserSettings(PCSRSS_CONSOLE Console, PGUI_CONSOLE_DATA GuiData, PConsoleInfo pConInfo) { DWORD windx, windy; - RECT rect; PCSRSS_SCREEN_BUFFER ActiveBuffer = Console->ActiveBuffer; + BOOL SizeChanged = FALSE; EnterCriticalSection(&ActiveBuffer->Header.Lock); @@ -1561,7 +1564,7 @@ GuiApplyUserSettings(PCSRSS_CONSOLE Console, PGUI_CONSOLE_DATA GuiData, PConsole GuiData->ScreenBackground = pConInfo->ScreenBackground; /* apply cursor size */ - ActiveBuffer->CursorInfo.dwSize = max(min(pConInfo->CursorSize, 1), 100); + ActiveBuffer->CursorInfo.dwSize = min(max(pConInfo->CursorSize, 1), 100); windx = LOWORD(pConInfo->ScreenBuffer); windy = HIWORD(pConInfo->ScreenBuffer); @@ -1573,7 +1576,7 @@ GuiApplyUserSettings(PCSRSS_CONSOLE Console, PGUI_CONSOLE_DATA GuiData, PConsole if (Buffer) { DWORD Offset = 0; - DWORD BufferOffset = 0; + BYTE * OldPtr; USHORT CurrentY; BYTE * OldBuffer; USHORT value; @@ -1587,17 +1590,17 @@ GuiApplyUserSettings(PCSRSS_CONSOLE Console, PGUI_CONSOLE_DATA GuiData, PConsole for (CurrentY = 0; CurrentY < min(ActiveBuffer->MaxY, windy); CurrentY++) { + OldPtr = ConioCoordToPointer(ActiveBuffer, 0, CurrentY); if (windx <= ActiveBuffer->MaxX) { /* reduce size */ - RtlCopyMemory(&Buffer[Offset], &OldBuffer[BufferOffset], windx * 2); + RtlCopyMemory(&Buffer[Offset], OldPtr, windx * 2); Offset += (windx * 2); - BufferOffset += (ActiveBuffer->MaxX * 2); } else { /* enlarge size */ - RtlCopyMemory(&Buffer[Offset], &OldBuffer[BufferOffset], ActiveBuffer->MaxX * 2); + RtlCopyMemory(&Buffer[Offset], OldPtr, ActiveBuffer->MaxX * 2); Offset += (ActiveBuffer->MaxX * 2); diff = windx - ActiveBuffer->MaxX; @@ -1605,27 +1608,25 @@ GuiApplyUserSettings(PCSRSS_CONSOLE Console, PGUI_CONSOLE_DATA GuiData, PConsole #if HAVE_WMEMSET wmemset((WCHAR*)&Buffer[Offset], value, diff); #else - for (i = 0; i < diff * 2; i++) + for (i = 0; i < diff; i++) { - Buffer[Offset * 2] = ' '; - Buffer[Offset * 2 + 1] = ActiveBuffer->DefaultAttrib; + Buffer[Offset++] = ' '; + Buffer[Offset++] = ActiveBuffer->DefaultAttrib; } #endif - Offset += (diff * 2); - BufferOffset += (ActiveBuffer->MaxX * 2); } } if (windy > ActiveBuffer->MaxY) { - diff = windy - ActiveBuffer->MaxX; + diff = windy - ActiveBuffer->MaxY; #if HAVE_WMEMSET wmemset((WCHAR*)&Buffer[Offset], value, diff * windx); #else - for (i = 0; i < diff * 2; i++) + for (i = 0; i < diff * windx; i++) { - Buffer[Offset * 2] = ' '; - Buffer[Offset * 2 + 1] = ActiveBuffer->DefaultAttrib; + Buffer[Offset++] = ' '; + Buffer[Offset++] = ActiveBuffer->DefaultAttrib; } #endif } @@ -1634,7 +1635,8 @@ GuiApplyUserSettings(PCSRSS_CONSOLE Console, PGUI_CONSOLE_DATA GuiData, PConsole HeapFree(Win32CsrApiHeap, 0, OldBuffer); ActiveBuffer->MaxX = windx; ActiveBuffer->MaxY = windy; - InvalidateRect(pConInfo->hConsoleWindow, NULL, TRUE); + ActiveBuffer->VirtualY = 0; + SizeChanged = TRUE; } else { @@ -1667,43 +1669,53 @@ GuiApplyUserSettings(PCSRSS_CONSOLE Console, PGUI_CONSOLE_DATA GuiData, PConsole /* resize window */ Console->Size.X = windx; Console->Size.Y = windy; - - GetWindowRect(pConInfo->hConsoleWindow, &rect); - - rect.right = rect.left + Console->Size.X * GuiData->CharWidth + 2 * GetSystemMetrics(SM_CXFIXEDFRAME); - rect.bottom = rect.top + Console->Size.Y * GuiData->CharHeight + 2 * GetSystemMetrics(SM_CYFIXEDFRAME) + GetSystemMetrics(SM_CYCAPTION); - - MoveWindow(pConInfo->hConsoleWindow, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, FALSE); - - if (Console->Size.X < ActiveBuffer->MaxX) - { - /* show scrollbar when window becomes smaller than active screen buffer */ - ShowScrollBar(pConInfo->hConsoleWindow, SB_CTL, TRUE); - } - else - { - /* hide scrollbar */ - ShowScrollBar(pConInfo->hConsoleWindow, SB_CTL, FALSE); - } + SizeChanged = TRUE; } + + if (SizeChanged) + { + GuiConsoleInitScrollbar(Console, pConInfo->hConsoleWindow); + } + LeaveCriticalSection(&ActiveBuffer->Header.Lock); InvalidateRect(pConInfo->hConsoleWindow, NULL, TRUE); } static LRESULT -GuiConsoleHandleScroll(HWND hwnd, UINT uMsg, WPARAM wParam, PGUI_CONSOLE_DATA GuiData) +GuiConsoleHandleScroll(HWND hwnd, UINT uMsg, WPARAM wParam) { + PCSRSS_CONSOLE Console; + PCSRSS_SCREEN_BUFFER Buff; + PGUI_CONSOLE_DATA GuiData; SCROLLINFO sInfo; - int old_pos; + int fnBar; + int old_pos, Maximum; + PUSHORT pShowXY; + + GuiConsoleGetDataPointers(hwnd, &Console, &GuiData); + if (Console == NULL || GuiData == NULL) + return FALSE; + Buff = Console->ActiveBuffer; + + if (uMsg == WM_HSCROLL) + { + fnBar = SB_HORZ; + Maximum = Buff->MaxX - Console->Size.X; + pShowXY = &Buff->ShowX; + } + else + { + fnBar = SB_VERT; + Maximum = Buff->MaxY - Console->Size.Y; + pShowXY = &Buff->ShowY; + } /* set scrollbar sizes */ sInfo.cbSize = sizeof(SCROLLINFO); sInfo.fMask = SIF_RANGE | SIF_POS | SIF_PAGE | SIF_TRACKPOS; - if (!GetScrollInfo(hwnd, - (uMsg == WM_HSCROLL ? SB_HORZ : SB_VERT), - &sInfo)) + if (!GetScrollInfo(hwnd, fnBar, &sInfo)) { return FALSE; } @@ -1729,7 +1741,7 @@ GuiConsoleHandleScroll(HWND hwnd, UINT uMsg, WPARAM wParam, PGUI_CONSOLE_DATA Gu break; case SB_THUMBTRACK: - sInfo.nPage = sInfo.nTrackPos; + sInfo.nPos = sInfo.nTrackPos; break; case SB_TOP: @@ -1744,39 +1756,27 @@ GuiConsoleHandleScroll(HWND hwnd, UINT uMsg, WPARAM wParam, PGUI_CONSOLE_DATA Gu break; } - sInfo.fMask = SIF_POS; - sInfo.cbSize = sizeof(SCROLLINFO); - - SetScrollInfo(hwnd, - (uMsg == WM_HSCROLL ? SB_HORZ : SB_VERT), - &sInfo, - TRUE); - - sInfo.cbSize = sizeof(SCROLLINFO); - sInfo.fMask = SIF_POS; - - if (!GetScrollInfo(hwnd, - (uMsg == WM_HSCROLL ? SB_HORZ : SB_VERT), - &sInfo)) - { - return 0; - } + sInfo.nPos = max(sInfo.nPos, 0); + sInfo.nPos = min(sInfo.nPos, Maximum); if (old_pos != sInfo.nPos) { - /// - /// fixme scroll window - /// + USHORT OldX = Buff->ShowX; + USHORT OldY = Buff->ShowY; + *pShowXY = sInfo.nPos; ScrollWindowEx(hwnd, - 0, - GuiData->CharHeight * (old_pos - sInfo.nPos), + (OldX - Buff->ShowX) * GuiData->CharWidth, + (OldY - Buff->ShowY) * GuiData->CharHeight, NULL, NULL, NULL, NULL, SW_INVALIDATE); + sInfo.fMask = SIF_POS; + SetScrollInfo(hwnd, fnBar, &sInfo, TRUE); + UpdateWindow(hwnd); } return 0; @@ -1832,7 +1832,7 @@ GuiConsoleWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) break; case WM_HSCROLL: case WM_VSCROLL: - Result = GuiConsoleHandleScroll(hWnd, msg, wParam, GuiData); + Result = GuiConsoleHandleScroll(hWnd, msg, wParam); break; case WM_SIZE: GuiConsoleResize(hWnd, wParam, lParam); diff --git a/reactos/subsystems/win32/csrss/win32csr/lang/bg-BG.rc b/reactos/subsystems/win32/csrss/win32csr/lang/bg-BG.rc index 963c6473b62..d358f5703c7 100644 --- a/reactos/subsystems/win32/csrss/win32csr/lang/bg-BG.rc +++ b/reactos/subsystems/win32/csrss/win32csr/lang/bg-BG.rc @@ -33,6 +33,14 @@ BEGIN IDC_STATIC,7,53,178,26 END +IDD_SWITCH_APP DIALOGEX 90, 90, 265, 170 +STYLE DS_SYSMODAL | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE +EXSTYLE WS_EX_TOPMOST | WS_EX_WINDOWEDGE +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_STATIC_CUR_APP,39,139,204,16,SS_SUNKEN,WS_EX_STATICEDGE +END + STRINGTABLE BEGIN IDS_EDIT "Обработка" diff --git a/reactos/subsystems/win32/csrss/win32csr/lang/de-DE.rc b/reactos/subsystems/win32/csrss/win32csr/lang/de-DE.rc index d2a233896c1..a8fa75eabe2 100644 --- a/reactos/subsystems/win32/csrss/win32csr/lang/de-DE.rc +++ b/reactos/subsystems/win32/csrss/win32csr/lang/de-DE.rc @@ -27,6 +27,14 @@ BEGIN IDC_STATIC,7,53,178,26 END +IDD_SWITCH_APP DIALOGEX 90, 90, 265, 170 +STYLE DS_SYSMODAL | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE +EXSTYLE WS_EX_TOPMOST | WS_EX_WINDOWEDGE +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_STATIC_CUR_APP,39,139,204,16,SS_SUNKEN,WS_EX_STATICEDGE +END + STRINGTABLE BEGIN IDS_EDIT "Bearbeiten" diff --git a/reactos/subsystems/win32/csrss/win32csr/lang/el-GR.rc b/reactos/subsystems/win32/csrss/win32csr/lang/el-GR.rc index c230817cce9..e6136973002 100644 --- a/reactos/subsystems/win32/csrss/win32csr/lang/el-GR.rc +++ b/reactos/subsystems/win32/csrss/win32csr/lang/el-GR.rc @@ -27,6 +27,14 @@ BEGIN IDC_STATIC,7,53,178,26 END +IDD_SWITCH_APP DIALOGEX 90, 90, 265, 170 +STYLE DS_SYSMODAL | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE +EXSTYLE WS_EX_TOPMOST | WS_EX_WINDOWEDGE +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_STATIC_CUR_APP,39,139,204,16,SS_SUNKEN,WS_EX_STATICEDGE +END + STRINGTABLE BEGIN IDS_EDIT "ЕреоесгбуЯб" diff --git a/reactos/subsystems/win32/csrss/win32csr/lang/en-US.rc b/reactos/subsystems/win32/csrss/win32csr/lang/en-US.rc index 840e31154e6..b6ebdf2a660 100644 --- a/reactos/subsystems/win32/csrss/win32csr/lang/en-US.rc +++ b/reactos/subsystems/win32/csrss/win32csr/lang/en-US.rc @@ -27,6 +27,14 @@ BEGIN IDC_STATIC,7,53,178,26 END +IDD_SWITCH_APP DIALOGEX 90, 90, 265, 170 +STYLE DS_SYSMODAL | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE +EXSTYLE WS_EX_TOPMOST | WS_EX_WINDOWEDGE +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_STATIC_CUR_APP,39,139,204,16,SS_SUNKEN,WS_EX_STATICEDGE +END + STRINGTABLE BEGIN IDS_EDIT "Edit" diff --git a/reactos/subsystems/win32/csrss/win32csr/lang/es-ES.rc b/reactos/subsystems/win32/csrss/win32csr/lang/es-ES.rc index e20d4d6dd37..50960a7bfe4 100644 --- a/reactos/subsystems/win32/csrss/win32csr/lang/es-ES.rc +++ b/reactos/subsystems/win32/csrss/win32csr/lang/es-ES.rc @@ -32,6 +32,14 @@ BEGIN IDC_STATIC,7,53,178,26 END +IDD_SWITCH_APP DIALOGEX 90, 90, 265, 170 +STYLE DS_SYSMODAL | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE +EXSTYLE WS_EX_TOPMOST | WS_EX_WINDOWEDGE +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_STATIC_CUR_APP,39,139,204,16,SS_SUNKEN,WS_EX_STATICEDGE +END + STRINGTABLE BEGIN IDS_EDIT "Editar" diff --git a/reactos/subsystems/win32/csrss/win32csr/lang/fr-FR.rc b/reactos/subsystems/win32/csrss/win32csr/lang/fr-FR.rc index c4428d9ec71..834aa502dec 100644 --- a/reactos/subsystems/win32/csrss/win32csr/lang/fr-FR.rc +++ b/reactos/subsystems/win32/csrss/win32csr/lang/fr-FR.rc @@ -27,6 +27,14 @@ BEGIN IDC_STATIC,7,53,178,26 END +IDD_SWITCH_APP DIALOGEX 90, 90, 265, 170 +STYLE DS_SYSMODAL | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE +EXSTYLE WS_EX_TOPMOST | WS_EX_WINDOWEDGE +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_STATIC_CUR_APP,39,139,204,16,SS_SUNKEN,WS_EX_STATICEDGE +END + /* Fixme : Translation could be really improved, with context La traduction pourrait rйellement кtre amйliorйe grвce au contexte */ STRINGTABLE diff --git a/reactos/subsystems/win32/csrss/win32csr/lang/id-ID.rc b/reactos/subsystems/win32/csrss/win32csr/lang/id-ID.rc index bb81cbbb0e2..7faf10f7579 100644 --- a/reactos/subsystems/win32/csrss/win32csr/lang/id-ID.rc +++ b/reactos/subsystems/win32/csrss/win32csr/lang/id-ID.rc @@ -27,6 +27,14 @@ BEGIN IDC_STATIC,7,53,178,26 END +IDD_SWITCH_APP DIALOGEX 90, 90, 265, 170 +STYLE DS_SYSMODAL | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE +EXSTYLE WS_EX_TOPMOST | WS_EX_WINDOWEDGE +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_STATIC_CUR_APP,39,139,204,16,SS_SUNKEN,WS_EX_STATICEDGE +END + STRINGTABLE BEGIN IDS_EDIT "Edit" diff --git a/reactos/subsystems/win32/csrss/win32csr/lang/it-IT.rc b/reactos/subsystems/win32/csrss/win32csr/lang/it-IT.rc index 0bb1add4cb4..4aecce782f1 100644 --- a/reactos/subsystems/win32/csrss/win32csr/lang/it-IT.rc +++ b/reactos/subsystems/win32/csrss/win32csr/lang/it-IT.rc @@ -36,6 +36,14 @@ BEGIN IDC_STATIC,7,53,178,26 END +IDD_SWITCH_APP DIALOGEX 90, 90, 265, 170 +STYLE DS_SYSMODAL | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE +EXSTYLE WS_EX_TOPMOST | WS_EX_WINDOWEDGE +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_STATIC_CUR_APP,39,139,204,16,SS_SUNKEN,WS_EX_STATICEDGE +END + STRINGTABLE BEGIN IDS_EDIT "Modifica" diff --git a/reactos/subsystems/win32/csrss/win32csr/lang/no-NO.rc b/reactos/subsystems/win32/csrss/win32csr/lang/no-NO.rc new file mode 100644 index 00000000000..a0ba9c5a5f4 --- /dev/null +++ b/reactos/subsystems/win32/csrss/win32csr/lang/no-NO.rc @@ -0,0 +1,47 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_END_NOW DIALOGEX DISCARDABLE 0, 0, 200, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Avslutt program - " +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Avslutt Program... Vennligst vent",IDC_STATIC,7,7,186,11 + CONTROL "Progress",IDC_PROGRESS,"msctls_progress32",WS_BORDER, + 7,20,186,13 + LTEXT "Hvis du velger е avslutte programmet шyeblikkelig, vil du miste alt data som ikke er lagret. For е avslutte programmet nе, Trykk pе Avslutt nе.", + IDC_STATIC,7,40,186,26 + DEFPUSHBUTTON "&Avslutt nе",IDC_END_NOW,150,71,43,17 +END + +IDD_NOT_RESPONDING DIALOGEX DISCARDABLE 0, 0, 192, 122 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Avslutt program - " +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Avbryt",IDCANCEL,142,98,43,17 + PUSHBUTTON "&Avslutt nе",IDC_END_NOW,78,98,43,17 + LTEXT "Programmet svarer ikke",IDC_STATIC,7,7,178,8 + LTEXT "For е returnere til ReactOS for е sjekke statusen pе programmet, trykk pе avbryt", + IDC_STATIC,7,26,178,16 + LTEXT "Hvis du velger е avslutte programmet шyeblikkelig, vil du miste alt data som ikke er lagret. For е avslutte programmet nе, Trykk pе Avslutt nе", + IDC_STATIC,7,53,178,26 +END +STRINGTABLE +BEGIN + IDS_EDIT "Rediger" + IDS_MARK "Merk" + IDS_COPY "Kopier\tEnter" + IDS_PASTE "Lim inn" + IDS_SELECTALL "Velg alt" + IDS_SCROLL "Rull" + IDS_FIND "Finn..." + IDS_DEFAULTS "Standard" + IDS_PROPERTIES "Egenskaper" + IDS_SCROLLHERE "Rull her" + IDS_SCROLLTOP "Rull til toppen" + IDS_SCROLLBOTTOM "Rull knapp" + IDS_SCROLLPAGE_UP "Side opp" + IDS_SCROLLPAGE_DOWN "Side ned" + IDS_SCROLLUP "Rull opp" + IDS_SCROLLDOWN "Rull ned" +END diff --git a/reactos/subsystems/win32/csrss/win32csr/lang/pl-PL.rc b/reactos/subsystems/win32/csrss/win32csr/lang/pl-PL.rc index a7d3180755c..9d8927ebc2d 100644 --- a/reactos/subsystems/win32/csrss/win32csr/lang/pl-PL.rc +++ b/reactos/subsystems/win32/csrss/win32csr/lang/pl-PL.rc @@ -32,6 +32,14 @@ BEGIN IDC_STATIC,7,53,178,26 END +IDD_SWITCH_APP DIALOGEX 90, 90, 265, 170 +STYLE DS_SYSMODAL | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE +EXSTYLE WS_EX_TOPMOST | WS_EX_WINDOWEDGE +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_STATIC_CUR_APP,39,139,204,16,SS_SUNKEN,WS_EX_STATICEDGE +END + STRINGTABLE BEGIN IDS_EDIT "Edytuj" diff --git a/reactos/subsystems/win32/csrss/win32csr/lang/ru-RU.rc b/reactos/subsystems/win32/csrss/win32csr/lang/ru-RU.rc index be9af13ee1a..e35fa896cfc 100644 --- a/reactos/subsystems/win32/csrss/win32csr/lang/ru-RU.rc +++ b/reactos/subsystems/win32/csrss/win32csr/lang/ru-RU.rc @@ -27,6 +27,14 @@ BEGIN IDC_STATIC,7,53,178,26 END +IDD_SWITCH_APP DIALOGEX 90, 90, 265, 170 +STYLE DS_SYSMODAL | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE +EXSTYLE WS_EX_TOPMOST | WS_EX_WINDOWEDGE +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_STATIC_CUR_APP,39,139,204,16,SS_SUNKEN,WS_EX_STATICEDGE +END + STRINGTABLE BEGIN IDS_EDIT "Изменить" diff --git a/reactos/subsystems/win32/csrss/win32csr/lang/sk-SK.rc b/reactos/subsystems/win32/csrss/win32csr/lang/sk-SK.rc index f5ed348a5e2..3642acb0878 100644 --- a/reactos/subsystems/win32/csrss/win32csr/lang/sk-SK.rc +++ b/reactos/subsystems/win32/csrss/win32csr/lang/sk-SK.rc @@ -31,6 +31,14 @@ BEGIN IDC_STATIC,7,53,178,26 END +IDD_SWITCH_APP DIALOGEX 90, 90, 265, 170 +STYLE DS_SYSMODAL | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE +EXSTYLE WS_EX_TOPMOST | WS_EX_WINDOWEDGE +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_STATIC_CUR_APP,39,139,204,16,SS_SUNKEN,WS_EX_STATICEDGE +END + STRINGTABLE BEGIN IDS_EDIT "Upraviќ" diff --git a/reactos/subsystems/win32/csrss/win32csr/lang/uk-UA.rc b/reactos/subsystems/win32/csrss/win32csr/lang/uk-UA.rc index b0df756b393..7cf8452f2d2 100644 --- a/reactos/subsystems/win32/csrss/win32csr/lang/uk-UA.rc +++ b/reactos/subsystems/win32/csrss/win32csr/lang/uk-UA.rc @@ -35,6 +35,14 @@ BEGIN IDC_STATIC,7,53,178,26 END +IDD_SWITCH_APP DIALOGEX 90, 90, 265, 170 +STYLE DS_SYSMODAL | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE +EXSTYLE WS_EX_TOPMOST | WS_EX_WINDOWEDGE +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_STATIC_CUR_APP,39,139,204,16,SS_SUNKEN,WS_EX_STATICEDGE +END + STRINGTABLE BEGIN IDS_EDIT "Редагувати" diff --git a/reactos/subsystems/win32/csrss/win32csr/res/terminal.ico b/reactos/subsystems/win32/csrss/win32csr/res/terminal.ico index 03758d2e847..7e3e77d2927 100644 Binary files a/reactos/subsystems/win32/csrss/win32csr/res/terminal.ico and b/reactos/subsystems/win32/csrss/win32csr/res/terminal.ico differ diff --git a/reactos/subsystems/win32/csrss/win32csr/resource.h b/reactos/subsystems/win32/csrss/win32csr/resource.h index f5491fa0091..a0de6e4adde 100644 --- a/reactos/subsystems/win32/csrss/win32csr/resource.h +++ b/reactos/subsystems/win32/csrss/win32csr/resource.h @@ -10,10 +10,14 @@ #define WIN32CSR_RESOURCE_H_INCLUDED #define IDD_END_NOW 10 +#define IDD_NOT_RESPONDING 11 +#define IDD_SWITCH_APP 12 #define IDC_STATIC 100 #define IDC_PROGRESS 101 #define IDC_END_NOW 102 +#define IDC_STATIC_CUR_APP 103 + #define ID_SYSTEM_EDIT_MARK 1001 #define ID_SYSTEM_EDIT_COPY 1002 diff --git a/reactos/subsystems/win32/csrss/win32csr/win32csr.rbuild b/reactos/subsystems/win32/csrss/win32csr/win32csr.rbuild index 6a24d5d651e..53bad5de37c 100644 --- a/reactos/subsystems/win32/csrss/win32csr/win32csr.rbuild +++ b/reactos/subsystems/win32/csrss/win32csr/win32csr.rbuild @@ -16,6 +16,8 @@ advapi32 psapi msvcrt + psapi + shell32 w32csr.h alias.c conio.c @@ -24,5 +26,6 @@ exitros.c guiconsole.c tuiconsole.c + appswitch.c win32csr.rc diff --git a/reactos/subsystems/win32/win32k/dib/dib16bpp.c b/reactos/subsystems/win32/win32k/dib/dib16bpp.c index c0a19c54182..7d4417cd0d1 100644 --- a/reactos/subsystems/win32/win32k/dib/dib16bpp.c +++ b/reactos/subsystems/win32/win32k/dib/dib16bpp.c @@ -499,7 +499,8 @@ __inline PIXEL average16(PIXEL a, PIXEL b) return res; */ - return a; // FIXME: Depend on SetStretchMode + // This one is the short form of the correct one ;-) + return (((a ^ b) & 0xf7deU) >> 1) + (a & b); } //NOTE: If you change something here, please do the same in other dibXXbpp.c files! diff --git a/reactos/subsystems/win32/win32k/eng/i386/floatobj.S b/reactos/subsystems/win32/win32k/eng/i386/floatobj.S new file mode 100644 index 00000000000..268db69023c --- /dev/null +++ b/reactos/subsystems/win32/win32k/eng/i386/floatobj.S @@ -0,0 +1,1155 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Win32 subsystem + * PURPOSE: FLOATOBJ floating point emulation functions for x86 + * FILE: subsystems/win32/win32k/objects/i386/floatobj.S + * PROGRAMMER: Timo Kreuzer + */ + + +/******************************************************************************* + * IEEE 754-1985 single precision floating point + * + * | 31 | 30...23 | 22...0 | + * |sign| exponent | fraction | + * + * mantissa = 1 + (fraction / 2^23) + * f = (-1)^sign * mantissa * 2 ^ (exponent - bias) + * bias = 127 + * + ******************************************************************************* + * win32k x86 floating point emulation + * + * struct _EFLOAT + = { + * LONG lMant; + * LONG lExp; + * }; + * + * f = (lMant / 0x40000000) * 2 ^ (lExp - 2) + * = lMant * 2 ^ (lExp - 32) + * + ******************************************************************************* + * Optimization notes: + * + * - shld is slow (4 cycles) and not pairable, mov + shl is faster + * - esp is used, beacuse it's available earlier + * - bsr is very slow on old cpus (up to 72 cycles on a p1) while being much + * faster on modern cpus (2-11 cycles). Workarounds using branch trees or + * table lookups are of no use nowadays. + ******************************************************************************* + * Compatibility notes: + * - There are issues with very large size values near integer overflow. + * Floating point values are behaving different there. This behavior isn't + * simulated yet. Difference is < 10^-5 % + * - The result of a multiplication can differ from Windows result in the + * least significant bit, that is a difference of 1 / 2^30 or ~10^-9 + ******************************************************************************* + * Implementation status: + * + * FLOATOBJ_SetFloat - implemented, tested + * FLOATOBJ_SetLong - implemented, tested + * FLOATOBJ_GetFloat - implemented, tested + * FLOATOBJ_GetLong - implemented, tested + * FLOATOBJ_Equal - implemented, tested + * FLOATOBJ_EqualLong - implemented + * FLOATOBJ_GreaterThan - implemented + * FLOATOBJ_GreaterThanLong - wrapper + * FLOATOBJ_LessThan - implemented + * FLOATOBJ_LessThanLong - wrapper + * FLOATOBJ_Neg - implemented + * FLOATOBJ_Mul - implemented, tested, optimized + * FLOATOBJ_MulFloat - wrapper + * FLOATOBJ_MulLong - wrapper, could really need optimization + * FLOATOBJ_Div - implemented + * FLOATOBJ_DivFloat - wrapper + * FLOATOBJ_DivLong - wrapper + * FLOATOBJ_Add - implemented, tested + * FLOATOBJ_AddFloat - wrapper + * FLOATOBJ_AddLong - wrapper + * FLOATOBJ_Sub - implemented, tested + * FLOATOBJ_SubFloat - wrapper + * FLOATOBJ_SubLong - wrapper + */ + +.intel_syntax noprefix +.text + +#define lMant 0 +#define lExp 4 + +#define PARAM1 8 +#define PARAM2 12 + +/****************************************************************************** + * VOID + * APIENTRY + * FLOATOBJ_SetFloat(IN OUT PFLOATOBJ pf, IN FLOATL f); + */ +_FLOATOBJ_SetFloat@8: +.global _FLOATOBJ_SetFloat@8 + push ebp + mov ebp, esp + + mov ecx, [esp + PARAM2] /* Load the float into ecx */ + mov eax, ecx /* Copy float to eax for later */ + + test ecx, 0x7f800000 /* Check for zero exponent - 0 or denormal */ + jz SetFloat0 /* If it's all zero, ... */ + + shl ecx, 7 /* Put the bits for the mantissa in place */ + + cdq /* Fill edx with the sign from the FLOATL in eax */ + and ecx, 0x7fffffff /* Mask out invalid field in the mantissa */ + + shr eax, 23 /* Shift the exponent in eax in place */ + or ecx, 0x40000000 /* Set bit for 1 in the mantissa */ + and eax, 0xff /* Mask out invalid fields in the exponent in eax */ + + xor ecx, edx /* Make use of the sign bit expanded to full edx */ + + sub eax, 125 /* Adjust exonent bias */ + + sub ecx, edx /* Substract -1 or add 1 if sign was set */ + + mov edx, [esp + PARAM1] /* Load pf into edx */ + mov [edx + lMant], ecx /* Save back mantissa */ + mov [edx + lExp], eax /* Save back exponent */ + + pop ebp /* Return */ + ret 8 + +SetFloat0: + mov edx, [esp + PARAM1] /* Load pf into edx */ + + mov dword ptr [edx + lMant], 0 /* Set mantissa and exponent to 0 */ + mov dword ptr [edx + lExp], 0 + + pop ebp /* Return */ + ret 8 + + +/******************************************************************************* + * LONG + * APIENTRY + * FLOATOBJ_GetFloat(IN PFLOATOBJ pf); + * + */ +_FLOATOBJ_GetFloat@4: +.global _FLOATOBJ_GetFloat@4 + push ebp + mov ebp, esp + + mov edx, [esp + PARAM1] /* Load pf into edx */ + mov eax, [edx + lMant] /* Load mantissa into eax */ + mov ecx, [edx + lExp] /* Load exponent into ecx */ + + cdq /* Calculate abs(mantissa) */ + xor eax, edx + + add ecx, 125 + + sub eax, edx + jz GetFloatRet + + and ecx, 0xff /* Mask out invalid fields in the exponent */ + and eax, 0x3fffffff /* Mask out invalid fields in mantissa */ + + shl ecx, 23 /* Shift exponent in place */ + shr eax, 7 /* Shift mantissa in place */ + + and edx, 0x80000000 /* Reduce edx to sign bit only */ + + or eax, ecx /* Set exponent in result */ + or eax, edx /* Set sign bit in result */ + +GetFloatRet: + /* Return */ + pop ebp + ret 4 + + + +/****************************************************************************** + * VOID + * APIENTRY + * FLOATOBJ_SetLong(OUT PFLOATOBJ pf, IN LONG l); + * + * Instead of using abs(l), which is 3 + 2 instructions, use a branch. + */ +_FLOATOBJ_SetLong@8: +.global _FLOATOBJ_SetLong@8 + push ebp + mov ebp, esp + + mov eax, [esp + PARAM2] /* Load l into eax */ + mov edx, [esp + PARAM1] /* Load pf into edx */ + + test eax, eax /* different handling for <0, =0 and >0 */ + js SetLongNeg + jz SetLong0 + + bsr ecx, eax /* Get number of most significant bit aka log2(l) */ + mov [edx + lExp], ecx /* Safe log2(l) into exponent */ + + neg ecx /* Calculate necessary shift */ + add ecx, 30 + + add dword ptr [edx + lExp], 2 /* Adjust exponent */ + + shl eax, cl /* Shift mantissa in place */ + mov [edx + lMant], eax /* Save mantissa */ + + pop ebp /* Return */ + ret 8 + +SetLongNeg: + neg eax /* Get absolute value of l */ + bsr ecx, eax /* Get number of most significant bit aka log2(l) */ + neg eax /* Back to negative */ + + mov [edx + lExp], ecx /* Safe log2(-l) into exponent */ + + neg ecx /* Calculate necessary shift */ + add ecx, 30 + + add dword ptr [edx + lExp], 2 /* Adjust exponent */ + + shl eax, cl /* Shift mantissa in place */ + mov [edx + lMant], eax /* Save mantissa */ + + pop ebp /* Return */ + ret 8 + +SetLong0: + mov dword ptr [edx + lMant], 0 /* Set mantissa and exponent to 0 */ + mov dword ptr [edx + lExp], 0 + + pop ebp /* Return */ + ret 8 + + +/******************************************************************************* + * LONG + * APIENTRY + * FLOATOBJ_GetLong(IN PFLOATOBJ pf); + * + */ +_FLOATOBJ_GetLong@4: +.global _FLOATOBJ_GetLong@4 + push ebp + mov ebp, esp + + mov edx, [ebp + PARAM1] /* Load pf into edx */ + mov ecx, 32 /* Load (32 - lExp) into ecx */ + sub ecx, [edx + lExp] + jle short GetLong2 /* Check for Overflow */ + + mov eax, [edx + lMant] /* Load mantissa into eax */ + sar eax, cl /* Signed shift mantissa according to exponent */ + + pop ebp /* Return */ + ret 4 + +GetLong2: + xor eax, eax /* Overflow, return 0 */ + pop ebp + ret 4 + + +/****************************************************************************** + * BOOL + * APIENTRY + * FLOATOBJ_Equal(IN PFLOATOBJ pf1, IN PFLOATOBJ pf2); + */ +_FLOATOBJ_Equal@8: +.global _FLOATOBJ_Equal@8 + push ebp + mov ebp, esp + + mov ecx, [esp + PARAM1] /* Load pf1 into ecx */ + mov eax, [esp + PARAM2] /* Load pf2 into ecx */ + + mov edx, [ecx + lExp] /* Get float1 in ecx, edx */ + mov ecx, [ecx + lMant] + + sub edx, [eax + lExp] /* Calculate diference to float2 */ + sub ecx, [eax + lMant] + + or edx, ecx /* Combine */ + + mov eax, 0 /* Set eax if combination is 0 */ + setz al + + pop ebp /* Return */ + ret 8 + + +/****************************************************************************** + * BOOL + * APIENTRY + * FLOATOBJ_EqualLong(IN PFLOATOBJ pf, IN LONG l); + */ +_FLOATOBJ_EqualLong@8: +.global _FLOATOBJ_EqualLong@8 + push ebp + mov ebp, esp + + mov eax, [esp + PARAM1] /* Load pf into eax */ + mov ecx, 32 /* Load (32 - lExp) into ecx */ + sub ecx, [eax + lExp] + mov edx, [eax + lMant] /* Load mantissa into edx */ + sar edx, cl /* Signed shift mantissa according to exponent */ + shl edx, cl /* Shift the mantissa back */ + cmp edx, [eax + lMant] /* Check whether bits were killed by shifting */ + jnz EqualLongFalse /* We have truncated the mantissa, return 0 */ + + sar edx, cl /* Shift the mantissa again */ + xor eax, eax /* Set return value ... */ + cmp edx, [esp + PARAM2] /* TRUE if shifted mantissa equals the LONG */ + setz al + + pop ebp /* Return */ + ret 8 + +EqualLongFalse: + xor eax, eax /* Return FALSE */ + pop ebp + ret 8 + + +/****************************************************************************** + * BOOL + * APIENTRY + * FLOATOBJ_GreaterThan(IN PFLOATOBJ pf, IN PFLOATOBJ pf1); + * + */ +_FLOATOBJ_GreaterThan@8: +.global _FLOATOBJ_GreaterThan@8 + push ebp + mov ebp, esp + + mov eax, [ebp + PARAM1] /* Load pointer to efloat1 in eax */ + mov edx, [ebp + PARAM2] /* Load pointer to efloat2 in edx */ + + mov ecx, [eax + lMant] /* Load mantissa1 in ecx */ + mov edx, [edx + lMant] /* Load mantissa2 in edx */ + + sar ecx, 31 /* Calculate sign(lMant1) in ecx */ + sar edx, 31 /* Calculate sign(lMant2) in edx */ + + cmp ecx, edx /* Branch if both have the same sign */ + je GreaterThan_2 + + /* Mantissae have different sign */ + mov eax, 0 /* Return (sign(lMant1) > sign(lMant2)) */ + setg al + pop ebp + ret 8 + +GreaterThan_2: + /* Mantissae have the same sign */ + + mov edx, [ebp + PARAM2] /* Reload pointer to float2 in edx */ + test ecx, ecx /* Branch if sign is negative */ + js GreaterThan_neg + + /* Both mantissae are positive or 0 */ + + or ecx, [edx + lMant] /* Branch if one mantissa is 0 */ + jz GreaterThan_pos2 + + /* Both mantissae are positive */ + + mov ecx, [eax + lExp] /* Branch if exponents are equal */ + cmp ecx, [edx + lExp] + je GreaterThan_pos2 + + mov eax, 0 /* Return (lExp1 > lExp2) */ + setg al + pop ebp + ret 8 + +GreaterThan_pos2: + /* Exponents are equal or one mantissa is 0 */ + + mov ecx, [eax + lMant] /* Return (lMant1 > lMant2) */ + cmp ecx, [edx + lMant] + mov eax, 0 + setg al + pop ebp + ret 8 + +GreaterThan_neg: + /* Both mantissae are negative */ + + mov ecx, [eax + lExp] /* Branch if exponents are equal */ + cmp ecx, [edx + lExp] + je GreaterThan_neg2 + + /* Both mantissae negative, exponents are different */ + + mov eax, 0 /* Return (lExp1 < lExp2) */ + setl al + pop ebp + ret 8 + +GreaterThan_neg2: + /* Both mantissae negative, exponents are equal */ + + mov ecx, [eax + lMant] /* Return (lMant1 < lMant2) */ + cmp ecx, [edx + lMant] + mov eax, 0 + setl al + pop ebp + ret 8 + + + +/****************************************************************************** + * VOID + * APIENTRY + * FLOATOBJ_GreaterThanLong(IN OUT PFLOATOBJ pf, IN LONG l); + * + * Currently implemented as a wrapper around FLOATOBJ_SetLong and + * LOATOBJ_GreaterThan + */ +_FLOATOBJ_GreaterThanLong@8: +.global _FLOATOBJ_GreaterThanLong@8 + push ebp + mov ebp, esp + + sub esp, 8 /* Make room for a FLOATOBJ on the stack */ + mov eax, [ebp + PARAM2] /* Load LONG into eax */ + + lea ecx, [ebp -8] /* Load pointer to local FLOATOBJ into ecx */ + + push eax /* Push LONG on the stack */ + push ecx /* Push pointer to local FLOATOBJ on the stack */ + call _FLOATOBJ_SetLong@8 /* Set the local FLOATOBJ */ + + lea ecx, [ebp -8] /* Push pointer to the local FLOATOBJ on the stack */ + push ecx + push [ebp + PARAM1] /* Push the FLOATOBJ param on the stack */ + call _FLOATOBJ_GreaterThan@8 /* Compare */ + + mov esp, ebp /* Cleanup and return */ + pop ebp + ret 8 + + +/****************************************************************************** + * BOOL + * APIENTRY + * FLOATOBJ_LessThan(IN PFLOATOBJ pf, IN PFLOATOBJ pf1); + * + */ +_FLOATOBJ_LessThan@8: +.global _FLOATOBJ_LessThan@8 + push ebp + mov ebp, esp + + mov eax, [ebp + PARAM1] /* Load pointer to floats in eax and edx */ + mov edx, [ebp + PARAM2] + + mov ecx, [eax + lMant] /* Load mantissae in ecx and edx */ + mov edx, [edx + lMant] + + sar ecx, 31 /* Calculate sign(lMant1) and sign(lMant2) */ + sar edx, 31 + + cmp ecx, edx /* Branch if both have the same sign */ + je LessThan_2 + + /* Mantissae have different sign */ + + mov eax, 0 /* Return (sign(lMant1) < sign(lMant2)) */ + setl al + pop ebp + ret 8 + +LessThan_2: + /* Mantissae have the same sign */ + + + mov edx, [ebp + PARAM2] /* Reload pointer to float2 in edx */ + + test ecx, ecx /* Branch if sign is negative */ + js LessThan_neg + + /* Both mantissae are positive or 0 */ + + or ecx, [edx + lMant] /* Branch if one mantissa is 0 */ + jz LessThan_pos2 + + /* Both mantissae are positive */ + + mov ecx, [eax + lExp] /* Branch if exponents are equal */ + cmp ecx, [edx + lExp] + je LessThan_pos2 + + mov eax, 0 /* Return (lExp1 < lExp2) */ + setl al + pop ebp + ret 8 + +LessThan_pos2: + /* Exponents are equal or one mantissa is 0 */ + + mov ecx, [eax + lMant] /* Return (lMant1 < lMant2) */ + cmp ecx, [edx + lMant] + mov eax, 0 + setl al + pop ebp + ret 8 + +LessThan_neg: + /* Both mantissae are negative */ + + mov ecx, [eax + lExp] /* Branch if exponents are equal */ + cmp ecx, [edx + lExp] + je LessThan_neg2 + + /* Both mantissae negative, exponents are different */ + + mov eax, 0 /* Return (lExp1 > lExp2) */ + setg al + pop ebp + ret 8 + +LessThan_neg2: + /* Both mantissae negative, exponents are equal */ + + mov ecx, [eax + lMant] /* Return (lMant1 > lMant2) */ + cmp ecx, [edx + lMant] + mov eax, 0 + setg al + pop ebp + ret 8 + + +/****************************************************************************** + * VOID + * APIENTRY + * FLOATOBJ_LessThanLong(IN OUT PFLOATOBJ pf, IN LONG l); + * + * Currently implemented as a wrapper around FLOATOBJ_SetLong and FLOATOBJ_LessThan + */ +_FLOATOBJ_LessThanLong@8: +.global _FLOATOBJ_LessThanLong@8 + push ebp + mov ebp, esp + + sub esp, 8 /* Make room for a FLOATOBJ on the stack */ + mov eax, [ebp + PARAM2] /* Load LONG into eax */ + + lea ecx, [ebp -8] /* Load pointer to local FLOATOBJ into ecx */ + push eax /* Push LONG on the stack */ + push ecx /* Push pointer to local FLOATOBJ on the stack */ + call _FLOATOBJ_SetLong@8 /* Set the local FLOATOBJ */ + + lea ecx, [ebp -8] /* Push pointer to the local FLOATOBJ on the stack */ + push ecx + push [ebp + PARAM1] /* Push the FLOATOBJ param on the stack */ + call _FLOATOBJ_LessThan@8 /* Compare */ + + mov esp, ebp /* Cleanup and return */ + pop ebp + ret 8 + + + +/****************************************************************************** + * VOID + * APIENTRY + * FLOATOBJ_Mul(IN OUT PFLOATOBJ pf1, IN PFLOATOBJ pf2); + * + * (mant1 * 2^exp1) * (mant2 * 2^exp2) = (mant1 * mant2) * 2^(exp1 + exp2) + * or mant = mant1 * mant2 and exp = exp1 + exp2 + * No special handling for 0, where mantissa is 0 + */ +_FLOATOBJ_Mul@8: +.global _FLOATOBJ_Mul@8 +//jmp _FLOATOBJ_Mul2@8 + push ebp + mov ebp, esp + + mov edx, [esp + PARAM1] /* Load pf1 into edx */ + mov ecx, [esp + PARAM2] /* Load pf2 into ecx */ + mov eax, [ecx + lMant] /* Load mantissa2 into eax */ + mov ecx, [ecx + lExp] /* Load exponent2 into ecx */ + + imul dword ptr [edx + lMant] /* Multiply eax with mantissa 1 */ + + test edx, edx /* Special handling for result < 0 */ + js MulNeg + + shl edx, 2 /* Get new mantissa from bits 30 to 62 */ + shr eax, 30 /* of edx:eax into edx */ + or eax, edx + + mov edx, ecx /* Need ecx for the shift, safe exp2 to free edx */ + mov ecx, 0 /* Check for highest bit */ + sets cl + shr eax, cl /* Normalize mantissa in eax */ + + jz Mul0 /* All 0? */ + + lea edx, [edx + ecx -2] /* Normalize exponent in edx */ + + + mov ecx, [esp + PARAM1] /* Load pf1 into ecx */ + mov [ecx + lMant], eax /* Save back mantissa */ + add [ecx + lExp], edx /* Save back exponent */ + + pop ebp /* Return */ + ret 8 + +MulNeg: + + shl edx, 2 /* Get new mantissa from bits 30 to 62 */ + shr eax, 30 /* of edx:eax into edx */ + or eax, edx + + mov edx, ecx /* Need ecx for the shift, safe exp2 to free edx */ + + mov ecx, 0 /* Check for highest bit */ + setns cl + shr eax, cl /* Normalize mantissa in eax */ + + jz Mul0 /* All 0? */ + + + lea edx, [edx + ecx -2] /* Normalize exponent in edx */ + or eax, 0x80000000 /* Set sign bit */ + + mov ecx, [esp + PARAM1] /* Load pf1 into ecx */ + mov [ecx + lMant], eax /* Save back mantissa */ + add [ecx + lExp], edx /* Save back exponent */ + + pop ebp /* Return */ + ret 8 + +Mul0: + mov ecx, [esp + PARAM1] /* Load pf1 into ecx */ + mov [ecx + lMant], eax /* Store 0 in mantissa */ + mov [ecx + lExp], eax /* Store 0 in exponent */ + + pop ebp /* Return */ + ret 8 + + +/****************************************************************************** + * VOID + * APIENTRY + * FLOATOBJ_MulFloat(IN OUT PFLOATOBJ pf, IN FLOATL f); + * + * Currently implemented as a wrapper around FLOATOBJ_SetFloat and FLOATOBJ_Mul + */ +_FLOATOBJ_MulFloat@8: +.global _FLOATOBJ_MulFloat@8 + push ebp + mov ebp, esp + + sub esp, 8 /* Make room for a FLOATOBJ on the stack */ + mov eax, [ebp + PARAM2] /* Load f into eax */ + lea ecx, [ebp -4] /* Load pointer to local FLOATOBJ into ecx */ + push eax /* Push f on the stack */ + push ecx /* Push pointer to local FLOATOBJ on the stack */ + call _FLOATOBJ_SetFloat@8 /* Set the FLOATOBJ */ + + lea ecx, [ebp -4] /* Push pointer to local FLOATOBJ on the stack */ + push ecx + push [ebp + PARAM1] /* Push the FLOATOBJ param on the stack */ + call _FLOATOBJ_Mul@8 /* Multiply */ + + mov esp, ebp /* Cleanup and return */ + pop ebp + ret 8 + + +/****************************************************************************** + * VOID + * APIENTRY + * FLOATOBJ_MulLong(IN OUT PFLOATOBJ pf, IN LONG l); + * + * Currently implemented as a wrapper around FLOATOBJ_SetLong and FLOATOBJ_Mul + */ +_FLOATOBJ_MulLong@8: +.global _FLOATOBJ_MulLong@8 + push ebp + mov ebp, esp + + sub esp, 8 /* Make room for a FLOATOBJ on the stack */ + mov eax, [ebp + PARAM2] /* Load l into eax */ + lea ecx, [ebp -8] /* Load pointer to local FLOATOBJ into ecx */ + push eax /* Push l on the stack */ + push ecx /* Push pointer to local FLOATOBJ on the stack */ + call _FLOATOBJ_SetLong@8 /* Set the local FLOATOBJ */ + + lea ecx, [ebp -8] /* Push pointer to local FLOATOBJ on the stack */ + push ecx + push [ebp + PARAM1] /* Push the FLOATOBJ param on the stack */ + call _FLOATOBJ_Mul@8 /* Multiply */ + + mov esp, ebp /* Cleanup and return */ + pop ebp + ret 8 + + +/******************************************************************************* + * VOID + * APIENTRY + * FLOATOBJ_Div(IN OUT PFLOATOBJ pf1, IN PFLOATOBJ pf2); + * + */ +_FLOATOBJ_Div@8: +.global _FLOATOBJ_Div@8 + push ebp + mov ebp, esp + push ebx + + mov eax, [ebp + PARAM2] /* Load lMant2 into eax */ + mov eax, [eax + lMant] + + cdq /* Calculate abs(lMant2) */ + xor eax, edx + sub eax, edx + jz DivError /* Divide by zero error! */ + + mov ebx, edx /* Copy sign(lMant2) to ebx */ + mov ecx, eax /* Copy abs(lMant2) to ecx */ + + mov eax, [ebp + PARAM1] /* Load lMant1 into eax */ + mov eax, [eax + lMant] + + cdq /* Calculate abs(lMant1) */ + xor eax, edx + sub eax, edx + + jz Div0 /* Dividend is 0? */ + + xor ebx, edx /* combine both signs in ebx */ + + mov edx, eax /* Prepare edx:eax for integer divide */ + xor eax, eax + shr edx, 1 + div ecx /* Do an unsigned divide */ + + xor ecx, ecx /* Adjust result */ + test eax, 0x80000000 + setnz cl + shr eax, cl + + xor eax, ebx /* Correct the result's sign */ + sub eax, ebx + + mov edx, [ebp + PARAM1] /* Load pf1 into edx */ + mov [edx + lMant], eax /* Safe back the mantissa */ + mov ebx, [ebp + PARAM2] /* Load pf2 into ebx */ + sub ecx, [ebx + lExp] /* Calculate exponent offset */ + inc ecx + add [edx + lExp], ecx /* Safe back exponent */ + + pop ebx /* Return */ + pop ebp + ret 8 + +DivError: +Div0: + mov edx, [ebp + PARAM1] /* Load pf into edx */ + mov [edx + lMant], eax /* Store 0 in mantissa */ + mov [edx + lExp], eax /* Store 0 in exponent */ + + pop ebx /* Return */ + pop ebp + ret 8 + + +/****************************************************************************** + * VOID + * APIENTRY + * FLOATOBJ_DivFloat(IN OUT PFLOATOBJ pf, IN FLOATL f); + * + * Currently implemented as a wrapper around FLOATOBJ_SetFloat and FLOATOBJ_Div + */ +_FLOATOBJ_DivFloat@8: +.global _FLOATOBJ_DivFloat@8 + push ebp + mov ebp, esp + sub esp, 8 /* Make room for a FLOATOBJ on the stack */ + + mov eax, [ebp + PARAM2] /* Load f into eax */ + lea ecx, [ebp -4] /* Load pointer to local FLOATOBJ into ecx */ + push eax /* Push f on the stack */ + push ecx /* Push pointer to local FLOATOBJ on the stack */ + call _FLOATOBJ_SetFloat@8 /* Set the FLOATOBJ */ + + lea ecx, [ebp -4] /* Push pointer to local FLOATOBJ on the stack */ + push ecx + push [ebp + PARAM1] /* Push the FLOATOBJ param on the stack */ + call _FLOATOBJ_Div@8 /* Divide */ + + mov esp, ebp /* Cleanup and return */ + pop ebp + ret 8 + + +/****************************************************************************** + * VOID + * APIENTRY + * FLOATOBJ_DivLong(IN OUT PFLOATOBJ pf, IN LONG l); + * + * Currently implemented as a wrapper around FLOATOBJ_SetLong and FLOATOBJ_Div + */ +_FLOATOBJ_DivLong@8: +.global _FLOATOBJ_DivLong@8 + push ebp + mov ebp, esp + sub esp, 8 /* Make room for a FLOATOBJ on the stack */ + + mov eax, [ebp + PARAM2] /* Load l into eax */ + lea ecx, [ebp -8] /* Load pointer to local FLOATOBJ into ecx */ + push eax /* Push l on the stack */ + push ecx /* Push pointer to local FLOATOBJ on the stack */ + call _FLOATOBJ_SetLong@8 /* Set the local FLOATOBJ */ + + lea ecx, [ebp -8] /* Push pointer to the local FLOATOBJ on the stack */ + push ecx + push [ebp + PARAM1] /* Push the FLOATOBJ param on the stack */ + call _FLOATOBJ_Div@8 /* Divide */ + + pop ebp /* Cleanup and return */ + ret 8 + + +/******************************************************************************* + * VOID + * APIENTRY + * FLOATOBJ_Add(IN OUT PFLOATOBJ pf1, IN PFLOATOBJ pf2); + * + */ +_FLOATOBJ_Add@8: +.global _FLOATOBJ_Add@8 + push ebp + mov ebp, esp + push ebx + + mov eax, [ebp + PARAM1] /* Load pointer to pf1 in eax */ + mov ebx, [ebp + PARAM2] /* Load pointer to pf2 in ebx */ + + mov ecx, [eax + lExp] /* Load float1 in (eax,ecx) */ + mov edx, [ebx + lExp] + mov eax, [eax + lMant] /* Load float2 in (ebx,edx) */ + mov ebx, [ebx + lMant] + + cmp ecx, edx /* Check which one has the bigger lExp */ + jl Add2 + + sub ecx, edx /* Calculate lExp1 - lExp2 */ + sar eax, 1 /* Shift both mantissae 1 bit right */ + sar ebx, 1 + sar ebx, cl /* Shift lMant2 according to exponent difference */ + + add eax, ebx /* Add the manrissae */ + jz AddIs0 + + cdq /* Calculate abs(mantissa) */ + xor eax, edx + sub eax, edx + + bsr ecx, eax /* Find most significant bit */ + neg ecx /* and calculate needed normalize shift */ + add ecx, 30 + shl eax, cl + dec ecx + + xor eax, edx /* Go back to original sign */ + sub eax, edx + + mov edx, [ebp + PARAM1] /* Reload pointer to float1 */ + + pop ebx + + mov dword ptr [edx + lMant], eax /* Safe mantissa */ + sub [edx + lExp], ecx /* Adjust exponent */ + + pop ebp /* Return */ + ret 8 + +Add2: + sub edx, ecx /* Calculate lExp2 - lExp1 and put it into ecx */ + mov ecx, edx + + sar ebx, 1 /* Shift both mantissae 1 bit right */ + sar eax, 1 + sar eax, cl /* Shift lMant2 according to exponent difference */ + + add eax, ebx /* Add the manrissae */ + jz AddIs0 + + mov ebx, [ebp + PARAM1] /* Reload pointer to float1 */ + add [ebx + lExp], ecx /* Adjust exponent part 1 */ + + cdq /* Calculate abs(mantissa) */ + xor eax, edx + sub eax, edx + + bsr ecx, eax /* Find most significant bit */ + neg ecx /* and calculate needed normalize shift */ + add ecx, 30 + shl eax, cl + dec ecx + + xor eax, edx /* Go back to original sign */ + sub eax, edx + + mov dword ptr [ebx + lMant], eax /* Safe mantissa and adjust exponent */ + sub [ebx + lExp], ecx + + pop ebx /* Return */ + pop ebp + ret 8 + +AddIs0: + /* Mantissa is 0, so float to (0,0) */ + mov eax, [ebp + PARAM1] + pop ebx + mov dword ptr [eax + lMant], 0 + mov dword ptr [eax + lExp], 0 + pop ebp + ret 8 + + +/****************************************************************************** + * VOID + * APIENTRY + * FLOATOBJ_AddFloat(IN OUT PFLOATOBJ pf, IN FLOATL f); + * + * Currently implemented as a wrapper around FLOATOBJ_SetFloat and FLOATOBJ_Add + */ +_FLOATOBJ_AddFloat@8: +.global _FLOATOBJ_AddFloat@8 + push ebp + mov ebp, esp + sub esp, 8 /* Make room for a FLOATOBJ on the stack */ + + mov eax, [ebp + PARAM2] /* Load f into eax */ + lea ecx, [ebp -4] /* Load pointer to local FLOATOBJ into ecx */ + push eax /* Push f on the stack */ + push ecx /* Push pointer to local FLOATOBJ on the stack */ + call _FLOATOBJ_SetFloat@8 /* Set the FLOATOBJ */ + + lea ecx, [ebp -4] /* Push pointer to local FLOATOBJ on the stack */ + push ecx + push [ebp + PARAM1] /* Push the FLOATOBJ param on the stack */ + call _FLOATOBJ_Add@8 /* Add */ + + mov esp, ebp /* Cleanup and return */ + pop ebp + ret 8 + + +/****************************************************************************** + * VOID + * APIENTRY + * FLOATOBJ_AddLong(IN OUT PFLOATOBJ pf, IN LONG l); + * + * Currently implemented as a wrapper around FLOATOBJ_SetLong and FLOATOBJ_Add + */ +_FLOATOBJ_AddLong@8: +.global _FLOATOBJ_AddLong@8 + push ebp + mov ebp, esp + sub esp, 8 /* Make room for a FLOATOBJ on the stack */ + + mov eax, [ebp + PARAM2] /* Load l into eax */ + lea ecx, [ebp -8] /* Load pointer to local FLOATOBJ into ecx */ + push eax /* Push l on the stack */ + push ecx /* Push pointer to local FLOATOBJ on the stack */ + call _FLOATOBJ_SetLong@8 /* Set the local FLOATOBJ */ + + lea ecx, [ebp -8] /* Push pointer to the local FLOATOBJ on the stack */ + push ecx + push [ebp + PARAM1] /* Push the FLOATOBJ param on the stack */ + call _FLOATOBJ_Add@8 /* Add */ + + mov esp, ebp /* Cleanup and return */ + pop ebp + ret 8 + + +/******************************************************************************* + * VOID + * APIENTRY + * FLOATOBJ_Sub(IN OUT PFLOATOBJ pf, IN PFLOATOBJ pf1); + * + */ +_FLOATOBJ_Sub@8: +.global _FLOATOBJ_Sub@8 + push ebp + mov ebp, esp + push ebx + + mov eax, [ebp + PARAM1] /* Load pointer to floats in eax and ebx */ + mov ebx, [ebp + PARAM2] + + mov ecx, [eax + lExp] /* Load float1 in (eax,ecx) and float2 in (ebx,edx) */ + mov edx, [ebx + lExp] + mov eax, [eax + lMant] + mov ebx, [ebx + lMant] + + cmp ecx, edx /* Check which one has the bigger lExp */ + jl Sub2 + + sub ecx, edx /* Calculate lExp1 - lExp2 */ + sar eax, 1 /* Shift both mantissae 1 bit right */ + sar ebx, 1 + sar ebx, cl /* Shift lMant2 according to exponent difference */ + + sub eax, ebx /* Substract the manrissae */ + jz SubIs0 + + cdq /* Calculate abs(mantissa) */ + xor eax, edx + sub eax, edx + + bsr ecx, eax /* Find most significant bit */ + neg ecx /* and calculate needed normalize shift */ + add ecx, 30 + shl eax, cl + dec ecx + + xor eax, edx /* Go back to original sign */ + sub eax, edx + + mov edx, [ebp + PARAM1] /* Reload pointer to float1 */ + + pop ebx + + mov dword ptr [edx + lMant], eax /* Safe mantissa and adjust exponent */ + sub [edx + lExp], ecx + + pop ebp + ret 8 + +Sub2: + sub edx, ecx /* Calculate lExp2 - lExp1 and put it into ecx */ + mov ecx, edx + + sar ebx, 1 /* Shift both mantissae 1 bit right */ + sar eax, 1 + sar eax, cl /* Shift lMant2 according to exponent difference */ + + sub eax, ebx /* Substract the manrissae */ + jz AddIs0 + + mov ebx, [ebp + PARAM1] /* Reload pointer to float1 */ + add [ebx + lExp], ecx /* Adjust exponent part 1 */ + + cdq /* Calculate abs(mantissa) */ + xor eax, edx + sub eax, edx + + bsr ecx, eax /* Find most significant bit */ + neg ecx /* and calculate needed normalize shift */ + add ecx, 30 + shl eax, cl + dec ecx + + xor eax, edx /* Go back to original sign */ + sub eax, edx + + mov dword ptr [ebx + lMant], eax /* Safe mantissa */ + sub [ebx + lExp], ecx /* Adjust exponent */ + + pop ebx /* Return */ + pop ebp + ret 8 + +SubIs0: + /* Mantissa is 0, so float to (0,0) */ + mov eax, [ebp + PARAM1] + pop ebx + mov dword ptr [eax + lMant], 0 + mov dword ptr [eax + lExp], 0 + pop ebp + ret 8 + +/****************************************************************************** + * VOID + * APIENTRY + * FLOATOBJ_SubFloat(IN OUT PFLOATOBJ pf, IN FLOATL f); + * + * Currently implemented as a wrapper around FLOATOBJ_SetFloat and FLOATOBJ_Sub + */ +_FLOATOBJ_SubFloat@8: +.global _FLOATOBJ_SubFloat@8 + push ebp + mov ebp, esp + sub esp, 8 /* Make room for a FLOATOBJ on the stack */ + + mov eax, [ebp + PARAM2] /* Load f into eax */ + lea ecx, [ebp -4] /* Load pointer to local FLOATOBJ into ecx */ + push eax /* Push f on the stack */ + push ecx /* Push pointer to local FLOATOBJ on the stack */ + call _FLOATOBJ_SetFloat@8 /* Set the FLOATOBJ */ + + lea ecx, [ebp -4] /* Push pointer to local FLOATOBJ on the stack */ + push ecx + push [ebp + PARAM1] /* Push the FLOATOBJ param on the stack */ + call _FLOATOBJ_Sub@8 /* Substract */ + + mov esp, ebp /* Cleanup and return */ + pop ebp + ret 8 + + +/****************************************************************************** + * VOID + * APIENTRY + * FLOATOBJ_SubLong(IN OUT PFLOATOBJ pf, IN LONG l); + * + * Currently implemented as a wrapper around FLOATOBJ_SetLong and FLOATOBJ_Sub + */ +_FLOATOBJ_SubLong@8: +.global _FLOATOBJ_SubLong@8 + push ebp + mov ebp, esp + sub esp, 8 /* Make room for a FLOATOBJ on the stack */ + + mov eax, [ebp + PARAM2] /* Load l into eax */ + lea ecx, [ebp -8] /* Load pointer to local FLOATOBJ into ecx */ + push eax /* Push l on the stack */ + push ecx /* Push pointer to local FLOATOBJ on the stack */ + call _FLOATOBJ_SetLong@8 /* Set the local FLOATOBJ */ + + lea ecx, [ebp -8] /* Push pointer to the local FLOATOBJ on the stack */ + push ecx + push [ebp + PARAM1] /* Push the FLOATOBJ param on the stack */ + call _FLOATOBJ_Sub@8 /* Substract */ + + mov esp, ebp /* Cleanup and return */ + pop ebp + ret 8 + + +/******************************************************************************* + * VOID + * APIENTRY + * FLOATOBJ_Neg(IN OUT PFLOATOBJ pf); + * + */ +_FLOATOBJ_Neg@4: +.global _FLOATOBJ_Neg@4 + push ebp + mov ebp, esp + + mov ecx, [esp + PARAM1] /* Load pf into ecx */ + neg dword ptr [ecx + lMant] /* Negate lMant1 */ + + pop ebp /* Return */ + ret 4 + + +/* EOF */ diff --git a/reactos/subsystems/win32/win32k/include/eng.h b/reactos/subsystems/win32/win32k/include/eng.h index 5ad934cfde9..bbb206f5cc1 100644 --- a/reactos/subsystems/win32/win32k/include/eng.h +++ b/reactos/subsystems/win32/win32k/include/eng.h @@ -22,5 +22,6 @@ IntEngWindowChanged( VOID FASTCALL IntGdiAcquireSemaphore ( HSEMAPHORE hsem ); VOID FASTCALL IntGdiReleaseSemaphore ( HSEMAPHORE hsem ); +ULONGLONG APIENTRY EngGetTickCount(VOID); #endif /* _WIN32K_ENG_H */ diff --git a/reactos/subsystems/win32/win32k/include/hook.h b/reactos/subsystems/win32/win32k/include/hook.h index 221372b615b..0a020bfaed1 100644 --- a/reactos/subsystems/win32/win32k/include/hook.h +++ b/reactos/subsystems/win32/win32k/include/hook.h @@ -33,6 +33,8 @@ typedef struct tagEVENTHOOK PETHREAD Thread; /* Thread owning the event */ UINT eventMin; UINT eventMax; + DWORD idProcess; + DWORD idThread; WINEVENTPROC Proc; /* Event function */ BOOLEAN Ansi; /* Is it an Ansi event? */ ULONG Flags; /* Some internal flags */ diff --git a/reactos/subsystems/win32/win32k/include/menu.h b/reactos/subsystems/win32/win32k/include/menu.h index 1efef0ad8e8..117404a5736 100644 --- a/reactos/subsystems/win32/win32k/include/menu.h +++ b/reactos/subsystems/win32/win32k/include/menu.h @@ -50,8 +50,7 @@ IntGetMenuObject(HMENU hMenu); UserDereferenceObject(MenuObj) BOOL FASTCALL -IntFreeMenuItem(PMENU_OBJECT MenuObject, PMENU_ITEM MenuItem, - BOOL RemoveFromList, BOOL bRecurse); +IntFreeMenuItem(PMENU_OBJECT MenuObject, PMENU_ITEM MenuItem, BOOL bRecurse); BOOL FASTCALL IntRemoveMenuItem(PMENU_OBJECT MenuObject, UINT uPosition, UINT uFlags, diff --git a/reactos/subsystems/win32/win32k/include/msgqueue.h b/reactos/subsystems/win32/win32k/include/msgqueue.h index 8a009dc0d8d..06ee33d3261 100644 --- a/reactos/subsystems/win32/win32k/include/msgqueue.h +++ b/reactos/subsystems/win32/win32k/include/msgqueue.h @@ -4,6 +4,9 @@ #include "hook.h" #define MSQ_HUNG 5000 +#define MSQ_NORMAL 0 +#define MSQ_ISHOOK 1 +#define MSQ_ISEVENT 2 typedef struct _USER_MESSAGE { @@ -25,7 +28,7 @@ typedef struct _USER_SENT_MESSAGE ULONG_PTR CompletionCallbackContext; /* entry in the dispatching list of the sender's message queue */ LIST_ENTRY DispatchingListEntry; - BOOL HookMessage; + INT HookMessage; } USER_SENT_MESSAGE, *PUSER_SENT_MESSAGE; typedef struct _USER_SENT_MESSAGE_NOTIFY @@ -121,7 +124,7 @@ MsqIsHung(PUSER_MESSAGE_QUEUE MessageQueue); NTSTATUS FASTCALL co_MsqSendMessage(PUSER_MESSAGE_QUEUE MessageQueue, HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam, - UINT uTimeout, BOOL Block, BOOL HookMessage, + UINT uTimeout, BOOL Block, INT HookMessage, ULONG_PTR *uResult); PUSER_MESSAGE FASTCALL MsqCreateMessage(LPMSG Msg, BOOLEAN FreeLParam); diff --git a/reactos/subsystems/win32/win32k/include/object.h b/reactos/subsystems/win32/win32k/include/object.h index 33ed973368c..32c32fb2e31 100644 --- a/reactos/subsystems/win32/win32k/include/object.h +++ b/reactos/subsystems/win32/win32k/include/object.h @@ -50,7 +50,8 @@ typedef enum _USER_OBJECT_TYPE otHook = 5, otCallProc = 7, otAccel, - otMonitor = 12 + otMonitor = 12, + otEvent = 15 } USER_OBJECT_TYPE; diff --git a/reactos/subsystems/win32/win32k/include/timer.h b/reactos/subsystems/win32/win32k/include/timer.h index ea99591dfa1..d44e38e1e3a 100644 --- a/reactos/subsystems/win32/win32k/include/timer.h +++ b/reactos/subsystems/win32/win32k/include/timer.h @@ -1,6 +1,18 @@ #ifndef _WIN32K_TIMER_H #define _WIN32K_TIMER_H +typedef struct _TIMER +{ + LIST_ENTRY ptmrList; + PW32THREADINFO pti; + PWINDOW_OBJECT pWnd; // hWnd + UINT_PTR nID; // Specifies a nonzero timer identifier. + INT cmsCountdown; // uElapse + INT cmsRate; // uElapse + FLONG flags; + TIMERPROC pfn; // lpTimerFunc +} TIMER, *PTIMER; + NTSTATUS FASTCALL InitTimerImpl(VOID); BOOL FASTCALL IntKillTimer(HWND Wnd, UINT_PTR IDEvent, BOOL SystemTimer); UINT_PTR FASTCALL IntSetTimer(HWND Wnd, UINT_PTR IDEvent, UINT Elapse, TIMERPROC TimerFunc, BOOL SystemTimer); diff --git a/reactos/subsystems/win32/win32k/include/window.h b/reactos/subsystems/win32/win32k/include/window.h index 3358d31c48f..d501ff757bf 100644 --- a/reactos/subsystems/win32/win32k/include/window.h +++ b/reactos/subsystems/win32/win32k/include/window.h @@ -167,6 +167,8 @@ IntShowOwnedPopups( PWINDOW_OBJECT owner, BOOL fShow ); LRESULT FASTCALL IntDefWindowProc( PWINDOW_OBJECT Window, UINT Msg, WPARAM wParam, LPARAM lParam, BOOL Ansi); +VOID FASTCALL IntNotifyWinEvent(DWORD, PWINDOW_OBJECT, LONG, LONG); + #endif /* _WIN32K_WINDOW_H */ /* EOF */ diff --git a/reactos/subsystems/win32/win32k/ntuser/callback.c b/reactos/subsystems/win32/win32k/ntuser/callback.c index 4cce750245d..c457eb5bfb2 100644 --- a/reactos/subsystems/win32/win32k/ntuser/callback.c +++ b/reactos/subsystems/win32/win32k/ntuser/callback.c @@ -393,8 +393,9 @@ co_IntCallHookProc(INT HookId, case WH_GETMESSAGE: ArgumentLength += sizeof(MSG); break; + case WH_FOREGROUNDIDLE: case WH_KEYBOARD: -// case WH_SHELL: + case WH_SHELL: break; default: DPRINT1("Trying to call unsupported window hook %d\n", HookId); @@ -473,10 +474,9 @@ co_IntCallHookProc(INT HookId, Common->lParam = (LPARAM) (Extra - (PCHAR) Common); // DPRINT1("KHOOK Memory: %x\n",Common); break; + case WH_FOREGROUNDIDLE: case WH_KEYBOARD: - break; -// case WH_SHELL: -// Extra = lParam; + case WH_SHELL: break; } diff --git a/reactos/subsystems/win32/win32k/ntuser/event.c b/reactos/subsystems/win32/win32k/ntuser/event.c index bdec573132e..5c379685435 100644 --- a/reactos/subsystems/win32/win32k/ntuser/event.c +++ b/reactos/subsystems/win32/win32k/ntuser/event.c @@ -4,8 +4,14 @@ #define NDEBUG #include -//static PEVENTTABLE GlobalEvents; +typedef struct _EVENTPACK +{ + PEVENTHOOK pEH; + LONG idObject; + LONG idChild; +} EVENTPACK, *PEVENTPACK; +static PEVENTTABLE GlobalEvents = NULL; /* PRIVATE FUNCTIONS *********************************************************/ @@ -43,13 +49,90 @@ GetMaskFromEvent(DWORD Event) return Ret; } +static +VOID +FASTCALL +IntSetSrvEventMask( UINT EventMin, UINT EventMax) +{ + UINT event; + DPRINT("SetSrvEventMask 1\n"); + for ( event = EventMin; event <= EventMax; event++) + { + if ((event >= EVENT_SYSTEM_SOUND && event <= EVENT_SYSTEM_MINIMIZEEND) || + (event >= EVENT_CONSOLE_CARET && event <= EVENT_CONSOLE_END_APPLICATION) || + (event >= EVENT_OBJECT_CREATE && event <= EVENT_OBJECT_ACCELERATORCHANGE)) + { + gpsi->SrvEventActivity |= GetMaskFromEvent(event); + } + if (event > EVENT_SYSTEM_MINIMIZEEND && event < EVENT_CONSOLE_CARET) + { + event = EVENT_CONSOLE_CARET-1; + gpsi->SrvEventActivity |= GetMaskFromEvent(event); + } + if (event > EVENT_CONSOLE_END_APPLICATION && event < EVENT_OBJECT_CREATE ) + { + event = EVENT_OBJECT_CREATE-1; + gpsi->SrvEventActivity |= GetMaskFromEvent(event); + } + if (event > EVENT_OBJECT_ACCELERATORCHANGE && event < EVENT_MAX) + { + event = EVENT_MAX-1; + gpsi->SrvEventActivity |= GetMaskFromEvent(event); + break; + } + } + if (!gpsi->SrvEventActivity) + gpsi->SrvEventActivity |= SRV_EVENT_RUNNING; // Set something. + DPRINT("SetSrvEventMask 2 : %x\n", gpsi->SrvEventActivity); +} static -DWORD +LRESULT FASTCALL -TimeStamp(VOID) +IntCallLowLevelEvent( PEVENTHOOK pEH, + DWORD event, + HWND hwnd, + LONG idObject, + LONG idChild) { - return (DWORD)((ULONGLONG)SharedUserData->TickCountLowDeprecated * SharedUserData->TickCountMultiplier / 16777216); + NTSTATUS Status; + ULONG_PTR uResult; + EVENTPACK EP; + + EP.pEH = pEH; + EP.idObject = idObject; + EP.idChild = idChild; + + /* FIXME should get timeout from + * HKEY_CURRENT_USER\Control Panel\Desktop\LowLevelHooksTimeout */ + Status = co_MsqSendMessage(((PW32THREAD)pEH->Thread->Tcb.Win32Thread)->MessageQueue, + hwnd, + event, + 0, + (LPARAM)&EP, + 5000, + TRUE, + MSQ_ISEVENT, + &uResult); + + return NT_SUCCESS(Status) ? uResult : 0; +} + + +static +BOOL +FASTCALL +IntRemoveEvent(PEVENTHOOK pEH) +{ + if (pEH) + { + RemoveEntryList(&pEH->Chain); + GlobalEvents->Counts--; + if (!GlobalEvents->Counts) gpsi->SrvEventActivity = 0; + UserDeleteObject(pEH->Self, otEvent); + return TRUE; + } + return FALSE; } /* FUNCTIONS *****************************************************************/ @@ -61,22 +144,73 @@ co_EVENT_CallEvents( DWORD event, LONG idObject, LONG idChild) { + PEVENTHOOK pEH; + LRESULT Result; + PEVENTPACK pEP = (PEVENTPACK)idChild; - PEVENTHOOK peh = UserHeapAlloc(sizeof(EVENTHOOK)); - - if ((gpsi->SrvEventActivity & GetMaskFromEvent(event))) return 0; // No events to run. - - LRESULT Result = co_IntCallEventProc(peh->Self, - event, - hwnd, - idObject, - idChild, - (DWORD)(NtCurrentTeb()->Cid).UniqueThread, - TimeStamp(), - peh->Proc); + pEH = pEP->pEH; + + Result = co_IntCallEventProc( pEH->Self, + event, + hwnd, + pEP->idObject, + pEP->idChild, + (DWORD)(NtCurrentTeb()->Cid).UniqueThread, + (DWORD)EngGetTickCount(), + pEH->Proc); return Result; } +VOID +FASTCALL +IntNotifyWinEvent( + DWORD Event, + PWINDOW_OBJECT Window, + LONG idObject, + LONG idChild) +{ + PEVENTHOOK pEH; + LRESULT Result; + + if (!GlobalEvents->Counts) return; + + pEH = (PEVENTHOOK)GlobalEvents->Events.Flink; + + do + { + UserReferenceObject(pEH); + // Must be inside the event window. + if ( (pEH->eventMin <= Event) && (pEH->eventMax >= Event)) + { + if ((pEH->Thread != PsGetCurrentThread()) && (pEH->Thread != NULL)) + { // if all process || all thread || other thread same process + if (!(pEH->idProcess) || !(pEH->idThread) || + ((DWORD)(NtCurrentTeb()->Cid).UniqueProcess == pEH->idProcess)) + { + Result = IntCallLowLevelEvent(pEH, Event, Window->hSelf, idObject, idChild); + } + }// if ^skip own thread && ((Pid && CPid == Pid && ^skip own process) || all process) + else if ( !(pEH->Flags & WINEVENT_SKIPOWNTHREAD) && + ( ((pEH->idProcess && + (DWORD)(NtCurrentTeb()->Cid).UniqueProcess == pEH->idProcess) && + !(pEH->Flags & WINEVENT_SKIPOWNPROCESS)) || + !pEH->idProcess ) ) + { + Result = co_IntCallEventProc( pEH->Self, + Event, + Window->hSelf, + idObject, + idChild, + (DWORD)(NtCurrentTeb()->Cid).UniqueThread, + (DWORD)EngGetTickCount(), + pEH->Proc); + } + } + UserDereferenceObject(pEH); + + pEH = (PEVENTHOOK)pEH->Chain.Flink; + } while (pEH != (PEVENTHOOK)&GlobalEvents->Events.Flink); +} VOID STDCALL @@ -86,7 +220,23 @@ NtUserNotifyWinEvent( LONG idObject, LONG idChild) { - UNIMPLEMENTED + PWINDOW_OBJECT Window = NULL; + USER_REFERENCE_ENTRY Ref; + UserEnterExclusive(); + + /* Validate input */ + if (hWnd && (hWnd != INVALID_HANDLE_VALUE) && !(Window = UserGetWindowObject(hWnd))) + { + return; + } + + if (gpsi->SrvEventActivity & GetMaskFromEvent(Event)) + { + UserRefObjectCo(Window, &Ref); + IntNotifyWinEvent( Event, Window, idObject, idChild); + UserDerefObjectCo(Window); + } + UserLeave(); } HWINEVENTHOOK @@ -101,23 +251,147 @@ NtUserSetWinEventHook( DWORD idThread, UINT dwflags) { - gpsi->SrvEventActivity |= GetMaskFromEvent(eventMin); - gpsi->SrvEventActivity &= ~GetMaskFromEvent(eventMin); + PEVENTHOOK pEH; + HWINEVENTHOOK Ret = NULL; + UNICODE_STRING ModuleName; + NTSTATUS Status; + HANDLE Handle; + PETHREAD Thread = NULL; - UNIMPLEMENTED + UserEnterExclusive(); - return 0; + if ( !GlobalEvents ) + { + GlobalEvents = ExAllocatePoolWithTag(PagedPool, sizeof(EVENTTABLE), TAG_HOOK); + GlobalEvents->Counts = 0; + InitializeListHead(&GlobalEvents->Events); + } + + if (eventMin > eventMax) + { + SetLastWin32Error(ERROR_INVALID_HOOK_FILTER); + goto SetEventExit; + } + + if (!lpfnWinEventProc) + { + SetLastWin32Error(ERROR_INVALID_FILTER_PROC); + goto SetEventExit; + } + + if ((dwflags & WINEVENT_INCONTEXT) && !hmodWinEventProc) + { + SetLastWin32Error(ERROR_HOOK_NEEDS_HMOD); + goto SetEventExit; + } + + if (idThread) + { + Status = PsLookupThreadByThreadId((HANDLE)(DWORD_PTR)idThread, &Thread); + if (!NT_SUCCESS(Status)) + { + SetLastWin32Error(ERROR_INVALID_THREAD_ID); + goto SetEventExit; + } + } + + pEH = UserCreateObject(gHandleTable, &Handle, otEvent, sizeof(EVENTHOOK)); + if (pEH) + { + InsertTailList(&GlobalEvents->Events, &pEH->Chain); + GlobalEvents->Counts++; + + pEH->Self = Handle; + if (Thread) + pEH->Thread = Thread; + else + pEH->Thread = PsGetCurrentThread(); + pEH->eventMin = eventMin; + pEH->eventMax = eventMax; + pEH->idProcess = idProcess; + pEH->idThread = idThread; + pEH->Ansi = FALSE; + pEH->Flags = dwflags; + + + if (NULL != hmodWinEventProc) + { + Status = MmCopyFromCaller(&ModuleName, + puString, + sizeof(UNICODE_STRING)); + + if (! NT_SUCCESS(Status)) + { + UserDereferenceObject(pEH); + IntRemoveEvent(pEH); + SetLastNtError(Status); + goto SetEventExit; + } + + pEH->ModuleName.Buffer = ExAllocatePoolWithTag(PagedPool, + ModuleName.MaximumLength, + TAG_HOOK); + + if (NULL == pEH->ModuleName.Buffer) + { + UserDereferenceObject(pEH); + IntRemoveEvent(pEH); + SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY); + goto SetEventExit; + } + + pEH->ModuleName.MaximumLength = ModuleName.MaximumLength; + + Status = MmCopyFromCaller(pEH->ModuleName.Buffer, + ModuleName.Buffer, + ModuleName.MaximumLength); + + if (! NT_SUCCESS(Status)) + { + ExFreePool(pEH->ModuleName.Buffer); + UserDereferenceObject(pEH); + IntRemoveEvent(pEH); + SetLastNtError(Status); + goto SetEventExit; + } + + pEH->ModuleName.Length = ModuleName.Length; + + pEH->Proc = (void *)((char *)lpfnWinEventProc - (char *)hmodWinEventProc); + } + else + pEH->Proc = lpfnWinEventProc; + + UserDereferenceObject(pEH); + + Ret = Handle; + IntSetSrvEventMask( eventMin, eventMax); + } + +SetEventExit: + if (Thread) ObDereferenceObject(Thread); + UserLeave(); + return Ret; } - BOOL STDCALL NtUserUnhookWinEvent( HWINEVENTHOOK hWinEventHook) { - UNIMPLEMENTED + PEVENTHOOK pEH; + BOOL Ret = FALSE; - return FALSE; + UserEnterExclusive(); + + pEH = (PEVENTHOOK)UserGetObject(gHandleTable, hWinEventHook, otEvent); + if (pEH) + { + Ret = IntRemoveEvent(pEH); + } + + UserLeave(); + return Ret; } /* EOF */ diff --git a/reactos/subsystems/win32/win32k/ntuser/hook.c b/reactos/subsystems/win32/win32k/ntuser/hook.c index 82504674151..4bd3f19e323 100644 --- a/reactos/subsystems/win32/win32k/ntuser/hook.c +++ b/reactos/subsystems/win32/win32k/ntuser/hook.c @@ -267,15 +267,22 @@ IntReleaseHookChain(PHOOKTABLE Table, int HookId, PWINSTATION_OBJECT WinStaObj) } static LRESULT FASTCALL -IntCallLowLevelHook(INT HookId, INT Code, WPARAM wParam, LPARAM lParam, PHOOK Hook) +IntCallLowLevelHook(PHOOK Hook, INT Code, WPARAM wParam, LPARAM lParam) { NTSTATUS Status; ULONG_PTR uResult; /* FIXME should get timeout from * HKEY_CURRENT_USER\Control Panel\Desktop\LowLevelHooksTimeout */ - Status = co_MsqSendMessage(((PW32THREAD)Hook->Thread->Tcb.Win32Thread)->MessageQueue, (HWND)(INT_PTR) Code, HookId, - wParam, lParam, 5000, TRUE, TRUE, &uResult); + Status = co_MsqSendMessage(((PW32THREAD)Hook->Thread->Tcb.Win32Thread)->MessageQueue, + (HWND)(UINT_PTR)Code, + Hook->HookId, + wParam, + lParam, + 5000, + TRUE, + MSQ_ISHOOK, + &uResult); return NT_SUCCESS(Status) ? uResult : 0; } @@ -317,17 +324,10 @@ co_HOOK_CallHooks(INT HookId, INT Code, WPARAM wParam, LPARAM lParam) } } - if (Hook->Thread != PsGetCurrentThread() - && (WH_KEYBOARD_LL == HookId || WH_MOUSE_LL == HookId)) - { - DPRINT("Calling hook in owning thread\n"); - return IntCallLowLevelHook(HookId, Code, wParam, lParam, Hook); - } - if ((Hook->Thread != PsGetCurrentThread()) && (Hook->Thread != NULL)) { - DPRINT1("Calling hooks in other threads not implemented yet"); - return 0; + // Post it in message queue. + return IntCallLowLevelHook(Hook, Code, wParam, lParam); } Table->Counts[HOOKID_TO_INDEX(HookId)]++; @@ -340,8 +340,13 @@ co_HOOK_CallHooks(INT HookId, INT Code, WPARAM wParam, LPARAM lParam) SaveHook = ClientInfo->phkCurrent; ClientInfo->phkCurrent = Hook; // Load the call. - Result = co_IntCallHookProc(HookId, Code, wParam, lParam, Hook->Proc, - Hook->Ansi, &Hook->ModuleName); + Result = co_IntCallHookProc( HookId, + Code, + wParam, + lParam, + Hook->Proc, + Hook->Ansi, + &Hook->ModuleName); ClientInfo->phkCurrent = SaveHook; @@ -413,9 +418,19 @@ static LRESULT FASTCALL co_HOOK_CallHookNext(PHOOK Hook, INT Code, WPARAM wParam, LPARAM lParam) { + if ((Hook->Thread != PsGetCurrentThread()) && (Hook->Thread != NULL)) + { + DPRINT1("CALLING HOOK from another Thread. %d\n",Hook->HookId); + return IntCallLowLevelHook(Hook, Code, wParam, lParam); + } DPRINT("CALLING HOOK %d\n",Hook->HookId); - return co_IntCallHookProc(Hook->HookId, Code, wParam, lParam, Hook->Proc, - Hook->Ansi, &Hook->ModuleName); + return co_IntCallHookProc(Hook->HookId, + Code, + wParam, + lParam, + Hook->Proc, + Hook->Ansi, + &Hook->ModuleName); } @@ -959,12 +974,18 @@ NtUserSetWindowsHookEx( DPRINT("Enter NtUserSetWindowsHookEx\n"); UserEnterExclusive(); - if (HookId < WH_MINHOOK || WH_MAXHOOK < HookId || NULL == HookProc) + if (HookId < WH_MINHOOK || WH_MAXHOOK < HookId ) { SetLastWin32Error(ERROR_INVALID_PARAMETER); RETURN( NULL); } + if (!HookProc) + { + SetLastWin32Error(ERROR_INVALID_FILTER_PROC); + RETURN( NULL); + } + ClientInfo = GetWin32ClientInfo(); if (ThreadId) /* thread-local hook */ @@ -1014,7 +1035,7 @@ NtUserSetWindowsHookEx( } else if (NULL == Mod) { - SetLastWin32Error(ERROR_INVALID_PARAMETER); + SetLastWin32Error(ERROR_HOOK_NEEDS_HMOD); RETURN( NULL); } else @@ -1024,15 +1045,10 @@ NtUserSetWindowsHookEx( Global = TRUE; } - /* We only (partially) support local WH_CBT hooks and - * WH_KEYBOARD_LL, WH_MOUSE_LL and WH_GETMESSAGE hooks for now - */ - if (Global || + if ( Global || WH_DEBUG == HookId || WH_JOURNALPLAYBACK == HookId || - WH_JOURNALRECORD == HookId || - WH_FOREGROUNDIDLE == HookId || - WH_SHELL == HookId) + WH_JOURNALRECORD == HookId) { #if 0 /* Removed to get winEmbed working again */ UNIMPLEMENTED @@ -1115,7 +1131,7 @@ NtUserSetWindowsHookEx( ModuleName.MaximumLength); if (! NT_SUCCESS(Status)) { - ExFreePool(Hook->ModuleName.Buffer); + ExFreePool(Hook->ModuleName.Buffer); UserDereferenceObject(Hook); IntRemoveHook(Hook, WinStaObj, FALSE); if (NULL != Thread) @@ -1127,9 +1143,12 @@ NtUserSetWindowsHookEx( RETURN( NULL); } Hook->ModuleName.Length = ModuleName.Length; + /* make proc relative to the module base */ + Hook->Proc = (void *)((char *)HookProc - (char *)Mod); } + else + Hook->Proc = HookProc; - Hook->Proc = HookProc; Hook->Ansi = Ansi; Handle = Hook->Self; diff --git a/reactos/subsystems/win32/win32k/ntuser/keyboard.c b/reactos/subsystems/win32/win32k/ntuser/keyboard.c index 32690487c0e..c035d8ca4f9 100644 --- a/reactos/subsystems/win32/win32k/ntuser/keyboard.c +++ b/reactos/subsystems/win32/win32k/ntuser/keyboard.c @@ -711,25 +711,32 @@ NtUserToUnicodeEx( DPRINT1( "Couldn't copy key state from caller.\n" ); RETURN(0); } - OutPwszBuff = ExAllocatePoolWithTag(NonPagedPool,sizeof(WCHAR) * cchBuff, TAG_STRING); - if( !OutPwszBuff ) + + /* Virtual code is correct and key is pressed currently? */ + if (wVirtKey < 0x100 && KeyStateBuf[wVirtKey] & KS_DOWN_BIT) { - DPRINT1( "ExAllocatePool(%d) failed\n", sizeof(WCHAR) * cchBuff); - RETURN(0); + OutPwszBuff = ExAllocatePoolWithTag(NonPagedPool,sizeof(WCHAR) * cchBuff, TAG_STRING); + if( !OutPwszBuff ) + { + DPRINT1( "ExAllocatePool(%d) failed\n", sizeof(WCHAR) * cchBuff); + RETURN(0); + } + RtlZeroMemory( OutPwszBuff, sizeof( WCHAR ) * cchBuff ); + + ret = ToUnicodeInner( wVirtKey, + wScanCode, + KeyStateBuf, + OutPwszBuff, + cchBuff, + wFlags, + PsGetCurrentThreadWin32Thread() ? + PsGetCurrentThreadWin32Thread()->KeyboardLayout->KBTables : 0 ); + + MmCopyToCaller(pwszBuff,OutPwszBuff,sizeof(WCHAR)*cchBuff); + ExFreePool(OutPwszBuff); } - RtlZeroMemory( OutPwszBuff, sizeof( WCHAR ) * cchBuff ); - - ret = ToUnicodeInner( wVirtKey, - wScanCode, - KeyStateBuf, - OutPwszBuff, - cchBuff, - wFlags, - PsGetCurrentThreadWin32Thread() ? - PsGetCurrentThreadWin32Thread()->KeyboardLayout->KBTables : 0 ); - - MmCopyToCaller(pwszBuff,OutPwszBuff,sizeof(WCHAR)*cchBuff); - ExFreePool(OutPwszBuff); + else + ret = 0; RETURN(ret); diff --git a/reactos/subsystems/win32/win32k/ntuser/menu.c b/reactos/subsystems/win32/win32k/ntuser/menu.c index 50c50d78c64..4c23b30449f 100644 --- a/reactos/subsystems/win32/win32k/ntuser/menu.c +++ b/reactos/subsystems/win32/win32k/ntuser/menu.c @@ -206,27 +206,9 @@ IntGetMenuObject(HMENU hMenu) } BOOL FASTCALL -IntFreeMenuItem(PMENU_OBJECT Menu, PMENU_ITEM MenuItem, - BOOL RemoveFromList, BOOL bRecurse) +IntFreeMenuItem(PMENU_OBJECT Menu, PMENU_ITEM MenuItem, BOOL bRecurse) { FreeMenuText(MenuItem); - if(RemoveFromList) - { - PMENU_ITEM CurItem = Menu->MenuItemList; - while(CurItem) - { - if (CurItem->Next == MenuItem) - { - CurItem->Next = MenuItem->Next; - break; - } - else - { - CurItem = CurItem->Next; - } - } - Menu->MenuInfo.MenuItemCount--; - } if(bRecurse && MenuItem->hSubMenu) { PMENU_OBJECT SubMenu; @@ -249,7 +231,7 @@ IntRemoveMenuItem(PMENU_OBJECT Menu, UINT uPosition, UINT uFlags, BOOL bRecurse) { PMENU_ITEM PrevMenuItem, MenuItem; - if(IntGetMenuItemByFlag(Menu, uPosition, uFlags, NULL, &MenuItem, + if(IntGetMenuItemByFlag(Menu, uPosition, uFlags, &Menu, &MenuItem, &PrevMenuItem) > -1) { if(MenuItem) @@ -260,7 +242,8 @@ IntRemoveMenuItem(PMENU_OBJECT Menu, UINT uPosition, UINT uFlags, { Menu->MenuItemList = MenuItem->Next; } - return IntFreeMenuItem(Menu, MenuItem, TRUE, bRecurse); + Menu->MenuInfo.MenuItemCount--; + return IntFreeMenuItem(Menu, MenuItem, bRecurse); } } return FALSE; @@ -275,7 +258,7 @@ IntDeleteMenuItems(PMENU_OBJECT Menu, BOOL bRecurse) while(CurItem) { NextItem = CurItem->Next; - IntFreeMenuItem(Menu, CurItem, FALSE, bRecurse); + IntFreeMenuItem(Menu, CurItem, bRecurse); CurItem = NextItem; res++; } @@ -651,56 +634,25 @@ IntInsertMenuItemToList(PMENU_OBJECT Menu, PMENU_ITEM MenuItem, int pos) UINT npos = 0; CurItem = Menu->MenuItemList; - if(pos <= -1) + while(CurItem && (pos != 0)) { - while(CurItem) - { - LastItem = CurItem; - CurItem = CurItem->Next; - npos++; - } - } - else - { - while(CurItem && (pos > 0)) - { - LastItem = CurItem; - CurItem = CurItem->Next; - pos--; - npos++; - } + LastItem = CurItem; + CurItem = CurItem->Next; + pos--; + npos++; } - if(CurItem) + if(LastItem) { - if(LastItem) - { - /* insert the item before CurItem */ - MenuItem->Next = LastItem->Next; - LastItem->Next = MenuItem; - } - else - { - /* insert at the beginning */ - Menu->MenuItemList = MenuItem; - MenuItem->Next = CurItem; - } + /* insert the item after LastItem */ + LastItem->Next = MenuItem; } else { - if(LastItem) - { - /* append item */ - LastItem->Next = MenuItem; - MenuItem->Next = NULL; - } - else - { - /* insert first item */ - Menu->MenuItemList = MenuItem; - MenuItem->Next = NULL; - } + /* insert at the beginning */ + Menu->MenuItemList = MenuItem; } + MenuItem->Next = CurItem; Menu->MenuInfo.MenuItemCount++; return npos; @@ -1011,29 +963,18 @@ IntEnableMenuItem(PMENU_OBJECT MenuObject, UINT uIDEnableItem, UINT uEnable) if(uEnable & MF_DISABLED) { - if(!(MenuItem->fState & MF_DISABLED)) - MenuItem->fState |= MF_DISABLED; - if(uEnable & MF_GRAYED) - { - if(!(MenuItem->fState & MF_GRAYED)) - MenuItem->fState |= MF_GRAYED; - } + MenuItem->fState |= MF_DISABLED; + MenuItem->fState |= uEnable & MF_GRAYED; } else { if(uEnable & MF_GRAYED) { - if(!(MenuItem->fState & MF_GRAYED)) - MenuItem->fState |= MF_GRAYED; - if(!(MenuItem->fState & MF_DISABLED)) - MenuItem->fState |= MF_DISABLED; + MenuItem->fState |= (MF_GRAYED | MF_DISABLED); } else { - if(MenuItem->fState & MF_DISABLED) - MenuItem->fState ^= MF_DISABLED; - if(MenuItem->fState & MF_GRAYED) - MenuItem->fState ^= MF_GRAYED; + MenuItem->fState &= ~(MF_DISABLED | MF_GRAYED); } } @@ -1155,13 +1096,11 @@ IntCheckMenuItem(PMENU_OBJECT MenuObject, UINT uIDCheckItem, UINT uCheck) res = (DWORD)(MenuItem->fState & MF_CHECKED); if(uCheck & MF_CHECKED) { - if(!(MenuItem->fState & MF_CHECKED)) - MenuItem->fState |= MF_CHECKED; + MenuItem->fState |= MF_CHECKED; } else { - if(MenuItem->fState & MF_CHECKED) - MenuItem->fState ^= MF_CHECKED; + MenuItem->fState &= ~MF_CHECKED; } return (DWORD)res; @@ -1180,13 +1119,11 @@ IntHiliteMenuItem(PWINDOW_OBJECT WindowObject, PMENU_OBJECT MenuObject, if(uHilite & MF_HILITE) { - if(!(MenuItem->fState & MF_HILITE)) - MenuItem->fState |= MF_HILITE; + MenuItem->fState |= MF_HILITE; } else { - if(MenuItem->fState & MF_HILITE) - MenuItem->fState ^= MF_HILITE; + MenuItem->fState &= ~MF_HILITE; } /* FIXME - update the window's menu */ @@ -1204,8 +1141,7 @@ UserSetMenuDefaultItem(PMENU_OBJECT MenuObject, UINT uItem, UINT fByPos) { while(MenuItem) { - if(MenuItem->fState & MFS_DEFAULT) - MenuItem->fState ^= MFS_DEFAULT; + MenuItem->fState &= ~MFS_DEFAULT; MenuItem = MenuItem->Next; } return TRUE; @@ -1218,14 +1154,12 @@ UserSetMenuDefaultItem(PMENU_OBJECT MenuObject, UINT uItem, UINT fByPos) { if(pos == uItem) { - if(!(MenuItem->fState & MFS_DEFAULT)) - MenuItem->fState |= MFS_DEFAULT; + MenuItem->fState |= MFS_DEFAULT; ret = TRUE; } else { - if(MenuItem->fState & MFS_DEFAULT) - MenuItem->fState ^= MFS_DEFAULT; + MenuItem->fState &= ~MFS_DEFAULT; } pos++; MenuItem = MenuItem->Next; @@ -1237,14 +1171,12 @@ UserSetMenuDefaultItem(PMENU_OBJECT MenuObject, UINT uItem, UINT fByPos) { if(!ret && (MenuItem->wID == uItem)) { - if(!(MenuItem->fState & MFS_DEFAULT)) - MenuItem->fState |= MFS_DEFAULT; + MenuItem->fState |= MFS_DEFAULT; ret = TRUE; } else { - if(MenuItem->fState & MFS_DEFAULT) - MenuItem->fState ^= MFS_DEFAULT; + MenuItem->fState &= ~MFS_DEFAULT; } MenuItem = MenuItem->Next; } diff --git a/reactos/subsystems/win32/win32k/ntuser/message.c b/reactos/subsystems/win32/win32k/ntuser/message.c index 70ae5fd93f4..0889c717191 100644 --- a/reactos/subsystems/win32/win32k/ntuser/message.c +++ b/reactos/subsystems/win32/win32k/ntuser/message.c @@ -295,6 +295,53 @@ UnpackParam(LPARAM lParamPacked, UINT Msg, WPARAM wParam, LPARAM lParam) return STATUS_INVALID_PARAMETER; } +static +VOID +FASTCALL +IntCallWndProc +( PWINDOW_OBJECT Window, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) +{ + BOOL SameThread = FALSE; + + if (Window->ti == PsGetCurrentThreadWin32Thread()->ThreadInfo) + SameThread = TRUE; + + if ((!SameThread && (Window->ti->Hooks & HOOKID_TO_FLAG(WH_CALLWNDPROC))) || + (SameThread && ISITHOOKED(WH_CALLWNDPROC)) ) + { + CWPSTRUCT CWP; + CWP.hwnd = hWnd; + CWP.message = Msg; + CWP.wParam = wParam; + CWP.lParam = lParam; + co_HOOK_CallHooks( WH_CALLWNDPROC, HC_ACTION, SameThread, (LPARAM)&CWP ); + } +} +static +VOID +FASTCALL +IntCallWndProcRet +( PWINDOW_OBJECT Window, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam, LRESULT *uResult) +{ + BOOL SameThread = FALSE; + + if (Window->ti == PsGetCurrentThreadWin32Thread()->ThreadInfo) + SameThread = TRUE; + + if ((!SameThread && (Window->ti->Hooks & HOOKID_TO_FLAG(WH_CALLWNDPROCRET))) || + (SameThread && ISITHOOKED(WH_CALLWNDPROCRET)) ) + { + CWPRETSTRUCT CWPR; + CWPR.hwnd = hWnd; + CWPR.message = Msg; + CWPR.wParam = wParam; + CWPR.lParam = lParam; + CWPR.lResult = *uResult; + co_HOOK_CallHooks( WH_CALLWNDPROCRET, HC_ACTION, SameThread, (LPARAM)&CWPR ); + } +} + + BOOL STDCALL NtUserCallMsgFilter( @@ -1429,7 +1476,6 @@ co_IntSendMessageTimeoutSingle(HWND hWnd, PW32THREAD Win32Thread; DECLARE_RETURN(LRESULT); USER_REFERENCE_ENTRY Ref; - BOOL SameThread = FALSE; if (!(Window = UserGetWindowObject(hWnd))) { @@ -1440,20 +1486,8 @@ co_IntSendMessageTimeoutSingle(HWND hWnd, Win32Thread = PsGetCurrentThreadWin32Thread(); - if (Window->ti == Win32Thread->ThreadInfo) - SameThread = TRUE; + IntCallWndProc( Window, hWnd, Msg, wParam, lParam); - if ((!SameThread && (Window->ti->Hooks & HOOKID_TO_FLAG(WH_CALLWNDPROC))) || - (SameThread && ISITHOOKED(WH_CALLWNDPROC)) ) - { - CWPSTRUCT CWP; - CWP.hwnd = hWnd; - CWP.message = Msg; - CWP.wParam = wParam; - CWP.lParam = lParam; - co_HOOK_CallHooks( WH_CALLWNDPROC, HC_ACTION, SameThread, (LPARAM)&CWP ); - } - if (NULL != Win32Thread && Window->MessageQueue == Win32Thread->MessageQueue) { @@ -1488,17 +1522,7 @@ co_IntSendMessageTimeoutSingle(HWND hWnd, *uResult = Result; } - if ((!SameThread && (Window->ti->Hooks & HOOKID_TO_FLAG(WH_CALLWNDPROCRET))) || - (SameThread && ISITHOOKED(WH_CALLWNDPROCRET)) ) - { - CWPRETSTRUCT CWPR; - CWPR.hwnd = hWnd; - CWPR.message = Msg; - CWPR.wParam = wParam; - CWPR.lParam = lParam; - CWPR.lResult = Result; - co_HOOK_CallHooks( WH_CALLWNDPROCRET, HC_ACTION, SameThread, (LPARAM)&CWPR ); - } + IntCallWndProcRet( Window, hWnd, Msg, wParam, lParam, (LRESULT *)uResult); if (! NT_SUCCESS(UnpackParam(lParamPacked, Msg, wParam, lParam))) { @@ -1531,24 +1555,14 @@ co_IntSendMessageTimeoutSingle(HWND hWnd, lParam, uTimeout, (uFlags & SMTO_BLOCK), - FALSE, + MSQ_NORMAL, uResult); } while ((STATUS_TIMEOUT == Status) && (uFlags & SMTO_NOTIMEOUTIFNOTHUNG) && !MsqIsHung(Window->MessageQueue)); - if ((!SameThread && (Window->ti->Hooks & HOOKID_TO_FLAG(WH_CALLWNDPROCRET))) || - (SameThread && ISITHOOKED(WH_CALLWNDPROCRET)) ) - { - CWPRETSTRUCT CWPR; - CWPR.hwnd = hWnd; - CWPR.message = Msg; - CWPR.wParam = wParam; - CWPR.lParam = lParam; - CWPR.lResult = *uResult; - co_HOOK_CallHooks( WH_CALLWNDPROCRET, HC_ACTION, SameThread, (LPARAM)&CWPR ); - } + IntCallWndProcRet( Window, hWnd, Msg, wParam, lParam, (LRESULT *)uResult); if (STATUS_TIMEOUT == Status) { @@ -1703,6 +1717,8 @@ co_IntDoSendMessage(HWND hWnd, Info.Ansi = ! Window->Wnd->Unicode; } + IntCallWndProc( Window, hWnd, Msg, wParam, lParam); + if (Window->Wnd->IsSystem) { Info.Proc = (!Info.Ansi ? Window->Wnd->WndProc : Window->Wnd->WndProcExtra); @@ -1712,6 +1728,9 @@ co_IntDoSendMessage(HWND hWnd, Info.Ansi = !Window->Wnd->Unicode; Info.Proc = Window->Wnd->WndProc; } + + IntCallWndProcRet( Window, hWnd, Msg, wParam, lParam, &Result); + } else { diff --git a/reactos/subsystems/win32/win32k/ntuser/msgqueue.c b/reactos/subsystems/win32/win32k/ntuser/msgqueue.c index ac2bc371555..d472d8ec2cb 100644 --- a/reactos/subsystems/win32/win32k/ntuser/msgqueue.c +++ b/reactos/subsystems/win32/win32k/ntuser/msgqueue.c @@ -929,13 +929,20 @@ co_MsqDispatchOneSentMessage(PUSER_MESSAGE_QUEUE MessageQueue) InsertTailList(&MessageQueue->LocalDispatchingMessagesHead, &Message->ListEntry); - if (Message->HookMessage) + if (Message->HookMessage == MSQ_ISHOOK) { Result = co_HOOK_CallHooks(Message->Msg.message, (INT)(INT_PTR)Message->Msg.hwnd, Message->Msg.wParam, Message->Msg.lParam); } + else if (Message->HookMessage == MSQ_ISEVENT) + { + Result = co_EVENT_CallEvents( Message->Msg.message, + Message->Msg.hwnd, + (LONG) Message->Msg.wParam, + (LONG) Message->Msg.lParam); + } else { /* Call the window procedure. */ @@ -1090,7 +1097,7 @@ MsqSendNotifyMessage(PUSER_MESSAGE_QUEUE MessageQueue, NTSTATUS FASTCALL co_MsqSendMessage(PUSER_MESSAGE_QUEUE MessageQueue, HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam, - UINT uTimeout, BOOL Block, BOOL HookMessage, + UINT uTimeout, BOOL Block, INT HookMessage, ULONG_PTR *uResult) { PUSER_SENT_MESSAGE Message; diff --git a/reactos/subsystems/win32/win32k/ntuser/painting.c b/reactos/subsystems/win32/win32k/ntuser/painting.c index 121028da0ec..e5bd88fadd0 100644 --- a/reactos/subsystems/win32/win32k/ntuser/painting.c +++ b/reactos/subsystems/win32/win32k/ntuser/painting.c @@ -770,7 +770,6 @@ NtUserBeginPaint(HWND hWnd, PAINTSTRUCT* UnsafePs) { PWINDOW_OBJECT Window = NULL; PAINTSTRUCT Ps; - PROSRGNDATA Rgn; NTSTATUS Status; DECLARE_RETURN(HDC); USER_REFERENCE_ENTRY Ref; @@ -816,23 +815,7 @@ NtUserBeginPaint(HWND hWnd, PAINTSTRUCT* UnsafePs) if (Window->UpdateRegion != NULL) { MsqDecPaintCountQueue(Window->MessageQueue); - Rgn = REGION_LockRgn(Window->UpdateRegion); - if (NULL != Rgn) - { - REGION_GetRgnBox(Rgn, &Ps.rcPaint); - REGION_UnlockRgn(Rgn); - IntGdiIntersectRect(&Ps.rcPaint, &Ps.rcPaint, &Window->Wnd->ClientRect); - if (! IntGdiIsEmptyRect(&Ps.rcPaint)) - { - IntGdiOffsetRect(&Ps.rcPaint, - -Window->Wnd->ClientRect.left, - -Window->Wnd->ClientRect.top); - } - } - else - { - IntGetClientRect(Window, &Ps.rcPaint); - } + GdiGetClipBox(Ps.hdc, &Ps.rcPaint); GDIOBJ_SetOwnership(Window->UpdateRegion, PsGetCurrentProcess()); /* The region is part of the dc now and belongs to the process! */ Window->UpdateRegion = NULL; diff --git a/reactos/subsystems/win32/win32k/ntuser/timer.c b/reactos/subsystems/win32/win32k/ntuser/timer.c index c61cd1f7f04..9db2c4ca6a9 100644 --- a/reactos/subsystems/win32/win32k/ntuser/timer.c +++ b/reactos/subsystems/win32/win32k/ntuser/timer.c @@ -16,12 +16,11 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id$ - * +/* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel * PURPOSE: Window timers messages - * FILE: subsys/win32k/ntuser/timer.c + * FILE: subsystems/win32/win32k/ntuser/timer.c * PROGRAMER: Gunnar * Thomas Weidenmueller (w3seek@users.sourceforge.net) * REVISION HISTORY: 10/04/2003 Implemented System Timers @@ -37,6 +36,8 @@ /* GLOBALS *******************************************************************/ +static PTIMER FirstpTmr = NULL; + /* Windows 2000 has room for 32768 window-less timers */ #define NUM_WINDOW_LESS_TIMERS 1024 @@ -148,20 +149,40 @@ IntSetTimer(HWND Wnd, UINT_PTR IDEvent, UINT Elapse, TIMERPROC TimerFunc, BOOL S BOOL FASTCALL IntKillTimer(HWND Wnd, UINT_PTR IDEvent, BOOL SystemTimer) { + PWINDOW_OBJECT Window = NULL; + DPRINT("IntKillTimer wnd %x id %p systemtimer %s\n", Wnd, IDEvent, SystemTimer ? "TRUE" : "FALSE"); - if (! MsqKillTimer(PsGetCurrentThreadWin32Thread()->MessageQueue, Wnd, - IDEvent, SystemTimer ? WM_SYSTIMER : WM_TIMER)) + if (Wnd) { - DPRINT1("Unable to locate timer in message queue\n"); - SetLastWin32Error(ERROR_INVALID_PARAMETER); - return FALSE; + Window = UserGetWindowObject(Wnd); + + if (! MsqKillTimer(PsGetCurrentThreadWin32Thread()->MessageQueue, Wnd, + IDEvent, SystemTimer ? WM_SYSTIMER : WM_TIMER)) + { + // Give it another chance to find the timer. + if (Window && !( MsqKillTimer(Window->MessageQueue, Wnd, + IDEvent, SystemTimer ? WM_SYSTIMER : WM_TIMER))) + { + DPRINT1("Unable to locate timer in message queue for Window.\n"); + SetLastWin32Error(ERROR_INVALID_PARAMETER); + return FALSE; + } + } } /* window-less timer? */ if ((Wnd == NULL) && ! SystemTimer) { + if (! MsqKillTimer(PsGetCurrentThreadWin32Thread()->MessageQueue, Wnd, + IDEvent, SystemTimer ? WM_SYSTIMER : WM_TIMER)) + { + DPRINT1("Unable to locate timer in message queue for Window-less timer.\n"); + SetLastWin32Error(ERROR_INVALID_PARAMETER); + return FALSE; + } + /* Release the id */ IntLockWindowlessTimerBitmap(); @@ -195,6 +216,12 @@ InitTimerImpl(VOID) /* yes we need this, since ExAllocatePool isn't supposed to zero out allocated memory */ RtlClearAllBits(&WindowLessTimersBitMap); + if (!FirstpTmr) + { + FirstpTmr = ExAllocatePoolWithTag(PagedPool, sizeof(TIMER), TAG_TIMERBMP); + if (FirstpTmr) InitializeListHead(&FirstpTmr->ptmrList); + } + return STATUS_SUCCESS; } diff --git a/reactos/subsystems/win32/win32k/ntuser/window.c b/reactos/subsystems/win32/win32k/ntuser/window.c index bc1a7ac23bb..d56010a17d7 100644 --- a/reactos/subsystems/win32/win32k/ntuser/window.c +++ b/reactos/subsystems/win32/win32k/ntuser/window.c @@ -787,7 +787,7 @@ IntGetSystemMenu(PWINDOW_OBJECT Window, BOOL bRevert, BOOL RetMenu) Menu = UserGetMenuObject(Window->SystemMenu); if(Menu) { - IntDestroyMenuObject(Menu, FALSE, TRUE); + IntDestroyMenuObject(Menu, TRUE, TRUE); Window->SystemMenu = (HMENU)0; } } @@ -2059,7 +2059,7 @@ AllocErr: RETURN((HWND)0); } #if 0 - Result = co_EVENT_CallEvents(EVENT_OBJECT_CREATE, Window->hSelf, OBJID_WINDOW, 0); + Result = IntNotifyWinEvent(EVENT_OBJECT_CREATE, Window, OBJID_WINDOW, 0); if (Result == (LRESULT)-1) { diff --git a/reactos/subsystems/win32/win32k/objects/color.c b/reactos/subsystems/win32/win32k/objects/color.c index 3703a7ab3c7..680047985b2 100644 --- a/reactos/subsystems/win32/win32k/objects/color.c +++ b/reactos/subsystems/win32/win32k/objects/color.c @@ -436,18 +436,16 @@ IntGetSystemPaletteEntries(HDC hDC, { if (pe != NULL) { - UINT CopyEntries; - - if (StartIndex + Entries < palGDI->NumColors) - CopyEntries = StartIndex + Entries; - else - CopyEntries = palGDI->NumColors - StartIndex; + if (StartIndex >= palGDI->NumColors) + Entries = 0; + else if (Entries > palGDI->NumColors - StartIndex) + Entries = palGDI->NumColors - StartIndex; memcpy(pe, palGDI->IndexedColors + StartIndex, - CopyEntries * sizeof(pe[0])); + Entries * sizeof(pe[0])); - Ret = CopyEntries; + Ret = Entries; } else { @@ -837,6 +835,7 @@ NtGdiDoPalette( IN BOOL bInbound) { LONG ret; + LPVOID pEntries = NULL; /* FIXME: Handle bInbound correctly */ @@ -846,58 +845,76 @@ NtGdiDoPalette( return 0; } - _SEH_TRY + if (pUnsafeEntries) { - switch(iFunc) + pEntries = ExAllocatePool(PagedPool, cEntries * sizeof(PALETTEENTRY)); + if (!pEntries) + return 0; + if (bInbound) { - case GdiPalAnimate: + _SEH_TRY + { ProbeForRead(pUnsafeEntries, cEntries * sizeof(PALETTEENTRY), 1); - ret = IntAnimatePalette((HPALETTE)hObj, iStart, cEntries, pUnsafeEntries); - break; - - case GdiPalSetEntries: - ProbeForRead(pUnsafeEntries, cEntries * sizeof(PALETTEENTRY), 1); - ret = IntSetPaletteEntries((HPALETTE)hObj, iStart, cEntries, pUnsafeEntries); - break; - - case GdiPalGetEntries: - if (pUnsafeEntries) - { - ProbeForWrite(pUnsafeEntries, cEntries * sizeof(PALETTEENTRY), 1); - } - ret = IntGetPaletteEntries((HPALETTE)hObj, iStart, cEntries, pUnsafeEntries); - break; - - case GdiPalGetSystemEntries: - if (pUnsafeEntries) - { - ProbeForWrite(pUnsafeEntries, cEntries * sizeof(PALETTEENTRY), 1); - } - ret = IntGetSystemPaletteEntries((HDC)hObj, iStart, cEntries, pUnsafeEntries); - break; - - case GdiPalSetColorTable: - ProbeForRead(pUnsafeEntries, cEntries * sizeof(PALETTEENTRY), 1); - ret = IntSetDIBColorTable((HDC)hObj, iStart, cEntries, (RGBQUAD*)pUnsafeEntries); - break; - - case GdiPalGetColorTable: - if (pUnsafeEntries) - { - ProbeForWrite(pUnsafeEntries, cEntries * sizeof(PALETTEENTRY), 1); - } - ret = IntGetDIBColorTable((HDC)hObj, iStart, cEntries, (RGBQUAD*)pUnsafeEntries); - break; - - default: - ret = 0; + memcpy(pEntries, pUnsafeEntries, cEntries * sizeof(PALETTEENTRY)); + } + _SEH_HANDLE + { + ExFreePool(pEntries); + _SEH_YIELD(return 0); + } + _SEH_END } } - _SEH_HANDLE + + ret = 0; + switch(iFunc) { - ret = 0; + case GdiPalAnimate: + if (pEntries) + ret = IntAnimatePalette((HPALETTE)hObj, iStart, cEntries, pEntries); + break; + + case GdiPalSetEntries: + if (pEntries) + ret = IntSetPaletteEntries((HPALETTE)hObj, iStart, cEntries, pEntries); + break; + + case GdiPalGetEntries: + ret = IntGetPaletteEntries((HPALETTE)hObj, iStart, cEntries, pEntries); + break; + + case GdiPalGetSystemEntries: + ret = IntGetSystemPaletteEntries((HDC)hObj, iStart, cEntries, pEntries); + break; + + case GdiPalSetColorTable: + if (pEntries) + ret = IntSetDIBColorTable((HDC)hObj, iStart, cEntries, (RGBQUAD*)pEntries); + break; + + case GdiPalGetColorTable: + if (pEntries) + ret = IntGetDIBColorTable((HDC)hObj, iStart, cEntries, (RGBQUAD*)pEntries); + break; + } + + if (pEntries) + { + if (!bInbound) + { + _SEH_TRY + { + ProbeForWrite(pUnsafeEntries, cEntries * sizeof(PALETTEENTRY), 1); + memcpy(pUnsafeEntries, pEntries, cEntries * sizeof(PALETTEENTRY)); + } + _SEH_HANDLE + { + ret = 0; + } + _SEH_END + } + ExFreePool(pEntries); } - _SEH_END return ret; } diff --git a/reactos/subsystems/win32/win32k/objects/dc.c b/reactos/subsystems/win32/win32k/objects/dc.c index f9570d1a355..60198717dbb 100644 --- a/reactos/subsystems/win32/win32k/objects/dc.c +++ b/reactos/subsystems/win32/win32k/objects/dc.c @@ -3480,6 +3480,7 @@ NtGdiSetBoundsRect( * @implemented */ DHPDEV +APIENTRY NtGdiGetDhpdev( IN HDEV hdev) { diff --git a/reactos/subsystems/win32/win32k/objects/region.c b/reactos/subsystems/win32/win32k/objects/region.c index 2b8320e4ad1..606e03635fe 100644 --- a/reactos/subsystems/win32/win32k/objects/region.c +++ b/reactos/subsystems/win32/win32k/objects/region.c @@ -3174,12 +3174,8 @@ NtGdiGetRegionData( _SEH_TRY { ProbeForWrite(rgndata, count, 1); - RtlCopyMemory(rgndata, - obj, - sizeof(RGNDATAHEADER)); - RtlCopyMemory((PVOID)((ULONG_PTR)rgndata + (ULONG_PTR)sizeof(RGNDATAHEADER)), - obj->Buffer, - size); + RtlCopyMemory(rgndata, &obj->rdh, sizeof(RGNDATAHEADER)); + RtlCopyMemory(rgndata->Buffer, obj->Buffer, size); } _SEH_HANDLE { diff --git a/reactos/subsystems/win32/win32k/objects/text.c b/reactos/subsystems/win32/win32k/objects/text.c index e4e5c2fa1fe..77606d81765 100644 --- a/reactos/subsystems/win32/win32k/objects/text.c +++ b/reactos/subsystems/win32/win32k/objects/text.c @@ -176,7 +176,7 @@ IntLoadSystemFonts(VOID) BOOLEAN bRestartScan = TRUE; NTSTATUS Status; - RtlInitUnicodeString(&Directory, L"\\SystemRoot\\media\\fonts\\"); + RtlInitUnicodeString(&Directory, L"\\SystemRoot\\Fonts\\"); /* FIXME: Add support for other font types */ RtlInitUnicodeString(&SearchPattern, L"*.ttf"); @@ -268,7 +268,7 @@ IntGdiAddFontResource(PUNICODE_STRING FileName, DWORD Characteristics) { FONTGDI *FontGDI; NTSTATUS Status; - HANDLE FileHandle; + HANDLE FileHandle, KeyHandle; OBJECT_ATTRIBUTES ObjectAttributes; PVOID Buffer = NULL; IO_STATUS_BLOCK Iosb; @@ -279,6 +279,7 @@ IntGdiAddFontResource(PUNICODE_STRING FileName, DWORD Characteristics) PSECTION_OBJECT SectionObject; ULONG ViewSize = 0; FT_Fixed XScale, YScale; + UNICODE_STRING FontRegPath = RTL_CONSTANT_STRING(L"\\REGISTRY\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts"); /* Open the font file */ @@ -384,7 +385,7 @@ IntGdiAddFontResource(PUNICODE_STRING FileName, DWORD Characteristics) - DPRINT("Font loaded: %s (%s)\n", Face->family_name, Face->style_name); + DPRINT1("Font loaded: %s (%s)\n", Face->family_name, Face->style_name); DPRINT("Num glyphs: %u\n", Face->num_glyphs); /* Add this font resource to the font table */ @@ -405,9 +406,20 @@ IntGdiAddFontResource(PUNICODE_STRING FileName, DWORD Characteristics) { IntLockGlobalFonts; InsertTailList(&FontListHead, &Entry->ListEntry); + InitializeObjectAttributes(&ObjectAttributes, &FontRegPath, OBJ_CASE_INSENSITIVE, NULL, NULL); + Status = ZwOpenKey(&KeyHandle, KEY_WRITE, &ObjectAttributes); + if (NT_SUCCESS(Status)) + { + LPWSTR pName = wcsrchr(FileName->Buffer, L'\\'); + if (pName) + { + pName++; + ZwSetValueKey(KeyHandle, &Entry->FaceName, 0, REG_SZ, pName, (wcslen(pName) + 1) * sizeof(WCHAR)); + } + ZwClose(KeyHandle); + } IntUnLockGlobalFonts; } - return 1; } @@ -3334,6 +3346,7 @@ IntGdiGetCharSet(HDC hDC) DWORD +APIENTRY NtGdiGetCharSet(HDC hDC) { PDC Dc; diff --git a/reactos/subsystems/win32/win32k/stubs/stubs.c b/reactos/subsystems/win32/win32k/stubs/stubs.c index 5a6ba8c8146..2851bbc50c2 100644 --- a/reactos/subsystems/win32/win32k/stubs/stubs.c +++ b/reactos/subsystems/win32/win32k/stubs/stubs.c @@ -1607,6 +1607,7 @@ NtGdiRemoveMergeFont( * @unimplemented */ BOOL +APIENTRY NtGdiAddRemoteMMInstanceToDC( IN HDC hdc, IN DOWNLOADDESIGNVECTOR *pddv, @@ -2149,6 +2150,7 @@ NtGdiGetMonitorID( * @unimplemented */ BOOL +APIENTRY NtGdiGetRealizationInfo( IN HDC hdc, OUT PREALIZATION_INFO pri, @@ -2268,6 +2270,7 @@ NtGdiQueryFontAssocInfo( * @unimplemented */ DWORD +APIENTRY NtGdiGetFontUnicodeRanges( IN HDC hdc, OUT OPTIONAL LPGLYPHSET pgs) @@ -2971,8 +2974,7 @@ ULONGLONG APIENTRY EngGetTickCount(VOID) { - UNIMPLEMENTED; - return 0; + return ((ULONGLONG)SharedUserData->TickCountLowDeprecated * SharedUserData->TickCountMultiplier / 16777216); } BOOLEAN diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp index 2c0b58e61d4..34b8554a1a5 100644 --- a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp +++ b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp @@ -1937,7 +1937,8 @@ MingwModuleHandler::GenerateOtherMacros () fprintf ( fMakefile, - "%s_LFLAGS += $(PROJECT_LFLAGS) -g\n", + "%s_LFLAGS := $(PROJECT_LFLAGS) -g $(%s_LFLAGS)\n", + module.name.c_str (), module.name.c_str () ); } else diff --git a/reactos/tools/rsym.c b/reactos/tools/rsym.c index 38c0b7e3c95..0ae8fb8ea46 100644 --- a/reactos/tools/rsym.c +++ b/reactos/tools/rsym.c @@ -143,6 +143,7 @@ ConvertStabs(ULONG *SymbolsCount, PROSSYM_ENTRY *SymbolsBase, ULONG_PTR Address, LastFunctionAddress; int First = 1; char *Name; + ULONG NameLen; char FuncName[256]; PROSSYM_ENTRY Current; @@ -220,18 +221,16 @@ ConvertStabs(ULONG *SymbolsCount, PROSSYM_ENTRY *SymbolsBase, Current->Address = Address; Current->FileOffset = Current[-1].FileOffset; } - if (sizeof(FuncName) <= strlen((char *) StabStringsBase + StabEntry[i].n_strx)) + Name = (char *) StabStringsBase + StabEntry[i].n_strx; + NameLen = strcspn(Name, ":"); + if (sizeof(FuncName) <= NameLen) { free(*SymbolsBase); fprintf(stderr, "Function name too long\n"); return 1; } - strcpy(FuncName, (char *) StabStringsBase + StabEntry[i].n_strx); - Name = strchr(FuncName, ':'); - if (NULL != Name) - { - *Name = '\0'; - } + memcpy(FuncName, Name, NameLen); + FuncName[NameLen] = '\0'; Current->FunctionOffset = FindOrAddString(FuncName, StringsLength, StringsBase); diff --git a/reactos/tools/winebuild/spec32.c b/reactos/tools/winebuild/spec32.c index 3bf52e09dcb..ef4a37d32e8 100644 --- a/reactos/tools/winebuild/spec32.c +++ b/reactos/tools/winebuild/spec32.c @@ -611,15 +611,21 @@ void BuildDef32File( DLLSPEC *spec ) case TYPE_FASTCALL: { int at_param = strlen(odp->u.func.arg_types) * get_ptr_size(); - output( " @%s", name ); + output( " " ); + if (!kill_at) output( "@" ); + output( "%s", name ); if (!kill_at) output( "@%d", at_param ); if (odp->flags & FLAG_FORWARD) { - output( "=@%s", odp->link_name ); + output( "=" ); + if (!kill_at) output( "@" ); + output( "%s", odp->link_name ); } else if (strcmp(name, odp->link_name)) /* try to reduce output */ { - output( "=@%s", odp->link_name ); + output( "=" ); + if (!kill_at) output( "@" ); + output( "%s", odp->link_name ); if (!kill_at) output( "@%d", at_param ); } break;