Compare commits

..

35 Commits

Author SHA1 Message Date
Joachim Henze
b09ee4e0a0 [TASKMGR] et-EE.rc is better this way and with less changes
to existing translations.
2023-10-06 12:15:39 +02:00
Joachim Henze
3c1eb7f920 [TASKMGR] fr-FR.rc Respect the french speciality
We verified Win7-en and Win2k3-en to behave as proposed in this PR (R for properties, P for priority).
But *french* Windows (I believe Hermes picture was from WinVista-fr or Win7-fr or Win10-fr maybe) does it differently.
2023-10-05 10:18:37 +02:00
Joachim Henze
1d31de59d1 [TASKMGR] *.rc: Fix accelerator collisions &Priority <-> &Properties
We had them in almost all languages.
Try to fix them in a uniform way:
&Priority
P&roperties

We introduced them during 0.4.15-dev'ing when
MENUITEM ID_PROCESS_PAGE_PROPERTIES
and
MENUITEM ID_PROCESS_PAGE_OPENFILELOCATION
were added.

Yes, I know that kind of stuff is hard to review. Not my fault.
I will PR anyway.

nl-NL.rc had another collision.
2023-10-03 21:14:18 +02:00
Joachim Henze
46b4b5581d [TASKMGR] Favor _countof(), no functional change intended (#5757)
Taskmgr used a mixture: Sometimes _countof(), sometimes ARRAYSIZE()
and sometimes it calculated the count plain by sizeof(var)/sizeof(TYPE).
Harmonize everywhere to _countof() as it is the shortest solution.

Fix some formatting sins, like placing comments before else-statement.
Shorten the length of some very long line
intentionally *without introducing additional linebreaks* !

Shorten vertical length of some functions to increase their chance to
fit on the screen without scrolling.

Fix wrong indentation level in TaskManagerWndProc().

*.rc: Remove superfluous and redundant comment in all langs

No functional change intended.
2023-10-03 21:00:10 +02:00
Timo Kreuzer
410b1030c0 [NTOS:KE/x64] Implement detection of more KF_* feature flags
- Detect KF_SSSE3, KF_SSE4_1, KF_SSE4_2, KF_RDRAND, KF_BRANCH, KF_SLAT, KF_GENUINE_INTEL, KF_AUTHENTICAMD, KF_ACNT2, KF_SMEP, KF_SMAP, KF_RDWRFSGSBASE, KF_XSAVEOPT, KF_XSAVES, KF_HUGEPAGE, KF_RDTSCP
2023-10-03 19:45:44 +03:00
Timo Kreuzer
1a7ab2fe68 [NTOS:KE/x64] Use structures for CPUID 2023-10-03 19:45:44 +03:00
Timo Kreuzer
6048ebeff9 [SDK] Add CPUID and MSR definitions for x86/x64
- Import definitions from edk2 (see https://github.com/tianocore/edk2/tree/master/MdePkg/Include/Register)
- Add additional unions as well as AMD SVM CPUID
2023-10-03 19:45:44 +03:00
Timo Kreuzer
70f6ed8ee3 [NTOS:KE/x64] Improve CPU feature detection
- Use 64 bit feature flags (with a hack in the PRCB)
- Improve setting up SharedUserData->ProcessorFeatures
2023-10-03 19:45:44 +03:00
Timo Kreuzer
47c1dcd023 [NDK] Update kernel feature bits constants
- Move them into architecture specific headers.
- Add missing constants based on https://www.geoffchappell.com/studies/windows/km/ntoskrnl/structs/kprcb/featurebits.htm
- Yes, they are 64 bits
2023-10-03 19:45:44 +03:00
Timo Kreuzer
b66441d581 [XDK] Add missing PF_* processor feature definitions 2023-10-03 19:45:44 +03:00
George Bișoc
50f367fa58 [NTOS:CM] Use COMPUTE_HASH_CHAR to compute the conv hash key
We have a dedicated macro definition for that so just use it.
2023-10-03 11:01:21 +02:00
Whindmar Saksit
34066e475a GetDetailsOf does not support column flags (#5755)
GetDetailsOf does not support the column flags used by CompareIDs.
As a side effect, also fixes LPARAM to UINT truncation on 64-bit.
2023-10-03 10:43:44 +02:00
Joachim Henze
6528ab8fcb [TASKMGR] de-DE.rc Update part 3
I spotted yet another flip:
translation of IDS_TAB_PFDELTA and IDS_TAB_VMSIZE were flipped.

I spotted that by toggling all columns off entirely
in the View-Options dialog where the columns can be selected
and then added only one column at a time. I did that for all options.

I do recommend translators of other langs to do the same test,
I was shocked about the amount of bugs I spotted for german.
And it is very subtle / easy to miss, if you enable/disable multiple columns
together!

Let's call it a day now!
2023-10-03 06:31:04 +02:00
Joachim Henze
65ce20896a [TASKMGR] *.rc Strip unused IDD_DEBUG_CHANNELS_DIALOG
This is an addendum to 0.4.15-dev-413-g ed7196d964

binary size shrinks slightly although that dlg was unused:
taskmgr.exe RosBEWin2.2.2 GCC8.4.0dbg  715.264 -> 708.608
2023-10-03 03:50:41 +02:00
Joachim Henze
142c35fcce [TASKMGR] de-DE.rc Update
GRAPH == 'Anzeige'. Addendum to last commit
2023-10-03 02:47:10 +02:00
Joachim Henze
e15d68ba5d [TASKMGR] de-DE German Update & bug-fixes
This fixes several issues:
- add a few missing translations, e.g. ID_PROCESS_PAGE_PROPERTIES & ID_PROCESS_PAGE_OPENFILELOCATION
- IDS_TAB_PEAKMEMUSAGE translation was flipped with IDS_TAB_MEMDELTA
- IDC_MEM_USAGE_FRAME had text truncation, fix that by structurally switching to "Speicher"
- waste less space for the listview headers in the Processes tab so user can display more columns conveniently without the headers unnecessarily being crippled to "..."
- Sync some controls sizes back to en-US in the performance tab
- Translation for ID_VIEW_CPUHISTORY_ONEGRAPHALL and ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU was swapped accidentally
- Strip comment lines in the end, which were outdated anyway
- avoid monsters that not even a german person can read like "Auslagerungsdateiauslastungs-Verlaufsanzeige" which is like "Donaudampfschifffahrtselektrizitätenhauptbetriebswerkbauunterbeamtengesellschaft"
2023-10-03 02:05:28 +02:00
Carl J. Bialorucki
3e46a8673d [EXPLORER][COMCTL32] Fix balloon tooltips and system pager alerts (#5559)
- [EXPLORER] Set maximum balloon width for notification area
- [COMCTL32] Fix balloon tooltip shape

- Limit balloon tooltips from extending past the edges of the monitor, not the edges of the work area.
- Instead of simply repositioning the main rectangle when the balloon is too far towards one edge of the screen,
  try flipping the balloon the other way. This is the same behavior as Windows Server 2003.
- Tweak some values used to draw the balloon tooltips to more closely follow the Windows balloon tooltip style.
- Removing trailing whitespace.
- While the new changes are guarded, consider cancelling our Wine sync for common controls.
  Our common controls are responsible for many graphical issues and lack of features throughout ReactOS.

CORE-19109
2023-10-03 01:08:45 +03:00
Stanislav Motylkov
f53be82158 [REACTOS] Revert badly formatted commits
This reverts commits ab1868c7bf and 1aa76275ac.
2023-10-03 01:00:07 +03:00
Carl J. Bialorucki
f744bb2994 [BROWSEUI] More settings and window refresh (#5584)
Adds the option to set the address edit box to use the display name or the full path. Also refreshes the window title and edit box in all open explorer windows when changing these settings using the folder options dialog.

## PROPOSED CHANGES ##
- Create a new CabinetStateSettings type that inherits from the CABINETSTATE type. This allows us to add additional cabinet state settings not exposed in the CABINETSTATE type as well as adding a Load() method to easily populate the cabinet state settings.

- Add a global cabinet state settings object. While most settings in browseui are stored independently in each shellbrowser window, cabinet state settings are global and apply to every shellbrowser window. This can be confirmed on Windows Server 2003 and Windows 7.

- When receiving the WM_SETTINGCHANGE window message from the folder options dialog, refresh the title of the window and the text in the address edit box. This is the same behavior as Windows Server 2003 and Windows 7.
Add a DWORD registry value to HKCU\...\Explorer\CabinetState\FullPathAddress to allow users to toggle this setting on or off in our folder options.

CORE-9277
2023-10-02 22:43:00 +02:00
Carl J. Bialorucki
1aa76275ac Fix balloon tooltip shape 2023-10-02 22:39:10 +02:00
Carl J. Bialorucki
ab1868c7bf Set maximum balloon width for notification area 2023-10-02 22:39:10 +02:00
Sarthak Roy
4ba8af9cae [CALC] Use pragma once for calc.h (#5754)
It's simpler and only needs to be included once at the beginning of the
header file. It generates an unique identifier for the file automatically,
so maintainers wouldn't need to choose unique names for the macros.
It will be helpful if any future refactoring takes place.

Signed-off-by: Sarthak Roy <sarthakroy2002@gmail.com>
2023-10-02 00:58:32 +03:00
George Bișoc
dd54cd32cf [NTDLL_WINETEST] Enable registry tests for KeyCachedInformation back 2023-10-01 20:06:03 +02:00
George Bișoc
c0ea1f96ef [NTOS:CM][DOCUMENTATION] Provide documentation for newly added functions 2023-10-01 20:06:03 +02:00
George Bișoc
f4de5ceb9e [NTOS:CM] Implement cache lookup and cleanup subkey information for cache consistency
During an open or create procedure of a registry key, the registry parser grabs
a key control block (KCB) from the parser object and uses its information to do the
necessary work in order to obtain a pointer to the newly created or opened registry key.

However, the registry parsers faces several issues. First, we don't do subkey cache cleaning
information against gathered KCBs so whenever we do a registry parse we end up with KCBs
that have cache inconsistencies. Moreover we don't do any locking of whatever KCB we
are grabing during a parse procedure.

=== PROPOSED CHANGES ===

* Implement CmpComputeHashValue and CmpLookInCache functions. With CmpComputeHashValue we can
compute the convkey hashes of each subkey in the path name of a key so we can lock them
with CmpBuildAndLockKcbArray. CmpLookInCache is a function that searches for the suitable
KCB in the cache. The factors that determine if a KCB is "suitable" are:

-- the currently found KCB in the hash list has the same levels as that of the
given KCB from the parse object;

-- The key names from the computed hash values match with the block name of
the KCB;

-- The currently found KCB is not deleted.

The KCB will be changed if the key path name points to a partial match name in
the cache. The KCB from the parse object will be used if we have a full match
of remaining levels.

* Add missing CMP_LOCK_HASHES_FOR_KCB flags on CmpCreateKeyControlBlock calls
that create KCBs during a parse procedure. Such lock has to be preserved until
we're done with the registry parsing.

* On CmpDoCreateChild, preserve the exclusive lock of the KCB when we are
enlisting the key body.

* On CmpDoCreate, make sure that the passed parent KCB is locked exclusively and
lock the hiver flusher as we don't want the flusher to kick in during a key
creation on the given hive. Cleanup the subkey info when we're creating a key
object. Also implement missing cleanup path codes. Furthermore, avoid key
object creation if the parent KCB is protected with a read-only switch.

* Soft rewrite the CmpDoOpen function, namely how we manage a direct open vs
create KCB on open scenario. When a KCB is found in cache avoid touching
the key node. If the symbolic link has been resolved (aka found) then lock
exclusively the symbolic KCB. Otherwise just give the cached KCB to the caller.

If it were for the caller to request a KCB creation, we must check the passed
KCB from the parser object is locked exclusively, unlike on the case above
the caller doesn't want to create a KCB because there's already one in the cache.
We don't want anybody to touch our KCB while we are still toying with it during
its birth. Furthermore, enlist the key body but mind the kind of lock it's been
used.

* On CmpCreateLinkNode, avoid creating a key object if the parent KCB is protected
with a read-only switch. In addition, add missing hive flusher locks for both
the target hive and its child. Cleanup the subkey information of the KCB when
creating a link node, this ensures our cached KCB data remains consistent.

* Do a direct open on CmpParseKey if no remaining subkey levels have been found
during hash computation and cache lookup, in this case the given KCB is the
block that points to the exact key. This happens when for example someone tried
to call RegOpenKeyExW but submitting NULL to the lpSubKey argument parameter.

CORE-10581
ROSTESTS-198
2023-10-01 20:06:02 +02:00
George Bișoc
8cb56e77a6 [NTOS:CM] Do not call CmpSecurityMethod when assigning a security descriptor
CmpSecurityMethod is a method used by the Object Manager and called by this
subsystem whenever a security operation has to be done against a key object.

As CmpSecurityMethod is a specific OB construct we should not make any direct
call attempts to CmpSecurityMethod, only OB is responsible for that. This fixes
a deadlock where CmpSecurityMethod acquires a push lock for exclusive access
even though such lock is already acquired by the same calling thread in
CmpDoCreateChild.
2023-10-01 20:06:02 +02:00
George Bișoc
7fd6f86803 [NTOS:CM] Do not acquire a KCB lock twice when deleting a key object
This prevents a deadlock in DelistKeyBodyFromKCB when we delete a key
object because of an access check failure during a open procedure of a
registry key, as we are already holding a lock against the target KCB of
the key body.
2023-10-01 20:06:02 +02:00
George Bișoc
697a52aa33 [NTOS:CM] Do not acquire the lock twice when the Object Manager calls CmpSecurityMethod
Whenever a security request is invoked into a key object, such as when requesting
information from its security descriptor, the Object Manager will execute
the CmpSecurityMethod method to do the job.

The problem is that CmpSecurityMethod is not aware if the key control block
of the key body already has a lock acquired which means the function will attempt
to acquire a lock again, leading to a deadlock. This happens if the same
calling thread locks the KCB but it also wants to acquire security information
with ObCheckObjectAccess in CmpDoOpen.

Windows has a hack in CmpSecurityMethod where the passed KCB pointer is ORed
with a bitfield mask to avoid locking in all cases. This is ugly because it negates
every thread to acquire a lock if at least one has it.
2023-10-01 20:06:02 +02:00
George Bișoc
08fcf0c58b [NTOS:CM] Implement locking/unlocking of KCBs in an array
The CmpUnLockKcbArray, CmpLockKcbArray and CmpBuildAndLockKcbArray routines
help us to lock KCBs within array so that information remains consistent when
we are doing a cache lookup during a parse procedure of the registry database.
2023-10-01 20:06:01 +02:00
George Bișoc
c6230ba255 [NTOS:CM] Add KCB array lock function prototypes & Other Stuff
Implement CmpBuildAndLockKcbArray and CmpUnLockKcbArray prototypes, we'll gonna need these
to do the locking/unlocking of KCBs stacked up in an array. In addition implement some CM
constructs specifically for cache lookup implementation (more at documentation remarks).

=== DOCUMENTATION REMARKS ===

CMP_SUBKEY_LEVELS_DEPTH_LIMIT -- This is the limit of up to 32 subkey levels
that the registry can permit. This is used in CmpComputeHashValue to ensure
that we don't compute more than the limit of subkeys we're allowed to.

CMP_KCBS_IN_ARRAY_LIMIT -- This is equal to CMP_SUBKEY_LEVELS_DEPTH_LIMIT
plus the addition by 2. This construct is used as a limit of KCB elements
the array can hold. 2 serves as an additional space for the array (one for
the root object and another one as extra space so we don't blow up the stack
array).

CMP_LOCK_KCB_ARRAY_EXCLUSIVE & CMP_LOCK_KCB_ARRAY_SHARED -- These flags are used exclusively
for CmpBuildAndLockKcbArray and CmpLockKcbArray. Their meaning are obvious.

CM_HASH_CACHE_STACK -- A structure used to store the hashes of KCBs for locking. It is named
"stack" because the way we store the hashes of KCBs is within an auxilliary "outer stack array".
2023-10-01 20:06:01 +02:00
George Bișoc
8a335a3141 [NTOS:CM] Implement the shared lock macro for use
CmpAcquireKcbLockSharedByKey can come in handy for use to lock KCBs by their convkey with a shared lock, specifically we would need this for cache lookup stuff.
2023-10-01 20:06:00 +02:00
George Bișoc
26fe3616fe [NTOS:CM] Implement COMPUTE_HASH_CHAR macro definition
Wrap the hash computation formula in a macro so that we don't have to copy
the logic over the places again and again.
2023-10-01 20:06:00 +02:00
George Bișoc
a4213d491d [NTOS:CM] Add surrounding parentheses to GET_HASH_INDEX definition 2023-10-01 20:05:57 +02:00
Timo Kreuzer
0e68e27ff6 [WINSPOOL] Add a number of missing NULL checks. 2023-10-01 13:05:51 +03:00
Timo Kreuzer
02df49ebd8 [WINSPOOL] Properly copy the DEVMODE in IntFixUpDevModeNames
Otherwise the size isn't set up correctly, leading to a crash.
Fixes crash in comdl32_winetest printdlg.
2023-10-01 13:05:51 +03:00
94 changed files with 13796 additions and 1099 deletions

View File

@@ -1,5 +1,4 @@
#ifndef __CALC_H__
#define __CALC_H__
#pragma once
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
@@ -280,5 +279,3 @@ INT_PTR CALLBACK AboutDlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp);
void ConvExecute(HWND hWnd);
void ConvAdjust(HWND hWnd, int n_cat);
void ConvInit(HWND hWnd);
#endif /* __CALC_H__ */

View File

@@ -11,7 +11,7 @@ void OnAbout(void)
{
WCHAR szTaskmgr[128];
LoadStringW(hInst, IDS_APP_TITLE, szTaskmgr, sizeof(szTaskmgr)/sizeof(WCHAR));
LoadStringW(hInst, IDS_APP_TITLE, szTaskmgr, _countof(szTaskmgr));
ShellAboutW(hMainWnd, szTaskmgr, NULL,
LoadIconW(hInst, MAKEINTRESOURCEW(IDI_TASKMANAGER)));
}

View File

@@ -1,7 +1,7 @@
/*
* PROJECT: ReactOS Task Manager
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* PURPOSE: Applications Page.
* PURPOSE: Applications Page
* COPYRIGHT: Copyright 1999-2001 Brian Palmer <brianp@reactos.org>
* Copyright 2005 Klemens Friedl <frik85@reactos.at>
* Copyright 2021 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
@@ -97,7 +97,6 @@ ApplicationPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
switch (message) {
case WM_INITDIALOG:
/* Save the width and height */
GetClientRect(hDlg, &rc);
nApplicationPageWidth = rc.right;
@@ -151,7 +150,6 @@ ApplicationPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
break;
case WM_COMMAND:
/* Handle the button clicks */
switch (LOWORD(wParam))
{
@@ -217,17 +215,16 @@ ApplicationPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
if (wParam == VK_DELETE)
ProcessPage_OnEndProcess();
break;
}
return 0;
return 0;
}
void RefreshApplicationPage(void)
{
#ifdef RUN_APPS_PAGE
/* Signal the event so that our refresh thread */
/* will wake up and refresh the application page */
/* Signal the event so that our refresh thread
* will wake up and refresh the application page */
PostThreadMessage(dwApplicationThread, WM_TIMER, 0, 0);
#endif
}
@@ -267,11 +264,7 @@ DWORD WINAPI ApplicationPageRefreshThread(void *lpParameter)
if (msg.message == WM_TIMER)
{
/*
* FIXME:
*
* Should this be EnumDesktopWindows() instead?
*/
// FIXME: Should this be EnumDesktopWindows() instead?
noApps = TRUE;
EnumWindows(EnumWindowsProc, 0);
if (noApps)
@@ -450,9 +443,8 @@ void AddOrUpdateHwnd(HWND hWnd, WCHAR *szTitle, HICON hIcon, BOOL bHung)
InvalidateRect(hApplicationPageListCtrl, NULL, 0);
}
}
/* It is not already in the list so add it */
else
{
{ // It is not already in the list so add it
pAPLI = (LPAPPLICATION_PAGE_LIST_ITEM)HeapAlloc(GetProcessHeap(), 0, sizeof(APPLICATION_PAGE_LIST_ITEM));
pAPLI->hWnd = hWnd;
@@ -478,25 +470,16 @@ void AddOrUpdateHwnd(HWND hWnd, WCHAR *szTitle, HICON hIcon, BOOL bHung)
ListView_SetItemState(hApplicationPageListCtrl, 0, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED);
bApplicationPageSelectionMade = TRUE;
}
/*
else
{
bApplicationPageSelectionMade = FALSE;
}
*/
}
void ApplicationPageUpdate(void)
{
/* Enable or disable the "End Task" & "Switch To" buttons */
if (ListView_GetSelectedCount(hApplicationPageListCtrl))
{
EnableWindow(hApplicationPageEndTaskButton, TRUE);
}
else
{
EnableWindow(hApplicationPageEndTaskButton, FALSE);
}
/* Enable "Switch To" button only if only one app is selected */
EnableWindow(hApplicationPageSwitchToButton, (ListView_GetSelectedCount(hApplicationPageListCtrl) == 1));
@@ -510,9 +493,8 @@ void ApplicationPageUpdate(void)
hMenu = GetMenu(hMainWnd);
hWindowsMenu = GetSubMenu(hMenu, 3);
/* Only one item selected */
if (ListView_GetSelectedCount(hApplicationPageListCtrl) == 1)
{
{ // Only one item selected
EnableMenuItem(hWindowsMenu, ID_WINDOWS_TILEHORIZONTALLY, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
EnableMenuItem(hWindowsMenu, ID_WINDOWS_TILEVERTICALLY, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
EnableMenuItem(hWindowsMenu, ID_WINDOWS_MINIMIZE, MF_BYCOMMAND|MF_ENABLED);
@@ -520,9 +502,8 @@ void ApplicationPageUpdate(void)
EnableMenuItem(hWindowsMenu, ID_WINDOWS_CASCADE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
EnableMenuItem(hWindowsMenu, ID_WINDOWS_BRINGTOFRONT, MF_BYCOMMAND|MF_ENABLED);
}
/* More than one item selected */
else if (ListView_GetSelectedCount(hApplicationPageListCtrl) > 1)
{
{ // More than one item selected
EnableMenuItem(hWindowsMenu, ID_WINDOWS_TILEHORIZONTALLY, MF_BYCOMMAND|MF_ENABLED);
EnableMenuItem(hWindowsMenu, ID_WINDOWS_TILEVERTICALLY, MF_BYCOMMAND|MF_ENABLED);
EnableMenuItem(hWindowsMenu, ID_WINDOWS_MINIMIZE, MF_BYCOMMAND|MF_ENABLED);
@@ -530,9 +511,8 @@ void ApplicationPageUpdate(void)
EnableMenuItem(hWindowsMenu, ID_WINDOWS_CASCADE, MF_BYCOMMAND|MF_ENABLED);
EnableMenuItem(hWindowsMenu, ID_WINDOWS_BRINGTOFRONT, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
}
/* No items selected */
else
{
{ // No items selected
EnableMenuItem(hWindowsMenu, ID_WINDOWS_TILEHORIZONTALLY, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
EnableMenuItem(hWindowsMenu, ID_WINDOWS_TILEVERTICALLY, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
EnableMenuItem(hWindowsMenu, ID_WINDOWS_MINIMIZE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);
@@ -564,52 +544,35 @@ void ApplicationPageOnNotify(WPARAM wParam, LPARAM lParam)
/* Update the item text */
if (pnmdi->item.iSubItem == 0)
{
wcsncpy(pnmdi->item.pszText, pAPLI->szTitle, pnmdi->item.cchTextMax);
}
/* Update the item status */
else if (pnmdi->item.iSubItem == 1)
{
if (pAPLI->bHung)
{
LoadStringW( GetModuleHandleW(NULL), IDS_NOT_RESPONDING , szMsg, sizeof(szMsg) / sizeof(szMsg[0]));
}
LoadStringW(GetModuleHandleW(NULL), IDS_NOT_RESPONDING , szMsg, _countof(szMsg));
else
{
LoadStringW( GetModuleHandleW(NULL), IDS_RUNNING, (LPWSTR) szMsg, sizeof(szMsg) / sizeof(szMsg[0]));
}
LoadStringW(GetModuleHandleW(NULL), IDS_RUNNING, (LPWSTR) szMsg, _countof(szMsg));
wcsncpy(pnmdi->item.pszText, szMsg, pnmdi->item.cchTextMax);
}
break;
case NM_RCLICK:
if (ListView_GetSelectedCount(hApplicationPageListCtrl) < 1)
{
ApplicationPageShowContextMenu1();
}
else
{
ApplicationPageShowContextMenu2();
}
break;
case NM_DBLCLK:
ApplicationPage_OnSwitchTo();
break;
case LVN_KEYDOWN:
if (((LPNMLVKEYDOWN)lParam)->wVKey == VK_DELETE)
ApplicationPage_OnEndTask();
break;
}
}
else if (pnmh->hwndFrom == ListView_GetHeader(hApplicationPageListCtrl))
@@ -617,27 +580,18 @@ void ApplicationPageOnNotify(WPARAM wParam, LPARAM lParam)
switch (pnmh->code)
{
case NM_RCLICK:
if (ListView_GetSelectedCount(hApplicationPageListCtrl) < 1)
{
ApplicationPageShowContextMenu1();
}
else
{
ApplicationPageShowContextMenu2();
}
break;
case HDN_ITEMCLICK:
(void)ListView_SortItems(hApplicationPageListCtrl, ApplicationPageCompareFunc, 0);
bSortAscending = !bSortAscending;
break;
}
}
}
void ApplicationPageShowContextMenu1(void)
@@ -929,9 +883,7 @@ void ApplicationPage_OnGotoProcess(void)
i,
LVIS_SELECTED | LVIS_FOCUSED,
LVIS_SELECTED | LVIS_FOCUSED);
(void)ListView_EnsureVisible(hProcessPageListCtrl,
i,
FALSE);
(void)ListView_EnsureVisible(hProcessPageListCtrl, i, FALSE);
}
}
}

View File

@@ -1,7 +1,7 @@
/*
* PROJECT: ReactOS Task Manager
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* PURPOSE: Applications Page.
* PURPOSE: Applications Page
* COPYRIGHT: Copyright 1999-2001 Brian Palmer <brianp@reactos.org>
* Copyright 2005 Klemens Friedl <frik85@reactos.at>
* Copyright 2021 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
@@ -9,12 +9,11 @@
#pragma once
extern HWND hApplicationPage; /* Application List Property Page */
extern HWND hApplicationPageListCtrl; /* Application ListCtrl Window */
extern HWND hApplicationPageEndTaskButton; /* Application End Task button */
extern HWND hApplicationPageSwitchToButton; /* Application Switch To button */
extern HWND hApplicationPageNewTaskButton; /* Application New Task button */
extern HWND hApplicationPage; /* Application List Property Page */
extern HWND hApplicationPageListCtrl; /* Application ListCtrl Window */
extern HWND hApplicationPageEndTaskButton; /* Application End Task button */
extern HWND hApplicationPageSwitchToButton; /* Application Switch To button */
extern HWND hApplicationPageNewTaskButton; /* Application New Task button */
INT_PTR CALLBACK ApplicationPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
void RefreshApplicationPage(void);

View File

@@ -42,8 +42,8 @@ const PresetColumnEntry ColumnPresets[COLUMN_NMAX] = {
DECLARE_COLUMN_PRESET(COMMANDLINE, 450, FALSE)
};
static int InsertColumn(int nCol, LPCWSTR lpszColumnHeading, int nFormat, int nWidth, int nSubItem);
INT_PTR CALLBACK ColumnsDialogWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
static int InsertColumn(int nCol, LPCWSTR lpszColumnHeading, int nFormat, int nWidth, int nSubItem);
INT_PTR CALLBACK ColumnsDialogWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
void AddColumns(void)
{
@@ -53,13 +53,13 @@ void AddColumns(void)
for (n=0; n<COLUMN_NMAX; n++) {
if (TaskManagerSettings.Columns[n]) {
LoadStringW(hInst, ColumnPresets[n].dwIdsName, szTemp, sizeof(szTemp)/sizeof(WCHAR));
LoadStringW(hInst, ColumnPresets[n].dwIdsName, szTemp, _countof(szTemp));
InsertColumn(n, szTemp, LVCFMT_LEFT, TaskManagerSettings.ColumnSizeArray[n], -1);
}
}
size = SendMessageW(hProcessPageHeaderCtrl, HDM_GETITEMCOUNT, 0, 0);
SendMessageW(hProcessPageHeaderCtrl, HDM_SETORDERARRAY, (WPARAM) size, (LPARAM) &TaskManagerSettings.ColumnOrderArray);
SendMessageW(hProcessPageHeaderCtrl, HDM_SETORDERARRAY, (WPARAM)size, (LPARAM)&TaskManagerSettings.ColumnOrderArray);
UpdateColumnDataHints();
}
@@ -104,7 +104,7 @@ void SaveColumnSettings(void)
/* Get header order */
size = SendMessageW(hProcessPageHeaderCtrl, HDM_GETITEMCOUNT, 0, 0);
SendMessageW(hProcessPageHeaderCtrl, HDM_GETORDERARRAY, (WPARAM) size, (LPARAM) &TaskManagerSettings.ColumnOrderArray);
SendMessageW(hProcessPageHeaderCtrl, HDM_GETORDERARRAY, (WPARAM)size, (LPARAM)&TaskManagerSettings.ColumnOrderArray);
/* Get visible columns */
for (i = 0; i < SendMessageW(hProcessPageHeaderCtrl, HDM_GETITEMCOUNT, 0, 0); i++) {
@@ -117,7 +117,7 @@ void SaveColumnSettings(void)
SendMessageW(hProcessPageHeaderCtrl, HDM_GETITEM, i, (LPARAM) &hditem);
for (n = 0; n < COLUMN_NMAX; n++) {
LoadStringW(hInst, ColumnPresets[n].dwIdsName, szTemp, sizeof(szTemp)/sizeof(WCHAR));
LoadStringW(hInst, ColumnPresets[n].dwIdsName, szTemp, _countof(szTemp));
if (_wcsicmp(text, szTemp) == 0)
{
TaskManagerSettings.Columns[n] = TRUE;
@@ -155,7 +155,6 @@ ColumnsDialogWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
switch (message)
{
case WM_INITDIALOG:
for (i=0; i<COLUMN_NMAX; i++) {
if (TaskManagerSettings.Columns[i])
CheckDlgButton(hDlg, ColumnPresets[i].dwIdcCtrl, BST_CHECKED);
@@ -163,7 +162,6 @@ ColumnsDialogWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
return TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
@@ -207,7 +205,7 @@ void UpdateColumnDataHints(void)
SendMessageW(hProcessPageHeaderCtrl, HDM_GETITEM, Index, (LPARAM) &hditem);
for (i=0; i<COLUMN_NMAX; i++) {
LoadStringW(hInst, ColumnPresets[i].dwIdsName, szTemp, sizeof(szTemp)/sizeof(WCHAR));
LoadStringW(hInst, ColumnPresets[i].dwIdsName, szTemp, _countof(szTemp));
if (_wcsicmp(text, szTemp) == 0)
ColumnDataHints[Index] = i;
}

View File

@@ -63,7 +63,7 @@ typedef struct {
} PresetColumnEntry;
extern UINT ColumnDataHints[COLUMN_NMAX];
extern UINT ColumnDataHints[COLUMN_NMAX];
extern const PresetColumnEntry ColumnPresets[COLUMN_NMAX];
#define Column_ImageName Columns[COLUMN_IMAGENAME]

View File

@@ -1,7 +1,7 @@
/*
* PROJECT: ReactOS Task Manager
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* PURPOSE: Process Debugging.
* PURPOSE: Process Debugging
* COPYRIGHT: Copyright 1999-2001 Brian Palmer <brianp@reactos.org>
* Copyright 2005 Klemens Friedl <frik85@reactos.at>
*/
@@ -27,21 +27,21 @@ void ProcessPage_OnDebug(void)
if (dwProcessId == 0)
return;
LoadStringW(hInst, IDS_MSG_WARNINGDEBUG, szTemp, ARRAYSIZE(szTemp));
LoadStringW(hInst, IDS_MSG_TASKMGRWARNING, szTempA, ARRAYSIZE(szTempA));
LoadStringW(hInst, IDS_MSG_WARNINGDEBUG, szTemp, _countof(szTemp));
LoadStringW(hInst, IDS_MSG_TASKMGRWARNING, szTempA, _countof(szTempA));
if (MessageBoxW(hMainWnd, szTemp, szTempA, MB_YESNO | MB_ICONWARNING) != IDYES)
{
GetLastErrorText(strErrorText, ARRAYSIZE(strErrorText));
LoadStringW(hInst, IDS_MSG_UNABLEDEBUGPROCESS, szTemp, ARRAYSIZE(szTemp));
GetLastErrorText(strErrorText, _countof(strErrorText));
LoadStringW(hInst, IDS_MSG_UNABLEDEBUGPROCESS, szTemp, _countof(szTemp));
MessageBoxW(hMainWnd, strErrorText, szTemp, MB_OK | MB_ICONSTOP);
return;
}
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug", 0, KEY_QUERY_VALUE, &hKey) != ERROR_SUCCESS)
{
GetLastErrorText(strErrorText, ARRAYSIZE(strErrorText));
LoadStringW(hInst, IDS_MSG_UNABLEDEBUGPROCESS, szTemp, ARRAYSIZE(szTemp));
GetLastErrorText(strErrorText, _countof(strErrorText));
LoadStringW(hInst, IDS_MSG_UNABLEDEBUGPROCESS, szTemp, _countof(szTemp));
MessageBoxW(hMainWnd, strErrorText, szTemp, MB_OK | MB_ICONSTOP);
return;
}
@@ -49,8 +49,8 @@ void ProcessPage_OnDebug(void)
dwDebuggerSize = sizeof(strDebugger);
if (RegQueryValueExW(hKey, L"Debugger", NULL, NULL, (LPBYTE)strDebugger, &dwDebuggerSize) != ERROR_SUCCESS)
{
GetLastErrorText(strErrorText, ARRAYSIZE(strErrorText));
LoadStringW(hInst, IDS_MSG_UNABLEDEBUGPROCESS, szTemp, ARRAYSIZE(szTemp));
GetLastErrorText(strErrorText, _countof(strErrorText));
LoadStringW(hInst, IDS_MSG_UNABLEDEBUGPROCESS, szTemp, _countof(szTemp));
MessageBoxW(hMainWnd, strErrorText, szTemp, MB_OK | MB_ICONSTOP);
RegCloseKey(hKey);
return;
@@ -61,8 +61,8 @@ void ProcessPage_OnDebug(void)
hDebugEvent = CreateEventW(NULL, FALSE, FALSE, NULL);
if (!hDebugEvent)
{
GetLastErrorText(strErrorText, ARRAYSIZE(strErrorText));
LoadStringW(hInst, IDS_MSG_UNABLEDEBUGPROCESS, szTemp, ARRAYSIZE(szTemp));
GetLastErrorText(strErrorText, _countof(strErrorText));
LoadStringW(hInst, IDS_MSG_UNABLEDEBUGPROCESS, szTemp, _countof(szTemp));
MessageBoxW(hMainWnd, strErrorText, szTemp, MB_OK | MB_ICONSTOP);
return;
}
@@ -74,8 +74,8 @@ void ProcessPage_OnDebug(void)
si.cb = sizeof(si);
if (!CreateProcessW(NULL, strDebugPath, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
GetLastErrorText(strErrorText, ARRAYSIZE(strErrorText));
LoadStringW(hInst, IDS_MSG_UNABLEDEBUGPROCESS, szTemp, ARRAYSIZE(szTemp));
GetLastErrorText(strErrorText, _countof(strErrorText));
LoadStringW(hInst, IDS_MSG_UNABLEDEBUGPROCESS, szTemp, _countof(szTemp));
MessageBoxW(hMainWnd, strErrorText, szTemp, MB_OK | MB_ICONSTOP);
}
else

View File

@@ -28,7 +28,7 @@ Graph_WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
return TRUE;
/*
* Filter out mouse & keyboard messages
* Filter out mouse & keyboard messages
*/
/* case WM_APPCOMMAND: */
case WM_CAPTURECHANGED:
@@ -84,7 +84,6 @@ Graph_WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
return 0;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
WindowId = GetWindowLongPtrW(hWnd, GWLP_ID);
@@ -103,13 +102,11 @@ Graph_WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
}
EndPaint(hWnd, &ps);
return 0;
}
/*
* We pass on all non-handled messages
* Pass on all non-handled messages
*/
return CallWindowProcW(OldGraphWndProc, hWnd, message, wParam, lParam);
}
@@ -163,8 +160,7 @@ void Graph_DrawCpuUsageGraph(HDC hDC, HWND hWnd)
SetTextColor(hDC, crPrevForeground);
/*
* Now we have to draw the graph
* So first find out how many bars we can fit
* Draw the graph. So first find out how many bars we can fit
*/
nBars = ((rcClient.bottom - rcClient.top) - 25) / 3;
nBarsUsed = (nBars * CpuUsage) / 100;
@@ -185,7 +181,7 @@ void Graph_DrawCpuUsageGraph(HDC hDC, HWND hWnd)
}
/*
* Now draw the bar graph
* Draw the bar graph
*/
rcBarLeft.left = ((rcClient.right - rcClient.left) - 33) / 2;
rcBarLeft.right = rcBarLeft.left + 16;
@@ -266,7 +262,6 @@ void Graph_DrawCpuUsageGraph(HDC hDC, HWND hWnd)
for (i=0; i<nBarsUsedKernel; i++)
{
FillSolidRect(hDC, &rcBarLeft, RED);
FillSolidRect(hDC, &rcBarRight, RED);
@@ -275,7 +270,6 @@ void Graph_DrawCpuUsageGraph(HDC hDC, HWND hWnd)
rcBarRight.top -=3;
rcBarRight.bottom -=3;
}
SelectObject(hDC, hOldFont);
@@ -331,8 +325,7 @@ void Graph_DrawMemUsageGraph(HDC hDC, HWND hWnd)
SetTextColor(hDC, crPrevForeground);
/*
* Now we have to draw the graph
* So first find out how many bars we can fit
* Draw the graph. So first find out how many bars we can fit
*/
nBars = ((rcClient.bottom - rcClient.top) - 25) / 3;
if (CommitChargeLimit)
@@ -346,7 +339,7 @@ void Graph_DrawMemUsageGraph(HDC hDC, HWND hWnd)
if (nBarsFree > nBars) nBarsFree = nBars;
/*
* Now draw the bar graph
* Draw the bar graph
*/
rcBarLeft.left = ((rcClient.right - rcClient.left) - 33) / 2;
rcBarLeft.right = rcBarLeft.left + 16;
@@ -414,17 +407,16 @@ void Graph_DrawMemUsageHistoryGraph(HDC hDC, HWND hWnd)
//CommitChargeLimit = (ULONGLONG)PerfDataGetCommitChargeLimitK();
/*
* Draw the graph background
*
* Draw the horizontal bars
* Draw the graph background and horizontal bars
*/
for (i=0; i<rcClient.bottom; i++)
{
if ((i % 11) == 0)
{
/* FillSolidRect2(hDC, 0, i, rcClient.right, 1, DARK_GREEN); */
//FillSolidRect2(hDC, 0, i, rcClient.right, 1, DARK_GREEN);
}
}
/*
* Draw the vertical bars
*/
@@ -432,7 +424,7 @@ void Graph_DrawMemUsageHistoryGraph(HDC hDC, HWND hWnd)
{
if ((i % 11) == 0)
{
/* FillSolidRect2(hDC, i - offset, 0, 1, rcClient.bottom, DARK_GREEN); */
//FillSolidRect2(hDC, i - offset, 0, 1, rcClient.bottom, DARK_GREEN);
}
}

View File

@@ -1,7 +1,7 @@
/*
* PROJECT: ReactOS Task Manager
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* PURPOSE: Performance Graph Meters.
* PURPOSE: Performance Graph Meters
* COPYRIGHT: Copyright 1999-2001 Brian Palmer <brianp@reactos.org>
*/
@@ -12,14 +12,14 @@ extern "C" {
#endif
#define BRIGHT_GREEN RGB(0, 255, 0)
#define MEDIUM_GREEN RGB(0, 190, 0)
#define DARK_GREEN RGB(0, 130, 0)
#define RED RGB(255, 0, 0)
#define BRIGHT_GREEN RGB(0, 255, 0)
#define MEDIUM_GREEN RGB(0, 190, 0)
#define DARK_GREEN RGB(0, 130, 0)
#define RED RGB(255, 0, 0)
extern WNDPROC OldGraphWndProc;
extern WNDPROC OldGraphWndProc;
INT_PTR CALLBACK Graph_WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK Graph_WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
#ifdef __cplusplus

View File

@@ -136,7 +136,7 @@ BEGIN
END
MENUITEM "Установяване на с&родство...", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM SEPARATOR
MENUITEM "&Properties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "P&roperties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "&Open File Location", ID_PROCESS_PAGE_OPENFILELOCATION
END
END
@@ -177,7 +177,6 @@ BEGIN
PUSHBUTTON "&Прекратяване на задачата", IDC_ENDPROCESS, 144, 203, 100, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
@@ -232,16 +231,6 @@ BEGIN
PUSHBUTTON "Дневник на паметта", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Обезбубяващи канали"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "Затваряне", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Процесорно сродство"
@@ -249,7 +238,7 @@ FONT 8, "MS Shell Dlg"
BEGIN
DEFPUSHBUTTON "Добре", IDOK, 120, 133, 50, 14
PUSHBUTTON "Отказ", IDCANCEL, 174, 133, 50, 14
LTEXT "Настройката на сродството на процесора указва на кои ЦПУта е разрешено изпълнението да действието.", IDC_STATIC,5,5,220,16
LTEXT "Настройката на сродството на процесора указва на кои ЦПУта е разрешено изпълнението да действието.", IDC_STATIC,5,5,220,16
CONTROL "ЦПУ 0", IDC_CPU0, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 11, 28, 37, 10
CONTROL "ЦПУ 1", IDC_CPU1, "Button", BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP, 11, 41, 37, 10
CONTROL "ЦПУ 2", IDC_CPU2, "Button", BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP, 11, 54, 37, 10

View File

@@ -136,7 +136,7 @@ BEGIN
END
MENUITEM "Nastavit &afinitu...", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM SEPARATOR
MENUITEM "&Properties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "P&roperties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "&Open File Location", ID_PROCESS_PAGE_OPENFILELOCATION
END
END
@@ -177,7 +177,6 @@ BEGIN
PUSHBUTTON "&Ukončit proces", IDC_ENDPROCESS, 171, 189, 69, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
@@ -232,16 +231,6 @@ BEGIN
PUSHBUTTON "Historie využití paměti", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Kanály ladění"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "Zavřít", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Afinita procesoru"

View File

@@ -136,7 +136,7 @@ BEGIN
END
MENUITEM "Sæt &Affinitet...", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM SEPARATOR
MENUITEM "&Properties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "P&roperties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "&Open File Location", ID_PROCESS_PAGE_OPENFILELOCATION
END
END
@@ -177,7 +177,6 @@ BEGIN
PUSHBUTTON "&Afslut Proces", IDC_ENDPROCESS, 171, 189, 69, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
@@ -232,16 +231,6 @@ BEGIN
PUSHBUTTON "Hukommelses Forbrug Historik", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Debug Kanaler"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "Luk", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Processor Affinitet"

View File

@@ -1,4 +1,4 @@
/* Deutsch resource file by Klemens Friedl */
/* TRANSLATOR: Klemens Friedl */
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
@@ -179,13 +179,12 @@ BEGIN
PUSHBUTTON "&Prozess beenden", IDC_ENDPROCESS, 171, 189, 69, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "CPU-Auslastung", IDC_CPU_USAGE_FRAME, 5, 5, 67, 54, 0, WS_EX_TRANSPARENT
GROUPBOX "Auslagerungsdatei", IDC_MEM_USAGE_FRAME, 5, 63, 67, 54, BS_LEFTTEXT, WS_EX_TRANSPARENT // 5, 63, 60, 54
GROUPBOX "CPU-Last", IDC_CPU_USAGE_FRAME, 5, 5, 60, 54, 0, WS_EX_TRANSPARENT
GROUPBOX "Speicher-Last", IDC_MEM_USAGE_FRAME, 5, 63, 60, 54, BS_LEFTTEXT, WS_EX_TRANSPARENT
GROUPBOX "Insgesamt", IDC_TOTALS_FRAME, 5, 122, 117, 39, 0, WS_EX_TRANSPARENT
GROUPBOX "Zugesicherter Speicher (KB)", IDC_COMMIT_CHARGE_FRAME, 5, 166, 117, 39, 0, WS_EX_TRANSPARENT
GROUPBOX "Physikalischer Speicher (KB)", IDC_PHYSICAL_MEMORY_FRAME, 126, 122, 117, 39, 0, WS_EX_TRANSPARENT
@@ -199,49 +198,39 @@ BEGIN
ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP
EDITTEXT IDC_TOTALS_PROCESS_COUNT, 71, 149, 48, 8, ES_RIGHT | ES_READONLY |
ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP
LTEXT "Insgesamt", IDS_COMMIT_CHARGE_TOTAL, 12, 175, 50, 8 // 27
LTEXT "Grenzwert", IDS_COMMIT_CHARGE_LIMIT, 12, 184, 50, 8, NOT WS_BORDER // 15
LTEXT "Maximalwert", IDS_COMMIT_CHARGE_PEAK, 12, 193, 50, 8 // 34
LTEXT "Insgesamt", IDS_COMMIT_CHARGE_TOTAL, 12, 175, 50, 8
LTEXT "Grenzwert", IDS_COMMIT_CHARGE_LIMIT, 12, 184, 50, 8, NOT WS_BORDER
LTEXT "Maximalwert", IDS_COMMIT_CHARGE_PEAK, 12, 193, 50, 8
EDITTEXT IDC_COMMIT_CHARGE_TOTAL, 71, 174, 48, 8, ES_RIGHT | ES_READONLY |
ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP
EDITTEXT IDC_COMMIT_CHARGE_LIMIT, 71, 184, 48, 8, ES_RIGHT | ES_READONLY |
ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP
EDITTEXT IDC_COMMIT_CHARGE_PEAK, 71, 193, 48, 8, ES_RIGHT | ES_READONLY |
ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP
LTEXT "Insgesamt", IDS_PHYSICAL_MEMORY_TOTAL, 133, 131, 50, 8 // 27
LTEXT "Verfügbar", IDS_PHYSICAL_MEMORY_AVAILABLE, 133, 140, 50, 8 // 30
LTEXT "Systemcache", IDS_PHYSICAL_MEMORY_SYSTEM_CACHE, 133, 149, 46, 8 // 46
LTEXT "Insgesamt", IDS_PHYSICAL_MEMORY_TOTAL, 133, 131, 50, 8
LTEXT "Verfügbar", IDS_PHYSICAL_MEMORY_AVAILABLE, 133, 140, 50, 8
LTEXT "Systemcache", IDS_PHYSICAL_MEMORY_SYSTEM_CACHE, 133, 149, 46, 8
EDITTEXT IDC_PHYSICAL_MEMORY_TOTAL, 192, 131, 48, 8, ES_RIGHT | ES_READONLY |
ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP
EDITTEXT IDC_PHYSICAL_MEMORY_AVAILABLE, 192, 140, 48, 8, ES_RIGHT | ES_READONLY |
ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP
EDITTEXT IDC_PHYSICAL_MEMORY_SYSTEM_CACHE, 192, 149, 48, 8, ES_RIGHT | ES_READONLY |
ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP
LTEXT "Insgesamt", IDS_KERNEL_MEMORY_TOTAL, 133, 174, 50, 8 // 27
LTEXT "Ausgelagert", IDS_KERNEL_MEMORY_PAGED, 133, 184, 50, 8 // 21
LTEXT "Nicht ausgelagert", IDS_KERNEL_MEMORY_NONPAGED, 133, 193, 60, 8 // 34
LTEXT "Insgesamt", IDS_KERNEL_MEMORY_TOTAL, 133, 174, 50, 8
LTEXT "Ausgelagert", IDS_KERNEL_MEMORY_PAGED, 133, 184, 50, 8
LTEXT "Nicht ausgelagert", IDS_KERNEL_MEMORY_NONPAGED, 133, 193, 60, 8
EDITTEXT IDC_KERNEL_MEMORY_TOTAL, 192, 174, 48, 8, ES_RIGHT | ES_READONLY |
ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP
EDITTEXT IDC_KERNEL_MEMORY_PAGED, 192, 184, 48, 8, ES_RIGHT | ES_READONLY |
ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP
EDITTEXT IDC_KERNEL_MEMORY_NONPAGED, 192, 193, 48, 8, ES_RIGHT | ES_READONLY |
ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP
GROUPBOX "Verlauf der CPU-Auslastung", IDC_CPU_USAGE_HISTORY_FRAME, 76, 5, 166, 54, 0, WS_EX_TRANSPARENT
GROUPBOX "Verlauf der Auslagerungsdateiauslastung", IDC_MEMORY_USAGE_HISTORY_FRAME, 76, 63, 166, 54, 0, WS_EX_TRANSPARENT
PUSHBUTTON "CPU-Auslastungsanzeige", IDC_CPU_USAGE_GRAPH, 12, 17, 47, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
PUSHBUTTON "Auslagerungsdateiauslastungsanzeige", IDC_MEM_USAGE_GRAPH, 12, 75, 47, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
PUSHBUTTON "CPU-Auslastungsverlaufsanzeige", IDC_CPU_USAGE_HISTORY_GRAPH, 82, 17, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
PUSHBUTTON "Auslagerungsdateiauslastungs-Verlaufsanzeige", IDC_MEM_USAGE_HISTORY_GRAPH, 82, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Debug-Kanäle"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "Schließen", IDOK, 171, 189, 69, 14
GROUPBOX "CPU-Lastverlauf", IDC_CPU_USAGE_HISTORY_FRAME, 74, 5, 168, 54, 0, WS_EX_TRANSPARENT
GROUPBOX "Speicher-Lastverlauf", IDC_MEMORY_USAGE_HISTORY_FRAME, 74, 63, 168, 54, 0, WS_EX_TRANSPARENT
PUSHBUTTON "CPU-Lastanzeige", IDC_CPU_USAGE_GRAPH, 12, 17, 47, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
PUSHBUTTON "Speicher-Lastanzeige", IDC_MEM_USAGE_GRAPH, 12, 75, 47, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
PUSHBUTTON "CPU-Lastverlaufsanzeige", IDC_CPU_USAGE_HISTORY_GRAPH, 81, 17, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
PUSHBUTTON "Speicher-Lastverlaufsanzeige", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
@@ -286,40 +275,40 @@ BEGIN
CONTROL "CPU 31", IDC_CPU31, "Button", BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP, 175, 119, 41, 10
END
IDD_COLUMNS_DIALOG DIALOGEX 0, 0, 240, 199 // 0, 0, 195, 199
IDD_COLUMNS_DIALOG DIALOGEX 0, 0, 240, 199
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Spalten auswählen"
FONT 8, "MS Shell Dlg"
BEGIN
DEFPUSHBUTTON "OK", IDOK, 124, 178, 50, 14 // 84
PUSHBUTTON "Abbrechen", IDCANCEL, 178, 178, 50, 14 // 138
LTEXT "Wählen Sie die Spalten aus, die auf der Registerkarte Prozesse angezeigt werden sollen.", IDC_STATIC, 7, 7, 221, 17 // 181
DEFPUSHBUTTON "OK", IDOK, 124, 178, 50, 14
PUSHBUTTON "Abbrechen", IDCANCEL, 178, 178, 50, 14
LTEXT "Wählen Sie die Spalten aus, die auf der Registerkarte Prozesse angezeigt werden sollen.", IDC_STATIC, 7, 7, 221, 17
CONTROL "&Name", IDC_IMAGENAME, "Button", BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP, 7, 28, 56, 10
CONTROL "&PID (Prozess-ID)", IDC_PID, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 39, 88, 10
CONTROL "&CPU-Auslastung", IDC_CPUUSAGE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 50, 80, 10 // 53
CONTROL "&CPU %", IDC_CPUUSAGE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 50, 80, 10
CONTROL "CP&U-Zeit", IDC_CPUTIME, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 61, 48, 10
CONTROL "&Speicherauslastung", IDC_MEMORYUSAGE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 72, 90, 10 // 63
CONTROL "Verän&d. der Speicherauslastung", IDC_MEMORYUSAGEDELTA, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 83, 120, 10 // 82
CONTROL "&Maximale Speicherauslastung", IDC_PEAKMEMORYUSAGE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 94, 115, 10 // 82
CONTROL "&Speicherlast", IDC_MEMORYUSAGE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 72, 90, 10
CONTROL "&Delta Speicherlast", IDC_MEMORYUSAGEDELTA, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 83, 120, 10
CONTROL "&Maximale Speicherlast", IDC_PEAKMEMORYUSAGE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 94, 115, 10
CONTROL "S&eitenfehler", IDC_PAGEFAULTS, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 105, 53, 10
CONTROL "BENUTZE&R-Objekte", IDC_USEROBJECTS, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 116, 90, 10 // 62
CONTROL "BENUTZE&R-Objekte", IDC_USEROBJECTS, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 116, 90, 10
CONTROL "E/A (Lesen)", IDC_IOREADS, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 127, 49, 10
CONTROL "E/A-Bytes (Lesen)", IDC_IOREADBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 138, 80, 10 // 65
CONTROL "S&itzungskennung", IDC_SESSIONID, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 149, 70, 10 // 50
CONTROL "Benut&zername", IDC_USERNAME, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 160, 70, 10 // 51
CONTROL "Veränderung der Seiten&fehler", IDC_PAGEFAULTSDELTA, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 28, 120, 10 // 107,60
CONTROL "Größe des &virtuellen Speichers", IDC_VIRTUALMEMORYSIZE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 39, 120, 10 // 107, 60
CONTROL "&Ausgelagerter Pool", IDC_PAGEDPOOL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 50, 80, 10 // 107, 53
CONTROL "Nicht ausgelagerter P&ool", IDC_NONPAGEDPOOL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 61, 115, 10 // 107
CONTROL "&Basispriorität", IDC_BASEPRIORITY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 72, 80, 10 // 107
CONTROL "&Handleanzahl", IDC_HANDLECOUNT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 83, 59, 10 // 107
CONTROL "&Threadanzahl", IDC_THREADCOUNT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 94, 59, 10 // 107
CONTROL "GDI-Obje&kte", IDC_GDIOBJECTS, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 105, 55, 10 // 107
CONTROL "E/A (Schreiben)", IDC_IOWRITES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 116, 90, 10 // 107
CONTROL "E/A-Bytes (Schreiben)", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 127, 105, 10 // 107
CONTROL "E/A (Andere)", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 138, 105, 10 // 107
CONTROL "E/A-Bytes (Andere)", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 149, 110, 10 // 107
CONTROL "Befeh&lszeile", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 160, 65, 10 // 107
CONTROL "E/A-Bytes (Lesen)", IDC_IOREADBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 138, 80, 10
CONTROL "S&itzungskennung", IDC_SESSIONID, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 149, 70, 10
CONTROL "Benut&zername", IDC_USERNAME, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 160, 70, 10
CONTROL "Delta Seiten&fehler", IDC_PAGEFAULTSDELTA, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 28, 120, 10
CONTROL "&Virtueller Speicher", IDC_VIRTUALMEMORYSIZE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 39, 120, 10
CONTROL "&Ausgelagerter Pool", IDC_PAGEDPOOL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 50, 80, 10
CONTROL "Nicht ausgelagerter P&ool", IDC_NONPAGEDPOOL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 61, 115, 10
CONTROL "&Basispriorität", IDC_BASEPRIORITY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 72, 80, 10
CONTROL "&Handles", IDC_HANDLECOUNT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 83, 59, 10
CONTROL "&Threads", IDC_THREADCOUNT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 94, 59, 10
CONTROL "GDI-Obje&kte", IDC_GDIOBJECTS, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 105, 55, 10
CONTROL "E/A (Schreiben)", IDC_IOWRITES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 116, 90, 10
CONTROL "E/A-Bytes (Schreiben)", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 127, 105, 10
CONTROL "E/A (Andere)", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 138, 105, 10
CONTROL "E/A-Bytes (Andere)", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 149, 110, 10
CONTROL "Befeh&lszeile", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 160, 65, 10
END
/* String Tables */
@@ -353,7 +342,7 @@ BEGIN
ID_WINDOWS_TILEVERTICALLY "Ordnet die Fenster vertikal auf dem Desktop an."
ID_WINDOWS_MINIMIZE "Minimiert die Fenster"
ID_WINDOWS_MAXIMIZE "Maximiert die Fenster"
ID_WINDOWS_CASCADE "Ordnet die Fenster diagonal überlappend auf den Desktop an."
ID_WINDOWS_CASCADE "Ordnet die Fenster diagonal überlappend auf dem Desktop an."
ID_WINDOWS_BRINGTOFRONT "Zeigt das Fenster im Vordergrund an, aber wechselt nicht zu diesem."
ID_HELP_TOPICS "Zeigt die Hilfethemen des Taskmanagers an."
ID_HELP_ABOUT "Zeigt Programminformationen, Versionsnummer und Copyright an."
@@ -361,8 +350,8 @@ BEGIN
ID_OPTIONS_SHOW16BITTASKS "Zeigt die 16-Bit-Tasks unter der zugehörigen ntvdm.exe an."
ID_VIEW_SELECTCOLUMNS "Legt fest welche Spalten auf der Registerkarte Prozesse angezeigt werden."
ID_VIEW_SHOWKERNELTIMES "Zeigt die Kernel-Zeiten in den Systemmonitordiagrammen an."
ID_VIEW_CPUHISTORY_ONEGRAPHALL "Zeigt für jede CPU-Auslastung ein Verlaufsdiagramm an."
ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU "Zeigt die gesamte CPU-Auslastung in einem Verlaufsdiagramm an."
ID_VIEW_CPUHISTORY_ONEGRAPHALL "Zeigt alle CPUs in demselben Lastverlaufsdiagramm an."
ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU "Zeigt für jede CPU ein eigenes Lastverlaufsdiagramm an."
ID_APPLICATION_PAGE_SWITCHTO "Zeigt das Fenster im Vordergrund an und wechselt zu diesem Task."
END
@@ -381,8 +370,8 @@ BEGIN
ID_PROCESS_PAGE_SETPRIORITY_NORMAL "Legt die Priorität auf NORMAL fest."
ID_PROCESS_PAGE_SETPRIORITY_BELOWNORMAL "Legt die Priorität auf NIEDRIGER ALS NORMAL fest."
ID_PROCESS_PAGE_SETPRIORITY_LOW "Legt die Priorität auf NIEDRIG fest."
ID_PROCESS_PAGE_PROPERTIES "Shows process file properties"
ID_PROCESS_PAGE_OPENFILELOCATION "Opens process file location"
ID_PROCESS_PAGE_PROPERTIES "Zeigt die Dateieigenschaften an."
ID_PROCESS_PAGE_OPENFILELOCATION "Öffnet den übergeordneten Ordner."
END
STRINGTABLE
@@ -396,19 +385,19 @@ BEGIN
IDS_TAB_PID "PID"
IDS_TAB_USERNAME "Benutzername"
IDS_TAB_SESSIONID "Sitzungskennung"
IDS_TAB_CPU "CPU-Auslastung"
IDS_TAB_CPU "CPU %"
IDS_TAB_CPUTIME "CPU-Zeit"
IDS_TAB_MEMUSAGE "Speicherauslastung"
IDS_TAB_PEAKMEMUSAGE "Veränd. der Speicherauslastung"
IDS_TAB_MEMDELTA "Maximale Speicherauslastung"
IDS_TAB_MEMUSAGE "Speicherlast"
IDS_TAB_PEAKMEMUSAGE "Maximale Speicherlast"
IDS_TAB_MEMDELTA "Delta Speicherlast"
IDS_TAB_PAGEFAULT "Seitenfehler"
IDS_TAB_PFDELTA "Maximale Seitenfehler"
IDS_TAB_VMSIZE "Virtuelle Arbeitsspeichergröße"
IDS_TAB_PFDELTA "Delta Seitenfehler"
IDS_TAB_VMSIZE "Virtueller Speicher"
IDS_TAB_PAGEDPOOL "Ausgelagerter Pool"
IDS_TAB_NPPOOL "Nichtausgelagerter Pool"
IDS_TAB_BASEPRI "Basispriorität"
IDS_TAB_HANDLES "Handleanzahl"
IDS_TAB_THREADS "Threadanzahl"
IDS_TAB_HANDLES "Handles"
IDS_TAB_THREADS "Threads"
IDS_TAB_USERPBJECTS "Benutzer-Objekte"
IDS_TAB_GDIOBJECTS "GDI-Objekte"
IDS_TAB_IOREADS "E/A (Lesen)"

View File

@@ -1,4 +1,4 @@
/* Greek (GR) resources by Dj Apal */
/* TRANSLATOR: Dj Apal */
LANGUAGE LANG_GREEK, SUBLANG_DEFAULT
@@ -127,7 +127,7 @@ BEGIN
MENUITEM "End Process &Tree", ID_PROCESS_PAGE_ENDPROCESSTREE
MENUITEM "&Debug", ID_PROCESS_PAGE_DEBUG
MENUITEM SEPARATOR
POPUP "Set P&riority"
POPUP "Set &Priority"
BEGIN
MENUITEM "&Realtime", ID_PROCESS_PAGE_SETPRIORITY_REALTIME
MENUITEM "&High", ID_PROCESS_PAGE_SETPRIORITY_HIGH
@@ -138,7 +138,7 @@ BEGIN
END
MENUITEM "Set &Affinity...", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM SEPARATOR
MENUITEM "&Properties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "P&roperties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "&Open File Location", ID_PROCESS_PAGE_OPENFILELOCATION
END
END
@@ -179,7 +179,6 @@ BEGIN
PUSHBUTTON "&End Process", IDC_ENDPROCESS, 171, 189, 69, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
@@ -234,16 +233,6 @@ BEGIN
PUSHBUTTON "MEM Usage History", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Debug Channels"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "Close", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Processor Affinity"

View File

@@ -125,7 +125,7 @@ BEGIN
MENUITEM "End Process &Tree", ID_PROCESS_PAGE_ENDPROCESSTREE
MENUITEM "&Debug", ID_PROCESS_PAGE_DEBUG
MENUITEM SEPARATOR
POPUP "Set P&riority"
POPUP "Set &Priority"
BEGIN
MENUITEM "&Realtime", ID_PROCESS_PAGE_SETPRIORITY_REALTIME
MENUITEM "&High", ID_PROCESS_PAGE_SETPRIORITY_HIGH
@@ -136,7 +136,7 @@ BEGIN
END
MENUITEM "Set &Affinity...", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM SEPARATOR
MENUITEM "&Properties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "P&roperties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "&Open File Location", ID_PROCESS_PAGE_OPENFILELOCATION
END
END
@@ -175,7 +175,6 @@ BEGIN
PUSHBUTTON "&End Process", IDC_ENDPROCESS, 171, 189, 69, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
@@ -230,16 +229,6 @@ BEGIN
PUSHBUTTON "MEM Usage History", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Debug Channels"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "Close", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Processor Affinity"

View File

@@ -1,4 +1,4 @@
/* Spanish (Spain) resources by Carlos Garcia Gomez, Samuel Serapión and Ismael Ferreras Morezuelas (Swyter) */
/* TRANSLATORS: Carlos Garcia Gomez, Samuel Serapión, Ismael Ferreras Morezuelas (Swyter) */
LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
@@ -138,7 +138,7 @@ BEGIN
END
MENUITEM "Establecer &afinidad...", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM SEPARATOR
MENUITEM "&Properties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "P&roperties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "&Open File Location", ID_PROCESS_PAGE_OPENFILELOCATION
END
END
@@ -179,7 +179,6 @@ BEGIN
PUSHBUTTON "&Finalizar proceso", IDC_ENDPROCESS, 171, 189, 69, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
@@ -234,16 +233,6 @@ BEGIN
PUSHBUTTON "Historial de uso de memoria", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Canales de depuración"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "Cerrar", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Afinidad del procesador"

View File

@@ -1,9 +1,8 @@
/*
* PROJECT: Task Manager for ReactOS
* LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
* FILE: base/applications/taskmgr/lang/et-EE.rc
* PURPOSE: Estonian Language resource file
* TRANSLATOR: Joann Mõndresku (joannmondresku at gmail dot com)
* TRANSLATOR: Joann Mõndresku <joannmondresku@gmail.com>
*/
LANGUAGE LANG_ESTONIAN, SUBLANG_DEFAULT
@@ -143,7 +142,7 @@ BEGIN
END
MENUITEM "Määra &ühtivus...", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM SEPARATOR
MENUITEM "&Properties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "Prop&erties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "&Open File Location", ID_PROCESS_PAGE_OPENFILELOCATION
END
END
@@ -182,7 +181,6 @@ BEGIN
PUSHBUTTON "&Lõpeta protsess", IDC_ENDPROCESS, 171, 189, 69, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
@@ -237,16 +235,6 @@ BEGIN
PUSHBUTTON "Füüsilise mälu hõivatuse ajalugu", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Silumiskanalid"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "Sule", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Protessori ühtivus"

View File

@@ -1,4 +1,4 @@
/* French (Fr) resources by Benoit Plante (aka cmoibenlepro) */
/* TRANSLATOR: Benoit Plante (aka cmoibenlepro) */
LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
@@ -179,7 +179,6 @@ BEGIN
PUSHBUTTON "&Terminer le processus", IDC_ENDPROCESS, 165, 189, 75, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
@@ -234,16 +233,6 @@ BEGIN
PUSHBUTTON "Historique d'utilisation du fichier d'échange", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Cannaux de débogage"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "Fermer", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Affinité du processeur"

View File

@@ -1,4 +1,4 @@
/* Hebrew translations by Baruch Rutman (peterooch) and Shy Zedaka */
/* TRANSLATORS: Baruch Rutman (peterooch), Shy Zedaka */
LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT
@@ -138,7 +138,7 @@ BEGIN
END
MENUITEM "הגדרת &קירבה", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM SEPARATOR
MENUITEM "&Properties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "P&roperties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "&Open File Location", ID_PROCESS_PAGE_OPENFILELOCATION
END
END
@@ -179,7 +179,6 @@ BEGIN
PUSHBUTTON "&סיים תהליך", IDC_ENDPROCESS, 171, 189, 69, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
@@ -234,16 +233,6 @@ BEGIN
PUSHBUTTON "היסטורית שימוש בזיכרון", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Debug Channels"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "סגירה", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "קירבה בין מעבדים"

View File

@@ -1,4 +1,4 @@
/* Hungaruan (HU) translation by Robert Horvath - talley at cubeclub.hu */
/* TRANSLATOR: Robert Horvath <talley@cubeclub.hu> */
LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT
@@ -139,7 +139,7 @@ BEGIN
MENUITEM "&Processzorok használata...", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM SEPARATOR
MENUITEM "&Tulajdonságok", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "Fájl &helyének megnyitása", ID_PROCESS_PAGE_OPENFILELOCATION
MENUITEM "Fájl h&elyének megnyitása", ID_PROCESS_PAGE_OPENFILELOCATION
END
END
@@ -179,7 +179,6 @@ BEGIN
PUSHBUTTON "&Folyamat befejezése", IDC_ENDPROCESS, 165, 189, 75, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
@@ -234,16 +233,6 @@ BEGIN
PUSHBUTTON "Memória használata", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Hibakereső csatornák"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "Bezárás", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Processzoraffinitás"

View File

@@ -1,4 +1,4 @@
/* Indonesian resource file by Zaenal Mutaqin (ade999@gmail.com) and Mas Ahmad Muhammad (m.charly81@gmail.com) */
/* TRANSLATORS: Zaenal Mutaqin <ade999@gmail.com> and Mas Ahmad Muhammad <m.charly81@gmail.com> */
LANGUAGE LANG_INDONESIAN, SUBLANG_DEFAULT
@@ -138,7 +138,7 @@ BEGIN
END
MENUITEM "Setel &Afinitas...", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM SEPARATOR
MENUITEM "&Properties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "P&roperties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "&Open File Location", ID_PROCESS_PAGE_OPENFILELOCATION
END
END
@@ -179,7 +179,6 @@ BEGIN
PUSHBUTTON "&Akhiri Proses", IDC_ENDPROCESS, 171, 189, 69, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
@@ -234,16 +233,6 @@ BEGIN
PUSHBUTTON "Riwayat Pemakaian MEM", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Saluran Debug"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "Tutup", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Afinitas Prosesor"

View File

@@ -136,7 +136,7 @@ BEGIN
END
MENUITEM "Definisci &Affinità...", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM SEPARATOR
MENUITEM "&Properties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "P&roperties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "&Open File Location", ID_PROCESS_PAGE_OPENFILELOCATION
END
END
@@ -177,7 +177,6 @@ BEGIN
PUSHBUTTON "&Termina Processo", IDC_ENDPROCESS, 171, 189, 69, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
@@ -232,16 +231,6 @@ BEGIN
PUSHBUTTON "Storico uso MEM", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Debug Channels"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "Chiudi", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Processor Affinity"

View File

@@ -136,7 +136,7 @@ BEGIN
END
MENUITEM "関係の設定(&A)...", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM SEPARATOR
MENUITEM "&Properties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "P&roperties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "&Open File Location", ID_PROCESS_PAGE_OPENFILELOCATION
END
END
@@ -177,7 +177,6 @@ BEGIN
PUSHBUTTON "プロセスの終了(&E)", IDC_ENDPROCESS, 171, 189, 69, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 9, "MS UI Gothic"
@@ -232,16 +231,6 @@ BEGIN
PUSHBUTTON "メモリ使用量の履歴", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "デバッグ チャンネル"
FONT 9, "MS UI Gothic"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "閉じる", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "プロセッサの関係"

View File

@@ -1,4 +1,4 @@
/* Korean translation by Seungju Kim */
/* TRANSLATOR: Seungju Kim */
LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT
@@ -138,7 +138,7 @@ BEGIN
END
MENUITEM "선호도 설정(&A)", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM SEPARATOR
MENUITEM "&Properties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "P&roperties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "&Open File Location", ID_PROCESS_PAGE_OPENFILELOCATION
END
END
@@ -179,7 +179,6 @@ BEGIN
PUSHBUTTON "작업 끝내기(&E)", IDC_ENDPROCESS, 171, 189, 69, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 9, "굴림"
@@ -234,16 +233,6 @@ BEGIN
PUSHBUTTON "메모리 사용 기록", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "디버그 채널"
FONT 9, "굴림"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "닫기", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "프로세서 선호도"

View File

@@ -15,7 +15,7 @@ BEGIN
MENUITEM "&Verbergen indien geminimaliseerd", ID_OPTIONS_HIDEWHENMINIMIZED, CHECKED
MENUITEM "16-&bits taken weergeven", ID_OPTIONS_SHOW16BITTASKS, CHECKED
END
POPUP "&Beeld"
POPUP "B&eeld"
BEGIN
MENUITEM "&Nu vernieuwen", ID_VIEW_REFRESH
POPUP "Bijwerk&snelheid"
@@ -121,11 +121,11 @@ IDR_PROCESS_PAGE_CONTEXT MENU
BEGIN
POPUP "DUMMY"
BEGIN
MENUITEM "&Proces beëindigen", ID_PROCESS_PAGE_ENDPROCESS
MENUITEM "Pro&ces beëindigen", ID_PROCESS_PAGE_ENDPROCESS
MENUITEM "Process&tructuur beëindigen", ID_PROCESS_PAGE_ENDPROCESSTREE
MENUITEM "&Fouten opsporen", ID_PROCESS_PAGE_DEBUG
MENUITEM SEPARATOR
POPUP "P&rioriteit instellen"
POPUP "&Prioriteit instellen"
BEGIN
MENUITEM "&Realtime", ID_PROCESS_PAGE_SETPRIORITY_REALTIME
MENUITEM "&Hoog", ID_PROCESS_PAGE_SETPRIORITY_HIGH
@@ -136,7 +136,7 @@ BEGIN
END
MENUITEM "&Affiniteit instellen...", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM SEPARATOR
MENUITEM "&Properties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "P&roperties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "&Open File Location", ID_PROCESS_PAGE_OPENFILELOCATION
END
END
@@ -177,7 +177,6 @@ BEGIN
PUSHBUTTON "&Proces beëindigen", IDC_ENDPROCESS, 171, 189, 69, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
@@ -232,16 +231,6 @@ BEGIN
PUSHBUTTON "Geschiedenis van wisselbestandsgebruik", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Debug kanalen"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "Sluit", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Processoraffiniteit"

View File

@@ -136,7 +136,7 @@ BEGIN
END
MENUITEM "Sett &tiltrekning ...", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM SEPARATOR
MENUITEM "&Properties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "P&roperties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "&Open File Location", ID_PROCESS_PAGE_OPENFILELOCATION
END
END
@@ -177,7 +177,6 @@ BEGIN
PUSHBUTTON "&Avslutt prosess", IDC_ENDPROCESS, 171, 189, 69, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
@@ -232,16 +231,6 @@ BEGIN
PUSHBUTTON "Minne bruk historie", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Debug kanaler"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "Avslutt", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Prosessor slektskap"

View File

@@ -1,9 +1,8 @@
/*
* Translated by xrogers
* xxrogers@users.sourceforge.net
* https://sourceforge.net/projects/reactospl
* UTF-8 conversion by Caemyr (May, 2011)
* Updated by Saibamen - Adam Stachowicz (saibamenppl@gmail.com) (August, 2014)
* TRANSLATOR: xrogers <xxrogers@users.sourceforge.net>
* https://sourceforge.net/projects/reactospl
* UTF-8 conversion by Caemyr (May, 2011)
* Updated by Saibamen - Adam Stachowicz <saibamenppl@gmail.com> (August, 2014)
*/
LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
@@ -144,7 +143,7 @@ BEGIN
END
MENUITEM "Ustaw &koligację...", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM SEPARATOR
MENUITEM "&Properties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "P&roperties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "&Open File Location", ID_PROCESS_PAGE_OPENFILELOCATION
END
END
@@ -185,7 +184,6 @@ BEGIN
PUSHBUTTON "&Zakończ proces", IDC_ENDPROCESS, 171, 189, 69, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
@@ -240,16 +238,6 @@ BEGIN
PUSHBUTTON "Historia zużycia pamięci", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Kanały debugowania"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "Zamknij", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Koligacje procesora"

View File

@@ -136,7 +136,7 @@ BEGIN
END
MENUITEM "Definir &afinidade...", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM SEPARATOR
MENUITEM "&Properties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "P&roperties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "&Open File Location", ID_PROCESS_PAGE_OPENFILELOCATION
END
END
@@ -177,7 +177,6 @@ BEGIN
PUSHBUTTON "&Finalizar processo", IDC_ENDPROCESS, 171, 189, 69, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
@@ -232,16 +231,6 @@ BEGIN
PUSHBUTTON "MEM Usage History", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Canais de depuração"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "Fechar", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Afinidade com processador"

View File

@@ -1,4 +1,4 @@
/* Translation and UTF-8 Conversion by Gabriel Aguiar(fgsoftware1) <fgygh5804@gmail.com,fgsoftwarestudio@gmail.com> (July, 2021) */
/* TRANSLATOR: 2021 Gabriel Aguiar <fgygh5804@gmail.com,fgsoftwarestudio@gmail.com> */
LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL
@@ -138,7 +138,7 @@ BEGIN
END
MENUITEM "Definir &afinidade...", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM SEPARATOR
MENUITEM "&Propriedades", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "P&ropriedades", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "&Abrir localização do ficheiro", ID_PROCESS_PAGE_OPENFILELOCATION
END
END
@@ -179,7 +179,6 @@ BEGIN
PUSHBUTTON "&Terminar processo", IDC_ENDPROCESS, 171, 189, 69, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
@@ -234,16 +233,6 @@ BEGIN
PUSHBUTTON "Histórico de uso da memória RAM", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Canais de depuração"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "Fechar", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Afinidade com processador"

View File

@@ -1,9 +1,8 @@
/*
* Translators: Petru Dimitriu (petrimetri at gmail dot com)
* Ștefan Fulea (stefan dot fulea at mail dot com)
* TRANSLATORS: Petru Dimitriu <petrimetri@gmail.com>
* Ștefan Fulea <stefan.fulea@mail.com>
*/
LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
IDR_TASKMANAGER MENU
@@ -142,7 +141,7 @@ BEGIN
END
MENUITEM "A&finitate…", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM SEPARATOR
MENUITEM "&Properties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "P&roperties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "&Open File Location", ID_PROCESS_PAGE_OPENFILELOCATION
END
END
@@ -183,7 +182,6 @@ BEGIN
PUSHBUTTON "Opr&ește procesul", IDC_ENDPROCESS, 171, 189, 69, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
@@ -238,16 +236,6 @@ BEGIN
PUSHBUTTON "Afișaj istoric încărcătură memorie", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Canale de depanare"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "Î&nchide", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Afinitate procesor"

View File

@@ -1,4 +1,4 @@
/* Russian language resource file by Dmitry Chapyshev, 2007-06-10, Kudratov Olimjon (olim98@bk.ru) */
/* TRANSLATORS: Dmitry Chapyshev, 2007-06-10, Kudratov Olimjon <olim98@bk.ru> */
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
@@ -179,7 +179,6 @@ BEGIN
PUSHBUTTON "&Завершить процесс", IDC_ENDPROCESS, 167, 189, 74, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
@@ -234,16 +233,6 @@ BEGIN
PUSHBUTTON "Хронология использования памяти", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Отладка потоков"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "Закрыть", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Семейство процессоров"

View File

@@ -1,4 +1,4 @@
/* Slovak translation by Kario (kario@szm.sk) (09-08-2007) */
/* TRANSLATOR: 2007 Kario <kario@szm.sk> */
LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
@@ -138,7 +138,7 @@ BEGIN
END
MENUITEM "Nastaviť &afinitu...", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM SEPARATOR
MENUITEM "&Properties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "P&roperties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "&Open File Location", ID_PROCESS_PAGE_OPENFILELOCATION
END
END
@@ -179,7 +179,6 @@ BEGIN
PUSHBUTTON "&Ukončiť proces", IDC_ENDPROCESS, 171, 189, 69, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
@@ -234,16 +233,6 @@ BEGIN
PUSHBUTTON "História využitia pamäte", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Kanály ladenia"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "Zavrieť", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 270, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Afinita procesorov"

View File

@@ -1,5 +1,4 @@
/* TRANSLATOR : Ardit Dani (Ard1t) (ardit.dani@gmail.com)
* DATE OF TR: 29-11-2013
/* TRANSLATOR: 2013 Ardit Dani (Ard1t) <ardit.dani@gmail.com>
*/
LANGUAGE LANG_ALBANIAN, SUBLANG_NEUTRAL
@@ -140,7 +139,7 @@ BEGIN
END
MENUITEM "Vendos prirje...", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM SEPARATOR
MENUITEM "&Properties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "P&roperties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "&Open File Location", ID_PROCESS_PAGE_OPENFILELOCATION
END
END
@@ -179,7 +178,6 @@ BEGIN
PUSHBUTTON "Mbyll Procesin", IDC_ENDPROCESS, 171, 189, 69, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
@@ -234,16 +232,6 @@ BEGIN
PUSHBUTTON "Historia e perdorimit MEM", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Debug Channels"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "Mbyll", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Processor Affinity"

View File

@@ -1,4 +1,4 @@
/* Swedish translation by David Nordenberg */
/* TRANSLATOR: David Nordenberg */
LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL
@@ -138,7 +138,7 @@ BEGIN
END
MENUITEM "Välj &källa (FIXME)...", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM SEPARATOR
MENUITEM "&Properties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "P&roperties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "&Open File Location", ID_PROCESS_PAGE_OPENFILELOCATION
END
END
@@ -179,7 +179,6 @@ BEGIN
PUSHBUTTON "&Avsluta process", IDC_ENDPROCESS, 171, 189, 69, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
@@ -234,16 +233,6 @@ BEGIN
PUSHBUTTON "Minneshistorik", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Felsökningskanaler"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "Stäng", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Processorsamhörighet"

View File

@@ -1,4 +1,4 @@
/* TRANSLATOR: 2013-2014, 2016, 2019 Erdem Ersoy (eersoy93) (erdemersoy [at] erdemersoy [dot] net) */
/* TRANSLATOR: 2013-2019 Erdem Ersoy (eersoy93) <erdemersoy@erdemersoy.net> */
LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
@@ -138,7 +138,7 @@ BEGIN
END
MENUITEM "İ&lişkiyi Ayarla...", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM SEPARATOR
MENUITEM "&Properties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "P&roperties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "&Open File Location", ID_PROCESS_PAGE_OPENFILELOCATION
END
END
@@ -177,7 +177,6 @@ BEGIN
PUSHBUTTON "&İşlemi Sonlandır", IDC_ENDPROCESS, 171, 189, 69, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
@@ -232,16 +231,6 @@ BEGIN
PUSHBUTTON "Bellek Kullanım Geçmişi Grafiği", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Hata Ayıklama Kanalları"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "Kapat", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "İşlemci İlişkisi"

View File

@@ -136,7 +136,7 @@ BEGIN
END
MENUITEM "У&становити відповідність...", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM SEPARATOR
MENUITEM "&Properties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "P&roperties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "&Open File Location", ID_PROCESS_PAGE_OPENFILELOCATION
END
END
@@ -177,7 +177,6 @@ BEGIN
PUSHBUTTON "Зн&яти процес", IDC_ENDPROCESS, 171, 189, 69, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
@@ -232,16 +231,6 @@ BEGIN
PUSHBUTTON "Хронологія використання пам'яті", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Налагодження каналів"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "Закрити", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Відповідність процесорів"

View File

@@ -2,7 +2,7 @@
* (Simplified Chinese resources)
* (简体中文资源)
* by zhangbing 2008 <e_zb@21cn.com, ezb@mail.gywb.cn>
* Improved by Wexpo Lyu <laosb at lasteam.net>
* Improved by Wexpo Lyu <laosb@lasteam.net>
*/
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
@@ -143,8 +143,8 @@ BEGIN
END
MENUITEM "关系设置(&A)...", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM SEPARATOR
MENUITEM "&Properties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "&Open File Location", ID_PROCESS_PAGE_OPENFILELOCATION
MENUITEM "Properties(&R)", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "Open File Location(&O)", ID_PROCESS_PAGE_OPENFILELOCATION
END
END
@@ -184,7 +184,6 @@ BEGIN
PUSHBUTTON "结束进程(&E)", IDC_ENDPROCESS, 171, 189, 69, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 9, "宋体"
@@ -239,16 +238,6 @@ BEGIN
PUSHBUTTON "内存使用记录", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "调试频道"
FONT 9, "宋体"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "关闭", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "处理器关联"

View File

@@ -144,8 +144,8 @@ BEGIN
END
MENUITEM "親和性設定(&A)...", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM SEPARATOR
MENUITEM "&Properties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "&Open File Location", ID_PROCESS_PAGE_OPENFILELOCATION
MENUITEM "Properties(&R)", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "Open File Location(&O)", ID_PROCESS_PAGE_OPENFILELOCATION
END
END
@@ -185,7 +185,6 @@ BEGIN
PUSHBUTTON "結束處理程序(&E)", IDC_ENDPROCESS, 171, 189, 69, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 9, "新細明體"
@@ -240,16 +239,6 @@ BEGIN
PUSHBUTTON "記憶體使用記錄", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "偵錯頻道"
FONT 9, "新細明體"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "關閉", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "處理器親和性"

View File

@@ -144,8 +144,8 @@ BEGIN
END
MENUITEM "親和性設定(&A)...", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM SEPARATOR
MENUITEM "&Properties", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "&Open File Location", ID_PROCESS_PAGE_OPENFILELOCATION
MENUITEM "Properties(&R)", ID_PROCESS_PAGE_PROPERTIES
MENUITEM "Open File Location(&O)", ID_PROCESS_PAGE_OPENFILELOCATION
END
END
@@ -185,7 +185,6 @@ BEGIN
PUSHBUTTON "結束處理程序(&E)", IDC_ENDPROCESS, 171, 189, 69, 14
END
/* IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 */
IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 9, "新細明體"
@@ -240,16 +239,6 @@ BEGIN
PUSHBUTTON "記憶體使用記錄", IDC_MEM_USAGE_HISTORY_GRAPH, 81, 75, 153, 37, NOT WS_TABSTOP, WS_EX_CLIENTEDGE
END
IDD_DEBUG_CHANNELS_DIALOG DIALOGEX 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "除錯頻道"
FONT 9, "新細明體"
BEGIN
CONTROL "List1", IDC_DEBUG_CHANNELS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING, 7, 7, 233, 177
PUSHBUTTON "關閉", IDOK, 171, 189, 69, 14
END
IDD_AFFINITY_DIALOG DIALOGEX 0, 0, 231, 154
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "處理器親和性"

View File

@@ -1,7 +1,7 @@
/*
* PROJECT: ReactOS Task Manager
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* PURPOSE: Performance Counters.
* PURPOSE: Performance Counters
* COPYRIGHT: Copyright 1999-2001 Brian Palmer <brianp@reactos.org>
* Copyright 2014 Ismael Ferreras Morezuelas <swyterzone+ros@gmail.com>
*/
@@ -100,7 +100,7 @@ void PerfDataUninitialize(void)
static void SidToUserName(PSID Sid, LPWSTR szBuffer, DWORD BufferSize)
{
static WCHAR szDomainNameUnused[255];
DWORD DomainNameLen = sizeof(szDomainNameUnused) / sizeof(szDomainNameUnused[0]);
DWORD DomainNameLen = _countof(szDomainNameUnused);
SID_NAME_USE Use;
if (Sid != NULL)
@@ -153,8 +153,6 @@ CachedGetUserFromSid(
pEntry->List.Blink = SidToUserNameHead.Blink;
SidToUserNameHead.Blink->Flink = &pEntry->List;
SidToUserNameHead.Blink = &pEntry->List;
return;
}
void PerfDataRefresh(void)
@@ -324,7 +322,7 @@ void PerfDataRefresh(void)
wcsncpy(pPerfData[Idx].ImageName, pSPI->ImageName.Buffer, len);
} else {
LoadStringW(hInst, IDS_IDLE_PROCESS, pPerfData[Idx].ImageName,
sizeof(pPerfData[Idx].ImageName) / sizeof(pPerfData[Idx].ImageName[0]));
_countof(pPerfData[Idx].ImageName));
}
pPerfData[Idx].ProcessId = pSPI->UniqueProcessId;
@@ -402,7 +400,7 @@ ClearInfo:
ZeroMemory(&pPerfData[Idx].IOCounters, sizeof(IO_COUNTERS));
}
cwcUserName = sizeof(pPerfData[0].UserName) / sizeof(pPerfData[0].UserName[0]);
cwcUserName = _countof(pPerfData[0].UserName);
CachedGetUserFromSid(ProcessUser, pPerfData[Idx].UserName, &cwcUserName);
if (ProcessSD != NULL)

View File

@@ -1,7 +1,7 @@
/*
* PROJECT: ReactOS Task Manager
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* PURPOSE: Performance Page.
* PURPOSE: Performance Page
* COPYRIGHT: Copyright 1999-2001 Brian Palmer <brianp@reactos.org>
*/
@@ -320,9 +320,9 @@ DWORD WINAPI PerformancePageRefreshThread(PVOID Parameter)
WCHAR Text[260];
WCHAR szMemUsage[256], szCpuUsage[256], szProcesses[256];
LoadStringW(hInst, IDS_STATUS_CPUUSAGE, szCpuUsage, ARRAYSIZE(szCpuUsage));
LoadStringW(hInst, IDS_STATUS_MEMUSAGE, szMemUsage, ARRAYSIZE(szMemUsage));
LoadStringW(hInst, IDS_STATUS_PROCESSES, szProcesses, ARRAYSIZE(szProcesses));
LoadStringW(hInst, IDS_STATUS_CPUUSAGE, szCpuUsage, _countof(szCpuUsage));
LoadStringW(hInst, IDS_STATUS_MEMUSAGE, szMemUsage, _countof(szMemUsage));
LoadStringW(hInst, IDS_STATUS_PROCESSES, szProcesses, _countof(szProcesses));
while (1)
{
@@ -355,11 +355,11 @@ DWORD WINAPI PerformancePageRefreshThread(PVOID Parameter)
StrFormatByteSizeW(CommitChargeTotal * 1024,
szChargeTotalFormat,
ARRAYSIZE(szChargeTotalFormat));
_countof(szChargeTotalFormat));
StrFormatByteSizeW(CommitChargeLimit * 1024,
szChargeLimitFormat,
ARRAYSIZE(szChargeLimitFormat));
_countof(szChargeLimitFormat));
if (!bTrackMenu)
{

View File

@@ -1,7 +1,7 @@
/*
* PROJECT: ReactOS Task Manager
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* PURPOSE: Processes Page.
* PURPOSE: Processes Page
* COPYRIGHT: Copyright 1999-2001 Brian Palmer <brianp@reactos.org>
* Copyright 2009 Maxime Vernier <maxime.vernier@gmail.com>
* Copyright 2022 Thamatip Chitpong <tangaming123456@outlook.com>
@@ -797,8 +797,8 @@ int CALLBACK ProcessPageCompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lPara
if (TaskManagerSettings.SortColumn == COLUMN_IMAGENAME)
{
PerfDataGetImageName(IndexParam1, text1, sizeof (text1) / sizeof (*text1));
PerfDataGetImageName(IndexParam2, text2, sizeof (text2) / sizeof (*text2));
PerfDataGetImageName(IndexParam1, text1, _countof(text1));
PerfDataGetImageName(IndexParam2, text2, _countof(text2));
ret = _wcsicmp(text1, text2);
}
else if (TaskManagerSettings.SortColumn == COLUMN_PID)
@@ -809,14 +809,14 @@ int CALLBACK ProcessPageCompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lPara
}
else if (TaskManagerSettings.SortColumn == COLUMN_USERNAME)
{
PerfDataGetUserName(IndexParam1, text1, sizeof (text1) / sizeof (*text1));
PerfDataGetUserName(IndexParam2, text2, sizeof (text2) / sizeof (*text2));
PerfDataGetUserName(IndexParam1, text1, _countof(text1));
PerfDataGetUserName(IndexParam2, text2, _countof(text2));
ret = _wcsicmp(text1, text2);
}
else if (TaskManagerSettings.SortColumn == COLUMN_COMMANDLINE)
{
PerfDataGetCommandLine(IndexParam1, text1, sizeof (text1) / sizeof (*text1));
PerfDataGetCommandLine(IndexParam2, text2, sizeof (text2) / sizeof (*text2));
PerfDataGetCommandLine(IndexParam1, text1, _countof(text1));
PerfDataGetCommandLine(IndexParam2, text2, _countof(text2));
ret = _wcsicmp(text1, text2);
}
else if (TaskManagerSettings.SortColumn == COLUMN_SESSIONID)

View File

@@ -32,8 +32,6 @@
#define IDR_PROCESS_PAGE_CONTEXT 144
#define IDB_TRAYMASK 150
#define IDB_TRAYICON 153
#define IDD_DEBUG_CHANNELS_DIALOG 155
#define IDC_DEBUG_CHANNELS_LIST 156
#define IDC_ENDTASK 1012
#define IDC_SWITCHTO 1013

View File

@@ -1,7 +1,7 @@
/*
* PROJECT: ReactOS Task Manager
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* PURPOSE: Run Task.
* PURPOSE: Run Task
* COPYRIGHT: Copyright 1999-2001 Brian Palmer <brianp@reactos.org>
* Copyright 2005 Klemens Friedl <frik85@reactos.at>
*/
@@ -16,8 +16,8 @@ void TaskManager_OnFileNew(void)
WCHAR szText[256];
/* Load language strings from resource file */
LoadStringW(hInst, IDS_CREATENEWTASK, szTitle, sizeof(szTitle) / sizeof(szTitle[0]));
LoadStringW(hInst, IDS_CREATENEWTASK_DESC, szText, sizeof(szText) / sizeof(szText[0]));
LoadStringW(hInst, IDS_CREATENEWTASK, szTitle, _countof(szTitle));
LoadStringW(hInst, IDS_CREATENEWTASK_DESC, szText, _countof(szText));
hShell32 = LoadLibraryW(L"SHELL32.DLL");
RunFileDlg = (RUNFILEDLG)(FARPROC)GetProcAddress(hShell32, (LPCSTR)61);

View File

@@ -1,7 +1,7 @@
/*
* PROJECT: ReactOS Task Manager
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* PURPOSE: Application Entry-point.
* PURPOSE: Application Entry-point
* COPYRIGHT: Copyright 1999-2001 Brian Palmer <brianp@reactos.org>
* Copyright 2005 Klemens Friedl <frik85@reactos.at>
*/
@@ -110,7 +110,7 @@ int APIENTRY wWinMain(HINSTANCE hInstance,
HWND hTaskMgr;
TCHAR szTaskmgr[128];
LoadString(hInst, IDS_APP_TITLE, szTaskmgr, sizeof(szTaskmgr)/sizeof(TCHAR));
LoadString(hInst, IDS_APP_TITLE, szTaskmgr, _countof(szTaskmgr));
hTaskMgr = FindWindow(NULL, szTaskmgr);
if (hTaskMgr != NULL)
@@ -139,10 +139,10 @@ int APIENTRY wWinMain(HINSTANCE hInstance,
* so that we can debug processes
*/
/* Get a token for this process. */
/* Get a token for this process. */
if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
{
/* Get the LUID for the debug privilege. */
/* Get the LUID for the debug privilege. */
if (LookupPrivilegeValueW(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid))
{
tkp.PrivilegeCount = 1; /* one privilege to set */
@@ -159,9 +159,7 @@ int APIENTRY wWinMain(HINSTANCE hInstance,
/* Initialize perf data */
if (!PerfDataInitialize())
{
return -1;
}
/*
* Set our shutdown parameters: we want to shutdown the very last,
@@ -371,21 +369,14 @@ TaskManagerWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
hPopupMenu = GetSubMenu(hMenu, 0);
if(IsWindowVisible(hMainWnd))
{
DeleteMenu(hPopupMenu, ID_RESTORE, MF_BYCOMMAND);
}
DeleteMenu(hPopupMenu, ID_RESTORE, MF_BYCOMMAND);
else
{
SetMenuDefaultItem(hPopupMenu, ID_RESTORE, FALSE);
}
SetMenuDefaultItem(hPopupMenu, ID_RESTORE, FALSE);
if(OnTop)
{
CheckMenuItem(hPopupMenu, ID_OPTIONS_ALWAYSONTOP, MF_BYCOMMAND | MF_CHECKED);
} else
{
CheckMenuItem(hPopupMenu, ID_OPTIONS_ALWAYSONTOP, MF_BYCOMMAND | MF_UNCHECKED);
}
CheckMenuItem(hPopupMenu, ID_OPTIONS_ALWAYSONTOP, MF_BYCOMMAND | MF_CHECKED);
else
CheckMenuItem(hPopupMenu, ID_OPTIONS_ALWAYSONTOP, MF_BYCOMMAND | MF_UNCHECKED);
SetForegroundWindow(hMainWnd);
TrackPopupMenuEx(hPopupMenu, 0, pt.x, pt.y, hMainWnd, NULL);
@@ -680,19 +671,19 @@ BOOL OnCreate(HWND hWnd)
lpUserName = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len * sizeof(WCHAR));
if (lpUserName && GetUserNameW(lpUserName, &len))
{
_snwprintf(szLogOffItem, sizeof(szLogOffItem)/sizeof(szLogOffItem[0]), szTemp, lpUserName);
szLogOffItem[sizeof(szLogOffItem)/sizeof(szLogOffItem[0]) - 1] = UNICODE_NULL;
_snwprintf(szLogOffItem, _countof(szLogOffItem), szTemp, lpUserName);
szLogOffItem[_countof(szLogOffItem) - 1] = UNICODE_NULL;
}
else
{
_snwprintf(szLogOffItem, sizeof(szLogOffItem)/sizeof(szLogOffItem[0]), szTemp, L"n/a");
_snwprintf(szLogOffItem, _countof(szLogOffItem), szTemp, L"n/a");
}
if (lpUserName) HeapFree(GetProcessHeap(), 0, lpUserName);
}
else
{
_snwprintf(szLogOffItem, sizeof(szLogOffItem)/sizeof(szLogOffItem[0]), szTemp, L"n/a");
_snwprintf(szLogOffItem, _countof(szLogOffItem), szTemp, L"n/a");
}
/* 3- Set the menu item text to its formatted counterpart */
@@ -868,11 +859,8 @@ void SaveSettings(void)
void TaskManager_OnRestoreMainWindow(void)
{
//HMENU hMenu, hOptionsMenu;
BOOL OnTop;
//hMenu = GetMenu(hMainWnd);
//hOptionsMenu = GetSubMenu(hMenu, OPTIONS_MENU_INDEX);
OnTop = ((GetWindowLongPtrW(hMainWnd, GWL_EXSTYLE) & WS_EX_TOPMOST) != 0);
OpenIcon(hMainWnd);

View File

@@ -21,6 +21,8 @@
#include "precomp.h"
#define BALLOON_MAXWIDTH 340
struct InternalIconData : NOTIFYICONDATA
{
// Must keep a separate copy since the original is unioned with uTimeout.
@@ -617,19 +619,19 @@ void CBalloonQueue::Show(Info& info)
// TODO: NIF_REALTIME, NIIF_NOSOUND, other Vista+ flags
const int index = IndexOf(info.pSource);
m_current = info.pSource;
RECT rc;
m_toolbar->GetItemRect(index, &rc);
m_toolbar->GetItemRect(IndexOf(m_current), &rc);
m_toolbar->ClientToScreen(&rc);
const WORD x = (rc.left + rc.right) / 2;
const WORD y = (rc.top + rc.bottom) / 2;
m_tooltips->SetTitle(info.szInfoTitle, info.uIcon);
m_tooltips->TrackPosition(x, y);
m_tooltips->SetMaxTipWidth(BALLOON_MAXWIDTH);
m_tooltips->UpdateTipText(m_hwndParent, reinterpret_cast<LPARAM>(m_toolbar->m_hWnd), info.szInfo);
m_tooltips->TrackActivate(m_hwndParent, reinterpret_cast<LPARAM>(m_toolbar->m_hWnd));
m_current = info.pSource;
int timeout = info.uTimeout;
if (timeout < MinTimeout) timeout = MinTimeout;
if (timeout > MaxTimeout) timeout = MaxTimeout;

View File

@@ -1901,6 +1901,7 @@ HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced","Hidden",0x00
HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced","ShowSuperHidden",0x00010003,0
HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CabinetState",,0x00000012
HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CabinetState","FullPath",0x00010003,0
HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CabinetState","FullPathAddress",0x00010003,1
HKCU,"SOFTWARE\Microsoft\Internet Explorer\Main","StatusBarOther",0x00010003,1
HKCU,"SOFTWARE\Microsoft\Internet Explorer\Toolbar","Locked",0x00010003,1

View File

@@ -224,9 +224,4 @@ RtlDoesFileExists_UStr(
IN PUNICODE_STRING FileName
);
VOID
NTAPI
RtlpInitializeKeyedEvent(
VOID);
/* EOF */

View File

@@ -2401,9 +2401,6 @@ LdrpInitializeProcess(IN PCONTEXT Context,
/* Check whether all static imports were properly loaded and return here */
if (!NT_SUCCESS(ImportStatus)) return ImportStatus;
/* Initialize the keyed event for condition variables */
RtlpInitializeKeyedEvent();
/* Initialize TLS */
Status = LdrpInitializeTls();
if (!NT_SUCCESS(Status))

View File

@@ -130,18 +130,12 @@ HRESULT CAddressEditBox::RefreshAddress()
/* Set the path if filesystem; otherwise use the name */
WCHAR szPathOrName[MAX_PATH];
if (!SHGetPathFromIDListW(absolutePIDL, szPathOrName))
{
STRRET ret;
hr = pShellFolder->GetDisplayNameOf(pidlChild, SHGDN_FORADDRESSBAR | SHGDN_FORPARSING, &ret);
if (FAILED_UNEXPECTEDLY(hr))
return hr;
SHGDNF flags = SHGDN_FORADDRESSBAR;
if (gCabinetState.fFullPathAddress)
flags |= SHGDN_FORPARSING;
hr = StrRetToBufW(&ret, pidlChild, szPathOrName, _countof(szPathOrName));
if (FAILED_UNEXPECTEDLY(hr))
return hr;
}
item.pszText = szPathOrName;
if (SUCCEEDED(IEGetNameAndFlags(absolutePIDL, flags, szPathOrName, _countof(szPathOrName), NULL)))
item.pszText = szPathOrName;
/* Ownership of absolutePIDL will be moved to fCombobox. See CBEN_DELETEITEM */
item.lParam = reinterpret_cast<LPARAM>(absolutePIDL.Detach());
@@ -644,3 +638,9 @@ LPITEMIDLIST CAddressEditBox::GetItemData(int index)
SendMessageW(hComboBoxEx, CBEM_GETITEMW, 0, (LPARAM)&item);
return (LPITEMIDLIST)item.lParam;
}
LRESULT CAddressEditBox::OnSettingChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
{
RefreshAddress();
return NO_ERROR;
}

View File

@@ -91,6 +91,7 @@ public:
virtual HRESULT STDMETHODCALLTYPE GetSizeMax(ULARGE_INTEGER *pcbSize);
// message handlers
LRESULT OnSettingChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
DECLARE_REGISTRY_RESOURCEID(IDR_ADDRESSEDITBOX)
DECLARE_NOT_AGGREGATABLE(CAddressEditBox)
@@ -98,6 +99,7 @@ public:
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_MSG_MAP(CAddressEditBox)
MESSAGE_HANDLER(WM_SETTINGCHANGE, OnSettingChange)
END_MSG_MAP()
BEGIN_COM_MAP(CAddressEditBox)

View File

@@ -24,3 +24,4 @@ HRESULT CTravelLog_CreateInstance(REFIID riid, void **ppv);
HRESULT CBaseBar_CreateInstance(REFIID riid, void **ppv, BOOL vertical);
HRESULT CBaseBarSite_CreateInstance(REFIID riid, void **ppv, BOOL bVertical);
HRESULT CToolsBand_CreateInstance(REFIID riid, void **ppv);
HRESULT IEGetNameAndFlags(LPITEMIDLIST pidl, SHGDNF uFlags, LPWSTR pszBuf, UINT cchBuf, SFGAOF *rgfInOut);

View File

@@ -36,10 +36,7 @@
#include <wine/debug.h>
#include "resource.h"
#define BWM_SETTINGCHANGE (WM_USER + 300)
#define BWM_GETSETTINGSPTR (WM_USER + 301)
struct ShellSettings;
#include "settings.h"
#include "ACLCustomMRU.h"
#include "aclhistory.h"
@@ -69,14 +66,4 @@ struct ShellSettings;
WINE_DEFAULT_DEBUG_CHANNEL(browseui);
struct ShellSettings
{
BOOL fLocked = FALSE;
BOOL fShowGoButton = FALSE;
BOOL fStatusBarVisible = FALSE;
BOOL Save();
BOOL Load();
};
#endif /* _BROWSEUI_PCH_ */

View File

@@ -7,7 +7,9 @@
#include "precomp.h"
BOOL ShellSettings::Save()
CabinetStateSettings gCabinetState;
void ShellSettings::Save()
{
SHRegSetUSValueW(L"Software\\Microsoft\\Internet Explorer\\Main", L"StatusBarOther",
REG_DWORD, &fStatusBarVisible, sizeof(fStatusBarVisible), SHREGSET_FORCE_HKCU);
@@ -17,11 +19,9 @@ BOOL ShellSettings::Save()
SHRegSetUSValueW(L"Software\\Microsoft\\Internet Explorer\\Toolbar", L"Locked",
REG_DWORD, &fLocked, sizeof(fLocked), SHREGSET_FORCE_HKCU);
return TRUE;
}
BOOL ShellSettings::Load()
void ShellSettings::Load()
{
fStatusBarVisible = SHRegGetBoolUSValueW(L"Software\\Microsoft\\Internet Explorer\\Main",
L"StatusBarOther", FALSE, FALSE);
@@ -31,6 +31,16 @@ BOOL ShellSettings::Load()
fLocked = SHRegGetBoolUSValueW(L"Software\\Microsoft\\Internet Explorer\\Toolbar",
L"Locked", FALSE, TRUE);
return TRUE;
}
void CabinetStateSettings::Load()
{
ReadCabinetState(this, this->cLength);
/* Overrides */
fFullPathTitle = SHRegGetBoolUSValueW(L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\CabinetState",
L"FullPath", FALSE, FALSE);
fFullPathAddress = SHRegGetBoolUSValueW(L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\CabinetState",
L"FullPathAddress", FALSE, TRUE);
}

View File

@@ -0,0 +1,30 @@
/*
* PROJECT: ReactOS browseui
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* PURPOSE: Settings header file
* COPYRIGHT: Copyright 2023 Carl Bialorucki <cbialo2@outlook.com>
*/
#include "precomp.h"
#define BWM_SETTINGCHANGE (WM_USER + 300)
#define BWM_GETSETTINGSPTR (WM_USER + 301)
struct ShellSettings
{
BOOL fLocked = FALSE;
BOOL fShowGoButton = FALSE;
BOOL fStatusBarVisible = FALSE;
void Save();
void Load();
};
struct CabinetStateSettings : CABINETSTATE
{
BOOL fFullPathAddress = TRUE;
void Load();
};
extern CabinetStateSettings gCabinetState;

View File

@@ -296,7 +296,6 @@ private:
barInfo fClientBars[3];
CComPtr<ITravelLog> fTravelLog;
HMENU fCurrentMenuBar;
CABINETSTATE fCabinetState;
GUID fCurrentVertBar; //The guid of the built in vertical bar that is being shown
// The next three fields support persisted history for shell views.
// They do not need to be reference counted.
@@ -350,7 +349,8 @@ public:
HRESULT UpdateUpState();
void UpdateGotoMenu(HMENU theMenu);
void UpdateViewMenu(HMENU theMenu);
void LoadCabinetState();
void RefreshCabinetState();
void UpdateWindowTitle();
/* // *** IDockingWindowFrame methods ***
virtual HRESULT STDMETHODCALLTYPE AddToolbar(IUnknown *punkSrc, LPCWSTR pwszItem, DWORD dwAddFlags);
@@ -721,6 +721,7 @@ CShellBrowser::CShellBrowser()
fHistoryStream = NULL;
fHistoryBindContext = NULL;
m_settings.Load();
gCabinetState.Load();
}
CShellBrowser::~CShellBrowser()
@@ -741,11 +742,6 @@ HRESULT CShellBrowser::Initialize()
if (!menuDsa)
return E_OUTOFMEMORY;
fCabinetState.cLength = sizeof(fCabinetState);
if (ReadCabinetState(&fCabinetState, sizeof(fCabinetState)) == FALSE)
{
}
// create window
Create(HWND_DESKTOP);
if (m_hWnd == NULL)
@@ -790,8 +786,6 @@ HRESULT CShellBrowser::Initialize()
fToolbarProxy.Initialize(m_hWnd, clientBar);
LoadCabinetState();
// create status bar
DWORD dwStatusStyle = WS_CHILD | WS_CLIPSIBLINGS | SBARS_SIZEGRIP | SBARS_TOOLTIPS;
if (m_settings.fStatusBarVisible)
@@ -923,7 +917,7 @@ cleanup:
return hResult;
}
long IEGetNameAndFlags(LPITEMIDLIST pidl, SHGDNF uFlags, LPWSTR pszBuf, UINT cchBuf, SFGAOF *rgfInOut)
HRESULT IEGetNameAndFlags(LPITEMIDLIST pidl, SHGDNF uFlags, LPWSTR pszBuf, UINT cchBuf, SFGAOF *rgfInOut)
{
return IEGetNameAndFlagsEx(pidl, uFlags, 0, pszBuf, cchBuf, rgfInOut);
}
@@ -1051,42 +1045,33 @@ HRESULT CShellBrowser::BrowseToPath(IShellFolder *newShellFolder,
FireNavigateComplete(L"ERROR");
}
if (fCabinetState.fFullPathTitle)
nameFlags = SHGDN_FORADDRESSBAR | SHGDN_FORPARSING;
else
nameFlags = SHGDN_FORADDRESSBAR;
hResult = IEGetNameAndFlags(fCurrentDirectoryPIDL, nameFlags, newTitle,
sizeof(newTitle) / sizeof(wchar_t), NULL);
UpdateWindowTitle();
LPCITEMIDLIST pidlChild;
INT index, indexOpen;
HIMAGELIST himlSmall, himlLarge;
CComPtr<IShellFolder> sf;
hResult = SHBindToParent(absolutePIDL, IID_PPV_ARG(IShellFolder, &sf), &pidlChild);
if (SUCCEEDED(hResult))
{
SetWindowText(newTitle);
index = SHMapPIDLToSystemImageListIndex(sf, pidlChild, &indexOpen);
LPCITEMIDLIST pidlChild;
INT index, indexOpen;
HIMAGELIST himlSmall, himlLarge;
Shell_GetImageLists(&himlLarge, &himlSmall);
CComPtr<IShellFolder> sf;
hResult = SHBindToParent(absolutePIDL, IID_PPV_ARG(IShellFolder, &sf), &pidlChild);
if (SUCCEEDED(hResult))
{
index = SHMapPIDLToSystemImageListIndex(sf, pidlChild, &indexOpen);
HICON icSmall = ImageList_GetIcon(himlSmall, indexOpen, 0);
HICON icLarge = ImageList_GetIcon(himlLarge, indexOpen, 0);
Shell_GetImageLists(&himlLarge, &himlSmall);
/* Hack to make it possible to release the old icons */
/* Something seems to go wrong with WM_SETICON */
HICON oldSmall = (HICON)SendMessage(WM_GETICON, ICON_SMALL, 0);
HICON oldLarge = (HICON)SendMessage(WM_GETICON, ICON_BIG, 0);
HICON icSmall = ImageList_GetIcon(himlSmall, indexOpen, 0);
HICON icLarge = ImageList_GetIcon(himlLarge, indexOpen, 0);
SendMessage(WM_SETICON, ICON_SMALL, reinterpret_cast<LPARAM>(icSmall));
SendMessage(WM_SETICON, ICON_BIG, reinterpret_cast<LPARAM>(icLarge));
/* Hack to make it possible to release the old icons */
/* Something seems to go wrong with WM_SETICON */
HICON oldSmall = (HICON)SendMessage(WM_GETICON, ICON_SMALL, 0);
HICON oldLarge = (HICON)SendMessage(WM_GETICON, ICON_BIG, 0);
SendMessage(WM_SETICON, ICON_SMALL, reinterpret_cast<LPARAM>(icSmall));
SendMessage(WM_SETICON, ICON_BIG, reinterpret_cast<LPARAM>(icLarge));
DestroyIcon(oldSmall);
DestroyIcon(oldLarge);
}
DestroyIcon(oldSmall);
DestroyIcon(oldLarge);
}
FireCommandStateChangeAll();
@@ -1524,14 +1509,6 @@ void CShellBrowser::RepositionBars()
clientRect.bottom - clientRect.top, SWP_NOOWNERZORDER | SWP_NOZORDER);
}
void CShellBrowser::LoadCabinetState()
{
fCabinetState.fFullPathTitle = SHRegGetBoolUSValueW(L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\CabinetState",
L"FullPath",
FALSE,
FALSE);
}
HRESULT CShellBrowser::FireEvent(DISPID dispIdMember, int argCount, VARIANT *arguments)
{
DISPPARAMS params;
@@ -3600,6 +3577,7 @@ LRESULT CShellBrowser::RelayMsgToShellView(UINT uMsg, WPARAM wParam, LPARAM lPar
LRESULT CShellBrowser::OnSettingChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
{
RefreshCabinetState();
SHPropagateMessage(m_hWnd, uMsg, wParam, lParam, TRUE);
return 0;
}
@@ -3860,3 +3838,21 @@ HRESULT CShellBrowser_CreateInstance(REFIID riid, void **ppv)
{
return ShellObjectCreatorInit<CShellBrowser>(riid, ppv);
}
void CShellBrowser::RefreshCabinetState()
{
gCabinetState.Load();
UpdateWindowTitle();
}
void CShellBrowser::UpdateWindowTitle()
{
WCHAR title[MAX_PATH];
SHGDNF flags = SHGDN_FORADDRESSBAR;
if (gCabinetState.fFullPathTitle)
flags |= SHGDN_FORPARSING;
if (SUCCEEDED(IEGetNameAndFlags(fCurrentDirectoryPIDL, flags, title, _countof(title), NULL)))
SetWindowText(title);
}

View File

@@ -162,10 +162,17 @@ typedef struct
#define BALLOON_TEXT_MARGIN (NORMAL_TEXT_MARGIN+8)
/* value used for CreateRoundRectRgn that specifies how much
* each corner is curved */
#ifdef __REACTOS__
#define BALLOON_ROUNDEDNESS 16
#define BALLOON_STEMHEIGHT 18
#define BALLOON_STEMWIDTH 18
#define BALLOON_STEMINDENT 16
#else
#define BALLOON_ROUNDEDNESS 20
#define BALLOON_STEMHEIGHT 13
#define BALLOON_STEMWIDTH 10
#define BALLOON_STEMINDENT 20
#endif // __REACTOS__
#define BALLOON_ICON_TITLE_SPACING 8 /* horizontal spacing between icon and title */
#define BALLOON_TITLE_TEXT_SPACING 8 /* vertical spacing between icon/title and main text */
@@ -741,6 +748,40 @@ TOOLTIPS_Show (TOOLTIPS_INFO *infoPtr, BOOL track_activate)
mon_info.cbSize = sizeof(mon_info);
GetMonitorInfoW( monitor, &mon_info );
#ifdef __REACTOS__
if (rect.right > mon_info.rcMonitor.right)
{
rect.left -= size.cx - (BALLOON_STEMINDENT + BALLOON_STEMWIDTH);
rect.right -= size.cx - (BALLOON_STEMINDENT + BALLOON_STEMWIDTH);
if (rect.right > mon_info.rcMonitor.right)
{
rect.left -= (rect.right - mon_info.rcMonitor.right);
rect.right = mon_info.rcMonitor.right;
}
}
if (rect.left < mon_info.rcMonitor.left)
{
rect.right += abs(rect.left);
rect.left = 0;
}
if (rect.bottom > mon_info.rcMonitor.bottom)
{
RECT rc;
if (toolPtr->uFlags & TTF_IDISHWND)
{
GetWindowRect((HWND)toolPtr->uId, &rc);
}
else
{
rc = toolPtr->rect;
MapWindowPoints(toolPtr->hwnd, NULL, (LPPOINT)&rc, 2);
}
rect.bottom = rc.top - 2;
rect.top = rect.bottom - size.cy;
}
#else
if( rect.right > mon_info.rcWork.right ) {
rect.left -= rect.right - mon_info.rcWork.right + 2;
rect.right = mon_info.rcWork.right - 2;
@@ -759,6 +800,7 @@ TOOLTIPS_Show (TOOLTIPS_INFO *infoPtr, BOOL track_activate)
rect.bottom = rc.top - 2;
rect.top = rect.bottom - size.cy;
}
#endif // __REACTOS__
AdjustWindowRectEx (&rect, GetWindowLongW (infoPtr->hwndSelf, GWL_STYLE),
FALSE, GetWindowLongW (infoPtr->hwndSelf, GWL_EXSTYLE));
@@ -775,7 +817,11 @@ TOOLTIPS_Show (TOOLTIPS_INFO *infoPtr, BOOL track_activate)
{
pts[0].x = ptfx;
pts[0].y = 0;
#ifdef __REACTOS__
pts[1].x = max(BALLOON_STEMINDENT, ptfx - BALLOON_STEMWIDTH);
#else
pts[1].x = max(BALLOON_STEMINDENT, ptfx - (BALLOON_STEMWIDTH / 2));
#endif
pts[1].y = BALLOON_STEMHEIGHT;
pts[2].x = pts[1].x + BALLOON_STEMWIDTH;
pts[2].y = pts[1].y;
@@ -787,7 +833,11 @@ TOOLTIPS_Show (TOOLTIPS_INFO *infoPtr, BOOL track_activate)
}
else
{
#ifdef __REACTOS__
pts[0].x = max(BALLOON_STEMINDENT, ptfx - BALLOON_STEMWIDTH);
#else
pts[0].x = max(BALLOON_STEMINDENT, ptfx - (BALLOON_STEMWIDTH / 2));
#endif
pts[0].y = (rect.bottom - rect.top) - BALLOON_STEMHEIGHT;
pts[1].x = pts[0].x + BALLOON_STEMWIDTH;
pts[1].y = pts[0].y;
@@ -805,7 +855,11 @@ TOOLTIPS_Show (TOOLTIPS_INFO *infoPtr, BOOL track_activate)
hRgn = CreateRoundRectRgn(0,
(infoPtr->bToolBelow ? BALLOON_STEMHEIGHT : 0),
rect.right - rect.left,
#ifdef __REACTOS__
(infoPtr->bToolBelow ? rect.bottom - rect.top : rect.bottom - rect.top - BALLOON_STEMHEIGHT + 1),
#else
(infoPtr->bToolBelow ? rect.bottom - rect.top : rect.bottom - rect.top - BALLOON_STEMHEIGHT),
#endif
BALLOON_ROUNDEDNESS, BALLOON_ROUNDEDNESS);
CombineRgn(hRgn, hRgn, hrStem, RGN_OR);

View File

@@ -711,7 +711,7 @@
@ stdcall -version=0x600+ InitOnceBeginInitialize(ptr long ptr ptr)
@ stdcall -version=0x600+ InitOnceComplete(ptr long ptr)
@ stdcall -version=0x600+ InitOnceExecuteOnce(ptr ptr ptr ptr)
@ stdcall -version=0x600+ InitOnceInitialize(ptr) ntdll.RtlRunOnceInitialize
@ stdcall -version=0x600+ InitOnceInitialize(ptr) NTDLL.RtlRunOnceInitialize
@ stdcall -version=0x600+ InitializeConditionVariable(ptr) ntdll.RtlInitializeConditionVariable
@ stdcall InitializeCriticalSection(ptr)
@ stdcall InitializeCriticalSectionAndSpinCount(ptr long)

View File

@@ -30,7 +30,6 @@ extern char** _environ; /* pointer to environment block */
extern char** __initenv; /* pointer to initial environment block */
extern wchar_t** _wenviron; /* pointer to environment block */
extern wchar_t** __winitenv; /* pointer to initial environment block */
extern void msvcrt_init_exception(void*) DECLSPEC_HIDDEN;
/* LIBRARY ENTRY POINT ********************************************************/
@@ -44,8 +43,6 @@ DllMain(PVOID hinstDll, ULONG dwReason, PVOID reserved)
TRACE("Process Attach\n");
msvcrt_init_exception(hinstDll);
if (!crt_process_init())
{
ERR("crt_init() failed!\n");

View File

@@ -549,7 +549,7 @@
@ stub -version=0x600+ _fwscanf_l
@ stub -version=0x600+ _fwscanf_s_l
@ cdecl _gcvt(double long str)
@ cdecl -version=0x600+ _gcvt_s(ptr ptr double long)
@ stub -version=0x600+ _gcvt_s
@ cdecl -version=0x600+ _get_doserrno(ptr)
@ stub -version=0x600+ _get_environ
@ cdecl -version=0x600+ _get_errno(ptr)

View File

@@ -241,8 +241,9 @@ HRESULT SHELL32_CompareDetails(IShellFolder2* isf, LPARAM lParam, LPCITEMIDLIST
SHELLDETAILS sd;
WCHAR wszItem1[MAX_PATH], wszItem2[MAX_PATH];
HRESULT hres;
UINT col = LOWORD(lParam); // Column index without SHCIDS_* flags
hres = isf->GetDetailsOf(pidl1, lParam, &sd);
hres = isf->GetDetailsOf(pidl1, col, &sd);
if (FAILED(hres))
return MAKE_COMPARE_HRESULT(1);
@@ -250,7 +251,7 @@ HRESULT SHELL32_CompareDetails(IShellFolder2* isf, LPARAM lParam, LPCITEMIDLIST
if (FAILED(hres))
return MAKE_COMPARE_HRESULT(1);
hres = isf->GetDetailsOf(pidl2, lParam, &sd);
hres = isf->GetDetailsOf(pidl2, col, &sd);
if (FAILED(hres))
return MAKE_COMPARE_HRESULT(1);

View File

@@ -1797,23 +1797,18 @@ static void test_NtQueryKey(void)
ok( status == STATUS_SUCCESS, "NtSetValueKey failed: 0x%08x\n", status );
pRtlFreeUnicodeString(&str);
if (!winetest_interactive)
skip("ROSTESTS-198: Causes an assert in Cm.\n");
else
{
status = pNtQueryKey(subkey, KeyCachedInformation, &cached_info, sizeof(cached_info), &len);
ok(status == STATUS_SUCCESS, "NtQueryKey Failed: 0x%08x\n", status);
status = pNtQueryKey(subkey, KeyCachedInformation, &cached_info, sizeof(cached_info), &len);
ok(status == STATUS_SUCCESS, "NtQueryKey Failed: 0x%08x\n", status);
if (status == STATUS_SUCCESS)
{
ok(len == sizeof(cached_info), "got unexpected length %d\n", len);
ok(cached_info.SubKeys == 1, "cached_info.SubKeys = %u\n", cached_info.SubKeys);
ok(cached_info.MaxNameLen == 24, "cached_info.MaxNameLen = %u\n", cached_info.MaxNameLen);
ok(cached_info.Values == 1, "cached_info.Values = %u\n", cached_info.Values);
ok(cached_info.MaxValueNameLen == 6, "cached_info.MaxValueNameLen = %u\n", cached_info.MaxValueNameLen);
ok(cached_info.MaxValueDataLen == 4, "cached_info.MaxValueDataLen = %u\n", cached_info.MaxValueDataLen);
ok(cached_info.NameLength == 22, "cached_info.NameLength = %u\n", cached_info.NameLength);
}
if (status == STATUS_SUCCESS)
{
ok(len == sizeof(cached_info), "got unexpected length %d\n", len);
ok(cached_info.SubKeys == 1, "cached_info.SubKeys = %u\n", cached_info.SubKeys);
ok(cached_info.MaxNameLen == 24, "cached_info.MaxNameLen = %u\n", cached_info.MaxNameLen);
ok(cached_info.Values == 1, "cached_info.Values = %u\n", cached_info.Values);
ok(cached_info.MaxValueNameLen == 6, "cached_info.MaxValueNameLen = %u\n", cached_info.MaxValueNameLen);
ok(cached_info.MaxValueDataLen == 4, "cached_info.MaxValueDataLen = %u\n", cached_info.MaxValueDataLen);
ok(cached_info.NameLength == 22, "cached_info.NameLength = %u\n", cached_info.NameLength);
}
status = pNtDeleteKey(subkey2);

View File

@@ -164,7 +164,7 @@ CmpGetNameControlBlock(IN PUNICODE_STRING NodeName)
if (*p != OBJ_NAME_PATH_SEPARATOR)
{
/* Add it to the hash */
ConvKey = 37 * ConvKey + RtlUpcaseUnicodeChar(*p);
ConvKey = COMPUTE_HASH_CHAR(ConvKey, *p);
}
/* Next character */
@@ -701,7 +701,7 @@ CmpCreateKeyControlBlock(IN PHHIVE Hive,
if (*p != OBJ_NAME_PATH_SEPARATOR)
{
/* Add this key to the hash */
ConvKey = 37 * ConvKey + RtlUpcaseUnicodeChar(*p);
ConvKey = COMPUTE_HASH_CHAR(ConvKey, *p);
}
/* Move on */
@@ -1134,6 +1134,235 @@ DelistKeyBodyFromKCB(IN PCM_KEY_BODY KeyBody,
if (!LockHeld) CmpReleaseKcbLock(KeyBody->KeyControlBlock);
}
/**
* @brief
* Unlocks a number of KCBs provided by a KCB array.
*
* @param[in] KcbArray
* A pointer to an array of KCBs to be unlocked.
*/
VOID
CmpUnLockKcbArray(
_In_ PULONG KcbArray)
{
ULONG i;
/* Release the locked KCBs in reverse order */
for (i = KcbArray[0]; i > 0; i--)
{
CmpReleaseKcbLockByIndex(KcbArray[i]);
}
}
/**
* @brief
* Locks a given number of KCBs.
*
* @param[in] KcbArray
* A pointer to an array of KCBs to be locked.
* The count of KCBs to be locked is defined by the
* first element in the array.
*
* @param[in] KcbLockFlags
* Define a lock flag to lock the KCBs.
*
* CMP_LOCK_KCB_ARRAY_EXCLUSIVE -- indicates the KCBs are locked
* exclusively and owned by the calling thread.
*
* CMP_LOCK_KCB_ARRAY_SHARED -- indicates the KCBs are locked
* in shared mode by the owning threads.
*/
static
VOID
CmpLockKcbArray(
_In_ PULONG KcbArray,
_In_ ULONG KcbLockFlags)
{
ULONG i;
/* Lock the KCBs */
for (i = 1; i <= KcbArray[0]; i++)
{
if (KcbLockFlags & CMP_LOCK_KCB_ARRAY_EXCLUSIVE)
{
CmpAcquireKcbLockExclusiveByIndex(KcbArray[i]);
}
else // CMP_LOCK_KCB_ARRAY_SHARED
{
CmpAcquireKcbLockSharedByIndex(KcbArray[i]);
}
}
}
/**
* @brief
* Sorts an array of KCB hashes in ascending order
* and removes any key indices that are duplicates.
* The purpose of sorting the KCB elements is to
* ensure consistent and proper locking order, so
* that we can prevent a deadlock.
*
* @param[in,out] KcbArray
* A pointer to an array of KCBs of which the key
* indices are to be sorted.
*/
static
VOID
CmpSortKcbArray(
_Inout_ PULONG KcbArray)
{
ULONG i, j, k, KcbCount;
/* Ensure we don't go above the limit of KCBs we can hold */
KcbCount = KcbArray[0];
ASSERT(KcbCount < CMP_KCBS_IN_ARRAY_LIMIT);
/* Exchange-Sort the array in ascending order. Complexity: O[n^2] */
for (i = 1; i <= KcbCount; i++)
{
for (j = i + 1; j <= KcbCount; j++)
{
if (KcbArray[i] > KcbArray[j])
{
ULONG Temp = KcbArray[i];
KcbArray[i] = KcbArray[j];
KcbArray[j] = Temp;
}
}
}
/* Now remove any duplicated indices on the sorted array if any */
for (i = 1; i <= KcbCount; i++)
{
for (j = i + 1; j <= KcbCount; j++)
{
if (KcbArray[i] == KcbArray[j])
{
for (k = j; k <= KcbCount; k++)
{
KcbArray[k - 1] = KcbArray[k];
}
j--;
KcbCount--;
}
}
}
/* Update the KCB count */
KcbArray[0] = KcbCount;
}
/**
* @brief
* Builds an array of KCBs and locks them. Whether these
* KCBs are locked exclusively or in shared mode by the calling
* thread, is specified by the KcbLockFlags parameter. The array
* is sorted.
*
* @param[in] HashCacheStack
* A pointer to a hash cache stack. This stack parameter
* stores the convkey hashes of interested KCBs of a
* key path name that need to be locked.
*
* @param[in] KcbLockFlags
* Define a lock flag to lock the KCBs. Consult the
* CmpLockKcbArray documentation for more information.
*
* @param[in] Kcb
* A pointer to a key control block to be given. This
* KCB is included in the array for locking, that is,
* given by the CmpParseKey from the parser object.
*
* @param[in,out] OuterStackArray
* A pointer to an array that lives on the caller's
* stack. It acts like an auxiliary array used by
* the function to store the KCB elements for locking.
* The expected size of the array is up to 32 elements,
* which is the imposed limit by CMP_HASH_STACK_LIMIT.
* This limit also corresponds to the maximum depth of
* subkey levels.
*
* @param[in] TotalRemainingSubkeys
* The number of total remaining subkey levels.
*
* @param[in] MatchRemainSubkeyLevel
* The number of remaining subkey levels that match.
*
* @return
* Returns a pointer to an array of KCBs that have been
* locked.
*
* @remarks
* The caller HAS THE RESPONSIBILITY to unlock the KCBs
* after the necessary operations are done!
*/
PULONG
NTAPI
CmpBuildAndLockKcbArray(
_In_ PCM_HASH_CACHE_STACK HashCacheStack,
_In_ ULONG KcbLockFlags,
_In_ PCM_KEY_CONTROL_BLOCK Kcb,
_Inout_ PULONG OuterStackArray,
_In_ ULONG TotalRemainingSubkeys,
_In_ ULONG MatchRemainSubkeyLevel)
{
ULONG KcbIndex = 1, HashStackIndex, TotalRemaining;
PULONG LockedKcbs = NULL;
PCM_KEY_CONTROL_BLOCK ParentKcb = Kcb->ParentKcb;;
/* These parameters are expected */
ASSERT(HashCacheStack != NULL);
ASSERT(Kcb != NULL);
ASSERT(OuterStackArray != NULL);
/*
* Ensure when we build an array of KCBs to lock, that
* we don't go beyond the boundary the limit allows us
* to. 1 is the current KCB we would want to lock
* alongside with the remaining key levels in the formula.
*/
TotalRemaining = (1 + TotalRemainingSubkeys) - MatchRemainSubkeyLevel;
ASSERT(TotalRemaining <= CMP_KCBS_IN_ARRAY_LIMIT);
/* Count the parent if we have one */
if (ParentKcb)
{
/* Ensure we are still below the limit and add the parent to KCBs to lock */
if (TotalRemainingSubkeys == MatchRemainSubkeyLevel)
{
TotalRemaining++;
ASSERT(TotalRemaining <= CMP_KCBS_IN_ARRAY_LIMIT);
OuterStackArray[KcbIndex++] = GET_HASH_INDEX(ParentKcb->ConvKey);
}
}
/* Add the current KCB */
OuterStackArray[KcbIndex++] = GET_HASH_INDEX(Kcb->ConvKey);
/* Loop over the hash stack and grab the hashes for locking (they will be converted to indices) */
for (HashStackIndex = 0;
HashStackIndex < TotalRemainingSubkeys;
HashStackIndex++)
{
OuterStackArray[KcbIndex++] = GET_HASH_INDEX(HashCacheStack[HashStackIndex].ConvKey);
}
/*
* Store how many KCBs we need to lock and sort the array.
* Remove any duplicated indices from the array if any.
*/
OuterStackArray[0] = KcbIndex - 1;
CmpSortKcbArray(OuterStackArray);
/* Lock them */
CmpLockKcbArray(OuterStackArray, KcbLockFlags);
/* Give the locked KCBs to caller now */
LockedKcbs = OuterStackArray;
return LockedKcbs;
}
VOID
NTAPI
CmpFlushNotifiesOnKeyBodyList(IN PCM_KEY_CONTROL_BLOCK Kcb,

File diff suppressed because it is too large Load Diff

View File

@@ -281,10 +281,15 @@ CmpSecurityMethod(IN PVOID ObjectBody,
/* Acquire the KCB lock */
if (OperationCode == QuerySecurityDescriptor)
{
CmpAcquireKcbLockShared(Kcb);
/* Avoid recursive locking if somebody already holds it */
if (!((PCM_KEY_BODY)ObjectBody)->KcbLocked)
{
CmpAcquireKcbLockShared(Kcb);
}
}
else
{
ASSERT(!((PCM_KEY_BODY)ObjectBody)->KcbLocked);
CmpAcquireKcbLockExclusive(Kcb);
}
@@ -334,8 +339,14 @@ CmpSecurityMethod(IN PVOID ObjectBody,
KeBugCheckEx(SECURITY_SYSTEM, 0, STATUS_INVALID_PARAMETER, 0, 0);
}
/* Release the KCB lock */
CmpReleaseKcbLock(Kcb);
/*
* Release the KCB lock, but only if we locked it ourselves and
* nobody else was locking it by themselves.
*/
if (!((PCM_KEY_BODY)ObjectBody)->KcbLocked)
{
CmpReleaseKcbLock(Kcb);
}
/* Release the hive lock */
CmpUnlockRegistry();

View File

@@ -138,7 +138,7 @@ CmpDeleteKeyObject(PVOID DeletedObject)
if (Kcb)
{
/* Delist the key */
DelistKeyBodyFromKCB(KeyBody, FALSE);
DelistKeyBodyFromKCB(KeyBody, KeyBody->KcbLocked);
/* Dereference the KCB */
CmpDelayDerefKeyControlBlock(Kcb);
@@ -1126,6 +1126,7 @@ CmpCreateRegistryRoot(VOID)
RootKey->Type = CM_KEY_BODY_TYPE;
RootKey->NotifyBlock = NULL;
RootKey->ProcessID = PsGetCurrentProcessId();
RootKey->KcbLocked = FALSE;
/* Link with KCB */
EnlistKeyBodyWithKCB(RootKey, 0);

View File

@@ -418,7 +418,7 @@ VOID Ki386InitializeLdt(VOID);
VOID Ki386SetProcessorFeatures(VOID);
VOID KiGetCacheInformation(VOID);
VOID KiSetProcessorType(VOID);
ULONG KiGetFeatureBits(VOID);
ULONG64 KiGetFeatureBits(VOID);
VOID KiInitializeCpuFeatures(VOID);
#if DBG
VOID KiReportCpuFeatures(IN PKPRCB Prcb);

View File

@@ -95,6 +95,12 @@
#define CMP_ENLIST_KCB_LOCKED_SHARED 0x1
#define CMP_ENLIST_KCB_LOCKED_EXCLUSIVE 0x2
//
// CmpBuildAndLockKcbArray & CmpLockKcbArray Flags
//
#define CMP_LOCK_KCB_ARRAY_EXCLUSIVE 0x1
#define CMP_LOCK_KCB_ARRAY_SHARED 0x2
//
// Unload Flags
//
@@ -119,6 +125,12 @@
#define CM_DELAYS_PER_PAGE \
((PAGE_SIZE - FIELD_OFFSET(CM_ALLOC_PAGE, AllocPage)) / sizeof(CM_DELAY_ALLOC))
//
// Cache Lookup & KCB Array constructs
//
#define CMP_SUBKEY_LEVELS_DEPTH_LIMIT 32
#define CMP_KCBS_IN_ARRAY_LIMIT (CMP_SUBKEY_LEVELS_DEPTH_LIMIT + 2)
//
// Value Search Results
//
@@ -223,6 +235,9 @@ typedef struct _CM_KEY_BODY
struct _CM_NOTIFY_BLOCK *NotifyBlock;
HANDLE ProcessID;
LIST_ENTRY KeyBodyList;
/* ReactOS specific -- boolean flag to avoid recursive locking of the KCB */
BOOLEAN KcbLocked;
} CM_KEY_BODY, *PCM_KEY_BODY;
//
@@ -402,6 +417,15 @@ typedef struct _HIVE_LIST_ENTRY
BOOLEAN Allocate;
} HIVE_LIST_ENTRY, *PHIVE_LIST_ENTRY;
//
// Hash Cache Stack
//
typedef struct _CM_HASH_CACHE_STACK
{
UNICODE_STRING NameOfKey;
ULONG ConvKey;
} CM_HASH_CACHE_STACK, *PCM_HASH_CACHE_STACK;
//
// Parse context for Key Object
//
@@ -486,6 +510,15 @@ CmpDestroyHiveViewList(
IN PCMHIVE Hive
);
//
// Security Management Functions
//
NTSTATUS
CmpAssignSecurityDescriptor(
IN PCM_KEY_CONTROL_BLOCK Kcb,
IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
//
// Security Cache Functions
//
@@ -993,6 +1026,22 @@ DelistKeyBodyFromKCB(
IN BOOLEAN LockHeld
);
VOID
CmpUnLockKcbArray(
_In_ PULONG LockedKcbs
);
PULONG
NTAPI
CmpBuildAndLockKcbArray(
_In_ PCM_HASH_CACHE_STACK HashCacheStack,
_In_ ULONG KcbLockFlags,
_In_ PCM_KEY_CONTROL_BLOCK Kcb,
_Inout_ PULONG OuterStackArray,
_In_ ULONG TotalRemainingSubkeys,
_In_ ULONG MatchRemainSubkeyLevel
);
VOID
NTAPI
CmpAcquireTwoKcbLocksExclusiveByKey(
@@ -1089,6 +1138,7 @@ CmpCreateLinkNode(
IN ULONG CreateOptions,
IN PCM_PARSE_CONTEXT Context,
IN PCM_KEY_CONTROL_BLOCK ParentKcb,
IN PULONG KcbsLocked,
OUT PVOID *Object
);

View File

@@ -12,11 +12,17 @@
#define GET_HASH_KEY(ConvKey) \
((CMP_HASH_IRRATIONAL * (ConvKey)) % CMP_HASH_PRIME)
//
// Computes the hashkey of a character
//
#define COMPUTE_HASH_CHAR(ConvKey, Char) \
(37 * ConvKey + RtlUpcaseUnicodeChar(Char))
//
// Returns the index into the hash table, or the entry itself
//
#define GET_HASH_INDEX(ConvKey) \
GET_HASH_KEY(ConvKey) % CmpHashTableSize
(GET_HASH_KEY(ConvKey) % CmpHashTableSize)
#define GET_HASH_ENTRY(Table, ConvKey) \
(&Table[GET_HASH_INDEX(ConvKey)])
#define ASSERT_VALID_HASH(h) \
@@ -83,6 +89,14 @@
(GET_HASH_ENTRY(CmpCacheTable, \
(k)->ConvKey)->Owner == KeGetCurrentThread())
//
// Shared acquires a KCB by index
//
#define CmpAcquireKcbLockSharedByIndex(i) \
{ \
ExAcquirePushLockShared(&CmpCacheTable[(i)].Lock); \
}
//
// Exclusively acquires a KCB by index
//
@@ -114,6 +128,16 @@ CmpAcquireKcbLockExclusiveByKey(IN ULONG ConvKey)
CmpAcquireKcbLockExclusiveByIndex(GET_HASH_INDEX(ConvKey));
}
//
// Shared acquires a KCB by key
//
FORCEINLINE
VOID
CmpAcquireKcbLockSharedByKey(
_In_ ULONG ConvKey)
{
CmpAcquireKcbLockSharedByIndex(GET_HASH_INDEX(ConvKey));
}
//
// Shared acquires a KCB
@@ -124,14 +148,6 @@ CmpAcquireKcbLockExclusiveByKey(IN ULONG ConvKey)
(k)->ConvKey)->Lock); \
}
//
// Shared acquires a KCB by index
//
#define CmpAcquireKcbLockSharedByIndex(i) \
{ \
ExAcquirePushLockShared(&CmpCacheTable[(i)].Lock); \
}
//
// Tries to convert a KCB lock
//

View File

@@ -10,6 +10,8 @@
/* INCLUDES *****************************************************************/
#include <ntoskrnl.h>
#include <x86x64/Cpuid.h>
#include <x86x64/Msr.h>
#define NDEBUG
#include <debug.h>
@@ -145,56 +147,74 @@ KiSetProcessorType(VOID)
KeGetCurrentPrcb()->CpuStep = (USHORT)Stepping;
}
ULONG
/*!
\brief Evaluates the KeFeatureFlag bits for the current CPU.
\return The feature flags for this CPU.
\see https://www.geoffchappell.com/studies/windows/km/ntoskrnl/structs/kprcb/featurebits.htm
\todo
- KF_VIRT_FIRMWARE_ENABLED 0x08000000 (see notes from Geoff Chappell)
- KF_FPU_LEAKAGE 0x0000020000000000ULL
- KF_CAT 0x0000100000000000ULL
- KF_CET_SS 0x0000400000000000ULL
*/
ULONG64
NTAPI
KiGetFeatureBits(VOID)
{
PKPRCB Prcb = KeGetCurrentPrcb();
ULONG Vendor;
ULONG FeatureBits = KF_WORKING_PTE;
CPU_INFO CpuInfo;
ULONG64 FeatureBits = 0;
CPUID_SIGNATURE_REGS signature;
CPUID_VERSION_INFO_REGS VersionInfo;
CPUID_EXTENDED_FUNCTION_REGS extendedFunction;
/* Get the Vendor ID */
Vendor = Prcb->CpuVendor;
/* Make sure we got a valid vendor ID at least. */
if (!Vendor) return FeatureBits;
if (Vendor == CPU_UNKNOWN) return FeatureBits;
/* Get signature CPUID for the maximum function */
__cpuid(signature.AsInt32, CPUID_SIGNATURE);
/* Get the CPUID Info. */
KiCpuId(&CpuInfo, 1);
__cpuid(VersionInfo.AsInt32, CPUID_VERSION_INFO);
/* Set the initial APIC ID */
Prcb->InitialApicId = (UCHAR)(CpuInfo.Ebx >> 24);
Prcb->InitialApicId = (UCHAR)VersionInfo.Ebx.Bits.InitialLocalApicId;
/* Convert all CPUID Feature bits into our format */
if (CpuInfo.Edx & X86_FEATURE_VME) FeatureBits |= KF_V86_VIS | KF_CR4;
if (CpuInfo.Edx & X86_FEATURE_PSE) FeatureBits |= KF_LARGE_PAGE | KF_CR4;
if (CpuInfo.Edx & X86_FEATURE_TSC) FeatureBits |= KF_RDTSC;
if (CpuInfo.Edx & X86_FEATURE_CX8) FeatureBits |= KF_CMPXCHG8B;
if (CpuInfo.Edx & X86_FEATURE_SYSCALL) FeatureBits |= KF_FAST_SYSCALL;
if (CpuInfo.Edx & X86_FEATURE_MTTR) FeatureBits |= KF_MTRR;
if (CpuInfo.Edx & X86_FEATURE_PGE) FeatureBits |= KF_GLOBAL_PAGE | KF_CR4;
if (CpuInfo.Edx & X86_FEATURE_CMOV) FeatureBits |= KF_CMOV;
if (CpuInfo.Edx & X86_FEATURE_PAT) FeatureBits |= KF_PAT;
if (CpuInfo.Edx & X86_FEATURE_DS) FeatureBits |= KF_DTS;
if (CpuInfo.Edx & X86_FEATURE_MMX) FeatureBits |= KF_MMX;
if (CpuInfo.Edx & X86_FEATURE_FXSR) FeatureBits |= KF_FXSR;
if (CpuInfo.Edx & X86_FEATURE_SSE) FeatureBits |= KF_XMMI;
if (CpuInfo.Edx & X86_FEATURE_SSE2) FeatureBits |= KF_XMMI64;
if (VersionInfo.Edx.Bits.VME) FeatureBits |= KF_CR4;
if (VersionInfo.Edx.Bits.PSE) FeatureBits |= KF_LARGE_PAGE | KF_CR4;
if (VersionInfo.Edx.Bits.TSC) FeatureBits |= KF_RDTSC;
if (VersionInfo.Edx.Bits.CX8) FeatureBits |= KF_CMPXCHG8B;
if (VersionInfo.Edx.Bits.SEP) FeatureBits |= KF_FAST_SYSCALL;
if (VersionInfo.Edx.Bits.MTRR) FeatureBits |= KF_MTRR;
if (VersionInfo.Edx.Bits.PGE) FeatureBits |= KF_GLOBAL_PAGE | KF_CR4;
if (VersionInfo.Edx.Bits.CMOV) FeatureBits |= KF_CMOV;
if (VersionInfo.Edx.Bits.PAT) FeatureBits |= KF_PAT;
if (VersionInfo.Edx.Bits.DS) FeatureBits |= KF_DTS;
if (VersionInfo.Edx.Bits.MMX) FeatureBits |= KF_MMX;
if (VersionInfo.Edx.Bits.FXSR) FeatureBits |= KF_FXSR;
if (VersionInfo.Edx.Bits.SSE) FeatureBits |= KF_XMMI;
if (VersionInfo.Edx.Bits.SSE2) FeatureBits |= KF_XMMI64;
if (CpuInfo.Ecx & X86_FEATURE_SSE3) FeatureBits |= KF_SSE3;
//if (CpuInfo.Ecx & X86_FEATURE_MONITOR) FeatureBits |= KF_MONITOR;
//if (CpuInfo.Ecx & X86_FEATURE_SSSE3) FeatureBits |= KF_SSE3SUP;
if (CpuInfo.Ecx & X86_FEATURE_CX16) FeatureBits |= KF_CMPXCHG16B;
//if (CpuInfo.Ecx & X86_FEATURE_SSE41) FeatureBits |= KF_SSE41;
//if (CpuInfo.Ecx & X86_FEATURE_POPCNT) FeatureBits |= KF_POPCNT;
if (CpuInfo.Ecx & X86_FEATURE_XSAVE) FeatureBits |= KF_XSTATE;
if (VersionInfo.Ecx.Bits.SSE3) FeatureBits |= KF_SSE3;
if (VersionInfo.Ecx.Bits.SSSE3) FeatureBits |= KF_SSSE3;
if (VersionInfo.Ecx.Bits.CMPXCHG16B) FeatureBits |= KF_CMPXCHG16B;
if (VersionInfo.Ecx.Bits.SSE4_1) FeatureBits |= KF_SSE4_1;
if (VersionInfo.Ecx.Bits.XSAVE) FeatureBits |= KF_XSTATE;
if (VersionInfo.Ecx.Bits.RDRAND) FeatureBits |= KF_RDRAND;
/* Check if the CPU has hyper-threading */
if (CpuInfo.Edx & X86_FEATURE_HT)
if (VersionInfo.Edx.Bits.HTT)
{
/* Set the number of logical CPUs */
Prcb->LogicalProcessorsPerPhysicalProcessor = (UCHAR)(CpuInfo.Ebx >> 16);
Prcb->LogicalProcessorsPerPhysicalProcessor =
VersionInfo.Ebx.Bits.MaximumAddressableIdsForLogicalProcessors;
if (Prcb->LogicalProcessorsPerPhysicalProcessor > 1)
{
/* We're on dual-core */
@@ -207,25 +227,115 @@ KiGetFeatureBits(VOID)
Prcb->LogicalProcessorsPerPhysicalProcessor = 1;
}
/* Check extended cpuid features */
KiCpuId(&CpuInfo, 0x80000000);
if ((CpuInfo.Eax & 0xffffff00) == 0x80000000)
/* Check if CPUID_THERMAL_POWER_MANAGEMENT (0x06) is supported */
if (signature.MaxLeaf >= CPUID_THERMAL_POWER_MANAGEMENT)
{
/* Check if CPUID 0x80000001 is supported */
if (CpuInfo.Eax >= 0x80000001)
/* Read CPUID_THERMAL_POWER_MANAGEMENT */
CPUID_THERMAL_POWER_MANAGEMENT_REGS PowerInfo;
__cpuid(PowerInfo.AsInt32, CPUID_THERMAL_POWER_MANAGEMENT);
if (PowerInfo.Undoc.Ecx.ACNT2) FeatureBits |= KF_ACNT2;
}
/* Check if CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS (0x07) is supported */
if (signature.MaxLeaf >= CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS)
{
/* Read CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS */
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_REGS ExtFlags;
__cpuidex(ExtFlags.AsInt32,
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS,
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_SUB_LEAF_INFO);
if (ExtFlags.Ebx.Bits.SMEP) FeatureBits |= KF_SMEP;
if (ExtFlags.Ebx.Bits.FSGSBASE) FeatureBits |= KF_RDWRFSGSBASE;
if (ExtFlags.Ebx.Bits.SMAP) FeatureBits |= KF_SMAP;
}
/* Check if CPUID_EXTENDED_STATE (0x0D) is supported */
if (signature.MaxLeaf >= CPUID_EXTENDED_STATE)
{
/* Read CPUID_EXTENDED_STATE */
CPUID_EXTENDED_STATE_SUB_LEAF_EAX_REGS ExtStateSub;
__cpuidex(ExtStateSub.AsInt32,
CPUID_EXTENDED_STATE,
CPUID_EXTENDED_STATE_SUB_LEAF);
if (ExtStateSub.Eax.Bits.XSAVEOPT) FeatureBits |= KF_XSAVEOPT;
if (ExtStateSub.Eax.Bits.XSAVES) FeatureBits |= KF_XSAVES;
}
/* Check extended cpuid features */
__cpuid(extendedFunction.AsInt32, CPUID_EXTENDED_FUNCTION);
if ((extendedFunction.MaxLeaf & 0xffffff00) == 0x80000000)
{
/* Check if CPUID_EXTENDED_CPU_SIG (0x80000001) is supported */
if (extendedFunction.MaxLeaf >= CPUID_EXTENDED_CPU_SIG)
{
/* Check which extended features are available. */
KiCpuId(&CpuInfo, 0x80000001);
/* Read CPUID_EXTENDED_CPU_SIG */
CPUID_EXTENDED_CPU_SIG_REGS ExtSig;
__cpuid(ExtSig.AsInt32, CPUID_EXTENDED_CPU_SIG);
/* Check if NX-bit is supported */
if (CpuInfo.Edx & X86_FEATURE_NX) FeatureBits |= KF_NX_BIT;
if (ExtSig.Intel.Edx.Bits.NX) FeatureBits |= KF_NX_BIT;
if (ExtSig.Intel.Edx.Bits.Page1GB) FeatureBits |= KF_HUGEPAGE;
if (ExtSig.Intel.Edx.Bits.RDTSCP) FeatureBits |= KF_RDTSCP;
/* Now handle each features for each CPU Vendor */
switch (Vendor)
/* AMD specific */
if (Vendor == CPU_AMD)
{
case CPU_AMD:
if (CpuInfo.Edx & 0x80000000) FeatureBits |= KF_3DNOW;
break;
if (ExtSig.Amd.Edx.Bits.ThreeDNow) FeatureBits |= KF_3DNOW;
}
}
}
/* Vendor specific */
if (Vendor == CPU_INTEL)
{
FeatureBits |= KF_GENUINE_INTEL;
/* Check for models that support LBR */
if (VersionInfo.Eax.Bits.FamilyId == 6)
{
if ((VersionInfo.Eax.Bits.Model == 15) ||
(VersionInfo.Eax.Bits.Model == 22) ||
(VersionInfo.Eax.Bits.Model == 23) ||
(VersionInfo.Eax.Bits.Model == 26))
{
FeatureBits |= KF_BRANCH;
}
}
/* Check if VMX is available */
if (VersionInfo.Ecx.Bits.VMX)
{
/* Read PROCBASED ctls and check if secondary are allowed */
MSR_IA32_VMX_PROCBASED_CTLS_REGISTER ProcBasedCtls;
ProcBasedCtls.Uint64 = __readmsr(MSR_IA32_VMX_PROCBASED_CTLS);
if (ProcBasedCtls.Bits.Allowed1.ActivateSecondaryControls)
{
/* Read secondary controls and check if EPT is allowed */
MSR_IA32_VMX_PROCBASED_CTLS2_REGISTER ProcBasedCtls2;
ProcBasedCtls2.Uint64 = __readmsr(MSR_IA32_VMX_PROCBASED_CTLS2);
if (ProcBasedCtls2.Bits.Allowed1.EPT)
FeatureBits |= KF_SLAT;
}
}
}
else if (Vendor == CPU_AMD)
{
FeatureBits |= KF_AUTHENTICAMD;
FeatureBits |= KF_BRANCH;
/* Check extended cpuid features */
if ((extendedFunction.MaxLeaf & 0xffffff00) == 0x80000000)
{
/* Check if CPUID_AMD_SVM_FEATURES (0x8000000A) is supported */
if (extendedFunction.MaxLeaf >= CPUID_AMD_SVM_FEATURES)
{
/* Read CPUID_AMD_SVM_FEATURES and check if Nested Paging is available */
CPUID_AMD_SVM_FEATURES_REGS SvmFeatures;
__cpuid(SvmFeatures.AsInt32, CPUID_AMD_SVM_FEATURES);
if (SvmFeatures.Edx.Bits.NP) FeatureBits |= KF_SLAT;
}
}
}
@@ -250,7 +360,7 @@ KiReportCpuFeatures(IN PKPRCB Prcb)
DPRINT1("Supported CPU features: ");
#define print_kf_bit(kf_value) if (Prcb->FeatureBits & kf_value) DbgPrint(#kf_value " ")
print_kf_bit(KF_V86_VIS);
print_kf_bit(KF_SMEP);
print_kf_bit(KF_RDTSC);
print_kf_bit(KF_CR4);
print_kf_bit(KF_CMOV);
@@ -258,25 +368,40 @@ KiReportCpuFeatures(IN PKPRCB Prcb)
print_kf_bit(KF_LARGE_PAGE);
print_kf_bit(KF_MTRR);
print_kf_bit(KF_CMPXCHG8B);
print_kf_bit(KF_CMPXCHG16B);
print_kf_bit(KF_MMX);
print_kf_bit(KF_WORKING_PTE);
print_kf_bit(KF_DTS);
print_kf_bit(KF_PAT);
print_kf_bit(KF_FXSR);
print_kf_bit(KF_FAST_SYSCALL);
print_kf_bit(KF_XMMI);
print_kf_bit(KF_3DNOW);
print_kf_bit(KF_XSAVEOPT);
print_kf_bit(KF_XMMI64);
print_kf_bit(KF_DTS);
print_kf_bit(KF_BRANCH);
print_kf_bit(KF_00040000);
print_kf_bit(KF_SSE3);
print_kf_bit(KF_CMPXCHG16B);
print_kf_bit(KF_AUTHENTICAMD);
print_kf_bit(KF_ACNT2);
print_kf_bit(KF_XSTATE);
print_kf_bit(KF_GENUINE_INTEL);
print_kf_bit(KF_SLAT);
print_kf_bit(KF_VIRT_FIRMWARE_ENABLED);
print_kf_bit(KF_RDWRFSGSBASE);
print_kf_bit(KF_NX_BIT);
print_kf_bit(KF_NX_DISABLED);
print_kf_bit(KF_NX_ENABLED);
print_kf_bit(KF_SSE3);
//print_kf_bit(KF_SSE3SUP);
//print_kf_bit(KF_SSE41);
//print_kf_bit(KF_MONITOR);
//print_kf_bit(KF_POPCNT);
print_kf_bit(KF_XSTATE);
print_kf_bit(KF_RDRAND);
print_kf_bit(KF_SMAP);
print_kf_bit(KF_RDTSCP);
print_kf_bit(KF_HUGEPAGE);
print_kf_bit(KF_XSAVES);
print_kf_bit(KF_FPU_LEAKAGE);
print_kf_bit(KF_CAT);
print_kf_bit(KF_CET_SS);
print_kf_bit(KF_SSSE3);
print_kf_bit(KF_SSE4_1);
print_kf_bit(KF_SSE4_2);
#undef print_kf_bit
#define print_cf(cpu_flag) if (CpuFeatures & cpu_flag) DbgPrint(#cpu_flag " ")

View File

@@ -170,7 +170,7 @@ NTAPI
KiInitializeCpu(PKIPCR Pcr)
{
ULONG64 Pat;
ULONG FeatureBits;
ULONG64 FeatureBits;
/* Initialize gs */
KiInitializeSegments();
@@ -199,7 +199,8 @@ KiInitializeCpu(PKIPCR Pcr)
FeatureBits |= KF_NX_ENABLED;
/* Save feature bits */
Pcr->Prcb.FeatureBits = FeatureBits;
Pcr->Prcb.FeatureBits = (ULONG)FeatureBits;
Pcr->Prcb.FeatureBitsHigh = FeatureBits >> 32;
/* Enable fx save restore support */
__writecr4(__readcr4() | CR4_FXSR);
@@ -283,6 +284,8 @@ KiInitializeKernelMachineDependent(
IN PKPRCB Prcb,
IN PLOADER_PARAMETER_BLOCK LoaderBlock)
{
ULONG64 FeatureBits;
/* Set boot-level flags */
KeI386CpuType = Prcb->CpuType;
KeI386CpuStep = Prcb->CpuStep;
@@ -291,26 +294,52 @@ KiInitializeKernelMachineDependent(
if (Prcb->CpuID)
KeProcessorRevision = Prcb->CpuStep;
FeatureBits = Prcb->FeatureBits | (ULONG64)Prcb->FeatureBitsHigh << 32;
/* Set basic CPU Features that user mode can read */
SharedUserData->ProcessorFeatures[PF_FLOATING_POINT_PRECISION_ERRATA] = FALSE;
SharedUserData->ProcessorFeatures[PF_FLOATING_POINT_EMULATED] = FALSE;
SharedUserData->ProcessorFeatures[PF_COMPARE_EXCHANGE_DOUBLE] = TRUE;
SharedUserData->ProcessorFeatures[PF_RDTSC_INSTRUCTION_AVAILABLE] = TRUE;
SharedUserData->ProcessorFeatures[PF_PPC_MOVEMEM_64BIT_OK] = TRUE;
SharedUserData->ProcessorFeatures[PF_PAE_ENABLED] = TRUE; // ???
SharedUserData->ProcessorFeatures[PF_NX_ENABLED] = TRUE;
SharedUserData->ProcessorFeatures[PF_FASTFAIL_AVAILABLE] = TRUE;
SharedUserData->ProcessorFeatures[PF_XSAVE_ENABLED] = TRUE;
SharedUserData->ProcessorFeatures[PF_MMX_INSTRUCTIONS_AVAILABLE] =
(Prcb->FeatureBits & KF_MMX) ? TRUE: FALSE;
(FeatureBits & KF_MMX) ? TRUE : FALSE;
SharedUserData->ProcessorFeatures[PF_XMMI_INSTRUCTIONS_AVAILABLE] =
((Prcb->FeatureBits & KF_FXSR) && (Prcb->FeatureBits & KF_XMMI)) ? TRUE: FALSE;
SharedUserData->ProcessorFeatures[PF_XMMI64_INSTRUCTIONS_AVAILABLE] =
((Prcb->FeatureBits & KF_FXSR) && (Prcb->FeatureBits & KF_XMMI64)) ? TRUE: FALSE;
((FeatureBits & KF_FXSR) && (FeatureBits & KF_XMMI)) ? TRUE : FALSE;
SharedUserData->ProcessorFeatures[PF_3DNOW_INSTRUCTIONS_AVAILABLE] =
(Prcb->FeatureBits & KF_3DNOW) ? TRUE: FALSE;
(FeatureBits & KF_3DNOW) ? TRUE : FALSE;
SharedUserData->ProcessorFeatures[PF_RDTSC_INSTRUCTION_AVAILABLE] = TRUE;
SharedUserData->ProcessorFeatures[PF_PAE_ENABLED] = TRUE; // ???
SharedUserData->ProcessorFeatures[PF_XMMI64_INSTRUCTIONS_AVAILABLE] =
((FeatureBits & KF_FXSR) && (FeatureBits & KF_XMMI64)) ? TRUE : FALSE;
SharedUserData->ProcessorFeatures[PF_SSE_DAZ_MODE_AVAILABLE] = FALSE; // ???
SharedUserData->ProcessorFeatures[PF_NX_ENABLED] = TRUE;
SharedUserData->ProcessorFeatures[PF_SSE3_INSTRUCTIONS_AVAILABLE] =
(Prcb->FeatureBits & KF_SSE3) ? TRUE: FALSE;
(FeatureBits & KF_SSE3) ? TRUE : FALSE;
SharedUserData->ProcessorFeatures[PF_COMPARE_EXCHANGE128] =
(Prcb->FeatureBits & KF_CMPXCHG16B) ? TRUE: FALSE;
(FeatureBits & KF_CMPXCHG16B) ? TRUE : FALSE;
SharedUserData->ProcessorFeatures[PF_COMPARE64_EXCHANGE128] = FALSE; // ???
SharedUserData->ProcessorFeatures[PF_CHANNELS_ENABLED] = FALSE; // ???
SharedUserData->ProcessorFeatures[PF_XSAVE_ENABLED] = FALSE; // FIXME
SharedUserData->ProcessorFeatures[PF_SECOND_LEVEL_ADDRESS_TRANSLATION] =
(FeatureBits & KF_SLAT) ? TRUE : FALSE;
SharedUserData->ProcessorFeatures[PF_VIRT_FIRMWARE_ENABLED] =
(FeatureBits & KF_VIRT_FIRMWARE_ENABLED) ? TRUE : FALSE;
SharedUserData->ProcessorFeatures[PF_RDWRFSGSBASE_AVAILABLE] =
(FeatureBits & KF_RDWRFSGSBASE) ? TRUE : FALSE;
SharedUserData->ProcessorFeatures[PF_FASTFAIL_AVAILABLE] = TRUE;
SharedUserData->ProcessorFeatures[PF_RDRAND_INSTRUCTION_AVAILABLE] =
(FeatureBits & KF_RDRAND) ? TRUE : FALSE;
SharedUserData->ProcessorFeatures[PF_RDTSCP_INSTRUCTION_AVAILABLE] =
(FeatureBits & KF_RDTSCP) ? TRUE : FALSE;
SharedUserData->ProcessorFeatures[PF_RDPID_INSTRUCTION_AVAILABLE] = FALSE; // ???
SharedUserData->ProcessorFeatures[PF_SSSE3_INSTRUCTIONS_AVAILABLE] =
(FeatureBits & KF_SSSE3) ? TRUE : FALSE;
SharedUserData->ProcessorFeatures[PF_SSE4_1_INSTRUCTIONS_AVAILABLE] =
(FeatureBits & KF_SSE4_1) ? TRUE : FALSE;
SharedUserData->ProcessorFeatures[PF_SSE4_2_INSTRUCTIONS_AVAILABLE] =
(FeatureBits & KF_SSE4_2) ? TRUE : FALSE;
SharedUserData->ProcessorFeatures[PF_AVX_INSTRUCTIONS_AVAILABLE] = FALSE; // FIXME
SharedUserData->ProcessorFeatures[PF_AVX2_INSTRUCTIONS_AVAILABLE] = FALSE; // FIXME
SharedUserData->ProcessorFeatures[PF_AVX512F_INSTRUCTIONS_AVAILABLE] = FALSE; // FIXME
/* Set the default NX policy (opt-in) */
SharedUserData->NXSupportPolicy = NX_SUPPORT_POLICY_OPTIN;

View File

@@ -115,10 +115,5 @@ endif()
set(USE_DUMMY_PSEH FALSE CACHE BOOL
"Whether to disable PSEH support.")
if(ARCH STREQUAL "amd64")
set(DLL_EXPORT_VERSION "0x600" CACHE STRING
"The NT version the user mode DLLs target.")
else()
set(DLL_EXPORT_VERSION "0x502" CACHE STRING
"The NT version the user mode DLLs target.")
endif()
set(DLL_EXPORT_VERSION "0x502" CACHE STRING
"The NT version the user mode DLLs target.")

View File

@@ -24,6 +24,62 @@ Author:
// Dependencies
//
//
// Kernel Feature Bits
// See https://www.geoffchappell.com/studies/windows/km/ntoskrnl/structs/kprcb/featurebits.htm?tx=61&ts=0,1400
//
#define KF_SMEP 0x00000001 // Win 6.2
#define KF_RDTSC 0x00000002 // From ks386.inc, ksamd64.inc
#define KF_CR4 0x00000004 // From ks386.inc, ksamd64.inc
#define KF_CMOV 0x00000008
#define KF_GLOBAL_PAGE 0x00000010 // From ks386.inc, ksamd64.inc
#define KF_LARGE_PAGE 0x00000020 // From ks386.inc, ksamd64.inc
#define KF_MTRR 0x00000040
#define KF_CMPXCHG8B 0x00000080 // From ks386.inc, ksamd64.inc
#define KF_MMX 0x00000100
#define KF_DTS 0x00000200 // Win 5.2-6.2
#define KF_PAT 0x00000400
#define KF_FXSR 0x00000800
#define KF_FAST_SYSCALL 0x00001000 // From ks386.inc, ksamd64.inc
#define KF_XMMI 0x00002000 // SSE
#define KF_3DNOW 0x00004000
#define KF_AMDK6MTRR 0x00008000 // Win 5.0-6.1
#define KF_XSAVEOPT 0x00008000 // From KF_XSAVEOPT_BIT
#define KF_XMMI64 0x00010000 // SSE2
#define KF_BRANCH 0x00020000 // From ksamd64.inc, Win 6.1-6.2
#define KF_00040000 0x00040000 // Unclear
#define KF_SSE3 0x00080000 // Win 6.0+
#define KF_CMPXCHG16B 0x00100000 // Win 6.0-6.2
#define KF_AUTHENTICAMD 0x00200000 // Win 6.1+
#define KF_ACNT2 0x00400000 // Win 6.1+
#define KF_XSTATE 0x00800000 // From ksamd64.inc, Win 6.1+
#define KF_GENUINE_INTEL 0x01000000 // Win 6.1+
#define KF_02000000 0x02000000 // Unclear
#define KF_SLAT 0x04000000 // Win 6.2+, Intel: EPT supported
#define KF_VIRT_FIRMWARE_ENABLED 0x08000000 // Win 6.2+
#define KF_RDWRFSGSBASE 0x10000000 // From ksamd64.inc KF_RDWRFSGSBASE_BIT (0x1C)
#define KF_NX_BIT 0x20000000
#define KF_NX_DISABLED 0x40000000
#define KF_NX_ENABLED 0x80000000
#define KF_RDRAND 0x0000000100000000ULL // Win 10.0+
#define KF_SMAP 0x0000000200000000ULL // From ksamd64.inc
#define KF_RDTSCP 0x0000000400000000ULL // Win 10.0+
#define KF_HUGEPAGE 0x0000002000000000ULL // Win 10.0 1607+
#define KF_XSAVES 0x0000004000000000ULL // From ksamd64.inc KF_XSAVES_BIT (0x26)
#define KF_FPU_LEAKAGE 0x0000020000000000ULL // From ksamd64.inc KF_FPU_LEAKAGE_BIT (0x29)
#define KF_CAT 0x0000100000000000ULL // From ksamd64.inc KF_CAT_BIT (0x02C)
#define KF_CET_SS 0x0000400000000000ULL // From ksamd64.inc
#define KF_SSSE3 0x0000800000000000ULL
#define KF_SSE4_1 0x0001000000000000ULL
#define KF_SSE4_2 0x0002000000000000ULL
#define KF_XSAVEOPT_BIT 15 // From ksamd64.inc (0x0F -> 0x8000)
#define KF_XSTATE_BIT 23 // From ksamd64.inc (0x17 -> 0x800000)
#define KF_RDWRFSGSBASE_BIT 28 // From ksamd64.inc (0x1C -> 0x10000000)
#define KF_XSAVES_BIT 38 // From ksamd64.inc (0x26 -> 0x4000000000)
#define KF_FPU_LEAKAGE_BIT 41 // From ksamd64.inc (0x29 -> 0x20000000000)
#define KF_CAT_BIT 44 // From ksamd64.inc (0x2C -> 0x100000000000)
//
// KPCR Access for non-IA64 builds
//
@@ -193,7 +249,7 @@ typedef enum
#define MSR_GS_SWAP 0xC0000102
#define MSR_MCG_STATUS 0x017A
#define MSR_AMD_ACCESS 0x9C5A203A
#define MSR_IA32_MISC_ENABLE 0x01A0
#define MSR_IA32_MISC_ENABLE 0x000001A0
#define MSR_LAST_BRANCH_FROM 0x01DB
#define MSR_LAST_BRANCH_TO 0x01DC
#define MSR_LAST_EXCEPTION_FROM 0x01DD
@@ -854,6 +910,9 @@ typedef struct _KPRCB
CACHE_DESCRIPTOR Cache[5];
ULONG CacheCount;
#endif
#ifdef __REACTOS__
ULONG FeatureBitsHigh;
#endif
} KPRCB, *PKPRCB;
//

View File

@@ -23,6 +23,52 @@ Author:
// Dependencies
//
//
// Kernel Feature Bits
// See https://www.geoffchappell.com/studies/windows/km/ntoskrnl/structs/kprcb/featurebits.htm?tx=61&ts=0,1400
//
#define KF_V86_VIS 0x00000001 // From ks386.inc
#define KF_RDTSC 0x00000002 // From ks386.inc, ksamd64.inc
#define KF_CR4 0x00000004 // From ks386.inc, ksamd64.inc
#define KF_CMOV 0x00000008
#define KF_GLOBAL_PAGE 0x00000010 // From ks386.inc, ksamd64.inc
#define KF_LARGE_PAGE 0x00000020 // From ks386.inc, ksamd64.inc
#define KF_MTRR 0x00000040
#define KF_CMPXCHG8B 0x00000080 // From ks386.inc, ksamd64.inc
#define KF_MMX 0x00000100
#define KF_WORKING_PTE 0x00000200
#define KF_PAT 0x00000400
#define KF_FXSR 0x00000800
#define KF_FAST_SYSCALL 0x00001000 // From ks386.inc, ksamd64.inc
#define KF_XMMI 0x00002000 // SSE
#define KF_3DNOW 0x00004000
#define KF_AMDK6MTRR 0x00008000 // Win 5.0-6.1
#define KF_XSAVEOPT 0x00008000 // From KF_XSAVEOPT_BIT
#define KF_XMMI64 0x00010000 // SSE2
#define KF_DTS 0x00020000
#define KF_CLFLUSH 0x00040000 // Win 6.0+
#define KF_SSE3 0x00080000 // Win 6.0+
#define KF_AUTHENTICAMD 0x00100000 // Win 6.1+ (family 5+)
#define KF_ACNT2 0x00200000 // Win 6.1+
#define KF_XSTATE 0x00400000 // From ks386.inc, Win 6.1+
#define KF_GENUINE_INTEL 0x00800000 // Win 6.1+
#define KF_SMEP 0x01000000 // Win 6.2+
#define KF_RDRAND 0x02000000 // Win 6.3+
#define KF_SLAT 0x04000000 // Win 6.2+, Intel: EPT supported
#define KF_08000000 0x08000000 // Win 6.2+
#define KF_NX_BIT 0x20000000
#define KF_NX_DISABLED 0x40000000
#define KF_NX_ENABLED 0x80000000
#define KF_RDTSCP 0x0000000100000000ULL // Win 10.0+
#define KF_CLFLUSHOPT 0x0000000200000000ULL // Win 10.0+
#define KF_HDC 0x0000000400000000ULL // Win 10.0+
#define KF_FPU_LEAKAGE 0x0000001000000000ULL // From ks386.inc KF_FPU_LEAKAGE_BIT
#define KF_SSSE3 0x0000004000000000ULL
#define KF_SSE4_1 0x0000008000000000ULL
#define KF_SSE4_2 0x0000010000000000ULL
#define KF_FPU_LEAKAGE_BIT 36 // From ks386.inc (0x24 -> 0x1000000000)
//
// KPCR Access for non-IA64 builds
//

View File

@@ -137,39 +137,6 @@ Author:
#define WAIT_QUANTUM_DECREMENT 1
#define CLOCK_QUANTUM_DECREMENT 3
//
// Kernel Feature Bits
//
#define KF_V86_VIS 0x00000001
#define KF_RDTSC 0x00000002
#define KF_CR4 0x00000004
#define KF_CMOV 0x00000008
#define KF_GLOBAL_PAGE 0x00000010
#define KF_LARGE_PAGE 0x00000020
#define KF_MTRR 0x00000040
#define KF_CMPXCHG8B 0x00000080
#define KF_MMX 0x00000100
#define KF_WORKING_PTE 0x00000200
#define KF_PAT 0x00000400
#define KF_FXSR 0x00000800
#define KF_FAST_SYSCALL 0x00001000
#define KF_XMMI 0x00002000
#define KF_3DNOW 0x00004000
#define KF_AMDK6MTRR 0x00008000
#define KF_XMMI64 0x00010000
#define KF_DTS 0x00020000
#define KF_BRANCH 0x00020000 // from ksamd64.inc
#define KF_SSE3 0x00080000
#define KF_CMPXCHG16B 0x00100000
#define KF_XSTATE 0x00800000 // from ks386.inc, ksamd64.inc
#define KF_NX_BIT 0x20000000
#define KF_NX_DISABLED 0x40000000
#define KF_NX_ENABLED 0x80000000
#define KF_XSAVEOPT_BIT 15
#define KF_XSTATE_BIT 23
#define KF_RDWRFSGSBASE_BIT 28
//
// Internal Exception Codes
//

View File

@@ -23,10 +23,6 @@ DbgPrint(
...
);
#ifdef _M_AMD64
#define __wine_spec_unimplemented_stub(module, function) \
DbgPrint("WARNING: calling stub %s in module %s\n", function, module);
#else
#define __wine_spec_unimplemented_stub(module, function) \
{ \
EXCEPTION_RECORD ExceptionRecord = {0}; \
@@ -38,4 +34,3 @@ DbgPrint(
ExceptionRecord.NumberParameters = 2; \
RtlRaiseException(&ExceptionRecord); \
}
#endif

View File

@@ -0,0 +1,733 @@
/** @file
CPUID leaf definitions.
Provides defines for CPUID leaf indexes. Data structures are provided for
registers returned by a CPUID leaf that contain one or more bit fields.
If a register returned is a single 32-bit value, then a data structure is
not provided for that register.
Copyright (c) 2017, Advanced Micro Devices. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Specification Reference:
AMD64 Architecture Programming Manual volume 2, March 2017, Sections 15.34
**/
#ifndef __AMD_CPUID_H__
#define __AMD_CPUID_H__
/**
CPUID Signature Information
@param EAX CPUID_SIGNATURE (0x00)
@retval EAX Returns the highest value the CPUID instruction recognizes for
returning basic processor information. The value is returned is
processor specific.
@retval EBX First 4 characters of a vendor identification string.
@retval ECX Last 4 characters of a vendor identification string.
@retval EDX Middle 4 characters of a vendor identification string.
**/
///
/// @{ CPUID signature values returned by AMD processors
///
#define CPUID_SIGNATURE_AUTHENTIC_AMD_EBX SIGNATURE_32 ('A', 'u', 't', 'h')
#define CPUID_SIGNATURE_AUTHENTIC_AMD_EDX SIGNATURE_32 ('e', 'n', 't', 'i')
#define CPUID_SIGNATURE_AUTHENTIC_AMD_ECX SIGNATURE_32 ('c', 'A', 'M', 'D')
///
/// @}
///
/**
CPUID Extended Processor Signature and Features
@param EAX CPUID_EXTENDED_CPU_SIG (0x80000001)
@retval EAX Extended Family, Model, Stepping Identifiers
described by the type CPUID_AMD_EXTENDED_CPU_SIG_EAX.
@retval EBX Brand Identifier
described by the type CPUID_AMD_EXTENDED_CPU_SIG_EBX.
@retval ECX Extended Feature Identifiers
described by the type CPUID_AMD_EXTENDED_CPU_SIG_ECX.
@retval EDX Extended Feature Identifiers
described by the type CPUID_AMD_EXTENDED_CPU_SIG_EDX.
**/
/**
CPUID Extended Processor Signature and Features EAX for CPUID leaf
#CPUID_EXTENDED_CPU_SIG.
**/
typedef union {
///
/// Individual bit fields
///
struct {
///
/// [Bits 3:0] Stepping.
///
UINT32 Stepping : 4;
///
/// [Bits 7:4] Base Model.
///
UINT32 BaseModel : 4;
///
/// [Bits 11:8] Base Family.
///
UINT32 BaseFamily : 4;
///
/// [Bit 15:12] Reserved.
///
UINT32 Reserved1 : 4;
///
/// [Bits 19:16] Extended Model.
///
UINT32 ExtModel : 4;
///
/// [Bits 27:20] Extended Family.
///
UINT32 ExtFamily : 8;
///
/// [Bit 31:28] Reserved.
///
UINT32 Reserved2 : 4;
} Bits;
///
/// All bit fields as a 32-bit value
///
UINT32 Uint32;
} CPUID_AMD_EXTENDED_CPU_SIG_EAX;
/**
CPUID Extended Processor Signature and Features EBX for CPUID leaf
#CPUID_EXTENDED_CPU_SIG.
**/
typedef union {
///
/// Individual bit fields
///
struct {
///
/// [Bits 27:0] Reserved.
///
UINT32 Reserved : 28;
///
/// [Bit 31:28] Package Type.
///
UINT32 PkgType : 4;
} Bits;
///
/// All bit fields as a 32-bit value
///
UINT32 Uint32;
} CPUID_AMD_EXTENDED_CPU_SIG_EBX;
/**
CPUID Extended Processor Signature and Features ECX for CPUID leaf
#CPUID_EXTENDED_CPU_SIG.
**/
typedef union {
///
/// Individual bit fields
///
struct {
///
/// [Bit 0] LAHF/SAHF available in 64-bit mode.
///
UINT32 LAHF_SAHF : 1;
///
/// [Bit 1] Core multi-processing legacy mode.
///
UINT32 CmpLegacy : 1;
///
/// [Bit 2] Secure Virtual Mode feature.
///
UINT32 SVM : 1;
///
/// [Bit 3] Extended APIC register space.
///
UINT32 ExtApicSpace : 1;
///
/// [Bit 4] LOCK MOV CR0 means MOV CR8.
///
UINT32 AltMovCr8 : 1;
///
/// [Bit 5] LZCNT instruction support.
///
UINT32 LZCNT : 1;
///
/// [Bit 6] SSE4A instruction support.
///
UINT32 SSE4A : 1;
///
/// [Bit 7] Misaligned SSE Mode.
///
UINT32 MisAlignSse : 1;
///
/// [Bit 8] ThreeDNow Prefetch instructions.
///
UINT32 PREFETCHW : 1;
///
/// [Bit 9] OS Visible Work-around support.
///
UINT32 OSVW : 1;
///
/// [Bit 10] Instruction Based Sampling.
///
UINT32 IBS : 1;
///
/// [Bit 11] Extended Operation Support.
///
UINT32 XOP : 1;
///
/// [Bit 12] SKINIT and STGI support.
///
UINT32 SKINIT : 1;
///
/// [Bit 13] Watchdog Timer support.
///
UINT32 WDT : 1;
///
/// [Bit 14] Reserved.
///
UINT32 Reserved1 : 1;
///
/// [Bit 15] Lightweight Profiling support.
///
UINT32 LWP : 1;
///
/// [Bit 16] 4-Operand FMA instruction support.
///
UINT32 FMA4 : 1;
///
/// [Bit 17] Translation Cache Extension.
///
UINT32 TCE : 1;
///
/// [Bit 21:18] Reserved.
///
UINT32 Reserved2 : 4;
///
/// [Bit 22] Topology Extensions support.
///
UINT32 TopologyExtensions : 1;
///
/// [Bit 23] Core Performance Counter Extensions.
///
UINT32 PerfCtrExtCore : 1;
///
/// [Bit 25:24] Reserved.
///
UINT32 Reserved3 : 2;
///
/// [Bit 26] Data Breakpoint Extension.
///
UINT32 DataBreakpointExtension : 1;
///
/// [Bit 27] Performance Time-Stamp Counter.
///
UINT32 PerfTsc : 1;
///
/// [Bit 28] L3 Performance Counter Extensions.
///
UINT32 PerfCtrExtL3 : 1;
///
/// [Bit 29] MWAITX and MONITORX capability.
///
UINT32 MwaitExtended : 1;
///
/// [Bit 31:30] Reserved.
///
UINT32 Reserved4 : 2;
} Bits;
///
/// All bit fields as a 32-bit value
///
UINT32 Uint32;
} CPUID_AMD_EXTENDED_CPU_SIG_ECX;
/**
CPUID Extended Processor Signature and Features EDX for CPUID leaf
#CPUID_EXTENDED_CPU_SIG.
**/
typedef union {
///
/// Individual bit fields
///
struct {
///
/// [Bit 0] x87 floating point unit on-chip.
///
UINT32 FPU : 1;
///
/// [Bit 1] Virtual-mode enhancements.
///
UINT32 VME : 1;
///
/// [Bit 2] Debugging extensions, IO breakpoints, CR4.DE.
///
UINT32 DE : 1;
///
/// [Bit 3] Page-size extensions (4 MB pages).
///
UINT32 PSE : 1;
///
/// [Bit 4] Time stamp counter, RDTSC/RDTSCP instructions, CR4.TSD.
///
UINT32 TSC : 1;
///
/// [Bit 5] MSRs, with RDMSR and WRMSR instructions.
///
UINT32 MSR : 1;
///
/// [Bit 6] Physical-address extensions (PAE).
///
UINT32 PAE : 1;
///
/// [Bit 7] Machine check exception, CR4.MCE.
///
UINT32 MCE : 1;
///
/// [Bit 8] CMPXCHG8B instruction.
///
UINT32 CMPXCHG8B : 1;
///
/// [Bit 9] APIC exists and is enabled.
///
UINT32 APIC : 1;
///
/// [Bit 10] Reserved.
///
UINT32 Reserved1 : 1;
///
/// [Bit 11] SYSCALL and SYSRET instructions.
///
UINT32 SYSCALL_SYSRET : 1;
///
/// [Bit 12] Memory-type range registers.
///
UINT32 MTRR : 1;
///
/// [Bit 13] Page global extension, CR4.PGE.
///
UINT32 PGE : 1;
///
/// [Bit 14] Machine check architecture, MCG_CAP.
///
UINT32 MCA : 1;
///
/// [Bit 15] Conditional move instructions, CMOV, FCOMI, FCMOV.
///
UINT32 CMOV : 1;
///
/// [Bit 16] Page attribute table.
///
UINT32 PAT : 1;
///
/// [Bit 17] Page-size extensions.
///
UINT32 PSE36 : 1;
///
/// [Bit 19:18] Reserved.
///
UINT32 Reserved2 : 2;
///
/// [Bit 20] No-execute page protection.
///
UINT32 NX : 1;
///
/// [Bit 21] Reserved.
///
UINT32 Reserved3 : 1;
///
/// [Bit 22] AMD Extensions to MMX instructions.
///
UINT32 MmxExt : 1;
///
/// [Bit 23] MMX instructions.
///
UINT32 MMX : 1;
///
/// [Bit 24] FXSAVE and FXRSTOR instructions.
///
UINT32 FFSR : 1;
///
/// [Bit 25] FXSAVE and FXRSTOR instruction optimizations.
///
UINT32 FFXSR : 1;
///
/// [Bit 26] 1-GByte large page support.
///
UINT32 Page1GB : 1;
///
/// [Bit 27] RDTSCP instructions.
///
UINT32 RDTSCP : 1;
///
/// [Bit 28] Reserved.
///
UINT32 Reserved4 : 1;
///
/// [Bit 29] Long Mode.
///
UINT32 LM : 1;
///
/// [Bit 30] 3DNow! instructions.
///
UINT32 ThreeDNow : 1;
///
/// [Bit 31] AMD Extensions to 3DNow! instructions.
///
UINT32 ThreeDNowExt : 1;
} Bits;
///
/// All bit fields as a 32-bit value
///
UINT32 Uint32;
} CPUID_AMD_EXTENDED_CPU_SIG_EDX;
/**
CPUID Linear Physical Address Size
@param EAX CPUID_VIR_PHY_ADDRESS_SIZE (0x80000008)
@retval EAX Linear/Physical Address Size described by the type
CPUID_AMD_VIR_PHY_ADDRESS_SIZE_EAX.
@retval EBX Linear/Physical Address Size described by the type
CPUID_AMD_VIR_PHY_ADDRESS_SIZE_EBX.
@retval ECX Linear/Physical Address Size described by the type
CPUID_AMD_VIR_PHY_ADDRESS_SIZE_ECX.
@retval EDX Reserved.
**/
/**
CPUID Linear Physical Address Size EAX for CPUID leaf
#CPUID_VIR_PHY_ADDRESS_SIZE.
**/
typedef union {
///
/// Individual bit fields
///
struct {
///
/// [Bits 7:0] Maximum physical byte address size in bits.
///
UINT32 PhysicalAddressBits : 8;
///
/// [Bits 15:8] Maximum linear byte address size in bits.
///
UINT32 LinearAddressBits : 8;
///
/// [Bits 23:16] Maximum guest physical byte address size in bits.
///
UINT32 GuestPhysAddrSize : 8;
///
/// [Bit 31:24] Reserved.
///
UINT32 Reserved : 8;
} Bits;
///
/// All bit fields as a 32-bit value
///
UINT32 Uint32;
} CPUID_AMD_VIR_PHY_ADDRESS_SIZE_EAX;
/**
CPUID Linear Physical Address Size EBX for CPUID leaf
#CPUID_VIR_PHY_ADDRESS_SIZE.
**/
typedef union {
///
/// Individual bit fields
///
struct {
///
/// [Bits 0] Clear Zero Instruction.
///
UINT32 CLZERO : 1;
///
/// [Bits 1] Instructions retired count support.
///
UINT32 IRPerf : 1;
///
/// [Bits 2] Restore error pointers for XSave instructions.
///
UINT32 XSaveErPtr : 1;
///
/// [Bit 31:3] Reserved.
///
UINT32 Reserved : 29;
} Bits;
///
/// All bit fields as a 32-bit value
///
UINT32 Uint32;
} CPUID_AMD_VIR_PHY_ADDRESS_SIZE_EBX;
/**
CPUID Linear Physical Address Size ECX for CPUID leaf
#CPUID_VIR_PHY_ADDRESS_SIZE.
**/
typedef union {
///
/// Individual bit fields
///
struct {
///
/// [Bits 7:0] Number of threads - 1.
///
UINT32 NC : 8;
///
/// [Bit 11:8] Reserved.
///
UINT32 Reserved1 : 4;
///
/// [Bits 15:12] APIC ID size.
///
UINT32 ApicIdCoreIdSize : 4;
///
/// [Bits 17:16] Performance time-stamp counter size.
///
UINT32 PerfTscSize : 2;
///
/// [Bit 31:18] Reserved.
///
UINT32 Reserved2 : 14;
} Bits;
///
/// All bit fields as a 32-bit value
///
UINT32 Uint32;
} CPUID_AMD_VIR_PHY_ADDRESS_SIZE_ECX;
/**
CPUID AMD Processor Topology
@param EAX CPUID_AMD_PROCESSOR_TOPOLOGY (0x8000001E)
@retval EAX Extended APIC ID described by the type
CPUID_AMD_PROCESSOR_TOPOLOGY_EAX.
@retval EBX Core Identifiers described by the type
CPUID_AMD_PROCESSOR_TOPOLOGY_EBX.
@retval ECX Node Identifiers described by the type
CPUID_AMD_PROCESSOR_TOPOLOGY_ECX.
@retval EDX Reserved.
**/
#define CPUID_AMD_PROCESSOR_TOPOLOGY 0x8000001E
/**
CPUID AMD Processor Topology EAX for CPUID leaf
#CPUID_AMD_PROCESSOR_TOPOLOGY.
**/
typedef union {
///
/// Individual bit fields
///
struct {
///
/// [Bit 31:0] Extended APIC Id.
///
UINT32 ExtendedApicId;
} Bits;
///
/// All bit fields as a 32-bit value
///
UINT32 Uint32;
} CPUID_AMD_PROCESSOR_TOPOLOGY_EAX;
/**
CPUID AMD Processor Topology EBX for CPUID leaf
#CPUID_AMD_PROCESSOR_TOPOLOGY.
**/
typedef union {
///
/// Individual bit fields
///
struct {
///
/// [Bits 7:0] Core Id.
///
UINT32 CoreId : 8;
///
/// [Bits 15:8] Threads per core.
///
UINT32 ThreadsPerCore : 8;
///
/// [Bit 31:16] Reserved.
///
UINT32 Reserved : 16;
} Bits;
///
/// All bit fields as a 32-bit value
///
UINT32 Uint32;
} CPUID_AMD_PROCESSOR_TOPOLOGY_EBX;
/**
CPUID AMD Processor Topology ECX for CPUID leaf
#CPUID_AMD_PROCESSOR_TOPOLOGY.
**/
typedef union {
///
/// Individual bit fields
///
struct {
///
/// [Bits 7:0] Node Id.
///
UINT32 NodeId : 8;
///
/// [Bits 10:8] Nodes per processor.
///
UINT32 NodesPerProcessor : 3;
///
/// [Bit 31:11] Reserved.
///
UINT32 Reserved : 21;
} Bits;
///
/// All bit fields as a 32-bit value
///
UINT32 Uint32;
} CPUID_AMD_PROCESSOR_TOPOLOGY_ECX;
/**
CPUID Memory Encryption Information
@param EAX CPUID_MEMORY_ENCRYPTION_INFO (0x8000001F)
@retval EAX Returns the memory encryption feature support status.
@retval EBX If memory encryption feature is present then return
the page table bit number used to enable memory encryption support
and reducing of physical address space in bits.
@retval ECX Returns number of encrypted guest supported simultaneously.
@retval EDX Returns minimum SEV enabled and SEV disabled ASID.
<b>Example usage</b>
@code
UINT32 Eax;
UINT32 Ebx;
UINT32 Ecx;
UINT32 Edx;
AsmCpuid (CPUID_MEMORY_ENCRYPTION_INFO, &Eax, &Ebx, &Ecx, &Edx);
@endcode
**/
#define CPUID_MEMORY_ENCRYPTION_INFO 0x8000001F
/**
CPUID Memory Encryption support information EAX for CPUID leaf
#CPUID_MEMORY_ENCRYPTION_INFO.
**/
typedef union {
///
/// Individual bit fields
///
struct {
///
/// [Bit 0] Secure Memory Encryption (Sme) Support
///
UINT32 SmeBit : 1;
///
/// [Bit 1] Secure Encrypted Virtualization (Sev) Support
///
UINT32 SevBit : 1;
///
/// [Bit 2] Page flush MSR support
///
UINT32 PageFlushMsrBit : 1;
///
/// [Bit 3] Encrypted state support
///
UINT32 SevEsBit : 1;
///
/// [Bit 31:4] Reserved
///
UINT32 ReservedBits : 28;
} Bits;
///
/// All bit fields as a 32-bit value
///
UINT32 Uint32;
} CPUID_MEMORY_ENCRYPTION_INFO_EAX;
/**
CPUID Memory Encryption support information EBX for CPUID leaf
#CPUID_MEMORY_ENCRYPTION_INFO.
**/
typedef union {
///
/// Individual bit fields
///
struct {
///
/// [Bit 5:0] Page table bit number used to enable memory encryption
///
UINT32 PtePosBits : 6;
///
/// [Bit 11:6] Reduction of system physical address space bits when
/// memory encryption is enabled
///
UINT32 ReducedPhysBits : 5;
///
/// [Bit 31:12] Reserved
///
UINT32 ReservedBits : 21;
} Bits;
///
/// All bit fields as a 32-bit value
///
UINT32 Uint32;
} CPUID_MEMORY_ENCRYPTION_INFO_EBX;
/**
CPUID Memory Encryption support information ECX for CPUID leaf
#CPUID_MEMORY_ENCRYPTION_INFO.
**/
typedef union {
///
/// Individual bit fields
///
struct {
///
/// [Bit 31:0] Number of encrypted guest supported simultaneously
///
UINT32 NumGuests;
} Bits;
///
/// All bit fields as a 32-bit value
///
UINT32 Uint32;
} CPUID_MEMORY_ENCRYPTION_INFO_ECX;
/**
CPUID Memory Encryption support information EDX for CPUID leaf
#CPUID_MEMORY_ENCRYPTION_INFO.
**/
typedef union {
///
/// Individual bit fields
///
struct {
///
/// [Bit 31:0] Minimum SEV enabled, SEV-ES disabled ASID
///
UINT32 MinAsid;
} Bits;
///
/// All bit fields as a 32-bit value
///
UINT32 Uint32;
} CPUID_MEMORY_ENCRYPTION_INFO_EDX;
#endif

View File

@@ -0,0 +1,208 @@
/*
* PROJECT: ReactOS SDK
* LICENSE: MIT (https://spdx.org/licenses/MIT)
* PURPOSE: Provides CPUID structure definitions
* COPYRIGHT: Copyright 2023 Timo Kreuzer <timo.kreuzer@reactos.org>
*/
#define CHAR8 char
#include "Intel/Cpuid.h"
#include "Amd/Cpuid.h"
// CPUID_SIGNATURE (0)
typedef union
{
INT32 AsInt32[4];
struct
{
UINT32 MaxLeaf;
CHAR SignatureScrambled[12];
};
} CPUID_SIGNATURE_REGS;
// CPUID_VERSION_INFO (1)
typedef union
{
INT32 AsInt32[4];
struct
{
CPUID_VERSION_INFO_EAX Eax;
CPUID_VERSION_INFO_EBX Ebx;
CPUID_VERSION_INFO_ECX Ecx;
CPUID_VERSION_INFO_EDX Edx;
};
} CPUID_VERSION_INFO_REGS;
// CPUID_EXTENDED_FUNCTION (0x80000000)
typedef union
{
INT32 AsInt32[4];
struct
{
UINT32 MaxLeaf;
UINT32 ReservedEbx;
UINT32 ReservedEcx;
UINT32 ReservedEdx;
};
} CPUID_EXTENDED_FUNCTION_REGS;
// CPUID_THERMAL_POWER_MANAGEMENT (6)
typedef union
{
INT32 AsInt32[4];
struct
{
CPUID_THERMAL_POWER_MANAGEMENT_EAX Eax;
CPUID_THERMAL_POWER_MANAGEMENT_EBX Ebx;
CPUID_THERMAL_POWER_MANAGEMENT_ECX Ecx;
UINT32 ReservedEdx;
};
struct
{
UINT32 Eax;
UINT32 Ebx;
struct
{
UINT32 HardwareCoordinationFeedback : 1;
UINT32 ACNT2 : 1; // See https://en.wikipedia.org/wiki/CPUID
} Ecx;
} Undoc;
} CPUID_THERMAL_POWER_MANAGEMENT_REGS;
// CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS (0x07)
typedef union
{
INT32 AsInt32[4];
struct
{
UINT32 Eax;
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_EBX Ebx;
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_ECX Ecx;
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_EDX Edx;
};
} CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_REGS;
// CPUID_EXTENDED_STATE (0x0D)
// CPUID_EXTENDED_STATE_MAIN_LEAF (0x00)
typedef union
{
INT32 AsInt32[4];
struct
{
CPUID_EXTENDED_STATE_MAIN_LEAF_EAX Eax;
UINT32 Ebx;
UINT32 Ecx;
UINT32 Edx;
};
} CPUID_EXTENDED_STATE_MAIN_LEAF_REGS;
// CPUID_EXTENDED_STATE (0x0D)
// CPUID_EXTENDED_STATE_SUB_LEAF (0x01)
typedef union
{
INT32 AsInt32[4];
struct
{
CPUID_EXTENDED_STATE_SUB_LEAF_EAX Eax;
struct
{
UINT32 XSaveAreaSize; // The size in bytes of the XSAVE area containing all states enabled by XCRO | IA32_XSS.
} Ebx;
CPUID_EXTENDED_STATE_SUB_LEAF_ECX Ecx;
UINT32 Edx; // Reports the supported bits of the upper 32 bits of the IA32_XSS MSR. IA32_XSS[n + 32] can be set to 1 only if EDX[n] is 1.
};
} CPUID_EXTENDED_STATE_SUB_LEAF_EAX_REGS;
// CPUID_EXTENDED_CPU_SIG (0x80000001)
typedef union
{
INT32 AsInt32[4];
struct
{
UINT32 Signature;
UINT32 ReservedEbx;
CPUID_EXTENDED_CPU_SIG_ECX Ecx;
CPUID_EXTENDED_CPU_SIG_EDX Edx;
} Intel;
struct
{
CPUID_AMD_EXTENDED_CPU_SIG_EAX Eax;
CPUID_AMD_EXTENDED_CPU_SIG_EBX Ebx;
CPUID_AMD_EXTENDED_CPU_SIG_ECX Ecx;
CPUID_AMD_EXTENDED_CPU_SIG_EDX Edx;
} Amd;
} CPUID_EXTENDED_CPU_SIG_REGS;
// Additional AMD specific CPUID:
// See
// - AMD64 Architecture Programmers Manual Volume 2: System Programming (https://www.amd.com/content/dam/amd/en/documents/processor-tech-docs/programmer-references/24593.pdf)
// - http://www.flounder.com/cpuid_explorer2.htm#CPUID(0x8000000A)
// - https://www.spinics.net/lists/kvm/msg279165.html
// - https://qemu-devel.nongnu.narkive.com/zgmvxGLq/patch-0-3-svm-feature-support-for-qemu
// - https://github.com/torvalds/linux/blob/28f20a19294da7df158dfca259d0e2b5866baaf9/arch/x86/include/asm/cpufeatures.h#L361
#define CPUID_AMD_SVM_FEATURES 0x8000000A
typedef union
{
struct
{
UINT SVMRev : 8; // EAX[7..0]
UINT Reserved : 24; // EAX[31..8]
} Bits;
UINT32 Uint32;
} CPUID_AMD_SVM_FEATURES_EAX;
typedef union
{
struct
{
UINT32 NP : 1; // EDX[0] Nested paging support
UINT32 LbrVirt : 1; // EDX[1] LBR virtualization
UINT32 SVML : 1; // EDX[2] SVM Lock
UINT32 NRIPS : 1; // EDX[3] Next RIP save on VMEXIT
UINT32 TscRateMsr : 1; // EDX[4] MSR based TSC ratio control
UINT32 VmcbClean : 1; // EDX[5] VMCB Clean bits support
UINT32 FlushByAsid : 1; // EDX[6] Flush by ASID support
UINT32 DecodeAssists : 1; // EDX[7] Decode assists support
UINT32 Reserved1 : 2; // EDX[9:8] Reserved
UINT32 PauseFilter : 1; // EDX[10] Pause filter support
UINT32 Reserved2 : 1; // EDX[11] Reserved
UINT32 PauseFilterThreshold : 1; // EDX[12] Pause filter threshold support
UINT32 AVIC : 1; // EDX[13:13] Advanced Virtual Interrupt Controller
UINT32 Unknown14 : 1; // EDX[14] Unknown. Described in AMD doc as X2AVIC, but that was probably a typo, since x2AVIC is bit 18.
UINT32 VMSAVEVirt : 1; // EDX[15] MSAVE and VMLOAD Virtualization
UINT32 VGIF : 1; // EDX[16] Virtual Global-Interrupt Flag
UINT32 GMET : 1; // EDX[17] Guest Mode Execute Trap Extension
UINT32 x2AVIC : 1; // EDX[18] Virtual x2APIC
UINT32 SSSCheck : 1; // EDX[19] AKA SupervisorShadowStack
UINT32 V_SPEC_CTRL : 1; // EDX[20] Virtual SPEC_CTRL
UINT32 ROGPT : 1; // EDX[21]
UINT32 Unknown22 : 1; // EDX[22]
UINT32 HOST_MCE_OVERRIDE : 1; // EDX[23]
UINT32 TLBSYNC : 1; // EDX[24] TLBSYNC instruction can be intercepted
UINT32 VNMI : 1; // EDX[25] NMI Virtualization support
UINT32 IbsVirt : 1; // EDX[26] Instruction Based Sampling Virtualization
UINT32 LVTReadAllowed : 1; // EDX[27]
UINT32 Unknown28 : 1; // EDX[28]
UINT32 BusLockThreshold : 1; // EDX[29]
} Bits;
UINT32 Uint32;
} CPUID_AMD_SVM_FEATURES_EDX;
// CPUID_AMD_SVM_FEATURES (0x8000000A)
typedef union
{
INT32 AsInt32[4];
struct
{
CPUID_AMD_SVM_FEATURES_EAX Eax;
UINT32 NumberOfSupportedASIDs;
UINT32 Ecx;
CPUID_AMD_SVM_FEATURES_EDX Edx;
};
} CPUID_AMD_SVM_FEATURES_REGS;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,97 @@
/*
* PROJECT: ReactOS SDK
* LICENSE: MIT (https://spdx.org/licenses/MIT)
* PURPOSE: Provides CPUID structure definitions
* COPYRIGHT: Copyright 2023 Timo Kreuzer <timo.kreuzer@reactos.org>
*/
#define SIZE_2KB 2048
#include "Intel/ArchitecturalMsr.h"
typedef struct
{
UINT32 Reserved0 : 2; // [1:0] Reserved
UINT32 InterruptWindowExiting : 1; // [2] Interrupt window exiting
UINT32 UseTSCOffsetting : 1; // [3] Use TSC offsetting
UINT32 Reserved4 : 3; // [6..4] Reserved
UINT32 HLTExiting : 1; // [7] HLT exiting
UINT32 Reserved8 : 1; // [8] Reserved
UINT32 INVLPG_Exiting : 1; // [9] INVLPG exiting
UINT32 MWAIT_Exiting : 1; // [10] MWAIT exiting
UINT32 RDPMC_Exiting : 1; // [11] RDPMC exiting
UINT32 RDTSC_Exiting : 1; // [12] RDTSC exiting
UINT32 CR3_Load_Exiting : 1; // [15] CR3 load exiting
UINT32 CR3_Store_Exiting : 1; // [16] CR3 store exiting
UINT32 ActivateTertiaryControls : 1; // [17] Activate tertiary controls
UINT32 CR8_Load_Exiting : 1; // [19] CR8 load exiting
UINT32 CR8_Store_Exiting : 1; // [20] CR8 store exiting
UINT32 Use_TPR_Shadow : 1; // [21] Use TPR shadow
UINT32 NMI_Window_Exiting : 1; // [22] NMI window exiting
UINT32 MOV_DR_Exiting : 1; // [23] MOV DR exiting
UINT32 Unconditional_IO_Exiting : 1; // [24] Unconditional I/O exiting
UINT32 Use_IO_Bitmaps : 1; // [25] Use I/O bitmaps
UINT32 Monitor_Trap_Flag : 1; // [27] Monitor trap flag
UINT32 Use_MSR_Bitmap : 1; // [28] Use MSR bitmap
UINT32 MONITOR_Exiting : 1; // [29] MONITOR exiting
UINT32 PAUSE_Exiting : 1; // [30] PAUSE exiting
UINT32 ActivateSecondaryControls : 1; // [31] Activate secondary controls
} VMX_PROCBASED_CTRLS;
typedef struct
{
UINT32 VirtualizeApicAccesses : 1; // [0] Virtualize APIC accesses
UINT32 EPT : 1; // [1] Enable EPT
UINT32 DescriptorTable_Exiting : 1; // [2] Descriptor-table exiting
UINT32 RDTSCP : 1; // [3] Enable RDTSCP
UINT32 Virtualize_x2APIC : 1; // [4] Virtualize x2APIC mode
UINT32 VPID : 1; // [5] Enable VPID
UINT32 WBINVD_Exiting : 1; // [6] WBINVD exiting
UINT32 UnrestrictedGuest : 1; // [7] Unrestricted guest
UINT32 APIC_Virtualization : 1; // [8] APIC-register virtualization
UINT32 VirtualInterruptDelivery : 1; // [9] Virtual-interrupt delivery
UINT32 PAUSE_Loop_Exiting : 1; // [10] PAUSE-loop exiting
UINT32 RDRAND_Exiting : 1; // [11] RDRAND exiting
UINT32 INVPCID : 1; // [12] Enable INVPCID
UINT32 VM_Functions : 1; // [13] Enable VM functions
UINT32 VMCS_Shadowing : 1; // [14] VMCS shadowing
UINT32 ENCLS_Exiting : 1; // [15] Enable ENCLS exiting
UINT32 RDSEED_Exiting : 1; // [16] RDSEED exiting
UINT32 PML : 1; // [17] Enable PML
UINT32 EPT_Violation : 1; // [18] EPT-violation #VE
UINT32 Conceal_VMX_from_PT : 1; // [19] Conceal VMX from PT
UINT32 XSAVES : 1; // [20] Enable XSAVES / XRSTORS
UINT32 PASID_Translation : 1; // [21] PASID translation
UINT32 ModeBasedExecutionControl : 1; // [22] Mode-based execute control for EPT
UINT32 SubPageWritePerm : 1; // [23] Sub-page write permissions for EPT
UINT32 GuestPhysicalAddr : 1; // [24] Intel PT uses guest physical addresses
UINT32 TSC_Scaling : 1; // [25] Use TSC scaling
UINT32 User_Wait : 1; // [26] Enable user wait and pause
UINT32 PCONFIG : 1; // [27] Enable PCONFIG
UINT32 ENCLV_Exiting : 1; // [28] Enable ENCLV exiting
UINT32 VMM_Bus_Lock_Detection : 1; // [30] VMM bus-lock detection
UINT32 InstructionTimeout : 1; // [31] Instruction timeout
} VMX_PROCBASED_CTLS2;
typedef union
{
struct
{
VMX_PROCBASED_CTRLS Allowed0;
VMX_PROCBASED_CTRLS Allowed1;
} Bits;
UINT64 Uint64;
} MSR_IA32_VMX_PROCBASED_CTLS_REGISTER;
typedef union
{
struct
{
VMX_PROCBASED_CTLS2 Allowed0;
VMX_PROCBASED_CTLS2 Allowed1;
} Bits;
UINT64 Uint64;
} MSR_IA32_VMX_PROCBASED_CTLS2_REGISTER;

View File

@@ -120,9 +120,6 @@ typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX {
} DUMMYUNIONNAME;
} SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX;
$endif(_WDMDDK_ || _WINNT_)
$if(_WDMDDK_)
/* Processor features */
#define PF_FLOATING_POINT_PRECISION_ERRATA 0
#define PF_FLOATING_POINT_EMULATED 1
@@ -156,6 +153,21 @@ $if(_WDMDDK_)
#define PF_ARM_V8_INSTRUCTIONS_AVAILABLE 29
#define PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE 30
#define PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE 31
#define PF_RDTSCP_INSTRUCTION_AVAILABLE 32
#define PF_RDPID_INSTRUCTION_AVAILABLE 33
#define PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE 34
#define PF_SSSE3_INSTRUCTIONS_AVAILABLE 36
#define PF_SSE4_1_INSTRUCTIONS_AVAILABLE 37
#define PF_SSE4_2_INSTRUCTIONS_AVAILABLE 38
#define PF_AVX_INSTRUCTIONS_AVAILABLE 39
#define PF_AVX2_INSTRUCTIONS_AVAILABLE 40
#define PF_AVX512F_INSTRUCTIONS_AVAILABLE 41
#define PF_ARM_V82_DP_INSTRUCTIONS_AVAILABLE 43
#define PF_ARM_V83_JSCVT_INSTRUCTIONS_AVAILABLE 44
#define PF_ARM_V83_LRCPC_INSTRUCTIONS_AVAILABLE 45
$endif(_WDMDDK_ || _WINNT_)
$if(_WDMDDK_)
#define MAXIMUM_WAIT_OBJECTS 64

View File

@@ -296,7 +296,7 @@ typedef LPOSVERSIONINFOA LPOSVERSIONINFO;
#endif /* UNICODE */
$endif (_WDMDDK_)
$if (_NTDDK_ || _WINNT_)
$if (_NTDDK_)
#ifndef _RTL_RUN_ONCE_DEF
#define _RTL_RUN_ONCE_DEF
@@ -309,26 +309,6 @@ $if (_NTDDK_ || _WINNT_)
#define RTL_RUN_ONCE_CTX_RESERVED_BITS 2
typedef union _RTL_RUN_ONCE {
PVOID Ptr;
} RTL_RUN_ONCE, *PRTL_RUN_ONCE;
typedef
_Function_class_(RTL_RUN_ONCE_INIT_FN)
_IRQL_requires_same_
ULONG
NTAPI
RTL_RUN_ONCE_INIT_FN(
_Inout_ PRTL_RUN_ONCE RunOnce,
_Inout_opt_ PVOID Parameter,
_Inout_opt_ PVOID* Context);
typedef RTL_RUN_ONCE_INIT_FN* PRTL_RUN_ONCE_INIT_FN;
#endif /* _RTL_RUN_ONCE_DEF */
$endif(_NTDDK_ || _WINNT_)
$if(_NTDDK_)
#define RTL_HASH_ALLOCATED_HEADER 0x00000001
#define RTL_HASH_RESERVED_SIGNATURE 0
@@ -365,6 +345,20 @@ $if(_NTDDK_)
#define VER_PLATFORM_WIN32_WINDOWS 1
#define VER_PLATFORM_WIN32_NT 2
typedef union _RTL_RUN_ONCE {
PVOID Ptr;
} RTL_RUN_ONCE, *PRTL_RUN_ONCE;
_Function_class_(RTL_RUN_ONCE_INIT_FN)
_IRQL_requires_same_
typedef ULONG /* LOGICAL */
(NTAPI *PRTL_RUN_ONCE_INIT_FN) (
_Inout_ PRTL_RUN_ONCE RunOnce,
_Inout_opt_ PVOID Parameter,
_Inout_opt_ PVOID *Context);
#endif /* _RTL_RUN_ONCE_DEF */
typedef enum _TABLE_SEARCH_RESULT {
TableEmptyTree,
TableFoundNode,

View File

@@ -74,7 +74,6 @@ $include(ntbasedef.h)
$include(interlocked.h)
$include(ketypes.h)
$include(extypes.h)
$include(rtltypes.h)
$include(winnt_old.h)
#ifdef __cplusplus

View File

@@ -457,40 +457,6 @@
#define PROCESSOR_ARCHITECTURE_AMD64 9
#define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
/* Processor features */
#define PF_FLOATING_POINT_PRECISION_ERRATA 0
#define PF_FLOATING_POINT_EMULATED 1
#define PF_COMPARE_EXCHANGE_DOUBLE 2
#define PF_MMX_INSTRUCTIONS_AVAILABLE 3
#define PF_PPC_MOVEMEM_64BIT_OK 4
#define PF_ALPHA_BYTE_INSTRUCTIONS 5
#define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
#define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
#define PF_RDTSC_INSTRUCTION_AVAILABLE 8
#define PF_PAE_ENABLED 9
#define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
#define PF_SSE_DAZ_MODE_AVAILABLE 11
#define PF_NX_ENABLED 12
#define PF_SSE3_INSTRUCTIONS_AVAILABLE 13
#define PF_COMPARE_EXCHANGE128 14
#define PF_COMPARE64_EXCHANGE128 15
#define PF_CHANNELS_ENABLED 16
#define PF_XSAVE_ENABLED 17
#define PF_ARM_VFP_32_REGISTERS_AVAILABLE 18
#define PF_ARM_NEON_INSTRUCTIONS_AVAILABLE 19
#define PF_SECOND_LEVEL_ADDRESS_TRANSLATION 20
#define PF_VIRT_FIRMWARE_ENABLED 21
#define PF_RDWRFSGSBASE_AVAILABLE 22
#define PF_FASTFAIL_AVAILABLE 23
#define PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE 24
#define PF_ARM_64BIT_LOADSTORE_ATOMIC 25
#define PF_ARM_EXTERNAL_CACHE_AVAILABLE 26
#define PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE 27
#define PF_RDRAND_INSTRUCTION_AVAILABLE 28
#define PF_ARM_V8_INSTRUCTIONS_AVAILABLE 29
#define PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE 30
#define PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE 31
/* also in ddk/ntifs.h */
#define FILE_ACTION_ADDED 0x00000001
#define FILE_ACTION_REMOVED 0x00000002
@@ -2783,6 +2749,25 @@ NTAPI
RtlQueryDepthSList(
_In_ PSLIST_HEADER ListHead);
#ifndef _RTL_RUN_ONCE_DEF
#define _RTL_RUN_ONCE_DEF
#define RTL_RUN_ONCE_CHECK_ONLY 0x00000001UL
#define RTL_RUN_ONCE_ASYNC 0x00000002UL
#define RTL_RUN_ONCE_INIT_FAILED 0x00000004UL
#define RTL_RUN_ONCE_CTX_RESERVED_BITS 2
#define RTL_RUN_ONCE_INIT {0}
typedef union _RTL_RUN_ONCE {
PVOID Ptr;
} RTL_RUN_ONCE, *PRTL_RUN_ONCE;
typedef DWORD WINAPI RTL_RUN_ONCE_INIT_FN(PRTL_RUN_ONCE, PVOID, PVOID*);
typedef RTL_RUN_ONCE_INIT_FN *PRTL_RUN_ONCE_INIT_FN;
#endif
#define RTL_CONDITION_VARIABLE_INIT {0}
#define RTL_CONDITION_VARIABLE_LOCKMODE_SHARED 0x1

View File

@@ -1,14 +1,10 @@
#include <mbstring.h>
#include <string.h>
#include <precomp.h>
/*
* @implemented
*/
int _mbscmp(const unsigned char *str1, const unsigned char *str2)
{
if (!MSVCRT_CHECK_PMT(str1 && str2))
return _NLSCMPERROR;
return strcmp((const char*)str1, (char*)str2);
}

View File

@@ -8,15 +8,6 @@ int
CDECL
_memicmp(const void *s1, const void *s2, size_t n)
{
#if (DLL_EXPORT_VERSION >= 0x600)
if (!s1 || !s2)
{
if (n)
MSVCRT_INVALID_PMT(NULL, EINVAL);
return n ? _NLSCMPERROR : 0;
}
#endif
if (n != 0)
{
const unsigned char *p1 = s1, *p2 = s2;

View File

@@ -1,73 +1,32 @@
/*
* msvcrt.dll math functions
*
* Copyright 2003 Alexandre Julliard <julliard@winehq.org>
* Copyright 2010 Piotr Caban <piotr@codeweavers.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*
*/
/* Copyright (C) 1998 DJ Delorie, see COPYING.DJ for details */
#include <precomp.h>
/***********************************************************************
* _gcvt (MSVCRT.@)
/*
* @implemented
*/
char* CDECL _gcvt(double number, int ndigit, char* buff)
char *
_gcvt (double value, int ndigits, char *buf)
{
if (!buff) {
*_errno() = EINVAL;
return NULL;
}
char *p = buf;
if (ndigit < 0) {
*_errno() = ERANGE;
return NULL;
}
sprintf (buf, "%-#.*g", ndigits, value);
sprintf(buff, "%.*g", ndigit, number);
return buff;
}
/***********************************************************************
* _gcvt_s (MSVCRT.@)
*/
int CDECL _gcvt_s(char* buff, size_t size, double number, int digits)
{
int len;
if (!buff) {
*_errno() = EINVAL;
return EINVAL;
}
if (digits < 0 || digits >= size) {
if (size)
buff[0] = '\0';
*_errno() = ERANGE;
return ERANGE;
}
len = _scprintf("%.*g", digits, number);
if (len > size) {
buff[0] = '\0';
*_errno() = ERANGE;
return ERANGE;
}
sprintf(buff, "%.*g", digits, number);
return 0;
/* It seems they expect us to return .XXXX instead of 0.XXXX */
if (*p == '-')
p++;
if (*p == '0' && p[1] == '.')
memmove (p, p + 1, strlen (p + 1) + 1);
/* They want Xe-YY, not X.e-YY, and XXXX instead of XXXX. */
p = strchr (buf, 'e');
if (!p)
{
p = buf + strlen (buf);
/* They don't want trailing zeroes. */
while (p[-1] == '0' && p > buf + 2)
*--p = '\0';
}
if (p > buf && p[-1] == '.')
memmove (p - 1, p, strlen (p) + 1);
return buf;
}

View File

@@ -753,6 +753,11 @@ PRINTER_INFO_9W * get_devmodeW(HANDLE hprn)
if (!res && (GetLastError() == ERROR_INSUFFICIENT_BUFFER))
{
pi9 = HeapAlloc(hProcessHeap, 0, needed);
if (!pi9)
{
ERR("Failed to allocate PRINTER_INFO_9W of %u bytes\n", needed);
return NULL;
}
res = GetPrinterW(hprn, 9, (LPBYTE)pi9, needed, &needed);
}
@@ -829,22 +834,29 @@ IntFixUpDevModeNames( PDOCUMENTPROPERTYHEADER pdphdr )
if (!res && (GetLastError() == ERROR_INSUFFICIENT_BUFFER))
{
pi2 = HeapAlloc(hProcessHeap, 0, needed);
if (!pi2)
{
ERR("Failed to allocate PRINTER_INFO_2W of %u bytes\n", needed);
return FALSE;
}
res = GetPrinterW( pdphdr->hPrinter, 2, (LPBYTE)pi2, needed, &needed);
}
if (res)
{
/* Check if the provided buffer is large enough */
WORD cbDevMode = pi2->pDevMode->dmSize + pi2->pDevMode->dmDriverExtra;
DWORD cbDevMode = pi2->pDevMode->dmSize + pi2->pDevMode->dmDriverExtra;
if (pdphdr->cbOut < cbDevMode)
{
res = 0;
ERR("cbOut (%lu) < cbDevMode(%u)\n", pdphdr->cbOut, cbDevMode);
res = FALSE;
goto Exit;
}
/* Copy the devmode */
RtlCopyMemory(pdphdr->pdmOut, pi2->pDevMode, cbDevMode);
FIXME("IFUDMN : Get Printer Name %S\n", pi2->pPrinterName);
TRACE("IFUDMN : Get Printer Name %S\n", pi2->pPrinterName);
StringCchCopyW( pdphdr->pdmOut->dmDeviceName, CCHDEVICENAME-1, pi2->pPrinterName );
pdphdr->pdmOut->dmDeviceName[CCHDEVICENAME-1] = 0;
}
@@ -852,6 +864,8 @@ IntFixUpDevModeNames( PDOCUMENTPROPERTYHEADER pdphdr )
{
ERR("IFUDMN : GetPrinterW failed with %u\n", GetLastError());
}
Exit:
HeapFree(hProcessHeap, 0, pi2);
return res;
}
@@ -1268,6 +1282,11 @@ PrinterProperties( HWND hWnd, HANDLE hPrinter )
if (!res && (GetLastError() == ERROR_INSUFFICIENT_BUFFER))
{
pi2 = HeapAlloc(hProcessHeap, 0, needed);
if (!pi2)
{
ERR("Failed to allocate PRINTER_INFO_2W of %u bytes\n", needed);
return FALSE;
}
res = GetPrinterW(hPrinter, 2, (LPBYTE)pi2, needed, &needed);
}
@@ -2801,6 +2820,11 @@ QuerySpoolMode( HANDLE hPrinter, PDWORD downloadFontsFlags, PDWORD dwVersion )
if (!res && (GetLastError() == ERROR_INSUFFICIENT_BUFFER))
{
pi2 = HeapAlloc(hProcessHeap, 0, needed);
if (!pi2)
{
ERR("Failed to allocate PRINTER_INFO_2W of %u bytes\n", needed);
return FALSE;
}
res = GetPrinterW(hPrinter, 2, (LPBYTE)pi2, needed, &needed);
}
@@ -3502,6 +3526,11 @@ INT_PTR CALLBACK file_dlg_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam
LPWSTR *output;
filename = HeapAlloc(GetProcessHeap(), 0, (len + 1) * sizeof(WCHAR));
if (!filename)
{
ERR("Failed to allocate filename of %u bytes\n", (len + 1) * sizeof(WCHAR));
return FALSE;
}
GetDlgItemTextW(hwnd, EDITBOX, filename, len + 1);
if(GetFileAttributesW(filename) != INVALID_FILE_ATTRIBUTES)
@@ -3564,6 +3593,12 @@ StartDocDlgW( HANDLE hPrinter, DOCINFOW *doc )
if(GetLastError() != ERROR_INSUFFICIENT_BUFFER)
return NULL;
pi5 = HeapAlloc(GetProcessHeap(), 0, len);
if (!pi5)
{
ERR("Failed to allocate PRINTER_INFO_5W of %u bytes\n", len);
return NULL;
}
GetPrinterW(hPrinter, 5, (LPBYTE)pi5, len, &len);
if (!pi5->pPortName || wcsicmp(pi5->pPortName, FILE_Port))
{
@@ -3591,6 +3626,12 @@ StartDocDlgW( HANDLE hPrinter, DOCINFOW *doc )
return NULL;
}
ret = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
if (!ret)
{
ERR("Failed to allocate path name buffer of %u bytes\n", len * sizeof(WCHAR));
HeapFree(GetProcessHeap(), 0, name);
return NULL;
}
GetFullPathNameW(name, len, ret, NULL);
HeapFree(GetProcessHeap(), 0, name);
}
@@ -3610,6 +3651,11 @@ StartDocDlgW( HANDLE hPrinter, DOCINFOW *doc )
return NULL;
ret = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
if (!ret)
{
ERR("Failed to allocate path name buffer of %u bytes\n", len * sizeof(WCHAR));
return NULL;
}
GetFullPathNameW(doc->lpszOutput, len, ret, NULL);
attr = GetFileAttributesW(ret);
@@ -3654,7 +3700,14 @@ StartDocDlgA( HANDLE hPrinter, DOCINFOA *doc )
{
DWORD len = WideCharToMultiByte(CP_ACP, 0, retW, -1, NULL, 0, NULL, NULL);
ret = HeapAlloc(GetProcessHeap(), 0, len);
WideCharToMultiByte(CP_ACP, 0, retW, -1, ret, len, NULL, NULL);
if (ret)
{
WideCharToMultiByte(CP_ACP, 0, retW, -1, ret, len, NULL, NULL);
}
else
{
ERR("Failed to allocate path name buffer of %u bytes\n", len);
}
HeapFree(GetProcessHeap(), 0, retW);
}

View File

@@ -807,9 +807,6 @@ ExitThreadCallback(PETHREAD Thread)
UserDereferenceObject(ref->obj);
psle = PopEntryList(&ptiCurrent->ReferencesList);
#if DBG
ptiCurrent->cRefObjectCo--;
#endif
}
}
@@ -869,8 +866,6 @@ ExitThreadCallback(PETHREAD Thread)
}
ptiCurrent->hEventQueueClient = NULL;
ASSERT(ptiCurrent->cRefObjectCo == 0);
/* The thread is dying */
PsSetThreadWin32Thread(Thread /*ptiCurrent->pEThread*/, NULL, ptiCurrent);

View File

@@ -34,9 +34,6 @@ UserRefObjectCo(PVOID obj, PUSER_REFERENCE_ENTRY UserReferenceEntry)
UserReferenceEntry->obj = obj;
UserReferenceObject(obj);
PushEntryList(&W32Thread->ReferencesList, &UserReferenceEntry->Entry);
#if DBG
W32Thread->cRefObjectCo++;
#endif
}
static __inline VOID
@@ -56,9 +53,6 @@ UserDerefObjectCo(PVOID obj)
ASSERT(obj == UserReferenceEntry->obj);
UserDereferenceObject(obj);
#if DBG
W32Thread->cRefObjectCo--;
#endif
}
void FreeProcMarkObject(_In_ PVOID Object);

View File

@@ -542,16 +542,15 @@ co_IntUpdateWindows(PWND Wnd, ULONG Flags, BOOL Recurse)
Wnd->state &= ~WNDS_UPDATEDIRTY;
Wnd->state2 |= WNDS2_WMPAINTSENT;
USER_REFERENCE_ENTRY Ref;
UserRefObjectCo(Wnd, &Ref);
co_IntSendMessage(hWnd, WM_PAINT, 0, 0);
if (Wnd->state & WNDS_PAINTNOTPROCESSED)
{
USER_REFERENCE_ENTRY Ref;
UserRefObjectCo(Wnd, &Ref);
co_IntPaintWindows(Wnd, RDW_NOCHILDREN, FALSE);
UserDerefObjectCo(Wnd);
}
UserDerefObjectCo(Wnd);
}
// Force flags as a toggle. Fixes msg:test_paint_messages:WmChildPaintNc.

View File

@@ -158,7 +158,6 @@ typedef struct _THREADINFO
ULONG cExclusiveLocks;
#if DBG
USHORT acExclusiveLockCount[GDIObjTypeTotal + 1];
UINT cRefObjectCo;
#endif
#endif // __cplusplus
} THREADINFO;

View File

@@ -581,7 +581,6 @@ LRESULT co_UserFreeWindow(PWND Window,
PWND Child;
PMENU Menu;
BOOLEAN BelongsToThreadData;
USER_REFERENCE_ENTRY Ref;
ASSERT(Window);
@@ -739,7 +738,7 @@ LRESULT co_UserFreeWindow(PWND Window,
WndSetChild(Window, NULL);
WndSetLastActive(Window, NULL);
UserRefObjectCo(Window, &Ref);
UserReferenceObject(Window);
UserMarkObjectDestroy(Window);
IntDestroyScrollBars(Window);
@@ -768,7 +767,7 @@ LRESULT co_UserFreeWindow(PWND Window,
// ASSERT(Window != NULL);
UserFreeWindowInfo(Window->head.pti, Window);
UserDerefObjectCo(Window);
UserDereferenceObject(Window);
UserDeleteObject(UserHMGetHandle(Window), TYPE_WINDOW);
return 0;