Compare commits

...

14 Commits

Author SHA1 Message Date
Thomas Faber
3575086811 [0.3.17]
- Addendum to r65049: update start menu banner.

svn path=/branches/0.3.17/; revision=65177
2014-11-02 06:45:04 +00:00
Ziliang Guo
6aa4e564dc [KERNEL32]
Merge English fallback for unlocalized text.
CORE-8720

svn path=/branches/0.3.17/; revision=65155
2014-10-31 17:47:32 +00:00
Ziliang Guo
49d4e58f50 [BOOTDATA]
Merge theme switching fix.
CORE-8718

svn path=/branches/0.3.17/; revision=65126
2014-10-30 19:00:33 +00:00
Ziliang Guo
af6d8b9f7e [WIN32SS]
Merge in workaround for freetype rendering issue.

CORE-8525, CORE-6023, CORE-7735 and CORE-8635

svn path=/branches/0.3.17/; revision=65101
2014-10-29 16:03:21 +00:00
Ziliang Guo
aaf904d84c [WIN32SS]
Fix icon selection regression caused by cascading fix. In this case, this should probably go into trunk.

CORE-8574

svn path=/branches/0.3.17/; revision=65091
2014-10-28 22:01:57 +00:00
Ziliang Guo
72e480c82f [0.3.17]
Set version number for release.

svn path=/branches/0.3.17/; revision=65049
2014-10-27 17:23:05 +00:00
Ziliang Guo
e2a4ce772f [NTFS]
Cherrypick additional NTFS related fixes, including ability to browse NTFS volume.

svn path=/branches/0.3.17/; revision=65048
2014-10-27 17:18:17 +00:00
Ziliang Guo
0a58d8b96a [WIN32K]
Cherrypick margin fix for menus.

CORE-8667

svn path=/branches/0.3.17/; revision=65047
2014-10-27 17:15:09 +00:00
Ziliang Guo
7c6256087f [UNIATA]
Update version of UNIATA to 45b1 for 0.3.17.

svn path=/branches/0.3.17/; revision=65046
2014-10-27 17:10:31 +00:00
Ziliang Guo
e7eb27c6cd [WIN32K]
Incorporate fix for keyboard indicator lights.

CORE-8547

svn path=/branches/0.3.17/; revision=64973
2014-10-24 21:27:13 +00:00
Ziliang Guo
4571891449 [WIN32SS]
Cherrypick fix for OffByOne browser where parent desktop handle is null for 0.3.17.

CORE-8665

svn path=/branches/0.3.17/; revision=64944
2014-10-23 20:52:25 +00:00
Ziliang Guo
f112613d39 [CRT]
Cherrypick fix for CRT that broke LMarbles/LBreakout. Games are important.

CORE-8670

svn path=/branches/0.3.17/; revision=64928
2014-10-23 15:55:03 +00:00
Ziliang Guo
122fe51263 [NTFS]
Cherrypick NTFS related changes from trunk for 0.3.17.

svn path=/branches/0.3.17/; revision=64927
2014-10-23 15:45:12 +00:00
Ziliang Guo
d8434fa72f [TCPIP]
Merge in Jerome's fix for Firefox crash.

CORE-8648

