Compare commits

...

33 Commits

Author SHA1 Message Date
Joachim Henze
d47d44804e [0.4.8] [SDK] Remove 'RC' from version.cmake 2018-04-05 21:22:59 +02:00
Eric Kohl
3f29188338 [0.4.8] cherry-pick [SERVMAN] Add an accelerator for the F5 (refresh) key
CORE-14389

(cherry picked from commit 4b8f53c9e9)
cherry-picked by Joachim Henze
2018-04-02 23:59:16 +02:00
Alexander Shaposhnikov
7436d291c2 [0.4.8] cherry-pick [RAPPS] Use FTP in passive mode
This should finally fix FTP downloads in RAPPS.

(cherry picked from commit a6d2172ccc)
cherry-picked by Joachim Henze
2018-04-02 23:56:01 +02:00
Alexander Shaposhnikov
89506d74c1 [0.4.8] cherry-pick [RAPPS] Fix FTP downloads (in Windows but not in ros yet)
(cherry picked from commit 3261bbb7b9)
cherry-picked by Joachim Henze
2018-04-02 23:33:58 +02:00
Alexander Shaposhnikov
fabb558f63 [0.4.8] cherry-pick [RAPPS] Update rapps .cab download link
This replaces old link to svn.reactos.org with rapps.reactos.org
which is a new stable location for RAPPS database and future community
website. That said, svn.reactos.org link will be kept for some time.

TODO: make this a configurable value.

CORE-14351

(cherry picked from commit bb819f1528)
cherry-picked by Joachim Henze
2018-04-02 23:33:00 +02:00
Joachim Henze
e5014a7b45 [0.4.8] [RTL] find_string_index: name parameter may not be null terminated
Different to what I thought before, this commit was not responsible
for CORE-14475. So there is no reason to not have it in release.

The resulting 0.4.8RC27 == 0.4.8RC25
2018-04-01 13:34:40 +02:00
Joachim Henze
a9ee632b2e [0.4.8] revert "[RTL] find_string_index: name parameter may not be null terminated"
This reverts commit 0.4.8-dev-501-g
51c694274f

An addendum to my last 0.4.8-commit reverting most sxs-works.
It aims to prevent CORE-14475 which probably has been introduced
by reverting only partially before.
I tested resulting state for more than a week and could
not trigger CORE-14475 any longer.
2018-03-24 17:07:14 +01:00
Joachim Henze
11bf8fa047 [0.4.8] revert [NTDLL/LDR] Overhaul sxs work
This reverts commit 0.4.8-dev-502-g
7000fe2340.

This reverts commit 0.4.8-dev-503-g
f318a25e10.

The two changes were done once to work towards better
shim-supporting APIs of newer Windows versions on demand
in the future. Luckily we do not depend on them yet.

Giannis already fixed most regressions of the 2 commits
before branching 0.4.8RC (e.g. 2nd stage theme-selector).

Unfortunately we still have issues atm with the existing mixture
of Wine comctl32 v5 vs v6.
The image-lists of both are not compatible as Giannis told us.

We revert both commits for this release to fix CORE-14433
(missing icons due to incompatible image-lists). We can not
simply add a manifest here, because 3rd party apps are affected.

I double-checked, all of those (formerly affected) apps
are working fine and show the icons after the revert:
2nd-stage-theme-selection, MS Excel Viewer 2007 open-dlg,
MSVCPP 6 installer open-dlg, FaxViewer save-dlg,
MS Word Viewer 2003 open-dlg

This revert also obsoletes works/fixes like
2f11904000.
2018-03-14 19:24:33 +01:00
Thomas Faber
795c7f70cc [0.4.8] cherry-pick [WINSRV] Don't try to remove messages from the queue without dispatching them. CORE-13734
To prevent the visible symptom
'sporadic NTOSKRNL work queue deadlock when exiting command.com'

This partially reverts r58615 / 01729482ae.

(cherry picked from commit 3159de5573)
cherry-picked by Joachim Henze
2018-03-07 19:25:23 +01:00
Thomas Faber
4a16f8a721 [0.4.8] cherry-pick [NTOS:EX] Worker threads must not exit with a critical region held. CORE-13734
To prevent the visible symptom
'sporadic NTOSKRNL work queue deadlock when exiting command.com'

(cherry picked from commit 2b8f4f6e24)
cherry-picked by Joachim Henze
2018-03-07 19:23:41 +01:00
Joachim Henze
dba2f743c5 [0.4.8] [SETUPAPI] Apply yet uncommitted fix for CORE-12616 PR-408
This commit was *not* committed to master yet.
I'll leave the ticket unresolved until it'll be.

This fixes a regression introduced in SVN r73442:
Our setup created undesired temporary files and left them
in the temp folder. Also we saw a slight one-time-increase
in memory consumption.

This patch was the work of Carlo Bramini
He proposed the fix on 2016-12-30 already.

