Compare commits

...

220 Commits

Author SHA1 Message Date
Timo Kreuzer
fb0752b5f5 [NTDLL][KERNEL32] Use native math on 64 bit instead of intrinsic magic 2025-04-18 01:09:57 +03:00
Timo Kreuzer
db47b59b11 [NDK][NTOS][NTDLL][KRNEL32] Fix read/write of KSYSTEM_TIME
Fix KiWriteSystemTime and move it to NDK. The previous implementation of KiWriteSystemTime was broken and updated the fields in the wrong order. Before that it was right for SystemTime and wrong for InterruptTime. ExpSetTimeZoneInformation had it wrong for the TimeZoneBias.
Add KiReadSystemTime to read KSYSTEM_TIME values correctly, instead of doing it manually (and partly wrongly) all over the place.
2025-04-18 01:09:56 +03:00
Doug Lyons
23ad93627b [COMDLG32] Improve IDC_TOOLBARPLACES placement (#7898)
Change IDC_TOOLBARPLACES y-value from 192 to 200 to allow Browse Dialog for "My Network Places" to show lower border.
CORE-19732
2025-04-16 19:52:33 -05:00
Serge Gautherie
2f380814d3 [NTOS:KD] Fix KdMax value without KDBG debugger (#7889)
Addendum to commit 271b985
CORE-20107

[NTOS:KD] Comment defines related to KdMax. They are not used,
but keep them for documentation purposes.
Addendum to e160c0f (r14799) and 6d53c91 (r27419).
2025-04-16 17:18:07 +02:00
Katayama Hirofumi MZ
80eb313eed [COMCTL32] Pager: Fix PGM_RECALCSIZE behaviour (#7875)
JIRA issue: CORE-7017
- Add m_bProcessingReCalcSize to PAGER_INFO structure.
- Fix EM_FMTLINES and PGM_RECALCSIZE handling, by
  usiing m_bProcessingReCalcSize.
2025-04-15 08:59:43 +09:00
Eric Kohl
00983aa86f [UMPNPMGR] PNP_AddEmptyLogConf: Implement adding a resource list to an existing configuration value 2025-04-13 20:12:08 +02:00
Hermès Bélusca-Maïto
79f281e74f [SDK:CMAKE] Remove unused BUILD_MP build option (#7862)
It was introduced in commit 1f9c4940d (r38270), but this flag isn't used
anymore in our source tree, and nowadays, we actively compile both UP
and MP support.
2025-04-12 22:37:48 +02:00
Timo Kreuzer
00f4a0f89b [RICHED20] Enable thiscall wrappers for MSVC
Properly fix thiscall functions by enabling thiscall wrappers on MSVC builds.
See CORE-20079, CORE-20006
2025-04-12 07:57:42 +00:00
Timo Kreuzer
dd53e7f79e Revert "[RICHED20] Fix MSVC Wordpad failure after riched20 Wine Sync to 6.10 (#7789)"
This reverts commit 74599f6c97.
2025-04-12 07:57:42 +00:00
Timo Kreuzer
18fc5a1391 [USER32] Fix use of uninitialized variable 2025-04-11 07:24:44 +00:00
Doug Lyons
3b8cfa42c1 [RICHED20] Fix RTC MSVC Failure in function ME_GetTextW. (#7881)
Import Wine Commit: 5cbe3a6cb1
CORE-20082
2025-04-10 13:35:53 -05:00
Whindmar Saksit
5022a451df [SHELL32] Fix Search Folder resource string id (#7874) 2025-04-09 16:29:57 +02:00
Alexey Strukov
9a0ff8b21b [BROWSEUI] Fix backspace button behavior in win32 shell browser (#7837)
Update backspace button functionality to align with standard modern Windows behavior in the win32 shell browser.
2025-04-08 23:54:14 +02:00
Hermès Bélusca-Maïto
1b564c1ba8 [REACTOS] Use the RT_* resource type defines where possible (#6023)
And use the self-documenting `MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL)`
instead of `0` for the `LDR_RESOURCE_INFO::Language` structure member.
2025-04-08 20:21:07 +02:00
Hermès Bélusca-Maïto
111c8cc62a [REACTOS] Usage improvements for some RtlFindMessage invocations (#6023)
Use `RT_MESSAGETABLE` and `MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL)`
instead of hardcoding their values.
2025-04-08 20:19:54 +02:00
Hermès Bélusca-Maïto
2f805d7a02 [PSDK] winuser.h: Add missing (MINIMUM|MAXIMUM)_RESERVED_MANIFEST_RESOURCE_ID define 2025-04-08 20:18:44 +02:00
Hermès Bélusca-Maïto
a3899d8151 [FREELDR:PC98] Don't do the HighRes check everytime a character is written with writechr (#4359)
And bring similar simplifications to the PC98 FAT12 bootsector.

Co-authored-by: Dmitry Borisov <di.sean@protonmail.com>
2025-04-08 15:50:43 +02:00
Hermès Bélusca-Maïto
94a650cdf7 [TASKKILL] Simplify children processes termination code (#7855)
Use process-tree Level-Order-Traversal to determine the children
processes to be terminated.

This avoids using recursion to establish the process tree, and also
allows termination in a fashion similar to Windows' taskkill.
The main difference with the latter is that we terminate parent
processes first before terminating their children, instead of doing
the reverse. (This allows avoiding the case where parent processes
respawn their children when they have been terminated.)
2025-04-08 15:42:36 +02:00
Hermès Bélusca-Maïto
1519a676bd [TASKKILL] Improve translations of the process-termination messages (#7855) 2025-04-08 15:40:46 +02:00
Hermès Bélusca-Maïto
4089e90890 [TASKKILL] Final sync with wine-10.0 (#7855)
[WINESYNC] taskkill: Build with msvcrt.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
wine commit id fb80c1b554eaf07bf2f89fcf2960e39bd0d4787a by Alexandre Julliard <julliard@winehq.org>

[WINESYNC] taskkill: Use wide-char string literals.
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
wine commit id 3180972ee2c8e67c425aa7f5279d0cd830455c3d by Michael Stefaniuc <mstefani@winehq.org>

[WINESYNC] taskkill: Use the standard va_list instead of __ms_va_list.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
wine commit id 2c2e75503bea973a3091ea48d431782da656ef8e by Alexandre Julliard <julliard@winehq.org>

[WINESYNC] taskkill: Use OEM code page for output.
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
wine commit id 8fdf397505522cc8e41b58cd960899ef7cdf322b by Eric Pouech <eric.pouech@gmail.com>

[WINESYNC] taskkill: Use exit code 1 when terminating processes.
wine commit id fe6294c74346e9956fb839d2a4ca078c624f6bbf by Brendan Shanks <bshanks@codeweavers.com>

[WINESYNC] taskkill: Use CRT allocation functions.
wine commit id dd3f3f381f9e761325c7c06236de1241c9605ed6 by Paul Gofman <pgofman@codeweavers.com>

[WINESYNC] taskkill: Remove unneeded free() before process exit.
wine commit id 20ab5f06d0972440a7df7fb1ba390ab1b32f3b1d by Paul Gofman <pgofman@codeweavers.com>

[WINESYNC] taskkill: Enumerate processes in main().
wine commit id cf4a0b7392f33ba3e0b3fe69007a6d1f327f13f2 by Paul Gofman <pgofman@codeweavers.com>

[WINESYNC] taskkill: Factor out get_task_pid().
wine commit id 62ef3c5be1d2c5374399984588a9daa75663d030 by Paul Gofman <pgofman@codeweavers.com>

[WINESYNC] taskkill: Use toolhelp snapshot to get process information.
wine commit id 6cca1f5099a8354b67578b42dd34fd010e80b6de by Paul Gofman <pgofman@codeweavers.com>

[WINESYNC] taskkill: Mark processes for termination in main().
wine commit id 5c851451892e05c1747108432a5a2bff3a78ed9e by Paul Gofman <pgofman@codeweavers.com>

[WINESYNC] taskkill: Support terminating child processes.
wine commit id fb6b1c91bbf412f5eba260ae52ee38176fd693d4 by Paul Gofman <pgofman@codeweavers.com>

NOTE: This implementation is disabled for ReactOS, and we keep
our own. See the comment block in the code for the reasons why.

+ Adaptations for ReactOS-specific code.

In particular, great care has been taken to keep the `pkill_list`
functionality (read: fix) introduced in PR #2403 (commit 97e7efc020).
The current problem with Wine's code is that if many processes (more
than one) with the same image name are running, then:

   taskkill /im theimagename.exe

would only terminate *one* of the corresponding processes, instead of
all processes having this same image name (as on Windows).
The `pkill_list` array contains all the PIDs of these processes. This
replaces the single `pid` initialized by `get_task_pid`.

Co-authored-by: Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
2025-04-08 15:36:57 +02:00
Whindmar Saksit
f669426bf4 [COMCTL32] Include size of state imagelist for column 0 LVSCW_AUTOSIZE (#7873)
CORE-20080 CORE-15423
2025-04-07 21:20:15 +02:00
Timo Kreuzer
52719b52ae [VCRUNTIME] Fix a bug in x64 __security_init_cookie 2025-04-07 13:57:17 +00:00
Whindmar Saksit
182f353b2f [COMCTL32] ImageList_LoadImageW with CLR_NONE should not use a mask (#7869)
CORE-16146
2025-04-06 19:00:54 +02:00
Oleg Dubinskiy
ff7bf747bf [WDMAUD.DRV] Allow enumerating only present audio devices
- Avoid unnecessary enumerating audio-related device interfaces which are currently not present in the system.
- Do this for MMixer routines, same as it's already done for Legacy ones.
2025-04-06 17:29:45 +02:00
Johannes Anderwald
ecf4001e6f [SETUPAPI] Do not fail enumeration on invalid device interface keys (#7741)
Necessary for drivers, which install multiple device interfaces and all interfaces might not be available for this device.
CORE-17285
2025-04-06 17:10:08 +02:00
Oleg Dubinskiy
9aa299bea4 [MMIXER] Don't stop audio devices enumeration when one or more of them failed to initialize (#7863)
Skip unsuccessfully initialized devices and continue enumeration until all of devices are enumerated.
Patch by Johannes Anderwald with additional improvements from me.
This fixes 0 audio devices detected for HD audio controllers (e. g., Realtek), and hence allows to properly detect all available devices and play the sound with MMixer routines enabled (they are currently default).
Tested personally with Realtek HD Audio driver version R2.74 for Windows XP/Server 2003 in pair with hdaudbus.sys from Windows Vista SP2 on real hardware.
CORE-17285
2025-04-06 10:55:55 +02:00
Eric Kohl
2ec3a199af [UMPNPMGR] Implement first part of PNP_FreeLogConf 2025-04-05 18:17:33 +02:00
Doug Lyons
208dfd22c6 [ROSAUTOTEST] Final changes to improvements (#7857)
Follow-up of PR #7823.
2025-04-04 22:00:54 -05:00
Hermès Bélusca-Maïto
8d7eca9482 [CODEOWNERS] Add myself for modules I wrote or heavily contributed to (#5279) 2025-04-04 20:47:59 +02:00
Whindmar Saksit
ac3ecb2b2d [SHELL32] Add SHFileOp error UI and use it for CFSFolder renaming (#7858) 2025-04-04 20:34:52 +02:00
Hermès Bélusca-Maïto
774b3a6e1d [RAPPS] Correctly update the Install/Uninstall/... buttons (#7351)
The Install/Uninstall/Modify/... buttons stay disabled by default, unless:

- For installed apps: when an app item is selected, Uninstall (and
  Registry-remove) are enabled, and Modify is enabled under certain
  conditions.

- For available apps:
  * Modify, Uninstall and Registry-remove are always disabled.
  * When an app item is selected, Install is enabled.
  * Install is also enabled if there is at least one application
    selected for installation (box checked), in which case the button
    stays enabled even while changing across apps categories.
2025-04-04 18:18:49 +02:00
Katayama Hirofumi MZ
1e6e5529c6 [FREETYPE][FTFD][DOC] Update FreeType to 2.10.0 from 2.9 (#7786)
Modernize font engine modules.
JIRA issue: CORE-16084
- Update FreeType to 2.10.0 from 2.9.
- Delete useless files.
- Add technical notes (TechNote.txt) on freetype.
- DbgPrint became FT_Message.
2025-04-04 20:50:25 +09:00
Katayama Hirofumi MZ
7efab12e6f [CMAKE] Introduce set_wine_module (Retry) (#7860)
Re-trial of #7800. Deleting __WINESRC__
hacks.
JIRA issue: CORE-5743
- Add sdk/cmake/set_wine_module.cmake.
- Load set_wine_module.cmake at
  top-level CMakeLists.txt.
- Use set_wine_module cmake function
  and delete __WINESRC__ as possible.
- Delete many include_directories.
2025-04-04 20:44:38 +09:00
Hermès Bélusca-Maïto
125f94d8ab [NTOS:EX] Check whether the boot-time drivers are safe to use on MP systems (#7744)
Invoke the MmVerifyImageIsOkForMpUse() helper. If the boot-time driver
only supports a uniprocessor system, bugcheck with UP_DRIVER_ON_MP_SYSTEM.

https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/bug-check-0x92--up-driver-on-mp-system

Note that we don't do this check very soon at boot time (e.g. in
MiReloadBootLoadedDrivers or MiInitializeLoadedModuleList), but only
after loading the drivers' debug symbols (if any).
The reason is simply to ease debugging in case we bugcheck: this allows
having the debugger set up with the symbols for this driver.

For automatic and manual driver loading, MmVerifyImageIsOkForMpUse()
is invoked by MmCheckSystemImage() but in this case, there is graceful
failure and no bugcheck.
2025-04-04 13:05:22 +02:00
Hermès Bélusca-Maïto
4750cbe55b [SDK:INCLUDE] bugcodes.mc: Add missing UP_DRIVER_ON_MP_SYSTEM bugcheck code (#7744) 2025-04-04 13:04:51 +02:00
Hermès Bélusca-Maïto
3022d74beb [NTOS:EX/KE][HALX86] Add support for NUMPROC, BOOTPROC, MAXPROC, ONECPU boot switches (#6024)
These SMP-specific switches allow to test and control configurations
with various number of CPUs on multiprocessor systems.

- NUMPROC: maximum number of logical processors that can be started
  (including dynamically, not currently supported by ReactOS) at run-time.

- BOOTPROC: maximum number of logical processors that can be started at
  boot-time.

- MAXPROC: forces the OS to report the maximum possible number of CPUs
  as existing on the system.

- ONECPU (MP HAL-only boot switch): causes the HAL to only use one
  (the boot) CPU on a multiprocessor system. Attempting to start other
  processors will fail.

For more information, see:
https://www.geoffchappell.com/notes/windows/boot/bcd/osloader/numproc.htm
https://www.geoffchappell.com/notes/windows/license/processors.htm
https://rmscrypt.wordpress.com/2011/02/
https://codeinsecurity.wordpress.com/2022/04/07/cpu-socket-and-core-count-limits-in-windows-10-and-how-to-remove-them/

Generic references about BOOT.INI switches:
https://learn.microsoft.com/en-us/windows-hardware/drivers/devtest/boot-options-in-a-boot-ini-file
https://www.itprotoday.com/cloud-computing/what-switches-can-be-used-bootini
http://franck.kiechel.free.fr/dbr_eng/BootIni.htm

References about BCD options:
https://learn.microsoft.com/en-us/windows-hardware/drivers/devtest/bcdedit--set
http://www.mistyprojects.co.uk/documents/BCDEdit/files/commands.6.1.7601.htm#TYPES%20OSLOADER
2025-04-04 12:51:49 +02:00
Hermès Bélusca-Maïto
7093412f4e [NTOS] Build mproc.c _only_ for MP ntoskrnl, not for single-processor
The usage of the BUILD_MP cmake variable was inadequate.
2025-04-04 12:51:29 +02:00
Hermès Bélusca-Maïto
b0dd4ba09c [HALX86][HALARM] Minor formatting to HalInitSystem
Add CODE_SEG("INIT"), SAL2 annotations, remove extra-parenthesis...
2025-04-04 12:51:28 +02:00
Katayama Hirofumi MZ
1890ad20f8 [NTGDI][GDI32] AddFontResource: Support multiple files (#7833)
JIRA issue: CORE-17684
- Add HEAP_strdupA2W_buf and HEAP_strdupA2W_buf_free
  helper functions for quick string conversion.
- Optimize HEAP_... functions.
- Add IntConvertFontPaths helper function.
- Support multiple files in AddFontResource function.
- Add cFiles parameter to some internal font addition/
  removal functions.
- Half-implement NtGdiRemoveFontResourceW and
  RemoveFontResourceExW functions.
2025-04-04 19:30:18 +09:00
Whindmar Saksit
72bd9ef29a [BROWSEUI] Don't pass the internal PIDL to the shell for processing (#7859)
CORE-20063
2025-04-03 20:52:53 +02:00
Timo Kreuzer
98b26cc24a [NTDLL_APITEST] Fix NtCreateProfile tests for x64 2025-04-03 16:22:42 +00:00
Timo Kreuzer
0679260073 [HAL/APIC] Set the profiling interrupt handler
Fixes hang when running mtdll_apitest NtStartProfile.
2025-04-03 16:22:42 +00:00
Timo Kreuzer
dca5194279 [FTFD] Fix malloc/realloc/free wrappers
On x64 malloc needs to return a 16 byte aligned buffer, the previous code used an 8 byte header, making the allocations unaligned. This is now fixed with an improved header structure.
Also simplify realloc a bit and make it handle Object == NULL.
2025-04-03 16:22:09 +00:00
George Bișoc
91fadeb6c3 [STOBJECT] Explicitly tell the user the battery is fully charged
Short answer: our UI sucks bolas rojas.

Long answer: when the NT kernel informs the user-mode part of the system that the battery is no longer charging, the machine is directly powered up by the AC adapter.
This is understood by determining the presence of AC_LINE_ONLINE status bit in ACLineStatus member field, which is a Windows API construct.
In the NT world this is understood by checking the power state returned by the BATTERY_STATUS structure.

What's happening right now is that when the battery is fully charged, ROS UI simply displays "100% remaining" implying the battery is about to discharge, which is not the case.
This is extremely confusing to the user. AND WORST PART IS THAT IT'S XP/2003 DESIGN, AND I HATE IT UGGGHHH.
With this patch we're leaning towards Windows 10/11 way of informing the user the battery is fully charged. VIVA LA NT6!

CORE-18969
CORE-19452
2025-04-02 23:16:47 +02:00
Whindmar Saksit
5dbf87e2c1 [BROWSEUI] Handle resolution change when fullscreen (#7852)
CORE-20072
2025-04-02 18:18:23 +02:00
Whindmar Saksit
32fad87a08 [ROSAUTOTEST][SDK] ROS detection for apitests (#7613) 2025-04-02 15:17:18 +02:00
Whindmar Saksit
4965d6a8ac [USER32_APITEST] Add more PrivateExtractIcons tests (#7831) 2025-04-02 15:16:04 +02:00
Katayama Hirofumi MZ
3660920b7f [GDI32][NTGDI][SDK] ExtTextOut: Fix some type problems (#7856)
JIRA issue: CORE-19898
- Modify NtGdiExtTextOutW prototype.
- Add const to some paramters.
- Make Count parameter unsigned.
- Delete needless type casts.
2025-04-02 20:30:47 +09:00
Doug Lyons
7afcd2a8b7 [ROSAUTOTEST] Allow rosautotest to be in the same directory as its files and show its duration at the end. (#7823)
Example output:
[ROSAUTOTEST] System uptime 7.41 seconds

... Testing here...

[ROSAUTOTEST] System uptime at start was 7.41 seconds

[ROSAUTOTEST] System uptime at end was 1546.20 seconds
[ROSAUTOTEST] Duration was 25.65 minutes

Co-authored-by: Hermès BÉLUSCA - MAÏTO <hermes.belusca-maito@reactos.org>
2025-04-01 21:21:10 -05:00
Adam Słaboń
d66ad21ee0 [FREELDR][INSTALL] Update the FreeLoader installation message (#7853)
Update the installfreeldr message in accordance with the changes in 3d516e71d3.
2025-04-02 00:06:12 +03:00
Katayama Hirofumi MZ
87cd66a577 [NTGDI:FREETYPE] IntExtTextOutW: Renaming variables (#7851)
JIRA issue: CORE-19898
This PR is simply trivial renaming.
In IntExtTextOutW function:
s/SurfObj/psoDest/
s/SourceGlyphSurf/psoGlyph/
s/HSourceGlyph/hbmGlyph/
s/bitSize/glyphSize/
2025-04-02 03:54:42 +09:00
Whindmar Saksit
769462faaa [IEFRAME] Implement URL PIDL (#7850) 2025-04-01 16:09:25 +02:00
Doug Lyons
13657fdb5b [USER32][LIBPNG] Support PNG/Vista icons (Retry) (#7709)
CORE-18385
Retry of PR #7704

In USER32 change CMakeLists.txt to include libpng.
Improve libpng.spec to include additional needed defines.
Add code into mostly cursoricon.c to support PNG icons.

Co-authored-by: Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
2025-03-31 12:55:53 -05:00
Whindmar Saksit
190782c3e0 [SHELL32] Fix some clang warnings (#7845) 2025-03-31 18:59:04 +02:00
Whindmar Saksit
aa4fac61c8 [BROWSEUI] Implement ShellBrowser F11 fullscreen mode (#7844) 2025-03-31 18:09:54 +02:00
Whindmar Saksit
cc8ec38a87 [SHELL32] Use SHGDN_FOREDITING when renaming in BrowseForFolder (#7840)
- Use SHGDN_FOREDITING when renaming.
- Handle rename change notification without full refresh.
- Don't use FS path when deleting.

CORE-20064
2025-03-30 23:11:27 +02:00
Eric Kohl
c5325f5016 [UMPNPMGR] Implement first part of PNP_AddEmptyLogConf
TODO: Adding a new configuration to an already existing configuration of the same type.
2025-03-30 17:16:00 +02:00
Katayama Hirofumi MZ
81d845fb2c [SHELL32] Implement PathProcessCommandW (#7818)
Follow-up of #7815. This function
affects ShellExec_RunDLLA/W
implementation.
JIRA issue: CORE-17659
- Implement PathProcessCommandW
  in shlexec.cpp.
- Adapt utils.h to non-C++.
2025-03-30 20:28:31 +09:00
Whindmar Saksit
467dec4d16 [CLEANMGR] Only allow one instance per drive (#7832)
CORE-18941
2025-03-29 16:58:18 +01:00
Whindmar Saksit
21b3382f31 [SHELL32] Allow shell to format blank partitions (#7810)
- Don't corrupt static (global) data when formatting more than one disk at the same time.
- Guess partition size to enable formatting blank partitions.
- Added info tip.
- Calls SetVolumeLabel.

CORE-17273
2025-03-29 16:35:03 +01:00
Whindmar Saksit
090d563488 [SHELL32] CFolderOptions Reset can call DefView directly if there is no browser (#7806)
CORE-20029
2025-03-28 23:15:01 +01:00
Hervé Poussineau
cfde03ec9b [VIDEOPRT] Write monitor EDID to registry
This will be used later by win32k to give only valid display modes
to user mode.
2025-03-28 23:10:42 +01:00
Justin Miller
177cbd81af Revert "[FREELDR] Pass the correct ACPI table for Windows (#7486)"
Sorry this is something I had to do, I should have investigated deeper
before approving it and that's on me so ill take this over and get this
done. and credit you once again. Thank you @ILauncherDev
This reverts commit 185225a5fc.
2025-03-28 07:20:45 +01:00
Whindmar Saksit
b6562a664b [SHELL32] DefView statusbar item file size fix in recycler and UNC (#7732)
- Display item sizes inside \\ UNC paths.
- Don't display anything in the location pane inside the Recycle Bin (CORE-20005).
- Don't display the size and location panes in My Computer
- Don't update the location pane on simple item selection changes.

CORE-20005
2025-03-27 18:29:44 +01:00
Timo Kreuzer
c7eba0c5c7 [SDK] Improve definition of (RTL_)CRITICAL_SECTION_DEBUG 2025-03-27 12:50:40 +00:00
Whindmar Saksit
a444572c3e [SHIMGVW] Display error message on delete failure (#7776)
CORE-20019
2025-03-27 13:43:58 +01:00
Mark Jansen
70422cda51 [SHELL32] Fix starting disk cleanup from drive properties
CORE-12314
2025-03-27 10:55:41 +01:00
Nguyen Trung Khanh
97e7efc020 [TASKKILL] Implement /t (tree) parameter (#2403)
CORE-15998
2025-03-26 17:04:49 +01:00
Mark Jansen
49c40a2941 [PROGMAN][MSPORTS][VFDLIB][CONSRV] Update resource encoding to be utf8 2025-03-26 16:39:43 +01:00
Mark Jansen
2e8f4e2c24 [SHELL32] Implement Recycle bin cleanup handler
CORE-18942
2025-03-26 13:58:40 +01:00
Mark Jansen
f9bedd5ca5 [CLEANMGR] Add basic cleanmgr implementation
CORE-18941
2025-03-26 13:58:40 +01:00
Mark Jansen
0cd7e2cfb0 [PSDK] Add missing parameter names 2025-03-26 13:58:40 +01:00
Mark Jansen
db9768f25d [PSDK] Add EmptyVC.idl 2025-03-26 13:58:40 +01:00
Serge Gautherie
c302dbcc96 [FORMAT] wmain(): Call GetLastError() immediately
and adapt STRING_ERROR_DRIVE_TYPE strings.
2025-03-26 13:37:53 +01:00
Serge Gautherie
421dd31d49 [FORMAT] wmain(): Clean GetDiskFreeSpaceExW() calls up 2025-03-26 13:37:53 +01:00
Serge Gautherie
982cf2be5e [FORMAT] wmain(): Clean GetVolumeInformationW() calls up
and immediately print file system out
2025-03-26 13:37:53 +01:00
Katayama Hirofumi MZ
d69a80fad7 [SHDOCVW] Follow-up of #7804: Improve AddUrlToFavorites (#7820)
JIRA issue: CORE-19824
JIRA issue: CORE-19867
JIRA issue: CORE-14172
- Use <strsafe.h>.
- Don't use CSIDL_COMMON_FAVORITES.
2025-03-26 20:13:36 +09:00
Katayama Hirofumi MZ
457642cc4a [FONTEXT] Refactor (#7821)
Improve code flexibility.
JIRA issue: CORE-12861
- Delete excessive virtual keywords
  and add overload keywords.
- Add InstallFontFiles helper function.
- Add strMsg parameter to
  DoInstallFontFile function.
- Move DoInstallFontFile and
  DoGetFontTitle functions outside
  the class.
- Delete needless fontext.h.
2025-03-26 18:58:12 +09:00
Marcin Jabłoński
be7d79768e [COMCTL32] Fix a heap corruption in EDIT_EM_ReplaceSel (#7598)
https://jira.reactos.org/browse/CORE-19743
2025-03-26 10:32:17 +01:00
Serge Gautherie
35ca454cab [NTOSKRNL] Add missing \n to DPRINT() calls (#6012)
Improve debug logs.
- Add missing \n to DPRINT() calls
- And demote/promote some DPRINT()/DPRINT1().
2025-03-26 10:23:15 +01:00
Whindmar Saksit
c1b8c4f96f [SHELL32] Correctly implement common desktop items PIDL (#7730)
The current implementation is broken, if a file/folder exists in both places, you always get the user item.

CORE-19861
2025-03-25 21:26:55 +01:00
Katayama Hirofumi MZ
151ba9ee8f [BROWSEUI][SHDOCVW][SDK] Fix 'Add Favorite' command (#7804)
JIRA issue: CORE-19824
JIRA issue: CORE-19867
- Add shdocvw import to browseui.
- Half-implement shdocvw!
  AddUrlToFavorites function.
- Add AddUrlToFavorites prototype
  to <shdocvw_undoc.h>.
- Fix browseui!CShellBrowser::
  OnAddToFavorites and
  shdocvw!CNSCBand::_AddFavorite
  by using AddUrlToFavorites.
2025-03-26 04:35:22 +09:00
Doug Lyons
0c6423da8d [RICHED20] txthost.c: Partial Wine Sync of RichEditWndProc_common (#7817)
Add extra parameters to 'struct host' to handle 'defer_release' and 'notify_level' and use these.
Fixes crash when using 'Enter' key in DevCpp installer license edit box.

Update and retrial of #7733. CORE-19991
Cherry pick of wine commit: 8138159f20
2025-03-25 13:15:59 -05:00
Hermès Bélusca-Maïto
48beb0433e [SETUPAPI] Add missing NULL parameter checks in SetupOpenInfFileW and SetupDiGetINFClassW (#7573)
Based on PR #5673, ROSTESTS-388

Co-authored-by: Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
2025-03-25 17:41:23 +01:00
Mark Jansen
5ec739bf2e [RTL] Change comment to indicate a hack 2025-03-25 16:23:39 +01:00
Mark Jansen
6ab81dcc31 [VERIFIER] Clarify logging 2025-03-25 16:23:39 +01:00
Mark Jansen
0b8acaac31 [AVRF] Suppress notifications for providers 2025-03-25 16:23:39 +01:00
Mark Jansen
08d575adf9 [RTL] Notify verifier when freeing the process page heap 2025-03-25 16:23:39 +01:00
Mark Jansen
5821136dfa [AVRF] Hook up debug functions, add noisy stub for AVrfpGetStackTraceAddress 2025-03-25 16:23:39 +01:00
Mark Jansen
a7a504a466 [SDK] Add avrf stop codes and VERIFIER_STOP macro 2025-03-25 16:23:39 +01:00
Katayama Hirofumi MZ
367e4877f1 [BROWSEUI][SDK] Implement IAddressEditBox::SetCurrentDir (#7814)
JIRA issue: CORE-19704
- Rename and retype pidlLastParsed
  as CComHeapPtr
  <ITEMIDLIST_ABSOLUTE>
  m_pidlLastParsed.
- Implement
  CAddressEditBox::SetCurrentDir
  method.
- Simplify
  CAddressEditBox::ParseNow
  method.
- Modify IAddressEditBox interface.
2025-03-25 20:32:26 +09:00
Timo Kreuzer
776c660542 [NTDLL] Export RTL locale functions
The exports are NT6, but the table is initialized unconditionally, because the functions will be used later internally.
2025-03-25 09:55:17 +00:00
Timo Kreuzer
e01c32f3bd [RTL] Implement locale functions/tables
The locale table is currently hardcoded in rtl. On Vista+ (and Wine) this table is part of locale.nls, but we don't have that yet.
2025-03-25 09:55:17 +00:00
Timo Kreuzer
762a9f00bb [NTDLL_APITEST] Add test for Rtl locale functions 2025-03-25 09:55:17 +00:00
Timo Kreuzer
738ff9dc04 [NDK] Add some Vista+ Rtl locale functions 2025-03-25 09:55:17 +00:00
Timo Kreuzer
684072fe12 [NDK] Minor header improvements
- Remove some duplicated prototypes
- Fix a few mismatching annotations
2025-03-25 09:55:17 +00:00
Katayama Hirofumi MZ
9563c07146 [MSPAINT] Improve behaviour on memory shortage (#7780)
Improve UX on memory shortage.
JIRA issue: CORE-20020
- Clear history on memory shortage.
- Improve CCanvasWindow::OnPaint on memory
  shortage.
- Add null check in CCanvasWindow::DoDraw.
- Retire using of cache in CCanvasWindow.
2025-03-25 10:45:23 +09:00
Katayama Hirofumi MZ
c930c8c464 [GDI32] Implement RemoveFontResourceExA (#7813)
JIRA issue: CORE-17684
2025-03-25 10:38:17 +09:00
Katayama Hirofumi MZ
aee5cbdfe3 [SHELL32_APITEST] Add PathProcessCommand testcase (#7815)
JIRA issue: CORE-17659
2025-03-25 08:34:02 +09:00
Timo Kreuzer
9ab89bd8fa [UCRTBASE_WINETEST] Fix and add to build 2025-03-24 23:02:06 +00:00
Timo Kreuzer
5c47607ab2 [UCRTBASE_WINETEST] Import ucrtbase_winetest from wine-10.0 2025-03-24 23:02:06 +00:00
Timo Kreuzer
5b633d64f1 [UCRTBASE] Build without debug exports
Windows ships ucrtbase without debug exports and ucrtbased with debug exports. The wine test tests ucrtbase and loads it dynamically in some cases. Compiling it with _DEBUG requires it to be linked to ucrtbased, which causes problems, because it also dynamically loads ucrtbase, which will cause it to crash.
2025-03-24 23:02:06 +00:00
Timo Kreuzer
6a4dbedd1e [CMAKE] Support WITH_DBG and NO_DBG overrides in spec2def
This is to be able to build ucrtbase without debug and later ucrtbased with debug.
2025-03-24 23:02:06 +00:00
Timo Kreuzer
01cd8472c7 [UCRTBASE] Implement simplistic versions of some stubs
This is to allow ucrtbase_winetest to run without debug breaks.
Proper implementations will follow.
2025-03-24 23:02:06 +00:00
Timo Kreuzer
f81c82f5fa [VCSTARTUP] Implement atexit and _onexit
These must use a local table and cannot use the one from ucrtbase.
The table is initialized with a .CRT section initializer.
2025-03-24 23:02:06 +00:00
Timo Kreuzer
fce48c3014 [OLDNAMES] Fix up for ucrtbase
Some old names redirect to functions that are not exported by ucrtbase. Place them into a seperate asm file, so that they don't get pulled in, when any of the other ones is referenced.
2025-03-24 23:02:06 +00:00
Timo Kreuzer
5abc69f31d [PSEH] Make x64 PSEH independent of SDK headers 2025-03-24 23:02:06 +00:00
Timo Kreuzer
ad50a00020 [UCRTBASE] Fix broken imports from ntdll
Previously sprintf and _vsnprintf were imported from ntdll. These functions are defined as inline functions in ucrt headers, but linked directly by legacy CRT code.
2025-03-24 23:02:06 +00:00
Justin Miller
c37af4cfca [CODEOWNERS] add myself to codeowners for directx (#7816) 2025-03-24 23:08:34 +01:00
Timo Kreuzer
0fc0d9ebb1 [NTOS:KE] Skip an "optimization" on SMP 2025-03-24 21:33:48 +00:00
Timo Kreuzer
0016d65532 NTOS:KE] Make KiSetAffinityThread SMP ready 2025-03-24 21:33:48 +00:00
Timo Kreuzer
9292cad39a [NTOS:KE] Implement KiFindIdealProcessor 2025-03-24 21:33:48 +00:00
Timo Kreuzer
c1369e8c41 [NTOS:KE] Select proper processor in KiDeferredReadyThread 2025-03-24 21:33:48 +00:00
Denis Robert
8c9f250587 [SETUP:REACTOS] Update French (fr-FR) translation (#7564)
Update French translation in base/setup/reactos/lang

Co-authored-by: Hermès BÉLUSCA - MAÏTO <hermes.belusca-maito@reactos.org>
2025-03-24 22:26:07 +01:00
Whindmar Saksit
f222c2155d [SHELL32][SHDOCVW] Fix drive volume renaming (#7812)
* [SHELL32] Fix drive volume renaming

- Support renaming to empty volume name.
- Use SHGDN_FOREDITING in Explorer tree and DefView ("Volname" instead of "VolName (C:)").
- Added support for the ShowDriveLettersFirst setting.

CORE-17292

* Suggested changes
2025-03-24 22:01:22 +01:00
Daniel Victor
185225a5fc [FREELDR] Pass the correct ACPI table for Windows (#7486)
JIRA issue: CORE-11954 and CORE-18969

This PR passes the real ACPI table instead of a hardcoded (PVOID)1.
2025-03-24 21:49:39 +01:00
Doug Lyons
74599f6c97 [RICHED20] Fix MSVC Wordpad failure after riched20 Wine Sync to 6.10 (#7789)
JIRA issue: CORE-20006

Fix riched20 functionality when compiling with MSVC.
This fixed Wordpad and other programs that depend upon riched20.
2025-03-24 21:38:00 +01:00
Justin Miller
d7db8c9c80 [WIN32SS] Fix the extra VOID amendum to e7a9e7c 2025-03-24 21:32:41 +01:00
Justin Miller
b9b765038e [WIN32SS] Fix an added APIENTRY amendum to e7a9e7c 2025-03-24 21:27:57 +01:00
Justin Miller
e7a9e7ca3d [SDK][WIN32SS] Prepare d3dkmt functions up to Windows Vista (#5612)
Prepare the d3dkmt APIs up to Vista RTM
Build the skeleton needed for having userspace components talk to a WDDM KMD driver

Co-authored-by: Mark Jansen <mark.jansen@reactos.org>
Co-authored-by: Hermès BÉLUSCA - MAÏTO <hermes.belusca-maito@reactos.org>
2025-03-24 21:21:09 +01:00
Denis Robert
818842de06 [BASE] Update French (fr-FR) translation (#7563)
Updates French translation of base folder.
2025-03-24 21:10:02 +01:00
Thomas Faber
1b2eeb23e0 [NTOS:EX] Fix BufferSize validation in NtCreateProfile.
See https://www.geoffchappell.com/studies/windows/km/ntoskrnl/api/ex/profile/bugdemo.htm
2025-03-24 20:56:30 +01:00
Thomas Faber
11d11f93ee [NTDLL_APITEST] Add tests for NtCreateProfile and NtStartProfile. 2025-03-24 20:56:30 +01:00
Mas Ahmad Muhammad
7b5e004dd6 [SETUP][USETUP] Update Indonesian (id-ID) translation (#7618)
Updating translation for: setup/reactos and setup/usetup.
2025-03-24 20:47:26 +01:00
Serge Gautherie
9ecd5fb6fe [FREELDR] DisplayBootTimeOptions(): Simplify concatenation checks (#4058) 2025-03-24 20:14:04 +01:00
Andrei Miloiu
ecb2293d6d [BUTTERFLIES] Improve Romanian (ro-RO) translation (#7363)
Improvements based on recent Romanian translation document revision 06e89b2.

This file was not translated in Romanian language in any Win version (neither XP/2k3+, nor in the previous ones). I tried to translate this file as close as possible in the way I did in the previous PRs.
2025-03-24 19:09:28 +01:00
Andrei Miloiu
1b63247b81 [DESK] Update Romanian (ro-RO) translation (#7584)
Improvements based on recent Romanian translation document revision 06e89b2.

This file exists in XP/2k3+, but there are many things I didn't find in desk.cpl. I found them in other files like explorer.exe. There were also many items I found nowhere. I tried to translate this file as close as possible in the way I did in the previous PRs.

I also fixed the accelerator collisions and added the missing ones.
2025-03-24 19:07:08 +01:00
Timo Kreuzer
4a5fdb9a3a [RSYM64] Nuke rsym64
It's purpose was to create x64 unwind information from DWARF debug info, but it was never fully working and is pointless now anyway, because x64 GCC does this itself properly.
2025-03-24 18:05:28 +00:00
Andrei Miloiu
5d30831fb8 [SETUP] Update Romanian (ro-RO) translation (#7660) 2025-03-24 19:05:11 +01:00
Justin Miller
35ed79f2d4 [GITHUB] Adjust the pullrequest template to include the buildbot testruns (#7754)
* [GITHUB] Adjust the pullrequest template

Co-authored-by: Hermès BÉLUSCA - MAÏTO <hermes.belusca-maito@reactos.org>
2025-03-24 18:23:41 +01:00
Mark Jansen
05d71fa69b [CERTUTIL] Add -asn verb 2025-03-24 18:00:06 +01:00
Ethem Çılgın
c35bb8dd73 [EXPLORER] Improve Turkish (tr-TR) translation (#7801)
Adapt Turkish translations from Windows and add the missing ‘Masaüstünü Göster’ translation as in Windows 10.
2025-03-24 14:06:30 +03:00
Katayama Hirofumi MZ
88d9285bd0 [SHELL32] Follow-up of #7805: Improve PathMakeUniqueName (#7809)
JIRA issue: CORE-19278
- Simplify formatString handling.
- Don't use magic number.
- Commonize some code.
2025-03-24 06:23:14 +09:00
Ratin Gao
cfcc8d85b2 [NEWDEV] Fix HardwareId match logic in UpdateDriverForPlugAndPlayDevicesW (#7808)
Match Hardware ID correctly. This fix is required to install the latest (7.1.6) Virtual Box Guest Additions drivers.

- Add Compatible IDs match, call SetupDiGetDeviceRegistryPropertyW twice, once for SPDRP_HARDWAREID and once for SPDRP_COMPATIBLEIDS.
- Use case-insensitive comparison (wcscmp -> _wcsicmp)
- Convert code file to UTF-8 encoding
2025-03-23 02:25:12 +01:00
Doug Lyons
ffa81857c2 [COMCTL32] ReactOS second stage listbox selection fix (#7793)
@I_Kill_Bugs patch
CORE-19814
Check for LBS_NOSEL flag for 'descr->style' in 'LISTBOX_PaintItem' and if FALSE, only then set 'selected'.
2025-03-22 19:33:50 -05:00
Ratin Gao
49a55a099e [SETUPAPI] Refactor SetupInstallServicesFromInfSectionExW (#7770)
Fix `SetupInstallServicesFromInfSectionEx`.

- Call SetupDiSetDeviceRegistryPropertyW only if DeviceInfoSet is valid
- DeviceInfoSet can be INVALID_HANDLE_VALUE, treat this as NULL
- Improve function declaration
2025-03-23 00:39:12 +01:00
Ratin Gao
7a9c744b70 [SETUPAPI] Stub implement SetupQueryInfVersionInformation (#7769)
Sync SetupQueryInfVersionInformation stubs to Wine.

The new synced stubs set ERROR_CALL_NOT_IMPLEMENTED as last error and return, rather than raise exception EXCEPTION_WINE_STUB (0x80000100), then the Virtual Box Guest Addition 7.1.6 setup progress can move on.
2025-03-23 00:17:50 +01:00
Justin Miller
6c7d2a2e25 [SDK] Fix RelWithDebInfo (#7811) 2025-03-22 23:12:52 +01:00
Katayama Hirofumi MZ
386fccd02c [SHELL32][SHELL32_APITEST][SDK] Implement PathMakeUniqueName (#7805)
Sideproduct of #7804. Implementing missing features.
JIRA issue: CORE-19278
- Implement PathMakeUniqueName function.
- Add PathMakeUniqueName prototype to <shlobj.h>.
- Add PathMakeUniqueName testcase to shell32_apitest.
2025-03-22 08:23:24 +09:00
Katayama Hirofumi MZ
6a95219ed3 [REACTOS] Don't use DLL_WINE_PREATTACH macro (#7802)
Related to #7800. Reduce code dependency on Wine.
JIRA issue: CORE-5743
- Wrap DLL_WINE_PREATTACH usage by #ifndef
  __REACTOS__ and #endif.
- Undefine DLL_WINE_PREATTACH macro in
  sdk/include/xdk/winnt_old.h.
2025-03-22 08:04:55 +09:00
Mark Jansen
59f0ec1fdf Update the readme for 0.4.15 2025-03-21 22:39:23 +01:00
Dmitry Borisov
5fb6fad175 [FREELDR] iso.c: Remember the last directory that was accessed (#7734)
This patch reduces the number of sectors read by 709 (from 8788 to 8079)
2025-03-21 22:17:29 +01:00
Dmitry Borisov
564be44f45 [FREELDR] iso.c: Remove a redundant zero initialization of the FileName buffer (#7734)
The FileName buffer is NUL-terminated later on.
2025-03-21 22:17:11 +01:00
Dmitry Borisov
b931c51937 [FREELDR] iso.c: Avoid unnecessary zero-init and copy of the file info structure (#7734)
FileHandle gets initialized completely in IsoSearchDirectoryBufferForFile()

- Also mark some functions as static.
2025-03-21 22:15:54 +01:00
Dmitry Borisov
61ee431169 [FREELDR] iso.c: Cache the PVD information for ISO volumes (#7734)
This patch reduces the number of sectors read by 41 (from 8829 to 8788)
2025-03-21 22:15:43 +01:00
Katayama Hirofumi MZ
2ffc6d281b [BOOTDATA] Follow-up of #7795; Modify NLS registry (#7799)
Follow-up of #7795. This affects
boot condition of es-CR, rm-CH,
ur-PK, fa-IR, vi-VN, ka-GE, bn-IN
and my-MM users.
EDIT: These languages are not
supported in
base/setup/usetup/
muilanguages.h yet.

JIRA issue: CORE-19496

Modify boot/bootdata/hivesys.inf t
o change the values of
HKEY_LOCAL_MACHINE\SYSTEM\
CurrentControlSet\Control\Nls\
Language and HKEY_LOCAL_MACHINE\SYSTEM\
CurrentControlSet\Control\Nls\
Locale registry keys.
2025-03-22 06:01:56 +09:00
Whindmar Saksit
56e7afe56c [SHDOCVW][SHELL32] Rename RegItem to empty name must reset the name to the default (#7794)
CORE-18839
2025-03-21 13:51:45 +01:00
Katayama Hirofumi MZ
27bb510282 [FREETYPE] Fix WordPad ruler rendering (#7803)
Based on @Doug-Lyons's wordpad-ruler-fix-05.patch.
JIRA issue: CORE-19870
In IntRequestFontSize function, if lfWidth < 10, then
req.width = 0;.

Co-authored-by: Doug Lyons <douglyons@douglyons.com>
2025-03-21 08:52:20 +09:00
Whindmar Saksit
7dc7b866b1 [RAPPS] Don't delete downloaded ZIP/CAB even if configured to (#7791) 2025-03-20 14:32:07 +01:00
Whindmar Saksit
7f49ae633b [SHELL32] Multiple drives property sheet support (#7787)
Supports multiple drives in a single property sheet

CORE-20025
2025-03-20 13:33:51 +01:00
Whindmar Saksit
d769f5675d [RAPPS] Must apply settings changes when a new download folder is created (#7792) 2025-03-19 12:24:52 +01:00
Johannes Anderwald
dba4efbcae [USBCCGP] [USBPORT] USB Stack improvements (#7740)
[USBCCGP]

Ignore invalid devices
Group audio function interfaces together
[USBPORT]

Prevent infinite loop in USBPORT_OpenPipe when endpoint is not becoming ready
2025-03-19 01:35:36 -07:00
Katayama Hirofumi MZ
4bc97ad145 [BOOTDATA] Arabic, Hong Kong, Singapore, come back! (#7795)
JIRA issue: CORE-19496
Modify boot/bootdata/hivesys.inf to change
the values of registry key HKEY_LOCAL_MACHINE\
SYSTEM\CurrentControlSet\Control\Nls\Locale.
2025-03-19 09:40:38 +09:00
Whindmar Saksit
4a1877d0f6 [NTDLL][SHLWAPI][SYSDM] ReportAsWorkstation should always override the product type (#7052)
Allows "ROS as a workstation" installs to report itself as a basic server to Win32 applications when the user toggles the sysdm.cpl checkbox (to unchecked in this case).
2025-03-19 00:10:46 +01:00
Daniel Victor
19c1f5661f [BOOTSECT][FREELDR] Fix wrong comment of conditional jump on ext.S and extldr.S (#7798) 2025-03-18 23:52:56 +01:00
Hermès Bélusca-Maïto
2e47094764 [SYSSETUP] Apply theming from unattend files very early on when booting the LiveCD or a new install (#7797)
Use a `[Shell]` section with `DefaultThemesOff` and `CustomDefaultThemeFile`
values, specifying respectively whether to use the classic theme or a
custom one, and the complete path to the custom .theme (or .msstyles) file.

These values are compatible with those documented in the
"MS Windows Preinstallation Reference" help file
of the Windows installation CD (DEPLOY.CAB\ref.chm)

[BOOTDATA] bootcd/unattend.inf: Use the Shell/CustomDefaultThemeFile value to specify which theme to use
2025-03-18 23:02:34 +01:00
Curtis Wilson
8e2d1b358c [PING] Update SendBuffer fill method (#7782)
The ping utility found in various versions of Windows fills the optional
data field in the ICMP echo request structure with ASCII characters from
'a' to 'w' wrapping back around until SendBuffer is full.

Future TO-DO: Compare ReplyBuffer data to SendBuffer.
2025-03-18 22:05:06 +01:00
Dmitry Borisov
787f81f3f5 [FREELDR] Refactor and optimize the IDE driver (#7728)
[DDK] Update IDENTIFY data and other ATA definitions.
Based on the MinGW header.

[FREELDR] Refactor and optimize the IDE driver.
Fix long-standing bugs, which have a negative impact on the boot stability.

- Make the driver more ATA specification compliant.
- Improve the speed of device detection.
- Remove inconsistent delays.
- Support modern hard drives with sector size greater than 512 bytes.
- Add basic error recovery.
- Move private definitions to a separate private header.
- Remove the useless AtaFree API method.
2025-03-18 21:56:25 +01:00
Daniel Victor
ddf55b3772 [BOOTSECT][FREELDR] Rewrite the Ext bootsector (#7544)
Rewrite the Ext bootsector because the older one was broken and had no compatibility with Ext4 extents.
Introduce a 3rd-stage bootsector for complex code.

CORE-14235

- Why was the previous bootsector broken?
  Because of hardcoded inode size, hardcoded freeldr base address, etc.

- Why is there a extldr.sys?
  The extldr.sys was introduced because the limited code space in the bootsector
  prevents adding new features, such as Ext4 full extents support.

- What is extldr.sys and What does it do?
  It is the helper file for the Ext bootsector and that is necessary for adding
  Ext4 support. It locates the freeldr.sys file, loads it into memory and runs it.
2025-03-18 21:53:47 +01:00
Hermès Bélusca-Maïto
7c61e5769f [CONFIGURE] Display the operating system on which the build config takes place (#7774) 2025-03-18 21:39:19 +01:00
Hermès Bélusca-Maïto
9da45923b3 [CONFIGURE] Adjust some echo'ed strings (#7773)
[CONFIGURE.CMD] Use multi-command syntax instead of AND operator for successive echo's
And adjust few strings.

[CONFIGURE.SH] Quote the echo'ed strings, and adjust some of them.
2025-03-18 21:20:32 +01:00
Hermès Bélusca-Maïto
57fa5a22de [GIT] Ensure .sh script files use LF (Unix) line endings (#7772)
For example, this is what's expected by Cygwin (ba)sh on Windows.
2025-03-18 20:17:40 +01:00
Timo Kreuzer
9a093ecbe9 [FREELDR] Fix menu display on VMware
When drawing the menu, the boot options should not be overwritten, but when clearing the screen, everything needs to be drawn, otherwise there will be uninitialized characters at the bottom. See CORE-20014.
2025-03-18 00:36:40 +02:00
Eric Kohl
bcedb5314c [SYSETUP] Set the tcpip service hostname parameter even if the service key does not exist yet 2025-03-16 14:14:58 +01:00
Whindmar Saksit
c6b134123b [SHELL32] Initialize COM for PickIconDlg (#7788)
CORE-20030
2025-03-16 10:09:31 +01:00
Whindmar Saksit
96aa1eee17 [LNKTOOL][SHELL32] Add utility to create/dump .lnk files (#7745)
Unlike mkshelllink, this uses the native COM interface to create the link.
2025-03-15 16:31:22 +01:00
Katayama Hirofumi MZ
75c0dc0cd8 [EXPLORER][COMCTL32][SHELL32] Enable SPI_SETICONTITLELOGFONT (#7783)
Enable desktop icon title font setting.
JIRA issue: CORE-13601
- Forward WM_SETTINGCHANGE message up to
  ListView.
- ListView accepts WM_SETTINGCHANGE message.
- Enable icon spacing.
2025-03-15 09:31:15 +09:00
Hermès Bélusca-Maïto
8e53386de9 [SETUPLIB][REACTOS][USETUP] Don't export setup data. Make IsUnattendedSetup local to the installer. 2025-03-14 21:38:39 +01:00
Hermès Bélusca-Maïto
8d80203d65 [SDK:MC] Fix basic english typos in some messages. 2025-03-14 21:38:38 +01:00
Katayama Hirofumi MZ
135a9a95b8 [DXDIAG] Romanian (ro-RO): Fix unrecognized escape sequence (#7781)
JIRA issue: N/A
Fix IDS_DDPRIMARY_DESCRIPTION
escape sequence.
2025-03-13 22:57:08 +09:00
Katayama Hirofumi MZ
e6302ccd70 [REGEDIT] Reduce flickering and fix rendering (#7747)
JIRA issue: CORE-19970
- Fix status bar toggling.
- Improve behaviour of splitter.
- Add (WS_CLIPCHILDREN |
  WS_CLIPSIBLINGS) style to
  ChildWnd.
2025-03-13 19:33:14 +09:00
Justin Miller
656a5dcc1f [NTOS:KE] Implement KeI386VirtualIntExtensions code paths for INT and IRET. CORE-19049 (#7742)
Co-authored-by: Thomas Faber <thomas.faber@reactos.org>
Co-authored-by: Hermès BÉLUSCA - MAÏTO <hermes.belusca-maito@reactos.org>

Continued from PR #6070

JIRA issue: CORE-19049
2025-03-12 05:24:36 -07:00
Doug Lyons
5c505d9a9b [NTUSER] Handle window update region larger than the current window in clip region (#7731)
CORE-18206 CORE-18799 CORE-19371

Fixes infinite loop of:
  err: Message WM_PAINT count 1 Internal Paint Set? FALSE

The symptom appears in the following scenario (as reported in CORE-18799):

A program (game) runs at a small resolution (e.g. 640 x 480), but the
game window gets invalidated at a larger size (e.g. 1152 x 864 screen
resolution) before switching to the smaller (640 x 480) size.
Because of this, the window's update region is larger than the current
window so only the 640 x 480 region gets validated leaving the remaining
region invalid. This causes the recurring WM_PAINT messages because there
is no way to invalidate the remaining area.
2025-03-12 12:18:53 +01:00
Hermès Bélusca-Maïto
f37138ce91 [NTOS:OB] Allow ObpCaseInsensitive to be configured via registry (#7751)
This feature can be controlled by the system policy:
"System objects: Require case insensitivity for non-Windows subsystems"
https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/jj852277(v=ws.11)

It is also used in conjunction with NTFS to get system-wide filesystem case-sensitivity:
https://www.betaarchive.com/wiki/index.php/Microsoft_KB_Archive/929110

This is controlled with a REG_DWORD value named `ObCaseInsensitive`
inside the registry key
`HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Kernel` .

Object case (in)sensitivity check is done in the ObpLookupObjectName() helper.
The `ObpCaseInsensitive` variable is used to retrieve the data,
hence it needs to be a ULONG.
2025-03-11 19:15:02 +01:00
Hermès Bélusca-Maïto
c71845ee8c [NTOS:OB] ObpLookupEntryDirectory(): SearchShadow is a BOOLEAN 2025-03-11 19:12:36 +01:00
Hermès Bélusca-Maïto
bc62c17a7f [KERNEL32][NTDLL][NTOS][WIN32K] Fix and sync the exports for RtlUnwindEx and RtlVirtualUnwind (#7749) 2025-03-11 18:59:22 +01:00
Ratin Gao
275c40d26d [CRYPT32] Initial implementation of CertEnumSystemStoreLocation() (#7746)
Initial implementation of `CertEnumSystemStoreLocation`, which is required by the latest "VirtualBox Guest Additions".

This function returns 8 fixed hard-coded system stores and registered OID system stores, this PR didn't implement the latter because `CryptEnumOIDFunction` is unimplemented, marked as FIXME.
2025-03-11 14:17:38 +01:00
Miguel Almeida
b45debb93a [COMCTL32] Fix shift-selecting files not working as expected in small/large icons views (#7729)
CORE-10386

Fixes the behavior when selecting multiple files in a folder with the Shift key, while using either the Large Icons or Small Icons view, so that it is consistent with how it works on Windows.

Proposed changes:
Disable the specialized code for these views in LISTVIEW_SetGroupSelection, using the same code as for the list and details views, which also works fine for them.
2025-03-11 13:49:39 +01:00
Owen Utley
14f8f7e3bd [THEMES][MIZU] New bitmaps to replace old Lautus ones (#7775) 2025-03-11 12:04:53 +03:00
Dmitry Borisov
029e53ddb5 [MINIHAL] Minor improvements (#7398)
* [FREELDR] Mark noreturn functions

* [FREELDR] Compile hw debugging support code only in debug builds

- Make BREAKPOINT() portable

* [FREELDR] Consolidate identical names into a single string

* [FREELDR] Use intrinsics for string I/O operations on x86 and x64

Stop them being pulled in from a static minihal library

* [MINIHAL] Exclude unnecessary portio dependency
2025-03-11 10:30:14 +03:00
Whindmar Saksit
0089017d54 [SHELL32] Don't close icon dialog when selecting from autocomplete (#7766) 2025-03-09 22:00:16 +01:00
Whindmar Saksit
5af47c9baf [BROWSEUI] Set AddressBand Go button checkbox state correctly in menu (#7771)
CORE-20018
2025-03-09 21:59:03 +01:00
Whindmar Saksit
5461abeeba [SHELL32][SHELL32_APITESTS] SHDefExtractIcon zero icon size as sysmetric (#7768) 2025-03-09 15:41:53 +01:00
Justin Miller
bdda5b93d7 [PSAPI][KERNEL32] Convert the PSAPI exports to a static library (#7708)
This behavior is straight out of win7 where this logic was moved to
KernelBase and friends. Required for thousands of apps. But also just
preps for the KernelBase sync from Wine-10

Co-authored-by: Hermès BÉLUSCA - MAÏTO <hermes.belusca-maito@reactos.org>
2025-03-09 04:09:59 -07:00
Justin Miller
6dccccc2a3 [USER32_VISTA][USER32] Sync some parts with WINE-10.0 2025-03-09 04:07:55 -07:00
Justin Miller
245513e7ec [USER32_VISTA] Import input.c misc.c win.c from wine-10.0 2025-03-09 04:07:55 -07:00
Katayama Hirofumi MZ
1786a68256 [EVENTVWR] Localize and check item count (#7757)
Don’t display garbage to the users.
JIRA issue: CORE-19786
- Localize message text by using
  newly added
  IDS_CONTFROMBEGINNING
  and IDS_CONTFROMEND
  resource strings.
- Check item count before
  showing next/previous item.
- Add EnableEventDetailsButtons
  function.
2025-03-09 06:55:05 +09:00
Katayama Hirofumi MZ
0898bd371d [CURSOR] Add Cursor AI project settings (#7752)
AI-friendly development for the future.
JIRA issue: CORE-20011
- Reduce time and cost on using Cursor AI.
- Improve interoperability with Cursor AI.
- Add .cursor folder and some files.
- Modify .gitignore.
2025-03-08 22:35:40 +09:00
Whindmar Saksit
f844296b0a [BROWSEUI][SHELL32] Fix FindFolder icons (#7756)
- Shortcut icons require the correct IShellFolder because it needs the full path.
- Items in a drive root needs the final backslash to be part of the path.

CORE-18692
2025-03-08 14:30:04 +01:00
Whindmar Saksit
acbadb9fba [USER32] PrivateExtractIcons must return 0 for empty files (#7767)
This bug breaks the documented S_FALSE return value for SHDefExtractIconW when the icon is not found.
2025-03-08 13:34:23 +01:00
Katayama Hirofumi MZ
d1d300b44b [REACTOS] Add CODING_STYLE.md (#7753)
JIRA issue: CORE-20011
- Add CODING_STYLE.md at the root
  directory.
- This CODING_STYLE.md is generated
  from HTML text of
  https://reactos.org/wiki/Coding_Style
2025-03-08 18:57:17 +09:00
Katayama Hirofumi MZ
115cf65ebf [EVENTVWR] Reduce lines (#7758)
JIRA issue: N/A
- Reduce lines in InitInstance function.
2025-03-07 07:06:38 +09:00
Katayama Hirofumi MZ
13894e2da0 [SNDVOL32] Improve Japanese (ja-JP) translation (#7765)
JIRA issue: CORE-18706
2025-03-06 20:26:18 +09:00
Katayama Hirofumi MZ
b728d330c2 [SHUTDOWN] Improve Japanese (ja-JP) translation (#7764)
JIRA issue: CORE-18706
2025-03-06 20:14:24 +09:00
Katayama Hirofumi MZ
02acdae022 [MSCONFIG] Add Japanese (ja-JP) translation (#7763)
JIRA issue: CORE-18706
2025-03-06 19:56:32 +09:00
Katayama Hirofumi MZ
cf96d9175f [MPLAY32] Improve Japanese (ja-JP) translation (#7762)
JIRA issue: CORE-18706
2025-03-06 19:41:33 +09:00
Katayama Hirofumi MZ
118940ed9a [DRWTSN32] Add Japanese (ja-JP) translation (#7761)
JIRA issue: CORE-18706
2025-03-06 19:33:03 +09:00
Katayama Hirofumi MZ
5c8d677356 [FINDSTR] Add Japanese (ja-JP) translation (#7760)
JIRA issue: CORE-18706
2025-03-06 19:27:08 +09:00
Katayama Hirofumi MZ
84f3a2b1d1 [SERVMAN] Update Japanese (ja-JP) translation (#7759)
JIRA issue: CORE-18706
2025-03-06 19:20:04 +09:00
Whindmar Saksit
fc6330a01a [SHDOCVW] Don't show create shortcut context menu item in Explorer tree (#7735) 2025-03-05 13:41:02 +01:00
Whindmar Saksit
4a0f0ddbd7 Implement GetDefaultColumn and GetClassID (#7750) 2025-03-05 13:40:10 +01:00
Justin Miller
a8cd1eac1d [NTDLL] Fix Vista+ stubs (#7672)
Mostly based on Windows 11 22H2 and Vista SP2 and WINE-10.0

Co-authored-by: Adam Słaboń <asaillen@protonmail.com>
Co-authored-by: Timo Kreuzer <timo.kreuzer@reactos.org>
2025-03-05 01:24:22 -08:00
Timo Kreuzer
c6853581c5 [NTOS:MM] Fix broken ASSERT
There is no guarantee that all pages in the requested range actually exist.
2025-03-04 15:24:53 +02:00
Ratin Gao
4d605ec26f [NTOS:MM:PS] Little fixes for NTDLL loading (#7707)
- [NTOS:PS] `STATUS_INVALID_IMAGE_PROTECT` returned by `MmCheckSystemImage` should be a fatal error too.
- [NTOS:PS] Fix object attributes for opening NTDLL.
- [NTOS:MM] Remove `MmCheckSystemImage` unused parameter.
- [NTOS:MM] Inline `MmVerifyImageIsOkForMpUse` in `MmCheckSystemImage`, reducing a call to `RtlImageNtHeader`.
2025-03-03 20:36:21 +01:00
Hermès Bélusca-Maïto
7c23a2e38e [NTOS:MM] Split MmVerifyImageIsOkForMpUse() into an auxiliary inlined helper.
This helper is used when an existing NtHeader is already available.
2025-03-03 20:30:54 +01:00
Ratin Gao
ccf1e97aa1 [NTDLL_VISTA:LDR] Implement DLL Notification (#6795)
Implement DLL Load Notification, an NT6+ feature.
https://learn.microsoft.com/en-us/windows/win32/devnotes/dll-load-notification

- [RTL] Sync `RTL_STATIC_LIST_HEAD` and `RtlFailFast` from XDK to NDK.
- [NTDLL_VISTA] Introduce ntdll_vista_static static library and link both ntdll_vista and ntdll to it.
- [NDK][LDR] Add and fix DLL Notification definitions.
- [NTDLL_VISTA] Code improvements.
- [NTDLL_VISTA:LDR] Implement Dll Notification.
- [NTDLL][NTDLL_APITEST] Add Dll Notification API test.
2025-03-02 21:13:33 +01:00
Miguel Almeida
6988b4e2c4 [EXPLORER] Add Show Desktop button to taskbar customization preview (#7727)
Use a 4D lookup table for the notification area settings preview, instead of many if cases.

CORE-19738
2025-03-02 20:56:30 +01:00
Daniel Victor
afb96acfdd [FREELDR] Use the OFF(x) macro on realmode assembly files 2025-03-02 19:09:46 +01:00
Daniel Victor
9c5efed7da [ASM] Move OFF(x) macro from asmxtras.inc to asm.inc 2025-03-02 19:09:46 +01:00
Max Korostil
606e996e1f [UNIATA] Fix memory corruption if SCSIOP_SERVICE_ACTION16 processed. (#7717)
Reason: the size of `READ_CAPACITY16_DATA` struct in UniATA driver and ReactOS/Windows SDK were not equal.

- In UniATA driver: `sizeof(READ_CAPACITY16_DATA) == 33` (wrong);
- In ReactOS/Windows SDK: `sizeof(READ_CAPACITY16_DATA) == 32` (correct).

CORE-19696
2025-03-02 19:07:34 +01:00
Andrei Miloiu
e36c669d97 [DXDIAG] Update Romanian (ro-RO) translation (#7359)
Improvements based on recent Romanian translation document revision 06e89b2.

This file was not translated in Romanian language in any Win version (neither XP/2k3+, nor in the previous ones). I tried to translate this file as close as possible in the way I did in the previous PRs.
2025-03-02 17:33:34 +01:00
Eric Kohl
da5192e622 [BOOTDATA][NETSHELL][INF] Improvements to the network setup
- Fix the network setup wizard start page.
- Add the ndisuio driver to the network setup.
- Remove the tcpip driver from the system setup.
2025-03-02 15:07:36 +01:00
Whindmar Saksit
f1a66daeeb [SHELL32] Display cut items as ghosted (#7739)
- When Ctrl+X is pressed on a selected item, it will appear ghosted until another clipboard action takes place.
- Generate SHCNE_UPDATE* notifications when file attributes change.
- When an items hidden attribute is changed (filesystem notification), we must update the ghosted state.

CORE-9465
2025-03-02 13:07:23 +01:00
Eric Kohl
c3505bb4f6 [NETSHELL] Reverted the removal of the unattended setup support for the network settings page.
I removed the unattended setup support by accident.
This should fix our automatic tests.
2025-03-02 13:01:58 +01:00
Eric Kohl
abb04ec321 [NETSHELL] Fix build error 2025-03-02 10:28:13 +01:00
Eric Kohl
6b9122b5f5 [NETSHELL][SYSSETUP] Move network installer code to the network setup wizard pages
- Add a new page to the network setup wizard that installs the required network components in a background thread.
- Remove the network setup code from syssetup.dll.

TODO: Move the network setup code for the LiveCD.
2025-03-02 09:53:06 +01:00
Timo Kreuzer
a86055a037 [COMCTL32_APITEST] Rename a test
The test name was conflicting with an existing winetest, which breaks testman.
2025-03-01 19:01:21 +02:00
Eric Kohl
7f248437e8 [NETCFGX] Simple implementation of INetCfgClassSetup.Install()
Import device installer code from syssetup.dll.
This is the first step to move the network component installer code from syssetup.dll to netcfgx.dll and netshell.dll.
2025-03-01 15:43:34 +01:00
Whindmar Saksit
9a55c931f8 [BROWSEUI][SHELL32] Fix desktop and computer find files locations (#7721)
- Searching the Desktop now searches the two desktop folders.
- Searching My Computer now searches all local disks.
- Adds a "Browse..." entry to the combobox list.
2025-02-28 18:52:48 +01:00
Whindmar Saksit
556cc8a7b2 [BROWSEUI] Set find files pane focus (#7722)
CORE-16424
2025-02-28 16:57:08 +01:00
1487 changed files with 73476 additions and 60111 deletions

19
.cursor/coding-style.json Normal file
View File

@@ -0,0 +1,19 @@
{
"indentation": {
"type": "spaces",
"size": 4
},
"lineLength": 100,
"braceStyle": "allman",
"namingConventions": {
"functions": {
"public": "PascalCase",
"private": "_PascalCase"
},
"variables": {
"local": "camelCase",
"global": "PascalCase",
"constants": "UPPER_CASE"
}
}
}

52
.cursor/editor.json Normal file
View File

@@ -0,0 +1,52 @@
{
"editor": {
"defaultFormatter": null
},
"[c,cpp]": {
"editor": {
"tabSize": 4,
"insertSpaces": true,
"detectIndentation": false,
"trimAutoWhitespace": true,
"formatOnSave": false,
"formatOnType": true,
"defaultFormatter": "clang-format",
"rulers": [100],
"wordWrap": "off"
}
},
"files": {
"associations": {
"*.c": "c",
"*.h": "c",
"*.cpp": "cpp",
"*.hpp": "cpp"
},
"encoding": "utf8",
"trimTrailingWhitespace": true,
"insertFinalNewline": true,
"exclude": {
"**/.git": true,
"compile_commands.json": true,
"output-*": true,
"modules/optional": true,
"modules/3rdparty": true,
"modules/bootcd_extras": true,
"modules/livecd_extras": true,
"modules/hybridcd_extras": true,
"modules/[Aa][Hh][Kk]_[Tt]ests": true,
".cache": true,
".cproject": true,
".DS_Store": true,
".project": true,
".settings": true,
".vscode": true,
"sdk/tools/winesync/winesync.cfg": true,
"**/build": true,
"**/obj": true,
"**/bin": true,
"**/*.o": true,
"**/*.obj": true
}
}
}

46
.cursor/settings.json Normal file
View File

@@ -0,0 +1,46 @@
{
"projectType": "reactos",
"language": {
"c": {
"standard": "c99",
"warnings": ["all", "error", "pedantic", "unused"],
"formatter": "clang-format",
"linter": "clang-tidy"
},
"cpp": {
"standard": "c++11",
"warnings": ["all", "error", "pedantic", "unused"],
"formatter": "clang-format",
"linter": "clang-tidy"
}
},
"codingStyle": "reactos",
"formatOnSave": false,
"lintOnSave": false,
"paths": {
"source": [
"base",
"boot",
"dll",
"drivers",
"hal",
"ntoskrnl",
"subsystems",
"win32ss"
],
"include": [
"sdk/include"
],
"docs": [
"**/*.md",
"media/doc/*.md",
"media/doc/*.txt"
],
"tests": [
"modules/rostests"
],
"build": [
"output-*"
]
}
}

3
.gitattributes vendored
View File

@@ -30,6 +30,9 @@
*.TXT text
*.y text
# Files with these extensions must always have LF (Unix) line endings.
*.sh text eol=lf
# Files with these extensions end up in the built ReactOS system, so they
# need to have CRLF line endings.
*.bat text eol=crlf

View File

@@ -17,3 +17,8 @@ _Use a TODO when your pull request is Work in Progress._
- [ ]
- [ ]
## Testbot runs (Filled in by Devs)
- [ ] KVM x86:
- [ ] KVM x64:

2
.gitignore vendored
View File

@@ -13,3 +13,5 @@ modules/[Aa][Hh][Kk]_[Tt]ests
.settings
.vscode
sdk/tools/winesync/winesync.cfg
.cursor/cache/
.cursor/logs/

View File

@@ -68,6 +68,9 @@ include(sdk/cmake/config.cmake)
# Compiler flags handling
include(sdk/cmake/compilerflags.cmake)
# set_wine_module function
include(sdk/cmake/set_wine_module.cmake)
add_definitions(
-D__REACTOS__
# swprintf without count argument is used in most of the codebase
@@ -157,7 +160,10 @@ if(NOT CMAKE_CROSSCOMPILING)
set(NATIVE_TARGETS asmpp bin2c widl gendib cabman fatten hpp isohybrid mkhive mkisofs obj2bin spec2def geninc mkshelllink utf16le xml2sdb)
if(NOT MSVC)
list(APPEND NATIVE_TARGETS rsym pefixup)
list(APPEND NATIVE_TARGETS pefixup)
if (ARCH STREQUAL "i386")
list(APPEND NATIVE_TARGETS rsym)
endif()
endif()
install(TARGETS ${NATIVE_TARGETS})

View File

@@ -116,6 +116,20 @@
# S: Abandoned
/ntoskrnl/cache/
# Client/Server Runtime Subsystem
# M: HBelusca, Hermès Bélusca-Maïto
# S: Maintained
/sdk/include/reactos/subsys/csr/ @HBelusca
/subsystems/csr/ @HBelusca
/win32ss/user/ntuser/csr.* @HBelusca
# Clipboard Viewer
# M: HBelusca, Hermès Bélusca-Maïto
# R: Mondgestein, Ricardo Hanke
# S: Maintained
/base/applications/clipbrd/ @HBelusca
/base/applications/cmdutils/clip/ @HBelusca
# CMake Build Scripts
# M:
# R: learn-more, learn_more, Mark Jansen
@@ -124,6 +138,56 @@
/sdk/cmake/
*.cmake
# Command-line Utilities
# M: HBelusca, Hermès Bélusca-Maïto
# S: Maintained
/base/applications/cmdutils/attrib/ @HBelusca
/base/applications/cmdutils/chcp/ @HBelusca
/base/applications/cmdutils/doskey/ @HBelusca
/base/applications/cmdutils/eventcreate/ @HBelusca
/base/applications/cmdutils/find/ @HBelusca
/base/applications/cmdutils/help/ @HBelusca
/base/applications/cmdutils/mode/ @HBelusca
/base/applications/cmdutils/more/ @HBelusca
/base/applications/cmdutils/taskkill/ @HBelusca
/base/applications/cmdutils/timeout/ @HBelusca
/sdk/lib/conutils/ @HBelusca
# Command-line Prompt Interpreter
# M: HBelusca, Hermès Bélusca-Maïto
# S: Maintained
/base/shell/cmd/ @HBelusca
# Console Client/Server Subsystem, Terminal Emulator / Text-Mode
# M: HBelusca, Hermès Bélusca-Maïto
# S: Maintained
/dll/cpl/console/ @HBelusca
/dll/win32/kernel32/client/console/ @HBelusca
/dll/win32/kernel32/include/console.h @HBelusca
/drivers/base/condrv/ @HBelusca
/drivers/setup/blue/ @HBelusca
/modules/rostests/winetests/kernel32/console.c @HBelusca
/sdk/include/reactos/drivers/condrv/ @HBelusca
/sdk/include/reactos/drivers/blue/ @HBelusca
/sdk/include/reactos/subsys/win/conmsg.h @HBelusca
/sdk/include/reactos/subsys/win/console.h @HBelusca
/win32ss/user/ntuser/console.c @HBelusca
/win32ss/user/winsrv/concfg/ @HBelusca
/win32ss/user/winsrv/consrv/ @HBelusca
# Event Log Subsystem
# M: HBelusca, Hermès Bélusca-Maïto
# M: EricKohl, ekohl, Eric Kohl
# S: Maintained
/base/services/eventlog/ @EricKohl @HBelusca
/dll/win32/advapi32/service/eventlog.c @EricKohl @HBelusca
/sdk/lib/evtlib/ @HBelusca
# Event Log Viewer
# M: HBelusca, Hermès Bélusca-Maïto
# S: Maintained
/base/applications/mscutils/eventvwr/ @HBelusca
# File Patch API
# M: learn-more, learn_more, Mark Jansen
# S: Maintained
@@ -139,7 +203,7 @@
# Filesystem Filter Manager
# M: gedmurphy, Ged, Ged Murphy
# S: Maintained
/drivers/filters/fltmgr/ @gedmurphy
/drivers/filters/fltmgr/ @gedmurphy
# File Systems Run Time Library
# M: HeisSpiter, Heis Spiter, Pierre Schweitzer
@@ -150,11 +214,13 @@
/sdk/lib/drivers/ntoskrnl_vista/fsrtl.c @HeisSpiter
# Freeloader
# M:
# M: HBelusca, Hermès Bélusca-Maïto
# R: tkreuzer, ThePhysicist, Timo Kreuzer
# R: Extravert-ir, extravert34, Victor Perevertkin
# S: Maintained
/boot/freeldr/freeldr/ @tkreuzer @Extravert-ir
/boot/freeldr/freeldr/ @HBelusca @tkreuzer @Extravert-ir
/boot/rtl/ @HBelusca
/ntoskrnl/config/cmboot.c @HBelusca
# HAL / APIC
# M: tkreuzer, ThePhysicist, Timo Kreuzer
@@ -187,6 +253,12 @@
# S: Maintained
/drivers/storage/mountmgr/ @HeisSpiter
# MSConfig
# M: HBelusca, Hermès Bélusca-Maïto
# S: Maintained
/base/applications/msconfig/ @HBelusca
/base/applications/msconfig_new/ @HBelusca
# Network Drivers
# M:
# R: ThFabba, Thomas Faber
@@ -215,11 +287,29 @@
# S: Maintained
/dll/ntdll/ @HeisSpiter @learn-more @ThFabba @tkreuzer
# NT Virtual DOS Machine
# M: HBelusca, Hermès Bélusca-Maïto
# R: reactos573, aandrejevic, Aleksandar Andrejevic
# S: Maintained
/dll/win32/kernel32/client/vdm.c @reactos573 @HBelusca
/dll/win32/kernel32/include/vdm.h @reactos573 @HBelusca
/sdk/include/reactos/subsys/win/vdm.h @reactos573 @HBelusca
/ntoskrnl/vdm @reactos573 @HBelusca
/sdk/include/reactos/libs/fast486/ @reactos573 @HBelusca
/sdk/lib/fast486/ @reactos573 @HBelusca
/subsystems/mvdm/ @reactos573 @HBelusca
/subsystems/win/basesrv/vdm.* @reactos573 @HBelusca
# Printing
# M: ColinFinck, Colin Finck
# S: Maintained
/win32ss/printing/ @ColinFinck
# Program Manager
# M: HBelusca, Hermès Bélusca-Maïto
# S: Maintained
/base/shell/progman/ @HBelusca
# ReactOS API Tests
# M:
# R: learn-more, learn_more, Mark Jansen
@@ -232,7 +322,25 @@
# S: Maintained
/modules/rostests/kmtests/ @ThFabba
# ROS internals tools
# ReactOS Setup
# M: HBelusca, Hermès Bélusca-Maïto
# R: EricKohl, ekohl, Eric Kohl
# S: Maintained
/base/setup/ @HBelusca
/base/system/winlogon/setup.c @EricKohl
/dll/win32/setupapi/
/dll/win32/syssetup/ @EricKohl
/drivers/setup/ @HBelusca
/sdk/include/reactos/libs/syssetup/ @EricKohl
# ReactOS miscellaneous tools
# M:
# R: HBelusca, Hermès Bélusca-Maïto
# S: Maintained
/modules/rosapps/applications/cmdutils/cat/ @HBelusca
/modules/rosapps/applications/sysutils/utils/partinfo/ @HBelusca
# ReactOS internals tools
# M: HeisSpiter, Heis Spiter, Pierre Schweitzer
# S: Maintained
/modules/rosapps/applications/rosinternals/ @HeisSpiter
@@ -252,15 +360,26 @@
/modules/rostests/kmtests/ntos_se/ @GeoB99
/ntoskrnl/se/ @GeoB99
# Session Manager Subsystem
# M: HBelusca, Hermès Bélusca-Maïto
# S: Maintained
/base/system/smss/ @HBelusca
/sdk/include/reactos/subsys/sm/ @HBelusca
/sdk/lib/smlib/ @HBelusca
# Shell
# M:
# R: learn-more, learn_more, Mark Jansen
# R: yagoulas, Giannis Adamopoulos
# R: HBelusca, Hermès Bélusca-Maïto
# S: Maintained
/base/shell/explorer/ @learn-more @yagoulas
/base/shell/rshell/ @learn-more @yagoulas
/dll/win32/browseui/ @learn-more @yagoulas
/dll/win32/shell32/ @learn-more @yagoulas
/dll/win32/shell32/CShellLink.* @HBelusca
/dll/win32/shell32/CUserNotification.* @HBelusca
/dll/win32/shell32/systray.cpp @HBelusca
# Shell Extensions
# M:
@@ -311,8 +430,30 @@
# Win32 file functions
# M: HeisSpiter, Heis Spiter, Pierre Schweitzer
# R: HBelusca, Hermès Bélusca-Maïto
# S: Maintained
/dll/win32/kernel32/client/file/ @HeisSpiter
/dll/win32/kernel32/client/file/ @HeisSpiter
/dll/win32/kernel32/client/file/find.c @HBelusca
# Win32 Subsystem - User Server
# M:
# R: HBelusca, Hermès Bélusca-Maïto
# S: Maintained
/win32ss/user/winsrv/
/win32ss/user/winsrv/usersrv/harderror.c @HBelusca
# Win32 Subsystem Shutdown
# M: HBelusca, Hermès Bélusca-Maïto
# R: EricKohl, ekohl, Eric Kohl
# S: Maintained
/base/system/winlogon/sas.c @EricKohl @HBelusca
/base/system/winlogon/shutdown.c @EricKohl @HBelusca
/dll/win32/advapi32/misc/shutdown.c @EricKohl
/dll/win32/msgina/shutdown.c @EricKohl @HBelusca
/win32ss/user/ntuser/shutdown.* @HBelusca
/win32ss/user/user32/misc/exit.c @HBelusca
/win32ss/user/winsrv/consrv/shutdown.c @HBelusca
/win32ss/user/winsrv/usersrv/shutdown.c @HBelusca
# Windows Network File Systems functions
# M: HeisSpiter, Heis Spiter, Pierre Schweitzer
@@ -338,6 +479,11 @@
amd64/ @tkreuzer
/boot/freeldr/freeldr/arch/realmode/amd64.S @tkreuzer
# Wine DirectX
# M: DarkFire01, The_DarkFire_, Justin Miller
# S: Upstream
/dll/directx/wine/ @DarkFire01
# Translations
# This is the list of translation teams in ReactOS GitHub organization.
# If you want to be part of one - hit us at https://chat.reactos.org/

356
CODING_STYLE.md Normal file
View File

@@ -0,0 +1,356 @@
# Coding Style
This article describes general coding style guidelines, which should be used for new ReactOS code. These guidelines apply exclusively to C and C++ source files. The Members of ReactOS agreed on this document in the October 2013 meeting.
As much existing ReactOS code as possible should be converted to this style unless there are reasons against doing this (like if the code is going to be rewritten from scratch in the near future). See [Notes on reformatting existing code](#notes-on-reformatting-existing-code) for more details.
Code synchronized with other sources (like Wine) must not be rewritten. [3rd Party Files.txt](https://github.com/reactos/reactos/blob/master/media/doc/3rd%20Party%20Files.txt) and [WINESYNC.txt](https://github.com/reactos/reactos/blob/master/media/doc/WINESYNC.txt) files can be used for tracking synchronized files.
## File Structure
1. Every ReactOS source code file should include a file header like this:
```
/*
* PROJECT: ReactOS Kernel
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Does cool things like Memory Management
* COPYRIGHT: Copyright 2017 Arno Nymous <abc@mailaddress.com>
* Copyright 2017 Mike Blablabla <mike@blabla.com>
*/
```
Please use SPDX license identifiers available at https://spdx.org/licenses.
This makes our source file parseable by licensing tools!
You should add yourself to the `COPYRIGHT` section of a file if you did a major contribution to it and could take responsibility for the whole file or a part of it. Not more than 3 people shall be in that list for each file.
`FILE` line of the old header should be removed.
2. [Doxygen](https://doxygen.reactos.org/) documentation generator is used for ReactOS codebase, so use a proper header for functions, see [API Documentation](https://reactos.org/wiki/Documentation_Guidelines#API_Documentation) for details.
## Indentation and line width
1. Line width must be at most **100 characters**.
2. Do not add a space or tab at the end of any line.
3. Indent with **4 spaces**, don't use tabs!
4. Indent both a case label and the case statement of a switch statement.
**Right:**
```c
switch (Condition)
{
case 1:
DoSomething();
break;
case 2:
{
DoMany();
ManyMore();
OtherThings();
break;
}
}
```
**Wrong:**
```c
switch(Condition)
{
case 1:
DoSomething();
break;
case 2:
DoMany();
ManyMore();
OtherThings();
break;
}
```
5. When a function call does not fit onto a line, align arguments like this:
```c
FunctionCall(arg1,
arg2,
arg3);
```
6. Function headers should have this format (preserving the order as in the example):
```c
static // scope identifier
CODE_SEG("PAGE") // section placement
// other attributes
BOOLEAN // return type
FASTCALL // calling convention
IsOdd(
_In_ UINT32 Number);
```
## Spacing
1. Do not use spaces around unary operators.
**Right:** `i++;`
**Wrong:** `i ++;`
2. Place spaces around binary and ternary operators.
**Right:** `a = b + c;`
**Wrong:** `a=b+c;`
3. Do not place spaces before comma and semicolon.
**Right:**
```c
for (int i = 0; i < 5; i++)
DoSomething();
func1(a, b);
```
**Wrong:**
```c
for (int i = 0; i < 5 ; i++)
DoSomething();
func1(a , b) ;
```
4. Place spaces between control statements and their parentheses.
**Right:**
```c
if (Condition)
DoSomething();
```
**Wrong:**
```c
if(Condition)
DoSomething();
```
5. Do not place spaces between a function and its parentheses, or between a parenthesis and its content.
**Right:**
```c
func(a, b);
```
**Wrong:**
```c
func (a, b);
func( a, b );
```
## Line breaking
1. Each statement should get its own line.
**Right:**
```c
x++;
y++;
if (Condition)
DoSomething();
```
**Wrong:**
```c
x++; y++;
if (Condition) DoSomething();
```
## Braces
1. Always put braces (`{` and `}`) on their own lines.
2. One-line control clauses may use braces, but this is not a requirement. An exception are one-line control clauses including additional comments.
**Right:**
```c
if (Condition)
DoSomething();
if (Condition)
{
DoSomething();
}
if (Condition)
{
// This is a comment
DoSomething();
}
if (A_Very || (Very && Long || Condition) &&
On_Many && Lines)
{
DoSomething();
}
if (Condition)
DoSomething();
else
DoSomethingElse();
if (Condition)
{
DoSomething();
}
else
{
DoSomethingElse();
YetAnother();
}
```
**Wrong:**
```c
if (Condition) {
DoSomething();
}
if (Condition)
// This is a comment
DoSomething();
if (A_Very || (Very && Long || Condition) &&
On_Many && Lines)
DoSomething();
if (Condition)
DoSomething();
else {
DoSomethingElse();
YetAnother();
}
```
## Control structures
1. Don't use inverse logic in control clauses.
**Right:** `if (i == 1)`
**Wrong:** `if (1 == i)`
2. Avoid too many levels of cascaded control structures. Prefer a "linear style" over a "tree style". Use `goto` when it helps to make the code cleaner (e.g. for cleanup paths).
**Right:**
```c
if (!func1())
return;
i = func2();
if (i == 0)
return;
j = func3();
if (j == 1)
return;
...
```
**Wrong:**
```c
if (func1())
{
i = func2();
if (func2())
{
j = func3();
if (func3())
{
...
}
}
}
```
## Naming
1. Capitalize names of variables and functions. Hungarian Notation may be used when developing for Win32, but it is not required. If you don't use it, the first letter of a name must be a capital too (no lowerCamelCase). Do not use underscores as separators either.
**Right:**
```c
PLIST_ENTRY FirstEntry;
VOID NTAPI IopDeleteIoCompletion(PVOID ObjectBody);
PWSTR pwszTest;
```
**Wrong:**
```c
PLIST_ENTRY first_entry;
VOID NTAPI iop_delete_io_completion(PVOID objectBody);
PWSTR pwsztest;
```
2. Avoid abbreviating function and variable names, use descriptive verbs where possible.
3. Precede boolean values with meaningful verbs like "is" and "did" if possible and if it fits the usage.
**Right:**
```c
BOOLEAN IsValid;
BOOLEAN DidSendData;
```
**Wrong:**
```c
BOOLEAN Valid;
BOOLEAN SentData;
```
## Commenting
1. Avoid line-wasting comments, which could fit into a single line.
**Right:**
```c
// This is a one-line comment
/* This is a C-style comment */
// This is a comment over multiple lines.
// We don't define any strict rules for it.
```
**Wrong:**
```c
//
// This comment wastes two lines
//
```
## Null, false and 0
1. The null pointer should be written as `NULL`. In the rare case that your environment recommends a different null pointer (e.g. C++11 `nullptr`), you may use this one of course. Just don't use the value `0`.
2. Win32/NT Boolean values should be written as `TRUE` and `FALSE`. In the rare case that you use C/C++ `bool` variables, you should write them as `true` and `false`.
3. When you need to terminate ANSI or OEM string, or check for its terminator, use `ANSI_NULL`. If the string is Unicode or Wide string, use `UNICODE_NULL`.
## Notes on reformatting existing code
- Never totally reformat a file and put a code change into it. Do this in separate commits.
- If a commit only consists of formatting changes, say this clearly in the commit message by preceding it with *[FORMATTING]*.
## Other points
- Do not use `LARGE_INTEGER`/`ULARGE_INTEGER` unless needed for using APIs. Use `INT64`/`UINT64` instead
- Use `#pragma once` instead of guard defines in headers
- Don't specify a calling convention for a function unless required (usually for APIs or exported symbols)
## Using an automatic code style tool
TO BE ADDED BY User:Zefklop
## Points deliberately left out
Additional ideas were suggested during the discussion of this document, but a consensus couldn't be reached on them. Therefore we refrain from enforcing any rules on these points:
- TO BE ADDED BY User:Hbelusca
## See also
- [Kernel Coding Style](https://reactos.org/wiki/Kernel_Coding_Style)
- [GNU Indent](https://reactos.org/wiki/GNU_Indent)

View File

@@ -7,8 +7,8 @@
---
<p align=center>
<a href="https://reactos.org/project-news/reactos-0414-released/">
<img alt="ReactOS 0.4.14 Release" src="https://img.shields.io/badge/release-0.4.14-0688CB.svg"></a>
<a href="https://reactos.org/project-news/reactos-0415-released/">
<img alt="ReactOS 0.4.15 Release" src="https://img.shields.io/badge/release-0.4.15-0688CB.svg"></a>
<a href="https://reactos.org/download/">
<img alt="Download ReactOS" src="https://img.shields.io/badge/download-latest-0688CB.svg"></a>
<a href="https://sourceforge.net/projects/reactos/">

View File

@@ -3,6 +3,7 @@ add_subdirectory(atactl)
add_subdirectory(cacls)
add_subdirectory(calc)
add_subdirectory(charmap)
add_subdirectory(cleanmgr)
add_subdirectory(clipbrd)
add_subdirectory(cmdutils)
add_subdirectory(control)

View File

@@ -0,0 +1,9 @@
project(cleanmgr)
# The main application
add_subdirectory(cleanmgr)
# Cleanup handlers
#add_subdirectory(dataclen) # Data Driven Cleaner

View File

@@ -0,0 +1,212 @@
/*
* PROJECT: ReactOS Disk Cleanup
* LICENSE: MIT (https://spdx.org/licenses/MIT)
* PURPOSE: CCleanupHandler implementation
* COPYRIGHT: Copyright 2023-2025 Mark Jansen <mark.jansen@reactos.org>
*/
#include "cleanmgr.h"
CCleanupHandler::CCleanupHandler(CRegKey &subKey, const CStringW &keyName, const GUID &guid)
: hSubKey(subKey)
, KeyName(keyName)
, Guid(guid)
, dwFlags(0)
, Priority(0)
, StateFlags(0)
, SpaceUsed(0)
, ShowHandler(true)
, hIcon(NULL)
{
}
CCleanupHandler::~CCleanupHandler()
{
Deactivate();
::DestroyIcon(hIcon);
}
void
CCleanupHandler::Deactivate()
{
if (Handler)
{
DWORD dwFlags = 0;
Handler->Deactivate(&dwFlags);
if (dwFlags & EVCF_REMOVEFROMLIST)
UNIMPLEMENTED_DBGBREAK();
}
}
bool
CCleanupHandler::Initialize(LPCWSTR pcwszVolume)
{
if (FAILED_UNEXPECTEDLY(
::CoCreateInstance(Guid, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IEmptyVolumeCache, &Handler))))
{
return false;
}
DWORD dwSize = sizeof(Priority);
if (hSubKey.QueryBinaryValue(L"Priority", &Priority, &dwSize) != ERROR_SUCCESS)
{
if (hSubKey.QueryDWORDValue(L"Priority", Priority) != ERROR_SUCCESS)
Priority = 200;
}
dwSize = sizeof(StateFlags);
if (hSubKey.QueryDWORDValue(L"StateFlags", StateFlags) != ERROR_SUCCESS)
StateFlags = 0;
WCHAR PathBuffer[MAX_PATH] = {};
ULONG nChars = _countof(PathBuffer);
if (hSubKey.QueryStringValue(L"IconPath", PathBuffer, &nChars) != ERROR_SUCCESS)
{
CStringW Tmp;
WCHAR GuidStr[50] = {};
if (StringFromGUID2(Guid, GuidStr, _countof(GuidStr)))
{
Tmp.Format(L"CLSID\\%s\\DefaultIcon", GuidStr);
CRegKey clsid;
nChars = _countof(PathBuffer);
if (clsid.Open(HKEY_CLASSES_ROOT, Tmp, KEY_READ) != ERROR_SUCCESS ||
clsid.QueryStringValue(NULL, PathBuffer, &nChars) != ERROR_SUCCESS)
{
PathBuffer[0] = UNICODE_NULL;
}
}
}
if (!PathBuffer[0])
StringCchCopyW(PathBuffer, _countof(PathBuffer), L"%systemroot%\\system32\\shell32.dll");
int Index = 0;
WCHAR *ptr = wcschr(PathBuffer, L',');
if (ptr)
{
*ptr++ = UNICODE_NULL;
Index = wcstol(ptr, NULL, 10);
}
HICON Large, Small;
UINT Result = ExtractIconExW(PathBuffer, Index, &Large, &Small, 1);
if (Result < 1)
Result = ExtractIconExW(L"%systemroot%\\system32\\shell32.dll", 0, &Large, &Small, 1);
if (Result >= 1)
{
hIcon = Small;
if (!hIcon)
{
hIcon = Large;
}
else
{
::DestroyIcon(Large);
}
}
// These options should come from the command line
// dwFlags |= EVCF_SETTINGSMODE;
// dwFlags |= EVCF_OUTOFDISKSPACE;
CComPtr<IEmptyVolumeCache2> spHandler2;
HRESULT hr = Handler->QueryInterface(IID_PPV_ARG(IEmptyVolumeCache2, &spHandler2));
if (SUCCEEDED(hr))
{
hr = spHandler2->InitializeEx(
hSubKey, pcwszVolume, KeyName, &wszDisplayName, &wszDescription, &wszBtnText, &dwFlags);
if (FAILED_UNEXPECTEDLY(hr))
return false;
// No files to clean will return S_FALSE;
if (hr != S_OK)
return false;
}
else
{
// Observed behavior:
// When Initialize is called, wszDescription is actually pointing to data
// wszDescription.AllocateBytes(0x400u);
hr = Handler->Initialize(hSubKey, pcwszVolume, &wszDisplayName, &wszDescription, &dwFlags);
if (FAILED_UNEXPECTEDLY(hr))
return false;
// No files to clean will return S_FALSE;
if (hr != S_OK)
return false;
CComPtr<IPropertyBag> spBag;
WCHAR GuidStr[50] = {};
nChars = _countof(GuidStr);
if (hSubKey.QueryStringValue(L"PropertyBag", GuidStr, &nChars) == ERROR_SUCCESS)
{
GUID guid = {};
if (!FAILED_UNEXPECTEDLY(CLSIDFromString(GuidStr, &guid)))
{
FAILED_UNEXPECTEDLY(
CoCreateInstance(guid, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IPropertyBag, &spBag)));
}
}
ReadProperty(L"Display", spBag, wszDisplayName);
ReadProperty(L"Description", spBag, wszDescription);
if (dwFlags & EVCF_HASSETTINGS)
{
ReadProperty(L"AdvancedButtonText", spBag, wszBtnText);
}
}
if ((dwFlags & EVCF_ENABLEBYDEFAULT) && !(StateFlags & HANDLER_STATE_SELECTED))
{
StateFlags |= HANDLER_STATE_SELECTED;
}
// For convenience
if (!wszDisplayName)
SHStrDupW(KeyName, &wszDisplayName);
return true;
}
void
CCleanupHandler::ReadProperty(LPCWSTR Name, IPropertyBag *pBag, CComHeapPtr<WCHAR> &storage)
{
if (storage)
return;
if (pBag)
{
CComVariant tmp;
tmp.vt = VT_BSTR;
HRESULT hr = pBag->Read(Name, &tmp, NULL);
if (!FAILED_UNEXPECTEDLY(hr) && tmp.vt == VT_BSTR)
{
SHStrDupW(tmp.bstrVal, &storage);
}
}
if (!storage)
{
WCHAR TmpStr[0x200] = {};
DWORD dwSize = _countof(TmpStr);
if (hSubKey.QueryStringValue(Name, TmpStr, &dwSize) == ERROR_SUCCESS)
{
WCHAR ResolvedStr[0x200] = {};
SHLoadIndirectString(TmpStr, ResolvedStr, _countof(ResolvedStr), NULL);
SHStrDupW(ResolvedStr, &storage);
}
}
}
BOOL
CCleanupHandler::HasSettings() const
{
return !!(dwFlags & EVCF_HASSETTINGS);
}
BOOL
CCleanupHandler::DontShowIfZero() const
{
return !!(dwFlags & EVCF_DONTSHOWIFZERO);
}

View File

@@ -0,0 +1,48 @@
/*
* PROJECT: ReactOS Disk Cleanup
* LICENSE: MIT (https://spdx.org/licenses/MIT)
* PURPOSE: CCleanupHandler definition
* COPYRIGHT: Copyright 2023-2025 Mark Jansen <mark.jansen@reactos.org>
*/
#define HANDLER_STATE_SELECTED 1
struct CCleanupHandler
{
CCleanupHandler(CRegKey &subKey, const CStringW &keyName, const GUID &guid);
~CCleanupHandler();
void Deactivate();
bool
Initialize(LPCWSTR pcwszVolume);
void
ReadProperty(LPCWSTR Name, IPropertyBag *pBag, CComHeapPtr<WCHAR> &storage);
BOOL
HasSettings() const;
BOOL
DontShowIfZero() const;
CRegKey hSubKey;
CStringW KeyName;
GUID Guid;
CComHeapPtr<WCHAR> wszDisplayName;
CComHeapPtr<WCHAR> wszDescription;
CComHeapPtr<WCHAR> wszBtnText;
CStringW IconPath;
DWORD dwFlags;
DWORD Priority;
DWORD StateFlags;
CComPtr<IEmptyVolumeCache> Handler;
DWORDLONG SpaceUsed;
bool ShowHandler;
HICON hIcon;
};

View File

@@ -0,0 +1,163 @@
/*
* PROJECT: ReactOS Disk Cleanup
* LICENSE: MIT (https://spdx.org/licenses/MIT)
* PURPOSE: CCleanupHandlerList implementation
* COPYRIGHT: Copyright 2023-2025 Mark Jansen <mark.jansen@reactos.org>
*/
#include "cleanmgr.h"
void CCleanupHandlerList::LoadHandlers(WCHAR Drive)
{
m_DriveStr.Format(L"%c:", Drive);
CRegKey VolumeCaches;
if (VolumeCaches.Open(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\VolumeCaches", KEY_READ) != ERROR_SUCCESS)
return;
LONG ItemIndex = 0;
WCHAR szKeyName[MAX_PATH];
WCHAR wszVolume[] = { Drive, L':', L'\\', UNICODE_NULL };
while (TRUE)
{
DWORD dwSize = _countof(szKeyName);
if (VolumeCaches.EnumKey(ItemIndex++, szKeyName, &dwSize) != ERROR_SUCCESS)
{
break;
}
CRegKey hSubKey;
if (hSubKey.Open(VolumeCaches, szKeyName, KEY_READ) == ERROR_SUCCESS)
{
WCHAR GuidStr[50] = {};
dwSize = _countof(GuidStr);
if (hSubKey.QueryStringValue(NULL, GuidStr, &dwSize) != ERROR_SUCCESS)
{
continue;
}
GUID guid = {};
if (FAILED_UNEXPECTEDLY(CLSIDFromString(GuidStr, &guid)))
continue;
CCleanupHandler* handler = new CCleanupHandler(hSubKey, szKeyName, guid);
if (!handler->Initialize(wszVolume))
{
delete handler;
continue;
}
m_Handlers.AddTail(handler);
}
}
// Sort handlers
BOOL fChanged = m_Handlers.GetCount() > 0;
while (fChanged)
{
fChanged = FALSE;
for (size_t n = 0; n < m_Handlers.GetCount() - 1; n++)
{
POSITION leftPos = m_Handlers.FindIndex(n);
POSITION rightPos = m_Handlers.FindIndex(n+1);
CCleanupHandler* left = m_Handlers.GetAt(leftPos);
CCleanupHandler* right = m_Handlers.GetAt(rightPos);
if (right->Priority < left->Priority)
{
m_Handlers.SwapElements(leftPos, rightPos);
fChanged = TRUE;
}
else if (right->Priority == left->Priority)
{
CStringW leftStr(left->wszDisplayName);
if (leftStr.Compare(right->wszDisplayName) > 0)
{
m_Handlers.SwapElements(leftPos, rightPos);
fChanged = TRUE;
}
}
}
}
}
DWORDLONG
CCleanupHandlerList::ScanDrive(IEmptyVolumeCacheCallBack *picb)
{
CProgressDlg progress;
CString Caption;
Caption.Format(IDS_CALCULATING, m_DriveStr.GetString());
CStringW Title(MAKEINTRESOURCE(IDS_DISK_CLEANUP));
progress.Start((DWORD)m_Handlers.GetCount(), Title, Caption);
int ItemIndex = 0;
DWORDLONG TotalSpaceUsed = 0;
ForEach(
[&](CCleanupHandler *current)
{
Caption.Format(IDS_SCANNING, current->wszDisplayName.m_pData);
progress.Step(++ItemIndex, Caption);
HRESULT hr = current->Handler->GetSpaceUsed(&current->SpaceUsed, picb);
if (FAILED_UNEXPECTEDLY(hr))
{
current->ShowHandler = false;
current->StateFlags &= ~HANDLER_STATE_SELECTED;
return;
}
if (current->SpaceUsed == 0 && current->DontShowIfZero())
{
current->ShowHandler = false;
current->StateFlags &= ~HANDLER_STATE_SELECTED;
}
TotalSpaceUsed += current->SpaceUsed;
});
progress.Stop();
return TotalSpaceUsed;
}
void
CCleanupHandlerList::ExecuteCleanup(IEmptyVolumeCacheCallBack *picb)
{
CProgressDlg progress;
CString Caption;
Caption.Format(IDS_CLEANING_CAPTION, m_DriveStr.GetString());
DWORD TotalSelected = 0;
ForEach(
[&](CCleanupHandler *current)
{
if (current->StateFlags & HANDLER_STATE_SELECTED)
TotalSelected++;
});
CStringW Title(MAKEINTRESOURCE(IDS_DISK_CLEANUP));
progress.Start(TotalSelected, Title, Caption);
int ItemIndex = 0;
ForEach(
[&](CCleanupHandler *current)
{
if (!(current->StateFlags & HANDLER_STATE_SELECTED))
return;
Caption.Format(IDS_CLEANING, current->wszDisplayName.m_pData);
progress.Step(++ItemIndex, Caption);
// If there is nothing to clean, we might get STG_E_NOMOREFILES
if (current->SpaceUsed > 0)
{
HRESULT hr = current->Handler->Purge(-1, picb);
if (FAILED_UNEXPECTEDLY(hr))
return;
}
});
progress.Stop();
}

View File

@@ -0,0 +1,31 @@
/*
* PROJECT: ReactOS Disk Cleanup
* LICENSE: MIT (https://spdx.org/licenses/MIT)
* PURPOSE: CCleanupHandlerList definition
* COPYRIGHT: Copyright 2023-2025 Mark Jansen <mark.jansen@reactos.org>
*/
class CCleanupHandlerList
{
private:
CAtlList<CCleanupHandler *> m_Handlers;
CStringW m_DriveStr;
public:
void LoadHandlers(WCHAR Drive);
DWORDLONG ScanDrive(IEmptyVolumeCacheCallBack* picb);
void ExecuteCleanup(IEmptyVolumeCacheCallBack *picb);
template<typename Fn>
void ForEach(Fn callback)
{
for (POSITION it = m_Handlers.GetHeadPosition(); it; m_Handlers.GetNext(it))
{
CCleanupHandler *current = m_Handlers.GetAt(it);
callback(current);
}
}
};

View File

@@ -0,0 +1,54 @@
/*
* PROJECT: ReactOS Disk Cleanup
* LICENSE: MIT (https://spdx.org/licenses/MIT)
* PURPOSE: CEmptyVolumeCacheCallBack definition / implementation
* COPYRIGHT: Copyright 2023-2025 Mark Jansen <mark.jansen@reactos.org>
*/
// We don't really use this, but some windows handlers crash without it
struct CEmptyVolumeCacheCallBack
: public IEmptyVolumeCacheCallBack
{
STDMETHOD_(ULONG, AddRef)() throw()
{
return 2;
}
STDMETHOD_(ULONG, Release)() throw()
{
return 1;
}
STDMETHOD(QueryInterface)(
REFIID riid,
_COM_Outptr_ void** ppvObject) throw()
{
if (riid == IID_IUnknown || riid == IID_IEmptyVolumeCacheCallBack)
{
*ppvObject = (IUnknown*)this;
return S_OK;
}
*ppvObject = NULL;
return E_NOINTERFACE;
}
STDMETHODIMP ScanProgress(
_In_ DWORDLONG dwlSpaceUsed,
_In_ DWORD dwFlags,
_In_ LPCWSTR pcwszStatus) override
{
DPRINT("dwlSpaceUsed: %lld, dwFlags: %x\n", dwlSpaceUsed, dwFlags);
return S_OK;
}
STDMETHODIMP PurgeProgress(
_In_ DWORDLONG dwlSpaceFreed,
_In_ DWORDLONG dwlSpaceToFree,
_In_ DWORD dwFlags,
_In_ LPCWSTR pcwszStatus) override
{
DPRINT("dwlSpaceFreed: %lld, dwlSpaceToFree: %lld, dwFlags: %x\n", dwlSpaceFreed, dwlSpaceToFree, dwFlags);
return S_OK;
}
};

View File

@@ -0,0 +1,19 @@
add_executable(cleanmgr
cleanmgr.cpp
cleanmgr.h
cleanmgr.rc
resource.h
CEmptyVolumeCacheCallBack.hpp
CProgressDlg.hpp
CSelectDriveDlg.cpp
CCleanupHandler.cpp
CCleanupHandler.hpp
CCleanupHandlerList.cpp
CCleanupHandlerList.hpp
)
set_module_type(cleanmgr win32gui UNICODE)
target_link_libraries(cleanmgr uuid cpprt atl_classes)
add_importlibs(cleanmgr shlwapi oleaut32 ole32 shell32 comctl32 user32 advapi32 msvcrt kernel32 ntdll)
add_dependencies(cleanmgr psdk)
add_cd_file(TARGET cleanmgr DESTINATION reactos/system32 FOR all)

View File

@@ -0,0 +1,50 @@
/*
* PROJECT: ReactOS Disk Cleanup
* LICENSE: MIT (https://spdx.org/licenses/MIT)
* PURPOSE: Progress dialog implementation
* COPYRIGHT: Copyright 2023-2025 Mark Jansen <mark.jansen@reactos.org>
*/
#pragma once
class CProgressDlg
{
CComPtr<IProgressDialog> m_spProgress;
DWORD m_dwTotal = 0;
public:
~CProgressDlg()
{
Stop();
}
void Start(DWORD dwTotalSteps, LPCWSTR Title, LPCWSTR Text)
{
HRESULT hr = CoCreateInstance(CLSID_ProgressDialog, NULL, CLSCTX_INPROC, IID_PPV_ARG(IProgressDialog, &m_spProgress));
if (FAILED_UNEXPECTEDLY(hr))
return;
m_dwTotal = dwTotalSteps;
m_spProgress->SetTitle(Title);
m_spProgress->SetLine(2, Text, TRUE, NULL);
m_spProgress->StartProgressDialog(NULL, NULL, PROGDLG_NOMINIMIZE, NULL);
m_spProgress->SetProgress(0, m_dwTotal);
}
void Step(DWORD dwProgress, LPCWSTR Text)
{
m_spProgress->SetProgress(dwProgress, m_dwTotal);
m_spProgress->SetLine(1, Text, TRUE, NULL);
}
void Stop()
{
if (m_spProgress)
{
m_spProgress->StopProgressDialog();
m_spProgress.Release();
}
}
};

View File

@@ -0,0 +1,80 @@
/*
* PROJECT: ReactOS Disk Cleanup
* LICENSE: MIT (https://spdx.org/licenses/MIT)
* PURPOSE: Drive selection dialog
* COPYRIGHT: Copyright 2023-2025 Mark Jansen <mark.jansen@reactos.org>
*/
#include "cleanmgr.h"
class CSelectDriveDlg : public CDialogImpl<CSelectDriveDlg>
{
public:
enum { IDD = IDD_SELECTDRIVE };
BEGIN_MSG_MAP(CSelectDriveDlg)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
COMMAND_ID_HANDLER(IDOK, OnEndDialog)
COMMAND_ID_HANDLER(IDCANCEL, OnEndDialog)
END_MSG_MAP()
CSelectDriveDlg()
:m_SelectedDrive(UNICODE_NULL)
{
}
LRESULT OnInitDialog(UINT, WPARAM, LPARAM, BOOL&)
{
// Try to find an existing instance of this dialog
WCHAR buf[300];
GetWindowTextW(buf, _countof(buf));
for (HWND hNext = NULL, hFind; (hFind = ::FindWindowExW(NULL, hNext, NULL, buf)) != NULL; hNext = hFind)
{
if (hFind != *this && ::IsWindowVisible(hFind))
{
::SetForegroundWindow(hFind);
EndDialog(IDCANCEL);
return FALSE;
}
}
CWindow cbo = GetDlgItem(IDC_DRIVES);
WCHAR VolumeNameBuffer[MAX_PATH + 1];
CStringW Tmp;
for (WCHAR Drive = 'A'; Drive <= 'Z'; ++Drive)
{
WCHAR RootPathName[] = { Drive,':','\\',0 };
UINT Type = GetDriveTypeW(RootPathName);
if (Type == DRIVE_FIXED)
{
GetVolumeInformationW(RootPathName, VolumeNameBuffer, _countof(VolumeNameBuffer), 0, 0, 0, 0, 0);
Tmp.Format(L"%s (%.2s)", VolumeNameBuffer, RootPathName);
int index = (int)cbo.SendMessage(CB_ADDSTRING, NULL, (LPARAM)Tmp.GetString());
cbo.SendMessage(CB_SETITEMDATA, index, Drive);
}
}
cbo.SendMessage(CB_SETCURSEL, 0);
return 1;
}
LRESULT OnEndDialog(WORD, WORD wID, HWND, BOOL&)
{
CWindow cbo = GetDlgItem(IDC_DRIVES);
m_SelectedDrive = (WCHAR)cbo.SendMessage(CB_GETITEMDATA, cbo.SendMessage(CB_GETCURSEL));
EndDialog(wID);
return 0;
}
WCHAR m_SelectedDrive;
};
void
SelectDrive(WCHAR &Drive)
{
CSelectDriveDlg dlgSelectDrive;
if (dlgSelectDrive.DoModal() == IDOK)
{
Drive = dlgSelectDrive.m_SelectedDrive;
}
}

View File

@@ -0,0 +1,328 @@
/*
* PROJECT: ReactOS Disk Cleanup
* LICENSE: MIT (https://spdx.org/licenses/MIT)
* PURPOSE: Disk cleanup entrypoint
* COPYRIGHT: Copyright 2023-2025 Mark Jansen <mark.jansen@reactos.org>
*/
#include "cleanmgr.h"
// for listview with extend style LVS_EX_CHECKBOXES, State image 1 is the unchecked box, and state image 2 is the
// checked box. see this: https://docs.microsoft.com/en-us/windows/win32/controls/extended-list-view-styles
#define STATEIMAGETOINDEX(x) (((x)&LVIS_STATEIMAGEMASK) >> 12)
#define STATEIMAGE_UNCHECKED 1
#define STATEIMAGE_CHECKED 2
struct CCleanMgrProperties :
public CPropertyPageImpl<CCleanMgrProperties>
{
enum { IDD = IDD_PROPERTIES_MAIN };
CWindow m_HandlerListControl;
WCHAR m_Drive;
DWORDLONG m_TotalSpaceUsed;
CCleanupHandlerList* m_HandlerList;
bool m_IgnoreChanges = true;
CCleanMgrProperties(WCHAR Drive, DWORDLONG TotalSpaceUsed, CCleanupHandlerList *handlerList)
: m_Drive(Drive)
, m_TotalSpaceUsed(TotalSpaceUsed)
, m_HandlerList(handlerList)
{
}
int OnApply()
{
CStringW Title(MAKEINTRESOURCE(IDS_DISK_CLEANUP));
CStringW Text(MAKEINTRESOURCE(IDS_CONFIRM_DELETE));
if (MessageBoxW(Text, Title, MB_YESNO | MB_ICONQUESTION) != IDYES)
return PSNRET_INVALID;
return PSNRET_NOERROR;
}
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
HICON hIcon = (HICON)::LoadImageW(
_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCEW(IDI_CLEANMGR), IMAGE_ICON, 0, 0,
LR_DEFAULTSIZE | LR_SHARED);
SendDlgItemMessage(IDC_DISKICON, STM_SETICON, (WPARAM)hIcon);
m_HandlerListControl = GetDlgItem(IDC_HANDLERLIST);
RECT rc;
m_HandlerListControl.GetClientRect(&rc);
rc.right -= GetSystemMetrics(SM_CXVSCROLL);
LV_COLUMN column = {};
column.mask = LVCF_FMT | LVCF_WIDTH;
column.fmt = LVCFMT_LEFT;
column.cx = rc.right * 80 / 100;
ListView_InsertColumn(m_HandlerListControl, 0, &column);
column.fmt = LVCFMT_RIGHT;
column.cx = rc.right * 20 / 100;
ListView_InsertColumn(m_HandlerListControl, 1, &column);
HIMAGELIST hImagelist = ImageList_Create(16, 16, ILC_MASK | ILC_COLOR32, 1, 1);
ListView_SetImageList(m_HandlerListControl, hImagelist, LVSIL_SMALL);
ListView_SetExtendedListViewStyleEx(m_HandlerListControl, LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT, LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT);
m_HandlerList->ForEach(
[&](CCleanupHandler *current)
{
if (!current->ShowHandler)
return;
LV_ITEM item = {};
item.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
item.lParam = (LPARAM)current;
item.pszText = (LPWSTR)current->wszDisplayName;
item.iItem = ListView_GetItemCount(m_HandlerListControl);
item.iImage = ImageList_AddIcon(hImagelist, current->hIcon);
item.iItem = ListView_InsertItem(m_HandlerListControl, &item);
ListView_SetCheckState(
m_HandlerListControl, item.iItem, !!(current->StateFlags & HANDLER_STATE_SELECTED));
item.mask = LVIF_TEXT;
WCHAR ByteSize[100] = {};
StrFormatByteSizeW(current->SpaceUsed, ByteSize, _countof(ByteSize));
ListView_SetItemText(m_HandlerListControl, item.iItem, 1, ByteSize);
});
// Now we should start responding to changes
m_IgnoreChanges = false;
// Select the first item
ListView_SetItemState(m_HandlerListControl, 0, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
UpdateSpaceUsed();
return TRUE;
}
CCleanupHandler* GetHandler(int Index)
{
LVITEMW item = {};
item.iItem = Index;
if (item.iItem >= 0)
{
item.mask = LVIF_PARAM;
ListView_GetItem(m_HandlerListControl, &item);
return (CCleanupHandler*)item.lParam;
}
return nullptr;
}
LRESULT OnDetails(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
CCleanupHandler *handler = GetHandler(ListView_GetNextItem(m_HandlerListControl, -1, LVIS_FOCUSED));
if (handler)
{
handler->Handler->ShowProperties(m_hWnd);
}
return 0L;
}
LRESULT OnHandlerItemchanged(int idCtrl, LPNMHDR pnmh, BOOL& bHandled)
{
if (idCtrl == IDC_HANDLERLIST)
{
// We are still initializing, don't respond to changes just yet!
if (m_IgnoreChanges)
return 0L;
LPNMLISTVIEW pnic = (LPNMLISTVIEW)pnmh;
// We only care about state changes
if (!(pnic->uChanged & LVIF_STATE))
return 0L;
INT ItemIndex = pnic->iItem;
if (ItemIndex == -1 || ItemIndex >= ListView_GetItemCount(pnic->hdr.hwndFrom))
{
return 0L;
}
bool GotSelected = (pnic->uNewState & LVIS_SELECTED) && !(pnic->uOldState & LVIS_SELECTED);
if (GotSelected)
{
CWindow DetailsButton = GetDlgItem(IDC_DETAILS);
CCleanupHandler* handler = (CCleanupHandler*)pnic->lParam;
SetDlgItemText(IDC_DESCRIPTION, handler->wszDescription ? handler->wszDescription : L"");
if (handler->HasSettings())
{
DetailsButton.ShowWindow(SW_SHOW);
DetailsButton.SetWindowText(handler->wszBtnText);
}
else
{
DetailsButton.ShowWindow(SW_HIDE);
}
}
int iOldState = STATEIMAGETOINDEX(pnic->uOldState);
int iNewState = STATEIMAGETOINDEX(pnic->uNewState);
if ((iOldState ^ iNewState) == (STATEIMAGE_UNCHECKED ^ STATEIMAGE_CHECKED))
{
CCleanupHandler* handler = (CCleanupHandler*)pnic->lParam;
if (iNewState == STATEIMAGE_CHECKED)
handler->StateFlags |= HANDLER_STATE_SELECTED;
else
handler->StateFlags &= ~HANDLER_STATE_SELECTED;
UpdateSpaceUsed();
}
}
return 0L;
}
void UpdateSpaceUsed()
{
CStringW tmp;
WCHAR ByteSize[100];
StrFormatByteSizeW(m_TotalSpaceUsed, ByteSize, _countof(ByteSize));
tmp.Format(IDS_TOTAL_CLEANABLE_CAPTION, ByteSize, m_Drive);
SetDlgItemText(IDC_TOTAL_CLEANABLE, tmp);
DWORDLONG SelectedGained = 0;
m_HandlerList->ForEach(
[&](CCleanupHandler *current)
{
if (current->StateFlags & HANDLER_STATE_SELECTED)
{
SelectedGained += current->SpaceUsed;
}
});
StrFormatByteSizeW(SelectedGained, ByteSize, _countof(ByteSize));
SetDlgItemText(IDC_SELECTED_GAINED, ByteSize);
}
BEGIN_MSG_MAP(CCleanMgrProperties)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
COMMAND_ID_HANDLER(IDC_DETAILS, OnDetails)
NOTIFY_HANDLER(IDC_HANDLERLIST, LVN_ITEMCHANGED, OnHandlerItemchanged)
CHAIN_MSG_MAP(CPropertyPageImpl<CCleanMgrProperties>) // Allow the default handler to call 'OnApply' etc
END_MSG_MAP()
};
class CCleanMgrModule : public ATL::CAtlExeModuleT< CCleanMgrModule >
{
public:
WCHAR m_Drive = UNICODE_NULL;
bool ParseCommandLine(
_In_z_ LPCTSTR lpCmdLine,
_Out_ HRESULT* pnRetCode) throw()
{
int argc = 0;
CLocalPtr<LPWSTR> argv(CommandLineToArgvW(lpCmdLine, &argc));
for (int n = 1; n < argc; ++n)
{
if ((argv[n][0] == '/' || argv[n][0] == '-') && towlower(argv[n][1]) == 'd')
{
if (iswalpha(argv[n][2]))
{
m_Drive = towupper(argv[n][2]);
continue;
}
if ((n + 1) < argc)
{
m_Drive = towupper(argv[n + 1][0]);
++n;
continue;
}
}
}
*pnRetCode = S_OK;
return true;
}
static inline UINT GetWindowProcessId(_In_ HWND hWnd)
{
DWORD pid;
return GetWindowThreadProcessId(hWnd, &pid) ? pid : 0;
}
static BOOL CALLBACK EnumSingleInstanceCallback(_In_ HWND hWnd, _In_ LPARAM lParam)
{
if (::IsWindowVisible(hWnd) && (LPARAM)GetWindowProcessId(hWnd) == lParam)
{
::SetForegroundWindow(hWnd);
return FALSE;
}
return TRUE;
}
HRESULT Run(_In_ int nShowCmd) throw()
{
if (m_Drive == UNICODE_NULL)
{
SelectDrive(m_Drive);
}
if (m_Drive == UNICODE_NULL)
return E_FAIL;
CStringW Title;
Title.Format(IDS_PROPERTIES_MAIN_TITLE, m_Drive);
HWND hWndInstance = ::CreateWindowExW(WS_EX_TOOLWINDOW, WC_STATIC, Title, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL);
for (HWND hNext = NULL, hFind; (hFind = ::FindWindowExW(NULL, hNext, WC_STATIC, Title)) != NULL; hNext = hFind)
{
if (hFind != hWndInstance)
{
::EnumWindows(EnumSingleInstanceCallback, GetWindowProcessId(hFind));
return S_FALSE;
}
}
CCleanupHandlerList Handlers;
CEmptyVolumeCacheCallBack CacheCallBack;
Handlers.LoadHandlers(m_Drive);
DWORDLONG TotalSpaceUsed = Handlers.ScanDrive(&CacheCallBack);
CCleanMgrProperties cleanMgr(m_Drive, TotalSpaceUsed, &Handlers);
HPROPSHEETPAGE hpsp[1] = { cleanMgr.Create() };
PROPSHEETHEADERW psh = { };
psh.dwSize = sizeof(psh);
psh.dwFlags = PSH_NOAPPLYNOW | PSH_USEICONID | PSH_NOCONTEXTHELP;
psh.hInstance = _AtlBaseModule.GetResourceInstance();
psh.pszIcon = MAKEINTRESOURCEW(IDI_CLEANMGR);
psh.pszCaption = Title;
psh.nPages = _countof(hpsp);
psh.phpage = hpsp;
if (PropertySheetW(&psh) >= 1)
{
::DestroyWindow(hWndInstance); // Allow new "cleanmgr /D" without waiting for these handlers
Handlers.ExecuteCleanup(&CacheCallBack);
}
else
{
::DestroyWindow(hWndInstance);
}
return S_OK;
}
};
CCleanMgrModule _AtlModule;
extern "C" int WINAPI wWinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/,
LPWSTR /*lpCmdLine*/, int nShowCmd)
{
return _AtlModule.WinMain(nShowCmd);
}

View File

@@ -0,0 +1,66 @@
/*
* PROJECT: ReactOS Disk Cleanup
* LICENSE: MIT (https://spdx.org/licenses/MIT)
* PURPOSE: Main header file
* COPYRIGHT: Copyright 2023-2025 Mark Jansen <mark.jansen@reactos.org>
*/
#pragma once
#ifndef STRICT
#define STRICT
#endif
#define _ATL_APARTMENT_THREADED
#define _ATL_NO_AUTOMATIC_NAMESPACE
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit
#define ATL_NO_ASSERT_ON_DESTROY_NONEXISTENT_WINDOW
#define _FORCENAMELESSUNION
#include <ndk/rtlfuncs.h>
#include <windef.h>
#include <winbase.h>
#include <shlobj.h>
#include <shlwapi.h>
#include <atlbase.h>
#include <atlcom.h>
#include <atlstr.h>
#include <strsafe.h>
#include <emptyvc.h>
#include <atlcoll.h>
using namespace ATL;
#define NDEBUG
#include <reactos/debug.h>
#include <reactos/shellutils.h>
#include <ui/rosdlgs.h>
template <class T> class CLocalPtr
: public CHeapPtr<T, CLocalAllocator>
{
public:
CLocalPtr() throw()
{
}
explicit CLocalPtr(_In_ T* pData) throw() :
CHeapPtr<T, CLocalAllocator>(pData)
{
}
};
#include "resource.h"
#include "CProgressDlg.hpp"
#include "CCleanupHandler.hpp"
#include "CCleanupHandlerList.hpp"
#include "CEmptyVolumeCacheCallBack.hpp"
// CSelectDriveDlg.cpp
void
SelectDrive(WCHAR &Drive);

View File

@@ -0,0 +1,64 @@
/*
* PROJECT: ReactOS Disk Cleanup
* LICENSE: MIT (https://spdx.org/licenses/MIT)
* PURPOSE: Resources
* COPYRIGHT: Copyright 2023-2025 Mark Jansen <mark.jansen@reactos.org>
*/
#include <windef.h>
#include <winuser.h>
#include <commctrl.h>
#include "resource.h"
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Disk Cleanup"
#define REACTOS_STR_INTERNAL_NAME "cleanmgr"
#define REACTOS_STR_ORIGINAL_FILENAME "cleanmgr.exe"
#include <reactos/version.rc>
#include <reactos/manifest_exe.rc>
IDI_CLEANMGR ICON "resources/cleanmgr.ico"
#pragma code_page(65001)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
STRINGTABLE
BEGIN
IDS_PROPERTIES_MAIN_TITLE "Disk Cleanup for (%c:)"
IDS_TOTAL_CLEANABLE_CAPTION "You can use Disk Cleanup to free up to %s of disk space on (%c:)."
IDS_DISK_CLEANUP "Disk Cleanup"
IDS_CONFIRM_DELETE "Are you sure you want to delete these files permanently?"
IDS_CALCULATING "Disk Cleanup is calculating how much space can be gained on (%s)."
IDS_SCANNING "Scanning: %s"
IDS_CLEANING_CAPTION "Disk Cleanup is cleaning up files on %s."
IDS_CLEANING "Cleaning: %s"
END
IDD_PROPERTIES_MAIN DIALOGEX 0, 0, 235, 215
STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Disk Cleanup"
FONT 8, "MS Shell Dlg", 400, 0, 0x0
BEGIN
CONTROL "",IDC_DISKICON,"Static",SS_ICON,6,6,20,20
LTEXT "You can use Disk Cleanup to free up to 0.0MB of disk space on drive C.",IDC_TOTAL_CLEANABLE,36,6,192,18
LTEXT "Files to delete:",IDC_STATIC,6,30,222,8
CONTROL "",IDC_HANDLERLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP,6,42,222,66
LTEXT "Total amount of disk space gained:",IDC_STATIC,6,114,144,8
RTEXT "",IDC_SELECTED_GAINED,156,114,73,8
GROUPBOX "Description",IDC_STATIC,6,126,222,84
LTEXT "",IDC_DESCRIPTION,12,138,210,54
PUSHBUTTON "Details...",IDC_DETAILS,150,192,74,14
END
IDD_SELECTDRIVE DIALOGEX 0, 0, 177, 74
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Disk Cleanup - Select Drive"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "OK",IDOK,30,48,50,14
PUSHBUTTON "E&xit",IDCANCEL,96,48,50,14
LTEXT "Select the drive to clean up.",IDC_STATIC,12,6,150,8
COMBOBOX IDC_DRIVES,12,24,150,90,CBS_DROPDOWNLIST | CBS_HASSTRINGS | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
END

View File

@@ -0,0 +1,30 @@
/*
* PROJECT: ReactOS Disk Cleanup
* LICENSE: MIT (https://spdx.org/licenses/MIT)
* PURPOSE: Resource definitions
* COPYRIGHT: Copyright 2023-2025 Mark Jansen <mark.jansen@reactos.org>
*/
#define IDC_STATIC -1
#define IDI_CLEANMGR 100
#define IDD_PROPERTIES_MAIN 200
#define IDC_DISKICON 201
#define IDC_TOTAL_CLEANABLE 202
#define IDC_HANDLERLIST 203
#define IDC_SELECTED_GAINED 204
#define IDC_DESCRIPTION 205
#define IDC_DETAILS 206
#define IDD_SELECTDRIVE 220
#define IDC_DRIVES 221
#define IDS_PROPERTIES_MAIN_TITLE 1000
#define IDS_TOTAL_CLEANABLE_CAPTION 1001
#define IDS_DISK_CLEANUP 1002
#define IDS_CONFIRM_DELETE 1003
#define IDS_CALCULATING 1004
#define IDS_SCANNING 1005
#define IDS_CLEANING_CAPTION 1006
#define IDS_CLEANING 1007

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

View File

@@ -2,12 +2,14 @@
include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/conutils)
list(APPEND SOURCE
certutil.c
asn.cpp
certutil.cpp
hashfile.cpp
precomp.h)
add_executable(certutil ${SOURCE})
set_module_type(certutil win32cui UNICODE)
target_link_libraries(certutil conutils ${PSEH_LIB})
add_importlibs(certutil advapi32 msvcrt kernel32)
add_importlibs(certutil crypt32 advapi32 msvcrt kernel32)
add_pch(certutil precomp.h SOURCE)
add_cd_file(TARGET certutil DESTINATION reactos/system32 FOR all)

View File

@@ -0,0 +1,508 @@
/*
* PROJECT: ReactOS certutil
* LICENSE: MIT (https://spdx.org/licenses/MIT)
* PURPOSE: CertUtil asn implementation
* COPYRIGHT: Copyright 2020 Mark Jansen (mark.jansen@reactos.org)
*
* NOTES:
* To keep it simple, Tag and Class are combined in one identifier
* See for more details:
* https://en.wikipedia.org/wiki/X.690#BER_encoding
* https://www.strozhevsky.com/free_docs/asn1_by_simple_words.pdf
* http://mikk.net/~chris/asn1.pdf
*
* And for a test suite:
* https://github.com/YuryStrozhevsky/asn1-test-suite
*/
#include "precomp.h"
#include <math.h>
#include <wincrypt.h>
#include <stdlib.h>
#define ASN_TAG_IS_CONSTRUCTED 0x20
#define ASN_TAG_BITSTRING 0x03
#define ASN_TAG_OCTET_STRING 0x04
#define ASN_TAG_OBJECT_ID 0x06
#define ASN_TAG_SEQUENCE_RAW 0x10
#define ASN_TAG_SET_RAW 0x11
#define ASN_TAG_SEQUENCE 0x30
#define ASN_TAG_SET 0x31
#define ASN_TAG_CONTEXT_SPECIFIC 0x80
#define ASN_TAG_CONTEXT_SPECIFIC_N(n) (ASN_TAG_CONTEXT_SPECIFIC | (n))
#define ASN_TAG_OPTIONAL 0xA0
#define ASN_TAG_OPTIONAL_N(n) (ASN_TAG_OPTIONAL | (n))
/* NOTE: These names are not the names listed in f.e. the wikipedia pages,
they are made to look like MS's names for this */
LPCWSTR TagToName(DWORD dwTag)
{
switch (dwTag)
{
case 0x0: return L"EOC";
case 0x1: return L"BOOL";
case 0x2: return L"INTEGER";
case ASN_TAG_BITSTRING: return L"BIT_STRING";
case ASN_TAG_OCTET_STRING: return L"OCTET_STRING";
case 0x5: return L"NULL";
case ASN_TAG_OBJECT_ID: return L"OBJECT_ID";
case 0x7: return L"Object Descriptor";
case 0x8: return L"EXTERNAL";
case 0x9: return L"REAL";
case 0xA: return L"ENUMERATED";
case 0xB: return L"EMBEDDED PDV";
case 0xC: return L"UTF8String";
case 0xD: return L"RELATIVE-OID";
case 0xE: return L"TIME";
case 0xF: return L"Reserved";
case ASN_TAG_SEQUENCE_RAW: __debugbreak(); return L"SEQUENCE_RAW";
case ASN_TAG_SET_RAW: __debugbreak(); return L"SET_RAW";
case 0x12: return L"NumericString";
case 0x13: return L"PRINTABLE_STRING";
case 0x14: return L"T61String";
case 0x15: return L"VideotexString";
case 0x16: return L"IA5String";
case 0x17: return L"UTC_TIME";
case 0x18: return L"GeneralizedTime";
case 0x19: return L"GraphicString";
case 0x1A: return L"VisibleString";
case 0x1B: return L"GeneralString";
case 0x1C: return L"UniversalString";
case 0x1D: return L"CHARACTER STRING";
case 0x1E: return L"BMPString";
case 0x1F: return L"DATE";
case 0x20: return L"CONSTRUCTED";
case ASN_TAG_SEQUENCE: return L"SEQUENCE";
case ASN_TAG_SET: return L"SET";
case ASN_TAG_CONTEXT_SPECIFIC_N(0): return L"CONTEXT_SPECIFIC[0]";
case ASN_TAG_CONTEXT_SPECIFIC_N(1): return L"CONTEXT_SPECIFIC[1]";
case ASN_TAG_CONTEXT_SPECIFIC_N(2): return L"CONTEXT_SPECIFIC[2]";
case ASN_TAG_CONTEXT_SPECIFIC_N(3): return L"CONTEXT_SPECIFIC[3]";
case ASN_TAG_CONTEXT_SPECIFIC_N(4): return L"CONTEXT_SPECIFIC[4]";
case ASN_TAG_CONTEXT_SPECIFIC_N(5): return L"CONTEXT_SPECIFIC[5]";
case ASN_TAG_CONTEXT_SPECIFIC_N(6): return L"CONTEXT_SPECIFIC[6]";
case ASN_TAG_CONTEXT_SPECIFIC_N(7): return L"CONTEXT_SPECIFIC[7]";
case ASN_TAG_CONTEXT_SPECIFIC_N(8): return L"CONTEXT_SPECIFIC[8]";
case ASN_TAG_CONTEXT_SPECIFIC_N(9): return L"CONTEXT_SPECIFIC[9]";
/* Experiments show that Windows' certutil only goes up to 9 */
case ASN_TAG_OPTIONAL_N(0): return L"OPTIONAL[0]";
case ASN_TAG_OPTIONAL_N(1): return L"OPTIONAL[1]";
case ASN_TAG_OPTIONAL_N(2): return L"OPTIONAL[2]";
case ASN_TAG_OPTIONAL_N(3): return L"OPTIONAL[3]";
case ASN_TAG_OPTIONAL_N(4): return L"OPTIONAL[4]";
case ASN_TAG_OPTIONAL_N(5): return L"OPTIONAL[5]";
case ASN_TAG_OPTIONAL_N(6): return L"OPTIONAL[6]";
case ASN_TAG_OPTIONAL_N(7): return L"OPTIONAL[7]";
case ASN_TAG_OPTIONAL_N(8): return L"OPTIONAL[8]";
case ASN_TAG_OPTIONAL_N(9): return L"OPTIONAL[9]";
/* Experiments show that Windows' certutil only goes up to 9 */
default:
return L"???";
}
}
BOOL Move(DWORD dwLen, PBYTE& pData, DWORD& dwSize)
{
if (dwSize < dwLen)
return FALSE;
pData += dwLen;
dwSize -= dwLen;
return TRUE;
}
BOOL ParseTag(PBYTE& pData, DWORD& dwSize, DWORD& dwTagAndClass)
{
if (dwSize == 0)
return FALSE;
/* Is this a long form? */
if ((pData[0] & 0x1f) != 0x1f)
{
/* No, so extract the tag and class (in one identifier) */
dwTagAndClass = pData[0];
return Move(1, pData, dwSize);
}
DWORD dwClass = (pData[0] & 0xE0) >> 5;
dwTagAndClass = 0;
DWORD n;
for (n = 1; n < dwSize; ++n)
{
dwTagAndClass <<= 7;
dwTagAndClass |= (pData[n] & 0x7f);
if (!(pData[n] & 0x80))
{
break;
}
}
Move(n, pData, dwSize);
/* Any number bigger than this, we shift data out! */
if (n > 4)
return FALSE;
/* Just drop this in the hightest bits*/
dwTagAndClass |= (dwClass << (32-3));
return TRUE;
}
BOOL ParseLength(PBYTE& pData, DWORD& dwSize, DWORD& dwLength)
{
if (dwSize == 0)
return FALSE;
if (!(pData[0] & 0x80))
{
dwLength = pData[0];
return Move(1, pData, dwSize);
}
DWORD dwBytes = pData[0] & 0x7f;
if (dwBytes == 0 || dwBytes > 8 || dwBytes + 1 > dwSize)
{
return FALSE;
}
dwLength = 0;
for (DWORD n = 0; n < dwBytes; ++n)
{
dwLength <<= 8;
dwLength += pData[1 + n];
}
return Move(dwBytes + 1, pData, dwSize);
}
DWORD HexDump(PBYTE pRoot, PBYTE pData, DWORD dwSize, PWSTR wszPrefix)
{
while (TRUE)
{
SIZE_T Address = pData - pRoot;
ConPrintf(StdOut, L"%04x: ", Address);
ConPuts(StdOut, wszPrefix);
for (DWORD n = 0; n < min(dwSize, 0x10); ++n)
{
ConPrintf(StdOut, L"%02x ", pData[n]);
}
if (dwSize <= 0x10)
break;
Move(0x10, pData, dwSize);
ConPuts(StdOut, L"\n");
}
return 3 * dwSize;
}
void PrintTag(PBYTE pRoot, PBYTE pHeader, DWORD dwTag, DWORD dwTagLength, PBYTE pData, PWSTR wszPrefix)
{
DWORD dwRemainder = HexDump(pRoot, pHeader, pData - pHeader, wszPrefix);
LPCWSTR wszTag = TagToName(dwTag);
DWORD dwPadding = dwRemainder + wcslen(wszPrefix);
while (dwPadding > 50)
dwPadding -= 50;
ConPrintf(StdOut, L"%*s; %s (%x Bytes)\n", 50 - dwPadding, L"", wszTag, dwTagLength);
}
struct OID_NAMES
{
CHAR* Oid;
LPCWSTR Names[20];
DWORD NumberOfNames;
};
BOOL WINAPI CryptOIDEnumCallback(_In_ PCCRYPT_OID_INFO pInfo, _Inout_opt_ void *pvArg)
{
OID_NAMES* Names = (OID_NAMES*)pvArg;
if (pInfo && pInfo->pszOID && !_stricmp(pInfo->pszOID, Names->Oid))
{
if (Names->NumberOfNames < RTL_NUMBER_OF(Names->Names))
{
for (DWORD n = 0; n < Names->NumberOfNames; ++n)
{
// We already have this..
if (!_wcsicmp(Names->Names[n], pInfo->pwszName))
return TRUE;
}
Names->Names[Names->NumberOfNames++] = pInfo->pwszName;
}
}
return TRUE;
}
void PrintOID(PBYTE pRoot, PBYTE pHeader, PBYTE pData, DWORD dwSize, PWSTR wszPrefix)
{
/* CryptFindOIDInfo expects the OID to be in ANSI.. */
CHAR szOID[250];
CHAR* ptr = szOID;
size_t cchRemaining = RTL_NUMBER_OF(szOID);
/* CryptFindOIDInfo just returns the first, we want multiple */
OID_NAMES Names = {0};
if (dwSize == 0)
return;
DWORD dwValue = 0, count = 0;
for (DWORD n = 0; n < dwSize; ++n)
{
dwValue <<= 7;
dwValue |= pData[n] & 0x7f;
if (pData[n] & 0x80)
{
if (++count >= 4)
break;
continue;
}
count = 0;
/* First & second octet have a special encoding */
if (ptr == szOID)
{
DWORD id1 = dwValue / 40;
DWORD id2 = dwValue % 40;
/* The first one can only be 0, 1 or 2, so handle special case: tc24.ber */
if (id1 > 2)
{
id2 += (id1 - 2) * 40;
id1 = 2;
}
StringCchPrintfExA(ptr, cchRemaining, &ptr, &cchRemaining, 0, "%d.%d", id1, id2);
}
else
{
StringCchPrintfExA(ptr, cchRemaining, &ptr, &cchRemaining, 0, ".%d", dwValue);
}
dwValue = 0;
}
if (dwValue || count)
{
/* We cannot format this, so just add abort */
return;
}
SIZE_T Address = pData - pRoot;
/* Pad with spaces instead of printing the address again */
DWORD addrDigits = (DWORD)log10((double)Address) + 1;
ConPrintf(StdOut, L"%*s ", max(addrDigits, 4), L"");
ConPrintf(StdOut, L"%s; %S", wszPrefix, szOID);
Names.Oid = szOID;
/* The order does not match a naive call with '0'... */
CryptEnumOIDInfo(0, 0, &Names, CryptOIDEnumCallback);
for (DWORD n = 0; n < Names.NumberOfNames; ++n)
{
if (n == 0)
ConPrintf(StdOut, L" %s", Names.Names[n]);
else if (n == 1)
ConPrintf(StdOut, L" (%s", Names.Names[n]);
else
ConPrintf(StdOut, L" / %s", Names.Names[n]);
}
ConPrintf(StdOut, L"%s\n", Names.NumberOfNames > 1 ? L")" : L"");
}
BOOL ParseAsn(PBYTE pRoot, PBYTE pData, DWORD dwSize, PWSTR wszPrefix, BOOL fPrint)
{
while (dwSize)
{
PBYTE pHeader = pData;
DWORD dwTagAndClass;
if (!ParseTag(pData, dwSize, dwTagAndClass))
{
if (fPrint)
ConPrintf(StdOut, L"CertUtil: -asn command failed to parse tag near 0x%x\n", pHeader - pRoot);
return FALSE;
}
DWORD dwTagLength;
if (!ParseLength(pData, dwSize, dwTagLength))
{
if (fPrint)
ConPrintf(StdOut, L"CertUtil: -asn command failed to parse tag length near 0x%x\n", pHeader - pRoot);
return FALSE;
}
if (dwTagLength > dwSize)
{
if (fPrint)
ConPrintf(StdOut, L"CertUtil: -asn command malformed tag length near 0x%x\n", pHeader - pRoot);
return FALSE;
}
if (fPrint)
PrintTag(pRoot, pHeader, dwTagAndClass, dwTagLength, pData, wszPrefix);
size_t len = wcslen(wszPrefix);
StringCchCatW(wszPrefix, MAX_PATH, dwTagLength != dwSize ? L"| " : L" ");
if (dwTagAndClass & ASN_TAG_IS_CONSTRUCTED)
{
if (!ParseAsn(pRoot, pData, dwTagLength, wszPrefix, fPrint))
{
return FALSE;
}
}
else
{
if (fPrint)
{
/* Special case for a bit string / octet string */
if ((dwTagAndClass == ASN_TAG_BITSTRING || dwTagAndClass == ASN_TAG_OCTET_STRING) && dwTagLength)
{
if (dwTagAndClass == ASN_TAG_BITSTRING)
{
/* First, we print the 'unused bits' field of the bit string */
HexDump(pRoot, pData, 1, wszPrefix);
ConPuts(StdOut, L"\n");
/* Move past it */
Move(1, pData, dwSize);
dwTagLength--;
}
/* Do we have any data left? */
if (dwTagLength)
{
/* Try to parse this as ASN */
if (ParseAsn(pRoot, pData, dwTagLength, wszPrefix, FALSE))
{
/* We succeeded, this _could_ be ASN, so display it as if it is */
if (!ParseAsn(pRoot, pData, dwTagLength, wszPrefix, TRUE))
{
/* Uhhh, did someone edit the data? */
ConPrintf(StdOut, L"CertUtil: -asn command unexpected failure parsing tag near 0x%x\n", pData - pRoot);
return FALSE;
}
/* Move past what we just parsed */
Move(dwTagLength, pData, dwSize);
/* Lie about this so that we don't also print a hexdump */
dwTagLength = 0;
}
}
}
/* Is there any data (left) to print? */
if (dwTagLength)
{
HexDump(pRoot, pData, dwTagLength, wszPrefix);
ConPuts(StdOut, L"\n");
StringCchCatW(wszPrefix, MAX_PATH, L" ");
/* Do we have additional formatters? */
switch (dwTagAndClass)
{
case ASN_TAG_OBJECT_ID:
PrintOID(pRoot, pHeader, pData, dwTagLength, wszPrefix);
break;
default:
break;
}
}
}
}
wszPrefix[len] = '\0';
if (!Move(dwTagLength, pData, dwSize))
{
/* This should not be possible, it was checked before! */
return FALSE;
}
}
return TRUE;
}
BOOL asn_dump(LPCWSTR Filename)
{
HANDLE hFile = CreateFileW(Filename, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
ConPrintf(StdOut, L"CertUtil: -asn command failed to open: %d\n", GetLastError());
return FALSE;
}
DWORD dwSize = GetFileSize(hFile, NULL);
if (dwSize == INVALID_FILE_SIZE)
{
ConPrintf(StdOut, L"CertUtil: -asn command failed to get file size: %d\n", GetLastError());
CloseHandle(hFile);
return FALSE;
}
if (dwSize == 0)
{
ConPrintf(StdOut, L"CertUtil: -asn command got an empty file\n");
CloseHandle(hFile);
return FALSE;
}
PBYTE pData = (PBYTE)LocalAlloc(0, dwSize);
if (!pData)
{
ConPrintf(StdOut, L"CertUtil: -asn command failed to allocate: %d\n", GetLastError());
CloseHandle(hFile);
return FALSE;
}
DWORD cbRead;
BOOL fRead = ReadFile(hFile, pData, dwSize, &cbRead, NULL);
DWORD dwErr = GetLastError();
CloseHandle(hFile);
if (!fRead || cbRead != dwSize)
{
ConPrintf(StdOut, L"CertUtil: -asn command failed to read: %d\n", dwErr);
LocalFree(pData);
return FALSE;
}
WCHAR Buffer[MAX_PATH] = {0};
BOOL fSucceeded = ParseAsn(pData, pData, dwSize, Buffer, TRUE);
LocalFree(pData);
return fSucceeded;
}

View File

@@ -0,0 +1,107 @@
/*
* PROJECT: ReactOS certutil
* LICENSE: MIT (https://spdx.org/licenses/MIT)
* PURPOSE: CertUtil commandline handling
* COPYRIGHT: Copyright 2020 Mark Jansen (mark.jansen@reactos.org)
*
* Note: Only -hashfile and -asn are implemented for now, the rest is not present!
*/
#include "precomp.h"
#include <wincrypt.h>
#include <stdlib.h>
typedef struct
{
LPCWSTR Name;
BOOL (*pfn)(LPCWSTR Filename);
} Verb;
Verb verbs[] = {
{ L"hashfile", hash_file },
{ L"asn", asn_dump },
};
static void print_usage()
{
ConPuts(StdOut, L"Verbs:\n");
ConPuts(StdOut, L" -hashfile -- Display cryptographic hash over a file\n");
ConPuts(StdOut, L" -asn -- Display ASN.1 encoding of a file\n");
ConPuts(StdOut, L"\n");
ConPuts(StdOut, L"CertUtil -? -- Display a list of all verbs\n");
ConPuts(StdOut, L"CertUtil -hashfile -? -- Display help text for the 'hashfile' verb\n");
}
Verb* MatchVerb(LPCWSTR arg)
{
if (arg[0] != '-' && arg[0] != '/')
return NULL;
for (size_t n = 0; n < RTL_NUMBER_OF(verbs); ++n)
{
if (!_wcsicmp(verbs[n].Name, arg + 1))
{
return verbs + n;
}
}
return NULL;
}
int wmain(int argc, WCHAR *argv[])
{
int n;
/* Initialize the Console Standard Streams */
ConInitStdStreams();
if (argc == 1) /* i.e. no commandline arguments given */
{
print_usage();
return EXIT_SUCCESS;
}
for (n = 1; n < argc; ++n)
{
if (!_wcsicmp(argv[n], L"-?"))
{
print_usage();
return EXIT_SUCCESS;
}
Verb* verb = MatchVerb(argv[n]);
if (verb)
{
if (argc != 3)
{
ConPrintf(StdOut, L"CertUtil: -%s expected 1 argument, got %d\n", verb->Name, argc - 2);
return EXIT_FAILURE;
}
if (!_wcsicmp(argv[n+1], L"-?"))
{
print_usage();
return EXIT_SUCCESS;
}
if (!verb->pfn(argv[n+1]))
{
/* The verb prints the failure */
return EXIT_FAILURE;
}
ConPrintf(StdOut, L"CertUtil: -%s command completed successfully\n", verb->Name);
return EXIT_SUCCESS;
}
else
{
ConPrintf(StdOut, L"CertUtil: Unknown verb: %s\n", argv[n]);
return EXIT_FAILURE;
}
}
return EXIT_SUCCESS;
}

View File

@@ -1,10 +1,8 @@
/*
* PROJECT: ReactOS certutil
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: CertUtil stub
* LICENSE: MIT (https://spdx.org/licenses/MIT)
* PURPOSE: CertUtil hashfile implementation
* COPYRIGHT: Copyright 2020 Mark Jansen (mark.jansen@reactos.org)
*
* Note: Only -hashfile is implemented for now, the rest is not present!
*/
#include "precomp.h"
@@ -12,7 +10,7 @@
#include <stdlib.h>
static BOOL hash_file(LPCWSTR Filename)
BOOL hash_file(LPCWSTR Filename)
{
HCRYPTPROV hProv;
BOOL bSuccess = FALSE;
@@ -87,69 +85,3 @@ static BOOL hash_file(LPCWSTR Filename)
return bSuccess;
}
static void print_usage()
{
ConPuts(StdOut, L"Verbs:\n");
ConPuts(StdOut, L" -hashfile -- Display cryptographic hash over a file\n");
ConPuts(StdOut, L"\n");
ConPuts(StdOut, L"CertUtil -? -- Display a list of all verbs\n");
ConPuts(StdOut, L"CertUtil -hashfile -? -- Display help text for the 'hashfile' verb\n");
}
int wmain(int argc, WCHAR *argv[])
{
int n;
/* Initialize the Console Standard Streams */
ConInitStdStreams();
if (argc == 1) /* i.e. no commandline arguments given */
{
print_usage();
return EXIT_SUCCESS;
}
for (n = 1; n < argc; ++n)
{
if (!_wcsicmp(argv[n], L"-?"))
{
print_usage();
return EXIT_SUCCESS;
}
else if (!_wcsicmp(argv[n], L"-hashfile"))
{
if (argc == 3)
{
if (!_wcsicmp(argv[n+1], L"-?"))
{
print_usage();
return EXIT_SUCCESS;
}
else
{
if (!hash_file(argv[n+1]))
{
/* hash_file prints the failure itself */
return EXIT_FAILURE;
}
ConPuts(StdOut, L"CertUtil: -hashfile command completed successfully\n");
return EXIT_SUCCESS;
}
}
else
{
ConPrintf(StdOut, L"CertUtil: -hashfile expected 1 argument, got %d\n", argc - 2);
return EXIT_FAILURE;
}
}
else
{
ConPrintf(StdOut, L"CertUtil: Unknown verb: %s\n", argv[n]);
return EXIT_FAILURE;
}
}
return EXIT_SUCCESS;
}

View File

@@ -7,10 +7,14 @@
#include <windef.h>
#include <winbase.h>
#include <winreg.h>
#include <winuser.h>
#include <strsafe.h>
#include <conutils.h>
BOOL hash_file(LPCWSTR Filename);
BOOL asn_dump(LPCWSTR Filename);
#endif /* __CERTUTIL_PRECOMP_H */

View File

@@ -1,5 +1,5 @@
add_definitions(-DCSCRIPT_BUILD -D__WINESRC__)
add_definitions(-DCSCRIPT_BUILD)
set(wscript_folder ${REACTOS_SOURCE_DIR}/base/applications/cmdutils/wscript)
include_directories(${wscript_folder})
@@ -20,3 +20,4 @@ add_importlibs(cscript shell32 oleaut32 ole32 advapi32 user32 msvcrt kernel32 nt
add_dependencies(cscript stdole2 cscript_idlheader)
add_pch(cscript ${wscript_folder}/precomp.h SOURCE)
add_cd_file(TARGET cscript DESTINATION reactos/system32 FOR all)
set_wine_module_FIXME(cscript) # CORE-5743: No ARRAY_SIZE macro

View File

@@ -2,40 +2,40 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
STRINGTABLE
BEGIN
IDS_USAGE "Compares two files or sets of files and displays the differences between\n\
them.\n\
IDS_USAGE "Compare deux fichiers ou un ensemble de fichiers et affiche les différences\n\
entre eux.\n\
\n\
FC [/A] [/C] [/L] [/LBn] [/N] [/OFF[LINE]] [/T] [/U] [/W] [/nnnn]\n\
[drive1:][path1]filename1 [drive2:][path2]filename2\n\
FC /B [drive1:][path1]filename1 [drive2:][path2]filename2\n\
\n\
/A Displays only first and last lines for each set of differences.\n\
/B Performs a binary comparison.\n\
/C Disregards the case of letters.\n\
/L Compares files as ASCII text.\n\
/LBn Sets the maximum consecutive mismatches to the specified\n\
number of lines (default: 100).\n\
/N Displays the line numbers on an ASCII comparison.\n\
/OFF[LINE] Doesn't skip files with offline attribute set.\n\
/T Doesn't expand tabs to spaces (default: expand).\n\
/U Compare files as UNICODE text files.\n\
/W Compresses white space (tabs and spaces) for comparison.\n\
/nnnn Specifies the number of consecutive lines that must match\n\
after a mismatch (default: 2).\n\
/A Affiche uniquement la première et la dernière ligne pour chaque ensemble de différences.\n\
/B Effectue une comparaison binaire.\n\
/C Ne tient pas compte de la casse des lettres.\n\
/L Compare les fichiers sous forme de texte ASCII.\n\
/LBn Définit le nombre maximal de différences consécutives\n\
au nombre de lignes spécifié (par défaut : 100).\n\
/N Affiche les numéros de ligne sur une comparaison ASCII.\n\
/OFF[LINE] N'ignore pas les fichiers ayant l'attribut hors-ligne.\n\
/T Ne transforme pas les tabulations en espaces (par défaut : transformer).\n\
/U Compare les fichiers en tant que fichiers texte UNICODE.\n\
/W Compresse les espaces blancs (tabulations et espaces) pour la comparaison.\n\
/nnnn Spécifie le nombre de lignes consécutives qui doivent correspondre\n\
après une différence (par défaut : 2).\n\
[drive1:][path1]filename1\n\
Specifies the first file or set of files to compare.\n\
Spécifie le premier fichier ou ensemble de fichiers à comparer.\n\
[drive2:][path2]filename2\n\
Specifies the second file or set of files to compare.\n"
IDS_NO_DIFFERENCE "FC: no differences encountered\n"
IDS_LONGER_THAN "FC: %ls longer than %ls\n"
IDS_COMPARING "Comparing files %ls and %ls\n"
IDS_OUT_OF_MEMORY "FC: Out of memory\n"
IDS_CANNOT_READ "FC: cannot read from %ls\n"
IDS_INVALID_SWITCH "FC: Invalid Switch\n"
IDS_CANNOT_OPEN "FC: cannot open %ls - No such file or folder\n"
IDS_NEEDS_FILES "FC: Insufficient number of file specifications\n"
IDS_CANT_USE_WILDCARD "Wildcard ('*' and '?') are not supported yet\n"
IDS_DIFFERENT "FC: File %ls and %ls are different\n"
IDS_TOO_LARGE "FC: File %ls too large\n"
IDS_RESYNC_FAILED "Resync failed. Files are too different.\n"
Spécifie le second fichier ou ensemble de fichiers à comparer.\n"
IDS_NO_DIFFERENCE "FC: Aucune différence constatée\n"
IDS_LONGER_THAN "FC: %ls plus grand que %ls\n"
IDS_COMPARING "Compare les fichiers %ls et %ls\n"
IDS_OUT_OF_MEMORY "FC: Dépassement de mémoire\n"
IDS_CANNOT_READ "FC: Ne peut pas lire depuis %ls\n"
IDS_INVALID_SWITCH "FC: Option invalide\n"
IDS_CANNOT_OPEN "FC: Ne peut pas ouvrir %ls - Fichier ou répertoire inexistant\n"
IDS_NEEDS_FILES "FC: Nombre insuffisant de fichiers spécifiés\n"
IDS_CANT_USE_WILDCARD "Les caractères joker ('*' et '?') ne sont pas encore supportés\n"
IDS_DIFFERENT "FC: Les fichiers %ls et %ls sont différents\n"
IDS_TOO_LARGE "FC: Fichier %ls trop grand\n"
IDS_RESYNC_FAILED "La resynchronisation a échoué. Les fichiers sont trop différents.\n"
END

View File

@@ -2,9 +2,9 @@
remove_definitions(-D_WIN32_WINNT=0x502)
add_definitions(-D_WIN32_WINNT=0x600)
add_definitions(-D__WINESRC__)
add_executable(reg add.c copy.c delete.c export.c import.c query.c reg.c reg.rc)
set_module_type(reg win32cui UNICODE)
target_link_libraries(reg wine oldnames)
add_importlibs(reg advapi32 advapi32_vista user32 msvcrt kernel32 ntdll)
add_cd_file(TARGET reg DESTINATION reactos/system32 FOR all)
set_wine_module_FIXME(reg) # CORE-5743: No ARRAY_SIZE macro

View File

@@ -1,7 +1,7 @@
add_definitions(-D__WINESRC__)
add_executable(taskkill taskkill.c taskkill.rc)
target_link_libraries(taskkill wine)
set_module_type(taskkill win32cui UNICODE)
add_importlibs(taskkill psapi user32 msvcrt kernel32 ntdll)
add_importlibs(taskkill user32 msvcrt kernel32 ntdll)
add_cd_file(TARGET taskkill DESTINATION reactos/system32 FOR all)
set_wine_module_FIXME(taskkill) # CORE-5743: No ARRAY_SIZE macro

View File

@@ -2,7 +2,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
STRINGTABLE
{
STRING_USAGE, "Usage: taskkill [/?] [/f] [/im Prozess Name | /pid Prozess ID]\n"
STRING_USAGE, "Usage: taskkill [/?] [/f] [/im Prozess Name | /pid Prozess ID] [/t]\n"
STRING_INVALID_OPTION, "Fehler: Unbekannte oder ungülige Kommandozeilenoption angegeben.\n"
STRING_INVALID_PARAM, "Fehler: Ungültiger Kommandozeilenparameter angegeben.\n"
STRING_MISSING_OPTION, "Fehler: Eine der Optionen /im oder /pid muss angegeben werden.\n"
@@ -16,6 +16,10 @@ STRINGTABLE
STRING_ENUM_FAILED, "Fehler: Prozessliste kann nicht aufgebaut werden.\n"
STRING_TERMINATE_FAILED, "Fehler: Prozess ""%1"" kann nicht beendet werden.\n"
STRING_SELF_TERMINATION, "Fehler: Der Prozess kann sich nicht selbst beenden.\n"
// STRING_CLOSE_CHILD, "Sent termination signal to process with PID %1!u!, child of PID %2!u!.\n"
STRING_CLOSE_CHILD, "Close message sent to top-level windows of process with PID %1!u!, child of PID %2!u!.\n"
STRING_TERM_CHILD, "The process with PID %1!u! (child process of PID %2!u!) has been terminated.\n"
STRING_TERM_CHILD_FAILED, "Error: Unable to terminate process with PID %1!u!, child of PID %2!u!.\n"
STRING_PARAM_TOO_MUCH, "Error: Invalid syntax. '%1' option is not allowed more than '%2!d!' time(s).\n"
STRING_INVALID_SYNTAX, "Error: Invalid syntax.\n"
}

View File

@@ -2,7 +2,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
STRINGTABLE
{
STRING_USAGE, "Usage: taskkill [/?] [/f] [/im ProcessName | /pid ProcessID]\n"
STRING_USAGE, "Usage: taskkill [/?] [/f] [/im ProcessName | /pid ProcessID] [/t]\n"
STRING_INVALID_OPTION, "Error: Unknown or invalid command line option specified.\n"
STRING_INVALID_PARAM, "Error: Invalid command line parameter specified.\n"
STRING_MISSING_OPTION, "Error: One of options /im or /pid must be specified.\n"
@@ -10,12 +10,16 @@ STRINGTABLE
STRING_MUTUAL_EXCLUSIVE, "Error: Options /im and /pid are mutually exclusive.\n"
STRING_CLOSE_PID_SEARCH, "Close message sent to top-level windows of process with PID %1!u!.\n"
STRING_CLOSE_PROC_SRCH, "Close message sent to top-level windows of process ""%1"" with PID %2!u!.\n"
STRING_TERM_PID_SEARCH, "Process with PID %1!u! was forcibly terminated.\n"
STRING_TERM_PROC_SEARCH, "Process ""%1"" with PID %2!u! was forcibly terminated.\n"
STRING_TERM_PID_SEARCH, "The process with PID %1!u! has been terminated.\n"
STRING_TERM_PROC_SEARCH, "The process ""%1"" with PID %2!u! has been terminated.\n"
STRING_SEARCH_FAILED, "Error: Could not find process ""%1"".\n"
STRING_ENUM_FAILED, "Error: Unable to enumerate the process list.\n"
STRING_TERMINATE_FAILED, "Error: Unable to terminate process ""%1"".\n"
STRING_SELF_TERMINATION, "Error: Process self-termination is not permitted.\n"
// STRING_CLOSE_CHILD, "Sent termination signal to process with PID %1!u!, child of PID %2!u!.\n"
STRING_CLOSE_CHILD, "Close message sent to top-level windows of process with PID %1!u!, child of PID %2!u!.\n"
STRING_TERM_CHILD, "The process with PID %1!u! (child process of PID %2!u!) has been terminated.\n"
STRING_TERM_CHILD_FAILED, "Error: Unable to terminate process with PID %1!u!, child of PID %2!u!.\n"
STRING_PARAM_TOO_MUCH, "Error: Invalid syntax. '%1' option is not allowed more than '%2!d!' time(s).\n"
STRING_INVALID_SYNTAX, "Error: Invalid syntax.\n"
}

View File

@@ -9,7 +9,7 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
STRINGTABLE
{
STRING_USAGE, "Uso: taskkill [/?] [/f] [/im NomeProcesso | /pid IDProcesso]\n"
STRING_USAGE, "Uso: taskkill [/?] [/f] [/im NomeProcesso | /pid IDProcesso] [/t]\n"
STRING_INVALID_OPTION, "Errore: L'opzione specificata è invalida o sconosciuta.\n"
STRING_INVALID_PARAM, "Errore: Il parametro di comando a riga è invalido.\n"
STRING_MISSING_OPTION, "Errore: Specifica una delle opzioni /im oppure /pid.\n"
@@ -23,6 +23,10 @@ STRINGTABLE
STRING_ENUM_FAILED, "Errore: Impossibile enumerare la lista dei processi.\n"
STRING_TERMINATE_FAILED, "Errore: Impossibile terminare il processo ""%1"".\n"
STRING_SELF_TERMINATION, "Errore: L'auto-terminazione non è consentita.\n"
// STRING_CLOSE_CHILD, "Sent termination signal to process with PID %1!u!, child of PID %2!u!.\n"
STRING_CLOSE_CHILD, "Close message sent to top-level windows of process with PID %1!u!, child of PID %2!u!.\n"
STRING_TERM_CHILD, "The process with PID %1!u! (child process of PID %2!u!) has been terminated.\n"
STRING_TERM_CHILD_FAILED, "Error: Unable to terminate process with PID %1!u!, child of PID %2!u!.\n"
STRING_PARAM_TOO_MUCH, "Error: Invalid syntax. '%1' option is not allowed more than '%2!d!' time(s).\n"
STRING_INVALID_SYNTAX, "Error: Invalid syntax.\n"
}

View File

@@ -9,7 +9,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
STRINGTABLE
{
STRING_USAGE, "Sposób użycia: taskkill [/?] [/f] [/im nazwa_procesu | /pid id_procesu]\n"
STRING_USAGE, "Sposób użycia: taskkill [/?] [/f] [/im nazwa_procesu | /pid id_procesu] [/t]\n"
STRING_INVALID_OPTION, "Błąd: Określono nieznaną lub nieprawidłową opcję.\n"
STRING_INVALID_PARAM, "Błąd: Nieprawidłowy parametr.\n"
STRING_MISSING_OPTION, "Błąd: Nie określono opcji /im ani /pid.\n"
@@ -23,6 +23,10 @@ STRINGTABLE
STRING_ENUM_FAILED, "Błąd: Nie można wyliczyć listy procesów.\n"
STRING_TERMINATE_FAILED, "Błąd: Nie można zakończyć procesu ""%1"".\n"
STRING_SELF_TERMINATION, "Błąd: Proces nie może zakończyć sam siebie.\n"
// STRING_CLOSE_CHILD, "Sent termination signal to process with PID %1!u!, child of PID %2!u!.\n"
STRING_CLOSE_CHILD, "Close message sent to top-level windows of process with PID %1!u!, child of PID %2!u!.\n"
STRING_TERM_CHILD, "The process with PID %1!u! (child process of PID %2!u!) has been terminated.\n"
STRING_TERM_CHILD_FAILED, "Error: Unable to terminate process with PID %1!u!, child of PID %2!u!.\n"
STRING_PARAM_TOO_MUCH, "Błąd: Nieprawidłowa składnia. Opcja '%1' nie jest dozwolona więcej niż '%2!d!' razy.\n"
STRING_INVALID_SYNTAX, "Błąd: Nieprawidłowa składnia.\n"
}

View File

@@ -10,7 +10,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
STRINGTABLE
{
STRING_USAGE, "Utilizare: taskkill [/?] [/f] [/im NumeProces | /pid IdProces]\n"
STRING_USAGE, "Utilizare: taskkill [/?] [/f] [/im NumeProces | /pid IdProces] [/t]\n"
STRING_INVALID_OPTION, "Eroare: Opțiune specificată nevalidă sau necunoscută.\n"
STRING_INVALID_PARAM, "Eroare: Parametrul de comandă specificat este nevalid.\n"
STRING_MISSING_OPTION, "Eroare: Trebuie specificată una dintre opțiunile /im sau /pid.\n"
@@ -24,6 +24,10 @@ STRINGTABLE
STRING_ENUM_FAILED, "Eroare: Nu se poate enumera lista de procese.\n"
STRING_TERMINATE_FAILED, "Eroare: Procesul «%1» nu poate fi oprit.\n"
STRING_SELF_TERMINATION, "Eroare: Auto-terminarea nu este permisă.\n"
// STRING_CLOSE_CHILD, "Sent termination signal to process with PID %1!u!, child of PID %2!u!.\n"
STRING_CLOSE_CHILD, "Close message sent to top-level windows of process with PID %1!u!, child of PID %2!u!.\n"
STRING_TERM_CHILD, "The process with PID %1!u! (child process of PID %2!u!) has been terminated.\n"
STRING_TERM_CHILD_FAILED, "Error: Unable to terminate process with PID %1!u!, child of PID %2!u!.\n"
STRING_PARAM_TOO_MUCH, "Eroare: Sintaxă nevalidă. Opțiunea '%1' nu este permisă mai mult de '%2!d!' dată(dăți).\n"
STRING_INVALID_SYNTAX, "Eroare: Sintaxă nevalidă.\n"
}

View File

@@ -4,7 +4,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
STRINGTABLE
{
STRING_USAGE, "Использование: TASKKILL [/F] [/IM <образ> | /PID <процесс>]\n"
STRING_USAGE, "Использование: TASKKILL [/F] [/IM <образ> | /PID <процесс>] [/t]\n"
STRING_INVALID_OPTION, "Ошибка: Указаны неверные параметры командной строки.\n"
STRING_INVALID_PARAM, "Ошибка: Указаны неверные параметры командной строки.\n"
STRING_MISSING_OPTION, "Ошибка: Должен быть указан параметр /im или /pid.\n"
@@ -18,6 +18,10 @@ STRINGTABLE
STRING_ENUM_FAILED, "Ошибка: Не удается получить список процессов.\n"
STRING_TERMINATE_FAILED, "Ошибка: Не удается завершить процесс ""%1"".\n"
STRING_SELF_TERMINATION, "Ошибка: Процесс не может завершить сам себя.\n"
// STRING_CLOSE_CHILD, "Sent termination signal to process with PID %1!u!, child of PID %2!u!.\n"
STRING_CLOSE_CHILD, "Close message sent to top-level windows of process with PID %1!u!, child of PID %2!u!.\n"
STRING_TERM_CHILD, "The process with PID %1!u! (child process of PID %2!u!) has been terminated.\n"
STRING_TERM_CHILD_FAILED, "Error: Unable to terminate process with PID %1!u!, child of PID %2!u!.\n"
STRING_PARAM_TOO_MUCH, "Ошибка: Неверный синтаксис. Нельзя использовать опцию '%1' больше '%2!d!' раз(а).\n"
STRING_INVALID_SYNTAX, "Ошибка: Неверный синтаксис.\n"
}

View File

@@ -6,7 +6,7 @@ LANGUAGE LANG_ALBANIAN, SUBLANG_NEUTRAL
STRINGTABLE
{
STRING_USAGE, "Usage: taskkill [/?] [/f] [/im ProcessName | /pid ProcessID]\n"
STRING_USAGE, "Usage: taskkill [/?] [/f] [/im ProcessName | /pid ProcessID] [/t]\n"
STRING_INVALID_OPTION, "Gabim: Panjohur ose i pavlefshëm opsioni linjes komandes i specifikuar.\n"
STRING_INVALID_PARAM, "Gabim: Pavlefshëm parametri i specifikuar ne linjen e komandes.\n"
STRING_MISSING_OPTION, "Gabim: Njera nga opsionet /im ose /pid duhet te specifikohet.\n"
@@ -20,6 +20,10 @@ STRINGTABLE
STRING_ENUM_FAILED, "Gabim: Në pamundësi për të numëruar listën proceseve.\n"
STRING_TERMINATE_FAILED, "Gabim: Pamundur mbyllja e proceseve ""%1"".\n"
STRING_SELF_TERMINATION, "Gabim: Procesi vetë-përfundimi nuk është i lejuar.\n"
// STRING_CLOSE_CHILD, "Sent termination signal to process with PID %1!u!, child of PID %2!u!.\n"
STRING_CLOSE_CHILD, "Close message sent to top-level windows of process with PID %1!u!, child of PID %2!u!.\n"
STRING_TERM_CHILD, "The process with PID %1!u! (child process of PID %2!u!) has been terminated.\n"
STRING_TERM_CHILD_FAILED, "Error: Unable to terminate process with PID %1!u!, child of PID %2!u!.\n"
STRING_PARAM_TOO_MUCH, "Error: Invalid syntax. '%1' option is not allowed more than '%2!d!' time(s).\n"
STRING_INVALID_SYNTAX, "Error: Invalid syntax.\n"
}

View File

@@ -4,7 +4,7 @@ LANGUAGE LANG_TURKISH, SUBLANG_NEUTRAL
STRINGTABLE
{
STRING_USAGE, "Kullanım: taskkill [/?] [/f] [/im işlem adı | /pid işlem kimliği]\n"
STRING_USAGE, "Kullanım: taskkill [/?] [/f] [/im işlem adı | /pid işlem kimliği] [/t]\n"
STRING_INVALID_OPTION, "Hata: Bilinmeyen veya geçersiz komut satırı seçeneği belirtildi.\n"
STRING_INVALID_PARAM, "Hata: Geçersiz komut satırı değişkeni belirtildi.\n"
STRING_MISSING_OPTION, "Hata: /im ve /pid seçeneklerinden biri belirtilmeli.\n"
@@ -18,6 +18,10 @@ STRINGTABLE
STRING_ENUM_FAILED, "Hata: İşlem numaralandırılamıyor.\n"
STRING_TERMINATE_FAILED, "Hata: ""%1"" işlemi sonlandırılamıyor.\n"
STRING_SELF_TERMINATION, "Hata: İşlemi kendi kendine sonlandırmaya izin verilmedi.\n"
// STRING_CLOSE_CHILD, "Sent termination signal to process with PID %1!u!, child of PID %2!u!.\n"
STRING_CLOSE_CHILD, "Close message sent to top-level windows of process with PID %1!u!, child of PID %2!u!.\n"
STRING_TERM_CHILD, "The process with PID %1!u! (child process of PID %2!u!) has been terminated.\n"
STRING_TERM_CHILD_FAILED, "Error: Unable to terminate process with PID %1!u!, child of PID %2!u!.\n"
STRING_PARAM_TOO_MUCH, "Hata: Geçersiz sözdizimi. '%1' seçeneğine '%2!d!'den fazla kez izin verilmiyor..\n"
STRING_INVALID_SYNTAX, "Hata: Geçersiz sözdizimi.\n"
}

View File

@@ -7,7 +7,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
STRINGTABLE
{
STRING_USAGE, "用法taskkill [/?] [/f] [/im 进程名称 | /pid 进程 ID]\n"
STRING_USAGE, "用法taskkill [/?] [/f] [/im 进程名称 | /pid 进程 ID] [/t]\n"
STRING_INVALID_OPTION, "错误:指定了未知或无效的命令行选项。\n"
STRING_INVALID_PARAM, "错误:指定了无效的命令行参数。\n"
STRING_MISSING_OPTION, "错误:必须指定选项 /im 或 /pid。\n"
@@ -21,6 +21,10 @@ STRINGTABLE
STRING_ENUM_FAILED, "错误:无法枚举进程列表。\n"
STRING_TERMINATE_FAILED, "错误:无法终止进程“%1”。\n"
STRING_SELF_TERMINATION, "错误:不允许终止自身。\n"
// STRING_CLOSE_CHILD, "Sent termination signal to process with PID %1!u!, child of PID %2!u!.\n"
STRING_CLOSE_CHILD, "Close message sent to top-level windows of process with PID %1!u!, child of PID %2!u!.\n"
STRING_TERM_CHILD, "The process with PID %1!u! (child process of PID %2!u!) has been terminated.\n"
STRING_TERM_CHILD_FAILED, "Error: Unable to terminate process with PID %1!u!, child of PID %2!u!.\n"
STRING_PARAM_TOO_MUCH, "错误:无效语法。选项“%1”不允许超过“%2!d!”次。\n"
STRING_INVALID_SYNTAX, "错误:无效语法。\n"
}

View File

@@ -11,7 +11,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
STRINGTABLE
{
STRING_USAGE, "用法: taskkill [/?] [/f] [/im 處理程序名稱 | /pid PID]\n"
STRING_USAGE, "用法: taskkill [/?] [/f] [/im 處理程序名稱 | /pid PID] [/t]\n"
STRING_INVALID_OPTION, "錯誤: 指定了不明或不正確的命令列選項。\n"
STRING_INVALID_PARAM, "錯誤: 指定了不正確的命令列參數。\n"
STRING_MISSING_OPTION, "錯誤: 必須指定選項 /im 或 /pid 的其中之一。\n"
@@ -25,6 +25,10 @@ STRINGTABLE
STRING_ENUM_FAILED, "錯誤: 無法列舉處理程序清單。\n"
STRING_TERMINATE_FAILED, "錯誤: 無法終止處理程序 '%1'。\n"
STRING_SELF_TERMINATION, "錯誤: 處理程序不允許自我終止。\n"
// STRING_CLOSE_CHILD, "Sent termination signal to process with PID %1!u!, child of PID %2!u!.\n"
STRING_CLOSE_CHILD, "Close message sent to top-level windows of process with PID %1!u!, child of PID %2!u!.\n"
STRING_TERM_CHILD, "The process with PID %1!u! (child process of PID %2!u!) has been terminated.\n"
STRING_TERM_CHILD_FAILED, "Error: Unable to terminate process with PID %1!u!, child of PID %2!u!.\n"
STRING_PARAM_TOO_MUCH, "錯誤: 無效的語法。'%1' 選項不允許超過 '%2!d!' 次。\n"
STRING_INVALID_SYNTAX, "錯誤: 無效的語法。\n"
}

File diff suppressed because it is too large Load Diff

View File

@@ -35,6 +35,8 @@
#define STRING_ENUM_FAILED 112
#define STRING_TERMINATE_FAILED 113
#define STRING_SELF_TERMINATION 114
#define STRING_PARAM_TOO_MUCH 115
#define STRING_INVALID_SYNTAX 116
#define STRING_CLOSE_CHILD 115
#define STRING_TERM_CHILD 116
#define STRING_TERM_CHILD_FAILED 117
#define STRING_PARAM_TOO_MUCH 118
#define STRING_INVALID_SYNTAX 119

View File

@@ -1,7 +1,7 @@
add_definitions(-D__WINESRC__)
add_executable(wmic main.c wmic.rc)
target_link_libraries(wmic wine)
set_module_type(wmic win32cui UNICODE)
add_importlibs(wmic oleaut32 ole32 user32 msvcrt kernel32 ntdll)
add_cd_file(TARGET wmic DESTINATION reactos/system32/wbem FOR all)
set_wine_module_FIXME(wmic) # CORE-5743: No ARRAY_SIZE macro

View File

@@ -1,6 +1,4 @@
add_definitions(-D__WINESRC__)
list(APPEND SOURCE
arguments.c
host.c
@@ -18,3 +16,4 @@ add_importlibs(wscript shell32 oleaut32 ole32 user32 advapi32 msvcrt kernel32 nt
add_dependencies(wscript stdole2 wscript_idlheader)
add_pch(wscript precomp.h SOURCE)
add_cd_file(TARGET wscript DESTINATION reactos/system32 FOR all)
set_wine_module_FIXME(wscript) # CORE-5743: No ARRAY_SIZE macro

View File

@@ -1,7 +1,7 @@
add_definitions(-D__WINESRC__)
add_executable(xcopy xcopy.c xcopy.rc)
target_link_libraries(xcopy wine)
set_module_type(xcopy win32cui UNICODE)
add_importlibs(xcopy shell32 user32 msvcrt kernel32 ntdll)
add_cd_file(TARGET xcopy DESTINATION reactos/system32 FOR all)
set_wine_module_FIXME(xcopy) # CORE-5743: No ARRAY_SIZE macro

View File

@@ -50,7 +50,7 @@ où :\n\
[/A] Copie uniquement les fichiers qui ont l'attribut archive défini\n\
[/M] Copie uniquement les fichiers qui ont l'attribut archive défini ; supprime\n\
\tensuite l'attribut\n\
[/K] Copy file attributes, without this attributes are not preserved.\n\
[/K] Copie les attributs de fichiers. Sans ce paramètre les attributs ne sont pas conservés.\n\
[/D | /D:m-d-y] Copie uniquement les nouveaux fichiers, ou ceux modifiés après la date spécifiée.\n\
\t\tSi aucune date n'est spécifiée, copie uniquement lorsque le fichier de destination est plus ancien\n\
\t\tque le fichier source\n\n"

View File

@@ -40,6 +40,9 @@
#ifdef LANGUAGE_IT_IT
#include "lang/it-IT.rc"
#endif
#ifdef LANGUAGE_JA_JP
#include "lang/ja-JP.rc"
#endif
#ifdef LANGUAGE_PL_PL
#include "lang/pl-PL.rc"
#endif

View File

@@ -0,0 +1,7 @@
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
IDS_APP_TITLE "ReactOS クラッシュレポーター"
IDS_USER_ALERT_MESSAGE "アプリケーション %ls がクラッシュしました。このクラッシュに関する情報は次の場所に保存されました:\n\n%ls"
END

View File

@@ -3,7 +3,7 @@
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Romanian resource file
* TRANSLATORS: Copyright 2011-2019 Ștefan Fulea <stefan.fulea@mail.com>
* Copyright 2023 Andrei Miloiu <miloiuandrei@gmail.com>
* Copyright 2023-2025 Andrei Miloiu <miloiuandrei@gmail.com>
*/
LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
@@ -11,22 +11,22 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
IDD_MAIN_DIALOG DIALOGEX 0, 0, 478, 280
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU
CAPTION "Diagnostic ReactX"
CAPTION "Instrument de diagnosticare ReactX"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "Tab1", IDC_TAB_CONTROL, "SysTabControl32", WS_TABSTOP, 2, 2, 474, 250
PUSHBUTTON "&Manual…", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
DEFPUSHBUTTON "&Următorul compartiment", IDC_BUTTON_NEXT, 187, 260, 120, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "S&alvare informații…", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "Î&nchide", IDC_BUTTON_EXIT, 425, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Ajutor", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
DEFPUSHBUTTON "&Pagina următoare", IDC_BUTTON_NEXT, 187, 260, 120, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Salvare a tuturor informațiilor…", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "Î&nchidere", IDC_BUTTON_EXIT, 425, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END
IDD_SYSTEM_DIALOG DIALOGEX 0, 0, 462, 220
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Acest instrument oferă informații detaliate despre componentele ReactX și drivere instalate în sistem.", IDC_STATIC, 5, 0, 443, 17
LTEXT "Dacă aveți la cunoștință careva probleme la o anumită categorie, mergeți la compartimentul corespunzător de mai sus. Altfel, puteți utiliza butonul „Următorul compartiment” de mai jos pentru a trece secvențial prin fiecare categorie.", IDC_STATIC, 5, 15, 443, 25
LTEXT "Acest instrument raportează informații detaliate despre componentele ReactX și driverele instalate pe sistem.", IDC_STATIC, 5, 0, 443, 17
LTEXT "Dacă întâmpinați o problemă cu ReactX și știți ce este, atunci faceți clic pe fila corespunzătoare de mai sus. Dacă nu, puteți face clic pe butonul ""Pagina următoare"" de mai jos pentru a vizita fiecare pagină în succesiune.", IDC_STATIC, 5, 15, 443, 25
GROUPBOX "Informații despre sistem", IDC_STATIC, 5, 35, 452, 150, SS_RIGHT
LTEXT "Data/Ora curentă:", IDC_STATIC, 70, 50, 80, 10, SS_RIGHT
LTEXT "Numele calculatorului:", IDC_STATIC, 70, 60, 80, 10, SS_RIGHT
@@ -60,11 +60,11 @@ BEGIN
GROUPBOX "Dispozitiv", IDC_STATIC, 5, 0, 250, 95
RTEXT "Nume:", IDC_STATIC, 20, 10, 70, 10
RTEXT "Producător:", IDC_STATIC, 20, 20, 70, 10
RTEXT "Tipul cipului:", IDC_STATIC, 20, 30, 70, 10
RTEXT "Tipul CDA:", IDC_STATIC, 20, 40, 70, 10
RTEXT "Memorie aprox.:", IDC_STATIC, 20, 50, 70, 10
RTEXT "Afișare curentă:", IDC_STATIC, 20, 60, 70, 10
RTEXT "Ecran:", IDC_STATIC, 20, 70, 70, 10
RTEXT "Tipul chip-ului:", IDC_STATIC, 20, 30, 70, 10
RTEXT "Tipul DAC:", IDC_STATIC, 20, 40, 70, 10
RTEXT "Mem. tot. aprox.:", IDC_STATIC, 20, 50, 70, 10
RTEXT "Mod afișare curentă:", IDC_STATIC, 20, 60, 70, 10
RTEXT "Monitor:", IDC_STATIC, 20, 70, 70, 10
EDITTEXT IDC_STATIC_ADAPTER_ID, 95, 10, 150, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
EDITTEXT IDC_STATIC_ADAPTER_VENDOR, 95, 20, 150, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
EDITTEXT IDC_STATIC_ADAPTER_CHIP, 95, 30, 150, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
@@ -73,10 +73,10 @@ BEGIN
EDITTEXT IDC_STATIC_ADAPTER_MODE, 95, 60, 150, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
EDITTEXT IDC_STATIC_ADAPTER_MONITOR, 95, 70, 150, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
GROUPBOX "Driver", IDC_STATIC, 260, 0, 197, 95
RTEXT "Driver primar:", IDC_STATIC, 275, 10, 55, 10
RTEXT "Driver principal:", IDC_STATIC, 275, 10, 55, 10
RTEXT "Versiune:", IDC_STATIC, 275, 20, 55, 10
RTEXT "Dată:", IDC_STATIC, 275, 30, 55, 10
RTEXT "Semnăt. WHQL:", IDC_STATIC, 275, 40, 55, 10
RTEXT "Logo WHQL:", IDC_STATIC, 275, 40, 55, 10
RTEXT "Mini-VDD:", IDC_STATIC, 275, 50, 55, 10
RTEXT "VDD:", IDC_STATIC, 275, 60, 55, 10
RTEXT "Versiune DDI:", IDC_STATIC, 275, 70, 55, 10
@@ -87,18 +87,18 @@ BEGIN
EDITTEXT IDC_STATIC_ADAPTER_MINIVDD, 335, 50, 120, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
EDITTEXT IDC_STATIC_ADAPTER_VDD, 335, 60, 120, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
EDITTEXT IDC_STATIC_ADAPTER_DDI, 335, 70, 120, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
GROUPBOX "Funcționalități ReactX", IDC_STATIC, 5, 97, 452, 70
GROUPBOX "Caracteristici ReactX", IDC_STATIC, 5, 97, 452, 70
RTEXT "Accelerare DirectDraw:", IDC_STATIC, 15, 115, 110, 12
RTEXT "Accelerare Direct3D:", IDC_STATIC, 15, 130, 110, 12
RTEXT "Accelerare Textură AGP:", IDC_STATIC, 15, 145, 110, 12
RTEXT "Accelerare a texturilor AGP:", IDC_STATIC, 15, 145, 110, 12
LTEXT "", IDC_STATIC_DDSTATE, 130, 115, 40, 10
LTEXT "", IDC_STATIC_D3DSTATE, 130, 130, 40, 10
LTEXT "", IDC_STATIC_AGPSTATE, 130, 145, 40, 10
PUSHBUTTON "Activează", IDC_BUTTON_DDRAW, 170, 112, 60, 14, WS_DISABLED
PUSHBUTTON "Activează", IDC_BUTTON_D3D, 170, 128, 60, 14, WS_DISABLED
PUSHBUTTON "Activează", IDC_BUTTON_AGP, 170, 144, 60, 14, WS_DISABLED
PUSHBUTTON "Testează DirectDraw", IDC_BUTTON_TESTDD, 250, 112, 80, 14
PUSHBUTTON "Testează Direct3D", IDC_BUTTON_TEST3D, 250, 128, 80, 14
PUSHBUTTON "Activare", IDC_BUTTON_DDRAW, 170, 112, 60, 14, WS_DISABLED
PUSHBUTTON "Activare", IDC_BUTTON_D3D, 170, 128, 60, 14, WS_DISABLED
PUSHBUTTON "Activare", IDC_BUTTON_AGP, 170, 144, 60, 14, WS_DISABLED
PUSHBUTTON "Testare DirectDraw", IDC_BUTTON_TESTDD, 250, 112, 80, 14
PUSHBUTTON "Testare Direct3D", IDC_BUTTON_TEST3D, 250, 128, 80, 14
GROUPBOX "Note", IDC_STATIC, 5, 170, 452, 50
EDITTEXT IDC_TEXT_INFO, 15, 182, 432, 30, ES_LEFT | WS_BORDER | ES_READONLY | WS_TABSTOP
END
@@ -124,7 +124,7 @@ BEGIN
RTEXT "Nume:", IDC_STATIC, 275, 10, 55, 10
RTEXT "Versiune:", IDC_STATIC, 275, 20, 55, 10
RTEXT "Dată:", IDC_STATIC, 275, 30, 55, 10
RTEXT "Semnătură WHQL:", IDC_STATIC, 275, 40, 55, 10
RTEXT "Logo WHQL:", IDC_STATIC, 275, 40, 55, 10
RTEXT "Alte fișiere:", IDC_STATIC, 275, 50, 55, 10
RTEXT "Furnizor:", IDC_STATIC, 275, 60, 55, 10
EDITTEXT IDC_STATIC_DSOUND_DRIVER, 335, 10, 100, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
@@ -133,10 +133,10 @@ BEGIN
EDITTEXT IDC_STATIC_DSOUND_LOGO, 335, 40, 100, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
EDITTEXT IDC_STATIC_DSOUND_FILES, 335, 50, 100, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
EDITTEXT IDC_STATIC_ADAPTER_PROVIDER, 335, 60, 100, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
GROUPBOX "Funcționalități ReactX", IDC_STATIC, 5, 97, 452, 70
GROUPBOX "Caracteristici ReactX", IDC_STATIC, 5, 97, 452, 70
CONTROL "", IDC_SLIDER_DSOUND, "msctls_trackbar32", TBS_BOTTOM | TBS_AUTOTICKS | WS_TABSTOP, 110, 125, 80, 17
RTEXT "Echipament de sunet\nNivel de accelerare::", IDC_STATIC, 10, 125, 90, 20, WS_DISABLED
PUSHBUTTON "Testează DirectSound", IDC_BUTTON_TESTDSOUND, 270, 125, 80, 14, WS_DISABLED
RTEXT "Hardware de sunet\nNivel de accelerare:", IDC_STATIC, 10, 125, 90, 20, WS_DISABLED
PUSHBUTTON "Testare DirectSound", IDC_BUTTON_TESTDSOUND, 270, 125, 80, 14, WS_DISABLED
GROUPBOX "Note", IDC_STATIC, 5, 170, 452, 50
EDITTEXT IDC_TEXT_DSOUNDINFO, 15, 182, 432, 30, ES_LEFT | WS_BORDER | ES_READONLY | WS_TABSTOP
END
@@ -148,13 +148,13 @@ BEGIN
RTEXT "Colecție de MIDI DLS generală:", IDC_STATIC, 0, 0, 100, 10
EDITTEXT IDC_MIDI_DLS_COLLECTION, 105, 0, 250, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
GROUPBOX "Porturi de muzică", IDC_STATIC, 5, 10, 452, 85
GROUPBOX "Funcționalități ReactX", IDC_STATIC, 5, 97, 452, 70
GROUPBOX "Caracteristici ReactX", IDC_STATIC, 5, 97, 452, 70
LTEXT "Port de accelerare implicit:", IDC_STATIC, 15, 120, 95, 17
LTEXT "", IDC_STATIC_DEFAULT_PORT_ACCELERATION, 115, 120, 50, 10
PUSHBUTTON "Dezactivează", IDC_BUTTON_DISABLEDMUSIC, 75, 135, 80, 14, WS_DISABLED
LTEXT "Testare utilizare port:", IDC_STATIC, 180, 105, 100, 10
LISTBOX IDC_DMUSIC_TEST_LIST, 180, 115, 180, 45, LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Testează DirectMusic", IDC_BUTTON_TESTDMUSIC, 370, 145, 80, 14, WS_DISABLED
PUSHBUTTON "Testare DirectMusic", IDC_BUTTON_TESTDMUSIC, 370, 145, 80, 14, WS_DISABLED
GROUPBOX "Note", IDC_STATIC, 5, 170, 452, 50
EDITTEXT IDC_MUSIC_NOTES, 15, 182, 432, 30, ES_LEFT | WS_BORDER | ES_READONLY | WS_TABSTOP
END
@@ -176,12 +176,12 @@ IDD_NETWORK_DIALOG DIALOGEX 0, 0, 462, 220
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "Furnizori înregistrați de servicii DirectPlay", IDC_STATIC, 5, 0, 452, 75
GROUPBOX "Furnizori de servicii DirectPlay înregistrați", IDC_STATIC, 5, 0, 452, 75
CONTROL "", IDC_LIST_PROVIDER, "SysListView32", LVS_REPORT | WS_CHILD | WS_BORDER | WS_TABSTOP, 15, 12, 432, 55
GROUPBOX "Aplicații înregistrate pentru DirectPlay", IDC_STATIC, 5, 77, 452, 55
GROUPBOX "Funcționalități ReactX", IDC_STATIC, 5, 133, 452, 35
GROUPBOX "Aplicații Lobbyable DirectPlay înregistrate", IDC_STATIC, 5, 77, 452, 55
GROUPBOX "Caracteristici ReactX", IDC_STATIC, 5, 133, 452, 35
PUSHBUTTON "Opțiuni de voce DirectPlay", IDC_BUTTON_VOICE_OPTIONS, 10, 145, 90, 14, WS_DISABLED
PUSHBUTTON "Testează DirectPlay", IDC_BUTTON_TESTDPLAY, 130, 145, 80, 14, WS_DISABLED
PUSHBUTTON "Testare DirectPlay", IDC_BUTTON_TESTDPLAY, 130, 145, 80, 14, WS_DISABLED
GROUPBOX "Note", IDC_STATIC, 5, 170, 452, 50
EDITTEXT IDC_NETWORK_NOTES, 15, 182, 432, 30, ES_LEFT | WS_BORDER | ES_READONLY | WS_TABSTOP
END
@@ -190,73 +190,73 @@ IDD_HELP_DIALOG DIALOGEX 0, 0, 462, 220
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Încă nu ați găsit informația necesară? Iată câteva lucruri suplimentare pe care le puteți face:", IDC_STATIC, 5, 0, 300, 10
LTEXT "Încă nu găsiți informațiile pe care le căutați? Iată câteva lucruri suplimentare pe care le puteți face:", IDC_STATIC, 5, 0, 300, 10
PUSHBUTTON "Informații de sistem", IDC_BUTTON_SYSINFO, 5, 20, 80, 14, WS_DISABLED
LTEXT "Afișează informații suplimantare de sistem", IDC_STATIC, 90, 23, 300, 10
PUSHBUTTON "Ajustează rata de împrospătare", IDC_BUTTON_DDRAW_REFRESH, 5, 40, 80, 14, WS_DISABLED
LTEXT "Ajustează rata de împrospătare pentru DirectDraw", IDC_STATIC, 90, 43, 300, 10
LTEXT "Afișează informații suplimentare de sistem", IDC_STATIC, 90, 23, 300, 10
PUSHBUTTON "Ajust. rata de împrosp.", IDC_BUTTON_DDRAW_REFRESH, 5, 40, 80, 14, WS_DISABLED
LTEXT "Ignoră rata de reîmprospătare pentru DirectDraw", IDC_STATIC, 90, 43, 300, 10
END
STRINGTABLE
BEGIN
IDS_MAIN_DIALOG "Diagnostic ReactX"
IDS_MAIN_DIALOG "Instrument de diagnosticare ReactX"
IDS_SYSTEM_DIALOG "Sistem"
IDS_DISPLAY_DIALOG "Ecran"
IDS_DISPLAY_DIALOG "Afișaj"
IDS_SOUND_DIALOG "Sunet"
IDS_MUSIC_DIALOG "Muzică"
IDS_INPUT_DIALOG "Intrări"
IDS_INPUT_DIALOG "Intrare"
IDS_NETWORK_DIALOG "Rețea"
IDS_HELP_DIALOG "Asistență"
IDS_FORMAT_MB "%I64u Mo memorie"
IDS_FORMAT_SWAP "%I64u Mo utilizată, %I64u Mo disponibilă"
IDS_FORMAT_UNIPROC "%s (%u procesor)"
IDS_FORMAT_MPPROC "%s (%u procesoare)"
IDS_VERSION_UNKNOWN "Versiune neidentificată"
IDS_HELP_DIALOG "Ajutor"
IDS_FORMAT_MB "%I64uMB de RAM"
IDS_FORMAT_SWAP "%I64u (de) MB folosit (folosiți), %I64u (de) MB disponibil(i)"
IDS_FORMAT_UNIPROC "%s (%u CPU)"
IDS_FORMAT_MPPROC "%s (%u CPUs)"
IDS_VERSION_UNKNOWN "Versiune necunoscută"
IDS_DEVICE_STATUS_ATTACHED "Conectat"
IDS_DEVICE_STATUS_MISSING "Deconectat"
IDS_DEVICE_STATUS_UNKNOWN "Neidentificat"
IDS_DEVICE_NAME "Nume dispozitiv"
IDS_DEVICE_STATUS_UNKNOWN "Necunoscut"
IDS_DEVICE_NAME "Numele dispozitivului"
IDS_DEVICE_STATUS "Stare"
IDS_DEVICE_CONTROLLER "ID controlor"
IDS_DEVICE_MANUFACTURER "ID producător"
IDS_DEVICE_PRODUCT "ID produs"
IDS_DEVICE_FORCEFEEDBACK "Forțează reacția driverului"
IDS_DEVICE_CONTROLLER "ID controller-ului"
IDS_DEVICE_MANUFACTURER "ID-ul producătorului"
IDS_DEVICE_PRODUCT "ID-ul produsului"
IDS_DEVICE_FORCEFEEDBACK "Forțare a driverului de feedback"
IDS_NOT_APPLICABLE "n/a"
IDS_OPTION_YES "Da"
IDS_DIRECTPLAY_COL_NAME1 "Nume"
IDS_DIRECTPLAY_COL_NAME2 "Registru"
IDS_DIRECTPLAY_COL_NAME3 "Fișier"
IDS_DIRECTPLAY_COL_NAME4 "Versiune"
IDS_DIRECTPLAY8_MODEMSP "Furnizor de serviciu Modem-DirectPlay8"
IDS_DIRECTPLAY8_SERIALSP "Furnizor de serviciu Serial-DirectPlay8"
IDS_DIRECTPLAY8_IPXSP "Furnizor de serviciu IPX-DirectPlay8"
IDS_DIRECTPLAY8_TCPSP "Furnizor de serviciu TCP/IP-DirectPlay8"
IDS_DIRECTPLAY8_MODEMSP "Furnizor de servicii de modem DirectPlay8"
IDS_DIRECTPLAY8_SERIALSP "Furnizor de servicii seriale DirectPlay8"
IDS_DIRECTPLAY8_IPXSP "Furnizor de servicii DirectPlay8 IPX"
IDS_DIRECTPLAY8_TCPSP "DirectPlay8 TCP/IP Service Provider"
IDS_DIRECTPLAY_TCPCONN "Conexiune de Internet TCP/IP pentru DirectPlay"
IDS_DIRECTPLAY_IPXCONN "Conexiune IPX pentru DirectPlay"
IDS_DIRECTPLAY_MODEMCONN "Conexiune Modem pentru DirectPlay"
IDS_DIRECTPLAY_SERIALCONN "Conexiune Serială pentru DirectPlay"
IDS_REG_SUCCESS "Î&nchide"
IDS_DIRECTPLAY_MODEMCONN "Conexiune de modem pentru DirectPlay"
IDS_DIRECTPLAY_SERIALCONN "Conexiune serială pentru DirectPlay"
IDS_REG_SUCCESS "OK"
IDS_REG_FAIL "Eroare"
IDS_DDTEST_ERROR "Testul a eșuat!"
IDS_DDTEST_DESCRIPTION "Urmează testele de interfață DirectDraw. Continuați?"
IDS_DDPRIMARY_DESCRIPTION "Testul următor va utiliza DirectDraw pentru a desena dreptunghiuri albe și negre pe suprafața primară. Continuați?"
IDS_DDPRIMARY_RESULT "Dreptunghiurile albe și negre au fost vizibile?"
IDS_DDOFFSCREEN_DESCRIPTION "Testul următor va utiliza DirectDraw pentru desenarea unui dreptunghi alb în mișcare utilizând o memorie tampon din afara ecranului. Continuați?"
IDS_DDOFFSCREEN_RESULT "Dreptunghiul alb în mișcare a fost vizibil?"
IDS_DDFULLSCREEN_DESCRIPTION "Testul următor va utiliza DirectDraw pentru desenarea unui dreptunghi alb în mișcare utilizând tot ecranul. Continuați?"
IDS_DDFULLSCREEN_RESULT "Pe ecranul complet, dreptunghiul alb în mișcare a fost vizibil?"
IDS_FORMAT_ADAPTER_MEM "%u Mo"
IDS_FORMAT_ADAPTER_MODE "%d x %d (%u biți)(%uHz)"
IDS_DDTEST_ERROR "Testul de randare DirectDraw a eșuat.\nVă rugăm să consultați notele pentru mai multe informații."
IDS_DDTEST_DESCRIPTION "Acesta va porni testarea interfeței DirectDraw. Doriți să continuați?"
IDS_DDPRIMARY_DESCRIPTION "Acest test va folosi DirectDraw pentru a desena pe suprafața principală.\nAr trebui desenate dreptunghiuri alb-negru. Doriți să continuați?"
IDS_DDPRIMARY_RESULT "Ați văzut dreptunghiuri alb-negru?"
IDS_DDOFFSCREEN_DESCRIPTION "Acest test va folosi DirectDraw pentru a desena un tampon în afara ecranului. Ar trebui desenat un dreptunghi alb în mișcare. Doriți să continuați?"
IDS_DDOFFSCREEN_RESULT "Ați văzut dreptunghi alb în mișcare?"
IDS_DDFULLSCREEN_DESCRIPTION "Acest test va folosi DirectDraw pentru a desena în modul ecran complet. Ar trebui desenat un dreptunghi alb în mișcare. Doriți să continuați?"
IDS_DDFULLSCREEN_RESULT "Ați văzut dreptunghi alb în mișcare în modul ecran complet?"
IDS_FORMAT_ADAPTER_MEM "%u (de) MB"
IDS_FORMAT_ADAPTER_MODE "%d x %d (%u (de) biți)(%uHz)"
IDS_OPTION_NO "Nu"
IDS_D3DTEST_DESCRIPTION "Urmează testul de interfață Direct3D. Continuați?"
IDS_D3DTEST_D3Dx "Testul următor va utiliza interfața Direct3D %u cu accelerare de echipament fizic."
IDS_OS_VERSION "%s %s (%d.%d, Build %d)"
IDS_D3DTEST_DESCRIPTION "Acesta va porni testarea interfeței Direct3D. Doriți să continuați?"
IDS_D3DTEST_D3Dx "Acest test va folosi interfața Direct3D %u accelerată hardware."
IDS_OS_VERSION "%s %s (%d.%d, Subversiunea %d)"
IDS_DMUSIC_DESC "Descriere"
IDS_DMUSIC_TYPE "Tip"
IDS_DMUSIC_KERNEL "Mod nucleu"
IDS_DMUSIC_IO "In/Ex"
IDS_DMUSIC_DLS "DLS de suport"
IDS_DMUSIC_KERNEL "Modul nucleu"
IDS_DMUSIC_IO "I/E"
IDS_DMUSIC_DLS "Suportă DLS"
IDS_DMUSIC_EXT "Extern"
IDS_DMUSIC_PORT "Port implicit"
IDS_DDDISABLE_MSG "Accelerările fizice DirectDraw vor fi dezactivate pentru toate dispozitivele.\nDoriți să continuați?\n"
IDS_DDDISABLE_MSG "Acesta va dezactiva toată accelerarea hardware pentru DirectDraw pe toate dispozitivele de afișare.\nDoriți să continuați?\n"
END

View File

@@ -1,7 +1,7 @@
add_definitions(-D__WINESRC__)
add_executable(extrac32 extrac32.c)
target_link_libraries(extrac32 wine)
set_module_type(extrac32 win32gui UNICODE)
add_importlibs(extrac32 shell32 setupapi shlwapi user32 msvcrt kernel32 ntdll)
add_cd_file(TARGET extrac32 DESTINATION reactos/system32 FOR all)
set_wine_module_FIXME(extrac32) # CORE-5743: No ARRAY_SIZE macro

View File

@@ -40,6 +40,9 @@
#ifdef LANGUAGE_IT_IT
#include "lang/it-IT.rc"
#endif
#ifdef LANGUAGE_JA_JP
#include "lang/ja-JP.rc"
#endif
#ifdef LANGUAGE_LT_LT
#include "lang/lt-LT.rc"
#endif

View File

@@ -0,0 +1,13 @@
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
IDS_USAGE "FINDSTR: 文字列を含むファイルのすべての行を出力します。\n\n\
FIND [ /C ] [ /I ] [ /N ] [ /V ] ""文字列"" [ ファイル... ]\n\
/C 文字列を含む行の個数を数えます\n\
/I 大文字小文字を無視します\n\
/N 表示される行に1から番号を付けます\n\
/V 文字列を含まない行を出力します"
IDS_NO_SUCH_FILE "FINDSTR: %s: そのようなファイルはありません\n"
IDS_CANNOT_OPEN "FINDSTR: %s: ファイルが開けません\n"
END

View File

@@ -18,12 +18,12 @@ BEGIN
IDS_ERROR_NOMEM "Mémoire insuffisante pour terminer l'opération."
IDS_ERROR_NOFONT "Le fichier %1 n'est pas un fichier de polices valide."
IDS_ERROR_NOCLASS "Impossible d'initialiser la classe de fenêtre."
IDS_ERROR_ISINSTALLED "This font is already installed!"
IDS_ERROR_FONTCPY "Failed to copy the font file!"
IDS_ERROR_OPENKEY "Failed to open the fonts registry key!"
IDS_ERROR_REGISTER "Failed to register the new font!"
IDS_SUCCESS "Success"
IDS_COMPLETED "Font installation completed."
IDS_ERROR_ISINSTALLED "Cette police est déjà installée !"
IDS_ERROR_FONTCPY "Échec lors de la copie du fichier police !"
IDS_ERROR_OPENKEY "Échec lors de l'ouverture de la clé de registre de la police !"
IDS_ERROR_REGISTER "Échec lors de l'enregistrement de la nouvelle police !"
IDS_SUCCESS "Succès"
IDS_COMPLETED "Installation de la police effectuée."
IDS_FILTER_LIST "Toutes polices supportées (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
Fichier de polices (*.fon;*.fnt)\0*.fon;*.fnt\0\
Fichier de polices TrueType (*.ttf)\0*.ttf\0\

View File

@@ -18,7 +18,7 @@ BEGIN
END
POPUP "&View"
BEGIN
MENUITEM "Single-Window &Mode", IDM_SWITCHVIEW
MENUITEM "&Mode fenêtre unique", IDM_SWITCHVIEW
END
POPUP "Périp&hérique"
BEGIN

View File

@@ -9,23 +9,23 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "終了(&E)", IDM_EXIT
END
POPUP "&Play"
POPUP "再生(&P)"
BEGIN
MENUITEM "Play/&Pause\tCtrl+P", IDC_PLAY
MENUITEM "St&op\tCtrl+S", IDC_STOP
MENUITEM "再生/再開(&P)\tCtrl+P", IDC_PLAY
MENUITEM "停止(&O)\tCtrl+S", IDC_STOP
MENUITEM SEPARATOR
MENUITEM "Repea&t\tCtrl+T", IDM_REPEAT
MENUITEM "リピート(&T)\tCtrl+T", IDM_REPEAT
END
POPUP "&View"
POPUP "表示(&V)"
BEGIN
MENUITEM "Single-Window &Mode", IDM_SWITCHVIEW
MENUITEM "単一ウィンドウモード(&M)", IDM_SWITCHVIEW
END
POPUP "&Device"
POPUP "デバイス(&D)"
BEGIN
MENUITEM SEPARATOR
MENUITEM "&Properties", IDM_DEVPROPS
MENUITEM "プロパティ(&P)", IDM_DEVPROPS
MENUITEM SEPARATOR
MENUITEM "&Volume Control", IDM_VOLUMECTL
MENUITEM "音量調節(&V)", IDM_VOLUMECTL
END
POPUP "ヘルプ(&H)"
BEGIN
@@ -44,14 +44,14 @@ END
STRINGTABLE
BEGIN
IDS_MODE_UNKNOWN "Unknown"
IDS_MODE_OPEN "Opened"
IDS_MODE_STOP "Stopped"
IDS_MODE_PLAY "Playing"
IDS_MODE_PAUSE "Paused"
IDS_MODE_RECORD "Recording"
IDS_MODE_SEEK "Seeking"
IDS_MODE_NOT_READY "Not ready"
IDS_MODE_UNKNOWN "不明"
IDS_MODE_OPEN "開きました"
IDS_MODE_STOP "停止中"
IDS_MODE_PLAY "再生中"
IDS_MODE_PAUSE "一時停止中"
IDS_MODE_RECORD "録音中"
IDS_MODE_SEEK "シーク中"
IDS_MODE_NOT_READY "準備ができていません"
IDS_ALL_TYPES_FILTER "すべてのサポートされたファイル"
IDS_TOOLTIP_PLAY "再生"
IDS_TOOLTIP_STOP "停止"
@@ -60,8 +60,8 @@ BEGIN
IDS_TOOLTIP_SEEKBACK "後ろへシーク"
IDS_TOOLTIP_SEEKFORW "前へシーク"
IDS_TOOLTIP_FORWARD "前へスキップ"
IDS_TOOLTIP_PAUSE "Pause"
IDS_TOOLTIP_PAUSE "一時停止"
IDS_APPTITLE "ReactOS マルチメディア プレーヤー"
IDS_PLAY "再生"
IDS_DEFAULTMCIERRMSG "No description is available for this error."
IDS_DEFAULTMCIERRMSG "このエラーの説明はありません。"
END

View File

@@ -0,0 +1,171 @@
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
IDD_MSCONFIG_DIALOG DIALOGEX 0, 0, 378, 220
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU
CAPTION "システム構成プログラム"
FONT 9, "MS UI Gothic"
BEGIN
CONTROL "Tab1", IDC_TAB, "SysTabControl32", WS_TABSTOP, 2, 2, 374, 195
DEFPUSHBUTTON "OK", IDOK, 211, 201, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "ヘルプ(&H)", IDC_BTN_HELP, 2, 201, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "キャンセル", IDCANCEL, 267, 201, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "適用", IDC_BTN_APPLY, 323, 201, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END
IDD_STARTUP_PAGE DIALOGEX 0, 0, 362, 175
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 9, "MS UI Gothic"
BEGIN
CONTROL "List3", IDC_STARTUP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 2, 1, 360, 148
PUSHBUTTON "すべて有効化(&A)", IDC_BTN_STARTUP_ACTIVATE, 223, 155, 66, 14
PUSHBUTTON "すべて無効化(&D)", IDC_BTN_STARTUP_DEACTIVATE, 295, 155, 66, 14
END
IDD_SYSTEM_PAGE DIALOGEX 0, 0, 362, 175
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 9, "MS UI Gothic"
BEGIN
CONTROL "", IDC_SYSTEM_TREE, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES |
TVS_LINESATROOT | TVS_EDITLABELS | TVS_SHOWSELALWAYS | WS_CHILD |
WS_VISIBLE | WS_BORDER | WS_TABSTOP, 2, 1, 280, 148
PUSHBUTTON "上へ(&U)", IDC_BTN_SYSTEM_UP, 290, 5, 66, 14
PUSHBUTTON "下へ(&D)", IDC_BTN_SYSTEM_DOWN, 290, 25, 66, 14
PUSHBUTTON "有効化(&E)", IDC_BTN_SYSTEM_ENABLE, 290, 50, 66, 14
PUSHBUTTON "無効化(&I)", IDC_BTN_SYSTEM_DISABLE, 290, 70, 66, 14
PUSHBUTTON "検索(&F)", IDC_BTN_SYSTEM_FIND, 290, 95, 66, 14
PUSHBUTTON "新規(&N)", IDC_BTN_SYSTEM_NEW, 290, 115, 66, 14
PUSHBUTTON "編集(&T)", IDC_BTN_SYSTEM_EDIT, 290, 135, 66, 14
PUSHBUTTON "すべて有効化(&B)", IDC_BTN_SYSTEM_ACTIVATE, 123, 155, 66, 14
PUSHBUTTON "すべて無効化(&L)", IDC_BTN_SYSTEM_DEACTIVATE, 195, 155, 66, 14
END
IDD_TOOLS_PAGE DIALOGEX 0, 0, 362, 175
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 9, "MS UI Gothic"
BEGIN
CONTROL "List2", IDC_TOOLS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 2, 1, 360, 134
EDITTEXT IDC_TOOLS_CMDLINE, 1, 139, 360, 12, ES_READONLY
PUSHBUTTON "実行(&R)", IDC_BTN_RUN, 311, 155, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END
IDD_SERVICES_PAGE DIALOGEX 0, 0, 362, 175
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 9, "MS UI Gothic"
BEGIN
CONTROL "List1", IDC_SERVICES_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | LVS_SORTASCENDING | WS_BORDER | WS_TABSTOP, 2, 1, 360, 148
PUSHBUTTON "すべて有効化(&A)", IDC_BTN_SERVICES_ACTIVATE, 223, 155, 66, 14
PUSHBUTTON "すべて無効化(&D)", IDC_BTN_SERVICES_DEACTIVATE, 295, 155, 66, 14
END
IDD_GENERAL_PAGE DIALOGEX 0, 0, 362, 175
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 9, "MS UI Gothic"
BEGIN
GROUPBOX "起動の種類の選択", -1, 10, 10, 340, 150, 0, WS_EX_TRANSPARENT
CONTROL "通常起動(&N) - すべてのデバイスドライバとサービスを読み込む", IDC_CBX_NORMAL_START, "Button", 0x50010009, 20, 30, 260, 10
CONTROL "診断的起動(&D) - 基本的なデバイスとサービスのみを読み込む", IDC_CBX_DIAGNOSTIC_START, "Button", 0x50010009, 20, 45, 260, 10
CONTROL "選択的起動(&E)", IDC_CBX_SELECTIVE_STARTUP, "Button", 0x50010009, 20, 60, 260, 10
AUTOCHECKBOX "ファイル SYSTEM.INI を処理(&R)", IDC_CBX_SYSTEM_INI, 30, 80, 260, 10
AUTOCHECKBOX "システムサービスの読み込み(&L)", IDC_CBX_SYSTEM_SERVICE, 30, 95, 260, 10
AUTOCHECKBOX "スタートアップ項目を読み込む(&O)", IDC_CBX_STARTUP_ITEM, 30, 110, 260, 10
END
IDD_FREELDR_PAGE DIALOGEX 0, 0, 362, 175
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 9, "MS UI Gothic"
BEGIN
LISTBOX IDC_LIST_BOX, 10, 10, 340, 50, WS_CHILD | WS_VISIBLE | WS_TABSTOP |
LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL
PUSHBUTTON "すべての起動パスを確認する(&C)", IDC_BTN_CHECK_BOOT_PATH, 10, 65, 70, 12
PUSHBUTTON "デフォルトにする(&S)", IDC_BTN_SET_DEFAULT_BOOT, 100, 65, 70, 12
PUSHBUTTON "上へ(&U)", IDC_BTN_MOVE_UP_BOOT_OPTION, 190, 65, 70, 12
PUSHBUTTON "下へ(&D)", IDC_BTN_MOVE_DOWN_BOOT_OPTION, 280, 65, 70, 12
GROUPBOX "起動オプション", -1, 10, 80, 250, 90, 0, WS_EX_TRANSPARENT
CHECKBOX "/SA&FEBOOT", IDC_CBX_SAFE_BOOT, 15, 90, 55, 10
CHECKBOX "/&NOGUIBOOT", IDC_CBX_NO_GUI_BOOT, 15, 105, 60, 10
CHECKBOX "/&BOOTLOG", IDC_CBX_BOOT_LOG, 15, 120, 50, 10
CHECKBOX "/BAS&EVIDEO", IDC_CBX_BASE_VIDEO, 15, 135, 55, 10
CHECKBOX "/S&OS", IDC_CBX_SOS, 15, 150, 50, 10
PUSHBUTTON "詳細オプション(&V)...", IDC_BTN_ADVANCED_OPTIONS, 100, 150, 70, 12
LTEXT "タイムアウト(&T):", -1, 280, 91, 30, 10
EDITTEXT IDC_TXT_BOOT_TIMEOUT, 310, 90, 25, 12, ES_LEFT
LTEXT "秒", -1, 340, 91, 15, 10
END
IDD_FREELDR_ADVANCED_PAGE DIALOGEX 0, 0, 175, 175
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 9, "MS UI Gothic"
BEGIN
CHECKBOX "/&MAXMEM=", IDC_CBX_MAX_MEM, 10, 10, 50, 10
EDITTEXT IDC_TXT_MAX_MEM, 80, 10, 60, 12
CONTROL "", IDC_SCR_MAX_MEM, "msctls_updown32", 0x50000000, 140, 10, 11, 11
CHECKBOX "/&NUMPROC=", IDC_CBX_NUM_PROC, 10, 25, 50, 10
COMBOBOX IDC_DRP_NUM_PROC, 80, 25, 60, 10, CBS_DROPDOWNLIST | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP
CHECKBOX "/&PCILOCK", IDC_CBX_PCI_LOCK, 10, 40, 50, 10
CHECKBOX "/P&ROFILE", IDC_CBX_PROFILE, 10, 55, 50, 10
CHECKBOX "/&IRQ", IDC_CBX_IRQ, 10, 70, 40, 12
EDITTEXT IDC_TXT_IRQ, 80, 70, 60, 12, ES_LEFT
CHECKBOX "/&DEBUG", IDC_CBX_DEBUG, 10, 85, 40, 10
CHECKBOX "/D&EBUGPORT", IDC_CBX_DEBUG_PORT, 20, 100, 60, 10
COMBOBOX IDC_DRP_DEBUG_PORT, 80, 100, 60, 10, CBS_DROPDOWNLIST | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP
CHECKBOX "/&BAUDRATE", IDC_CBX_BAUD_RATE, 20, 115, 50, 10
COMBOBOX IDC_DRP_DRP_BAUD_RATE, 80, 115, 60, 10, CBS_DROPDOWNLIST | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP
CHECKBOX "/&CHANNEL", IDC_CBX_CHANNEL, 20, 130, 50, 10
EDITTEXT IDC_TXT_CHANNEL, 80, 130, 60, 12, ES_LEFT
CONTROL "", IDC_SCR_CHANNEL, "msctls_updown32", 0x50000000, 140, 130, 11, 11
PUSHBUTTON "OK", IDC_OK, 20, 160, 50, 12
PUSHBUTTON "キャンセル", IDC_CANCEL, 100, 160, 50, 12
END
STRINGTABLE
BEGIN
IDS_MSCONFIG "システム構成プログラム"
IDS_TAB_GENERAL "一般"
IDS_TAB_SYSTEM "SYSTEM.INI"
IDS_TAB_FREELDR "FREELDR.INI"
IDS_TAB_SERVICES "サービス"
IDS_TAB_STARTUP "スタートアップ"
IDS_TAB_TOOLS "ツール"
END
STRINGTABLE
BEGIN
IDS_SERVICES_COLUMN_SERVICE "サービス"
IDS_SERVICES_COLUMN_REQ "必要"
IDS_SERVICES_COLUMN_VENDOR "ベンダー"
IDS_SERVICES_COLUMN_STATUS "状態"
END
STRINGTABLE
BEGIN
IDS_TOOLS_COLUMN_NAME "名前"
IDS_TOOLS_COLUMN_DESCR "説明"
IDS_TOOLS_CMD_NAME "コンソール"
IDS_TOOLS_CMD_DESCR ""
IDS_TOOLS_CMD_CMD "cmd.exe"
IDS_TOOLS_INFO_NAME "バージョン"
IDS_TOOLS_INFO_DESCR "バージョン情報を表示します。"
IDS_TOOLS_INFO_CMD "winver.exe"
IDS_TOOLS_REGEDIT_NAME "レジストリ エディタ"
IDS_TOOLS_REGEDIT_DESCR "レジストリ エディタを開きます。"
IDS_TOOLS_REGEDIT_CMD "regedit.exe"
IDS_TOOLS_SYSDM_NAME "システムプロパティ"
IDS_TOOLS_SYSDM_DESCR "このコンピューターに関する情報を表示します。"
IDS_TOOLS_SYSDM_CMD "control.exe"
IDS_TOOLS_SYSDM_PARAM "sysdm.cpl"
IDS_STARTUP_COLUMN_ELEMENT "要素"
IDS_STARTUP_COLUMN_CMD "コマンド"
IDS_STARTUP_COLUMN_PATH "パス"
END
STRINGTABLE
BEGIN
IDS_SERVICES_STATUS_RUNNING "実行中"
IDS_SERVICES_STATUS_STOPPED "停止"
IDS_SERVICES_YES "はい"
IDS_SERVICES_UNKNOWN "不明"
END

View File

@@ -54,6 +54,9 @@ IDI_APPICON ICON "res/msconfig.ico"
#ifdef LANGUAGE_IT_IT
#include "lang/it-IT.rc"
#endif
#ifdef LANGUAGE_JA_JP
#include "lang/ja-JP.rc"
#endif
#ifdef LANGUAGE_KO_KR
#include "lang/ko-KR.rc"
#endif

View File

@@ -28,11 +28,11 @@ BEGIN
CONTROL "Exécuter le fichier &WIN.INI", IDC_CBX_WIN_INI, "Button", BS_AUTO3STATE | WS_TABSTOP, 35, 98, 316, 10
CONTROL "C&harger les services système", IDC_CBX_LOAD_SYSTEM_SERVICES, "Button", BS_AUTO3STATE | WS_TABSTOP, 35, 110, 316, 10
CONTROL "&Charger les éléments de démarrage", IDC_CBX_LOAD_STARTUP_ITEMS, "Button", BS_AUTO3STATE | WS_TABSTOP, 35, 122, 316, 10
CONTROL "&Utiliser la configuration de démarrage dorigine", IDC_CBX_USE_ORIGINAL_BOOTCFG, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 35, 134, 316, 10
CONTROL "&Utiliser la configuration de démarrage d'origine", IDC_CBX_USE_ORIGINAL_BOOTCFG, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 35, 134, 316, 10
PUSHBUTTON "Exéc&uter la restauration du système", IDC_BTN_SYSTEM_RESTORE_START, 146, 156, 124, 14
PUSHBUTTON "E&xtraire le fichier...", IDC_BTN_FILE_EXTRACTION, 275, 156, 85, 14
GROUPBOX "Sélection du mode de démarrage ", IDC_STATIC, 5, 5, 356, 145
LTEXT "Charger tous les pilotes de périphériques et tous les services", IDC_STATIC, 25, 30, 322, 10
LTEXT "Charger tous les pilotes de périphérique et tous les services", IDC_STATIC, 25, 30, 322, 10
LTEXT "Charger seulement les pilotes de périphérique et les services de base", IDC_STATIC, 25, 58, 322, 10
END

View File

@@ -1978,6 +1978,7 @@ EnumEventsThread(IN LPVOID lpParameter)
BOOL bResult = TRUE; /* Read succeeded */
HANDLE hProcessHeap = GetProcessHeap();
PSID pLastSid = NULL;
INT nItems;
UINT uStep = 0, uStepAt = 0, uPos = 0;
@@ -1997,11 +1998,12 @@ EnumEventsThread(IN LPVOID lpParameter)
SYSTEMTIME time;
LVITEMW lviEventItem;
EnableEventDetailsButtons(hwndEventDetails, FALSE);
/* Save the current event log filter globally */
EventLogFilter_AddRef(EventLogFilter);
ActiveFilter = EventLogFilter;
/** HACK!! **/
EventLog = EventLogFilter->EventLogs[0];
@@ -2263,6 +2265,8 @@ Quit:
/* All events loaded */
Cleanup:
nItems = ListView_GetItemCount(hwndListView);
EnableEventDetailsButtons(hwndEventDetails, (nItems > 0));
ShowWindow(hwndStatusProgress, SW_HIDE);
SendMessageW(hwndListView, LVM_PROGRESS, 0, FALSE);
@@ -3037,6 +3041,22 @@ InitInstance(HINSTANCE hInstance)
HIMAGELIST hSmall;
LVCOLUMNW lvc = {0};
WCHAR szTemp[256];
INT iColumn;
static const struct
{
WORD width;
WORD uID;
} columnItems[] =
{
{ 90, IDS_COLUMNTYPE },
{ 70, IDS_COLUMNDATE },
{ 70, IDS_COLUMNTIME },
{ 150, IDS_COLUMNSOURCE },
{ 100, IDS_COLUMNCATEGORY },
{ 60, IDS_COLUMNEVENT },
{ 120, IDS_COLUMNUSER },
{ 100, IDS_COLUMNCOMPUTER },
};
/* Create the main window */
rs = Settings.wpPos.rcNormalPosition;
@@ -3180,69 +3200,13 @@ InitInstance(HINSTANCE hInstance)
/* Now set up the listview with its columns */
lvc.mask = LVCF_TEXT | LVCF_WIDTH;
lvc.cx = 90;
LoadStringW(hInstance,
IDS_COLUMNTYPE,
szTemp,
ARRAYSIZE(szTemp));
lvc.pszText = szTemp;
ListView_InsertColumn(hwndListView, 0, &lvc);
lvc.cx = 70;
LoadStringW(hInstance,
IDS_COLUMNDATE,
szTemp,
ARRAYSIZE(szTemp));
lvc.pszText = szTemp;
ListView_InsertColumn(hwndListView, 1, &lvc);
lvc.cx = 70;
LoadStringW(hInstance,
IDS_COLUMNTIME,
szTemp,
ARRAYSIZE(szTemp));
lvc.pszText = szTemp;
ListView_InsertColumn(hwndListView, 2, &lvc);
lvc.cx = 150;
LoadStringW(hInstance,
IDS_COLUMNSOURCE,
szTemp,
ARRAYSIZE(szTemp));
lvc.pszText = szTemp;
ListView_InsertColumn(hwndListView, 3, &lvc);
lvc.cx = 100;
LoadStringW(hInstance,
IDS_COLUMNCATEGORY,
szTemp,
ARRAYSIZE(szTemp));
lvc.pszText = szTemp;
ListView_InsertColumn(hwndListView, 4, &lvc);
lvc.cx = 60;
LoadStringW(hInstance,
IDS_COLUMNEVENT,
szTemp,
ARRAYSIZE(szTemp));
lvc.pszText = szTemp;
ListView_InsertColumn(hwndListView, 5, &lvc);
lvc.cx = 120;
LoadStringW(hInstance,
IDS_COLUMNUSER,
szTemp,
ARRAYSIZE(szTemp));
lvc.pszText = szTemp;
ListView_InsertColumn(hwndListView, 6, &lvc);
lvc.cx = 100;
LoadStringW(hInstance,
IDS_COLUMNCOMPUTER,
szTemp,
ARRAYSIZE(szTemp));
lvc.pszText = szTemp;
ListView_InsertColumn(hwndListView, 7, &lvc);
for (iColumn = 0; iColumn < ARRAYSIZE(columnItems); ++iColumn)
{
lvc.cx = columnItems[iColumn].width;
LoadStringW(hInstance, columnItems[iColumn].uID, szTemp, ARRAYSIZE(szTemp));
ListView_InsertColumn(hwndListView, iColumn, &lvc);
}
/* Initialize the save Dialog */
ZeroMemory(&sfn, sizeof(sfn));

View File

@@ -792,6 +792,11 @@ EventDetailsCtrl(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
pData->EventLogFilter = DetailInfo->EventLogFilter;
pData->iEventItem = DetailInfo->iEventItem;
}
else
{
pData->iEventItem = -1;
}
pData->bDisplayWords = FALSE;
pData->hMonospaceFont = CreateMonospaceFont();
@@ -838,31 +843,26 @@ EventDetailsCtrl(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
case IDC_NEXT:
{
BOOL bPrev = (LOWORD(wParam) == IDC_PREVIOUS);
INT iItem, iSel;
INT iItem, iSel, nItems = ListView_GetItemCount(hwndListView);
WCHAR szText[200];
if (nItems <= 0) /* No items? */
break;
/* Select the previous/next item from our current one */
iItem = ListView_GetNextItem(hwndListView,
pData->iEventItem,
bPrev ? LVNI_ABOVE : LVNI_BELOW);
if (iItem == -1)
iItem = ListView_GetNextItem(hwndListView, -1, LVNI_ALL | LVNI_SELECTED);
iItem = ListView_GetNextItem(hwndListView, iItem,
(bPrev ? LVNI_ABOVE : LVNI_BELOW));
if (iItem < 0 || iItem >= nItems)
{
// TODO: Localization.
if (MessageBoxW(hDlg,
bPrev
? L"You have reached the beginning of the event log. Do you want to continue from the end?"
: L"You have reached the end of the event log. Do you want to continue from the beginning?",
szTitle,
MB_YESNO | MB_ICONQUESTION)
== IDNO)
{
LoadStringW(hInst,
(bPrev ? IDS_CONTFROMEND : IDS_CONTFROMBEGINNING),
szText, _countof(szText));
if (MessageBoxW(hDlg, szText, szTitle, MB_YESNO | MB_ICONQUESTION) == IDNO)
break;
}
/* Determine from where to restart */
if (bPrev)
iItem = ListView_GetItemCount(hwndListView) - 1;
else
iItem = 0;
iItem = (bPrev ? (nItems - 1) : 0);
}
/*
@@ -959,3 +959,11 @@ CreateEventDetailsCtrl(HINSTANCE hInstance,
MAKEINTRESOURCEW(IDD_EVENTDETAILS_CTRL),
hParentWnd, EventDetailsCtrl, lParam);
}
VOID
EnableEventDetailsButtons(HWND hWnd, BOOL bEnable)
{
EnableDlgItem(hWnd, IDC_PREVIOUS, bEnable);
EnableDlgItem(hWnd, IDC_NEXT, bEnable);
EnableDlgItem(hWnd, IDC_COPY, bEnable);
}

View File

@@ -7,8 +7,7 @@
* Copyright 2016-2022 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
*/
#ifndef _EVTDETCTL_H_
#define _EVTDETCTL_H_
#pragma once
/* Optional structure passed by pointer
* as LPARAM to CreateEventDetailsCtrl() */
@@ -26,4 +25,4 @@ CreateEventDetailsCtrl(HINSTANCE hInstance,
HWND hParentWnd,
LPARAM lParam);
#endif /* _EVTDETCTL_H_ */
VOID EnableEventDetailsButtons(HWND hWnd, BOOL bEnable);

View File

@@ -167,6 +167,8 @@ BEGIN
IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?"
IDS_RESTOREDEFAULTS "Do you want to restore all settings for this log to their default values?"
IDS_EVENTSTRINGIDNOTFOUND "Не е намерено описанието на събитие ( %lu ) в източник ( %s ). Възможно е местият компютър да няма нужните сведения в регистъра или DLL файловет, нужни за показване на съобщения от отдалечен компютър.\n\nThe following information is part of the event:\n\n"
IDS_CONTFROMBEGINNING "You have reached the end of the event log. Do you want to continue from the beginning?"
IDS_CONTFROMEND "You have reached the beginning of the event log. Do you want to continue from the end?"
END
STRINGTABLE

View File

@@ -167,6 +167,8 @@ BEGIN
IDS_CLEAREVENTS_MSG "Chcete tento protokol před odstraněním uložit?"
IDS_RESTOREDEFAULTS "Do you want to restore all settings for this log to their default values?"
IDS_EVENTSTRINGIDNOTFOUND "Popis ID události ( %lu ) zdroj ( %s ) nebyl nalezen. Místní počítač neobsahuje potřebné informace v registru nebo chybí DLL soubory pro zobrazení zpráv ze vzdáleného počítače.\n\nThe following information is part of the event:\n\n"
IDS_CONTFROMBEGINNING "You have reached the end of the event log. Do you want to continue from the beginning?"
IDS_CONTFROMEND "You have reached the beginning of the event log. Do you want to continue from the end?"
END
STRINGTABLE

View File

@@ -168,6 +168,8 @@ BEGIN
IDS_CLEAREVENTS_MSG "Möchten Sie dieses Protokoll vor dem Löschen speichern?"
IDS_RESTOREDEFAULTS "Möchten Sie alle Einstellungen für dieses Protokoll wieder auf die Standardwerte zurücksetzen?"
IDS_EVENTSTRINGIDNOTFOUND "Die Bezeichnung für die Ereignis-ID ( %lu ) in der Quelle ( %s ) kann nicht gefunden werden. Es könnte sein, dass der lokale Computer die notwendigen Registry Einträge oder Nachrichten DLLs, um Nachrichten entfernter Computer anzuzeigen, nicht besitzt.\n\nDas Ereignis enthält folgende Informationen:\n\n"
IDS_CONTFROMBEGINNING "You have reached the end of the event log. Do you want to continue from the beginning?"
IDS_CONTFROMEND "You have reached the beginning of the event log. Do you want to continue from the end?"
END
STRINGTABLE

View File

@@ -167,6 +167,8 @@ BEGIN
IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?"
IDS_RESTOREDEFAULTS "Do you want to restore all settings for this log to their default values?"
IDS_EVENTSTRINGIDNOTFOUND "The description for Event ID ( %lu ) in Source ( %s ) cannot be found. The local computer may not have the necessary registry information or message DLL files to display messages from a remote computer.\n\nThe following information is part of the event:\n\n"
IDS_CONTFROMBEGINNING "You have reached the end of the event log. Do you want to continue from the beginning?"
IDS_CONTFROMEND "You have reached the beginning of the event log. Do you want to continue from the end?"
END
STRINGTABLE

View File

@@ -169,6 +169,8 @@ BEGIN
IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?"
IDS_RESTOREDEFAULTS "Do you want to restore all settings for this log to their default values?"
IDS_EVENTSTRINGIDNOTFOUND "The description for Event ID ( %lu ) in Source ( %s ) cannot be found. The local computer may not have the necessary registry information or message DLL files to display messages from a remote computer.\n\nThe following information is part of the event:\n\n"
IDS_CONTFROMBEGINNING "You have reached the end of the event log. Do you want to continue from the beginning?"
IDS_CONTFROMEND "You have reached the beginning of the event log. Do you want to continue from the end?"
END
STRINGTABLE

View File

@@ -170,6 +170,8 @@ BEGIN
IDS_CLEAREVENTS_MSG "¿Desea guardar este registro de eventos antes de borrarlo?"
IDS_RESTOREDEFAULTS "Do you want to restore all settings for this log to their default values?"
IDS_EVENTSTRINGIDNOTFOUND "No se pudo recuperar la descripción para el evento con ID ( %lu ) y origen ( %s ). El equipo local puede no tener la información necesaria en el registro o las DLLs necesarias para mostrar los mensajes de un equipo remoto.\n\nLa siguiente información es parte del evento:\n\n"
IDS_CONTFROMBEGINNING "You have reached the end of the event log. Do you want to continue from the beginning?"
IDS_CONTFROMEND "You have reached the beginning of the event log. Do you want to continue from the end?"
END
STRINGTABLE

View File

@@ -50,12 +50,12 @@ IDM_EVENTWR_CTX MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "&Open Event Log...", IDM_OPEN_EVENTLOG
MENUITEM "&Save Event Log as...", IDM_SAVE_EVENTLOG
MENUITEM "&Ouvrir le journal d'événements...", IDM_OPEN_EVENTLOG
MENUITEM "Enregistrer le journal d'événements &sous...", IDM_SAVE_EVENTLOG
MENUITEM SEPARATOR
MENUITEM "&Clear all Events", IDM_CLEAR_EVENTS
MENUITEM "&Rename\tF2", IDM_RENAME_EVENTLOG
MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS
MENUITEM "&Effacer tous les événements", IDM_CLEAR_EVENTS
MENUITEM "&Renommer\tF2", IDM_RENAME_EVENTLOG
MENUITEM "&Paramètres du journal...", IDM_EVENTLOG_SETTINGS
END
END
@@ -168,6 +168,8 @@ BEGIN
IDS_CLEAREVENTS_MSG "Voulez-vous enregistrer ce journal d'événements avant de l'effacer ?"
IDS_RESTOREDEFAULTS "Voulez-vous vraiment réinitialiser tous les paramètres pour ce journal aux valeurs par défaut ?"
IDS_EVENTSTRINGIDNOTFOUND "La description pour l'événement d'ID ( %lu ) dans la source ( %s ) ne peut être trouvée. L'ordinateur local pourrait ne pas avoir les informations registres nécessaires ou les fichiers DLL de message pour afficher les messages depuis un ordinateur distant.\n\nLes informations suivantes font partie de l'événement :\n\n"
IDS_CONTFROMBEGINNING "You have reached the end of the event log. Do you want to continue from the beginning?"
IDS_CONTFROMEND "You have reached the beginning of the event log. Do you want to continue from the end?"
END
STRINGTABLE

View File

@@ -167,6 +167,8 @@ BEGIN
IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?"
IDS_RESTOREDEFAULTS "Do you want to restore all settings for this log to their default values?"
IDS_EVENTSTRINGIDNOTFOUND "The description for Event ID ( %lu ) in Source ( %s ) cannot be found. The local computer may not have the necessary registry information or message DLL files to display messages from a remote computer.\n\nThe following information is part of the event:\n\n"
IDS_CONTFROMBEGINNING "You have reached the end of the event log. Do you want to continue from the beginning?"
IDS_CONTFROMEND "You have reached the beginning of the event log. Do you want to continue from the end?"
END
STRINGTABLE

View File

@@ -168,6 +168,8 @@ BEGIN
IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?"
IDS_RESTOREDEFAULTS "Do you want to restore all settings for this log to their default values?"
IDS_EVENTSTRINGIDNOTFOUND "La descrizione per l'ID evento ( %lu ) proveniente da ( %s ) non può essere trovata. Il computer locale potrebbe non avere le informazioni sul registry necessarie o i file DLL con i messaggi necessari per la visualizzazione da un computer remoto.\n\nThe following information is part of the event:\n\n"
IDS_CONTFROMBEGINNING "You have reached the end of the event log. Do you want to continue from the beginning?"
IDS_CONTFROMEND "You have reached the beginning of the event log. Do you want to continue from the end?"
END
STRINGTABLE

View File

@@ -168,6 +168,8 @@ BEGIN
IDS_CLEAREVENTS_MSG "このイベントをクリアする前に保存したいですか?"
IDS_RESTOREDEFAULTS "すべての設定をデフォルトに戻しますか?"
IDS_EVENTSTRINGIDNOTFOUND "イベント ID (%lu) (ソース %s 内) に関する説明が見つかりませんでした。 リモート コンピュータからメッセージを表示するために必要なレジストリ情報またはメッセージ DLL ファイルがローカル コンピュータにない可能性があります。\n\n次の情報はイベントの一部です:\n\n"
IDS_CONTFROMBEGINNING "イベント ログの最後に到達しました。最初から続けますか?"
IDS_CONTFROMEND "イベント ログの先頭に到達しました。最後から続けますか?"
END
STRINGTABLE

View File

@@ -167,6 +167,8 @@ BEGIN
IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?"
IDS_RESTOREDEFAULTS "Do you want to restore all settings for this log to their default values?"
IDS_EVENTSTRINGIDNOTFOUND "( %s ) 의 이벤트ID ( %lu ) 에 대한 설명을 찾을 수 없습니다. 로컬 컴퓨터가 원격 컴퓨터의 메세지를 표시하는데 필요한 레지스트리나 DLL 파일을 가지지 않고 있을수 있습니다.\n\nThe following information is part of the event:\n\n"
IDS_CONTFROMBEGINNING "You have reached the end of the event log. Do you want to continue from the beginning?"
IDS_CONTFROMEND "You have reached the beginning of the event log. Do you want to continue from the end?"
END
STRINGTABLE

View File

@@ -167,6 +167,8 @@ BEGIN
IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?"
IDS_RESTOREDEFAULTS "Do you want to restore all settings for this log to their default values?"
IDS_EVENTSTRINGIDNOTFOUND "Beskrivelsen for Hendelse ID ( %lu ) i kilden ( %s ) kan ikke bli finnet. Lokale datamaskinen har ikke nødvendige register informasjon eller melding DLL filer for å vise melding fra en fjern datamaskin.\n\nThe following information is part of the event:\n\n"
IDS_CONTFROMBEGINNING "You have reached the end of the event log. Do you want to continue from the beginning?"
IDS_CONTFROMEND "You have reached the beginning of the event log. Do you want to continue from the end?"
END
STRINGTABLE

View File

@@ -170,6 +170,8 @@ BEGIN
IDS_CLEAREVENTS_MSG "Czy chcesz zapisać dziennik zdarzeń przed czyszczeniem?"
IDS_RESTOREDEFAULTS "Czy chcesz przywrócić wszystkie ustawienia tego dziennika do wartości domyślnych?"
IDS_EVENTSTRINGIDNOTFOUND "Opis zdarzenia dla danego numeru ID ( %lu ) nie został odnaleziony w źródle ( %s ). Ten komputer może nie miec wystarczających informacji w rejestrze, albo bibliotek DLL, aby wyświetlić wiadomości z komputera zdalnego.\n\nThe following information is part of the event:\n\n"
IDS_CONTFROMBEGINNING "You have reached the end of the event log. Do you want to continue from the beginning?"
IDS_CONTFROMEND "You have reached the beginning of the event log. Do you want to continue from the end?"
END
STRINGTABLE

View File

@@ -167,6 +167,8 @@ BEGIN
IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?"
IDS_RESTOREDEFAULTS "Do you want to restore all settings for this log to their default values?"
IDS_EVENTSTRINGIDNOTFOUND "A descrição para Event ID ( %lu ) em Fonte ( %s ) não foi encontrado. O computador local talvez não possua a informação de registro necessária ou mensagem de arquivos DLL para exibir mensagens de um computador remoto.\n\nThe following information is part of the event:\n\n"
IDS_CONTFROMBEGINNING "You have reached the end of the event log. Do you want to continue from the beginning?"
IDS_CONTFROMEND "You have reached the beginning of the event log. Do you want to continue from the end?"
END
STRINGTABLE

View File

@@ -167,6 +167,8 @@ BEGIN
IDS_CLEAREVENTS_MSG "Deseja guardar este registo de eventos antes de limpar?"
IDS_RESTOREDEFAULTS "Tem a certeza de que pretende repor todas definições deste registo para os valores predefinidos?"
IDS_EVENTSTRINGIDNOTFOUND "A descrição do ID de Evento ( %lu ) na Origem ( %s ) não foi encontrado. O computador local talvez não possua a informação de registo necessária ou os ficheiros DLL necessárias para apresentar mensagens de um computador remoto.\n\nA informação seguinte é parte do evento:\n\n"
IDS_CONTFROMBEGINNING "You have reached the end of the event log. Do you want to continue from the beginning?"
IDS_CONTFROMEND "You have reached the beginning of the event log. Do you want to continue from the end?"
END
STRINGTABLE

View File

@@ -169,6 +169,8 @@ BEGIN
IDS_CLEAREVENTS_MSG "Doriți să salvați acest jurnal de evenimente înainte de a-l închide?"
IDS_RESTOREDEFAULTS "Doriți să restabiliți toate setările pentru acest jurnal la valorile lor implicite?"
IDS_EVENTSTRINGIDNOTFOUND "Imposibil de găsit descrierea evenimentului cu ID-ul ( %lu ) în sursa ( %s ). Este posibil ca computerul local să nu aibă informațiile de registru necesare sau fișierele DLL de mesaje pentru a afișa mesaje de la un computer la distanță.\n\nUrmătoarele informații fac parte din eveniment:\n\n"
IDS_CONTFROMBEGINNING "You have reached the end of the event log. Do you want to continue from the beginning?"
IDS_CONTFROMEND "You have reached the beginning of the event log. Do you want to continue from the end?"
END
STRINGTABLE

View File

@@ -171,6 +171,8 @@ BEGIN
IDS_CLEAREVENTS_MSG "Вы хотите сохранить журнал событий перед очисткой?"
IDS_RESTOREDEFAULTS "Do you want to restore all settings for this log to their default values?"
IDS_EVENTSTRINGIDNOTFOUND "Не найдено описание для события с кодом ( %lu ) в источнике ( %s ). Возможно, на локальном компьютере нет нужных данных в реестре или файлов DLL сообщений для отображения сообщений удаленного компьютера.\n\nСледующая информация часть события:\n\n"
IDS_CONTFROMBEGINNING "You have reached the end of the event log. Do you want to continue from the beginning?"
IDS_CONTFROMEND "You have reached the beginning of the event log. Do you want to continue from the end?"
END
STRINGTABLE

View File

@@ -167,6 +167,8 @@ BEGIN
IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?"
IDS_RESTOREDEFAULTS "Do you want to restore all settings for this log to their default values?"
IDS_EVENTSTRINGIDNOTFOUND "Popis pre udalosť ID ( %lu ) zo zdroja ( %s ) nebol nájdený. The local computer may not have the necessary registry information or message DLL files to display messages from a remote computer.\n\nThe following information is part of the event:\n\n"
IDS_CONTFROMBEGINNING "You have reached the end of the event log. Do you want to continue from the beginning?"
IDS_CONTFROMEND "You have reached the beginning of the event log. Do you want to continue from the end?"
END
STRINGTABLE

View File

@@ -167,6 +167,8 @@ BEGIN
IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?"
IDS_RESTOREDEFAULTS "Do you want to restore all settings for this log to their default values?"
IDS_EVENTSTRINGIDNOTFOUND "Përshkrimi për ngjarjet ID ( %lu ) në burim ( %s ) nuk gjindet. Kompjuter vendas mund të mos ketë informacionin e regjistrit te nevojshem ose mesazhin për dokumentat DLL për të shfaqur nga një kompjuter në distancë.\n\nThe following information is part of the event:\n\n"
IDS_CONTFROMBEGINNING "You have reached the end of the event log. Do you want to continue from the beginning?"
IDS_CONTFROMEND "You have reached the beginning of the event log. Do you want to continue from the end?"
END
STRINGTABLE

View File

@@ -167,6 +167,8 @@ BEGIN
IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?"
IDS_RESTOREDEFAULTS "Do you want to restore all settings for this log to their default values?"
IDS_EVENTSTRINGIDNOTFOUND "Beskrivning av Händelse ID ( %lu ) i källan ( %s ) kan inte hittas. Lokal dator har inte nödvendig registerinformation eller meddelander DLL filer for å vise meddelander från en fjärr dator.\n\nThe following information is part of the event:\n\n"
IDS_CONTFROMBEGINNING "You have reached the end of the event log. Do you want to continue from the beginning?"
IDS_CONTFROMEND "You have reached the beginning of the event log. Do you want to continue from the end?"
END
STRINGTABLE

View File

@@ -168,6 +168,8 @@ BEGIN
IDS_CLEAREVENTS_MSG "Silmeden önce bu olay kaydını kaydetmek ister misiniz?"
IDS_RESTOREDEFAULTS "Bu günlük için tüm ayarları varsayılan değerlerine geri yüklemek istiyor musunuz?"
IDS_EVENTSTRINGIDNOTFOUND "( %s ) kaynağındaki ( %lu ) olay kimliği için açıklama bulunamıyor. Yerel bilgisayarda, uzak bilgisayardan iletileri görüntülemesi için gerekli Kayıt Defteri bilgisi veya ileti DLL dosyaları olmayabilir.\n\nAşağıdaki bilgi olayın parçasıdır:\n\n"
IDS_CONTFROMBEGINNING "You have reached the end of the event log. Do you want to continue from the beginning?"
IDS_CONTFROMEND "You have reached the beginning of the event log. Do you want to continue from the end?"
END
STRINGTABLE

View File

@@ -169,6 +169,8 @@ BEGIN
IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?"
IDS_RESTOREDEFAULTS "Do you want to restore all settings for this log to their default values?"
IDS_EVENTSTRINGIDNOTFOUND "Опис для Ідентифікатора події ( %lu ) за джерелом ( %s ) не знайдено. Локальний комп'ютер може не мати необхідної інформації в реєстрі чи DLL файлів повідомлень для відображення повідомлень, що надходять від віддаленого комп'ютера.\n\nThe following information is part of the event:\n\n"
IDS_CONTFROMBEGINNING "You have reached the end of the event log. Do you want to continue from the beginning?"
IDS_CONTFROMEND "You have reached the beginning of the event log. Do you want to continue from the end?"
END
STRINGTABLE

View File

@@ -169,6 +169,8 @@ BEGIN
IDS_CLEAREVENTS_MSG "你想要在清除之前保存此事件日志吗?"
IDS_RESTOREDEFAULTS "你想要将这个日志的所有设置恢复为默认值吗?"
IDS_EVENTSTRINGIDNOTFOUND "无法找到来源(%s中的事件 ID%lu的描述。本地计算机可能没有显示来自远程计算机的消息所必需的注册表信息或消息 DLL 文件。\n\n下面的信息是事件的一部分\n\n"
IDS_CONTFROMBEGINNING "You have reached the end of the event log. Do you want to continue from the beginning?"
IDS_CONTFROMEND "You have reached the beginning of the event log. Do you want to continue from the end?"
END
STRINGTABLE

View File

@@ -168,6 +168,8 @@ BEGIN
IDS_CLEAREVENTS_MSG "您想在清除之前儲存這個事件記錄嗎?"
IDS_RESTOREDEFAULTS "您要將這個記錄的所有設定還原至預設值嗎?"
IDS_EVENTSTRINGIDNOTFOUND "找不到來源(%s中的事件 ID%lu的描述。本地電腦可能沒有顯示來自遠端電腦訊息所需的註冊表資訊或訊息 DLL 檔。\n\n下列資訊是部分事件\n\n"
IDS_CONTFROMBEGINNING "You have reached the end of the event log. Do you want to continue from the beginning?"
IDS_CONTFROMEND "You have reached the beginning of the event log. Do you want to continue from the end?"
END
STRINGTABLE

View File

@@ -168,6 +168,8 @@ BEGIN
IDS_CLEAREVENTS_MSG "您要在清除之前儲存此事件記錄嗎?"
IDS_RESTOREDEFAULTS "您要這個記錄的所有設定還原至預設值嗎?"
IDS_EVENTSTRINGIDNOTFOUND "找不到來源(%s中的事件 ID%lu的描述。本地電腦可能沒有顯示來自遠端電腦消息所必需的註冊表資訊或消息 DLL 檔。\n\n下列資訊是部分事件\n\n"
IDS_CONTFROMBEGINNING "You have reached the end of the event log. Do you want to continue from the beginning?"
IDS_CONTFROMEND "You have reached the beginning of the event log. Do you want to continue from the end?"
END
STRINGTABLE

View File

@@ -105,6 +105,8 @@
#define IDS_CLEAREVENTS_MSG 110
#define IDS_EVENTSTRINGIDNOTFOUND 111
#define IDS_RESTOREDEFAULTS 112
#define IDS_CONTFROMBEGINNING 113
#define IDS_CONTFROMEND 114
#define IDS_USAGE 120
#define IDS_EVENTLOGFILE 121

View File

@@ -96,52 +96,52 @@ BEGIN
END
IDD_LOGON DIALOGEX 6, 6, 253, 232
CAPTION "Log On"
FONT 8, "MS Shell Dlg", 0, 0
CAPTION "ログオン"
FONT 9, "MS UI Gothic", 0, 0
STYLE DS_SHELLFONT | WS_BORDER | WS_VISIBLE | WS_DLGFRAME | WS_SYSMENU | WS_GROUP | WS_TABSTOP
BEGIN
LTEXT "Log on as:", IDC_STATIC, 7, 7, 238, 8
AUTORADIOBUTTON "&Local System account", IDC_LOGON_SYSTEMACCOUNT, 7, 22, 238, 10, BS_TOP | BS_MULTILINE | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP
AUTORADIOBUTTON "&This account:", IDC_LOGON_THISACCOUNT, 7, 52, 60, 10, BS_TOP | BS_MULTILINE | WS_CHILD | WS_VISIBLE
AUTOCHECKBOX "Allo&w service to interact with desktop", IDC_LOGON_INTERACTIVE, 18, 34, 227, 10, WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP | BS_TOP | BS_MULTILINE
LTEXT "ログオン ユーザー:", IDC_STATIC, 7, 7, 238, 8
AUTORADIOBUTTON "ローカル システム アカウント(&L)", IDC_LOGON_SYSTEMACCOUNT, 7, 22, 238, 10, BS_TOP | BS_MULTILINE | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP
AUTORADIOBUTTON "このアカウント(&T):", IDC_LOGON_THISACCOUNT, 7, 52, 60, 10, BS_TOP | BS_MULTILINE | WS_CHILD | WS_VISIBLE
AUTOCHECKBOX "サービスがデスクトップと対話できるようにする(&W)", IDC_LOGON_INTERACTIVE, 18, 34, 227, 10, WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP | BS_TOP | BS_MULTILINE
EDITTEXT IDC_LOGON_ACCOUNTNAME, 72, 50, 103, 14, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_GROUP | WS_TABSTOP
PUSHBUTTON "&Browse...", IDC_LOGON_SEARCH, 185, 50, 60, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
LTEXT "&Password:", IDC_LOGON_PW1TEXT, 18, 71, 33, 8, WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_GROUP
PUSHBUTTON "参照(&B)...", IDC_LOGON_SEARCH, 185, 50, 60, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
LTEXT "パスワード(&P):", IDC_LOGON_PW1TEXT, 18, 71, 33, 8, WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_GROUP
EDITTEXT IDC_LOGON_PASSWORD1, 72, 68, 104, 14, ES_LEFT | ES_PASSWORD | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP
LTEXT "&Confirm password:", IDC_LOGON_PW2TEXT, 18, 84, 47, 18, WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_GROUP
LTEXT "パスワードの確認(&C):", IDC_LOGON_PW2TEXT, 18, 84, 47, 18, WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_GROUP
EDITTEXT IDC_LOGON_PASSWORD2, 72, 86, 104, 14, ES_LEFT | ES_PASSWORD | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP
LTEXT "You can enable or disable this service for the hardware profiles listed below:", IDC_STATIC, 7, 114, 210, 8, WS_CHILD | WS_VISIBLE | WS_GROUP
LTEXT "以下のハードウェア プロファイルに対してこのサービスを有効または無効にすることができます:", IDC_STATIC, 7, 114, 210, 8, WS_CHILD | WS_VISIBLE | WS_GROUP
CONTROL "", IDC_LOGON_HWPROFILE, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_GROUP | WS_TABSTOP, 7, 124, 238, 65
PUSHBUTTON "&Enable", IDC_LOGON_HWENABLE, 116, 197, 60, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "&Disable", IDC_LOGON_HWDISABLE, 185, 197, 60, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "有効にする(&E)", IDC_LOGON_HWENABLE, 116, 197, 60, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "無効にする(&D)", IDC_LOGON_HWDISABLE, 185, 197, 60, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
END
IDD_RECOVERY DIALOGEX 6, 6, 253, 232
CAPTION "Recovery"
FONT 8, "MS Shell Dlg", 0, 0
CAPTION "回復"
FONT 9, "MS UI Gothic", 0, 0
STYLE DS_SHELLFONT | WS_BORDER | WS_VISIBLE | WS_DLGFRAME | WS_SYSMENU | WS_GROUP | WS_TABSTOP
BEGIN
LTEXT "Select the computer's response if this service fails.", IDC_STATIC, 7, 7, 238, 8
LTEXT "&First failure:", IDC_STATIC, 7, 24, 92, 8
LTEXT "このサービスが失敗した場合のコンピュータの応答を選択します。", IDC_STATIC, 7, 7, 238, 8
LTEXT "最初の失敗(&F):", IDC_STATIC, 7, 24, 92, 8
COMBOBOX IDC_FIRST_FAILURE, 104, 22, 141, 147, WS_CHILD | WS_VISIBLE | WS_TABSTOP | CBS_DROPDOWNLIST
LTEXT "&Second failure:", IDC_STATIC, 7, 41, 92, 8
LTEXT "二番目の失敗(&S):", IDC_STATIC, 7, 41, 92, 8
COMBOBOX IDC_SECOND_FAILURE, 104, 39, 141, 147, WS_CHILD | WS_VISIBLE | WS_TABSTOP | CBS_DROPDOWNLIST
LTEXT "Subsequent failures:", IDC_STATIC, 7, 58, 92, 8
LTEXT "その後の失敗:", IDC_STATIC, 7, 58, 92, 8
COMBOBOX IDC_SUBSEQUENT_FAILURES, 104, 56, 141, 147, WS_CHILD | WS_VISIBLE | WS_TABSTOP | CBS_DROPDOWNLIST
LTEXT "Reset fail c&ounter after:", IDC_STATIC, 7, 75, 72, 8
LTEXT "失敗カウンタのリセット(&O):", IDC_STATIC, 7, 75, 72, 8
EDITTEXT IDC_RESET_TIME, 104, 73, 40, 13, WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP | ES_LEFT | ES_AUTOHSCROLL | ES_NUMBER
LTEXT "days", IDC_STATIC, 150, 75, 95, 8
LTEXT "Restart ser&vice after:", IDC_RESTART_TEXT1, 7, 92, 92, 8
LTEXT "日後", IDC_STATIC, 150, 75, 95, 8
LTEXT "サービスの再開(&V):", IDC_RESTART_TEXT1, 7, 92, 92, 8
EDITTEXT IDC_RESTART_TIME, 104, 90, 40, 13, WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP | ES_LEFT | ES_AUTOHSCROLL | ES_NUMBER
LTEXT "minutes", IDC_RESTART_TEXT2, 150, 92, 95, 8
GROUPBOX "Run program", IDC_RUN_GROUPBOX, 7, 108, 238, 80
LTEXT "&Program:", IDC_RUN_TEXT1, 14, 121, 168, 8
LTEXT "分後", IDC_RESTART_TEXT2, 150, 92, 95, 8
GROUPBOX "プログラムを実行する", IDC_RUN_GROUPBOX, 7, 108, 238, 80
LTEXT "プログラム(&P):", IDC_RUN_TEXT1, 14, 121, 168, 8
EDITTEXT IDC_PROGRAM, 14, 131, 165, 14
PUSHBUTTON "&Browse...", IDC_BROWSE_PROGRAM, 180, 131, 58, 14
LTEXT "&Command line parameters:", IDC_RUN_TEXT2, 14, 155, 108, 8
PUSHBUTTON "参照(&B)...", IDC_BROWSE_PROGRAM, 180, 131, 58, 14
LTEXT "コマンドライン引数(&C):", IDC_RUN_TEXT2, 14, 155, 108, 8
EDITTEXT IDC_PARAMETERS, 128, 152, 110, 14
AUTOCHECKBOX "Append fail count to &end of command line (/fail=%1%)", IDC_ADD_FAILCOUNT, 14, 171, 219, 10, WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_TOP | BS_MULTILINE
PUSHBUTTON "&Restart Computer Options...", IDC_RESTART_OPTIONS, 116, 197, 129, 14
AUTOCHECKBOX "失敗回数をコマンドラインの末尾に追加する(&E) (/fail=%1%)", IDC_ADD_FAILCOUNT, 14, 171, 219, 10, WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_TOP | BS_MULTILINE
PUSHBUTTON "コンピュータの再起動オプション(&R)...", IDC_RESTART_OPTIONS, 116, 197, 129, 14
END
IDD_DLG_DEPEND DIALOGEX 6, 6, 253, 225
@@ -324,14 +324,14 @@ END
STRINGTABLE
BEGIN
IDS_NO_ACTION "Take no action"
IDS_RESTART_SERVICE "Restart the Service"
IDS_RUN_PROGRAM "Run a Program"
IDS_RESTART_COMPUTER "Restart the Computer"
IDS_NO_ACTION "何もしない"
IDS_RESTART_SERVICE "サービスを再起動する"
IDS_RUN_PROGRAM "プログラムを実行する"
IDS_RESTART_COMPUTER "コンピュータを再起動"
END
STRINGTABLE
BEGIN
IDS_NOT_SAME_PASSWORD "The Passwords are not the same!"
IDS_INVALID_PASSWORD "Enter a valid Password!"
IDS_NOT_SAME_PASSWORD "パスワードが同じではありません!"
IDS_INVALID_PASSWORD "有効なパスワードを入力してください。"
END

View File

@@ -16,16 +16,11 @@ CCanvasWindow::CCanvasWindow()
, m_hitCanvasSizeBox(HIT_NONE)
, m_ptOrig { -1, -1 }
{
m_ahbmCached[0] = m_ahbmCached[1] = NULL;
m_rcResizing.SetRectEmpty();
}
CCanvasWindow::~CCanvasWindow()
{
if (m_ahbmCached[0])
::DeleteObject(m_ahbmCached[0]);
if (m_ahbmCached[1])
::DeleteObject(m_ahbmCached[1]);
}
RECT CCanvasWindow::GetBaseRect()
@@ -119,16 +114,30 @@ VOID CCanvasWindow::zoomTo(INT newZoom, LONG left, LONG top)
Invalidate(TRUE);
}
VOID CCanvasWindow::DoDraw(HDC hDC, RECT& rcClient, RECT& rcPaint)
BOOL CCanvasWindow::DoDraw(HDC hDC, RECT& rcClient, RECT& rcPaint)
{
// This is the target area we have to draw on
CRect rcCanvasDraw;
rcCanvasDraw.IntersectRect(&rcClient, &rcPaint);
// Calculate image size
CRect rcImage;
GetImageRect(rcImage);
SIZE sizeImage = { imageModel.GetWidth(), imageModel.GetHeight() };
// We use a memory bitmap to reduce flickering
HBITMAP hbmCache1 = CreateDIBWithProperties(rcClient.right, rcClient.bottom);
if (!hbmCache1)
return FALSE; // Out of memory
HBITMAP hbmCache2 = CreateDIBWithProperties(sizeImage.cx, sizeImage.cy);
if (!hbmCache2)
{
::DeleteObject(hbmCache1);
return FALSE; // Out of memory
}
HDC hdcMem0 = ::CreateCompatibleDC(hDC);
m_ahbmCached[0] = CachedBufferDIB(m_ahbmCached[0], rcClient.right, rcClient.bottom);
HGDIOBJ hbm0Old = ::SelectObject(hdcMem0, m_ahbmCached[0]);
HGDIOBJ hbm0Old = ::SelectObject(hdcMem0, hbmCache1);
// Fill the background on hdcMem0
::FillRect(hdcMem0, &rcCanvasDraw, (HBRUSH)(COLOR_APPWORKSPACE + 1));
@@ -138,11 +147,6 @@ VOID CCanvasWindow::DoDraw(HDC hDC, RECT& rcClient, RECT& rcPaint)
if (!selectionModel.m_bShow && !::IsWindowVisible(textEditWindow))
drawSizeBoxes(hdcMem0, &rcBase, FALSE, &rcCanvasDraw);
// Calculate image size
CRect rcImage;
GetImageRect(rcImage);
SIZE sizeImage = { imageModel.GetWidth(), imageModel.GetHeight() };
// Calculate the target area on the image
CRect rcImageDraw = rcCanvasDraw;
CanvasToImage(rcImageDraw);
@@ -154,8 +158,7 @@ VOID CCanvasWindow::DoDraw(HDC hDC, RECT& rcClient, RECT& rcPaint)
// hdcMem1 <-- imageModel
HDC hdcMem1 = ::CreateCompatibleDC(hDC);
m_ahbmCached[1] = CachedBufferDIB(m_ahbmCached[1], sizeImage.cx, sizeImage.cy);
HGDIOBJ hbm1Old = ::SelectObject(hdcMem1, m_ahbmCached[1]);
HGDIOBJ hbm1Old = ::SelectObject(hdcMem1, hbmCache2);
::BitBlt(hdcMem1, rcImageDraw.left, rcImageDraw.top, rcImageDraw.Width(), rcImageDraw.Height(),
imageModel.GetDC(), rcImageDraw.left, rcImageDraw.top, SRCCOPY);
@@ -208,6 +211,10 @@ VOID CCanvasWindow::DoDraw(HDC hDC, RECT& rcClient, RECT& rcPaint)
// Clean up hdcMem0
::SelectObject(hdcMem0, hbm0Old);
::DeleteDC(hdcMem0);
::DeleteObject(hbmCache2);
::DeleteObject(hbmCache1);
return TRUE;
}
VOID CCanvasWindow::updateScrollRange()
@@ -691,9 +698,22 @@ LRESULT CCanvasWindow::OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH
RECT rcClient;
GetClientRect(&rcClient);
static BOOL s_bShowedOutOfMemory = FALSE; // Don't show "Out Of Memory" message multiple time
PAINTSTRUCT ps;
HDC hDC = BeginPaint(&ps);
DoDraw(hDC, rcClient, ps.rcPaint);
if (DoDraw(hDC, rcClient, ps.rcPaint))
{
s_bShowedOutOfMemory = FALSE;
}
else if (!s_bShowedOutOfMemory)
{
ShowOutOfMemory();
s_bShowedOutOfMemory = TRUE;
imageModel.ClearHistory(); // Reduce memory usage
}
EndPaint(&ps);
return 0;
}

View File

@@ -57,12 +57,11 @@ public:
protected:
HITTEST m_hitCanvasSizeBox;
POINT m_ptOrig; // The origin of drag start
HBITMAP m_ahbmCached[2]; // The cached buffer bitmaps
CRect m_rcResizing; // Resizing rectagle
HITTEST CanvasHitTest(POINT pt);
RECT GetBaseRect();
VOID DoDraw(HDC hDC, RECT& rcClient, RECT& rcPaint);
BOOL DoDraw(HDC hDC, RECT& rcClient, RECT& rcPaint);
VOID OnHVScroll(WPARAM wParam, INT fnBar);
LRESULT OnSize(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);

View File

@@ -230,6 +230,7 @@ HBITMAP InitializeImage(LPCWSTR name, LPWIN32_FIND_DATAW pFound, BOOL isFile)
if (hBitmap == NULL)
{
ShowOutOfMemory();
imageModel.ClearHistory();
return NULL;
}

View File

@@ -130,6 +130,7 @@ void ImageModel::PushImageForUndo()
if (hbm == NULL)
{
ShowOutOfMemory();
ClearHistory();
return;
}
@@ -143,6 +144,7 @@ void ImageModel::PushImageForUndo(HBITMAP hbm)
if (hbm == NULL)
{
ShowOutOfMemory();
ClearHistory();
return;
}
@@ -201,6 +203,7 @@ void ImageModel::Crop(int nWidth, int nHeight, int nOffsetX, int nOffsetY)
if (!hbmNew)
{
ShowOutOfMemory();
ClearHistory();
return;
}

View File

@@ -44,7 +44,7 @@ BEGIN
MENUITEM "&Copier\tCtrl+C", IDM_EDITCOPY
MENUITEM "C&oller\tCtrl+V", IDM_EDITPASTE
MENUITEM SEPARATOR
MENUITEM "Crop &selection", IDM_CROPSELECTION
MENUITEM "Ro&gner la sélection", IDM_CROPSELECTION
MENUITEM "&Effacer la sélection\tDel", IDM_EDITDELETESELECTION
MENUITEM "&Inverser la sélection", IDM_EDITINVERTSELECTION
MENUITEM "&Sélectionner tout\tCtrl+A", IDM_EDITSELECTALL
@@ -110,7 +110,7 @@ BEGIN
MENUITEM "&Copier\tCtrl+C", IDM_EDITCOPY
MENUITEM "C&oller\tCtrl+V", IDM_EDITPASTE
MENUITEM SEPARATOR
MENUITEM "Crop &selection", IDM_CROPSELECTION
MENUITEM "Ro&gner la sélection", IDM_CROPSELECTION
MENUITEM "&Effacer la sélection\tDel", IDM_EDITDELETESELECTION
MENUITEM "&Sélectionner tout\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
@@ -269,8 +269,8 @@ BEGIN
IDS_UNDERLINE "Underline"
IDS_VERTICAL "Vertical"
IDS_PRINTRES "%d x %d pixel/cm"
IDS_CANTPASTE "Failed to paste from the clipboard. The data format is either incorrect or not supported."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
IDS_CANTSENDMAIL "Failed to send a mail."
IDS_LOSECOLOR "The color information will be lost in this operation. Are you sure to proceed?"
IDS_CANTPASTE "Échec lors de la copie depuis le presse-papiers. Les données sont soit incorrectes soit non supportées."
IDS_SAVEERROR "Échec lors de la sauvegarde dans le fichier :\n\n%s"
IDS_CANTSENDMAIL "Échec lors de l'envoi d'un mail."
IDS_LOSECOLOR "Les informations de couleurs vont être perdues dans cette opération. Êtes-vous sûr de continuer ?"
END

View File

@@ -957,9 +957,14 @@ LRESULT CMainWindow::OnCommand(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH
HBITMAP hbmCopy = selectionModel.GetSelectionContents();
HGLOBAL hGlobal = BitmapToClipboardDIB(hbmCopy);
if (hGlobal)
{
::SetClipboardData(CF_DIB, hGlobal);
}
else
{
ShowOutOfMemory();
imageModel.ClearHistory();
}
::DeleteObject(hbmCopy);
}
@@ -1093,6 +1098,7 @@ LRESULT CMainWindow::OnCommand(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH
if (!hbmSelection)
{
ShowOutOfMemory();
imageModel.ClearHistory();
break;
}
SaveDIBToFile(hbmSelection, szFileName, FALSE);

View File

@@ -55,7 +55,7 @@ BEGIN
IDS_HIGHCOLOR15 "32,768 Couleurs (15 bit)"
IDS_HIGHCOLOR16 "65,536 Couleurs (16 bit)"
IDS_HIGHCOLOR24 "16,777,216 Couleurs (24 bit)"
IDS_HIGHCOLOR32 "Highest Quality (32 bit)"
IDS_HIGHCOLOR32 "La plus haute qualité (32 bit)"
IDS_PIXEL "%lux%lu Pixels"
IDS_FULLSCREEN "Plein écran"
IDS_BROWSESERVER "<Parcourir pour plus...>"

View File

@@ -32,7 +32,7 @@ Options :\n\
IDS_CTRL_C "Ctrl-C\n"
IDS_NO_RESOURCES "Ressources libres disponibles insuffisantes.\n"
IDS_MISSING_ADDRESS "L'adresse IP doit être spécifiée.\n"
IDS_MISSING_VALUE "Une valeur doit être spécifie pour l'option %s.\n"
IDS_MISSING_VALUE "Une valeur doit être spécifiée pour l'option %s.\n"
IDS_BAD_OPTION "Option incorrecte %s.\n"
IDS_BAD_PARAMETER "Paramètre incorrect %s.\n"
IDS_BAD_VALUE "Valeur incorrecte pour l'option %s, elle doit être entre %u et %u.\n"

Some files were not shown because too many files have changed in this diff Show More