svn path=/branches/0.3.17/; revision=64848
2014-10-20 15:59:52 +00:00
26 changed files with 739 additions and 570 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -1,4 +1,4 @@
[Version] [Version]
Signature="$ReactOS$" Signature="$ReactOS$"
[AddReg] [AddReg]
@@ -301,6 +301,15 @@ HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #28",0x00010001,0x0
HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #29",0x00010001,0x006a240a HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #29",0x00010001,0x006a240a
HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #30",0x00010001,0x00c8d0d4 HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #30",0x00010001,0x00c8d0d4
HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Contrast",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Contrast",0x00010001,0x00000000
HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Size #0",0x000b0001,01,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Size #1",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Size #2",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Size #3",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Size #4",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Size #5",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Size #6",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Size #7",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Size #8",0x000b0001,12,00,00,00,00,00,00,00
; Brick ; Brick
HKCU,"Control Panel\Appearance\New Schemes\1","DisplayName",0x00020000,"@themeui.dll,-851" HKCU,"Control Panel\Appearance\New Schemes\1","DisplayName",0x00020000,"@themeui.dll,-851"
HKCU,"Control Panel\Appearance\New Schemes\1","LegacyName",0x00020000,"%DESKTOP_SCHEME_1%" HKCU,"Control Panel\Appearance\New Schemes\1","LegacyName",0x00020000,"%DESKTOP_SCHEME_1%"
@@ -363,6 +372,15 @@ HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #28",0x00010001,0x0
HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #29",0x00010001,0x00808000 HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #29",0x00010001,0x00808000
HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #30",0x00010001,0x00a5bfc2 HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #30",0x00010001,0x00a5bfc2
HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Contrast",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Contrast",0x00010001,0x00000000
HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Size #0",0x000b0001,01,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Size #1",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Size #2",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Size #3",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Size #4",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Size #5",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Size #6",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Size #7",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Size #8",0x000b0001,12,00,00,00,00,00,00,00
; Eggplant ; Eggplant
HKCU,"Control Panel\Appearance\New Schemes\2","DisplayName",0x00020000,"@themeui.dll,-851" HKCU,"Control Panel\Appearance\New Schemes\2","DisplayName",0x00020000,"@themeui.dll,-851"
HKCU,"Control Panel\Appearance\New Schemes\2","LegacyName",0x00020000,"%DESKTOP_SCHEME_2%" HKCU,"Control Panel\Appearance\New Schemes\2","LegacyName",0x00020000,"%DESKTOP_SCHEME_2%"
@@ -425,6 +443,15 @@ HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #28",0x00010001,0x0
HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #29",0x00010001,0x00788058 HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #29",0x00010001,0x00788058
HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #30",0x00010001,0x00a8b090 HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #30",0x00010001,0x00a8b090
HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Contrast",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Contrast",0x00010001,0x00000000
HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Size #0",0x000b0001,01,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Size #1",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Size #2",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Size #3",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Size #4",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Size #5",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Size #6",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Size #7",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Size #8",0x000b0001,12,00,00,00,00,00,00,00
; Green Olive ; Green Olive
HKCU,"Control Panel\Appearance\New Schemes\3","DisplayName",0x00020000,"@themeui.dll,-877" HKCU,"Control Panel\Appearance\New Schemes\3","DisplayName",0x00020000,"@themeui.dll,-877"
HKCU,"Control Panel\Appearance\New Schemes\3","LegacyName",0x00020000,"%DESKTOP_SCHEME_3%" HKCU,"Control Panel\Appearance\New Schemes\3","LegacyName",0x00020000,"%DESKTOP_SCHEME_3%"
@@ -487,6 +514,15 @@ HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #28",0x00010001,0x0
HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #29",0x00010001,0x00649759 HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #29",0x00010001,0x00649759
HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #30",0x00010001,0x00a9c8a2 HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #30",0x00010001,0x00a9c8a2
HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Contrast",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Contrast",0x00010001,0x00000000
HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Size #0",0x000b0001,01,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Size #1",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Size #2",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Size #3",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Size #4",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Size #5",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Size #6",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Size #7",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Size #8",0x000b0001,12,00,00,00,00,00,00,00
; High Contrast 1 ; High Contrast 1
HKCU,"Control Panel\Appearance\New Schemes\4","DisplayName",0x00020000,"@themeui.dll,-851" HKCU,"Control Panel\Appearance\New Schemes\4","DisplayName",0x00020000,"@themeui.dll,-851"
HKCU,"Control Panel\Appearance\New Schemes\4","LegacyName",0x00020000,"%DESKTOP_SCHEME_4%" HKCU,"Control Panel\Appearance\New Schemes\4","LegacyName",0x00020000,"%DESKTOP_SCHEME_4%"
@@ -549,6 +585,15 @@ HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #28",0x00010001,0x0
HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #29",0x00010001,0x00008000 HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #29",0x00010001,0x00008000
HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #30",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #30",0x00010001,0x00000000
HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Contrast",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Contrast",0x00010001,0x00000000
HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Size #0",0x000b0001,01,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Size #1",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Size #2",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Size #3",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Size #4",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Size #5",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Size #6",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Size #7",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Size #8",0x000b0001,12,00,00,00,00,00,00,00
; High Contrast 2 ; High Contrast 2
HKCU,"Control Panel\Appearance\New Schemes\5","DisplayName",0x00020000,"@themeui.dll,-851" HKCU,"Control Panel\Appearance\New Schemes\5","DisplayName",0x00020000,"@themeui.dll,-851"
HKCU,"Control Panel\Appearance\New Schemes\5","LegacyName",0x00020000,"%DESKTOP_SCHEME_5%" HKCU,"Control Panel\Appearance\New Schemes\5","LegacyName",0x00020000,"%DESKTOP_SCHEME_5%"
@@ -611,6 +656,15 @@ HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #28",0x00010001,0x0
HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #29",0x00010001,0x00ff0000 HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #29",0x00010001,0x00ff0000
HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #30",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #30",0x00010001,0x00000000
HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Contrast",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Contrast",0x00010001,0x00000000
HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Size #0",0x000b0001,01,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Size #1",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Size #2",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Size #3",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Size #4",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Size #5",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Size #6",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Size #7",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Size #8",0x000b0001,12,00,00,00,00,00,00,00
; High Contrast Black ; High Contrast Black
HKCU,"Control Panel\Appearance\New Schemes\6","DisplayName",0x00020000,"@themeui.dll,-851" HKCU,"Control Panel\Appearance\New Schemes\6","DisplayName",0x00020000,"@themeui.dll,-851"
HKCU,"Control Panel\Appearance\New Schemes\6\","LegacyName",0x00020000,"%DESKTOP_SCHEME_6%" HKCU,"Control Panel\Appearance\New Schemes\6\","LegacyName",0x00020000,"%DESKTOP_SCHEME_6%"
@@ -673,6 +727,15 @@ HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #28",0x00010001,0x0
HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #29",0x00010001,0x00800080 HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #29",0x00010001,0x00800080
HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #30",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #30",0x00010001,0x00000000
HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Contrast",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Contrast",0x00010001,0x00000000
HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Size #0",0x000b0001,01,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Size #1",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Size #2",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Size #3",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Size #4",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Size #5",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Size #6",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Size #7",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Size #8",0x000b0001,12,00,00,00,00,00,00,00
; High Contrast White ; High Contrast White
HKCU,"Control Panel\Appearance\New Schemes\7","DisplayName",0x00020000,"@themeui.dll,-851" HKCU,"Control Panel\Appearance\New Schemes\7","DisplayName",0x00020000,"@themeui.dll,-851"
HKCU,"Control Panel\Appearance\New Schemes\7","LegacyName",0x00020000,"%DESKTOP_SCHEME_7%" HKCU,"Control Panel\Appearance\New Schemes\7","LegacyName",0x00020000,"%DESKTOP_SCHEME_7%"
@@ -735,6 +798,15 @@ HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #28",0x00010001,0x0
HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #29",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #29",0x00010001,0x00000000
HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #30",0x00010001,0x00ffffff HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #30",0x00010001,0x00ffffff
HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Contrast",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Contrast",0x00010001,0x00000000
HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Size #0",0x000b0001,01,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Size #1",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Size #2",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Size #3",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Size #4",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Size #5",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Size #6",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Size #7",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Size #8",0x000b0001,12,00,00,00,00,00,00,00
; Lilac ; Lilac
HKCU,"Control Panel\Appearance\New Schemes\8","DisplayName",0x00020000,"@themeui.dll,-851" HKCU,"Control Panel\Appearance\New Schemes\8","DisplayName",0x00020000,"@themeui.dll,-851"
HKCU,"Control Panel\Appearance\New Schemes\8","LegacyName",0x00020000,"%DESKTOP_SCHEME_8%" HKCU,"Control Panel\Appearance\New Schemes\8","LegacyName",0x00020000,"%DESKTOP_SCHEME_8%"
@@ -797,6 +869,15 @@ HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #28",0x00010001,0x0
HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #29",0x00010001,0x00b14e5a HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #29",0x00010001,0x00b14e5a
HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #30",0x00010001,0x00d9a8ae HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #30",0x00010001,0x00d9a8ae
HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Contrast",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Contrast",0x00010001,0x00000000
HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Size #0",0x000b0001,01,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Size #1",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Size #2",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Size #3",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Size #4",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Size #5",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Size #6",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Size #7",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Size #8",0x000b0001,12,00,00,00,00,00,00,00
; Maple ; Maple
HKCU,"Control Panel\Appearance\New Schemes\9","DisplayName",0x00020000,"@themeui.dll,-851" HKCU,"Control Panel\Appearance\New Schemes\9","DisplayName",0x00020000,"@themeui.dll,-851"
HKCU,"Control Panel\Appearance\New Schemes\9","LegacyName",0x00020000,"%DESKTOP_SCHEME_9%" HKCU,"Control Panel\Appearance\New Schemes\9","LegacyName",0x00020000,"%DESKTOP_SCHEME_9%"
@@ -859,6 +940,15 @@ HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #28",0x00010001,0x0
HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #29",0x00010001,0x0046a6c6 HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #29",0x00010001,0x0046a6c6
HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #30",0x00010001,0x00aed8e6 HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #30",0x00010001,0x00aed8e6
HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Contrast",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Contrast",0x00010001,0x00000000
HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Size #0",0x000b0001,01,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Size #1",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Size #2",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Size #3",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Size #4",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Size #5",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Size #6",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Size #7",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Size #8",0x000b0001,12,00,00,00,00,00,00,00
; Marine ; Marine
HKCU,"Control Panel\Appearance\New Schemes\10","DisplayName",0x00020000,"@themeui.dll,-851" HKCU,"Control Panel\Appearance\New Schemes\10","DisplayName",0x00020000,"@themeui.dll,-851"
HKCU,"Control Panel\Appearance\New Schemes\10","LegacyName",0x00020000,"%DESKTOP_SCHEME_10%" HKCU,"Control Panel\Appearance\New Schemes\10","LegacyName",0x00020000,"%DESKTOP_SCHEME_10%"
@@ -921,6 +1011,15 @@ HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #28",0x00010001,0x
HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #29",0x00010001,0x00800000 HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #29",0x00010001,0x00800000
HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #30",0x00010001,0x00b8c088 HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #30",0x00010001,0x00b8c088
HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Contrast",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Contrast",0x00010001,0x00000000
HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Size #0",0x000b0001,01,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Size #1",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Size #2",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Size #3",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Size #4",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Size #5",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Size #6",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Size #7",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Size #8",0x000b0001,12,00,00,00,00,00,00,00
; Plum ; Plum
HKCU,"Control Panel\Appearance\New Schemes\11","DisplayName",0x00020000,"@themeui.dll,-869" HKCU,"Control Panel\Appearance\New Schemes\11","DisplayName",0x00020000,"@themeui.dll,-869"
HKCU,"Control Panel\Appearance\New Schemes\11","LegacyName",0x00020000,"%DESKTOP_SCHEME_11%" HKCU,"Control Panel\Appearance\New Schemes\11","LegacyName",0x00020000,"%DESKTOP_SCHEME_11%"
@@ -983,6 +1082,15 @@ HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #28",0x00010001,0x
HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #29",0x00010001,0x00808000 HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #29",0x00010001,0x00808000
HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #30",0x00010001,0x009098a8 HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #30",0x00010001,0x009098a8
HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Contrast",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Contrast",0x00010001,0x00000000
HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Size #0",0x000b0001,01,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Size #1",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Size #2",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Size #3",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Size #4",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Size #5",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Size #6",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Size #7",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Size #8",0x000b0001,12,00,00,00,00,00,00,00
; Pumpkin ; Pumpkin
HKCU,"Control Panel\Appearance\New Schemes\12","DisplayName",0x00020000,"@themeui.dll,-851" HKCU,"Control Panel\Appearance\New Schemes\12","DisplayName",0x00020000,"@themeui.dll,-851"
HKCU,"Control Panel\Appearance\New Schemes\12","LegacyName",0x00020000,"%DESKTOP_SCHEME_12%" HKCU,"Control Panel\Appearance\New Schemes\12","LegacyName",0x00020000,"%DESKTOP_SCHEME_12%"
@@ -1045,6 +1153,15 @@ HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #28",0x00010001,0x
HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #29",0x00010001,0x00800080 HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #29",0x00010001,0x00800080
HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #30",0x00010001,0x009dd5ec HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #30",0x00010001,0x009dd5ec
HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Contrast",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Contrast",0x00010001,0x00000000
HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Size #0",0x000b0001,01,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Size #1",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Size #2",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Size #3",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Size #4",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Size #5",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Size #6",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Size #7",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Size #8",0x000b0001,12,00,00,00,00,00,00,00
; Rainy Day ; Rainy Day
HKCU,"Control Panel\Appearance\New Schemes\13","DisplayName",0x00020000,"@themeui.dll,-851" HKCU,"Control Panel\Appearance\New Schemes\13","DisplayName",0x00020000,"@themeui.dll,-851"
HKCU,"Control Panel\Appearance\New Schemes\13","LegacyName",0x00020000,"%DESKTOP_SCHEME_13%" HKCU,"Control Panel\Appearance\New Schemes\13","LegacyName",0x00020000,"%DESKTOP_SCHEME_13%"
@@ -1107,6 +1224,15 @@ HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #28",0x00010001,0x
HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #29",0x00010001,0x007d654f HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #29",0x00010001,0x007d654f
HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #30",0x00010001,0x00b19983 HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #30",0x00010001,0x00b19983
HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Contrast",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Contrast",0x00010001,0x00000000
HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Size #0",0x000b0001,01,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Size #1",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Size #2",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Size #3",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Size #4",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Size #5",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Size #6",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Size #7",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Size #8",0x000b0001,12,00,00,00,00,00,00,00
; ReactOS Classic ; ReactOS Classic
HKCU,"Control Panel\Appearance\New Schemes\14","DisplayName",0x00020000,"@themeui.dll,-880" HKCU,"Control Panel\Appearance\New Schemes\14","DisplayName",0x00020000,"@themeui.dll,-880"
HKCU,"Control Panel\Appearance\New Schemes\14","LegacyName",0x00020000,"%DESKTOP_SCHEME_14%" HKCU,"Control Panel\Appearance\New Schemes\14","LegacyName",0x00020000,"%DESKTOP_SCHEME_14%"
@@ -1169,6 +1295,15 @@ HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #28",0x00010001,0x
HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #29",0x00010001,0x00800000 HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #29",0x00010001,0x00800000
HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #30",0x00010001,0x00c0c0c0 HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #30",0x00010001,0x00c0c0c0
HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Contrast",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Contrast",0x00010001,0x00000000
HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Size #0",0x000b0001,01,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Size #1",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Size #2",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Size #3",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Size #4",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Size #5",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Size #6",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Size #7",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Size #8",0x000b0001,12,00,00,00,00,00,00,00
; Rose ; Rose
HKCU,"Control Panel\Appearance\New Schemes\15","DisplayName",0x00020000,"@themeui.dll,-851" HKCU,"Control Panel\Appearance\New Schemes\15","DisplayName",0x00020000,"@themeui.dll,-851"
HKCU,"Control Panel\Appearance\New Schemes\15","LegacyName",0x00020000,"%DESKTOP_SCHEME_15%" HKCU,"Control Panel\Appearance\New Schemes\15","LegacyName",0x00020000,"%DESKTOP_SCHEME_15%"
@@ -1231,6 +1366,15 @@ HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #28",0x00010001,0x
HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #29",0x00010001,0x0070609f HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #29",0x00010001,0x0070609f
HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #30",0x00010001,0x00b7afcf HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #30",0x00010001,0x00b7afcf
HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Contrast",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Contrast",0x00010001,0x00000000
HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Size #0",0x000b0001,01,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Size #1",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Size #2",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Size #3",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Size #4",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Size #5",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Size #6",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Size #7",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Size #8",0x000b0001,12,00,00,00,00,00,00,00
; Sand ; Sand
HKCU,"Control Panel\Appearance\New Schemes\16","DisplayName",0x00020000,"@themeui.dll,-851" HKCU,"Control Panel\Appearance\New Schemes\16","DisplayName",0x00020000,"@themeui.dll,-851"
HKCU,"Control Panel\Appearance\New Schemes\16","LegacyName",0x00020000,"%DESKTOP_SCHEME_16%" HKCU,"Control Panel\Appearance\New Schemes\16","LegacyName",0x00020000,"%DESKTOP_SCHEME_16%"
@@ -1293,6 +1437,15 @@ HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #28",0x00010001,0x
HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #29",0x00010001,0x00808000 HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #29",0x00010001,0x00808000
HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #30",0x00010001,0x00bbccd5 HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #30",0x00010001,0x00bbccd5
HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Contrast",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Contrast",0x00010001,0x00000000
HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Size #0",0x000b0001,01,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Size #1",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Size #2",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Size #3",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Size #4",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Size #5",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Size #6",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Size #7",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Size #8",0x000b0001,12,00,00,00,00,00,00,00
; Sky (WinXP-like) ; Sky (WinXP-like)
HKCU,"Control Panel\Appearance\New Schemes\17","DisplayName",0x00020000,"@themeui.dll,-851" HKCU,"Control Panel\Appearance\New Schemes\17","DisplayName",0x00020000,"@themeui.dll,-851"
HKCU,"Control Panel\Appearance\New Schemes\17","LegacyName",0x00020000,"%DESKTOP_SCHEME_17%" HKCU,"Control Panel\Appearance\New Schemes\17","LegacyName",0x00020000,"%DESKTOP_SCHEME_17%"
@@ -1355,6 +1508,15 @@ HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #28",0x00010001,0x
HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #29",0x00010001,0x00c56a31 HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #29",0x00010001,0x00c56a31
HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #30",0x00010001,0x00d8e9ec HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #30",0x00010001,0x00d8e9ec
HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Contrast",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Contrast",0x00010001,0x00000000
HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Size #0",0x000b0001,01,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Size #1",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Size #2",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Size #3",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Size #4",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Size #5",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Size #6",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Size #7",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Size #8",0x000b0001,12,00,00,00,00,00,00,00
; Slate ; Slate
HKCU,"Control Panel\Appearance\New Schemes\18","DisplayName",0x00020000,"@themeui.dll,-851" HKCU,"Control Panel\Appearance\New Schemes\18","DisplayName",0x00020000,"@themeui.dll,-851"
HKCU,"Control Panel\Appearance\New Schemes\18","LegacyName",0x00020000,"%DESKTOP_SCHEME_18%" HKCU,"Control Panel\Appearance\New Schemes\18","LegacyName",0x00020000,"%DESKTOP_SCHEME_18%"
@@ -1417,6 +1579,15 @@ HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #28",0x00010001,0x
HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #29",0x00010001,0x00978055 HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #29",0x00010001,0x00978055
HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #30",0x00010001,0x00c8b99d HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #30",0x00010001,0x00c8b99d
HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Contrast",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Contrast",0x00010001,0x00000000
HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Size #0",0x000b0001,01,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Size #1",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Size #2",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Size #3",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Size #4",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Size #5",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Size #6",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Size #7",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Size #8",0x000b0001,12,00,00,00,00,00,00,00
; Storm ; Storm
HKCU,"Control Panel\Appearance\New Schemes\19","DisplayName",0x00020000,"@themeui.dll,-851" HKCU,"Control Panel\Appearance\New Schemes\19","DisplayName",0x00020000,"@themeui.dll,-851"
HKCU,"Control Panel\Appearance\New Schemes\19","LegacyName",0x00020000,"%DESKTOP_SCHEME_19%" HKCU,"Control Panel\Appearance\New Schemes\19","LegacyName",0x00020000,"%DESKTOP_SCHEME_19%"
@@ -1479,6 +1650,15 @@ HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #28",0x00010001,0x
HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #29",0x00010001,0x00800080 HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #29",0x00010001,0x00800080
HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #30",0x00010001,0x00c0c0c0 HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #30",0x00010001,0x00c0c0c0
HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Contrast",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Contrast",0x00010001,0x00000000
HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Size #0",0x000b0001,01,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Size #1",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Size #2",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Size #3",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Size #4",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Size #5",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Size #6",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Size #7",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Size #8",0x000b0001,12,00,00,00,00,00,00,00
; Teal ; Teal
HKCU,"Control Panel\Appearance\New Schemes\20","DisplayName",0x00020000,"@themeui.dll,-851" HKCU,"Control Panel\Appearance\New Schemes\20","DisplayName",0x00020000,"@themeui.dll,-851"
HKCU,"Control Panel\Appearance\New Schemes\20","LegacyName",0x00020000,"%DESKTOP_SCHEME_20%" HKCU,"Control Panel\Appearance\New Schemes\20","LegacyName",0x00020000,"%DESKTOP_SCHEME_20%"
@@ -1541,6 +1721,15 @@ HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #28",0x00010001,0x
HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #29",0x00010001,0x00808000 HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #29",0x00010001,0x00808000
HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #30",0x00010001,0x00c0c0c0 HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #30",0x00010001,0x00c0c0c0
HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Contrast",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Contrast",0x00010001,0x00000000
HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Size #0",0x000b0001,01,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Size #1",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Size #2",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Size #3",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Size #4",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Size #5",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Size #6",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Size #7",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Size #8",0x000b0001,12,00,00,00,00,00,00,00
; Wheat ; Wheat
HKCU,"Control Panel\Appearance\New Schemes\21","DisplayName",0x00020000,"@themeui.dll,-851" HKCU,"Control Panel\Appearance\New Schemes\21","DisplayName",0x00020000,"@themeui.dll,-851"
HKCU,"Control Panel\Appearance\New Schemes\21","LegacyName",0x00020000,"%DESKTOP_SCHEME_21%" HKCU,"Control Panel\Appearance\New Schemes\21","LegacyName",0x00020000,"%DESKTOP_SCHEME_21%"
@@ -1603,6 +1792,15 @@ HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #28",0x00010001,0x
HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #29",0x00010001,0x00008080 HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #29",0x00010001,0x00008080
HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #30",0x00010001,0x00a0dede HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #30",0x00010001,0x00a0dede
HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Contrast",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Contrast",0x00010001,0x00000000
HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Size #0",0x000b0001,01,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Size #1",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Size #2",0x000b0001,10,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Size #3",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Size #4",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Size #5",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Size #6",0x000b0001,0c,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Size #7",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Size #8",0x000b0001,12,00,00,00,00,00,00,00
HKCU,"Control Panel\Sound","Beep",2,"yes" HKCU,"Control Panel\Sound","Beep",2,"yes"
HKCU,"Control Panel\Sound","ExtendedSounds",2,"yes" HKCU,"Control Panel\Sound","ExtendedSounds",2,"yes"

View File