There are ongoing discussions about an alternative approach
to the initial problem that SVN r73442 tried to address.
Serge Gautherie can and shall be evaluate that alternative
later during 0.4.9dev.

For now many thanks to Carlo Bramini for this fix.
2018-03-06 21:20:31 +01:00
Joachim Henze
8dc16094ba [0.4.8] [WIN32SS] D3DKMT commit fix of zefklop for CORE-13714
This commit was *not* committed to master yet.
I'll leave the ticket unresolved until it'll be.

We had the palette for some games regressed starting with r75061
when using VBEMP (and our inbuilt Mesa, not the rapps Mesa).
This wasn't noticed early because the same commit led to
many games crashing as well. After we recovered from the crashes
later, we were confronted with a regressed palette state.
E.g. in Diablo II, Anno 1602, MS Age of Empires.

With that commit the palette now looks like in r75060 again.
Palette in Rapps Mesa is now equal again to palette inbuilt Mesa.
The palette is still not perfect -
(CORE-10738 still needs to be addressed later).

Many thanks to zefklop!
2018-03-06 21:06:07 +01:00
Pierre Schweitzer
f4b2e5310b [0.4.8] cherry-pick [SHELL32] Fix a directory handle leak when browsing folders
A bit of history: in r71528, I tried to fix our explorer often
crashing while browsing directories. It was linked to the fact
that a notification result may arrive while the notification
structure had already been deleted.

The fix for this was actually broken and was leading to a double
leak: the notification structure was leaked. But also the handle
to the directory that had been browsed!
This means that the directory couldn't be modified anymore as
a leaked handle to it was still open.

Actually, when notifications are cancel, the kernel properly
calls the notification routine, but with a specific error code.
So the correct fix is to stop handling that notification when
we receive this error code. This is the correct fix with no leaks.

This commit is a complete r71528 revert with the appropriate fix.

CORE-10941
CORE-12843

