mirror of
https://github.com/reactos/reactos
synced 2025-10-06 16:32:42 +02:00
Compare commits
14 Commits
0.4.10-dev
...
backups/0.
Author | SHA1 | Date | |
---|---|---|---|
|
3575086811 | ||
|
6aa4e564dc | ||
|
49d4e58f50 | ||
|
af6d8b9f7e | ||
|
aaf904d84c | ||
|
72e480c82f | ||
|
e2a4ce772f | ||
|
0a58d8b96a | ||
|
7c6256087f | ||
|
e7eb27c6cd | ||
|
4571891449 | ||
|
f112613d39 | ||
|
122fe51263 | ||
|
d8434fa72f |
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 |
@@ -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"
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
|
@@ -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;
|
||||||
|
@@ -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 */
|
||||||
|
@@ -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 */
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
|
@@ -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"));
|
||||||
|
@@ -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));
|
||||||
|
@@ -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"
|
||||||
|
@@ -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}")
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
|
@@ -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 */
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
|
@@ -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 */
|
||||||
|
Reference in New Issue
Block a user