mirror of
https://github.com/reactos/reactos
synced 2025-10-06 16:32:42 +02:00
Compare commits
33 Commits
oleg/nativ
...
0.4.8-rele
Author | SHA1 | Date | |
---|---|---|---|
|
d47d44804e | ||
|
3f29188338 | ||
|
7436d291c2 | ||
|
89506d74c1 | ||
|
fabb558f63 | ||
|
e5014a7b45 | ||
|
a9ee632b2e | ||
|
11bf8fa047 | ||
|
795c7f70cc | ||
|
4a16f8a721 | ||
|
dba2f743c5 | ||
|
8dc16094ba | ||
|
f4b2e5310b | ||
|
5231a7f996 | ||
|
64dcc95c50 | ||
|
6345fd1342 | ||
|
af545fe3f3 | ||
|
0b826120b5 | ||
|
10b06f1e4b | ||
|
95884e63fd | ||
|
48c6d74279 | ||
|
e1d6372651 | ||
|
7828afe83c | ||
|
0908d634ad | ||
|
bfcab8b0b4 | ||
|
1906186e83 | ||
|
6b8b704e6f | ||
|
937c2615e6 | ||
|
766ef24948 | ||
|
51f9494d48 | ||
|
9274859438 | ||
|
429767ac69 | ||
|
5f7cfe0ff8 |
@@ -18,7 +18,7 @@ BEGIN
|
||||
MENUITEM "Продължаване", ID_RESUME, GRAYED
|
||||
MENUITEM "Презапуск", ID_RESTART, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Опресняване", ID_REFRESH
|
||||
MENUITEM "Опресняване\tF5", ID_REFRESH
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Обработка...", ID_EDIT, GRAYED
|
||||
MENUITEM "Създаване...", ID_CREATE, GRAYED
|
||||
@@ -63,6 +63,11 @@ BEGIN
|
||||
END
|
||||
END
|
||||
|
||||
IDA_SERVMAN ACCELERATORS
|
||||
BEGIN
|
||||
VK_F5, ID_REFRESH, VIRTKEY
|
||||
END
|
||||
|
||||
IDD_ABOUTBOX DIALOGEX 22, 16, 190, 182
|
||||
CAPTION "За управителя на устройствата"
|
||||
FONT 8, "MS Shell Dlg", 0, 0
|
||||
|
@@ -18,7 +18,7 @@ BEGIN
|
||||
MENUITEM "Pokračovat", ID_RESUME, GRAYED
|
||||
MENUITEM "Restartovat", ID_RESTART, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Obnovit", ID_REFRESH
|
||||
MENUITEM "Obnovit\tF5", ID_REFRESH
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Upravit...", ID_EDIT, GRAYED
|
||||
MENUITEM "Vytvořit...", ID_CREATE, GRAYED
|
||||
@@ -63,6 +63,11 @@ BEGIN
|
||||
END
|
||||
END
|
||||
|
||||
IDA_SERVMAN ACCELERATORS
|
||||
BEGIN
|
||||
VK_F5, ID_REFRESH, VIRTKEY
|
||||
END
|
||||
|
||||
IDD_ABOUTBOX DIALOGEX 22, 16, 190, 182
|
||||
CAPTION "O správci služeb"
|
||||
FONT 8, "MS Shell Dlg", 0, 0
|
||||
|
@@ -1,4 +1,4 @@
|
||||
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
|
||||
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
|
||||
|
||||
IDR_MAINMENU MENU
|
||||
BEGIN
|
||||
@@ -18,7 +18,7 @@ BEGIN
|
||||
MENUITEM "Fortsetzen", ID_RESUME, GRAYED
|
||||
MENUITEM "Neu starten", ID_RESTART, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Aktualisieren", ID_REFRESH
|
||||
MENUITEM "Aktualisieren\tF5", ID_REFRESH
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Bearbeiten...", ID_EDIT, GRAYED
|
||||
MENUITEM "Erstellen...", ID_CREATE, GRAYED
|
||||
@@ -63,6 +63,11 @@ BEGIN
|
||||
END
|
||||
END
|
||||
|
||||
IDA_SERVMAN ACCELERATORS
|
||||
BEGIN
|
||||
VK_F5, ID_REFRESH, VIRTKEY
|
||||
END
|
||||
|
||||
IDD_ABOUTBOX DIALOGEX 22, 16, 190, 182
|
||||
CAPTION "Info über Dienst-Manager"
|
||||
FONT 8, "MS Shell Dlg", 0, 0
|
||||
|
@@ -18,7 +18,7 @@ BEGIN
|
||||
MENUITEM "Συνέχιση", ID_RESUME, GRAYED
|
||||
MENUITEM "Επανεκκίνηση", ID_RESTART, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Ανανέωση", ID_REFRESH
|
||||
MENUITEM "Ανανέωση\tF5", ID_REFRESH
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Επεξεργασία...", ID_EDIT, GRAYED
|
||||
MENUITEM "Δημιουργία...", ID_CREATE, GRAYED
|
||||
@@ -63,6 +63,11 @@ BEGIN
|
||||
END
|
||||
END
|
||||
|
||||
IDA_SERVMAN ACCELERATORS
|
||||
BEGIN
|
||||
VK_F5, ID_REFRESH, VIRTKEY
|
||||
END
|
||||
|
||||
IDD_ABOUTBOX DIALOGEX 22, 16, 190, 182
|
||||
CAPTION "Σχετικά με το Διαχειριστή Υπηρεσιών"
|
||||
FONT 8, "MS Shell Dlg", 0, 0
|
||||
|
@@ -18,7 +18,7 @@ BEGIN
|
||||
MENUITEM "Resu&me", ID_RESUME, GRAYED
|
||||
MENUITEM "Rest&art", ID_RESTART, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Re&fresh", ID_REFRESH
|
||||
MENUITEM "Re&fresh\tF5", ID_REFRESH
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Edit...", ID_EDIT, GRAYED
|
||||
MENUITEM "Crea&te...", ID_CREATE, GRAYED
|
||||
@@ -63,6 +63,11 @@ BEGIN
|
||||
END
|
||||
END
|
||||
|
||||
IDA_SERVMAN ACCELERATORS
|
||||
BEGIN
|
||||
VK_F5, ID_REFRESH, VIRTKEY
|
||||
END
|
||||
|
||||
IDD_ABOUTBOX DIALOGEX 22, 16, 190, 182
|
||||
CAPTION "About Service Manager"
|
||||
FONT 8, "MS Shell Dlg", 0, 0
|
||||
|
@@ -21,7 +21,7 @@ BEGIN
|
||||
MENUITEM "Reanudar", ID_RESUME, GRAYED
|
||||
MENUITEM "Reiniciar", ID_RESTART, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Actualizar", ID_REFRESH
|
||||
MENUITEM "Actualizar\tF5", ID_REFRESH
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Editar...", ID_EDIT, GRAYED
|
||||
MENUITEM "Crear...", ID_CREATE, GRAYED
|
||||
@@ -66,6 +66,11 @@ BEGIN
|
||||
END
|
||||
END
|
||||
|
||||
IDA_SERVMAN ACCELERATORS
|
||||
BEGIN
|
||||
VK_F5, ID_REFRESH, VIRTKEY
|
||||
END
|
||||
|
||||
IDD_ABOUTBOX DIALOGEX 22, 16, 190, 182
|
||||
CAPTION "Acerca del Administrador de servicios"
|
||||
FONT 8, "MS Shell Dlg", 0, 0
|
||||
|
@@ -18,7 +18,7 @@ BEGIN
|
||||
MENUITEM "Reprendre", ID_RESUME, GRAYED
|
||||
MENUITEM "Redémarrer", ID_RESTART, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Rafraîchir", ID_REFRESH
|
||||
MENUITEM "Rafraîchir\tF5", ID_REFRESH
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Éditer...", ID_EDIT, GRAYED
|
||||
MENUITEM "Créer...", ID_CREATE, GRAYED
|
||||
@@ -63,6 +63,11 @@ BEGIN
|
||||
END
|
||||
END
|
||||
|
||||
IDA_SERVMAN ACCELERATORS
|
||||
BEGIN
|
||||
VK_F5, ID_REFRESH, VIRTKEY
|
||||
END
|
||||
|
||||
IDD_ABOUTBOX DIALOGEX 22, 16, 190, 182
|
||||
CAPTION "À Propos du gestionnaire de services"
|
||||
FONT 8, "MS Shell Dlg", 0, 0
|
||||
|
@@ -18,7 +18,7 @@ BEGIN
|
||||
MENUITEM "חדש", ID_RESUME, GRAYED
|
||||
MENUITEM "הפעל מחדש", ID_RESTART, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "רענן", ID_REFRESH
|
||||
MENUITEM "רענן\tF5", ID_REFRESH
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "עריכה...", ID_EDIT, GRAYED
|
||||
MENUITEM "יצירה...", ID_CREATE, GRAYED
|
||||
@@ -63,6 +63,11 @@ BEGIN
|
||||
END
|
||||
END
|
||||
|
||||
IDA_SERVMAN ACCELERATORS
|
||||
BEGIN
|
||||
VK_F5, ID_REFRESH, VIRTKEY
|
||||
END
|
||||
|
||||
IDD_ABOUTBOX DIALOGEX 22, 16, 190, 182
|
||||
CAPTION "אודות מנהל השירותים"
|
||||
FONT 8, "MS Shell Dlg", 0, 0
|
||||
|
@@ -18,7 +18,7 @@ BEGIN
|
||||
MENUITEM "Lanjutkan", ID_RESUME, GRAYED
|
||||
MENUITEM "Mulai lagi", ID_RESTART, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Segarkan", ID_REFRESH
|
||||
MENUITEM "Segarkan\tF5", ID_REFRESH
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Edit...", ID_EDIT, GRAYED
|
||||
MENUITEM "Buat...", ID_CREATE, GRAYED
|
||||
@@ -63,6 +63,11 @@ BEGIN
|
||||
END
|
||||
END
|
||||
|
||||
IDA_SERVMAN ACCELERATORS
|
||||
BEGIN
|
||||
VK_F5, ID_REFRESH, VIRTKEY
|
||||
END
|
||||
|
||||
IDD_ABOUTBOX DIALOGEX 22, 16, 190, 182
|
||||
CAPTION "Tentang Manajer Layanan"
|
||||
FONT 8, "MS Shell Dlg", 0, 0
|
||||
|
@@ -18,7 +18,7 @@ BEGIN
|
||||
MENUITEM "Ripristina", ID_RESUME, GRAYED
|
||||
MENUITEM "Riavvia", ID_RESTART, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Aggiorna", ID_REFRESH
|
||||
MENUITEM "Aggiorna\tF5", ID_REFRESH
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Modifica...", ID_EDIT, GRAYED
|
||||
MENUITEM "Crea...", ID_CREATE, GRAYED
|
||||
@@ -63,6 +63,11 @@ BEGIN
|
||||
END
|
||||
END
|
||||
|
||||
IDA_SERVMAN ACCELERATORS
|
||||
BEGIN
|
||||
VK_F5, ID_REFRESH, VIRTKEY
|
||||
END
|
||||
|
||||
IDD_ABOUTBOX DIALOGEX 22, 16, 190, 182
|
||||
CAPTION "Informazioni su Gestione Servizi"
|
||||
FONT 8, "MS Shell Dlg", 0, 0
|
||||
|
@@ -18,7 +18,7 @@ BEGIN
|
||||
MENUITEM "再開", ID_RESUME, GRAYED
|
||||
MENUITEM "再起動", ID_RESTART, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "更新", ID_REFRESH
|
||||
MENUITEM "更新\tF5", ID_REFRESH
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "編集...", ID_EDIT, GRAYED
|
||||
MENUITEM "作成...", ID_CREATE, GRAYED
|
||||
@@ -63,6 +63,11 @@ BEGIN
|
||||
END
|
||||
END
|
||||
|
||||
IDA_SERVMAN ACCELERATORS
|
||||
BEGIN
|
||||
VK_F5, ID_REFRESH, VIRTKEY
|
||||
END
|
||||
|
||||
IDD_ABOUTBOX DIALOGEX 22, 16, 190, 182
|
||||
CAPTION "サービス マネージャについて"
|
||||
FONT 9, "MS UI Gothic", 0, 0
|
||||
|
@@ -20,7 +20,7 @@ BEGIN
|
||||
MENUITEM "계속", ID_RESUME, GRAYED
|
||||
MENUITEM "다시 시작", ID_RESTART, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "새로 고침", ID_REFRESH
|
||||
MENUITEM "새로 고침\tF5", ID_REFRESH
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "편집...", ID_EDIT, GRAYED
|
||||
MENUITEM "추가...", ID_CREATE, GRAYED
|
||||
@@ -65,6 +65,11 @@ BEGIN
|
||||
END
|
||||
END
|
||||
|
||||
IDA_SERVMAN ACCELERATORS
|
||||
BEGIN
|
||||
VK_F5, ID_REFRESH, VIRTKEY
|
||||
END
|
||||
|
||||
IDD_ABOUTBOX DIALOGEX 22, 16, 190, 182
|
||||
CAPTION "서비스 매니저에 대하여"
|
||||
FONT 9, "굴림", 0, 0
|
||||
|
@@ -18,7 +18,7 @@ BEGIN
|
||||
MENUITEM "Fortsett", ID_RESUME, GRAYED
|
||||
MENUITEM "Restart", ID_RESTART, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Oppdater", ID_REFRESH
|
||||
MENUITEM "Oppdater\tF5", ID_REFRESH
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Rediger...", ID_EDIT, GRAYED
|
||||
MENUITEM "Opprett...", ID_CREATE, GRAYED
|
||||
@@ -63,6 +63,11 @@ BEGIN
|
||||
END
|
||||
END
|
||||
|
||||
IDA_SERVMAN ACCELERATORS
|
||||
BEGIN
|
||||
VK_F5, ID_REFRESH, VIRTKEY
|
||||
END
|
||||
|
||||
IDD_ABOUTBOX DIALOGEX 22, 16, 190, 182
|
||||
CAPTION "Om Tjenestebehandler"
|
||||
FONT 8, "MS Shell Dlg", 0, 0
|
||||
|
@@ -28,7 +28,7 @@ BEGIN
|
||||
MENUITEM "Wznów", ID_RESUME, GRAYED
|
||||
MENUITEM "Uruchom ponownie", ID_RESTART, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Odśwież", ID_REFRESH
|
||||
MENUITEM "Odśwież\tF5", ID_REFRESH
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Edycja...", ID_EDIT, GRAYED
|
||||
MENUITEM "Utwórz...", ID_CREATE, GRAYED
|
||||
@@ -73,6 +73,11 @@ BEGIN
|
||||
END
|
||||
END
|
||||
|
||||
IDA_SERVMAN ACCELERATORS
|
||||
BEGIN
|
||||
VK_F5, ID_REFRESH, VIRTKEY
|
||||
END
|
||||
|
||||
IDD_ABOUTBOX DIALOGEX 22, 16, 190, 182
|
||||
CAPTION "Menedżer usług - informacje"
|
||||
FONT 8, "MS Shell Dlg", 0, 0
|
||||
|
@@ -23,7 +23,7 @@ BEGIN
|
||||
MENUITEM "R&eia", ID_RESUME, GRAYED
|
||||
MENUITEM "&Repornește", ID_RESTART, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Împrospătea&ză", ID_REFRESH
|
||||
MENUITEM "Împrospătea&ză\tF5", ID_REFRESH
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Mo&dificare…", ID_EDIT, GRAYED
|
||||
MENUITEM "&Creare…", ID_CREATE, GRAYED
|
||||
@@ -68,6 +68,11 @@ BEGIN
|
||||
END
|
||||
END
|
||||
|
||||
IDA_SERVMAN ACCELERATORS
|
||||
BEGIN
|
||||
VK_F5, ID_REFRESH, VIRTKEY
|
||||
END
|
||||
|
||||
IDD_ABOUTBOX DIALOGEX 22, 16, 190, 182
|
||||
CAPTION "Despre Gestionar de servicii"
|
||||
FONT 8, "MS Shell Dlg", 0, 0
|
||||
|
@@ -18,7 +18,7 @@ BEGIN
|
||||
MENUITEM "Продол&жить", ID_RESUME, GRAYED
|
||||
MENUITEM "Пере&запустить", ID_RESTART, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "О&бновить", ID_REFRESH
|
||||
MENUITEM "О&бновить\tF5", ID_REFRESH
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Изменить...", ID_EDIT, GRAYED
|
||||
MENUITEM "С&оздать...", ID_CREATE, GRAYED
|
||||
@@ -63,6 +63,11 @@ BEGIN
|
||||
END
|
||||
END
|
||||
|
||||
IDA_SERVMAN ACCELERATORS
|
||||
BEGIN
|
||||
VK_F5, ID_REFRESH, VIRTKEY
|
||||
END
|
||||
|
||||
IDD_ABOUTBOX DIALOGEX 22, 16, 190, 182
|
||||
CAPTION "О Диспетчере служб"
|
||||
FONT 8, "MS Shell Dlg", 0, 0
|
||||
|
@@ -23,7 +23,7 @@ BEGIN
|
||||
MENUITEM "Pokračovať", ID_RESUME, GRAYED
|
||||
MENUITEM "Reštartovať", ID_RESTART, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Obnoviť", ID_REFRESH
|
||||
MENUITEM "Obnoviť\tF5", ID_REFRESH
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Upraviť...", ID_EDIT, GRAYED
|
||||
MENUITEM "Vytvoriť...", ID_CREATE, GRAYED
|
||||
@@ -68,6 +68,11 @@ BEGIN
|
||||
END
|
||||
END
|
||||
|
||||
IDA_SERVMAN ACCELERATORS
|
||||
BEGIN
|
||||
VK_F5, ID_REFRESH, VIRTKEY
|
||||
END
|
||||
|
||||
IDD_ABOUTBOX DIALOGEX 22, 16, 190, 182
|
||||
CAPTION "Čo je Manažér služieb"
|
||||
FONT 8, "MS Shell Dlg", 0, 0
|
||||
|
@@ -23,7 +23,7 @@ BEGIN
|
||||
MENUITEM "Rifillo", ID_RESUME, GRAYED
|
||||
MENUITEM "Rifillo", ID_RESTART, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Rifesko", ID_REFRESH
|
||||
MENUITEM "Rifesko\tF5", ID_REFRESH
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Modifiko...", ID_EDIT, GRAYED
|
||||
MENUITEM "Krijo...", ID_CREATE, GRAYED
|
||||
@@ -68,6 +68,11 @@ BEGIN
|
||||
END
|
||||
END
|
||||
|
||||
IDA_SERVMAN ACCELERATORS
|
||||
BEGIN
|
||||
VK_F5, ID_REFRESH, VIRTKEY
|
||||
END
|
||||
|
||||
IDD_ABOUTBOX DIALOGEX 22, 16, 190, 182
|
||||
CAPTION "Rreth Menaxherit të Shërbimeve"
|
||||
FONT 8, "MS Shell Dlg", 0, 0
|
||||
|
@@ -25,7 +25,7 @@ BEGIN
|
||||
MENUITEM "Fortsätta", ID_RESUME, GRAYED
|
||||
MENUITEM "Starta om", ID_RESTART, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Uppdatera", ID_REFRESH
|
||||
MENUITEM "Uppdatera\tF5", ID_REFRESH
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Redigera...", ID_EDIT, GRAYED
|
||||
MENUITEM "Skapa...", ID_CREATE, GRAYED
|
||||
@@ -70,6 +70,11 @@ BEGIN
|
||||
END
|
||||
END
|
||||
|
||||
IDA_SERVMAN ACCELERATORS
|
||||
BEGIN
|
||||
VK_F5, ID_REFRESH, VIRTKEY
|
||||
END
|
||||
|
||||
IDD_ABOUTBOX DIALOGEX 22, 16, 190, 182
|
||||
CAPTION "Om Tjänster"
|
||||
FONT 8, "MS Shell Dlg", 0, 0
|
||||
|
@@ -26,7 +26,7 @@ BEGIN
|
||||
MENUITEM "เริ่มทำต่อ", ID_RESUME, GRAYED
|
||||
MENUITEM "เริ่มใหม่", ID_RESTART, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "ฟื้นฟู", ID_REFRESH
|
||||
MENUITEM "ฟื้นฟู\tF5", ID_REFRESH
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "แก้ไข...", ID_EDIT, GRAYED
|
||||
MENUITEM "สร้าง...", ID_CREATE, GRAYED
|
||||
@@ -71,6 +71,11 @@ BEGIN
|
||||
END
|
||||
END
|
||||
|
||||
IDA_SERVMAN ACCELERATORS
|
||||
BEGIN
|
||||
VK_F5, ID_REFRESH, VIRTKEY
|
||||
END
|
||||
|
||||
IDD_ABOUTBOX DIALOGEX 22, 16, 190, 182
|
||||
CAPTION "เกี่ยวกับการบริการจัดการ"
|
||||
FONT 8, "MS Shell Dlg", 0, 0
|
||||
|
@@ -20,7 +20,7 @@ BEGIN
|
||||
MENUITEM "&Sürdür", ID_RESUME, GRAYED
|
||||
MENUITEM "&Yeniden Başlat", ID_RESTART, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Y&enile", ID_REFRESH
|
||||
MENUITEM "Y&enile\tF5", ID_REFRESH
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "De&ğiştir...", ID_EDIT, GRAYED
|
||||
MENUITEM "&Oluştur...", ID_CREATE, GRAYED
|
||||
@@ -65,6 +65,11 @@ BEGIN
|
||||
END
|
||||
END
|
||||
|
||||
IDA_SERVMAN ACCELERATORS
|
||||
BEGIN
|
||||
VK_F5, ID_REFRESH, VIRTKEY
|
||||
END
|
||||
|
||||
IDD_ABOUTBOX DIALOGEX 22, 16, 190, 182
|
||||
CAPTION "Himet Yöneticisi Üzerine"
|
||||
FONT 8, "MS Shell Dlg", 0, 0
|
||||
|
@@ -26,7 +26,7 @@ BEGIN
|
||||
MENUITEM "Продовжити", ID_RESUME, GRAYED
|
||||
MENUITEM "Перезапуск", ID_RESTART, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Оновити", ID_REFRESH
|
||||
MENUITEM "Оновити\tF5", ID_REFRESH
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Правка...", ID_EDIT, GRAYED
|
||||
MENUITEM "Створити...", ID_CREATE, GRAYED
|
||||
@@ -71,6 +71,11 @@ BEGIN
|
||||
END
|
||||
END
|
||||
|
||||
IDA_SERVMAN ACCELERATORS
|
||||
BEGIN
|
||||
VK_F5, ID_REFRESH, VIRTKEY
|
||||
END
|
||||
|
||||
IDD_ABOUTBOX DIALOGEX 22, 16, 190, 182
|
||||
CAPTION "Про програму ""Диспетчер керування службами"""
|
||||
FONT 8, "MS Shell Dlg", 0, 0
|
||||
|
@@ -20,7 +20,7 @@ BEGIN
|
||||
MENUITEM "恢复", ID_RESUME, GRAYED
|
||||
MENUITEM "重新启动", ID_RESTART, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "刷新", ID_REFRESH
|
||||
MENUITEM "刷新\tF5", ID_REFRESH
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "编辑...", ID_EDIT, GRAYED
|
||||
MENUITEM "创建...", ID_CREATE, GRAYED
|
||||
@@ -65,6 +65,11 @@ BEGIN
|
||||
END
|
||||
END
|
||||
|
||||
IDA_SERVMAN ACCELERATORS
|
||||
BEGIN
|
||||
VK_F5, ID_REFRESH, VIRTKEY
|
||||
END
|
||||
|
||||
IDD_ABOUTBOX DIALOGEX 22, 16, 190, 182
|
||||
CAPTION "关于服务管理器"
|
||||
FONT 9, "宋体", 0, 0
|
||||
|
@@ -20,7 +20,7 @@ BEGIN
|
||||
MENUITEM "恢復", ID_RESUME, GRAYED
|
||||
MENUITEM "重新開機", ID_RESTART, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "刷新", ID_REFRESH
|
||||
MENUITEM "刷新\tF5", ID_REFRESH
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "編輯...", ID_EDIT, GRAYED
|
||||
MENUITEM "創建...", ID_CREATE, GRAYED
|
||||
@@ -65,6 +65,11 @@ BEGIN
|
||||
END
|
||||
END
|
||||
|
||||
IDA_SERVMAN ACCELERATORS
|
||||
BEGIN
|
||||
VK_F5, ID_REFRESH, VIRTKEY
|
||||
END
|
||||
|
||||
IDD_ABOUTBOX DIALOGEX 22, 16, 190, 182
|
||||
CAPTION "關於服務管理員"
|
||||
FONT 9, "新細明體", 0, 0
|
||||
|
@@ -2,6 +2,8 @@
|
||||
|
||||
#define IDC_STATIC -1
|
||||
|
||||
#define IDA_SERVMAN 20
|
||||
|
||||
/* about box info */
|
||||
#define IDD_ABOUTBOX 200
|
||||
#define IDC_LICENSE_EDIT 201
|
||||
|
@@ -23,6 +23,7 @@ wWinMain(HINSTANCE hThisInstance,
|
||||
{
|
||||
LPWSTR lpAppName;
|
||||
HWND hMainWnd;
|
||||
HACCEL hAccelTable;
|
||||
MSG Msg;
|
||||
int Ret = 1;
|
||||
INITCOMMONCONTROLSEX icex;
|
||||
@@ -51,6 +52,9 @@ wWinMain(HINSTANCE hThisInstance,
|
||||
return 1;
|
||||
}
|
||||
|
||||
hAccelTable = LoadAcceleratorsW(hInstance,
|
||||
MAKEINTRESOURCEW(IDA_SERVMAN));
|
||||
|
||||
if (InitMainWindowImpl())
|
||||
{
|
||||
hMainWnd = CreateMainWindow(lpAppName,
|
||||
@@ -62,6 +66,7 @@ wWinMain(HINSTANCE hThisInstance,
|
||||
{
|
||||
//if ( !hProgDlg || !IsWindow(hProgDlg) || !IsDialogMessage(hProgDlg, &Msg) )
|
||||
//if (!IsDialogMessage(g_hProgDlg, &Msg))
|
||||
if (!TranslateAcceleratorW(hMainWnd, hAccelTable, &Msg))
|
||||
{
|
||||
TranslateMessage(&Msg);
|
||||
DispatchMessageW(&Msg);
|
||||
|
@@ -29,7 +29,7 @@
|
||||
#include "resource.h"
|
||||
#include "winmain.h"
|
||||
|
||||
#define APPLICATION_DATABASE_URL L"https://svn.reactos.org/packages/rappmgr.cab"
|
||||
#define APPLICATION_DATABASE_URL L"https://rapps.reactos.org/rappmgr.cab"
|
||||
#define MAX_STR_LEN 256
|
||||
|
||||
enum AppsCategories
|
||||
|
@@ -101,7 +101,7 @@
|
||||
#define IDS_UNABLE_TO_REMOVE 118
|
||||
#define IDS_UNABLE_TO_DOWNLOAD 119
|
||||
#define IDS_UNABLE_TO_DOWNLOAD2 120
|
||||
#define IDS_CERT_DOES_NOT_MATCH 121
|
||||
#define IDS_UNABLE_TO_QUERY_CERT 121
|
||||
#define IDS_INTEG_CHECK_TITLE 122
|
||||
#define IDS_INTEG_CHECK_FAIL 123
|
||||
#define IDS_INTERRUPTED_DOWNLOAD 124
|
||||
@@ -110,6 +110,7 @@
|
||||
#define IDS_INSTALL_SELECTED 127
|
||||
#define IDS_UNABLE_TO_INSTALL 128
|
||||
#define IDS_SELECTEDFORINST 129
|
||||
#define IDS_MISMATCH_CERT_INFO 130
|
||||
|
||||
/* Tooltips */
|
||||
#define IDS_TOOLTIP_INSTALL 200
|
||||
|
@@ -207,7 +207,7 @@ BEGIN
|
||||
IDS_UNABLE_TO_DOWNLOAD2 "Unable to download the package! Check Internet Connection!"
|
||||
IDS_UNABLE_TO_REMOVE "Премахването на данните за приложението от регистъра е невъзможно!"
|
||||
IDS_UNABLE_TO_INSTALL "Unable to open installer!"
|
||||
IDS_CERT_DOES_NOT_MATCH "SSL certificate verification failed."
|
||||
IDS_UNABLE_TO_QUERY_CERT "Unable to retrieve certificate info.\n\nDo you want to continue anyway?"
|
||||
IDS_INTEG_CHECK_TITLE "Verifying package integrity…"
|
||||
IDS_INTEG_CHECK_FAIL "The package did not pass the integrity check, it may have been corrupted or tampered with during downloading. Running the software is not recommended."
|
||||
IDS_INTERRUPTED_DOWNLOAD "The download was interrupted. Check connection to Internet."
|
||||
@@ -215,6 +215,7 @@ BEGIN
|
||||
IDS_SELECT_ALL "Select/Deselect All"
|
||||
IDS_INSTALL_SELECTED "Install Selected"
|
||||
IDS_SELECTEDFORINST "Selected for installation"
|
||||
IDS_MISMATCH_CERT_INFO "The certificate used is unknown:\nSubject: %s\nIssuer: %s\nDo you want to continue anyway?"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -208,7 +208,7 @@ BEGIN
|
||||
IDS_UNABLE_TO_DOWNLOAD2 "Unable to download the package! Check Internet Connection!"
|
||||
IDS_UNABLE_TO_REMOVE "Nepodařilo se odstranit data programu z registru!"
|
||||
IDS_UNABLE_TO_INSTALL "Unable to open installer!"
|
||||
IDS_CERT_DOES_NOT_MATCH "SSL certificate verification failed."
|
||||
IDS_UNABLE_TO_QUERY_CERT "Unable to retrieve certificate info.\n\nDo you want to continue anyway?"
|
||||
IDS_INTEG_CHECK_TITLE "Verifying package integrity…"
|
||||
IDS_INTEG_CHECK_FAIL "The package did not pass the integrity check, it may have been corrupted or tampered with during downloading. Running the software is not recommended."
|
||||
IDS_INTERRUPTED_DOWNLOAD "The download was interrupted. Check connection to Internet."
|
||||
@@ -216,6 +216,7 @@ BEGIN
|
||||
IDS_SELECT_ALL "Select/Deselect All"
|
||||
IDS_INSTALL_SELECTED "Install Selected"
|
||||
IDS_SELECTEDFORINST "Selected for installation"
|
||||
IDS_MISMATCH_CERT_INFO "The certificate used is unknown:\nSubject: %s\nIssuer: %s\nDo you want to continue anyway?"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -203,7 +203,7 @@ BEGIN
|
||||
IDS_UNABLE_TO_DOWNLOAD2 "Paket konnte nicht geladen werden! Prüfen Sie Ihre Internetverbindung!"
|
||||
IDS_UNABLE_TO_REMOVE "Konnte die Daten nicht aus der Registry löschen!"
|
||||
IDS_UNABLE_TO_INSTALL "Paket konnte nicht installiert werden!"
|
||||
IDS_CERT_DOES_NOT_MATCH "Überprüfung des SSL-Zertifikats fehlgeschlagen."
|
||||
IDS_UNABLE_TO_QUERY_CERT "Unable to retrieve certificate info.\n\nDo you want to continue anyway?"
|
||||
IDS_INTEG_CHECK_TITLE "Integritätsprüfung…"
|
||||
IDS_INTEG_CHECK_FAIL "Das Paket hat die Integritätsprüfung nicht bestanden. Mögliche Ursachen sind Übertragungsfehler, Datenbankfehler oder Manipulation durch einen Angreifer. Sie sollten die Software nicht ausführen."
|
||||
IDS_INTERRUPTED_DOWNLOAD "Übertragung unterbrochen. Prüfen Sie Ihre Internetverbindung!"
|
||||
@@ -211,6 +211,7 @@ BEGIN
|
||||
IDS_SELECT_ALL "Alle/Keine"
|
||||
IDS_INSTALL_SELECTED "Ausgewählte Installieren"
|
||||
IDS_SELECTEDFORINST "Zur Installation ausgewählt"
|
||||
IDS_MISMATCH_CERT_INFO "The certificate used is unknown:\nSubject: %s\nIssuer: %s\nDo you want to continue anyway?"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -203,7 +203,7 @@ BEGIN
|
||||
IDS_UNABLE_TO_DOWNLOAD2 "Unable to download the package! Check Internet Connection!"
|
||||
IDS_UNABLE_TO_REMOVE "Unable to remove data on the program from the registry!"
|
||||
IDS_UNABLE_TO_INSTALL "Unable to open installer!"
|
||||
IDS_CERT_DOES_NOT_MATCH "SSL certificate verification failed."
|
||||
IDS_UNABLE_TO_QUERY_CERT "Unable to retrieve certificate info.\n\nDo you want to continue anyway?"
|
||||
IDS_INTEG_CHECK_TITLE "Verifying package integrity…"
|
||||
IDS_INTEG_CHECK_FAIL "The package did not pass the integrity check, it may have been corrupted or tampered with during downloading. Running the software is not recommended."
|
||||
IDS_INTERRUPTED_DOWNLOAD "The download was interrupted. Check connection to Internet."
|
||||
@@ -211,6 +211,7 @@ BEGIN
|
||||
IDS_SELECT_ALL "Select/Deselect All"
|
||||
IDS_INSTALL_SELECTED "Install Selected"
|
||||
IDS_SELECTEDFORINST "Selected for installation"
|
||||
IDS_MISMATCH_CERT_INFO "The certificate used is unknown:\nSubject: %s\nIssuer: %s\nDo you want to continue anyway?"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -206,7 +206,7 @@ BEGIN
|
||||
IDS_UNABLE_TO_DOWNLOAD2 "Unable to download the package! Check Internet Connection!"
|
||||
IDS_UNABLE_TO_REMOVE "No se pudieron borrar del Registro los datos de instalación del programa."
|
||||
IDS_UNABLE_TO_INSTALL "Unable to open installer!"
|
||||
IDS_CERT_DOES_NOT_MATCH "Ha fallado la comprobación del certificado SSL."
|
||||
IDS_UNABLE_TO_QUERY_CERT "Unable to retrieve certificate info.\n\nDo you want to continue anyway?"
|
||||
IDS_INTEG_CHECK_TITLE "Verificando integridad del paquete…"
|
||||
IDS_INTEG_CHECK_FAIL "El paquete no ha pasado la comprobación de integridad, puede haber sido alterado o estar corrupto. No se recomienda ejecutarlo."
|
||||
IDS_INTERRUPTED_DOWNLOAD "Se ha interrumpido la descarga por un error de red. Comprueba la conexión a Internet."
|
||||
@@ -214,6 +214,7 @@ BEGIN
|
||||
IDS_SELECT_ALL "Select/Deselect All"
|
||||
IDS_INSTALL_SELECTED "Install Selected"
|
||||
IDS_SELECTEDFORINST "Selected for installation"
|
||||
IDS_MISMATCH_CERT_INFO "The certificate used is unknown:\nSubject: %s\nIssuer: %s\nDo you want to continue anyway?"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -203,7 +203,7 @@ BEGIN
|
||||
IDS_UNABLE_TO_DOWNLOAD2 "Impossible de télécharger le paquet : vérifiez votre connexion à Internet !"
|
||||
IDS_UNABLE_TO_REMOVE "Impossible de supprimer du registre les données du programme !"
|
||||
IDS_UNABLE_TO_INSTALL "Impossible d'ouvrir l'installeur !"
|
||||
IDS_CERT_DOES_NOT_MATCH "La vérification du certificat SSL a échoué."
|
||||
IDS_UNABLE_TO_QUERY_CERT "Unable to retrieve certificate info.\n\nDo you want to continue anyway?"
|
||||
IDS_INTEG_CHECK_TITLE "Vérification de l'intégrité du paquet…"
|
||||
IDS_INTEG_CHECK_FAIL "Le contrôle d'intégrité du paquet a échoué, il se peut qu'il ait été corrompu ou altéré au cours du téléchargement. L'exécution du programme n'est pas recommandée."
|
||||
IDS_INTERRUPTED_DOWNLOAD "Le téléchargement a été interrompu. Vérifiez votre connexion à Internet."
|
||||
@@ -211,6 +211,7 @@ BEGIN
|
||||
IDS_SELECT_ALL "Sélectionner/Désélectionner tout"
|
||||
IDS_INSTALL_SELECTED "Installer la sélection"
|
||||
IDS_SELECTEDFORINST "Sélectionnées pour installation"
|
||||
IDS_MISMATCH_CERT_INFO "The certificate used is unknown:\nSubject: %s\nIssuer: %s\nDo you want to continue anyway?"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -209,7 +209,7 @@ BEGIN
|
||||
IDS_UNABLE_TO_DOWNLOAD2 "Unable to download the package! Check Internet Connection!"
|
||||
IDS_UNABLE_TO_REMOVE "Unable to remove data on the program from the registry!"
|
||||
IDS_UNABLE_TO_INSTALL "Unable to open installer!"
|
||||
IDS_CERT_DOES_NOT_MATCH "SSL certificate verification failed."
|
||||
IDS_UNABLE_TO_QUERY_CERT "Unable to retrieve certificate info.\n\nDo you want to continue anyway?"
|
||||
IDS_INTEG_CHECK_TITLE "Verifying package integrity…"
|
||||
IDS_INTEG_CHECK_FAIL "The package did not pass the integrity check, it may have been corrupted or tampered with during downloading. Running the software is not recommended."
|
||||
IDS_INTERRUPTED_DOWNLOAD "The download was interrupted. Check connection to Internet."
|
||||
@@ -217,6 +217,7 @@ BEGIN
|
||||
IDS_SELECT_ALL "Select/Deselect All"
|
||||
IDS_INSTALL_SELECTED "Install Selected"
|
||||
IDS_SELECTEDFORINST "Selected for installation"
|
||||
IDS_MISMATCH_CERT_INFO "The certificate used is unknown:\nSubject: %s\nIssuer: %s\nDo you want to continue anyway?"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -203,7 +203,7 @@ BEGIN
|
||||
IDS_UNABLE_TO_DOWNLOAD2 "Impossibile scaricare il pacchetto! Controlla la tua connessione internet!"
|
||||
IDS_UNABLE_TO_REMOVE "Impossibile cancellare i dati dal registro!"
|
||||
IDS_UNABLE_TO_INSTALL "Impossibile aprire l'installer!"
|
||||
IDS_CERT_DOES_NOT_MATCH "Verifica del certificato SSL fallita."
|
||||
IDS_UNABLE_TO_QUERY_CERT "Unable to retrieve certificate info.\n\nDo you want to continue anyway?"
|
||||
IDS_INTEG_CHECK_TITLE "Verifica integrità pacchetto…"
|
||||
IDS_INTEG_CHECK_FAIL "Il pacchetto non ha superato il controllo di integrità, potrebbe essere stato danneggiato o manomesso durante lo scaricamento. L'esecuzione del software non è raccomandata."
|
||||
IDS_INTERRUPTED_DOWNLOAD "Lo scaricamento è stato interrotto. Verificare la connessione a Internet."
|
||||
@@ -211,6 +211,7 @@ BEGIN
|
||||
IDS_SELECT_ALL "Seleziona/Deseleziona Tutte"
|
||||
IDS_INSTALL_SELECTED "Installa le selezionate"
|
||||
IDS_SELECTEDFORINST "Selezionate per l'installazione"
|
||||
IDS_MISMATCH_CERT_INFO "The certificate used is unknown:\nSubject: %s\nIssuer: %s\nDo you want to continue anyway?"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -203,7 +203,7 @@ BEGIN
|
||||
IDS_UNABLE_TO_DOWNLOAD2 "Unable to download the package! Check Internet Connection!"
|
||||
IDS_UNABLE_TO_REMOVE "レジストリからこのプログラムに関するデータを削除できません!"
|
||||
IDS_UNABLE_TO_INSTALL "Unable to open installer!"
|
||||
IDS_CERT_DOES_NOT_MATCH "SSL certificate verification failed."
|
||||
IDS_UNABLE_TO_QUERY_CERT "Unable to retrieve certificate info.\n\nDo you want to continue anyway?"
|
||||
IDS_INTEG_CHECK_TITLE "Verifying package integrity…"
|
||||
IDS_INTEG_CHECK_FAIL "The package did not pass the integrity check, it may have been corrupted or tampered with during downloading. Running the software is not recommended."
|
||||
IDS_INTERRUPTED_DOWNLOAD "The download was interrupted. Check connection to Internet."
|
||||
@@ -211,6 +211,7 @@ BEGIN
|
||||
IDS_SELECT_ALL "Select/Deselect All"
|
||||
IDS_INSTALL_SELECTED "Install Selected"
|
||||
IDS_SELECTEDFORINST "Selected for installation"
|
||||
IDS_MISMATCH_CERT_INFO "The certificate used is unknown:\nSubject: %s\nIssuer: %s\nDo you want to continue anyway?"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -202,7 +202,7 @@ BEGIN
|
||||
IDS_UNABLE_TO_DOWNLOAD2 "Unable to download the package! Check Internet Connection!"
|
||||
IDS_UNABLE_TO_REMOVE "Unable to remove data on the program from the registry!"
|
||||
IDS_UNABLE_TO_INSTALL "Unable to open installer!"
|
||||
IDS_CERT_DOES_NOT_MATCH "SSL certificate verification failed."
|
||||
IDS_UNABLE_TO_QUERY_CERT "Unable to retrieve certificate info.\n\nDo you want to continue anyway?"
|
||||
IDS_INTEG_CHECK_TITLE "Verifying package integrity…"
|
||||
IDS_INTEG_CHECK_FAIL "The package did not pass the integrity check, it may have been corrupted or tampered with during downloading. Running the software is not recommended."
|
||||
IDS_INTERRUPTED_DOWNLOAD "The download was interrupted. Check connection to Internet."
|
||||
@@ -210,6 +210,7 @@ BEGIN
|
||||
IDS_SELECT_ALL "Select/Deselect All"
|
||||
IDS_INSTALL_SELECTED "Install Selected"
|
||||
IDS_SELECTEDFORINST "Selected for installation"
|
||||
IDS_MISMATCH_CERT_INFO "The certificate used is unknown:\nSubject: %s\nIssuer: %s\nDo you want to continue anyway?"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -211,7 +211,7 @@ BEGIN
|
||||
IDS_UNABLE_TO_DOWNLOAD2 "Nie można pobrać pakietu! Sprawdź połączenie z siecią!"
|
||||
IDS_UNABLE_TO_REMOVE "Nie można było usunąć wpisu z rejestru!"
|
||||
IDS_UNABLE_TO_INSTALL "Nie można uruchomić instalatora!"
|
||||
IDS_CERT_DOES_NOT_MATCH "Weryfikacja certyfikatu SSL nieudana."
|
||||
IDS_UNABLE_TO_QUERY_CERT "Unable to retrieve certificate info.\n\nDo you want to continue anyway?"
|
||||
IDS_INTEG_CHECK_TITLE "Weryfikowanie integralności pakietu…"
|
||||
IDS_INTEG_CHECK_FAIL "Pakiet nie przeszedł kontroli integralności, mógł zostać uszkodzony lub naruszony podczas pobierania. Uruchamianie tego programu nie jest zalecane."
|
||||
IDS_INTERRUPTED_DOWNLOAD "Pobieranie zostało przerwane. Sprawdź połączenie z siecią"
|
||||
@@ -219,6 +219,7 @@ BEGIN
|
||||
IDS_SELECT_ALL "Zaznacz/Odznacz Wszystko"
|
||||
IDS_INSTALL_SELECTED "Instaluj Zaznaczone"
|
||||
IDS_SELECTEDFORINST "Wybrane do instalacji"
|
||||
IDS_MISMATCH_CERT_INFO "The certificate used is unknown:\nSubject: %s\nIssuer: %s\nDo you want to continue anyway?"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -205,7 +205,7 @@ BEGIN
|
||||
IDS_UNABLE_TO_DOWNLOAD2 "Unable to download the package! Check Internet Connection!"
|
||||
IDS_UNABLE_TO_REMOVE "Não foi possível remover as informações do programa do registro!"
|
||||
IDS_UNABLE_TO_INSTALL "Unable to open installer!"
|
||||
IDS_CERT_DOES_NOT_MATCH "SSL certificate verification failed."
|
||||
IDS_UNABLE_TO_QUERY_CERT "Unable to retrieve certificate info.\n\nDo you want to continue anyway?"
|
||||
IDS_INTEG_CHECK_TITLE "Verifying package integrity…"
|
||||
IDS_INTEG_CHECK_FAIL "The package did not pass the integrity check, it may have been corrupted or tampered with during downloading. Running the software is not recommended."
|
||||
IDS_INTERRUPTED_DOWNLOAD "The download was interrupted. Check connection to Internet."
|
||||
@@ -213,6 +213,7 @@ BEGIN
|
||||
IDS_SELECT_ALL "Select/Deselect All"
|
||||
IDS_INSTALL_SELECTED "Install Selected"
|
||||
IDS_SELECTEDFORINST "Selected for installation"
|
||||
IDS_MISMATCH_CERT_INFO "The certificate used is unknown:\nSubject: %s\nIssuer: %s\nDo you want to continue anyway?"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -212,7 +212,7 @@ BEGIN
|
||||
IDS_UNABLE_TO_DOWNLOAD2 "Pachetul nu poate fi descărcat! Verificați conexiunea de Internet!"
|
||||
IDS_UNABLE_TO_REMOVE "Datele de registru pentru acest program nu au putut fi eliminate!"
|
||||
IDS_UNABLE_TO_INSTALL "Programul de instalare nu poate fi executat!"
|
||||
IDS_CERT_DOES_NOT_MATCH "Verificarea certificatului SSL a eșuat."
|
||||
IDS_UNABLE_TO_QUERY_CERT "Unable to retrieve certificate info.\n\nDo you want to continue anyway?"
|
||||
IDS_INTEG_CHECK_TITLE "Integritatea pachetului în verificare…"
|
||||
IDS_INTEG_CHECK_FAIL "Pachetul nu a trecut de verificarea de integritate. Utilizarea programului nu este recomandată."
|
||||
IDS_INTERRUPTED_DOWNLOAD "Descărcarea a fost întreruptă. Verificați conexiunea la Internet."
|
||||
@@ -220,6 +220,7 @@ BEGIN
|
||||
IDS_SELECT_ALL "Selectează/Deselectează Toate"
|
||||
IDS_INSTALL_SELECTED "Instalează selecționate"
|
||||
IDS_SELECTEDFORINST "Selectate pentru instalare"
|
||||
IDS_MISMATCH_CERT_INFO "The certificate used is unknown:\nSubject: %s\nIssuer: %s\nDo you want to continue anyway?"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -203,7 +203,7 @@ BEGIN
|
||||
IDS_UNABLE_TO_DOWNLOAD2 "Не удалось скачать приложение! Проверьте подключение к сети Интернет!"
|
||||
IDS_UNABLE_TO_REMOVE "Не удалось удалить данные о программе из реестра!"
|
||||
IDS_UNABLE_TO_INSTALL "Не удалось завершить установку!"
|
||||
IDS_CERT_DOES_NOT_MATCH "Ошибка проверки SSL сертификата."
|
||||
IDS_UNABLE_TO_QUERY_CERT "Unable to retrieve certificate info.\n\nDo you want to continue anyway?"
|
||||
IDS_INTEG_CHECK_TITLE "Проверка целостности приложения…"
|
||||
IDS_INTEG_CHECK_FAIL "Приложение не прошло проверку целостности, возможно оно было повреждено или подменено. Запуск приложения не рекомендуется."
|
||||
IDS_INTERRUPTED_DOWNLOAD "Загрузка была прервана. Проверьте подключение к сети Интернет."
|
||||
@@ -211,6 +211,7 @@ BEGIN
|
||||
IDS_SELECT_ALL "Выбрать все"
|
||||
IDS_INSTALL_SELECTED "Установить выбранное"
|
||||
IDS_SELECTEDFORINST "Выбрано для установки"
|
||||
IDS_MISMATCH_CERT_INFO "The certificate used is unknown:\nSubject: %s\nIssuer: %s\nDo you want to continue anyway?"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -208,7 +208,7 @@ BEGIN
|
||||
IDS_UNABLE_TO_DOWNLOAD2 "Unable to download the package! Check Internet Connection!"
|
||||
IDS_UNABLE_TO_REMOVE "Nie je možné odstrániť z registrov údaje o programe!"
|
||||
IDS_UNABLE_TO_INSTALL "Unable to open installer!"
|
||||
IDS_CERT_DOES_NOT_MATCH "SSL certificate verification failed."
|
||||
IDS_UNABLE_TO_QUERY_CERT "Unable to retrieve certificate info.\n\nDo you want to continue anyway?"
|
||||
IDS_INTEG_CHECK_TITLE "Verifying package integrity…"
|
||||
IDS_INTEG_CHECK_FAIL "The package did not pass the integrity check, it may have been corrupted or tampered with during downloading. Running the software is not recommended."
|
||||
IDS_INTERRUPTED_DOWNLOAD "The download was interrupted. Check connection to Internet."
|
||||
@@ -216,6 +216,7 @@ BEGIN
|
||||
IDS_SELECT_ALL "Select/Deselect All"
|
||||
IDS_INSTALL_SELECTED "Install Selected"
|
||||
IDS_SELECTEDFORINST "Selected for installation"
|
||||
IDS_MISMATCH_CERT_INFO "The certificate used is unknown:\nSubject: %s\nIssuer: %s\nDo you want to continue anyway?"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -207,7 +207,7 @@ BEGIN
|
||||
IDS_UNABLE_TO_DOWNLOAD2 "Unable to download the package! Check Internet Connection!"
|
||||
IDS_UNABLE_TO_REMOVE "E pamundur te fshihen informacionet e programit nga regjistri!"
|
||||
IDS_UNABLE_TO_INSTALL "Unable to open installer!"
|
||||
IDS_CERT_DOES_NOT_MATCH "SSL certificate verification failed."
|
||||
IDS_UNABLE_TO_QUERY_CERT "Unable to retrieve certificate info.\n\nDo you want to continue anyway?"
|
||||
IDS_INTEG_CHECK_TITLE "Verifying package integrity…"
|
||||
IDS_INTEG_CHECK_FAIL "The package did not pass the integrity check, it may have been corrupted or tampered with during downloading. Running the software is not recommended."
|
||||
IDS_INTERRUPTED_DOWNLOAD "The download was interrupted. Check connection to Internet."
|
||||
@@ -215,6 +215,7 @@ BEGIN
|
||||
IDS_SELECT_ALL "Select/Deselect All"
|
||||
IDS_INSTALL_SELECTED "Install Selected"
|
||||
IDS_SELECTEDFORINST "Selected for installation"
|
||||
IDS_MISMATCH_CERT_INFO "The certificate used is unknown:\nSubject: %s\nIssuer: %s\nDo you want to continue anyway?"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -210,7 +210,7 @@ BEGIN
|
||||
IDS_UNABLE_TO_DOWNLOAD2 "Unable to download the package! Check Internet Connection!"
|
||||
IDS_UNABLE_TO_REMOVE "Det gick ej att ta bort programmets data från registret!"
|
||||
IDS_UNABLE_TO_INSTALL "Unable to open installer!"
|
||||
IDS_CERT_DOES_NOT_MATCH "SSL certificate verification failed."
|
||||
IDS_UNABLE_TO_QUERY_CERT "Unable to retrieve certificate info.\n\nDo you want to continue anyway?"
|
||||
IDS_INTEG_CHECK_TITLE "Verifying package integrity…"
|
||||
IDS_INTEG_CHECK_FAIL "The package did not pass the integrity check, it may have been corrupted or tampered with during downloading. Running the software is not recommended."
|
||||
IDS_INTERRUPTED_DOWNLOAD "The download was interrupted. Check connection to Internet."
|
||||
@@ -218,6 +218,7 @@ BEGIN
|
||||
IDS_SELECT_ALL "Select/Deselect All"
|
||||
IDS_INSTALL_SELECTED "Install Selected"
|
||||
IDS_SELECTEDFORINST "Selected for installation"
|
||||
IDS_MISMATCH_CERT_INFO "The certificate used is unknown:\nSubject: %s\nIssuer: %s\nDo you want to continue anyway?"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -205,7 +205,7 @@ BEGIN
|
||||
IDS_UNABLE_TO_DOWNLOAD2 "Paket indirilemez! Umûmî Ağ bağlantınızı yoklayınız!"
|
||||
IDS_UNABLE_TO_REMOVE "İzlencenin girişi değer defterinden silinemiyor."
|
||||
IDS_UNABLE_TO_INSTALL "Unable to open installer!"
|
||||
IDS_CERT_DOES_NOT_MATCH "SSL onay belgesi doğrulaması başarısız."
|
||||
IDS_UNABLE_TO_QUERY_CERT "Unable to retrieve certificate info.\n\nDo you want to continue anyway?"
|
||||
IDS_INTEG_CHECK_TITLE "Paket bütünlüğü doğrulanıyor…"
|
||||
IDS_INTEG_CHECK_FAIL "Paket bütünlük denetimini geçmedi, bozulmuş veyâ indirme esnâsında oynanmış olabilir. Yazılımı çalıştırmak önerilmez."
|
||||
IDS_INTERRUPTED_DOWNLOAD "İndirme kesildi. Umûmî Ağ bağlantınızı denetleyiniz."
|
||||
@@ -213,6 +213,7 @@ BEGIN
|
||||
IDS_SELECT_ALL "Select/Deselect All"
|
||||
IDS_INSTALL_SELECTED "Install Selected"
|
||||
IDS_SELECTEDFORINST "Selected for installation"
|
||||
IDS_MISMATCH_CERT_INFO "The certificate used is unknown:\nSubject: %s\nIssuer: %s\nDo you want to continue anyway?"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -211,7 +211,7 @@ BEGIN
|
||||
IDS_UNABLE_TO_DOWNLOAD2 "Неможливо завантажити додаток! Перевірте підключення до мережі Інтернет!"
|
||||
IDS_UNABLE_TO_REMOVE "Не вдалося видалити дані про програму з реєстру!"
|
||||
IDS_UNABLE_TO_INSTALL "Не вдалося завершити інсталювання!"
|
||||
IDS_CERT_DOES_NOT_MATCH "Помилка перевіки сертифікату SSL."
|
||||
IDS_UNABLE_TO_QUERY_CERT "Unable to retrieve certificate info.\n\nDo you want to continue anyway?"
|
||||
IDS_INTEG_CHECK_TITLE "Перевірка цілістності додатку…"
|
||||
IDS_INTEG_CHECK_FAIL "Додаток не пройшов перевірку цілістності, його молги пошкодити чи замінити. Запуск додатку не рекомендується."
|
||||
IDS_INTERRUPTED_DOWNLOAD "Завантаження перервано. Перевірте підключення до мережі Інтернет."
|
||||
@@ -219,6 +219,7 @@ BEGIN
|
||||
IDS_SELECT_ALL "Вибрати все"
|
||||
IDS_INSTALL_SELECTED "Встановити обране"
|
||||
IDS_SELECTEDFORINST "Обрані для встановлення"
|
||||
IDS_MISMATCH_CERT_INFO "The certificate used is unknown:\nSubject: %s\nIssuer: %s\nDo you want to continue anyway?"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -205,7 +205,7 @@ BEGIN
|
||||
IDS_UNABLE_TO_DOWNLOAD2 "无法下载该软件包!请检查网络连接!"
|
||||
IDS_UNABLE_TO_REMOVE "无法从注册表删除该程序的数据!"
|
||||
IDS_UNABLE_TO_INSTALL "无法打开安装程序!"
|
||||
IDS_CERT_DOES_NOT_MATCH "SSL 证书验证失败。"
|
||||
IDS_UNABLE_TO_QUERY_CERT "Unable to retrieve certificate info.\n\nDo you want to continue anyway?"
|
||||
IDS_INTEG_CHECK_TITLE "正在验证包完整性…"
|
||||
IDS_INTEG_CHECK_FAIL "这个包没有通过完整性验证,它可能在下载过程中损坏或被人为篡改了。不推荐运行这个程序。"
|
||||
IDS_INTERRUPTED_DOWNLOAD "下载中断。请检查网络连接。"
|
||||
@@ -213,6 +213,7 @@ BEGIN
|
||||
IDS_SELECT_ALL "全选/全反选"
|
||||
IDS_INSTALL_SELECTED "安装已选中的"
|
||||
IDS_SELECTEDFORINST "Selected for installation"
|
||||
IDS_MISMATCH_CERT_INFO "The certificate used is unknown:\nSubject: %s\nIssuer: %s\nDo you want to continue anyway?"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -205,7 +205,7 @@ BEGIN
|
||||
IDS_UNABLE_TO_DOWNLOAD2 "Unable to download the package! Check Internet Connection!"
|
||||
IDS_UNABLE_TO_REMOVE "無法從登錄檔刪除該程式的資料!"
|
||||
IDS_UNABLE_TO_INSTALL "Unable to open installer!"
|
||||
IDS_CERT_DOES_NOT_MATCH "SSL 憑證驗證失敗。"
|
||||
IDS_UNABLE_TO_QUERY_CERT "Unable to retrieve certificate info.\n\nDo you want to continue anyway?"
|
||||
IDS_INTEG_CHECK_TITLE "驗證套裝軟體的完整性…"
|
||||
IDS_INTEG_CHECK_FAIL "包沒有通過完整性檢查,它可能已損壞,或者在下載過程中篡改。建議您不要運行該軟體。"
|
||||
IDS_INTERRUPTED_DOWNLOAD "The download was interrupted. Check connection to Internet."
|
||||
@@ -213,6 +213,7 @@ BEGIN
|
||||
IDS_SELECT_ALL "Select/Deselect All"
|
||||
IDS_INSTALL_SELECTED "Install Selected"
|
||||
IDS_SELECTEDFORINST "Selected for installation"
|
||||
IDS_MISMATCH_CERT_INFO "The certificate used is unknown:\nSubject: %s\nIssuer: %s\nDo you want to continue anyway?"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -47,8 +47,8 @@
|
||||
#include "misc.h"
|
||||
|
||||
#ifdef USE_CERT_PINNING
|
||||
#define CERT_ISSUER_INFO "BE\r\nGlobalSign nv-sa\r\nGlobalSign Domain Validation CA - SHA256 - G2"
|
||||
#define CERT_SUBJECT_INFO "Domain Control Validated\r\n*.reactos.org"
|
||||
#define CERT_ISSUER_INFO "US\r\nLet's Encrypt\r\nLet's Encrypt Authority X3"
|
||||
#define CERT_SUBJECT_INFO "rapps.reactos.org"
|
||||
#endif
|
||||
|
||||
enum DownloadStatus
|
||||
@@ -331,61 +331,52 @@ HRESULT WINAPI CDownloadDialog_Constructor(HWND Dlg, BOOL *pbCancelled, REFIID r
|
||||
}
|
||||
|
||||
#ifdef USE_CERT_PINNING
|
||||
static BOOL CertIsValid(HINTERNET hInternet, LPWSTR lpszHostName)
|
||||
{
|
||||
HINTERNET hConnect;
|
||||
HINTERNET hRequest;
|
||||
DWORD certInfoLength;
|
||||
BOOL Ret = FALSE;
|
||||
INTERNET_CERTIFICATE_INFOW certInfo;
|
||||
typedef CHeapPtr<char, CLocalAllocator> CLocalPtr;
|
||||
|
||||
hConnect = InternetConnectW(hInternet, lpszHostName, INTERNET_DEFAULT_HTTPS_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, INTERNET_FLAG_SECURE, 0);
|
||||
if (hConnect)
|
||||
static BOOL CertGetSubjectAndIssuer(HINTERNET hFile, CLocalPtr& subjectInfo, CLocalPtr& issuerInfo)
|
||||
{
|
||||
DWORD certInfoLength;
|
||||
INTERNET_CERTIFICATE_INFOA certInfo;
|
||||
DWORD size, flags;
|
||||
|
||||
size = sizeof(flags);
|
||||
if (!InternetQueryOptionA(hFile, INTERNET_OPTION_SECURITY_FLAGS, &flags, &size))
|
||||
{
|
||||
hRequest = HttpOpenRequestW(hConnect, L"HEAD", NULL, NULL, NULL, NULL, INTERNET_FLAG_SECURE, 0);
|
||||
if (hRequest != NULL)
|
||||
{
|
||||
Ret = HttpSendRequestW(hRequest, L"", 0, NULL, 0);
|
||||
if (Ret)
|
||||
{
|
||||
certInfoLength = sizeof(certInfo);
|
||||
Ret = InternetQueryOptionW(hRequest,
|
||||
INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT,
|
||||
&certInfo,
|
||||
&certInfoLength);
|
||||
if (Ret)
|
||||
{
|
||||
if (certInfo.lpszEncryptionAlgName)
|
||||
LocalFree(certInfo.lpszEncryptionAlgName);
|
||||
if (certInfo.lpszIssuerInfo)
|
||||
{
|
||||
if (strcmp((LPSTR) certInfo.lpszIssuerInfo, CERT_ISSUER_INFO) != 0)
|
||||
Ret = FALSE;
|
||||
LocalFree(certInfo.lpszIssuerInfo);
|
||||
}
|
||||
if (certInfo.lpszProtocolName)
|
||||
LocalFree(certInfo.lpszProtocolName);
|
||||
if (certInfo.lpszSignatureAlgName)
|
||||
LocalFree(certInfo.lpszSignatureAlgName);
|
||||
if (certInfo.lpszSubjectInfo)
|
||||
{
|
||||
if (strcmp((LPSTR) certInfo.lpszSubjectInfo, CERT_SUBJECT_INFO) != 0)
|
||||
Ret = FALSE;
|
||||
LocalFree(certInfo.lpszSubjectInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
InternetCloseHandle(hRequest);
|
||||
}
|
||||
InternetCloseHandle(hConnect);
|
||||
return FALSE;
|
||||
}
|
||||
return Ret;
|
||||
|
||||
if (!flags & SECURITY_FLAG_SECURE)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Despite what the header indicates, the implementation of INTERNET_CERTIFICATE_INFO is not Unicode-aware. */
|
||||
certInfoLength = sizeof(certInfo);
|
||||
if (!InternetQueryOptionA(hFile,
|
||||
INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT,
|
||||
&certInfo,
|
||||
&certInfoLength))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
subjectInfo.Attach(certInfo.lpszSubjectInfo);
|
||||
issuerInfo.Attach(certInfo.lpszIssuerInfo);
|
||||
|
||||
if (certInfo.lpszProtocolName)
|
||||
LocalFree(certInfo.lpszProtocolName);
|
||||
if (certInfo.lpszSignatureAlgName)
|
||||
LocalFree(certInfo.lpszSignatureAlgName);
|
||||
if (certInfo.lpszEncryptionAlgName)
|
||||
LocalFree(certInfo.lpszEncryptionAlgName);
|
||||
|
||||
return certInfo.lpszSubjectInfo && certInfo.lpszIssuerInfo;
|
||||
}
|
||||
#endif
|
||||
|
||||
inline VOID MessageBox_LoadString(HWND hMainWnd, INT StringID)
|
||||
{
|
||||
ATL::CString szMsgText;
|
||||
ATL::CStringW szMsgText;
|
||||
if (szMsgText.LoadStringW(StringID))
|
||||
{
|
||||
MessageBoxW(hMainWnd, szMsgText.GetString(), NULL, MB_OK | MB_ICONERROR);
|
||||
@@ -612,6 +603,8 @@ DWORD WINAPI CDownloadManager::ThreadFunc(LPVOID param)
|
||||
LPCWSTR szCaption = static_cast<DownloadParam*>(param)->szCaption;
|
||||
ATL::CStringW szNewCaption;
|
||||
|
||||
const DWORD dwUrlConnectFlags = INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_KEEP_CONNECTION;
|
||||
|
||||
if (InfoArray.GetSize() <= 0)
|
||||
{
|
||||
MessageBox_LoadString(hMainWnd, IDS_UNABLE_TO_DOWNLOAD);
|
||||
@@ -629,6 +622,19 @@ DWORD WINAPI CDownloadManager::ThreadFunc(LPVOID param)
|
||||
SendMessageW(Item, PBM_SETPOS, 0, 0);
|
||||
}
|
||||
|
||||
// is this URL an update package for RAPPS? if so store it in a different place
|
||||
if (InfoArray[iAppId].szUrl == APPLICATION_DATABASE_URL)
|
||||
{
|
||||
bCab = TRUE;
|
||||
if (!GetStorageDirectory(Path))
|
||||
goto end;
|
||||
}
|
||||
else
|
||||
{
|
||||
bCab = FALSE;
|
||||
Path = SettingsInfo.szDownloadDir;
|
||||
}
|
||||
|
||||
// Change caption to show the currently downloaded app
|
||||
if (!bCab)
|
||||
{
|
||||
@@ -657,18 +663,6 @@ DWORD WINAPI CDownloadManager::ThreadFunc(LPVOID param)
|
||||
if (q && q > p && (q - p) > 0)
|
||||
filenameLength -= wcslen(q - 1) * sizeof(WCHAR);
|
||||
|
||||
// is this URL an update package for RAPPS? if so store it in a different place
|
||||
if (InfoArray[iAppId].szUrl == APPLICATION_DATABASE_URL)
|
||||
{
|
||||
bCab = TRUE;
|
||||
if (!GetStorageDirectory(Path))
|
||||
goto end;
|
||||
}
|
||||
else
|
||||
{
|
||||
Path = SettingsInfo.szDownloadDir;
|
||||
}
|
||||
|
||||
// is the path valid? can we access it?
|
||||
if (GetFileAttributesW(Path.GetString()) == INVALID_FILE_ATTRIBUTES)
|
||||
{
|
||||
@@ -703,6 +697,7 @@ DWORD WINAPI CDownloadManager::ThreadFunc(LPVOID param)
|
||||
switch (SettingsInfo.Proxy)
|
||||
{
|
||||
case 0: // preconfig
|
||||
default:
|
||||
hOpen = InternetOpenW(lpszAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
|
||||
break;
|
||||
case 1: // direct (no proxy)
|
||||
@@ -711,31 +706,11 @@ DWORD WINAPI CDownloadManager::ThreadFunc(LPVOID param)
|
||||
case 2: // use proxy
|
||||
hOpen = InternetOpenW(lpszAgent, INTERNET_OPEN_TYPE_PROXY, SettingsInfo.szProxyServer, SettingsInfo.szNoProxyFor, 0);
|
||||
break;
|
||||
default: // preconfig
|
||||
hOpen = InternetOpenW(lpszAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!hOpen)
|
||||
goto end;
|
||||
|
||||
hFile = InternetOpenUrlW(hOpen, InfoArray[iAppId].szUrl.GetString(), NULL, 0, INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_KEEP_CONNECTION, 0);
|
||||
|
||||
if (!hFile)
|
||||
{
|
||||
MessageBox_LoadString(hMainWnd, IDS_UNABLE_TO_DOWNLOAD2);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!HttpQueryInfoW(hFile, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwStatus, &dwStatusLen, NULL))
|
||||
goto end;
|
||||
|
||||
if (dwStatus != HTTP_STATUS_OK)
|
||||
{
|
||||
MessageBox_LoadString(hMainWnd, IDS_UNABLE_TO_DOWNLOAD);
|
||||
goto end;
|
||||
}
|
||||
|
||||
dwStatusLen = sizeof(dwStatus);
|
||||
|
||||
memset(&urlComponents, 0, sizeof(urlComponents));
|
||||
@@ -753,10 +728,44 @@ DWORD WINAPI CDownloadManager::ThreadFunc(LPVOID param)
|
||||
dwContentLen = 0;
|
||||
|
||||
if (urlComponents.nScheme == INTERNET_SCHEME_HTTP || urlComponents.nScheme == INTERNET_SCHEME_HTTPS)
|
||||
HttpQueryInfoW(hFile, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, &dwContentLen, &dwStatus, 0);
|
||||
{
|
||||
hFile = InternetOpenUrlW(hOpen, InfoArray[iAppId].szUrl.GetString(), NULL, 0,
|
||||
dwUrlConnectFlags,
|
||||
0);
|
||||
if (!hFile)
|
||||
{
|
||||
MessageBox_LoadString(hMainWnd, IDS_UNABLE_TO_DOWNLOAD2);
|
||||
goto end;
|
||||
}
|
||||
|
||||
// query connection
|
||||
if (!HttpQueryInfoW(hFile, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwStatus, &dwStatusLen, NULL))
|
||||
goto end;
|
||||
|
||||
if (dwStatus != HTTP_STATUS_OK)
|
||||
{
|
||||
MessageBox_LoadString(hMainWnd, IDS_UNABLE_TO_DOWNLOAD);
|
||||
goto end;
|
||||
}
|
||||
|
||||
// query content length
|
||||
HttpQueryInfoW(hFile, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, &dwContentLen, &dwStatusLen, NULL);
|
||||
}
|
||||
|
||||
if (urlComponents.nScheme == INTERNET_SCHEME_FTP)
|
||||
{
|
||||
// force passive mode on FTP
|
||||
hFile = InternetOpenUrlW(hOpen, InfoArray[iAppId].szUrl.GetString(), NULL, 0,
|
||||
dwUrlConnectFlags | INTERNET_FLAG_PASSIVE,
|
||||
0);
|
||||
if (!hFile)
|
||||
{
|
||||
MessageBox_LoadString(hMainWnd, IDS_UNABLE_TO_DOWNLOAD2);
|
||||
goto end;
|
||||
}
|
||||
|
||||
dwContentLen = FtpGetFileSize(hFile, &dwStatus);
|
||||
}
|
||||
|
||||
if (!dwContentLen)
|
||||
{
|
||||
@@ -764,20 +773,42 @@ DWORD WINAPI CDownloadManager::ThreadFunc(LPVOID param)
|
||||
SetProgressMarquee(Item, TRUE);
|
||||
}
|
||||
|
||||
free(urlComponents.lpszScheme);
|
||||
free(urlComponents.lpszHostName);
|
||||
|
||||
#ifdef USE_CERT_PINNING
|
||||
// are we using HTTPS to download the RAPPS update package? check if the certificate is original
|
||||
if ((urlComponents.nScheme == INTERNET_SCHEME_HTTPS) &&
|
||||
(wcscmp(InfoArray[iAppId].szUrl, APPLICATION_DATABASE_URL) == 0) &&
|
||||
(!CertIsValid(hOpen, urlComponents.lpszHostName)))
|
||||
(wcscmp(InfoArray[iAppId].szUrl, APPLICATION_DATABASE_URL) == 0))
|
||||
{
|
||||
MessageBox_LoadString(hMainWnd, IDS_CERT_DOES_NOT_MATCH);
|
||||
goto end;
|
||||
CLocalPtr subjectName, issuerName;
|
||||
CStringW szMsgText;
|
||||
bool bAskQuestion = false;
|
||||
if (!CertGetSubjectAndIssuer(hFile, subjectName, issuerName))
|
||||
{
|
||||
szMsgText.LoadStringW(IDS_UNABLE_TO_QUERY_CERT);
|
||||
bAskQuestion = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (strcmp(subjectName, CERT_SUBJECT_INFO) ||
|
||||
strcmp(issuerName, CERT_ISSUER_INFO))
|
||||
{
|
||||
szMsgText.Format(IDS_MISMATCH_CERT_INFO, (char*)subjectName, (const char*)issuerName);
|
||||
bAskQuestion = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (bAskQuestion)
|
||||
{
|
||||
if (MessageBoxW(hMainWnd, szMsgText.GetString(), NULL, MB_YESNO | MB_ICONERROR) != IDYES)
|
||||
{
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
free(urlComponents.lpszScheme);
|
||||
free(urlComponents.lpszHostName);
|
||||
|
||||
hOut = CreateFileW(Path.GetString(), GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, 0, NULL);
|
||||
|
||||
if (hOut == INVALID_HANDLE_VALUE)
|
||||
|
@@ -595,6 +595,10 @@ bind_lease(struct interface_info *ip)
|
||||
|
||||
/* Remember the medium. */
|
||||
ip->client->new->medium = ip->client->medium;
|
||||
|
||||
/* Replace the old active lease with the new one. */
|
||||
if (ip->client->active)
|
||||
free_client_lease(ip->client->active);
|
||||
ip->client->active = ip->client->new;
|
||||
ip->client->new = NULL;
|
||||
|
||||
|
@@ -815,6 +815,7 @@ LdrpWalkImportDescriptor(IN LPWSTR DllPath OPTIONAL,
|
||||
return Status;
|
||||
}
|
||||
|
||||
/* FIXME: This function is missing SxS support */
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
LdrpLoadImportModule(IN PWSTR DllPath OPTIONAL,
|
||||
@@ -830,14 +831,9 @@ LdrpLoadImportModule(IN PWSTR DllPath OPTIONAL,
|
||||
NTSTATUS Status;
|
||||
PPEB Peb = RtlGetCurrentPeb();
|
||||
PTEB Teb = NtCurrentTeb();
|
||||
UNICODE_STRING RedirectedImpDescName;
|
||||
BOOLEAN RedirectedDll;
|
||||
|
||||
DPRINT("LdrpLoadImportModule('%S' '%s' %p %p)\n", DllPath, ImportName, DataTableEntry, Existing);
|
||||
|
||||
RedirectedDll = FALSE;
|
||||
RtlInitEmptyUnicodeString(&RedirectedImpDescName, NULL, 0);
|
||||
|
||||
/* Convert import descriptor name to unicode string */
|
||||
ImpDescName = &Teb->StaticUnicodeString;
|
||||
RtlInitAnsiString(&AnsiString, ImportName);
|
||||
@@ -887,59 +883,76 @@ LdrpLoadImportModule(IN PWSTR DllPath OPTIONAL,
|
||||
&LdrApiDefaultExtension);
|
||||
}
|
||||
|
||||
/* Check if the SxS Assemblies specify another file */
|
||||
Status = RtlDosApplyFileIsolationRedirection_Ustr(TRUE,
|
||||
ImpDescName,
|
||||
&LdrApiDefaultExtension,
|
||||
NULL,
|
||||
&RedirectedImpDescName,
|
||||
&ImpDescName,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
/* Check success */
|
||||
if (NT_SUCCESS(Status))
|
||||
{
|
||||
/* Let Ldrp know */
|
||||
RedirectedDll = TRUE;
|
||||
}
|
||||
else if (Status != STATUS_SXS_KEY_NOT_FOUND)
|
||||
{
|
||||
/* Unrecoverable SxS failure */
|
||||
DPRINT1("LDR: RtlDosApplyFileIsolationRedirection_Ustr failed with status %x for dll %wZ\n", Status, ImpDescName);
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Check if it's loaded */
|
||||
if (LdrpCheckForLoadedDll(DllPath,
|
||||
ImpDescName,
|
||||
TRUE,
|
||||
RedirectedDll,
|
||||
FALSE,
|
||||
DataTableEntry))
|
||||
{
|
||||
/* It's already existing in the list */
|
||||
*Existing = TRUE;
|
||||
Status = STATUS_SUCCESS;
|
||||
goto done;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/* We're loading it for the first time */
|
||||
*Existing = FALSE;
|
||||
|
||||
#if 0
|
||||
/* Load manifest */
|
||||
{
|
||||
ACTCTX_SECTION_KEYED_DATA data;
|
||||
NTSTATUS status;
|
||||
|
||||
//DPRINT1("find_actctx_dll for %S\n", fullname);
|
||||
//RtlInitUnicodeString(&nameW, libname);
|
||||
data.cbSize = sizeof(data);
|
||||
status = RtlFindActivationContextSectionString(
|
||||
FIND_ACTCTX_SECTION_KEY_RETURN_HACTCTX, NULL,
|
||||
ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION,
|
||||
ImpDescName,
|
||||
&data);
|
||||
//if (status != STATUS_SUCCESS) return status;
|
||||
DPRINT1("Status: 0x%08X\n", status);
|
||||
|
||||
if (NT_SUCCESS(status))
|
||||
{
|
||||
ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION *info;
|
||||
SIZE_T needed, size = 1024;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
if (!(info = RtlAllocateHeap(RtlGetProcessHeap(), 0, size)))
|
||||
{
|
||||
status = STATUS_NO_MEMORY;
|
||||
goto done;
|
||||
}
|
||||
status = RtlQueryInformationActivationContext(0, data.hActCtx, &data.ulAssemblyRosterIndex,
|
||||
AssemblyDetailedInformationInActivationContext,
|
||||
info, size, &needed);
|
||||
if (status == STATUS_SUCCESS) break;
|
||||
if (status != STATUS_BUFFER_TOO_SMALL) goto done;
|
||||
RtlFreeHeap(RtlGetProcessHeap(), 0, info);
|
||||
size = needed;
|
||||
}
|
||||
|
||||
DPRINT("manifestpath === %S\n", info->lpAssemblyManifestPath);
|
||||
DPRINT("DirectoryName === %S\n", info->lpAssemblyDirectoryName);
|
||||
}
|
||||
}
|
||||
done:
|
||||
#endif
|
||||
|
||||
/* Map it */
|
||||
Status = LdrpMapDll(DllPath,
|
||||
NULL,
|
||||
ImpDescName->Buffer,
|
||||
NULL,
|
||||
TRUE,
|
||||
RedirectedDll,
|
||||
FALSE,
|
||||
DataTableEntry);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT1("LDR: LdrpMapDll failed with status %x for dll %wZ\n", Status, ImpDescName);
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (!NT_SUCCESS(Status)) return Status;
|
||||
|
||||
/* Walk its import descriptor table */
|
||||
Status = LdrpWalkImportDescriptor(DllPath,
|
||||
@@ -951,9 +964,6 @@ LdrpLoadImportModule(IN PWSTR DllPath OPTIONAL,
|
||||
&(*DataTableEntry)->InInitializationOrderLinks);
|
||||
}
|
||||
|
||||
done:
|
||||
RtlFreeUnicodeString(&RedirectedImpDescName);
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
@@ -28,6 +28,101 @@ PVOID g_pfnSE_ProcessDying;
|
||||
|
||||
/* FUNCTIONS *****************************************************************/
|
||||
|
||||
/* NOTE: Remove this one once our actctx support becomes better */
|
||||
NTSTATUS find_actctx_dll( LPCWSTR libname, WCHAR *fullname )
|
||||
{
|
||||
static const WCHAR winsxsW[] = {'\\','w','i','n','s','x','s','\\'};
|
||||
static const WCHAR dotManifestW[] = {'.','m','a','n','i','f','e','s','t',0};
|
||||
|
||||
ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION *info;
|
||||
ACTCTX_SECTION_KEYED_DATA data;
|
||||
UNICODE_STRING nameW;
|
||||
NTSTATUS status;
|
||||
SIZE_T needed, size = 1024;
|
||||
WCHAR *p;
|
||||
|
||||
RtlInitUnicodeString( &nameW, libname );
|
||||
data.cbSize = sizeof(data);
|
||||
status = RtlFindActivationContextSectionString( FIND_ACTCTX_SECTION_KEY_RETURN_HACTCTX, NULL,
|
||||
ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION,
|
||||
&nameW, &data );
|
||||
if (status != STATUS_SUCCESS) return status;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
if (!(info = RtlAllocateHeap( RtlGetProcessHeap(), 0, size )))
|
||||
{
|
||||
status = STATUS_NO_MEMORY;
|
||||
goto done;
|
||||
}
|
||||
status = RtlQueryInformationActivationContext( 0, data.hActCtx, &data.ulAssemblyRosterIndex,
|
||||
AssemblyDetailedInformationInActivationContext,
|
||||
info, size, &needed );
|
||||
if (status == STATUS_SUCCESS) break;
|
||||
if (status != STATUS_BUFFER_TOO_SMALL) goto done;
|
||||
RtlFreeHeap( RtlGetProcessHeap(), 0, info );
|
||||
size = needed;
|
||||
}
|
||||
|
||||
DPRINT("manifestpath === %S\n", info->lpAssemblyManifestPath);
|
||||
DPRINT("DirectoryName === %S\n", info->lpAssemblyDirectoryName);
|
||||
if (!info->lpAssemblyManifestPath || !info->lpAssemblyDirectoryName)
|
||||
{
|
||||
status = STATUS_SXS_KEY_NOT_FOUND;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if ((p = wcsrchr( info->lpAssemblyManifestPath, '\\' )))
|
||||
{
|
||||
DWORD dirlen = info->ulAssemblyDirectoryNameLength / sizeof(WCHAR);
|
||||
|
||||
p++;
|
||||
if (_wcsnicmp( p, info->lpAssemblyDirectoryName, dirlen ) || wcsicmp( p + dirlen, dotManifestW ))
|
||||
{
|
||||
/* manifest name does not match directory name, so it's not a global
|
||||
* windows/winsxs manifest; use the manifest directory name instead */
|
||||
dirlen = p - info->lpAssemblyManifestPath;
|
||||
needed = (dirlen + 1) * sizeof(WCHAR) + nameW.Length;
|
||||
|
||||
p = fullname;
|
||||
/*if (!(*fullname = p = RtlAllocateHeap( GetProcessHeap(), 0, needed )))
|
||||
{
|
||||
status = STATUS_NO_MEMORY;
|
||||
goto done;
|
||||
}*/
|
||||
memcpy( p, info->lpAssemblyManifestPath, dirlen * sizeof(WCHAR) );
|
||||
p += dirlen;
|
||||
wcscpy( p, libname );
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
||||
needed = (wcslen(SharedUserData->NtSystemRoot) * sizeof(WCHAR) +
|
||||
sizeof(winsxsW) + info->ulAssemblyDirectoryNameLength + nameW.Length + 2*sizeof(WCHAR));
|
||||
|
||||
p = fullname;
|
||||
//if (!(*fullname = p = RtlAllocateHeap( GetProcessHeap(), 0, needed )))
|
||||
//{
|
||||
//status = STATUS_NO_MEMORY;
|
||||
//goto done;
|
||||
//}
|
||||
wcscpy( p, SharedUserData->NtSystemRoot );
|
||||
p += wcslen(p);
|
||||
memcpy( p, winsxsW, sizeof(winsxsW) );
|
||||
p += sizeof(winsxsW) / sizeof(WCHAR);
|
||||
memcpy( p, info->lpAssemblyDirectoryName, info->ulAssemblyDirectoryNameLength );
|
||||
p += info->ulAssemblyDirectoryNameLength / sizeof(WCHAR);
|
||||
*p++ = '\\';
|
||||
wcscpy( p, libname );
|
||||
|
||||
done:
|
||||
RtlFreeHeap( RtlGetProcessHeap(), 0, info );
|
||||
RtlReleaseActivationContext( data.hActCtx );
|
||||
DPRINT("%S\n", fullname);
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
LdrpAllocateUnicodeString(IN OUT PUNICODE_STRING StringOut,
|
||||
@@ -119,30 +214,19 @@ LdrpUpdateLoadCount3(IN PLDR_DATA_TABLE_ENTRY LdrEntry,
|
||||
PIMAGE_IMPORT_DESCRIPTOR ImportEntry;
|
||||
PIMAGE_THUNK_DATA FirstThunk;
|
||||
PLDR_DATA_TABLE_ENTRY Entry;
|
||||
PUNICODE_STRING ImportNameUnic, RedirectedImportName;
|
||||
PUNICODE_STRING ImportNameUnic;
|
||||
ANSI_STRING ImportNameAnsi;
|
||||
LPSTR ImportName;
|
||||
ULONG ImportSize;
|
||||
NTSTATUS Status;
|
||||
ULONG i;
|
||||
BOOLEAN RedirectedDll;
|
||||
RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED ActCtx;
|
||||
|
||||
/* Set up the Act Ctx */
|
||||
ActCtx.Size = sizeof(ActCtx);
|
||||
ActCtx.Format = RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_FORMAT_WHISTLER;
|
||||
RtlZeroMemory(&ActCtx.Frame, sizeof(RTL_ACTIVATION_CONTEXT_STACK_FRAME));
|
||||
|
||||
/* Activate the ActCtx */
|
||||
RtlActivateActivationContextUnsafeFast(&ActCtx,
|
||||
LdrEntry->EntryPointActivationContext);
|
||||
|
||||
/* Check the action we need to perform */
|
||||
if ((Flags == LDRP_UPDATE_REFCOUNT) || (Flags == LDRP_UPDATE_PIN))
|
||||
{
|
||||
/* Make sure entry is not being loaded already */
|
||||
if (LdrEntry->Flags & LDRP_LOAD_IN_PROGRESS)
|
||||
goto done;
|
||||
return;
|
||||
|
||||
LdrEntry->Flags |= LDRP_LOAD_IN_PROGRESS;
|
||||
}
|
||||
@@ -150,7 +234,7 @@ LdrpUpdateLoadCount3(IN PLDR_DATA_TABLE_ENTRY LdrEntry,
|
||||
{
|
||||
/* Make sure the entry is not being unloaded already */
|
||||
if (LdrEntry->Flags & LDRP_UNLOAD_IN_PROGRESS)
|
||||
goto done;
|
||||
return;
|
||||
|
||||
LdrEntry->Flags |= LDRP_UNLOAD_IN_PROGRESS;
|
||||
}
|
||||
@@ -183,38 +267,54 @@ LdrpUpdateLoadCount3(IN PLDR_DATA_TABLE_ENTRY LdrEntry,
|
||||
|
||||
if (NT_SUCCESS(Status))
|
||||
{
|
||||
RedirectedDll = FALSE;
|
||||
RedirectedImportName = ImportNameUnic;
|
||||
|
||||
/* Check if the SxS Assemblies specify another file */
|
||||
Status = RtlDosApplyFileIsolationRedirection_Ustr(TRUE,
|
||||
ImportNameUnic,
|
||||
&LdrApiDefaultExtension,
|
||||
UpdateString,
|
||||
NULL,
|
||||
&RedirectedImportName,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
/* Check success */
|
||||
if (NT_SUCCESS(Status))
|
||||
if (LdrpCheckForLoadedDll(NULL,
|
||||
ImportNameUnic,
|
||||
TRUE,
|
||||
FALSE,
|
||||
&Entry))
|
||||
{
|
||||
/* Let Ldrp know */
|
||||
if (ShowSnaps)
|
||||
if (Entry->LoadCount != 0xFFFF)
|
||||
{
|
||||
DPRINT1("LDR: %Z got redirected to %wZ\n", &ImportNameAnsi, RedirectedImportName);
|
||||
/* Perform the required action */
|
||||
switch (Flags)
|
||||
{
|
||||
case LDRP_UPDATE_REFCOUNT:
|
||||
Entry->LoadCount++;
|
||||
break;
|
||||
case LDRP_UPDATE_DEREFCOUNT:
|
||||
Entry->LoadCount--;
|
||||
break;
|
||||
case LDRP_UPDATE_PIN:
|
||||
Entry->LoadCount = 0xFFFF;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Show snaps */
|
||||
if (ShowSnaps)
|
||||
{
|
||||
DPRINT1("LDR: Flags %lu %wZ (%lx)\n", Flags, ImportNameUnic, Entry->LoadCount);
|
||||
}
|
||||
}
|
||||
|
||||
RedirectedDll = TRUE;
|
||||
/* Recurse into this entry */
|
||||
LdrpUpdateLoadCount3(Entry, Flags, UpdateString);
|
||||
}
|
||||
}
|
||||
|
||||
if (RedirectedDll || Status == STATUS_SXS_KEY_NOT_FOUND)
|
||||
/* Go through forwarders */
|
||||
NewImportForwarder = (PIMAGE_BOUND_FORWARDER_REF)(BoundEntry + 1);
|
||||
for (i = 0; i < BoundEntry->NumberOfModuleForwarderRefs; i++)
|
||||
{
|
||||
ImportName = (LPSTR)FirstEntry + NewImportForwarder->OffsetModuleName;
|
||||
|
||||
RtlInitAnsiString(&ImportNameAnsi, ImportName);
|
||||
Status = RtlAnsiStringToUnicodeString(ImportNameUnic, &ImportNameAnsi, FALSE);
|
||||
if (NT_SUCCESS(Status))
|
||||
{
|
||||
if (LdrpCheckForLoadedDll(NULL,
|
||||
RedirectedImportName,
|
||||
ImportNameUnic,
|
||||
TRUE,
|
||||
RedirectedDll,
|
||||
FALSE,
|
||||
&Entry))
|
||||
{
|
||||
if (Entry->LoadCount != 0xFFFF)
|
||||
@@ -236,105 +336,13 @@ LdrpUpdateLoadCount3(IN PLDR_DATA_TABLE_ENTRY LdrEntry,
|
||||
/* Show snaps */
|
||||
if (ShowSnaps)
|
||||
{
|
||||
DPRINT1("LDR: Flags %lu %wZ (%lx)\n", Flags, RedirectedImportName, Entry->LoadCount);
|
||||
DPRINT1("LDR: Flags %lu %wZ (%lx)\n", Flags, ImportNameUnic, Entry->LoadCount);
|
||||
}
|
||||
}
|
||||
|
||||
/* Recurse into this entry */
|
||||
LdrpUpdateLoadCount3(Entry, Flags, UpdateString);
|
||||
}
|
||||
else if (RedirectedDll)
|
||||
{
|
||||
DPRINT1("LDR: LdrpCheckForLoadedDll failed for redirected dll %wZ\n", RedirectedImportName);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Unrecoverable SxS failure */
|
||||
DPRINT1("LDR: RtlDosApplyFileIsolationRedirection_Ustr failed with status %x for dll %wZ\n", Status, ImportNameUnic);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* Go through forwarders */
|
||||
NewImportForwarder = (PIMAGE_BOUND_FORWARDER_REF)(BoundEntry + 1);
|
||||
for (i = 0; i < BoundEntry->NumberOfModuleForwarderRefs; i++)
|
||||
{
|
||||
ImportName = (LPSTR)FirstEntry + NewImportForwarder->OffsetModuleName;
|
||||
|
||||
RtlInitAnsiString(&ImportNameAnsi, ImportName);
|
||||
Status = RtlAnsiStringToUnicodeString(ImportNameUnic, &ImportNameAnsi, FALSE);
|
||||
if (NT_SUCCESS(Status))
|
||||
{
|
||||
RedirectedDll = FALSE;
|
||||
RedirectedImportName = ImportNameUnic;
|
||||
|
||||
/* Check if the SxS Assemblies specify another file */
|
||||
Status = RtlDosApplyFileIsolationRedirection_Ustr(TRUE,
|
||||
ImportNameUnic,
|
||||
&LdrApiDefaultExtension,
|
||||
UpdateString,
|
||||
NULL,
|
||||
&RedirectedImportName,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL);
|
||||
/* Check success */
|
||||
if (NT_SUCCESS(Status))
|
||||
{
|
||||
if (ShowSnaps)
|
||||
{
|
||||
DPRINT1("LDR: %Z got redirected to %wZ\n", &ImportNameAnsi, RedirectedImportName);
|
||||
}
|
||||
/* Let Ldrp know */
|
||||
RedirectedDll = TRUE;
|
||||
}
|
||||
|
||||
if (RedirectedDll || Status == STATUS_SXS_KEY_NOT_FOUND)
|
||||
{
|
||||
if (LdrpCheckForLoadedDll(NULL,
|
||||
RedirectedImportName,
|
||||
TRUE,
|
||||
RedirectedDll,
|
||||
&Entry))
|
||||
{
|
||||
if (Entry->LoadCount != 0xFFFF)
|
||||
{
|
||||
/* Perform the required action */
|
||||
switch (Flags)
|
||||
{
|
||||
case LDRP_UPDATE_REFCOUNT:
|
||||
Entry->LoadCount++;
|
||||
break;
|
||||
case LDRP_UPDATE_DEREFCOUNT:
|
||||
Entry->LoadCount--;
|
||||
break;
|
||||
case LDRP_UPDATE_PIN:
|
||||
Entry->LoadCount = 0xFFFF;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Show snaps */
|
||||
if (ShowSnaps)
|
||||
{
|
||||
DPRINT1("LDR: Flags %lu %wZ (%lx)\n", Flags, RedirectedImportName, Entry->LoadCount);
|
||||
}
|
||||
}
|
||||
|
||||
/* Recurse into this entry */
|
||||
LdrpUpdateLoadCount3(Entry, Flags, UpdateString);
|
||||
}
|
||||
else if (RedirectedDll)
|
||||
{
|
||||
DPRINT1("LDR: LdrpCheckForLoadedDll failed with status %x for redirected dll %wZ\n", Status, RedirectedImportName);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Unrecoverable SxS failure */
|
||||
DPRINT1("LDR: RtlDosApplyFileIsolationRedirection_Ustr failed with status %x for dll %wZ\n", Status, ImportNameUnic);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
NewImportForwarder++;
|
||||
@@ -344,7 +352,7 @@ LdrpUpdateLoadCount3(IN PLDR_DATA_TABLE_ENTRY LdrEntry,
|
||||
}
|
||||
|
||||
/* We're done */
|
||||
goto done;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Check oldstyle import descriptor */
|
||||
@@ -372,87 +380,44 @@ LdrpUpdateLoadCount3(IN PLDR_DATA_TABLE_ENTRY LdrEntry,
|
||||
Status = RtlAnsiStringToUnicodeString(ImportNameUnic, &ImportNameAnsi, FALSE);
|
||||
if (NT_SUCCESS(Status))
|
||||
{
|
||||
RedirectedDll = FALSE;
|
||||
RedirectedImportName = ImportNameUnic;
|
||||
|
||||
/* Check if the SxS Assemblies specify another file */
|
||||
Status = RtlDosApplyFileIsolationRedirection_Ustr(TRUE,
|
||||
ImportNameUnic,
|
||||
&LdrApiDefaultExtension,
|
||||
UpdateString,
|
||||
NULL,
|
||||
&RedirectedImportName,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL);
|
||||
/* Check success */
|
||||
if (NT_SUCCESS(Status))
|
||||
if (LdrpCheckForLoadedDll(NULL,
|
||||
ImportNameUnic,
|
||||
TRUE,
|
||||
FALSE,
|
||||
&Entry))
|
||||
{
|
||||
if (ShowSnaps)
|
||||
if (Entry->LoadCount != 0xFFFF)
|
||||
{
|
||||
DPRINT1("LDR: %Z got redirected to %wZ\n", &ImportNameAnsi, RedirectedImportName);
|
||||
}
|
||||
|
||||
/* Let Ldrp know */
|
||||
RedirectedDll = TRUE;
|
||||
}
|
||||
|
||||
if (RedirectedDll || Status == STATUS_SXS_KEY_NOT_FOUND)
|
||||
{
|
||||
if (LdrpCheckForLoadedDll(NULL,
|
||||
RedirectedImportName,
|
||||
TRUE,
|
||||
RedirectedDll,
|
||||
&Entry))
|
||||
{
|
||||
if (Entry->LoadCount != 0xFFFF)
|
||||
/* Perform the required action */
|
||||
switch (Flags)
|
||||
{
|
||||
/* Perform the required action */
|
||||
switch (Flags)
|
||||
{
|
||||
case LDRP_UPDATE_REFCOUNT:
|
||||
Entry->LoadCount++;
|
||||
break;
|
||||
case LDRP_UPDATE_DEREFCOUNT:
|
||||
Entry->LoadCount--;
|
||||
break;
|
||||
case LDRP_UPDATE_PIN:
|
||||
Entry->LoadCount = 0xFFFF;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Show snaps */
|
||||
if (ShowSnaps)
|
||||
{
|
||||
DPRINT1("LDR: Flags %lu %wZ (%lx)\n", Flags, RedirectedImportName, Entry->LoadCount);
|
||||
}
|
||||
case LDRP_UPDATE_REFCOUNT:
|
||||
Entry->LoadCount++;
|
||||
break;
|
||||
case LDRP_UPDATE_DEREFCOUNT:
|
||||
Entry->LoadCount--;
|
||||
break;
|
||||
case LDRP_UPDATE_PIN:
|
||||
Entry->LoadCount = 0xFFFF;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Recurse */
|
||||
LdrpUpdateLoadCount3(Entry, Flags, UpdateString);
|
||||
}
|
||||
else if (RedirectedDll)
|
||||
{
|
||||
DPRINT1("LDR: LdrpCheckForLoadedDll failed for redirected dll %wZ\n", RedirectedImportName);
|
||||
/* Show snaps */
|
||||
if (ShowSnaps)
|
||||
{
|
||||
DPRINT1("LDR: Flags %lu %wZ (%lx)\n", Flags, ImportNameUnic, Entry->LoadCount);
|
||||
}
|
||||
}
|
||||
|
||||
/* Recurse */
|
||||
LdrpUpdateLoadCount3(Entry, Flags, UpdateString);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Unrecoverable SxS failure */
|
||||
DPRINT1("LDR: RtlDosApplyFileIsolationRedirection_Ustr failed for dll %wZ\n", ImportNameUnic);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* Go to the next entry */
|
||||
ImportEntry++;
|
||||
}
|
||||
}
|
||||
|
||||
done:
|
||||
/* Release the context */
|
||||
RtlDeactivateActivationContextUnsafeFast(&ActCtx);
|
||||
}
|
||||
|
||||
VOID
|
||||
@@ -700,6 +665,7 @@ LdrpResolveDllName(PWSTR DllPath,
|
||||
PWCHAR NameBuffer, p1, p2 = 0;
|
||||
ULONG Length;
|
||||
ULONG BufSize = 500;
|
||||
NTSTATUS Status;
|
||||
|
||||
/* Allocate space for full DLL name */
|
||||
FullDllName->Buffer = RtlAllocateHeap(RtlGetProcessHeap(), 0, BufSize + sizeof(UNICODE_NULL));
|
||||
@@ -714,14 +680,25 @@ LdrpResolveDllName(PWSTR DllPath,
|
||||
|
||||
if (!Length || Length > BufSize)
|
||||
{
|
||||
if (ShowSnaps)
|
||||
/* HACK: Try to find active context dll */
|
||||
Status = find_actctx_dll(DllName, FullDllName->Buffer);
|
||||
if(Status == STATUS_SUCCESS)
|
||||
{
|
||||
DPRINT1("LDR: LdrResolveDllName - Unable to find ");
|
||||
DPRINT1("%ws from %ws\n", DllName, DllPath ? DllPath : LdrpDefaultPath.Buffer);
|
||||
Length = wcslen(FullDllName->Buffer) * sizeof(WCHAR);
|
||||
DPRINT1("found %S for %S\n", FullDllName->Buffer, DllName);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* NOTE: This code should remain after removing the hack */
|
||||
if (ShowSnaps)
|
||||
{
|
||||
DPRINT1("LDR: LdrResolveDllName - Unable to find ");
|
||||
DPRINT1("%ws from %ws\n", DllName, DllPath ? DllPath : LdrpDefaultPath.Buffer);
|
||||
}
|
||||
|
||||
RtlFreeUnicodeString(FullDllName);
|
||||
return FALSE;
|
||||
RtlFreeUnicodeString(FullDllName);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/* Construct full DLL name */
|
||||
@@ -1061,7 +1038,7 @@ LdrpMapDll(IN PWSTR SearchPath OPTIONAL,
|
||||
}
|
||||
|
||||
/* Check if we have a known dll directory */
|
||||
if (LdrpKnownDllObjectDirectory && Redirect == FALSE)
|
||||
if (LdrpKnownDllObjectDirectory)
|
||||
{
|
||||
/* Check if the path is full */
|
||||
while (*p1)
|
||||
@@ -2000,10 +1977,8 @@ LdrpCheckForLoadedDll(IN PWSTR DllPath,
|
||||
|
||||
/* Look in the hash table if flag was set */
|
||||
lookinhash:
|
||||
if (Flag /* the second check is a hack */ && !RedirectedDll)
|
||||
if (Flag)
|
||||
{
|
||||
/* FIXME: if we get redirected dll it means that we also get a full path so we need to find its filename for the hash lookup */
|
||||
|
||||
/* Get hash index */
|
||||
HashIndex = LDR_GET_HASH_ENTRY(DllName->Buffer[0]);
|
||||
|
||||
@@ -2031,54 +2006,58 @@ lookinhash:
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Check if this is a redirected DLL */
|
||||
if (RedirectedDll)
|
||||
/* Check if there is a full path in this DLL */
|
||||
wc = DllName->Buffer;
|
||||
while (*wc)
|
||||
{
|
||||
/* Redirected dlls already have a full path */
|
||||
FullPath = TRUE;
|
||||
FullDllName = *DllName;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Check if there is a full path in this DLL */
|
||||
wc = DllName->Buffer;
|
||||
while (*wc)
|
||||
/* Check for a slash in the current position*/
|
||||
if ((*wc == L'\\') || (*wc == L'/'))
|
||||
{
|
||||
/* Check for a slash in the current position*/
|
||||
if ((*wc == L'\\') || (*wc == L'/'))
|
||||
/* Found the slash, so dll name contains path */
|
||||
FullPath = TRUE;
|
||||
|
||||
/* Setup full dll name string */
|
||||
FullDllName.Buffer = NameBuf;
|
||||
|
||||
/* FIXME: This is from the Windows 2000 loader, not XP/2003, we should call LdrpSearchPath */
|
||||
Length = RtlDosSearchPath_U(DllPath ? DllPath : LdrpDefaultPath.Buffer,
|
||||
DllName->Buffer,
|
||||
NULL,
|
||||
sizeof(NameBuf) - sizeof(UNICODE_NULL),
|
||||
FullDllName.Buffer,
|
||||
NULL);
|
||||
|
||||
/* Check if that was successful */
|
||||
if (!(Length) || (Length > (sizeof(NameBuf) - sizeof(UNICODE_NULL))))
|
||||
{
|
||||
/* Found the slash, so dll name contains path */
|
||||
FullPath = TRUE;
|
||||
|
||||
/* Setup full dll name string */
|
||||
FullDllName.Buffer = NameBuf;
|
||||
|
||||
/* FIXME: This is from the Windows 2000 loader, not XP/2003, we should call LdrpSearchPath */
|
||||
Length = RtlDosSearchPath_U(DllPath ? DllPath : LdrpDefaultPath.Buffer,
|
||||
DllName->Buffer,
|
||||
NULL,
|
||||
sizeof(NameBuf) - sizeof(UNICODE_NULL),
|
||||
FullDllName.Buffer,
|
||||
NULL);
|
||||
|
||||
/* Check if that was successful */
|
||||
if (!(Length) || (Length > (sizeof(NameBuf) - sizeof(UNICODE_NULL))))
|
||||
/* HACK: Try to find active context dll */
|
||||
Status = find_actctx_dll(DllName->Buffer, FullDllName.Buffer);
|
||||
if(Status == STATUS_SUCCESS)
|
||||
{
|
||||
if (ShowSnaps)
|
||||
{
|
||||
DPRINT1("LDR: LdrpCheckForLoadedDll - Unable To Locate %wZ: 0x%08x\n",
|
||||
&DllName, Length);
|
||||
}
|
||||
Length = wcslen(FullDllName.Buffer) * sizeof(WCHAR);
|
||||
DPRINT1("found %S for %S\n", FullDllName.Buffer, DllName->Buffer);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
if (ShowSnaps)
|
||||
{
|
||||
DPRINT1("LDR: LdrpCheckForLoadedDll - Unable To Locate %wZ: 0x%08x\n",
|
||||
&DllName, Length);
|
||||
}
|
||||
|
||||
/* Full dll name is found */
|
||||
FullDllName.Length = Length;
|
||||
FullDllName.MaximumLength = FullDllName.Length + sizeof(UNICODE_NULL);
|
||||
break;
|
||||
/* Return failure */
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
wc++;
|
||||
/* Full dll name is found */
|
||||
FullDllName.Length = Length;
|
||||
FullDllName.MaximumLength = FullDllName.Length + sizeof(UNICODE_NULL);
|
||||
break;
|
||||
}
|
||||
|
||||
wc++;
|
||||
}
|
||||
|
||||
/* Go check the hash table */
|
||||
|
@@ -642,133 +642,6 @@ RtlPcToFileHeader(IN PVOID PcValue,
|
||||
return ImageBase;
|
||||
}
|
||||
|
||||
NTSTATUS get_buffer(LPWSTR *buffer, SIZE_T needed, PUNICODE_STRING CallerBuffer, BOOLEAN bAllocateBuffer)
|
||||
{
|
||||
WCHAR *p;
|
||||
|
||||
if (CallerBuffer && CallerBuffer->MaximumLength > needed)
|
||||
{
|
||||
p = CallerBuffer->Buffer;
|
||||
CallerBuffer->Length = needed - sizeof(WCHAR);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!bAllocateBuffer)
|
||||
return STATUS_BUFFER_TOO_SMALL;
|
||||
|
||||
if (CallerBuffer)
|
||||
CallerBuffer->Buffer[0] = 0;
|
||||
|
||||
p = RtlAllocateHeap(RtlGetProcessHeap(), 0, needed );
|
||||
if (!p)
|
||||
return STATUS_NO_MEMORY;
|
||||
}
|
||||
*buffer = p;
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/* NOTE: Remove this one once our actctx support becomes better */
|
||||
NTSTATUS find_actctx_dll( PUNICODE_STRING pnameW, LPWSTR *fullname, PUNICODE_STRING CallerBuffer, BOOLEAN bAllocateBuffer)
|
||||
{
|
||||
static const WCHAR winsxsW[] = {'\\','w','i','n','s','x','s','\\'};
|
||||
static const WCHAR dotManifestW[] = {'.','m','a','n','i','f','e','s','t',0};
|
||||
|
||||
ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION *info;
|
||||
ACTCTX_SECTION_KEYED_DATA data;
|
||||
NTSTATUS status;
|
||||
SIZE_T needed, size = 1024;
|
||||
WCHAR *p;
|
||||
|
||||
data.cbSize = sizeof(data);
|
||||
status = RtlFindActivationContextSectionString( FIND_ACTCTX_SECTION_KEY_RETURN_HACTCTX, NULL,
|
||||
ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION,
|
||||
pnameW, &data );
|
||||
if (status != STATUS_SUCCESS)
|
||||
{
|
||||
//DPRINT1("RtlFindActivationContextSectionString returned 0x%x for %wZ\n", status, pnameW);
|
||||
return status;
|
||||
}
|
||||
|
||||
for (;;)
|
||||
{
|
||||
if (!(info = RtlAllocateHeap( RtlGetProcessHeap(), 0, size )))
|
||||
{
|
||||
status = STATUS_NO_MEMORY;
|
||||
goto done;
|
||||
}
|
||||
status = RtlQueryInformationActivationContext( 0, data.hActCtx, &data.ulAssemblyRosterIndex,
|
||||
AssemblyDetailedInformationInActivationContext,
|
||||
info, size, &needed );
|
||||
if (status == STATUS_SUCCESS) break;
|
||||
if (status != STATUS_BUFFER_TOO_SMALL) goto done;
|
||||
RtlFreeHeap( RtlGetProcessHeap(), 0, info );
|
||||
size = needed;
|
||||
}
|
||||
|
||||
DPRINT("manifestpath === %S\n", info->lpAssemblyManifestPath);
|
||||
DPRINT("DirectoryName === %S\n", info->lpAssemblyDirectoryName);
|
||||
if (!info->lpAssemblyManifestPath /*|| !info->lpAssemblyDirectoryName*/)
|
||||
{
|
||||
status = STATUS_SXS_KEY_NOT_FOUND;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if ((p = wcsrchr( info->lpAssemblyManifestPath, '\\' )))
|
||||
{
|
||||
DWORD dirlen = info->ulAssemblyDirectoryNameLength / sizeof(WCHAR);
|
||||
|
||||
p++;
|
||||
if (!info->lpAssemblyDirectoryName || _wcsnicmp( p, info->lpAssemblyDirectoryName, dirlen ) || wcsicmp( p + dirlen, dotManifestW ))
|
||||
{
|
||||
/* manifest name does not match directory name, so it's not a global
|
||||
* windows/winsxs manifest; use the manifest directory name instead */
|
||||
dirlen = p - info->lpAssemblyManifestPath;
|
||||
needed = (dirlen + 1) * sizeof(WCHAR) + pnameW->Length;
|
||||
|
||||
status = get_buffer(fullname, needed, CallerBuffer, bAllocateBuffer);
|
||||
if (!NT_SUCCESS(status))
|
||||
goto done;
|
||||
|
||||
p = *fullname;
|
||||
|
||||
memcpy( p, info->lpAssemblyManifestPath, dirlen * sizeof(WCHAR) );
|
||||
p += dirlen;
|
||||
memcpy( p, pnameW->Buffer, pnameW->Length);
|
||||
p += (pnameW->Length / sizeof(WCHAR));
|
||||
*p = L'\0';
|
||||
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
||||
needed = (wcslen(SharedUserData->NtSystemRoot) * sizeof(WCHAR) +
|
||||
sizeof(winsxsW) + info->ulAssemblyDirectoryNameLength + pnameW->Length + 2*sizeof(WCHAR));
|
||||
|
||||
status = get_buffer(fullname, needed, CallerBuffer, bAllocateBuffer);
|
||||
if (!NT_SUCCESS(status))
|
||||
goto done;
|
||||
|
||||
p = *fullname;
|
||||
|
||||
wcscpy( p, SharedUserData->NtSystemRoot );
|
||||
p += wcslen(p);
|
||||
memcpy( p, winsxsW, sizeof(winsxsW) );
|
||||
p += sizeof(winsxsW) / sizeof(WCHAR);
|
||||
memcpy( p, info->lpAssemblyDirectoryName, info->ulAssemblyDirectoryNameLength );
|
||||
p += info->ulAssemblyDirectoryNameLength / sizeof(WCHAR);
|
||||
*p++ = L'\\';
|
||||
memcpy( p, pnameW->Buffer, pnameW->Length);
|
||||
p += (pnameW->Length / sizeof(WCHAR));
|
||||
*p = L'\0';
|
||||
|
||||
done:
|
||||
RtlFreeHeap( RtlGetProcessHeap(), 0, info );
|
||||
RtlReleaseActivationContext( data.hActCtx );
|
||||
DPRINT("%S\n", fullname);
|
||||
return status;
|
||||
}
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
@@ -785,101 +658,7 @@ RtlDosApplyFileIsolationRedirection_Ustr(IN ULONG Flags,
|
||||
IN PSIZE_T FileNameSize,
|
||||
IN PSIZE_T RequiredLength)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
LPWSTR fullname;
|
||||
WCHAR buffer [MAX_PATH];
|
||||
UNICODE_STRING localStr, localStr2, *pstrParam;
|
||||
WCHAR *p;
|
||||
BOOLEAN GotExtension;
|
||||
WCHAR c;
|
||||
|
||||
/* Check for invalid parameters */
|
||||
if (!OriginalName)
|
||||
{
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if (!DynamicString && !StaticString)
|
||||
{
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if ((DynamicString) && (StaticString) && !(NewName))
|
||||
{
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if (!OriginalName->Buffer || OriginalName->Length == 0)
|
||||
{
|
||||
return STATUS_SXS_KEY_NOT_FOUND;
|
||||
}
|
||||
|
||||
if (StaticString && (OriginalName == StaticString || OriginalName->Buffer == StaticString->Buffer))
|
||||
{
|
||||
return STATUS_SXS_KEY_NOT_FOUND;
|
||||
}
|
||||
|
||||
pstrParam = OriginalName;
|
||||
|
||||
/* Get the file name with an extension */
|
||||
p = OriginalName->Buffer + OriginalName->Length / sizeof(WCHAR) - 1;
|
||||
GotExtension = FALSE;
|
||||
while (p >= OriginalName->Buffer)
|
||||
{
|
||||
c = *p--;
|
||||
if (c == L'.')
|
||||
{
|
||||
GotExtension = TRUE;
|
||||
}
|
||||
else if (c == L'\\')
|
||||
{
|
||||
localStr.Buffer = p + 2;
|
||||
localStr.Length = OriginalName->Length - ((ULONG_PTR)localStr.Buffer - (ULONG_PTR)OriginalName->Buffer);
|
||||
localStr.MaximumLength = OriginalName->MaximumLength - ((ULONG_PTR)localStr.Buffer - (ULONG_PTR)OriginalName->Buffer);
|
||||
pstrParam = &localStr;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!GotExtension)
|
||||
{
|
||||
if (!Extension)
|
||||
{
|
||||
return STATUS_SXS_KEY_NOT_FOUND;
|
||||
}
|
||||
|
||||
if (pstrParam->Length + Extension->Length > sizeof(buffer))
|
||||
{
|
||||
//FIXME!
|
||||
return STATUS_NO_MEMORY;
|
||||
}
|
||||
|
||||
RtlInitEmptyUnicodeString(&localStr2, buffer, sizeof(buffer));
|
||||
RtlAppendUnicodeStringToString(&localStr2, pstrParam);
|
||||
RtlAppendUnicodeStringToString(&localStr2, Extension);
|
||||
pstrParam = &localStr2;
|
||||
}
|
||||
|
||||
/* Use wine's function as long as we use wine's sxs implementation in ntdll */
|
||||
Status = find_actctx_dll(pstrParam, &fullname, StaticString, DynamicString != NULL);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
return Status;
|
||||
}
|
||||
|
||||
DPRINT("Redirecting %wZ to %S\n", OriginalName, fullname);
|
||||
|
||||
if (!StaticString || StaticString->Buffer != fullname)
|
||||
{
|
||||
RtlInitUnicodeString(DynamicString, fullname);
|
||||
*NewName = DynamicString;
|
||||
}
|
||||
else
|
||||
{
|
||||
*NewName = StaticString;
|
||||
}
|
||||
|
||||
return Status;
|
||||
return STATUS_SXS_KEY_NOT_FOUND;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@@ -167,7 +167,7 @@
|
||||
403 stdcall -ordinal EnumMRUListW(long long ptr long)
|
||||
404 stdcall -noname CreateMRUListLazyW(ptr long long long)
|
||||
410 stdcall -ordinal SetWindowSubclass(long ptr long long)
|
||||
411 stdcall -noname GetWindowSubclass(long ptr long ptr)
|
||||
411 stdcall -ordinal GetWindowSubclass(long ptr long ptr)
|
||||
412 stdcall -ordinal RemoveWindowSubclass(long ptr long)
|
||||
413 stdcall -ordinal DefSubclassProc(long long long long)
|
||||
414 stdcall -noname MirrorIcon(ptr ptr)
|
||||
|
@@ -397,6 +397,7 @@ DWORD getNumRoutes(void)
|
||||
|
||||
TRACE("numRoutes: %d\n", (int)numRoutes);
|
||||
|
||||
tdiFreeThingSet( entitySet );
|
||||
closeTcpFile( tcpFile );
|
||||
|
||||
return numRoutes;
|
||||
|
@@ -1067,6 +1067,7 @@ static BOOL do_file_copyW( LPCWSTR source, LPCWSTR target, DWORD style,
|
||||
OFSTRUCT OfStruct;
|
||||
WCHAR TempPath[MAX_PATH];
|
||||
WCHAR TempFile[MAX_PATH];
|
||||
LONG lRes;
|
||||
#endif
|
||||
|
||||
TRACE("copy %s to %s style 0x%x\n",debugstr_w(source),debugstr_w(target),style);
|
||||
@@ -1078,11 +1079,6 @@ static BOOL do_file_copyW( LPCWSTR source, LPCWSTR target, DWORD style,
|
||||
ERR("GetTempPathW error\n");
|
||||
return FALSE;
|
||||
}
|
||||
if (!GetTempFileNameW(TempPath, L"", 0, TempFile))
|
||||
{
|
||||
ERR("GetTempFileNameW(%s) error\n", debugstr_w(TempPath));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Try to open the source file */
|
||||
hSource = LZOpenFileW((LPWSTR)source, &OfStruct, OF_READ);
|
||||
@@ -1092,25 +1088,45 @@ static BOOL do_file_copyW( LPCWSTR source, LPCWSTR target, DWORD style,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!GetTempFileNameW(TempPath, L"", 0, TempFile))
|
||||
{
|
||||
ERR("GetTempFileNameW(%s) error\n", debugstr_w(TempPath));
|
||||
|
||||
/* Close the source handle */
|
||||
LZClose(hSource);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Extract the compressed file to a temp location */
|
||||
hTemp = LZOpenFileW(TempFile, &OfStruct, OF_CREATE);
|
||||
if (hTemp < 0)
|
||||
{
|
||||
DWORD dwLastError = GetLastError();
|
||||
|
||||
ERR("LZOpenFileW(2) error %d %s\n", (int)hTemp, debugstr_w(TempFile));
|
||||
|
||||
/* Close the source handle */
|
||||
LZClose(hSource);
|
||||
|
||||
/* Restore error condition triggered by LZOpenFileW */
|
||||
SetLastError(dwLastError);
|
||||
/* Delete temp file if an error is signaled */
|
||||
DeleteFileW(TempFile);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
LZCopy(hSource, hTemp);
|
||||
lRes = LZCopy(hSource, hTemp);
|
||||
|
||||
LZClose(hSource);
|
||||
LZClose(hTemp);
|
||||
|
||||
if (lRes < 0)
|
||||
{
|
||||
ERR("LZCopy error %d (%s, %s)\n", (int)lRes, debugstr_w(source), debugstr_w(TempFile));
|
||||
|
||||
/* Delete temp file if copy was not successful */
|
||||
DeleteFileW(TempFile);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* before copy processing */
|
||||
|
@@ -359,6 +359,9 @@ CreateTreeImageList(VOID)
|
||||
static ADVANCED_ENTRY *
|
||||
Advanced_GetItem(DWORD dwID)
|
||||
{
|
||||
if (dwID == DWORD(-1))
|
||||
return NULL;
|
||||
|
||||
for (INT i = 0; i < s_AdvancedCount; ++i)
|
||||
{
|
||||
ADVANCED_ENTRY *pEntry = &s_Advanced[i];
|
||||
@@ -701,24 +704,52 @@ Advanced_Compare(const void *x, const void *y)
|
||||
{
|
||||
ADVANCED_ENTRY *pEntry1 = (ADVANCED_ENTRY *)x;
|
||||
ADVANCED_ENTRY *pEntry2 = (ADVANCED_ENTRY *)y;
|
||||
|
||||
DWORD dwParentID1 = pEntry1->dwParentID;
|
||||
DWORD dwParentID2 = pEntry2->dwParentID;
|
||||
while (dwParentID1 != dwParentID2)
|
||||
|
||||
if (dwParentID1 == dwParentID2)
|
||||
return lstrcmpi(pEntry1->szText, pEntry2->szText);
|
||||
|
||||
DWORD i, m, n;
|
||||
const UINT MAX_DEPTH = 32;
|
||||
ADVANCED_ENTRY *pArray1[MAX_DEPTH];
|
||||
ADVANCED_ENTRY *pArray2[MAX_DEPTH];
|
||||
|
||||
// Make ancestor lists
|
||||
for (i = m = n = 0; i < MAX_DEPTH; ++i)
|
||||
{
|
||||
ADVANCED_ENTRY *pParent1 = Advanced_GetItem(dwParentID1);
|
||||
ADVANCED_ENTRY *pParent2 = Advanced_GetItem(dwParentID2);
|
||||
if (!pParent1 && !pParent2)
|
||||
break;
|
||||
if (!pParent1 && pParent2)
|
||||
return -1;
|
||||
if (pParent1 && !pParent2)
|
||||
return 1;
|
||||
INT nCompare = lstrcmpi(pParent1->szText, pParent2->szText);
|
||||
if (nCompare)
|
||||
return nCompare;
|
||||
dwParentID1 = pParent1->dwParentID;
|
||||
dwParentID2 = pParent2->dwParentID;
|
||||
|
||||
if (pParent1)
|
||||
{
|
||||
pArray1[m++] = pParent1;
|
||||
dwParentID1 = pParent1->dwParentID;
|
||||
}
|
||||
if (pParent2)
|
||||
{
|
||||
pArray2[n++] = pParent2;
|
||||
dwParentID2 = pParent2->dwParentID;
|
||||
}
|
||||
}
|
||||
|
||||
UINT k = min(m, n);
|
||||
for (i = 0; i < k; ++i)
|
||||
{
|
||||
INT nCompare = lstrcmpi(pArray1[m - i - 1]->szText, pArray2[n - i - 1]->szText);
|
||||
if (nCompare < 0)
|
||||
return -1;
|
||||
if (nCompare > 0)
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (m < n)
|
||||
return -1;
|
||||
if (m > n)
|
||||
return 1;
|
||||
return lstrcmpi(pEntry1->szText, pEntry2->szText);
|
||||
}
|
||||
|
||||
|
@@ -453,9 +453,6 @@ INT SIC_GetIconIndex (LPCWSTR sSourceFile, INT dwSourceIndex, DWORD dwFlags )
|
||||
sice.dwSourceIndex = dwSourceIndex;
|
||||
sice.dwFlags = dwFlags;
|
||||
|
||||
if (!sic_hdpa)
|
||||
SIC_Initialize();
|
||||
|
||||
EnterCriticalSection(&SHELL32_SicCS);
|
||||
|
||||
if (NULL != DPA_GetPtr (sic_hdpa, 0))
|
||||
@@ -690,9 +687,6 @@ static int SIC_LoadOverlayIcon(int icon_idx)
|
||||
RegCloseKey(hKeyShellIcons);
|
||||
}
|
||||
|
||||
if (!sic_hdpa)
|
||||
SIC_Initialize();
|
||||
|
||||
return SIC_LoadIcon(iconPath, iconIdx, 0);
|
||||
}
|
||||
|
||||
@@ -704,17 +698,13 @@ static int SIC_LoadOverlayIcon(int icon_idx)
|
||||
*
|
||||
*/
|
||||
BOOL WINAPI Shell_GetImageLists(HIMAGELIST * lpBigList, HIMAGELIST * lpSmallList)
|
||||
{
|
||||
TRACE("(%p,%p)\n",lpBigList,lpSmallList);
|
||||
|
||||
if (!sic_hdpa)
|
||||
SIC_Initialize();
|
||||
|
||||
{ TRACE("(%p,%p)\n",lpBigList,lpSmallList);
|
||||
if (lpBigList)
|
||||
*lpBigList = ShellBigIconList;
|
||||
|
||||
{ *lpBigList = ShellBigIconList;
|
||||
}
|
||||
if (lpSmallList)
|
||||
*lpSmallList = ShellSmallIconList;
|
||||
{ *lpSmallList = ShellSmallIconList;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -745,9 +735,6 @@ BOOL PidlToSicIndex (
|
||||
|
||||
TRACE("sf=%p pidl=%p %s\n", sh, pidl, bBigIcon?"Big":"Small");
|
||||
|
||||
if (!sic_hdpa)
|
||||
SIC_Initialize();
|
||||
|
||||
if (SUCCEEDED (sh->GetUIObjectOf(0, 1, &pidl, IID_NULL_PPV_ARG(IExtractIconW, &ei))))
|
||||
{
|
||||
if (SUCCEEDED(ei->GetIconLocation(uFlags &~ GIL_FORSHORTCUT, szIconFile, MAX_PATH, &iSourceIndex, &dwFlags)))
|
||||
|
@@ -341,6 +341,7 @@ STDAPI_(BOOL) DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID fImpLoad)
|
||||
InitCommonControlsEx(&InitCtrls);
|
||||
|
||||
/* Bad idea, initialization in DllMain! */
|
||||
SIC_Initialize();
|
||||
InitChangeNotifications();
|
||||
}
|
||||
else if (dwReason == DLL_PROCESS_DETACH)
|
||||
|
@@ -59,7 +59,6 @@ typedef struct {
|
||||
OVERLAPPED overlapped; /* Overlapped structure */
|
||||
BYTE *buffer; /* Async buffer to fill */
|
||||
BYTE *backBuffer; /* Back buffer to swap buffer into */
|
||||
struct _NOTIFICATIONLIST * pParent;
|
||||
} SHChangeNotifyEntryInternal, *LPNOTIFYREGISTER;
|
||||
#else
|
||||
typedef SHChangeNotifyEntry *LPNOTIFYREGISTER;
|
||||
@@ -76,9 +75,6 @@ typedef struct _NOTIFICATIONLIST
|
||||
LONG wEventMask; /* subscribed events */
|
||||
DWORD dwFlags; /* client flags */
|
||||
ULONG id;
|
||||
#ifdef __REACTOS__
|
||||
volatile LONG wQueuedCount;
|
||||
#endif
|
||||
} NOTIFICATIONLIST, *LPNOTIFICATIONLIST;
|
||||
|
||||
#ifdef __REACTOS__
|
||||
@@ -161,22 +157,9 @@ static const char * NodeName(const NOTIFICATIONLIST *item)
|
||||
static void DeleteNode(LPNOTIFICATIONLIST item)
|
||||
{
|
||||
UINT i;
|
||||
#ifdef __REACTOS__
|
||||
LONG queued;
|
||||
#endif
|
||||
|
||||
TRACE("item=%p\n", item);
|
||||
|
||||
#ifdef __REACTOS__
|
||||
queued = InterlockedCompareExchange(&item->wQueuedCount, 0, 0);
|
||||
if (queued != 0)
|
||||
{
|
||||
ERR("Not freeing, still %d queued events\n", queued);
|
||||
return;
|
||||
}
|
||||
TRACE("Freeing for real! %p (%d) \n", item, item->cidl);
|
||||
#endif
|
||||
|
||||
/* remove item from list */
|
||||
list_remove( &item->entry );
|
||||
|
||||
@@ -253,7 +236,6 @@ SHChangeNotifyRegister(
|
||||
item->cidl = cItems;
|
||||
#ifdef __REACTOS__
|
||||
item->apidl = SHAlloc(sizeof(SHChangeNotifyEntryInternal) * cItems);
|
||||
item->wQueuedCount = 0;
|
||||
#else
|
||||
item->apidl = SHAlloc(sizeof(SHChangeNotifyEntry) * cItems);
|
||||
#endif
|
||||
@@ -268,13 +250,11 @@ SHChangeNotifyRegister(
|
||||
item->apidl[i].buffer = SHAlloc(BUFFER_SIZE);
|
||||
item->apidl[i].backBuffer = SHAlloc(BUFFER_SIZE);
|
||||
item->apidl[i].overlapped.hEvent = &item->apidl[i];
|
||||
item->apidl[i].pParent = item;
|
||||
|
||||
if (fSources & SHCNRF_InterruptLevel)
|
||||
{
|
||||
if (_OpenDirectory( &item->apidl[i] ))
|
||||
{
|
||||
InterlockedIncrement(&item->wQueuedCount);
|
||||
QueueUserAPC( _AddDirectoryProc, m_hThread, (ULONG_PTR) &item->apidl[i] );
|
||||
}
|
||||
}
|
||||
@@ -738,8 +718,18 @@ _NotificationCompletion(DWORD dwErrorCode, // completion code
|
||||
if (dwErrorCode == ERROR_INVALID_FUNCTION)
|
||||
{
|
||||
WARN("Directory watching not supported\n");
|
||||
goto quit;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Also, if the notify operation was canceled (like, user moved to another
|
||||
* directory), then, don't requeue notification
|
||||
*/
|
||||
if (dwErrorCode == ERROR_OPERATION_ABORTED)
|
||||
{
|
||||
TRACE("Notification aborted\n");
|
||||
return;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* This likely means overflow, so force whole directory refresh. */
|
||||
@@ -755,11 +745,7 @@ _NotificationCompletion(DWORD dwErrorCode, // completion code
|
||||
item->pidl,
|
||||
NULL);
|
||||
|
||||
#ifdef __REACTOS__
|
||||
goto quit;
|
||||
#else
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -776,21 +762,12 @@ _NotificationCompletion(DWORD dwErrorCode, // completion code
|
||||
_BeginRead(item);
|
||||
|
||||
_ProcessNotification(item);
|
||||
|
||||
#ifdef __REACTOS__
|
||||
quit:
|
||||
InterlockedDecrement(&item->pParent->wQueuedCount);
|
||||
DeleteNode(item->pParent);
|
||||
#endif
|
||||
}
|
||||
|
||||
static VOID _BeginRead(LPNOTIFYREGISTER item )
|
||||
{
|
||||
TRACE("_BeginRead %p \n", item->hDirectory);
|
||||
|
||||
#ifdef __REACTOS__
|
||||
InterlockedIncrement(&item->pParent->wQueuedCount);
|
||||
#endif
|
||||
/* This call needs to be reissued after every APC. */
|
||||
if (!ReadDirectoryChangesW(item->hDirectory, // handle to directory
|
||||
item->buffer, // read results buffer
|
||||
@@ -800,22 +777,13 @@ static VOID _BeginRead(LPNOTIFYREGISTER item )
|
||||
NULL, // bytes returned
|
||||
&item->overlapped, // overlapped buffer
|
||||
_NotificationCompletion)) // completion routine
|
||||
#ifdef __REACTOS__
|
||||
{
|
||||
#endif
|
||||
ERR("ReadDirectoryChangesW failed. (%p, %p, %p, %p, %p, %p) Code: %u \n",
|
||||
ERR("ReadDirectoryChangesW failed. (%p, %p, %p, %p, %p) Code: %u \n",
|
||||
item,
|
||||
item->pParent,
|
||||
item->hDirectory,
|
||||
item->buffer,
|
||||
&item->overlapped,
|
||||
_NotificationCompletion,
|
||||
GetLastError());
|
||||
#ifdef __REACTOS__
|
||||
InterlockedDecrement(&item->pParent->wQueuedCount);
|
||||
DeleteNode(item->pParent);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
DWORD _MapAction(DWORD dwAction, BOOL isDir)
|
||||
|
@@ -1296,8 +1296,8 @@ BOOL WINAPI WriteCabinetState(CABINETSTATE *cs)
|
||||
*
|
||||
*/
|
||||
BOOL WINAPI FileIconInit(BOOL bFullInit)
|
||||
{
|
||||
return SIC_Initialize();
|
||||
{ FIXME("(%s)\n", bFullInit ? "true" : "false");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
|
@@ -1,13 +1,18 @@
|
||||
#include <windef.h>
|
||||
#include <winuser.h>
|
||||
|
||||
#include "resource.h"
|
||||
|
||||
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||
|
||||
#define REACTOS_VERSION_DLL
|
||||
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Picture and Fax Viewer"
|
||||
#define REACTOS_STR_INTERNAL_NAME "shimgvw"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "shimgvw.dll"
|
||||
#include <reactos/version.rc>
|
||||
|
||||
#include <reactos/manifest_hosted.rc>
|
||||
|
||||
IDI_APPICON ICON "res/main.ico"
|
||||
IDI_BMP_ICON ICON "res/bmp.ico"
|
||||
IDI_PNG_ICON ICON "res/png.ico"
|
||||
|
@@ -830,19 +830,23 @@ static inline WORD set_cache_glyph(SCRIPT_CACHE *psc, WCHAR c, WORD glyph)
|
||||
return ((*block)[(c % 0x10000) & GLYPH_BLOCK_MASK] = glyph);
|
||||
}
|
||||
|
||||
static inline BOOL get_cache_glyph_widths(SCRIPT_CACHE *psc, WORD glyph, ABC *abc)
|
||||
static inline BOOL get_cache_glyph_widths(SCRIPT_CACHE *psc, WORD glyph, ABC *abc, BOOL no_glyph_index)
|
||||
{
|
||||
static const ABC nil;
|
||||
ABC *block = ((ScriptCache *)*psc)->widths[glyph >> GLYPH_BLOCK_SHIFT];
|
||||
ABC *block = no_glyph_index ?
|
||||
((ScriptCache *)*psc)->widths[glyph >> GLYPH_BLOCK_SHIFT] :
|
||||
((ScriptCache *)*psc)->glyph_widths[glyph >> GLYPH_BLOCK_SHIFT];
|
||||
|
||||
if (!block || !memcmp(&block[glyph & GLYPH_BLOCK_MASK], &nil, sizeof(ABC))) return FALSE;
|
||||
memcpy(abc, &block[glyph & GLYPH_BLOCK_MASK], sizeof(ABC));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static inline BOOL set_cache_glyph_widths(SCRIPT_CACHE *psc, WORD glyph, ABC *abc)
|
||||
static inline BOOL set_cache_glyph_widths(SCRIPT_CACHE *psc, WORD glyph, ABC *abc, BOOL no_glyph_index)
|
||||
{
|
||||
ABC **block = &((ScriptCache *)*psc)->widths[glyph >> GLYPH_BLOCK_SHIFT];
|
||||
ABC **block = no_glyph_index ?
|
||||
&((ScriptCache *)*psc)->widths[glyph >> GLYPH_BLOCK_SHIFT] :
|
||||
&((ScriptCache *)*psc)->glyph_widths[glyph >> GLYPH_BLOCK_SHIFT];
|
||||
|
||||
if (!*block && !(*block = heap_alloc_zero(sizeof(ABC) * GLYPH_BLOCK_SIZE))) return FALSE;
|
||||
memcpy(&(*block)[glyph & GLYPH_BLOCK_MASK], abc, sizeof(ABC));
|
||||
@@ -3413,7 +3417,7 @@ HRESULT WINAPI ScriptPlaceOpenType( HDC hdc, SCRIPT_CACHE *psc, SCRIPT_ANALYSIS
|
||||
{
|
||||
abc.abcA = abc.abcB = abc.abcC = 0;
|
||||
}
|
||||
else if (!get_cache_glyph_widths(psc, pwGlyphs[i], &abc))
|
||||
else if (!get_cache_glyph_widths(psc, pwGlyphs[i], &abc, psa->fNoGlyphIndex))
|
||||
{
|
||||
BOOL ret;
|
||||
if (!hdc) return E_PENDING;
|
||||
@@ -3436,7 +3440,7 @@ HRESULT WINAPI ScriptPlaceOpenType( HDC hdc, SCRIPT_CACHE *psc, SCRIPT_ANALYSIS
|
||||
abc.abcB = width;
|
||||
abc.abcA = abc.abcC = 0;
|
||||
}
|
||||
set_cache_glyph_widths(psc, pwGlyphs[i], &abc);
|
||||
set_cache_glyph_widths(psc, pwGlyphs[i], &abc, psa->fNoGlyphIndex);
|
||||
}
|
||||
if (pABC)
|
||||
{
|
||||
@@ -3698,7 +3702,7 @@ HRESULT WINAPI ScriptGetGlyphABCWidth(HDC hdc, SCRIPT_CACHE *psc, WORD glyph, AB
|
||||
if (!abc) return E_INVALIDARG;
|
||||
if ((hr = init_script_cache(hdc, psc)) != S_OK) return hr;
|
||||
|
||||
if (!get_cache_glyph_widths(psc, glyph, abc))
|
||||
if (!get_cache_glyph_widths(psc, glyph, abc, FALSE))
|
||||
{
|
||||
if (!hdc) return E_PENDING;
|
||||
if ((get_cache_pitch_family(psc) & TMPF_TRUETYPE))
|
||||
@@ -3712,7 +3716,7 @@ HRESULT WINAPI ScriptGetGlyphABCWidth(HDC hdc, SCRIPT_CACHE *psc, WORD glyph, AB
|
||||
abc->abcB = width;
|
||||
abc->abcA = abc->abcC = 0;
|
||||
}
|
||||
set_cache_glyph_widths(psc, glyph, abc);
|
||||
set_cache_glyph_widths(psc, glyph, abc, FALSE);
|
||||
}
|
||||
return S_OK;
|
||||
}
|
||||
|
@@ -204,6 +204,7 @@ typedef struct {
|
||||
BOOL sfnt;
|
||||
CacheGlyphPage *page[NUM_PAGES];
|
||||
ABC *widths[GLYPH_MAX / GLYPH_BLOCK_SIZE];
|
||||
ABC *glyph_widths[GLYPH_MAX / GLYPH_BLOCK_SIZE];
|
||||
void *GSUB_Table;
|
||||
void *GDEF_Table;
|
||||
void *CMAP_Table;
|
||||
|
@@ -501,7 +501,7 @@ CdRaiseStatusEx (
|
||||
DbgPrint( "CDFS: Contact CDFS.SYS component owner for triage.\n");
|
||||
DbgPrint( "CDFS: 'eb %p 0;eb %p 0' to disable this alert.\n", &CdTestRaisedStatus, &CdBreakOnAnyRaise);
|
||||
|
||||
NT_ASSERT(FALSE);
|
||||
/* NT_ASSERT(FALSE); silenced to avoid CORE-14067 */
|
||||
}
|
||||
|
||||
if (NormalizeStatus) {
|
||||
|
@@ -51,7 +51,7 @@ NTSTATUS WarmSocketForBind( PAFD_FCB FCB, ULONG ShareType ) {
|
||||
Status = STATUS_NO_MEMORY;
|
||||
}
|
||||
|
||||
if (NT_SUCCESS(Status))
|
||||
if (NT_SUCCESS(Status) && FCB->Recv.Content < FCB->Recv.Size)
|
||||
{
|
||||
Status = TdiReceiveDatagram(&FCB->ReceiveIrp.InFlightRequest,
|
||||
FCB->AddressFile.Object,
|
||||
|
@@ -681,7 +681,7 @@ PacketSocketRecvComplete(
|
||||
} else
|
||||
FCB->PollState &= ~AFD_EVENT_RECEIVE;
|
||||
|
||||
if( NT_SUCCESS(Irp->IoStatus.Status) ) {
|
||||
if( NT_SUCCESS(Irp->IoStatus.Status) && FCB->Recv.Content < FCB->Recv.Size ) {
|
||||
/* Now relaunch the datagram request */
|
||||
Status = TdiReceiveDatagram
|
||||
( &FCB->ReceiveIrp.InFlightRequest,
|
||||
|
@@ -165,6 +165,7 @@ CcScheduleReadAhead (
|
||||
LARGE_INTEGER NewOffset;
|
||||
PROS_SHARED_CACHE_MAP SharedCacheMap;
|
||||
PPRIVATE_CACHE_MAP PrivateCacheMap;
|
||||
static ULONG Warn;
|
||||
|
||||
SharedCacheMap = FileObject->SectionObjectPointer->SharedCacheMap;
|
||||
PrivateCacheMap = FileObject->PrivateCacheMap;
|
||||
@@ -214,7 +215,7 @@ CcScheduleReadAhead (
|
||||
{
|
||||
/* FIXME: handle the other cases */
|
||||
KeReleaseSpinLock(&PrivateCacheMap->ReadAheadSpinLock, OldIrql);
|
||||
UNIMPLEMENTED;
|
||||
if (!Warn++) UNIMPLEMENTED;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@@ -370,8 +370,11 @@ CcCopyData (
|
||||
/* If that was a successful sync read operation, let's handle read ahead */
|
||||
if (Operation == CcOperationRead && Length == 0 && Wait)
|
||||
{
|
||||
/* If file isn't random access, schedule next read */
|
||||
if (!BooleanFlagOn(FileObject->Flags, FO_RANDOM_ACCESS))
|
||||
/* If file isn't random access and next read may get us cross VACB boundary,
|
||||
* schedule next read
|
||||
*/
|
||||
if (!BooleanFlagOn(FileObject->Flags, FO_RANDOM_ACCESS) &&
|
||||
(CurrentOffset - 1) / VACB_MAPPING_GRANULARITY != (CurrentOffset + BytesCopied - 1) / VACB_MAPPING_GRANULARITY)
|
||||
{
|
||||
CcScheduleReadAhead(FileObject, (PLARGE_INTEGER)&FileOffset, BytesCopied);
|
||||
}
|
||||
@@ -597,7 +600,7 @@ Clear:
|
||||
InterlockedAnd((volatile long *)&PrivateCacheMap->UlongFlags, 0xFFFEFFFF);
|
||||
KeReleaseSpinLockFromDpcLevel(&PrivateCacheMap->ReadAheadSpinLock);
|
||||
}
|
||||
KeReleaseSpinLock(&PrivateCacheMap->ReadAheadSpinLock, OldIrql);
|
||||
KeReleaseQueuedSpinLock(LockQueueMasterLock, OldIrql);
|
||||
|
||||
/* If file was locked, release it */
|
||||
if (Locked)
|
||||
|
@@ -162,7 +162,7 @@ ProcessLoop:
|
||||
WorkItem->WorkerRoutine(WorkItem->Parameter);
|
||||
|
||||
/* Make sure APCs are not disabled */
|
||||
if (Thread->Tcb.SpecialApcDisable)
|
||||
if (Thread->Tcb.CombinedApcDisable != 0)
|
||||
{
|
||||
/* We're nice and do it behind your back */
|
||||
DPRINT1("Warning: Broken Worker Thread: %p %p %p came back "
|
||||
@@ -170,7 +170,8 @@ ProcessLoop:
|
||||
WorkItem->WorkerRoutine,
|
||||
WorkItem->Parameter,
|
||||
WorkItem);
|
||||
Thread->Tcb.SpecialApcDisable = 0;
|
||||
ASSERT(Thread->Tcb.CombinedApcDisable == 0);
|
||||
Thread->Tcb.CombinedApcDisable = 0;
|
||||
}
|
||||
|
||||
/* Make sure it returned at right IRQL */
|
||||
|
@@ -7,7 +7,7 @@ set(COPYRIGHT_YEAR "2018")
|
||||
|
||||
# KERNEL_VERSION_BUILD_TYPE is "dev" for Git builds
|
||||
# or "RC1", "RC2", "" for releases.
|
||||
set(KERNEL_VERSION_BUILD_TYPE "dev")
|
||||
set(KERNEL_VERSION_BUILD_TYPE "")
|
||||
|
||||
set(KERNEL_VERSION "${KERNEL_VERSION_MAJOR}.${KERNEL_VERSION_MINOR}.${KERNEL_VERSION_PATCH_LEVEL}")
|
||||
if(NOT KERNEL_VERSION_BUILD_TYPE STREQUAL "")
|
||||
@@ -39,7 +39,7 @@ if(EXISTS "${REACTOS_SOURCE_DIR}/.git")
|
||||
endif()
|
||||
|
||||
execute_process(
|
||||
COMMAND "${GIT_EXECUTABLE}" describe --abbrev=7
|
||||
COMMAND "${GIT_EXECUTABLE}" describe --abbrev=7 --long
|
||||
WORKING_DIRECTORY ${REACTOS_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE GIT_DESCRIBE_REVISION
|
||||
RESULT_VARIABLE GIT_CALL_RESULT
|
||||
|
@@ -8173,6 +8173,16 @@ RxQueryNameInfo(
|
||||
return STATUS_BUFFER_OVERFLOW;
|
||||
}
|
||||
|
||||
#if 1 // CORE-13938, rfb: please note I replaced 0 with 1 here
|
||||
if (NodeType(Fcb) == RDBSS_NTC_STORAGE_TYPE_DIRECTORY &&
|
||||
RxContext->Info.LengthRemaining >= sizeof(WCHAR))
|
||||
{
|
||||
NameInfo->FileName[NameInfo->FileNameLength / sizeof(WCHAR)] = L'\\';
|
||||
NameInfo->FileNameLength += sizeof(WCHAR);
|
||||
RxContext->Info.LengthRemaining -= sizeof(WCHAR);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* All correct */
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
@@ -86,6 +86,17 @@ NtGdiDdDDICreateDCFromMemory(D3DKMT_CREATEDCFROMMEMORY *desc)
|
||||
/* Get the handle for the bitmap */
|
||||
desc->hBitmap = (HBITMAP)psurf->SurfObj.hsurf;
|
||||
|
||||
/* Allocate a palette for this surface */
|
||||
if (format->bit_count <= 8)
|
||||
{
|
||||
PPALETTE palette = PALETTE_AllocPalette(PAL_INDEXED, 1 << format->bit_count, NULL, 0, 0, 0);
|
||||
if (palette)
|
||||
{
|
||||
SURFACE_vSetPalette(psurf, palette);
|
||||
PALETTE_ShareUnlockPalette(palette);
|
||||
}
|
||||
}
|
||||
|
||||
/* Unlock the surface and return */
|
||||
SURFACE_UnlockSurface(psurf);
|
||||
|
||||
|
@@ -1462,20 +1462,15 @@ IntCallWindowProcW(BOOL IsAnsiProc,
|
||||
|
||||
if (PreResult) goto Exit;
|
||||
|
||||
if (!Dialog)
|
||||
Result = CALL_EXTERN_WNDPROC(WndProc, AnsiMsg.hwnd, AnsiMsg.message, AnsiMsg.wParam, AnsiMsg.lParam);
|
||||
else
|
||||
{
|
||||
_SEH2_TRY
|
||||
{
|
||||
Result = CALL_EXTERN_WNDPROC(WndProc, AnsiMsg.hwnd, AnsiMsg.message, AnsiMsg.wParam, AnsiMsg.lParam);
|
||||
}
|
||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
ERR("Exception Dialog Ansi %p Msg %d pti %p Wndpti %p\n",WndProc,Msg,GetW32ThreadInfo(),pWnd->head.pti);
|
||||
ERR("Exception when calling Ansi WndProc %p Msg %d pti %p Wndpti %p\n",WndProc,Msg,GetW32ThreadInfo(),pWnd->head.pti);
|
||||
}
|
||||
_SEH2_END;
|
||||
}
|
||||
|
||||
if (Hook && (MsgOverride || DlgOverride))
|
||||
{
|
||||
@@ -1518,20 +1513,15 @@ IntCallWindowProcW(BOOL IsAnsiProc,
|
||||
|
||||
if (PreResult) goto Exit;
|
||||
|
||||
if (!Dialog)
|
||||
Result = CALL_EXTERN_WNDPROC(WndProc, hWnd, Msg, wParam, lParam);
|
||||
else
|
||||
{
|
||||
_SEH2_TRY
|
||||
{
|
||||
Result = CALL_EXTERN_WNDPROC(WndProc, hWnd, Msg, wParam, lParam);
|
||||
}
|
||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
ERR("Exception Dialog unicode %p Msg %d pti %p Wndpti %p\n",WndProc, Msg,GetW32ThreadInfo(),pWnd->head.pti);
|
||||
ERR("Exception when calling unicode WndProc %p Msg %d pti %p Wndpti %p\n",WndProc, Msg,GetW32ThreadInfo(),pWnd->head.pti);
|
||||
}
|
||||
_SEH2_END;
|
||||
}
|
||||
|
||||
if (Hook && (MsgOverride || DlgOverride))
|
||||
{
|
||||
@@ -1612,20 +1602,15 @@ IntCallWindowProcA(BOOL IsAnsiProc,
|
||||
|
||||
if (PreResult) goto Exit;
|
||||
|
||||
if (!Dialog)
|
||||
Result = CALL_EXTERN_WNDPROC(WndProc, hWnd, Msg, wParam, lParam);
|
||||
else
|
||||
{
|
||||
_SEH2_TRY
|
||||
{
|
||||
Result = CALL_EXTERN_WNDPROC(WndProc, hWnd, Msg, wParam, lParam);
|
||||
}
|
||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
ERR("Exception Dialog Ansi %p Msg %d pti %p Wndpti %p\n",WndProc,Msg,GetW32ThreadInfo(),pWnd->head.pti);
|
||||
ERR("Exception when calling Ansi WndProc %p Msg %d pti %p Wndpti %p\n",WndProc,Msg,GetW32ThreadInfo(),pWnd->head.pti);
|
||||
}
|
||||
_SEH2_END;
|
||||
}
|
||||
|
||||
if (Hook && (MsgOverride || DlgOverride))
|
||||
{
|
||||
@@ -1675,20 +1660,15 @@ IntCallWindowProcA(BOOL IsAnsiProc,
|
||||
|
||||
if (PreResult) goto Exit;
|
||||
|
||||
if (!Dialog)
|
||||
Result = CALL_EXTERN_WNDPROC(WndProc, UnicodeMsg.hwnd, UnicodeMsg.message, UnicodeMsg.wParam, UnicodeMsg.lParam);
|
||||
else
|
||||
{
|
||||
_SEH2_TRY
|
||||
{
|
||||
Result = CALL_EXTERN_WNDPROC(WndProc, UnicodeMsg.hwnd, UnicodeMsg.message, UnicodeMsg.wParam, UnicodeMsg.lParam);
|
||||
}
|
||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
ERR("Exception Dialog unicode %p Msg %d pti %p Wndpti %p\n",WndProc, Msg,GetW32ThreadInfo(),pWnd->head.pti);
|
||||
ERR("Exception when calling unicode WndProc %p Msg %d pti %p Wndpti %p\n",WndProc, Msg,GetW32ThreadInfo(),pWnd->head.pti);
|
||||
}
|
||||
_SEH2_END;
|
||||
}
|
||||
|
||||
if (Hook && (MsgOverride || DlgOverride))
|
||||
{
|
||||
|
@@ -229,13 +229,10 @@ GuiConsoleInputThread(PVOID Param)
|
||||
* that the window that we want to destroy doesn't exist yet.
|
||||
* So first empty the message queue.
|
||||
*/
|
||||
/*
|
||||
while (PeekMessageW(&TempMsg, NULL, 0, 0, PM_REMOVE))
|
||||
{
|
||||
TranslateMessage(&TempMsg);
|
||||
DispatchMessageW(&TempMsg);
|
||||
}*/
|
||||
while (PeekMessageW(&TempMsg, NULL, 0, 0, PM_REMOVE)) ;
|
||||
}
|
||||
|
||||
if (GuiData->hWindow == NULL) continue;
|
||||
|
||||
|
Reference in New Issue
Block a user