mirror of
https://github.com/reactos/reactos
synced 2025-10-08 17:32:43 +02:00
Compare commits
35 Commits
amd64/use-
...
taskmgr_ac
Author | SHA1 | Date | |
---|---|---|---|
|
b09ee4e0a0 | ||
|
3c1eb7f920 | ||
|
1d31de59d1 | ||
|
46b4b5581d | ||
|
410b1030c0 | ||
|
1a7ab2fe68 | ||
|
6048ebeff9 | ||
|
70f6ed8ee3 | ||
|
47c1dcd023 | ||
|
b66441d581 | ||
|
50f367fa58 | ||
|
34066e475a | ||
|
6528ab8fcb | ||
|
65ce20896a | ||
|
142c35fcce | ||
|
e15d68ba5d | ||
|
3e46a8673d | ||
|
f53be82158 | ||
|
f744bb2994 | ||
|
1aa76275ac | ||
|
ab1868c7bf | ||
|
4ba8af9cae | ||
|
dd54cd32cf | ||
|
c0ea1f96ef | ||
|
f4de5ceb9e | ||
|
8cb56e77a6 | ||
|
7fd6f86803 | ||
|
697a52aa33 | ||
|
08fcf0c58b | ||
|
c6230ba255 | ||
|
8a335a3141 | ||
|
26fe3616fe | ||
|
a4213d491d | ||
|
0e68e27ff6 | ||
|
02df49ebd8 |
@@ -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__ */
|
||||
|
@@ -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)));
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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]
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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"
|
||||
|
@@ -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"
|
||||
|
@@ -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)"
|
||||
|
@@ -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"
|
||||
|
@@ -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"
|
||||
|
@@ -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"
|
||||
|
@@ -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"
|
||||
|
@@ -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"
|
||||
|
@@ -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 "קירבה בין מעבדים"
|
||||
|
@@ -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"
|
||||
|
@@ -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"
|
||||
|
@@ -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"
|
||||
|
@@ -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 "プロセッサの関係"
|
||||
|
@@ -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 "프로세서 선호도"
|
||||
|
@@ -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"
|
||||
|
@@ -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"
|
||||
|
@@ -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"
|
||||
|
@@ -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"
|
||||
|
@@ -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"
|
||||
|
@@ -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"
|
||||
|
@@ -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 "Семейство процессоров"
|
||||
|
@@ -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"
|
||||
|
@@ -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"
|
||||
|
@@ -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"
|
||||
|
@@ -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"
|
||||
|
@@ -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 "Відповідність процесорів"
|
||||
|
@@ -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 "处理器关联"
|
||||
|
@@ -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 "處理器親和性"
|
||||
|
@@ -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 "處理器親和性"
|
||||
|
@@ -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)
|
||||
|
@@ -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)
|
||||
{
|
||||
|
@@ -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)
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -224,9 +224,4 @@ RtlDoesFileExists_UStr(
|
||||
IN PUNICODE_STRING FileName
|
||||
);
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
RtlpInitializeKeyedEvent(
|
||||
VOID);
|
||||
|
||||
/* EOF */
|
||||
|
@@ -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))
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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)
|
||||
|
@@ -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);
|
||||
|
@@ -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_ */
|
||||
|
@@ -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);
|
||||
}
|
||||
|
30
dll/win32/browseui/settings.h
Normal file
30
dll/win32/browseui/settings.h
Normal 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;
|
@@ -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);
|
||||
}
|
||||
|
@@ -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);
|
||||
|
@@ -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)
|
||||
|
@@ -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");
|
||||
|
@@ -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)
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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
@@ -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();
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -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
|
||||
);
|
||||
|
||||
|
@@ -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
|
||||
//
|
||||
|
@@ -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 " ")
|
||||
|
@@ -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;
|
||||
|
@@ -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.")
|
||||
|
@@ -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;
|
||||
|
||||
//
|
||||
|
@@ -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
|
||||
//
|
||||
|
@@ -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
|
||||
//
|
||||
|
@@ -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
|
||||
|
733
sdk/include/reactos/x86x64/Amd/Cpuid.h
Normal file
733
sdk/include/reactos/x86x64/Amd/Cpuid.h
Normal 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
|
208
sdk/include/reactos/x86x64/Cpuid.h
Normal file
208
sdk/include/reactos/x86x64/Cpuid.h
Normal 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 Programmer’s 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;
|
6532
sdk/include/reactos/x86x64/Intel/ArchitecturalMsr.h
Normal file
6532
sdk/include/reactos/x86x64/Intel/ArchitecturalMsr.h
Normal file
File diff suppressed because it is too large
Load Diff
4083
sdk/include/reactos/x86x64/Intel/Cpuid.h
Normal file
4083
sdk/include/reactos/x86x64/Intel/Cpuid.h
Normal file
File diff suppressed because it is too large
Load Diff
97
sdk/include/reactos/x86x64/Msr.h
Normal file
97
sdk/include/reactos/x86x64/Msr.h
Normal 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;
|
@@ -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
|
||||
|
||||
|
@@ -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,
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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.
|
||||
|
@@ -158,7 +158,6 @@ typedef struct _THREADINFO
|
||||
ULONG cExclusiveLocks;
|
||||
#if DBG
|
||||
USHORT acExclusiveLockCount[GDIObjTypeTotal + 1];
|
||||
UINT cRefObjectCo;
|
||||
#endif
|
||||
#endif // __cplusplus
|
||||
} THREADINFO;
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user