@@ -1704,6 +1704,16 @@ GetLocalisedText(DWORD dwResId, WCHAR *lpszDest)
(LPWSTR)RT_STRING, (LPWSTR)RT_STRING,
MAKEINTRESOURCEW((dwId >> 4) + 1), MAKEINTRESOURCEW((dwId >> 4) + 1),
langId); langId);
/* english fallback */
if(!hrsrc)
{
hrsrc = FindResourceExW(hCurrentModule,
(LPWSTR)RT_STRING,
MAKEINTRESOURCEW((dwId >> 4) + 1),
MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
}
if (hrsrc) if (hrsrc)
{ {
HGLOBAL hmem = LoadResource(hCurrentModule, hrsrc); HGLOBAL hmem = LoadResource(hCurrentModule, hrsrc);

View File

@@ -287,16 +287,25 @@ NtfsDumpFileAttributes(PFILE_RECORD_HEADER FileRecord)
} }
PFILENAME_ATTRIBUTE PFILENAME_ATTRIBUTE
GetFileNameFromRecord(PFILE_RECORD_HEADER FileRecord) GetFileNameFromRecord(PFILE_RECORD_HEADER FileRecord, UCHAR NameType)
{ {
PNTFS_ATTR_RECORD Attribute; PNTFS_ATTR_RECORD Attribute;
PFILENAME_ATTRIBUTE Name;
Attribute = (PNTFS_ATTR_RECORD)((ULONG_PTR)FileRecord + FileRecord->AttributeOffset); Attribute = (PNTFS_ATTR_RECORD)((ULONG_PTR)FileRecord + FileRecord->AttributeOffset);
while (Attribute < (PNTFS_ATTR_RECORD)((ULONG_PTR)FileRecord + FileRecord->BytesInUse) && while (Attribute < (PNTFS_ATTR_RECORD)((ULONG_PTR)FileRecord + FileRecord->BytesInUse) &&
Attribute->Type != AttributeEnd) Attribute->Type != AttributeEnd)
{ {
if (Attribute->Type == AttributeFileName) if (Attribute->Type == AttributeFileName)
return (PFILENAME_ATTRIBUTE)((ULONG_PTR)Attribute + Attribute->Resident.ValueOffset); {
Name = (PFILENAME_ATTRIBUTE)((ULONG_PTR)Attribute + Attribute->Resident.ValueOffset);
if (Name->NameType == NameType ||
(Name->NameType == NTFS_FILE_NAME_WIN32_AND_DOS && NameType == NTFS_FILE_NAME_WIN32) ||
(Name->NameType == NTFS_FILE_NAME_WIN32_AND_DOS && NameType == NTFS_FILE_NAME_DOS))
{
return Name;
}
}
Attribute = (PNTFS_ATTR_RECORD)((ULONG_PTR)Attribute + Attribute->Length); Attribute = (PNTFS_ATTR_RECORD)((ULONG_PTR)Attribute + Attribute->Length);
} }

View File

@@ -120,401 +120,218 @@ CdfsGetEntryName(PDEVICE_EXTENSION DeviceExt,
return(STATUS_SUCCESS); return(STATUS_SUCCESS);
} }
static NTSTATUS
CdfsFindFile(PDEVICE_EXTENSION DeviceExt,
PFCB Fcb,
PFCB Parent,
PWSTR FileToFind,
PULONG pDirIndex,
PULONG pDirIndex2)
/*
* FUNCTION: Find a file
*/
{
WCHAR name[256];
WCHAR TempStr[2];
PVOID Block;
NTSTATUS Status;
ULONG len;
ULONG DirIndex;
ULONG Offset;
ULONG Read;
BOOLEAN IsRoot;
PVOID Context = NULL;
ULONG DirSize;
PUCHAR Ptr;
PDIR_RECORD Record;
LARGE_INTEGER StreamOffset;
DPRINT("FindFile(Parent %x, FileToFind '%S', DirIndex: %d)\n",
Parent, FileToFind, pDirIndex ? *pDirIndex : 0);
DPRINT("FindFile: old Pathname %x, old Objectname %x)\n",
Fcb->PathName, Fcb->ObjectName);
IsRoot = FALSE;
DirIndex = 0;
if (wcslen (FileToFind) == 0)
{
CHECKPOINT;
TempStr[0] = (WCHAR) '.';
TempStr[1] = 0;
FileToFind = (PWSTR)&TempStr;
}
if (Parent)
{
if (Parent->Entry.ExtentLocationL == DeviceExt->CdInfo.RootStart)
{
IsRoot = TRUE;
}
}
else
{
IsRoot = TRUE;
}
if (IsRoot == TRUE)
{
StreamOffset.QuadPart = (LONGLONG)DeviceExt->CdInfo.RootStart * (LONGLONG)BLOCKSIZE;
DirSize = DeviceExt->CdInfo.RootSize;
if (FileToFind[0] == 0 || (FileToFind[0] == '\\' && FileToFind[1] == 0)
|| (FileToFind[0] == '.' && FileToFind[1] == 0))
{
/* it's root : complete essentials fields then return ok */
RtlZeroMemory(Fcb, sizeof(FCB));
Fcb->PathName[0]='\\';
Fcb->ObjectName = &Fcb->PathName[1];
Fcb->Entry.ExtentLocationL = DeviceExt->CdInfo.RootStart;
Fcb->Entry.DataLengthL = DeviceExt->CdInfo.RootSize;
Fcb->Entry.FileFlags = 0x02; //FILE_ATTRIBUTE_DIRECTORY;
if (pDirIndex)
*pDirIndex = 0;
if (pDirIndex2)
*pDirIndex2 = 0;
DPRINT("CdfsFindFile: new Pathname %S, new Objectname %S)\n",Fcb->PathName, Fcb->ObjectName);
return (STATUS_SUCCESS);
}
}
else
{
StreamOffset.QuadPart = (LONGLONG)Parent->Entry.ExtentLocationL * (LONGLONG)BLOCKSIZE;
DirSize = Parent->Entry.DataLengthL;
}
DPRINT("StreamOffset %I64u DirSize %lu\n", StreamOffset.QuadPart, DirSize);
if (pDirIndex && (*pDirIndex))
DirIndex = *pDirIndex;
if(!CcMapData(DeviceExt->StreamFileObject, &StreamOffset,
BLOCKSIZE, TRUE, &Context, &Block))
{
DPRINT("CcMapData() failed\n");
return(STATUS_UNSUCCESSFUL);
}
Ptr = (PUCHAR)Block;
while(TRUE)
{
Record = (PDIR_RECORD)Ptr;
if (Record->RecordLength == 0)
{
DPRINT1("Stopped!\n");
break;
}
DPRINT("RecordLength %u ExtAttrRecordLength %u NameLength %u\n",
Record->RecordLength, Record->ExtAttrRecordLength, Record->FileIdLength);
Status = CdfsGetEntryName(DeviceExt, &Context, &Block, &StreamOffset,
DirSize, (PVOID*)&Ptr, name, &DirIndex, pDirIndex2);
if (Status == STATUS_NO_MORE_ENTRIES)
{
break;
}
else if (Status == STATUS_UNSUCCESSFUL)
{
/* Note: the directory cache has already been unpinned */
return(Status);
}
DPRINT("Name '%S'\n", name);
if (wstrcmpjoki(name, FileToFind)) /* || wstrcmpjoki (name2, FileToFind)) */
{
if (Parent && Parent->PathName)
{
len = wcslen(Parent->PathName);
memcpy(Fcb->PathName, Parent->PathName, len*sizeof(WCHAR));
Fcb->ObjectName=&Fcb->PathName[len];
if (len != 1 || Fcb->PathName[0] != '\\')
{
Fcb->ObjectName[0] = '\\';
Fcb->ObjectName = &Fcb->ObjectName[1];
}
}
else
{
Fcb->ObjectName=Fcb->PathName;
Fcb->ObjectName[0]='\\';
Fcb->ObjectName=&Fcb->ObjectName[1];
}
DPRINT("PathName '%S' ObjectName '%S'\n", Fcb->PathName, Fcb->ObjectName);
memcpy(&Fcb->Entry, Ptr, sizeof(DIR_RECORD));
wcsncpy(Fcb->ObjectName, name, MAX_PATH);
if (pDirIndex)
*pDirIndex = DirIndex;
DPRINT("FindFile: new Pathname %S, new Objectname %S, DirIndex %d\n",
Fcb->PathName, Fcb->ObjectName, DirIndex);
CcUnpinData(Context);
return(STATUS_SUCCESS);
}
Ptr = Ptr + Record->RecordLength;
DirIndex++;
if (((ULONG)Ptr - (ULONG)Block) >= DirSize)
{
DPRINT("Stopped!\n");
break;
}
}
CcUnpinData(Context);
if (pDirIndex)
*pDirIndex = DirIndex;
return(STATUS_UNSUCCESSFUL);
}
static NTSTATUS
CdfsGetNameInformation(PFCB Fcb,
PDEVICE_EXTENSION DeviceExt,
PFILE_NAMES_INFORMATION Info,
ULONG BufferLength)
{
ULONG Length;
DPRINT("CdfsGetNameInformation() called\n");
Length = wcslen(Fcb->ObjectName) * sizeof(WCHAR);
if ((sizeof (FILE_BOTH_DIRECTORY_INFORMATION) + Length) > BufferLength)
return(STATUS_BUFFER_OVERFLOW);
Info->FileNameLength = Length;
Info->NextEntryOffset =
ROUND_UP(sizeof(FILE_BOTH_DIRECTORY_INFORMATION) + Length, 4);
memcpy(Info->FileName, Fcb->ObjectName, Length);
return(STATUS_SUCCESS);
}
static NTSTATUS
CdfsGetDirectoryInformation(PFCB Fcb,
PDEVICE_EXTENSION DeviceExt,
PFILE_DIRECTORY_INFORMATION Info,
ULONG BufferLength)
{
ULONG Length;
DPRINT("CdfsGetDirectoryInformation() called\n");
Length = wcslen(Fcb->ObjectName) * sizeof(WCHAR);
if ((sizeof (FILE_BOTH_DIRECTORY_INFORMATION) + Length) > BufferLength)
return(STATUS_BUFFER_OVERFLOW);
Info->FileNameLength = Length;
Info->NextEntryOffset =
ROUND_UP(sizeof(FILE_BOTH_DIRECTORY_INFORMATION) + Length, 4);
memcpy(Info->FileName, Fcb->ObjectName, Length);
/* Convert file times */
CdfsDateTimeToFileTime(Fcb,
&Info->CreationTime);
CdfsDateTimeToFileTime(Fcb,
&Info->LastAccessTime);
CdfsDateTimeToFileTime(Fcb,
&Info->LastWriteTime);
CdfsDateTimeToFileTime(Fcb,
&Info->ChangeTime);
/* Convert file flags */
CdfsFileFlagsToAttributes(Fcb,
&Info->FileAttributes);
Info->EndOfFile.QuadPart = Fcb->Entry.DataLengthL;
/* Make AllocSize a rounded up multiple of the sector size */
Info->AllocationSize.QuadPart = ROUND_UP(Fcb->Entry.DataLengthL, BLOCKSIZE);
// Info->FileIndex=;
return(STATUS_SUCCESS);
}
static NTSTATUS
CdfsGetFullDirectoryInformation(PFCB Fcb,
PDEVICE_EXTENSION DeviceExt,
PFILE_FULL_DIRECTORY_INFORMATION Info,
ULONG BufferLength)
{
ULONG Length;
DPRINT("CdfsGetFullDirectoryInformation() called\n");
Length = wcslen(Fcb->ObjectName) * sizeof(WCHAR);
if ((sizeof (FILE_BOTH_DIRECTORY_INFORMATION) + Length) > BufferLength)
return(STATUS_BUFFER_OVERFLOW);
Info->FileNameLength = Length;
Info->NextEntryOffset =
ROUND_UP(sizeof(FILE_BOTH_DIRECTORY_INFORMATION) + Length, 4);
memcpy(Info->FileName, Fcb->ObjectName, Length);
/* Convert file times */
CdfsDateTimeToFileTime(Fcb,
&Info->CreationTime);
CdfsDateTimeToFileTime(Fcb,
&Info->LastAccessTime);
CdfsDateTimeToFileTime(Fcb,
&Info->LastWriteTime);
CdfsDateTimeToFileTime(Fcb,
&Info->ChangeTime);
/* Convert file flags */
CdfsFileFlagsToAttributes(Fcb,
&Info->FileAttributes);
Info->EndOfFile.QuadPart = Fcb->Entry.DataLengthL;
/* Make AllocSize a rounded up multiple of the sector size */
Info->AllocationSize.QuadPart = ROUND_UP(Fcb->Entry.DataLengthL, BLOCKSIZE);
// Info->FileIndex=;
Info->EaSize = 0;
return(STATUS_SUCCESS);
}
static NTSTATUS
CdfsGetBothDirectoryInformation(PFCB Fcb,
PDEVICE_EXTENSION DeviceExt,
PFILE_BOTH_DIRECTORY_INFORMATION Info,
ULONG BufferLength)
{
ULONG Length;
DPRINT("CdfsGetBothDirectoryInformation() called\n");
Length = wcslen(Fcb->ObjectName) * sizeof(WCHAR);
if ((sizeof (FILE_BOTH_DIRECTORY_INFORMATION) + Length) > BufferLength)
return(STATUS_BUFFER_OVERFLOW);
Info->FileNameLength = Length;
Info->NextEntryOffset =
ROUND_UP(sizeof(FILE_BOTH_DIRECTORY_INFORMATION) + Length, 4);
memcpy(Info->FileName, Fcb->ObjectName, Length);
/* Convert file times */
CdfsDateTimeToFileTime(Fcb,
&Info->CreationTime);
CdfsDateTimeToFileTime(Fcb,
&Info->LastAccessTime);
CdfsDateTimeToFileTime(Fcb,
&Info->LastWriteTime);
CdfsDateTimeToFileTime(Fcb,
&Info->ChangeTime);
/* Convert file flags */
CdfsFileFlagsToAttributes(Fcb,
&Info->FileAttributes);
Info->EndOfFile.QuadPart = Fcb->Entry.DataLengthL;
/* Make AllocSize a rounded up multiple of the sector size */
Info->AllocationSize.QuadPart = ROUND_UP(Fcb->Entry.DataLengthL, BLOCKSIZE);
// Info->FileIndex=;
Info->EaSize = 0;
if (DeviceExt->CdInfo.JolietLevel == 0)
{
/* Standard ISO-9660 format */
Info->ShortNameLength = Length;
memcpy(Info->ShortName, Fcb->ObjectName, Length);
}
else
{
/* Joliet extension */
/* FIXME: Copy or create a short file name */
Info->ShortName[0] = 0;
Info->ShortNameLength = 0;
}
return(STATUS_SUCCESS);
}
#endif #endif
static NTSTATUS
NtfsGetNameInformation(PDEVICE_EXTENSION DeviceExt,
PFILE_RECORD_HEADER FileRecord,
PNTFS_ATTR_CONTEXT DataContext,
PFILE_NAMES_INFORMATION Info,
ULONG BufferLength)
{
ULONG Length;
PFILENAME_ATTRIBUTE FileName;
DPRINT("NtfsGetNameInformation() called\n");
FileName = GetFileNameFromRecord(FileRecord, NTFS_FILE_NAME_WIN32);
ASSERT(FileName != NULL);
Length = FileName->NameLength * sizeof (WCHAR);
if ((sizeof(FILE_NAMES_INFORMATION) + Length) > BufferLength)
return(STATUS_BUFFER_OVERFLOW);
Info->FileNameLength = Length;
Info->NextEntryOffset =
ROUND_UP(sizeof(FILE_NAMES_INFORMATION) + Length, sizeof(ULONG));
RtlCopyMemory(Info->FileName, FileName->Name, Length);
return(STATUS_SUCCESS);
}
static NTSTATUS
NtfsGetDirectoryInformation(PDEVICE_EXTENSION DeviceExt,
PFILE_RECORD_HEADER FileRecord,
PNTFS_ATTR_CONTEXT DataContext,
PFILE_DIRECTORY_INFORMATION Info,
ULONG BufferLength)
{
ULONG Length;
PFILENAME_ATTRIBUTE FileName;
DPRINT("NtfsGetDirectoryInformation() called\n");
FileName = GetFileNameFromRecord(FileRecord, NTFS_FILE_NAME_WIN32);
ASSERT(FileName != NULL);
Length = FileName->NameLength * sizeof (WCHAR);
if ((sizeof(FILE_DIRECTORY_INFORMATION) + Length) > BufferLength)
return(STATUS_BUFFER_OVERFLOW);
Info->FileNameLength = Length;
Info->NextEntryOffset =
ROUND_UP(sizeof(FILE_DIRECTORY_INFORMATION) + Length, sizeof(ULONG));
RtlCopyMemory(Info->FileName, FileName->Name, Length);
Info->CreationTime.QuadPart = FileName->CreationTime;
Info->LastAccessTime.QuadPart = FileName->LastAccessTime;
Info->LastWriteTime.QuadPart = FileName->LastWriteTime;
Info->ChangeTime.QuadPart = FileName->ChangeTime;
/* Convert file flags */
NtfsFileFlagsToAttributes(FileName->FileAttributes, &Info->FileAttributes);
Info->EndOfFile.QuadPart = FileName->AllocatedSize;
Info->AllocationSize.QuadPart = ROUND_UP(FileName->AllocatedSize, DeviceExt->NtfsInfo.BytesPerCluster);
// Info->FileIndex=;
return STATUS_SUCCESS;
}
static NTSTATUS
NtfsGetFullDirectoryInformation(PDEVICE_EXTENSION DeviceExt,
PFILE_RECORD_HEADER FileRecord,
PNTFS_ATTR_CONTEXT DataContext,
PFILE_FULL_DIRECTORY_INFORMATION Info,
ULONG BufferLength)
{
ULONG Length;
PFILENAME_ATTRIBUTE FileName;
DPRINT("NtfsGetFullDirectoryInformation() called\n");
FileName = GetFileNameFromRecord(FileRecord, NTFS_FILE_NAME_WIN32);
ASSERT(FileName != NULL);
Length = FileName->NameLength * sizeof (WCHAR);
if ((sizeof(FILE_FULL_DIRECTORY_INFORMATION) + Length) > BufferLength)
return(STATUS_BUFFER_OVERFLOW);
Info->FileNameLength = Length;
Info->NextEntryOffset =
ROUND_UP(sizeof(FILE_FULL_DIRECTORY_INFORMATION) + Length, sizeof(ULONG));
RtlCopyMemory(Info->FileName, FileName->Name, Length);
Info->CreationTime.QuadPart = FileName->CreationTime;
Info->LastAccessTime.QuadPart = FileName->LastAccessTime;
Info->LastWriteTime.QuadPart = FileName->LastWriteTime;
Info->ChangeTime.QuadPart = FileName->ChangeTime;
/* Convert file flags */
NtfsFileFlagsToAttributes(FileName->FileAttributes, &Info->FileAttributes);
Info->EndOfFile.QuadPart = FileName->AllocatedSize;
Info->AllocationSize.QuadPart = ROUND_UP(FileName->AllocatedSize, DeviceExt->NtfsInfo.BytesPerCluster);
// Info->FileIndex=;
Info->EaSize = 0;
return STATUS_SUCCESS;
}
static NTSTATUS
NtfsGetBothDirectoryInformation(PDEVICE_EXTENSION DeviceExt,
PFILE_RECORD_HEADER FileRecord,
PNTFS_ATTR_CONTEXT DataContext,
PFILE_BOTH_DIR_INFORMATION Info,
ULONG BufferLength)
{
ULONG Length;
PFILENAME_ATTRIBUTE FileName, ShortFileName;
DPRINT("NtfsGetBothDirectoryInformation() called\n");
FileName = GetFileNameFromRecord(FileRecord, NTFS_FILE_NAME_WIN32);
ASSERT(FileName != NULL);
ShortFileName = GetFileNameFromRecord(FileRecord, NTFS_FILE_NAME_DOS);
Length = FileName->NameLength * sizeof (WCHAR);
if ((sizeof(FILE_BOTH_DIR_INFORMATION) + Length) > BufferLength)
return(STATUS_BUFFER_OVERFLOW);
Info->FileNameLength = Length;
Info->NextEntryOffset =
ROUND_UP(sizeof(FILE_BOTH_DIR_INFORMATION) + Length, sizeof(ULONG));
RtlCopyMemory(Info->FileName, FileName->Name, Length);
if (ShortFileName)
{
/* Should we upcase the filename? */
ASSERT(ShortFileName->NameLength <= ARRAYSIZE(Info->ShortName));
Info->ShortNameLength = ShortFileName->NameLength * sizeof(WCHAR);
RtlCopyMemory(Info->ShortName, ShortFileName->Name, Info->ShortNameLength);
}
else
{
Info->ShortName[0] = 0;
Info->ShortNameLength = 0;
}
Info->CreationTime.QuadPart = FileName->CreationTime;
Info->LastAccessTime.QuadPart = FileName->LastAccessTime;
Info->LastWriteTime.QuadPart = FileName->LastWriteTime;
Info->ChangeTime.QuadPart = FileName->ChangeTime;
/* Convert file flags */
NtfsFileFlagsToAttributes(FileName->FileAttributes, &Info->FileAttributes);
Info->EndOfFile.QuadPart = FileName->AllocatedSize;
Info->AllocationSize.QuadPart = ROUND_UP(FileName->AllocatedSize, DeviceExt->NtfsInfo.BytesPerCluster);
// Info->FileIndex=;
Info->EaSize = 0;
return STATUS_SUCCESS;
}
NTSTATUS NTSTATUS
NtfsQueryDirectory(PNTFS_IRP_CONTEXT IrpContext) NtfsQueryDirectory(PNTFS_IRP_CONTEXT IrpContext)
{ {
PIRP Irp; PIRP Irp;
//PDEVICE_OBJECT DeviceObject; PDEVICE_OBJECT DeviceObject;
//PDEVICE_EXTENSION DeviceExtension; PDEVICE_EXTENSION DeviceExtension;
//LONG BufferLength = 0; LONG BufferLength = 0;
PUNICODE_STRING SearchPattern = NULL; PUNICODE_STRING SearchPattern = NULL;
//FILE_INFORMATION_CLASS FileInformationClass; FILE_INFORMATION_CLASS FileInformationClass;
ULONG FileIndex = 0; ULONG FileIndex = 0;
PUCHAR Buffer = NULL; PUCHAR Buffer = NULL;
PFILE_NAMES_INFORMATION Buffer0 = NULL; PFILE_NAMES_INFORMATION Buffer0 = NULL;
//PNTFS_FCB Fcb; PNTFS_FCB Fcb;
PNTFS_CCB Ccb; PNTFS_CCB Ccb;
// FCB TempFcb;
BOOLEAN First = FALSE; BOOLEAN First = FALSE;
PIO_STACK_LOCATION Stack; PIO_STACK_LOCATION Stack;
PFILE_OBJECT FileObject; PFILE_OBJECT FileObject;
//NTSTATUS Status = STATUS_SUCCESS; NTSTATUS Status = STATUS_SUCCESS;
PFILE_RECORD_HEADER FileRecord;
PNTFS_ATTR_CONTEXT DataContext;
ULONGLONG MFTRecord;
UNICODE_STRING Pattern;
DPRINT1("NtfsQueryDirectory() called\n"); DPRINT1("NtfsQueryDirectory() called\n");
ASSERT(IrpContext); ASSERT(IrpContext);
Irp = IrpContext->Irp; Irp = IrpContext->Irp;
// DeviceObject = IrpContext->DeviceObject; DeviceObject = IrpContext->DeviceObject;
// DeviceExtension = DeviceObject->DeviceExtension; DeviceExtension = DeviceObject->DeviceExtension;
Stack = IoGetCurrentIrpStackLocation(Irp); Stack = IoGetCurrentIrpStackLocation(Irp);
FileObject = Stack->FileObject; FileObject = Stack->FileObject;
Ccb = (PNTFS_CCB)FileObject->FsContext2; Ccb = (PNTFS_CCB)FileObject->FsContext2;
// Fcb = (PNTFS_FCB)FileObject->FsContext; Fcb = (PNTFS_FCB)FileObject->FsContext;
/* Obtain the callers parameters */ /* Obtain the callers parameters */
//BufferLength = Stack->Parameters.QueryDirectory.Length; BufferLength = Stack->Parameters.QueryDirectory.Length;
SearchPattern = Stack->Parameters.QueryDirectory.FileName; SearchPattern = Stack->Parameters.QueryDirectory.FileName;
//FileInformationClass = Stack->Parameters.QueryDirectory.FileInformationClass; FileInformationClass = Stack->Parameters.QueryDirectory.FileInformationClass;
FileIndex = Stack->Parameters.QueryDirectory.FileIndex; FileIndex = Stack->Parameters.QueryDirectory.FileIndex;
if (SearchPattern != NULL) if (SearchPattern != NULL)
{ {
if (!Ccb->DirectorySearchPattern) if (!Ccb->DirectorySearchPattern)
@@ -546,7 +363,10 @@ NtfsQueryDirectory(PNTFS_IRP_CONTEXT IrpContext)
Ccb->DirectorySearchPattern[1] = 0; Ccb->DirectorySearchPattern[1] = 0;
} }
DPRINT("Search pattern '%S'\n", Ccb->DirectorySearchPattern); RtlInitUnicodeString(&Pattern, Ccb->DirectorySearchPattern);
DPRINT1("Search pattern '%S'\n", Ccb->DirectorySearchPattern);
DPRINT1("In: '%S'\n", Fcb->PathName);
/* Determine directory index */ /* Determine directory index */
if (Stack->Flags & SL_INDEX_SPECIFIED) if (Stack->Flags & SL_INDEX_SPECIFIED)
@@ -570,93 +390,96 @@ NtfsQueryDirectory(PNTFS_IRP_CONTEXT IrpContext)
DPRINT("Buffer=%p tofind=%S\n", Buffer, Ccb->DirectorySearchPattern); DPRINT("Buffer=%p tofind=%S\n", Buffer, Ccb->DirectorySearchPattern);
#if 0 while (Status == STATUS_SUCCESS && BufferLength > 0)
TempFcb.ObjectName = TempFcb.PathName;
while (Status == STATUS_SUCCESS && BufferLength > 0)
{ {
Status = CdfsFindFile(DeviceExtension, Status = NtfsFindFileAt(DeviceExtension,
&TempFcb, &Pattern,
Fcb, &Ccb->Entry,
Ccb->DirectorySearchPattern, &FileRecord,
&Ccb->Entry, &DataContext,
NULL); &MFTRecord,
DPRINT("Found %S, Status=%x, entry %x\n", TempFcb.ObjectName, Status, Ccb->Entry); Fcb->MFTIndex);
//DPRINT("Found %S, Status=%x, entry %x\n", TempFcb.ObjectName, Status, Ccb->Entry);
if (NT_SUCCESS(Status)) if (NT_SUCCESS(Status))
{ {
switch (FileInformationClass) switch (FileInformationClass)
{ {
case FileNameInformation: case FileNameInformation:
Status = CdfsGetNameInformation(&TempFcb, Status = NtfsGetNameInformation(DeviceExtension,
DeviceExtension, FileRecord,
(PFILE_NAMES_INFORMATION)Buffer, DataContext,
BufferLength); (PFILE_NAMES_INFORMATION)Buffer,
break; BufferLength);
break;
case FileDirectoryInformation: case FileDirectoryInformation:
Status = CdfsGetDirectoryInformation(&TempFcb, Status = NtfsGetDirectoryInformation(DeviceExtension,
DeviceExtension, FileRecord,
(PFILE_DIRECTORY_INFORMATION)Buffer, DataContext,
BufferLength); (PFILE_DIRECTORY_INFORMATION)Buffer,
break; BufferLength);
break;
case FileFullDirectoryInformation: case FileFullDirectoryInformation:
Status = CdfsGetFullDirectoryInformation(&TempFcb, Status = NtfsGetFullDirectoryInformation(DeviceExtension,
DeviceExtension, FileRecord,
(PFILE_FULL_DIRECTORY_INFORMATION)Buffer, DataContext,
BufferLength); (PFILE_FULL_DIRECTORY_INFORMATION)Buffer,
break; BufferLength);
break;
case FileBothDirectoryInformation: case FileBothDirectoryInformation:
Status = NtfsGetBothDirectoryInformation(&TempFcb, Status = NtfsGetBothDirectoryInformation(DeviceExtension,
DeviceExtension, FileRecord,
(PFILE_BOTH_DIRECTORY_INFORMATION)Buffer, DataContext,
BufferLength); (PFILE_BOTH_DIR_INFORMATION)Buffer,
break; BufferLength);
break;
default: default:
Status = STATUS_INVALID_INFO_CLASS; Status = STATUS_INVALID_INFO_CLASS;
} }
if (Status == STATUS_BUFFER_OVERFLOW) if (Status == STATUS_BUFFER_OVERFLOW)
{ {
if (Buffer0) if (Buffer0)
{ {
Buffer0->NextEntryOffset = 0; Buffer0->NextEntryOffset = 0;
} }
break; break;
} }
} }
else else
{ {
if (Buffer0) if (Buffer0)
{ {
Buffer0->NextEntryOffset = 0; Buffer0->NextEntryOffset = 0;
} }
if (First) if (First)
{ {
Status = STATUS_NO_SUCH_FILE; Status = STATUS_NO_SUCH_FILE;
} }
else else
{ {
Status = STATUS_NO_MORE_FILES; Status = STATUS_NO_MORE_FILES;
} }
break; break;
} }
Buffer0 = (PFILE_NAMES_INFORMATION)Buffer; Buffer0 = (PFILE_NAMES_INFORMATION)Buffer;
Buffer0->FileIndex = FileIndex++; Buffer0->FileIndex = FileIndex++;
Ccb->Entry++; Ccb->Entry++;
if (Stack->Flags & SL_RETURN_SINGLE_ENTRY) if (Stack->Flags & SL_RETURN_SINGLE_ENTRY)
{ {
break; break;
} }
BufferLength -= Buffer0->NextEntryOffset; BufferLength -= Buffer0->NextEntryOffset;
Buffer += Buffer0->NextEntryOffset; Buffer += Buffer0->NextEntryOffset;
ExFreePoolWithTag(FileRecord, TAG_NTFS);
} }
#endif
if (Buffer0) if (Buffer0)
{ {
@@ -665,11 +488,10 @@ NtfsQueryDirectory(PNTFS_IRP_CONTEXT IrpContext)
if (FileIndex > 0) if (FileIndex > 0)
{ {
//Status = STATUS_SUCCESS; Status = STATUS_SUCCESS;
} }
// return Status; return Status;
return STATUS_NO_MORE_FILES;
} }

View File

@@ -289,7 +289,7 @@ NtfsMakeRootFCB(PNTFS_VCB Vcb)
return NULL; return NULL;
} }
FileName = GetFileNameFromRecord(MftRecord); FileName = GetFileNameFromRecord(MftRecord, NTFS_FILE_NAME_WIN32);
if (!FileName) if (!FileName)
{ {
ExFreePoolWithTag(MftRecord, TAG_NTFS); ExFreePoolWithTag(MftRecord, TAG_NTFS);
@@ -391,7 +391,7 @@ NtfsMakeFCBFromDirEntry(PNTFS_VCB Vcb,
DPRINT1("NtfsMakeFCBFromDirEntry(%p, %p, %wZ, %p, %p)\n", Vcb, DirectoryFCB, Name, Record, fileFCB); DPRINT1("NtfsMakeFCBFromDirEntry(%p, %p, %wZ, %p, %p)\n", Vcb, DirectoryFCB, Name, Record, fileFCB);
FileName = GetFileNameFromRecord(Record); FileName = GetFileNameFromRecord(Record, NTFS_FILE_NAME_WIN32);
if (!FileName) if (!FileName)
{ {
return STATUS_OBJECT_NAME_NOT_FOUND; // Not sure that's the best here return STATUS_OBJECT_NAME_NOT_FOUND; // Not sure that's the best here

View File

@@ -34,8 +34,6 @@
#define NDEBUG #define NDEBUG
#include <debug.h> #include <debug.h>
UNICODE_STRING EmptyName = RTL_CONSTANT_STRING(L"");
/* FUNCTIONS ****************************************************************/ /* FUNCTIONS ****************************************************************/
/* /*
@@ -274,7 +272,7 @@ NtfsGetVolumeData(PDEVICE_OBJECT DeviceObject,
return Status; return Status;
} }
Status = FindAttribute(DeviceExt, DeviceExt->MasterFileTable, AttributeData, &EmptyName, &DeviceExt->MFTContext); Status = FindAttribute(DeviceExt, DeviceExt->MasterFileTable, AttributeData, L"", 0, &DeviceExt->MFTContext);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
DPRINT1("Can't find data attribute for Master File Table.\n"); DPRINT1("Can't find data attribute for Master File Table.\n");
@@ -312,7 +310,7 @@ NtfsGetVolumeData(PDEVICE_OBJECT DeviceObject,
NtfsDumpFileAttributes(VolumeRecord); NtfsDumpFileAttributes(VolumeRecord);
/* Get volume name */ /* Get volume name */
Status = FindAttribute(DeviceExt, VolumeRecord, AttributeVolumeName, &EmptyName, &AttrCtxt); Status = FindAttribute(DeviceExt, VolumeRecord, AttributeVolumeName, L"", 0, &AttrCtxt);
if (NT_SUCCESS(Status) && AttrCtxt->Record.Resident.ValueLength != 0) if (NT_SUCCESS(Status) && AttrCtxt->Record.Resident.ValueLength != 0)
{ {
@@ -348,7 +346,7 @@ NtfsGetVolumeData(PDEVICE_OBJECT DeviceObject,
DeviceExt->VolumeFcb = VolumeFcb; DeviceExt->VolumeFcb = VolumeFcb;
/* Get volume information */ /* Get volume information */
Status = FindAttribute(DeviceExt, VolumeRecord, AttributeVolumeInformation, &EmptyName, &AttrCtxt); Status = FindAttribute(DeviceExt, VolumeRecord, AttributeVolumeInformation, L"", 0, &AttrCtxt);
if (NT_SUCCESS(Status) && AttrCtxt->Record.Resident.ValueLength != 0) if (NT_SUCCESS(Status) && AttrCtxt->Record.Resident.ValueLength != 0)
{ {

View File

@@ -31,8 +31,6 @@
#define NDEBUG #define NDEBUG
#include <debug.h> #include <debug.h>
UNICODE_STRING IndexOfFileNames = RTL_CONSTANT_STRING(L"$I30");
/* FUNCTIONS ****************************************************************/ /* FUNCTIONS ****************************************************************/
PNTFS_ATTR_CONTEXT PNTFS_ATTR_CONTEXT
@@ -84,10 +82,10 @@ FindAttributeHelper(PDEVICE_EXTENSION Vcb,
PNTFS_ATTR_RECORD AttrRecord, PNTFS_ATTR_RECORD AttrRecord,
PNTFS_ATTR_RECORD AttrRecordEnd, PNTFS_ATTR_RECORD AttrRecordEnd,
ULONG Type, ULONG Type,
const WCHAR *Name, PCWSTR Name,
ULONG NameLength) ULONG NameLength)
{ {
DPRINT("FindAttributeHelper(%p, %p, %p, 0x%x, %s, %u)\n", Vcb, AttrRecord, AttrRecordEnd, Type, Name, NameLength); DPRINT("FindAttributeHelper(%p, %p, %p, 0x%x, %S, %u)\n", Vcb, AttrRecord, AttrRecordEnd, Type, Name, NameLength);
while (AttrRecord < AttrRecordEnd) while (AttrRecord < AttrRecordEnd)
{ {
@@ -143,13 +141,12 @@ FindAttributeHelper(PDEVICE_EXTENSION Vcb,
if (AttrRecord->Type == Type) if (AttrRecord->Type == Type)
{ {
DPRINT("%d, %d\n", AttrRecord->NameLength, NameLength);
if (AttrRecord->NameLength == NameLength) if (AttrRecord->NameLength == NameLength)
{ {
PWCHAR AttrName; PWCHAR AttrName;
AttrName = (PWCHAR)((PCHAR)AttrRecord + AttrRecord->NameOffset); AttrName = (PWCHAR)((PCHAR)AttrRecord + AttrRecord->NameOffset);
DPRINT("%s, %s\n", AttrName, Name); DPRINT("%.*S, %.*S\n", AttrRecord->NameLength, AttrName, NameLength, Name);
if (RtlCompareMemory(AttrName, Name, NameLength << 1) == (NameLength << 1)) if (RtlCompareMemory(AttrName, Name, NameLength << 1) == (NameLength << 1))
{ {
/* Found it, fill up the context and return. */ /* Found it, fill up the context and return. */
@@ -176,18 +173,19 @@ NTSTATUS
FindAttribute(PDEVICE_EXTENSION Vcb, FindAttribute(PDEVICE_EXTENSION Vcb,
PFILE_RECORD_HEADER MftRecord, PFILE_RECORD_HEADER MftRecord,
ULONG Type, ULONG Type,
PUNICODE_STRING Name, PCWSTR Name,
ULONG NameLength,
PNTFS_ATTR_CONTEXT * AttrCtx) PNTFS_ATTR_CONTEXT * AttrCtx)
{ {
PNTFS_ATTR_RECORD AttrRecord; PNTFS_ATTR_RECORD AttrRecord;
PNTFS_ATTR_RECORD AttrRecordEnd; PNTFS_ATTR_RECORD AttrRecordEnd;
DPRINT("NtfsFindAttribute(%p, %p, %u, %s)\n", Vcb, MftRecord, Type, Name); DPRINT("FindAttribute(%p, %p, 0x%x, %S, %u, %p)\n", Vcb, MftRecord, Type, Name, NameLength, AttrCtx);
AttrRecord = (PNTFS_ATTR_RECORD)((PCHAR)MftRecord + MftRecord->AttributeOffset); AttrRecord = (PNTFS_ATTR_RECORD)((PCHAR)MftRecord + MftRecord->AttributeOffset);
AttrRecordEnd = (PNTFS_ATTR_RECORD)((PCHAR)MftRecord + Vcb->NtfsInfo.BytesPerFileRecord); AttrRecordEnd = (PNTFS_ATTR_RECORD)((PCHAR)MftRecord + Vcb->NtfsInfo.BytesPerFileRecord);
*AttrCtx = FindAttributeHelper(Vcb, AttrRecord, AttrRecordEnd, Type, Name->Buffer, Name->Length); *AttrCtx = FindAttributeHelper(Vcb, AttrRecord, AttrRecordEnd, Type, Name, NameLength);
if (*AttrCtx == NULL) if (*AttrCtx == NULL)
{ {
return STATUS_OBJECT_NAME_NOT_FOUND; return STATUS_OBJECT_NAME_NOT_FOUND;
@@ -399,10 +397,12 @@ ReadFileRecord(PDEVICE_EXTENSION Vcb,
{ {
ULONGLONG BytesRead; ULONGLONG BytesRead;
DPRINT("ReadFileRecord(%p, %I64x, %p)\n", Vcb, index, file);
BytesRead = ReadAttribute(Vcb, Vcb->MFTContext, index * Vcb->NtfsInfo.BytesPerFileRecord, (PCHAR)file, Vcb->NtfsInfo.BytesPerFileRecord); BytesRead = ReadAttribute(Vcb, Vcb->MFTContext, index * Vcb->NtfsInfo.BytesPerFileRecord, (PCHAR)file, Vcb->NtfsInfo.BytesPerFileRecord);
if (BytesRead != Vcb->NtfsInfo.BytesPerFileRecord) if (BytesRead != Vcb->NtfsInfo.BytesPerFileRecord)
{ {
DPRINT1("ReadFileRecord failed: %u read, %u expected\n", BytesRead, Vcb->NtfsInfo.BytesPerFileRecord); DPRINT1("ReadFileRecord failed: %I64u read, %u expected\n", BytesRead, Vcb->NtfsInfo.BytesPerFileRecord);
return STATUS_PARTIAL_COPY; return STATUS_PARTIAL_COPY;
} }
@@ -469,7 +469,7 @@ CompareFileName(PUNICODE_STRING FileName,
EntryName.Buffer = IndexEntry->FileName.Name; EntryName.Buffer = IndexEntry->FileName.Name;
EntryName.Length = EntryName.Length =
EntryName.MaximumLength = IndexEntry->FileName.NameLength; EntryName.MaximumLength = IndexEntry->FileName.NameLength * sizeof(WCHAR);
if (DirSearch) if (DirSearch)
{ {
@@ -477,7 +477,7 @@ CompareFileName(PUNICODE_STRING FileName,
} }
else else
{ {
return (RtlCompareUnicodeString(FileName, &EntryName, (IndexEntry->FileName.NameType != NTFS_FILE_NAME_POSIX)) == TRUE); return (RtlCompareUnicodeString(FileName, &EntryName, (IndexEntry->FileName.NameType != NTFS_FILE_NAME_POSIX)) == 0);
} }
} }
@@ -488,8 +488,7 @@ NtfsFindMftRecord(PDEVICE_EXTENSION Vcb,
PUNICODE_STRING FileName, PUNICODE_STRING FileName,
PULONG FirstEntry, PULONG FirstEntry,
BOOLEAN DirSearch, BOOLEAN DirSearch,
ULONGLONG *OutMFTIndex, ULONGLONG *OutMFTIndex)
PWSTR OutName)
{ {
PFILE_RECORD_HEADER MftRecord; PFILE_RECORD_HEADER MftRecord;
//ULONG Magic; //ULONG Magic;
@@ -497,6 +496,7 @@ NtfsFindMftRecord(PDEVICE_EXTENSION Vcb,
PNTFS_ATTR_CONTEXT IndexBitmapCtx; PNTFS_ATTR_CONTEXT IndexBitmapCtx;
PNTFS_ATTR_CONTEXT IndexAllocationCtx; PNTFS_ATTR_CONTEXT IndexAllocationCtx;
PINDEX_ROOT_ATTRIBUTE IndexRoot; PINDEX_ROOT_ATTRIBUTE IndexRoot;
PINDEX_BUFFER IndexBuffer;
ULONGLONG BitmapDataSize; ULONGLONG BitmapDataSize;
ULONGLONG IndexAllocationSize; ULONGLONG IndexAllocationSize;
PCHAR BitmapData; PCHAR BitmapData;
@@ -507,6 +507,8 @@ NtfsFindMftRecord(PDEVICE_EXTENSION Vcb,
NTSTATUS Status; NTSTATUS Status;
ULONG CurrentEntry = 0; ULONG CurrentEntry = 0;
DPRINT("NtfsFindMftRecord(%p, %I64d, %wZ, %p, %u, %p)\n", Vcb, MFTIndex, FileName, FirstEntry, DirSearch, OutMFTIndex);
MftRecord = ExAllocatePoolWithTag(NonPagedPool, MftRecord = ExAllocatePoolWithTag(NonPagedPool,
Vcb->NtfsInfo.BytesPerFileRecord, Vcb->NtfsInfo.BytesPerFileRecord,
TAG_NTFS); TAG_NTFS);
@@ -519,7 +521,7 @@ NtfsFindMftRecord(PDEVICE_EXTENSION Vcb,
{ {
//Magic = MftRecord->Magic; //Magic = MftRecord->Magic;
Status = FindAttribute(Vcb, MftRecord, AttributeIndexRoot, &IndexOfFileNames, &IndexRootCtx); Status = FindAttribute(Vcb, MftRecord, AttributeIndexRoot, L"$I30", 4, &IndexRootCtx);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
ExFreePoolWithTag(MftRecord, TAG_NTFS); ExFreePoolWithTag(MftRecord, TAG_NTFS);
@@ -545,12 +547,12 @@ NtfsFindMftRecord(PDEVICE_EXTENSION Vcb,
while (IndexEntry < IndexEntryEnd && while (IndexEntry < IndexEntryEnd &&
!(IndexEntry->Flags & NTFS_INDEX_ENTRY_END)) !(IndexEntry->Flags & NTFS_INDEX_ENTRY_END))
{ {
if (CurrentEntry >= *FirstEntry && CompareFileName(FileName, IndexEntry, DirSearch)) if ((IndexEntry->Data.Directory.IndexedFile & NTFS_MFT_MASK) > 0x10 &&
CurrentEntry >= *FirstEntry &&
CompareFileName(FileName, IndexEntry, DirSearch))
{ {
*OutMFTIndex = IndexEntry->Data.Directory.IndexedFile; *OutMFTIndex = (IndexEntry->Data.Directory.IndexedFile & NTFS_MFT_MASK);
*FirstEntry = CurrentEntry; *FirstEntry = CurrentEntry;
RtlCopyMemory(OutName, IndexEntry->FileName.Name, IndexEntry->FileName.NameLength);
OutName[IndexEntry->FileName.NameLength / sizeof(WCHAR)] = UNICODE_NULL;
ExFreePoolWithTag(IndexRecord, TAG_NTFS); ExFreePoolWithTag(IndexRecord, TAG_NTFS);
ExFreePoolWithTag(MftRecord, TAG_NTFS); ExFreePoolWithTag(MftRecord, TAG_NTFS);
return STATUS_SUCCESS; return STATUS_SUCCESS;
@@ -566,10 +568,10 @@ NtfsFindMftRecord(PDEVICE_EXTENSION Vcb,
IndexBlockSize = IndexRoot->SizeOfEntry; IndexBlockSize = IndexRoot->SizeOfEntry;
Status = FindAttribute(Vcb, MftRecord, AttributeBitmap, &IndexOfFileNames, &IndexBitmapCtx); Status = FindAttribute(Vcb, MftRecord, AttributeBitmap, L"$I30", 4, &IndexBitmapCtx);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
DPRINT("Corrupted filesystem!\n"); DPRINT1("Corrupted filesystem!\n");
ExFreePoolWithTag(MftRecord, TAG_NTFS); ExFreePoolWithTag(MftRecord, TAG_NTFS);
return Status; return Status;
} }
@@ -589,7 +591,7 @@ NtfsFindMftRecord(PDEVICE_EXTENSION Vcb,
ReadAttribute(Vcb, IndexBitmapCtx, 0, BitmapData, (ULONG)BitmapDataSize); ReadAttribute(Vcb, IndexBitmapCtx, 0, BitmapData, (ULONG)BitmapDataSize);
ReleaseAttributeContext(IndexBitmapCtx); ReleaseAttributeContext(IndexBitmapCtx);
Status = FindAttribute(Vcb, MftRecord, AttributeIndexAllocation, &IndexOfFileNames, &IndexAllocationCtx); Status = FindAttribute(Vcb, MftRecord, AttributeIndexAllocation, L"$I30", 4, &IndexAllocationCtx);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
DPRINT("Corrupted filesystem!\n"); DPRINT("Corrupted filesystem!\n");
@@ -621,25 +623,28 @@ NtfsFindMftRecord(PDEVICE_EXTENSION Vcb,
ReadAttribute(Vcb, IndexAllocationCtx, RecordOffset, IndexRecord, IndexBlockSize); ReadAttribute(Vcb, IndexAllocationCtx, RecordOffset, IndexRecord, IndexBlockSize);
if (!FixupUpdateSequenceArray(Vcb, &((PFILE_RECORD_HEADER)IndexRecord)->Ntfs)) if (!NT_SUCCESS(FixupUpdateSequenceArray(Vcb, &((PFILE_RECORD_HEADER)IndexRecord)->Ntfs)))
{ {
break; break;
} }
/* FIXME */ IndexBuffer = (PINDEX_BUFFER)IndexRecord;
IndexEntry = (PINDEX_ENTRY_ATTRIBUTE)(IndexRecord + 0x18 + *(USHORT *)(IndexRecord + 0x18)); ASSERT(IndexBuffer->Ntfs.Type == 'XDNI');
IndexEntryEnd = (PINDEX_ENTRY_ATTRIBUTE)(IndexRecord + IndexBlockSize); ASSERT(IndexBuffer->Header.AllocatedSize + 0x18 == IndexBlockSize);
IndexEntry = (PINDEX_ENTRY_ATTRIBUTE)((ULONG_PTR)&IndexBuffer->Header + IndexBuffer->Header.FirstEntryOffset);
IndexEntryEnd = (PINDEX_ENTRY_ATTRIBUTE)((ULONG_PTR)&IndexBuffer->Header + IndexBuffer->Header.TotalSizeOfEntries);
ASSERT(IndexEntryEnd <= (PINDEX_ENTRY_ATTRIBUTE)((ULONG_PTR)IndexBuffer + IndexBlockSize));
while (IndexEntry < IndexEntryEnd && while (IndexEntry < IndexEntryEnd &&
!(IndexEntry->Flags & NTFS_INDEX_ENTRY_END)) !(IndexEntry->Flags & NTFS_INDEX_ENTRY_END))
{ {
if (CurrentEntry >= *FirstEntry && CompareFileName(FileName, IndexEntry, DirSearch)) if ((IndexEntry->Data.Directory.IndexedFile & NTFS_MFT_MASK) > 0x10 &&
CurrentEntry >= *FirstEntry &&
CompareFileName(FileName, IndexEntry, DirSearch))
{ {
DPRINT("File found\n"); DPRINT("File found\n");
*OutMFTIndex = IndexEntry->Data.Directory.IndexedFile; *OutMFTIndex = (IndexEntry->Data.Directory.IndexedFile & NTFS_MFT_MASK);
*FirstEntry = CurrentEntry; *FirstEntry = CurrentEntry;
RtlCopyMemory(OutName, IndexEntry->FileName.Name, IndexEntry->FileName.NameLength);
OutName[IndexEntry->FileName.NameLength / sizeof(WCHAR)] = UNICODE_NULL;
ExFreePoolWithTag(BitmapData, TAG_NTFS); ExFreePoolWithTag(BitmapData, TAG_NTFS);
ExFreePoolWithTag(IndexRecord, TAG_NTFS); ExFreePoolWithTag(IndexRecord, TAG_NTFS);
ExFreePoolWithTag(MftRecord, TAG_NTFS); ExFreePoolWithTag(MftRecord, TAG_NTFS);
@@ -648,6 +653,7 @@ NtfsFindMftRecord(PDEVICE_EXTENSION Vcb,
} }
++CurrentEntry; ++CurrentEntry;
ASSERT(IndexEntry->Length >= sizeof(INDEX_ENTRY_ATTRIBUTE));
IndexEntry = (PINDEX_ENTRY_ATTRIBUTE)((PCHAR)IndexEntry + IndexEntry->Length); IndexEntry = (PINDEX_ENTRY_ATTRIBUTE)((PCHAR)IndexEntry + IndexEntry->Length);
} }
@@ -677,26 +683,28 @@ NtfsLookupFileAt(PDEVICE_EXTENSION Vcb,
PULONGLONG MFTIndex, PULONGLONG MFTIndex,
ULONGLONG CurrentMFTIndex) ULONGLONG CurrentMFTIndex)
{ {
UNICODE_STRING Current, Remaining, Found; UNICODE_STRING Current, Remaining;
NTSTATUS Status; NTSTATUS Status;
WCHAR FoundName[MAX_PATH + 1];
ULONG FirstEntry = 0; ULONG FirstEntry = 0;
DPRINT1("NtfsLookupFileAt(%p, %wZ, %p, %p, %I64x)\n", Vcb, PathName, FileRecord, DataContext, CurrentMFTIndex); DPRINT("NtfsLookupFileAt(%p, %wZ, %p, %p, %I64x)\n", Vcb, PathName, FileRecord, DataContext, CurrentMFTIndex);
FsRtlDissectName(*PathName, &Current, &Remaining); FsRtlDissectName(*PathName, &Current, &Remaining);
while (Current.Length != 0) while (Current.Length != 0)
{ {
DPRINT1("Lookup: %wZ\n", &Current); DPRINT("Current: %wZ\n", &Current);
Status = NtfsFindMftRecord(Vcb, CurrentMFTIndex, &Current, &FirstEntry, FALSE, &CurrentMFTIndex, FoundName); Status = NtfsFindMftRecord(Vcb, CurrentMFTIndex, &Current, &FirstEntry, FALSE, &CurrentMFTIndex);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
return Status; return Status;
} }
FsRtlDissectName(*PathName, &Current, &Remaining); if (Remaining.Length == 0)
break;
FsRtlDissectName(Current, &Current, &Remaining);
} }
*FileRecord = ExAllocatePoolWithTag(NonPagedPool, Vcb->NtfsInfo.BytesPerFileRecord, TAG_NTFS); *FileRecord = ExAllocatePoolWithTag(NonPagedPool, Vcb->NtfsInfo.BytesPerFileRecord, TAG_NTFS);
@@ -710,18 +718,23 @@ NtfsLookupFileAt(PDEVICE_EXTENSION Vcb,
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
DPRINT("NtfsLookupFileAt: Can't read MFT record\n"); DPRINT("NtfsLookupFileAt: Can't read MFT record\n");
ExFreePoolWithTag(FileRecord, TAG_NTFS); ExFreePoolWithTag(*FileRecord, TAG_NTFS);
return Status; return Status;
} }
RtlInitUnicodeString(&Found, FoundName); if (!((*FileRecord)->Flags & FRH_DIRECTORY))
Status = FindAttribute(Vcb, *FileRecord, AttributeData, &Found, DataContext);
if (!NT_SUCCESS(Status))
{ {
DPRINT("NtfsLookupFileAt: Can't find data attribute\n"); Status = FindAttribute(Vcb, *FileRecord, AttributeData, L"", 0, DataContext);
ExFreePoolWithTag(FileRecord, TAG_NTFS); if (!NT_SUCCESS(Status))
return Status; {
DPRINT("NtfsLookupFileAt: Can't find data attribute\n");
ExFreePoolWithTag(*FileRecord, TAG_NTFS);
return Status;
}
}
else
{
*DataContext = NULL;
} }
*MFTIndex = CurrentMFTIndex; *MFTIndex = CurrentMFTIndex;
@@ -748,15 +761,14 @@ NtfsFindFileAt(PDEVICE_EXTENSION Vcb,
PULONGLONG MFTIndex, PULONGLONG MFTIndex,
ULONGLONG CurrentMFTIndex) ULONGLONG CurrentMFTIndex)
{ {
UNICODE_STRING Found;
NTSTATUS Status; NTSTATUS Status;
WCHAR FoundName[MAX_PATH + 1];
DPRINT1("NtfsFindFileAt(%p, %wZ, %p, %p, %p, %p, %I64x)\n", Vcb, SearchPattern, FirstEntry, FileRecord, DataContext, MFTIndex, CurrentMFTIndex); DPRINT("NtfsFindFileAt(%p, %wZ, %p, %p, %p, %p, %I64x)\n", Vcb, SearchPattern, FirstEntry, FileRecord, DataContext, MFTIndex, CurrentMFTIndex);
Status = NtfsFindMftRecord(Vcb, CurrentMFTIndex, SearchPattern, FirstEntry, TRUE, &CurrentMFTIndex, FoundName); Status = NtfsFindMftRecord(Vcb, CurrentMFTIndex, SearchPattern, FirstEntry, TRUE, &CurrentMFTIndex);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
DPRINT("NtfsFindFileAt: NtfsFindMftRecord() failed with status 0x%08lx\n", Status);
return Status; return Status;
} }
@@ -771,18 +783,23 @@ NtfsFindFileAt(PDEVICE_EXTENSION Vcb,
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
DPRINT("NtfsFindFileAt: Can't read MFT record\n"); DPRINT("NtfsFindFileAt: Can't read MFT record\n");
ExFreePoolWithTag(FileRecord, TAG_NTFS); ExFreePoolWithTag(*FileRecord, TAG_NTFS);
return Status; return Status;
} }
RtlInitUnicodeString(&Found, FoundName); if (!((*FileRecord)->Flags & FRH_DIRECTORY))
Status = FindAttribute(Vcb, *FileRecord, AttributeData, &Found, DataContext);
if (!NT_SUCCESS(Status))
{ {
DPRINT("NtfsFindFileAt: Can't find data attribute\n"); Status = FindAttribute(Vcb, *FileRecord, AttributeData, L"", 0, DataContext);
ExFreePoolWithTag(FileRecord, TAG_NTFS); if (!NT_SUCCESS(Status))
return Status; {
DPRINT("NtfsFindFileAt: Can't find data attribute\n");
ExFreePoolWithTag(*FileRecord, TAG_NTFS);
return Status;
}
}
else
{
*DataContext = NULL;
} }
*MFTIndex = CurrentMFTIndex; *MFTIndex = CurrentMFTIndex;

View File

@@ -97,4 +97,19 @@ NtfsAllocateIrpContext(PDEVICE_OBJECT DeviceObject,
return IrpContext; return IrpContext;
} }
VOID
NtfsFileFlagsToAttributes(ULONG NtfsAttributes,
PULONG FileAttributes)
{
*FileAttributes = NtfsAttributes;
if ((NtfsAttributes & NTFS_FILE_TYPE_DIRECTORY) == NTFS_FILE_TYPE_DIRECTORY)
{
*FileAttributes = NtfsAttributes & ~NTFS_FILE_TYPE_DIRECTORY;
*FileAttributes |= FILE_ATTRIBUTE_DIRECTORY;
}
if (NtfsAttributes == 0)
*FileAttributes = FILE_ATTRIBUTE_NORMAL;
}
/* EOF */ /* EOF */

View File

@@ -169,6 +169,8 @@ typedef enum
#define NTFS_FILE_UPCASE 10 #define NTFS_FILE_UPCASE 10
#define NTFS_FILE_EXTEND 11 #define NTFS_FILE_EXTEND 11
#define NTFS_MFT_MASK 0x0000FFFFFFFFFFFFULL
#define COLLATION_BINARY 0x00 #define COLLATION_BINARY 0x00
#define COLLATION_FILE_NAME 0x01 #define COLLATION_FILE_NAME 0x01
#define COLLATION_UNICODE_STRING 0x02 #define COLLATION_UNICODE_STRING 0x02
@@ -329,6 +331,13 @@ typedef struct
INDEX_HEADER_ATTRIBUTE Header; INDEX_HEADER_ATTRIBUTE Header;
} INDEX_ROOT_ATTRIBUTE, *PINDEX_ROOT_ATTRIBUTE; } INDEX_ROOT_ATTRIBUTE, *PINDEX_ROOT_ATTRIBUTE;
typedef struct
{
NTFS_RECORD_HEADER Ntfs;
ULONGLONG VCN;
INDEX_HEADER_ATTRIBUTE Header;
} INDEX_BUFFER, *PINDEX_BUFFER;
typedef struct typedef struct
{ {
union union
@@ -439,7 +448,7 @@ VOID
NtfsDumpFileAttributes(PFILE_RECORD_HEADER FileRecord); NtfsDumpFileAttributes(PFILE_RECORD_HEADER FileRecord);
PFILENAME_ATTRIBUTE PFILENAME_ATTRIBUTE
GetFileNameFromRecord(PFILE_RECORD_HEADER FileRecord); GetFileNameFromRecord(PFILE_RECORD_HEADER FileRecord, UCHAR NameType);
/* blockdev.c */ /* blockdev.c */
@@ -613,7 +622,8 @@ NTSTATUS
FindAttribute(PDEVICE_EXTENSION Vcb, FindAttribute(PDEVICE_EXTENSION Vcb,
PFILE_RECORD_HEADER MftRecord, PFILE_RECORD_HEADER MftRecord,
ULONG Type, ULONG Type,
PUNICODE_STRING Name, PCWSTR Name,
ULONG NameLength,
PNTFS_ATTR_CONTEXT * AttrCtx); PNTFS_ATTR_CONTEXT * AttrCtx);
VOID VOID
@@ -680,16 +690,12 @@ VOID
CdfsSwapString(PWCHAR Out, CdfsSwapString(PWCHAR Out,
PUCHAR In, PUCHAR In,
ULONG Count); ULONG Count);
VOID
CdfsDateTimeToFileTime(PFCB Fcb,
TIME *FileTime);
VOID
CdfsFileFlagsToAttributes(PFCB Fcb,
PULONG FileAttributes);
#endif #endif
VOID
NtfsFileFlagsToAttributes(ULONG NtfsAttributes,
PULONG FileAttributes);
/* rw.c */ /* rw.c */

View File

@@ -32,6 +32,14 @@
/* FUNCTIONS ****************************************************************/ /* FUNCTIONS ****************************************************************/
static
ULONGLONG
NtfsGetFreeClusters(PDEVICE_EXTENSION DeviceExt)
{
UNIMPLEMENTED;
return 0;
}
static static
NTSTATUS NTSTATUS
NtfsGetFsVolumeInformation(PDEVICE_OBJECT DeviceObject, NtfsGetFsVolumeInformation(PDEVICE_OBJECT DeviceObject,
@@ -130,8 +138,8 @@ NtfsGetFsSizeInformation(PDEVICE_OBJECT DeviceObject,
DeviceExt = DeviceObject->DeviceExtension; DeviceExt = DeviceObject->DeviceExtension;
FsSizeInfo->AvailableAllocationUnits.QuadPart = 0; FsSizeInfo->AvailableAllocationUnits.QuadPart = NtfsGetFreeClusters(DeviceExt);
FsSizeInfo->TotalAllocationUnits.QuadPart = DeviceExt->NtfsInfo.SectorCount; /* ?? */ FsSizeInfo->TotalAllocationUnits.QuadPart = DeviceExt->NtfsInfo.SectorCount / DeviceExt->NtfsInfo.SectorsPerCluster;
FsSizeInfo->SectorsPerAllocationUnit = DeviceExt->NtfsInfo.SectorsPerCluster; FsSizeInfo->SectorsPerAllocationUnit = DeviceExt->NtfsInfo.SectorsPerCluster;
FsSizeInfo->BytesPerSector = DeviceExt->NtfsInfo.BytesPerSector; FsSizeInfo->BytesPerSector = DeviceExt->NtfsInfo.BytesPerSector;
@@ -145,7 +153,8 @@ NtfsGetFsSizeInformation(PDEVICE_OBJECT DeviceObject,
static static
NTSTATUS NTSTATUS
NtfsGetFsDeviceInformation(PFILE_FS_DEVICE_INFORMATION FsDeviceInfo, NtfsGetFsDeviceInformation(PDEVICE_OBJECT DeviceObject,
PFILE_FS_DEVICE_INFORMATION FsDeviceInfo,
PULONG BufferLength) PULONG BufferLength)
{ {
DPRINT("NtfsGetFsDeviceInformation()\n"); DPRINT("NtfsGetFsDeviceInformation()\n");
@@ -157,7 +166,7 @@ NtfsGetFsDeviceInformation(PFILE_FS_DEVICE_INFORMATION FsDeviceInfo,
return STATUS_BUFFER_OVERFLOW; return STATUS_BUFFER_OVERFLOW;
FsDeviceInfo->DeviceType = FILE_DEVICE_DISK; FsDeviceInfo->DeviceType = FILE_DEVICE_DISK;
FsDeviceInfo->Characteristics = 0; /* FIXME: fix this !! */ FsDeviceInfo->Characteristics = DeviceObject->Characteristics;
DPRINT("NtfsGetFsDeviceInformation() finished.\n"); DPRINT("NtfsGetFsDeviceInformation() finished.\n");
@@ -215,7 +224,8 @@ NtfsQueryVolumeInformation(PNTFS_IRP_CONTEXT IrpContext)
break; break;
case FileFsDeviceInformation: case FileFsDeviceInformation:
Status = NtfsGetFsDeviceInformation(SystemBuffer, Status = NtfsGetFsDeviceInformation(DeviceObject,
SystemBuffer,
&BufferLength); &BufferLength);
break; break;

View File

@@ -694,7 +694,7 @@ cleanup:
{ {
TRACE_(I8042PRT, "IRP_MJ_INTERNAL_DEVICE_CONTROL / IOCTL_KEYBOARD_QUERY_INDICATORS\n"); TRACE_(I8042PRT, "IRP_MJ_INTERNAL_DEVICE_CONTROL / IOCTL_KEYBOARD_QUERY_INDICATORS\n");
if (Stack->Parameters.DeviceIoControl.InputBufferLength < sizeof(KEYBOARD_INDICATOR_PARAMETERS)) if (Stack->Parameters.DeviceIoControl.OutputBufferLength < sizeof(KEYBOARD_INDICATOR_PARAMETERS))
{ {
Status = STATUS_BUFFER_TOO_SMALL; Status = STATUS_BUFFER_TOO_SMALL;
} }

View File

@@ -1692,7 +1692,7 @@ IssueIdentify(
deviceExtension->FullIdentifyData.NVCache_Version deviceExtension->FullIdentifyData.NVCache_Version
)); ));
KdPrint2((PRINT_PREFIX "R-rate %#x\n", KdPrint2((PRINT_PREFIX "R-rate %d\n",
deviceExtension->FullIdentifyData.NominalMediaRotationRate deviceExtension->FullIdentifyData.NominalMediaRotationRate
)); ));
@@ -5071,9 +5071,9 @@ continue_err:
if(AtaReq->retry < MAX_RETRIES) { if(AtaReq->retry < MAX_RETRIES) {
//fallback_pio: //fallback_pio:
if(!(deviceExtension->HwFlags & UNIATA_AHCI)) { if(!(deviceExtension->HwFlags & UNIATA_AHCI)) {
AtaReq->Flags &= ~REQ_FLAG_DMA_OPERATION; //AtaReq->Flags &= ~REQ_FLAG_DMA_OPERATION;
// Downrate will happen in AtapiDmaReinit(), try UDMA-2 for HDD only
AtaReq->Flags |= REQ_FLAG_FORCE_DOWNRATE; AtaReq->Flags |= REQ_FLAG_FORCE_DOWNRATE;
// LunExt->DeviceFlags |= DFLAGS_FORCE_DOWNRATE;
} }
AtaReq->ReqState = REQ_STATE_QUEUED; AtaReq->ReqState = REQ_STATE_QUEUED;
goto reenqueue_req; goto reenqueue_req;
@@ -5093,6 +5093,7 @@ continue_err:
((error >> 4) == SCSI_SENSE_HARDWARE_ERROR)) { ((error >> 4) == SCSI_SENSE_HARDWARE_ERROR)) {
if(AtaReq->retry < MAX_RETRIES) { if(AtaReq->retry < MAX_RETRIES) {
//fallback_pio: //fallback_pio:
// Downrate will happen in AtapiDmaReinit(), use PIO immediately for ATAPI
AtaReq->Flags &= ~REQ_FLAG_DMA_OPERATION; AtaReq->Flags &= ~REQ_FLAG_DMA_OPERATION;
AtaReq->Flags |= REQ_FLAG_FORCE_DOWNRATE; AtaReq->Flags |= REQ_FLAG_FORCE_DOWNRATE;
// LunExt->DeviceFlags |= DFLAGS_FORCE_DOWNRATE; // LunExt->DeviceFlags |= DFLAGS_FORCE_DOWNRATE;
@@ -5449,6 +5450,7 @@ IntrPrepareResetController:
chan->ChannelCtrlFlags &= ~CTRFLAGS_DMA_OPERATION; chan->ChannelCtrlFlags &= ~CTRFLAGS_DMA_OPERATION;
goto CompleteRequest; goto CompleteRequest;
} }
continue_read_drq:
// Ensure that this is a read command. // Ensure that this is a read command.
if (srb->SrbFlags & SRB_FLAGS_DATA_IN) { if (srb->SrbFlags & SRB_FLAGS_DATA_IN) {
@@ -5489,7 +5491,6 @@ IntrPrepareResetController:
} }
} }
} }
} else { } else {
KdPrint2((PRINT_PREFIX KdPrint2((PRINT_PREFIX
"IdeIntr: Read %#x Dwords\n", wordCount/2)); "IdeIntr: Read %#x Dwords\n", wordCount/2));
@@ -5581,6 +5582,12 @@ IntrPrepareResetController:
status = SRB_STATUS_SUCCESS; status = SRB_STATUS_SUCCESS;
goto CompleteRequest; goto CompleteRequest;
} }
} else {
if(!atapiDev && !DataOverrun && (srb->SrbFlags & SRB_FLAGS_DATA_IN) &&
(statusByte == (IDE_STATUS_IDLE | IDE_STATUS_DRQ))) {
KdPrint2((PRINT_PREFIX " HDD read data ready \n"));
goto continue_read_drq;
}
} }
} }
@@ -6689,6 +6696,7 @@ IdeReadWrite(
// Adjust buffer address and words left count. // Adjust buffer address and words left count.
AtaReq->WordsLeft -= wordCount; AtaReq->WordsLeft -= wordCount;
AtaReq->DataBuffer += wordCount; AtaReq->DataBuffer += wordCount;
AtaReq->WordsTransfered += wordCount;
// Wait for interrupt. // Wait for interrupt.
return SRB_STATUS_PENDING; return SRB_STATUS_PENDING;

View File

@@ -587,10 +587,8 @@ AtapiDmaStart(
case ATA_PROMISE_ID: case ATA_PROMISE_ID:
if(ChipType == PRNEW) { if(ChipType == PRNEW) {
ULONG Channel = deviceExtension->Channel + lChannel; ULONG Channel = deviceExtension->Channel + lChannel;
if(chan->ChannelCtrlFlags & CTRFLAGS_LBA48) { if(chan->ChannelCtrlFlags & CTRFLAGS_LBA48) {
AtapiWritePortEx1(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11,
AtapiReadPortEx1(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11) |
(Channel ? 0x08 : 0x02));
AtapiWritePortEx4(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),(Channel ? 0x24 : 0x20), AtapiWritePortEx4(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),(Channel ? 0x24 : 0x20),
((Srb->SrbFlags & SRB_FLAGS_DATA_IN) ? 0x05000000 : 0x06000000) | (Srb->DataTransferLength >> 1) ((Srb->SrbFlags & SRB_FLAGS_DATA_IN) ? 0x05000000 : 0x06000000) | (Srb->DataTransferLength >> 1)
); );
@@ -659,10 +657,12 @@ AtapiDmaDone(
case ATA_PROMISE_ID: case ATA_PROMISE_ID:
if(ChipType == PRNEW) { if(ChipType == PRNEW) {
ULONG Channel = deviceExtension->Channel + lChannel; ULONG Channel = deviceExtension->Channel + lChannel;
/*
AtapiWritePortEx1(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11,
AtapiReadPortEx1(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11) &
~(Channel ? 0x08 : 0x02));
*/
if(chan->ChannelCtrlFlags & CTRFLAGS_LBA48) { if(chan->ChannelCtrlFlags & CTRFLAGS_LBA48) {
AtapiWritePortEx1(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11,
AtapiReadPortEx1(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11) &
~(Channel ? 0x08 : 0x02));
AtapiWritePortEx4(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),(Channel ? 0x24 : 0x20), AtapiWritePortEx4(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),(Channel ? 0x24 : 0x20),
0 0
); );
@@ -1555,10 +1555,13 @@ set_new_acard:
return; return;
break; } break; }
case ATA_PROMISE_ID: case ATA_PROMISE_ID: {
/***********/ /***********/
/* Promise */ /* Promise */
/***********/ /***********/
UCHAR sel66 = Channel ? 0x08: 0x02;
if(ChipType < PRTX) { if(ChipType < PRTX) {
if (isAtapi) { if (isAtapi) {
udmamode = udmamode =
@@ -1566,12 +1569,29 @@ set_new_acard:
} }
} }
for(i=udmamode; i>=0; i--) { for(i=udmamode; i>=0; i--) {
if(ChipType == PRNEW) {
if(i>2) {
AtapiWritePortEx1(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11,
AtapiReadPortEx1(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11) |
sel66);
} else {
AtapiWritePortEx1(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11,
AtapiReadPortEx1(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11) &
~sel66);
}
}
if(AtaSetTransferMode(deviceExtension, DeviceNumber, lChannel, LunExt, ATA_UDMA0 + i)) { if(AtaSetTransferMode(deviceExtension, DeviceNumber, lChannel, LunExt, ATA_UDMA0 + i)) {
promise_timing(deviceExtension, dev, (UCHAR)(ATA_UDMA + i)); // ??? promise_timing(deviceExtension, dev, (UCHAR)(ATA_UDMA + i)); // ???
return; return;
} }
} }
if(ChipType == PRNEW) {
AtapiWritePortEx1(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11,
AtapiReadPortEx1(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11) &
~sel66);
}
for(i=wdmamode; i>=0; i--) { for(i=wdmamode; i>=0; i--) {
if(AtaSetTransferMode(deviceExtension, DeviceNumber, lChannel, LunExt, ATA_WDMA0 + i)) { if(AtaSetTransferMode(deviceExtension, DeviceNumber, lChannel, LunExt, ATA_WDMA0 + i)) {
promise_timing(deviceExtension, dev, (UCHAR)(ATA_WDMA0+i)); promise_timing(deviceExtension, dev, (UCHAR)(ATA_WDMA0+i));
@@ -1587,7 +1607,7 @@ set_new_acard:
AtaSetTransferMode(deviceExtension, DeviceNumber, lChannel, LunExt, ATA_PIO0 + apiomode); AtaSetTransferMode(deviceExtension, DeviceNumber, lChannel, LunExt, ATA_PIO0 + apiomode);
promise_timing(deviceExtension, dev, ATA_PIO0 + apiomode); promise_timing(deviceExtension, dev, ATA_PIO0 + apiomode);
return; return;
break; break; }
case ATA_ATI_ID: case ATA_ATI_ID:
KdPrint2((PRINT_PREFIX "ATI\n")); KdPrint2((PRINT_PREFIX "ATI\n"));

View File

@@ -968,6 +968,12 @@ UniataAhciDetect(
KdPrint2((PRINT_PREFIX "\n")); KdPrint2((PRINT_PREFIX "\n"));
/* get the number of HW channels */ /* get the number of HW channels */
/* CAP.NOP sometimes indicate the index of the last enabled
* port, at other times, that of the last possible port, so
* determining the maximum port number requires looking at
* both CAP.NOP and PI.
*/
PI = UniataAhciReadHostPort4(deviceExtension, IDX_AHCI_PI); PI = UniataAhciReadHostPort4(deviceExtension, IDX_AHCI_PI);
deviceExtension->AHCI_PI = PI; deviceExtension->AHCI_PI = PI;
KdPrint2((PRINT_PREFIX " AHCI PI %#x\n", PI)); KdPrint2((PRINT_PREFIX " AHCI PI %#x\n", PI));

View File

@@ -1,10 +1,10 @@
#define UNIATA_VER_STR "45a8" #define UNIATA_VER_STR "45b1"
#define UNIATA_VER_DOT 0.45.1.8 #define UNIATA_VER_DOT 0.45.2.1
#define UNIATA_VER_MJ 0 #define UNIATA_VER_MJ 0
#define UNIATA_VER_MN 45 #define UNIATA_VER_MN 45
#define UNIATA_VER_SUB_MJ 1 #define UNIATA_VER_SUB_MJ 2
#define UNIATA_VER_SUB_MN 8 #define UNIATA_VER_SUB_MN 1
#define UNIATA_VER_DOT_COMMA 0,45,1,8 #define UNIATA_VER_DOT_COMMA 0,45,2,1
#define UNIATA_VER_DOT_STR "0.45.1.8" #define UNIATA_VER_DOT_STR "0.45.2.1"
#define UNIATA_VER_YEAR 2014 #define UNIATA_VER_YEAR 2014
#define UNIATA_VER_YEAR_STR "2014" #define UNIATA_VER_YEAR_STR "2014"

View File

@@ -32,11 +32,11 @@ endmacro()
today(KERNEL_VERSION_BUILD) today(KERNEL_VERSION_BUILD)
set(KERNEL_VERSION_MAJOR "0") set(KERNEL_VERSION_MAJOR "0")
set(KERNEL_VERSION_MINOR "4") set(KERNEL_VERSION_MINOR "3")
set(KERNEL_VERSION_PATCH_LEVEL "0") set(KERNEL_VERSION_PATCH_LEVEL "17")
set(COPYRIGHT_YEAR "2014") set(COPYRIGHT_YEAR "2014")
# KERNEL_VERSION_BUILD_TYPE is "SVN", "RC1", "RC2" or "" (for the release) # KERNEL_VERSION_BUILD_TYPE is "SVN", "RC1", "RC2" or "" (for the release)
set(KERNEL_VERSION_BUILD_TYPE "SVN") set(KERNEL_VERSION_BUILD_TYPE "")
set(KERNEL_VERSION "${KERNEL_VERSION_MAJOR}.${KERNEL_VERSION_MINOR}") set(KERNEL_VERSION "${KERNEL_VERSION_MAJOR}.${KERNEL_VERSION_MINOR}")

View File

@@ -679,8 +679,12 @@ TCPSetNoDelay(
PCONNECTION_ENDPOINT Connection, PCONNECTION_ENDPOINT Connection,
BOOLEAN Set) BOOLEAN Set)
{ {
if (!Connection)
return STATUS_UNSUCCESSFUL;
if (Connection->SocketContext == NULL) if (Connection->SocketContext == NULL)
return STATUS_UNSUCCESSFUL; return STATUS_UNSUCCESSFUL;
LibTCPSetNoDelay(Connection->SocketContext, Set); LibTCPSetNoDelay(Connection->SocketContext, Set);
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }

View File

@@ -141,7 +141,9 @@ void __cdecl _invalid_parameter(const wchar_t *expr, const wchar_t *func,
else else
{ {
ERR( "%s:%u %s: %s %lx\n", debugstr_w(file), line, debugstr_w(func), debugstr_w(expr), arg ); ERR( "%s:%u %s: %s %lx\n", debugstr_w(file), line, debugstr_w(func), debugstr_w(expr), arg );
#if _MSVCR_VER > 0 // FIXME: possible improvement: use a global variable in the DLL
RaiseException( STATUS_INVALID_CRUNTIME_PARAMETER, EXCEPTION_NONCONTINUABLE, 0, NULL ); RaiseException( STATUS_INVALID_CRUNTIME_PARAMETER, EXCEPTION_NONCONTINUABLE, 0, NULL );
#endif
} }
} }

View File

@@ -2664,15 +2664,42 @@ GetFontScore(LOGFONTW *LogFont, PUNICODE_STRING FaceName, PFONTGDI FontGDI)
Status = RtlAnsiStringToUnicodeString(&EntryFaceNameW, &EntryFaceNameA, TRUE); Status = RtlAnsiStringToUnicodeString(&EntryFaceNameW, &EntryFaceNameA, TRUE);
if (NT_SUCCESS(Status)) if (NT_SUCCESS(Status))
{ {
static const UNICODE_STRING MarlettFaceNameW = RTL_CONSTANT_STRING(L"Marlett");
static const UNICODE_STRING SymbolFaceNameW = RTL_CONSTANT_STRING(L"Symbol");
static const UNICODE_STRING VGAFaceNameW = RTL_CONSTANT_STRING(L"VGA");
if ((LF_FACESIZE - 1) * sizeof(WCHAR) < EntryFaceNameW.Length) if ((LF_FACESIZE - 1) * sizeof(WCHAR) < EntryFaceNameW.Length)
{ {
EntryFaceNameW.Length = (LF_FACESIZE - 1) * sizeof(WCHAR); EntryFaceNameW.Length = (LF_FACESIZE - 1) * sizeof(WCHAR);
EntryFaceNameW.Buffer[LF_FACESIZE - 1] = L'\0'; EntryFaceNameW.Buffer[LF_FACESIZE - 1] = L'\0';
} }
if (0 == RtlCompareUnicodeString(FaceName, &EntryFaceNameW, TRUE))
if (!RtlCompareUnicodeString(FaceName, &EntryFaceNameW, TRUE))
{ {
Score += 49; Score += 49;
} }
/* FIXME: this is a work around to counter weird fonts on weird places.
A proper fix would be to score fonts on more attributes than
the ones in this function */
if (!RtlCompareUnicodeString(&MarlettFaceNameW, &EntryFaceNameW, TRUE) &&
RtlCompareUnicodeString(&MarlettFaceNameW, FaceName, TRUE))
{
Score = 0;
}
if (!RtlCompareUnicodeString(&SymbolFaceNameW, &EntryFaceNameW, TRUE) &&
RtlCompareUnicodeString(&SymbolFaceNameW, FaceName, TRUE))
{
Score = 0;
}
if (!RtlCompareUnicodeString(&VGAFaceNameW, &EntryFaceNameW, TRUE) &&
RtlCompareUnicodeString(&VGAFaceNameW, FaceName, TRUE))
{
Score = 0;
}
RtlFreeUnicodeString(&EntryFaceNameW); RtlFreeUnicodeString(&EntryFaceNameW);
} }

View File

@@ -7,6 +7,7 @@
*/ */
#include <win32k.h> #include <win32k.h>
DBG_DEFAULT_CHANNEL(UserClass);
/* CALLPROC ******************************************************************/ /* CALLPROC ******************************************************************/
@@ -110,6 +111,7 @@ UserGetCPD(
{ {
PCLS pCls; PCLS pCls;
PWND pWnd; PWND pWnd;
PDESKTOP pDesk;
PCALLPROCDATA CallProc = NULL; PCALLPROCDATA CallProc = NULL;
PTHREADINFO pti; PTHREADINFO pti;
@@ -131,7 +133,14 @@ UserGetCPD(
// No luck, create a new one for the requested proc. // No luck, create a new one for the requested proc.
if (!CallProc) if (!CallProc)
{ {
CallProc = CreateCallProc( pCls->rpdeskParent, if (!pCls->rpdeskParent)
{
TRACE("Null DESKTOP Atom %d\n",pCls->atomClassName);
pDesk = pti->rpdesk;
}
else
pDesk = pCls->rpdeskParent;
CallProc = CreateCallProc( pDesk,
(WNDPROC)ProcIn, (WNDPROC)ProcIn,
!!(Flags & UserGetCPDA2U), !!(Flags & UserGetCPDA2U),
pti->ppi); pti->ppi);

View File

@@ -61,7 +61,7 @@ IntKeyboardGetIndicatorTrans(HANDLE hKeyboardDevice,
while (pRet) while (pRet)
{ {
Status = NtDeviceIoControlFile(hKeyboardDevice, Status = ZwDeviceIoControlFile(hKeyboardDevice,
NULL, NULL,
NULL, NULL,
NULL, NULL,
@@ -104,8 +104,7 @@ static
NTSTATUS APIENTRY NTSTATUS APIENTRY
IntKeyboardUpdateLeds(HANDLE hKeyboardDevice, IntKeyboardUpdateLeds(HANDLE hKeyboardDevice,
WORD wVk, WORD wVk,
WORD wScanCode, WORD wScanCode)
BOOL bEnabled)
{ {
NTSTATUS Status; NTSTATUS Status;
UINT i; UINT i;
@@ -133,13 +132,10 @@ IntKeyboardUpdateLeds(HANDLE hKeyboardDevice,
if (LedFlag) if (LedFlag)
{ {
if (bEnabled) gIndicators.LedFlags ^= LedFlag;
gIndicators.LedFlags |= LedFlag;
else
gIndicators.LedFlags = ~LedFlag;
/* Update the lights on the hardware */ /* Update the lights on the hardware */
Status = NtDeviceIoControlFile(hKeyboardDevice, Status = ZwDeviceIoControlFile(hKeyboardDevice,
NULL, NULL,
NULL, NULL,
NULL, NULL,
@@ -164,10 +160,10 @@ UserInitKeyboard(HANDLE hKeyboardDevice)
{ {
NTSTATUS Status; NTSTATUS Status;
IO_STATUS_BLOCK Block; IO_STATUS_BLOCK Block;
/*
IntKeyboardGetIndicatorTrans(hKeyboardDevice, &gpKeyboardIndicatorTrans); IntKeyboardGetIndicatorTrans(hKeyboardDevice, &gpKeyboardIndicatorTrans);
Status = NtDeviceIoControlFile(hKeyboardDevice, Status = ZwDeviceIoControlFile(hKeyboardDevice,
NULL, NULL,
NULL, NULL,
NULL, NULL,
@@ -186,9 +182,9 @@ UserInitKeyboard(HANDLE hKeyboardDevice)
gIndicators.LedFlags & KEYBOARD_NUM_LOCK_ON); gIndicators.LedFlags & KEYBOARD_NUM_LOCK_ON);
SET_KEY_LOCKED(gafAsyncKeyState, VK_SCROLL, SET_KEY_LOCKED(gafAsyncKeyState, VK_SCROLL,
gIndicators.LedFlags & KEYBOARD_SCROLL_LOCK_ON); gIndicators.LedFlags & KEYBOARD_SCROLL_LOCK_ON);
*/
// FIXME: Need device driver to work! HID support more than one!!!! // FIXME: Need device driver to work! HID support more than one!!!!
Status = NtDeviceIoControlFile(hKeyboardDevice, Status = ZwDeviceIoControlFile(hKeyboardDevice,
NULL, NULL,
NULL, NULL,
NULL, NULL,
@@ -808,8 +804,7 @@ ProcessKeyEvent(WORD wVk, WORD wScanCode, DWORD dwFlags, BOOL bInjected, DWORD d
/* Update keyboard LEDs */ /* Update keyboard LEDs */
IntKeyboardUpdateLeds(ghKeyboardDevice, IntKeyboardUpdateLeds(ghKeyboardDevice,
wSimpleVk, wSimpleVk,
wScanCode, wScanCode);
IS_KEY_LOCKED(gafAsyncKeyState, wSimpleVk));
} }
/* Call WH_KEYBOARD_LL hook */ /* Call WH_KEYBOARD_LL hook */

View File

@@ -649,7 +649,7 @@ IntGetMenuInfo(PMENU Menu, PROSMENUINFO lpmi)
lpmi->cyMenu = Menu->cyMenu; lpmi->cyMenu = Menu->cyMenu;
lpmi->spwndNotify = Menu->spwndNotify; lpmi->spwndNotify = Menu->spwndNotify;
lpmi->cxTextAlign = Menu->cxTextAlign; lpmi->cxTextAlign = Menu->cxTextAlign;
lpmi->iTop = Menu->iMaxTop; lpmi->iTop = Menu->iTop;
lpmi->iMaxTop = Menu->iMaxTop; lpmi->iMaxTop = Menu->iMaxTop;
lpmi->dwArrowsOn = Menu->dwArrowsOn; lpmi->dwArrowsOn = Menu->dwArrowsOn;

View File

@@ -1676,8 +1676,21 @@ co_MsqPeekMouseMove(IN PTHREADINFO pti,
MSG msg; MSG msg;
PUSER_MESSAGE_QUEUE MessageQueue = pti->MessageQueue; PUSER_MESSAGE_QUEUE MessageQueue = pti->MessageQueue;
// First look for any buttons downs or ups before testing for the move.
if (pti->nCntsQBits[QSRosMouseButton])
{
if (co_MsqPeekHardwareMessage( pti,
Remove,
Window,
MsgFilterLow,
MsgFilterHigh,
QS_MOUSEBUTTON,
pMsg))
return TRUE; // Have one and return.
}
if(!(MessageQueue->MouseMoved)) if(!(MessageQueue->MouseMoved))
return FALSE; return FALSE;
if (!MessageQueue->ptiSysLock) if (!MessageQueue->ptiSysLock)
{ {

View File

@@ -43,7 +43,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(menu);
#define MENU_COL_SPACE 4 #define MENU_COL_SPACE 4
/* top and bottom margins for popup menus */ /* top and bottom margins for popup menus */
#define MENU_TOP_MARGIN 3 #define MENU_TOP_MARGIN 2 //3
#define MENU_BOTTOM_MARGIN 2 #define MENU_BOTTOM_MARGIN 2
#define MENU_TYPE_MASK (MF_STRING | MF_BITMAP | MF_OWNERDRAW | MF_SEPARATOR) #define MENU_TYPE_MASK (MF_STRING | MF_BITMAP | MF_OWNERDRAW | MF_SEPARATOR)
@@ -395,7 +395,7 @@ MenuGetRosMenuInfo(PROSMENUINFO MenuInfo, HMENU Menu)
MenuInfo->cyMenu = pMenu->cyMenu; MenuInfo->cyMenu = pMenu->cyMenu;
MenuInfo->spwndNotify = pMenu->spwndNotify; MenuInfo->spwndNotify = pMenu->spwndNotify;
MenuInfo->cxTextAlign = pMenu->cxTextAlign; MenuInfo->cxTextAlign = pMenu->cxTextAlign;
MenuInfo->iTop = pMenu->iMaxTop; MenuInfo->iTop = pMenu->iTop;
MenuInfo->iMaxTop = pMenu->iMaxTop; MenuInfo->iMaxTop = pMenu->iMaxTop;
MenuInfo->dwArrowsOn = pMenu->dwArrowsOn; MenuInfo->dwArrowsOn = pMenu->dwArrowsOn;
@@ -1301,7 +1301,7 @@ static void FASTCALL MenuPopupMenuCalcSize(PROSMENUINFO MenuInfo, HWND WndOwner)
orgX = maxX; orgX = maxX;
//if( lpitem.fType & (MF_MENUBREAK | MF_MENUBARBREAK)) //if( lpitem.fType & (MF_MENUBREAK | MF_MENUBARBREAK))
// orgX += MENU_COL_SPACE; // orgX += MENU_COL_SPACE;
orgY = 2;//MENU_TOP_MARGIN; orgY = MENU_TOP_MARGIN;
maxTab = maxTabWidth = 0; maxTab = maxTabWidth = 0;
/* Parse items until column break or end of menu */ /* Parse items until column break or end of menu */