(cherry picked from commit da8a41b97b)
cherry-picked by Joachim Henze with many thanks to Pierre.
2018-03-06 20:51:08 +01:00
Katayama Hirofumi MZ
5231a7f996 [0.4.8] cherry-pick [SHELL32] Fix item order in Folder Options (#415)
This fixes regression CORE-14393 for russian ros setups.

(cherry picked from commit 1f4c636453)
cherry-picked by Joachim Henze
2018-03-06 00:18:54 +01:00
Giannis Adamopoulos
64dcc95c50 [0.4.8] cherry-pick [SHIMGVW] -Add the 123 manifest to load the v6 comctl32. CORE-14415
This shows that we may have problems in the future with applications using just comctl32 v5

(cherry picked from commit 2f11904000)
cherry-picked by Joachim Henze
2018-03-01 18:35:16 +01:00
Pierre Schweitzer
6345fd1342 [0.4.8] cherry-pick [NTOKSRNL] Don't blindly schedule read-ahead on CcCopyRead() call.
This avoids locking Cc for too long by trying to read-ahead data which
is already in cache.
We now will only schedule a read ahead if next read should bring us
to a new VACB (perhaps not in cache).

This notably fixes Inkscape setup which was slown down by read-ahead
due to continous 1 byte reads.

Thanks to Thomas for his help on this issue.

CORE-14395

(cherry picked from commit c4f58bbfd8)
cherry-picked by Joachim Henze
2018-03-01 18:34:29 +01:00
Thomas Faber
af545fe3f3 [0.4.8] cherry-pick [DHCPCSVC] Fix a memory leak in bind_lease introduced in r14645 (!). CORE-14353
(cherry picked from commit 87d3fdf99e)
cherry-picked by Joachim Henze
2018-02-23 00:40:44 +01:00
Thomas Faber
0b826120b5 [0.4.8] cherry-pick [IPHLPAPI] Fix memory leak in getNumRoutes. CORE-14353
Thx for that gem Thomas. I let it idle for an hour. It solves the leak.
cherry-picked by Joachim Henze
2018-02-21 20:40:45 +01:00
Joachim Henze
10b06f1e4b {0.4.8] [WIN32SS] Revert the risky rls-hack 0.4.8-RC-8-gbfcab8b
This reverts bfcab8b0b4
I was sceptical regarding that patch already when I committed it.
I revert it now because it would introduce more regressions like
CORE-14354. The risk is not worth it.
Ofc this will bring back BSOD CORE-13907 & CORE-11678.
2018-02-20 03:43:43 +01:00
Mark Jansen
95884e63fd {0.4.8] cherry-pick [COMCTL32] Export GetWindowSubclass by name.
CORE-14346

(cherry picked from commit b02d78586c)
cherry-picked by Joachim Henze
2018-02-19 14:55:25 +01:00
Pierre Schweitzer
48c6d74279 {0.4.8] cherry-pick [NTOSKRNL] Fix mismatching spinlock release in CcPerformReadAhead()
(cherry picked from commit dd392b9d6c)
cherry-picked by Joachim Henze (as recommended by Pierre)
2018-02-19 14:54:56 +01:00
Pierre Schweitzer
e1d6372651 [0.4.8] cherry-pick [NTOSKRNL] Don't make CcScheduleReadAhead() too noisy
cherry-picked by Joachim Henze
2018-02-19 14:54:12 +01:00
Mark Jansen
7828afe83c [0.4.8] cherry-pick [RAPPS] Various fixes
- Ask the user if they want to continue on cab certificate problems
- Fix memory leaks in failure paths
- Properly disable caching

(cherry picked from commit 07f3691cd8)
cherry-picked by Joachim Henze
2018-02-19 14:33:00 +01:00
Mark Jansen
0908d634ad [0.4.8] cherry-pick [RAPPS] Some fixes to our completely broken cert pinning attempt
- We should not open a new connection to request a certificate.
- Update the issuer / subject for the LE certificate.
- User proper types.
- Require all fields that we check to be present.

Without checking the public key or the entire certificate it's still not secure, but we are a step closer.
Dedicated to Joachim Henze
CORE-14350

cherry-picked by Joachim Henze
2018-02-19 14:32:34 +01:00
Joachim Henze
bfcab8b0b4 [0.4.8] [WIN32SS] a risky fix to avoid BSOD CORE-13907 & CORE-11678
object2.patch in CORE-11678 is from jimtabor and Work in Progress.

As expected it mitigates CORE-11678 by preventing the
sporadic BSOD upon closing CCleaner. But it will always lead to
the program remaining in taskmgr upon closing instead.
User can manually kill the app from taskmgr.

To my own surprise this patch also reliably hides the BSOD in
HxD portable for me (CORE-13907).

I am still sceptical regarding this patch and will carefully
watch out for surprises like zombie processes during the test-cycle.
2018-02-18 02:10:54 +01:00
Joachim Henze
1906186e83 [0.4.8] [RDBSS] avoid CORE-13938
Pierre recommended this hack-fix for 0.4.8rls before.
Avoids "GetVolumeInformation now fails on NFS volume"

I will not retest any RDBSS functionality myself in my tests,
maybe some other tester would be kind enough to retest this?

Please note that I replaced #if 0 with #if 1
as discussed with Pierre. That's different to the patch in ticket.
2018-02-17 20:28:15 +01:00
Joachim Henze
6b8b704e6f [AFD] Apply unfinished patch to avoid BSODs CORE-14048 & CORE-12520
Fixes BSODs when starting Deluge Torrent 1.3.12.1 & QBitTorrent 3.2.0
due to running "Out of NP Expansion Pool"

This patch is still WIP of ThFabba.
2018-02-17 19:52:32 +01:00
Joachim Henze
937c2615e6 [0.4.8] [USP10] Apply unfinished patch to avoid CORE-14226
Thomas linked the patch in Wine Bug 44410
I tested it for some weeks without noticing any side-effects.
It avoids text rendering regressions in some setups like UltraISO
2018-02-17 19:29:24 +01:00
Thomas Faber
766ef24948 [0.4.8] Revert r73436 to avoid trouble with VirtualBox Guest Additions. CORE-13172 CORE-12700 CORE-12765
cherry-picked by Joachim Henze
2018-02-17 19:06:16 +01:00
Joachim Henze
51f9494d48 [0.4.8] [CDFS_NEW] Mute contable assertion to avoid CORE-14067 2018-02-17 18:58:07 +01:00
Thomas Faber
9274859438 [0.4.8] Mask WndProc exceptions to hide all tickets linked to CORE-11915
(cherry picked from commit 04d7a3c0d0)
by Joachim Henze
2018-02-17 18:33:51 +01:00
Colin Finck
429767ac69 [0.4.8] cherry-pick [CMAKE] Call "git describe" with the --long parameter to always output the format we are used to. 2018-02-17 18:23:34 +01:00
Joachim Henze
5f7cfe0ff8 [0.4.8] Change KERNEL_VERSION_BUILD_TYPE "RC"
as first commit before! adding the git tag
2018-02-17 17:59:30 +01:00
76 changed files with 747 additions and 778 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -2,6 +2,8 @@
#define IDC_STATIC -1
#define IDA_SERVMAN 20
/* about box info */
#define IDD_ABOUTBOX 200
#define IDC_LICENSE_EDIT 201

View File

@@ -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);

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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 */

View File

@@ -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;
}
/*

View File

@@ -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)

View File

@@ -397,6 +397,7 @@ DWORD getNumRoutes(void)
TRACE("numRoutes: %d\n", (int)numRoutes);
tdiFreeThingSet( entitySet );
closeTcpFile( tcpFile );
return numRoutes;

View File

@@ -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 */

View File

@@ -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);
}

View File

@@ -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)))

View File

@@ -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)

View File

@@ -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)

View File

@@ -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;
}
/*************************************************************************

View File

@@ -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"

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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,

View File

@@ -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,

View File

@@ -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;
}
}

View File

@@ -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)

View File

@@ -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 */

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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))
{

View File

@@ -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;