From 25e2f5f277b32450943e741398c2d579c1f10d05 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Wed, 24 Apr 2024 09:10:29 +0900 Subject: [PATCH 001/182] [SHELL32_APITEST] Make SHChangeNotify testcase more stable (#6796) Make the testcase more stable and faster. Reduce code. JIRA issue: CORE-13950 - Use WM_COPYDATA message to communicate with shell32_apitest_sub.exe. - Use concept of "stage" and "step". - Do multiple checks in one step. - Flush notification by using (SHCNF_FLUSH | SHCNF_FLUSHNOWAIT) flags. --- .../apitests/shell32/SHChangeNotify.cpp | 1308 +++++++---------- .../apitests/shell32/ShellExecCmdLine.cpp | 2 +- .../apitests/shell32/shell32_apitest_sub.cpp | 397 ++--- .../apitests/shell32/shell32_apitest_sub.h | 66 +- 4 files changed, 711 insertions(+), 1062 deletions(-) diff --git a/modules/rostests/apitests/shell32/SHChangeNotify.cpp b/modules/rostests/apitests/shell32/SHChangeNotify.cpp index 7a95fc470f6..498c3ad939d 100644 --- a/modules/rostests/apitests/shell32/SHChangeNotify.cpp +++ b/modules/rostests/apitests/shell32/SHChangeNotify.cpp @@ -2,942 +2,636 @@ * PROJECT: ReactOS api tests * LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later) * PURPOSE: Test for SHChangeNotify - * COPYRIGHT: Copyright 2020-2021 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com) + * COPYRIGHT: Copyright 2020-2024 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com) */ -// NOTE: This test program closes the Explorer windows before tests. +// NOTE: This testcase requires shell32_apitest_sub.exe. #include "shelltest.h" #include "shell32_apitest_sub.h" -#include -#include -#include - -// --- The selection of tests --- -#define DISABLE_THIS_TESTCASE -#define NO_TRIVIAL -//#define NO_INTERRUPT_LEVEL -//#define NO_SHELL_LEVEL -#define NEW_DELIVERY_ONLY -//#define RANDOM_HALF -#define RANDOM_QUARTER - -// --- Show the elapsed time by GetTickCount() --- -//#define ENTRY_TICK -#define GROUP_TICK -#define TOTAL_TICK - -static HWND s_hwnd = NULL; -static WCHAR s_szSubProgram[MAX_PATH]; -static HANDLE s_hThread = NULL; -static HANDLE s_hEvent = NULL; - -static BOOL DoCreateEmptyFile(LPCWSTR pszFileName) -{ - FILE *fp = _wfopen(pszFileName, L"wb"); - if (fp) - fclose(fp); - return fp != NULL; -} +#include -struct TEST_ENTRY; +#define NUM_STAGE 4 +#define NUM_STEP 8 +#define NUM_CHECKS 12 +#define INTERVAL 600 +#define MAX_EVENT_TYPE 6 -typedef BOOL (*ACTION)(const struct TEST_ENTRY *entry); +static HWND s_hMainWnd = NULL, s_hSubWnd = NULL; +static WCHAR s_szSubProgram[MAX_PATH]; // shell32_apitest_sub.exe +static HANDLE s_hThread = NULL; +static INT s_iStage = -1, s_iStep = -1; +static BYTE s_abChecks[NUM_CHECKS] = { 0 }; // Flags for testing +static BOOL s_bGotUpdateDir = FALSE; // Got SHCNE_UPDATEDIR? -typedef struct TEST_ENTRY -{ - INT line; - DIRTYPE iWriteDir; - LPCSTR pattern; - LPCWSTR path1; - LPCWSTR path2; - ACTION action; -} TEST_ENTRY; - -#define TEST_FILE L"_TEST_.txt" -#define TEST_FILE_KAI L"_TEST_KAI_.txt" -#define TEST_DIR L"_TESTDIR_" -#define TEST_DIR_KAI L"_TESTDIR_KAI_" -#define MOVE_FILE(from, to) MoveFileW((from), (to)) - -static BOOL DoAction1(const TEST_ENTRY *entry) +static BOOL DoCreateFile(LPCWSTR pszFileName) { - LPWSTR pszPath = DoGetDir(entry->iWriteDir); - PathAppendW(pszPath, TEST_FILE); - ok(DoCreateEmptyFile(pszPath), "Line %d: DoCreateEmptyFile failed\n", entry->line); - return TRUE; + HANDLE hFile = ::CreateFileW(pszFileName, GENERIC_WRITE, FILE_SHARE_READ, NULL, + CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + ::CloseHandle(hFile); + return hFile != INVALID_HANDLE_VALUE; } -static BOOL DoAction2(const TEST_ENTRY *entry) +static void DoDeleteDirectory(LPCWSTR pszDir) { - LPWSTR pszPath1 = DoGetDir(entry->iWriteDir), pszPath2 = DoGetDir(entry->iWriteDir); - PathAppendW(pszPath1, TEST_FILE); - PathAppendW(pszPath2, TEST_FILE_KAI); - ok(MOVE_FILE(pszPath1, pszPath2), "Line %d: MOVE_FILE(%ls, %ls) failed (%ld)\n", - entry->line, pszPath1, pszPath2, GetLastError()); - return TRUE; + WCHAR szPath[MAX_PATH]; + ZeroMemory(szPath, sizeof(szPath)); + StringCchCopyW(szPath, _countof(szPath), pszDir); // Double-NULL terminated + SHFILEOPSTRUCTW FileOp = { NULL, FO_DELETE, szPath, NULL, FOF_NOCONFIRMATION | FOF_SILENT }; + SHFileOperation(&FileOp); } -static BOOL DoAction3(const TEST_ENTRY *entry) +static INT GetEventType(LONG lEvent) { - LPWSTR pszPath1 = DoGetDir(entry->iWriteDir), pszPath2 = DoGetDir(entry->iWriteDir); - PathAppendW(pszPath1, TEST_FILE_KAI); - PathAppendW(pszPath2, TEST_FILE); - ok(MOVE_FILE(pszPath1, pszPath2), "Line %d: MOVE_FILE(%ls, %ls) failed (%ld)\n", - entry->line, pszPath1, pszPath2, GetLastError()); - return TRUE; + switch (lEvent) + { + case SHCNE_CREATE: return 0; + case SHCNE_DELETE: return 1; + case SHCNE_RENAMEITEM: return 2; + case SHCNE_MKDIR: return 3; + case SHCNE_RMDIR: return 4; + case SHCNE_RENAMEFOLDER: return 5; + C_ASSERT(5 + 1 == MAX_EVENT_TYPE); + default: return -1; + } } -static BOOL DoAction4(const TEST_ENTRY *entry) -{ - LPWSTR pszPath = DoGetDir(entry->iWriteDir); - PathAppendW(pszPath, TEST_FILE); - ok(DeleteFileW(pszPath), "Line %d: DeleteFileW(%ls) failed (%ld)\n", - entry->line, pszPath, GetLastError()); - return TRUE; -} +#define FILE_1 L"_TESTFILE_1_.txt" +#define FILE_2 L"_TESTFILE_2_.txt" +#define DIR_1 L"_TESTDIR_1_" +#define DIR_2 L"_TESTDIR_2_" -static BOOL DoAction5(const TEST_ENTRY *entry) -{ - LPWSTR pszPath = DoGetDir(entry->iWriteDir); - PathAppendW(pszPath, TEST_DIR); - ok(CreateDirectoryW(pszPath, NULL), "Line %d: CreateDirectoryW(%ls) failed (%ld)\n", - entry->line, pszPath, GetLastError()); - return TRUE; -} +static WCHAR s_szDir1[MAX_PATH]; +static WCHAR s_szDir1InDir1[MAX_PATH]; +static WCHAR s_szDir2InDir1[MAX_PATH]; +static WCHAR s_szFile1InDir1InDir1[MAX_PATH]; +static WCHAR s_szFile1InDir1[MAX_PATH]; +static WCHAR s_szFile2InDir1[MAX_PATH]; -static BOOL DoAction6(const TEST_ENTRY *entry) +static void DoDeleteFilesAndDirs(void) { - LPWSTR pszPath1 = DoGetDir(entry->iWriteDir), pszPath2 = DoGetDir(entry->iWriteDir); - PathAppendW(pszPath1, TEST_DIR); - PathAppendW(pszPath2, TEST_DIR_KAI); - ok(MOVE_FILE(pszPath1, pszPath2), "Line %d: MOVE_FILE(%ls, %ls) failed (%ld)\n", - entry->line, pszPath1, pszPath2, GetLastError()); - return TRUE; + ::DeleteFileW(s_szFile1InDir1); + ::DeleteFileW(s_szFile2InDir1); + ::DeleteFileW(s_szFile1InDir1InDir1); + DoDeleteDirectory(s_szDir1InDir1); + DoDeleteDirectory(s_szDir2InDir1); + DoDeleteDirectory(s_szDir1); } -static BOOL DoAction7(const TEST_ENTRY *entry) +static void TEST_Quit(void) { - LPWSTR pszPath1 = DoGetDir(entry->iWriteDir), pszPath2 = DoGetDir(entry->iWriteDir); - PathAppendW(pszPath1, TEST_DIR_KAI); - PathAppendW(pszPath2, TEST_DIR); - ok(MOVE_FILE(pszPath1, pszPath2), "Line %d: MOVE_FILE(%ls, %ls) failed (%ld)\n", - entry->line, pszPath1, pszPath2, GetLastError()); - return TRUE; -} + CloseHandle(s_hThread); + s_hThread = NULL; -static BOOL DoAction8(const TEST_ENTRY *entry) -{ - LPWSTR pszPath = DoGetDir(entry->iWriteDir); - PathAppendW(pszPath, TEST_DIR); - ok(RemoveDirectoryW(pszPath), "Line %d: RemoveDirectoryW(%ls) failed (%ld)\n", - entry->line, pszPath, GetLastError()); - return TRUE; -} + PostMessageW(s_hSubWnd, WM_COMMAND, IDNO, 0); // Finish + DoWaitForWindow(SUB_CLASSNAME, SUB_CLASSNAME, TRUE, TRUE); // Close sub-windows -static BOOL DoAction9(const TEST_ENTRY *entry) -{ - LPWSTR pszPath = DoGetDir(entry->iWriteDir); - PathAppendW(pszPath, TEST_FILE); - SHChangeNotify(SHCNE_CREATE, SHCNF_PATHW | SHCNF_FLUSH, pszPath, NULL); - return FALSE; + DoDeleteFilesAndDirs(); } -static BOOL DoAction10(const TEST_ENTRY *entry) +static BOOL FindSubProgram(void) { - LPWSTR pszPath = DoGetDir(entry->iWriteDir); - PathAppendW(pszPath, TEST_FILE); - SHChangeNotify(SHCNE_DELETE, SHCNF_PATHW | SHCNF_FLUSH, pszPath, NULL); - return FALSE; -} + GetModuleFileNameW(NULL, s_szSubProgram, _countof(s_szSubProgram)); + PathRemoveFileSpecW(s_szSubProgram); + PathAppendW(s_szSubProgram, L"shell32_apitest_sub.exe"); -static BOOL DoAction11(const TEST_ENTRY *entry) -{ - LPWSTR pszPath = DoGetDir(entry->iWriteDir); - PathAppendW(pszPath, TEST_DIR); - SHChangeNotify(SHCNE_MKDIR, SHCNF_PATHW | SHCNF_FLUSH, pszPath, NULL); - return FALSE; + if (!PathFileExistsW(s_szSubProgram)) + { + PathRemoveFileSpecW(s_szSubProgram); + PathAppendW(s_szSubProgram, L"testdata\\shell32_apitest_sub.exe"); + + if (!PathFileExistsW(s_szSubProgram)) + return FALSE; + } + + return TRUE; } -static BOOL DoAction12(const TEST_ENTRY *entry) +static void DoBuildFilesAndDirs(void) { - LPWSTR pszPath = DoGetDir(entry->iWriteDir); - PathAppendW(pszPath, TEST_DIR); - SHChangeNotify(SHCNE_RMDIR, SHCNF_PATHW | SHCNF_FLUSH, pszPath, NULL); - return FALSE; -} + WCHAR szPath1[MAX_PATH]; + SHGetSpecialFolderPathW(NULL, szPath1, CSIDL_PERSONAL, FALSE); // My Documents + PathAppendW(szPath1, DIR_1); + StringCchCopyW(s_szDir1, _countof(s_szDir1), szPath1); -#define WRITEDIR_0 DIRTYPE_DESKTOP -static WCHAR s_szDesktop[MAX_PATH]; -static WCHAR s_szTestFile0[MAX_PATH]; -static WCHAR s_szTestFile0Kai[MAX_PATH]; -static WCHAR s_szTestDir0[MAX_PATH]; -static WCHAR s_szTestDir0Kai[MAX_PATH]; + PathAppendW(szPath1, DIR_1); + StringCchCopyW(s_szDir1InDir1, _countof(s_szDir1InDir1), szPath1); + PathRemoveFileSpecW(szPath1); -#define WRITEDIR_1 DIRTYPE_MYDOCUMENTS -static WCHAR s_szDocuments[MAX_PATH]; -static WCHAR s_szTestFile1[MAX_PATH]; -static WCHAR s_szTestFile1Kai[MAX_PATH]; -static WCHAR s_szTestDir1[MAX_PATH]; -static WCHAR s_szTestDir1Kai[MAX_PATH]; + PathAppendW(szPath1, DIR_2); + StringCchCopyW(s_szDir2InDir1, _countof(s_szDir2InDir1), szPath1); + PathRemoveFileSpecW(szPath1); -static void DoDeleteFilesAndDirs(void) -{ - DeleteFileW(TEMP_FILE); - DeleteFileW(s_szTestFile0); - DeleteFileW(s_szTestFile0Kai); - DeleteFileW(s_szTestFile1); - DeleteFileW(s_szTestFile1Kai); - RemoveDirectoryW(s_szTestDir0); - RemoveDirectoryW(s_szTestDir0Kai); - RemoveDirectoryW(s_szTestDir1); - RemoveDirectoryW(s_szTestDir1Kai); -} + PathAppendW(szPath1, DIR_1); + PathAppendW(szPath1, FILE_1); + StringCchCopyW(s_szFile1InDir1InDir1, _countof(s_szFile1InDir1InDir1), szPath1); + PathRemoveFileSpecW(szPath1); + PathRemoveFileSpecW(szPath1); -static const TEST_ENTRY s_group_00[] = -{ - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction1 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction2 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction3 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction4 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction5 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction6 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction7 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction8 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction9 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction10 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction11 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction12 }, - - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction1 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction2 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction3 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction4 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction5 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction6 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction7 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction8 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction9 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction10 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction11 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction12 }, -}; + PathAppendW(szPath1, FILE_1); + StringCchCopyW(s_szFile1InDir1, _countof(s_szFile1InDir1), szPath1); + PathRemoveFileSpecW(szPath1); -static const TEST_ENTRY s_group_01[] = -{ - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction1 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction2 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction3 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction4 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction5 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction6 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction7 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction8 }, - { __LINE__, WRITEDIR_0, "0100000", s_szTestFile0, L"", DoAction9 }, - { __LINE__, WRITEDIR_0, "0010000", s_szTestFile0, L"", DoAction10 }, - { __LINE__, WRITEDIR_0, "0001000", s_szTestDir0, L"", DoAction11 }, - { __LINE__, WRITEDIR_0, "0000100", s_szTestDir0, L"", DoAction12 }, - - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction1 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction2 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction3 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction4 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction5 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction6 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction7 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction8 }, - { __LINE__, WRITEDIR_1, "0100000", s_szTestFile1, L"", DoAction9 }, - { __LINE__, WRITEDIR_1, "0010000", s_szTestFile1, L"", DoAction10 }, - { __LINE__, WRITEDIR_1, "0001000", s_szTestDir1, L"", DoAction11 }, - { __LINE__, WRITEDIR_1, "0000100", s_szTestDir1, L"", DoAction12 }, -}; + PathAppendW(szPath1, FILE_2); + StringCchCopyW(s_szFile2InDir1, _countof(s_szFile2InDir1), szPath1); + PathRemoveFileSpecW(szPath1); -static const TEST_ENTRY s_group_02[] = -{ - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction1 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction2 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction3 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction4 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction5 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction6 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction7 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction8 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction9 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction10 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction11 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction12 }, - - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction1 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction2 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction3 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction4 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction5 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction6 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction7 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction8 }, - { __LINE__, WRITEDIR_1, "0100000", s_szTestFile1, L"", DoAction9 }, - { __LINE__, WRITEDIR_1, "0010000", s_szTestFile1, L"", DoAction10 }, - { __LINE__, WRITEDIR_1, "0001000", s_szTestDir1, L"", DoAction11 }, - { __LINE__, WRITEDIR_1, "0000100", s_szTestDir1, L"", DoAction12 }, -}; +#define TRACE_PATH(path) trace(#path ": %ls\n", path) + TRACE_PATH(s_szDir1); + TRACE_PATH(s_szDir1InDir1); + TRACE_PATH(s_szFile1InDir1); + TRACE_PATH(s_szFile1InDir1InDir1); + TRACE_PATH(s_szFile2InDir1); +#undef TRACE_PATH -static const TEST_ENTRY s_group_03[] = -{ - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction1 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction2 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction3 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction4 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction5 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction6 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction7 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction8 }, - { __LINE__, WRITEDIR_0, "0100000", s_szTestFile0, L"", DoAction9 }, - { __LINE__, WRITEDIR_0, "0010000", s_szTestFile0, L"", DoAction10 }, - { __LINE__, WRITEDIR_0, "0001000", s_szTestDir0, L"", DoAction11 }, - { __LINE__, WRITEDIR_0, "0000100", s_szTestDir0, L"", DoAction12 }, - - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction1 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction2 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction3 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction4 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction5 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction6 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction7 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction8 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction9 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction10 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction11 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction12 }, -}; + DoDeleteFilesAndDirs(); -static const TEST_ENTRY s_group_04[] = -{ - { __LINE__, WRITEDIR_0, "0100000", s_szTestFile0, L"", DoAction1 }, - { __LINE__, WRITEDIR_0, "1000000", s_szTestFile0, s_szTestFile0Kai, DoAction2 }, - { __LINE__, WRITEDIR_0, "1000000", s_szTestFile0Kai, s_szTestFile0, DoAction3 }, - { __LINE__, WRITEDIR_0, "0010000", s_szTestFile0, L"", DoAction4 }, - { __LINE__, WRITEDIR_0, "0001000", s_szTestDir0, L"", DoAction5 }, - { __LINE__, WRITEDIR_0, "0000010", s_szTestDir0, s_szTestDir0Kai, DoAction6 }, - { __LINE__, WRITEDIR_0, "0000010", s_szTestDir0Kai, s_szTestDir0, DoAction7 }, - { __LINE__, WRITEDIR_0, "0000100", s_szTestDir0, L"", DoAction8 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction9 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction10 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction11 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction12 }, - - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction1 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction2 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction3 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction4 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction5 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction6 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction7 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction8 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction9 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction10 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction11 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction12 }, -}; + ::CreateDirectoryW(s_szDir1, NULL); + ok_int(!!PathIsDirectoryW(s_szDir1), TRUE); -static const TEST_ENTRY s_group_05[] = -{ - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction1 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction2 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction3 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction4 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction5 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction6 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction7 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction8 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction9 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction10 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction11 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction12 }, - - { __LINE__, WRITEDIR_1, "0100000", s_szTestFile1, L"", DoAction1 }, - { __LINE__, WRITEDIR_1, "1000000", s_szTestFile1, s_szTestFile1Kai, DoAction2 }, - { __LINE__, WRITEDIR_1, "1000000", s_szTestFile1Kai, s_szTestFile1, DoAction3 }, - { __LINE__, WRITEDIR_1, "0010000", s_szTestFile1, L"", DoAction4 }, - { __LINE__, WRITEDIR_1, "0001000", s_szTestDir1, L"", DoAction5 }, - { __LINE__, WRITEDIR_1, "0000010", s_szTestDir1, s_szTestDir1Kai, DoAction6 }, - { __LINE__, WRITEDIR_1, "0000010", s_szTestDir1Kai, s_szTestDir1, DoAction7 }, - { __LINE__, WRITEDIR_1, "0000100", s_szTestDir1, L"", DoAction8 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction9 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction10 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction11 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction12 }, -}; + DoDeleteDirectory(s_szDir1InDir1); + ok_int(!PathIsDirectoryW(s_szDir1InDir1), TRUE); +} -static const TEST_ENTRY s_group_06[] = +static void DoTestEntry(LONG lEvent, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) { - { __LINE__, WRITEDIR_0, "0100000", s_szTestFile0, L"", DoAction1 }, - { __LINE__, WRITEDIR_0, "1000000", s_szTestFile0, s_szTestFile0Kai, DoAction2 }, - { __LINE__, WRITEDIR_0, "1000000", s_szTestFile0Kai, s_szTestFile0, DoAction3 }, - { __LINE__, WRITEDIR_0, "0010000", s_szTestFile0, L"", DoAction4 }, - { __LINE__, WRITEDIR_0, "0001000", s_szTestDir0, L"", DoAction5 }, - { __LINE__, WRITEDIR_0, "0000010", s_szTestDir0, s_szTestDir0Kai, DoAction6 }, - { __LINE__, WRITEDIR_0, "0000010", s_szTestDir0Kai, s_szTestDir0, DoAction7 }, - { __LINE__, WRITEDIR_0, "0000100", s_szTestDir0, L"", DoAction8 }, - { __LINE__, WRITEDIR_0, "0100000", s_szTestFile0, L"", DoAction9 }, - { __LINE__, WRITEDIR_0, "0010000", s_szTestFile0, L"", DoAction10 }, - { __LINE__, WRITEDIR_0, "0001000", s_szTestDir0, L"", DoAction11 }, - { __LINE__, WRITEDIR_0, "0000100", s_szTestDir0, L"", DoAction12 }, - - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction1 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction2 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction3 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction4 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction5 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction6 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction7 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction8 }, - { __LINE__, WRITEDIR_1, "0100000", s_szTestFile1, L"", DoAction9 }, - { __LINE__, WRITEDIR_1, "0010000", s_szTestFile1, L"", DoAction10 }, - { __LINE__, WRITEDIR_1, "0001000", s_szTestDir1, L"", DoAction11 }, - { __LINE__, WRITEDIR_1, "0000100", s_szTestDir1, L"", DoAction12 }, -}; + WCHAR szPath1[MAX_PATH], szPath2[MAX_PATH]; -static const TEST_ENTRY s_group_07[] = -{ - { __LINE__, WRITEDIR_0, "0100000", s_szTestFile0, L"", DoAction1 }, - { __LINE__, WRITEDIR_0, "1000000", s_szTestFile0, s_szTestFile0Kai, DoAction2 }, - { __LINE__, WRITEDIR_0, "1000000", s_szTestFile0Kai, s_szTestFile0, DoAction3 }, - { __LINE__, WRITEDIR_0, "0010000", s_szTestFile0, L"", DoAction4 }, - { __LINE__, WRITEDIR_0, "0001000", s_szTestDir0, L"", DoAction5 }, - { __LINE__, WRITEDIR_0, "0000010", s_szTestDir0, s_szTestDir0Kai, DoAction6 }, - { __LINE__, WRITEDIR_0, "0000010", s_szTestDir0Kai, s_szTestDir0, DoAction7 }, - { __LINE__, WRITEDIR_0, "0000100", s_szTestDir0, L"", DoAction8 }, - { __LINE__, WRITEDIR_0, "0100000", s_szTestFile0, L"", DoAction9 }, - { __LINE__, WRITEDIR_0, "0010000", s_szTestFile0, L"", DoAction10 }, - { __LINE__, WRITEDIR_0, "0001000", s_szTestDir0, L"", DoAction11 }, - { __LINE__, WRITEDIR_0, "0000100", s_szTestDir0, L"", DoAction12 }, - - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction1 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction2 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction3 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction4 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction5 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction6 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction7 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction8 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction9 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction10 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction11 }, - { __LINE__, WRITEDIR_1, "0000000", L"", L"", DoAction12 }, -}; + szPath1[0] = szPath2[0] = 0; + SHGetPathFromIDListW(pidl1, szPath1); + SHGetPathFromIDListW(pidl2, szPath2); -static const TEST_ENTRY s_group_08[] = -{ - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction1 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction2 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction3 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction4 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction5 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction6 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction7 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction8 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction9 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction10 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction11 }, - { __LINE__, WRITEDIR_0, "0000000", L"", L"", DoAction12 }, - - { __LINE__, WRITEDIR_1, "0100000", s_szTestFile1, L"", DoAction1 }, - { __LINE__, WRITEDIR_1, "1000000", s_szTestFile1, s_szTestFile1Kai, DoAction2 }, - { __LINE__, WRITEDIR_1, "1000000", s_szTestFile1Kai, s_szTestFile1, DoAction3 }, - { __LINE__, WRITEDIR_1, "0010000", s_szTestFile1, L"", DoAction4 }, - { __LINE__, WRITEDIR_1, "0001000", s_szTestDir1, L"", DoAction5 }, - { __LINE__, WRITEDIR_1, "0000010", s_szTestDir1, s_szTestDir1Kai, DoAction6 }, - { __LINE__, WRITEDIR_1, "0000010", s_szTestDir1Kai, s_szTestDir1, DoAction7 }, - { __LINE__, WRITEDIR_1, "0000100", s_szTestDir1, L"", DoAction8 }, - { __LINE__, WRITEDIR_1, "0100000", s_szTestFile1, L"", DoAction9 }, - { __LINE__, WRITEDIR_1, "0010000", s_szTestFile1, L"", DoAction10 }, - { __LINE__, WRITEDIR_1, "0001000", s_szTestDir1, L"", DoAction11 }, - { __LINE__, WRITEDIR_1, "0000100", s_szTestDir1, L"", DoAction12 }, -}; + trace("(0x%lX, '%ls', '%ls')\n", lEvent, szPath1, szPath2); -static LPCSTR PatternFromFlags(DWORD flags) -{ - static CHAR s_buf[(TYPE_MAX + 1) + 1]; - for (INT i = 0; i < (TYPE_MAX + 1); ++i) - s_buf[i] = (char)('0' + !!(flags & (1 << i))); + if (lEvent == SHCNE_UPDATEDIR) + { + trace("Got SHCNE_UPDATEDIR\n"); + s_bGotUpdateDir = TRUE; + return; + } + + INT iEventType = GetEventType(lEvent); + if (iEventType < 0) + return; - s_buf[TYPE_MAX + 1] = 0; - return s_buf; + assert(iEventType < MAX_EVENT_TYPE); + + INT i = 0; + s_abChecks[i++] |= (lstrcmpiW(szPath1, L"") == 0) << iEventType; + s_abChecks[i++] |= (lstrcmpiW(szPath1, s_szDir1) == 0) << iEventType; + s_abChecks[i++] |= (lstrcmpiW(szPath1, s_szDir2InDir1) == 0) << iEventType; + s_abChecks[i++] |= (lstrcmpiW(szPath1, s_szFile1InDir1) == 0) << iEventType; + s_abChecks[i++] |= (lstrcmpiW(szPath1, s_szFile2InDir1) == 0) << iEventType; + s_abChecks[i++] |= (lstrcmpiW(szPath1, s_szFile1InDir1InDir1) == 0) << iEventType; + s_abChecks[i++] |= (lstrcmpiW(szPath2, L"") == 0) << iEventType; + s_abChecks[i++] |= (lstrcmpiW(szPath2, s_szDir1) == 0) << iEventType; + s_abChecks[i++] |= (lstrcmpiW(szPath2, s_szDir2InDir1) == 0) << iEventType; + s_abChecks[i++] |= (lstrcmpiW(szPath2, s_szFile1InDir1) == 0) << iEventType; + s_abChecks[i++] |= (lstrcmpiW(szPath2, s_szFile2InDir1) == 0) << iEventType; + s_abChecks[i++] |= (lstrcmpiW(szPath2, s_szFile1InDir1InDir1) == 0) << iEventType; + assert(i == NUM_CHECKS); } -static BOOL DoGetPaths(LPWSTR pszPath1, LPWSTR pszPath2) +static LPCSTR StringFromChecks(void) { - pszPath1[0] = pszPath2[0] = 0; + static char s_sz[2 * NUM_CHECKS + 1]; - WCHAR szText[MAX_PATH * 2]; - szText[0] = 0; - FILE *fp = _wfopen(TEMP_FILE, L"rb"); - if (fp) + char *pch = s_sz; + for (INT i = 0; i < NUM_CHECKS; ++i) { - fread(szText, 1, sizeof(szText), fp); - fclose(fp); + WCHAR sz[3]; + StringCchPrintfW(sz, _countof(sz), L"%02X", s_abChecks[i]); + *pch++ = sz[0]; + *pch++ = sz[1]; } - LPWSTR pch = wcschr(szText, L'|'); - if (pch == NULL) - return FALSE; + assert((pch - s_sz) + 1 == sizeof(s_sz)); *pch = 0; - StringCchCopyW(pszPath1, MAX_PATH, szText); - StringCchCopyW(pszPath2, MAX_PATH, pch + 1); - return TRUE; + return s_sz; } -static void DoTestEntry(INT iEntry, const TEST_ENTRY *entry, INT nSources) +struct TEST_ANSWER { -#ifdef ENTRY_TICK - DWORD dwOldTick = GetTickCount(); -#endif + INT lineno; + LPCSTR answer; +}; - BOOL bInterrupting = FALSE; - if (entry->action) - bInterrupting = entry->action(entry); +static void DoStepCheck(INT iStage, INT iStep, LPCSTR checks) +{ + assert(0 <= iStep); + assert(iStep < NUM_STEP); - DWORD flags; - LPCSTR pattern; - if ((nSources & SHCNRF_InterruptLevel) && bInterrupting) - { - // The event won't work at here. Manually waiting... - UINT cTry = ((iEntry == 0) ? 100 : 60); - for (UINT iTry = 0; iTry < cTry; ++iTry) - { - flags = SendMessageW(s_hwnd, WM_GET_NOTIFY_FLAGS, 0, 0); - pattern = PatternFromFlags(flags); - if (strcmp(pattern, "0000000") != 0) - break; + assert(0 <= iStage); + assert(iStage < NUM_STAGE); - Sleep(1); - } - } - else + if (s_bGotUpdateDir) { - if (WaitForSingleObject(s_hEvent, 100) == WAIT_OBJECT_0) - Sleep(1); - - flags = SendMessageW(s_hwnd, WM_GET_NOTIFY_FLAGS, 0, 0); - pattern = PatternFromFlags(flags); + ok_int(TRUE, TRUE); + return; } - SendMessageW(s_hwnd, WM_SET_PATHS, 0, 0); - - WCHAR szPath1[MAX_PATH], szPath2[MAX_PATH]; - szPath1[0] = szPath2[0] = 0; - BOOL bOK = DoGetPaths(szPath1, szPath2); - - static UINT s_cCalmDown = 0; - - if (pattern[TYPE_UPDATEDIR] == '1') - { - trace("Line %d: SHCNE_UPDATEDIR: Calm down (%u)...\n", entry->line, s_cCalmDown); - - if (++s_cCalmDown < 3) - Sleep(3000); - - if (entry->pattern) - ok(TRUE, "Line %d:\n", entry->line); - if (entry->path1) - ok(TRUE, "Line %d:\n", entry->line); - if (entry->path2) - ok(TRUE, "Line %d:\n", entry->line); - } - else + LPCSTR answer = NULL; + INT lineno; + switch (iStage) { - s_cCalmDown = 0; - if (entry->pattern) + case 0: + { + static const TEST_ANSWER c_answers[] = + { + { __LINE__, "000000010000010000000000" }, // 0 + { __LINE__, "000000040000000000000400" }, // 1 + { __LINE__, "000000000200020000000000" }, // 2 + { __LINE__, "000000000000080000000000" }, // 3 + { __LINE__, "000000000001010000000000" }, // 4 + { __LINE__, "000000000002020000000000" }, // 5 + { __LINE__, "000000000000000020000000" }, // 6 + { __LINE__, "000010000000100000000000" }, // 7 + }; + C_ASSERT(_countof(c_answers) == NUM_STEP); + lineno = c_answers[iStep].lineno; + answer = c_answers[iStep].answer; + break; + } + case 1: + { + static const TEST_ANSWER c_answers[] = + { + { __LINE__, "000000010000010000000000" }, // 0 + { __LINE__, "000000040000000000000400" }, // 1 + { __LINE__, "000000000200020000000000" }, // 2 + { __LINE__, "000000000000080000000000" }, // 3 + { __LINE__, "000000000001010000000000" }, // 4 + { __LINE__, "000000000002020000000000" }, // 5 + { __LINE__, "000000000000000020000000" }, // 6 + { __LINE__, "000010000000100000000000" }, // 7 + }; + C_ASSERT(_countof(c_answers) == NUM_STEP); + lineno = c_answers[iStep].lineno; + answer = c_answers[iStep].answer; + break; + } + case 2: { - ok(strcmp(pattern, entry->pattern) == 0, - "Line %d: pattern mismatch '%s', tick=0x%08lX\n", - entry->line, pattern, GetTickCount()); + static const TEST_ANSWER c_answers[] = + { + { __LINE__, "000000010000010000000000" }, // 0 + { __LINE__, "000000040000000000000400" }, // 1 + { __LINE__, "000000000200020000000000" }, // 2 + { __LINE__, "000000000000080000000000" }, // 3 + { __LINE__, "000000000001010000000000" }, // 4 // Recursive + { __LINE__, "000000000002020000000000" }, // 5 // Recursive + { __LINE__, "000000000000000020000000" }, // 6 + { __LINE__, "000010000000100000000000" }, // 7 + }; + C_ASSERT(_countof(c_answers) == NUM_STEP); + lineno = c_answers[iStep].lineno; + answer = c_answers[iStep].answer; + if (iStep == 4 || iStep == 5) // Recursive cases + { + if (lstrcmpA(checks, "000000000000000000000000") == 0) + answer = "000000000000000000000000"; + else + trace("Warning\n"); + } + break; + } + case 3: + { + static const TEST_ANSWER c_answers[] = + { + { __LINE__, "000000010000010000000000" }, // 0 + { __LINE__, "000000040000000000000400" }, // 1 + { __LINE__, "000000000200020000000000" }, // 2 + { __LINE__, "000000000000080000000000" }, // 3 + { __LINE__, "000000000001010000000000" }, // 4 // Recursive + { __LINE__, "000000000002020000000000" }, // 5 // Recursive + { __LINE__, "000000000000000020000000" }, // 6 + { __LINE__, "000010000000100000000000" }, // 7 + }; + C_ASSERT(_countof(c_answers) == NUM_STEP); + lineno = c_answers[iStep].lineno; + answer = c_answers[iStep].answer; + break; + } + default: + { + assert(0); + break; } - if (entry->path1) - ok(bOK && lstrcmpiW(entry->path1, szPath1) == 0, - "Line %d: path1 mismatch '%S' (%d)\n", entry->line, szPath1, bOK); - if (entry->path2) - ok(bOK && lstrcmpiW(entry->path2, szPath2) == 0, - "Line %d: path2 mismatch '%S' (%d)\n", entry->line, szPath2, bOK); } - SendMessageW(s_hwnd, WM_CLEAR_FLAGS, 0, 0); - ResetEvent(s_hEvent); - -#ifdef ENTRY_TICK - DWORD dwNewTick = GetTickCount(); - DWORD dwTick = dwNewTick - dwOldTick; - trace("DoTestEntry: Line %d: tick=%lu.%lu sec\n", entry->line, - (dwTick / 1000), (dwTick / 100 % 10)); -#endif + ok(lstrcmpA(checks, answer) == 0, + "Line %d: '%s' vs '%s' at Stage %d, Step %d\n", lineno, checks, answer, iStage, iStep); } -static void DoQuitTest(BOOL bForce) -{ - PostMessageW(s_hwnd, WM_COMMAND, IDOK, 0); - - DoWaitForWindow(CLASSNAME, CLASSNAME, TRUE, bForce); - s_hwnd = NULL; - - if (s_hEvent) +static DWORD WINAPI StageThreadFunc(LPVOID arg) +{ + BOOL ret; + + trace("Stage %d\n", s_iStage); + + // 0: Create file1 in dir1 + s_iStep = 0; + trace("Step %d\n", s_iStep); + ::Sleep(1000); // Extra wait + ZeroMemory(s_abChecks, sizeof(s_abChecks)); + ret = DoCreateFile(s_szFile1InDir1); + ok_int(ret, TRUE); + SHChangeNotify(SHCNE_CREATE, SHCNF_PATHW | SHCNF_FLUSH | SHCNF_FLUSHNOWAIT, s_szFile1InDir1, 0); + ::Sleep(INTERVAL); + DoStepCheck(s_iStage, s_iStep, StringFromChecks()); + + // 1: Rename file1 as file2 in dir1 + ++s_iStep; + trace("Step %d\n", s_iStep); + ZeroMemory(s_abChecks, sizeof(s_abChecks)); + ret = MoveFileW(s_szFile1InDir1, s_szFile2InDir1); + ok_int(ret, TRUE); + SHChangeNotify(SHCNE_RENAMEITEM, SHCNF_PATHW | SHCNF_FLUSH | SHCNF_FLUSHNOWAIT, s_szFile1InDir1, s_szFile2InDir1); + ::Sleep(INTERVAL); + DoStepCheck(s_iStage, s_iStep, StringFromChecks()); + + // 2: Delete file2 in dir1 + ++s_iStep; + trace("Step %d\n", s_iStep); + ZeroMemory(s_abChecks, sizeof(s_abChecks)); + ret = DeleteFileW(s_szFile2InDir1); + ok_int(ret, TRUE); + SHChangeNotify(SHCNE_DELETE, SHCNF_PATHW | SHCNF_FLUSH | SHCNF_FLUSHNOWAIT, s_szFile2InDir1, NULL); + ::Sleep(INTERVAL); + DoStepCheck(s_iStage, s_iStep, StringFromChecks()); + + // 3: Create dir1 in dir1 + ++s_iStep; + trace("Step %d\n", s_iStep); + ZeroMemory(s_abChecks, sizeof(s_abChecks)); + ret = CreateDirectoryExW(s_szDir1, s_szDir1InDir1, NULL); + ok_int(ret, TRUE); + SHChangeNotify(SHCNE_MKDIR, SHCNF_PATHW | SHCNF_FLUSH | SHCNF_FLUSHNOWAIT, s_szDir1InDir1, NULL); + ::Sleep(INTERVAL); + DoStepCheck(s_iStage, s_iStep, StringFromChecks()); + + // 4: Create file1 in dir1 in dir1 + ++s_iStep; + trace("Step %d\n", s_iStep); + ZeroMemory(s_abChecks, sizeof(s_abChecks)); + ret = DoCreateFile(s_szFile1InDir1InDir1); + ok_int(ret, TRUE); + SHChangeNotify(SHCNE_CREATE, SHCNF_PATHW | SHCNF_FLUSH | SHCNF_FLUSHNOWAIT, s_szFile1InDir1InDir1, NULL); + ::Sleep(INTERVAL); + DoStepCheck(s_iStage, s_iStep, StringFromChecks()); + + // 5: Delete file1 in dir1 in dir1 + ++s_iStep; + trace("Step %d\n", s_iStep); + ZeroMemory(s_abChecks, sizeof(s_abChecks)); + ret = DeleteFileW(s_szFile1InDir1InDir1); + ok_int(ret, TRUE); + SHChangeNotify(SHCNE_DELETE, SHCNF_PATHW | SHCNF_FLUSH | SHCNF_FLUSHNOWAIT, s_szFile1InDir1InDir1, NULL); + ::Sleep(INTERVAL); + DoStepCheck(s_iStage, s_iStep, StringFromChecks()); + + // 6: Rename dir1 as dir2 in dir1 + ++s_iStep; + trace("Step %d\n", s_iStep); + ZeroMemory(s_abChecks, sizeof(s_abChecks)); + ret = ::MoveFileW(s_szDir1InDir1, s_szDir2InDir1); + ok_int(ret, TRUE); + SHChangeNotify(SHCNE_RENAMEFOLDER, SHCNF_PATHW | SHCNF_FLUSH | SHCNF_FLUSHNOWAIT, s_szDir1InDir1, s_szDir2InDir1); + ::Sleep(INTERVAL); + DoStepCheck(s_iStage, s_iStep, StringFromChecks()); + + // 7: Remove dir2 in dir1 + ++s_iStep; + trace("Step %d\n", s_iStep); + ZeroMemory(s_abChecks, sizeof(s_abChecks)); + ret = RemoveDirectoryW(s_szDir2InDir1); + ok_int(ret, TRUE); + SHChangeNotify(SHCNE_RMDIR, SHCNF_PATHW | SHCNF_FLUSH | SHCNF_FLUSHNOWAIT, s_szDir2InDir1, NULL); + ::Sleep(INTERVAL); + DoStepCheck(s_iStage, s_iStep, StringFromChecks()); + + // 8: Finish + ++s_iStep; + assert(s_iStep == NUM_STEP); + C_ASSERT(NUM_STEP == 8); + if (s_iStage + 1 < NUM_STAGE) { - CloseHandle(s_hEvent); - s_hEvent = NULL; + ::PostMessage(s_hSubWnd, WM_COMMAND, IDRETRY, 0); // Next stage } - - DoDeleteFilesAndDirs(); -} - -static void DoAbortThread(void) -{ - skip("Aborting the thread...\n"); - if (s_hThread) + else { - TerminateThread(s_hThread, -1); - s_hThread = NULL; + // Finish + ::PostMessage(s_hSubWnd, WM_COMMAND, IDNO, 0); + ::PostMessage(s_hMainWnd, WM_COMMAND, IDNO, 0); } -} -static BOOL CALLBACK HandlerRoutine(DWORD dwCtrlType) -{ - switch (dwCtrlType) - { - case CTRL_C_EVENT: - case CTRL_BREAK_EVENT: - DoAbortThread(); - DoQuitTest(TRUE); - return TRUE; - } - return FALSE; + s_iStep = -1; + + return 0; } -static BOOL DoInitTest(void) +// WM_COPYDATA +static BOOL OnCopyData(HWND hwnd, HWND hwndSender, COPYDATASTRUCT *pCopyData) { - // DIRTYPE_DESKTOP - LPWSTR psz = DoGetDir(DIRTYPE_DESKTOP); - StringCchCopyW(s_szDesktop, _countof(s_szDesktop), psz); - - PathAppendW(psz, TEST_FILE); - StringCchCopyW(s_szTestFile0, _countof(s_szTestFile0), psz); - - PathRemoveFileSpecW(psz); - PathAppendW(psz, TEST_FILE_KAI); - StringCchCopyW(s_szTestFile0Kai, _countof(s_szTestFile0Kai), psz); + if (pCopyData->dwData != 0xBEEFCAFE) + return FALSE; - PathRemoveFileSpecW(psz); - PathAppendW(psz, TEST_DIR); - StringCchCopyW(s_szTestDir0, _countof(s_szTestDir0), psz); + LPBYTE pbData = (LPBYTE)pCopyData->lpData; + LPBYTE pb = pbData; - PathRemoveFileSpecW(psz); - PathAppendW(psz, TEST_DIR_KAI); - StringCchCopyW(s_szTestDir0Kai, _countof(s_szTestDir0Kai), psz); + LONG cbTotal = pCopyData->cbData; + assert(cbTotal >= LONG(sizeof(LONG) + sizeof(DWORD) + sizeof(DWORD))); - // DIRTYPE_MYDOCUMENTS - psz = DoGetDir(DIRTYPE_MYDOCUMENTS); - StringCchCopyW(s_szDocuments, _countof(s_szDocuments), psz); + LONG lEvent = *(LONG*)pb; + pb += sizeof(lEvent); - PathAppendW(psz, TEST_FILE); - StringCchCopyW(s_szTestFile1, _countof(s_szTestFile1), psz); + DWORD cbPidl1 = *(DWORD*)pb; + pb += sizeof(cbPidl1); - PathRemoveFileSpecW(psz); - PathAppendW(psz, TEST_FILE_KAI); - StringCchCopyW(s_szTestFile1Kai, _countof(s_szTestFile1Kai), psz); + DWORD cbPidl2 = *(DWORD*)pb; + pb += sizeof(cbPidl2); - PathRemoveFileSpecW(psz); - PathAppendW(psz, TEST_DIR); - StringCchCopyW(s_szTestDir1, _countof(s_szTestDir1), psz); + LPITEMIDLIST pidl1 = NULL; + if (cbPidl1) + { + pidl1 = (LPITEMIDLIST)CoTaskMemAlloc(cbPidl1); + CopyMemory(pidl1, pb, cbPidl1); + pb += cbPidl1; + } - PathRemoveFileSpecW(psz); - PathAppendW(psz, TEST_DIR_KAI); - StringCchCopyW(s_szTestDir1Kai, _countof(s_szTestDir1Kai), psz); + LPITEMIDLIST pidl2 = NULL; + if (cbPidl2) + { + pidl2 = (LPITEMIDLIST)CoTaskMemAlloc(cbPidl2); + CopyMemory(pidl2, pb, cbPidl2); + pb += cbPidl2; + } - // prepare for files and dirs - DoDeleteFilesAndDirs(); - DoCreateEmptyFile(TEMP_FILE); + assert((pb - pbData) == cbTotal); - // Ctrl+C - SetConsoleCtrlHandler(HandlerRoutine, TRUE); + DoTestEntry(lEvent, pidl1, pidl2); - // close Explorer windows - trace("Closing Explorer windows...\n"); - DoWaitForWindow(L"CabinetWClass", NULL, TRUE, TRUE); + CoTaskMemFree(pidl1); + CoTaskMemFree(pidl2); - // close the CLASSNAME windows - return DoWaitForWindow(CLASSNAME, CLASSNAME, TRUE, TRUE) == NULL; + return TRUE; } -static BOOL -GetSubProgramPath(void) +static LRESULT CALLBACK +MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { - GetModuleFileNameW(NULL, s_szSubProgram, _countof(s_szSubProgram)); - PathRemoveFileSpecW(s_szSubProgram); - PathAppendW(s_szSubProgram, L"shell32_apitest_sub.exe"); - - if (!PathFileExistsW(s_szSubProgram)) + switch (uMsg) { - PathRemoveFileSpecW(s_szSubProgram); - PathAppendW(s_szSubProgram, L"testdata\\shell32_apitest_sub.exe"); + case WM_CREATE: + s_hMainWnd = hwnd; + return 0; + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDYES: // Start testing + { + s_iStage = 0; + s_bGotUpdateDir = FALSE; + s_hThread = ::CreateThread(NULL, 0, StageThreadFunc, hwnd, 0, NULL); + if (!s_hThread) + { + skip("!s_hThread\n"); + DestroyWindow(hwnd); + } + break; + } + case IDRETRY: // New stage + { + ::CloseHandle(s_hThread); + ++s_iStage; + s_bGotUpdateDir = FALSE; + s_hThread = ::CreateThread(NULL, 0, StageThreadFunc, hwnd, 0, NULL); + if (!s_hThread) + { + skip("!s_hThread\n"); + DestroyWindow(hwnd); + } + break; + } + case IDNO: // Quit + { + s_iStage = -1; + DestroyWindow(hwnd); + break; + } + } + break; - if (!PathFileExistsW(s_szSubProgram)) - return FALSE; - } + case WM_COPYDATA: + if (s_iStage < 0 || s_iStep < 0) + break; - return TRUE; -} + OnCopyData(hwnd, (HWND)wParam, (COPYDATASTRUCT*)lParam); + break; -#define SRC_00 0 -#define SRC_01 SHCNRF_ShellLevel -#define SRC_02 (SHCNRF_NewDelivery) -#define SRC_03 (SHCNRF_NewDelivery | SHCNRF_ShellLevel) -#define SRC_04 SHCNRF_InterruptLevel -#define SRC_05 (SHCNRF_InterruptLevel | SHCNRF_ShellLevel) -#define SRC_06 (SHCNRF_InterruptLevel | SHCNRF_NewDelivery) -#define SRC_07 (SHCNRF_InterruptLevel | SHCNRF_NewDelivery | SHCNRF_ShellLevel) -#define SRC_08 (SHCNRF_RecursiveInterrupt | SHCNRF_InterruptLevel) -#define SRC_09 (SHCNRF_RecursiveInterrupt | SHCNRF_InterruptLevel | SHCNRF_ShellLevel) -#define SRC_10 (SHCNRF_RecursiveInterrupt | SHCNRF_InterruptLevel | SHCNRF_NewDelivery) -#define SRC_11 (SHCNRF_RecursiveInterrupt | SHCNRF_InterruptLevel | SHCNRF_NewDelivery | SHCNRF_ShellLevel) - -#define WATCHDIR_0 DIRTYPE_NULL -#define WATCHDIR_1 DIRTYPE_DESKTOP -#define WATCHDIR_2 DIRTYPE_MYCOMPUTER -#define WATCHDIR_3 DIRTYPE_MYDOCUMENTS - -static void -DoTestGroup(INT line, UINT cEntries, const TEST_ENTRY *pEntries, BOOL fRecursive, - INT nSources, DIRTYPE iWatchDir) -{ -#ifdef NO_INTERRUPT_LEVEL - if (nSources & SHCNRF_InterruptLevel) - return; -#endif -#ifdef NO_SHELL_LEVEL - if (nSources & SHCNRF_ShellLevel) - return; -#endif -#ifdef NEW_DELIVERY_ONLY - if (!(nSources & SHCNRF_NewDelivery)) - return; -#endif -#ifdef GROUP_TICK - DWORD dwOldTick = GetTickCount(); -#endif -#ifdef RANDOM_QUARTER - if ((rand() & 3) == 0) - return; -#elif defined(RANDOM_HALF) - if (rand() & 1) - return; -#endif + case WM_DESTROY: + ::PostQuitMessage(0); + break; - trace("DoTestGroup: Line %d: fRecursive:%u, iWatchDir:%u, nSources:0x%X\n", - line, fRecursive, iWatchDir, nSources); + default: + return ::DefWindowProcW(hwnd, uMsg, wParam, lParam); + } + return 0; +} - if (s_hEvent) +static BOOL TEST_Init(void) +{ + if (!FindSubProgram()) { - CloseHandle(s_hEvent); - s_hEvent = NULL; + skip("shell32_apitest_sub.exe not found\n"); + return FALSE; } - s_hEvent = CreateEventW(NULL, TRUE, FALSE, EVENT_NAME); - WCHAR szParams[64]; - StringCchPrintfW(szParams, _countof(szParams), L"%u,%u,%u", fRecursive, iWatchDir, nSources); + // close the SUB_CLASSNAME windows + DoWaitForWindow(SUB_CLASSNAME, SUB_CLASSNAME, TRUE, TRUE); - HINSTANCE hinst = ShellExecuteW(NULL, NULL, s_szSubProgram, szParams, NULL, SW_SHOWNORMAL); + // Execute sub program + HINSTANCE hinst = ShellExecuteW(NULL, NULL, s_szSubProgram, L"---", NULL, SW_SHOWNORMAL); if ((INT_PTR)hinst <= 32) { skip("Unable to run shell32_apitest_sub.exe.\n"); - return; + return FALSE; } - s_hwnd = DoWaitForWindow(CLASSNAME, CLASSNAME, FALSE, FALSE); - if (!s_hwnd) + // prepare for files and dirs + DoBuildFilesAndDirs(); + + // Register main window + WNDCLASSW wc = { 0, MainWndProc }; + wc.hInstance = GetModuleHandleW(NULL); + wc.hIcon = LoadIconW(NULL, IDI_APPLICATION); + wc.hCursor = LoadCursorW(NULL, IDC_ARROW); + wc.hbrBackground = (HBRUSH)(COLOR_3DFACE + 1); + wc.lpszClassName = MAIN_CLASSNAME; + if (!RegisterClassW(&wc)) { - skip("Unable to find window.\n"); - return; + skip("RegisterClassW failed\n"); + return FALSE; } - for (UINT i = 0; i < cEntries; ++i) + // Create main window + HWND hwnd = CreateWindowW(MAIN_CLASSNAME, MAIN_CLASSNAME, WS_OVERLAPPEDWINDOW, + CW_USEDEFAULT, CW_USEDEFAULT, 400, 100, + NULL, NULL, GetModuleHandleW(NULL), NULL); + if (!hwnd) { - if (!IsWindow(s_hwnd)) - { - DoAbortThread(); - DoQuitTest(TRUE); - break; - } - - DoTestEntry(i, &pEntries[i], nSources); + skip("CreateWindowW failed\n"); + return FALSE; } + ::ShowWindow(hwnd, SW_SHOWNORMAL); + ::UpdateWindow(hwnd); - DoQuitTest(FALSE); - -#ifdef GROUP_TICK - DWORD dwNewTick = GetTickCount(); - DWORD dwTick = dwNewTick - dwOldTick; - trace("DoTestGroup: Line %d: %lu.%lu sec\n", line, (dwTick / 1000), (dwTick / 100 % 10)); -#endif -} + // Find sub-window + s_hSubWnd = DoWaitForWindow(SUB_CLASSNAME, SUB_CLASSNAME, FALSE, FALSE); + if (!s_hSubWnd) + { + skip("Unable to find sub-program window.\n"); + return FALSE; + } -static unsigned __stdcall TestThreadProc(void *) -{ - srand(time(NULL)); -#ifdef RANDOM_QUARTER - skip("RANDOM_QUARTER\n"); -#elif defined(RANDOM_HALF) - skip("RANDOM_HALF\n"); -#endif - - // fRecursive == FALSE. - DoTestGroup(__LINE__, _countof(s_group_00), s_group_00, FALSE, SRC_00, WATCHDIR_0); - DoTestGroup(__LINE__, _countof(s_group_01), s_group_01, FALSE, SRC_01, WATCHDIR_0); - DoTestGroup(__LINE__, _countof(s_group_00), s_group_00, FALSE, SRC_02, WATCHDIR_0); - DoTestGroup(__LINE__, _countof(s_group_01), s_group_01, FALSE, SRC_03, WATCHDIR_0); - DoTestGroup(__LINE__, _countof(s_group_04), s_group_04, FALSE, SRC_04, WATCHDIR_0); - DoTestGroup(__LINE__, _countof(s_group_06), s_group_06, FALSE, SRC_05, WATCHDIR_0); - DoTestGroup(__LINE__, _countof(s_group_04), s_group_04, FALSE, SRC_06, WATCHDIR_0); - DoTestGroup(__LINE__, _countof(s_group_06), s_group_06, FALSE, SRC_07, WATCHDIR_0); - DoTestGroup(__LINE__, _countof(s_group_04), s_group_04, FALSE, SRC_08, WATCHDIR_0); - DoTestGroup(__LINE__, _countof(s_group_06), s_group_06, FALSE, SRC_09, WATCHDIR_0); - DoTestGroup(__LINE__, _countof(s_group_04), s_group_04, FALSE, SRC_10, WATCHDIR_0); - DoTestGroup(__LINE__, _countof(s_group_06), s_group_06, FALSE, SRC_11, WATCHDIR_0); - - BOOL bTarget = IsWindowsXPOrGreater() && !IsWindowsVistaOrGreater(); - -#define SWITCH(x, y) (bTarget ? (x) : (y)) - DoTestGroup(__LINE__, _countof(s_group_00), s_group_00, FALSE, SRC_00, WATCHDIR_1); - DoTestGroup(__LINE__, _countof(s_group_03), s_group_03, FALSE, SRC_01, WATCHDIR_1); - DoTestGroup(__LINE__, _countof(s_group_00), s_group_00, FALSE, SRC_02, WATCHDIR_1); - DoTestGroup(__LINE__, _countof(s_group_03), s_group_03, FALSE, SRC_03, WATCHDIR_1); - DoTestGroup(__LINE__, SWITCH(_countof(s_group_00), _countof(s_group_04)), SWITCH(s_group_00, s_group_04), FALSE, SRC_04, WATCHDIR_1); - DoTestGroup(__LINE__, _countof(s_group_07), s_group_07, FALSE, SRC_05, WATCHDIR_1); - DoTestGroup(__LINE__, SWITCH(_countof(s_group_00), _countof(s_group_04)), SWITCH(s_group_00, s_group_04), FALSE, SRC_06, WATCHDIR_1); - DoTestGroup(__LINE__, _countof(s_group_07), s_group_07, FALSE, SRC_07, WATCHDIR_1); - DoTestGroup(__LINE__, _countof(s_group_04), s_group_04, FALSE, SRC_08, WATCHDIR_1); - DoTestGroup(__LINE__, _countof(s_group_07), s_group_07, FALSE, SRC_09, WATCHDIR_1); - DoTestGroup(__LINE__, SWITCH(_countof(s_group_00), _countof(s_group_04)), SWITCH(s_group_00, s_group_04), FALSE, SRC_06, WATCHDIR_1); - DoTestGroup(__LINE__, _countof(s_group_07), s_group_07, FALSE, SRC_11, WATCHDIR_1); -#undef SWITCH - -#ifndef NO_TRIVIAL - DoTestGroup(__LINE__, _countof(s_group_00), s_group_00, FALSE, SRC_00, WATCHDIR_2); - DoTestGroup(__LINE__, _countof(s_group_00), s_group_00, FALSE, SRC_01, WATCHDIR_2); - DoTestGroup(__LINE__, _countof(s_group_00), s_group_00, FALSE, SRC_02, WATCHDIR_2); - DoTestGroup(__LINE__, _countof(s_group_00), s_group_00, FALSE, SRC_03, WATCHDIR_2); - DoTestGroup(__LINE__, _countof(s_group_00), s_group_00, FALSE, SRC_04, WATCHDIR_2); - DoTestGroup(__LINE__, _countof(s_group_00), s_group_00, FALSE, SRC_05, WATCHDIR_2); - DoTestGroup(__LINE__, _countof(s_group_00), s_group_00, FALSE, SRC_06, WATCHDIR_2); - DoTestGroup(__LINE__, _countof(s_group_00), s_group_00, FALSE, SRC_07, WATCHDIR_2); - DoTestGroup(__LINE__, _countof(s_group_00), s_group_00, FALSE, SRC_08, WATCHDIR_2); - DoTestGroup(__LINE__, _countof(s_group_00), s_group_00, FALSE, SRC_09, WATCHDIR_2); - DoTestGroup(__LINE__, _countof(s_group_00), s_group_00, FALSE, SRC_10, WATCHDIR_2); - DoTestGroup(__LINE__, _countof(s_group_00), s_group_00, FALSE, SRC_11, WATCHDIR_2); -#endif - - DoTestGroup(__LINE__, _countof(s_group_00), s_group_00, FALSE, SRC_00, WATCHDIR_3); - DoTestGroup(__LINE__, _countof(s_group_02), s_group_02, FALSE, SRC_01, WATCHDIR_3); - DoTestGroup(__LINE__, _countof(s_group_00), s_group_00, FALSE, SRC_02, WATCHDIR_3); - DoTestGroup(__LINE__, _countof(s_group_02), s_group_02, FALSE, SRC_03, WATCHDIR_3); - DoTestGroup(__LINE__, _countof(s_group_05), s_group_05, FALSE, SRC_04, WATCHDIR_3); - DoTestGroup(__LINE__, _countof(s_group_08), s_group_08, FALSE, SRC_05, WATCHDIR_3); - DoTestGroup(__LINE__, _countof(s_group_05), s_group_05, FALSE, SRC_06, WATCHDIR_3); - DoTestGroup(__LINE__, _countof(s_group_08), s_group_08, FALSE, SRC_07, WATCHDIR_3); - DoTestGroup(__LINE__, _countof(s_group_05), s_group_05, FALSE, SRC_08, WATCHDIR_3); - DoTestGroup(__LINE__, _countof(s_group_08), s_group_08, FALSE, SRC_09, WATCHDIR_3); - DoTestGroup(__LINE__, _countof(s_group_05), s_group_05, FALSE, SRC_10, WATCHDIR_3); - DoTestGroup(__LINE__, _countof(s_group_08), s_group_08, FALSE, SRC_11, WATCHDIR_3); - - // fRecursive == TRUE. - DoTestGroup(__LINE__, _countof(s_group_00), s_group_00, TRUE, SRC_00, WATCHDIR_0); - DoTestGroup(__LINE__, _countof(s_group_01), s_group_01, TRUE, SRC_01, WATCHDIR_0); - DoTestGroup(__LINE__, _countof(s_group_00), s_group_00, TRUE, SRC_02, WATCHDIR_0); - DoTestGroup(__LINE__, _countof(s_group_01), s_group_01, TRUE, SRC_03, WATCHDIR_0); - DoTestGroup(__LINE__, _countof(s_group_04), s_group_04, TRUE, SRC_04, WATCHDIR_0); - DoTestGroup(__LINE__, _countof(s_group_06), s_group_06, TRUE, SRC_05, WATCHDIR_0); - DoTestGroup(__LINE__, _countof(s_group_04), s_group_04, TRUE, SRC_06, WATCHDIR_0); - DoTestGroup(__LINE__, _countof(s_group_06), s_group_06, TRUE, SRC_07, WATCHDIR_0); - DoTestGroup(__LINE__, _countof(s_group_04), s_group_04, TRUE, SRC_08, WATCHDIR_0); - DoTestGroup(__LINE__, _countof(s_group_06), s_group_06, TRUE, SRC_09, WATCHDIR_0); - DoTestGroup(__LINE__, _countof(s_group_04), s_group_04, TRUE, SRC_10, WATCHDIR_0); - DoTestGroup(__LINE__, _countof(s_group_06), s_group_06, TRUE, SRC_11, WATCHDIR_0); - - DoTestGroup(__LINE__, _countof(s_group_00), s_group_00, TRUE, SRC_00, WATCHDIR_1); - DoTestGroup(__LINE__, _countof(s_group_01), s_group_01, TRUE, SRC_01, WATCHDIR_1); - DoTestGroup(__LINE__, _countof(s_group_00), s_group_00, TRUE, SRC_02, WATCHDIR_1); - DoTestGroup(__LINE__, _countof(s_group_01), s_group_01, TRUE, SRC_03, WATCHDIR_1); - DoTestGroup(__LINE__, _countof(s_group_04), s_group_04, TRUE, SRC_04, WATCHDIR_1); - DoTestGroup(__LINE__, _countof(s_group_06), s_group_06, TRUE, SRC_05, WATCHDIR_1); - DoTestGroup(__LINE__, _countof(s_group_04), s_group_04, TRUE, SRC_06, WATCHDIR_1); - DoTestGroup(__LINE__, _countof(s_group_06), s_group_06, TRUE, SRC_07, WATCHDIR_1); - DoTestGroup(__LINE__, _countof(s_group_04), s_group_04, TRUE, SRC_08, WATCHDIR_1); - DoTestGroup(__LINE__, _countof(s_group_06), s_group_06, TRUE, SRC_09, WATCHDIR_1); - DoTestGroup(__LINE__, _countof(s_group_04), s_group_04, TRUE, SRC_10, WATCHDIR_1); - DoTestGroup(__LINE__, _countof(s_group_06), s_group_06, TRUE, SRC_11, WATCHDIR_1); - - DoTestGroup(__LINE__, _countof(s_group_00), s_group_00, TRUE, SRC_00, WATCHDIR_2); - DoTestGroup(__LINE__, _countof(s_group_01), s_group_01, TRUE, SRC_01, WATCHDIR_2); - DoTestGroup(__LINE__, _countof(s_group_00), s_group_00, TRUE, SRC_02, WATCHDIR_2); - DoTestGroup(__LINE__, _countof(s_group_01), s_group_01, TRUE, SRC_03, WATCHDIR_2); - DoTestGroup(__LINE__, _countof(s_group_04), s_group_04, TRUE, SRC_04, WATCHDIR_2); - DoTestGroup(__LINE__, _countof(s_group_06), s_group_06, TRUE, SRC_05, WATCHDIR_2); - DoTestGroup(__LINE__, _countof(s_group_04), s_group_04, TRUE, SRC_06, WATCHDIR_2); - DoTestGroup(__LINE__, _countof(s_group_06), s_group_06, TRUE, SRC_07, WATCHDIR_2); - DoTestGroup(__LINE__, _countof(s_group_04), s_group_04, TRUE, SRC_08, WATCHDIR_2); - DoTestGroup(__LINE__, _countof(s_group_06), s_group_06, TRUE, SRC_09, WATCHDIR_2); - DoTestGroup(__LINE__, _countof(s_group_04), s_group_04, TRUE, SRC_10, WATCHDIR_2); - DoTestGroup(__LINE__, _countof(s_group_06), s_group_06, TRUE, SRC_11, WATCHDIR_2); - - DoTestGroup(__LINE__, _countof(s_group_00), s_group_00, TRUE, SRC_00, WATCHDIR_3); - DoTestGroup(__LINE__, _countof(s_group_02), s_group_02, TRUE, SRC_01, WATCHDIR_3); - DoTestGroup(__LINE__, _countof(s_group_00), s_group_00, TRUE, SRC_02, WATCHDIR_3); - DoTestGroup(__LINE__, _countof(s_group_02), s_group_02, TRUE, SRC_03, WATCHDIR_3); - DoTestGroup(__LINE__, _countof(s_group_05), s_group_05, TRUE, SRC_04, WATCHDIR_3); - DoTestGroup(__LINE__, _countof(s_group_08), s_group_08, TRUE, SRC_05, WATCHDIR_3); - DoTestGroup(__LINE__, _countof(s_group_05), s_group_05, TRUE, SRC_06, WATCHDIR_3); - DoTestGroup(__LINE__, _countof(s_group_08), s_group_08, TRUE, SRC_07, WATCHDIR_3); - DoTestGroup(__LINE__, _countof(s_group_05), s_group_05, TRUE, SRC_08, WATCHDIR_3); - DoTestGroup(__LINE__, _countof(s_group_08), s_group_08, TRUE, SRC_09, WATCHDIR_3); - DoTestGroup(__LINE__, _countof(s_group_05), s_group_05, TRUE, SRC_10, WATCHDIR_3); - DoTestGroup(__LINE__, _countof(s_group_08), s_group_08, TRUE, SRC_11, WATCHDIR_3); + // Start testing + SendMessageW(s_hSubWnd, WM_COMMAND, IDYES, 0); - return 0; + return TRUE; } -START_TEST(SHChangeNotify) +static void TEST_Main(void) { -#ifdef TOTAL_TICK - DWORD dwOldTick = GetTickCount(); -#endif -#ifdef DISABLE_THIS_TESTCASE - skip("This testcase is disabled by DISABLE_THIS_TESTCASE macro.\n"); - return; -#endif - - trace("Please don't operate your PC while testing...\n"); - - if (!GetSubProgramPath()) + if (!TEST_Init()) { - skip("shell32_apitest_sub.exe not found\n"); + skip("Unable to start testing.\n"); + TEST_Quit(); return; } - if (!DoInitTest()) + // Message loop + MSG msg; + while (GetMessageW(&msg, NULL, 0, 0)) { - skip("Unable to initialize.\n"); - DoQuitTest(TRUE); - return; + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); } - s_hThread = (HANDLE)_beginthreadex(NULL, 0, TestThreadProc, NULL, 0, NULL); - WaitForSingleObject(s_hThread, INFINITE); - CloseHandle(s_hThread); + TEST_Quit(); +} -#ifdef TOTAL_TICK +START_TEST(SHChangeNotify) +{ + trace("Please close all Explorer windows before testing.\n"); + trace("Please don't operate your PC while testing.\n"); + + DWORD dwOldTick = GetTickCount(); + TEST_Main(); DWORD dwNewTick = GetTickCount(); + DWORD dwTick = dwNewTick - dwOldTick; trace("SHChangeNotify: Total %lu.%lu sec\n", (dwTick / 1000), (dwTick / 100 % 10)); -#endif - - DoWaitForWindow(CLASSNAME, CLASSNAME, TRUE, TRUE); - Sleep(100); } diff --git a/modules/rostests/apitests/shell32/ShellExecCmdLine.cpp b/modules/rostests/apitests/shell32/ShellExecCmdLine.cpp index 218ff08ed88..c0a2104a25b 100644 --- a/modules/rostests/apitests/shell32/ShellExecCmdLine.cpp +++ b/modules/rostests/apitests/shell32/ShellExecCmdLine.cpp @@ -747,6 +747,6 @@ START_TEST(ShellExecCmdLine) ok(DeleteFileA("Test File 2.bat"), "failed to delete the test file\n"); free(s_wi0.phwnd); - DoWaitForWindow(CLASSNAME, CLASSNAME, TRUE, TRUE); + DoWaitForWindow(SUB_CLASSNAME, SUB_CLASSNAME, TRUE, TRUE); Sleep(100); } diff --git a/modules/rostests/apitests/shell32/shell32_apitest_sub.cpp b/modules/rostests/apitests/shell32/shell32_apitest_sub.cpp index 5a56b08aefb..db591a9f0d6 100644 --- a/modules/rostests/apitests/shell32/shell32_apitest_sub.cpp +++ b/modules/rostests/apitests/shell32/shell32_apitest_sub.cpp @@ -2,150 +2,239 @@ * PROJECT: ReactOS api tests * LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later) * PURPOSE: Test for SHChangeNotify - * COPYRIGHT: Copyright 2020 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com) + * COPYRIGHT: Copyright 2020-2024 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com) */ +// This program is used in SHChangeNotify and ShellExecCmdLine testcases. + #include "shelltest.h" #include "shell32_apitest_sub.h" +#include -static HWND s_hwnd = NULL; -static UINT s_uRegID = 0; -static BOOL s_fRecursive = FALSE; -static DIRTYPE s_iWatchDir = DIRTYPE_NULL; -static INT s_nSources = 0; -static LPITEMIDLIST s_pidl = NULL; -static WCHAR s_path1[MAX_PATH], s_path2[MAX_PATH]; -static BYTE s_counters[TYPE_MAX + 1]; -static HANDLE s_hEvent = NULL; - -static BOOL -OnCreate(HWND hwnd) +typedef enum DIRTYPE { - s_hwnd = hwnd; - s_pidl = DoGetPidl(s_iWatchDir); + DIRTYPE_DESKTOP = 0, + DIRTYPE_DRIVES, + DIRTYPE_DIR1, + DIRTYPE_MAX +} DIRTYPE; + +static HWND s_hMainWnd = NULL, s_hSubWnd = NULL; +static LPITEMIDLIST s_pidl[DIRTYPE_MAX]; +static UINT s_uRegID = 0; +static INT s_iStage = -1; - SHChangeNotifyEntry entry; - entry.pidl = s_pidl; - entry.fRecursive = s_fRecursive; - s_uRegID = SHChangeNotifyRegister(hwnd, s_nSources, SHCNE_ALLEVENTS, WM_SHELL_NOTIFY, 1, &entry); - return s_uRegID != 0; -} +#define NUM_STAGE 4 + +#define EVENTS (SHCNE_CREATE | SHCNE_DELETE | SHCNE_MKDIR | SHCNE_RMDIR | \ + SHCNE_RENAMEFOLDER | SHCNE_RENAMEITEM | SHCNE_UPDATEDIR | SHCNE_UPDATEITEM) -static void -OnCommand(HWND hwnd, UINT id) +inline LPITEMIDLIST DoGetPidl(INT iDir) { - switch (id) + LPITEMIDLIST ret = NULL; + + switch (iDir) { - case IDOK: - case IDCANCEL: - DestroyWindow(hwnd); + case DIRTYPE_DESKTOP: + { + SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &ret); + break; + } + case DIRTYPE_DRIVES: + { + SHGetSpecialFolderLocation(NULL, CSIDL_DRIVES, &ret); break; + } + case DIRTYPE_DIR1: + { + WCHAR szPath1[MAX_PATH]; + SHGetSpecialFolderPathW(NULL, szPath1, CSIDL_PERSONAL, FALSE); // My Documents + PathAppendW(szPath1, L"_TESTDIR_1_"); + ret = ILCreateFromPathW(szPath1); + break; + } + default: + { + assert(0); + break; + } } + + return ret; } -static void -OnDestroy(HWND hwnd) +static BOOL OnCreate(HWND hwnd) { - SHChangeNotifyDeregister(s_uRegID); - s_uRegID = 0; + s_hSubWnd = hwnd; - CoTaskMemFree(s_pidl); - s_pidl = NULL; + for (INT i = 0; i < DIRTYPE_MAX; ++i) + s_pidl[i] = DoGetPidl(i); - PostQuitMessage(0); - s_hwnd = NULL; + return TRUE; } -static BOOL DoPathes(PIDLIST_ABSOLUTE pidl1, PIDLIST_ABSOLUTE pidl2) +static BOOL InitSHCN(HWND hwnd) { - WCHAR path[MAX_PATH]; - if (!SHGetPathFromIDListW(pidl1, path)) + assert(0 <= s_iStage); + assert(s_iStage < NUM_STAGE); + + SHChangeNotifyEntry entry; + INT sources; + LONG events; + switch (s_iStage) { - s_path1[0] = s_path2[0] = 0; - return FALSE; + case 0: + { + entry.fRecursive = TRUE; + entry.pidl = s_pidl[DIRTYPE_DESKTOP]; + sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel; + events = EVENTS; + break; + } + case 1: + { + entry.fRecursive = TRUE; + entry.pidl = s_pidl[DIRTYPE_DRIVES]; + sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel; + events = EVENTS; + break; + } + case 2: + { + entry.fRecursive = FALSE; + entry.pidl = s_pidl[DIRTYPE_DIR1]; + sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel; + events = EVENTS; + break; + } + case 3: + { + entry.fRecursive = TRUE; + entry.pidl = s_pidl[DIRTYPE_DIR1]; + sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel | SHCNRF_InterruptLevel | + SHCNRF_RecursiveInterrupt; + events = EVENTS; + break; + } + default: + { + assert(0); + break; + } } - if (wcsstr(path, L"Recent") != NULL) + s_uRegID = SHChangeNotifyRegister(hwnd, sources, events, WM_SHELL_NOTIFY, 1, &entry); + if (s_uRegID == 0) return FALSE; - StringCchCopyW(s_path1, _countof(s_path1), path); - - if (!SHGetPathFromIDListW(pidl2, s_path2)) - s_path2[0] = 0; - return TRUE; } -static VOID DoPathesAndFlags(UINT type, PIDLIST_ABSOLUTE pidl1, PIDLIST_ABSOLUTE pidl2) +static void UnInitSHCN(HWND hwnd) { - if (DoPathes(pidl1, pidl2)) + if (s_uRegID) { - s_counters[type] = 1; - SetEvent(s_hEvent); + SHChangeNotifyDeregister(s_uRegID); + s_uRegID = 0; } } -static void -DoShellNotify(HWND hwnd, PIDLIST_ABSOLUTE pidl1, PIDLIST_ABSOLUTE pidl2, LONG lEvent) +static void OnCommand(HWND hwnd, UINT id) { - switch (lEvent) + switch (id) { - case SHCNE_RENAMEITEM: - DoPathesAndFlags(TYPE_RENAMEITEM, pidl1, pidl2); - break; - case SHCNE_CREATE: - DoPathesAndFlags(TYPE_CREATE, pidl1, pidl2); - break; - case SHCNE_DELETE: - DoPathesAndFlags(TYPE_DELETE, pidl1, pidl2); - break; - case SHCNE_MKDIR: - DoPathesAndFlags(TYPE_MKDIR, pidl1, pidl2); - break; - case SHCNE_RMDIR: - DoPathesAndFlags(TYPE_RMDIR, pidl1, pidl2); - break; - case SHCNE_MEDIAINSERTED: - break; - case SHCNE_MEDIAREMOVED: - break; - case SHCNE_DRIVEREMOVED: - break; - case SHCNE_DRIVEADD: - break; - case SHCNE_NETSHARE: - break; - case SHCNE_NETUNSHARE: - break; - case SHCNE_ATTRIBUTES: - break; - case SHCNE_UPDATEDIR: - DoPathesAndFlags(TYPE_UPDATEDIR, pidl1, pidl2); + case IDYES: // Start testing + { + s_hMainWnd = ::FindWindow(MAIN_CLASSNAME, MAIN_CLASSNAME); + if (!s_hMainWnd) + { + ::DestroyWindow(hwnd); + break; + } + s_iStage = 0; + InitSHCN(hwnd); + ::PostMessageW(s_hMainWnd, WM_COMMAND, IDYES, 0); break; - case SHCNE_UPDATEITEM: + } + case IDRETRY: // New stage + { + UnInitSHCN(hwnd); + ++s_iStage; + InitSHCN(hwnd); + ::PostMessageW(s_hMainWnd, WM_COMMAND, IDRETRY, 0); break; - case SHCNE_SERVERDISCONNECT: - break; - case SHCNE_UPDATEIMAGE: - break; - case SHCNE_DRIVEADDGUI: - break; - case SHCNE_RENAMEFOLDER: - DoPathesAndFlags(TYPE_RENAMEFOLDER, pidl1, pidl2); - break; - case SHCNE_FREESPACE: - break; - case SHCNE_EXTENDED_EVENT: - break; - case SHCNE_ASSOCCHANGED: - break; - default: + } + case IDNO: // Quit + { + s_iStage = -1; + UnInitSHCN(hwnd); + ::DestroyWindow(hwnd); break; + } } } -static INT_PTR -OnShellNotify(HWND hwnd, WPARAM wParam, LPARAM lParam) +static void OnDestroy(HWND hwnd) +{ + UnInitSHCN(hwnd); + + for (auto& pidl : s_pidl) + { + CoTaskMemFree(pidl); + pidl = NULL; + } + + ::PostMessageW(s_hMainWnd, WM_COMMAND, IDNO, 0); + + PostQuitMessage(0); +} + +static BOOL DoSendData(LONG lEvent, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) +{ + DWORD cbPidl1 = ILGetSize(pidl1), cbPidl2 = ILGetSize(pidl2); + DWORD cbTotal = sizeof(lEvent) + sizeof(cbPidl1) + sizeof(cbPidl2) + cbPidl1 + cbPidl2; + LPBYTE pbData = (LPBYTE)::LocalAlloc(LPTR, cbTotal); + if (!pbData) + return FALSE; + + LPBYTE pb = pbData; + + *(LONG*)pb = lEvent; + pb += sizeof(lEvent); + + *(DWORD*)pb = cbPidl1; + pb += sizeof(cbPidl1); + + *(DWORD*)pb = cbPidl2; + pb += sizeof(cbPidl2); + + CopyMemory(pb, pidl1, cbPidl1); + pb += cbPidl1; + + CopyMemory(pb, pidl2, cbPidl2); + pb += cbPidl2; + + assert(INT(pb - pbData) == INT(cbTotal)); + + COPYDATASTRUCT CopyData; + CopyData.dwData = 0xBEEFCAFE; + CopyData.cbData = cbTotal; + CopyData.lpData = pbData; + BOOL ret = (BOOL)::SendMessageW(s_hMainWnd, WM_COPYDATA, (WPARAM)s_hSubWnd, (LPARAM)&CopyData); + + ::LocalFree(pbData); + return ret; +} + +static void DoShellNotify(HWND hwnd, PIDLIST_ABSOLUTE pidl1, PIDLIST_ABSOLUTE pidl2, LONG lEvent) +{ + if (s_iStage < 0) + return; + + DoSendData(lEvent, pidl1, pidl2); +} + +static INT_PTR OnShellNotify(HWND hwnd, WPARAM wParam, LPARAM lParam) { LONG lEvent; PIDLIST_ABSOLUTE *pidlAbsolute; @@ -163,40 +252,7 @@ OnShellNotify(HWND hwnd, WPARAM wParam, LPARAM lParam) return TRUE; } -static LRESULT -OnGetNotifyFlags(HWND hwnd) -{ - if (s_uRegID == 0) - return 0xFFFFFFFF; - - DWORD dwFlags = 0; - for (size_t i = 0; i < _countof(s_counters); ++i) - { - if (s_counters[i]) - dwFlags |= (1 << i); - } - return dwFlags; -} - -static void -DoSetPaths(HWND hwnd) -{ - WCHAR szText[MAX_PATH * 2]; - StringCchCopyW(szText, _countof(szText), s_path1); - StringCchCatW(szText, _countof(szText), L"|"); - StringCchCatW(szText, _countof(szText), s_path2); - - FILE *fp = _wfopen(TEMP_FILE, L"wb"); - if (fp) - { - fwrite(szText, (wcslen(szText) + 1) * sizeof(WCHAR), 1, fp); - fflush(fp); - fclose(fp); - } -} - -static LRESULT CALLBACK -WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +static LRESULT CALLBACK SubWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { @@ -214,73 +270,36 @@ WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) OnDestroy(hwnd); break; - case WM_GET_NOTIFY_FLAGS: - return OnGetNotifyFlags(hwnd); - - case WM_CLEAR_FLAGS: - ZeroMemory(&s_counters, sizeof(s_counters)); - s_path1[0] = s_path2[0] = 0; - break; - - case WM_SET_PATHS: - DoSetPaths(hwnd); - break; - default: - return DefWindowProcW(hwnd, uMsg, wParam, lParam); + return ::DefWindowProcW(hwnd, uMsg, wParam, lParam); } return 0; } -static BOOL ParseCommandLine(LPWSTR lpCmdLine) -{ - LPWSTR pch = lpCmdLine; // fRecursive,iWatchDir,nSources - s_fRecursive = !!wcstoul(pch, NULL, 0); - pch = wcschr(pch, L','); - if (!pch) - return FALSE; - ++pch; - - s_iWatchDir = (DIRTYPE)wcstoul(pch, NULL, 0); - pch = wcschr(pch, L','); - if (!pch) - return FALSE; - ++pch; - - s_nSources = wcstoul(pch, NULL, 0); - return TRUE; -} - INT APIENTRY -wWinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPWSTR lpCmdLine, - INT nCmdShow) +wWinMain( + HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPWSTR lpCmdLine, + INT nCmdShow) { if (lstrcmpiW(lpCmdLine, L"") == 0 || lstrcmpiW(lpCmdLine, L"TEST") == 0) return 0; - if (!ParseCommandLine(lpCmdLine)) - return -1; - - s_hEvent = OpenEventW(EVENT_ALL_ACCESS, TRUE, EVENT_NAME); - - WNDCLASSW wc; - ZeroMemory(&wc, sizeof(wc)); - wc.lpfnWndProc = WindowProc; - wc.hInstance = GetModuleHandleW(NULL); - wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); - wc.hCursor = LoadCursor(NULL, IDC_ARROW); + WNDCLASSW wc = { 0, SubWindowProc }; + wc.hInstance = hInstance; + wc.hIcon = LoadIconW(NULL, IDI_APPLICATION); + wc.hCursor = LoadCursorW(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_3DFACE + 1); - wc.lpszClassName = CLASSNAME; + wc.lpszClassName = SUB_CLASSNAME; if (!RegisterClassW(&wc)) return -1; - HWND hwnd = CreateWindowW(CLASSNAME, CLASSNAME, WS_OVERLAPPEDWINDOW, + HWND hwnd = CreateWindowW(SUB_CLASSNAME, SUB_CLASSNAME, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 400, 100, - NULL, NULL, GetModuleHandleW(NULL), NULL); + NULL, NULL, hInstance, NULL); if (!hwnd) - return -1; + return -2; ShowWindow(hwnd, SW_SHOWNORMAL); UpdateWindow(hwnd); @@ -292,7 +311,5 @@ wWinMain(HINSTANCE hInstance, DispatchMessageW(&msg); } - CloseHandle(s_hEvent); - return 0; } diff --git a/modules/rostests/apitests/shell32/shell32_apitest_sub.h b/modules/rostests/apitests/shell32/shell32_apitest_sub.h index bff2e174683..5212ac6710e 100644 --- a/modules/rostests/apitests/shell32/shell32_apitest_sub.h +++ b/modules/rostests/apitests/shell32/shell32_apitest_sub.h @@ -5,72 +5,10 @@ #include #include -#define TEMP_FILE L"shell-notify-temporary.txt" -#define CLASSNAME L"SHChangeNotify testcase window" -#define EVENT_NAME L"SHChangeNotify testcase event" +#define MAIN_CLASSNAME L"SHChangeNotify main window" +#define SUB_CLASSNAME L"SHChangeNotify sub-window" #define WM_SHELL_NOTIFY (WM_USER + 100) -#define WM_GET_NOTIFY_FLAGS (WM_USER + 101) -#define WM_CLEAR_FLAGS (WM_USER + 102) -#define WM_SET_PATHS (WM_USER + 103) - -typedef enum TYPE -{ - TYPE_RENAMEITEM, - TYPE_CREATE, - TYPE_DELETE, - TYPE_MKDIR, - TYPE_RMDIR, - TYPE_RENAMEFOLDER, - TYPE_UPDATEDIR, - TYPE_MAX = TYPE_UPDATEDIR -} TYPE; - -typedef enum DIRTYPE -{ - DIRTYPE_NULL = 0, - DIRTYPE_DESKTOP, - DIRTYPE_MYCOMPUTER, - DIRTYPE_MYDOCUMENTS -} DIRTYPE; - -inline LPITEMIDLIST DoGetPidl(DIRTYPE iDir) -{ - LPITEMIDLIST ret = NULL; - - switch (iDir) - { - case DIRTYPE_NULL: - break; - - case DIRTYPE_DESKTOP: - SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &ret); - break; - - case DIRTYPE_MYCOMPUTER: - SHGetSpecialFolderLocation(NULL, CSIDL_DRIVES, &ret); - break; - - case DIRTYPE_MYDOCUMENTS: - SHGetSpecialFolderLocation(NULL, CSIDL_PERSONAL, &ret); - break; - } - - return ret; -} - -static inline LPWSTR DoGetDir(DIRTYPE iDir) -{ - static size_t s_index = 0; - static WCHAR s_pathes[3][MAX_PATH]; - LPWSTR psz = s_pathes[s_index]; - LPITEMIDLIST pidl = DoGetPidl(iDir); - psz[0] = 0; - SHGetPathFromIDListW(pidl, psz); - CoTaskMemFree(pidl); - s_index = (s_index + 1) % _countof(s_pathes); - return psz; -} static inline HWND DoWaitForWindow(LPCWSTR clsname, LPCWSTR text, BOOL bClosing, BOOL bForce) { From d23573beede756ed85c1b24bfc6938316724eff0 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Wed, 24 Apr 2024 10:22:42 +0900 Subject: [PATCH 002/182] [SHELL32_APITEST] Follow-up to #6796 (25e2f5f) This change will massively improve speed. JIRA issue: CORE-13950 - Set zero to INTERVAL. - Remove SHCNF_FLUSHNOWAIT. --- .../apitests/shell32/SHChangeNotify.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/modules/rostests/apitests/shell32/SHChangeNotify.cpp b/modules/rostests/apitests/shell32/SHChangeNotify.cpp index 498c3ad939d..5579ee87ab6 100644 --- a/modules/rostests/apitests/shell32/SHChangeNotify.cpp +++ b/modules/rostests/apitests/shell32/SHChangeNotify.cpp @@ -14,7 +14,7 @@ #define NUM_STAGE 4 #define NUM_STEP 8 #define NUM_CHECKS 12 -#define INTERVAL 600 +#define INTERVAL 0 #define MAX_EVENT_TYPE 6 static HWND s_hMainWnd = NULL, s_hSubWnd = NULL; @@ -338,7 +338,7 @@ static DWORD WINAPI StageThreadFunc(LPVOID arg) ZeroMemory(s_abChecks, sizeof(s_abChecks)); ret = DoCreateFile(s_szFile1InDir1); ok_int(ret, TRUE); - SHChangeNotify(SHCNE_CREATE, SHCNF_PATHW | SHCNF_FLUSH | SHCNF_FLUSHNOWAIT, s_szFile1InDir1, 0); + SHChangeNotify(SHCNE_CREATE, SHCNF_PATHW | SHCNF_FLUSH, s_szFile1InDir1, 0); ::Sleep(INTERVAL); DoStepCheck(s_iStage, s_iStep, StringFromChecks()); @@ -348,7 +348,7 @@ static DWORD WINAPI StageThreadFunc(LPVOID arg) ZeroMemory(s_abChecks, sizeof(s_abChecks)); ret = MoveFileW(s_szFile1InDir1, s_szFile2InDir1); ok_int(ret, TRUE); - SHChangeNotify(SHCNE_RENAMEITEM, SHCNF_PATHW | SHCNF_FLUSH | SHCNF_FLUSHNOWAIT, s_szFile1InDir1, s_szFile2InDir1); + SHChangeNotify(SHCNE_RENAMEITEM, SHCNF_PATHW | SHCNF_FLUSH, s_szFile1InDir1, s_szFile2InDir1); ::Sleep(INTERVAL); DoStepCheck(s_iStage, s_iStep, StringFromChecks()); @@ -358,7 +358,7 @@ static DWORD WINAPI StageThreadFunc(LPVOID arg) ZeroMemory(s_abChecks, sizeof(s_abChecks)); ret = DeleteFileW(s_szFile2InDir1); ok_int(ret, TRUE); - SHChangeNotify(SHCNE_DELETE, SHCNF_PATHW | SHCNF_FLUSH | SHCNF_FLUSHNOWAIT, s_szFile2InDir1, NULL); + SHChangeNotify(SHCNE_DELETE, SHCNF_PATHW | SHCNF_FLUSH, s_szFile2InDir1, NULL); ::Sleep(INTERVAL); DoStepCheck(s_iStage, s_iStep, StringFromChecks()); @@ -368,7 +368,7 @@ static DWORD WINAPI StageThreadFunc(LPVOID arg) ZeroMemory(s_abChecks, sizeof(s_abChecks)); ret = CreateDirectoryExW(s_szDir1, s_szDir1InDir1, NULL); ok_int(ret, TRUE); - SHChangeNotify(SHCNE_MKDIR, SHCNF_PATHW | SHCNF_FLUSH | SHCNF_FLUSHNOWAIT, s_szDir1InDir1, NULL); + SHChangeNotify(SHCNE_MKDIR, SHCNF_PATHW | SHCNF_FLUSH, s_szDir1InDir1, NULL); ::Sleep(INTERVAL); DoStepCheck(s_iStage, s_iStep, StringFromChecks()); @@ -378,7 +378,7 @@ static DWORD WINAPI StageThreadFunc(LPVOID arg) ZeroMemory(s_abChecks, sizeof(s_abChecks)); ret = DoCreateFile(s_szFile1InDir1InDir1); ok_int(ret, TRUE); - SHChangeNotify(SHCNE_CREATE, SHCNF_PATHW | SHCNF_FLUSH | SHCNF_FLUSHNOWAIT, s_szFile1InDir1InDir1, NULL); + SHChangeNotify(SHCNE_CREATE, SHCNF_PATHW | SHCNF_FLUSH, s_szFile1InDir1InDir1, NULL); ::Sleep(INTERVAL); DoStepCheck(s_iStage, s_iStep, StringFromChecks()); @@ -388,7 +388,7 @@ static DWORD WINAPI StageThreadFunc(LPVOID arg) ZeroMemory(s_abChecks, sizeof(s_abChecks)); ret = DeleteFileW(s_szFile1InDir1InDir1); ok_int(ret, TRUE); - SHChangeNotify(SHCNE_DELETE, SHCNF_PATHW | SHCNF_FLUSH | SHCNF_FLUSHNOWAIT, s_szFile1InDir1InDir1, NULL); + SHChangeNotify(SHCNE_DELETE, SHCNF_PATHW | SHCNF_FLUSH, s_szFile1InDir1InDir1, NULL); ::Sleep(INTERVAL); DoStepCheck(s_iStage, s_iStep, StringFromChecks()); @@ -398,7 +398,7 @@ static DWORD WINAPI StageThreadFunc(LPVOID arg) ZeroMemory(s_abChecks, sizeof(s_abChecks)); ret = ::MoveFileW(s_szDir1InDir1, s_szDir2InDir1); ok_int(ret, TRUE); - SHChangeNotify(SHCNE_RENAMEFOLDER, SHCNF_PATHW | SHCNF_FLUSH | SHCNF_FLUSHNOWAIT, s_szDir1InDir1, s_szDir2InDir1); + SHChangeNotify(SHCNE_RENAMEFOLDER, SHCNF_PATHW | SHCNF_FLUSH, s_szDir1InDir1, s_szDir2InDir1); ::Sleep(INTERVAL); DoStepCheck(s_iStage, s_iStep, StringFromChecks()); @@ -408,7 +408,7 @@ static DWORD WINAPI StageThreadFunc(LPVOID arg) ZeroMemory(s_abChecks, sizeof(s_abChecks)); ret = RemoveDirectoryW(s_szDir2InDir1); ok_int(ret, TRUE); - SHChangeNotify(SHCNE_RMDIR, SHCNF_PATHW | SHCNF_FLUSH | SHCNF_FLUSHNOWAIT, s_szDir2InDir1, NULL); + SHChangeNotify(SHCNE_RMDIR, SHCNF_PATHW | SHCNF_FLUSH, s_szDir2InDir1, NULL); ::Sleep(INTERVAL); DoStepCheck(s_iStage, s_iStep, StringFromChecks()); From 24e088daa8266cdd6947ed9067ebe473cbde9cd6 Mon Sep 17 00:00:00 2001 From: Oleg Dubinskiy Date: Wed, 24 Apr 2024 11:08:40 +0200 Subject: [PATCH 003/182] [MMEBUDDY] Implement support for looped wave playback (#6761) Fix playing wave header multiple times in case the caller requests to do it. In Windows, it is supported by WHDR_BEGINLOOP and WHDR_ENDLOOP flags (specified together) and dwLoops member of WAVEHDR structure (ususally set to 0xFFFFFFFF (INFINITE constant)). - Check whenther WHDR_BEGINLOOP | WHDR_ENDLOOP flags are set by the caller. - If they are, get the amount of times to play the header from WAVEHDR.dwLoops. - Perform wave header competion only when the loop count is equal to zero. Otherwise, don't do it. - When the header is entirely committed, in case completion is not needed, reset committed bytes count to the starting value to allow the header play again. - Decrement loop count in case it isn't set to INFINITE, to mark loop as played correctly. When this count becomes zero, then the playback is finished. - Get rid from SOUND_OVERLAPPED.PerformCompletion member. Use SOUND_DEVICE_INSTANCE.LoopsRemaining == 0 condition instead. - Do this only for WaveOut devices, since MSDN states it works only with output buffers. Hence, there is nothing changed for WaveIn. - Update an appropriate statement about unimplemented functionality from mmebuddy notes. TODO: handle the case when multiple headers are requested to be looped (WHDR_BEGINLOOP and WHDR_ENDLOOP are set separatedly: 1st flag - in the 1st header, and 2nd in the last header). Currently, only looping a single wave header is supported. This fixes the playback in the apps those request looped wave playback of some audio data (e. g., BRD Demo app, which did play its sound only first 500 ms before, now it plays endlessly until closing it manually). CORE-10118 --- sdk/include/reactos/libs/sound/mmebuddy.h | 1 - sdk/lib/drivers/sound/mmebuddy/readme.txt | 2 +- .../drivers/sound/mmebuddy/wave/streaming.c | 46 +++++++++++++++---- 3 files changed, 37 insertions(+), 12 deletions(-) diff --git a/sdk/include/reactos/libs/sound/mmebuddy.h b/sdk/include/reactos/libs/sound/mmebuddy.h index d124e8bbc1d..4056621b181 100644 --- a/sdk/include/reactos/libs/sound/mmebuddy.h +++ b/sdk/include/reactos/libs/sound/mmebuddy.h @@ -120,7 +120,6 @@ typedef struct _SOUND_OVERLAPPED OVERLAPPED Standard; struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance; PWAVEHDR Header; - BOOL PerformCompletion; LPOVERLAPPED_COMPLETION_ROUTINE OriginalCompletionRoutine; PVOID CompletionContext; diff --git a/sdk/lib/drivers/sound/mmebuddy/readme.txt b/sdk/lib/drivers/sound/mmebuddy/readme.txt index 91b52a78b63..a57127b8916 100644 --- a/sdk/lib/drivers/sound/mmebuddy/readme.txt +++ b/sdk/lib/drivers/sound/mmebuddy/readme.txt @@ -26,7 +26,7 @@ Unsupported MME messages: * Any not mentioned above Notes/Bugs: -* WHDR_BEGINLOOP and WHDR_ENDLOOP are ignored +* WHDR_BEGINLOOP and WHDR_ENDLOOP are not working for looping multiple wave headers, only for a single header. * Not possible to pause/restart playback diff --git a/sdk/lib/drivers/sound/mmebuddy/wave/streaming.c b/sdk/lib/drivers/sound/mmebuddy/wave/streaming.c index 3a4cabc9385..15a58cfd486 100644 --- a/sdk/lib/drivers/sound/mmebuddy/wave/streaming.c +++ b/sdk/lib/drivers/sound/mmebuddy/wave/streaming.c @@ -10,7 +10,6 @@ #include "precomp.h" - /* DoWaveStreaming Check if there is streaming to be done, and if so, do it. @@ -54,6 +53,22 @@ DoWaveStreaming( return; } + /* Do we need to loop a header? */ + if (DeviceType == WAVE_OUT_DEVICE_TYPE && (Header->dwFlags & WHDR_BEGINLOOP)) + { + if ((Header->dwFlags & WHDR_ENDLOOP)) + { + /* Get loop count */ + SoundDeviceInstance->LoopsRemaining = Header->dwLoops; + } + else + { + /* Report and help notice such a case */ + SND_WARN(L"Looping multiple headers is UNIMPLEMENTED. Will play once only\n"); + SND_ASSERT((Header->dwFlags & (WHDR_BEGINLOOP | WHDR_ENDLOOP)) == (WHDR_BEGINLOOP | WHDR_ENDLOOP)); + } + } + while ( ( SoundDeviceInstance->OutstandingBuffers < SoundDeviceInstance->BufferCount ) && ( Header ) && SoundDeviceInstance->ResetInProgress == FALSE) { @@ -106,10 +121,6 @@ DoWaveStreaming( Overlap->SoundDeviceInstance = SoundDeviceInstance; Overlap->Header = Header; - /* Don't complete this header if it's part of a loop */ - Overlap->PerformCompletion = TRUE; -// ( SoundDeviceInstance->LoopsRemaining > 0 ); - /* Adjust the commit-related counters */ HeaderExtension->BytesCommitted += BytesToCommit; ++ SoundDeviceInstance->OutstandingBuffers; @@ -189,8 +200,8 @@ CompleteIO( -- SoundDeviceInstance->OutstandingBuffers; /* Did we finish a WAVEHDR and aren't looping? */ - if ( HdrExtension->BytesCompleted + dwNumberOfBytesTransferred >= WaveHdr->dwBufferLength && - SoundOverlapped->PerformCompletion ) + if (HdrExtension->BytesCompleted + dwNumberOfBytesTransferred >= WaveHdr->dwBufferLength && + SoundDeviceInstance->LoopsRemaining == 0) { /* Wave buffer fully completed */ Bytes = WaveHdr->dwBufferLength - HdrExtension->BytesCompleted; @@ -203,9 +214,24 @@ CompleteIO( } else { - /* Partially completed */ - HdrExtension->BytesCompleted += dwNumberOfBytesTransferred; - SND_TRACE(L"%d/%d bytes of wavehdr completed\n", HdrExtension->BytesCompleted, WaveHdr->dwBufferLength); + /* Do we loop a header? */ + if (HdrExtension->BytesCommitted == WaveHdr->dwBufferLength && + SoundDeviceInstance->LoopsRemaining != 0) + { + /* Reset amount of bytes and decrement loop count, to play next iteration */ + HdrExtension->BytesCommitted = 0; + + if (SoundDeviceInstance->LoopsRemaining != INFINITE) + --SoundDeviceInstance->LoopsRemaining; + SND_TRACE(L"Looping the header, remaining loops %u\n", SoundDeviceInstance->LoopsRemaining); + } + else + { + /* Partially completed */ + HdrExtension->BytesCompleted += dwNumberOfBytesTransferred; + SND_TRACE(L"%u/%u bytes of wavehdr completed\n", HdrExtension->BytesCompleted, WaveHdr->dwBufferLength); + } + break; } From 8337df2bd107f63d511bec33bfed49f657b299ff Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Wed, 24 Apr 2024 18:25:15 +0900 Subject: [PATCH 004/182] [SHELL32_APITEST] SHChangeNotify: Improve coverity (#6798) Improve coverity and speed. JIRA issue: CORE-13950 - Move NUM_STAGE to the header file. - Add stages. - Add DIRTYPE_DESKTOP_DIR and DIRTYPE_PRINTERS directory types. - Improve speed more. --- .../apitests/shell32/SHChangeNotify.cpp | 57 ++++++-------- .../apitests/shell32/shell32_apitest_sub.cpp | 76 +++++++++++++++++-- .../apitests/shell32/shell32_apitest_sub.h | 2 + 3 files changed, 96 insertions(+), 39 deletions(-) diff --git a/modules/rostests/apitests/shell32/SHChangeNotify.cpp b/modules/rostests/apitests/shell32/SHChangeNotify.cpp index 5579ee87ab6..f06921961d0 100644 --- a/modules/rostests/apitests/shell32/SHChangeNotify.cpp +++ b/modules/rostests/apitests/shell32/SHChangeNotify.cpp @@ -11,7 +11,6 @@ #include "shell32_apitest_sub.h" #include -#define NUM_STAGE 4 #define NUM_STEP 8 #define NUM_CHECKS 12 #define INTERVAL 0 @@ -236,6 +235,10 @@ static void DoStepCheck(INT iStage, INT iStep, LPCSTR checks) switch (iStage) { case 0: + case 1: + case 3: + case 6: + case 9: { static const TEST_ANSWER c_answers[] = { @@ -253,25 +256,28 @@ static void DoStepCheck(INT iStage, INT iStep, LPCSTR checks) answer = c_answers[iStep].answer; break; } - case 1: + case 2: + case 4: + case 5: + case 7: { static const TEST_ANSWER c_answers[] = { - { __LINE__, "000000010000010000000000" }, // 0 - { __LINE__, "000000040000000000000400" }, // 1 - { __LINE__, "000000000200020000000000" }, // 2 - { __LINE__, "000000000000080000000000" }, // 3 - { __LINE__, "000000000001010000000000" }, // 4 - { __LINE__, "000000000002020000000000" }, // 5 - { __LINE__, "000000000000000020000000" }, // 6 - { __LINE__, "000010000000100000000000" }, // 7 + { __LINE__, "000000000000000000000000" }, // 0 + { __LINE__, "000000000000000000000000" }, // 1 + { __LINE__, "000000000000000000000000" }, // 2 + { __LINE__, "000000000000000000000000" }, // 3 + { __LINE__, "000000000000000000000000" }, // 4 + { __LINE__, "000000000000000000000000" }, // 5 + { __LINE__, "000000000000000000000000" }, // 6 + { __LINE__, "000000000000000000000000" }, // 7 }; C_ASSERT(_countof(c_answers) == NUM_STEP); lineno = c_answers[iStep].lineno; answer = c_answers[iStep].answer; break; } - case 2: + case 8: { static const TEST_ANSWER c_answers[] = { @@ -279,8 +285,8 @@ static void DoStepCheck(INT iStage, INT iStep, LPCSTR checks) { __LINE__, "000000040000000000000400" }, // 1 { __LINE__, "000000000200020000000000" }, // 2 { __LINE__, "000000000000080000000000" }, // 3 - { __LINE__, "000000000001010000000000" }, // 4 // Recursive - { __LINE__, "000000000002020000000000" }, // 5 // Recursive + { __LINE__, "000000000001010000000000" }, // 4 // Recursive case + { __LINE__, "000000000002020000000000" }, // 5 // Recursive case { __LINE__, "000000000000000020000000" }, // 6 { __LINE__, "000010000000100000000000" }, // 7 }; @@ -290,30 +296,13 @@ static void DoStepCheck(INT iStage, INT iStep, LPCSTR checks) if (iStep == 4 || iStep == 5) // Recursive cases { if (lstrcmpA(checks, "000000000000000000000000") == 0) + { + trace("Warning! Recursive cases...\n"); answer = "000000000000000000000000"; - else - trace("Warning\n"); + } } break; } - case 3: - { - static const TEST_ANSWER c_answers[] = - { - { __LINE__, "000000010000010000000000" }, // 0 - { __LINE__, "000000040000000000000400" }, // 1 - { __LINE__, "000000000200020000000000" }, // 2 - { __LINE__, "000000000000080000000000" }, // 3 - { __LINE__, "000000000001010000000000" }, // 4 // Recursive - { __LINE__, "000000000002020000000000" }, // 5 // Recursive - { __LINE__, "000000000000000020000000" }, // 6 - { __LINE__, "000010000000100000000000" }, // 7 - }; - C_ASSERT(_countof(c_answers) == NUM_STEP); - lineno = c_answers[iStep].lineno; - answer = c_answers[iStep].answer; - break; - } default: { assert(0); @@ -334,7 +323,7 @@ static DWORD WINAPI StageThreadFunc(LPVOID arg) // 0: Create file1 in dir1 s_iStep = 0; trace("Step %d\n", s_iStep); - ::Sleep(1000); // Extra wait + SHChangeNotify(0, SHCNF_PATHW | SHCNF_FLUSH, NULL, NULL); ZeroMemory(s_abChecks, sizeof(s_abChecks)); ret = DoCreateFile(s_szFile1InDir1); ok_int(ret, TRUE); diff --git a/modules/rostests/apitests/shell32/shell32_apitest_sub.cpp b/modules/rostests/apitests/shell32/shell32_apitest_sub.cpp index db591a9f0d6..09c46b3465c 100644 --- a/modules/rostests/apitests/shell32/shell32_apitest_sub.cpp +++ b/modules/rostests/apitests/shell32/shell32_apitest_sub.cpp @@ -14,7 +14,9 @@ typedef enum DIRTYPE { DIRTYPE_DESKTOP = 0, + DIRTYPE_DESKTOP_DIR, DIRTYPE_DRIVES, + DIRTYPE_PRINTERS, DIRTYPE_DIR1, DIRTYPE_MAX } DIRTYPE; @@ -24,8 +26,6 @@ static LPITEMIDLIST s_pidl[DIRTYPE_MAX]; static UINT s_uRegID = 0; static INT s_iStage = -1; -#define NUM_STAGE 4 - #define EVENTS (SHCNE_CREATE | SHCNE_DELETE | SHCNE_MKDIR | SHCNE_RMDIR | \ SHCNE_RENAMEFOLDER | SHCNE_RENAMEITEM | SHCNE_UPDATEDIR | SHCNE_UPDATEITEM) @@ -40,11 +40,23 @@ inline LPITEMIDLIST DoGetPidl(INT iDir) SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &ret); break; } + case DIRTYPE_DESKTOP_DIR: + { + WCHAR szPath1[MAX_PATH]; + SHGetSpecialFolderPathW(NULL, szPath1, CSIDL_DESKTOPDIRECTORY, FALSE); + ret = ILCreateFromPathW(szPath1); + break; + } case DIRTYPE_DRIVES: { SHGetSpecialFolderLocation(NULL, CSIDL_DRIVES, &ret); break; } + case DIRTYPE_PRINTERS: + { + SHGetSpecialFolderLocation(NULL, CSIDL_PRINTERS, &ret); + break; + } case DIRTYPE_DIR1: { WCHAR szPath1[MAX_PATH]; @@ -84,22 +96,70 @@ static BOOL InitSHCN(HWND hwnd) switch (s_iStage) { case 0: + { + entry.fRecursive = FALSE; + entry.pidl = NULL; + sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel; + events = EVENTS; + break; + } + case 1: { entry.fRecursive = TRUE; + entry.pidl = NULL; + sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel; + events = EVENTS; + break; + } + case 2: + { + entry.fRecursive = FALSE; entry.pidl = s_pidl[DIRTYPE_DESKTOP]; sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel; events = EVENTS; break; } - case 1: + case 3: { entry.fRecursive = TRUE; + entry.pidl = s_pidl[DIRTYPE_DESKTOP]; + sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel; + events = EVENTS; + break; + } + case 4: + { + entry.fRecursive = TRUE; + entry.pidl = s_pidl[DIRTYPE_DESKTOP_DIR]; + sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel; + events = EVENTS; + break; + } + case 5: + { + entry.fRecursive = FALSE; entry.pidl = s_pidl[DIRTYPE_DRIVES]; sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel; events = EVENTS; break; } - case 2: + case 6: + { + entry.fRecursive = TRUE; + entry.pidl = s_pidl[DIRTYPE_DRIVES]; + sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel; + events = EVENTS; + break; + } + case 7: + { + entry.fRecursive = TRUE; + entry.pidl = s_pidl[DIRTYPE_PRINTERS]; + sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel; + events = EVENTS; + break; + } + case 8: { entry.fRecursive = FALSE; entry.pidl = s_pidl[DIRTYPE_DIR1]; @@ -107,7 +167,7 @@ static BOOL InitSHCN(HWND hwnd) events = EVENTS; break; } - case 3: + case 9: { entry.fRecursive = TRUE; entry.pidl = s_pidl[DIRTYPE_DIR1]; @@ -293,13 +353,19 @@ wWinMain( wc.hbrBackground = (HBRUSH)(COLOR_3DFACE + 1); wc.lpszClassName = SUB_CLASSNAME; if (!RegisterClassW(&wc)) + { + assert(0); return -1; + } HWND hwnd = CreateWindowW(SUB_CLASSNAME, SUB_CLASSNAME, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 400, 100, NULL, NULL, hInstance, NULL); if (!hwnd) + { + assert(0); return -2; + } ShowWindow(hwnd, SW_SHOWNORMAL); UpdateWindow(hwnd); diff --git a/modules/rostests/apitests/shell32/shell32_apitest_sub.h b/modules/rostests/apitests/shell32/shell32_apitest_sub.h index 5212ac6710e..8102c078dcd 100644 --- a/modules/rostests/apitests/shell32/shell32_apitest_sub.h +++ b/modules/rostests/apitests/shell32/shell32_apitest_sub.h @@ -10,6 +10,8 @@ #define WM_SHELL_NOTIFY (WM_USER + 100) +#define NUM_STAGE 10 + static inline HWND DoWaitForWindow(LPCWSTR clsname, LPCWSTR text, BOOL bClosing, BOOL bForce) { HWND hwnd = NULL; From 75cc5b2b1cd03b8e0dd7730a187b1f85ad906161 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Wed, 24 Apr 2024 19:03:10 +0900 Subject: [PATCH 005/182] [SHELL32_APITEST] Commonize FindSubProgram function and delete obsolete "iexplore.exe" tests. CORE-13950 --- .../apitests/shell32/SHChangeNotify.cpp | 20 +--------------- .../apitests/shell32/ShellExecCmdLine.cpp | 23 +------------------ .../apitests/shell32/shell32_apitest_sub.h | 18 +++++++++++++++ 3 files changed, 20 insertions(+), 41 deletions(-) diff --git a/modules/rostests/apitests/shell32/SHChangeNotify.cpp b/modules/rostests/apitests/shell32/SHChangeNotify.cpp index f06921961d0..e853baa875f 100644 --- a/modules/rostests/apitests/shell32/SHChangeNotify.cpp +++ b/modules/rostests/apitests/shell32/SHChangeNotify.cpp @@ -88,24 +88,6 @@ static void TEST_Quit(void) DoDeleteFilesAndDirs(); } -static BOOL FindSubProgram(void) -{ - GetModuleFileNameW(NULL, s_szSubProgram, _countof(s_szSubProgram)); - PathRemoveFileSpecW(s_szSubProgram); - PathAppendW(s_szSubProgram, L"shell32_apitest_sub.exe"); - - if (!PathFileExistsW(s_szSubProgram)) - { - PathRemoveFileSpecW(s_szSubProgram); - PathAppendW(s_szSubProgram, L"testdata\\shell32_apitest_sub.exe"); - - if (!PathFileExistsW(s_szSubProgram)) - return FALSE; - } - - return TRUE; -} - static void DoBuildFilesAndDirs(void) { WCHAR szPath1[MAX_PATH]; @@ -533,7 +515,7 @@ MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) static BOOL TEST_Init(void) { - if (!FindSubProgram()) + if (!FindSubProgram(s_szSubProgram, _countof(s_szSubProgram))) { skip("shell32_apitest_sub.exe not found\n"); return FALSE; diff --git a/modules/rostests/apitests/shell32/ShellExecCmdLine.cpp b/modules/rostests/apitests/shell32/ShellExecCmdLine.cpp index c0a2104a25b..a9082d0fc07 100644 --- a/modules/rostests/apitests/shell32/ShellExecCmdLine.cpp +++ b/modules/rostests/apitests/shell32/ShellExecCmdLine.cpp @@ -256,27 +256,6 @@ static WCHAR s_win_test_exe[MAX_PATH]; static WCHAR s_sys_bat_file[MAX_PATH]; static WCHAR s_cur_dir[MAX_PATH]; -static BOOL -GetSubProgramPath(void) -{ - GetModuleFileNameW(NULL, s_sub_program, _countof(s_sub_program)); - PathRemoveFileSpecW(s_sub_program); - PathAppendW(s_sub_program, L"shell32_apitest_sub.exe"); - - if (!PathFileExistsW(s_sub_program)) - { - PathRemoveFileSpecW(s_sub_program); - PathAppendW(s_sub_program, L"testdata\\shell32_apitest_sub.exe"); - - if (!PathFileExistsW(s_sub_program)) - { - return FALSE; - } - } - - return TRUE; -} - static const TEST_ENTRY s_entries_1[] = { // NULL @@ -677,7 +656,7 @@ START_TEST(ShellExecCmdLine) } } - if (!GetSubProgramPath()) + if (!FindSubProgram(s_sub_program, _countof(s_sub_program))) { skip("shell32_apitest_sub.exe is not found\n"); return; diff --git a/modules/rostests/apitests/shell32/shell32_apitest_sub.h b/modules/rostests/apitests/shell32/shell32_apitest_sub.h index 8102c078dcd..d64e2af03de 100644 --- a/modules/rostests/apitests/shell32/shell32_apitest_sub.h +++ b/modules/rostests/apitests/shell32/shell32_apitest_sub.h @@ -12,6 +12,24 @@ #define NUM_STAGE 10 +static inline BOOL FindSubProgram(LPWSTR pszSubProgram, DWORD cchSubProgram) +{ + GetModuleFileNameW(NULL, pszSubProgram, cchSubProgram); + PathRemoveFileSpecW(pszSubProgram); + PathAppendW(pszSubProgram, L"shell32_apitest_sub.exe"); + + if (!PathFileExistsW(pszSubProgram)) + { + PathRemoveFileSpecW(pszSubProgram); + PathAppendW(pszSubProgram, L"testdata\\shell32_apitest_sub.exe"); + + if (!PathFileExistsW(pszSubProgram)) + return FALSE; + } + + return TRUE; +} + static inline HWND DoWaitForWindow(LPCWSTR clsname, LPCWSTR text, BOOL bClosing, BOOL bForce) { HWND hwnd = NULL; From c0c270e90e65c013b19fdf2c1752ac19756275f9 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Wed, 24 Apr 2024 19:06:48 +0900 Subject: [PATCH 006/182] [SHELL32_APITEST] Delete obsolete "iexplore.exe" tests Follow-up to 75cc5b2. CORE-13950 --- modules/rostests/apitests/shell32/ShellExecCmdLine.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/modules/rostests/apitests/shell32/ShellExecCmdLine.cpp b/modules/rostests/apitests/shell32/ShellExecCmdLine.cpp index a9082d0fc07..37ee9c0260e 100644 --- a/modules/rostests/apitests/shell32/ShellExecCmdLine.cpp +++ b/modules/rostests/apitests/shell32/ShellExecCmdLine.cpp @@ -441,11 +441,6 @@ static const TEST_ENTRY s_entries_1[] = { __LINE__, TRUE, TRUE, L"shell:::{450d8fba-ad25-11d0-98a8-0800361b1103}", NULL }, // shell:sendto { __LINE__, TRUE, TRUE, L"shell:sendto", NULL }, - // iexplore.exe - { __LINE__, TRUE, FALSE, L"iexplore", NULL }, - { __LINE__, TRUE, FALSE, L"iexplore.exe", NULL }, - { __LINE__, TRUE, TRUE, L"iexplore", NULL }, - { __LINE__, TRUE, TRUE, L"iexplore.exe", NULL }, // https://google.com { __LINE__, TRUE, FALSE, L"https://google.com", NULL }, { __LINE__, TRUE, TRUE, L"https://google.com", NULL }, From 91acf823d8d4e2b6b6e8012c98b1f178922b1547 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Wed, 24 Apr 2024 19:44:30 +0900 Subject: [PATCH 007/182] [SHELL32] SHChangeNotify: Use tree for CDirectoryList (#6784) Optimize for speed and memory. JIRA issue: CORE-13950 CDirectoryList class exists just for remembering which file item is a directory or not, in order to notify the filesystem item changes. This information can become a tree data structure. - Add CFSPathIterator and CFSNode helper classes. - CFSNode is a class for tree nodes. - Re-implement CDirectoryList class by using tree nodes. - Delete CDirectoryItem class. --- .../shell32/shelldesktop/CDirectoryList.cpp | 324 ++++++++++++++---- .../shell32/shelldesktop/CDirectoryList.h | 85 +---- .../shelldesktop/CDirectoryWatcher.cpp | 2 +- 3 files changed, 264 insertions(+), 147 deletions(-) diff --git a/dll/win32/shell32/shelldesktop/CDirectoryList.cpp b/dll/win32/shell32/shelldesktop/CDirectoryList.cpp index 2bdd36f0eb0..096543e73e2 100644 --- a/dll/win32/shell32/shelldesktop/CDirectoryList.cpp +++ b/dll/win32/shell32/shelldesktop/CDirectoryList.cpp @@ -2,131 +2,307 @@ * PROJECT: shell32 * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) * PURPOSE: Shell change notification - * COPYRIGHT: Copyright 2020 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com) + * COPYRIGHT: Copyright 2020-2024 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com) */ #include "shelldesktop.h" #include "CDirectoryList.h" -#include // for assert +#include WINE_DEFAULT_DEBUG_CHANNEL(shcn); -BOOL CDirectoryList::ContainsPath(LPCWSTR pszPath) const +/////////////////////////////////////////////////////////////////////////////////////// +// File-system path iterator + +class CFSPathIterator { - assert(!PathIsRelativeW(pszPath)); +public: + CStringW m_strFullName; + INT m_ich; - for (INT i = 0; i < m_items.GetSize(); ++i) + CFSPathIterator(CStringW strFullName) : m_strFullName(strFullName), m_ich(0) { - if (m_items[i].IsEmpty()) - continue; + } + + bool Next(CStringW& strNext); +}; + +/////////////////////////////////////////////////////////////////////////////////////// + +bool CFSPathIterator::Next(CStringW& strNext) +{ + if (m_ich >= m_strFullName.GetLength()) + return false; - if (m_items[i].EqualPath(pszPath)) - return TRUE; // matched + auto ich = m_strFullName.Find(L'\\', m_ich); + if (ich < 0) + { + ich = m_strFullName.GetLength(); + strNext = m_strFullName.Mid(m_ich, ich - m_ich); + m_ich = ich; } - return FALSE; + else + { + strNext = m_strFullName.Mid(m_ich, ich - m_ich); + m_ich = ich + 1; + } + return true; } -BOOL CDirectoryList::AddPath(LPCWSTR pszPath) +/////////////////////////////////////////////////////////////////////////////////////// +// File-system node + +class CFSNode { - assert(!PathIsRelativeW(pszPath)); - if (ContainsPath(pszPath)) - return FALSE; - for (INT i = 0; i < m_items.GetSize(); ++i) +public: + CStringW m_strName; + + CFSNode(const CStringW& strName, CFSNode* pParent = NULL); + ~CFSNode(); + + CStringW GetFullName(); + CFSNode* BuildPath(const CStringW& strFullName, BOOL bMarkNotExpanded = TRUE); + + CFSNode* FindChild(const CStringW& strName); + CFSNode* Find(const CStringW& strFullName); + + BOOL RemoveChild(CFSNode *pNode); + BOOL Remove(); + + void MarkNotExpanded(); + + void Expand(); + void clear(); + +protected: + BOOL m_bExpand; + CFSNode* m_pParent; + CSimpleArray m_children; +}; + +/////////////////////////////////////////////////////////////////////////////////////// + +CFSNode::CFSNode(const CStringW& strName, CFSNode* pParent) + : m_strName(strName) + , m_bExpand(FALSE) + , m_pParent(pParent) +{ +} + +CFSNode::~CFSNode() +{ + clear(); +} + +CStringW CFSNode::GetFullName() +{ + CStringW ret; + if (m_pParent) + ret = m_pParent->GetFullName(); + if (ret.GetLength()) + ret += L'\\'; + ret += m_strName; + return ret; +} + +CFSNode* CFSNode::FindChild(const CStringW& strName) +{ + for (INT iItem = 0; iItem < m_children.GetSize(); ++iItem) { - if (m_items[i].IsEmpty()) + auto pChild = m_children[iItem]; + if (pChild && + pChild->m_strName.GetLength() == strName.GetLength() && + lstrcmpiW(pChild->m_strName, strName) == 0) { - m_items[i].SetPath(pszPath); - return TRUE; + return pChild; } } - return m_items.Add(pszPath); + return NULL; } -BOOL CDirectoryList::RenamePath(LPCWSTR pszPath1, LPCWSTR pszPath2) +BOOL CFSNode::RemoveChild(CFSNode *pNode) { - assert(!PathIsRelativeW(pszPath1)); - assert(!PathIsRelativeW(pszPath2)); - - for (INT i = 0; i < m_items.GetSize(); ++i) + for (INT iItem = 0; iItem < m_children.GetSize(); ++iItem) { - if (m_items[i].EqualPath(pszPath1)) + auto& pChild = m_children[iItem]; + if (pChild == pNode) { - // matched - m_items[i].SetPath(pszPath2); + auto pOld = pChild; + pChild = NULL; + delete pOld; return TRUE; } } return FALSE; } -BOOL CDirectoryList::DeletePath(LPCWSTR pszPath) +BOOL CFSNode::Remove() { - assert(!PathIsRelativeW(pszPath)); + if (m_pParent) + return m_pParent->RemoveChild(this); + return FALSE; +} - for (INT i = 0; i < m_items.GetSize(); ++i) +CFSNode* CFSNode::Find(const CStringW& strFullName) +{ + CFSPathIterator it(strFullName); + CStringW strName; + CFSNode *pChild, *pNode; + for (pNode = this; it.Next(strName); pNode = pChild) { - if (m_items[i].EqualPath(pszPath)) - { - // matched - m_items[i].SetPath(NULL); - return TRUE; - } + pChild = pNode->FindChild(strName); + if (!pChild) + return NULL; } - return FALSE; + return pNode; } -BOOL CDirectoryList::AddPathsFromDirectory(LPCWSTR pszDirectoryPath) +void CFSNode::MarkNotExpanded() { - // get the full path - WCHAR szPath[MAX_PATH]; - lstrcpynW(szPath, pszDirectoryPath, _countof(szPath)); - assert(!PathIsRelativeW(szPath)); + for (auto pNode = this; pNode; pNode = pNode->m_pParent) + pNode->m_bExpand = FALSE; +} - // is it a directory? - if (!PathIsDirectoryW(szPath)) - return FALSE; +CFSNode* CFSNode::BuildPath(const CStringW& strFullName, BOOL bMarkNotExpanded) +{ + CFSPathIterator it(strFullName); + CStringW strName; + CFSNode *pNode, *pChild = NULL; + for (pNode = this; it.Next(strName); pNode = pChild) + { + pChild = pNode->FindChild(strName); + if (pChild) + continue; - // add the path - if (!AddPath(szPath)) - return FALSE; + pChild = new CFSNode(strName, pNode); + pNode->m_children.Add(pChild); + if (bMarkNotExpanded) + pNode->MarkNotExpanded(); + } + return pNode; +} + +void CFSNode::Expand() +{ + if (m_bExpand) + return; + + auto strSpec = GetFullName(); + strSpec += L"\\*"; - // enumerate the file items to remember - PathAppendW(szPath, L"*"); WIN32_FIND_DATAW find; - HANDLE hFind = FindFirstFileW(szPath, &find); + HANDLE hFind = ::FindFirstFileW(strSpec, &find); if (hFind == INVALID_HANDLE_VALUE) - { - ERR("FindFirstFileW failed\n"); - return FALSE; - } + return; - LPWSTR pch; do { - // ignore "." and ".." - pch = find.cFileName; - if (pch[0] == L'.' && (pch[1] == 0 || (pch[1] == L'.' && pch[2] == 0))) - continue; - - // build a path - PathRemoveFileSpecW(szPath); - if (lstrlenW(szPath) + lstrlenW(find.cFileName) + 1 > MAX_PATH) + if (lstrcmpW(find.cFileName, L".") == 0 || + lstrcmpW(find.cFileName, L"..") == 0 || + !(find.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) || + (find.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)) { - ERR("szPath is too long\n"); continue; } - PathAppendW(szPath, find.cFileName); - // add the path and do recurse - if (find.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) + auto pNode = FindChild(find.cFileName); + if (!pNode) { - if (m_fRecursive) - AddPathsFromDirectory(szPath); - else - AddPath(szPath); + pNode = new CFSNode(find.cFileName, this); + m_children.Add(pNode); } - } while (FindNextFileW(hFind, &find)); + pNode->Expand(); + } while (::FindNextFileW(hFind, &find)); + ::FindClose(hFind); + + m_bExpand = TRUE; +} + +void CFSNode::clear() +{ + for (INT iItem = 0; iItem < m_children.GetSize(); ++iItem) + { + auto& pChild = m_children[iItem]; + delete pChild; + pChild = NULL; + } + m_children.RemoveAll(); +} + +/////////////////////////////////////////////////////////////////////////////////////// +// CDirectoryList + +CDirectoryList::CDirectoryList(CFSNode *pRoot) + : m_pRoot(pRoot ? pRoot : (new CFSNode(L""))) + , m_fRecursive(FALSE) +{ +} + +CDirectoryList::CDirectoryList(CFSNode *pRoot, LPCWSTR pszDirectoryPath, BOOL fRecursive) + : m_pRoot(pRoot ? pRoot : (new CFSNode(L""))) + , m_fRecursive(fRecursive) +{ + AddPathsFromDirectory(pszDirectoryPath); +} + +CDirectoryList::~CDirectoryList() +{ + delete m_pRoot; +} + +BOOL CDirectoryList::ContainsPath(LPCWSTR pszPath) const +{ + ATLASSERT(!PathIsRelativeW(pszPath)); + + return !!m_pRoot->Find(pszPath); +} + +BOOL CDirectoryList::AddPath(LPCWSTR pszPath) +{ + ATLASSERT(!PathIsRelativeW(pszPath)); + + auto pNode = m_pRoot->BuildPath(pszPath); + if (pNode && m_fRecursive) + pNode->Expand(); + + return TRUE; +} + +BOOL CDirectoryList::RenamePath(LPCWSTR pszPath1, LPCWSTR pszPath2) +{ + ATLASSERT(!PathIsRelativeW(pszPath1)); + ATLASSERT(!PathIsRelativeW(pszPath2)); + + auto pNode = m_pRoot->Find(pszPath1); + if (!pNode) + return FALSE; + + LPWSTR pch = wcsrchr(pszPath2, L'\\'); + if (!pch) + return FALSE; + + pNode->m_strName = pch + 1; + return TRUE; +} + +BOOL CDirectoryList::DeletePath(LPCWSTR pszPath) +{ + ATLASSERT(!PathIsRelativeW(pszPath)); + + auto pNode = m_pRoot->Find(pszPath); + if (!pNode) + return FALSE; + + pNode->Remove(); + return TRUE; +} + +BOOL CDirectoryList::AddPathsFromDirectory(LPCWSTR pszDirectoryPath) +{ + ATLASSERT(!PathIsRelativeW(pszPath)); - FindClose(hFind); + auto pNode = m_pRoot->BuildPath(pszDirectoryPath); + if (pNode) + pNode->Expand(); return TRUE; } diff --git a/dll/win32/shell32/shelldesktop/CDirectoryList.h b/dll/win32/shell32/shelldesktop/CDirectoryList.h index 1e9559c4b24..3d6abda19eb 100644 --- a/dll/win32/shell32/shelldesktop/CDirectoryList.h +++ b/dll/win32/shell32/shelldesktop/CDirectoryList.h @@ -1,93 +1,34 @@ +/* + * PROJECT: shell32 + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: Shell change notification + * COPYRIGHT: Copyright 2024 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com) + */ + #pragma once #include // for CSimpleArray ////////////////////////////////////////////////////////////////////////////// -// A pathname with info -class CDirectoryItem -{ -public: - CDirectoryItem() : m_pszPath(NULL) - { - } - - CDirectoryItem(LPCWSTR pszPath) - { - m_pszPath = _wcsdup(pszPath); - } - - CDirectoryItem(const CDirectoryItem& item) - : m_pszPath(_wcsdup(item.m_pszPath)) - { - } - - CDirectoryItem& operator=(const CDirectoryItem& item) - { - if (this != &item) - { - free(m_pszPath); - m_pszPath = _wcsdup(item.m_pszPath); - } - return *this; - } - - ~CDirectoryItem() - { - free(m_pszPath); - } - - BOOL IsEmpty() const - { - return m_pszPath == NULL; - } - - LPCWSTR GetPath() const - { - return m_pszPath; - } - - void SetPath(LPCWSTR pszPath) - { - free(m_pszPath); - m_pszPath = _wcsdup(pszPath); - } - - BOOL EqualPath(LPCWSTR pszPath) const - { - return m_pszPath != NULL && lstrcmpiW(m_pszPath, pszPath) == 0; - } - -protected: - LPWSTR m_pszPath; // A full path, malloc'ed -}; +class CFSNode; // the directory list class CDirectoryList { public: - CDirectoryList() : m_fRecursive(FALSE) - { - } - - CDirectoryList(LPCWSTR pszDirectoryPath, BOOL fRecursive) - : m_fRecursive(fRecursive) - { - AddPathsFromDirectory(pszDirectoryPath); - } + CDirectoryList(CFSNode *pRoot); + CDirectoryList(CFSNode *pRoot, LPCWSTR pszDirectoryPath, BOOL fRecursive); + ~CDirectoryList(); BOOL ContainsPath(LPCWSTR pszPath) const; BOOL AddPath(LPCWSTR pszPath); BOOL AddPathsFromDirectory(LPCWSTR pszDirectoryPath); BOOL RenamePath(LPCWSTR pszPath1, LPCWSTR pszPath2); BOOL DeletePath(LPCWSTR pszPath); - - void RemoveAll() - { - m_items.RemoveAll(); - } + void RemoveAll(); protected: + CFSNode *m_pRoot; BOOL m_fRecursive; - CSimpleArray m_items; }; diff --git a/dll/win32/shell32/shelldesktop/CDirectoryWatcher.cpp b/dll/win32/shell32/shelldesktop/CDirectoryWatcher.cpp index d5056a64faa..ce3fac7f8b6 100644 --- a/dll/win32/shell32/shelldesktop/CDirectoryWatcher.cpp +++ b/dll/win32/shell32/shelldesktop/CDirectoryWatcher.cpp @@ -71,7 +71,7 @@ static void NTAPI _RequestAllTerminationAPC(ULONG_PTR Parameter) CDirectoryWatcher::CDirectoryWatcher(LPCWSTR pszDirectoryPath, BOOL fSubTree) : m_fDead(FALSE) , m_fRecursive(fSubTree) - , m_dir_list(pszDirectoryPath, fSubTree) + , m_dir_list(NULL, pszDirectoryPath, fSubTree) { TRACE("CDirectoryWatcher::CDirectoryWatcher: %p, '%S'\n", this, pszDirectoryPath); From d55f49978d10aebff5378be674c8cc51386c1908 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Thu, 25 Apr 2024 09:01:21 +0900 Subject: [PATCH 008/182] Revert "[SHELL32] SHChangeNotify: Use tree for CDirectoryList (#6784)" (#6800) Reverts #6784 that was a guilty commit of CORE-19531 that causing performance regression. JIRA issue: CORE-19531 --- .../shell32/shelldesktop/CDirectoryList.cpp | 324 ++++-------------- .../shell32/shelldesktop/CDirectoryList.h | 85 ++++- .../shelldesktop/CDirectoryWatcher.cpp | 2 +- 3 files changed, 147 insertions(+), 264 deletions(-) diff --git a/dll/win32/shell32/shelldesktop/CDirectoryList.cpp b/dll/win32/shell32/shelldesktop/CDirectoryList.cpp index 096543e73e2..2bdd36f0eb0 100644 --- a/dll/win32/shell32/shelldesktop/CDirectoryList.cpp +++ b/dll/win32/shell32/shelldesktop/CDirectoryList.cpp @@ -2,307 +2,131 @@ * PROJECT: shell32 * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) * PURPOSE: Shell change notification - * COPYRIGHT: Copyright 2020-2024 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com) + * COPYRIGHT: Copyright 2020 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com) */ #include "shelldesktop.h" #include "CDirectoryList.h" -#include +#include // for assert WINE_DEFAULT_DEBUG_CHANNEL(shcn); -/////////////////////////////////////////////////////////////////////////////////////// -// File-system path iterator - -class CFSPathIterator +BOOL CDirectoryList::ContainsPath(LPCWSTR pszPath) const { -public: - CStringW m_strFullName; - INT m_ich; + assert(!PathIsRelativeW(pszPath)); - CFSPathIterator(CStringW strFullName) : m_strFullName(strFullName), m_ich(0) + for (INT i = 0; i < m_items.GetSize(); ++i) { - } - - bool Next(CStringW& strNext); -}; - -/////////////////////////////////////////////////////////////////////////////////////// - -bool CFSPathIterator::Next(CStringW& strNext) -{ - if (m_ich >= m_strFullName.GetLength()) - return false; + if (m_items[i].IsEmpty()) + continue; - auto ich = m_strFullName.Find(L'\\', m_ich); - if (ich < 0) - { - ich = m_strFullName.GetLength(); - strNext = m_strFullName.Mid(m_ich, ich - m_ich); - m_ich = ich; - } - else - { - strNext = m_strFullName.Mid(m_ich, ich - m_ich); - m_ich = ich + 1; + if (m_items[i].EqualPath(pszPath)) + return TRUE; // matched } - return true; -} - -/////////////////////////////////////////////////////////////////////////////////////// -// File-system node - -class CFSNode -{ -public: - CStringW m_strName; - - CFSNode(const CStringW& strName, CFSNode* pParent = NULL); - ~CFSNode(); - - CStringW GetFullName(); - CFSNode* BuildPath(const CStringW& strFullName, BOOL bMarkNotExpanded = TRUE); - - CFSNode* FindChild(const CStringW& strName); - CFSNode* Find(const CStringW& strFullName); - - BOOL RemoveChild(CFSNode *pNode); - BOOL Remove(); - - void MarkNotExpanded(); - - void Expand(); - void clear(); - -protected: - BOOL m_bExpand; - CFSNode* m_pParent; - CSimpleArray m_children; -}; - -/////////////////////////////////////////////////////////////////////////////////////// - -CFSNode::CFSNode(const CStringW& strName, CFSNode* pParent) - : m_strName(strName) - , m_bExpand(FALSE) - , m_pParent(pParent) -{ -} - -CFSNode::~CFSNode() -{ - clear(); -} - -CStringW CFSNode::GetFullName() -{ - CStringW ret; - if (m_pParent) - ret = m_pParent->GetFullName(); - if (ret.GetLength()) - ret += L'\\'; - ret += m_strName; - return ret; + return FALSE; } -CFSNode* CFSNode::FindChild(const CStringW& strName) +BOOL CDirectoryList::AddPath(LPCWSTR pszPath) { - for (INT iItem = 0; iItem < m_children.GetSize(); ++iItem) + assert(!PathIsRelativeW(pszPath)); + if (ContainsPath(pszPath)) + return FALSE; + for (INT i = 0; i < m_items.GetSize(); ++i) { - auto pChild = m_children[iItem]; - if (pChild && - pChild->m_strName.GetLength() == strName.GetLength() && - lstrcmpiW(pChild->m_strName, strName) == 0) + if (m_items[i].IsEmpty()) { - return pChild; + m_items[i].SetPath(pszPath); + return TRUE; } } - return NULL; + return m_items.Add(pszPath); } -BOOL CFSNode::RemoveChild(CFSNode *pNode) +BOOL CDirectoryList::RenamePath(LPCWSTR pszPath1, LPCWSTR pszPath2) { - for (INT iItem = 0; iItem < m_children.GetSize(); ++iItem) + assert(!PathIsRelativeW(pszPath1)); + assert(!PathIsRelativeW(pszPath2)); + + for (INT i = 0; i < m_items.GetSize(); ++i) { - auto& pChild = m_children[iItem]; - if (pChild == pNode) + if (m_items[i].EqualPath(pszPath1)) { - auto pOld = pChild; - pChild = NULL; - delete pOld; + // matched + m_items[i].SetPath(pszPath2); return TRUE; } } return FALSE; } -BOOL CFSNode::Remove() +BOOL CDirectoryList::DeletePath(LPCWSTR pszPath) { - if (m_pParent) - return m_pParent->RemoveChild(this); - return FALSE; -} + assert(!PathIsRelativeW(pszPath)); -CFSNode* CFSNode::Find(const CStringW& strFullName) -{ - CFSPathIterator it(strFullName); - CStringW strName; - CFSNode *pChild, *pNode; - for (pNode = this; it.Next(strName); pNode = pChild) + for (INT i = 0; i < m_items.GetSize(); ++i) { - pChild = pNode->FindChild(strName); - if (!pChild) - return NULL; + if (m_items[i].EqualPath(pszPath)) + { + // matched + m_items[i].SetPath(NULL); + return TRUE; + } } - return pNode; -} - -void CFSNode::MarkNotExpanded() -{ - for (auto pNode = this; pNode; pNode = pNode->m_pParent) - pNode->m_bExpand = FALSE; + return FALSE; } -CFSNode* CFSNode::BuildPath(const CStringW& strFullName, BOOL bMarkNotExpanded) +BOOL CDirectoryList::AddPathsFromDirectory(LPCWSTR pszDirectoryPath) { - CFSPathIterator it(strFullName); - CStringW strName; - CFSNode *pNode, *pChild = NULL; - for (pNode = this; it.Next(strName); pNode = pChild) - { - pChild = pNode->FindChild(strName); - if (pChild) - continue; + // get the full path + WCHAR szPath[MAX_PATH]; + lstrcpynW(szPath, pszDirectoryPath, _countof(szPath)); + assert(!PathIsRelativeW(szPath)); - pChild = new CFSNode(strName, pNode); - pNode->m_children.Add(pChild); - if (bMarkNotExpanded) - pNode->MarkNotExpanded(); - } - return pNode; -} - -void CFSNode::Expand() -{ - if (m_bExpand) - return; + // is it a directory? + if (!PathIsDirectoryW(szPath)) + return FALSE; - auto strSpec = GetFullName(); - strSpec += L"\\*"; + // add the path + if (!AddPath(szPath)) + return FALSE; + // enumerate the file items to remember + PathAppendW(szPath, L"*"); WIN32_FIND_DATAW find; - HANDLE hFind = ::FindFirstFileW(strSpec, &find); + HANDLE hFind = FindFirstFileW(szPath, &find); if (hFind == INVALID_HANDLE_VALUE) - return; + { + ERR("FindFirstFileW failed\n"); + return FALSE; + } + LPWSTR pch; do { - if (lstrcmpW(find.cFileName, L".") == 0 || - lstrcmpW(find.cFileName, L"..") == 0 || - !(find.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) || - (find.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)) + // ignore "." and ".." + pch = find.cFileName; + if (pch[0] == L'.' && (pch[1] == 0 || (pch[1] == L'.' && pch[2] == 0))) + continue; + + // build a path + PathRemoveFileSpecW(szPath); + if (lstrlenW(szPath) + lstrlenW(find.cFileName) + 1 > MAX_PATH) { + ERR("szPath is too long\n"); continue; } + PathAppendW(szPath, find.cFileName); - auto pNode = FindChild(find.cFileName); - if (!pNode) + // add the path and do recurse + if (find.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { - pNode = new CFSNode(find.cFileName, this); - m_children.Add(pNode); + if (m_fRecursive) + AddPathsFromDirectory(szPath); + else + AddPath(szPath); } - pNode->Expand(); - } while (::FindNextFileW(hFind, &find)); - ::FindClose(hFind); - - m_bExpand = TRUE; -} - -void CFSNode::clear() -{ - for (INT iItem = 0; iItem < m_children.GetSize(); ++iItem) - { - auto& pChild = m_children[iItem]; - delete pChild; - pChild = NULL; - } - m_children.RemoveAll(); -} - -/////////////////////////////////////////////////////////////////////////////////////// -// CDirectoryList - -CDirectoryList::CDirectoryList(CFSNode *pRoot) - : m_pRoot(pRoot ? pRoot : (new CFSNode(L""))) - , m_fRecursive(FALSE) -{ -} - -CDirectoryList::CDirectoryList(CFSNode *pRoot, LPCWSTR pszDirectoryPath, BOOL fRecursive) - : m_pRoot(pRoot ? pRoot : (new CFSNode(L""))) - , m_fRecursive(fRecursive) -{ - AddPathsFromDirectory(pszDirectoryPath); -} - -CDirectoryList::~CDirectoryList() -{ - delete m_pRoot; -} - -BOOL CDirectoryList::ContainsPath(LPCWSTR pszPath) const -{ - ATLASSERT(!PathIsRelativeW(pszPath)); - - return !!m_pRoot->Find(pszPath); -} - -BOOL CDirectoryList::AddPath(LPCWSTR pszPath) -{ - ATLASSERT(!PathIsRelativeW(pszPath)); - - auto pNode = m_pRoot->BuildPath(pszPath); - if (pNode && m_fRecursive) - pNode->Expand(); - - return TRUE; -} - -BOOL CDirectoryList::RenamePath(LPCWSTR pszPath1, LPCWSTR pszPath2) -{ - ATLASSERT(!PathIsRelativeW(pszPath1)); - ATLASSERT(!PathIsRelativeW(pszPath2)); - - auto pNode = m_pRoot->Find(pszPath1); - if (!pNode) - return FALSE; - - LPWSTR pch = wcsrchr(pszPath2, L'\\'); - if (!pch) - return FALSE; - - pNode->m_strName = pch + 1; - return TRUE; -} - -BOOL CDirectoryList::DeletePath(LPCWSTR pszPath) -{ - ATLASSERT(!PathIsRelativeW(pszPath)); - - auto pNode = m_pRoot->Find(pszPath); - if (!pNode) - return FALSE; - - pNode->Remove(); - return TRUE; -} - -BOOL CDirectoryList::AddPathsFromDirectory(LPCWSTR pszDirectoryPath) -{ - ATLASSERT(!PathIsRelativeW(pszPath)); + } while (FindNextFileW(hFind, &find)); - auto pNode = m_pRoot->BuildPath(pszDirectoryPath); - if (pNode) - pNode->Expand(); + FindClose(hFind); return TRUE; } diff --git a/dll/win32/shell32/shelldesktop/CDirectoryList.h b/dll/win32/shell32/shelldesktop/CDirectoryList.h index 3d6abda19eb..1e9559c4b24 100644 --- a/dll/win32/shell32/shelldesktop/CDirectoryList.h +++ b/dll/win32/shell32/shelldesktop/CDirectoryList.h @@ -1,34 +1,93 @@ -/* - * PROJECT: shell32 - * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) - * PURPOSE: Shell change notification - * COPYRIGHT: Copyright 2024 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com) - */ - #pragma once #include // for CSimpleArray ////////////////////////////////////////////////////////////////////////////// -class CFSNode; +// A pathname with info +class CDirectoryItem +{ +public: + CDirectoryItem() : m_pszPath(NULL) + { + } + + CDirectoryItem(LPCWSTR pszPath) + { + m_pszPath = _wcsdup(pszPath); + } + + CDirectoryItem(const CDirectoryItem& item) + : m_pszPath(_wcsdup(item.m_pszPath)) + { + } + + CDirectoryItem& operator=(const CDirectoryItem& item) + { + if (this != &item) + { + free(m_pszPath); + m_pszPath = _wcsdup(item.m_pszPath); + } + return *this; + } + + ~CDirectoryItem() + { + free(m_pszPath); + } + + BOOL IsEmpty() const + { + return m_pszPath == NULL; + } + + LPCWSTR GetPath() const + { + return m_pszPath; + } + + void SetPath(LPCWSTR pszPath) + { + free(m_pszPath); + m_pszPath = _wcsdup(pszPath); + } + + BOOL EqualPath(LPCWSTR pszPath) const + { + return m_pszPath != NULL && lstrcmpiW(m_pszPath, pszPath) == 0; + } + +protected: + LPWSTR m_pszPath; // A full path, malloc'ed +}; // the directory list class CDirectoryList { public: - CDirectoryList(CFSNode *pRoot); - CDirectoryList(CFSNode *pRoot, LPCWSTR pszDirectoryPath, BOOL fRecursive); - ~CDirectoryList(); + CDirectoryList() : m_fRecursive(FALSE) + { + } + + CDirectoryList(LPCWSTR pszDirectoryPath, BOOL fRecursive) + : m_fRecursive(fRecursive) + { + AddPathsFromDirectory(pszDirectoryPath); + } BOOL ContainsPath(LPCWSTR pszPath) const; BOOL AddPath(LPCWSTR pszPath); BOOL AddPathsFromDirectory(LPCWSTR pszDirectoryPath); BOOL RenamePath(LPCWSTR pszPath1, LPCWSTR pszPath2); BOOL DeletePath(LPCWSTR pszPath); - void RemoveAll(); + + void RemoveAll() + { + m_items.RemoveAll(); + } protected: - CFSNode *m_pRoot; BOOL m_fRecursive; + CSimpleArray m_items; }; diff --git a/dll/win32/shell32/shelldesktop/CDirectoryWatcher.cpp b/dll/win32/shell32/shelldesktop/CDirectoryWatcher.cpp index ce3fac7f8b6..d5056a64faa 100644 --- a/dll/win32/shell32/shelldesktop/CDirectoryWatcher.cpp +++ b/dll/win32/shell32/shelldesktop/CDirectoryWatcher.cpp @@ -71,7 +71,7 @@ static void NTAPI _RequestAllTerminationAPC(ULONG_PTR Parameter) CDirectoryWatcher::CDirectoryWatcher(LPCWSTR pszDirectoryPath, BOOL fSubTree) : m_fDead(FALSE) , m_fRecursive(fSubTree) - , m_dir_list(NULL, pszDirectoryPath, fSubTree) + , m_dir_list(pszDirectoryPath, fSubTree) { TRACE("CDirectoryWatcher::CDirectoryWatcher: %p, '%S'\n", this, pszDirectoryPath); From 43beb913dad6d640ed9485aa038f24419eb13fdc Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 11 Apr 2024 19:49:42 +0300 Subject: [PATCH 009/182] [CRT] Move rand to stdlib, where it belongs --- sdk/lib/crt/math/math.cmake | 5 ----- sdk/lib/crt/{math => stdlib}/rand.c | 0 sdk/lib/crt/{math => stdlib}/rand_nt.c | 0 sdk/lib/crt/stdlib/stdlib.cmake | 10 ++++++++-- 4 files changed, 8 insertions(+), 7 deletions(-) rename sdk/lib/crt/{math => stdlib}/rand.c (100%) rename sdk/lib/crt/{math => stdlib}/rand_nt.c (100%) diff --git a/sdk/lib/crt/math/math.cmake b/sdk/lib/crt/math/math.cmake index a888242644e..5821259646a 100644 --- a/sdk/lib/crt/math/math.cmake +++ b/sdk/lib/crt/math/math.cmake @@ -240,17 +240,12 @@ list(APPEND CRT_MATH_SOURCE math/ldiv.c math/logf.c math/powf.c - math/rand.c ) list(APPEND CRT_MATH_ASM_SOURCE ${LIBCNTPR_MATH_ASM_SOURCE} ) -list(APPEND LIBCNTPR_MATH_SOURCE - math/rand_nt.c -) - if(ARCH STREQUAL "i386") list(APPEND ATAN2_ASM_SOURCE math/i386/atan2_asm.s) elseif(ARCH STREQUAL "amd64") diff --git a/sdk/lib/crt/math/rand.c b/sdk/lib/crt/stdlib/rand.c similarity index 100% rename from sdk/lib/crt/math/rand.c rename to sdk/lib/crt/stdlib/rand.c diff --git a/sdk/lib/crt/math/rand_nt.c b/sdk/lib/crt/stdlib/rand_nt.c similarity index 100% rename from sdk/lib/crt/math/rand_nt.c rename to sdk/lib/crt/stdlib/rand_nt.c diff --git a/sdk/lib/crt/stdlib/stdlib.cmake b/sdk/lib/crt/stdlib/stdlib.cmake index 3ab02840e34..ba493f3f919 100644 --- a/sdk/lib/crt/stdlib/stdlib.cmake +++ b/sdk/lib/crt/stdlib/stdlib.cmake @@ -1,10 +1,15 @@ -list(APPEND LIBCNTPR_STDLIB_SOURCE +list(APPEND COMMON_STDLIB_SOURCE stdlib/qsort.c ) +list(APPEND LIBCNTPR_STDLIB_SOURCE + ${COMMON_STDLIB_SOURCE} + stdlib/rand_nt.c +) + list(APPEND CRT_STDLIB_SOURCE - ${LIBCNTPR_STDLIB_SOURCE} + ${COMMON_STDLIB_SOURCE} stdlib/_exit.c stdlib/_set_abort_behavior.c stdlib/abort.c @@ -22,6 +27,7 @@ list(APPEND CRT_STDLIB_SOURCE stdlib/mbstowcs.c stdlib/obsol.c stdlib/putenv.c + stdlib/rand.c stdlib/rot.c stdlib/senv.c stdlib/swab.c From 0ea48e79fc9c7e8779f1ca1434cde7191e41930e Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 14 Apr 2024 20:00:40 +0300 Subject: [PATCH 010/182] [CRT] Move _invalid_parameter into its own file As the author of the code, I changed to license to MIT. --- sdk/lib/crt/stdlib/_invalid_parameter.c | 52 +++++++++++++++++++++++++ sdk/lib/crt/stdlib/errno.c | 37 ------------------ sdk/lib/crt/stdlib/stdlib.cmake | 1 + 3 files changed, 53 insertions(+), 37 deletions(-) create mode 100644 sdk/lib/crt/stdlib/_invalid_parameter.c diff --git a/sdk/lib/crt/stdlib/_invalid_parameter.c b/sdk/lib/crt/stdlib/_invalid_parameter.c new file mode 100644 index 00000000000..dd9b45cd706 --- /dev/null +++ b/sdk/lib/crt/stdlib/_invalid_parameter.c @@ -0,0 +1,52 @@ +/* + * PROJECT: ReactOS CRT library + * LICENSE: MIT (https://spdx.org/licenses/MIT) + * PURPOSE: _invalid_parameter implementation + * COPYRIGHT: Timo Kreuzer + */ + +#include + +#ifdef _MSVCRTEX_ +#undef TRACE +#undef ERR +#define TRACE(...) +#define ERR(...) +#endif + +static _invalid_parameter_handler invalid_parameter_handler = NULL; + +/****************************************************************************** + * _invalid_parameter (MSVCRT.@) + */ +void __cdecl _invalid_parameter(const wchar_t *expr, const wchar_t *func, + const wchar_t *file, unsigned int line, uintptr_t arg) +{ + if (invalid_parameter_handler) invalid_parameter_handler( expr, func, file, line, arg ); + else + { + ERR( "%s:%u %s: %s %lx\n", debugstr_w(file), line, debugstr_w(func), debugstr_w(expr), arg ); +#if _MSVCR_VER > 0 // FIXME: possible improvement: use a global variable in the DLL + RaiseException( STATUS_INVALID_CRUNTIME_PARAMETER, EXCEPTION_NONCONTINUABLE, 0, NULL ); +#endif + } +} + +/* _get_invalid_parameter_handler - not exported in native msvcrt, added in msvcr80 */ +_invalid_parameter_handler CDECL _get_invalid_parameter_handler(void) +{ + TRACE("\n"); + return invalid_parameter_handler; +} + +/* _set_invalid_parameter_handler - not exproted in native msvcrt, added in msvcr80 */ +_invalid_parameter_handler CDECL _set_invalid_parameter_handler( + _invalid_parameter_handler handler) +{ + _invalid_parameter_handler old = invalid_parameter_handler; + + TRACE("(%p)\n", handler); + + invalid_parameter_handler = handler; + return old; +} diff --git a/sdk/lib/crt/stdlib/errno.c b/sdk/lib/crt/stdlib/errno.c index a59032bb3f9..55bcb60d8f0 100644 --- a/sdk/lib/crt/stdlib/errno.c +++ b/sdk/lib/crt/stdlib/errno.c @@ -11,8 +11,6 @@ #include #include -static _invalid_parameter_handler invalid_parameter_handler = NULL; - /********************************************************************* * _errno (MSVCRT.@) */ @@ -130,38 +128,3 @@ void CDECL _seterrormode(int mode) { SetErrorMode( mode ); } - -/****************************************************************************** - * _invalid_parameter (MSVCRT.@) - */ -void __cdecl _invalid_parameter(const wchar_t *expr, const wchar_t *func, - const wchar_t *file, unsigned int line, uintptr_t arg) -{ - if (invalid_parameter_handler) invalid_parameter_handler( expr, func, file, line, arg ); - else - { - ERR( "%s:%u %s: %s %lx\n", debugstr_w(file), line, debugstr_w(func), debugstr_w(expr), arg ); -#if _MSVCR_VER > 0 // FIXME: possible improvement: use a global variable in the DLL - RaiseException( STATUS_INVALID_CRUNTIME_PARAMETER, EXCEPTION_NONCONTINUABLE, 0, NULL ); -#endif - } -} - -/* _get_invalid_parameter_handler - not exported in native msvcrt, added in msvcr80 */ -_invalid_parameter_handler CDECL _get_invalid_parameter_handler(void) -{ - TRACE("\n"); - return invalid_parameter_handler; -} - -/* _set_invalid_parameter_handler - not exproted in native msvcrt, added in msvcr80 */ -_invalid_parameter_handler CDECL _set_invalid_parameter_handler( - _invalid_parameter_handler handler) -{ - _invalid_parameter_handler old = invalid_parameter_handler; - - TRACE("(%p)\n", handler); - - invalid_parameter_handler = handler; - return old; -} diff --git a/sdk/lib/crt/stdlib/stdlib.cmake b/sdk/lib/crt/stdlib/stdlib.cmake index ba493f3f919..e4680908d14 100644 --- a/sdk/lib/crt/stdlib/stdlib.cmake +++ b/sdk/lib/crt/stdlib/stdlib.cmake @@ -11,6 +11,7 @@ list(APPEND LIBCNTPR_STDLIB_SOURCE list(APPEND CRT_STDLIB_SOURCE ${COMMON_STDLIB_SOURCE} stdlib/_exit.c + stdlib/_invalid_parameter.c stdlib/_set_abort_behavior.c stdlib/abort.c stdlib/atexit.c From f319538d981933260a92a4c425669364721ec9dc Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 15 Apr 2024 20:44:14 +0300 Subject: [PATCH 011/182] [CRT] Move rand_s into it's own file --- sdk/lib/crt/msvcrtex.cmake | 7 ++++ sdk/lib/crt/stdlib/rand.c | 45 ----------------------- sdk/lib/crt/stdlib/rand_s.c | 64 +++++++++++++++++++++++++++++++++ sdk/lib/crt/stdlib/stdlib.cmake | 1 + 4 files changed, 72 insertions(+), 45 deletions(-) create mode 100644 sdk/lib/crt/stdlib/rand_s.c diff --git a/sdk/lib/crt/msvcrtex.cmake b/sdk/lib/crt/msvcrtex.cmake index 4ecfd4db6f8..2d50c179a80 100644 --- a/sdk/lib/crt/msvcrtex.cmake +++ b/sdk/lib/crt/msvcrtex.cmake @@ -11,6 +11,13 @@ list(APPEND MSVCRTEX_SOURCE misc/ofmt_stub.c stdio/acrt_iob_func.c) +if(DLL_EXPORT_VERSION LESS 0x600) + list(APPEND MSVCRTEX_SOURCE + stdlib/_invalid_parameter.c + stdlib/rand_s.c + ) +endif() + if(CMAKE_C_COMPILER_ID STREQUAL "Clang") # Clang performs some optimizations requiring those funtions list(APPEND MSVCRTEX_SOURCE diff --git a/sdk/lib/crt/stdlib/rand.c b/sdk/lib/crt/stdlib/rand.c index b83be76960a..29fbc3ac3b3 100644 --- a/sdk/lib/crt/stdlib/rand.c +++ b/sdk/lib/crt/stdlib/rand.c @@ -26,48 +26,3 @@ srand(unsigned int seed) thread_data_t *data = msvcrt_get_thread_data(); data->random_seed = seed; } - - /********************************************************************* - * rand_s (MSVCRT.@) - */ -int CDECL rand_s(unsigned int *pval) -{ - BOOLEAN (WINAPI *pSystemFunction036)(PVOID, ULONG); // RtlGenRandom - HINSTANCE hadvapi32; - - if (!pval) - { - _invalid_parameter(NULL,_CRT_WIDE("rand_s"),_CRT_WIDE(__FILE__),__LINE__, 0); - *_errno() = EINVAL; - return EINVAL; - } - - *pval = 0; - hadvapi32 = LoadLibraryA("advapi32.dll"); - if (!hadvapi32) - { - _invalid_parameter(NULL,_CRT_WIDE("rand_s"),_CRT_WIDE(__FILE__),__LINE__, 0); - *_errno() = EINVAL; - return EINVAL; - } - - pSystemFunction036 = (void*)GetProcAddress(hadvapi32, "SystemFunction036"); - if (!pSystemFunction036) - { - _invalid_parameter(NULL,_CRT_WIDE("rand_s"),_CRT_WIDE(__FILE__),__LINE__, 0); - *_errno() = EINVAL; - FreeLibrary(hadvapi32); - return EINVAL; - } - - if (!pSystemFunction036(pval, sizeof(*pval))) - { - _invalid_parameter(NULL,_CRT_WIDE("rand_s"),_CRT_WIDE(__FILE__),__LINE__, 0); - *_errno() = EINVAL; - FreeLibrary(hadvapi32); - return EINVAL; - } - - FreeLibrary(hadvapi32); - return 0; -} diff --git a/sdk/lib/crt/stdlib/rand_s.c b/sdk/lib/crt/stdlib/rand_s.c new file mode 100644 index 00000000000..26e2e4a5fcc --- /dev/null +++ b/sdk/lib/crt/stdlib/rand_s.c @@ -0,0 +1,64 @@ +/* + * PROJECT: ReactOS CRT library + * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) + * PURPOSE: rand_s implementation + * COPYRIGHT: Copyright 2010 Sylvain Petreolle + * Copyright 2015 Christoph von Wittich + * Copyright 2015 Pierre Schweitzer + */ + +#include + +/********************************************************************* + * rand_s (MSVCRT.@) + */ +int CDECL rand_s(unsigned int *pval) +{ + BOOLEAN (WINAPI *pSystemFunction036)(PVOID, ULONG); // RtlGenRandom + HINSTANCE hadvapi32; + + if (!pval) + { + _invalid_parameter(NULL,_CRT_WIDE("rand_s"),_CRT_WIDE(__FILE__),__LINE__, 0); + *_errno() = EINVAL; + return EINVAL; + } + + *pval = 0; + hadvapi32 = LoadLibraryA("advapi32.dll"); + if (!hadvapi32) + { + _invalid_parameter(NULL,_CRT_WIDE("rand_s"),_CRT_WIDE(__FILE__),__LINE__, 0); + *_errno() = EINVAL; + return EINVAL; + } + + pSystemFunction036 = (void*)GetProcAddress(hadvapi32, "SystemFunction036"); + if (!pSystemFunction036) + { + _invalid_parameter(NULL,_CRT_WIDE("rand_s"),_CRT_WIDE(__FILE__),__LINE__, 0); + *_errno() = EINVAL; + FreeLibrary(hadvapi32); + return EINVAL; + } + + if (!pSystemFunction036(pval, sizeof(*pval))) + { + _invalid_parameter(NULL,_CRT_WIDE("rand_s"),_CRT_WIDE(__FILE__),__LINE__, 0); + *_errno() = EINVAL; + FreeLibrary(hadvapi32); + return EINVAL; + } + + FreeLibrary(hadvapi32); + return 0; +} + +// Small hack: import stub to allow GCC's stdc++ to link +#if defined(__GNUC__) && (DLL_EXPORT_VERSION < 0x600) +#ifdef WIN64 +const void* __imp_rand_s = rand_s; +#else +const void* _imp_rand_s = rand_s; +#endif +#endif diff --git a/sdk/lib/crt/stdlib/stdlib.cmake b/sdk/lib/crt/stdlib/stdlib.cmake index e4680908d14..4719ec21a39 100644 --- a/sdk/lib/crt/stdlib/stdlib.cmake +++ b/sdk/lib/crt/stdlib/stdlib.cmake @@ -29,6 +29,7 @@ list(APPEND CRT_STDLIB_SOURCE stdlib/obsol.c stdlib/putenv.c stdlib/rand.c + stdlib/rand_s.c stdlib/rot.c stdlib/senv.c stdlib/swab.c From 3c55252828ea74b4df565d80d8c6a95fa1bd081d Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 19 Apr 2024 20:27:51 +0300 Subject: [PATCH 012/182] [CRT_APITEST] Add test for rand_s --- .../apitests/crt/msvcrt_crt_apitest.cmake | 2 +- modules/rostests/apitests/crt/rand_s.c | 61 +++++++++++++++++++ .../apitests/crt/static_crt_apitest.cmake | 1 + modules/rostests/apitests/crt/testlist.c | 2 + 4 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 modules/rostests/apitests/crt/rand_s.c diff --git a/modules/rostests/apitests/crt/msvcrt_crt_apitest.cmake b/modules/rostests/apitests/crt/msvcrt_crt_apitest.cmake index 0d1984b5d17..ad599eed3a3 100644 --- a/modules/rostests/apitests/crt/msvcrt_crt_apitest.cmake +++ b/modules/rostests/apitests/crt/msvcrt_crt_apitest.cmake @@ -1137,7 +1137,7 @@ list(APPEND SOURCE_MSVCRT # qsort_s # raise.c # rand.c -# rand_s.c + rand_s.c # realloc.c # remove.c # rename.c diff --git a/modules/rostests/apitests/crt/rand_s.c b/modules/rostests/apitests/crt/rand_s.c new file mode 100644 index 00000000000..5825f0031df --- /dev/null +++ b/modules/rostests/apitests/crt/rand_s.c @@ -0,0 +1,61 @@ +/* + * PROJECT: ReactOS API Tests + * LICENSE: MIT (https://spdx.org/licenses/MIT) + * PURPOSE: Tests for rand_s + * COPYRIGHT: Copyright 2024 Timo Kreuzer + */ + +#include +#include + +#ifdef TEST_STATIC_CRT +errno_t __cdecl rand_s(_Out_ unsigned int* _RandomValue); +#endif + +typedef int __cdecl rand_s_t(unsigned int*); +rand_s_t *p_rand_s; + +void test_rand_s_performance(void) +{ + unsigned long long start, end; + unsigned int val; + int i; + + start = __rdtsc(); + for (i = 0; i < 10000; i++) + { + p_rand_s(&val); + } + end = __rdtsc(); + printf("rand_s took %llu cycles\n", end - start); +} + +START_TEST(rand_s) +{ + unsigned int val; + int ret; + +#ifndef TEST_STATIC_CRT + /* Dynamically load rand_s from mvcrt */ + HMODULE msvcrt = GetModuleHandleA("msvcrt"); + p_rand_s = (rand_s_t*)GetProcAddress(msvcrt, "rand_s"); + if (!p_rand_s) + { + win_skip("rand_s is not available\n"); + return; + } +#else + p_rand_s = rand_s; +#endif + + /* Test performance */ + test_rand_s_performance(); + + /* Test with NULL pointer */ + ret = p_rand_s(NULL); + ok(ret == EINVAL, "Expected EINVAL, got %d\n", ret); + + /* Test with valid pointer */ + ret = p_rand_s(&val); + ok(ret == 0, "Expected 0, got %d\n", ret); +} diff --git a/modules/rostests/apitests/crt/static_crt_apitest.cmake b/modules/rostests/apitests/crt/static_crt_apitest.cmake index eb84fd5b145..78f4487ec2f 100644 --- a/modules/rostests/apitests/crt/static_crt_apitest.cmake +++ b/modules/rostests/apitests/crt/static_crt_apitest.cmake @@ -13,6 +13,7 @@ list(APPEND SOURCE_STATIC fpcontrol.c mbstowcs.c mbtowc.c + rand_s.c sprintf.c strcpy.c strlen.c diff --git a/modules/rostests/apitests/crt/testlist.c b/modules/rostests/apitests/crt/testlist.c index e1592928611..331c368f114 100644 --- a/modules/rostests/apitests/crt/testlist.c +++ b/modules/rostests/apitests/crt/testlist.c @@ -32,6 +32,7 @@ extern void func__vsnprintf(void); extern void func__vsnwprintf(void); extern void func_mbstowcs(void); extern void func_mbtowc(void); +extern void func_rand_s(void); extern void func_sprintf(void); extern void func_strcpy(void); extern void func_strlen(void); @@ -79,6 +80,7 @@ const struct test winetest_testlist[] = { "ceil", func_ceil }, { "fabs", func_fabs }, { "floor", func_floor }, + { "rand_s", func_rand_s }, #ifdef _M_AMD64 // x86 / arm need fixing { "fpcontrol", func_fpcontrol }, #endif From 1f49173f8264708c8091b679571e3ae18d2f2275 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 19 Apr 2024 20:53:51 +0300 Subject: [PATCH 013/182] [CRT] Massively improve performance of rand_s Cache the pointer to RtlGenRandom instead of loading and unloading advapi32 every single time this function is called. --- sdk/lib/crt/stdlib/rand_s.c | 42 ++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/sdk/lib/crt/stdlib/rand_s.c b/sdk/lib/crt/stdlib/rand_s.c index 26e2e4a5fcc..7450f7127d0 100644 --- a/sdk/lib/crt/stdlib/rand_s.c +++ b/sdk/lib/crt/stdlib/rand_s.c @@ -9,12 +9,14 @@ #include +typedef BOOLEAN (WINAPI *PFN_SystemFunction036)(PVOID, ULONG); // RtlGenRandom +PFN_SystemFunction036 g_pfnSystemFunction036 = NULL; + /********************************************************************* * rand_s (MSVCRT.@) */ int CDECL rand_s(unsigned int *pval) { - BOOLEAN (WINAPI *pSystemFunction036)(PVOID, ULONG); // RtlGenRandom HINSTANCE hadvapi32; if (!pval) @@ -25,32 +27,38 @@ int CDECL rand_s(unsigned int *pval) } *pval = 0; - hadvapi32 = LoadLibraryA("advapi32.dll"); - if (!hadvapi32) - { - _invalid_parameter(NULL,_CRT_WIDE("rand_s"),_CRT_WIDE(__FILE__),__LINE__, 0); - *_errno() = EINVAL; - return EINVAL; - } - pSystemFunction036 = (void*)GetProcAddress(hadvapi32, "SystemFunction036"); - if (!pSystemFunction036) + if (g_pfnSystemFunction036 == NULL) { - _invalid_parameter(NULL,_CRT_WIDE("rand_s"),_CRT_WIDE(__FILE__),__LINE__, 0); - *_errno() = EINVAL; - FreeLibrary(hadvapi32); - return EINVAL; + PFN_SystemFunction036 pSystemFunction036; + + hadvapi32 = LoadLibraryA("advapi32.dll"); + if (!hadvapi32) + { + _invalid_parameter(NULL,_CRT_WIDE("rand_s"),_CRT_WIDE(__FILE__),__LINE__, 0); + *_errno() = EINVAL; + return EINVAL; + } + + pSystemFunction036 = (void*)GetProcAddress(hadvapi32, "SystemFunction036"); + if (!pSystemFunction036) + { + _invalid_parameter(NULL,_CRT_WIDE("rand_s"),_CRT_WIDE(__FILE__),__LINE__, 0); + *_errno() = EINVAL; + FreeLibrary(hadvapi32); + return EINVAL; + } + + g_pfnSystemFunction036 = pSystemFunction036; } - if (!pSystemFunction036(pval, sizeof(*pval))) + if (!g_pfnSystemFunction036(pval, sizeof(*pval))) { _invalid_parameter(NULL,_CRT_WIDE("rand_s"),_CRT_WIDE(__FILE__),__LINE__, 0); *_errno() = EINVAL; - FreeLibrary(hadvapi32); return EINVAL; } - FreeLibrary(hadvapi32); return 0; } From 3693d55404d6ffa64dc515829ed3bb13a8336b0d Mon Sep 17 00:00:00 2001 From: Doug Lyons Date: Thu, 25 Apr 2024 17:20:28 -0500 Subject: [PATCH 014/182] [SHELL32] Fix Desktop folder details view (#5743) * [SHELL32] Fix Desktop Folder Details View JIRA issue: [CORE-19177|https://jira.reactos.org/browse/CORE-19177] * Remove Comments column from Desktop Folder Details View and simplify code. * Revise date/time sort based on reviewer comments. * Swap size and type column positions for desktop folder details view. With help from Whindmar, most (hopefully all) of the magic number for the columns have been removed in all of the shell folders. Co-authored-by: Whindmar Saksit Co-authored-by: Carl J. Bialorucki --- .../shell32/folders/CControlPanelFolder.cpp | 2 +- dll/win32/shell32/folders/CDesktopFolder.cpp | 47 ++++++---- dll/win32/shell32/folders/CDesktopFolder.h | 2 + dll/win32/shell32/folders/CDrivesFolder.cpp | 4 +- dll/win32/shell32/folders/CFSFolder.cpp | 93 ++++++++++++------- dll/win32/shell32/folders/CFSFolder.h | 5 + dll/win32/shell32/folders/CNetFolder.cpp | 4 +- dll/win32/shell32/folders/CPrinterFolder.cpp | 4 +- dll/win32/shell32/folders/CRegFolder.cpp | 34 ++++--- dll/win32/shell32/shfldr.h | 22 ++++- 10 files changed, 140 insertions(+), 77 deletions(-) diff --git a/dll/win32/shell32/folders/CControlPanelFolder.cpp b/dll/win32/shell32/folders/CControlPanelFolder.cpp index 7306862f966..58d5c36353c 100644 --- a/dll/win32/shell32/folders/CControlPanelFolder.cpp +++ b/dll/win32/shell32/folders/CControlPanelFolder.cpp @@ -550,7 +550,7 @@ HRESULT WINAPI CControlPanelFolder::GetDefaultColumnState(UINT iColumn, DWORD *p if (!pcsFlags || iColumn >= CONTROLPANEL_COL_COUNT) return E_INVALIDARG; - *pcsFlags = ControlPanelSFHeader[iColumn].pcsFlags; + *pcsFlags = ControlPanelSFHeader[iColumn].colstate; return S_OK; } diff --git a/dll/win32/shell32/folders/CDesktopFolder.cpp b/dll/win32/shell32/folders/CDesktopFolder.cpp index 54f3206ef5c..ade57b69fce 100644 --- a/dll/win32/shell32/folders/CDesktopFolder.cpp +++ b/dll/win32/shell32/folders/CDesktopFolder.cpp @@ -21,6 +21,7 @@ */ #include +#include "CFSFolder.h" // Only for CFSFolder::*FSColumn* helpers! WINE_DEFAULT_DEBUG_CHANNEL(shell); @@ -284,17 +285,6 @@ class CDesktopFolderEnum : int SHELL_ConfirmMsgBox(HWND hWnd, LPWSTR lpszText, LPWSTR lpszCaption, HICON hIcon, BOOL bYesToAll); -static const shvheader DesktopSFHeader[] = { - {IDS_SHV_COLUMN_NAME, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 15}, - {IDS_SHV_COLUMN_COMMENTS, SHCOLSTATE_TYPE_STR, LVCFMT_LEFT, 10}, - {IDS_SHV_COLUMN_TYPE, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 10}, - {IDS_SHV_COLUMN_SIZE, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, - {IDS_SHV_COLUMN_MODIFIED, SHCOLSTATE_TYPE_DATE | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 12}, - {IDS_SHV_COLUMN_ATTRIBUTES, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 10} -}; - -#define DESKTOPSHELLVIEWCOLUMNS 6 - static const DWORD dwDesktopAttributes = SFGAO_HASSUBFOLDER | SFGAO_FILESYSTEM | SFGAO_FOLDER | SFGAO_FILESYSANCESTOR | SFGAO_STORAGEANCESTOR | SFGAO_HASPROPSHEET | SFGAO_STORAGE; @@ -978,16 +968,25 @@ HRESULT WINAPI CDesktopFolder::GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG return S_OK; } -HRESULT WINAPI CDesktopFolder::GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags) +HRESULT WINAPI CDesktopFolder::GetDefaultColumnState(UINT iColumn, SHCOLSTATEF *pcsFlags) { + HRESULT hr; TRACE ("(%p)\n", this); - if (!pcsFlags || iColumn >= DESKTOPSHELLVIEWCOLUMNS) + if (!pcsFlags) return E_INVALIDARG; - *pcsFlags = DesktopSFHeader[iColumn].pcsFlags; - - return S_OK; + hr = CFSFolder::GetDefaultFSColumnState(iColumn, *pcsFlags); + /* + // CDesktopFolder may override the flags if desired (future) + switch(iColumn) + { + case SHFSF_COL_FATTS: + *pcsFlags &= ~SHCOLSTATE_ONBYDEFAULT; + break; + } + */ + return hr; } HRESULT WINAPI CDesktopFolder::GetDetailsEx( @@ -1000,19 +999,27 @@ HRESULT WINAPI CDesktopFolder::GetDetailsEx( return E_NOTIMPL; } +/************************************************************************* + * Column info functions. + * CFSFolder.h provides defaults for us. + */ +HRESULT CDesktopFolder::GetColumnDetails(UINT iColumn, SHELLDETAILS &sd) +{ + /* CDesktopFolder may override the flags and/or name if desired */ + return CFSFolder::GetFSColumnDetails(iColumn, sd); +} + HRESULT WINAPI CDesktopFolder::GetDetailsOf( PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd) { - if (!psd || iColumn >= DESKTOPSHELLVIEWCOLUMNS) + if (!psd) return E_INVALIDARG; if (!pidl) { - psd->fmt = DesktopSFHeader[iColumn].fmt; - psd->cxChar = DesktopSFHeader[iColumn].cxChar; - return SHSetStrRet(&psd->str, DesktopSFHeader[iColumn].colnameid); + return GetColumnDetails(iColumn, *psd); } CComPtr psf; diff --git a/dll/win32/shell32/folders/CDesktopFolder.h b/dll/win32/shell32/folders/CDesktopFolder.h index 7a9b498d240..66eda8df0ee 100644 --- a/dll/win32/shell32/folders/CDesktopFolder.h +++ b/dll/win32/shell32/folders/CDesktopFolder.h @@ -42,6 +42,8 @@ class CDesktopFolder : HRESULT _GetSFFromPidl(LPCITEMIDLIST pidl, IShellFolder2** psf); + static HRESULT GetColumnDetails(UINT iColumn, SHELLDETAILS &sd); + HRESULT _ParseDisplayNameByParent( HWND hwndOwner, LPBC pbc, diff --git a/dll/win32/shell32/folders/CDrivesFolder.cpp b/dll/win32/shell32/folders/CDrivesFolder.cpp index 04d0c080814..748109331b6 100644 --- a/dll/win32/shell32/folders/CDrivesFolder.cpp +++ b/dll/win32/shell32/folders/CDrivesFolder.cpp @@ -1168,13 +1168,13 @@ HRESULT WINAPI CDrivesFolder::GetDefaultColumn (DWORD dwRes, ULONG *pSort, ULONG return S_OK; } -HRESULT WINAPI CDrivesFolder::GetDefaultColumnState(UINT iColumn, DWORD * pcsFlags) +HRESULT WINAPI CDrivesFolder::GetDefaultColumnState(UINT iColumn, SHCOLSTATEF * pcsFlags) { TRACE("(%p)\n", this); if (!pcsFlags || iColumn >= _countof(MyComputerSFHeader)) return E_INVALIDARG; - *pcsFlags = MyComputerSFHeader[iColumn].pcsFlags; + *pcsFlags = MyComputerSFHeader[iColumn].colstate; return S_OK; } diff --git a/dll/win32/shell32/folders/CFSFolder.cpp b/dll/win32/shell32/folders/CFSFolder.cpp index f6546dc23bf..2ec03d18298 100644 --- a/dll/win32/shell32/folders/CFSFolder.cpp +++ b/dll/win32/shell32/folders/CFSFolder.cpp @@ -527,17 +527,35 @@ CFSFolder::~CFSFolder() SHFree(m_sPathTarget); } - static const shvheader GenericSFHeader[] = { {IDS_SHV_COLUMN_NAME, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 15}, + {IDS_SHV_COLUMN_SIZE, SHCOLSTATE_TYPE_INT | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, {IDS_SHV_COLUMN_TYPE, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 10}, - {IDS_SHV_COLUMN_SIZE, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, - {IDS_SHV_COLUMN_MODIFIED, SHCOLSTATE_TYPE_DATE | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 12}, + {IDS_SHV_COLUMN_MODIFIED, SHCOLSTATE_TYPE_DATE | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 15}, {IDS_SHV_COLUMN_ATTRIBUTES, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 10}, - {IDS_SHV_COLUMN_COMMENTS, SHCOLSTATE_TYPE_STR, LVCFMT_LEFT, 10} + {IDS_SHV_COLUMN_COMMENTS, SHCOLSTATE_TYPE_STR | SHCOLSTATE_SLOW, LVCFMT_LEFT, 10}, // We don't currently support comments but CRegFolder does }; -#define GENERICSHELLVIEWCOLUMNS 6 +#define GENERICSHELLVIEWCOLUMNS _countof(GenericSFHeader) + +HRESULT CFSFolder::GetFSColumnDetails(UINT iColumn, SHELLDETAILS &sd) +{ + if (iColumn >= _countof(GenericSFHeader)) + return E_INVALIDARG; + + sd.fmt = GenericSFHeader[iColumn].fmt; + sd.cxChar = GenericSFHeader[iColumn].cxChar; + return SHSetStrRet(&sd.str, GenericSFHeader[iColumn].colnameid); +} + +HRESULT CFSFolder::GetDefaultFSColumnState(UINT iColumn, SHCOLSTATEF &csFlags) +{ + if (iColumn >= _countof(GenericSFHeader)) + return E_INVALIDARG; + + csFlags = GenericSFHeader[iColumn].colstate; + return S_OK; +} static HRESULT SHELL32_GetCLSIDForDirectory(LPCWSTR pwszDir, LPCWSTR KeyName, CLSID* pclsidFolder) { @@ -1021,18 +1039,13 @@ HRESULT WINAPI CFSFolder::CompareIDs(LPARAM lParam, return MAKE_COMPARE_HRESULT(bIsFolder1 ? -1 : 1); } - int result; + int result = 0; switch (LOWORD(lParam)) { - case 0: /* Name */ + case SHFSF_COL_NAME: result = wcsicmp(pDataW1->wszName, pDataW2->wszName); break; - case 1: /* Type */ - pExtension1 = PathFindExtensionW(pDataW1->wszName); - pExtension2 = PathFindExtensionW(pDataW2->wszName); - result = wcsicmp(pExtension1, pExtension2); - break; - case 2: /* Size */ + case SHFSF_COL_SIZE: if (pData1->u.file.dwFileSize > pData2->u.file.dwFileSize) result = 1; else if (pData1->u.file.dwFileSize < pData2->u.file.dwFileSize) @@ -1040,16 +1053,26 @@ HRESULT WINAPI CFSFolder::CompareIDs(LPARAM lParam, else result = 0; break; - case 3: /* Modified */ + case SHFSF_COL_TYPE: + pExtension1 = PathFindExtensionW(pDataW1->wszName); + pExtension2 = PathFindExtensionW(pDataW2->wszName); + result = wcsicmp(pExtension1, pExtension2); + break; + case SHFSF_COL_MDATE: result = pData1->u.file.uFileDate - pData2->u.file.uFileDate; if (result == 0) result = pData1->u.file.uFileTime - pData2->u.file.uFileTime; break; - case 4: /* Attributes */ + case SHFSF_COL_FATTS: return SHELL32_CompareDetails(this, lParam, pidl1, pidl2); - case 5: /* Comments */ + case SHFSF_COL_COMMENT: result = 0; break; + default: + if (_ILIsPidlSimple(pidl1) || _ILIsPidlSimple(pidl2)) + ERR("Unknown column %u, can't compare\n", LOWORD(lParam)); + else + TRACE("Unknown column %u, deferring to the subfolder\n", LOWORD(lParam)); } if (result == 0) @@ -1543,16 +1566,14 @@ HRESULT WINAPI CFSFolder::GetDefaultColumn(DWORD dwRes, } HRESULT WINAPI CFSFolder::GetDefaultColumnState(UINT iColumn, - DWORD * pcsFlags) + SHCOLSTATEF *pcsFlags) { TRACE ("(%p)\n", this); - if (!pcsFlags || iColumn >= GENERICSHELLVIEWCOLUMNS) + if (!pcsFlags) return E_INVALIDARG; - - *pcsFlags = GenericSFHeader[iColumn].pcsFlags; - - return S_OK; + else + return GetDefaultFSColumnState(iColumn, *pcsFlags); } HRESULT WINAPI CFSFolder::GetDetailsEx(PCUITEMID_CHILD pidl, @@ -1576,9 +1597,7 @@ HRESULT WINAPI CFSFolder::GetDetailsOf(PCUITEMID_CHILD pidl, if (!pidl) { /* the header titles */ - psd->fmt = GenericSFHeader[iColumn].fmt; - psd->cxChar = GenericSFHeader[iColumn].cxChar; - return SHSetStrRet(&psd->str, GenericSFHeader[iColumn].colnameid); + return GetFSColumnDetails(iColumn, *psd); } else { @@ -1587,24 +1606,30 @@ HRESULT WINAPI CFSFolder::GetDetailsOf(PCUITEMID_CHILD pidl, /* the data from the pidl */ switch (iColumn) { - case 0: /* name */ + case SHFSF_COL_NAME: hr = GetDisplayNameOf (pidl, SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str); break; - case 1: /* type */ - _ILGetFileType(pidl, psd->str.cStr, MAX_PATH); - break; - case 2: /* size */ + case SHFSF_COL_SIZE: _ILGetFileSize(pidl, psd->str.cStr, MAX_PATH); break; - case 3: /* date */ + case SHFSF_COL_TYPE: + _ILGetFileType(pidl, psd->str.cStr, MAX_PATH); + break; + case SHFSF_COL_MDATE: _ILGetFileDate(pidl, psd->str.cStr, MAX_PATH); break; - case 4: /* attributes */ + case SHFSF_COL_FATTS: _ILGetFileAttributes(pidl, psd->str.cStr, MAX_PATH); break; - case 5: /* FIXME: comments */ - psd->str.cStr[0] = 0; + case SHFSF_COL_COMMENT: + psd->str.cStr[0] = '\0'; // TODO: Extract comment from .lnk files? desktop.ini? break; +#if DBG + default: + ERR("Missing case for column %d\n", iColumn); +#else + DEFAULT_UNREACHABLE; +#endif } } diff --git a/dll/win32/shell32/folders/CFSFolder.h b/dll/win32/shell32/folders/CFSFolder.h index 8d29c4d3479..d74c7d915a2 100644 --- a/dll/win32/shell32/folders/CFSFolder.h +++ b/dll/win32/shell32/folders/CFSFolder.h @@ -125,6 +125,11 @@ class CFSFolder : protected: HRESULT WINAPI GetCustomViewInfo(ULONG unknown, SFVM_CUSTOMVIEWINFO_DATA *data); + + public: + // Helper functions shared with CDesktopFolder + static HRESULT GetFSColumnDetails(UINT iColumn, SHELLDETAILS &sd); + static HRESULT GetDefaultFSColumnState(UINT iColumn, SHCOLSTATEF &csFlags); }; #endif /* _CFSFOLDER_H_ */ diff --git a/dll/win32/shell32/folders/CNetFolder.cpp b/dll/win32/shell32/folders/CNetFolder.cpp index 5479deddb1a..4b1eb3c15ef 100644 --- a/dll/win32/shell32/folders/CNetFolder.cpp +++ b/dll/win32/shell32/folders/CNetFolder.cpp @@ -510,13 +510,13 @@ HRESULT WINAPI CNetFolder::GetDefaultColumn (DWORD dwRes, ULONG *pSort, ULONG *p return S_OK; } -HRESULT WINAPI CNetFolder::GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags) +HRESULT WINAPI CNetFolder::GetDefaultColumnState(UINT iColumn, SHCOLSTATEF *pcsFlags) { TRACE("(%p)\n", this); if (!pcsFlags || iColumn >= NETWORKPLACESSHELLVIEWCOLUMNS) return E_INVALIDARG; - *pcsFlags = NetworkPlacesSFHeader[iColumn].pcsFlags; + *pcsFlags = NetworkPlacesSFHeader[iColumn].colstate; return S_OK; } diff --git a/dll/win32/shell32/folders/CPrinterFolder.cpp b/dll/win32/shell32/folders/CPrinterFolder.cpp index 43050b625c9..8d9553117f6 100644 --- a/dll/win32/shell32/folders/CPrinterFolder.cpp +++ b/dll/win32/shell32/folders/CPrinterFolder.cpp @@ -432,11 +432,11 @@ HRESULT WINAPI CPrinterFolder::GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG return S_OK; } -HRESULT WINAPI CPrinterFolder::GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags) +HRESULT WINAPI CPrinterFolder::GetDefaultColumnState(UINT iColumn, SHCOLSTATEF *pcsFlags) { if (!pcsFlags || iColumn >= PrinterSHELLVIEWCOLUMNS) return E_INVALIDARG; - *pcsFlags = PrinterSFHeader[iColumn].pcsFlags; + *pcsFlags = PrinterSFHeader[iColumn].colstate; return S_OK; } diff --git a/dll/win32/shell32/folders/CRegFolder.cpp b/dll/win32/shell32/folders/CRegFolder.cpp index 57e0dc9aa3a..9a74ab6fa7a 100644 --- a/dll/win32/shell32/folders/CRegFolder.cpp +++ b/dll/win32/shell32/folders/CRegFolder.cpp @@ -233,14 +233,6 @@ class CRegFolderEnum : END_COM_MAP() }; -enum registry_columns -{ - REGISTRY_COL_NAME, - REGISTRY_COL_TYPE, - REGISTRY_COL_VALUE, - REGISTRY_COL_COUNT, -}; - CRegFolderEnum::CRegFolderEnum() { } @@ -302,6 +294,18 @@ HRESULT CRegFolderEnum::AddItemsFromKey(HKEY hkey_root, LPCWSTR szRepPath) return S_OK; } +/* + * These columns try to map to CFSFolder's columns because the CDesktopFolder + * displays CFSFolder and CRegFolder items in the same view. + */ +enum REGFOLDERCOLUMNINDEX +{ + COL_NAME = SHFSF_COL_NAME, + COL_TYPE = SHFSF_COL_TYPE, + COL_INFOTIP = SHFSF_COL_COMMENT, + REGFOLDERCOLUMNCOUNT = max(COL_INFOTIP, COL_TYPE) + 1 +}; + class CRegFolder : public CComObjectRootEx, public IShellFolder2 @@ -808,7 +812,7 @@ HRESULT WINAPI CRegFolder::GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pD HRESULT WINAPI CRegFolder::GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags) { - if (iColumn >= REGISTRY_COL_COUNT) + if (iColumn >= REGFOLDERCOLUMNCOUNT) return E_INVALIDARG; *pcsFlags = SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT; return S_OK; @@ -824,6 +828,12 @@ HRESULT WINAPI CRegFolder::GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHEL if (!psd) return E_INVALIDARG; + if (!pidl) + { + TRACE("CRegFolder has no column info\n"); + return E_INVALIDARG; + } + GUID const *clsid = _ILGetGUIDPointer (pidl); if (!clsid) @@ -834,11 +844,11 @@ HRESULT WINAPI CRegFolder::GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHEL switch(iColumn) { - case REGISTRY_COL_NAME: + case COL_NAME: return GetDisplayNameOf(pidl, SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str); - case REGISTRY_COL_TYPE: + case COL_TYPE: return SHSetStrRet(&psd->str, IDS_SYSTEMFOLDER); - case REGISTRY_COL_VALUE: + case COL_INFOTIP: HKEY hKey; if (!HCR_RegOpenClassIDKey(*clsid, &hKey)) return SHSetStrRet(&psd->str, ""); diff --git a/dll/win32/shell32/shfldr.h b/dll/win32/shell32/shfldr.h index 64e236a5d73..f2b1de470cc 100644 --- a/dll/win32/shell32/shfldr.h +++ b/dll/win32/shell32/shfldr.h @@ -27,11 +27,25 @@ #define CHARS_IN_GUID 39 typedef struct { - int colnameid; - int pcsFlags; - int fmt; - int cxChar; + WORD colnameid; // Column title text resource id passed to LoadString + WORD colstate; // SHCOLSTATEF returned by IShellFolder2::GetDefaultColumnState + // HACK: SHCOLSTATEF truncated to WORD to reduce .rdata section size + WORD fmt; // LVCFMT_* + WORD cxChar; // Column width hint } shvheader; +/* + * CFSFolder column indices. CDesktopFolder MUST use the same indices! + * According to the documentation for IShellFolder2::GetDetailsOf, + * the first 4 columns for SFGAO_FILESYSTEM items must be Name, Size, Type, Modified date +For Details See: +https://learn.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-ishellfolder2-getdetailsof + */ +#define SHFSF_COL_NAME 0 +#define SHFSF_COL_SIZE 1 +#define SHFSF_COL_TYPE 2 // SHGFI_TYPENAME +#define SHFSF_COL_MDATE 3 // Modified date +#define SHFSF_COL_FATTS 4 // File attributes +#define SHFSF_COL_COMMENT 5 #define GET_SHGDN_FOR(dwFlags) ((DWORD)dwFlags & (DWORD)0x0000FF00) #define GET_SHGDN_RELATION(dwFlags) ((DWORD)dwFlags & (DWORD)0x000000FF) From 1331e2fb029b5cf7e8d1b7987ac797e2d4779da5 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Fri, 26 Apr 2024 08:39:45 +0900 Subject: [PATCH 015/182] [KERNEL32_APITEST] Add LCMapString testcase (#6805) @tkreuzer said he wants LCMapString testcase in chat. JIRA issue: N/A --- .../rostests/apitests/kernel32/CMakeLists.txt | 1 + .../rostests/apitests/kernel32/LCMapString.c | 60 +++++++++++++++++++ modules/rostests/apitests/kernel32/testlist.c | 2 + 3 files changed, 63 insertions(+) create mode 100644 modules/rostests/apitests/kernel32/LCMapString.c diff --git a/modules/rostests/apitests/kernel32/CMakeLists.txt b/modules/rostests/apitests/kernel32/CMakeLists.txt index 582d3f5627f..34b75d4054f 100644 --- a/modules/rostests/apitests/kernel32/CMakeLists.txt +++ b/modules/rostests/apitests/kernel32/CMakeLists.txt @@ -22,6 +22,7 @@ list(APPEND SOURCE interlck.c IsDBCSLeadByteEx.c JapaneseCalendar.c + LCMapString.c LoadLibraryExW.c lstrcpynW.c lstrlen.c diff --git a/modules/rostests/apitests/kernel32/LCMapString.c b/modules/rostests/apitests/kernel32/LCMapString.c new file mode 100644 index 00000000000..27a66b90ab6 --- /dev/null +++ b/modules/rostests/apitests/kernel32/LCMapString.c @@ -0,0 +1,60 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later) + * PURPOSE: Tests for LCMapString + * COPYRIGHT: Copyright 2024 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com) + */ + +#include "precomp.h" + +#undef ok_wstr_ + +static void +ok_wstr_(const char *file, int line, LPCWSTR x, LPCWSTR y) +{ + char buf1[100], buf2[100]; + lstrcpynA(buf1, wine_dbgstr_w(x), _countof(buf1)); + lstrcpynA(buf2, wine_dbgstr_w(y), _countof(buf2)); + ok_(file, line)(wcscmp(x, y) == 0, "Wrong string. Expected %s, got %s\n", buf2, buf1); +} + +#undef ok_wstr +#define ok_wstr(x, y) ok_wstr_(__FILE__, __LINE__, x, y) + +// "ABab12ABï½ï½‚12ã‚ã‚¢ã°ãƒï¾Šï¾Ÿä¸‡è¬" in UTF-16 +static const WCHAR c_target[] = + L"ABab12\xff21\xff22\xff41\xff42\xff11\xff12\x3042\x30a2\x3070\x30d0\xff8a\xff9f\x4e07\x842c"; + +static void TEST_LCMapStringW(void) +{ + WCHAR results[100]; + + LCMapStringW(0, LCMAP_FULLWIDTH, c_target, -1, results, _countof(results)); + ok_wstr(results, L"\xff21\xff22\xff41\xff42\xff11\xff12\xff21\xff22\xff41\xff42\xff11\xff12\x3042\x30a2\x3070\x30d0\x30d1\x4e07\x842c"); + + LCMapStringW(0, LCMAP_HALFWIDTH, c_target, -1, results, _countof(results)); + ok_wstr(results, L"ABab12ABab12\x3042\xff71\x3070\xff8a\xff9e\xff8a\xff9f\x4e07\x842c"); + + LCMapStringW(0, LCMAP_HIRAGANA, c_target, -1, results, _countof(results)); + ok_wstr(results, L"ABab12\xff21\xff22\xff41\xff42\xff11\xff12\x3042\x3042\x3070\x3070\xff8a\xff9f\x4e07\x842c"); + + LCMapStringW(0, LCMAP_KATAKANA, c_target, -1, results, _countof(results)); + ok_wstr(results, L"ABab12\xff21\xff22\xff41\xff42\xff11\xff12\x30a2\x30a2\x30d0\x30d0\xff8a\xff9f\x4e07\x842c"); + + LCMapStringW(0, LCMAP_LOWERCASE, c_target, -1, results, _countof(results)); + ok_wstr(results, L"abab12\xff41\xff42\xff41\xff42\xff11\xff12\x3042\x30a2\x3070\x30d0\xff8a\xff9f\x4e07\x842c"); + + LCMapStringW(0, LCMAP_UPPERCASE, c_target, -1, results, _countof(results)); + ok_wstr(results, L"ABAB12\xff21\xff22\xff21\xff22\xff11\xff12\x3042\x30a2\x3070\x30d0\xff8a\xff9f\x4e07\x842c"); + + LCMapStringW(0, LCMAP_SIMPLIFIED_CHINESE, c_target, -1, results, _countof(results)); + ok_wstr(results, L"ABab12\xff21\xff22\xff41\xff42\xff11\xff12\x3042\x30a2\x3070\x30d0\xff8a\xff9f\x4e07\x4e07"); + + LCMapStringW(0, LCMAP_TRADITIONAL_CHINESE, c_target, -1, results, _countof(results)); + ok_wstr(results, L"ABab12\xff21\xff22\xff41\xff42\xff11\xff12\x3042\x30a2\x3070\x30d0\xff8a\xff9f\x842c\x842c"); +} + +START_TEST(LCMapString) +{ + TEST_LCMapStringW(); +} diff --git a/modules/rostests/apitests/kernel32/testlist.c b/modules/rostests/apitests/kernel32/testlist.c index a0a11a88d1a..5fe42fb643c 100644 --- a/modules/rostests/apitests/kernel32/testlist.c +++ b/modules/rostests/apitests/kernel32/testlist.c @@ -22,6 +22,7 @@ extern void func_InitOnce(void); extern void func_interlck(void); extern void func_IsDBCSLeadByteEx(void); extern void func_JapaneseCalendar(void); +extern void func_LCMapString(void); extern void func_LoadLibraryExW(void); extern void func_lstrcpynW(void); extern void func_lstrlen(void); @@ -59,6 +60,7 @@ const struct test winetest_testlist[] = { "interlck", func_interlck }, { "IsDBCSLeadByteEx", func_IsDBCSLeadByteEx }, { "JapaneseCalendar", func_JapaneseCalendar }, + { "LCMapString", func_LCMapString }, { "LoadLibraryExW", func_LoadLibraryExW }, { "lstrcpynW", func_lstrcpynW }, { "lstrlen", func_lstrlen }, From 018264f38f5088cae07e514317f89dc0df30e242 Mon Sep 17 00:00:00 2001 From: Thamatip Chitpong Date: Fri, 26 Apr 2024 07:12:02 +0700 Subject: [PATCH 016/182] [NTUSER] Release modifier keys when deactivating message queue (#6754) CORE-14768 --- win32ss/user/ntuser/focus.c | 3 +++ win32ss/user/ntuser/msgqueue.c | 15 +++++++++++++++ win32ss/user/ntuser/msgqueue.h | 3 +++ 3 files changed, 21 insertions(+) diff --git a/win32ss/user/ntuser/focus.c b/win32ss/user/ntuser/focus.c index d641e163e0d..ef566232dc3 100644 --- a/win32ss/user/ntuser/focus.c +++ b/win32ss/user/ntuser/focus.c @@ -341,6 +341,9 @@ IntDeactivateWindow(PTHREADINFO pti, HANDLE tid) UserDerefObjectCo(pwndFocus); } + /* Check for keyboard modifiers and release them (CORE-14768) */ + MsqReleaseModifierKeys(pti->MessageQueue); + if (InAAPM) pti->TIF_flags &= ~TIF_INACTIVATEAPPMSG; if (ptiCurrent != pti) { diff --git a/win32ss/user/ntuser/msgqueue.c b/win32ss/user/ntuser/msgqueue.c index b704dbce5ca..1624cbfaddd 100644 --- a/win32ss/user/ntuser/msgqueue.c +++ b/win32ss/user/ntuser/msgqueue.c @@ -2530,6 +2530,21 @@ MsqSetStateWindow(PTHREADINFO pti, ULONG Type, HWND hWnd) return NULL; } +VOID FASTCALL +MsqReleaseModifierKeys(PUSER_MESSAGE_QUEUE MessageQueue) +{ + WORD ModifierKeys[] = { VK_LCONTROL, VK_RCONTROL, VK_CONTROL, + VK_LMENU, VK_RMENU, VK_MENU, + VK_LSHIFT, VK_RSHIFT, VK_SHIFT }; + UINT i; + + for (i = 0; i < _countof(ModifierKeys); ++i) + { + if (IS_KEY_DOWN(MessageQueue->afKeyState, ModifierKeys[i])) + SET_KEY_DOWN(MessageQueue->afKeyState, ModifierKeys[i], FALSE); + } +} + SHORT APIENTRY NtUserGetKeyState(INT key) diff --git a/win32ss/user/ntuser/msgqueue.h b/win32ss/user/ntuser/msgqueue.h index d3e3399b416..57ea573177a 100644 --- a/win32ss/user/ntuser/msgqueue.h +++ b/win32ss/user/ntuser/msgqueue.h @@ -288,4 +288,7 @@ co_IntWaitMessage( PWND Window, UINT MsgFilterMin, UINT MsgFilterMax ); +VOID FASTCALL +MsqReleaseModifierKeys(PUSER_MESSAGE_QUEUE MessageQueue); + /* EOF */ From 6d16d274626c21ed4d02677c6a57280416764233 Mon Sep 17 00:00:00 2001 From: Thamatip Chitpong Date: Mon, 22 Apr 2024 20:48:42 +0700 Subject: [PATCH 017/182] [TASKMGR] Process page: Improve readability of command line string formatting code --- base/applications/taskmgr/procpage.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/base/applications/taskmgr/procpage.c b/base/applications/taskmgr/procpage.c index 27b34947153..61043b14d85 100644 --- a/base/applications/taskmgr/procpage.c +++ b/base/applications/taskmgr/procpage.c @@ -1222,6 +1222,7 @@ void ProcessPage_OnOpenFileLocation(void) DWORD dwProcessId; DWORD dwLength; LPWSTR pszExePath; + static const WCHAR szCmdFormat[] = L"/select,\"%s\""; LPWSTR pszCmdLine = NULL; dwProcessId = GetSelectedProcessId(); @@ -1240,11 +1241,12 @@ void ProcessPage_OnOpenFileLocation(void) goto Cleanup; /* Build the shell command line */ - pszCmdLine = HeapAlloc(GetProcessHeap(), 0, (dwLength + CONST_STR_LEN(L"/select,\"\"")) * sizeof(WCHAR)); + dwLength += CONST_STR_LEN(szCmdFormat) - CONST_STR_LEN(L"%s"); + pszCmdLine = HeapAlloc(GetProcessHeap(), 0, dwLength * sizeof(WCHAR)); if (!pszCmdLine) goto Cleanup; - StringCchPrintfW(pszCmdLine, dwLength + CONST_STR_LEN(L"/select,\"\""), L"/select,\"%s\"", pszExePath); + StringCchPrintfW(pszCmdLine, dwLength, szCmdFormat, pszExePath); /* Call the shell to open the file location and select it */ ShellExecuteW(NULL, L"open", L"explorer.exe", pszCmdLine, NULL, SW_SHOWNORMAL); From cd0bb1af074b3a8d35b7eddae271d6e5ab484795 Mon Sep 17 00:00:00 2001 From: Thamatip Chitpong Date: Mon, 22 Apr 2024 21:04:23 +0700 Subject: [PATCH 018/182] [TASKMGR] Process page: Allow using "Open File Location" functionality without running Explorer shell If Explorer shell is not available, use ReactOS's alternative file browser instead. --- base/applications/taskmgr/procpage.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/base/applications/taskmgr/procpage.c b/base/applications/taskmgr/procpage.c index 61043b14d85..1d16f2a3b83 100644 --- a/base/applications/taskmgr/procpage.c +++ b/base/applications/taskmgr/procpage.c @@ -1248,8 +1248,11 @@ void ProcessPage_OnOpenFileLocation(void) StringCchPrintfW(pszCmdLine, dwLength, szCmdFormat, pszExePath); - /* Call the shell to open the file location and select it */ - ShellExecuteW(NULL, L"open", L"explorer.exe", pszCmdLine, NULL, SW_SHOWNORMAL); + /* Call the shell to open the file location and select it. If Explorer shell + * is not available, use ReactOS's alternative file browser instead. */ + ShellExecuteW(NULL, L"open", + GetShellWindow() ? L"explorer.exe" : L"filebrowser.exe", + pszCmdLine, NULL, SW_SHOWNORMAL); Cleanup: HeapFree(GetProcessHeap(), 0, pszCmdLine); From 6beff505d76bb3e69cc269039cb4326cadf8ff2f Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 8 Mar 2024 19:03:23 +0200 Subject: [PATCH 019/182] [CRT] Add _Exit to process.h This is already done this way in our stdlib.h. It is needed by GCC 13 C++ headers. The problem happens like this: - telnet/precomp.h includes fstream from GCC - fstream includes pthread.h from GCC - pthread.h includes process.h from ReactOS - process.h defines _CRT_TERMINATE_DEFINED, but doesn't declare _Exit - fstream includes cstdlib from GCC - cstdlib includes stdlib.h from GCC (#include_next) - stdlib.h doesn't declare _Exit, because _CRT_TERMINATE_DEFINED is defined - cstdlib uses _Exit --- sdk/include/crt/process.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/sdk/include/crt/process.h b/sdk/include/crt/process.h index b8948f5f0e0..9c603e02850 100644 --- a/sdk/include/crt/process.h +++ b/sdk/include/crt/process.h @@ -54,7 +54,12 @@ extern "C" { #define _CRT_TERMINATE_DEFINED __declspec(noreturn) void __cdecl exit(_In_ int _Code); _CRTIMP __declspec(noreturn) void __cdecl _exit(_In_ int _Code); - +#if !defined __NO_ISOCEXT /* extern stub in static libmingwex.a */ + /* C99 function name */ + __declspec(noreturn) void __cdecl _Exit(int); /* Declare to get noreturn attribute. */ + __CRT_INLINE void __cdecl _Exit(int status) + { _exit(status); } +#endif #if __MINGW_GNUC_PREREQ(4,4) #pragma push_macro("abort") #undef abort From 45aa8f8111a409270f36c7ad8967f717538bf694 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 25 Apr 2024 09:41:46 +0300 Subject: [PATCH 020/182] [CRT] Remove useless #undef abort from process.h --- sdk/include/crt/process.h | 1 - 1 file changed, 1 deletion(-) diff --git a/sdk/include/crt/process.h b/sdk/include/crt/process.h index 9c603e02850..85321ccf4c2 100644 --- a/sdk/include/crt/process.h +++ b/sdk/include/crt/process.h @@ -67,7 +67,6 @@ extern "C" { __declspec(noreturn) void __cdecl abort(void); #if __MINGW_GNUC_PREREQ(4,4) #pragma pop_macro("abort") -#undef abort #endif #endif From dcf9eb060a9900e01c762c8a2fcec10e9d119518 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Jab=C5=82o=C5=84ski?= Date: Sat, 27 Apr 2024 02:28:46 +0200 Subject: [PATCH 021/182] [SHELL32] Fix Control_RunDLLW (#5400) This commit makes Control_RunDLLW pass all but one tests from rostests (the one test that fails is the first one, but it only fails if the path to the test program contains a space). - Rework string parsing in the Control_DoLaunch routine - Do not send the CPL_STARTWPARMSW message, if no extra parameters were specified (fixes the failing Got NULL lParam2! and some CPL_STARTWPARMSW: expected -1 got %d tests) - Do not resolve invalid dialog names to index zero, unless the name is empty (fixes some of the failing CPL_DBLCLK: expected -1 got %d tests) - Handle quotes in the second part of wszCmd CORE-8981 --- dll/win32/shell32/wine/control.c | 221 ++++++++++++++++++++++++------- dll/win32/syssetup/wizard.c | 2 +- 2 files changed, 176 insertions(+), 47 deletions(-) diff --git a/dll/win32/shell32/wine/control.c b/dll/win32/shell32/wine/control.c index 4acbc31ae0a..612dbcc0783 100644 --- a/dll/win32/shell32/wine/control.c +++ b/dll/win32/shell32/wine/control.c @@ -873,6 +873,7 @@ static void Control_DoLaunch(CPanel* panel, HWND hWnd, LPCWSTR wszCmd) * "a path\foo.cpl" */ { +#ifndef __REACTOS__ LPWSTR buffer; LPWSTR beg = NULL; LPWSTR end; @@ -952,14 +953,6 @@ static void Control_DoLaunch(CPanel* panel, HWND hWnd, LPCWSTR wszCmd) applet = Control_LoadApplet(hWnd, buffer, panel); if (applet) { -#ifdef __REACTOS__ - ULONG_PTR cookie; - BOOL bActivated; - ATOM aCPLName; - ATOM aCPLFlags; - ATOM aCPLPath; - AppDlgFindData findData; -#endif /* we've been given a textual parameter (or none at all) */ if (sp == -1) { while ((++sp) != applet->count) { @@ -975,65 +968,201 @@ static void Control_DoLaunch(CPanel* panel, HWND hWnd, LPCWSTR wszCmd) sp = 0; } -#ifdef __REACTOS__ - bActivated = (applet->hActCtx != INVALID_HANDLE_VALUE ? ActivateActCtx(applet->hActCtx, &cookie) : FALSE); + if (!applet->proc(applet->hWnd, CPL_STARTWPARMSW, sp, (LPARAM)extraPmts)) + applet->proc(applet->hWnd, CPL_DBLCLK, sp, applet->info[sp].data); + + Control_UnloadApplet(applet); + } + + HeapFree(GetProcessHeap(), 0, buffer); +#else + LPWSTR buffer; + LPWSTR ptr; + signed sp = -1; + LPCWSTR extraPmts = L""; + BOOL quoted = FALSE; + CPlApplet *applet; + LPCWSTR pchFirstComma = NULL, pchSecondComma = NULL; + LPCWSTR pchLastUnquotedSpace = NULL; + LPWSTR wszDialogBoxName; + int i = 0; + SIZE_T nLen = lstrlenW(wszCmd); + + buffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*buffer) * (nLen + 1)); + wszDialogBoxName = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*wszDialogBoxName) * (nLen + 1)); + if (wszDialogBoxName == NULL || buffer == NULL) + { + if (buffer != NULL) + HeapFree(GetProcessHeap(), 0, buffer); + if (wszDialogBoxName != NULL) + HeapFree(GetProcessHeap(), 0, wszDialogBoxName); + return; + } - aCPLPath = GlobalFindAtomW(applet->cmd); - if (!aCPLPath) + /* Search for unquoted commas and spaces. */ + for (i = 0; i < nLen; i++) + { + if (quoted && wszCmd[i] != L'"') + continue; + switch (wszCmd[i]) { - aCPLPath = GlobalAddAtomW(applet->cmd); + case L'"': + quoted = !quoted; + break; + case L',': + if (!pchFirstComma) + pchFirstComma = &wszCmd[i]; + else if (!pchSecondComma) + pchSecondComma = &wszCmd[i]; + break; + case L' ': + pchLastUnquotedSpace = &wszCmd[i]; + break; } + } - aCPLName = GlobalFindAtomW(L"CPLName"); - if (!aCPLName) + /* If no unquoted commas are found, parameters are either space separated, or the entire string + * is a CPL path. */ + if (!pchFirstComma) + { + /* An unquoted space was found in the string. Assume the last word is the dialog box + * name/number. */ + if (pchLastUnquotedSpace) + { + int nSpaces = 0; + + while (pchLastUnquotedSpace[nSpaces] == L' ') + nSpaces++; + + StringCchCopyNW(buffer, nLen + 1, wszCmd, pchLastUnquotedSpace - wszCmd); + StringCchCopyW(wszDialogBoxName, nLen + 1, pchLastUnquotedSpace + nSpaces); + } + /* No parameters were passed, the entire string is the CPL path. */ + else + { + StringCchCopyW(buffer, nLen + 1, wszCmd); + } + } + /* If an unquoted comma was found, there are at least two parts of the string: + * - the CPL path + * - either a dialog box number preceeded by @, or a dialog box name. + * If there was a second unqoted comma, there is another part of the string: + * - the rest of the parameters. */ + else + { + /* If there was no second unquoted comma in the string, the CPL path ends at thes + * null terminator. */ + if (!pchSecondComma) + pchSecondComma = wszCmd + nLen; + + StringCchCopyNW(buffer, nLen + 1, wszCmd, pchFirstComma - wszCmd); + StringCchCopyNW(wszDialogBoxName, + nLen + 1, + pchFirstComma + 1, + pchSecondComma - pchFirstComma - 1); + + if (pchSecondComma != wszCmd + nLen) { - aCPLName = GlobalAddAtomW(L"CPLName"); + extraPmts = pchSecondComma + 1; } + } + + /* Remove the quotes from both buffers. */ + while ((ptr = StrChrW(buffer, '"'))) + memmove(ptr, ptr+1, lstrlenW(ptr)*sizeof(WCHAR)); - aCPLFlags = GlobalFindAtomW(L"CPLFlags"); - if (!aCPLFlags) + while ((ptr = StrChrW(wszDialogBoxName, '"'))) + memmove(ptr, ptr+1, lstrlenW(ptr)*sizeof(WCHAR)); + + if (wszDialogBoxName[0] == L'@') + { + sp = _wtoi(wszDialogBoxName + 1); + } + + TRACE("cmd %s, extra %s, sp %d\n", debugstr_w(buffer), debugstr_w(extraPmts), sp); + + applet = Control_LoadApplet(hWnd, buffer, panel); + if (applet) + { + ULONG_PTR cookie; + BOOL bActivated; + ATOM aCPLName; + ATOM aCPLFlags; + ATOM aCPLPath; + AppDlgFindData findData; + + /* we've been given a textual parameter (or none at all) */ + if (sp == -1) { - aCPLFlags = GlobalAddAtomW(L"CPLFlags"); + while ((++sp) != applet->count) + { + TRACE("sp %d, name %s\n", sp, debugstr_w(applet->info[sp].name)); + + if (StrCmpIW(wszDialogBoxName, applet->info[sp].name) == 0) + break; + } } - findData.szAppFile = applet->cmd; - findData.sAppletNo = (UINT_PTR)(sp + 1); - findData.aCPLName = aCPLName; - findData.aCPLFlags = aCPLFlags; - findData.hRunDLL = applet->hWnd; - findData.hDlgResult = NULL; - // Find the dialog of this applet in the first instance. - // Note: The simpler functions "FindWindow" or "FindWindowEx" does not find this type of dialogs. - EnumWindows(Control_EnumWinProc, (LPARAM)&findData); - if (findData.hDlgResult) + if (sp >= applet->count && wszDialogBoxName[0] == L'\0') { - BringWindowToTop(findData.hDlgResult); + sp = 0; } - else + + bActivated = (applet->hActCtx != INVALID_HANDLE_VALUE ? ActivateActCtx(applet->hActCtx, &cookie) : FALSE); + + if (sp < applet->count) { - SetPropW(applet->hWnd, (LPTSTR)MAKEINTATOM(aCPLName), (HANDLE)MAKEINTATOM(aCPLPath)); - SetPropW(applet->hWnd, (LPTSTR)MAKEINTATOM(aCPLFlags), UlongToHandle(sp + 1)); - Control_ShowAppletInTaskbar(applet, sp); -#endif + aCPLPath = GlobalFindAtomW(applet->cmd); + if (!aCPLPath) + aCPLPath = GlobalAddAtomW(applet->cmd); + + aCPLName = GlobalFindAtomW(L"CPLName"); + if (!aCPLName) + aCPLName = GlobalAddAtomW(L"CPLName"); + + aCPLFlags = GlobalFindAtomW(L"CPLFlags"); + if (!aCPLFlags) + aCPLFlags = GlobalAddAtomW(L"CPLFlags"); + + findData.szAppFile = applet->cmd; + findData.sAppletNo = (UINT_PTR)(sp + 1); + findData.aCPLName = aCPLName; + findData.aCPLFlags = aCPLFlags; + findData.hRunDLL = applet->hWnd; + findData.hDlgResult = NULL; + // Find the dialog of this applet in the first instance. + // Note: The simpler functions "FindWindow" or "FindWindowEx" does not find this type of dialogs. + EnumWindows(Control_EnumWinProc, (LPARAM)&findData); + if (findData.hDlgResult) + { + BringWindowToTop(findData.hDlgResult); + } + else + { + SetPropW(applet->hWnd, (LPTSTR)MAKEINTATOM(aCPLName), (HANDLE)MAKEINTATOM(aCPLPath)); + SetPropW(applet->hWnd, (LPTSTR)MAKEINTATOM(aCPLFlags), UlongToHandle(sp + 1)); + Control_ShowAppletInTaskbar(applet, sp); + + if (extraPmts[0] == L'\0' || + !applet->proc(applet->hWnd, CPL_STARTWPARMSW, sp, (LPARAM)extraPmts)) + { + applet->proc(applet->hWnd, CPL_DBLCLK, sp, applet->info[sp].data); + } - if (!applet->proc(applet->hWnd, CPL_STARTWPARMSW, sp, (LPARAM)extraPmts)) - applet->proc(applet->hWnd, CPL_DBLCLK, sp, applet->info[sp].data); -#ifdef __REACTOS__ - RemovePropW(applet->hWnd, applet->cmd); - GlobalDeleteAtom(aCPLPath); + RemovePropW(applet->hWnd, applet->cmd); + GlobalDeleteAtom(aCPLPath); + } } -#endif Control_UnloadApplet(applet); -#ifdef __REACTOS__ - if (bActivated) - DeactivateActCtx(0, cookie); -#endif - + if (bActivated) + DeactivateActCtx(0, cookie); } HeapFree(GetProcessHeap(), 0, buffer); + HeapFree(GetProcessHeap(), 0, wszDialogBoxName); +#endif } /************************************************************************* diff --git a/dll/win32/syssetup/wizard.c b/dll/win32/syssetup/wizard.c index 9afef48c4c5..14c282091be 100644 --- a/dll/win32/syssetup/wizard.c +++ b/dll/win32/syssetup/wizard.c @@ -2467,7 +2467,7 @@ FinishDlgProc(HWND hwndDlg, if (!SetupData->UnattendSetup || !SetupData->DisableGeckoInst) { /* Run the Wine Gecko prompt */ - Control_RunDLLW(hwndDlg, 0, L"appwiz.cpl install_gecko", SW_SHOW); + Control_RunDLLW(hwndDlg, 0, L"appwiz.cpl,,install_gecko", SW_SHOW); } /* Set title font */ From 701b0a3f240d0645dceb6940abd0edccd04e3a80 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 27 Apr 2024 13:59:06 +0200 Subject: [PATCH 022/182] [MSVCRTEX] Only include _CrtDbgReport*, if we don't already export them (#6797) * [MSVCRTEX] Only include _CrtDbgReport*, if we don't already export them For some reason clang builds now want the ___chkstk_ms on x64 as well, so add it. --- sdk/lib/crt/except/amd64/chkstk_ms.s | 2 ++ sdk/lib/crt/msvcrtex.cmake | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/sdk/lib/crt/except/amd64/chkstk_ms.s b/sdk/lib/crt/except/amd64/chkstk_ms.s index 0894720975f..d895a2a2e9a 100644 --- a/sdk/lib/crt/except/amd64/chkstk_ms.s +++ b/sdk/lib/crt/except/amd64/chkstk_ms.s @@ -16,9 +16,11 @@ .code64 PUBLIC __chkstk +PUBLIC ___chkstk_ms PUBLIC __alloca_probe __alloca_probe: +___chkstk_ms: .PROC __chkstk push rcx /* save temps */ diff --git a/sdk/lib/crt/msvcrtex.cmake b/sdk/lib/crt/msvcrtex.cmake index 2d50c179a80..545cfc98409 100644 --- a/sdk/lib/crt/msvcrtex.cmake +++ b/sdk/lib/crt/msvcrtex.cmake @@ -4,7 +4,6 @@ include_directories(include/internal/mingw-w64) list(APPEND MSVCRTEX_SOURCE ${CRT_STARTUP_SOURCE} math/sincos.c - misc/dbgrpt.cpp misc/fltused.c misc/isblank.c misc/iswblank.c @@ -13,6 +12,7 @@ list(APPEND MSVCRTEX_SOURCE if(DLL_EXPORT_VERSION LESS 0x600) list(APPEND MSVCRTEX_SOURCE + misc/dbgrpt.cpp stdlib/_invalid_parameter.c stdlib/rand_s.c ) From b8e50f787d077860b69acef4a6a3318b13bc1072 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 24 Apr 2024 19:46:23 +0300 Subject: [PATCH 023/182] [NTOS:KE/x64] On syscalls clear nested task flag When this flag is not cleared and the system returns with an IRET, this causes a #GP. Randomly hit by the umkm:SystemCall test. --- ntoskrnl/ke/amd64/kiinit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ntoskrnl/ke/amd64/kiinit.c b/ntoskrnl/ke/amd64/kiinit.c index 54d4d13815a..09a33226288 100644 --- a/ntoskrnl/ke/amd64/kiinit.c +++ b/ntoskrnl/ke/amd64/kiinit.c @@ -218,7 +218,7 @@ KiInitializeCpu(PKIPCR Pcr) ((ULONG64)(KGDT64_R3_CMCODE|RPL_MASK) << 48)); /* Set the flags to be cleared when doing a syscall */ - __writemsr(MSR_SYSCALL_MASK, EFLAGS_IF_MASK | EFLAGS_TF | EFLAGS_DF); + __writemsr(MSR_SYSCALL_MASK, EFLAGS_IF_MASK | EFLAGS_TF | EFLAGS_DF | EFLAGS_NESTED_TASK); /* Enable syscall instruction and no-execute support */ __writemsr(MSR_EFER, __readmsr(MSR_EFER) | MSR_SCE | MSR_NXE); From ab72bc06d69b8908435c21c9d4b907e109d4c7db Mon Sep 17 00:00:00 2001 From: Ryan Kounter Date: Sat, 27 Apr 2024 11:56:03 -0400 Subject: [PATCH 024/182] [COMCTL32] Fix header redraw glitches when resizing (#6799) Fixes COMCTL32 headers from being garbage text when resizing while drawn off screen. - Invalidate header item rect before scrolling to prevent the divider from being redrawn over and over. - Invalidate header item text through adding flag SW_INVALIDATE to ScrollWindowEx call to prevent the text from being redrawn over and over. CORE-19404 --- dll/win32/comctl32/header.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dll/win32/comctl32/header.c b/dll/win32/comctl32/header.c index a48530d8882..e72324ce1f1 100644 --- a/dll/win32/comctl32/header.c +++ b/dll/win32/comctl32/header.c @@ -1948,13 +1948,21 @@ HEADER_MouseMove (HEADER_INFO *infoPtr, LPARAM lParam) if (nWidth < 0) nWidth = 0; infoPtr->items[infoPtr->iMoveItem].cxy = nWidth; +#ifdef __REACTOS__ + InvalidateRect(infoPtr->hwndSelf, &lpItem->rect, FALSE); +#endif HEADER_SetItemBounds(infoPtr); GetClientRect(infoPtr->hwndSelf, &rcClient); rcScroll = rcClient; rcScroll.left = lpItem->rect.left + nOldWidth; +#ifdef __REACTOS__ + ScrollWindowEx(infoPtr->hwndSelf, nWidth - nOldWidth, 0, &rcScroll, &rcClient, + NULL, NULL, SW_INVALIDATE); +#else ScrollWindowEx(infoPtr->hwndSelf, nWidth - nOldWidth, 0, &rcScroll, &rcClient, NULL, NULL, 0); InvalidateRect(infoPtr->hwndSelf, &lpItem->rect, FALSE); +#endif UpdateWindow(infoPtr->hwndSelf); HEADER_SendNotifyWithIntFieldT(infoPtr, HDN_ITEMCHANGEDW, infoPtr->iMoveItem, HDI_WIDTH, nWidth); From ffd060295d83c2ac8899591c4c10e7be85cfcd77 Mon Sep 17 00:00:00 2001 From: Doug Lyons Date: Sat, 27 Apr 2024 13:30:51 -0500 Subject: [PATCH 025/182] [USER32_APITEST] Test MSVC rc.exe compiled 32-bpp BI_BITFIELD bmp (#6755) * Cleanup and Changes based on reviewer comments * For failure, show returned and expected values CORE-17005 --- .../rostests/apitests/user32/CMakeLists.txt | 2 + .../rostests/apitests/user32/LoadImageGCC.c | 151 ++++++++++++++++++ modules/rostests/apitests/user32/image.dll | Bin 0 -> 6656 bytes .../apitests/user32/makeimg/CMakeLists.txt | 13 ++ .../rostests/apitests/user32/makeimg/image.rc | 4 + .../apitests/user32/makeimg/readme.txt | 14 ++ .../apitests/user32/makeimg/showimg.c | 150 +++++++++++++++++ .../rostests/apitests/user32/makeimg/test.bmp | Bin 0 -> 5254 bytes modules/rostests/apitests/user32/resource.h | 1 + modules/rostests/apitests/user32/testlist.c | 2 + .../apitests/user32/user32_apitest.rc | 1 + 11 files changed, 338 insertions(+) create mode 100644 modules/rostests/apitests/user32/LoadImageGCC.c create mode 100644 modules/rostests/apitests/user32/image.dll create mode 100644 modules/rostests/apitests/user32/makeimg/CMakeLists.txt create mode 100644 modules/rostests/apitests/user32/makeimg/image.rc create mode 100644 modules/rostests/apitests/user32/makeimg/readme.txt create mode 100644 modules/rostests/apitests/user32/makeimg/showimg.c create mode 100644 modules/rostests/apitests/user32/makeimg/test.bmp diff --git a/modules/rostests/apitests/user32/CMakeLists.txt b/modules/rostests/apitests/user32/CMakeLists.txt index ccfecb9a340..e49fad457b2 100644 --- a/modules/rostests/apitests/user32/CMakeLists.txt +++ b/modules/rostests/apitests/user32/CMakeLists.txt @@ -1,3 +1,4 @@ +add_subdirectory(makeimg) list(APPEND SOURCE AttachThreadInput.c @@ -30,6 +31,7 @@ list(APPEND SOURCE KbdLayout.c keybd_event.c LoadImage.c + LoadImageGCC.c LookupIconIdFromDirectoryEx.c MessageStateAnalyzer.c NextDlgItem.c diff --git a/modules/rostests/apitests/user32/LoadImageGCC.c b/modules/rostests/apitests/user32/LoadImageGCC.c new file mode 100644 index 00000000000..393965aa0ec --- /dev/null +++ b/modules/rostests/apitests/user32/LoadImageGCC.c @@ -0,0 +1,151 @@ +/* + * PROJECT: ReactOS API tests + * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) + * PURPOSE: Test for LoadImageW using DLL compiled with MSVC + * COPYRIGHT: Copyright 2024 Doug Lyons + * + * NOTES: + * Works on ReactOS, but not on Windows 2003 Server SP2. + */ + +#include "precomp.h" +#include "resource.h" +#include +#include + +BOOL FileExistsW(PCWSTR FileName) +{ + DWORD Attribute = GetFileAttributesW(FileName); + + return (Attribute != INVALID_FILE_ATTRIBUTES && + !(Attribute & FILE_ATTRIBUTE_DIRECTORY)); +} + +BOOL ResourceToFileW(INT i, PCWSTR FileName) +{ + FILE *fout; + HGLOBAL hData; + HRSRC hRes; + PVOID pResLock; + UINT iSize; + + if (FileExistsW(FileName)) + { + /* We should only be using %temp% paths, so deleting here should be OK */ + printf("Deleting '%S' that already exists.\n", FileName); + DeleteFileW(FileName); + } + + hRes = FindResourceW(NULL, MAKEINTRESOURCEW(i), MAKEINTRESOURCEW(RT_RCDATA)); + if (hRes == NULL) + { + skip("Could not locate resource (%d). Exiting now\n", i); + return FALSE; + } + + iSize = SizeofResource(NULL, hRes); + + hData = LoadResource(NULL, hRes); + if (hData == NULL) + { + skip("Could not load resource (%d). Exiting now\n", i); + return FALSE; + } + + // Lock the resource into global memory. + pResLock = LockResource(hData); + if (pResLock == NULL) + { + skip("Could not lock resource (%d). Exiting now\n", i); + return FALSE; + } + + fout = _wfopen(FileName, L"wb"); + fwrite(pResLock, iSize, 1, fout); + fclose(fout); + return TRUE; +} + +static struct +{ + PCWSTR FileName; + INT ResourceId; +} DataFiles[] = +{ + {L"%SystemRoot%\\bin\\image.dll", IDR_DLL_NORMAL}, +}; + + +START_TEST(LoadImageGCC) +{ + UINT i; + WCHAR PathBuffer[MAX_PATH]; + static HBITMAP hBmp; + HANDLE handle; + HDC hdcMem; + BITMAP bitmap; + BITMAPINFO bmi; + HGLOBAL hMem; + LPVOID lpBits; + CHAR img[8] = { 0 }; + UINT size; + + /* Windows 2003 cannot run this test. Testman shows CRASH, so skip it. */ + if (!IsReactOS()) + return; + + /* Extract Data Files */ + for (i = 0; i < _countof(DataFiles); ++i) + { + ExpandEnvironmentStringsW(DataFiles[i].FileName, PathBuffer, _countof(PathBuffer)); + + if (!ResourceToFileW(DataFiles[i].ResourceId, PathBuffer)) + { + printf("ResourceToFile Failed. Exiting now\n"); + goto Cleanup; + } + } + + handle = LoadLibraryExW(PathBuffer, NULL, LOAD_LIBRARY_AS_DATAFILE); + hBmp = (HBITMAP)LoadImage(handle, MAKEINTRESOURCE(130), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR); + + hdcMem = CreateCompatibleDC(NULL); + SelectObject(hdcMem, hBmp); + GetObject(hBmp, sizeof(BITMAP), &bitmap); + + memset(&bmi, 0, sizeof(bmi)); + memset(&bmi, 0, sizeof(bmi)); + bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + bmi.bmiHeader.biWidth = bitmap.bmWidth; + bmi.bmiHeader.biHeight = bitmap.bmHeight; + bmi.bmiHeader.biPlanes = bitmap.bmPlanes; + bmi.bmiHeader.biBitCount = bitmap.bmBitsPixel; + bmi.bmiHeader.biCompression = BI_RGB; + bmi.bmiHeader.biSizeImage = 0; + + size = ((bitmap.bmWidth * bmi.bmiHeader.biBitCount + 31) / 32) * 4 * bitmap.bmHeight; + + hMem = GlobalAlloc(GMEM_MOVEABLE, size); + lpBits = GlobalLock(hMem); + GetDIBits(hdcMem, hBmp, 0, bitmap.bmHeight, lpBits, &bmi, DIB_RGB_COLORS); + + /* Get first 8 bytes of second row of bits from bitmap */ + memcpy(img, (VOID *)((INT_PTR)lpBits + 4 * bitmap.bmWidth), 8); + + ok(img[0] == 0, "Byte 0 Bad. Got 0x%02x, expected 0\n", img[0] & 0xff); + ok(img[1] == 0, "Byte 1 Bad. Got 0x%02x, expected 0\n", img[1] & 0xff); + ok(img[2] == 0, "Byte 2 Bad. Got 0x%02x, expected 0\n", img[2] & 0xff); + ok(img[3] == 0, "Byte 3 Bad. Got 0x%02x, expected 0\n", img[3] & 0xff); + + GlobalUnlock(hMem); + GlobalFree(hMem); + + DeleteDC(hdcMem); + +Cleanup: + for (i = 0; i < _countof(DataFiles); ++i) + { + ExpandEnvironmentStringsW(DataFiles[i].FileName, PathBuffer, _countof(PathBuffer)); + DeleteFileW(PathBuffer); + } +} diff --git a/modules/rostests/apitests/user32/image.dll b/modules/rostests/apitests/user32/image.dll new file mode 100644 index 0000000000000000000000000000000000000000..8dc8d9d2b3a0630573bf989f5e03092703e24d22 GIT binary patch literal 6656 zcmeI0c~n$K7RDb2_egXmGbU$dlGbtbWD>Wyj02jWafyiwvWti`t0?;>qDDX+c5z=K zC<-EABOseBE-bRT92Ybi6+LruqPPHJ<1*0S)Gc^z1Kp&_ocS;B^!KXjR^95V->dto zx))k)6W$R7L6->-gi|b~%aGrDzGbj#y^jm@gzSMAN1W1GaB+m`N*5oAr?-c*x71By zFLihK@Ris(O1%BtB`)rg*^5miZXOPfgO{%XrOZwINbR1gNR5sGu6 zajRa2?6HmW_VKo7Mm{zP%lwgv9oRHDRBJaMfBO}l4tCZqZc=B*aV*EYG+Z5gMJ_bvY}T~BJSs3S(811`TqS~F z%M#9I)P#vFE7(c|A%IP$!}dAZe!GZ(4qs9%gn~Nr&=EqIVS*a_K=xq2W_2Rd&VGX6 z$_z$K?D4SPCH!4O3+Z=*+x50Rd-=3~$ON6Y70mDLr78cmh4#6=J_ZiDzSGZZ>p^Y% z`szDs+uqdDJjlet45Td)VOl9-+twnn|J}QHX9oudqc>tc$>e{;VG{lqiDOWkt}=XA zca4GU!_5ojx<2~sscCmn+YiXcfBJEO_3=wy#LdRe7EUfJ@%Y&@JRvnS;Avwco-s8v zHKFnOb2K$K<2h3!D-&n2U*gu=i+spG-fki;-@MjM)IT4GI36`A`HExcn)dVh=h(jf z(;rMdvijAAn#zk{|DIJ=9rS0IXbYQv9wRp%k*DfR}f{ZhWP zEL!1y=O{Ma%jh+~;G4(cS{o0`;z$Mc)l)pH^1FTaF6TxJRXP6j@F8y8y2a}>@w>}> z%gV}7QBlEFSy>5Ed3ibN>gtpXRr$r*jOYAnu3d&GZTXR}$c(2Q@%mA?vD~{h0j9V2 z;ty5s?fllxcu8xpll=4_>XN$J1E#+WzHuDG3LId3Z3ldA9>qtICUSZgsEcP+ew8&f z2>5y`GGljfe#G!({620gXDn!4YT{Q_RmIz7#qH+nkk(&b!U1l(bmYpe&j3ivHdufIXJcqV?f4t6|#i%U!S ze2L-KRo2+%Ayt;ooIBSezvALzW!rz*nIg=|Qdv$+Oyp~kVp)~nKC90-zluvW5Tz|Y z@+E#0Tkox%*|ID*RN+{?2Os7*Vn~iHpTAzN6hpFXFgVQ$1Cz|r|KJkz`+iY3eq`f{ zU5o*VrWh=<;(mJhc6hJI0e?R03g@e_SY8;Z&-t{K)qmKmE8d;TG~WWpOYq48=&9 z6C~+Q7@lqiy)ALGNL?@9^sDc9RZwQdS)h%X-)B)k&&U%H|=C5 z-&eY>zg^~^aDFA#FG)aiGfxiiTsjNQ$hQ4^NSa1_uo`jPjOG{wX1Jx zN{U*3J50xLe&;I6AWB<)YqMC?XxCSy;8t$Un~skFkq|E-#EX* zlCuz{EkE*Yr`K_(^NX*6Y+Us6mOWRq5Oz5g4(GNbv#tWV{s!8gUs&7R`!(<=+mG#6 zGZA||4-;cnv{2ug&M)Hro5A=we=#2Mn_LmKasksq9Ny%Hm0wN(#phFYCVA1)qLH7I z8eeDT8yORW!?kyi-1r9R&28|kyawZkZ>B{p`YY#`f9^CyY0Hm%JMrr%(0)8L@GJRu zrSS@i&7Awye66W#tIkH}n!!O84wczpFaQX;&u&&z}> zHPRbib68BXccc8}OEha(e=?a2?rMBJneUFgBE&boM*W*M$lDZ1`MCj>^=+#o7L4Tl zh?%Oi`Taq@>gG>2F`ms+HonfRtL!zuyazQbUPE51i`TB-N&BxTsiQsC%$tIO16v>q zUBy)xw}tP&wsul%-MO8wy@;4-<=DmFzvB6&t8d^p)3B$k8i~)_(9GD;`>(u74)gl9 zwPD{%5cbWl6!Yymmrmu5c>W}EX$!5XPIWyLsO_gw%*R*%7ym!-^70yJw$uU#4j)2R zK^{_%r!rR4aJ@LIT_x>l06YIBB_-hz`#n<6_TYf^fy(jh-@ji*3~iQM^ZmD*FWZx? zeEhJw`UVo~n^D>*N6_6zrDl&YhOui+VE@4+I!^ADj@VBk?yWswP*(lF|G#2iq+@Pn z345b?eExI>>83?95U_47=SJ*Q`O!dGdoLyhQ=5ufS-zE>y??Sjbaud!M{mZPJZyC| pdemyP=n;ko0e!+2j0_L`_T$!2wg!76Vi&$}WSA1tZ +#include + +WCHAR szWindowClass[] = L"testclass"; + +static LRESULT CALLBACK +WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + static HBITMAP hBmp; + HANDLE handle; + CHAR buffer[32]; + + switch (message) + { + case WM_CREATE: + { + handle = LoadLibraryExW(L"image.dll", NULL, LOAD_LIBRARY_AS_DATAFILE); + sprintf(buffer, "%p", handle); + MessageBoxA(NULL, buffer, "handle", 0); + hBmp = (HBITMAP)LoadImage(handle, MAKEINTRESOURCE(130), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR); + sprintf(buffer, "%p", hBmp); + MessageBoxA(NULL, buffer, "Bmp", 0); + sprintf(buffer, "%ld", GetLastError()); + MessageBoxA(NULL, buffer, "LastError", 0); + break; + } + + case WM_PAINT: + { + PAINTSTRUCT ps; + HDC hdc, hdcMem; + BITMAP bitmap; + BITMAPINFO bmi; + hdc = BeginPaint(hWnd, &ps); + HGLOBAL hMem; + LPVOID lpBits; + + hdcMem = CreateCompatibleDC(hdc); + SelectObject(hdcMem, hBmp); + GetObject(hBmp, sizeof(BITMAP), &bitmap); + + memset(&bmi, 0, sizeof(bmi)); + bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + bmi.bmiHeader.biWidth = bitmap.bmWidth; + bmi.bmiHeader.biHeight = bitmap.bmHeight; + bmi.bmiHeader.biPlanes = bitmap.bmPlanes; + bmi.bmiHeader.biBitCount = bitmap.bmBitsPixel; + bmi.bmiHeader.biCompression = BI_RGB; + bmi.bmiHeader.biSizeImage = 0; + + hMem = GlobalAlloc(GMEM_MOVEABLE, ((bitmap.bmWidth * + bmi.bmiHeader.biBitCount + 31) / 32) * 4 * bitmap.bmHeight); + lpBits = GlobalLock(hMem); + GetDIBits(hdc, hBmp, 0, bitmap.bmHeight, lpBits, &bmi, DIB_RGB_COLORS); + + // increasing the multiplier makes the image larger + StretchDIBits(hdc, 0, 0, bitmap.bmWidth * 3, bitmap.bmHeight * 3, 0, 0, + bitmap.bmWidth, bitmap.bmHeight,lpBits, &bmi, DIB_RGB_COLORS, SRCCOPY); + GlobalUnlock(hMem); + GlobalFree(hMem); + + DeleteDC(hdcMem); + + EndPaint(hWnd, &ps); + break; + } + + case WM_DESTROY: + PostQuitMessage(0); + break; + default: + return DefWindowProc(hWnd, message, wParam, lParam); + } + return 0; +} + + +static ATOM +MyRegisterClass(HINSTANCE hInstance) +{ + WNDCLASSEX wcex; + + wcex.cbSize = sizeof(WNDCLASSEX); + + wcex.style = CS_HREDRAW | CS_VREDRAW; + wcex.lpfnWndProc = WndProc; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = 0; + wcex.hInstance = hInstance; + wcex.hIcon = NULL; + wcex.hCursor = LoadCursor(NULL, IDC_ARROW); + wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); + wcex.lpszMenuName = NULL; + wcex.lpszClassName = szWindowClass; + wcex.hIconSm = NULL; + + return RegisterClassEx(&wcex); +} + + +static BOOL +InitInstance(HINSTANCE hInstance, int nCmdShow) +{ + HWND hWnd; + + hWnd = CreateWindowEx(0, + szWindowClass, + L"Bmp test", + WS_OVERLAPPEDWINDOW, + CW_USEDEFAULT, + CW_USEDEFAULT, + 300, + 120, + NULL, + NULL, + hInstance, + NULL); + + if (!hWnd) + return FALSE; + + ShowWindow(hWnd, nCmdShow); + UpdateWindow(hWnd); + + return TRUE; +} + +int WINAPI +wWinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPTSTR lpCmdLine, + int nCmdShow) +{ + MSG msg; + + MyRegisterClass(hInstance); + + if (!InitInstance(hInstance, nCmdShow)) + return FALSE; + + while (GetMessage(&msg, NULL, 0, 0)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + + return (int)msg.wParam; +} diff --git a/modules/rostests/apitests/user32/makeimg/test.bmp b/modules/rostests/apitests/user32/makeimg/test.bmp new file mode 100644 index 0000000000000000000000000000000000000000..1ee7626cdf67802dd60461498cad4bdaa44e9909 GIT binary patch literal 5254 zcmcJT3s6+o8OO2FL}Np=O~+=YO&mK7lP0NJAGLrz6o3?eUAL_oj?h@gOg8Xi7) zi}*I8qO8a+iwhzUUcxRb&xoUdR3j3nlL-%byQmcQ-}4=~J1g#zrJdf{|DJo!J^!=! z{Pz3qIlD`(4!&i=kAv*po5`AK8q)-mnI^BW(u7_A)zo28b@+gZ$?%J+m@v{xg)!$k z-Hkq-w9~?UqQB)0V-3`IlE1l!vHfiw?ZehM*nxB)Cdw$q96nSejDP(2@oVAX;TVsY zCyo3U-RI$dk#G-s%dMaOa^fxv+1vZA)Dw4_vv19~gZloKJb{+!CTxtKa}hUZHy3zr z*^KtiPCO=cb)loX8=XvDJw52|?L|*tA9|U(S)Diw;}W;=9^@f^vfEtTYOH%nG(Nu% z;ePa#l0w727@wl;$zhWhw*baa5!$>!R{_>;OBe^L))-pjrN5*-4+b1ri@yPFNSA&7Vy z!;ieW^AOG{_g)YFM7>rOukm?s3Hu&qj+-MWlHsU`)zDaD<+Coo`%O)p8!^=7 z_+v{8?%un{uNmUk#Jnn%3KbO` zj^yh*(KhNG4Joj_e-gi`@)_nAy!a`_;0p>cZ<$CM-5zB5H2iKlrWd%wrtS!KHeSLz zv1`=yEYO$Fy8J3@Y7q2~g~&=e#`zJ$tI4N$TRCGvacPKORaF)5mwom)k3)*Typ%J% zt+uw7^P@P_<@b%#N1R{P?VAu}EI;xJ{CK_wSUg&M(dT(!!zIkC+=J=LEtsy@goy92 zApD;)gw;zBdMg!QSEq0Z+=MzWzY`<$_GN@ONMV}iifJXDm|qi$p!;d~IMwg@q(F<8 z@|pO#xV!QERg{(S`4YoJTb*!tyQ{W-y|i>pehP&`+xMWGEuuUfwRN#r%wv&qS(o1_ z(TAL0MQsfP8Ox8n#E)|8&EO^d>vAJC9@QuCc8&+$$Z_HGH_dg$8`;j7njylJRC~O3 zZZ%&0X4OmlsEsS>D@+#KVyaBUeWv+tc(ceIzbo;^raMVkUl^+~4O#j^KI`%;EH37A z&ORKdoqKlTE(EXmEAsO5$K+Q~P+-toR8*vW9_sQt;rJ)cPxW0T1R2YZysre9pEZki zQ14Qmg>7LZX30D;Q|^fwayOV}I57@u@w&tjQ^a;!c4P8m9A8Ve!IaAmn0jR$Os{Uh zjBh>hZh<%6E7%UZ@^}PRor77ly_!CozCT@l**Q7G3>dS_IA6$Pd~oeZ5a%b)%Hla~ zD1S3EGYxt(u4eIdWpw-%zramGxs3qFu+#+kd{YM+Hkjrp*U`(vKWhhLj5^TOiXAgs6^ z0qe48SgE40Lb)G*zaEBd)n^c0E5)1y=YDy-BtucN(Ei9|2IBerIoUulI3f{f)yULk*fz321(9mOX#`)^)`Rc;to5HR2t8sLjH9z-WG8YoYkM^`r)M~x)Ct)#W&?`wpTSq4vI(ty{OoM<^N%*uGlMh+{ zk@G85mOzlP{Kz{@Z{(f!Fa8#?KgX}{KXE4;QMaUUFHJ;Na|I>_S{T27VSRIdsKIvC zX(ZmsLQ;Jm<|b_Dr?Cy~Uxf8Hlkwa1@oXgT^G4j}l}uK+ux}eSe=-M@pB-#Z@}$4t zAU{t%-c8IKn~;DD4G)mkJpg&%5PU1^VAC?NC~nmsIKTYTVhA#pA9-KkH&UVXcv{G3 z>aWX^HI$nNOkJp!ZkK`30x%)ZV28N&>(m?W47aZG$ykb_) z;{1r2u8jHpL0*0Hr#2y^k>rgE6CMjBX%ucfPymz zAdB3}Re1IQUw>WPTyf}VB9Fb8gm~?}3%`Gb{mW=?$QO%nLRAfM?-2SJJ9_?=_o!jt zHWVE7|rT~%OJM@OHEBhEBigt#@67VJt5lrIeq%Hj2JqvcjD{sOJ24n zi*^RUtNJd)ZG9-~RwJybwal&^W{lln3i}U6>@j~_y0~#3aUUE5gZ9$@`~NHUK@;pn zj@W3uoX?;3ATMdvVg&6D=G=&#E()W*Rjrs22K*vw<*ew)FW()EWHC4%5xZ!sSyBH1^5vkF literal 0 HcmV?d00001 diff --git a/modules/rostests/apitests/user32/resource.h b/modules/rostests/apitests/user32/resource.h index 33972fde705..87412d3cdb5 100644 --- a/modules/rostests/apitests/user32/resource.h +++ b/modules/rostests/apitests/user32/resource.h @@ -4,3 +4,4 @@ #define IDR_ICONS_PNG 2000 #define IDR_ICONS_NORMAL 2001 #define IDR_EXE_NORMAL 2002 +#define IDR_DLL_NORMAL 2003 diff --git a/modules/rostests/apitests/user32/testlist.c b/modules/rostests/apitests/user32/testlist.c index 101ec0a3892..3e90ebfcfbd 100644 --- a/modules/rostests/apitests/user32/testlist.c +++ b/modules/rostests/apitests/user32/testlist.c @@ -32,6 +32,7 @@ extern void func_InitializeLpkHooks(void); extern void func_KbdLayout(void); extern void func_keybd_event(void); extern void func_LoadImage(void); +extern void func_LoadImageGCC(void); extern void func_LookupIconIdFromDirectoryEx(void); extern void func_MessageStateAnalyzer(void); extern void func_NextDlgItem(void); @@ -91,6 +92,7 @@ const struct test winetest_testlist[] = { "KbdLayout", func_KbdLayout }, { "keybd_event", func_keybd_event }, { "LoadImage", func_LoadImage }, + { "LoadImageGCC", func_LoadImageGCC }, { "LookupIconIdFromDirectoryEx", func_LookupIconIdFromDirectoryEx }, { "MessageStateAnalyzer", func_MessageStateAnalyzer }, { "NextDlgItem", func_NextDlgItem }, diff --git a/modules/rostests/apitests/user32/user32_apitest.rc b/modules/rostests/apitests/user32/user32_apitest.rc index 155390fc217..6279d19db16 100644 --- a/modules/rostests/apitests/user32/user32_apitest.rc +++ b/modules/rostests/apitests/user32/user32_apitest.rc @@ -11,6 +11,7 @@ TESTCURSOR CURSOR "test.cur" IDR_ICONS_PNG RCDATA "ROS.ico" IDR_ICONS_NORMAL RCDATA "sysicon.ico" IDR_EXE_NORMAL RCDATA "cpimg2e.exe" +IDR_DLL_NORMAL RCDATA "image.dll" TESTDIALOG DIALOG 0,0, 200,200 CLASS "TestDialogClass" From ff12fc9fb9a44104afd2e538a50850042a8fdcea Mon Sep 17 00:00:00 2001 From: Ratin Gao Date: Fri, 26 Apr 2024 13:58:54 +0800 Subject: [PATCH 026/182] [NTDLL_APITEST] Use `RtlConvertUlongToLuid` --- modules/rostests/apitests/ntdll/NtAdjustPrivilegesToken.c | 5 +---- modules/rostests/apitests/ntdll/NtFilterToken.c | 4 +--- modules/rostests/apitests/ntdll/precomp.h | 8 -------- 3 files changed, 2 insertions(+), 15 deletions(-) diff --git a/modules/rostests/apitests/ntdll/NtAdjustPrivilegesToken.c b/modules/rostests/apitests/ntdll/NtAdjustPrivilegesToken.c index 363609ad2f2..afaea79ad6f 100644 --- a/modules/rostests/apitests/ntdll/NtAdjustPrivilegesToken.c +++ b/modules/rostests/apitests/ntdll/NtAdjustPrivilegesToken.c @@ -15,13 +15,10 @@ IsPrivilegeEnabled( { PRIVILEGE_SET PrivSet; BOOL Result, Success; - LUID Priv; - - ConvertPrivLongToLuid(Privilege, &Priv); PrivSet.PrivilegeCount = 1; PrivSet.Control = PRIVILEGE_SET_ALL_NECESSARY; - PrivSet.Privilege[0].Luid = Priv; + PrivSet.Privilege[0].Luid = RtlConvertUlongToLuid(Privilege); PrivSet.Privilege[0].Attributes = 0; Success = PrivilegeCheck(TokenHandle, &PrivSet, &Result); diff --git a/modules/rostests/apitests/ntdll/NtFilterToken.c b/modules/rostests/apitests/ntdll/NtFilterToken.c index 60453c9bf87..3dbedc6c1ed 100644 --- a/modules/rostests/apitests/ntdll/NtFilterToken.c +++ b/modules/rostests/apitests/ntdll/NtFilterToken.c @@ -31,7 +31,6 @@ START_TEST(NtFilterToken) NTSTATUS Status; HANDLE FilteredToken, Token; TOKEN_PRIVILEGES Priv; - LUID PrivLuid; ULONG Size; PTOKEN_STATISTICS TokenStats; @@ -107,8 +106,7 @@ START_TEST(NtFilterToken) /* Fill in a privilege to delete */ Priv.PrivilegeCount = 1; - ConvertPrivLongToLuid(SE_BACKUP_PRIVILEGE, &PrivLuid); - Priv.Privileges[0].Luid = PrivLuid; + Priv.Privileges[0].Luid = RtlConvertUlongToLuid(SE_BACKUP_PRIVILEGE); Priv.Privileges[0].Attributes = 0; /* Delete the privileges */ diff --git a/modules/rostests/apitests/ntdll/precomp.h b/modules/rostests/apitests/ntdll/precomp.h index 6b8ea6e1b0a..4871076a873 100644 --- a/modules/rostests/apitests/ntdll/precomp.h +++ b/modules/rostests/apitests/ntdll/precomp.h @@ -41,12 +41,4 @@ SetupLocale( _In_ ULONG OemCode, _In_ ULONG Unicode); -#define ConvertPrivLongToLuid(PrivilegeVal, ConvertedPrivLuid) \ -do { \ - LUID Luid; \ - Luid.LowPart = PrivilegeVal; \ - Luid.HighPart = 0; \ - *ConvertedPrivLuid = Luid; \ -} while (0) - #endif /* _NTDLL_APITEST_PRECOMP_H_ */ From 116c0cd9a57e579ed620725463580cdac1fc25c6 Mon Sep 17 00:00:00 2001 From: Doug Lyons Date: Sat, 27 Apr 2024 14:38:06 -0500 Subject: [PATCH 027/182] [USER32] Fix resource display of MSVC BI_BITFIELD 32-bit bitmaps. (#5942) This specifically fixes Wordpad's Open and SaveAs dialog toolbars. * Fix 16 bpp BI_BITFIELDS like 32 bpp was done. * Add BI_BITFIELDS byte count into bitmap_info_size return value. * Account for GCC's windres.exe incorrect omission for BI_BITFIELDS DWORD's when processing 32-bpp bitmaps. * Account for GCC's windres.exe failing with bitmaps with BI_BITFIELDS and bits per plane is 16 * Fix WARN message to show error on either 16-bpp or 32-bpp * Correct comment regarding GCC compiled bitmaps with compression of BI_BITFIELD's to add 16 bits per plane CORE-17005 --- win32ss/user/user32/windows/cursoricon.c | 33 +++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/win32ss/user/user32/windows/cursoricon.c b/win32ss/user/user32/windows/cursoricon.c index eb160a88c13..531c29abe57 100644 --- a/win32ss/user/user32/windows/cursoricon.c +++ b/win32ss/user/user32/windows/cursoricon.c @@ -152,6 +152,8 @@ static BOOL is_dib_monochrome( const BITMAPINFO* info ) } } +/* Return the size of the bitmap info structure including color table and + * the bytes required for 3 DWORDS if this is a BI_BITFIELDS bmp. */ static int bitmap_info_size( const BITMAPINFO * info, WORD coloruse ) { unsigned int colors, size, masks = 0; @@ -170,8 +172,21 @@ static int bitmap_info_size( const BITMAPINFO * info, WORD coloruse ) colors = 256; if (!colors && (info->bmiHeader.biBitCount <= 8)) colors = 1 << info->bmiHeader.biBitCount; + /* Account for BI_BITFIELDS in BITMAPINFOHEADER(v1-v3) bmp's. The + * 'max' selection using biSize below will exclude v4 & v5's. */ if (info->bmiHeader.biCompression == BI_BITFIELDS) masks = 3; size = max( info->bmiHeader.biSize, sizeof(BITMAPINFOHEADER) + masks * sizeof(DWORD) ); + /* Test for BI_BITFIELDS format and either 16 or 32 bpp. + * If so, account for the 3 DWORD masks (RGB Order). + * BITMAPCOREHEADER tested above has no 16 or 32 bpp types. + * See table "All of the possible pixel formats in a DIB" + * at https://en.wikipedia.org/wiki/BMP_file_format. */ + if (info->bmiHeader.biSize >= sizeof(BITMAPV4HEADER) && + info->bmiHeader.biCompression == BI_BITFIELDS && + (info->bmiHeader.biBitCount == 16 || info->bmiHeader.biBitCount == 32)) + { + size += 3 * sizeof(DWORD); // BI_BITFIELDS + } return size + colors * ((coloruse == DIB_RGB_COLORS) ? sizeof(RGBQUAD) : sizeof(WORD)); } } @@ -1099,7 +1114,7 @@ BITMAP_LoadImageW( HBITMAP hbmpOld, hbmpRet = NULL; LONG width, height; WORD bpp; - DWORD compr; + DWORD compr, ResSize = 0; /* Map the bitmap info */ if(fuLoad & LR_LOADFROMFILE) @@ -1137,6 +1152,7 @@ BITMAP_LoadImageW( pbmi = LockResource(hgRsrc); if(!pbmi) return NULL; + ResSize = SizeofResource(hinst, hrsrc); } /* Fix up values */ @@ -1162,6 +1178,21 @@ BITMAP_LoadImageW( goto end; CopyMemory(pbmiCopy, pbmi, iBMISize); + TRACE("Size Image %d, Size Header %d, ResSize %d\n", + pbmiCopy->bmiHeader.biSizeImage, pbmiCopy->bmiHeader.biSize, ResSize); + + /* HACK: If this is a binutils' windres.exe compiled 16 or 32 bpp bitmap + * using BI_BITFIELDS, then a bug causes it to fail to include + * the bytes for the bitfields. So, we have to substract out the + * size of the bitfields previously included from bitmap_info_size. */ + if (compr == BI_BITFIELDS && (bpp == 16 || bpp == 32) && + pbmiCopy->bmiHeader.biSizeImage + pbmiCopy->bmiHeader.biSize == ResSize) + { + /* GCC pointer to the image data has 12 less bytes than MSVC */ + pvBits = (char*)pvBits - 12; + WARN("Found GCC Resource Compiled 16-bpp or 32-bpp error\n"); + } + /* Fix it up, if needed */ if(fuLoad & (LR_LOADTRANSPARENT | LR_LOADMAP3DCOLORS)) { From 24a56f89ab5cd529a724f1b5de9ce239e7170b6a Mon Sep 17 00:00:00 2001 From: Mark Jansen Date: Thu, 4 Jan 2024 23:02:22 +0100 Subject: [PATCH 028/182] Rework apisets to use a table This removes all fake apiset forwarders, and handles apisets inside ntdll. This is not 100% compatible with how windows does it, but it should be good enough for us. --- CODEOWNERS | 2 +- boot/bootdata/packages/reactos.dff.in | 4 - dll/CMakeLists.txt | 1 - dll/apisets/CMakeLists.txt | 256 ---- dll/apisets/CMakeLists.txt.in | 41 - ...64144ccf1df_1.0.0.0_none_deadbeef.manifest | 220 --- ...44ccf1df_1.0.0.0_none_deadbeef.manifest.in | 6 - .../api-ms-win-appmodel-identity-l1-1-0.spec | 20 - .../api-ms-win-appmodel-runtime-l1-1-1.spec | 30 - .../api-ms-win-appmodel-runtime-l1-1-2.spec | 20 - .../api-ms-win-core-apiquery-l1-1-0.spec | 4 - .../api-ms-win-core-appcompat-l1-1-1.spec | 13 - .../api-ms-win-core-appinit-l1-1-0.spec | 4 - dll/apisets/api-ms-win-core-atoms-l1-1-0.spec | 20 - dll/apisets/api-ms-win-core-bem-l1-1-0.spec | 8 - dll/apisets/api-ms-win-core-com-l1-1-0.spec | 83 -- dll/apisets/api-ms-win-core-com-l1-1-1.spec | 85 -- .../api-ms-win-core-com-private-l1-1-0.spec | 94 -- dll/apisets/api-ms-win-core-comm-l1-1-0.spec | 21 - .../api-ms-win-core-console-l1-1-0.spec | 17 - .../api-ms-win-core-console-l2-1-0.spec | 41 - dll/apisets/api-ms-win-core-crt-l1-1-0.spec | 106 -- dll/apisets/api-ms-win-core-crt-l2-1-0.spec | 21 - .../api-ms-win-core-datetime-l1-1-0.spec | 7 - .../api-ms-win-core-datetime-l1-1-1.spec | 9 - dll/apisets/api-ms-win-core-debug-l1-1-0.spec | 7 - dll/apisets/api-ms-win-core-debug-l1-1-1.spec | 12 - .../api-ms-win-core-delayload-l1-1-0.spec | 4 - .../api-ms-win-core-delayload-l1-1-1.spec | 6 - .../api-ms-win-core-errorhandling-l1-1-0.spec | 10 - .../api-ms-win-core-errorhandling-l1-1-1.spec | 15 - .../api-ms-win-core-errorhandling-l1-1-2.spec | 16 - .../api-ms-win-core-errorhandling-l1-1-3.spec | 19 - .../api-ms-win-core-fibers-l1-1-0.spec | 7 - .../api-ms-win-core-fibers-l1-1-1.spec | 8 - dll/apisets/api-ms-win-core-file-l1-1-0.spec | 79 -- dll/apisets/api-ms-win-core-file-l1-2-0.spec | 82 -- dll/apisets/api-ms-win-core-file-l1-2-1.spec | 85 -- dll/apisets/api-ms-win-core-file-l1-2-2.spec | 13 - dll/apisets/api-ms-win-core-file-l2-1-0.spec | 14 - dll/apisets/api-ms-win-core-file-l2-1-1.spec | 15 - dll/apisets/api-ms-win-core-file-l2-1-2.spec | 17 - .../api-ms-win-core-handle-l1-1-0.spec | 7 - dll/apisets/api-ms-win-core-heap-l1-1-0.spec | 19 - dll/apisets/api-ms-win-core-heap-l1-2-0.spec | 18 - dll/apisets/api-ms-win-core-heap-l2-1-0.spec | 10 - .../api-ms-win-core-heap-obsolete-l1-1-0.spec | 18 - .../api-ms-win-core-interlocked-l1-1-0.spec | 15 - .../api-ms-win-core-interlocked-l1-2-0.spec | 15 - dll/apisets/api-ms-win-core-io-l1-1-0.spec | 10 - dll/apisets/api-ms-win-core-io-l1-1-1.spec | 13 - dll/apisets/api-ms-win-core-job-l1-1-0.spec | 4 - dll/apisets/api-ms-win-core-job-l2-1-0.spec | 9 - ...pi-ms-win-core-kernel32-legacy-l1-1-0.spec | 57 - ...pi-ms-win-core-kernel32-legacy-l1-1-1.spec | 72 - ...i-ms-win-core-kernel32-private-l1-1-1.spec | 4 - .../api-ms-win-core-largeinteger-l1-1-0.spec | 4 - .../api-ms-win-core-libraryloader-l1-1-0.spec | 32 - .../api-ms-win-core-libraryloader-l1-1-1.spec | 33 - .../api-ms-win-core-libraryloader-l1-2-0.spec | 32 - .../api-ms-win-core-libraryloader-l1-2-1.spec | 6 - .../api-ms-win-core-libraryloader-l1-2-2.spec | 7 - .../api-ms-win-core-localization-l1-1-0.spec | 50 - .../api-ms-win-core-localization-l1-2-0.spec | 62 - .../api-ms-win-core-localization-l1-2-1.spec | 63 - .../api-ms-win-core-localization-l2-1-0.spec | 15 - ...win-core-localization-obsolete-l1-1-0.spec | 14 - ...win-core-localization-obsolete-l1-2-0.spec | 13 - ...win-core-localization-obsolete-l1-3-0.spec | 12 - ...-win-core-localization-private-l1-1-0.spec | 14 - .../api-ms-win-core-localregistry-l1-1-0.spec | 43 - .../api-ms-win-core-memory-l1-1-0.spec | 19 - .../api-ms-win-core-memory-l1-1-1.spec | 35 - .../api-ms-win-core-memory-l1-1-2.spec | 42 - dll/apisets/api-ms-win-core-misc-l1-1-0.spec | 37 - .../api-ms-win-core-namedpipe-l1-1-0.spec | 14 - .../api-ms-win-core-namedpipe-l1-2-0.spec | 13 - .../api-ms-win-core-namespace-l1-1-0.spec | 9 - .../api-ms-win-core-normalization-l1-1-0.spec | 8 - dll/apisets/api-ms-win-core-path-l1-1-0.spec | 25 - ...api-ms-win-core-privateprofile-l1-1-1.spec | 5 - ...ms-win-core-processenvironment-l1-1-0.spec | 25 - ...ms-win-core-processenvironment-l1-2-0.spec | 27 - ...api-ms-win-core-processthreads-l1-1-0.spec | 52 - ...api-ms-win-core-processthreads-l1-1-1.spec | 66 - ...api-ms-win-core-processthreads-l1-1-2.spec | 73 - ...api-ms-win-core-processthreads-l1-1-3.spec | 13 - ...-core-processtopology-obsolete-l1-1-0.spec | 8 - .../api-ms-win-core-profile-l1-1-0.spec | 5 - .../api-ms-win-core-psapi-ansi-l1-1-0.spec | 9 - dll/apisets/api-ms-win-core-psapi-l1-1-0.spec | 19 - ...api-ms-win-core-psapi-obsolete-l1-1-0.spec | 10 - .../api-ms-win-core-quirks-l1-1-0.spec | 11 - .../api-ms-win-core-realtime-l1-1-0.spec | 8 - .../api-ms-win-core-registry-l1-1-0.spec | 46 - .../api-ms-win-core-registry-l2-1-0.spec | 36 - ...-win-core-registryuserspecific-l1-1-0.spec | 28 - .../api-ms-win-core-rtlsupport-l1-1-0.spec | 18 - .../api-ms-win-core-rtlsupport-l1-2-0.spec | 9 - ...api-ms-win-core-shlwapi-legacy-l1-1-0.spec | 91 -- ...i-ms-win-core-shlwapi-obsolete-l1-1-0.spec | 64 - ...i-ms-win-core-shlwapi-obsolete-l1-2-0.spec | 61 - .../api-ms-win-core-shutdown-l1-1-0.spec | 5 - .../api-ms-win-core-sidebyside-l1-1-0.spec | 14 - .../api-ms-win-core-string-l1-1-0.spec | 11 - .../api-ms-win-core-string-l2-1-0.spec | 13 - ...pi-ms-win-core-string-obsolete-l1-1-0.spec | 13 - .../api-ms-win-core-stringansi-l1-1-0.spec | 15 - .../api-ms-win-core-stringloader-l1-1-1.spec | 5 - .../api-ms-win-core-synch-ansi-l1-1-0.spec | 10 - dll/apisets/api-ms-win-core-synch-l1-1-0.spec | 45 - dll/apisets/api-ms-win-core-synch-l1-2-0.spec | 61 - dll/apisets/api-ms-win-core-synch-l1-2-1.spec | 64 - .../api-ms-win-core-sysinfo-l1-1-0.spec | 31 - .../api-ms-win-core-sysinfo-l1-2-0.spec | 34 - .../api-ms-win-core-sysinfo-l1-2-1.spec | 39 - .../api-ms-win-core-threadpool-l1-1-0.spec | 45 - .../api-ms-win-core-threadpool-l1-2-0.spec | 40 - ...-ms-win-core-threadpool-legacy-l1-1-0.spec | 10 - ...ms-win-core-threadpool-private-l1-1-0.spec | 4 - .../api-ms-win-core-timezone-l1-1-0.spec | 16 - .../api-ms-win-core-toolhelp-l1-1-0.spec | 10 - dll/apisets/api-ms-win-core-url-l1-1-0.spec | 41 - dll/apisets/api-ms-win-core-util-l1-1-0.spec | 8 - .../api-ms-win-core-version-l1-1-0.spec | 7 - .../api-ms-win-core-version-l1-1-1.spec | 9 - ...pi-ms-win-core-version-private-l1-1-0.spec | 4 - .../api-ms-win-core-versionansi-l1-1-0.spec | 7 - ...win-core-windowserrorreporting-l1-1-0.spec | 13 - .../api-ms-win-core-winrt-error-l1-1-0.spec | 14 - .../api-ms-win-core-winrt-error-l1-1-1.spec | 22 - ...ms-win-core-winrt-errorprivate-l1-1-1.spec | 5 - dll/apisets/api-ms-win-core-winrt-l1-1-0.spec | 12 - ...ms-win-core-winrt-registration-l1-1-0.spec | 5 - ...-core-winrt-roparameterizediid-l1-1-0.spec | 6 - .../api-ms-win-core-winrt-string-l1-1-0.spec | 30 - .../api-ms-win-core-winrt-string-l1-1-1.spec | 29 - dll/apisets/api-ms-win-core-wow64-l1-1-0.spec | 6 - dll/apisets/api-ms-win-core-wow64-l1-1-1.spec | 8 - .../api-ms-win-core-xstate-l1-1-0.spec | 11 - .../api-ms-win-core-xstate-l2-1-0.spec | 9 - dll/apisets/api-ms-win-crt-conio-l1-1-0.spec | 33 - .../api-ms-win-crt-convert-l1-1-0.spec | 125 -- .../api-ms-win-crt-environment-l1-1-0.spec | 21 - .../api-ms-win-crt-filesystem-l1-1-0.spec | 68 - dll/apisets/api-ms-win-crt-heap-l1-1-0.spec | 30 - dll/apisets/api-ms-win-crt-locale-l1-1-0.spec | 23 - dll/apisets/api-ms-win-crt-math-l1-1-0.spec | 344 ----- .../api-ms-win-crt-multibyte-l1-1-0.spec | 203 --- .../api-ms-win-crt-private-l1-1-0.spec | 1193 ---------------- .../api-ms-win-crt-process-l1-1-0.spec | 41 - .../api-ms-win-crt-runtime-l1-1-0.spec | 112 -- dll/apisets/api-ms-win-crt-stdio-l1-1-0.spec | 162 --- dll/apisets/api-ms-win-crt-string-l1-1-0.spec | 181 --- dll/apisets/api-ms-win-crt-time-l1-1-0.spec | 75 - .../api-ms-win-crt-utility-l1-1-0.spec | 27 - .../api-ms-win-devices-config-l1-1-0.spec | 41 - .../api-ms-win-devices-config-l1-1-1.spec | 42 - .../api-ms-win-devices-query-l1-1-1.spec | 18 - .../api-ms-win-downlevel-advapi32-l1-1-0.spec | 148 -- .../api-ms-win-downlevel-advapi32-l2-1-0.spec | 17 - .../api-ms-win-downlevel-normaliz-l1-1-0.spec | 5 - .../api-ms-win-downlevel-ole32-l1-1-0.spec | 51 - .../api-ms-win-downlevel-shell32-l1-1-0.spec | 6 - .../api-ms-win-downlevel-shlwapi-l1-1-0.spec | 158 --- .../api-ms-win-downlevel-shlwapi-l2-1-0.spec | 59 - .../api-ms-win-downlevel-user32-l1-1-0.spec | 25 - .../api-ms-win-downlevel-version-l1-1-0.spec | 9 - dll/apisets/api-ms-win-dx-d3dkmt-l1-1-0.spec | 100 -- ...s-win-eventing-classicprovider-l1-1-0.spec | 11 - .../api-ms-win-eventing-consumer-l1-1-0.spec | 6 - ...api-ms-win-eventing-controller-l1-1-0.spec | 14 - .../api-ms-win-eventing-legacy-l1-1-0.spec | 17 - .../api-ms-win-eventing-provider-l1-1-0.spec | 13 - .../api-ms-win-eventlog-legacy-l1-1-0.spec | 9 - .../api-ms-win-gdi-dpiinfo-l1-1-0.spec | 4 - .../api-ms-win-mm-joystick-l1-1-0.spec | 13 - dll/apisets/api-ms-win-mm-misc-l1-1-1.spec | 33 - dll/apisets/api-ms-win-mm-mme-l1-1-0.spec | 105 -- dll/apisets/api-ms-win-mm-time-l1-1-0.spec | 8 - .../api-ms-win-ntuser-dc-access-l1-1-0.spec | 5 - .../api-ms-win-ntuser-rectangle-l1-1-0.spec | 14 - .../api-ms-win-ntuser-sysparams-l1-1-0.spec | 15 - .../api-ms-win-perf-legacy-l1-1-0.spec | 12 - dll/apisets/api-ms-win-power-base-l1-1-0.spec | 8 - .../api-ms-win-power-setting-l1-1-0.spec | 11 - .../api-ms-win-rtcore-ntuser-draw-l1-1-0.spec | 4 - ...i-ms-win-rtcore-ntuser-private-l1-1-0.spec | 12 - ...i-ms-win-rtcore-ntuser-private-l1-1-4.spec | 4 - ...pi-ms-win-rtcore-ntuser-window-l1-1-0.spec | 84 -- ...-ms-win-rtcore-ntuser-winevent-l1-1-0.spec | 7 - ...ms-win-rtcore-ntuser-wmpointer-l1-1-0.spec | 28 - ...ms-win-rtcore-ntuser-wmpointer-l1-1-3.spec | 4 - ...security-activedirectoryclient-l1-1-0.spec | 11 - .../api-ms-win-security-audit-l1-1-1.spec | 18 - .../api-ms-win-security-base-l1-1-0.spec | 100 -- .../api-ms-win-security-base-l1-2-0.spec | 105 -- ...i-ms-win-security-base-private-l1-1-1.spec | 6 - ...pi-ms-win-security-credentials-l1-1-0.spec | 32 - .../api-ms-win-security-cryptoapi-l1-1-0.spec | 42 - ...pi-ms-win-security-grouppolicy-l1-1-0.spec | 26 - .../api-ms-win-security-lsalookup-l1-1-0.spec | 14 - .../api-ms-win-security-lsalookup-l1-1-1.spec | 19 - .../api-ms-win-security-lsalookup-l2-1-0.spec | 9 - .../api-ms-win-security-lsalookup-l2-1-1.spec | 10 - .../api-ms-win-security-lsapolicy-l1-1-0.spec | 25 - .../api-ms-win-security-provider-l1-1-0.spec | 9 - .../api-ms-win-security-sddl-l1-1-0.spec | 7 - ...s-win-security-systemfunctions-l1-1-0.spec | 6 - .../api-ms-win-service-core-l1-1-0.spec | 6 - .../api-ms-win-service-core-l1-1-1.spec | 9 - .../api-ms-win-service-management-l1-1-0.spec | 10 - .../api-ms-win-service-management-l2-1-0.spec | 11 - .../api-ms-win-service-private-l1-1-1.spec | 19 - .../api-ms-win-service-winsvc-l1-1-0.spec | 29 - .../api-ms-win-service-winsvc-l1-2-0.spec | 19 - .../api-ms-win-shcore-obsolete-l1-1-0.spec | 6 - .../api-ms-win-shcore-scaling-l1-1-1.spec | 12 - .../api-ms-win-shcore-stream-l1-1-0.spec | 18 - .../api-ms-win-shcore-thread-l1-1-0.spec | 11 - .../api-ms-win-shell-shellcom-l1-1-0.spec | 4 - .../api-ms-win-shell-shellfolders-l1-1-0.spec | 17 - dll/apisets/update.py | 505 ------- ...64144ccf1df_1.0.0.0_none_deadbeef.manifest | 220 --- ...44ccf1df_1.0.0.0_none_deadbeef.manifest.in | 6 - dll/ntdll/CMakeLists.txt | 2 +- dll/ntdll/include/ntdllp.h | 11 + dll/ntdll/ldr/ldrapi.c | 68 +- dll/ntdll/ldr/ldrpe.c | 41 +- dll/ntdll/ldr/ldrutils.c | 64 +- dll/ntdll/rtl/libsupp.c | 169 ++- media/CMakeLists.txt | 1 - media/forwardcompatible.manifest | 14 - modules/rostests/apitests/CMakeLists.txt | 1 + .../rostests/apitests/apisets/CMakeLists.txt | 6 + modules/rostests/apitests/apisets/apisets.c | 95 ++ modules/rostests/apitests/apisets/testlist.c | 11 + sdk/cmake/CMakeMacros.cmake | 8 - sdk/lib/CMakeLists.txt | 1 + sdk/lib/apisets/CMakeLists.txt | 13 + sdk/lib/apisets/apisets.c | 92 ++ sdk/lib/apisets/apisets.h | 31 + sdk/lib/apisets/apisets.table.c | 1263 +++++++++++++++++ sdk/lib/apisets/apisetsp.h | 25 + sdk/lib/apisets/update.py | 150 ++ sdk/lib/rtl/actctx.c | 10 +- 246 files changed, 1912 insertions(+), 9093 deletions(-) delete mode 100644 dll/apisets/CMakeLists.txt delete mode 100644 dll/apisets/CMakeLists.txt.in delete mode 100644 dll/apisets/amd64_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef.manifest delete mode 100644 dll/apisets/amd64_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef.manifest.in delete mode 100644 dll/apisets/api-ms-win-appmodel-identity-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-appmodel-runtime-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-appmodel-runtime-l1-1-2.spec delete mode 100644 dll/apisets/api-ms-win-core-apiquery-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-appcompat-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-core-appinit-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-atoms-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-bem-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-com-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-com-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-core-com-private-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-comm-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-console-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-console-l2-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-crt-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-crt-l2-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-datetime-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-datetime-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-core-debug-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-debug-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-core-delayload-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-delayload-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-core-errorhandling-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-errorhandling-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-core-errorhandling-l1-1-2.spec delete mode 100644 dll/apisets/api-ms-win-core-errorhandling-l1-1-3.spec delete mode 100644 dll/apisets/api-ms-win-core-fibers-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-fibers-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-core-file-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-file-l1-2-0.spec delete mode 100644 dll/apisets/api-ms-win-core-file-l1-2-1.spec delete mode 100644 dll/apisets/api-ms-win-core-file-l1-2-2.spec delete mode 100644 dll/apisets/api-ms-win-core-file-l2-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-file-l2-1-1.spec delete mode 100644 dll/apisets/api-ms-win-core-file-l2-1-2.spec delete mode 100644 dll/apisets/api-ms-win-core-handle-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-heap-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-heap-l1-2-0.spec delete mode 100644 dll/apisets/api-ms-win-core-heap-l2-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-heap-obsolete-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-interlocked-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-interlocked-l1-2-0.spec delete mode 100644 dll/apisets/api-ms-win-core-io-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-io-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-core-job-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-job-l2-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-kernel32-legacy-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-kernel32-legacy-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-core-kernel32-private-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-core-largeinteger-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-libraryloader-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-libraryloader-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-core-libraryloader-l1-2-0.spec delete mode 100644 dll/apisets/api-ms-win-core-libraryloader-l1-2-1.spec delete mode 100644 dll/apisets/api-ms-win-core-libraryloader-l1-2-2.spec delete mode 100644 dll/apisets/api-ms-win-core-localization-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-localization-l1-2-0.spec delete mode 100644 dll/apisets/api-ms-win-core-localization-l1-2-1.spec delete mode 100644 dll/apisets/api-ms-win-core-localization-l2-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-localization-obsolete-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-localization-obsolete-l1-2-0.spec delete mode 100644 dll/apisets/api-ms-win-core-localization-obsolete-l1-3-0.spec delete mode 100644 dll/apisets/api-ms-win-core-localization-private-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-localregistry-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-memory-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-memory-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-core-memory-l1-1-2.spec delete mode 100644 dll/apisets/api-ms-win-core-misc-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-namedpipe-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-namedpipe-l1-2-0.spec delete mode 100644 dll/apisets/api-ms-win-core-namespace-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-normalization-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-path-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-privateprofile-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-core-processenvironment-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-processenvironment-l1-2-0.spec delete mode 100644 dll/apisets/api-ms-win-core-processthreads-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-processthreads-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-core-processthreads-l1-1-2.spec delete mode 100644 dll/apisets/api-ms-win-core-processthreads-l1-1-3.spec delete mode 100644 dll/apisets/api-ms-win-core-processtopology-obsolete-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-profile-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-psapi-ansi-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-psapi-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-psapi-obsolete-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-quirks-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-realtime-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-registry-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-registry-l2-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-registryuserspecific-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-rtlsupport-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-rtlsupport-l1-2-0.spec delete mode 100644 dll/apisets/api-ms-win-core-shlwapi-legacy-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-shlwapi-obsolete-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-shlwapi-obsolete-l1-2-0.spec delete mode 100644 dll/apisets/api-ms-win-core-shutdown-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-sidebyside-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-string-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-string-l2-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-string-obsolete-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-stringansi-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-stringloader-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-core-synch-ansi-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-synch-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-synch-l1-2-0.spec delete mode 100644 dll/apisets/api-ms-win-core-synch-l1-2-1.spec delete mode 100644 dll/apisets/api-ms-win-core-sysinfo-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-sysinfo-l1-2-0.spec delete mode 100644 dll/apisets/api-ms-win-core-sysinfo-l1-2-1.spec delete mode 100644 dll/apisets/api-ms-win-core-threadpool-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-threadpool-l1-2-0.spec delete mode 100644 dll/apisets/api-ms-win-core-threadpool-legacy-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-threadpool-private-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-timezone-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-toolhelp-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-url-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-util-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-version-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-version-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-core-version-private-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-versionansi-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-windowserrorreporting-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-winrt-error-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-winrt-error-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-core-winrt-errorprivate-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-core-winrt-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-winrt-registration-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-winrt-roparameterizediid-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-winrt-string-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-winrt-string-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-core-wow64-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-wow64-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-core-xstate-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-core-xstate-l2-1-0.spec delete mode 100644 dll/apisets/api-ms-win-crt-conio-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-crt-convert-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-crt-environment-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-crt-filesystem-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-crt-heap-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-crt-locale-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-crt-math-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-crt-multibyte-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-crt-private-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-crt-process-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-crt-runtime-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-crt-stdio-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-crt-string-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-crt-time-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-crt-utility-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-devices-config-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-devices-config-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-devices-query-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-downlevel-advapi32-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-downlevel-advapi32-l2-1-0.spec delete mode 100644 dll/apisets/api-ms-win-downlevel-normaliz-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-downlevel-ole32-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-downlevel-shell32-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-downlevel-shlwapi-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-downlevel-shlwapi-l2-1-0.spec delete mode 100644 dll/apisets/api-ms-win-downlevel-user32-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-downlevel-version-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-dx-d3dkmt-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-eventing-classicprovider-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-eventing-consumer-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-eventing-controller-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-eventing-legacy-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-eventing-provider-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-eventlog-legacy-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-gdi-dpiinfo-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-mm-joystick-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-mm-misc-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-mm-mme-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-mm-time-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-ntuser-dc-access-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-ntuser-rectangle-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-ntuser-sysparams-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-perf-legacy-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-power-base-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-power-setting-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-rtcore-ntuser-draw-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-rtcore-ntuser-private-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-rtcore-ntuser-private-l1-1-4.spec delete mode 100644 dll/apisets/api-ms-win-rtcore-ntuser-window-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-rtcore-ntuser-winevent-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-rtcore-ntuser-wmpointer-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-rtcore-ntuser-wmpointer-l1-1-3.spec delete mode 100644 dll/apisets/api-ms-win-security-activedirectoryclient-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-security-audit-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-security-base-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-security-base-l1-2-0.spec delete mode 100644 dll/apisets/api-ms-win-security-base-private-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-security-credentials-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-security-cryptoapi-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-security-grouppolicy-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-security-lsalookup-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-security-lsalookup-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-security-lsalookup-l2-1-0.spec delete mode 100644 dll/apisets/api-ms-win-security-lsalookup-l2-1-1.spec delete mode 100644 dll/apisets/api-ms-win-security-lsapolicy-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-security-provider-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-security-sddl-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-security-systemfunctions-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-service-core-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-service-core-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-service-management-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-service-management-l2-1-0.spec delete mode 100644 dll/apisets/api-ms-win-service-private-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-service-winsvc-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-service-winsvc-l1-2-0.spec delete mode 100644 dll/apisets/api-ms-win-shcore-obsolete-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-shcore-scaling-l1-1-1.spec delete mode 100644 dll/apisets/api-ms-win-shcore-stream-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-shcore-thread-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-shell-shellcom-l1-1-0.spec delete mode 100644 dll/apisets/api-ms-win-shell-shellfolders-l1-1-0.spec delete mode 100644 dll/apisets/update.py delete mode 100644 dll/apisets/x86_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef.manifest delete mode 100644 dll/apisets/x86_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef.manifest.in delete mode 100644 media/forwardcompatible.manifest create mode 100644 modules/rostests/apitests/apisets/CMakeLists.txt create mode 100644 modules/rostests/apitests/apisets/apisets.c create mode 100644 modules/rostests/apitests/apisets/testlist.c create mode 100644 sdk/lib/apisets/CMakeLists.txt create mode 100644 sdk/lib/apisets/apisets.c create mode 100644 sdk/lib/apisets/apisets.h create mode 100644 sdk/lib/apisets/apisets.table.c create mode 100644 sdk/lib/apisets/apisetsp.h create mode 100644 sdk/lib/apisets/update.py diff --git a/CODEOWNERS b/CODEOWNERS index 81851d73fd9..a5c57c1639e 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -96,7 +96,7 @@ # Apisets # M: learn-more, learn_more, Mark Jansen # S: Maintained -/dll/apisets/ @learn-more +/sdk/lib/apisets/ @learn-more # Application Compatibility subystem # M: learn-more, learn_more, Mark Jansen diff --git a/boot/bootdata/packages/reactos.dff.in b/boot/bootdata/packages/reactos.dff.in index 04ad4dc83a0..43f98fc021e 100644 --- a/boot/bootdata/packages/reactos.dff.in +++ b/boot/bootdata/packages/reactos.dff.in @@ -80,7 +80,6 @@ Signature = "$Windows NT$" 56 = winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.2600.2982_none_deadbeef 57 = winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.2600.2982_none_deadbeef 58 = winsxs\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.7601.23038_none_deadbeef -59 = winsxs\x86_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef 60 = bin\suppl 61 = winsxs\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.0.14393.0_none_deadbeef 62 = Resources\Themes\Modern @@ -91,19 +90,16 @@ Signature = "$Windows NT$" 67 = winsxs\amd64_microsoft.windows.common-controls_6595b64144ccf1df_5.82.2600.2982_none_deadbeef 68 = winsxs\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.2600.2982_none_deadbeef 69 = winsxs\amd64_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.7601.23038_none_deadbeef -70 = winsxs\amd64_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef 71 = winsxs\amd64_microsoft.windows.gdiplus_6595b64144ccf1df_1.0.14393.0_none_deadbeef 72 = winsxs\arm_microsoft.windows.common-controls_6595b64144ccf1df_5.82.2600.2982_none_deadbeef 73 = winsxs\arm_microsoft.windows.common-controls_6595b64144ccf1df_6.0.2600.2982_none_deadbeef 74 = winsxs\arm_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.7601.23038_none_deadbeef -75 = winsxs\arm_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef 76 = winsxs\arm_microsoft.windows.gdiplus_6595b64144ccf1df_1.0.14393.0_none_deadbeef 77 = winsxs\arm64_microsoft.windows.common-controls_6595b64144ccf1df_5.82.2600.2982_none_deadbeef 78 = winsxs\arm64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.2600.2982_none_deadbeef 79 = winsxs\arm64_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.7601.23038_none_deadbeef -80 = winsxs\arm64_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef 81 = winsxs\arm64_microsoft.windows.gdiplus_6595b64144ccf1df_1.0.14393.0_none_deadbeef .InfEnd diff --git a/dll/CMakeLists.txt b/dll/CMakeLists.txt index 7fd670b6b6d..47c8bf28ff2 100644 --- a/dll/CMakeLists.txt +++ b/dll/CMakeLists.txt @@ -1,6 +1,5 @@ add_subdirectory(3rdparty) -add_subdirectory(apisets) add_subdirectory(appcompat) add_subdirectory(cpl) add_subdirectory(directx) diff --git a/dll/apisets/CMakeLists.txt b/dll/apisets/CMakeLists.txt deleted file mode 100644 index f101725bf77..00000000000 --- a/dll/apisets/CMakeLists.txt +++ /dev/null @@ -1,256 +0,0 @@ - -# This file is generated by update.py, please edit CMakeLists.txt.in instead -# Generated from wine-3.20-144-g2ef62f9085 - -project(apisets) - -function (add_apiset apiset_name baseaddress) - spec2def(${apiset_name}.dll ${apiset_name}.spec ADD_IMPORTLIB) - - add_definitions( - -D_CTYPE_DISABLE_MACROS - -D_NO_INLINING - -D__CRT__NO_INLINE - -D__STDC_WANT_SECURE_LIB__=0 - -D_INC_STRING - -D_CTYPE_DEFINED - -D_WCTYPE_DEFINED - -D_CRT_ERRNO_DEFINED) - - add_library(${apiset_name} MODULE - ${CMAKE_CURRENT_BINARY_DIR}/${apiset_name}_stubs.c - ${CMAKE_CURRENT_BINARY_DIR}/${apiset_name}.def) - - add_dependencies(${apiset_name} xdk) - set_module_type(${apiset_name} module UNICODE IMAGEBASE ${baseaddress}) - - if(NOT MSVC) - target_compile_options(${apiset_name} PRIVATE -fno-builtin) - else() - target_compile_options(${apiset_name} PRIVATE /wd4026 /wd4273 /Oi-) - endif() - - add_importlibs(${apiset_name} ${ARGN} ntdll) - - add_cd_file(TARGET ${apiset_name} DESTINATION reactos/winsxs/${WINARCH}_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef FOR all) -endfunction() - -add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/${WINARCH}_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef.manifest DESTINATION reactos/winsxs/manifests FOR all) - -# Apisets will be appended - -add_apiset(api-ms-win-appmodel-identity-l1-1-0 0x60000000 ) -add_apiset(api-ms-win-appmodel-runtime-l1-1-1 0x60020000 kernel32) -add_apiset(api-ms-win-appmodel-runtime-l1-1-2 0x60040000 ) -add_apiset(api-ms-win-core-apiquery-l1-1-0 0x60060000 ) -add_apiset(api-ms-win-core-appcompat-l1-1-1 0x60070000 kernel32) -add_apiset(api-ms-win-core-appinit-l1-1-0 0x60080000 ) -add_apiset(api-ms-win-core-atoms-l1-1-0 0x60090000 kernel32) -add_apiset(api-ms-win-core-bem-l1-1-0 0x600a0000 ) -add_apiset(api-ms-win-core-com-l1-1-0 0x600b0000 ole32) -add_apiset(api-ms-win-core-com-l1-1-1 0x600c0000 ole32) -add_apiset(api-ms-win-core-com-private-l1-1-0 0x600e0000 ole32) -add_apiset(api-ms-win-core-comm-l1-1-0 0x60130000 kernel32) -add_apiset(api-ms-win-core-console-l1-1-0 0x60140000 kernel32) -add_apiset(api-ms-win-core-console-l2-1-0 0x60150000 kernel32) -add_apiset(api-ms-win-core-crt-l1-1-0 0x60160000 msvcrt) -add_apiset(api-ms-win-core-crt-l2-1-0 0x60190000 msvcrt) -add_apiset(api-ms-win-core-datetime-l1-1-0 0x601a0000 kernel32) -add_apiset(api-ms-win-core-datetime-l1-1-1 0x601b0000 kernel32) -add_apiset(api-ms-win-core-debug-l1-1-0 0x601c0000 kernel32) -add_apiset(api-ms-win-core-debug-l1-1-1 0x601d0000 kernel32) -add_apiset(api-ms-win-core-delayload-l1-1-0 0x601e0000 kernel32) -add_apiset(api-ms-win-core-delayload-l1-1-1 0x601f0000 kernel32) -add_apiset(api-ms-win-core-errorhandling-l1-1-0 0x60200000 kernel32) -add_apiset(api-ms-win-core-errorhandling-l1-1-1 0x60210000 kernel32) -add_apiset(api-ms-win-core-errorhandling-l1-1-2 0x60220000 kernel32) -add_apiset(api-ms-win-core-errorhandling-l1-1-3 0x60230000 kernel32) -add_apiset(api-ms-win-core-fibers-l1-1-0 0x60240000 kernel32) -add_apiset(api-ms-win-core-fibers-l1-1-1 0x60250000 kernel32) -add_apiset(api-ms-win-core-file-l1-1-0 0x60260000 kernel32) -add_apiset(api-ms-win-core-file-l1-2-0 0x60270000 kernel32) -add_apiset(api-ms-win-core-file-l1-2-1 0x60280000 kernel32) -add_apiset(api-ms-win-core-file-l1-2-2 0x60290000 kernel32) -add_apiset(api-ms-win-core-file-l2-1-0 0x602a0000 kernel32) -add_apiset(api-ms-win-core-file-l2-1-1 0x602b0000 kernel32) -add_apiset(api-ms-win-core-file-l2-1-2 0x602c0000 kernel32) -add_apiset(api-ms-win-core-handle-l1-1-0 0x602d0000 kernel32) -add_apiset(api-ms-win-core-heap-l1-1-0 0x602e0000 kernel32) -add_apiset(api-ms-win-core-heap-l1-2-0 0x602f0000 kernel32) -add_apiset(api-ms-win-core-heap-l2-1-0 0x60300000 kernel32) -add_apiset(api-ms-win-core-heap-obsolete-l1-1-0 0x60310000 kernel32) -add_apiset(api-ms-win-core-interlocked-l1-1-0 0x60320000 kernel32) -add_apiset(api-ms-win-core-interlocked-l1-2-0 0x60330000 kernel32) -add_apiset(api-ms-win-core-io-l1-1-0 0x60340000 kernel32) -add_apiset(api-ms-win-core-io-l1-1-1 0x60350000 kernel32) -add_apiset(api-ms-win-core-job-l1-1-0 0x60360000 kernel32) -add_apiset(api-ms-win-core-job-l2-1-0 0x60370000 kernel32) -add_apiset(api-ms-win-core-kernel32-legacy-l1-1-0 0x60380000 kernel32) -add_apiset(api-ms-win-core-kernel32-legacy-l1-1-1 0x60390000 kernel32) -add_apiset(api-ms-win-core-kernel32-private-l1-1-1 0x603a0000 kernel32) -add_apiset(api-ms-win-core-largeinteger-l1-1-0 0x603b0000 kernel32) -add_apiset(api-ms-win-core-libraryloader-l1-1-0 0x603c0000 kernel32 user32) -add_apiset(api-ms-win-core-libraryloader-l1-1-1 0x603d0000 kernel32 user32) -add_apiset(api-ms-win-core-libraryloader-l1-2-0 0x603e0000 kernel32 user32) -add_apiset(api-ms-win-core-libraryloader-l1-2-1 0x603f0000 kernel32) -add_apiset(api-ms-win-core-libraryloader-l1-2-2 0x60400000 kernel32) -add_apiset(api-ms-win-core-localization-l1-1-0 0x60410000 kernel32) -add_apiset(api-ms-win-core-localization-l1-2-0 0x60420000 kernel32) -add_apiset(api-ms-win-core-localization-l1-2-1 0x60430000 kernel32) -add_apiset(api-ms-win-core-localization-l2-1-0 0x60440000 kernel32) -add_apiset(api-ms-win-core-localization-obsolete-l1-1-0 0x60450000 kernel32) -add_apiset(api-ms-win-core-localization-obsolete-l1-2-0 0x60460000 kernel32) -add_apiset(api-ms-win-core-localization-obsolete-l1-3-0 0x60470000 kernel32) -add_apiset(api-ms-win-core-localization-private-l1-1-0 0x60480000 kernel32) -add_apiset(api-ms-win-core-localregistry-l1-1-0 0x60490000 advapi32 advapi32_vista) -add_apiset(api-ms-win-core-memory-l1-1-0 0x604a0000 kernel32) -add_apiset(api-ms-win-core-memory-l1-1-1 0x604b0000 kernel32) -add_apiset(api-ms-win-core-memory-l1-1-2 0x604c0000 kernel32) -add_apiset(api-ms-win-core-misc-l1-1-0 0x604d0000 kernel32) -add_apiset(api-ms-win-core-namedpipe-l1-1-0 0x604e0000 kernel32 advapi32) -add_apiset(api-ms-win-core-namedpipe-l1-2-0 0x604f0000 kernel32 advapi32) -add_apiset(api-ms-win-core-namespace-l1-1-0 0x60500000 kernel32) -add_apiset(api-ms-win-core-normalization-l1-1-0 0x60510000 kernel32) -add_apiset(api-ms-win-core-path-l1-1-0 0x60520000 ) -add_apiset(api-ms-win-core-privateprofile-l1-1-1 0x60540000 kernel32) -add_apiset(api-ms-win-core-processenvironment-l1-1-0 0x60550000 kernel32) -add_apiset(api-ms-win-core-processenvironment-l1-2-0 0x60560000 kernel32) -add_apiset(api-ms-win-core-processthreads-l1-1-0 0x60570000 kernel32 advapi32) -add_apiset(api-ms-win-core-processthreads-l1-1-1 0x60580000 kernel32 advapi32) -add_apiset(api-ms-win-core-processthreads-l1-1-2 0x60590000 kernel32 advapi32) -add_apiset(api-ms-win-core-processthreads-l1-1-3 0x605a0000 kernel32) -add_apiset(api-ms-win-core-processtopology-obsolete-l1-1-0 0x605b0000 kernel32) -add_apiset(api-ms-win-core-profile-l1-1-0 0x605c0000 kernel32) -add_apiset(api-ms-win-core-psapi-ansi-l1-1-0 0x605d0000 kernel32) -add_apiset(api-ms-win-core-psapi-l1-1-0 0x605e0000 kernel32) -add_apiset(api-ms-win-core-psapi-obsolete-l1-1-0 0x605f0000 ) -add_apiset(api-ms-win-core-quirks-l1-1-0 0x60600000 ) -add_apiset(api-ms-win-core-realtime-l1-1-0 0x60610000 kernel32) -add_apiset(api-ms-win-core-registry-l1-1-0 0x60620000 advapi32 advapi32_vista) -add_apiset(api-ms-win-core-registry-l2-1-0 0x60630000 advapi32 advapi32_vista) -add_apiset(api-ms-win-core-registryuserspecific-l1-1-0 0x60640000 shlwapi) -add_apiset(api-ms-win-core-rtlsupport-l1-1-0 0x60650000 kernel32) -add_apiset(api-ms-win-core-rtlsupport-l1-2-0 0x60660000 ) -add_apiset(api-ms-win-core-shlwapi-legacy-l1-1-0 0x60670000 shlwapi) -add_apiset(api-ms-win-core-shlwapi-obsolete-l1-1-0 0x60680000 shlwapi) -add_apiset(api-ms-win-core-shlwapi-obsolete-l1-2-0 0x60690000 shlwapi) -add_apiset(api-ms-win-core-shutdown-l1-1-0 0x606a0000 advapi32) -add_apiset(api-ms-win-core-sidebyside-l1-1-0 0x606b0000 kernel32) -add_apiset(api-ms-win-core-string-l1-1-0 0x606c0000 kernel32) -add_apiset(api-ms-win-core-string-l2-1-0 0x606d0000 user32) -add_apiset(api-ms-win-core-string-obsolete-l1-1-0 0x606e0000 kernel32) -add_apiset(api-ms-win-core-stringansi-l1-1-0 0x606f0000 user32) -add_apiset(api-ms-win-core-stringloader-l1-1-1 0x60700000 user32) -add_apiset(api-ms-win-core-synch-ansi-l1-1-0 0x60710000 kernel32) -add_apiset(api-ms-win-core-synch-l1-1-0 0x60720000 kernel32) -add_apiset(api-ms-win-core-synch-l1-2-0 0x60730000 kernel32) -add_apiset(api-ms-win-core-synch-l1-2-1 0x60740000 kernel32) -add_apiset(api-ms-win-core-sysinfo-l1-1-0 0x60750000 kernel32) -add_apiset(api-ms-win-core-sysinfo-l1-2-0 0x60760000 kernel32) -add_apiset(api-ms-win-core-sysinfo-l1-2-1 0x60770000 kernel32) -add_apiset(api-ms-win-core-threadpool-l1-1-0 0x60780000 kernel32) -add_apiset(api-ms-win-core-threadpool-l1-2-0 0x60790000 kernel32) -add_apiset(api-ms-win-core-threadpool-legacy-l1-1-0 0x607a0000 kernel32) -add_apiset(api-ms-win-core-threadpool-private-l1-1-0 0x607b0000 kernel32) -add_apiset(api-ms-win-core-timezone-l1-1-0 0x607c0000 kernel32) -add_apiset(api-ms-win-core-toolhelp-l1-1-0 0x607d0000 kernel32) -add_apiset(api-ms-win-core-url-l1-1-0 0x607e0000 shlwapi) -add_apiset(api-ms-win-core-util-l1-1-0 0x607f0000 kernel32) -add_apiset(api-ms-win-core-version-l1-1-0 0x60800000 version) -add_apiset(api-ms-win-core-version-l1-1-1 0x60810000 version) -add_apiset(api-ms-win-core-version-private-l1-1-0 0x60820000 ) -add_apiset(api-ms-win-core-versionansi-l1-1-0 0x60830000 version) -add_apiset(api-ms-win-core-windowserrorreporting-l1-1-0 0x60840000 kernel32) -add_apiset(api-ms-win-core-winrt-error-l1-1-0 0x60850000 ) -add_apiset(api-ms-win-core-winrt-error-l1-1-1 0x60860000 ) -add_apiset(api-ms-win-core-winrt-errorprivate-l1-1-1 0x60880000 ) -add_apiset(api-ms-win-core-winrt-l1-1-0 0x60890000 ) -add_apiset(api-ms-win-core-winrt-registration-l1-1-0 0x608a0000 ) -add_apiset(api-ms-win-core-winrt-roparameterizediid-l1-1-0 0x608b0000 ) -add_apiset(api-ms-win-core-winrt-string-l1-1-0 0x608c0000 ) -add_apiset(api-ms-win-core-winrt-string-l1-1-1 0x608e0000 ) -add_apiset(api-ms-win-core-wow64-l1-1-0 0x60900000 kernel32) -add_apiset(api-ms-win-core-wow64-l1-1-1 0x60910000 kernel32) -add_apiset(api-ms-win-core-xstate-l1-1-0 0x60920000 ) -add_apiset(api-ms-win-core-xstate-l2-1-0 0x60930000 ) -add_apiset(api-ms-win-crt-conio-l1-1-0 0x60940000 msvcrt) -add_apiset(api-ms-win-crt-convert-l1-1-0 0x60960000 msvcrt) -add_apiset(api-ms-win-crt-environment-l1-1-0 0x609c0000 msvcrt) -add_apiset(api-ms-win-crt-filesystem-l1-1-0 0x609d0000 msvcrt) -add_apiset(api-ms-win-crt-heap-l1-1-0 0x60a00000 msvcrt) -add_apiset(api-ms-win-crt-locale-l1-1-0 0x60a10000 msvcrt) -add_apiset(api-ms-win-crt-math-l1-1-0 0x60a20000 msvcrt) -add_apiset(api-ms-win-crt-multibyte-l1-1-0 0x60b30000 msvcrt) -add_apiset(api-ms-win-crt-private-l1-1-0 0x60bb0000 msvcrt kernel32) -add_apiset(api-ms-win-crt-process-l1-1-0 0x61020000 msvcrt) -add_apiset(api-ms-win-crt-runtime-l1-1-0 0x61030000 msvcrt) -add_apiset(api-ms-win-crt-stdio-l1-1-0 0x61070000 msvcrt) -add_apiset(api-ms-win-crt-string-l1-1-0 0x610c0000 msvcrt) -add_apiset(api-ms-win-crt-time-l1-1-0 0x61120000 msvcrt) -add_apiset(api-ms-win-crt-utility-l1-1-0 0x61150000 msvcrt) -add_apiset(api-ms-win-devices-config-l1-1-0 0x61160000 setupapi) -add_apiset(api-ms-win-devices-config-l1-1-1 0x61170000 setupapi) -add_apiset(api-ms-win-devices-query-l1-1-1 0x61180000 ) -add_apiset(api-ms-win-downlevel-advapi32-l1-1-0 0x61190000 advapi32 advapi32_vista) -add_apiset(api-ms-win-downlevel-advapi32-l2-1-0 0x611b0000 advapi32) -add_apiset(api-ms-win-downlevel-normaliz-l1-1-0 0x611c0000 kernel32) -add_apiset(api-ms-win-downlevel-ole32-l1-1-0 0x611d0000 ole32) -add_apiset(api-ms-win-downlevel-shell32-l1-1-0 0x611e0000 shell32) -add_apiset(api-ms-win-downlevel-shlwapi-l1-1-0 0x611f0000 shlwapi) -add_apiset(api-ms-win-downlevel-shlwapi-l2-1-0 0x61200000 shlwapi) -add_apiset(api-ms-win-downlevel-user32-l1-1-0 0x61210000 user32) -add_apiset(api-ms-win-downlevel-version-l1-1-0 0x61220000 version) -add_apiset(api-ms-win-dx-d3dkmt-l1-1-0 0x61230000 gdi32_vista gdi32) -add_apiset(api-ms-win-eventing-classicprovider-l1-1-0 0x61290000 advapi32) -add_apiset(api-ms-win-eventing-consumer-l1-1-0 0x612a0000 advapi32) -add_apiset(api-ms-win-eventing-controller-l1-1-0 0x612b0000 advapi32) -add_apiset(api-ms-win-eventing-legacy-l1-1-0 0x612c0000 advapi32) -add_apiset(api-ms-win-eventing-provider-l1-1-0 0x612d0000 ) -add_apiset(api-ms-win-eventlog-legacy-l1-1-0 0x612e0000 advapi32) -add_apiset(api-ms-win-gdi-dpiinfo-l1-1-0 0x612f0000 ) -add_apiset(api-ms-win-mm-joystick-l1-1-0 0x61300000 winmm) -add_apiset(api-ms-win-mm-misc-l1-1-1 0x61310000 winmm) -add_apiset(api-ms-win-mm-mme-l1-1-0 0x61320000 winmm) -add_apiset(api-ms-win-mm-time-l1-1-0 0x61330000 winmm) -add_apiset(api-ms-win-ntuser-dc-access-l1-1-0 0x61340000 user32) -add_apiset(api-ms-win-ntuser-rectangle-l1-1-0 0x61350000 user32) -add_apiset(api-ms-win-ntuser-sysparams-l1-1-0 0x61360000 user32) -add_apiset(api-ms-win-perf-legacy-l1-1-0 0x61370000 ) -add_apiset(api-ms-win-power-base-l1-1-0 0x61380000 powrprof) -add_apiset(api-ms-win-power-setting-l1-1-0 0x61390000 powrprof) -add_apiset(api-ms-win-rtcore-ntuser-draw-l1-1-0 0x613a0000 user32) -add_apiset(api-ms-win-rtcore-ntuser-private-l1-1-0 0x613b0000 user32) -add_apiset(api-ms-win-rtcore-ntuser-private-l1-1-4 0x613c0000 ) -add_apiset(api-ms-win-rtcore-ntuser-window-l1-1-0 0x613d0000 user32) -add_apiset(api-ms-win-rtcore-ntuser-winevent-l1-1-0 0x613e0000 user32) -add_apiset(api-ms-win-rtcore-ntuser-wmpointer-l1-1-0 0x613f0000 ) -add_apiset(api-ms-win-rtcore-ntuser-wmpointer-l1-1-3 0x61410000 ) -add_apiset(api-ms-win-security-activedirectoryclient-l1-1-0 0x61420000 ntdsapi) -add_apiset(api-ms-win-security-audit-l1-1-1 0x61430000 ) -add_apiset(api-ms-win-security-base-l1-1-0 0x61440000 advapi32) -add_apiset(api-ms-win-security-base-l1-2-0 0x61450000 advapi32) -add_apiset(api-ms-win-security-base-private-l1-1-1 0x61460000 advapi32) -add_apiset(api-ms-win-security-credentials-l1-1-0 0x61470000 advapi32) -add_apiset(api-ms-win-security-cryptoapi-l1-1-0 0x61480000 advapi32) -add_apiset(api-ms-win-security-grouppolicy-l1-1-0 0x61490000 userenv) -add_apiset(api-ms-win-security-lsalookup-l1-1-0 0x614b0000 ) -add_apiset(api-ms-win-security-lsalookup-l1-1-1 0x614c0000 ) -add_apiset(api-ms-win-security-lsalookup-l2-1-0 0x614d0000 advapi32) -add_apiset(api-ms-win-security-lsalookup-l2-1-1 0x614e0000 advapi32) -add_apiset(api-ms-win-security-lsapolicy-l1-1-0 0x614f0000 advapi32) -add_apiset(api-ms-win-security-provider-l1-1-0 0x61500000 advapi32) -add_apiset(api-ms-win-security-sddl-l1-1-0 0x61510000 advapi32) -add_apiset(api-ms-win-security-systemfunctions-l1-1-0 0x61520000 advapi32) -add_apiset(api-ms-win-service-core-l1-1-0 0x61530000 advapi32) -add_apiset(api-ms-win-service-core-l1-1-1 0x61540000 advapi32) -add_apiset(api-ms-win-service-management-l1-1-0 0x61550000 advapi32) -add_apiset(api-ms-win-service-management-l2-1-0 0x61560000 advapi32) -add_apiset(api-ms-win-service-private-l1-1-1 0x61570000 advapi32) -add_apiset(api-ms-win-service-winsvc-l1-1-0 0x61580000 advapi32) -add_apiset(api-ms-win-service-winsvc-l1-2-0 0x61590000 advapi32) -add_apiset(api-ms-win-shcore-obsolete-l1-1-0 0x615a0000 shlwapi shell32) -add_apiset(api-ms-win-shcore-scaling-l1-1-1 0x615b0000 ) -add_apiset(api-ms-win-shcore-stream-l1-1-0 0x615c0000 shlwapi) -add_apiset(api-ms-win-shcore-thread-l1-1-0 0x615d0000 shlwapi) -add_apiset(api-ms-win-shell-shellcom-l1-1-0 0x615e0000 shell32) -add_apiset(api-ms-win-shell-shellfolders-l1-1-0 0x615f0000 shell32) diff --git a/dll/apisets/CMakeLists.txt.in b/dll/apisets/CMakeLists.txt.in deleted file mode 100644 index fa5961a32b1..00000000000 --- a/dll/apisets/CMakeLists.txt.in +++ /dev/null @@ -1,41 +0,0 @@ - -# This file is generated by update.py, please edit CMakeLists.txt.in instead -# Generated from %WINE_GIT_VERSION% - -project(apisets) - -function (add_apiset apiset_name baseaddress) - spec2def(${apiset_name}.dll ${apiset_name}.spec ADD_IMPORTLIB) - - add_definitions( - -D_CTYPE_DISABLE_MACROS - -D_NO_INLINING - -D__CRT__NO_INLINE - -D__STDC_WANT_SECURE_LIB__=0 - -D_INC_STRING - -D_CTYPE_DEFINED - -D_WCTYPE_DEFINED - -D_CRT_ERRNO_DEFINED) - - add_library(${apiset_name} MODULE - ${CMAKE_CURRENT_BINARY_DIR}/${apiset_name}_stubs.c - ${CMAKE_CURRENT_BINARY_DIR}/${apiset_name}.def) - - add_dependencies(${apiset_name} xdk) - set_module_type(${apiset_name} module UNICODE IMAGEBASE ${baseaddress}) - - if(NOT MSVC) - target_compile_options(${apiset_name} PRIVATE -fno-builtin) - else() - target_compile_options(${apiset_name} PRIVATE /wd4026 /wd4273 /Oi-) - endif() - - add_importlibs(${apiset_name} ${ARGN} ntdll) - - add_cd_file(TARGET ${apiset_name} DESTINATION reactos/winsxs/${WINARCH}_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef FOR all) -endfunction() - -add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/${WINARCH}_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef.manifest DESTINATION reactos/winsxs/manifests FOR all) - -# Apisets will be appended - diff --git a/dll/apisets/amd64_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef.manifest b/dll/apisets/amd64_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef.manifest deleted file mode 100644 index 83a4aaa0b7a..00000000000 --- a/dll/apisets/amd64_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef.manifest +++ /dev/null @@ -1,220 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dll/apisets/amd64_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef.manifest.in b/dll/apisets/amd64_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef.manifest.in deleted file mode 100644 index 8044a2ed96d..00000000000 --- a/dll/apisets/amd64_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef.manifest.in +++ /dev/null @@ -1,6 +0,0 @@ - - - - -%MANIFEST_FILE_LIST% - diff --git a/dll/apisets/api-ms-win-appmodel-identity-l1-1-0.spec b/dll/apisets/api-ms-win-appmodel-identity-l1-1-0.spec deleted file mode 100644 index a9c096a7227..00000000000 --- a/dll/apisets/api-ms-win-appmodel-identity-l1-1-0.spec +++ /dev/null @@ -1,20 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub AppContainerDeriveSidFromMoniker -@ stub AppContainerFreeMemory -@ stub AppContainerLookupDisplayNameMrtReference -@ stub AppContainerLookupMoniker -@ stub AppContainerRegisterSid -@ stub AppContainerUnregisterSid -@ stub AppXFreeMemory -@ stub AppXGetApplicationData -@ stub AppXGetDevelopmentMode -@ stub AppXGetOSMaxVersionTested -@ stub AppXGetOSMinVersion -@ stub AppXGetPackageCapabilities -@ stub AppXGetPackageSid -@ stub AppXGetPackageState -@ stub AppXLookupDisplayName -@ stub AppXLookupMoniker -@ stub AppXSetPackageState diff --git a/dll/apisets/api-ms-win-appmodel-runtime-l1-1-1.spec b/dll/apisets/api-ms-win-appmodel-runtime-l1-1-1.spec deleted file mode 100644 index 0cdb40a7690..00000000000 --- a/dll/apisets/api-ms-win-appmodel-runtime-l1-1-1.spec +++ /dev/null @@ -1,30 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub ClosePackageInfo -@ stub FindPackagesByPackageFamily -@ stub FormatApplicationUserModelId -@ stub GetApplicationUserModelId -@ stub GetCurrentApplicationUserModelId -@ stub GetCurrentPackageFamilyName -@ stub GetCurrentPackageFullName -@ stdcall -version=0x602+ GetCurrentPackageId() kernel32.GetCurrentPackageId -@ stub GetCurrentPackageInfo -@ stub GetCurrentPackagePath -@ stub GetPackageApplicationIds -@ stub GetPackageFamilyName -@ stub GetPackageFullName -@ stub GetPackageId -@ stub GetPackageInfo -@ stub GetPackagePath -@ stub GetPackagePathByFullName -@ stub GetPackagesByPackageFamily -@ stub GetStagedPackageOrigin -@ stub GetStagedPackagePathByFullName -@ stub OpenPackageInfoByFullName -@ stub PackageFamilyNameFromFullName -@ stub PackageFamilyNameFromId -@ stub PackageFullNameFromId -@ stub PackageIdFromFullName -@ stub PackageNameAndPublisherIdFromFamilyName -@ stub ParseApplicationUserModelId diff --git a/dll/apisets/api-ms-win-appmodel-runtime-l1-1-2.spec b/dll/apisets/api-ms-win-appmodel-runtime-l1-1-2.spec deleted file mode 100644 index ef73c23e067..00000000000 --- a/dll/apisets/api-ms-win-appmodel-runtime-l1-1-2.spec +++ /dev/null @@ -1,20 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub AppPolicyGetClrCompat -@ stub AppPolicyGetCreateFileAccess -@ stub AppPolicyGetLifecycleManagement -@ stub AppPolicyGetMediaFoundationCodecLoading -@ stdcall -stub AppPolicyGetProcessTerminationMethod(long ptr) -@ stub AppPolicyGetShowDeveloperDiagnostic -@ stdcall -stub AppPolicyGetThreadInitializationType(long ptr) -@ stub AppPolicyGetWindowingModel -@ stub GetApplicationUserModelIdFromToken -@ stub GetPackageFamilyNameFromToken -@ stub GetPackageFullNameFromToken -@ stub OpenPackageInfoByFullNameForUser -@ stub VerifyApplicationUserModelId -@ stub VerifyPackageFamilyName -@ stub VerifyPackageFullName -@ stub VerifyPackageId -@ stub VerifyPackageRelativeApplicationId diff --git a/dll/apisets/api-ms-win-core-apiquery-l1-1-0.spec b/dll/apisets/api-ms-win-core-apiquery-l1-1-0.spec deleted file mode 100644 index 712d3a4569e..00000000000 --- a/dll/apisets/api-ms-win-core-apiquery-l1-1-0.spec +++ /dev/null @@ -1,4 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub ApiSetQueryApiSetPresence diff --git a/dll/apisets/api-ms-win-core-appcompat-l1-1-1.spec b/dll/apisets/api-ms-win-core-appcompat-l1-1-1.spec deleted file mode 100644 index 60349e169a7..00000000000 --- a/dll/apisets/api-ms-win-core-appcompat-l1-1-1.spec +++ /dev/null @@ -1,13 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall BaseCheckAppcompatCache() kernel32.BaseCheckAppcompatCache -@ stub BaseCheckAppcompatCacheEx -@ stdcall BaseCleanupAppcompatCacheSupport() kernel32.BaseCleanupAppcompatCacheSupport -@ stdcall BaseDumpAppcompatCache() kernel32.BaseDumpAppcompatCache -@ stdcall BaseFlushAppcompatCache() kernel32.BaseFlushAppcompatCache -@ stub BaseFreeAppCompatDataForProcess -@ stdcall BaseInitAppcompatCacheSupport() kernel32.BaseInitAppcompatCacheSupport -@ stdcall BaseIsAppcompatInfrastructureDisabled() kernel32.BaseIsAppcompatInfrastructureDisabled -@ stub BaseReadAppCompatDataForProcess -@ stdcall BaseUpdateAppcompatCache() kernel32.BaseUpdateAppcompatCache diff --git a/dll/apisets/api-ms-win-core-appinit-l1-1-0.spec b/dll/apisets/api-ms-win-core-appinit-l1-1-0.spec deleted file mode 100644 index 7083e2fd97f..00000000000 --- a/dll/apisets/api-ms-win-core-appinit-l1-1-0.spec +++ /dev/null @@ -1,4 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub LoadAppInitDlls diff --git a/dll/apisets/api-ms-win-core-atoms-l1-1-0.spec b/dll/apisets/api-ms-win-core-atoms-l1-1-0.spec deleted file mode 100644 index 7ce1b9b45ab..00000000000 --- a/dll/apisets/api-ms-win-core-atoms-l1-1-0.spec +++ /dev/null @@ -1,20 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall AddAtomA() kernel32.AddAtomA -@ stdcall AddAtomW() kernel32.AddAtomW -@ stdcall DeleteAtom() kernel32.DeleteAtom -@ stdcall FindAtomA() kernel32.FindAtomA -@ stdcall FindAtomW() kernel32.FindAtomW -@ stdcall GetAtomNameA() kernel32.GetAtomNameA -@ stdcall GetAtomNameW() kernel32.GetAtomNameW -@ stdcall GlobalAddAtomA() kernel32.GlobalAddAtomA -@ stub GlobalAddAtomExA -@ stub GlobalAddAtomExW -@ stdcall GlobalAddAtomW() kernel32.GlobalAddAtomW -@ stdcall GlobalDeleteAtom() kernel32.GlobalDeleteAtom -@ stdcall GlobalFindAtomA() kernel32.GlobalFindAtomA -@ stdcall GlobalFindAtomW() kernel32.GlobalFindAtomW -@ stdcall GlobalGetAtomNameA() kernel32.GlobalGetAtomNameA -@ stdcall GlobalGetAtomNameW() kernel32.GlobalGetAtomNameW -@ stdcall InitAtomTable() kernel32.InitAtomTable diff --git a/dll/apisets/api-ms-win-core-bem-l1-1-0.spec b/dll/apisets/api-ms-win-core-bem-l1-1-0.spec deleted file mode 100644 index e165ae3643a..00000000000 --- a/dll/apisets/api-ms-win-core-bem-l1-1-0.spec +++ /dev/null @@ -1,8 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub BemCopyReference -@ stub BemCreateContractFrom -@ stub BemCreateReference -@ stub BemFreeContract -@ stub BemFreeReference diff --git a/dll/apisets/api-ms-win-core-com-l1-1-0.spec b/dll/apisets/api-ms-win-core-com-l1-1-0.spec deleted file mode 100644 index 2162f4040bf..00000000000 --- a/dll/apisets/api-ms-win-core-com-l1-1-0.spec +++ /dev/null @@ -1,83 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CLSIDFromProgID() ole32.CLSIDFromProgID -@ stdcall CLSIDFromString() ole32.CLSIDFromString -@ stdcall CoAddRefServerProcess() ole32.CoAddRefServerProcess -@ stub CoAllowUnmarshalerCLSID -@ stdcall CoCancelCall() ole32.CoCancelCall -@ stdcall CoCopyProxy() ole32.CoCopyProxy -@ stdcall CoCreateFreeThreadedMarshaler() ole32.CoCreateFreeThreadedMarshaler -@ stdcall CoCreateGuid() ole32.CoCreateGuid -@ stdcall CoCreateInstance() ole32.CoCreateInstance -@ stdcall CoCreateInstanceEx() ole32.CoCreateInstanceEx -@ stub CoCreateInstanceFromApp -@ stub CoDecodeProxy -@ stub CoDecrementMTAUsage -@ stdcall CoDisableCallCancellation() ole32.CoDisableCallCancellation -@ stdcall -version=0x600+ CoDisconnectContext() ole32.CoDisconnectContext -@ stdcall CoDisconnectObject() ole32.CoDisconnectObject -@ stdcall CoEnableCallCancellation() ole32.CoEnableCallCancellation -@ stdcall CoFreeUnusedLibraries() ole32.CoFreeUnusedLibraries -@ stdcall CoFreeUnusedLibrariesEx() ole32.CoFreeUnusedLibrariesEx -@ stub CoGetApartmentType -@ stdcall CoGetCallContext() ole32.CoGetCallContext -@ stdcall CoGetCallerTID() ole32.CoGetCallerTID -@ stdcall CoGetCancelObject() ole32.CoGetCancelObject -@ stdcall CoGetClassObject() ole32.CoGetClassObject -@ stdcall CoGetContextToken() ole32.CoGetContextToken -@ stdcall CoGetCurrentLogicalThreadId() ole32.CoGetCurrentLogicalThreadId -@ stdcall CoGetCurrentProcess() ole32.CoGetCurrentProcess -@ stdcall CoGetDefaultContext() ole32.CoGetDefaultContext -@ stdcall CoGetInterfaceAndReleaseStream() ole32.CoGetInterfaceAndReleaseStream -@ stdcall CoGetMalloc() ole32.CoGetMalloc -@ stdcall CoGetMarshalSizeMax() ole32.CoGetMarshalSizeMax -@ stdcall CoGetObjectContext() ole32.CoGetObjectContext -@ stdcall CoGetPSClsid() ole32.CoGetPSClsid -@ stdcall CoGetStandardMarshal() ole32.CoGetStandardMarshal -@ stdcall CoGetStdMarshalEx() ole32.CoGetStdMarshalEx -@ stdcall CoGetTreatAsClass() ole32.CoGetTreatAsClass -@ stdcall CoImpersonateClient() ole32.CoImpersonateClient -@ stub CoIncrementMTAUsage -@ stdcall CoInitializeEx() ole32.CoInitializeEx -@ stdcall CoInitializeSecurity() ole32.CoInitializeSecurity -@ stub CoInvalidateRemoteMachineBindings -@ stdcall CoIsHandlerConnected() ole32.CoIsHandlerConnected -@ stdcall CoLockObjectExternal() ole32.CoLockObjectExternal -@ stdcall CoMarshalHresult() ole32.CoMarshalHresult -@ stdcall CoMarshalInterThreadInterfaceInStream() ole32.CoMarshalInterThreadInterfaceInStream -@ stdcall CoMarshalInterface() ole32.CoMarshalInterface -@ stdcall CoQueryAuthenticationServices() ole32.CoQueryAuthenticationServices -@ stdcall CoQueryClientBlanket() ole32.CoQueryClientBlanket -@ stdcall CoQueryProxyBlanket() ole32.CoQueryProxyBlanket -@ stdcall CoRegisterClassObject() ole32.CoRegisterClassObject -@ stdcall CoRegisterPSClsid() ole32.CoRegisterPSClsid -@ stdcall CoRegisterSurrogate() ole32.CoRegisterSurrogate -@ stdcall CoReleaseMarshalData() ole32.CoReleaseMarshalData -@ stdcall CoReleaseServerProcess() ole32.CoReleaseServerProcess -@ stdcall CoResumeClassObjects() ole32.CoResumeClassObjects -@ stdcall CoRevertToSelf() ole32.CoRevertToSelf -@ stdcall CoRevokeClassObject() ole32.CoRevokeClassObject -@ stub CoSetCancelObject -@ stdcall CoSetProxyBlanket() ole32.CoSetProxyBlanket -@ stdcall CoSuspendClassObjects() ole32.CoSuspendClassObjects -@ stdcall CoSwitchCallContext() ole32.CoSwitchCallContext -@ stdcall CoTaskMemAlloc() ole32.CoTaskMemAlloc -@ stdcall CoTaskMemFree() ole32.CoTaskMemFree -@ stdcall CoTaskMemRealloc() ole32.CoTaskMemRealloc -@ stub CoTestCancel -@ stdcall CoUninitialize() ole32.CoUninitialize -@ stdcall CoUnmarshalHresult() ole32.CoUnmarshalHresult -@ stdcall CoUnmarshalInterface() ole32.CoUnmarshalInterface -@ stdcall CoWaitForMultipleHandles() ole32.CoWaitForMultipleHandles -@ stub CoWaitForMultipleObjects -@ stdcall CreateStreamOnHGlobal() ole32.CreateStreamOnHGlobal -@ stdcall FreePropVariantArray() ole32.FreePropVariantArray -@ stdcall GetHGlobalFromStream() ole32.GetHGlobalFromStream -@ stdcall IIDFromString() ole32.IIDFromString -@ stdcall ProgIDFromCLSID() ole32.ProgIDFromCLSID -@ stdcall PropVariantClear() ole32.PropVariantClear -@ stdcall PropVariantCopy() ole32.PropVariantCopy -@ stdcall StringFromCLSID() ole32.StringFromCLSID -@ stdcall StringFromGUID2() ole32.StringFromGUID2 -@ stdcall StringFromIID() ole32.StringFromIID diff --git a/dll/apisets/api-ms-win-core-com-l1-1-1.spec b/dll/apisets/api-ms-win-core-com-l1-1-1.spec deleted file mode 100644 index 1d29bc173ca..00000000000 --- a/dll/apisets/api-ms-win-core-com-l1-1-1.spec +++ /dev/null @@ -1,85 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CLSIDFromProgID() ole32.CLSIDFromProgID -@ stdcall CLSIDFromString() ole32.CLSIDFromString -@ stdcall CoAddRefServerProcess() ole32.CoAddRefServerProcess -@ stub CoAllowUnmarshalerCLSID -@ stdcall CoCancelCall() ole32.CoCancelCall -@ stdcall CoCopyProxy() ole32.CoCopyProxy -@ stdcall CoCreateFreeThreadedMarshaler() ole32.CoCreateFreeThreadedMarshaler -@ stdcall CoCreateGuid() ole32.CoCreateGuid -@ stdcall CoCreateInstance() ole32.CoCreateInstance -@ stdcall CoCreateInstanceEx() ole32.CoCreateInstanceEx -@ stub CoCreateInstanceFromApp -@ stub CoDecodeProxy -@ stub CoDecrementMTAUsage -@ stdcall CoDisableCallCancellation() ole32.CoDisableCallCancellation -@ stdcall -version=0x600+ CoDisconnectContext() ole32.CoDisconnectContext -@ stdcall CoDisconnectObject() ole32.CoDisconnectObject -@ stdcall CoEnableCallCancellation() ole32.CoEnableCallCancellation -@ stdcall CoFreeUnusedLibraries() ole32.CoFreeUnusedLibraries -@ stdcall CoFreeUnusedLibrariesEx() ole32.CoFreeUnusedLibrariesEx -@ stub CoGetApartmentType -@ stdcall CoGetCallContext() ole32.CoGetCallContext -@ stdcall CoGetCallerTID() ole32.CoGetCallerTID -@ stdcall CoGetCancelObject() ole32.CoGetCancelObject -@ stdcall CoGetClassObject() ole32.CoGetClassObject -@ stdcall CoGetContextToken() ole32.CoGetContextToken -@ stdcall CoGetCurrentLogicalThreadId() ole32.CoGetCurrentLogicalThreadId -@ stdcall CoGetCurrentProcess() ole32.CoGetCurrentProcess -@ stdcall CoGetDefaultContext() ole32.CoGetDefaultContext -@ stdcall CoGetInterfaceAndReleaseStream() ole32.CoGetInterfaceAndReleaseStream -@ stdcall CoGetMalloc() ole32.CoGetMalloc -@ stdcall CoGetMarshalSizeMax() ole32.CoGetMarshalSizeMax -@ stdcall CoGetObjectContext() ole32.CoGetObjectContext -@ stdcall CoGetPSClsid() ole32.CoGetPSClsid -@ stdcall CoGetStandardMarshal() ole32.CoGetStandardMarshal -@ stdcall CoGetStdMarshalEx() ole32.CoGetStdMarshalEx -@ stdcall CoGetTreatAsClass() ole32.CoGetTreatAsClass -@ stdcall CoImpersonateClient() ole32.CoImpersonateClient -@ stub CoIncrementMTAUsage -@ stdcall CoInitializeEx() ole32.CoInitializeEx -@ stdcall CoInitializeSecurity() ole32.CoInitializeSecurity -@ stub CoInvalidateRemoteMachineBindings -@ stdcall CoIsHandlerConnected() ole32.CoIsHandlerConnected -@ stdcall CoLockObjectExternal() ole32.CoLockObjectExternal -@ stdcall CoMarshalHresult() ole32.CoMarshalHresult -@ stdcall CoMarshalInterThreadInterfaceInStream() ole32.CoMarshalInterThreadInterfaceInStream -@ stdcall CoMarshalInterface() ole32.CoMarshalInterface -@ stdcall CoQueryAuthenticationServices() ole32.CoQueryAuthenticationServices -@ stdcall CoQueryClientBlanket() ole32.CoQueryClientBlanket -@ stdcall CoQueryProxyBlanket() ole32.CoQueryProxyBlanket -@ stub CoRegisterActivationFilter -@ stdcall CoRegisterClassObject() ole32.CoRegisterClassObject -@ stdcall CoRegisterPSClsid() ole32.CoRegisterPSClsid -@ stdcall CoRegisterSurrogate() ole32.CoRegisterSurrogate -@ stdcall CoReleaseMarshalData() ole32.CoReleaseMarshalData -@ stdcall CoReleaseServerProcess() ole32.CoReleaseServerProcess -@ stdcall CoResumeClassObjects() ole32.CoResumeClassObjects -@ stdcall CoRevertToSelf() ole32.CoRevertToSelf -@ stdcall CoRevokeClassObject() ole32.CoRevokeClassObject -@ stub CoSetCancelObject -@ stdcall CoSetProxyBlanket() ole32.CoSetProxyBlanket -@ stdcall CoSuspendClassObjects() ole32.CoSuspendClassObjects -@ stdcall CoSwitchCallContext() ole32.CoSwitchCallContext -@ stdcall CoTaskMemAlloc() ole32.CoTaskMemAlloc -@ stdcall CoTaskMemFree() ole32.CoTaskMemFree -@ stdcall CoTaskMemRealloc() ole32.CoTaskMemRealloc -@ stub CoTestCancel -@ stdcall CoUninitialize() ole32.CoUninitialize -@ stdcall CoUnmarshalHresult() ole32.CoUnmarshalHresult -@ stdcall CoUnmarshalInterface() ole32.CoUnmarshalInterface -@ stdcall CoWaitForMultipleHandles() ole32.CoWaitForMultipleHandles -@ stub CoWaitForMultipleObjects -@ stdcall CreateStreamOnHGlobal() ole32.CreateStreamOnHGlobal -@ stdcall FreePropVariantArray() ole32.FreePropVariantArray -@ stdcall GetHGlobalFromStream() ole32.GetHGlobalFromStream -@ stdcall IIDFromString() ole32.IIDFromString -@ stdcall ProgIDFromCLSID() ole32.ProgIDFromCLSID -@ stdcall PropVariantClear() ole32.PropVariantClear -@ stdcall PropVariantCopy() ole32.PropVariantCopy -@ stub RoGetAgileReference -@ stdcall StringFromCLSID() ole32.StringFromCLSID -@ stdcall StringFromGUID2() ole32.StringFromGUID2 -@ stdcall StringFromIID() ole32.StringFromIID diff --git a/dll/apisets/api-ms-win-core-com-private-l1-1-0.spec b/dll/apisets/api-ms-win-core-com-private-l1-1-0.spec deleted file mode 100644 index 8845ce8acb4..00000000000 --- a/dll/apisets/api-ms-win-core-com-private-l1-1-0.spec +++ /dev/null @@ -1,94 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub CLSIDFromOle1Class -@ stub CleanupOleStateInAllTls -@ stub CleanupTlsOleState -@ stub ClearCleanupFlag -@ stub CoCreateErrorInfo -@ stub CoCreateObjectInContext -@ stub CoDeactivateObject -@ stub CoGetActivationState -@ stub CoGetApartmentID -@ stub CoGetCallState -@ stub CoGetClassVersion -@ stub CoGetErrorInfo -@ stdcall CoGetInstanceFromFile() ole32.CoGetInstanceFromFile -@ stdcall CoGetInstanceFromIStorage() ole32.CoGetInstanceFromIStorage -@ stub CoGetModuleType -@ stub CoGetProcessIdentifier -@ stub CoGetSystemSecurityPermissions -@ stdcall CoInitializeWOW() ole32.CoInitializeWOW -@ stub CoPopServiceDomain -@ stub CoPushServiceDomain -@ stub CoReactivateObject -@ stdcall CoRegisterInitializeSpy() ole32.CoRegisterInitializeSpy -@ stdcall CoRegisterMallocSpy() ole32.CoRegisterMallocSpy -@ stdcall CoRegisterMessageFilter() ole32.CoRegisterMessageFilter -@ stdcall CoRegisterSurrogateEx() ole32.CoRegisterSurrogateEx -@ stub CoRetireServer -@ stdcall CoRevokeInitializeSpy() ole32.CoRevokeInitializeSpy -@ stdcall CoRevokeMallocSpy() ole32.CoRevokeMallocSpy -@ stub CoSetErrorInfo -@ stdcall CoUnloadingWOW() ole32.CoUnloadingWOW -@ stub CoVrfCheckThreadState -@ stub CoVrfGetThreadState -@ stub CoVrfReleaseThreadState -@ stdcall DllDebugObjectRPCHook() ole32.DllDebugObjectRPCHook -@ stdcall EnableHookObject() ole32.EnableHookObject -@ stub FreePropVariantArrayWorker -@ stub GetCatalogHelper -@ stub GetFuncDescs -@ stdcall GetHookInterface() ole32.GetHookInterface -@ stub HkOleRegisterObject -@ stub InternalAppInvokeExceptionFilter -@ stub InternalCCFreeUnused -@ stub InternalCCGetClassInformationForDde -@ stub InternalCCGetClassInformationFromKey -@ stub InternalCCSetDdeServerWindow -@ stub InternalCMLSendReceive -@ stub InternalCallAsProxyExceptionFilter -@ stub InternalCallFrameExceptionFilter -@ stub InternalCallerIsAppContainer -@ stub InternalCanMakeOutCall -@ stub InternalCoIsSurrogateProcess -@ stub InternalCoRegisterDisconnectCallback -@ stub InternalCoRegisterSurrogatedObject -@ stub InternalCoStdMarshalObject -@ stub InternalCoUnregisterDisconnectCallback -@ stub InternalCompleteObjRef -@ stub InternalCreateCAggId -@ stub InternalCreateIdentityHandler -@ stub InternalDoATClassCreate -@ stub InternalFillLocalOXIDInfo -@ stub InternalFreeObjRef -@ stub InternalGetWindowPropInterface -@ stub InternalIrotEnumRunning -@ stub InternalIrotGetObject -@ stub InternalIrotGetTimeOfLastChange -@ stub InternalIrotIsRunning -@ stub InternalIrotNoteChangeTime -@ stub InternalIrotRegister -@ stub InternalIrotRevoke -@ stub InternalIsApartmentInitialized -@ stub InternalIsProcessInitialized -@ stub InternalMarshalObjRef -@ stub InternalNotifyDDStartOrStop -@ stub InternalOleModalLoopBlockFn -@ stub InternalRegisterWindowPropInterface -@ stub InternalReleaseMarshalObjRef -@ stub InternalSTAInvoke -@ stub InternalServerExceptionFilter -@ stub InternalSetAptCallCtrlOnTlsIfRequired -@ stub InternalSetOleThunkWowPtr -@ stub InternalStubInvoke -@ stub InternalTlsAllocData -@ stub InternalUnmarshalObjRef -@ stub NdrExtStubInitialize -@ stub NdrOleDllGetClassObject -@ stub NdrOleInitializeExtension -@ stub NdrpFindInterface -@ stub ReleaseFuncDescs -@ stub SetCleanupFlag -@ stdcall UpdateDCOMSettings() ole32.UpdateDCOMSettings -@ stub UpdateProcessTracing diff --git a/dll/apisets/api-ms-win-core-comm-l1-1-0.spec b/dll/apisets/api-ms-win-core-comm-l1-1-0.spec deleted file mode 100644 index 3adaa969b90..00000000000 --- a/dll/apisets/api-ms-win-core-comm-l1-1-0.spec +++ /dev/null @@ -1,21 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall ClearCommBreak() kernel32.ClearCommBreak -@ stdcall ClearCommError() kernel32.ClearCommError -@ stdcall EscapeCommFunction() kernel32.EscapeCommFunction -@ stdcall GetCommConfig() kernel32.GetCommConfig -@ stdcall GetCommMask() kernel32.GetCommMask -@ stdcall GetCommModemStatus() kernel32.GetCommModemStatus -@ stdcall GetCommProperties() kernel32.GetCommProperties -@ stdcall GetCommState() kernel32.GetCommState -@ stdcall GetCommTimeouts() kernel32.GetCommTimeouts -@ stdcall PurgeComm() kernel32.PurgeComm -@ stdcall SetCommBreak() kernel32.SetCommBreak -@ stdcall SetCommConfig() kernel32.SetCommConfig -@ stdcall SetCommMask() kernel32.SetCommMask -@ stdcall SetCommState() kernel32.SetCommState -@ stdcall SetCommTimeouts() kernel32.SetCommTimeouts -@ stdcall SetupComm() kernel32.SetupComm -@ stdcall TransmitCommChar() kernel32.TransmitCommChar -@ stdcall WaitCommEvent() kernel32.WaitCommEvent diff --git a/dll/apisets/api-ms-win-core-console-l1-1-0.spec b/dll/apisets/api-ms-win-core-console-l1-1-0.spec deleted file mode 100644 index b0ef6ebd9e4..00000000000 --- a/dll/apisets/api-ms-win-core-console-l1-1-0.spec +++ /dev/null @@ -1,17 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall AllocConsole() kernel32.AllocConsole -@ stdcall GetConsoleCP() kernel32.GetConsoleCP -@ stdcall GetConsoleMode() kernel32.GetConsoleMode -@ stdcall GetConsoleOutputCP() kernel32.GetConsoleOutputCP -@ stdcall GetNumberOfConsoleInputEvents() kernel32.GetNumberOfConsoleInputEvents -@ stdcall PeekConsoleInputA() kernel32.PeekConsoleInputA -@ stdcall ReadConsoleA() kernel32.ReadConsoleA -@ stdcall ReadConsoleInputA() kernel32.ReadConsoleInputA -@ stdcall ReadConsoleInputW() kernel32.ReadConsoleInputW -@ stdcall ReadConsoleW() kernel32.ReadConsoleW -@ stdcall SetConsoleCtrlHandler() kernel32.SetConsoleCtrlHandler -@ stdcall SetConsoleMode() kernel32.SetConsoleMode -@ stdcall WriteConsoleA() kernel32.WriteConsoleA -@ stdcall WriteConsoleW() kernel32.WriteConsoleW diff --git a/dll/apisets/api-ms-win-core-console-l2-1-0.spec b/dll/apisets/api-ms-win-core-console-l2-1-0.spec deleted file mode 100644 index fa055bfec17..00000000000 --- a/dll/apisets/api-ms-win-core-console-l2-1-0.spec +++ /dev/null @@ -1,41 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall AttachConsole() kernel32.AttachConsole -@ stdcall CreateConsoleScreenBuffer() kernel32.CreateConsoleScreenBuffer -@ stdcall FillConsoleOutputAttribute() kernel32.FillConsoleOutputAttribute -@ stdcall FillConsoleOutputCharacterA() kernel32.FillConsoleOutputCharacterA -@ stdcall FillConsoleOutputCharacterW() kernel32.FillConsoleOutputCharacterW -@ stdcall FlushConsoleInputBuffer() kernel32.FlushConsoleInputBuffer -@ stdcall FreeConsole() kernel32.FreeConsole -@ stdcall GenerateConsoleCtrlEvent() kernel32.GenerateConsoleCtrlEvent -@ stdcall GetConsoleCursorInfo() kernel32.GetConsoleCursorInfo -@ stdcall GetConsoleScreenBufferInfo() kernel32.GetConsoleScreenBufferInfo -@ stdcall -version=0x600+ GetConsoleScreenBufferInfoEx() kernel32.GetConsoleScreenBufferInfoEx -@ stdcall GetConsoleTitleW() kernel32.GetConsoleTitleW -@ stdcall GetLargestConsoleWindowSize() kernel32.GetLargestConsoleWindowSize -@ stdcall PeekConsoleInputW() kernel32.PeekConsoleInputW -@ stdcall ReadConsoleOutputA() kernel32.ReadConsoleOutputA -@ stdcall ReadConsoleOutputAttribute() kernel32.ReadConsoleOutputAttribute -@ stdcall ReadConsoleOutputCharacterA() kernel32.ReadConsoleOutputCharacterA -@ stdcall ReadConsoleOutputCharacterW() kernel32.ReadConsoleOutputCharacterW -@ stdcall ReadConsoleOutputW() kernel32.ReadConsoleOutputW -@ stdcall ScrollConsoleScreenBufferA() kernel32.ScrollConsoleScreenBufferA -@ stdcall ScrollConsoleScreenBufferW() kernel32.ScrollConsoleScreenBufferW -@ stdcall SetConsoleActiveScreenBuffer() kernel32.SetConsoleActiveScreenBuffer -@ stdcall SetConsoleCP() kernel32.SetConsoleCP -@ stdcall SetConsoleCursorInfo() kernel32.SetConsoleCursorInfo -@ stdcall SetConsoleCursorPosition() kernel32.SetConsoleCursorPosition -@ stdcall SetConsoleOutputCP() kernel32.SetConsoleOutputCP -@ stdcall -version=0x600+ SetConsoleScreenBufferInfoEx() kernel32.SetConsoleScreenBufferInfoEx -@ stdcall SetConsoleScreenBufferSize() kernel32.SetConsoleScreenBufferSize -@ stdcall SetConsoleTextAttribute() kernel32.SetConsoleTextAttribute -@ stdcall SetConsoleTitleW() kernel32.SetConsoleTitleW -@ stdcall SetConsoleWindowInfo() kernel32.SetConsoleWindowInfo -@ stdcall WriteConsoleInputA() kernel32.WriteConsoleInputA -@ stdcall WriteConsoleInputW() kernel32.WriteConsoleInputW -@ stdcall WriteConsoleOutputA() kernel32.WriteConsoleOutputA -@ stdcall WriteConsoleOutputAttribute() kernel32.WriteConsoleOutputAttribute -@ stdcall WriteConsoleOutputCharacterA() kernel32.WriteConsoleOutputCharacterA -@ stdcall WriteConsoleOutputCharacterW() kernel32.WriteConsoleOutputCharacterW -@ stdcall WriteConsoleOutputW() kernel32.WriteConsoleOutputW diff --git a/dll/apisets/api-ms-win-core-crt-l1-1-0.spec b/dll/apisets/api-ms-win-core-crt-l1-1-0.spec deleted file mode 100644 index cc4fac52863..00000000000 --- a/dll/apisets/api-ms-win-core-crt-l1-1-0.spec +++ /dev/null @@ -1,106 +0,0 @@ - -# This file is autogenerated by update.py - -@ cdecl -arch=x86_64,arm __C_specific_handler() msvcrt.__C_specific_handler -@ stdcall __isascii() msvcrt.__isascii -@ stdcall _atoi64() msvcrt._atoi64 -@ stdcall _errno() msvcrt._errno -@ stdcall -version=0x600+ -arch=i386 _except_handler4_common() msvcrt._except_handler4_common -@ stdcall -arch=i386,x86_64,arm _fltused() ntdll._fltused -@ stdcall -arch=i386 _ftol() msvcrt._ftol -@ cdecl -version=0x600+ -arch=i386 _ftol2() msvcrt._ftol2 -@ cdecl -version=0x600+ -arch=i386 _ftol2_sse() msvcrt._ftol2_sse -@ stub _i64tow_s -@ stub _itow_s -@ cdecl -arch=x86_64 _local_unwind() msvcrt._local_unwind -@ stdcall -version=0x600+ -arch=i386 _local_unwind4() msvcrt._local_unwind4 -@ stub _ltow_s -@ cdecl -arch=x86_64 _setjmp() msvcrt._setjmp -@ cdecl -arch=x86_64 _setjmpex() msvcrt._setjmpex -@ stub _snprintf_s -@ stub _snwprintf_s -@ stub _splitpath_s -@ stdcall _stricmp() msvcrt._stricmp -@ stub _strlwr_s -@ stdcall _strnicmp() msvcrt._strnicmp -@ stub _strupr_s -@ stub _ui64tow_s -@ stdcall _ultow() msvcrt._ultow -@ stub _ultow_s -@ stub _vsnprintf_s -@ stub _vsnwprintf_s -@ stdcall _wcsicmp() msvcrt._wcsicmp -@ stub _wcslwr_s -@ stdcall _wcsnicmp() msvcrt._wcsnicmp -@ stdcall _wcstoi64() msvcrt._wcstoi64 -@ stdcall _wcstoui64() msvcrt._wcstoui64 -@ stub _wcsupr_s -@ stub _wsplitpath_s -@ stdcall _wtoi() msvcrt._wtoi -@ stdcall _wtoi64() msvcrt._wtoi64 -@ stdcall _wtol() msvcrt._wtol -@ stdcall atoi() msvcrt.atoi -@ stdcall atol() msvcrt.atol -@ stdcall isalnum() msvcrt.isalnum -@ stdcall isdigit() msvcrt.isdigit -@ stdcall isgraph() msvcrt.isgraph -@ stdcall islower() msvcrt.islower -@ stdcall isprint() msvcrt.isprint -@ stdcall isspace() msvcrt.isspace -@ stdcall isupper() msvcrt.isupper -@ stdcall iswalnum() msvcrt.iswalnum -@ stdcall iswascii() msvcrt.iswascii -@ stdcall iswctype() msvcrt.iswctype -@ stdcall iswdigit() msvcrt.iswdigit -@ stdcall iswgraph() msvcrt.iswgraph -@ stdcall iswprint() msvcrt.iswprint -@ stdcall iswspace() msvcrt.iswspace -@ cdecl -arch=x86_64 longjmp() msvcrt.longjmp -@ stdcall memcmp() msvcrt.memcmp -@ stdcall memcpy() msvcrt.memcpy -@ stub memcpy_s -@ stdcall memmove() msvcrt.memmove -@ stub memmove_s -@ stdcall memset() msvcrt.memset -@ stub qsort_s -@ stub sprintf_s -@ stub sscanf_s -@ stub strcat_s -@ stdcall strchr() msvcrt.strchr -@ stdcall strcmp() msvcrt.strcmp -@ stub strcpy_s -@ stdcall strcspn() msvcrt.strcspn -@ stdcall strlen() msvcrt.strlen -@ stub strncat_s -@ stdcall strncmp() msvcrt.strncmp -@ stub strncpy_s -@ stub strnlen -@ stdcall strpbrk() msvcrt.strpbrk -@ stdcall strrchr() msvcrt.strrchr -@ stdcall strstr() msvcrt.strstr -@ stub strtok_s -@ stdcall strtol() msvcrt.strtol -@ stdcall strtoul() msvcrt.strtoul -@ stub swprintf_s -@ stdcall tolower() msvcrt.tolower -@ stdcall toupper() msvcrt.toupper -@ stdcall towlower() msvcrt.towlower -@ stdcall towupper() msvcrt.towupper -@ stub vsprintf_s -@ stub vswprintf_s -@ stub wcscat_s -@ stdcall wcschr() msvcrt.wcschr -@ stdcall wcscmp() msvcrt.wcscmp -@ stub wcscpy_s -@ stdcall wcscspn() msvcrt.wcscspn -@ stdcall wcslen() msvcrt.wcslen -@ stub wcsncat_s -@ stdcall wcsncmp() msvcrt.wcsncmp -@ stub wcsncpy_s -@ stub wcsnlen -@ stdcall wcspbrk() msvcrt.wcspbrk -@ stdcall wcsrchr() msvcrt.wcsrchr -@ stdcall wcsstr() msvcrt.wcsstr -@ stub wcstok_s -@ stdcall wcstol() msvcrt.wcstol -@ stdcall wcstoul() msvcrt.wcstoul diff --git a/dll/apisets/api-ms-win-core-crt-l2-1-0.spec b/dll/apisets/api-ms-win-core-crt-l2-1-0.spec deleted file mode 100644 index 3acd1f58dbe..00000000000 --- a/dll/apisets/api-ms-win-core-crt-l2-1-0.spec +++ /dev/null @@ -1,21 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub __dllonexit3 -@ stdcall __wgetmainargs() msvcrt.__wgetmainargs -@ stdcall _amsg_exit() msvcrt._amsg_exit -@ stdcall _c_exit() msvcrt._c_exit -@ stdcall _cexit() msvcrt._cexit -@ stdcall _exit() msvcrt._exit -@ stdcall _initterm() msvcrt._initterm -@ stub _initterm_e -@ stub _invalid_parameter -@ stdcall _onexit() msvcrt._onexit -@ stdcall _purecall() msvcrt._purecall -@ stdcall _time64() msvcrt._time64 -@ extern -stub atexit msvcrt.atexit # the -stub is a HACK to fix VS < 2017 build! -@ stdcall exit() msvcrt.exit -@ stub hgets -@ stub hwprintf -@ stdcall time() msvcrt.time -@ stdcall wprintf() msvcrt.wprintf diff --git a/dll/apisets/api-ms-win-core-datetime-l1-1-0.spec b/dll/apisets/api-ms-win-core-datetime-l1-1-0.spec deleted file mode 100644 index 23f50d0a643..00000000000 --- a/dll/apisets/api-ms-win-core-datetime-l1-1-0.spec +++ /dev/null @@ -1,7 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall GetDateFormatA() kernel32.GetDateFormatA -@ stdcall GetDateFormatW() kernel32.GetDateFormatW -@ stdcall GetTimeFormatA() kernel32.GetTimeFormatA -@ stdcall GetTimeFormatW() kernel32.GetTimeFormatW diff --git a/dll/apisets/api-ms-win-core-datetime-l1-1-1.spec b/dll/apisets/api-ms-win-core-datetime-l1-1-1.spec deleted file mode 100644 index c36d6ce96c8..00000000000 --- a/dll/apisets/api-ms-win-core-datetime-l1-1-1.spec +++ /dev/null @@ -1,9 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall GetDateFormatA() kernel32.GetDateFormatA -@ stdcall -version=0x600+ GetDateFormatEx() kernel32.GetDateFormatEx -@ stdcall GetDateFormatW() kernel32.GetDateFormatW -@ stdcall GetTimeFormatA() kernel32.GetTimeFormatA -@ stdcall -version=0x600+ GetTimeFormatEx() kernel32.GetTimeFormatEx -@ stdcall GetTimeFormatW() kernel32.GetTimeFormatW diff --git a/dll/apisets/api-ms-win-core-debug-l1-1-0.spec b/dll/apisets/api-ms-win-core-debug-l1-1-0.spec deleted file mode 100644 index 40678465432..00000000000 --- a/dll/apisets/api-ms-win-core-debug-l1-1-0.spec +++ /dev/null @@ -1,7 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall DebugBreak() kernel32.DebugBreak -@ stdcall IsDebuggerPresent() kernel32.IsDebuggerPresent -@ stdcall OutputDebugStringA() kernel32.OutputDebugStringA -@ stdcall OutputDebugStringW() kernel32.OutputDebugStringW diff --git a/dll/apisets/api-ms-win-core-debug-l1-1-1.spec b/dll/apisets/api-ms-win-core-debug-l1-1-1.spec deleted file mode 100644 index e7c216006d1..00000000000 --- a/dll/apisets/api-ms-win-core-debug-l1-1-1.spec +++ /dev/null @@ -1,12 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CheckRemoteDebuggerPresent() kernel32.CheckRemoteDebuggerPresent -@ stdcall ContinueDebugEvent() kernel32.ContinueDebugEvent -@ stdcall DebugActiveProcess() kernel32.DebugActiveProcess -@ stdcall DebugActiveProcessStop() kernel32.DebugActiveProcessStop -@ stdcall DebugBreak() kernel32.DebugBreak -@ stdcall IsDebuggerPresent() kernel32.IsDebuggerPresent -@ stdcall OutputDebugStringA() kernel32.OutputDebugStringA -@ stdcall OutputDebugStringW() kernel32.OutputDebugStringW -@ stdcall WaitForDebugEvent() kernel32.WaitForDebugEvent diff --git a/dll/apisets/api-ms-win-core-delayload-l1-1-0.spec b/dll/apisets/api-ms-win-core-delayload-l1-1-0.spec deleted file mode 100644 index 61d02c0c4fd..00000000000 --- a/dll/apisets/api-ms-win-core-delayload-l1-1-0.spec +++ /dev/null @@ -1,4 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall DelayLoadFailureHook() kernel32.DelayLoadFailureHook diff --git a/dll/apisets/api-ms-win-core-delayload-l1-1-1.spec b/dll/apisets/api-ms-win-core-delayload-l1-1-1.spec deleted file mode 100644 index 70ea23420b9..00000000000 --- a/dll/apisets/api-ms-win-core-delayload-l1-1-1.spec +++ /dev/null @@ -1,6 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall DelayLoadFailureHook() kernel32.DelayLoadFailureHook -@ stub ResolveDelayLoadedAPI -@ stub ResolveDelayLoadsFromDll diff --git a/dll/apisets/api-ms-win-core-errorhandling-l1-1-0.spec b/dll/apisets/api-ms-win-core-errorhandling-l1-1-0.spec deleted file mode 100644 index 88c14236cf5..00000000000 --- a/dll/apisets/api-ms-win-core-errorhandling-l1-1-0.spec +++ /dev/null @@ -1,10 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall -version=0x600+ GetErrorMode() kernel32.GetErrorMode -@ stdcall GetLastError() kernel32.GetLastError -@ stdcall RaiseException() kernel32.RaiseException -@ stdcall SetErrorMode() kernel32.SetErrorMode -@ stdcall SetLastError() kernel32.SetLastError -@ stdcall SetUnhandledExceptionFilter() kernel32.SetUnhandledExceptionFilter -@ stdcall UnhandledExceptionFilter() kernel32.UnhandledExceptionFilter diff --git a/dll/apisets/api-ms-win-core-errorhandling-l1-1-1.spec b/dll/apisets/api-ms-win-core-errorhandling-l1-1-1.spec deleted file mode 100644 index 0b1514f6b0b..00000000000 --- a/dll/apisets/api-ms-win-core-errorhandling-l1-1-1.spec +++ /dev/null @@ -1,15 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall AddVectoredContinueHandler() kernel32.AddVectoredContinueHandler -@ stdcall AddVectoredExceptionHandler() kernel32.AddVectoredExceptionHandler -@ stdcall -version=0x600+ GetErrorMode() kernel32.GetErrorMode -@ stdcall GetLastError() kernel32.GetLastError -@ stdcall RaiseException() kernel32.RaiseException -@ stdcall RemoveVectoredContinueHandler() kernel32.RemoveVectoredContinueHandler -@ stdcall RemoveVectoredExceptionHandler() kernel32.RemoveVectoredExceptionHandler -@ stdcall RestoreLastError() kernel32.RestoreLastError -@ stdcall SetErrorMode() kernel32.SetErrorMode -@ stdcall SetLastError() kernel32.SetLastError -@ stdcall SetUnhandledExceptionFilter() kernel32.SetUnhandledExceptionFilter -@ stdcall UnhandledExceptionFilter() kernel32.UnhandledExceptionFilter diff --git a/dll/apisets/api-ms-win-core-errorhandling-l1-1-2.spec b/dll/apisets/api-ms-win-core-errorhandling-l1-1-2.spec deleted file mode 100644 index 3a85ddef617..00000000000 --- a/dll/apisets/api-ms-win-core-errorhandling-l1-1-2.spec +++ /dev/null @@ -1,16 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall AddVectoredContinueHandler() kernel32.AddVectoredContinueHandler -@ stdcall AddVectoredExceptionHandler() kernel32.AddVectoredExceptionHandler -@ stdcall -version=0x600+ GetErrorMode() kernel32.GetErrorMode -@ stdcall GetLastError() kernel32.GetLastError -@ stdcall RaiseException() kernel32.RaiseException -@ stub RaiseFailFastException -@ stdcall RemoveVectoredContinueHandler() kernel32.RemoveVectoredContinueHandler -@ stdcall RemoveVectoredExceptionHandler() kernel32.RemoveVectoredExceptionHandler -@ stdcall RestoreLastError() kernel32.RestoreLastError -@ stdcall SetErrorMode() kernel32.SetErrorMode -@ stdcall SetLastError() kernel32.SetLastError -@ stdcall SetUnhandledExceptionFilter() kernel32.SetUnhandledExceptionFilter -@ stdcall UnhandledExceptionFilter() kernel32.UnhandledExceptionFilter diff --git a/dll/apisets/api-ms-win-core-errorhandling-l1-1-3.spec b/dll/apisets/api-ms-win-core-errorhandling-l1-1-3.spec deleted file mode 100644 index c8991ec8815..00000000000 --- a/dll/apisets/api-ms-win-core-errorhandling-l1-1-3.spec +++ /dev/null @@ -1,19 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall AddVectoredContinueHandler() kernel32.AddVectoredContinueHandler -@ stdcall AddVectoredExceptionHandler() kernel32.AddVectoredExceptionHandler -@ stdcall FatalAppExitA() kernel32.FatalAppExitA -@ stdcall FatalAppExitW() kernel32.FatalAppExitW -@ stdcall -version=0x600+ GetErrorMode() kernel32.GetErrorMode -@ stdcall GetLastError() kernel32.GetLastError -@ stub GetThreadErrorMode -@ stdcall RaiseException() kernel32.RaiseException -@ stub RaiseFailFastException -@ stdcall RemoveVectoredContinueHandler() kernel32.RemoveVectoredContinueHandler -@ stdcall RemoveVectoredExceptionHandler() kernel32.RemoveVectoredExceptionHandler -@ stdcall SetErrorMode() kernel32.SetErrorMode -@ stdcall SetLastError() kernel32.SetLastError -@ stub SetThreadErrorMode -@ stdcall SetUnhandledExceptionFilter() kernel32.SetUnhandledExceptionFilter -@ stdcall UnhandledExceptionFilter() kernel32.UnhandledExceptionFilter diff --git a/dll/apisets/api-ms-win-core-fibers-l1-1-0.spec b/dll/apisets/api-ms-win-core-fibers-l1-1-0.spec deleted file mode 100644 index 4c4d859ad5e..00000000000 --- a/dll/apisets/api-ms-win-core-fibers-l1-1-0.spec +++ /dev/null @@ -1,7 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall FlsAlloc() kernel32.FlsAlloc -@ stdcall FlsFree() kernel32.FlsFree -@ stdcall FlsGetValue() kernel32.FlsGetValue -@ stdcall FlsSetValue() kernel32.FlsSetValue diff --git a/dll/apisets/api-ms-win-core-fibers-l1-1-1.spec b/dll/apisets/api-ms-win-core-fibers-l1-1-1.spec deleted file mode 100644 index 5cfa6f3e81f..00000000000 --- a/dll/apisets/api-ms-win-core-fibers-l1-1-1.spec +++ /dev/null @@ -1,8 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall FlsAlloc() kernel32.FlsAlloc -@ stdcall FlsFree() kernel32.FlsFree -@ stdcall FlsGetValue() kernel32.FlsGetValue -@ stdcall FlsSetValue() kernel32.FlsSetValue -@ stdcall -version=0x600+ IsThreadAFiber() kernel32.IsThreadAFiber diff --git a/dll/apisets/api-ms-win-core-file-l1-1-0.spec b/dll/apisets/api-ms-win-core-file-l1-1-0.spec deleted file mode 100644 index 92ea4ff5d00..00000000000 --- a/dll/apisets/api-ms-win-core-file-l1-1-0.spec +++ /dev/null @@ -1,79 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CompareFileTime() kernel32.CompareFileTime -@ stdcall CreateDirectoryA() kernel32.CreateDirectoryA -@ stdcall CreateDirectoryW() kernel32.CreateDirectoryW -@ stdcall CreateFileA() kernel32.CreateFileA -@ stdcall CreateFileW() kernel32.CreateFileW -@ stdcall DefineDosDeviceW() kernel32.DefineDosDeviceW -@ stdcall DeleteFileA() kernel32.DeleteFileA -@ stdcall DeleteFileW() kernel32.DeleteFileW -@ stdcall DeleteVolumeMountPointW() kernel32.DeleteVolumeMountPointW -@ stdcall FileTimeToLocalFileTime() kernel32.FileTimeToLocalFileTime -@ stdcall FileTimeToSystemTime() kernel32.FileTimeToSystemTime -@ stdcall FindClose() kernel32.FindClose -@ stdcall FindCloseChangeNotification() kernel32.FindCloseChangeNotification -@ stdcall FindFirstChangeNotificationA() kernel32.FindFirstChangeNotificationA -@ stdcall FindFirstChangeNotificationW() kernel32.FindFirstChangeNotificationW -@ stdcall FindFirstFileA() kernel32.FindFirstFileA -@ stdcall FindFirstFileExA() kernel32.FindFirstFileExA -@ stdcall FindFirstFileExW() kernel32.FindFirstFileExW -@ stdcall FindFirstFileW() kernel32.FindFirstFileW -@ stdcall FindFirstVolumeW() kernel32.FindFirstVolumeW -@ stdcall FindNextChangeNotification() kernel32.FindNextChangeNotification -@ stdcall FindNextFileA() kernel32.FindNextFileA -@ stdcall FindNextFileW() kernel32.FindNextFileW -@ stdcall FindNextVolumeW() kernel32.FindNextVolumeW -@ stdcall FindVolumeClose() kernel32.FindVolumeClose -@ stdcall FlushFileBuffers() kernel32.FlushFileBuffers -@ stdcall GetDiskFreeSpaceA() kernel32.GetDiskFreeSpaceA -@ stdcall GetDiskFreeSpaceExA() kernel32.GetDiskFreeSpaceExA -@ stdcall GetDiskFreeSpaceExW() kernel32.GetDiskFreeSpaceExW -@ stdcall GetDiskFreeSpaceW() kernel32.GetDiskFreeSpaceW -@ stdcall GetDriveTypeA() kernel32.GetDriveTypeA -@ stdcall GetDriveTypeW() kernel32.GetDriveTypeW -@ stdcall GetFileAttributesA() kernel32.GetFileAttributesA -@ stdcall GetFileAttributesExA() kernel32.GetFileAttributesExA -@ stdcall GetFileAttributesExW() kernel32.GetFileAttributesExW -@ stdcall GetFileAttributesW() kernel32.GetFileAttributesW -@ stdcall GetFileInformationByHandle() kernel32.GetFileInformationByHandle -@ stdcall GetFileSize() kernel32.GetFileSize -@ stdcall GetFileSizeEx() kernel32.GetFileSizeEx -@ stdcall GetFileTime() kernel32.GetFileTime -@ stdcall GetFileType() kernel32.GetFileType -@ stdcall -version=0x600+ GetFinalPathNameByHandleA() kernel32.GetFinalPathNameByHandleA -@ stdcall -version=0x600+ GetFinalPathNameByHandleW() kernel32.GetFinalPathNameByHandleW -@ stdcall GetFullPathNameA() kernel32.GetFullPathNameA -@ stdcall GetFullPathNameW() kernel32.GetFullPathNameW -@ stdcall GetLogicalDriveStringsW() kernel32.GetLogicalDriveStringsW -@ stdcall GetLogicalDrives() kernel32.GetLogicalDrives -@ stdcall GetLongPathNameA() kernel32.GetLongPathNameA -@ stdcall GetLongPathNameW() kernel32.GetLongPathNameW -@ stdcall GetShortPathNameW() kernel32.GetShortPathNameW -@ stdcall GetTempFileNameW() kernel32.GetTempFileNameW -@ stdcall -version=0x600+ GetVolumeInformationByHandleW() kernel32.GetVolumeInformationByHandleW -@ stdcall GetVolumeInformationW() kernel32.GetVolumeInformationW -@ stdcall GetVolumePathNameW() kernel32.GetVolumePathNameW -@ stdcall LocalFileTimeToFileTime() kernel32.LocalFileTimeToFileTime -@ stdcall LockFile() kernel32.LockFile -@ stdcall LockFileEx() kernel32.LockFileEx -@ stdcall QueryDosDeviceW() kernel32.QueryDosDeviceW -@ stdcall ReadFile() kernel32.ReadFile -@ stdcall ReadFileEx() kernel32.ReadFileEx -@ stdcall ReadFileScatter() kernel32.ReadFileScatter -@ stdcall RemoveDirectoryA() kernel32.RemoveDirectoryA -@ stdcall RemoveDirectoryW() kernel32.RemoveDirectoryW -@ stdcall SetEndOfFile() kernel32.SetEndOfFile -@ stdcall SetFileAttributesA() kernel32.SetFileAttributesA -@ stdcall SetFileAttributesW() kernel32.SetFileAttributesW -@ stdcall -version=0x600+ SetFileInformationByHandle() kernel32.SetFileInformationByHandle -@ stdcall SetFilePointer() kernel32.SetFilePointer -@ stdcall SetFilePointerEx() kernel32.SetFilePointerEx -@ stdcall SetFileTime() kernel32.SetFileTime -@ stdcall SetFileValidData() kernel32.SetFileValidData -@ stdcall UnlockFile() kernel32.UnlockFile -@ stdcall UnlockFileEx() kernel32.UnlockFileEx -@ stdcall WriteFile() kernel32.WriteFile -@ stdcall WriteFileEx() kernel32.WriteFileEx -@ stdcall WriteFileGather() kernel32.WriteFileGather diff --git a/dll/apisets/api-ms-win-core-file-l1-2-0.spec b/dll/apisets/api-ms-win-core-file-l1-2-0.spec deleted file mode 100644 index 0420e9e09d7..00000000000 --- a/dll/apisets/api-ms-win-core-file-l1-2-0.spec +++ /dev/null @@ -1,82 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CompareFileTime() kernel32.CompareFileTime -@ stdcall CreateDirectoryA() kernel32.CreateDirectoryA -@ stdcall CreateDirectoryW() kernel32.CreateDirectoryW -@ stub CreateFile2 -@ stdcall CreateFileA() kernel32.CreateFileA -@ stdcall CreateFileW() kernel32.CreateFileW -@ stdcall DefineDosDeviceW() kernel32.DefineDosDeviceW -@ stdcall DeleteFileA() kernel32.DeleteFileA -@ stdcall DeleteFileW() kernel32.DeleteFileW -@ stdcall DeleteVolumeMountPointW() kernel32.DeleteVolumeMountPointW -@ stdcall FileTimeToLocalFileTime() kernel32.FileTimeToLocalFileTime -@ stdcall FindClose() kernel32.FindClose -@ stdcall FindCloseChangeNotification() kernel32.FindCloseChangeNotification -@ stdcall FindFirstChangeNotificationA() kernel32.FindFirstChangeNotificationA -@ stdcall FindFirstChangeNotificationW() kernel32.FindFirstChangeNotificationW -@ stdcall FindFirstFileA() kernel32.FindFirstFileA -@ stdcall FindFirstFileExA() kernel32.FindFirstFileExA -@ stdcall FindFirstFileExW() kernel32.FindFirstFileExW -@ stdcall FindFirstFileW() kernel32.FindFirstFileW -@ stdcall FindFirstVolumeW() kernel32.FindFirstVolumeW -@ stdcall FindNextChangeNotification() kernel32.FindNextChangeNotification -@ stdcall FindNextFileA() kernel32.FindNextFileA -@ stdcall FindNextFileW() kernel32.FindNextFileW -@ stdcall FindNextVolumeW() kernel32.FindNextVolumeW -@ stdcall FindVolumeClose() kernel32.FindVolumeClose -@ stdcall FlushFileBuffers() kernel32.FlushFileBuffers -@ stdcall GetDiskFreeSpaceA() kernel32.GetDiskFreeSpaceA -@ stdcall GetDiskFreeSpaceExA() kernel32.GetDiskFreeSpaceExA -@ stdcall GetDiskFreeSpaceExW() kernel32.GetDiskFreeSpaceExW -@ stdcall GetDiskFreeSpaceW() kernel32.GetDiskFreeSpaceW -@ stdcall GetDriveTypeA() kernel32.GetDriveTypeA -@ stdcall GetDriveTypeW() kernel32.GetDriveTypeW -@ stdcall GetFileAttributesA() kernel32.GetFileAttributesA -@ stdcall GetFileAttributesExA() kernel32.GetFileAttributesExA -@ stdcall GetFileAttributesExW() kernel32.GetFileAttributesExW -@ stdcall GetFileAttributesW() kernel32.GetFileAttributesW -@ stdcall GetFileInformationByHandle() kernel32.GetFileInformationByHandle -@ stdcall GetFileSize() kernel32.GetFileSize -@ stdcall GetFileSizeEx() kernel32.GetFileSizeEx -@ stdcall GetFileTime() kernel32.GetFileTime -@ stdcall GetFileType() kernel32.GetFileType -@ stdcall -version=0x600+ GetFinalPathNameByHandleA() kernel32.GetFinalPathNameByHandleA -@ stdcall -version=0x600+ GetFinalPathNameByHandleW() kernel32.GetFinalPathNameByHandleW -@ stdcall GetFullPathNameA() kernel32.GetFullPathNameA -@ stdcall GetFullPathNameW() kernel32.GetFullPathNameW -@ stdcall GetLogicalDriveStringsW() kernel32.GetLogicalDriveStringsW -@ stdcall GetLogicalDrives() kernel32.GetLogicalDrives -@ stdcall GetLongPathNameA() kernel32.GetLongPathNameA -@ stdcall GetLongPathNameW() kernel32.GetLongPathNameW -@ stdcall GetShortPathNameW() kernel32.GetShortPathNameW -@ stdcall GetTempFileNameW() kernel32.GetTempFileNameW -@ stdcall GetTempPathW() kernel32.GetTempPathW -@ stdcall -version=0x600+ GetVolumeInformationByHandleW() kernel32.GetVolumeInformationByHandleW -@ stdcall GetVolumeInformationW() kernel32.GetVolumeInformationW -@ stdcall GetVolumeNameForVolumeMountPointW() kernel32.GetVolumeNameForVolumeMountPointW -@ stdcall GetVolumePathNameW() kernel32.GetVolumePathNameW -@ stdcall GetVolumePathNamesForVolumeNameW() kernel32.GetVolumePathNamesForVolumeNameW -@ stdcall LocalFileTimeToFileTime() kernel32.LocalFileTimeToFileTime -@ stdcall LockFile() kernel32.LockFile -@ stdcall LockFileEx() kernel32.LockFileEx -@ stdcall QueryDosDeviceW() kernel32.QueryDosDeviceW -@ stdcall ReadFile() kernel32.ReadFile -@ stdcall ReadFileEx() kernel32.ReadFileEx -@ stdcall ReadFileScatter() kernel32.ReadFileScatter -@ stdcall RemoveDirectoryA() kernel32.RemoveDirectoryA -@ stdcall RemoveDirectoryW() kernel32.RemoveDirectoryW -@ stdcall SetEndOfFile() kernel32.SetEndOfFile -@ stdcall SetFileAttributesA() kernel32.SetFileAttributesA -@ stdcall SetFileAttributesW() kernel32.SetFileAttributesW -@ stdcall -version=0x600+ SetFileInformationByHandle() kernel32.SetFileInformationByHandle -@ stdcall SetFilePointer() kernel32.SetFilePointer -@ stdcall SetFilePointerEx() kernel32.SetFilePointerEx -@ stdcall SetFileTime() kernel32.SetFileTime -@ stdcall SetFileValidData() kernel32.SetFileValidData -@ stdcall UnlockFile() kernel32.UnlockFile -@ stdcall UnlockFileEx() kernel32.UnlockFileEx -@ stdcall WriteFile() kernel32.WriteFile -@ stdcall WriteFileEx() kernel32.WriteFileEx -@ stdcall WriteFileGather() kernel32.WriteFileGather diff --git a/dll/apisets/api-ms-win-core-file-l1-2-1.spec b/dll/apisets/api-ms-win-core-file-l1-2-1.spec deleted file mode 100644 index b7c3305b14c..00000000000 --- a/dll/apisets/api-ms-win-core-file-l1-2-1.spec +++ /dev/null @@ -1,85 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CompareFileTime() kernel32.CompareFileTime -@ stdcall CreateDirectoryA() kernel32.CreateDirectoryA -@ stdcall CreateDirectoryW() kernel32.CreateDirectoryW -@ stub CreateFile2 -@ stdcall CreateFileA() kernel32.CreateFileA -@ stdcall CreateFileW() kernel32.CreateFileW -@ stdcall DefineDosDeviceW() kernel32.DefineDosDeviceW -@ stdcall DeleteFileA() kernel32.DeleteFileA -@ stdcall DeleteFileW() kernel32.DeleteFileW -@ stdcall DeleteVolumeMountPointW() kernel32.DeleteVolumeMountPointW -@ stdcall FileTimeToLocalFileTime() kernel32.FileTimeToLocalFileTime -@ stdcall FindClose() kernel32.FindClose -@ stdcall FindCloseChangeNotification() kernel32.FindCloseChangeNotification -@ stdcall FindFirstChangeNotificationA() kernel32.FindFirstChangeNotificationA -@ stdcall FindFirstChangeNotificationW() kernel32.FindFirstChangeNotificationW -@ stdcall FindFirstFileA() kernel32.FindFirstFileA -@ stdcall FindFirstFileExA() kernel32.FindFirstFileExA -@ stdcall FindFirstFileExW() kernel32.FindFirstFileExW -@ stdcall FindFirstFileW() kernel32.FindFirstFileW -@ stdcall FindFirstVolumeW() kernel32.FindFirstVolumeW -@ stdcall FindNextChangeNotification() kernel32.FindNextChangeNotification -@ stdcall FindNextFileA() kernel32.FindNextFileA -@ stdcall FindNextFileW() kernel32.FindNextFileW -@ stdcall FindNextVolumeW() kernel32.FindNextVolumeW -@ stdcall FindVolumeClose() kernel32.FindVolumeClose -@ stdcall FlushFileBuffers() kernel32.FlushFileBuffers -@ stdcall GetCompressedFileSizeA() kernel32.GetCompressedFileSizeA -@ stdcall GetCompressedFileSizeW() kernel32.GetCompressedFileSizeW -@ stdcall GetDiskFreeSpaceA() kernel32.GetDiskFreeSpaceA -@ stdcall GetDiskFreeSpaceExA() kernel32.GetDiskFreeSpaceExA -@ stdcall GetDiskFreeSpaceExW() kernel32.GetDiskFreeSpaceExW -@ stdcall GetDiskFreeSpaceW() kernel32.GetDiskFreeSpaceW -@ stdcall GetDriveTypeA() kernel32.GetDriveTypeA -@ stdcall GetDriveTypeW() kernel32.GetDriveTypeW -@ stdcall GetFileAttributesA() kernel32.GetFileAttributesA -@ stdcall GetFileAttributesExA() kernel32.GetFileAttributesExA -@ stdcall GetFileAttributesExW() kernel32.GetFileAttributesExW -@ stdcall GetFileAttributesW() kernel32.GetFileAttributesW -@ stdcall GetFileInformationByHandle() kernel32.GetFileInformationByHandle -@ stdcall GetFileSize() kernel32.GetFileSize -@ stdcall GetFileSizeEx() kernel32.GetFileSizeEx -@ stdcall GetFileTime() kernel32.GetFileTime -@ stdcall GetFileType() kernel32.GetFileType -@ stdcall -version=0x600+ GetFinalPathNameByHandleA() kernel32.GetFinalPathNameByHandleA -@ stdcall -version=0x600+ GetFinalPathNameByHandleW() kernel32.GetFinalPathNameByHandleW -@ stdcall GetFullPathNameA() kernel32.GetFullPathNameA -@ stdcall GetFullPathNameW() kernel32.GetFullPathNameW -@ stdcall GetLogicalDriveStringsW() kernel32.GetLogicalDriveStringsW -@ stdcall GetLogicalDrives() kernel32.GetLogicalDrives -@ stdcall GetLongPathNameA() kernel32.GetLongPathNameA -@ stdcall GetLongPathNameW() kernel32.GetLongPathNameW -@ stdcall GetShortPathNameW() kernel32.GetShortPathNameW -@ stdcall GetTempFileNameW() kernel32.GetTempFileNameW -@ stdcall GetTempPathW() kernel32.GetTempPathW -@ stdcall -version=0x600+ GetVolumeInformationByHandleW() kernel32.GetVolumeInformationByHandleW -@ stdcall GetVolumeInformationW() kernel32.GetVolumeInformationW -@ stdcall GetVolumeNameForVolumeMountPointW() kernel32.GetVolumeNameForVolumeMountPointW -@ stdcall GetVolumePathNameW() kernel32.GetVolumePathNameW -@ stdcall GetVolumePathNamesForVolumeNameW() kernel32.GetVolumePathNamesForVolumeNameW -@ stdcall LocalFileTimeToFileTime() kernel32.LocalFileTimeToFileTime -@ stdcall LockFile() kernel32.LockFile -@ stdcall LockFileEx() kernel32.LockFileEx -@ stdcall QueryDosDeviceW() kernel32.QueryDosDeviceW -@ stdcall ReadFile() kernel32.ReadFile -@ stdcall ReadFileEx() kernel32.ReadFileEx -@ stdcall ReadFileScatter() kernel32.ReadFileScatter -@ stdcall RemoveDirectoryA() kernel32.RemoveDirectoryA -@ stdcall RemoveDirectoryW() kernel32.RemoveDirectoryW -@ stdcall SetEndOfFile() kernel32.SetEndOfFile -@ stdcall SetFileAttributesA() kernel32.SetFileAttributesA -@ stdcall SetFileAttributesW() kernel32.SetFileAttributesW -@ stdcall -version=0x600+ SetFileInformationByHandle() kernel32.SetFileInformationByHandle -@ stdcall -version=0x600+ SetFileIoOverlappedRange() kernel32.SetFileIoOverlappedRange -@ stdcall SetFilePointer() kernel32.SetFilePointer -@ stdcall SetFilePointerEx() kernel32.SetFilePointerEx -@ stdcall SetFileTime() kernel32.SetFileTime -@ stdcall SetFileValidData() kernel32.SetFileValidData -@ stdcall UnlockFile() kernel32.UnlockFile -@ stdcall UnlockFileEx() kernel32.UnlockFileEx -@ stdcall WriteFile() kernel32.WriteFile -@ stdcall WriteFileEx() kernel32.WriteFileEx -@ stdcall WriteFileGather() kernel32.WriteFileGather diff --git a/dll/apisets/api-ms-win-core-file-l1-2-2.spec b/dll/apisets/api-ms-win-core-file-l1-2-2.spec deleted file mode 100644 index 237249d7175..00000000000 --- a/dll/apisets/api-ms-win-core-file-l1-2-2.spec +++ /dev/null @@ -1,13 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall AreFileApisANSI() kernel32.AreFileApisANSI -@ stdcall -version=0x600+ FindFirstFileNameW() kernel32.FindFirstFileNameW -@ stdcall FindFirstStreamW() kernel32.FindFirstStreamW -@ stdcall -version=0x600+ FindNextFileNameW() kernel32.FindNextFileNameW -@ stdcall FindNextStreamW() kernel32.FindNextStreamW -@ stdcall GetTempFileNameA() kernel32.GetTempFileNameA -@ stdcall GetTempPathA() kernel32.GetTempPathA -@ stdcall GetVolumeInformationA() kernel32.GetVolumeInformationA -@ stdcall SetFileApisToANSI() kernel32.SetFileApisToANSI -@ stdcall SetFileApisToOEM() kernel32.SetFileApisToOEM diff --git a/dll/apisets/api-ms-win-core-file-l2-1-0.spec b/dll/apisets/api-ms-win-core-file-l2-1-0.spec deleted file mode 100644 index 0332880bbd1..00000000000 --- a/dll/apisets/api-ms-win-core-file-l2-1-0.spec +++ /dev/null @@ -1,14 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub CopyFile2 -@ stdcall CopyFileExW() kernel32.CopyFileExW -@ stdcall CreateDirectoryExW() kernel32.CreateDirectoryExW -@ stdcall CreateHardLinkW() kernel32.CreateHardLinkW -@ stdcall -version=0x600+ CreateSymbolicLinkW() kernel32.CreateSymbolicLinkW -@ stdcall -version=0x600+ GetFileInformationByHandleEx() kernel32.GetFileInformationByHandleEx -@ stdcall MoveFileExW() kernel32.MoveFileExW -@ stdcall MoveFileWithProgressW() kernel32.MoveFileWithProgressW -@ stdcall ReOpenFile() kernel32.ReOpenFile -@ stdcall ReadDirectoryChangesW() kernel32.ReadDirectoryChangesW -@ stdcall ReplaceFileW() kernel32.ReplaceFileW diff --git a/dll/apisets/api-ms-win-core-file-l2-1-1.spec b/dll/apisets/api-ms-win-core-file-l2-1-1.spec deleted file mode 100644 index 00548fcb716..00000000000 --- a/dll/apisets/api-ms-win-core-file-l2-1-1.spec +++ /dev/null @@ -1,15 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub CopyFile2 -@ stdcall CopyFileExW() kernel32.CopyFileExW -@ stdcall CreateDirectoryExW() kernel32.CreateDirectoryExW -@ stdcall CreateHardLinkW() kernel32.CreateHardLinkW -@ stdcall -version=0x600+ CreateSymbolicLinkW() kernel32.CreateSymbolicLinkW -@ stdcall -version=0x600+ GetFileInformationByHandleEx() kernel32.GetFileInformationByHandleEx -@ stdcall MoveFileExW() kernel32.MoveFileExW -@ stdcall MoveFileWithProgressW() kernel32.MoveFileWithProgressW -@ stdcall -version=0x600+ OpenFileById() kernel32.OpenFileById -@ stdcall ReOpenFile() kernel32.ReOpenFile -@ stdcall ReadDirectoryChangesW() kernel32.ReadDirectoryChangesW -@ stdcall ReplaceFileW() kernel32.ReplaceFileW diff --git a/dll/apisets/api-ms-win-core-file-l2-1-2.spec b/dll/apisets/api-ms-win-core-file-l2-1-2.spec deleted file mode 100644 index bb49f6bd25c..00000000000 --- a/dll/apisets/api-ms-win-core-file-l2-1-2.spec +++ /dev/null @@ -1,17 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub CopyFile2 -@ stdcall CopyFileExW() kernel32.CopyFileExW -@ stdcall CopyFileW() kernel32.CopyFileW -@ stdcall CreateDirectoryExW() kernel32.CreateDirectoryExW -@ stdcall CreateHardLinkA() kernel32.CreateHardLinkA -@ stdcall CreateHardLinkW() kernel32.CreateHardLinkW -@ stdcall -version=0x600+ CreateSymbolicLinkW() kernel32.CreateSymbolicLinkW -@ stdcall -version=0x600+ GetFileInformationByHandleEx() kernel32.GetFileInformationByHandleEx -@ stdcall MoveFileExW() kernel32.MoveFileExW -@ stdcall MoveFileWithProgressW() kernel32.MoveFileWithProgressW -@ stdcall -version=0x600+ OpenFileById() kernel32.OpenFileById -@ stdcall ReadDirectoryChangesW() kernel32.ReadDirectoryChangesW -@ stdcall ReOpenFile() kernel32.ReOpenFile -@ stdcall ReplaceFileW() kernel32.ReplaceFileW diff --git a/dll/apisets/api-ms-win-core-handle-l1-1-0.spec b/dll/apisets/api-ms-win-core-handle-l1-1-0.spec deleted file mode 100644 index 88fbc33d260..00000000000 --- a/dll/apisets/api-ms-win-core-handle-l1-1-0.spec +++ /dev/null @@ -1,7 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CloseHandle() kernel32.CloseHandle -@ stdcall DuplicateHandle() kernel32.DuplicateHandle -@ stdcall GetHandleInformation() kernel32.GetHandleInformation -@ stdcall SetHandleInformation() kernel32.SetHandleInformation diff --git a/dll/apisets/api-ms-win-core-heap-l1-1-0.spec b/dll/apisets/api-ms-win-core-heap-l1-1-0.spec deleted file mode 100644 index a4af7df847e..00000000000 --- a/dll/apisets/api-ms-win-core-heap-l1-1-0.spec +++ /dev/null @@ -1,19 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall GetProcessHeap() kernel32.GetProcessHeap -@ stdcall GetProcessHeaps() kernel32.GetProcessHeaps -@ stdcall HeapAlloc() kernel32.HeapAlloc -@ stdcall HeapCompact() kernel32.HeapCompact -@ stdcall HeapCreate() kernel32.HeapCreate -@ stdcall HeapDestroy() kernel32.HeapDestroy -@ stdcall HeapFree() kernel32.HeapFree -@ stdcall HeapLock() kernel32.HeapLock -@ stdcall HeapQueryInformation() kernel32.HeapQueryInformation -@ stdcall HeapReAlloc() kernel32.HeapReAlloc -@ stdcall HeapSetInformation() kernel32.HeapSetInformation -@ stdcall HeapSize() kernel32.HeapSize -@ stdcall HeapSummary() kernel32.HeapSummary -@ stdcall HeapUnlock() kernel32.HeapUnlock -@ stdcall HeapValidate() kernel32.HeapValidate -@ stdcall HeapWalk() kernel32.HeapWalk diff --git a/dll/apisets/api-ms-win-core-heap-l1-2-0.spec b/dll/apisets/api-ms-win-core-heap-l1-2-0.spec deleted file mode 100644 index 7cafad2ab48..00000000000 --- a/dll/apisets/api-ms-win-core-heap-l1-2-0.spec +++ /dev/null @@ -1,18 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall GetProcessHeap() kernel32.GetProcessHeap -@ stdcall GetProcessHeaps() kernel32.GetProcessHeaps -@ stdcall HeapAlloc() kernel32.HeapAlloc -@ stdcall HeapCompact() kernel32.HeapCompact -@ stdcall HeapCreate() kernel32.HeapCreate -@ stdcall HeapDestroy() kernel32.HeapDestroy -@ stdcall HeapFree() kernel32.HeapFree -@ stdcall HeapLock() kernel32.HeapLock -@ stdcall HeapQueryInformation() kernel32.HeapQueryInformation -@ stdcall HeapReAlloc() kernel32.HeapReAlloc -@ stdcall HeapSetInformation() kernel32.HeapSetInformation -@ stdcall HeapSize() kernel32.HeapSize -@ stdcall HeapUnlock() kernel32.HeapUnlock -@ stdcall HeapValidate() kernel32.HeapValidate -@ stdcall HeapWalk() kernel32.HeapWalk diff --git a/dll/apisets/api-ms-win-core-heap-l2-1-0.spec b/dll/apisets/api-ms-win-core-heap-l2-1-0.spec deleted file mode 100644 index 88385fea5ff..00000000000 --- a/dll/apisets/api-ms-win-core-heap-l2-1-0.spec +++ /dev/null @@ -1,10 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall GlobalAlloc() kernel32.GlobalAlloc -@ stdcall GlobalFree() kernel32.GlobalFree -@ stdcall LocalAlloc() kernel32.LocalAlloc -@ stdcall LocalFree() kernel32.LocalFree -@ stdcall LocalLock() kernel32.LocalLock -@ stdcall LocalReAlloc() kernel32.LocalReAlloc -@ stdcall LocalUnlock() kernel32.LocalUnlock diff --git a/dll/apisets/api-ms-win-core-heap-obsolete-l1-1-0.spec b/dll/apisets/api-ms-win-core-heap-obsolete-l1-1-0.spec deleted file mode 100644 index ea47c334a8c..00000000000 --- a/dll/apisets/api-ms-win-core-heap-obsolete-l1-1-0.spec +++ /dev/null @@ -1,18 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall GlobalAlloc() kernel32.GlobalAlloc -@ stdcall GlobalFlags() kernel32.GlobalFlags -@ stdcall GlobalFree() kernel32.GlobalFree -@ stdcall GlobalHandle() kernel32.GlobalHandle -@ stdcall GlobalLock() kernel32.GlobalLock -@ stdcall GlobalReAlloc() kernel32.GlobalReAlloc -@ stdcall GlobalSize() kernel32.GlobalSize -@ stdcall GlobalUnlock() kernel32.GlobalUnlock -@ stdcall LocalAlloc() kernel32.LocalAlloc -@ stdcall LocalFlags() kernel32.LocalFlags -@ stdcall LocalFree() kernel32.LocalFree -@ stdcall LocalLock() kernel32.LocalLock -@ stdcall LocalReAlloc() kernel32.LocalReAlloc -@ stdcall LocalSize() kernel32.LocalSize -@ stdcall LocalUnlock() kernel32.LocalUnlock diff --git a/dll/apisets/api-ms-win-core-interlocked-l1-1-0.spec b/dll/apisets/api-ms-win-core-interlocked-l1-1-0.spec deleted file mode 100644 index 0b9f2c0535a..00000000000 --- a/dll/apisets/api-ms-win-core-interlocked-l1-1-0.spec +++ /dev/null @@ -1,15 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall InitializeSListHead() kernel32.InitializeSListHead -@ stdcall -arch=i386 InterlockedCompareExchange64() kernel32.InterlockedCompareExchange64 -@ stdcall -arch=i386 InterlockedCompareExchange() kernel32.InterlockedCompareExchange -@ stdcall -arch=i386 InterlockedDecrement() kernel32.InterlockedDecrement -@ stdcall -arch=i386 InterlockedExchange() kernel32.InterlockedExchange -@ stdcall -arch=i386 InterlockedExchangeAdd() kernel32.InterlockedExchangeAdd -@ stdcall InterlockedFlushSList() kernel32.InterlockedFlushSList -@ stdcall -arch=i386 InterlockedIncrement() kernel32.InterlockedIncrement -@ stdcall InterlockedPopEntrySList() kernel32.InterlockedPopEntrySList -@ stdcall InterlockedPushEntrySList() kernel32.InterlockedPushEntrySList -@ stdcall -version=0x600+ InterlockedPushListSList() kernel32.InterlockedPushListSList -@ stdcall QueryDepthSList() kernel32.QueryDepthSList diff --git a/dll/apisets/api-ms-win-core-interlocked-l1-2-0.spec b/dll/apisets/api-ms-win-core-interlocked-l1-2-0.spec deleted file mode 100644 index 47f5d25b7fd..00000000000 --- a/dll/apisets/api-ms-win-core-interlocked-l1-2-0.spec +++ /dev/null @@ -1,15 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall InitializeSListHead() kernel32.InitializeSListHead -@ stdcall -arch=i386 InterlockedCompareExchange64() kernel32.InterlockedCompareExchange64 -@ stdcall -arch=i386 InterlockedCompareExchange() kernel32.InterlockedCompareExchange -@ stdcall -arch=i386 InterlockedDecrement() kernel32.InterlockedDecrement -@ stdcall -arch=i386 InterlockedExchange() kernel32.InterlockedExchange -@ stdcall -arch=i386 InterlockedExchangeAdd() kernel32.InterlockedExchangeAdd -@ stdcall InterlockedFlushSList() kernel32.InterlockedFlushSList -@ stdcall -arch=i386 InterlockedIncrement() kernel32.InterlockedIncrement -@ stdcall InterlockedPopEntrySList() kernel32.InterlockedPopEntrySList -@ stdcall InterlockedPushEntrySList() kernel32.InterlockedPushEntrySList -@ stub InterlockedPushListSListEx -@ stdcall QueryDepthSList() kernel32.QueryDepthSList diff --git a/dll/apisets/api-ms-win-core-io-l1-1-0.spec b/dll/apisets/api-ms-win-core-io-l1-1-0.spec deleted file mode 100644 index 8ef6c0c6704..00000000000 --- a/dll/apisets/api-ms-win-core-io-l1-1-0.spec +++ /dev/null @@ -1,10 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall -version=0x600+ CancelIoEx() kernel32.CancelIoEx -@ stdcall CreateIoCompletionPort() kernel32.CreateIoCompletionPort -@ stdcall DeviceIoControl() kernel32.DeviceIoControl -@ stdcall GetOverlappedResult() kernel32.GetOverlappedResult -@ stdcall GetQueuedCompletionStatus() kernel32.GetQueuedCompletionStatus -@ stdcall -version=0x600+ GetQueuedCompletionStatusEx() kernel32.GetQueuedCompletionStatusEx -@ stdcall PostQueuedCompletionStatus() kernel32.PostQueuedCompletionStatus diff --git a/dll/apisets/api-ms-win-core-io-l1-1-1.spec b/dll/apisets/api-ms-win-core-io-l1-1-1.spec deleted file mode 100644 index e1ff3ad62eb..00000000000 --- a/dll/apisets/api-ms-win-core-io-l1-1-1.spec +++ /dev/null @@ -1,13 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CancelIo() kernel32.CancelIo -@ stdcall -version=0x600+ CancelIoEx() kernel32.CancelIoEx -@ stdcall -version=0x600+ CancelSynchronousIo() kernel32.CancelSynchronousIo -@ stdcall CreateIoCompletionPort() kernel32.CreateIoCompletionPort -@ stdcall DeviceIoControl() kernel32.DeviceIoControl -@ stdcall GetOverlappedResult() kernel32.GetOverlappedResult -@ stub GetOverlappedResultEx -@ stdcall GetQueuedCompletionStatus() kernel32.GetQueuedCompletionStatus -@ stdcall -version=0x600+ GetQueuedCompletionStatusEx() kernel32.GetQueuedCompletionStatusEx -@ stdcall PostQueuedCompletionStatus() kernel32.PostQueuedCompletionStatus diff --git a/dll/apisets/api-ms-win-core-job-l1-1-0.spec b/dll/apisets/api-ms-win-core-job-l1-1-0.spec deleted file mode 100644 index 95601c26dfc..00000000000 --- a/dll/apisets/api-ms-win-core-job-l1-1-0.spec +++ /dev/null @@ -1,4 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall IsProcessInJob() kernel32.IsProcessInJob diff --git a/dll/apisets/api-ms-win-core-job-l2-1-0.spec b/dll/apisets/api-ms-win-core-job-l2-1-0.spec deleted file mode 100644 index ea935a42518..00000000000 --- a/dll/apisets/api-ms-win-core-job-l2-1-0.spec +++ /dev/null @@ -1,9 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall AssignProcessToJobObject() kernel32.AssignProcessToJobObject -@ stdcall CreateJobObjectW() kernel32.CreateJobObjectW -@ stdcall OpenJobObjectW() kernel32.OpenJobObjectW -@ stdcall QueryInformationJobObject() kernel32.QueryInformationJobObject -@ stdcall SetInformationJobObject() kernel32.SetInformationJobObject -@ stdcall TerminateJobObject() kernel32.TerminateJobObject diff --git a/dll/apisets/api-ms-win-core-kernel32-legacy-l1-1-0.spec b/dll/apisets/api-ms-win-core-kernel32-legacy-l1-1-0.spec deleted file mode 100644 index e485b9f3431..00000000000 --- a/dll/apisets/api-ms-win-core-kernel32-legacy-l1-1-0.spec +++ /dev/null @@ -1,57 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall AddLocalAlternateComputerNameW() kernel32.AddLocalAlternateComputerNameW -@ stdcall BackupRead() kernel32.BackupRead -@ stdcall BackupWrite() kernel32.BackupWrite -@ stdcall BindIoCompletionCallback() kernel32.BindIoCompletionCallback -@ stdcall CopyFileA() kernel32.CopyFileA -@ stdcall CopyFileW() kernel32.CopyFileW -@ stdcall CreateFileMappingA() kernel32.CreateFileMappingA -@ stdcall -version=0x600+ CreateFileTransactedW() kernel32.CreateFileTransactedW -@ stdcall CreateMailslotA() kernel32.CreateMailslotA -@ stdcall CreateNamedPipeA() kernel32.CreateNamedPipeA -@ stdcall CreateSemaphoreW() kernel32.CreateSemaphoreW -@ stdcall DnsHostnameToComputerNameW() kernel32.DnsHostnameToComputerNameW -@ stdcall DosDateTimeToFileTime() kernel32.DosDateTimeToFileTime -@ stdcall FatalAppExitA() kernel32.FatalAppExitA -@ stdcall FatalAppExitW() kernel32.FatalAppExitW -@ stdcall FileTimeToDosDateTime() kernel32.FileTimeToDosDateTime -@ stdcall FindResourceA() kernel32.FindResourceA -@ stdcall FindResourceExA() kernel32.FindResourceExA -@ stdcall FindResourceW() kernel32.FindResourceW -@ stdcall GetComputerNameA() kernel32.GetComputerNameA -@ stdcall GetComputerNameW() kernel32.GetComputerNameW -@ stdcall GetConsoleWindow() kernel32.GetConsoleWindow -@ stdcall -version=0x600+ GetDurationFormatEx() kernel32.GetDurationFormatEx -@ stub GetMaximumProcessorGroupCount -@ stdcall -version=0x600+ GetNamedPipeClientProcessId() kernel32.GetNamedPipeClientProcessId -@ stdcall -version=0x600+ GetNamedPipeServerProcessId() kernel32.GetNamedPipeServerProcessId -@ stdcall GetShortPathNameA() kernel32.GetShortPathNameA -@ stdcall GetStartupInfoA() kernel32.GetStartupInfoA -@ stdcall GetStringTypeExA() kernel32.GetStringTypeExA -@ stdcall GetSystemPowerStatus() kernel32.GetSystemPowerStatus -@ stdcall GetSystemWow64DirectoryA() kernel32.GetSystemWow64DirectoryA -@ stdcall GetSystemWow64DirectoryW() kernel32.GetSystemWow64DirectoryW -@ stdcall GetTapeParameters() kernel32.GetTapeParameters -@ stdcall GetTempPathA() kernel32.GetTempPathA -@ stdcall GetThreadSelectorEntry() kernel32.GetThreadSelectorEntry -@ stdcall GlobalMemoryStatus() kernel32.GlobalMemoryStatus -@ stdcall LoadLibraryA() kernel32.LoadLibraryA -@ stdcall LoadLibraryW() kernel32.LoadLibraryW -@ stdcall MoveFileA() kernel32.MoveFileA -@ stdcall MoveFileExA() kernel32.MoveFileExA -@ stdcall MoveFileW() kernel32.MoveFileW -@ stdcall MulDiv() kernel32.MulDiv -@ stdcall OpenFile() kernel32.OpenFile -@ stdcall PulseEvent() kernel32.PulseEvent -@ stub RaiseFailFastException -@ stdcall RegisterWaitForSingleObject() kernel32.RegisterWaitForSingleObject -@ stdcall SetConsoleTitleA() kernel32.SetConsoleTitleA -@ stdcall SetFileCompletionNotificationModes() kernel32.SetFileCompletionNotificationModes -@ stdcall SetHandleCount() kernel32.SetHandleCount -@ stdcall SetMailslotInfo() kernel32.SetMailslotInfo -@ stdcall SetVolumeLabelW() kernel32.SetVolumeLabelW -@ stdcall UnregisterWait() kernel32.UnregisterWait -@ stdcall WTSGetActiveConsoleSessionId() kernel32.WTSGetActiveConsoleSessionId -@ stdcall WaitForMultipleObjects() kernel32.WaitForMultipleObjects diff --git a/dll/apisets/api-ms-win-core-kernel32-legacy-l1-1-1.spec b/dll/apisets/api-ms-win-core-kernel32-legacy-l1-1-1.spec deleted file mode 100644 index 66d5fad959f..00000000000 --- a/dll/apisets/api-ms-win-core-kernel32-legacy-l1-1-1.spec +++ /dev/null @@ -1,72 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall AddLocalAlternateComputerNameW() kernel32.AddLocalAlternateComputerNameW -@ stdcall BackupRead() kernel32.BackupRead -@ stdcall BackupWrite() kernel32.BackupWrite -@ stdcall BindIoCompletionCallback() kernel32.BindIoCompletionCallback -@ stdcall CopyFileA() kernel32.CopyFileA -@ stdcall CopyFileW() kernel32.CopyFileW -@ stdcall CreateFileMappingA() kernel32.CreateFileMappingA -@ stdcall -version=0x600+ CreateFileTransactedW() kernel32.CreateFileTransactedW -@ stdcall CreateMailslotA() kernel32.CreateMailslotA -@ stdcall CreateNamedPipeA() kernel32.CreateNamedPipeA -@ stdcall CreateSemaphoreW() kernel32.CreateSemaphoreW -@ stdcall DnsHostnameToComputerNameW() kernel32.DnsHostnameToComputerNameW -@ stdcall DosDateTimeToFileTime() kernel32.DosDateTimeToFileTime -@ stdcall FatalAppExitA() kernel32.FatalAppExitA -@ stdcall FatalAppExitW() kernel32.FatalAppExitW -@ stdcall FileTimeToDosDateTime() kernel32.FileTimeToDosDateTime -@ stdcall FindFirstVolumeMountPointW() kernel32.FindFirstVolumeMountPointW -@ stdcall FindNextVolumeMountPointW() kernel32.FindNextVolumeMountPointW -@ stdcall FindResourceA() kernel32.FindResourceA -@ stdcall FindResourceExA() kernel32.FindResourceExA -@ stdcall FindResourceW() kernel32.FindResourceW -@ stdcall FindVolumeMountPointClose() kernel32.FindVolumeMountPointClose -@ stdcall GetComputerNameA() kernel32.GetComputerNameA -@ stdcall GetComputerNameW() kernel32.GetComputerNameW -@ stdcall GetConsoleWindow() kernel32.GetConsoleWindow -@ stdcall -version=0x600+ GetDurationFormatEx() kernel32.GetDurationFormatEx -@ stdcall -version=0x600+ GetFileAttributesTransactedW() kernel32.GetFileAttributesTransactedW -@ stub GetFirmwareType -@ stub GetMaximumProcessorGroupCount -@ stdcall -version=0x600+ GetNamedPipeClientProcessId() kernel32.GetNamedPipeClientProcessId -@ stdcall -version=0x600+ GetNamedPipeServerProcessId() kernel32.GetNamedPipeServerProcessId -@ stub GetNumaAvailableMemoryNodeEx -@ stdcall GetNumaNodeProcessorMask() kernel32.GetNumaNodeProcessorMask -@ stub GetNumaProcessorNodeEx -@ stdcall GetShortPathNameA() kernel32.GetShortPathNameA -@ stdcall GetStartupInfoA() kernel32.GetStartupInfoA -@ stdcall GetStringTypeExA() kernel32.GetStringTypeExA -@ stdcall GetSystemPowerStatus() kernel32.GetSystemPowerStatus -@ stdcall GetSystemWow64DirectoryA() kernel32.GetSystemWow64DirectoryA -@ stdcall GetSystemWow64DirectoryW() kernel32.GetSystemWow64DirectoryW -@ stdcall GetTapeParameters() kernel32.GetTapeParameters -@ stdcall GetTempPathA() kernel32.GetTempPathA -@ stdcall GetThreadSelectorEntry() kernel32.GetThreadSelectorEntry -@ stdcall GlobalMemoryStatus() kernel32.GlobalMemoryStatus -@ stdcall LoadLibraryA() kernel32.LoadLibraryA -@ stdcall LoadLibraryW() kernel32.LoadLibraryW -@ stdcall MoveFileA() kernel32.MoveFileA -@ stdcall MoveFileExA() kernel32.MoveFileExA -@ stdcall MoveFileW() kernel32.MoveFileW -@ stdcall MulDiv() kernel32.MulDiv -@ stdcall OpenFile() kernel32.OpenFile -@ stub PowerClearRequest -@ stub PowerCreateRequest -@ stub PowerSetRequest -@ stdcall PulseEvent() kernel32.PulseEvent -@ stub RaiseFailFastException -@ stdcall RegisterWaitForSingleObject() kernel32.RegisterWaitForSingleObject -@ stdcall SetConsoleTitleA() kernel32.SetConsoleTitleA -@ stdcall SetDllDirectoryW() kernel32.SetDllDirectoryW -@ stdcall SetFileCompletionNotificationModes() kernel32.SetFileCompletionNotificationModes -@ stdcall SetHandleCount() kernel32.SetHandleCount -@ stdcall SetMailslotInfo() kernel32.SetMailslotInfo -@ stdcall SetThreadIdealProcessor() kernel32.SetThreadIdealProcessor -@ stdcall SetVolumeLabelW() kernel32.SetVolumeLabelW -@ stdcall SetVolumeMountPointW() kernel32.SetVolumeMountPointW -@ stdcall UnregisterWait() kernel32.UnregisterWait -@ stdcall VerifyVersionInfoW() kernel32.VerifyVersionInfoW -@ stdcall WaitForMultipleObjects() kernel32.WaitForMultipleObjects -@ stdcall WTSGetActiveConsoleSessionId() kernel32.WTSGetActiveConsoleSessionId diff --git a/dll/apisets/api-ms-win-core-kernel32-private-l1-1-1.spec b/dll/apisets/api-ms-win-core-kernel32-private-l1-1-1.spec deleted file mode 100644 index a1669aabdb1..00000000000 --- a/dll/apisets/api-ms-win-core-kernel32-private-l1-1-1.spec +++ /dev/null @@ -1,4 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall PrivCopyFileExW() kernel32.PrivCopyFileExW diff --git a/dll/apisets/api-ms-win-core-largeinteger-l1-1-0.spec b/dll/apisets/api-ms-win-core-largeinteger-l1-1-0.spec deleted file mode 100644 index 9052764a578..00000000000 --- a/dll/apisets/api-ms-win-core-largeinteger-l1-1-0.spec +++ /dev/null @@ -1,4 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall MulDiv() kernel32.MulDiv diff --git a/dll/apisets/api-ms-win-core-libraryloader-l1-1-0.spec b/dll/apisets/api-ms-win-core-libraryloader-l1-1-0.spec deleted file mode 100644 index ff6565f26e4..00000000000 --- a/dll/apisets/api-ms-win-core-libraryloader-l1-1-0.spec +++ /dev/null @@ -1,32 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub AddDllDirectory -@ stdcall DisableThreadLibraryCalls() kernel32.DisableThreadLibraryCalls -@ stdcall -version=0x600+ EnumResourceLanguagesExA() kernel32.EnumResourceLanguagesExA -@ stdcall -version=0x600+ EnumResourceLanguagesExW() kernel32.EnumResourceLanguagesExW -@ stdcall -version=0x600+ EnumResourceNamesExA() kernel32.EnumResourceNamesExA -@ stdcall -version=0x600+ EnumResourceNamesExW() kernel32.EnumResourceNamesExW -@ stdcall -version=0x600+ EnumResourceTypesExA() kernel32.EnumResourceTypesExA -@ stdcall -version=0x600+ EnumResourceTypesExW() kernel32.EnumResourceTypesExW -@ stdcall FindResourceExW() kernel32.FindResourceExW -@ stub FindStringOrdinal -@ stdcall FreeLibrary() kernel32.FreeLibrary -@ stdcall FreeLibraryAndExitThread() kernel32.FreeLibraryAndExitThread -@ stdcall FreeResource() kernel32.FreeResource -@ stdcall GetModuleFileNameA() kernel32.GetModuleFileNameA -@ stdcall GetModuleFileNameW() kernel32.GetModuleFileNameW -@ stdcall GetModuleHandleA() kernel32.GetModuleHandleA -@ stdcall GetModuleHandleExA() kernel32.GetModuleHandleExA -@ stdcall GetModuleHandleExW() kernel32.GetModuleHandleExW -@ stdcall GetModuleHandleW() kernel32.GetModuleHandleW -@ stdcall GetProcAddress() kernel32.GetProcAddress -@ stdcall LoadLibraryExA() kernel32.LoadLibraryExA -@ stdcall LoadLibraryExW() kernel32.LoadLibraryExW -@ stdcall LoadResource() kernel32.LoadResource -@ stdcall LoadStringA() user32.LoadStringA -@ stdcall LoadStringW() user32.LoadStringW -@ stdcall LockResource() kernel32.LockResource -@ stub RemoveDllDirectory -@ stub SetDefaultDllDirectories -@ stdcall SizeofResource() kernel32.SizeofResource diff --git a/dll/apisets/api-ms-win-core-libraryloader-l1-1-1.spec b/dll/apisets/api-ms-win-core-libraryloader-l1-1-1.spec deleted file mode 100644 index 5aac609928a..00000000000 --- a/dll/apisets/api-ms-win-core-libraryloader-l1-1-1.spec +++ /dev/null @@ -1,33 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub AddDllDirectory -@ stdcall DisableThreadLibraryCalls() kernel32.DisableThreadLibraryCalls -@ stdcall -version=0x600+ EnumResourceLanguagesExA() kernel32.EnumResourceLanguagesExA -@ stdcall -version=0x600+ EnumResourceLanguagesExW() kernel32.EnumResourceLanguagesExW -@ stdcall -version=0x600+ EnumResourceNamesExA() kernel32.EnumResourceNamesExA -@ stdcall -version=0x600+ EnumResourceNamesExW() kernel32.EnumResourceNamesExW -@ stdcall -version=0x600+ EnumResourceTypesExA() kernel32.EnumResourceTypesExA -@ stdcall -version=0x600+ EnumResourceTypesExW() kernel32.EnumResourceTypesExW -@ stdcall FindResourceExW() kernel32.FindResourceExW -@ stub FindStringOrdinal -@ stdcall FreeLibrary() kernel32.FreeLibrary -@ stdcall FreeLibraryAndExitThread() kernel32.FreeLibraryAndExitThread -@ stdcall FreeResource() kernel32.FreeResource -@ stdcall GetModuleFileNameA() kernel32.GetModuleFileNameA -@ stdcall GetModuleFileNameW() kernel32.GetModuleFileNameW -@ stdcall GetModuleHandleA() kernel32.GetModuleHandleA -@ stdcall GetModuleHandleExA() kernel32.GetModuleHandleExA -@ stdcall GetModuleHandleExW() kernel32.GetModuleHandleExW -@ stdcall GetModuleHandleW() kernel32.GetModuleHandleW -@ stdcall GetProcAddress() kernel32.GetProcAddress -@ stdcall LoadLibraryExA() kernel32.LoadLibraryExA -@ stdcall LoadLibraryExW() kernel32.LoadLibraryExW -@ stdcall LoadResource() kernel32.LoadResource -@ stdcall LoadStringA() user32.LoadStringA -@ stdcall LoadStringW() user32.LoadStringW -@ stdcall LockResource() kernel32.LockResource -@ stub QueryOptionalDelayLoadedAPI -@ stub RemoveDllDirectory -@ stub SetDefaultDllDirectories -@ stdcall SizeofResource() kernel32.SizeofResource diff --git a/dll/apisets/api-ms-win-core-libraryloader-l1-2-0.spec b/dll/apisets/api-ms-win-core-libraryloader-l1-2-0.spec deleted file mode 100644 index ff6565f26e4..00000000000 --- a/dll/apisets/api-ms-win-core-libraryloader-l1-2-0.spec +++ /dev/null @@ -1,32 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub AddDllDirectory -@ stdcall DisableThreadLibraryCalls() kernel32.DisableThreadLibraryCalls -@ stdcall -version=0x600+ EnumResourceLanguagesExA() kernel32.EnumResourceLanguagesExA -@ stdcall -version=0x600+ EnumResourceLanguagesExW() kernel32.EnumResourceLanguagesExW -@ stdcall -version=0x600+ EnumResourceNamesExA() kernel32.EnumResourceNamesExA -@ stdcall -version=0x600+ EnumResourceNamesExW() kernel32.EnumResourceNamesExW -@ stdcall -version=0x600+ EnumResourceTypesExA() kernel32.EnumResourceTypesExA -@ stdcall -version=0x600+ EnumResourceTypesExW() kernel32.EnumResourceTypesExW -@ stdcall FindResourceExW() kernel32.FindResourceExW -@ stub FindStringOrdinal -@ stdcall FreeLibrary() kernel32.FreeLibrary -@ stdcall FreeLibraryAndExitThread() kernel32.FreeLibraryAndExitThread -@ stdcall FreeResource() kernel32.FreeResource -@ stdcall GetModuleFileNameA() kernel32.GetModuleFileNameA -@ stdcall GetModuleFileNameW() kernel32.GetModuleFileNameW -@ stdcall GetModuleHandleA() kernel32.GetModuleHandleA -@ stdcall GetModuleHandleExA() kernel32.GetModuleHandleExA -@ stdcall GetModuleHandleExW() kernel32.GetModuleHandleExW -@ stdcall GetModuleHandleW() kernel32.GetModuleHandleW -@ stdcall GetProcAddress() kernel32.GetProcAddress -@ stdcall LoadLibraryExA() kernel32.LoadLibraryExA -@ stdcall LoadLibraryExW() kernel32.LoadLibraryExW -@ stdcall LoadResource() kernel32.LoadResource -@ stdcall LoadStringA() user32.LoadStringA -@ stdcall LoadStringW() user32.LoadStringW -@ stdcall LockResource() kernel32.LockResource -@ stub RemoveDllDirectory -@ stub SetDefaultDllDirectories -@ stdcall SizeofResource() kernel32.SizeofResource diff --git a/dll/apisets/api-ms-win-core-libraryloader-l1-2-1.spec b/dll/apisets/api-ms-win-core-libraryloader-l1-2-1.spec deleted file mode 100644 index 6096285068d..00000000000 --- a/dll/apisets/api-ms-win-core-libraryloader-l1-2-1.spec +++ /dev/null @@ -1,6 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall FindResourceW() kernel32.FindResourceW -@ stdcall LoadLibraryA() kernel32.LoadLibraryA -@ stdcall LoadLibraryW() kernel32.LoadLibraryW diff --git a/dll/apisets/api-ms-win-core-libraryloader-l1-2-2.spec b/dll/apisets/api-ms-win-core-libraryloader-l1-2-2.spec deleted file mode 100644 index f6c67e57df1..00000000000 --- a/dll/apisets/api-ms-win-core-libraryloader-l1-2-2.spec +++ /dev/null @@ -1,7 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall EnumResourceNamesW() kernel32.EnumResourceNamesW -@ stdcall FindResourceW() kernel32.FindResourceW -@ stdcall LoadLibraryA() kernel32.LoadLibraryA -@ stdcall LoadLibraryW() kernel32.LoadLibraryW diff --git a/dll/apisets/api-ms-win-core-localization-l1-1-0.spec b/dll/apisets/api-ms-win-core-localization-l1-1-0.spec deleted file mode 100644 index 74c6b628397..00000000000 --- a/dll/apisets/api-ms-win-core-localization-l1-1-0.spec +++ /dev/null @@ -1,50 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall -version=0x601+ ConvertDefaultLocale() kernel32.ConvertDefaultLocale -@ stdcall -version=0x601+ FindNLSString() kernel32.FindNLSString -@ stdcall -version=0x601+ FindNLSStringEx() kernel32.FindNLSStringEx -@ stdcall -version=0x601+ GetACP() kernel32.GetACP -@ stdcall -version=0x601+ GetCPFileNameFromRegistry() kernel32.GetCPFileNameFromRegistry -@ stdcall -version=0x601+ GetCPInfo() kernel32.GetCPInfo -@ stdcall -version=0x601+ GetCPInfoExW() kernel32.GetCPInfoExW -@ stdcall -version=0x601+ GetCalendarInfoEx() kernel32.GetCalendarInfoEx -@ stdcall -version=0x601+ GetCalendarInfoW() kernel32.GetCalendarInfoW -@ stdcall -version=0x601+ GetFileMUIInfo() kernel32.GetFileMUIInfo -@ stdcall -version=0x601+ GetFileMUIPath() kernel32.GetFileMUIPath -@ stdcall -version=0x601+ GetLocaleInfoEx() kernel32.GetLocaleInfoEx -@ stdcall -version=0x601+ GetLocaleInfoW() kernel32.GetLocaleInfoW -@ stdcall -version=0x601+ GetNLSVersion() kernel32.GetNLSVersion -@ stdcall -version=0x601+ GetNLSVersionEx() kernel32.GetNLSVersionEx -@ stdcall -version=0x601+ GetOEMCP() kernel32.GetOEMCP -@ stub -version=0x601+ GetProcessPreferredUILanguages -@ stdcall -version=0x601+ GetSystemDefaultLCID() kernel32.GetSystemDefaultLCID -@ stdcall -version=0x601+ GetSystemDefaultLangID() kernel32.GetSystemDefaultLangID -@ stdcall -version=0x601+ GetSystemPreferredUILanguages() kernel32.GetSystemPreferredUILanguages -@ stdcall -version=0x601+ GetThreadLocale() kernel32.GetThreadLocale -@ stdcall -version=0x601+ GetThreadPreferredUILanguages() kernel32.GetThreadPreferredUILanguages -@ stdcall -version=0x601+ GetThreadUILanguage() kernel32.GetThreadUILanguage -@ stdcall -version=0x601+ GetUILanguageInfo() kernel32.GetUILanguageInfo -@ stdcall -version=0x601+ GetUserDefaultLCID() kernel32.GetUserDefaultLCID -@ stdcall -version=0x601+ GetUserDefaultLangID() kernel32.GetUserDefaultLangID -@ stdcall -version=0x601+ GetUserPreferredUILanguages() kernel32.GetUserPreferredUILanguages -@ stdcall -version=0x601+ IsNLSDefinedString() kernel32.IsNLSDefinedString -@ stdcall -version=0x601+ IsValidCodePage() kernel32.IsValidCodePage -@ stdcall -version=0x601+ IsValidLanguageGroup() kernel32.IsValidLanguageGroup -@ stdcall -version=0x601+ IsValidLocale() kernel32.IsValidLocale -@ stub -version=0x601+ IsValidLocaleName -@ stdcall -version=0x601+ LCMapStringEx() kernel32.LCMapStringEx -@ stdcall -version=0x601+ LCMapStringW() kernel32.LCMapStringW -@ stdcall -version=0x601+ LocaleNameToLCID() kernel32.LocaleNameToLCID -@ stdcall -version=0x601+ NlsCheckPolicy() kernel32.NlsCheckPolicy -@ stdcall -version=0x601+ NlsEventDataDescCreate() kernel32.NlsEventDataDescCreate -@ stdcall -version=0x601+ NlsGetCacheUpdateCount() kernel32.NlsGetCacheUpdateCount -@ stdcall -version=0x601+ NlsUpdateLocale() kernel32.NlsUpdateLocale -@ stdcall -version=0x601+ NlsUpdateSystemLocale() kernel32.NlsUpdateSystemLocale -@ stdcall -version=0x601+ NlsWriteEtwEvent() kernel32.NlsWriteEtwEvent -@ stub -version=0x601+ ResolveLocaleName -@ stdcall -version=0x601+ SetCalendarInfoW() kernel32.SetCalendarInfoW -@ stdcall -version=0x601+ SetLocaleInfoW() kernel32.SetLocaleInfoW -@ stdcall -version=0x601+ SetThreadLocale() kernel32.SetThreadLocale -@ stdcall -version=0x601+ VerLanguageNameA() kernel32.VerLanguageNameA -@ stdcall -version=0x601+ VerLanguageNameW() kernel32.VerLanguageNameW diff --git a/dll/apisets/api-ms-win-core-localization-l1-2-0.spec b/dll/apisets/api-ms-win-core-localization-l1-2-0.spec deleted file mode 100644 index 6d9428b6483..00000000000 --- a/dll/apisets/api-ms-win-core-localization-l1-2-0.spec +++ /dev/null @@ -1,62 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall -version=0x602+ ConvertDefaultLocale() kernel32.ConvertDefaultLocale -@ stdcall -version=0x602+ EnumSystemGeoID() kernel32.EnumSystemGeoID -@ stdcall -version=0x602+ EnumSystemLocalesA() kernel32.EnumSystemLocalesA -@ stdcall -version=0x602+ EnumSystemLocalesW() kernel32.EnumSystemLocalesW -@ stdcall -version=0x602+ FindNLSString() kernel32.FindNLSString -@ stdcall -version=0x602+ FindNLSStringEx() kernel32.FindNLSStringEx -@ stdcall -version=0x602+ FormatMessageA() kernel32.FormatMessageA -@ stdcall -version=0x602+ FormatMessageW() kernel32.FormatMessageW -@ stdcall -version=0x602+ GetACP() kernel32.GetACP -@ stdcall -version=0x602+ GetCPInfo() kernel32.GetCPInfo -@ stdcall -version=0x602+ GetCPInfoExW() kernel32.GetCPInfoExW -@ stdcall -version=0x602+ GetCalendarInfoEx() kernel32.GetCalendarInfoEx -@ stdcall -version=0x602+ GetCalendarInfoW() kernel32.GetCalendarInfoW -@ stdcall -version=0x602+ GetFileMUIInfo() kernel32.GetFileMUIInfo -@ stdcall -version=0x602+ GetFileMUIPath() kernel32.GetFileMUIPath -@ stdcall -version=0x602+ GetGeoInfoW() kernel32.GetGeoInfoW -@ stdcall -version=0x602+ GetLocaleInfoA() kernel32.GetLocaleInfoA -@ stdcall -version=0x602+ GetLocaleInfoEx() kernel32.GetLocaleInfoEx -@ stdcall -version=0x602+ GetLocaleInfoW() kernel32.GetLocaleInfoW -@ stdcall -version=0x602+ GetNLSVersion() kernel32.GetNLSVersion -@ stdcall -version=0x602+ GetNLSVersionEx() kernel32.GetNLSVersionEx -@ stdcall -version=0x602+ GetOEMCP() kernel32.GetOEMCP -@ stub -version=0x602+ GetProcessPreferredUILanguages -@ stdcall -version=0x602+ GetSystemDefaultLCID() kernel32.GetSystemDefaultLCID -@ stdcall -version=0x602+ GetSystemDefaultLangID() kernel32.GetSystemDefaultLangID -@ stdcall -version=0x602+ GetSystemPreferredUILanguages() kernel32.GetSystemPreferredUILanguages -@ stdcall -version=0x602+ GetThreadLocale() kernel32.GetThreadLocale -@ stdcall -version=0x602+ GetThreadPreferredUILanguages() kernel32.GetThreadPreferredUILanguages -@ stdcall -version=0x602+ GetThreadUILanguage() kernel32.GetThreadUILanguage -@ stdcall -version=0x602+ GetUILanguageInfo() kernel32.GetUILanguageInfo -@ stdcall -version=0x602+ GetUserDefaultLCID() kernel32.GetUserDefaultLCID -@ stdcall -version=0x602+ GetUserDefaultLangID() kernel32.GetUserDefaultLangID -@ stdcall -version=0x602+ GetUserDefaultLocaleName() kernel32.GetUserDefaultLocaleName -@ stdcall -version=0x602+ GetUserGeoID() kernel32.GetUserGeoID -@ stdcall -version=0x602+ GetUserPreferredUILanguages() kernel32.GetUserPreferredUILanguages -@ stdcall -version=0x602+ IdnToAscii() kernel32.IdnToAscii -@ stdcall -version=0x602+ IdnToUnicode() kernel32.IdnToUnicode -@ stdcall -version=0x602+ IsDBCSLeadByte() kernel32.IsDBCSLeadByte -@ stdcall -version=0x602+ IsDBCSLeadByteEx() kernel32.IsDBCSLeadByteEx -@ stdcall -version=0x602+ IsNLSDefinedString() kernel32.IsNLSDefinedString -@ stdcall -version=0x602+ IsValidCodePage() kernel32.IsValidCodePage -@ stdcall -version=0x602+ IsValidLanguageGroup() kernel32.IsValidLanguageGroup -@ stdcall -version=0x602+ IsValidLocale() kernel32.IsValidLocale -@ stub -version=0x602+ IsValidLocaleName -@ stub -version=0x602+ IsValidNLSVersion -@ stdcall -version=0x602+ LCMapStringA() kernel32.LCMapStringA -@ stdcall -version=0x602+ LCMapStringEx() kernel32.LCMapStringEx -@ stdcall -version=0x602+ LCMapStringW() kernel32.LCMapStringW -@ stdcall -version=0x602+ LocaleNameToLCID() kernel32.LocaleNameToLCID -@ stub -version=0x602+ ResolveLocaleName -@ stdcall -version=0x602+ SetCalendarInfoW() kernel32.SetCalendarInfoW -@ stdcall -version=0x602+ SetLocaleInfoW() kernel32.SetLocaleInfoW -@ stub -version=0x602+ SetProcessPreferredUILanguages -@ stdcall -version=0x602+ SetThreadLocale() kernel32.SetThreadLocale -@ stdcall -version=0x602+ SetThreadPreferredUILanguages() kernel32.SetThreadPreferredUILanguages -@ stdcall -version=0x602+ SetThreadUILanguage() kernel32.SetThreadUILanguage -@ stdcall -version=0x602+ SetUserGeoID() kernel32.SetUserGeoID -@ stdcall -version=0x602+ VerLanguageNameA() kernel32.VerLanguageNameA -@ stdcall -version=0x602+ VerLanguageNameW() kernel32.VerLanguageNameW diff --git a/dll/apisets/api-ms-win-core-localization-l1-2-1.spec b/dll/apisets/api-ms-win-core-localization-l1-2-1.spec deleted file mode 100644 index 87e682a1e1e..00000000000 --- a/dll/apisets/api-ms-win-core-localization-l1-2-1.spec +++ /dev/null @@ -1,63 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall -version=0x603+ ConvertDefaultLocale() kernel32.ConvertDefaultLocale -@ stdcall -version=0x603+ EnumSystemGeoID() kernel32.EnumSystemGeoID -@ stdcall -version=0x603+ EnumSystemLocalesA() kernel32.EnumSystemLocalesA -@ stdcall -version=0x603+ EnumSystemLocalesEx() kernel32.EnumSystemLocalesEx -@ stdcall -version=0x603+ EnumSystemLocalesW() kernel32.EnumSystemLocalesW -@ stdcall -version=0x603+ FindNLSString() kernel32.FindNLSString -@ stdcall -version=0x603+ FindNLSStringEx() kernel32.FindNLSStringEx -@ stdcall -version=0x603+ FormatMessageA() kernel32.FormatMessageA -@ stdcall -version=0x603+ FormatMessageW() kernel32.FormatMessageW -@ stdcall -version=0x603+ GetACP() kernel32.GetACP -@ stdcall -version=0x603+ GetCPInfo() kernel32.GetCPInfo -@ stdcall -version=0x603+ GetCPInfoExW() kernel32.GetCPInfoExW -@ stdcall -version=0x603+ GetCalendarInfoEx() kernel32.GetCalendarInfoEx -@ stdcall -version=0x603+ GetCalendarInfoW() kernel32.GetCalendarInfoW -@ stdcall -version=0x603+ GetFileMUIInfo() kernel32.GetFileMUIInfo -@ stdcall -version=0x603+ GetFileMUIPath() kernel32.GetFileMUIPath -@ stdcall -version=0x603+ GetGeoInfoW() kernel32.GetGeoInfoW -@ stdcall -version=0x603+ GetLocaleInfoA() kernel32.GetLocaleInfoA -@ stdcall -version=0x603+ GetLocaleInfoEx() kernel32.GetLocaleInfoEx -@ stdcall -version=0x603+ GetLocaleInfoW() kernel32.GetLocaleInfoW -@ stdcall -version=0x603+ GetNLSVersion() kernel32.GetNLSVersion -@ stdcall -version=0x603+ GetNLSVersionEx() kernel32.GetNLSVersionEx -@ stdcall -version=0x603+ GetOEMCP() kernel32.GetOEMCP -@ stub -version=0x603+ GetProcessPreferredUILanguages -@ stdcall -version=0x603+ GetSystemDefaultLCID() kernel32.GetSystemDefaultLCID -@ stdcall -version=0x603+ GetSystemDefaultLangID() kernel32.GetSystemDefaultLangID -@ stdcall -version=0x603+ GetSystemPreferredUILanguages() kernel32.GetSystemPreferredUILanguages -@ stdcall -version=0x603+ GetThreadLocale() kernel32.GetThreadLocale -@ stdcall -version=0x603+ GetThreadPreferredUILanguages() kernel32.GetThreadPreferredUILanguages -@ stdcall -version=0x603+ GetThreadUILanguage() kernel32.GetThreadUILanguage -@ stdcall -version=0x603+ GetUILanguageInfo() kernel32.GetUILanguageInfo -@ stdcall -version=0x603+ GetUserDefaultLCID() kernel32.GetUserDefaultLCID -@ stdcall -version=0x603+ GetUserDefaultLangID() kernel32.GetUserDefaultLangID -@ stdcall -version=0x603+ GetUserDefaultLocaleName() kernel32.GetUserDefaultLocaleName -@ stdcall -version=0x603+ GetUserGeoID() kernel32.GetUserGeoID -@ stdcall -version=0x603+ GetUserPreferredUILanguages() kernel32.GetUserPreferredUILanguages -@ stdcall -version=0x603+ IdnToAscii() kernel32.IdnToAscii -@ stdcall -version=0x603+ IdnToUnicode() kernel32.IdnToUnicode -@ stdcall -version=0x603+ IsDBCSLeadByte() kernel32.IsDBCSLeadByte -@ stdcall -version=0x603+ IsDBCSLeadByteEx() kernel32.IsDBCSLeadByteEx -@ stdcall -version=0x603+ IsNLSDefinedString() kernel32.IsNLSDefinedString -@ stdcall -version=0x603+ IsValidCodePage() kernel32.IsValidCodePage -@ stdcall -version=0x603+ IsValidLanguageGroup() kernel32.IsValidLanguageGroup -@ stdcall -version=0x603+ IsValidLocale() kernel32.IsValidLocale -@ stub -version=0x603+ IsValidLocaleName -@ stub -version=0x603+ IsValidNLSVersion -@ stdcall -version=0x603+ LCMapStringA() kernel32.LCMapStringA -@ stdcall -version=0x603+ LCMapStringEx() kernel32.LCMapStringEx -@ stdcall -version=0x603+ LCMapStringW() kernel32.LCMapStringW -@ stdcall -version=0x603+ LocaleNameToLCID() kernel32.LocaleNameToLCID -@ stub -version=0x603+ ResolveLocaleName -@ stdcall -version=0x603+ SetCalendarInfoW() kernel32.SetCalendarInfoW -@ stdcall -version=0x603+ SetLocaleInfoW() kernel32.SetLocaleInfoW -@ stub -version=0x603+ SetProcessPreferredUILanguages -@ stdcall -version=0x603+ SetThreadLocale() kernel32.SetThreadLocale -@ stdcall -version=0x603+ SetThreadPreferredUILanguages() kernel32.SetThreadPreferredUILanguages -@ stdcall -version=0x603+ SetThreadUILanguage() kernel32.SetThreadUILanguage -@ stdcall -version=0x603+ SetUserGeoID() kernel32.SetUserGeoID -@ stdcall -version=0x603+ VerLanguageNameA() kernel32.VerLanguageNameA -@ stdcall -version=0x603+ VerLanguageNameW() kernel32.VerLanguageNameW diff --git a/dll/apisets/api-ms-win-core-localization-l2-1-0.spec b/dll/apisets/api-ms-win-core-localization-l2-1-0.spec deleted file mode 100644 index d0f9537d5c7..00000000000 --- a/dll/apisets/api-ms-win-core-localization-l2-1-0.spec +++ /dev/null @@ -1,15 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall -version=0x600+ EnumCalendarInfoExEx() kernel32.EnumCalendarInfoExEx -@ stdcall EnumCalendarInfoExW() kernel32.EnumCalendarInfoExW -@ stdcall EnumCalendarInfoW() kernel32.EnumCalendarInfoW -@ stdcall -version=0x600+ EnumDateFormatsExEx() kernel32.EnumDateFormatsExEx -@ stdcall EnumDateFormatsExW() kernel32.EnumDateFormatsExW -@ stdcall EnumDateFormatsW() kernel32.EnumDateFormatsW -@ stdcall EnumSystemCodePagesW() kernel32.EnumSystemCodePagesW -@ stdcall -version=0x600+ EnumTimeFormatsEx() kernel32.EnumTimeFormatsEx -@ stdcall EnumTimeFormatsW() kernel32.EnumTimeFormatsW -@ stdcall -version=0x600+ GetCurrencyFormatEx() kernel32.GetCurrencyFormatEx -@ stdcall GetCurrencyFormatW() kernel32.GetCurrencyFormatW -@ stdcall -version=0x600+ GetNumberFormatEx() kernel32.GetNumberFormatEx diff --git a/dll/apisets/api-ms-win-core-localization-obsolete-l1-1-0.spec b/dll/apisets/api-ms-win-core-localization-obsolete-l1-1-0.spec deleted file mode 100644 index ac24370191d..00000000000 --- a/dll/apisets/api-ms-win-core-localization-obsolete-l1-1-0.spec +++ /dev/null @@ -1,14 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CompareStringA() kernel32.CompareStringA -@ stdcall EnumLanguageGroupLocalesW() kernel32.EnumLanguageGroupLocalesW -@ stdcall EnumSystemLanguageGroupsW() kernel32.EnumSystemLanguageGroupsW -@ stdcall -version=0x600+ EnumSystemLocalesEx() kernel32.EnumSystemLocalesEx -@ stdcall EnumUILanguagesW() kernel32.EnumUILanguagesW -@ stdcall GetNumberFormatW() kernel32.GetNumberFormatW -@ stdcall GetStringTypeA() kernel32.GetStringTypeA -@ stdcall -version=0x600+ GetSystemDefaultLocaleName() kernel32.GetSystemDefaultLocaleName -@ stdcall GetSystemDefaultUILanguage() kernel32.GetSystemDefaultUILanguage -@ stdcall GetUserDefaultUILanguage() kernel32.GetUserDefaultUILanguage -@ stdcall -version=0x600+ LCIDToLocaleName() kernel32.LCIDToLocaleName diff --git a/dll/apisets/api-ms-win-core-localization-obsolete-l1-2-0.spec b/dll/apisets/api-ms-win-core-localization-obsolete-l1-2-0.spec deleted file mode 100644 index 4406b3da52d..00000000000 --- a/dll/apisets/api-ms-win-core-localization-obsolete-l1-2-0.spec +++ /dev/null @@ -1,13 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CompareStringA() kernel32.CompareStringA -@ stdcall EnumLanguageGroupLocalesW() kernel32.EnumLanguageGroupLocalesW -@ stdcall EnumSystemLanguageGroupsW() kernel32.EnumSystemLanguageGroupsW -@ stdcall EnumUILanguagesW() kernel32.EnumUILanguagesW -@ stdcall GetNumberFormatW() kernel32.GetNumberFormatW -@ stdcall GetStringTypeA() kernel32.GetStringTypeA -@ stdcall -version=0x600+ GetSystemDefaultLocaleName() kernel32.GetSystemDefaultLocaleName -@ stdcall GetSystemDefaultUILanguage() kernel32.GetSystemDefaultUILanguage -@ stdcall GetUserDefaultUILanguage() kernel32.GetUserDefaultUILanguage -@ stdcall -version=0x600+ LCIDToLocaleName() kernel32.LCIDToLocaleName diff --git a/dll/apisets/api-ms-win-core-localization-obsolete-l1-3-0.spec b/dll/apisets/api-ms-win-core-localization-obsolete-l1-3-0.spec deleted file mode 100644 index bcf347b30a7..00000000000 --- a/dll/apisets/api-ms-win-core-localization-obsolete-l1-3-0.spec +++ /dev/null @@ -1,12 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CompareStringA() kernel32.CompareStringA -@ stdcall EnumLanguageGroupLocalesW() kernel32.EnumLanguageGroupLocalesW -@ stdcall EnumSystemLanguageGroupsW() kernel32.EnumSystemLanguageGroupsW -@ stdcall EnumUILanguagesW() kernel32.EnumUILanguagesW -@ stdcall GetNumberFormatW() kernel32.GetNumberFormatW -@ stdcall GetStringTypeA() kernel32.GetStringTypeA -@ stdcall -version=0x600+ GetSystemDefaultLocaleName() kernel32.GetSystemDefaultLocaleName -@ stdcall GetSystemDefaultUILanguage() kernel32.GetSystemDefaultUILanguage -@ stdcall GetUserDefaultUILanguage() kernel32.GetUserDefaultUILanguage diff --git a/dll/apisets/api-ms-win-core-localization-private-l1-1-0.spec b/dll/apisets/api-ms-win-core-localization-private-l1-1-0.spec deleted file mode 100644 index c8f923972d4..00000000000 --- a/dll/apisets/api-ms-win-core-localization-private-l1-1-0.spec +++ /dev/null @@ -1,14 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall -version=0x501-0x600 GetCPFileNameFromRegistry() kernel32.GetCPFileNameFromRegistry -@ stub LoadStringByReference -@ stdcall -version=0x600+ NlsCheckPolicy() kernel32.NlsCheckPolicy -@ stdcall -version=0x600+ NlsEventDataDescCreate() kernel32.NlsEventDataDescCreate -@ stdcall NlsGetCacheUpdateCount() kernel32.NlsGetCacheUpdateCount -@ stdcall -version=0x600+ NlsUpdateLocale() kernel32.NlsUpdateLocale -@ stdcall -version=0x600+ NlsUpdateSystemLocale() kernel32.NlsUpdateSystemLocale -@ stdcall -version=0x600+ NlsWriteEtwEvent() kernel32.NlsWriteEtwEvent -@ stub _AddMUIStringToCache -@ stub _GetMUIStringFromCache -@ stub _OpenMuiStringCache diff --git a/dll/apisets/api-ms-win-core-localregistry-l1-1-0.spec b/dll/apisets/api-ms-win-core-localregistry-l1-1-0.spec deleted file mode 100644 index 7c2001a0e7b..00000000000 --- a/dll/apisets/api-ms-win-core-localregistry-l1-1-0.spec +++ /dev/null @@ -1,43 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall RegCloseKey() advapi32.RegCloseKey -@ stdcall RegCreateKeyExA() advapi32.RegCreateKeyExA -@ stdcall RegCreateKeyExW() advapi32.RegCreateKeyExW -@ stdcall RegDeleteKeyExA() advapi32.RegDeleteKeyExA -@ stdcall RegDeleteKeyExW() advapi32.RegDeleteKeyExW -@ stdcall RegDeleteTreeA() advapi32_vista.RegDeleteTreeA -@ stdcall RegDeleteTreeW() advapi32_vista.RegDeleteTreeW -@ stdcall RegDeleteValueA() advapi32.RegDeleteValueA -@ stdcall RegDeleteValueW() advapi32.RegDeleteValueW -@ stub RegDisablePredefinedCacheEx -@ stdcall RegEnumKeyExA() advapi32.RegEnumKeyExA -@ stdcall RegEnumKeyExW() advapi32.RegEnumKeyExW -@ stdcall RegEnumValueA() advapi32.RegEnumValueA -@ stdcall RegEnumValueW() advapi32.RegEnumValueW -@ stdcall RegFlushKey() advapi32.RegFlushKey -@ stdcall RegGetKeySecurity() advapi32.RegGetKeySecurity -@ stdcall RegGetValueA() advapi32.RegGetValueA -@ stdcall RegGetValueW() advapi32.RegGetValueW -@ stdcall RegLoadKeyA() advapi32.RegLoadKeyA -@ stdcall RegLoadKeyW() advapi32.RegLoadKeyW -@ stdcall -version=0x600+ RegLoadMUIStringA() advapi32.RegLoadMUIStringA -@ stdcall -version=0x600+ RegLoadMUIStringW() advapi32.RegLoadMUIStringW -@ stdcall RegNotifyChangeKeyValue() advapi32.RegNotifyChangeKeyValue -@ stdcall RegOpenCurrentUser() advapi32.RegOpenCurrentUser -@ stdcall RegOpenKeyExA() advapi32.RegOpenKeyExA -@ stdcall RegOpenKeyExW() advapi32.RegOpenKeyExW -@ stdcall RegOpenUserClassesRoot() advapi32.RegOpenUserClassesRoot -@ stdcall RegQueryInfoKeyA() advapi32.RegQueryInfoKeyA -@ stdcall RegQueryInfoKeyW() advapi32.RegQueryInfoKeyW -@ stdcall RegQueryValueExA() advapi32.RegQueryValueExA -@ stdcall RegQueryValueExW() advapi32.RegQueryValueExW -@ stdcall RegRestoreKeyA() advapi32.RegRestoreKeyA -@ stdcall RegRestoreKeyW() advapi32.RegRestoreKeyW -@ stdcall RegSaveKeyExA() advapi32.RegSaveKeyExA -@ stdcall RegSaveKeyExW() advapi32.RegSaveKeyExW -@ stdcall RegSetKeySecurity() advapi32.RegSetKeySecurity -@ stdcall RegSetValueExA() advapi32.RegSetValueExA -@ stdcall RegSetValueExW() advapi32.RegSetValueExW -@ stdcall RegUnLoadKeyA() advapi32.RegUnLoadKeyA -@ stdcall RegUnLoadKeyW() advapi32.RegUnLoadKeyW diff --git a/dll/apisets/api-ms-win-core-memory-l1-1-0.spec b/dll/apisets/api-ms-win-core-memory-l1-1-0.spec deleted file mode 100644 index 1e9b9fd64fb..00000000000 --- a/dll/apisets/api-ms-win-core-memory-l1-1-0.spec +++ /dev/null @@ -1,19 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CreateFileMappingW() kernel32.CreateFileMappingW -@ stdcall FlushViewOfFile() kernel32.FlushViewOfFile -@ stdcall MapViewOfFile() kernel32.MapViewOfFile -@ stdcall MapViewOfFileEx() kernel32.MapViewOfFileEx -@ stdcall OpenFileMappingW() kernel32.OpenFileMappingW -@ stdcall ReadProcessMemory() kernel32.ReadProcessMemory -@ stdcall UnmapViewOfFile() kernel32.UnmapViewOfFile -@ stdcall VirtualAlloc() kernel32.VirtualAlloc -@ stdcall VirtualAllocEx() kernel32.VirtualAllocEx -@ stdcall VirtualFree() kernel32.VirtualFree -@ stdcall VirtualFreeEx() kernel32.VirtualFreeEx -@ stdcall VirtualProtect() kernel32.VirtualProtect -@ stdcall VirtualProtectEx() kernel32.VirtualProtectEx -@ stdcall VirtualQuery() kernel32.VirtualQuery -@ stdcall VirtualQueryEx() kernel32.VirtualQueryEx -@ stdcall WriteProcessMemory() kernel32.WriteProcessMemory diff --git a/dll/apisets/api-ms-win-core-memory-l1-1-1.spec b/dll/apisets/api-ms-win-core-memory-l1-1-1.spec deleted file mode 100644 index 3d6e675becb..00000000000 --- a/dll/apisets/api-ms-win-core-memory-l1-1-1.spec +++ /dev/null @@ -1,35 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub CreateFileMappingFromApp -@ stdcall -version=0x600+ CreateFileMappingNumaW() kernel32.CreateFileMappingNumaW -@ stdcall CreateFileMappingW() kernel32.CreateFileMappingW -@ stdcall CreateMemoryResourceNotification() kernel32.CreateMemoryResourceNotification -@ stdcall FlushViewOfFile() kernel32.FlushViewOfFile -@ stdcall GetLargePageMinimum() kernel32.GetLargePageMinimum -@ stdcall GetProcessWorkingSetSizeEx() kernel32.GetProcessWorkingSetSizeEx -@ stdcall GetSystemFileCacheSize() kernel32.GetSystemFileCacheSize -@ stdcall GetWriteWatch() kernel32.GetWriteWatch -@ stdcall MapViewOfFile() kernel32.MapViewOfFile -@ stdcall MapViewOfFileEx() kernel32.MapViewOfFileEx -@ stub MapViewOfFileFromApp -@ stdcall OpenFileMappingW() kernel32.OpenFileMappingW -@ stub PrefetchVirtualMemory -@ stdcall QueryMemoryResourceNotification() kernel32.QueryMemoryResourceNotification -@ stdcall ReadProcessMemory() kernel32.ReadProcessMemory -@ stdcall ResetWriteWatch() kernel32.ResetWriteWatch -@ stdcall SetProcessWorkingSetSizeEx() kernel32.SetProcessWorkingSetSizeEx -@ stdcall SetSystemFileCacheSize() kernel32.SetSystemFileCacheSize -@ stdcall UnmapViewOfFile() kernel32.UnmapViewOfFile -@ stub UnmapViewOfFileEx -@ stdcall VirtualAlloc() kernel32.VirtualAlloc -@ stdcall VirtualAllocEx() kernel32.VirtualAllocEx -@ stdcall VirtualFree() kernel32.VirtualFree -@ stdcall VirtualFreeEx() kernel32.VirtualFreeEx -@ stdcall VirtualLock() kernel32.VirtualLock -@ stdcall VirtualProtect() kernel32.VirtualProtect -@ stdcall VirtualProtectEx() kernel32.VirtualProtectEx -@ stdcall VirtualQuery() kernel32.VirtualQuery -@ stdcall VirtualQueryEx() kernel32.VirtualQueryEx -@ stdcall VirtualUnlock() kernel32.VirtualUnlock -@ stdcall WriteProcessMemory() kernel32.WriteProcessMemory diff --git a/dll/apisets/api-ms-win-core-memory-l1-1-2.spec b/dll/apisets/api-ms-win-core-memory-l1-1-2.spec deleted file mode 100644 index 31915933d73..00000000000 --- a/dll/apisets/api-ms-win-core-memory-l1-1-2.spec +++ /dev/null @@ -1,42 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall AllocateUserPhysicalPages() kernel32.AllocateUserPhysicalPages -@ stdcall -version=0x600+ AllocateUserPhysicalPagesNuma() kernel32.AllocateUserPhysicalPagesNuma -@ stub CreateFileMappingFromApp -@ stdcall -version=0x600+ CreateFileMappingNumaW() kernel32.CreateFileMappingNumaW -@ stdcall CreateFileMappingW() kernel32.CreateFileMappingW -@ stdcall CreateMemoryResourceNotification() kernel32.CreateMemoryResourceNotification -@ stdcall FlushViewOfFile() kernel32.FlushViewOfFile -@ stdcall FreeUserPhysicalPages() kernel32.FreeUserPhysicalPages -@ stdcall GetLargePageMinimum() kernel32.GetLargePageMinimum -@ stub GetMemoryErrorHandlingCapabilities -@ stdcall GetProcessWorkingSetSizeEx() kernel32.GetProcessWorkingSetSizeEx -@ stdcall GetSystemFileCacheSize() kernel32.GetSystemFileCacheSize -@ stdcall GetWriteWatch() kernel32.GetWriteWatch -@ stdcall MapUserPhysicalPages() kernel32.MapUserPhysicalPages -@ stdcall MapViewOfFile() kernel32.MapViewOfFile -@ stdcall MapViewOfFileEx() kernel32.MapViewOfFileEx -@ stub MapViewOfFileFromApp -@ stdcall OpenFileMappingW() kernel32.OpenFileMappingW -@ stub PrefetchVirtualMemory -@ stdcall QueryMemoryResourceNotification() kernel32.QueryMemoryResourceNotification -@ stdcall ReadProcessMemory() kernel32.ReadProcessMemory -@ stub RegisterBadMemoryNotification -@ stdcall ResetWriteWatch() kernel32.ResetWriteWatch -@ stdcall SetProcessWorkingSetSizeEx() kernel32.SetProcessWorkingSetSizeEx -@ stdcall SetSystemFileCacheSize() kernel32.SetSystemFileCacheSize -@ stdcall UnmapViewOfFile() kernel32.UnmapViewOfFile -@ stub UnmapViewOfFileEx -@ stub UnregisterBadMemoryNotification -@ stdcall VirtualAlloc() kernel32.VirtualAlloc -@ stdcall VirtualAllocEx() kernel32.VirtualAllocEx -@ stdcall -version=0x600+ VirtualAllocExNuma() kernel32.VirtualAllocExNuma -@ stdcall VirtualFree() kernel32.VirtualFree -@ stdcall VirtualFreeEx() kernel32.VirtualFreeEx -@ stdcall VirtualLock() kernel32.VirtualLock -@ stdcall VirtualProtect() kernel32.VirtualProtect -@ stdcall VirtualProtectEx() kernel32.VirtualProtectEx -@ stdcall VirtualQuery() kernel32.VirtualQuery -@ stdcall VirtualUnlock() kernel32.VirtualUnlock -@ stdcall WriteProcessMemory() kernel32.WriteProcessMemory diff --git a/dll/apisets/api-ms-win-core-misc-l1-1-0.spec b/dll/apisets/api-ms-win-core-misc-l1-1-0.spec deleted file mode 100644 index 60e46b71c0b..00000000000 --- a/dll/apisets/api-ms-win-core-misc-l1-1-0.spec +++ /dev/null @@ -1,37 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall EnumSystemLocalesA() kernel32.EnumSystemLocalesA -@ stdcall FatalAppExitA() kernel32.FatalAppExitA -@ stdcall FatalAppExitW() kernel32.FatalAppExitW -@ stdcall FormatMessageA() kernel32.FormatMessageA -@ stdcall FormatMessageW() kernel32.FormatMessageW -@ stdcall GlobalAlloc() kernel32.GlobalAlloc -@ stdcall GlobalFree() kernel32.GlobalFree -@ stdcall IsProcessInJob() kernel32.IsProcessInJob -@ stdcall IsWow64Process() kernel32.IsWow64Process -@ stdcall LCMapStringA() kernel32.LCMapStringA -@ stdcall LocalAlloc() kernel32.LocalAlloc -@ stdcall LocalFree() kernel32.LocalFree -@ stdcall LocalLock() kernel32.LocalLock -@ stdcall LocalReAlloc() kernel32.LocalReAlloc -@ stdcall LocalUnlock() kernel32.LocalUnlock -@ stdcall NeedCurrentDirectoryForExePathA() kernel32.NeedCurrentDirectoryForExePathA -@ stdcall NeedCurrentDirectoryForExePathW() kernel32.NeedCurrentDirectoryForExePathW -@ stdcall PulseEvent() kernel32.PulseEvent -@ stdcall SetHandleCount() kernel32.SetHandleCount -@ stdcall Sleep() kernel32.Sleep -@ stdcall Wow64DisableWow64FsRedirection() kernel32.Wow64DisableWow64FsRedirection -@ stdcall Wow64RevertWow64FsRedirection() kernel32.Wow64RevertWow64FsRedirection -@ stdcall lstrcmp() kernel32.lstrcmp -@ stdcall lstrcmpA() kernel32.lstrcmpA -@ stdcall lstrcmpW() kernel32.lstrcmpW -@ stdcall lstrcmpi() kernel32.lstrcmpi -@ stdcall lstrcmpiA() kernel32.lstrcmpiA -@ stdcall lstrcmpiW() kernel32.lstrcmpiW -@ stdcall lstrcpyn() kernel32.lstrcpyn -@ stdcall lstrcpynA() kernel32.lstrcpynA -@ stdcall lstrcpynW() kernel32.lstrcpynW -@ stdcall lstrlen() kernel32.lstrlen -@ stdcall lstrlenA() kernel32.lstrlenA -@ stdcall lstrlenW() kernel32.lstrlenW diff --git a/dll/apisets/api-ms-win-core-namedpipe-l1-1-0.spec b/dll/apisets/api-ms-win-core-namedpipe-l1-1-0.spec deleted file mode 100644 index c6a9bca54b4..00000000000 --- a/dll/apisets/api-ms-win-core-namedpipe-l1-1-0.spec +++ /dev/null @@ -1,14 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall ConnectNamedPipe() kernel32.ConnectNamedPipe -@ stdcall CreateNamedPipeW() kernel32.CreateNamedPipeW -@ stdcall CreatePipe() kernel32.CreatePipe -@ stdcall DisconnectNamedPipe() kernel32.DisconnectNamedPipe -@ stdcall -version=0x600+ GetNamedPipeAttribute() kernel32.GetNamedPipeAttribute -@ stdcall -version=0x600+ GetNamedPipeClientComputerNameW() kernel32.GetNamedPipeClientComputerNameW -@ stdcall ImpersonateNamedPipeClient() advapi32.ImpersonateNamedPipeClient -@ stdcall PeekNamedPipe() kernel32.PeekNamedPipe -@ stdcall SetNamedPipeHandleState() kernel32.SetNamedPipeHandleState -@ stdcall TransactNamedPipe() kernel32.TransactNamedPipe -@ stdcall WaitNamedPipeW() kernel32.WaitNamedPipeW diff --git a/dll/apisets/api-ms-win-core-namedpipe-l1-2-0.spec b/dll/apisets/api-ms-win-core-namedpipe-l1-2-0.spec deleted file mode 100644 index 0d3aa5f1f77..00000000000 --- a/dll/apisets/api-ms-win-core-namedpipe-l1-2-0.spec +++ /dev/null @@ -1,13 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall ConnectNamedPipe() kernel32.ConnectNamedPipe -@ stdcall CreateNamedPipeW() kernel32.CreateNamedPipeW -@ stdcall CreatePipe() kernel32.CreatePipe -@ stdcall DisconnectNamedPipe() kernel32.DisconnectNamedPipe -@ stdcall -version=0x600+ GetNamedPipeClientComputerNameW() kernel32.GetNamedPipeClientComputerNameW -@ stdcall ImpersonateNamedPipeClient() advapi32.ImpersonateNamedPipeClient -@ stdcall PeekNamedPipe() kernel32.PeekNamedPipe -@ stdcall SetNamedPipeHandleState() kernel32.SetNamedPipeHandleState -@ stdcall TransactNamedPipe() kernel32.TransactNamedPipe -@ stdcall WaitNamedPipeW() kernel32.WaitNamedPipeW diff --git a/dll/apisets/api-ms-win-core-namespace-l1-1-0.spec b/dll/apisets/api-ms-win-core-namespace-l1-1-0.spec deleted file mode 100644 index cde1cd4085a..00000000000 --- a/dll/apisets/api-ms-win-core-namespace-l1-1-0.spec +++ /dev/null @@ -1,9 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall -version=0x600+ AddSIDToBoundaryDescriptor() kernel32.AddSIDToBoundaryDescriptor -@ stdcall -version=0x600+ ClosePrivateNamespace() kernel32.ClosePrivateNamespace -@ stdcall -version=0x600+ CreateBoundaryDescriptorW() kernel32.CreateBoundaryDescriptorW -@ stdcall -version=0x600+ CreatePrivateNamespaceW() kernel32.CreatePrivateNamespaceW -@ stdcall -version=0x600+ DeleteBoundaryDescriptor() kernel32.DeleteBoundaryDescriptor -@ stdcall -version=0x600+ OpenPrivateNamespaceW() kernel32.OpenPrivateNamespaceW diff --git a/dll/apisets/api-ms-win-core-normalization-l1-1-0.spec b/dll/apisets/api-ms-win-core-normalization-l1-1-0.spec deleted file mode 100644 index 5640530950b..00000000000 --- a/dll/apisets/api-ms-win-core-normalization-l1-1-0.spec +++ /dev/null @@ -1,8 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall -version=0x600+ GetStringScripts() kernel32.GetStringScripts -@ stdcall -version=0x600+ IdnToNameprepUnicode() kernel32.IdnToNameprepUnicode -@ stdcall -version=0x600+ IsNormalizedString() kernel32.IsNormalizedString -@ stdcall -version=0x600+ NormalizeString() kernel32.NormalizeString -@ stdcall -version=0x600+ VerifyScripts() kernel32.VerifyScripts diff --git a/dll/apisets/api-ms-win-core-path-l1-1-0.spec b/dll/apisets/api-ms-win-core-path-l1-1-0.spec deleted file mode 100644 index 75cfb62be5e..00000000000 --- a/dll/apisets/api-ms-win-core-path-l1-1-0.spec +++ /dev/null @@ -1,25 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub PathAllocCanonicalize -@ stub PathAllocCombine -@ stub PathCchAddBackslash -@ stub PathCchAddBackslashEx -@ stub PathCchAddExtension -@ stub PathCchAppend -@ stub PathCchAppendEx -@ stub PathCchCanonicalize -@ stub PathCchCanonicalizeEx -@ stub PathCchCombine -@ stub PathCchCombineEx -@ stub PathCchFindExtension -@ stub PathCchIsRoot -@ stub PathCchRemoveBackslash -@ stub PathCchRemoveBackslashEx -@ stub PathCchRemoveExtension -@ stub PathCchRemoveFileSpec -@ stub PathCchRenameExtension -@ stub PathCchSkipRoot -@ stub PathCchStripPrefix -@ stub PathCchStripToRoot -@ stub PathIsUNCEx diff --git a/dll/apisets/api-ms-win-core-privateprofile-l1-1-1.spec b/dll/apisets/api-ms-win-core-privateprofile-l1-1-1.spec deleted file mode 100644 index e2280b70c26..00000000000 --- a/dll/apisets/api-ms-win-core-privateprofile-l1-1-1.spec +++ /dev/null @@ -1,5 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall GetPrivateProfileSectionA() kernel32.GetPrivateProfileSectionA -@ stdcall WritePrivateProfileSectionW() kernel32.WritePrivateProfileSectionW diff --git a/dll/apisets/api-ms-win-core-processenvironment-l1-1-0.spec b/dll/apisets/api-ms-win-core-processenvironment-l1-1-0.spec deleted file mode 100644 index 46ee97cb8d0..00000000000 --- a/dll/apisets/api-ms-win-core-processenvironment-l1-1-0.spec +++ /dev/null @@ -1,25 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall ExpandEnvironmentStringsA() kernel32.ExpandEnvironmentStringsA -@ stdcall ExpandEnvironmentStringsW() kernel32.ExpandEnvironmentStringsW -@ stdcall FreeEnvironmentStringsA() kernel32.FreeEnvironmentStringsA -@ stdcall FreeEnvironmentStringsW() kernel32.FreeEnvironmentStringsW -@ stdcall GetCommandLineA() kernel32.GetCommandLineA -@ stdcall GetCommandLineW() kernel32.GetCommandLineW -@ stdcall GetCurrentDirectoryA() kernel32.GetCurrentDirectoryA -@ stdcall GetCurrentDirectoryW() kernel32.GetCurrentDirectoryW -@ stdcall GetEnvironmentStrings() kernel32.GetEnvironmentStrings -@ stdcall GetEnvironmentStringsA() kernel32.GetEnvironmentStringsA -@ stdcall GetEnvironmentStringsW() kernel32.GetEnvironmentStringsW -@ stdcall GetEnvironmentVariableA() kernel32.GetEnvironmentVariableA -@ stdcall GetEnvironmentVariableW() kernel32.GetEnvironmentVariableW -@ stdcall GetStdHandle() kernel32.GetStdHandle -@ stdcall SearchPathW() kernel32.SearchPathW -@ stdcall SetCurrentDirectoryA() kernel32.SetCurrentDirectoryA -@ stdcall SetCurrentDirectoryW() kernel32.SetCurrentDirectoryW -@ stdcall SetEnvironmentStringsW() kernel32.SetEnvironmentStringsW -@ stdcall SetEnvironmentVariableA() kernel32.SetEnvironmentVariableA -@ stdcall SetEnvironmentVariableW() kernel32.SetEnvironmentVariableW -@ stdcall SetStdHandle() kernel32.SetStdHandle -@ stdcall -version=0x600+ SetStdHandleEx() kernel32.SetStdHandleEx diff --git a/dll/apisets/api-ms-win-core-processenvironment-l1-2-0.spec b/dll/apisets/api-ms-win-core-processenvironment-l1-2-0.spec deleted file mode 100644 index ddad3fce6ed..00000000000 --- a/dll/apisets/api-ms-win-core-processenvironment-l1-2-0.spec +++ /dev/null @@ -1,27 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall ExpandEnvironmentStringsA() kernel32.ExpandEnvironmentStringsA -@ stdcall ExpandEnvironmentStringsW() kernel32.ExpandEnvironmentStringsW -@ stdcall FreeEnvironmentStringsA() kernel32.FreeEnvironmentStringsA -@ stdcall FreeEnvironmentStringsW() kernel32.FreeEnvironmentStringsW -@ stdcall GetCommandLineA() kernel32.GetCommandLineA -@ stdcall GetCommandLineW() kernel32.GetCommandLineW -@ stdcall GetCurrentDirectoryA() kernel32.GetCurrentDirectoryA -@ stdcall GetCurrentDirectoryW() kernel32.GetCurrentDirectoryW -@ stdcall GetEnvironmentStrings() kernel32.GetEnvironmentStrings -@ stdcall GetEnvironmentStringsW() kernel32.GetEnvironmentStringsW -@ stdcall GetEnvironmentVariableA() kernel32.GetEnvironmentVariableA -@ stdcall GetEnvironmentVariableW() kernel32.GetEnvironmentVariableW -@ stdcall GetStdHandle() kernel32.GetStdHandle -@ stdcall NeedCurrentDirectoryForExePathA() kernel32.NeedCurrentDirectoryForExePathA -@ stdcall NeedCurrentDirectoryForExePathW() kernel32.NeedCurrentDirectoryForExePathW -@ stdcall SearchPathA() kernel32.SearchPathA -@ stdcall SearchPathW() kernel32.SearchPathW -@ stdcall SetCurrentDirectoryA() kernel32.SetCurrentDirectoryA -@ stdcall SetCurrentDirectoryW() kernel32.SetCurrentDirectoryW -@ stdcall SetEnvironmentStringsW() kernel32.SetEnvironmentStringsW -@ stdcall SetEnvironmentVariableA() kernel32.SetEnvironmentVariableA -@ stdcall SetEnvironmentVariableW() kernel32.SetEnvironmentVariableW -@ stdcall SetStdHandle() kernel32.SetStdHandle -@ stdcall -version=0x600+ SetStdHandleEx() kernel32.SetStdHandleEx diff --git a/dll/apisets/api-ms-win-core-processthreads-l1-1-0.spec b/dll/apisets/api-ms-win-core-processthreads-l1-1-0.spec deleted file mode 100644 index 432f955951a..00000000000 --- a/dll/apisets/api-ms-win-core-processthreads-l1-1-0.spec +++ /dev/null @@ -1,52 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CreateProcessA() kernel32.CreateProcessA -@ stdcall CreateProcessAsUserW() advapi32.CreateProcessAsUserW -@ stdcall CreateProcessW() kernel32.CreateProcessW -@ stdcall CreateRemoteThread() kernel32.CreateRemoteThread -@ stub CreateRemoteThreadEx -@ stdcall CreateThread() kernel32.CreateThread -@ stdcall -version=0x600+ DeleteProcThreadAttributeList() kernel32.DeleteProcThreadAttributeList -@ stdcall ExitProcess() kernel32.ExitProcess -@ stdcall ExitThread() kernel32.ExitThread -@ stdcall -version=0x600+ FlushProcessWriteBuffers() kernel32.FlushProcessWriteBuffers -@ stdcall GetCurrentProcess() kernel32.GetCurrentProcess -@ stdcall GetCurrentProcessId() kernel32.GetCurrentProcessId -@ stdcall GetCurrentThread() kernel32.GetCurrentThread -@ stdcall GetCurrentThreadId() kernel32.GetCurrentThreadId -@ stdcall GetExitCodeProcess() kernel32.GetExitCodeProcess -@ stdcall GetExitCodeThread() kernel32.GetExitCodeThread -@ stdcall GetPriorityClass() kernel32.GetPriorityClass -@ stdcall GetProcessId() kernel32.GetProcessId -@ stdcall GetProcessIdOfThread() kernel32.GetProcessIdOfThread -@ stdcall GetProcessTimes() kernel32.GetProcessTimes -@ stdcall GetProcessVersion() kernel32.GetProcessVersion -@ stdcall GetStartupInfoW() kernel32.GetStartupInfoW -@ stdcall GetThreadId() kernel32.GetThreadId -@ stdcall GetThreadPriority() kernel32.GetThreadPriority -@ stdcall GetThreadPriorityBoost() kernel32.GetThreadPriorityBoost -@ stdcall -version=0x600+ InitializeProcThreadAttributeList() kernel32.InitializeProcThreadAttributeList -@ stdcall OpenProcessToken() advapi32.OpenProcessToken -@ stdcall OpenThread() kernel32.OpenThread -@ stdcall OpenThreadToken() advapi32.OpenThreadToken -@ stdcall ProcessIdToSessionId() kernel32.ProcessIdToSessionId -@ stdcall -version=0x600+ QueryProcessAffinityUpdateMode() kernel32.QueryProcessAffinityUpdateMode -@ stdcall QueueUserAPC() kernel32.QueueUserAPC -@ stdcall ResumeThread() kernel32.ResumeThread -@ stdcall SetPriorityClass() kernel32.SetPriorityClass -@ stdcall -version=0x600+ SetProcessAffinityUpdateMode() kernel32.SetProcessAffinityUpdateMode -@ stdcall SetProcessShutdownParameters() kernel32.SetProcessShutdownParameters -@ stdcall SetThreadPriority() kernel32.SetThreadPriority -@ stdcall SetThreadPriorityBoost() kernel32.SetThreadPriorityBoost -@ stdcall SetThreadStackGuarantee() kernel32.SetThreadStackGuarantee -@ stdcall SetThreadToken() advapi32.SetThreadToken -@ stdcall SuspendThread() kernel32.SuspendThread -@ stdcall SwitchToThread() kernel32.SwitchToThread -@ stdcall TerminateProcess() kernel32.TerminateProcess -@ stdcall TerminateThread() kernel32.TerminateThread -@ stdcall TlsAlloc() kernel32.TlsAlloc -@ stdcall TlsFree() kernel32.TlsFree -@ stdcall TlsGetValue() kernel32.TlsGetValue -@ stdcall TlsSetValue() kernel32.TlsSetValue -@ stdcall -version=0x600+ UpdateProcThreadAttribute() kernel32.UpdateProcThreadAttribute diff --git a/dll/apisets/api-ms-win-core-processthreads-l1-1-1.spec b/dll/apisets/api-ms-win-core-processthreads-l1-1-1.spec deleted file mode 100644 index 62adee5fadb..00000000000 --- a/dll/apisets/api-ms-win-core-processthreads-l1-1-1.spec +++ /dev/null @@ -1,66 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CreateProcessA() kernel32.CreateProcessA -@ stdcall CreateProcessAsUserW() advapi32.CreateProcessAsUserW -@ stdcall CreateProcessW() kernel32.CreateProcessW -@ stdcall CreateRemoteThread() kernel32.CreateRemoteThread -@ stub CreateRemoteThreadEx -@ stdcall CreateThread() kernel32.CreateThread -@ stdcall -version=0x600+ DeleteProcThreadAttributeList() kernel32.DeleteProcThreadAttributeList -@ stdcall ExitProcess() kernel32.ExitProcess -@ stdcall ExitThread() kernel32.ExitThread -@ stdcall FlushInstructionCache() kernel32.FlushInstructionCache -@ stdcall -version=0x600+ FlushProcessWriteBuffers() kernel32.FlushProcessWriteBuffers -@ stdcall GetCurrentProcess() kernel32.GetCurrentProcess -@ stdcall GetCurrentProcessId() kernel32.GetCurrentProcessId -@ stdcall GetCurrentProcessorNumber() kernel32.GetCurrentProcessorNumber -@ stub GetCurrentProcessorNumberEx -@ stdcall GetCurrentThread() kernel32.GetCurrentThread -@ stdcall GetCurrentThreadId() kernel32.GetCurrentThreadId -@ stub GetCurrentThreadStackLimits -@ stdcall GetExitCodeProcess() kernel32.GetExitCodeProcess -@ stdcall GetExitCodeThread() kernel32.GetExitCodeThread -@ stdcall GetPriorityClass() kernel32.GetPriorityClass -@ stdcall GetProcessHandleCount() kernel32.GetProcessHandleCount -@ stdcall GetProcessId() kernel32.GetProcessId -@ stdcall GetProcessIdOfThread() kernel32.GetProcessIdOfThread -@ stub GetProcessMitigationPolicy -@ stdcall GetProcessTimes() kernel32.GetProcessTimes -@ stdcall GetProcessVersion() kernel32.GetProcessVersion -@ stdcall GetStartupInfoW() kernel32.GetStartupInfoW -@ stdcall GetThreadContext() kernel32.GetThreadContext -@ stdcall GetThreadId() kernel32.GetThreadId -@ stub GetThreadIdealProcessorEx -@ stdcall GetThreadPriority() kernel32.GetThreadPriority -@ stdcall GetThreadPriorityBoost() kernel32.GetThreadPriorityBoost -@ stdcall GetThreadTimes() kernel32.GetThreadTimes -@ stdcall -version=0x600+ InitializeProcThreadAttributeList() kernel32.InitializeProcThreadAttributeList -@ stdcall IsProcessorFeaturePresent() kernel32.IsProcessorFeaturePresent -@ stdcall OpenProcess() kernel32.OpenProcess -@ stdcall OpenProcessToken() advapi32.OpenProcessToken -@ stdcall OpenThread() kernel32.OpenThread -@ stdcall OpenThreadToken() advapi32.OpenThreadToken -@ stdcall ProcessIdToSessionId() kernel32.ProcessIdToSessionId -@ stdcall -version=0x600+ QueryProcessAffinityUpdateMode() kernel32.QueryProcessAffinityUpdateMode -@ stdcall QueueUserAPC() kernel32.QueueUserAPC -@ stdcall ResumeThread() kernel32.ResumeThread -@ stdcall SetPriorityClass() kernel32.SetPriorityClass -@ stdcall -version=0x600+ SetProcessAffinityUpdateMode() kernel32.SetProcessAffinityUpdateMode -@ stub SetProcessMitigationPolicy -@ stdcall SetProcessShutdownParameters() kernel32.SetProcessShutdownParameters -@ stdcall SetThreadContext() kernel32.SetThreadContext -@ stub SetThreadIdealProcessorEx -@ stdcall SetThreadPriority() kernel32.SetThreadPriority -@ stdcall SetThreadPriorityBoost() kernel32.SetThreadPriorityBoost -@ stdcall SetThreadStackGuarantee() kernel32.SetThreadStackGuarantee -@ stdcall SetThreadToken() advapi32.SetThreadToken -@ stdcall SuspendThread() kernel32.SuspendThread -@ stdcall SwitchToThread() kernel32.SwitchToThread -@ stdcall TerminateProcess() kernel32.TerminateProcess -@ stdcall TerminateThread() kernel32.TerminateThread -@ stdcall TlsAlloc() kernel32.TlsAlloc -@ stdcall TlsFree() kernel32.TlsFree -@ stdcall TlsGetValue() kernel32.TlsGetValue -@ stdcall TlsSetValue() kernel32.TlsSetValue -@ stdcall -version=0x600+ UpdateProcThreadAttribute() kernel32.UpdateProcThreadAttribute diff --git a/dll/apisets/api-ms-win-core-processthreads-l1-1-2.spec b/dll/apisets/api-ms-win-core-processthreads-l1-1-2.spec deleted file mode 100644 index f4e8853d7f1..00000000000 --- a/dll/apisets/api-ms-win-core-processthreads-l1-1-2.spec +++ /dev/null @@ -1,73 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CreateProcessA() kernel32.CreateProcessA -@ stdcall CreateProcessAsUserW() advapi32.CreateProcessAsUserW -@ stdcall CreateProcessW() kernel32.CreateProcessW -@ stdcall CreateRemoteThread() kernel32.CreateRemoteThread -@ stub CreateRemoteThreadEx -@ stdcall CreateThread() kernel32.CreateThread -@ stdcall -version=0x600+ DeleteProcThreadAttributeList() kernel32.DeleteProcThreadAttributeList -@ stdcall ExitProcess() kernel32.ExitProcess -@ stdcall ExitThread() kernel32.ExitThread -@ stdcall FlushInstructionCache() kernel32.FlushInstructionCache -@ stdcall -version=0x600+ FlushProcessWriteBuffers() kernel32.FlushProcessWriteBuffers -@ stdcall GetCurrentProcess() kernel32.GetCurrentProcess -@ stdcall GetCurrentProcessId() kernel32.GetCurrentProcessId -@ stdcall GetCurrentProcessorNumber() kernel32.GetCurrentProcessorNumber -@ stub GetCurrentProcessorNumberEx -@ stdcall GetCurrentThread() kernel32.GetCurrentThread -@ stdcall GetCurrentThreadId() kernel32.GetCurrentThreadId -@ stub GetCurrentThreadStackLimits -@ stdcall GetExitCodeProcess() kernel32.GetExitCodeProcess -@ stdcall GetExitCodeThread() kernel32.GetExitCodeThread -@ stdcall GetPriorityClass() kernel32.GetPriorityClass -@ stdcall GetProcessHandleCount() kernel32.GetProcessHandleCount -@ stdcall GetProcessId() kernel32.GetProcessId -@ stdcall GetProcessIdOfThread() kernel32.GetProcessIdOfThread -@ stub GetProcessMitigationPolicy -@ stdcall GetProcessPriorityBoost() kernel32.GetProcessPriorityBoost -@ stdcall GetProcessTimes() kernel32.GetProcessTimes -@ stdcall GetProcessVersion() kernel32.GetProcessVersion -@ stdcall GetStartupInfoW() kernel32.GetStartupInfoW -@ stdcall GetSystemTimes() kernel32.GetSystemTimes -@ stdcall GetThreadContext() kernel32.GetThreadContext -@ stdcall GetThreadIOPendingFlag() kernel32.GetThreadIOPendingFlag -@ stdcall GetThreadId() kernel32.GetThreadId -@ stub GetThreadIdealProcessorEx -@ stub GetThreadInformation -@ stdcall GetThreadPriority() kernel32.GetThreadPriority -@ stdcall GetThreadPriorityBoost() kernel32.GetThreadPriorityBoost -@ stdcall GetThreadTimes() kernel32.GetThreadTimes -@ stdcall -version=0x600+ InitializeProcThreadAttributeList() kernel32.InitializeProcThreadAttributeList -@ stub IsProcessCritical -@ stdcall IsProcessorFeaturePresent() kernel32.IsProcessorFeaturePresent -@ stdcall OpenProcess() kernel32.OpenProcess -@ stdcall OpenProcessToken() advapi32.OpenProcessToken -@ stdcall OpenThread() kernel32.OpenThread -@ stdcall OpenThreadToken() advapi32.OpenThreadToken -@ stdcall ProcessIdToSessionId() kernel32.ProcessIdToSessionId -@ stdcall -version=0x600+ QueryProcessAffinityUpdateMode() kernel32.QueryProcessAffinityUpdateMode -@ stdcall QueueUserAPC() kernel32.QueueUserAPC -@ stdcall ResumeThread() kernel32.ResumeThread -@ stdcall SetPriorityClass() kernel32.SetPriorityClass -@ stdcall -version=0x600+ SetProcessAffinityUpdateMode() kernel32.SetProcessAffinityUpdateMode -@ stub SetProcessMitigationPolicy -@ stdcall SetProcessPriorityBoost() kernel32.SetProcessPriorityBoost -@ stdcall SetProcessShutdownParameters() kernel32.SetProcessShutdownParameters -@ stdcall SetThreadContext() kernel32.SetThreadContext -@ stub SetThreadIdealProcessorEx -@ stub SetThreadInformation -@ stdcall SetThreadPriority() kernel32.SetThreadPriority -@ stdcall SetThreadPriorityBoost() kernel32.SetThreadPriorityBoost -@ stdcall SetThreadStackGuarantee() kernel32.SetThreadStackGuarantee -@ stdcall SetThreadToken() advapi32.SetThreadToken -@ stdcall SuspendThread() kernel32.SuspendThread -@ stdcall SwitchToThread() kernel32.SwitchToThread -@ stdcall TerminateProcess() kernel32.TerminateProcess -@ stdcall TerminateThread() kernel32.TerminateThread -@ stdcall TlsAlloc() kernel32.TlsAlloc -@ stdcall TlsFree() kernel32.TlsFree -@ stdcall TlsGetValue() kernel32.TlsGetValue -@ stdcall TlsSetValue() kernel32.TlsSetValue -@ stdcall -version=0x600+ UpdateProcThreadAttribute() kernel32.UpdateProcThreadAttribute diff --git a/dll/apisets/api-ms-win-core-processthreads-l1-1-3.spec b/dll/apisets/api-ms-win-core-processthreads-l1-1-3.spec deleted file mode 100644 index de9b8604688..00000000000 --- a/dll/apisets/api-ms-win-core-processthreads-l1-1-3.spec +++ /dev/null @@ -1,13 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub GetProcessDefaultCpuSets -@ stub GetProcessInformation -@ stub GetSystemCpuSetInformation -@ stub GetThreadDescription -@ stub GetThreadSelectedCpuSets -@ stub SetProcessDefaultCpuSets -@ stub SetProcessInformation -@ stub SetThreadDescription -@ stdcall SetThreadIdealProcessor() kernel32.SetThreadIdealProcessor -@ stub SetThreadSelectedCpuSets diff --git a/dll/apisets/api-ms-win-core-processtopology-obsolete-l1-1-0.spec b/dll/apisets/api-ms-win-core-processtopology-obsolete-l1-1-0.spec deleted file mode 100644 index bebb4073feb..00000000000 --- a/dll/apisets/api-ms-win-core-processtopology-obsolete-l1-1-0.spec +++ /dev/null @@ -1,8 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub GetActiveProcessorCount -@ stdcall GetProcessAffinityMask() kernel32.GetProcessAffinityMask -@ stdcall GetProcessIoCounters() kernel32.GetProcessIoCounters -@ stdcall SetProcessAffinityMask() kernel32.SetProcessAffinityMask -@ stdcall SetThreadAffinityMask() kernel32.SetThreadAffinityMask diff --git a/dll/apisets/api-ms-win-core-profile-l1-1-0.spec b/dll/apisets/api-ms-win-core-profile-l1-1-0.spec deleted file mode 100644 index 2e34a987119..00000000000 --- a/dll/apisets/api-ms-win-core-profile-l1-1-0.spec +++ /dev/null @@ -1,5 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall QueryPerformanceCounter() kernel32.QueryPerformanceCounter -@ stdcall QueryPerformanceFrequency() kernel32.QueryPerformanceFrequency diff --git a/dll/apisets/api-ms-win-core-psapi-ansi-l1-1-0.spec b/dll/apisets/api-ms-win-core-psapi-ansi-l1-1-0.spec deleted file mode 100644 index 0c4cc788266..00000000000 --- a/dll/apisets/api-ms-win-core-psapi-ansi-l1-1-0.spec +++ /dev/null @@ -1,9 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub K32EnumPageFilesA -@ stub K32GetDeviceDriverBaseNameA -@ stub K32GetDeviceDriverFileNameA -@ stub K32GetMappedFileNameA -@ stub K32GetProcessImageFileNameA -@ stdcall -version=0x600+ QueryFullProcessImageNameA() kernel32.QueryFullProcessImageNameA diff --git a/dll/apisets/api-ms-win-core-psapi-l1-1-0.spec b/dll/apisets/api-ms-win-core-psapi-l1-1-0.spec deleted file mode 100644 index 08c5120f7c4..00000000000 --- a/dll/apisets/api-ms-win-core-psapi-l1-1-0.spec +++ /dev/null @@ -1,19 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub K32EmptyWorkingSet -@ stub K32EnumDeviceDrivers -@ stub K32EnumPageFilesW -@ stub K32EnumProcesses -@ stub K32GetDeviceDriverBaseNameW -@ stub K32GetDeviceDriverFileNameW -@ stub K32GetMappedFileNameW -@ stub K32GetPerformanceInfo -@ stub K32GetProcessImageFileNameW -@ stub K32GetProcessMemoryInfo -@ stub K32GetWsChanges -@ stub K32GetWsChangesEx -@ stub K32InitializeProcessForWsWatch -@ stub K32QueryWorkingSet -@ stub K32QueryWorkingSetEx -@ stdcall -version=0x600+ QueryFullProcessImageNameW() kernel32.QueryFullProcessImageNameW diff --git a/dll/apisets/api-ms-win-core-psapi-obsolete-l1-1-0.spec b/dll/apisets/api-ms-win-core-psapi-obsolete-l1-1-0.spec deleted file mode 100644 index 0c2cacfd543..00000000000 --- a/dll/apisets/api-ms-win-core-psapi-obsolete-l1-1-0.spec +++ /dev/null @@ -1,10 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub K32EnumProcessModules -@ stub K32EnumProcessModulesEx -@ stub K32GetModuleBaseNameA -@ stub K32GetModuleBaseNameW -@ stub K32GetModuleFileNameExA -@ stub K32GetModuleFileNameExW -@ stub K32GetModuleInformation diff --git a/dll/apisets/api-ms-win-core-quirks-l1-1-0.spec b/dll/apisets/api-ms-win-core-quirks-l1-1-0.spec deleted file mode 100644 index d8c37fb310d..00000000000 --- a/dll/apisets/api-ms-win-core-quirks-l1-1-0.spec +++ /dev/null @@ -1,11 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub QuirkGetData -@ stub QuirkGetData2 -@ stub QuirkIsEnabled -@ stub QuirkIsEnabled2 -@ stub QuirkIsEnabled3 -@ stub QuirkIsEnabledForPackage -@ stub QuirkIsEnabledForPackage2 -@ stub QuirkIsEnabledForProcess diff --git a/dll/apisets/api-ms-win-core-realtime-l1-1-0.spec b/dll/apisets/api-ms-win-core-realtime-l1-1-0.spec deleted file mode 100644 index 3c97fd06143..00000000000 --- a/dll/apisets/api-ms-win-core-realtime-l1-1-0.spec +++ /dev/null @@ -1,8 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall -version=0x600+ QueryIdleProcessorCycleTime() kernel32.QueryIdleProcessorCycleTime -@ stub QueryIdleProcessorCycleTimeEx -@ stdcall -version=0x600+ QueryProcessCycleTime() kernel32.QueryProcessCycleTime -@ stdcall -version=0x600+ QueryThreadCycleTime() kernel32.QueryThreadCycleTime -@ stub QueryUnbiasedInterruptTime diff --git a/dll/apisets/api-ms-win-core-registry-l1-1-0.spec b/dll/apisets/api-ms-win-core-registry-l1-1-0.spec deleted file mode 100644 index b1248cb7a6d..00000000000 --- a/dll/apisets/api-ms-win-core-registry-l1-1-0.spec +++ /dev/null @@ -1,46 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall RegCloseKey() advapi32.RegCloseKey -@ stub RegCopyTreeW -@ stdcall RegCreateKeyExA() advapi32.RegCreateKeyExA -@ stdcall RegCreateKeyExW() advapi32.RegCreateKeyExW -@ stdcall RegDeleteKeyExA() advapi32.RegDeleteKeyExA -@ stdcall RegDeleteKeyExW() advapi32.RegDeleteKeyExW -@ stdcall RegDeleteTreeA() advapi32_vista.RegDeleteTreeA -@ stdcall RegDeleteTreeW() advapi32_vista.RegDeleteTreeW -@ stdcall RegDeleteValueA() advapi32.RegDeleteValueA -@ stdcall RegDeleteValueW() advapi32.RegDeleteValueW -@ stub RegDisablePredefinedCacheEx -@ stdcall RegEnumKeyExA() advapi32.RegEnumKeyExA -@ stdcall RegEnumKeyExW() advapi32.RegEnumKeyExW -@ stdcall RegEnumValueA() advapi32.RegEnumValueA -@ stdcall RegEnumValueW() advapi32.RegEnumValueW -@ stdcall RegFlushKey() advapi32.RegFlushKey -@ stdcall RegGetKeySecurity() advapi32.RegGetKeySecurity -@ stdcall RegGetValueA() advapi32.RegGetValueA -@ stdcall RegGetValueW() advapi32.RegGetValueW -@ stub RegLoadAppKeyA -@ stub RegLoadAppKeyW -@ stdcall RegLoadKeyA() advapi32.RegLoadKeyA -@ stdcall RegLoadKeyW() advapi32.RegLoadKeyW -@ stdcall -version=0x600+ RegLoadMUIStringA() advapi32.RegLoadMUIStringA -@ stdcall -version=0x600+ RegLoadMUIStringW() advapi32.RegLoadMUIStringW -@ stdcall RegNotifyChangeKeyValue() advapi32.RegNotifyChangeKeyValue -@ stdcall RegOpenCurrentUser() advapi32.RegOpenCurrentUser -@ stdcall RegOpenKeyExA() advapi32.RegOpenKeyExA -@ stdcall RegOpenKeyExW() advapi32.RegOpenKeyExW -@ stdcall RegOpenUserClassesRoot() advapi32.RegOpenUserClassesRoot -@ stdcall RegQueryInfoKeyA() advapi32.RegQueryInfoKeyA -@ stdcall RegQueryInfoKeyW() advapi32.RegQueryInfoKeyW -@ stdcall RegQueryValueExA() advapi32.RegQueryValueExA -@ stdcall RegQueryValueExW() advapi32.RegQueryValueExW -@ stdcall RegRestoreKeyA() advapi32.RegRestoreKeyA -@ stdcall RegRestoreKeyW() advapi32.RegRestoreKeyW -@ stdcall RegSaveKeyExA() advapi32.RegSaveKeyExA -@ stdcall RegSaveKeyExW() advapi32.RegSaveKeyExW -@ stdcall RegSetKeySecurity() advapi32.RegSetKeySecurity -@ stdcall RegSetValueExA() advapi32.RegSetValueExA -@ stdcall RegSetValueExW() advapi32.RegSetValueExW -@ stdcall RegUnLoadKeyA() advapi32.RegUnLoadKeyA -@ stdcall RegUnLoadKeyW() advapi32.RegUnLoadKeyW diff --git a/dll/apisets/api-ms-win-core-registry-l2-1-0.spec b/dll/apisets/api-ms-win-core-registry-l2-1-0.spec deleted file mode 100644 index 89e642feaaa..00000000000 --- a/dll/apisets/api-ms-win-core-registry-l2-1-0.spec +++ /dev/null @@ -1,36 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall RegConnectRegistryA() advapi32.RegConnectRegistryA -@ stdcall RegConnectRegistryW() advapi32.RegConnectRegistryW -@ stub RegCopyTreeA -@ stdcall RegCreateKeyA() advapi32.RegCreateKeyA -@ stub RegCreateKeyTransactedA -@ stub RegCreateKeyTransactedW -@ stdcall RegCreateKeyW() advapi32.RegCreateKeyW -@ stdcall RegDeleteKeyA() advapi32.RegDeleteKeyA -@ stub RegDeleteKeyTransactedA -@ stub RegDeleteKeyTransactedW -@ stub RegDeleteKeyValueA -@ stub RegDeleteKeyValueW -@ stdcall RegDeleteKeyW() advapi32.RegDeleteKeyW -@ stdcall RegDisablePredefinedCache() advapi32.RegDisablePredefinedCache -@ stdcall RegEnumKeyA() advapi32.RegEnumKeyA -@ stdcall RegEnumKeyW() advapi32.RegEnumKeyW -@ stdcall RegOpenKeyA() advapi32.RegOpenKeyA -@ stub RegOpenKeyTransactedA -@ stub RegOpenKeyTransactedW -@ stdcall RegOpenKeyW() advapi32.RegOpenKeyW -@ stdcall RegOverridePredefKey() advapi32.RegOverridePredefKey -@ stdcall RegQueryMultipleValuesA() advapi32.RegQueryMultipleValuesA -@ stdcall RegQueryMultipleValuesW() advapi32.RegQueryMultipleValuesW -@ stdcall RegQueryValueA() advapi32.RegQueryValueA -@ stdcall RegQueryValueW() advapi32.RegQueryValueW -@ stdcall RegReplaceKeyA() advapi32.RegReplaceKeyA -@ stdcall RegReplaceKeyW() advapi32.RegReplaceKeyW -@ stdcall RegSaveKeyA() advapi32.RegSaveKeyA -@ stdcall RegSaveKeyW() advapi32.RegSaveKeyW -@ stub RegSetKeyValueA -@ stdcall RegSetKeyValueW() advapi32_vista.RegSetKeyValueW -@ stdcall RegSetValueA() advapi32.RegSetValueA -@ stdcall RegSetValueW() advapi32.RegSetValueW diff --git a/dll/apisets/api-ms-win-core-registryuserspecific-l1-1-0.spec b/dll/apisets/api-ms-win-core-registryuserspecific-l1-1-0.spec deleted file mode 100644 index 4bf478001cc..00000000000 --- a/dll/apisets/api-ms-win-core-registryuserspecific-l1-1-0.spec +++ /dev/null @@ -1,28 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall SHRegCloseUSKey() shlwapi.SHRegCloseUSKey -@ stdcall SHRegCreateUSKeyA() shlwapi.SHRegCreateUSKeyA -@ stdcall SHRegCreateUSKeyW() shlwapi.SHRegCreateUSKeyW -@ stdcall SHRegDeleteEmptyUSKeyA() shlwapi.SHRegDeleteEmptyUSKeyA -@ stdcall SHRegDeleteEmptyUSKeyW() shlwapi.SHRegDeleteEmptyUSKeyW -@ stdcall SHRegDeleteUSValueA() shlwapi.SHRegDeleteUSValueA -@ stdcall SHRegDeleteUSValueW() shlwapi.SHRegDeleteUSValueW -@ stdcall SHRegEnumUSKeyA() shlwapi.SHRegEnumUSKeyA -@ stdcall SHRegEnumUSKeyW() shlwapi.SHRegEnumUSKeyW -@ stdcall SHRegEnumUSValueA() shlwapi.SHRegEnumUSValueA -@ stdcall SHRegEnumUSValueW() shlwapi.SHRegEnumUSValueW -@ stdcall SHRegGetBoolUSValueA() shlwapi.SHRegGetBoolUSValueA -@ stdcall SHRegGetBoolUSValueW() shlwapi.SHRegGetBoolUSValueW -@ stdcall SHRegGetUSValueA() shlwapi.SHRegGetUSValueA -@ stdcall SHRegGetUSValueW() shlwapi.SHRegGetUSValueW -@ stdcall SHRegOpenUSKeyA() shlwapi.SHRegOpenUSKeyA -@ stdcall SHRegOpenUSKeyW() shlwapi.SHRegOpenUSKeyW -@ stdcall SHRegQueryInfoUSKeyA() shlwapi.SHRegQueryInfoUSKeyA -@ stdcall SHRegQueryInfoUSKeyW() shlwapi.SHRegQueryInfoUSKeyW -@ stdcall SHRegQueryUSValueA() shlwapi.SHRegQueryUSValueA -@ stdcall SHRegQueryUSValueW() shlwapi.SHRegQueryUSValueW -@ stdcall SHRegSetUSValueA() shlwapi.SHRegSetUSValueA -@ stdcall SHRegSetUSValueW() shlwapi.SHRegSetUSValueW -@ stdcall SHRegWriteUSValueA() shlwapi.SHRegWriteUSValueA -@ stdcall SHRegWriteUSValueW() shlwapi.SHRegWriteUSValueW diff --git a/dll/apisets/api-ms-win-core-rtlsupport-l1-1-0.spec b/dll/apisets/api-ms-win-core-rtlsupport-l1-1-0.spec deleted file mode 100644 index ff395a693d2..00000000000 --- a/dll/apisets/api-ms-win-core-rtlsupport-l1-1-0.spec +++ /dev/null @@ -1,18 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall -arch=x86_64 RtlAddFunctionTable() ntdll.RtlAddFunctionTable -@ stdcall RtlCaptureContext() ntdll.RtlCaptureContext -@ stdcall RtlCaptureStackBackTrace() ntdll.RtlCaptureStackBackTrace -@ stdcall RtlCompareMemory() ntdll.RtlCompareMemory -@ stdcall -arch=x86_64 RtlCopyMemory() kernel32.RtlCopyMemory -@ stdcall -arch=x86_64 RtlDeleteFunctionTable() ntdll.RtlDeleteFunctionTable -@ stdcall RtlFillMemory() ntdll.RtlFillMemory -@ stdcall -arch=x86_64 RtlInstallFunctionTableCallback() ntdll.RtlInstallFunctionTableCallback -@ stdcall -arch=x86_64 RtlLookupFunctionEntry() ntdll.RtlLookupFunctionEntry -@ stdcall RtlPcToFileHeader() ntdll.RtlPcToFileHeader -@ stdcall RtlRaiseException() ntdll.RtlRaiseException -@ stdcall -arch=x86_64 RtlRestoreContext() ntdll.RtlRestoreContext -@ stdcall RtlUnwind() ntdll.RtlUnwind -@ stdcall -arch=x86_64 RtlUnwindEx() ntdll.RtlUnwindEx -@ stdcall -arch=x86_64 RtlVirtualUnwind() ntdll.RtlVirtualUnwind diff --git a/dll/apisets/api-ms-win-core-rtlsupport-l1-2-0.spec b/dll/apisets/api-ms-win-core-rtlsupport-l1-2-0.spec deleted file mode 100644 index c0ea5eafb60..00000000000 --- a/dll/apisets/api-ms-win-core-rtlsupport-l1-2-0.spec +++ /dev/null @@ -1,9 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall RtlCaptureContext() ntdll.RtlCaptureContext -@ stdcall RtlCaptureStackBackTrace() ntdll.RtlCaptureStackBackTrace -@ stdcall RtlCompareMemory() ntdll.RtlCompareMemory -@ stdcall RtlPcToFileHeader() ntdll.RtlPcToFileHeader -@ stdcall RtlRaiseException() ntdll.RtlRaiseException -@ stdcall RtlUnwind() ntdll.RtlUnwind diff --git a/dll/apisets/api-ms-win-core-shlwapi-legacy-l1-1-0.spec b/dll/apisets/api-ms-win-core-shlwapi-legacy-l1-1-0.spec deleted file mode 100644 index 6669b2c6f1d..00000000000 --- a/dll/apisets/api-ms-win-core-shlwapi-legacy-l1-1-0.spec +++ /dev/null @@ -1,91 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall IsCharBlankW() shlwapi.IsCharBlankW -@ stdcall IsCharCntrlW() shlwapi.IsCharCntrlW -@ stdcall IsCharDigitW() shlwapi.IsCharDigitW -@ stdcall IsCharPunctW() shlwapi.IsCharPunctW -@ stdcall IsCharSpaceA() shlwapi.IsCharSpaceA -@ stdcall IsCharSpaceW() shlwapi.IsCharSpaceW -@ stdcall IsCharXDigitW() shlwapi.IsCharXDigitW -@ stdcall PathAddBackslashA() shlwapi.PathAddBackslashA -@ stdcall PathAddBackslashW() shlwapi.PathAddBackslashW -@ stdcall PathAddExtensionA() shlwapi.PathAddExtensionA -@ stdcall PathAddExtensionW() shlwapi.PathAddExtensionW -@ stdcall PathAppendA() shlwapi.PathAppendA -@ stdcall PathAppendW() shlwapi.PathAppendW -@ stdcall PathCanonicalizeA() shlwapi.PathCanonicalizeA -@ stdcall PathCanonicalizeW() shlwapi.PathCanonicalizeW -@ stdcall PathCombineA() shlwapi.PathCombineA -@ stdcall PathCombineW() shlwapi.PathCombineW -@ stdcall PathCommonPrefixA() shlwapi.PathCommonPrefixA -@ stdcall PathCommonPrefixW() shlwapi.PathCommonPrefixW -@ stdcall PathFileExistsA() shlwapi.PathFileExistsA -@ stdcall PathFileExistsW() shlwapi.PathFileExistsW -@ stdcall PathFindExtensionA() shlwapi.PathFindExtensionA -@ stdcall PathFindExtensionW() shlwapi.PathFindExtensionW -@ stdcall PathFindFileNameA() shlwapi.PathFindFileNameA -@ stdcall PathFindFileNameW() shlwapi.PathFindFileNameW -@ stdcall PathFindNextComponentA() shlwapi.PathFindNextComponentA -@ stdcall PathFindNextComponentW() shlwapi.PathFindNextComponentW -@ stdcall PathGetArgsA() shlwapi.PathGetArgsA -@ stdcall PathGetArgsW() shlwapi.PathGetArgsW -@ stdcall PathGetCharTypeA() shlwapi.PathGetCharTypeA -@ stdcall PathGetCharTypeW() shlwapi.PathGetCharTypeW -@ stdcall PathGetDriveNumberA() shlwapi.PathGetDriveNumberA -@ stdcall PathGetDriveNumberW() shlwapi.PathGetDriveNumberW -@ stdcall PathIsFileSpecA() shlwapi.PathIsFileSpecA -@ stdcall PathIsFileSpecW() shlwapi.PathIsFileSpecW -@ stdcall PathIsLFNFileSpecA() shlwapi.PathIsLFNFileSpecA -@ stdcall PathIsLFNFileSpecW() shlwapi.PathIsLFNFileSpecW -@ stdcall PathIsPrefixA() shlwapi.PathIsPrefixA -@ stdcall PathIsPrefixW() shlwapi.PathIsPrefixW -@ stdcall PathIsRelativeA() shlwapi.PathIsRelativeA -@ stdcall PathIsRelativeW() shlwapi.PathIsRelativeW -@ stdcall PathIsRootA() shlwapi.PathIsRootA -@ stdcall PathIsRootW() shlwapi.PathIsRootW -@ stdcall PathIsSameRootA() shlwapi.PathIsSameRootA -@ stdcall PathIsSameRootW() shlwapi.PathIsSameRootW -@ stdcall PathIsUNCA() shlwapi.PathIsUNCA -@ stdcall PathIsUNCServerA() shlwapi.PathIsUNCServerA -@ stdcall PathIsUNCServerShareA() shlwapi.PathIsUNCServerShareA -@ stdcall PathIsUNCServerShareW() shlwapi.PathIsUNCServerShareW -@ stdcall PathIsUNCServerW() shlwapi.PathIsUNCServerW -@ stdcall PathIsUNCW() shlwapi.PathIsUNCW -@ stdcall PathIsValidCharA() shlwapi.PathIsValidCharA -@ stdcall PathIsValidCharW() shlwapi.PathIsValidCharW -@ stdcall PathMatchSpecA() shlwapi.PathMatchSpecA -@ stub PathMatchSpecExA -@ stub PathMatchSpecExW -@ stdcall PathMatchSpecW() shlwapi.PathMatchSpecW -@ stdcall PathParseIconLocationA() shlwapi.PathParseIconLocationA -@ stdcall PathParseIconLocationW() shlwapi.PathParseIconLocationW -@ stdcall PathQuoteSpacesA() shlwapi.PathQuoteSpacesA -@ stdcall PathQuoteSpacesW() shlwapi.PathQuoteSpacesW -@ stdcall PathRelativePathToA() shlwapi.PathRelativePathToA -@ stdcall PathRelativePathToW() shlwapi.PathRelativePathToW -@ stdcall PathRemoveBackslashA() shlwapi.PathRemoveBackslashA -@ stdcall PathRemoveBackslashW() shlwapi.PathRemoveBackslashW -@ stdcall PathRemoveBlanksA() shlwapi.PathRemoveBlanksA -@ stdcall PathRemoveBlanksW() shlwapi.PathRemoveBlanksW -@ stdcall PathRemoveExtensionA() shlwapi.PathRemoveExtensionA -@ stdcall PathRemoveExtensionW() shlwapi.PathRemoveExtensionW -@ stdcall PathRemoveFileSpecA() shlwapi.PathRemoveFileSpecA -@ stdcall PathRemoveFileSpecW() shlwapi.PathRemoveFileSpecW -@ stdcall PathRenameExtensionA() shlwapi.PathRenameExtensionA -@ stdcall PathRenameExtensionW() shlwapi.PathRenameExtensionW -@ stdcall PathSearchAndQualifyA() shlwapi.PathSearchAndQualifyA -@ stdcall PathSearchAndQualifyW() shlwapi.PathSearchAndQualifyW -@ stdcall PathSkipRootA() shlwapi.PathSkipRootA -@ stdcall PathSkipRootW() shlwapi.PathSkipRootW -@ stdcall PathStripPathA() shlwapi.PathStripPathA -@ stdcall PathStripPathW() shlwapi.PathStripPathW -@ stdcall PathStripToRootA() shlwapi.PathStripToRootA -@ stdcall PathStripToRootW() shlwapi.PathStripToRootW -@ stdcall PathUnExpandEnvStringsA() shlwapi.PathUnExpandEnvStringsA -@ stdcall PathUnExpandEnvStringsW() shlwapi.PathUnExpandEnvStringsW -@ stdcall PathUnquoteSpacesA() shlwapi.PathUnquoteSpacesA -@ stdcall PathUnquoteSpacesW() shlwapi.PathUnquoteSpacesW -@ stdcall SHExpandEnvironmentStringsA() shlwapi.SHExpandEnvironmentStringsA -@ stdcall SHExpandEnvironmentStringsW() shlwapi.SHExpandEnvironmentStringsW -@ stdcall SHTruncateString() shlwapi.SHTruncateString diff --git a/dll/apisets/api-ms-win-core-shlwapi-obsolete-l1-1-0.spec b/dll/apisets/api-ms-win-core-shlwapi-obsolete-l1-1-0.spec deleted file mode 100644 index b499089d8d2..00000000000 --- a/dll/apisets/api-ms-win-core-shlwapi-obsolete-l1-1-0.spec +++ /dev/null @@ -1,64 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall QISearch() shlwapi.QISearch -@ stdcall SHLoadIndirectString() shlwapi.SHLoadIndirectString -@ stdcall StrCSpnA() shlwapi.StrCSpnA -@ stdcall StrCSpnIA() shlwapi.StrCSpnIA -@ stdcall StrCSpnIW() shlwapi.StrCSpnIW -@ stdcall StrCSpnW() shlwapi.StrCSpnW -@ stdcall StrCatBuffA() shlwapi.StrCatBuffA -@ stdcall StrCatBuffW() shlwapi.StrCatBuffW -@ stdcall StrCatChainW() shlwapi.StrCatChainW -@ stdcall StrChrA() shlwapi.StrChrA -@ stdcall StrChrIA() shlwapi.StrChrIA -@ stdcall StrChrIW() shlwapi.StrChrIW -@ stdcall StrChrNIW() shlwapi.StrChrNIW -@ stdcall StrChrNW() shlwapi.StrChrNW -@ stdcall StrChrW() shlwapi.StrChrW -@ stdcall StrCmpCA() shlwapi.StrCmpCA -@ stdcall StrCmpCW() shlwapi.StrCmpCW -@ stdcall StrCmpICA() shlwapi.StrCmpICA -@ stdcall StrCmpICW() shlwapi.StrCmpICW -@ stdcall StrCmpIW() shlwapi.StrCmpIW -@ stdcall StrCmpLogicalW() shlwapi.StrCmpLogicalW -@ stdcall StrCmpNA() shlwapi.StrCmpNA -@ stdcall StrCmpNCA() shlwapi.StrCmpNCA -@ stdcall StrCmpNCW() shlwapi.StrCmpNCW -@ stdcall StrCmpNIA() shlwapi.StrCmpNIA -@ stdcall StrCmpNICA() shlwapi.StrCmpNICA -@ stdcall StrCmpNICW() shlwapi.StrCmpNICW -@ stdcall StrCmpNIW() shlwapi.StrCmpNIW -@ stdcall StrCmpNW() shlwapi.StrCmpNW -@ stdcall StrCmpW() shlwapi.StrCmpW -@ stdcall StrCpyNW() shlwapi.StrCpyNW -@ stdcall StrCpyNXA() shlwapi.StrCpyNXA -@ stdcall StrCpyNXW() shlwapi.StrCpyNXW -@ stdcall StrDupA() shlwapi.StrDupA -@ stdcall StrDupW() shlwapi.StrDupW -@ stdcall StrIsIntlEqualA() shlwapi.StrIsIntlEqualA -@ stdcall StrIsIntlEqualW() shlwapi.StrIsIntlEqualW -@ stdcall StrPBrkA() shlwapi.StrPBrkA -@ stdcall StrPBrkW() shlwapi.StrPBrkW -@ stdcall StrRChrA() shlwapi.StrRChrA -@ stdcall StrRChrIA() shlwapi.StrRChrIA -@ stdcall StrRChrIW() shlwapi.StrRChrIW -@ stdcall StrRChrW() shlwapi.StrRChrW -@ stdcall StrRStrIA() shlwapi.StrRStrIA -@ stdcall StrRStrIW() shlwapi.StrRStrIW -@ stdcall StrSpnA() shlwapi.StrSpnA -@ stdcall StrSpnW() shlwapi.StrSpnW -@ stdcall StrStrA() shlwapi.StrStrA -@ stdcall StrStrIA() shlwapi.StrStrIA -@ stdcall StrStrIW() shlwapi.StrStrIW -@ stdcall StrStrNIW() shlwapi.StrStrNIW -@ stdcall StrStrNW() shlwapi.StrStrNW -@ stdcall StrStrW() shlwapi.StrStrW -@ stdcall StrToInt64ExA() shlwapi.StrToInt64ExA -@ stdcall StrToInt64ExW() shlwapi.StrToInt64ExW -@ stdcall StrToIntA() shlwapi.StrToIntA -@ stdcall StrToIntExA() shlwapi.StrToIntExA -@ stdcall StrToIntExW() shlwapi.StrToIntExW -@ stdcall StrToIntW() shlwapi.StrToIntW -@ stdcall StrTrimA() shlwapi.StrTrimA -@ stdcall StrTrimW() shlwapi.StrTrimW diff --git a/dll/apisets/api-ms-win-core-shlwapi-obsolete-l1-2-0.spec b/dll/apisets/api-ms-win-core-shlwapi-obsolete-l1-2-0.spec deleted file mode 100644 index 03826ce3145..00000000000 --- a/dll/apisets/api-ms-win-core-shlwapi-obsolete-l1-2-0.spec +++ /dev/null @@ -1,61 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall QISearch() shlwapi.QISearch -@ stdcall StrCatBuffA() shlwapi.StrCatBuffA -@ stdcall StrCatBuffW() shlwapi.StrCatBuffW -@ stdcall StrCatChainW() shlwapi.StrCatChainW -@ stdcall StrChrA() shlwapi.StrChrA -@ stdcall StrChrIA() shlwapi.StrChrIA -@ stdcall StrChrIW() shlwapi.StrChrIW -@ stdcall StrChrNIW() shlwapi.StrChrNIW -@ stdcall StrChrNW() shlwapi.StrChrNW -@ stdcall StrChrW() shlwapi.StrChrW -@ stdcall StrCmpCA() shlwapi.StrCmpCA -@ stdcall StrCmpCW() shlwapi.StrCmpCW -@ stdcall StrCmpICA() shlwapi.StrCmpICA -@ stdcall StrCmpICW() shlwapi.StrCmpICW -@ stdcall StrCmpIW() shlwapi.StrCmpIW -@ stdcall StrCmpLogicalW() shlwapi.StrCmpLogicalW -@ stdcall StrCmpNA() shlwapi.StrCmpNA -@ stdcall StrCmpNCA() shlwapi.StrCmpNCA -@ stdcall StrCmpNCW() shlwapi.StrCmpNCW -@ stdcall StrCmpNIA() shlwapi.StrCmpNIA -@ stdcall StrCmpNICA() shlwapi.StrCmpNICA -@ stdcall StrCmpNICW() shlwapi.StrCmpNICW -@ stdcall StrCmpNIW() shlwapi.StrCmpNIW -@ stdcall StrCmpNW() shlwapi.StrCmpNW -@ stdcall StrCmpW() shlwapi.StrCmpW -@ stdcall StrCpyNW() shlwapi.StrCpyNW -@ stdcall StrCSpnA() shlwapi.StrCSpnA -@ stdcall StrCSpnIA() shlwapi.StrCSpnIA -@ stdcall StrCSpnIW() shlwapi.StrCSpnIW -@ stdcall StrCSpnW() shlwapi.StrCSpnW -@ stdcall StrDupA() shlwapi.StrDupA -@ stdcall StrDupW() shlwapi.StrDupW -@ stdcall StrIsIntlEqualA() shlwapi.StrIsIntlEqualA -@ stdcall StrIsIntlEqualW() shlwapi.StrIsIntlEqualW -@ stdcall StrPBrkA() shlwapi.StrPBrkA -@ stdcall StrPBrkW() shlwapi.StrPBrkW -@ stdcall StrRChrA() shlwapi.StrRChrA -@ stdcall StrRChrIA() shlwapi.StrRChrIA -@ stdcall StrRChrIW() shlwapi.StrRChrIW -@ stdcall StrRChrW() shlwapi.StrRChrW -@ stdcall StrRStrIA() shlwapi.StrRStrIA -@ stdcall StrRStrIW() shlwapi.StrRStrIW -@ stdcall StrSpnA() shlwapi.StrSpnA -@ stdcall StrSpnW() shlwapi.StrSpnW -@ stdcall StrStrA() shlwapi.StrStrA -@ stdcall StrStrIA() shlwapi.StrStrIA -@ stdcall StrStrIW() shlwapi.StrStrIW -@ stdcall StrStrNIW() shlwapi.StrStrNIW -@ stdcall StrStrNW() shlwapi.StrStrNW -@ stdcall StrStrW() shlwapi.StrStrW -@ stdcall StrToInt64ExA() shlwapi.StrToInt64ExA -@ stdcall StrToInt64ExW() shlwapi.StrToInt64ExW -@ stdcall StrToIntA() shlwapi.StrToIntA -@ stdcall StrToIntExA() shlwapi.StrToIntExA -@ stdcall StrToIntExW() shlwapi.StrToIntExW -@ stdcall StrToIntW() shlwapi.StrToIntW -@ stdcall StrTrimA() shlwapi.StrTrimA -@ stdcall StrTrimW() shlwapi.StrTrimW diff --git a/dll/apisets/api-ms-win-core-shutdown-l1-1-0.spec b/dll/apisets/api-ms-win-core-shutdown-l1-1-0.spec deleted file mode 100644 index 7990761f7e0..00000000000 --- a/dll/apisets/api-ms-win-core-shutdown-l1-1-0.spec +++ /dev/null @@ -1,5 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall AbortSystemShutdownW() advapi32.AbortSystemShutdownW -@ stdcall InitiateSystemShutdownExW() advapi32.InitiateSystemShutdownExW diff --git a/dll/apisets/api-ms-win-core-sidebyside-l1-1-0.spec b/dll/apisets/api-ms-win-core-sidebyside-l1-1-0.spec deleted file mode 100644 index b36e92f344e..00000000000 --- a/dll/apisets/api-ms-win-core-sidebyside-l1-1-0.spec +++ /dev/null @@ -1,14 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall ActivateActCtx() kernel32.ActivateActCtx -@ stdcall AddRefActCtx() kernel32.AddRefActCtx -@ stdcall CreateActCtxW() kernel32.CreateActCtxW -@ stdcall DeactivateActCtx() kernel32.DeactivateActCtx -@ stdcall FindActCtxSectionGuid() kernel32.FindActCtxSectionGuid -@ stdcall FindActCtxSectionStringW() kernel32.FindActCtxSectionStringW -@ stdcall GetCurrentActCtx() kernel32.GetCurrentActCtx -@ stdcall -version=0x600+ QueryActCtxSettingsW() kernel32.QueryActCtxSettingsW -@ stdcall QueryActCtxW() kernel32.QueryActCtxW -@ stdcall ReleaseActCtx() kernel32.ReleaseActCtx -@ stdcall ZombifyActCtx() kernel32.ZombifyActCtx diff --git a/dll/apisets/api-ms-win-core-string-l1-1-0.spec b/dll/apisets/api-ms-win-core-string-l1-1-0.spec deleted file mode 100644 index a5c602d6e55..00000000000 --- a/dll/apisets/api-ms-win-core-string-l1-1-0.spec +++ /dev/null @@ -1,11 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall -version=0x600+ CompareStringEx() kernel32.CompareStringEx -@ stdcall -version=0x600+ CompareStringOrdinal() kernel32.CompareStringOrdinal -@ stdcall CompareStringW() kernel32.CompareStringW -@ stdcall FoldStringW() kernel32.FoldStringW -@ stdcall GetStringTypeExW() kernel32.GetStringTypeExW -@ stdcall GetStringTypeW() kernel32.GetStringTypeW -@ stdcall MultiByteToWideChar() kernel32.MultiByteToWideChar -@ stdcall WideCharToMultiByte() kernel32.WideCharToMultiByte diff --git a/dll/apisets/api-ms-win-core-string-l2-1-0.spec b/dll/apisets/api-ms-win-core-string-l2-1-0.spec deleted file mode 100644 index 6c3ea35a1ad..00000000000 --- a/dll/apisets/api-ms-win-core-string-l2-1-0.spec +++ /dev/null @@ -1,13 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CharLowerBuffW() user32.CharLowerBuffW -@ stdcall CharLowerW() user32.CharLowerW -@ stdcall CharNextW() user32.CharNextW -@ stdcall CharPrevW() user32.CharPrevW -@ stdcall CharUpperBuffW() user32.CharUpperBuffW -@ stdcall CharUpperW() user32.CharUpperW -@ stdcall IsCharAlphaNumericW() user32.IsCharAlphaNumericW -@ stdcall IsCharAlphaW() user32.IsCharAlphaW -@ stdcall IsCharLowerW() user32.IsCharLowerW -@ stdcall IsCharUpperW() user32.IsCharUpperW diff --git a/dll/apisets/api-ms-win-core-string-obsolete-l1-1-0.spec b/dll/apisets/api-ms-win-core-string-obsolete-l1-1-0.spec deleted file mode 100644 index d7fa689dc64..00000000000 --- a/dll/apisets/api-ms-win-core-string-obsolete-l1-1-0.spec +++ /dev/null @@ -1,13 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall lstrcatW() kernel32.lstrcatW -@ stdcall lstrcmpA() kernel32.lstrcmpA -@ stdcall lstrcmpW() kernel32.lstrcmpW -@ stdcall lstrcmpiA() kernel32.lstrcmpiA -@ stdcall lstrcmpiW() kernel32.lstrcmpiW -@ stdcall lstrcpyW() kernel32.lstrcpyW -@ stdcall lstrcpynA() kernel32.lstrcpynA -@ stdcall lstrcpynW() kernel32.lstrcpynW -@ stdcall lstrlenA() kernel32.lstrlenA -@ stdcall lstrlenW() kernel32.lstrlenW diff --git a/dll/apisets/api-ms-win-core-stringansi-l1-1-0.spec b/dll/apisets/api-ms-win-core-stringansi-l1-1-0.spec deleted file mode 100644 index 981a196b8dd..00000000000 --- a/dll/apisets/api-ms-win-core-stringansi-l1-1-0.spec +++ /dev/null @@ -1,15 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CharLowerA() user32.CharLowerA -@ stdcall CharLowerBuffA() user32.CharLowerBuffA -@ stdcall CharNextA() user32.CharNextA -@ stdcall CharNextExA() user32.CharNextExA -@ stdcall CharPrevA() user32.CharPrevA -@ stdcall CharPrevExA() user32.CharPrevExA -@ stdcall CharUpperA() user32.CharUpperA -@ stdcall CharUpperBuffA() user32.CharUpperBuffA -@ stdcall IsCharAlphaA() user32.IsCharAlphaA -@ stdcall IsCharAlphaNumericA() user32.IsCharAlphaNumericA -@ stdcall IsCharLowerA() user32.IsCharLowerA -@ stdcall IsCharUpperA() user32.IsCharUpperA diff --git a/dll/apisets/api-ms-win-core-stringloader-l1-1-1.spec b/dll/apisets/api-ms-win-core-stringloader-l1-1-1.spec deleted file mode 100644 index 9e72004e2ae..00000000000 --- a/dll/apisets/api-ms-win-core-stringloader-l1-1-1.spec +++ /dev/null @@ -1,5 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall LoadStringA() user32.LoadStringA -@ stdcall LoadStringW() user32.LoadStringW diff --git a/dll/apisets/api-ms-win-core-synch-ansi-l1-1-0.spec b/dll/apisets/api-ms-win-core-synch-ansi-l1-1-0.spec deleted file mode 100644 index f2a22b8dbf8..00000000000 --- a/dll/apisets/api-ms-win-core-synch-ansi-l1-1-0.spec +++ /dev/null @@ -1,10 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CreateSemaphoreA() kernel32.CreateSemaphoreA -@ stdcall -version=0x600+ CreateSemaphoreExA() kernel32.CreateSemaphoreExA -@ stdcall CreateWaitableTimerA() kernel32.CreateWaitableTimerA -@ stdcall -version=0x600+ CreateWaitableTimerExA() kernel32.CreateWaitableTimerExA -@ stdcall OpenMutexA() kernel32.OpenMutexA -@ stdcall OpenSemaphoreA() kernel32.OpenSemaphoreA -@ stdcall OpenWaitableTimerA() kernel32.OpenWaitableTimerA diff --git a/dll/apisets/api-ms-win-core-synch-l1-1-0.spec b/dll/apisets/api-ms-win-core-synch-l1-1-0.spec deleted file mode 100644 index a1d1a739269..00000000000 --- a/dll/apisets/api-ms-win-core-synch-l1-1-0.spec +++ /dev/null @@ -1,45 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall -version=0x600+ AcquireSRWLockExclusive() kernel32.AcquireSRWLockExclusive -@ stdcall -version=0x600+ AcquireSRWLockShared() kernel32.AcquireSRWLockShared -@ stdcall CancelWaitableTimer() kernel32.CancelWaitableTimer -@ stdcall CreateEventA() kernel32.CreateEventA -@ stdcall -version=0x600+ CreateEventExA() kernel32.CreateEventExA -@ stdcall -version=0x600+ CreateEventExW() kernel32.CreateEventExW -@ stdcall CreateEventW() kernel32.CreateEventW -@ stdcall CreateMutexA() kernel32.CreateMutexA -@ stdcall -version=0x600+ CreateMutexExA() kernel32.CreateMutexExA -@ stdcall -version=0x600+ CreateMutexExW() kernel32.CreateMutexExW -@ stdcall CreateMutexW() kernel32.CreateMutexW -@ stdcall -version=0x600+ CreateSemaphoreExW() kernel32.CreateSemaphoreExW -@ stdcall -version=0x600+ CreateWaitableTimerExW() kernel32.CreateWaitableTimerExW -@ stdcall DeleteCriticalSection() kernel32.DeleteCriticalSection -@ stdcall EnterCriticalSection() kernel32.EnterCriticalSection -@ stdcall InitializeCriticalSection() kernel32.InitializeCriticalSection -@ stdcall InitializeCriticalSectionAndSpinCount() kernel32.InitializeCriticalSectionAndSpinCount -@ stdcall -version=0x600+ InitializeCriticalSectionEx() kernel32.InitializeCriticalSectionEx -@ stdcall -version=0x600+ InitializeSRWLock() kernel32.InitializeSRWLock -@ stdcall LeaveCriticalSection() kernel32.LeaveCriticalSection -@ stdcall OpenEventA() kernel32.OpenEventA -@ stdcall OpenEventW() kernel32.OpenEventW -@ stdcall OpenMutexW() kernel32.OpenMutexW -@ stdcall OpenProcess() kernel32.OpenProcess -@ stdcall OpenSemaphoreW() kernel32.OpenSemaphoreW -@ stdcall OpenWaitableTimerW() kernel32.OpenWaitableTimerW -@ stdcall ReleaseMutex() kernel32.ReleaseMutex -@ stdcall -version=0x600+ ReleaseSRWLockExclusive() kernel32.ReleaseSRWLockExclusive -@ stdcall -version=0x600+ ReleaseSRWLockShared() kernel32.ReleaseSRWLockShared -@ stdcall ReleaseSemaphore() kernel32.ReleaseSemaphore -@ stdcall ResetEvent() kernel32.ResetEvent -@ stdcall SetCriticalSectionSpinCount() kernel32.SetCriticalSectionSpinCount -@ stdcall SetEvent() kernel32.SetEvent -@ stdcall SetWaitableTimer() kernel32.SetWaitableTimer -@ stub SetWaitableTimerEx -@ stdcall SleepEx() kernel32.SleepEx -@ stub TryAcquireSRWLockExclusive -@ stub TryAcquireSRWLockShared -@ stdcall TryEnterCriticalSection() kernel32.TryEnterCriticalSection -@ stdcall WaitForMultipleObjectsEx() kernel32.WaitForMultipleObjectsEx -@ stdcall WaitForSingleObject() kernel32.WaitForSingleObject -@ stdcall WaitForSingleObjectEx() kernel32.WaitForSingleObjectEx diff --git a/dll/apisets/api-ms-win-core-synch-l1-2-0.spec b/dll/apisets/api-ms-win-core-synch-l1-2-0.spec deleted file mode 100644 index a0e4ddc0733..00000000000 --- a/dll/apisets/api-ms-win-core-synch-l1-2-0.spec +++ /dev/null @@ -1,61 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall -version=0x600+ AcquireSRWLockExclusive() kernel32.AcquireSRWLockExclusive -@ stdcall -version=0x600+ AcquireSRWLockShared() kernel32.AcquireSRWLockShared -@ stdcall CancelWaitableTimer() kernel32.CancelWaitableTimer -@ stdcall CreateEventA() kernel32.CreateEventA -@ stdcall -version=0x600+ CreateEventExA() kernel32.CreateEventExA -@ stdcall -version=0x600+ CreateEventExW() kernel32.CreateEventExW -@ stdcall CreateEventW() kernel32.CreateEventW -@ stdcall CreateMutexA() kernel32.CreateMutexA -@ stdcall -version=0x600+ CreateMutexExA() kernel32.CreateMutexExA -@ stdcall -version=0x600+ CreateMutexExW() kernel32.CreateMutexExW -@ stdcall CreateMutexW() kernel32.CreateMutexW -@ stdcall -version=0x600+ CreateSemaphoreExW() kernel32.CreateSemaphoreExW -@ stdcall -version=0x600+ CreateWaitableTimerExW() kernel32.CreateWaitableTimerExW -@ stdcall DeleteCriticalSection() kernel32.DeleteCriticalSection -@ stub DeleteSynchronizationBarrier -@ stdcall EnterCriticalSection() kernel32.EnterCriticalSection -@ stub EnterSynchronizationBarrier -@ stdcall -version=0x600+ InitOnceBeginInitialize() kernel32.InitOnceBeginInitialize -@ stdcall -version=0x600+ InitOnceComplete() kernel32.InitOnceComplete -@ stdcall -version=0x600+ InitOnceExecuteOnce() kernel32.InitOnceExecuteOnce -@ stdcall -version=0x600+ InitOnceInitialize() kernel32.InitOnceInitialize -@ stdcall -version=0x600+ InitializeConditionVariable() kernel32.InitializeConditionVariable -@ stdcall InitializeCriticalSection() kernel32.InitializeCriticalSection -@ stdcall InitializeCriticalSectionAndSpinCount() kernel32.InitializeCriticalSectionAndSpinCount -@ stdcall -version=0x600+ InitializeCriticalSectionEx() kernel32.InitializeCriticalSectionEx -@ stdcall -version=0x600+ InitializeSRWLock() kernel32.InitializeSRWLock -@ stub InitializeSynchronizationBarrier -@ stdcall LeaveCriticalSection() kernel32.LeaveCriticalSection -@ stdcall OpenEventA() kernel32.OpenEventA -@ stdcall OpenEventW() kernel32.OpenEventW -@ stdcall OpenMutexW() kernel32.OpenMutexW -@ stdcall OpenSemaphoreW() kernel32.OpenSemaphoreW -@ stdcall OpenWaitableTimerW() kernel32.OpenWaitableTimerW -@ stdcall ReleaseMutex() kernel32.ReleaseMutex -@ stdcall -version=0x600+ ReleaseSRWLockExclusive() kernel32.ReleaseSRWLockExclusive -@ stdcall -version=0x600+ ReleaseSRWLockShared() kernel32.ReleaseSRWLockShared -@ stdcall ReleaseSemaphore() kernel32.ReleaseSemaphore -@ stdcall ResetEvent() kernel32.ResetEvent -@ stdcall SetCriticalSectionSpinCount() kernel32.SetCriticalSectionSpinCount -@ stdcall SetEvent() kernel32.SetEvent -@ stdcall SetWaitableTimer() kernel32.SetWaitableTimer -@ stub SetWaitableTimerEx -@ stdcall SignalObjectAndWait() kernel32.SignalObjectAndWait -@ stdcall Sleep() kernel32.Sleep -@ stdcall -version=0x600+ SleepConditionVariableCS() kernel32.SleepConditionVariableCS -@ stdcall -version=0x600+ SleepConditionVariableSRW() kernel32.SleepConditionVariableSRW -@ stdcall SleepEx() kernel32.SleepEx -@ stub TryAcquireSRWLockExclusive -@ stub TryAcquireSRWLockShared -@ stdcall TryEnterCriticalSection() kernel32.TryEnterCriticalSection -@ stdcall WaitForMultipleObjectsEx() kernel32.WaitForMultipleObjectsEx -@ stdcall WaitForSingleObject() kernel32.WaitForSingleObject -@ stdcall WaitForSingleObjectEx() kernel32.WaitForSingleObjectEx -@ stub WaitOnAddress -@ stdcall -version=0x600+ WakeAllConditionVariable() kernel32.WakeAllConditionVariable -@ stub WakeByAddressAll -@ stub WakeByAddressSingle -@ stdcall -version=0x600+ WakeConditionVariable() kernel32.WakeConditionVariable diff --git a/dll/apisets/api-ms-win-core-synch-l1-2-1.spec b/dll/apisets/api-ms-win-core-synch-l1-2-1.spec deleted file mode 100644 index 7148b051e13..00000000000 --- a/dll/apisets/api-ms-win-core-synch-l1-2-1.spec +++ /dev/null @@ -1,64 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall -version=0x600+ AcquireSRWLockExclusive() kernel32.AcquireSRWLockExclusive -@ stdcall -version=0x600+ AcquireSRWLockShared() kernel32.AcquireSRWLockShared -@ stdcall CancelWaitableTimer() kernel32.CancelWaitableTimer -@ stdcall CreateEventA() kernel32.CreateEventA -@ stdcall -version=0x600+ CreateEventExA() kernel32.CreateEventExA -@ stdcall -version=0x600+ CreateEventExW() kernel32.CreateEventExW -@ stdcall CreateEventW() kernel32.CreateEventW -@ stdcall CreateMutexA() kernel32.CreateMutexA -@ stdcall -version=0x600+ CreateMutexExA() kernel32.CreateMutexExA -@ stdcall -version=0x600+ CreateMutexExW() kernel32.CreateMutexExW -@ stdcall CreateMutexW() kernel32.CreateMutexW -@ stdcall -version=0x600+ CreateSemaphoreExW() kernel32.CreateSemaphoreExW -@ stdcall CreateSemaphoreW() kernel32.CreateSemaphoreW -@ stdcall -version=0x600+ CreateWaitableTimerExW() kernel32.CreateWaitableTimerExW -@ stdcall CreateWaitableTimerW() kernel32.CreateWaitableTimerW -@ stdcall DeleteCriticalSection() kernel32.DeleteCriticalSection -@ stub DeleteSynchronizationBarrier -@ stdcall EnterCriticalSection() kernel32.EnterCriticalSection -@ stub EnterSynchronizationBarrier -@ stdcall -version=0x600+ InitializeConditionVariable() kernel32.InitializeConditionVariable -@ stdcall InitializeCriticalSection() kernel32.InitializeCriticalSection -@ stdcall InitializeCriticalSectionAndSpinCount() kernel32.InitializeCriticalSectionAndSpinCount -@ stdcall -version=0x600+ InitializeCriticalSectionEx() kernel32.InitializeCriticalSectionEx -@ stdcall -version=0x600+ InitializeSRWLock() kernel32.InitializeSRWLock -@ stub InitializeSynchronizationBarrier -@ stdcall -version=0x600+ InitOnceBeginInitialize() kernel32.InitOnceBeginInitialize -@ stdcall -version=0x600+ InitOnceComplete() kernel32.InitOnceComplete -@ stdcall -version=0x600+ InitOnceExecuteOnce() kernel32.InitOnceExecuteOnce -@ stdcall -version=0x600+ InitOnceInitialize() kernel32.InitOnceInitialize -@ stdcall LeaveCriticalSection() kernel32.LeaveCriticalSection -@ stdcall OpenEventA() kernel32.OpenEventA -@ stdcall OpenEventW() kernel32.OpenEventW -@ stdcall OpenMutexW() kernel32.OpenMutexW -@ stdcall OpenSemaphoreW() kernel32.OpenSemaphoreW -@ stdcall OpenWaitableTimerW() kernel32.OpenWaitableTimerW -@ stdcall ReleaseMutex() kernel32.ReleaseMutex -@ stdcall ReleaseSemaphore() kernel32.ReleaseSemaphore -@ stdcall -version=0x600+ ReleaseSRWLockExclusive() kernel32.ReleaseSRWLockExclusive -@ stdcall -version=0x600+ ReleaseSRWLockShared() kernel32.ReleaseSRWLockShared -@ stdcall ResetEvent() kernel32.ResetEvent -@ stdcall SetCriticalSectionSpinCount() kernel32.SetCriticalSectionSpinCount -@ stdcall SetEvent() kernel32.SetEvent -@ stdcall SetWaitableTimer() kernel32.SetWaitableTimer -@ stub SetWaitableTimerEx -@ stdcall SignalObjectAndWait() kernel32.SignalObjectAndWait -@ stdcall Sleep() kernel32.Sleep -@ stdcall -version=0x600+ SleepConditionVariableCS() kernel32.SleepConditionVariableCS -@ stdcall -version=0x600+ SleepConditionVariableSRW() kernel32.SleepConditionVariableSRW -@ stdcall SleepEx() kernel32.SleepEx -@ stub TryAcquireSRWLockExclusive -@ stub TryAcquireSRWLockShared -@ stdcall TryEnterCriticalSection() kernel32.TryEnterCriticalSection -@ stdcall WaitForMultipleObjects() kernel32.WaitForMultipleObjects -@ stdcall WaitForMultipleObjectsEx() kernel32.WaitForMultipleObjectsEx -@ stdcall WaitForSingleObject() kernel32.WaitForSingleObject -@ stdcall WaitForSingleObjectEx() kernel32.WaitForSingleObjectEx -@ stub WaitOnAddress -@ stdcall -version=0x600+ WakeAllConditionVariable() kernel32.WakeAllConditionVariable -@ stub WakeByAddressAll -@ stub WakeByAddressSingle -@ stdcall -version=0x600+ WakeConditionVariable() kernel32.WakeConditionVariable diff --git a/dll/apisets/api-ms-win-core-sysinfo-l1-1-0.spec b/dll/apisets/api-ms-win-core-sysinfo-l1-1-0.spec deleted file mode 100644 index 00c0ab1d95b..00000000000 --- a/dll/apisets/api-ms-win-core-sysinfo-l1-1-0.spec +++ /dev/null @@ -1,31 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall GetComputerNameExA() kernel32.GetComputerNameExA -@ stdcall GetComputerNameExW() kernel32.GetComputerNameExW -@ stdcall -version=0x600+ GetDynamicTimeZoneInformation() kernel32.GetDynamicTimeZoneInformation -@ stdcall GetLocalTime() kernel32.GetLocalTime -@ stdcall GetLogicalProcessorInformation() kernel32.GetLogicalProcessorInformation -@ stub GetLogicalProcessorInformationEx -@ stdcall GetSystemDirectoryA() kernel32.GetSystemDirectoryA -@ stdcall GetSystemDirectoryW() kernel32.GetSystemDirectoryW -@ stdcall GetSystemInfo() kernel32.GetSystemInfo -@ stdcall GetSystemTime() kernel32.GetSystemTime -@ stdcall GetSystemTimeAdjustment() kernel32.GetSystemTimeAdjustment -@ stdcall GetSystemTimeAsFileTime() kernel32.GetSystemTimeAsFileTime -@ stdcall GetSystemWindowsDirectoryA() kernel32.GetSystemWindowsDirectoryA -@ stdcall GetSystemWindowsDirectoryW() kernel32.GetSystemWindowsDirectoryW -@ stdcall -version=0x600+ GetTickCount64() kernel32.GetTickCount64 -@ stdcall GetTickCount() kernel32.GetTickCount -@ stdcall GetTimeZoneInformation() kernel32.GetTimeZoneInformation -@ stdcall -version=0x600+ GetTimeZoneInformationForYear() kernel32.GetTimeZoneInformationForYear -@ stdcall GetVersion() kernel32.GetVersion -@ stdcall GetVersionExA() kernel32.GetVersionExA -@ stdcall GetVersionExW() kernel32.GetVersionExW -@ stdcall GetWindowsDirectoryA() kernel32.GetWindowsDirectoryA -@ stdcall GetWindowsDirectoryW() kernel32.GetWindowsDirectoryW -@ stdcall GlobalMemoryStatusEx() kernel32.GlobalMemoryStatusEx -@ stdcall SetLocalTime() kernel32.SetLocalTime -@ stdcall SystemTimeToFileTime() kernel32.SystemTimeToFileTime -@ stdcall SystemTimeToTzSpecificLocalTime() kernel32.SystemTimeToTzSpecificLocalTime -@ stdcall TzSpecificLocalTimeToSystemTime() kernel32.TzSpecificLocalTimeToSystemTime diff --git a/dll/apisets/api-ms-win-core-sysinfo-l1-2-0.spec b/dll/apisets/api-ms-win-core-sysinfo-l1-2-0.spec deleted file mode 100644 index 591e4e7037c..00000000000 --- a/dll/apisets/api-ms-win-core-sysinfo-l1-2-0.spec +++ /dev/null @@ -1,34 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall EnumSystemFirmwareTables() kernel32.EnumSystemFirmwareTables -@ stdcall GetComputerNameExA() kernel32.GetComputerNameExA -@ stdcall GetComputerNameExW() kernel32.GetComputerNameExW -@ stdcall GetLocalTime() kernel32.GetLocalTime -@ stdcall GetLogicalProcessorInformation() kernel32.GetLogicalProcessorInformation -@ stub GetLogicalProcessorInformationEx -@ stdcall GetNativeSystemInfo() kernel32.GetNativeSystemInfo -@ stub GetOsSafeBootMode -@ stdcall -version=0x600+ GetProductInfo() kernel32.GetProductInfo -@ stdcall GetSystemDirectoryA() kernel32.GetSystemDirectoryA -@ stdcall GetSystemDirectoryW() kernel32.GetSystemDirectoryW -@ stdcall GetSystemFirmwareTable() kernel32.GetSystemFirmwareTable -@ stdcall GetSystemInfo() kernel32.GetSystemInfo -@ stdcall GetSystemTime() kernel32.GetSystemTime -@ stdcall GetSystemTimeAdjustment() kernel32.GetSystemTimeAdjustment -@ stdcall GetSystemTimeAsFileTime() kernel32.GetSystemTimeAsFileTime -@ stdcall -version=0x602+ GetSystemTimePreciseAsFileTime() kernel32.GetSystemTimePreciseAsFileTime -@ stdcall GetSystemWindowsDirectoryA() kernel32.GetSystemWindowsDirectoryA -@ stdcall GetSystemWindowsDirectoryW() kernel32.GetSystemWindowsDirectoryW -@ stdcall GetTickCount() kernel32.GetTickCount -@ stdcall -version=0x600+ GetTickCount64() kernel32.GetTickCount64 -@ stdcall GetVersion() kernel32.GetVersion -@ stdcall GetVersionExA() kernel32.GetVersionExA -@ stdcall GetVersionExW() kernel32.GetVersionExW -@ stdcall GetWindowsDirectoryA() kernel32.GetWindowsDirectoryA -@ stdcall GetWindowsDirectoryW() kernel32.GetWindowsDirectoryW -@ stdcall GlobalMemoryStatusEx() kernel32.GlobalMemoryStatusEx -@ stdcall SetComputerNameExW() kernel32.SetComputerNameExW -@ stdcall SetLocalTime() kernel32.SetLocalTime -@ stdcall SetSystemTime() kernel32.SetSystemTime -@ stdcall VerSetConditionMask() kernel32.VerSetConditionMask diff --git a/dll/apisets/api-ms-win-core-sysinfo-l1-2-1.spec b/dll/apisets/api-ms-win-core-sysinfo-l1-2-1.spec deleted file mode 100644 index ab5ce34982a..00000000000 --- a/dll/apisets/api-ms-win-core-sysinfo-l1-2-1.spec +++ /dev/null @@ -1,39 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub DnsHostnameToComputerNameExW -@ stdcall EnumSystemFirmwareTables() kernel32.EnumSystemFirmwareTables -@ stdcall GetComputerNameExA() kernel32.GetComputerNameExA -@ stdcall GetComputerNameExW() kernel32.GetComputerNameExW -@ stdcall GetLocalTime() kernel32.GetLocalTime -@ stdcall GetLogicalProcessorInformation() kernel32.GetLogicalProcessorInformation -@ stub GetLogicalProcessorInformationEx -@ stdcall GetNativeSystemInfo() kernel32.GetNativeSystemInfo -@ stub GetOsSafeBootMode -@ stdcall -version=0x600+ GetPhysicallyInstalledSystemMemory() kernel32.GetPhysicallyInstalledSystemMemory -@ stdcall -version=0x600+ GetProductInfo() kernel32.GetProductInfo -@ stdcall GetSystemDirectoryA() kernel32.GetSystemDirectoryA -@ stdcall GetSystemDirectoryW() kernel32.GetSystemDirectoryW -@ stdcall GetSystemFirmwareTable() kernel32.GetSystemFirmwareTable -@ stdcall GetSystemInfo() kernel32.GetSystemInfo -@ stdcall GetSystemTime() kernel32.GetSystemTime -@ stdcall GetSystemTimeAdjustment() kernel32.GetSystemTimeAdjustment -@ stdcall GetSystemTimeAsFileTime() kernel32.GetSystemTimeAsFileTime -@ stdcall -version=0x602+ GetSystemTimePreciseAsFileTime() kernel32.GetSystemTimePreciseAsFileTime -@ stdcall GetSystemWindowsDirectoryA() kernel32.GetSystemWindowsDirectoryA -@ stdcall GetSystemWindowsDirectoryW() kernel32.GetSystemWindowsDirectoryW -@ stdcall -version=0x600+ GetTickCount64() kernel32.GetTickCount64 -@ stdcall GetTickCount() kernel32.GetTickCount -@ stdcall GetVersion() kernel32.GetVersion -@ stdcall GetVersionExA() kernel32.GetVersionExA -@ stdcall GetVersionExW() kernel32.GetVersionExW -@ stdcall GetWindowsDirectoryA() kernel32.GetWindowsDirectoryA -@ stdcall GetWindowsDirectoryW() kernel32.GetWindowsDirectoryW -@ stdcall GlobalMemoryStatusEx() kernel32.GlobalMemoryStatusEx -@ stub InstallELAMCertificateInfo -@ stub SetComputerNameEx2W -@ stdcall SetComputerNameExW() kernel32.SetComputerNameExW -@ stdcall SetLocalTime() kernel32.SetLocalTime -@ stdcall SetSystemTime() kernel32.SetSystemTime -@ stdcall SetSystemTimeAdjustment() kernel32.SetSystemTimeAdjustment -@ stdcall VerSetConditionMask() kernel32.VerSetConditionMask diff --git a/dll/apisets/api-ms-win-core-threadpool-l1-1-0.spec b/dll/apisets/api-ms-win-core-threadpool-l1-1-0.spec deleted file mode 100644 index 153c7af3ce6..00000000000 --- a/dll/apisets/api-ms-win-core-threadpool-l1-1-0.spec +++ /dev/null @@ -1,45 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall -version=0x600+ CallbackMayRunLong() kernel32.CallbackMayRunLong -@ stdcall -version=0x600+ CancelThreadpoolIo() kernel32.CancelThreadpoolIo -@ stdcall ChangeTimerQueueTimer() kernel32.ChangeTimerQueueTimer -@ stdcall -version=0x600+ CloseThreadpool() kernel32.CloseThreadpool -@ stdcall -version=0x600+ CloseThreadpoolCleanupGroup() kernel32.CloseThreadpoolCleanupGroup -@ stdcall -version=0x600+ CloseThreadpoolCleanupGroupMembers() kernel32.CloseThreadpoolCleanupGroupMembers -@ stdcall -version=0x600+ CloseThreadpoolIo() kernel32.CloseThreadpoolIo -@ stdcall -version=0x600+ CloseThreadpoolTimer() kernel32.CloseThreadpoolTimer -@ stdcall -version=0x600+ CloseThreadpoolWait() kernel32.CloseThreadpoolWait -@ stdcall -version=0x600+ CloseThreadpoolWork() kernel32.CloseThreadpoolWork -@ stdcall -version=0x600+ CreateThreadpool() kernel32.CreateThreadpool -@ stdcall -version=0x600+ CreateThreadpoolCleanupGroup() kernel32.CreateThreadpoolCleanupGroup -@ stdcall -version=0x600+ CreateThreadpoolIo() kernel32.CreateThreadpoolIo -@ stdcall -version=0x600+ CreateThreadpoolTimer() kernel32.CreateThreadpoolTimer -@ stdcall -version=0x600+ CreateThreadpoolWait() kernel32.CreateThreadpoolWait -@ stdcall -version=0x600+ CreateThreadpoolWork() kernel32.CreateThreadpoolWork -@ stdcall CreateTimerQueue() kernel32.CreateTimerQueue -@ stdcall CreateTimerQueueTimer() kernel32.CreateTimerQueueTimer -@ stdcall DeleteTimerQueueEx() kernel32.DeleteTimerQueueEx -@ stdcall DeleteTimerQueueTimer() kernel32.DeleteTimerQueueTimer -@ stdcall -version=0x600+ DisassociateCurrentThreadFromCallback() kernel32.DisassociateCurrentThreadFromCallback -@ stdcall -version=0x600+ FreeLibraryWhenCallbackReturns() kernel32.FreeLibraryWhenCallbackReturns -@ stdcall -version=0x600+ IsThreadpoolTimerSet() kernel32.IsThreadpoolTimerSet -@ stdcall -version=0x600+ LeaveCriticalSectionWhenCallbackReturns() kernel32.LeaveCriticalSectionWhenCallbackReturns -@ stub QueryThreadpoolStackInformation -@ stdcall RegisterWaitForSingleObjectEx() kernel32.RegisterWaitForSingleObjectEx -@ stdcall -version=0x600+ ReleaseMutexWhenCallbackReturns() kernel32.ReleaseMutexWhenCallbackReturns -@ stdcall -version=0x600+ ReleaseSemaphoreWhenCallbackReturns() kernel32.ReleaseSemaphoreWhenCallbackReturns -@ stdcall -version=0x600+ SetEventWhenCallbackReturns() kernel32.SetEventWhenCallbackReturns -@ stub SetThreadpoolStackInformation -@ stdcall -version=0x600+ SetThreadpoolThreadMaximum() kernel32.SetThreadpoolThreadMaximum -@ stdcall -version=0x600+ SetThreadpoolThreadMinimum() kernel32.SetThreadpoolThreadMinimum -@ stdcall -version=0x600+ SetThreadpoolTimer() kernel32.SetThreadpoolTimer -@ stdcall -version=0x600+ SetThreadpoolWait() kernel32.SetThreadpoolWait -@ stdcall -version=0x600+ StartThreadpoolIo() kernel32.StartThreadpoolIo -@ stdcall -version=0x600+ SubmitThreadpoolWork() kernel32.SubmitThreadpoolWork -@ stdcall -version=0x600+ TrySubmitThreadpoolCallback() kernel32.TrySubmitThreadpoolCallback -@ stdcall UnregisterWaitEx() kernel32.UnregisterWaitEx -@ stdcall -version=0x600+ WaitForThreadpoolIoCallbacks() kernel32.WaitForThreadpoolIoCallbacks -@ stdcall -version=0x600+ WaitForThreadpoolTimerCallbacks() kernel32.WaitForThreadpoolTimerCallbacks -@ stdcall -version=0x600+ WaitForThreadpoolWaitCallbacks() kernel32.WaitForThreadpoolWaitCallbacks -@ stdcall -version=0x600+ WaitForThreadpoolWorkCallbacks() kernel32.WaitForThreadpoolWorkCallbacks diff --git a/dll/apisets/api-ms-win-core-threadpool-l1-2-0.spec b/dll/apisets/api-ms-win-core-threadpool-l1-2-0.spec deleted file mode 100644 index d43776a1ad1..00000000000 --- a/dll/apisets/api-ms-win-core-threadpool-l1-2-0.spec +++ /dev/null @@ -1,40 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall -version=0x600+ CallbackMayRunLong() kernel32.CallbackMayRunLong -@ stdcall -version=0x600+ CancelThreadpoolIo() kernel32.CancelThreadpoolIo -@ stdcall -version=0x600+ CloseThreadpool() kernel32.CloseThreadpool -@ stdcall -version=0x600+ CloseThreadpoolCleanupGroup() kernel32.CloseThreadpoolCleanupGroup -@ stdcall -version=0x600+ CloseThreadpoolCleanupGroupMembers() kernel32.CloseThreadpoolCleanupGroupMembers -@ stdcall -version=0x600+ CloseThreadpoolIo() kernel32.CloseThreadpoolIo -@ stdcall -version=0x600+ CloseThreadpoolTimer() kernel32.CloseThreadpoolTimer -@ stdcall -version=0x600+ CloseThreadpoolWait() kernel32.CloseThreadpoolWait -@ stdcall -version=0x600+ CloseThreadpoolWork() kernel32.CloseThreadpoolWork -@ stdcall -version=0x600+ CreateThreadpool() kernel32.CreateThreadpool -@ stdcall -version=0x600+ CreateThreadpoolCleanupGroup() kernel32.CreateThreadpoolCleanupGroup -@ stdcall -version=0x600+ CreateThreadpoolIo() kernel32.CreateThreadpoolIo -@ stdcall -version=0x600+ CreateThreadpoolTimer() kernel32.CreateThreadpoolTimer -@ stdcall -version=0x600+ CreateThreadpoolWait() kernel32.CreateThreadpoolWait -@ stdcall -version=0x600+ CreateThreadpoolWork() kernel32.CreateThreadpoolWork -@ stdcall -version=0x600+ DisassociateCurrentThreadFromCallback() kernel32.DisassociateCurrentThreadFromCallback -@ stdcall -version=0x600+ FreeLibraryWhenCallbackReturns() kernel32.FreeLibraryWhenCallbackReturns -@ stdcall -version=0x600+ IsThreadpoolTimerSet() kernel32.IsThreadpoolTimerSet -@ stdcall -version=0x600+ LeaveCriticalSectionWhenCallbackReturns() kernel32.LeaveCriticalSectionWhenCallbackReturns -@ stub QueryThreadpoolStackInformation -@ stdcall -version=0x600+ ReleaseMutexWhenCallbackReturns() kernel32.ReleaseMutexWhenCallbackReturns -@ stdcall -version=0x600+ ReleaseSemaphoreWhenCallbackReturns() kernel32.ReleaseSemaphoreWhenCallbackReturns -@ stdcall -version=0x600+ SetEventWhenCallbackReturns() kernel32.SetEventWhenCallbackReturns -@ stub SetThreadpoolStackInformation -@ stdcall -version=0x600+ SetThreadpoolThreadMaximum() kernel32.SetThreadpoolThreadMaximum -@ stdcall -version=0x600+ SetThreadpoolThreadMinimum() kernel32.SetThreadpoolThreadMinimum -@ stdcall -version=0x600+ SetThreadpoolTimer() kernel32.SetThreadpoolTimer -@ stub SetThreadpoolTimerEx -@ stdcall -version=0x600+ SetThreadpoolWait() kernel32.SetThreadpoolWait -@ stub SetThreadpoolWaitEx -@ stdcall -version=0x600+ StartThreadpoolIo() kernel32.StartThreadpoolIo -@ stdcall -version=0x600+ SubmitThreadpoolWork() kernel32.SubmitThreadpoolWork -@ stdcall -version=0x600+ TrySubmitThreadpoolCallback() kernel32.TrySubmitThreadpoolCallback -@ stdcall -version=0x600+ WaitForThreadpoolIoCallbacks() kernel32.WaitForThreadpoolIoCallbacks -@ stdcall -version=0x600+ WaitForThreadpoolTimerCallbacks() kernel32.WaitForThreadpoolTimerCallbacks -@ stdcall -version=0x600+ WaitForThreadpoolWaitCallbacks() kernel32.WaitForThreadpoolWaitCallbacks -@ stdcall -version=0x600+ WaitForThreadpoolWorkCallbacks() kernel32.WaitForThreadpoolWorkCallbacks diff --git a/dll/apisets/api-ms-win-core-threadpool-legacy-l1-1-0.spec b/dll/apisets/api-ms-win-core-threadpool-legacy-l1-1-0.spec deleted file mode 100644 index e01181b6357..00000000000 --- a/dll/apisets/api-ms-win-core-threadpool-legacy-l1-1-0.spec +++ /dev/null @@ -1,10 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall ChangeTimerQueueTimer() kernel32.ChangeTimerQueueTimer -@ stdcall CreateTimerQueue() kernel32.CreateTimerQueue -@ stdcall CreateTimerQueueTimer() kernel32.CreateTimerQueueTimer -@ stdcall DeleteTimerQueueEx() kernel32.DeleteTimerQueueEx -@ stdcall DeleteTimerQueueTimer() kernel32.DeleteTimerQueueTimer -@ stdcall QueueUserWorkItem() kernel32.QueueUserWorkItem -@ stdcall UnregisterWaitEx() kernel32.UnregisterWaitEx diff --git a/dll/apisets/api-ms-win-core-threadpool-private-l1-1-0.spec b/dll/apisets/api-ms-win-core-threadpool-private-l1-1-0.spec deleted file mode 100644 index ff7e02b6441..00000000000 --- a/dll/apisets/api-ms-win-core-threadpool-private-l1-1-0.spec +++ /dev/null @@ -1,4 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall RegisterWaitForSingleObjectEx() kernel32.RegisterWaitForSingleObjectEx diff --git a/dll/apisets/api-ms-win-core-timezone-l1-1-0.spec b/dll/apisets/api-ms-win-core-timezone-l1-1-0.spec deleted file mode 100644 index 09ab0d183aa..00000000000 --- a/dll/apisets/api-ms-win-core-timezone-l1-1-0.spec +++ /dev/null @@ -1,16 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub EnumDynamicTimeZoneInformation -@ stdcall FileTimeToSystemTime() kernel32.FileTimeToSystemTime -@ stdcall -version=0x600+ GetDynamicTimeZoneInformation() kernel32.GetDynamicTimeZoneInformation -@ stub GetDynamicTimeZoneInformationEffectiveYears -@ stdcall GetTimeZoneInformation() kernel32.GetTimeZoneInformation -@ stdcall -version=0x600+ GetTimeZoneInformationForYear() kernel32.GetTimeZoneInformationForYear -@ stdcall -version=0x600+ SetDynamicTimeZoneInformation() kernel32.SetDynamicTimeZoneInformation -@ stdcall SetTimeZoneInformation() kernel32.SetTimeZoneInformation -@ stdcall SystemTimeToFileTime() kernel32.SystemTimeToFileTime -@ stdcall SystemTimeToTzSpecificLocalTime() kernel32.SystemTimeToTzSpecificLocalTime -@ stub SystemTimeToTzSpecificLocalTimeEx -@ stdcall TzSpecificLocalTimeToSystemTime() kernel32.TzSpecificLocalTimeToSystemTime -@ stub TzSpecificLocalTimeToSystemTimeEx diff --git a/dll/apisets/api-ms-win-core-toolhelp-l1-1-0.spec b/dll/apisets/api-ms-win-core-toolhelp-l1-1-0.spec deleted file mode 100644 index 52bfb9eaa7a..00000000000 --- a/dll/apisets/api-ms-win-core-toolhelp-l1-1-0.spec +++ /dev/null @@ -1,10 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CreateToolhelp32Snapshot() kernel32.CreateToolhelp32Snapshot -@ stdcall Module32FirstW() kernel32.Module32FirstW -@ stdcall Module32NextW() kernel32.Module32NextW -@ stdcall Process32FirstW() kernel32.Process32FirstW -@ stdcall Process32NextW() kernel32.Process32NextW -@ stdcall Thread32First() kernel32.Thread32First -@ stdcall Thread32Next() kernel32.Thread32Next diff --git a/dll/apisets/api-ms-win-core-url-l1-1-0.spec b/dll/apisets/api-ms-win-core-url-l1-1-0.spec deleted file mode 100644 index 501d58afbce..00000000000 --- a/dll/apisets/api-ms-win-core-url-l1-1-0.spec +++ /dev/null @@ -1,41 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall GetAcceptLanguagesA() shlwapi.GetAcceptLanguagesA -@ stdcall GetAcceptLanguagesW() shlwapi.GetAcceptLanguagesW -@ stdcall HashData() shlwapi.HashData -@ stdcall IsInternetESCEnabled() shlwapi.IsInternetESCEnabled -@ stdcall ParseURLA() shlwapi.ParseURLA -@ stdcall ParseURLW() shlwapi.ParseURLW -@ stdcall PathCreateFromUrlA() shlwapi.PathCreateFromUrlA -@ stub PathCreateFromUrlAlloc -@ stdcall PathCreateFromUrlW() shlwapi.PathCreateFromUrlW -@ stdcall PathIsURLA() shlwapi.PathIsURLA -@ stdcall PathIsURLW() shlwapi.PathIsURLW -@ stdcall UrlApplySchemeA() shlwapi.UrlApplySchemeA -@ stdcall UrlApplySchemeW() shlwapi.UrlApplySchemeW -@ stdcall UrlCanonicalizeA() shlwapi.UrlCanonicalizeA -@ stdcall UrlCanonicalizeW() shlwapi.UrlCanonicalizeW -@ stdcall UrlCombineA() shlwapi.UrlCombineA -@ stdcall UrlCombineW() shlwapi.UrlCombineW -@ stdcall UrlCompareA() shlwapi.UrlCompareA -@ stdcall UrlCompareW() shlwapi.UrlCompareW -@ stdcall UrlCreateFromPathA() shlwapi.UrlCreateFromPathA -@ stdcall UrlCreateFromPathW() shlwapi.UrlCreateFromPathW -@ stdcall UrlEscapeA() shlwapi.UrlEscapeA -@ stdcall UrlEscapeW() shlwapi.UrlEscapeW -@ stdcall UrlFixupW() shlwapi.UrlFixupW -@ stdcall UrlGetLocationA() shlwapi.UrlGetLocationA -@ stdcall UrlGetLocationW() shlwapi.UrlGetLocationW -@ stdcall UrlGetPartA() shlwapi.UrlGetPartA -@ stdcall UrlGetPartW() shlwapi.UrlGetPartW -@ stdcall UrlHashA() shlwapi.UrlHashA -@ stdcall UrlHashW() shlwapi.UrlHashW -@ stdcall UrlIsA() shlwapi.UrlIsA -@ stdcall UrlIsNoHistoryA() shlwapi.UrlIsNoHistoryA -@ stdcall UrlIsNoHistoryW() shlwapi.UrlIsNoHistoryW -@ stdcall UrlIsOpaqueA() shlwapi.UrlIsOpaqueA -@ stdcall UrlIsOpaqueW() shlwapi.UrlIsOpaqueW -@ stdcall UrlIsW() shlwapi.UrlIsW -@ stdcall UrlUnescapeA() shlwapi.UrlUnescapeA -@ stdcall UrlUnescapeW() shlwapi.UrlUnescapeW diff --git a/dll/apisets/api-ms-win-core-util-l1-1-0.spec b/dll/apisets/api-ms-win-core-util-l1-1-0.spec deleted file mode 100644 index feee38ae2fe..00000000000 --- a/dll/apisets/api-ms-win-core-util-l1-1-0.spec +++ /dev/null @@ -1,8 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall Beep() kernel32.Beep -@ stdcall DecodePointer() kernel32.DecodePointer -@ stdcall DecodeSystemPointer() kernel32.DecodeSystemPointer -@ stdcall EncodePointer() kernel32.EncodePointer -@ stdcall EncodeSystemPointer() kernel32.EncodeSystemPointer diff --git a/dll/apisets/api-ms-win-core-version-l1-1-0.spec b/dll/apisets/api-ms-win-core-version-l1-1-0.spec deleted file mode 100644 index a43103f5f62..00000000000 --- a/dll/apisets/api-ms-win-core-version-l1-1-0.spec +++ /dev/null @@ -1,7 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall GetFileVersionInfoExW() version.GetFileVersionInfoExW -@ stdcall GetFileVersionInfoSizeExW() version.GetFileVersionInfoSizeExW -@ stdcall VerFindFileW() version.VerFindFileW -@ stdcall VerQueryValueW() version.VerQueryValueW diff --git a/dll/apisets/api-ms-win-core-version-l1-1-1.spec b/dll/apisets/api-ms-win-core-version-l1-1-1.spec deleted file mode 100644 index 53e0faa705f..00000000000 --- a/dll/apisets/api-ms-win-core-version-l1-1-1.spec +++ /dev/null @@ -1,9 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall GetFileVersionInfoExW() version.GetFileVersionInfoExW -@ stdcall GetFileVersionInfoSizeExW() version.GetFileVersionInfoSizeExW -@ stdcall GetFileVersionInfoSizeW() version.GetFileVersionInfoSizeW -@ stdcall GetFileVersionInfoW() version.GetFileVersionInfoW -@ stdcall VerFindFileW() version.VerFindFileW -@ stdcall VerQueryValueW() version.VerQueryValueW diff --git a/dll/apisets/api-ms-win-core-version-private-l1-1-0.spec b/dll/apisets/api-ms-win-core-version-private-l1-1-0.spec deleted file mode 100644 index 52ccd7391e0..00000000000 --- a/dll/apisets/api-ms-win-core-version-private-l1-1-0.spec +++ /dev/null @@ -1,4 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub GetFileVersionInfoByHandle diff --git a/dll/apisets/api-ms-win-core-versionansi-l1-1-0.spec b/dll/apisets/api-ms-win-core-versionansi-l1-1-0.spec deleted file mode 100644 index 14bc1af9836..00000000000 --- a/dll/apisets/api-ms-win-core-versionansi-l1-1-0.spec +++ /dev/null @@ -1,7 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall GetFileVersionInfoExA() version.GetFileVersionInfoExA -@ stdcall GetFileVersionInfoSizeExA() version.GetFileVersionInfoSizeExA -@ stdcall VerFindFileA() version.VerFindFileA -@ stdcall VerQueryValueA() version.VerQueryValueA diff --git a/dll/apisets/api-ms-win-core-windowserrorreporting-l1-1-0.spec b/dll/apisets/api-ms-win-core-windowserrorreporting-l1-1-0.spec deleted file mode 100644 index 422338af0e3..00000000000 --- a/dll/apisets/api-ms-win-core-windowserrorreporting-l1-1-0.spec +++ /dev/null @@ -1,13 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall -version=0x600+ GetApplicationRecoveryCallback() kernel32.GetApplicationRecoveryCallback -@ stdcall -version=0x600+ GetApplicationRestartSettings() kernel32.GetApplicationRestartSettings -@ stdcall -version=0x600+ WerRegisterFile() kernel32.WerRegisterFile -@ stdcall -version=0x600+ WerRegisterMemoryBlock() kernel32.WerRegisterMemoryBlock -@ stub WerRegisterRuntimeExceptionModule -@ stdcall -version=0x600+ WerUnregisterFile() kernel32.WerUnregisterFile -@ stdcall -version=0x600+ WerUnregisterMemoryBlock() kernel32.WerUnregisterMemoryBlock -@ stub WerUnregisterRuntimeExceptionModule -@ stdcall -version=0x600+ WerpNotifyLoadStringResource() kernel32.WerpNotifyLoadStringResource -@ stdcall -version=0x600+ WerpNotifyUseStringResource() kernel32.WerpNotifyUseStringResource diff --git a/dll/apisets/api-ms-win-core-winrt-error-l1-1-0.spec b/dll/apisets/api-ms-win-core-winrt-error-l1-1-0.spec deleted file mode 100644 index 385e7648ae0..00000000000 --- a/dll/apisets/api-ms-win-core-winrt-error-l1-1-0.spec +++ /dev/null @@ -1,14 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub GetRestrictedErrorInfo -@ stub RoCaptureErrorContext -@ stub RoFailFastWithErrorContext -@ stub RoGetErrorReportingFlags -@ stub RoOriginateError -@ stub RoOriginateErrorW -@ stub RoResolveRestrictedErrorInfoReference -@ stub RoSetErrorReportingFlags -@ stub RoTransformError -@ stub RoTransformErrorW -@ stub SetRestrictedErrorInfo diff --git a/dll/apisets/api-ms-win-core-winrt-error-l1-1-1.spec b/dll/apisets/api-ms-win-core-winrt-error-l1-1-1.spec deleted file mode 100644 index 9edd8aba285..00000000000 --- a/dll/apisets/api-ms-win-core-winrt-error-l1-1-1.spec +++ /dev/null @@ -1,22 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub GetRestrictedErrorInfo -@ stub IsErrorPropagationEnabled -@ stub RoCaptureErrorContext -@ stub RoClearError -@ stub RoFailFastWithErrorContext -@ stub RoGetErrorReportingFlags -@ stub RoGetMatchingRestrictedErrorInfo -@ stub RoInspectCapturedStackBackTrace -@ stub RoInspectThreadErrorInfo -@ stub RoOriginateError -@ stub RoOriginateErrorW -@ stub RoOriginateLanguageException -@ stub RoReportFailedDelegate -@ stub RoReportUnhandledError -@ stub RoResolveRestrictedErrorInfoReference -@ stub RoSetErrorReportingFlags -@ stub RoTransformError -@ stub RoTransformErrorW -@ stub SetRestrictedErrorInfo diff --git a/dll/apisets/api-ms-win-core-winrt-errorprivate-l1-1-1.spec b/dll/apisets/api-ms-win-core-winrt-errorprivate-l1-1-1.spec deleted file mode 100644 index 93d26890d13..00000000000 --- a/dll/apisets/api-ms-win-core-winrt-errorprivate-l1-1-1.spec +++ /dev/null @@ -1,5 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub RoFailFastWithErrorContextInternal -@ stub RoReportCapabilityCheckFailure diff --git a/dll/apisets/api-ms-win-core-winrt-l1-1-0.spec b/dll/apisets/api-ms-win-core-winrt-l1-1-0.spec deleted file mode 100644 index 1c4aa69143f..00000000000 --- a/dll/apisets/api-ms-win-core-winrt-l1-1-0.spec +++ /dev/null @@ -1,12 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub -version=0x602+ RoActivateInstance -@ stub -version=0x602+ RoGetActivationFactory -@ stub -version=0x602+ RoGetApartmentIdentifier -@ stub -version=0x602+ RoInitialize -@ stub -version=0x602+ RoRegisterActivationFactories -@ stub -version=0x602+ RoRegisterForApartmentShutdown -@ stub -version=0x602+ RoRevokeActivationFactories -@ stub -version=0x602+ RoUninitialize -@ stub -version=0x602+ RoUnregisterForApartmentShutdown diff --git a/dll/apisets/api-ms-win-core-winrt-registration-l1-1-0.spec b/dll/apisets/api-ms-win-core-winrt-registration-l1-1-0.spec deleted file mode 100644 index 4355e8142c2..00000000000 --- a/dll/apisets/api-ms-win-core-winrt-registration-l1-1-0.spec +++ /dev/null @@ -1,5 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub RoGetActivatableClassRegistration -@ stub RoGetServerActivatableClasses diff --git a/dll/apisets/api-ms-win-core-winrt-roparameterizediid-l1-1-0.spec b/dll/apisets/api-ms-win-core-winrt-roparameterizediid-l1-1-0.spec deleted file mode 100644 index 652d573ef94..00000000000 --- a/dll/apisets/api-ms-win-core-winrt-roparameterizediid-l1-1-0.spec +++ /dev/null @@ -1,6 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub RoFreeParameterizedTypeExtra -@ stub RoGetParameterizedTypeInstanceIID -@ stub RoParameterizedTypeExtraGetTypeSignature diff --git a/dll/apisets/api-ms-win-core-winrt-string-l1-1-0.spec b/dll/apisets/api-ms-win-core-winrt-string-l1-1-0.spec deleted file mode 100644 index 2872b42693d..00000000000 --- a/dll/apisets/api-ms-win-core-winrt-string-l1-1-0.spec +++ /dev/null @@ -1,30 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub HSTRING_UserFree -@ stub HSTRING_UserFree64 -@ stub HSTRING_UserMarshal -@ stub HSTRING_UserMarshal64 -@ stub HSTRING_UserSize -@ stub HSTRING_UserSize64 -@ stub HSTRING_UserUnmarshal -@ stub HSTRING_UserUnmarshal64 -@ stub WindowsCompareStringOrdinal -@ stub WindowsConcatString -@ stub WindowsCreateString -@ stub WindowsCreateStringReference -@ stub WindowsDeleteString -@ stub WindowsDeleteStringBuffer -@ stub WindowsDuplicateString -@ stub WindowsGetStringLen -@ stub WindowsGetStringRawBuffer -@ stub WindowsInspectString -@ stub WindowsIsStringEmpty -@ stub WindowsPreallocateStringBuffer -@ stub WindowsPromoteStringBuffer -@ stub WindowsReplaceString -@ stub WindowsStringHasEmbeddedNull -@ stub WindowsSubstring -@ stub WindowsSubstringWithSpecifiedLength -@ stub WindowsTrimStringEnd -@ stub WindowsTrimStringStart diff --git a/dll/apisets/api-ms-win-core-winrt-string-l1-1-1.spec b/dll/apisets/api-ms-win-core-winrt-string-l1-1-1.spec deleted file mode 100644 index 1daa079d3d5..00000000000 --- a/dll/apisets/api-ms-win-core-winrt-string-l1-1-1.spec +++ /dev/null @@ -1,29 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub HSTRING_UserFree -@ stub HSTRING_UserFree64 -@ stub HSTRING_UserMarshal -@ stub HSTRING_UserMarshal64 -@ stub HSTRING_UserSize -@ stub HSTRING_UserSize64 -@ stub HSTRING_UserUnmarshal -@ stub HSTRING_UserUnmarshal64 -@ stub WindowsCompareStringOrdinal -@ stub WindowsConcatString -@ stub WindowsCreateString -@ stub WindowsCreateStringReference -@ stub WindowsDeleteString -@ stub WindowsDeleteStringBuffer -@ stub WindowsDuplicateString -@ stub WindowsGetStringLen -@ stub WindowsGetStringRawBuffer -@ stub WindowsIsStringEmpty -@ stub WindowsPreallocateStringBuffer -@ stub WindowsPromoteStringBuffer -@ stub WindowsReplaceString -@ stub WindowsStringHasEmbeddedNull -@ stub WindowsSubstring -@ stub WindowsSubstringWithSpecifiedLength -@ stub WindowsTrimStringEnd -@ stub WindowsTrimStringStart diff --git a/dll/apisets/api-ms-win-core-wow64-l1-1-0.spec b/dll/apisets/api-ms-win-core-wow64-l1-1-0.spec deleted file mode 100644 index d60f7089118..00000000000 --- a/dll/apisets/api-ms-win-core-wow64-l1-1-0.spec +++ /dev/null @@ -1,6 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall IsWow64Process() kernel32.IsWow64Process -@ stdcall Wow64DisableWow64FsRedirection() kernel32.Wow64DisableWow64FsRedirection -@ stdcall Wow64RevertWow64FsRedirection() kernel32.Wow64RevertWow64FsRedirection diff --git a/dll/apisets/api-ms-win-core-wow64-l1-1-1.spec b/dll/apisets/api-ms-win-core-wow64-l1-1-1.spec deleted file mode 100644 index 5b07c9acb58..00000000000 --- a/dll/apisets/api-ms-win-core-wow64-l1-1-1.spec +++ /dev/null @@ -1,8 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall GetSystemWow64DirectoryA() kernel32.GetSystemWow64DirectoryA -@ stdcall GetSystemWow64DirectoryW() kernel32.GetSystemWow64DirectoryW -@ stdcall IsWow64Process() kernel32.IsWow64Process -@ stdcall Wow64DisableWow64FsRedirection() kernel32.Wow64DisableWow64FsRedirection -@ stdcall Wow64RevertWow64FsRedirection() kernel32.Wow64RevertWow64FsRedirection diff --git a/dll/apisets/api-ms-win-core-xstate-l1-1-0.spec b/dll/apisets/api-ms-win-core-xstate-l1-1-0.spec deleted file mode 100644 index bdf3100375d..00000000000 --- a/dll/apisets/api-ms-win-core-xstate-l1-1-0.spec +++ /dev/null @@ -1,11 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub RtlCopyExtendedContext -@ stub RtlGetEnabledExtendedFeatures -@ stub RtlGetExtendedContextLength -@ stub RtlGetExtendedFeaturesMask -@ stub RtlInitializeExtendedContext -@ stub RtlLocateExtendedFeature -@ stub RtlLocateLegacyContext -@ stub RtlSetExtendedFeaturesMask diff --git a/dll/apisets/api-ms-win-core-xstate-l2-1-0.spec b/dll/apisets/api-ms-win-core-xstate-l2-1-0.spec deleted file mode 100644 index f267bfcb811..00000000000 --- a/dll/apisets/api-ms-win-core-xstate-l2-1-0.spec +++ /dev/null @@ -1,9 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub CopyContext -@ stub GetEnabledXStateFeatures -@ stub GetXStateFeaturesMask -@ stub InitializeContext -@ stub LocateXStateFeature -@ stub SetXStateFeaturesMask diff --git a/dll/apisets/api-ms-win-crt-conio-l1-1-0.spec b/dll/apisets/api-ms-win-crt-conio-l1-1-0.spec deleted file mode 100644 index 0cdf860e809..00000000000 --- a/dll/apisets/api-ms-win-crt-conio-l1-1-0.spec +++ /dev/null @@ -1,33 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub __conio_common_vcprintf -@ stub __conio_common_vcprintf_p -@ stub __conio_common_vcprintf_s -@ stub __conio_common_vcscanf -@ stub __conio_common_vcwprintf -@ stub __conio_common_vcwprintf_p -@ stub __conio_common_vcwprintf_s -@ stub __conio_common_vcwscanf -@ stdcall _cgets() msvcrt._cgets -@ stub _cgets_s -@ stub _cgetws -@ stub _cgetws_s -@ stdcall _cputs() msvcrt._cputs -@ stub _cputws -@ stdcall _getch() msvcrt._getch -@ stub _getch_nolock -@ stdcall _getche() msvcrt._getche -@ stub _getche_nolock -@ stub _getwch -@ stub _getwch_nolock -@ stub _getwche -@ stub _getwche_nolock -@ stdcall _putch() msvcrt._putch -@ stub _putch_nolock -@ stdcall _putwch() msvcrt._putwch -@ stub _putwch_nolock -@ stdcall _ungetch() msvcrt._ungetch -@ stub _ungetch_nolock -@ stub _ungetwch -@ stub _ungetwch_nolock diff --git a/dll/apisets/api-ms-win-crt-convert-l1-1-0.spec b/dll/apisets/api-ms-win-crt-convert-l1-1-0.spec deleted file mode 100644 index 3eb2e391e35..00000000000 --- a/dll/apisets/api-ms-win-crt-convert-l1-1-0.spec +++ /dev/null @@ -1,125 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall __toascii() msvcrt.__toascii -@ stdcall _atodbl() msvcrt._atodbl -@ stub _atodbl_l -@ stub _atof_l -@ stub _atoflt -@ stub _atoflt_l -@ stdcall _atoi64() msvcrt._atoi64 -@ stub _atoi64_l -@ stub _atoi_l -@ stub _atol_l -@ stdcall _atoldbl() msvcrt._atoldbl -@ stub _atoldbl_l -@ stub _atoll_l -@ stdcall _ecvt() msvcrt._ecvt -@ stub _ecvt_s -@ stdcall _fcvt() msvcrt._fcvt -@ stub _fcvt_s -@ stdcall _gcvt() msvcrt._gcvt -@ stub _gcvt_s -@ stdcall _i64toa() msvcrt._i64toa -@ stub _i64toa_s -@ stdcall _i64tow() msvcrt._i64tow -@ stub _i64tow_s -@ stdcall _itoa() msvcrt._itoa -@ stub _itoa_s -@ stdcall _itow() msvcrt._itow -@ stub _itow_s -@ stdcall _ltoa() msvcrt._ltoa -@ stub _ltoa_s -@ stdcall _ltow() msvcrt._ltow -@ stub _ltow_s -@ stub _strtod_l -@ stub _strtof_l -@ stdcall _strtoi64() msvcrt._strtoi64 -@ stub _strtoi64_l -@ stub _strtoimax_l -@ stub _strtol_l -@ stub _strtold_l -@ stub _strtoll_l -@ stdcall _strtoui64() msvcrt._strtoui64 -@ stub _strtoui64_l -@ stub _strtoul_l -@ stub _strtoull_l -@ stub _strtoumax_l -@ stdcall _ui64toa() msvcrt._ui64toa -@ stub _ui64toa_s -@ stdcall _ui64tow() msvcrt._ui64tow -@ stub _ui64tow_s -@ stdcall _ultoa() msvcrt._ultoa -@ stub _ultoa_s -@ stdcall _ultow() msvcrt._ultow -@ stub _ultow_s -@ stub _wcstod_l -@ stub _wcstof_l -@ stdcall _wcstoi64() msvcrt._wcstoi64 -@ stub _wcstoi64_l -@ stub _wcstoimax_l -@ stub _wcstol_l -@ stub _wcstold_l -@ stub _wcstoll_l -@ stub _wcstombs_l -@ stub _wcstombs_s_l -@ stdcall _wcstoui64() msvcrt._wcstoui64 -@ stub _wcstoui64_l -@ stub _wcstoul_l -@ stub _wcstoull_l -@ stub _wcstoumax_l -@ stub _wctomb_l -@ stub _wctomb_s_l -@ stdcall _wtof() msvcrt._wtof -@ stub _wtof_l -@ stdcall _wtoi() msvcrt._wtoi -@ stdcall _wtoi64() msvcrt._wtoi64 -@ stub _wtoi64_l -@ stub _wtoi_l -@ stdcall _wtol() msvcrt._wtol -@ stub _wtol_l -@ stub _wtoll -@ stub _wtoll_l -@ stdcall atof() msvcrt.atof -@ stdcall atoi() msvcrt.atoi -@ stdcall atol() msvcrt.atol -@ stub atoll -@ stub btowc -@ stub c16rtomb -@ stub c32rtomb -@ stub mbrtoc16 -@ stub mbrtoc32 -@ stub mbrtowc -@ stub mbsrtowcs -@ stub mbsrtowcs_s -@ stdcall mbstowcs() msvcrt.mbstowcs -@ stub mbstowcs_s -@ stdcall mbtowc() msvcrt.mbtowc -@ stdcall strtod() msvcrt.strtod -@ stub strtof -@ stub strtoimax -@ stdcall strtol() msvcrt.strtol -@ stub strtold -@ stub strtoll -@ stdcall strtoul() msvcrt.strtoul -@ stub strtoull -@ stub strtoumax -@ stub wcrtomb -@ stub wcrtomb_s -@ stub wcsrtombs -@ stub wcsrtombs_s -@ stdcall wcstod() msvcrt.wcstod -@ stub wcstof -@ stub wcstoimax -@ stdcall wcstol() msvcrt.wcstol -@ stub wcstold -@ stub wcstoll -@ stdcall wcstombs() msvcrt.wcstombs -@ stub wcstombs_s -@ stdcall wcstoul() msvcrt.wcstoul -@ stub wcstoull -@ stub wcstoumax -@ stub wctob -@ stdcall wctomb() msvcrt.wctomb -@ stub wctomb_s -@ stub wctrans diff --git a/dll/apisets/api-ms-win-crt-environment-l1-1-0.spec b/dll/apisets/api-ms-win-crt-environment-l1-1-0.spec deleted file mode 100644 index 5afd83baa8c..00000000000 --- a/dll/apisets/api-ms-win-crt-environment-l1-1-0.spec +++ /dev/null @@ -1,21 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall -arch=i386 __p__environ() msvcrt.__p__environ -@ stdcall -arch=i386 __p__wenviron() msvcrt.__p__wenviron -@ stub _dupenv_s -@ stdcall _putenv() msvcrt._putenv -@ stub _putenv_s -@ stdcall _searchenv() msvcrt._searchenv -@ stub _searchenv_s -@ stub _wdupenv_s -@ stdcall _wgetcwd() msvcrt._wgetcwd -@ stdcall _wgetdcwd() msvcrt._wgetdcwd -@ stdcall _wgetenv() msvcrt._wgetenv -@ stub _wgetenv_s -@ stdcall _wputenv() msvcrt._wputenv -@ stub _wputenv_s -@ stdcall _wsearchenv() msvcrt._wsearchenv -@ stub _wsearchenv_s -@ stdcall getenv() msvcrt.getenv -@ stub getenv_s diff --git a/dll/apisets/api-ms-win-crt-filesystem-l1-1-0.spec b/dll/apisets/api-ms-win-crt-filesystem-l1-1-0.spec deleted file mode 100644 index 5d7384d9428..00000000000 --- a/dll/apisets/api-ms-win-crt-filesystem-l1-1-0.spec +++ /dev/null @@ -1,68 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall _access() msvcrt._access -@ stub _access_s -@ stdcall _chdir() msvcrt._chdir -@ stdcall _chdrive() msvcrt._chdrive -@ stdcall _chmod() msvcrt._chmod -@ stdcall _findclose() msvcrt._findclose -@ stub _findfirst32 -@ stub _findfirst32i64 -@ stdcall _findfirst64() msvcrt._findfirst64 -@ stub _findfirst64i32 -@ stub _findnext32 -@ stub _findnext32i64 -@ stdcall _findnext64() msvcrt._findnext64 -@ stub _findnext64i32 -@ stub _fstat32 -@ stub _fstat32i64 -@ stdcall _fstat64() msvcrt._fstat64 -@ stub _fstat64i32 -@ stdcall _fullpath() msvcrt._fullpath -@ stdcall _getdiskfree() msvcrt._getdiskfree -@ stdcall _getdrive() msvcrt._getdrive -@ stdcall _getdrives() msvcrt._getdrives -@ stub _lock_file -@ stdcall _makepath() msvcrt._makepath -@ stub _makepath_s -@ stdcall _mkdir() msvcrt._mkdir -@ stdcall _rmdir() msvcrt._rmdir -@ stdcall _splitpath() msvcrt._splitpath -@ stub _splitpath_s -@ stub _stat32 -@ stub _stat32i64 -@ stdcall _stat64() msvcrt._stat64 -@ stub _stat64i32 -@ stdcall _umask() msvcrt._umask -@ stub _umask_s -@ stdcall _unlink() msvcrt._unlink -@ stub _unlock_file -@ stdcall _waccess() msvcrt._waccess -@ stub _waccess_s -@ stdcall _wchdir() msvcrt._wchdir -@ stdcall _wchmod() msvcrt._wchmod -@ stub _wfindfirst32 -@ stub _wfindfirst32i64 -@ stub _wfindfirst64 -@ stub _wfindfirst64i32 -@ stub _wfindnext32 -@ stub _wfindnext32i64 -@ stub _wfindnext64 -@ stub _wfindnext64i32 -@ stdcall _wfullpath() msvcrt._wfullpath -@ stdcall _wmakepath() msvcrt._wmakepath -@ stub _wmakepath_s -@ stdcall _wmkdir() msvcrt._wmkdir -@ stdcall _wremove() msvcrt._wremove -@ stdcall _wrename() msvcrt._wrename -@ stdcall _wrmdir() msvcrt._wrmdir -@ stdcall _wsplitpath() msvcrt._wsplitpath -@ stub _wsplitpath_s -@ stub _wstat32 -@ stub _wstat32i64 -@ stdcall _wstat64() msvcrt._wstat64 -@ stub _wstat64i32 -@ stdcall _wunlink() msvcrt._wunlink -@ stdcall remove() msvcrt.remove -@ stdcall rename() msvcrt.rename diff --git a/dll/apisets/api-ms-win-crt-heap-l1-1-0.spec b/dll/apisets/api-ms-win-crt-heap-l1-1-0.spec deleted file mode 100644 index 1fa5011a4d1..00000000000 --- a/dll/apisets/api-ms-win-crt-heap-l1-1-0.spec +++ /dev/null @@ -1,30 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall _aligned_free() msvcrt._aligned_free -@ stdcall _aligned_malloc() msvcrt._aligned_malloc -@ stub _aligned_msize -@ stdcall _aligned_offset_malloc() msvcrt._aligned_offset_malloc -@ stdcall _aligned_offset_realloc() msvcrt._aligned_offset_realloc -@ stub _aligned_offset_recalloc -@ stdcall _aligned_realloc() msvcrt._aligned_realloc -@ stub _aligned_recalloc -@ stdcall _callnewh() msvcrt._callnewh -@ stub _calloc_base -@ stdcall _expand() msvcrt._expand -@ stub _free_base -@ stub _get_heap_handle -@ stdcall _heapchk() msvcrt._heapchk -@ stdcall _heapmin() msvcrt._heapmin -@ stdcall _heapwalk() msvcrt._heapwalk -@ stub _malloc_base -@ stdcall _msize() msvcrt._msize -@ stub _query_new_handler -@ stub _query_new_mode -@ stub _realloc_base -@ stub _recalloc -@ stub _set_new_mode -@ stdcall calloc() msvcrt.calloc -@ stdcall free() msvcrt.free -@ stdcall malloc() msvcrt.malloc -@ stdcall realloc() msvcrt.realloc diff --git a/dll/apisets/api-ms-win-crt-locale-l1-1-0.spec b/dll/apisets/api-ms-win-crt-locale-l1-1-0.spec deleted file mode 100644 index 0d255582c1d..00000000000 --- a/dll/apisets/api-ms-win-crt-locale-l1-1-0.spec +++ /dev/null @@ -1,23 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall ___lc_codepage_func() msvcrt.___lc_codepage_func -@ stdcall ___lc_collate_cp_func() msvcrt.___lc_collate_cp_func -@ stub ___lc_locale_name_func -@ stdcall ___mb_cur_max_func() msvcrt.___mb_cur_max_func -@ stub ___mb_cur_max_l_func -@ stub __initialize_lconv_for_unsigned_char -@ stdcall __pctype_func() msvcrt.__pctype_func -@ stdcall __pwctype_func() msvcrt.__pwctype_func -@ stub _configthreadlocale -@ stub _create_locale -@ stub _free_locale -@ stub _get_current_locale -@ stdcall _getmbcp() msvcrt._getmbcp -@ stub _lock_locales -@ stdcall _setmbcp() msvcrt._setmbcp -@ stub _unlock_locales -@ stub _wcreate_locale -@ stdcall _wsetlocale() msvcrt._wsetlocale -@ stdcall localeconv() msvcrt.localeconv -@ stdcall setlocale() msvcrt.setlocale diff --git a/dll/apisets/api-ms-win-crt-math-l1-1-0.spec b/dll/apisets/api-ms-win-crt-math-l1-1-0.spec deleted file mode 100644 index 0082447de81..00000000000 --- a/dll/apisets/api-ms-win-crt-math-l1-1-0.spec +++ /dev/null @@ -1,344 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall -arch=i386 _CIacos() msvcrt._CIacos -@ stdcall -arch=i386 _CIasin() msvcrt._CIasin -@ stdcall -arch=i386 _CIatan() msvcrt._CIatan -@ stdcall -arch=i386 _CIatan2() msvcrt._CIatan2 -@ stdcall -arch=i386 _CIcos() msvcrt._CIcos -@ stdcall -arch=i386 _CIcosh() msvcrt._CIcosh -@ stdcall -arch=i386 _CIexp() msvcrt._CIexp -@ stdcall -arch=i386 _CIfmod() msvcrt._CIfmod -@ stdcall -arch=i386 _CIlog() msvcrt._CIlog -@ stdcall -arch=i386 _CIlog10() msvcrt._CIlog10 -@ stdcall -arch=i386 _CIpow() msvcrt._CIpow -@ stdcall -arch=i386 _CIsin() msvcrt._CIsin -@ stdcall -arch=i386 _CIsinh() msvcrt._CIsinh -@ stdcall -arch=i386 _CIsqrt() msvcrt._CIsqrt -@ stdcall -arch=i386 _CItan() msvcrt._CItan -@ stdcall -arch=i386 _CItanh() msvcrt._CItanh -@ stub _Cbuild -@ stub _Cmulcc -@ stub _Cmulcr -@ stub _FCbuild -@ stub _FCmulcc -@ stub _FCmulcr -@ stub _LCbuild -@ stub _LCmulcc -@ stub _LCmulcr -@ stub __libm_sse2_acos -@ stub __libm_sse2_acosf -@ stub __libm_sse2_asin -@ stub __libm_sse2_asinf -@ stub __libm_sse2_atan -@ stub __libm_sse2_atan2 -@ stub __libm_sse2_atanf -@ stub __libm_sse2_cos -@ stub __libm_sse2_cosf -@ stub __libm_sse2_exp -@ stub __libm_sse2_expf -@ stub __libm_sse2_log -@ stub __libm_sse2_log10 -@ stub __libm_sse2_log10f -@ stub __libm_sse2_logf -@ stub __libm_sse2_pow -@ stub __libm_sse2_powf -@ stub __libm_sse2_sin -@ stub __libm_sse2_sinf -@ stub __libm_sse2_tan -@ stub __libm_sse2_tanf -@ stdcall __setusermatherr() msvcrt.__setusermatherr -@ stdcall _cabs() msvcrt._cabs -@ stdcall _chgsign() msvcrt._chgsign -@ stdcall -arch=x86_64,arm _chgsignf() msvcrt._chgsignf -@ stdcall _copysign() msvcrt._copysign -@ stdcall -arch=x86_64,arm _copysignf() msvcrt._copysignf -@ stub _d_int -@ stub _dclass -@ stub _dexp -@ stub _dlog -@ stub _dnorm -@ stub _dpcomp -@ stub _dpoly -@ stub _dscale -@ stub _dsign -@ stub _dsin -@ stub _dtest -@ stub _dunscale -@ stub _except1 -@ stub _fd_int -@ stub _fdclass -@ stub _fdexp -@ stub _fdlog -@ stub _fdnorm -@ stdcall _fdopen() msvcrt._fdopen -@ stub _fdpcomp -@ stub _fdpoly -@ stub _fdscale -@ stub _fdsign -@ stub _fdsin -@ stub _fdtest -@ stub _fdunscale -@ stdcall _finite() msvcrt._finite -@ stub _finitef -@ stdcall _fpclass() msvcrt._fpclass -@ stub _fpclassf -@ stdcall -arch=i386 _ftol() msvcrt._ftol -@ stub _get_FMA3_enable -@ stdcall _hypot() msvcrt._hypot -@ stdcall -arch=x86_64,arm _hypotf() msvcrt._hypotf -@ stdcall _isnan() msvcrt._isnan -@ stub _isnanf -@ stdcall _j0() msvcrt._j0 -@ stdcall _j1() msvcrt._j1 -@ stdcall _jn() msvcrt._jn -@ stub _ld_int -@ stub _ldclass -@ stub _ldexp -@ stub _ldlog -@ stub _ldpcomp -@ stub _ldpoly -@ stub _ldscale -@ stub _ldsign -@ stub _ldsin -@ stub _ldtest -@ stub _ldunscale -@ stub _libm_sse2_acos_precise -@ stub _libm_sse2_asin_precise -@ stub _libm_sse2_atan_precise -@ stub _libm_sse2_cos_precise -@ stub _libm_sse2_exp_precise -@ stub _libm_sse2_log10_precise -@ stub _libm_sse2_log_precise -@ stub _libm_sse2_pow_precise -@ stub _libm_sse2_sin_precise -@ stub _libm_sse2_sqrt_precise -@ stub _libm_sse2_tan_precise -@ stdcall _logb() msvcrt._logb -@ stub _logbf -@ stdcall _nextafter() msvcrt._nextafter -@ stub _nextafterf -@ stdcall _scalb() msvcrt._scalb -@ stub _scalbf -@ stub _set_FMA3_enable -@ stub _set_SSE2_enable -@ stdcall _y0() msvcrt._y0 -@ stdcall _y1() msvcrt._y1 -@ stdcall _yn() msvcrt._yn -@ stdcall acos() msvcrt.acos -@ stdcall -arch=x86_64,arm acosf() msvcrt.acosf -@ stub acosh -@ stub acoshf -@ stub acoshl -@ stdcall asin() msvcrt.asin -@ stdcall -arch=x86_64,arm asinf() msvcrt.asinf -@ stub asinh -@ stub asinhf -@ stub asinhl -@ stdcall atan() msvcrt.atan -@ stdcall atan2() msvcrt.atan2 -@ stdcall -arch=x86_64,arm atan2f() msvcrt.atan2f -@ stdcall -arch=x86_64,arm atanf() msvcrt.atanf -@ stub atanh -@ stub atanhf -@ stub atanhl -@ stub cabs -@ stub cabsf -@ stub cabsl -@ stub cacos -@ stub cacosf -@ stub cacosh -@ stub cacoshf -@ stub cacoshl -@ stub cacosl -@ stub carg -@ stub cargf -@ stub cargl -@ stub casin -@ stub casinf -@ stub casinh -@ stub casinhf -@ stub casinhl -@ stub casinl -@ stub catan -@ stub catanf -@ stub catanh -@ stub catanhf -@ stub catanhl -@ stub catanl -@ stub cbrt -@ stub cbrtf -@ stub cbrtl -@ stub ccos -@ stub ccosf -@ stub ccosh -@ stub ccoshf -@ stub ccoshl -@ stub ccosl -@ stdcall ceil() msvcrt.ceil -@ stdcall -arch=x86_64,arm ceilf() msvcrt.ceilf -@ stub cexp -@ stub cexpf -@ stub cexpl -@ stub cimag -@ stub cimagf -@ stub cimagl -@ stub clog -@ stub clog10 -@ stub clog10f -@ stub clog10l -@ stub clogf -@ stub clogl -@ stub conj -@ stub conjf -@ stub conjl -@ stub copysign -@ stub copysignf -@ stub copysignl -@ stdcall cos() msvcrt.cos -@ stdcall -arch=x86_64,arm cosf() msvcrt.cosf -@ stdcall cosh() msvcrt.cosh -@ stdcall -arch=x86_64,arm coshf() msvcrt.coshf -@ stub cpow -@ stub cpowf -@ stub cpowl -@ stub cproj -@ stub cprojf -@ stub cprojl -@ stub creal -@ stub crealf -@ stub creall -@ stub csin -@ stub csinf -@ stub csinh -@ stub csinhf -@ stub csinhl -@ stub csinl -@ stub csqrt -@ stub csqrtf -@ stub csqrtl -@ stub ctan -@ stub ctanf -@ stub ctanh -@ stub ctanhf -@ stub ctanhl -@ stub ctanl -@ stub erf -@ stub erfc -@ stub erfcf -@ stub erfcl -@ stub erff -@ stub erfl -@ stdcall exp() msvcrt.exp -@ stub exp2 -@ stub exp2f -@ stub exp2l -@ stdcall -arch=x86_64,arm expf() msvcrt.expf -@ stub expm1 -@ stub expm1f -@ stub expm1l -@ stdcall fabs() msvcrt.fabs -@ stdcall -arch=arm fabsf() msvcrt.fabsf -@ stub fdim -@ stub fdimf -@ stub fdiml -@ stdcall floor() msvcrt.floor -@ stdcall -arch=x86_64,arm floorf() msvcrt.floorf -@ stub fma -@ stub fmaf -@ stub fmal -@ stub fmax -@ stub fmaxf -@ stub fmaxl -@ stub fmin -@ stub fminf -@ stub fminl -@ stdcall fmod() msvcrt.fmod -@ stdcall -arch=x86_64,arm fmodf() msvcrt.fmodf -@ stdcall frexp() msvcrt.frexp -@ stub hypot -@ stub ilogb -@ stub ilogbf -@ stub ilogbl -@ stdcall ldexp() msvcrt.ldexp -@ stub lgamma -@ stub lgammaf -@ stub lgammal -@ stub llrint -@ stub llrintf -@ stub llrintl -@ stub llround -@ stub llroundf -@ stub llroundl -@ stdcall log() msvcrt.log -@ stdcall log10() msvcrt.log10 -@ stdcall -arch=x86_64,arm log10f() msvcrt.log10f -@ stub log1p -@ stub log1pf -@ stub log1pl -@ stub log2 -@ stub log2f -@ stub log2l -@ stub logb -@ stub logbf -@ stub logbl -@ stdcall -arch=x86_64,arm logf() msvcrt.logf -@ stub lrint -@ stub lrintf -@ stub lrintl -@ stub lround -@ stub lroundf -@ stub lroundl -@ stdcall modf() msvcrt.modf -@ stdcall -arch=x86_64,arm modff() msvcrt.modff -@ stub nan -@ stub nanf -@ stub nanl -@ stub nearbyint -@ stub nearbyintf -@ stub nearbyintl -@ stub nextafter -@ stub nextafterf -@ stub nextafterl -@ stub nexttoward -@ stub nexttowardf -@ stub nexttowardl -@ stub norm -@ stub normf -@ stub norml -@ stdcall pow() msvcrt.pow -@ stdcall -arch=x86_64,arm powf() msvcrt.powf -@ stub remainder -@ stub remainderf -@ stub remainderl -@ stub remquo -@ stub remquof -@ stub remquol -@ stub rint -@ stub rintf -@ stub rintl -@ stub round -@ stub roundf -@ stub roundl -@ stub scalbln -@ stub scalblnf -@ stub scalblnl -@ stub scalbn -@ stub scalbnf -@ stub scalbnl -@ stdcall sin() msvcrt.sin -@ stdcall -arch=x86_64,arm sinf() msvcrt.sinf -@ stdcall sinh() msvcrt.sinh -@ stdcall -arch=x86_64,arm sinhf() msvcrt.sinhf -@ stdcall sqrt() msvcrt.sqrt -@ stdcall -arch=x86_64,arm sqrtf() msvcrt.sqrtf -@ stdcall tan() msvcrt.tan -@ stdcall -arch=x86_64,arm tanf() msvcrt.tanf -@ stdcall tanh() msvcrt.tanh -@ stdcall -arch=x86_64,arm tanhf() msvcrt.tanhf -@ stub tgamma -@ stub tgammaf -@ stub tgammal -@ stub trunc -@ stub truncf -@ stub truncl diff --git a/dll/apisets/api-ms-win-crt-multibyte-l1-1-0.spec b/dll/apisets/api-ms-win-crt-multibyte-l1-1-0.spec deleted file mode 100644 index 3e169a7401d..00000000000 --- a/dll/apisets/api-ms-win-crt-multibyte-l1-1-0.spec +++ /dev/null @@ -1,203 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall -arch=i386 __p__mbcasemap() msvcrt.__p__mbcasemap -@ stdcall -arch=i386 __p__mbctype() msvcrt.__p__mbctype -@ stdcall _ismbbalnum() msvcrt._ismbbalnum -@ stub _ismbbalnum_l -@ stdcall _ismbbalpha() msvcrt._ismbbalpha -@ stub _ismbbalpha_l -@ stub _ismbbblank -@ stub _ismbbblank_l -@ stdcall _ismbbgraph() msvcrt._ismbbgraph -@ stub _ismbbgraph_l -@ stdcall _ismbbkalnum() msvcrt._ismbbkalnum -@ stub _ismbbkalnum_l -@ stdcall _ismbbkana() msvcrt._ismbbkana -@ stub _ismbbkana_l -@ stdcall _ismbbkprint() msvcrt._ismbbkprint -@ stub _ismbbkprint_l -@ stdcall _ismbbkpunct() msvcrt._ismbbkpunct -@ stub _ismbbkpunct_l -@ stdcall _ismbblead() msvcrt._ismbblead -@ stub _ismbblead_l -@ stdcall _ismbbprint() msvcrt._ismbbprint -@ stub _ismbbprint_l -@ stdcall _ismbbpunct() msvcrt._ismbbpunct -@ stub _ismbbpunct_l -@ stdcall _ismbbtrail() msvcrt._ismbbtrail -@ stub _ismbbtrail_l -@ stdcall _ismbcalnum() msvcrt._ismbcalnum -@ stub _ismbcalnum_l -@ stdcall _ismbcalpha() msvcrt._ismbcalpha -@ stub _ismbcalpha_l -@ stub _ismbcblank -@ stub _ismbcblank_l -@ stdcall _ismbcdigit() msvcrt._ismbcdigit -@ stub _ismbcdigit_l -@ stdcall _ismbcgraph() msvcrt._ismbcgraph -@ stub _ismbcgraph_l -@ stdcall _ismbchira() msvcrt._ismbchira -@ stub _ismbchira_l -@ stdcall _ismbckata() msvcrt._ismbckata -@ stub _ismbckata_l -@ stdcall _ismbcl0() msvcrt._ismbcl0 -@ stub _ismbcl0_l -@ stdcall _ismbcl1() msvcrt._ismbcl1 -@ stub _ismbcl1_l -@ stdcall _ismbcl2() msvcrt._ismbcl2 -@ stub _ismbcl2_l -@ stdcall _ismbclegal() msvcrt._ismbclegal -@ stub _ismbclegal_l -@ stdcall _ismbclower() msvcrt._ismbclower -@ stub _ismbclower_l -@ stdcall _ismbcprint() msvcrt._ismbcprint -@ stub _ismbcprint_l -@ stdcall _ismbcpunct() msvcrt._ismbcpunct -@ stub _ismbcpunct_l -@ stdcall _ismbcspace() msvcrt._ismbcspace -@ stub _ismbcspace_l -@ stdcall _ismbcsymbol() msvcrt._ismbcsymbol -@ stub _ismbcsymbol_l -@ stdcall _ismbcupper() msvcrt._ismbcupper -@ stub _ismbcupper_l -@ stdcall _ismbslead() msvcrt._ismbslead -@ stub _ismbslead_l -@ stdcall _ismbstrail() msvcrt._ismbstrail -@ stub _ismbstrail_l -@ stdcall _mbbtombc() msvcrt._mbbtombc -@ stub _mbbtombc_l -@ stdcall _mbbtype() msvcrt._mbbtype -@ stub _mbbtype_l -@ extern -stub _mbcasemap msvcrt._mbcasemap # the -stub is a HACK to fix VS < 2017 build! -@ stdcall _mbccpy() msvcrt._mbccpy -@ stub _mbccpy_l -@ stub _mbccpy_s -@ stub _mbccpy_s_l -@ stdcall _mbcjistojms() msvcrt._mbcjistojms -@ stub _mbcjistojms_l -@ stdcall _mbcjmstojis() msvcrt._mbcjmstojis -@ stub _mbcjmstojis_l -@ stdcall _mbclen() msvcrt._mbclen -@ stub _mbclen_l -@ stdcall _mbctohira() msvcrt._mbctohira -@ stub _mbctohira_l -@ stdcall _mbctokata() msvcrt._mbctokata -@ stub _mbctokata_l -@ stdcall _mbctolower() msvcrt._mbctolower -@ stub _mbctolower_l -@ stdcall _mbctombb() msvcrt._mbctombb -@ stub _mbctombb_l -@ stdcall _mbctoupper() msvcrt._mbctoupper -@ stub _mbctoupper_l -@ stub _mblen_l -@ stdcall _mbsbtype() msvcrt._mbsbtype -@ stub _mbsbtype_l -@ stub _mbscat_s -@ stub _mbscat_s_l -@ stdcall _mbschr() msvcrt._mbschr -@ stub _mbschr_l -@ stdcall _mbscmp() msvcrt._mbscmp -@ stub _mbscmp_l -@ stdcall _mbscoll() msvcrt._mbscoll -@ stub _mbscoll_l -@ stub _mbscpy_s -@ stub _mbscpy_s_l -@ stdcall _mbscspn() msvcrt._mbscspn -@ stub _mbscspn_l -@ stdcall _mbsdec() msvcrt._mbsdec -@ stub _mbsdec_l -@ stdcall _mbsdup() msvcrt._mbsdup -@ stdcall _mbsicmp() msvcrt._mbsicmp -@ stub _mbsicmp_l -@ stdcall _mbsicoll() msvcrt._mbsicoll -@ stub _mbsicoll_l -@ stdcall _mbsinc() msvcrt._mbsinc -@ stub _mbsinc_l -@ stdcall _mbslen() msvcrt._mbslen -@ stub _mbslen_l -@ stdcall _mbslwr() msvcrt._mbslwr -@ stub _mbslwr_l -@ stub _mbslwr_s -@ stub _mbslwr_s_l -@ stdcall _mbsnbcat() msvcrt._mbsnbcat -@ stub _mbsnbcat_l -@ stub _mbsnbcat_s -@ stub _mbsnbcat_s_l -@ stdcall _mbsnbcmp() msvcrt._mbsnbcmp -@ stub _mbsnbcmp_l -@ stdcall _mbsnbcnt() msvcrt._mbsnbcnt -@ stub _mbsnbcnt_l -@ stdcall _mbsnbcoll() msvcrt._mbsnbcoll -@ stub _mbsnbcoll_l -@ stdcall _mbsnbcpy() msvcrt._mbsnbcpy -@ stub _mbsnbcpy_l -@ stub _mbsnbcpy_s -@ stub _mbsnbcpy_s_l -@ stdcall _mbsnbicmp() msvcrt._mbsnbicmp -@ stub _mbsnbicmp_l -@ stdcall _mbsnbicoll() msvcrt._mbsnbicoll -@ stub _mbsnbicoll_l -@ stdcall _mbsnbset() msvcrt._mbsnbset -@ stub _mbsnbset_l -@ stub _mbsnbset_s -@ stub _mbsnbset_s_l -@ stdcall _mbsncat() msvcrt._mbsncat -@ stub _mbsncat_l -@ stub _mbsncat_s -@ stub _mbsncat_s_l -@ stdcall _mbsnccnt() msvcrt._mbsnccnt -@ stub _mbsnccnt_l -@ stdcall _mbsncmp() msvcrt._mbsncmp -@ stub _mbsncmp_l -@ stdcall _mbsncoll() msvcrt._mbsncoll -@ stub _mbsncoll_l -@ stdcall _mbsncpy() msvcrt._mbsncpy -@ stub _mbsncpy_l -@ stub _mbsncpy_s -@ stub _mbsncpy_s_l -@ stdcall _mbsnextc() msvcrt._mbsnextc -@ stub _mbsnextc_l -@ stdcall _mbsnicmp() msvcrt._mbsnicmp -@ stub _mbsnicmp_l -@ stdcall _mbsnicoll() msvcrt._mbsnicoll -@ stub _mbsnicoll_l -@ stdcall _mbsninc() msvcrt._mbsninc -@ stub _mbsninc_l -@ stub _mbsnlen -@ stub _mbsnlen_l -@ stdcall _mbsnset() msvcrt._mbsnset -@ stub _mbsnset_l -@ stub _mbsnset_s -@ stub _mbsnset_s_l -@ stdcall _mbspbrk() msvcrt._mbspbrk -@ stub _mbspbrk_l -@ stdcall _mbsrchr() msvcrt._mbsrchr -@ stub _mbsrchr_l -@ stdcall _mbsrev() msvcrt._mbsrev -@ stub _mbsrev_l -@ stdcall _mbsset() msvcrt._mbsset -@ stub _mbsset_l -@ stub _mbsset_s -@ stub _mbsset_s_l -@ stdcall _mbsspn() msvcrt._mbsspn -@ stub _mbsspn_l -@ stdcall _mbsspnp() msvcrt._mbsspnp -@ stub _mbsspnp_l -@ stdcall _mbsstr() msvcrt._mbsstr -@ stub _mbsstr_l -@ stdcall _mbstok() msvcrt._mbstok -@ stub _mbstok_l -@ stub _mbstok_s -@ stub _mbstok_s_l -@ stub _mbstowcs_l -@ stub _mbstowcs_s_l -@ stdcall _mbstrlen() msvcrt._mbstrlen -@ stub _mbstrlen_l -@ stub _mbstrnlen -@ stub _mbstrnlen_l -@ stdcall _mbsupr() msvcrt._mbsupr -@ stub _mbsupr_l -@ stub _mbsupr_s -@ stub _mbsupr_s_l -@ stub _mbtowc_l diff --git a/dll/apisets/api-ms-win-crt-private-l1-1-0.spec b/dll/apisets/api-ms-win-crt-private-l1-1-0.spec deleted file mode 100644 index 89049ebd743..00000000000 --- a/dll/apisets/api-ms-win-crt-private-l1-1-0.spec +++ /dev/null @@ -1,1193 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub _CreateFrameInfo -@ stdcall _CxxThrowException() msvcrt._CxxThrowException -@ stdcall -arch=i386 _EH_prolog() msvcrt._EH_prolog -@ stub _FindAndUnlinkFrame -@ stub _GetImageBase -@ stub _GetThrowImageBase -@ stub _IsExceptionObjectToBeDestroyed -@ stub -arch=i386 _NLG_Dispatch2 -@ stub -arch=i386 _NLG_Return -@ stub -arch=i386 _NLG_Return2 -@ stub _SetImageBase -@ stub _SetThrowImageBase -@ stub _SetWinRTOutOfMemoryExceptionCallback -@ stub __AdjustPointer -@ stub __BuildCatchObject -@ stub __BuildCatchObjectHelper -@ cdecl -arch=x86_64,arm __C_specific_handler() msvcrt.__C_specific_handler -@ stub -arch=x86_64,arm __C_specific_handler_noexcept -@ stdcall -arch=i386 __CxxDetectRethrow() msvcrt.__CxxDetectRethrow -@ stub __CxxExceptionFilter -@ cdecl -arch=i386,x86_64 __CxxFrameHandler() msvcrt.__CxxFrameHandler -@ cdecl -arch=i386 __CxxFrameHandler2() msvcrt.__CxxFrameHandler2 -@ cdecl -version=0x600+ -arch=x86_64 __CxxFrameHandler2() msvcrt.__CxxFrameHandler2 -@ cdecl -arch=arm __CxxFrameHandler3() msvcrt.__CxxFrameHandler3 -#@ cdecl -version=0x600+ -arch=i386,x86_64 __CxxFrameHandler3() msvcrt.__CxxFrameHandler3 -@ stdcall -arch=i386 __CxxLongjmpUnwind() msvcrt.__CxxLongjmpUnwind -@ stdcall -arch=i386 __CxxQueryExceptionSize() msvcrt.__CxxQueryExceptionSize # should be x64, too -@ stub __CxxRegisterExceptionObject -@ stub __CxxUnregisterExceptionObject -@ cdecl __DestructExceptionObject() msvcrt.__DestructExceptionObject -@ stub __FrameUnwindFilter -@ stub __GetPlatformExceptionInfo -@ stub __NLG_Dispatch2 -@ stub __NLG_Return2 -@ stdcall __RTCastToVoid() msvcrt.__RTCastToVoid -@ stdcall __RTDynamicCast() msvcrt.__RTDynamicCast -@ stdcall __RTtypeid() msvcrt.__RTtypeid -@ stub __TypeMatch -@ stub __current_exception -@ stub __current_exception_context -@ stub __dcrt_get_wide_environment_from_os -@ stub __dcrt_initial_narrow_environment -@ stub -arch=i386 __intrinsic_abnormal_termination -@ stub __intrinsic_setjmp -@ stub __intrinsic_setjmpex -@ stub __processing_throw -@ stub __report_gsfailure -@ stub __std_exception_copy -@ stub __std_exception_destroy -@ stub -arch=x86_64 __std_terminate -@ stub __std_type_info_compare -@ stub __std_type_info_destroy_list -@ stub __std_type_info_hash -@ stub __std_type_info_name -@ stdcall __unDName() msvcrt.__unDName -@ stdcall __unDNameEx() msvcrt.__unDNameEx -@ stdcall -arch=i386,x86_64,arm __uncaught_exception() msvcrt.__uncaught_exception -@ stub -arch=x86_64 __uncaught_exceptions -@ stdcall -arch=i386 _chkesp() msvcrt._chkesp -@ cdecl -arch=i386 _except_handler2() msvcrt._except_handler2 -@ cdecl -arch=i386 _except_handler3() msvcrt._except_handler3 -@ stdcall -version=0x600+ -arch=i386 _except_handler4_common() msvcrt._except_handler4_common -@ stub _get_purecall_handler -@ stub _get_unexpected -@ stdcall -arch=i386 _global_unwind2() msvcrt._global_unwind2 -@ stub _is_exception_typeof -@ stdcall -arch=x86_64 _local_unwind() kernel32._local_unwind -@ stdcall -arch=i386 _local_unwind2() msvcrt._local_unwind2 -@ stdcall -version=0x600+ -arch=i386 _local_unwind4() msvcrt._local_unwind4 -@ stdcall -arch=i386 _longjmpex() msvcrt._longjmpex -@ stub -arch=i386 _o__CIacos -@ stub -arch=i386 _o__CIasin -@ stub -arch=i386 _o__CIatan -@ stub -arch=i386 _o__CIatan2 -@ stub -arch=i386 _o__CIcos -@ stub -arch=i386 _o__CIcosh -@ stub -arch=i386 _o__CIexp -@ stub -arch=i386 _o__CIfmod -@ stub -arch=i386 _o__CIlog -@ stub -arch=i386 _o__CIlog10 -@ stub -arch=i386 _o__CIpow -@ stub -arch=i386 _o__CIsin -@ stub -arch=i386 _o__CIsinh -@ stub -arch=i386 _o__CIsqrt -@ stub -arch=i386 _o__CItan -@ stub -arch=i386 _o__CItanh -@ stub _o__Getdays -@ stub _o__Getmonths -@ stub _o__Gettnames -@ stub _o__Strftime -@ stub _o__W_Getdays -@ stub _o__W_Getmonths -@ stub _o__W_Gettnames -@ stub _o__Wcsftime -@ stub -arch=x86_64 _o____lc_codepage_func -@ stub -arch=x86_64 _o____lc_collate_cp_func -@ stub -arch=x86_64 _o____lc_locale_name_func -@ stub -arch=x86_64 _o____mb_cur_max_func -@ stub _o___acrt_iob_func -@ stub _o___conio_common_vcprintf -@ stub _o___conio_common_vcprintf_p -@ stub _o___conio_common_vcprintf_s -@ stub _o___conio_common_vcscanf -@ stub _o___conio_common_vcwprintf -@ stub _o___conio_common_vcwprintf_p -@ stub _o___conio_common_vcwprintf_s -@ stub _o___conio_common_vcwscanf -@ stub _o___daylight -@ stub _o___dstbias -@ stub _o___fpe_flt_rounds -@ stub -arch=i386 _o___libm_sse2_acos -@ stub -arch=i386 _o___libm_sse2_acosf -@ stub -arch=i386 _o___libm_sse2_asin -@ stub -arch=i386 _o___libm_sse2_asinf -@ stub -arch=i386 _o___libm_sse2_atan -@ stub -arch=i386 _o___libm_sse2_atan2 -@ stub -arch=i386 _o___libm_sse2_atanf -@ stub -arch=i386 _o___libm_sse2_cos -@ stub -arch=i386 _o___libm_sse2_cosf -@ stub -arch=i386 _o___libm_sse2_exp -@ stub -arch=i386 _o___libm_sse2_expf -@ stub -arch=i386 _o___libm_sse2_log -@ stub -arch=i386 _o___libm_sse2_log10 -@ stub -arch=i386 _o___libm_sse2_log10f -@ stub -arch=i386 _o___libm_sse2_logf -@ stub -arch=i386 _o___libm_sse2_pow -@ stub -arch=i386 _o___libm_sse2_powf -@ stub -arch=i386 _o___libm_sse2_sin -@ stub -arch=i386 _o___libm_sse2_sinf -@ stub -arch=i386 _o___libm_sse2_tan -@ stub -arch=i386 _o___libm_sse2_tanf -@ stub _o___p___argc -@ stub _o___p___argv -@ stub _o___p___wargv -@ stub _o___p__acmdln -@ stub _o___p__commode -@ stub _o___p__environ -@ stub _o___p__fmode -@ stub _o___p__mbcasemap -@ stub _o___p__mbctype -@ stub _o___p__pgmptr -@ stub _o___p__wcmdln -@ stub _o___p__wenviron -@ stub _o___p__wpgmptr -@ stub _o___pctype_func -@ stub _o___pwctype_func -@ stub -arch=x86_64 _o___std_exception_copy -@ stub -arch=x86_64 _o___std_exception_destroy -@ stub -arch=x86_64 _o___std_type_info_destroy_list -@ stub -arch=x86_64 _o___std_type_info_name -@ stub _o___stdio_common_vfprintf -@ stub _o___stdio_common_vfprintf_p -@ stub _o___stdio_common_vfprintf_s -@ stub _o___stdio_common_vfscanf -@ stub _o___stdio_common_vfwprintf -@ stub _o___stdio_common_vfwprintf_p -@ stub _o___stdio_common_vfwprintf_s -@ stub _o___stdio_common_vfwscanf -@ stub _o___stdio_common_vsnprintf_s -@ stub _o___stdio_common_vsnwprintf_s -@ stub _o___stdio_common_vsprintf -@ stub _o___stdio_common_vsprintf_p -@ stub _o___stdio_common_vsprintf_s -@ stub _o___stdio_common_vsscanf -@ stub _o___stdio_common_vswprintf -@ stub _o___stdio_common_vswprintf_p -@ stub _o___stdio_common_vswprintf_s -@ stub _o___stdio_common_vswscanf -@ stub _o___timezone -@ stub _o___tzname -@ stub _o___wcserror -@ stub _o__access -@ stub _o__access_s -@ stub _o__aligned_free -@ stub _o__aligned_malloc -@ stub _o__aligned_msize -@ stub _o__aligned_offset_malloc -@ stub _o__aligned_offset_realloc -@ stub _o__aligned_offset_recalloc -@ stub _o__aligned_realloc -@ stub _o__aligned_recalloc -@ stub _o__atodbl -@ stub _o__atodbl_l -@ stub _o__atof_l -@ stub _o__atoflt -@ stub _o__atoflt_l -@ stub _o__atoi64 -@ stub _o__atoi64_l -@ stub _o__atoi_l -@ stub _o__atol_l -@ stub _o__atoldbl -@ stub _o__atoldbl_l -@ stub _o__atoll_l -@ stub _o__beep -@ stub _o__beginthread -@ stub _o__beginthreadex -@ stub _o__cabs -@ stub _o__callnewh -@ stub _o__calloc_base -@ stub -arch=x86_64 _o__cexit -@ stub _o__cgets -@ stub _o__cgets_s -@ stub _o__cgetws -@ stub _o__cgetws_s -@ stub _o__chdir -@ stub _o__chdrive -@ stub _o__chmod -@ stub _o__chsize -@ stub _o__chsize_s -@ stub _o__close -@ stub _o__commit -@ stub -arch=x86_64 _o__configthreadlocale -@ stub -arch=x86_64 _o__configure_narrow_argv -@ stub _o__configure_wide_argv -@ stub -arch=x86_64 _o__controlfp_s -@ stub _o__cputs -@ stub _o__cputws -@ stub _o__creat -@ stub _o__create_locale -@ stub -arch=x86_64 _o__crt_atexit -@ stub _o__ctime32_s -@ stub _o__ctime64_s -@ stub _o__cwait -@ stub _o__d_int -@ stub _o__dclass -@ stub _o__difftime32 -@ stub _o__difftime64 -@ stub _o__dlog -@ stub _o__dnorm -@ stub _o__dpcomp -@ stub _o__dpoly -@ stub _o__dscale -@ stub _o__dsign -@ stub _o__dsin -@ stub _o__dtest -@ stub _o__dunscale -@ stub _o__dup -@ stub _o__dup2 -@ stub _o__dupenv_s -@ stub _o__ecvt -@ stub _o__ecvt_s -@ stub _o__endthread -@ stub _o__endthreadex -@ stub _o__eof -@ stub _o__errno -@ stub _o__except1 -@ stub -version=0xA00+ _o__execute_onexit_table -@ stub _o__execv -@ stub _o__execve -@ stub _o__execvp -@ stub _o__execvpe -@ stub -arch=x86_64 _o__exit -@ stub _o__expand -@ stub _o__fclose_nolock -@ stub _o__fcloseall -@ stub _o__fcvt -@ stub _o__fcvt_s -@ stub _o__fd_int -@ stub _o__fdclass -@ stub _o__fdexp -@ stub _o__fdlog -@ stub _o__fdopen -@ stub _o__fdpcomp -@ stub _o__fdpoly -@ stub _o__fdscale -@ stub _o__fdsign -@ stub _o__fdsin -@ stub _o__fflush_nolock -@ stub _o__fgetc_nolock -@ stub _o__fgetchar -@ stub _o__fgetwc_nolock -@ stub _o__fgetwchar -@ stub _o__filelength -@ stub _o__filelengthi64 -@ stub _o__fileno -@ stub _o__findclose -@ stub _o__findfirst32 -@ stub _o__findfirst32i64 -@ stub _o__findfirst64 -@ stub _o__findfirst64i32 -@ stub _o__findnext32 -@ stub _o__findnext32i64 -@ stub _o__findnext64 -@ stub _o__findnext64i32 -@ stub _o__flushall -@ stub _o__fpclass -@ stub _o__fpclassf -@ stub _o__fputc_nolock -@ stub _o__fputchar -@ stub _o__fputwc_nolock -@ stub _o__fputwchar -@ stub _o__fread_nolock -@ stub _o__fread_nolock_s -@ stub _o__free_base -@ stub _o__free_locale -@ stub _o__fseek_nolock -@ stub _o__fseeki64 -@ stub _o__fseeki64_nolock -@ stub _o__fsopen -@ stub _o__fstat32 -@ stub _o__fstat32i64 -@ stub _o__fstat64 -@ stub _o__fstat64i32 -@ stub _o__ftell_nolock -@ stub _o__ftelli64 -@ stub _o__ftelli64_nolock -@ stub _o__ftime32 -@ stub _o__ftime32_s -@ stub _o__ftime64 -@ stub _o__ftime64_s -@ stub _o__fullpath -@ stub _o__futime32 -@ stub _o__futime64 -@ stub _o__fwrite_nolock -@ stub _o__gcvt -@ stub _o__gcvt_s -@ stub _o__get_daylight -@ stub _o__get_doserrno -@ stub _o__get_dstbias -@ stub _o__get_errno -@ stub _o__get_fmode -@ stub _o__get_heap_handle -@ stub -arch=x86_64 _o__get_initial_narrow_environment -@ stub -arch=x86_64 _o__get_initial_wide_environment -@ stub _o__get_invalid_parameter_handler -@ stub _o__get_narrow_winmain_command_line -@ stub _o__get_osfhandle -@ stub _o__get_pgmptr -@ stub _o__get_stream_buffer_pointers -@ stub _o__get_terminate -@ stub _o__get_thread_local_invalid_parameter_handler -@ stub _o__get_timezone -@ stub _o__get_tzname -@ stub _o__get_wide_winmain_command_line -@ stub _o__get_wpgmptr -@ stub _o__getc_nolock -@ stub _o__getch -@ stub _o__getch_nolock -@ stub _o__getche -@ stub _o__getche_nolock -@ stub _o__getcwd -@ stub _o__getdcwd -@ stub _o__getdiskfree -@ stub _o__getdllprocaddr -@ stub _o__getdrive -@ stub _o__getdrives -@ stub _o__getmbcp -@ stub _o__getsystime -@ stub _o__getw -@ stub _o__getwc_nolock -@ stub _o__getwch -@ stub _o__getwch_nolock -@ stub _o__getwche -@ stub _o__getwche_nolock -@ stub _o__getws -@ stub _o__getws_s -@ stub _o__gmtime32 -@ stub _o__gmtime32_s -@ stub _o__gmtime64 -@ stub _o__gmtime64_s -@ stub _o__heapchk -@ stub _o__heapmin -@ stub _o__hypot -@ stub _o__hypotf -@ stub _o__i64toa -@ stub _o__i64toa_s -@ stub _o__i64tow -@ stub _o__i64tow_s -@ stub -version=0xA00+ _o__initialize_onexit_table -@ stub _o__invalid_parameter_noinfo -@ stub _o__invalid_parameter_noinfo_noreturn -@ stub _o__isatty -@ stub _o__isctype -@ stub _o__isctype_l -@ stub _o__isleadbyte_l -@ stub _o__ismbbalnum -@ stub _o__ismbbalnum_l -@ stub _o__ismbbalpha -@ stub _o__ismbbalpha_l -@ stub _o__ismbbblank -@ stub _o__ismbbblank_l -@ stub _o__ismbbgraph -@ stub _o__ismbbgraph_l -@ stub _o__ismbbkalnum -@ stub _o__ismbbkalnum_l -@ stub _o__ismbbkana -@ stub _o__ismbbkana_l -@ stub _o__ismbbkprint -@ stub _o__ismbbkprint_l -@ stub _o__ismbbkpunct -@ stub _o__ismbbkpunct_l -@ stub _o__ismbblead -@ stub _o__ismbblead_l -@ stub _o__ismbbprint -@ stub _o__ismbbprint_l -@ stub _o__ismbbpunct -@ stub _o__ismbbpunct_l -@ stub _o__ismbbtrail -@ stub _o__ismbbtrail_l -@ stub _o__ismbcalnum -@ stub _o__ismbcalnum_l -@ stub _o__ismbcalpha -@ stub _o__ismbcalpha_l -@ stub _o__ismbcblank -@ stub _o__ismbcblank_l -@ stub _o__ismbcdigit -@ stub _o__ismbcdigit_l -@ stub _o__ismbcgraph -@ stub _o__ismbcgraph_l -@ stub _o__ismbchira -@ stub _o__ismbchira_l -@ stub _o__ismbckata -@ stub _o__ismbckata_l -@ stub _o__ismbcl0 -@ stub _o__ismbcl0_l -@ stub _o__ismbcl1 -@ stub _o__ismbcl1_l -@ stub _o__ismbcl2 -@ stub _o__ismbcl2_l -@ stub _o__ismbclegal -@ stub _o__ismbclegal_l -@ stub _o__ismbclower -@ stub _o__ismbclower_l -@ stub _o__ismbcprint -@ stub _o__ismbcprint_l -@ stub _o__ismbcpunct -@ stub _o__ismbcpunct_l -@ stub _o__ismbcspace -@ stub _o__ismbcspace_l -@ stub _o__ismbcsymbol -@ stub _o__ismbcsymbol_l -@ stub _o__ismbcupper -@ stub _o__ismbcupper_l -@ stub _o__ismbslead -@ stub _o__ismbslead_l -@ stub _o__ismbstrail -@ stub _o__ismbstrail_l -@ stub _o__iswctype_l -@ stub _o__itoa -@ stub _o__itoa_s -@ stub _o__itow -@ stub _o__itow_s -@ stub _o__j0 -@ stub _o__j1 -@ stub _o__jn -@ stub _o__kbhit -@ stub _o__ld_int -@ stub _o__ldclass -@ stub _o__ldexp -@ stub _o__ldlog -@ stub _o__ldpcomp -@ stub _o__ldpoly -@ stub _o__ldscale -@ stub _o__ldsign -@ stub _o__ldsin -@ stub _o__ldtest -@ stub _o__ldunscale -@ stub _o__lfind -@ stub _o__lfind_s -@ stub _o__libm_sse2_acos_precise -@ stub _o__libm_sse2_asin_precise -@ stub _o__libm_sse2_atan_precise -@ stub _o__libm_sse2_cos_precise -@ stub _o__libm_sse2_exp_precise -@ stub _o__libm_sse2_log10_precise -@ stub _o__libm_sse2_log_precise -@ stub _o__libm_sse2_pow_precise -@ stub _o__libm_sse2_sin_precise -@ stub _o__libm_sse2_sqrt_precise -@ stub _o__libm_sse2_tan_precise -@ stub _o__loaddll -@ stub _o__localtime32 -@ stub _o__localtime32_s -@ stub _o__localtime64 -@ stub _o__localtime64_s -@ stub _o__lock_file -@ stub _o__locking -@ stub _o__logb -@ stub _o__logbf -@ stub _o__lsearch -@ stub _o__lsearch_s -@ stub _o__lseek -@ stub _o__lseeki64 -@ stub _o__ltoa -@ stub _o__ltoa_s -@ stub _o__ltow -@ stub _o__ltow_s -@ stub _o__makepath -@ stub _o__makepath_s -@ stub _o__malloc_base -@ stub _o__mbbtombc -@ stub _o__mbbtombc_l -@ stub _o__mbbtype -@ stub _o__mbbtype_l -@ stub _o__mbccpy -@ stub _o__mbccpy_l -@ stub _o__mbccpy_s -@ stub _o__mbccpy_s_l -@ stub _o__mbcjistojms -@ stub _o__mbcjistojms_l -@ stub _o__mbcjmstojis -@ stub _o__mbcjmstojis_l -@ stub _o__mbclen -@ stub _o__mbclen_l -@ stub _o__mbctohira -@ stub _o__mbctohira_l -@ stub _o__mbctokata -@ stub _o__mbctokata_l -@ stub _o__mbctolower -@ stub _o__mbctolower_l -@ stub _o__mbctombb -@ stub _o__mbctombb_l -@ stub _o__mbctoupper -@ stub _o__mbctoupper_l -@ stub _o__mblen_l -@ stub _o__mbsbtype -@ stub _o__mbsbtype_l -@ stub _o__mbscat_s -@ stub _o__mbscat_s_l -@ stub _o__mbschr -@ stub _o__mbschr_l -@ stub _o__mbscmp -@ stub _o__mbscmp_l -@ stub _o__mbscoll -@ stub _o__mbscoll_l -@ stub _o__mbscpy_s -@ stub _o__mbscpy_s_l -@ stub _o__mbscspn -@ stub _o__mbscspn_l -@ stub _o__mbsdec -@ stub _o__mbsdec_l -@ stub _o__mbsicmp -@ stub _o__mbsicmp_l -@ stub _o__mbsicoll -@ stub _o__mbsicoll_l -@ stub _o__mbsinc -@ stub _o__mbsinc_l -@ stub _o__mbslen -@ stub _o__mbslen_l -@ stub _o__mbslwr -@ stub _o__mbslwr_l -@ stub _o__mbslwr_s -@ stub _o__mbslwr_s_l -@ stub _o__mbsnbcat -@ stub _o__mbsnbcat_l -@ stub _o__mbsnbcat_s -@ stub _o__mbsnbcat_s_l -@ stub _o__mbsnbcmp -@ stub _o__mbsnbcmp_l -@ stub _o__mbsnbcnt -@ stub _o__mbsnbcnt_l -@ stub _o__mbsnbcoll -@ stub _o__mbsnbcoll_l -@ stub _o__mbsnbcpy -@ stub _o__mbsnbcpy_l -@ stub _o__mbsnbcpy_s -@ stub _o__mbsnbcpy_s_l -@ stub _o__mbsnbicmp -@ stub _o__mbsnbicmp_l -@ stub _o__mbsnbicoll -@ stub _o__mbsnbicoll_l -@ stub _o__mbsnbset -@ stub _o__mbsnbset_l -@ stub _o__mbsnbset_s -@ stub _o__mbsnbset_s_l -@ stub _o__mbsncat -@ stub _o__mbsncat_l -@ stub _o__mbsncat_s -@ stub _o__mbsncat_s_l -@ stub _o__mbsnccnt -@ stub _o__mbsnccnt_l -@ stub _o__mbsncmp -@ stub _o__mbsncmp_l -@ stub _o__mbsncoll -@ stub _o__mbsncoll_l -@ stub _o__mbsncpy -@ stub _o__mbsncpy_l -@ stub _o__mbsncpy_s -@ stub _o__mbsncpy_s_l -@ stub _o__mbsnextc -@ stub _o__mbsnextc_l -@ stub _o__mbsnicmp -@ stub _o__mbsnicmp_l -@ stub _o__mbsnicoll -@ stub _o__mbsnicoll_l -@ stub _o__mbsninc -@ stub _o__mbsninc_l -@ stub _o__mbsnlen -@ stub _o__mbsnlen_l -@ stub _o__mbsnset -@ stub _o__mbsnset_l -@ stub _o__mbsnset_s -@ stub _o__mbsnset_s_l -@ stub _o__mbspbrk -@ stub _o__mbspbrk_l -@ stub _o__mbsrchr -@ stub _o__mbsrchr_l -@ stub _o__mbsrev -@ stub _o__mbsrev_l -@ stub _o__mbsset -@ stub _o__mbsset_l -@ stub _o__mbsset_s -@ stub _o__mbsset_s_l -@ stub _o__mbsspn -@ stub _o__mbsspn_l -@ stub _o__mbsspnp -@ stub _o__mbsspnp_l -@ stub _o__mbsstr -@ stub _o__mbsstr_l -@ stub _o__mbstok -@ stub _o__mbstok_l -@ stub _o__mbstok_s -@ stub _o__mbstok_s_l -@ stub _o__mbstowcs_l -@ stub _o__mbstowcs_s_l -@ stub _o__mbstrlen -@ stub _o__mbstrlen_l -@ stub _o__mbstrnlen -@ stub _o__mbstrnlen_l -@ stub _o__mbsupr -@ stub _o__mbsupr_l -@ stub _o__mbsupr_s -@ stub _o__mbsupr_s_l -@ stub _o__mbtowc_l -@ stub _o__memicmp -@ stub _o__memicmp_l -@ stub _o__mkdir -@ stub _o__mkgmtime32 -@ stub _o__mkgmtime64 -@ stub _o__mktemp -@ stub _o__mktemp_s -@ stub _o__mktime32 -@ stub _o__mktime64 -@ stub _o__msize -@ stub _o__nextafter -@ stub _o__nextafterf -@ stub _o__open_osfhandle -@ stub _o__pclose -@ stub _o__pipe -@ stub _o__popen -@ stub _o__putc_nolock -@ stub _o__putch -@ stub _o__putch_nolock -@ stub _o__putenv -@ stub _o__putenv_s -@ stub _o__putw -@ stub _o__putwc_nolock -@ stub _o__putwch -@ stub _o__putwch_nolock -@ stub _o__putws -@ stub _o__read -@ stub _o__realloc_base -@ stub _o__recalloc -@ stub -version=0xA00+ _o__register_onexit_function -@ stub _o__resetstkoflw -@ stub _o__rmdir -@ stub _o__rmtmp -@ stub _o__scalb -@ stub _o__scalbf -@ stub _o__searchenv -@ stub _o__searchenv_s -@ cdecl -version=0xA00+ _o__seh_filter_dll() msvcrt.__CppXcptFilter -@ cdecl -version=0xA00+ _o__seh_filter_exe() msvcrt._XcptFilter -@ stub _o__set_abort_behavior -@ stub _o__set_doserrno -@ stub _o__set_errno -@ stub _o__set_invalid_parameter_handler -@ stub _o__set_new_handler -@ stub _o__set_new_mode -@ stub _o__set_thread_local_invalid_parameter_handler -@ stub _o__seterrormode -@ stub _o__setmbcp -@ stub _o__setmode -@ stub _o__setsystime -@ stub _o__sleep -@ stub _o__sopen -@ stub _o__sopen_dispatch -@ stub _o__sopen_s -@ stub _o__spawnv -@ stub _o__spawnve -@ stub _o__spawnvp -@ stub _o__spawnvpe -@ stub _o__splitpath -@ stub _o__splitpath_s -@ stub _o__stat32 -@ stub _o__stat32i64 -@ stub _o__stat64 -@ stub _o__stat64i32 -@ stub _o__strcoll_l -@ stub _o__strdate -@ stub _o__strdate_s -@ stub _o__strdup -@ stub _o__strerror -@ stub _o__strerror_s -@ stub _o__strftime_l -@ stub _o__stricmp -@ stub _o__stricmp_l -@ stub _o__stricoll -@ stub _o__stricoll_l -@ stub _o__strlwr -@ stub _o__strlwr_l -@ stub _o__strlwr_s -@ stub _o__strlwr_s_l -@ stub _o__strncoll -@ stub _o__strncoll_l -@ stub _o__strnicmp -@ stub _o__strnicmp_l -@ stub _o__strnicoll -@ stub _o__strnicoll_l -@ stub _o__strnset_s -@ stub _o__strset_s -@ stub _o__strtime -@ stub _o__strtime_s -@ stub _o__strtod_l -@ stub _o__strtof_l -@ stub _o__strtoi64 -@ stub _o__strtoi64_l -@ stub _o__strtol_l -@ stub _o__strtold_l -@ stub _o__strtoll_l -@ stub _o__strtoui64 -@ stub _o__strtoui64_l -@ stub _o__strtoul_l -@ stub _o__strtoull_l -@ stub _o__strupr -@ stub _o__strupr_l -@ stub _o__strupr_s -@ stub _o__strupr_s_l -@ stub _o__strxfrm_l -@ stub _o__swab -@ stub _o__tell -@ stub _o__telli64 -@ stub _o__timespec32_get -@ stub _o__timespec64_get -@ stub _o__tolower -@ stub _o__tolower_l -@ stub _o__toupper -@ stub _o__toupper_l -@ stub _o__towlower_l -@ stub _o__towupper_l -@ stub _o__tzset -@ stub _o__ui64toa -@ stub _o__ui64toa_s -@ stub _o__ui64tow -@ stub _o__ui64tow_s -@ stub _o__ultoa -@ stub _o__ultoa_s -@ stub _o__ultow -@ stub _o__ultow_s -@ stub _o__umask -@ stub _o__umask_s -@ stub _o__ungetc_nolock -@ stub _o__ungetch -@ stub _o__ungetch_nolock -@ stub _o__ungetwc_nolock -@ stub _o__ungetwch -@ stub _o__ungetwch_nolock -@ stub _o__unlink -@ stub _o__unloaddll -@ stub _o__unlock_file -@ stub _o__utime32 -@ stub _o__utime64 -@ stub _o__waccess -@ stub _o__waccess_s -@ stub _o__wasctime -@ stub _o__wasctime_s -@ stub _o__wchdir -@ stub _o__wchmod -@ stub _o__wcreat -@ stub _o__wcreate_locale -@ stub _o__wcscoll_l -@ stub _o__wcsdup -@ stub _o__wcserror -@ stub _o__wcserror_s -@ stub _o__wcsftime_l -@ stub _o__wcsicmp -@ stub _o__wcsicmp_l -@ stub _o__wcsicoll -@ stub _o__wcsicoll_l -@ stub _o__wcslwr -@ stub _o__wcslwr_l -@ stub _o__wcslwr_s -@ stub _o__wcslwr_s_l -@ stub _o__wcsncoll -@ stub _o__wcsncoll_l -@ stub _o__wcsnicmp -@ stub _o__wcsnicmp_l -@ stub _o__wcsnicoll -@ stub _o__wcsnicoll_l -@ stub _o__wcsnset -@ stub _o__wcsnset_s -@ stub _o__wcsset -@ stub _o__wcsset_s -@ stub _o__wcstod_l -@ stub _o__wcstof_l -@ stub _o__wcstoi64 -@ stub _o__wcstoi64_l -@ stub _o__wcstol_l -@ stub _o__wcstold_l -@ stub _o__wcstoll_l -@ stub _o__wcstombs_l -@ stub _o__wcstombs_s_l -@ stub _o__wcstoui64 -@ stub _o__wcstoui64_l -@ stub _o__wcstoul_l -@ stub _o__wcstoull_l -@ stub _o__wcsupr -@ stub _o__wcsupr_l -@ stub _o__wcsupr_s -@ stub _o__wcsupr_s_l -@ stub _o__wcsxfrm_l -@ stub _o__wctime32 -@ stub _o__wctime32_s -@ stub _o__wctime64 -@ stub _o__wctime64_s -@ stub _o__wctomb_l -@ stub _o__wctomb_s_l -@ stub _o__wdupenv_s -@ stub _o__wexecv -@ stub _o__wexecve -@ stub _o__wexecvp -@ stub _o__wexecvpe -@ stub _o__wfdopen -@ stub _o__wfindfirst32 -@ stub _o__wfindfirst32i64 -@ stub _o__wfindfirst64 -@ stub _o__wfindfirst64i32 -@ stub _o__wfindnext32 -@ stub _o__wfindnext32i64 -@ stub _o__wfindnext64 -@ stub _o__wfindnext64i32 -@ stub _o__wfopen -@ stub _o__wfopen_s -@ stub _o__wfreopen -@ stub _o__wfreopen_s -@ stub _o__wfsopen -@ stub _o__wfullpath -@ stub _o__wgetcwd -@ stub _o__wgetdcwd -@ stub _o__wgetenv -@ stub _o__wgetenv_s -@ stub _o__wmakepath -@ stub _o__wmakepath_s -@ stub _o__wmkdir -@ stub _o__wmktemp -@ stub _o__wmktemp_s -@ stub _o__wperror -@ stub _o__wpopen -@ stub _o__wputenv -@ stub _o__wputenv_s -@ stub _o__wremove -@ stub _o__wrename -@ stub _o__write -@ stub _o__wrmdir -@ stub _o__wsearchenv -@ stub _o__wsearchenv_s -@ stub _o__wsetlocale -@ stub _o__wsopen_dispatch -@ stub _o__wsopen_s -@ stub _o__wspawnv -@ stub _o__wspawnve -@ stub _o__wspawnvp -@ stub _o__wspawnvpe -@ stub _o__wsplitpath -@ stub _o__wsplitpath_s -@ stub _o__wstat32 -@ stub _o__wstat32i64 -@ stub _o__wstat64 -@ stub _o__wstat64i32 -@ stub _o__wstrdate -@ stub _o__wstrdate_s -@ stub _o__wstrtime -@ stub _o__wstrtime_s -@ stub _o__wsystem -@ stub _o__wtmpnam_s -@ stub _o__wtof -@ stub _o__wtof_l -@ stub _o__wtoi -@ stub _o__wtoi64 -@ stub _o__wtoi64_l -@ stub _o__wtoi_l -@ stub _o__wtol -@ stub _o__wtol_l -@ stub _o__wtoll -@ stub _o__wtoll_l -@ stub _o__wunlink -@ stub _o__wutime32 -@ stub _o__wutime64 -@ stub _o__y0 -@ stub _o__y1 -@ stub _o__yn -@ stub _o_abort -@ stub _o_acos -@ stub _o_acosf -@ stub _o_acosh -@ stub _o_acoshf -@ stub _o_acoshl -@ stub _o_asctime -@ stub _o_asctime_s -@ stub _o_asin -@ stub _o_asinf -@ stub _o_asinh -@ stub _o_asinhf -@ stub _o_asinhl -@ stub _o_atan -@ stub _o_atan2 -@ stub _o_atan2f -@ stub _o_atanf -@ stub _o_atanh -@ stub _o_atanhf -@ stub _o_atanhl -@ stub _o_atof -@ stub _o_atoi -@ stub _o_atol -@ stub _o_atoll -@ stub _o_bsearch -@ stub _o_bsearch_s -@ stub _o_btowc -@ stub _o_calloc -@ stub _o_cbrt -@ stub _o_cbrtf -@ stub _o_ceil -@ stub _o_ceilf -@ stub _o_clearerr -@ stub _o_clearerr_s -@ stub _o_cos -@ stub _o_cosf -@ stub _o_cosh -@ stub _o_coshf -@ stub _o_erf -@ stub _o_erfc -@ stub _o_erfcf -@ stub _o_erfcl -@ stub _o_erff -@ stub _o_erfl -@ stub _o_exp -@ stub _o_exp2 -@ stub _o_exp2f -@ stub _o_exp2l -@ stub _o_expf -@ stub _o_fabs -@ stub _o_fclose -@ stub _o_feof -@ stub _o_ferror -@ stub _o_fflush -@ stub _o_fgetc -@ stub _o_fgetpos -@ stub _o_fgets -@ stub _o_fgetwc -@ stub _o_fgetws -@ stub _o_floor -@ stub _o_floorf -@ stub _o_fma -@ stub _o_fmaf -@ stub _o_fmal -@ stub _o_fmod -@ stub _o_fmodf -@ stub _o_fopen -@ stub _o_fopen_s -@ stub _o_fputc -@ stub _o_fputs -@ stub _o_fputwc -@ stub _o_fputws -@ stub _o_fread -@ stub _o_fread_s -@ stub _o_free -@ stub _o_freopen -@ stub _o_freopen_s -@ stub _o_frexp -@ stub _o_fseek -@ stub _o_fsetpos -@ stub _o_ftell -@ stub _o_fwrite -@ stub _o_getc -@ stub _o_getchar -@ stub _o_getenv -@ stub _o_getenv_s -@ stub _o_gets -@ stub _o_gets_s -@ stub _o_getwc -@ stub _o_getwchar -@ stub _o_hypot -@ stub _o_is_wctype -@ stub _o_isalnum -@ stub _o_isalpha -@ stub _o_isblank -@ stub _o_iscntrl -@ stub _o_isdigit -@ stub _o_isgraph -@ stub _o_isleadbyte -@ stub _o_islower -@ stub _o_isprint -@ stub _o_ispunct -@ stub _o_isspace -@ stub _o_isupper -@ stub _o_iswalnum -@ stub _o_iswalpha -@ stub _o_iswascii -@ stub _o_iswblank -@ stub _o_iswcntrl -@ stub _o_iswctype -@ stub _o_iswdigit -@ stub _o_iswgraph -@ stub _o_iswlower -@ stub _o_iswprint -@ stub _o_iswpunct -@ stub _o_iswspace -@ stub _o_iswupper -@ stub _o_iswxdigit -@ stub _o_isxdigit -@ stub _o_ldexp -@ stub _o_lgamma -@ stub _o_lgammaf -@ stub _o_lgammal -@ stub _o_llrint -@ stub _o_llrintf -@ stub _o_llrintl -@ stub _o_llround -@ stub _o_llroundf -@ stub _o_llroundl -@ stub _o_localeconv -@ stub _o_log -@ stub _o_log10 -@ stub _o_log10f -@ stub _o_log1p -@ stub _o_log1pf -@ stub _o_log1pl -@ stub _o_log2 -@ stub _o_log2f -@ stub _o_log2l -@ stub _o_logb -@ stub _o_logbf -@ stub _o_logbl -@ stub _o_logf -@ stub _o_lrint -@ stub _o_lrintf -@ stub _o_lrintl -@ stub _o_lround -@ stub _o_lroundf -@ stub _o_lroundl -@ stub _o_malloc -@ stub _o_mblen -@ stub _o_mbrlen -@ stub _o_mbrtoc16 -@ stub _o_mbrtoc32 -@ stub _o_mbrtowc -@ stub _o_mbsrtowcs -@ stub _o_mbsrtowcs_s -@ stub _o_mbstowcs -@ stub _o_mbstowcs_s -@ stub _o_mbtowc -@ stub _o_memset -@ stub _o_modf -@ stub _o_modff -@ stub _o_nan -@ stub _o_nanf -@ stub _o_nanl -@ stub _o_nearbyint -@ stub _o_nearbyintf -@ stub _o_nearbyintl -@ stub _o_nextafter -@ stub _o_nextafterf -@ stub _o_nextafterl -@ stub _o_nexttoward -@ stub _o_nexttowardf -@ stub _o_nexttowardl -@ stub _o_pow -@ stub _o_powf -@ stub _o_putc -@ stub _o_putchar -@ stub _o_puts -@ stub _o_putwc -@ stub _o_putwchar -@ stub _o_qsort -@ stub _o_qsort_s -@ stub _o_raise -@ stub _o_rand -@ stub _o_rand_s -@ stub _o_realloc -@ stub _o_remainder -@ stub _o_remainderf -@ stub _o_remainderl -@ stub _o_remove -@ stub _o_remquo -@ stub _o_remquof -@ stub _o_remquol -@ stub _o_rewind -@ stub _o_rint -@ stub _o_rintf -@ stub _o_rintl -@ stub _o_round -@ stub _o_roundf -@ stub _o_roundl -@ stub _o_scalbln -@ stub _o_scalblnf -@ stub _o_scalblnl -@ stub _o_scalbn -@ stub _o_scalbnf -@ stub _o_scalbnl -@ stub _o_set_terminate -@ stub _o_setbuf -@ stub _o_setvbuf -@ stub _o_sin -@ stub _o_sinf -@ stub _o_sinh -@ stub _o_sinhf -@ stub _o_sqrt -@ stub _o_sqrtf -@ stub _o_srand -@ stub _o_strcat_s -@ stub _o_strcoll -@ stub _o_strcpy_s -@ stub _o_strerror -@ stub _o_strerror_s -@ stub _o_strftime -@ stub _o_strncat_s -@ stub _o_strncpy_s -@ stub _o_strtod -@ stub _o_strtof -@ stub _o_strtok -@ stub _o_strtok_s -@ stub _o_strtol -@ stub _o_strtold -@ stub _o_strtoll -@ stub _o_strtoul -@ stub _o_strtoull -@ stub _o_system -@ stub _o_tan -@ stub _o_tanf -@ stub _o_tanh -@ stub _o_tanhf -@ stub _o_terminate -@ stub _o_tgamma -@ stub _o_tgammaf -@ stub _o_tgammal -@ stub _o_tmpfile_s -@ stub _o_tmpnam_s -@ stub _o_tolower -@ stub _o_toupper -@ stub _o_towlower -@ stub _o_towupper -@ stub _o_ungetc -@ stub _o_ungetwc -@ stub _o_wcrtomb -@ stub _o_wcrtomb_s -@ stub _o_wcscat_s -@ stub _o_wcscoll -@ stub _o_wcscpy -@ stub _o_wcscpy_s -@ stub _o_wcsftime -@ stub _o_wcsncat_s -@ stub _o_wcsncpy_s -@ stub _o_wcsrtombs -@ stub _o_wcsrtombs_s -@ stub _o_wcstod -@ stub _o_wcstof -@ stub _o_wcstok -@ stub _o_wcstok_s -@ stub _o_wcstol -@ stub _o_wcstold -@ stub _o_wcstoll -@ stub _o_wcstombs -@ stub _o_wcstombs_s -@ stub _o_wcstoul -@ stub _o_wcstoull -@ stub _o_wctob -@ stub _o_wctomb -@ stub _o_wctomb_s -@ stub _o_wmemcpy_s -@ stub _o_wmemmove_s -@ stdcall _purecall() msvcrt._purecall -@ stdcall -arch=i386 _seh_longjmp_unwind() msvcrt._seh_longjmp_unwind -@ stdcall -version=0x600+ -arch=i386 _seh_longjmp_unwind4() msvcrt._seh_longjmp_unwind4 -@ stub _set_purecall_handler -@ stub _set_se_translator -@ stdcall -arch=i386 _setjmp3() msvcrt._setjmp3 -@ stdcall longjmp() msvcrt.longjmp -@ stdcall memchr() msvcrt.memchr -@ stdcall memcmp() msvcrt.memcmp -@ stdcall memcpy() msvcrt.memcpy -@ stdcall memmove() msvcrt.memmove -@ stub set_unexpected -@ stdcall -arch=x86_64,arm setjmp() msvcrt.setjmp -@ stdcall strchr() msvcrt.strchr -@ stdcall strrchr() msvcrt.strrchr -@ stdcall strstr() msvcrt.strstr -@ stub unexpected -@ stdcall wcschr() msvcrt.wcschr -@ stdcall wcsrchr() msvcrt.wcsrchr -@ stdcall wcsstr() msvcrt.wcsstr diff --git a/dll/apisets/api-ms-win-crt-process-l1-1-0.spec b/dll/apisets/api-ms-win-crt-process-l1-1-0.spec deleted file mode 100644 index 49249584325..00000000000 --- a/dll/apisets/api-ms-win-crt-process-l1-1-0.spec +++ /dev/null @@ -1,41 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall _beep() msvcrt._beep -@ stdcall _cwait() msvcrt._cwait -@ stdcall _execl() msvcrt._execl -@ stdcall _execle() msvcrt._execle -@ stdcall _execlp() msvcrt._execlp -@ stdcall _execlpe() msvcrt._execlpe -@ stdcall _execv() msvcrt._execv -@ stdcall _execve() msvcrt._execve -@ stdcall _execvp() msvcrt._execvp -@ stdcall _execvpe() msvcrt._execvpe -@ cdecl -arch=i386 _loaddll() msvcrt._loaddll -@ cdecl -arch=x86_64 -version=0x502 _loaddll() msvcrt._loaddll -@ stdcall _spawnl() msvcrt._spawnl -@ stdcall _spawnle() msvcrt._spawnle -@ stdcall _spawnlp() msvcrt._spawnlp -@ stdcall _spawnlpe() msvcrt._spawnlpe -@ stdcall _spawnv() msvcrt._spawnv -@ stdcall _spawnve() msvcrt._spawnve -@ stdcall _spawnvp() msvcrt._spawnvp -@ stdcall _spawnvpe() msvcrt._spawnvpe -@ cdecl -arch=i386 _unloaddll() msvcrt._unloaddll -@ cdecl -arch=x86_64 -version=0x502 _unloaddll() msvcrt._unloaddll -@ stdcall _wexecl() msvcrt._wexecl -@ stdcall _wexecle() msvcrt._wexecle -@ stdcall _wexeclp() msvcrt._wexeclp -@ stdcall _wexeclpe() msvcrt._wexeclpe -@ stdcall _wexecv() msvcrt._wexecv -@ stdcall _wexecve() msvcrt._wexecve -@ stdcall _wexecvp() msvcrt._wexecvp -@ stdcall _wexecvpe() msvcrt._wexecvpe -@ stdcall _wspawnl() msvcrt._wspawnl -@ stdcall _wspawnle() msvcrt._wspawnle -@ stdcall _wspawnlp() msvcrt._wspawnlp -@ stdcall _wspawnlpe() msvcrt._wspawnlpe -@ stdcall _wspawnv() msvcrt._wspawnv -@ stdcall _wspawnve() msvcrt._wspawnve -@ stdcall _wspawnvp() msvcrt._wspawnvp -@ stdcall _wspawnvpe() msvcrt._wspawnvpe diff --git a/dll/apisets/api-ms-win-crt-runtime-l1-1-0.spec b/dll/apisets/api-ms-win-crt-runtime-l1-1-0.spec deleted file mode 100644 index 2f42c59b2c5..00000000000 --- a/dll/apisets/api-ms-win-crt-runtime-l1-1-0.spec +++ /dev/null @@ -1,112 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub _Exit -@ stub __control87_2 -@ stdcall __doserrno() msvcrt.__doserrno -@ stub __fpe_flt_rounds -@ stdcall __fpecode() msvcrt.__fpecode -@ stdcall -arch=i386 __p___argc() msvcrt.__p___argc -@ stdcall -arch=i386 __p___argv() msvcrt.__p___argv -@ stdcall -arch=i386 __p___wargv() msvcrt.__p___wargv -@ stdcall -arch=i386 __p__acmdln() msvcrt.__p__acmdln -@ stdcall -arch=i386 __p__pgmptr() msvcrt.__p__pgmptr -@ stdcall -arch=i386 __p__wcmdln() msvcrt.__p__wcmdln -@ stdcall -arch=i386 __p__wpgmptr() msvcrt.__p__wpgmptr -@ stdcall __pxcptinfoptrs() msvcrt.__pxcptinfoptrs -@ stub __sys_errlist -@ stub __sys_nerr -@ stdcall __threadhandle() msvcrt.__threadhandle -@ stdcall __threadid() msvcrt.__threadid -@ stdcall __wcserror() msvcrt.__wcserror -@ stub __wcserror_s -@ stdcall _assert() msvcrt._assert -@ stdcall _beginthread() msvcrt._beginthread -@ stdcall _beginthreadex() msvcrt._beginthreadex -@ stdcall _c_exit() msvcrt._c_exit -@ stdcall _cexit() msvcrt._cexit -@ stdcall -arch=i386,x86_64 _clearfp() msvcrt._clearfp -@ stub _configure_narrow_argv -@ stub _configure_wide_argv -@ stdcall -arch=i386,x86_64 _control87() msvcrt._control87 -@ stdcall _controlfp() msvcrt._controlfp -@ stub _controlfp_s -@ stub _crt_at_quick_exit -@ stub _crt_atexit -@ stub _crt_debugger_hook -@ stdcall _endthread() msvcrt._endthread -@ stdcall _endthreadex() msvcrt._endthreadex -@ stdcall _errno() msvcrt._errno -@ cdecl -stub -version=0xA00+ _execute_onexit_table(ptr) -@ stdcall _exit() msvcrt._exit -@ stdcall -arch=i386 _fpieee_flt() msvcrt._fpieee_flt -@ stdcall -stub -arch=x86_64 _fpieee_flt() # ucrtbase._fpieee_flt (msvcrt x64 doesn't have this!) -@ stdcall _fpreset() msvcrt._fpreset -@ stub _get_doserrno -@ stub _get_errno -@ stub _get_initial_narrow_environment -@ stub _get_initial_wide_environment -@ stub _get_invalid_parameter_handler -@ stub _get_narrow_winmain_command_line -@ stub _get_pgmptr -@ stub _get_terminate -@ stub _get_thread_local_invalid_parameter_handler -@ stub _get_wide_winmain_command_line -@ stub _get_wpgmptr -@ cdecl -arch=i386 _getdllprocaddr() msvcrt._getdllprocaddr -@ cdecl -arch=x86_64 -version=0x502 _getdllprocaddr() msvcrt._getdllprocaddr -@ stdcall _getpid() msvcrt._getpid -@ stub _initialize_narrow_environment -@ cdecl -stub -version=0xA00+ _initialize_onexit_table(ptr) -@ stub _initialize_wide_environment -@ stdcall _initterm() msvcrt._initterm -@ cdecl -version=0x600+ _initterm_e(ptr ptr) msvcrt._initterm_e -@ stub _invalid_parameter_noinfo -@ stub _invalid_parameter_noinfo_noreturn -@ stub _invoke_watson -@ stub _query_app_type -@ cdecl -stub -version=0xA00+ _register_onexit_function(ptr ptr) -@ stub _register_thread_local_exe_atexit_callback -@ stdcall _resetstkoflw() msvcrt._resetstkoflw -@ cdecl -version=0xA00+ _seh_filter_dll() msvcrt.__CppXcptFilter -@ cdecl -version=0xA00+ _seh_filter_exe() msvcrt._XcptFilter -@ stub _set_abort_behavior -@ stub _set_app_type -@ stub _set_controlfp -@ stub _set_doserrno -@ stub _set_errno -@ stdcall _set_error_mode() msvcrt._set_error_mode -@ stub _set_invalid_parameter_handler -@ stub _set_new_handler -@ stub _set_thread_local_invalid_parameter_handler -@ stdcall _seterrormode() msvcrt._seterrormode -@ stdcall _sleep() msvcrt._sleep -@ stdcall _statusfp() msvcrt._statusfp -@ stub _statusfp2 -@ stdcall _strerror() msvcrt._strerror -@ stub _strerror_s -@ stub _wassert -@ stdcall _wcserror() msvcrt._wcserror -@ stub _wcserror_s -@ stdcall _wperror() msvcrt._wperror -@ stdcall _wsystem() msvcrt._wsystem -@ stdcall abort() msvcrt.abort -@ stdcall exit() msvcrt.exit -@ stub feclearexcept -@ stub fegetenv -@ stub fegetexceptflag -@ stub fegetround -@ stub feholdexcept -@ stub fesetenv -@ stub fesetexceptflag -@ stub fesetround -@ stub fetestexcept -@ stdcall perror() msvcrt.perror -@ stub quick_exit -@ stdcall raise() msvcrt.raise -@ stub set_terminate -@ stdcall signal() msvcrt.signal -@ stdcall strerror() msvcrt.strerror -@ stub strerror_s -@ stdcall system() msvcrt.system -@ stub terminate diff --git a/dll/apisets/api-ms-win-crt-stdio-l1-1-0.spec b/dll/apisets/api-ms-win-crt-stdio-l1-1-0.spec deleted file mode 100644 index a3585d089eb..00000000000 --- a/dll/apisets/api-ms-win-crt-stdio-l1-1-0.spec +++ /dev/null @@ -1,162 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub __acrt_iob_func -@ stdcall -arch=i386 __p__commode() msvcrt.__p__commode -@ stdcall -arch=i386 __p__fmode() msvcrt.__p__fmode -@ stub __stdio_common_vfprintf -@ stub __stdio_common_vfprintf_p -@ stub __stdio_common_vfprintf_s -@ stub __stdio_common_vfscanf -@ stub __stdio_common_vfwprintf -@ stub __stdio_common_vfwprintf_p -@ stub __stdio_common_vfwprintf_s -@ stub __stdio_common_vfwscanf -@ stub __stdio_common_vsnprintf_s -@ stub __stdio_common_vsnwprintf_s -@ stub __stdio_common_vsprintf -@ stub __stdio_common_vsprintf_p -@ stub __stdio_common_vsprintf_s -@ stub __stdio_common_vsscanf -@ stub __stdio_common_vswprintf -@ stub __stdio_common_vswprintf_p -@ stub __stdio_common_vswprintf_s -@ stub __stdio_common_vswscanf -@ stdcall _chsize() msvcrt._chsize -@ stub _chsize_s -@ stdcall _close() msvcrt._close -@ stdcall _commit() msvcrt._commit -@ stdcall _creat() msvcrt._creat -@ stdcall _dup() msvcrt._dup -@ stdcall _dup2() msvcrt._dup2 -@ stdcall _eof() msvcrt._eof -@ stub _fclose_nolock -@ stdcall _fcloseall() msvcrt._fcloseall -@ stub _fflush_nolock -@ stub _fgetc_nolock -@ stdcall _fgetchar() msvcrt._fgetchar -@ stub _fgetwc_nolock -@ stdcall _fgetwchar() msvcrt._fgetwchar -@ stdcall _filelength() msvcrt._filelength -@ stdcall _filelengthi64() msvcrt._filelengthi64 -@ stdcall _fileno() msvcrt._fileno -@ stdcall _flushall() msvcrt._flushall -@ stub _fputc_nolock -@ stdcall _fputchar() msvcrt._fputchar -@ stub _fputwc_nolock -@ stdcall _fputwchar() msvcrt._fputwchar -@ stub _fread_nolock -@ stub _fread_nolock_s -@ stub _fseek_nolock -@ stub _fseeki64 -@ stub _fseeki64_nolock -@ stdcall _fsopen() msvcrt._fsopen -@ stub _ftell_nolock -@ stub _ftelli64 -@ stub _ftelli64_nolock -@ stub _fwrite_nolock -@ stub _get_fmode -@ stdcall _get_osfhandle() msvcrt._get_osfhandle -@ stub _get_printf_count_output -@ stub _get_stream_buffer_pointers -@ stub _getc_nolock -@ stdcall _getcwd() msvcrt._getcwd -@ stdcall _getdcwd() msvcrt._getdcwd -@ stdcall _getmaxstdio() msvcrt._getmaxstdio -@ stdcall _getw() msvcrt._getw -@ stub _getwc_nolock -@ stdcall _getws() msvcrt._getws -@ stub _getws_s -@ stdcall _isatty() msvcrt._isatty -@ stdcall _kbhit() msvcrt._kbhit -@ stdcall _locking() msvcrt._locking -@ stdcall _lseek() msvcrt._lseek -@ stdcall _lseeki64() msvcrt._lseeki64 -@ stdcall _mktemp() msvcrt._mktemp -@ stub _mktemp_s -@ stdcall _open() msvcrt._open -@ stdcall _open_osfhandle() msvcrt._open_osfhandle -@ stdcall _pclose() msvcrt._pclose -@ stdcall _pipe() msvcrt._pipe -@ stdcall _popen() msvcrt._popen -@ stub _putc_nolock -@ stdcall _putw() msvcrt._putw -@ stub _putwc_nolock -@ stdcall _putws() msvcrt._putws -@ stdcall _read() msvcrt._read -@ stdcall _rmtmp() msvcrt._rmtmp -@ stub _set_fmode -@ stub _set_printf_count_output -@ stdcall _setmaxstdio() msvcrt._setmaxstdio -@ stdcall _setmode() msvcrt._setmode -@ stdcall _sopen() msvcrt._sopen -@ stub _sopen_dispatch -@ stub _sopen_s -@ stdcall _tell() msvcrt._tell -@ stdcall _telli64() msvcrt._telli64 -@ stdcall _tempnam() msvcrt._tempnam -@ stub _ungetc_nolock -@ stub _ungetwc_nolock -@ stdcall _wcreat() msvcrt._wcreat -@ stdcall _wfdopen() msvcrt._wfdopen -@ stdcall _wfopen() msvcrt._wfopen -@ stub _wfopen_s -@ stdcall _wfreopen() msvcrt._wfreopen -@ stub _wfreopen_s -@ stdcall _wfsopen() msvcrt._wfsopen -@ stdcall _wmktemp() msvcrt._wmktemp -@ stub _wmktemp_s -@ stdcall _wopen() msvcrt._wopen -@ stdcall _wpopen() msvcrt._wpopen -@ stdcall _write() msvcrt._write -@ stdcall _wsopen() msvcrt._wsopen -@ stub _wsopen_dispatch -@ stub _wsopen_s -@ stdcall _wtempnam() msvcrt._wtempnam -@ stdcall _wtmpnam() msvcrt._wtmpnam -@ stub _wtmpnam_s -@ stdcall clearerr() msvcrt.clearerr -@ stub clearerr_s -@ stdcall fclose() msvcrt.fclose -@ stdcall feof() msvcrt.feof -@ stdcall ferror() msvcrt.ferror -@ stdcall fflush() msvcrt.fflush -@ stdcall fgetc() msvcrt.fgetc -@ stdcall fgetpos() msvcrt.fgetpos -@ stdcall fgets() msvcrt.fgets -@ stdcall fgetwc() msvcrt.fgetwc -@ stdcall fgetws() msvcrt.fgetws -@ stdcall fopen() msvcrt.fopen -@ stub fopen_s -@ stdcall fputc() msvcrt.fputc -@ stdcall fputs() msvcrt.fputs -@ stdcall fputwc() msvcrt.fputwc -@ stdcall fputws() msvcrt.fputws -@ stdcall fread() msvcrt.fread -@ stub fread_s -@ stdcall freopen() msvcrt.freopen -@ stub freopen_s -@ stdcall fseek() msvcrt.fseek -@ stdcall fsetpos() msvcrt.fsetpos -@ stdcall ftell() msvcrt.ftell -@ stdcall fwrite() msvcrt.fwrite -@ stdcall getc() msvcrt.getc -@ stdcall getchar() msvcrt.getchar -@ stdcall gets() msvcrt.gets -@ stub gets_s -@ stdcall getwc() msvcrt.getwc -@ stdcall getwchar() msvcrt.getwchar -@ stdcall putc() msvcrt.putc -@ stdcall putchar() msvcrt.putchar -@ stdcall puts() msvcrt.puts -@ stdcall putwc() msvcrt.putwc -@ stdcall putwchar() msvcrt.putwchar -@ stdcall rewind() msvcrt.rewind -@ stdcall setbuf() msvcrt.setbuf -@ stdcall setvbuf() msvcrt.setvbuf -@ stdcall tmpfile() msvcrt.tmpfile -@ stub tmpfile_s -@ stdcall tmpnam() msvcrt.tmpnam -@ stub tmpnam_s -@ stdcall ungetc() msvcrt.ungetc -@ stdcall ungetwc() msvcrt.ungetwc diff --git a/dll/apisets/api-ms-win-crt-string-l1-1-0.spec b/dll/apisets/api-ms-win-crt-string-l1-1-0.spec deleted file mode 100644 index b4f19f552be..00000000000 --- a/dll/apisets/api-ms-win-crt-string-l1-1-0.spec +++ /dev/null @@ -1,181 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall __isascii() msvcrt.__isascii -@ stdcall __iscsym() msvcrt.__iscsym -@ stdcall __iscsymf() msvcrt.__iscsymf -@ stub __iswcsym -@ stub __iswcsymf -@ stub __strncnt -@ stub __wcsncnt -@ stub _isalnum_l -@ stub _isalpha_l -@ stub _isblank_l -@ stub _iscntrl_l -@ stdcall _isctype() msvcrt._isctype -@ stub _isctype_l -@ stub _isdigit_l -@ stub _isgraph_l -@ stub _isleadbyte_l -@ stub _islower_l -@ stub _isprint_l -@ stub _ispunct_l -@ stub _isspace_l -@ stub _isupper_l -@ stub _iswalnum_l -@ stub _iswalpha_l -@ stub _iswblank_l -@ stub _iswcntrl_l -@ stub _iswcsym_l -@ stub _iswcsymf_l -@ stub _iswctype_l -@ stub _iswdigit_l -@ stub _iswgraph_l -@ stub _iswlower_l -@ stub _iswprint_l -@ stub _iswpunct_l -@ stub _iswspace_l -@ stub _iswupper_l -@ stub _iswxdigit_l -@ stub _isxdigit_l -@ stdcall _memccpy() msvcrt._memccpy -@ stdcall _memicmp() msvcrt._memicmp -@ stub _memicmp_l -@ stub _strcoll_l -@ stdcall _strdup() msvcrt._strdup -@ stdcall _stricmp() msvcrt._stricmp -@ stub _stricmp_l -@ stdcall _stricoll() msvcrt._stricoll -@ stub _stricoll_l -@ stdcall _strlwr() msvcrt._strlwr -@ stub _strlwr_l -@ stub _strlwr_s -@ stub _strlwr_s_l -@ stdcall _strncoll() msvcrt._strncoll -@ stub _strncoll_l -@ stdcall _strnicmp() msvcrt._strnicmp -@ stub _strnicmp_l -@ stdcall _strnicoll() msvcrt._strnicoll -@ stub _strnicoll_l -@ stdcall _strnset() msvcrt._strnset -@ stub _strnset_s -@ stdcall _strrev() msvcrt._strrev -@ stdcall _strset() msvcrt._strset -@ stub _strset_s -@ stdcall _strupr() msvcrt._strupr -@ stub _strupr_l -@ stub _strupr_s -@ stub _strupr_s_l -@ stub _strxfrm_l -@ stdcall _tolower() msvcrt._tolower -@ stub _tolower_l -@ stdcall _toupper() msvcrt._toupper -@ stub _toupper_l -@ stub _towlower_l -@ stub _towupper_l -@ stub _wcscoll_l -@ stdcall _wcsdup() msvcrt._wcsdup -@ stdcall _wcsicmp() msvcrt._wcsicmp -@ stub _wcsicmp_l -@ stdcall _wcsicoll() msvcrt._wcsicoll -@ stub _wcsicoll_l -@ stdcall _wcslwr() msvcrt._wcslwr -@ stub _wcslwr_l -@ stub _wcslwr_s -@ stub _wcslwr_s_l -@ stdcall _wcsncoll() msvcrt._wcsncoll -@ stub _wcsncoll_l -@ stdcall _wcsnicmp() msvcrt._wcsnicmp -@ stub _wcsnicmp_l -@ stdcall _wcsnicoll() msvcrt._wcsnicoll -@ stub _wcsnicoll_l -@ stdcall _wcsnset() msvcrt._wcsnset -@ stub _wcsnset_s -@ stdcall _wcsrev() msvcrt._wcsrev -@ stdcall _wcsset() msvcrt._wcsset -@ stub _wcsset_s -@ stdcall _wcsupr() msvcrt._wcsupr -@ stub _wcsupr_l -@ stub _wcsupr_s -@ stub _wcsupr_s_l -@ stub _wcsxfrm_l -@ stub _wctype -@ stdcall is_wctype() msvcrt.is_wctype -@ stdcall isalnum() msvcrt.isalnum -@ stdcall isalpha() msvcrt.isalpha -@ stub isblank -@ stdcall iscntrl() msvcrt.iscntrl -@ stdcall isdigit() msvcrt.isdigit -@ stdcall isgraph() msvcrt.isgraph -@ stdcall isleadbyte() msvcrt.isleadbyte -@ stdcall islower() msvcrt.islower -@ stdcall isprint() msvcrt.isprint -@ stdcall ispunct() msvcrt.ispunct -@ stdcall isspace() msvcrt.isspace -@ stdcall isupper() msvcrt.isupper -@ stdcall iswalnum() msvcrt.iswalnum -@ stdcall iswalpha() msvcrt.iswalpha -@ stdcall iswascii() msvcrt.iswascii -@ stub iswblank -@ stdcall iswcntrl() msvcrt.iswcntrl -@ stdcall iswctype() msvcrt.iswctype -@ stdcall iswdigit() msvcrt.iswdigit -@ stdcall iswgraph() msvcrt.iswgraph -@ stdcall iswlower() msvcrt.iswlower -@ stdcall iswprint() msvcrt.iswprint -@ stdcall iswpunct() msvcrt.iswpunct -@ stdcall iswspace() msvcrt.iswspace -@ stdcall iswupper() msvcrt.iswupper -@ stdcall iswxdigit() msvcrt.iswxdigit -@ stdcall isxdigit() msvcrt.isxdigit -@ stdcall mblen() msvcrt.mblen -@ stub mbrlen -@ stub memcpy_s -@ stub memmove_s -@ stdcall memset() msvcrt.memset -@ stdcall strcat() msvcrt.strcat -@ stub strcat_s -@ stdcall strcmp() msvcrt.strcmp -@ stdcall strcoll() msvcrt.strcoll -@ stdcall strcpy() msvcrt.strcpy -@ stub strcpy_s -@ stdcall strcspn() msvcrt.strcspn -@ stdcall strlen() msvcrt.strlen -@ stdcall strncat() msvcrt.strncat -@ stub strncat_s -@ stdcall strncmp() msvcrt.strncmp -@ stdcall strncpy() msvcrt.strncpy -@ stub strncpy_s -@ stub strnlen -@ stdcall strpbrk() msvcrt.strpbrk -@ stdcall strspn() msvcrt.strspn -@ stdcall strtok() msvcrt.strtok -@ stub strtok_s -@ stdcall strxfrm() msvcrt.strxfrm -@ stdcall tolower() msvcrt.tolower -@ stdcall toupper() msvcrt.toupper -@ stub towctrans -@ stdcall towlower() msvcrt.towlower -@ stdcall towupper() msvcrt.towupper -@ stdcall wcscat() msvcrt.wcscat -@ stub wcscat_s -@ stdcall wcscmp() msvcrt.wcscmp -@ stdcall wcscoll() msvcrt.wcscoll -@ stdcall wcscpy() msvcrt.wcscpy -@ stub wcscpy_s -@ stdcall wcscspn() msvcrt.wcscspn -@ stdcall wcslen() msvcrt.wcslen -@ stdcall wcsncat() msvcrt.wcsncat -@ stub wcsncat_s -@ stdcall wcsncmp() msvcrt.wcsncmp -@ stdcall wcsncpy() msvcrt.wcsncpy -@ stub wcsncpy_s -@ stub wcsnlen -@ stdcall wcspbrk() msvcrt.wcspbrk -@ stdcall wcsspn() msvcrt.wcsspn -@ stdcall wcstok() msvcrt.wcstok -@ stub wcstok_s -@ stdcall wcsxfrm() msvcrt.wcsxfrm -@ stub wctype -@ stub wmemcpy_s -@ stub wmemmove_s diff --git a/dll/apisets/api-ms-win-crt-time-l1-1-0.spec b/dll/apisets/api-ms-win-crt-time-l1-1-0.spec deleted file mode 100644 index 6b571be4c03..00000000000 --- a/dll/apisets/api-ms-win-crt-time-l1-1-0.spec +++ /dev/null @@ -1,75 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall _Getdays() msvcrt._Getdays -@ stdcall _Getmonths() msvcrt._Getmonths -@ stdcall _Gettnames() msvcrt._Gettnames -@ stdcall _Strftime() msvcrt._Strftime -@ stub _W_Getdays -@ stub _W_Getmonths -@ stub _W_Gettnames -@ stub _Wcsftime -@ stub __daylight -@ stub __dstbias -@ stub __timezone -@ stub __tzname -@ stub _ctime32 -@ stub _ctime32_s -@ stdcall _ctime64() msvcrt._ctime64 -@ stub _ctime64_s -@ stub _difftime32 -@ stub _difftime64 -@ stub _ftime32 -@ stub _ftime32_s -@ stdcall _ftime64() msvcrt._ftime64 -@ stub _ftime64_s -@ stub _futime32 -@ stdcall _futime64() msvcrt._futime64 -@ stub _get_daylight -@ stub _get_dstbias -@ stub _get_timezone -@ stub _get_tzname -@ stdcall _getsystime() msvcrt._getsystime -@ stub _gmtime32 -@ stub _gmtime32_s -@ stdcall _gmtime64() msvcrt._gmtime64 -@ stub _gmtime64_s -@ cdecl -version=0x600+ _localtime32() msvcrt._localtime32 -@ cdecl -version=0x600+ _localtime32_s() msvcrt._localtime32_s -@ cdecl _localtime64() msvcrt._localtime64 -@ cdecl -version=0x600+ _localtime64_s() msvcrt._localtime64_s -@ stub _mkgmtime32 -@ stdcall _mkgmtime64() msvcrt._mkgmtime64 -@ stub _mktime32 -@ stdcall _mktime64() msvcrt._mktime64 -@ stdcall _setsystime() msvcrt._setsystime -@ stdcall _strdate() msvcrt._strdate -@ stub _strdate_s -@ stub _strftime_l -@ stdcall _strtime() msvcrt._strtime -@ stub _strtime_s -@ stub _time32 -@ stdcall _time64() msvcrt._time64 -@ stub _timespec32_get -@ stub _timespec64_get -@ stdcall _tzset() msvcrt._tzset -@ stub _utime32 -@ stdcall _utime64() msvcrt._utime64 -@ stdcall _wasctime() msvcrt._wasctime -@ stub _wasctime_s -@ stub _wcsftime_l -@ stub _wctime32 -@ stub _wctime32_s -@ stdcall _wctime64() msvcrt._wctime64 -@ stub _wctime64_s -@ stdcall _wstrdate() msvcrt._wstrdate -@ stub _wstrdate_s -@ stdcall _wstrtime() msvcrt._wstrtime -@ stub _wstrtime_s -@ stub _wutime32 -@ stdcall _wutime64() msvcrt._wutime64 -@ stdcall asctime() msvcrt.asctime -@ stub asctime_s -@ stdcall clock() msvcrt.clock -@ stdcall strftime() msvcrt.strftime -@ stdcall wcsftime() msvcrt.wcsftime diff --git a/dll/apisets/api-ms-win-crt-utility-l1-1-0.spec b/dll/apisets/api-ms-win-crt-utility-l1-1-0.spec deleted file mode 100644 index b0e273e84a9..00000000000 --- a/dll/apisets/api-ms-win-crt-utility-l1-1-0.spec +++ /dev/null @@ -1,27 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall _lfind() msvcrt._lfind -@ stub _lfind_s -@ stdcall _lrotl() msvcrt._lrotl -@ stdcall _lrotr() msvcrt._lrotr -@ stdcall _lsearch() msvcrt._lsearch -@ stub _lsearch_s -@ stdcall _rotl() msvcrt._rotl -@ stdcall _rotr() msvcrt._rotr -@ stdcall _swab() msvcrt._swab -@ stdcall abs() msvcrt.abs -@ stdcall bsearch() msvcrt.bsearch -@ stub bsearch_s -@ stdcall div() msvcrt.div -@ stub imaxabs -@ stub imaxdiv -@ stdcall labs() msvcrt.labs -@ stdcall ldiv() msvcrt.ldiv -@ stub -ret64 llabs -@ stub lldiv -@ stdcall qsort() msvcrt.qsort -@ stub qsort_s -@ stdcall rand() msvcrt.rand -@ stub rand_s -@ stdcall srand() msvcrt.srand diff --git a/dll/apisets/api-ms-win-devices-config-l1-1-0.spec b/dll/apisets/api-ms-win-devices-config-l1-1-0.spec deleted file mode 100644 index cb2df2753cb..00000000000 --- a/dll/apisets/api-ms-win-devices-config-l1-1-0.spec +++ /dev/null @@ -1,41 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CM_Delete_Class_Key() setupapi.CM_Delete_Class_Key -@ stdcall CM_Delete_DevNode_Key() setupapi.CM_Delete_DevNode_Key -@ stub CM_Delete_Device_Interface_KeyW -@ stdcall CM_Disable_DevNode() setupapi.CM_Disable_DevNode -@ stdcall CM_Enable_DevNode() setupapi.CM_Enable_DevNode -@ stdcall CM_Get_Child() setupapi.CM_Get_Child -@ stub CM_Get_Class_PropertyW -@ stub CM_Get_Class_Property_Keys -@ stdcall CM_Get_Class_Registry_PropertyW() setupapi.CM_Get_Class_Registry_PropertyW -@ stdcall CM_Get_Depth() setupapi.CM_Get_Depth -@ stub CM_Get_DevNode_PropertyW -@ stub CM_Get_DevNode_Property_Keys -@ stdcall CM_Get_DevNode_Registry_PropertyW() setupapi.CM_Get_DevNode_Registry_PropertyW -@ stdcall CM_Get_DevNode_Status() setupapi.CM_Get_DevNode_Status -@ stdcall CM_Get_Device_IDW() setupapi.CM_Get_Device_IDW -@ stdcall CM_Get_Device_ID_ListW() setupapi.CM_Get_Device_ID_ListW -@ stdcall CM_Get_Device_ID_List_SizeW() setupapi.CM_Get_Device_ID_List_SizeW -@ stdcall CM_Get_Device_ID_Size() setupapi.CM_Get_Device_ID_Size -@ stdcall CM_Get_Device_Interface_ListW() setupapi.CM_Get_Device_Interface_ListW -@ stdcall CM_Get_Device_Interface_List_SizeW() setupapi.CM_Get_Device_Interface_List_SizeW -@ stub CM_Get_Device_Interface_PropertyW -@ stub CM_Get_Device_Interface_Property_KeysW -@ stdcall CM_Get_Parent() setupapi.CM_Get_Parent -@ stdcall CM_Get_Sibling() setupapi.CM_Get_Sibling -@ stdcall CM_Locate_DevNodeW() setupapi.CM_Locate_DevNodeW -@ stdcall CM_Open_Class_KeyW() setupapi.CM_Open_Class_KeyW -@ stdcall CM_Open_DevNode_Key() setupapi.CM_Open_DevNode_Key -@ stub CM_Open_Device_Interface_KeyW -@ stdcall CM_Query_And_Remove_SubTreeW() setupapi.CM_Query_And_Remove_SubTreeW -@ stub CM_Register_Notification -@ stub CM_Set_Class_PropertyW -@ stdcall CM_Set_Class_Registry_PropertyW() setupapi.CM_Set_Class_Registry_PropertyW -@ stub CM_Set_DevNode_PropertyW -@ stdcall CM_Set_DevNode_Registry_PropertyW() setupapi.CM_Set_DevNode_Registry_PropertyW -@ stub CM_Set_Device_Interface_PropertyW -@ stdcall CM_Setup_DevNode() setupapi.CM_Setup_DevNode -@ stdcall CM_Uninstall_DevNode() setupapi.CM_Uninstall_DevNode -@ stub CM_Unregister_Notification diff --git a/dll/apisets/api-ms-win-devices-config-l1-1-1.spec b/dll/apisets/api-ms-win-devices-config-l1-1-1.spec deleted file mode 100644 index 1e8ff743962..00000000000 --- a/dll/apisets/api-ms-win-devices-config-l1-1-1.spec +++ /dev/null @@ -1,42 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CM_Delete_Class_Key() setupapi.CM_Delete_Class_Key -@ stdcall CM_Delete_DevNode_Key() setupapi.CM_Delete_DevNode_Key -@ stub CM_Delete_Device_Interface_KeyW -@ stdcall CM_Disable_DevNode() setupapi.CM_Disable_DevNode -@ stdcall CM_Enable_DevNode() setupapi.CM_Enable_DevNode -@ stdcall CM_Get_Child() setupapi.CM_Get_Child -@ stub CM_Get_Class_PropertyW -@ stub CM_Get_Class_Property_Keys -@ stdcall CM_Get_Class_Registry_PropertyW() setupapi.CM_Get_Class_Registry_PropertyW -@ stdcall CM_Get_Depth() setupapi.CM_Get_Depth -@ stub CM_Get_DevNode_PropertyW -@ stub CM_Get_DevNode_Property_Keys -@ stdcall CM_Get_DevNode_Registry_PropertyW() setupapi.CM_Get_DevNode_Registry_PropertyW -@ stdcall CM_Get_DevNode_Status() setupapi.CM_Get_DevNode_Status -@ stdcall CM_Get_Device_IDW() setupapi.CM_Get_Device_IDW -@ stdcall CM_Get_Device_ID_ListW() setupapi.CM_Get_Device_ID_ListW -@ stdcall CM_Get_Device_ID_List_SizeW() setupapi.CM_Get_Device_ID_List_SizeW -@ stdcall CM_Get_Device_ID_Size() setupapi.CM_Get_Device_ID_Size -@ stdcall CM_Get_Device_Interface_ListW() setupapi.CM_Get_Device_Interface_ListW -@ stdcall CM_Get_Device_Interface_List_SizeW() setupapi.CM_Get_Device_Interface_List_SizeW -@ stub CM_Get_Device_Interface_PropertyW -@ stub CM_Get_Device_Interface_Property_KeysW -@ stdcall CM_Get_Parent() setupapi.CM_Get_Parent -@ stdcall CM_Get_Sibling() setupapi.CM_Get_Sibling -@ stdcall CM_Locate_DevNodeW() setupapi.CM_Locate_DevNodeW -@ stub CM_MapCrToWin32Err -@ stdcall CM_Open_Class_KeyW() setupapi.CM_Open_Class_KeyW -@ stdcall CM_Open_DevNode_Key() setupapi.CM_Open_DevNode_Key -@ stub CM_Open_Device_Interface_KeyW -@ stdcall CM_Query_And_Remove_SubTreeW() setupapi.CM_Query_And_Remove_SubTreeW -@ stub CM_Register_Notification -@ stub CM_Set_Class_PropertyW -@ stdcall CM_Set_Class_Registry_PropertyW() setupapi.CM_Set_Class_Registry_PropertyW -@ stub CM_Set_DevNode_PropertyW -@ stdcall CM_Set_DevNode_Registry_PropertyW() setupapi.CM_Set_DevNode_Registry_PropertyW -@ stub CM_Set_Device_Interface_PropertyW -@ stdcall CM_Setup_DevNode() setupapi.CM_Setup_DevNode -@ stdcall CM_Uninstall_DevNode() setupapi.CM_Uninstall_DevNode -@ stub CM_Unregister_Notification diff --git a/dll/apisets/api-ms-win-devices-query-l1-1-1.spec b/dll/apisets/api-ms-win-devices-query-l1-1-1.spec deleted file mode 100644 index d6fbfb7364c..00000000000 --- a/dll/apisets/api-ms-win-devices-query-l1-1-1.spec +++ /dev/null @@ -1,18 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub DevCloseObjectQuery -@ stub DevCreateObjectQuery -@ stub DevCreateObjectQueryEx -@ stub DevCreateObjectQueryFromId -@ stub DevCreateObjectQueryFromIdEx -@ stub DevCreateObjectQueryFromIds -@ stub DevCreateObjectQueryFromIdsEx -@ stub DevFindProperty -@ stub DevFreeObjectProperties -@ stub DevFreeObjects -@ stub DevGetObjectProperties -@ stub DevGetObjectPropertiesEx -@ stub DevGetObjects -@ stub DevGetObjectsEx -@ stub DevSetObjectProperties diff --git a/dll/apisets/api-ms-win-downlevel-advapi32-l1-1-0.spec b/dll/apisets/api-ms-win-downlevel-advapi32-l1-1-0.spec deleted file mode 100644 index 0d4e3432cea..00000000000 --- a/dll/apisets/api-ms-win-downlevel-advapi32-l1-1-0.spec +++ /dev/null @@ -1,148 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall AccessCheck() advapi32.AccessCheck -@ stdcall AccessCheckAndAuditAlarmW() advapi32.AccessCheckAndAuditAlarmW -@ stdcall AccessCheckByType() advapi32.AccessCheckByType -@ stdcall AccessCheckByTypeAndAuditAlarmW() advapi32.AccessCheckByTypeAndAuditAlarmW -@ stdcall AccessCheckByTypeResultList() advapi32.AccessCheckByTypeResultList -@ stdcall AccessCheckByTypeResultListAndAuditAlarmByHandleW() advapi32.AccessCheckByTypeResultListAndAuditAlarmByHandleW -@ stdcall AccessCheckByTypeResultListAndAuditAlarmW() advapi32.AccessCheckByTypeResultListAndAuditAlarmW -@ stdcall AddAccessAllowedAce() advapi32.AddAccessAllowedAce -@ stdcall AddAccessAllowedAceEx() advapi32.AddAccessAllowedAceEx -@ stdcall AddAccessAllowedObjectAce() advapi32.AddAccessAllowedObjectAce -@ stdcall AddAccessDeniedAce() advapi32.AddAccessDeniedAce -@ stdcall AddAccessDeniedAceEx() advapi32.AddAccessDeniedAceEx -@ stdcall AddAccessDeniedObjectAce() advapi32.AddAccessDeniedObjectAce -@ stdcall AddAce() advapi32.AddAce -@ stdcall AddAuditAccessAce() advapi32.AddAuditAccessAce -@ stdcall AddAuditAccessAceEx() advapi32.AddAuditAccessAceEx -@ stdcall AddAuditAccessObjectAce() advapi32.AddAuditAccessObjectAce -@ stub AddMandatoryAce -@ stdcall AdjustTokenGroups() advapi32.AdjustTokenGroups -@ stdcall AdjustTokenPrivileges() advapi32.AdjustTokenPrivileges -@ stdcall AllocateAndInitializeSid() advapi32.AllocateAndInitializeSid -@ stdcall AllocateLocallyUniqueId() advapi32.AllocateLocallyUniqueId -@ stdcall AreAllAccessesGranted() advapi32.AreAllAccessesGranted -@ stdcall AreAnyAccessesGranted() advapi32.AreAnyAccessesGranted -@ stdcall CheckTokenMembership() advapi32.CheckTokenMembership -@ stub ConvertToAutoInheritPrivateObjecSecurity -@ stdcall CopySid() advapi32.CopySid -@ stdcall CreatePrivateObjectSecurity() advapi32.CreatePrivateObjectSecurity -@ stdcall CreatePrivateObjectSecurityEx() advapi32.CreatePrivateObjectSecurityEx -@ stdcall CreatePrivateObjectSecurityWithMultipleInheritance() advapi32.CreatePrivateObjectSecurityWithMultipleInheritance -@ stdcall CreateProcessAsUserW() advapi32.CreateProcessAsUserW -@ stdcall CreateRestrictedToken() advapi32.CreateRestrictedToken -@ stdcall CreateWellKnownSid() advapi32.CreateWellKnownSid -@ stdcall DeleteAce() advapi32.DeleteAce -@ stdcall DestroyPrivateObjectSecurity() advapi32.DestroyPrivateObjectSecurity -@ stdcall DuplicateToken() advapi32.DuplicateToken -@ stdcall DuplicateTokenEx() advapi32.DuplicateTokenEx -@ stdcall EqualDomainSid() advapi32.EqualDomainSid -@ stdcall EqualPrefixSid() advapi32.EqualPrefixSid -@ stdcall EqualSid() advapi32.EqualSid -@ stub EventActivityIdControl -@ stub EventEnabled -@ stub EventProviderEnabled -@ stub EventRegister -@ stub EventUnregister -@ stub EventWrite -@ stub EventWriteString -@ stub EventWriteTransfer -@ stdcall FindFirstFreeAce() advapi32.FindFirstFreeAce -@ stdcall FreeSid() advapi32.FreeSid -@ stdcall GetAce() advapi32.GetAce -@ stdcall GetAclInformation() advapi32.GetAclInformation -@ stdcall GetFileSecurityW() advapi32.GetFileSecurityW -@ stdcall GetKernelObjectSecurity() advapi32.GetKernelObjectSecurity -@ stdcall GetLengthSid() advapi32.GetLengthSid -@ stdcall GetPrivateObjectSecurity() advapi32.GetPrivateObjectSecurity -@ stdcall GetSecurityDescriptorControl() advapi32.GetSecurityDescriptorControl -@ stdcall GetSecurityDescriptorDacl() advapi32.GetSecurityDescriptorDacl -@ stdcall GetSecurityDescriptorGroup() advapi32.GetSecurityDescriptorGroup -@ stdcall GetSecurityDescriptorLength() advapi32.GetSecurityDescriptorLength -@ stdcall GetSecurityDescriptorOwner() advapi32.GetSecurityDescriptorOwner -@ stdcall GetSecurityDescriptorRMControl() advapi32.GetSecurityDescriptorRMControl -@ stdcall GetSecurityDescriptorSacl() advapi32.GetSecurityDescriptorSacl -@ stdcall GetSidIdentifierAuthority() advapi32.GetSidIdentifierAuthority -@ stdcall GetSidLengthRequired() advapi32.GetSidLengthRequired -@ stdcall GetSidSubAuthority() advapi32.GetSidSubAuthority -@ stdcall GetSidSubAuthorityCount() advapi32.GetSidSubAuthorityCount -@ stdcall GetTokenInformation() advapi32.GetTokenInformation -@ stdcall GetTraceEnableFlags() advapi32.GetTraceEnableFlags -@ stdcall GetTraceEnableLevel() advapi32.GetTraceEnableLevel -@ stdcall GetTraceLoggerHandle() advapi32.GetTraceLoggerHandle -@ stdcall InitializeAcl() advapi32.InitializeAcl -@ stdcall InitializeSecurityDescriptor() advapi32.InitializeSecurityDescriptor -@ stdcall InitializeSid() advapi32.InitializeSid -@ stdcall IsTokenRestricted() advapi32.IsTokenRestricted -@ stdcall IsValidAcl() advapi32.IsValidAcl -@ stdcall IsValidSecurityDescriptor() advapi32.IsValidSecurityDescriptor -@ stdcall IsValidSid() advapi32.IsValidSid -@ stdcall MakeAbsoluteSD() advapi32.MakeAbsoluteSD -@ stdcall MakeSelfRelativeSD() advapi32.MakeSelfRelativeSD -@ stdcall OpenProcessToken() advapi32.OpenProcessToken -@ stdcall OpenThreadToken() advapi32.OpenThreadToken -@ stdcall PrivilegeCheck() advapi32.PrivilegeCheck -@ stdcall PrivilegedServiceAuditAlarmW() advapi32.PrivilegedServiceAuditAlarmW -@ stub QuerySecurityAccessMask -@ stdcall RegCloseKey() advapi32.RegCloseKey -@ stub RegCopyTreeW -@ stdcall RegCreateKeyExA() advapi32.RegCreateKeyExA -@ stdcall RegCreateKeyExW() advapi32.RegCreateKeyExW -@ stdcall RegDeleteKeyExA() advapi32.RegDeleteKeyExA -@ stdcall RegDeleteKeyExW() advapi32.RegDeleteKeyExW -@ stdcall RegDeleteTreeA() advapi32_vista.RegDeleteTreeA -@ stdcall RegDeleteTreeW() advapi32_vista.RegDeleteTreeW -@ stdcall RegDeleteValueA() advapi32.RegDeleteValueA -@ stdcall RegDeleteValueW() advapi32.RegDeleteValueW -@ stub RegDisablePredefinedCacheEx -@ stdcall RegEnumKeyExA() advapi32.RegEnumKeyExA -@ stdcall RegEnumKeyExW() advapi32.RegEnumKeyExW -@ stdcall RegEnumValueA() advapi32.RegEnumValueA -@ stdcall RegEnumValueW() advapi32.RegEnumValueW -@ stdcall RegFlushKey() advapi32.RegFlushKey -@ stdcall RegGetKeySecurity() advapi32.RegGetKeySecurity -@ stdcall RegGetValueA() advapi32.RegGetValueA -@ stdcall RegGetValueW() advapi32.RegGetValueW -@ stub RegLoadAppKeyA -@ stub RegLoadAppKeyW -@ stdcall RegLoadKeyA() advapi32.RegLoadKeyA -@ stdcall RegLoadKeyW() advapi32.RegLoadKeyW -@ stdcall -version=0x600+ RegLoadMUIStringA() advapi32.RegLoadMUIStringA -@ stdcall -version=0x600+ RegLoadMUIStringW() advapi32.RegLoadMUIStringW -@ stdcall RegNotifyChangeKeyValue() advapi32.RegNotifyChangeKeyValue -@ stdcall RegOpenCurrentUser() advapi32.RegOpenCurrentUser -@ stdcall RegOpenKeyExA() advapi32.RegOpenKeyExA -@ stdcall RegOpenKeyExW() advapi32.RegOpenKeyExW -@ stdcall RegOpenUserClassesRoot() advapi32.RegOpenUserClassesRoot -@ stdcall RegQueryInfoKeyA() advapi32.RegQueryInfoKeyA -@ stdcall RegQueryInfoKeyW() advapi32.RegQueryInfoKeyW -@ stdcall RegQueryValueExA() advapi32.RegQueryValueExA -@ stdcall RegQueryValueExW() advapi32.RegQueryValueExW -@ stdcall RegRestoreKeyA() advapi32.RegRestoreKeyA -@ stdcall RegRestoreKeyW() advapi32.RegRestoreKeyW -@ stdcall RegSaveKeyExA() advapi32.RegSaveKeyExA -@ stdcall RegSaveKeyExW() advapi32.RegSaveKeyExW -@ stdcall RegSetKeySecurity() advapi32.RegSetKeySecurity -@ stdcall RegSetValueExA() advapi32.RegSetValueExA -@ stdcall RegSetValueExW() advapi32.RegSetValueExW -@ stdcall RegUnLoadKeyA() advapi32.RegUnLoadKeyA -@ stdcall RegUnLoadKeyW() advapi32.RegUnLoadKeyW -@ stdcall RegisterTraceGuidsW() advapi32.RegisterTraceGuidsW -@ stdcall RevertToSelf() advapi32.RevertToSelf -@ stdcall SetAclInformation() advapi32.SetAclInformation -@ stdcall SetFileSecurityW() advapi32.SetFileSecurityW -@ stdcall SetKernelObjectSecurity() advapi32.SetKernelObjectSecurity -@ stub SetSecurityAccessMask -@ stdcall SetSecurityDescriptorControl() advapi32.SetSecurityDescriptorControl -@ stdcall SetSecurityDescriptorDacl() advapi32.SetSecurityDescriptorDacl -@ stdcall SetSecurityDescriptorGroup() advapi32.SetSecurityDescriptorGroup -@ stdcall SetSecurityDescriptorOwner() advapi32.SetSecurityDescriptorOwner -@ stdcall SetSecurityDescriptorRMControl() advapi32.SetSecurityDescriptorRMControl -@ stdcall SetSecurityDescriptorSacl() advapi32.SetSecurityDescriptorSacl -@ stdcall SetTokenInformation() advapi32.SetTokenInformation -@ stdcall TraceEvent() advapi32.TraceEvent -@ stdcall TraceMessage() advapi32.TraceMessage -@ stdcall TraceMessageVa() advapi32.TraceMessageVa -@ stdcall UnregisterTraceGuids() advapi32.UnregisterTraceGuids diff --git a/dll/apisets/api-ms-win-downlevel-advapi32-l2-1-0.spec b/dll/apisets/api-ms-win-downlevel-advapi32-l2-1-0.spec deleted file mode 100644 index 82a65f54406..00000000000 --- a/dll/apisets/api-ms-win-downlevel-advapi32-l2-1-0.spec +++ /dev/null @@ -1,17 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CloseServiceHandle() advapi32.CloseServiceHandle -@ stdcall ConvertSidToStringSidW() advapi32.ConvertSidToStringSidW -@ stdcall ConvertStringSecurityDescriptorToSecurityDescriptorW() advapi32.ConvertStringSecurityDescriptorToSecurityDescriptorW -@ stdcall ConvertStringSidToSidW() advapi32.ConvertStringSidToSidW -@ stdcall CredDeleteW() advapi32.CredDeleteW -@ stdcall CredEnumerateW() advapi32.CredEnumerateW -@ stdcall CredFree() advapi32.CredFree -@ stdcall CredReadDomainCredentialsW() advapi32.CredReadDomainCredentialsW -@ stdcall CredReadW() advapi32.CredReadW -@ stdcall CredWriteDomainCredentialsW() advapi32.CredWriteDomainCredentialsW -@ stdcall CredWriteW() advapi32.CredWriteW -@ stdcall OpenSCManagerW() advapi32.OpenSCManagerW -@ stdcall OpenServiceW() advapi32.OpenServiceW -@ stdcall QueryServiceConfigW() advapi32.QueryServiceConfigW diff --git a/dll/apisets/api-ms-win-downlevel-normaliz-l1-1-0.spec b/dll/apisets/api-ms-win-downlevel-normaliz-l1-1-0.spec deleted file mode 100644 index 1a8cba25447..00000000000 --- a/dll/apisets/api-ms-win-downlevel-normaliz-l1-1-0.spec +++ /dev/null @@ -1,5 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall -version=0x600+ IdnToAscii() kernel32.IdnToAscii -@ stdcall -version=0x600+ IdnToUnicode() kernel32.IdnToUnicode diff --git a/dll/apisets/api-ms-win-downlevel-ole32-l1-1-0.spec b/dll/apisets/api-ms-win-downlevel-ole32-l1-1-0.spec deleted file mode 100644 index 416035572f6..00000000000 --- a/dll/apisets/api-ms-win-downlevel-ole32-l1-1-0.spec +++ /dev/null @@ -1,51 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CLSIDFromProgID() ole32.CLSIDFromProgID -@ stdcall CLSIDFromString() ole32.CLSIDFromString -@ stdcall CoCopyProxy() ole32.CoCopyProxy -@ stdcall CoCreateFreeThreadedMarshaler() ole32.CoCreateFreeThreadedMarshaler -@ stdcall CoCreateGuid() ole32.CoCreateGuid -@ stdcall CoCreateInstance() ole32.CoCreateInstance -@ stdcall CoCreateInstanceEx() ole32.CoCreateInstanceEx -@ stdcall CoDisconnectObject() ole32.CoDisconnectObject -@ stdcall CoFreeUnusedLibraries() ole32.CoFreeUnusedLibraries -@ stdcall CoFreeUnusedLibrariesEx() ole32.CoFreeUnusedLibrariesEx -@ stub CoGetApartmentType -@ stdcall CoGetClassObject() ole32.CoGetClassObject -@ stdcall CoGetCurrentLogicalThreadId() ole32.CoGetCurrentLogicalThreadId -@ stdcall CoGetInterfaceAndReleaseStream() ole32.CoGetInterfaceAndReleaseStream -@ stdcall CoGetMalloc() ole32.CoGetMalloc -@ stdcall CoGetMarshalSizeMax() ole32.CoGetMarshalSizeMax -@ stdcall CoGetObjectContext() ole32.CoGetObjectContext -@ stdcall CoGetStdMarshalEx() ole32.CoGetStdMarshalEx -@ stdcall CoGetTreatAsClass() ole32.CoGetTreatAsClass -@ stdcall CoImpersonateClient() ole32.CoImpersonateClient -@ stdcall CoInitializeEx() ole32.CoInitializeEx -@ stdcall CoInitializeSecurity() ole32.CoInitializeSecurity -@ stdcall CoMarshalInterThreadInterfaceInStream() ole32.CoMarshalInterThreadInterfaceInStream -@ stdcall CoMarshalInterface() ole32.CoMarshalInterface -@ stdcall CoRegisterClassObject() ole32.CoRegisterClassObject -@ stdcall CoRegisterInitializeSpy() ole32.CoRegisterInitializeSpy -@ stdcall CoRegisterMessageFilter() ole32.CoRegisterMessageFilter -@ stdcall CoReleaseMarshalData() ole32.CoReleaseMarshalData -@ stdcall CoRevertToSelf() ole32.CoRevertToSelf -@ stdcall CoRevokeClassObject() ole32.CoRevokeClassObject -@ stdcall CoRevokeInitializeSpy() ole32.CoRevokeInitializeSpy -@ stdcall CoSetProxyBlanket() ole32.CoSetProxyBlanket -@ stdcall CoTaskMemAlloc() ole32.CoTaskMemAlloc -@ stdcall CoTaskMemFree() ole32.CoTaskMemFree -@ stdcall CoTaskMemRealloc() ole32.CoTaskMemRealloc -@ stdcall CoUninitialize() ole32.CoUninitialize -@ stdcall CoUnmarshalInterface() ole32.CoUnmarshalInterface -@ stdcall CoWaitForMultipleHandles() ole32.CoWaitForMultipleHandles -@ stdcall CreateStreamOnHGlobal() ole32.CreateStreamOnHGlobal -@ stdcall FreePropVariantArray() ole32.FreePropVariantArray -@ stdcall GetHGlobalFromStream() ole32.GetHGlobalFromStream -@ stdcall IIDFromString() ole32.IIDFromString -@ stdcall ProgIDFromCLSID() ole32.ProgIDFromCLSID -@ stdcall PropVariantClear() ole32.PropVariantClear -@ stdcall PropVariantCopy() ole32.PropVariantCopy -@ stdcall StringFromCLSID() ole32.StringFromCLSID -@ stdcall StringFromGUID2() ole32.StringFromGUID2 -@ stdcall StringFromIID() ole32.StringFromIID diff --git a/dll/apisets/api-ms-win-downlevel-shell32-l1-1-0.spec b/dll/apisets/api-ms-win-downlevel-shell32-l1-1-0.spec deleted file mode 100644 index 421e8836934..00000000000 --- a/dll/apisets/api-ms-win-downlevel-shell32-l1-1-0.spec +++ /dev/null @@ -1,6 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall -version=0xA00+ -arch=win32 CommandLineToArgvW() shell32.CommandLineToArgvW -@ stub -version=0xA00+ -arch=win32 GetCurrentProcessExplicitAppUserModelID -@ stub -version=0xA00+ -arch=win32 SetCurrentProcessExplicitAppUserModelID diff --git a/dll/apisets/api-ms-win-downlevel-shlwapi-l1-1-0.spec b/dll/apisets/api-ms-win-downlevel-shlwapi-l1-1-0.spec deleted file mode 100644 index 760ff890a31..00000000000 --- a/dll/apisets/api-ms-win-downlevel-shlwapi-l1-1-0.spec +++ /dev/null @@ -1,158 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall GetAcceptLanguagesW() shlwapi.GetAcceptLanguagesW -@ stdcall HashData() shlwapi.HashData -@ stdcall IsInternetESCEnabled() shlwapi.IsInternetESCEnabled -@ stdcall ParseURLW() shlwapi.ParseURLW -@ stdcall PathAddBackslashA() shlwapi.PathAddBackslashA -@ stdcall PathAddBackslashW() shlwapi.PathAddBackslashW -@ stdcall PathAddExtensionA() shlwapi.PathAddExtensionA -@ stdcall PathAddExtensionW() shlwapi.PathAddExtensionW -@ stdcall PathAppendA() shlwapi.PathAppendA -@ stdcall PathAppendW() shlwapi.PathAppendW -@ stdcall PathCanonicalizeA() shlwapi.PathCanonicalizeA -@ stdcall PathCanonicalizeW() shlwapi.PathCanonicalizeW -@ stdcall PathCommonPrefixA() shlwapi.PathCommonPrefixA -@ stdcall PathCommonPrefixW() shlwapi.PathCommonPrefixW -@ stub PathCreateFromUrlAlloc -@ stdcall PathCreateFromUrlW() shlwapi.PathCreateFromUrlW -@ stdcall PathFileExistsA() shlwapi.PathFileExistsA -@ stdcall PathFileExistsW() shlwapi.PathFileExistsW -@ stdcall PathFindExtensionA() shlwapi.PathFindExtensionA -@ stdcall PathFindExtensionW() shlwapi.PathFindExtensionW -@ stdcall PathFindFileNameA() shlwapi.PathFindFileNameA -@ stdcall PathFindFileNameW() shlwapi.PathFindFileNameW -@ stdcall PathFindNextComponentA() shlwapi.PathFindNextComponentA -@ stdcall PathFindNextComponentW() shlwapi.PathFindNextComponentW -@ stdcall PathGetArgsA() shlwapi.PathGetArgsA -@ stdcall PathGetArgsW() shlwapi.PathGetArgsW -@ stdcall PathGetDriveNumberA() shlwapi.PathGetDriveNumberA -@ stdcall PathGetDriveNumberW() shlwapi.PathGetDriveNumberW -@ stdcall PathIsFileSpecA() shlwapi.PathIsFileSpecA -@ stdcall PathIsFileSpecW() shlwapi.PathIsFileSpecW -@ stdcall PathIsLFNFileSpecA() shlwapi.PathIsLFNFileSpecA -@ stdcall PathIsLFNFileSpecW() shlwapi.PathIsLFNFileSpecW -@ stdcall PathIsPrefixA() shlwapi.PathIsPrefixA -@ stdcall PathIsPrefixW() shlwapi.PathIsPrefixW -@ stdcall PathIsRelativeA() shlwapi.PathIsRelativeA -@ stdcall PathIsRelativeW() shlwapi.PathIsRelativeW -@ stdcall PathIsRootA() shlwapi.PathIsRootA -@ stdcall PathIsRootW() shlwapi.PathIsRootW -@ stdcall PathIsSameRootA() shlwapi.PathIsSameRootA -@ stdcall PathIsSameRootW() shlwapi.PathIsSameRootW -@ stdcall PathIsUNCA() shlwapi.PathIsUNCA -@ stdcall PathIsUNCServerA() shlwapi.PathIsUNCServerA -@ stdcall PathIsUNCServerShareA() shlwapi.PathIsUNCServerShareA -@ stdcall PathIsUNCServerShareW() shlwapi.PathIsUNCServerShareW -@ stdcall PathIsUNCServerW() shlwapi.PathIsUNCServerW -@ stdcall PathIsUNCW() shlwapi.PathIsUNCW -@ stdcall PathIsURLW() shlwapi.PathIsURLW -@ stdcall PathParseIconLocationA() shlwapi.PathParseIconLocationA -@ stdcall PathParseIconLocationW() shlwapi.PathParseIconLocationW -@ stdcall PathRelativePathToA() shlwapi.PathRelativePathToA -@ stdcall PathRelativePathToW() shlwapi.PathRelativePathToW -@ stdcall PathRemoveBackslashA() shlwapi.PathRemoveBackslashA -@ stdcall PathRemoveBackslashW() shlwapi.PathRemoveBackslashW -@ stdcall PathRemoveBlanksA() shlwapi.PathRemoveBlanksA -@ stdcall PathRemoveBlanksW() shlwapi.PathRemoveBlanksW -@ stdcall PathRemoveExtensionA() shlwapi.PathRemoveExtensionA -@ stdcall PathRemoveExtensionW() shlwapi.PathRemoveExtensionW -@ stdcall PathRemoveFileSpecA() shlwapi.PathRemoveFileSpecA -@ stdcall PathRemoveFileSpecW() shlwapi.PathRemoveFileSpecW -@ stdcall PathRenameExtensionA() shlwapi.PathRenameExtensionA -@ stdcall PathRenameExtensionW() shlwapi.PathRenameExtensionW -@ stdcall PathSkipRootA() shlwapi.PathSkipRootA -@ stdcall PathSkipRootW() shlwapi.PathSkipRootW -@ stdcall PathStripPathA() shlwapi.PathStripPathA -@ stdcall PathStripPathW() shlwapi.PathStripPathW -@ stdcall PathStripToRootA() shlwapi.PathStripToRootA -@ stdcall PathStripToRootW() shlwapi.PathStripToRootW -@ stdcall PathUnquoteSpacesA() shlwapi.PathUnquoteSpacesA -@ stdcall PathUnquoteSpacesW() shlwapi.PathUnquoteSpacesW -@ stdcall QISearch() shlwapi.QISearch -@ stdcall SHLoadIndirectString() shlwapi.SHLoadIndirectString -@ stdcall SHRegCloseUSKey() shlwapi.SHRegCloseUSKey -@ stdcall SHRegDeleteUSValueA() shlwapi.SHRegDeleteUSValueA -@ stdcall SHRegDeleteUSValueW() shlwapi.SHRegDeleteUSValueW -@ stdcall SHRegEnumUSKeyA() shlwapi.SHRegEnumUSKeyA -@ stdcall SHRegEnumUSKeyW() shlwapi.SHRegEnumUSKeyW -@ stdcall SHRegGetBoolUSValueA() shlwapi.SHRegGetBoolUSValueA -@ stdcall SHRegGetBoolUSValueW() shlwapi.SHRegGetBoolUSValueW -@ stdcall SHRegGetUSValueA() shlwapi.SHRegGetUSValueA -@ stdcall SHRegGetUSValueW() shlwapi.SHRegGetUSValueW -@ stdcall SHRegOpenUSKeyA() shlwapi.SHRegOpenUSKeyA -@ stdcall SHRegOpenUSKeyW() shlwapi.SHRegOpenUSKeyW -@ stdcall SHRegQueryUSValueA() shlwapi.SHRegQueryUSValueA -@ stdcall SHRegQueryUSValueW() shlwapi.SHRegQueryUSValueW -@ stdcall SHRegSetUSValueA() shlwapi.SHRegSetUSValueA -@ stdcall SHRegSetUSValueW() shlwapi.SHRegSetUSValueW -@ stdcall StrCSpnA() shlwapi.StrCSpnA -@ stdcall StrCSpnIA() shlwapi.StrCSpnIA -@ stdcall StrCSpnIW() shlwapi.StrCSpnIW -@ stdcall StrCSpnW() shlwapi.StrCSpnW -@ stdcall StrCatBuffA() shlwapi.StrCatBuffA -@ stdcall StrCatBuffW() shlwapi.StrCatBuffW -@ stdcall StrCatChainW() shlwapi.StrCatChainW -@ stdcall StrChrA() shlwapi.StrChrA -@ stdcall StrChrIA() shlwapi.StrChrIA -@ stdcall StrChrIW() shlwapi.StrChrIW -@ stdcall StrChrNIW() shlwapi.StrChrNIW -@ stdcall StrChrNW() shlwapi.StrChrNW -@ stdcall StrChrW() shlwapi.StrChrW -@ stdcall StrCmpCA() shlwapi.StrCmpCA -@ stdcall StrCmpCW() shlwapi.StrCmpCW -@ stdcall StrCmpICA() shlwapi.StrCmpICA -@ stdcall StrCmpICW() shlwapi.StrCmpICW -@ stdcall StrCmpIW() shlwapi.StrCmpIW -@ stdcall StrCmpLogicalW() shlwapi.StrCmpLogicalW -@ stdcall StrCmpNA() shlwapi.StrCmpNA -@ stdcall StrCmpNCA() shlwapi.StrCmpNCA -@ stdcall StrCmpNCW() shlwapi.StrCmpNCW -@ stdcall StrCmpNIA() shlwapi.StrCmpNIA -@ stdcall StrCmpNICA() shlwapi.StrCmpNICA -@ stdcall StrCmpNICW() shlwapi.StrCmpNICW -@ stdcall StrCmpNIW() shlwapi.StrCmpNIW -@ stdcall StrCmpNW() shlwapi.StrCmpNW -@ stdcall StrCmpW() shlwapi.StrCmpW -@ stdcall StrCpyNW() shlwapi.StrCpyNW -@ stdcall StrDupA() shlwapi.StrDupA -@ stdcall StrDupW() shlwapi.StrDupW -@ stdcall StrIsIntlEqualA() shlwapi.StrIsIntlEqualA -@ stdcall StrIsIntlEqualW() shlwapi.StrIsIntlEqualW -@ stdcall StrPBrkA() shlwapi.StrPBrkA -@ stdcall StrPBrkW() shlwapi.StrPBrkW -@ stdcall StrRChrA() shlwapi.StrRChrA -@ stdcall StrRChrIA() shlwapi.StrRChrIA -@ stdcall StrRChrIW() shlwapi.StrRChrIW -@ stdcall StrRChrW() shlwapi.StrRChrW -@ stdcall StrRStrIA() shlwapi.StrRStrIA -@ stdcall StrRStrIW() shlwapi.StrRStrIW -@ stdcall StrSpnA() shlwapi.StrSpnA -@ stdcall StrSpnW() shlwapi.StrSpnW -@ stdcall StrStrA() shlwapi.StrStrA -@ stdcall StrStrIA() shlwapi.StrStrIA -@ stdcall StrStrIW() shlwapi.StrStrIW -@ stdcall StrStrNIW() shlwapi.StrStrNIW -@ stdcall StrStrNW() shlwapi.StrStrNW -@ stdcall StrStrW() shlwapi.StrStrW -@ stdcall StrToInt64ExA() shlwapi.StrToInt64ExA -@ stdcall StrToInt64ExW() shlwapi.StrToInt64ExW -@ stdcall StrToIntA() shlwapi.StrToIntA -@ stdcall StrToIntExA() shlwapi.StrToIntExA -@ stdcall StrToIntExW() shlwapi.StrToIntExW -@ stdcall StrToIntW() shlwapi.StrToIntW -@ stdcall StrTrimA() shlwapi.StrTrimA -@ stdcall StrTrimW() shlwapi.StrTrimW -@ stdcall UrlApplySchemeW() shlwapi.UrlApplySchemeW -@ stdcall UrlCanonicalizeW() shlwapi.UrlCanonicalizeW -@ stdcall UrlCombineA() shlwapi.UrlCombineA -@ stdcall UrlCombineW() shlwapi.UrlCombineW -@ stdcall UrlCreateFromPathW() shlwapi.UrlCreateFromPathW -@ stdcall UrlEscapeW() shlwapi.UrlEscapeW -@ stdcall UrlFixupW() shlwapi.UrlFixupW -@ stdcall UrlGetLocationW() shlwapi.UrlGetLocationW -@ stdcall UrlGetPartW() shlwapi.UrlGetPartW -@ stdcall UrlIsW() shlwapi.UrlIsW -@ stdcall UrlUnescapeA() shlwapi.UrlUnescapeA -@ stdcall UrlUnescapeW() shlwapi.UrlUnescapeW diff --git a/dll/apisets/api-ms-win-downlevel-shlwapi-l2-1-0.spec b/dll/apisets/api-ms-win-downlevel-shlwapi-l2-1-0.spec deleted file mode 100644 index fc59f4bfb28..00000000000 --- a/dll/apisets/api-ms-win-downlevel-shlwapi-l2-1-0.spec +++ /dev/null @@ -1,59 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub -version=0xA00+ -arch=win32 IStream_Copy -@ stdcall -version=0xA00+ -arch=win32 IStream_Read() shlwapi.IStream_Read -@ stub -version=0xA00+ -arch=win32 IStream_ReadStr -@ stdcall -version=0xA00+ -arch=win32 IStream_Reset() shlwapi.IStream_Reset -@ stdcall -version=0xA00+ -arch=win32 IStream_Size() shlwapi.IStream_Size -@ stdcall -version=0xA00+ -arch=win32 IStream_Write() shlwapi.IStream_Write -@ stub -version=0xA00+ -arch=win32 IStream_WriteStr -@ stdcall -version=0xA00+ -arch=win32 IUnknown_AtomicRelease() shlwapi.IUnknown_AtomicRelease -@ stdcall -version=0xA00+ -arch=win32 IUnknown_GetSite() shlwapi.IUnknown_GetSite -@ stdcall -version=0xA00+ -arch=win32 IUnknown_QueryService() shlwapi.IUnknown_QueryService -@ stdcall -version=0xA00+ -arch=win32 IUnknown_Set() shlwapi.IUnknown_Set -@ stdcall -version=0xA00+ -arch=win32 IUnknown_SetSite() shlwapi.IUnknown_SetSite -@ stdcall -version=0xA00+ -arch=win32 SHAnsiToAnsi() shlwapi.SHAnsiToAnsi -@ stdcall -version=0xA00+ -arch=win32 SHAnsiToUnicode() shlwapi.SHAnsiToUnicode -@ stdcall -version=0xA00+ -arch=win32 SHCopyKeyA() shlwapi.SHCopyKeyA -@ stdcall -version=0xA00+ -arch=win32 SHCopyKeyW() shlwapi.SHCopyKeyW -@ stdcall -version=0xA00+ -arch=win32 SHCreateMemStream() shlwapi.SHCreateMemStream -@ stdcall -version=0xA00+ -arch=win32 SHCreateStreamOnFileA() shlwapi.SHCreateStreamOnFileA -@ stdcall -version=0xA00+ -arch=win32 SHCreateStreamOnFileEx() shlwapi.SHCreateStreamOnFileEx -@ stdcall -version=0xA00+ -arch=win32 SHCreateStreamOnFileW() shlwapi.SHCreateStreamOnFileW -@ stdcall -version=0xA00+ -arch=win32 SHCreateThreadRef() shlwapi.SHCreateThreadRef -@ stdcall -version=0xA00+ -arch=win32 SHDeleteEmptyKeyA() shlwapi.SHDeleteEmptyKeyA -@ stdcall -version=0xA00+ -arch=win32 SHDeleteEmptyKeyW() shlwapi.SHDeleteEmptyKeyW -@ stdcall -version=0xA00+ -arch=win32 SHDeleteKeyA() shlwapi.SHDeleteKeyA -@ stdcall -version=0xA00+ -arch=win32 SHDeleteKeyW() shlwapi.SHDeleteKeyW -@ stdcall -version=0xA00+ -arch=win32 SHDeleteValueA() shlwapi.SHDeleteValueA -@ stdcall -version=0xA00+ -arch=win32 SHDeleteValueW() shlwapi.SHDeleteValueW -@ stdcall -version=0xA00+ -arch=win32 SHEnumKeyExA() shlwapi.SHEnumKeyExA -@ stdcall -version=0xA00+ -arch=win32 SHEnumKeyExW() shlwapi.SHEnumKeyExW -@ stdcall -version=0xA00+ -arch=win32 SHEnumValueA() shlwapi.SHEnumValueA -@ stdcall -version=0xA00+ -arch=win32 SHEnumValueW() shlwapi.SHEnumValueW -@ stdcall -version=0xA00+ -arch=win32 SHGetThreadRef() shlwapi.SHGetThreadRef -@ stdcall -version=0xA00+ -arch=win32 SHGetValueA() shlwapi.SHGetValueA -@ stdcall -version=0xA00+ -arch=win32 SHGetValueW() shlwapi.SHGetValueW -@ stdcall -version=0xA00+ -arch=win32 SHOpenRegStream2A() shlwapi.SHOpenRegStream2A -@ stdcall -version=0xA00+ -arch=win32 SHOpenRegStream2W() shlwapi.SHOpenRegStream2W -@ stdcall -version=0xA00+ -arch=win32 SHOpenRegStreamA() shlwapi.SHOpenRegStreamA -@ stdcall -version=0xA00+ -arch=win32 SHOpenRegStreamW() shlwapi.SHOpenRegStreamW -@ stdcall -version=0xA00+ -arch=win32 SHQueryInfoKeyA() shlwapi.SHQueryInfoKeyA -@ stdcall -version=0xA00+ -arch=win32 SHQueryInfoKeyW() shlwapi.SHQueryInfoKeyW -@ stdcall -version=0xA00+ -arch=win32 SHQueryValueExA() shlwapi.SHQueryValueExA -@ stdcall -version=0xA00+ -arch=win32 SHQueryValueExW() shlwapi.SHQueryValueExW -@ stdcall -version=0xA00+ -arch=win32 SHRegDuplicateHKey() shlwapi.SHRegDuplicateHKey -@ stdcall -version=0xA00+ -arch=win32 SHRegGetPathA() shlwapi.SHRegGetPathA -@ stdcall -version=0xA00+ -arch=win32 SHRegGetPathW() shlwapi.SHRegGetPathW -@ stdcall -version=0xA00+ -arch=win32 SHRegGetValueA() shlwapi.SHRegGetValueA -@ stdcall -version=0xA00+ -arch=win32 SHRegGetValueW() shlwapi.SHRegGetValueW -@ stdcall -version=0xA00+ -arch=win32 SHRegSetPathA() shlwapi.SHRegSetPathA -@ stdcall -version=0xA00+ -arch=win32 SHRegSetPathW() shlwapi.SHRegSetPathW -@ stdcall -version=0xA00+ -arch=win32 SHReleaseThreadRef() shlwapi.SHReleaseThreadRef -@ stdcall -version=0xA00+ -arch=win32 SHSetThreadRef() shlwapi.SHSetThreadRef -@ stdcall -version=0xA00+ -arch=win32 SHSetValueA() shlwapi.SHSetValueA -@ stdcall -version=0xA00+ -arch=win32 SHSetValueW() shlwapi.SHSetValueW -@ stdcall -version=0xA00+ -arch=win32 SHStrDupW() shlwapi.SHStrDupW -@ stdcall -version=0xA00+ -arch=win32 SHUnicodeToAnsi() shlwapi.SHUnicodeToAnsi -@ stdcall -version=0xA00+ -arch=win32 SHUnicodeToUnicode() shlwapi.SHUnicodeToUnicode diff --git a/dll/apisets/api-ms-win-downlevel-user32-l1-1-0.spec b/dll/apisets/api-ms-win-downlevel-user32-l1-1-0.spec deleted file mode 100644 index 3e32f5647a2..00000000000 --- a/dll/apisets/api-ms-win-downlevel-user32-l1-1-0.spec +++ /dev/null @@ -1,25 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CharLowerA() user32.CharLowerA -@ stdcall CharLowerBuffA() user32.CharLowerBuffA -@ stdcall CharLowerBuffW() user32.CharLowerBuffW -@ stdcall CharLowerW() user32.CharLowerW -@ stdcall CharNextA() user32.CharNextA -@ stdcall CharNextExA() user32.CharNextExA -@ stdcall CharNextW() user32.CharNextW -@ stdcall CharPrevA() user32.CharPrevA -@ stdcall CharPrevExA() user32.CharPrevExA -@ stdcall CharPrevW() user32.CharPrevW -@ stdcall CharUpperA() user32.CharUpperA -@ stdcall CharUpperBuffA() user32.CharUpperBuffA -@ stdcall CharUpperBuffW() user32.CharUpperBuffW -@ stdcall CharUpperW() user32.CharUpperW -@ stdcall IsCharAlphaA() user32.IsCharAlphaA -@ stdcall IsCharAlphaNumericA() user32.IsCharAlphaNumericA -@ stdcall IsCharAlphaNumericW() user32.IsCharAlphaNumericW -@ stdcall IsCharAlphaW() user32.IsCharAlphaW -@ stdcall IsCharLowerA() user32.IsCharLowerA -@ stdcall IsCharLowerW() user32.IsCharLowerW -@ stdcall IsCharUpperA() user32.IsCharUpperA -@ stdcall IsCharUpperW() user32.IsCharUpperW diff --git a/dll/apisets/api-ms-win-downlevel-version-l1-1-0.spec b/dll/apisets/api-ms-win-downlevel-version-l1-1-0.spec deleted file mode 100644 index 283076184ef..00000000000 --- a/dll/apisets/api-ms-win-downlevel-version-l1-1-0.spec +++ /dev/null @@ -1,9 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall GetFileVersionInfoExW() version.GetFileVersionInfoExW -@ stdcall GetFileVersionInfoSizeExW() version.GetFileVersionInfoSizeExW -@ stdcall VerFindFileA() version.VerFindFileA -@ stdcall VerFindFileW() version.VerFindFileW -@ stdcall VerQueryValueA() version.VerQueryValueA -@ stdcall VerQueryValueW() version.VerQueryValueW diff --git a/dll/apisets/api-ms-win-dx-d3dkmt-l1-1-0.spec b/dll/apisets/api-ms-win-dx-d3dkmt-l1-1-0.spec deleted file mode 100644 index a0ba046c0b6..00000000000 --- a/dll/apisets/api-ms-win-dx-d3dkmt-l1-1-0.spec +++ /dev/null @@ -1,100 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub D3DKMTAcquireKeyedMutex -@ stub D3DKMTAcquireKeyedMutex2 -@ stub D3DKMTCacheHybridQueryValue -@ stub D3DKMTCheckExclusiveOwnership -@ stub D3DKMTCheckMonitorPowerState -@ stub D3DKMTCheckOcclusion -@ stub D3DKMTCheckSharedResourceAccess -@ stub D3DKMTCheckVidPnExclusiveOwnership -@ stub D3DKMTCloseAdapter -@ stub D3DKMTConfigureSharedResource -@ stub D3DKMTCreateAllocation -@ stub D3DKMTCreateAllocation2 -@ stub D3DKMTCreateContext -@ stdcall D3DKMTCreateDCFromMemory() gdi32_vista.D3DKMTCreateDCFromMemory -@ stub D3DKMTCreateDevice -@ stub D3DKMTCreateKeyedMutex -@ stub D3DKMTCreateKeyedMutex2 -@ stub D3DKMTCreateOutputDupl -@ stub D3DKMTCreateOverlay -@ stub D3DKMTCreateSynchronizationObject -@ stub D3DKMTCreateSynchronizationObject2 -@ stub D3DKMTDestroyAllocation -@ stub D3DKMTDestroyContext -@ stdcall D3DKMTDestroyDCFromMemory() gdi32_vista.D3DKMTDestroyDCFromMemory -@ stub D3DKMTDestroyDevice -@ stub D3DKMTDestroyKeyedMutex -@ stub D3DKMTDestroyOutputDupl -@ stub D3DKMTDestroyOverlay -@ stub D3DKMTDestroySynchronizationObject -@ stub D3DKMTEscape -@ stub D3DKMTFlipOverlay -@ stub D3DKMTGetCachedHybridQueryValue -@ stub D3DKMTGetContextSchedulingPriority -@ stub D3DKMTGetDeviceState -@ stub D3DKMTGetDisplayModeList -@ stub D3DKMTGetMultisampleMethodList -@ stub D3DKMTGetOverlayState -@ stub D3DKMTGetPresentHistory -@ stub D3DKMTGetPresentQueueEvent -@ stub D3DKMTGetProcessSchedulingPriorityClass -@ stub D3DKMTGetRuntimeData -@ stub D3DKMTGetScanLine -@ stub D3DKMTGetSharedPrimaryHandle -@ stub D3DKMTGetSharedResourceAdapterLuid -@ stub D3DKMTInvalidateActiveVidPn -@ stub D3DKMTLock -@ stub D3DKMTOfferAllocations -@ stub D3DKMTOpenAdapterFromDeviceName -@ stub D3DKMTOpenAdapterFromGdiDisplayName -@ stub D3DKMTOpenAdapterFromHdc -@ stub D3DKMTOpenKeyedMutex -@ stub D3DKMTOpenKeyedMutex2 -@ stub D3DKMTOpenNtHandleFromName -@ stub D3DKMTOpenResource -@ stub D3DKMTOpenResource2 -@ stub D3DKMTOpenResourceFromNtHandle -@ stub D3DKMTOpenSyncObjectFromNtHandle -@ stub D3DKMTOpenSynchronizationObject -@ stub D3DKMTOutputDuplGetFrameInfo -@ stub D3DKMTOutputDuplGetMetaData -@ stub D3DKMTOutputDuplGetPointerShapeData -@ stub D3DKMTOutputDuplPresent -@ stub D3DKMTOutputDuplReleaseFrame -@ stub D3DKMTPollDisplayChildren -@ stub D3DKMTPresent -@ stub D3DKMTQueryAdapterInfo -@ stub D3DKMTQueryAllocationResidency -@ stub D3DKMTQueryRemoteVidPnSourceFromGdiDisplayName -@ stub D3DKMTQueryResourceInfo -@ stub D3DKMTQueryResourceInfoFromNtHandle -@ stub D3DKMTQueryStatistics -@ stub D3DKMTReclaimAllocations -@ stub D3DKMTReleaseKeyedMutex -@ stub D3DKMTReleaseKeyedMutex2 -@ stub D3DKMTReleaseProcessVidPnSourceOwners -@ stub D3DKMTRender -@ stub D3DKMTSetAllocationPriority -@ stub D3DKMTSetContextSchedulingPriority -@ stub D3DKMTSetDisplayMode -@ stub D3DKMTSetDisplayPrivateDriverFormat -@ stub D3DKMTSetGammaRamp -@ stub D3DKMTSetProcessSchedulingPriorityClass -@ stub D3DKMTSetQueuedLimit -@ stub D3DKMTSetStereoEnabled -@ stub D3DKMTSetVidPnSourceOwner -@ stub D3DKMTShareObjects -@ stub D3DKMTSharedPrimaryLockNotification -@ stub D3DKMTSharedPrimaryUnLockNotification -@ stub D3DKMTSignalSynchronizationObject -@ stub D3DKMTSignalSynchronizationObject2 -@ stub D3DKMTUnlock -@ stub D3DKMTUpdateOverlay -@ stub D3DKMTWaitForIdle -@ stub D3DKMTWaitForSynchronizationObject -@ stub D3DKMTWaitForSynchronizationObject2 -@ stub D3DKMTWaitForVerticalBlankEvent -@ stdcall GdiEntry13() gdi32.GdiEntry13 diff --git a/dll/apisets/api-ms-win-eventing-classicprovider-l1-1-0.spec b/dll/apisets/api-ms-win-eventing-classicprovider-l1-1-0.spec deleted file mode 100644 index 850a4be1db4..00000000000 --- a/dll/apisets/api-ms-win-eventing-classicprovider-l1-1-0.spec +++ /dev/null @@ -1,11 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall GetTraceEnableFlags() advapi32.GetTraceEnableFlags -@ stdcall GetTraceEnableLevel() advapi32.GetTraceEnableLevel -@ stdcall GetTraceLoggerHandle() advapi32.GetTraceLoggerHandle -@ stdcall RegisterTraceGuidsW() advapi32.RegisterTraceGuidsW -@ stdcall TraceEvent() advapi32.TraceEvent -@ stdcall TraceMessage() advapi32.TraceMessage -@ stdcall TraceMessageVa() advapi32.TraceMessageVa -@ stdcall UnregisterTraceGuids() advapi32.UnregisterTraceGuids diff --git a/dll/apisets/api-ms-win-eventing-consumer-l1-1-0.spec b/dll/apisets/api-ms-win-eventing-consumer-l1-1-0.spec deleted file mode 100644 index fa75342e67f..00000000000 --- a/dll/apisets/api-ms-win-eventing-consumer-l1-1-0.spec +++ /dev/null @@ -1,6 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CloseTrace() advapi32.CloseTrace -@ stdcall OpenTraceW() advapi32.OpenTraceW -@ stdcall ProcessTrace() advapi32.ProcessTrace diff --git a/dll/apisets/api-ms-win-eventing-controller-l1-1-0.spec b/dll/apisets/api-ms-win-eventing-controller-l1-1-0.spec deleted file mode 100644 index c05ceb6de36..00000000000 --- a/dll/apisets/api-ms-win-eventing-controller-l1-1-0.spec +++ /dev/null @@ -1,14 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall ControlTraceW() advapi32.ControlTraceW -@ stub EnableTraceEx2 -@ stub EnumerateTraceGuidsEx -@ stub EventAccessControl -@ stub EventAccessQuery -@ stub EventAccessRemove -@ stdcall QueryAllTracesW() advapi32.QueryAllTracesW -@ stdcall StartTraceW() advapi32.StartTraceW -@ stdcall StopTraceW() advapi32.StopTraceW -@ stub TraceQueryInformation -@ stub TraceSetInformation diff --git a/dll/apisets/api-ms-win-eventing-legacy-l1-1-0.spec b/dll/apisets/api-ms-win-eventing-legacy-l1-1-0.spec deleted file mode 100644 index c010b328bfb..00000000000 --- a/dll/apisets/api-ms-win-eventing-legacy-l1-1-0.spec +++ /dev/null @@ -1,17 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall ControlTraceA() advapi32.ControlTraceA -@ stdcall EnableTrace() advapi32.EnableTrace -@ stub EnableTraceEx -@ stdcall EnumerateTraceGuids() advapi32.EnumerateTraceGuids -@ stdcall FlushTraceA() advapi32.FlushTraceA -@ stdcall FlushTraceW() advapi32.FlushTraceW -@ stdcall OpenTraceA() advapi32.OpenTraceA -@ stdcall QueryAllTracesA() advapi32.QueryAllTracesA -@ stdcall QueryTraceA() advapi32.QueryTraceA -@ stdcall QueryTraceW() advapi32.QueryTraceW -@ stdcall StartTraceA() advapi32.StartTraceA -@ stdcall StopTraceA() advapi32.StopTraceA -@ stdcall UpdateTraceA() advapi32.UpdateTraceA -@ stdcall UpdateTraceW() advapi32.UpdateTraceW diff --git a/dll/apisets/api-ms-win-eventing-provider-l1-1-0.spec b/dll/apisets/api-ms-win-eventing-provider-l1-1-0.spec deleted file mode 100644 index 8f19644b9d5..00000000000 --- a/dll/apisets/api-ms-win-eventing-provider-l1-1-0.spec +++ /dev/null @@ -1,13 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub EventActivityIdControl -@ stub EventEnabled -@ stub EventProviderEnabled -@ stub EventRegister -@ stub EventSetInformation -@ stub EventUnregister -@ stub EventWrite -@ stub EventWriteEx -@ stub EventWriteString -@ stub EventWriteTransfer diff --git a/dll/apisets/api-ms-win-eventlog-legacy-l1-1-0.spec b/dll/apisets/api-ms-win-eventlog-legacy-l1-1-0.spec deleted file mode 100644 index 52eb6c24f96..00000000000 --- a/dll/apisets/api-ms-win-eventlog-legacy-l1-1-0.spec +++ /dev/null @@ -1,9 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall DeregisterEventSource() advapi32.DeregisterEventSource -@ stdcall GetEventLogInformation() advapi32.GetEventLogInformation -@ stdcall RegisterEventSourceA() advapi32.RegisterEventSourceA -@ stdcall RegisterEventSourceW() advapi32.RegisterEventSourceW -@ stdcall ReportEventA() advapi32.ReportEventA -@ stdcall ReportEventW() advapi32.ReportEventW diff --git a/dll/apisets/api-ms-win-gdi-dpiinfo-l1-1-0.spec b/dll/apisets/api-ms-win-gdi-dpiinfo-l1-1-0.spec deleted file mode 100644 index d7c441bcc9f..00000000000 --- a/dll/apisets/api-ms-win-gdi-dpiinfo-l1-1-0.spec +++ /dev/null @@ -1,4 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub GetCurrentDpiInfo diff --git a/dll/apisets/api-ms-win-mm-joystick-l1-1-0.spec b/dll/apisets/api-ms-win-mm-joystick-l1-1-0.spec deleted file mode 100644 index c4cbb15c9e2..00000000000 --- a/dll/apisets/api-ms-win-mm-joystick-l1-1-0.spec +++ /dev/null @@ -1,13 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall joyConfigChanged() winmm.joyConfigChanged -@ stdcall joyGetDevCapsA() winmm.joyGetDevCapsA -@ stdcall joyGetDevCapsW() winmm.joyGetDevCapsW -@ stdcall joyGetNumDevs() winmm.joyGetNumDevs -@ stdcall joyGetPos() winmm.joyGetPos -@ stdcall joyGetPosEx() winmm.joyGetPosEx -@ stdcall joyGetThreshold() winmm.joyGetThreshold -@ stdcall joyReleaseCapture() winmm.joyReleaseCapture -@ stdcall joySetCapture() winmm.joySetCapture -@ stdcall joySetThreshold() winmm.joySetThreshold diff --git a/dll/apisets/api-ms-win-mm-misc-l1-1-1.spec b/dll/apisets/api-ms-win-mm-misc-l1-1-1.spec deleted file mode 100644 index d7994a74274..00000000000 --- a/dll/apisets/api-ms-win-mm-misc-l1-1-1.spec +++ /dev/null @@ -1,33 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CloseDriver() winmm.CloseDriver -@ stdcall DefDriverProc() winmm.DefDriverProc -@ stdcall DriverCallback() winmm.DriverCallback -@ stdcall DrvGetModuleHandle() winmm.DrvGetModuleHandle -@ stdcall GetDriverModuleHandle() winmm.GetDriverModuleHandle -@ stdcall OpenDriver() winmm.OpenDriver -@ stdcall SendDriverMessage() winmm.SendDriverMessage -@ stub mmDrvInstall -@ stdcall mmioAdvance() winmm.mmioAdvance -@ stdcall mmioAscend() winmm.mmioAscend -@ stdcall mmioClose() winmm.mmioClose -@ stdcall mmioCreateChunk() winmm.mmioCreateChunk -@ stdcall mmioDescend() winmm.mmioDescend -@ stdcall mmioFlush() winmm.mmioFlush -@ stdcall mmioGetInfo() winmm.mmioGetInfo -@ stdcall mmioInstallIOProcA() winmm.mmioInstallIOProcA -@ stdcall mmioInstallIOProcW() winmm.mmioInstallIOProcW -@ stdcall mmioOpenA() winmm.mmioOpenA -@ stdcall mmioOpenW() winmm.mmioOpenW -@ stdcall mmioRead() winmm.mmioRead -@ stdcall mmioRenameA() winmm.mmioRenameA -@ stdcall mmioRenameW() winmm.mmioRenameW -@ stdcall mmioSeek() winmm.mmioSeek -@ stdcall mmioSendMessage() winmm.mmioSendMessage -@ stdcall mmioSetBuffer() winmm.mmioSetBuffer -@ stdcall mmioSetInfo() winmm.mmioSetInfo -@ stdcall mmioStringToFOURCCA() winmm.mmioStringToFOURCCA -@ stdcall mmioStringToFOURCCW() winmm.mmioStringToFOURCCW -@ stdcall mmioWrite() winmm.mmioWrite -@ stub sndOpenSound diff --git a/dll/apisets/api-ms-win-mm-mme-l1-1-0.spec b/dll/apisets/api-ms-win-mm-mme-l1-1-0.spec deleted file mode 100644 index a1452aa4919..00000000000 --- a/dll/apisets/api-ms-win-mm-mme-l1-1-0.spec +++ /dev/null @@ -1,105 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall auxGetDevCapsA() winmm.auxGetDevCapsA -@ stdcall auxGetDevCapsW() winmm.auxGetDevCapsW -@ stdcall auxGetNumDevs() winmm.auxGetNumDevs -@ stdcall auxGetVolume() winmm.auxGetVolume -@ stdcall auxOutMessage() winmm.auxOutMessage -@ stdcall auxSetVolume() winmm.auxSetVolume -@ stdcall midiConnect() winmm.midiConnect -@ stdcall midiDisconnect() winmm.midiDisconnect -@ stdcall midiInAddBuffer() winmm.midiInAddBuffer -@ stdcall midiInClose() winmm.midiInClose -@ stdcall midiInGetDevCapsA() winmm.midiInGetDevCapsA -@ stdcall midiInGetDevCapsW() winmm.midiInGetDevCapsW -@ stdcall midiInGetErrorTextA() winmm.midiInGetErrorTextA -@ stdcall midiInGetErrorTextW() winmm.midiInGetErrorTextW -@ stdcall midiInGetID() winmm.midiInGetID -@ stdcall midiInGetNumDevs() winmm.midiInGetNumDevs -@ stdcall midiInMessage() winmm.midiInMessage -@ stdcall midiInOpen() winmm.midiInOpen -@ stdcall midiInPrepareHeader() winmm.midiInPrepareHeader -@ stdcall midiInReset() winmm.midiInReset -@ stdcall midiInStart() winmm.midiInStart -@ stdcall midiInStop() winmm.midiInStop -@ stdcall midiInUnprepareHeader() winmm.midiInUnprepareHeader -@ stdcall midiOutCacheDrumPatches() winmm.midiOutCacheDrumPatches -@ stdcall midiOutCachePatches() winmm.midiOutCachePatches -@ stdcall midiOutClose() winmm.midiOutClose -@ stdcall midiOutGetDevCapsA() winmm.midiOutGetDevCapsA -@ stdcall midiOutGetDevCapsW() winmm.midiOutGetDevCapsW -@ stdcall midiOutGetErrorTextA() winmm.midiOutGetErrorTextA -@ stdcall midiOutGetErrorTextW() winmm.midiOutGetErrorTextW -@ stdcall midiOutGetID() winmm.midiOutGetID -@ stdcall midiOutGetNumDevs() winmm.midiOutGetNumDevs -@ stdcall midiOutGetVolume() winmm.midiOutGetVolume -@ stdcall midiOutLongMsg() winmm.midiOutLongMsg -@ stdcall midiOutMessage() winmm.midiOutMessage -@ stdcall midiOutOpen() winmm.midiOutOpen -@ stdcall midiOutPrepareHeader() winmm.midiOutPrepareHeader -@ stdcall midiOutReset() winmm.midiOutReset -@ stdcall midiOutSetVolume() winmm.midiOutSetVolume -@ stdcall midiOutShortMsg() winmm.midiOutShortMsg -@ stdcall midiOutUnprepareHeader() winmm.midiOutUnprepareHeader -@ stdcall midiStreamClose() winmm.midiStreamClose -@ stdcall midiStreamOpen() winmm.midiStreamOpen -@ stdcall midiStreamOut() winmm.midiStreamOut -@ stdcall midiStreamPause() winmm.midiStreamPause -@ stdcall midiStreamPosition() winmm.midiStreamPosition -@ stdcall midiStreamProperty() winmm.midiStreamProperty -@ stdcall midiStreamRestart() winmm.midiStreamRestart -@ stdcall midiStreamStop() winmm.midiStreamStop -@ stdcall mixerClose() winmm.mixerClose -@ stdcall mixerGetControlDetailsA() winmm.mixerGetControlDetailsA -@ stdcall mixerGetControlDetailsW() winmm.mixerGetControlDetailsW -@ stdcall mixerGetDevCapsA() winmm.mixerGetDevCapsA -@ stdcall mixerGetDevCapsW() winmm.mixerGetDevCapsW -@ stdcall mixerGetID() winmm.mixerGetID -@ stdcall mixerGetLineControlsA() winmm.mixerGetLineControlsA -@ stdcall mixerGetLineControlsW() winmm.mixerGetLineControlsW -@ stdcall mixerGetLineInfoA() winmm.mixerGetLineInfoA -@ stdcall mixerGetLineInfoW() winmm.mixerGetLineInfoW -@ stdcall mixerGetNumDevs() winmm.mixerGetNumDevs -@ stdcall mixerMessage() winmm.mixerMessage -@ stdcall mixerOpen() winmm.mixerOpen -@ stdcall mixerSetControlDetails() winmm.mixerSetControlDetails -@ stdcall waveInAddBuffer() winmm.waveInAddBuffer -@ stdcall waveInClose() winmm.waveInClose -@ stdcall waveInGetDevCapsA() winmm.waveInGetDevCapsA -@ stdcall waveInGetDevCapsW() winmm.waveInGetDevCapsW -@ stdcall waveInGetErrorTextA() winmm.waveInGetErrorTextA -@ stdcall waveInGetErrorTextW() winmm.waveInGetErrorTextW -@ stdcall waveInGetID() winmm.waveInGetID -@ stdcall waveInGetNumDevs() winmm.waveInGetNumDevs -@ stdcall waveInGetPosition() winmm.waveInGetPosition -@ stdcall waveInMessage() winmm.waveInMessage -@ stdcall waveInOpen() winmm.waveInOpen -@ stdcall waveInPrepareHeader() winmm.waveInPrepareHeader -@ stdcall waveInReset() winmm.waveInReset -@ stdcall waveInStart() winmm.waveInStart -@ stdcall waveInStop() winmm.waveInStop -@ stdcall waveInUnprepareHeader() winmm.waveInUnprepareHeader -@ stdcall waveOutBreakLoop() winmm.waveOutBreakLoop -@ stdcall waveOutClose() winmm.waveOutClose -@ stdcall waveOutGetDevCapsA() winmm.waveOutGetDevCapsA -@ stdcall waveOutGetDevCapsW() winmm.waveOutGetDevCapsW -@ stdcall waveOutGetErrorTextA() winmm.waveOutGetErrorTextA -@ stdcall waveOutGetErrorTextW() winmm.waveOutGetErrorTextW -@ stdcall waveOutGetID() winmm.waveOutGetID -@ stdcall waveOutGetNumDevs() winmm.waveOutGetNumDevs -@ stdcall waveOutGetPitch() winmm.waveOutGetPitch -@ stdcall waveOutGetPlaybackRate() winmm.waveOutGetPlaybackRate -@ stdcall waveOutGetPosition() winmm.waveOutGetPosition -@ stdcall waveOutGetVolume() winmm.waveOutGetVolume -@ stdcall waveOutMessage() winmm.waveOutMessage -@ stdcall waveOutOpen() winmm.waveOutOpen -@ stdcall waveOutPause() winmm.waveOutPause -@ stdcall waveOutPrepareHeader() winmm.waveOutPrepareHeader -@ stdcall waveOutReset() winmm.waveOutReset -@ stdcall waveOutRestart() winmm.waveOutRestart -@ stdcall waveOutSetPitch() winmm.waveOutSetPitch -@ stdcall waveOutSetPlaybackRate() winmm.waveOutSetPlaybackRate -@ stdcall waveOutSetVolume() winmm.waveOutSetVolume -@ stdcall waveOutUnprepareHeader() winmm.waveOutUnprepareHeader -@ stdcall waveOutWrite() winmm.waveOutWrite diff --git a/dll/apisets/api-ms-win-mm-time-l1-1-0.spec b/dll/apisets/api-ms-win-mm-time-l1-1-0.spec deleted file mode 100644 index 542cb875ea9..00000000000 --- a/dll/apisets/api-ms-win-mm-time-l1-1-0.spec +++ /dev/null @@ -1,8 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall timeBeginPeriod() winmm.timeBeginPeriod -@ stdcall timeEndPeriod() winmm.timeEndPeriod -@ stdcall timeGetDevCaps() winmm.timeGetDevCaps -@ stdcall timeGetSystemTime() winmm.timeGetSystemTime -@ stdcall timeGetTime() winmm.timeGetTime diff --git a/dll/apisets/api-ms-win-ntuser-dc-access-l1-1-0.spec b/dll/apisets/api-ms-win-ntuser-dc-access-l1-1-0.spec deleted file mode 100644 index 532365c396b..00000000000 --- a/dll/apisets/api-ms-win-ntuser-dc-access-l1-1-0.spec +++ /dev/null @@ -1,5 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall GetDC() user32.GetDC -@ stdcall ReleaseDC() user32.ReleaseDC diff --git a/dll/apisets/api-ms-win-ntuser-rectangle-l1-1-0.spec b/dll/apisets/api-ms-win-ntuser-rectangle-l1-1-0.spec deleted file mode 100644 index 447ff67ec7b..00000000000 --- a/dll/apisets/api-ms-win-ntuser-rectangle-l1-1-0.spec +++ /dev/null @@ -1,14 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CopyRect() user32.CopyRect -@ stdcall EqualRect() user32.EqualRect -@ stdcall InflateRect() user32.InflateRect -@ stdcall IntersectRect() user32.IntersectRect -@ stdcall IsRectEmpty() user32.IsRectEmpty -@ stdcall OffsetRect() user32.OffsetRect -@ stdcall PtInRect() user32.PtInRect -@ stdcall SetRect() user32.SetRect -@ stdcall SetRectEmpty() user32.SetRectEmpty -@ stdcall SubtractRect() user32.SubtractRect -@ stdcall UnionRect() user32.UnionRect diff --git a/dll/apisets/api-ms-win-ntuser-sysparams-l1-1-0.spec b/dll/apisets/api-ms-win-ntuser-sysparams-l1-1-0.spec deleted file mode 100644 index a8ec1273d99..00000000000 --- a/dll/apisets/api-ms-win-ntuser-sysparams-l1-1-0.spec +++ /dev/null @@ -1,15 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall ChangeDisplaySettingsExW() user32.ChangeDisplaySettingsExW -@ stub DisplayConfigGetDeviceInfo -@ stub DisplayConfigSetDeviceInfo -@ stdcall EnumDisplayDevicesW() user32.EnumDisplayDevicesW -@ stdcall EnumDisplayMonitors() user32.EnumDisplayMonitors -@ stdcall EnumDisplaySettingsExW() user32.EnumDisplaySettingsExW -@ stdcall EnumDisplaySettingsW() user32.EnumDisplaySettingsW -@ stub GetDisplayConfigBufferSizes -@ stdcall GetMonitorInfoW() user32.GetMonitorInfoW -@ stdcall GetSystemMetrics() user32.GetSystemMetrics -@ stub QueryDisplayConfig -@ stdcall SystemParametersInfoW() user32.SystemParametersInfoW diff --git a/dll/apisets/api-ms-win-perf-legacy-l1-1-0.spec b/dll/apisets/api-ms-win-perf-legacy-l1-1-0.spec deleted file mode 100644 index 83482c50008..00000000000 --- a/dll/apisets/api-ms-win-perf-legacy-l1-1-0.spec +++ /dev/null @@ -1,12 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub PerfAddCounters -@ stub PerfCloseQueryHandle -@ stub PerfDeleteCounters -@ stub PerfEnumerateCounterSet -@ stub PerfEnumerateCounterSetInstances -@ stub PerfOpenQueryHandle -@ stub PerfQueryCounterData -@ stub PerfQueryCounterInfo -@ stub PerfQueryCounterSetRegistrationInfo diff --git a/dll/apisets/api-ms-win-power-base-l1-1-0.spec b/dll/apisets/api-ms-win-power-base-l1-1-0.spec deleted file mode 100644 index 558e9b36221..00000000000 --- a/dll/apisets/api-ms-win-power-base-l1-1-0.spec +++ /dev/null @@ -1,8 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CallNtPowerInformation() powrprof.CallNtPowerInformation -@ stdcall GetPwrCapabilities() powrprof.GetPwrCapabilities -@ stub PowerDeterminePlatformRoleEx -@ stub PowerRegisterSuspendResumeNotification -@ stub PowerUnregisterSuspendResumeNotification diff --git a/dll/apisets/api-ms-win-power-setting-l1-1-0.spec b/dll/apisets/api-ms-win-power-setting-l1-1-0.spec deleted file mode 100644 index 1e01957418b..00000000000 --- a/dll/apisets/api-ms-win-power-setting-l1-1-0.spec +++ /dev/null @@ -1,11 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall PowerGetActiveScheme() powrprof.PowerGetActiveScheme -@ stub PowerReadACValue -@ stdcall PowerReadDCValue() powrprof.PowerReadDCValue -@ stub PowerSetActiveScheme -@ stub PowerSettingRegisterNotification -@ stub PowerSettingUnregisterNotification -@ stub PowerWriteACValueIndex -@ stub PowerWriteDCValueIndex diff --git a/dll/apisets/api-ms-win-rtcore-ntuser-draw-l1-1-0.spec b/dll/apisets/api-ms-win-rtcore-ntuser-draw-l1-1-0.spec deleted file mode 100644 index 4464e450568..00000000000 --- a/dll/apisets/api-ms-win-rtcore-ntuser-draw-l1-1-0.spec +++ /dev/null @@ -1,4 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall RedrawWindow() user32.RedrawWindow diff --git a/dll/apisets/api-ms-win-rtcore-ntuser-private-l1-1-0.spec b/dll/apisets/api-ms-win-rtcore-ntuser-private-l1-1-0.spec deleted file mode 100644 index 496bf5b3ea8..00000000000 --- a/dll/apisets/api-ms-win-rtcore-ntuser-private-l1-1-0.spec +++ /dev/null @@ -1,12 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub CreateDCompositionHwndTarget -@ stub CreateWindowInBand -@ stub DestroyDCompositionHwndTarget -@ stdcall GetTaskmanWindow() user32.GetTaskmanWindow -@ stub GetWindowBand -@ stdcall IsWindowInDestroy() user32.IsWindowInDestroy -@ stub RegisterSessionPort -@ stdcall SetTaskmanWindow() user32.SetTaskmanWindow -@ stub UnregisterSessionPort diff --git a/dll/apisets/api-ms-win-rtcore-ntuser-private-l1-1-4.spec b/dll/apisets/api-ms-win-rtcore-ntuser-private-l1-1-4.spec deleted file mode 100644 index cc92e1db8a1..00000000000 --- a/dll/apisets/api-ms-win-rtcore-ntuser-private-l1-1-4.spec +++ /dev/null @@ -1,4 +0,0 @@ - -# This file is autogenerated by update.py - -2545 stub -noname Ordinal2545 diff --git a/dll/apisets/api-ms-win-rtcore-ntuser-window-l1-1-0.spec b/dll/apisets/api-ms-win-rtcore-ntuser-window-l1-1-0.spec deleted file mode 100644 index 16e4b186011..00000000000 --- a/dll/apisets/api-ms-win-rtcore-ntuser-window-l1-1-0.spec +++ /dev/null @@ -1,84 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall AllowSetForegroundWindow() user32.AllowSetForegroundWindow -@ stdcall BeginDeferWindowPos() user32.BeginDeferWindowPos -@ stdcall CallWindowProcW() user32.CallWindowProcW -@ stdcall ChildWindowFromPoint() user32.ChildWindowFromPoint -@ stdcall ChildWindowFromPointEx() user32.ChildWindowFromPointEx -@ stdcall ClientToScreen() user32.ClientToScreen -@ stdcall CreateWindowExW() user32.CreateWindowExW -@ stdcall DeferWindowPos() user32.DeferWindowPos -@ stdcall DefWindowProcW() user32.DefWindowProcW -@ stdcall DestroyWindow() user32.DestroyWindow -@ stdcall DispatchMessageW() user32.DispatchMessageW -@ stdcall EnableWindow() user32.EnableWindow -@ stdcall EndDeferWindowPos() user32.EndDeferWindowPos -@ stdcall EnumChildWindows() user32.EnumChildWindows -@ stdcall EnumPropsExW() user32.EnumPropsExW -@ stdcall EnumPropsW() user32.EnumPropsW -@ stdcall EnumWindows() user32.EnumWindows -@ stdcall FindWindowExW() user32.FindWindowExW -@ stdcall FindWindowW() user32.FindWindowW -@ stdcall GetActiveWindow() user32.GetActiveWindow -@ stdcall GetAncestor() user32.GetAncestor -@ stdcall GetClassInfoExW() user32.GetClassInfoExW -@ stdcall GetClassInfoW() user32.GetClassInfoW -@ stdcall GetClassNameW() user32.GetClassNameW -@ stdcall GetClientRect() user32.GetClientRect -@ stdcall GetCursorPos() user32.GetCursorPos -@ stdcall GetDesktopWindow() user32.GetDesktopWindow -@ stdcall GetFocus() user32.GetFocus -@ stdcall GetForegroundWindow() user32.GetForegroundWindow -@ stdcall GetMessageExtraInfo() user32.GetMessageExtraInfo -@ stdcall GetMessagePos() user32.GetMessagePos -@ stdcall GetMessageTime() user32.GetMessageTime -@ stdcall GetMessageW() user32.GetMessageW -@ stdcall GetParent() user32.GetParent -@ stdcall GetPropW() user32.GetPropW -@ stdcall GetQueueStatus() user32.GetQueueStatus -@ stdcall GetTopWindow() user32.GetTopWindow -@ stdcall GetWindow() user32.GetWindow -@ stdcall GetWindowLongA() user32.GetWindowLongA -@ stdcall GetWindowLongW() user32.GetWindowLongW -@ stdcall GetWindowRect() user32.GetWindowRect -@ stdcall GetWindowTextW() user32.GetWindowTextW -@ stdcall GetWindowThreadProcessId() user32.GetWindowThreadProcessId -@ stdcall InSendMessage() user32.InSendMessage -@ stdcall InSendMessageEx() user32.InSendMessageEx -@ stdcall IsChild() user32.IsChild -@ stdcall IsWindow() user32.IsWindow -@ stdcall IsWindowEnabled() user32.IsWindowEnabled -@ stdcall IsWindowVisible() user32.IsWindowVisible -@ stdcall KillTimer() user32.KillTimer -@ stdcall MoveWindow() user32.MoveWindow -@ stdcall PeekMessageW() user32.PeekMessageW -@ stdcall PostMessageW() user32.PostMessageW -@ stdcall PostQuitMessage() user32.PostQuitMessage -@ stdcall PostThreadMessageW() user32.PostThreadMessageW -@ stdcall RegisterClassExW() user32.RegisterClassExW -@ stdcall RegisterClassW() user32.RegisterClassW -@ stdcall RegisterWindowMessageW() user32.RegisterWindowMessageW -@ stdcall RemovePropW() user32.RemovePropW -@ stdcall ScreenToClient() user32.ScreenToClient -@ stdcall SendMessageCallbackW() user32.SendMessageCallbackW -@ stdcall SendMessageTimeoutW() user32.SendMessageTimeoutW -@ stdcall SendMessageW() user32.SendMessageW -@ stdcall SendNotifyMessageW() user32.SendNotifyMessageW -@ stdcall SetActiveWindow() user32.SetActiveWindow -@ stdcall SetCursorPos() user32.SetCursorPos -@ stdcall SetFocus() user32.SetFocus -@ stdcall SetForegroundWindow() user32.SetForegroundWindow -@ stdcall SetMessageExtraInfo() user32.SetMessageExtraInfo -@ stdcall SetParent() user32.SetParent -@ stdcall SetPropW() user32.SetPropW -@ stdcall SetTimer() user32.SetTimer -@ stdcall SetWindowLongA() user32.SetWindowLongA -@ stdcall SetWindowLongW() user32.SetWindowLongW -@ stdcall SetWindowPos() user32.SetWindowPos -@ stdcall SetWindowTextW() user32.SetWindowTextW -@ stdcall ShowWindow() user32.ShowWindow -@ stdcall TranslateMessage() user32.TranslateMessage -@ stdcall UnregisterClassW() user32.UnregisterClassW -@ stdcall WaitMessage() user32.WaitMessage -@ stdcall WindowFromPoint() user32.WindowFromPoint diff --git a/dll/apisets/api-ms-win-rtcore-ntuser-winevent-l1-1-0.spec b/dll/apisets/api-ms-win-rtcore-ntuser-winevent-l1-1-0.spec deleted file mode 100644 index 30a1d80ca71..00000000000 --- a/dll/apisets/api-ms-win-rtcore-ntuser-winevent-l1-1-0.spec +++ /dev/null @@ -1,7 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall IsWinEventHookInstalled() user32.IsWinEventHookInstalled -@ stdcall NotifyWinEvent() user32.NotifyWinEvent -@ stdcall SetWinEventHook() user32.SetWinEventHook -@ stdcall UnhookWinEvent() user32.UnhookWinEvent diff --git a/dll/apisets/api-ms-win-rtcore-ntuser-wmpointer-l1-1-0.spec b/dll/apisets/api-ms-win-rtcore-ntuser-wmpointer-l1-1-0.spec deleted file mode 100644 index 07d849effcc..00000000000 --- a/dll/apisets/api-ms-win-rtcore-ntuser-wmpointer-l1-1-0.spec +++ /dev/null @@ -1,28 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub EnableMouseInPointer -@ stub GetCurrentInputMessageSource -@ stub GetPointerCursorId -@ stub GetPointerDevice -@ stub GetPointerDeviceProperties -@ stub GetPointerDeviceRects -@ stub GetPointerDevices -@ stub GetPointerFrameInfo -@ stub GetPointerFrameInfoHistory -@ stub GetPointerFramePenInfo -@ stub GetPointerFrameTouchInfo -@ stub GetPointerFrameTouchInfoHistory -@ stub GetPointerInfo -@ stub GetPointerInfoHistory -@ stub GetPointerInputTransform -@ stub GetPointerPenInfo -@ stub GetPointerPenInfoHistory -@ stub GetPointerTouchInfo -@ stub GetPointerTouchInfoHistory -@ stub GetPointerType -@ stub GetRawPointerDeviceData -@ stub InitializeTouchInjection -@ stub InjectTouchInput -@ stub IsMouseInPointerEnabled -@ stub SkipPointerFrameMessages diff --git a/dll/apisets/api-ms-win-rtcore-ntuser-wmpointer-l1-1-3.spec b/dll/apisets/api-ms-win-rtcore-ntuser-wmpointer-l1-1-3.spec deleted file mode 100644 index 49610fd6ae5..00000000000 --- a/dll/apisets/api-ms-win-rtcore-ntuser-wmpointer-l1-1-3.spec +++ /dev/null @@ -1,4 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub GetWindowFeedbackSetting diff --git a/dll/apisets/api-ms-win-security-activedirectoryclient-l1-1-0.spec b/dll/apisets/api-ms-win-security-activedirectoryclient-l1-1-0.spec deleted file mode 100644 index 8c2683b27b8..00000000000 --- a/dll/apisets/api-ms-win-security-activedirectoryclient-l1-1-0.spec +++ /dev/null @@ -1,11 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub DsBindWithSpnExW -@ stdcall DsCrackNamesW() ntdsapi.DsCrackNamesW -@ stdcall DsFreeDomainControllerInfoW() ntdsapi.DsFreeDomainControllerInfoW -@ stdcall DsFreeNameResultW() ntdsapi.DsFreeNameResultW -@ stdcall DsFreePasswordCredentials() ntdsapi.DsFreePasswordCredentials -@ stdcall DsGetDomainControllerInfoW() ntdsapi.DsGetDomainControllerInfoW -@ stdcall DsMakePasswordCredentialsW() ntdsapi.DsMakePasswordCredentialsW -@ stdcall DsUnBindW() ntdsapi.DsUnBindW diff --git a/dll/apisets/api-ms-win-security-audit-l1-1-1.spec b/dll/apisets/api-ms-win-security-audit-l1-1-1.spec deleted file mode 100644 index c5ca938f826..00000000000 --- a/dll/apisets/api-ms-win-security-audit-l1-1-1.spec +++ /dev/null @@ -1,18 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub AuditComputeEffectivePolicyBySid -@ stub AuditEnumerateCategories -@ stub AuditEnumeratePerUserPolicy -@ stub AuditEnumerateSubCategories -@ stub AuditFree -@ stub AuditLookupCategoryNameW -@ stub AuditLookupSubCategoryNameW -@ stub AuditQueryGlobalSaclW -@ stub AuditQueryPerUserPolicy -@ stub AuditQuerySecurity -@ stub AuditQuerySystemPolicy -@ stub AuditSetGlobalSaclW -@ stub AuditSetPerUserPolicy -@ stub AuditSetSecurity -@ stub AuditSetSystemPolicy diff --git a/dll/apisets/api-ms-win-security-base-l1-1-0.spec b/dll/apisets/api-ms-win-security-base-l1-1-0.spec deleted file mode 100644 index fb2268b2a50..00000000000 --- a/dll/apisets/api-ms-win-security-base-l1-1-0.spec +++ /dev/null @@ -1,100 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall AccessCheck() advapi32.AccessCheck -@ stub AccessCheckandAuditAlarmW -@ stdcall AccessCheckByType() advapi32.AccessCheckByType -@ stub AccessCheckByTypeandAuditAlarmW -@ stdcall AccessCheckByTypeResultList() advapi32.AccessCheckByTypeResultList -@ stub AccessCheckByTypeResultListandAuditAlarmByHandleW -@ stub AccessCheckByTypeResultListandAuditAlarmW -@ stdcall AddAccessAllowedAce() advapi32.AddAccessAllowedAce -@ stdcall AddAccessAllowedAceEx() advapi32.AddAccessAllowedAceEx -@ stdcall AddAccessAllowedObjectAce() advapi32.AddAccessAllowedObjectAce -@ stdcall AddAccessDeniedAce() advapi32.AddAccessDeniedAce -@ stdcall AddAccessDeniedAceEx() advapi32.AddAccessDeniedAceEx -@ stdcall AddAccessDeniedObjectAce() advapi32.AddAccessDeniedObjectAce -@ stdcall AddAce() advapi32.AddAce -@ stdcall AddAuditAccessAce() advapi32.AddAuditAccessAce -@ stdcall AddAuditAccessAceEx() advapi32.AddAuditAccessAceEx -@ stdcall AddAuditAccessObjectAce() advapi32.AddAuditAccessObjectAce -@ stub AddMandatoryAce -@ stdcall AdjustTokenGroups() advapi32.AdjustTokenGroups -@ stdcall AdjustTokenPrivileges() advapi32.AdjustTokenPrivileges -@ stdcall AllocateAndInitializeSid() advapi32.AllocateAndInitializeSid -@ stdcall AllocateLocallyUniqueId() advapi32.AllocateLocallyUniqueId -@ stdcall AreAllAccessesGranted() advapi32.AreAllAccessesGranted -@ stdcall AreAnyAccessesGranted() advapi32.AreAnyAccessesGranted -@ stdcall CheckTokenMembership() advapi32.CheckTokenMembership -@ stdcall ConvertToAutoInheritPrivateObjectSecurity() advapi32.ConvertToAutoInheritPrivateObjectSecurity -@ stdcall CopySid() advapi32.CopySid -@ stdcall CreatePrivateObjectSecurity() advapi32.CreatePrivateObjectSecurity -@ stdcall CreatePrivateObjectSecurityEx() advapi32.CreatePrivateObjectSecurityEx -@ stdcall CreatePrivateObjectSecurityWithMultipleInheritance() advapi32.CreatePrivateObjectSecurityWithMultipleInheritance -@ stdcall CreateRestrictedToken() advapi32.CreateRestrictedToken -@ stdcall CreateWellKnownSid() advapi32.CreateWellKnownSid -@ stdcall DeleteAce() advapi32.DeleteAce -@ stdcall DestroyPrivateObjectSecurity() advapi32.DestroyPrivateObjectSecurity -@ stdcall DuplicateToken() advapi32.DuplicateToken -@ stdcall DuplicateTokenEx() advapi32.DuplicateTokenEx -@ stdcall EqualDomainSid() advapi32.EqualDomainSid -@ stdcall EqualPrefixSid() advapi32.EqualPrefixSid -@ stdcall EqualSid() advapi32.EqualSid -@ stdcall FindFirstFreeAce() advapi32.FindFirstFreeAce -@ stdcall FreeSid() advapi32.FreeSid -@ stdcall GetAce() advapi32.GetAce -@ stdcall GetAclInformation() advapi32.GetAclInformation -@ stdcall GetFileSecurityW() advapi32.GetFileSecurityW -@ stdcall GetKernelObjectSecurity() advapi32.GetKernelObjectSecurity -@ stdcall GetLengthSid() advapi32.GetLengthSid -@ stdcall GetPrivateObjectSecurity() advapi32.GetPrivateObjectSecurity -@ stdcall GetSecurityDescriptorControl() advapi32.GetSecurityDescriptorControl -@ stdcall GetSecurityDescriptorDacl() advapi32.GetSecurityDescriptorDacl -@ stdcall GetSecurityDescriptorGroup() advapi32.GetSecurityDescriptorGroup -@ stdcall GetSecurityDescriptorLength() advapi32.GetSecurityDescriptorLength -@ stdcall GetSecurityDescriptorOwner() advapi32.GetSecurityDescriptorOwner -@ stdcall GetSecurityDescriptorRMControl() advapi32.GetSecurityDescriptorRMControl -@ stdcall GetSecurityDescriptorSacl() advapi32.GetSecurityDescriptorSacl -@ stdcall GetSidIdentifierAuthority() advapi32.GetSidIdentifierAuthority -@ stdcall GetSidLengthRequired() advapi32.GetSidLengthRequired -@ stdcall GetSidSubAuthority() advapi32.GetSidSubAuthority -@ stdcall GetSidSubAuthorityCount() advapi32.GetSidSubAuthorityCount -@ stdcall GetTokenInformation() advapi32.GetTokenInformation -@ stdcall GetWindowsAccountDomainSid() advapi32.GetWindowsAccountDomainSid -@ stdcall ImpersonateAnonymousToken() advapi32.ImpersonateAnonymousToken -@ stdcall ImpersonateLoggedOnUser() advapi32.ImpersonateLoggedOnUser -@ stdcall ImpersonateSelf() advapi32.ImpersonateSelf -@ stdcall InitializeAcl() advapi32.InitializeAcl -@ stdcall InitializeSecurityDescriptor() advapi32.InitializeSecurityDescriptor -@ stdcall InitializeSid() advapi32.InitializeSid -@ stdcall IsTokenRestricted() advapi32.IsTokenRestricted -@ stdcall IsValidAcl() advapi32.IsValidAcl -@ stub IsValidRelativeSecurityDescriptor -@ stdcall IsValidSecurityDescriptor() advapi32.IsValidSecurityDescriptor -@ stdcall IsValidSid() advapi32.IsValidSid -@ stdcall IsWellKnownSid() advapi32.IsWellKnownSid -@ stdcall MakeAbsoluteSD() advapi32.MakeAbsoluteSD -@ stdcall MakeAbsoluteSD2() advapi32.MakeAbsoluteSD2 -@ stdcall MakeSelfRelativeSD() advapi32.MakeSelfRelativeSD -@ stdcall MapGenericMask() advapi32.MapGenericMask -@ stdcall ObjectCloseAuditAlarmW() advapi32.ObjectCloseAuditAlarmW -@ stdcall ObjectDeleteAuditAlarmW() advapi32.ObjectDeleteAuditAlarmW -@ stdcall ObjectOpenAuditAlarmW() advapi32.ObjectOpenAuditAlarmW -@ stdcall ObjectPrivilegeAuditAlarmW() advapi32.ObjectPrivilegeAuditAlarmW -@ stdcall PrivilegeCheck() advapi32.PrivilegeCheck -@ stdcall PrivilegedServiceAuditAlarmW() advapi32.PrivilegedServiceAuditAlarmW -@ stub QuerySecurityAccessMask -@ stdcall RevertToSelf() advapi32.RevertToSelf -@ stdcall SetAclInformation() advapi32.SetAclInformation -@ stdcall SetFileSecurityW() advapi32.SetFileSecurityW -@ stdcall SetKernelObjectSecurity() advapi32.SetKernelObjectSecurity -@ stdcall SetPrivateObjectSecurity() advapi32.SetPrivateObjectSecurity -@ stdcall SetPrivateObjectSecurityEx() advapi32.SetPrivateObjectSecurityEx -@ stub SetSecurityAccessMask -@ stdcall SetSecurityDescriptorControl() advapi32.SetSecurityDescriptorControl -@ stdcall SetSecurityDescriptorDacl() advapi32.SetSecurityDescriptorDacl -@ stdcall SetSecurityDescriptorGroup() advapi32.SetSecurityDescriptorGroup -@ stdcall SetSecurityDescriptorOwner() advapi32.SetSecurityDescriptorOwner -@ stdcall SetSecurityDescriptorRMControl() advapi32.SetSecurityDescriptorRMControl -@ stdcall SetSecurityDescriptorSacl() advapi32.SetSecurityDescriptorSacl -@ stdcall SetTokenInformation() advapi32.SetTokenInformation diff --git a/dll/apisets/api-ms-win-security-base-l1-2-0.spec b/dll/apisets/api-ms-win-security-base-l1-2-0.spec deleted file mode 100644 index d6990530f5f..00000000000 --- a/dll/apisets/api-ms-win-security-base-l1-2-0.spec +++ /dev/null @@ -1,105 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall AccessCheck() advapi32.AccessCheck -@ stdcall AccessCheckAndAuditAlarmW() advapi32.AccessCheckAndAuditAlarmW -@ stdcall AccessCheckByType() advapi32.AccessCheckByType -@ stdcall AccessCheckByTypeAndAuditAlarmW() advapi32.AccessCheckByTypeAndAuditAlarmW -@ stdcall AccessCheckByTypeResultList() advapi32.AccessCheckByTypeResultList -@ stdcall AccessCheckByTypeResultListAndAuditAlarmByHandleW() advapi32.AccessCheckByTypeResultListAndAuditAlarmByHandleW -@ stdcall AccessCheckByTypeResultListAndAuditAlarmW() advapi32.AccessCheckByTypeResultListAndAuditAlarmW -@ stdcall AddAccessAllowedAce() advapi32.AddAccessAllowedAce -@ stdcall AddAccessAllowedAceEx() advapi32.AddAccessAllowedAceEx -@ stdcall AddAccessAllowedObjectAce() advapi32.AddAccessAllowedObjectAce -@ stdcall AddAccessDeniedAce() advapi32.AddAccessDeniedAce -@ stdcall AddAccessDeniedAceEx() advapi32.AddAccessDeniedAceEx -@ stdcall AddAccessDeniedObjectAce() advapi32.AddAccessDeniedObjectAce -@ stdcall AddAce() advapi32.AddAce -@ stdcall AddAuditAccessAce() advapi32.AddAuditAccessAce -@ stdcall AddAuditAccessAceEx() advapi32.AddAuditAccessAceEx -@ stdcall AddAuditAccessObjectAce() advapi32.AddAuditAccessObjectAce -@ stub AddMandatoryAce -@ stub AddResourceAttributeAce -@ stub AddScopedPolicyIDAce -@ stdcall AdjustTokenGroups() advapi32.AdjustTokenGroups -@ stdcall AdjustTokenPrivileges() advapi32.AdjustTokenPrivileges -@ stdcall AllocateAndInitializeSid() advapi32.AllocateAndInitializeSid -@ stdcall AllocateLocallyUniqueId() advapi32.AllocateLocallyUniqueId -@ stdcall AreAllAccessesGranted() advapi32.AreAllAccessesGranted -@ stdcall AreAnyAccessesGranted() advapi32.AreAnyAccessesGranted -@ stub CheckTokenCapability -@ stdcall CheckTokenMembership() advapi32.CheckTokenMembership -@ stub CheckTokenMembershipEx -@ stdcall ConvertToAutoInheritPrivateObjectSecurity() advapi32.ConvertToAutoInheritPrivateObjectSecurity -@ stdcall CopySid() advapi32.CopySid -@ stdcall CreatePrivateObjectSecurity() advapi32.CreatePrivateObjectSecurity -@ stdcall CreatePrivateObjectSecurityEx() advapi32.CreatePrivateObjectSecurityEx -@ stdcall CreatePrivateObjectSecurityWithMultipleInheritance() advapi32.CreatePrivateObjectSecurityWithMultipleInheritance -@ stdcall CreateRestrictedToken() advapi32.CreateRestrictedToken -@ stdcall CreateWellKnownSid() advapi32.CreateWellKnownSid -@ stdcall DeleteAce() advapi32.DeleteAce -@ stdcall DestroyPrivateObjectSecurity() advapi32.DestroyPrivateObjectSecurity -@ stdcall DuplicateToken() advapi32.DuplicateToken -@ stdcall DuplicateTokenEx() advapi32.DuplicateTokenEx -@ stdcall EqualDomainSid() advapi32.EqualDomainSid -@ stdcall EqualPrefixSid() advapi32.EqualPrefixSid -@ stdcall EqualSid() advapi32.EqualSid -@ stdcall FindFirstFreeAce() advapi32.FindFirstFreeAce -@ stdcall FreeSid() advapi32.FreeSid -@ stdcall GetAce() advapi32.GetAce -@ stdcall GetAclInformation() advapi32.GetAclInformation -@ stub GetAppContainerAce -@ stub GetCachedSigningLevel -@ stdcall GetFileSecurityW() advapi32.GetFileSecurityW -@ stdcall GetKernelObjectSecurity() advapi32.GetKernelObjectSecurity -@ stdcall GetLengthSid() advapi32.GetLengthSid -@ stdcall GetPrivateObjectSecurity() advapi32.GetPrivateObjectSecurity -@ stdcall GetSecurityDescriptorControl() advapi32.GetSecurityDescriptorControl -@ stdcall GetSecurityDescriptorDacl() advapi32.GetSecurityDescriptorDacl -@ stdcall GetSecurityDescriptorGroup() advapi32.GetSecurityDescriptorGroup -@ stdcall GetSecurityDescriptorLength() advapi32.GetSecurityDescriptorLength -@ stdcall GetSecurityDescriptorOwner() advapi32.GetSecurityDescriptorOwner -@ stdcall GetSecurityDescriptorRMControl() advapi32.GetSecurityDescriptorRMControl -@ stdcall GetSecurityDescriptorSacl() advapi32.GetSecurityDescriptorSacl -@ stdcall GetSidIdentifierAuthority() advapi32.GetSidIdentifierAuthority -@ stdcall GetSidLengthRequired() advapi32.GetSidLengthRequired -@ stdcall GetSidSubAuthority() advapi32.GetSidSubAuthority -@ stdcall GetSidSubAuthorityCount() advapi32.GetSidSubAuthorityCount -@ stdcall GetTokenInformation() advapi32.GetTokenInformation -@ stdcall GetWindowsAccountDomainSid() advapi32.GetWindowsAccountDomainSid -@ stdcall ImpersonateAnonymousToken() advapi32.ImpersonateAnonymousToken -@ stdcall ImpersonateLoggedOnUser() advapi32.ImpersonateLoggedOnUser -@ stdcall ImpersonateSelf() advapi32.ImpersonateSelf -@ stdcall InitializeAcl() advapi32.InitializeAcl -@ stdcall InitializeSecurityDescriptor() advapi32.InitializeSecurityDescriptor -@ stdcall InitializeSid() advapi32.InitializeSid -@ stdcall IsTokenRestricted() advapi32.IsTokenRestricted -@ stdcall IsValidAcl() advapi32.IsValidAcl -@ stdcall IsValidSecurityDescriptor() advapi32.IsValidSecurityDescriptor -@ stdcall IsValidSid() advapi32.IsValidSid -@ stdcall IsWellKnownSid() advapi32.IsWellKnownSid -@ stdcall MakeAbsoluteSD() advapi32.MakeAbsoluteSD -@ stdcall MakeSelfRelativeSD() advapi32.MakeSelfRelativeSD -@ stdcall MapGenericMask() advapi32.MapGenericMask -@ stdcall ObjectCloseAuditAlarmW() advapi32.ObjectCloseAuditAlarmW -@ stdcall ObjectDeleteAuditAlarmW() advapi32.ObjectDeleteAuditAlarmW -@ stdcall ObjectOpenAuditAlarmW() advapi32.ObjectOpenAuditAlarmW -@ stdcall ObjectPrivilegeAuditAlarmW() advapi32.ObjectPrivilegeAuditAlarmW -@ stdcall PrivilegeCheck() advapi32.PrivilegeCheck -@ stdcall PrivilegedServiceAuditAlarmW() advapi32.PrivilegedServiceAuditAlarmW -@ stub QuerySecurityAccessMask -@ stdcall RevertToSelf() advapi32.RevertToSelf -@ stdcall SetAclInformation() advapi32.SetAclInformation -@ stub SetCachedSigningLevel -@ stdcall SetFileSecurityW() advapi32.SetFileSecurityW -@ stdcall SetKernelObjectSecurity() advapi32.SetKernelObjectSecurity -@ stdcall SetPrivateObjectSecurity() advapi32.SetPrivateObjectSecurity -@ stdcall SetPrivateObjectSecurityEx() advapi32.SetPrivateObjectSecurityEx -@ stub SetSecurityAccessMask -@ stdcall SetSecurityDescriptorControl() advapi32.SetSecurityDescriptorControl -@ stdcall SetSecurityDescriptorDacl() advapi32.SetSecurityDescriptorDacl -@ stdcall SetSecurityDescriptorGroup() advapi32.SetSecurityDescriptorGroup -@ stdcall SetSecurityDescriptorOwner() advapi32.SetSecurityDescriptorOwner -@ stdcall SetSecurityDescriptorRMControl() advapi32.SetSecurityDescriptorRMControl -@ stdcall SetSecurityDescriptorSacl() advapi32.SetSecurityDescriptorSacl -@ stdcall SetTokenInformation() advapi32.SetTokenInformation diff --git a/dll/apisets/api-ms-win-security-base-private-l1-1-1.spec b/dll/apisets/api-ms-win-security-base-private-l1-1-1.spec deleted file mode 100644 index 7510a4bf169..00000000000 --- a/dll/apisets/api-ms-win-security-base-private-l1-1-1.spec +++ /dev/null @@ -1,6 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub CreateAppContainerToken -@ stub IsValidRelativeSecurityDescriptor -@ stdcall MakeAbsoluteSD2() advapi32.MakeAbsoluteSD2 diff --git a/dll/apisets/api-ms-win-security-credentials-l1-1-0.spec b/dll/apisets/api-ms-win-security-credentials-l1-1-0.spec deleted file mode 100644 index 3050a8b4225..00000000000 --- a/dll/apisets/api-ms-win-security-credentials-l1-1-0.spec +++ /dev/null @@ -1,32 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CredDeleteA() advapi32.CredDeleteA -@ stdcall CredDeleteW() advapi32.CredDeleteW -@ stdcall CredEnumerateA() advapi32.CredEnumerateA -@ stdcall CredEnumerateW() advapi32.CredEnumerateW -@ stub CredFindBestCredentialA -@ stub CredFindBestCredentialW -@ stdcall CredFree() advapi32.CredFree -@ stdcall CredGetSessionTypes() advapi32.CredGetSessionTypes -@ stdcall CredGetTargetInfoA() advapi32.CredGetTargetInfoA -@ stdcall CredGetTargetInfoW() advapi32.CredGetTargetInfoW -@ stdcall CredIsMarshaledCredentialW() advapi32.CredIsMarshaledCredentialW -@ stub CredIsProtectedA -@ stub CredIsProtectedW -@ stdcall CredMarshalCredentialA() advapi32.CredMarshalCredentialA -@ stdcall CredMarshalCredentialW() advapi32.CredMarshalCredentialW -@ stub CredProtectA -@ stub CredProtectW -@ stdcall CredReadA() advapi32.CredReadA -@ stdcall CredReadDomainCredentialsA() advapi32.CredReadDomainCredentialsA -@ stdcall CredReadDomainCredentialsW() advapi32.CredReadDomainCredentialsW -@ stdcall CredReadW() advapi32.CredReadW -@ stdcall CredUnmarshalCredentialA() advapi32.CredUnmarshalCredentialA -@ stdcall CredUnmarshalCredentialW() advapi32.CredUnmarshalCredentialW -@ stub CredUnprotectA -@ stub CredUnprotectW -@ stdcall CredWriteA() advapi32.CredWriteA -@ stub CredWriteDomainCredentialsA -@ stdcall CredWriteDomainCredentialsW() advapi32.CredWriteDomainCredentialsW -@ stdcall CredWriteW() advapi32.CredWriteW diff --git a/dll/apisets/api-ms-win-security-cryptoapi-l1-1-0.spec b/dll/apisets/api-ms-win-security-cryptoapi-l1-1-0.spec deleted file mode 100644 index d9acdca934d..00000000000 --- a/dll/apisets/api-ms-win-security-cryptoapi-l1-1-0.spec +++ /dev/null @@ -1,42 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CryptAcquireContextA() advapi32.CryptAcquireContextA -@ stdcall CryptAcquireContextW() advapi32.CryptAcquireContextW -@ stdcall CryptContextAddRef() advapi32.CryptContextAddRef -@ stdcall CryptCreateHash() advapi32.CryptCreateHash -@ stdcall CryptDecrypt() advapi32.CryptDecrypt -@ stdcall CryptDeriveKey() advapi32.CryptDeriveKey -@ stdcall CryptDestroyHash() advapi32.CryptDestroyHash -@ stdcall CryptDestroyKey() advapi32.CryptDestroyKey -@ stdcall CryptDuplicateHash() advapi32.CryptDuplicateHash -@ stdcall CryptDuplicateKey() advapi32.CryptDuplicateKey -@ stdcall CryptEncrypt() advapi32.CryptEncrypt -@ stdcall CryptEnumProviderTypesA() advapi32.CryptEnumProviderTypesA -@ stdcall CryptEnumProviderTypesW() advapi32.CryptEnumProviderTypesW -@ stdcall CryptEnumProvidersA() advapi32.CryptEnumProvidersA -@ stdcall CryptEnumProvidersW() advapi32.CryptEnumProvidersW -@ stdcall CryptExportKey() advapi32.CryptExportKey -@ stdcall CryptGenKey() advapi32.CryptGenKey -@ stdcall CryptGenRandom() advapi32.CryptGenRandom -@ stdcall CryptGetDefaultProviderA() advapi32.CryptGetDefaultProviderA -@ stdcall CryptGetDefaultProviderW() advapi32.CryptGetDefaultProviderW -@ stdcall CryptGetHashParam() advapi32.CryptGetHashParam -@ stdcall CryptGetKeyParam() advapi32.CryptGetKeyParam -@ stdcall CryptGetProvParam() advapi32.CryptGetProvParam -@ stdcall CryptGetUserKey() advapi32.CryptGetUserKey -@ stdcall CryptHashData() advapi32.CryptHashData -@ stdcall CryptHashSessionKey() advapi32.CryptHashSessionKey -@ stdcall CryptImportKey() advapi32.CryptImportKey -@ stdcall CryptReleaseContext() advapi32.CryptReleaseContext -@ stdcall CryptSetHashParam() advapi32.CryptSetHashParam -@ stdcall CryptSetKeyParam() advapi32.CryptSetKeyParam -@ stdcall CryptSetProvParam() advapi32.CryptSetProvParam -@ stdcall CryptSetProviderA() advapi32.CryptSetProviderA -@ stdcall CryptSetProviderExA() advapi32.CryptSetProviderExA -@ stdcall CryptSetProviderExW() advapi32.CryptSetProviderExW -@ stdcall CryptSetProviderW() advapi32.CryptSetProviderW -@ stdcall CryptSignHashA() advapi32.CryptSignHashA -@ stdcall CryptSignHashW() advapi32.CryptSignHashW -@ stdcall CryptVerifySignatureA() advapi32.CryptVerifySignatureA -@ stdcall CryptVerifySignatureW() advapi32.CryptVerifySignatureW diff --git a/dll/apisets/api-ms-win-security-grouppolicy-l1-1-0.spec b/dll/apisets/api-ms-win-security-grouppolicy-l1-1-0.spec deleted file mode 100644 index b9eee418852..00000000000 --- a/dll/apisets/api-ms-win-security-grouppolicy-l1-1-0.spec +++ /dev/null @@ -1,26 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub AreThereVisibleLogoffScriptsInternal -@ stub AreThereVisibleShutdownScriptsInternal -@ stub EnterCriticalPolicySectionInternal -@ stub ForceSyncFgPolicyInternal -@ stub FreeGPOListInternalA -@ stub FreeGPOListInternalW -@ stub GenerateGPNotificationInternal -@ stub GetAppliedGPOListInternalA -@ stub GetAppliedGPOListInternalW -@ stub GetGPOListInternalA -@ stub GetGPOListInternalW -@ stub GetNextFgPolicyRefreshInfoInternal -@ stub GetPreviousFgPolicyRefreshInfoInternal -@ stub HasPolicyForegroundProcessingCompletedInternal -@ stdcall IsSyncForegroundPolicyRefresh() userenv.IsSyncForegroundPolicyRefresh -@ stub LeaveCriticalPolicySectionInternal -@ stub RefreshPolicyExInternal -@ stub RefreshPolicyInternal -@ stub RegisterGPNotificationInternal -@ stub RsopLoggingEnabledInternal -@ stub UnregisterGPNotificationInternal -@ stub WaitForMachinePolicyForegroundProcessingInternal -@ stub WaitForUserPolicyForegroundProcessingInternal diff --git a/dll/apisets/api-ms-win-security-lsalookup-l1-1-0.spec b/dll/apisets/api-ms-win-security-lsalookup-l1-1-0.spec deleted file mode 100644 index 55f0a1d6066..00000000000 --- a/dll/apisets/api-ms-win-security-lsalookup-l1-1-0.spec +++ /dev/null @@ -1,14 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub LookupAccountNameLocalA -@ stub LookupAccountNameLocalW -@ stub LookupAccountSidLocalA -@ stub LookupAccountSidLocalW -@ stub LsaLookupClose -@ stub LsaLookupFreeMemory -@ stub LsaLookupGetDomainInfo -@ stub LsaLookupManageSidNameMapping -@ stub LsaLookupOpenLocalPolicy -@ stub LsaLookupTranslateNames -@ stub LsaLookupTranslateSids diff --git a/dll/apisets/api-ms-win-security-lsalookup-l1-1-1.spec b/dll/apisets/api-ms-win-security-lsalookup-l1-1-1.spec deleted file mode 100644 index a9dce6ae363..00000000000 --- a/dll/apisets/api-ms-win-security-lsalookup-l1-1-1.spec +++ /dev/null @@ -1,19 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub EnumerateIdentityProviders -@ stub GetDefaultIdentityProvider -@ stub GetIdentityProviderInfoByGUID -@ stub GetIdentityProviderInfoByName -@ stub LookupAccountNameLocalA -@ stub LookupAccountNameLocalW -@ stub LookupAccountSidLocalA -@ stub LookupAccountSidLocalW -@ stub LsaLookupClose -@ stub LsaLookupFreeMemory -@ stub LsaLookupGetDomainInfo -@ stub LsaLookupManageSidNameMapping -@ stub LsaLookupOpenLocalPolicy -@ stub LsaLookupTranslateNames -@ stub LsaLookupTranslateSids -@ stub ReleaseIdentityProviderEnumContext diff --git a/dll/apisets/api-ms-win-security-lsalookup-l2-1-0.spec b/dll/apisets/api-ms-win-security-lsalookup-l2-1-0.spec deleted file mode 100644 index f95244ca7fa..00000000000 --- a/dll/apisets/api-ms-win-security-lsalookup-l2-1-0.spec +++ /dev/null @@ -1,9 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall LookupAccountNameW() advapi32.LookupAccountNameW -@ stdcall LookupAccountSidW() advapi32.LookupAccountSidW -@ stdcall LookupPrivilegeDisplayNameW() advapi32.LookupPrivilegeDisplayNameW -@ stdcall LookupPrivilegeNameW() advapi32.LookupPrivilegeNameW -@ stdcall LookupPrivilegeValueW() advapi32.LookupPrivilegeValueW -@ stdcall LsaEnumerateTrustedDomains() advapi32.LsaEnumerateTrustedDomains diff --git a/dll/apisets/api-ms-win-security-lsalookup-l2-1-1.spec b/dll/apisets/api-ms-win-security-lsalookup-l2-1-1.spec deleted file mode 100644 index 45a55fe8f82..00000000000 --- a/dll/apisets/api-ms-win-security-lsalookup-l2-1-1.spec +++ /dev/null @@ -1,10 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall LookupAccountNameW() advapi32.LookupAccountNameW -@ stdcall LookupAccountSidW() advapi32.LookupAccountSidW -@ stdcall LookupPrivilegeDisplayNameW() advapi32.LookupPrivilegeDisplayNameW -@ stdcall LookupPrivilegeNameW() advapi32.LookupPrivilegeNameW -@ stdcall LookupPrivilegeValueW() advapi32.LookupPrivilegeValueW -@ stdcall LsaEnumerateTrustedDomains() advapi32.LsaEnumerateTrustedDomains -@ stub LsaManageSidNameMapping diff --git a/dll/apisets/api-ms-win-security-lsapolicy-l1-1-0.spec b/dll/apisets/api-ms-win-security-lsapolicy-l1-1-0.spec deleted file mode 100644 index 2a333573018..00000000000 --- a/dll/apisets/api-ms-win-security-lsapolicy-l1-1-0.spec +++ /dev/null @@ -1,25 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall LsaAddAccountRights() advapi32.LsaAddAccountRights -@ stdcall LsaClose() advapi32.LsaClose -@ stdcall LsaCreateSecret() advapi32.LsaCreateSecret -@ stdcall LsaEnumerateAccountRights() advapi32.LsaEnumerateAccountRights -@ stdcall LsaEnumerateAccountsWithUserRight() advapi32.LsaEnumerateAccountsWithUserRight -@ stdcall LsaFreeMemory() advapi32.LsaFreeMemory -@ stdcall LsaICLookupNames() advapi32.LsaICLookupNames -@ stdcall LsaICLookupNamesWithCreds() advapi32.LsaICLookupNamesWithCreds -@ stdcall LsaICLookupSids() advapi32.LsaICLookupSids -@ stdcall LsaICLookupSidsWithCreds() advapi32.LsaICLookupSidsWithCreds -@ stdcall LsaLookupNames2() advapi32.LsaLookupNames2 -@ stdcall LsaLookupSids() advapi32.LsaLookupSids -@ stub LsaLookupSids2 -@ stdcall LsaOpenPolicy() advapi32.LsaOpenPolicy -@ stdcall LsaOpenSecret() advapi32.LsaOpenSecret -@ stdcall LsaQueryInformationPolicy() advapi32.LsaQueryInformationPolicy -@ stdcall LsaQuerySecret() advapi32.LsaQuerySecret -@ stdcall LsaRemoveAccountRights() advapi32.LsaRemoveAccountRights -@ stdcall LsaRetrievePrivateData() advapi32.LsaRetrievePrivateData -@ stdcall LsaSetInformationPolicy() advapi32.LsaSetInformationPolicy -@ stdcall LsaSetSecret() advapi32.LsaSetSecret -@ stdcall LsaStorePrivateData() advapi32.LsaStorePrivateData diff --git a/dll/apisets/api-ms-win-security-provider-l1-1-0.spec b/dll/apisets/api-ms-win-security-provider-l1-1-0.spec deleted file mode 100644 index 8b0fb7f8bdb..00000000000 --- a/dll/apisets/api-ms-win-security-provider-l1-1-0.spec +++ /dev/null @@ -1,9 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall GetExplicitEntriesFromAclW() advapi32.GetExplicitEntriesFromAclW -@ stdcall GetNamedSecurityInfoW() advapi32.GetNamedSecurityInfoW -@ stdcall GetSecurityInfo() advapi32.GetSecurityInfo -@ stdcall SetEntriesInAclW() advapi32.SetEntriesInAclW -@ stdcall SetNamedSecurityInfoW() advapi32.SetNamedSecurityInfoW -@ stdcall SetSecurityInfo() advapi32.SetSecurityInfo diff --git a/dll/apisets/api-ms-win-security-sddl-l1-1-0.spec b/dll/apisets/api-ms-win-security-sddl-l1-1-0.spec deleted file mode 100644 index 740917d2cbc..00000000000 --- a/dll/apisets/api-ms-win-security-sddl-l1-1-0.spec +++ /dev/null @@ -1,7 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall ConvertSecurityDescriptorToStringSecurityDescriptorW() advapi32.ConvertSecurityDescriptorToStringSecurityDescriptorW -@ stdcall ConvertSidToStringSidW() advapi32.ConvertSidToStringSidW -@ stdcall ConvertStringSecurityDescriptorToSecurityDescriptorW() advapi32.ConvertStringSecurityDescriptorToSecurityDescriptorW -@ stdcall ConvertStringSidToSidW() advapi32.ConvertStringSidToSidW diff --git a/dll/apisets/api-ms-win-security-systemfunctions-l1-1-0.spec b/dll/apisets/api-ms-win-security-systemfunctions-l1-1-0.spec deleted file mode 100644 index 513d8999248..00000000000 --- a/dll/apisets/api-ms-win-security-systemfunctions-l1-1-0.spec +++ /dev/null @@ -1,6 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall SystemFunction036() advapi32.SystemFunction036 -@ stdcall SystemFunction040() advapi32.SystemFunction040 -@ stdcall SystemFunction041() advapi32.SystemFunction041 diff --git a/dll/apisets/api-ms-win-service-core-l1-1-0.spec b/dll/apisets/api-ms-win-service-core-l1-1-0.spec deleted file mode 100644 index cc7e416db63..00000000000 --- a/dll/apisets/api-ms-win-service-core-l1-1-0.spec +++ /dev/null @@ -1,6 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall RegisterServiceCtrlHandlerExW() advapi32.RegisterServiceCtrlHandlerExW -@ stdcall SetServiceStatus() advapi32.SetServiceStatus -@ stdcall StartServiceCtrlDispatcherW() advapi32.StartServiceCtrlDispatcherW diff --git a/dll/apisets/api-ms-win-service-core-l1-1-1.spec b/dll/apisets/api-ms-win-service-core-l1-1-1.spec deleted file mode 100644 index 84d5abf534a..00000000000 --- a/dll/apisets/api-ms-win-service-core-l1-1-1.spec +++ /dev/null @@ -1,9 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall EnumDependentServicesW() advapi32.EnumDependentServicesW -@ stdcall EnumServicesStatusExW() advapi32.EnumServicesStatusExW -@ stub QueryServiceDynamicInformation -@ stdcall RegisterServiceCtrlHandlerExW() advapi32.RegisterServiceCtrlHandlerExW -@ stdcall SetServiceStatus() advapi32.SetServiceStatus -@ stdcall StartServiceCtrlDispatcherW() advapi32.StartServiceCtrlDispatcherW diff --git a/dll/apisets/api-ms-win-service-management-l1-1-0.spec b/dll/apisets/api-ms-win-service-management-l1-1-0.spec deleted file mode 100644 index 16316450e4a..00000000000 --- a/dll/apisets/api-ms-win-service-management-l1-1-0.spec +++ /dev/null @@ -1,10 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall CloseServiceHandle() advapi32.CloseServiceHandle -@ stub ControlServiceExW -@ stdcall CreateServiceW() advapi32.CreateServiceW -@ stdcall DeleteService() advapi32.DeleteService -@ stdcall OpenSCManagerW() advapi32.OpenSCManagerW -@ stdcall OpenServiceW() advapi32.OpenServiceW -@ stdcall StartServiceW() advapi32.StartServiceW diff --git a/dll/apisets/api-ms-win-service-management-l2-1-0.spec b/dll/apisets/api-ms-win-service-management-l2-1-0.spec deleted file mode 100644 index b993878b000..00000000000 --- a/dll/apisets/api-ms-win-service-management-l2-1-0.spec +++ /dev/null @@ -1,11 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall ChangeServiceConfig2W() advapi32.ChangeServiceConfig2W -@ stdcall ChangeServiceConfigW() advapi32.ChangeServiceConfigW -@ stub NotifyServiceStatusChangeW -@ stdcall QueryServiceConfig2W() advapi32.QueryServiceConfig2W -@ stdcall QueryServiceConfigW() advapi32.QueryServiceConfigW -@ stdcall QueryServiceObjectSecurity() advapi32.QueryServiceObjectSecurity -@ stdcall QueryServiceStatusEx() advapi32.QueryServiceStatusEx -@ stdcall SetServiceObjectSecurity() advapi32.SetServiceObjectSecurity diff --git a/dll/apisets/api-ms-win-service-private-l1-1-1.spec b/dll/apisets/api-ms-win-service-private-l1-1-1.spec deleted file mode 100644 index 0b7f2e5e08f..00000000000 --- a/dll/apisets/api-ms-win-service-private-l1-1-1.spec +++ /dev/null @@ -1,19 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall I_QueryTagInformation() advapi32.I_QueryTagInformation -@ stub I_ScBroadcastServiceControlMessage -@ stdcall I_ScIsSecurityProcess() advapi32.I_ScIsSecurityProcess -@ stdcall I_ScPnPGetServiceName() advapi32.I_ScPnPGetServiceName -@ stub I_ScQueryServiceConfig -@ stub I_ScRegisterDeviceNotification -@ stub I_ScRegisterPreshutdownRestart -@ stub I_ScRpcBind -@ stub I_ScSendPnPMessage -@ stdcall I_ScSendTSMessage() advapi32.I_ScSendTSMessage -@ stub I_ScSetServiceBits -@ stub I_ScUnregisterDeviceNotification -@ stub I_ScValidatePnPService -@ stub SubscribeServiceChangeNotifications -@ stub UnsubscribeServiceChangeNotifications -@ stub WaitServiceState diff --git a/dll/apisets/api-ms-win-service-winsvc-l1-1-0.spec b/dll/apisets/api-ms-win-service-winsvc-l1-1-0.spec deleted file mode 100644 index 600499b58ac..00000000000 --- a/dll/apisets/api-ms-win-service-winsvc-l1-1-0.spec +++ /dev/null @@ -1,29 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall ChangeServiceConfig2A() advapi32.ChangeServiceConfig2A -@ stdcall ChangeServiceConfigA() advapi32.ChangeServiceConfigA -@ stdcall ControlService() advapi32.ControlService -@ stub ControlServiceExA -@ stdcall CreateServiceA() advapi32.CreateServiceA -@ stdcall I_QueryTagInformation() advapi32.I_QueryTagInformation -@ stub I_ScBroadcastServiceControlMessage -@ stdcall I_ScIsSecurityProcess() advapi32.I_ScIsSecurityProcess -@ stdcall I_ScPnPGetServiceName() advapi32.I_ScPnPGetServiceName -@ stub I_ScQueryServiceConfig -@ stub I_ScRpcBindA -@ stub I_ScRpcBindW -@ stub I_ScSendPnPMessage -@ stdcall I_ScSendTSMessage() advapi32.I_ScSendTSMessage -@ stub I_ScValidatePnPService -@ stub NotifyServiceStatusChangeA -@ stdcall OpenSCManagerA() advapi32.OpenSCManagerA -@ stdcall OpenServiceA() advapi32.OpenServiceA -@ stdcall QueryServiceConfig2A() advapi32.QueryServiceConfig2A -@ stdcall QueryServiceConfigA() advapi32.QueryServiceConfigA -@ stdcall QueryServiceStatus() advapi32.QueryServiceStatus -@ stdcall RegisterServiceCtrlHandlerA() advapi32.RegisterServiceCtrlHandlerA -@ stdcall RegisterServiceCtrlHandlerExA() advapi32.RegisterServiceCtrlHandlerExA -@ stdcall RegisterServiceCtrlHandlerW() advapi32.RegisterServiceCtrlHandlerW -@ stdcall StartServiceA() advapi32.StartServiceA -@ stdcall StartServiceCtrlDispatcherA() advapi32.StartServiceCtrlDispatcherA diff --git a/dll/apisets/api-ms-win-service-winsvc-l1-2-0.spec b/dll/apisets/api-ms-win-service-winsvc-l1-2-0.spec deleted file mode 100644 index 8cff2bcb9a4..00000000000 --- a/dll/apisets/api-ms-win-service-winsvc-l1-2-0.spec +++ /dev/null @@ -1,19 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall ChangeServiceConfig2A() advapi32.ChangeServiceConfig2A -@ stdcall ChangeServiceConfigA() advapi32.ChangeServiceConfigA -@ stdcall ControlService() advapi32.ControlService -@ stub ControlServiceExA -@ stdcall CreateServiceA() advapi32.CreateServiceA -@ stub NotifyServiceStatusChangeA -@ stdcall OpenSCManagerA() advapi32.OpenSCManagerA -@ stdcall OpenServiceA() advapi32.OpenServiceA -@ stdcall QueryServiceConfig2A() advapi32.QueryServiceConfig2A -@ stdcall QueryServiceConfigA() advapi32.QueryServiceConfigA -@ stdcall QueryServiceStatus() advapi32.QueryServiceStatus -@ stdcall RegisterServiceCtrlHandlerA() advapi32.RegisterServiceCtrlHandlerA -@ stdcall RegisterServiceCtrlHandlerExA() advapi32.RegisterServiceCtrlHandlerExA -@ stdcall RegisterServiceCtrlHandlerW() advapi32.RegisterServiceCtrlHandlerW -@ stdcall StartServiceA() advapi32.StartServiceA -@ stdcall StartServiceCtrlDispatcherA() advapi32.StartServiceCtrlDispatcherA diff --git a/dll/apisets/api-ms-win-shcore-obsolete-l1-1-0.spec b/dll/apisets/api-ms-win-shcore-obsolete-l1-1-0.spec deleted file mode 100644 index b7e00b0c1ec..00000000000 --- a/dll/apisets/api-ms-win-shcore-obsolete-l1-1-0.spec +++ /dev/null @@ -1,6 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall -version=0xA00+ -arch=win32 CommandLineToArgvW() shell32.CommandLineToArgvW -@ stdcall -version=0xA00+ -arch=win32 SHStrDupA() shlwapi.SHStrDupA -@ stdcall -version=0xA00+ -arch=win32 SHStrDupW() shlwapi.SHStrDupW diff --git a/dll/apisets/api-ms-win-shcore-scaling-l1-1-1.spec b/dll/apisets/api-ms-win-shcore-scaling-l1-1-1.spec deleted file mode 100644 index 9fe4af23de3..00000000000 --- a/dll/apisets/api-ms-win-shcore-scaling-l1-1-1.spec +++ /dev/null @@ -1,12 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub GetDpiForMonitor -@ stub GetProcessDpiAwareness -@ stub GetScaleFactorForDevice -@ stub GetScaleFactorForMonitor -@ stub RegisterScaleChangeEvent -@ stub RegisterScaleChangeNotifications -@ stub RevokeScaleChangeNotifications -@ stub SetProcessDpiAwareness -@ stub UnregisterScaleChangeEvent diff --git a/dll/apisets/api-ms-win-shcore-stream-l1-1-0.spec b/dll/apisets/api-ms-win-shcore-stream-l1-1-0.spec deleted file mode 100644 index 74679a1f75f..00000000000 --- a/dll/apisets/api-ms-win-shcore-stream-l1-1-0.spec +++ /dev/null @@ -1,18 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub IStream_Copy -@ stdcall IStream_Read() shlwapi.IStream_Read -@ stub IStream_ReadStr -@ stdcall IStream_Reset() shlwapi.IStream_Reset -@ stdcall IStream_Size() shlwapi.IStream_Size -@ stdcall IStream_Write() shlwapi.IStream_Write -@ stub IStream_WriteStr -@ stdcall SHCreateMemStream() shlwapi.SHCreateMemStream -@ stdcall SHCreateStreamOnFileA() shlwapi.SHCreateStreamOnFileA -@ stdcall SHCreateStreamOnFileEx() shlwapi.SHCreateStreamOnFileEx -@ stdcall SHCreateStreamOnFileW() shlwapi.SHCreateStreamOnFileW -@ stdcall SHOpenRegStream2A() shlwapi.SHOpenRegStream2A -@ stdcall SHOpenRegStream2W() shlwapi.SHOpenRegStream2W -@ stdcall SHOpenRegStreamA() shlwapi.SHOpenRegStreamA -@ stdcall SHOpenRegStreamW() shlwapi.SHOpenRegStreamW diff --git a/dll/apisets/api-ms-win-shcore-thread-l1-1-0.spec b/dll/apisets/api-ms-win-shcore-thread-l1-1-0.spec deleted file mode 100644 index b8bfd731f5e..00000000000 --- a/dll/apisets/api-ms-win-shcore-thread-l1-1-0.spec +++ /dev/null @@ -1,11 +0,0 @@ - -# This file is autogenerated by update.py - -@ stub GetProcessReference -@ stdcall SHCreateThread() shlwapi.SHCreateThread -@ stdcall SHCreateThreadRef() shlwapi.SHCreateThreadRef -@ stub SHCreateThreadWithHandle -@ stdcall SHGetThreadRef() shlwapi.SHGetThreadRef -@ stdcall SHReleaseThreadRef() shlwapi.SHReleaseThreadRef -@ stdcall SHSetThreadRef() shlwapi.SHSetThreadRef -@ stub SetProcessReference diff --git a/dll/apisets/api-ms-win-shell-shellcom-l1-1-0.spec b/dll/apisets/api-ms-win-shell-shellcom-l1-1-0.spec deleted file mode 100644 index 5a7c2b039e7..00000000000 --- a/dll/apisets/api-ms-win-shell-shellcom-l1-1-0.spec +++ /dev/null @@ -1,4 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall SHCoCreateInstance() shell32.SHCoCreateInstance diff --git a/dll/apisets/api-ms-win-shell-shellfolders-l1-1-0.spec b/dll/apisets/api-ms-win-shell-shellfolders-l1-1-0.spec deleted file mode 100644 index ebd9309e473..00000000000 --- a/dll/apisets/api-ms-win-shell-shellfolders-l1-1-0.spec +++ /dev/null @@ -1,17 +0,0 @@ - -# This file is autogenerated by update.py - -@ stdcall PathCleanupSpec() shell32.PathCleanupSpec -@ stdcall PathIsExe() shell32.PathIsExe -@ stdcall SHCreateDirectoryExW() shell32.SHCreateDirectoryExW -@ stdcall SHGetDesktopFolder() shell32.SHGetDesktopFolder -@ stdcall SHGetFileInfoW() shell32.SHGetFileInfoW -@ stdcall SHGetFolderLocation() shell32.SHGetFolderLocation -@ stdcall SHGetFolderPathA() shell32.SHGetFolderPathA -@ stdcall SHGetFolderPathAndSubDirW() shell32.SHGetFolderPathAndSubDirW -@ stdcall SHGetFolderPathW() shell32.SHGetFolderPathW -@ stdcall SHGetInstanceExplorer() shell32.SHGetInstanceExplorer -@ stub SHGetKnownFolderPath -@ stdcall SHGetSpecialFolderPathA() shell32.SHGetSpecialFolderPathA -@ stdcall SHGetSpecialFolderPathW() shell32.SHGetSpecialFolderPathW -@ stub SHSetKnownFolderPath diff --git a/dll/apisets/update.py b/dll/apisets/update.py deleted file mode 100644 index 9ff10fe2408..00000000000 --- a/dll/apisets/update.py +++ /dev/null @@ -1,505 +0,0 @@ -''' -PROJECT: ReactOS apisets generator -LICENSE: MIT (https://spdx.org/licenses/MIT) -PURPOSE: Create apiset forwarders based on Wine apisets -COPYRIGHT: Copyright 2017,2018 Mark Jansen (mark.jansen@reactos.org) -''' - -import os -import re -import sys -from collections import defaultdict -import subprocess - - -SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) - -NL_CHAR = '\n' - -IGNORE_OPTIONS = ('-norelay', '-ret16', '-ret64', '-register', '-private', - '-noname', '-ordinal', '-i386', '-arch=', '-stub', '-version=') - -# Figure these out later -FUNCTION_BLACKLIST = [ - # api-ms-win-crt-utility-l1-1-0_stubs.c(6): - # error C2169: '_abs64': intrinsic function, cannot be defined - '_abs64', - '_byteswap_uint64', '_byteswap_ulong', '_byteswap_ushort', - '_rotl64', '_rotr64', -] - -SPEC_HEADER = [ - '\n', - '# This file is autogenerated by update.py\n', - '\n' -] - -ALIAS_DLL = { - 'ucrtbase': 'msvcrt', - 'kernelbase': 'kernel32', - 'shcore': 'shlwapi', - 'combase': 'ole32', - - # These modules cannot be linked against in ROS, so forward it - 'cfgmgr32': 'setupapi', # Forward everything - 'wmi': 'advapi32', # Forward everything -} - -class InvalidSpecError(Exception): - def __init__(self, message): - Exception.__init__(self, message) - -class Arch(object): - none = 0 - i386 = 1 - x86_64 = 2 - arm = 4 - arm64 = 8 - Any = i386 | x86_64 | arm | arm64 - - FROM_STR = { - 'i386': i386, - 'x86_64': x86_64, - 'arm': arm, - 'arm64': arm64, - 'any': Any, - 'win32': i386, - 'win64': x86_64, - } - - TO_STR = { - i386: 'i386', - x86_64: 'x86_64', - arm: 'arm', - arm64: 'arm64', - } - - def __init__(self, initial=none): - self._val = initial - - def add(self, text): - self._val |= sum([Arch.FROM_STR[arch] for arch in text.split(',')]) - assert self._val != 0 - - def has(self, val): - return (self._val & val) != 0 - - def to_str(self): - arch_str = [] - for value in Arch.TO_STR: - if value & self._val: - arch_str.append(Arch.TO_STR[value]) - return ','.join(arch_str) - - def __len__(self): - return bin(self._val).count("1") - - def __add__(self, other): - return Arch(self._val | other._val) # pylint: disable=W0212 - - def __sub__(self, other): - return Arch(self._val & ~other._val) # pylint: disable=W0212 - - def __gt__(self, other): - return self._val > other._val # pylint: disable=W0212 - - def __lt__(self, other): - return self._val < other._val # pylint: disable=W0212 - - def __eq__(self, other): - return self._val == other._val # pylint: disable=W0212 - - def __ne__(self, other): - return not self.__eq__(other) - - -class VersionExpr(object): - def __init__(self, text): - self.text = text - self.parse() - - def parse(self): - pass - - def to_str(self): - if self.text: - return '-version={}'.format(self.text) - return '' - - -class SpecEntry(object): - def __init__(self, text, spec): - self.spec = spec - self._ord = None - self.callconv = None - self.name = None - self.arch = Arch() - self.version = None - self._forwarder = None - self.init(text) - self.noname = False - if self.name == '@': - self.noname = True - if self._forwarder: - self.name = self._forwarder[1] - - def init(self, text): - tokens = re.split(r'([\s\(\)#;])', text.strip()) - tokens = [token for token in tokens if token and not token.isspace()] - idx = [] - for comment in ['#', ';']: - if comment in tokens: - idx.append(tokens.index(comment)) - idx = sorted(idx) - if idx: - tokens = tokens[:idx[0]] - if not tokens: - raise InvalidSpecError(text) - self._ord = tokens[0] - assert self._ord == '@' or self._ord.isdigit(), text - tokens = tokens[1:] - self.callconv = tokens.pop(0) - self.name = tokens.pop(0) - while self.name.startswith(IGNORE_OPTIONS): - if self.name.startswith('-arch='): - self.arch.add(self.name[6:]) - elif self.name.startswith('-version='): - self.version = VersionExpr(self.name[9:]) - elif self.name == '-i386': - self.arch.add('i386') - self.name = tokens.pop(0) - if not self.arch: - self.arch = Arch(Arch.Any) - assert not self.name.startswith('-'), text - if not tokens: - return - if tokens[0] == '(': - assert ')' in tokens, text - arg = tokens.pop(0) - while True: - arg = tokens.pop(0) - if arg == ')': - break - if not tokens: - return - assert len(tokens) == 1, text - self._forwarder = tokens.pop(0).split('.', 2) - if len(self._forwarder) == 1: - self._forwarder = ['self', self._forwarder[0]] - assert len(self._forwarder) in (0, 2), self._forwarder - if self._forwarder[0] in ALIAS_DLL: - self._forwarder[0] = ALIAS_DLL[self._forwarder[0]] - - def resolve_forwarders(self, module_lookup, try_modules): - if self._forwarder: - assert self._forwarder[1] == self.name, '{}:{}'.format(self._forwarder[1], self.name) - if self.noname and self.name == '@': - return 0 # cannot search for this function - self._forwarder = [] - self.arch = Arch() - for module_name in try_modules: - assert module_name in module_lookup, module_name - module = module_lookup[module_name] - fwd_arch = module.find_arch(self.name) - callconv = module.find_callconv(self.name) - version = module.find_version(self.name) - if fwd_arch: - self.arch = fwd_arch - self._forwarder = [module_name, self.name] - self.callconv = callconv - self.version = version - return 1 - return 0 - - def extra_forwarders(self, function_lookup, module_lookup): - if self._forwarder: - return 1 - if self.noname and self.name == '@': - return 0 # cannot search for this function - lst = function_lookup.get(self.name, None) - if lst: - modules = list(set([func.spec.name for func in lst])) - if len(modules) > 1: - mod = None - arch = Arch() - for module in modules: - mod_arch = module_lookup[module].find_arch(self.name) - if mod is None or mod_arch > arch: - mod = module - arch = mod_arch - modules = [mod] - mod = modules[0] - self._forwarder = [mod, self.name] - mod = module_lookup[mod] - self.arch = mod.find_arch(self.name) - self.callconv = mod.find_callconv(self.name) - self.version = mod.find_version(self.name) - return 1 - return 0 - - def forwarder_module(self): - if self._forwarder: - return self._forwarder[0] - - def forwarder(self): - if self._forwarder: - return 1 - return 0 - - def write(self, spec_file): - name = self.name - opts = '' - estimate_size = 0 - if self.noname: - opts = '{} -noname'.format(opts) - if self.version: - opts = '{} {}'.format(opts, self.version.to_str()) - if self.name == '@': - assert self._ord != '@' - name = 'Ordinal' + self._ord - if not self._forwarder: - spec_file.write('{} stub{} {}{}'.format(self._ord, opts, name, NL_CHAR)) - estimate_size += 0x1000 - else: - assert self.arch != Arch(), self.name - args = '()' - callconv = 'stdcall' - fwd = '.'.join(self._forwarder) - name = self.name if not self.noname else '@' - arch = self.arch - if self.callconv == 'extern': - args = '' - callconv = 'extern -stub' # HACK - fwd += ' # the -stub is a HACK to fix VS < 2017 build!' - if arch != Arch(Arch.Any): - opts = '{} -arch={}'.format(opts, arch.to_str()) - spec_file.write('{ord} {cc}{opts} {name}{args} {fwd}{nl}'.format(ord=self._ord, - cc=callconv, - opts=opts, - name=name, - args=args, - fwd=fwd, - nl=NL_CHAR)) - estimate_size += 0x100 - return estimate_size - - - -class SpecFile(object): - def __init__(self, fullpath, name): - self._path = fullpath - self.name = name - self._entries = [] - self._functions = defaultdict(list) - self._estimate_size = 0 - - def parse(self): - with open(self._path, 'rb') as specfile: - for line in specfile.readlines(): - if line: - try: - entry = SpecEntry(line, self) - self._entries.append(entry) - self._functions[entry.name].append(entry) - except InvalidSpecError: - pass - return (sum([entry.forwarder() for entry in self._entries]), len(self._entries)) - - def add_functions(self, function_lookup): - for entry in self._entries: - function_lookup[entry.name].append(entry) - - def find(self, name): - return self._functions.get(name, None) - - def find_arch(self, name): - functions = self.find(name) - arch = Arch() - if functions: - for func in functions: - arch += func.arch - return arch - - def find_callconv(self, name): - functions = self.find(name) - callconv = None - if functions: - for func in functions: - if not callconv: - callconv = func.callconv - elif callconv != func.callconv: - assert callconv != 'extern', 'Cannot have data/function with same name' - callconv = func.callconv - return callconv - - def find_version(self, name): - functions = self.find(name) - version = None - if functions: - for func in functions: - if not func.version: - continue - if version: - assert version.text == func.version.text - version = func.version - return version - - def resolve_forwarders(self, module_lookup): - modules = self.forwarder_modules() - total = 0 - for entry in self._entries: - total += entry.resolve_forwarders(module_lookup, modules) - return (total, len(self._entries)) - - def extra_forwarders(self, function_lookup, module_lookup): - total = 0 - for entry in self._entries: - total += entry.extra_forwarders(function_lookup, module_lookup) - return (total, len(self._entries)) - - def forwarder_modules(self): - modules = defaultdict(int) - for entry in self._entries: - module = entry.forwarder_module() - if module: - modules[module] += 1 - return sorted(modules, key=modules.get, reverse=True) - - def write(self, spec_file): - written = set(FUNCTION_BLACKLIST) - self._estimate_size = 0 - for entry in self._entries: - if entry.name not in written: - self._estimate_size += entry.write(spec_file) - written.add(entry.name) - - def write_cmake(self, cmakelists, baseaddress): - seen = set() - # ntdll is linked against everything, self = internal, - # we cannot link cfgmgr32 and wmi? - ignore = ['ntdll', 'self', 'cfgmgr32', 'wmi'] - forwarders = self.forwarder_modules() - fwd_strings = [x for x in forwarders if not (x in seen or x in ignore or seen.add(x))] - fwd_strings = ' '.join(fwd_strings) - name = self.name - baseaddress = '0x{:8x}'.format(baseaddress) - cmakelists.write('add_apiset({} {} {}){}'.format(name, baseaddress, fwd_strings, NL_CHAR)) - return self._estimate_size - - - -def generate_specnames(dll_dir): - win32 = os.path.join(dll_dir, 'win32') - for dirname in os.listdir(win32): - fullpath = os.path.join(win32, dirname, dirname + '.spec') - if not os.path.isfile(fullpath): - if '.' in dirname: - fullpath = os.path.join(win32, dirname, dirname.rsplit('.', 1)[0] + '.spec') - if not os.path.isfile(fullpath): - continue - else: - continue - yield (fullpath, dirname) - # Special cases - yield (os.path.join(dll_dir, 'ntdll', 'def', 'ntdll.spec'), 'ntdll') - yield (os.path.join(dll_dir, 'appcompat', 'apphelp', 'apphelp.spec'), 'apphelp') - yield (os.path.join(dll_dir, '..', 'win32ss', 'user', 'user32', 'user32.spec'), 'user32') - yield (os.path.join(dll_dir, '..', 'win32ss', 'gdi', 'gdi32', 'gdi32.spec'), 'gdi32') - yield (os.path.join(dll_dir, '..', 'win32ss', 'gdi', 'gdi32_vista', 'gdi32_vista.spec'), 'gdi32_vista') - -def run(wineroot): - global NL_CHAR - wine_apisets = [] - ros_modules = [] - - module_lookup = {} - function_lookup = defaultdict(list) - - version = subprocess.check_output(["git", "describe"], cwd=wineroot).strip() - - print 'Reading Wine apisets for', version - wine_apiset_path = os.path.join(wineroot, 'dlls') - for dirname in os.listdir(wine_apiset_path): - if not dirname.startswith('api-'): - continue - if not os.path.isdir(os.path.join(wine_apiset_path, dirname)): - continue - fullpath = os.path.join(wine_apiset_path, dirname, dirname + '.spec') - spec = SpecFile(fullpath, dirname) - wine_apisets.append(spec) - - print 'Parsing Wine apisets,', - total = (0, 0) - for apiset in wine_apisets: - total = tuple(map(sum, zip(apiset.parse(), total))) - print 'found', total[0], '/', total[1], 'forwarders' - - print 'Reading ReactOS modules' - for fullpath, dllname in generate_specnames(os.path.dirname(SCRIPT_DIR)): - spec = SpecFile(fullpath, dllname) - ros_modules.append(spec) - - print 'Parsing ReactOS modules' - for module in ros_modules: - module.parse() - assert module.name not in module_lookup, module.name - module_lookup[module.name] = module - module.add_functions(function_lookup) - - print 'First pass, resolving forwarders,', - total = (0, 0) - for apiset in wine_apisets: - total = tuple(map(sum, zip(apiset.resolve_forwarders(module_lookup), total))) - print 'found', total[0], '/', total[1], 'forwarders' - - print 'Second pass, searching extra forwarders,', - total = (0, 0) - for apiset in wine_apisets: - total = tuple(map(sum, zip(apiset.extra_forwarders(function_lookup, module_lookup), total))) - print 'found', total[0], '/', total[1], 'forwarders' - - with open(os.path.join(SCRIPT_DIR, 'CMakeLists.txt.in'), 'rb') as template: - cmake_template = template.read() - cmake_template = cmake_template.replace('%WINE_GIT_VERSION%', version) - # Detect the checkout newline settings - if '\r\n' in cmake_template: - NL_CHAR = '\r\n' - - manifest_files = [] - print 'Writing apisets' - spec_header = [line.replace('\n', NL_CHAR) for line in SPEC_HEADER] - for apiset in wine_apisets: - with open(os.path.join(SCRIPT_DIR, apiset.name + '.spec'), 'wb') as out_spec: - out_spec.writelines(spec_header) - apiset.write(out_spec) - manifest_files.append(' '.format(apiset.name)) - - print 'Generating manifest' - manifest_name = 'x86_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef.manifest' - with open(os.path.join(SCRIPT_DIR, manifest_name + '.in'), 'rb') as template: - manifest_template = template.read() - manifest_template = manifest_template.replace('%WINE_GIT_VERSION%', version) - file_list = '\r\n'.join(manifest_files) - manifest_template = manifest_template.replace('%MANIFEST_FILE_LIST%', file_list) - with open(os.path.join(SCRIPT_DIR, manifest_name), 'wb') as manifest: - manifest.write(manifest_template) - - print 'Writing CMakeLists.txt' - baseaddress = 0x60000000 - with open(os.path.join(SCRIPT_DIR, 'CMakeLists.txt'), 'wb') as cmakelists: - cmakelists.write(cmake_template) - for apiset in wine_apisets: - baseaddress += apiset.write_cmake(cmakelists, baseaddress) - baseaddress += (0x10000 - baseaddress) % 0x10000 - print 'Done' - -def main(paths): - for path in paths: - if path: - run(path) - return - print 'No path specified,' - print 'either pass it as argument, or set the environment variable "WINE_SRC_ROOT"' - -if __name__ == '__main__': - main(sys.argv[1:] + [os.environ.get('WINE_SRC_ROOT')]) diff --git a/dll/apisets/x86_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef.manifest b/dll/apisets/x86_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef.manifest deleted file mode 100644 index 83a4aaa0b7a..00000000000 --- a/dll/apisets/x86_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef.manifest +++ /dev/null @@ -1,220 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dll/apisets/x86_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef.manifest.in b/dll/apisets/x86_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef.manifest.in deleted file mode 100644 index 8044a2ed96d..00000000000 --- a/dll/apisets/x86_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef.manifest.in +++ /dev/null @@ -1,6 +0,0 @@ - - - - -%MANIFEST_FILE_LIST% - diff --git a/dll/ntdll/CMakeLists.txt b/dll/ntdll/CMakeLists.txt index f416bb85ed7..5daf7ae7e1e 100644 --- a/dll/ntdll/CMakeLists.txt +++ b/dll/ntdll/CMakeLists.txt @@ -21,7 +21,7 @@ add_library(rtl_um OBJECT rtl/libsupp.c rtl/uilist.c rtl/version.c) -target_link_libraries(rtl_um ${PSEH_LIB}) +target_link_libraries(rtl_um apisets ${PSEH_LIB}) add_dependencies(rtl_um psdk) list(APPEND SOURCE diff --git a/dll/ntdll/include/ntdllp.h b/dll/ntdll/include/ntdllp.h index cb5b6cad02f..bd5cc9ea91c 100644 --- a/dll/ntdll/include/ntdllp.h +++ b/dll/ntdll/include/ntdllp.h @@ -96,6 +96,17 @@ NTSTATUS NTAPI LdrpWalkImportDescriptor(IN LPWSTR DllPath OPTIONAL, IN PLDR_DATA_TABLE_ENTRY LdrEntry); +/* libsupp.c */ +NTSYSAPI +NTSTATUS +NTAPI +LdrpApplyFileNameRedirection( + _In_ PUNICODE_STRING OriginalName, + _In_ PUNICODE_STRING Extension, + _Inout_opt_ PUNICODE_STRING StaticString, + _Inout_opt_ PUNICODE_STRING DynamicString, + _Inout_ PUNICODE_STRING *NewName, + _Inout_ PBOOLEAN RedirectedDll); /* ldrutils.c */ NTSTATUS diff --git a/dll/ntdll/ldr/ldrapi.c b/dll/ntdll/ldr/ldrapi.c index 8ef6dc25903..a688385cc3a 100644 --- a/dll/ntdll/ldr/ldrapi.c +++ b/dll/ntdll/ldr/ldrapi.c @@ -316,7 +316,7 @@ LdrLoadDll( _Out_ PVOID *BaseAddress) { WCHAR StringBuffer[MAX_PATH]; - UNICODE_STRING DllString1, DllString2; + UNICODE_STRING StaticString, DynamicString; BOOLEAN RedirectedDll = FALSE; NTSTATUS Status; ULONG_PTR Cookie; @@ -324,32 +324,10 @@ LdrLoadDll( PTEB Teb = NtCurrentTeb(); /* Initialize the strings */ - RtlInitEmptyUnicodeString(&DllString1, StringBuffer, sizeof(StringBuffer)); - RtlInitEmptyUnicodeString(&DllString2, NULL, 0); - - /* Check if the SxS Assemblies specify another file */ - Status = RtlDosApplyFileIsolationRedirection_Ustr(TRUE, - DllName, - &LdrApiDefaultExtension, - &DllString1, - &DllString2, - &DllName, - NULL, - NULL, - NULL); - - /* Check success */ - if (NT_SUCCESS(Status)) - { - /* Let Ldrp know */ - RedirectedDll = TRUE; - } - else if (Status != STATUS_SXS_KEY_NOT_FOUND) - { - /* Unrecoverable SxS failure; did we get a string? */ - if (DllString2.Buffer) RtlFreeUnicodeString(&DllString2); - return Status; - } + RtlInitEmptyUnicodeString(&StaticString, StringBuffer, sizeof(StringBuffer)); + RtlInitEmptyUnicodeString(&DynamicString, NULL, 0); + + Status = LdrpApplyFileNameRedirection(DllName, &LdrApiDefaultExtension, &StaticString, &DynamicString, &DllName, &RedirectedDll); /* Lock the loader lock */ LdrLockLoaderLock(LDR_LOCK_LOADER_LOCK_FLAG_RAISE_ON_ERRORS, NULL, &Cookie); @@ -432,7 +410,8 @@ LdrLoadDll( _SEH2_END; /* Do we have a redirect string? */ - if (DllString2.Buffer) RtlFreeUnicodeString(&DllString2); + if (DynamicString.Buffer) + RtlFreeUnicodeString(&DynamicString); /* Return */ return Status; @@ -532,7 +511,7 @@ LdrGetDllHandleEx( { NTSTATUS Status; PLDR_DATA_TABLE_ENTRY LdrEntry; - UNICODE_STRING RedirectName, DllString1, RawDllName; + UNICODE_STRING RedirectName, DynamicString, RawDllName; PUNICODE_STRING pRedirectName, CompareName; PWCHAR p1, p2, p3; BOOLEAN Locked, RedirectedDll; @@ -540,7 +519,7 @@ LdrGetDllHandleEx( ULONG LoadFlag, Length; /* Initialize the strings */ - RtlInitEmptyUnicodeString(&DllString1, NULL, 0); + RtlInitEmptyUnicodeString(&DynamicString, NULL, 0); RtlInitEmptyUnicodeString(&RawDllName, NULL, 0); RedirectName = *DllName; pRedirectName = &RedirectName; @@ -573,32 +552,13 @@ LdrGetDllHandleEx( Locked = TRUE; } - /* Check if the SxS Assemblies specify another file */ - Status = RtlDosApplyFileIsolationRedirection_Ustr(TRUE, - pRedirectName, - &LdrApiDefaultExtension, - NULL, - &DllString1, - &pRedirectName, - NULL, - NULL, - NULL); - - /* Check success */ - if (NT_SUCCESS(Status)) - { - /* Let Ldrp know */ - RedirectedDll = TRUE; - } - else if (Status != STATUS_SXS_KEY_NOT_FOUND) + Status = LdrpApplyFileNameRedirection( + pRedirectName, &LdrApiDefaultExtension, NULL, &DynamicString, &pRedirectName, &RedirectedDll); + if (!NT_SUCCESS(Status)) { - /* Unrecoverable SxS failure */ + DPRINT1("LdrpApplyFileNameRedirection FAILED: (Status 0x%x)\n", Status); goto Quickie; } - else - { - ASSERT(pRedirectName == &RedirectName); - } /* Set default failure code */ Status = STATUS_DLL_NOT_FOUND; @@ -781,7 +741,7 @@ LdrGetDllHandleEx( } /* Free string if needed */ - if (DllString1.Buffer) RtlFreeUnicodeString(&DllString1); + if (DynamicString.Buffer) RtlFreeUnicodeString(&DynamicString); /* Free the raw DLL Name if needed */ if (RawDllName.Buffer) diff --git a/dll/ntdll/ldr/ldrpe.c b/dll/ntdll/ldr/ldrpe.c index 19d00f35e80..a09362ca4d3 100644 --- a/dll/ntdll/ldr/ldrpe.c +++ b/dll/ntdll/ldr/ldrpe.c @@ -876,26 +876,13 @@ LdrpLoadImportModule(IN PWSTR DllPath OPTIONAL, } /* Check if the SxS Assemblies specify another file */ - Status = RtlDosApplyFileIsolationRedirection_Ustr(TRUE, - ImpDescName, - &LdrApiDefaultExtension, - NULL, - &RedirectedImpDescName, - &ImpDescName, - NULL, - NULL, - NULL); - - /* Check success */ - if (NT_SUCCESS(Status)) - { - /* Let Ldrp know */ - RedirectedDll = TRUE; - } - else if (Status != STATUS_SXS_KEY_NOT_FOUND) + Status = LdrpApplyFileNameRedirection( + ImpDescName, &LdrApiDefaultExtension, NULL, &RedirectedImpDescName, &ImpDescName, &RedirectedDll); + + if (!NT_SUCCESS(Status)) { /* Unrecoverable SxS failure */ - DPRINT1("LDR: RtlDosApplyFileIsolationRedirection_Ustr failed with status %x for dll %wZ\n", Status, ImpDescName); + DPRINT1("LDR: LdrpApplyFileNameRedirection failed with status %x for dll %wZ\n", Status, ImpDescName); goto done; } @@ -1151,23 +1138,13 @@ LdrpSnapThunk(IN PVOID ExportBase, RtlInitEmptyUnicodeString(&StaticString, StringBuffer, sizeof(StringBuffer)); /* Check if the SxS Assemblies specify another file */ - Status = RtlDosApplyFileIsolationRedirection_Ustr(TRUE, - &TempUString, - &LdrApiDefaultExtension, - &StaticString, - NULL, - &RedirectedImportName, - NULL, - NULL, - NULL); - if (NT_SUCCESS(Status)) + Status = LdrpApplyFileNameRedirection( + &TempUString, &LdrApiDefaultExtension, &StaticString, NULL, &RedirectedImportName, &Redirected); + + if (NT_SUCCESS(Status) && Redirected) { if (ShowSnaps) - { DPRINT1("LDR: %Z got redirected to %wZ\n", &ForwarderName, RedirectedImportName); - } - /* Let Ldrp know */ - Redirected = TRUE; } else { diff --git a/dll/ntdll/ldr/ldrutils.c b/dll/ntdll/ldr/ldrutils.c index 1c67c8dccd4..e46bb3446dd 100644 --- a/dll/ntdll/ldr/ldrutils.c +++ b/dll/ntdll/ldr/ldrutils.c @@ -187,29 +187,20 @@ LdrpUpdateLoadCount3(IN PLDR_DATA_TABLE_ENTRY LdrEntry, RedirectedImportName = ImportNameUnic; /* Check if the SxS Assemblies specify another file */ - Status = RtlDosApplyFileIsolationRedirection_Ustr(TRUE, - ImportNameUnic, - &LdrApiDefaultExtension, - UpdateString, - NULL, - &RedirectedImportName, - NULL, - NULL, - NULL); + Status = LdrpApplyFileNameRedirection( + ImportNameUnic, &LdrApiDefaultExtension, UpdateString, NULL, &RedirectedImportName, + &RedirectedDll); /* Check success */ - if (NT_SUCCESS(Status)) + if (NT_SUCCESS(Status) && RedirectedDll) { - /* Let Ldrp know */ if (ShowSnaps) { DPRINT1("LDR: %Z got redirected to %wZ\n", &ImportNameAnsi, RedirectedImportName); } - - RedirectedDll = TRUE; } - if (RedirectedDll || Status == STATUS_SXS_KEY_NOT_FOUND) + if (NT_SUCCESS(Status)) { if (LdrpCheckForLoadedDll(NULL, RedirectedImportName, @@ -251,7 +242,7 @@ LdrpUpdateLoadCount3(IN PLDR_DATA_TABLE_ENTRY LdrEntry, else { /* Unrecoverable SxS failure */ - DPRINT1("LDR: RtlDosApplyFileIsolationRedirection_Ustr failed with status %x for dll %wZ\n", Status, ImportNameUnic); + DPRINT1("LDR: LdrpApplyFileNameRedirection failed with status %x for dll %wZ\n", Status, ImportNameUnic); } } @@ -270,27 +261,20 @@ LdrpUpdateLoadCount3(IN PLDR_DATA_TABLE_ENTRY LdrEntry, RedirectedImportName = ImportNameUnic; /* Check if the SxS Assemblies specify another file */ - Status = RtlDosApplyFileIsolationRedirection_Ustr(TRUE, - ImportNameUnic, - &LdrApiDefaultExtension, - UpdateString, - NULL, - &RedirectedImportName, - NULL, - NULL, - NULL); + Status = LdrpApplyFileNameRedirection( + ImportNameUnic, &LdrApiDefaultExtension, UpdateString, NULL, &RedirectedImportName, + &RedirectedDll); + /* Check success */ - if (NT_SUCCESS(Status)) + if (NT_SUCCESS(Status) && RedirectedDll) { if (ShowSnaps) { DPRINT1("LDR: %Z got redirected to %wZ\n", &ImportNameAnsi, RedirectedImportName); } - /* Let Ldrp know */ - RedirectedDll = TRUE; } - if (RedirectedDll || Status == STATUS_SXS_KEY_NOT_FOUND) + if (NT_SUCCESS(Status)) { if (LdrpCheckForLoadedDll(NULL, RedirectedImportName, @@ -332,7 +316,7 @@ LdrpUpdateLoadCount3(IN PLDR_DATA_TABLE_ENTRY LdrEntry, else { /* Unrecoverable SxS failure */ - DPRINT1("LDR: RtlDosApplyFileIsolationRedirection_Ustr failed with status %x for dll %wZ\n", Status, ImportNameUnic); + DPRINT1("LDR: LdrpApplyFileNameRedirection failed with status %x for dll %wZ\n", Status, ImportNameUnic); } } @@ -376,28 +360,19 @@ LdrpUpdateLoadCount3(IN PLDR_DATA_TABLE_ENTRY LdrEntry, RedirectedImportName = ImportNameUnic; /* Check if the SxS Assemblies specify another file */ - Status = RtlDosApplyFileIsolationRedirection_Ustr(TRUE, - ImportNameUnic, - &LdrApiDefaultExtension, - UpdateString, - NULL, - &RedirectedImportName, - NULL, - NULL, - NULL); + Status = LdrpApplyFileNameRedirection( + ImportNameUnic, &LdrApiDefaultExtension, UpdateString, NULL, &RedirectedImportName, &RedirectedDll); + /* Check success */ - if (NT_SUCCESS(Status)) + if (NT_SUCCESS(Status) && RedirectedDll) { if (ShowSnaps) { DPRINT1("LDR: %Z got redirected to %wZ\n", &ImportNameAnsi, RedirectedImportName); } - - /* Let Ldrp know */ - RedirectedDll = TRUE; } - if (RedirectedDll || Status == STATUS_SXS_KEY_NOT_FOUND) + if (NT_SUCCESS(Status)) { if (LdrpCheckForLoadedDll(NULL, RedirectedImportName, @@ -440,9 +415,8 @@ LdrpUpdateLoadCount3(IN PLDR_DATA_TABLE_ENTRY LdrEntry, else { /* Unrecoverable SxS failure */ - DPRINT1("LDR: RtlDosApplyFileIsolationRedirection_Ustr failed for dll %wZ\n", ImportNameUnic); + DPRINT1("LDR: LdrpApplyFileNameRedirection failed for dll %wZ\n", ImportNameUnic); } - } /* Go to the next entry */ diff --git a/dll/ntdll/rtl/libsupp.c b/dll/ntdll/rtl/libsupp.c index 18bac9a7b25..f4a1bbdbd49 100644 --- a/dll/ntdll/rtl/libsupp.c +++ b/dll/ntdll/rtl/libsupp.c @@ -10,6 +10,8 @@ /* INCLUDES *****************************************************************/ #include +#include +#include #define NDEBUG #include @@ -861,7 +863,8 @@ RtlDosApplyFileIsolationRedirection_Ustr(IN ULONG Flags, return STATUS_SXS_KEY_NOT_FOUND; } - if (NtCurrentPeb()->ProcessParameters && + if ((Flags & RTL_DOS_APPLY_FILE_REDIRECTION_USTR_FLAG_RESPECT_DOT_LOCAL) && + NtCurrentPeb()->ProcessParameters && (NtCurrentPeb()->ProcessParameters->Flags & RTL_USER_PROCESS_PARAMETERS_PRIVATE_DLL_PATH)) { UNICODE_STRING RealName, LocalName; @@ -990,6 +993,170 @@ RtlDosApplyFileIsolationRedirection_Ustr(IN ULONG Flags, return Status; } +#ifndef TAG_USTR +#define TAG_USTR 'RTSU' +#endif +#ifndef RtlpAllocateStringMemory +#define RtlpAllocateStringMemory(Bytes, Tag) RtlpAllocateMemory(Bytes, Tag) +#endif + +static DWORD +LdrpApisetVersion(VOID) +{ + static DWORD CachedApisetVersion = ~0u; + + if (CachedApisetVersion == ~0u) + { + DWORD CompatVersion = RosGetProcessCompatVersion(); + + switch (CompatVersion) + { + case 0: + break; + case _WIN32_WINNT_VISTA: + /* No apisets in vista yet*/ + CachedApisetVersion = 0; + break; + case _WIN32_WINNT_WIN7: + CachedApisetVersion = APISET_WIN7; + DPRINT1("Activating apisets for Win7\n"); + break; + case _WIN32_WINNT_WIN8: + CachedApisetVersion = APISET_WIN8; + DPRINT1("Activating apisets for Win8\n"); + break; + case _WIN32_WINNT_WINBLUE: + CachedApisetVersion = APISET_WIN81; + DPRINT1("Activating apisets for Win8.1\n"); + break; + case _WIN32_WINNT_WIN10: + CachedApisetVersion = APISET_WIN10; + DPRINT1("Activating apisets for Win10\n"); + break; + default: + DPRINT1("Unknown version 0x%x\n", CompatVersion); + CachedApisetVersion = 0; + break; + } + } + + return CachedApisetVersion; +} + +NTSYSAPI +NTSTATUS +NTAPI +LdrpApplyFileNameRedirection( + _In_ PUNICODE_STRING OriginalName, + _In_ PUNICODE_STRING Extension, + _Inout_opt_ PUNICODE_STRING StaticString, + _Inout_opt_ PUNICODE_STRING DynamicString, + _Inout_ PUNICODE_STRING *NewName, + _Out_ PBOOLEAN RedirectedDll) +{ + + /* Check for invalid parameters */ + if (!OriginalName) + { + return STATUS_INVALID_PARAMETER; + } + + if (!DynamicString && !StaticString) + { + return STATUS_INVALID_PARAMETER; + } + + if (!NewName) + { + return STATUS_INVALID_PARAMETER; + } + + *RedirectedDll = FALSE; + + PCUNICODE_STRING PrevNewName = *NewName; + UNICODE_STRING ApisetName = {0}; + NTSTATUS Status = STATUS_SUCCESS; + + DWORD ApisetVersion = LdrpApisetVersion(); + if (ApisetVersion) + { + Status = ApiSetResolveToHost(ApisetVersion, OriginalName, RedirectedDll, &ApisetName); + if (!NT_SUCCESS(Status)) + { + DPRINT1("ApiSetResolveToHost FAILED: (Status 0x%x)\n", Status); + return Status; + } + } + + if (*RedirectedDll) + { + UNICODE_STRING NtSystemRoot; + static const UNICODE_STRING System32 = RTL_CONSTANT_STRING(L"\\System32\\"); + PUNICODE_STRING ResultPath = NULL; + + /* This is an apiset we can use */ + RtlInitUnicodeString(&NtSystemRoot, SharedUserData->NtSystemRoot); + + SIZE_T Needed = System32.Length + ApisetName.Length + NtSystemRoot.Length + sizeof(UNICODE_NULL); + + if (StaticString && StaticString->MaximumLength >= (USHORT)Needed) + { + StaticString->Length = 0; + ResultPath = StaticString; + } + else if (DynamicString) + { + DynamicString->Buffer = RtlpAllocateStringMemory(Needed, TAG_USTR); + if (DynamicString->Buffer == NULL) + { + DPRINT1("LdrpApplyFileNameRedirection out of memory\n"); + return STATUS_NO_MEMORY; + } + DynamicString->MaximumLength = (USHORT)Needed; + DynamicString->Length = 0; + + ResultPath = DynamicString; + } + else + { + DPRINT1("ERROR: LdrpApplyFileNameRedirection no inputbuffer valid\n"); + return STATUS_INVALID_PARAMETER; + } + + RtlAppendUnicodeStringToString(ResultPath, &NtSystemRoot); + RtlAppendUnicodeStringToString(ResultPath, &System32); + RtlAppendUnicodeStringToString(ResultPath, &ApisetName); + DPRINT1("ApiSetResolveToHost redirected %wZ to %wZ\n", OriginalName, ResultPath); + *NewName = ResultPath; + } + else + { + /* Check if the SxS Assemblies specify another file */ + Status = RtlDosApplyFileIsolationRedirection_Ustr(RTL_DOS_APPLY_FILE_REDIRECTION_USTR_FLAG_RESPECT_DOT_LOCAL, OriginalName, Extension, StaticString, DynamicString, NewName, NULL, NULL, NULL); + + /* Check success */ + if (NT_SUCCESS(Status)) + { + /* Let Ldrp know */ + *RedirectedDll = TRUE; + } + else if (Status == STATUS_SXS_KEY_NOT_FOUND) + { + ASSERT(*NewName == PrevNewName); + Status = STATUS_SUCCESS; + } + else + { + /* Unrecoverable SxS failure; did we get a string? */ + if (DynamicString && DynamicString->Buffer) + RtlFreeUnicodeString(DynamicString); + return Status; + } + } + + return Status; +} + /* * @implemented */ diff --git a/media/CMakeLists.txt b/media/CMakeLists.txt index 699d2ff141a..f050a686180 100644 --- a/media/CMakeLists.txt +++ b/media/CMakeLists.txt @@ -14,4 +14,3 @@ add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/drivers/etc/protocol DESTINATION re add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/drivers/etc/services DESTINATION reactos/system32/drivers/etc FOR all) add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/systemcompatible.manifest DESTINATION reactos/winsxs/manifests FOR all) -add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/forwardcompatible.manifest DESTINATION reactos/winsxs/manifests FOR all) diff --git a/media/forwardcompatible.manifest b/media/forwardcompatible.manifest deleted file mode 100644 index 638f7f639cd..00000000000 --- a/media/forwardcompatible.manifest +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/modules/rostests/apitests/CMakeLists.txt b/modules/rostests/apitests/CMakeLists.txt index 9986da77a07..7302666c064 100644 --- a/modules/rostests/apitests/CMakeLists.txt +++ b/modules/rostests/apitests/CMakeLists.txt @@ -7,6 +7,7 @@ add_subdirectory(acpi) add_subdirectory(advapi32) add_subdirectory(advpack) add_subdirectory(afd) +add_subdirectory(apisets) add_subdirectory(apphelp) add_subdirectory(appshim) add_subdirectory(atl) diff --git a/modules/rostests/apitests/apisets/CMakeLists.txt b/modules/rostests/apitests/apisets/CMakeLists.txt new file mode 100644 index 00000000000..178451c5011 --- /dev/null +++ b/modules/rostests/apitests/apisets/CMakeLists.txt @@ -0,0 +1,6 @@ + +add_executable(apisets_apitest apisets.c testlist.c) +set_module_type(apisets_apitest win32cui) +target_link_libraries(apisets_apitest apisets) +add_importlibs(apisets_apitest msvcrt kernel32 ntdll) +add_rostests_file(TARGET apisets_apitest) diff --git a/modules/rostests/apitests/apisets/apisets.c b/modules/rostests/apitests/apisets/apisets.c new file mode 100644 index 00000000000..0ae43ee003c --- /dev/null +++ b/modules/rostests/apitests/apisets/apisets.c @@ -0,0 +1,95 @@ +/* + * PROJECT: ReactOS API tests + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: Validate the apiset lookup in ApiSetResolveToHost + * COPYRIGHT: Copyright 2024 Mark Jansen + */ + +#include +#include +#include +#include "apisetsp.h" + +static void +resolve_single(PCUNICODE_STRING Apiset) +{ + UNICODE_STRING Tmp = {0}; + NTSTATUS Status = RtlDuplicateUnicodeString(RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE, Apiset, &Tmp); + ok_ntstatus(Status, STATUS_SUCCESS); + + BOOLEAN Resolved = FALSE; + UNICODE_STRING Result = {0}; + + Status = ApiSetResolveToHost(~0u, &Tmp, &Resolved, &Result); + ok_ntstatus(Status, STATUS_SUCCESS); + ok_eq_bool(Resolved, TRUE); + ok(Result.Buffer != NULL, "Got NULL\n"); +} + +static void +resolve_fail_single(PCUNICODE_STRING Apiset) +{ + UNICODE_STRING Tmp = {0}; + NTSTATUS Status = RtlDuplicateUnicodeString(RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE, Apiset, &Tmp); + ok_ntstatus(Status, STATUS_SUCCESS); + + BOOLEAN Resolved = FALSE; + UNICODE_STRING Result = {0, 0, (PWSTR)0xbadbeef}; + + Status = ApiSetResolveToHost(~0u, &Tmp, &Resolved, &Result); + ok_ntstatus(Status, STATUS_SUCCESS); + ok_eq_bool(Resolved, FALSE); + ok_ptr(Result.Buffer, (PWSTR)0xbadbeef); +} + +static void +test_single(PCUNICODE_STRING Apiset) +{ + winetest_push_context("%S", Apiset->Buffer); + resolve_single(Apiset); + winetest_pop_context(); +} + +static void +fail_single(PCUNICODE_STRING Apiset) +{ + winetest_push_context("%S", Apiset->Buffer); + resolve_fail_single(Apiset); + winetest_pop_context(); +} + + +START_TEST(apisets) +{ + // Ensure we can find some manually selected ones (both with and without extension): + UNICODE_STRING Console1 = RTL_CONSTANT_STRING(L"api-MS-Win-Core-Console-L1-1-0.dll"); + UNICODE_STRING Console2 = RTL_CONSTANT_STRING(L"api-MS-Win-Core-Console-L1-1-0"); + UNICODE_STRING Handle1 = RTL_CONSTANT_STRING(L"api-MS-Win-Core-Handle-L1-1-0.dll"); + UNICODE_STRING Handle2 = RTL_CONSTANT_STRING(L"api-MS-Win-Core-Handle-L1-1-0"); + UNICODE_STRING Heap1 = RTL_CONSTANT_STRING(L"api-MS-Win-Core-Heap-L1-1-0.dll"); + UNICODE_STRING Heap2 = RTL_CONSTANT_STRING(L"api-MS-Win-Core-Heap-L1-1-0"); + + test_single(&Console1); + test_single(&Console2); + test_single(&Handle1); + test_single(&Handle2); + test_single(&Heap1); + test_single(&Heap2); + + // Walk the entire table, to ensure we can find each entry + for (DWORD n = 0; n < g_ApisetsCount; ++n) + { + PCUNICODE_STRING Apiset = &g_Apisets[n].Name; + winetest_push_context("%ld: %S", n, Apiset->Buffer); + resolve_single(Apiset); + winetest_pop_context(); + } + + UNICODE_STRING Fail1 = RTL_CONSTANT_STRING(L""); + UNICODE_STRING Fail2 = RTL_CONSTANT_STRING(L"api-"); + UNICODE_STRING Fail3 = RTL_CONSTANT_STRING(L"ext"); + + fail_single(&Fail1); + fail_single(&Fail2); + fail_single(&Fail3); +} diff --git a/modules/rostests/apitests/apisets/testlist.c b/modules/rostests/apitests/apisets/testlist.c new file mode 100644 index 00000000000..96a2019df39 --- /dev/null +++ b/modules/rostests/apitests/apisets/testlist.c @@ -0,0 +1,11 @@ + +#define STANDALONE +#include + +extern void func_apisets(void); + +const struct test winetest_testlist[] = +{ + { "apisets", func_apisets }, + { 0, 0 } +}; diff --git a/sdk/cmake/CMakeMacros.cmake b/sdk/cmake/CMakeMacros.cmake index 802979c2422..ad5365b5f2e 100644 --- a/sdk/cmake/CMakeMacros.cmake +++ b/sdk/cmake/CMakeMacros.cmake @@ -207,8 +207,6 @@ macro(dir_to_num dir var) set(${var} 57) elseif(${dir} STREQUAL reactos/winsxs/x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.7601.23038_none_deadbeef) set(${var} 58) - elseif(${dir} STREQUAL reactos/winsxs/x86_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef) - set(${var} 59) elseif(${dir} STREQUAL reactos/bin/suppl) set(${var} 60) elseif(${dir} STREQUAL reactos/winsxs/x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.0.14393.0_none_deadbeef) @@ -229,8 +227,6 @@ macro(dir_to_num dir var) set(${var} 68) elseif(${dir} STREQUAL reactos/winsxs/amd64_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.7601.23038_none_deadbeef) set(${var} 69) - elseif(${dir} STREQUAL reactos/winsxs/amd64_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef) - set(${var} 70) elseif(${dir} STREQUAL reactos/winsxs/amd64_microsoft.windows.gdiplus_6595b64144ccf1df_1.0.14393.0_none_deadbeef) set(${var} 71) @@ -240,8 +236,6 @@ macro(dir_to_num dir var) set(${var} 73) elseif(${dir} STREQUAL reactos/winsxs/arm_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.7601.23038_none_deadbeef) set(${var} 74) - elseif(${dir} STREQUAL reactos/winsxs/arm_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef) - set(${var} 75) elseif(${dir} STREQUAL reactos/winsxs/arm_microsoft.windows.gdiplus_6595b64144ccf1df_1.0.14393.0_none_deadbeef) set(${var} 76) @@ -251,8 +245,6 @@ macro(dir_to_num dir var) set(${var} 78) elseif(${dir} STREQUAL reactos/winsxs/arm64_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.7601.23038_none_deadbeef) set(${var} 79) - elseif(${dir} STREQUAL reactos/winsxs/arm64_reactos.apisets_6595b64144ccf1df_1.0.0.0_none_deadbeef) - set(${var} 80) elseif(${dir} STREQUAL reactos/winsxs/arm64_microsoft.windows.gdiplus_6595b64144ccf1df_1.0.14393.0_none_deadbeef) set(${var} 81) diff --git a/sdk/lib/CMakeLists.txt b/sdk/lib/CMakeLists.txt index 78958dd3de0..21540af06a5 100644 --- a/sdk/lib/CMakeLists.txt +++ b/sdk/lib/CMakeLists.txt @@ -6,6 +6,7 @@ add_subdirectory(inflib) if(CMAKE_CROSSCOMPILING) add_subdirectory(3rdparty) +add_subdirectory(apisets) add_subdirectory(cicero) add_subdirectory(comsupp) add_subdirectory(conutils) diff --git a/sdk/lib/apisets/CMakeLists.txt b/sdk/lib/apisets/CMakeLists.txt new file mode 100644 index 00000000000..ffcb30b4198 --- /dev/null +++ b/sdk/lib/apisets/CMakeLists.txt @@ -0,0 +1,13 @@ + +add_library(apisets + apisets.c + apisets.h + apisetsp.h + + # Generated file: + apisets.table.c +) + +target_include_directories(apisets INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}) +target_compile_definitions(apisets PRIVATE _NTSYSTEM_) +add_dependencies(apisets psdk) diff --git a/sdk/lib/apisets/apisets.c b/sdk/lib/apisets/apisets.c new file mode 100644 index 00000000000..245dbf53cda --- /dev/null +++ b/sdk/lib/apisets/apisets.c @@ -0,0 +1,92 @@ +/* + * PROJECT: ReactOS apisets + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: Resolving the apiset to a ReactOS system dll + * COPYRIGHT: Copyright 2024 Mark Jansen + */ + +#include +#include +#include "apisetsp.h" + + +const ULONGLONG API_ = (ULONGLONG)0x2D004900500041; /// L"API-" +const ULONGLONG EXT_ = (ULONGLONG)0x2D005400580045; /// L"EXT-"; + +WORD PrefixSize = sizeof(L"api-") - sizeof(WCHAR); +WORD ExtensionSize = sizeof(L".dll") - sizeof(WCHAR); + + +// The official prototype according to the Windows kit 8.1 is: +//NTSTATUS +//ApiSetResolveToHost ( +// _In_ PCAPI_SET_NAMESPACE_ARRAY Schema, +// _In_ PCUNICODE_STRING FileNameIn, +// _In_opt_ PCUNICODE_STRING ParentName, +// _Out_ PBOOLEAN Resolved, +// _Out_ PUNICODE_STRING HostBinary +// ); + + +NTSTATUS +ApiSetResolveToHost( + _In_ DWORD ApisetVersion, + _In_ PCUNICODE_STRING ApiToResolve, + _Out_ PBOOLEAN Resolved, + _Out_ PUNICODE_STRING Output +) +{ + if (ApiToResolve->Length < PrefixSize) + { + *Resolved = FALSE; + return STATUS_SUCCESS; + } + + // Grab the first four chars from the string, converting the first 3 to uppercase + PWSTR ApiSetNameBuffer = ApiToResolve->Buffer; + ULONGLONG ApiSetNameBufferPrefix = ((ULONGLONG *)ApiSetNameBuffer)[0] & 0xFFFFFFDFFFDFFFDF; + // Check if it matches either 'api-' or 'ext-' + if (!(ApiSetNameBufferPrefix == API_ || ApiSetNameBufferPrefix == EXT_)) + { + *Resolved = FALSE; + return STATUS_SUCCESS; + } + + // If there is an extension, cut it off (we store apisets without extension) + UNICODE_STRING Tmp = *ApiToResolve; + const WCHAR *Extension = Tmp.Buffer + (Tmp.Length - ExtensionSize) / sizeof(WCHAR); + if (!_wcsnicmp(Extension, L".dll", ExtensionSize / sizeof(WCHAR))) + Tmp.Length -= ExtensionSize; + + // Binary search the apisets + // Ideally we should use bsearch here, but that drags in another dependency and we do not want that here. + LONG UBnd = g_ApisetsCount - 1; + LONG LBnd = 0; + while (LBnd <= UBnd) + { + LONG Index = (UBnd - LBnd) / 2 + LBnd; + + LONG result = RtlCompareUnicodeString(&Tmp, &g_Apisets[Index].Name, TRUE); + if (result == 0) + { + // Check if this version is included + if (g_Apisets[Index].dwOsVersions & ApisetVersion) + { + // Return a static string (does not have to be freed) + *Resolved = TRUE; + *Output = g_Apisets[Index].Target; + } + return STATUS_SUCCESS; + } + else if (result < 0) + { + UBnd = Index - 1; + } + else + { + LBnd = Index + 1; + } + } + *Resolved = FALSE; + return STATUS_SUCCESS; +} diff --git a/sdk/lib/apisets/apisets.h b/sdk/lib/apisets/apisets.h new file mode 100644 index 00000000000..a1f0efc0688 --- /dev/null +++ b/sdk/lib/apisets/apisets.h @@ -0,0 +1,31 @@ +/* + * PROJECT: ReactOS apisets + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: Interface for resolving the apisets + * COPYRIGHT: Copyright 2024 Mark Jansen + */ +#ifndef APISETS_H +#define APISETS_H + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#define APISET_WIN7 (1 << 0) +#define APISET_WIN8 (1 << 1) +#define APISET_WIN81 (1 << 2) +#define APISET_WIN10 (1 << 3) +//#define APISET_WIN11 (1 << 4) + + +NTSTATUS +ApiSetResolveToHost(_In_ DWORD ApisetVersion, _In_ PCUNICODE_STRING ApiToResolve, _Out_ PBOOLEAN Resolved, _Out_ PUNICODE_STRING Output); + +#ifdef __cplusplus +} +#endif + + +#endif // APISETS_H diff --git a/sdk/lib/apisets/apisets.table.c b/sdk/lib/apisets/apisets.table.c new file mode 100644 index 00000000000..bc352128b70 --- /dev/null +++ b/sdk/lib/apisets/apisets.table.c @@ -0,0 +1,1263 @@ +/* + * PROJECT: ReactOS apisets + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: Autogenerated table of all apisets + * COPYRIGHT: Copyright 2024 Mark Jansen + */ + +#include +#include +#include "apisetsp.h" + +const ROS_APISET g_Apisets[] = { + { RTL_CONSTANT_STRING(L"api-ms-onecoreuap-print-render-l1-1-0"), RTL_CONSTANT_STRING(L"printrenderapihost.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-advapi32-auth-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-advapi32-encryptedfile-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-advapi32-eventingcontroller-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-advapi32-eventlog-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-advapi32-idletask-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-advapi32-lsa-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-advapi32-msi-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-advapi32-ntmarta-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-advapi32-psm-app-l1-1-0"), RTL_CONSTANT_STRING(L"twinapi.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-advapi32-registry-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-advapi32-safer-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-advapi32-shutdown-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN8 | APISET_WIN81 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-appmodel-deployment-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-appmodel-identity-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-appmodel-identity-l1-2-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernel.appcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-appmodel-runtime-internal-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 }, // kernel.appcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-appmodel-runtime-internal-l1-1-7"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernel.appcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-appmodel-runtime-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-appmodel-runtime-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 }, // kernel.appcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-appmodel-runtime-l1-1-3"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernel.appcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-appmodel-state-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-appmodel-state-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 }, // kernel.appcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-appmodel-state-l1-1-2"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernel.appcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-appmodel-state-l1-2-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernel.appcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-appmodel-unlock-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernel.appcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-appxdeploymentclient-appxdeploy-l1-1-0"), RTL_CONSTANT_STRING(L"appxdeploymentclient.dll"), APISET_WIN81 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-audiocore-pal-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-authz-claimpolicies-l1-1-0"), RTL_CONSTANT_STRING(L"authz.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-authz-context-l1-1-0"), RTL_CONSTANT_STRING(L"authz.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-authz-remote-l1-1-0"), RTL_CONSTANT_STRING(L"logoncli.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-base-bootconfig-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-base-util-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-biometrics-winbio-l1-1-0"), RTL_CONSTANT_STRING(L"winbio.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-bluetooth-deviceassociation-l1-1-0"), RTL_CONSTANT_STRING(L"deviceassociation.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-branding-winbrand-l1-1-0"), RTL_CONSTANT_STRING(L"winbrand.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-cluster-clusapi-l1-1-0"), RTL_CONSTANT_STRING(L"clusapi.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-cluster-clusapi-l1-1-1"), RTL_CONSTANT_STRING(L"clusapi.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-cluster-resutils-l1-1-0"), RTL_CONSTANT_STRING(L"resutils.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-cmd-util-l1-1-0"), RTL_CONSTANT_STRING(L"cmdext.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-cng-rng-l1-1-0"), RTL_CONSTANT_STRING(L"bcryptprimitives.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-com-clbcatq-l1-1-0"), RTL_CONSTANT_STRING(L"clbcatq.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-com-ole32-l1-1-0"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-com-ole32-l1-1-1"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-com-psmregister-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-composition-redirection-l1-1-0"), RTL_CONSTANT_STRING(L"dwmredir.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-composition-windowmanager-l1-1-0"), RTL_CONSTANT_STRING(L"udwm.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-containers-cmclient-l1-1-1"), RTL_CONSTANT_STRING(L"cmclient.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-containers-cmclient-l1-2-0"), RTL_CONSTANT_STRING(L"cmclient.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-containers-cmdiagclient-l1-1-0"), RTL_CONSTANT_STRING(L"cmclient.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-containers-cmservicingclient-l1-1-0"), RTL_CONSTANT_STRING(L"cmclient.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-apiquery-l1-1-0"), RTL_CONSTANT_STRING(L"ntdll.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-apiquery-l1-1-1"), RTL_CONSTANT_STRING(L"ntdll.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-apiquery-l2-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-appcompat-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-appcompat-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-appinit-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-atoms-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-backgroundtask-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-bem-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + // { RTL_CONSTANT_STRING(L"api-ms-win-core-bi-service-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-bicltapi-l1-1-0"), RTL_CONSTANT_STRING(L"bi.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-bicltapi-l1-1-1"), RTL_CONSTANT_STRING(L"bi.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-bicltapi-l1-1-5"), RTL_CONSTANT_STRING(L"bi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-biplmapi-l1-1-0"), RTL_CONSTANT_STRING(L"twinapi.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-biplmapi-l1-1-1"), RTL_CONSTANT_STRING(L"twinapi.appcore.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-biplmapi-l1-1-5"), RTL_CONSTANT_STRING(L"twinapi.appcore.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-biptcltapi-l1-1-0"), RTL_CONSTANT_STRING(L"twinapi.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-biptcltapi-l1-1-1"), RTL_CONSTANT_STRING(L"twinapi.appcore.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-biptcltapi-l1-1-7"), RTL_CONSTANT_STRING(L"twinapi.appcore.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-calendar-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-com-l1-1-0"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN8 | APISET_WIN81 }, // combase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-com-l1-1-1"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN81 }, // combase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-com-l1-1-3"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN10 }, // combase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-com-l2-1-1"), RTL_CONSTANT_STRING(L"coml2.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-com-midlproxystub-l1-1-0"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN10 }, // combase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-com-private-l1-1-0"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN8 | APISET_WIN81 }, // combase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-com-private-l1-1-1"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN10 }, // combase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-com-private-l1-2-0"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN10 }, // combase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-com-private-l1-3-0"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN10 }, // combase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-comm-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-comm-l1-1-2"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-console-ansi-l2-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-console-internal-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-Console-L1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-console-l1-2-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-console-l2-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-console-l2-2-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-console-l3-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-console-l3-2-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-crt-l1-1-0"), RTL_CONSTANT_STRING(L"ntdll.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-crt-l2-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-DateTime-L1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-datetime-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-datetime-l1-1-2"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-Debug-L1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-debug-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-debug-l1-1-2"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-debug-minidump-l1-1-0"), RTL_CONSTANT_STRING(L"dbgcore.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-DelayLoad-L1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-delayload-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-enclave-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-ErrorHandling-L1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-errorhandling-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-errorhandling-l1-1-3"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-featurestaging-l1-1-1"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN10 }, // shcore.dll + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-Fibers-L1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-fibers-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-fibers-l2-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-fibers-l2-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-file-ansi-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-file-ansi-l2-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-file-fromapp-l1-1-0"), RTL_CONSTANT_STRING(L"windows.storage.onecore.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-File-L1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-file-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-file-l1-2-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-file-l1-2-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-file-l1-2-3"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-file-l2-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-file-l2-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-file-l2-1-3"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-firmware-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-guard-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-Handle-L1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-Heap-L1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-heap-l1-2-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-heap-l2-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-heap-obsolete-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-Interlocked-L1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-interlocked-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-interlocked-l1-2-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-IO-L1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-io-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-job-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-job-l2-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-job-l2-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-kernel32-legacy-ansi-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-kernel32-legacy-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-kernel32-legacy-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-kernel32-legacy-l1-1-6"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-kernel32-private-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-kernel32-private-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-kernel32-private-l1-1-2"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-largeinteger-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-LibraryLoader-L1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-libraryloader-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-libraryloader-l1-2-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-libraryloader-l1-2-2"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-libraryloader-l2-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-libraryloader-private-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-localization-ansi-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-Localization-L1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-localization-l1-2-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-localization-l1-2-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-localization-l1-2-4"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-localization-l2-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-localization-obsolete-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-localization-obsolete-l1-2-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-localization-obsolete-l1-3-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-localization-private-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-LocalRegistry-L1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-marshal-l1-1-0"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN10 }, // combase.dll + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-Memory-L1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-memory-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-memory-l1-1-2"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-memory-l1-1-7"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-Misc-L1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-multipleproviderrouter-l1-1-0"), RTL_CONSTANT_STRING(L"mpr.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-namedpipe-ansi-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-NamedPipe-L1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-namedpipe-l1-2-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-namedpipe-l1-2-2"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-namespace-ansi-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-namespace-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-normalization-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-path-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-pcw-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-perfcounters-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-perfcounters-l1-2-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-privateprofile-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-privateprofile-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-processenvironment-ansi-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-ProcessEnvironment-L1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-processenvironment-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-processenvironment-l1-2-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-processsecurity-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-processsnapshot-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-ProcessThreads-L1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-processthreads-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-processthreads-l1-1-2"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-processthreads-l1-1-4"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-processtopology-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-processtopology-l1-2-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-processtopology-obsolete-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-processtopology-obsolete-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-processtopology-private-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-Profile-L1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-psapi-ansi-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-psapi-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-psapi-obsolete-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-psapiansi-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-psm-app-l1-1-0"), RTL_CONSTANT_STRING(L"twinapi.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-psm-appnotify-l1-1-0"), RTL_CONSTANT_STRING(L"twinapi.appcore.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-psm-appnotify-l1-1-1"), RTL_CONSTANT_STRING(L"twinapi.appcore.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-psm-info-l1-1-0"), RTL_CONSTANT_STRING(L"appsruprov.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-psm-info-l1-1-1"), RTL_CONSTANT_STRING(L"appsruprov.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-psm-key-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-psm-key-l1-1-2"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-psm-plm-l1-1-0"), RTL_CONSTANT_STRING(L"twinapi.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-psm-plm-l1-1-1"), RTL_CONSTANT_STRING(L"twinapi.appcore.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-psm-plm-l1-1-3"), RTL_CONSTANT_STRING(L"twinapi.appcore.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-psm-plm-l1-2-0"), RTL_CONSTANT_STRING(L"twinapi.appcore.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-psm-plm-l1-3-0"), RTL_CONSTANT_STRING(L"twinapi.appcore.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-psm-rtimer-l1-1-1"), RTL_CONSTANT_STRING(L"twinapi.appcore.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-core-psm-service-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-psm-tc-l1-1-0"), RTL_CONSTANT_STRING(L"twinapi.appcore.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-psm-tc-l1-1-1"), RTL_CONSTANT_STRING(L"twinapi.appcore.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-quirks-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-quirks-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-realtime-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-realtime-l1-1-2"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-registry-fromapp-l1-1-0"), RTL_CONSTANT_STRING(L"reguwpapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-registry-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-registry-l1-1-2"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-registry-l2-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-registry-l2-2-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-registry-l2-3-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-registry-private-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-registryuserspecific-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-RtlSupport-L1-1-0"), RTL_CONSTANT_STRING(L"ntdll.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-rtlsupport-l1-1-1"), RTL_CONSTANT_STRING(L"ntdll.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-rtlsupport-l1-2-0"), RTL_CONSTANT_STRING(L"ntdll.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-rtlsupport-l1-2-1"), RTL_CONSTANT_STRING(L"ntdll.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-shlwapi-legacy-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-shlwapi-obsolete-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-shlwapi-obsolete-l1-2-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-shutdown-ansi-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-shutdown-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-shutdown-l1-1-1"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-sidebyside-ansi-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-sidebyside-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-slapi-l1-1-0"), RTL_CONSTANT_STRING(L"clipc.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-state-helpers-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-String-L1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-string-l2-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-string-l2-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-string-obsolete-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-string-obsolete-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-stringansi-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-stringloader-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-stringloader-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-synch-ansi-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-Synch-L1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-synch-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-synch-l1-2-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-synch-l1-2-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-SysInfo-L1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-sysinfo-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-sysinfo-l1-2-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-sysinfo-l1-2-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-sysinfo-l1-2-6"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-sysinfo-l2-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-systemtopology-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-systemtopology-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-textinput-client-l1-1-1"), RTL_CONSTANT_STRING(L"textinputframework.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-ThreadPool-L1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-threadpool-l1-2-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-threadpool-legacy-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-threadpool-private-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-timezone-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-timezone-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-timezone-private-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-toolhelp-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-toolhelp-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-UMS-L1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-url-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-Util-L1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-util-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-version-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-version-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-version-private-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-versionansi-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-versionansi-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-windowsceip-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-windowserrorreporting-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-windowserrorreporting-l1-1-3"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-winrt-error-l1-1-0"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN8 | APISET_WIN81 }, // combase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-winrt-error-l1-1-1"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN81 | APISET_WIN10 }, // combase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-winrt-errorprivate-l1-1-0"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN8 | APISET_WIN81 }, // combase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-winrt-errorprivate-l1-1-1"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN81 | APISET_WIN10 }, // combase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-winrt-l1-1-0"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // combase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-winrt-propertysetprivate-l1-1-0"), RTL_CONSTANT_STRING(L"wintypes.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-winrt-propertysetprivate-l1-1-1"), RTL_CONSTANT_STRING(L"wintypes.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-winrt-registration-l1-1-0"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // combase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-winrt-robuffer-l1-1-0"), RTL_CONSTANT_STRING(L"wintypes.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-winrt-roparameterizediid-l1-1-0"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // combase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-winrt-string-l1-1-0"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN8 | APISET_WIN81 }, // combase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-winrt-string-l1-1-1"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN10 }, // combase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-wow64-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-wow64-l1-1-3"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-MS-Win-Core-XState-L1-1-0"), RTL_CONSTANT_STRING(L"ntdll.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-xstate-l1-1-1"), RTL_CONSTANT_STRING(L"ntdll.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-xstate-l1-1-3"), RTL_CONSTANT_STRING(L"ntdll.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-core-xstate-l2-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-core-xstate-l2-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + // { RTL_CONSTANT_STRING(L"api-ms-win-coremessaging-host-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-coreui-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN8 | APISET_WIN81 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-coreui-secruntime-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-crt-conio-l1-1-0"), RTL_CONSTANT_STRING(L"msvcrt.dll"), APISET_WIN10 }, // ucrtbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-crt-convert-l1-1-0"), RTL_CONSTANT_STRING(L"msvcrt.dll"), APISET_WIN10 }, // ucrtbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-crt-environment-l1-1-0"), RTL_CONSTANT_STRING(L"msvcrt.dll"), APISET_WIN10 }, // ucrtbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-crt-filesystem-l1-1-0"), RTL_CONSTANT_STRING(L"msvcrt.dll"), APISET_WIN10 }, // ucrtbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-crt-heap-l1-1-0"), RTL_CONSTANT_STRING(L"msvcrt.dll"), APISET_WIN10 }, // ucrtbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-crt-locale-l1-1-0"), RTL_CONSTANT_STRING(L"msvcrt.dll"), APISET_WIN10 }, // ucrtbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-crt-math-l1-1-0"), RTL_CONSTANT_STRING(L"msvcrt.dll"), APISET_WIN10 }, // ucrtbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-crt-multibyte-l1-1-0"), RTL_CONSTANT_STRING(L"msvcrt.dll"), APISET_WIN10 }, // ucrtbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-crt-private-l1-1-0"), RTL_CONSTANT_STRING(L"msvcrt.dll"), APISET_WIN10 }, // ucrtbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-crt-process-l1-1-0"), RTL_CONSTANT_STRING(L"msvcrt.dll"), APISET_WIN10 }, // ucrtbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-crt-runtime-l1-1-0"), RTL_CONSTANT_STRING(L"msvcrt.dll"), APISET_WIN10 }, // ucrtbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-crt-stdio-l1-1-0"), RTL_CONSTANT_STRING(L"msvcrt.dll"), APISET_WIN10 }, // ucrtbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-crt-string-l1-1-0"), RTL_CONSTANT_STRING(L"msvcrt.dll"), APISET_WIN10 }, // ucrtbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-crt-time-l1-1-0"), RTL_CONSTANT_STRING(L"msvcrt.dll"), APISET_WIN10 }, // ucrtbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-crt-utility-l1-1-0"), RTL_CONSTANT_STRING(L"msvcrt.dll"), APISET_WIN10 }, // ucrtbase.dll + // { RTL_CONSTANT_STRING(L"api-ms-win-deprecated-apis-advapi-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-deprecated-apis-legacy-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-deprecated-apis-legacy-l1-2-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-deprecated-apis-obsolete-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-devices-config-l1-1-0"), RTL_CONSTANT_STRING(L"cfgmgr32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-devices-config-l1-1-1"), RTL_CONSTANT_STRING(L"cfgmgr32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-devices-config-l1-1-2"), RTL_CONSTANT_STRING(L"cfgmgr32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-devices-query-l1-1-0"), RTL_CONSTANT_STRING(L"cfgmgr32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-devices-query-l1-1-1"), RTL_CONSTANT_STRING(L"cfgmgr32.dll"), APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-devices-swdevice-l1-1-0"), RTL_CONSTANT_STRING(L"cfgmgr32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-devices-swdevice-l1-1-1"), RTL_CONSTANT_STRING(L"cfgmgr32.dll"), APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-domainjoin-netjoin-l1-1-0"), RTL_CONSTANT_STRING(L"netjoin.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-downlevel-advapi32-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-downlevel-advapi32-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-downlevel-advapi32-l2-1-0"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-downlevel-advapi32-l2-1-1"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-downlevel-advapi32-l3-1-0"), RTL_CONSTANT_STRING(L"ntmarta.dll"), APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-downlevel-advapi32-l4-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-downlevel-kernel32-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-downlevel-kernel32-l2-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-downlevel-normaliz-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-downlevel-ole32-l1-1-0"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // combase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-downlevel-ole32-l1-1-1"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN81 }, // combase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-downlevel-shell32-l1-1-0"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // shcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-downlevel-shlwapi-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-downlevel-shlwapi-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-downlevel-shlwapi-l2-1-0"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // shcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-downlevel-shlwapi-l2-1-1"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN81 }, // shcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-downlevel-user32-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-downlevel-user32-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-downlevel-version-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + // { RTL_CONSTANT_STRING(L"api-ms-win-dwmapi-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-dx-d3dkmt-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-dx-d3dkmt-l1-1-6"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-eventing-classicprovider-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-eventing-consumer-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-eventing-consumer-l1-1-1"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-eventing-controller-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-eventing-legacy-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-eventing-obsolete-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-eventing-provider-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-eventing-tdh-l1-1-1"), RTL_CONSTANT_STRING(L"tdh.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-eventlog-legacy-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-eventlog-private-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-firewallapi-webproxy-l1-1-0"), RTL_CONSTANT_STRING(L"firewallapi.dll"), APISET_WIN8 | APISET_WIN81 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-font-fontgroups-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-fs-clfs-l1-1-0"), RTL_CONSTANT_STRING(L"clfs.sys"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-fsutilext-ifsutil-l1-1-0"), RTL_CONSTANT_STRING(L"fsutilext.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-fsutilext-ulib-l1-1-0"), RTL_CONSTANT_STRING(L"fsutilext.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-fveapi-query-l1-1-0"), RTL_CONSTANT_STRING(L"fveapi.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-gaming-deviceinformation-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-gaming-expandedresources-l1-1-0"), RTL_CONSTANT_STRING(L"gamemode.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-gaming-tcui-l1-1-4"), RTL_CONSTANT_STRING(L"gamingtcui.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-gdi-dc-create-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-gdi-dc-create-l1-1-1"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-gdi-dc-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN8 }, + { RTL_CONSTANT_STRING(L"api-ms-win-gdi-dc-l1-2-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-gdi-devcaps-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-gdi-dpiinfo-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-gdi-draw-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-gdi-draw-l1-1-1"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-gdi-font-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-gdi-font-l1-1-1"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-gdi-ie-rgn-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN8 }, + { RTL_CONSTANT_STRING(L"api-ms-win-gdi-internal-uap-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN10 }, // gdi32full.dll + { RTL_CONSTANT_STRING(L"api-ms-win-gdi-metafile-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-gdi-metafile-l1-1-1"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-gdi-path-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-gdi-private-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-gdi-render-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-gdi-rgn-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-gdi-wcs-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-globalization-collation-l1-1-0"), RTL_CONSTANT_STRING(L"globcollationhost.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-globalization-input-l1-1-0"), RTL_CONSTANT_STRING(L"globinputhost.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-gpapi-grouppolicy-l1-1-0"), RTL_CONSTANT_STRING(L"gpapi.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-gpsvc-grouppolicy-l1-1-0"), RTL_CONSTANT_STRING(L"gpsvc.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-gui-dui70-l1-1-0"), RTL_CONSTANT_STRING(L"dui70.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-gui-uxinit-l1-1-0"), RTL_CONSTANT_STRING(L"uxinit.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ham-apphistory-l1-1-0"), RTL_CONSTANT_STRING(L"rmclient.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-http-time-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-imm-l1-1-0"), RTL_CONSTANT_STRING(L"imm32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-input-ie-interactioncontext-l1-1-0"), RTL_CONSTANT_STRING(L"ninput.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-kernel32-appcompat-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-kernel32-datetime-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-kernel32-elevation-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-kernel32-errorhandling-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-kernel32-file-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-kernel32-localization-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-kernel32-package-current-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-kernel32-package-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-kernel32-package-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 }, // kernel.appcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-kernel32-quirks-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-kernel32-registry-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-kernel32-sidebyside-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-kernel32-transacted-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-kernel32-windowserrorreporting-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-kernelbase-processthread-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-legacy-shlwapi-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + // { RTL_CONSTANT_STRING(L"api-ms-win-mf-pal-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-mf-winmm-l1-1-0"), RTL_CONSTANT_STRING(L"winmm.dll"), APISET_WIN8 }, // winmmbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-mm-joystick-l1-1-0"), RTL_CONSTANT_STRING(L"winmm.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // winmmbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-mm-mci-l1-1-0"), RTL_CONSTANT_STRING(L"winmm.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-mm-misc-l1-1-0"), RTL_CONSTANT_STRING(L"winmm.dll"), APISET_WIN8 | APISET_WIN81 }, // winmmbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-mm-misc-l1-1-1"), RTL_CONSTANT_STRING(L"winmm.dll"), APISET_WIN81 | APISET_WIN10 }, // winmmbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-mm-misc-l2-1-0"), RTL_CONSTANT_STRING(L"winmm.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-mm-mme-l1-1-0"), RTL_CONSTANT_STRING(L"winmm.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // winmmbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-mm-msacm-l1-1-0"), RTL_CONSTANT_STRING(L"msacm32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-mm-pehelper-l1-1-0"), RTL_CONSTANT_STRING(L"mf.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-mm-playsound-l1-1-0"), RTL_CONSTANT_STRING(L"winmm.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-mm-time-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-mm-wmdrmsdk-l1-1-0"), RTL_CONSTANT_STRING(L"wmdrmsdk.dll"), APISET_WIN8 | APISET_WIN81 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-mobilecore-boot-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN81 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-mobilecore-deviceinfo-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN81 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-mobilecore-ie-mediaengine-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN81 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-mobilecore-ie-textinput-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-mpr-multipleproviderrouter-l1-1-0"), RTL_CONSTANT_STRING(L"mprext.dll"), APISET_WIN8 | APISET_WIN81 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-mrmcorer-environment-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-mrmcorer-resmanager-l1-1-0"), RTL_CONSTANT_STRING(L"mrmcorer.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-msa-ui-l1-1-0"), RTL_CONSTANT_STRING(L"msauserext.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-msa-user-l1-1-0"), RTL_CONSTANT_STRING(L"msauserext.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-msiltcfg-msi-l1-1-0"), RTL_CONSTANT_STRING(L"msiltcfg.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-net-isoext-l1-1-0"), RTL_CONSTANT_STRING(L"firewallapi.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-net-isolation-l1-1-0"), RTL_CONSTANT_STRING(L"firewallapi.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-net-isolation-l1-1-1"), RTL_CONSTANT_STRING(L"firewallapi.dll"), APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-networking-interfacecontexts-l1-1-0"), RTL_CONSTANT_STRING(L"ondemandconnroutehelper.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-networking-wcmapi-l1-1-0"), RTL_CONSTANT_STRING(L"wcmapi.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-networking-winipsec-l1-1-0"), RTL_CONSTANT_STRING(L"winipsec.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-networking-wlanapi-l1-1-0"), RTL_CONSTANT_STRING(L"wlanapi.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-newdev-config-l1-1-0"), RTL_CONSTANT_STRING(L"newdev.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ngc-serialization-l1-1-1"), RTL_CONSTANT_STRING(L"ngckeyenum.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntdsa-activedirectoryserver-l1-1-0"), RTL_CONSTANT_STRING(L"ntdsa.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntdsapi-activedirectoryclient-l1-1-0"), RTL_CONSTANT_STRING(L"ntdsapi.dll"), APISET_WIN8 | APISET_WIN81 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-ntos-kcminitcfg-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN81 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-ntos-ksecurity-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN8 | APISET_WIN81 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-ntos-ksecurity-l1-1-1"), RTL_CONSTANT_STRING(L""), APISET_WIN81 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-ntos-ksigningpolicy-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN8 | APISET_WIN81 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-ntos-ksr-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN81 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-ntos-pico-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntos-tm-l1-1-0"), RTL_CONSTANT_STRING(L"tm.sys"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntos-werkernel-l1-1-0"), RTL_CONSTANT_STRING(L"werkernel.sys"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-caret-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-chartranslation-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-dc-access-ext-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-dc-access-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-dialogbox-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-dialogbox-l1-1-1"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-draw-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-draw-l1-1-1"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-gui-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-gui-l1-1-1"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-ie-caret-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-ie-clipboard-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-ie-gui-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-ie-keyboard-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-ie-message-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-ie-mouse-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-ie-window-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-ie-wmpointer-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-keyboard-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-keyboard-l1-1-1"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-menu-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-menu-l1-1-1"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-message-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-message-l1-1-1"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-misc-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-misc-l1-2-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-mouse-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-powermanagement-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-private-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-private-l1-1-1"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-rectangle-ext-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-rectangle-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-rotationmanager-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-server-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-string-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-synch-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-sysparams-ext-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-sysparams-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-touch-hittest-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-uicontext-ext-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-uicontext-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-window-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-window-l1-1-1"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-windowclass-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-windowclass-l1-1-1"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-windowstation-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ntuser-windowstation-l1-1-1"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-obsolete-localization-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-obsolete-psapi-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-obsolete-shlwapi-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-ole32-bindctx-l1-1-0"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ole32-clipboard-ie-l1-1-0"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN8 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ole32-ie-ext-l1-1-0"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ole32-ie-l1-1-0"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ole32-oleautomation-l1-1-0"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-oleacc-l1-1-0"), RTL_CONSTANT_STRING(L"oleacc.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-oobe-notification-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-perf-legacy-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-power-base-l1-1-0"), RTL_CONSTANT_STRING(L"powrprof.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-power-limitsmanagement-l1-1-0"), RTL_CONSTANT_STRING(L"powrprof.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-power-setting-l1-1-0"), RTL_CONSTANT_STRING(L"powrprof.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-power-setting-l1-1-1"), RTL_CONSTANT_STRING(L"powrprof.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-printer-winspool-l1-1-0"), RTL_CONSTANT_STRING(L"winspool.drv"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-printer-winspool-l1-1-1"), RTL_CONSTANT_STRING(L"winspool.drv"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-profile-profsvc-l1-1-0"), RTL_CONSTANT_STRING(L"profsvcext.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-profile-userenv-l1-1-0"), RTL_CONSTANT_STRING(L"profext.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ras-rasapi32-l1-1-0"), RTL_CONSTANT_STRING(L"rasapi32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ras-rasdlg-l1-1-0"), RTL_CONSTANT_STRING(L"rasdlg.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ras-rasman-l1-1-0"), RTL_CONSTANT_STRING(L"rasman.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ras-tapi32-l1-1-0"), RTL_CONSTANT_STRING(L"tapi32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-raschapext-eap-l1-1-0"), RTL_CONSTANT_STRING(L"raschapext.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-rastlsext-eap-l1-1-0"), RTL_CONSTANT_STRING(L"rastlsext.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-reinfo-query-l1-1-0"), RTL_CONSTANT_STRING(L"reinfo.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ro-typeresolution-l1-1-0"), RTL_CONSTANT_STRING(L"wintypes.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ro-typeresolution-l1-1-1"), RTL_CONSTANT_STRING(L"wintypes.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-rometadata-dispenser-l1-1-0"), RTL_CONSTANT_STRING(L"rometadata.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-rtcore-gdi-devcaps-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-rtcore-gdi-object-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-rtcore-gdi-rgn-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN81 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-rtcore-minuser-private-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN81 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-rtcore-minuser-private-l1-1-1"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-rtcore-navigation-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-rtcore-ntuser-clipboard-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-rtcore-ntuser-dc-access-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-rtcore-ntuser-dpi-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-rtcore-ntuser-draw-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-rtcore-ntuser-powermanagement-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-rtcore-ntuser-private-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-rtcore-ntuser-private-l1-1-10"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-rtcore-ntuser-shell-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-rtcore-ntuser-synch-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-rtcore-ntuser-sysparams-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-rtcore-ntuser-window-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-rtcore-ntuser-windowstation-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-rtcore-ntuser-winevent-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-rtcore-ntuser-wmpointer-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-rtcore-ntuser-wmpointer-l1-1-3"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-rtcore-ntuser-wmpointer-l1-2-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-rtcore-ole32-clipboard-l1-1-0"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-rtcore-ole32-clipboard-l1-1-1"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-rtcore-session-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN81 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-rtcore-session-l1-1-1"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-rtcore-session-l1-2-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-samsrv-accountstore-l1-1-0"), RTL_CONSTANT_STRING(L"samsrv.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-scesrv-server-l1-1-0"), RTL_CONSTANT_STRING(L"scesrv.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-secur32-translatename-l1-1-0"), RTL_CONSTANT_STRING(L"secur32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-accesshlpr-l1-1-0"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-activedirectoryclient-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-security-activedirectoryclient-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-security-appcontainer-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-security-audit-l1-1-0"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-audit-l1-1-1"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-base-ansi-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-MS-Win-Security-Base-L1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-security-base-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-security-base-l1-2-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-security-base-l1-2-2"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-security-base-private-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-security-base-private-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-security-capability-l1-1-1"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-cpwl-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-credentials-l1-1-0"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-credentials-l2-1-0"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-credentials-l2-1-1"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-credui-l1-1-0"), RTL_CONSTANT_STRING(L"credui.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-cryptoapi-l1-1-0"), RTL_CONSTANT_STRING(L"cryptsp.dll"), APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-cryptui-l1-1-0"), RTL_CONSTANT_STRING(L"cryptui.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-grouppolicy-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-security-isolatedcontainer-l1-1-1"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN10 }, // shcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-security-isolationapi-l1-1-0"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-isolationapi-l1-2-0"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-isolationpolicy-l1-1-0"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-isolationpolicy-l1-2-0"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-kerberos-l1-1-0"), RTL_CONSTANT_STRING(L"kerberos.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-logon-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-logon-l1-1-1"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-lsalookup-ansi-l2-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-MS-Win-Security-LSALookup-L1-1-0"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-lsalookup-l1-1-1"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-lsalookup-l1-1-2"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-lsalookup-l2-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-lsalookup-l2-1-1"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-lsapolicy-l1-1-0"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-lsapolicy-l1-1-1"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-provider-ansi-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-provider-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-sddl-ansi-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-MS-Win-Security-SDDL-L1-1-0"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-sddl-private-l1-1-0"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-sddlparsecond-l1-1-0"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-systemfunctions-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-trustee-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-trustee-l1-1-1"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-trustee-l1-1-2"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-security-vaultcli-l1-1-0"), RTL_CONSTANT_STRING(L"vaultcli.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-service-core-ansi-l1-1-1"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-MS-Win-Service-Core-L1-1-0"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-service-core-l1-1-1"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-service-core-l1-1-4"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-MS-Win-Service-Management-L1-1-0"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-MS-Win-Service-Management-L2-1-0"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-service-private-l1-1-0"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-service-private-l1-1-1"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-service-private-l1-1-5"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-service-private-l1-2-0"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-MS-Win-Service-winsvc-L1-1-0"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN7 | APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-service-winsvc-l1-2-0"), RTL_CONSTANT_STRING(L"sechost.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-session-userinit-l1-1-0"), RTL_CONSTANT_STRING(L"userinitext.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-session-usertoken-l1-1-0"), RTL_CONSTANT_STRING(L"wtsapi32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-session-wininit-l1-1-0"), RTL_CONSTANT_STRING(L"wininitext.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-session-winlogon-l1-1-0"), RTL_CONSTANT_STRING(L"winlogonext.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-session-winsta-l1-1-0"), RTL_CONSTANT_STRING(L"winsta.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-session-wtsapi32-l1-1-0"), RTL_CONSTANT_STRING(L"wtsapi32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-setupapi-cfgmgr32local-l1-1-0"), RTL_CONSTANT_STRING(L"setupapi.dll"), APISET_WIN8 }, + { RTL_CONSTANT_STRING(L"api-ms-win-setupapi-cfgmgr32remote-l1-1-0"), RTL_CONSTANT_STRING(L"setupapi.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-setupapi-classinstallers-l1-1-0"), RTL_CONSTANT_STRING(L"setupapi.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-setupapi-inf-l1-1-0"), RTL_CONSTANT_STRING(L"setupapi.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-setupapi-logging-l1-1-0"), RTL_CONSTANT_STRING(L"setupapi.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-shcore-comhelpers-l1-1-0"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // shcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-shcore-obsolete-l1-1-0"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // shcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-shcore-path-l1-1-0"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN10 }, // shcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-shcore-registry-l1-1-0"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN8 | APISET_WIN81 }, // shcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-shcore-registry-l1-1-1"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN81 | APISET_WIN10 }, // shcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-shcore-scaling-l1-1-0"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN8 | APISET_WIN81 }, // shcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-shcore-scaling-l1-1-1"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN81 }, // shcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-shcore-scaling-l1-1-2"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN10 }, // shcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-shcore-stream-l1-1-0"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // shcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-shcore-stream-winrt-l1-1-0"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // shcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-shcore-sysinfo-l1-1-0"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // shcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-shcore-taskpool-l1-1-0"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN10 }, // shcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-shcore-thread-l1-1-0"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // shcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-shcore-unicodeansi-l1-1-0"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // shcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-shell-associations-l1-1-1"), RTL_CONSTANT_STRING(L"windows.storage.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-shell-changenotify-l1-1-0"), RTL_CONSTANT_STRING(L"windows.storage.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-shell-dataobject-l1-1-0"), RTL_CONSTANT_STRING(L"windows.storage.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-shell-namespace-l1-1-0"), RTL_CONSTANT_STRING(L"windows.storage.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-shell-propsys-l1-1-0"), RTL_CONSTANT_STRING(L"propsys.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-shell-settingsync-l1-1-0"), RTL_CONSTANT_STRING(L"settingsyncpolicy.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-shell-shdirectory-l1-1-0"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN10 }, // shcore.dll + { RTL_CONSTANT_STRING(L"api-ms-win-shell-shell32-l1-1-0"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN8 }, + { RTL_CONSTANT_STRING(L"api-ms-win-shell-shell32-l1-2-0"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN81 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-shell-shell32legacy-shdirectory-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-shell-shellcom-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-shell-shellfolders-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-shell-shlwapi-l1-1-0"), RTL_CONSTANT_STRING(L"shlwapi.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-shell32-shellcom-l1-1-0"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-shell32-shellfolders-l1-1-0"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-shlwapi-ie-l1-1-0"), RTL_CONSTANT_STRING(L"shlwapi.dll"), APISET_WIN8 | APISET_WIN81 | APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-shlwapi-winrt-storage-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-shlwapi-winrt-storage-l1-1-1"), RTL_CONSTANT_STRING(L"shlwapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-smbshare-browser-l1-1-0"), RTL_CONSTANT_STRING(L"browser.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-smbshare-sscore-l1-1-0"), RTL_CONSTANT_STRING(L"sscoreext.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-spinf-inf-l1-1-0"), RTL_CONSTANT_STRING(L"spinf.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-stateseparation-helpers-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernelbase.dll + { RTL_CONSTANT_STRING(L"api-ms-win-storage-exports-external-l1-1-1"), RTL_CONSTANT_STRING(L"windows.storage.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-storage-exports-internal-l1-1-0"), RTL_CONSTANT_STRING(L"windows.storage.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-storage-iscsidsc-l1-1-0"), RTL_CONSTANT_STRING(L"iscsidsc.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-sxs-oleautomation-l1-1-0"), RTL_CONSTANT_STRING(L"sxs.dll"), APISET_WIN8 | APISET_WIN81 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-test-sys1-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN81 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-test-sys2-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-ttlsext-eap-l1-1-0"), RTL_CONSTANT_STRING(L"ttlsext.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-uiacore-l1-1-0"), RTL_CONSTANT_STRING(L"uiautomationcore.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-umpoext-umpo-l1-1-0"), RTL_CONSTANT_STRING(L"umpoext.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-usp10-l1-1-0"), RTL_CONSTANT_STRING(L"usp10.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-uxtheme-themes-l1-1-0"), RTL_CONSTANT_STRING(L"uxtheme.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-webio-pal-l1-1-0"), RTL_CONSTANT_STRING(L"webio.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-wer-reporting-l1-1-0"), RTL_CONSTANT_STRING(L"wer.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-wevtapi-eventlog-l1-1-0"), RTL_CONSTANT_STRING(L"wevtapi.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-winbici-l1-1-0"), RTL_CONSTANT_STRING(L"winbici.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-winhttp-pal-l1-1-0"), RTL_CONSTANT_STRING(L"winhttp.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-wininet-pal-l1-1-0"), RTL_CONSTANT_STRING(L"wininet.dll"), APISET_WIN8 | APISET_WIN81 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-winlogon-mincreds-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-winrt-search-folder-l1-1-0"), RTL_CONSTANT_STRING(L"windows.storage.search.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-winrt-storage-l1-1-0"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-wlan-grouppolicy-l1-1-0"), RTL_CONSTANT_STRING(L"wlgpclnt.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-wlan-onexui-l1-1-0"), RTL_CONSTANT_STRING(L"onexui.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-wlan-scard-l1-1-0"), RTL_CONSTANT_STRING(L"winscard.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-wsclient-devlicense-l1-1-0"), RTL_CONSTANT_STRING(L"wsclient.dll"), APISET_WIN8 | APISET_WIN81 }, + { RTL_CONSTANT_STRING(L"api-ms-win-wsl-api-l1-1-0"), RTL_CONSTANT_STRING(L"wslapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"api-ms-win-wwan-wwapi-l1-1-0"), RTL_CONSTANT_STRING(L"wwapi.dll"), APISET_WIN8 | APISET_WIN81 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-xaml-controls-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN81 }, + // { RTL_CONSTANT_STRING(L"api-ms-win-xaml-pal-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN81 }, + // { RTL_CONSTANT_STRING(L"ext-ms-mf-pal-l2-1-1"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-net-eap-sim-l1-1-0"), RTL_CONSTANT_STRING(L"eapsimextdesktop.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-net-vpn-soh-l1-1-0"), RTL_CONSTANT_STRING(L"vpnsohdesktop.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-onecore-appchromeapi-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-onecore-appdefaults-l1-1-0"), RTL_CONSTANT_STRING(L"windows.storage.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-onecore-appmodel-emclient-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-onecore-appmodel-emsvcs-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-onecore-appmodel-pacmanclient-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-onecore-appmodel-staterepository-cache-l1-1-2"), RTL_CONSTANT_STRING(L"windows.staterepositorycore.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-onecore-appmodel-staterepository-internal-l1-1-4"), RTL_CONSTANT_STRING(L"windows.staterepositoryclient.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-onecore-appmodel-tdlmigration-l1-1-1"), RTL_CONSTANT_STRING(L"tdlmigration.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-onecore-comp-dwmmonitor-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-onecore-dcomp-l1-1-0"), RTL_CONSTANT_STRING(L"dcomp.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-onecore-defaultdiscovery-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-onecore-hcap-svf-l1-1-0"), RTL_CONSTANT_STRING(L"svf.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-onecore-hlink-l1-1-0"), RTL_CONSTANT_STRING(L"hlink.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-onecore-hnetcfg-l1-1-0"), RTL_CONSTANT_STRING(L"hnetcfgclient.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-onecore-ipnathlp-l1-1-0"), RTL_CONSTANT_STRING(L"ipnathlpclient.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-onecore-mpc-input-l1-1-0"), RTL_CONSTANT_STRING(L"hologramcompositor.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-onecore-orientation-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-onecore-security-antitheft-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-onecore-service-devicedirectory-antitheft-l1-1-0"), RTL_CONSTANT_STRING(L"ddcantitheftapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-onecore-service-devicedirectory-claims-l1-1-0"), RTL_CONSTANT_STRING(L"ddcclaimsapi.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-onecore-shellchromeapi-l1-1-2"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-onecore-shellremindersapi-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-onecore-shlwapi-l1-1-0"), RTL_CONSTANT_STRING(L"shlwapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-onecore-spectrumsyncclient-l1-1-0"), RTL_CONSTANT_STRING(L"spectrumsyncclient.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-adsi-activeds-l1-1-0"), RTL_CONSTANT_STRING(L"activeds.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-advapi32-auth-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-advapi32-encryptedfile-l1-1-1"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-advapi32-eventlog-ansi-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-advapi32-eventlog-l1-1-1"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-advapi32-hwprof-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-advapi32-idletask-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-advapi32-lsa-l1-1-2"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-advapi32-msi-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-advapi32-npusername-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-advapi32-ntmarta-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-advapi32-psm-app-l1-1-0"), RTL_CONSTANT_STRING(L"twinapi.appcore.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-advapi32-registry-l1-1-1"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-advapi32-safer-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-advapi32-shutdown-l1-1-0"), RTL_CONSTANT_STRING(L"advapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-appcompat-aeinv-l1-1-0"), RTL_CONSTANT_STRING(L"aeinv.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-appcompat-aepic-l1-1-0"), RTL_CONSTANT_STRING(L"aepic.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-appcompat-apphelp-l1-1-2"), RTL_CONSTANT_STRING(L"apphelp.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-appcompat-pcacli-l1-1-0"), RTL_CONSTANT_STRING(L"pcacli.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-appmodel-activation-l1-1-1"), RTL_CONSTANT_STRING(L"activationmanager.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-appmodel-appcontainerpath-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-appmodel-appexecutionalias-l1-1-2"), RTL_CONSTANT_STRING(L"apisethost.appexecutionalias.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-appmodel-datasharingservice-extensions-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-appmodel-daxcore-l1-1-3"), RTL_CONSTANT_STRING(L"daxexec.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-appmodel-deployment-l1-1-1"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-appmodel-deploymentvolumes-l1-1-1"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-appmodel-opc-l1-1-0"), RTL_CONSTANT_STRING(L"opcservices.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-appmodel-restrictedappcontainer-internal-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernel.appcore.dll + { RTL_CONSTANT_STRING(L"ext-ms-win-appmodel-state-ext-l1-2-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernel.appcore.dll + // { RTL_CONSTANT_STRING(L"ext-ms-win-appmodel-usercontext-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-appmodel-viewscalefactor-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-appxdeploymentclient-appxdeploy-l1-1-1"), RTL_CONSTANT_STRING(L"appxdeploymentclient.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-appxdeploymentclient-appxdeployonecore-l1-1-1"), RTL_CONSTANT_STRING(L"appxdeploymentclient.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-audiocore-coreaudiopolicymanager-l1-1-0"), RTL_CONSTANT_STRING(L"coreaudiopolicymanagerext.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-audiocore-pal-l1-2-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-audiocore-policymanager-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-audiocore-spatial-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-authz-claimpolicies-l1-1-0"), RTL_CONSTANT_STRING(L"authz.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-authz-context-l1-1-0"), RTL_CONSTANT_STRING(L"authz.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-authz-remote-l1-1-0"), RTL_CONSTANT_STRING(L"logoncli.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-base-psapi-l1-1-0"), RTL_CONSTANT_STRING(L"psapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-base-rstrtmgr-l1-1-0"), RTL_CONSTANT_STRING(L"rstrtmgr.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-biometrics-winbio-core-l1-1-3"), RTL_CONSTANT_STRING(L"winbio.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-biometrics-winbio-l1-1-0"), RTL_CONSTANT_STRING(L"winbio.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-biometrics-winbio-l1-2-0"), RTL_CONSTANT_STRING(L"winbioext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-biometrics-winbio-l1-3-0"), RTL_CONSTANT_STRING(L"winbioext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-bluetooth-apis-l1-1-0"), RTL_CONSTANT_STRING(L"bluetoothapis.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-bluetooth-apis-private-l1-1-0"), RTL_CONSTANT_STRING(L"bluetoothapis.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-branding-winbrand-l1-1-2"), RTL_CONSTANT_STRING(L"winbrand.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-branding-winbrand-l1-2-0"), RTL_CONSTANT_STRING(L"winbrand.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-casting-device-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-casting-lockscreen-l1-1-0"), RTL_CONSTANT_STRING(L"miracastreceiverext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-casting-receiver-l1-1-1"), RTL_CONSTANT_STRING(L"hubuiext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-casting-shell-l1-1-0"), RTL_CONSTANT_STRING(L"castingshellext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ci-management-l1-1-1"), RTL_CONSTANT_STRING(L"manageci.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-ci-xbox-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-cloudap-tbal-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-clouddomainjoin-usermanagement-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-cluster-clusapi-l1-1-4"), RTL_CONSTANT_STRING(L"clusapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-cluster-resutils-l1-1-1"), RTL_CONSTANT_STRING(L"resutils.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-cmd-util-l1-1-0"), RTL_CONSTANT_STRING(L"cmdext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-cng-rng-l1-1-1"), RTL_CONSTANT_STRING(L"bcryptprimitives.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-com-apartmentrestriction-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-com-clbcatq-l1-1-0"), RTL_CONSTANT_STRING(L"clbcatq.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-com-coml2-l1-1-1"), RTL_CONSTANT_STRING(L"coml2.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-com-ole32-l1-1-5"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-com-ole32-l1-2-0"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-com-psmregister-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernel.appcore.dll + { RTL_CONSTANT_STRING(L"ext-ms-win-com-psmregister-l1-2-2"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernel.appcore.dll + { RTL_CONSTANT_STRING(L"ext-ms-win-com-psmregister-l1-3-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernel.appcore.dll + // { RTL_CONSTANT_STRING(L"ext-ms-win-com-suspendresiliency-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-composition-ghost-l1-1-0"), RTL_CONSTANT_STRING(L"dwmghost.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-composition-holographic-l1-1-0"), RTL_CONSTANT_STRING(L"hologramcompositor.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-composition-init-l1-1-0"), RTL_CONSTANT_STRING(L"dwminit.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-compositor-hosting-l1-1-1"), RTL_CONSTANT_STRING(L"ism.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-compositor-hosting-l1-2-1"), RTL_CONSTANT_STRING(L"ism.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-containers-policymanagercli-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-core-app-package-registration-l1-1-1"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-core-app-package-volume-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-core-container-init-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-core-dhcp6client-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-game-streaming-l1-1-0"), RTL_CONSTANT_STRING(L"gamestreamingext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-iuri-l1-1-0"), RTL_CONSTANT_STRING(L"urlmon.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-core-licensemanager-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-pkeyhelper-l1-1-0"), RTL_CONSTANT_STRING(L"pkeyhelper.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-psm-bi-l1-1-0"), RTL_CONSTANT_STRING(L"bisrv.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-core-psm-extendedresourcemode-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-psm-service-l1-1-5"), RTL_CONSTANT_STRING(L"psmserviceexthost.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-resourcemanager-l1-1-0"), RTL_CONSTANT_STRING(L"rmclient.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-resourcemanager-l1-2-1"), RTL_CONSTANT_STRING(L"rmclient.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-resourcepolicy-l1-1-2"), RTL_CONSTANT_STRING(L"resourcepolicyclient.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-resourcepolicyserver-l1-1-1"), RTL_CONSTANT_STRING(L"resourcepolicyserver.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-core-stateseparationext-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-storelicensing-l1-1-0"), RTL_CONSTANT_STRING(L"licensemanagerapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-storelicensing-l1-2-0"), RTL_CONSTANT_STRING(L"licensemanagerapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-base-export-l1-1-0"), RTL_CONSTANT_STRING(L"win32kbase.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-baseinit-l1-1-0"), RTL_CONSTANT_STRING(L"win32kbase.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-common-export-l1-1-0"), RTL_CONSTANT_STRING(L"win32kfull.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-common-input-l1-1-0"), RTL_CONSTANT_STRING(L"win32kfull.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-common-inputrim-l1-1-0"), RTL_CONSTANT_STRING(L"win32kfull.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-common-user-l1-1-0"), RTL_CONSTANT_STRING(L"win32kfull.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-dcomp-l1-1-0"), RTL_CONSTANT_STRING(L"win32kbase.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-ddccigdi-l1-1-0"), RTL_CONSTANT_STRING(L"win32kfull.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-dxgdi-l1-1-0"), RTL_CONSTANT_STRING(L"win32kfull.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-dxgk-l1-1-0"), RTL_CONSTANT_STRING(L"dxgkrnl.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-flipmgr-l1-1-0"), RTL_CONSTANT_STRING(L"dxgkrnl.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-full-export-l1-1-0"), RTL_CONSTANT_STRING(L"win32kfull.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-full-float-export-l1-1-0"), RTL_CONSTANT_STRING(L"win32kfull.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-fulldcompbase-l1-1-0"), RTL_CONSTANT_STRING(L"win32kbase.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-fulldwm-l1-1-0"), RTL_CONSTANT_STRING(L"win32kfull.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-fullgdi-l1-1-0"), RTL_CONSTANT_STRING(L"win32kfull.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-fulluser-l1-1-0"), RTL_CONSTANT_STRING(L"win32kfull.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-fulluser64-l1-1-0"), RTL_CONSTANT_STRING(L"win32kfull.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-fulluserbase-l1-1-0"), RTL_CONSTANT_STRING(L"win32kbase.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-gdi-l1-1-0"), RTL_CONSTANT_STRING(L"win32kbase.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-input-l1-1-0"), RTL_CONSTANT_STRING(L"win32kbase.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-inputmit-l1-1-0"), RTL_CONSTANT_STRING(L"win32kbase.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-inputrim-l1-1-0"), RTL_CONSTANT_STRING(L"win32kbase.sys"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-mindwm-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-mininput-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-mininputmit-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-mininputmitbase-l1-1-0"), RTL_CONSTANT_STRING(L"win32kbase.sys"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-minuser-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-opmgdi-l1-1-0"), RTL_CONSTANT_STRING(L"win32kbase.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-surfmgr-l1-1-0"), RTL_CONSTANT_STRING(L"dxgkrnl.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-tokenmgr-l1-1-0"), RTL_CONSTANT_STRING(L"dxgkrnl.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-user-l1-1-0"), RTL_CONSTANT_STRING(L"win32kbase.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-userdisplay-l1-1-0"), RTL_CONSTANT_STRING(L"win32kbase.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-win32k-userinit-l1-1-0"), RTL_CONSTANT_STRING(L"win32k.sys"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-core-winrt-remote-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-core-winsrv-l1-1-0"), RTL_CONSTANT_STRING(L"winsrvext.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-core-winsrv-min-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-core-xbrm-l1-1-1"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-coreui-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-coreui-navshutdown-l1-1-0"), RTL_CONSTANT_STRING(L"navshutdown.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-crypto-xbox-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-deployment-productenumerator-l1-1-0"), RTL_CONSTANT_STRING(L"productenumerator.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-desktopappx-l1-1-6"), RTL_CONSTANT_STRING(L"daxexec.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-devmgmt-dm-l1-1-2"), RTL_CONSTANT_STRING(L"dmapisetextimpldesktop.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-devmgmt-policy-l1-1-3"), RTL_CONSTANT_STRING(L"policymanager.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-direct2d-desktop-l1-1-0"), RTL_CONSTANT_STRING(L"direct2ddesktop.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-domainjoin-netjoin-l1-1-0"), RTL_CONSTANT_STRING(L"netjoin.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-dot3-grouppolicy-l1-1-0"), RTL_CONSTANT_STRING(L"dot3gpclnt.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-driver-setup-l1-1-0"), RTL_CONSTANT_STRING(L"drvsetup.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-drvinst-desktop-l1-1-0"), RTL_CONSTANT_STRING(L"newdev.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-dwmapi-ext-l1-1-2"), RTL_CONSTANT_STRING(L"dwmapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-dwmapidxgi-ext-l1-1-1"), RTL_CONSTANT_STRING(L"dwmapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-dx-d3d9-l1-1-0"), RTL_CONSTANT_STRING(L"d3d9.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-dx-d3dkmt-dxcore-l1-1-1"), RTL_CONSTANT_STRING(L"dxcore.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-dx-d3dkmt-gdi-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-dx-ddraw-l1-1-0"), RTL_CONSTANT_STRING(L"ddraw.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-dx-dinput8-l1-1-0"), RTL_CONSTANT_STRING(L"dinput8.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-dxcore-internal-l1-1-0"), RTL_CONSTANT_STRING(L"dxcore.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-dxcore-l1-1-0"), RTL_CONSTANT_STRING(L"dxcore.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-edputil-policy-l1-1-2"), RTL_CONSTANT_STRING(L"edputil.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-els-elscore-l1-1-0"), RTL_CONSTANT_STRING(L"elscore.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-eventing-pdh-l1-1-1"), RTL_CONSTANT_STRING(L"pdh.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-eventing-rundown-l1-1-0"), RTL_CONSTANT_STRING(L"etwrundown.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-eventing-tdh-ext-l1-1-0"), RTL_CONSTANT_STRING(L"tdh.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-eventing-tdh-priv-l1-1-0"), RTL_CONSTANT_STRING(L"tdh.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-familysafety-childaccount-l1-1-0"), RTL_CONSTANT_STRING(L"familysafetyext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-feclient-encryptedfile-l1-1-3"), RTL_CONSTANT_STRING(L"feclient.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-firewallapi-webproxy-l1-1-1"), RTL_CONSTANT_STRING(L"firewallapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-font-fontgroups-l1-1-0"), RTL_CONSTANT_STRING(L"fontgroupsoverride.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-fs-clfs-l1-1-0"), RTL_CONSTANT_STRING(L"clfs.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-fs-cscapi-l1-1-1"), RTL_CONSTANT_STRING(L"cscapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-fs-vssapi-l1-1-0"), RTL_CONSTANT_STRING(L"vssapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-fsutilext-ifsutil-l1-1-0"), RTL_CONSTANT_STRING(L"fsutilext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-fsutilext-ulib-l1-1-0"), RTL_CONSTANT_STRING(L"fsutilext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-fveapi-query-l1-1-0"), RTL_CONSTANT_STRING(L"fveapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-gaming-gamechatoverlay-l1-1-0"), RTL_CONSTANT_STRING(L"gamechatoverlayext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-gaming-xblgamesave-l1-1-0"), RTL_CONSTANT_STRING(L"xblgamesaveext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-gaming-xinput-l1-1-0"), RTL_CONSTANT_STRING(L"xinputuap.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-gdi-clipping-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN10 }, // gdi32full.dll + { RTL_CONSTANT_STRING(L"ext-ms-win-gdi-dc-create-l1-1-2"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN10 }, // gdi32full.dll + { RTL_CONSTANT_STRING(L"ext-ms-win-gdi-dc-l1-2-1"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN10 }, // gdi32full.dll + { RTL_CONSTANT_STRING(L"ext-ms-win-gdi-devcaps-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN10 }, // gdi32full.dll + { RTL_CONSTANT_STRING(L"ext-ms-win-gdi-draw-l1-1-3"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN10 }, // gdi32full.dll + { RTL_CONSTANT_STRING(L"ext-ms-win-gdi-font-l1-1-3"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN10 }, // gdi32full.dll + { RTL_CONSTANT_STRING(L"ext-ms-win-gdi-gdiplus-l1-1-0"), RTL_CONSTANT_STRING(L"gdiplus.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-gdi-internal-desktop-l1-1-3"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN10 }, // gdi32full.dll + { RTL_CONSTANT_STRING(L"ext-ms-win-gdi-internal-uap-init-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN10 }, // gdi32full.dll + { RTL_CONSTANT_STRING(L"ext-ms-win-gdi-metafile-l1-1-2"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN10 }, // gdi32full.dll + { RTL_CONSTANT_STRING(L"ext-ms-win-gdi-path-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN10 }, // gdi32full.dll + { RTL_CONSTANT_STRING(L"ext-ms-win-gdi-print-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN10 }, // gdi32full.dll + { RTL_CONSTANT_STRING(L"ext-ms-win-gdi-private-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN10 }, // gdi32full.dll + { RTL_CONSTANT_STRING(L"ext-ms-win-gdi-render-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-gdi-rgn-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN10 }, // gdi32full.dll + { RTL_CONSTANT_STRING(L"ext-ms-win-gdi-wcs-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN10 }, // gdi32full.dll + { RTL_CONSTANT_STRING(L"ext-ms-win-globalization-input-l1-1-2"), RTL_CONSTANT_STRING(L"globinputhost.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-gpapi-grouppolicy-l1-1-0"), RTL_CONSTANT_STRING(L"gpapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-gpsvc-grouppolicy-l1-1-0"), RTL_CONSTANT_STRING(L"gpsvc.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-gui-dui70-l1-1-0"), RTL_CONSTANT_STRING(L"dui70.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-gui-ieui-l1-1-0"), RTL_CONSTANT_STRING(L"ieui.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-gui-uxinit-l1-1-1"), RTL_CONSTANT_STRING(L"uxinit.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-hostactivitymanager-hostidstore-l1-1-0"), RTL_CONSTANT_STRING(L"rmclient.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-hyperv-compute-l1-1-1"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-hyperv-compute-l1-2-1"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-hyperv-computenetwork-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-hyperv-computestorage-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-hyperv-devicevirtualization-l1-1-1"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-hyperv-devicevirtualization-l1-2-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-hyperv-hgs-l1-1-0"), RTL_CONSTANT_STRING(L"vmhgs.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-hyperv-hvemulation-l1-1-0"), RTL_CONSTANT_STRING(L"winhvemulation.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-hyperv-hvplatform-l1-1-3"), RTL_CONSTANT_STRING(L"winhvplatform.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-ie-textinput-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-imm-l1-1-1"), RTL_CONSTANT_STRING(L"imm32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-kernel32-appcompat-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-kernel32-datetime-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-kernel32-elevation-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-kernel32-errorhandling-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-kernel32-file-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-kernel32-localization-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-kernel32-package-current-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernel.appcore.dll + { RTL_CONSTANT_STRING(L"ext-ms-win-kernel32-package-l1-1-2"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, // kernel.appcore.dll + { RTL_CONSTANT_STRING(L"ext-ms-win-kernel32-process-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-kernel32-quirks-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-kernel32-registry-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-kernel32-sidebyside-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-kernel32-transacted-l1-1-0"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-kernel32-windowserrorreporting-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-kernelbase-processthread-l1-1-1"), RTL_CONSTANT_STRING(L"kernel32.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-kioskmode-config-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-mapi-mapi32-l1-1-0"), RTL_CONSTANT_STRING(L"mapistub.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-media-avi-l1-1-0"), RTL_CONSTANT_STRING(L"avifil32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-mf-vfw-l1-1-0"), RTL_CONSTANT_STRING(L"mfvfw.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-mininput-cursorhost-l1-1-0"), RTL_CONSTANT_STRING(L"inputhost.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-mininput-extensions-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-mininput-inputhost-l1-1-1"), RTL_CONSTANT_STRING(L"inputhost.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-mininput-inputhost-l1-2-0"), RTL_CONSTANT_STRING(L"inputhost.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-mininput-inputhost-l1-3-0"), RTL_CONSTANT_STRING(L"inputhost.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-mininput-systeminputhost-l1-1-0"), RTL_CONSTANT_STRING(L"ism.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-mm-io-l1-1-0"), RTL_CONSTANT_STRING(L"winmm.dll"), APISET_WIN10 }, // winmmbase.dll + { RTL_CONSTANT_STRING(L"ext-ms-win-mm-msacm-l1-1-0"), RTL_CONSTANT_STRING(L"msacm32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-mm-pehelper-l1-1-0"), RTL_CONSTANT_STRING(L"mf.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-mm-wmvcore-l1-1-0"), RTL_CONSTANT_STRING(L"wmvcore.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-moderncore-win32k-base-ntgdi-l1-1-0"), RTL_CONSTANT_STRING(L"win32kfull.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-moderncore-win32k-base-ntuser-l1-1-0"), RTL_CONSTANT_STRING(L"win32kfull.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-moderncore-win32k-base-sysentry-l1-1-0"), RTL_CONSTANT_STRING(L"win32k.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-mpr-multipleproviderrouter-l1-1-0"), RTL_CONSTANT_STRING(L"mprext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-mrmcorer-resmanager-l1-1-0"), RTL_CONSTANT_STRING(L"mrmcorer.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-msa-device-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-msa-ui-l1-1-0"), RTL_CONSTANT_STRING(L"msauserext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-msa-user-l1-1-1"), RTL_CONSTANT_STRING(L"msauserext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-msi-misc-l1-1-0"), RTL_CONSTANT_STRING(L"msi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-msiltcfg-msi-l1-1-0"), RTL_CONSTANT_STRING(L"msiltcfg.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-msimg-draw-l1-1-0"), RTL_CONSTANT_STRING(L"msimg32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-net-cmvpn-l1-1-0"), RTL_CONSTANT_STRING(L"cmintegrator.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-net-httpproxyext-l1-1-0"), RTL_CONSTANT_STRING(L"httpprxc.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-net-isoext-l1-1-0"), RTL_CONSTANT_STRING(L"firewallapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-net-netbios-l1-1-0"), RTL_CONSTANT_STRING(L"netbios.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-net-netshell-l1-1-0"), RTL_CONSTANT_STRING(L"netshell.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-net-nfdapi-l1-1-0"), RTL_CONSTANT_STRING(L"ndfapi.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-net-vpn-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-netprovision-netprovfw-l1-1-0"), RTL_CONSTANT_STRING(L"netprovfw.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-networking-iphlpsvc-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-networking-mpssvc-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-networking-ncsiuserprobe-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-networking-nlaapi-l1-1-0"), RTL_CONSTANT_STRING(L"nlaapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-networking-radiomonitor-l1-1-0"), RTL_CONSTANT_STRING(L"windows.devices.radios.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-networking-teredo-l1-1-0"), RTL_CONSTANT_STRING(L"windows.networking.connectivity.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-networking-wcmapi-l1-1-1"), RTL_CONSTANT_STRING(L"wcmapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-networking-winipsec-l1-1-0"), RTL_CONSTANT_STRING(L"winipsec.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-networking-wlanapi-l1-1-0"), RTL_CONSTANT_STRING(L"wlanapi.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-networking-wlanstorage-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-networking-xblconnectivity-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-newdev-config-l1-1-3"), RTL_CONSTANT_STRING(L"newdev.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-nfc-semgr-l1-1-0"), RTL_CONSTANT_STRING(L"semgrsvc.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntdsa-activedirectoryserver-l1-1-0"), RTL_CONSTANT_STRING(L"ntdsa.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntdsapi-activedirectoryclient-l1-1-1"), RTL_CONSTANT_STRING(L"ntdsapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntos-clipsp-l1-1-0"), RTL_CONSTANT_STRING(L"clipsp.sys"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-ntos-dg-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntos-kcminitcfg-l1-1-0"), RTL_CONSTANT_STRING(L"cmimcext.sys"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-ntos-ksecurity-l1-1-1"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-ntos-ksr-l1-1-3"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-ntos-processparameters-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-ntos-stateseparation-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntos-tm-l1-1-0"), RTL_CONSTANT_STRING(L"tm.sys"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-ntos-trace-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntos-ucode-l1-1-0"), RTL_CONSTANT_STRING(L"ntosext.sys"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-ntos-vmsvc-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntos-werkernel-l1-1-1"), RTL_CONSTANT_STRING(L"werkernel.sys"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-caret-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-chartranslation-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-dc-access-ext-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-dialogbox-l1-1-3"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-draw-l1-1-2"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-gui-l1-1-1"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-gui-l1-2-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-gui-l1-3-1"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-keyboard-l1-1-1"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-keyboard-l1-2-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-keyboard-l1-3-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-menu-l1-1-3"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-message-l1-1-3"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-misc-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-misc-l1-2-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-misc-l1-3-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-misc-l1-5-1"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-misc-l1-6-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-mit-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-mouse-l1-1-1"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-powermanagement-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-private-l1-1-1"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-private-l1-2-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-private-l1-3-3"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-private-l1-4-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-private-l1-5-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-rawinput-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-rectangle-ext-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-rim-l1-1-2"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-rim-l1-2-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-rotationmanager-l1-1-2"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-server-l1-1-1"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-string-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-synch-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-sysparams-ext-l1-1-1"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-touch-hittest-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-uicontext-ext-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-window-l1-1-4"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-windowclass-l1-1-2"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-windowstation-ansi-l1-1-1"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ntuser-windowstation-l1-1-2"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-odbc-odbc32-l1-1-0"), RTL_CONSTANT_STRING(L"odbc32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ole32-bindctx-l1-1-0"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ole32-ie-ext-l1-1-0"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ole32-oleautomation-l1-1-0"), RTL_CONSTANT_STRING(L"ole32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-oleacc-l1-1-2"), RTL_CONSTANT_STRING(L"oleacc.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-onecore-shutdown-l1-1-0"), RTL_CONSTANT_STRING(L"twinapi.appcore.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-oobe-query-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-parentalcontrols-setup-l1-1-0"), RTL_CONSTANT_STRING(L"wpcapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-perception-device-l1-1-1"), RTL_CONSTANT_STRING(L"perceptiondevice.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-pinenrollment-enrollment-l1-1-2"), RTL_CONSTANT_STRING(L"pinenrollmenthelper.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-printer-prntvpt-l1-1-2"), RTL_CONSTANT_STRING(L"prntvpt.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-printer-winspool-core-l1-1-0"), RTL_CONSTANT_STRING(L"winspool.drv"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-printer-winspool-l1-1-4"), RTL_CONSTANT_STRING(L"winspool.drv"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-printer-winspool-l1-2-0"), RTL_CONSTANT_STRING(L"winspool.drv"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-profile-extender-l1-1-0"), RTL_CONSTANT_STRING(L"userenv.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-profile-load-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-profile-profsvc-l1-1-0"), RTL_CONSTANT_STRING(L"profsvcext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-profile-userenv-l1-1-1"), RTL_CONSTANT_STRING(L"profext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-provisioning-platform-l1-1-2"), RTL_CONSTANT_STRING(L"provplatformdesktop.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ras-rasapi32-l1-1-2"), RTL_CONSTANT_STRING(L"rasapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ras-rasdlg-l1-1-0"), RTL_CONSTANT_STRING(L"rasdlg.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ras-rasman-l1-1-0"), RTL_CONSTANT_STRING(L"rasman.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ras-tapi32-l1-1-1"), RTL_CONSTANT_STRING(L"tapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-raschapext-eap-l1-1-0"), RTL_CONSTANT_STRING(L"raschapext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rastlsext-eap-l1-1-0"), RTL_CONSTANT_STRING(L"rastlsext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rdr-davhlpr-l1-1-0"), RTL_CONSTANT_STRING(L"davhlpr.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-reinfo-query-l1-1-0"), RTL_CONSTANT_STRING(L"reinfo.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-remotewipe-platform-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-resourcemanager-crm-l1-1-0"), RTL_CONSTANT_STRING(L"rmclient.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-resourcemanager-crm-l1-2-0"), RTL_CONSTANT_STRING(L"rmclient.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-resourcemanager-gamemode-l1-1-0"), RTL_CONSTANT_STRING(L"rmclient.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-resourcemanager-gamemode-l1-2-1"), RTL_CONSTANT_STRING(L"rmclient.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-resources-deployment-l1-1-0"), RTL_CONSTANT_STRING(L"mrmdeploy.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-resources-languageoverlay-l1-1-3"), RTL_CONSTANT_STRING(L"languageoverlayutil.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ro-typeresolution-l1-1-1"), RTL_CONSTANT_STRING(L"wintypes.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rometadata-dispenser-l1-1-0"), RTL_CONSTANT_STRING(L"rometadata.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rpc-firewallportuse-l1-1-0"), RTL_CONSTANT_STRING(L"rpcrtremote.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rpc-ssl-l1-1-0"), RTL_CONSTANT_STRING(L"rpcrtremote.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-gdi-devcaps-l1-1-1"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-gdi-object-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-gdi-rgn-l1-1-1"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-minuser-display-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-minuser-host-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-minuser-input-l1-1-4"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-minuser-internal-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-minuser-private-ext-l1-1-1"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-controllernavigation-l1-1-1"), RTL_CONSTANT_STRING(L"inputhost.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-cursor-l1-1-1"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-dc-access-l1-1-1"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-dialogbox-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-dpi-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-dpi-l1-2-2"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-draw-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-gui-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-iam-l1-1-1"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-inputintercept-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-integration-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-keyboard-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-message-ansi-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-message-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-mininit-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-misc-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-mouse-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-powermanagement-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-private-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-rawinput-l1-1-1"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-synch-ext-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-syscolors-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-sysparams-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-usersecurity-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-window-ansi-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-window-ext-l1-1-1"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-window-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-winevent-ext-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-winstamin-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-wmpointer-l1-1-0"), RTL_CONSTANT_STRING(L"user32.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-rtcore-ntuser-wmpointermin-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-samsrv-accountstore-l1-1-1"), RTL_CONSTANT_STRING(L"samsrv.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-scesrv-server-l1-1-0"), RTL_CONSTANT_STRING(L"scesrv.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-search-folder-l1-1-0"), RTL_CONSTANT_STRING(L"searchfolder.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-secur32-translatename-l1-1-0"), RTL_CONSTANT_STRING(L"secur32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-security-appinfoext-l1-1-0"), RTL_CONSTANT_STRING(L"appinfoext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-security-authbrokerui-l1-1-0"), RTL_CONSTANT_STRING(L"authbrokerui.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-security-authz-helper-l1-1-0"), RTL_CONSTANT_STRING(L"authentication.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-security-capauthz-l1-1-1"), RTL_CONSTANT_STRING(L"capauthz.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-security-catalog-database-l1-1-0"), RTL_CONSTANT_STRING(L"cryptcatsvc.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-security-certpoleng-l1-1-0"), RTL_CONSTANT_STRING(L"certpoleng.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-security-cfl-l1-1-1"), RTL_CONSTANT_STRING(L"cflapi.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-security-chambers-l1-1-1"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-security-credui-internal-l1-1-0"), RTL_CONSTANT_STRING(L"wincredui.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-security-credui-l1-1-1"), RTL_CONSTANT_STRING(L"credui.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-security-crosscontainerauthhelper-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-security-cryptui-l1-1-1"), RTL_CONSTANT_STRING(L"cryptui.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-security-developerunlock-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-security-deviceid-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-security-efs-l1-1-1"), RTL_CONSTANT_STRING(L"efsext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-security-efswrt-l1-1-3"), RTL_CONSTANT_STRING(L"efswrt.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-security-kerberos-l1-1-0"), RTL_CONSTANT_STRING(L"kerberos.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-security-ngc-local-l1-1-0"), RTL_CONSTANT_STRING(L"ngclocal.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-security-shutdownext-l1-1-0"), RTL_CONSTANT_STRING(L"shutdownext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-security-slc-l1-1-0"), RTL_CONSTANT_STRING(L"slc.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-security-srp-l1-1-1"), RTL_CONSTANT_STRING(L"srpapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-security-tokenbrokerui-l1-1-0"), RTL_CONSTANT_STRING(L"tokenbrokerui.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-security-vaultcds-l1-1-0"), RTL_CONSTANT_STRING(L"vaultcds.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-security-vaultcds-l1-2-0"), RTL_CONSTANT_STRING(L"vaultcds.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-security-vaultcli-l1-1-1"), RTL_CONSTANT_STRING(L"vaultcli.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-security-winscard-l1-1-1"), RTL_CONSTANT_STRING(L"winscard.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-sensors-core-private-l1-1-5"), RTL_CONSTANT_STRING(L"sensorsnativeapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-sensors-utilities-private-l1-1-3"), RTL_CONSTANT_STRING(L"sensorsutilsv2.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-servicing-uapi-l1-1-0"), RTL_CONSTANT_STRING(L"servicinguapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-session-candidateaccountmgr-l1-1-0"), RTL_CONSTANT_STRING(L"usermgrcli.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-session-userinit-l1-1-0"), RTL_CONSTANT_STRING(L"userinitext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-session-usermgr-l1-1-0"), RTL_CONSTANT_STRING(L"usermgrcli.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-session-usermgr-l1-2-0"), RTL_CONSTANT_STRING(L"usermgrcli.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-session-usertoken-l1-1-0"), RTL_CONSTANT_STRING(L"wtsapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-session-wininit-l1-1-0"), RTL_CONSTANT_STRING(L"wininitext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-session-winlogon-l1-1-2"), RTL_CONSTANT_STRING(L"winlogonext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-session-winsta-l1-1-4"), RTL_CONSTANT_STRING(L"winsta.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-session-wtsapi32-l1-1-0"), RTL_CONSTANT_STRING(L"wtsapi32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-setupapi-classinstallers-l1-1-2"), RTL_CONSTANT_STRING(L"setupapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-setupapi-inf-l1-1-1"), RTL_CONSTANT_STRING(L"setupapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-setupapi-logging-l1-1-0"), RTL_CONSTANT_STRING(L"setupapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-shell-aclui-l1-1-0"), RTL_CONSTANT_STRING(L"aclui.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-shell-browsersettingsync-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-shell-comctl32-da-l1-1-0"), RTL_CONSTANT_STRING(L"comctl32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-shell-comctl32-init-l1-1-1"), RTL_CONSTANT_STRING(L"comctl32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-shell-comctl32-l1-1-0"), RTL_CONSTANT_STRING(L"comctl32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-shell-comctl32-window-l1-1-0"), RTL_CONSTANT_STRING(L"comctl32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-shell-comdlg32-l1-1-1"), RTL_CONSTANT_STRING(L"comdlg32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-shell-directory-l1-1-0"), RTL_CONSTANT_STRING(L"windows.storage.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-shell-efsadu-l1-1-0"), RTL_CONSTANT_STRING(L"efsadu.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-shell-embeddedmode-l1-1-0"), RTL_CONSTANT_STRING(L"embeddedmodesvcapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-shell-exports-internal-l1-1-0"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-shell-fileplaceholder-l1-1-0"), RTL_CONSTANT_STRING(L"windows.fileexplorer.common.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-shell-knownfolderext-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-shell-ntshrui-l1-1-0"), RTL_CONSTANT_STRING(L"ntshrui.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-shell-propsys-l1-1-0"), RTL_CONSTANT_STRING(L"propsys.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-shell-shdocvw-l1-1-0"), RTL_CONSTANT_STRING(L"shdocvw.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-shell-shell32-l1-2-3"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-shell-shell32-l1-3-0"), RTL_CONSTANT_STRING(L"shell32.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-shell-shlwapi-l1-1-2"), RTL_CONSTANT_STRING(L"shlwapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-shell-shlwapi-l1-2-1"), RTL_CONSTANT_STRING(L"shlwapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-shell32-shellcom-l1-1-0"), RTL_CONSTANT_STRING(L"windows.storage.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-shell32-shellfolders-l1-1-1"), RTL_CONSTANT_STRING(L"windows.storage.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-shell32-shellfolders-l1-2-0"), RTL_CONSTANT_STRING(L"windows.storage.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-smbshare-browser-l1-1-0"), RTL_CONSTANT_STRING(L"browser.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-smbshare-browserclient-l1-1-0"), RTL_CONSTANT_STRING(L"browcli.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-smbshare-sscore-l1-1-0"), RTL_CONSTANT_STRING(L"sscoreext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-spinf-inf-l1-1-0"), RTL_CONSTANT_STRING(L"spinf.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-storage-hbaapi-l1-1-0"), RTL_CONSTANT_STRING(L"hbaapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-storage-iscsidsc-l1-1-0"), RTL_CONSTANT_STRING(L"iscsidsc.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-storage-sense-l1-1-0"), RTL_CONSTANT_STRING(L"storageusage.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-storage-sense-l1-2-1"), RTL_CONSTANT_STRING(L"storageusage.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-sxs-oleautomation-l1-1-0"), RTL_CONSTANT_STRING(L"sxs.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-teapext-eap-l1-1-0"), RTL_CONSTANT_STRING(L"eapteapext.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-test-sys1-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-test-sys2-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-tsf-inputsetting-l1-1-0"), RTL_CONSTANT_STRING(L"input.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-tsf-msctf-l1-1-3"), RTL_CONSTANT_STRING(L"msctf.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-ttlsext-eap-l1-1-0"), RTL_CONSTANT_STRING(L"ttlsext.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-ui-viewmanagement-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-uiacore-l1-1-3"), RTL_CONSTANT_STRING(L"uiautomationcore.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-umpoext-umpo-l1-1-0"), RTL_CONSTANT_STRING(L"umpoext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-usp10-l1-1-0"), RTL_CONSTANT_STRING(L"gdi32.dll"), APISET_WIN10 }, // gdi32full.dll + { RTL_CONSTANT_STRING(L"ext-ms-win-uwf-servicing-apis-l1-1-1"), RTL_CONSTANT_STRING(L"uwfservicingapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-uxtheme-themes-l1-1-2"), RTL_CONSTANT_STRING(L"uxtheme.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-virtualizationcontext-l1-1-0"), RTL_CONSTANT_STRING(L"daxexec.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-wer-reporting-l1-1-3"), RTL_CONSTANT_STRING(L"wer.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-wer-ui-l1-1-1"), RTL_CONSTANT_STRING(L"werui.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-wer-wct-l1-1-0"), RTL_CONSTANT_STRING(L"wer.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-wer-xbox-l1-1-1"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-wevtapi-eventlog-l1-1-3"), RTL_CONSTANT_STRING(L"wevtapi.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-winlogon-mincreds-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-winrt-device-access-l1-1-0"), RTL_CONSTANT_STRING(L"deviceaccess.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-winrt-storage-l1-1-0"), RTL_CONSTANT_STRING(L"windows.storage.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-winrt-storage-l1-2-3"), RTL_CONSTANT_STRING(L"windows.storage.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-wlan-grouppolicy-l1-1-0"), RTL_CONSTANT_STRING(L"wlgpclnt.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-wlan-onexui-l1-1-0"), RTL_CONSTANT_STRING(L"onexui.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-wlan-scard-l1-1-0"), RTL_CONSTANT_STRING(L"winscard.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-wpc-webfilter-l1-1-0"), RTL_CONSTANT_STRING(L"wpcwebfilter.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-wpn-phoneext-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-wrp-sfc-l1-1-0"), RTL_CONSTANT_STRING(L"sfc.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-wsclient-devlicense-l1-1-1"), RTL_CONSTANT_STRING(L"wsclient.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-wwaext-misc-l1-1-0"), RTL_CONSTANT_STRING(L"wwaext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-wwaext-module-l1-1-0"), RTL_CONSTANT_STRING(L"wwaext.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-wwan-wwapi-l1-1-3"), RTL_CONSTANT_STRING(L"wwapi.dll"), APISET_WIN10 }, + { RTL_CONSTANT_STRING(L"ext-ms-win-xaml-controls-l1-1-0"), RTL_CONSTANT_STRING(L"windows.ui.xaml.phone.dll"), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-xaml-pal-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-xaudio-platform-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-xblauth-console-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win-xboxlive-xboxnetapisvc-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-win32-subsystem-query-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, + // { RTL_CONSTANT_STRING(L"ext-ms-windowscore-deviceinfo-l1-1-0"), RTL_CONSTANT_STRING(L""), APISET_WIN10 }, +}; + +const LONG g_ApisetsCount = RTL_NUMBER_OF(g_Apisets); diff --git a/sdk/lib/apisets/apisetsp.h b/sdk/lib/apisets/apisetsp.h new file mode 100644 index 00000000000..07591ff0505 --- /dev/null +++ b/sdk/lib/apisets/apisetsp.h @@ -0,0 +1,25 @@ +#ifndef APISETSP_H +#define APISETSP_H + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "apisets.h" + +typedef struct _ROS_APISET +{ + const UNICODE_STRING Name; + const UNICODE_STRING Target; + DWORD dwOsVersions; +} ROS_APISET; + +extern const ROS_APISET g_Apisets[]; +extern const LONG g_ApisetsCount; + +#ifdef __cplusplus +} +#endif + +#endif // APISETSP_H diff --git a/sdk/lib/apisets/update.py b/sdk/lib/apisets/update.py new file mode 100644 index 00000000000..8e3173548da --- /dev/null +++ b/sdk/lib/apisets/update.py @@ -0,0 +1,150 @@ +''' +PROJECT: ReactOS apisets +LICENSE: MIT (https://spdx.org/licenses/MIT) +PURPOSE: Create apiset lookup table based on the data files of https://apisets.info +COPYRIGHT: Copyright 2024 Mark Jansen +''' + +from pathlib import Path +from dataclasses import dataclass, field +import sys +import json + +# These are modules we do not have, so redirect them to ones we do have. +REDIRECT_HOSTS = { + 'kernelbase.dll': 'kernel32.dll', + 'kernel.appcore.dll': 'kernel32.dll', + 'combase.dll': 'ole32.dll', + 'ucrtbase.dll': 'msvcrt.dll', + 'shcore.dll': 'shell32.dll', + 'winmmbase.dll': 'winmm.dll', + 'gdi32full.dll': 'gdi32.dll' +} + +OUTPUT_HEADER = """/* + * PROJECT: ReactOS apisets + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: Autogenerated table of all apisets + * COPYRIGHT: Copyright 2024 Mark Jansen + */ + +#include +#include +#include "apisetsp.h" + +const ROS_APISET g_Apisets[] = { +""" + +OUTPUT_FOOTER = """}; + +const LONG g_ApisetsCount = RTL_NUMBER_OF(g_Apisets); +""" + +def winver_to_name(version): + major, minor, build, _ = map(int, version.split('.')) + if (major, minor) == (6, 1): + return 'APISET_WIN7' + if (major, minor) == (6, 2): + return 'APISET_WIN8' + if (major, minor) == (6, 3): + return 'APISET_WIN81' + if (major, minor) == (10, 0): + if build < 22000: + return 'APISET_WIN10' + return 'APISET_WIN11' + assert False, (major, minor, build) + +@dataclass +class Apiset: + name: str + host: str + versions: list[str] = field(default_factory=list) + + def add_version(self, version): + if version not in self.versions: + self.versions.append(version) + + def __str__(self): + version_str = ' | '.join(self.versions) + name = self.name + assert name[-4:].lower() == '.dll' + name = name[:-4] + prefix, postfix = '', '' + host = self.host + if host == '': + # Disable forwarders that have an empty host + prefix = '// ' + else: + # Check to see if there is any dll we want to swap (kernelbase -> kernel32) + replace = REDIRECT_HOSTS.get(host.lower(), None) + if replace: + postfix = ' // ' + host + host = replace + return f' {prefix}{{ RTL_CONSTANT_STRING(L"{name}"), RTL_CONSTANT_STRING(L"{host}"), {version_str} }},{postfix}' + + +class ApisetSchema: + def __init__(self, file): + self._data = json.load(file.open()) + self.version = winver_to_name(self._data['PE']['ProductVersion']) + self._arch = self._data['PE']['Machine'] + + def apisets(self): + for elem in self._data['namespaces']: + name = elem['name'] + host = elem['host'] + yield Apiset(name, host) + + +class CombinedSchemas: + def __init__(self): + self._apisets = {} + + def add(self, schema: ApisetSchema): + for apiset in schema.apisets(): + lowername = apiset.name.lower() + if lowername not in self._apisets: + self._apisets[lowername] = apiset + else: + apiset = self._apisets[lowername] + apiset.add_version(schema.version) + + def generate(self, output): + for key in sorted(self._apisets): + apiset = self._apisets[key] + output.write(f'{apiset}\n'.encode('utf-8')) + + +def process_apisetschemas(input_dir: Path, output_file): + schemas = CombinedSchemas() + + for schemafile in input_dir.glob('*.json'): + schema = ApisetSchema(schemafile) + # Skip Win11 for now + if schema.version != 'APISET_WIN11': + schemas.add(schema) + + output_file.write(OUTPUT_HEADER.encode('utf-8')) + schemas.generate(output_file) + output_file.write(OUTPUT_FOOTER.encode('utf-8')) + + +def usage(): + print('Usage: update.py ') + print(' where is the folder with all apisetschema json files') + +def main(args): + if len(args) < 1: + return usage() + + apisetschemas = Path(args[0]) + if not apisetschemas.is_dir(): + return usage() + + output = Path(__file__).parent / 'apisets.table.c' + + process_apisetschemas(apisetschemas, output.open('wb')) + + +if __name__ == '__main__': + main(sys.argv[1:]) diff --git a/sdk/lib/rtl/actctx.c b/sdk/lib/rtl/actctx.c index a8b44da6892..9f957792dfe 100644 --- a/sdk/lib/rtl/actctx.c +++ b/sdk/lib/rtl/actctx.c @@ -5100,15 +5100,7 @@ void actctx_init(PVOID* pOldShimData) ctx.lpResourceName = NULL; ctx.lpSource = buffer; RtlStringCchCopyW(buffer, RTL_NUMBER_OF(buffer), SharedUserData->NtSystemRoot); - - if (RosGetProcessCompatVersion()) - { - RtlStringCchCatW(buffer, RTL_NUMBER_OF(buffer), L"\\winsxs\\manifests\\forwardcompatible.manifest"); - } - else - { - RtlStringCchCatW(buffer, RTL_NUMBER_OF(buffer), L"\\winsxs\\manifests\\systemcompatible.manifest"); - } + RtlStringCchCatW(buffer, RTL_NUMBER_OF(buffer), L"\\winsxs\\manifests\\systemcompatible.manifest"); Status = RtlCreateActivationContext(0, (PVOID)&ctx, 0, NULL, NULL, &handle); if (NT_SUCCESS(Status)) From c9864da8234b0bb80bf97c285e6b2e59dc34efa0 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 22 Apr 2024 11:50:59 +0300 Subject: [PATCH 029/182] [NTOS:IO] Fix broken pool allocations ExAllocatePoolWithTag doesn't raise an exception on failure, only ExAllocatePoolWithQuotaTag does. Use that when quotas are relevant instead of silently continuing with a NULL pointer. --- ntoskrnl/io/iomgr/iofunc.c | 61 +++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 34 deletions(-) diff --git a/ntoskrnl/io/iomgr/iofunc.c b/ntoskrnl/io/iomgr/iofunc.c index 62fb626fa25..f672f4b5af6 100644 --- a/ntoskrnl/io/iomgr/iofunc.c +++ b/ntoskrnl/io/iomgr/iofunc.c @@ -2176,19 +2176,23 @@ NtQueryDirectoryFile(IN HANDLE FileHandle, /* Check if this is buffered I/O */ if (DeviceObject->Flags & DO_BUFFERED_IO) { - /* Allocate a buffer */ - Irp->AssociatedIrp.SystemBuffer = ExAllocatePoolWithTag(NonPagedPool, - Length, - TAG_SYSB); - if (!Irp->AssociatedIrp.SystemBuffer) + /* Enter SEH (ExAllocatePoolWithQuotaTag raises on failure!) */ + _SEH2_TRY + { + /* Allocate a buffer */ + Irp->AssociatedIrp.SystemBuffer = + ExAllocatePoolWithQuotaTag(NonPagedPool, Length, TAG_SYSB); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { /* Allocating failed, clean up and return the exception code */ IopCleanupAfterException(FileObject, Irp, Event, NULL); if (AuxBuffer) ExFreePoolWithTag(AuxBuffer, TAG_SYSB); /* Return the exception code */ - return STATUS_INSUFFICIENT_RESOURCES; + return _SEH2_GetExceptionCode(); } + _SEH2_END; /* Set the buffer and flags */ Irp->UserBuffer = FileInformation; @@ -2508,14 +2512,12 @@ NtQueryInformationFile(IN HANDLE FileHandle, StackPtr->MajorFunction = IRP_MJ_QUERY_INFORMATION; StackPtr->FileObject = FileObject; - /* Enter SEH */ + /* Enter SEH (ExAllocatePoolWithQuotaTag raises on failure!) */ _SEH2_TRY { /* Allocate a buffer */ Irp->AssociatedIrp.SystemBuffer = - ExAllocatePoolWithTag(NonPagedPool, - Length, - TAG_SYSB); + ExAllocatePoolWithQuotaTag(NonPagedPool, Length, TAG_SYSB); } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { @@ -2978,14 +2980,12 @@ NtReadFile(IN HANDLE FileHandle, /* Check if we have a buffer length */ if (Length) { - /* Enter SEH */ + /* Enter SEH (ExAllocatePoolWithQuotaTag raises on failure!) */ _SEH2_TRY { /* Allocate a buffer */ Irp->AssociatedIrp.SystemBuffer = - ExAllocatePoolWithTag(NonPagedPool, - Length, - TAG_SYSB); + ExAllocatePoolWithQuotaTag(NonPagedPool, Length, TAG_SYSB); } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { @@ -3281,14 +3281,12 @@ NtSetInformationFile(IN HANDLE FileHandle, StackPtr->MajorFunction = IRP_MJ_SET_INFORMATION; StackPtr->FileObject = FileObject; - /* Enter SEH */ + /* Enter SEH (ExAllocatePoolWithQuotaTag raises on failure!) */ _SEH2_TRY { /* Allocate a buffer */ Irp->AssociatedIrp.SystemBuffer = - ExAllocatePoolWithTag(NonPagedPool, - Length, - TAG_SYSB); + ExAllocatePoolWithQuotaTag(NonPagedPool, Length, TAG_SYSB); /* Copy the data into it */ RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer, @@ -3704,13 +3702,13 @@ NtUnlockFile(IN HANDLE FileHandle, StackPtr->MinorFunction = IRP_MN_UNLOCK_SINGLE; StackPtr->FileObject = FileObject; - /* Enter SEH */ + /* Enter SEH (ExAllocatePoolWithQuotaTag raises on failure!) */ _SEH2_TRY { /* Allocate a buffer */ - LocalLength = ExAllocatePoolWithTag(NonPagedPool, - sizeof(LARGE_INTEGER), - TAG_LOCK); + LocalLength = ExAllocatePoolWithQuotaTag(NonPagedPool, + sizeof(LARGE_INTEGER), + TAG_LOCK); /* Set the length */ *LocalLength = CapturedLength; @@ -4055,14 +4053,12 @@ NtWriteFile(IN HANDLE FileHandle, /* Check if we have a buffer length */ if (Length) { - /* Enter SEH */ + /* Enter SEH (ExAllocatePoolWithQuotaTag raises on failure!) */ _SEH2_TRY { /* Allocate a buffer */ Irp->AssociatedIrp.SystemBuffer = - ExAllocatePoolWithTag(NonPagedPool, - Length, - TAG_SYSB); + ExAllocatePoolWithQuotaTag(NonPagedPool, Length, TAG_SYSB); /* Copy the data into it */ RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer, Buffer, Length); @@ -4293,6 +4289,7 @@ NtQueryVolumeInformationFile(IN HANDLE FileHandle, { _SEH2_VOLATILE PFILE_FS_DRIVER_PATH_INFORMATION DriverPathInfo = NULL; + /* Enter SEH (ExAllocatePoolWithQuotaTag raises on failure!) */ _SEH2_TRY { /* Allocate our local structure */ @@ -4383,14 +4380,12 @@ NtQueryVolumeInformationFile(IN HANDLE FileHandle, StackPtr->MajorFunction = IRP_MJ_QUERY_VOLUME_INFORMATION; StackPtr->FileObject = FileObject; - /* Enter SEH */ + /* Enter SEH (ExAllocatePoolWithQuotaTag raises on failure!) */ _SEH2_TRY { /* Allocate a buffer */ Irp->AssociatedIrp.SystemBuffer = - ExAllocatePoolWithTag(NonPagedPool, - Length, - TAG_SYSB); + ExAllocatePoolWithQuotaTag(NonPagedPool, Length, TAG_SYSB); } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { @@ -4566,14 +4561,12 @@ NtSetVolumeInformationFile(IN HANDLE FileHandle, StackPtr->MajorFunction = IRP_MJ_SET_VOLUME_INFORMATION; StackPtr->FileObject = FileObject; - /* Enter SEH */ + /* Enter SEH (ExAllocatePoolWithQuotaTag raises on failure!) */ _SEH2_TRY { /* Allocate a buffer */ Irp->AssociatedIrp.SystemBuffer = - ExAllocatePoolWithTag(NonPagedPool, - Length, - TAG_SYSB); + ExAllocatePoolWithQuotaTag(NonPagedPool, Length, TAG_SYSB); /* Copy the data into it */ RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer, FsInformation, Length); From f9325370f53560b96cc7d92d7ab34f578b12dc8e Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Sun, 28 Apr 2024 16:00:03 +0200 Subject: [PATCH 030/182] [SHELL32] DefView must set CMF_EXTENDEDVERBS, CMF_CANRENAME and CMF_EXPLORE (#6776) The caller of IContextMenu::QueryContextMenu must set these flags when needed, not CDefaultContextMenu. Notes: - CMF_CANRENAME is always set by DefView because it always supports rename in its current form. CDefaultContextMenu verifies that SFGAO_CANRENAME is also set on the items. All other callers are expected to not know how to rename unless they also set CMF_CANRENAME. This fixes the bug that the Rename item is present in the TreeView context menu even though the TreeView in ROS Explorer does not handle renaming. - While DefView now tries to set CMF_EXPLORE correctly, the flag is never actually set because BROWSEUI does not handle FCW_TREE yet. - This also fixes the bug where the File menu is missing the menu items when there is no selection. --- dll/win32/shell32/CDefView.cpp | 30 ++++++++++++++++++----- dll/win32/shell32/CDefaultContextMenu.cpp | 6 ++--- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/dll/win32/shell32/CDefView.cpp b/dll/win32/shell32/CDefView.cpp index 76cdf915d82..089e026a293 100644 --- a/dll/win32/shell32/CDefView.cpp +++ b/dll/win32/shell32/CDefView.cpp @@ -54,6 +54,20 @@ typedef struct // to call TrackPopupMenu and let it use the 0 value as an indication that the menu was canceled #define CONTEXT_MENU_BASE_ID 1 +static UINT +GetContextMenuFlags(IShellBrowser *pSB, SFGAOF sfgao) +{ + UINT cmf = CMF_NORMAL; + if (GetKeyState(VK_SHIFT) < 0) + cmf |= CMF_EXTENDEDVERBS; + if (sfgao & SFGAO_CANRENAME) + cmf |= CMF_CANRENAME; + HWND hwnd = NULL; + if (pSB && SUCCEEDED(pSB->GetControlWindow(FCW_TREE, &hwnd)) && hwnd) + cmf |= CMF_EXPLORE; + return cmf; +} + // Convert client coordinates to listview coordinates static void ClientToListView(HWND hwndLV, POINT *ppt) @@ -1362,14 +1376,16 @@ HRESULT CDefView::FillFileMenu() IUnknown_SetSite(m_pFileMenu, NULL); m_pFileMenu.Release(); } + UINT selcount = m_ListView.GetSelectedCount(); // Store context menu in m_pFileMenu and keep it to invoke the selected command later on - HRESULT hr = GetItemObject(SVGIO_SELECTION, IID_PPV_ARG(IContextMenu, &m_pFileMenu)); + HRESULT hr = GetItemObject(selcount ? SVGIO_SELECTION : SVGIO_BACKGROUND, IID_PPV_ARG(IContextMenu, &m_pFileMenu)); if (FAILED_UNEXPECTEDLY(hr)) return hr; HMENU hmenu = CreatePopupMenu(); - hr = m_pFileMenu->QueryContextMenu(hmenu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, 0); + UINT cmf = GetContextMenuFlags(m_pShellBrowser, SFGAO_CANRENAME); + hr = m_pFileMenu->QueryContextMenu(hmenu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, cmf); if (FAILED_UNEXPECTEDLY(hr)) return hr; @@ -1511,10 +1527,10 @@ HRESULT CDefView::InvokeContextMenuCommand(CComPtr& pCM, LPCSTR lp cmi.hwnd = m_hWnd; cmi.lpVerb = lpVerb; - if (GetKeyState(VK_SHIFT) & 0x8000) + if (GetKeyState(VK_SHIFT) < 0) cmi.fMask |= CMIC_MASK_SHIFT_DOWN; - if (GetKeyState(VK_CONTROL) & 0x8000) + if (GetKeyState(VK_CONTROL) < 0) cmi.fMask |= CMIC_MASK_CONTROL_DOWN; if (pt) @@ -1558,7 +1574,8 @@ HRESULT CDefView::OpenSelectedItems() if (FAILED_UNEXPECTEDLY(hResult)) return hResult; - hResult = pCM->QueryContextMenu(hMenu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, CMF_DEFAULTONLY); + UINT cmf = CMF_DEFAULTONLY | GetContextMenuFlags(m_pShellBrowser, 0); + hResult = pCM->QueryContextMenu(hMenu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, cmf); if (FAILED_UNEXPECTEDLY(hResult)) return hResult; @@ -1617,8 +1634,9 @@ LRESULT CDefView::OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &b if (FAILED_UNEXPECTEDLY(hResult)) return 0; + UINT cmf = GetContextMenuFlags(m_pShellBrowser, SFGAO_CANRENAME); // Use 1 as the first id we want. 0 means that user canceled the menu - hResult = m_pCM->QueryContextMenu(m_hContextMenu, 0, CONTEXT_MENU_BASE_ID, FCIDM_SHVIEWLAST, CMF_NORMAL); + hResult = m_pCM->QueryContextMenu(m_hContextMenu, 0, CONTEXT_MENU_BASE_ID, FCIDM_SHVIEWLAST, cmf); if (FAILED_UNEXPECTEDLY(hResult)) return 0; diff --git a/dll/win32/shell32/CDefaultContextMenu.cpp b/dll/win32/shell32/CDefaultContextMenu.cpp index 0e1bdb99083..e1556710d5a 100644 --- a/dll/win32/shell32/CDefaultContextMenu.cpp +++ b/dll/win32/shell32/CDefaultContextMenu.cpp @@ -603,9 +603,7 @@ CDefaultContextMenu::AddStaticContextMenusToMenu( if (hkVerb) { - // FIXME: GetAsyncKeyState should not be called here, clients - // need to be updated to set the CMF_EXTENDEDVERBS flag. - if (!(uFlags & CMF_EXTENDEDVERBS) && GetAsyncKeyState(VK_SHIFT) >= 0) + if (!(uFlags & CMF_EXTENDEDVERBS)) hide = RegValueExists(hkVerb, L"Extended"); if (!hide) @@ -807,7 +805,7 @@ CDefaultContextMenu::QueryContextMenu( DeleteMenu(hmenuDefault, IDM_CREATELINK, MF_BYCOMMAND); if (!(rfg & SFGAO_CANDELETE)) DeleteMenu(hmenuDefault, IDM_DELETE, MF_BYCOMMAND); - if (!(rfg & SFGAO_CANRENAME)) + if (!(rfg & SFGAO_CANRENAME) || !(uFlags & CMF_CANRENAME)) DeleteMenu(hmenuDefault, IDM_RENAME, MF_BYCOMMAND); if (!(rfg & SFGAO_HASPROPSHEET)) DeleteMenu(hmenuDefault, IDM_PROPERTIES, MF_BYCOMMAND); From d4ca55f65e58d7a54a3c073a5103b23418e17728 Mon Sep 17 00:00:00 2001 From: Thamatip Chitpong Date: Tue, 9 Apr 2024 12:28:26 +0700 Subject: [PATCH 031/182] [SHELL32] Separate CCopyAsPathMenu implementation from CCopyMoveToMenu --- dll/win32/shell32/CCopyAsPathMenu.cpp | 152 ++++++++++++++++++++++++++ dll/win32/shell32/CCopyAsPathMenu.h | 41 +++++++ dll/win32/shell32/CCopyMoveToMenu.cpp | 142 ------------------------ dll/win32/shell32/CCopyMoveToMenu.h | 32 ------ dll/win32/shell32/CMakeLists.txt | 1 + dll/win32/shell32/precomp.h | 1 + 6 files changed, 195 insertions(+), 174 deletions(-) create mode 100644 dll/win32/shell32/CCopyAsPathMenu.cpp create mode 100644 dll/win32/shell32/CCopyAsPathMenu.h diff --git a/dll/win32/shell32/CCopyAsPathMenu.cpp b/dll/win32/shell32/CCopyAsPathMenu.cpp new file mode 100644 index 00000000000..55bac2f4909 --- /dev/null +++ b/dll/win32/shell32/CCopyAsPathMenu.cpp @@ -0,0 +1,152 @@ +/* + * PROJECT: ReactOS shell32 + * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) + * PURPOSE: Copy as Path Menu implementation + * COPYRIGHT: Copyright 2024 Whindmar Saksit + */ + +#include "precomp.h" + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +static DWORD +SetClipboard(UINT cf, const void* data, SIZE_T size) +{ + BOOL succ = FALSE; + HGLOBAL handle = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE, size); + if (handle) + { + LPVOID clipdata = GlobalLock(handle); + if (clipdata) + { + CopyMemory(clipdata, data, size); + GlobalUnlock(handle); + if (OpenClipboard(NULL)) + { + EmptyClipboard(); + succ = SetClipboardData(cf, handle) != NULL; + CloseClipboard(); + } + } + if (!succ) + { + GlobalFree(handle); + } + } + return succ ? ERROR_SUCCESS : GetLastError(); +} + +static DWORD +SetClipboardFromString(LPCWSTR str) +{ + SIZE_T cch = lstrlenW(str) + 1, size = cch * sizeof(WCHAR); + if (size > cch) + return SetClipboard(CF_UNICODETEXT, str, size); + else + return ERROR_BUFFER_OVERFLOW; +} + +static void +AppendToPathList(CStringW &paths, LPCWSTR path, DWORD index) +{ + if (index) + paths += L"\r\n"; + LPCWSTR quote = StrChrW(path, L' '); + if (quote) + paths += L'\"'; + paths += path; + if (quote) + paths += L'\"'; +} + +STDMETHODIMP +CCopyAsPathMenu::Drop(IDataObject *pdto, DWORD grfKeyState, POINTL ptl, DWORD *pdwEffect) +{ + CStringW paths; + DWORD i, count; +#if 0 + CComPtr array; + HRESULT hr = SHCreateShellItemArrayFromDataObject(pdto, IID_PPV_ARG(IShellItemArray, &array)); + if (SUCCEEDED(hr)) + { + for (i = 0, array->GetCount(&count); i < count && SUCCEEDED(hr); ++i) + { + CComPtr item; + hr = array->GetItemAt(i, &item); + if (SUCCEEDED(hr)) + { + CComHeapPtr path; + hr = item->GetDisplayName(SIGDN_DESKTOPABSOLUTEPARSING, &path); + if (SUCCEEDED(hr)) + { + AppendToPathList(paths, path, i); + } + } + } + } +#else + FIXME("Implement and use SHCreateShellItemArrayFromDataObject\n"); + CDataObjectHIDA pCIDA(pdto); + HRESULT hr = pCIDA.hr(); + if (SUCCEEDED(hr)) + { + for (i = 0, count = pCIDA->cidl; i < count && SUCCEEDED(hr); ++i) + { + PCUIDLIST_ABSOLUTE folder = HIDA_GetPIDLFolder(pCIDA); + PCUIDLIST_RELATIVE item = HIDA_GetPIDLItem(pCIDA, i); + CComHeapPtr full; + hr = SHILCombine(folder, item, &full); + if (SUCCEEDED(hr)) + { + PCUITEMID_CHILD child; + CComPtr sf; + hr = SHBindToParent(full, IID_PPV_ARG(IShellFolder, &sf), &child); + if (SUCCEEDED(hr)) + { + STRRET strret; + hr = sf->GetDisplayNameOf(child, SHGDN_FORPARSING, &strret); + if (SUCCEEDED(hr)) + { + CComHeapPtr path; + hr = StrRetToStrW(&strret, child, &path); + if (SUCCEEDED(hr)) + { + AppendToPathList(paths, path, i); + } + } + } + } + } + } + else + { + FORMATETC fmte = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }; + STGMEDIUM stgm; + hr = pdto->GetData(&fmte, &stgm); + if (SUCCEEDED(hr)) + { + for (i = 0, count = DragQueryFileW((HDROP)stgm.hGlobal, -1, NULL, 0); i < count && SUCCEEDED(hr); ++i) + { + WCHAR path[MAX_PATH]; + if (DragQueryFileW((HDROP)stgm.hGlobal, i, path, _countof(path))) + { + AppendToPathList(paths, path, i); + } + } + ReleaseStgMedium(&stgm); + } + } +#endif + + if (SUCCEEDED(hr)) + { + DWORD err = SetClipboardFromString(paths); + hr = HRESULT_FROM_WIN32(err); + } + + if (SUCCEEDED(hr)) + *pdwEffect &= DROPEFFECT_COPY; + else + *pdwEffect &= DROPEFFECT_NONE; + return hr; +} diff --git a/dll/win32/shell32/CCopyAsPathMenu.h b/dll/win32/shell32/CCopyAsPathMenu.h new file mode 100644 index 00000000000..f11efd20a90 --- /dev/null +++ b/dll/win32/shell32/CCopyAsPathMenu.h @@ -0,0 +1,41 @@ +/* + * PROJECT: ReactOS shell32 + * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) + * PURPOSE: Copy as Path Menu implementation + * COPYRIGHT: Copyright 2024 Whindmar Saksit + */ + +#pragma once + +class CCopyAsPathMenu : + public CComCoClass, + public CComObjectRootEx, + public IDropTarget +{ +public: + DECLARE_REGISTRY_RESOURCEID(IDR_COPYASPATHMENU) + DECLARE_NOT_AGGREGATABLE(CCopyAsPathMenu) + + DECLARE_PROTECT_FINAL_CONSTRUCT() + + BEGIN_COM_MAP(CCopyAsPathMenu) + COM_INTERFACE_ENTRY_IID(IID_IDropTarget, IDropTarget) + END_COM_MAP() + + // IDropTarget + STDMETHODIMP DragEnter(IDataObject *pdto, DWORD grfKeyState, POINTL ptl, DWORD *pdwEffect) + { + *pdwEffect &= DROPEFFECT_COPY; + return S_OK; + } + STDMETHODIMP DragOver(DWORD grfKeyState, POINTL ptl, DWORD *pdwEffect) + { + *pdwEffect &= DROPEFFECT_COPY; + return S_OK; + } + STDMETHODIMP DragLeave() + { + return S_OK; + } + STDMETHODIMP Drop(IDataObject *pdto, DWORD grfKeyState, POINTL ptl, DWORD *pdwEffect); +}; diff --git a/dll/win32/shell32/CCopyMoveToMenu.cpp b/dll/win32/shell32/CCopyMoveToMenu.cpp index f07328cee7d..859b05eb5b7 100644 --- a/dll/win32/shell32/CCopyMoveToMenu.cpp +++ b/dll/win32/shell32/CCopyMoveToMenu.cpp @@ -436,145 +436,3 @@ CCopyMoveToMenu::GetSite(REFIID riid, void **ppvSite) return m_pSite->QueryInterface(riid, ppvSite); } - -static DWORD -SetClipboard(UINT cf, const void* data, SIZE_T size) -{ - BOOL succ = FALSE; - HGLOBAL handle = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE, size); - if (handle) - { - LPVOID clipdata = GlobalLock(handle); - if (clipdata) - { - CopyMemory(clipdata, data, size); - GlobalUnlock(handle); - if (OpenClipboard(NULL)) - { - EmptyClipboard(); - succ = SetClipboardData(cf, handle) != NULL; - CloseClipboard(); - } - } - if (!succ) - { - GlobalFree(handle); - } - } - return succ ? ERROR_SUCCESS : GetLastError(); -} - -static DWORD -SetClipboardFromString(LPCWSTR str) -{ - SIZE_T cch = lstrlenW(str) + 1, size = cch * sizeof(WCHAR); - if (size > cch) - return SetClipboard(CF_UNICODETEXT, str, size); - else - return ERROR_BUFFER_OVERFLOW; -} - -static void -AppendToPathList(CStringW &paths, LPCWSTR path, DWORD index) -{ - if (index) - paths += L"\r\n"; - LPCWSTR quote = StrChrW(path, L' '); - if (quote) - paths += L'\"'; - paths += path; - if (quote) - paths += L'\"'; -} - -STDMETHODIMP -CCopyAsPathMenu::Drop(IDataObject *pdto, DWORD grfKeyState, POINTL ptl, DWORD *pdwEffect) -{ - CStringW paths; - DWORD i, count; -#if 0 - CComPtr array; - HRESULT hr = SHCreateShellItemArrayFromDataObject(pdto, IID_PPV_ARG(IShellItemArray, &array)); - if (SUCCEEDED(hr)) - { - for (i = 0, array->GetCount(&count); i < count && SUCCEEDED(hr); ++i) - { - CComPtr item; - hr = array->GetItemAt(i, &item); - if (SUCCEEDED(hr)) - { - CComHeapPtr path; - hr = item->GetDisplayName(SIGDN_DESKTOPABSOLUTEPARSING, &path); - if (SUCCEEDED(hr)) - { - AppendToPathList(paths, path, i); - } - } - } - } -#else - FIXME("Implement and use SHCreateShellItemArrayFromDataObject\n"); - CDataObjectHIDA pCIDA(pdto); - HRESULT hr = pCIDA.hr(); - if (SUCCEEDED(hr)) - { - for (i = 0, count = pCIDA->cidl; i < count && SUCCEEDED(hr); ++i) - { - PCUIDLIST_ABSOLUTE folder = HIDA_GetPIDLFolder(pCIDA); - PCUIDLIST_RELATIVE item = HIDA_GetPIDLItem(pCIDA, i); - CComHeapPtr full; - hr = SHILCombine(folder, item, &full); - if (SUCCEEDED(hr)) - { - PCUITEMID_CHILD child; - CComPtr sf; - hr = SHBindToParent(full, IID_PPV_ARG(IShellFolder, &sf), &child); - if (SUCCEEDED(hr)) - { - STRRET strret; - hr = sf->GetDisplayNameOf(child, SHGDN_FORPARSING, &strret); - if (SUCCEEDED(hr)) - { - CComHeapPtr path; - hr = StrRetToStrW(&strret, child, &path); - if (SUCCEEDED(hr)) - { - AppendToPathList(paths, path, i); - } - } - } - } - } - } - else - { - FORMATETC fmte = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }; - STGMEDIUM stgm; - hr = pdto->GetData(&fmte, &stgm); - if (SUCCEEDED(hr)) - { - for (i = 0, count = DragQueryFileW((HDROP)stgm.hGlobal, -1, NULL, 0); i < count && SUCCEEDED(hr); ++i) - { - WCHAR path[MAX_PATH]; - if (DragQueryFileW((HDROP)stgm.hGlobal, i, path, _countof(path))) - { - AppendToPathList(paths, path, i); - } - } - ReleaseStgMedium(&stgm); - } - } -#endif - - if (SUCCEEDED(hr)) - { - DWORD err = SetClipboardFromString(paths); - hr = HRESULT_FROM_WIN32(err); - } - - if (SUCCEEDED(hr)) - *pdwEffect &= DROPEFFECT_COPY; - else - *pdwEffect &= DROPEFFECT_NONE; - return hr; -} diff --git a/dll/win32/shell32/CCopyMoveToMenu.h b/dll/win32/shell32/CCopyMoveToMenu.h index 224352fc6cb..3b9de7ad91a 100644 --- a/dll/win32/shell32/CCopyMoveToMenu.h +++ b/dll/win32/shell32/CCopyMoveToMenu.h @@ -109,35 +109,3 @@ class CMoveToMenu UINT GetFileOp() const override { return FO_MOVE; } LPCSTR GetVerb() const override { return "moveto"; } }; - -class CCopyAsPathMenu - : public CComCoClass - , public CComObjectRootEx - , public IDropTarget -{ -public: - DECLARE_REGISTRY_RESOURCEID(IDR_COPYASPATHMENU) - DECLARE_NOT_AGGREGATABLE(CCopyAsPathMenu) - DECLARE_PROTECT_FINAL_CONSTRUCT() - - BEGIN_COM_MAP(CCopyAsPathMenu) - COM_INTERFACE_ENTRY_IID(IID_IDropTarget, IDropTarget) - END_COM_MAP() - - // IDropTarget - STDMETHODIMP DragEnter(IDataObject *pdto, DWORD grfKeyState, POINTL ptl, DWORD *pdwEffect) - { - *pdwEffect &= DROPEFFECT_COPY; - return S_OK; - } - STDMETHODIMP DragOver(DWORD grfKeyState, POINTL ptl, DWORD *pdwEffect) - { - *pdwEffect &= DROPEFFECT_COPY; - return S_OK; - } - STDMETHODIMP DragLeave() - { - return S_OK; - } - STDMETHODIMP Drop(IDataObject *pdto, DWORD grfKeyState, POINTL ptl, DWORD *pdwEffect); -}; diff --git a/dll/win32/shell32/CMakeLists.txt b/dll/win32/shell32/CMakeLists.txt index 264b116f5a2..f90babb9762 100644 --- a/dll/win32/shell32/CMakeLists.txt +++ b/dll/win32/shell32/CMakeLists.txt @@ -74,6 +74,7 @@ list(APPEND SOURCE CNewMenu.cpp CSendToMenu.cpp CCopyMoveToMenu.cpp + CCopyAsPathMenu.cpp CShellDispatch.cpp CFolder.cpp CFolderItems.cpp diff --git a/dll/win32/shell32/precomp.h b/dll/win32/shell32/precomp.h index 19c4255fc0f..af2af91776f 100644 --- a/dll/win32/shell32/precomp.h +++ b/dll/win32/shell32/precomp.h @@ -96,6 +96,7 @@ #include "CNewMenu.h" #include "CSendToMenu.h" #include "CCopyMoveToMenu.h" +#include "CCopyAsPathMenu.h" #include "dialogs/filedefext.h" #include "dialogs/drvdefext.h" #include "CQueryAssociations.h" From a706f6ba78ce961bcfc0232e57524b5b57a3480f Mon Sep 17 00:00:00 2001 From: Thamatip Chitpong Date: Tue, 9 Apr 2024 22:33:32 +0700 Subject: [PATCH 032/182] [SHELL32] Fix separator not showing for CopyTo and MoveTo menu Fix wrong previous item index. --- dll/win32/shell32/CCopyMoveToMenu.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/dll/win32/shell32/CCopyMoveToMenu.cpp b/dll/win32/shell32/CCopyMoveToMenu.cpp index 859b05eb5b7..55a11c4fe19 100644 --- a/dll/win32/shell32/CCopyMoveToMenu.cpp +++ b/dll/win32/shell32/CCopyMoveToMenu.cpp @@ -257,6 +257,21 @@ HRESULT CCopyMoveToMenu::DoAction(LPCMINVOKECOMMANDINFO lpici) return hr; } +static BOOL +GetPreviousMenuItemInfo(HMENU hMenu, UINT iItem, LPMENUITEMINFOW lpmii) +{ + BOOL bSuccess = FALSE; + + while (iItem > 0) + { + bSuccess = GetMenuItemInfoW(hMenu, --iItem, TRUE, lpmii); + if (bSuccess || (!bSuccess && GetLastError() != ERROR_MENU_ITEM_NOT_FOUND)) + break; + } + + return bSuccess; +} + STDMETHODIMP CCopyToMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu, @@ -279,7 +294,7 @@ CCopyToMenu::QueryContextMenu(HMENU hMenu, ZeroMemory(&mii, sizeof(mii)); mii.cbSize = sizeof(mii); mii.fMask = MIIM_TYPE; - if (GetMenuItemInfoW(hMenu, indexMenu - 1, TRUE, &mii) && + if (GetPreviousMenuItemInfo(hMenu, indexMenu, &mii) && mii.fType != MFT_SEPARATOR) { ZeroMemory(&mii, sizeof(mii)); @@ -338,7 +353,7 @@ CMoveToMenu::QueryContextMenu(HMENU hMenu, mii.fMask = MIIM_TYPE; mii.dwTypeData = szBuff; mii.cch = _countof(szBuff); - if (GetMenuItemInfoW(hMenu, indexMenu - 1, TRUE, &mii) && + if (GetPreviousMenuItemInfo(hMenu, indexMenu, &mii) && mii.fType != MFT_SEPARATOR && !(mii.fType == MFT_STRING && CStringW(szBuff) == strCopyTo)) { From 7586fe5c1d25a5524ec7ddc46ab6e2547f2c01ed Mon Sep 17 00:00:00 2001 From: Thamatip Chitpong Date: Tue, 9 Apr 2024 10:50:48 +0700 Subject: [PATCH 033/182] [SHELL32] Rewrite CCopyAsPathMenu on top of IContextMenu Also use the same registry key as Windows 10. --- dll/win32/shell32/CCopyAsPathMenu.cpp | 71 ++++++++++++++++++-- dll/win32/shell32/CCopyAsPathMenu.h | 40 +++++------ dll/win32/shell32/res/rgs/copyaspathmenu.rgs | 9 +-- 3 files changed, 89 insertions(+), 31 deletions(-) diff --git a/dll/win32/shell32/CCopyAsPathMenu.cpp b/dll/win32/shell32/CCopyAsPathMenu.cpp index 55bac2f4909..1c78776a8c8 100644 --- a/dll/win32/shell32/CCopyAsPathMenu.cpp +++ b/dll/win32/shell32/CCopyAsPathMenu.cpp @@ -3,12 +3,23 @@ * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) * PURPOSE: Copy as Path Menu implementation * COPYRIGHT: Copyright 2024 Whindmar Saksit + * Copyright 2024 Thamatip Chitpong */ #include "precomp.h" WINE_DEFAULT_DEBUG_CHANNEL(shell); +#define IDC_COPYASPATH 0 + +CCopyAsPathMenu::CCopyAsPathMenu() +{ +} + +CCopyAsPathMenu::~CCopyAsPathMenu() +{ +} + static DWORD SetClipboard(UINT cf, const void* data, SIZE_T size) { @@ -59,8 +70,8 @@ AppendToPathList(CStringW &paths, LPCWSTR path, DWORD index) paths += L'\"'; } -STDMETHODIMP -CCopyAsPathMenu::Drop(IDataObject *pdto, DWORD grfKeyState, POINTL ptl, DWORD *pdwEffect) +HRESULT +CCopyAsPathMenu::DoCopyAsPath(IDataObject *pdto) { CStringW paths; DWORD i, count; @@ -144,9 +155,57 @@ CCopyAsPathMenu::Drop(IDataObject *pdto, DWORD grfKeyState, POINTL ptl, DWORD *p hr = HRESULT_FROM_WIN32(err); } - if (SUCCEEDED(hr)) - *pdwEffect &= DROPEFFECT_COPY; - else - *pdwEffect &= DROPEFFECT_NONE; return hr; } + +STDMETHODIMP +CCopyAsPathMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) +{ + MENUITEMINFOW mii; + + TRACE("CCopyAsPathMenu::QueryContextMenu(%p %p %u %u %u %u)\n", this, + hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags); + + if ((uFlags & CMF_NOVERBS) || !(uFlags & CMF_EXTENDEDVERBS)) + return MAKE_HRESULT(SEVERITY_SUCCESS, 0, idCmdFirst); + + // Insert "Copy as path" + CStringW strText(MAKEINTRESOURCEW(IDS_COPYASPATHMENU)); + ZeroMemory(&mii, sizeof(mii)); + mii.cbSize = sizeof(mii); + mii.fMask = MIIM_ID | MIIM_TYPE; + mii.fType = MFT_STRING; + mii.wID = idCmdFirst + IDC_COPYASPATH; + mii.dwTypeData = strText.GetBuffer(); + if (InsertMenuItemW(hMenu, indexMenu, TRUE, &mii)) + return MAKE_HRESULT(SEVERITY_SUCCESS, 0, mii.wID - idCmdFirst + 1); + + return MAKE_HRESULT(SEVERITY_SUCCESS, 0, idCmdFirst); +} + +STDMETHODIMP +CCopyAsPathMenu::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi) +{ + TRACE("CCopyAsPathMenu::InvokeCommand(%p %p)\n", this, lpcmi); + + if (IS_INTRESOURCE(lpcmi->lpVerb) && LOWORD(lpcmi->lpVerb) == IDC_COPYASPATH) + return DoCopyAsPath(m_pDataObject); + + return E_FAIL; +} + +STDMETHODIMP +CCopyAsPathMenu::GetCommandString(UINT_PTR idCommand, UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen) +{ + FIXME("CCopyAsPathMenu::GetCommandString(%p %lu %u %p %p %u)\n", this, + idCommand, uFlags, lpReserved, lpszName, uMaxNameLen); + + return E_NOTIMPL; +} + +STDMETHODIMP +CCopyAsPathMenu::Initialize(PCIDLIST_ABSOLUTE pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID) +{ + m_pDataObject = pdtobj; + return S_OK; +} diff --git a/dll/win32/shell32/CCopyAsPathMenu.h b/dll/win32/shell32/CCopyAsPathMenu.h index f11efd20a90..a72af085f19 100644 --- a/dll/win32/shell32/CCopyAsPathMenu.h +++ b/dll/win32/shell32/CCopyAsPathMenu.h @@ -3,6 +3,7 @@ * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) * PURPOSE: Copy as Path Menu implementation * COPYRIGHT: Copyright 2024 Whindmar Saksit + * Copyright 2024 Thamatip Chitpong */ #pragma once @@ -10,32 +11,33 @@ class CCopyAsPathMenu : public CComCoClass, public CComObjectRootEx, - public IDropTarget + public IContextMenu, + public IShellExtInit { +private: + CComPtr m_pDataObject; + + HRESULT DoCopyAsPath(IDataObject *pdto); + public: + CCopyAsPathMenu(); + ~CCopyAsPathMenu(); + + // IContextMenu + STDMETHODIMP QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) override; + STDMETHODIMP InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi) override; + STDMETHODIMP GetCommandString(UINT_PTR idCommand, UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen) override; + + // IShellExtInit + STDMETHODIMP Initialize(PCIDLIST_ABSOLUTE pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID) override; + DECLARE_REGISTRY_RESOURCEID(IDR_COPYASPATHMENU) DECLARE_NOT_AGGREGATABLE(CCopyAsPathMenu) DECLARE_PROTECT_FINAL_CONSTRUCT() BEGIN_COM_MAP(CCopyAsPathMenu) - COM_INTERFACE_ENTRY_IID(IID_IDropTarget, IDropTarget) + COM_INTERFACE_ENTRY_IID(IID_IContextMenu, IContextMenu) + COM_INTERFACE_ENTRY_IID(IID_IShellExtInit, IShellExtInit) END_COM_MAP() - - // IDropTarget - STDMETHODIMP DragEnter(IDataObject *pdto, DWORD grfKeyState, POINTL ptl, DWORD *pdwEffect) - { - *pdwEffect &= DROPEFFECT_COPY; - return S_OK; - } - STDMETHODIMP DragOver(DWORD grfKeyState, POINTL ptl, DWORD *pdwEffect) - { - *pdwEffect &= DROPEFFECT_COPY; - return S_OK; - } - STDMETHODIMP DragLeave() - { - return S_OK; - } - STDMETHODIMP Drop(IDataObject *pdto, DWORD grfKeyState, POINTL ptl, DWORD *pdwEffect); }; diff --git a/dll/win32/shell32/res/rgs/copyaspathmenu.rgs b/dll/win32/shell32/res/rgs/copyaspathmenu.rgs index a1961e240c1..0aff18720ce 100644 --- a/dll/win32/shell32/res/rgs/copyaspathmenu.rgs +++ b/dll/win32/shell32/res/rgs/copyaspathmenu.rgs @@ -12,15 +12,12 @@ HKCR } NoRemove AllFilesystemObjects { - NoRemove shell + NoRemove shellex { - ForceRemove copyaspath + NoRemove ContextMenuHandlers { - val MUIVerb = s '@%MODULE%,-30328' - val Extended = s '' - DropTarget + ForceRemove CopyAsPathMenu = s '{F3D06E7C-1E45-4A26-847E-F9FCDEE59BE0}' { - val CLSID = s '{F3D06E7C-1E45-4A26-847E-F9FCDEE59BE0}' } } } From eb39c408afa1f0ebd57536f85242f8f66054a2b6 Mon Sep 17 00:00:00 2001 From: Maj Date: Sat, 27 Apr 2024 10:48:36 +0200 Subject: [PATCH 034/182] [README] Update RosBE links and badges to version 2.2.1 --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 67c367f8c63..d465cc0bd5f 100644 --- a/README.md +++ b/README.md @@ -127,10 +127,10 @@ The main development is done on [GitHub](https://github.com/reactos/reactos). We There is also an obsolete [SVN archive repository](https://svn.reactos.org/reactos/) that is kept for historical purposes. [coverity.badge]: https://scan.coverity.com/projects/205/badge.svg?flat=1 -[rosbewin.badge]: https://img.shields.io/badge/RosBE_Windows-2.2.0-0688CB.svg -[rosbeunix.badge]: https://img.shields.io/badge/RosBE_Unix-2.2-0688CB.svg +[rosbewin.badge]: https://img.shields.io/badge/RosBE_Windows-2.2.1-0688CB.svg +[rosbeunix.badge]: https://img.shields.io/badge/RosBE_Unix-2.2.1-0688CB.svg [prwelcome.badge]: https://img.shields.io/badge/PR-welcome-0688CB.svg [coverity.link]: https://scan.coverity.com/projects/205 -[rosbewin.link]: https://sourceforge.net/projects/reactos/files/RosBE-Windows/i386/2.2.0/ -[rosbeunix.link]: https://sourceforge.net/projects/reactos/files/RosBE-Unix/2.2/ +[rosbewin.link]: https://sourceforge.net/projects/reactos/files/RosBE-Windows/i386/2.2.1/ +[rosbeunix.link]: https://sourceforge.net/projects/reactos/files/RosBE-Unix/2.2.1/ From 9d8ea85398669b9b7d548862dc4ecacdcd9cb61f Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 21 Apr 2024 16:27:47 +0300 Subject: [PATCH 035/182] [RTL] Disable an MSVC warning in wine source --- sdk/lib/rtl/CMakeLists.txt | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/sdk/lib/rtl/CMakeLists.txt b/sdk/lib/rtl/CMakeLists.txt index 8550fe9fb8e..28321a868e9 100644 --- a/sdk/lib/rtl/CMakeLists.txt +++ b/sdk/lib/rtl/CMakeLists.txt @@ -10,10 +10,21 @@ if (CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang") add_compile_options(-Wunused-result) endif() +list(APPEND RTL_WINE_SOURCE + actctx.c + timerqueue.c + wait.c +) + +if(MSVC) + # Silence warning C4267: 'initializing': conversion from 'size_t' to 'const int', possible loss of data + set_source_files_properties(${RTL_WINE_SOURCE} PROPERTIES COMPILE_FLAGS /wd4267) +endif() + list(APPEND SOURCE + ${RTL_WINE_SOURCE} access.c acl.c - actctx.c appverifier.c assert.c atom.c @@ -64,14 +75,12 @@ list(APPEND SOURCE sysvol.c thread.c time.c - timerqueue.c timezone.c trace.c unicode.c unicodeprefix.c vectoreh.c version.c - wait.c workitem.c rtl.h) From 3b9b26f91230f27544a6c259cd2ccf5cd46740e8 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 20 Apr 2024 14:15:56 +0300 Subject: [PATCH 036/182] [RTL] actctx.c: Revert GetProcessHeap -> RtlGetProcessHeap changes --- sdk/lib/rtl/actctx.c | 242 ++++++++++++++++++++++--------------------- 1 file changed, 122 insertions(+), 120 deletions(-) diff --git a/sdk/lib/rtl/actctx.c b/sdk/lib/rtl/actctx.c index 9f957792dfe..816f19d1f84 100644 --- a/sdk/lib/rtl/actctx.c +++ b/sdk/lib/rtl/actctx.c @@ -23,6 +23,8 @@ #include +#define GetProcessHeap() RtlGetProcessHeap() + BOOLEAN RtlpNotAllowingMultipleActivation; #define ACTCTX_FLAGS_ALL (\ @@ -769,7 +771,7 @@ static WCHAR *strdupW(const WCHAR* str) { WCHAR* ptr; - if (!(ptr = RtlAllocateHeap(RtlGetProcessHeap(), 0, (strlenW(str) + 1) * sizeof(WCHAR)))) + if (!(ptr = RtlAllocateHeap(GetProcessHeap(), 0, (strlenW(str) + 1) * sizeof(WCHAR)))) return NULL; return strcpyW(ptr, str); } @@ -778,7 +780,7 @@ static WCHAR *xmlstrdupW(const xmlstr_t* str) { WCHAR *strW; - if ((strW = RtlAllocateHeap(RtlGetProcessHeap(), 0, (str->len + 1) * sizeof(WCHAR)))) + if ((strW = RtlAllocateHeap(GetProcessHeap(), 0, (str->len + 1) * sizeof(WCHAR)))) { memcpy( strW, str->ptr, str->len * sizeof(WCHAR) ); strW[str->len] = 0; @@ -849,13 +851,13 @@ static struct assembly *add_assembly(ACTIVATION_CONTEXT *actctx, enum assembly_t if (actctx->assemblies) { new_count = actctx->allocated_assemblies * 2; - ptr = RtlReAllocateHeap( RtlGetProcessHeap(), HEAP_ZERO_MEMORY, + ptr = RtlReAllocateHeap( GetProcessHeap(), HEAP_ZERO_MEMORY, actctx->assemblies, new_count * sizeof(*assembly) ); } else { new_count = 4; - ptr = RtlAllocateHeap( RtlGetProcessHeap(), HEAP_ZERO_MEMORY, new_count * sizeof(*assembly) ); + ptr = RtlAllocateHeap( GetProcessHeap(), HEAP_ZERO_MEMORY, new_count * sizeof(*assembly) ); } if (!ptr) return NULL; actctx->assemblies = ptr; @@ -878,13 +880,13 @@ static struct dll_redirect* add_dll_redirect(struct assembly* assembly) if (assembly->dlls) { new_count = assembly->allocated_dlls * 2; - ptr = RtlReAllocateHeap( RtlGetProcessHeap(), HEAP_ZERO_MEMORY, + ptr = RtlReAllocateHeap( GetProcessHeap(), HEAP_ZERO_MEMORY, assembly->dlls, new_count * sizeof(*assembly->dlls) ); } else { new_count = 4; - ptr = RtlAllocateHeap( RtlGetProcessHeap(), HEAP_ZERO_MEMORY, new_count * sizeof(*assembly->dlls) ); + ptr = RtlAllocateHeap( GetProcessHeap(), HEAP_ZERO_MEMORY, new_count * sizeof(*assembly->dlls) ); } if (!ptr) return NULL; assembly->dlls = ptr; @@ -899,13 +901,13 @@ static PCOMPATIBILITY_CONTEXT_ELEMENT add_compat_context(struct assembly* assemb if (assembly->num_compat_contexts) { unsigned int new_count = assembly->num_compat_contexts + 1; - ptr = RtlReAllocateHeap( RtlGetProcessHeap(), HEAP_ZERO_MEMORY, + ptr = RtlReAllocateHeap( GetProcessHeap(), HEAP_ZERO_MEMORY, assembly->compat_contexts, new_count * sizeof(COMPATIBILITY_CONTEXT_ELEMENT) ); } else { - ptr = RtlAllocateHeap( RtlGetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(COMPATIBILITY_CONTEXT_ELEMENT) ); + ptr = RtlAllocateHeap( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(COMPATIBILITY_CONTEXT_ELEMENT) ); } if (!ptr) return NULL; assembly->compat_contexts = ptr; @@ -914,11 +916,11 @@ static PCOMPATIBILITY_CONTEXT_ELEMENT add_compat_context(struct assembly* assemb static void free_assembly_identity(struct assembly_identity *ai) { - RtlFreeHeap( RtlGetProcessHeap(), 0, ai->name ); - RtlFreeHeap( RtlGetProcessHeap(), 0, ai->arch ); - RtlFreeHeap( RtlGetProcessHeap(), 0, ai->public_key ); - RtlFreeHeap( RtlGetProcessHeap(), 0, ai->language ); - RtlFreeHeap( RtlGetProcessHeap(), 0, ai->type ); + RtlFreeHeap( GetProcessHeap(), 0, ai->name ); + RtlFreeHeap( GetProcessHeap(), 0, ai->arch ); + RtlFreeHeap( GetProcessHeap(), 0, ai->public_key ); + RtlFreeHeap( GetProcessHeap(), 0, ai->language ); + RtlFreeHeap( GetProcessHeap(), 0, ai->type ); } static struct entity* add_entity(struct entity_array *array, DWORD kind) @@ -932,13 +934,13 @@ static struct entity* add_entity(struct entity_array *array, DWORD kind) if (array->base) { new_count = array->allocated * 2; - ptr = RtlReAllocateHeap( RtlGetProcessHeap(), HEAP_ZERO_MEMORY, + ptr = RtlReAllocateHeap( GetProcessHeap(), HEAP_ZERO_MEMORY, array->base, new_count * sizeof(*array->base) ); } else { new_count = 4; - ptr = RtlAllocateHeap( RtlGetProcessHeap(), HEAP_ZERO_MEMORY, new_count * sizeof(*array->base) ); + ptr = RtlAllocateHeap( GetProcessHeap(), HEAP_ZERO_MEMORY, new_count * sizeof(*array->base) ); } if (!ptr) return NULL; array->base = ptr; @@ -958,39 +960,39 @@ static void free_entity_array(struct entity_array *array) switch (entity->kind) { case ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION: - RtlFreeHeap(RtlGetProcessHeap(), 0, entity->u.comclass.clsid); - RtlFreeHeap(RtlGetProcessHeap(), 0, entity->u.comclass.tlbid); - RtlFreeHeap(RtlGetProcessHeap(), 0, entity->u.comclass.progid); - RtlFreeHeap(RtlGetProcessHeap(), 0, entity->u.comclass.name); - RtlFreeHeap(RtlGetProcessHeap(), 0, entity->u.comclass.version); + RtlFreeHeap(GetProcessHeap(), 0, entity->u.comclass.clsid); + RtlFreeHeap(GetProcessHeap(), 0, entity->u.comclass.tlbid); + RtlFreeHeap(GetProcessHeap(), 0, entity->u.comclass.progid); + RtlFreeHeap(GetProcessHeap(), 0, entity->u.comclass.name); + RtlFreeHeap(GetProcessHeap(), 0, entity->u.comclass.version); for (j = 0; j < entity->u.comclass.progids.num; j++) - RtlFreeHeap(RtlGetProcessHeap(), 0, entity->u.comclass.progids.progids[j]); - RtlFreeHeap(RtlGetProcessHeap(), 0, entity->u.comclass.progids.progids); + RtlFreeHeap(GetProcessHeap(), 0, entity->u.comclass.progids.progids[j]); + RtlFreeHeap(GetProcessHeap(), 0, entity->u.comclass.progids.progids); break; case ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION: - RtlFreeHeap(RtlGetProcessHeap(), 0, entity->u.ifaceps.iid); - RtlFreeHeap(RtlGetProcessHeap(), 0, entity->u.ifaceps.base); - RtlFreeHeap(RtlGetProcessHeap(), 0, entity->u.ifaceps.ps32); - RtlFreeHeap(RtlGetProcessHeap(), 0, entity->u.ifaceps.name); - RtlFreeHeap(RtlGetProcessHeap(), 0, entity->u.ifaceps.tlib); + RtlFreeHeap(GetProcessHeap(), 0, entity->u.ifaceps.iid); + RtlFreeHeap(GetProcessHeap(), 0, entity->u.ifaceps.base); + RtlFreeHeap(GetProcessHeap(), 0, entity->u.ifaceps.ps32); + RtlFreeHeap(GetProcessHeap(), 0, entity->u.ifaceps.name); + RtlFreeHeap(GetProcessHeap(), 0, entity->u.ifaceps.tlib); break; case ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION: - RtlFreeHeap(RtlGetProcessHeap(), 0, entity->u.typelib.tlbid); - RtlFreeHeap(RtlGetProcessHeap(), 0, entity->u.typelib.helpdir); + RtlFreeHeap(GetProcessHeap(), 0, entity->u.typelib.tlbid); + RtlFreeHeap(GetProcessHeap(), 0, entity->u.typelib.helpdir); break; case ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION: - RtlFreeHeap(RtlGetProcessHeap(), 0, entity->u.class.name); + RtlFreeHeap(GetProcessHeap(), 0, entity->u.class.name); break; case ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES: - RtlFreeHeap(RtlGetProcessHeap(), 0, entity->u.clrsurrogate.name); - RtlFreeHeap(RtlGetProcessHeap(), 0, entity->u.clrsurrogate.clsid); - RtlFreeHeap(RtlGetProcessHeap(), 0, entity->u.clrsurrogate.version); + RtlFreeHeap(GetProcessHeap(), 0, entity->u.clrsurrogate.name); + RtlFreeHeap(GetProcessHeap(), 0, entity->u.clrsurrogate.clsid); + RtlFreeHeap(GetProcessHeap(), 0, entity->u.clrsurrogate.version); break; default: DPRINT1("Unknown entity kind %u\n", entity->kind); } } - RtlFreeHeap( RtlGetProcessHeap(), 0, array->base ); + RtlFreeHeap( GetProcessHeap(), 0, array->base ); } static BOOL is_matching_string( const WCHAR *str1, const WCHAR *str2 ) @@ -1051,13 +1053,13 @@ static BOOL add_dependent_assembly_id(struct actctx_loader* acl, if (acl->dependencies) { new_count = acl->allocated_dependencies * 2; - ptr = RtlReAllocateHeap(RtlGetProcessHeap(), 0, acl->dependencies, + ptr = RtlReAllocateHeap(GetProcessHeap(), 0, acl->dependencies, new_count * sizeof(acl->dependencies[0])); } else { new_count = 4; - ptr = RtlAllocateHeap(RtlGetProcessHeap(), 0, new_count * sizeof(acl->dependencies[0])); + ptr = RtlAllocateHeap(GetProcessHeap(), 0, new_count * sizeof(acl->dependencies[0])); } if (!ptr) return FALSE; acl->dependencies = ptr; @@ -1073,7 +1075,7 @@ static void free_depend_manifests(struct actctx_loader* acl) unsigned int i; for (i = 0; i < acl->num_dependencies; i++) free_assembly_identity(&acl->dependencies[i]); - RtlFreeHeap(RtlGetProcessHeap(), 0, acl->dependencies); + RtlFreeHeap(GetProcessHeap(), 0, acl->dependencies); } static WCHAR *build_assembly_dir(struct assembly_identity* ai) @@ -1090,7 +1092,7 @@ static WCHAR *build_assembly_dir(struct assembly_identity* ai) strlenW(lang) + 1) * sizeof(WCHAR) + sizeof(mskeyW); WCHAR *ret; - if (!(ret = RtlAllocateHeap( RtlGetProcessHeap(), 0, size ))) return NULL; + if (!(ret = RtlAllocateHeap( GetProcessHeap(), 0, size ))) return NULL; strcpyW( ret, arch ); strcatW( ret, undW ); @@ -1143,7 +1145,7 @@ static WCHAR *build_assembly_id( const struct assembly_identity *ai ) if (ai->type) size += strlenW(typeW2) + strlenW(ai->type) + 2; size += strlenW(versionW2) + strlenW(version) + 2; - if (!(ret = RtlAllocateHeap( RtlGetProcessHeap(), 0, (size + 1) * sizeof(WCHAR) ))) + if (!(ret = RtlAllocateHeap( GetProcessHeap(), 0, (size + 1) * sizeof(WCHAR) ))) return NULL; if (ai->name) strcpyW( ret, ai->name ); @@ -1197,30 +1199,30 @@ static void actctx_release( ACTIVATION_CONTEXT *actctx ) { struct dll_redirect *dll = &assembly->dlls[j]; free_entity_array( &dll->entities ); - RtlFreeHeap( RtlGetProcessHeap(), 0, dll->name ); - RtlFreeHeap( RtlGetProcessHeap(), 0, dll->hash ); + RtlFreeHeap( GetProcessHeap(), 0, dll->name ); + RtlFreeHeap( GetProcessHeap(), 0, dll->hash ); } - RtlFreeHeap( RtlGetProcessHeap(), 0, assembly->dlls ); - RtlFreeHeap( RtlGetProcessHeap(), 0, assembly->manifest.info ); - RtlFreeHeap( RtlGetProcessHeap(), 0, assembly->directory ); - RtlFreeHeap( RtlGetProcessHeap(), 0, assembly->compat_contexts ); + RtlFreeHeap( GetProcessHeap(), 0, assembly->dlls ); + RtlFreeHeap( GetProcessHeap(), 0, assembly->manifest.info ); + RtlFreeHeap( GetProcessHeap(), 0, assembly->directory ); + RtlFreeHeap( GetProcessHeap(), 0, assembly->compat_contexts ); free_entity_array( &assembly->entities ); free_assembly_identity(&assembly->id); } - RtlFreeHeap( RtlGetProcessHeap(), 0, actctx->config.info ); - RtlFreeHeap( RtlGetProcessHeap(), 0, actctx->appdir.info ); - RtlFreeHeap( RtlGetProcessHeap(), 0, actctx->assemblies ); - RtlFreeHeap( RtlGetProcessHeap(), 0, actctx->dllredirect_section ); - RtlFreeHeap( RtlGetProcessHeap(), 0, actctx->wndclass_section ); - RtlFreeHeap( RtlGetProcessHeap(), 0, actctx->tlib_section ); - RtlFreeHeap( RtlGetProcessHeap(), 0, actctx->comserver_section ); - RtlFreeHeap( RtlGetProcessHeap(), 0, actctx->ifaceps_section ); - RtlFreeHeap( RtlGetProcessHeap(), 0, actctx->clrsurrogate_section ); - RtlFreeHeap( RtlGetProcessHeap(), 0, actctx->progid_section ); + RtlFreeHeap( GetProcessHeap(), 0, actctx->config.info ); + RtlFreeHeap( GetProcessHeap(), 0, actctx->appdir.info ); + RtlFreeHeap( GetProcessHeap(), 0, actctx->assemblies ); + RtlFreeHeap( GetProcessHeap(), 0, actctx->dllredirect_section ); + RtlFreeHeap( GetProcessHeap(), 0, actctx->wndclass_section ); + RtlFreeHeap( GetProcessHeap(), 0, actctx->tlib_section ); + RtlFreeHeap( GetProcessHeap(), 0, actctx->comserver_section ); + RtlFreeHeap( GetProcessHeap(), 0, actctx->ifaceps_section ); + RtlFreeHeap( GetProcessHeap(), 0, actctx->clrsurrogate_section ); + RtlFreeHeap( GetProcessHeap(), 0, actctx->progid_section ); pActual = CONTAINING_RECORD(actctx, ACTIVATION_CONTEXT_WRAPPED, ActivationContext); pActual->MagicMarker = 0; - RtlFreeHeap(RtlGetProcessHeap(), 0, pActual); + RtlFreeHeap(GetProcessHeap(), 0, pActual); } } @@ -1639,12 +1641,12 @@ static BOOL com_class_add_progid(const xmlstr_t *progid, struct entity *entity) if (progids->allocated == 0) { progids->allocated = 4; - if (!(progids->progids = RtlAllocateHeap(RtlGetProcessHeap(), 0, progids->allocated * sizeof(WCHAR*)))) return FALSE; + if (!(progids->progids = RtlAllocateHeap(GetProcessHeap(), 0, progids->allocated * sizeof(WCHAR*)))) return FALSE; } if (progids->allocated == progids->num) { - WCHAR **new_progids = RtlReAllocateHeap(RtlGetProcessHeap(), 0, progids->progids, + WCHAR **new_progids = RtlReAllocateHeap(GetProcessHeap(), 0, progids->progids, 2 * progids->allocated * sizeof(WCHAR*)); if (!new_progids) return FALSE; progids->allocated *= 2; @@ -1786,7 +1788,7 @@ static void parse_add_interface_class( xmlbuf_t *xmlbuf, struct entity_array *en if (!(entity = add_entity(entities, ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION))) { - RtlFreeHeap(RtlGetProcessHeap(), 0, str); + RtlFreeHeap(GetProcessHeap(), 0, str); set_error( xmlbuf ); return; } @@ -1850,7 +1852,7 @@ static void parse_cominterface_proxy_stub_elem( xmlbuf_t *xmlbuf, struct dll_red parse_add_interface_class(xmlbuf, &dll->entities, acl, psclsid ? psclsid : entity->u.ifaceps.iid); - RtlFreeHeap(RtlGetProcessHeap(), 0, psclsid); + RtlFreeHeap(GetProcessHeap(), 0, psclsid); } static BOOL parse_typelib_flags(const xmlstr_t *value, struct entity *entity) @@ -2777,14 +2779,14 @@ static NTSTATUS parse_manifest( struct actctx_loader* acl, struct assembly_ident WCHAR *new_buff; unsigned int i; - if (!(new_buff = RtlAllocateHeap( RtlGetProcessHeap(), 0, size ))) + if (!(new_buff = RtlAllocateHeap( GetProcessHeap(), 0, size ))) return STATUS_NO_MEMORY; for (i = 0; i < size / sizeof(WCHAR); i++) new_buff[i] = RtlUshortByteSwap( buf[i] ); xmlbuf.ptr = new_buff; xmlbuf.end = xmlbuf.ptr + size / sizeof(WCHAR); status = parse_manifest_buffer( acl, assembly, ai, &xmlbuf ); - RtlFreeHeap( RtlGetProcessHeap(), 0, new_buff ); + RtlFreeHeap( GetProcessHeap(), 0, new_buff ); } else { @@ -2799,7 +2801,7 @@ static NTSTATUS parse_manifest( struct actctx_loader* acl, struct assembly_ident return STATUS_SXS_CANT_GEN_ACTCTX; } - new_buff = RtlAllocateHeap(RtlGetProcessHeap(), 0, sizeU); + new_buff = RtlAllocateHeap(GetProcessHeap(), 0, sizeU); if (!new_buff) return STATUS_NO_MEMORY; @@ -2813,7 +2815,7 @@ static NTSTATUS parse_manifest( struct actctx_loader* acl, struct assembly_ident xmlbuf.ptr = new_buff; xmlbuf.end = xmlbuf.ptr + sizeU / sizeof(WCHAR); status = parse_manifest_buffer(acl, assembly, ai, &xmlbuf); - RtlFreeHeap(RtlGetProcessHeap(), 0, new_buff); + RtlFreeHeap(GetProcessHeap(), 0, new_buff); } return status; } @@ -2842,7 +2844,7 @@ static NTSTATUS get_module_filename( HMODULE module, UNICODE_STRING *str, USHORT status = LdrFindEntryForAddress( module, &pldr ); if (status == STATUS_SUCCESS) { - if ((str->Buffer = RtlAllocateHeap( RtlGetProcessHeap(), 0, + if ((str->Buffer = RtlAllocateHeap( GetProcessHeap(), 0, pldr->FullDllName.Length + extra_len + sizeof(WCHAR) ))) { memcpy( str->Buffer, pldr->FullDllName.Buffer, pldr->FullDllName.Length + sizeof(WCHAR) ); @@ -3109,7 +3111,7 @@ static NTSTATUS get_manifest_in_associated_manifest( struct actctx_loader* acl, } else { - if (!(buffer = RtlAllocateHeap( RtlGetProcessHeap(), 0, + if (!(buffer = RtlAllocateHeap( GetProcessHeap(), 0, (strlenW(filename) + 10) * sizeof(WCHAR) + sizeof(dotManifestW) ))) return STATUS_NO_MEMORY; strcpyW( buffer, filename ); @@ -3142,7 +3144,7 @@ static WCHAR *lookup_manifest_file( HANDLE dir, struct assembly_identity *ai ) unsigned int data_pos = 0, data_len; char buffer[8192]; - if (!(lookup = RtlAllocateHeap( RtlGetProcessHeap(), 0, + if (!(lookup = RtlAllocateHeap( GetProcessHeap(), 0, (strlenW(ai->arch) + strlenW(ai->name) + strlenW(ai->public_key) + 20) * sizeof(WCHAR) + sizeof(lookup_fmtW) ))) @@ -3200,8 +3202,8 @@ static WCHAR *lookup_manifest_file( HANDLE dir, struct assembly_identity *ai ) } ai->version.build = build; ai->version.revision = revision; - RtlFreeHeap( RtlGetProcessHeap(), 0, ret ); - if ((ret = RtlAllocateHeap( RtlGetProcessHeap(), 0, dir_info->FileNameLength + sizeof(WCHAR) ))) + RtlFreeHeap( GetProcessHeap(), 0, ret ); + if ((ret = RtlAllocateHeap( GetProcessHeap(), 0, dir_info->FileNameLength + sizeof(WCHAR) ))) { memcpy( ret, dir_info->FileName, dir_info->FileNameLength ); ret[dir_info->FileNameLength/sizeof(WCHAR)] = 0; @@ -3209,7 +3211,7 @@ static WCHAR *lookup_manifest_file( HANDLE dir, struct assembly_identity *ai ) } } else DPRINT1("no matching file for %S\n", lookup); - RtlFreeHeap( RtlGetProcessHeap(), 0, lookup ); + RtlFreeHeap( GetProcessHeap(), 0, lookup ); return ret; } @@ -3227,7 +3229,7 @@ static NTSTATUS lookup_winsxs(struct actctx_loader* acl, struct assembly_identit if (!ai->arch || !ai->name || !ai->public_key) return STATUS_NO_SUCH_FILE; - if (!(path = RtlAllocateHeap( RtlGetProcessHeap(), 0, + if (!(path = RtlAllocateHeap( GetProcessHeap(), 0, ((strlenW(SharedUserData->NtSystemRoot) + 1) *sizeof(WCHAR)) + sizeof(manifest_dirW) ))) return STATUS_NO_MEMORY; @@ -3236,10 +3238,10 @@ static NTSTATUS lookup_winsxs(struct actctx_loader* acl, struct assembly_identit if (!RtlDosPathNameToNtPathName_U( path, &path_us, NULL, NULL )) { - RtlFreeHeap( RtlGetProcessHeap(), 0, path ); + RtlFreeHeap( GetProcessHeap(), 0, path ); return STATUS_NO_SUCH_FILE; } - RtlFreeHeap( RtlGetProcessHeap(), 0, path ); + RtlFreeHeap( GetProcessHeap(), 0, path ); attr.Length = sizeof(attr); attr.RootDirectory = 0; @@ -3262,10 +3264,10 @@ static NTSTATUS lookup_winsxs(struct actctx_loader* acl, struct assembly_identit } /* append file name to directory path */ - if (!(path = RtlReAllocateHeap( RtlGetProcessHeap(), 0, path_us.Buffer, + if (!(path = RtlReAllocateHeap( GetProcessHeap(), 0, path_us.Buffer, path_us.Length + (strlenW(file) + 2) * sizeof(WCHAR) ))) { - RtlFreeHeap( RtlGetProcessHeap(), 0, file ); + RtlFreeHeap( GetProcessHeap(), 0, file ); RtlFreeUnicodeString( &path_us ); return STATUS_NO_MEMORY; } @@ -3282,7 +3284,7 @@ static NTSTATUS lookup_winsxs(struct actctx_loader* acl, struct assembly_identit } else io.Status = STATUS_NO_SUCH_FILE; - RtlFreeHeap( RtlGetProcessHeap(), 0, file ); + RtlFreeHeap( GetProcessHeap(), 0, file ); RtlFreeUnicodeString( &path_us ); return io.Status; } @@ -3309,13 +3311,13 @@ static NTSTATUS lookup_assembly(struct actctx_loader* acl, strlenW(acl->actctx->appdir.info)); nameW.Buffer = NULL; - if (!(buffer = RtlAllocateHeap( RtlGetProcessHeap(), 0, + if (!(buffer = RtlAllocateHeap( GetProcessHeap(), 0, (len + 2 * strlenW(ai->name) + 2) * sizeof(WCHAR) + sizeof(dotManifestW) ))) return STATUS_NO_MEMORY; if (!(directory = build_assembly_dir( ai ))) { - RtlFreeHeap( RtlGetProcessHeap(), 0, buffer ); + RtlFreeHeap( GetProcessHeap(), 0, buffer ); return STATUS_NO_MEMORY; } @@ -3370,8 +3372,8 @@ static NTSTATUS lookup_assembly(struct actctx_loader* acl, status = STATUS_SXS_ASSEMBLY_NOT_FOUND; } RtlFreeUnicodeString( &nameW ); - RtlFreeHeap( RtlGetProcessHeap(), 0, directory ); - RtlFreeHeap( RtlGetProcessHeap(), 0, buffer ); + RtlFreeHeap( GetProcessHeap(), 0, directory ); + RtlFreeHeap( GetProcessHeap(), 0, buffer ); return status; } @@ -3466,7 +3468,7 @@ static NTSTATUS build_dllredirect_section(ACTIVATION_CONTEXT* actctx, struct str total_len += sizeof(*header); - header = RtlAllocateHeap(RtlGetProcessHeap(), 0, total_len); + header = RtlAllocateHeap(GetProcessHeap(), 0, total_len); if (!header) return STATUS_NO_MEMORY; memset(header, 0, sizeof(*header)); @@ -3600,7 +3602,7 @@ static NTSTATUS find_dll_redirection(ACTIVATION_CONTEXT* actctx, const UNICODE_S if (status) return status; if (InterlockedCompareExchangePointer((void**)&actctx->dllredirect_section, section, NULL)) - RtlFreeHeap(RtlGetProcessHeap(), 0, section); + RtlFreeHeap(GetProcessHeap(), 0, section); } index = find_string_index(actctx->dllredirect_section, name); @@ -3617,7 +3619,7 @@ static NTSTATUS find_dll_redirection(ACTIVATION_CONTEXT* actctx, const UNICODE_S data->lpSectionGlobalData = NULL; data->ulSectionGlobalDataLength = 0; data->lpSectionBase = actctx->dllredirect_section; - data->ulSectionTotalLength = RtlSizeHeap( RtlGetProcessHeap(), 0, actctx->dllredirect_section ); + data->ulSectionTotalLength = RtlSizeHeap( GetProcessHeap(), 0, actctx->dllredirect_section ); data->hActCtx = NULL; if (data->cbSize >= FIELD_OFFSET(ACTCTX_SECTION_KEYED_DATA, ulAssemblyRosterIndex) + sizeof(ULONG)) @@ -3681,7 +3683,7 @@ static NTSTATUS build_wndclass_section(ACTIVATION_CONTEXT* actctx, struct strsec total_len += sizeof(*header); - header = RtlAllocateHeap(RtlGetProcessHeap(), 0, total_len); + header = RtlAllocateHeap(GetProcessHeap(), 0, total_len); if (!header) return STATUS_NO_MEMORY; memset(header, 0, sizeof(*header)); @@ -3793,7 +3795,7 @@ static NTSTATUS find_window_class(ACTIVATION_CONTEXT* actctx, const UNICODE_STRI if (status) return status; if (InterlockedCompareExchangePointer((void**)&actctx->wndclass_section, section, NULL)) - RtlFreeHeap(RtlGetProcessHeap(), 0, section); + RtlFreeHeap(GetProcessHeap(), 0, section); } hash = 0; @@ -3830,7 +3832,7 @@ static NTSTATUS find_window_class(ACTIVATION_CONTEXT* actctx, const UNICODE_STRI data->lpSectionGlobalData = NULL; data->ulSectionGlobalDataLength = 0; data->lpSectionBase = actctx->wndclass_section; - data->ulSectionTotalLength = RtlSizeHeap( RtlGetProcessHeap(), 0, actctx->wndclass_section ); + data->ulSectionTotalLength = RtlSizeHeap( GetProcessHeap(), 0, actctx->wndclass_section ); data->hActCtx = NULL; if (data->cbSize >= FIELD_OFFSET(ACTCTX_SECTION_KEYED_DATA, ulAssemblyRosterIndex) + sizeof(ULONG)) @@ -3882,7 +3884,7 @@ build_tlib_section(ACTIVATION_CONTEXT* actctx, struct guidsection_header **secti total_len += aligned_string_len(names_len); total_len += sizeof(*header); - header = RtlAllocateHeap(RtlGetProcessHeap(), 0, total_len); + header = RtlAllocateHeap(GetProcessHeap(), 0, total_len); if (!header) return STATUS_NO_MEMORY; memset(header, 0, sizeof(*header)); @@ -3922,7 +3924,7 @@ build_tlib_section(ACTIVATION_CONTEXT* actctx, struct guidsection_header **secti Status = RtlGUIDFromString(&str, &index->guid); if (!NT_SUCCESS(Status)) { - RtlFreeHeap(RtlGetProcessHeap(), 0, header); + RtlFreeHeap(GetProcessHeap(), 0, header); return Status; } index->data_offset = data_offset; @@ -3993,7 +3995,7 @@ static NTSTATUS find_tlib_redirection(ACTIVATION_CONTEXT* actctx, const GUID *gu if (status) return status; if (InterlockedCompareExchangePointer((void**)&actctx->tlib_section, section, NULL)) - RtlFreeHeap(RtlGetProcessHeap(), 0, section); + RtlFreeHeap(GetProcessHeap(), 0, section); } index = find_guid_index(actctx->tlib_section, guid); @@ -4008,7 +4010,7 @@ static NTSTATUS find_tlib_redirection(ACTIVATION_CONTEXT* actctx, const GUID *gu data->lpSectionGlobalData = (BYTE*)actctx->tlib_section + actctx->tlib_section->names_offset; data->ulSectionGlobalDataLength = actctx->tlib_section->names_len; data->lpSectionBase = actctx->tlib_section; - data->ulSectionTotalLength = RtlSizeHeap( RtlGetProcessHeap(), 0, actctx->tlib_section ); + data->ulSectionTotalLength = RtlSizeHeap( GetProcessHeap(), 0, actctx->tlib_section ); data->hActCtx = NULL; if (data->cbSize >= FIELD_OFFSET(ACTCTX_SECTION_KEYED_DATA, ulAssemblyRosterIndex) + sizeof(ULONG)) @@ -4293,7 +4295,7 @@ build_comserver_section(ACTIVATION_CONTEXT* actctx, struct guidsection_header ** total_len += aligned_string_len(names_len); total_len += sizeof(*header); - header = RtlAllocateHeap(RtlGetProcessHeap(), 0, total_len); + header = RtlAllocateHeap(GetProcessHeap(), 0, total_len); if (!header) return STATUS_NO_MEMORY; memset(header, 0, sizeof(*header)); @@ -4312,7 +4314,7 @@ build_comserver_section(ACTIVATION_CONTEXT* actctx, struct guidsection_header ** Status = add_comserver_record(header, &assembly->entities, NULL, &index, &data_offset, &module_offset, &seed, i+1); if (!NT_SUCCESS(Status)) { - RtlFreeHeap(RtlGetProcessHeap(), 0, header); + RtlFreeHeap(GetProcessHeap(), 0, header); return Status; } for (j = 0; j < assembly->num_dlls; j++) @@ -4321,7 +4323,7 @@ build_comserver_section(ACTIVATION_CONTEXT* actctx, struct guidsection_header ** Status = add_comserver_record(header, &dll->entities, dll, &index, &data_offset, &module_offset, &seed, i+1); if (!NT_SUCCESS(Status)) { - RtlFreeHeap(RtlGetProcessHeap(), 0, header); + RtlFreeHeap(GetProcessHeap(), 0, header); return Status; } } @@ -4355,7 +4357,7 @@ find_comserver_redirection(ACTIVATION_CONTEXT* actctx, const GUID *guid, ACTCTX_ if (status) return status; if (InterlockedCompareExchangePointer((void**)&actctx->comserver_section, section, NULL)) - RtlFreeHeap(RtlGetProcessHeap(), 0, section); + RtlFreeHeap(GetProcessHeap(), 0, section); } index = find_guid_index(actctx->comserver_section, guid); @@ -4371,7 +4373,7 @@ find_comserver_redirection(ACTIVATION_CONTEXT* actctx, const GUID *guid, ACTCTX_ data->lpSectionGlobalData = (BYTE*)actctx->comserver_section + actctx->comserver_section->names_offset; data->ulSectionGlobalDataLength = actctx->comserver_section->names_len; data->lpSectionBase = actctx->comserver_section; - data->ulSectionTotalLength = RtlSizeHeap( RtlGetProcessHeap(), 0, actctx->comserver_section ); + data->ulSectionTotalLength = RtlSizeHeap( GetProcessHeap(), 0, actctx->comserver_section ); data->hActCtx = NULL; if (data->cbSize >= FIELD_OFFSET(ACTCTX_SECTION_KEYED_DATA, ulAssemblyRosterIndex) + sizeof(ULONG)) @@ -4514,7 +4516,7 @@ build_ifaceps_section(ACTIVATION_CONTEXT* actctx, struct guidsection_header **se total_len += sizeof(*header); - header = RtlAllocateHeap(RtlGetProcessHeap(), 0, total_len); + header = RtlAllocateHeap(GetProcessHeap(), 0, total_len); if (!header) return STATUS_NO_MEMORY; memset(header, 0, sizeof(*header)); @@ -4533,7 +4535,7 @@ build_ifaceps_section(ACTIVATION_CONTEXT* actctx, struct guidsection_header **se Status = add_ifaceps_record(header, &assembly->entities, &index, &data_offset, i + 1); if (!NT_SUCCESS(Status)) { - RtlFreeHeap(RtlGetProcessHeap(), 0, header); + RtlFreeHeap(GetProcessHeap(), 0, header); return Status; } @@ -4543,7 +4545,7 @@ build_ifaceps_section(ACTIVATION_CONTEXT* actctx, struct guidsection_header **se Status = add_ifaceps_record(header, &dll->entities, &index, &data_offset, i + 1); if (!NT_SUCCESS(Status)) { - RtlFreeHeap(RtlGetProcessHeap(), 0, header); + RtlFreeHeap(GetProcessHeap(), 0, header); return Status; } } @@ -4577,7 +4579,7 @@ find_cominterface_redirection(ACTIVATION_CONTEXT* actctx, const GUID *guid, ACTC if (status) return status; if (InterlockedCompareExchangePointer((void**)&actctx->ifaceps_section, section, NULL)) - RtlFreeHeap(RtlGetProcessHeap(), 0, section); + RtlFreeHeap(GetProcessHeap(), 0, section); } index = find_guid_index(actctx->ifaceps_section, guid); @@ -4591,7 +4593,7 @@ find_cominterface_redirection(ACTIVATION_CONTEXT* actctx, const GUID *guid, ACTC data->lpSectionGlobalData = NULL; data->ulSectionGlobalDataLength = 0; data->lpSectionBase = actctx->ifaceps_section; - data->ulSectionTotalLength = RtlSizeHeap( RtlGetProcessHeap(), 0, actctx->ifaceps_section ); + data->ulSectionTotalLength = RtlSizeHeap( GetProcessHeap(), 0, actctx->ifaceps_section ); data->hActCtx = NULL; if (data->cbSize >= FIELD_OFFSET(ACTCTX_SECTION_KEYED_DATA, ulAssemblyRosterIndex) + sizeof(ULONG)) @@ -4635,7 +4637,7 @@ build_clr_surrogate_section(ACTIVATION_CONTEXT* actctx, struct guidsection_heade total_len += sizeof(*header); - header = RtlAllocateHeap(RtlGetProcessHeap(), 0, total_len); + header = RtlAllocateHeap(GetProcessHeap(), 0, total_len); if (!header) return STATUS_NO_MEMORY; memset(header, 0, sizeof(*header)); @@ -4670,7 +4672,7 @@ build_clr_surrogate_section(ACTIVATION_CONTEXT* actctx, struct guidsection_heade Status = RtlGUIDFromString(&str, &index->guid); if (!NT_SUCCESS(Status)) { - RtlFreeHeap(RtlGetProcessHeap(), 0, header); + RtlFreeHeap(GetProcessHeap(), 0, header); return Status; } @@ -4737,7 +4739,7 @@ find_clr_surrogate(ACTIVATION_CONTEXT* actctx, const GUID *guid, ACTCTX_SECTION_ if (status) return status; if (InterlockedCompareExchangePointer((void**)&actctx->clrsurrogate_section, section, NULL)) - RtlFreeHeap(RtlGetProcessHeap(), 0, section); + RtlFreeHeap(GetProcessHeap(), 0, section); } index = find_guid_index(actctx->clrsurrogate_section, guid); @@ -4755,7 +4757,7 @@ find_clr_surrogate(ACTIVATION_CONTEXT* actctx, const GUID *guid, ACTCTX_SECTION_ data->lpSectionGlobalData = NULL; data->ulSectionGlobalDataLength = 0; data->lpSectionBase = actctx->clrsurrogate_section; - data->ulSectionTotalLength = RtlSizeHeap( RtlGetProcessHeap(), 0, actctx->clrsurrogate_section ); + data->ulSectionTotalLength = RtlSizeHeap( GetProcessHeap(), 0, actctx->clrsurrogate_section ); data->hActCtx = NULL; if (data->cbSize >= FIELD_OFFSET(ACTCTX_SECTION_KEYED_DATA, ulAssemblyRosterIndex) + sizeof(ULONG)) @@ -4898,7 +4900,7 @@ build_progid_section(ACTIVATION_CONTEXT* actctx, struct strsection_header **sect total_len += sizeof(*header); - header = RtlAllocateHeap(RtlGetProcessHeap(), 0, total_len); + header = RtlAllocateHeap(GetProcessHeap(), 0, total_len); if (!header) return STATUS_NO_MEMORY; memset(header, 0, sizeof(*header)); @@ -4920,7 +4922,7 @@ build_progid_section(ACTIVATION_CONTEXT* actctx, struct strsection_header **sect Status = add_progid_record(actctx, header, &assembly->entities, &index, &data_offset, &global_offset, i + 1); if (!NT_SUCCESS(Status)) { - RtlFreeHeap(RtlGetProcessHeap(), 0, header); + RtlFreeHeap(GetProcessHeap(), 0, header); return Status; } @@ -4930,7 +4932,7 @@ build_progid_section(ACTIVATION_CONTEXT* actctx, struct strsection_header **sect Status = add_progid_record(actctx, header, &dll->entities, &index, &data_offset, &global_offset, i + 1); if (!NT_SUCCESS(Status)) { - RtlFreeHeap(RtlGetProcessHeap(), 0, header); + RtlFreeHeap(GetProcessHeap(), 0, header); return Status; } } @@ -4962,7 +4964,7 @@ static NTSTATUS find_progid_redirection(ACTIVATION_CONTEXT* actctx, const UNICOD if (status) return status; if (InterlockedCompareExchangePointer((void**)&actctx->comserver_section, section, NULL)) - RtlFreeHeap(RtlGetProcessHeap(), 0, section); + RtlFreeHeap(GetProcessHeap(), 0, section); } if (!actctx->progid_section) @@ -4973,7 +4975,7 @@ static NTSTATUS find_progid_redirection(ACTIVATION_CONTEXT* actctx, const UNICOD if (status) return status; if (InterlockedCompareExchangePointer((void**)&actctx->progid_section, section, NULL)) - RtlFreeHeap(RtlGetProcessHeap(), 0, section); + RtlFreeHeap(GetProcessHeap(), 0, section); } index = find_string_index(actctx->progid_section, name); @@ -4989,7 +4991,7 @@ static NTSTATUS find_progid_redirection(ACTIVATION_CONTEXT* actctx, const UNICOD data->lpSectionGlobalData = (BYTE*)actctx->progid_section + actctx->progid_section->global_offset; data->ulSectionGlobalDataLength = actctx->progid_section->global_len; data->lpSectionBase = actctx->progid_section; - data->ulSectionTotalLength = RtlSizeHeap( RtlGetProcessHeap(), 0, actctx->progid_section ); + data->ulSectionTotalLength = RtlSizeHeap( GetProcessHeap(), 0, actctx->progid_section ); data->hActCtx = NULL; if (data->cbSize >= FIELD_OFFSET(ACTCTX_SECTION_KEYED_DATA, ulAssemblyRosterIndex) + sizeof(ULONG)) @@ -5146,7 +5148,7 @@ RtlCreateActivationContext(IN ULONG Flags, return STATUS_INVALID_PARAMETER; - if (!(ActualActCtx = RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*ActualActCtx)))) + if (!(ActualActCtx = RtlAllocateHeap(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*ActualActCtx)))) return STATUS_NO_MEMORY; ActualActCtx->MagicMarker = ACTCTX_MAGIC_MARKER; @@ -5191,7 +5193,7 @@ RtlCreateActivationContext(IN ULONG Flags, dir_len = strlenW(pActCtx->lpAssemblyDirectory); source_len = strlenW(pActCtx->lpSource); - if (!(source = RtlAllocateHeap( RtlGetProcessHeap(), 0, (dir_len+source_len+2)*sizeof(WCHAR)))) + if (!(source = RtlAllocateHeap( GetProcessHeap(), 0, (dir_len+source_len+2)*sizeof(WCHAR)))) { status = STATUS_NO_MEMORY; goto error; @@ -5203,7 +5205,7 @@ RtlCreateActivationContext(IN ULONG Flags, } ret = RtlDosPathNameToNtPathName_U(source ? source : pActCtx->lpSource, &nameW, NULL, NULL); - RtlFreeHeap( RtlGetProcessHeap(), 0, source ); + RtlFreeHeap( GetProcessHeap(), 0, source ); if (!ret) { status = STATUS_NO_SUCH_FILE; @@ -5361,7 +5363,7 @@ NTAPI RtlActivateActivationContextEx( ULONG flags, PTEB tebAddress, HANDLE handl { RTL_ACTIVATION_CONTEXT_STACK_FRAME *frame; - if (!(frame = RtlAllocateHeap( RtlGetProcessHeap(), 0, sizeof(*frame) ))) + if (!(frame = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(*frame) ))) return STATUS_NO_MEMORY; frame->Previous = tebAddress->ActivationContextStackPointer->ActiveFrame; @@ -5420,7 +5422,7 @@ NTSTATUS NTAPI RtlDeactivateActivationContext( ULONG flags, ULONG_PTR cookie ) { frame = top->Previous; RtlReleaseActivationContext( top->ActivationContext ); - RtlFreeHeap( RtlGetProcessHeap(), 0, top ); + RtlFreeHeap( GetProcessHeap(), 0, top ); top = frame; } @@ -5444,7 +5446,7 @@ RtlFreeActivationContextStack(IN PACTIVATION_CONTEXT_STACK Stack) { PrevFrame = ActiveFrame->Previous; RtlReleaseActivationContext(ActiveFrame->ActivationContext); - RtlFreeHeap(RtlGetProcessHeap(), 0, ActiveFrame); + RtlFreeHeap(GetProcessHeap(), 0, ActiveFrame); ActiveFrame = PrevFrame; } @@ -5455,7 +5457,7 @@ RtlFreeActivationContextStack(IN PACTIVATION_CONTEXT_STACK Stack) ASSERT(IsListEmpty(&Stack->FrameListCache)); /* Free activation stack memory */ - RtlFreeHeap(RtlGetProcessHeap(), 0, Stack); + RtlFreeHeap(GetProcessHeap(), 0, Stack); } /****************************************************************** @@ -5615,7 +5617,7 @@ NTSTATUS NTAPI RtlQueryInformationActivationContext( ULONG flags, HANDLE handle, if (retlen) *retlen = len; if (!buffer || bufsize < len) { - RtlFreeHeap( RtlGetProcessHeap(), 0, assembly_id ); + RtlFreeHeap( GetProcessHeap(), 0, assembly_id ); return STATUS_BUFFER_TOO_SMALL; } @@ -5650,7 +5652,7 @@ NTSTATUS NTAPI RtlQueryInformationActivationContext( ULONG flags, HANDLE handle, memcpy(ptr, assembly->directory, ad_len * sizeof(WCHAR)); } else afdi->lpAssemblyDirectoryName = NULL; - RtlFreeHeap( RtlGetProcessHeap(), 0, assembly_id ); + RtlFreeHeap( GetProcessHeap(), 0, assembly_id ); } break; @@ -5903,7 +5905,7 @@ RtlAllocateActivationContextStack(IN PACTIVATION_CONTEXT_STACK *Stack) if (*Stack) return STATUS_SUCCESS; /* Allocate space for the context stack */ - ContextStack = RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(ACTIVATION_CONTEXT_STACK)); + ContextStack = RtlAllocateHeap(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(ACTIVATION_CONTEXT_STACK)); if (!ContextStack) { return STATUS_NO_MEMORY; From 49ed915759c88dd8c9845dfcb861810980a3a535 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 21 Apr 2024 16:03:11 +0300 Subject: [PATCH 037/182] [RTL] actctx.c: Revert NtCurrentProcess() changes --- sdk/lib/rtl/actctx.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/sdk/lib/rtl/actctx.c b/sdk/lib/rtl/actctx.c index 816f19d1f84..72f168f7732 100644 --- a/sdk/lib/rtl/actctx.c +++ b/sdk/lib/rtl/actctx.c @@ -24,6 +24,7 @@ #include #define GetProcessHeap() RtlGetProcessHeap() +#define GetCurrentProcess() NtCurrentProcess() BOOLEAN RtlpNotAllowingMultipleActivation; @@ -3015,7 +3016,7 @@ static NTSTATUS get_manifest_in_pe_file( struct actctx_loader* acl, struct assem offset.QuadPart = 0; count = 0; base = NULL; - status = NtMapViewOfSection( mapping, NtCurrentProcess(), &base, 0, 0, &offset, + status = NtMapViewOfSection( mapping, GetCurrentProcess(), &base, 0, 0, &offset, &count, ViewShare, 0, PAGE_READONLY ); NtClose( mapping ); if (status != STATUS_SUCCESS) return status; @@ -3030,7 +3031,7 @@ static NTSTATUS get_manifest_in_pe_file( struct actctx_loader* acl, struct assem } else status = STATUS_INVALID_IMAGE_FORMAT; - NtUnmapViewOfSection( NtCurrentProcess(), base ); + NtUnmapViewOfSection( GetCurrentProcess(), base ); return status; } @@ -3065,7 +3066,7 @@ static NTSTATUS get_manifest_in_manifest_file( struct actctx_loader* acl, struct offset.QuadPart = 0; count = 0; base = NULL; - status = NtMapViewOfSection( mapping, NtCurrentProcess(), &base, 0, 0, &offset, + status = NtMapViewOfSection( mapping, GetCurrentProcess(), &base, 0, 0, &offset, &count, ViewShare, 0, PAGE_READONLY ); NtClose( mapping ); if (status != STATUS_SUCCESS) return status; @@ -3076,7 +3077,7 @@ static NTSTATUS get_manifest_in_manifest_file( struct actctx_loader* acl, struct if (status == STATUS_SUCCESS) status = parse_manifest(acl, ai, filename, directory, shared, base, (SIZE_T)info.EndOfFile.QuadPart); - NtUnmapViewOfSection( NtCurrentProcess(), base ); + NtUnmapViewOfSection( GetCurrentProcess(), base ); return status; } From 37b2e791ee07cb95f255c405e2dbb6efca41c653 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 20 Apr 2024 15:21:16 +0300 Subject: [PATCH 038/182] [RTL] actctx.c: Revert pointless formatting changes --- sdk/lib/rtl/actctx.c | 117 +++++++++++++++---------------------------- 1 file changed, 41 insertions(+), 76 deletions(-) diff --git a/sdk/lib/rtl/actctx.c b/sdk/lib/rtl/actctx.c index 72f168f7732..5aecd950d42 100644 --- a/sdk/lib/rtl/actctx.c +++ b/sdk/lib/rtl/actctx.c @@ -9,7 +9,7 @@ * Jacek Caban for CodeWeavers * Alexandre Julliard * Stefan Ginsberg (stefan.ginsberg@reactos.org) - * Samuel Serapión + * Samuel Serapión */ /* Based on Wine 3.2-37c98396 */ @@ -527,10 +527,10 @@ typedef struct _ACTIVATION_CONTEXT unsigned int num_assemblies; unsigned int allocated_assemblies; /* section data */ - DWORD sections; - struct strsection_header *wndclass_section; - struct strsection_header *dllredirect_section; - struct strsection_header *progid_section; + DWORD sections; + struct strsection_header *wndclass_section; + struct strsection_header *dllredirect_section; + struct strsection_header *progid_section; struct guidsection_header *tlib_section; struct guidsection_header *comserver_section; struct guidsection_header *ifaceps_section; @@ -807,7 +807,7 @@ static inline BOOL xmlstr_cmp_end(const xmlstr_t* xmlstr, const WCHAR *str) static inline BOOL xml_attr_cmp(const struct xml_attr* attr, const WCHAR *str) { - return xmlstr_cmp(&attr->name, str); + return xmlstr_cmp( &attr->name, str ); } static BOOL xml_name_cmp( const struct xml_elem *elem1, const struct xml_elem *elem2 ) @@ -818,7 +818,7 @@ static BOOL xml_name_cmp( const struct xml_elem *elem1, const struct xml_elem *e !wcsncmp( elem1->ns.ptr, elem2->ns.ptr, elem1->ns.len )); } -static inline BOOL xml_elem_cmp(const struct xml_elem* elem, const WCHAR *str, const WCHAR *namespace) +static inline BOOL xml_elem_cmp(const struct xml_elem *elem, const WCHAR *str, const WCHAR *namespace) { if (!xmlstr_cmp( &elem->name, str )) return FALSE; if (xmlstr_cmp( &elem->ns, namespace )) return TRUE; @@ -1227,13 +1227,13 @@ static void actctx_release( ACTIVATION_CONTEXT *actctx ) } } -static BOOL set_error(xmlbuf_t* xmlbuf) +static BOOL set_error( xmlbuf_t *xmlbuf ) { xmlbuf->error = TRUE; return FALSE; } -static BOOL is_xmlns_attr(const struct xml_attr *attr) +static BOOL is_xmlns_attr( const struct xml_attr *attr ) { const int len = wcslen( xmlnsW ); if (attr->name.len < len) return FALSE; @@ -1276,7 +1276,7 @@ static xmlstr_t find_xmlns( xmlbuf_t *xmlbuf, const xmlstr_t *name ) return empty_xmlstr; } -static BOOL next_xml_attr(xmlbuf_t* xmlbuf, struct xml_attr* attr, BOOL* end) +static BOOL next_xml_attr(xmlbuf_t *xmlbuf, struct xml_attr *attr, BOOL *end) { const WCHAR* ptr; WCHAR quote; @@ -1505,7 +1505,7 @@ static void parse_expect_no_attr(xmlbuf_t* xmlbuf, BOOL* end) } } -static void parse_expect_end_elem(xmlbuf_t *xmlbuf, const struct xml_elem *parent) +static void parse_expect_end_elem( xmlbuf_t *xmlbuf, const struct xml_elem *parent ) { struct xml_elem elem; @@ -1529,7 +1529,7 @@ static void parse_unknown_elem(xmlbuf_t *xmlbuf, const struct xml_elem *parent) parse_unknown_elem(xmlbuf, &elem); } -static void parse_assembly_identity_elem(xmlbuf_t* xmlbuf, ACTIVATION_CONTEXT* actctx, +static void parse_assembly_identity_elem(xmlbuf_t *xmlbuf, ACTIVATION_CONTEXT *actctx, struct assembly_identity* ai, const struct xml_elem *parent) { struct xml_attr attr; @@ -2768,7 +2768,7 @@ static NTSTATUS parse_manifest( struct actctx_loader* acl, struct assembly_ident : ACTIVATION_CONTEXT_PATH_TYPE_NONE; unicode_tests = IS_TEXT_UNICODE_SIGNATURE | IS_TEXT_UNICODE_REVERSE_SIGNATURE; - if (RtlIsTextUnicode(buffer, size, &unicode_tests )) + if (RtlIsTextUnicode( buffer, size, &unicode_tests )) { xmlbuf.ptr = buffer; xmlbuf.end = xmlbuf.ptr + size / sizeof(WCHAR); @@ -2815,8 +2815,8 @@ static NTSTATUS parse_manifest( struct actctx_loader* acl, struct assembly_ident xmlbuf.ptr = new_buff; xmlbuf.end = xmlbuf.ptr + sizeU / sizeof(WCHAR); - status = parse_manifest_buffer(acl, assembly, ai, &xmlbuf); - RtlFreeHeap(GetProcessHeap(), 0, new_buff); + status = parse_manifest_buffer( acl, assembly, ai, &xmlbuf ); + RtlFreeHeap( GetProcessHeap(), 0, new_buff ); } return status; } @@ -2978,7 +2978,6 @@ static NTSTATUS search_manifest_in_module( struct actctx_loader* acl, struct ass return status; } - static NTSTATUS get_manifest_in_pe_file( struct actctx_loader* acl, struct assembly_identity* ai, LPCWSTR filename, LPCWSTR directory, BOOL shared, HANDLE file, LPCWSTR resname, ULONG lang ) @@ -3060,7 +3059,6 @@ static NTSTATUS get_manifest_in_manifest_file( struct actctx_loader* acl, struct size.QuadPart = 0; status = NtCreateSection( &mapping, STANDARD_RIGHTS_REQUIRED | SECTION_QUERY | SECTION_MAP_READ, &attr, &size, PAGE_READONLY, SEC_COMMIT, file ); - if (status != STATUS_SUCCESS) return status; offset.QuadPart = 0; @@ -3843,10 +3841,7 @@ static NTSTATUS find_window_class(ACTIVATION_CONTEXT* actctx, const UNICODE_STRI return STATUS_SUCCESS; } -_Must_inspect_result_ -static -NTSTATUS -build_tlib_section(ACTIVATION_CONTEXT* actctx, struct guidsection_header **section) +static NTSTATUS build_tlib_section(ACTIVATION_CONTEXT* actctx, struct guidsection_header **section) { unsigned int i, j, k, total_len = 0, tlib_count = 0, names_len = 0; struct guidsection_header *header; @@ -4083,10 +4078,7 @@ static void get_comserver_datalen(const struct entity_array *entities, const str } } -_Must_inspect_result_ -static -NTSTATUS -add_comserver_record(const struct guidsection_header *section, const struct entity_array *entities, +static NTSTATUS add_comserver_record(const struct guidsection_header *section, const struct entity_array *entities, const struct dll_redirect *dll, struct guid_index **index, ULONG *data_offset, ULONG *module_offset, ULONG *seed, ULONG rosterindex) { @@ -4269,10 +4261,7 @@ add_comserver_record(const struct guidsection_header *section, const struct enti return STATUS_SUCCESS; } -_Must_inspect_result_ -static -NTSTATUS -build_comserver_section(ACTIVATION_CONTEXT* actctx, struct guidsection_header **section) +static NTSTATUS build_comserver_section(ACTIVATION_CONTEXT* actctx, struct guidsection_header **section) { unsigned int i, j, total_len = 0, class_count = 0, names_len = 0; struct guidsection_header *header; @@ -4340,10 +4329,7 @@ static inline struct comclassredirect_data *get_comclass_data(ACTIVATION_CONTEXT return (struct comclassredirect_data*)((BYTE*)actctx->comserver_section + index->data_offset); } -_Must_inspect_result_ -static -NTSTATUS -find_comserver_redirection(ACTIVATION_CONTEXT* actctx, const GUID *guid, ACTCTX_SECTION_KEYED_DATA* data) +static NTSTATUS find_comserver_redirection(ACTIVATION_CONTEXT* actctx, const GUID *guid, ACTCTX_SECTION_KEYED_DATA* data) { struct comclassredirect_data *comclass; struct guid_index *index = NULL; @@ -4400,10 +4386,7 @@ static void get_ifaceps_datalen(const struct entity_array *entities, unsigned in } } -_Must_inspect_result_ -static -NTSTATUS -add_ifaceps_record(struct guidsection_header *section, struct entity_array *entities, +static NTSTATUS add_ifaceps_record(struct guidsection_header *section, struct entity_array *entities, struct guid_index **index, ULONG *data_offset, ULONG rosterindex) { unsigned int i; @@ -4492,10 +4475,7 @@ add_ifaceps_record(struct guidsection_header *section, struct entity_array *enti return STATUS_SUCCESS; } -_Must_inspect_result_ -static -NTSTATUS -build_ifaceps_section(ACTIVATION_CONTEXT* actctx, struct guidsection_header **section) +static NTSTATUS build_ifaceps_section(ACTIVATION_CONTEXT* actctx, struct guidsection_header **section) { unsigned int i, j, total_len = 0, count = 0; struct guidsection_header *header; @@ -4562,10 +4542,7 @@ static inline struct ifacepsredirect_data *get_ifaceps_data(ACTIVATION_CONTEXT * return (struct ifacepsredirect_data*)((BYTE*)actctx->ifaceps_section + index->data_offset); } -_Must_inspect_result_ -static -NTSTATUS -find_cominterface_redirection(ACTIVATION_CONTEXT* actctx, const GUID *guid, ACTCTX_SECTION_KEYED_DATA* data) +static NTSTATUS find_cominterface_redirection(ACTIVATION_CONTEXT* actctx, const GUID *guid, ACTCTX_SECTION_KEYED_DATA* data) { struct ifacepsredirect_data *iface; struct guid_index *index = NULL; @@ -4603,10 +4580,7 @@ find_cominterface_redirection(ACTIVATION_CONTEXT* actctx, const GUID *guid, ACTC return STATUS_SUCCESS; } -_Must_inspect_result_ -static -NTSTATUS -build_clr_surrogate_section(ACTIVATION_CONTEXT* actctx, struct guidsection_header **section) +static NTSTATUS build_clr_surrogate_section(ACTIVATION_CONTEXT* actctx, struct guidsection_header **section) { unsigned int i, j, total_len = 0, count = 0; struct guidsection_header *header; @@ -4722,10 +4696,7 @@ static inline struct clrsurrogate_data *get_surrogate_data(ACTIVATION_CONTEXT *a return (struct clrsurrogate_data*)((BYTE*)actctx->clrsurrogate_section + index->data_offset); } -_Must_inspect_result_ -static -NTSTATUS -find_clr_surrogate(ACTIVATION_CONTEXT* actctx, const GUID *guid, ACTCTX_SECTION_KEYED_DATA* data) +static NTSTATUS find_clr_surrogate(ACTIVATION_CONTEXT* actctx, const GUID *guid, ACTCTX_SECTION_KEYED_DATA* data) { struct clrsurrogate_data *surrogate; struct guid_index *index = NULL; @@ -4835,10 +4806,7 @@ static void write_progid_record(struct strsection_header *section, const WCHAR * (*index) += 1; } -_Must_inspect_result_ -static -NTSTATUS -add_progid_record(ACTIVATION_CONTEXT* actctx, struct strsection_header *section, const struct entity_array *entities, +static NTSTATUS add_progid_record(ACTIVATION_CONTEXT* actctx, struct strsection_header *section, const struct entity_array *entities, struct string_index **index, ULONG *data_offset, ULONG *global_offset, ULONG rosterindex) { unsigned int i, j; @@ -4875,10 +4843,7 @@ add_progid_record(ACTIVATION_CONTEXT* actctx, struct strsection_header *section, return Status; } -_Must_inspect_result_ -static -NTSTATUS -build_progid_section(ACTIVATION_CONTEXT* actctx, struct strsection_header **section) +static NTSTATUS build_progid_section(ACTIVATION_CONTEXT* actctx, struct strsection_header **section) { unsigned int i, j, total_len = 0, count = 0; struct strsection_header *header; @@ -5116,7 +5081,6 @@ void actctx_init(PVOID* pOldShimData) } } -/* FUNCTIONS ***************************************************************/ /*********************************************************************** * RtlCreateActivationContext (NTDLL.@) @@ -5325,7 +5289,7 @@ RtlReleaseActivationContext( HANDLE handle ) /*********************************************************************** * RtlAddRefActivationContext (NTDLL.@) */ -VOID NTAPI RtlAddRefActivationContext( HANDLE handle ) +void WINAPI RtlAddRefActivationContext( HANDLE handle ) { ACTIVATION_CONTEXT *actctx; @@ -5336,7 +5300,7 @@ VOID NTAPI RtlAddRefActivationContext( HANDLE handle ) /****************************************************************** * RtlReleaseActivationContext (NTDLL.@) */ -VOID NTAPI RtlReleaseActivationContext( HANDLE handle ) +void WINAPI RtlReleaseActivationContext( HANDLE handle ) { ACTIVATION_CONTEXT *actctx; @@ -5348,12 +5312,13 @@ VOID NTAPI RtlReleaseActivationContext( HANDLE handle ) /****************************************************************** * RtlZombifyActivationContext (NTDLL.@) * + * FIXME: function prototype might be wrong */ -NTSTATUS NTAPI RtlZombifyActivationContext(PVOID Context) +NTSTATUS WINAPI RtlZombifyActivationContext( HANDLE handle ) { UNIMPLEMENTED; - if (Context == ACTCTX_FAKE_HANDLE) + if (handle == ACTCTX_FAKE_HANDLE) return STATUS_SUCCESS; return STATUS_NOT_IMPLEMENTED; @@ -5394,7 +5359,7 @@ NTSTATUS NTAPI RtlActivateActivationContext( ULONG flags, HANDLE handle, PULONG_ /*********************************************************************** * RtlDeactivateActivationContext (NTDLL.@) */ -NTSTATUS NTAPI RtlDeactivateActivationContext( ULONG flags, ULONG_PTR cookie ) +NTSTATUS WINAPI RtlDeactivateActivationContext( ULONG flags, ULONG_PTR cookie ) { RTL_ACTIVATION_CONTEXT_STACK_FRAME *frame, *top; @@ -5464,7 +5429,7 @@ RtlFreeActivationContextStack(IN PACTIVATION_CONTEXT_STACK Stack) /****************************************************************** * RtlFreeThreadActivationContextStack (NTDLL.@) */ -VOID NTAPI RtlFreeThreadActivationContextStack(VOID) +void WINAPI RtlFreeThreadActivationContextStack(void) { RtlFreeActivationContextStack(NtCurrentTeb()->ActivationContextStackPointer); NtCurrentTeb()->ActivationContextStackPointer = NULL; @@ -5474,7 +5439,7 @@ VOID NTAPI RtlFreeThreadActivationContextStack(VOID) /****************************************************************** * RtlGetActiveActivationContext (NTDLL.@) */ -NTSTATUS NTAPI RtlGetActiveActivationContext( HANDLE *handle ) +NTSTATUS WINAPI RtlGetActiveActivationContext( HANDLE *handle ) { if (NtCurrentTeb()->ActivationContextStackPointer->ActiveFrame) { @@ -5491,7 +5456,7 @@ NTSTATUS NTAPI RtlGetActiveActivationContext( HANDLE *handle ) /****************************************************************** * RtlIsActivationContextActive (NTDLL.@) */ -BOOLEAN NTAPI RtlIsActivationContextActive( HANDLE handle ) +BOOLEAN WINAPI RtlIsActivationContextActive( HANDLE handle ) { RTL_ACTIVATION_CONTEXT_STACK_FRAME *frame; @@ -5507,9 +5472,9 @@ BOOLEAN NTAPI RtlIsActivationContextActive( HANDLE handle ) * Get information about an activation context. * FIXME: function signature/prototype may be wrong */ -NTSTATUS NTAPI RtlQueryInformationActivationContext( ULONG flags, HANDLE handle, PVOID subinst, - ULONG class, PVOID buffer, - SIZE_T bufsize, SIZE_T *retlen ) +NTSTATUS WINAPI RtlQueryInformationActivationContext( ULONG flags, HANDLE handle, PVOID subinst, + ULONG class, PVOID buffer, + SIZE_T bufsize, SIZE_T *retlen ) { ACTIVATION_CONTEXT *actctx; NTSTATUS status; @@ -5807,11 +5772,11 @@ RtlpFindActivationContextSection_CheckParameters( ULONG flags, const GUID *guid, * Find information about a string in an activation context. * FIXME: function signature/prototype may be wrong */ -NTSTATUS NTAPI RtlFindActivationContextSectionString( ULONG flags, const GUID *guid, ULONG section_kind, - const UNICODE_STRING *section_name, PVOID ptr ) +NTSTATUS WINAPI RtlFindActivationContextSectionString( ULONG flags, const GUID *guid, ULONG section_kind, + const UNICODE_STRING *section_name, PVOID ptr ) { PACTCTX_SECTION_KEYED_DATA data = ptr; - NTSTATUS status; + NTSTATUS status = STATUS_SXS_KEY_NOT_FOUND; DPRINT("RtlFindActivationContextSectionString(%x %p %x %wZ %p)\n", flags, guid, section_kind, section_name, ptr); status = RtlpFindActivationContextSection_CheckParameters(flags, guid, section_kind, section_name, data); From be76eb7c91bdbdcfd7780c68147f5ca8b7b11605 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 20 Apr 2024 15:33:36 +0300 Subject: [PATCH 039/182] [RTL] actctx.c: Revert ERR, WARN, TRACE changes --- sdk/lib/rtl/actctx.c | 57 +++++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/sdk/lib/rtl/actctx.c b/sdk/lib/rtl/actctx.c index 5aecd950d42..2a943ac11e1 100644 --- a/sdk/lib/rtl/actctx.c +++ b/sdk/lib/rtl/actctx.c @@ -25,6 +25,9 @@ #define GetProcessHeap() RtlGetProcessHeap() #define GetCurrentProcess() NtCurrentProcess() +#define FIXME DPRINT1 +#define WARN DPRINT1 +#define TRACE DPRINT BOOLEAN RtlpNotAllowingMultipleActivation; @@ -990,7 +993,7 @@ static void free_entity_array(struct entity_array *array) RtlFreeHeap(GetProcessHeap(), 0, entity->u.clrsurrogate.version); break; default: - DPRINT1("Unknown entity kind %u\n", entity->kind); + FIXME("Unknown entity kind %d\n", entity->kind); } } RtlFreeHeap( GetProcessHeap(), 0, array->base ); @@ -1032,7 +1035,7 @@ static BOOL add_dependent_assembly_id(struct actctx_loader* acl, for (i = 0; i < acl->actctx->num_assemblies; i++) if (is_matching_identity( ai, &acl->actctx->assemblies[i].id )) { - DPRINT( "reusing existing assembly for %S arch %S version %u.%u.%u.%u\n", + TRACE( "reusing existing assembly for %S arch %S version %u.%u.%u.%u\n", ai->name, ai->arch, ai->version.major, ai->version.minor, ai->version.build, ai->version.revision ); return TRUE; @@ -1041,7 +1044,7 @@ static BOOL add_dependent_assembly_id(struct actctx_loader* acl, for (i = 0; i < acl->num_dependencies; i++) if (is_matching_identity( ai, &acl->dependencies[i] )) { - DPRINT( "reusing existing dependency for %S arch %S version %u.%u.%u.%u\n", + TRACE( "reusing existing dependency for %S arch %S version %u.%u.%u.%u\n", ai->name, ai->arch, ai->version.major, ai->version.minor, ai->version.build, ai->version.revision ); return TRUE; @@ -1609,7 +1612,7 @@ static OLEMISC get_olemisc_value(const WCHAR *str, int len) min = n+1; } - DPRINT1("unknown flag %S\n", str); + WARN("unknown flag %S\n", str); return 0; } @@ -1764,7 +1767,7 @@ static BOOL parse_nummethods(const xmlstr_t *str, struct entity *entity) num = num * 10 + *curr - '0'; else { - // DPRINT1("wrong numeric value %wZ\n", &strU); + // ERR("wrong numeric value %wZ\n", &strU); return FALSE; } } @@ -1880,7 +1883,7 @@ static BOOL parse_typelib_flags(const xmlstr_t *value, struct entity *entity) *flags |= LIBFLAG_FHASDISKIMAGE; else { - // DPRINT1("unknown flags value %wZ\n", &valueU); + // WARN("unknown flags value %wZ\n", &valueU); return FALSE; } @@ -2755,7 +2758,7 @@ static NTSTATUS parse_manifest( struct actctx_loader* acl, struct assembly_ident struct assembly *assembly; int unicode_tests; - DPRINT( "parsing manifest loaded from %S base dir %S\n", filename, directory ); + TRACE( "parsing manifest loaded from %S base dir %S\n", filename, directory ); if (!(assembly = add_assembly(acl->actctx, shared ? ASSEMBLY_SHARED_MANIFEST : ASSEMBLY_MANIFEST))) return STATUS_SXS_CANT_GEN_ACTCTX; @@ -2877,11 +2880,11 @@ static NTSTATUS get_manifest_in_module( struct actctx_loader* acl, struct assemb { if (!filename && !get_module_filename( hModule, &nameW, 0 )) { - DPRINT( "looking for res %s in module %p %s\n", debugstr_w(resname), + TRACE( "looking for res %s in module %p %s\n", debugstr_w(resname), hModule, debugstr_w(nameW.Buffer) ); RtlFreeUnicodeString( &nameW ); } - else DPRINT( "looking for res %s in module %p %s\n", debugstr_w(resname), + else TRACE( "looking for res %s in module %p %s\n", debugstr_w(resname), hModule, debugstr_w(filename) ); } #endif @@ -2998,7 +3001,7 @@ static NTSTATUS get_manifest_in_pe_file( struct actctx_loader* acl, struct assem resptr = resnameBuf; } - DPRINT( "looking for res %S in %S\n", resptr, filename ? filename : L""); + TRACE( "looking for res %S in %S\n", resptr, filename ? filename : L""); attr.Length = sizeof(attr); attr.RootDirectory = 0; @@ -3047,7 +3050,7 @@ static NTSTATUS get_manifest_in_manifest_file( struct actctx_loader* acl, struct SIZE_T count; void *base; - DPRINT( "loading manifest file %S\n", filename ); + TRACE( "loading manifest file %S\n", filename ); attr.Length = sizeof(attr); attr.RootDirectory = 0; @@ -3092,7 +3095,7 @@ static NTSTATUS get_manifest_in_associated_manifest( struct actctx_loader* acl, if (!((ULONG_PTR)resname >> 16)) resid = (ULONG_PTR)resname & 0xffff; - DPRINT( "looking for manifest associated with %S id %lu\n", filename, resid ); + TRACE( "looking for manifest associated with %S id %lu\n", filename, resid ); if (module) /* use the module filename */ { @@ -3209,7 +3212,7 @@ static WCHAR *lookup_manifest_file( HANDLE dir, struct assembly_identity *ai ) } } } - else DPRINT1("no matching file for %S\n", lookup); + else WARN("no matching file for %S\n", lookup); RtlFreeHeap( GetProcessHeap(), 0, lookup ); return ret; } @@ -3299,7 +3302,7 @@ static NTSTATUS lookup_assembly(struct actctx_loader* acl, HANDLE file; DWORD len; - DPRINT( "looking for name=%S version=%u.%u.%u.%u arch=%S\n", + TRACE( "looking for name=%S version=%u.%u.%u.%u arch=%S\n", ai->name, ai->version.major, ai->version.minor, ai->version.build, ai->version.revision, ai->arch ); if ((status = lookup_winsxs(acl, ai)) != STATUS_NO_SUCH_FILE) return status; @@ -3550,7 +3553,7 @@ static struct string_index *find_string_index(const struct strsection_header *se break; } else - DPRINT1("hash collision 0x%08x, %wZ, %S\n", hash, name, nameW); + WARN("hash collision 0x%08x, %wZ, %S\n", hash, name, nameW); } iter++; } @@ -3813,7 +3816,7 @@ static NTSTATUS find_window_class(ACTIVATION_CONTEXT* actctx, const UNICODE_STRI break; } else - DPRINT1("hash collision 0x%08x, %wZ, %S\n", hash, name, nameW); + WARN("hash collision 0x%08x, %wZ, %S\n", hash, name, nameW); } iter++; } @@ -4988,10 +4991,10 @@ static NTSTATUS find_string(ACTIVATION_CONTEXT* actctx, ULONG section_kind, status = find_progid_redirection(actctx, section_name, data); break; case ACTIVATION_CONTEXT_SECTION_GLOBAL_OBJECT_RENAME_TABLE: - DPRINT1("Unsupported yet section_kind %x\n", section_kind); + FIXME("Unsupported yet section_kind %x\n", section_kind); return STATUS_SXS_SECTION_NOT_FOUND; default: - DPRINT1("Unknown section_kind %x\n", section_kind); + WARN("Unknown section_kind %x\n", section_kind); return STATUS_SXS_SECTION_NOT_FOUND; } @@ -5025,7 +5028,7 @@ static NTSTATUS find_guid(ACTIVATION_CONTEXT* actctx, ULONG section_kind, status = find_clr_surrogate(actctx, guid, data); break; default: - DPRINT("Unknown section_kind %x\n", section_kind); + WARN("Unknown section_kind %x\n", section_kind); return STATUS_SXS_SECTION_NOT_FOUND; } @@ -5106,7 +5109,7 @@ RtlCreateActivationContext(IN ULONG Flags, HANDLE file = 0; struct actctx_loader acl; - DPRINT("RtlCreateActivationContext %p %08x, Image Base: %p\n", pActCtx, pActCtx ? pActCtx->dwFlags : 0, ((ACTCTXW*)ActivationContextData)->hModule); + TRACE("RtlCreateActivationContext %p %08x, Image Base: %p\n", pActCtx, pActCtx ? pActCtx->dwFlags : 0, ((ACTCTXW*)ActivationContextData)->hModule); if (!pActCtx || pActCtx->cbSize < sizeof(*pActCtx) || (pActCtx->dwFlags & ~ACTCTX_FLAGS_ALL)) @@ -5316,7 +5319,7 @@ void WINAPI RtlReleaseActivationContext( HANDLE handle ) */ NTSTATUS WINAPI RtlZombifyActivationContext( HANDLE handle ) { - UNIMPLEMENTED; + FIXME("%p: stub\n", handle); if (handle == ACTCTX_FAKE_HANDLE) return STATUS_SUCCESS; @@ -5344,7 +5347,7 @@ NTAPI RtlActivateActivationContextEx( ULONG flags, PTEB tebAddress, HANDLE handl RtlAddRefActivationContext( handle ); *cookie = (ULONG_PTR)frame; - DPRINT( "%p cookie=%lx\n", handle, *cookie ); + TRACE( "%p cookie=%lx\n", handle, *cookie ); return STATUS_SUCCESS; } @@ -5363,7 +5366,7 @@ NTSTATUS WINAPI RtlDeactivateActivationContext( ULONG flags, ULONG_PTR cookie ) { RTL_ACTIVATION_CONTEXT_STACK_FRAME *frame, *top; - DPRINT( "%x cookie=%lx\n", flags, cookie ); + TRACE( "%x cookie=%lx\n", flags, cookie ); /* find the right frame */ top = NtCurrentTeb()->ActivationContextStackPointer->ActiveFrame; @@ -5479,7 +5482,7 @@ NTSTATUS WINAPI RtlQueryInformationActivationContext( ULONG flags, HANDLE handle ACTIVATION_CONTEXT *actctx; NTSTATUS status; - DPRINT("%08x %p %p %u %p %Iu %p\n", flags, handle, + TRACE("%08x %p %p %u %p %ld %p\n", flags, handle, subinst, class, buffer, bufsize, retlen); if (retlen) *retlen = 0; @@ -5714,7 +5717,7 @@ NTSTATUS WINAPI RtlQueryInformationActivationContext( ULONG flags, HANDLE handle break; default: - DPRINT( "class %u not implemented\n", class ); + FIXME( "class %u not implemented\n", class ); return STATUS_NOT_IMPLEMENTED; } return STATUS_SUCCESS; @@ -5831,13 +5834,13 @@ NTSTATUS WINAPI RtlFindActivationContextSectionGuid( ULONG flags, const GUID *ex if (extguid) { - DPRINT1("expected extguid == NULL\n"); + FIXME("expected extguid == NULL\n"); return STATUS_INVALID_PARAMETER; } if (flags & ~FIND_ACTCTX_SECTION_KEY_RETURN_HACTCTX) { - DPRINT1("unknown flags %08x\n", flags); + FIXME("unknown flags %08x\n", flags); return STATUS_INVALID_PARAMETER; } From 86e28b67ceaf4dec8da514e3df67316cbc14feb4 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 20 Apr 2024 17:34:42 +0300 Subject: [PATCH 040/182] [RTL] actctx.c: Remove unused stuff that isn't in wine --- sdk/lib/rtl/actctx.c | 9 --------- 1 file changed, 9 deletions(-) diff --git a/sdk/lib/rtl/actctx.c b/sdk/lib/rtl/actctx.c index 2a943ac11e1..93db5975d6a 100644 --- a/sdk/lib/rtl/actctx.c +++ b/sdk/lib/rtl/actctx.c @@ -759,9 +759,6 @@ static const struct olemisc_entry olemisc_values[] = }; static const WCHAR g_xmlW[] = {'?','x','m','l',0}; -static const WCHAR manifestv1W[] = {'u','r','n',':','s','c','h','e','m','a','s','-','m','i','c','r','o','s','o','f','t','-','c','o','m',':','a','s','m','.','v','1',0}; -static const WCHAR manifestv2W[] = {'u','r','n',':','s','c','h','e','m','a','s','-','m','i','c','r','o','s','o','f','t','-','c','o','m',':','a','s','m','.','v','2',0}; -static const WCHAR manifestv3W[] = {'u','r','n',':','s','c','h','e','m','a','s','-','m','i','c','r','o','s','o','f','t','-','c','o','m',':','a','s','m','.','v','3',0}; static const WCHAR dotManifestW[] = {'.','m','a','n','i','f','e','s','t',0}; static const WCHAR version_formatW[] = {'%','u','.','%','u','.','%','u','.','%','u',0}; @@ -802,12 +799,6 @@ static inline BOOL xmlstr_cmpi(const xmlstr_t* xmlstr, const WCHAR *str) return !strncmpiW(xmlstr->ptr, str, xmlstr->len) && !str[xmlstr->len]; } -static inline BOOL xmlstr_cmp_end(const xmlstr_t* xmlstr, const WCHAR *str) -{ - return (xmlstr->len && xmlstr->ptr[0] == '/' && - !strncmpW(xmlstr->ptr + 1, str, xmlstr->len - 1) && !str[xmlstr->len - 1]); -} - static inline BOOL xml_attr_cmp(const struct xml_attr* attr, const WCHAR *str) { return xmlstr_cmp( &attr->name, str ); From e46364314b2db545f25867d4eca5c2db6e98360a Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 21 Apr 2024 16:42:07 +0300 Subject: [PATCH 041/182] [RTL] actctx.c: Revert casts --- sdk/lib/rtl/actctx.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/sdk/lib/rtl/actctx.c b/sdk/lib/rtl/actctx.c index 93db5975d6a..25cffbafec2 100644 --- a/sdk/lib/rtl/actctx.c +++ b/sdk/lib/rtl/actctx.c @@ -3067,7 +3067,7 @@ static NTSTATUS get_manifest_in_manifest_file( struct actctx_loader* acl, struct status = NtQueryInformationFile( file, &io, &info, sizeof(info), FileStandardInformation); if (status == STATUS_SUCCESS) - status = parse_manifest(acl, ai, filename, directory, shared, base, (SIZE_T)info.EndOfFile.QuadPart); + status = parse_manifest(acl, ai, filename, directory, shared, base, info.EndOfFile.QuadPart); NtUnmapViewOfSection( GetCurrentProcess(), base ); return status; @@ -3156,7 +3156,7 @@ static WCHAR *lookup_manifest_file( HANDLE dir, struct assembly_identity *ai ) WCHAR *tmp; ULONG build, revision; - data_len = (ULONG)io.Information; + data_len = io.Information; for (;;) { @@ -3165,7 +3165,7 @@ static WCHAR *lookup_manifest_file( HANDLE dir, struct assembly_identity *ai ) if (NtQueryDirectoryFile( dir, 0, NULL, NULL, &io, buffer, sizeof(buffer), FileBothDirectoryInformation, FALSE, &lookup_us, FALSE )) break; - data_len = (ULONG)io.Information; + data_len = io.Information; data_pos = 0; } dir_info = (FILE_BOTH_DIR_INFORMATION*)(buffer + data_pos); @@ -3487,7 +3487,7 @@ static NTSTATUS build_dllredirect_section(ACTIVATION_CONTEXT* actctx, struct str DPRINT("%d: dll name %S\n", j, dll->name); /* setup new index entry */ str.Buffer = dll->name; - str.Length = (USHORT)strlenW(dll->name)*sizeof(WCHAR); + str.Length = strlenW(dll->name)*sizeof(WCHAR); str.MaximumLength = str.Length + sizeof(WCHAR); /* hash original class name */ RtlHashUnicodeString(&str, TRUE, HASH_STRING_ALGORITHM_X65599, &index->hash); @@ -3705,7 +3705,7 @@ static NTSTATUS build_wndclass_section(ACTIVATION_CONTEXT* actctx, struct strsec /* setup new index entry */ str.Buffer = entity->u.class.name; - str.Length = (USHORT)strlenW(entity->u.class.name)*sizeof(WCHAR); + str.Length = strlenW(entity->u.class.name)*sizeof(WCHAR); str.MaximumLength = str.Length + sizeof(WCHAR); /* hash original class name */ RtlHashUnicodeString(&str, TRUE, HASH_STRING_ALGORITHM_X65599, &index->hash); @@ -5518,11 +5518,11 @@ NTSTATUS WINAPI RtlQueryInformationActivationContext( ULONG flags, HANDLE handle acdi->ulFormatVersion = assembly ? 1 : 0; /* FIXME */ acdi->ulAssemblyCount = actctx->num_assemblies; acdi->ulRootManifestPathType = assembly ? assembly->manifest.type : 0 /* FIXME */; - acdi->ulRootManifestPathChars = assembly && assembly->manifest.info ? (DWORD)manifest_len - 1 : 0; + acdi->ulRootManifestPathChars = assembly && assembly->manifest.info ? manifest_len - 1 : 0; acdi->ulRootConfigurationPathType = actctx->config.type; - acdi->ulRootConfigurationPathChars = actctx->config.info ? (DWORD)config_len - 1 : 0; + acdi->ulRootConfigurationPathChars = actctx->config.info ? config_len - 1 : 0; acdi->ulAppDirPathType = actctx->appdir.type; - acdi->ulAppDirPathChars = actctx->appdir.info ? (DWORD)appdir_len - 1 : 0; + acdi->ulAppDirPathChars = actctx->appdir.info ? appdir_len - 1 : 0; ptr = (LPWSTR)(acdi + 1); if (manifest_len) { @@ -5582,9 +5582,9 @@ NTSTATUS WINAPI RtlQueryInformationActivationContext( ULONG flags, HANDLE handle } afdi->ulFlags = 0; /* FIXME */ - afdi->ulEncodedAssemblyIdentityLength = (DWORD)(id_len - 1) * sizeof(WCHAR); + afdi->ulEncodedAssemblyIdentityLength = (id_len - 1) * sizeof(WCHAR); afdi->ulManifestPathType = assembly->manifest.type; - afdi->ulManifestPathLength = assembly->manifest.info ? (DWORD)(path_len - 1) * sizeof(WCHAR) : 0; + afdi->ulManifestPathLength = assembly->manifest.info ? (path_len - 1) * sizeof(WCHAR) : 0; /* FIXME afdi->liManifestLastWriteTime = 0; */ afdi->ulPolicyPathType = ACTIVATION_CONTEXT_PATH_TYPE_NONE; /* FIXME */ afdi->ulPolicyPathLength = 0; @@ -5594,7 +5594,7 @@ NTSTATUS WINAPI RtlQueryInformationActivationContext( ULONG flags, HANDLE handle afdi->ulManifestVersionMinor = 0; afdi->ulPolicyVersionMajor = 0; /* FIXME */ afdi->ulPolicyVersionMinor = 0; /* FIXME */ - afdi->ulAssemblyDirectoryNameLength = ad_len ? (DWORD)(ad_len - 1) * sizeof(WCHAR) : 0; + afdi->ulAssemblyDirectoryNameLength = ad_len ? (ad_len - 1) * sizeof(WCHAR) : 0; ptr = (LPWSTR)(afdi + 1); afdi->lpAssemblyEncodedAssemblyIdentity = ptr; memcpy( ptr, assembly_id, id_len * sizeof(WCHAR) ); @@ -5646,7 +5646,7 @@ NTSTATUS WINAPI RtlQueryInformationActivationContext( ULONG flags, HANDLE handle } if (retlen) *retlen = 0; /* yes that's what native does !! */ afdi->ulFlags = ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION; - afdi->ulFilenameLength = dll_len ? (DWORD)(dll_len - 1) * sizeof(WCHAR) : 0; + afdi->ulFilenameLength = dll_len ? (dll_len - 1) * sizeof(WCHAR) : 0; afdi->ulPathLength = 0; /* FIXME */ ptr = (LPWSTR)(afdi + 1); if (dll_len) From 41ff75ce3650f4e827fdf892db97972051b6501a Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 21 Apr 2024 13:08:34 +0300 Subject: [PATCH 042/182] [RTL] actctx.c: Revert __TRY / __EXCEPT changes --- sdk/lib/rtl/actctx.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sdk/lib/rtl/actctx.c b/sdk/lib/rtl/actctx.c index 25cffbafec2..ea3cc70bafd 100644 --- a/sdk/lib/rtl/actctx.c +++ b/sdk/lib/rtl/actctx.c @@ -22,6 +22,7 @@ #include #include +#include "wine/exception.h" #define GetProcessHeap() RtlGetProcessHeap() #define GetCurrentProcess() NtCurrentProcess() @@ -1158,7 +1159,7 @@ static ACTIVATION_CONTEXT *check_actctx( HANDLE h ) PACTIVATION_CONTEXT_WRAPPED pActual; if (!h || h == INVALID_HANDLE_VALUE) return NULL; - _SEH2_TRY + __TRY { if (actctx) { @@ -1166,11 +1167,11 @@ static ACTIVATION_CONTEXT *check_actctx( HANDLE h ) if (pActual->MagicMarker == ACTCTX_MAGIC_MARKER) ret = &pActual->ActivationContext; } } - _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + __EXCEPT_PAGE_FAULT { DPRINT1("Invalid activation context handle!\n"); } - _SEH2_END; + __ENDTRY return ret; } From 1a6dc01f69d4eecad6fd6b3aedbe81d6d7e84109 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 20 Apr 2024 15:53:36 +0300 Subject: [PATCH 043/182] [RTL] actctx.c: Revert FILE_END_OF_FILE_INFORMATION changes We still need to hack it, because FileEndOfFileInformation is not supported in user mode, neither in ReactOS, nor in Windows. --- sdk/lib/rtl/actctx.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sdk/lib/rtl/actctx.c b/sdk/lib/rtl/actctx.c index ea3cc70bafd..1e0b7448bb7 100644 --- a/sdk/lib/rtl/actctx.c +++ b/sdk/lib/rtl/actctx.c @@ -29,6 +29,8 @@ #define FIXME DPRINT1 #define WARN DPRINT1 #define TRACE DPRINT +#define FILE_END_OF_FILE_INFORMATION FILE_STANDARD_INFORMATION +#define FileEndOfFileInformation FileStandardInformation BOOLEAN RtlpNotAllowingMultipleActivation; @@ -3032,7 +3034,7 @@ static NTSTATUS get_manifest_in_pe_file( struct actctx_loader* acl, struct assem static NTSTATUS get_manifest_in_manifest_file( struct actctx_loader* acl, struct assembly_identity* ai, LPCWSTR filename, LPCWSTR directory, BOOL shared, HANDLE file ) { - FILE_STANDARD_INFORMATION info; + FILE_END_OF_FILE_INFORMATION info; IO_STATUS_BLOCK io; HANDLE mapping; OBJECT_ATTRIBUTES attr; @@ -3064,9 +3066,7 @@ static NTSTATUS get_manifest_in_manifest_file( struct actctx_loader* acl, struct NtClose( mapping ); if (status != STATUS_SUCCESS) return status; - /* Fixme: WINE uses FileEndOfFileInformation with NtQueryInformationFile. */ - status = NtQueryInformationFile( file, &io, &info, sizeof(info), FileStandardInformation); - + status = NtQueryInformationFile( file, &io, &info, sizeof(info), FileEndOfFileInformation ); if (status == STATUS_SUCCESS) status = parse_manifest(acl, ai, filename, directory, shared, base, info.EndOfFile.QuadPart); From 55f4e2a5818900e8eba01a30dfb0baae0db5f0b2 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 21 Apr 2024 17:04:23 +0300 Subject: [PATCH 044/182] [RTL] actctx.c: Revert RELATIVE_PATH change --- sdk/lib/rtl/actctx.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sdk/lib/rtl/actctx.c b/sdk/lib/rtl/actctx.c index 1e0b7448bb7..926131dcc38 100644 --- a/sdk/lib/rtl/actctx.c +++ b/sdk/lib/rtl/actctx.c @@ -31,6 +31,7 @@ #define TRACE DPRINT #define FILE_END_OF_FILE_INFORMATION FILE_STANDARD_INFORMATION #define FileEndOfFileInformation FileStandardInformation +#define RELATIVE_PATH RtlPathTypeRelative BOOLEAN RtlpNotAllowingMultipleActivation; @@ -5147,7 +5148,7 @@ RtlCreateActivationContext(IN ULONG Flags, BOOLEAN ret; if (pActCtx->dwFlags & ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID && - RtlDetermineDosPathNameType_U(pActCtx->lpSource) == RtlPathTypeRelative) + RtlDetermineDosPathNameType_U(pActCtx->lpSource) == RELATIVE_PATH) { DWORD dir_len, source_len; From ad5d8bb477f3ba63e0cb4a65aecf740ae7da163b Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 21 Apr 2024 16:51:24 +0300 Subject: [PATCH 045/182] [RTL] actctx.c: Reduce diff to wine --- sdk/lib/rtl/actctx.c | 67 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 62 insertions(+), 5 deletions(-) diff --git a/sdk/lib/rtl/actctx.c b/sdk/lib/rtl/actctx.c index 926131dcc38..703cb7a6fc7 100644 --- a/sdk/lib/rtl/actctx.c +++ b/sdk/lib/rtl/actctx.c @@ -33,6 +33,9 @@ #define FileEndOfFileInformation FileStandardInformation #define RELATIVE_PATH RtlPathTypeRelative +#undef RT_MANIFEST +#undef CREATEPROCESS_MANIFEST_RESOURCE_ID + BOOLEAN RtlpNotAllowingMultipleActivation; #define ACTCTX_FLAGS_ALL (\ @@ -45,6 +48,7 @@ BOOLEAN RtlpNotAllowingMultipleActivation; ACTCTX_FLAG_SOURCE_IS_ASSEMBLYREF |\ ACTCTX_FLAG_HMODULE_VALID ) +#define ACTCTX_MAGIC 0xC07E3E11 #define STRSECTION_MAGIC 0x64487353 /* dHsS */ #define GUIDSECTION_MAGIC 0x64487347 /* dHsG */ @@ -53,6 +57,47 @@ BOOLEAN RtlpNotAllowingMultipleActivation; #define ACTCTX_FAKE_HANDLE ((HANDLE) 0xf00baa) #define ACTCTX_FAKE_COOKIE ((ULONG_PTR) 0xf00bad) +/* we don't want to include winuser.h */ +#define RT_MANIFEST ((ULONG_PTR)24) +#define CREATEPROCESS_MANIFEST_RESOURCE_ID ((ULONG_PTR)1) + +#ifndef __REACTOS__ // defined in oaidl.h +/* from oaidl.h */ +typedef enum tagLIBFLAGS { + LIBFLAG_FRESTRICTED = 0x1, + LIBFLAG_FCONTROL = 0x2, + LIBFLAG_FHIDDEN = 0x4, + LIBFLAG_FHASDISKIMAGE = 0x8 +} LIBFLAGS; + +/* from oleidl.idl */ +typedef enum tagOLEMISC +{ + OLEMISC_RECOMPOSEONRESIZE = 0x1, + OLEMISC_ONLYICONIC = 0x2, + OLEMISC_INSERTNOTREPLACE = 0x4, + OLEMISC_STATIC = 0x8, + OLEMISC_CANTLINKINSIDE = 0x10, + OLEMISC_CANLINKBYOLE1 = 0x20, + OLEMISC_ISLINKOBJECT = 0x40, + OLEMISC_INSIDEOUT = 0x80, + OLEMISC_ACTIVATEWHENVISIBLE = 0x100, + OLEMISC_RENDERINGISDEVICEINDEPENDENT = 0x200, + OLEMISC_INVISIBLEATRUNTIME = 0x400, + OLEMISC_ALWAYSRUN = 0x800, + OLEMISC_ACTSLIKEBUTTON = 0x1000, + OLEMISC_ACTSLIKELABEL = 0x2000, + OLEMISC_NOUIACTIVATE = 0x4000, + OLEMISC_ALIGNABLE = 0x8000, + OLEMISC_SIMPLEFRAME = 0x10000, + OLEMISC_SETCLIENTSITEFIRST = 0x20000, + OLEMISC_IMEMODE = 0x40000, + OLEMISC_IGNOREACTIVATEWHENVISIBLE = 0x80000, + OLEMISC_WANTSTOMENUMERGE = 0x100000, + OLEMISC_SUPPORTSMULTILEVELUNDO = 0x200000 +} OLEMISC; +#endif // !__REACTOS__ + #define MAX_NAMESPACES 64 typedef struct @@ -803,7 +848,7 @@ static inline BOOL xmlstr_cmpi(const xmlstr_t* xmlstr, const WCHAR *str) return !strncmpiW(xmlstr->ptr, str, xmlstr->len) && !str[xmlstr->len]; } -static inline BOOL xml_attr_cmp(const struct xml_attr* attr, const WCHAR *str) +static BOOL xml_attr_cmp( const struct xml_attr *attr, const WCHAR *str ) { return xmlstr_cmp( &attr->name, str ); } @@ -837,6 +882,18 @@ static inline BOOL isxmlspace( WCHAR ch ) return (ch == ' ' || ch == '\r' || ch == '\n' || ch == '\t'); } +#ifndef __REACTOS__ +static inline const char* debugstr_xmlstr(const xmlstr_t* str) +{ + return debugstr_wn(str->ptr, str->len); +} + +static inline const char* debugstr_version(const struct assembly_version *ver) +{ + return wine_dbg_sprintf("%u.%u.%u.%u", ver->major, ver->minor, ver->build, ver->revision); +} +#endif // !__REACTOS__ + static struct assembly *add_assembly(ACTIVATION_CONTEXT *actctx, enum assembly_type at) { struct assembly *assembly; @@ -2886,7 +2943,7 @@ static NTSTATUS get_manifest_in_module( struct actctx_loader* acl, struct assemb if (!resname) return STATUS_INVALID_PARAMETER; - info.Type = (ULONG_PTR)RT_MANIFEST; + info.Type = RT_MANIFEST; info.Language = lang; if (!((ULONG_PTR)resname >> 16)) { @@ -3084,7 +3141,7 @@ static NTSTATUS get_manifest_in_associated_manifest( struct actctx_loader* acl, NTSTATUS status; UNICODE_STRING nameW; HANDLE file; - ULONG_PTR resid = (ULONG_PTR)CREATEPROCESS_MANIFEST_RESOURCE_ID; + ULONG_PTR resid = CREATEPROCESS_MANIFEST_RESOURCE_ID; if (!((ULONG_PTR)resname >> 16)) resid = (ULONG_PTR)resname & 0xffff; @@ -3345,7 +3402,7 @@ static NTSTATUS lookup_assembly(struct actctx_loader* acl, if (!status) { status = get_manifest_in_pe_file( acl, ai, nameW.Buffer, directory, FALSE, file, - (LPCWSTR)0, 0 ); + (LPCWSTR)CREATEPROCESS_MANIFEST_RESOURCE_ID, 0 ); NtClose( file ); break; } @@ -5102,7 +5159,7 @@ RtlCreateActivationContext(IN ULONG Flags, HANDLE file = 0; struct actctx_loader acl; - TRACE("RtlCreateActivationContext %p %08x, Image Base: %p\n", pActCtx, pActCtx ? pActCtx->dwFlags : 0, ((ACTCTXW*)ActivationContextData)->hModule); + TRACE("%p %08x\n", pActCtx, pActCtx ? pActCtx->dwFlags : 0); if (!pActCtx || pActCtx->cbSize < sizeof(*pActCtx) || (pActCtx->dwFlags & ~ACTCTX_FLAGS_ALL)) From f9d3a50ee3f025adfa767e12508e4fe930137fa8 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 21 Apr 2024 12:34:38 +0300 Subject: [PATCH 046/182] [RTL] actctx.c: Add some #ifdef __REACTOS__ --- sdk/lib/rtl/actctx.c | 46 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/sdk/lib/rtl/actctx.c b/sdk/lib/rtl/actctx.c index 703cb7a6fc7..5e87d9af6f0 100644 --- a/sdk/lib/rtl/actctx.c +++ b/sdk/lib/rtl/actctx.c @@ -13,6 +13,7 @@ */ /* Based on Wine 3.2-37c98396 */ +#ifdef __REACTOS__ #include #include @@ -38,6 +39,8 @@ BOOLEAN RtlpNotAllowingMultipleActivation; +#endif // __REACTOS__ + #define ACTCTX_FLAGS_ALL (\ ACTCTX_FLAG_PROCESSOR_ARCHITECTURE_VALID |\ ACTCTX_FLAG_LANGID_VALID |\ @@ -545,6 +548,7 @@ enum context_sections PROGIDREDIRECT_SECTION = 64 }; +#ifdef __REACTOS__ typedef struct _ASSEMBLY_STORAGE_MAP_ENTRY { ULONG Flags; @@ -558,9 +562,11 @@ typedef struct _ASSEMBLY_STORAGE_MAP ULONG AssemblyCount; PASSEMBLY_STORAGE_MAP_ENTRY *AssemblyArray; } ASSEMBLY_STORAGE_MAP, *PASSEMBLY_STORAGE_MAP; +#endif // __REACTOS__ typedef struct _ACTIVATION_CONTEXT { +#ifdef __REACTOS__ LONG RefCount; ULONG Flags; LIST_ENTRY Links; @@ -573,11 +579,15 @@ typedef struct _ACTIVATION_CONTEXT PASSEMBLY_STORAGE_MAP_ENTRY InlineStorageMapEntries; ULONG StackTraceIndex; PVOID StackTraces[4][4]; - struct file_info config; - struct file_info appdir; - struct assembly *assemblies; - unsigned int num_assemblies; - unsigned int allocated_assemblies; +#else + ULONG magic; + int ref_count; +#endif // __REACTOS__ + struct file_info config; + struct file_info appdir; + struct assembly *assemblies; + unsigned int num_assemblies; + unsigned int allocated_assemblies; /* section data */ DWORD sections; struct strsection_header *wndclass_section; @@ -615,6 +625,7 @@ static const WCHAR asmv1W[] = {'u','r','n',':','s','c','h','e','m','a','s','-',' static const WCHAR asmv2W[] = {'u','r','n',':','s','c','h','e','m','a','s','-','m','i','c','r','o','s','o','f','t','-','c','o','m',':','a','s','m','.','v','2',0}; static const WCHAR asmv3W[] = {'u','r','n',':','s','c','h','e','m','a','s','-','m','i','c','r','o','s','o','f','t','-','c','o','m',':','a','s','m','.','v','3',0}; +#ifdef __REACTOS__ typedef struct _ACTIVATION_CONTEXT_WRAPPED { PVOID MagicMarker; @@ -668,6 +679,7 @@ RtlpValidateActCtx(IN PACTIVATION_CONTEXT ActCtx) RtlpSxsBreakOnInvalidMarker(ActCtx, 1); } } +#endif // __REACTOS__ static const WCHAR assemblyW[] = {'a','s','s','e','m','b','l','y',0}; static const WCHAR assemblyIdentityW[] = {'a','s','s','e','m','b','l','y','I','d','e','n','t','i','t','y',0}; @@ -2975,6 +2987,7 @@ static NTSTATUS get_manifest_in_module( struct actctx_loader* acl, struct assemb return status; } +#ifdef __REACTOS__ IMAGE_RESOURCE_DIRECTORY *find_entry_by_name( IMAGE_RESOURCE_DIRECTORY *dir, LPCWSTR name, void *root, int want_dir ); @@ -3032,6 +3045,7 @@ static NTSTATUS search_manifest_in_module( struct actctx_loader* acl, struct ass return status; } +#endif // __REACTOS__ static NTSTATUS get_manifest_in_pe_file( struct actctx_loader* acl, struct assembly_identity* ai, LPCWSTR filename, LPCWSTR directory, BOOL shared, @@ -5028,9 +5042,11 @@ static NTSTATUS find_string(ACTIVATION_CONTEXT* actctx, ULONG section_kind, switch (section_kind) { +#ifdef __REACTOS__ case ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION: DPRINT1("Unsupported yet section_kind %x\n", section_kind); return STATUS_SXS_KEY_NOT_FOUND; +#endif // __REACTOS__ case ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION: status = find_dll_redirection(actctx, section_name, data); break; @@ -5448,6 +5464,7 @@ NTSTATUS WINAPI RtlDeactivateActivationContext( ULONG flags, ULONG_PTR cookie ) return STATUS_SUCCESS; } +#ifdef __REACTOS__ VOID NTAPI RtlFreeActivationContextStack(IN PACTIVATION_CONTEXT_STACK Stack) @@ -5478,14 +5495,29 @@ RtlFreeActivationContextStack(IN PACTIVATION_CONTEXT_STACK Stack) /* Free activation stack memory */ RtlFreeHeap(GetProcessHeap(), 0, Stack); } +#endif // __REACTOS__ /****************************************************************** * RtlFreeThreadActivationContextStack (NTDLL.@) */ void WINAPI RtlFreeThreadActivationContextStack(void) { +#ifdef __REACTOS__ RtlFreeActivationContextStack(NtCurrentTeb()->ActivationContextStackPointer); NtCurrentTeb()->ActivationContextStackPointer = NULL; +#else + RTL_ACTIVATION_CONTEXT_STACK_FRAME *frame; + + frame = NtCurrentTeb()->ActivationContextStack.ActiveFrame; + while (frame) + { + RTL_ACTIVATION_CONTEXT_STACK_FRAME *prev = frame->Previous; + RtlReleaseActivationContext( frame->ActivationContext ); + RtlFreeHeap( GetProcessHeap(), 0, frame ); + frame = prev; + } + NtCurrentTeb()->ActivationContextStack.ActiveFrame = NULL; +#endif // __REACTOS__ } @@ -5773,6 +5805,7 @@ NTSTATUS WINAPI RtlQueryInformationActivationContext( ULONG flags, HANDLE handle return STATUS_SUCCESS; } +#ifdef __REACTOS__ NTSTATUS NTAPI RtlQueryInformationActiveActivationContext(ULONG ulInfoClass, @@ -5818,6 +5851,7 @@ RtlpFindActivationContextSection_CheckParameters( ULONG flags, const GUID *guid, return STATUS_SUCCESS; } +#endif // __REACTOS__ /*********************************************************************** * RtlFindActivationContextSectionString (NTDLL.@) @@ -5912,6 +5946,7 @@ NTSTATUS WINAPI RtlFindActivationContextSectionGuid( ULONG flags, const GUID *ex return status; } +#ifdef __REACTOS__ /* Stubs */ NTSTATUS @@ -6073,3 +6108,4 @@ RtlDeactivateActivationContextUnsafeFast(IN PRTL_CALLER_ALLOCATED_ACTIVATION_CON Frame->Frame.Flags |= RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_DEACTIVATED; return NewFrame->Previous; } +#endif // __REACTOS__ From 6e277fc0c02db42cb3f455fdb9550ec16572ef46 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 23 Apr 2024 11:11:22 +0300 Subject: [PATCH 047/182] [RTL] actctx.c: Revert parameter change --- sdk/lib/rtl/actctx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/lib/rtl/actctx.c b/sdk/lib/rtl/actctx.c index 5e87d9af6f0..257e1a21df3 100644 --- a/sdk/lib/rtl/actctx.c +++ b/sdk/lib/rtl/actctx.c @@ -2902,7 +2902,7 @@ static NTSTATUS open_nt_file( HANDLE *handle, UNICODE_STRING *name ) return NtOpenFile( handle, GENERIC_READ | SYNCHRONIZE, &attr, &io, FILE_SHARE_READ, FILE_SYNCHRONOUS_IO_ALERT ); } -static NTSTATUS get_module_filename( HMODULE module, UNICODE_STRING *str, USHORT extra_len ) +static NTSTATUS get_module_filename( HMODULE module, UNICODE_STRING *str, unsigned int extra_len ) { NTSTATUS status; ULONG_PTR magic; From 06a35089eb0e99155ed80e8b36e2c0fd53b0c21b Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 23 Apr 2024 13:12:33 +0300 Subject: [PATCH 048/182] [RTL] actctx.c: Reduce diff to wine The changes are: - Do not allocate an additional WCHAR for the terminating UNICODE_NULL, since we already have that accounted for by sizeof(manifest_dirW) - Use strcpyW intead of memcpy / strlenW, which does the same thing - Add a define for user_shared_data --- sdk/lib/rtl/actctx.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/sdk/lib/rtl/actctx.c b/sdk/lib/rtl/actctx.c index 257e1a21df3..0a9d4ae05f6 100644 --- a/sdk/lib/rtl/actctx.c +++ b/sdk/lib/rtl/actctx.c @@ -33,6 +33,7 @@ #define FILE_END_OF_FILE_INFORMATION FILE_STANDARD_INFORMATION #define FileEndOfFileInformation FileStandardInformation #define RELATIVE_PATH RtlPathTypeRelative +#define user_shared_data SharedUserData #undef RT_MANIFEST #undef CREATEPROCESS_MANIFEST_RESOURCE_ID @@ -3295,12 +3296,12 @@ static NTSTATUS lookup_winsxs(struct actctx_loader* acl, struct assembly_identit if (!ai->arch || !ai->name || !ai->public_key) return STATUS_NO_SUCH_FILE; - if (!(path = RtlAllocateHeap( GetProcessHeap(), 0, - ((strlenW(SharedUserData->NtSystemRoot) + 1) *sizeof(WCHAR)) + sizeof(manifest_dirW) ))) + if (!(path = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(manifest_dirW) + + strlenW(user_shared_data->NtSystemRoot) * sizeof(WCHAR) ))) return STATUS_NO_MEMORY; - memcpy( path, SharedUserData->NtSystemRoot, strlenW(SharedUserData->NtSystemRoot) * sizeof(WCHAR) ); - memcpy( path + strlenW(SharedUserData->NtSystemRoot), manifest_dirW, sizeof(manifest_dirW) ); + strcpyW( path, user_shared_data->NtSystemRoot ); + memcpy( path + strlenW(path), manifest_dirW, sizeof(manifest_dirW) ); if (!RtlDosPathNameToNtPathName_U( path, &path_us, NULL, NULL )) { From 35dc2f2410e9f54c7f5e472a22e1d1f141bf8ca1 Mon Sep 17 00:00:00 2001 From: Thamatip Chitpong Date: Mon, 29 Apr 2024 17:56:03 +0700 Subject: [PATCH 049/182] [WINMM] PlaySound: Add a note for ReactOS-specific modifications Addendum to commit f18111b64120806529e93404f21b6320f211ec39 --- dll/win32/winmm/playsound.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dll/win32/winmm/playsound.c b/dll/win32/winmm/playsound.c index 8ce6f7c154c..df532f05cfd 100644 --- a/dll/win32/winmm/playsound.c +++ b/dll/win32/winmm/playsound.c @@ -6,6 +6,8 @@ * Copyright 1993 Martin Ayotte * 1998-2002 Eric Pouech * + * Modified for use with ReactOS by Thamatip Chitpong, 2023 + * * 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 From bebf99aaf1b7ddee0ebc5529928c0e875170c2dd Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 22 Apr 2024 11:41:00 +0300 Subject: [PATCH 050/182] [NTDLL_APITEST] Add test for FileEndOfFileInformation --- .../apitests/ntdll/NtQueryInformationFile.c | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/modules/rostests/apitests/ntdll/NtQueryInformationFile.c b/modules/rostests/apitests/ntdll/NtQueryInformationFile.c index 74739bb390b..bc03e6f744a 100644 --- a/modules/rostests/apitests/ntdll/NtQueryInformationFile.c +++ b/modules/rostests/apitests/ntdll/NtQueryInformationFile.c @@ -20,4 +20,36 @@ START_TEST(NtQueryInformationFile) Status = NtQueryInformationFile(NULL, NULL, NULL, 0, 0x80000000); ok(Status == STATUS_INVALID_INFO_CLASS || ntv6(Status == STATUS_NOT_IMPLEMENTED), "Status = %lx\n", Status); + + /* Get the full path of the current executable */ + CHAR Path[MAX_PATH]; + DWORD Length = GetModuleFileNameA(NULL, Path, _countof(Path)); + ok(Length != 0, "GetModuleFileNameA failed\n"); + if (Length == 0) + return; + + /* Open the file */ + HANDLE hFile = CreateFileA(Path, + GENERIC_READ, + FILE_SHARE_READ, + NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + NULL); + ok(hFile != INVALID_HANDLE_VALUE, "CreateFileA failed\n"); + if (hFile == INVALID_HANDLE_VALUE) + return; + + /* Query FileEndOfFileInformation */ + FILE_END_OF_FILE_INFORMATION EndOfFileInformation; + EndOfFileInformation.EndOfFile.QuadPart = 0xdeaddead; + Status = NtQueryInformationFile(hFile, + NULL, + &EndOfFileInformation, + sizeof(EndOfFileInformation), + FileEndOfFileInformation); + ok_hex(Status, STATUS_INVALID_INFO_CLASS); + ok(EndOfFileInformation.EndOfFile.QuadPart == 0xdeaddead, "EndOfFile is modified\n"); + + CloseHandle(hFile); } From e77da17f6857ddbdca4b3e2cf1f2afa0fa02202d Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 22 Apr 2024 11:42:01 +0300 Subject: [PATCH 051/182] [KMTEST] Add test for FileEndOfFileInformation --- modules/rostests/kmtests/ntos_io/IoFilesystem.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/modules/rostests/kmtests/ntos_io/IoFilesystem.c b/modules/rostests/kmtests/ntos_io/IoFilesystem.c index 0c3f04db9bb..e507b480d55 100644 --- a/modules/rostests/kmtests/ntos_io/IoFilesystem.c +++ b/modules/rostests/kmtests/ntos_io/IoFilesystem.c @@ -221,6 +221,15 @@ TestAllInformation(VOID) if (FileAllInfo) KmtFreeGuarded(FileAllInfo); + PFILE_END_OF_FILE_INFORMATION FileEofInfo; + Length = sizeof(*FileEofInfo); + Status = QueryFileInfo(FileHandle, (PVOID*)&FileEofInfo, &Length, FileEndOfFileInformation); + // Checked build: STATUS_INVALID_INFO_CLASS, Free build: STATUS_INVALID_PARAMETER + ok(Status == STATUS_INVALID_PARAMETER || Status == STATUS_INVALID_INFO_CLASS, "Wrong Status = %lx\n", Status); + ok_eq_size(Length, (SIZE_T)0x5555555555555555ULL); + if (FileEofInfo) + KmtFreeGuarded(FileEofInfo); + NoInfo: Status = ObCloseHandle(FileHandle, KernelMode); ok_eq_hex(Status, STATUS_SUCCESS); From 0f9bf6abb469549106c8db1b5a774cf5ba973b21 Mon Sep 17 00:00:00 2001 From: Doug Lyons Date: Tue, 30 Apr 2024 13:59:50 -0500 Subject: [PATCH 052/182] [NTOS:CC] Restore unlock/reacquire locks around MmPageOutPhysicalAddress (#5735) * [NTOS:CC] Restore unlock and reacquire locks around MmPageOutPhysicalAddress which was mistakenly lost in commit 2b14056 * Add bypass for problematic code path for now --- ntoskrnl/cc/view.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/ntoskrnl/cc/view.c b/ntoskrnl/cc/view.c index 2a0590dba49..4e72ca6b040 100644 --- a/ntoskrnl/cc/view.c +++ b/ntoskrnl/cc/view.c @@ -469,8 +469,6 @@ CcRosTrimCache( ULONG PagesFreed; KIRQL oldIrql; LIST_ENTRY FreeList; - PFN_NUMBER Page; - ULONG i; BOOLEAN FlushedPages = FALSE; DPRINT("CcRosTrimCache(Target %lu)\n", Target); @@ -490,7 +488,6 @@ CcRosTrimCache( current = CONTAINING_RECORD(current_entry, ROS_VACB, VacbLruListEntry); - current_entry = current_entry->Flink; KeAcquireSpinLockAtDpcLevel(¤t->SharedCacheMap->CacheMapLock); @@ -500,6 +497,18 @@ CcRosTrimCache( /* Check if it's mapped and not dirty */ if (InterlockedCompareExchange((PLONG)¤t->MappedCount, 0, 0) > 0 && !current->Dirty) { + /* This code is never executed. It is left for reference only. */ +#if 1 + DPRINT1("MmPageOutPhysicalAddress unexpectedly called\n"); + ASSERT(FALSE); +#else + ULONG i; + PFN_NUMBER Page; + + /* We have to break these locks to call MmPageOutPhysicalAddress */ + KeReleaseSpinLockFromDpcLevel(¤t->SharedCacheMap->CacheMapLock); + KeReleaseQueuedSpinLock(LockQueueMasterLock, oldIrql); + /* Page out the VACB */ for (i = 0; i < VACB_MAPPING_GRANULARITY / PAGE_SIZE; i++) { @@ -507,8 +516,16 @@ CcRosTrimCache( MmPageOutPhysicalAddress(Page); } + + /* Reacquire the locks */ + oldIrql = KeAcquireQueuedSpinLock(LockQueueMasterLock); + KeAcquireSpinLockAtDpcLevel(¤t->SharedCacheMap->CacheMapLock); +#endif } + /* Only keep iterating though the loop while the lock is held */ + current_entry = current_entry->Flink; + /* Dereference the VACB */ Refs = CcRosVacbDecRefCount(current); From 76d33ee7f22829b9e7ba94989916e502fb81a84d Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 12 Mar 2024 09:12:40 +0200 Subject: [PATCH 053/182] [CRT] Add wcrtomb (from wine) --- dll/win32/msvcrt/msvcrt.spec | 2 +- sdk/lib/crt/msvcrtex.cmake | 1 + sdk/lib/crt/wstring/wcrtomb.c | 32 +++++++++++++++++++++++++++++++ sdk/lib/crt/wstring/wstring.cmake | 1 + 4 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 sdk/lib/crt/wstring/wcrtomb.c diff --git a/dll/win32/msvcrt/msvcrt.spec b/dll/win32/msvcrt/msvcrt.spec index 52437e101fb..adbd3366137 100644 --- a/dll/win32/msvcrt/msvcrt.spec +++ b/dll/win32/msvcrt/msvcrt.spec @@ -1518,7 +1518,7 @@ @ stub -version=0x600+ vswprintf_s @ cdecl vwprintf(wstr ptr) @ stub -version=0x600+ vwprintf_s -@ stub -version=0x600+ wcrtomb +@ cdecl -version=0x600+ wcrtomb(ptr long ptr) @ stub -version=0x600+ wcrtomb_s @ cdecl wcscat(wstr wstr) @ cdecl -version=0x600+ wcscat_s(wstr long wstr) diff --git a/sdk/lib/crt/msvcrtex.cmake b/sdk/lib/crt/msvcrtex.cmake index 545cfc98409..166f5645303 100644 --- a/sdk/lib/crt/msvcrtex.cmake +++ b/sdk/lib/crt/msvcrtex.cmake @@ -15,6 +15,7 @@ if(DLL_EXPORT_VERSION LESS 0x600) misc/dbgrpt.cpp stdlib/_invalid_parameter.c stdlib/rand_s.c + wstring/wcrtomb.c ) endif() diff --git a/sdk/lib/crt/wstring/wcrtomb.c b/sdk/lib/crt/wstring/wcrtomb.c new file mode 100644 index 00000000000..574ee8e8501 --- /dev/null +++ b/sdk/lib/crt/wstring/wcrtomb.c @@ -0,0 +1,32 @@ +/* + * msvcrt.dll mbcs functions + * + * Copyright 1999 Alexandre Julliard + * Copyright 2000 Jon Griffths + * + * 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 + */ + +#include + +/********************************************************************* + * wcrtomb (MSVCRT.@) + */ +size_t CDECL wcrtomb( char *dst, wchar_t ch, mbstate_t *s) +{ + if(s) + *s = 0; + return wctomb(dst, ch); +} diff --git a/sdk/lib/crt/wstring/wstring.cmake b/sdk/lib/crt/wstring/wstring.cmake index e636367cf11..8439a6ae181 100644 --- a/sdk/lib/crt/wstring/wstring.cmake +++ b/sdk/lib/crt/wstring/wstring.cmake @@ -11,6 +11,7 @@ list(APPEND LIBCNTPR_WSTRING_SOURCE list(APPEND CRT_WSTRING_SOURCE ${LIBCNTPR_WSTRING_SOURCE} + wstring/wcrtomb.c wstring/wcscoll.c wstring/wcstok.c wstring/wcsxfrm.c From b388cb66de51d016762a33230207b7c8f7beb1e1 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 12 Mar 2024 09:13:37 +0200 Subject: [PATCH 054/182] [CRT] Add mbrtowc (from wine) --- dll/win32/msvcrt/msvcrt.spec | 2 +- sdk/lib/crt/msvcrtex.cmake | 1 + sdk/lib/crt/wstring/mbrtowc.c | 69 +++++++++++++++++++++++++++++++ sdk/lib/crt/wstring/wstring.cmake | 1 + 4 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 sdk/lib/crt/wstring/mbrtowc.c diff --git a/dll/win32/msvcrt/msvcrt.spec b/dll/win32/msvcrt/msvcrt.spec index adbd3366137..ba28cc7c350 100644 --- a/dll/win32/msvcrt/msvcrt.spec +++ b/dll/win32/msvcrt/msvcrt.spec @@ -1402,7 +1402,7 @@ @ cdecl malloc(long) @ cdecl mblen(ptr long) @ cdecl -version=0x600+ mbrlen(str long ptr) -@ stub -version=0x600+ mbrtowc +@ cdecl -version=0x600+ mbrtowc(ptr str long ptr) @ stub -version=0x600+ mbsdup_dbg @ stub -version=0x600+ mbsrtowcs @ stub -version=0x600+ mbsrtowcs_s diff --git a/sdk/lib/crt/msvcrtex.cmake b/sdk/lib/crt/msvcrtex.cmake index 166f5645303..6377cfa688b 100644 --- a/sdk/lib/crt/msvcrtex.cmake +++ b/sdk/lib/crt/msvcrtex.cmake @@ -15,6 +15,7 @@ if(DLL_EXPORT_VERSION LESS 0x600) misc/dbgrpt.cpp stdlib/_invalid_parameter.c stdlib/rand_s.c + wstring/mbrtowc.c wstring/wcrtomb.c ) endif() diff --git a/sdk/lib/crt/wstring/mbrtowc.c b/sdk/lib/crt/wstring/mbrtowc.c new file mode 100644 index 00000000000..7be14f6f3fa --- /dev/null +++ b/sdk/lib/crt/wstring/mbrtowc.c @@ -0,0 +1,69 @@ +/* + * msvcrt.dll mbcs functions + * + * Copyright 1999 Alexandre Julliard + * Copyright 2000 Jon Griffths + * + * 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 + */ + +#include +#include + +/********************************************************************* + * mbrtowc(MSVCRT.@) + */ +size_t CDECL mbrtowc(wchar_t *dst, const char *str, + size_t n, mbstate_t *state) +{ + mbstate_t s = (state ? *state : 0); + char tmpstr[2]; + int len = 0; + + if(dst) + *dst = 0; + + if(!n || !str || !*str) + return 0; + + if(___mb_cur_max_func() == 1) { + tmpstr[len++] = *str; + }else if(!s && isleadbyte((unsigned char)*str)) { + if(n == 1) { + s = (unsigned char)*str; + len = -2; + }else { + tmpstr[0] = str[0]; + tmpstr[1] = str[1]; + len = 2; + } + }else if(!s) { + tmpstr[len++] = *str; + }else { + tmpstr[0] = s; + tmpstr[1] = *str; + len = 2; + s = 0; + } + + if(len > 0) { + if(!MultiByteToWideChar(___lc_codepage_func(), 0, tmpstr, len, dst, dst ? 1 : 0)) + len = -1; + } + + if(state) + *state = s; + return len; +} diff --git a/sdk/lib/crt/wstring/wstring.cmake b/sdk/lib/crt/wstring/wstring.cmake index 8439a6ae181..54b9fd8b290 100644 --- a/sdk/lib/crt/wstring/wstring.cmake +++ b/sdk/lib/crt/wstring/wstring.cmake @@ -11,6 +11,7 @@ list(APPEND LIBCNTPR_WSTRING_SOURCE list(APPEND CRT_WSTRING_SOURCE ${LIBCNTPR_WSTRING_SOURCE} + wstring/mbrtowc.c wstring/wcrtomb.c wstring/wcscoll.c wstring/wcstok.c From dc3b208625603059b6733728a0ef07a921ffd551 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 24 Apr 2024 13:02:03 +0300 Subject: [PATCH 055/182] [RTL/x64] Fix a bug in RtlRaiseException --- sdk/lib/rtl/amd64/except_asm.S | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sdk/lib/rtl/amd64/except_asm.S b/sdk/lib/rtl/amd64/except_asm.S index 52bac1602a7..b8384b6529b 100644 --- a/sdk/lib/rtl/amd64/except_asm.S +++ b/sdk/lib/rtl/amd64/except_asm.S @@ -295,7 +295,7 @@ PUBLIC RtlRaiseException RaiseException: - mov rcx, [rsp + CxP1Home] + mov rcx, [rsp + CONTEXT_FRAME_LENGTH + 8 + P1Home] mov rdx, rsp call ZwRaiseException @@ -305,6 +305,7 @@ RaiseStatus: mov rdx, rsp call RtlRaiseStatus + int HEX(2c) .ENDP From 4bc591c6f0bf659bfd627e2187114847cdf2f5ab Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 25 Mar 2024 19:04:58 +0200 Subject: [PATCH 056/182] [NTOS:KE] Fix NtRaiseException and NtContinue on x64 - Implement KiExceptionExit, which works like KiServiceExit2, but takes an exception frame as 2nd parameter - Add a local exception frame to NtRaiseException and NtContinue, which is needed to exit with a full context on x64 and arm - Use KeContextToTrapFrame again instead of KiSetTrapContext, since we have a proper exception frame now. --- ntoskrnl/include/internal/amd64/ke.h | 6 +++ ntoskrnl/include/internal/i386/ke.h | 25 +++++++++ ntoskrnl/include/internal/ke.h | 15 ------ ntoskrnl/ke/amd64/trap.S | 78 ++++++++++++---------------- ntoskrnl/ke/except.c | 38 ++++++++------ 5 files changed, 87 insertions(+), 75 deletions(-) diff --git a/ntoskrnl/include/internal/amd64/ke.h b/ntoskrnl/include/internal/amd64/ke.h index d0910f5824b..f0c6785ae6f 100644 --- a/ntoskrnl/include/internal/amd64/ke.h +++ b/ntoskrnl/include/internal/amd64/ke.h @@ -480,6 +480,12 @@ VOID KiUserCallbackExit( _In_ PKTRAP_FRAME TrapFrame); +DECLSPEC_NORETURN +VOID +KiExceptionExit( + _In_ PKTRAP_FRAME TrapFrame, + _In_ PKEXCEPTION_FRAME ExceptionFrame); + BOOLEAN KiProcessorFreezeHandler( _In_ PKTRAP_FRAME TrapFrame, diff --git a/ntoskrnl/include/internal/i386/ke.h b/ntoskrnl/include/internal/i386/ke.h index f8ddf1349f8..01cef59b053 100644 --- a/ntoskrnl/include/internal/i386/ke.h +++ b/ntoskrnl/include/internal/i386/ke.h @@ -668,6 +668,31 @@ KiConvertToGuiThread( VOID ); +DECLSPEC_NORETURN +VOID +FASTCALL +KiServiceExit( + IN PKTRAP_FRAME TrapFrame, + IN NTSTATUS Status +); + +DECLSPEC_NORETURN +VOID +FASTCALL +KiServiceExit2( + IN PKTRAP_FRAME TrapFrame +); + +FORCEINLINE +DECLSPEC_NORETURN +VOID +KiExceptionExit( + _In_ PKTRAP_FRAME TrapFrame, + _In_ PKEXCEPTION_FRAME ExceptionFrame) +{ + KiServiceExit2(TrapFrame); +} + // // Global x86 only Kernel data // diff --git a/ntoskrnl/include/internal/ke.h b/ntoskrnl/include/internal/ke.h index aaff743134e..d05d2a24049 100644 --- a/ntoskrnl/include/internal/ke.h +++ b/ntoskrnl/include/internal/ke.h @@ -883,21 +883,6 @@ KiContinue( IN PKTRAP_FRAME TrapFrame ); -DECLSPEC_NORETURN -VOID -FASTCALL -KiServiceExit( - IN PKTRAP_FRAME TrapFrame, - IN NTSTATUS Status -); - -DECLSPEC_NORETURN -VOID -FASTCALL -KiServiceExit2( - IN PKTRAP_FRAME TrapFrame -); - #ifndef _M_AMD64 VOID FASTCALL diff --git a/ntoskrnl/ke/amd64/trap.S b/ntoskrnl/ke/amd64/trap.S index 7d223877934..03e71bf9bc3 100644 --- a/ntoskrnl/ke/amd64/trap.S +++ b/ntoskrnl/ke/amd64/trap.S @@ -944,62 +944,50 @@ NoUserApcPending: /*! * VOID * DECLSPEC_NORETURN - * KiServiceExit(IN PKTRAP_FRAME TrapFrame, IN NTSTATUS Status)); + * KiExceptionExit( + * _In_ PKTRAP_FRAME TrapFrame@, + * _In_ PKEXCEPTION_FRAME ExceptionFrame@); */ -PUBLIC KiServiceExit -.PROC KiServiceExit - .endprolog - - lea rsp, [rcx - MAX_SYSCALL_PARAM_SIZE] - jmp KiSystemServiceExit - -.ENDP - - -/*! - * VOID - * DECLSPEC_NORETURN - * KiServiceExit2(IN PKTRAP_FRAME TrapFrame); - */ -PUBLIC KiServiceExit2 -.PROC KiServiceExit2 - .ENDPROLOG - - // FIXME: this should probably also restore an exception frame - +PUBLIC KiExceptionExit +KiExceptionExit: + + /* Restore registers from exception frame */ + movaps xmm6, [rdx + ExXmm6] + movaps xmm7, [rdx + ExXmm7] + movaps xmm8, [rdx + ExXmm8] + movaps xmm9, [rdx + ExXmm9] + movaps xmm10, [rdx + ExXmm10] + movaps xmm11, [rdx + ExXmm11] + movaps xmm12, [rdx + ExXmm12] + movaps xmm13, [rdx + ExXmm13] + movaps xmm14, [rdx + ExXmm14] + movaps xmm15, [rdx + ExXmm15] + mov rbx, [rdx + ExRbx] + mov rdi, [rdx + ExRdi] + mov rsi, [rdx + ExRsi] + mov r12, [rdx + ExR12] + mov r13, [rdx + ExR13] + mov r14, [rdx + ExR14] + mov r15, [rdx + ExR15] + + /* Point rsp at the trap frame */ mov rsp, rcx -.ENDP + /* Fall through */ +/* + * Internal function. Exits to user-mode with rsp pointing to the trap frame. + * All non-volatile register context must be set up already. + * Used by KiInitializeContextThread to set up the init path for a new thread. + */ PUBLIC KiServiceExit3 .PROC KiServiceExit3 .PUSHFRAME .ALLOCSTACK (KTRAP_FRAME_LENGTH - MachineFrameLength) .ENDPROLOG -#if DBG - /* Get the current IRQL and compare it to the trap frame */ - mov rax, cr8 - cmp byte ptr [rsp + KTRAP_FRAME_PreviousIrql], al - je KiServiceExit2_ok1 - int HEX(2C) - -KiServiceExit2_ok1: - /* Check if this is a user mode exit */ - mov ah, byte ptr [rsp + KTRAP_FRAME_SegCs] - test ah, 1 - jz KiServiceExit2_kernel - - /* Validate that we are at PASSIVE_LEVEL */ - test al, al - jz KiServiceExit2_kernel - int HEX(2C) - -KiServiceExit2_kernel: -#endif - /* Return */ mov rbp, rsp - ExitTrap TF_SAVE_ALL + ExitTrap (TF_SEGMENTS or TF_CHECKUSERAPC) .ENDP diff --git a/ntoskrnl/ke/except.c b/ntoskrnl/ke/except.c index 79062df1e8a..ad36c4555cd 100644 --- a/ntoskrnl/ke/except.c +++ b/ntoskrnl/ke/except.c @@ -28,16 +28,12 @@ KiContinuePreviousModeUser(IN PCONTEXT Context, RtlCopyMemory(&LocalContext, Context, sizeof(CONTEXT)); Context = &LocalContext; -#ifdef _M_AMD64 - KiSetTrapContext(TrapFrame, &LocalContext, UserMode); -#else /* Convert the context into Exception/Trap Frames */ KeContextToTrapFrame(&LocalContext, ExceptionFrame, TrapFrame, LocalContext.ContextFlags, UserMode); -#endif } NTSTATUS @@ -66,16 +62,12 @@ KiContinue(IN PCONTEXT Context, } else { -#ifdef _M_AMD64 - KiSetTrapContext(TrapFrame, Context, KernelMode); -#else /* Convert the context into Exception/Trap Frames */ KeContextToTrapFrame(Context, ExceptionFrame, TrapFrame, Context->ContextFlags, KernelMode); -#endif } } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) @@ -183,8 +175,14 @@ NtRaiseException(IN PEXCEPTION_RECORD ExceptionRecord, NTSTATUS Status; PKTHREAD Thread; PKTRAP_FRAME TrapFrame; +#ifdef _M_IX86 + PKEXCEPTION_FRAME ExceptionFrame = NULL; +#else + KEXCEPTION_FRAME LocalExceptionFrame; + PKEXCEPTION_FRAME ExceptionFrame = &LocalExceptionFrame; +#endif - /* Get trap frame and link previous one*/ + /* Get trap frame and link previous one */ Thread = KeGetCurrentThread(); TrapFrame = Thread->TrapFrame; Thread->TrapFrame = KiGetLinkedTrapFrame(TrapFrame); @@ -197,21 +195,23 @@ NtRaiseException(IN PEXCEPTION_RECORD ExceptionRecord, /* Raise the exception */ Status = KiRaiseException(ExceptionRecord, Context, - NULL, + ExceptionFrame, TrapFrame, FirstChance); if (NT_SUCCESS(Status)) { /* It was handled, so exit restoring all state */ - KiServiceExit2(TrapFrame); + KiExceptionExit(TrapFrame, ExceptionFrame); } +#ifdef _M_IX86 else { /* Exit with error */ KiServiceExit(TrapFrame, Status); } +#endif - /* We don't actually make it here */ + /* Return to the caller */ return Status; } @@ -223,6 +223,12 @@ NtContinue(IN PCONTEXT Context, PKTHREAD Thread; NTSTATUS Status; PKTRAP_FRAME TrapFrame; +#ifdef _M_IX86 + PKEXCEPTION_FRAME ExceptionFrame = NULL; +#else + KEXCEPTION_FRAME LocalExceptionFrame; + PKEXCEPTION_FRAME ExceptionFrame = &LocalExceptionFrame; +#endif /* Get trap frame and link previous one*/ Thread = KeGetCurrentThread(); @@ -230,22 +236,24 @@ NtContinue(IN PCONTEXT Context, Thread->TrapFrame = KiGetLinkedTrapFrame(TrapFrame); /* Continue from this point on */ - Status = KiContinue(Context, NULL, TrapFrame); + Status = KiContinue(Context, ExceptionFrame, TrapFrame); if (NT_SUCCESS(Status)) { /* Check if alert was requested */ if (TestAlert) KeTestAlertThread(Thread->PreviousMode); /* Exit to new trap frame */ - KiServiceExit2(TrapFrame); + KiExceptionExit(TrapFrame, ExceptionFrame); } +#ifdef _M_IX86 else { /* Exit with an error */ KiServiceExit(TrapFrame, Status); } +#endif - /* We don't actually make it here */ + /* Return to the caller */ return Status; } From 5c3b1c78a7a5161687d5ead27251f39f7b108268 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 27 Apr 2024 17:23:02 +0300 Subject: [PATCH 057/182] [NTOS:KE] Improve NtRaiseException and NtContinue - Fix annotations - Don't use KiServiceExit to return to the caller with an error code, instead just return from the function, that is the same thing. - Refactor failure path - Add DPRINTs on failure --- ntoskrnl/ke/except.c | 69 ++++++++++++++++++++------------------------ 1 file changed, 31 insertions(+), 38 deletions(-) diff --git a/ntoskrnl/ke/except.c b/ntoskrnl/ke/except.c index ad36c4555cd..e9a51586355 100644 --- a/ntoskrnl/ke/except.c +++ b/ntoskrnl/ke/except.c @@ -17,9 +17,10 @@ VOID NTAPI -KiContinuePreviousModeUser(IN PCONTEXT Context, - IN PKEXCEPTION_FRAME ExceptionFrame, - IN PKTRAP_FRAME TrapFrame) +KiContinuePreviousModeUser( + _In_ PCONTEXT Context, + _Out_ PKEXCEPTION_FRAME ExceptionFrame, + _Out_ PKTRAP_FRAME TrapFrame) { CONTEXT LocalContext; @@ -86,11 +87,12 @@ KiContinue(IN PCONTEXT Context, NTSTATUS NTAPI -KiRaiseException(IN PEXCEPTION_RECORD ExceptionRecord, - IN PCONTEXT Context, - IN PKEXCEPTION_FRAME ExceptionFrame, - IN PKTRAP_FRAME TrapFrame, - IN BOOLEAN SearchFrames) +KiRaiseException( + _In_ PEXCEPTION_RECORD ExceptionRecord, + _In_ PCONTEXT Context, + _Out_ PKEXCEPTION_FRAME ExceptionFrame, + _Out_ PKTRAP_FRAME TrapFrame, + _In_ BOOLEAN SearchFrames) { KPROCESSOR_MODE PreviousMode = KeGetPreviousMode(); CONTEXT LocalContext; @@ -168,9 +170,10 @@ KiRaiseException(IN PEXCEPTION_RECORD ExceptionRecord, NTSTATUS NTAPI -NtRaiseException(IN PEXCEPTION_RECORD ExceptionRecord, - IN PCONTEXT Context, - IN BOOLEAN FirstChance) +NtRaiseException( + _In_ PEXCEPTION_RECORD ExceptionRecord, + _In_ PCONTEXT Context, + _In_ BOOLEAN FirstChance) { NTSTATUS Status; PKTHREAD Thread; @@ -198,27 +201,21 @@ NtRaiseException(IN PEXCEPTION_RECORD ExceptionRecord, ExceptionFrame, TrapFrame, FirstChance); - if (NT_SUCCESS(Status)) + if (!NT_SUCCESS(Status)) { - /* It was handled, so exit restoring all state */ - KiExceptionExit(TrapFrame, ExceptionFrame); + DPRINT1("KiRaiseException failed. Status = 0x%lx\n", Status); + return Status; } -#ifdef _M_IX86 - else - { - /* Exit with error */ - KiServiceExit(TrapFrame, Status); - } -#endif - /* Return to the caller */ - return Status; + /* It was handled, so exit restoring all state */ + KiExceptionExit(TrapFrame, ExceptionFrame); } NTSTATUS NTAPI -NtContinue(IN PCONTEXT Context, - IN BOOLEAN TestAlert) +NtContinue( + _In_ PCONTEXT Context, + _In_ BOOLEAN TestAlert) { PKTHREAD Thread; NTSTATUS Status; @@ -237,24 +234,20 @@ NtContinue(IN PCONTEXT Context, /* Continue from this point on */ Status = KiContinue(Context, ExceptionFrame, TrapFrame); - if (NT_SUCCESS(Status)) + if (!NT_SUCCESS(Status)) { - /* Check if alert was requested */ - if (TestAlert) KeTestAlertThread(Thread->PreviousMode); - - /* Exit to new trap frame */ - KiExceptionExit(TrapFrame, ExceptionFrame); + DPRINT1("KiContinue failed. Status = 0x%lx\n", Status); + return Status; } -#ifdef _M_IX86 - else + + /* Check if alert was requested */ + if (TestAlert) { - /* Exit with an error */ - KiServiceExit(TrapFrame, Status); + KeTestAlertThread(Thread->PreviousMode); } -#endif - /* Return to the caller */ - return Status; + /* Exit to new context */ + KiExceptionExit(TrapFrame, ExceptionFrame); } /* EOF */ From db93cb17096abbd5d0ba6e3288f66021c0a51131 Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Wed, 1 May 2024 14:17:08 +0200 Subject: [PATCH 058/182] [SHELL32][VFDLIB] Handle size check of CMINVOKECOMMANDINFOEX correctly (#6767) Older NT versions (< IE4) had a smaller CMINVOKECOMMANDINFOEX struct. Places where 3rd-party code passes in the struct needs to accept the small size. --- dll/win32/shell32/CShellLink.cpp | 5 +++-- modules/rosapps/lib/vfdlib/vfdshmenu.cpp | 6 +++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/dll/win32/shell32/CShellLink.cpp b/dll/win32/shell32/CShellLink.cpp index f83c6a9654e..3175b21f34b 100644 --- a/dll/win32/shell32/CShellLink.cpp +++ b/dll/win32/shell32/CShellLink.cpp @@ -2595,9 +2595,10 @@ HRESULT CShellLink::DoOpen(LPCMINVOKECOMMANDINFO lpici) HRESULT hr; LPWSTR args = NULL; LPWSTR path = strdupW(m_sPath); + BOOL unicode = lpici->cbSize >= FIELD_OFFSET(CMINVOKECOMMANDINFOEX, ptInvoke) && + (lpici->fMask & CMIC_MASK_UNICODE); - if ( lpici->cbSize == sizeof(CMINVOKECOMMANDINFOEX) && - (lpici->fMask & CMIC_MASK_UNICODE) ) + if (unicode) { LPCMINVOKECOMMANDINFOEX iciex = (LPCMINVOKECOMMANDINFOEX)lpici; SIZE_T len = 2; diff --git a/modules/rosapps/lib/vfdlib/vfdshmenu.cpp b/modules/rosapps/lib/vfdlib/vfdshmenu.cpp index 005a6e352d7..35a67142659 100644 --- a/modules/rosapps/lib/vfdlib/vfdshmenu.cpp +++ b/modules/rosapps/lib/vfdlib/vfdshmenu.cpp @@ -339,12 +339,16 @@ STDMETHODIMP CVfdShExt::InvokeCommand( DWORD ret; CMINVOKECOMMANDINFOEX *excmi = (CMINVOKECOMMANDINFOEX *)lpcmi; +#ifdef __REACTOS__ + unicode = lpcmi->cbSize >= FIELD_OFFSET(CMINVOKECOMMANDINFOEX, ptInvoke) && + (lpcmi->fMask & CMIC_MASK_UNICODE); +#else if (lpcmi->cbSize >= sizeof(CMINVOKECOMMANDINFOEX) && (lpcmi->fMask & CMIC_MASK_UNICODE)) { unicode = TRUE; } - +#endif if (!unicode && HIWORD(lpcmi->lpVerb)) { From 515f998f0dfe19ef0a158d26cb61b58b9a0def7b Mon Sep 17 00:00:00 2001 From: Doug Lyons Date: Thu, 2 May 2024 03:43:41 -0500 Subject: [PATCH 059/182] [NTUSER] Fix co_IntSetParent when calling on itself (#6365) * Patch by @I_Kill_Bugs. * Provide explanation for change. CORE-9386 --- win32ss/user/ntuser/window.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/win32ss/user/ntuser/window.c b/win32ss/user/ntuser/window.c index ea1d33624c3..ea67f811073 100644 --- a/win32ss/user/ntuser/window.c +++ b/win32ss/user/ntuser/window.c @@ -1218,29 +1218,29 @@ co_IntSetParent(PWND Wnd, PWND WndNewParent) if (WndOldParent) UserReferenceObject(WndOldParent); /* Caller must deref */ - if (WndNewParent != WndOldParent) - { - /* Unlink the window from the siblings list */ - IntUnlinkWindow(Wnd); - Wnd->ExStyle2 &= ~WS_EX2_LINKED; + /* Even if WndNewParent == WndOldParent continue because the + * child window (Wnd) should be moved to the top of the z-order */ - /* Set the new parent */ - WndSetParent(Wnd, WndNewParent); + /* Unlink the window from the siblings list */ + IntUnlinkWindow(Wnd); + Wnd->ExStyle2 &= ~WS_EX2_LINKED; - if ( Wnd->style & WS_CHILD && - Wnd->spwndOwner && - Wnd->spwndOwner->ExStyle & WS_EX_TOPMOST ) - { - ERR("SetParent Top Most from Pop up!\n"); - Wnd->ExStyle |= WS_EX_TOPMOST; - } + /* Set the new parent */ + WndSetParent(Wnd, WndNewParent); - /* Link the window with its new siblings */ - IntLinkHwnd( Wnd, - ((0 == (Wnd->ExStyle & WS_EX_TOPMOST) && - UserIsDesktopWindow(WndNewParent) ) ? HWND_TOP : HWND_TOPMOST ) ); + if (Wnd->style & WS_CHILD && + Wnd->spwndOwner && + Wnd->spwndOwner->ExStyle & WS_EX_TOPMOST) + { + ERR("SetParent Top Most from Pop up\n"); + Wnd->ExStyle |= WS_EX_TOPMOST; } + /* Link the window with its new siblings */ + IntLinkHwnd(Wnd, + ((0 == (Wnd->ExStyle & WS_EX_TOPMOST) && + UserIsDesktopWindow(WndNewParent)) ? HWND_TOP : HWND_TOPMOST)); + if ( WndNewParent == co_GetDesktopWindow(Wnd) && !(Wnd->style & WS_CLIPSIBLINGS) ) { From ef80b3dde48dc399fc4483ef897325afe77275f3 Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Thu, 2 May 2024 17:56:28 +0200 Subject: [PATCH 060/182] [SDK] ReleaseCComPtrExpectZero should print the relevant file:line (#6772) ReleaseCComPtrExpectZero currently always prints the same line from shellutils.h in the warning which is not very useful. A macro is required for __FILE__ to be correct. --- sdk/include/reactos/shellutils.h | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/sdk/include/reactos/shellutils.h b/sdk/include/reactos/shellutils.h index c678e3382c4..8eed78e33d6 100644 --- a/sdk/include/reactos/shellutils.h +++ b/sdk/include/reactos/shellutils.h @@ -227,25 +227,23 @@ class CComDebugObject : public Base #endif template -void ReleaseCComPtrExpectZero(CComPtr& cptr, BOOL forceRelease = FALSE) +ULONG ReleaseCComPtrExpectZeroHelper(const char *file, UINT line, CComPtr& cptr, BOOL forceRelease = FALSE) { + ULONG r = 0; if (cptr.p != NULL) { T *raw = cptr.Detach(); - int nrc = raw->Release(); + int nrc = r = raw->Release(); if (nrc > 0) + Win32DbgPrint(file, line, "WARNING: Unexpected RefCount > 0 (%d)\n", nrc); + while (nrc > 0 && forceRelease) { - DbgPrint("WARNING: Unexpected RefCount > 0 (%d)!\n", nrc); - if (forceRelease) - { - while (nrc > 0) - { - nrc = raw->Release(); - } - } + nrc = raw->Release(); } } + return r; } +#define ReleaseCComPtrExpectZero(...) ReleaseCComPtrExpectZeroHelper(__FILE__, __LINE__, __VA_ARGS__) template HRESULT inline ShellDebugObjectCreator(REFIID riid, R ** ppv) From 07d55ce1cfd51cc854d9258e79b52297d8538286 Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Thu, 2 May 2024 18:00:12 +0200 Subject: [PATCH 061/182] [SHELL32] CFSFolder parsing must only apply bind data to the last item (#6794) When IShellFolder::ParseDisplayName is asked to parse multiple path elements, the IFileSystemBindData (if any) only applies to the last item. The other elements are always folders. --- dll/win32/shell32/folders/CFSFolder.cpp | 9 +++++---- dll/win32/shell32/folders/CFSFolder.h | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/dll/win32/shell32/folders/CFSFolder.cpp b/dll/win32/shell32/folders/CFSFolder.cpp index 2ec03d18298..7c2b11160dc 100644 --- a/dll/win32/shell32/folders/CFSFolder.cpp +++ b/dll/win32/shell32/folders/CFSFolder.cpp @@ -685,7 +685,7 @@ HRESULT SHELL32_GetFSItemAttributes(IShellFolder * psf, LPCITEMIDLIST pidl, LPDW HRESULT CFSFolder::_ParseSimple( _In_ LPOLESTR lpszDisplayName, - _Out_ WIN32_FIND_DATAW *pFind, + _Inout_ WIN32_FIND_DATAW *pFind, _Out_ LPITEMIDLIST *ppidl) { HRESULT hr; @@ -693,6 +693,8 @@ HRESULT CFSFolder::_ParseSimple( *ppidl = NULL; + const DWORD finalattr = pFind->dwFileAttributes; + const DWORD finalsizelo = pFind->nFileSizeLow; LPITEMIDLIST pidl; for (hr = S_OK; SUCCEEDED(hr); hr = SHILAppend(pidl, ppidl)) { @@ -700,9 +702,8 @@ HRESULT CFSFolder::_ParseSimple( if (hr != S_OK) break; - if (pchNext) - pFind->dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY; - + pFind->dwFileAttributes = pchNext ? FILE_ATTRIBUTE_DIRECTORY : finalattr; + pFind->nFileSizeLow = pchNext ? 0 : finalsizelo; pidl = _ILCreateFromFindDataW(pFind); if (!pidl) { diff --git a/dll/win32/shell32/folders/CFSFolder.h b/dll/win32/shell32/folders/CFSFolder.h index d74c7d915a2..e3db017578d 100644 --- a/dll/win32/shell32/folders/CFSFolder.h +++ b/dll/win32/shell32/folders/CFSFolder.h @@ -36,7 +36,7 @@ class CFSFolder : HRESULT _ParseSimple( _In_ LPOLESTR lpszDisplayName, - _Out_ WIN32_FIND_DATAW *pFind, + _Inout_ WIN32_FIND_DATAW *pFind, _Out_ LPITEMIDLIST *ppidl); BOOL _GetFindDataFromName(_In_ LPCWSTR pszName, _Out_ WIN32_FIND_DATAW *pFind); HRESULT _CreateIDListFromName(LPCWSTR pszName, DWORD attrs, IBindCtx *pbc, LPITEMIDLIST *ppidl); From bbb3b00398822b1c6853acce1c82d5aeb09b6012 Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Thu, 2 May 2024 19:01:38 +0200 Subject: [PATCH 062/182] [ZIPFLDR] Don't handle DFM_INVOKECOMMANDEX if you need DFM_INVOKECOMMAND (#6766) ZipFldr responds incorrectly to DFM_INVOKECOMMANDEX, it needs to return E_NOTIMPL to get the DFM_INVOKECOMMAND message. --- dll/shellext/zipfldr/CZipFolder.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/dll/shellext/zipfldr/CZipFolder.hpp b/dll/shellext/zipfldr/CZipFolder.hpp index 09a3f84ff69..cb98f68deb5 100644 --- a/dll/shellext/zipfldr/CZipFolder.hpp +++ b/dll/shellext/zipfldr/CZipFolder.hpp @@ -380,7 +380,6 @@ class CZipFolder : ici.lpVerb = MAKEINTRESOURCEA(wParam); return spContextMenu->InvokeCommand(&ici); } - case DFM_INVOKECOMMANDEX: case DFM_GETDEFSTATICID: // Required for Windows 7 to pick a default return S_FALSE; } From c04377bf0392f7162c42c738dc25ad618a172ae3 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 25 Apr 2024 16:46:08 +0300 Subject: [PATCH 063/182] [KERNEL32] Disable some warnings for wine code --- dll/win32/kernel32/CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/dll/win32/kernel32/CMakeLists.txt b/dll/win32/kernel32/CMakeLists.txt index c9d491d4837..2f3fe360dad 100644 --- a/dll/win32/kernel32/CMakeLists.txt +++ b/dll/win32/kernel32/CMakeLists.txt @@ -95,6 +95,12 @@ list(APPEND SOURCE if(MSVC) # Disable warning C4146: unary minus operator applied to unsigned type, result still unsigned set_source_files_properties(wine/res.c PROPERTIES COMPILE_FLAGS /wd4146) + + # Disable warning C4267: 'initializing': conversion from 'size_t' to 'DWORD', possible loss of data + set_source_files_properties(winnls/string/locale.c PROPERTIES COMPILE_FLAGS /wd4267) +else() + # Disable warning: 'variable' defined but not used + set_source_files_properties(winnls/string/locale.c PROPERTIES COMPILE_FLAGS -Wno-unused-variable) endif() if(ARCH STREQUAL "i386") From c9087160945a766e46c37879e4f428ec381c254e Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 25 Apr 2024 19:10:35 +0300 Subject: [PATCH 064/182] [KERNEL32] actctx.c: reduce diff to wine-1.7.55 --- dll/win32/kernel32/wine/actctx.c | 110 +++++++++++++++++++++++++++++-- 1 file changed, 106 insertions(+), 4 deletions(-) diff --git a/dll/win32/kernel32/wine/actctx.c b/dll/win32/kernel32/wine/actctx.c index 369f0c75fea..98adc5c1a25 100644 --- a/dll/win32/kernel32/wine/actctx.c +++ b/dll/win32/kernel32/wine/actctx.c @@ -10,7 +10,7 @@ * Samuel Serapión */ -/* Partly synched with Wine 1.7.17 */ +/* Synched with Wine 1.7.55 */ #include @@ -18,8 +18,6 @@ #include DEBUG_CHANNEL(actctx); -#define ACTCTX_FAKE_HANDLE ((HANDLE) 0xf00baa) - /*********************************************************************** * CreateActCtxA (KERNEL32.@) * @@ -116,6 +114,90 @@ HANDLE WINAPI CreateActCtxW(PCACTCTXW pActCtx) return hActCtx; } +#ifndef __REACTOS__ +/*********************************************************************** + * ActivateActCtx (KERNEL32.@) + * + * Activate an activation context. + */ +BOOL WINAPI ActivateActCtx(HANDLE hActCtx, ULONG_PTR *ulCookie) +{ + NTSTATUS status; + + if ((status = RtlActivateActivationContext( 0, hActCtx, ulCookie ))) + { + SetLastError(RtlNtStatusToDosError(status)); + return FALSE; + } + return TRUE; +} + +/*********************************************************************** + * DeactivateActCtx (KERNEL32.@) + * + * Deactivate an activation context. + */ +BOOL WINAPI DeactivateActCtx(DWORD dwFlags, ULONG_PTR ulCookie) +{ + RtlDeactivateActivationContext( dwFlags, ulCookie ); + return TRUE; +} + +/*********************************************************************** + * GetCurrentActCtx (KERNEL32.@) + * + * Get the current activation context. + */ +BOOL WINAPI GetCurrentActCtx(HANDLE* phActCtx) +{ + NTSTATUS status; + + if ((status = RtlGetActiveActivationContext(phActCtx))) + { + SetLastError(RtlNtStatusToDosError(status)); + return FALSE; + } + return TRUE; +} + +/*********************************************************************** + * AddRefActCtx (KERNEL32.@) + * + * Add a reference to an activation context. + */ +void WINAPI AddRefActCtx(HANDLE hActCtx) +{ + RtlAddRefActivationContext(hActCtx); +} + +/*********************************************************************** + * ReleaseActCtx (KERNEL32.@) + * + * Release a reference to an activation context. + */ +void WINAPI ReleaseActCtx(HANDLE hActCtx) +{ + RtlReleaseActivationContext(hActCtx); +} + +/*********************************************************************** + * ZombifyActCtx (KERNEL32.@) + * + * Deactivate context without releasing it. + */ +BOOL WINAPI ZombifyActCtx(HANDLE hActCtx) +{ + NTSTATUS status; + + if ((status = RtlZombifyActivationContext(hActCtx))) + { + SetLastError(RtlNtStatusToDosError(status)); + return FALSE; + } + return TRUE; +} +#endif // !__REACTOS__ + /*********************************************************************** * FindActCtxSectionStringA (KERNEL32.@) * @@ -195,4 +277,24 @@ BOOL WINAPI FindActCtxSectionGuid(DWORD dwFlags, const GUID* lpExtGuid, return TRUE; } -/* EOF */ +#ifndef __REACTOS__ +/*********************************************************************** + * QueryActCtxW (KERNEL32.@) + * + * Get information about an activation context. + */ +BOOL WINAPI QueryActCtxW(DWORD dwFlags, HANDLE hActCtx, PVOID pvSubInst, + ULONG ulClass, PVOID pvBuff, SIZE_T cbBuff, + SIZE_T *pcbLen) +{ + NTSTATUS status; + + if ((status = RtlQueryInformationActivationContext( dwFlags, hActCtx, pvSubInst, ulClass, + pvBuff, cbBuff, pcbLen ))) + { + SetLastError(RtlNtStatusToDosError(status)); + return FALSE; + } + return TRUE; +} +#endif // !__REACTOS__ From 2d4d5b635992f4edd5bf50ad0ecea98418e97f29 Mon Sep 17 00:00:00 2001 From: winesync Date: Thu, 25 Apr 2024 19:21:47 +0300 Subject: [PATCH 065/182] [WINESYNC] kernel32: Add TRACE to SetCommState. Signed-off-by: Alex Henrie Signed-off-by: Alexandre Julliard wine commit id 60226ee37de52b470b98efa13f9a5e065cedc77b by Alex Henrie --- dll/win32/kernel32/wine/comm.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dll/win32/kernel32/wine/comm.c b/dll/win32/kernel32/wine/comm.c index 3e6f20d2f0a..5d8035d4abb 100644 --- a/dll/win32/kernel32/wine/comm.c +++ b/dll/win32/kernel32/wine/comm.c @@ -812,6 +812,8 @@ BOOL WINAPI SetCommState( HANDLE handle, LPDCB lpdcb) SERIAL_CHARS sc; DWORD dwBytesReturned; + TRACE("handle %p, ptr %p\n", handle, lpdcb); + if (lpdcb == NULL) { SetLastError(ERROR_INVALID_PARAMETER); From 30160608839795d8f2d80531c25509f0cecdf227 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 25 Apr 2024 15:25:19 +0300 Subject: [PATCH 066/182] [KERNEL32] Rename lang.c to locale.c as in wine --- dll/win32/kernel32/CMakeLists.txt | 2 +- dll/win32/kernel32/winnls/string/{lang.c => locale.c} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename dll/win32/kernel32/winnls/string/{lang.c => locale.c} (100%) diff --git a/dll/win32/kernel32/CMakeLists.txt b/dll/win32/kernel32/CMakeLists.txt index 2f3fe360dad..ba56d1ffeee 100644 --- a/dll/win32/kernel32/CMakeLists.txt +++ b/dll/win32/kernel32/CMakeLists.txt @@ -85,7 +85,7 @@ list(APPEND SOURCE winnls/string/fold.c winnls/string/format_msg.c winnls/string/japanese.c - winnls/string/lang.c + winnls/string/locale.c winnls/string/lcformat.c winnls/string/lstring.c winnls/string/nls.c diff --git a/dll/win32/kernel32/winnls/string/lang.c b/dll/win32/kernel32/winnls/string/locale.c similarity index 100% rename from dll/win32/kernel32/winnls/string/lang.c rename to dll/win32/kernel32/winnls/string/locale.c From 98c43792916260df611a2927206a3c9e74e3f00d Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 25 Apr 2024 16:26:47 +0300 Subject: [PATCH 067/182] [KERNEL32] locale.c: Move functions to match wine order --- dll/win32/kernel32/winnls/string/locale.c | 1281 +++++++++++---------- 1 file changed, 643 insertions(+), 638 deletions(-) diff --git a/dll/win32/kernel32/winnls/string/locale.c b/dll/win32/kernel32/winnls/string/locale.c index 1d3fdbe4a1b..c19371fde53 100644 --- a/dll/win32/kernel32/winnls/string/locale.c +++ b/dll/win32/kernel32/winnls/string/locale.c @@ -32,6 +32,9 @@ DEBUG_CHANNEL(nls); #include "japanese.h" #endif +INT WINAPI CompareStringEx(LPCWSTR locale, DWORD flags, LPCWSTR str1, INT len1, + LPCWSTR str2, INT len2, LPNLSVERSIONINFO version, LPVOID reserved, LPARAM lParam); + #undef WINVER #define WINVER DLL_EXPORT_VERSION @@ -887,6 +890,21 @@ INT WINAPI LCIDToLocaleName( LCID lcid, LPWSTR name, INT count, DWORD flags ) } #endif +/****************************************************************************** + * get_locale_registry_value + * + * Gets the registry value name and cache for a given lctype. + */ +static struct registry_value *get_locale_registry_value( DWORD lctype ) +{ + int i; + for (i=0; i < sizeof(registry_values)/sizeof(registry_values[0]); i++) + if (registry_values[i].lctype == lctype) + return ®istry_values[i]; + return NULL; +} + + /****************************************************************************** * get_registry_locale_info * @@ -1086,20 +1104,6 @@ static int get_value_base_by_lctype( LCTYPE lctype ) return lctype == LOCALE_ILANGUAGE || lctype == LOCALE_IDEFAULTLANGUAGE ? 16 : 10; } -/****************************************************************************** - * get_locale_registry_value - * - * Gets the registry value name and cache for a given lctype. - */ -static struct registry_value *get_locale_registry_value( DWORD lctype ) -{ - int i; - for (i=0; i < sizeof(registry_values)/sizeof(registry_values[0]); i++) - if (registry_values[i].lctype == lctype) - return ®istry_values[i]; - return NULL; -} - /****************************************************************************** * GetLocaleInfoW (KERNEL32.@) * @@ -2618,6 +2622,17 @@ INT WINAPI FoldStringW(DWORD dwFlags, LPCWSTR src, INT srclen, return ret; } +/****************************************************************************** + * CompareStringW (KERNEL32.@) + * + * See CompareStringA. + */ +INT WINAPI CompareStringW(LCID lcid, DWORD flags, + LPCWSTR str1, INT len1, LPCWSTR str2, INT len2) +{ + return CompareStringEx(NULL, flags, str1, len1, str2, len2, NULL, NULL, 0); +} + /****************************************************************************** * CompareStringEx (KERNEL32.@) */ @@ -2663,17 +2678,6 @@ INT WINAPI CompareStringEx(LPCWSTR locale, DWORD flags, LPCWSTR str1, INT len1, return CSTR_EQUAL; } -/****************************************************************************** - * CompareStringW (KERNEL32.@) - * - * See CompareStringA. - */ -INT WINAPI CompareStringW(LCID lcid, DWORD flags, - LPCWSTR str1, INT len1, LPCWSTR str2, INT len2) -{ - return CompareStringEx(NULL, flags, str1, len1, str2, len2, NULL, NULL, 0); -} - /****************************************************************************** * CompareStringA (KERNEL32.@) * @@ -3199,344 +3203,27 @@ static BOOL NLS_EnumLanguageGroupLocales(ENUMLANGUAGEGROUPLOCALE_CALLBACKS *lpPr return TRUE; } -enum locationkind { - LOCATION_NATION = 0, - LOCATION_REGION, - LOCATION_BOTH -}; +/****************************************************************************** + * EnumLanguageGroupLocalesA (KERNEL32.@) + * + * Call a users function for every locale in a language group available on the system. + * + * PARAMS + * pLangGrpLcEnumProc [I] Callback function to call for each locale + * lgrpid [I] Language group (LGRPID_ values from "winnls.h") + * dwFlags [I] Reserved, set to 0 + * lParam [I] User parameter to pass to pLangGrpLcEnumProc + * + * RETURNS + * Success: TRUE. + * Failure: FALSE. Use GetLastError() to determine the cause. + */ +BOOL WINAPI EnumLanguageGroupLocalesA(LANGGROUPLOCALE_ENUMPROCA pLangGrpLcEnumProc, + LGRPID lgrpid, DWORD dwFlags, LONG_PTR lParam) +{ + ENUMLANGUAGEGROUPLOCALE_CALLBACKS callbacks; -struct geoinfo_t { - GEOID id; - WCHAR iso2W[3]; - WCHAR iso3W[4]; - GEOID parent; - INT uncode; - enum locationkind kind; -}; - -static const struct geoinfo_t geoinfodata[] = { - { 2, {'A','G',0}, {'A','T','G',0}, 10039880, 28 }, /* Antigua and Barbuda */ - { 3, {'A','F',0}, {'A','F','G',0}, 47614, 4 }, /* Afghanistan */ - { 4, {'D','Z',0}, {'D','Z','A',0}, 42487, 12 }, /* Algeria */ - { 5, {'A','Z',0}, {'A','Z','E',0}, 47611, 31 }, /* Azerbaijan */ - { 6, {'A','L',0}, {'A','L','B',0}, 47610, 8 }, /* Albania */ - { 7, {'A','M',0}, {'A','R','M',0}, 47611, 51 }, /* Armenia */ - { 8, {'A','D',0}, {'A','N','D',0}, 47610, 20 }, /* Andorra */ - { 9, {'A','O',0}, {'A','G','O',0}, 42484, 24 }, /* Angola */ - { 10, {'A','S',0}, {'A','S','M',0}, 26286, 16 }, /* American Samoa */ - { 11, {'A','R',0}, {'A','R','G',0}, 31396, 32 }, /* Argentina */ - { 12, {'A','U',0}, {'A','U','S',0}, 10210825, 36 }, /* Australia */ - { 14, {'A','T',0}, {'A','U','T',0}, 10210824, 40 }, /* Austria */ - { 17, {'B','H',0}, {'B','H','R',0}, 47611, 48 }, /* Bahrain */ - { 18, {'B','B',0}, {'B','R','B',0}, 10039880, 52 }, /* Barbados */ - { 19, {'B','W',0}, {'B','W','A',0}, 10039883, 72 }, /* Botswana */ - { 20, {'B','M',0}, {'B','M','U',0}, 23581, 60 }, /* Bermuda */ - { 21, {'B','E',0}, {'B','E','L',0}, 10210824, 56 }, /* Belgium */ - { 22, {'B','S',0}, {'B','H','S',0}, 10039880, 44 }, /* Bahamas, The */ - { 23, {'B','D',0}, {'B','G','D',0}, 47614, 50 }, /* Bangladesh */ - { 24, {'B','Z',0}, {'B','L','Z',0}, 27082, 84 }, /* Belize */ - { 25, {'B','A',0}, {'B','I','H',0}, 47610, 70 }, /* Bosnia and Herzegovina */ - { 26, {'B','O',0}, {'B','O','L',0}, 31396, 68 }, /* Bolivia */ - { 27, {'M','M',0}, {'M','M','R',0}, 47599, 104 }, /* Myanmar */ - { 28, {'B','J',0}, {'B','E','N',0}, 42483, 204 }, /* Benin */ - { 29, {'B','Y',0}, {'B','L','R',0}, 47609, 112 }, /* Belarus */ - { 30, {'S','B',0}, {'S','L','B',0}, 20900, 90 }, /* Solomon Islands */ - { 32, {'B','R',0}, {'B','R','A',0}, 31396, 76 }, /* Brazil */ - { 34, {'B','T',0}, {'B','T','N',0}, 47614, 64 }, /* Bhutan */ - { 35, {'B','G',0}, {'B','G','R',0}, 47609, 100 }, /* Bulgaria */ - { 37, {'B','N',0}, {'B','R','N',0}, 47599, 96 }, /* Brunei */ - { 38, {'B','I',0}, {'B','D','I',0}, 47603, 108 }, /* Burundi */ - { 39, {'C','A',0}, {'C','A','N',0}, 23581, 124 }, /* Canada */ - { 40, {'K','H',0}, {'K','H','M',0}, 47599, 116 }, /* Cambodia */ - { 41, {'T','D',0}, {'T','C','D',0}, 42484, 148 }, /* Chad */ - { 42, {'L','K',0}, {'L','K','A',0}, 47614, 144 }, /* Sri Lanka */ - { 43, {'C','G',0}, {'C','O','G',0}, 42484, 178 }, /* Congo */ - { 44, {'C','D',0}, {'C','O','D',0}, 42484, 180 }, /* Congo (DRC) */ - { 45, {'C','N',0}, {'C','H','N',0}, 47600, 156 }, /* China */ - { 46, {'C','L',0}, {'C','H','L',0}, 31396, 152 }, /* Chile */ - { 49, {'C','M',0}, {'C','M','R',0}, 42484, 120 }, /* Cameroon */ - { 50, {'K','M',0}, {'C','O','M',0}, 47603, 174 }, /* Comoros */ - { 51, {'C','O',0}, {'C','O','L',0}, 31396, 170 }, /* Colombia */ - { 54, {'C','R',0}, {'C','R','I',0}, 27082, 188 }, /* Costa Rica */ - { 55, {'C','F',0}, {'C','A','F',0}, 42484, 140 }, /* Central African Republic */ - { 56, {'C','U',0}, {'C','U','B',0}, 10039880, 192 }, /* Cuba */ - { 57, {'C','V',0}, {'C','P','V',0}, 42483, 132 }, /* Cape Verde */ - { 59, {'C','Y',0}, {'C','Y','P',0}, 47611, 196 }, /* Cyprus */ - { 61, {'D','K',0}, {'D','N','K',0}, 10039882, 208 }, /* Denmark */ - { 62, {'D','J',0}, {'D','J','I',0}, 47603, 262 }, /* Djibouti */ - { 63, {'D','M',0}, {'D','M','A',0}, 10039880, 212 }, /* Dominica */ - { 65, {'D','O',0}, {'D','O','M',0}, 10039880, 214 }, /* Dominican Republic */ - { 66, {'E','C',0}, {'E','C','U',0}, 31396, 218 }, /* Ecuador */ - { 67, {'E','G',0}, {'E','G','Y',0}, 42487, 818 }, /* Egypt */ - { 68, {'I','E',0}, {'I','R','L',0}, 10039882, 372 }, /* Ireland */ - { 69, {'G','Q',0}, {'G','N','Q',0}, 42484, 226 }, /* Equatorial Guinea */ - { 70, {'E','E',0}, {'E','S','T',0}, 10039882, 233 }, /* Estonia */ - { 71, {'E','R',0}, {'E','R','I',0}, 47603, 232 }, /* Eritrea */ - { 72, {'S','V',0}, {'S','L','V',0}, 27082, 222 }, /* El Salvador */ - { 73, {'E','T',0}, {'E','T','H',0}, 47603, 231 }, /* Ethiopia */ - { 75, {'C','Z',0}, {'C','Z','E',0}, 47609, 203 }, /* Czech Republic */ - { 77, {'F','I',0}, {'F','I','N',0}, 10039882, 246 }, /* Finland */ - { 78, {'F','J',0}, {'F','J','I',0}, 20900, 242 }, /* Fiji Islands */ - { 80, {'F','M',0}, {'F','S','M',0}, 21206, 583 }, /* Micronesia */ - { 81, {'F','O',0}, {'F','R','O',0}, 10039882, 234 }, /* Faroe Islands */ - { 84, {'F','R',0}, {'F','R','A',0}, 10210824, 250 }, /* France */ - { 86, {'G','M',0}, {'G','M','B',0}, 42483, 270 }, /* Gambia, The */ - { 87, {'G','A',0}, {'G','A','B',0}, 42484, 266 }, /* Gabon */ - { 88, {'G','E',0}, {'G','E','O',0}, 47611, 268 }, /* Georgia */ - { 89, {'G','H',0}, {'G','H','A',0}, 42483, 288 }, /* Ghana */ - { 90, {'G','I',0}, {'G','I','B',0}, 47610, 292 }, /* Gibraltar */ - { 91, {'G','D',0}, {'G','R','D',0}, 10039880, 308 }, /* Grenada */ - { 93, {'G','L',0}, {'G','R','L',0}, 23581, 304 }, /* Greenland */ - { 94, {'D','E',0}, {'D','E','U',0}, 10210824, 276 }, /* Germany */ - { 98, {'G','R',0}, {'G','R','C',0}, 47610, 300 }, /* Greece */ - { 99, {'G','T',0}, {'G','T','M',0}, 27082, 320 }, /* Guatemala */ - { 100, {'G','N',0}, {'G','I','N',0}, 42483, 324 }, /* Guinea */ - { 101, {'G','Y',0}, {'G','U','Y',0}, 31396, 328 }, /* Guyana */ - { 103, {'H','T',0}, {'H','T','I',0}, 10039880, 332 }, /* Haiti */ - { 104, {'H','K',0}, {'H','K','G',0}, 47600, 344 }, /* Hong Kong S.A.R. */ - { 106, {'H','N',0}, {'H','N','D',0}, 27082, 340 }, /* Honduras */ - { 108, {'H','R',0}, {'H','R','V',0}, 47610, 191 }, /* Croatia */ - { 109, {'H','U',0}, {'H','U','N',0}, 47609, 348 }, /* Hungary */ - { 110, {'I','S',0}, {'I','S','L',0}, 10039882, 352 }, /* Iceland */ - { 111, {'I','D',0}, {'I','D','N',0}, 47599, 360 }, /* Indonesia */ - { 113, {'I','N',0}, {'I','N','D',0}, 47614, 356 }, /* India */ - { 114, {'I','O',0}, {'I','O','T',0}, 39070, 86 }, /* British Indian Ocean Territory */ - { 116, {'I','R',0}, {'I','R','N',0}, 47614, 364 }, /* Iran */ - { 117, {'I','L',0}, {'I','S','R',0}, 47611, 376 }, /* Israel */ - { 118, {'I','T',0}, {'I','T','A',0}, 47610, 380 }, /* Italy */ - { 119, {'C','I',0}, {'C','I','V',0}, 42483, 384 }, /* Côte d'Ivoire */ - { 121, {'I','Q',0}, {'I','R','Q',0}, 47611, 368 }, /* Iraq */ - { 122, {'J','P',0}, {'J','P','N',0}, 47600, 392 }, /* Japan */ - { 124, {'J','M',0}, {'J','A','M',0}, 10039880, 388 }, /* Jamaica */ - { 125, {'S','J',0}, {'S','J','M',0}, 10039882, 744 }, /* Jan Mayen */ - { 126, {'J','O',0}, {'J','O','R',0}, 47611, 400 }, /* Jordan */ - { 127, {'X','X',0}, {'X','X',0}, 161832256 }, /* Johnston Atoll */ - { 129, {'K','E',0}, {'K','E','N',0}, 47603, 404 }, /* Kenya */ - { 130, {'K','G',0}, {'K','G','Z',0}, 47590, 417 }, /* Kyrgyzstan */ - { 131, {'K','P',0}, {'P','R','K',0}, 47600, 408 }, /* North Korea */ - { 133, {'K','I',0}, {'K','I','R',0}, 21206, 296 }, /* Kiribati */ - { 134, {'K','R',0}, {'K','O','R',0}, 47600, 410 }, /* Korea */ - { 136, {'K','W',0}, {'K','W','T',0}, 47611, 414 }, /* Kuwait */ - { 137, {'K','Z',0}, {'K','A','Z',0}, 47590, 398 }, /* Kazakhstan */ - { 138, {'L','A',0}, {'L','A','O',0}, 47599, 418 }, /* Laos */ - { 139, {'L','B',0}, {'L','B','N',0}, 47611, 422 }, /* Lebanon */ - { 140, {'L','V',0}, {'L','V','A',0}, 10039882, 428 }, /* Latvia */ - { 141, {'L','T',0}, {'L','T','U',0}, 10039882, 440 }, /* Lithuania */ - { 142, {'L','R',0}, {'L','B','R',0}, 42483, 430 }, /* Liberia */ - { 143, {'S','K',0}, {'S','V','K',0}, 47609, 703 }, /* Slovakia */ - { 145, {'L','I',0}, {'L','I','E',0}, 10210824, 438 }, /* Liechtenstein */ - { 146, {'L','S',0}, {'L','S','O',0}, 10039883, 426 }, /* Lesotho */ - { 147, {'L','U',0}, {'L','U','X',0}, 10210824, 442 }, /* Luxembourg */ - { 148, {'L','Y',0}, {'L','B','Y',0}, 42487, 434 }, /* Libya */ - { 149, {'M','G',0}, {'M','D','G',0}, 47603, 450 }, /* Madagascar */ - { 151, {'M','O',0}, {'M','A','C',0}, 47600, 446 }, /* Macao S.A.R. */ - { 152, {'M','D',0}, {'M','D','A',0}, 47609, 498 }, /* Moldova */ - { 154, {'M','N',0}, {'M','N','G',0}, 47600, 496 }, /* Mongolia */ - { 156, {'M','W',0}, {'M','W','I',0}, 47603, 454 }, /* Malawi */ - { 157, {'M','L',0}, {'M','L','I',0}, 42483, 466 }, /* Mali */ - { 158, {'M','C',0}, {'M','C','O',0}, 10210824, 492 }, /* Monaco */ - { 159, {'M','A',0}, {'M','A','R',0}, 42487, 504 }, /* Morocco */ - { 160, {'M','U',0}, {'M','U','S',0}, 47603, 480 }, /* Mauritius */ - { 162, {'M','R',0}, {'M','R','T',0}, 42483, 478 }, /* Mauritania */ - { 163, {'M','T',0}, {'M','L','T',0}, 47610, 470 }, /* Malta */ - { 164, {'O','M',0}, {'O','M','N',0}, 47611, 512 }, /* Oman */ - { 165, {'M','V',0}, {'M','D','V',0}, 47614, 462 }, /* Maldives */ - { 166, {'M','X',0}, {'M','E','X',0}, 27082, 484 }, /* Mexico */ - { 167, {'M','Y',0}, {'M','Y','S',0}, 47599, 458 }, /* Malaysia */ - { 168, {'M','Z',0}, {'M','O','Z',0}, 47603, 508 }, /* Mozambique */ - { 173, {'N','E',0}, {'N','E','R',0}, 42483, 562 }, /* Niger */ - { 174, {'V','U',0}, {'V','U','T',0}, 20900, 548 }, /* Vanuatu */ - { 175, {'N','G',0}, {'N','G','A',0}, 42483, 566 }, /* Nigeria */ - { 176, {'N','L',0}, {'N','L','D',0}, 10210824, 528 }, /* Netherlands */ - { 177, {'N','O',0}, {'N','O','R',0}, 10039882, 578 }, /* Norway */ - { 178, {'N','P',0}, {'N','P','L',0}, 47614, 524 }, /* Nepal */ - { 180, {'N','R',0}, {'N','R','U',0}, 21206, 520 }, /* Nauru */ - { 181, {'S','R',0}, {'S','U','R',0}, 31396, 740 }, /* Suriname */ - { 182, {'N','I',0}, {'N','I','C',0}, 27082, 558 }, /* Nicaragua */ - { 183, {'N','Z',0}, {'N','Z','L',0}, 10210825, 554 }, /* New Zealand */ - { 184, {'P','S',0}, {'P','S','E',0}, 47611, 275 }, /* Palestinian Authority */ - { 185, {'P','Y',0}, {'P','R','Y',0}, 31396, 600 }, /* Paraguay */ - { 187, {'P','E',0}, {'P','E','R',0}, 31396, 604 }, /* Peru */ - { 190, {'P','K',0}, {'P','A','K',0}, 47614, 586 }, /* Pakistan */ - { 191, {'P','L',0}, {'P','O','L',0}, 47609, 616 }, /* Poland */ - { 192, {'P','A',0}, {'P','A','N',0}, 27082, 591 }, /* Panama */ - { 193, {'P','T',0}, {'P','R','T',0}, 47610, 620 }, /* Portugal */ - { 194, {'P','G',0}, {'P','N','G',0}, 20900, 598 }, /* Papua New Guinea */ - { 195, {'P','W',0}, {'P','L','W',0}, 21206, 585 }, /* Palau */ - { 196, {'G','W',0}, {'G','N','B',0}, 42483, 624 }, /* Guinea-Bissau */ - { 197, {'Q','A',0}, {'Q','A','T',0}, 47611, 634 }, /* Qatar */ - { 198, {'R','E',0}, {'R','E','U',0}, 47603, 638 }, /* Reunion */ - { 199, {'M','H',0}, {'M','H','L',0}, 21206, 584 }, /* Marshall Islands */ - { 200, {'R','O',0}, {'R','O','U',0}, 47609, 642 }, /* Romania */ - { 201, {'P','H',0}, {'P','H','L',0}, 47599, 608 }, /* Philippines */ - { 202, {'P','R',0}, {'P','R','I',0}, 10039880, 630 }, /* Puerto Rico */ - { 203, {'R','U',0}, {'R','U','S',0}, 47609, 643 }, /* Russia */ - { 204, {'R','W',0}, {'R','W','A',0}, 47603, 646 }, /* Rwanda */ - { 205, {'S','A',0}, {'S','A','U',0}, 47611, 682 }, /* Saudi Arabia */ - { 206, {'P','M',0}, {'S','P','M',0}, 23581, 666 }, /* St. Pierre and Miquelon */ - { 207, {'K','N',0}, {'K','N','A',0}, 10039880, 659 }, /* St. Kitts and Nevis */ - { 208, {'S','C',0}, {'S','Y','C',0}, 47603, 690 }, /* Seychelles */ - { 209, {'Z','A',0}, {'Z','A','F',0}, 10039883, 710 }, /* South Africa */ - { 210, {'S','N',0}, {'S','E','N',0}, 42483, 686 }, /* Senegal */ - { 212, {'S','I',0}, {'S','V','N',0}, 47610, 705 }, /* Slovenia */ - { 213, {'S','L',0}, {'S','L','E',0}, 42483, 694 }, /* Sierra Leone */ - { 214, {'S','M',0}, {'S','M','R',0}, 47610, 674 }, /* San Marino */ - { 215, {'S','G',0}, {'S','G','P',0}, 47599, 702 }, /* Singapore */ - { 216, {'S','O',0}, {'S','O','M',0}, 47603, 706 }, /* Somalia */ - { 217, {'E','S',0}, {'E','S','P',0}, 47610, 724 }, /* Spain */ - { 218, {'L','C',0}, {'L','C','A',0}, 10039880, 662 }, /* St. Lucia */ - { 219, {'S','D',0}, {'S','D','N',0}, 42487, 736 }, /* Sudan */ - { 220, {'S','J',0}, {'S','J','M',0}, 10039882, 744 }, /* Svalbard */ - { 221, {'S','E',0}, {'S','W','E',0}, 10039882, 752 }, /* Sweden */ - { 222, {'S','Y',0}, {'S','Y','R',0}, 47611, 760 }, /* Syria */ - { 223, {'C','H',0}, {'C','H','E',0}, 10210824, 756 }, /* Switzerland */ - { 224, {'A','E',0}, {'A','R','E',0}, 47611, 784 }, /* United Arab Emirates */ - { 225, {'T','T',0}, {'T','T','O',0}, 10039880, 780 }, /* Trinidad and Tobago */ - { 227, {'T','H',0}, {'T','H','A',0}, 47599, 764 }, /* Thailand */ - { 228, {'T','J',0}, {'T','J','K',0}, 47590, 762 }, /* Tajikistan */ - { 231, {'T','O',0}, {'T','O','N',0}, 26286, 776 }, /* Tonga */ - { 232, {'T','G',0}, {'T','G','O',0}, 42483, 768 }, /* Togo */ - { 233, {'S','T',0}, {'S','T','P',0}, 42484, 678 }, /* São Tomé and Príncipe */ - { 234, {'T','N',0}, {'T','U','N',0}, 42487, 788 }, /* Tunisia */ - { 235, {'T','R',0}, {'T','U','R',0}, 47611, 792 }, /* Turkey */ - { 236, {'T','V',0}, {'T','U','V',0}, 26286, 798 }, /* Tuvalu */ - { 237, {'T','W',0}, {'T','W','N',0}, 47600, 158 }, /* Taiwan */ - { 238, {'T','M',0}, {'T','K','M',0}, 47590, 795 }, /* Turkmenistan */ - { 239, {'T','Z',0}, {'T','Z','A',0}, 47603, 834 }, /* Tanzania */ - { 240, {'U','G',0}, {'U','G','A',0}, 47603, 800 }, /* Uganda */ - { 241, {'U','A',0}, {'U','K','R',0}, 47609, 804 }, /* Ukraine */ - { 242, {'G','B',0}, {'G','B','R',0}, 10039882, 826 }, /* United Kingdom */ - { 244, {'U','S',0}, {'U','S','A',0}, 23581, 840 }, /* United States */ - { 245, {'B','F',0}, {'B','F','A',0}, 42483, 854 }, /* Burkina Faso */ - { 246, {'U','Y',0}, {'U','R','Y',0}, 31396, 858 }, /* Uruguay */ - { 247, {'U','Z',0}, {'U','Z','B',0}, 47590, 860 }, /* Uzbekistan */ - { 248, {'V','C',0}, {'V','C','T',0}, 10039880, 670 }, /* St. Vincent and the Grenadines */ - { 249, {'V','E',0}, {'V','E','N',0}, 31396, 862 }, /* Bolivarian Republic of Venezuela */ - { 251, {'V','N',0}, {'V','N','M',0}, 47599, 704 }, /* Vietnam */ - { 252, {'V','I',0}, {'V','I','R',0}, 10039880, 850 }, /* Virgin Islands */ - { 253, {'V','A',0}, {'V','A','T',0}, 47610, 336 }, /* Vatican City */ - { 254, {'N','A',0}, {'N','A','M',0}, 10039883, 516 }, /* Namibia */ - { 257, {'E','H',0}, {'E','S','H',0}, 42487, 732 }, /* Western Sahara (disputed) */ - { 258, {'X','X',0}, {'X','X',0}, 161832256 }, /* Wake Island */ - { 259, {'W','S',0}, {'W','S','M',0}, 26286, 882 }, /* Samoa */ - { 260, {'S','Z',0}, {'S','W','Z',0}, 10039883, 748 }, /* Swaziland */ - { 261, {'Y','E',0}, {'Y','E','M',0}, 47611, 887 }, /* Yemen */ - { 263, {'Z','M',0}, {'Z','M','B',0}, 47603, 894 }, /* Zambia */ - { 264, {'Z','W',0}, {'Z','W','E',0}, 47603, 716 }, /* Zimbabwe */ - { 269, {'C','S',0}, {'S','C','G',0}, 47610, 891 }, /* Serbia and Montenegro (Former) */ - { 270, {'M','E',0}, {'M','N','E',0}, 47610, 499 }, /* Montenegro */ - { 271, {'R','S',0}, {'S','R','B',0}, 47610, 688 }, /* Serbia */ - { 273, {'C','W',0}, {'C','U','W',0}, 10039880, 531 }, /* Curaçao */ - { 276, {'S','S',0}, {'S','S','D',0}, 42487, 728 }, /* South Sudan */ - { 300, {'A','I',0}, {'A','I','A',0}, 10039880, 660 }, /* Anguilla */ - { 301, {'A','Q',0}, {'A','T','A',0}, 39070, 10 }, /* Antarctica */ - { 302, {'A','W',0}, {'A','B','W',0}, 10039880, 533 }, /* Aruba */ - { 303, {'X','X',0}, {'X','X',0}, 39070 }, /* Ascension Island */ - { 304, {'X','X',0}, {'X','X',0}, 10210825 }, /* Ashmore and Cartier Islands */ - { 305, {'X','X',0}, {'X','X',0}, 161832256 }, /* Baker Island */ - { 306, {'B','V',0}, {'B','V','T',0}, 39070, 74 }, /* Bouvet Island */ - { 307, {'K','Y',0}, {'C','Y','M',0}, 10039880, 136 }, /* Cayman Islands */ - { 308, {'X','X',0}, {'X','X',0}, 10210824, 0, LOCATION_BOTH }, /* Channel Islands */ - { 309, {'C','X',0}, {'C','X','R',0}, 12, 162 }, /* Christmas Island */ - { 310, {'X','X',0}, {'X','X',0}, 27114 }, /* Clipperton Island */ - { 311, {'C','C',0}, {'C','C','K',0}, 10210825, 166 }, /* Cocos (Keeling) Islands */ - { 312, {'C','K',0}, {'C','O','K',0}, 26286, 184 }, /* Cook Islands */ - { 313, {'X','X',0}, {'X','X',0}, 10210825 }, /* Coral Sea Islands */ - { 314, {'X','X',0}, {'X','X',0}, 114 }, /* Diego Garcia */ - { 315, {'F','K',0}, {'F','L','K',0}, 31396, 238 }, /* Falkland Islands (Islas Malvinas) */ - { 317, {'G','F',0}, {'G','U','F',0}, 31396, 254 }, /* French Guiana */ - { 318, {'P','F',0}, {'P','Y','F',0}, 26286, 258 }, /* French Polynesia */ - { 319, {'T','F',0}, {'A','T','F',0}, 39070, 260 }, /* French Southern and Antarctic Lands */ - { 321, {'G','P',0}, {'G','L','P',0}, 10039880, 312 }, /* Guadeloupe */ - { 322, {'G','U',0}, {'G','U','M',0}, 21206, 316 }, /* Guam */ - { 323, {'X','X',0}, {'X','X',0}, 39070 }, /* Guantanamo Bay */ - { 324, {'G','G',0}, {'G','G','Y',0}, 308, 831 }, /* Guernsey */ - { 325, {'H','M',0}, {'H','M','D',0}, 39070, 334 }, /* Heard Island and McDonald Islands */ - { 326, {'X','X',0}, {'X','X',0}, 161832256 }, /* Howland Island */ - { 327, {'X','X',0}, {'X','X',0}, 161832256 }, /* Jarvis Island */ - { 328, {'J','E',0}, {'J','E','Y',0}, 308, 832 }, /* Jersey */ - { 329, {'X','X',0}, {'X','X',0}, 161832256 }, /* Kingman Reef */ - { 330, {'M','Q',0}, {'M','T','Q',0}, 10039880, 474 }, /* Martinique */ - { 331, {'Y','T',0}, {'M','Y','T',0}, 47603, 175 }, /* Mayotte */ - { 332, {'M','S',0}, {'M','S','R',0}, 10039880, 500 }, /* Montserrat */ - { 333, {'A','N',0}, {'A','N','T',0}, 10039880, 530, LOCATION_BOTH }, /* Netherlands Antilles (Former) */ - { 334, {'N','C',0}, {'N','C','L',0}, 20900, 540 }, /* New Caledonia */ - { 335, {'N','U',0}, {'N','I','U',0}, 26286, 570 }, /* Niue */ - { 336, {'N','F',0}, {'N','F','K',0}, 10210825, 574 }, /* Norfolk Island */ - { 337, {'M','P',0}, {'M','N','P',0}, 21206, 580 }, /* Northern Mariana Islands */ - { 338, {'X','X',0}, {'X','X',0}, 161832256 }, /* Palmyra Atoll */ - { 339, {'P','N',0}, {'P','C','N',0}, 26286, 612 }, /* Pitcairn Islands */ - { 340, {'X','X',0}, {'X','X',0}, 337 }, /* Rota Island */ - { 341, {'X','X',0}, {'X','X',0}, 337 }, /* Saipan */ - { 342, {'G','S',0}, {'S','G','S',0}, 39070, 239 }, /* South Georgia and the South Sandwich Islands */ - { 343, {'S','H',0}, {'S','H','N',0}, 42483, 654 }, /* St. Helena */ - { 346, {'X','X',0}, {'X','X',0}, 337 }, /* Tinian Island */ - { 347, {'T','K',0}, {'T','K','L',0}, 26286, 772 }, /* Tokelau */ - { 348, {'X','X',0}, {'X','X',0}, 39070 }, /* Tristan da Cunha */ - { 349, {'T','C',0}, {'T','C','A',0}, 10039880, 796 }, /* Turks and Caicos Islands */ - { 351, {'V','G',0}, {'V','G','B',0}, 10039880, 92 }, /* Virgin Islands, British */ - { 352, {'W','F',0}, {'W','L','F',0}, 26286, 876 }, /* Wallis and Futuna */ - { 742, {'X','X',0}, {'X','X',0}, 39070, 0, LOCATION_REGION }, /* Africa */ - { 2129, {'X','X',0}, {'X','X',0}, 39070, 0, LOCATION_REGION }, /* Asia */ - { 10541, {'X','X',0}, {'X','X',0}, 39070, 0, LOCATION_REGION }, /* Europe */ - { 15126, {'I','M',0}, {'I','M','N',0}, 10039882, 833 }, /* Man, Isle of */ - { 19618, {'M','K',0}, {'M','K','D',0}, 47610, 807 }, /* Macedonia, Former Yugoslav Republic of */ - { 20900, {'X','X',0}, {'X','X',0}, 27114, 0, LOCATION_REGION }, /* Melanesia */ - { 21206, {'X','X',0}, {'X','X',0}, 27114, 0, LOCATION_REGION }, /* Micronesia */ - { 21242, {'X','X',0}, {'X','X',0}, 161832256 }, /* Midway Islands */ - { 23581, {'X','X',0}, {'X','X',0}, 10026358, 0, LOCATION_REGION }, /* Northern America */ - { 26286, {'X','X',0}, {'X','X',0}, 27114, 0, LOCATION_REGION }, /* Polynesia */ - { 27082, {'X','X',0}, {'X','X',0}, 161832257, 0, LOCATION_REGION }, /* Central America */ - { 27114, {'X','X',0}, {'X','X',0}, 39070, 0, LOCATION_REGION }, /* Oceania */ - { 30967, {'S','X',0}, {'S','X','M',0}, 10039880, 534 }, /* Sint Maarten (Dutch part) */ - { 31396, {'X','X',0}, {'X','X',0}, 161832257, 0, LOCATION_REGION }, /* South America */ - { 31706, {'M','F',0}, {'M','A','F',0}, 10039880, 663 }, /* Saint Martin (French part) */ - { 39070, {'X','X',0}, {'X','X',0}, 39070, 0, LOCATION_REGION }, /* World */ - { 42483, {'X','X',0}, {'X','X',0}, 742, 0, LOCATION_REGION }, /* Western Africa */ - { 42484, {'X','X',0}, {'X','X',0}, 742, 0, LOCATION_REGION }, /* Middle Africa */ - { 42487, {'X','X',0}, {'X','X',0}, 742, 0, LOCATION_REGION }, /* Northern Africa */ - { 47590, {'X','X',0}, {'X','X',0}, 2129, 0, LOCATION_REGION }, /* Central Asia */ - { 47599, {'X','X',0}, {'X','X',0}, 2129, 0, LOCATION_REGION }, /* South-Eastern Asia */ - { 47600, {'X','X',0}, {'X','X',0}, 2129, 0, LOCATION_REGION }, /* Eastern Asia */ - { 47603, {'X','X',0}, {'X','X',0}, 742, 0, LOCATION_REGION }, /* Eastern Africa */ - { 47609, {'X','X',0}, {'X','X',0}, 10541, 0, LOCATION_REGION }, /* Eastern Europe */ - { 47610, {'X','X',0}, {'X','X',0}, 10541, 0, LOCATION_REGION }, /* Southern Europe */ - { 47611, {'X','X',0}, {'X','X',0}, 2129, 0, LOCATION_REGION }, /* Middle East */ - { 47614, {'X','X',0}, {'X','X',0}, 2129, 0, LOCATION_REGION }, /* Southern Asia */ - { 7299303, {'T','L',0}, {'T','L','S',0}, 47599, 626 }, /* Democratic Republic of Timor-Leste */ - { 10026358, {'X','X',0}, {'X','X',0}, 39070, 0, LOCATION_REGION }, /* Americas */ - { 10028789, {'A','X',0}, {'A','L','A',0}, 10039882, 248 }, /* Ã…land Islands */ - { 10039880, {'X','X',0}, {'X','X',0}, 161832257, 0, LOCATION_REGION }, /* Caribbean */ - { 10039882, {'X','X',0}, {'X','X',0}, 10541, 0, LOCATION_REGION }, /* Northern Europe */ - { 10039883, {'X','X',0}, {'X','X',0}, 742, 0, LOCATION_REGION }, /* Southern Africa */ - { 10210824, {'X','X',0}, {'X','X',0}, 10541, 0, LOCATION_REGION }, /* Western Europe */ - { 10210825, {'X','X',0}, {'X','X',0}, 27114, 0, LOCATION_REGION }, /* Australia and New Zealand */ - { 161832015, {'B','L',0}, {'B','L','M',0}, 10039880, 652 }, /* Saint Barthélemy */ - { 161832256, {'U','M',0}, {'U','M','I',0}, 27114, 581 }, /* U.S. Minor Outlying Islands */ - { 161832257, {'X','X',0}, {'X','X',0}, 10026358, 0, LOCATION_REGION }, /* Latin America and the Caribbean */ -}; - -/****************************************************************************** - * EnumLanguageGroupLocalesA (KERNEL32.@) - * - * Call a users function for every locale in a language group available on the system. - * - * PARAMS - * pLangGrpLcEnumProc [I] Callback function to call for each locale - * lgrpid [I] Language group (LGRPID_ values from "winnls.h") - * dwFlags [I] Reserved, set to 0 - * lParam [I] User parameter to pass to pLangGrpLcEnumProc - * - * RETURNS - * Success: TRUE. - * Failure: FALSE. Use GetLastError() to determine the cause. - */ -BOOL WINAPI EnumLanguageGroupLocalesA(LANGGROUPLOCALE_ENUMPROCA pLangGrpLcEnumProc, - LGRPID lgrpid, DWORD dwFlags, LONG_PTR lParam) -{ - ENUMLANGUAGEGROUPLOCALE_CALLBACKS callbacks; - - TRACE("(%p,0x%08X,0x%08X,0x%08lX)\n", pLangGrpLcEnumProc, lgrpid, dwFlags, lParam); + TRACE("(%p,0x%08X,0x%08X,0x%08lX)\n", pLangGrpLcEnumProc, lgrpid, dwFlags, lParam); callbacks.procA = pLangGrpLcEnumProc; callbacks.procW = NULL; @@ -3568,359 +3255,628 @@ BOOL WINAPI EnumLanguageGroupLocalesW(LANGGROUPLOCALE_ENUMPROCW pLangGrpLcEnumPr return NLS_EnumLanguageGroupLocales( pLangGrpLcEnumProc ? &callbacks : NULL ); } -/* Callback function ptrs for EnumSystemCodePagesA/W */ -typedef struct +/****************************************************************************** + * InvalidateNLSCache (KERNEL32.@) + * + * Invalidate the cache of NLS values. + * + * PARAMS + * None. + * + * RETURNS + * Success: TRUE. + * Failure: FALSE. + */ +BOOL WINAPI InvalidateNLSCache(void) { - CODEPAGE_ENUMPROCA procA; - CODEPAGE_ENUMPROCW procW; - DWORD dwFlags; -} ENUMSYSTEMCODEPAGES_CALLBACKS; +#ifdef __REACTOS__ + JapaneseEra_ClearCache(); + return TRUE; +#else + FIXME("() stub\n"); + return FALSE; +#endif +} -/* Internal implementation of EnumSystemCodePagesA/W */ -static BOOL NLS_EnumSystemCodePages(ENUMSYSTEMCODEPAGES_CALLBACKS *lpProcs) +/****************************************************************************** + * GetUserGeoID (KERNEL32.@) + */ +GEOID WINAPI GetUserGeoID( GEOCLASS GeoClass ) { - WCHAR szNumber[5 + 1], szValue[MAX_PATH]; - HANDLE hKey; - BOOL bContinue = TRUE; - ULONG ulIndex = 0; - - if (!lpProcs) - { - SetLastError(ERROR_INVALID_PARAMETER); - return FALSE; - } + GEOID ret = GEOID_NOT_AVAILABLE; + static const WCHAR geoW[] = {'G','e','o',0}; + static const WCHAR nationW[] = {'N','a','t','i','o','n',0}; + WCHAR bufferW[40], *end; + DWORD count; + HANDLE hkey, hSubkey = 0; + UNICODE_STRING keyW; + const KEY_VALUE_PARTIAL_INFORMATION *info = (KEY_VALUE_PARTIAL_INFORMATION *)bufferW; + RtlInitUnicodeString( &keyW, nationW ); + count = sizeof(bufferW); - switch (lpProcs->dwFlags) - { - case CP_INSTALLED: - case CP_SUPPORTED: - break; - default: - SetLastError(ERROR_INVALID_FLAGS); - return FALSE; - } + if(!(hkey = create_registry_key())) return ret; - hKey = NLS_RegOpenKey(0, L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\NLS\\CodePage"); - if (!hKey) - { - WARN("NLS_RegOpenKey() failed\n"); - return FALSE; + switch( GeoClass ){ + case GEOCLASS_NATION: + if ((hSubkey = NLS_RegOpenKey(hkey, geoW))) + { + if((NtQueryValueKey(hSubkey, &keyW, KeyValuePartialInformation, + bufferW, count, &count) == STATUS_SUCCESS ) && info->DataLength) + ret = strtolW((LPCWSTR)info->Data, &end, 10); + } + break; + case GEOCLASS_REGION: + FIXME("GEOCLASS_REGION not handled yet\n"); + break; } - while (bContinue) - { - if (NLS_RegEnumValue(hKey, ulIndex, szNumber, sizeof(szNumber), - szValue, sizeof(szValue))) - { - if ((lpProcs->dwFlags == CP_SUPPORTED)|| - ((lpProcs->dwFlags == CP_INSTALLED)&&(wcslen(szValue) > 2))) - { - if (lpProcs->procW) - { - bContinue = lpProcs->procW(szNumber); - } - else - { - char szNumberA[sizeof(szNumber)/sizeof(WCHAR)]; + NtClose(hkey); + if (hSubkey) NtClose(hSubkey); + return ret; +} - WideCharToMultiByte(CP_ACP, 0, szNumber, -1, szNumberA, sizeof(szNumberA), 0, 0); - bContinue = lpProcs->procA(szNumberA); - } - } +/****************************************************************************** + * SetUserGeoID (KERNEL32.@) + */ +BOOL WINAPI SetUserGeoID( GEOID GeoID ) +{ + static const WCHAR geoW[] = {'G','e','o',0}; + static const WCHAR nationW[] = {'N','a','t','i','o','n',0}; + static const WCHAR formatW[] = {'%','i',0}; + UNICODE_STRING nameW,keyW; + WCHAR bufferW[10]; + OBJECT_ATTRIBUTES attr; + HANDLE hkey; - ulIndex++; + if(!(hkey = create_registry_key())) return FALSE; - } else bContinue = FALSE; + attr.Length = sizeof(attr); + attr.RootDirectory = hkey; + attr.ObjectName = &nameW; + attr.Attributes = 0; + attr.SecurityDescriptor = NULL; + attr.SecurityQualityOfService = NULL; + RtlInitUnicodeString( &nameW, geoW ); + RtlInitUnicodeString( &keyW, nationW ); - if (!bContinue) - break; - } + if (NtCreateKey( &hkey, KEY_ALL_ACCESS, &attr, 0, NULL, 0, NULL ) != STATUS_SUCCESS) - if (hKey) - NtClose(hKey); + { + NtClose(attr.RootDirectory); + return FALSE; + } + sprintfW(bufferW, formatW, GeoID); + NtSetValueKey(hkey, &keyW, 0, REG_SZ, bufferW, (strlenW(bufferW) + 1) * sizeof(WCHAR)); + NtClose(attr.RootDirectory); + NtClose(hkey); return TRUE; } -/* - * @implemented - */ -BOOL -WINAPI -EnumSystemCodePagesW ( - CODEPAGE_ENUMPROCW lpCodePageEnumProc, - DWORD dwFlags - ) +typedef struct { - ENUMSYSTEMCODEPAGES_CALLBACKS procs; - - TRACE("(%p,0x%08X)\n", lpCodePageEnumProc, dwFlags); + union + { + UILANGUAGE_ENUMPROCA procA; + UILANGUAGE_ENUMPROCW procW; + } u; + DWORD flags; + LONG_PTR param; +} ENUM_UILANG_CALLBACK; - procs.procA = NULL; - procs.procW = lpCodePageEnumProc; - procs.dwFlags = dwFlags; +static BOOL CALLBACK enum_uilang_proc_a( HMODULE hModule, LPCSTR type, + LPCSTR name, WORD LangID, LONG_PTR lParam ) +{ + ENUM_UILANG_CALLBACK *enum_uilang = (ENUM_UILANG_CALLBACK *)lParam; + char buf[20]; - return NLS_EnumSystemCodePages(lpCodePageEnumProc ? &procs : NULL); + sprintf(buf, "%08x", (UINT)LangID); + return enum_uilang->u.procA( buf, enum_uilang->param ); } - -/* - * @implemented - */ -BOOL -WINAPI -EnumSystemCodePagesA ( - CODEPAGE_ENUMPROCA lpCodePageEnumProc, - DWORD dwFlags - ) +static BOOL CALLBACK enum_uilang_proc_w( HMODULE hModule, LPCWSTR type, + LPCWSTR name, WORD LangID, LONG_PTR lParam ) { - ENUMSYSTEMCODEPAGES_CALLBACKS procs; - - TRACE("(%p,0x%08X)\n", lpCodePageEnumProc, dwFlags); - - procs.procA = lpCodePageEnumProc; - procs.procW = NULL; - procs.dwFlags = dwFlags; + static const WCHAR formatW[] = {'%','0','8','x',0}; + ENUM_UILANG_CALLBACK *enum_uilang = (ENUM_UILANG_CALLBACK *)lParam; + WCHAR buf[20]; - return NLS_EnumSystemCodePages(lpCodePageEnumProc ? &procs : NULL); + sprintfW( buf, formatW, (UINT)LangID ); + return enum_uilang->u.procW( buf, enum_uilang->param ); } /****************************************************************************** - * EnumSystemGeoID (KERNEL32.@) - * - * Call a users function for every location available on the system. - * - * PARAMS - * geoclass [I] Type of information desired (SYSGEOTYPE enum from "winnls.h") - * parent [I] GEOID for the parent - * enumproc [I] Callback function to call for each location - * - * RETURNS - * Success: TRUE. - * Failure: FALSE. Use GetLastError() to determine the cause. + * EnumUILanguagesA (KERNEL32.@) */ -BOOL WINAPI EnumSystemGeoID(GEOCLASS geoclass, GEOID parent, GEO_ENUMPROC enumproc) +BOOL WINAPI EnumUILanguagesA(UILANGUAGE_ENUMPROCA pUILangEnumProc, DWORD dwFlags, LONG_PTR lParam) { - INT i; + ENUM_UILANG_CALLBACK enum_uilang; - TRACE("(%d, %d, %p)\n", geoclass, parent, enumproc); + TRACE("%p, %x, %lx\n", pUILangEnumProc, dwFlags, lParam); - if (!enumproc) { - SetLastError(ERROR_INVALID_PARAMETER); - return FALSE; + if(!pUILangEnumProc) { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; } - - if (geoclass != GEOCLASS_NATION && geoclass != GEOCLASS_REGION) { - SetLastError(ERROR_INVALID_FLAGS); - return FALSE; + if(dwFlags) { + SetLastError(ERROR_INVALID_FLAGS); + return FALSE; } - for (i = 0; i < sizeof(geoinfodata)/sizeof(struct geoinfo_t); i++) { - const struct geoinfo_t *ptr = &geoinfodata[i]; - - if (geoclass == GEOCLASS_NATION && (ptr->kind == LOCATION_REGION)) - continue; - - if (geoclass == GEOCLASS_REGION && (ptr->kind == LOCATION_NATION)) - continue; - - if (parent && ptr->parent != parent) - continue; - - if (!enumproc(ptr->id)) - return TRUE; - } + enum_uilang.u.procA = pUILangEnumProc; + enum_uilang.flags = dwFlags; + enum_uilang.param = lParam; + EnumResourceLanguagesA( kernel32_handle, (LPCSTR)RT_STRING, + (LPCSTR)LOCALE_ILANGUAGE, enum_uilang_proc_a, + (LONG_PTR)&enum_uilang); return TRUE; } /****************************************************************************** - * InvalidateNLSCache (KERNEL32.@) - * - * Invalidate the cache of NLS values. - * - * PARAMS - * None. - * - * RETURNS - * Success: TRUE. - * Failure: FALSE. + * EnumUILanguagesW (KERNEL32.@) */ -BOOL WINAPI InvalidateNLSCache(void) +BOOL WINAPI EnumUILanguagesW(UILANGUAGE_ENUMPROCW pUILangEnumProc, DWORD dwFlags, LONG_PTR lParam) { -#ifdef __REACTOS__ - JapaneseEra_ClearCache(); - return TRUE; -#else - FIXME("() stub\n"); - return FALSE; -#endif -} + ENUM_UILANG_CALLBACK enum_uilang; -/****************************************************************************** - * GetUserGeoID (KERNEL32.@) - */ -GEOID WINAPI GetUserGeoID( GEOCLASS GeoClass ) -{ - GEOID ret = GEOID_NOT_AVAILABLE; - static const WCHAR geoW[] = {'G','e','o',0}; - static const WCHAR nationW[] = {'N','a','t','i','o','n',0}; - WCHAR bufferW[40], *end; - DWORD count; - HANDLE hkey, hSubkey = 0; - UNICODE_STRING keyW; - const KEY_VALUE_PARTIAL_INFORMATION *info = (KEY_VALUE_PARTIAL_INFORMATION *)bufferW; - RtlInitUnicodeString( &keyW, nationW ); - count = sizeof(bufferW); + TRACE("%p, %x, %lx\n", pUILangEnumProc, dwFlags, lParam); - if(!(hkey = create_registry_key())) return ret; - switch( GeoClass ){ - case GEOCLASS_NATION: - if ((hSubkey = NLS_RegOpenKey(hkey, geoW))) - { - if((NtQueryValueKey(hSubkey, &keyW, KeyValuePartialInformation, - bufferW, count, &count) == STATUS_SUCCESS ) && info->DataLength) - ret = strtolW((LPCWSTR)info->Data, &end, 10); - } - break; - case GEOCLASS_REGION: - FIXME("GEOCLASS_REGION not handled yet\n"); - break; + if(!pUILangEnumProc) { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + if(dwFlags) { + SetLastError(ERROR_INVALID_FLAGS); + return FALSE; } - NtClose(hkey); - if (hSubkey) NtClose(hSubkey); - return ret; + enum_uilang.u.procW = pUILangEnumProc; + enum_uilang.flags = dwFlags; + enum_uilang.param = lParam; + + EnumResourceLanguagesW( kernel32_handle, (LPCWSTR)RT_STRING, + (LPCWSTR)LOCALE_ILANGUAGE, enum_uilang_proc_w, + (LONG_PTR)&enum_uilang); + return TRUE; } -/****************************************************************************** - * SetUserGeoID (KERNEL32.@) - */ -BOOL WINAPI SetUserGeoID( GEOID GeoID ) +enum locationkind { + LOCATION_NATION = 0, + LOCATION_REGION, + LOCATION_BOTH +}; + +struct geoinfo_t { + GEOID id; + WCHAR iso2W[3]; + WCHAR iso3W[4]; + GEOID parent; + INT uncode; + enum locationkind kind; +}; + +static const struct geoinfo_t geoinfodata[] = { + { 2, {'A','G',0}, {'A','T','G',0}, 10039880, 28 }, /* Antigua and Barbuda */ + { 3, {'A','F',0}, {'A','F','G',0}, 47614, 4 }, /* Afghanistan */ + { 4, {'D','Z',0}, {'D','Z','A',0}, 42487, 12 }, /* Algeria */ + { 5, {'A','Z',0}, {'A','Z','E',0}, 47611, 31 }, /* Azerbaijan */ + { 6, {'A','L',0}, {'A','L','B',0}, 47610, 8 }, /* Albania */ + { 7, {'A','M',0}, {'A','R','M',0}, 47611, 51 }, /* Armenia */ + { 8, {'A','D',0}, {'A','N','D',0}, 47610, 20 }, /* Andorra */ + { 9, {'A','O',0}, {'A','G','O',0}, 42484, 24 }, /* Angola */ + { 10, {'A','S',0}, {'A','S','M',0}, 26286, 16 }, /* American Samoa */ + { 11, {'A','R',0}, {'A','R','G',0}, 31396, 32 }, /* Argentina */ + { 12, {'A','U',0}, {'A','U','S',0}, 10210825, 36 }, /* Australia */ + { 14, {'A','T',0}, {'A','U','T',0}, 10210824, 40 }, /* Austria */ + { 17, {'B','H',0}, {'B','H','R',0}, 47611, 48 }, /* Bahrain */ + { 18, {'B','B',0}, {'B','R','B',0}, 10039880, 52 }, /* Barbados */ + { 19, {'B','W',0}, {'B','W','A',0}, 10039883, 72 }, /* Botswana */ + { 20, {'B','M',0}, {'B','M','U',0}, 23581, 60 }, /* Bermuda */ + { 21, {'B','E',0}, {'B','E','L',0}, 10210824, 56 }, /* Belgium */ + { 22, {'B','S',0}, {'B','H','S',0}, 10039880, 44 }, /* Bahamas, The */ + { 23, {'B','D',0}, {'B','G','D',0}, 47614, 50 }, /* Bangladesh */ + { 24, {'B','Z',0}, {'B','L','Z',0}, 27082, 84 }, /* Belize */ + { 25, {'B','A',0}, {'B','I','H',0}, 47610, 70 }, /* Bosnia and Herzegovina */ + { 26, {'B','O',0}, {'B','O','L',0}, 31396, 68 }, /* Bolivia */ + { 27, {'M','M',0}, {'M','M','R',0}, 47599, 104 }, /* Myanmar */ + { 28, {'B','J',0}, {'B','E','N',0}, 42483, 204 }, /* Benin */ + { 29, {'B','Y',0}, {'B','L','R',0}, 47609, 112 }, /* Belarus */ + { 30, {'S','B',0}, {'S','L','B',0}, 20900, 90 }, /* Solomon Islands */ + { 32, {'B','R',0}, {'B','R','A',0}, 31396, 76 }, /* Brazil */ + { 34, {'B','T',0}, {'B','T','N',0}, 47614, 64 }, /* Bhutan */ + { 35, {'B','G',0}, {'B','G','R',0}, 47609, 100 }, /* Bulgaria */ + { 37, {'B','N',0}, {'B','R','N',0}, 47599, 96 }, /* Brunei */ + { 38, {'B','I',0}, {'B','D','I',0}, 47603, 108 }, /* Burundi */ + { 39, {'C','A',0}, {'C','A','N',0}, 23581, 124 }, /* Canada */ + { 40, {'K','H',0}, {'K','H','M',0}, 47599, 116 }, /* Cambodia */ + { 41, {'T','D',0}, {'T','C','D',0}, 42484, 148 }, /* Chad */ + { 42, {'L','K',0}, {'L','K','A',0}, 47614, 144 }, /* Sri Lanka */ + { 43, {'C','G',0}, {'C','O','G',0}, 42484, 178 }, /* Congo */ + { 44, {'C','D',0}, {'C','O','D',0}, 42484, 180 }, /* Congo (DRC) */ + { 45, {'C','N',0}, {'C','H','N',0}, 47600, 156 }, /* China */ + { 46, {'C','L',0}, {'C','H','L',0}, 31396, 152 }, /* Chile */ + { 49, {'C','M',0}, {'C','M','R',0}, 42484, 120 }, /* Cameroon */ + { 50, {'K','M',0}, {'C','O','M',0}, 47603, 174 }, /* Comoros */ + { 51, {'C','O',0}, {'C','O','L',0}, 31396, 170 }, /* Colombia */ + { 54, {'C','R',0}, {'C','R','I',0}, 27082, 188 }, /* Costa Rica */ + { 55, {'C','F',0}, {'C','A','F',0}, 42484, 140 }, /* Central African Republic */ + { 56, {'C','U',0}, {'C','U','B',0}, 10039880, 192 }, /* Cuba */ + { 57, {'C','V',0}, {'C','P','V',0}, 42483, 132 }, /* Cape Verde */ + { 59, {'C','Y',0}, {'C','Y','P',0}, 47611, 196 }, /* Cyprus */ + { 61, {'D','K',0}, {'D','N','K',0}, 10039882, 208 }, /* Denmark */ + { 62, {'D','J',0}, {'D','J','I',0}, 47603, 262 }, /* Djibouti */ + { 63, {'D','M',0}, {'D','M','A',0}, 10039880, 212 }, /* Dominica */ + { 65, {'D','O',0}, {'D','O','M',0}, 10039880, 214 }, /* Dominican Republic */ + { 66, {'E','C',0}, {'E','C','U',0}, 31396, 218 }, /* Ecuador */ + { 67, {'E','G',0}, {'E','G','Y',0}, 42487, 818 }, /* Egypt */ + { 68, {'I','E',0}, {'I','R','L',0}, 10039882, 372 }, /* Ireland */ + { 69, {'G','Q',0}, {'G','N','Q',0}, 42484, 226 }, /* Equatorial Guinea */ + { 70, {'E','E',0}, {'E','S','T',0}, 10039882, 233 }, /* Estonia */ + { 71, {'E','R',0}, {'E','R','I',0}, 47603, 232 }, /* Eritrea */ + { 72, {'S','V',0}, {'S','L','V',0}, 27082, 222 }, /* El Salvador */ + { 73, {'E','T',0}, {'E','T','H',0}, 47603, 231 }, /* Ethiopia */ + { 75, {'C','Z',0}, {'C','Z','E',0}, 47609, 203 }, /* Czech Republic */ + { 77, {'F','I',0}, {'F','I','N',0}, 10039882, 246 }, /* Finland */ + { 78, {'F','J',0}, {'F','J','I',0}, 20900, 242 }, /* Fiji Islands */ + { 80, {'F','M',0}, {'F','S','M',0}, 21206, 583 }, /* Micronesia */ + { 81, {'F','O',0}, {'F','R','O',0}, 10039882, 234 }, /* Faroe Islands */ + { 84, {'F','R',0}, {'F','R','A',0}, 10210824, 250 }, /* France */ + { 86, {'G','M',0}, {'G','M','B',0}, 42483, 270 }, /* Gambia, The */ + { 87, {'G','A',0}, {'G','A','B',0}, 42484, 266 }, /* Gabon */ + { 88, {'G','E',0}, {'G','E','O',0}, 47611, 268 }, /* Georgia */ + { 89, {'G','H',0}, {'G','H','A',0}, 42483, 288 }, /* Ghana */ + { 90, {'G','I',0}, {'G','I','B',0}, 47610, 292 }, /* Gibraltar */ + { 91, {'G','D',0}, {'G','R','D',0}, 10039880, 308 }, /* Grenada */ + { 93, {'G','L',0}, {'G','R','L',0}, 23581, 304 }, /* Greenland */ + { 94, {'D','E',0}, {'D','E','U',0}, 10210824, 276 }, /* Germany */ + { 98, {'G','R',0}, {'G','R','C',0}, 47610, 300 }, /* Greece */ + { 99, {'G','T',0}, {'G','T','M',0}, 27082, 320 }, /* Guatemala */ + { 100, {'G','N',0}, {'G','I','N',0}, 42483, 324 }, /* Guinea */ + { 101, {'G','Y',0}, {'G','U','Y',0}, 31396, 328 }, /* Guyana */ + { 103, {'H','T',0}, {'H','T','I',0}, 10039880, 332 }, /* Haiti */ + { 104, {'H','K',0}, {'H','K','G',0}, 47600, 344 }, /* Hong Kong S.A.R. */ + { 106, {'H','N',0}, {'H','N','D',0}, 27082, 340 }, /* Honduras */ + { 108, {'H','R',0}, {'H','R','V',0}, 47610, 191 }, /* Croatia */ + { 109, {'H','U',0}, {'H','U','N',0}, 47609, 348 }, /* Hungary */ + { 110, {'I','S',0}, {'I','S','L',0}, 10039882, 352 }, /* Iceland */ + { 111, {'I','D',0}, {'I','D','N',0}, 47599, 360 }, /* Indonesia */ + { 113, {'I','N',0}, {'I','N','D',0}, 47614, 356 }, /* India */ + { 114, {'I','O',0}, {'I','O','T',0}, 39070, 86 }, /* British Indian Ocean Territory */ + { 116, {'I','R',0}, {'I','R','N',0}, 47614, 364 }, /* Iran */ + { 117, {'I','L',0}, {'I','S','R',0}, 47611, 376 }, /* Israel */ + { 118, {'I','T',0}, {'I','T','A',0}, 47610, 380 }, /* Italy */ + { 119, {'C','I',0}, {'C','I','V',0}, 42483, 384 }, /* Côte d'Ivoire */ + { 121, {'I','Q',0}, {'I','R','Q',0}, 47611, 368 }, /* Iraq */ + { 122, {'J','P',0}, {'J','P','N',0}, 47600, 392 }, /* Japan */ + { 124, {'J','M',0}, {'J','A','M',0}, 10039880, 388 }, /* Jamaica */ + { 125, {'S','J',0}, {'S','J','M',0}, 10039882, 744 }, /* Jan Mayen */ + { 126, {'J','O',0}, {'J','O','R',0}, 47611, 400 }, /* Jordan */ + { 127, {'X','X',0}, {'X','X',0}, 161832256 }, /* Johnston Atoll */ + { 129, {'K','E',0}, {'K','E','N',0}, 47603, 404 }, /* Kenya */ + { 130, {'K','G',0}, {'K','G','Z',0}, 47590, 417 }, /* Kyrgyzstan */ + { 131, {'K','P',0}, {'P','R','K',0}, 47600, 408 }, /* North Korea */ + { 133, {'K','I',0}, {'K','I','R',0}, 21206, 296 }, /* Kiribati */ + { 134, {'K','R',0}, {'K','O','R',0}, 47600, 410 }, /* Korea */ + { 136, {'K','W',0}, {'K','W','T',0}, 47611, 414 }, /* Kuwait */ + { 137, {'K','Z',0}, {'K','A','Z',0}, 47590, 398 }, /* Kazakhstan */ + { 138, {'L','A',0}, {'L','A','O',0}, 47599, 418 }, /* Laos */ + { 139, {'L','B',0}, {'L','B','N',0}, 47611, 422 }, /* Lebanon */ + { 140, {'L','V',0}, {'L','V','A',0}, 10039882, 428 }, /* Latvia */ + { 141, {'L','T',0}, {'L','T','U',0}, 10039882, 440 }, /* Lithuania */ + { 142, {'L','R',0}, {'L','B','R',0}, 42483, 430 }, /* Liberia */ + { 143, {'S','K',0}, {'S','V','K',0}, 47609, 703 }, /* Slovakia */ + { 145, {'L','I',0}, {'L','I','E',0}, 10210824, 438 }, /* Liechtenstein */ + { 146, {'L','S',0}, {'L','S','O',0}, 10039883, 426 }, /* Lesotho */ + { 147, {'L','U',0}, {'L','U','X',0}, 10210824, 442 }, /* Luxembourg */ + { 148, {'L','Y',0}, {'L','B','Y',0}, 42487, 434 }, /* Libya */ + { 149, {'M','G',0}, {'M','D','G',0}, 47603, 450 }, /* Madagascar */ + { 151, {'M','O',0}, {'M','A','C',0}, 47600, 446 }, /* Macao S.A.R. */ + { 152, {'M','D',0}, {'M','D','A',0}, 47609, 498 }, /* Moldova */ + { 154, {'M','N',0}, {'M','N','G',0}, 47600, 496 }, /* Mongolia */ + { 156, {'M','W',0}, {'M','W','I',0}, 47603, 454 }, /* Malawi */ + { 157, {'M','L',0}, {'M','L','I',0}, 42483, 466 }, /* Mali */ + { 158, {'M','C',0}, {'M','C','O',0}, 10210824, 492 }, /* Monaco */ + { 159, {'M','A',0}, {'M','A','R',0}, 42487, 504 }, /* Morocco */ + { 160, {'M','U',0}, {'M','U','S',0}, 47603, 480 }, /* Mauritius */ + { 162, {'M','R',0}, {'M','R','T',0}, 42483, 478 }, /* Mauritania */ + { 163, {'M','T',0}, {'M','L','T',0}, 47610, 470 }, /* Malta */ + { 164, {'O','M',0}, {'O','M','N',0}, 47611, 512 }, /* Oman */ + { 165, {'M','V',0}, {'M','D','V',0}, 47614, 462 }, /* Maldives */ + { 166, {'M','X',0}, {'M','E','X',0}, 27082, 484 }, /* Mexico */ + { 167, {'M','Y',0}, {'M','Y','S',0}, 47599, 458 }, /* Malaysia */ + { 168, {'M','Z',0}, {'M','O','Z',0}, 47603, 508 }, /* Mozambique */ + { 173, {'N','E',0}, {'N','E','R',0}, 42483, 562 }, /* Niger */ + { 174, {'V','U',0}, {'V','U','T',0}, 20900, 548 }, /* Vanuatu */ + { 175, {'N','G',0}, {'N','G','A',0}, 42483, 566 }, /* Nigeria */ + { 176, {'N','L',0}, {'N','L','D',0}, 10210824, 528 }, /* Netherlands */ + { 177, {'N','O',0}, {'N','O','R',0}, 10039882, 578 }, /* Norway */ + { 178, {'N','P',0}, {'N','P','L',0}, 47614, 524 }, /* Nepal */ + { 180, {'N','R',0}, {'N','R','U',0}, 21206, 520 }, /* Nauru */ + { 181, {'S','R',0}, {'S','U','R',0}, 31396, 740 }, /* Suriname */ + { 182, {'N','I',0}, {'N','I','C',0}, 27082, 558 }, /* Nicaragua */ + { 183, {'N','Z',0}, {'N','Z','L',0}, 10210825, 554 }, /* New Zealand */ + { 184, {'P','S',0}, {'P','S','E',0}, 47611, 275 }, /* Palestinian Authority */ + { 185, {'P','Y',0}, {'P','R','Y',0}, 31396, 600 }, /* Paraguay */ + { 187, {'P','E',0}, {'P','E','R',0}, 31396, 604 }, /* Peru */ + { 190, {'P','K',0}, {'P','A','K',0}, 47614, 586 }, /* Pakistan */ + { 191, {'P','L',0}, {'P','O','L',0}, 47609, 616 }, /* Poland */ + { 192, {'P','A',0}, {'P','A','N',0}, 27082, 591 }, /* Panama */ + { 193, {'P','T',0}, {'P','R','T',0}, 47610, 620 }, /* Portugal */ + { 194, {'P','G',0}, {'P','N','G',0}, 20900, 598 }, /* Papua New Guinea */ + { 195, {'P','W',0}, {'P','L','W',0}, 21206, 585 }, /* Palau */ + { 196, {'G','W',0}, {'G','N','B',0}, 42483, 624 }, /* Guinea-Bissau */ + { 197, {'Q','A',0}, {'Q','A','T',0}, 47611, 634 }, /* Qatar */ + { 198, {'R','E',0}, {'R','E','U',0}, 47603, 638 }, /* Reunion */ + { 199, {'M','H',0}, {'M','H','L',0}, 21206, 584 }, /* Marshall Islands */ + { 200, {'R','O',0}, {'R','O','U',0}, 47609, 642 }, /* Romania */ + { 201, {'P','H',0}, {'P','H','L',0}, 47599, 608 }, /* Philippines */ + { 202, {'P','R',0}, {'P','R','I',0}, 10039880, 630 }, /* Puerto Rico */ + { 203, {'R','U',0}, {'R','U','S',0}, 47609, 643 }, /* Russia */ + { 204, {'R','W',0}, {'R','W','A',0}, 47603, 646 }, /* Rwanda */ + { 205, {'S','A',0}, {'S','A','U',0}, 47611, 682 }, /* Saudi Arabia */ + { 206, {'P','M',0}, {'S','P','M',0}, 23581, 666 }, /* St. Pierre and Miquelon */ + { 207, {'K','N',0}, {'K','N','A',0}, 10039880, 659 }, /* St. Kitts and Nevis */ + { 208, {'S','C',0}, {'S','Y','C',0}, 47603, 690 }, /* Seychelles */ + { 209, {'Z','A',0}, {'Z','A','F',0}, 10039883, 710 }, /* South Africa */ + { 210, {'S','N',0}, {'S','E','N',0}, 42483, 686 }, /* Senegal */ + { 212, {'S','I',0}, {'S','V','N',0}, 47610, 705 }, /* Slovenia */ + { 213, {'S','L',0}, {'S','L','E',0}, 42483, 694 }, /* Sierra Leone */ + { 214, {'S','M',0}, {'S','M','R',0}, 47610, 674 }, /* San Marino */ + { 215, {'S','G',0}, {'S','G','P',0}, 47599, 702 }, /* Singapore */ + { 216, {'S','O',0}, {'S','O','M',0}, 47603, 706 }, /* Somalia */ + { 217, {'E','S',0}, {'E','S','P',0}, 47610, 724 }, /* Spain */ + { 218, {'L','C',0}, {'L','C','A',0}, 10039880, 662 }, /* St. Lucia */ + { 219, {'S','D',0}, {'S','D','N',0}, 42487, 736 }, /* Sudan */ + { 220, {'S','J',0}, {'S','J','M',0}, 10039882, 744 }, /* Svalbard */ + { 221, {'S','E',0}, {'S','W','E',0}, 10039882, 752 }, /* Sweden */ + { 222, {'S','Y',0}, {'S','Y','R',0}, 47611, 760 }, /* Syria */ + { 223, {'C','H',0}, {'C','H','E',0}, 10210824, 756 }, /* Switzerland */ + { 224, {'A','E',0}, {'A','R','E',0}, 47611, 784 }, /* United Arab Emirates */ + { 225, {'T','T',0}, {'T','T','O',0}, 10039880, 780 }, /* Trinidad and Tobago */ + { 227, {'T','H',0}, {'T','H','A',0}, 47599, 764 }, /* Thailand */ + { 228, {'T','J',0}, {'T','J','K',0}, 47590, 762 }, /* Tajikistan */ + { 231, {'T','O',0}, {'T','O','N',0}, 26286, 776 }, /* Tonga */ + { 232, {'T','G',0}, {'T','G','O',0}, 42483, 768 }, /* Togo */ + { 233, {'S','T',0}, {'S','T','P',0}, 42484, 678 }, /* São Tomé and Príncipe */ + { 234, {'T','N',0}, {'T','U','N',0}, 42487, 788 }, /* Tunisia */ + { 235, {'T','R',0}, {'T','U','R',0}, 47611, 792 }, /* Turkey */ + { 236, {'T','V',0}, {'T','U','V',0}, 26286, 798 }, /* Tuvalu */ + { 237, {'T','W',0}, {'T','W','N',0}, 47600, 158 }, /* Taiwan */ + { 238, {'T','M',0}, {'T','K','M',0}, 47590, 795 }, /* Turkmenistan */ + { 239, {'T','Z',0}, {'T','Z','A',0}, 47603, 834 }, /* Tanzania */ + { 240, {'U','G',0}, {'U','G','A',0}, 47603, 800 }, /* Uganda */ + { 241, {'U','A',0}, {'U','K','R',0}, 47609, 804 }, /* Ukraine */ + { 242, {'G','B',0}, {'G','B','R',0}, 10039882, 826 }, /* United Kingdom */ + { 244, {'U','S',0}, {'U','S','A',0}, 23581, 840 }, /* United States */ + { 245, {'B','F',0}, {'B','F','A',0}, 42483, 854 }, /* Burkina Faso */ + { 246, {'U','Y',0}, {'U','R','Y',0}, 31396, 858 }, /* Uruguay */ + { 247, {'U','Z',0}, {'U','Z','B',0}, 47590, 860 }, /* Uzbekistan */ + { 248, {'V','C',0}, {'V','C','T',0}, 10039880, 670 }, /* St. Vincent and the Grenadines */ + { 249, {'V','E',0}, {'V','E','N',0}, 31396, 862 }, /* Bolivarian Republic of Venezuela */ + { 251, {'V','N',0}, {'V','N','M',0}, 47599, 704 }, /* Vietnam */ + { 252, {'V','I',0}, {'V','I','R',0}, 10039880, 850 }, /* Virgin Islands */ + { 253, {'V','A',0}, {'V','A','T',0}, 47610, 336 }, /* Vatican City */ + { 254, {'N','A',0}, {'N','A','M',0}, 10039883, 516 }, /* Namibia */ + { 257, {'E','H',0}, {'E','S','H',0}, 42487, 732 }, /* Western Sahara (disputed) */ + { 258, {'X','X',0}, {'X','X',0}, 161832256 }, /* Wake Island */ + { 259, {'W','S',0}, {'W','S','M',0}, 26286, 882 }, /* Samoa */ + { 260, {'S','Z',0}, {'S','W','Z',0}, 10039883, 748 }, /* Swaziland */ + { 261, {'Y','E',0}, {'Y','E','M',0}, 47611, 887 }, /* Yemen */ + { 263, {'Z','M',0}, {'Z','M','B',0}, 47603, 894 }, /* Zambia */ + { 264, {'Z','W',0}, {'Z','W','E',0}, 47603, 716 }, /* Zimbabwe */ + { 269, {'C','S',0}, {'S','C','G',0}, 47610, 891 }, /* Serbia and Montenegro (Former) */ + { 270, {'M','E',0}, {'M','N','E',0}, 47610, 499 }, /* Montenegro */ + { 271, {'R','S',0}, {'S','R','B',0}, 47610, 688 }, /* Serbia */ + { 273, {'C','W',0}, {'C','U','W',0}, 10039880, 531 }, /* Curaçao */ + { 276, {'S','S',0}, {'S','S','D',0}, 42487, 728 }, /* South Sudan */ + { 300, {'A','I',0}, {'A','I','A',0}, 10039880, 660 }, /* Anguilla */ + { 301, {'A','Q',0}, {'A','T','A',0}, 39070, 10 }, /* Antarctica */ + { 302, {'A','W',0}, {'A','B','W',0}, 10039880, 533 }, /* Aruba */ + { 303, {'X','X',0}, {'X','X',0}, 39070 }, /* Ascension Island */ + { 304, {'X','X',0}, {'X','X',0}, 10210825 }, /* Ashmore and Cartier Islands */ + { 305, {'X','X',0}, {'X','X',0}, 161832256 }, /* Baker Island */ + { 306, {'B','V',0}, {'B','V','T',0}, 39070, 74 }, /* Bouvet Island */ + { 307, {'K','Y',0}, {'C','Y','M',0}, 10039880, 136 }, /* Cayman Islands */ + { 308, {'X','X',0}, {'X','X',0}, 10210824, 0, LOCATION_BOTH }, /* Channel Islands */ + { 309, {'C','X',0}, {'C','X','R',0}, 12, 162 }, /* Christmas Island */ + { 310, {'X','X',0}, {'X','X',0}, 27114 }, /* Clipperton Island */ + { 311, {'C','C',0}, {'C','C','K',0}, 10210825, 166 }, /* Cocos (Keeling) Islands */ + { 312, {'C','K',0}, {'C','O','K',0}, 26286, 184 }, /* Cook Islands */ + { 313, {'X','X',0}, {'X','X',0}, 10210825 }, /* Coral Sea Islands */ + { 314, {'X','X',0}, {'X','X',0}, 114 }, /* Diego Garcia */ + { 315, {'F','K',0}, {'F','L','K',0}, 31396, 238 }, /* Falkland Islands (Islas Malvinas) */ + { 317, {'G','F',0}, {'G','U','F',0}, 31396, 254 }, /* French Guiana */ + { 318, {'P','F',0}, {'P','Y','F',0}, 26286, 258 }, /* French Polynesia */ + { 319, {'T','F',0}, {'A','T','F',0}, 39070, 260 }, /* French Southern and Antarctic Lands */ + { 321, {'G','P',0}, {'G','L','P',0}, 10039880, 312 }, /* Guadeloupe */ + { 322, {'G','U',0}, {'G','U','M',0}, 21206, 316 }, /* Guam */ + { 323, {'X','X',0}, {'X','X',0}, 39070 }, /* Guantanamo Bay */ + { 324, {'G','G',0}, {'G','G','Y',0}, 308, 831 }, /* Guernsey */ + { 325, {'H','M',0}, {'H','M','D',0}, 39070, 334 }, /* Heard Island and McDonald Islands */ + { 326, {'X','X',0}, {'X','X',0}, 161832256 }, /* Howland Island */ + { 327, {'X','X',0}, {'X','X',0}, 161832256 }, /* Jarvis Island */ + { 328, {'J','E',0}, {'J','E','Y',0}, 308, 832 }, /* Jersey */ + { 329, {'X','X',0}, {'X','X',0}, 161832256 }, /* Kingman Reef */ + { 330, {'M','Q',0}, {'M','T','Q',0}, 10039880, 474 }, /* Martinique */ + { 331, {'Y','T',0}, {'M','Y','T',0}, 47603, 175 }, /* Mayotte */ + { 332, {'M','S',0}, {'M','S','R',0}, 10039880, 500 }, /* Montserrat */ + { 333, {'A','N',0}, {'A','N','T',0}, 10039880, 530, LOCATION_BOTH }, /* Netherlands Antilles (Former) */ + { 334, {'N','C',0}, {'N','C','L',0}, 20900, 540 }, /* New Caledonia */ + { 335, {'N','U',0}, {'N','I','U',0}, 26286, 570 }, /* Niue */ + { 336, {'N','F',0}, {'N','F','K',0}, 10210825, 574 }, /* Norfolk Island */ + { 337, {'M','P',0}, {'M','N','P',0}, 21206, 580 }, /* Northern Mariana Islands */ + { 338, {'X','X',0}, {'X','X',0}, 161832256 }, /* Palmyra Atoll */ + { 339, {'P','N',0}, {'P','C','N',0}, 26286, 612 }, /* Pitcairn Islands */ + { 340, {'X','X',0}, {'X','X',0}, 337 }, /* Rota Island */ + { 341, {'X','X',0}, {'X','X',0}, 337 }, /* Saipan */ + { 342, {'G','S',0}, {'S','G','S',0}, 39070, 239 }, /* South Georgia and the South Sandwich Islands */ + { 343, {'S','H',0}, {'S','H','N',0}, 42483, 654 }, /* St. Helena */ + { 346, {'X','X',0}, {'X','X',0}, 337 }, /* Tinian Island */ + { 347, {'T','K',0}, {'T','K','L',0}, 26286, 772 }, /* Tokelau */ + { 348, {'X','X',0}, {'X','X',0}, 39070 }, /* Tristan da Cunha */ + { 349, {'T','C',0}, {'T','C','A',0}, 10039880, 796 }, /* Turks and Caicos Islands */ + { 351, {'V','G',0}, {'V','G','B',0}, 10039880, 92 }, /* Virgin Islands, British */ + { 352, {'W','F',0}, {'W','L','F',0}, 26286, 876 }, /* Wallis and Futuna */ + { 742, {'X','X',0}, {'X','X',0}, 39070, 0, LOCATION_REGION }, /* Africa */ + { 2129, {'X','X',0}, {'X','X',0}, 39070, 0, LOCATION_REGION }, /* Asia */ + { 10541, {'X','X',0}, {'X','X',0}, 39070, 0, LOCATION_REGION }, /* Europe */ + { 15126, {'I','M',0}, {'I','M','N',0}, 10039882, 833 }, /* Man, Isle of */ + { 19618, {'M','K',0}, {'M','K','D',0}, 47610, 807 }, /* Macedonia, Former Yugoslav Republic of */ + { 20900, {'X','X',0}, {'X','X',0}, 27114, 0, LOCATION_REGION }, /* Melanesia */ + { 21206, {'X','X',0}, {'X','X',0}, 27114, 0, LOCATION_REGION }, /* Micronesia */ + { 21242, {'X','X',0}, {'X','X',0}, 161832256 }, /* Midway Islands */ + { 23581, {'X','X',0}, {'X','X',0}, 10026358, 0, LOCATION_REGION }, /* Northern America */ + { 26286, {'X','X',0}, {'X','X',0}, 27114, 0, LOCATION_REGION }, /* Polynesia */ + { 27082, {'X','X',0}, {'X','X',0}, 161832257, 0, LOCATION_REGION }, /* Central America */ + { 27114, {'X','X',0}, {'X','X',0}, 39070, 0, LOCATION_REGION }, /* Oceania */ + { 30967, {'S','X',0}, {'S','X','M',0}, 10039880, 534 }, /* Sint Maarten (Dutch part) */ + { 31396, {'X','X',0}, {'X','X',0}, 161832257, 0, LOCATION_REGION }, /* South America */ + { 31706, {'M','F',0}, {'M','A','F',0}, 10039880, 663 }, /* Saint Martin (French part) */ + { 39070, {'X','X',0}, {'X','X',0}, 39070, 0, LOCATION_REGION }, /* World */ + { 42483, {'X','X',0}, {'X','X',0}, 742, 0, LOCATION_REGION }, /* Western Africa */ + { 42484, {'X','X',0}, {'X','X',0}, 742, 0, LOCATION_REGION }, /* Middle Africa */ + { 42487, {'X','X',0}, {'X','X',0}, 742, 0, LOCATION_REGION }, /* Northern Africa */ + { 47590, {'X','X',0}, {'X','X',0}, 2129, 0, LOCATION_REGION }, /* Central Asia */ + { 47599, {'X','X',0}, {'X','X',0}, 2129, 0, LOCATION_REGION }, /* South-Eastern Asia */ + { 47600, {'X','X',0}, {'X','X',0}, 2129, 0, LOCATION_REGION }, /* Eastern Asia */ + { 47603, {'X','X',0}, {'X','X',0}, 742, 0, LOCATION_REGION }, /* Eastern Africa */ + { 47609, {'X','X',0}, {'X','X',0}, 10541, 0, LOCATION_REGION }, /* Eastern Europe */ + { 47610, {'X','X',0}, {'X','X',0}, 10541, 0, LOCATION_REGION }, /* Southern Europe */ + { 47611, {'X','X',0}, {'X','X',0}, 2129, 0, LOCATION_REGION }, /* Middle East */ + { 47614, {'X','X',0}, {'X','X',0}, 2129, 0, LOCATION_REGION }, /* Southern Asia */ + { 7299303, {'T','L',0}, {'T','L','S',0}, 47599, 626 }, /* Democratic Republic of Timor-Leste */ + { 10026358, {'X','X',0}, {'X','X',0}, 39070, 0, LOCATION_REGION }, /* Americas */ + { 10028789, {'A','X',0}, {'A','L','A',0}, 10039882, 248 }, /* Ã…land Islands */ + { 10039880, {'X','X',0}, {'X','X',0}, 161832257, 0, LOCATION_REGION }, /* Caribbean */ + { 10039882, {'X','X',0}, {'X','X',0}, 10541, 0, LOCATION_REGION }, /* Northern Europe */ + { 10039883, {'X','X',0}, {'X','X',0}, 742, 0, LOCATION_REGION }, /* Southern Africa */ + { 10210824, {'X','X',0}, {'X','X',0}, 10541, 0, LOCATION_REGION }, /* Western Europe */ + { 10210825, {'X','X',0}, {'X','X',0}, 27114, 0, LOCATION_REGION }, /* Australia and New Zealand */ + { 161832015, {'B','L',0}, {'B','L','M',0}, 10039880, 652 }, /* Saint Barthélemy */ + { 161832256, {'U','M',0}, {'U','M','I',0}, 27114, 581 }, /* U.S. Minor Outlying Islands */ + { 161832257, {'X','X',0}, {'X','X',0}, 10026358, 0, LOCATION_REGION }, /* Latin America and the Caribbean */ +}; + +/* Callback function ptrs for EnumSystemCodePagesA/W */ +typedef struct { - static const WCHAR geoW[] = {'G','e','o',0}; - static const WCHAR nationW[] = {'N','a','t','i','o','n',0}; - static const WCHAR formatW[] = {'%','i',0}; - UNICODE_STRING nameW,keyW; - WCHAR bufferW[10]; - OBJECT_ATTRIBUTES attr; - HANDLE hkey; + CODEPAGE_ENUMPROCA procA; + CODEPAGE_ENUMPROCW procW; + DWORD dwFlags; +} ENUMSYSTEMCODEPAGES_CALLBACKS; - if(!(hkey = create_registry_key())) return FALSE; +/* Internal implementation of EnumSystemCodePagesA/W */ +static BOOL NLS_EnumSystemCodePages(ENUMSYSTEMCODEPAGES_CALLBACKS *lpProcs) +{ + WCHAR szNumber[5 + 1], szValue[MAX_PATH]; + HANDLE hKey; + BOOL bContinue = TRUE; + ULONG ulIndex = 0; - attr.Length = sizeof(attr); - attr.RootDirectory = hkey; - attr.ObjectName = &nameW; - attr.Attributes = 0; - attr.SecurityDescriptor = NULL; - attr.SecurityQualityOfService = NULL; - RtlInitUnicodeString( &nameW, geoW ); - RtlInitUnicodeString( &keyW, nationW ); + if (!lpProcs) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } - if (NtCreateKey( &hkey, KEY_ALL_ACCESS, &attr, 0, NULL, 0, NULL ) != STATUS_SUCCESS) + switch (lpProcs->dwFlags) + { + case CP_INSTALLED: + case CP_SUPPORTED: + break; + default: + SetLastError(ERROR_INVALID_FLAGS); + return FALSE; + } + hKey = NLS_RegOpenKey(0, L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\NLS\\CodePage"); + if (!hKey) { - NtClose(attr.RootDirectory); + WARN("NLS_RegOpenKey() failed\n"); return FALSE; } - sprintfW(bufferW, formatW, GeoID); - NtSetValueKey(hkey, &keyW, 0, REG_SZ, bufferW, (strlenW(bufferW) + 1) * sizeof(WCHAR)); - NtClose(attr.RootDirectory); - NtClose(hkey); - return TRUE; -} - -typedef struct -{ - union + while (bContinue) { - UILANGUAGE_ENUMPROCA procA; - UILANGUAGE_ENUMPROCW procW; - } u; - DWORD flags; - LONG_PTR param; -} ENUM_UILANG_CALLBACK; + if (NLS_RegEnumValue(hKey, ulIndex, szNumber, sizeof(szNumber), + szValue, sizeof(szValue))) + { + if ((lpProcs->dwFlags == CP_SUPPORTED)|| + ((lpProcs->dwFlags == CP_INSTALLED)&&(wcslen(szValue) > 2))) + { + if (lpProcs->procW) + { + bContinue = lpProcs->procW(szNumber); + } + else + { + char szNumberA[sizeof(szNumber)/sizeof(WCHAR)]; -static BOOL CALLBACK enum_uilang_proc_a( HMODULE hModule, LPCSTR type, - LPCSTR name, WORD LangID, LONG_PTR lParam ) -{ - ENUM_UILANG_CALLBACK *enum_uilang = (ENUM_UILANG_CALLBACK *)lParam; - char buf[20]; + WideCharToMultiByte(CP_ACP, 0, szNumber, -1, szNumberA, sizeof(szNumberA), 0, 0); + bContinue = lpProcs->procA(szNumberA); + } + } - sprintf(buf, "%08x", (UINT)LangID); - return enum_uilang->u.procA( buf, enum_uilang->param ); -} + ulIndex++; -static BOOL CALLBACK enum_uilang_proc_w( HMODULE hModule, LPCWSTR type, - LPCWSTR name, WORD LangID, LONG_PTR lParam ) -{ - static const WCHAR formatW[] = {'%','0','8','x',0}; - ENUM_UILANG_CALLBACK *enum_uilang = (ENUM_UILANG_CALLBACK *)lParam; - WCHAR buf[20]; + } else bContinue = FALSE; - sprintfW( buf, formatW, (UINT)LangID ); - return enum_uilang->u.procW( buf, enum_uilang->param ); + if (!bContinue) + break; + } + + if (hKey) + NtClose(hKey); + + return TRUE; } -/****************************************************************************** - * EnumUILanguagesA (KERNEL32.@) +/* + * @implemented */ -BOOL WINAPI EnumUILanguagesA(UILANGUAGE_ENUMPROCA pUILangEnumProc, DWORD dwFlags, LONG_PTR lParam) +BOOL +WINAPI +EnumSystemCodePagesW ( + CODEPAGE_ENUMPROCW lpCodePageEnumProc, + DWORD dwFlags + ) { - ENUM_UILANG_CALLBACK enum_uilang; - - TRACE("%p, %x, %lx\n", pUILangEnumProc, dwFlags, lParam); + ENUMSYSTEMCODEPAGES_CALLBACKS procs; - if(!pUILangEnumProc) { - SetLastError(ERROR_INVALID_PARAMETER); - return FALSE; - } - if(dwFlags) { - SetLastError(ERROR_INVALID_FLAGS); - return FALSE; - } + TRACE("(%p,0x%08X)\n", lpCodePageEnumProc, dwFlags); - enum_uilang.u.procA = pUILangEnumProc; - enum_uilang.flags = dwFlags; - enum_uilang.param = lParam; + procs.procA = NULL; + procs.procW = lpCodePageEnumProc; + procs.dwFlags = dwFlags; - EnumResourceLanguagesA( kernel32_handle, (LPCSTR)RT_STRING, - (LPCSTR)LOCALE_ILANGUAGE, enum_uilang_proc_a, - (LONG_PTR)&enum_uilang); - return TRUE; + return NLS_EnumSystemCodePages(lpCodePageEnumProc ? &procs : NULL); } -/****************************************************************************** - * EnumUILanguagesW (KERNEL32.@) + +/* + * @implemented */ -BOOL WINAPI EnumUILanguagesW(UILANGUAGE_ENUMPROCW pUILangEnumProc, DWORD dwFlags, LONG_PTR lParam) +BOOL +WINAPI +EnumSystemCodePagesA ( + CODEPAGE_ENUMPROCA lpCodePageEnumProc, + DWORD dwFlags + ) { - ENUM_UILANG_CALLBACK enum_uilang; - - TRACE("%p, %x, %lx\n", pUILangEnumProc, dwFlags, lParam); - + ENUMSYSTEMCODEPAGES_CALLBACKS procs; - if(!pUILangEnumProc) { - SetLastError(ERROR_INVALID_PARAMETER); - return FALSE; - } - if(dwFlags) { - SetLastError(ERROR_INVALID_FLAGS); - return FALSE; - } + TRACE("(%p,0x%08X)\n", lpCodePageEnumProc, dwFlags); - enum_uilang.u.procW = pUILangEnumProc; - enum_uilang.flags = dwFlags; - enum_uilang.param = lParam; + procs.procA = lpCodePageEnumProc; + procs.procW = NULL; + procs.dwFlags = dwFlags; - EnumResourceLanguagesW( kernel32_handle, (LPCWSTR)RT_STRING, - (LPCWSTR)LOCALE_ILANGUAGE, enum_uilang_proc_w, - (LONG_PTR)&enum_uilang); - return TRUE; + return NLS_EnumSystemCodePages(lpCodePageEnumProc ? &procs : NULL); } + static int #ifdef __REACTOS__ NLS_GetGeoFriendlyName(GEOID Location, LPWSTR szFriendlyName, int cchData, LANGID lang) @@ -4080,3 +4036,52 @@ INT WINAPI GetGeoInfoA(GEOID geoid, GEOTYPE geotype, LPSTR data, int data_len, L SetLastError(ERROR_INSUFFICIENT_BUFFER); return data_len < len ? 0 : len; } + +/****************************************************************************** + * EnumSystemGeoID (KERNEL32.@) + * + * Call a users function for every location available on the system. + * + * PARAMS + * geoclass [I] Type of information desired (SYSGEOTYPE enum from "winnls.h") + * parent [I] GEOID for the parent + * enumproc [I] Callback function to call for each location + * + * RETURNS + * Success: TRUE. + * Failure: FALSE. Use GetLastError() to determine the cause. + */ +BOOL WINAPI EnumSystemGeoID(GEOCLASS geoclass, GEOID parent, GEO_ENUMPROC enumproc) +{ + INT i; + + TRACE("(%d, %d, %p)\n", geoclass, parent, enumproc); + + if (!enumproc) { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + if (geoclass != GEOCLASS_NATION && geoclass != GEOCLASS_REGION) { + SetLastError(ERROR_INVALID_FLAGS); + return FALSE; + } + + for (i = 0; i < sizeof(geoinfodata)/sizeof(struct geoinfo_t); i++) { + const struct geoinfo_t *ptr = &geoinfodata[i]; + + if (geoclass == GEOCLASS_NATION && (ptr->kind == LOCATION_REGION)) + continue; + + if (geoclass == GEOCLASS_REGION && (ptr->kind == LOCATION_NATION)) + continue; + + if (parent && ptr->parent != parent) + continue; + + if (!enumproc(ptr->id)) + return TRUE; + } + + return TRUE; +} From b01b6926a4b06c128ee5075a813a8a386e40d10e Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 25 Apr 2024 16:16:41 +0300 Subject: [PATCH 068/182] [KERNEL32] locale.c: Reduce diff to wine-1.9.17 --- dll/win32/kernel32/winnls/string/locale.c | 2260 ++++++++++++++++++++- 1 file changed, 2174 insertions(+), 86 deletions(-) diff --git a/dll/win32/kernel32/winnls/string/locale.c b/dll/win32/kernel32/winnls/string/locale.c index c19371fde53..89f063c9136 100644 --- a/dll/win32/kernel32/winnls/string/locale.c +++ b/dll/win32/kernel32/winnls/string/locale.c @@ -3,7 +3,7 @@ * * Copyright 1995 Martin von Loewis * Copyright 1998 David Lee Lambert - * Copyright 2000 Julio César G√°zquez + * Copyright 2000 Julio César Gázquez * Copyright 2002 Alexandre Julliard for CodeWeavers * * This library is free software; you can redistribute it and/or @@ -151,6 +151,7 @@ struct locale_name /* locale ids corresponding to the various Unix locale parameters */ static LCID lcid_LC_COLLATE; static LCID lcid_LC_CTYPE; +static LCID lcid_LC_MESSAGES; static LCID lcid_LC_MONETARY; static LCID lcid_LC_NUMERIC; static LCID lcid_LC_TIME; @@ -265,6 +266,13 @@ static inline void strcpynAtoW( WCHAR *dst, const char *src, size_t n ) } #endif +#ifndef __REACTOS__ +static inline unsigned short get_table_entry( const unsigned short *table, WCHAR ch ) +{ + return table[table[table[ch >> 8] + ((ch >> 4) & 0x0f)] + (ch & 0xf)]; +} +#endif // !__REACTOS__ + /*********************************************************************** * get_lcid_codepage * @@ -278,6 +286,45 @@ static inline UINT get_lcid_codepage( LCID lcid ) return ret; } +#ifndef __REACTOS__ +/*********************************************************************** + * get_codepage_table + * + * Find the table for a given codepage, handling CP_ACP etc. pseudo-codepages + */ +static const union cptable *get_codepage_table( unsigned int codepage ) +{ + const union cptable *ret = NULL; + + assert( ansi_cptable ); /* init must have been done already */ + + switch(codepage) + { + case CP_ACP: + return ansi_cptable; + case CP_OEMCP: + return oem_cptable; + case CP_MACCP: + return mac_cptable; + case CP_UTF7: + case CP_UTF8: + break; + case CP_THREAD_ACP: + if (NtCurrentTeb()->CurrentLocale == GetUserDefaultLCID()) return ansi_cptable; + codepage = get_lcid_codepage( NtCurrentTeb()->CurrentLocale ); + if (!codepage) return ansi_cptable; + /* fall through */ + default: + if (codepage == ansi_cptable->info.codepage) return ansi_cptable; + if (codepage == oem_cptable->info.codepage) return oem_cptable; + if (codepage == mac_cptable->info.codepage) return mac_cptable; + ret = wine_cp_get_table( codepage ); + break; + } + return ret; +} +#endif // !__REACTOS__ + #if (WINVER >= 0x0600) /*********************************************************************** * charset_cmp (internal) @@ -733,6 +780,368 @@ static inline HANDLE create_registry_key(void) return hkey; } + +#ifndef __REACTOS__ +/* update the registry settings for a given locale parameter */ +/* return TRUE if an update was needed */ +static BOOL locale_update_registry( HKEY hkey, const WCHAR *name, LCID lcid, + const LCTYPE *values, UINT nb_values ) +{ + static const WCHAR formatW[] = { '%','0','8','x',0 }; + WCHAR bufferW[40]; + UNICODE_STRING nameW; + DWORD count, i; + + RtlInitUnicodeString( &nameW, name ); + count = sizeof(bufferW); + if (!NtQueryValueKey(hkey, &nameW, KeyValuePartialInformation, bufferW, count, &count)) + { + const KEY_VALUE_PARTIAL_INFORMATION *info = (KEY_VALUE_PARTIAL_INFORMATION *)bufferW; + LPCWSTR text = (LPCWSTR)info->Data; + + if (strtoulW( text, NULL, 16 ) == lcid) return FALSE; /* already set correctly */ + TRACE( "updating registry, locale %s changed %s -> %08x\n", + debugstr_w(name), debugstr_w(text), lcid ); + } + else TRACE( "updating registry, locale %s changed none -> %08x\n", debugstr_w(name), lcid ); + sprintfW( bufferW, formatW, lcid ); + NtSetValueKey( hkey, &nameW, 0, REG_SZ, bufferW, (strlenW(bufferW) + 1) * sizeof(WCHAR) ); + + for (i = 0; i < nb_values; i++) + { + GetLocaleInfoW( lcid, values[i] | LOCALE_NOUSEROVERRIDE, bufferW, + sizeof(bufferW)/sizeof(WCHAR) ); + SetLocaleInfoW( lcid, values[i], bufferW ); + } + return TRUE; +} + + +/*********************************************************************** + * LOCALE_InitRegistry + * + * Update registry contents on startup if the user locale has changed. + * This simulates the action of the Windows control panel. + */ +void LOCALE_InitRegistry(void) +{ + static const WCHAR acpW[] = {'A','C','P',0}; + static const WCHAR oemcpW[] = {'O','E','M','C','P',0}; + static const WCHAR maccpW[] = {'M','A','C','C','P',0}; + static const WCHAR localeW[] = {'L','o','c','a','l','e',0}; + static const WCHAR lc_ctypeW[] = { 'L','C','_','C','T','Y','P','E',0 }; + static const WCHAR lc_monetaryW[] = { 'L','C','_','M','O','N','E','T','A','R','Y',0 }; + static const WCHAR lc_numericW[] = { 'L','C','_','N','U','M','E','R','I','C',0 }; + static const WCHAR lc_timeW[] = { 'L','C','_','T','I','M','E',0 }; + static const WCHAR lc_measurementW[] = { 'L','C','_','M','E','A','S','U','R','E','M','E','N','T',0 }; + static const WCHAR lc_telephoneW[] = { 'L','C','_','T','E','L','E','P','H','O','N','E',0 }; + static const WCHAR lc_paperW[] = { 'L','C','_','P','A','P','E','R',0}; + static const struct + { + LPCWSTR name; + USHORT value; + } update_cp_values[] = { + { acpW, LOCALE_IDEFAULTANSICODEPAGE }, + { oemcpW, LOCALE_IDEFAULTCODEPAGE }, + { maccpW, LOCALE_IDEFAULTMACCODEPAGE } + }; + static const LCTYPE lc_messages_values[] = { + LOCALE_SABBREVLANGNAME, + LOCALE_SCOUNTRY, + LOCALE_SLIST }; + static const LCTYPE lc_monetary_values[] = { + LOCALE_SCURRENCY, + LOCALE_ICURRENCY, + LOCALE_INEGCURR, + LOCALE_ICURRDIGITS, + LOCALE_ILZERO, + LOCALE_SMONDECIMALSEP, + LOCALE_SMONGROUPING, + LOCALE_SMONTHOUSANDSEP }; + static const LCTYPE lc_numeric_values[] = { + LOCALE_SDECIMAL, + LOCALE_STHOUSAND, + LOCALE_IDIGITS, + LOCALE_IDIGITSUBSTITUTION, + LOCALE_SNATIVEDIGITS, + LOCALE_INEGNUMBER, + LOCALE_SNEGATIVESIGN, + LOCALE_SPOSITIVESIGN, + LOCALE_SGROUPING }; + static const LCTYPE lc_time_values[] = { + LOCALE_S1159, + LOCALE_S2359, + LOCALE_STIME, + LOCALE_ITIME, + LOCALE_ITLZERO, + LOCALE_SSHORTDATE, + LOCALE_SLONGDATE, + LOCALE_SDATE, + LOCALE_ITIMEMARKPOSN, + LOCALE_ICALENDARTYPE, + LOCALE_IFIRSTDAYOFWEEK, + LOCALE_IFIRSTWEEKOFYEAR, + LOCALE_STIMEFORMAT, + LOCALE_SYEARMONTH, + LOCALE_IDATE }; + static const LCTYPE lc_measurement_values[] = { LOCALE_IMEASURE }; + static const LCTYPE lc_telephone_values[] = { LOCALE_ICOUNTRY }; + static const LCTYPE lc_paper_values[] = { LOCALE_IPAPERSIZE }; + + UNICODE_STRING nameW; + WCHAR bufferW[80]; + DWORD count, i; + HANDLE hkey; + LCID lcid = GetUserDefaultLCID(); + + if (!(hkey = create_registry_key())) + return; /* don't do anything if we can't create the registry key */ + + locale_update_registry( hkey, localeW, lcid_LC_MESSAGES, lc_messages_values, + sizeof(lc_messages_values)/sizeof(lc_messages_values[0]) ); + locale_update_registry( hkey, lc_monetaryW, lcid_LC_MONETARY, lc_monetary_values, + sizeof(lc_monetary_values)/sizeof(lc_monetary_values[0]) ); + locale_update_registry( hkey, lc_numericW, lcid_LC_NUMERIC, lc_numeric_values, + sizeof(lc_numeric_values)/sizeof(lc_numeric_values[0]) ); + locale_update_registry( hkey, lc_timeW, lcid_LC_TIME, lc_time_values, + sizeof(lc_time_values)/sizeof(lc_time_values[0]) ); + locale_update_registry( hkey, lc_measurementW, lcid_LC_MEASUREMENT, lc_measurement_values, + sizeof(lc_measurement_values)/sizeof(lc_measurement_values[0]) ); + locale_update_registry( hkey, lc_telephoneW, lcid_LC_TELEPHONE, lc_telephone_values, + sizeof(lc_telephone_values)/sizeof(lc_telephone_values[0]) ); + locale_update_registry( hkey, lc_paperW, lcid_LC_PAPER, lc_paper_values, + sizeof(lc_paper_values)/sizeof(lc_paper_values[0]) ); + + if (locale_update_registry( hkey, lc_ctypeW, lcid_LC_CTYPE, NULL, 0 )) + { + static const WCHAR codepageW[] = + {'\\','R','e','g','i','s','t','r','y','\\','M','a','c','h','i','n','e','\\','S','y','s','t','e','m','\\', + 'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\', + 'C','o','n','t','r','o','l','\\','N','l','s','\\','C','o','d','e','p','a','g','e',0}; + + OBJECT_ATTRIBUTES attr; + HANDLE nls_key; + DWORD len = 14; + + RtlInitUnicodeString( &nameW, codepageW ); + InitializeObjectAttributes( &attr, &nameW, 0, 0, NULL ); + while (codepageW[len]) + { + nameW.Length = len * sizeof(WCHAR); + if (NtCreateKey( &nls_key, KEY_ALL_ACCESS, &attr, 0, NULL, 0, NULL )) break; + NtClose( nls_key ); + len++; + while (codepageW[len] && codepageW[len] != '\\') len++; + } + nameW.Length = len * sizeof(WCHAR); + if (!NtCreateKey( &nls_key, KEY_ALL_ACCESS, &attr, 0, NULL, 0, NULL )) + { + for (i = 0; i < sizeof(update_cp_values)/sizeof(update_cp_values[0]); i++) + { + count = GetLocaleInfoW( lcid, update_cp_values[i].value | LOCALE_NOUSEROVERRIDE, + bufferW, sizeof(bufferW)/sizeof(WCHAR) ); + RtlInitUnicodeString( &nameW, update_cp_values[i].name ); + NtSetValueKey( nls_key, &nameW, 0, REG_SZ, bufferW, count * sizeof(WCHAR) ); + } + NtClose( nls_key ); + } + } + + NtClose( hkey ); +} + + +#ifdef __APPLE__ +/*********************************************************************** + * get_mac_locale + * + * Return a locale identifier string reflecting the Mac locale, in a form + * that parse_locale_name() will understand. So, strip out unusual + * things like script, variant, etc. Or, rather, just construct it as + * [_].UTF-8. + */ +static const char* get_mac_locale(void) +{ + static char mac_locale[50]; + + if (!mac_locale[0]) + { + CFLocaleRef locale = CFLocaleCopyCurrent(); + CFStringRef lang = CFLocaleGetValue( locale, kCFLocaleLanguageCode ); + CFStringRef country = CFLocaleGetValue( locale, kCFLocaleCountryCode ); + CFStringRef locale_string; + + if (country) + locale_string = CFStringCreateWithFormat(NULL, NULL, CFSTR("%@_%@"), lang, country); + else + locale_string = CFStringCreateCopy(NULL, lang); + + CFStringGetCString(locale_string, mac_locale, sizeof(mac_locale), kCFStringEncodingUTF8); + strcat(mac_locale, ".UTF-8"); + + CFRelease(locale); + CFRelease(locale_string); + } + + return mac_locale; +} + + +/*********************************************************************** + * has_env + */ +static BOOL has_env(const char* name) +{ + const char* value = getenv( name ); + return value && value[0]; +} +#endif + + +/*********************************************************************** + * get_locale + * + * Get the locale identifier for a given category. On most platforms, + * this is just a thin wrapper around setlocale(). On OS X, though, it + * is common for the Mac locale settings to not be supported by the C + * library. So, we sometimes override the result with the Mac locale. + */ +static const char* get_locale(int category, const char* category_name) +{ + const char* ret = setlocale(category, NULL); + +#ifdef __APPLE__ + /* If LC_ALL is set, respect it as a user override. + If LC_* is set, respect it as a user override, except if it's LC_CTYPE + and equal to UTF-8. That's because, when the Mac locale isn't supported + by the C library, Terminal.app sets LC_CTYPE=UTF-8 and doesn't set LANG. + parse_locale_name() doesn't handle that properly, so we override that + with the Mac locale (which uses UTF-8 for the charset, anyway). + Otherwise: + For LC_MESSAGES, we override the C library because the user language + setting is separate from the locale setting on which LANG was based. + If the C library didn't get anything better from LANG than C or POSIX, + override that. That probably means the Mac locale isn't supported by + the C library. */ + if (!has_env( "LC_ALL" ) && + ((category == LC_CTYPE && !strcmp( ret, "UTF-8" )) || + (!has_env( category_name ) && + (category == LC_MESSAGES || !strcmp( ret, "C" ) || !strcmp( ret, "POSIX" ))))) + { + const char* override = get_mac_locale(); + + if (category == LC_MESSAGES) + { + /* Retrieve the preferred language as chosen in System Preferences. */ + static char messages_locale[50]; + + if (!messages_locale[0]) + { + CFArrayRef preferred_langs = CFLocaleCopyPreferredLanguages(); + if (preferred_langs && CFArrayGetCount( preferred_langs )) + { + CFStringRef preferred_lang = CFArrayGetValueAtIndex( preferred_langs, 0 ); + CFDictionaryRef components = CFLocaleCreateComponentsFromLocaleIdentifier( NULL, preferred_lang ); + if (components) + { + CFStringRef lang = CFDictionaryGetValue( components, kCFLocaleLanguageCode ); + CFStringRef country = CFDictionaryGetValue( components, kCFLocaleCountryCode ); + CFLocaleRef locale = NULL; + CFStringRef locale_string; + + if (!country) + { + locale = CFLocaleCopyCurrent(); + country = CFLocaleGetValue( locale, kCFLocaleCountryCode ); + } + + if (country) + locale_string = CFStringCreateWithFormat( NULL, NULL, CFSTR("%@_%@"), lang, country ); + else + locale_string = CFStringCreateCopy( NULL, lang ); + CFStringGetCString( locale_string, messages_locale, sizeof(messages_locale), kCFStringEncodingUTF8 ); + strcat( messages_locale, ".UTF-8" ); + + CFRelease( locale_string ); + if (locale) CFRelease( locale ); + CFRelease( components ); + } + } + if (preferred_langs) + CFRelease( preferred_langs ); + } + + if (messages_locale[0]) + override = messages_locale; + } + + TRACE( "%s is %s; overriding with %s\n", category_name, debugstr_a(ret), debugstr_a(override) ); + ret = override; + } +#endif + + return ret; +} + + +/*********************************************************************** + * setup_unix_locales + */ +static UINT setup_unix_locales(void) +{ + struct locale_name locale_name; + WCHAR buffer[128], ctype_buff[128]; + const char *locale; + UINT unix_cp = 0; + + if ((locale = get_locale( LC_CTYPE, "LC_CTYPE" ))) + { + strcpynAtoW( ctype_buff, locale, sizeof(ctype_buff)/sizeof(WCHAR) ); + parse_locale_name( ctype_buff, &locale_name ); + lcid_LC_CTYPE = locale_name.lcid; + unix_cp = locale_name.codepage; + } + if (!lcid_LC_CTYPE) /* this one needs a default value */ + lcid_LC_CTYPE = MAKELCID( MAKELANGID(LANG_ENGLISH,SUBLANG_DEFAULT), SORT_DEFAULT ); + + TRACE( "got lcid %04x (%d matches) for LC_CTYPE=%s\n", + locale_name.lcid, locale_name.matches, debugstr_a(locale) ); + +#define GET_UNIX_LOCALE(cat) do \ + if ((locale = get_locale( cat, #cat ))) \ + { \ + strcpynAtoW( buffer, locale, sizeof(buffer)/sizeof(WCHAR) ); \ + if (!strcmpW( buffer, ctype_buff )) lcid_##cat = lcid_LC_CTYPE; \ + else { \ + parse_locale_name( buffer, &locale_name ); \ + lcid_##cat = locale_name.lcid; \ + TRACE( "got lcid %04x (%d matches) for " #cat "=%s\n", \ + locale_name.lcid, locale_name.matches, debugstr_a(locale) ); \ + } \ + } while (0) + + GET_UNIX_LOCALE( LC_COLLATE ); + GET_UNIX_LOCALE( LC_MESSAGES ); + GET_UNIX_LOCALE( LC_MONETARY ); + GET_UNIX_LOCALE( LC_NUMERIC ); + GET_UNIX_LOCALE( LC_TIME ); +#ifdef LC_PAPER + GET_UNIX_LOCALE( LC_PAPER ); +#endif +#ifdef LC_MEASUREMENT + GET_UNIX_LOCALE( LC_MEASUREMENT ); +#endif +#ifdef LC_TELEPHONE + GET_UNIX_LOCALE( LC_TELEPHONE ); +#endif + +#undef GET_UNIX_LOCALE + + return unix_cp; +} +#endif // !__REACTOS__ + + /*********************************************************************** * GetUserDefaultLangID (KERNEL32.@) * @@ -804,6 +1213,104 @@ LCID WINAPI GetSystemDefaultLCID(void) return lcid; } +#ifndef __REACTOS__ +/*********************************************************************** + * GetSystemDefaultLocaleName (KERNEL32.@) + */ +INT WINAPI GetSystemDefaultLocaleName(LPWSTR localename, INT len) +{ + LCID lcid = GetSystemDefaultLCID(); + return LCIDToLocaleName(lcid, localename, len, 0); +} + +static BOOL get_dummy_preferred_ui_language( DWORD flags, ULONG *count, WCHAR *buffer, ULONG *size ) +{ + LCTYPE type; + int lsize; + + FIXME("(0x%x %p %p %p) returning a dummy value (current locale)\n", flags, count, buffer, size); + + if (flags & MUI_LANGUAGE_ID) + type = LOCALE_ILANGUAGE; + else + type = LOCALE_SNAME; + + lsize = GetLocaleInfoW(LOCALE_SYSTEM_DEFAULT, type, NULL, 0); + if (!lsize) + { + /* keep last error from callee */ + return FALSE; + } + lsize++; + if (!*size) + { + *size = lsize; + *count = 1; + return TRUE; + } + + if (lsize > *size) + { + SetLastError(ERROR_INSUFFICIENT_BUFFER); + return FALSE; + } + + if (!GetLocaleInfoW(LOCALE_SYSTEM_DEFAULT, type, buffer, *size)) + { + /* keep last error from callee */ + return FALSE; + } + + buffer[lsize-1] = 0; + *size = lsize; + *count = 1; + TRACE("returned variable content: %d, \"%s\", %d\n", *count, debugstr_w(buffer), *size); + return TRUE; + +} + +/*********************************************************************** + * GetSystemPreferredUILanguages (KERNEL32.@) + */ +BOOL WINAPI GetSystemPreferredUILanguages(DWORD flags, ULONG* count, WCHAR* buffer, ULONG* size) +{ + if (flags & ~(MUI_LANGUAGE_NAME | MUI_LANGUAGE_ID | MUI_MACHINE_LANGUAGE_SETTINGS)) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + if ((flags & MUI_LANGUAGE_NAME) && (flags & MUI_LANGUAGE_ID)) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + if (*size && !buffer) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + return get_dummy_preferred_ui_language( flags, count, buffer, size ); +} + +/*********************************************************************** + * SetThreadPreferredUILanguages (KERNEL32.@) + */ +BOOL WINAPI SetThreadPreferredUILanguages( DWORD flags, PCZZWSTR buffer, PULONG count ) +{ + FIXME( "%u, %p, %p\n", flags, buffer, count ); + return TRUE; +} + +/*********************************************************************** + * GetThreadPreferredUILanguages (KERNEL32.@) + */ +BOOL WINAPI GetThreadPreferredUILanguages( DWORD flags, ULONG *count, WCHAR *buf, ULONG *size ) +{ + FIXME( "%08x, %p, %p %p\n", flags, count, buf, size ); + return get_dummy_preferred_ui_language( flags, count, buf, size ); +} +#endif // !__REACTOS__ /*********************************************************************** * GetUserDefaultUILanguage (KERNEL32.@) @@ -1284,7 +1791,7 @@ GetLocaleInfoEx( return 0; } -BOOL +BOOL WINAPI IsValidLocaleName( LPCWSTR lpLocaleName @@ -1294,7 +1801,7 @@ IsValidLocaleName( return TRUE; } -INT +INT WINAPI GetUserDefaultLocaleName( LPWSTR lpLocaleName, @@ -1357,97 +1864,859 @@ BOOL WINAPI SetLocaleInfoA(LCID lcid, LCTYPE lctype, LPCSTR data) } -/****************************************************************************** - * SetLocaleInfoW (KERNEL32.@) +/****************************************************************************** + * SetLocaleInfoW (KERNEL32.@) + * + * See SetLocaleInfoA. + */ +BOOL WINAPI SetLocaleInfoW( LCID lcid, LCTYPE lctype, LPCWSTR data ) +{ + struct registry_value *value; + static const WCHAR intlW[] = {'i','n','t','l',0 }; + UNICODE_STRING valueW; + NTSTATUS status; + HANDLE hkey; + + lctype &= 0xffff; + value = get_locale_registry_value( lctype ); + + if (!data || !value) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; + } + + if (lctype == LOCALE_IDATE || lctype == LOCALE_ILDATE) + { + SetLastError( ERROR_INVALID_FLAGS ); + return FALSE; + } + + TRACE("setting %x (%s) to %s\n", lctype, debugstr_w(value->name), debugstr_w(data) ); + + /* FIXME: should check that data to set is sane */ + + /* FIXME: profile functions should map to registry */ + WriteProfileStringW( intlW, value->name, data ); + + if (!(hkey = create_registry_key())) return FALSE; + RtlInitUnicodeString( &valueW, value->name ); + status = NtSetValueKey( hkey, &valueW, 0, REG_SZ, (PVOID)data, (strlenW(data)+1)*sizeof(WCHAR) ); + + RtlEnterCriticalSection( &cache_section ); + HeapFree( GetProcessHeap(), 0, value->cached_value ); + value->cached_value = NULL; + RtlLeaveCriticalSection( &cache_section ); + + if (lctype == LOCALE_SSHORTDATE || lctype == LOCALE_SLONGDATE) + { + /* Set I-value from S value */ + WCHAR *lpD, *lpM, *lpY; + WCHAR szBuff[2]; + + lpD = strrchrW(data, 'd'); + lpM = strrchrW(data, 'M'); + lpY = strrchrW(data, 'y'); + + if (lpD <= lpM) + { + szBuff[0] = '1'; /* D-M-Y */ + } + else + { + if (lpY <= lpM) + szBuff[0] = '2'; /* Y-M-D */ + else + szBuff[0] = '0'; /* M-D-Y */ + } + + szBuff[1] = '\0'; + + if (lctype == LOCALE_SSHORTDATE) + lctype = LOCALE_IDATE; + else + lctype = LOCALE_ILDATE; + + value = get_locale_registry_value( lctype ); + + WriteProfileStringW( intlW, value->name, szBuff ); + + RtlInitUnicodeString( &valueW, value->name ); + status = NtSetValueKey( hkey, &valueW, 0, REG_SZ, szBuff, sizeof(szBuff) ); + + RtlEnterCriticalSection( &cache_section ); + HeapFree( GetProcessHeap(), 0, value->cached_value ); + value->cached_value = NULL; + RtlLeaveCriticalSection( &cache_section ); + } + + NtClose( hkey ); + + if (status) SetLastError( RtlNtStatusToDosError(status) ); + return !status; +} + + +#ifndef __REACTOS__ +/****************************************************************************** + * GetACP (KERNEL32.@) + * + * Get the current Ansi code page Id for the system. + * + * PARAMS + * None. + * + * RETURNS + * The current Ansi code page identifier for the system. + */ +UINT WINAPI GetACP(void) +{ + assert( ansi_cptable ); + return ansi_cptable->info.codepage; +} + + +/****************************************************************************** + * SetCPGlobal (KERNEL32.@) + * + * Set the current Ansi code page Id for the system. + * + * PARAMS + * acp [I] code page ID to be the new ACP. + * + * RETURNS + * The previous ACP. + */ +UINT WINAPI SetCPGlobal( UINT acp ) +{ + UINT ret = GetACP(); + const union cptable *new_cptable = wine_cp_get_table( acp ); + + if (new_cptable) ansi_cptable = new_cptable; + return ret; +} + + +/*********************************************************************** + * GetOEMCP (KERNEL32.@) + * + * Get the current OEM code page Id for the system. + * + * PARAMS + * None. + * + * RETURNS + * The current OEM code page identifier for the system. + */ +UINT WINAPI GetOEMCP(void) +{ + assert( oem_cptable ); + return oem_cptable->info.codepage; +} + + +/*********************************************************************** + * IsValidCodePage (KERNEL32.@) + * + * Determine if a given code page identifier is valid. + * + * PARAMS + * codepage [I] Code page Id to verify. + * + * RETURNS + * TRUE, If codepage is valid and available on the system, + * FALSE otherwise. + */ +BOOL WINAPI IsValidCodePage( UINT codepage ) +{ + switch(codepage) { + case CP_UTF7: + case CP_UTF8: + return TRUE; + default: + return wine_cp_get_table( codepage ) != NULL; + } +} + + +/*********************************************************************** + * IsDBCSLeadByteEx (KERNEL32.@) + * + * Determine if a character is a lead byte in a given code page. + * + * PARAMS + * codepage [I] Code page for the test. + * testchar [I] Character to test + * + * RETURNS + * TRUE, if testchar is a lead byte in codepage, + * FALSE otherwise. + */ +BOOL WINAPI IsDBCSLeadByteEx( UINT codepage, BYTE testchar ) +{ + const union cptable *table = get_codepage_table( codepage ); + return table && wine_is_dbcs_leadbyte( table, testchar ); +} + + +/*********************************************************************** + * IsDBCSLeadByte (KERNEL32.@) + * IsDBCSLeadByte (KERNEL.207) + * + * Determine if a character is a lead byte. + * + * PARAMS + * testchar [I] Character to test + * + * RETURNS + * TRUE, if testchar is a lead byte in the ANSI code page, + * FALSE otherwise. + */ +BOOL WINAPI IsDBCSLeadByte( BYTE testchar ) +{ + if (!ansi_cptable) return FALSE; + return wine_is_dbcs_leadbyte( ansi_cptable, testchar ); +} + + +/*********************************************************************** + * GetCPInfo (KERNEL32.@) + * + * Get information about a code page. + * + * PARAMS + * codepage [I] Code page number + * cpinfo [O] Destination for code page information + * + * RETURNS + * Success: TRUE. cpinfo is updated with the information about codepage. + * Failure: FALSE, if codepage is invalid or cpinfo is NULL. + */ +BOOL WINAPI GetCPInfo( UINT codepage, LPCPINFO cpinfo ) +{ + const union cptable *table; + + if (!cpinfo) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; + } + + if (!(table = get_codepage_table( codepage ))) + { + switch(codepage) + { + case CP_UTF7: + case CP_UTF8: + cpinfo->DefaultChar[0] = 0x3f; + cpinfo->DefaultChar[1] = 0; + cpinfo->LeadByte[0] = cpinfo->LeadByte[1] = 0; + cpinfo->MaxCharSize = (codepage == CP_UTF7) ? 5 : 4; + return TRUE; + } + + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; + } + if (table->info.def_char & 0xff00) + { + cpinfo->DefaultChar[0] = (table->info.def_char & 0xff00) >> 8; + cpinfo->DefaultChar[1] = table->info.def_char & 0x00ff; + } + else + { + cpinfo->DefaultChar[0] = table->info.def_char & 0xff; + cpinfo->DefaultChar[1] = 0; + } + if ((cpinfo->MaxCharSize = table->info.char_size) == 2) + memcpy( cpinfo->LeadByte, table->dbcs.lead_bytes, sizeof(cpinfo->LeadByte) ); + else + cpinfo->LeadByte[0] = cpinfo->LeadByte[1] = 0; + + return TRUE; +} + +/*********************************************************************** + * GetCPInfoExA (KERNEL32.@) + * + * Get extended information about a code page. + * + * PARAMS + * codepage [I] Code page number + * dwFlags [I] Reserved, must to 0. + * cpinfo [O] Destination for code page information + * + * RETURNS + * Success: TRUE. cpinfo is updated with the information about codepage. + * Failure: FALSE, if codepage is invalid or cpinfo is NULL. + */ +BOOL WINAPI GetCPInfoExA( UINT codepage, DWORD dwFlags, LPCPINFOEXA cpinfo ) +{ + CPINFOEXW cpinfoW; + + if (!GetCPInfoExW( codepage, dwFlags, &cpinfoW )) + return FALSE; + + /* the layout is the same except for CodePageName */ + memcpy(cpinfo, &cpinfoW, sizeof(CPINFOEXA)); + WideCharToMultiByte(CP_ACP, 0, cpinfoW.CodePageName, -1, cpinfo->CodePageName, sizeof(cpinfo->CodePageName), NULL, NULL); + return TRUE; +} + +/*********************************************************************** + * GetCPInfoExW (KERNEL32.@) + * + * Unicode version of GetCPInfoExA. + */ +BOOL WINAPI GetCPInfoExW( UINT codepage, DWORD dwFlags, LPCPINFOEXW cpinfo ) +{ + if (!GetCPInfo( codepage, (LPCPINFO)cpinfo )) + return FALSE; + + switch(codepage) + { + case CP_UTF7: + { + static const WCHAR utf7[] = {'U','n','i','c','o','d','e',' ','(','U','T','F','-','7',')',0}; + + cpinfo->CodePage = CP_UTF7; + cpinfo->UnicodeDefaultChar = 0x3f; + strcpyW(cpinfo->CodePageName, utf7); + break; + } + + case CP_UTF8: + { + static const WCHAR utf8[] = {'U','n','i','c','o','d','e',' ','(','U','T','F','-','8',')',0}; + + cpinfo->CodePage = CP_UTF8; + cpinfo->UnicodeDefaultChar = 0x3f; + strcpyW(cpinfo->CodePageName, utf8); + break; + } + + default: + { + const union cptable *table = get_codepage_table( codepage ); + + cpinfo->CodePage = table->info.codepage; + cpinfo->UnicodeDefaultChar = table->info.def_unicode_char; + MultiByteToWideChar( CP_ACP, 0, table->info.name, -1, cpinfo->CodePageName, + sizeof(cpinfo->CodePageName)/sizeof(WCHAR)); + break; + } + } + return TRUE; +} + +/*********************************************************************** + * EnumSystemCodePagesA (KERNEL32.@) + * + * Call a user defined function for every code page installed on the system. + * + * PARAMS + * lpfnCodePageEnum [I] User CODEPAGE_ENUMPROC to call with each found code page + * flags [I] Reserved, set to 0. + * + * RETURNS + * TRUE, If all code pages have been enumerated, or + * FALSE if lpfnCodePageEnum returned FALSE to stop the enumeration. + */ +BOOL WINAPI EnumSystemCodePagesA( CODEPAGE_ENUMPROCA lpfnCodePageEnum, DWORD flags ) +{ + const union cptable *table; + char buffer[10]; + int index = 0; + + for (;;) + { + if (!(table = wine_cp_enum_table( index++ ))) break; + sprintf( buffer, "%d", table->info.codepage ); + if (!lpfnCodePageEnum( buffer )) break; + } + return TRUE; +} + + +/*********************************************************************** + * EnumSystemCodePagesW (KERNEL32.@) + * + * See EnumSystemCodePagesA. + */ +BOOL WINAPI EnumSystemCodePagesW( CODEPAGE_ENUMPROCW lpfnCodePageEnum, DWORD flags ) +{ + const union cptable *table; + WCHAR buffer[10], *p; + int page, index = 0; + + for (;;) + { + if (!(table = wine_cp_enum_table( index++ ))) break; + p = buffer + sizeof(buffer)/sizeof(WCHAR); + *--p = 0; + page = table->info.codepage; + do + { + *--p = '0' + (page % 10); + page /= 10; + } while( page ); + if (!lpfnCodePageEnum( p )) break; + } + return TRUE; +} + + +/*********************************************************************** + * utf7_write_w + * + * Helper for utf7_mbstowcs + * + * RETURNS + * TRUE on success, FALSE on error + */ +static inline BOOL utf7_write_w(WCHAR *dst, int dstlen, int *index, WCHAR character) +{ + if (dstlen > 0) + { + if (*index >= dstlen) + return FALSE; + + dst[*index] = character; + } + + (*index)++; + + return TRUE; +} + +/*********************************************************************** + * utf7_mbstowcs + * + * UTF-7 to UTF-16 string conversion, helper for MultiByteToWideChar + * + * RETURNS + * On success, the number of characters written + * On dst buffer overflow, -1 + */ +static int utf7_mbstowcs(const char *src, int srclen, WCHAR *dst, int dstlen) +{ + static const signed char base64_decoding_table[] = + { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 0x00-0x0F */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 0x10-0x1F */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, /* 0x20-0x2F */ + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, /* 0x30-0x3F */ + -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, /* 0x40-0x4F */ + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, /* 0x50-0x5F */ + -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, /* 0x60-0x6F */ + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1 /* 0x70-0x7F */ + }; + + const char *source_end = src + srclen; + int dest_index = 0; + + DWORD byte_pair = 0; + short offset = 0; + + while (src < source_end) + { + if (*src == '+') + { + src++; + if (src >= source_end) + break; + + if (*src == '-') + { + /* just a plus sign escaped as +- */ + if (!utf7_write_w(dst, dstlen, &dest_index, '+')) + return -1; + src++; + continue; + } + + do + { + signed char sextet = *src; + if (sextet == '-') + { + /* skip over the dash and end base64 decoding + * the current, unfinished byte pair is discarded */ + src++; + offset = 0; + break; + } + if (sextet < 0) + { + /* the next character of src is < 0 and therefore not part of a base64 sequence + * the current, unfinished byte pair is NOT discarded in this case + * this is probably a bug in Windows */ + break; + } + + sextet = base64_decoding_table[sextet]; + if (sextet == -1) + { + /* -1 means that the next character of src is not part of a base64 sequence + * in other words, all sextets in this base64 sequence have been processed + * the current, unfinished byte pair is discarded */ + offset = 0; + break; + } + + byte_pair = (byte_pair << 6) | sextet; + offset += 6; + + if (offset >= 16) + { + /* this byte pair is done */ + if (!utf7_write_w(dst, dstlen, &dest_index, (byte_pair >> (offset - 16)) & 0xFFFF)) + return -1; + offset -= 16; + } + + src++; + } + while (src < source_end); + } + else + { + /* we have to convert to unsigned char in case *src < 0 */ + if (!utf7_write_w(dst, dstlen, &dest_index, (unsigned char)*src)) + return -1; + src++; + } + } + + return dest_index; +} + +/*********************************************************************** + * MultiByteToWideChar (KERNEL32.@) + * + * Convert a multibyte character string into a Unicode string. + * + * PARAMS + * page [I] Codepage character set to convert from + * flags [I] Character mapping flags + * src [I] Source string buffer + * srclen [I] Length of src (in bytes), or -1 if src is NUL terminated + * dst [O] Destination buffer + * dstlen [I] Length of dst (in WCHARs), or 0 to compute the required length + * + * RETURNS + * Success: If dstlen > 0, the number of characters written to dst. + * If dstlen == 0, the number of characters needed to perform the + * conversion. In both cases the count includes the terminating NUL. + * Failure: 0. Use GetLastError() to determine the cause. Possible errors are + * ERROR_INSUFFICIENT_BUFFER, if not enough space is available in dst + * and dstlen != 0; ERROR_INVALID_PARAMETER, if an invalid parameter + * is passed, and ERROR_NO_UNICODE_TRANSLATION if no translation is + * possible for src. + */ +INT WINAPI MultiByteToWideChar( UINT page, DWORD flags, LPCSTR src, INT srclen, + LPWSTR dst, INT dstlen ) +{ + const union cptable *table; + int ret; + + if (!src || !srclen || (!dst && dstlen) || dstlen < 0) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return 0; + } + + if (srclen < 0) srclen = strlen(src) + 1; + + switch(page) + { + case CP_SYMBOL: + if (flags) + { + SetLastError( ERROR_INVALID_FLAGS ); + return 0; + } + ret = wine_cpsymbol_mbstowcs( src, srclen, dst, dstlen ); + break; + case CP_UTF7: + if (flags) + { + SetLastError( ERROR_INVALID_FLAGS ); + return 0; + } + ret = utf7_mbstowcs( src, srclen, dst, dstlen ); + break; + case CP_UNIXCP: + if (unix_cptable) + { + ret = wine_cp_mbstowcs( unix_cptable, flags, src, srclen, dst, dstlen ); + break; + } +#ifdef __APPLE__ + flags |= MB_COMPOSITE; /* work around broken Mac OS X filesystem that enforces decomposed Unicode */ +#endif + /* fall through */ + case CP_UTF8: + ret = wine_utf8_mbstowcs( flags, src, srclen, dst, dstlen ); + break; + default: + if (!(table = get_codepage_table( page ))) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return 0; + } + ret = wine_cp_mbstowcs( table, flags, src, srclen, dst, dstlen ); + break; + } + + if (ret < 0) + { + switch(ret) + { + case -1: SetLastError( ERROR_INSUFFICIENT_BUFFER ); break; + case -2: SetLastError( ERROR_NO_UNICODE_TRANSLATION ); break; + } + ret = 0; + } + TRACE("cp %d %s -> %s, ret = %d\n", + page, debugstr_an(src, srclen), debugstr_wn(dst, ret), ret); + return ret; +} + + +/*********************************************************************** + * utf7_can_directly_encode * - * See SetLocaleInfoA. + * Helper for utf7_wcstombs */ -BOOL WINAPI SetLocaleInfoW( LCID lcid, LCTYPE lctype, LPCWSTR data ) +static inline BOOL utf7_can_directly_encode(WCHAR codepoint) { - struct registry_value *value; - static const WCHAR intlW[] = {'i','n','t','l',0 }; - UNICODE_STRING valueW; - NTSTATUS status; - HANDLE hkey; + static const BOOL directly_encodable_table[] = + { + 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, /* 0x00 - 0x0F */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 - 0x1F */ + 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, /* 0x20 - 0x2F */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, /* 0x30 - 0x3F */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x40 - 0x4F */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, /* 0x50 - 0x5F */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x60 - 0x6F */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 /* 0x70 - 0x7A */ + }; - lctype &= 0xffff; - value = get_locale_registry_value( lctype ); + return codepoint <= 0x7A ? directly_encodable_table[codepoint] : FALSE; +} - if (!data || !value) +/*********************************************************************** + * utf7_write_c + * + * Helper for utf7_wcstombs + * + * RETURNS + * TRUE on success, FALSE on error + */ +static inline BOOL utf7_write_c(char *dst, int dstlen, int *index, char character) +{ + if (dstlen > 0) { - SetLastError( ERROR_INVALID_PARAMETER ); - return FALSE; - } + if (*index >= dstlen) + return FALSE; - if (lctype == LOCALE_IDATE || lctype == LOCALE_ILDATE) - { - SetLastError( ERROR_INVALID_FLAGS ); - return FALSE; + dst[*index] = character; } - TRACE("setting %x (%s) to %s\n", lctype, debugstr_w(value->name), debugstr_w(data) ); - - /* FIXME: should check that data to set is sane */ + (*index)++; - /* FIXME: profile functions should map to registry */ - WriteProfileStringW( intlW, value->name, data ); + return TRUE; +} - if (!(hkey = create_registry_key())) return FALSE; - RtlInitUnicodeString( &valueW, value->name ); - status = NtSetValueKey( hkey, &valueW, 0, REG_SZ, (PVOID)data, (strlenW(data)+1)*sizeof(WCHAR) ); +/*********************************************************************** + * utf7_wcstombs + * + * UTF-16 to UTF-7 string conversion, helper for WideCharToMultiByte + * + * RETURNS + * On success, the number of characters written + * On dst buffer overflow, -1 + */ +static int utf7_wcstombs(const WCHAR *src, int srclen, char *dst, int dstlen) +{ + static const char base64_encoding_table[] = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - RtlEnterCriticalSection( &cache_section ); - HeapFree( GetProcessHeap(), 0, value->cached_value ); - value->cached_value = NULL; - RtlLeaveCriticalSection( &cache_section ); + const WCHAR *source_end = src + srclen; + int dest_index = 0; - if (lctype == LOCALE_SSHORTDATE || lctype == LOCALE_SLONGDATE) + while (src < source_end) { - /* Set I-value from S value */ - WCHAR *lpD, *lpM, *lpY; - WCHAR szBuff[2]; - - lpD = strrchrW(data, 'd'); - lpM = strrchrW(data, 'M'); - lpY = strrchrW(data, 'y'); - - if (lpD <= lpM) - { - szBuff[0] = '1'; /* D-M-Y */ - } - else - { - if (lpY <= lpM) - szBuff[0] = '2'; /* Y-M-D */ + if (*src == '+') + { + if (!utf7_write_c(dst, dstlen, &dest_index, '+')) + return -1; + if (!utf7_write_c(dst, dstlen, &dest_index, '-')) + return -1; + src++; + } + else if (utf7_can_directly_encode(*src)) + { + if (!utf7_write_c(dst, dstlen, &dest_index, *src)) + return -1; + src++; + } else - szBuff[0] = '0'; /* M-D-Y */ - } + { + unsigned int offset = 0; + DWORD byte_pair = 0; - szBuff[1] = '\0'; + if (!utf7_write_c(dst, dstlen, &dest_index, '+')) + return -1; - if (lctype == LOCALE_SSHORTDATE) - lctype = LOCALE_IDATE; - else - lctype = LOCALE_ILDATE; + while (src < source_end && !utf7_can_directly_encode(*src)) + { + byte_pair = (byte_pair << 16) | *src; + offset += 16; + while (offset >= 6) + { + if (!utf7_write_c(dst, dstlen, &dest_index, base64_encoding_table[(byte_pair >> (offset - 6)) & 0x3F])) + return -1; + offset -= 6; + } + src++; + } - value = get_locale_registry_value( lctype ); + if (offset) + { + /* Windows won't create a padded base64 character if there's no room for the - sign + * as well ; this is probably a bug in Windows */ + if (dstlen > 0 && dest_index + 1 >= dstlen) + return -1; + + byte_pair <<= (6 - offset); + if (!utf7_write_c(dst, dstlen, &dest_index, base64_encoding_table[byte_pair & 0x3F])) + return -1; + } - WriteProfileStringW( intlW, value->name, szBuff ); + /* Windows always explicitly terminates the base64 sequence + even though RFC 2152 (page 3, rule 2) does not require this */ + if (!utf7_write_c(dst, dstlen, &dest_index, '-')) + return -1; + } + } - RtlInitUnicodeString( &valueW, value->name ); - status = NtSetValueKey( hkey, &valueW, 0, REG_SZ, szBuff, sizeof(szBuff) ); + return dest_index; +} - RtlEnterCriticalSection( &cache_section ); - HeapFree( GetProcessHeap(), 0, value->cached_value ); - value->cached_value = NULL; - RtlLeaveCriticalSection( &cache_section ); +/*********************************************************************** + * WideCharToMultiByte (KERNEL32.@) + * + * Convert a Unicode character string into a multibyte string. + * + * PARAMS + * page [I] Code page character set to convert to + * flags [I] Mapping Flags (MB_ constants from "winnls.h"). + * src [I] Source string buffer + * srclen [I] Length of src (in WCHARs), or -1 if src is NUL terminated + * dst [O] Destination buffer + * dstlen [I] Length of dst (in bytes), or 0 to compute the required length + * defchar [I] Default character to use for conversion if no exact + * conversion can be made + * used [O] Set if default character was used in the conversion + * + * RETURNS + * Success: If dstlen > 0, the number of characters written to dst. + * If dstlen == 0, number of characters needed to perform the + * conversion. In both cases the count includes the terminating NUL. + * Failure: 0. Use GetLastError() to determine the cause. Possible errors are + * ERROR_INSUFFICIENT_BUFFER, if not enough space is available in dst + * and dstlen != 0, and ERROR_INVALID_PARAMETER, if an invalid + * parameter was given. + */ +INT WINAPI WideCharToMultiByte( UINT page, DWORD flags, LPCWSTR src, INT srclen, + LPSTR dst, INT dstlen, LPCSTR defchar, BOOL *used ) +{ + const union cptable *table; + int ret, used_tmp; + + if (!src || !srclen || (!dst && dstlen) || dstlen < 0) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return 0; } - NtClose( hkey ); + if (srclen < 0) srclen = strlenW(src) + 1; - if (status) SetLastError( RtlNtStatusToDosError(status) ); - return !status; + switch(page) + { + case CP_SYMBOL: + /* when using CP_SYMBOL, ERROR_INVALID_FLAGS takes precedence */ + if (flags) + { + SetLastError( ERROR_INVALID_FLAGS ); + return 0; + } + if (defchar || used) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return 0; + } + ret = wine_cpsymbol_wcstombs( src, srclen, dst, dstlen ); + break; + case CP_UTF7: + /* when using CP_UTF7, ERROR_INVALID_PARAMETER takes precedence */ + if (defchar || used) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return 0; + } + if (flags) + { + SetLastError( ERROR_INVALID_FLAGS ); + return 0; + } + ret = utf7_wcstombs( src, srclen, dst, dstlen ); + break; + case CP_UNIXCP: + if (unix_cptable) + { + ret = wine_cp_wcstombs( unix_cptable, flags, src, srclen, dst, dstlen, + defchar, used ? &used_tmp : NULL ); + break; + } + /* fall through */ + case CP_UTF8: + if (defchar || used) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return 0; + } + ret = wine_utf8_wcstombs( flags, src, srclen, dst, dstlen ); + break; + default: + if (!(table = get_codepage_table( page ))) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return 0; + } + ret = wine_cp_wcstombs( table, flags, src, srclen, dst, dstlen, + defchar, used ? &used_tmp : NULL ); + if (used) *used = used_tmp; + break; + } + + if (ret < 0) + { + switch(ret) + { + case -1: SetLastError( ERROR_INSUFFICIENT_BUFFER ); break; + case -2: SetLastError( ERROR_NO_UNICODE_TRANSLATION ); break; + } + ret = 0; + } + TRACE("cp %d %s -> %s, ret = %d\n", + page, debugstr_wn(src, srclen), debugstr_an(dst, ret), ret); + return ret; } +#endif // !__REACTOS__ + /*********************************************************************** * GetThreadLocale (KERNEL32.@) @@ -1498,6 +2767,29 @@ BOOL WINAPI SetThreadLocale( LCID lcid ) return TRUE; } +#ifndef __REACTOS__ +/********************************************************************** + * SetThreadUILanguage (KERNEL32.@) + * + * Set the current threads UI language. + * + * PARAMS + * langid [I] LANGID of the language to set, or 0 to use + * the available language which is best supported + * for console applications + * + * RETURNS + * Success: The return value is the same as the input value. + * Failure: The return value differs from the input value. + * Use GetLastError() to determine the cause. + */ +LANGID WINAPI SetThreadUILanguage( LANGID langid ) +{ + TRACE("(0x%04x) stub - returning success\n", langid); + return langid; +} +#endif // !__REACTOS__ + /****************************************************************************** * ConvertDefaultLocale (KERNEL32.@) * @@ -1566,6 +2858,26 @@ BOOL WINAPI IsValidLocale( LCID lcid, DWORD flags ) (LPCWSTR)LOCALE_ILANGUAGE, LANGIDFROMLCID(lcid)) != 0; } +#ifndef __REACTOS__ +/****************************************************************************** + * IsValidLocaleName (KERNEL32.@) + */ +BOOL WINAPI IsValidLocaleName( LPCWSTR locale ) +{ + struct locale_name locale_name; + + if (!locale) + return FALSE; + + /* string parsing */ + parse_locale_name( locale, &locale_name ); + + TRACE( "found lcid %x for %s, matches %d\n", + locale_name.lcid, debugstr_w(locale), locale_name.matches ); + + return locale_name.matches > 0; +} +#endif // !__REACTOS__ static BOOL CALLBACK enum_lang_proc_a( HMODULE hModule, LPCSTR type, LPCSTR name, WORD LangID, LONG_PTR lParam ) @@ -1876,6 +3188,7 @@ BOOL WINAPI GetStringTypeExA( LCID locale, DWORD type, LPCSTR src, INT count, LP return GetStringTypeA(locale, type, src, count, chartype); } +#ifdef __REACTOS__ static inline void map_byterev(const WCHAR *src, int len, WCHAR *dst) { while (len--) @@ -2335,6 +3648,7 @@ static int lcmap_string(DWORD flags, const WCHAR *src, int srclen, WCHAR *dst, i return ret; } +#endif // __REACTOS__ /************************************************************************* * LCMapStringEx (KERNEL32.@) @@ -2762,36 +4076,207 @@ INT WINAPI CompareStringA(LCID lcid, DWORD flags, str2W = buf2W; } - ret = CompareStringEx(NULL, flags, str1W, len1W, str2W, len2W, NULL, NULL, 0); + ret = CompareStringEx(NULL, flags, str1W, len1W, str2W, len2W, NULL, NULL, 0); + + if (str1W != buf1W) HeapFree(GetProcessHeap(), 0, str1W); + if (str2W != buf2W) HeapFree(GetProcessHeap(), 0, str2W); + return ret; +} + +#if (WINVER >= 0x0600) +/****************************************************************************** + * CompareStringOrdinal (KERNEL32.@) + */ +INT WINAPI CompareStringOrdinal(const WCHAR *str1, INT len1, const WCHAR *str2, INT len2, BOOL ignore_case) +{ + int ret; + + if (!str1 || !str2) + { + SetLastError(ERROR_INVALID_PARAMETER); + return 0; + } + if (len1 < 0) len1 = strlenW(str1); + if (len2 < 0) len2 = strlenW(str2); + + ret = RtlCompareUnicodeStrings( str1, len1, str2, len2, ignore_case ); + if (ret < 0) return CSTR_LESS_THAN; + if (ret > 0) return CSTR_GREATER_THAN; + return CSTR_EQUAL; +} +#endif // (WINVER >= 0x0600) + +#ifndef __REACTOS__ +/************************************************************************* + * lstrcmp (KERNEL32.@) + * lstrcmpA (KERNEL32.@) + * + * Compare two strings using the current thread locale. + * + * PARAMS + * str1 [I] First string to compare + * str2 [I] Second string to compare + * + * RETURNS + * Success: A number less than, equal to or greater than 0 depending on whether + * str1 is less than, equal to or greater than str2 respectively. + * Failure: FALSE. Use GetLastError() to determine the cause. + */ +int WINAPI lstrcmpA(LPCSTR str1, LPCSTR str2) +{ + int ret; + + if ((str1 == NULL) && (str2 == NULL)) return 0; + if (str1 == NULL) return -1; + if (str2 == NULL) return 1; + + ret = CompareStringA(GetThreadLocale(), LOCALE_USE_CP_ACP, str1, -1, str2, -1); + if (ret) ret -= 2; + + return ret; +} + +/************************************************************************* + * lstrcmpi (KERNEL32.@) + * lstrcmpiA (KERNEL32.@) + * + * Compare two strings using the current thread locale, ignoring case. + * + * PARAMS + * str1 [I] First string to compare + * str2 [I] Second string to compare + * + * RETURNS + * Success: A number less than, equal to or greater than 0 depending on whether + * str2 is less than, equal to or greater than str1 respectively. + * Failure: FALSE. Use GetLastError() to determine the cause. + */ +int WINAPI lstrcmpiA(LPCSTR str1, LPCSTR str2) +{ + int ret; + + if ((str1 == NULL) && (str2 == NULL)) return 0; + if (str1 == NULL) return -1; + if (str2 == NULL) return 1; + + ret = CompareStringA(GetThreadLocale(), NORM_IGNORECASE|LOCALE_USE_CP_ACP, str1, -1, str2, -1); + if (ret) ret -= 2; + + return ret; +} + +/************************************************************************* + * lstrcmpW (KERNEL32.@) + * + * See lstrcmpA. + */ +int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2) +{ + int ret; + + if ((str1 == NULL) && (str2 == NULL)) return 0; + if (str1 == NULL) return -1; + if (str2 == NULL) return 1; + + ret = CompareStringW(GetThreadLocale(), 0, str1, -1, str2, -1); + if (ret) ret -= 2; + + return ret; +} + +/************************************************************************* + * lstrcmpiW (KERNEL32.@) + * + * See lstrcmpiA. + */ +int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2) +{ + int ret; + + if ((str1 == NULL) && (str2 == NULL)) return 0; + if (str1 == NULL) return -1; + if (str2 == NULL) return 1; + + ret = CompareStringW(GetThreadLocale(), NORM_IGNORECASE, str1, -1, str2, -1); + if (ret) ret -= 2; - if (str1W != buf1W) HeapFree(GetProcessHeap(), 0, str1W); - if (str2W != buf2W) HeapFree(GetProcessHeap(), 0, str2W); return ret; } -#if (WINVER >= 0x0600) /****************************************************************************** - * CompareStringOrdinal (KERNEL32.@) + * LOCALE_Init */ -INT WINAPI CompareStringOrdinal(const WCHAR *str1, INT len1, const WCHAR *str2, INT len2, BOOL ignore_case) +void LOCALE_Init(void) { - int ret; + extern void CDECL __wine_init_codepages( const union cptable *ansi_cp, const union cptable *oem_cp, + const union cptable *unix_cp ); - if (!str1 || !str2) + UINT ansi_cp = 1252, oem_cp = 437, mac_cp = 10000, unix_cp; + + setlocale( LC_ALL, "" ); + +#ifdef __APPLE__ + /* MacOS doesn't set the locale environment variables so we have to do it ourselves */ + if (!has_env("LANG")) { - SetLastError(ERROR_INVALID_PARAMETER); - return 0; + const char* mac_locale = get_mac_locale(); + + setenv( "LANG", mac_locale, 1 ); + if (setlocale( LC_ALL, "" )) + TRACE( "setting LANG to '%s'\n", mac_locale ); + else + { + /* no C library locale matching Mac locale; don't pass garbage to children */ + unsetenv("LANG"); + TRACE( "Mac locale %s is not supported by the C library\n", debugstr_a(mac_locale) ); + } } - if (len1 < 0) len1 = strlenW(str1); - if (len2 < 0) len2 = strlenW(str2); +#endif /* __APPLE__ */ - ret = RtlCompareUnicodeStrings( str1, len1, str2, len2, ignore_case ); - if (ret < 0) return CSTR_LESS_THAN; - if (ret > 0) return CSTR_GREATER_THAN; - return CSTR_EQUAL; -} + unix_cp = setup_unix_locales(); + if (!lcid_LC_MESSAGES) lcid_LC_MESSAGES = lcid_LC_CTYPE; + +#ifdef __APPLE__ + if (!unix_cp) + unix_cp = CP_UTF8; /* default to utf-8 even if we don't get a valid locale */ #endif + NtSetDefaultUILanguage( LANGIDFROMLCID(lcid_LC_MESSAGES) ); + NtSetDefaultLocale( TRUE, lcid_LC_MESSAGES ); + NtSetDefaultLocale( FALSE, lcid_LC_CTYPE ); + + ansi_cp = get_lcid_codepage( LOCALE_USER_DEFAULT ); + GetLocaleInfoW( LOCALE_USER_DEFAULT, LOCALE_IDEFAULTMACCODEPAGE | LOCALE_RETURN_NUMBER, + (LPWSTR)&mac_cp, sizeof(mac_cp)/sizeof(WCHAR) ); + GetLocaleInfoW( LOCALE_USER_DEFAULT, LOCALE_IDEFAULTCODEPAGE | LOCALE_RETURN_NUMBER, + (LPWSTR)&oem_cp, sizeof(oem_cp)/sizeof(WCHAR) ); + if (!unix_cp) + GetLocaleInfoW( LOCALE_USER_DEFAULT, LOCALE_IDEFAULTUNIXCODEPAGE | LOCALE_RETURN_NUMBER, + (LPWSTR)&unix_cp, sizeof(unix_cp)/sizeof(WCHAR) ); + + if (!(ansi_cptable = wine_cp_get_table( ansi_cp ))) + ansi_cptable = wine_cp_get_table( 1252 ); + if (!(oem_cptable = wine_cp_get_table( oem_cp ))) + oem_cptable = wine_cp_get_table( 437 ); + if (!(mac_cptable = wine_cp_get_table( mac_cp ))) + mac_cptable = wine_cp_get_table( 10000 ); + if (unix_cp != CP_UTF8) + { + if (!(unix_cptable = wine_cp_get_table( unix_cp ))) + unix_cptable = wine_cp_get_table( 28591 ); + } + + __wine_init_codepages( ansi_cptable, oem_cptable, unix_cptable ); + + TRACE( "ansi=%03d oem=%03d mac=%03d unix=%03d\n", + ansi_cptable->info.codepage, oem_cptable->info.codepage, + mac_cptable->info.codepage, unix_cp ); + + setlocale(LC_NUMERIC, "C"); /* FIXME: oleaut32 depends on this */ +} + +#endif // !__REACTOS__ + #ifdef __REACTOS__ HANDLE NLS_RegOpenKey(HANDLE hRootKey, LPCWSTR szKeyName) #else @@ -3759,6 +5244,7 @@ static const struct geoinfo_t geoinfodata[] = { { 161832257, {'X','X',0}, {'X','X',0}, 10026358, 0, LOCATION_REGION }, /* Latin America and the Caribbean */ }; +#ifdef __REACTOS__ /* Callback function ptrs for EnumSystemCodePagesA/W */ typedef struct { @@ -3904,6 +5390,7 @@ NLS_GetGeoFriendlyName(GEOID Location, LPWSTR szFriendlyName, int cchData) return 0; } +#endif // __REACTOS__ static const struct geoinfo_t *get_geoinfo_dataptr(GEOID geoid) { @@ -4085,3 +5572,604 @@ BOOL WINAPI EnumSystemGeoID(GEOCLASS geoclass, GEOID parent, GEO_ENUMPROC enumpr return TRUE; } + +#ifndef __REACTOS__ +INT WINAPI GetUserDefaultLocaleName(LPWSTR localename, int buffersize) +{ + LCID userlcid; + + TRACE("%p, %d\n", localename, buffersize); + + userlcid = GetUserDefaultLCID(); + return LCIDToLocaleName(userlcid, localename, buffersize, 0); +} + +/****************************************************************************** + * NormalizeString (KERNEL32.@) + */ +INT WINAPI NormalizeString(NORM_FORM NormForm, LPCWSTR lpSrcString, INT cwSrcLength, + LPWSTR lpDstString, INT cwDstLength) +{ + FIXME("%x %p %d %p %d\n", NormForm, lpSrcString, cwSrcLength, lpDstString, cwDstLength); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return 0; +} + +/****************************************************************************** + * IsNormalizedString (KERNEL32.@) + */ +BOOL WINAPI IsNormalizedString(NORM_FORM NormForm, LPCWSTR lpString, INT cwLength) +{ + FIXME("%x %p %d\n", NormForm, lpString, cwLength); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return FALSE; +} + +enum { + BASE = 36, + TMIN = 1, + TMAX = 26, + SKEW = 38, + DAMP = 700, + INIT_BIAS = 72, + INIT_N = 128 +}; + +static inline INT adapt(INT delta, INT numpoints, BOOL firsttime) +{ + INT k; + + delta /= (firsttime ? DAMP : 2); + delta += delta/numpoints; + + for(k=0; delta>((BASE-TMIN)*TMAX)/2; k+=BASE) + delta /= BASE-TMIN; + return k+((BASE-TMIN+1)*delta)/(delta+SKEW); +} + +/****************************************************************************** + * IdnToAscii (KERNEL32.@) + * Implementation of Punycode based on RFC 3492. + */ +INT WINAPI IdnToAscii(DWORD dwFlags, LPCWSTR lpUnicodeCharStr, INT cchUnicodeChar, + LPWSTR lpASCIICharStr, INT cchASCIIChar) +{ + static const WCHAR prefixW[] = {'x','n','-','-'}; + + WCHAR *norm_str; + INT i, label_start, label_end, norm_len, out_label, out = 0; + + TRACE("%x %p %d %p %d\n", dwFlags, lpUnicodeCharStr, cchUnicodeChar, + lpASCIICharStr, cchASCIIChar); + + norm_len = IdnToNameprepUnicode(dwFlags, lpUnicodeCharStr, cchUnicodeChar, NULL, 0); + if(!norm_len) + return 0; + norm_str = HeapAlloc(GetProcessHeap(), 0, norm_len*sizeof(WCHAR)); + if(!norm_str) { + SetLastError(ERROR_NOT_ENOUGH_MEMORY); + return 0; + } + norm_len = IdnToNameprepUnicode(dwFlags, lpUnicodeCharStr, + cchUnicodeChar, norm_str, norm_len); + if(!norm_len) { + HeapFree(GetProcessHeap(), 0, norm_str); + return 0; + } + + for(label_start=0; label_start=n && m>norm_str[i]) + m = norm_str[i]; + } + delta += (m-n)*(h+1); + n = m; + + for(i=label_start; i=bias+TMAX ? TMAX : k-bias; + INT disp = q 63) { + HeapFree(GetProcessHeap(), 0, norm_str); + SetLastError(ERROR_INVALID_NAME); + return 0; + } + + if(label_end < norm_len) { + if(!lpASCIICharStr) { + out++; + }else if(out+1 <= cchASCIIChar) { + lpASCIICharStr[out++] = norm_str[label_end] ? '.' : 0; + }else { + HeapFree(GetProcessHeap(), 0, norm_str); + SetLastError(ERROR_INSUFFICIENT_BUFFER); + return 0; + } + } + label_start = label_end+1; + } + + HeapFree(GetProcessHeap(), 0, norm_str); + return out; +} + +/****************************************************************************** + * IdnToNameprepUnicode (KERNEL32.@) + */ +INT WINAPI IdnToNameprepUnicode(DWORD dwFlags, LPCWSTR lpUnicodeCharStr, INT cchUnicodeChar, + LPWSTR lpNameprepCharStr, INT cchNameprepChar) +{ + enum { + UNASSIGNED = 0x1, + PROHIBITED = 0x2, + BIDI_RAL = 0x4, + BIDI_L = 0x8 + }; + + extern const unsigned short nameprep_char_type[] DECLSPEC_HIDDEN; + extern const WCHAR nameprep_mapping[] DECLSPEC_HIDDEN; + const WCHAR *ptr; + WORD flags; + WCHAR buf[64], *map_str, norm_str[64], ch; + DWORD i, map_len, norm_len, mask, label_start, label_end, out = 0; + BOOL have_bidi_ral, prohibit_bidi_ral, ascii_only; + + TRACE("%x %p %d %p %d\n", dwFlags, lpUnicodeCharStr, cchUnicodeChar, + lpNameprepCharStr, cchNameprepChar); + + if(dwFlags & ~(IDN_ALLOW_UNASSIGNED|IDN_USE_STD3_ASCII_RULES)) { + SetLastError(ERROR_INVALID_FLAGS); + return 0; + } + + if(!lpUnicodeCharStr || cchUnicodeChar<-1) { + SetLastError(ERROR_INVALID_PARAMETER); + return 0; + } + + if(cchUnicodeChar == -1) + cchUnicodeChar = strlenW(lpUnicodeCharStr)+1; + if(!cchUnicodeChar || (cchUnicodeChar==1 && lpUnicodeCharStr[0]==0)) { + SetLastError(ERROR_INVALID_NAME); + return 0; + } + + for(label_start=0; label_start 0x7f) { + ascii_only = FALSE; + continue; + } + + if((dwFlags&IDN_USE_STD3_ASCII_RULES) == 0) + continue; + if((ch>='a' && ch<='z') || (ch>='A' && ch<='Z') + || (ch>='0' && ch<='9') || ch=='-') + continue; + + SetLastError(ERROR_INVALID_NAME); + return 0; + } + label_end = i; + /* last label may be empty */ + if(label_start==label_end && ch) { + SetLastError(ERROR_INVALID_NAME); + return 0; + } + + if((dwFlags&IDN_USE_STD3_ASCII_RULES) && (lpUnicodeCharStr[label_start]=='-' || + lpUnicodeCharStr[label_end-1]=='-')) { + SetLastError(ERROR_INVALID_NAME); + return 0; + } + + if(ascii_only) { + /* maximal label length is 63 characters */ + if(label_end-label_start > 63) { + SetLastError(ERROR_INVALID_NAME); + return 0; + } + if(label_end < cchUnicodeChar) + label_end++; + + if(!lpNameprepCharStr) { + out += label_end-label_start; + }else if(out+label_end-label_start <= cchNameprepChar) { + memcpy(lpNameprepCharStr+out, lpUnicodeCharStr+label_start, + (label_end-label_start)*sizeof(WCHAR)); + if(lpUnicodeCharStr[label_end-1] > 0x7f) + lpNameprepCharStr[out+label_end-label_start-1] = '.'; + out += label_end-label_start; + }else { + SetLastError(ERROR_INSUFFICIENT_BUFFER); + return 0; + } + + label_start = label_end; + continue; + } + + map_len = 0; + for(i=label_start; i>8]; + ptr = nameprep_mapping + ptr[(ch>>4)&0x0f] + 3*(ch&0x0f); + + if(!ptr[0]) map_len++; + else if(!ptr[1]) map_len++; + else if(!ptr[2]) map_len += 2; + else if(ptr[0]!=0xffff || ptr[1]!=0xffff || ptr[2]!=0xffff) map_len += 3; + } + if(map_len*sizeof(WCHAR) > sizeof(buf)) { + map_str = HeapAlloc(GetProcessHeap(), 0, map_len*sizeof(WCHAR)); + if(!map_str) { + SetLastError(ERROR_NOT_ENOUGH_MEMORY); + return 0; + } + }else { + map_str = buf; + } + map_len = 0; + for(i=label_start; i>8]; + ptr = nameprep_mapping + ptr[(ch>>4)&0x0f] + 3*(ch&0x0f); + + if(!ptr[0]) { + map_str[map_len++] = ch; + }else if(!ptr[1]) { + map_str[map_len++] = ptr[0]; + }else if(!ptr[2]) { + map_str[map_len++] = ptr[0]; + map_str[map_len++] = ptr[1]; + }else if(ptr[0]!=0xffff || ptr[1]!=0xffff || ptr[2]!=0xffff) { + map_str[map_len++] = ptr[0]; + map_str[map_len++] = ptr[1]; + map_str[map_len++] = ptr[2]; + } + } + + norm_len = FoldStringW(MAP_FOLDCZONE, map_str, map_len, + norm_str, sizeof(norm_str)/sizeof(WCHAR)-1); + if(map_str != buf) + HeapFree(GetProcessHeap(), 0, map_str); + if(!norm_len) { + if(GetLastError() == ERROR_INSUFFICIENT_BUFFER) + SetLastError(ERROR_INVALID_NAME); + return 0; + } + + if(label_end < cchUnicodeChar) { + norm_str[norm_len++] = lpUnicodeCharStr[label_end] ? '.' : 0; + label_end++; + } + + if(!lpNameprepCharStr) { + out += norm_len; + }else if(out+norm_len <= cchNameprepChar) { + memcpy(lpNameprepCharStr+out, norm_str, norm_len*sizeof(WCHAR)); + out += norm_len; + }else { + SetLastError(ERROR_INSUFFICIENT_BUFFER); + return 0; + } + + have_bidi_ral = prohibit_bidi_ral = FALSE; + mask = PROHIBITED; + if((dwFlags&IDN_ALLOW_UNASSIGNED) == 0) + mask |= UNASSIGNED; + for(i=0; i0x7f || (i!=cchASCIIChar-1 && !ch)) { + SetLastError(ERROR_INVALID_NAME); + return 0; + } + + if(!ch || ch=='.') + break; + if(ch == '-') + delim = i; + + if((dwFlags&IDN_USE_STD3_ASCII_RULES) == 0) + continue; + if((ch>='a' && ch<='z') || (ch>='A' && ch<='Z') + || (ch>='0' && ch<='9') || ch=='-') + continue; + + SetLastError(ERROR_INVALID_NAME); + return 0; + } + label_end = i; + /* last label may be empty */ + if(label_start==label_end && ch) { + SetLastError(ERROR_INVALID_NAME); + return 0; + } + + if((dwFlags&IDN_USE_STD3_ASCII_RULES) && (lpASCIICharStr[label_start]=='-' || + lpASCIICharStr[label_end-1]=='-')) { + SetLastError(ERROR_INVALID_NAME); + return 0; + } + if(label_end-label_start > 63) { + SetLastError(ERROR_INVALID_NAME); + return 0; + } + + if(label_end-label_start<4 || + tolowerW(lpASCIICharStr[label_start])!='x' || + tolowerW(lpASCIICharStr[label_start+1])!='n' || + lpASCIICharStr[label_start+2]!='-' || lpASCIICharStr[label_start+3]!='-') { + if(label_end < cchASCIIChar) + label_end++; + + if(!lpUnicodeCharStr) { + out += label_end-label_start; + }else if(out+label_end-label_start <= cchUnicodeChar) { + memcpy(lpUnicodeCharStr+out, lpASCIICharStr+label_start, + (label_end-label_start)*sizeof(WCHAR)); + out += label_end-label_start; + }else { + SetLastError(ERROR_INSUFFICIENT_BUFFER); + return 0; + } + + label_start = label_end; + continue; + } + + if(delim == label_start+3) + delim++; + if(!lpUnicodeCharStr) { + out += delim-label_start-4; + }else if(out+delim-label_start-4 <= cchUnicodeChar) { + memcpy(lpUnicodeCharStr+out, lpASCIICharStr+label_start+4, + (delim-label_start-4)*sizeof(WCHAR)); + out += delim-label_start-4; + }else { + SetLastError(ERROR_INSUFFICIENT_BUFFER); + return 0; + } + if(out != out_label) + delim++; + + for(i=delim; i'z') && (ch<'0' || ch>'9')) { + SetLastError(ERROR_INVALID_NAME); + return 0; + } + digit = ch<='9' ? ch-'0'+'z'-'a'+1 : ch-'a'; + pos += digit*w; + t = k<=bias ? TMIN : k>=bias+TMAX ? TMAX : k-bias; + if(digit < t) + break; + w *= BASE-t; + } + bias = adapt(pos-old_pos, out-out_label+1, old_pos==0); + n += pos/(out-out_label+1); + pos %= out-out_label+1; + + if((dwFlags&IDN_ALLOW_UNASSIGNED)==0 && + get_table_entry(nameprep_char_type, n)==1/*UNASSIGNED*/) { + SetLastError(ERROR_INVALID_NAME); + return 0; + } + if(!lpUnicodeCharStr) { + out++; + }else if(out+1 <= cchASCIIChar) { + memmove(lpUnicodeCharStr+out_label+pos+1, + lpUnicodeCharStr+out_label+pos, + (out-out_label-pos)*sizeof(WCHAR)); + lpUnicodeCharStr[out_label+pos] = n; + out++; + }else { + SetLastError(ERROR_INSUFFICIENT_BUFFER); + return 0; + } + pos++; + } + + if(out-out_label > 63) { + SetLastError(ERROR_INVALID_NAME); + return 0; + } + + if(label_end < cchASCIIChar) { + if(!lpUnicodeCharStr) { + out++; + }else if(out+1 <= cchUnicodeChar) { + lpUnicodeCharStr[out++] = lpASCIICharStr[label_end]; + }else { + SetLastError(ERROR_INSUFFICIENT_BUFFER); + return 0; + } + } + label_start = label_end+1; + } + + return out; +} + + +/****************************************************************************** + * GetUserPreferredUILanguages (KERNEL32.@) + */ +BOOL WINAPI GetUserPreferredUILanguages(DWORD flags, PULONG numlangs, PZZWSTR langbuffer, PULONG bufferlen) +{ + FIXME( "stub: %u %p %p %p\n", flags, numlangs, langbuffer, bufferlen ); + return FALSE; +} + +/****************************************************************************** + * GetFileMUIPath (KERNEL32.@) + */ + +BOOL WINAPI GetFileMUIPath(DWORD flags, PCWSTR filepath, PWSTR language, PULONG languagelen, + PWSTR muipath, PULONG muipathlen, PULONGLONG enumerator) +{ + FIXME("stub: 0x%x, %s, %s, %p, %p, %p, %p\n", flags, debugstr_w(filepath), + debugstr_w(language), languagelen, muipath, muipathlen, enumerator); + + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + + return FALSE; +} + +/****************************************************************************** + * GetFileMUIInfo (KERNEL32.@) + */ + +BOOL WINAPI GetFileMUIInfo(DWORD flags, PCWSTR path, FILEMUIINFO *info, DWORD *size) +{ + FIXME("stub: %u, %s, %p, %p\n", flags, debugstr_w(path), info, size); + + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return FALSE; +} +#endif // !__REACTOS__ From f70a1d03b0aeb1cec088cac202e73c5e9361ca41 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 25 Apr 2024 20:43:23 +0300 Subject: [PATCH 069/182] [KERNEL32] Import GetLocaleInfoEx from wine-1.9.17 --- dll/win32/kernel32/winnls/string/locale.c | 34 ++++++++++++++++------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/dll/win32/kernel32/winnls/string/locale.c b/dll/win32/kernel32/winnls/string/locale.c index 89f063c9136..3a46cd0b380 100644 --- a/dll/win32/kernel32/winnls/string/locale.c +++ b/dll/win32/kernel32/winnls/string/locale.c @@ -1778,17 +1778,31 @@ INT WINAPI GetLocaleInfoW( LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len ) } #if (WINVER >= 0x0600) -WINBASEAPI -int -WINAPI -GetLocaleInfoEx( - _In_opt_ LPCWSTR lpLocaleName, - _In_ LCTYPE LCType, - _Out_writes_opt_(cchData) LPWSTR lpLCData, - _In_ int cchData) +/****************************************************************************** + * GetLocaleInfoEx (KERNEL32.@) + */ +INT WINAPI GetLocaleInfoEx(LPCWSTR locale, LCTYPE info, LPWSTR buffer, INT len) { - TRACE( "GetLocaleInfoEx not implemented (lcid=%s,lctype=0x%x,%s,%d)\n", debugstr_w(lpLocaleName), LCType, debugstr_w(lpLCData), cchData ); - return 0; + LCID lcid = LocaleNameToLCID(locale, 0); + + TRACE("%s, lcid=0x%x, 0x%x\n", debugstr_w(locale), lcid, info); + + if (!lcid) return 0; + + /* special handling for neutral locale names */ + if (info == LOCALE_SNAME && strlenW(locale) == 2) + { + if (len && len < 3) + { + SetLastError(ERROR_INSUFFICIENT_BUFFER); + return 0; + } + + if (len) strcpyW(buffer, locale); + return 3; + } + + return GetLocaleInfoW(lcid, info, buffer, len); } BOOL From 8c0ffa6f18888f40fbd6e795fa81b7a88bafbd91 Mon Sep 17 00:00:00 2001 From: winesync Date: Thu, 25 Apr 2024 21:45:44 +0300 Subject: [PATCH 070/182] [WINESYNC] Assorted spelling/grammar fixes. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit wine commit id 1e214eb5d354ffbb64699686913a5eb61998ed78 by Frédéric Delanoy --- dll/win32/kernel32/winnls/string/locale.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dll/win32/kernel32/winnls/string/locale.c b/dll/win32/kernel32/winnls/string/locale.c index 3a46cd0b380..dea44b16ddf 100644 --- a/dll/win32/kernel32/winnls/string/locale.c +++ b/dll/win32/kernel32/winnls/string/locale.c @@ -5419,7 +5419,7 @@ static const struct geoinfo_t *get_geoinfo_dataptr(GEOID geoid) ptr = &geoinfodata[n]; if (geoid == ptr->id) - /* we don't need empty entry */ + /* we don't need empty entries */ return *ptr->iso2W ? ptr : NULL; if (ptr->id > geoid) From 6f4d2924f02b5572b98ff61655da3fcb0df597b1 Mon Sep 17 00:00:00 2001 From: winesync Date: Thu, 25 Apr 2024 19:51:57 +0300 Subject: [PATCH 071/182] [WINESYNC] kernel32: Fixed handling LOCALE_NAME_USER_DEFAULT in GetLocaleInfoEx. Signed-off-by: Jacek Caban Signed-off-by: Alexandre Julliard wine commit id 505406fc83b65dd1f9ebcbaabb582f0fabec1b0a by Jacek Caban --- dll/win32/kernel32/winnls/string/locale.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dll/win32/kernel32/winnls/string/locale.c b/dll/win32/kernel32/winnls/string/locale.c index dea44b16ddf..3a26c757d73 100644 --- a/dll/win32/kernel32/winnls/string/locale.c +++ b/dll/win32/kernel32/winnls/string/locale.c @@ -1790,7 +1790,7 @@ INT WINAPI GetLocaleInfoEx(LPCWSTR locale, LCTYPE info, LPWSTR buffer, INT len) if (!lcid) return 0; /* special handling for neutral locale names */ - if (info == LOCALE_SNAME && strlenW(locale) == 2) + if (info == LOCALE_SNAME && locale && strlenW(locale) == 2) { if (len && len < 3) { From a3102dc0dd5c82a187d813f694d710d88f7160b9 Mon Sep 17 00:00:00 2001 From: winesync Date: Thu, 25 Apr 2024 19:53:16 +0300 Subject: [PATCH 072/182] [WINESYNC] kernel32: Improved GetUserPreferredUILanguages stub. Implementation and tests are based on GetSystemPreferredUILanguages. Signed-off-by: Jacek Caban Signed-off-by: Alexandre Julliard wine commit id 26d0105cd8a8ce1131033f1871de0dd9a7b4c43c by Jacek Caban --- dll/win32/kernel32/winnls/string/locale.c | 37 +++++++++++++++++------ 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/dll/win32/kernel32/winnls/string/locale.c b/dll/win32/kernel32/winnls/string/locale.c index 3a26c757d73..d42a2394609 100644 --- a/dll/win32/kernel32/winnls/string/locale.c +++ b/dll/win32/kernel32/winnls/string/locale.c @@ -1310,6 +1310,34 @@ BOOL WINAPI GetThreadPreferredUILanguages( DWORD flags, ULONG *count, WCHAR *buf FIXME( "%08x, %p, %p %p\n", flags, count, buf, size ); return get_dummy_preferred_ui_language( flags, count, buf, size ); } + +#if (WINVER >= 0x0600) +/****************************************************************************** + * GetUserPreferredUILanguages (KERNEL32.@) + */ +BOOL WINAPI GetUserPreferredUILanguages( DWORD flags, ULONG *count, WCHAR *buffer, ULONG *size ) +{ + TRACE( "%u %p %p %p\n", flags, count, buffer, size ); + + if (flags & ~(MUI_LANGUAGE_NAME | MUI_LANGUAGE_ID)) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + if ((flags & MUI_LANGUAGE_NAME) && (flags & MUI_LANGUAGE_ID)) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + if (*size && !buffer) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + return get_dummy_preferred_ui_language( flags, count, buffer, size ); +} +#endif // (WINVER >= 0x0600) #endif // !__REACTOS__ /*********************************************************************** @@ -6151,15 +6179,6 @@ INT WINAPI IdnToUnicode(DWORD dwFlags, LPCWSTR lpASCIICharStr, INT cchASCIIChar, } -/****************************************************************************** - * GetUserPreferredUILanguages (KERNEL32.@) - */ -BOOL WINAPI GetUserPreferredUILanguages(DWORD flags, PULONG numlangs, PZZWSTR langbuffer, PULONG bufferlen) -{ - FIXME( "stub: %u %p %p %p\n", flags, numlangs, langbuffer, bufferlen ); - return FALSE; -} - /****************************************************************************** * GetFileMUIPath (KERNEL32.@) */ From 544f1144597447c9b740dca2b2117516871b12d8 Mon Sep 17 00:00:00 2001 From: winesync Date: Thu, 25 Apr 2024 19:53:32 +0300 Subject: [PATCH 073/182] [WINESYNC] kernel32: Use different default sublangs for Spanish and Chinese. Signed-off-by: Andrew Eikum Signed-off-by: Alexandre Julliard wine commit id 7737693693ca46a88c41cfeab95d2b65423d8e51 by Andrew Eikum --- dll/win32/kernel32/winnls/string/locale.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/dll/win32/kernel32/winnls/string/locale.c b/dll/win32/kernel32/winnls/string/locale.c index d42a2394609..8e32afcbd67 100644 --- a/dll/win32/kernel32/winnls/string/locale.c +++ b/dll/win32/kernel32/winnls/string/locale.c @@ -354,6 +354,7 @@ static UINT find_charset( const WCHAR *name ) if (entry) return entry->codepage; return 0; } +#endif // (WINVER >= 0x0600) static LANGID get_default_sublang( LANGID lang ) { @@ -373,6 +374,7 @@ static LANGID get_default_sublang( LANGID lang ) return lang; } +#if (WINVER >= 0x0600) /*********************************************************************** * find_locale_id_callback */ @@ -1720,7 +1722,7 @@ INT WINAPI GetLocaleInfoW( LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len ) /* replace SUBLANG_NEUTRAL by SUBLANG_DEFAULT */ if (SUBLANGID(lang_id) == SUBLANG_NEUTRAL) - lang_id = MAKELANGID(PRIMARYLANGID(lang_id), SUBLANG_DEFAULT); + lang_id = MAKELANGID(PRIMARYLANGID(lang_id), get_default_sublang( lang_id )); if (lctype != LOCALE_FONTSIGNATURE) { @@ -2868,7 +2870,7 @@ LCID WINAPI ConvertDefaultLocale( LCID lcid ) langid = LANGIDFROMLCID(lcid); if (SUBLANGID(langid) == SUBLANG_NEUTRAL) { - langid = MAKELANGID(PRIMARYLANGID(langid), SUBLANG_DEFAULT); + langid = MAKELANGID(PRIMARYLANGID(langid), get_default_sublang( langid )); lcid = MAKELCID(langid, SORTIDFROMLCID(lcid)); } } @@ -4407,7 +4409,7 @@ static BOOL NLS_GetLanguageGroupName(LGRPID lgrpid, LPWSTR szName, ULONG nameSiz langId = GetSystemDefaultLangID(); if (SUBLANGID(langId) == SUBLANG_NEUTRAL) - langId = MAKELANGID( PRIMARYLANGID(langId), SUBLANG_DEFAULT ); + langId = MAKELANGID(PRIMARYLANGID(langId), get_default_sublang( langId )); hResource = FindResourceExW( kernel32_handle, (LPWSTR)RT_STRING, szResourceName, langId ); From 535fffd824b3e2263a70a155e762657c1f15f9f9 Mon Sep 17 00:00:00 2001 From: winesync Date: Thu, 25 Apr 2024 19:55:05 +0300 Subject: [PATCH 074/182] [WINESYNC] kernel32: Check for invalid flags in codepage conversion functions. Signed-off-by: Alex Henrie Signed-off-by: Alexandre Julliard wine commit id 0b95ebd283986fa179c7ec6d2ea3f34c977c3aaf by Alex Henrie --- dll/win32/kernel32/winnls/string/locale.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/dll/win32/kernel32/winnls/string/locale.c b/dll/win32/kernel32/winnls/string/locale.c index 8e32afcbd67..d888e2bb000 100644 --- a/dll/win32/kernel32/winnls/string/locale.c +++ b/dll/win32/kernel32/winnls/string/locale.c @@ -56,6 +56,9 @@ extern HMODULE kernel32_handle; #define LOCALE_LOCALEINFOFLAGSMASK (LOCALE_NOUSEROVERRIDE|LOCALE_USE_CP_ACP|\ LOCALE_RETURN_NUMBER|LOCALE_RETURN_GENITIVE_NAMES) +#define MB_FLAGSMASK (MB_PRECOMPOSED|MB_COMPOSITE|MB_USEGLYPHCHARS|MB_ERR_INVALID_CHARS) +#define WC_FLAGSMASK (WC_DISCARDNS|WC_SEPCHARS|WC_DEFAULTCHAR|WC_ERR_INVALID_CHARS|\ + WC_COMPOSITECHECK|WC_NO_BEST_FIT_CHARS) static const WCHAR szLocaleKeyName[] = { '\\', 'R', 'e', 'g', 'i', 's', 't', 'r', 'y', '\\', @@ -2501,6 +2504,11 @@ INT WINAPI MultiByteToWideChar( UINT page, DWORD flags, LPCSTR src, INT srclen, #endif /* fall through */ case CP_UTF8: + if (flags & ~MB_FLAGSMASK) + { + SetLastError( ERROR_INVALID_FLAGS ); + return 0; + } ret = wine_utf8_mbstowcs( flags, src, srclen, dst, dstlen ); break; default: @@ -2509,6 +2517,11 @@ INT WINAPI MultiByteToWideChar( UINT page, DWORD flags, LPCSTR src, INT srclen, SetLastError( ERROR_INVALID_PARAMETER ); return 0; } + if (flags & ~MB_FLAGSMASK) + { + SetLastError( ERROR_INVALID_FLAGS ); + return 0; + } ret = wine_cp_mbstowcs( table, flags, src, srclen, dst, dstlen ); break; } @@ -2732,6 +2745,11 @@ INT WINAPI WideCharToMultiByte( UINT page, DWORD flags, LPCWSTR src, INT srclen, SetLastError( ERROR_INVALID_PARAMETER ); return 0; } + if (flags & ~WC_FLAGSMASK) + { + SetLastError( ERROR_INVALID_FLAGS ); + return 0; + } ret = wine_utf8_wcstombs( flags, src, srclen, dst, dstlen ); break; default: @@ -2740,6 +2758,11 @@ INT WINAPI WideCharToMultiByte( UINT page, DWORD flags, LPCWSTR src, INT srclen, SetLastError( ERROR_INVALID_PARAMETER ); return 0; } + if (flags & ~WC_FLAGSMASK) + { + SetLastError( ERROR_INVALID_FLAGS ); + return 0; + } ret = wine_cp_wcstombs( table, flags, src, srclen, dst, dstlen, defchar, used ? &used_tmp : NULL ); if (used) *used = used_tmp; From a8d367089ce2c032401cf4f2c0993506ce729cba Mon Sep 17 00:00:00 2001 From: winesync Date: Thu, 25 Apr 2024 19:55:56 +0300 Subject: [PATCH 075/182] [WINESYNC] kernel32: Improve locale detection on Android. setlocale is coded to just return 'C' for all inquiries ignoring locale that may be set in the environment. Signed-off-by: Aric Stewart Signed-off-by: Alexandre Julliard wine commit id 9dc5d299f11c599862d39af3e32d92e787c1ae7b by Aric Stewart --- dll/win32/kernel32/winnls/string/locale.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/dll/win32/kernel32/winnls/string/locale.c b/dll/win32/kernel32/winnls/string/locale.c index d888e2bb000..09aa4f3fe5f 100644 --- a/dll/win32/kernel32/winnls/string/locale.c +++ b/dll/win32/kernel32/winnls/string/locale.c @@ -1015,6 +1015,15 @@ static const char* get_locale(int category, const char* category_name) { const char* ret = setlocale(category, NULL); +#ifdef __ANDROID__ + if (!strcmp(ret, "C")) + { + ret = getenv( category_name ); + if (!ret || !ret[0]) ret = getenv( "LC_ALL" ); + if (!ret || !ret[0]) ret = "C"; + } +#endif + #ifdef __APPLE__ /* If LC_ALL is set, respect it as a user override. If LC_* is set, respect it as a user override, except if it's LC_CTYPE From b46bf67c2e7a9be4c11c7017a8f4470349363563 Mon Sep 17 00:00:00 2001 From: winesync Date: Thu, 25 Apr 2024 19:58:16 +0300 Subject: [PATCH 076/182] [WINESYNC] kernel32: Add stub for ResolveLocaleName. Signed-off-by: Jactry Zeng Signed-off-by: Alexandre Julliard wine commit id b9a9fe4a042f98521efea3275ded4af4b7cba4c9 by Jactry Zeng --- dll/win32/kernel32/winnls/string/locale.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/dll/win32/kernel32/winnls/string/locale.c b/dll/win32/kernel32/winnls/string/locale.c index 09aa4f3fe5f..9153a6d3963 100644 --- a/dll/win32/kernel32/winnls/string/locale.c +++ b/dll/win32/kernel32/winnls/string/locale.c @@ -6239,4 +6239,16 @@ BOOL WINAPI GetFileMUIInfo(DWORD flags, PCWSTR path, FILEMUIINFO *info, DWORD *s SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; } + +/****************************************************************************** + * ResolveLocaleName (KERNEL32.@) + */ + +INT WINAPI ResolveLocaleName(LPCWSTR name, LPWSTR localename, INT len) +{ + FIXME("stub: %s, %p, %d\n", wine_dbgstr_w(name), localename, len); + + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return 0; +} #endif // !__REACTOS__ From 90c0562935c832838d7026ab22f728aee2b566cc Mon Sep 17 00:00:00 2001 From: winesync Date: Thu, 25 Apr 2024 19:58:44 +0300 Subject: [PATCH 077/182] [WINESYNC] kernel32: Keep the sublanguage specified by the script name when looking for the default. Signed-off-by: Alexandre Julliard wine commit id c5a39bd98f5388d48b728d19ce466665fa37bfbd by Alexandre Julliard --- dll/win32/kernel32/winnls/string/locale.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/dll/win32/kernel32/winnls/string/locale.c b/dll/win32/kernel32/winnls/string/locale.c index 9153a6d3963..8b9a109f5db 100644 --- a/dll/win32/kernel32/winnls/string/locale.c +++ b/dll/win32/kernel32/winnls/string/locale.c @@ -1733,8 +1733,7 @@ INT WINAPI GetLocaleInfoW( LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len ) lang_id = LANGIDFROMLCID( lcid ); /* replace SUBLANG_NEUTRAL by SUBLANG_DEFAULT */ - if (SUBLANGID(lang_id) == SUBLANG_NEUTRAL) - lang_id = MAKELANGID(PRIMARYLANGID(lang_id), get_default_sublang( lang_id )); + if (SUBLANGID(lang_id) == SUBLANG_NEUTRAL) lang_id = get_default_sublang( lang_id ); if (lctype != LOCALE_FONTSIGNATURE) { @@ -2902,7 +2901,7 @@ LCID WINAPI ConvertDefaultLocale( LCID lcid ) langid = LANGIDFROMLCID(lcid); if (SUBLANGID(langid) == SUBLANG_NEUTRAL) { - langid = MAKELANGID(PRIMARYLANGID(langid), get_default_sublang( langid )); + langid = get_default_sublang( langid ); lcid = MAKELCID(langid, SORTIDFROMLCID(lcid)); } } @@ -4440,8 +4439,7 @@ static BOOL NLS_GetLanguageGroupName(LGRPID lgrpid, LPWSTR szName, ULONG nameSiz /* FIXME: Is it correct to use the system default langid? */ langId = GetSystemDefaultLangID(); - if (SUBLANGID(langId) == SUBLANG_NEUTRAL) - langId = MAKELANGID(PRIMARYLANGID(langId), get_default_sublang( langId )); + if (SUBLANGID(langId) == SUBLANG_NEUTRAL) langId = get_default_sublang( langId ); hResource = FindResourceExW( kernel32_handle, (LPWSTR)RT_STRING, szResourceName, langId ); From c08580dee320b46116a12afecdb0a0fb2ac6a632 Mon Sep 17 00:00:00 2001 From: winesync Date: Thu, 25 Apr 2024 19:59:18 +0300 Subject: [PATCH 078/182] [WINESYNC] kernel32: Don't return a parent locale for neutral locales in GetLocaleInfoEx. Signed-off-by: Alexandre Julliard wine commit id c63a08586f19af7e6a65a064696743f648006fcd by Alexandre Julliard --- dll/win32/kernel32/winnls/string/locale.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/dll/win32/kernel32/winnls/string/locale.c b/dll/win32/kernel32/winnls/string/locale.c index 8b9a109f5db..6c65b3f578d 100644 --- a/dll/win32/kernel32/winnls/string/locale.c +++ b/dll/win32/kernel32/winnls/string/locale.c @@ -1831,16 +1831,22 @@ INT WINAPI GetLocaleInfoEx(LPCWSTR locale, LCTYPE info, LPWSTR buffer, INT len) if (!lcid) return 0; /* special handling for neutral locale names */ - if (info == LOCALE_SNAME && locale && strlenW(locale) == 2) + if (locale && strlenW(locale) == 2) { - if (len && len < 3) + switch (info) { - SetLastError(ERROR_INSUFFICIENT_BUFFER); - return 0; + case LOCALE_SNAME: + if (len && len < 3) + { + SetLastError(ERROR_INSUFFICIENT_BUFFER); + return 0; + } + if (len) strcpyW(buffer, locale); + return 3; + case LOCALE_SPARENT: + if (len) buffer[0] = 0; + return 1; } - - if (len) strcpyW(buffer, locale); - return 3; } return GetLocaleInfoW(lcid, info, buffer, len); From bd9bb36b184daf42bfa5d0ca20da654005d527fa Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 25 Apr 2024 15:23:35 +0300 Subject: [PATCH 079/182] [KERNEL32] Reduce diff to wine-3.3 --- dll/win32/kernel32/winnls/string/locale.c | 68 ++++++++++------------- 1 file changed, 28 insertions(+), 40 deletions(-) diff --git a/dll/win32/kernel32/winnls/string/locale.c b/dll/win32/kernel32/winnls/string/locale.c index 6c65b3f578d..2eff3d10b07 100644 --- a/dll/win32/kernel32/winnls/string/locale.c +++ b/dll/win32/kernel32/winnls/string/locale.c @@ -60,16 +60,20 @@ extern HMODULE kernel32_handle; #define WC_FLAGSMASK (WC_DISCARDNS|WC_SEPCHARS|WC_DEFAULTCHAR|WC_ERR_INVALID_CHARS|\ WC_COMPOSITECHECK|WC_NO_BEST_FIT_CHARS) +/* current code pages */ +static const union cptable *ansi_cptable; +static const union cptable *oem_cptable; +static const union cptable *mac_cptable; +static const union cptable *unix_cptable; /* NULL if UTF8 */ + static const WCHAR szLocaleKeyName[] = { - '\\', 'R', 'e', 'g', 'i', 's', 't', 'r', 'y', '\\', - 'M','a','c','h','i','n','e','\\','S','y','s','t','e','m','\\', + '\\','R','e','g','i','s','t','r','y','\\','M','a','c','h','i','n','e','\\','S','y','s','t','e','m','\\', 'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\', 'C','o','n','t','r','o','l','\\','N','l','s','\\','L','o','c','a','l','e',0 }; static const WCHAR szLangGroupsKeyName[] = { - '\\', 'R', 'e', 'g', 'i', 's', 't', 'r', 'y', '\\', - 'M','a','c','h','i','n','e','\\','S','y','s','t','e','m','\\', + '\\','R','e','g','i','s','t','r','y','\\','M','a','c','h','i','n','e','\\','S','y','s','t','e','m','\\', 'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\', 'C','o','n','t','r','o','l','\\','N','l','s','\\', 'L','a','n','g','u','a','g','e',' ','G','r','o','u','p','s',0 @@ -138,6 +142,7 @@ static const struct charset_entry }; #endif + struct locale_name { WCHAR win_name[128]; /* Windows name ("en-US") */ @@ -267,9 +272,7 @@ static inline void strcpynAtoW( WCHAR *dst, const char *src, size_t n ) } if (n) *dst = 0; } -#endif -#ifndef __REACTOS__ static inline unsigned short get_table_entry( const unsigned short *table, WCHAR ch ) { return table[table[table[ch >> 8] + ((ch >> 4) & 0x0f)] + (ch & 0xf)]; @@ -352,7 +355,8 @@ static UINT find_charset( const WCHAR *name ) if (isalnum((unsigned char)name[i])) charset_name[j++] = name[i]; charset_name[j] = 0; - entry = bsearch( charset_name, charset_names, ARRAY_SIZE( charset_names ), + entry = bsearch( charset_name, charset_names, + sizeof(charset_names)/sizeof(charset_names[0]), sizeof(charset_names[0]), charset_cmp ); if (entry) return entry->codepage; return 0; @@ -393,7 +397,8 @@ static BOOL CALLBACK find_locale_id_callback( HMODULE hModule, LPCWSTR type, /* first check exact name */ if (data->win_name[0] && - GetLocaleInfoW( lcid, LOCALE_SNAME | LOCALE_NOUSEROVERRIDE, buffer, ARRAY_SIZE( buffer ))) + GetLocaleInfoW( lcid, LOCALE_SNAME | LOCALE_NOUSEROVERRIDE, + buffer, sizeof(buffer)/sizeof(WCHAR) )) { if (!strcmpiW( data->win_name, buffer )) { @@ -403,7 +408,7 @@ static BOOL CALLBACK find_locale_id_callback( HMODULE hModule, LPCWSTR type, } if (!GetLocaleInfoW( lcid, LOCALE_SISO639LANGNAME | LOCALE_NOUSEROVERRIDE, - buffer, ARRAY_SIZE( buffer ))) + buffer, sizeof(buffer)/sizeof(WCHAR) )) return TRUE; if (strcmpiW( buffer, data->lang )) return TRUE; matches++; /* language name matched */ @@ -411,7 +416,7 @@ static BOOL CALLBACK find_locale_id_callback( HMODULE hModule, LPCWSTR type, if (data->script) { if (GetLocaleInfoW( lcid, LOCALE_SSCRIPTS | LOCALE_NOUSEROVERRIDE, - buffer, ARRAY_SIZE( buffer ))) + buffer, sizeof(buffer)/sizeof(WCHAR) )) { const WCHAR *p = buffer; unsigned int len = strlenW( data->script ); @@ -429,7 +434,7 @@ static BOOL CALLBACK find_locale_id_callback( HMODULE hModule, LPCWSTR type, if (data->country) { if (GetLocaleInfoW( lcid, LOCALE_SISO3166CTRYNAME|LOCALE_NOUSEROVERRIDE, - buffer, ARRAY_SIZE( buffer ))) + buffer, sizeof(buffer)/sizeof(WCHAR) )) { if (strcmpiW( buffer, data->country )) goto done; matches++; /* country name matched */ @@ -487,7 +492,7 @@ static void parse_locale_name( const WCHAR *str, struct locale_name *name ) name->matches = 0; name->codepage = 0; name->win_name[0] = 0; - lstrcpynW( name->lang, str, ARRAY_SIZE( name->lang )); + lstrcpynW( name->lang, str, sizeof(name->lang)/sizeof(WCHAR) ); if (!*name->lang) { @@ -572,6 +577,7 @@ static void parse_locale_name( const WCHAR *str, struct locale_name *name ) } #endif + /*********************************************************************** * convert_default_lcid * @@ -1399,10 +1405,8 @@ LANGID WINAPI GetSystemDefaultUILanguage(void) LCID WINAPI LocaleNameToLCID( LPCWSTR name, DWORD flags ) { struct locale_name locale_name; - static int once; - if (flags && !once++) - FIXME( "unsupported flags %x\n", flags ); + if (flags) FIXME( "unsupported flags %x\n", flags ); if (name == LOCALE_NAME_USER_DEFAULT) return GetUserDefaultLCID(); @@ -1432,13 +1436,13 @@ LCID WINAPI LocaleNameToLCID( LPCWSTR name, DWORD flags ) */ INT WINAPI LCIDToLocaleName( LCID lcid, LPWSTR name, INT count, DWORD flags ) { - static int once; - if (flags && !once++) FIXME( "unsupported flags %x\n", flags ); + if (flags) FIXME( "unsupported flags %x\n", flags ); return GetLocaleInfoW( lcid, LOCALE_SNAME | LOCALE_NOUSEROVERRIDE, name, count ); } #endif + /****************************************************************************** * get_locale_registry_value * @@ -1663,7 +1667,6 @@ INT WINAPI GetLocaleInfoW( LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len ) LANGID lang_id; HRSRC hrsrc; HGLOBAL hmem; - LPCWSTR lpType, lpName; INT ret; UINT lcflags; const WCHAR *p; @@ -1735,18 +1738,8 @@ INT WINAPI GetLocaleInfoW( LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len ) /* replace SUBLANG_NEUTRAL by SUBLANG_DEFAULT */ if (SUBLANGID(lang_id) == SUBLANG_NEUTRAL) lang_id = get_default_sublang( lang_id ); - if (lctype != LOCALE_FONTSIGNATURE) - { - lpType = MAKEINTRESOURCEW(RT_STRING); - lpName = MAKEINTRESOURCEW(ULongToPtr((lctype >> 4) + 1)); - } - else - { - lpType = MAKEINTRESOURCEW(RT_RCDATA); - lpName = MAKEINTRESOURCEW(lctype); - } - - if (!(hrsrc = FindResourceExW( kernel32_handle, lpType, lpName, lang_id ))) + if (!(hrsrc = FindResourceExW( kernel32_handle, (LPWSTR)RT_STRING, + ULongToPtr((lctype >> 4) + 1), lang_id ))) { SetLastError( ERROR_INVALID_FLAGS ); /* no such lctype */ return 0; @@ -1755,10 +1748,7 @@ INT WINAPI GetLocaleInfoW( LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len ) return 0; p = LockResource( hmem ); - if (lctype != LOCALE_FONTSIGNATURE) - { - for (i = 0; i < (lctype & 0x0f); i++) p += *p + 1; - } + for (i = 0; i < (lctype & 0x0f); i++) p += *p + 1; if (lcflags & LOCALE_RETURN_NUMBER) ret = sizeof(UINT)/sizeof(WCHAR); else if (is_genitive_name_supported( lctype ) && *p) @@ -1773,10 +1763,8 @@ INT WINAPI GetLocaleInfoW( LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len ) } else ret = i; } - else if (lctype != LOCALE_FONTSIGNATURE) - ret = *p + 1; else - ret = SizeofResource(kernel32_handle, hrsrc) / sizeof(WCHAR); + ret = (lctype == LOCALE_FONTSIGNATURE) ? *p : *p + 1; if (!buffer) return ret; @@ -1808,8 +1796,7 @@ INT WINAPI GetLocaleInfoW( LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len ) } else { - if (lctype != LOCALE_FONTSIGNATURE) p++; - memcpy( buffer, p, ret * sizeof(WCHAR) ); + memcpy( buffer, p + 1, ret * sizeof(WCHAR) ); if (lctype != LOCALE_FONTSIGNATURE) buffer[ret-1] = 0; TRACE( "(lcid=0x%x,lctype=0x%x,%p,%d) returning %d %s\n", @@ -3034,7 +3021,7 @@ static BOOL CALLBACK enum_locale_ex_proc( HMODULE module, LPCWSTR type, unsigned int flags; GetLocaleInfoW( MAKELCID( lang, SORT_DEFAULT ), LOCALE_SNAME | LOCALE_NOUSEROVERRIDE, - buffer, ARRAY_SIZE( buffer )); + buffer, sizeof(buffer) / sizeof(WCHAR) ); if (!GetLocaleInfoW( MAKELCID( lang, SORT_DEFAULT ), LOCALE_INEUTRAL | LOCALE_NOUSEROVERRIDE | LOCALE_RETURN_NUMBER, (LPWSTR)&neutral, sizeof(neutral) / sizeof(WCHAR) )) @@ -3098,6 +3085,7 @@ DWORD WINAPI VerLanguageNameW( DWORD wLang, LPWSTR szLang, DWORD nSize ) return GetLocaleInfoW( MAKELCID(wLang, SORT_DEFAULT), LOCALE_SENGLANGUAGE, szLang, nSize ); } + /****************************************************************************** * GetStringTypeW (KERNEL32.@) * From 6f83cdfdb317edf976713c85ecdcf328d824ce48 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 26 Apr 2024 16:00:23 +0300 Subject: [PATCH 080/182] [WINESYNC] Update kernel32.cfg and WINESYNC.txt to wine-3.3 --- media/doc/WINESYNC.txt | 10 ++++------ sdk/tools/winesync/kernel32.cfg | 8 ++++++++ 2 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 sdk/tools/winesync/kernel32.cfg diff --git a/media/doc/WINESYNC.txt b/media/doc/WINESYNC.txt index 6528ad4e6c5..46faf77ee77 100644 --- a/media/doc/WINESYNC.txt +++ b/media/doc/WINESYNC.txt @@ -280,20 +280,18 @@ iphlpapi - modules/rostests/winetests/iphlpapi # Synced to WineStaging-1.9.11 kernel32 - - dll/win32/kernel32/wine/actctx.c # Partly synced with Wine 1.7.55 - dll/win32/kernel32/wine/comm.c # Synced in r52754 + dll/win32/kernel32/wine/actctx.c # Synced to wine-3.3 + dll/win32/kernel32/wine/comm.c # Synced to wine-3.3 dll/win32/kernel32/wine/lzexpand.c # Synced to WineStaging-3.3 dll/win32/kernel32/wine/profile.c # Synced to WineStaging-3.3 dll/win32/kernel32/wine/res.c # Partially synced to WineStaging-3.3 dll/win32/kernel32/winnls/string/casemap.c # Synced to WineStaging-3.3 - dll/win32/kernel32/winnls/string/chartype.c # Synced in r52754 - dll/win32/kernel32/winnls/string/collation.c # Synced to WineStaging-1.7.55 + dll/win32/kernel32/winnls/string/collation.c # Synced to WineStaging-3.3 dll/win32/kernel32/winnls/string/digitmap.c # Synced to WineStaging-3.3 dll/win32/kernel32/winnls/string/fold.c # Synced to WineStaging-3.3 dll/win32/kernel32/winnls/string/format_msg.c # Synced to WineStaging-3.3 - dll/win32/kernel32/winnls/string/lang.c # Synced in r52754 + dll/win32/kernel32/winnls/string/locale.c # Synced in wine-3.3 dll/win32/kernel32/winnls/string/lcformat.c # Synced to WineStaging-3.21 - dll/win32/kernel32/winnls/string/nls.c # Synced in r52754 dll/win32/kernel32/winnls/string/sortkey.c # Synced to WineStaging-3.3 lpk - diff --git a/sdk/tools/winesync/kernel32.cfg b/sdk/tools/winesync/kernel32.cfg new file mode 100644 index 00000000000..a9f08e89be1 --- /dev/null +++ b/sdk/tools/winesync/kernel32.cfg @@ -0,0 +1,8 @@ +directories: null +files: + dlls/kernel32/actctx.c: dll/win32/kernel32/wine/actctx.c + dlls/kernel32/comm.c: dll/win32/kernel32/wine/comm.c + libs/wine/collation.c: dll/win32/kernel32/winnls/string/collation.c + dlls/kernel32/locale.c: dll/win32/kernel32/winnls/string/locale.c +tags: + wine: wine-3.3 From 7ce96fd3642f8be57247250acc20354d1a47b8ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maj=20Sokli=C4=8D?= Date: Fri, 3 May 2024 23:37:37 +0200 Subject: [PATCH 081/182] [SHELL32] Fix keyboard navigation in file deletion dialog CORE-19564 (#6833) Fix usage of left/right arrow keys in file deletion dialog JIRA issue: CORE-19564 Remove WS_GROUP from all but the 1st button "Inshallah brother we will fix this bug" --- dll/win32/shell32/lang/bg-BG.rc | 6 +++--- dll/win32/shell32/lang/ca-ES.rc | 6 +++--- dll/win32/shell32/lang/cs-CZ.rc | 6 +++--- dll/win32/shell32/lang/da-DK.rc | 6 +++--- dll/win32/shell32/lang/de-DE.rc | 6 +++--- dll/win32/shell32/lang/el-GR.rc | 6 +++--- dll/win32/shell32/lang/en-GB.rc | 6 +++--- dll/win32/shell32/lang/en-US.rc | 6 +++--- dll/win32/shell32/lang/es-ES.rc | 6 +++--- dll/win32/shell32/lang/et-EE.rc | 6 +++--- dll/win32/shell32/lang/eu-ES.rc | 6 +++--- dll/win32/shell32/lang/fi-FI.rc | 6 +++--- dll/win32/shell32/lang/fr-FR.rc | 6 +++--- dll/win32/shell32/lang/he-IL.rc | 6 +++--- dll/win32/shell32/lang/hi-IN.rc | 6 +++--- dll/win32/shell32/lang/hu-HU.rc | 6 +++--- dll/win32/shell32/lang/id-ID.rc | 6 +++--- dll/win32/shell32/lang/it-IT.rc | 6 +++--- dll/win32/shell32/lang/ja-JP.rc | 6 +++--- dll/win32/shell32/lang/ko-KR.rc | 6 +++--- dll/win32/shell32/lang/nl-NL.rc | 6 +++--- dll/win32/shell32/lang/no-NO.rc | 6 +++--- dll/win32/shell32/lang/pl-PL.rc | 6 +++--- dll/win32/shell32/lang/pt-BR.rc | 6 +++--- dll/win32/shell32/lang/pt-PT.rc | 6 +++--- dll/win32/shell32/lang/ro-RO.rc | 6 +++--- dll/win32/shell32/lang/ru-RU.rc | 6 +++--- dll/win32/shell32/lang/sk-SK.rc | 6 +++--- dll/win32/shell32/lang/sl-SI.rc | 6 +++--- dll/win32/shell32/lang/sq-AL.rc | 6 +++--- dll/win32/shell32/lang/sv-SE.rc | 6 +++--- dll/win32/shell32/lang/tr-TR.rc | 6 +++--- dll/win32/shell32/lang/uk-UA.rc | 6 +++--- dll/win32/shell32/lang/zh-CN.rc | 6 +++--- dll/win32/shell32/lang/zh-HK.rc | 6 +++--- dll/win32/shell32/lang/zh-TW.rc | 6 +++--- 36 files changed, 108 insertions(+), 108 deletions(-) diff --git a/dll/win32/shell32/lang/bg-BG.rc b/dll/win32/shell32/lang/bg-BG.rc index b285cef2150..21abfeaa6ce 100644 --- a/dll/win32/shell32/lang/bg-BG.rc +++ b/dll/win32/shell32/lang/bg-BG.rc @@ -120,9 +120,9 @@ CAPTION "Съобщение" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Да", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Да за вÑи&чки", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Ðе", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Отказ" , IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Да за вÑи&чки", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&Ðе", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "&Отказ" , IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/ca-ES.rc b/dll/win32/shell32/lang/ca-ES.rc index 58bc255ef18..18ab485a84a 100644 --- a/dll/win32/shell32/lang/ca-ES.rc +++ b/dll/win32/shell32/lang/ca-ES.rc @@ -120,9 +120,9 @@ CAPTION "Message" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Yes to &all", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Yes to &all", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/cs-CZ.rc b/dll/win32/shell32/lang/cs-CZ.rc index 4f319ae1fb2..630226ac3bf 100644 --- a/dll/win32/shell32/lang/cs-CZ.rc +++ b/dll/win32/shell32/lang/cs-CZ.rc @@ -128,9 +128,9 @@ CAPTION "Zpráva" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Ano", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Ano &vÅ¡em", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Ne", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Storno", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Ano &vÅ¡em", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&Ne", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Storno", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/da-DK.rc b/dll/win32/shell32/lang/da-DK.rc index e167e877674..3dc6c366cff 100644 --- a/dll/win32/shell32/lang/da-DK.rc +++ b/dll/win32/shell32/lang/da-DK.rc @@ -127,9 +127,9 @@ CAPTION "Message" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Yes to &all", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Yes to &all", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/de-DE.rc b/dll/win32/shell32/lang/de-DE.rc index 3a9cc2cb413..1cf78623a5d 100644 --- a/dll/win32/shell32/lang/de-DE.rc +++ b/dll/win32/shell32/lang/de-DE.rc @@ -120,9 +120,9 @@ CAPTION "Meldung" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Ja", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Ja zu &allen", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Nein", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Abbrechen", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Ja zu &allen", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&Nein", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Abbrechen", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/el-GR.rc b/dll/win32/shell32/lang/el-GR.rc index 0c90f984112..b7265258dcd 100644 --- a/dll/win32/shell32/lang/el-GR.rc +++ b/dll/win32/shell32/lang/el-GR.rc @@ -120,9 +120,9 @@ CAPTION "ÎœÏνημα" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Îαι", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Îαι σε ÏŒ&λα", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "ÎŒ&χι", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Ά&κυÏο", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Îαι σε ÏŒ&λα", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "ÎŒ&χι", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Ά&κυÏο", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/en-GB.rc b/dll/win32/shell32/lang/en-GB.rc index ec257764567..ea4fb32376c 100644 --- a/dll/win32/shell32/lang/en-GB.rc +++ b/dll/win32/shell32/lang/en-GB.rc @@ -120,9 +120,9 @@ CAPTION "Message" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Yes to &all", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Yes to &all", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/en-US.rc b/dll/win32/shell32/lang/en-US.rc index 4c086fe99c4..32be696ffb2 100644 --- a/dll/win32/shell32/lang/en-US.rc +++ b/dll/win32/shell32/lang/en-US.rc @@ -120,9 +120,9 @@ CAPTION "Message" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Yes to &all", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Yes to &all", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/es-ES.rc b/dll/win32/shell32/lang/es-ES.rc index b3d0a83f148..b79b3c7dba6 100644 --- a/dll/win32/shell32/lang/es-ES.rc +++ b/dll/win32/shell32/lang/es-ES.rc @@ -129,9 +129,9 @@ CAPTION "Mensaje" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Sí", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Sí &a todo", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Cancelar", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Sí &a todo", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "&Cancelar", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/et-EE.rc b/dll/win32/shell32/lang/et-EE.rc index a3ed6377dd3..556964d3abf 100644 --- a/dll/win32/shell32/lang/et-EE.rc +++ b/dll/win32/shell32/lang/et-EE.rc @@ -127,9 +127,9 @@ CAPTION "Sõnum" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Jah", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Jah &kõigele", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Ei", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Loobu", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Jah &kõigele", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&Ei", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "&Loobu", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/eu-ES.rc b/dll/win32/shell32/lang/eu-ES.rc index f6281db928f..0d33f8c8a3f 100644 --- a/dll/win32/shell32/lang/eu-ES.rc +++ b/dll/win32/shell32/lang/eu-ES.rc @@ -127,9 +127,9 @@ CAPTION "Mezu" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Bai", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Guztiari bai", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Ez", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Utzi", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Guztiari bai", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&Ez", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "&Utzi", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/fi-FI.rc b/dll/win32/shell32/lang/fi-FI.rc index d52536711e9..0fd3cccf10e 100644 --- a/dll/win32/shell32/lang/fi-FI.rc +++ b/dll/win32/shell32/lang/fi-FI.rc @@ -120,9 +120,9 @@ CAPTION "Message" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Yes to &all", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Yes to &all", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/fr-FR.rc b/dll/win32/shell32/lang/fr-FR.rc index c74823a130f..6d82102bb49 100644 --- a/dll/win32/shell32/lang/fr-FR.rc +++ b/dll/win32/shell32/lang/fr-FR.rc @@ -120,9 +120,9 @@ CAPTION "Message" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "Oui", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Oui pour tous", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Non", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Annuler", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Oui pour tous", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&Non", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Annuler", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/he-IL.rc b/dll/win32/shell32/lang/he-IL.rc index 151418b5243..904c958e28f 100644 --- a/dll/win32/shell32/lang/he-IL.rc +++ b/dll/win32/shell32/lang/he-IL.rc @@ -127,9 +127,9 @@ CAPTION "הודעה" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "כן", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "כן להכל", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "ל×", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "ביטול", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "כן להכל", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "ל×", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "ביטול", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/hi-IN.rc b/dll/win32/shell32/lang/hi-IN.rc index f2914e17d4a..1971dc7760c 100644 --- a/dll/win32/shell32/lang/hi-IN.rc +++ b/dll/win32/shell32/lang/hi-IN.rc @@ -127,9 +127,9 @@ CAPTION "संदेश" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&हाà¤", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&सब को हां", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&नहीं", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&रदà¥à¤¦ करें", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&सब को हां", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&नहीं", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "&रदà¥à¤¦ करें", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/hu-HU.rc b/dll/win32/shell32/lang/hu-HU.rc index e384c733aad..95dc1b0cf43 100644 --- a/dll/win32/shell32/lang/hu-HU.rc +++ b/dll/win32/shell32/lang/hu-HU.rc @@ -120,9 +120,9 @@ CAPTION "Ãœzenet" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Igen", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Igen az &összesre", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Nem", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Mégse", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Igen az &összesre", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&Nem", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "&Mégse", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/id-ID.rc b/dll/win32/shell32/lang/id-ID.rc index bc2abc5ef51..6757ca72442 100644 --- a/dll/win32/shell32/lang/id-ID.rc +++ b/dll/win32/shell32/lang/id-ID.rc @@ -120,9 +120,9 @@ CAPTION "Pesan" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Ya", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Ya &ke semua", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Tidak", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Batal", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Ya &ke semua", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&Tidak", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "&Batal", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/it-IT.rc b/dll/win32/shell32/lang/it-IT.rc index 7ae6440bddb..f47ba7f6bc0 100644 --- a/dll/win32/shell32/lang/it-IT.rc +++ b/dll/win32/shell32/lang/it-IT.rc @@ -120,9 +120,9 @@ CAPTION "Messaggi" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Sì", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Sì a &tutti", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Annulla", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Sì a &tutti", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "&Annulla", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/ja-JP.rc b/dll/win32/shell32/lang/ja-JP.rc index f40ef618835..a04612aefc1 100644 --- a/dll/win32/shell32/lang/ja-JP.rc +++ b/dll/win32/shell32/lang/ja-JP.rc @@ -120,9 +120,9 @@ CAPTION "メッセージ" FONT 9, "MS UI Gothic" BEGIN DEFPUSHBUTTON "ã¯ã„(&Y)", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "ã™ã¹ã¦ã¯ã„(&A)", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "ã„ã„ãˆ(&N)", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "キャンセル(&C)", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "ã™ã¹ã¦ã¯ã„(&A)", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "ã„ã„ãˆ(&N)", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "キャンセル(&C)", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/ko-KR.rc b/dll/win32/shell32/lang/ko-KR.rc index 9d2d82a6abd..96ade548b19 100644 --- a/dll/win32/shell32/lang/ko-KR.rc +++ b/dll/win32/shell32/lang/ko-KR.rc @@ -127,9 +127,9 @@ CAPTION "왺쑦지" FONT 9, "굴림" BEGIN DEFPUSHBUTTON "예(&Y)", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "ìš’ë‘ ì˜ˆ(&A)", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON " ì롉오(&N)", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "ì·¨ëš(&C)", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "ìš’ë‘ ì˜ˆ(&A)", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON " ì롉오(&N)", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "ì·¨ëš(&C)", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/nl-NL.rc b/dll/win32/shell32/lang/nl-NL.rc index acc5c35aa33..44b1354d334 100644 --- a/dll/win32/shell32/lang/nl-NL.rc +++ b/dll/win32/shell32/lang/nl-NL.rc @@ -120,9 +120,9 @@ CAPTION "Message" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Yes to &all", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Yes to &all", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/no-NO.rc b/dll/win32/shell32/lang/no-NO.rc index 70c1bbfeaa0..ee786bf8d27 100644 --- a/dll/win32/shell32/lang/no-NO.rc +++ b/dll/win32/shell32/lang/no-NO.rc @@ -120,9 +120,9 @@ CAPTION "Meldings" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Ja", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Ja til &alt", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Nei", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Avbry&t", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Ja til &alt", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&Nei", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Avbry&t", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/pl-PL.rc b/dll/win32/shell32/lang/pl-PL.rc index 63464b74db1..473099df450 100644 --- a/dll/win32/shell32/lang/pl-PL.rc +++ b/dll/win32/shell32/lang/pl-PL.rc @@ -129,9 +129,9 @@ CAPTION "Komunikat" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Tak", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Tak na &wszystkie", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Nie", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Anuluj", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Tak na &wszystkie", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&Nie", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "&Anuluj", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/pt-BR.rc b/dll/win32/shell32/lang/pt-BR.rc index ffaeb776230..0fc96da8faf 100644 --- a/dll/win32/shell32/lang/pt-BR.rc +++ b/dll/win32/shell32/lang/pt-BR.rc @@ -120,9 +120,9 @@ CAPTION "Mensagem" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Sim", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Sim para &todos", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Não", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Cancelar", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Sim para &todos", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&Não", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "&Cancelar", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/pt-PT.rc b/dll/win32/shell32/lang/pt-PT.rc index fbadafcd26a..3c9821ed9c5 100644 --- a/dll/win32/shell32/lang/pt-PT.rc +++ b/dll/win32/shell32/lang/pt-PT.rc @@ -120,9 +120,9 @@ CAPTION "Mensagem" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Sim", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Sim para &todos", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Não", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Cancelar", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Sim para &todos", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&Não", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Cancelar", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/ro-RO.rc b/dll/win32/shell32/lang/ro-RO.rc index 3169ac4b532..3af6d165735 100644 --- a/dll/win32/shell32/lang/ro-RO.rc +++ b/dll/win32/shell32/lang/ro-RO.rc @@ -128,9 +128,9 @@ CAPTION "Mesaj" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Da", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "D&a pentru tot", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Nu", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Revocare", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "D&a pentru tot", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&Nu", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Revocare", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/ru-RU.rc b/dll/win32/shell32/lang/ru-RU.rc index b01fb03bd5d..80db86a6e9b 100644 --- a/dll/win32/shell32/lang/ru-RU.rc +++ b/dll/win32/shell32/lang/ru-RU.rc @@ -129,9 +129,9 @@ CAPTION "Уведомление" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Да", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Д&а Ð´Ð»Ñ Ð²Ñех", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Ðет", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Отмена", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Д&а Ð´Ð»Ñ Ð²Ñех", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&Ðет", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "&Отмена", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/sk-SK.rc b/dll/win32/shell32/lang/sk-SK.rc index 55da2ab6809..25e5b4a39fe 100644 --- a/dll/win32/shell32/lang/sk-SK.rc +++ b/dll/win32/shell32/lang/sk-SK.rc @@ -120,9 +120,9 @@ CAPTION "Message" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "Ãn&o", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Ãno pre &vÅ¡etky", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Nie", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&ZruÅ¡iÅ¥", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Ãno pre &vÅ¡etky", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&Nie", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "&ZruÅ¡iÅ¥", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/sl-SI.rc b/dll/win32/shell32/lang/sl-SI.rc index ee98c9d77e8..fad9fb26ff8 100644 --- a/dll/win32/shell32/lang/sl-SI.rc +++ b/dll/win32/shell32/lang/sl-SI.rc @@ -120,9 +120,9 @@ CAPTION "Message" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Yes to &all", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Yes to &all", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/sq-AL.rc b/dll/win32/shell32/lang/sq-AL.rc index bee4ae3512d..27a4887b3f0 100644 --- a/dll/win32/shell32/lang/sq-AL.rc +++ b/dll/win32/shell32/lang/sq-AL.rc @@ -127,9 +127,9 @@ CAPTION "Meszhe" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Po", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Po për T'gjitha", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Jo", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Anulo", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Po për T'gjitha", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&Jo", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "&Anulo", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/sv-SE.rc b/dll/win32/shell32/lang/sv-SE.rc index a5d2aa75103..373ce7199ea 100644 --- a/dll/win32/shell32/lang/sv-SE.rc +++ b/dll/win32/shell32/lang/sv-SE.rc @@ -120,9 +120,9 @@ CAPTION "Meddelande" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Ja", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Ja till &alla", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Nej", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Avbryt", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Ja till &alla", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&Nej", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "&Avbryt", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/tr-TR.rc b/dll/win32/shell32/lang/tr-TR.rc index cf3929bd1f5..3b35c869f49 100644 --- a/dll/win32/shell32/lang/tr-TR.rc +++ b/dll/win32/shell32/lang/tr-TR.rc @@ -129,9 +129,9 @@ CAPTION "Ä°leti" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Evet", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Tümüne Evet", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Hayır", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Ä°ptal", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Tümüne Evet", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&Hayır", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Ä°ptal", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/uk-UA.rc b/dll/win32/shell32/lang/uk-UA.rc index 6f8b873cb40..e8787c0733e 100644 --- a/dll/win32/shell32/lang/uk-UA.rc +++ b/dll/win32/shell32/lang/uk-UA.rc @@ -120,9 +120,9 @@ CAPTION "ПовідомленнÑ" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Так", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Так Ð´Ð»Ñ &вÑÑ–Ñ…", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&ÐÑ–", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&СкаÑувати", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Так Ð´Ð»Ñ &вÑÑ–Ñ…", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "&ÐÑ–", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "&СкаÑувати", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/zh-CN.rc b/dll/win32/shell32/lang/zh-CN.rc index 38ff2656851..7eb4dc94f00 100644 --- a/dll/win32/shell32/lang/zh-CN.rc +++ b/dll/win32/shell32/lang/zh-CN.rc @@ -130,9 +130,9 @@ CAPTION "ä¿¡æ¯" FONT 9, "宋体" BEGIN DEFPUSHBUTTON "是(&Y)", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "全是(&A)", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "å¦(&N)", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "å–消(&C)", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "全是(&A)", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "å¦(&N)", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "å–消(&C)", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/zh-HK.rc b/dll/win32/shell32/lang/zh-HK.rc index c8496b4f432..56aff07ea6d 100644 --- a/dll/win32/shell32/lang/zh-HK.rc +++ b/dll/win32/shell32/lang/zh-HK.rc @@ -128,9 +128,9 @@ CAPTION "訊æ¯" FONT 9, "新細明體" BEGIN DEFPUSHBUTTON "是(&Y)", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "全部皆是(&A)", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "å¦(&N)", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "å–消(&C)", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "全部皆是(&A)", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "å¦(&N)", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "å–消(&C)", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/zh-TW.rc b/dll/win32/shell32/lang/zh-TW.rc index ebde56e6a1f..cd770a85455 100644 --- a/dll/win32/shell32/lang/zh-TW.rc +++ b/dll/win32/shell32/lang/zh-TW.rc @@ -129,9 +129,9 @@ CAPTION "訊æ¯" FONT 9, "新細明體" BEGIN DEFPUSHBUTTON "是(&Y)", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "全部皆是(&A)", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "å¦(&N)", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "å–消(&C)", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "全部皆是(&A)", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "å¦(&N)", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "å–消(&C)", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END From a69532ec4a33425ef454d869d9924404360c1cd9 Mon Sep 17 00:00:00 2001 From: Joachim Henze Date: Sat, 4 May 2024 12:30:43 +0200 Subject: [PATCH 082/182] [USER32] defwnd.c only formatting, no functional change For preparing a backport I do slightly improve the formatting: - for the 2 SetScrollInfo() calls, that I do intend to port back - fix last place where we had mixed space and tab indentation in this file at the DefWindowProc signatures - strip some exclamation marks in some dbg-prints - improve the header - strip a space at some rather long lines NtUserMessageCall() --- win32ss/user/user32/windows/defwnd.c | 35 ++++++++++------------------ 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/win32ss/user/user32/windows/defwnd.c b/win32ss/user/user32/windows/defwnd.c index 852f2281dd9..70dad210604 100644 --- a/win32ss/user/user32/windows/defwnd.c +++ b/win32ss/user/user32/windows/defwnd.c @@ -1,12 +1,8 @@ /* - * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS user32.dll - * FILE: win32ss/user/user32/windows/defwnd.c * PURPOSE: Window management - * PROGRAMMER: Casper S. Hornstrup (chorns@users.sourceforge.net) - * UPDATE HISTORY: - * 06-06-2001 CSH Created + * PROGRAMMER: 2001 Casper S. Hornstrup */ #include @@ -161,7 +157,7 @@ DefWndHandleSysCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) case SC_RESTORE: case SC_CLOSE: case SC_HOTKEY: - NtUserMessageCall( hWnd, WM_SYSCOMMAND, wParam, lParam, (ULONG_PTR)&lResult, FNID_DEFWINDOWPROC, FALSE); + NtUserMessageCall(hWnd, WM_SYSCOMMAND, wParam, lParam, (ULONG_PTR)&lResult, FNID_DEFWINDOWPROC, FALSE); return 0; default: @@ -170,13 +166,12 @@ DefWndHandleSysCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) if (ISITHOOKED(WH_CBT)) { - NtUserMessageCall( hWnd, WM_SYSCOMMAND, wParam, lParam, (ULONG_PTR)&lResult, FNID_DEFWINDOWPROC, FALSE); + NtUserMessageCall(hWnd, WM_SYSCOMMAND, wParam, lParam, (ULONG_PTR)&lResult, FNID_DEFWINDOWPROC, FALSE); if (lResult) return 0; } switch (wParam & 0xfff0) { - case SC_VSCROLL: case SC_HSCROLL: { @@ -618,7 +613,7 @@ User32DefWindowProc(HWND hWnd, if (Flags & UISF_ACTIVE) { - WARN("WM_CHANGEUISTATE does not yet support UISF_ACTIVE!\n"); + WARN("WM_CHANGEUISTATE does not yet support UISF_ACTIVE\n"); } if (Action == UIS_INITIALIZE) @@ -700,7 +695,7 @@ User32DefWindowProc(HWND hWnd, if (Flags & UISF_ACTIVE) { - WARN("WM_UPDATEUISTATE does not yet support UISF_ACTIVE!\n"); + WARN("WM_UPDATEUISTATE does not yet support UISF_ACTIVE\n"); } if (Action == UIS_INITIALIZE) @@ -806,7 +801,7 @@ User32DefWindowProc(HWND hWnd, GoSS: { LRESULT lResult; - NtUserMessageCall( hWnd, Msg, wParam, lParam, (ULONG_PTR)&lResult, FNID_DEFWINDOWPROC, !bUnicode); + NtUserMessageCall(hWnd, Msg, wParam, lParam, (ULONG_PTR)&lResult, FNID_DEFWINDOWPROC, !bUnicode); return lResult; } } @@ -1068,9 +1063,9 @@ RealDefWindowProcW(HWND hWnd, { SCROLLINFO si = {sizeof si, SIF_ALL, 0, 100, 0, 0, 0}; if (Wnd->style & WS_HSCROLL) - SetScrollInfo( hWnd, SB_HORZ, &si, FALSE ); + SetScrollInfo(hWnd, SB_HORZ, &si, FALSE); if (Wnd->style & WS_VSCROLL) - SetScrollInfo( hWnd, SB_VERT, &si, FALSE ); + SetScrollInfo(hWnd, SB_VERT, &si, FALSE); } } @@ -1239,10 +1234,7 @@ RealDefWindowProcW(HWND hWnd, } LRESULT WINAPI -DefWindowProcA(HWND hWnd, - UINT Msg, - WPARAM wParam, - LPARAM lParam) +DefWindowProcA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { BOOL Hook, msgOverride = FALSE; LRESULT Result = 0; @@ -1269,7 +1261,7 @@ DefWindowProcA(HWND hWnd, } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { - ERR("Got exception in hooked DefWindowProcA!\n"); + ERR("Got exception in hooked DefWindowProcA\n"); } _SEH2_END; @@ -1279,10 +1271,7 @@ DefWindowProcA(HWND hWnd, } LRESULT WINAPI -DefWindowProcW(HWND hWnd, - UINT Msg, - WPARAM wParam, - LPARAM lParam) +DefWindowProcW(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { BOOL Hook, msgOverride = FALSE; LRESULT Result = 0; @@ -1309,7 +1298,7 @@ DefWindowProcW(HWND hWnd, } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { - ERR("Got exception in hooked DefWindowProcW!\n"); + ERR("Got exception in hooked DefWindowProcW\n"); } _SEH2_END; From 30226f834dbbb5c40384497f6e96a3cdf2aa3e90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Wed, 27 Sep 2023 21:13:40 +0200 Subject: [PATCH 083/182] [SDK:WINE] Improve wine/unicode.h (v)sprintfW defines, regarding the (v)swprintf functions (#6823) These defines assumed that the (v)swprintf functions were the non-conformant ones (that don't take a 'count' 2nd parameter). Because of that, use instead the _(v)swprintf functions. However, those exist only in NT6+. Therefore, redefine these locally using the _(v)snprintf functions. NOTE: wine/unicode.h has been removed in wine commit 348eebae872e90a735041a153635d00b01178cfa from July 13, 2022 --- sdk/include/reactos/wine/unicode.h | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/sdk/include/reactos/wine/unicode.h b/sdk/include/reactos/wine/unicode.h index 2550cf40653..5bf341ef74d 100644 --- a/sdk/include/reactos/wine/unicode.h +++ b/sdk/include/reactos/wine/unicode.h @@ -24,6 +24,12 @@ #define WINE_UNICODE_INLINE static inline #endif +#if (_WIN32_WINNT < _WIN32_WINNT_VISTA) || (DLL_EXPORT_VERSION < _WIN32_WINNT_VISTA) +/* msvcrt versions incompatibilities */ +#define _swprintf(s,f,...) _snwprintf((s),MAXLONG,(f),##__VA_ARGS__) +#define _vswprintf(s,f,v) _vsnwprintf((s),MAXLONG,(f),(v)) +#endif + #define memicmpW(s1,s2,n) _wcsnicmp((s1),(s2),(n)) #define strlenW(s) wcslen((s)) #define strcpyW(d,s) wcscpy((d),(s)) @@ -55,8 +61,8 @@ #define atolW(s) _wtol((s)) #define strlwrW(s) _wcslwr((s)) #define struprW(s) _wcsupr((s)) -#define sprintfW swprintf -#define vsprintfW vswprintf +#define sprintfW _swprintf +#define vsprintfW _vswprintf #define snprintfW _snwprintf #define vsnprintfW _vsnwprintf #define isprintW iswprint From 29235147e28ec2260d51d13cfbed34b9bc9d8108 Mon Sep 17 00:00:00 2001 From: Doug Lyons Date: Sat, 4 May 2024 07:35:53 -0500 Subject: [PATCH 084/182] [NTUSER] Remove some extra repaints/redraws (#6827) Reposition logic and add Flags testing for RgnType == NULLREGION. This was suggested by @HBelusca and approved by @I_Kill_Bugs --- win32ss/user/ntuser/painting.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/win32ss/user/ntuser/painting.c b/win32ss/user/ntuser/painting.c index e6fb2d6831f..58be0b75e8f 100644 --- a/win32ss/user/ntuser/painting.c +++ b/win32ss/user/ntuser/painting.c @@ -698,6 +698,12 @@ IntInvalidateWindows(PWND Wnd, PREGION Rgn, ULONG Flags) RgnType = NULLREGION; } + /* Nothing to paint, just return */ + if ((RgnType == NULLREGION && (Flags & RDW_INVALIDATE)) || RgnType == ERROR) + { + return; + } + /* * Save current state of pending updates */ From 2f4bb4084d1dd3e634bc618c60291d0cf8b20464 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Thu, 25 Apr 2024 11:24:22 +0200 Subject: [PATCH 085/182] [FREELDR] Rename cmdline.c to settings.c: it will be used for managing global settings (#6803) --- boot/freeldr/freeldr/CMakeLists.txt | 2 +- boot/freeldr/freeldr/include/freeldr.h | 2 +- boot/freeldr/freeldr/include/{cmdline.h => settings.h} | 0 boot/freeldr/freeldr/{cmdline.c => settings.c} | 0 4 files changed, 2 insertions(+), 2 deletions(-) rename boot/freeldr/freeldr/include/{cmdline.h => settings.h} (100%) rename boot/freeldr/freeldr/{cmdline.c => settings.c} (100%) diff --git a/boot/freeldr/freeldr/CMakeLists.txt b/boot/freeldr/freeldr/CMakeLists.txt index 22b58246ea8..b97b15a1763 100644 --- a/boot/freeldr/freeldr/CMakeLists.txt +++ b/boot/freeldr/freeldr/CMakeLists.txt @@ -58,12 +58,12 @@ list(APPEND FREELDR_BOOTLIB_SOURCE list(APPEND FREELDR_BOOTMGR_SOURCE include/freeldr.h - cmdline.c custom.c # linuxboot.c miscboot.c options.c oslist.c + settings.c ui/directui.c # ui/gui.c ui/minitui.c diff --git a/boot/freeldr/freeldr/include/freeldr.h b/boot/freeldr/freeldr/include/freeldr.h index 084d4795b35..cc6478e1011 100644 --- a/boot/freeldr/freeldr/include/freeldr.h +++ b/boot/freeldr/freeldr/include/freeldr.h @@ -63,7 +63,6 @@ #include #include #include -#include #include #include #include @@ -78,6 +77,7 @@ #include #include #include +#include #include /* NTOS loader */ diff --git a/boot/freeldr/freeldr/include/cmdline.h b/boot/freeldr/freeldr/include/settings.h similarity index 100% rename from boot/freeldr/freeldr/include/cmdline.h rename to boot/freeldr/freeldr/include/settings.h diff --git a/boot/freeldr/freeldr/cmdline.c b/boot/freeldr/freeldr/settings.c similarity index 100% rename from boot/freeldr/freeldr/cmdline.c rename to boot/freeldr/freeldr/settings.c From 7bee32d2372feb55949714eec5c92ca7ef2754bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Wed, 24 Apr 2024 19:51:14 +0200 Subject: [PATCH 086/182] [FREELDR] The multiboot command-line and FREELOADER section options become global settings (#6803) Dual-license settings.c: "old" code (CmdLineParse) stays BSD and new code (mine) becomes MIT. --- boot/freeldr/freeldr/arch/uefi/uefildr.c | 10 +- boot/freeldr/freeldr/bootmgr.c | 58 +++-------- boot/freeldr/freeldr/freeldr.c | 5 +- boot/freeldr/freeldr/include/debug.h | 7 +- boot/freeldr/freeldr/include/oslist.h | 5 +- boot/freeldr/freeldr/include/settings.h | 36 +++---- boot/freeldr/freeldr/lib/debug.c | 40 ++++---- boot/freeldr/freeldr/oslist.c | 25 ++--- boot/freeldr/freeldr/settings.c | 120 +++++++++++++++-------- 9 files changed, 151 insertions(+), 155 deletions(-) diff --git a/boot/freeldr/freeldr/arch/uefi/uefildr.c b/boot/freeldr/freeldr/arch/uefi/uefildr.c index 9f801d978a8..69d5041d2ca 100644 --- a/boot/freeldr/freeldr/arch/uefi/uefildr.c +++ b/boot/freeldr/freeldr/arch/uefi/uefildr.c @@ -26,17 +26,19 @@ EfiEntry( _In_ EFI_HANDLE ImageHandle, _In_ EFI_SYSTEM_TABLE *SystemTable) { + PCSTR CmdLine = ""; // FIXME: Determine a command-line from UEFI boot options + SystemTable->ConOut->OutputString(SystemTable->ConOut, L"UEFI EntryPoint: Starting freeldr from UEFI"); GlobalImageHandle = ImageHandle; GlobalSystemTable = SystemTable; - /* Needed for default settings */ - CmdLineParse(""); + /* Load the default settings from the command-line */ + LoadSettings(CmdLine); /* Debugger pre-initialization */ - DebugInit(0); + DebugInit(BootMgrInfo.DebugString); - MachInit(""); + MachInit(CmdLine); /* UI pre-initialization */ if (!UiInitialize(FALSE)) diff --git a/boot/freeldr/freeldr/bootmgr.c b/boot/freeldr/freeldr/bootmgr.c index f843e6addb9..04d8683a64d 100644 --- a/boot/freeldr/freeldr/bootmgr.c +++ b/boot/freeldr/freeldr/bootmgr.c @@ -322,28 +322,6 @@ EditOperatingSystemEntry( } #endif // HAS_OPTION_MENU_EDIT_CMDLINE -static LONG -GetTimeOut( - IN ULONG_PTR FrLdrSectionId) -{ - LONG TimeOut = -1; - CHAR TimeOutText[20]; - - TimeOut = CmdLineGetTimeOut(); - if (TimeOut >= 0) - return TimeOut; - - TimeOut = -1; - - if ((FrLdrSectionId != 0) && - IniReadSettingByName(FrLdrSectionId, "TimeOut", TimeOutText, sizeof(TimeOutText))) - { - TimeOut = atoi(TimeOutText); - } - - return TimeOut; -} - BOOLEAN MainBootMenuKeyPressFilter( IN ULONG KeyPress, @@ -370,14 +348,12 @@ MainBootMenuKeyPressFilter( VOID RunLoader(VOID) { - ULONG_PTR SectionId; - LONG TimeOut; - ULONG OperatingSystemCount; OperatingSystemItem* OperatingSystemList; - PCSTR* OperatingSystemDisplayNames; - ULONG DefaultOperatingSystem; - ULONG SelectedOperatingSystem; - ULONG i; + PCSTR* OperatingSystemDisplayNames; + ULONG OperatingSystemCount; + ULONG DefaultOperatingSystem; + ULONG SelectedOperatingSystem; + ULONG i; if (!MachInitializeBootDevices()) { @@ -395,24 +371,23 @@ VOID RunLoader(VOID) #endif #endif + /* Open FREELDR.INI and load the global FreeLoader settings */ if (!IniFileInitialize()) { UiMessageBoxCritical("Error initializing .ini file."); return; } - - /* Open the [FreeLoader] section */ - if (!IniOpenSection("FreeLoader", &SectionId)) + LoadSettings(NULL); +#if 0 + if (FALSE) { - UiMessageBoxCritical("Section [FreeLoader] not found in freeldr.ini."); + UiMessageBoxCritical("Could not load global FreeLoader settings."); return; } +#endif /* Debugger main initialization */ - DebugInit(SectionId); - - /* Retrieve the default timeout */ - TimeOut = GetTimeOut(SectionId); + DebugInit(BootMgrInfo.DebugString); /* UI main initialization */ if (!UiInitialize(TRUE)) @@ -421,8 +396,7 @@ VOID RunLoader(VOID) return; } - OperatingSystemList = InitOperatingSystemList(SectionId, - &OperatingSystemCount, + OperatingSystemList = InitOperatingSystemList(&OperatingSystemCount, &DefaultOperatingSystem); if (!OperatingSystemList) { @@ -446,7 +420,7 @@ VOID RunLoader(VOID) } /* Find all the message box settings and run them */ - UiShowMessageBoxesInSection(SectionId); + UiShowMessageBoxesInSection(BootMgrInfo.FrLdrSection); for (;;) { @@ -461,7 +435,7 @@ VOID RunLoader(VOID) OperatingSystemDisplayNames, OperatingSystemCount, DefaultOperatingSystem, - TimeOut, + BootMgrInfo.TimeOut, &SelectedOperatingSystem, FALSE, MainBootMenuKeyPressFilter, @@ -471,7 +445,7 @@ VOID RunLoader(VOID) goto Reboot; } - TimeOut = -1; + BootMgrInfo.TimeOut = -1; /* Load the chosen operating system */ LoadOperatingSystem(&OperatingSystemList[SelectedOperatingSystem]); diff --git a/boot/freeldr/freeldr/freeldr.c b/boot/freeldr/freeldr/freeldr.c index da9f8964fdb..c7bac46d93f 100644 --- a/boot/freeldr/freeldr/freeldr.c +++ b/boot/freeldr/freeldr/freeldr.c @@ -42,10 +42,11 @@ CCHAR FrLdrBootPath[MAX_PATH] = ""; VOID __cdecl BootMain(IN PCCH CmdLine) { - CmdLineParse(CmdLine); + /* Load the default settings from the command-line */ + LoadSettings(CmdLine); /* Debugger pre-initialization */ - DebugInit(0); + DebugInit(BootMgrInfo.DebugString); MachInit(CmdLine); diff --git a/boot/freeldr/freeldr/include/debug.h b/boot/freeldr/freeldr/include/debug.h index 3c9d741dac6..6460cacd2c3 100644 --- a/boot/freeldr/freeldr/include/debug.h +++ b/boot/freeldr/freeldr/include/debug.h @@ -40,7 +40,10 @@ #if DBG - VOID DebugInit(IN ULONG_PTR FrLdrSectionId); + VOID + DebugInit( + _In_ PCSTR DebugString); + ULONG DbgPrint(const char *Format, ...); VOID DbgPrint2(ULONG Mask, ULONG Level, const char *File, ULONG Line, char *Format, ...); VOID DebugDumpBuffer(ULONG Mask, PVOID Buffer, ULONG Length); @@ -114,7 +117,7 @@ void MEMORY_WRITE_BREAKPOINT4(unsigned long addr); #define UNIMPLEMENTED - #define DebugInit(FrLdrSectionId) + #define DebugInit(DebugString) #define BugCheck(fmt, ...) #define DbgDumpBuffer(mask, buf, len) #define DebugDisableScreenPort() diff --git a/boot/freeldr/freeldr/include/oslist.h b/boot/freeldr/freeldr/include/oslist.h index b4bf62f9d43..4356b99659f 100644 --- a/boot/freeldr/freeldr/include/oslist.h +++ b/boot/freeldr/freeldr/include/oslist.h @@ -29,6 +29,5 @@ typedef struct tagOperatingSystemItem OperatingSystemItem* InitOperatingSystemList( - IN ULONG_PTR FrLdrSectionId, - OUT PULONG OperatingSystemCount, - OUT PULONG DefaultOperatingSystem); + _Out_ PULONG OperatingSystemCount, + _Out_ PULONG DefaultOperatingSystem); diff --git a/boot/freeldr/freeldr/include/settings.h b/boot/freeldr/freeldr/include/settings.h index 47a733b60ef..8c60a145068 100644 --- a/boot/freeldr/freeldr/include/settings.h +++ b/boot/freeldr/freeldr/include/settings.h @@ -1,28 +1,24 @@ /* - * FreeLdr boot loader - * Copyright (C) 2002, 2003 ReactOS Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * PROJECT: FreeLoader + * LICENSE: MIT (https://spdx.org/licenses/MIT) + * PURPOSE: Command-line parsing and global settings management + * COPYRIGHT: Copyright 2024 Hermès Bélusca-Maïto */ #pragma once -VOID CmdLineParse(IN PCSTR CmdLine); +typedef struct _BOOTMGRINFO +{ + PCSTR DebugString; + PCSTR DefaultOs; + LONG TimeOut; + ULONG_PTR FrLdrSection; +} BOOTMGRINFO, *PBOOTMGRINFO; -PCSTR CmdLineGetDebugString(VOID); -PCSTR CmdLineGetDefaultOS(VOID); -LONG CmdLineGetTimeOut(VOID); +extern BOOTMGRINFO BootMgrInfo; + +VOID +LoadSettings( + _In_opt_ PCSTR CmdLine); /* EOF */ diff --git a/boot/freeldr/freeldr/lib/debug.c b/boot/freeldr/freeldr/lib/debug.c index 4edb35e4bae..c1f9d954cd3 100644 --- a/boot/freeldr/freeldr/lib/debug.c +++ b/boot/freeldr/freeldr/lib/debug.c @@ -59,11 +59,14 @@ VOID ARMWriteToUART(UCHAR Data); #endif -VOID DebugInit(IN ULONG_PTR FrLdrSectionId) +VOID +DebugInit( + _In_ PCSTR DebugString) { - PCHAR CommandLine, PortString, BaudString, IrqString; + static BOOLEAN Initialized = FALSE; + PSTR CommandLine, PortString, BaudString, IrqString; ULONG Value; - CHAR DebugString[256]; + CHAR DbgStringBuffer[256]; /* Always reset the debugging channels */ @@ -87,29 +90,20 @@ VOID DebugInit(IN ULONG_PTR FrLdrSectionId) DbgChannels[DPRINT_WINDOWS] = MAX_LEVEL; #endif - /* Check for pre- or main initialization phase */ - if (FrLdrSectionId == 0) + CommandLine = NULL; + if (!DebugString || !*DebugString) { - /* Pre-initialization phase: use the FreeLdr command-line debugging string */ - CommandLine = (PCHAR)CmdLineGetDebugString(); - - /* If no command-line is provided, initialize the debug port with default settings */ - if (CommandLine == NULL) + /* No command-line is provided: during pre-initialization, + * initialize the debug port with default settings; + * otherwise just return during main initialization */ + if (!Initialized) goto Done; - - strcpy(DebugString, CommandLine); - } - else - { - /* Main initialization phase: use the FreeLdr INI debugging string */ - if (!IniReadSettingByName(FrLdrSectionId, "Debug", DebugString, sizeof(DebugString))) - { - return; - } + return; } - /* Get the Command Line */ - CommandLine = DebugString; + /* Get a copy of the command-line */ + strcpy(DbgStringBuffer, DebugString); + CommandLine = DbgStringBuffer; /* Upcase it */ _strupr(CommandLine); @@ -193,6 +187,8 @@ VOID DebugInit(IN ULONG_PTR FrLdrSectionId) } Done: + Initialized = TRUE; + /* Try to initialize the port; if it fails, remove the corresponding flag */ if (DebugPort & RS232) { diff --git a/boot/freeldr/freeldr/oslist.c b/boot/freeldr/freeldr/oslist.c index 3a05ebd2fba..a472345aa87 100644 --- a/boot/freeldr/freeldr/oslist.c +++ b/boot/freeldr/freeldr/oslist.c @@ -44,15 +44,12 @@ static PCSTR CopyString(PCSTR Source) OperatingSystemItem* InitOperatingSystemList( - IN ULONG_PTR FrLdrSectionId, - OUT PULONG OperatingSystemCount, - OUT PULONG DefaultOperatingSystem) + _Out_ PULONG OperatingSystemCount, + _Out_ PULONG DefaultOperatingSystem) { - ULONG DefaultOS = 0; - PCSTR DefaultOSName = NULL; - CHAR DefaultOSText[80]; - OperatingSystemItem* Items; + PCSTR DefaultOSName; + ULONG DefaultOS = 0; ULONG Count; ULONG i; ULONG_PTR OsSectionId, SectionId; @@ -63,7 +60,7 @@ InitOperatingSystemList( CHAR SettingName[260]; CHAR SettingValue[260]; CHAR BootType[80]; - CHAR TempBuffer[sizeof(SettingValue)/sizeof(CHAR)]; + CHAR TempBuffer[_countof(SettingValue)]; /* Open the [Operating Systems] section */ if (!IniOpenSection("Operating Systems", &OsSectionId)) @@ -77,16 +74,8 @@ InitOperatingSystemList( if (!Items) return NULL; - /* Retrieve which OS is the default one */ - DefaultOSName = CmdLineGetDefaultOS(); - if (!DefaultOSName || !*DefaultOSName) - { - if ((FrLdrSectionId != 0) && - IniReadSettingByName(FrLdrSectionId, "DefaultOS", DefaultOSText, sizeof(DefaultOSText))) - { - DefaultOSName = DefaultOSText; - } - } + /* Retrieve the default OS */ + DefaultOSName = BootMgrInfo.DefaultOs; /* Now loop through the operating system section and load each item */ for (i = 0; i < Count; ++i) diff --git a/boot/freeldr/freeldr/settings.c b/boot/freeldr/freeldr/settings.c index c41466e6163..82051714bcc 100644 --- a/boot/freeldr/freeldr/settings.c +++ b/boot/freeldr/freeldr/settings.c @@ -1,9 +1,10 @@ /* - * PROJECT: ReactOS Boot Loader - * LICENSE: BSD - See COPYING.ARM in the top level directory - * FILE: boot/freeldr/freeldr/cmdline.c - * PURPOSE: FreeLDR Command Line Parsing - * PROGRAMMERS: ReactOS Portable Systems Group + * PROJECT: FreeLoader + * LICENSE: BSD - See COPYING.ARM in the top level directory + * or MIT (https://spdx.org/licenses/MIT) + * PURPOSE: Command-line parsing and global settings management + * COPYRIGHT: Copyright 2008-2010 ReactOS Portable Systems Group + * Copyright 2015-2024 Hermès Bélusca-Maïto */ /* INCLUDES *******************************************************************/ @@ -12,32 +13,27 @@ /* GLOBALS ********************************************************************/ -typedef struct tagCMDLINEINFO -{ - PCSTR DebugString; - PCSTR DefaultOs; - LONG TimeOut; -} CMDLINEINFO, *PCMDLINEINFO; - -CCHAR DebugString[256]; -CCHAR DefaultOs[256]; -CMDLINEINFO CmdLineInfo; +static CCHAR DebugString[256]; +static CCHAR DefaultOs[256]; +BOOTMGRINFO BootMgrInfo = {0}; /* FUNCTIONS ******************************************************************/ -VOID -CmdLineParse(IN PCSTR CmdLine) +static VOID +CmdLineParse( + _In_ PCSTR CmdLine) { PCHAR End, Setting; ULONG_PTR Length, Offset = 0; /* Set defaults */ - CmdLineInfo.DebugString = NULL; - CmdLineInfo.DefaultOs = NULL; - CmdLineInfo.TimeOut = -1; + BootMgrInfo.DebugString = NULL; + BootMgrInfo.DefaultOs = NULL; + BootMgrInfo.TimeOut = -1; + // BootMgrInfo.FrLdrSection = 0; /* - * Get debug string, in the following format: + * Get the debug string, in the following format: * "debug=option1=XXX;option2=YYY;..." * and translate it into the format: * "OPTION1=XXX OPTION2=YYY ..." @@ -62,18 +58,18 @@ CmdLineParse(IN PCSTR CmdLine) Setting++; } - CmdLineInfo.DebugString = DebugString; + BootMgrInfo.DebugString = DebugString; } - /* Get timeout */ + /* Get the timeout */ Setting = strstr(CmdLine, "timeout="); if (Setting) { - CmdLineInfo.TimeOut = atoi(Setting + + BootMgrInfo.TimeOut = atoi(Setting + sizeof("timeout=") - sizeof(ANSI_NULL)); } - /* Get default OS */ + /* Get the default OS */ Setting = strstr(CmdLine, "defaultos="); if (Setting) { @@ -84,10 +80,10 @@ CmdLineParse(IN PCSTR CmdLine) /* Copy the default OS */ RtlStringCbCopyNA(DefaultOs, sizeof(DefaultOs), Setting, Length); - CmdLineInfo.DefaultOs = DefaultOs; + BootMgrInfo.DefaultOs = DefaultOs; } - /* Get ramdisk base address */ + /* Get the ramdisk base address */ Setting = strstr(CmdLine, "rdbase="); if (Setting) { @@ -97,7 +93,7 @@ CmdLineParse(IN PCSTR CmdLine) NULL, 0); } - /* Get ramdisk size */ + /* Get the ramdisk size */ Setting = strstr(CmdLine, "rdsize="); if (Setting) { @@ -106,7 +102,7 @@ CmdLineParse(IN PCSTR CmdLine) NULL, 0); } - /* Get ramdisk offset */ + /* Get the ramdisk offset */ Setting = strstr(CmdLine, "rdoffset="); if (Setting) { @@ -119,20 +115,60 @@ CmdLineParse(IN PCSTR CmdLine) gInitRamDiskBase = (PVOID)((ULONG_PTR)gInitRamDiskBase + Offset); } -PCSTR -CmdLineGetDebugString(VOID) +VOID +LoadSettings( + _In_opt_ PCSTR CmdLine) { - return CmdLineInfo.DebugString; -} + /* Pre-initialization: The settings originate from the command-line. + * Main initialization: Overwrite them if needed with those from freeldr.ini */ + if (CmdLine) + { + CmdLineParse(CmdLine); + return; + } + else if (IsListEmpty(&IniFileSectionListHead)) + { + // ERR("LoadSettings() called but no freeldr.ini\n"); + return; + } -PCSTR -CmdLineGetDefaultOS(VOID) -{ - return CmdLineInfo.DefaultOs; -} + /* Open the [FreeLoader] section and load the settings */ + if ((BootMgrInfo.FrLdrSection == 0) && + !IniOpenSection("FreeLoader", &BootMgrInfo.FrLdrSection)) + { + UiMessageBoxCritical("Section [FreeLoader] not found in freeldr.ini"); + return; + } -LONG -CmdLineGetTimeOut(VOID) -{ - return CmdLineInfo.TimeOut; + /* Get the debug string. Always override it with the one from freeldr.ini */ + if (IniReadSettingByName(BootMgrInfo.FrLdrSection, "Debug", + DebugString, sizeof(DebugString))) + { + BootMgrInfo.DebugString = DebugString; + } + + /* Get the timeout. Keep the existing one if it is valid, + * otherwise retrieve it from freeldr.ini */ + if (BootMgrInfo.TimeOut < 0) + { + CHAR TimeOutText[20]; + BootMgrInfo.TimeOut = -1; + if (IniReadSettingByName(BootMgrInfo.FrLdrSection, "TimeOut", + TimeOutText, sizeof(TimeOutText))) + { + BootMgrInfo.TimeOut = atoi(TimeOutText); + } + } + + /* Get the default OS */ + if (!BootMgrInfo.DefaultOs || !*BootMgrInfo.DefaultOs) + { + if (IniReadSettingByName(BootMgrInfo.FrLdrSection, "DefaultOS", + DefaultOs, sizeof(DefaultOs))) + { + BootMgrInfo.DefaultOs = DefaultOs; + } + } } + +/* EOF */ From 565a4b359a9f83eb02fbea40fd1a6594bc72c3e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Thu, 25 Apr 2024 13:42:21 +0200 Subject: [PATCH 087/182] [FREELDR] Don't popup about deprecated features in auto-boot scenario (#6803) Addendum to commit 5f3554a40. --- boot/freeldr/freeldr/bootmgr.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/boot/freeldr/freeldr/bootmgr.c b/boot/freeldr/freeldr/bootmgr.c index 04d8683a64d..ce977170d5d 100644 --- a/boot/freeldr/freeldr/bootmgr.c +++ b/boot/freeldr/freeldr/bootmgr.c @@ -84,6 +84,10 @@ WarnDeprecated( va_list ap; CHAR msgString[300]; + /* If the user didn't cancel the timeout, don't display the warning */ + if (BootMgrInfo.TimeOut >= 0) + return; + va_start(ap, MsgFmt); RtlStringCbVPrintfA(msgString, sizeof(msgString), MsgFmt, ap); @@ -328,6 +332,9 @@ MainBootMenuKeyPressFilter( IN ULONG SelectedMenuItem, IN PVOID Context OPTIONAL) { + /* Any key-press cancels the global timeout */ + BootMgrInfo.TimeOut = -1; + switch (KeyPress) { case KEY_F8: @@ -445,11 +452,11 @@ VOID RunLoader(VOID) goto Reboot; } - BootMgrInfo.TimeOut = -1; - /* Load the chosen operating system */ LoadOperatingSystem(&OperatingSystemList[SelectedOperatingSystem]); + BootMgrInfo.TimeOut = -1; + /* If we get there, the OS loader failed. As it may have * messed up the display, re-initialize the UI. */ #ifndef _M_ARM From 8e799e2d3eeaf350acda68700577671b405580d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Thu, 28 Dec 2023 17:41:18 +0100 Subject: [PATCH 088/182] [SDK:WINE] Some minor additions to wine/test.h (#6822) - Add two missing debugstr_w* helpers. These will be needed for future winetest syncs. Note that such change would be unnecessary, would wine/test.h and wine/debug.h be also updated with latest Wine versions. Indeed, wine/debug.h is now allowed to be included in wine tests since wine commit: ``` include: Allow using debug.h in tests. Signed-off-by: Alexandre Julliard wine commit id c8f338369695d360e021f2cbd82a18b2c0eb1514 by Alexandre Julliard ``` - Since our wine/test.h doesn't include wine/debug.h for now, include instead stdio.h for the time being, in order to get support for s(w)printf() in tests that don't include stdio.h --- sdk/include/reactos/wine/test.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sdk/include/reactos/wine/test.h b/sdk/include/reactos/wine/test.h index 0cbc40010b5..872ab75378a 100644 --- a/sdk/include/reactos/wine/test.h +++ b/sdk/include/reactos/wine/test.h @@ -25,6 +25,7 @@ #include #include #include +#include // In the future: replace by #ifdef __WINE_CONFIG_H #error config.h should not be used in Wine tests @@ -86,6 +87,8 @@ extern const char *wine_dbgstr_longlong( ULONGLONG ll ); #endif static inline const char *debugstr_a( const char *s ) { return wine_dbgstr_an( s, -1 ); } static inline const char *debugstr_an( const CHAR *s, intptr_t n ) { return wine_dbgstr_an( s, n ); } +static inline const char *debugstr_w( const WCHAR *s ) { return wine_dbgstr_wn( s, -1 ); } +static inline const char *debugstr_wn( const WCHAR *s, int n ) { return wine_dbgstr_wn( s, n ); } static inline const char *wine_dbgstr_a( const char *s ) { return wine_dbgstr_an( s, -1 ); } static inline const char *wine_dbgstr_w( const WCHAR *s ) { return wine_dbgstr_wn( s, -1 ); } From 35d46b23f17fefb1635d72fa82b04c1a2f638a5d Mon Sep 17 00:00:00 2001 From: Serge Gautherie Date: Sun, 14 Jun 2020 13:49:22 +0200 Subject: [PATCH 089/182] [FORMATTING][NTOS:IO] iomgr/irq.c - Add a few blank lines. - Use 2 'continue'. --- ntoskrnl/io/iomgr/irq.c | 98 ++++++++++++++++++++++------------------- 1 file changed, 52 insertions(+), 46 deletions(-) diff --git a/ntoskrnl/io/iomgr/irq.c b/ntoskrnl/io/iomgr/irq.c index 2fed5d1703c..80d8b30e89b 100644 --- a/ntoskrnl/io/iomgr/irq.c +++ b/ntoskrnl/io/iomgr/irq.c @@ -9,6 +9,7 @@ /* INCLUDES *****************************************************************/ #include + #define NDEBUG #include @@ -38,6 +39,7 @@ IoConnectInterrupt(OUT PKINTERRUPT *InterruptObject, BOOLEAN FirstRun; CCHAR Count = 0; KAFFINITY Affinity; + PAGED_CODE(); /* Assume failure */ @@ -78,54 +80,54 @@ IoConnectInterrupt(OUT PKINTERRUPT *InterruptObject, for (Count = 0; Affinity; Count++, Affinity >>= 1) { /* Check if it's enabled for this CPU */ - if (Affinity & 1) + if (!(Affinity & 1)) + continue; + + /* Check which one we will use */ + InterruptUsed = FirstRun ? &IoInterrupt->FirstInterrupt : Interrupt; + + /* Initialize it */ + KeInitializeInterrupt(InterruptUsed, + ServiceRoutine, + ServiceContext, + SpinLockUsed, + Vector, + Irql, + SynchronizeIrql, + InterruptMode, + ShareVector, + Count, + FloatingSave); + + /* Connect it */ + if (!KeConnectInterrupt(InterruptUsed)) { - /* Check which one we will use */ - InterruptUsed = FirstRun ? &IoInterrupt->FirstInterrupt : Interrupt; - - /* Initialize it */ - KeInitializeInterrupt(InterruptUsed, - ServiceRoutine, - ServiceContext, - SpinLockUsed, - Vector, - Irql, - SynchronizeIrql, - InterruptMode, - ShareVector, - Count, - FloatingSave); - - /* Connect it */ - if (!KeConnectInterrupt(InterruptUsed)) - { - /* Check how far we got */ - if (FirstRun) - { - /* We failed early so just free this */ - ExFreePoolWithTag(IoInterrupt, TAG_KINTERRUPT); - } - else - { - /* Far enough, so disconnect everything */ - IoDisconnectInterrupt(&IoInterrupt->FirstInterrupt); - } - - /* And fail */ - *InterruptObject = NULL; - return STATUS_INVALID_PARAMETER; - } - - /* Now we've used up our First Run */ + /* Check how far we got */ if (FirstRun) { - FirstRun = FALSE; + /* We failed early so just free this */ + ExFreePoolWithTag(IoInterrupt, TAG_KINTERRUPT); } else { - /* Move on to the next one */ - IoInterrupt->Interrupt[(UCHAR)Count] = Interrupt++; + /* Far enough, so disconnect everything */ + IoDisconnectInterrupt(&IoInterrupt->FirstInterrupt); } + + /* And fail */ + *InterruptObject = NULL; + return STATUS_INVALID_PARAMETER; + } + + /* Now we've used up our First Run */ + if (FirstRun) + { + FirstRun = FALSE; + } + else + { + /* Move on to the next one */ + IoInterrupt->Interrupt[(UCHAR)Count] = Interrupt++; } } @@ -142,6 +144,7 @@ IoDisconnectInterrupt(PKINTERRUPT InterruptObject) { LONG i; PIO_INTERRUPT IoInterrupt; + PAGED_CODE(); /* Get the I/O Interrupt */ @@ -156,11 +159,11 @@ IoDisconnectInterrupt(PKINTERRUPT InterruptObject) for (i = 0; i < KeNumberProcessors; i++) { /* Make sure one was registered */ - if (IoInterrupt->Interrupt[i]) - { - /* Disconnect it */ - KeDisconnectInterrupt(&InterruptObject[i]); - } + if (!IoInterrupt->Interrupt[i]) + continue; + + /* Disconnect it */ + KeDisconnectInterrupt(&InterruptObject[i]); } /* Free the I/O Interrupt */ @@ -172,6 +175,7 @@ IopConnectInterruptExFullySpecific( _Inout_ PIO_CONNECT_INTERRUPT_PARAMETERS Parameters) { NTSTATUS Status; + PAGED_CODE(); /* Fallback to standard IoConnectInterrupt */ @@ -196,6 +200,7 @@ IoConnectInterruptEx( _Inout_ PIO_CONNECT_INTERRUPT_PARAMETERS Parameters) { PAGED_CODE(); + switch (Parameters->Version) { case CONNECT_FULLY_SPECIFIED: @@ -210,6 +215,7 @@ IoConnectInterruptEx( DPRINT1("FIXME: Line based interrupts are UNIMPLEMENTED\n"); break; } + return STATUS_SUCCESS; } From 603fd832d09153db6a18d3b9458aac1128635ac8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sun, 18 Feb 2024 15:40:33 +0100 Subject: [PATCH 090/182] [NTOS:IO] IoConnectInterrupt(): Zero-out the allocated structure at the correct place (#6503) Addendum to commit d1258e99f (r16229). --- ntoskrnl/io/iomgr/irq.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/ntoskrnl/io/iomgr/irq.c b/ntoskrnl/io/iomgr/irq.c index 80d8b30e89b..66cbbdd1162 100644 --- a/ntoskrnl/io/iomgr/irq.c +++ b/ntoskrnl/io/iomgr/irq.c @@ -57,11 +57,11 @@ IoConnectInterrupt(OUT PKINTERRUPT *InterruptObject, /* Make sure we have a valid CPU count */ if (!Count) return STATUS_INVALID_PARAMETER; - /* Allocate the array of I/O Interrupts */ - IoInterrupt = ExAllocatePoolWithTag(NonPagedPool, - (Count - 1) * sizeof(KINTERRUPT) + - sizeof(IO_INTERRUPT), - TAG_KINTERRUPT); + /* Allocate the array of I/O interrupts */ + IoInterrupt = ExAllocatePoolZero(NonPagedPool, + (Count - 1) * sizeof(KINTERRUPT) + + sizeof(IO_INTERRUPT), + TAG_KINTERRUPT); if (!IoInterrupt) return STATUS_INSUFFICIENT_RESOURCES; /* Select which Spinlock to use */ @@ -72,9 +72,6 @@ IoConnectInterrupt(OUT PKINTERRUPT *InterruptObject, Interrupt = (PKINTERRUPT)(IoInterrupt + 1); FirstRun = TRUE; - /* Start with a fresh structure */ - RtlZeroMemory(IoInterrupt, sizeof(IO_INTERRUPT)); - /* Now create all the interrupts */ Affinity = ProcessorEnableMask & KeActiveProcessors; for (Count = 0; Affinity; Count++, Affinity >>= 1) From cbc78e0629df45fa162adb83299cb5651b985b82 Mon Sep 17 00:00:00 2001 From: Serge Gautherie Date: Sun, 14 Jun 2020 13:49:22 +0200 Subject: [PATCH 091/182] [NTOS:IO] IoDisconnectInterrupt(): Fix disconnecting other interrupts (#6503) Addendum to commit d1258e99f (r16229). --- ntoskrnl/io/iomgr/irq.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ntoskrnl/io/iomgr/irq.c b/ntoskrnl/io/iomgr/irq.c index 66cbbdd1162..f16416aa712 100644 --- a/ntoskrnl/io/iomgr/irq.c +++ b/ntoskrnl/io/iomgr/irq.c @@ -139,8 +139,8 @@ VOID NTAPI IoDisconnectInterrupt(PKINTERRUPT InterruptObject) { - LONG i; PIO_INTERRUPT IoInterrupt; + ULONG i; PAGED_CODE(); @@ -160,7 +160,7 @@ IoDisconnectInterrupt(PKINTERRUPT InterruptObject) continue; /* Disconnect it */ - KeDisconnectInterrupt(&InterruptObject[i]); + KeDisconnectInterrupt(IoInterrupt->Interrupt[i]); } /* Free the I/O Interrupt */ From 2d442956b467ad62ed5e442963ee214a9ebc68c6 Mon Sep 17 00:00:00 2001 From: Serge Gautherie Date: Sun, 14 Jun 2020 13:49:22 +0200 Subject: [PATCH 092/182] [NTOS:IO] IoConnectInterrupt(): Fix default spinlock initialization (#6503) Addendum to commit d1258e99f (r16229). --- ntoskrnl/io/iomgr/irq.c | 11 +++++++---- ntoskrnl/ke/i386/irqobj.c | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/ntoskrnl/io/iomgr/irq.c b/ntoskrnl/io/iomgr/irq.c index f16416aa712..0281542b8da 100644 --- a/ntoskrnl/io/iomgr/irq.c +++ b/ntoskrnl/io/iomgr/irq.c @@ -35,7 +35,6 @@ IoConnectInterrupt(OUT PKINTERRUPT *InterruptObject, PKINTERRUPT Interrupt; PKINTERRUPT InterruptUsed; PIO_INTERRUPT IoInterrupt; - PKSPIN_LOCK SpinLockUsed; BOOLEAN FirstRun; CCHAR Count = 0; KAFFINITY Affinity; @@ -64,8 +63,12 @@ IoConnectInterrupt(OUT PKINTERRUPT *InterruptObject, TAG_KINTERRUPT); if (!IoInterrupt) return STATUS_INSUFFICIENT_RESOURCES; - /* Select which Spinlock to use */ - SpinLockUsed = SpinLock ? SpinLock : &IoInterrupt->SpinLock; + /* Use the structure's spinlock, if none was provided */ + if (!SpinLock) + { + SpinLock = &IoInterrupt->SpinLock; + KeInitializeSpinLock(SpinLock); + } /* We first start with a built-in Interrupt inside the I/O Structure */ *InterruptObject = &IoInterrupt->FirstInterrupt; @@ -87,7 +90,7 @@ IoConnectInterrupt(OUT PKINTERRUPT *InterruptObject, KeInitializeInterrupt(InterruptUsed, ServiceRoutine, ServiceContext, - SpinLockUsed, + SpinLock, Vector, Irql, SynchronizeIrql, diff --git a/ntoskrnl/ke/i386/irqobj.c b/ntoskrnl/ke/i386/irqobj.c index 8fb51f76b12..f5997207db8 100644 --- a/ntoskrnl/ke/i386/irqobj.c +++ b/ntoskrnl/ke/i386/irqobj.c @@ -349,7 +349,7 @@ KeInitializeInterrupt(IN PKINTERRUPT Interrupt, } else { - /* This means we'll be usin the built-in one */ + /* Use the built-in one */ KeInitializeSpinLock(&Interrupt->SpinLock); Interrupt->ActualLock = &Interrupt->SpinLock; } From 347ca5f8598d9d6532908f2dab1b6ae6627fed18 Mon Sep 17 00:00:00 2001 From: Serge Gautherie Date: Sun, 14 Jun 2020 13:49:22 +0200 Subject: [PATCH 093/182] [NTOS:IO] IoConnectInterrupt(): Move InterruptObject assignment where it belongs (#6503) Addendum to commit d1258e99f (r16229), supersedes commit adf534b28. CORE-17256 --- ntoskrnl/io/iomgr/irq.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/ntoskrnl/io/iomgr/irq.c b/ntoskrnl/io/iomgr/irq.c index 0281542b8da..f7af1c73043 100644 --- a/ntoskrnl/io/iomgr/irq.c +++ b/ntoskrnl/io/iomgr/irq.c @@ -70,8 +70,7 @@ IoConnectInterrupt(OUT PKINTERRUPT *InterruptObject, KeInitializeSpinLock(SpinLock); } - /* We first start with a built-in Interrupt inside the I/O Structure */ - *InterruptObject = &IoInterrupt->FirstInterrupt; + /* We first start with a built-in interrupt inside the I/O structure */ Interrupt = (PKINTERRUPT)(IoInterrupt + 1); FirstRun = TRUE; @@ -115,7 +114,6 @@ IoConnectInterrupt(OUT PKINTERRUPT *InterruptObject, } /* And fail */ - *InterruptObject = NULL; return STATUS_INVALID_PARAMETER; } @@ -131,7 +129,8 @@ IoConnectInterrupt(OUT PKINTERRUPT *InterruptObject, } } - /* Return Success */ + /* Return success */ + *InterruptObject = &IoInterrupt->FirstInterrupt; return STATUS_SUCCESS; } From cb6fc76b8b91a9f878a6f90e545651cbddc6d355 Mon Sep 17 00:00:00 2001 From: Serge Gautherie Date: Sun, 14 Jun 2020 13:49:22 +0200 Subject: [PATCH 094/182] [NTOS:IO] IoDisconnectInterrupt(): Switch to ExFreePoolWithTag() (#6503) Follow-up to commit 24a14abf2 (r57412). HBelusca's comment: > If this ExFreePoolWithTag() call was left commented, it's probably > because, back in the day where I introduced it, there was a pool > corruption that was detected, the source of which was unknown at > that time. In retrospect, it is most probably the interrupt disconnect > bug in IoDisconnectInterrupt() that was causing it. Now that this > bug has been fixed just previously, it should be safe to re-enable > pool freeing with tag. --- ntoskrnl/io/iomgr/irq.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ntoskrnl/io/iomgr/irq.c b/ntoskrnl/io/iomgr/irq.c index f7af1c73043..6e09f6b196e 100644 --- a/ntoskrnl/io/iomgr/irq.c +++ b/ntoskrnl/io/iomgr/irq.c @@ -146,7 +146,7 @@ IoDisconnectInterrupt(PKINTERRUPT InterruptObject) PAGED_CODE(); - /* Get the I/O Interrupt */ + /* Get the I/O interrupt */ IoInterrupt = CONTAINING_RECORD(InterruptObject, IO_INTERRUPT, FirstInterrupt); @@ -165,8 +165,8 @@ IoDisconnectInterrupt(PKINTERRUPT InterruptObject) KeDisconnectInterrupt(IoInterrupt->Interrupt[i]); } - /* Free the I/O Interrupt */ - ExFreePool(IoInterrupt); // ExFreePoolWithTag(IoInterrupt, TAG_KINTERRUPT); + /* Free the I/O interrupt */ + ExFreePoolWithTag(IoInterrupt, TAG_KINTERRUPT); } NTSTATUS From 817c27a54e7cb98350bc69d2fea408f5b1492268 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Tue, 23 Apr 2024 21:09:36 +0200 Subject: [PATCH 095/182] [SETUPLIB] Some INI support refactoring: function/struct names, duplicated code (#6815) And convert ANSI strings to UNICODE in a better way instead of zero-extending them. --- base/setup/lib/setuplib.c | 18 +- base/setup/lib/utils/bldrsup.c | 241 ++++++++----------- base/setup/lib/utils/inicache.c | 399 ++++++++++++-------------------- base/setup/lib/utils/inicache.h | 79 +++---- 4 files changed, 292 insertions(+), 445 deletions(-) diff --git a/base/setup/lib/setuplib.c b/base/setup/lib/setuplib.c index 4e3c5efe04a..e7e25be53dd 100644 --- a/base/setup/lib/setuplib.c +++ b/base/setup/lib/setuplib.c @@ -232,7 +232,7 @@ InstallSetupInfFile( IO_STATUS_BLOCK IoStatusBlock; #endif - PINICACHESECTION IniSection; + PINI_SECTION IniSection; WCHAR PathBuffer[MAX_PATH]; WCHAR UnattendInfPath[MAX_PATH]; @@ -241,35 +241,31 @@ InstallSetupInfFile( if (!IniCache) return; - IniSection = IniCacheAppendSection(IniCache, L"SetupParams"); + IniSection = IniAddSection(IniCache, L"SetupParams"); if (IniSection) { /* Key "skipmissingfiles" */ // RtlStringCchPrintfW(PathBuffer, ARRAYSIZE(PathBuffer), // L"\"%s\"", L"WinNt5.2"); - // IniCacheInsertKey(IniSection, NULL, INSERT_LAST, - // L"Version", PathBuffer); + // IniAddKey(IniSection, L"Version", PathBuffer); } - IniSection = IniCacheAppendSection(IniCache, L"Data"); + IniSection = IniAddSection(IniCache, L"Data"); if (IniSection) { RtlStringCchPrintfW(PathBuffer, ARRAYSIZE(PathBuffer), L"\"%s\"", IsUnattendedSetup ? L"yes" : L"no"); - IniCacheInsertKey(IniSection, NULL, INSERT_LAST, - L"UnattendedInstall", PathBuffer); + IniAddKey(IniSection, L"UnattendedInstall", PathBuffer); // "floppylessbootpath" (yes/no) RtlStringCchPrintfW(PathBuffer, ARRAYSIZE(PathBuffer), L"\"%s\"", L"winnt"); - IniCacheInsertKey(IniSection, NULL, INSERT_LAST, - L"ProductType", PathBuffer); + IniAddKey(IniSection, L"ProductType", PathBuffer); RtlStringCchPrintfW(PathBuffer, ARRAYSIZE(PathBuffer), L"\"%s\\\"", pSetupData->SourceRootPath.Buffer); - IniCacheInsertKey(IniSection, NULL, INSERT_LAST, - L"SourcePath", PathBuffer); + IniAddKey(IniSection, L"SourcePath", PathBuffer); // "floppyless" ("0") } diff --git a/base/setup/lib/utils/bldrsup.c b/base/setup/lib/utils/bldrsup.c index 53fdebfeb3f..655575b700a 100644 --- a/base/setup/lib/utils/bldrsup.c +++ b/base/setup/lib/utils/bldrsup.c @@ -79,8 +79,8 @@ typedef struct _BOOT_STORE_INI_CONTEXT PVOID ViewBase; PINICACHE IniCache; - PINICACHESECTION OptionsIniSection; - PINICACHESECTION OsIniSection; + PINI_SECTION OptionsIniSection; + PINI_SECTION OsIniSection; } BOOT_STORE_INI_CONTEXT, *PBOOT_STORE_INI_CONTEXT; // TODO! @@ -208,56 +208,41 @@ static VOID CreateCommonFreeLdrSections( IN OUT PBOOT_STORE_INI_CONTEXT BootStore) { - PINICACHESECTION IniSection; + PINI_SECTION IniSection; /* * Cache the "FREELOADER" section for our future usage. */ - /* Get the "FREELOADER" section */ - IniSection = IniCacheGetSection(BootStore->IniCache, L"FREELOADER"); + /* Get or create the "FREELOADER" section */ + IniSection = IniGetSection(BootStore->IniCache, L"FREELOADER"); if (!IniSection) - { - /* It does not exist yet, so create it */ - IniSection = IniCacheAppendSection(BootStore->IniCache, L"FREELOADER"); - if (!IniSection) - { - DPRINT1("CreateCommonFreeLdrSections: Failed to create 'FREELOADER' section!\n"); - } - } + IniSection = IniAddSection(BootStore->IniCache, L"FREELOADER"); + if (!IniSection) + DPRINT1("CreateCommonFreeLdrSections: Failed to create 'FREELOADER' section!\n"); BootStore->OptionsIniSection = IniSection; /* TimeOut */ - IniCacheInsertKey(BootStore->OptionsIniSection, NULL, INSERT_LAST, - L"TimeOut", L"0"); + IniAddKey(BootStore->OptionsIniSection, L"TimeOut", L"0"); /* Create "Display" section */ - IniSection = IniCacheAppendSection(BootStore->IniCache, L"Display"); - - /* TitleText */ - IniCacheInsertKey(IniSection, NULL, INSERT_LAST, - L"TitleText", L"ReactOS Boot Manager"); + IniSection = IniAddSection(BootStore->IniCache, L"Display"); - /* MinimalUI */ - IniCacheInsertKey(IniSection, NULL, INSERT_LAST, - L"MinimalUI", L"Yes"); + /* TitleText and MinimalUI */ + IniAddKey(IniSection, L"TitleText", L"ReactOS Boot Manager"); + IniAddKey(IniSection, L"MinimalUI", L"Yes"); /* * Cache the "Operating Systems" section for our future usage. */ - /* Get the "Operating Systems" section */ - IniSection = IniCacheGetSection(BootStore->IniCache, L"Operating Systems"); + /* Get or create the "Operating Systems" section */ + IniSection = IniGetSection(BootStore->IniCache, L"Operating Systems"); if (!IniSection) - { - /* It does not exist yet, so create it */ - IniSection = IniCacheAppendSection(BootStore->IniCache, L"Operating Systems"); - if (!IniSection) - { - DPRINT1("CreateCommonFreeLdrSections: Failed to create 'Operating Systems' section!\n"); - } - } + IniSection = IniAddSection(BootStore->IniCache, L"Operating Systems"); + if (!IniSection) + DPRINT1("CreateCommonFreeLdrSections: Failed to create 'Operating Systems' section!\n"); BootStore->OsIniSection = IniSection; } @@ -352,7 +337,7 @@ OpenIniBootLoaderStore( } else { - PINICACHESECTION IniSection; + PINI_SECTION IniSection; /* * Check whether the loader configuration INI file exists, @@ -401,17 +386,12 @@ OpenIniBootLoaderStore( * Cache the "FREELOADER" section for our future usage. */ - /* Get the "FREELOADER" section */ - IniSection = IniCacheGetSection(BootStore->IniCache, L"FREELOADER"); + /* Get or create the "FREELOADER" section */ + IniSection = IniGetSection(BootStore->IniCache, L"FREELOADER"); if (!IniSection) - { - /* It does not exist yet, so create it */ - IniSection = IniCacheAppendSection(BootStore->IniCache, L"FREELOADER"); - if (!IniSection) - { - DPRINT1("OpenIniBootLoaderStore: Failed to retrieve 'FREELOADER' section!\n"); - } - } + IniSection = IniAddSection(BootStore->IniCache, L"FREELOADER"); + if (!IniSection) + DPRINT1("OpenIniBootLoaderStore: Failed to retrieve 'FREELOADER' section!\n"); BootStore->OptionsIniSection = IniSection; @@ -419,17 +399,12 @@ OpenIniBootLoaderStore( * Cache the "Operating Systems" section for our future usage. */ - /* Get the "Operating Systems" section */ - IniSection = IniCacheGetSection(BootStore->IniCache, L"Operating Systems"); + /* Get or create the "Operating Systems" section */ + IniSection = IniGetSection(BootStore->IniCache, L"Operating Systems"); if (!IniSection) - { - /* It does not exist yet, so create it */ - IniSection = IniCacheAppendSection(BootStore->IniCache, L"Operating Systems"); - if (!IniSection) - { - DPRINT1("OpenIniBootLoaderStore: Failed to retrieve 'Operating Systems' section!\n"); - } - } + IniSection = IniAddSection(BootStore->IniCache, L"Operating Systems"); + if (!IniSection) + DPRINT1("OpenIniBootLoaderStore: Failed to retrieve 'Operating Systems' section!\n"); BootStore->OsIniSection = IniSection; } @@ -476,28 +451,26 @@ OpenIniBootLoaderStore( */ /* Get the "boot loader" section */ - IniSection = IniCacheGetSection(BootStore->IniCache, L"boot loader"); + IniSection = IniGetSection(BootStore->IniCache, L"boot loader"); if (!IniSection) { /* Fall back to "flexboot" */ - IniSection = IniCacheGetSection(BootStore->IniCache, L"flexboot"); + IniSection = IniGetSection(BootStore->IniCache, L"flexboot"); if (!IniSection) { /* Fall back to "multiboot" */ - IniSection = IniCacheGetSection(BootStore->IniCache, L"multiboot"); + IniSection = IniGetSection(BootStore->IniCache, L"multiboot"); } } #if 0 if (!IniSection) { /* It does not exist yet, so create it */ - IniSection = IniCacheAppendSection(BootStore->IniCache, L"boot loader"); - if (!IniSection) - { - DPRINT1("OpenIniBootLoaderStore: Failed to retrieve 'boot loader' section!\n"); - } + IniSection = IniAddSection(BootStore->IniCache, L"boot loader"); } #endif + if (!IniSection) + DPRINT1("OpenIniBootLoaderStore: Failed to retrieve 'boot loader' section!\n"); BootStore->OptionsIniSection = IniSection; @@ -506,18 +479,16 @@ OpenIniBootLoaderStore( */ /* Get the "Operating Systems" section */ - IniSection = IniCacheGetSection(BootStore->IniCache, L"operating systems"); + IniSection = IniGetSection(BootStore->IniCache, L"operating systems"); +#if 0 if (!IniSection) { -#if 0 /* It does not exist yet, so create it */ - IniSection = IniCacheAppendSection(BootStore->IniCache, L"operating systems"); - if (!IniSection) - { - DPRINT1("OpenIniBootLoaderStore: Failed to retrieve 'operating systems' section!\n"); - } -#endif + IniSection = IniAddSection(BootStore->IniCache, L"operating systems"); } +#endif + if (!IniSection) + DPRINT1("OpenIniBootLoaderStore: Failed to retrieve 'operating systems' section!\n"); BootStore->OsIniSection = IniSection; } @@ -785,15 +756,14 @@ CreateNTOSEntry( IN ULONG_PTR BootEntryKey, IN PBOOT_STORE_ENTRY BootEntry) { - PINICACHESECTION IniSection; - PWCHAR Section = (PWCHAR)BootEntryKey; + PINI_SECTION IniSection; + PCWSTR Section = (PCWSTR)BootEntryKey; /* Insert the entry into the "Operating Systems" section */ - IniCacheInsertKey(BootStore->OsIniSection, NULL, INSERT_LAST, - Section, (PWSTR)BootEntry->FriendlyName); + IniAddKey(BootStore->OsIniSection, Section, BootEntry->FriendlyName); /* Create a new section */ - IniSection = IniCacheAppendSection(BootStore->IniCache, Section); + IniSection = IniAddSection(BootStore->IniCache, Section); if (BootEntry->OsOptionsLength >= sizeof(NTOS_OPTIONS) && RtlCompareMemory(&BootEntry->OsOptions /* Signature */, @@ -803,17 +773,10 @@ CreateNTOSEntry( { PNTOS_OPTIONS Options = (PNTOS_OPTIONS)&BootEntry->OsOptions; - /* BootType */ - IniCacheInsertKey(IniSection, NULL, INSERT_LAST, - L"BootType", L"Windows2003"); - - /* SystemPath */ - IniCacheInsertKey(IniSection, NULL, INSERT_LAST, - L"SystemPath", (PWSTR)Options->OsLoadPath); - - /* Options */ - IniCacheInsertKey(IniSection, NULL, INSERT_LAST, - L"Options", (PWSTR)Options->OsLoadOptions); + /* BootType, SystemPath and Options */ + IniAddKey(IniSection, L"BootType", L"Windows2003"); + IniAddKey(IniSection, L"SystemPath", Options->OsLoadPath); + IniAddKey(IniSection, L"Options", Options->OsLoadOptions); } else if (BootEntry->OsOptionsLength >= sizeof(BOOT_SECTOR_OPTIONS) && @@ -824,21 +787,11 @@ CreateNTOSEntry( { PBOOT_SECTOR_OPTIONS Options = (PBOOT_SECTOR_OPTIONS)&BootEntry->OsOptions; - /* BootType */ - IniCacheInsertKey(IniSection, NULL, INSERT_LAST, - L"BootType", L"BootSector"); - - /* BootDrive */ - IniCacheInsertKey(IniSection, NULL, INSERT_LAST, - L"BootDrive", (PWSTR)Options->Drive); - - /* BootPartition */ - IniCacheInsertKey(IniSection, NULL, INSERT_LAST, - L"BootPartition", (PWSTR)Options->Partition); - - /* BootSector */ - IniCacheInsertKey(IniSection, NULL, INSERT_LAST, - L"BootSectorFile", (PWSTR)Options->BootSectorFileName); + /* BootType, BootDrive, BootPartition and BootSector */ + IniAddKey(IniSection, L"BootType", L"BootSector"); + IniAddKey(IniSection, L"BootDrive", Options->Drive); + IniAddKey(IniSection, L"BootPartition", Options->Partition); + IniAddKey(IniSection, L"BootSectorFile", Options->BootSectorFileName); } else { @@ -935,8 +888,8 @@ AddBootStoreEntry( } /* Insert the entry into the "Operating Systems" section */ - IniCacheInsertKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OsIniSection, NULL, INSERT_LAST, - (PWSTR)Options->OsLoadPath, Buffer); + IniAddKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OsIniSection, + Options->OsLoadPath, Buffer); RtlFreeHeap(ProcessHeap, 0, Buffer); return STATUS_SUCCESS; @@ -1087,13 +1040,13 @@ QueryBootStoreOptions( { BootOptions->Version = FreeLdr; - Status = IniCacheGetKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, - L"DefaultOS", (PWCHAR*)&BootOptions->CurrentBootEntryKey); + Status = IniGetKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, + L"DefaultOS", (PWCHAR*)&BootOptions->CurrentBootEntryKey); if (!NT_SUCCESS(Status)) BootOptions->CurrentBootEntryKey = 0; - Status = IniCacheGetKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, - L"TimeOut", &TimeoutStr); + Status = IniGetKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, + L"TimeOut", &TimeoutStr); if (NT_SUCCESS(Status) && TimeoutStr) BootOptions->Timeout = _wtoi(TimeoutStr); else @@ -1103,13 +1056,13 @@ QueryBootStoreOptions( { BootOptions->Version = NtLdr; - Status = IniCacheGetKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, - L"default", (PWCHAR*)&BootOptions->CurrentBootEntryKey); + Status = IniGetKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, + L"default", (PWCHAR*)&BootOptions->CurrentBootEntryKey); if (!NT_SUCCESS(Status)) BootOptions->CurrentBootEntryKey = 0; - Status = IniCacheGetKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, - L"timeout", &TimeoutStr); + Status = IniGetKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, + L"timeout", &TimeoutStr); if (NT_SUCCESS(Status) && TimeoutStr) BootOptions->Timeout = _wtoi(TimeoutStr); else @@ -1157,14 +1110,13 @@ SetBootStoreOptions( // TODO: Depending on the flags set in 'FieldsToChange', // change either one or both these bootloader options. // - IniCacheInsertKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, - NULL, INSERT_LAST, - L"DefaultOS", (PWCHAR)BootOptions->CurrentBootEntryKey); + IniAddKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, + L"DefaultOS", (PCWSTR)BootOptions->CurrentBootEntryKey); RtlStringCchPrintfW(TimeoutStr, ARRAYSIZE(TimeoutStr), L"%d", BootOptions->Timeout); - IniCacheInsertKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, - NULL, INSERT_FIRST, // INSERT_LAST, // FIXME!! There is a bug in the INI parser where a given key can be inserted twice in the same section... - L"TimeOut", TimeoutStr); + IniInsertKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, + NULL, INSERT_FIRST, // INSERT_LAST, // FIXME!! There is a bug in the INI parser where a given key can be inserted twice in the same section... + L"TimeOut", TimeoutStr); return STATUS_SUCCESS; } @@ -1180,7 +1132,7 @@ FreeLdrEnumerateBootEntries( { NTSTATUS Status = STATUS_SUCCESS; PINICACHEITERATOR Iterator; - PINICACHESECTION OsIniSection; + PINI_SECTION OsIniSection; PWCHAR SectionName, KeyData; UCHAR xxBootEntry[FIELD_OFFSET(BOOT_STORE_ENTRY, OsOptions) + max(sizeof(NTOS_OPTIONS), sizeof(BOOT_SECTOR_OPTIONS))]; @@ -1188,7 +1140,7 @@ FreeLdrEnumerateBootEntries( PWCHAR Buffer; /* Enumerate all the valid installations listed in the "Operating Systems" section */ - Iterator = IniCacheFindFirstValue(BootStore->OsIniSection, &SectionName, &KeyData); + Iterator = IniFindFirstValue(BootStore->OsIniSection, &SectionName, &KeyData); if (!Iterator) return STATUS_SUCCESS; do { @@ -1243,13 +1195,13 @@ FreeLdrEnumerateBootEntries( BootEntry->OsOptionsLength = 0; /* Search for an existing boot entry section */ - OsIniSection = IniCacheGetSection(BootStore->IniCache, SectionName); + OsIniSection = IniGetSection(BootStore->IniCache, SectionName); if (!OsIniSection) goto DoEnum; /* Check for supported boot type "Windows2003" */ - Status = IniCacheGetKey(OsIniSection, L"BootType", &KeyData); - if (!NT_SUCCESS(Status) || (KeyData == NULL)) + Status = IniGetKey(OsIniSection, L"BootType", &KeyData); + if (!NT_SUCCESS(Status) || !KeyData) { /* Certainly not a ReactOS installation */ DPRINT1("No BootType value present!\n"); @@ -1273,18 +1225,16 @@ FreeLdrEnumerateBootEntries( // BootEntry->BootFilePath = NULL; /* Check its SystemPath */ - Status = IniCacheGetKey(OsIniSection, L"SystemPath", &KeyData); - if (!NT_SUCCESS(Status)) - Options->OsLoadPath = NULL; - else + Options->OsLoadPath = NULL; + Status = IniGetKey(OsIniSection, L"SystemPath", &KeyData); + if (NT_SUCCESS(Status)) Options->OsLoadPath = KeyData; // KeyData == SystemRoot; /* Check the optional Options */ - Status = IniCacheGetKey(OsIniSection, L"Options", &KeyData); - if (!NT_SUCCESS(Status)) - Options->OsLoadOptions = NULL; - else + Options->OsLoadOptions = NULL; + Status = IniGetKey(OsIniSection, L"Options", &KeyData); + if (NT_SUCCESS(Status)) Options->OsLoadOptions = KeyData; } else @@ -1304,24 +1254,21 @@ FreeLdrEnumerateBootEntries( // BootEntry->BootFilePath = NULL; /* Check its BootDrive */ - Status = IniCacheGetKey(OsIniSection, L"BootDrive", &KeyData); - if (!NT_SUCCESS(Status)) - Options->Drive = NULL; - else + Options->Drive = NULL; + Status = IniGetKey(OsIniSection, L"BootDrive", &KeyData); + if (NT_SUCCESS(Status)) Options->Drive = KeyData; /* Check its BootPartition */ - Status = IniCacheGetKey(OsIniSection, L"BootPartition", &KeyData); - if (!NT_SUCCESS(Status)) - Options->Partition = NULL; - else + Options->Partition = NULL; + Status = IniGetKey(OsIniSection, L"BootPartition", &KeyData); + if (NT_SUCCESS(Status)) Options->Partition = KeyData; /* Check its BootSector */ - Status = IniCacheGetKey(OsIniSection, L"BootSectorFile", &KeyData); - if (!NT_SUCCESS(Status)) - Options->BootSectorFileName = NULL; - else + Options->BootSectorFileName = NULL; + Status = IniGetKey(OsIniSection, L"BootSectorFile", &KeyData); + if (NT_SUCCESS(Status)) Options->BootSectorFileName = KeyData; } else @@ -1342,9 +1289,9 @@ FreeLdrEnumerateBootEntries( if (!NT_SUCCESS(Status)) break; } - while (IniCacheFindNextValue(Iterator, &SectionName, &KeyData)); + while (IniFindNextValue(Iterator, &SectionName, &KeyData)); - IniCacheFindClose(Iterator); + IniFindClose(Iterator); return Status; } @@ -1365,7 +1312,7 @@ NtLdrEnumerateBootEntries( ULONG BufferLength; /* Enumerate all the valid installations */ - Iterator = IniCacheFindFirstValue(BootStore->OsIniSection, &SectionName, &KeyData); + Iterator = IniFindFirstValue(BootStore->OsIniSection, &SectionName, &KeyData); if (!Iterator) return STATUS_SUCCESS; do { @@ -1476,9 +1423,9 @@ NtLdrEnumerateBootEntries( if (!NT_SUCCESS(Status)) break; } - while (IniCacheFindNextValue(Iterator, &SectionName, &KeyData)); + while (IniFindNextValue(Iterator, &SectionName, &KeyData)); - IniCacheFindClose(Iterator); + IniFindClose(Iterator); return Status; } diff --git a/base/setup/lib/utils/inicache.c b/base/setup/lib/utils/inicache.c index c38b618dcf2..2c74a4160e3 100644 --- a/base/setup/lib/utils/inicache.c +++ b/base/setup/lib/utils/inicache.c @@ -17,11 +17,11 @@ /* PRIVATE FUNCTIONS ********************************************************/ static -PINICACHEKEY +PINI_KEYWORD IniCacheFreeKey( - PINICACHEKEY Key) + PINI_KEYWORD Key) { - PINICACHEKEY Next; + PINI_KEYWORD Next; if (Key == NULL) return NULL; @@ -44,13 +44,12 @@ IniCacheFreeKey( return Next; } - static -PINICACHESECTION +PINI_SECTION IniCacheFreeSection( - PINICACHESECTION Section) + PINI_SECTION Section) { - PINICACHESECTION Next; + PINI_SECTION Next; if (Section == NULL) return NULL; @@ -73,15 +72,14 @@ IniCacheFreeSection( return Next; } - static -PINICACHEKEY +PINI_KEYWORD IniCacheFindKey( - PINICACHESECTION Section, - PWCHAR Name, - ULONG NameLength) + PINI_SECTION Section, + PWCHAR Name, + ULONG NameLength) { - PINICACHEKEY Key; + PINI_KEYWORD Key; Key = Section->FirstKey; while (Key != NULL) @@ -98,20 +96,19 @@ IniCacheFindKey( return Key; } - static -PINICACHEKEY -IniCacheAddKey( - PINICACHESECTION Section, - PCHAR Name, - ULONG NameLength, - PCHAR Data, - ULONG DataLength) +PINI_KEYWORD +IniCacheAddKeyAorW( + _In_ PINI_SECTION Section, + _In_ PINI_KEYWORD AnchorKey, + _In_ INSERTION_TYPE InsertionType, + _In_ const VOID* Name, + _In_ ULONG NameLength, + _In_ const VOID* Data, + _In_ ULONG DataLength, + _In_ BOOLEAN IsUnicode) { - PINICACHEKEY Key; - ULONG i; - - Key = NULL; + PINI_KEYWORD Key = NULL; if (Section == NULL || Name == NULL || @@ -123,16 +120,18 @@ IniCacheAddKey( return NULL; } - Key = (PINICACHEKEY)RtlAllocateHeap(ProcessHeap, + /* Allocate key buffer */ + Key = (PINI_KEYWORD)RtlAllocateHeap(ProcessHeap, HEAP_ZERO_MEMORY, - sizeof(INICACHEKEY)); + sizeof(INI_KEYWORD)); if (Key == NULL) { DPRINT("RtlAllocateHeap() failed\n"); return NULL; } - Key->Name = (WCHAR*)RtlAllocateHeap(ProcessHeap, + /* Allocate name buffer */ + Key->Name = (PWCHAR)RtlAllocateHeap(ProcessHeap, 0, (NameLength + 1) * sizeof(WCHAR)); if (Key->Name == NULL) @@ -142,14 +141,15 @@ IniCacheAddKey( return NULL; } - /* Copy value name */ - for (i = 0; i < NameLength; i++) - { - Key->Name[i] = (WCHAR)Name[i]; - } - Key->Name[NameLength] = 0; + /* Copy value name (ANSI or UNICODE) */ + if (IsUnicode) + wcsncpy(Key->Name, (PCWCH)Name, NameLength); + else + _snwprintf(Key->Name, NameLength, L"%.*S", NameLength, (PCCH)Name); + Key->Name[NameLength] = UNICODE_NULL; - Key->Data = (WCHAR*)RtlAllocateHeap(ProcessHeap, + /* Allocate data buffer */ + Key->Data = (PWCHAR)RtlAllocateHeap(ProcessHeap, 0, (DataLength + 1) * sizeof(WCHAR)); if (Key->Data == NULL) @@ -160,39 +160,65 @@ IniCacheAddKey( return NULL; } - /* Copy value data */ - for (i = 0; i < DataLength; i++) - { - Key->Data[i] = (WCHAR)Data[i]; - } - Key->Data[DataLength] = 0; - + /* Copy value data (ANSI or UNICODE) */ + if (IsUnicode) + wcsncpy(Key->Data, (PCWCH)Data, DataLength); + else + _snwprintf(Key->Data, DataLength, L"%.*S", DataLength, (PCCH)Data); + Key->Data[DataLength] = UNICODE_NULL; + /* Insert key into section */ if (Section->FirstKey == NULL) { Section->FirstKey = Key; Section->LastKey = Key; } - else + else if ((InsertionType == INSERT_FIRST) || + ((InsertionType == INSERT_BEFORE) && + ((AnchorKey == NULL) || (AnchorKey == Section->FirstKey)))) + { + /* Insert at the head of the list */ + Section->FirstKey->Prev = Key; + Key->Next = Section->FirstKey; + Section->FirstKey = Key; + } + else if ((InsertionType == INSERT_BEFORE) && (AnchorKey != NULL)) + { + /* Insert before the anchor key */ + Key->Next = AnchorKey; + Key->Prev = AnchorKey->Prev; + AnchorKey->Prev->Next = Key; + AnchorKey->Prev = Key; + } + else if ((InsertionType == INSERT_LAST) || + ((InsertionType == INSERT_AFTER) && + ((AnchorKey == NULL) || (AnchorKey == Section->LastKey)))) { Section->LastKey->Next = Key; Key->Prev = Section->LastKey; Section->LastKey = Key; } + else if ((InsertionType == INSERT_AFTER) && (AnchorKey != NULL)) + { + /* Insert after the anchor key */ + Key->Next = AnchorKey->Next; + Key->Prev = AnchorKey; + AnchorKey->Next->Prev = Key; + AnchorKey->Next = Key; + } - return Key; + return Key; } - static -PINICACHESECTION -IniCacheAddSection( - PINICACHE Cache, - PCHAR Name, - ULONG NameLength) +PINI_SECTION +IniCacheAddSectionAorW( + _In_ PINICACHE Cache, + _In_ const VOID* Name, + _In_ ULONG NameLength, + _In_ BOOLEAN IsUnicode) { - PINICACHESECTION Section = NULL; - ULONG i; + PINI_SECTION Section = NULL; if (Cache == NULL || Name == NULL || NameLength == 0) { @@ -200,9 +226,9 @@ IniCacheAddSection( return NULL; } - Section = (PINICACHESECTION)RtlAllocateHeap(ProcessHeap, - HEAP_ZERO_MEMORY, - sizeof(INICACHESECTION)); + Section = (PINI_SECTION)RtlAllocateHeap(ProcessHeap, + HEAP_ZERO_MEMORY, + sizeof(INI_SECTION)); if (Section == NULL) { DPRINT("RtlAllocateHeap() failed\n"); @@ -210,7 +236,7 @@ IniCacheAddSection( } /* Allocate and initialize section name */ - Section->Name = (WCHAR*)RtlAllocateHeap(ProcessHeap, + Section->Name = (PWCHAR)RtlAllocateHeap(ProcessHeap, 0, (NameLength + 1) * sizeof(WCHAR)); if (Section->Name == NULL) @@ -220,12 +246,12 @@ IniCacheAddSection( return NULL; } - /* Copy section name */ - for (i = 0; i < NameLength; i++) - { - Section->Name[i] = (WCHAR)Name[i]; - } - Section->Name[NameLength] = 0; + /* Copy section name (ANSI or UNICODE) */ + if (IsUnicode) + wcsncpy(Section->Name, (PCWCH)Name, NameLength); + else + _snwprintf(Section->Name, NameLength, L"%.*S", NameLength, (PCCH)Name); + Section->Name[NameLength] = UNICODE_NULL; /* Append section */ if (Cache->FirstSection == NULL) @@ -243,7 +269,6 @@ IniCacheAddSection( return Section; } - static PCHAR IniCacheSkipWhitespace( @@ -255,7 +280,6 @@ IniCacheSkipWhitespace( return (*Ptr == 0) ? NULL : Ptr; } - static PCHAR IniCacheSkipToNextSection( @@ -274,7 +298,6 @@ IniCacheSkipToNextSection( return (*Ptr == 0) ? NULL : Ptr; } - static PCHAR IniCacheGetSectionName( @@ -283,7 +306,6 @@ IniCacheGetSectionName( PULONG NameSize) { ULONG Size = 0; - CHAR Name[256]; *NamePtr = NULL; *NameSize = 0; @@ -311,15 +333,11 @@ IniCacheGetSectionName( *NameSize = Size; - strncpy(Name, *NamePtr, Size); - Name[Size] = 0; - - DPRINT("SectionName: '%s'\n", Name); + DPRINT("SectionName: '%.*s'\n", Size, *NamePtr); return Ptr; } - static PCHAR IniCacheGetKeyName( @@ -372,7 +390,6 @@ IniCacheGetKeyName( return Ptr; } - static PCHAR IniCacheGetKeyValue( @@ -457,8 +474,8 @@ IniCacheLoadFromMemory( { PCHAR Ptr; - PINICACHESECTION Section; - PINICACHEKEY Key; + PINI_SECTION Section; + PINI_KEYWORD Key; PCHAR SectionName; ULONG SectionNameSize; @@ -499,12 +516,13 @@ IniCacheLoadFromMemory( DPRINT("[%.*s]\n", SectionNameSize, SectionName); - Section = IniCacheAddSection(*Cache, - SectionName, - SectionNameSize); + Section = IniCacheAddSectionAorW(*Cache, + SectionName, + SectionNameSize, + FALSE); if (Section == NULL) { - DPRINT("IniCacheAddSection() failed\n"); + DPRINT("IniCacheAddSectionAorW() failed\n"); Ptr = IniCacheSkipToNextSection(Ptr); continue; } @@ -528,14 +546,17 @@ IniCacheLoadFromMemory( DPRINT("'%.*s' = '%.*s'\n", KeyNameSize, KeyName, KeyValueSize, KeyValue); - Key = IniCacheAddKey(Section, - KeyName, - KeyNameSize, - KeyValue, - KeyValueSize); + Key = IniCacheAddKeyAorW(Section, + NULL, + INSERT_LAST, + KeyName, + KeyNameSize, + KeyValue, + KeyValueSize, + FALSE); if (Key == NULL) { - DPRINT("IniCacheAddKey() failed\n"); + DPRINT("IniCacheAddKeyAorW() failed\n"); } } } @@ -575,7 +596,7 @@ IniCacheLoadByHandle( DPRINT("File size: %lu\n", FileLength); /* Allocate file buffer with NULL-terminator */ - FileBuffer = (CHAR*)RtlAllocateHeap(ProcessHeap, + FileBuffer = (PCHAR)RtlAllocateHeap(ProcessHeap, 0, FileLength + 1); if (FileBuffer == NULL) @@ -661,7 +682,6 @@ IniCacheLoad( return Status; } - VOID IniCacheDestroy( PINICACHE Cache) @@ -679,12 +699,12 @@ IniCacheDestroy( } -PINICACHESECTION -IniCacheGetSection( +PINI_SECTION +IniGetSection( PINICACHE Cache, PWCHAR Name) { - PINICACHESECTION Section = NULL; + PINI_SECTION Section = NULL; if (Cache == NULL || Name == NULL) { @@ -711,14 +731,13 @@ IniCacheGetSection( return NULL; } - NTSTATUS -IniCacheGetKey( - PINICACHESECTION Section, +IniGetKey( + PINI_SECTION Section, PWCHAR KeyName, PWCHAR *KeyData) { - PINICACHEKEY Key; + PINI_KEYWORD Key; if (Section == NULL || KeyName == NULL || KeyData == NULL) { @@ -741,13 +760,13 @@ IniCacheGetKey( PINICACHEITERATOR -IniCacheFindFirstValue( - PINICACHESECTION Section, +IniFindFirstValue( + PINI_SECTION Section, PWCHAR *KeyName, PWCHAR *KeyData) { PINICACHEITERATOR Iterator; - PINICACHEKEY Key; + PINI_KEYWORD Key; if (Section == NULL || KeyName == NULL || KeyData == NULL) { @@ -780,14 +799,13 @@ IniCacheFindFirstValue( return Iterator; } - BOOLEAN -IniCacheFindNextValue( +IniFindNextValue( PINICACHEITERATOR Iterator, PWCHAR *KeyName, PWCHAR *KeyData) { - PINICACHEKEY Key; + PINI_KEYWORD Key; if (Iterator == NULL || KeyName == NULL || KeyData == NULL) { @@ -810,9 +828,8 @@ IniCacheFindNextValue( return TRUE; } - VOID -IniCacheFindClose( +IniFindClose( PINICACHEITERATOR Iterator) { if (Iterator == NULL) @@ -822,106 +839,46 @@ IniCacheFindClose( } -PINICACHEKEY -IniCacheInsertKey( - PINICACHESECTION Section, - PINICACHEKEY AnchorKey, - INSERTION_TYPE InsertionType, - PWCHAR Name, - PWCHAR Data) +PINI_SECTION +IniAddSection( + _In_ PINICACHE Cache, + _In_ PCWSTR Name) { - PINICACHEKEY Key; - - Key = NULL; - - if (Section == NULL || - Name == NULL || - *Name == 0 || - Data == NULL || - *Data == 0) + if (!Cache || !Name || !*Name) { DPRINT("Invalid parameter\n"); return NULL; } + return IniCacheAddSectionAorW(Cache, Name, wcslen(Name), TRUE); +} - /* Allocate key buffer */ - Key = (PINICACHEKEY)RtlAllocateHeap(ProcessHeap, - HEAP_ZERO_MEMORY, - sizeof(INICACHEKEY)); - if (Key == NULL) - { - DPRINT("RtlAllocateHeap() failed\n"); - return NULL; - } - - /* Allocate name buffer */ - Key->Name = (WCHAR*)RtlAllocateHeap(ProcessHeap, - 0, - (wcslen(Name) + 1) * sizeof(WCHAR)); - if (Key->Name == NULL) - { - DPRINT("RtlAllocateHeap() failed\n"); - RtlFreeHeap(ProcessHeap, 0, Key); - return NULL; - } - - /* Copy value name */ - wcscpy(Key->Name, Name); - - /* Allocate data buffer */ - Key->Data = (WCHAR*)RtlAllocateHeap(ProcessHeap, - 0, - (wcslen(Data) + 1) * sizeof(WCHAR)); - if (Key->Data == NULL) +PINI_KEYWORD +IniInsertKey( + _In_ PINI_SECTION Section, + _In_ PINI_KEYWORD AnchorKey, + _In_ INSERTION_TYPE InsertionType, + _In_ PCWSTR Name, + _In_ PCWSTR Data) +{ + if (!Section || !Name || !*Name || !Data || !*Data) { - DPRINT("RtlAllocateHeap() failed\n"); - RtlFreeHeap(ProcessHeap, 0, Key->Name); - RtlFreeHeap(ProcessHeap, 0, Key); + DPRINT("Invalid parameter\n"); return NULL; } + return IniCacheAddKeyAorW(Section, + AnchorKey, InsertionType, + Name, wcslen(Name), + Data, wcslen(Data), + TRUE); +} - /* Copy value data */ - wcscpy(Key->Data, Data); - - /* Insert key into section */ - if (Section->FirstKey == NULL) - { - Section->FirstKey = Key; - Section->LastKey = Key; - } - else if ((InsertionType == INSERT_FIRST) || - ((InsertionType == INSERT_BEFORE) && ((AnchorKey == NULL) || (AnchorKey == Section->FirstKey)))) - { - /* Insert at the head of the list */ - Section->FirstKey->Prev = Key; - Key->Next = Section->FirstKey; - Section->FirstKey = Key; - } - else if ((InsertionType == INSERT_BEFORE) && (AnchorKey != NULL)) - { - /* Insert before the anchor key */ - Key->Next = AnchorKey; - Key->Prev = AnchorKey->Prev; - AnchorKey->Prev->Next = Key; - AnchorKey->Prev = Key; - } - else if ((InsertionType == INSERT_LAST) || - ((InsertionType == INSERT_AFTER) && ((AnchorKey == NULL) || (AnchorKey == Section->LastKey)))) - { - Section->LastKey->Next = Key; - Key->Prev = Section->LastKey; - Section->LastKey = Key; - } - else if ((InsertionType == INSERT_AFTER) && (AnchorKey != NULL)) - { - /* Insert after the anchor key */ - Key->Next = AnchorKey->Next; - Key->Prev = AnchorKey; - AnchorKey->Next->Prev = Key; - AnchorKey->Next = Key; - } - - return Key; +PINI_KEYWORD +IniAddKey( + _In_ PINI_SECTION Section, + _In_ PCWSTR Name, + _In_ PCWSTR Data) +{ + return IniInsertKey(Section, NULL, INSERT_LAST, Name, Data); } @@ -943,15 +900,14 @@ IniCacheCreate(VOID) return Cache; } - NTSTATUS IniCacheSaveByHandle( PINICACHE Cache, HANDLE FileHandle) { NTSTATUS Status; - PINICACHESECTION Section; - PINICACHEKEY Key; + PINI_SECTION Section; + PINI_KEYWORD Key; ULONG BufferSize; PCHAR Buffer; PCHAR Ptr; @@ -984,7 +940,7 @@ IniCacheSaveByHandle( DPRINT("BufferSize: %lu\n", BufferSize); /* Allocate file buffer with NULL-terminator */ - Buffer = (CHAR*)RtlAllocateHeap(ProcessHeap, + Buffer = (PCHAR)RtlAllocateHeap(ProcessHeap, HEAP_ZERO_MEMORY, BufferSize + 1); if (Buffer == NULL) @@ -1083,57 +1039,4 @@ IniCacheSave( return Status; } - -PINICACHESECTION -IniCacheAppendSection( - PINICACHE Cache, - PWCHAR Name) -{ - PINICACHESECTION Section = NULL; - - if (Cache == NULL || Name == NULL || *Name == 0) - { - DPRINT("Invalid parameter\n"); - return NULL; - } - - Section = (PINICACHESECTION)RtlAllocateHeap(ProcessHeap, - HEAP_ZERO_MEMORY, - sizeof(INICACHESECTION)); - if (Section == NULL) - { - DPRINT("RtlAllocateHeap() failed\n"); - return NULL; - } - - /* Allocate and initialize section name */ - Section->Name = (WCHAR*)RtlAllocateHeap(ProcessHeap, - 0, - (wcslen(Name) + 1) * sizeof(WCHAR)); - if (Section->Name == NULL) - { - DPRINT("RtlAllocateHeap() failed\n"); - RtlFreeHeap(ProcessHeap, 0, Section); - return NULL; - } - - /* Copy section name */ - wcscpy(Section->Name, Name); - - /* Append section */ - if (Cache->FirstSection == NULL) - { - Cache->FirstSection = Section; - Cache->LastSection = Section; - } - else - { - Cache->LastSection->Next = Section; - Section->Prev = Cache->LastSection; - Cache->LastSection = Section; - } - - return Section; -} - /* EOF */ diff --git a/base/setup/lib/utils/inicache.h b/base/setup/lib/utils/inicache.h index 7d396d7a6fa..60f83e4d378 100644 --- a/base/setup/lib/utils/inicache.h +++ b/base/setup/lib/utils/inicache.h @@ -7,42 +7,38 @@ #pragma once -typedef struct _INICACHEKEY +typedef struct _INI_KEYWORD { PWCHAR Name; PWCHAR Data; - struct _INICACHEKEY *Next; - struct _INICACHEKEY *Prev; -} INICACHEKEY, *PINICACHEKEY; + struct _INI_KEYWORD *Next; + struct _INI_KEYWORD *Prev; +} INI_KEYWORD, *PINI_KEYWORD; - -typedef struct _INICACHESECTION +typedef struct _INI_SECTION { PWCHAR Name; - PINICACHEKEY FirstKey; - PINICACHEKEY LastKey; - - struct _INICACHESECTION *Next; - struct _INICACHESECTION *Prev; -} INICACHESECTION, *PINICACHESECTION; + PINI_KEYWORD FirstKey; + PINI_KEYWORD LastKey; + struct _INI_SECTION *Next; + struct _INI_SECTION *Prev; +} INI_SECTION, *PINI_SECTION; typedef struct _INICACHE { - PINICACHESECTION FirstSection; - PINICACHESECTION LastSection; + PINI_SECTION FirstSection; + PINI_SECTION LastSection; } INICACHE, *PINICACHE; - typedef struct _PINICACHEITERATOR { - PINICACHESECTION Section; - PINICACHEKEY Key; + PINI_SECTION Section; + PINI_KEYWORD Key; } INICACHEITERATOR, *PINICACHEITERATOR; - typedef enum { INSERT_FIRST, @@ -76,41 +72,51 @@ VOID IniCacheDestroy( PINICACHE Cache); -PINICACHESECTION -IniCacheGetSection( +PINI_SECTION +IniGetSection( PINICACHE Cache, PWCHAR Name); NTSTATUS -IniCacheGetKey( - PINICACHESECTION Section, +IniGetKey( + PINI_SECTION Section, PWCHAR KeyName, PWCHAR *KeyData); PINICACHEITERATOR -IniCacheFindFirstValue( - PINICACHESECTION Section, +IniFindFirstValue( + PINI_SECTION Section, PWCHAR *KeyName, PWCHAR *KeyData); BOOLEAN -IniCacheFindNextValue( +IniFindNextValue( PINICACHEITERATOR Iterator, PWCHAR *KeyName, PWCHAR *KeyData); VOID -IniCacheFindClose( +IniFindClose( PINICACHEITERATOR Iterator); - -PINICACHEKEY -IniCacheInsertKey( - PINICACHESECTION Section, - PINICACHEKEY AnchorKey, - INSERTION_TYPE InsertionType, - PWCHAR Name, - PWCHAR Data); +PINI_SECTION +IniAddSection( + _In_ PINICACHE Cache, + _In_ PCWSTR Name); + +PINI_KEYWORD +IniInsertKey( + _In_ PINI_SECTION Section, + _In_ PINI_KEYWORD AnchorKey, + _In_ INSERTION_TYPE InsertionType, + _In_ PCWSTR Name, + _In_ PCWSTR Data); + +PINI_KEYWORD +IniAddKey( + _In_ PINI_SECTION Section, + _In_ PCWSTR Name, + _In_ PCWSTR Data); PINICACHE IniCacheCreate(VOID); @@ -125,9 +131,4 @@ IniCacheSave( PINICACHE Cache, PWCHAR FileName); -PINICACHESECTION -IniCacheAppendSection( - PINICACHE Cache, - PWCHAR Name); - /* EOF */ From b9ca9b0061da651caad60d733945f44c9453aff1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Tue, 23 Apr 2024 22:40:31 +0200 Subject: [PATCH 096/182] [SETUPLIB] Don't create new INI sections or key-values if they already exist (#6815) - If a section already exists, return the existing one. This allows avoiding different section entries with the same name in the cache. If an INI file has separate sections with the same name, their contents (key-values) get merged into a unique section. - If a key-value already exists, update its data value and return the existing one. (Note that this may be subject to behaviour change in the future.) --- base/setup/lib/utils/bldrsup.c | 12 +- base/setup/lib/utils/inicache.c | 222 ++++++++++++++++++-------------- base/setup/lib/utils/inicache.h | 10 +- 3 files changed, 137 insertions(+), 107 deletions(-) diff --git a/base/setup/lib/utils/bldrsup.c b/base/setup/lib/utils/bldrsup.c index 655575b700a..e5017eaf210 100644 --- a/base/setup/lib/utils/bldrsup.c +++ b/base/setup/lib/utils/bldrsup.c @@ -214,10 +214,8 @@ CreateCommonFreeLdrSections( * Cache the "FREELOADER" section for our future usage. */ - /* Get or create the "FREELOADER" section */ - IniSection = IniGetSection(BootStore->IniCache, L"FREELOADER"); - if (!IniSection) - IniSection = IniAddSection(BootStore->IniCache, L"FREELOADER"); + /* Create the "FREELOADER" section */ + IniSection = IniAddSection(BootStore->IniCache, L"FREELOADER"); if (!IniSection) DPRINT1("CreateCommonFreeLdrSections: Failed to create 'FREELOADER' section!\n"); @@ -237,10 +235,8 @@ CreateCommonFreeLdrSections( * Cache the "Operating Systems" section for our future usage. */ - /* Get or create the "Operating Systems" section */ - IniSection = IniGetSection(BootStore->IniCache, L"Operating Systems"); - if (!IniSection) - IniSection = IniAddSection(BootStore->IniCache, L"Operating Systems"); + /* Create the "Operating Systems" section */ + IniSection = IniAddSection(BootStore->IniCache, L"Operating Systems"); if (!IniSection) DPRINT1("CreateCommonFreeLdrSections: Failed to create 'Operating Systems' section!\n"); diff --git a/base/setup/lib/utils/inicache.c b/base/setup/lib/utils/inicache.c index 2c74a4160e3..87917a1c175 100644 --- a/base/setup/lib/utils/inicache.c +++ b/base/setup/lib/utils/inicache.c @@ -72,28 +72,36 @@ IniCacheFreeSection( return Next; } +static +PINI_SECTION +IniCacheFindSection( + _In_ PINICACHE Cache, + _In_ PCWSTR Name) +{ + PINI_SECTION Section; + + for (Section = Cache->FirstSection; Section; Section = Section->Next) + { + if (_wcsicmp(Section->Name, Name) == 0) + return Section; + } + return NULL; +} + static PINI_KEYWORD IniCacheFindKey( - PINI_SECTION Section, - PWCHAR Name, - ULONG NameLength) + _In_ PINI_SECTION Section, + _In_ PCWSTR Name) { PINI_KEYWORD Key; - Key = Section->FirstKey; - while (Key != NULL) + for (Key = Section->FirstKey; Key; Key = Key->Next) { - if (NameLength == wcslen(Key->Name)) - { - if (_wcsnicmp(Key->Name, Name, NameLength) == 0) - break; - } - - Key = Key->Next; + if (_wcsicmp(Key->Name, Name) == 0) + return Key; } - - return Key; + return NULL; } static @@ -108,66 +116,98 @@ IniCacheAddKeyAorW( _In_ ULONG DataLength, _In_ BOOLEAN IsUnicode) { - PINI_KEYWORD Key = NULL; + PINI_KEYWORD Key; + PWSTR NameU, DataU; - if (Section == NULL || - Name == NULL || - NameLength == 0 || - Data == NULL || - DataLength == 0) + if (!Section || !Name || NameLength == 0 || !Data || DataLength == 0) { DPRINT("Invalid parameter\n"); return NULL; } - /* Allocate key buffer */ - Key = (PINI_KEYWORD)RtlAllocateHeap(ProcessHeap, - HEAP_ZERO_MEMORY, - sizeof(INI_KEYWORD)); - if (Key == NULL) + /* Allocate the UNICODE key name */ + NameU = (PWSTR)RtlAllocateHeap(ProcessHeap, + 0, + (NameLength + 1) * sizeof(WCHAR)); + if (!NameU) { DPRINT("RtlAllocateHeap() failed\n"); return NULL; } + /* Copy the value name (ANSI or UNICODE) */ + if (IsUnicode) + wcsncpy(NameU, (PCWCH)Name, NameLength); + else + _snwprintf(NameU, NameLength, L"%.*S", NameLength, (PCCH)Name); + NameU[NameLength] = UNICODE_NULL; + + /* + * Find whether a key with the given name already exists in the section. + * If so, modify the data and return it; otherwise create a new one. + */ + Key = IniCacheFindKey(Section, NameU); + if (Key) + { + RtlFreeHeap(ProcessHeap, 0, NameU); - /* Allocate name buffer */ - Key->Name = (PWCHAR)RtlAllocateHeap(ProcessHeap, - 0, - (NameLength + 1) * sizeof(WCHAR)); - if (Key->Name == NULL) + /* Modify the existing data */ + + /* Allocate the UNICODE data buffer */ + DataU = (PWSTR)RtlAllocateHeap(ProcessHeap, + 0, + (DataLength + 1) * sizeof(WCHAR)); + if (!DataU) + { + DPRINT("RtlAllocateHeap() failed\n"); + return NULL; // We failed, don't modify the original key. + } + /* Copy the data (ANSI or UNICODE) */ + if (IsUnicode) + wcsncpy(DataU, (PCWCH)Data, DataLength); + else + _snwprintf(DataU, DataLength, L"%.*S", DataLength, (PCCH)Data); + DataU[DataLength] = UNICODE_NULL; + + /* Swap the old key data with the new one */ + RtlFreeHeap(ProcessHeap, 0, Key->Data); + Key->Data = DataU; + + /* Return the modified key */ + return Key; + } + + /* Allocate the key buffer and name */ + Key = (PINI_KEYWORD)RtlAllocateHeap(ProcessHeap, + HEAP_ZERO_MEMORY, + sizeof(INI_KEYWORD)); + if (!Key) { DPRINT("RtlAllocateHeap() failed\n"); - RtlFreeHeap(ProcessHeap, 0, Key); + RtlFreeHeap(ProcessHeap, 0, NameU); return NULL; } + Key->Name = NameU; - /* Copy value name (ANSI or UNICODE) */ - if (IsUnicode) - wcsncpy(Key->Name, (PCWCH)Name, NameLength); - else - _snwprintf(Key->Name, NameLength, L"%.*S", NameLength, (PCCH)Name); - Key->Name[NameLength] = UNICODE_NULL; - - /* Allocate data buffer */ - Key->Data = (PWCHAR)RtlAllocateHeap(ProcessHeap, - 0, - (DataLength + 1) * sizeof(WCHAR)); - if (Key->Data == NULL) + /* Allocate the UNICODE data buffer */ + DataU = (PWSTR)RtlAllocateHeap(ProcessHeap, + 0, + (DataLength + 1) * sizeof(WCHAR)); + if (!DataU) { DPRINT("RtlAllocateHeap() failed\n"); - RtlFreeHeap(ProcessHeap, 0, Key->Name); + RtlFreeHeap(ProcessHeap, 0, NameU); RtlFreeHeap(ProcessHeap, 0, Key); return NULL; } - - /* Copy value data (ANSI or UNICODE) */ + /* Copy the data (ANSI or UNICODE) */ if (IsUnicode) - wcsncpy(Key->Data, (PCWCH)Data, DataLength); + wcsncpy(DataU, (PCWCH)Data, DataLength); else - _snwprintf(Key->Data, DataLength, L"%.*S", DataLength, (PCCH)Data); - Key->Data[DataLength] = UNICODE_NULL; + _snwprintf(DataU, DataLength, L"%.*S", DataLength, (PCCH)Data); + DataU[DataLength] = UNICODE_NULL; + Key->Data = DataU; - /* Insert key into section */ + /* Insert the key into section */ if (Section->FirstKey == NULL) { Section->FirstKey = Key; @@ -218,42 +258,55 @@ IniCacheAddSectionAorW( _In_ ULONG NameLength, _In_ BOOLEAN IsUnicode) { - PINI_SECTION Section = NULL; + PINI_SECTION Section; + PWSTR NameU; - if (Cache == NULL || Name == NULL || NameLength == 0) + if (!Cache || !Name || NameLength == 0) { DPRINT("Invalid parameter\n"); return NULL; } - Section = (PINI_SECTION)RtlAllocateHeap(ProcessHeap, - HEAP_ZERO_MEMORY, - sizeof(INI_SECTION)); - if (Section == NULL) + /* Allocate the UNICODE section name */ + NameU = (PWSTR)RtlAllocateHeap(ProcessHeap, + 0, + (NameLength + 1) * sizeof(WCHAR)); + if (!NameU) { DPRINT("RtlAllocateHeap() failed\n"); return NULL; } + /* Copy the section name (ANSI or UNICODE) */ + if (IsUnicode) + wcsncpy(NameU, (PCWCH)Name, NameLength); + else + _snwprintf(NameU, NameLength, L"%.*S", NameLength, (PCCH)Name); + NameU[NameLength] = UNICODE_NULL; + + /* + * Find whether a section with the given name already exists. + * If so, just return it; otherwise create a new one. + */ + Section = IniCacheFindSection(Cache, NameU); + if (Section) + { + RtlFreeHeap(ProcessHeap, 0, NameU); + return Section; + } - /* Allocate and initialize section name */ - Section->Name = (PWCHAR)RtlAllocateHeap(ProcessHeap, - 0, - (NameLength + 1) * sizeof(WCHAR)); - if (Section->Name == NULL) + /* Allocate the section buffer and name */ + Section = (PINI_SECTION)RtlAllocateHeap(ProcessHeap, + HEAP_ZERO_MEMORY, + sizeof(INI_SECTION)); + if (!Section) { DPRINT("RtlAllocateHeap() failed\n"); - RtlFreeHeap(ProcessHeap, 0, Section); + RtlFreeHeap(ProcessHeap, 0, NameU); return NULL; } + Section->Name = NameU; - /* Copy section name (ANSI or UNICODE) */ - if (IsUnicode) - wcsncpy(Section->Name, (PCWCH)Name, NameLength); - else - _snwprintf(Section->Name, NameLength, L"%.*S", NameLength, (PCCH)Name); - Section->Name[NameLength] = UNICODE_NULL; - - /* Append section */ + /* Append the section */ if (Cache->FirstSection == NULL) { Cache->FirstSection = Section; @@ -701,34 +754,15 @@ IniCacheDestroy( PINI_SECTION IniGetSection( - PINICACHE Cache, - PWCHAR Name) + _In_ PINICACHE Cache, + _In_ PCWSTR Name) { - PINI_SECTION Section = NULL; - - if (Cache == NULL || Name == NULL) + if (!Cache || !Name) { DPRINT("Invalid parameter\n"); return NULL; } - - /* Iterate through list of sections */ - Section = Cache->FirstSection; - while (Section != NULL) - { - DPRINT("Comparing '%S' and '%S'\n", Section->Name, Name); - - /* Are the section names the same? */ - if (_wcsicmp(Section->Name, Name) == 0) - return Section; - - /* Get the next section */ - Section = Section->Next; - } - - DPRINT("Section not found\n"); - - return NULL; + return IniCacheFindSection(Cache, Name); } NTSTATUS @@ -747,7 +781,7 @@ IniGetKey( *KeyData = NULL; - Key = IniCacheFindKey(Section, KeyName, wcslen(KeyName)); + Key = IniCacheFindKey(Section, KeyName); if (Key == NULL) { return STATUS_INVALID_PARAMETER; diff --git a/base/setup/lib/utils/inicache.h b/base/setup/lib/utils/inicache.h index 60f83e4d378..f33780b8c78 100644 --- a/base/setup/lib/utils/inicache.h +++ b/base/setup/lib/utils/inicache.h @@ -9,8 +9,8 @@ typedef struct _INI_KEYWORD { - PWCHAR Name; - PWCHAR Data; + PWSTR Name; + PWSTR Data; struct _INI_KEYWORD *Next; struct _INI_KEYWORD *Prev; @@ -18,7 +18,7 @@ typedef struct _INI_KEYWORD typedef struct _INI_SECTION { - PWCHAR Name; + PWSTR Name; PINI_KEYWORD FirstKey; PINI_KEYWORD LastKey; @@ -74,8 +74,8 @@ IniCacheDestroy( PINI_SECTION IniGetSection( - PINICACHE Cache, - PWCHAR Name); + _In_ PINICACHE Cache, + _In_ PCWSTR Name); NTSTATUS IniGetKey( From e151ef9ae183458152a5d3e81cf0462030d0cb12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Wed, 24 Apr 2024 12:58:09 +0200 Subject: [PATCH 097/182] [SETUPLIB] Add support for removing sections and key values, and remove some hacks (#6815) - Use LIST_ENTRY instead of custom list pointers; - Fix key/section unlinking before freeing. --- base/setup/lib/utils/bldrsup.c | 72 ++++----- base/setup/lib/utils/inicache.c | 275 ++++++++++++++++---------------- base/setup/lib/utils/inicache.h | 53 +++--- 3 files changed, 201 insertions(+), 199 deletions(-) diff --git a/base/setup/lib/utils/bldrsup.c b/base/setup/lib/utils/bldrsup.c index e5017eaf210..d6f515ea89b 100644 --- a/base/setup/lib/utils/bldrsup.c +++ b/base/setup/lib/utils/bldrsup.c @@ -1006,9 +1006,8 @@ QueryBootStoreOptions( IN OUT PBOOT_STORE_OPTIONS BootOptions /* , IN PULONG BootOptionsLength */ ) { - NTSTATUS Status = STATUS_SUCCESS; PBOOT_STORE_CONTEXT BootStore = (PBOOT_STORE_CONTEXT)Handle; - PWCHAR TimeoutStr; + PCWSTR TimeoutStr; if (!BootStore || !BootOptions) return STATUS_INVALID_PARAMETER; @@ -1036,36 +1035,34 @@ QueryBootStoreOptions( { BootOptions->Version = FreeLdr; - Status = IniGetKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, - L"DefaultOS", (PWCHAR*)&BootOptions->CurrentBootEntryKey); - if (!NT_SUCCESS(Status)) - BootOptions->CurrentBootEntryKey = 0; + BootOptions->CurrentBootEntryKey = 0; + IniGetKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, + L"DefaultOS", (PCWSTR*)&BootOptions->CurrentBootEntryKey); - Status = IniGetKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, - L"TimeOut", &TimeoutStr); - if (NT_SUCCESS(Status) && TimeoutStr) + BootOptions->Timeout = 0; + if (IniGetKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, + L"TimeOut", &TimeoutStr) && TimeoutStr) + { BootOptions->Timeout = _wtoi(TimeoutStr); - else - BootOptions->Timeout = 0; + } } else if (BootStore->Type == NtLdr) { BootOptions->Version = NtLdr; - Status = IniGetKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, - L"default", (PWCHAR*)&BootOptions->CurrentBootEntryKey); - if (!NT_SUCCESS(Status)) - BootOptions->CurrentBootEntryKey = 0; + BootOptions->CurrentBootEntryKey = 0; + IniGetKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, + L"default", (PCWSTR*)&BootOptions->CurrentBootEntryKey); - Status = IniGetKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, - L"timeout", &TimeoutStr); - if (NT_SUCCESS(Status) && TimeoutStr) + BootOptions->Timeout = 0; + if (IniGetKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, + L"timeout", &TimeoutStr) && TimeoutStr) + { BootOptions->Timeout = _wtoi(TimeoutStr); - else - BootOptions->Timeout = 0; + } } - return STATUS_SUCCESS; // FIXME: use Status; instead? + return STATUS_SUCCESS; } NTSTATUS @@ -1110,9 +1107,8 @@ SetBootStoreOptions( L"DefaultOS", (PCWSTR)BootOptions->CurrentBootEntryKey); RtlStringCchPrintfW(TimeoutStr, ARRAYSIZE(TimeoutStr), L"%d", BootOptions->Timeout); - IniInsertKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, - NULL, INSERT_FIRST, // INSERT_LAST, // FIXME!! There is a bug in the INI parser where a given key can be inserted twice in the same section... - L"TimeOut", TimeoutStr); + IniAddKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, + L"TimeOut", TimeoutStr); return STATUS_SUCCESS; } @@ -1129,7 +1125,7 @@ FreeLdrEnumerateBootEntries( NTSTATUS Status = STATUS_SUCCESS; PINICACHEITERATOR Iterator; PINI_SECTION OsIniSection; - PWCHAR SectionName, KeyData; + PCWSTR SectionName, KeyData; UCHAR xxBootEntry[FIELD_OFFSET(BOOT_STORE_ENTRY, OsOptions) + max(sizeof(NTOS_OPTIONS), sizeof(BOOT_SECTOR_OPTIONS))]; PBOOT_STORE_ENTRY BootEntry = (PBOOT_STORE_ENTRY)&xxBootEntry; @@ -1140,7 +1136,7 @@ FreeLdrEnumerateBootEntries( if (!Iterator) return STATUS_SUCCESS; do { - PWCHAR InstallName; + PCWSTR InstallName; ULONG InstallNameLength; /* Poor-man quotes removal (improvement over bootsup.c:UpdateFreeLoaderIni) */ @@ -1195,9 +1191,8 @@ FreeLdrEnumerateBootEntries( if (!OsIniSection) goto DoEnum; - /* Check for supported boot type "Windows2003" */ - Status = IniGetKey(OsIniSection, L"BootType", &KeyData); - if (!NT_SUCCESS(Status) || !KeyData) + /* Check for supported boot type */ + if (!IniGetKey(OsIniSection, L"BootType", &KeyData) || !KeyData) { /* Certainly not a ReactOS installation */ DPRINT1("No BootType value present!\n"); @@ -1222,15 +1217,13 @@ FreeLdrEnumerateBootEntries( /* Check its SystemPath */ Options->OsLoadPath = NULL; - Status = IniGetKey(OsIniSection, L"SystemPath", &KeyData); - if (NT_SUCCESS(Status)) + if (IniGetKey(OsIniSection, L"SystemPath", &KeyData)) Options->OsLoadPath = KeyData; // KeyData == SystemRoot; /* Check the optional Options */ Options->OsLoadOptions = NULL; - Status = IniGetKey(OsIniSection, L"Options", &KeyData); - if (NT_SUCCESS(Status)) + if (IniGetKey(OsIniSection, L"Options", &KeyData)) Options->OsLoadOptions = KeyData; } else @@ -1251,20 +1244,17 @@ FreeLdrEnumerateBootEntries( /* Check its BootDrive */ Options->Drive = NULL; - Status = IniGetKey(OsIniSection, L"BootDrive", &KeyData); - if (NT_SUCCESS(Status)) + if (IniGetKey(OsIniSection, L"BootDrive", &KeyData)) Options->Drive = KeyData; /* Check its BootPartition */ Options->Partition = NULL; - Status = IniGetKey(OsIniSection, L"BootPartition", &KeyData); - if (NT_SUCCESS(Status)) + if (IniGetKey(OsIniSection, L"BootPartition", &KeyData)) Options->Partition = KeyData; /* Check its BootSector */ Options->BootSectorFileName = NULL; - Status = IniGetKey(OsIniSection, L"BootSectorFile", &KeyData); - if (NT_SUCCESS(Status)) + if (IniGetKey(OsIniSection, L"BootSectorFile", &KeyData)) Options->BootSectorFileName = KeyData; } else @@ -1300,7 +1290,7 @@ NtLdrEnumerateBootEntries( { NTSTATUS Status = STATUS_SUCCESS; PINICACHEITERATOR Iterator; - PWCHAR SectionName, KeyData; + PCWSTR SectionName, KeyData; UCHAR xxBootEntry[FIELD_OFFSET(BOOT_STORE_ENTRY, OsOptions) + sizeof(NTOS_OPTIONS)]; PBOOT_STORE_ENTRY BootEntry = (PBOOT_STORE_ENTRY)&xxBootEntry; PNTOS_OPTIONS Options = (PNTOS_OPTIONS)&BootEntry->OsOptions; @@ -1312,7 +1302,7 @@ NtLdrEnumerateBootEntries( if (!Iterator) return STATUS_SUCCESS; do { - PWCHAR InstallName, OsOptions; + PCWSTR InstallName, OsOptions; ULONG InstallNameLength, OsOptionsLength; /* Poor-man quotes removal (improvement over bootsup.c:UpdateFreeLoaderIni) */ diff --git a/base/setup/lib/utils/inicache.c b/base/setup/lib/utils/inicache.c index 87917a1c175..2baba67978f 100644 --- a/base/setup/lib/utils/inicache.c +++ b/base/setup/lib/utils/inicache.c @@ -16,60 +16,38 @@ /* PRIVATE FUNCTIONS ********************************************************/ -static -PINI_KEYWORD +static VOID IniCacheFreeKey( - PINI_KEYWORD Key) + _In_ PINI_KEYWORD Key) { - PINI_KEYWORD Next; - - if (Key == NULL) - return NULL; + /* Unlink the key */ + RemoveEntryList(&Key->ListEntry); - Next = Key->Next; - if (Key->Name != NULL) - { + /* Free its data */ + if (Key->Name) RtlFreeHeap(ProcessHeap, 0, Key->Name); - Key->Name = NULL; - } - - if (Key->Data != NULL) - { + if (Key->Data) RtlFreeHeap(ProcessHeap, 0, Key->Data); - Key->Data = NULL; - } - RtlFreeHeap(ProcessHeap, 0, Key); - - return Next; } -static -PINI_SECTION +static VOID IniCacheFreeSection( - PINI_SECTION Section) + _In_ PINI_SECTION Section) { - PINI_SECTION Next; + /* Unlink the section */ + RemoveEntryList(&Section->ListEntry); - if (Section == NULL) - return NULL; - - Next = Section->Next; - while (Section->FirstKey != NULL) + /* Free its data */ + while (!IsListEmpty(&Section->KeyList)) { - Section->FirstKey = IniCacheFreeKey(Section->FirstKey); + PLIST_ENTRY Entry = RemoveHeadList(&Section->KeyList); + PINI_KEYWORD Key = CONTAINING_RECORD(Entry, INI_KEYWORD, ListEntry); + IniCacheFreeKey(Key); } - Section->LastKey = NULL; - - if (Section->Name != NULL) - { + if (Section->Name) RtlFreeHeap(ProcessHeap, 0, Section->Name); - Section->Name = NULL; - } - RtlFreeHeap(ProcessHeap, 0, Section); - - return Next; } static @@ -78,10 +56,13 @@ IniCacheFindSection( _In_ PINICACHE Cache, _In_ PCWSTR Name) { - PINI_SECTION Section; + PLIST_ENTRY Entry; - for (Section = Cache->FirstSection; Section; Section = Section->Next) + for (Entry = Cache->SectionList.Flink; + Entry != &Cache->SectionList; + Entry = Entry->Flink) { + PINI_SECTION Section = CONTAINING_RECORD(Entry, INI_SECTION, ListEntry); if (_wcsicmp(Section->Name, Name) == 0) return Section; } @@ -94,10 +75,13 @@ IniCacheFindKey( _In_ PINI_SECTION Section, _In_ PCWSTR Name) { - PINI_KEYWORD Key; + PLIST_ENTRY Entry; - for (Key = Section->FirstKey; Key; Key = Key->Next) + for (Entry = Section->KeyList.Flink; + Entry != &Section->KeyList; + Entry = Entry->Flink) { + PINI_KEYWORD Key = CONTAINING_RECORD(Entry, INI_KEYWORD, ListEntry); if (_wcsicmp(Key->Name, Name) == 0) return Key; } @@ -208,43 +192,33 @@ IniCacheAddKeyAorW( Key->Data = DataU; /* Insert the key into section */ - if (Section->FirstKey == NULL) + if (IsListEmpty(&Section->KeyList)) { - Section->FirstKey = Key; - Section->LastKey = Key; + InsertHeadList(&Section->KeyList, &Key->ListEntry); } else if ((InsertionType == INSERT_FIRST) || ((InsertionType == INSERT_BEFORE) && - ((AnchorKey == NULL) || (AnchorKey == Section->FirstKey)))) + (!AnchorKey || (&AnchorKey->ListEntry == Section->KeyList.Flink)))) { /* Insert at the head of the list */ - Section->FirstKey->Prev = Key; - Key->Next = Section->FirstKey; - Section->FirstKey = Key; + InsertHeadList(&Section->KeyList, &Key->ListEntry); } - else if ((InsertionType == INSERT_BEFORE) && (AnchorKey != NULL)) + else if ((InsertionType == INSERT_BEFORE) && AnchorKey) { /* Insert before the anchor key */ - Key->Next = AnchorKey; - Key->Prev = AnchorKey->Prev; - AnchorKey->Prev->Next = Key; - AnchorKey->Prev = Key; + InsertTailList(&AnchorKey->ListEntry, &Key->ListEntry); } else if ((InsertionType == INSERT_LAST) || ((InsertionType == INSERT_AFTER) && - ((AnchorKey == NULL) || (AnchorKey == Section->LastKey)))) + (!AnchorKey || (&AnchorKey->ListEntry == Section->KeyList.Blink)))) { - Section->LastKey->Next = Key; - Key->Prev = Section->LastKey; - Section->LastKey = Key; + /* Insert at the tail of the list */ + InsertTailList(&Section->KeyList, &Key->ListEntry); } - else if ((InsertionType == INSERT_AFTER) && (AnchorKey != NULL)) + else if ((InsertionType == INSERT_AFTER) && AnchorKey) { /* Insert after the anchor key */ - Key->Next = AnchorKey->Next; - Key->Prev = AnchorKey; - AnchorKey->Next->Prev = Key; - AnchorKey->Next = Key; + InsertHeadList(&AnchorKey->ListEntry, &Key->ListEntry); } return Key; @@ -305,19 +279,10 @@ IniCacheAddSectionAorW( return NULL; } Section->Name = NameU; + InitializeListHead(&Section->KeyList); /* Append the section */ - if (Cache->FirstSection == NULL) - { - Cache->FirstSection = Section; - Cache->LastSection = Section; - } - else - { - Cache->LastSection->Next = Section; - Section->Prev = Cache->LastSection; - Cache->LastSection = Section; - } + InsertTailList(&Cache->SectionList, &Section->ListEntry); return Section; } @@ -540,14 +505,9 @@ IniCacheLoadFromMemory( ULONG KeyValueSize; /* Allocate inicache header */ - *Cache = (PINICACHE)RtlAllocateHeap(ProcessHeap, - HEAP_ZERO_MEMORY, - sizeof(INICACHE)); - if (*Cache == NULL) - { - DPRINT("RtlAllocateHeap() failed\n"); + *Cache = IniCacheCreate(); + if (!*Cache) return STATUS_INSUFFICIENT_RESOURCES; - } /* Parse ini file */ Section = NULL; @@ -737,16 +697,17 @@ IniCacheLoad( VOID IniCacheDestroy( - PINICACHE Cache) + _In_ PINICACHE Cache) { - if (Cache == NULL) + if (!Cache) return; - while (Cache->FirstSection != NULL) + while (!IsListEmpty(&Cache->SectionList)) { - Cache->FirstSection = IniCacheFreeSection(Cache->FirstSection); + PLIST_ENTRY Entry = RemoveHeadList(&Cache->SectionList); + PINI_SECTION Section = CONTAINING_RECORD(Entry, INI_SECTION, ListEntry); + IniCacheFreeSection(Section); } - Cache->LastSection = NULL; RtlFreeHeap(ProcessHeap, 0, Cache); } @@ -765,110 +726,110 @@ IniGetSection( return IniCacheFindSection(Cache, Name); } -NTSTATUS +PINI_KEYWORD IniGetKey( - PINI_SECTION Section, - PWCHAR KeyName, - PWCHAR *KeyData) + _In_ PINI_SECTION Section, + _In_ PCWSTR KeyName, + _Out_ PCWSTR* KeyData) { PINI_KEYWORD Key; - if (Section == NULL || KeyName == NULL || KeyData == NULL) + if (!Section || !KeyName || !KeyData) { DPRINT("Invalid parameter\n"); - return STATUS_INVALID_PARAMETER; + return NULL; } *KeyData = NULL; Key = IniCacheFindKey(Section, KeyName); - if (Key == NULL) - { - return STATUS_INVALID_PARAMETER; - } + if (!Key) + return NULL; *KeyData = Key->Data; - return STATUS_SUCCESS; + return Key; } PINICACHEITERATOR IniFindFirstValue( - PINI_SECTION Section, - PWCHAR *KeyName, - PWCHAR *KeyData) + _In_ PINI_SECTION Section, + _Out_ PCWSTR* KeyName, + _Out_ PCWSTR* KeyData) { PINICACHEITERATOR Iterator; + PLIST_ENTRY Entry; PINI_KEYWORD Key; - if (Section == NULL || KeyName == NULL || KeyData == NULL) + if (!Section || !KeyName || !KeyData) { DPRINT("Invalid parameter\n"); return NULL; } - Key = Section->FirstKey; - if (Key == NULL) + Entry = Section->KeyList.Flink; + if (Entry == &Section->KeyList) { DPRINT("Invalid parameter\n"); return NULL; } - - *KeyName = Key->Name; - *KeyData = Key->Data; + Key = CONTAINING_RECORD(Entry, INI_KEYWORD, ListEntry); Iterator = (PINICACHEITERATOR)RtlAllocateHeap(ProcessHeap, 0, sizeof(INICACHEITERATOR)); - if (Iterator == NULL) + if (!Iterator) { DPRINT("RtlAllocateHeap() failed\n"); return NULL; } - Iterator->Section = Section; Iterator->Key = Key; + *KeyName = Key->Name; + *KeyData = Key->Data; + return Iterator; } BOOLEAN IniFindNextValue( - PINICACHEITERATOR Iterator, - PWCHAR *KeyName, - PWCHAR *KeyData) + _In_ PINICACHEITERATOR Iterator, + _Out_ PCWSTR* KeyName, + _Out_ PCWSTR* KeyData) { + PLIST_ENTRY Entry; PINI_KEYWORD Key; - if (Iterator == NULL || KeyName == NULL || KeyData == NULL) + if (!Iterator || !KeyName || !KeyData) { DPRINT("Invalid parameter\n"); return FALSE; } - Key = Iterator->Key->Next; - if (Key == NULL) + Entry = Iterator->Key->ListEntry.Flink; + if (Entry == &Iterator->Section->KeyList) { DPRINT("No more entries\n"); return FALSE; } + Key = CONTAINING_RECORD(Entry, INI_KEYWORD, ListEntry); + + Iterator->Key = Key; *KeyName = Key->Name; *KeyData = Key->Data; - Iterator->Key = Key; - return TRUE; } VOID IniFindClose( - PINICACHEITERATOR Iterator) + _In_ PINICACHEITERATOR Iterator) { - if (Iterator == NULL) + if (!Iterator) return; - RtlFreeHeap(ProcessHeap, 0, Iterator); } @@ -886,6 +847,18 @@ IniAddSection( return IniCacheAddSectionAorW(Cache, Name, wcslen(Name), TRUE); } +VOID +IniRemoveSection( + _In_ PINI_SECTION Section) +{ + if (!Section) + { + DPRINT("Invalid parameter\n"); + return; + } + IniCacheFreeSection(Section); +} + PINI_KEYWORD IniInsertKey( _In_ PINI_SECTION Section, @@ -915,6 +888,32 @@ IniAddKey( return IniInsertKey(Section, NULL, INSERT_LAST, Name, Data); } +VOID +IniRemoveKeyByName( + _In_ PINI_SECTION Section, + _In_ PCWSTR KeyName) +{ + PINI_KEYWORD Key; + UNREFERENCED_PARAMETER(Section); + + Key = IniCacheFindKey(Section, KeyName); + if (Key) + IniCacheFreeKey(Key); +} + +VOID +IniRemoveKey( + _In_ PINI_SECTION Section, + _In_ PINI_KEYWORD Key) +{ + UNREFERENCED_PARAMETER(Section); + if (!Key) + { + DPRINT("Invalid parameter\n"); + return; + } + IniCacheFreeKey(Key); +} PINICACHE IniCacheCreate(VOID) @@ -925,11 +924,12 @@ IniCacheCreate(VOID) Cache = (PINICACHE)RtlAllocateHeap(ProcessHeap, HEAP_ZERO_MEMORY, sizeof(INICACHE)); - if (Cache == NULL) + if (!Cache) { DPRINT("RtlAllocateHeap() failed\n"); return NULL; } + InitializeListHead(&Cache->SectionList); return Cache; } @@ -940,6 +940,7 @@ IniCacheSaveByHandle( HANDLE FileHandle) { NTSTATUS Status; + PLIST_ENTRY Entry1, Entry2; PINI_SECTION Section; PINI_KEYWORD Key; ULONG BufferSize; @@ -951,23 +952,25 @@ IniCacheSaveByHandle( /* Calculate required buffer size */ BufferSize = 0; - Section = Cache->FirstSection; - while (Section != NULL) + Entry1 = Cache->SectionList.Flink; + while (Entry1 != &Cache->SectionList) { + Section = CONTAINING_RECORD(Entry1, INI_SECTION, ListEntry); BufferSize += (Section->Name ? wcslen(Section->Name) : 0) + 4; /* "[]\r\n" */ - Key = Section->FirstKey; - while (Key != NULL) + Entry2 = Section->KeyList.Flink; + while (Entry2 != &Section->KeyList) { + Key = CONTAINING_RECORD(Entry2, INI_KEYWORD, ListEntry); BufferSize += wcslen(Key->Name) + (Key->Data ? wcslen(Key->Data) : 0) + 3; /* "=\r\n" */ - Key = Key->Next; + Entry2 = Entry2->Flink; } - Section = Section->Next; - if (Section != NULL) + Entry1 = Entry1->Flink; + if (Entry1 != &Cache->SectionList) BufferSize += 2; /* Extra "\r\n" at end of each section */ } @@ -985,22 +988,24 @@ IniCacheSaveByHandle( /* Fill file buffer */ Ptr = Buffer; - Section = Cache->FirstSection; - while (Section != NULL) + Entry1 = Cache->SectionList.Flink; + while (Entry1 != &Cache->SectionList) { + Section = CONTAINING_RECORD(Entry1, INI_SECTION, ListEntry); Len = sprintf(Ptr, "[%S]\r\n", Section->Name); Ptr += Len; - Key = Section->FirstKey; - while (Key != NULL) + Entry2 = Section->KeyList.Flink; + while (Entry2 != &Section->KeyList) { + Key = CONTAINING_RECORD(Entry2, INI_KEYWORD, ListEntry); Len = sprintf(Ptr, "%S=%S\r\n", Key->Name, Key->Data); Ptr += Len; - Key = Key->Next; + Entry2 = Entry2->Flink; } - Section = Section->Next; - if (Section != NULL) + Entry1 = Entry1->Flink; + if (Entry1 != &Cache->SectionList) { Len = sprintf(Ptr, "\r\n"); Ptr += Len; diff --git a/base/setup/lib/utils/inicache.h b/base/setup/lib/utils/inicache.h index f33780b8c78..c8ef57d9ba5 100644 --- a/base/setup/lib/utils/inicache.h +++ b/base/setup/lib/utils/inicache.h @@ -11,26 +11,19 @@ typedef struct _INI_KEYWORD { PWSTR Name; PWSTR Data; - - struct _INI_KEYWORD *Next; - struct _INI_KEYWORD *Prev; + LIST_ENTRY ListEntry; } INI_KEYWORD, *PINI_KEYWORD; typedef struct _INI_SECTION { PWSTR Name; - - PINI_KEYWORD FirstKey; - PINI_KEYWORD LastKey; - - struct _INI_SECTION *Next; - struct _INI_SECTION *Prev; + LIST_ENTRY KeyList; + LIST_ENTRY ListEntry; } INI_SECTION, *PINI_SECTION; typedef struct _INICACHE { - PINI_SECTION FirstSection; - PINI_SECTION LastSection; + LIST_ENTRY SectionList; } INICACHE, *PINICACHE; typedef struct _PINICACHEITERATOR @@ -70,40 +63,44 @@ IniCacheLoad( VOID IniCacheDestroy( - PINICACHE Cache); + _In_ PINICACHE Cache); PINI_SECTION IniGetSection( _In_ PINICACHE Cache, _In_ PCWSTR Name); -NTSTATUS +PINI_KEYWORD IniGetKey( - PINI_SECTION Section, - PWCHAR KeyName, - PWCHAR *KeyData); + _In_ PINI_SECTION Section, + _In_ PCWSTR KeyName, + _Out_ PCWSTR* KeyData); PINICACHEITERATOR IniFindFirstValue( - PINI_SECTION Section, - PWCHAR *KeyName, - PWCHAR *KeyData); + _In_ PINI_SECTION Section, + _Out_ PCWSTR* KeyName, + _Out_ PCWSTR* KeyData); BOOLEAN IniFindNextValue( - PINICACHEITERATOR Iterator, - PWCHAR *KeyName, - PWCHAR *KeyData); + _In_ PINICACHEITERATOR Iterator, + _Out_ PCWSTR* KeyName, + _Out_ PCWSTR* KeyData); VOID IniFindClose( - PINICACHEITERATOR Iterator); + _In_ PINICACHEITERATOR Iterator); PINI_SECTION IniAddSection( _In_ PINICACHE Cache, _In_ PCWSTR Name); +VOID +IniRemoveSection( + _In_ PINI_SECTION Section); + PINI_KEYWORD IniInsertKey( _In_ PINI_SECTION Section, @@ -118,6 +115,16 @@ IniAddKey( _In_ PCWSTR Name, _In_ PCWSTR Data); +VOID +IniRemoveKeyByName( + _In_ PINI_SECTION Section, + _In_ PCWSTR KeyName); + +VOID +IniRemoveKey( + _In_ PINI_SECTION Section, + _In_ PINI_KEYWORD Key); + PINICACHE IniCacheCreate(VOID); From 28eb4e726a24441ab1739546f9c06db8304c87e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maj=20Sokli=C4=8D?= Date: Sun, 5 May 2024 19:15:04 +0200 Subject: [PATCH 098/182] [NETCFGX] Fix missing keyboard navigation (#6837) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove WS_GROUP from: IDC_TCP_RESTRICT, IDC_UDP_RESTRICT and IDC_IP_RESTRICT fixes CORE-19569 Thanks to Maj SokliÄ for the PR, based on the investigations of Krosuser. --- dll/win32/netcfgx/lang/bg-BG.rc | 6 +++--- dll/win32/netcfgx/lang/cs-CZ.rc | 6 +++--- dll/win32/netcfgx/lang/da-DK.rc | 6 +++--- dll/win32/netcfgx/lang/de-DE.rc | 6 +++--- dll/win32/netcfgx/lang/el-GR.rc | 6 +++--- dll/win32/netcfgx/lang/en-US.rc | 6 +++--- dll/win32/netcfgx/lang/es-ES.rc | 6 +++--- dll/win32/netcfgx/lang/fr-FR.rc | 6 +++--- dll/win32/netcfgx/lang/he-IL.rc | 6 +++--- dll/win32/netcfgx/lang/hu-HU.rc | 6 +++--- dll/win32/netcfgx/lang/id-ID.rc | 6 +++--- dll/win32/netcfgx/lang/it-IT.rc | 6 +++--- dll/win32/netcfgx/lang/ja-JP.rc | 6 +++--- dll/win32/netcfgx/lang/nl-NL.rc | 6 +++--- dll/win32/netcfgx/lang/no-NO.rc | 6 +++--- dll/win32/netcfgx/lang/pl-PL.rc | 6 +++--- dll/win32/netcfgx/lang/pt-PT.rc | 6 +++--- dll/win32/netcfgx/lang/ro-RO.rc | 6 +++--- dll/win32/netcfgx/lang/ru-RU.rc | 6 +++--- dll/win32/netcfgx/lang/sk-SK.rc | 6 +++--- dll/win32/netcfgx/lang/sq-AL.rc | 6 +++--- dll/win32/netcfgx/lang/sv-SE.rc | 6 +++--- dll/win32/netcfgx/lang/tr-TR.rc | 6 +++--- dll/win32/netcfgx/lang/uk-UA.rc | 6 +++--- dll/win32/netcfgx/lang/zh-CN.rc | 6 +++--- dll/win32/netcfgx/lang/zh-HK.rc | 6 +++--- dll/win32/netcfgx/lang/zh-TW.rc | 6 +++--- 27 files changed, 81 insertions(+), 81 deletions(-) diff --git a/dll/win32/netcfgx/lang/bg-BG.rc b/dll/win32/netcfgx/lang/bg-BG.rc index fa211f661b0..efefd06a1af 100644 --- a/dll/win32/netcfgx/lang/bg-BG.rc +++ b/dll/win32/netcfgx/lang/bg-BG.rc @@ -164,19 +164,19 @@ BEGIN CHECKBOX "Включване на TCP/IP преÑÑване (за вÑички карти)", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "", -1, 5, 30, 90, 150 CONTROL "Разрешаване на вÑички", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12 - CONTROL "Разрешаване Ñамо на", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12 + CONTROL "Разрешаване Ñамо на", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 44, 70, 12 CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75 PUSHBUTTON "ДобавÑне", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Премахване", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 105, 30, 90, 150 CONTROL "Разрешаване на вÑички", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12 - CONTROL "Разрешаване Ñамо на", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12 + CONTROL "Разрешаване Ñамо на", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 115, 44, 70, 12 CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75 PUSHBUTTON "ДобавÑне", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Премахване", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 205, 30, 90, 150 CONTROL "Разрешаване на вÑички", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12 - CONTROL "Разрешаване Ñамо на", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12 + CONTROL "Разрешаване Ñамо на", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 215, 44, 70, 12 CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75 PUSHBUTTON "ДобавÑне", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Премахване", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP diff --git a/dll/win32/netcfgx/lang/cs-CZ.rc b/dll/win32/netcfgx/lang/cs-CZ.rc index 01ecbda31af..5f44c191bb4 100644 --- a/dll/win32/netcfgx/lang/cs-CZ.rc +++ b/dll/win32/netcfgx/lang/cs-CZ.rc @@ -167,19 +167,19 @@ BEGIN CHECKBOX "Zapnout filtrování TCP/IP (vÅ¡echny adaptéry)", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "", -1, 5, 30, 90, 150 CONTROL "Povolit vÅ¡e", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12 - CONTROL "Povolit pouze", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12 + CONTROL "Povolit pouze", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 44, 70, 12 CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75 PUSHBUTTON "PÅ™idat", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Odebrat", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 105, 30, 90, 150 CONTROL "Povolit vÅ¡e", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12 - CONTROL "Povolit pouze", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12 + CONTROL "Povolit pouze", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 115, 44, 70, 12 CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75 PUSHBUTTON "PÅ™idat", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Odebrat", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 205, 30, 90, 150 CONTROL "Povolit vÅ¡e", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12 - CONTROL "Povolit pouze", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12 + CONTROL "Povolit pouze", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 215, 44, 70, 12 CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75 PUSHBUTTON "PÅ™idat", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Odebrat", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP diff --git a/dll/win32/netcfgx/lang/da-DK.rc b/dll/win32/netcfgx/lang/da-DK.rc index 8eb5d58d771..b44cdc1249d 100644 --- a/dll/win32/netcfgx/lang/da-DK.rc +++ b/dll/win32/netcfgx/lang/da-DK.rc @@ -164,19 +164,19 @@ BEGIN CHECKBOX "Enable TCP/IP-Filtering (All adapters)", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "", -1, 5, 30, 90, 150 CONTROL "Permit All", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12 - CONTROL "Permit Only", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12 + CONTROL "Permit Only", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 44, 70, 12 CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75 PUSHBUTTON "Add", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Remove", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 105, 30, 90, 150 CONTROL "Permit All", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12 - CONTROL "Permit Only", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12 + CONTROL "Permit Only", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 115, 44, 70, 12 CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75 PUSHBUTTON "Add", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Remove", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 205, 30, 90, 150 CONTROL "Permit All", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12 - CONTROL "Permit Only", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12 + CONTROL "Permit Only", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 215, 44, 70, 12 CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75 PUSHBUTTON "Add", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Remove", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP diff --git a/dll/win32/netcfgx/lang/de-DE.rc b/dll/win32/netcfgx/lang/de-DE.rc index 181ac4470cf..0144177787e 100644 --- a/dll/win32/netcfgx/lang/de-DE.rc +++ b/dll/win32/netcfgx/lang/de-DE.rc @@ -164,19 +164,19 @@ BEGIN CHECKBOX "TC&P/IP-Filterung aktivieren (alle Adapter)", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "", -1, 5, 30, 90, 150 CONTROL "&Alle zulassen", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12 - CONTROL "&Nur zulassen", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12 + CONTROL "&Nur zulassen", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 44, 70, 12 CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75 PUSHBUTTON "Hinzufügen...", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP PUSHBUTTON "&Entfernen", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 105, 30, 90, 150 CONTROL "A&lle zulassen", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12 - CONTROL "Nur zulassen", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12 + CONTROL "Nur zulassen", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 115, 44, 70, 12 CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75 PUSHBUTTON "Hinzufügen...", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP PUSHBUTTON "En&tfernen", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 205, 30, 90, 150 CONTROL "Alle &zulassen", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12 - CONTROL "Nur zulassen", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12 + CONTROL "Nur zulassen", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 215, 44, 70, 12 CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75 PUSHBUTTON "Hinzufügen...", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Entfe&rnen", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP diff --git a/dll/win32/netcfgx/lang/el-GR.rc b/dll/win32/netcfgx/lang/el-GR.rc index a742cc120a8..1e3ddc07a35 100644 --- a/dll/win32/netcfgx/lang/el-GR.rc +++ b/dll/win32/netcfgx/lang/el-GR.rc @@ -164,19 +164,19 @@ BEGIN CHECKBOX "Enable TCP/IP-Filtering (All adapters)", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "", -1, 5, 30, 90, 150 CONTROL "Permit All", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12 - CONTROL "Permit Only", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12 + CONTROL "Permit Only", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 44, 70, 12 CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75 PUSHBUTTON "Add", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Remove", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 105, 30, 90, 150 CONTROL "Permit All", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12 - CONTROL "Permit Only", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12 + CONTROL "Permit Only", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 115, 44, 70, 12 CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75 PUSHBUTTON "Add", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Remove", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 205, 30, 90, 150 CONTROL "Permit All", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12 - CONTROL "Permit Only", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12 + CONTROL "Permit Only", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 215, 44, 70, 12 CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75 PUSHBUTTON "Add", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Remove", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP diff --git a/dll/win32/netcfgx/lang/en-US.rc b/dll/win32/netcfgx/lang/en-US.rc index 3da96e6676c..34fb91d5c34 100644 --- a/dll/win32/netcfgx/lang/en-US.rc +++ b/dll/win32/netcfgx/lang/en-US.rc @@ -164,19 +164,19 @@ BEGIN CHECKBOX "&Enable TCP/IP-Filtering (All adapters)", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "", -1, 5, 30, 90, 150 CONTROL "&Permit All", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12 - CONTROL "Permit Onl&y", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12 + CONTROL "Permit Onl&y", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 44, 70, 12 CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75 PUSHBUTTON "&Add", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP PUSHBUTTON "&Remove", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 105, 30, 90, 150 CONTROL "Per&mit All", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12 - CONTROL "Permit O&nly", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12 + CONTROL "Permit O&nly", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 115, 44, 70, 12 CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75 PUSHBUTTON "Add", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Remove", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 205, 30, 90, 150 CONTROL "Perm&it All", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12 - CONTROL "Permit On&ly", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12 + CONTROL "Permit On&ly", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 215, 44, 70, 12 CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75 PUSHBUTTON "Add", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Remo&ve", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP diff --git a/dll/win32/netcfgx/lang/es-ES.rc b/dll/win32/netcfgx/lang/es-ES.rc index f7be1c3ae80..c8691fe2991 100644 --- a/dll/win32/netcfgx/lang/es-ES.rc +++ b/dll/win32/netcfgx/lang/es-ES.rc @@ -172,19 +172,19 @@ BEGIN CHECKBOX "Habilitar filtrado TCP/IP (todos los adaptadores)", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "", -1, 5, 30, 90, 150 CONTROL "Permitir todos", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 60, 12 - CONTROL "Permitir sólo", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12 + CONTROL "Permitir sólo", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 44, 70, 12 CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75 PUSHBUTTON "Agregar", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Quitar", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 105, 30, 90, 150 CONTROL "Permitir todos", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 60, 12 - CONTROL "Permitir sólo", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12 + CONTROL "Permitir sólo", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 115, 44, 70, 12 CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75 PUSHBUTTON "Agregar", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Quitar", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 205, 30, 90, 150 CONTROL "Permitir todos", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 60, 12 - CONTROL "Permitir sólo", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12 + CONTROL "Permitir sólo", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 215, 44, 70, 12 CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75 PUSHBUTTON "Agregar", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Quitar", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP diff --git a/dll/win32/netcfgx/lang/fr-FR.rc b/dll/win32/netcfgx/lang/fr-FR.rc index a319f63cc2b..c3cecf9b773 100644 --- a/dll/win32/netcfgx/lang/fr-FR.rc +++ b/dll/win32/netcfgx/lang/fr-FR.rc @@ -164,19 +164,19 @@ BEGIN CHECKBOX "Activer le filtrage TCP/IP (toutes les cartes)", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "", -1, 5, 30, 90, 150 CONTROL "Autoriser tous", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12 - CONTROL "Autoriser seulement", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12 + CONTROL "Autoriser seulement", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 44, 70, 12 CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75 PUSHBUTTON "Ajouter", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Supprimer", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 105, 30, 90, 150 CONTROL "Autoriser tous", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12 - CONTROL "Autoriser seulement", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12 + CONTROL "Autoriser seulement", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 115, 44, 70, 12 CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75 PUSHBUTTON "Ajouter", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Supprimer", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 205, 30, 90, 150 CONTROL "Autoriser tous", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12 - CONTROL "Autoriser seulement", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12 + CONTROL "Autoriser seulement", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 215, 44, 70, 12 CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75 PUSHBUTTON "Ajouter", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Supprimer", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP diff --git a/dll/win32/netcfgx/lang/he-IL.rc b/dll/win32/netcfgx/lang/he-IL.rc index ff38cce85df..bef54e2488b 100644 --- a/dll/win32/netcfgx/lang/he-IL.rc +++ b/dll/win32/netcfgx/lang/he-IL.rc @@ -164,19 +164,19 @@ BEGIN CHECKBOX "Enable TCP/IP-Filtering (All adapters)", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "", -1, 5, 30, 90, 150 CONTROL "התר להכל", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12 - CONTROL "התר רק ל", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12 + CONTROL "התר רק ל", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 44, 70, 12 CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75 PUSHBUTTON "הוסף", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP PUSHBUTTON "הסר", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 105, 30, 90, 150 CONTROL "התר להכל", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12 - CONTROL "התר רק ל", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12 + CONTROL "התר רק ל", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 115, 44, 70, 12 CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75 PUSHBUTTON "הוסף", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP PUSHBUTTON "הסר", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 205, 30, 90, 150 CONTROL "התר להכל", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12 - CONTROL "התר רק ל", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12 + CONTROL "התר רק ל", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 215, 44, 70, 12 CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75 PUSHBUTTON "הוסף", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP PUSHBUTTON "הסר", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP diff --git a/dll/win32/netcfgx/lang/hu-HU.rc b/dll/win32/netcfgx/lang/hu-HU.rc index 1f058aa97e6..a6005565bca 100644 --- a/dll/win32/netcfgx/lang/hu-HU.rc +++ b/dll/win32/netcfgx/lang/hu-HU.rc @@ -164,19 +164,19 @@ BEGIN CHECKBOX "Enable TCP/IP-Filtering (All adapters)", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "", -1, 5, 30, 90, 150 CONTROL "Permit All", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12 - CONTROL "Permit Only", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12 + CONTROL "Permit Only", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 44, 70, 12 CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75 PUSHBUTTON "Add", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Remove", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 105, 30, 90, 150 CONTROL "Permit All", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12 - CONTROL "Permit Only", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12 + CONTROL "Permit Only", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 115, 44, 70, 12 CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75 PUSHBUTTON "Add", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Remove", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 205, 30, 90, 150 CONTROL "Permit All", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12 - CONTROL "Permit Only", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12 + CONTROL "Permit Only", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 215, 44, 70, 12 CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75 PUSHBUTTON "Add", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Remove", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP diff --git a/dll/win32/netcfgx/lang/id-ID.rc b/dll/win32/netcfgx/lang/id-ID.rc index ad1b0a78218..12749aacd52 100644 --- a/dll/win32/netcfgx/lang/id-ID.rc +++ b/dll/win32/netcfgx/lang/id-ID.rc @@ -164,19 +164,19 @@ BEGIN CHECKBOX "Enable TCP/IP-Filtering (All adapters)", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "", -1, 5, 30, 90, 150 CONTROL "Permit All", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12 - CONTROL "Permit Only", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12 + CONTROL "Permit Only", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 44, 70, 12 CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75 PUSHBUTTON "Add", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Remove", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 105, 30, 90, 150 CONTROL "Permit All", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12 - CONTROL "Permit Only", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12 + CONTROL "Permit Only", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 115, 44, 70, 12 CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75 PUSHBUTTON "Add", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Remove", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 205, 30, 90, 150 CONTROL "Permit All", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12 - CONTROL "Permit Only", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12 + CONTROL "Permit Only", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 215, 44, 70, 12 CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75 PUSHBUTTON "Add", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Remove", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP diff --git a/dll/win32/netcfgx/lang/it-IT.rc b/dll/win32/netcfgx/lang/it-IT.rc index de68f5136c2..6486b309612 100644 --- a/dll/win32/netcfgx/lang/it-IT.rc +++ b/dll/win32/netcfgx/lang/it-IT.rc @@ -164,19 +164,19 @@ BEGIN CHECKBOX "Abilita i filtri TCP/IP (Tutti gli adattatori)", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "", -1, 5, 30, 90, 150 CONTROL "Permetti tutto", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12 - CONTROL "Permetti solo", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12 + CONTROL "Permetti solo", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 44, 70, 12 CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75 PUSHBUTTON "Aggiungi", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Rimuovi", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 105, 30, 90, 150 CONTROL "Permetti tutto", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12 - CONTROL "Permetti solo", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12 + CONTROL "Permetti solo", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 115, 44, 70, 12 CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75 PUSHBUTTON "Aggiungi", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Rimuovi", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 205, 30, 90, 150 CONTROL "Permetti tutto", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12 - CONTROL "Permetti solo", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12 + CONTROL "Permetti solo", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 215, 44, 70, 12 CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75 PUSHBUTTON "Aggiungi", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Rimuovi", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP diff --git a/dll/win32/netcfgx/lang/ja-JP.rc b/dll/win32/netcfgx/lang/ja-JP.rc index 80612406fdb..3536934e275 100644 --- a/dll/win32/netcfgx/lang/ja-JP.rc +++ b/dll/win32/netcfgx/lang/ja-JP.rc @@ -164,19 +164,19 @@ BEGIN CHECKBOX "Enable TCP/IP-Filtering (All adapters)", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "", -1, 5, 30, 90, 150 CONTROL "Permit All", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12 - CONTROL "Permit Only", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12 + CONTROL "Permit Only", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 44, 70, 12 CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75 PUSHBUTTON "Add", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Remove", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 105, 30, 90, 150 CONTROL "Permit All", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12 - CONTROL "Permit Only", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12 + CONTROL "Permit Only", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 115, 44, 70, 12 CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75 PUSHBUTTON "Add", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Remove", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 205, 30, 90, 150 CONTROL "Permit All", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12 - CONTROL "Permit Only", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12 + CONTROL "Permit Only", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 215, 44, 70, 12 CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75 PUSHBUTTON "Add", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Remove", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP diff --git a/dll/win32/netcfgx/lang/nl-NL.rc b/dll/win32/netcfgx/lang/nl-NL.rc index 7a421f3ffab..43154b1c5b6 100644 --- a/dll/win32/netcfgx/lang/nl-NL.rc +++ b/dll/win32/netcfgx/lang/nl-NL.rc @@ -164,19 +164,19 @@ BEGIN CHECKBOX "Enable TCP/IP-Filtering (All adapters)", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "", -1, 5, 30, 90, 150 CONTROL "Permit All", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12 - CONTROL "Permit Only", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12 + CONTROL "Permit Only", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 44, 70, 12 CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75 PUSHBUTTON "Add", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Remove", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 105, 30, 90, 150 CONTROL "Permit All", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12 - CONTROL "Permit Only", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12 + CONTROL "Permit Only", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 115, 44, 70, 12 CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75 PUSHBUTTON "Add", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Remove", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 205, 30, 90, 150 CONTROL "Permit All", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12 - CONTROL "Permit Only", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12 + CONTROL "Permit Only", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 215, 44, 70, 12 CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75 PUSHBUTTON "Add", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Remove", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP diff --git a/dll/win32/netcfgx/lang/no-NO.rc b/dll/win32/netcfgx/lang/no-NO.rc index ebf52c35141..87899509908 100644 --- a/dll/win32/netcfgx/lang/no-NO.rc +++ b/dll/win32/netcfgx/lang/no-NO.rc @@ -164,19 +164,19 @@ BEGIN CHECKBOX "Aktiver TCP/IP-Filtering (Alle kortene)", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "", -1, 5, 30, 90, 150 CONTROL "Godta alle", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12 - CONTROL "Godta bare", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12 + CONTROL "Godta bare", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 44, 70, 12 CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75 PUSHBUTTON "Legg til", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Fjern", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 105, 30, 90, 150 CONTROL "Godta alle", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12 - CONTROL "Godta bare", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12 + CONTROL "Godta bare", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 115, 44, 70, 12 CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75 PUSHBUTTON "Legg til", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Fjern", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 205, 30, 90, 150 CONTROL "Godta alle", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12 - CONTROL "Godta bare", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12 + CONTROL "Godta bare", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 215, 44, 70, 12 CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75 PUSHBUTTON "Legg til", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Fjern", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP diff --git a/dll/win32/netcfgx/lang/pl-PL.rc b/dll/win32/netcfgx/lang/pl-PL.rc index ef7e0e1003c..11552cc8ee5 100644 --- a/dll/win32/netcfgx/lang/pl-PL.rc +++ b/dll/win32/netcfgx/lang/pl-PL.rc @@ -166,19 +166,19 @@ BEGIN CHECKBOX "WÅ‚Ä…cz filtrowanie TCP/IP (wszystkie karty)", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "", -1, 5, 30, 90, 150 CONTROL "Pozwalaj wszystkim", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 75, 12 - CONTROL "Pozwalaj tylko", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12 + CONTROL "Pozwalaj tylko", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 44, 70, 12 CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75 PUSHBUTTON "Dodaj", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP PUSHBUTTON "UsuÅ„", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 105, 30, 90, 150 CONTROL "Pozwalaj wszystkim", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 75, 12 - CONTROL "Pozwalaj tylko", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12 + CONTROL "Pozwalaj tylko", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 115, 44, 70, 12 CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75 PUSHBUTTON "Dodaj", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP PUSHBUTTON "UsuÅ„", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 205, 30, 90, 150 CONTROL "Pozwalaj wszystkim", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 75, 12 - CONTROL "Pozwalaj tylko", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12 + CONTROL "Pozwalaj tylko", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 215, 44, 70, 12 CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75 PUSHBUTTON "Dodaj", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP PUSHBUTTON "UsuÅ„", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP diff --git a/dll/win32/netcfgx/lang/pt-PT.rc b/dll/win32/netcfgx/lang/pt-PT.rc index 0c174daa52f..661e93da8f9 100644 --- a/dll/win32/netcfgx/lang/pt-PT.rc +++ b/dll/win32/netcfgx/lang/pt-PT.rc @@ -166,19 +166,19 @@ BEGIN CHECKBOX "Habilitar filtros TCP/IP (Todos os adaptadores)", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "", -1, 5, 30, 90, 150 CONTROL "Permitir todos", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12 - CONTROL "Permitir só", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12 + CONTROL "Permitir só", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 44, 70, 12 CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75 PUSHBUTTON "Adicionar", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Remover", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 105, 30, 90, 150 CONTROL "Permitir todos", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12 - CONTROL "Permitir só", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12 + CONTROL "Permitir só", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 115, 44, 70, 12 CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75 PUSHBUTTON "Adicionar", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Removre", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 205, 30, 90, 150 CONTROL "Permitir todos", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12 - CONTROL "Permitir só", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12 + CONTROL "Permitir só", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 215, 44, 70, 12 CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75 PUSHBUTTON "Adicionar", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Remover", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP diff --git a/dll/win32/netcfgx/lang/ro-RO.rc b/dll/win32/netcfgx/lang/ro-RO.rc index 37700d0322b..b31e8588aa5 100644 --- a/dll/win32/netcfgx/lang/ro-RO.rc +++ b/dll/win32/netcfgx/lang/ro-RO.rc @@ -166,19 +166,19 @@ BEGIN CHECKBOX "A&ctivează filtrarea TCP/IP (pentru toate adaptoarele)", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "", -1, 5, 30, 90, 150 CONTROL "Permite tot TC&P", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12 - CONTROL "Pe&rmite doar:", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12 //FIXME: accelerator collision &R + CONTROL "Pe&rmite doar:", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 44, 70, 12 //FIXME: accelerator collision &R CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75 PUSHBUTTON "&Adaugă", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP PUSHBUTTON "&Elimină", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 105, 30, 90, 150 CONTROL "Permite tot UD&P", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12 - CONTROL "Pe&rmite doar:", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12 //FIXME: accelerator collision &R + CONTROL "Pe&rmite doar:", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 115, 44, 70, 12 //FIXME: accelerator collision &R CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75 PUSHBUTTON "A&daugă", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP PUSHBUTTON "E&limină", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 205, 30, 90, 150 CONTROL "Permite tot I&P", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12 - CONTROL "Pe&rmite doar:", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12 //FIXME: accelerator collision &R + CONTROL "Pe&rmite doar:", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 215, 44, 70, 12 //FIXME: accelerator collision &R CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75 PUSHBUTTON "Ada&ugă", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Eli&mină", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP diff --git a/dll/win32/netcfgx/lang/ru-RU.rc b/dll/win32/netcfgx/lang/ru-RU.rc index bb8bf0151d8..0fc1092b6b3 100644 --- a/dll/win32/netcfgx/lang/ru-RU.rc +++ b/dll/win32/netcfgx/lang/ru-RU.rc @@ -164,19 +164,19 @@ BEGIN CHECKBOX "&ЗадейÑтвовать фильтрацию TCP/IP (вÑе адаптеры)", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "", -1, 5, 30, 90, 150 CONTROL "&Можно вÑе", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12 - CONTROL "&Только", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12 + CONTROL "&Только", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 44, 70, 12 CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75 PUSHBUTTON "Добавить...", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP PUSHBUTTON "&Удалить", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 105, 30, 90, 150 CONTROL "Мо&жно вÑе", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12 - CONTROL "То&лько", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12 + CONTROL "То&лько", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 115, 44, 70, 12 CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75 PUSHBUTTON "Добавить...", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Уд&алить", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 205, 30, 90, 150 CONTROL "Можно &вÑе", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12 - CONTROL "Тол&ько", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12 + CONTROL "Тол&ько", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 215, 44, 70, 12 CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75 PUSHBUTTON "Добавить...", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Удал&ить", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP diff --git a/dll/win32/netcfgx/lang/sk-SK.rc b/dll/win32/netcfgx/lang/sk-SK.rc index 691bebf837f..14e29243180 100644 --- a/dll/win32/netcfgx/lang/sk-SK.rc +++ b/dll/win32/netcfgx/lang/sk-SK.rc @@ -164,19 +164,19 @@ BEGIN CHECKBOX "Enable TCP/IP-Filtering (All adapters)", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "", -1, 5, 30, 90, 150 CONTROL "Permit All", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12 - CONTROL "Permit Only", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12 + CONTROL "Permit Only", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 44, 70, 12 CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75 PUSHBUTTON "PridaÅ¥", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP PUSHBUTTON "OdstrániÅ¥", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 105, 30, 90, 150 CONTROL "Permit All", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12 - CONTROL "Permit Only", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12 + CONTROL "Permit Only", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 115, 44, 70, 12 CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75 PUSHBUTTON "PridaÅ¥", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP PUSHBUTTON "OdstrániÅ¥", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 205, 30, 90, 150 CONTROL "Permit All", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12 - CONTROL "Permit Only", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12 + CONTROL "Permit Only", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 215, 44, 70, 12 CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75 PUSHBUTTON "PridaÅ¥", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP PUSHBUTTON "OdstrániÅ¥", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP diff --git a/dll/win32/netcfgx/lang/sq-AL.rc b/dll/win32/netcfgx/lang/sq-AL.rc index a35d4baa069..726d5fab1ba 100644 --- a/dll/win32/netcfgx/lang/sq-AL.rc +++ b/dll/win32/netcfgx/lang/sq-AL.rc @@ -166,19 +166,19 @@ BEGIN CHECKBOX "Mundëso TCP/IP-Filtrim (Të gjith përshtatësit)", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "", -1, 5, 30, 90, 150 CONTROL "Lejo të Gjithë", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12 - CONTROL "Lejo Vetëm", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12 + CONTROL "Lejo Vetëm", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 44, 70, 12 CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75 PUSHBUTTON "Shto", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Heq", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 105, 30, 90, 150 CONTROL "Lejo të Gjithë", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12 - CONTROL "Lejo Vetëm", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12 + CONTROL "Lejo Vetëm", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 115, 44, 70, 12 CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75 PUSHBUTTON "Shto", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Heq", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 205, 30, 90, 150 CONTROL "Lejo të Gjithë", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12 - CONTROL "Lejo Vetëm", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12 + CONTROL "Lejo Vetëm", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 215, 44, 70, 12 CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75 PUSHBUTTON "Shto", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Heq", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP diff --git a/dll/win32/netcfgx/lang/sv-SE.rc b/dll/win32/netcfgx/lang/sv-SE.rc index d7aff0d2d7f..0b53e4ccd3c 100644 --- a/dll/win32/netcfgx/lang/sv-SE.rc +++ b/dll/win32/netcfgx/lang/sv-SE.rc @@ -164,19 +164,19 @@ BEGIN CHECKBOX "Enable TCP/IP-Filtering (All adapters)", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "", -1, 5, 30, 90, 150 CONTROL "Permit All", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12 - CONTROL "Permit Only", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12 + CONTROL "Permit Only", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 44, 70, 12 CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75 PUSHBUTTON "Add", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Remove", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 105, 30, 90, 150 CONTROL "Permit All", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12 - CONTROL "Permit Only", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12 + CONTROL "Permit Only", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 115, 44, 70, 12 CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75 PUSHBUTTON "Add", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Remove", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 205, 30, 90, 150 CONTROL "Permit All", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12 - CONTROL "Permit Only", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12 + CONTROL "Permit Only", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 215, 44, 70, 12 CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75 PUSHBUTTON "Add", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Remove", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP diff --git a/dll/win32/netcfgx/lang/tr-TR.rc b/dll/win32/netcfgx/lang/tr-TR.rc index 18cc88cfcd0..93962ae69ea 100644 --- a/dll/win32/netcfgx/lang/tr-TR.rc +++ b/dll/win32/netcfgx/lang/tr-TR.rc @@ -172,19 +172,19 @@ BEGIN CHECKBOX "Tüm BaÄŸdaÅŸtırıcılar İçin TCP/IP Filtrelemeyi EtkinleÅŸtir", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "", -1, 5, 30, 90, 150 CONTROL "Tümüne Ä°zin Ver", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12 - CONTROL "Yalnızca Åžunlara Ä°zin Ver:", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12 + CONTROL "Yalnızca Åžunlara Ä°zin Ver:", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 44, 70, 12 CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75 PUSHBUTTON "Ekle", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Sil", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 105, 30, 90, 150 CONTROL "Tümüne Ä°zin Ver", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12 - CONTROL "Yalnızca Åžunlara Ä°zin Ver:", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12 + CONTROL "Yalnızca Åžunlara Ä°zin Ver:", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 115, 44, 70, 12 CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75 PUSHBUTTON "Ekle", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Sil", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 205, 30, 90, 150 CONTROL "Tümüne Ä°zin Ver", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12 - CONTROL "Yalnızca Åžunlara Ä°zin Ver:", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12 + CONTROL "Yalnızca Åžunlara Ä°zin Ver:", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 215, 44, 70, 12 CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75 PUSHBUTTON "Ekle", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Sil", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP diff --git a/dll/win32/netcfgx/lang/uk-UA.rc b/dll/win32/netcfgx/lang/uk-UA.rc index 029064e2df6..9c93769dbda 100644 --- a/dll/win32/netcfgx/lang/uk-UA.rc +++ b/dll/win32/netcfgx/lang/uk-UA.rc @@ -164,19 +164,19 @@ BEGIN CHECKBOX "Ввімкнути Ñ„Ñ–Ð»ÑŒÑ‚Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ TCP/IP (вÑÑ– адаптери)", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "", -1, 5, 30, 90, 150 CONTROL "Можна вÑе", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12 - CONTROL "Можна лише", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12 + CONTROL "Можна лише", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 44, 70, 12 CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75 PUSHBUTTON "Додати", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Видалити", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 105, 30, 90, 150 CONTROL "Можна вÑе", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12 - CONTROL "Можна лише", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12 + CONTROL "Можна лише", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 115, 44, 70, 12 CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75 PUSHBUTTON "Додати", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Видалити", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 205, 30, 90, 150 CONTROL "Можна вÑе", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12 - CONTROL "Можна лише", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12 + CONTROL "Можна лише", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 215, 44, 70, 12 CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75 PUSHBUTTON "Додати", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP PUSHBUTTON "Видалити", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP diff --git a/dll/win32/netcfgx/lang/zh-CN.rc b/dll/win32/netcfgx/lang/zh-CN.rc index 0f9c6ee6a63..91208941ee3 100644 --- a/dll/win32/netcfgx/lang/zh-CN.rc +++ b/dll/win32/netcfgx/lang/zh-CN.rc @@ -173,19 +173,19 @@ BEGIN CHECKBOX "å¯ç”¨ TCP/IP 筛选(所有适é…器)", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "", -1, 5, 30, 90, 150 CONTROL "全部å…许", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12 - CONTROL "ä»…å…许", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12 + CONTROL "ä»…å…许", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 44, 70, 12 CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75 PUSHBUTTON "添加", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP PUSHBUTTON "删除", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 105, 30, 90, 150 CONTROL "全部å…许", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12 - CONTROL "ä»…å…许", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12 + CONTROL "ä»…å…许", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 115, 44, 70, 12 CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75 PUSHBUTTON "添加", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP PUSHBUTTON "删除", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 205, 30, 90, 150 CONTROL "全部å…许", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12 - CONTROL "ä»…å…许", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12 + CONTROL "ä»…å…许", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 215, 44, 70, 12 CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75 PUSHBUTTON "添加", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP PUSHBUTTON "删除", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP diff --git a/dll/win32/netcfgx/lang/zh-HK.rc b/dll/win32/netcfgx/lang/zh-HK.rc index 858bf8f2769..e29ab1e5ae3 100644 --- a/dll/win32/netcfgx/lang/zh-HK.rc +++ b/dll/win32/netcfgx/lang/zh-HK.rc @@ -172,19 +172,19 @@ BEGIN CHECKBOX "啟用 TCP/IP 篩é¸ï¼ˆæ‰€æœ‰ä»‹é¢å¡ï¼‰", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "", -1, 5, 30, 90, 150 CONTROL "全部å…許", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12 - CONTROL "僅å…許", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12 + CONTROL "僅å…許", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 44, 70, 12 CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75 PUSHBUTTON "新增", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP PUSHBUTTON "刪除", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 105, 30, 90, 150 CONTROL "全部å…許", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12 - CONTROL "僅å…許", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12 + CONTROL "僅å…許", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 115, 44, 70, 12 CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75 PUSHBUTTON "新增", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP PUSHBUTTON "刪除", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 205, 30, 90, 150 CONTROL "全部å…許", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12 - CONTROL "僅å…許", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12 + CONTROL "僅å…許", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 215, 44, 70, 12 CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75 PUSHBUTTON "新增", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP PUSHBUTTON "刪除", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP diff --git a/dll/win32/netcfgx/lang/zh-TW.rc b/dll/win32/netcfgx/lang/zh-TW.rc index b23d6942979..dac52496bbc 100644 --- a/dll/win32/netcfgx/lang/zh-TW.rc +++ b/dll/win32/netcfgx/lang/zh-TW.rc @@ -172,19 +172,19 @@ BEGIN CHECKBOX "啟用 TCP/IP 篩é¸ï¼ˆæ‰€æœ‰ä»‹é¢å¡ï¼‰", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "", -1, 5, 30, 90, 150 CONTROL "全部å…許", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12 - CONTROL "僅å…許", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12 + CONTROL "僅å…許", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 44, 70, 12 CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75 PUSHBUTTON "新增", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP PUSHBUTTON "刪除", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 105, 30, 90, 150 CONTROL "全部å…許", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12 - CONTROL "僅å…許", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12 + CONTROL "僅å…許", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 115, 44, 70, 12 CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75 PUSHBUTTON "新增", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP PUSHBUTTON "刪除", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP GROUPBOX "", -1, 205, 30, 90, 150 CONTROL "全部å…許", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12 - CONTROL "僅å…許", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12 + CONTROL "僅å…許", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_TABSTOP, 215, 44, 70, 12 CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75 PUSHBUTTON "新增", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP PUSHBUTTON "刪除", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP From 69ebfd671d9c25dff6f3c0b33c7c57f9b27ec74c Mon Sep 17 00:00:00 2001 From: Doug Lyons Date: Sun, 5 May 2024 21:32:04 -0500 Subject: [PATCH 099/182] [NTOS:EX] Various fixes for Daylight Saving Time transitions (#5868) * [NTOS:EX] Various fixes for Daylight Saving Time transitions * Fix automatic time changes when DST starts and ends. * Currently it takes two cycles of the update provided by w32time to make the actual change. * Convert Eric Kohl's TimeZoneID code contained in ExRefreshTimeZoneInformation to a new function. * Use this new function in ExpSetTimeZoneInformation and ExRefreshTimeZoneInformation functions. CORE-19290 --- ntoskrnl/ex/time.c | 260 ++++++++++++++++++++++++++++++--------------- 1 file changed, 173 insertions(+), 87 deletions(-) diff --git a/ntoskrnl/ex/time.c b/ntoskrnl/ex/time.c index a2de0591178..56c01624ee1 100644 --- a/ntoskrnl/ex/time.c +++ b/ntoskrnl/ex/time.c @@ -30,6 +30,100 @@ ULONG ExpTimerResolutionCount = 0; /* FUNCTIONS ****************************************************************/ +/*++ + * If successful, this function sets the following global variable: + * ExpTimeZoneInfo + *--*/ +static +BOOLEAN +ExpGetTimeZoneId( + _In_ PLARGE_INTEGER TimeNow, + _Out_ PULONG TimeZoneId, + _Out_ PLARGE_INTEGER NewTimeZoneBias) +{ + LARGE_INTEGER StandardTime; + LARGE_INTEGER DaylightTime; + LARGE_INTEGER LocalTimeNow = *TimeNow; + NTSTATUS Status; + + DPRINT("ExpGetTimeZoneId\n"); + + /* Read time zone information from the registry */ + Status = RtlQueryTimeZoneInformation(&ExpTimeZoneInfo); + if (!NT_SUCCESS(Status)) + { + DPRINT1("RtlQueryTimeZoneInformation failed (Status 0x%08lx)\n", Status); + return FALSE; + } + + /* Get the default bias */ + NewTimeZoneBias->QuadPart = (LONGLONG)ExpTimeZoneInfo.Bias * TICKSPERMINUTE; + + if (ExpTimeZoneInfo.StandardDate.Month != 0 && + ExpTimeZoneInfo.DaylightDate.Month != 0) + { + /* Get this year's standard start time */ + if (!RtlCutoverTimeToSystemTime(&ExpTimeZoneInfo.StandardDate, + &StandardTime, + &LocalTimeNow, + TRUE)) + { + DPRINT1("RtlCutoverTimeToSystemTime for StandardDate failed\n"); + return FALSE; + } + + /* Get this year's daylight start time */ + if (!RtlCutoverTimeToSystemTime(&ExpTimeZoneInfo.DaylightDate, + &DaylightTime, + &LocalTimeNow, + TRUE)) + { + DPRINT1("RtlCutoverTimeToSystemTime for DaylightDate failed\n"); + return FALSE; + } + + /* Determine the time zone id and update the time zone bias */ + if (DaylightTime.QuadPart < StandardTime.QuadPart) + { + if ((LocalTimeNow.QuadPart >= DaylightTime.QuadPart) && + (LocalTimeNow.QuadPart < StandardTime.QuadPart)) + { + DPRINT("Daylight time\n"); + *TimeZoneId = TIME_ZONE_ID_DAYLIGHT; + NewTimeZoneBias->QuadPart += (LONGLONG)ExpTimeZoneInfo.DaylightBias * TICKSPERMINUTE; + } + else + { + DPRINT("Standard time\n"); + *TimeZoneId = TIME_ZONE_ID_STANDARD; + NewTimeZoneBias->QuadPart += (LONGLONG)ExpTimeZoneInfo.StandardBias * TICKSPERMINUTE; + } + } + else + { + if ((LocalTimeNow.QuadPart >= StandardTime.QuadPart) && + (LocalTimeNow.QuadPart < DaylightTime.QuadPart)) + { + DPRINT("Standard time\n"); + *TimeZoneId = TIME_ZONE_ID_STANDARD; + NewTimeZoneBias->QuadPart += (LONGLONG)ExpTimeZoneInfo.StandardBias * TICKSPERMINUTE; + } + else + { + DPRINT("Daylight time\n"); + *TimeZoneId = TIME_ZONE_ID_DAYLIGHT; + NewTimeZoneBias->QuadPart += (LONGLONG)ExpTimeZoneInfo.DaylightBias * TICKSPERMINUTE; + } + } + } + else + { + *TimeZoneId = TIME_ZONE_ID_UNKNOWN; + } + + return TRUE; +} + /*++ * @name ExAcquireTimeRefreshLock * @@ -225,105 +319,39 @@ BOOLEAN NTAPI ExRefreshTimeZoneInformation(IN PLARGE_INTEGER CurrentBootTime) { - LARGE_INTEGER StandardTime; - LARGE_INTEGER DaylightTime; - LARGE_INTEGER CurrentTime; - NTSTATUS Status; + LARGE_INTEGER CurrentTime, NewTimeZoneBias; + BOOLEAN Success; - /* Read time zone information from the registry */ - Status = RtlQueryTimeZoneInformation(&ExpTimeZoneInfo); - if (!NT_SUCCESS(Status)) + DPRINT("ExRefreshTimeZoneInformation\n"); + + /* Set the global data for ExpTimeZoneBias and the Time Zone ID */ + Success = ExpGetTimeZoneId(CurrentBootTime, &ExpTimeZoneId, &NewTimeZoneBias); + if (!Success) { - DPRINT1("RtlQueryTimeZoneInformation() failed (Status 0x%08lx)\n", Status); + DPRINT1("ExpGetTimeZoneId failed\n"); return FALSE; } + DPRINT("ExpTimeZoneId is %lu\n", ExpTimeZoneId); - /* Get the default bias */ - ExpTimeZoneBias.QuadPart = (LONGLONG)ExpTimeZoneInfo.Bias * TICKSPERMINUTE; - - if (ExpTimeZoneInfo.StandardDate.Month != 0 && - ExpTimeZoneInfo.DaylightDate.Month != 0) - { - /* Get this years standard start time */ - if (!RtlCutoverTimeToSystemTime(&ExpTimeZoneInfo.StandardDate, - &StandardTime, - CurrentBootTime, - TRUE)) - { - DPRINT1("RtlCutoverTimeToSystemTime() for StandardDate failed!\n"); - return FALSE; - } - - /* Get this years daylight start time */ - if (!RtlCutoverTimeToSystemTime(&ExpTimeZoneInfo.DaylightDate, - &DaylightTime, - CurrentBootTime, - TRUE)) - { - DPRINT1("RtlCutoverTimeToSystemTime() for DaylightDate failed!\n"); - return FALSE; - } - - /* Determine the time zone id and update the time zone bias */ - if (DaylightTime.QuadPart < StandardTime.QuadPart) - { - if ((CurrentBootTime->QuadPart >= DaylightTime.QuadPart) && - (CurrentBootTime->QuadPart < StandardTime.QuadPart)) - { - DPRINT("Daylight time!\n"); - ExpTimeZoneId = TIME_ZONE_ID_DAYLIGHT; - ExpTimeZoneBias.QuadPart += (LONGLONG)ExpTimeZoneInfo.DaylightBias * TICKSPERMINUTE; - } - else - { - DPRINT("Standard time!\n"); - ExpTimeZoneId = TIME_ZONE_ID_STANDARD; - ExpTimeZoneBias.QuadPart += (LONGLONG)ExpTimeZoneInfo.StandardBias * TICKSPERMINUTE; - } - } - else - { - if ((CurrentBootTime->QuadPart >= StandardTime.QuadPart) && - (CurrentBootTime->QuadPart < DaylightTime.QuadPart)) - { - DPRINT("Standard time!\n"); - ExpTimeZoneId = TIME_ZONE_ID_STANDARD; - ExpTimeZoneBias.QuadPart += (LONGLONG)ExpTimeZoneInfo.StandardBias * TICKSPERMINUTE; - } - else - { - DPRINT("Daylight time!\n"); - ExpTimeZoneId = TIME_ZONE_ID_DAYLIGHT; - ExpTimeZoneBias.QuadPart += (LONGLONG)ExpTimeZoneInfo.DaylightBias * TICKSPERMINUTE; - } - } - } - else - { - ExpTimeZoneId = TIME_ZONE_ID_UNKNOWN; - } + ExpTimeZoneBias = NewTimeZoneBias; - /* Change it for user-mode applications */ - SharedUserData->TimeZoneBias.High1Time = ExpTimeZoneBias.u.HighPart; + /* Change SharedUserData->TimeZoneBias for user-mode applications */ SharedUserData->TimeZoneBias.High2Time = ExpTimeZoneBias.u.HighPart; SharedUserData->TimeZoneBias.LowPart = ExpTimeZoneBias.u.LowPart; + SharedUserData->TimeZoneBias.High1Time = ExpTimeZoneBias.u.HighPart; SharedUserData->TimeZoneId = ExpTimeZoneId; /* Convert boot time from local time to UTC */ KeBootTime.QuadPart += ExpTimeZoneBias.QuadPart; /* Convert system time from local time to UTC */ - do - { - CurrentTime.u.HighPart = SharedUserData->SystemTime.High1Time; - CurrentTime.u.LowPart = SharedUserData->SystemTime.LowPart; - } while (CurrentTime.u.HighPart != SharedUserData->SystemTime.High2Time); + KeQuerySystemTime(&CurrentTime);; /* Change it for user-mode applications */ CurrentTime.QuadPart += ExpTimeZoneBias.QuadPart; + SharedUserData->SystemTime.High2Time = CurrentTime.u.HighPart; SharedUserData->SystemTime.LowPart = CurrentTime.u.LowPart; SharedUserData->SystemTime.High1Time = CurrentTime.u.HighPart; - SharedUserData->SystemTime.High2Time = CurrentTime.u.HighPart; /* Return success */ return TRUE; @@ -332,9 +360,43 @@ ExRefreshTimeZoneInformation(IN PLARGE_INTEGER CurrentBootTime) NTSTATUS ExpSetTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation) { - LARGE_INTEGER LocalTime, SystemTime, OldTime; + LARGE_INTEGER LocalTime, SystemTime, OldTime, NewTimeZoneBias; TIME_FIELDS TimeFields; - DPRINT("ExpSetTimeZoneInformation() called\n"); + BOOLEAN Success; + NTSTATUS Status; + LARGE_INTEGER LocalTimeNow; + + DPRINT("ExpSetTimeZoneInformation called\n"); + + /* Read time zone information from the registry */ + Status = RtlQueryTimeZoneInformation(&ExpTimeZoneInfo); + if (!NT_SUCCESS(Status)) + { + DPRINT1("RtlQueryTimeZoneInformation failed (Status 0x%08lx)\n", Status); + return FALSE; + } + + /* Get the default bias */ + NewTimeZoneBias.QuadPart = (LONGLONG)ExpTimeZoneInfo.Bias * TICKSPERMINUTE; + + /* Get the Shared User Data System Time into the local SystemTime */ + KeQuerySystemTime(&SystemTime); + + LocalTimeNow = SystemTime; + + /* Adjust LocalTimeNow for Time Zone Bias to use UTC for comparisons */ + LocalTimeNow.QuadPart -= NewTimeZoneBias.QuadPart; + + /* Set the Global Data for ExpTimeZoneBias and ExpTimeZoneId */ + Success = ExpGetTimeZoneId(&LocalTimeNow, &ExpTimeZoneId, &NewTimeZoneBias); + if (!Success) + { + DPRINT1("ExpGetTimeZoneId failed\n"); + return STATUS_UNSUCCESSFUL; + } + DPRINT("ExpTimeZoneId is %lu\n", ExpTimeZoneId); + + ExpTimeZoneBias = NewTimeZoneBias; DPRINT("Old time zone bias: %d minutes\n", ExpTimeZoneInfo.Bias); DPRINT("Old time zone standard bias: %d minutes\n", @@ -347,13 +409,14 @@ ExpSetTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation) HalQueryRealTimeClock(&TimeFields); RtlTimeFieldsToTime(&TimeFields, &LocalTime); - /* FIXME: Calculate transition dates */ - - /* Calculate the bias and set the ID */ + /* Calculate the bias */ ExpTimeZoneBias.QuadPart = ((LONGLONG)(TimeZoneInformation->Bias + TimeZoneInformation->StandardBias)) * TICKSPERMINUTE; - ExpTimeZoneId = TIME_ZONE_ID_STANDARD; + + /* If Daylight Savings Time then add the DayLightBias to the Time Zone Bias */ + if (ExpTimeZoneId == TIME_ZONE_ID_DAYLIGHT) + ExpTimeZoneBias.QuadPart += (LONGLONG)ExpTimeZoneInfo.DaylightBias * TICKSPERMINUTE; /* Copy the timezone information */ RtlCopyMemory(&ExpTimeZoneInfo, @@ -377,7 +440,7 @@ ExpSetTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation) PoNotifySystemTimeSet(); /* Return success */ - DPRINT("ExpSetTimeZoneInformation() done\n"); + DPRINT("ExpSetTimeZoneInformation done\n"); return STATUS_SUCCESS; } @@ -401,6 +464,8 @@ NtSetSystemTime(IN PLARGE_INTEGER SystemTime, TIME_FIELDS TimeFields; KPROCESSOR_MODE PreviousMode = ExGetPreviousMode(); NTSTATUS Status = STATUS_SUCCESS; + RTL_TIME_ZONE_INFORMATION TimeZoneInformation = { 0 }; + ULONG TimeZoneIdSave; PAGED_CODE(); @@ -468,6 +533,27 @@ NtSetSystemTime(IN PLARGE_INTEGER SystemTime, _SEH2_END; } + /* Read time zone information from the registry and set the clock */ + Status = RtlQueryTimeZoneInformation(&TimeZoneInformation); + if (!NT_SUCCESS(Status)) + { + DPRINT1("RtlQueryTimeZoneInformation failed (Status 0x%08lx)\n", Status); + } + + /* Test if we went from Daylight to Standard Time or vice versa */ + TimeZoneIdSave = ExpTimeZoneId; + ExpSetTimeZoneInformation(&TimeZoneInformation); + + if (ExpTimeZoneId != TimeZoneIdSave) + { + /* Going from DT to ST or vice versa we need to repeat this */ + DPRINT("Daylight Time and Standard Time are switching\n"); + + /* Set the system time and notify the system */ + KeSetSystemTime(&NewSystemTime, &OldSystemTime, FALSE, NULL); + PoNotifySystemTimeSet(); + } + /* Return status */ return Status; } From 0056313e15aef4081653db5ec226c24ea740cb45 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Mon, 6 May 2024 19:17:09 +0900 Subject: [PATCH 100/182] [NTGDI][FREETYPE] Simplify code around bold/italic glyph caches (#6846) Simplify and reduce font code. JIRA issue: CORE-15554 - Don't treat bold/italic glyphs specially in font cache. - Delete useless IntGetBitmapGlyphNoCache function. --- win32ss/gdi/ntgdi/freetype.c | 112 +++++------------------------------ 1 file changed, 16 insertions(+), 96 deletions(-) diff --git a/win32ss/gdi/ntgdi/freetype.c b/win32ss/gdi/ntgdi/freetype.c index c8bdd59f773..216f255d8b2 100644 --- a/win32ss/gdi/ntgdi/freetype.c +++ b/win32ss/gdi/ntgdi/freetype.c @@ -3135,50 +3135,6 @@ IntFindGlyphCache(IN const FONT_CACHE_ENTRY *pCache) return FontEntry->BitmapGlyph; } -/* no cache */ -static FT_BitmapGlyph -IntGetBitmapGlyphNoCache( - FT_Face Face, - FT_GlyphSlot GlyphSlot, - FT_Render_Mode RenderMode) -{ - FT_Glyph Glyph; - INT error; - FT_Bitmap AlignedBitmap; - FT_BitmapGlyph BitmapGlyph; - - ASSERT_FREETYPE_LOCK_HELD(); - - error = FT_Get_Glyph(GlyphSlot, &Glyph); - if (error) - { - DPRINT1("Failure getting glyph.\n"); - return NULL; - } - - error = FT_Glyph_To_Bitmap(&Glyph, RenderMode, 0, 1); - if (error) - { - FT_Done_Glyph(Glyph); - DPRINT1("Failure rendering glyph.\n"); - return NULL; - } - - BitmapGlyph = (FT_BitmapGlyph)Glyph; - FT_Bitmap_New(&AlignedBitmap); - if (FT_Bitmap_Convert(GlyphSlot->library, &BitmapGlyph->bitmap, &AlignedBitmap, 4)) - { - DPRINT1("Conversion failed\n"); - FT_Done_Glyph((FT_Glyph)BitmapGlyph); - return NULL; - } - - FT_Bitmap_Done(GlyphSlot->library, &BitmapGlyph->bitmap); - BitmapGlyph->bitmap = AlignedBitmap; - - return BitmapGlyph; -} - static FT_BitmapGlyph IntGetBitmapGlyphWithCache( IN OUT PFONT_CACHE_ENTRY Cache, @@ -4210,42 +4166,28 @@ IntGetRealGlyph( ASSERT_FREETYPE_LOCK_HELD(); - if (Cache->Hashed.Aspect.EmuBoldItalic) - { - error = FT_Load_Glyph(Cache->Hashed.Face, Cache->Hashed.GlyphIndex, FT_LOAD_NO_BITMAP); - if (error) - { - DPRINT1("WARNING: Failed to load and render glyph! [index: %d]\n", - Cache->Hashed.GlyphIndex); - return NULL; - } + Cache->dwHash = IntGetHash(&Cache->Hashed, sizeof(Cache->Hashed) / sizeof(DWORD)); - glyph = Cache->Hashed.Face->glyph; + realglyph = IntFindGlyphCache(Cache); + if (realglyph) + return realglyph; - if (Cache->Hashed.Aspect.Emu.Bold) - FT_GlyphSlot_Embolden(glyph); - if (Cache->Hashed.Aspect.Emu.Italic) - FT_GlyphSlot_Oblique(glyph); - realglyph = IntGetBitmapGlyphNoCache(Cache->Hashed.Face, glyph, Cache->Hashed.Aspect.RenderMode); - } - else + error = FT_Load_Glyph(Cache->Hashed.Face, Cache->Hashed.GlyphIndex, FT_LOAD_DEFAULT); + if (error) { - Cache->dwHash = IntGetHash(&Cache->Hashed, sizeof(Cache->Hashed) / sizeof(DWORD)); + DPRINT1("WARNING: Failed to load and render glyph! [index: %d]\n", Cache->Hashed.GlyphIndex); + return NULL; + } - realglyph = IntFindGlyphCache(Cache); - if (realglyph) - return realglyph; + glyph = Cache->Hashed.Face->glyph; - error = FT_Load_Glyph(Cache->Hashed.Face, Cache->Hashed.GlyphIndex, FT_LOAD_DEFAULT); - if (error) - { - DPRINT1("WARNING: Failed to load and render glyph! [index: %d]\n", Cache->Hashed.GlyphIndex); - return NULL; - } + if (Cache->Hashed.Aspect.Emu.Bold) + FT_GlyphSlot_Embolden(glyph); /* Emulate Bold */ - glyph = Cache->Hashed.Face->glyph; - realglyph = IntGetBitmapGlyphWithCache(Cache, glyph); - } + if (Cache->Hashed.Aspect.Emu.Italic) + FT_GlyphSlot_Oblique(glyph); /* Emulate Italic */ + + realglyph = IntGetBitmapGlyphWithCache(Cache, glyph); if (!realglyph) DPRINT1("Failed to render glyph! [index: %d]\n", Cache->Hashed.GlyphIndex); @@ -4334,12 +4276,6 @@ TextIntGetTextExtentPoint(PDC dc, Dx[i] = (TotalWidth64 + 32) >> 6; } - /* Bold and italic do not use the cache */ - if (Cache.Hashed.Aspect.EmuBoldItalic) - { - FT_Done_Glyph((FT_Glyph)realglyph); - } - previous = glyph_index; String++; } @@ -5927,9 +5863,6 @@ IntGetTextDisposition( Y64 -= vec.y; } - if (Cache->Hashed.Aspect.EmuBoldItalic) - FT_Done_Glyph((FT_Glyph)realglyph); - previous = glyph_index; } @@ -6330,8 +6263,6 @@ IntExtTextOutW( { DPRINT1("WARNING: EngCreateBitmap() failed!\n"); bResult = FALSE; - if (Cache.Hashed.Aspect.EmuBoldItalic) - FT_Done_Glyph((FT_Glyph)realglyph); break; } @@ -6341,8 +6272,6 @@ IntExtTextOutW( EngDeleteSurface((HSURF)HSourceGlyph); DPRINT1("WARNING: EngLockSurface() failed!\n"); bResult = FALSE; - if (Cache.Hashed.Aspect.EmuBoldItalic) - FT_Done_Glyph((FT_Glyph)realglyph); break; } @@ -6385,11 +6314,7 @@ IntExtTextOutW( } if (DoBreak) - { - if (Cache.Hashed.Aspect.EmuBoldItalic) - FT_Done_Glyph((FT_Glyph)realglyph); break; - } if (NULL == Dx) { @@ -6414,11 +6339,6 @@ IntExtTextOutW( DPRINT("New X64, New Y64: %I64d, %I64d\n", X64, Y64); previous = glyph_index; - - if (Cache.Hashed.Aspect.EmuBoldItalic) - { - FT_Done_Glyph((FT_Glyph)realglyph); - } } if (pdcattr->flTextAlign & TA_UPDATECP) From 521eb0c7c0599ce3d5a9607e816c68f189c72145 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Mon, 6 May 2024 20:39:26 +0900 Subject: [PATCH 101/182] [NTGDI][FREETYPE] Increase STACK_TEXT_BUFFER_SIZE (#6847) Slight performance improvement. STACK_TEXT_BUFFER_SIZE = 100 was too small for long text. This PR can reduce unnecessary buffer allocations in NtGdiExtTextOutW function. JIRA issue: CORE-15554 - Change STACK_TEXT_BUFFER_SIZE to 512. --- win32ss/gdi/ntgdi/freetype.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/win32ss/gdi/ntgdi/freetype.c b/win32ss/gdi/ntgdi/freetype.c index 216f255d8b2..bf77b88b028 100644 --- a/win32ss/gdi/ntgdi/freetype.c +++ b/win32ss/gdi/ntgdi/freetype.c @@ -6492,7 +6492,8 @@ GreExtTextOutW( return bResult; } -#define STACK_TEXT_BUFFER_SIZE 100 +#define STACK_TEXT_BUFFER_SIZE 512 + BOOL APIENTRY NtGdiExtTextOutW( @@ -6534,7 +6535,7 @@ NtGdiExtTextOutW( } /* Check if our local buffer is large enough */ - if (BufSize > STACK_TEXT_BUFFER_SIZE) + if (BufSize > sizeof(LocalBuffer)) { /* It's not, allocate a temp buffer */ Buffer = ExAllocatePoolWithTag(PagedPool, BufSize, GDITAG_TEXT); From f4a9f9cde33985a44c79e2b1ef37628cb426c3f4 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 5 May 2024 16:15:30 +0300 Subject: [PATCH 102/182] [CRT][NTDLL][MSVCRT] Add _swprintf implementation --- dll/ntdll/def/ntdll.spec | 2 +- dll/win32/msvcrt/msvcrt.spec | 2 +- sdk/lib/crt/printf/_swprintf.c | 13 +++++++++++++ sdk/lib/crt/printf/printf.cmake | 1 + 4 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 sdk/lib/crt/printf/_swprintf.c diff --git a/dll/ntdll/def/ntdll.spec b/dll/ntdll/def/ntdll.spec index aa1cf0ca734..6a98679791b 100644 --- a/dll/ntdll/def/ntdll.spec +++ b/dll/ntdll/def/ntdll.spec @@ -1801,7 +1801,7 @@ @ cdecl _strlwr(str) @ cdecl _strnicmp(str str long) @ cdecl _strupr(str) -@ stub -version=0x600+ _swprintf +@ cdecl -version=0x600+ _swprintf(ptr str) @ cdecl -version=0x502 _tolower(long) @ cdecl -version=0x502 _toupper(long) @ cdecl _ui64toa(double ptr long) diff --git a/dll/win32/msvcrt/msvcrt.spec b/dll/win32/msvcrt/msvcrt.spec index ba28cc7c350..b6c10d0f308 100644 --- a/dll/win32/msvcrt/msvcrt.spec +++ b/dll/win32/msvcrt/msvcrt.spec @@ -1035,7 +1035,7 @@ @ cdecl -version=0x600+ _strupr_s_l(str long ptr) @ cdecl -version=0x600+ _strxfrm_l(ptr str long ptr) @ cdecl _swab(str str long) -@ stub -version=0x600+ _swprintf +@ cdecl -version=0x600+ _swprintf(ptr str) @ stub -version=0x600+ _swprintf_c @ stub -version=0x600+ _swprintf_c_l @ stub -version=0x600+ _swprintf_p_l diff --git a/sdk/lib/crt/printf/_swprintf.c b/sdk/lib/crt/printf/_swprintf.c new file mode 100644 index 00000000000..67e3588eb13 --- /dev/null +++ b/sdk/lib/crt/printf/_swprintf.c @@ -0,0 +1,13 @@ +/* + * COPYRIGHT: GNU GPL, see COPYING in the top level directory + * PROJECT: ReactOS crt library + * FILE: lib/sdk/crt/printf/_swprintf.c + * PURPOSE: Implementation of _swprintf + * PROGRAMMER: Timo Kreuzer + */ + +#define _sxprintf _swprintf +#define USE_COUNT 0 +#define _UNICODE + +#include "_sxprintf.c" diff --git a/sdk/lib/crt/printf/printf.cmake b/sdk/lib/crt/printf/printf.cmake index 7b68b88e360..c217160b5bb 100644 --- a/sdk/lib/crt/printf/printf.cmake +++ b/sdk/lib/crt/printf/printf.cmake @@ -2,6 +2,7 @@ list(APPEND LIBCNTPR_PRINTF_SOURCE printf/_snprintf.c printf/_snwprintf.c + printf/_swprintf.c printf/_vscprintf.c printf/_vscwprintf.c printf/_vsnprintf.c From 67c28b723e4c7c668d0a95ce5dc0c2610fd90c93 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 15 Mar 2024 21:17:23 +0200 Subject: [PATCH 103/182] [PSEH/x64] Fix our GCC-SEH-plugin hack The change is needed, because the previous version emitted multiple ".seh_handlerdata" blocks and GAS isn't able to merge them into one, but will instead only include the first one. This is fixed by generating "asm defines" in the code and pass the line number to the "REACTOS seh" pragma, which is then used to create all handler data by referring to the predefined symbols, that include the line number. Also the EstablisherFrame parameter passed to the filter/finally function is the original stack pointer, not the frame pointer! Take this into account by passing __builtin_frame_address(0) from the filter context to the global wrapper function, which includes the frame-offset, and use that to recalculate the frame-pointer from the passed in stack pointer. --- sdk/lib/pseh/include/pseh/pseh2_64.h | 90 +++++++++++++++------------- sdk/tools/gcc_plugin_seh/main.cpp | 64 +++++++++++++++++--- 2 files changed, 104 insertions(+), 50 deletions(-) diff --git a/sdk/lib/pseh/include/pseh/pseh2_64.h b/sdk/lib/pseh/include/pseh/pseh2_64.h index 21be52477ca..29af396a714 100644 --- a/sdk/lib/pseh/include/pseh/pseh2_64.h +++ b/sdk/lib/pseh/include/pseh/pseh2_64.h @@ -6,15 +6,19 @@ __asm__( ".p2align 4, 0x90\n" ".seh_proc __seh2_global_filter_func\n" "__seh2_global_filter_func:\n" + /* r8 is rbp - frame-offset. Calculate the negative frame-offset */ + "\tsub %rbp, %rax\n" "\tpush %rbp\n" "\t.seh_pushreg %rbp\n" "\tsub $32, %rsp\n" "\t.seh_stackalloc 32\n" "\t.seh_endprologue\n" + /* rdx is the original stack pointer, fix it up to be the frame pointer */ + "\tsub %rax, %rdx\n" /* Restore frame pointer. */ "\tmov %rdx, %rbp\n" /* Actually execute the filter funclet */ - "\tjmp *%rax\n" + "\tjmp *%r8\n" "__seh2_global_filter_func_exit:\n" "\t.p2align 4\n" "\tadd $32, %rsp\n" @@ -22,8 +26,36 @@ __asm__( "\tret\n" "\t.seh_endproc"); +#define STRINGIFY(a) #a +#define EMIT_PRAGMA_(params) \ + _Pragma( STRINGIFY(params) ) +#define EMIT_PRAGMA(type,line) \ + EMIT_PRAGMA_(REACTOS seh(type,line)) + +#define _SEH3$_EMIT_DEFS_AND_PRAGMA__(Line, Type) \ + /* Emit assembler constants with line number to be individual */ \ + __asm__ __volatile__ goto ("\n" \ + "\t__seh2$$begin_try__" #Line "=%l0\n" /* Begin of tried code */ \ + "\t__seh2$$end_try__" #Line "=%l1 + 1\n" /* End of tried code */ \ + "\t__seh2$$filter__" #Line "=%l2\n" /* Filter function */ \ + "\t__seh2$$begin_except__" #Line "=%l3\n" /* Called on except */ \ + : /* No output */ \ + : /* No input */ \ + : /* No clobber */ \ + : __seh2$$begin_try__, \ + __seh2$$end_try__, \ + __seh2$$filter__, \ + __seh2$$begin_except__); \ + /* Call our home-made pragma */ \ + EMIT_PRAGMA(Type,Line) + +#define _SEH3$_EMIT_DEFS_AND_PRAGMA_(Line, Type) _SEH3$_EMIT_DEFS_AND_PRAGMA__(Line, Type) +#define _SEH3$_EMIT_DEFS_AND_PRAGMA(Type) _SEH3$_EMIT_DEFS_AND_PRAGMA_(__LINE__, Type) + #define _SEH2_TRY \ { \ + __label__ __seh2$$filter__; \ + __label__ __seh2$$begin_except__; \ __label__ __seh2$$begin_try__; \ __label__ __seh2$$end_try__; \ /* \ @@ -40,41 +72,25 @@ __seh2$$begin_try__: #define _SEH2_EXCEPT(...) \ __seh2$$leave_scope__: __MINGW_ATTRIB_UNUSED; \ } \ -__seh2$$end_try__: \ +__seh2$$end_try__:(void)0; \ /* Call our home-made pragma */ \ - _Pragma("REACTOS seh(except)") \ + _SEH3$_EMIT_DEFS_AND_PRAGMA(__seh$$except); \ if (0) \ { \ __label__ __seh2$$leave_scope__; \ - __label__ __seh2$$filter__; \ - __label__ __seh2$$begin_except__; \ - LONG __MINGW_ATTRIB_UNUSED __seh2$$exception_code__ = 0; \ + LONG __MINGW_ATTRIB_UNUSED __seh2$$exception_code__; \ /* Add our handlers to the list */ \ - __asm__ __volatile__ goto ("\n" \ - "\t.seh_handlerdata\n" \ - "\t.rva %l0\n" /* Begin of tried code */ \ - "\t.rva %l1 + 1\n" /* End of tried code */ \ - "\t.rva %l2\n" /* Filter function */ \ - "\t.rva %l3\n" /* Called on except */ \ - "\t.seh_code\n" \ - : /* No output */ \ - : /* No input */ \ - : /* No clobber */ \ - : __seh2$$begin_try__, \ - __seh2$$end_try__, \ - __seh2$$filter__, \ - __seh2$$begin_except__); \ if (0) \ { \ /* Jump to the global filter. Tell it where the filter funclet lies */ \ __label__ __seh2$$filter_funclet__; \ __seh2$$filter__: \ __asm__ __volatile__ goto( \ - "\tleaq %l0(%%rip), %%rax\n" \ + "\tleaq %l1(%%rip), %%r8\n" \ "\tjmp __seh2_global_filter_func\n" \ : /* No output */ \ - : /* No input */ \ - : "%rax" \ + : "a"(__builtin_frame_address(0)) \ + : "%r8" \ : __seh2$$filter_funclet__); \ /* Actually declare our filter funclet */ \ struct _EXCEPTION_POINTERS* __seh2$$exception_ptr__; \ @@ -105,38 +121,28 @@ __seh2$$end_try__: __seh2$$leave_scope__: __MINGW_ATTRIB_UNUSED; \ } \ __seh2$$end_try__: \ +__seh2$$begin_except__: __MINGW_ATTRIB_UNUSED; \ /* Call our home-made pragma */ \ - _Pragma("REACTOS seh(finally)") \ + _SEH3$_EMIT_DEFS_AND_PRAGMA(__seh$$finally); \ if (1) \ { \ __label__ __seh2$$finally__; \ __label__ __seh2$$begin_finally__; \ __label__ __seh2$$leave_scope__; \ + __asm__ __volatile__ goto("" : : : : __seh2$$finally__); \ int __seh2$$abnormal_termination__; \ - /* Add our handlers to the list */ \ - __asm__ __volatile__ goto ("\n" \ - "\t.seh_handlerdata\n" \ - "\t.rva %l0\n" /* Begin of tried code */ \ - "\t.rva %l1 + 1\n" /* End of tried code */ \ - "\t.rva %l2\n" /* Filter function */ \ - "\t.long 0\n" /* Nothing for unwind code */ \ - "\t.seh_code\n" \ - : /* No output */ \ - : /* No input */ \ - : /* No clobber */ \ - : __seh2$$begin_try__, \ - __seh2$$end_try__, \ - __seh2$$finally__); \ if (0) \ { \ /* Jump to the global trampoline. Tell it where the unwind code really lies */ \ - __seh2$$finally__: \ + __seh2$$filter__: __MINGW_ATTRIB_UNUSED; \ + __seh2$$finally__: __MINGW_ATTRIB_UNUSED; \ __asm__ __volatile__ goto( \ - "\tleaq %l0(%%rip), %%rax\n" \ + "\t\n" \ + "\tleaq %l1(%%rip), %%r8\n" \ "\tjmp __seh2_global_filter_func\n" \ : /* No output */ \ - : /* No input */ \ - : /* No clobber */ \ + : "a"(__builtin_frame_address(0)) \ + : "%r8" \ : __seh2$$begin_finally__); \ } \ \ diff --git a/sdk/tools/gcc_plugin_seh/main.cpp b/sdk/tools/gcc_plugin_seh/main.cpp index b90c736b584..00e04c0c6ab 100644 --- a/sdk/tools/gcc_plugin_seh/main.cpp +++ b/sdk/tools/gcc_plugin_seh/main.cpp @@ -3,6 +3,7 @@ * LICENSE: BSD Zero Clause License (https://spdx.org/licenses/0BSD) * PURPOSE: Helper pragma implementation for pseh library (amd64) * COPYRIGHT: Copyright 2021 Jérôme Gardou + * Copyright 2024 Timo Kreuzer */ #include @@ -16,6 +17,13 @@ #include #include #include +#include + +#if 0 // To enable tracing +#define trace(...) fprintf(stderr, __VA_ARGS__) +#else +#define trace(...) +#endif #define is_alpha(c) (((c)>64 && (c)<91) || ((c)>96 && (c)<123)) @@ -31,6 +39,14 @@ int VISIBLE plugin_is_GPL_compatible = 1; +constexpr size_t k_header_statement_max_size = 20000; + +struct seh_handler +{ + bool is_except; + unsigned int line; +}; + struct seh_function { bool unwind; @@ -38,6 +54,7 @@ struct seh_function tree asm_header_text; tree asm_header; size_t count; + std::vector handlers; seh_function(struct function* fun) : unwind(false) @@ -45,9 +62,13 @@ struct seh_function , count(0) { /* Reserve space for our header statement */ - char buf[256]; +#if 0 // FIXME: crashes on older GCC + asm_header_text = build_string(k_header_statement_max_size, ""); +#else + char buf[k_header_statement_max_size]; memset(buf, 0, sizeof(buf)); asm_header_text = build_string(sizeof(buf), buf); +#endif asm_header = build_stmt(fun->function_start_locus, ASM_EXPR, asm_header_text, NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE); ASM_VOLATILE_P(asm_header) = 1; add_stmt(asm_header); @@ -74,8 +95,9 @@ static void handle_seh_pragma(cpp_reader* UNUSED parser) { - tree x, arg; + tree x, arg, line; std::stringstream label_decl; + bool is_except; if (!cfun) { @@ -84,21 +106,32 @@ handle_seh_pragma(cpp_reader* UNUSED parser) } if ((pragma_lex(&x) != CPP_OPEN_PAREN) || - (pragma_lex(&arg) != CPP_NAME) || + (pragma_lex(&arg) != CPP_NAME) || // except or finally + (pragma_lex(&x) != CPP_COMMA) || + (pragma_lex(&line) != CPP_NUMBER) || // Line number (pragma_lex(&x) != CPP_CLOSE_PAREN) || - (pragma_lex(&x) != CPP_EOF)) + (pragma_lex(&x) != CPP_EOF) + ) { - error("%<#pragma REACTOS seh%> needs one parameter%>"); + error("%<#pragma REACTOS seh%> needs two parameters%>"); return; } + trace(stderr, "Pragma: %s, %u\n", IDENTIFIER_POINTER(arg), TREE_INT_CST_LOW(line)); + const char* op = IDENTIFIER_POINTER(arg); seh_function* seh_fun = get_seh_function(); - if (strcmp(op, "except") == 0) + if (strcmp(op, "__seh$$except") == 0) + { + is_except = true; seh_fun->except = true; - else if (strcmp(op, "finally") == 0) + } + else if (strcmp(op, "__seh$$finally") == 0) + { + is_except = false; seh_fun->unwind = true; + } else { error("Wrong argument for %<#pragma REACTOS seh%>. Expected \"except\" or \"finally\""); @@ -106,6 +139,8 @@ handle_seh_pragma(cpp_reader* UNUSED parser) } seh_fun->count++; + seh_fun->handlers.push_back({is_except, (unsigned int)TREE_INT_CST_LOW(line)}); + /* Make sure we use a frame pointer. REACTOS' PSEH depends on this */ cfun->machine->accesses_prev_frame = 1; } @@ -142,12 +177,25 @@ finish_seh_function(void* event_data, void* UNUSED user_data) asm_str << "\n"; asm_str << "\t.seh_handlerdata\n"; asm_str << "\t.long " << seh_fun->count << "\n"; - asm_str << "\t.seh_code"; + + for (auto& handler : seh_fun->handlers) + { + asm_str << "\n\t.rva " << "__seh2$$begin_try__" << handler.line; /* Begin of tried code */ + asm_str << "\n\t.rva " << "__seh2$$end_try__" << handler.line; /* End of tried code */ + asm_str << "\n\t.rva " << "__seh2$$filter__" << handler.line; /* Filter function */ + if (handler.is_except) + asm_str << "\n\t.rva " << "__seh2$$begin_except__" << handler.line; /* Called on except */ + else + asm_str << "\n\t.long 0"; /* No unwind handler */ + } + asm_str << "\n\t.seh_code\n"; strncpy(const_cast(TREE_STRING_POINTER(seh_fun->asm_header_text)), asm_str.str().c_str(), TREE_STRING_LENGTH(seh_fun->asm_header_text)); + trace(stderr, "ASM: %s\n", asm_str.str().c_str()); + delete seh_fun; } From e8e770fd14bc2e3623bb78874876a8285fbc5aec Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 3 May 2024 15:39:33 +0300 Subject: [PATCH 104/182] [WIN32K:NTUSER] Fix NULL pointer dereference in MENU_HideSubPopups Fixes CORE-19367. --- win32ss/user/ntuser/menu.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/win32ss/user/ntuser/menu.c b/win32ss/user/ntuser/menu.c index a9aace74837..fe68f82e407 100644 --- a/win32ss/user/ntuser/menu.c +++ b/win32ss/user/ntuser/menu.c @@ -3282,11 +3282,14 @@ static void FASTCALL MENU_HideSubPopups(PWND pWndOwner, PMENU Menu, { PWND pWnd; if (!VerifyMenu(Item->spSubMenu)) return; - pWnd = ValidateHwndNoErr(Item->spSubMenu->hWnd); MENU_HideSubPopups(pWndOwner, Item->spSubMenu, FALSE, wFlags); MENU_SelectItem(pWndOwner, Item->spSubMenu, NO_SELECTED_ITEM, SendMenuSelect, NULL); TRACE("M_HSP top p hm %p pWndOwner IDMenu %p\n",top_popup_hmenu,pWndOwner->IDMenu); - co_UserDestroyWindow(pWnd); + pWnd = ValidateHwndNoErr(Item->spSubMenu->hWnd); + if (pWnd != NULL) + { + co_UserDestroyWindow(pWnd); + } /* Native returns handle to destroyed window */ if (!(wFlags & TPM_NONOTIFY)) From 68c2a28973a4ccb0e44742f45f4ca7f80dc12fa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sat, 4 May 2024 12:35:24 +0200 Subject: [PATCH 105/182] [SETUPLIB] Split OpenAndMapFile function and Doxygen-ize it --- base/setup/lib/setuplib.c | 2 +- base/setup/lib/utils/bldrsup.c | 4 +- base/setup/lib/utils/filesup.c | 153 +++++++++++++++++++++++++------- base/setup/lib/utils/filesup.h | 25 ++++-- base/setup/lib/utils/osdetect.c | 4 +- 5 files changed, 140 insertions(+), 48 deletions(-) diff --git a/base/setup/lib/setuplib.c b/base/setup/lib/setuplib.c index e7e25be53dd..c17293c99d2 100644 --- a/base/setup/lib/setuplib.c +++ b/base/setup/lib/setuplib.c @@ -345,9 +345,9 @@ InstallSetupInfFile( Status = OpenAndMapFile(NULL, UnattendInfPath, &UnattendFileHandle, + &FileSize, &SectionHandle, &ViewBase, - &FileSize, FALSE); if (!NT_SUCCESS(Status)) { diff --git a/base/setup/lib/utils/bldrsup.c b/base/setup/lib/utils/bldrsup.c index d6f515ea89b..10d5d3569c2 100644 --- a/base/setup/lib/utils/bldrsup.c +++ b/base/setup/lib/utils/bldrsup.c @@ -190,7 +190,7 @@ FindBootStore( // By handle #if 0 /* Check whether the loader configuration file exists */ Status = OpenAndMapFile(PartitionDirectoryHandle, NtosBootLoaders[Type].LoaderConfigurationFile, - &FileHandle, &SectionHandle, &ViewBase, &FileSize, FALSE); + &FileHandle, &FileSize, &SectionHandle, &ViewBase, FALSE); if (!NT_SUCCESS(Status)) { /* The loader does not exist, continue with another one */ @@ -343,9 +343,9 @@ OpenIniBootLoaderStore( Status = OpenAndMapFile(PartitionDirectoryHandle, NtosBootLoaders[Type].LoaderConfigurationFile, &BootStore->FileHandle, + &BootStore->FileSize, &BootStore->SectionHandle, &BootStore->ViewBase, - &BootStore->FileSize, TRUE); if (!NT_SUCCESS(Status)) { diff --git a/base/setup/lib/utils/filesup.c b/base/setup/lib/utils/filesup.c index 5b16799a6ab..0ecf3fdcc32 100644 --- a/base/setup/lib/utils/filesup.c +++ b/base/setup/lib/utils/filesup.c @@ -854,26 +854,52 @@ NtPathToDiskPartComponents( return TRUE; } +/** + * @brief + * Opens and maps a file in memory. + * + * @param[in] RootDirectory + * @param[in] PathNameToFile + * Path to the file, either in absolute form, or relative to the opened + * root directory given by the RootDirectory handle. + * + * @param[out] FileHandle + * An optional pointer to a variable receiving a handle to the opened file. + * If NULL, the underlying file handle is closed. + * + * @param[out] FileSize + * An optional pointer to a variable receiving the size of the opened file. + * + * @param[out] SectionHandle + * A pointer to a variable receiving a handle to a section mapping the file. + * + * @param[out] BaseAddress + * A pointer to a variable receiving the address where the file is mapped. + * + * @param[in] ReadWriteAccess + * A boolean variable specifying whether to map the file for read and write + * access (TRUE), or read-only access (FALSE). + * + * @return + * STATUS_SUCCESS in case of success, or a status code in case of error. + **/ NTSTATUS OpenAndMapFile( - IN HANDLE RootDirectory OPTIONAL, - IN PCWSTR PathNameToFile, - OUT PHANDLE FileHandle, // IN OUT PHANDLE OPTIONAL - OUT PHANDLE SectionHandle, - OUT PVOID* BaseAddress, - OUT PULONG FileSize OPTIONAL, - IN BOOLEAN ReadWriteAccess) + _In_opt_ HANDLE RootDirectory, + _In_ PCWSTR PathNameToFile, + _Out_opt_ PHANDLE FileHandle, + _Out_opt_ PULONG FileSize, + _Out_ PHANDLE SectionHandle, + _Out_ PVOID* BaseAddress, + _In_ BOOLEAN ReadWriteAccess) { NTSTATUS Status; UNICODE_STRING FileName; OBJECT_ATTRIBUTES ObjectAttributes; IO_STATUS_BLOCK IoStatusBlock; - ULONG SectionPageProtection; - SIZE_T ViewSize; - PVOID ViewBase; + HANDLE LocalFileHandle; /* Open the file */ - RtlInitUnicodeString(&FileName, PathNameToFile); InitializeObjectAttributes(&ObjectAttributes, &FileName, @@ -881,10 +907,8 @@ OpenAndMapFile( RootDirectory, NULL); - *FileHandle = NULL; - *SectionHandle = NULL; - - Status = NtOpenFile(FileHandle, + if (FileHandle) *FileHandle = NULL; + Status = NtOpenFile(&LocalFileHandle, FILE_GENERIC_READ | // Contains SYNCHRONIZE (ReadWriteAccess ? FILE_GENERIC_WRITE : 0), &ObjectAttributes, @@ -893,7 +917,7 @@ OpenAndMapFile( FILE_SYNCHRONOUS_IO_NONALERT | FILE_NON_DIRECTORY_FILE); if (!NT_SUCCESS(Status)) { - DPRINT1("Failed to open file '%wZ', Status 0x%08lx\n", &FileName, Status); + DPRINT1("Failed to open file '%wZ' (Status 0x%08lx)\n", &FileName, Status); return Status; } @@ -901,32 +925,82 @@ OpenAndMapFile( { /* Query the file size */ FILE_STANDARD_INFORMATION FileInfo; - Status = NtQueryInformationFile(*FileHandle, + Status = NtQueryInformationFile(LocalFileHandle, &IoStatusBlock, &FileInfo, sizeof(FileInfo), FileStandardInformation); if (!NT_SUCCESS(Status)) { - DPRINT("NtQueryInformationFile() failed (Status %lx)\n", Status); - NtClose(*FileHandle); - *FileHandle = NULL; - return Status; + DPRINT("NtQueryInformationFile() failed (Status 0x%08lx)\n", Status); + goto Quit; } if (FileInfo.EndOfFile.HighPart != 0) DPRINT1("WARNING!! The file '%wZ' is too large!\n", &FileName); *FileSize = FileInfo.EndOfFile.LowPart; - DPRINT("File size: %lu\n", *FileSize); } - /* Map the file in memory */ + /* Map the whole file into memory */ + Status = MapFile(LocalFileHandle, + SectionHandle, + BaseAddress, + ReadWriteAccess); + if (!NT_SUCCESS(Status)) + { + DPRINT1("Failed to map file '%wZ' (Status 0x%08lx)\n", &FileName, Status); + goto Quit; + } + +Quit: + /* If we succeeded, return the opened file handle if needed. + * If we failed or the caller does not need the handle, close it now. */ + if (NT_SUCCESS(Status) && FileHandle) + *FileHandle = LocalFileHandle; + else + NtClose(LocalFileHandle); + + return Status; +} + +/** + * @brief + * Maps an opened file in memory. + * + * @param[in] FileHandle + * A handle to an opened file to map. + * + * @param[out] SectionHandle + * A pointer to a variable receiving a handle to a section mapping the file. + * + * @param[out] BaseAddress + * A pointer to a variable receiving the address where the file is mapped. + * + * @param[in] ReadWriteAccess + * A boolean variable specifying whether to map the file for read and write + * access (TRUE), or read-only access (FALSE). + * + * @return + * STATUS_SUCCESS in case of success, or a status code in case of error. + **/ +NTSTATUS +MapFile( + _In_ HANDLE FileHandle, + _Out_ PHANDLE SectionHandle, + _Out_ PVOID* BaseAddress, + _In_ BOOLEAN ReadWriteAccess) +{ + NTSTATUS Status; + ULONG SectionPageProtection; + SIZE_T ViewSize; + PVOID ViewBase; SectionPageProtection = (ReadWriteAccess ? PAGE_READWRITE : PAGE_READONLY); /* Create the section */ + *SectionHandle = NULL; Status = NtCreateSection(SectionHandle, STANDARD_RIGHTS_REQUIRED | SECTION_QUERY | SECTION_MAP_READ | @@ -935,12 +1009,11 @@ OpenAndMapFile( NULL, SectionPageProtection, SEC_COMMIT /* | SEC_IMAGE (_NO_EXECUTE) */, - *FileHandle); + FileHandle); if (!NT_SUCCESS(Status)) { - DPRINT1("Failed to create a memory section for file '%wZ', Status 0x%08lx\n", &FileName, Status); - NtClose(*FileHandle); - *FileHandle = NULL; + DPRINT1("Failed to create a memory section for file 0x%p (Status 0x%08lx)\n", + FileHandle, Status); return Status; } @@ -958,11 +1031,10 @@ OpenAndMapFile( SectionPageProtection); if (!NT_SUCCESS(Status)) { - DPRINT1("Failed to map a view for file '%wZ', Status 0x%08lx\n", &FileName, Status); + DPRINT1("Failed to map a view for file 0x%p (Status 0x%08lx)\n", + FileHandle, Status); NtClose(*SectionHandle); *SectionHandle = NULL; - NtClose(*FileHandle); - *FileHandle = NULL; return Status; } @@ -970,10 +1042,23 @@ OpenAndMapFile( return STATUS_SUCCESS; } +/** + * @brief + * Unmaps a mapped file by section. + * + * @param[in] SectionHandle + * The handle to the section mapping the file. + * + * @param[in] BaseAddress + * The base address where the file is mapped. + * + * @return + * TRUE if the file was successfully unmapped; FALSE if an error occurred. + **/ BOOLEAN UnMapFile( - IN HANDLE SectionHandle, - IN PVOID BaseAddress) + _In_ HANDLE SectionHandle, + _In_ PVOID BaseAddress) { NTSTATUS Status; BOOLEAN Success = TRUE; @@ -981,14 +1066,14 @@ UnMapFile( Status = NtUnmapViewOfSection(NtCurrentProcess(), BaseAddress); if (!NT_SUCCESS(Status)) { - DPRINT1("UnMapFile: NtUnmapViewOfSection(0x%p) failed with Status 0x%08lx\n", + DPRINT1("NtUnmapViewOfSection(0x%p) failed (Status 0x%08lx)\n", BaseAddress, Status); Success = FALSE; } Status = NtClose(SectionHandle); if (!NT_SUCCESS(Status)) { - DPRINT1("UnMapFile: NtClose(0x%p) failed with Status 0x%08lx\n", + DPRINT1("NtClose(0x%p) failed (Status 0x%08lx)\n", SectionHandle, Status); Success = FALSE; } diff --git a/base/setup/lib/utils/filesup.h b/base/setup/lib/utils/filesup.h index 44a2f1810ad..2962819b53f 100644 --- a/base/setup/lib/utils/filesup.h +++ b/base/setup/lib/utils/filesup.h @@ -92,18 +92,25 @@ NtPathToDiskPartComponents( NTSTATUS OpenAndMapFile( - IN HANDLE RootDirectory OPTIONAL, - IN PCWSTR PathNameToFile, - OUT PHANDLE FileHandle, // IN OUT PHANDLE OPTIONAL - OUT PHANDLE SectionHandle, - OUT PVOID* BaseAddress, - OUT PULONG FileSize OPTIONAL, - IN BOOLEAN ReadWriteAccess); + _In_opt_ HANDLE RootDirectory, + _In_ PCWSTR PathNameToFile, + _Out_opt_ PHANDLE FileHandle, + _Out_opt_ PULONG FileSize, + _Out_ PHANDLE SectionHandle, + _Out_ PVOID* BaseAddress, + _In_ BOOLEAN ReadWriteAccess); + +NTSTATUS +MapFile( + _In_ HANDLE FileHandle, + _Out_ PHANDLE SectionHandle, + _Out_ PVOID* BaseAddress, + _In_ BOOLEAN ReadWriteAccess); BOOLEAN UnMapFile( - IN HANDLE SectionHandle, - IN PVOID BaseAddress); + _In_ HANDLE SectionHandle, + _In_ PVOID BaseAddress); #define UnMapAndCloseFile(FileHandle, SectionHandle, BaseAddress) \ do { \ diff --git a/base/setup/lib/utils/osdetect.c b/base/setup/lib/utils/osdetect.c index cc45fa907c2..0aceb33ab04 100644 --- a/base/setup/lib/utils/osdetect.c +++ b/base/setup/lib/utils/osdetect.c @@ -263,8 +263,8 @@ CheckForValidPEAndVendor( VendorName->Length = 0; Status = OpenAndMapFile(RootDirectory, PathNameToFile, - &FileHandle, &SectionHandle, &ViewBase, - NULL, FALSE); + &FileHandle, NULL, + &SectionHandle, &ViewBase, FALSE); if (!NT_SUCCESS(Status)) { DPRINT1("Failed to open and map file '%S', Status 0x%08lx\n", PathNameToFile, Status); From 9b563d32d21f9b6db5977748457cb76b4ef9812f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sat, 4 May 2024 12:47:13 +0200 Subject: [PATCH 106/182] [SETUPLIB] Improve a bit the management of boot-store options - QueryBootStoreOptions(): De-duplicate code. - SetBootStoreOpt(): Respect the FieldsToChange flag. - BOOT_STORE_OPTIONS: Remove unused Version field and distinguish between "Current" and "Next" BootEntryKey. --- base/setup/lib/bootsup.c | 10 ++-- base/setup/lib/utils/bldrsup.c | 90 +++++++++++++++++++--------------- base/setup/lib/utils/bldrsup.h | 22 +++++---- 3 files changed, 68 insertions(+), 54 deletions(-) diff --git a/base/setup/lib/bootsup.c b/base/setup/lib/bootsup.c index 8c89220174e..cf9cf98cf71 100644 --- a/base/setup/lib/bootsup.c +++ b/base/setup/lib/bootsup.c @@ -130,15 +130,15 @@ CreateFreeLoaderReactOSEntries( #if DBG && !defined(_WINKD_) if (IsUnattendedSetup) { - BootOptions.CurrentBootEntryKey = MAKESTRKEY(L"ReactOS_KdSerial"); + BootOptions.NextBootEntryKey = MAKESTRKEY(L"ReactOS_KdSerial"); } else #endif { #if DBG - BootOptions.CurrentBootEntryKey = MAKESTRKEY(L"ReactOS_Debug"); + BootOptions.NextBootEntryKey = MAKESTRKEY(L"ReactOS_Debug"); #else - BootOptions.CurrentBootEntryKey = MAKESTRKEY(L"ReactOS"); + BootOptions.NextBootEntryKey = MAKESTRKEY(L"ReactOS"); #endif } @@ -157,8 +157,8 @@ CreateFreeLoaderReactOSEntries( } #endif - BootOptions.Version = FreeLdr; - SetBootStoreOptions(BootStoreHandle, &BootOptions, 2 | 1); + SetBootStoreOptions(BootStoreHandle, &BootOptions, + BOOT_OPTIONS_TIMEOUT | BOOT_OPTIONS_NEXT_BOOTENTRY_KEY); } static NTSTATUS diff --git a/base/setup/lib/utils/bldrsup.c b/base/setup/lib/utils/bldrsup.c index 10d5d3569c2..555cebd1f57 100644 --- a/base/setup/lib/utils/bldrsup.c +++ b/base/setup/lib/utils/bldrsup.c @@ -130,6 +130,17 @@ NTOS_BOOT_LOADER_FILES NtosBootLoaders[] = }; C_ASSERT(_countof(NtosBootLoaders) == BldrTypeMax); +enum BOOT_OPTION +{ + BO_TimeOut, + BO_DefaultOS, +}; +static const PCWSTR BootOptionNames[][2] = +{ + {L"TimeOut", L"DefaultOS"}, // FreeLdr + {L"timeout", L"default" } // NtLdr +}; + /* FUNCTIONS ****************************************************************/ @@ -1031,36 +1042,32 @@ QueryBootStoreOptions( return STATUS_NOT_SUPPORTED; } - if (BootStore->Type == FreeLdr) - { - BootOptions->Version = FreeLdr; - - BootOptions->CurrentBootEntryKey = 0; - IniGetKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, - L"DefaultOS", (PCWSTR*)&BootOptions->CurrentBootEntryKey); + BootOptions->Timeout = 0; + BootOptions->CurrentBootEntryKey = 0; + BootOptions->NextBootEntryKey = 0; - BootOptions->Timeout = 0; - if (IniGetKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, - L"TimeOut", &TimeoutStr) && TimeoutStr) - { - BootOptions->Timeout = _wtoi(TimeoutStr); - } - } - else if (BootStore->Type == NtLdr) + if (IniGetKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, + BootOptionNames[BootStore->Type][BO_TimeOut], + &TimeoutStr) && TimeoutStr) { - BootOptions->Version = NtLdr; + BootOptions->Timeout = _wtoi(TimeoutStr); + } - BootOptions->CurrentBootEntryKey = 0; - IniGetKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, - L"default", (PCWSTR*)&BootOptions->CurrentBootEntryKey); + IniGetKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, + BootOptionNames[BootStore->Type][BO_DefaultOS], + (PCWSTR*)&BootOptions->NextBootEntryKey); - BootOptions->Timeout = 0; - if (IniGetKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, - L"timeout", &TimeoutStr) && TimeoutStr) - { - BootOptions->Timeout = _wtoi(TimeoutStr); - } - } + /* + * NOTE: BootOptions->CurrentBootEntryKey is an informative field only. + * It indicates which boot entry has been selected for starting the + * current OS instance. Such information is NOT stored in the INI file, + * but has to be determined via other means. On UEFI the 'BootCurrent' + * environment variable does that. Otherwise, one could heuristically + * determine it by comparing the boot path and options of each entry + * with those used by the current OS instance. + * Since we currently do not need this information (and it can be costly + * to determine), BootOptions->CurrentBootEntryKey is not evaluated. + */ return STATUS_SUCCESS; } @@ -1072,7 +1079,6 @@ SetBootStoreOptions( IN ULONG FieldsToChange) { PBOOT_STORE_CONTEXT BootStore = (PBOOT_STORE_CONTEXT)Handle; - WCHAR TimeoutStr[15]; if (!BootStore || !BootOptions) return STATUS_INVALID_PARAMETER; @@ -1090,25 +1096,29 @@ SetBootStoreOptions( // // if (BootStore->Type >= BldrTypeMax || NtosBootLoaders[BootStore->Type].Type >= BldrTypeMax) - if (BootStore->Type != FreeLdr) + if (BootStore->Type != FreeLdr && BootStore->Type != NtLdr) { DPRINT1("Loader type %d is currently unsupported!\n", NtosBootLoaders[BootStore->Type].Type); return STATUS_NOT_SUPPORTED; } - if (BootOptions->Version != FreeLdr) - return STATUS_INVALID_PARAMETER; + // if (BootOptions->Length < sizeof(*BootOptions)) + // return STATUS_INVALID_PARAMETER; - // - // TODO: Depending on the flags set in 'FieldsToChange', - // change either one or both these bootloader options. - // - IniAddKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, - L"DefaultOS", (PCWSTR)BootOptions->CurrentBootEntryKey); - - RtlStringCchPrintfW(TimeoutStr, ARRAYSIZE(TimeoutStr), L"%d", BootOptions->Timeout); - IniAddKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, - L"TimeOut", TimeoutStr); + if (FieldsToChange & BOOT_OPTIONS_TIMEOUT) + { + WCHAR TimeoutStr[15]; + RtlStringCchPrintfW(TimeoutStr, ARRAYSIZE(TimeoutStr), L"%d", BootOptions->Timeout); + IniAddKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, + BootOptionNames[BootStore->Type][BO_TimeOut], + TimeoutStr); + } + if (FieldsToChange & BOOT_OPTIONS_NEXT_BOOTENTRY_KEY) + { + IniAddKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, + BootOptionNames[BootStore->Type][BO_DefaultOS], + (PCWSTR)BootOptions->NextBootEntryKey); + } return STATUS_SUCCESS; } diff --git a/base/setup/lib/utils/bldrsup.h b/base/setup/lib/utils/bldrsup.h index 39862660d8d..b60624b2859 100644 --- a/base/setup/lib/utils/bldrsup.h +++ b/base/setup/lib/utils/bldrsup.h @@ -30,14 +30,18 @@ typedef enum _BOOT_STORE_TYPE */ typedef struct _BOOT_STORE_OPTIONS { - ULONG Version; // BOOT_STORE_TYPE value // ULONG Length; - ULONG Timeout; - ULONG_PTR CurrentBootEntryKey; - // ULONG_PTR NextBootEntryKey; - // WCHAR HeadlessRedirection[1]; + ULONG Timeout; //< Timeout in seconds before the default boot entry is started. + ULONG_PTR CurrentBootEntryKey; //< Selected boot entry for the current boot (informative only). + ULONG_PTR NextBootEntryKey; //< The boot entry for the next boot. + // WCHAR HeadlessRedirection[ANYSIZE_ARRAY]; } BOOT_STORE_OPTIONS, *PBOOT_STORE_OPTIONS; +/* FieldsToChange flags for SetBootStoreOptions() */ +#define BOOT_OPTIONS_TIMEOUT 1 +#define BOOT_OPTIONS_NEXT_BOOTENTRY_KEY 2 +// #define BOOT_OPTIONS_HEADLESS_REDIRECTION 4 + /* * These macros are used to set a value for the BootEntryKey member of a * BOOT_STORE_ENTRY structure, much in the same idea as MAKEINTRESOURCE and @@ -63,10 +67,10 @@ typedef struct _BOOT_STORE_ENTRY { ULONG Version; // BOOT_STORE_TYPE value // ULONG Length; - ULONG_PTR BootEntryKey; // Boot entry "key" - PCWSTR FriendlyName; // Human-readable boot entry description // LoadIdentifier - PCWSTR BootFilePath; // Path to e.g. osloader.exe, or winload.efi // EfiOsLoaderFilePath - ULONG OsOptionsLength; // Loader-specific options blob (can be a string, or a binary structure...) + ULONG_PTR BootEntryKey; //< Boot entry "key" + PCWSTR FriendlyName; //< Human-readable boot entry description // LoadIdentifier + PCWSTR BootFilePath; //< Path to e.g. osloader.exe, or winload.efi // EfiOsLoaderFilePath + ULONG OsOptionsLength; //< Loader-specific options blob (can be a string, or a binary structure...) UCHAR OsOptions[ANYSIZE_ARRAY]; /* * In packed form, this structure would contain offsets to 'FriendlyName' From d1b8feb6906c11582c95ee3d81a117e1f361bfd8 Mon Sep 17 00:00:00 2001 From: Oleg Dubinskiy Date: Mon, 6 May 2024 20:07:47 +0200 Subject: [PATCH 107/182] [AUDIO] Implement retreiving audio playback position (#6817) Implement GetWavePosition API for both Legacy and MMixer modes. [WDMAUD.DRV] - Fix wrong I/O control code passed to DeviceIoControl for Legacy mode. Use IOCTL_GETPOS instead of IOCTL_OPEN_WDMAUD, to use the correct routine. - Implement WdmAudGetWavePosition for MMixer mode, as it was completely unimplemented there. Call an appropiate MMixer routine and return back resulting wave position. [WDMAUD] - Implement WdmAudGetPostion routine, which is used by Legacy mode, and call the same MMixer routine from it too. - Handle it in IOCTL_GETPOS I/O control request of dispatch routine. [MMIXER] - Implement MMixerGetWavePosition internal routine, which is called by both Legacy and MMixer modes, and does the actual work of retrieving playback position. - Call an apporpriate KSPROPERTY_AUDIO_POSITION property from it, and return in the output resulting KSAUDIO_POSITION.PlayOffset member, which contains the current playback position offset, to be returned to the caller. This fixes a failure retreiving the current audio playback position snd subsequent playing the audio data by several 3rd-party applications which are using this API (for example, some Gecko based browsers by @roytam1: Basilisk (Serpent) 52.9.0 IA-32 build, NewMoon 28.10.7 IA-32 build and KMeleon 76.5.3 Goanna engine). CORE-19542 --- dll/win32/wdmaud.drv/legacy.c | 2 +- dll/win32/wdmaud.drv/mmixer.c | 27 +++++++++++++++++- drivers/wdm/audio/legacy/wdmaud/control.c | 1 + drivers/wdm/audio/legacy/wdmaud/mmixer.c | 22 +++++++++++++++ drivers/wdm/audio/legacy/wdmaud/wdmaud.h | 7 +++++ sdk/lib/drivers/sound/mmixer/mmixer.h | 6 ++++ sdk/lib/drivers/sound/mmixer/wave.c | 34 +++++++++++++++++++++++ 7 files changed, 97 insertions(+), 2 deletions(-) diff --git a/dll/win32/wdmaud.drv/legacy.c b/dll/win32/wdmaud.drv/legacy.c index f1ada7cdd3b..95d38c3c43a 100644 --- a/dll/win32/wdmaud.drv/legacy.c +++ b/dll/win32/wdmaud.drv/legacy.c @@ -832,7 +832,7 @@ WdmAudGetWavePositionByLegacy( DeviceInfo.DeviceType = DeviceType; Result = SyncOverlappedDeviceIoControl(KernelHandle, - IOCTL_OPEN_WDMAUD, + IOCTL_GETPOS, (LPVOID) &DeviceInfo, sizeof(WDMAUD_DEVICE_INFO), (LPVOID) &DeviceInfo, diff --git a/dll/win32/wdmaud.drv/mmixer.c b/dll/win32/wdmaud.drv/mmixer.c index 8fc2ed6309c..3b032531026 100644 --- a/dll/win32/wdmaud.drv/mmixer.c +++ b/dll/win32/wdmaud.drv/mmixer.c @@ -776,7 +776,32 @@ WdmAudGetWavePositionByMMixer( IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance, IN MMTIME* Time) { - /* FIXME */ + PSOUND_DEVICE SoundDevice; + MMDEVICE_TYPE DeviceType; + MIXER_STATUS Status; + MMRESULT Result; + DWORD Position; + + Result = GetSoundDeviceFromInstance(SoundDeviceInstance, &SoundDevice); + if (!MMSUCCESS(Result)) + return TranslateInternalMmResult(Result); + + Result = GetSoundDeviceType(SoundDevice, &DeviceType); + SND_ASSERT(Result == MMSYSERR_NOERROR); + + if (DeviceType == WAVE_IN_DEVICE_TYPE || DeviceType == WAVE_OUT_DEVICE_TYPE) + { + Status = MMixerGetWavePosition(&MixerContext, SoundDeviceInstance->Handle, &Position); + if (Status == MM_STATUS_SUCCESS) + { + /* Store position */ + Time->wType = TIME_BYTES; + Time->u.cb = Position; + + /* Completed successfully */ + return MMSYSERR_NOERROR; + } + } return MMSYSERR_NOTSUPPORTED; } diff --git a/drivers/wdm/audio/legacy/wdmaud/control.c b/drivers/wdm/audio/legacy/wdmaud/control.c index f9ae9a32339..5aecad326d0 100644 --- a/drivers/wdm/audio/legacy/wdmaud/control.c +++ b/drivers/wdm/audio/legacy/wdmaud/control.c @@ -366,6 +366,7 @@ WdmAudDeviceControl( case IOCTL_RESET_STREAM: return WdmAudResetStream(DeviceObject, Irp, DeviceInfo); case IOCTL_GETPOS: + return WdmAudGetPosition(DeviceObject, Irp, DeviceInfo); case IOCTL_GETDEVID: case IOCTL_GETVOLUME: case IOCTL_SETVOLUME: diff --git a/drivers/wdm/audio/legacy/wdmaud/mmixer.c b/drivers/wdm/audio/legacy/wdmaud/mmixer.c index dbf97ba5608..1c7b9a5cf14 100644 --- a/drivers/wdm/audio/legacy/wdmaud/mmixer.c +++ b/drivers/wdm/audio/legacy/wdmaud/mmixer.c @@ -769,6 +769,28 @@ WdmAudMidiCapabilities( return STATUS_UNSUCCESSFUL; } +NTSTATUS +NTAPI +WdmAudGetPosition( + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp, + _In_ PWDMAUD_DEVICE_INFO DeviceInfo) +{ + MIXER_STATUS Status; + ULONG Position; + + /* Get position */ + Status = MMixerGetWavePosition(&MixerContext, DeviceInfo->hDevice, &Position); + + if (Status == MM_STATUS_SUCCESS) + { + DeviceInfo->u.Position = (ULONGLONG)Position; + return SetIrpIoStatus(Irp, STATUS_SUCCESS, sizeof(WDMAUD_DEVICE_INFO)); + } + else + return SetIrpIoStatus(Irp, STATUS_UNSUCCESSFUL, sizeof(WDMAUD_DEVICE_INFO)); +} + MIXER_STATUS CreatePinCallback( diff --git a/drivers/wdm/audio/legacy/wdmaud/wdmaud.h b/drivers/wdm/audio/legacy/wdmaud/wdmaud.h index 4c56a87e21e..12588f0a2a5 100644 --- a/drivers/wdm/audio/legacy/wdmaud/wdmaud.h +++ b/drivers/wdm/audio/legacy/wdmaud/wdmaud.h @@ -198,6 +198,13 @@ WdmAudMidiCapabilities( IN PWDMAUD_CLIENT ClientInfo, IN PWDMAUD_DEVICE_EXTENSION DeviceExtension); +NTSTATUS +NTAPI +WdmAudGetPosition( + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp, + _In_ PWDMAUD_DEVICE_INFO DeviceInfo); + NTSTATUS NTAPI WdmAudFrameSize( diff --git a/sdk/lib/drivers/sound/mmixer/mmixer.h b/sdk/lib/drivers/sound/mmixer/mmixer.h index 7d88125ce36..396d221d2e4 100644 --- a/sdk/lib/drivers/sound/mmixer/mmixer.h +++ b/sdk/lib/drivers/sound/mmixer/mmixer.h @@ -207,6 +207,12 @@ MMixerOpenWave( IN PVOID Context, OUT PHANDLE PinHandle); +MIXER_STATUS +MMixerGetWavePosition( + _In_ PMIXER_CONTEXT MixerContext, + _In_ HANDLE PinHandle, + _Out_ PDWORD Position); + MIXER_STATUS MMixerSetWaveStatus( IN PMIXER_CONTEXT MixerContext, diff --git a/sdk/lib/drivers/sound/mmixer/wave.c b/sdk/lib/drivers/sound/mmixer/wave.c index cdf9a78d92f..bfce31e5627 100644 --- a/sdk/lib/drivers/sound/mmixer/wave.c +++ b/sdk/lib/drivers/sound/mmixer/wave.c @@ -614,6 +614,40 @@ MMixerGetWaveOutCount( return MixerList->WaveOutListCount; } +MIXER_STATUS +MMixerGetWavePosition( + _In_ PMIXER_CONTEXT MixerContext, + _In_ HANDLE PinHandle, + _Out_ PDWORD Position) +{ + KSAUDIO_POSITION AudioPosition; + KSPROPERTY Property; + MIXER_STATUS Status; + ULONG Length; + + /* Validate mixer context */ + Status = MMixerVerifyContext(MixerContext); + + if (Status != MM_STATUS_SUCCESS) + return Status; + + Property.Id = KSPROPERTY_AUDIO_POSITION; + Property.Set = KSPROPSETID_Audio; + Property.Flags = KSPROPERTY_TYPE_GET; + + Status = MixerContext->Control(PinHandle, IOCTL_KS_PROPERTY, + &Property, sizeof(Property), + &AudioPosition, sizeof(AudioPosition), + &Length); + if (Status == MM_STATUS_SUCCESS) + { + /* store audio position */ + *Position = (DWORD)AudioPosition.PlayOffset; + } + + return Status; +} + MIXER_STATUS MMixerSetWaveStatus( IN PMIXER_CONTEXT MixerContext, From c7295b2cdf4896574f96ca9581cb45d6eebcc2c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sat, 4 May 2024 12:38:07 +0200 Subject: [PATCH 108/182] [SETUPLIB] Support different boot store file creation/opening and access modes The support is so far enabled only for INI files (freeldr.ini, boot.ini). May be subject to further improvements in the future. Usage examples: - When finding existing ReactOS or Windows installations, the boot store should exist and is opened in read-only mode. Closing the boot store doesn't store any temporary modifications made to it. - When doing a clean installation, freeldr.ini is created in read-write access. - When installing with an existing freeldr.ini or boot.ini, they are opened as existing files in read-write access. --- base/setup/lib/bootsup.c | 12 +- base/setup/lib/utils/bldrsup.c | 487 ++++++++++++++++++++------------ base/setup/lib/utils/bldrsup.h | 47 ++- base/setup/lib/utils/osdetect.c | 3 +- 4 files changed, 344 insertions(+), 205 deletions(-) diff --git a/base/setup/lib/bootsup.c b/base/setup/lib/bootsup.c index cf9cf98cf71..f02fd571f3c 100644 --- a/base/setup/lib/bootsup.c +++ b/base/setup/lib/bootsup.c @@ -170,7 +170,8 @@ CreateFreeLoaderIniForReactOS( PVOID BootStoreHandle; /* Initialize the INI file and create the common FreeLdr sections */ - Status = OpenBootStore(&BootStoreHandle, IniPath, FreeLdr, TRUE); + Status = OpenBootStore(&BootStoreHandle, IniPath, FreeLdr, + BS_CreateAlways /* BS_OpenAlways */, BS_ReadWriteAccess); if (!NT_SUCCESS(Status)) return Status; @@ -199,7 +200,8 @@ CreateFreeLoaderIniForReactOSAndBootSector( PBOOT_SECTOR_OPTIONS Options = (PBOOT_SECTOR_OPTIONS)&BootEntry->OsOptions; /* Initialize the INI file and create the common FreeLdr sections */ - Status = OpenBootStore(&BootStoreHandle, IniPath, FreeLdr, TRUE); + Status = OpenBootStore(&BootStoreHandle, IniPath, FreeLdr, + BS_CreateAlways /* BS_OpenAlways */, BS_ReadWriteAccess); if (!NT_SUCCESS(Status)) return Status; @@ -337,7 +339,8 @@ UpdateFreeLoaderIni( PNTOS_OPTIONS Options = (PNTOS_OPTIONS)&BootEntry->OsOptions; /* Open the INI file */ - Status = OpenBootStore(&BootStoreHandle, IniPath, FreeLdr, /*TRUE*/ FALSE); + Status = OpenBootStore(&BootStoreHandle, IniPath, FreeLdr, + BS_OpenExisting /* BS_OpenAlways */, BS_ReadWriteAccess); if (!NT_SUCCESS(Status)) return Status; @@ -398,7 +401,8 @@ UpdateBootIni( PNTOS_OPTIONS Options = (PNTOS_OPTIONS)&BootEntry->OsOptions; /* Open the INI file */ - Status = OpenBootStore(&BootStoreHandle, IniPath, NtLdr, FALSE); + Status = OpenBootStore(&BootStoreHandle, IniPath, NtLdr, + BS_OpenExisting /* BS_OpenAlways */, BS_ReadWriteAccess); if (!NT_SUCCESS(Status)) return Status; diff --git a/base/setup/lib/utils/bldrsup.c b/base/setup/lib/utils/bldrsup.c index 555cebd1f57..966da4afea9 100644 --- a/base/setup/lib/utils/bldrsup.c +++ b/base/setup/lib/utils/bldrsup.c @@ -24,14 +24,15 @@ typedef NTSTATUS (*POPEN_BOOT_STORE)( - OUT PVOID* Handle, - IN HANDLE PartitionDirectoryHandle, // OPTIONAL - IN BOOT_STORE_TYPE Type, - IN BOOLEAN CreateNew); + _Out_ PVOID* Handle, + _In_ HANDLE PartitionDirectoryHandle, // _In_opt_ + _In_ BOOT_STORE_TYPE Type, + _In_ BOOT_STORE_OPENMODE OpenMode, + _In_ BOOT_STORE_ACCESS Access); typedef NTSTATUS (*PCLOSE_BOOT_STORE)( - IN PVOID Handle); + _In_ PVOID Handle); typedef NTSTATUS (*PENUM_BOOT_STORE_ENTRIES)( @@ -57,6 +58,7 @@ typedef struct _NTOS_BOOT_LOADER_FILES typedef struct _BOOT_STORE_CONTEXT { BOOT_STORE_TYPE Type; + BOOLEAN ReadOnly; // PNTOS_BOOT_LOADER_FILES ?? /* PVOID PrivateData; @@ -93,14 +95,15 @@ typedef struct _BOOT_STORE_BCDREG_CONTEXT static NTSTATUS OpenIniBootLoaderStore( - OUT PVOID* Handle, - IN HANDLE PartitionDirectoryHandle, // OPTIONAL - IN BOOT_STORE_TYPE Type, - IN BOOLEAN CreateNew); + _Out_ PVOID* Handle, + _In_ HANDLE PartitionDirectoryHandle, // _In_opt_ + _In_ BOOT_STORE_TYPE Type, + _In_ BOOT_STORE_OPENMODE OpenMode, + _In_ BOOT_STORE_ACCESS Access); static NTSTATUS CloseIniBootLoaderStore( - IN PVOID Handle); + _In_ PVOID Handle); static NTSTATUS FreeLdrEnumerateBootEntries( @@ -190,26 +193,19 @@ FindBootStore( // By handle } /* Check whether the loader configuration file exists */ - if (!DoesFileExist(PartitionDirectoryHandle, NtosBootLoaders[Type].LoaderConfigurationFile)) - { - /* The loader does not exist, continue with another one */ - // FIXME: Consider it might be optional?? - DPRINT1("Loader configuration file '%S' does not exist\n", NtosBootLoaders[Type].LoaderConfigurationFile); - return STATUS_NOT_FOUND; - } - #if 0 - /* Check whether the loader configuration file exists */ Status = OpenAndMapFile(PartitionDirectoryHandle, NtosBootLoaders[Type].LoaderConfigurationFile, &FileHandle, &FileSize, &SectionHandle, &ViewBase, FALSE); if (!NT_SUCCESS(Status)) +#else + if (!DoesFileExist(PartitionDirectoryHandle, NtosBootLoaders[Type].LoaderConfigurationFile)) +#endif { /* The loader does not exist, continue with another one */ // FIXME: Consider it might be optional?? DPRINT1("Loader configuration file '%S' does not exist\n", NtosBootLoaders[Type].LoaderConfigurationFile); return STATUS_NOT_FOUND; } -#endif return STATUS_SUCCESS; } @@ -256,13 +252,28 @@ CreateCommonFreeLdrSections( static NTSTATUS OpenIniBootLoaderStore( - OUT PVOID* Handle, - IN HANDLE PartitionDirectoryHandle, // OPTIONAL - IN BOOT_STORE_TYPE Type, - IN BOOLEAN CreateNew) + _Out_ PVOID* Handle, + _In_ HANDLE PartitionDirectoryHandle, // _In_opt_ + _In_ BOOT_STORE_TYPE Type, + _In_ BOOT_STORE_OPENMODE OpenMode, + _In_ BOOT_STORE_ACCESS Access) { NTSTATUS Status; PBOOT_STORE_INI_CONTEXT BootStore; + UNICODE_STRING Name; + OBJECT_ATTRIBUTES ObjectAttributes; + IO_STATUS_BLOCK IoStatusBlock; + ACCESS_MASK DesiredAccess; + ULONG CreateDisposition; + + // + // WARNING! We support the INI creation *ONLY* for FreeLdr, and not for NTLDR + // + if ((Type == NtLdr) && (OpenMode == BS_CreateNew || OpenMode == BS_CreateAlways || OpenMode == BS_RecreateExisting)) + { + DPRINT1("OpenIniBootLoaderStore() unsupported for NTLDR\n"); + return STATUS_NOT_SUPPORTED; + } /* Create a boot store structure */ BootStore = RtlAllocateHeap(ProcessHeap, HEAP_ZERO_MEMORY, sizeof(*BootStore)); @@ -271,118 +282,211 @@ OpenIniBootLoaderStore( BootStore->Header.Type = Type; - if (CreateNew) + /* + * So far, we only use the INI cache. The file itself is not created or + * opened yet, therefore FileHandle, SectionHandle, ViewBase and FileSize + * are all NULL. We will use this fact to know that the INI file was indeed + * created, and not just opened as an existing file. + */ + // BootStore->FileHandle = NULL; + BootStore->SectionHandle = NULL; + BootStore->ViewBase = NULL; + BootStore->FileSize = 0; + + /* + * Create or open the loader configuration INI file as necessary. + */ + RtlInitUnicodeString(&Name, NtosBootLoaders[Type].LoaderConfigurationFile); + InitializeObjectAttributes(&ObjectAttributes, + &Name, + OBJ_CASE_INSENSITIVE, + PartitionDirectoryHandle, + NULL); + + DesiredAccess = + ((Access & BS_ReadAccess ) ? FILE_GENERIC_READ : 0) | + ((Access & BS_WriteAccess) ? FILE_GENERIC_WRITE : 0); + + CreateDisposition = FILE_OPEN; + switch (OpenMode) { - UNICODE_STRING Name; - OBJECT_ATTRIBUTES ObjectAttributes; - IO_STATUS_BLOCK IoStatusBlock; + case BS_CreateNew: + CreateDisposition = FILE_CREATE; + break; + case BS_CheckExisting: + case BS_OpenExisting: + CreateDisposition = FILE_OPEN; + break; + case BS_OpenAlways: + CreateDisposition = FILE_OPEN_IF; + break; + case BS_RecreateExisting: + CreateDisposition = FILE_OVERWRITE; + break; + case BS_CreateAlways: + CreateDisposition = FILE_OVERWRITE_IF; + break; + default: + ASSERT(FALSE); + } - // - // WARNING! We "support" the INI creation *ONLY* for FreeLdr, and not for NTLDR!! - // - if (Type == NtLdr) + IoStatusBlock.Information = 0; + Status = NtCreateFile(&BootStore->FileHandle, + DesiredAccess | SYNCHRONIZE, + &ObjectAttributes, + &IoStatusBlock, + NULL, + FILE_ATTRIBUTE_NORMAL, + FILE_SHARE_READ, + CreateDisposition, + FILE_SYNCHRONOUS_IO_NONALERT | FILE_SEQUENTIAL_ONLY | FILE_NON_DIRECTORY_FILE, + NULL, + 0); + + if (OpenMode == BS_CheckExisting) + { + /* We just want to check for file existence. If we either succeeded + * opening the file, or we failed because it exists but we do not + * currently have access to it, return success in either case. */ + BOOLEAN Success = (NT_SUCCESS(Status) || (Status == STATUS_ACCESS_DENIED)); + if (!Success) { - DPRINT1("OpenIniBootLoaderStore() unsupported for NTLDR!\n"); - RtlFreeHeap(ProcessHeap, 0, BootStore); - return STATUS_NOT_SUPPORTED; + DPRINT1("Couldn't find Loader configuration file '%S'\n", + NtosBootLoaders[Type].LoaderConfigurationFile); } + if (BootStore->FileHandle) + NtClose(BootStore->FileHandle); + RtlFreeHeap(ProcessHeap, 0, BootStore); + return (Success ? STATUS_SUCCESS : Status); + } - /* Initialize the INI file */ - BootStore->IniCache = IniCacheCreate(); - if (!BootStore->IniCache) - { - DPRINT1("IniCacheCreate() failed.\n"); - RtlFreeHeap(ProcessHeap, 0, BootStore); - return STATUS_INSUFFICIENT_RESOURCES; - } + /* + * If create/open failed because the file is in read-only mode, + * change its attributes and re-attempt opening it. + */ + if (Status == STATUS_ACCESS_DENIED) do + { + FILE_BASIC_INFORMATION FileInfo = {0}; - /* - * So far, we only use the INI cache. The file itself is not created - * yet, therefore FileHandle, SectionHandle, ViewBase and FileSize - * are all NULL. We will use this fact to know that the INI file was - * indeed created, and not just opened as an existing file. - */ - // BootStore->FileHandle = NULL; - BootStore->SectionHandle = NULL; - BootStore->ViewBase = NULL; - BootStore->FileSize = 0; + /* Reattempt to open it with limited access */ + Status = NtCreateFile(&BootStore->FileHandle, + FILE_WRITE_ATTRIBUTES | SYNCHRONIZE, + &ObjectAttributes, + &IoStatusBlock, + NULL, + FILE_ATTRIBUTE_NORMAL, + FILE_SHARE_READ, + FILE_OPEN, + FILE_NO_INTERMEDIATE_BUFFERING | + FILE_SYNCHRONOUS_IO_NONALERT | FILE_SEQUENTIAL_ONLY | FILE_NON_DIRECTORY_FILE, + NULL, + 0); + /* Fail for real if we cannot open it that way */ + if (!NT_SUCCESS(Status)) + break; + /* Reset attributes to normal, no read-only */ + FileInfo.FileAttributes = FILE_ATTRIBUTE_NORMAL; /* - * The INI file is fresh new, we need to create it now. + * We basically don't care about whether it succeeds: + * if it didn't, later open will fail. */ + NtSetInformationFile(BootStore->FileHandle, &IoStatusBlock, + &FileInfo, sizeof(FileInfo), + FileBasicInformation); - RtlInitUnicodeString(&Name, NtosBootLoaders[Type].LoaderConfigurationFile); - - InitializeObjectAttributes(&ObjectAttributes, - &Name, - OBJ_CASE_INSENSITIVE, - PartitionDirectoryHandle, - NULL); + /* Close file */ + NtClose(BootStore->FileHandle); + /* And re-attempt create/open */ Status = NtCreateFile(&BootStore->FileHandle, - FILE_GENERIC_READ | FILE_GENERIC_WRITE, // Contains SYNCHRONIZE + DesiredAccess | SYNCHRONIZE, &ObjectAttributes, &IoStatusBlock, NULL, FILE_ATTRIBUTE_NORMAL, - 0, - FILE_SUPERSEDE, + FILE_SHARE_READ, + CreateDisposition, FILE_SYNCHRONOUS_IO_NONALERT | FILE_SEQUENTIAL_ONLY | FILE_NON_DIRECTORY_FILE, NULL, 0); - if (!NT_SUCCESS(Status)) + } while (0); + if (!NT_SUCCESS(Status)) + { + DPRINT1("Couldn't open Loader configuration file '%S' (Status 0x%08lx)\n", + NtosBootLoaders[Type].LoaderConfigurationFile, Status); + RtlFreeHeap(ProcessHeap, 0, BootStore); + return Status; + } + + BootStore->Header.ReadOnly = !(Access & BS_WriteAccess); + + if (IoStatusBlock.Information == FILE_CREATED || // with: FILE_CREATE, FILE_OVERWRITE_IF, FILE_OPEN_IF, FILE_SUPERSEDE + IoStatusBlock.Information == FILE_OVERWRITTEN || // with: FILE_OVERWRITE, FILE_OVERWRITE_IF + IoStatusBlock.Information == FILE_SUPERSEDED) // with: FILE_SUPERSEDE + { + /* + * The loader configuration INI file is (re)created + * fresh new, initialize its cache and its contents. + */ + BootStore->IniCache = IniCacheCreate(); + if (!BootStore->IniCache) { - DPRINT1("NtCreateFile() failed (Status 0x%08lx)\n", Status); - IniCacheDestroy(BootStore->IniCache); + DPRINT1("IniCacheCreate() failed\n"); + NtClose(BootStore->FileHandle); RtlFreeHeap(ProcessHeap, 0, BootStore); - return Status; + return STATUS_INSUFFICIENT_RESOURCES; } - /* Initialize the INI file contents */ if (Type == FreeLdr) CreateCommonFreeLdrSections(BootStore); } - else + else // if (IoStatusBlock.Information == FILE_OPENED) // with: FILE_OPEN, FILE_OPEN_IF { PINI_SECTION IniSection; /* - * Check whether the loader configuration INI file exists, - * and open it if so. - * TODO: FIXME: What if it doesn't exist yet??? + * The loader configuration INI file exists and is opened, + * map its file contents into memory. */ - Status = OpenAndMapFile(PartitionDirectoryHandle, - NtosBootLoaders[Type].LoaderConfigurationFile, - &BootStore->FileHandle, - &BootStore->FileSize, - &BootStore->SectionHandle, - &BootStore->ViewBase, - TRUE); +#if 0 + // FIXME: &BootStore->FileSize + Status = MapFile(BootStore->FileHandle, + &BootStore->SectionHandle, + &BootStore->ViewBase, + (Access & BS_WriteAccess)); if (!NT_SUCCESS(Status)) { - /* The loader configuration file does not exist */ - // FIXME: Consider it might be optional?? - DPRINT1("Loader configuration file '%S' does not exist (Status 0x%08lx)\n", + DPRINT1("Failed to map Loader configuration file '%S' (Status 0x%08lx)\n", NtosBootLoaders[Type].LoaderConfigurationFile, Status); + NtClose(BootStore->FileHandle); RtlFreeHeap(ProcessHeap, 0, BootStore); return Status; } +#else + BootStore->SectionHandle = UlongToPtr(1); // Workaround for CloseIniBootLoaderStore +#endif /* Open an *existing* INI configuration file */ - // Status = IniCacheLoad(&BootStore->IniCache, NtosBootLoaders[Type].LoaderConfigurationFile, FALSE); +#if 0 Status = IniCacheLoadFromMemory(&BootStore->IniCache, BootStore->ViewBase, BootStore->FileSize, FALSE); +#else + Status = IniCacheLoadByHandle(&BootStore->IniCache, BootStore->FileHandle, FALSE); +#endif if (!NT_SUCCESS(Status)) { DPRINT1("IniCacheLoadFromMemory() failed (Status 0x%08lx)\n", Status); - +#if 0 /* Finally, unmap and close the file */ UnMapAndCloseFile(BootStore->FileHandle, BootStore->SectionHandle, BootStore->ViewBase); - +#else + NtClose(BootStore->FileHandle); +#endif RtlFreeHeap(ProcessHeap, 0, BootStore); return Status; } @@ -394,9 +498,7 @@ OpenIniBootLoaderStore( */ /* Get or create the "FREELOADER" section */ - IniSection = IniGetSection(BootStore->IniCache, L"FREELOADER"); - if (!IniSection) - IniSection = IniAddSection(BootStore->IniCache, L"FREELOADER"); + IniSection = IniAddSection(BootStore->IniCache, L"FREELOADER"); if (!IniSection) DPRINT1("OpenIniBootLoaderStore: Failed to retrieve 'FREELOADER' section!\n"); @@ -407,9 +509,7 @@ OpenIniBootLoaderStore( */ /* Get or create the "Operating Systems" section */ - IniSection = IniGetSection(BootStore->IniCache, L"Operating Systems"); - if (!IniSection) - IniSection = IniAddSection(BootStore->IniCache, L"Operating Systems"); + IniSection = IniAddSection(BootStore->IniCache, L"Operating Systems"); if (!IniSection) DPRINT1("OpenIniBootLoaderStore: Failed to retrieve 'Operating Systems' section!\n"); @@ -485,15 +585,8 @@ OpenIniBootLoaderStore( * Cache the "Operating Systems" section for our future usage. */ - /* Get the "Operating Systems" section */ - IniSection = IniGetSection(BootStore->IniCache, L"operating systems"); -#if 0 - if (!IniSection) - { - /* It does not exist yet, so create it */ - IniSection = IniAddSection(BootStore->IniCache, L"operating systems"); - } -#endif + /* Get or create the "Operating Systems" section */ + IniSection = IniAddSection(BootStore->IniCache, L"operating systems"); if (!IniSection) DPRINT1("OpenIniBootLoaderStore: Failed to retrieve 'operating systems' section!\n"); @@ -505,71 +598,64 @@ OpenIniBootLoaderStore( return STATUS_SUCCESS; } +/** + * @brief + * Selectively changes the attributes of a file. + * + * @param[in] FileHandle + * Handle to an opened file for which to change its attributes. + * + * @param[in] MaskAttributes + * A mask specifying which attributes to change; any other attributes + * will be maintained as they are. If this parameter is zero, all of + * the attributes in *Attributes will be changed. + * + * @param[in,out] Attributes + * In input, specifies the new attributes to set. Attributes that + * are not set, but are specified in MaskAttributes, are removed. + * In output, receives the original attributes of the file. + * + * @return + * STATUS_SUCCESS if the attributes were successfully changed, + * or a failure code if an error happened. + **/ static NTSTATUS -UnprotectBootIni( - IN HANDLE FileHandle, - OUT PULONG Attributes) +ProtectFile( + _In_ HANDLE FileHandle, + _In_ ULONG MaskAttributes, + _Inout_ PULONG Attributes) { NTSTATUS Status; IO_STATUS_BLOCK IoStatusBlock; FILE_BASIC_INFORMATION FileInfo; + ULONG OldAttributes; + /* Retrieve the original file attributes */ Status = NtQueryInformationFile(FileHandle, &IoStatusBlock, &FileInfo, - sizeof(FILE_BASIC_INFORMATION), + sizeof(FileInfo), FileBasicInformation); if (!NT_SUCCESS(Status)) { DPRINT1("NtQueryInformationFile() failed (Status 0x%08lx)\n", Status); return Status; } + OldAttributes = FileInfo.FileAttributes; - *Attributes = FileInfo.FileAttributes; - - /* Delete attributes SYSTEM, HIDDEN and READONLY */ - FileInfo.FileAttributes = FileInfo.FileAttributes & - ~(FILE_ATTRIBUTE_SYSTEM | - FILE_ATTRIBUTE_HIDDEN | - FILE_ATTRIBUTE_READONLY); - - Status = NtSetInformationFile(FileHandle, - &IoStatusBlock, - &FileInfo, - sizeof(FILE_BASIC_INFORMATION), - FileBasicInformation); - if (!NT_SUCCESS(Status)) - DPRINT1("NtSetInformationFile() failed (Status 0x%08lx)\n", Status); - - return Status; -} - -static NTSTATUS -ProtectBootIni( - IN HANDLE FileHandle, - IN ULONG Attributes) -{ - NTSTATUS Status; - IO_STATUS_BLOCK IoStatusBlock; - FILE_BASIC_INFORMATION FileInfo; - - Status = NtQueryInformationFile(FileHandle, - &IoStatusBlock, - &FileInfo, - sizeof(FILE_BASIC_INFORMATION), - FileBasicInformation); - if (!NT_SUCCESS(Status)) - { - DPRINT1("NtQueryInformationFile() failed (Status 0x%08lx)\n", Status); - return Status; - } + /* Modify the attributes and return the old ones */ + if (MaskAttributes) + FileInfo.FileAttributes = (OldAttributes & ~MaskAttributes) | (*Attributes & MaskAttributes); + else + FileInfo.FileAttributes = *Attributes; - FileInfo.FileAttributes = FileInfo.FileAttributes | Attributes; + *Attributes = OldAttributes; + /* Set the new file attributes */ Status = NtSetInformationFile(FileHandle, &IoStatusBlock, &FileInfo, - sizeof(FILE_BASIC_INFORMATION), + sizeof(FileInfo), FileBasicInformation); if (!NT_SUCCESS(Status)) DPRINT1("NtSetInformationFile() failed (Status 0x%08lx)\n", Status); @@ -579,44 +665,45 @@ ProtectBootIni( static NTSTATUS CloseIniBootLoaderStore( - IN PVOID Handle) + _In_ PVOID Handle) { - NTSTATUS Status; + /* Set or remove SYSTEM, HIDDEN and READONLY attributes */ + static const ULONG ProtectAttribs = + (FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY); + PBOOT_STORE_INI_CONTEXT BootStore = (PBOOT_STORE_INI_CONTEXT)Handle; - ULONG FileAttribute = 0; + NTSTATUS Status = STATUS_SUCCESS; + ULONG FileAttribs; - // if (!BootStore) - // return STATUS_INVALID_PARAMETER; + ASSERT(BootStore); + /* If the INI file was opened in read-only mode, skip saving */ + if (BootStore->Header.ReadOnly) + goto Quit; + + /* If the INI file was already opened because it already existed, unprotect it */ if (BootStore->SectionHandle) { - /* - * The INI file was already opened because it already existed, - * thus (in the case of NTLDR's boot.ini), unprotect it. - */ - if (BootStore->Header.Type == NtLdr) + FileAttribs = 0; + Status = ProtectFile(BootStore->FileHandle, ProtectAttribs, &FileAttribs); + if (!NT_SUCCESS(Status)) { - Status = UnprotectBootIni(BootStore->FileHandle, &FileAttribute); - if (!NT_SUCCESS(Status)) - { - DPRINT1("Could not unprotect BOOT.INI ! (Status 0x%08lx)\n", Status); - goto Quit; - } + DPRINT1("Could not unprotect INI boot store (Status 0x%08lx)\n", Status); + goto Quit; } } IniCacheSaveByHandle(BootStore->IniCache, BootStore->FileHandle); - /* In the case of NTLDR's boot.ini, re-protect the INI file */ - if (BootStore->Header.Type == NtLdr) - { - FileAttribute |= (FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY); - Status = ProtectBootIni(BootStore->FileHandle, FileAttribute); - } + /* Re-protect the INI file */ + FileAttribs = ProtectAttribs; + /*Status =*/ ProtectFile(BootStore->FileHandle, ProtectAttribs, &FileAttribs); + Status = STATUS_SUCCESS; // Ignore the status and just succeed. Quit: IniCacheDestroy(BootStore->IniCache); +#if 0 if (BootStore->SectionHandle) { /* Finally, unmap and close the file */ @@ -625,6 +712,7 @@ CloseIniBootLoaderStore( BootStore->ViewBase); } else // if (BootStore->FileHandle) +#endif { /* Just close the file we have opened for creation */ NtClose(BootStore->FileHandle); @@ -632,18 +720,17 @@ CloseIniBootLoaderStore( /* Finally, free the boot store structure */ RtlFreeHeap(ProcessHeap, 0, BootStore); - - // TODO: Use a correct Status based on the return values of the previous functions... - return STATUS_SUCCESS; + return Status; } NTSTATUS OpenBootStoreByHandle( - OUT PVOID* Handle, - IN HANDLE PartitionDirectoryHandle, // OPTIONAL - IN BOOT_STORE_TYPE Type, - IN BOOLEAN CreateNew) + _Out_ PVOID* Handle, + _In_ HANDLE PartitionDirectoryHandle, // _In_opt_ + _In_ BOOT_STORE_TYPE Type, + _In_ BOOT_STORE_OPENMODE OpenMode, + _In_ BOOT_STORE_ACCESS Access) { /* * NOTE: Currently we open & map the loader configuration file without @@ -659,18 +746,34 @@ OpenBootStoreByHandle( return STATUS_NOT_SUPPORTED; } + /* + * Verify the access modes to perform the open actions. + * The operating system may allow e.g. file creation even with + * read-only access, but we do not allow this because we want + * to protect any existing boot store file in case the caller + * specified such an open mode. + */ + // if ((OpenMode == BS_CheckExisting) && !(Access & BS_ReadAccess)) + // return STATUS_ACCESS_DENIED; + if ((OpenMode == BS_CreateNew || OpenMode == BS_CreateAlways || OpenMode == BS_RecreateExisting) && !(Access & BS_WriteAccess)) + return STATUS_ACCESS_DENIED; + if ((OpenMode == BS_OpenExisting || OpenMode == BS_OpenAlways) && !(Access & BS_ReadWriteAccess)) + return STATUS_ACCESS_DENIED; + return NtosBootLoaders[Type].OpenBootStore(Handle, PartitionDirectoryHandle, Type, - CreateNew); + OpenMode, + Access); } NTSTATUS OpenBootStore_UStr( - OUT PVOID* Handle, - IN PUNICODE_STRING SystemPartitionPath, - IN BOOT_STORE_TYPE Type, - IN BOOLEAN CreateNew) + _Out_ PVOID* Handle, + _In_ PUNICODE_STRING SystemPartitionPath, + _In_ BOOT_STORE_TYPE Type, + _In_ BOOT_STORE_OPENMODE OpenMode, + _In_ BOOT_STORE_ACCESS Access) { NTSTATUS Status; OBJECT_ATTRIBUTES ObjectAttributes; @@ -705,11 +808,16 @@ OpenBootStore_UStr( FILE_SYNCHRONOUS_IO_NONALERT | FILE_DIRECTORY_FILE /* | FILE_OPEN_FOR_BACKUP_INTENT */); if (!NT_SUCCESS(Status)) { - DPRINT1("Failed to open SystemPartition '%wZ', Status 0x%08lx\n", SystemPartitionPath, Status); + DPRINT1("Failed to open SystemPartition '%wZ' (Status 0x%08lx)\n", + SystemPartitionPath, Status); return Status; } - Status = OpenBootStoreByHandle(Handle, PartitionDirectoryHandle, Type, CreateNew); + Status = OpenBootStoreByHandle(Handle, + PartitionDirectoryHandle, + Type, + OpenMode, + Access); /* Done! */ NtClose(PartitionDirectoryHandle); @@ -718,19 +826,24 @@ OpenBootStore_UStr( NTSTATUS OpenBootStore( - OUT PVOID* Handle, - IN PCWSTR SystemPartition, - IN BOOT_STORE_TYPE Type, - IN BOOLEAN CreateNew) + _Out_ PVOID* Handle, + _In_ PCWSTR SystemPartition, + _In_ BOOT_STORE_TYPE Type, + _In_ BOOT_STORE_OPENMODE OpenMode, + _In_ BOOT_STORE_ACCESS Access) { UNICODE_STRING SystemPartitionPath; RtlInitUnicodeString(&SystemPartitionPath, SystemPartition); - return OpenBootStore_UStr(Handle, &SystemPartitionPath, Type, CreateNew); + return OpenBootStore_UStr(Handle, + &SystemPartitionPath, + Type, + OpenMode, + Access); } NTSTATUS CloseBootStore( - IN PVOID Handle) + _In_ PVOID Handle) { PBOOT_STORE_CONTEXT BootStore = (PBOOT_STORE_CONTEXT)Handle; diff --git a/base/setup/lib/utils/bldrsup.h b/base/setup/lib/utils/bldrsup.h index b60624b2859..edefad6464c 100644 --- a/base/setup/lib/utils/bldrsup.h +++ b/base/setup/lib/utils/bldrsup.h @@ -129,30 +129,51 @@ FindBootStore( // By handle OUT PULONG VersionNumber OPTIONAL); +typedef enum _BOOT_STORE_OPENMODE +{ + BS_CheckExisting = 0, // See FindBootStore() + BS_CreateNew = 1, // BS_CreateOnly + BS_OpenExisting = 2, // BS_OpenOnly + BS_OpenAlways = 3, + BS_RecreateExisting = 4, // BS_RecreateOnly + BS_CreateAlways = 5, +} BOOT_STORE_OPENMODE; + +typedef enum _BOOT_STORE_ACCESS +{ + // BS_NoAccess = 0, + BS_ReadAccess = 1, + BS_WriteAccess = 2, + BS_ReadWriteAccess = (BS_ReadAccess | BS_WriteAccess) +} BOOT_STORE_ACCESS; + NTSTATUS OpenBootStoreByHandle( - OUT PVOID* Handle, - IN HANDLE PartitionDirectoryHandle, // OPTIONAL - IN BOOT_STORE_TYPE Type, - IN BOOLEAN CreateNew); + _Out_ PVOID* Handle, + _In_ HANDLE PartitionDirectoryHandle, // _In_opt_ + _In_ BOOT_STORE_TYPE Type, + _In_ BOOT_STORE_OPENMODE OpenMode, + _In_ BOOT_STORE_ACCESS Access); NTSTATUS OpenBootStore_UStr( - OUT PVOID* Handle, - IN PUNICODE_STRING SystemPartitionPath, - IN BOOT_STORE_TYPE Type, - IN BOOLEAN CreateNew); + _Out_ PVOID* Handle, + _In_ PUNICODE_STRING SystemPartitionPath, + _In_ BOOT_STORE_TYPE Type, + _In_ BOOT_STORE_OPENMODE OpenMode, + _In_ BOOT_STORE_ACCESS Access); NTSTATUS OpenBootStore( - OUT PVOID* Handle, - IN PCWSTR SystemPartition, - IN BOOT_STORE_TYPE Type, - IN BOOLEAN CreateNew); + _Out_ PVOID* Handle, + _In_ PCWSTR SystemPartition, + _In_ BOOT_STORE_TYPE Type, + _In_ BOOT_STORE_OPENMODE OpenMode, + _In_ BOOT_STORE_ACCESS Access); NTSTATUS CloseBootStore( - IN PVOID Handle); + _In_ PVOID Handle); NTSTATUS AddBootStoreEntry( diff --git a/base/setup/lib/utils/osdetect.c b/base/setup/lib/utils/osdetect.c index 0aceb33ab04..fdd4929b677 100644 --- a/base/setup/lib/utils/osdetect.c +++ b/base/setup/lib/utils/osdetect.c @@ -743,7 +743,8 @@ FindNTOSInstallations( DPRINT("Analyze the OS installations for loader type '%d' in disk #%d, partition #%d\n", Type, DiskNumber, PartitionNumber); - Status = OpenBootStoreByHandle(&BootStoreHandle, PartitionDirectoryHandle, Type, FALSE); + Status = OpenBootStoreByHandle(&BootStoreHandle, PartitionDirectoryHandle, Type, + BS_OpenExisting, BS_ReadAccess); if (!NT_SUCCESS(Status)) { DPRINT1("Could not open the NTOS boot store of type '%d' (Status 0x%08lx), continue with another one...\n", From cadfdc554d5aee5d934b8ea6694fe30b3da3578b Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 6 May 2024 21:18:11 +0300 Subject: [PATCH 109/182] [KMTEST] Fix x64 GCC build Yes this is a hack, until I am able to fix this properly. --- modules/rostests/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/rostests/CMakeLists.txt b/modules/rostests/CMakeLists.txt index e30252f5fe2..a5066959372 100644 --- a/modules/rostests/CMakeLists.txt +++ b/modules/rostests/CMakeLists.txt @@ -11,7 +11,9 @@ add_subdirectory(apitests) #add_subdirectory(dibtests) add_subdirectory(drivers) #add_subdirectory(dxtest) +if(MSVC OR NOT ARCH STREQUAL "amd64") # FIXME build is broken with new x64 PSEH add_subdirectory(kmtests) +endif() #add_subdirectory(regtests) add_subdirectory(rosautotest) add_subdirectory(tests) From e79c896592eb903556f16327ac906e205170aef7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maj=20Sokli=C4=8D?= Date: Mon, 6 May 2024 22:46:55 +0200 Subject: [PATCH 110/182] [REGEDIT] Early return FALSE in CreateNewKey() if pszKeyPath is NULL (#6840) This fixes unhandled exception when trying to create a new key in the root/"My computer". CORE-19567 --- base/applications/regedit/treeview.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/base/applications/regedit/treeview.c b/base/applications/regedit/treeview.c index 958aae6cdc7..a34155c4dc1 100644 --- a/base/applications/regedit/treeview.c +++ b/base/applications/regedit/treeview.c @@ -594,6 +594,8 @@ BOOL CreateNewKey(HWND hwndTV, HTREEITEM hItem) HTREEITEM hNewItem; pszKeyPath = GetItemPath(hwndTV, hItem, &hRootKey); + if (!pszKeyPath) + return bSuccess; if (pszKeyPath[0] == L'\0') hKey = hRootKey; else if (RegOpenKeyW(hRootKey, pszKeyPath, &hKey) != ERROR_SUCCESS) From d076146f4e2d4afab5c351e971dfb585d0f16897 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Tue, 7 May 2024 11:14:16 +0900 Subject: [PATCH 111/182] [NTGDI][FREETYPE] Check 'No transformation' for performance (#6850) Slight performance improvement. JIRA issue: CORE-15554 - Add bNoTransform variable. - Check whether mat is identity matrix. - If so, then don't do FT_Vector_Transform. --- win32ss/gdi/ntgdi/freetype.c | 39 +++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/win32ss/gdi/ntgdi/freetype.c b/win32ss/gdi/ntgdi/freetype.c index bf77b88b028..58209eded39 100644 --- a/win32ss/gdi/ntgdi/freetype.c +++ b/win32ss/gdi/ntgdi/freetype.c @@ -5814,7 +5814,8 @@ IntGetTextDisposition( IN INT Count, IN OPTIONAL LPINT Dx, IN OUT PFONT_CACHE_ENTRY Cache, - IN UINT fuOptions) + IN UINT fuOptions, + IN BOOL bNoTransform) { LONGLONG X64 = 0, Y64 = 0; INT i, glyph_index; @@ -5822,7 +5823,7 @@ IntGetTextDisposition( FT_Face face = Cache->Hashed.Face; BOOL use_kerning = FT_HAS_KERNING(face); ULONG previous = 0; - FT_Vector delta; + FT_Vector delta, vec; ASSERT_FREETYPE_LOCK_HELD(); @@ -5850,15 +5851,19 @@ IntGetTextDisposition( } else if (fuOptions & ETO_PDY) { - FT_Vector vec = { Dx[2 * i + 0] << 6, Dx[2 * i + 1] << 6 }; - FT_Vector_Transform(&vec, &Cache->Hashed.matTransform); + vec.x = (Dx[2 * i + 0] << 6); + vec.y = (Dx[2 * i + 1] << 6); + if (!bNoTransform) + FT_Vector_Transform(&vec, &Cache->Hashed.matTransform); X64 += vec.x; Y64 -= vec.y; } else { - FT_Vector vec = { Dx[i] << 6, 0 }; - FT_Vector_Transform(&vec, &Cache->Hashed.matTransform); + vec.x = (Dx[i] << 6); + vec.y = 0; + if (!bNoTransform) + FT_Vector_Transform(&vec, &Cache->Hashed.matTransform); X64 += vec.x; Y64 -= vec.y; } @@ -5989,11 +5994,12 @@ IntExtTextOutW( EXLATEOBJ exloRGB2Dst, exloDst2RGB; POINT Start; PMATRIX pmxWorldToDevice; - FT_Vector delta, vecAscent64, vecDescent64; + FT_Vector delta, vecAscent64, vecDescent64, vec; LOGFONTW *plf; BOOL use_kerning, bResult, DoBreak; FONT_CACHE_ENTRY Cache; FT_Matrix mat; + BOOL bNoTransform; /* Check if String is valid */ if (Count > 0xFFFF || (Count > 0 && String == NULL)) @@ -6120,6 +6126,10 @@ IntExtTextOutW( FT_Matrix_Multiply(&mat, &Cache.Hashed.matTransform); FT_Set_Transform(face, &Cache.Hashed.matTransform, NULL); + /* Is there no transformation? */ + bNoTransform = ((mat.xy == 0) && (mat.yx == 0) && + (mat.xx == (1 << 16)) && (mat.yy == (1 << 16))); + /* Calculate the ascent point and the descent point */ vecAscent64.x = 0; vecAscent64.y = (FontGDI->tmAscent << 6); @@ -6151,7 +6161,8 @@ IntExtTextOutW( /* Calculate the text width if necessary */ if ((fuOptions & ETO_OPAQUE) || (pdcattr->flTextAlign & (TA_CENTER | TA_RIGHT))) { - if (!IntGetTextDisposition(&DeltaX64, &DeltaY64, String, Count, Dx, &Cache, fuOptions)) + if (!IntGetTextDisposition(&DeltaX64, &DeltaY64, String, Count, Dx, &Cache, + fuOptions, bNoTransform)) { IntUnLockFreeType(); bResult = FALSE; @@ -6323,15 +6334,19 @@ IntExtTextOutW( } else if (fuOptions & ETO_PDY) { - FT_Vector vec = { Dx[2 * i + 0] << 6, Dx[2 * i + 1] << 6 }; - FT_Vector_Transform(&vec, &Cache.Hashed.matTransform); + vec.x = (Dx[2 * i + 0] << 6); + vec.y = (Dx[2 * i + 1] << 6); + if (!bNoTransform) + FT_Vector_Transform(&vec, &Cache.Hashed.matTransform); X64 += vec.x; Y64 -= vec.y; } else { - FT_Vector vec = { Dx[i] << 6, 0 }; - FT_Vector_Transform(&vec, &Cache.Hashed.matTransform); + vec.x = (Dx[i] << 6); + vec.y = 0; + if (!bNoTransform) + FT_Vector_Transform(&vec, &Cache.Hashed.matTransform); X64 += vec.x; Y64 -= vec.y; } From c0e31793c93b8cbb429dfc3612493f6ca5043927 Mon Sep 17 00:00:00 2001 From: Doug Lyons Date: Mon, 6 May 2024 21:59:01 -0500 Subject: [PATCH 112/182] [COMDLG32] Remove extra scrollbars in choose font dialog (#6834) * Revised comdlg32.dll's resource file for "Font" (CHOOSE_FONT DIALOG) "Style" combo box to * remove CBS_ENABLENOSCROLL flag. CORE-15945 --- dll/win32/comdlg32/lang/cdlg_Bg.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Ca.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Cs.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Da.rc | 2 +- dll/win32/comdlg32/lang/cdlg_De.rc | 2 +- dll/win32/comdlg32/lang/cdlg_El.rc | 2 +- dll/win32/comdlg32/lang/cdlg_En.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Eo.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Es.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Et.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Fi.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Fr.rc | 2 +- dll/win32/comdlg32/lang/cdlg_He.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Hi.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Hu.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Id.rc | 2 +- dll/win32/comdlg32/lang/cdlg_It.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Ja.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Ko.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Lt.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Nl.rc | 2 +- dll/win32/comdlg32/lang/cdlg_No.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Pl.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Pt.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Ro.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Ru.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Si.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Sk.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Sq.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Sr.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Sv.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Th.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Tr.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Uk.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Zh.rc | 4 ++-- 35 files changed, 36 insertions(+), 36 deletions(-) diff --git a/dll/win32/comdlg32/lang/cdlg_Bg.rc b/dll/win32/comdlg32/lang/cdlg_Bg.rc index ca8cd625d58..0c2ebe551f7 100644 --- a/dll/win32/comdlg32/lang/cdlg_Bg.rc +++ b/dll/win32/comdlg32/lang/cdlg_Bg.rc @@ -247,7 +247,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&Стил:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Размер:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Ca.rc b/dll/win32/comdlg32/lang/cdlg_Ca.rc index ef0239a2140..c81873ecbbe 100644 --- a/dll/win32/comdlg32/lang/cdlg_Ca.rc +++ b/dll/win32/comdlg32/lang/cdlg_Ca.rc @@ -247,7 +247,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&Estil del Tipus de Lletra:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&Mida:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Cs.rc b/dll/win32/comdlg32/lang/cdlg_Cs.rc index 6fd87456eed..d1c6fe6cd15 100644 --- a/dll/win32/comdlg32/lang/cdlg_Cs.rc +++ b/dll/win32/comdlg32/lang/cdlg_Cs.rc @@ -247,7 +247,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "St&yl:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Velikost",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Da.rc b/dll/win32/comdlg32/lang/cdlg_Da.rc index 959f38d23e3..fdd440f0ba4 100644 --- a/dll/win32/comdlg32/lang/cdlg_Da.rc +++ b/dll/win32/comdlg32/lang/cdlg_Da.rc @@ -247,7 +247,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&Typografi:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&Størrelse:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_De.rc b/dll/win32/comdlg32/lang/cdlg_De.rc index 59f57c187fd..1349b082ec1 100644 --- a/dll/win32/comdlg32/lang/cdlg_De.rc +++ b/dll/win32/comdlg32/lang/cdlg_De.rc @@ -247,7 +247,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Schrift&stil:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&Größe:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_El.rc b/dll/win32/comdlg32/lang/cdlg_El.rc index 7784bfab731..8e0a7ddcbe7 100644 --- a/dll/win32/comdlg32/lang/cdlg_El.rc +++ b/dll/win32/comdlg32/lang/cdlg_El.rc @@ -247,7 +247,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Στυλ ΓÏ&αμματοσειÏάς:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&Μέγεθος:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_En.rc b/dll/win32/comdlg32/lang/cdlg_En.rc index a906672ae64..f6a0a2cea1d 100644 --- a/dll/win32/comdlg32/lang/cdlg_En.rc +++ b/dll/win32/comdlg32/lang/cdlg_En.rc @@ -247,7 +247,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Font St&yle:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&Size:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Eo.rc b/dll/win32/comdlg32/lang/cdlg_Eo.rc index 3038ed63f95..bb16d1fc9ea 100644 --- a/dll/win32/comdlg32/lang/cdlg_Eo.rc +++ b/dll/win32/comdlg32/lang/cdlg_Eo.rc @@ -247,7 +247,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Tipara St&ilo:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&Dimensio:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Es.rc b/dll/win32/comdlg32/lang/cdlg_Es.rc index c006a5d14e3..91ca5241205 100644 --- a/dll/win32/comdlg32/lang/cdlg_Es.rc +++ b/dll/win32/comdlg32/lang/cdlg_Es.rc @@ -253,7 +253,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Est&ilo:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Tamaño:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Et.rc b/dll/win32/comdlg32/lang/cdlg_Et.rc index 651e2972dd5..cb1c2e61ed9 100644 --- a/dll/win32/comdlg32/lang/cdlg_Et.rc +++ b/dll/win32/comdlg32/lang/cdlg_Et.rc @@ -248,7 +248,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Fondi &stiil:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&Suurus:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Fi.rc b/dll/win32/comdlg32/lang/cdlg_Fi.rc index 3693591d14d..3e16fc29813 100644 --- a/dll/win32/comdlg32/lang/cdlg_Fi.rc +++ b/dll/win32/comdlg32/lang/cdlg_Fi.rc @@ -247,7 +247,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Fonttit&yyli:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Koko:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Fr.rc b/dll/win32/comdlg32/lang/cdlg_Fr.rc index aa5bf815e27..3d73a476367 100644 --- a/dll/win32/comdlg32/lang/cdlg_Fr.rc +++ b/dll/win32/comdlg32/lang/cdlg_Fr.rc @@ -247,7 +247,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "St&yle :",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "T&aille :",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_He.rc b/dll/win32/comdlg32/lang/cdlg_He.rc index 9d20216508b..48fc58749d1 100644 --- a/dll/win32/comdlg32/lang/cdlg_He.rc +++ b/dll/win32/comdlg32/lang/cdlg_He.rc @@ -247,7 +247,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&סגנון הגופן:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&גודל:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Hi.rc b/dll/win32/comdlg32/lang/cdlg_Hi.rc index c99318ac44d..d266122a505 100644 --- a/dll/win32/comdlg32/lang/cdlg_Hi.rc +++ b/dll/win32/comdlg32/lang/cdlg_Hi.rc @@ -233,7 +233,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "फ़ॉनà¥à¤Ÿ &शैली:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&साइज़:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Hu.rc b/dll/win32/comdlg32/lang/cdlg_Hu.rc index dfe759b218f..fec12fcabd9 100644 --- a/dll/win32/comdlg32/lang/cdlg_Hu.rc +++ b/dll/win32/comdlg32/lang/cdlg_Hu.rc @@ -247,7 +247,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Betű&stílus:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Méret:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Id.rc b/dll/win32/comdlg32/lang/cdlg_Id.rc index 347d0da0743..bbcf5e50172 100644 --- a/dll/win32/comdlg32/lang/cdlg_Id.rc +++ b/dll/win32/comdlg32/lang/cdlg_Id.rc @@ -248,7 +248,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Ga&ya Fon:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "U&kuran:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_It.rc b/dll/win32/comdlg32/lang/cdlg_It.rc index ce044444232..9d41d109690 100644 --- a/dll/win32/comdlg32/lang/cdlg_It.rc +++ b/dll/win32/comdlg32/lang/cdlg_It.rc @@ -247,7 +247,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&Stile:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Dimen&sione:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Ja.rc b/dll/win32/comdlg32/lang/cdlg_Ja.rc index ca0fc8ccaf0..9bef640cdda 100644 --- a/dll/win32/comdlg32/lang/cdlg_Ja.rc +++ b/dll/win32/comdlg32/lang/cdlg_Ja.rc @@ -247,7 +247,7 @@ FONT 9, "MS UI Gothic" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "スタイル(&Y):",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "サイズ(&S):",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Ko.rc b/dll/win32/comdlg32/lang/cdlg_Ko.rc index 089794d0734..6559e3bb3a5 100644 --- a/dll/win32/comdlg32/lang/cdlg_Ko.rc +++ b/dll/win32/comdlg32/lang/cdlg_Ko.rc @@ -247,7 +247,7 @@ FONT 9, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "글꼴 스타ì¼(&Y):",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "í¬ê¸°(&S):",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Lt.rc b/dll/win32/comdlg32/lang/cdlg_Lt.rc index b2d4c1b87ed..87cb5755c5c 100644 --- a/dll/win32/comdlg32/lang/cdlg_Lt.rc +++ b/dll/win32/comdlg32/lang/cdlg_Lt.rc @@ -247,7 +247,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Å rifto &stilius:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&Dydis:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Nl.rc b/dll/win32/comdlg32/lang/cdlg_Nl.rc index d746a540b02..ac99d179224 100644 --- a/dll/win32/comdlg32/lang/cdlg_Nl.rc +++ b/dll/win32/comdlg32/lang/cdlg_Nl.rc @@ -246,7 +246,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Teken&stijl:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Tekstgrootte:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_No.rc b/dll/win32/comdlg32/lang/cdlg_No.rc index 071de101386..281b160b053 100644 --- a/dll/win32/comdlg32/lang/cdlg_No.rc +++ b/dll/win32/comdlg32/lang/cdlg_No.rc @@ -247,7 +247,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Skriftst&il:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Størrelse:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Pl.rc b/dll/win32/comdlg32/lang/cdlg_Pl.rc index 1fd1d3ed7bd..eeb5ce80fe4 100644 --- a/dll/win32/comdlg32/lang/cdlg_Pl.rc +++ b/dll/win32/comdlg32/lang/cdlg_Pl.rc @@ -248,7 +248,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 7,16,98,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&Styl:",stc2 ,110,7,44,9 - COMBOBOX cmb2,110,16,101,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,110,16,101,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Rozmiar:",stc3,216,7,30,9 COMBOBOX cmb3,217,16,36,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Pt.rc b/dll/win32/comdlg32/lang/cdlg_Pt.rc index e148b6fec27..a3cb4c68859 100644 --- a/dll/win32/comdlg32/lang/cdlg_Pt.rc +++ b/dll/win32/comdlg32/lang/cdlg_Pt.rc @@ -241,7 +241,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6, 13, 94, 76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&Estilo do tipo de letra:", stc2, 108, 3, 60, 9 - COMBOBOX cmb2, 108, 13, 64, 76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2, 108, 13, 64, 76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&Tamanho:", stc3, 179, 3, 32, 9 COMBOBOX cmb3, 179, 13, 32, 76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Ro.rc b/dll/win32/comdlg32/lang/cdlg_Ro.rc index f8a0c0cceae..27d48de92df 100644 --- a/dll/win32/comdlg32/lang/cdlg_Ro.rc +++ b/dll/win32/comdlg32/lang/cdlg_Ro.rc @@ -250,7 +250,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Stil f&ont:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&Dimensiune:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Ru.rc b/dll/win32/comdlg32/lang/cdlg_Ru.rc index 00966b73503..09d7cc7d081 100644 --- a/dll/win32/comdlg32/lang/cdlg_Ru.rc +++ b/dll/win32/comdlg32/lang/cdlg_Ru.rc @@ -247,7 +247,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&Ðачертание:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Размер:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Si.rc b/dll/win32/comdlg32/lang/cdlg_Si.rc index d2505f70355..fdd8e0a5be4 100644 --- a/dll/win32/comdlg32/lang/cdlg_Si.rc +++ b/dll/win32/comdlg32/lang/cdlg_Si.rc @@ -247,7 +247,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Slog pi&save:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&Velikost:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Sk.rc b/dll/win32/comdlg32/lang/cdlg_Sk.rc index c18ea80b67a..541b3e59e47 100644 --- a/dll/win32/comdlg32/lang/cdlg_Sk.rc +++ b/dll/win32/comdlg32/lang/cdlg_Sk.rc @@ -247,7 +247,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Å &týl písma:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&VeľkosÅ¥:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Sq.rc b/dll/win32/comdlg32/lang/cdlg_Sq.rc index 834d29ec00e..04a794579b9 100644 --- a/dll/win32/comdlg32/lang/cdlg_Sq.rc +++ b/dll/win32/comdlg32/lang/cdlg_Sq.rc @@ -248,7 +248,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Font Stili:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Masa:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Sr.rc b/dll/win32/comdlg32/lang/cdlg_Sr.rc index 8d6c3229d2d..2055f811502 100644 --- a/dll/win32/comdlg32/lang/cdlg_Sr.rc +++ b/dll/win32/comdlg32/lang/cdlg_Sr.rc @@ -247,7 +247,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Font St&yle:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&VeliÄina:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Sv.rc b/dll/win32/comdlg32/lang/cdlg_Sv.rc index 4f40beb6281..74d697dc326 100644 --- a/dll/win32/comdlg32/lang/cdlg_Sv.rc +++ b/dll/win32/comdlg32/lang/cdlg_Sv.rc @@ -246,7 +246,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Typsnittss&til:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&Storlek:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Th.rc b/dll/win32/comdlg32/lang/cdlg_Th.rc index 0d0ebde45dc..a6d3095c0f9 100644 --- a/dll/win32/comdlg32/lang/cdlg_Th.rc +++ b/dll/win32/comdlg32/lang/cdlg_Th.rc @@ -246,7 +246,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "รูปà¹à¸šà¸šà¸•à¹‰à¸§à¸­à¸±à¸à¸©à¸£:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "ขนาด:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Tr.rc b/dll/win32/comdlg32/lang/cdlg_Tr.rc index e256a4a2bd4..8a9392b6925 100644 --- a/dll/win32/comdlg32/lang/cdlg_Tr.rc +++ b/dll/win32/comdlg32/lang/cdlg_Tr.rc @@ -246,7 +246,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Yaz&ı Tipi:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&Büyüklük:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Uk.rc b/dll/win32/comdlg32/lang/cdlg_Uk.rc index b7a975c3749..3fa698d2527 100644 --- a/dll/win32/comdlg32/lang/cdlg_Uk.rc +++ b/dll/win32/comdlg32/lang/cdlg_Uk.rc @@ -247,7 +247,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&Стиль:",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&Розмір:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | diff --git a/dll/win32/comdlg32/lang/cdlg_Zh.rc b/dll/win32/comdlg32/lang/cdlg_Zh.rc index 10024633655..7fe404f0c24 100644 --- a/dll/win32/comdlg32/lang/cdlg_Zh.rc +++ b/dll/win32/comdlg32/lang/cdlg_Zh.rc @@ -251,7 +251,7 @@ FONT 9, "宋体" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "字体样å¼(&Y):",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "大å°(&S):",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | @@ -753,7 +753,7 @@ FONT 9, "新細明體" COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "字型樣å¼(&Y):",stc2 ,108,3,60,9 - COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + COMBOBOX cmb2,108,13,64,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "大å°(&S):",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | From 5a287473fd7fd67a3b1432a105500e4e4805c6e7 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Tue, 7 May 2024 15:24:34 +0900 Subject: [PATCH 113/182] [NTGDI][FREETYPE] Initial support of Surrogate Pairs and emojis (#6851) Support emoji characters and minor characters. JIRA issue: CORE-19030 NOTE: Not every emoji is supported yet (No ZWJ support). Surrogate pairs only. NOTE: This feature only works if the appropriate font is selected. - Add IS_HIGH_SURROGATE and IS_LOW_SURROGATE macros. - Add Utf32FromSurrogatePair helper function to convert a surrogate pair to a UTF-32 code point. - Convert the surrogate pairs in the text in TextIntGetTextExtentPoint, IntGetTextDisposition, and IntExtTextOutW functions. --- win32ss/gdi/ntgdi/freetype.c | 65 ++++++++++++++++++++++++++++++++---- 1 file changed, 58 insertions(+), 7 deletions(-) diff --git a/win32ss/gdi/ntgdi/freetype.c b/win32ss/gdi/ntgdi/freetype.c index 58209eded39..b7911d3cc57 100644 --- a/win32ss/gdi/ntgdi/freetype.c +++ b/win32ss/gdi/ntgdi/freetype.c @@ -35,6 +35,21 @@ #define NDEBUG #include +/* The ranges of the surrogate pairs */ +#define HIGH_SURROGATE_MIN 0xD800U +#define HIGH_SURROGATE_MAX 0xDBFFU +#define LOW_SURROGATE_MIN 0xDC00U +#define LOW_SURROGATE_MAX 0xDFFFU + +#define IS_HIGH_SURROGATE(ch0) (HIGH_SURROGATE_MIN <= (ch0) && (ch0) <= HIGH_SURROGATE_MAX) +#define IS_LOW_SURROGATE(ch1) (LOW_SURROGATE_MIN <= (ch1) && (ch1) <= LOW_SURROGATE_MAX) + +static inline DWORD +Utf32FromSurrogatePair(DWORD ch0, DWORD ch1) +{ + return ((ch0 - HIGH_SURROGATE_MIN) << 10) + (ch1 - LOW_SURROGATE_MIN) + 0x10000; +} + /* TPMF_FIXED_PITCH is confusing; brain-dead api */ #ifndef _TMPF_VARIABLE_PITCH #define _TMPF_VARIABLE_PITCH TMPF_FIXED_PITCH @@ -4215,6 +4230,7 @@ TextIntGetTextExtentPoint(PDC dc, BOOL use_kerning, bVerticalWriting; LONG ascender, descender; FONT_CACHE_ENTRY Cache; + DWORD ch0, ch1; FontGDI = ObjToGDI(TextObj->Font, FONT); @@ -4250,7 +4266,19 @@ TextIntGetTextExtentPoint(PDC dc, for (i = 0; i < Count; i++) { - glyph_index = get_glyph_index_flagged(Cache.Hashed.Face, *String, GTEF_INDICES, fl); + ch0 = *String++; + if (IS_HIGH_SURROGATE(ch0)) + { + ++i; + if (i >= Count) + break; + + ch1 = *String++; + if (IS_LOW_SURROGATE(ch1)) + ch0 = Utf32FromSurrogatePair(ch0, ch1); + } + + glyph_index = get_glyph_index_flagged(Cache.Hashed.Face, ch0, GTEF_INDICES, fl); Cache.Hashed.GlyphIndex = glyph_index; realglyph = IntGetRealGlyph(&Cache); @@ -4277,7 +4305,6 @@ TextIntGetTextExtentPoint(PDC dc, } previous = glyph_index; - String++; } ASSERT(FontGDI->Magic == FONTGDI_MAGIC); ascender = FontGDI->tmAscent; /* Units above baseline */ @@ -5824,12 +5851,25 @@ IntGetTextDisposition( BOOL use_kerning = FT_HAS_KERNING(face); ULONG previous = 0; FT_Vector delta, vec; + DWORD ch0, ch1; ASSERT_FREETYPE_LOCK_HELD(); for (i = 0; i < Count; ++i) { - glyph_index = get_glyph_index_flagged(face, *String++, ETO_GLYPH_INDEX, fuOptions); + ch0 = *String++; + if (IS_HIGH_SURROGATE(ch0)) + { + ++i; + if (i >= Count) + return TRUE; + + ch1 = *String++; + if (IS_LOW_SURROGATE(ch1)) + ch0 = Utf32FromSurrogatePair(ch0, ch1); + } + + glyph_index = get_glyph_index_flagged(face, ch0, ETO_GLYPH_INDEX, fuOptions); Cache->Hashed.GlyphIndex = glyph_index; realglyph = IntGetRealGlyph(Cache); @@ -6000,6 +6040,7 @@ IntExtTextOutW( FONT_CACHE_ENTRY Cache; FT_Matrix mat; BOOL bNoTransform; + DWORD ch0, ch1; /* Check if String is valid */ if (Count > 0xFFFF || (Count > 0 && String == NULL)) @@ -6212,9 +6253,6 @@ IntExtTextOutW( EXLATEOBJ_vInitialize(&exloRGB2Dst, &gpalRGB, psurf->ppal, 0, 0, 0); EXLATEOBJ_vInitialize(&exloDst2RGB, psurf->ppal, &gpalRGB, 0, 0, 0); - /* Assume success */ - bResult = TRUE; - if (pdcattr->ulDirty_ & DIRTY_TEXT) DC_vUpdateTextBrush(dc); @@ -6225,9 +6263,22 @@ IntExtTextOutW( Y64 = RealYStart64; previous = 0; DoBreak = FALSE; + bResult = TRUE; /* Assume success */ for (i = 0; i < Count; ++i) { - glyph_index = get_glyph_index_flagged(face, *String++, ETO_GLYPH_INDEX, fuOptions); + ch0 = *String++; + if (IS_HIGH_SURROGATE(ch0)) + { + ++i; + if (i >= Count) + break; + + ch1 = *String++; + if (IS_LOW_SURROGATE(ch1)) + ch0 = Utf32FromSurrogatePair(ch0, ch1); + } + + glyph_index = get_glyph_index_flagged(face, ch0, ETO_GLYPH_INDEX, fuOptions); Cache.Hashed.GlyphIndex = glyph_index; realglyph = IntGetRealGlyph(&Cache); From 2b43390d0471c6eb8661c1d281d82bf956173d04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Tue, 23 Apr 2024 17:02:06 +0200 Subject: [PATCH 114/182] [SETUPLIB] Use new BootPath value for BootSector boot entries (#6815) The BootDrive and BootPartition values are deprecated, and support for them will soon be removed from FreeLoader. Add an helper function to migrate these values during ReactOS (re)installation / update. --- base/setup/lib/bootsup.c | 164 +++++++++++++++---------- base/setup/lib/utils/bldrsup.c | 211 ++++++++++++++++++++++++++++----- base/setup/lib/utils/bldrsup.h | 11 +- 3 files changed, 292 insertions(+), 94 deletions(-) diff --git a/base/setup/lib/bootsup.c b/base/setup/lib/bootsup.c index f02fd571f3c..313c006b93f 100644 --- a/base/setup/lib/bootsup.c +++ b/base/setup/lib/bootsup.c @@ -189,15 +189,80 @@ CreateFreeLoaderIniForReactOSAndBootSector( IN PCWSTR ArcPath, IN PCWSTR Section, IN PCWSTR Description, - IN PCWSTR BootDrive, - IN PCWSTR BootPartition, + IN PCWSTR BootPath, IN PCWSTR BootSector) { NTSTATUS Status; PVOID BootStoreHandle; - UCHAR xxBootEntry[FIELD_OFFSET(BOOT_STORE_ENTRY, OsOptions) + sizeof(BOOT_SECTOR_OPTIONS)]; + UCHAR xxBootEntry[FIELD_OFFSET(BOOT_STORE_ENTRY, OsOptions) + sizeof(BOOTSECTOR_OPTIONS)]; PBOOT_STORE_ENTRY BootEntry = (PBOOT_STORE_ENTRY)&xxBootEntry; - PBOOT_SECTOR_OPTIONS Options = (PBOOT_SECTOR_OPTIONS)&BootEntry->OsOptions; + PBOOTSECTOR_OPTIONS Options = (PBOOTSECTOR_OPTIONS)&BootEntry->OsOptions; + WCHAR BootPathBuffer[MAX_PATH] = L""; + + /* Since the BootPath given here is in NT format + * (not ARC), we need to hack-generate a mapping */ + ULONG DiskNumber = 0, PartitionNumber = 0; + PCWSTR PathComponent = NULL; + + /* From the NT path, compute the disk, partition and path components */ + // NOTE: this function doesn't support stuff like \Device\FloppyX ... + if (NtPathToDiskPartComponents(BootPath, &DiskNumber, &PartitionNumber, &PathComponent)) + { + DPRINT1("BootPath = '%S' points to disk #%d, partition #%d, path '%S'\n", + BootPath, DiskNumber, PartitionNumber, PathComponent); + + /* HACK-build a possible ARC path: + * Hard disk path: multi(0)disk(0)rdisk(x)partition(y)[\path] */ + RtlStringCchPrintfW(BootPathBuffer, _countof(BootPathBuffer), + L"multi(0)disk(0)rdisk(%lu)partition(%lu)", + DiskNumber, PartitionNumber); + if (PathComponent && *PathComponent && + (PathComponent[0] != L'\\' || PathComponent[1])) + { + RtlStringCchCatW(BootPathBuffer, _countof(BootPathBuffer), + PathComponent); + } + } + else + { + PCWSTR Path = BootPath; + + if ((_wcsnicmp(Path, L"\\Device\\Floppy", 14) == 0) && + (Path += 14) && iswdigit(*Path)) + { + DiskNumber = wcstoul(Path, (PWSTR*)&PathComponent, 10); + if (PathComponent && *PathComponent && *PathComponent != L'\\') + PathComponent = NULL; + + /* HACK-build a possible ARC path: + * Floppy disk path: multi(0)disk(0)fdisk(x)[\path] */ + RtlStringCchPrintfW(BootPathBuffer, _countof(BootPathBuffer), + L"multi(0)disk(0)fdisk(%lu)", DiskNumber); + if (PathComponent && *PathComponent && + (PathComponent[0] != L'\\' || PathComponent[1])) + { + RtlStringCchCatW(BootPathBuffer, _countof(BootPathBuffer), + PathComponent); + } + } + else + { + /* HACK: Just keep the unresolved NT path and hope for the best... */ + + /* Remove any trailing backslash if needed */ + UNICODE_STRING RootPartition; + RtlInitUnicodeString(&RootPartition, BootPath); + TrimTrailingPathSeparators_UStr(&RootPartition); + + /* RootPartition is BootPath without counting any trailing + * path separator. Because of this, we need to copy the string + * in the buffer, instead of just using a pointer to it. */ + RtlStringCchPrintfW(BootPathBuffer, _countof(BootPathBuffer), + L"%wZ", &RootPartition); + + DPRINT1("Unhandled NT path '%S'\n", BootPath); + } + } /* Initialize the INI file and create the common FreeLdr sections */ Status = OpenBootStore(&BootStoreHandle, IniPath, FreeLdr, @@ -211,14 +276,13 @@ CreateFreeLoaderIniForReactOSAndBootSector( BootEntry->Version = FreeLdr; BootEntry->BootFilePath = NULL; - BootEntry->OsOptionsLength = sizeof(BOOT_SECTOR_OPTIONS); + BootEntry->OsOptionsLength = sizeof(BOOTSECTOR_OPTIONS); RtlCopyMemory(Options->Signature, - BOOT_SECTOR_OPTIONS_SIGNATURE, - RTL_FIELD_SIZE(BOOT_SECTOR_OPTIONS, Signature)); + BOOTSECTOR_OPTIONS_SIGNATURE, + RTL_FIELD_SIZE(BOOTSECTOR_OPTIONS, Signature)); - Options->Drive = BootDrive; - Options->Partition = BootPartition; - Options->BootSectorFileName = BootSector; + Options->BootPath = BootPathBuffer; + Options->FileName = BootSector; // BootEntry->BootEntryKey = MAKESTRKEY(Section); BootEntry->FriendlyName = Description; @@ -933,8 +997,6 @@ InstallFatBootcodeToPartition( PCWSTR Section; PCWSTR Description; - PCWSTR BootDrive; - PCWSTR BootPartition; PCWSTR BootSector; /* Search for COMPAQ MS-DOS 1.x (1.11, 1.12, based on MS-DOS 1.25) boot loader */ @@ -943,11 +1005,9 @@ InstallFatBootcodeToPartition( { DPRINT1("Found COMPAQ MS-DOS 1.x (1.11, 1.12) / MS-DOS 1.25 boot loader\n"); - Section = L"CPQDOS"; - Description = L"\"COMPAQ MS-DOS 1.x / MS-DOS 1.25\""; - BootDrive = L"hd0"; - BootPartition = L"1"; - BootSector = L"BOOTSECT.DOS"; + Section = L"CPQDOS"; + Description = L"\"COMPAQ MS-DOS 1.x / MS-DOS 1.25\""; + BootSector = L"BOOTSECT.DOS"; } else /* Search for Microsoft DOS or Windows 9x boot loader */ @@ -957,11 +1017,9 @@ InstallFatBootcodeToPartition( { DPRINT1("Found Microsoft DOS or Windows 9x boot loader\n"); - Section = L"MSDOS"; - Description = L"\"MS-DOS/Windows\""; - BootDrive = L"hd0"; - BootPartition = L"1"; - BootSector = L"BOOTSECT.DOS"; + Section = L"MSDOS"; + Description = L"\"MS-DOS/Windows\""; + BootSector = L"BOOTSECT.DOS"; } else /* Search for IBM PC-DOS or DR-DOS 5.x boot loader */ @@ -971,11 +1029,9 @@ InstallFatBootcodeToPartition( { DPRINT1("Found IBM PC-DOS or DR-DOS 5.x or IBM OS/2 1.0\n"); - Section = L"IBMDOS"; - Description = L"\"IBM PC-DOS or DR-DOS 5.x or IBM OS/2 1.0\""; - BootDrive = L"hd0"; - BootPartition = L"1"; - BootSector = L"BOOTSECT.DOS"; + Section = L"IBMDOS"; + Description = L"\"IBM PC-DOS or DR-DOS 5.x or IBM OS/2 1.0\""; + BootSector = L"BOOTSECT.DOS"; } else /* Search for DR-DOS 3.x boot loader */ @@ -984,11 +1040,9 @@ InstallFatBootcodeToPartition( { DPRINT1("Found DR-DOS 3.x\n"); - Section = L"DRDOS"; - Description = L"\"DR-DOS 3.x\""; - BootDrive = L"hd0"; - BootPartition = L"1"; - BootSector = L"BOOTSECT.DOS"; + Section = L"DRDOS"; + Description = L"\"DR-DOS 3.x\""; + BootSector = L"BOOTSECT.DOS"; } else /* Search for Dell Real-Mode Kernel (DRMK) OS */ @@ -997,11 +1051,9 @@ InstallFatBootcodeToPartition( { DPRINT1("Found Dell Real-Mode Kernel OS\n"); - Section = L"DRMK"; - Description = L"\"Dell Real-Mode Kernel OS\""; - BootDrive = L"hd0"; - BootPartition = L"1"; - BootSector = L"BOOTSECT.DOS"; + Section = L"DRMK"; + Description = L"\"Dell Real-Mode Kernel OS\""; + BootSector = L"BOOTSECT.DOS"; } else /* Search for MS OS/2 1.x */ @@ -1011,11 +1063,9 @@ InstallFatBootcodeToPartition( { DPRINT1("Found MS OS/2 1.x\n"); - Section = L"MSOS2"; - Description = L"\"MS OS/2 1.x\""; - BootDrive = L"hd0"; - BootPartition = L"1"; - BootSector = L"BOOTSECT.OS2"; + Section = L"MSOS2"; + Description = L"\"MS OS/2 1.x\""; + BootSector = L"BOOTSECT.OS2"; } else /* Search for MS or IBM OS/2 */ @@ -1025,11 +1075,9 @@ InstallFatBootcodeToPartition( { DPRINT1("Found MS/IBM OS/2\n"); - Section = L"IBMOS2"; - Description = L"\"MS/IBM OS/2\""; - BootDrive = L"hd0"; - BootPartition = L"1"; - BootSector = L"BOOTSECT.OS2"; + Section = L"IBMOS2"; + Description = L"\"MS/IBM OS/2\""; + BootSector = L"BOOTSECT.OS2"; } else /* Search for FreeDOS boot loader */ @@ -1037,22 +1085,18 @@ InstallFatBootcodeToPartition( { DPRINT1("Found FreeDOS boot loader\n"); - Section = L"FDOS"; - Description = L"\"FreeDOS\""; - BootDrive = L"hd0"; - BootPartition = L"1"; - BootSector = L"BOOTSECT.DOS"; + Section = L"FDOS"; + Description = L"\"FreeDOS\""; + BootSector = L"BOOTSECT.DOS"; } else { /* No or unknown boot loader */ DPRINT1("No or unknown boot loader found\n"); - Section = L"Unknown"; - Description = L"\"Unknown Operating System\""; - BootDrive = L"hd0"; - BootPartition = L"1"; - BootSector = L"BOOTSECT.OLD"; + Section = L"Unknown"; + Description = L"\"Unknown Operating System\""; + BootSector = L"BOOTSECT.OLD"; } /* Create or update 'freeldr.ini' */ @@ -1066,7 +1110,7 @@ InstallFatBootcodeToPartition( Status = CreateFreeLoaderIniForReactOSAndBootSector( SystemRootPath->Buffer, DestinationArcPath->Buffer, Section, Description, - BootDrive, BootPartition, BootSector); + SystemRootPath->Buffer, BootSector); if (!NT_SUCCESS(Status)) { DPRINT1("CreateFreeLoaderIniForReactOSAndBootSector() failed (Status %lx)\n", Status); @@ -1187,7 +1231,7 @@ InstallBtrfsBootcodeToPartition( Status = CreateFreeLoaderIniForReactOSAndBootSector( SystemRootPath->Buffer, DestinationArcPath->Buffer, L"Linux", L"\"Linux\"", - L"hd0", L"1", BootSector); + SystemRootPath->Buffer, BootSector); if (!NT_SUCCESS(Status)) { DPRINT1("CreateFreeLoaderIniForReactOSAndBootSector() failed (Status %lx)\n", Status); @@ -1288,7 +1332,7 @@ InstallNtfsBootcodeToPartition( Status = CreateFreeLoaderIniForReactOSAndBootSector( SystemRootPath->Buffer, DestinationArcPath->Buffer, L"Linux", L"\"Linux\"", - L"hd0", L"1", BootSector); + SystemRootPath->Buffer, BootSector); if (!NT_SUCCESS(Status)) { DPRINT1("CreateFreeLoaderIniForReactOSAndBootSector() failed (Status %lx)\n", Status); diff --git a/base/setup/lib/utils/bldrsup.c b/base/setup/lib/utils/bldrsup.c index 966da4afea9..af3acfd042c 100644 --- a/base/setup/lib/utils/bldrsup.c +++ b/base/setup/lib/utils/bldrsup.c @@ -211,6 +211,163 @@ FindBootStore( // By handle } +// +// TEMPORARY functions to migrate the DEPRECATED BootDrive and BootPartition +// values of BootSector boot entries in FREELDR.INI to the newer BootPath value. +// +// REMOVE THEM once they won't be necessary anymore, +// after the removal of their support in FreeLoader! +// +static VOID +FreeLdrMigrateBootDrivePartWorker( + _In_ PINI_SECTION OsIniSection) +{ + PCWSTR KeyData; + PINI_KEYWORD OldKey; + + /* + * Check whether we have a "BootPath" value (takes precedence + * over both "BootDrive" and "BootPartition"). + */ + if (IniGetKey(OsIniSection, L"BootPath", &KeyData) && KeyData && *KeyData) + { + /* We already have a BootPath value, do nothing more */ + return; + } + + /* We don't have one: retrieve the BIOS drive and + * partition and convert them to a valid ARC path */ + + /* Retrieve the boot drive */ + OldKey = IniGetKey(OsIniSection, L"BootDrive", &KeyData); + if (OldKey) + { + PCWSTR OldDrive = KeyData; + ULONG DriveNumber = 0; + ULONG PartitionNumber = 0; + UCHAR DriveType = 0; + WCHAR BufferBootPath[80]; // 80 chars is enough for "multi(0)disk(0)rdisk(x)partition(y)", with (x,y) == MAXULONG + + /* If a number string is given, then just + * convert it to decimal (BIOS HW only) */ + PCWCH p = KeyData; + if (p[0] >= L'0' && p[0] <= L'9') + { + DriveNumber = wcstoul(p, (PWCHAR*)&p, 0); + if (DriveNumber >= 0x80) + { + /* It's quite probably a hard disk */ + DriveNumber -= 0x80; + DriveType = L'h'; + } + else + { + /* It's quite probably a floppy */ + DriveType = L'f'; + } + } + else if (p[0] && towlower(p[1]) == L'd') + { + /* Convert the drive number string into a number: 'hd1' = 1 */ + DriveType = tolower(p[0]); + DriveNumber = _wtoi(&p[2]); + } + + /* Retrieve the boot partition (optional, fall back to zero otherwise) */ + if (IniGetKey(OsIniSection, L"BootPartition", &KeyData)) + PartitionNumber = _wtoi(KeyData); + + if (DriveType == L'f') + { + /* Floppy disk path: multi(0)disk(0)fdisk(x) */ + RtlStringCchPrintfW(BufferBootPath, _countof(BufferBootPath), + L"multi(0)disk(0)fdisk(%lu)", DriveNumber); + } + else if (DriveType == L'h') + { + /* Hard disk path: multi(0)disk(0)rdisk(x)partition(y) */ + RtlStringCchPrintfW(BufferBootPath, _countof(BufferBootPath), + L"multi(0)disk(0)rdisk(%lu)partition(%lu)", + DriveNumber, PartitionNumber); + } + else if (DriveType == L'c') + { + /* CD-ROM disk path: multi(0)disk(0)cdrom(x) */ + RtlStringCchPrintfW(BufferBootPath, _countof(BufferBootPath), + L"multi(0)disk(0)cdrom(%lu)", DriveNumber); + } + else + { + /* This case should rarely happen, if ever */ + DPRINT1("Unrecognized BootDrive type '%C'\n", DriveType ? DriveType : L'?'); + + /* Build the boot path in the form: hdX,Y */ + RtlStringCchCopyW(BufferBootPath, _countof(BufferBootPath), OldDrive); + if (KeyData && *KeyData) + { + RtlStringCchCatW(BufferBootPath, _countof(BufferBootPath), L","); + RtlStringCchCatW(BufferBootPath, _countof(BufferBootPath), KeyData); + } + } + + /* Add the new BootPath value */ + IniInsertKey(OsIniSection, OldKey, INSERT_BEFORE, L"BootPath", BufferBootPath); + } + + /* Delete the deprecated BootDrive and BootPartition values */ + IniRemoveKeyByName(OsIniSection, L"BootDrive"); + IniRemoveKeyByName(OsIniSection, L"BootPartition"); +} + +static VOID +FreeLdrMigrateBootDrivePart( + _In_ PBOOT_STORE_INI_CONTEXT BootStore) +{ + PINICACHEITERATOR Iterator; + PINI_SECTION OsIniSection; + PCWSTR SectionName, KeyData; + + /* Enumerate all the valid entries in the "Operating Systems" section */ + Iterator = IniFindFirstValue(BootStore->OsIniSection, &SectionName, &KeyData); + if (!Iterator) return; + do + { + /* Search for an existing boot entry section */ + OsIniSection = IniGetSection(BootStore->IniCache, SectionName); + if (!OsIniSection) + continue; + + /* Check for boot type to migrate */ + if (!IniGetKey(OsIniSection, L"BootType", &KeyData) || !KeyData) + { + /* Certainly not a ReactOS installation */ + DPRINT1("No BootType value present\n"); + continue; + } + if ((_wcsicmp(KeyData, L"Drive") == 0) || + (_wcsicmp(KeyData, L"\"Drive\"") == 0) || + (_wcsicmp(KeyData, L"Partition") == 0) || + (_wcsicmp(KeyData, L"\"Partition\"") == 0)) + { + /* Modify the BootPath value */ + IniAddKey(OsIniSection, L"BootType", L"BootSector"); + goto migrate_drivepart; + } + if ((_wcsicmp(KeyData, L"BootSector") == 0) || + (_wcsicmp(KeyData, L"\"BootSector\"") == 0)) + { +migrate_drivepart: + DPRINT("This is a '%S' boot entry\n", KeyData); + FreeLdrMigrateBootDrivePartWorker(OsIniSection); + } + } + while (IniFindNextValue(Iterator, &SectionName, &KeyData)); + + IniFindClose(Iterator); +} +////////////// + + static VOID CreateCommonFreeLdrSections( IN OUT PBOOT_STORE_INI_CONTEXT BootStore) @@ -514,6 +671,12 @@ OpenIniBootLoaderStore( DPRINT1("OpenIniBootLoaderStore: Failed to retrieve 'Operating Systems' section!\n"); BootStore->OsIniSection = IniSection; + + // + // TEMPORARY: Migrate the DEPRECATED BootDrive and BootPartition + // values of BootSector boot entries to the newer BootPath value. + // + FreeLdrMigrateBootDrivePart(BootStore); } else if (Type == NtLdr) @@ -868,7 +1031,6 @@ CloseBootStore( } - static NTSTATUS CreateNTOSEntry( @@ -899,19 +1061,18 @@ CreateNTOSEntry( IniAddKey(IniSection, L"Options", Options->OsLoadOptions); } else - if (BootEntry->OsOptionsLength >= sizeof(BOOT_SECTOR_OPTIONS) && + if (BootEntry->OsOptionsLength >= sizeof(BOOTSECTOR_OPTIONS) && RtlCompareMemory(&BootEntry->OsOptions /* Signature */, - BOOT_SECTOR_OPTIONS_SIGNATURE, - RTL_FIELD_SIZE(BOOT_SECTOR_OPTIONS, Signature)) == - RTL_FIELD_SIZE(BOOT_SECTOR_OPTIONS, Signature)) + BOOTSECTOR_OPTIONS_SIGNATURE, + RTL_FIELD_SIZE(BOOTSECTOR_OPTIONS, Signature)) == + RTL_FIELD_SIZE(BOOTSECTOR_OPTIONS, Signature)) { - PBOOT_SECTOR_OPTIONS Options = (PBOOT_SECTOR_OPTIONS)&BootEntry->OsOptions; + PBOOTSECTOR_OPTIONS Options = (PBOOTSECTOR_OPTIONS)&BootEntry->OsOptions; - /* BootType, BootDrive, BootPartition and BootSector */ + /* BootType, BootPath and BootSector */ IniAddKey(IniSection, L"BootType", L"BootSector"); - IniAddKey(IniSection, L"BootDrive", Options->Drive); - IniAddKey(IniSection, L"BootPartition", Options->Partition); - IniAddKey(IniSection, L"BootSectorFile", Options->BootSectorFileName); + IniAddKey(IniSection, L"BootPath", Options->BootPath); + IniAddKey(IniSection, L"BootSectorFile", Options->FileName); } else { @@ -1237,7 +1398,6 @@ SetBootStoreOptions( } - static NTSTATUS FreeLdrEnumerateBootEntries( IN PBOOT_STORE_INI_CONTEXT BootStore, @@ -1250,7 +1410,7 @@ FreeLdrEnumerateBootEntries( PINI_SECTION OsIniSection; PCWSTR SectionName, KeyData; UCHAR xxBootEntry[FIELD_OFFSET(BOOT_STORE_ENTRY, OsOptions) + - max(sizeof(NTOS_OPTIONS), sizeof(BOOT_SECTOR_OPTIONS))]; + max(sizeof(NTOS_OPTIONS), sizeof(BOOTSECTOR_OPTIONS))]; PBOOT_STORE_ENTRY BootEntry = (PBOOT_STORE_ENTRY)&xxBootEntry; PWCHAR Buffer; @@ -1318,7 +1478,7 @@ FreeLdrEnumerateBootEntries( if (!IniGetKey(OsIniSection, L"BootType", &KeyData) || !KeyData) { /* Certainly not a ReactOS installation */ - DPRINT1("No BootType value present!\n"); + DPRINT1("No BootType value present\n"); goto DoEnum; } @@ -1354,31 +1514,26 @@ FreeLdrEnumerateBootEntries( (_wcsicmp(KeyData, L"\"BootSector\"") == 0)) { /* BootType is BootSector */ - PBOOT_SECTOR_OPTIONS Options = (PBOOT_SECTOR_OPTIONS)&BootEntry->OsOptions; + PBOOTSECTOR_OPTIONS Options = (PBOOTSECTOR_OPTIONS)&BootEntry->OsOptions; DPRINT("This is a '%S' boot entry\n", KeyData); - BootEntry->OsOptionsLength = sizeof(BOOT_SECTOR_OPTIONS); + BootEntry->OsOptionsLength = sizeof(BOOTSECTOR_OPTIONS); RtlCopyMemory(Options->Signature, - BOOT_SECTOR_OPTIONS_SIGNATURE, - RTL_FIELD_SIZE(BOOT_SECTOR_OPTIONS, Signature)); + BOOTSECTOR_OPTIONS_SIGNATURE, + RTL_FIELD_SIZE(BOOTSECTOR_OPTIONS, Signature)); // BootEntry->BootFilePath = NULL; - /* Check its BootDrive */ - Options->Drive = NULL; - if (IniGetKey(OsIniSection, L"BootDrive", &KeyData)) - Options->Drive = KeyData; - - /* Check its BootPartition */ - Options->Partition = NULL; - if (IniGetKey(OsIniSection, L"BootPartition", &KeyData)) - Options->Partition = KeyData; + /* Check its BootPath */ + Options->BootPath = NULL; + if (IniGetKey(OsIniSection, L"BootPath", &KeyData)) + Options->BootPath = KeyData; /* Check its BootSector */ - Options->BootSectorFileName = NULL; + Options->FileName = NULL; if (IniGetKey(OsIniSection, L"BootSectorFile", &KeyData)) - Options->BootSectorFileName = KeyData; + Options->FileName = KeyData; } else { diff --git a/base/setup/lib/utils/bldrsup.h b/base/setup/lib/utils/bldrsup.h index edefad6464c..4496cbbea3d 100644 --- a/base/setup/lib/utils/bldrsup.h +++ b/base/setup/lib/utils/bldrsup.h @@ -102,17 +102,16 @@ typedef struct _NTOS_OPTIONS #define NTOS_OPTIONS_SIGNATURE "NTOS_5\0\0" /* Options for boot-sector boot entries */ -typedef struct _BOOT_SECTOR_OPTIONS +typedef struct _BOOTSECTOR_OPTIONS { UCHAR Signature[8]; // "BootSect" // ULONG Version; // ULONG Length; - PCWSTR Drive; - PCWSTR Partition; - PCWSTR BootSectorFileName; -} BOOT_SECTOR_OPTIONS, *PBOOT_SECTOR_OPTIONS; + PCWSTR BootPath; + PCWSTR FileName; +} BOOTSECTOR_OPTIONS, *PBOOTSECTOR_OPTIONS; -#define BOOT_SECTOR_OPTIONS_SIGNATURE "BootSect" +#define BOOTSECTOR_OPTIONS_SIGNATURE "BootSect" typedef NTSTATUS From d234dc2d52100d97a5fb1e467a97cb363fbb7054 Mon Sep 17 00:00:00 2001 From: Joe Mason Date: Tue, 7 May 2024 08:40:27 -0400 Subject: [PATCH 115/182] [AVRT] Import Audio/Video Runtime module from Wine 9.7 (#6826) Enhance compatibility with future programs, including browsers. AVRT is an acronym for "Audio/Video Multimedia Realtime Runtime" and is NT6. --- dll/win32/CMakeLists.txt | 1 + dll/win32/avrt/CMakeLists.txt | 15 ++++ dll/win32/avrt/avrt.spec | 14 ++++ dll/win32/avrt/main.c | 136 ++++++++++++++++++++++++++++++++++ media/doc/WINESYNC.txt | 1 + sdk/include/psdk/avrt.h | 75 +++++++++++++++++++ 6 files changed, 242 insertions(+) create mode 100644 dll/win32/avrt/CMakeLists.txt create mode 100644 dll/win32/avrt/avrt.spec create mode 100644 dll/win32/avrt/main.c create mode 100644 sdk/include/psdk/avrt.h diff --git a/dll/win32/CMakeLists.txt b/dll/win32/CMakeLists.txt index dbf6ec11dd7..78e8df9abc3 100644 --- a/dll/win32/CMakeLists.txt +++ b/dll/win32/CMakeLists.txt @@ -262,5 +262,6 @@ add_subdirectory(xmllite) add_subdirectory(xolehlp) if(DLL_EXPORT_VERSION GREATER_EQUAL 0x600) + add_subdirectory(avrt) add_subdirectory(dwmapi) endif() diff --git a/dll/win32/avrt/CMakeLists.txt b/dll/win32/avrt/CMakeLists.txt new file mode 100644 index 00000000000..63015040a76 --- /dev/null +++ b/dll/win32/avrt/CMakeLists.txt @@ -0,0 +1,15 @@ + +include_directories(${REACTOS_SOURCE_DIR}/sdk/include/reactos/wine) +add_definitions(-D__WINESRC__) +spec2def(avrt.dll avrt.spec) + +list(APPEND SOURCE + main.c + ${CMAKE_CURRENT_BINARY_DIR}/avrt_stubs.c + ${CMAKE_CURRENT_BINARY_DIR}/avrt.def) + +add_library(avrt MODULE ${SOURCE}) +set_module_type(avrt win32dll) +target_link_libraries(avrt wine) +add_importlibs(avrt user32 msvcrt kernel32 ntdll) +add_cd_file(TARGET avrt DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/avrt/avrt.spec b/dll/win32/avrt/avrt.spec new file mode 100644 index 00000000000..0a05abcdbca --- /dev/null +++ b/dll/win32/avrt/avrt.spec @@ -0,0 +1,14 @@ +@ stdcall AvQuerySystemResponsiveness(long ptr) +@ stdcall AvRevertMmThreadCharacteristics(long) +@ stub AvRtCreateThreadOrderingGroup +@ stub AvRtCreateThreadOrderingGroupExA +@ stub AvRtCreateThreadOrderingGroupExW +@ stub AvRtDeleteThreadOrderingGroup +@ stub AvRtJoinThreadOrderingGroup +@ stub AvRtLeaveThreadOrderingGroup +@ stub AvRtWaitOnThreadOrderingGroup +@ stdcall AvSetMmMaxThreadCharacteristicsA(str str ptr) +@ stdcall AvSetMmMaxThreadCharacteristicsW(wstr wstr ptr) +@ stdcall AvSetMmThreadCharacteristicsA(str ptr) +@ stdcall AvSetMmThreadCharacteristicsW(wstr ptr) +@ stdcall AvSetMmThreadPriority(ptr long) diff --git a/dll/win32/avrt/main.c b/dll/win32/avrt/main.c new file mode 100644 index 00000000000..d00d1e0251e --- /dev/null +++ b/dll/win32/avrt/main.c @@ -0,0 +1,136 @@ +/* Avrt dll implementation + * + * Copyright (C) 2009 Maarten Lankhorst + * + * This program 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 program 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 program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include + +#include "windef.h" +#include "winbase.h" +#include "winnls.h" +#include "wine/debug.h" +#include "avrt.h" + +WINE_DEFAULT_DEBUG_CHANNEL(avrt); + +static inline WCHAR *strdupAW(const char *src) +{ + int len; + WCHAR *dst; + if (!src) return NULL; + len = MultiByteToWideChar(CP_ACP, 0, src, -1, NULL, 0); + if ((dst = malloc(len * sizeof(*dst)))) MultiByteToWideChar(CP_ACP, 0, src, -1, dst, len); + return dst; +} + +HANDLE WINAPI AvSetMmThreadCharacteristicsA(const char *name, DWORD *index) +{ + WCHAR *nameW = NULL; + HANDLE ret; + + if (name && !(nameW = strdupAW(name))) + { + SetLastError(ERROR_OUTOFMEMORY); + return NULL; + } + + ret = AvSetMmThreadCharacteristicsW(nameW, index); + + free(nameW); + return ret; +} + +HANDLE WINAPI AvSetMmThreadCharacteristicsW(const WCHAR *name, DWORD *index) +{ + FIXME("(%s,%p): stub\n", debugstr_w(name), index); + + if (!name) + { + SetLastError(ERROR_INVALID_TASK_NAME); + return NULL; + } + + if (!index) + { + SetLastError(ERROR_INVALID_HANDLE); + return NULL; + } + + return (HANDLE)0x12345678; +} + +BOOL WINAPI AvQuerySystemResponsiveness(HANDLE AvrtHandle, ULONG *value) +{ + FIXME("(%p, %p): stub\n", AvrtHandle, value); + return FALSE; +} + +BOOL WINAPI AvRevertMmThreadCharacteristics(HANDLE AvrtHandle) +{ + FIXME("(%p): stub\n", AvrtHandle); + return TRUE; +} + +BOOL WINAPI AvSetMmThreadPriority(HANDLE AvrtHandle, AVRT_PRIORITY prio) +{ + FIXME("(%p)->(%u) stub\n", AvrtHandle, prio); + return TRUE; +} + +HANDLE WINAPI AvSetMmMaxThreadCharacteristicsA(const char *task1, const char *task2, DWORD *index) +{ + WCHAR *task1W = NULL, *task2W = NULL; + HANDLE ret; + + if (task1 && !(task1W = strdupAW(task1))) + { + SetLastError(ERROR_OUTOFMEMORY); + return NULL; + } + + if (task2 && !(task2W = strdupAW(task2))) + { + SetLastError(ERROR_OUTOFMEMORY); + return NULL; + } + + ret = AvSetMmMaxThreadCharacteristicsW(task1W, task2W, index); + + free(task2W); + free(task1W); + return ret; +} + +HANDLE WINAPI AvSetMmMaxThreadCharacteristicsW(const WCHAR *task1, const WCHAR *task2, DWORD *index) +{ + FIXME("(%s,%s,%p): stub\n", debugstr_w(task1), debugstr_w(task2), index); + + if (!task1 || task2) + { + SetLastError(ERROR_INVALID_TASK_NAME); + return NULL; + } + + if (!index) + { + SetLastError(ERROR_INVALID_HANDLE); + return NULL; + } + + return (HANDLE)0x12345678; +} diff --git a/media/doc/WINESYNC.txt b/media/doc/WINESYNC.txt index 46faf77ee77..02c7e7461a0 100644 --- a/media/doc/WINESYNC.txt +++ b/media/doc/WINESYNC.txt @@ -51,6 +51,7 @@ dll/win32/atl # Synced to WineStaging-4.18 dll/win32/atl80 # Synced to WineStaging-4.18 dll/win32/atl100 # Synced to WineStaging-3.3 dll/win32/avifil32 # Synced to WineStaging-4.18 +dll/win32/avrt # Synced to Wine-9.7 dll/win32/bcrypt # Synced to WineStaging-1.9.23 (+ winetest synced to 8d8936cbb6fea3cac862e059e814527f5361f48b, a.k.a 20161206-BJ) dll/win32/browseui # Out of sync dll/win32/cabinet # Synced to WineStaging-4.18 diff --git a/sdk/include/psdk/avrt.h b/sdk/include/psdk/avrt.h new file mode 100644 index 00000000000..88beebb0bf8 --- /dev/null +++ b/sdk/include/psdk/avrt.h @@ -0,0 +1,75 @@ +/* + * avrt definitions + * + * Copyright 2009 Maarten Lankhorst + * + * 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 + * + */ + +#ifndef _AVRT_ +#define _AVRT_ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum _AVRT_PRIORITY +{ + AVRT_PRIORITY_VERYLOW = -2, + AVRT_PRIORITY_LOW, + AVRT_PRIORITY_NORMAL, + AVRT_PRIORITY_HIGH, + AVRT_PRIORITY_CRITICAL +} AVRT_PRIORITY, *PAVRT_PRIORITY; + +/* Windows compiler is more lax */ +#define THREAD_ORDER_GROUP_INFINITE_TIMEOUT ((void*)((LONG_PTR)-1)) + +HANDLE WINAPI AvSetMmThreadCharacteristicsA(LPCSTR TaskName, LPDWORD TaskIndex); +HANDLE WINAPI AvSetMmThreadCharacteristicsW(LPCWSTR TaskName, LPDWORD TaskIndex); +#define AvSetMmThreadCharacteristics WINELIB_NAME_AW(AvSetMmThreadCharacteristics) + +HANDLE WINAPI AvSetMmMaxThreadCharacteristicsA(LPCSTR FirstTask, LPCSTR SecondTask, LPDWORD TaskIndex); +HANDLE WINAPI AvSetMmMaxThreadCharacteristicsW(LPCWSTR FirstTask, LPCWSTR SecondTask, LPDWORD TaskIndex); +#define AvSetMmMaxThreadCharacteristics WINELIB_NAME_AW(AvSetMmMaxThreadCharacteristics) + +BOOL WINAPI AvRevertMmThreadCharacteristics(HANDLE AvrtHandle); +BOOL WINAPI AvSetMmThreadPriority(HANDLE AvrtHandle, AVRT_PRIORITY Priority); +BOOL WINAPI AvRtCreateThreadOrderingGroup( + PHANDLE Context, PLARGE_INTEGER Period, + GUID *ThreadOrderingGuid, PLARGE_INTEGER Timeout); + +BOOL WINAPI AvRtCreateThreadOrderingGroupExA( + PHANDLE Context, PLARGE_INTEGER Period, + GUID *ThreadOrderingGuid, PLARGE_INTEGER Timeout, + LPCSTR TaskName); +BOOL WINAPI AvRtCreateThreadOrderingGroupExW( + PHANDLE Context, PLARGE_INTEGER Period, + GUID *ThreadOrderingGuid, PLARGE_INTEGER Timeout, + LPCSTR TaskName); +#define AvRtCreateThreadOrderingGroupEx WINELIB_NAME_AW(AvRtCreateThreadOrderingGroupEx) + +BOOL WINAPI AvRtJoinThreadOrderingGroup(PHANDLE Context, GUID *ThreadOrderingGuid, BOOL Before); +BOOL WINAPI AvRtWaitOnThreadOrderingGroup(HANDLE Context); +BOOL WINAPI AvRtLeaveThreadOrderingGroup(HANDLE Context); +BOOL WINAPI AvRtDeleteThreadOrderingGroup(HANDLE Context); +BOOL WINAPI AvQuerySystemResponsiveness(HANDLE AvrtHandle, PULONG SystemResponsivenessValue); + +#ifdef __cplusplus +} +#endif + +#endif /*_AVRT_*/ From 0c0062ac9a3ab9b89712745a6bc5cae77f947a82 Mon Sep 17 00:00:00 2001 From: Doug Lyons Date: Tue, 7 May 2024 09:10:11 -0500 Subject: [PATCH 116/182] [NTUSER] Fix Skype and other programs installer windows not able to be moved with mouse by clicking on title bar (#6819) Patch by @I_Kill_Bugs Add condition into msgqueue along with filter testing to reject messages that are "NotForUs". Also, do not set AcceptMessage to FALSE, but just keep msgDblClk and idSysPeek values and continue. CORE-19487 CORE-19538 --- win32ss/user/ntuser/msgqueue.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/win32ss/user/ntuser/msgqueue.c b/win32ss/user/ntuser/msgqueue.c index 1624cbfaddd..e26a3b65952 100644 --- a/win32ss/user/ntuser/msgqueue.c +++ b/win32ss/user/ntuser/msgqueue.c @@ -1945,6 +1945,7 @@ co_MsqPeekHardwareMessage(IN PTHREADINFO pti, ULONG_PTR idSave; DWORD QS_Flags; LONG_PTR ExtraInfo; + MSG clk_msg; BOOL Ret = FALSE; PUSER_MESSAGE_QUEUE MessageQueue = pti->MessageQueue; @@ -1994,17 +1995,22 @@ co_MsqPeekHardwareMessage(IN PTHREADINFO pti, msg = CurrentMessage->Msg; ExtraInfo = CurrentMessage->ExtraInfo; QS_Flags = CurrentMessage->QS_Flags; + clk_msg = MessageQueue->msgDblClk; NotForUs = FALSE; UpdateKeyStateFromMsg(MessageQueue, &msg); AcceptMessage = co_IntProcessHardwareMessage(&msg, &Remove, &NotForUs, ExtraInfo, MsgFilterLow, MsgFilterHigh); - if (MsgFilterLow != 0 || MsgFilterHigh != 0) + if (!NotForUs && (MsgFilterLow != 0 || MsgFilterHigh != 0)) { /* Don't return message if not in range */ if (msg.message < MsgFilterLow || msg.message > MsgFilterHigh) - AcceptMessage = FALSE; + { + MessageQueue->msgDblClk = clk_msg; + MessageQueue->idSysPeek = idSave; + continue; + } } if (Remove) From cf9f7548d53dcdea6662d8c8b5c56b5353baf76d Mon Sep 17 00:00:00 2001 From: Doug Lyons Date: Tue, 7 May 2024 09:52:57 -0500 Subject: [PATCH 117/182] [NTUSER] Fix double click on title bar icon not closing window (#6697) Patch by @I_Kill_Bugs * [NTUSER] Fix double click on title bar icon not closing window Improve MENU_TrackMenu handling. Guilty commit:0.4.15-dev-7750-gc17a654 https://github.com/reactos/reactos/commit/c17a6542ac329160ce627267babc8c7ec67b1e86 CORE-19492 --- win32ss/user/ntuser/menu.c | 38 +++++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/win32ss/user/ntuser/menu.c b/win32ss/user/ntuser/menu.c index fe68f82e407..2b7a0c51f7a 100644 --- a/win32ss/user/ntuser/menu.c +++ b/win32ss/user/ntuser/menu.c @@ -4052,6 +4052,8 @@ static INT FASTCALL MENU_TrackMenu(PMENU pmenu, UINT wFlags, INT x, INT y, HWND capture_win; PMENU pmMouse; BOOL enterIdleSent = FALSE; + BOOL firstClick = TRUE; + PWND pWnd; PTHREADINFO pti = PsGetCurrentThreadWin32Thread(); if (pti != pwnd->head.pti) @@ -4177,13 +4179,21 @@ static INT FASTCALL MENU_TrackMenu(PMENU pmenu, UINT wFlags, INT x, INT y, /* fall through */ case WM_LBUTTONDBLCLK: case WM_LBUTTONDOWN: + { /* If the message belongs to the menu, removes it from the queue */ /* Else, end menu tracking */ - fRemove = MENU_ButtonDown(&mt, pmMouse, wFlags); + pWnd = ValidateHwndNoErr(mt.TopMenu->hWnd); + /* Don't remove WM_LBUTTONDBLCLK to allow the closing of a window or program */ + if (msg.message == WM_LBUTTONDBLCLK && GetNCHitEx(pWnd, mt.Pt) == HTSYSMENU) + fRemove = FALSE; + else + fRemove = MENU_ButtonDown(&mt, pmMouse, wFlags); + fInsideMenuLoop = fRemove; - if ( msg.message == WM_LBUTTONDBLCLK || - msg.message == WM_RBUTTONDBLCLK ) fInsideMenuLoop = FALSE; // Must exit or loop forever! + if (msg.message == WM_RBUTTONDBLCLK) + fInsideMenuLoop = FALSE; // Must exit or loop forever break; + } case WM_RBUTTONUP: if (!(wFlags & TPM_RIGHTBUTTON)) break; @@ -4192,12 +4202,22 @@ static INT FASTCALL MENU_TrackMenu(PMENU pmenu, UINT wFlags, INT x, INT y, /* Check if a menu was selected by the mouse */ if (pmMouse) { - executedMenuId = MENU_ButtonUp( &mt, pmMouse, wFlags); - - /* End the loop if executedMenuId is an item ID */ - /* or if the job was done (executedMenuId = 0). */ - fRemove = (executedMenuId != -1); - fInsideMenuLoop = !fRemove; + pWnd = ValidateHwndNoErr(mt.TopMenu->hWnd); + /* Exit system menu if system icon is clicked a second time */ + if (!firstClick && GetNCHitEx(pWnd, mt.Pt) == HTSYSMENU) + { + fRemove = TRUE; + fInsideMenuLoop = FALSE; + } + else + { + /* End the loop if executedMenuId is an item ID */ + /* or if the job was done (executedMenuId = 0). */ + executedMenuId = MENU_ButtonUp( &mt, pmMouse, wFlags); + fRemove = (executedMenuId != -1); + fInsideMenuLoop = !fRemove; + firstClick = FALSE; + } } /* No menu was selected by the mouse */ /* if the function was called by TrackPopupMenu, continue From a7cbb60ebfa3089922138f083b9828205838f157 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Tue, 7 May 2024 19:26:03 +0200 Subject: [PATCH 118/182] [SETUPLIB] Don't flag freeldr.ini as read-only during installation. CORE-19575 For the time being, don't add read-only attribute for ease of testing and modifying files, but it won't always stay this way. For example, Windows sets its boot.ini (as well as NTLDR, NTDETECT.COM etc.) as read-only (+ hidden and system) during its 1st-stage setup. 2nd-stage setup makes some adjustments in boot.ini but doesn't restore its read-only attribute. Windows tools that can modify boot.ini (i.e. msconfig.exe, bootcfg.exe, and sysdm.cpl) **ALL** know how to remove the read-only attribute for modifying boot.ini, before restoring it if needed. --- base/setup/lib/utils/bldrsup.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/base/setup/lib/utils/bldrsup.c b/base/setup/lib/utils/bldrsup.c index af3acfd042c..ad13cbe51df 100644 --- a/base/setup/lib/utils/bldrsup.c +++ b/base/setup/lib/utils/bldrsup.c @@ -860,7 +860,13 @@ CloseIniBootLoaderStore( /* Re-protect the INI file */ FileAttribs = ProtectAttribs; - /*Status =*/ ProtectFile(BootStore->FileHandle, ProtectAttribs, &FileAttribs); + if (BootStore->Header.Type == FreeLdr) + { + // NOTE: CORE-19575: For the time being, don't add READONLY for ease + // of testing and modifying files, but it won't always stay this way. + FileAttribs &= ~FILE_ATTRIBUTE_READONLY; + } + /*Status =*/ ProtectFile(BootStore->FileHandle, FileAttribs, &FileAttribs); Status = STATUS_SUCCESS; // Ignore the status and just succeed. Quit: From f6f5835d451f3f2f7e2d1c903104d305ce183909 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maj=20Sokli=C4=8D?= Date: Wed, 8 May 2024 17:15:56 +0200 Subject: [PATCH 119/182] [INETCPL] Fix missing keyboard navigation (#6836) JIRA issue: CORE-19568 --- dll/cpl/inetcpl/lang/He.rc | 4 ++-- dll/cpl/inetcpl/lang/Sr.rc | 8 ++++---- dll/cpl/inetcpl/lang/bg-BG.rc | 4 ++-- dll/cpl/inetcpl/lang/cs-CZ.rc | 4 ++-- dll/cpl/inetcpl/lang/de-DE.rc | 4 ++-- dll/cpl/inetcpl/lang/en-US.rc | 4 ++-- dll/cpl/inetcpl/lang/es-ES.rc | 4 ++-- dll/cpl/inetcpl/lang/fr-FR.rc | 4 ++-- dll/cpl/inetcpl/lang/id-ID.rc | 4 ++-- dll/cpl/inetcpl/lang/it-IT.rc | 4 ++-- dll/cpl/inetcpl/lang/ja-JP.rc | 4 ++-- dll/cpl/inetcpl/lang/ko-KR.rc | 4 ++-- dll/cpl/inetcpl/lang/lt-LT.rc | 5 ++--- dll/cpl/inetcpl/lang/nl-NL.rc | 4 ++-- dll/cpl/inetcpl/lang/pl-PL.rc | 4 ++-- dll/cpl/inetcpl/lang/pt-BR.rc | 4 ++-- dll/cpl/inetcpl/lang/pt-PT.rc | 4 ++-- dll/cpl/inetcpl/lang/ro-RO.rc | 4 ++-- dll/cpl/inetcpl/lang/ru-RU.rc | 4 ++-- dll/cpl/inetcpl/lang/sq-AL.rc | 4 ++-- dll/cpl/inetcpl/lang/sv-SE.rc | 4 ++-- dll/cpl/inetcpl/lang/tr-TR.rc | 4 ++-- dll/cpl/inetcpl/lang/uk-UA.rc | 4 ++-- dll/cpl/inetcpl/lang/zh-CN.rc | 4 ++-- dll/cpl/inetcpl/lang/zh-TW.rc | 4 ++-- 25 files changed, 52 insertions(+), 53 deletions(-) diff --git a/dll/cpl/inetcpl/lang/He.rc b/dll/cpl/inetcpl/lang/He.rc index ee5bf9bb5e9..a320c602cd1 100644 --- a/dll/cpl/inetcpl/lang/He.rc +++ b/dll/cpl/inetcpl/lang/He.rc @@ -72,7 +72,7 @@ CAPTION "מחק היסטוריית גלישה" BEGIN AUTOCHECKBOX "Temporary internet files\nCached copies of web pages, images and certificates.", - IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE + IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP AUTOCHECKBOX "Cookies\nFiles saved on your computer by websites, which store things like user preferences and login information.", IDC_DELETE_COOKIES, 10, 48, 230, 40, BS_TOP | BS_MULTILINE AUTOCHECKBOX "History\nList of websites you have accessed.", @@ -82,7 +82,7 @@ BEGIN AUTOCHECKBOX "Passwords\nSaved passwords you have entered into forms.", IDC_DELETE_PASSWORDS, 10, 168, 230, 40, BS_TOP | BS_MULTILINE DEFPUSHBUTTON "Cancel", IDCANCEL, 185, 230, 60, 15, WS_GROUP - PUSHBUTTON "Delete", IDOK, 120, 230, 60, 15, WS_GROUP + PUSHBUTTON "Delete", IDOK, 120, 230, 60, 15 END diff --git a/dll/cpl/inetcpl/lang/Sr.rc b/dll/cpl/inetcpl/lang/Sr.rc index 9dc6c97cc25..c205f51c019 100644 --- a/dll/cpl/inetcpl/lang/Sr.rc +++ b/dll/cpl/inetcpl/lang/Sr.rc @@ -69,7 +69,7 @@ CAPTION "Delete browsing history" BEGIN AUTOCHECKBOX "Temporary internet files\nCached copies of web pages, images and certificates.", - IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE + IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP AUTOCHECKBOX "Cookies\nFiles saved on your computer by websites, which store things like user preferences and login information.", IDC_DELETE_COOKIES, 10, 48, 230, 40, BS_TOP | BS_MULTILINE AUTOCHECKBOX "History\nList of websites you have accessed.", @@ -79,7 +79,7 @@ BEGIN AUTOCHECKBOX "Passwords\nSaved passwords you have entered into forms.", IDC_DELETE_PASSWORDS, 10, 168, 230, 40, BS_TOP | BS_MULTILINE DEFPUSHBUTTON "Cancel", IDCANCEL, 185, 230, 60, 15, WS_GROUP - PUSHBUTTON "Delete", IDOK, 120, 230, 60, 15, WS_GROUP + PUSHBUTTON "Delete", IDOK, 120, 230, 60, 15 END @@ -180,7 +180,7 @@ CAPTION "Delete browsing history" BEGIN AUTOCHECKBOX "Temporary internet files\nCached copies of web pages, images and certificates.", - IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE + IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP AUTOCHECKBOX "Cookies\nFiles saved on your computer by websites, which store things like user preferences and login information.", IDC_DELETE_COOKIES, 10, 48, 230, 40, BS_TOP | BS_MULTILINE AUTOCHECKBOX "History\nList of websites you have accessed.", @@ -190,7 +190,7 @@ BEGIN AUTOCHECKBOX "Passwords\nSaved passwords you have entered into forms.", IDC_DELETE_PASSWORDS, 10, 168, 230, 40, BS_TOP | BS_MULTILINE DEFPUSHBUTTON "Cancel", IDCANCEL, 185, 230, 60, 15, WS_GROUP - PUSHBUTTON "Delete", IDOK, 120, 230, 60, 15, WS_GROUP + PUSHBUTTON "Delete", IDOK, 120, 230, 60, 15 END diff --git a/dll/cpl/inetcpl/lang/bg-BG.rc b/dll/cpl/inetcpl/lang/bg-BG.rc index e66d4ce9fee..3a6fe496d6f 100644 --- a/dll/cpl/inetcpl/lang/bg-BG.rc +++ b/dll/cpl/inetcpl/lang/bg-BG.rc @@ -66,7 +66,7 @@ CAPTION "Изтриване на иÑториÑта на браузъра" BEGIN AUTOCHECKBOX "&Временни интернет файлове\nКеширани ÐºÐ¾Ð¿Ð¸Ñ Ð½Ð° интернет Ñтраници, Ñнимки и Ñертификати.", - IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE + IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP AUTOCHECKBOX "&БиÑквитки\nФайлове запазени на Ð²Ð°ÑˆÐ¸Ñ ÐºÐ¾Ð¼Ð¿ÑŽÑ‚ÑŠÑ€, ÑъхранÑващи неща като потребителÑки Ð¿Ñ€ÐµÐ´Ð¿Ð¾Ñ‡Ð¸Ñ‚Ð°Ð½Ð¸Ñ Ð¸ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° вход.", IDC_DELETE_COOKIES, 10, 48, 230, 40, BS_TOP | BS_MULTILINE AUTOCHECKBOX "&СпиÑък Ñ Ð¸ÑториÑта на интернет Ñтранциите до които имате доÑтъп.", @@ -76,7 +76,7 @@ BEGIN AUTOCHECKBOX "&Пароли които Ñе използват автоматично.", IDC_DELETE_PASSWORDS, 10, 168, 230, 40, BS_TOP | BS_MULTILINE DEFPUSHBUTTON "Изход", IDCANCEL, 185, 230, 60, 15, WS_GROUP - PUSHBUTTON "&Изтриване", IDOK, 120, 230, 60, 15, WS_GROUP + PUSHBUTTON "&Изтриване", IDOK, 120, 230, 60, 15 END diff --git a/dll/cpl/inetcpl/lang/cs-CZ.rc b/dll/cpl/inetcpl/lang/cs-CZ.rc index c5434a2db9c..411a5d56071 100644 --- a/dll/cpl/inetcpl/lang/cs-CZ.rc +++ b/dll/cpl/inetcpl/lang/cs-CZ.rc @@ -53,7 +53,7 @@ CAPTION "Smazat historii prohlížení" BEGIN AUTOCHECKBOX "DoÄasné internetové soubory\nUložené kopie webových stránek, obrázků a certifikátů.", - IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE + IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP AUTOCHECKBOX "Cookies\nSoubory uložené na poÄítaÄi webovými stránkami, ve kterých jsou uložené například uživatelské pÅ™edvolby nebo pÅ™ihlaÅ¡ovací údaje.", IDC_DELETE_COOKIES, 10, 48, 230, 40, BS_TOP | BS_MULTILINE AUTOCHECKBOX "Historie\nSeznam navÅ¡tívených webových stránek.", @@ -63,7 +63,7 @@ BEGIN AUTOCHECKBOX "Hesla\nUložená hesla, která byla zadána do formulářů.", IDC_DELETE_PASSWORDS, 10, 168, 230, 40, BS_TOP | BS_MULTILINE DEFPUSHBUTTON "Storno", IDCANCEL, 185, 230, 60, 15, WS_GROUP - PUSHBUTTON "Smazat", IDOK, 120, 230, 60, 15, WS_GROUP + PUSHBUTTON "Smazat", IDOK, 120, 230, 60, 15 END diff --git a/dll/cpl/inetcpl/lang/de-DE.rc b/dll/cpl/inetcpl/lang/de-DE.rc index bb4645349f1..71307283826 100644 --- a/dll/cpl/inetcpl/lang/de-DE.rc +++ b/dll/cpl/inetcpl/lang/de-DE.rc @@ -68,7 +68,7 @@ CAPTION "Gespeicherte Browserdaten löschen" BEGIN AUTOCHECKBOX "&Temporäre Internetdateien\nZwischengespeicherte Kopien von Webseiten, Bildern und Zertifikaten.", - IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE + IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP AUTOCHECKBOX "&Cookies\nVon Webseiten auf ihrem Computer gespeicherte Dateien, die Benutzereinstellungen oder Anmeldeinformationen enthalten.", IDC_DELETE_COOKIES, 10, 48, 230, 40, BS_TOP | BS_MULTILINE AUTOCHECKBOX "&Verlauf\nListe von Webseiten, die Sie aufgerufen haben.", @@ -78,7 +78,7 @@ BEGIN AUTOCHECKBOX "&Kennwörter\nGespeicherte Kennwörter, die Sie in Formulare eingegeben haben.", IDC_DELETE_PASSWORDS, 10, 168, 230, 40, BS_TOP | BS_MULTILINE DEFPUSHBUTTON "&Abbrechen", IDCANCEL, 185, 230, 60, 15, WS_GROUP - PUSHBUTTON "&Löschen", IDOK, 120, 230, 60, 15, WS_GROUP + PUSHBUTTON "&Löschen", IDOK, 120, 230, 60, 15 END diff --git a/dll/cpl/inetcpl/lang/en-US.rc b/dll/cpl/inetcpl/lang/en-US.rc index d1b2777b063..6ee6297809d 100644 --- a/dll/cpl/inetcpl/lang/en-US.rc +++ b/dll/cpl/inetcpl/lang/en-US.rc @@ -66,7 +66,7 @@ CAPTION "Delete browsing history" BEGIN AUTOCHECKBOX "&Temporary internet files\nCached copies of web pages, images and certificates.", - IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE + IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP AUTOCHECKBOX "&Cookies\nFiles saved on your computer by websites, which store things like user preferences and login information.", IDC_DELETE_COOKIES, 10, 48, 230, 40, BS_TOP | BS_MULTILINE AUTOCHECKBOX "&History\nList of websites you have accessed.", @@ -76,7 +76,7 @@ BEGIN AUTOCHECKBOX "&Passwords\nSaved passwords you have entered into forms.", IDC_DELETE_PASSWORDS, 10, 168, 230, 40, BS_TOP | BS_MULTILINE DEFPUSHBUTTON "Cancel", IDCANCEL, 185, 230, 60, 15, WS_GROUP - PUSHBUTTON "&Delete", IDOK, 120, 230, 60, 15, WS_GROUP + PUSHBUTTON "&Delete", IDOK, 120, 230, 60, 15 END diff --git a/dll/cpl/inetcpl/lang/es-ES.rc b/dll/cpl/inetcpl/lang/es-ES.rc index 459e56d8a38..a46fd23c57d 100644 --- a/dll/cpl/inetcpl/lang/es-ES.rc +++ b/dll/cpl/inetcpl/lang/es-ES.rc @@ -52,7 +52,7 @@ CAPTION "Borrar historial de navegación" BEGIN AUTOCHECKBOX "Archivos temporales\nCopias en caché de páginas web, imágenes y certificados.", - IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE + IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP AUTOCHECKBOX "Cookies\nArchivos guardados en su equipo por los sitios Web, utilizados para almacenar preferencias e información de inicio de sesión.", IDC_DELETE_COOKIES, 10, 48, 230, 40, BS_TOP | BS_MULTILINE AUTOCHECKBOX "Historial\nLista de sitios que se han visitado.", @@ -62,7 +62,7 @@ BEGIN AUTOCHECKBOX "Contraseñas\nContraseñas guardadas introducidas en formularios.", IDC_DELETE_PASSWORDS, 10, 168, 230, 40, BS_TOP | BS_MULTILINE DEFPUSHBUTTON "Cancelar", IDCANCEL, 185, 230, 60, 15, WS_GROUP - PUSHBUTTON "Borrar", IDOK, 120, 230, 60, 15, WS_GROUP + PUSHBUTTON "Borrar", IDOK, 120, 230, 60, 15 END diff --git a/dll/cpl/inetcpl/lang/fr-FR.rc b/dll/cpl/inetcpl/lang/fr-FR.rc index 4456887f3f4..7f3f169456c 100644 --- a/dll/cpl/inetcpl/lang/fr-FR.rc +++ b/dll/cpl/inetcpl/lang/fr-FR.rc @@ -70,7 +70,7 @@ CAPTION "Effacer l'historique de navigation" BEGIN AUTOCHECKBOX "Fichiers internet temporaires\nCopies en cache de pages web, d'images et de certificats.", - IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE + IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP AUTOCHECKBOX "Cookies\nDonnées enregistrées sur votre ordinateur par des sites web, telles que préférences utilisateur et informations de connexion.", IDC_DELETE_COOKIES, 10, 48, 230, 40, BS_TOP | BS_MULTILINE AUTOCHECKBOX "Historique\nListe des sites web accédés.", @@ -80,7 +80,7 @@ BEGIN AUTOCHECKBOX "Mots de passe\nMots de passe entrés dans des formulaires et sauvegardés.", IDC_DELETE_PASSWORDS, 10, 168, 230, 40, BS_TOP | BS_MULTILINE DEFPUSHBUTTON "Annuler", IDCANCEL, 185, 230, 60, 15, WS_GROUP - PUSHBUTTON "Effacer", IDOK, 120, 230, 60, 15, WS_GROUP + PUSHBUTTON "Effacer", IDOK, 120, 230, 60, 15 END diff --git a/dll/cpl/inetcpl/lang/id-ID.rc b/dll/cpl/inetcpl/lang/id-ID.rc index 4fa4b29e638..4fe93e307d9 100644 --- a/dll/cpl/inetcpl/lang/id-ID.rc +++ b/dll/cpl/inetcpl/lang/id-ID.rc @@ -45,7 +45,7 @@ CAPTION "Hapus Riwayat Penjelajahan" BEGIN AUTOCHECKBOX "&Berkas internet sementara\nSalinan halaman web, gambar, dan sertifikat dalam cache.", - IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE + IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP AUTOCHECKBOX "&Cookie\nBerkas disimpan di komputer anda oleh situs web, yakni beberapa hal-hal seperti preferensi pengguna dan informasi masuk.", IDC_DELETE_COOKIES, 10, 48, 230, 40, BS_TOP | BS_MULTILINE AUTOCHECKBOX "&Riwayat\nDaftar situs web yang telah anda akses.", @@ -55,7 +55,7 @@ BEGIN AUTOCHECKBOX "&Kata sandi\nKata sandi tersimpan yang telah Anda masukkan ke dalam formulir.", IDC_DELETE_PASSWORDS, 10, 168, 230, 40, BS_TOP | BS_MULTILINE DEFPUSHBUTTON "Batal", IDCANCEL, 185, 230, 60, 15, WS_GROUP - PUSHBUTTON "&Hapus", IDOK, 120, 230, 60, 15, WS_GROUP + PUSHBUTTON "&Hapus", IDOK, 120, 230, 60, 15 END diff --git a/dll/cpl/inetcpl/lang/it-IT.rc b/dll/cpl/inetcpl/lang/it-IT.rc index 982a5a0fe53..8193d19262e 100644 --- a/dll/cpl/inetcpl/lang/it-IT.rc +++ b/dll/cpl/inetcpl/lang/it-IT.rc @@ -69,7 +69,7 @@ CAPTION "Cancella Cronologia" BEGIN AUTOCHECKBOX "File internet temporanei\nCopie di pagine web, immagini e certificati.", - IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE + IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP AUTOCHECKBOX "I Cookie\nFile salvate nel tuo computer dai siti web, che contengono dati come le preferenze dell'utente e altri informazioni.", IDC_DELETE_COOKIES, 10, 48, 230, 40, BS_TOP | BS_MULTILINE AUTOCHECKBOX "Storia\nLista di siti web che hai visitato.", @@ -79,7 +79,7 @@ BEGIN AUTOCHECKBOX "Password\nLe password salvate che hai inserito.", IDC_DELETE_PASSWORDS, 10, 168, 230, 40, BS_TOP | BS_MULTILINE DEFPUSHBUTTON "Annulla", IDCANCEL, 185, 230, 60, 15, WS_GROUP - PUSHBUTTON "Cancella", IDOK, 120, 230, 60, 15, WS_GROUP + PUSHBUTTON "Cancella", IDOK, 120, 230, 60, 15 END diff --git a/dll/cpl/inetcpl/lang/ja-JP.rc b/dll/cpl/inetcpl/lang/ja-JP.rc index eb92ce6fe04..c50a0ef068e 100644 --- a/dll/cpl/inetcpl/lang/ja-JP.rc +++ b/dll/cpl/inetcpl/lang/ja-JP.rc @@ -70,7 +70,7 @@ CAPTION "検索履歴を消ã™" BEGIN AUTOCHECKBOX "一時インターãƒãƒƒãƒˆãƒ•ã‚¡ã‚¤ãƒ«\nキャッシュã•ã‚ŒãŸã‚¦ã‚§ãƒ–ページã¨ç”»åƒã¨è¨¼æ˜Žæ›¸ã§ã™ã€‚", - IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE + IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP AUTOCHECKBOX "クッキー\nウェブサイトã«ã‚ˆã‚Šä¿å­˜ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã§ã™ã€‚ユーザー設定やログイン情報をå«ã¿ã¾ã™ã€‚", IDC_DELETE_COOKIES, 10, 48, 230, 40, BS_TOP | BS_MULTILINE AUTOCHECKBOX "履歴\nアクセスã—ãŸã‚¦ã‚§ãƒ–サイトã®ãƒªã‚¹ãƒˆã§ã™ã€‚", @@ -80,7 +80,7 @@ BEGIN AUTOCHECKBOX "パスワード\nフォームã«å…¥åŠ›ã—ãŸä¿å­˜æ¸ˆã¿ã®ãƒ‘スワードã§ã™ã€‚", IDC_DELETE_PASSWORDS, 10, 168, 230, 40, BS_TOP | BS_MULTILINE DEFPUSHBUTTON "キャンセル", IDCANCEL, 185, 230, 60, 15, WS_GROUP - PUSHBUTTON "削除", IDOK, 120, 230, 60, 15, WS_GROUP + PUSHBUTTON "削除", IDOK, 120, 230, 60, 15 END diff --git a/dll/cpl/inetcpl/lang/ko-KR.rc b/dll/cpl/inetcpl/lang/ko-KR.rc index 1782bdb6687..3032ba5ced1 100644 --- a/dll/cpl/inetcpl/lang/ko-KR.rc +++ b/dll/cpl/inetcpl/lang/ko-KR.rc @@ -69,7 +69,7 @@ CAPTION "방문 ê¸°ë¡ ì§€ìš°ê¸°" BEGIN AUTOCHECKBOX "ìž„ì‹œ ì¸í„°ë„· 파ì¼\n웹페ì´ì§€ì˜ ìºì‹œëœ 복사본,그림 그리고 ì¸ì¦ì„œ.", - IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE + IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP AUTOCHECKBOX "쿠키\nì´ íŒŒì¼ì€ 웹사ì´íŠ¸ì— 위해 ì‚¬ìš©ìž í™˜ê²½ì„¤ì •ì´ë‚˜ ë¡œê·¸ì¸ ì •ë³´ê°™ì€ ê²ƒì„ ë‹¹ì‹ ì˜ ì»´í“¨í„°ì— ì €ìž¥í•˜ëŠ”ë° ì‚¬ìš©ë©ë‹ˆë‹¤. .", IDC_DELETE_COOKIES, 10, 48, 230, 40, BS_TOP | BS_MULTILINE AUTOCHECKBOX "방문기ë¡\në‹¹ì‹ ì´ ë°©ë¬¸í•œ 웹사ì´íŠ¸ì˜ 목ë¡.", @@ -79,7 +79,7 @@ BEGIN AUTOCHECKBOX "암호\në‹¹ì‹ ì´ í¼ì— 입력한 ì €ìž¥ëœ ì•”í˜¸.", IDC_DELETE_PASSWORDS, 10, 168, 230, 40, BS_TOP | BS_MULTILINE DEFPUSHBUTTON "취소", IDCANCEL, 185, 230, 60, 15, WS_GROUP - PUSHBUTTON "지우기", IDOK, 120, 230, 60, 15, WS_GROUP + PUSHBUTTON "지우기", IDOK, 120, 230, 60, 15 END diff --git a/dll/cpl/inetcpl/lang/lt-LT.rc b/dll/cpl/inetcpl/lang/lt-LT.rc index f550fd8413f..d37d53cdf7d 100644 --- a/dll/cpl/inetcpl/lang/lt-LT.rc +++ b/dll/cpl/inetcpl/lang/lt-LT.rc @@ -69,7 +69,7 @@ CAPTION "Å alinti narÅ¡ymo istorijÄ…" BEGIN AUTOCHECKBOX "Laikini interneto failai\nTinklalapių kopijos podÄ—lyje, paveikslai, liudijimai.", - IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE + IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP AUTOCHECKBOX "Slapukai\nTinklalapių kompiuteryje iÅ¡saugoti failai, kuriuose saugomi naudotojų nustatymai ir prisijungimo informacija.", IDC_DELETE_COOKIES, 10, 48, 230, 40, BS_TOP | BS_MULTILINE AUTOCHECKBOX "Istorija\nTinklalapių, kuriuos narÅ¡Ä—te, sÄ…raÅ¡as.", @@ -79,8 +79,7 @@ BEGIN AUTOCHECKBOX "Slaptažodžiai\nIÅ¡saugoti slaptažodžiai, kuriuos įvedÄ—te į formas.", IDC_DELETE_PASSWORDS, 10, 168, 230, 40, BS_TOP | BS_MULTILINE DEFPUSHBUTTON "Atsisakyti", IDCANCEL, 185, 230, 60, 15, WS_GROUP - PUSHBUTTON "Å alinti", IDOK, 120, 230, 60, 15, WS_GROUP - + PUSHBUTTON "Å alinti", IDOK, 120, 230, 60, 15 END /* "Security" propsheet */ diff --git a/dll/cpl/inetcpl/lang/nl-NL.rc b/dll/cpl/inetcpl/lang/nl-NL.rc index 8065123a4d2..653d2d5e3ab 100644 --- a/dll/cpl/inetcpl/lang/nl-NL.rc +++ b/dll/cpl/inetcpl/lang/nl-NL.rc @@ -66,7 +66,7 @@ CAPTION "Delete browsing history" BEGIN AUTOCHECKBOX "Temporary internet files\nCached copies of web pages, images and certificates.", - IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE + IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP AUTOCHECKBOX "Cookies\nFiles saved on your computer by websites, which store things like user preferences and login information.", IDC_DELETE_COOKIES, 10, 48, 230, 40, BS_TOP | BS_MULTILINE AUTOCHECKBOX "History\nList of websites you have accessed.", @@ -76,7 +76,7 @@ BEGIN AUTOCHECKBOX "Passwords\nSaved passwords you have entered into forms.", IDC_DELETE_PASSWORDS, 10, 168, 230, 40, BS_TOP | BS_MULTILINE DEFPUSHBUTTON "Cancel", IDCANCEL, 185, 230, 60, 15, WS_GROUP - PUSHBUTTON "Delete", IDOK, 120, 230, 60, 15, WS_GROUP + PUSHBUTTON "Delete", IDOK, 120, 230, 60, 15 END diff --git a/dll/cpl/inetcpl/lang/pl-PL.rc b/dll/cpl/inetcpl/lang/pl-PL.rc index 35057910bc7..dbb04c95e61 100644 --- a/dll/cpl/inetcpl/lang/pl-PL.rc +++ b/dll/cpl/inetcpl/lang/pl-PL.rc @@ -69,7 +69,7 @@ CAPTION "Usuwanie historii przeglÄ…dania" BEGIN AUTOCHECKBOX "Tymczasowe pliki internetowe\nKopie stron sieci Web, obrazów i certyfikatów.", - IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE + IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP AUTOCHECKBOX "Pliki cookies\nPliki przechowywane na komputerze przez witryny sieci Web w celu zapisania preferencji takich jak informacje logowania.", IDC_DELETE_COOKIES, 10, 48, 230, 40, BS_TOP | BS_MULTILINE AUTOCHECKBOX "Historia\nLista odwiedzonych witryn sieci Web.", @@ -79,7 +79,7 @@ BEGIN AUTOCHECKBOX "HasÅ‚a\nHasÅ‚a uzupeÅ‚niane automatycznie po zalogowaniu siÄ™ do wczeÅ›niej odwiedzonej witryny Web.", IDC_DELETE_PASSWORDS, 10, 168, 230, 40, BS_TOP | BS_MULTILINE DEFPUSHBUTTON "Anuluj", IDCANCEL, 185, 230, 60, 15, WS_GROUP - PUSHBUTTON "UsuÅ„", IDOK, 120, 230, 60, 15, WS_GROUP + PUSHBUTTON "UsuÅ„", IDOK, 120, 230, 60, 15 END diff --git a/dll/cpl/inetcpl/lang/pt-BR.rc b/dll/cpl/inetcpl/lang/pt-BR.rc index 6d67707f8fe..d8fc04bc5f2 100644 --- a/dll/cpl/inetcpl/lang/pt-BR.rc +++ b/dll/cpl/inetcpl/lang/pt-BR.rc @@ -68,7 +68,7 @@ CAPTION "Delete browsing history" BEGIN AUTOCHECKBOX "Temporary internet files\nCached copies of web pages, images and certificates.", - IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE + IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP AUTOCHECKBOX "Cookies\nFiles saved on your computer by websites, which store things like user preferences and login information.", IDC_DELETE_COOKIES, 10, 48, 230, 40, BS_TOP | BS_MULTILINE AUTOCHECKBOX "History\nList of websites you have accessed.", @@ -78,7 +78,7 @@ BEGIN AUTOCHECKBOX "Passwords\nSaved passwords you have entered into forms.", IDC_DELETE_PASSWORDS, 10, 168, 230, 40, BS_TOP | BS_MULTILINE DEFPUSHBUTTON "Cancel", IDCANCEL, 185, 230, 60, 15, WS_GROUP - PUSHBUTTON "Delete", IDOK, 120, 230, 60, 15, WS_GROUP + PUSHBUTTON "Delete", IDOK, 120, 230, 60, 15 END diff --git a/dll/cpl/inetcpl/lang/pt-PT.rc b/dll/cpl/inetcpl/lang/pt-PT.rc index c02cdcbdd75..139143a348d 100644 --- a/dll/cpl/inetcpl/lang/pt-PT.rc +++ b/dll/cpl/inetcpl/lang/pt-PT.rc @@ -69,7 +69,7 @@ CAPTION "Limpar histórico de navegação" BEGIN AUTOCHECKBOX "Ficheiros temporários da internet\nCópias de páginas web em cachê, imagens e certificados.", - IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE + IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP AUTOCHECKBOX "Cookies\nFicheiros guardados no computador, por websites que armazenam itens como preferências do utilizador e informações de início de sessão.", IDC_DELETE_COOKIES, 10, 48, 230, 40, BS_TOP | BS_MULTILINE AUTOCHECKBOX "Histórico\nLista de websites que visitou recentemente.", @@ -79,7 +79,7 @@ BEGIN AUTOCHECKBOX "Passwords\n Passwords que inseriu em formulários", IDC_DELETE_PASSWORDS, 10, 168, 230, 40, BS_TOP | BS_MULTILINE DEFPUSHBUTTON "Cancelar", IDCANCEL, 185, 230, 60, 15, WS_GROUP - PUSHBUTTON "Apagar", IDOK, 120, 230, 60, 15, WS_GROUP + PUSHBUTTON "Apagar", IDOK, 120, 230, 60, 15 END diff --git a/dll/cpl/inetcpl/lang/ro-RO.rc b/dll/cpl/inetcpl/lang/ro-RO.rc index aa60e9fda53..cf8d35cabed 100644 --- a/dll/cpl/inetcpl/lang/ro-RO.rc +++ b/dll/cpl/inetcpl/lang/ro-RO.rc @@ -68,7 +68,7 @@ CAPTION "Eliminare istoric de navigare" BEGIN AUTOCHECKBOX "FiÈ™ierele de internet t&emporare\nCopii ale paginilor temporar stocate, imagini È™i certificate.", - IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE + IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP AUTOCHECKBOX "InformaÈ›iile de &conexiune (Cookies)\nFiÈ™iere cu date precum informaÈ›ii de autentificare sau preferinÈ›e, stocate în calculatorul dumneavoastră din paginile vizitate.", IDC_DELETE_COOKIES, 10, 48, 230, 40, BS_TOP | BS_MULTILINE AUTOCHECKBOX "Ist&oricul\nLista paginilor pe care le-aÈ›i accesat în timp.", @@ -78,7 +78,7 @@ BEGIN AUTOCHECKBOX "&Parolele\nParolele salvate pe care le-aÈ›i introdus prin formulare.", IDC_DELETE_PASSWORDS, 10, 168, 230, 40, BS_TOP | BS_MULTILINE DEFPUSHBUTTON "A&nulează", IDCANCEL, 185, 230, 60, 15, WS_GROUP - PUSHBUTTON "&Elimină", IDOK, 120, 230, 60, 15, WS_GROUP + PUSHBUTTON "&Elimină", IDOK, 120, 230, 60, 15 END diff --git a/dll/cpl/inetcpl/lang/ru-RU.rc b/dll/cpl/inetcpl/lang/ru-RU.rc index 4380367c6dc..9a283ecc087 100644 --- a/dll/cpl/inetcpl/lang/ru-RU.rc +++ b/dll/cpl/inetcpl/lang/ru-RU.rc @@ -69,7 +69,7 @@ CAPTION "ОчиÑтка иÑтории" BEGIN AUTOCHECKBOX "Временные файлы\nКÑшированные копии Ñтраниц, изображений и Ñертификатов.", - IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE + IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP AUTOCHECKBOX "Файлы cookies\nФайлы, Ñохранённые на вашем компьютере, могут Ñодержать пользовательÑкие наÑтройки и информацию Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ð¸.", IDC_DELETE_COOKIES, 10, 48, 230, 40, BS_TOP | BS_MULTILINE AUTOCHECKBOX "ИÑториÑ\nПеречень Ñайтов, к которым оÑущеÑтвлÑлÑÑ Ð´Ð¾Ñтуп.", @@ -79,7 +79,7 @@ BEGIN AUTOCHECKBOX "Пароли\nСохранённые пароли, которые были указаны в веб-формах.", IDC_DELETE_PASSWORDS, 10, 168, 230, 40, BS_TOP | BS_MULTILINE DEFPUSHBUTTON "Отмена", IDCANCEL, 185, 230, 60, 15, WS_GROUP - PUSHBUTTON "Удалить", IDOK, 120, 230, 60, 15, WS_GROUP + PUSHBUTTON "Удалить", IDOK, 120, 230, 60, 15 END diff --git a/dll/cpl/inetcpl/lang/sq-AL.rc b/dll/cpl/inetcpl/lang/sq-AL.rc index a57ad508663..5f5c271eacc 100644 --- a/dll/cpl/inetcpl/lang/sq-AL.rc +++ b/dll/cpl/inetcpl/lang/sq-AL.rc @@ -68,7 +68,7 @@ CAPTION "Fshi historine e Shfletimit" BEGIN AUTOCHECKBOX "Dokumentat të përkohshëm të internetit\nKopje Kafazit te faqeveweb, imazhe dhe certifikata.", - IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE + IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP AUTOCHECKBOX "Rekorded\nDokumentat e ruajtur në kompjuterin tuaj nga faqet e internetit, e cila ruan gjëra si parapëlqimet e përdoruesit dhe informacionet e identifikimit.", IDC_DELETE_COOKIES, 10, 48, 230, 40, BS_TOP | BS_MULTILINE AUTOCHECKBOX "Historia\nLista e faqet e internetit që keni përdorur.", @@ -78,7 +78,7 @@ BEGIN AUTOCHECKBOX "Fjalëkalime\nFjalëkalime të ruajtura që kanë hyrë në forma.", IDC_DELETE_PASSWORDS, 10, 168, 230, 40, BS_TOP | BS_MULTILINE DEFPUSHBUTTON "Anulo", IDCANCEL, 185, 230, 60, 15, WS_GROUP - PUSHBUTTON "Fshi", IDOK, 120, 230, 60, 15, WS_GROUP + PUSHBUTTON "Fshi", IDOK, 120, 230, 60, 15 END diff --git a/dll/cpl/inetcpl/lang/sv-SE.rc b/dll/cpl/inetcpl/lang/sv-SE.rc index f78f8e7bee6..60887d9a7bf 100644 --- a/dll/cpl/inetcpl/lang/sv-SE.rc +++ b/dll/cpl/inetcpl/lang/sv-SE.rc @@ -68,7 +68,7 @@ CAPTION "Delete browsing history" BEGIN AUTOCHECKBOX "Temporary internet files\nCached copies of web pages, images and certificates.", - IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE + IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP AUTOCHECKBOX "Cookies\nFiles saved on your computer by websites, which store things like user preferences and login information.", IDC_DELETE_COOKIES, 10, 48, 230, 40, BS_TOP | BS_MULTILINE AUTOCHECKBOX "History\nList of websites you have accessed.", @@ -78,7 +78,7 @@ BEGIN AUTOCHECKBOX "Passwords\nSaved passwords you have entered into forms.", IDC_DELETE_PASSWORDS, 10, 168, 230, 40, BS_TOP | BS_MULTILINE DEFPUSHBUTTON "Avbryt", IDCANCEL, 185, 230, 60, 15, WS_GROUP - PUSHBUTTON "Ta bort", IDOK, 120, 230, 60, 15, WS_GROUP + PUSHBUTTON "Ta bort", IDOK, 120, 230, 60, 15 END diff --git a/dll/cpl/inetcpl/lang/tr-TR.rc b/dll/cpl/inetcpl/lang/tr-TR.rc index 76cff3f6790..b8897f98a52 100644 --- a/dll/cpl/inetcpl/lang/tr-TR.rc +++ b/dll/cpl/inetcpl/lang/tr-TR.rc @@ -69,7 +69,7 @@ CAPTION "Tarama GeçmiÅŸini Sil" BEGIN AUTOCHECKBOX "&Geçici Ä°nternet Dosyaları:\nÄ°nternet sayfalarının, resimlerin ve sertifikaların ön belleklenen kopyaları.", - IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE + IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP AUTOCHECKBOX "&Tanımlama Bilgileri:\nÄ°nternet siteleri tarafından bilgisayarınıza kaydedilmiÅŸ, kullanıcı tercihleri ve oturum açma bilgileri gibi ÅŸeyleri saklayan dosyalar.", IDC_DELETE_COOKIES, 10, 48, 230, 40, BS_TOP | BS_MULTILINE AUTOCHECKBOX "G&eçmiÅŸ:\nEriÅŸtiÄŸiniz Ä°nternet sitelerinin listesi.", @@ -79,7 +79,7 @@ BEGIN AUTOCHECKBOX "&Parolalar:\nFormlarda girdiÄŸiniz kaydedilmiÅŸ parolalar.", IDC_DELETE_PASSWORDS, 10, 168, 230, 40, BS_TOP | BS_MULTILINE DEFPUSHBUTTON "Ä°ptal", IDCANCEL, 185, 230, 60, 15, WS_GROUP - PUSHBUTTON "Sil", IDOK, 120, 230, 60, 15, WS_GROUP + PUSHBUTTON "Sil", IDOK, 120, 230, 60, 15 END diff --git a/dll/cpl/inetcpl/lang/uk-UA.rc b/dll/cpl/inetcpl/lang/uk-UA.rc index 83a850e85ea..debac95408d 100644 --- a/dll/cpl/inetcpl/lang/uk-UA.rc +++ b/dll/cpl/inetcpl/lang/uk-UA.rc @@ -70,7 +70,7 @@ CAPTION "Delete browsing history" BEGIN AUTOCHECKBOX "Temporary internet files\nCached copies of web pages, images and certificates.", - IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE + IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP AUTOCHECKBOX "Cookies\nFiles saved on your computer by websites, which store things like user preferences and login information.", IDC_DELETE_COOKIES, 10, 48, 230, 40, BS_TOP | BS_MULTILINE AUTOCHECKBOX "History\nList of websites you have accessed.", @@ -80,7 +80,7 @@ BEGIN AUTOCHECKBOX "Passwords\nSaved passwords you have entered into forms.", IDC_DELETE_PASSWORDS, 10, 168, 230, 40, BS_TOP | BS_MULTILINE DEFPUSHBUTTON "Cancel", IDCANCEL, 185, 230, 60, 15, WS_GROUP - PUSHBUTTON "Delete", IDOK, 120, 230, 60, 15, WS_GROUP + PUSHBUTTON "Delete", IDOK, 120, 230, 60, 15 END diff --git a/dll/cpl/inetcpl/lang/zh-CN.rc b/dll/cpl/inetcpl/lang/zh-CN.rc index fa220bf3ed4..bda45fa1a6f 100644 --- a/dll/cpl/inetcpl/lang/zh-CN.rc +++ b/dll/cpl/inetcpl/lang/zh-CN.rc @@ -67,7 +67,7 @@ CAPTION "删除æµè§ˆåŽ†å²è®°å½•" BEGIN AUTOCHECKBOX "Internet 临时文件\n缓存的网站页é¢ã€ 图åƒå’Œè¯ä¹¦çš„副本。", - IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE + IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP AUTOCHECKBOX "Cookies\n通过网站在您的计算机上ä¿å­˜æ–‡ä»¶å­˜å‚¨ç”¨æˆ·é¦–选项和登录信æ¯ã€‚", IDC_DELETE_COOKIES, 10, 48, 230, 40, BS_TOP | BS_MULTILINE AUTOCHECKBOX "历å²è®°å½•\n您进入的网站的列表。", @@ -77,7 +77,7 @@ BEGIN AUTOCHECKBOX "密ç \nä¿å­˜åœ¨çª—å£ä¸­è¾“入的密ç ã€‚", IDC_DELETE_PASSWORDS, 10, 168, 230, 40, BS_TOP | BS_MULTILINE DEFPUSHBUTTON "å–消", IDCANCEL, 185, 230, 60, 15, WS_GROUP - PUSHBUTTON "删除", IDOK, 120, 230, 60, 15, WS_GROUP + PUSHBUTTON "删除", IDOK, 120, 230, 60, 15 END diff --git a/dll/cpl/inetcpl/lang/zh-TW.rc b/dll/cpl/inetcpl/lang/zh-TW.rc index ecc5e8befcd..e253e74d487 100644 --- a/dll/cpl/inetcpl/lang/zh-TW.rc +++ b/dll/cpl/inetcpl/lang/zh-TW.rc @@ -66,7 +66,7 @@ CAPTION "刪除ç€è¦½æ­·å²è¨˜éŒ„" BEGIN AUTOCHECKBOX "暫時的網際網路檔案\n已快å–的網é ã€å½±åƒå’Œæ†‘證。", - IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE + IDC_DELETE_TEMP_FILES, 10, 8, 230, 40, BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP AUTOCHECKBOX "Cookie\n由網站儲存於您電腦的檔案,其存有諸如使用者å好設定和登入資訊。", IDC_DELETE_COOKIES, 10, 48, 230, 40, BS_TOP | BS_MULTILINE AUTOCHECKBOX "歷程記錄\n您曾存å–éŽçš„網站清單。", @@ -76,7 +76,7 @@ BEGIN AUTOCHECKBOX "密碼\n您曾輸入表單的已儲存密碼。", IDC_DELETE_PASSWORDS, 10, 168, 230, 40, BS_TOP | BS_MULTILINE DEFPUSHBUTTON "å–消", IDCANCEL, 185, 230, 60, 15, WS_GROUP - PUSHBUTTON "刪除", IDOK, 120, 230, 60, 15, WS_GROUP + PUSHBUTTON "刪除", IDOK, 120, 230, 60, 15 END From ad8392602e9605ee9991760587bb5702fe0e9443 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maj=20Sokli=C4=8D?= Date: Wed, 8 May 2024 19:00:02 +0200 Subject: [PATCH 120/182] [EVENTVWR] Fix missing keyboard navigation (#6835) CORE-19566 - Move IDC_NO_OVERWRITE right below IDC_OVERWRITE_OLDER_THAN; - Remove WS_GROUP from IDC_NO_OVERWRITE, IDC_OVERWRITE_OLDER_THAN and IDC_UPDOWN_EVENTS_AGE. --- base/applications/mscutils/eventvwr/lang/bg-BG.rc | 6 +++--- base/applications/mscutils/eventvwr/lang/cs-CZ.rc | 6 +++--- base/applications/mscutils/eventvwr/lang/de-DE.rc | 6 +++--- base/applications/mscutils/eventvwr/lang/el-GR.rc | 6 +++--- base/applications/mscutils/eventvwr/lang/en-US.rc | 6 +++--- base/applications/mscutils/eventvwr/lang/es-ES.rc | 6 +++--- base/applications/mscutils/eventvwr/lang/fr-FR.rc | 6 +++--- base/applications/mscutils/eventvwr/lang/he-IL.rc | 6 +++--- base/applications/mscutils/eventvwr/lang/it-IT.rc | 6 +++--- base/applications/mscutils/eventvwr/lang/ja-JP.rc | 6 +++--- base/applications/mscutils/eventvwr/lang/ko-KR.rc | 6 +++--- base/applications/mscutils/eventvwr/lang/no-NO.rc | 6 +++--- base/applications/mscutils/eventvwr/lang/pl-PL.rc | 6 +++--- base/applications/mscutils/eventvwr/lang/pt-BR.rc | 6 +++--- base/applications/mscutils/eventvwr/lang/pt-PT.rc | 6 +++--- base/applications/mscutils/eventvwr/lang/ro-RO.rc | 6 +++--- base/applications/mscutils/eventvwr/lang/ru-RU.rc | 6 +++--- base/applications/mscutils/eventvwr/lang/sk-SK.rc | 6 +++--- base/applications/mscutils/eventvwr/lang/sq-AL.rc | 6 +++--- base/applications/mscutils/eventvwr/lang/sv-SE.rc | 6 +++--- base/applications/mscutils/eventvwr/lang/tr-TR.rc | 6 +++--- base/applications/mscutils/eventvwr/lang/uk-UA.rc | 6 +++--- base/applications/mscutils/eventvwr/lang/zh-CN.rc | 6 +++--- base/applications/mscutils/eventvwr/lang/zh-HK.rc | 6 +++--- base/applications/mscutils/eventvwr/lang/zh-TW.rc | 6 +++--- 25 files changed, 75 insertions(+), 75 deletions(-) diff --git a/base/applications/mscutils/eventvwr/lang/bg-BG.rc b/base/applications/mscutils/eventvwr/lang/bg-BG.rc index bf718387cb6..9f71843e7df 100644 --- a/base/applications/mscutils/eventvwr/lang/bg-BG.rc +++ b/base/applications/mscutils/eventvwr/lang/bg-BG.rc @@ -138,12 +138,12 @@ BEGIN LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 - CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_TABSTOP, 17, 180, 143, 20 EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | - UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + UDS_AUTOBUDDY | UDS_ARROWKEYS, 157, 165, 10, 14 LTEXT "days", IDC_STATIC, 162, 168, 20, 8 - CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 diff --git a/base/applications/mscutils/eventvwr/lang/cs-CZ.rc b/base/applications/mscutils/eventvwr/lang/cs-CZ.rc index 2c63b73d320..b0dd9f71a3e 100644 --- a/base/applications/mscutils/eventvwr/lang/cs-CZ.rc +++ b/base/applications/mscutils/eventvwr/lang/cs-CZ.rc @@ -138,12 +138,12 @@ BEGIN LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 LTEXT "Pokud je dosažena maximální velikost:", IDC_STATIC, 17, 140, 219, 8 CONTROL "&PÅ™epsat události podle potÅ™eby", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 - CONTROL "PÅ™&epsat události starší než", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "PÅ™&epsat události starší než", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "&NepÅ™episovat události\n(vyÄistit protokol ruÄnÄ›)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_TABSTOP, 17, 180, 143, 20 EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | - UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + UDS_AUTOBUDDY | UDS_ARROWKEYS, 157, 165, 10, 14 LTEXT "dny", IDC_STATIC, 162, 168, 20, 8 - CONTROL "&NepÅ™episovat události\n(vyÄistit protokol ruÄnÄ›)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 PUSHBUTTON "&Obnovit výchozí", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 AUTOCHECKBOX "&Užívá pomalé pÅ™ipojení", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 PUSHBUTTON "&VyÄistit", ID_CLEARLOG, 195, 213, 50, 14 diff --git a/base/applications/mscutils/eventvwr/lang/de-DE.rc b/base/applications/mscutils/eventvwr/lang/de-DE.rc index 3838fdb1da8..309cd5807fd 100644 --- a/base/applications/mscutils/eventvwr/lang/de-DE.rc +++ b/base/applications/mscutils/eventvwr/lang/de-DE.rc @@ -139,12 +139,12 @@ BEGIN LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 LTEXT "Wenn die maximale Protokollgröße erreicht ist:", IDC_STATIC, 17, 140, 219, 8 CONTROL "&Ereignisse nach Bedarf überschreiben", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 - CONTROL "E&reignisse überschreiben, die älter als", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 142, 10 + CONTROL "E&reignisse überschreiben, die älter als", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 17, 168, 142, 10 + CONTROL "Erei&gnisse nie überschreiben\n(Protokoll manuell löschen)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_TABSTOP, 17, 180, 143, 20 EDITTEXT IDC_EDIT_EVENTS_AGE, 166, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | - UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 197, 165, 10, 14 + UDS_AUTOBUDDY | UDS_ARROWKEYS, 197, 165, 10, 14 LTEXT "Tage sind", IDC_STATIC, 202, 168, 40, 8 - CONTROL "Erei&gnisse nie überschreiben\n(Protokoll manuell löschen)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 PUSHBUTTON "Wie&derherstellen", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 AUTOCHECKBOX "&Niedrige Ãœbertragungsrate", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 PUSHBUTTON "Protokoll &löschen", ID_CLEARLOG, 180, 213, 65, 14 diff --git a/base/applications/mscutils/eventvwr/lang/el-GR.rc b/base/applications/mscutils/eventvwr/lang/el-GR.rc index 3f018b0fbd0..8f79ee4fd2f 100644 --- a/base/applications/mscutils/eventvwr/lang/el-GR.rc +++ b/base/applications/mscutils/eventvwr/lang/el-GR.rc @@ -138,12 +138,12 @@ BEGIN LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 - CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_TABSTOP, 17, 180, 143, 20 EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | - UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + UDS_AUTOBUDDY | UDS_ARROWKEYS, 157, 165, 10, 14 LTEXT "days", IDC_STATIC, 162, 168, 20, 8 - CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 diff --git a/base/applications/mscutils/eventvwr/lang/en-US.rc b/base/applications/mscutils/eventvwr/lang/en-US.rc index a2a4cf6d5f2..cfe3dafc00d 100644 --- a/base/applications/mscutils/eventvwr/lang/en-US.rc +++ b/base/applications/mscutils/eventvwr/lang/en-US.rc @@ -140,12 +140,12 @@ BEGIN LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 - CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_TABSTOP, 17, 180, 143, 20 EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | - UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + UDS_AUTOBUDDY | UDS_ARROWKEYS, 157, 165, 10, 14 LTEXT "days", IDC_STATIC, 162, 168, 20, 8 - CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 diff --git a/base/applications/mscutils/eventvwr/lang/es-ES.rc b/base/applications/mscutils/eventvwr/lang/es-ES.rc index df8493addad..8434492fbb6 100644 --- a/base/applications/mscutils/eventvwr/lang/es-ES.rc +++ b/base/applications/mscutils/eventvwr/lang/es-ES.rc @@ -141,12 +141,12 @@ BEGIN LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 LTEXT "Cuando se alcance el límite máximo del log:", IDC_STATIC, 17, 140, 219, 8 CONTROL "&Sobreescribir los eventos por necesidad", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 - CONTROL "Sobreescribir &eventos más viejos que", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "Sobreescribir &eventos más viejos que", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "&No sobreescribir eventos\n(borrar log manualmente)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_TABSTOP, 17, 180, 143, 20 EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | - UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + UDS_AUTOBUDDY | UDS_ARROWKEYS, 157, 165, 10, 14 LTEXT "días", IDC_STATIC, 162, 168, 20, 8 - CONTROL "&No sobreescribir eventos\n(borrar log manualmente)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 PUSHBUTTON "&Restaurar configuración", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 AUTOCHECKBOX "Usando una conexión de b&aja velocidad", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 PUSHBUTTON "&Borrar Log", ID_CLEARLOG, 195, 213, 50, 14 diff --git a/base/applications/mscutils/eventvwr/lang/fr-FR.rc b/base/applications/mscutils/eventvwr/lang/fr-FR.rc index 6742e43bc69..697955ff36f 100644 --- a/base/applications/mscutils/eventvwr/lang/fr-FR.rc +++ b/base/applications/mscutils/eventvwr/lang/fr-FR.rc @@ -139,12 +139,12 @@ BEGIN LTEXT "Ko", IDC_STATIC, 160, 122, 20, 8 LTEXT "Lorsque la taille maximale du journal est atteinte :", IDC_STATIC, 17, 140, 219, 8 CONTROL "Remplacer les événements si &nécessaire", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 - CONTROL "Remplacer les é&vénements datant de plus de", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 155, 10 + CONTROL "Remplacer les é&vénements datant de plus de", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 17, 168, 155, 10 + CONTROL "Ne &pas remplacer les événements\n(nettoyage manuel du journal)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_TABSTOP, 17, 180, 133, 20 EDITTEXT IDC_EDIT_EVENTS_AGE, 175, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | - UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 210, 165, 10, 14 + UDS_AUTOBUDDY | UDS_ARROWKEYS, 210, 165, 10, 14 LTEXT "jours", IDC_STATIC, 215, 168, 20, 8 - CONTROL "Ne &pas remplacer les événements\n(nettoyage manuel du journal)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 133, 20 PUSHBUTTON "Paramètres par &défaut", IDC_RESTOREDEFAULTS, 156, 183, 80, 14 AUTOCHECKBOX "Utiliser une connection à &basse vitesse", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 PUSHBUTTON "&Effacer le journal", ID_CLEARLOG, 180, 213, 65, 14 diff --git a/base/applications/mscutils/eventvwr/lang/he-IL.rc b/base/applications/mscutils/eventvwr/lang/he-IL.rc index a2ab5a4ef1a..1002947437e 100644 --- a/base/applications/mscutils/eventvwr/lang/he-IL.rc +++ b/base/applications/mscutils/eventvwr/lang/he-IL.rc @@ -138,12 +138,12 @@ BEGIN LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 - CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_TABSTOP, 17, 180, 143, 20 EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | - UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + UDS_AUTOBUDDY | UDS_ARROWKEYS, 157, 165, 10, 14 LTEXT "days", IDC_STATIC, 162, 168, 20, 8 - CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 diff --git a/base/applications/mscutils/eventvwr/lang/it-IT.rc b/base/applications/mscutils/eventvwr/lang/it-IT.rc index f4210df8938..4f859a42efe 100644 --- a/base/applications/mscutils/eventvwr/lang/it-IT.rc +++ b/base/applications/mscutils/eventvwr/lang/it-IT.rc @@ -139,12 +139,12 @@ BEGIN LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 - CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_TABSTOP, 17, 180, 143, 20 EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | - UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + UDS_AUTOBUDDY | UDS_ARROWKEYS, 157, 165, 10, 14 LTEXT "days", IDC_STATIC, 162, 168, 20, 8 - CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 diff --git a/base/applications/mscutils/eventvwr/lang/ja-JP.rc b/base/applications/mscutils/eventvwr/lang/ja-JP.rc index ef1dd0c2d41..2ff5c6d3ca0 100644 --- a/base/applications/mscutils/eventvwr/lang/ja-JP.rc +++ b/base/applications/mscutils/eventvwr/lang/ja-JP.rc @@ -139,12 +139,12 @@ BEGIN LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 LTEXT "最大ログサイズã«é”ã—ãŸã¨ã:", IDC_STATIC, 17, 140, 219, 8 CONTROL "å¿…è¦ã«å¿œã˜ã¦ã‚¤ãƒ™ãƒ³ãƒˆã‚’上書ãã™ã‚‹(&O)", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 - CONTROL "次ã®ã‚‚ã®ã‚ˆã‚Šå¤ã„イベントを上書ã(&V)", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "次ã®ã‚‚ã®ã‚ˆã‚Šå¤ã„イベントを上書ã(&V)", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "イベントを上書ãã—ãªã„(&N)\n(手動ã§ãƒ­ã‚°ã‚’クリアã™ã‚‹)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_TABSTOP, 17, 180, 143, 20 EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | - UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + UDS_AUTOBUDDY | UDS_ARROWKEYS, 157, 165, 10, 14 LTEXT "æ—¥", IDC_STATIC, 162, 168, 20, 8 - CONTROL "イベントを上書ãã—ãªã„(&N)\n(手動ã§ãƒ­ã‚°ã‚’クリアã™ã‚‹)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 PUSHBUTTON "デフォルトã«æˆ»ã™(&R)", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 AUTOCHECKBOX "低速ã®æŽ¥ç¶šã‚’使用ã™ã‚‹(&W)", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 PUSHBUTTON "ログをクリア(&C)", ID_CLEARLOG, 195, 213, 50, 14 diff --git a/base/applications/mscutils/eventvwr/lang/ko-KR.rc b/base/applications/mscutils/eventvwr/lang/ko-KR.rc index 472557f534b..66c32b023e4 100644 --- a/base/applications/mscutils/eventvwr/lang/ko-KR.rc +++ b/base/applications/mscutils/eventvwr/lang/ko-KR.rc @@ -138,12 +138,12 @@ BEGIN LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 - CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_TABSTOP, 17, 180, 143, 20 EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | - UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + UDS_AUTOBUDDY | UDS_ARROWKEYS, 157, 165, 10, 14 LTEXT "days", IDC_STATIC, 162, 168, 20, 8 - CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 diff --git a/base/applications/mscutils/eventvwr/lang/no-NO.rc b/base/applications/mscutils/eventvwr/lang/no-NO.rc index 1f61d570477..1c6e859f0ac 100644 --- a/base/applications/mscutils/eventvwr/lang/no-NO.rc +++ b/base/applications/mscutils/eventvwr/lang/no-NO.rc @@ -138,12 +138,12 @@ BEGIN LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 - CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_TABSTOP, 17, 180, 143, 20 EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | - UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + UDS_AUTOBUDDY | UDS_ARROWKEYS, 157, 165, 10, 14 LTEXT "days", IDC_STATIC, 162, 168, 20, 8 - CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 diff --git a/base/applications/mscutils/eventvwr/lang/pl-PL.rc b/base/applications/mscutils/eventvwr/lang/pl-PL.rc index 4ae59868563..2109bbf5b0a 100644 --- a/base/applications/mscutils/eventvwr/lang/pl-PL.rc +++ b/base/applications/mscutils/eventvwr/lang/pl-PL.rc @@ -141,12 +141,12 @@ BEGIN LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 LTEXT "Po osiÄ…gniÄ™ciu maksymalnego rozmiaru pliku dziennika:", IDC_STATIC, 17, 140, 219, 8 CONTROL "&ZastÄ…p zdarzenia w razie potrzeby", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 - CONTROL "Z&astÄ…p zdarzenia starsze niż", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "Z&astÄ…p zdarzenia starsze niż", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "&Nie zastÄ™puj zdarzeÅ„\n(rÄ™czne czyszczenie dziennika)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_TABSTOP, 17, 180, 143, 20 EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | - UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + UDS_AUTOBUDDY | UDS_ARROWKEYS, 157, 165, 10, 14 LTEXT "dni", IDC_STATIC, 162, 168, 20, 8 - CONTROL "&Nie zastÄ™puj zdarzeÅ„\n(rÄ™czne czyszczenie dziennika)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 PUSHBUTTON "&Przywróć domyÅ›lne", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 AUTOCHECKBOX "&Użyj poÅ‚Ä…czenia o maÅ‚ej szybkoÅ›ci", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 PUSHBUTTON "&Wyczyść dziennik", ID_CLEARLOG, 175, 213, 70, 14 diff --git a/base/applications/mscutils/eventvwr/lang/pt-BR.rc b/base/applications/mscutils/eventvwr/lang/pt-BR.rc index 2af3235bce4..2242e088670 100644 --- a/base/applications/mscutils/eventvwr/lang/pt-BR.rc +++ b/base/applications/mscutils/eventvwr/lang/pt-BR.rc @@ -138,12 +138,12 @@ BEGIN LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 - CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_TABSTOP, 17, 180, 143, 20 EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | - UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + UDS_AUTOBUDDY | UDS_ARROWKEYS, 157, 165, 10, 14 LTEXT "days", IDC_STATIC, 162, 168, 20, 8 - CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 diff --git a/base/applications/mscutils/eventvwr/lang/pt-PT.rc b/base/applications/mscutils/eventvwr/lang/pt-PT.rc index cdbadb16b17..81cc7631cc5 100644 --- a/base/applications/mscutils/eventvwr/lang/pt-PT.rc +++ b/base/applications/mscutils/eventvwr/lang/pt-PT.rc @@ -138,12 +138,12 @@ BEGIN LTEXT "KB", IDC_STATIC, 152, 122, 20, 8 LTEXT "Quando for alcançado o tamanho máximo do registo:", IDC_STATIC, 17, 140, 219, 8 CONTROL "Substituir eventos conforme o &necessário", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 - CONTROL "Substituir eventos &anteriores a:", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 127, 10 + CONTROL "Substituir eventos &anteriores a:", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 17, 168, 127, 10 + CONTROL "&Não substituir eventos\n(limpar registo manualmente)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_TABSTOP, 17, 180, 103, 20 EDITTEXT IDC_EDIT_EVENTS_AGE, 132, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | - UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 195, 165, 10, 14 + UDS_AUTOBUDDY | UDS_ARROWKEYS, 195, 165, 10, 14 LTEXT "dias", IDC_STATIC, 170, 168, 20, 8 - CONTROL "&Não substituir eventos\n(limpar registo manualmente)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 103, 20 PUSHBUTTON "&Restaurar predefinições", IDC_RESTOREDEFAULTS, 150, 183, 85, 14 AUTOCHECKBOX "Utilizar uma ligação de baixa &velocidade", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 PUSHBUTTON "&Limpar o registo", ID_CLEARLOG, 185, 213, 60, 14 diff --git a/base/applications/mscutils/eventvwr/lang/ro-RO.rc b/base/applications/mscutils/eventvwr/lang/ro-RO.rc index 8c239426470..30232495a38 100644 --- a/base/applications/mscutils/eventvwr/lang/ro-RO.rc +++ b/base/applications/mscutils/eventvwr/lang/ro-RO.rc @@ -140,12 +140,12 @@ BEGIN LTEXT "Kio", IDC_STATIC, 130, 122, 20, 8 LTEXT "Când dimensiunea maximă este atinsă:", IDC_STATIC, 17, 140, 219, 8 CONTROL "Suprascrie evenimentele cân&d este necesar", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 - CONTROL "Suprascrie evenimentele mai &vechi de", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 155, 10 + CONTROL "Suprascrie evenimentele mai &vechi de", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 17, 168, 155, 10 + CONTROL "Inter&zice suprascrierea\n(gestiune manuală de jurnal)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_TABSTOP, 17, 180, 143, 20 EDITTEXT IDC_EDIT_EVENTS_AGE, 175, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | - UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 104, 165, 10, 14 + UDS_AUTOBUDDY | UDS_ARROWKEYS, 104, 165, 10, 14 LTEXT "zile", IDC_STATIC, 215, 168, 20, 8 - CONTROL "Inter&zice suprascrierea\n(gestiune manuală de jurnal)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 PUSHBUTTON "&OpÈ›iuni implicite", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 AUTOCHECKBOX "Conexiune de &bandă limitată", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 PUSHBUTTON "&Curăță jurnal", ID_CLEARLOG, 195, 213, 50, 14 diff --git a/base/applications/mscutils/eventvwr/lang/ru-RU.rc b/base/applications/mscutils/eventvwr/lang/ru-RU.rc index efd2f52d1e0..80c96de7046 100644 --- a/base/applications/mscutils/eventvwr/lang/ru-RU.rc +++ b/base/applications/mscutils/eventvwr/lang/ru-RU.rc @@ -142,12 +142,12 @@ BEGIN LTEXT "КБ", IDC_STATIC, 130, 122, 20, 8 LTEXT "При доÑтижении макÑимального размера журнала:", IDC_STATIC, 17, 140, 219, 8 CONTROL "&Ð¡Ð¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸ÑываютÑÑ Ð¿Ð¾ мере необходимоÑти", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 - CONTROL "П&ерезапиÑываютÑÑ ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ñтарше, чем", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "П&ерезапиÑываютÑÑ ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ñтарше, чем", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "&Ðе перезапиÑывать ÑобытиÑ\n(журнал очищаетÑÑ Ð²Ñ€ÑƒÑ‡Ð½ÑƒÑŽ)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_TABSTOP, 17, 180, 143, 20 EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | - UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + UDS_AUTOBUDDY | UDS_ARROWKEYS, 157, 165, 10, 14 LTEXT "дней", IDC_STATIC, 162, 168, 20, 8 - CONTROL "&Ðе перезапиÑывать ÑобытиÑ\n(журнал очищаетÑÑ Ð²Ñ€ÑƒÑ‡Ð½ÑƒÑŽ)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 PUSHBUTTON "&По умолчанию", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 AUTOCHECKBOX "&ИÑпользуетÑÑ Ð½Ð¸Ð·ÐºÐ¾ÑкороÑтное подключение", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 PUSHBUTTON "&ОчиÑтить журнал", ID_CLEARLOG, 195, 213, 50, 14 diff --git a/base/applications/mscutils/eventvwr/lang/sk-SK.rc b/base/applications/mscutils/eventvwr/lang/sk-SK.rc index cd6acfbeeca..949d4fe6300 100644 --- a/base/applications/mscutils/eventvwr/lang/sk-SK.rc +++ b/base/applications/mscutils/eventvwr/lang/sk-SK.rc @@ -138,12 +138,12 @@ BEGIN LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 - CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_TABSTOP, 17, 180, 143, 20 EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | - UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + UDS_AUTOBUDDY | UDS_ARROWKEYS, 157, 165, 10, 14 LTEXT "days", IDC_STATIC, 162, 168, 20, 8 - CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 diff --git a/base/applications/mscutils/eventvwr/lang/sq-AL.rc b/base/applications/mscutils/eventvwr/lang/sq-AL.rc index cb8e23da409..ee1eae4d546 100644 --- a/base/applications/mscutils/eventvwr/lang/sq-AL.rc +++ b/base/applications/mscutils/eventvwr/lang/sq-AL.rc @@ -138,12 +138,12 @@ BEGIN LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 - CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_TABSTOP, 17, 180, 143, 20 EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | - UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + UDS_AUTOBUDDY | UDS_ARROWKEYS, 157, 165, 10, 14 LTEXT "days", IDC_STATIC, 162, 168, 20, 8 - CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 diff --git a/base/applications/mscutils/eventvwr/lang/sv-SE.rc b/base/applications/mscutils/eventvwr/lang/sv-SE.rc index 98ecb982810..62467874fc5 100644 --- a/base/applications/mscutils/eventvwr/lang/sv-SE.rc +++ b/base/applications/mscutils/eventvwr/lang/sv-SE.rc @@ -138,12 +138,12 @@ BEGIN LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 - CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_TABSTOP, 17, 180, 143, 20 EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | - UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + UDS_AUTOBUDDY | UDS_ARROWKEYS, 157, 165, 10, 14 LTEXT "days", IDC_STATIC, 162, 168, 20, 8 - CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 diff --git a/base/applications/mscutils/eventvwr/lang/tr-TR.rc b/base/applications/mscutils/eventvwr/lang/tr-TR.rc index b7dad5217c6..2159b6f3b6d 100644 --- a/base/applications/mscutils/eventvwr/lang/tr-TR.rc +++ b/base/applications/mscutils/eventvwr/lang/tr-TR.rc @@ -139,12 +139,12 @@ BEGIN LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 LTEXT "En büyük günlük boyutuna eriÅŸildiÄŸi zaman:", IDC_STATIC, 17, 140, 219, 8 CONTROL "&gerekli olduÄŸunda olayların üzerine yaz.", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 - CONTROL "&ÅŸundan daha eski olayların üzerine yaz.", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "&ÅŸundan daha eski olayların üzerine yaz.", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "&Olayların Ãœzerine Yazma\n(Elle Kayıtları Sil)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_TABSTOP, 17, 180, 143, 20 EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | - UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + UDS_AUTOBUDDY | UDS_ARROWKEYS, 157, 165, 10, 14 LTEXT "gün", IDC_STATIC, 162, 168, 20, 8 - CONTROL "&Olayların Ãœzerine Yazma\n(Elle Kayıtları Sil)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 PUSHBUTTON "V&arsayılanları Geri Getir", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 AUTOCHECKBOX "&Düşük Hızlı Bir BaÄŸlantı Kullan", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 PUSHBUTTON "Ka&yıtları Sil", ID_CLEARLOG, 195, 213, 50, 14 diff --git a/base/applications/mscutils/eventvwr/lang/uk-UA.rc b/base/applications/mscutils/eventvwr/lang/uk-UA.rc index f76a78c3629..4878eb5e807 100644 --- a/base/applications/mscutils/eventvwr/lang/uk-UA.rc +++ b/base/applications/mscutils/eventvwr/lang/uk-UA.rc @@ -140,12 +140,12 @@ BEGIN LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 - CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_TABSTOP, 17, 180, 143, 20 EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | - UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + UDS_AUTOBUDDY | UDS_ARROWKEYS, 157, 165, 10, 14 LTEXT "days", IDC_STATIC, 162, 168, 20, 8 - CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 diff --git a/base/applications/mscutils/eventvwr/lang/zh-CN.rc b/base/applications/mscutils/eventvwr/lang/zh-CN.rc index 35ea38b2949..eceffdb1089 100644 --- a/base/applications/mscutils/eventvwr/lang/zh-CN.rc +++ b/base/applications/mscutils/eventvwr/lang/zh-CN.rc @@ -140,12 +140,12 @@ BEGIN LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 LTEXT "达到日志大å°ä¸Šé™æ—¶ï¼š", IDC_STATIC, 17, 140, 219, 8 CONTROL "按需è¦è¦†ç›–事件(&O)", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 - CONTROL "覆盖时间超过(&V)", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "覆盖时间超过(&V)", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "ä¸è¦†ç›–事件(&N)\n(手动清除日志)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_TABSTOP, 17, 180, 143, 20 EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | - UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + UDS_AUTOBUDDY | UDS_ARROWKEYS, 157, 165, 10, 14 LTEXT "天的事件", IDC_STATIC, 162, 168, 20, 8 - CONTROL "ä¸è¦†ç›–事件(&N)\n(手动清除日志)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 PUSHBUTTON "还原为默认值(&R)", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 AUTOCHECKBOX "使用低速连接(&W)", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 PUSHBUTTON "清除日志(&C)", ID_CLEARLOG, 195, 213, 50, 14 diff --git a/base/applications/mscutils/eventvwr/lang/zh-HK.rc b/base/applications/mscutils/eventvwr/lang/zh-HK.rc index dbc7ec41a85..d20fe3ca175 100644 --- a/base/applications/mscutils/eventvwr/lang/zh-HK.rc +++ b/base/applications/mscutils/eventvwr/lang/zh-HK.rc @@ -139,12 +139,12 @@ BEGIN LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 LTEXT "當記錄檔大å°é”到最大時:", IDC_STATIC, 17, 140, 219, 8 CONTROL "按需è¦è¦†å¯«äº‹ä»¶(&O)", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 - CONTROL "覆寫舊於指定時間的事件(&V)", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "覆寫舊於指定時間的事件(&V)", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "ä¸è¦è¦†å¯«äº‹ä»¶(&N)\n(手動清除記錄)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_TABSTOP, 17, 180, 143, 20 EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | - UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + UDS_AUTOBUDDY | UDS_ARROWKEYS, 157, 165, 10, 14 LTEXT "æ—¥", IDC_STATIC, 162, 168, 20, 8 - CONTROL "ä¸è¦è¦†å¯«äº‹ä»¶(&N)\n(手動清除記錄)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 PUSHBUTTON "還原到é è¨­å€¼(&R)", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 AUTOCHECKBOX "使用低速連線(&W)", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 PUSHBUTTON "清除記錄(&C)", ID_CLEARLOG, 195, 213, 50, 14 diff --git a/base/applications/mscutils/eventvwr/lang/zh-TW.rc b/base/applications/mscutils/eventvwr/lang/zh-TW.rc index 5515e97c3e0..660171d082f 100644 --- a/base/applications/mscutils/eventvwr/lang/zh-TW.rc +++ b/base/applications/mscutils/eventvwr/lang/zh-TW.rc @@ -139,12 +139,12 @@ BEGIN LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 LTEXT "當記錄檔大å°é”到最大時:", IDC_STATIC, 17, 140, 219, 8 CONTROL "按需è¦è¦†å¯«äº‹ä»¶(&O)", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 - CONTROL "覆寫舊於指定時間的事件(&V)", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "覆寫舊於指定時間的事件(&V)", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 17, 168, 102, 10 + CONTROL "ä¸è¦è¦†å¯«äº‹ä»¶(&N)\n(手動清除記錄)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_TABSTOP, 17, 180, 143, 20 EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | - UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + UDS_AUTOBUDDY | UDS_ARROWKEYS, 157, 165, 10, 14 LTEXT "天", IDC_STATIC, 162, 168, 20, 8 - CONTROL "ä¸è¦è¦†å¯«äº‹ä»¶(&N)\n(手動清除記錄)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 PUSHBUTTON "還原至é è¨­å€¼(&R)", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 AUTOCHECKBOX "使用低速連線(&W)", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 PUSHBUTTON "清除記錄(&C)", ID_CLEARLOG, 195, 213, 50, 14 From 57b775ef6ec27524a27784cf0cd6e8e4479c6782 Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Wed, 8 May 2024 23:58:54 +0200 Subject: [PATCH 121/182] [RAPPS] Automatically generate installer/uninstaller for downloaded zip/cab files (#6652) With a single database line added to applications distributed as zip/cab allows rapps.exe to act as an installer that automatically extracts the files and creates a startmenu shortcut. It can also uninstall the extracted files (and optionally other files and registry entries created by the application). --- base/applications/rapps/CMakeLists.txt | 7 +- base/applications/rapps/appdb.cpp | 175 ++-- base/applications/rapps/appinfo.cpp | 67 +- base/applications/rapps/cabinet.cpp | 32 +- base/applications/rapps/configparser.cpp | 53 ++ base/applications/rapps/geninst.cpp | 817 ++++++++++++++++++ base/applications/rapps/gui.cpp | 4 +- base/applications/rapps/include/appdb.h | 18 +- base/applications/rapps/include/appinfo.h | 52 +- .../applications/rapps/include/configparser.h | 6 + base/applications/rapps/include/misc.h | 65 +- base/applications/rapps/include/resource.h | 3 + base/applications/rapps/include/unattended.h | 3 + base/applications/rapps/lang/bg-BG.rc | 5 + base/applications/rapps/lang/cs-CZ.rc | 5 + base/applications/rapps/lang/de-DE.rc | 5 + base/applications/rapps/lang/en-US.rc | 5 + base/applications/rapps/lang/es-ES.rc | 5 + base/applications/rapps/lang/et-EE.rc | 5 + base/applications/rapps/lang/fr-FR.rc | 5 + base/applications/rapps/lang/he-IL.rc | 5 + base/applications/rapps/lang/hu-HU.rc | 5 + base/applications/rapps/lang/id-ID.rc | 5 + base/applications/rapps/lang/it-IT.rc | 5 + base/applications/rapps/lang/ja-JP.rc | 5 + base/applications/rapps/lang/no-NO.rc | 5 + base/applications/rapps/lang/pl-PL.rc | 5 + base/applications/rapps/lang/pt-BR.rc | 5 + base/applications/rapps/lang/pt-PT.rc | 5 + base/applications/rapps/lang/ro-RO.rc | 5 + base/applications/rapps/lang/ru-RU.rc | 5 + base/applications/rapps/lang/sk-SK.rc | 5 + base/applications/rapps/lang/sq-AL.rc | 5 + base/applications/rapps/lang/sv-SE.rc | 5 + base/applications/rapps/lang/tr-TR.rc | 5 + base/applications/rapps/lang/uk-UA.rc | 5 + base/applications/rapps/lang/zh-CN.rc | 5 + base/applications/rapps/lang/zh-HK.rc | 5 + base/applications/rapps/lang/zh-TW.rc | 5 + base/applications/rapps/loaddlg.cpp | 26 +- base/applications/rapps/misc.cpp | 170 +++- base/applications/rapps/unattended.cpp | 114 +++ base/applications/rapps/winmain.cpp | 1 + 43 files changed, 1622 insertions(+), 121 deletions(-) create mode 100644 base/applications/rapps/geninst.cpp diff --git a/base/applications/rapps/CMakeLists.txt b/base/applications/rapps/CMakeLists.txt index 5f3bbcc3cca..b53f91087af 100644 --- a/base/applications/rapps/CMakeLists.txt +++ b/base/applications/rapps/CMakeLists.txt @@ -2,6 +2,9 @@ project(rapps) include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/cryptlib) include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/conutils) +include_directories( + ${REACTOS_SOURCE_DIR}/sdk/include/reactos/libs/zlib + ${REACTOS_SOURCE_DIR}/sdk/lib/3rdparty/zlib/contrib) include_directories(include) list(APPEND SOURCE @@ -11,6 +14,7 @@ list(APPEND SOURCE asyncinet.cpp cabinet.cpp configparser.cpp + geninst.cpp gui.cpp integrity.cpp loaddlg.cpp @@ -35,6 +39,7 @@ list(APPEND SOURCE include/settings.h include/unattended.h include/winmain.h + ${ZLIB_SOURCE} ) add_definitions( @@ -44,7 +49,7 @@ file(GLOB_RECURSE rapps_rc_deps res/*.*) add_rc_deps(rapps.rc ${rapps_rc_deps}) add_executable(rapps ${SOURCE} rapps.rc) set_module_type(rapps win32gui UNICODE) -target_link_libraries(rapps conutils ${PSEH_LIB} uuid wine cpprt atl_classes) +target_link_libraries(rapps conutils ${PSEH_LIB} uuid wine cpprt atl_classes minizip zlib) add_importlibs(rapps advapi32 comctl32 gdi32 wininet user32 shell32 shlwapi ole32 setupapi gdiplus msvcrt kernel32 ntdll) add_pch(rapps include/rapps.h SOURCE) add_dependencies(rapps rappsmsg) diff --git a/base/applications/rapps/appdb.cpp b/base/applications/rapps/appdb.cpp index 02a404f9f53..97ba9626a64 100644 --- a/base/applications/rapps/appdb.cpp +++ b/base/applications/rapps/appdb.cpp @@ -14,7 +14,7 @@ static HKEY g_RootKeyEnum[3] = {HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_LOCAL_MACHINE}; -static REGSAM g_RegSamEnum[3] = {KEY_WOW64_32KEY, KEY_WOW64_32KEY, KEY_WOW64_64KEY}; +static REGSAM g_RegSamEnum[3] = {0, KEY_WOW64_32KEY, KEY_WOW64_64KEY}; #define UNINSTALL_SUBKEY L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall" static VOID @@ -34,8 +34,8 @@ CAppDB::CAppDB(const CStringW &path) : m_BasePath(path) m_BasePath.Canonicalize(); } -CAppInfo * -CAppDB::FindByPackageName(const CStringW &name) +CAvailableApplicationInfo * +CAppDB::FindAvailableByPackageName(const CStringW &name) { POSITION CurrentListPosition = m_Available.GetHeadPosition(); while (CurrentListPosition) @@ -43,7 +43,7 @@ CAppDB::FindByPackageName(const CStringW &name) CAppInfo *Info = m_Available.GetNext(CurrentListPosition); if (Info->szIdentifier == name) { - return Info; + return static_cast(Info); } } return NULL; @@ -97,7 +97,7 @@ CAppDB::EnumerateFiles() { CConfigParser *Parser = new CConfigParser(CPathW(AppsPath) += FindFileData.cFileName); int Cat; - if (!Parser->GetInt(L"Category", Cat)) + if (!Parser->GetInt(DB_CATEGORY, Cat)) Cat = ENUM_INVALID; Info = new CAvailableApplicationInfo(Parser, szPkgName, static_cast(Cat), AppsPath); @@ -141,74 +141,123 @@ CAppDB::UpdateAvailable() EnumerateFiles(); } -VOID -CAppDB::UpdateInstalled() +static inline HKEY +GetRootKeyInfo(UINT Index, REGSAM &RegSam) { - // Remove all old entries - ClearList(m_Installed); + C_ASSERT(_countof(g_RootKeyEnum) == _countof(g_RegSamEnum)); + if (Index < _countof(g_RootKeyEnum)) + { + RegSam = g_RegSamEnum[Index]; + return g_RootKeyEnum[Index]; + } + return NULL; +} - int LoopKeys = 2; +HKEY +CAppDB::EnumInstalledRootKey(UINT Index, REGSAM &RegSam) +{ + // Loop for through all combinations. + // Note that HKEY_CURRENT_USER\Software does not have a redirect + // https://docs.microsoft.com/en-us/windows/win32/winprog64/shared-registry-keys#redirected-shared-and-reflected-keys-under-wow64 + if (Index < (IsSystem64Bit() ? 3 : 2)) + return GetRootKeyInfo(Index, RegSam); + else + return NULL; +} - if (IsSystem64Bit()) +CInstalledApplicationInfo * +CAppDB::CreateInstalledAppByRegistryKey(LPCWSTR KeyName, HKEY hKeyParent, UINT KeyIndex) +{ + CRegKey hSubKey; + if (hSubKey.Open(hKeyParent, KeyName, KEY_READ) != ERROR_SUCCESS) + return NULL; + DWORD value, size; + + size = sizeof(DWORD); + if (!RegQueryValueExW(hSubKey, L"SystemComponent", NULL, NULL, (LPBYTE)&value, &size) && value == 1) { - // loop for all 3 combination. - // note that HKEY_CURRENT_USER\Software don't have a redirect - // https://docs.microsoft.com/en-us/windows/win32/winprog64/shared-registry-keys#redirected-shared-and-reflected-keys-under-wow64 - LoopKeys = 3; + // Ignore system components + return NULL; } - for (int keyIndex = 0; keyIndex < LoopKeys; keyIndex++) + size = 0; + BOOL bIsUpdate = !RegQueryValueExW(hSubKey, L"ParentKeyName", NULL, NULL, NULL, &size); + + AppsCategories cat = bIsUpdate ? ENUM_UPDATES : ENUM_INSTALLED_APPLICATIONS; + CInstalledApplicationInfo *pInfo; + pInfo = new CInstalledApplicationInfo(hSubKey.Detach(), KeyName, cat, KeyIndex); + if (pInfo && pInfo->Valid()) { - LONG ItemIndex = 0; - WCHAR szKeyName[MAX_PATH]; + return pInfo; + } + delete pInfo; + return NULL; +} +CInstalledApplicationInfo * +CAppDB::EnumerateRegistry(CAtlList *List, LPCWSTR SearchOnly) +{ + ATLASSERT(List || SearchOnly); + REGSAM wowsam; + HKEY hRootKey; + for (UINT rki = 0; (hRootKey = EnumInstalledRootKey(rki, wowsam)); ++rki) + { CRegKey hKey; - if (hKey.Open(g_RootKeyEnum[keyIndex], UNINSTALL_SUBKEY, KEY_READ | g_RegSamEnum[keyIndex]) != ERROR_SUCCESS) + if (hKey.Open(hRootKey, UNINSTALL_SUBKEY, KEY_READ | wowsam) != ERROR_SUCCESS) { continue; } - - while (1) + for (DWORD Index = 0;; ++Index) { + WCHAR szKeyName[MAX_PATH]; DWORD dwSize = _countof(szKeyName); - if (hKey.EnumKey(ItemIndex, szKeyName, &dwSize) != ERROR_SUCCESS) + if (hKey.EnumKey(Index, szKeyName, &dwSize) != ERROR_SUCCESS) { break; } - - ItemIndex++; - - CRegKey hSubKey; - if (hSubKey.Open(hKey, szKeyName, KEY_READ) == ERROR_SUCCESS) + if (List || !StrCmpIW(SearchOnly, szKeyName)) { - DWORD dwValue = 0; - - dwSize = sizeof(DWORD); - if (RegQueryValueExW(hSubKey, L"SystemComponent", NULL, NULL, (LPBYTE)&dwValue, &dwSize) == - ERROR_SUCCESS && - dwValue == 1) + CInstalledApplicationInfo *Info; + Info = CreateInstalledAppByRegistryKey(szKeyName, hKey, rki); + if (Info) { - // Ignore system components - continue; + if (List) + List->AddTail(Info); + else + return Info; } + } + } + } + return NULL; +} - BOOL bIsUpdate = - (RegQueryValueExW(hSubKey, L"ParentKeyName", NULL, NULL, NULL, &dwSize) == ERROR_SUCCESS); +VOID +CAppDB::UpdateInstalled() +{ + // Remove all old entries + ClearList(m_Installed); - CInstalledApplicationInfo *Info = new CInstalledApplicationInfo( - hSubKey.Detach(), szKeyName, bIsUpdate ? ENUM_UPDATES : ENUM_INSTALLED_APPLICATIONS, keyIndex); + EnumerateRegistry(&m_Installed, NULL); +} - if (Info->Valid()) - { - m_Installed.AddTail(Info); - } - else - { - delete Info; - } - } - } +CInstalledApplicationInfo * +CAppDB::CreateInstalledAppByRegistryKey(LPCWSTR Name) +{ + return EnumerateRegistry(NULL, Name); +} + +CInstalledApplicationInfo * +CAppDB::CreateInstalledAppInstance(LPCWSTR KeyName, BOOL User, REGSAM WowSam) +{ + HKEY hRootKey = User ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE; + UINT KeyIndex = User ? (0) : ((WowSam & KEY_WOW64_64KEY) ? 2 : 1); + CRegKey hKey; + if (hKey.Open(hRootKey, UNINSTALL_SUBKEY, KEY_READ | WowSam) == ERROR_SUCCESS) + { + return CreateInstalledAppByRegistryKey(KeyName, hKey, KeyIndex); } + return NULL; } static void @@ -262,30 +311,28 @@ CAppDB::RemoveCached() RemoveDirectoryW(m_BasePath); } -BOOL +DWORD CAppDB::RemoveInstalledAppFromRegistry(const CAppInfo *Info) { // Validate that this is actually an installed app / update ATLASSERT(Info->iCategory == ENUM_INSTALLED_APPLICATIONS || Info->iCategory == ENUM_UPDATES); if (Info->iCategory != ENUM_INSTALLED_APPLICATIONS && Info->iCategory != ENUM_UPDATES) - return FALSE; + return ERROR_INVALID_PARAMETER; - // Grab the index in the registry keys const CInstalledApplicationInfo *InstalledInfo = static_cast(Info); - ATLASSERT(InstalledInfo->iKeyIndex >= 0 && InstalledInfo->iKeyIndex < (int)_countof(g_RootKeyEnum)); - if (InstalledInfo->iKeyIndex < 0 && InstalledInfo->iKeyIndex >= (int)_countof(g_RootKeyEnum)) - return FALSE; - - int keyIndex = InstalledInfo->iKeyIndex; - // Grab the registry key name CStringW Name = InstalledInfo->szIdentifier; + REGSAM wowsam; + HKEY hRoot = GetRootKeyInfo(InstalledInfo->m_KeyInfo, wowsam); + ATLASSERT(hRoot); + if (!hRoot) + return ERROR_OPEN_FAILED; - // Recursively delete this key CRegKey Uninstall; - if (Uninstall.Open(g_RootKeyEnum[keyIndex], UNINSTALL_SUBKEY, KEY_READ | KEY_WRITE | g_RegSamEnum[keyIndex]) != - ERROR_SUCCESS) - return FALSE; - - return Uninstall.RecurseDeleteKey(Name) == ERROR_SUCCESS; + LSTATUS err = Uninstall.Open(hRoot, UNINSTALL_SUBKEY, KEY_READ | KEY_WRITE | wowsam); + if (err == ERROR_SUCCESS) + { + err = Uninstall.RecurseDeleteKey(Name); + } + return err; } diff --git a/base/applications/rapps/appinfo.cpp b/base/applications/rapps/appinfo.cpp index 7e00c4224e8..eefbb91d2e5 100644 --- a/base/applications/rapps/appinfo.cpp +++ b/base/applications/rapps/appinfo.cpp @@ -116,7 +116,7 @@ VOID CAvailableApplicationInfo::InsertVersionInfo(CAppRichEdit *RichEdit) { CStringW szRegName; - m_Parser->GetString(L"RegName", szRegName); + m_Parser->GetString(DB_REGNAME, szRegName); BOOL bIsInstalled = ::GetInstalledVersion(NULL, szRegName) || ::GetInstalledVersion(NULL, szDisplayName); if (bIsInstalled) @@ -131,11 +131,14 @@ CAvailableApplicationInfo::InsertVersionInfo(CAppRichEdit *RichEdit) { BOOL bHasUpdate = CompareVersion(szInstalledVersion, szDisplayVersion) < 0; if (bHasUpdate) + { RichEdit->LoadAndInsertText(IDS_STATUS_UPDATE_AVAILABLE, CFE_ITALIC); + RichEdit->LoadAndInsertText(IDS_AINFO_VERSION, szInstalledVersion, 0); + } else + { RichEdit->LoadAndInsertText(IDS_STATUS_INSTALLED, CFE_ITALIC); - - RichEdit->LoadAndInsertText(IDS_AINFO_VERSION, szInstalledVersion, 0); + } } else { @@ -364,8 +367,19 @@ CAvailableApplicationInfo::GetDisplayInfo(CStringW &License, CStringW &Size, CSt UrlDownload = m_szUrlDownload; } +InstallerType +CAvailableApplicationInfo::GetInstallerType() const +{ + CStringW str; + m_Parser->GetString(DB_INSTALLER, str); + if (str.CompareNoCase(DB_GENINSTSECTION) == 0) + return INSTALLER_GENERATE; + else + return INSTALLER_UNKNOWN; +} + BOOL -CAvailableApplicationInfo::UninstallApplication(BOOL bModify) +CAvailableApplicationInfo::UninstallApplication(UninstallCommandFlags Flags) { ATLASSERT(FALSE && "Should not be called"); return FALSE; @@ -374,9 +388,8 @@ CAvailableApplicationInfo::UninstallApplication(BOOL bModify) CInstalledApplicationInfo::CInstalledApplicationInfo( HKEY Key, const CStringW &KeyName, - AppsCategories Category, - int KeyIndex) - : CAppInfo(KeyName, Category), m_hKey(Key), iKeyIndex(KeyIndex) + AppsCategories Category, UINT KeyInfo) + : CAppInfo(KeyName, Category), m_hKey(Key), m_KeyInfo(KeyInfo) { if (GetApplicationRegString(L"DisplayName", szDisplayName)) { @@ -561,15 +574,51 @@ CInstalledApplicationInfo::GetDisplayInfo(CStringW &License, CStringW &Size, CSt ATLASSERT(FALSE && "Should not be called"); } +InstallerType +CInstalledApplicationInfo::GetInstallerType() const +{ + CRegKey reg; + if (reg.Open(m_hKey, GENERATE_ARPSUBKEY, KEY_READ) == ERROR_SUCCESS) + { + return INSTALLER_GENERATE; + } + return INSTALLER_UNKNOWN; +} + BOOL -CInstalledApplicationInfo::UninstallApplication(BOOL bModify) +CInstalledApplicationInfo::UninstallApplication(UninstallCommandFlags Flags) { + if (GetInstallerType() == INSTALLER_GENERATE) + { + return UninstallGenerated(*this, Flags); + } + + BOOL bModify = Flags & UCF_MODIFY; if (m_szUninstallString.IsEmpty()) { RetrieveUninstallStrings(); } - BOOL bSuccess = StartProcess(bModify ? m_szModifyString : m_szUninstallString, TRUE); + CStringW cmd = bModify ? m_szModifyString : m_szUninstallString; + if ((Flags & (UCF_MODIFY | UCF_SILENT)) == UCF_SILENT) + { + DWORD msi = 0; + msi = GetApplicationRegDword(L"WindowsInstaller", &msi) && msi; + if (msi) + { + cmd += L" /qn"; + } + else + { + CStringW silentcmd; + if (GetApplicationRegString(L"QuietUninstallString", silentcmd) && !silentcmd.IsEmpty()) + { + cmd = silentcmd; + } + } + } + + BOOL bSuccess = StartProcess(cmd, TRUE); if (bSuccess && !bModify) WriteLogMessage(EVENTLOG_SUCCESS, MSG_SUCCESS_REMOVE, szDisplayName); diff --git a/base/applications/rapps/cabinet.cpp b/base/applications/rapps/cabinet.cpp index a86ad8cecc2..46b9484f161 100644 --- a/base/applications/rapps/cabinet.cpp +++ b/base/applications/rapps/cabinet.cpp @@ -53,6 +53,13 @@ MultiByteToWide(const CStringA &szSource, CStringW &szDest, UINT Codepage) return sz != 0; } +struct NotifyData +{ + EXTRACTCALLBACK Callback; + void *CallerCookie; + LPCSTR OutputDir; +}; + /* FDICreate callbacks */ FNALLOC(fnMemAlloc) @@ -143,6 +150,7 @@ FNSEEK(fnFileSeek) FNFDINOTIFY(fnNotify) { INT_PTR iResult = 0; + NotifyData *pND = (NotifyData *)pfdin->pv; switch (fdint) { @@ -151,9 +159,15 @@ FNFDINOTIFY(fnNotify) CStringW szExtractDir, szCabFileName; // Append the destination directory to the file name. - MultiByteToWide((LPCSTR)pfdin->pv, szExtractDir, CP_UTF8); + MultiByteToWide(pND->OutputDir, szExtractDir, CP_UTF8); MultiByteToWide(pfdin->psz1, szCabFileName, CP_ACP); + if (!NotifyFileExtractCallback(szCabFileName, pfdin->cb, pfdin->attribs, + pND->Callback, pND->CallerCookie)) + { + break; // Skip file + } + if (szCabFileName.Find('\\') >= 0) { CStringW szNewDirName = szExtractDir; @@ -230,10 +244,10 @@ typedef BOOL (*fnFDIDestroy)(HFDI); /* * Extraction function - * TODO: require only a full path to the cab as an argument */ BOOL -ExtractFilesFromCab(const CStringW &szCabName, const CStringW &szCabDir, const CStringW &szOutputDir) +ExtractFilesFromCab(const CStringW &szCabName, const CStringW &szCabDir, const CStringW &szOutputDir, + EXTRACTCALLBACK Callback, void *Cookie) { HINSTANCE hCabinetDll; HFDI ExtractHandler; @@ -243,6 +257,7 @@ ExtractFilesFromCab(const CStringW &szCabName, const CStringW &szCabDir, const C fnFDICopy pfnFDICopy; fnFDIDestroy pfnFDIDestroy; BOOL bResult; + NotifyData nd = { Callback, Cookie }; // Load cabinet.dll and extract needed functions hCabinetDll = LoadLibraryW(L"cabinet.dll"); @@ -290,12 +305,21 @@ ExtractFilesFromCab(const CStringW &szCabName, const CStringW &szCabDir, const C // Add a slash to cab name as required by the api szCabNameUTF8 = "\\" + szCabNameUTF8; + nd.OutputDir = szOutputDirUTF8.GetString(); bResult = pfnFDICopy( ExtractHandler, (LPSTR)szCabNameUTF8.GetString(), (LPSTR)szCabDirUTF8.GetString(), 0, fnNotify, NULL, - (void FAR *)szOutputDirUTF8.GetString()); + (void FAR *)&nd); } pfnFDIDestroy(ExtractHandler); FreeLibrary(hCabinetDll); return bResult; } + +BOOL +ExtractFilesFromCab(LPCWSTR FullCabPath, const CStringW &szOutputDir, + EXTRACTCALLBACK Callback, void *Cookie) +{ + CStringW dir, file = SplitFileAndDirectory(FullCabPath, &dir); + return ExtractFilesFromCab(file, dir, szOutputDir, Callback, Cookie); +} diff --git a/base/applications/rapps/configparser.cpp b/base/applications/rapps/configparser.cpp index d550fbaedd4..fbe2c917c01 100644 --- a/base/applications/rapps/configparser.cpp +++ b/base/applications/rapps/configparser.cpp @@ -25,6 +25,20 @@ struct CSectionNames }; static CSectionNames g_Names; +HRESULT +ReadIniValue(LPCWSTR File, LPCWSTR Section, LPCWSTR Name, CStringW &Output) +{ + for (DWORD len = 256, ret;; len *= 2) + { + ret = GetPrivateProfileString(Section, Name, L"\n", Output.GetBuffer(len), len, File); + if (ret + 1 != len) + { + Output.ReleaseBuffer(ret); + return ret && Output[0] != L'\n' ? ret : HRESULT_FROM_WIN32(ERROR_NOT_FOUND); + } + } +} + CConfigParser::CConfigParser(const CStringW &FilePath) : szConfigPath(FilePath) { CacheINI(); @@ -166,3 +180,42 @@ CConfigParser::GetInt(const CStringW &KeyName, INT &iResult) // we only care about values > 0 return (iResult > 0); } + +UINT +CConfigParser::GetSectionString(LPCWSTR Section, LPCWSTR Name, CStringW &Result) +{ + HRESULT hr; // Return value; length of ini string or 0 on failure. + CStringW SecBuf; + WCHAR FullLoc[5], *NeutralLoc = FullLoc + 2; + GetLocaleInfoW(GetUserDefaultLCID(), LOCALE_ILANGUAGE, FullLoc, _countof(FullLoc)); + + SecBuf.Format(L"%s.%s.%s", Section, FullLoc, CurrentArchitecture); + if ((hr = ReadIniValue(szConfigPath, SecBuf, Name, Result)) > 0) + return hr; + + if (*NeutralLoc) + { + SecBuf.Format(L"%s.%s.%s", Section, NeutralLoc, CurrentArchitecture); + if ((hr = ReadIniValue(szConfigPath, SecBuf, Name, Result)) > 0) + return hr; + } + + SecBuf.Format(L"%s.%s", Section, CurrentArchitecture); + if ((hr = ReadIniValue(szConfigPath, SecBuf, Name, Result)) > 0) + return hr; + + SecBuf.Format(L"%s.%s", Section, FullLoc); + if ((hr = ReadIniValue(szConfigPath, SecBuf, Name, Result)) > 0) + return hr; + + if (*NeutralLoc) + { + SecBuf.Format(L"%s.%s", Section, NeutralLoc); + if ((hr = ReadIniValue(szConfigPath, SecBuf, Name, Result)) > 0) + return hr; + } + + if ((hr = ReadIniValue(szConfigPath, Section, Name, Result)) > 0) + return hr; + return 0; +} diff --git a/base/applications/rapps/geninst.cpp b/base/applications/rapps/geninst.cpp new file mode 100644 index 00000000000..d304eb24eb7 --- /dev/null +++ b/base/applications/rapps/geninst.cpp @@ -0,0 +1,817 @@ +/* + * PROJECT: ReactOS Applications Manager + * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) + * PURPOSE: Act as installer and uninstaller for applications distributed in archives + * COPYRIGHT: Copyright 2024 Whindmar Saksit + */ + +#include "defines.h" +#include +#include +#include +#include +#include "resource.h" +#include "appdb.h" +#include "appinfo.h" +#include "misc.h" +#include "configparser.h" +#include "unattended.h" + +#include "minizip/ioapi.h" +#include "minizip/iowin32.h" +#include "minizip/unzip.h" +extern "C" { + #include "minizip/ioapi.c" + #include "minizip/iowin32.c" + #include "minizip/unzip.c" +} + +#define REGPATH_UNINSTALL L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall" + +#define DB_GENINST_FILES L"Files" +#define DB_GENINST_DIR L"Dir" +#define DB_GENINST_ICON L"Icon" +#define DB_GENINST_LNK L"Lnk" +#define DB_GENINST_DELFILE L"DelFile" // Delete files generated by the application +#define DB_GENINST_DELDIR L"DelDir" +#define DB_GENINST_DELDIREMPTY L"DelDirEmpty" +#define DB_GENINST_DELREG L"DelReg" +#define DB_GENINST_DELREGEMPTY L"DelRegEmpty" + +enum { + UNOP_FILE = 'F', + UNOP_DIR = 'D', + UNOP_EMPTYDIR = 'd', + UNOP_REGKEY = 'K', + UNOP_EMPTYREGKEY = 'k', +}; + +static int +ExtractFilesFromZip(LPCWSTR Archive, const CStringW &OutputDir, + EXTRACTCALLBACK Callback, void *Cookie) +{ + const UINT pkzefsutf8 = 1 << 11; // APPNOTE; APPENDIX D + zlib_filefunc64_def zff; + fill_win32_filefunc64W(&zff); + unzFile hzf = unzOpen2_64(Archive, &zff); + if (!hzf) + return UNZ_BADZIPFILE; + CStringA narrow; + CStringW path, dir; + int zerr = unzGoToFirstFile(hzf); + for (; zerr == UNZ_OK; zerr = unzGoToNextFile(hzf)) + { + unz_file_info64 fi; + zerr = unzGetCurrentFileInfo64(hzf, &fi, NULL, 0, NULL, 0, NULL, 0); + if (zerr != UNZ_OK) + break; + LPSTR file = narrow.GetBuffer(fi.size_filename); + zerr = unzGetCurrentFileInfo64(hzf, &fi, file, narrow.GetAllocLength(), NULL, 0, NULL, 0); + if (zerr != UNZ_OK) + break; + narrow.ReleaseBuffer(fi.size_filename); + narrow.Replace('/', '\\'); + while (narrow[0] == '\\') + narrow = narrow.Mid(1); + UINT codepage = (fi.flag & pkzefsutf8) ? CP_UTF8 : 1252; + UINT cch = MultiByteToWideChar(codepage, 0, narrow, -1, NULL, 0); + cch = MultiByteToWideChar(codepage, 0, narrow, -1, path.GetBuffer(cch - 1), cch); + if (!cch) + break; + path.ReleaseBuffer(cch - 1); + DWORD fileatt = FILE_ATTRIBUTE_NORMAL, err; + BYTE attsys = HIBYTE(fi.version), dos = 0, ntfs = 10, vfat = 14; + if ((attsys == dos || attsys == ntfs || attsys == vfat) && LOBYTE(fi.external_fa)) + fileatt = LOBYTE(fi.external_fa); + + if (!NotifyFileExtractCallback(path, fi.uncompressed_size, fileatt, + Callback, Cookie)) + continue; // Skip file + + path = BuildPath(OutputDir, path); + SplitFileAndDirectory(path, &dir); + if (!dir.IsEmpty() && (err = CreateDirectoryTree(dir))) + { + zerr = UNZ_ERRNO; + SetLastError(err); + break; + } + + if ((zerr = unzOpenCurrentFile(hzf)) != UNZ_OK) + break; + zerr = UNZ_ERRNO; + HANDLE hFile = CreateFileW(path, GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_DELETE, + NULL, CREATE_ALWAYS, fileatt, NULL); + if (hFile != INVALID_HANDLE_VALUE) + { + DWORD len = 1024 * 4, cb; + LPSTR buf = narrow.GetBuffer(len); + for (zerr = UNZ_OK; zerr == UNZ_OK;) + { + len = zerr = unzReadCurrentFile(hzf, buf, len); + if (zerr <= 0) + break; + zerr = WriteFile(hFile, buf, len, &cb, NULL) && cb == len ? UNZ_OK : UNZ_ERRNO; + } + CloseHandle(hFile); + } + unzCloseCurrentFile(hzf); + } + unzClose(hzf); + return zerr == UNZ_END_OF_LIST_OF_FILE ? UNZ_OK : zerr; +} + +static UINT +ExtractZip(LPCWSTR Archive, const CStringW &OutputDir, + EXTRACTCALLBACK Callback, void *Cookie) +{ + int zerr = ExtractFilesFromZip(Archive, OutputDir, Callback, Cookie); + return zerr == UNZ_ERRNO ? GetLastError() : zerr ? ERROR_INTERNAL_ERROR : 0; +} + +static UINT +ExtractCab(LPCWSTR Archive, const CStringW &OutputDir, + EXTRACTCALLBACK Callback, void *Cookie) +{ + if (ExtractFilesFromCab(Archive, OutputDir, Callback, Cookie)) + return ERROR_SUCCESS; + UINT err = GetLastError(); + return err ? err : ERROR_INTERNAL_ERROR; +} + +enum { IM_STARTPROGRESS = WM_APP, IM_PROGRESS, IM_END }; + +static struct CommonInfo +{ + LPCWSTR AppName; + HWND hDlg; + DWORD Error, Count; + BOOL Silent; + CRegKey *ArpKey, Entries; + + CommonInfo(LPCWSTR DisplayName, BOOL IsSilent = FALSE) + : AppName(DisplayName), hDlg(NULL), Error(0), Count(0), Silent(IsSilent), ArpKey(NULL) + { + } + inline HWND GetGuiOwner() const { return Silent ? NULL : hDlg; } +} *g_pInfo; + +struct InstallInfo : CommonInfo +{ + CConfigParser &Parser; + LPCWSTR ArchivePath, InstallDir, ShortcutFile; + CStringW UninstFile, MainApp; + UINT InstallDirLen, EntryCount; + BOOL PerUser; + + InstallInfo(LPCWSTR AppName, CConfigParser &CP, LPCWSTR Archive) + : CommonInfo(AppName), Parser(CP), ArchivePath(Archive) + { + EntryCount = 0; + } +}; + +static UINT +ErrorBox(UINT Error = GetLastError()) +{ + if (!Error) + Error = ERROR_INTERNAL_ERROR; + WCHAR buf[400]; + UINT fmf = FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM; + FormatMessageW(fmf, NULL, Error, 0, buf, _countof(buf), NULL); + MessageBoxW(g_pInfo->GetGuiOwner(), buf, 0, MB_OK | MB_ICONSTOP); + g_pInfo->Error = Error; + return Error; +} + +static LPCWSTR +GetCommonString(LPCWSTR Name, CStringW &Output, LPCWSTR Default = L"") +{ + InstallInfo &Info = *static_cast(g_pInfo); + BOOL found = Info.Parser.GetString(Name, Output); + return (found && !Output.IsEmpty() ? Output : Output = Default).GetString(); +} + +static LPCWSTR +GetGenerateString(LPCWSTR Name, CStringW &Output, LPCWSTR Default = L"") +{ + InstallInfo &Info = *static_cast(g_pInfo); + UINT r = Info.Parser.GetSectionString(DB_GENINSTSECTION, Name, Output); + return (r ? Output : Output = Default).GetString(); +} + +static void +WriteArpEntry(LPCWSTR Name, LPCWSTR Value, UINT Type = REG_SZ) +{ + // Write a "Add/Remove programs" value if we have a valid uninstaller key + if (g_pInfo->ArpKey) + { + UINT err = g_pInfo->ArpKey->SetStringValue(Name, Value, Type); + if (err) + ErrorBox(err); + } +} + +static BOOL +AddEntry(WCHAR Type, LPCWSTR Value) +{ + InstallInfo &Info = *static_cast(g_pInfo); + CStringW name; + name.Format(L"%c%u", Type, ++Info.EntryCount); + UINT err = Info.Entries.SetStringValue(name, Value); + if (err) + ErrorBox(err); + return !err; +} + +static HRESULT +GetCustomIconPath(InstallInfo &Info, CStringW &Path) +{ + if (*GetGenerateString(DB_GENINST_ICON, Path)) + { + Path = BuildPath(Info.InstallDir, Path); + int idx = PathParseIconLocation(Path.GetBuffer()); + Path.ReleaseBuffer(); + HICON hIco = NULL; + if (ExtractIconExW(Path, idx, &hIco, NULL, 1)) + DestroyIcon(hIco); + if (idx) + Path.AppendFormat(L",%d", idx); + return hIco ? S_OK : S_FALSE; + } + return HRESULT_FROM_WIN32(ERROR_NO_MORE_ITEMS); +} + +static BOOL +GetLocalizedSMFolderName(LPCWSTR WinVal, LPCWSTR RosInf, LPCWSTR RosVal, CStringW &Output) +{ + CRegKey key; + if (key.Open(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion", KEY_READ) == ERROR_SUCCESS && + GetRegString(key, WinVal, Output) && !Output.IsEmpty()) + { + return TRUE; + } + WCHAR windir[MAX_PATH]; + GetWindowsDirectoryW(windir, _countof(windir)); + CStringW path = BuildPath(BuildPath(windir, L"inf"), RosInf), section; + DWORD lang = 0, lctype = LOCALE_ILANGUAGE | LOCALE_RETURN_NUMBER; + if (GetLocaleInfoW(GetUserDefaultLCID(), lctype, (LPWSTR) &lang, sizeof(lang) / sizeof(WCHAR))) + { + section.Format(L"Strings.%.4x", lang); + if (ReadIniValue(path, section, RosVal, Output) > 0) + return TRUE; + section.Format(L"Strings.%.2x", PRIMARYLANGID(lang)); + if (ReadIniValue(path, section, RosVal, Output) > 0) + return TRUE; + } + return ReadIniValue(path, L"Strings", RosVal, Output) > 0; +} + +static BOOL +CreateShortcut(const CStringW &Target) +{ + InstallInfo &Info = *static_cast(g_pInfo); + UINT csidl = Info.PerUser ? CSIDL_PROGRAMS : CSIDL_COMMON_PROGRAMS; + CStringW rel = Info.ShortcutFile, path, dir, tmp; + + if (FAILED(GetSpecialPath(csidl, path, Info.GetGuiOwner()))) + return TRUE; // Pretend everything is OK + + int cat; + if (Info.Parser.GetInt(DB_CATEGORY, cat) && cat == ENUM_CAT_GAMES) + { + // Try to find the name of the Games folder in the Start Menu + if (GetLocalizedSMFolderName(L"SM_GamesName", L"shortcuts.inf", L"Games", tmp)) + { + path = BuildPath(path, tmp); + } + } + + // SHPathPrepareForWrite will prepare the necessary directories. + // Windows and ReactOS SHPathPrepareForWrite do not support '/'. + rel.Replace('/', '\\'); + path = BuildPath(path, rel.GetString()); + UINT SHPPFW = SHPPFW_DIRCREATE | SHPPFW_IGNOREFILENAME; + HRESULT hr = SHPathPrepareForWriteW(Info.GetGuiOwner(), NULL, path, SHPPFW); + if ((Info.Error = ErrorFromHResult(hr)) != 0) + { + ErrorBox(Info.Error); + return FALSE; + } + + CComPtr link; + hr = link.CoCreateInstance(CLSID_ShellLink, IID_IShellLinkW); + if (SUCCEEDED(hr)) + { + if (SUCCEEDED(hr = link->SetPath(Target))) + { + if (SUCCEEDED(GetCustomIconPath(Info, tmp))) + { + LPWSTR p = tmp.GetBuffer(); + int idx = PathParseIconLocation(p); + link->SetIconLocation(p, idx); + } + CComPtr persist; + if (SUCCEEDED(hr = link->QueryInterface(IID_IPersistFile, (void**)&persist))) + { + hr = persist->Save(path, FALSE); + } + } + } + if (SUCCEEDED(hr)) + { + if (AddEntry(UNOP_FILE, path)) + { + SplitFileAndDirectory(path, &dir); + AddEntry(UNOP_EMPTYDIR, dir); + } + } + else + { + ErrorBox(ErrorFromHResult(hr)); + } + return !Info.Error; +} + +static BOOL +InstallFiles(const CStringW &SourceDirBase, const CStringW &Spec, + const CStringW &DestinationDir) +{ + InstallInfo &Info = *static_cast(g_pInfo); + CStringW sourcedir, filespec; + filespec = SplitFileAndDirectory(Spec, &sourcedir); // Split "[OptionalDir\]*.ext" + sourcedir = BuildPath(SourceDirBase, sourcedir); + BOOL success = TRUE; + WIN32_FIND_DATAW wfd; + HANDLE hFind = FindFirstFileW(BuildPath(sourcedir, filespec), &wfd); + if (hFind == INVALID_HANDLE_VALUE) + { + DWORD error = GetLastError(); + if (error == ERROR_FILE_NOT_FOUND) + return TRUE; + else + return !ErrorBox(error); + } + + for (;;) + { + CStringW from = BuildPath(sourcedir, wfd.cFileName); + CStringW to = BuildPath(DestinationDir, wfd.cFileName); + CStringW uninstpath = to.Mid(Info.InstallDirLen - 1); + if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) + { + LPWSTR p = wfd.cFileName; + BOOL dots = p[0] == '.' && (!p[1] || (p[1] == '.' && !p[2])); + if (!dots) + { + Info.Error = CreateDirectoryTree(to); + if (Info.Error) + { + success = !ErrorBox(Info.Error); + } + else + { + success = AddEntry(UNOP_EMPTYDIR, uninstpath); + } + + if (success) + { + success = InstallFiles(from, filespec, to); + } + } + } + else + { + success = MoveFileEx(from, to, MOVEFILE_COPY_ALLOWED | MOVEFILE_REPLACE_EXISTING); + if (success) + { + if (Info.MainApp.IsEmpty()) + { + Info.MainApp = to; + } + success = AddEntry(UNOP_FILE, uninstpath); + } + else + { + ErrorBox(); + } + SendMessage(g_pInfo->hDlg, IM_PROGRESS, 0, 0); + } + + if (!success || !FindNextFileW(hFind, &wfd)) + break; + } + FindClose(hFind); + return success; +} + +static void +AddUninstallOperationsFromDB(LPCWSTR Name, WCHAR UnOp, CStringW PathPrefix = CStringW(L"")) +{ + CStringW item, tmp; + if (*GetGenerateString(Name, tmp)) + { + for (int pos = 1; pos > 0;) + { + pos = tmp.Find(L'|'); + item = pos <= 0 ? tmp : tmp.Left(pos); + tmp = tmp.Mid(pos + 1); + AddEntry(UnOp, PathPrefix + item); + } + } +} + +static BOOL CALLBACK +ExtractCallback(const EXTRACTCALLBACKINFO &, void *Cookie) +{ + InstallInfo &Info = *(InstallInfo *) Cookie; + Info.Count += 1; + return TRUE; +} + +static DWORD CALLBACK +ExtractAndInstallThread(LPVOID Parameter) +{ + const BOOL PerUserModeDefault = TRUE; + InstallInfo &Info = *static_cast(g_pInfo); + LPCWSTR AppName = Info.AppName, Archive = Info.ArchivePath, None = L"!"; + CStringW installdir, tempdir, files, shortcut, tmp; + HRESULT hr; + CRegKey arpkey; + Info.ArpKey = &arpkey; + + if (!*GetGenerateString(DB_GENINST_FILES, files, L"*.exe|*.*")) + return ErrorBox(ERROR_BAD_FORMAT); + + GetCommonString(DB_SCOPE, tmp); + if (tmp.CompareNoCase(L"User") == 0) + Info.PerUser = TRUE; + else if (tmp.CompareNoCase(L"Machine") == 0) + Info.PerUser = FALSE; + else + Info.PerUser = PerUserModeDefault; + + hr = GetProgramFilesPath(installdir, Info.PerUser, Info.GetGuiOwner()); + if ((Info.Error = ErrorFromHResult(hr)) != 0) + return ErrorBox(Info.Error); + + GetGenerateString(DB_GENINST_DIR, tmp); + if (tmp.Find('%') == 0 && ExpandEnvStrings(tmp)) + installdir = tmp; + else if (tmp.Compare(None)) + installdir = BuildPath(installdir, tmp.IsEmpty() ? AppName : tmp.GetString()); + Info.InstallDir = installdir.GetString(); + Info.InstallDirLen = installdir.GetLength() + 1; + hr = SHPathPrepareForWriteW(Info.GetGuiOwner(), NULL, installdir, SHPPFW_DIRCREATE); + if ((Info.Error = ErrorFromHResult(hr)) != 0) + return ErrorBox(Info.Error); + + // Create the destination directory, and inside it, a temporary directory + // where we will extract the archive to before moving the files to their + // final location (adding uninstall entries as we go) + tempdir.Format(L"%s\\~RAM%u.tmp", installdir.GetString(), GetCurrentProcessId()); + Info.Error = CreateDirectoryTree(tempdir.GetString()); + if (Info.Error) + return ErrorBox(Info.Error); + + if (!*GetGenerateString(DB_GENINST_LNK, shortcut)) + shortcut.Format(L"%s.lnk", AppName); + Info.ShortcutFile = shortcut.Compare(None) ? shortcut.GetString() : NULL; + + // Create the uninstall registration key + LPCWSTR arpkeyname = AppName; + tmp = BuildPath(REGPATH_UNINSTALL, arpkeyname); + HKEY hRoot = Info.PerUser ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE; + REGSAM regsam = KEY_READ | KEY_WRITE | (IsSystem64Bit() ? KEY_WOW64_64KEY : KEY_WOW64_32KEY); + Info.Error = arpkey.Create(hRoot, tmp, NULL, REG_OPTION_NON_VOLATILE, regsam); + if (!Info.Error) + { + arpkey.RecurseDeleteKey(GENERATE_ARPSUBKEY); + Info.Error = Info.Entries.Create(arpkey, GENERATE_ARPSUBKEY); + } + if (Info.Error) + ErrorBox(Info.Error); + + if (!Info.Error) + { + BOOL isCab = SplitFileAndDirectory(Archive).Right(4).CompareNoCase(L".cab") == 0; + Info.Error = isCab ? ExtractCab(Archive, tempdir, ExtractCallback, &Info) + : ExtractZip(Archive, tempdir, ExtractCallback, &Info); + } + + if (!Info.Error) + { + // We now know how many files we extracted, change from marquee to normal progress bar. + SendMessage(Info.hDlg, IM_STARTPROGRESS, 0, 0); + + for (int pos = 1; pos > 0 && !Info.Error;) + { + pos = files.Find(L'|'); + CStringW item = pos <= 0 ? files : files.Left(pos); + files = files.Mid(pos + 1); + InstallFiles(tempdir, item, installdir); + } + + if (!Info.MainApp.IsEmpty()) + { + AddUninstallOperationsFromDB(DB_GENINST_DELREG, UNOP_REGKEY); + AddUninstallOperationsFromDB(DB_GENINST_DELREGEMPTY, UNOP_EMPTYREGKEY); + AddUninstallOperationsFromDB(DB_GENINST_DELFILE, UNOP_FILE, L"\\"); + AddUninstallOperationsFromDB(DB_GENINST_DELDIR, UNOP_DIR, L"\\"); + AddUninstallOperationsFromDB(DB_GENINST_DELDIREMPTY, UNOP_EMPTYDIR, L"\\"); + AddEntry(UNOP_EMPTYDIR, L"\\"); + + WriteArpEntry(L"DisplayName", AppName); + WriteArpEntry(L"InstallLocation", Info.InstallDir); // Note: This value is used by the uninstaller! + + LPWSTR p = tmp.GetBuffer(1 + MAX_PATH); + p[0] = L'\"'; + GetModuleFileName(NULL, p + 1, MAX_PATH); + tmp.ReleaseBuffer(); + UINT cch = tmp.GetLength(), bitness = IsSystem64Bit() ? 64 : 32; + WCHAR modechar = Info.PerUser ? 'U' : 'M'; + LPCWSTR unparamsfmt = L"\" /" CMD_KEY_UNINSTALL L" /K%s \"%c%d\\%s\""; + (tmp = tmp.Mid(0, cch)).AppendFormat(unparamsfmt, L"", modechar, bitness, arpkeyname); + WriteArpEntry(L"UninstallString", tmp); + (tmp = tmp.Mid(0, cch)).AppendFormat(unparamsfmt, L" /S", modechar, bitness, arpkeyname); + WriteArpEntry(L"QuietUninstallString", tmp); + + if (GetCustomIconPath(Info, tmp) != S_OK) + tmp = Info.MainApp; + WriteArpEntry(L"DisplayIcon", tmp); + + if (*GetCommonString(DB_VERSION, tmp)) + WriteArpEntry(L"DisplayVersion", tmp); + + SYSTEMTIME st; + GetSystemTime(&st); + tmp.Format(L"%.4u%.2u%.2u", st.wYear, st.wMonth, st.wDay); + WriteArpEntry(L"InstallDate", tmp); + + if (*GetCommonString(DB_PUBLISHER, tmp)) + WriteArpEntry(L"Publisher", tmp); + +#if DBG + tmp.Format(L"sys64=%d rapps%d", IsSystem64Bit(), sizeof(void*) * 8); + WriteArpEntry(L"_DEBUG", tmp); +#endif + } + + if (!Info.Error && Info.ShortcutFile) + { + CreateShortcut(Info.MainApp); + } + } + + DeleteDirectoryTree(tempdir.GetString()); + RemoveDirectory(installdir.GetString()); // This is harmless even if we installed something + return 0; +} + +static DWORD CALLBACK +WorkerThread(LPVOID Parameter) +{ + ((LPTHREAD_START_ROUTINE)Parameter)(NULL); + return SendMessage(g_pInfo->hDlg, IM_END, 0, 0); +} + +static INT_PTR CALLBACK +UIDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + HWND hPB = GetDlgItem(hDlg, 1); + switch(uMsg) + { + case IM_STARTPROGRESS: + SetWindowLongPtr(hPB, GWL_STYLE, WS_CHILD | WS_VISIBLE); + SendMessageW(hPB, PBM_SETMARQUEE, FALSE, 0); + SendMessageW(hPB, PBM_SETRANGE32, 0, g_pInfo->Count); + SendMessageW(hPB, PBM_SETPOS, 0, 0); + break; + case IM_PROGRESS: + SendMessageW(hPB, PBM_DELTAPOS, 1, 0); + break; + case IM_END: + DestroyWindow(hDlg); + break; + case WM_INITDIALOG: + { + SendMessageW(hPB, PBM_SETMARQUEE, TRUE, 0); + g_pInfo->hDlg = hDlg; + HICON hIco = LoadIconW(hInst, MAKEINTRESOURCEW(IDI_MAIN)); + SendMessageW(hDlg, WM_SETICON, ICON_BIG, (LPARAM)hIco); + SendMessageW(hDlg, WM_SETTEXT, 0, (LPARAM)g_pInfo->AppName); + if (!SHCreateThread(WorkerThread, (void*)lParam, CTF_COINIT, NULL)) + { + ErrorBox(); + SendMessageW(hDlg, IM_END, 0, 0); + } + break; + } + case WM_CLOSE: + return TRUE; + case WM_DESTROY: + PostMessage(NULL, WM_QUIT, 0, 0); + break; + } + return FALSE; +} + +static BOOL +CreateUI(BOOL Silent, LPTHREAD_START_ROUTINE ThreadProc) +{ + enum { DLGW = 150, DLGH = 20, PAD = 4, PADx2 = PAD * 2, CHILDCOUNT = 1 }; + const UINT DlgStyle = WS_CAPTION | DS_MODALFRAME | DS_NOFAILCREATE | DS_CENTER; + static const WORD DlgTmpl[] = + { + LOWORD(DlgStyle), HIWORD(DlgStyle), 0, 0, CHILDCOUNT, 0, 0, DLGW, DLGH, 0, 0, 0, + PBS_MARQUEE, HIWORD(WS_CHILD | WS_VISIBLE), 0, 0, PAD, PAD, DLGW - PADx2, DLGH - PADx2, 1, + 'm', 's', 'c', 't', 'l', 's', '_', 'p', 'r', 'o', 'g', 'r', 'e', 's', 's', '3', '2', 0, 0, + }; + HWND hWnd = CreateDialogIndirectParamW(NULL, (LPCDLGTEMPLATE)DlgTmpl, NULL, + UIDlgProc, (LPARAM)ThreadProc); + if (!hWnd) + { + ErrorBox(); + return FALSE; + } + else if (!Silent) + { + ShowWindow(hWnd, SW_SHOW); + } + MSG Msg; + while (GetMessageW(&Msg, NULL, 0, 0)) + { + TranslateMessage(&Msg); + DispatchMessageW(&Msg); + } + return TRUE; +} + +BOOL +ExtractAndRunGeneratedInstaller(const CAvailableApplicationInfo &AppInfo, LPCWSTR Archive) +{ + InstallInfo Info(AppInfo.szDisplayName, *AppInfo.GetConfigParser(), Archive); + g_pInfo = &Info; + return CreateUI(Info.Silent, ExtractAndInstallThread) ? !Info.Error : FALSE; +} + +struct UninstallInfo : CommonInfo +{ + CInstalledApplicationInfo &AppInfo; + UninstallInfo(CInstalledApplicationInfo &Info, BOOL IsSilent) + : CommonInfo(Info.szDisplayName, IsSilent), AppInfo(Info) + { + ArpKey = &Info.GetRegKey(); + } +}; + +enum UninstallStage +{ + US_ITEMS, + US_CONTAINERS, + UINSTALLSTAGECOUNT +}; + +static DWORD CALLBACK +UninstallThread(LPVOID Parameter) +{ + UninstallInfo &Info = *static_cast(g_pInfo); + + CStringW tmp, path, installdir; + path.LoadString(IDS_INSTGEN_CONFIRMUNINST); + tmp.Format(path.GetString(), Info.AppName); + if (!Info.Silent && + MessageBox(Info.GetGuiOwner(), tmp, Info.AppName, MB_YESNO | MB_ICONQUESTION) != IDYES) + { + Info.Error = ERROR_CANCELLED; + SendMessage(Info.hDlg, IM_END, 0, 0); + return 0; + } + + Info.Error = Info.Entries.Open(*Info.ArpKey, GENERATE_ARPSUBKEY, KEY_READ); + if (Info.Error) + return ErrorBox(Info.Error); + + RegQueryInfoKey(Info.Entries, NULL, NULL, NULL, NULL, NULL, NULL, &Info.Count, NULL, NULL, NULL, NULL); + Info.Count *= UINSTALLSTAGECOUNT; + SendMessage(Info.hDlg, IM_STARTPROGRESS, 0, 0); + + if (!GetRegString(*Info.ArpKey, L"InstallLocation", installdir) || installdir.IsEmpty()) + return ErrorBox(ERROR_INVALID_NAME); + + for (UINT stage = 0; stage < UINSTALLSTAGECOUNT; ++stage) + { + for (UINT vi = 0;; ++vi) + { + WCHAR value[MAX_PATH], data[MAX_PATH * 2]; + DWORD valsize = _countof(value), size = sizeof(data) - sizeof(WCHAR), rt; + data[_countof(data) - 1] = UNICODE_NULL; + UINT err = RegEnumValue(Info.Entries, vi, value, &valsize, NULL, &rt, (BYTE*)data, &size); + if (err) + { + if (err != ERROR_NO_MORE_ITEMS) + { + return ErrorBox(err); + } + break; + } + + LPCWSTR str = data; + WORD op = value[0]; + switch(*data ? MAKEWORD(stage, op) : 0) + { + case MAKEWORD(US_ITEMS, UNOP_REGKEY): + case MAKEWORD(US_CONTAINERS, UNOP_EMPTYREGKEY): + { + REGSAM wowsam = 0; + HKEY hKey = NULL; + path.Format(L"%.4s", data); + if (path.CompareNoCase(L"HKCR") == 0) + hKey = HKEY_CLASSES_ROOT; + else if (path.CompareNoCase(L"HKCU") == 0) + hKey = HKEY_CURRENT_USER; + else if (path.CompareNoCase(L"HKLM") == 0) + hKey = HKEY_LOCAL_MACHINE; + + if (data[4] == '6' && data[5] == '4') + wowsam = KEY_WOW64_64KEY; + else if (data[4] == '3' && data[5] == '2') + wowsam = KEY_WOW64_32KEY; + + str = &data[wowsam ? 6 : 4]; + if (!hKey || *str != L'\\') + break; + tmp = SplitFileAndDirectory(++str, &path); + if (!tmp.IsEmpty() && !path.IsEmpty()) + { + CRegKey key; + err = key.Open(hKey, path, DELETE | wowsam); + if (err == ERROR_SUCCESS) + { + if (op == UNOP_REGKEY) + err = key.RecurseDeleteKey(tmp); + else if (RegKeyHasValues(hKey, str, wowsam) == S_FALSE) + err = key.DeleteSubKey(tmp); + } + switch(err) + { + case ERROR_SUCCESS: + case ERROR_FILE_NOT_FOUND: + case ERROR_PATH_NOT_FOUND: + break; + default: + return ErrorBox(err); + } + } + break; + } + + case MAKEWORD(US_ITEMS, UNOP_FILE): + { + if (*data == L'\\') + str = (path = BuildPath(installdir, data)); + + if (!DeleteFile(str)) + { + err = GetLastError(); + if (err != ERROR_FILE_NOT_FOUND) + { + return ErrorBox(err); + } + } + break; + } + + case MAKEWORD(US_CONTAINERS, UNOP_EMPTYDIR): + case MAKEWORD(US_CONTAINERS, UNOP_DIR): + { + if (*data == L'\\') + str = (path = BuildPath(installdir, data)); + + if (op == UNOP_DIR) + DeleteDirectoryTree(str, Info.GetGuiOwner()); + else + RemoveDirectory(str); + break; + } + } + SendMessage(Info.hDlg, IM_PROGRESS, 0, 0); + } + } + if (!Info.Error) + { + Info.Error = CAppDB::RemoveInstalledAppFromRegistry(&Info.AppInfo); + if (Info.Error) + return ErrorBox(Info.Error); + } + return 0; +} + +BOOL +UninstallGenerated(CInstalledApplicationInfo &AppInfo, UninstallCommandFlags Flags) +{ + UninstallInfo Info(AppInfo, Flags & UCF_SILENT); + g_pInfo = &Info; + return CreateUI(Info.Silent, UninstallThread) ? !Info.Error : FALSE; +} diff --git a/base/applications/rapps/gui.cpp b/base/applications/rapps/gui.cpp index d0b518967df..a1075686314 100644 --- a/base/applications/rapps/gui.cpp +++ b/base/applications/rapps/gui.cpp @@ -275,7 +275,7 @@ CMainWindow::RemoveSelectedAppFromRegistry() return FALSE; if (MessageBoxW(szMsgText, szMsgTitle, MB_YESNO | MB_ICONQUESTION) == IDYES) - return m_Db->RemoveInstalledAppFromRegistry(InstalledApp); + return m_Db->RemoveInstalledAppFromRegistry(InstalledApp) == ERROR_SUCCESS; return FALSE; } @@ -290,7 +290,7 @@ CMainWindow::UninstallSelectedApp(BOOL bModify) if (!InstalledApp) return FALSE; - return InstalledApp->UninstallApplication(bModify); + return InstalledApp->UninstallApplication(bModify ? UCF_MODIFY : UCF_NONE); } VOID diff --git a/base/applications/rapps/include/appdb.h b/base/applications/rapps/include/appdb.h index 1f6bf531a35..8beae3986ec 100644 --- a/base/applications/rapps/include/appdb.h +++ b/base/applications/rapps/include/appdb.h @@ -15,13 +15,20 @@ class CAppDB BOOL EnumerateFiles(); + static CInstalledApplicationInfo * + EnumerateRegistry(CAtlList *List, LPCWSTR Name); + static CInstalledApplicationInfo * + CreateInstalledAppByRegistryKey(LPCWSTR KeyName, HKEY hKeyParent, UINT KeyIndex); + public: CAppDB(const CStringW &path); VOID GetApps(CAtlList &List, AppsCategories Type) const; + CAvailableApplicationInfo * + FindAvailableByPackageName(const CStringW &name); CAppInfo * - FindByPackageName(const CStringW &name); + FindByPackageName(const CStringW &name) { return FindAvailableByPackageName(name); } VOID UpdateAvailable(); @@ -30,9 +37,16 @@ class CAppDB VOID RemoveCached(); - BOOL + static DWORD RemoveInstalledAppFromRegistry(const CAppInfo *Info); + static CInstalledApplicationInfo * + CreateInstalledAppByRegistryKey(LPCWSTR Name); + static CInstalledApplicationInfo * + CreateInstalledAppInstance(LPCWSTR KeyName, BOOL User, REGSAM WowSam); + static HKEY + EnumInstalledRootKey(UINT Index, REGSAM &RegSam); + size_t GetAvailableCount() const { return m_Available.GetCount(); diff --git a/base/applications/rapps/include/appinfo.h b/base/applications/rapps/include/appinfo.h index 639d3fc8182..175048b6008 100644 --- a/base/applications/rapps/include/appinfo.h +++ b/base/applications/rapps/include/appinfo.h @@ -63,7 +63,31 @@ IsInstalledEnum(INT x) return (x >= ENUM_INSTALLED_MIN && x <= ENUM_INSTALLED_MAX); } +enum UninstallCommandFlags +{ + UCF_NONE = 0x00, + UCF_MODIFY = 0x01, + UCF_SILENT = 0x02, +}; + +enum InstallerType +{ + INSTALLER_UNKNOWN, + INSTALLER_GENERATE, // .zip file automatically converted to installer by rapps +}; + +#define DB_VERSION L"Version" +#define DB_CATEGORY L"Category" +#define DB_PUBLISHER L"Publisher" +#define DB_REGNAME L"RegName" +#define DB_INSTALLER L"Installer" +#define DB_SCOPE L"Scope" // User or Machine + +#define DB_GENINSTSECTION L"Generate" +#define GENERATE_ARPSUBKEY L"RApps" // Our uninstall data is stored here + class CAppRichEdit; +class CConfigParser; class CAppInfo { @@ -93,13 +117,15 @@ class CAppInfo GetDownloadInfo(CStringW &Url, CStringW &Sha1, ULONG &SizeInBytes) const = 0; virtual VOID GetDisplayInfo(CStringW &License, CStringW &Size, CStringW &UrlSite, CStringW &UrlDownload) = 0; + virtual InstallerType + GetInstallerType() const { return INSTALLER_UNKNOWN; } virtual BOOL - UninstallApplication(BOOL bModify) = 0; + UninstallApplication(UninstallCommandFlags Flags) = 0; }; class CAvailableApplicationInfo : public CAppInfo { - class CConfigParser *m_Parser; + CConfigParser *m_Parser; CSimpleArray m_szScrnshotLocation; bool m_ScrnshotRetrieved; CStringW m_szUrlDownload; @@ -125,6 +151,9 @@ class CAvailableApplicationInfo : public CAppInfo const CPathW &BasePath); ~CAvailableApplicationInfo(); + CConfigParser * + GetConfigParser() const { return m_Parser; } + virtual BOOL Valid() const override; virtual BOOL @@ -139,8 +168,10 @@ class CAvailableApplicationInfo : public CAppInfo GetDownloadInfo(CStringW &Url, CStringW &Sha1, ULONG &SizeInBytes) const override; virtual VOID GetDisplayInfo(CStringW &License, CStringW &Size, CStringW &UrlSite, CStringW &UrlDownload) override; + virtual InstallerType + GetInstallerType() const override; virtual BOOL - UninstallApplication(BOOL bModify) override; + UninstallApplication(UninstallCommandFlags Flags) override; }; class CInstalledApplicationInfo : public CAppInfo @@ -163,10 +194,12 @@ class CInstalledApplicationInfo : public CAppInfo RetrieveUninstallStrings(); public: - const int iKeyIndex; - CInstalledApplicationInfo(HKEY Key, const CStringW &KeyName, AppsCategories Category, int KeyIndex); + UINT m_KeyInfo; + CInstalledApplicationInfo(HKEY Key, const CStringW &KeyName, AppsCategories Category, UINT KeyInfo); ~CInstalledApplicationInfo(); + CRegKey& GetRegKey() { return m_hKey; } + virtual BOOL Valid() const override; virtual BOOL @@ -181,6 +214,13 @@ class CInstalledApplicationInfo : public CAppInfo GetDownloadInfo(CStringW &Url, CStringW &Sha1, ULONG &SizeInBytes) const override; virtual VOID GetDisplayInfo(CStringW &License, CStringW &Size, CStringW &UrlSite, CStringW &UrlDownload) override; + virtual InstallerType + GetInstallerType() const override; virtual BOOL - UninstallApplication(BOOL bModify) override; + UninstallApplication(UninstallCommandFlags Flags) override; }; + +BOOL +UninstallGenerated(CInstalledApplicationInfo &AppInfo, UninstallCommandFlags Flags); +BOOL +ExtractAndRunGeneratedInstaller(const CAvailableApplicationInfo &AppInfo, LPCWSTR Archive); diff --git a/base/applications/rapps/include/configparser.h b/base/applications/rapps/include/configparser.h index 4573e90f195..792d58f604c 100644 --- a/base/applications/rapps/include/configparser.h +++ b/base/applications/rapps/include/configparser.h @@ -19,4 +19,10 @@ class CConfigParser GetString(const CStringW &KeyName, CStringW &ResultString); BOOL GetInt(const CStringW &KeyName, INT &iResult); + + UINT + GetSectionString(LPCWSTR Section, LPCWSTR Name, CStringW &Result); }; + +HRESULT +ReadIniValue(LPCWSTR File, LPCWSTR Section, LPCWSTR Name, CStringW &Output); diff --git a/base/applications/rapps/include/misc.h b/base/applications/rapps/include/misc.h index 593ef5a82b0..b43585d748a 100644 --- a/base/applications/rapps/include/misc.h +++ b/base/applications/rapps/include/misc.h @@ -16,6 +16,16 @@ #define CurrentArchitecture L"ppc" #endif +static inline UINT +ErrorFromHResult(HRESULT hr) +{ + // Attempt to extract the original Win32 error code from the HRESULT + if (HIWORD(hr) == HIWORD(HRESULT_FROM_WIN32(!0))) + return LOWORD(hr); + else + return hr >= 0 ? ERROR_SUCCESS : hr; +} + VOID CopyTextToClipboard(LPCWSTR lpszText); VOID @@ -34,8 +44,28 @@ WriteLogMessage(WORD wType, DWORD dwEventID, LPCWSTR lpMsg); BOOL GetInstalledVersion(CStringW *pszVersion, const CStringW &szRegName); +typedef struct +{ + const CStringW &ItemPath; + UINT64 UncompressedSize; + UINT FileAttributes; +} EXTRACTCALLBACKINFO; +typedef BOOL (CALLBACK*EXTRACTCALLBACK)(const EXTRACTCALLBACKINFO &Info, void *Cookie); + +static inline BOOL +NotifyFileExtractCallback(const CStringW &ItemPath, UINT64 UncompressedSize, UINT FileAttributes, + EXTRACTCALLBACK Callback, void *Cookie) +{ + EXTRACTCALLBACKINFO eci = { ItemPath, UncompressedSize, FileAttributes }; + return Callback ? Callback(eci, Cookie) : TRUE; +} + +BOOL +ExtractFilesFromCab(const CStringW &szCabName, const CStringW &szCabDir, const CStringW &szOutputDir, + EXTRACTCALLBACK Callback = NULL, void *Cookie = NULL); BOOL -ExtractFilesFromCab(const CStringW &szCabName, const CStringW &szCabDir, const CStringW &szOutputDir); +ExtractFilesFromCab(LPCWSTR FullCabPath, const CStringW &szOutputDir, + EXTRACTCALLBACK Callback = NULL, void *Cookie = NULL); BOOL IsSystem64Bit(); @@ -49,6 +79,39 @@ UnixTimeToFileTime(DWORD dwUnixTime, LPFILETIME pFileTime); BOOL SearchPatternMatch(LPCWSTR szHaystack, LPCWSTR szNeedle); +HRESULT +RegKeyHasValues(HKEY hKey, LPCWSTR Path, REGSAM wowsam = 0); +LPCWSTR +GetRegString(CRegKey &Key, LPCWSTR Name, CStringW &Value); + +bool +ExpandEnvStrings(CStringW &Str); + +template static CStringW +BuildPath(const T &Base, LPCWSTR Append) +{ + CStringW path = Base; + SIZE_T len = path.GetLength(); + if (len && path[len - 1] != L'\\' && path[len - 1] != L'/') + path += L'\\'; + while (*Append == L'\\' || *Append == L'/') + ++Append; + return path + Append; +} + +CStringW +SplitFileAndDirectory(LPCWSTR FullPath, CStringW *pDir = NULL); +BOOL +DeleteDirectoryTree(LPCWSTR Dir, HWND hwnd = NULL); +UINT +CreateDirectoryTree(LPCWSTR Dir); +HRESULT +GetSpecialPath(UINT csidl, CStringW &Path, HWND hwnd = NULL); +HRESULT +GetKnownPath(REFKNOWNFOLDERID kfid, CStringW &Path, DWORD Flags = KF_FLAG_CREATE); +HRESULT +GetProgramFilesPath(CStringW &Path, BOOL PerUser, HWND hwnd = NULL); + template class CLocalPtr : public CHeapPtr { }; diff --git a/base/applications/rapps/include/resource.h b/base/applications/rapps/include/resource.h index f9fa07a2df3..2d846f8661e 100644 --- a/base/applications/rapps/include/resource.h +++ b/base/applications/rapps/include/resource.h @@ -228,6 +228,9 @@ #define IDS_CMD_PACKAGE_NOT_FOUND 959 #define IDS_CMD_PACKAGE_INFO 960 +/* Generated installer */ +#define IDS_INSTGEN_CONFIRMUNINST 1000 + /* Accelerators */ #define HOTKEYS 715 diff --git a/base/applications/rapps/include/unattended.h b/base/applications/rapps/include/unattended.h index 8eaaf93c244..dd6ea07b595 100644 --- a/base/applications/rapps/include/unattended.h +++ b/base/applications/rapps/include/unattended.h @@ -1,6 +1,8 @@ #pragma once #define CMD_KEY_APPWIZ L"APPWIZ" +#define CMD_KEY_GENINST L"GENINST" +#define CMD_KEY_UNINSTALL L"UNINSTALL" #define CMD_KEY_INSTALL L"INSTALL" #define CMD_KEY_SETUP L"SETUP" #define CMD_KEY_FIND L"FIND" @@ -12,6 +14,7 @@ const WCHAR UsageString[] = L"RAPPS \ [/" CMD_KEY_HELP L"] \ [/" CMD_KEY_INSTALL L" packagename] \ +[/" CMD_KEY_UNINSTALL L" packagename|displayname] \ [/" CMD_KEY_SETUP L" filename] \ [/" CMD_KEY_FIND L" string] \ [/" CMD_KEY_INFO L" packagename]"; diff --git a/base/applications/rapps/lang/bg-BG.rc b/base/applications/rapps/lang/bg-BG.rc index f20960d1b67..aef15975ccc 100644 --- a/base/applications/rapps/lang/bg-BG.rc +++ b/base/applications/rapps/lang/bg-BG.rc @@ -268,3 +268,8 @@ BEGIN IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n" IDS_CMD_PACKAGE_INFO "Information about package %1:\n" END + +STRINGTABLE +BEGIN + IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" +END diff --git a/base/applications/rapps/lang/cs-CZ.rc b/base/applications/rapps/lang/cs-CZ.rc index 3c5767119d2..b971b23708d 100644 --- a/base/applications/rapps/lang/cs-CZ.rc +++ b/base/applications/rapps/lang/cs-CZ.rc @@ -268,3 +268,8 @@ BEGIN IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n" IDS_CMD_PACKAGE_INFO "Information about package %1:\n" END + +STRINGTABLE +BEGIN + IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" +END diff --git a/base/applications/rapps/lang/de-DE.rc b/base/applications/rapps/lang/de-DE.rc index d04479e368a..9871571b78e 100644 --- a/base/applications/rapps/lang/de-DE.rc +++ b/base/applications/rapps/lang/de-DE.rc @@ -271,3 +271,8 @@ BEGIN IDS_CMD_PACKAGE_NOT_FOUND "Paket %1 konnte nicht gefunden werden.\n" IDS_CMD_PACKAGE_INFO "Informationen über das Paket %1:\n" END + +STRINGTABLE +BEGIN + IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" +END diff --git a/base/applications/rapps/lang/en-US.rc b/base/applications/rapps/lang/en-US.rc index 4a096aa8d24..9999a22fd5d 100644 --- a/base/applications/rapps/lang/en-US.rc +++ b/base/applications/rapps/lang/en-US.rc @@ -271,3 +271,8 @@ BEGIN IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n" IDS_CMD_PACKAGE_INFO "Information about package %1:\n" END + +STRINGTABLE +BEGIN + IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" +END diff --git a/base/applications/rapps/lang/es-ES.rc b/base/applications/rapps/lang/es-ES.rc index a95ab092791..c03b12c94e6 100644 --- a/base/applications/rapps/lang/es-ES.rc +++ b/base/applications/rapps/lang/es-ES.rc @@ -270,3 +270,8 @@ BEGIN IDS_CMD_PACKAGE_NOT_FOUND "No se pudo encontrar el paquete %1.\n" IDS_CMD_PACKAGE_INFO "Información del paquete %1:\n" END + +STRINGTABLE +BEGIN + IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" +END diff --git a/base/applications/rapps/lang/et-EE.rc b/base/applications/rapps/lang/et-EE.rc index 984365fda8d..f32cdba120c 100644 --- a/base/applications/rapps/lang/et-EE.rc +++ b/base/applications/rapps/lang/et-EE.rc @@ -268,3 +268,8 @@ BEGIN IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n" IDS_CMD_PACKAGE_INFO "Information about package %1:\n" END + +STRINGTABLE +BEGIN + IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" +END diff --git a/base/applications/rapps/lang/fr-FR.rc b/base/applications/rapps/lang/fr-FR.rc index 7fdf4aac47c..e80b47f4823 100644 --- a/base/applications/rapps/lang/fr-FR.rc +++ b/base/applications/rapps/lang/fr-FR.rc @@ -271,3 +271,8 @@ BEGIN IDS_CMD_PACKAGE_NOT_FOUND "Impossible de trouver le paquet %1.\n" IDS_CMD_PACKAGE_INFO "Information sur le paquet %1 :\n" END + +STRINGTABLE +BEGIN + IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" +END diff --git a/base/applications/rapps/lang/he-IL.rc b/base/applications/rapps/lang/he-IL.rc index 79fcce6bff4..a980e20c36d 100644 --- a/base/applications/rapps/lang/he-IL.rc +++ b/base/applications/rapps/lang/he-IL.rc @@ -273,3 +273,8 @@ BEGIN IDS_CMD_PACKAGE_NOT_FOUND "החבילה %1 ×œ× × ×ž×¦××”.\n" IDS_CMD_PACKAGE_INFO "מידע על החבילה %1:\n" END + +STRINGTABLE +BEGIN + IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" +END diff --git a/base/applications/rapps/lang/hu-HU.rc b/base/applications/rapps/lang/hu-HU.rc index d41af559df7..305d31e6877 100644 --- a/base/applications/rapps/lang/hu-HU.rc +++ b/base/applications/rapps/lang/hu-HU.rc @@ -268,3 +268,8 @@ BEGIN IDS_CMD_PACKAGE_NOT_FOUND "Nem sikerült a(z) %1 csomagot megtalálni.\n" IDS_CMD_PACKAGE_INFO "Információ a(z) %1 csomagról:\n" END + +STRINGTABLE +BEGIN + IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" +END diff --git a/base/applications/rapps/lang/id-ID.rc b/base/applications/rapps/lang/id-ID.rc index b199cebb4a3..8142ed8a060 100644 --- a/base/applications/rapps/lang/id-ID.rc +++ b/base/applications/rapps/lang/id-ID.rc @@ -268,3 +268,8 @@ BEGIN IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n" IDS_CMD_PACKAGE_INFO "Information about package %1:\n" END + +STRINGTABLE +BEGIN + IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" +END diff --git a/base/applications/rapps/lang/it-IT.rc b/base/applications/rapps/lang/it-IT.rc index 0ba9c27524c..46877f8bd12 100644 --- a/base/applications/rapps/lang/it-IT.rc +++ b/base/applications/rapps/lang/it-IT.rc @@ -270,3 +270,8 @@ BEGIN IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n" IDS_CMD_PACKAGE_INFO "Information about package %1:\n" END + +STRINGTABLE +BEGIN + IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" +END diff --git a/base/applications/rapps/lang/ja-JP.rc b/base/applications/rapps/lang/ja-JP.rc index c078771012e..51fe5e18440 100644 --- a/base/applications/rapps/lang/ja-JP.rc +++ b/base/applications/rapps/lang/ja-JP.rc @@ -270,3 +270,8 @@ BEGIN IDS_CMD_PACKAGE_NOT_FOUND "パッケージ %1 を探ã™ã®ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" IDS_CMD_PACKAGE_INFO "パッケージ %1 ã«é–¢ã™ã‚‹æƒ…å ±:\n" END + +STRINGTABLE +BEGIN + IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" +END diff --git a/base/applications/rapps/lang/no-NO.rc b/base/applications/rapps/lang/no-NO.rc index ff292224fd4..2fa4b5d3094 100644 --- a/base/applications/rapps/lang/no-NO.rc +++ b/base/applications/rapps/lang/no-NO.rc @@ -268,3 +268,8 @@ BEGIN IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n" IDS_CMD_PACKAGE_INFO "Information about package %1:\n" END + +STRINGTABLE +BEGIN + IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" +END diff --git a/base/applications/rapps/lang/pl-PL.rc b/base/applications/rapps/lang/pl-PL.rc index cb0fbfd3f51..92968c724b6 100644 --- a/base/applications/rapps/lang/pl-PL.rc +++ b/base/applications/rapps/lang/pl-PL.rc @@ -270,3 +270,8 @@ BEGIN IDS_CMD_PACKAGE_NOT_FOUND "Nie można odnaleźć pakietu %1.\n" IDS_CMD_PACKAGE_INFO "Informacje o pakiecie %1:\n" END + +STRINGTABLE +BEGIN + IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" +END diff --git a/base/applications/rapps/lang/pt-BR.rc b/base/applications/rapps/lang/pt-BR.rc index d6a3d5e2425..8d978ee9d0a 100644 --- a/base/applications/rapps/lang/pt-BR.rc +++ b/base/applications/rapps/lang/pt-BR.rc @@ -268,3 +268,8 @@ BEGIN IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n" IDS_CMD_PACKAGE_INFO "Information about package %1:\n" END + +STRINGTABLE +BEGIN + IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" +END diff --git a/base/applications/rapps/lang/pt-PT.rc b/base/applications/rapps/lang/pt-PT.rc index e8f9af18d5d..3cad5e57a59 100644 --- a/base/applications/rapps/lang/pt-PT.rc +++ b/base/applications/rapps/lang/pt-PT.rc @@ -268,3 +268,8 @@ BEGIN IDS_CMD_PACKAGE_NOT_FOUND "Falhou a procura do pacote %1.\n" IDS_CMD_PACKAGE_INFO "Informações acerca do pacote %1:\n" END + +STRINGTABLE +BEGIN + IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" +END diff --git a/base/applications/rapps/lang/ro-RO.rc b/base/applications/rapps/lang/ro-RO.rc index 9ad955cd815..ff1b21ca697 100644 --- a/base/applications/rapps/lang/ro-RO.rc +++ b/base/applications/rapps/lang/ro-RO.rc @@ -270,3 +270,8 @@ BEGIN IDS_CMD_PACKAGE_NOT_FOUND "Nu se poate găsi pachetul %1.\n" IDS_CMD_PACKAGE_INFO "InformaÈ›ii despre pachet %1:\n" END + +STRINGTABLE +BEGIN + IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" +END diff --git a/base/applications/rapps/lang/ru-RU.rc b/base/applications/rapps/lang/ru-RU.rc index c043e438b20..438c00a3035 100644 --- a/base/applications/rapps/lang/ru-RU.rc +++ b/base/applications/rapps/lang/ru-RU.rc @@ -273,3 +273,8 @@ BEGIN IDS_CMD_PACKAGE_NOT_FOUND "Ðе удалоÑÑŒ найти пакет %1.\n" IDS_CMD_PACKAGE_INFO "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ пакете %1:\n" END + +STRINGTABLE +BEGIN + IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" +END diff --git a/base/applications/rapps/lang/sk-SK.rc b/base/applications/rapps/lang/sk-SK.rc index 1ec3921d9b9..efc5521f6ad 100644 --- a/base/applications/rapps/lang/sk-SK.rc +++ b/base/applications/rapps/lang/sk-SK.rc @@ -268,3 +268,8 @@ BEGIN IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n" IDS_CMD_PACKAGE_INFO "Information about package %1:\n" END + +STRINGTABLE +BEGIN + IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" +END diff --git a/base/applications/rapps/lang/sq-AL.rc b/base/applications/rapps/lang/sq-AL.rc index 3ed2d62d1c6..adf42542cc5 100644 --- a/base/applications/rapps/lang/sq-AL.rc +++ b/base/applications/rapps/lang/sq-AL.rc @@ -268,3 +268,8 @@ BEGIN IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n" IDS_CMD_PACKAGE_INFO "Information about package %1:\n" END + +STRINGTABLE +BEGIN + IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" +END diff --git a/base/applications/rapps/lang/sv-SE.rc b/base/applications/rapps/lang/sv-SE.rc index 74b6e635bc1..c1db45e92e6 100644 --- a/base/applications/rapps/lang/sv-SE.rc +++ b/base/applications/rapps/lang/sv-SE.rc @@ -268,3 +268,8 @@ BEGIN IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n" IDS_CMD_PACKAGE_INFO "Information about package %1:\n" END + +STRINGTABLE +BEGIN + IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" +END diff --git a/base/applications/rapps/lang/tr-TR.rc b/base/applications/rapps/lang/tr-TR.rc index ee1213cdf73..8a785398775 100644 --- a/base/applications/rapps/lang/tr-TR.rc +++ b/base/applications/rapps/lang/tr-TR.rc @@ -270,3 +270,8 @@ BEGIN IDS_CMD_PACKAGE_NOT_FOUND "%1 paketi bulunmadı.\n" IDS_CMD_PACKAGE_INFO "%1 paketi hakkındaki bilgi:\n" END + +STRINGTABLE +BEGIN + IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" +END diff --git a/base/applications/rapps/lang/uk-UA.rc b/base/applications/rapps/lang/uk-UA.rc index 4bdca75b294..0d3b91f39a2 100644 --- a/base/applications/rapps/lang/uk-UA.rc +++ b/base/applications/rapps/lang/uk-UA.rc @@ -271,3 +271,8 @@ BEGIN IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n" IDS_CMD_PACKAGE_INFO "Information about package %1:\n" END + +STRINGTABLE +BEGIN + IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" +END diff --git a/base/applications/rapps/lang/zh-CN.rc b/base/applications/rapps/lang/zh-CN.rc index 9df8e29ac8d..04278ff8c22 100644 --- a/base/applications/rapps/lang/zh-CN.rc +++ b/base/applications/rapps/lang/zh-CN.rc @@ -272,3 +272,8 @@ BEGIN IDS_CMD_PACKAGE_NOT_FOUND "未能找到软件包 %1。\n" IDS_CMD_PACKAGE_INFO "有关软件包 %1 çš„ä¿¡æ¯ï¼š\n" END + +STRINGTABLE +BEGIN + IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" +END diff --git a/base/applications/rapps/lang/zh-HK.rc b/base/applications/rapps/lang/zh-HK.rc index 684fbc0ed35..22292befa08 100644 --- a/base/applications/rapps/lang/zh-HK.rc +++ b/base/applications/rapps/lang/zh-HK.rc @@ -269,3 +269,8 @@ BEGIN IDS_CMD_PACKAGE_NOT_FOUND "無法找到軟件套件 %1。\n" IDS_CMD_PACKAGE_INFO "有關軟件套件 %1 的資訊:\n" END + +STRINGTABLE +BEGIN + IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" +END diff --git a/base/applications/rapps/lang/zh-TW.rc b/base/applications/rapps/lang/zh-TW.rc index 4dac28d7193..4144d8f3193 100644 --- a/base/applications/rapps/lang/zh-TW.rc +++ b/base/applications/rapps/lang/zh-TW.rc @@ -269,3 +269,8 @@ BEGIN IDS_CMD_PACKAGE_NOT_FOUND "無法找到軟體套件 %1。\n" IDS_CMD_PACKAGE_INFO "有關軟體套件 %1 的資訊:\n" END + +STRINGTABLE +BEGIN + IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" +END diff --git a/base/applications/rapps/loaddlg.cpp b/base/applications/rapps/loaddlg.cpp index 0433463a8f5..f05bfdd5095 100644 --- a/base/applications/rapps/loaddlg.cpp +++ b/base/applications/rapps/loaddlg.cpp @@ -49,6 +49,7 @@ #include "rosui.h" #include "dialogs.h" #include "misc.h" +#include "unattended.h" #ifdef USE_CERT_PINNING #define CERT_ISSUER_INFO_OLD "US\r\nLet's Encrypt\r\nLet's Encrypt Authority X3" @@ -107,19 +108,26 @@ UrlUnescapeAndMakeFileNameValid(CStringW& str) struct DownloadInfo { - DownloadInfo() + DownloadInfo() : DLType(DLTYPE_APPLICATION), IType(INSTALLER_UNKNOWN), SizeInBytes(0) { } DownloadInfo(const CAppInfo &AppInfo) : DLType(DLTYPE_APPLICATION) { AppInfo.GetDownloadInfo(szUrl, szSHA1, SizeInBytes); szName = AppInfo.szDisplayName; + IType = AppInfo.GetInstallerType(); + if (IType == INSTALLER_GENERATE) + { + szPackageName = AppInfo.szIdentifier; + } } DownloadType DLType; + InstallerType IType; CStringW szUrl; CStringW szName; CStringW szSHA1; + CStringW szPackageName; ULONG SizeInBytes; }; @@ -400,12 +408,12 @@ CertGetSubjectAndIssuer(HINTERNET hFile, CLocalPtr &subjectInfo, CLocalPtr #endif inline VOID -MessageBox_LoadString(HWND hMainWnd, INT StringID) +MessageBox_LoadString(HWND hOwnerWnd, INT StringID) { CStringW szMsgText; if (szMsgText.LoadStringW(StringID)) { - MessageBoxW(hMainWnd, szMsgText.GetString(), NULL, MB_OK | MB_ICONERROR); + MessageBoxW(hOwnerWnd, szMsgText.GetString(), NULL, MB_OK | MB_ICONERROR); } } @@ -1011,6 +1019,7 @@ CDownloadManager::ThreadFunc(LPVOID param) // run it if (InfoArray[iAppId].DLType == DLTYPE_APPLICATION) { + CStringW app, params; SHELLEXECUTEINFOW shExInfo = {0}; shExInfo.cbSize = sizeof(shExInfo); shExInfo.fMask = SEE_MASK_NOCLOSEPROCESS; @@ -1019,6 +1028,17 @@ CDownloadManager::ThreadFunc(LPVOID param) shExInfo.lpParameters = L""; shExInfo.nShow = SW_SHOW; + if (InfoArray[iAppId].IType == INSTALLER_GENERATE) + { + params = L"/" + CStringW(CMD_KEY_GENINST) + L" \"" + + InfoArray[iAppId].szPackageName + L"\" \"" + + CStringW(shExInfo.lpFile) + L"\""; + shExInfo.lpParameters = params; + shExInfo.lpFile = app.GetBuffer(MAX_PATH); + GetModuleFileNameW(NULL, const_cast(shExInfo.lpFile), MAX_PATH); + app.ReleaseBuffer(); + } + /* FIXME: Do we want to log installer status? */ WriteLogMessage(EVENTLOG_SUCCESS, MSG_SUCCESS_INSTALL, InfoArray[iAppId].szName); diff --git a/base/applications/rapps/misc.cpp b/base/applications/rapps/misc.cpp index bf3b1ddc6b5..f2b15d5c645 100644 --- a/base/applications/rapps/misc.cpp +++ b/base/applications/rapps/misc.cpp @@ -12,9 +12,6 @@ static HANDLE hLog = NULL; -static BOOL bIsSys64ResultCached = FALSE; -static BOOL bIsSys64Result = FALSE; - VOID CopyTextToClipboard(LPCWSTR lpszText) { @@ -289,32 +286,14 @@ GetInstalledVersion(CStringW *pszVersion, const CStringW &szRegName) BOOL IsSystem64Bit() { - if (bIsSys64ResultCached) - { - // just return cached result - return bIsSys64Result; - } - - SYSTEM_INFO si; - typedef void(WINAPI * LPFN_PGNSI)(LPSYSTEM_INFO); - LPFN_PGNSI pGetNativeSystemInfo = - (LPFN_PGNSI)GetProcAddress(GetModuleHandle(L"kernel32.dll"), "GetNativeSystemInfo"); - if (pGetNativeSystemInfo) - { - pGetNativeSystemInfo(&si); - if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 || - si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64) - { - bIsSys64Result = TRUE; - } - } - else - { - bIsSys64Result = FALSE; - } - - bIsSys64ResultCached = TRUE; // next time calling this function, it will directly return bIsSys64Result - return bIsSys64Result; +#ifdef _WIN64 + return TRUE; +#else + static UINT cache = 0; + if (!cache) + cache = 1 + (IsOS(OS_WOW6432) != FALSE); + return cache - 1; +#endif } INT @@ -368,6 +347,64 @@ UnixTimeToFileTime(DWORD dwUnixTime, LPFILETIME pFileTime) pFileTime->dwHighDateTime = ll >> 32; } +HRESULT +RegKeyHasValues(HKEY hKey, LPCWSTR Path, REGSAM wowsam) +{ + CRegKey key; + LONG err = key.Open(hKey, Path, KEY_QUERY_VALUE | wowsam); + if (err == ERROR_SUCCESS) + { + WCHAR name[1]; + DWORD cchname = _countof(name), cbsize = 0; + err = RegEnumValueW(key, 0, name, &cchname, NULL, NULL, NULL, &cbsize); + if (err == ERROR_NO_MORE_ITEMS) + return S_FALSE; + if (err == ERROR_MORE_DATA) + err = ERROR_SUCCESS; + } + return HRESULT_FROM_WIN32(err); +} + +LPCWSTR +GetRegString(CRegKey &Key, LPCWSTR Name, CStringW &Value) +{ + for (;;) + { + ULONG cb = 0, cch; + ULONG err = Key.QueryValue(Name, NULL, NULL, &cb); + if (err) + break; + cch = cb / sizeof(WCHAR); + LPWSTR p = Value.GetBuffer(cch + 1); + p[cch] = UNICODE_NULL; + err = Key.QueryValue(Name, NULL, (BYTE*)p, &cb); + if (err == ERROR_MORE_DATA) + continue; + if (err) + break; + Value.ReleaseBuffer(); + return Value.GetString(); + } + return NULL; +} + +bool +ExpandEnvStrings(CStringW &Str) +{ + CStringW buf; + DWORD cch = ExpandEnvironmentStringsW(Str, NULL, 0); + if (cch) + { + if (ExpandEnvironmentStringsW(Str, buf.GetBuffer(cch), cch) == cch) + { + buf.ReleaseBuffer(cch - 1); + Str = buf; + return true; + } + } + return false; +} + BOOL SearchPatternMatch(LPCWSTR szHaystack, LPCWSTR szNeedle) { @@ -376,3 +413,78 @@ SearchPatternMatch(LPCWSTR szHaystack, LPCWSTR szNeedle) /* TODO: Improve pattern search beyond a simple case-insensitive substring search. */ return StrStrIW(szHaystack, szNeedle) != NULL; } + +BOOL +DeleteDirectoryTree(LPCWSTR Dir, HWND hwnd) +{ + CStringW from(Dir); + UINT cch = from.GetLength(); + from.Append(L"00"); + LPWSTR p = from.GetBuffer(); + p[cch] = p[cch + 1] = L'\0'; // Double null-terminate + UINT fof = FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT; + SHFILEOPSTRUCT shfos = { hwnd, FO_DELETE, p, NULL, (FILEOP_FLAGS)fof }; + return SHFileOperationW(&shfos); +} + +UINT +CreateDirectoryTree(LPCWSTR Dir) +{ + UINT err = SHCreateDirectory(NULL, Dir); + return err == ERROR_ALREADY_EXISTS ? 0 : err; +} + +CStringW +SplitFileAndDirectory(LPCWSTR FullPath, CStringW *pDir) +{ + CPathW dir = FullPath; + //int win = dir.ReverseFind(L'\\'), nix = dir.ReverseFind(L'/'), sep = max(win, nix); + int sep = dir.FindFileName(); + CStringW file = dir.m_strPath.Mid(sep); + if (pDir) + *pDir = sep == -1 ? L"" : dir.m_strPath.Left(sep - 1); + return file; +} + +HRESULT +GetSpecialPath(UINT csidl, CStringW &Path, HWND hwnd) +{ + if (!SHGetSpecialFolderPathW(hwnd, Path.GetBuffer(MAX_PATH), csidl, TRUE)) + return E_FAIL; + Path.ReleaseBuffer(); + return S_OK; +} + +HRESULT +GetKnownPath(REFKNOWNFOLDERID kfid, CStringW &Path, DWORD Flags) +{ + PWSTR p; + FARPROC f = GetProcAddress(LoadLibraryW(L"SHELL32"), "SHGetKnownFolderPath"); + if (!f) + return HRESULT_FROM_WIN32(ERROR_OLD_WIN_VERSION); + HRESULT hr = ((HRESULT(WINAPI*)(REFKNOWNFOLDERID,UINT,HANDLE,PWSTR*))f)(kfid, Flags, NULL, &p); + if (FAILED(hr)) + return hr; + Path = p; + CoTaskMemFree(p); + return hr; +} + +HRESULT +GetProgramFilesPath(CStringW &Path, BOOL PerUser, HWND hwnd) +{ + if (!PerUser) + return GetSpecialPath(CSIDL_PROGRAM_FILES, Path, hwnd); + + HRESULT hr = GetKnownPath(FOLDERID_UserProgramFiles, Path); + if (FAILED(hr)) + { + hr = GetSpecialPath(CSIDL_LOCAL_APPDATA, Path, hwnd); + // Use the correct path on NT6 (on NT5 the path becomes a bit long) + if (SUCCEEDED(hr) && LOBYTE(GetVersion()) >= 6) + { + Path = BuildPath(Path, L"Programs"); // Should not be localized + } + } + return hr; +} diff --git a/base/applications/rapps/unattended.cpp b/base/applications/rapps/unattended.cpp index ab6aaec676e..61224f58a31 100644 --- a/base/applications/rapps/unattended.cpp +++ b/base/applications/rapps/unattended.cpp @@ -8,6 +8,7 @@ #include "gui.h" #include "unattended.h" +#include "configparser.h" #include #include @@ -42,6 +43,22 @@ InitRappsConsole() ConInitStdStreams(); // Initialize the Console Standard Streams } +static CAppInfo * +SearchForAppWithDisplayName(CAppDB &db, AppsCategories Type, LPCWSTR Name) +{ + CAtlList List; + db.GetApps(List, Type); + for (POSITION it = List.GetHeadPosition(); it;) + { + CAppInfo *Info = List.GetNext(it); + if (SearchPatternMatch(Info->szDisplayName, Name)) + { + return Info; + } + } + return NULL; +} + static BOOL HandleInstallCommand(CAppDB *db, LPWSTR szCommand, int argcLeft, LPWSTR *argvLeft) { @@ -104,6 +121,95 @@ HandleSetupCommand(CAppDB *db, LPWSTR szCommand, int argcLeft, LPWSTR *argvLeft) return DownloadListOfApplications(Applications, TRUE); } +static BOOL +HandleUninstallCommand(CAppDB &db, UINT argcLeft, LPWSTR *argvLeft) +{ + UINT argi = 0, silent = FALSE, byregkeyname = FALSE; + for (; argcLeft; ++argi, --argcLeft) + { + if (!StrCmpIW(argvLeft[argi], L"/S")) + ++silent; + else if (!StrCmpIW(argvLeft[argi], L"/K")) + ++byregkeyname; + else + break; + } + if (argcLeft != 1) + return FALSE; + + CStringW buf; + LPCWSTR name = argvLeft[argi]; + BOOL retval = FALSE; + CAppInfo *pInfo = NULL, *pDelete = NULL; + + if (!byregkeyname) + { + for (UINT i = ENUM_INSTALLED_MIN; !pInfo && i <= ENUM_INSTALLED_MAX; ++i) + { + pInfo = SearchForAppWithDisplayName(db, AppsCategories(i), name); + } + + if (!pInfo) + { + CAvailableApplicationInfo *p = db.FindAvailableByPackageName(name); + if (p) + { + CConfigParser *cp = p->GetConfigParser(); + if (cp && cp->GetString(DB_REGNAME, buf) && !buf.IsEmpty()) + { + name = buf.GetString(); + byregkeyname = TRUE; + } + } + } + } + + if (byregkeyname) + { + // Force a specific key type if requested ([32|64]<\\KeyName>) + if (name[0]) + { + REGSAM wow = 0; + UINT i = 1; + if (name[i] == '3' && name[i + 1]) + wow = KEY_WOW64_32KEY, i += 2; + else if (name[i] == '6' && name[i + 1]) + wow = KEY_WOW64_64KEY, i += 2; + + if (name[i++] == '\\') + { + pInfo = CAppDB::CreateInstalledAppInstance(name + i, name[0] == 'U', wow); + } + } + + if (!pInfo) + { + pInfo = CAppDB::CreateInstalledAppByRegistryKey(name); + } + pDelete = pInfo; + } + + if (pInfo) + { + retval = pInfo->UninstallApplication(silent ? UCF_SILENT : UCF_NONE); + } + delete pDelete; + return retval; +} + +static BOOL +HandleGenerateInstallerCommand(CAppDB &db, UINT argcLeft, LPWSTR *argvLeft) +{ + if (argcLeft != 2) + return FALSE; + + CAvailableApplicationInfo *pAI = db.FindAvailableByPackageName(argvLeft[0]); + if (!pAI) + return FALSE; + + return ExtractAndRunGeneratedInstaller(*pAI, argvLeft[1]); +} + static BOOL HandleFindCommand(CAppDB *db, LPWSTR szCommand, int argcLeft, LPWSTR *argvLeft) { @@ -276,6 +382,14 @@ ParseCmdAndExecute(LPWSTR lpCmdLine, BOOL bIsFirstLaunch, int nCmdShow) { return HandleSetupCommand(&db, argv[1], argc - 2, argv + 2); } + else if (MatchCmdOption(argv[1], CMD_KEY_UNINSTALL)) + { + return HandleUninstallCommand(db, argc - 2, argv + 2); + } + else if (MatchCmdOption(argv[1], CMD_KEY_GENINST)) + { + return HandleGenerateInstallerCommand(db, argc - 2, argv + 2); + } InitRappsConsole(); diff --git a/base/applications/rapps/winmain.cpp b/base/applications/rapps/winmain.cpp index 3fb8e23d4b1..be2294c7504 100644 --- a/base/applications/rapps/winmain.cpp +++ b/base/applications/rapps/winmain.cpp @@ -49,6 +49,7 @@ wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, INT nSh InitLogs(); InitCommonControls(); + SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_ABOVE_NORMAL); // Give UI higher priority than background threads // parse cmd-line and perform the corresponding operation BOOL bSuccess = ParseCmdAndExecute(GetCommandLineW(), bIsFirstLaunch, SW_SHOWNORMAL); From 190b3da95d80ecb3e128303cb7d595e04a8e172d Mon Sep 17 00:00:00 2001 From: "Carl J. Bialorucki" Date: Thu, 9 May 2024 10:03:43 -0600 Subject: [PATCH 122/182] [CMD][BOOTDATA] Minor improvements (#5745) * Remove a hardcoded copyright string and move into localizable resources. * Remove the PROMPT environment variable from clean installs of ReactOS. By default, the command prompt uses $P$G (path + '>') as its prompt settings and does not require this environment variable. Clean installs of Windows Server 2003 do not include this environment variable either. I documented this environment variable in our wiki if anyone would like to set it on their own ReactOS installs. * Remove the new line above the copyright notice when the information line is turned off. CORE-16193, CORE-17031 --- base/shell/cmd/cmd.c | 8 ++++++-- base/shell/cmd/cmd.h | 1 + base/shell/cmd/lang/cs-CZ.rc | 1 + base/shell/cmd/lang/de-DE.rc | 1 + base/shell/cmd/lang/el-GR.rc | 1 + base/shell/cmd/lang/en-US.rc | 1 + base/shell/cmd/lang/es-ES.rc | 1 + base/shell/cmd/lang/fr-FR.rc | 1 + base/shell/cmd/lang/hu-HU.rc | 1 + base/shell/cmd/lang/id-ID.rc | 1 + base/shell/cmd/lang/it-IT.rc | 1 + base/shell/cmd/lang/ja-JP.rc | 1 + base/shell/cmd/lang/no-NO.rc | 1 + base/shell/cmd/lang/pl-PL.rc | 1 + base/shell/cmd/lang/pt-BR.rc | 1 + base/shell/cmd/lang/pt-PT.rc | 1 + base/shell/cmd/lang/ro-RO.rc | 1 + base/shell/cmd/lang/ru-RU.rc | 1 + base/shell/cmd/lang/sk-SK.rc | 1 + base/shell/cmd/lang/sq-AL.rc | 1 + base/shell/cmd/lang/sv-SE.rc | 1 + base/shell/cmd/lang/tr-TR.rc | 1 + base/shell/cmd/lang/uk-UA.rc | 1 + base/shell/cmd/lang/zh-CN.rc | 1 + base/shell/cmd/lang/zh-TW.rc | 1 + base/shell/cmd/prompt.c | 38 +++++++++++++++++++++++++----------- base/shell/cmd/resource.h | 1 + base/shell/cmd/ver.c | 2 +- boot/bootdata/hivesys.inf | 1 - 29 files changed, 59 insertions(+), 15 deletions(-) diff --git a/base/shell/cmd/cmd.c b/base/shell/cmd/cmd.c index 126f2f4cb31..2fa513c652e 100644 --- a/base/shell/cmd/cmd.c +++ b/base/shell/cmd/cmd.c @@ -2299,11 +2299,15 @@ Initialize(VOID) if (!*ptr) { /* If neither /C or /K was given, display a simple version string */ - ConOutChar(_T('\n')); + + /* Insert a new line above the copyright notice if we are drawing the information line. */ + if (HasInfoLine()) + ConOutChar('\n'); + ConOutResPrintf(STRING_REACTOS_VERSION, _T(KERNEL_VERSION_STR), _T(KERNEL_VERSION_BUILD_STR)); - ConOutPuts(_T("(C) Copyright 1998-") _T(COPYRIGHT_YEAR) _T(" ReactOS Team.\n")); + ConOutResPrintf(STRING_CMD_COPYRIGHT, _T(COPYRIGHT_YEAR)); } if (AutoRun) diff --git a/base/shell/cmd/cmd.h b/base/shell/cmd/cmd.h index 0812596719b..d07f98301ea 100644 --- a/base/shell/cmd/cmd.h +++ b/base/shell/cmd/cmd.h @@ -434,6 +434,7 @@ INT cmd_path (LPTSTR); VOID InitPrompt (VOID); VOID PrintPrompt (VOID); INT cmd_prompt (LPTSTR); +BOOL HasInfoLine(VOID); /* Prototypes for REDIR.C */ HANDLE GetHandle(UINT Number); diff --git a/base/shell/cmd/lang/cs-CZ.rc b/base/shell/cmd/lang/cs-CZ.rc index 301cb262409..7cd4890fd4c 100644 --- a/base/shell/cmd/lang/cs-CZ.rc +++ b/base/shell/cmd/lang/cs-CZ.rc @@ -532,6 +532,7 @@ title new title\n" STRING_REPLACE_ERROR6 "Nebyly nazeleny žádné soubory - %s\n" STRING_REPLACE_ERROR7 "Rozšířená chyba 32\n" STRING_CMD_INFOLINE " ReactOS Příkazový řádek Napsání HELP = NápovÄ›da " + STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s ReactOS Team.\n" STRING_REACTOS_VERSION "ReactOS [Verze %s %s]\n" STRING_CMD_SHELLINFO "\nReactOS Interpret příkazového řádku\nVerze %s %s" STRING_VERSION_RUNNING_ON "Běží na: " diff --git a/base/shell/cmd/lang/de-DE.rc b/base/shell/cmd/lang/de-DE.rc index b6a1b9c0d9a..50645880d4a 100644 --- a/base/shell/cmd/lang/de-DE.rc +++ b/base/shell/cmd/lang/de-DE.rc @@ -528,6 +528,7 @@ Titel neuer Titel" STRING_REPLACE_ERROR6 "Keine Dateien gefunden - %s\n" STRING_REPLACE_ERROR7 "Erweiterter Fehler 32\n" STRING_CMD_INFOLINE " ReactOS Eingabeaufforderung HELP eingeben = Hilfe " + STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s ReactOS Team.\n" STRING_REACTOS_VERSION "ReactOS [Version %s %s]\n" STRING_CMD_SHELLINFO "\nReactOS Eingabeaufforderung\nVersion %s %s" STRING_VERSION_RUNNING_ON "Läuft in: " diff --git a/base/shell/cmd/lang/el-GR.rc b/base/shell/cmd/lang/el-GR.rc index f5711d1452c..a12fe5b93f4 100644 --- a/base/shell/cmd/lang/el-GR.rc +++ b/base/shell/cmd/lang/el-GR.rc @@ -531,6 +531,7 @@ title new title\n" STRING_REPLACE_ERROR6 "Δε βÏέθηκαν αÏχεία - %s\n" STRING_REPLACE_ERROR7 "Extended Error 32\n" STRING_CMD_INFOLINE " ReactOS Command Prompt Type HELP = Help " + STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s ReactOS Team.\n" STRING_REACTOS_VERSION "ReactOS [Version %s %s]\n" STRING_CMD_SHELLINFO "\nReactOS Command Line Interpreter\nVersion %s %s" STRING_VERSION_RUNNING_ON "Running on: " diff --git a/base/shell/cmd/lang/en-US.rc b/base/shell/cmd/lang/en-US.rc index c48c8c6cdd0..f52a680072e 100644 --- a/base/shell/cmd/lang/en-US.rc +++ b/base/shell/cmd/lang/en-US.rc @@ -527,6 +527,7 @@ title new title\n" STRING_REPLACE_ERROR6 "No files found - %s\n" STRING_REPLACE_ERROR7 "Extended Error 32\n" STRING_CMD_INFOLINE " ReactOS Command Prompt Type HELP = Help " + STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s ReactOS Team.\n" STRING_REACTOS_VERSION "ReactOS [Version %s %s]\n" STRING_CMD_SHELLINFO "\nReactOS Command Line Interpreter\nVersion %s %s" STRING_VERSION_RUNNING_ON "Running on: " diff --git a/base/shell/cmd/lang/es-ES.rc b/base/shell/cmd/lang/es-ES.rc index 690cbdf270b..9622df4df8b 100644 --- a/base/shell/cmd/lang/es-ES.rc +++ b/base/shell/cmd/lang/es-ES.rc @@ -535,6 +535,7 @@ title Nuevo título\n" STRING_REPLACE_ERROR6 "No se han encontrado archivos - %s\n" STRING_REPLACE_ERROR7 "Error extendido 32\n" STRING_CMD_INFOLINE " Consola de comandos de ReactOS Escribe HELP para ver la ayuda " + STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s ReactOS Team.\n" STRING_REACTOS_VERSION "ReactOS [Versión %s %s]\n" STRING_CMD_SHELLINFO "\nIntérprete de comandos de ReactOS\nVersion %s %s" STRING_VERSION_RUNNING_ON "Funcionando en: " diff --git a/base/shell/cmd/lang/fr-FR.rc b/base/shell/cmd/lang/fr-FR.rc index 7968f9ba700..85d4ad62c12 100644 --- a/base/shell/cmd/lang/fr-FR.rc +++ b/base/shell/cmd/lang/fr-FR.rc @@ -543,6 +543,7 @@ titre titre de la fenêtre" STRING_REPLACE_ERROR6 "Aucun fichier trouvé - %s\n" STRING_REPLACE_ERROR7 "Erreur étendue 32\n" STRING_CMD_INFOLINE " ReactOS Command Prompt Type HELP = Help " + STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s ReactOS Team.\n" STRING_REACTOS_VERSION "ReactOS [Version %s %s]\n" STRING_CMD_SHELLINFO "\nInterpréteur de ligne de commandes ReactOS\nVersion %s %s" STRING_VERSION_RUNNING_ON "Fonctionnant sous: " diff --git a/base/shell/cmd/lang/hu-HU.rc b/base/shell/cmd/lang/hu-HU.rc index 2994170e092..c4242536933 100644 --- a/base/shell/cmd/lang/hu-HU.rc +++ b/base/shell/cmd/lang/hu-HU.rc @@ -519,6 +519,7 @@ title új cím\n" STRING_REPLACE_ERROR6 "Nem találhatóak fájlok - %s\n" STRING_REPLACE_ERROR7 "Kiterjesztett hiba 32\n" STRING_CMD_INFOLINE " ReactOS Parancssor HELP parancs = Súgó " + STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s ReactOS Team.\n" STRING_REACTOS_VERSION "ReactOS [Version %s %s]\n" STRING_CMD_SHELLINFO "\nReactOS Parancssor értelmezÅ‘\nVersion %s %s" STRING_VERSION_RUNNING_ON "Ezen fut: " diff --git a/base/shell/cmd/lang/id-ID.rc b/base/shell/cmd/lang/id-ID.rc index 6f40cb787ab..8280f036a63 100644 --- a/base/shell/cmd/lang/id-ID.rc +++ b/base/shell/cmd/lang/id-ID.rc @@ -526,6 +526,7 @@ title judul baru\n" STRING_REPLACE_ERROR6 "No files found - %s\n" STRING_REPLACE_ERROR7 "Extended Error 32\n" STRING_CMD_INFOLINE " ReactOS Command Prompt Type HELP = Help " + STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s ReactOS Team.\n" STRING_REACTOS_VERSION "ReactOS [Versi %s %s]\n" STRING_CMD_SHELLINFO "\nInterpreter Baris Perintah ReactOS\nVersi %s %s" STRING_VERSION_RUNNING_ON "Berjalan pada: " diff --git a/base/shell/cmd/lang/it-IT.rc b/base/shell/cmd/lang/it-IT.rc index a87f920652f..dc9ad0da8c0 100644 --- a/base/shell/cmd/lang/it-IT.rc +++ b/base/shell/cmd/lang/it-IT.rc @@ -536,6 +536,7 @@ titolo il nuovo titolo\n" STRING_REPLACE_ERROR6 "Nessun file trovato - %s\n" STRING_REPLACE_ERROR7 "Errore esteso 32\n" STRING_CMD_INFOLINE " ReactOS Command Prompt Type HELP = Help " + STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s ReactOS Team.\n" STRING_REACTOS_VERSION "ReactOS [Version %s %s]\n" STRING_CMD_SHELLINFO "\nInterprete di linea di comando di ReactOS\nVersion %s %s" STRING_VERSION_RUNNING_ON "In esecuzione su: " diff --git a/base/shell/cmd/lang/ja-JP.rc b/base/shell/cmd/lang/ja-JP.rc index e6fc6fa6fe0..f34323c714e 100644 --- a/base/shell/cmd/lang/ja-JP.rc +++ b/base/shell/cmd/lang/ja-JP.rc @@ -534,6 +534,7 @@ RESTORE ウィンドウを元ã®ã‚µã‚¤ã‚ºã«æˆ»ã—ã¾ã™ã€‚\n\ STRING_REPLACE_ERROR6 "No files found - %s\n" STRING_REPLACE_ERROR7 "Extended Error 32\n" STRING_CMD_INFOLINE " ReactOS Command Prompt Type HELP = Help " + STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s ReactOS Team.\n" STRING_REACTOS_VERSION "ReactOS [Version %s %s]\n" STRING_CMD_SHELLINFO "\nReactOS Command Line Interpreter\nVersion %s %s" STRING_VERSION_RUNNING_ON "Running on: " diff --git a/base/shell/cmd/lang/no-NO.rc b/base/shell/cmd/lang/no-NO.rc index 43513601503..d25eedaf667 100644 --- a/base/shell/cmd/lang/no-NO.rc +++ b/base/shell/cmd/lang/no-NO.rc @@ -525,6 +525,7 @@ tittel ny tittel\n" STRING_REPLACE_ERROR6 "Ingen filer ble funnet - %s\n" STRING_REPLACE_ERROR7 "Extended Error 32\n" STRING_CMD_INFOLINE " ReactOS Command Prompt Type HELP = Help " + STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s ReactOS Team.\n" STRING_REACTOS_VERSION "ReactOS [Versjon %s %s]\n" STRING_CMD_SHELLINFO "\nReactOS Kommandotolk\nVersjon %s %s" STRING_VERSION_RUNNING_ON "Kjører pÃ¥: " diff --git a/base/shell/cmd/lang/pl-PL.rc b/base/shell/cmd/lang/pl-PL.rc index 24ee8ecacf2..6831307ea39 100644 --- a/base/shell/cmd/lang/pl-PL.rc +++ b/base/shell/cmd/lang/pl-PL.rc @@ -532,6 +532,7 @@ title nowy tytuÅ‚ okna\n" STRING_REPLACE_ERROR6 "Nie znaleziono plików - %s\n" STRING_REPLACE_ERROR7 "Extended Error 32 - BÅ‚Ä…d współdzielenia\n" STRING_CMD_INFOLINE " Wiersz polecenia ReactOS Type HELP = Help " + STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s ReactOS Team.\n" STRING_REACTOS_VERSION "ReactOS [Wersja %s %s]\n" STRING_CMD_SHELLINFO "\nInterpreter linii poleceÅ„ ReactOS\nWersja %s %s" STRING_VERSION_RUNNING_ON "DziaÅ‚ajÄ…cy na: " diff --git a/base/shell/cmd/lang/pt-BR.rc b/base/shell/cmd/lang/pt-BR.rc index cf2373aad90..8c9c493fe8b 100644 --- a/base/shell/cmd/lang/pt-BR.rc +++ b/base/shell/cmd/lang/pt-BR.rc @@ -555,6 +555,7 @@ título Novo título\n" STRING_REPLACE_ERROR6 "Nenhum arquivo encontrado - %s\n" STRING_REPLACE_ERROR7 "Erro estendido 32\n" STRING_CMD_INFOLINE "Prompt de comandos do ReactOS \tHELP = Ajuda" + STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s ReactOS Team.\n" STRING_REACTOS_VERSION "ReactOS [Versão %s %s]\n" STRING_CMD_SHELLINFO "\nReactOS Interpretador de linha de comando\nVersão %s %s" STRING_VERSION_RUNNING_ON "Em execução em:" diff --git a/base/shell/cmd/lang/pt-PT.rc b/base/shell/cmd/lang/pt-PT.rc index f67a8febcb6..7f31964dd13 100644 --- a/base/shell/cmd/lang/pt-PT.rc +++ b/base/shell/cmd/lang/pt-PT.rc @@ -548,6 +548,7 @@ título Novo título\n" STRING_REPLACE_ERROR6 "Nenhum ficheiro encontrado - %s\n" STRING_REPLACE_ERROR7 "Erro estendido 32\n" STRING_CMD_INFOLINE "Tipo de prompt de comando do ReactOS HELP = Ajuda" + STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s ReactOS Team.\n" STRING_REACTOS_VERSION "ReactOS [Versão %s %s]\n" STRING_CMD_SHELLINFO "\nReactOS Intérprete de linha de comando\nVersão %s %s" STRING_VERSION_RUNNING_ON "Em execução em:" diff --git a/base/shell/cmd/lang/ro-RO.rc b/base/shell/cmd/lang/ro-RO.rc index be9d8953e8d..393deff645a 100644 --- a/base/shell/cmd/lang/ro-RO.rc +++ b/base/shell/cmd/lang/ro-RO.rc @@ -566,6 +566,7 @@ titlu Noul titlu.\n" STRING_REPLACE_ERROR6 "FiÈ™ierele nu au fost găsite - %s\n" STRING_REPLACE_ERROR7 "Eroare extinsă 32\n" STRING_CMD_INFOLINE " Interpretorul de comenzi ReactOS TastaÈ›i HELP = Ajutor " + STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s ReactOS Team.\n" STRING_REACTOS_VERSION "ReactOS [Versiunea %s %s]\n" STRING_CMD_SHELLINFO "\nInterpretorul de comenzi ReactOS\nVersiunea %s %s" STRING_VERSION_RUNNING_ON "Operând pe: " diff --git a/base/shell/cmd/lang/ru-RU.rc b/base/shell/cmd/lang/ru-RU.rc index 0cea72229f8..56b2606c3e2 100644 --- a/base/shell/cmd/lang/ru-RU.rc +++ b/base/shell/cmd/lang/ru-RU.rc @@ -544,6 +544,7 @@ RESTORE воÑÑтанавливает окно\n\ STRING_REPLACE_ERROR6 "Ðе найдено файлов - %s\n" STRING_REPLACE_ERROR7 "РаÑÑˆÐ¸Ñ€ÐµÐ½Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° 32\n" STRING_CMD_INFOLINE " ReactOS ÐšÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ñтрока Введите HELP Ð´Ð»Ñ Ð¡Ð¿Ñ€Ð°Ð²ÐºÐ¸ " + STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s ReactOS Team.\n" STRING_REACTOS_VERSION "ReactOS [ВерÑÐ¸Ñ %s %s]\n" STRING_CMD_SHELLINFO "\nИнтерпретатор командной Ñтроки ReactOS\nВерÑÐ¸Ñ %s %s" STRING_VERSION_RUNNING_ON "Запущен на: " diff --git a/base/shell/cmd/lang/sk-SK.rc b/base/shell/cmd/lang/sk-SK.rc index 12a60f88e71..7e4d11e3bec 100644 --- a/base/shell/cmd/lang/sk-SK.rc +++ b/base/shell/cmd/lang/sk-SK.rc @@ -533,6 +533,7 @@ title new title\n" STRING_REPLACE_ERROR6 "Žiadne súbory sa nenaÅ¡li - %s\n" STRING_REPLACE_ERROR7 "Extended Error 32\n" STRING_CMD_INFOLINE " ReactOS Command Prompt Type HELP = Help " + STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s ReactOS Team.\n" STRING_REACTOS_VERSION "ReactOS [Verzia %s %s]\n" STRING_CMD_SHELLINFO "\nInterpréter príkazového riadku systému ReactOS\nVerzia %s %s" STRING_VERSION_RUNNING_ON "Running on: " diff --git a/base/shell/cmd/lang/sq-AL.rc b/base/shell/cmd/lang/sq-AL.rc index 25b9fcef88e..5624200c555 100644 --- a/base/shell/cmd/lang/sq-AL.rc +++ b/base/shell/cmd/lang/sq-AL.rc @@ -531,6 +531,7 @@ title titull i ri\n" STRING_REPLACE_ERROR6 "Nuk u gjet dokumenti - %s\n" STRING_REPLACE_ERROR7 "Error i zgjatur 32\n" STRING_CMD_INFOLINE " ReactOS Command Prompt Type HELP = Help " + STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s ReactOS Team.\n" STRING_REACTOS_VERSION "ReactOS [Versioni %s %s]\n" STRING_CMD_SHELLINFO "\nReactOS Interpretuesi i komandave\nVersioni %s %s" STRING_VERSION_RUNNING_ON "Funksionon në: " diff --git a/base/shell/cmd/lang/sv-SE.rc b/base/shell/cmd/lang/sv-SE.rc index 6a64655894f..21928bc8626 100644 --- a/base/shell/cmd/lang/sv-SE.rc +++ b/base/shell/cmd/lang/sv-SE.rc @@ -525,6 +525,7 @@ tittel ny tittel\n" STRING_REPLACE_ERROR6 "Ingna filer hittades - %s\n" STRING_REPLACE_ERROR7 "Extended Error 32\n" STRING_CMD_INFOLINE " ReactOS Command Prompt Type HELP = Help " + STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s ReactOS Team.\n" STRING_REACTOS_VERSION "ReactOS [Version %s %s]\n" STRING_CMD_SHELLINFO "\nReactOS Kommandotolk\nVersion %s %s" STRING_VERSION_RUNNING_ON "Körs pÃ¥: " diff --git a/base/shell/cmd/lang/tr-TR.rc b/base/shell/cmd/lang/tr-TR.rc index 77e9663e2d3..f759b1433f6 100644 --- a/base/shell/cmd/lang/tr-TR.rc +++ b/base/shell/cmd/lang/tr-TR.rc @@ -520,6 +520,7 @@ baÅŸlık pencere için yeni baÅŸlık\n" STRING_REPLACE_ERROR6 "Hiçbir dosya bulunamadı - %s\n" STRING_REPLACE_ERROR7 "GeniÅŸletilmiÅŸ Hata 32\n" STRING_CMD_INFOLINE " ReactOS Komut Satırı Yardım için, HELP yazın" + STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s ReactOS Team.\n" STRING_REACTOS_VERSION "ReactOS [Sürüm %s %s]\n" STRING_CMD_SHELLINFO "\nReactOS Komut Satırı Yorumlayıcısı\nSürüm %s %s" STRING_VERSION_RUNNING_ON "Ãœzerinde Çalışıyor: " diff --git a/base/shell/cmd/lang/uk-UA.rc b/base/shell/cmd/lang/uk-UA.rc index c903a9615df..05b24cf3cd4 100644 --- a/base/shell/cmd/lang/uk-UA.rc +++ b/base/shell/cmd/lang/uk-UA.rc @@ -537,6 +537,7 @@ title новий заголовок\n" STRING_REPLACE_ERROR6 "Файли не знайдено - %s\n" STRING_REPLACE_ERROR7 "Розширена помилка 32\n" STRING_CMD_INFOLINE " Командний Ñ€Ñдок ReactOS Введіть HELP = Допомога " + STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s ReactOS Team.\n" STRING_REACTOS_VERSION "ReactOS [ВерÑiÑ %s %s]\n" STRING_CMD_SHELLINFO "\nIнтерпретатор командного Ñ€Ñдка ReactOS\nVersion %s %s" STRING_VERSION_RUNNING_ON "Запущений на: " diff --git a/base/shell/cmd/lang/zh-CN.rc b/base/shell/cmd/lang/zh-CN.rc index c3a6572b9f8..22fbddbe273 100644 --- a/base/shell/cmd/lang/zh-CN.rc +++ b/base/shell/cmd/lang/zh-CN.rc @@ -500,6 +500,7 @@ RESTORE æ¢å¤çª—å£\n\ STRING_REPLACE_ERROR6 "没有文件被å‘现 - %s\n" STRING_REPLACE_ERROR7 "扩展错误 32\n" STRING_CMD_INFOLINE " ReactOS 命令行解释器 输入 HELP = 帮助 " + STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s ReactOS Team.\n" STRING_REACTOS_VERSION "ReactOS [版本 %s %s]\n" STRING_CMD_SHELLINFO "\nReactOS 命令行解释器\n版本 %s %s" STRING_VERSION_RUNNING_ON "在 上è¿è¡Œ" diff --git a/base/shell/cmd/lang/zh-TW.rc b/base/shell/cmd/lang/zh-TW.rc index 913295e16c8..dff7783f806 100644 --- a/base/shell/cmd/lang/zh-TW.rc +++ b/base/shell/cmd/lang/zh-TW.rc @@ -504,6 +504,7 @@ RESTORE æ¢å¾©è¦–窗\n\ STRING_REPLACE_ERROR6 "找ä¸åˆ°æª”案 - %s\n" STRING_REPLACE_ERROR7 "擴展錯誤 32\n" STRING_CMD_INFOLINE " ReactOS 命令列直譯器 輸入 HELP = 說明 " + STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s ReactOS Team.\n" STRING_REACTOS_VERSION "ReactOS [版本 %s %s]\n" STRING_CMD_SHELLINFO "\nReactOS 命令列直譯器\n版本 %s %s" STRING_VERSION_RUNNING_ON "在 上é‹è¡Œ" diff --git a/base/shell/cmd/prompt.c b/base/shell/cmd/prompt.c index d835ea5f1e3..9c7abb678ac 100644 --- a/base/shell/cmd/prompt.c +++ b/base/shell/cmd/prompt.c @@ -66,6 +66,31 @@ VOID InitPrompt(VOID) SetEnvironmentVariable(_T("PROMPT"), DefaultPrompt); } +/* + * Checks if information line should be displayed. + */ +BOOL HasInfoLine(VOID) +{ + LPTSTR pr; + TCHAR szPrompt[256]; + + if (GetEnvironmentVariable(_T("PROMPT"), szPrompt, _countof(szPrompt))) + { + pr = szPrompt; + while (*pr) + { + if (*pr++ != _T('$')) + continue; + if (!*pr || _totupper(*pr++) != _T('I')) + continue; + + return TRUE; + } + } + + return FALSE; +} + /* * Print an information line on top of the screen. */ @@ -121,17 +146,8 @@ VOID PrintPrompt(VOID) * Special pre-handling for $I: If the information line is displayed * on top of the screen, ensure that the prompt won't be hidden below it. */ - for (pr = Prompt; *pr;) - { - if (*pr++ != _T('$')) - continue; - if (!*pr || _totupper(*pr++) != _T('I')) - continue; - - if (GetCursorY() == 0) - ConOutChar(_T('\n')); - break; - } + if (HasInfoLine() && GetCursorY() == 0) + ConOutChar(_T('\n')); /* Parse the prompt string */ for (pr = Prompt; *pr; ++pr) diff --git a/base/shell/cmd/resource.h b/base/shell/cmd/resource.h index 8024eeb2ad1..88a5780ec3f 100644 --- a/base/shell/cmd/resource.h +++ b/base/shell/cmd/resource.h @@ -86,6 +86,7 @@ #define STRING_CTTY_HELP 618 #define STRING_CMD_INFOLINE 620 +#define STRING_CMD_COPYRIGHT 621 #define STRING_REACTOS_VERSION 623 #define STRING_CMD_SHELLINFO 624 diff --git a/base/shell/cmd/ver.c b/base/shell/cmd/ver.c index 7d4e497688d..0c4461c0258 100644 --- a/base/shell/cmd/ver.c +++ b/base/shell/cmd/ver.c @@ -145,7 +145,7 @@ INT cmd_ver (LPTSTR param) { ConOutPuts(_T("\n\n")); ConOutPuts(_T("Copyright (C) 1994-1998 Tim Norman and others.\n")); - ConOutPuts(_T("Copyright (C) 1998-") _T(COPYRIGHT_YEAR) _T(" ReactOS Team\n")); + ConOutResPrintf(STRING_CMD_COPYRIGHT, _T(COPYRIGHT_YEAR)); for (i = 0; param[i]; i++) { diff --git a/boot/bootdata/hivesys.inf b/boot/bootdata/hivesys.inf index eb22a18637b..319b74f288d 100644 --- a/boot/bootdata/hivesys.inf +++ b/boot/bootdata/hivesys.inf @@ -1521,7 +1521,6 @@ HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices","PRN",0x0000 HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","ComSpec",0x00020002,"%SystemRoot%\system32\cmd.exe" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","Path",0x00020002,"%SystemRoot%\bin;%SystemRoot%\System32;%SystemRoot%;%SystemRoot%\System32\Wbem" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","PATHEXT",0x00000002,".COM;.EXE;.BAT;.CMD" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","PROMPT",0x00000002,"$P$G$I" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","TEMP",0x00020002,"%SystemRoot%\TEMP" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","TMP",0x00020002,"%SystemRoot%\TEMP" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","windir",0x00020002,"%SystemRoot%" From 9e8214fa13d13953ba21576c40d820f0362beb25 Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Thu, 9 May 2024 18:56:19 +0200 Subject: [PATCH 123/182] [BROWSEUI] GetControlWindow must support FCW_TREE for DefView usage (#6781) Support GetControlWindow, ShowControlWindow and IsControlWindowShown for TREE and STATUS in the Shell Browser so DefView can set CMF_EXPLORE correctly. --- dll/win32/browseui/shellbrowser.cpp | 50 +++++++++++++++++++++++++---- sdk/include/reactos/shlobj_undoc.h | 25 +++++++++++++++ 2 files changed, 69 insertions(+), 6 deletions(-) diff --git a/dll/win32/browseui/shellbrowser.cpp b/dll/win32/browseui/shellbrowser.cpp index 933a2276443..42303f64d7b 100644 --- a/dll/win32/browseui/shellbrowser.cpp +++ b/dll/win32/browseui/shellbrowser.cpp @@ -1970,7 +1970,7 @@ HRESULT STDMETHODCALLTYPE CShellBrowser::QueryStatus(const GUID *pguidCmdGroup, if (IsEqualCLSID(CLSID_SH_FavBand, fCurrentVertBar)) prgCmds->cmdf |= OLECMDF_LATCHED; break; - case 0x23: // folders + case SBCMDID_EXPLORERBARFOLDERS: // folders prgCmds->cmdf = OLECMDF_SUPPORTED | OLECMDF_ENABLED; if (IsEqualCLSID(CLSID_ExplorerBand, fCurrentVertBar)) prgCmds->cmdf |= OLECMDF_LATCHED; @@ -2019,7 +2019,7 @@ HRESULT STDMETHODCALLTYPE CShellBrowser::Exec(const GUID *pguidCmdGroup, DWORD n case 0x1c: //Toggle Search case 0x1d: //Toggle History case 0x1e: //Toggle Favorites - case 0x23: //Toggle Folders + case SBCMDID_EXPLORERBARFOLDERS: //Toggle Folders const GUID* pclsid; if (nCmdID == 0x1c) pclsid = &CLSID_FileSearchBand; else if (nCmdID == 0x1d) pclsid = &CLSID_SH_HistBand; @@ -2270,9 +2270,12 @@ HRESULT STDMETHODCALLTYPE CShellBrowser::GetControlWindow(UINT id, HWND *lphwnd) *lphwnd = fStatusBar; return S_OK; case FCW_TREE: - // find the directory browser and return it - // this should be used only to determine if a tree is present - return S_OK; + { + BOOL shown; + if (SUCCEEDED(IsControlWindowShown(id, &shown)) && shown) + return IUnknown_GetWindow(fClientBars[BIVerticalBaseBar].clientBar.p, lphwnd); + return S_FALSE; + } case FCW_PROGRESS: // is this a progress dialog? return S_OK; @@ -2459,12 +2462,47 @@ HRESULT STDMETHODCALLTYPE CShellBrowser::GetTravelLog(ITravelLog **pptl) HRESULT STDMETHODCALLTYPE CShellBrowser::ShowControlWindow(UINT id, BOOL fShow) { + BOOL shown; + if (FAILED(IsControlWindowShown(id, &shown))) + return E_NOTIMPL; + else if (!shown == !fShow) // Negated for true boolean comparison + return S_OK; + else switch (id) + { + case FCW_STATUS: + OnToggleStatusBarVisible(0, 0, NULL, shown); + return S_OK; + case FCW_TREE: + return Exec(&CGID_Explorer, SBCMDID_EXPLORERBARFOLDERS, 0, NULL, NULL); + } return E_NOTIMPL; } HRESULT STDMETHODCALLTYPE CShellBrowser::IsControlWindowShown(UINT id, BOOL *pfShown) { - return E_NOTIMPL; + HRESULT hr = S_OK; + BOOL shown = FALSE; + switch (id) + { + case FCW_STATUS: + shown = m_settings.fStatusBarVisible; + break; + case FCW_TREE: + { + OLECMD cmd = { SBCMDID_EXPLORERBARFOLDERS }; + hr = QueryStatus(&CGID_Explorer, 1, &cmd, NULL); + shown = cmd.cmdf & OLECMDF_LATCHED; + break; + } + default: + hr = E_NOTIMPL; + } + if (pfShown) + { + *pfShown = shown; + return hr; + } + return SUCCEEDED(hr) ? (shown ? S_OK : S_FALSE) : hr; } HRESULT STDMETHODCALLTYPE CShellBrowser::IEGetDisplayName(LPCITEMIDLIST pidl, LPWSTR pwszName, UINT uFlags) diff --git a/sdk/include/reactos/shlobj_undoc.h b/sdk/include/reactos/shlobj_undoc.h index 40a5a576b88..a564b36c12c 100644 --- a/sdk/include/reactos/shlobj_undoc.h +++ b/sdk/include/reactos/shlobj_undoc.h @@ -58,6 +58,31 @@ struct persistState ULONG pidlSize; }; +/***************************************************************************** + * CGID_Explorer (IShellBrowser OLECMD IDs) + */ +#define SBCMDID_EXPLORERBARFOLDERS 35 // Query/Toggle +#define SBCMDID_MIXEDZONE 39 +#define SBCMDID_ONVIEWMOVETOTOP 60 +//SBCMDID_ENABLESHOWTREE ? +//SBCMDID_SHOWCONTROL ? +//SBCMDID_CANCELNAVIGATION ? +//SBCMDID_MAYSAVECHANGES ? +//SBCMDID_SETHLINKFRAME ? +//SBCMDID_ENABLESTOP ? +//SBCMDID_SELECTHISTPIDL ? +//SBCMDID_GETPANE ? // This is in the official SDK but only the panes are defined +#define PANE_NONE ((DWORD)-1) +#define PANE_ZONE 1 +#define PANE_OFFLINE 2 +#define PANE_PRINTER 3 +#define PANE_SSL 4 +#define PANE_NAVIGATION 5 +#define PANE_PROGRESS 6 +#if (_WIN32_IE >= _WIN32_IE_IE60) +#define PANE_PRIVACY 7 +#endif + /***************************************************************************** * IInitializeObject interface */ From daf806802ab586d6b01e743d5bcdd970a06c1098 Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Thu, 9 May 2024 19:52:05 +0200 Subject: [PATCH 124/182] [SHELL32] Use common default DFM callback message handler (#6779) Moves default processing of all DFM_ callback messages in SHELL32 to a single function. CORE-18585 --- dll/win32/shell32/CDefaultContextMenu.cpp | 9 +++--- dll/win32/shell32/folders/CDesktopFolder.cpp | 26 +++++------------ dll/win32/shell32/folders/CDrivesFolder.cpp | 30 ++++++-------------- dll/win32/shell32/folders/CFSFolder.cpp | 22 ++++++-------- dll/win32/shell32/folders/CNetFolder.cpp | 11 +------ dll/win32/shell32/folders/CRegFolder.cpp | 16 ++--------- dll/win32/shell32/precomp.h | 7 +++-- dll/win32/shell32/shlfolder.cpp | 24 ++++++++++++++-- 8 files changed, 58 insertions(+), 87 deletions(-) diff --git a/dll/win32/shell32/CDefaultContextMenu.cpp b/dll/win32/shell32/CDefaultContextMenu.cpp index e1556710d5a..2ff69ed2e6e 100644 --- a/dll/win32/shell32/CDefaultContextMenu.cpp +++ b/dll/win32/shell32/CDefaultContextMenu.cpp @@ -700,9 +700,8 @@ void CDefaultContextMenu::TryPickDefault(HMENU hMenu, UINT idCmdFirst, UINT DfltOffset, UINT uFlags) { // Are we allowed to pick a default? - UINT ntver = RosGetProcessEffectiveVersion(); - if (((uFlags & CMF_NODEFAULT) && ntver >= _WIN32_WINNT_VISTA) || - ((uFlags & CMF_DONOTPICKDEFAULT) && ntver >= _WIN32_WINNT_WIN7)) + if ((uFlags & CMF_NODEFAULT) || + ((uFlags & CMF_DONOTPICKDEFAULT) && RosGetProcessEffectiveVersion() >= _WIN32_WINNT_WIN7)) { return; } @@ -713,7 +712,7 @@ CDefaultContextMenu::TryPickDefault(HMENU hMenu, UINT idCmdFirst, UINT DfltOffse // Does the view want to pick one? INT_PTR forceDfm = 0; - if (_DoCallback(DFM_GETDEFSTATICID, 0, &forceDfm) == S_OK && forceDfm) + if (SUCCEEDED(_DoCallback(DFM_GETDEFSTATICID, 0, &forceDfm)) && forceDfm) { for (UINT i = 0; i < _countof(g_StaticInvokeCmdMap); ++i) { @@ -974,7 +973,7 @@ CDefaultContextMenu::DoProperties( // We are asked to run the default property sheet if (hr == S_FALSE) { - return Shell_DefaultContextMenuCallBack(m_psf, m_pDataObj); + return SHELL32_ShowPropertiesDialog(m_pDataObj); } return hr; diff --git a/dll/win32/shell32/folders/CDesktopFolder.cpp b/dll/win32/shell32/folders/CDesktopFolder.cpp index ade57b69fce..b98e65f8508 100644 --- a/dll/win32/shell32/folders/CDesktopFolder.cpp +++ b/dll/win32/shell32/folders/CDesktopFolder.cpp @@ -1074,37 +1074,25 @@ HRESULT WINAPI CDesktopFolder::GetCurFolder(PIDLIST_ABSOLUTE * pidl) HRESULT WINAPI CDesktopFolder::CallBack(IShellFolder *psf, HWND hwndOwner, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam) { - if (uMsg != DFM_MERGECONTEXTMENU && uMsg != DFM_INVOKECOMMAND) - return S_OK; - + enum { IDC_PROPERTIES }; /* no data object means no selection */ if (!pdtobj) { - if (uMsg == DFM_INVOKECOMMAND && wParam == 0) + if (uMsg == DFM_INVOKECOMMAND && wParam == IDC_PROPERTIES) { - if (32 >= (UINT_PTR)ShellExecuteW(hwndOwner, L"open", L"rundll32.exe", - L"shell32.dll,Control_RunDLL desk.cpl", NULL, SW_SHOWNORMAL)) - { - return E_FAIL; - } - return S_OK; + return SHELL_ExecuteControlPanelCPL(hwndOwner, L"desk.cpl") ? S_OK : E_FAIL; } else if (uMsg == DFM_MERGECONTEXTMENU) { QCMINFO *pqcminfo = (QCMINFO *)lParam; HMENU hpopup = CreatePopupMenu(); - _InsertMenuItemW(hpopup, 0, TRUE, 0, MFT_STRING, MAKEINTRESOURCEW(IDS_PROPERTIES), MFS_ENABLED); - Shell_MergeMenus(pqcminfo->hmenu, hpopup, pqcminfo->indexMenu, pqcminfo->idCmdFirst++, pqcminfo->idCmdLast, MM_ADDSEPARATOR); + _InsertMenuItemW(hpopup, 0, TRUE, IDC_PROPERTIES, MFT_STRING, MAKEINTRESOURCEW(IDS_PROPERTIES), MFS_ENABLED); + pqcminfo->idCmdFirst = Shell_MergeMenus(pqcminfo->hmenu, hpopup, pqcminfo->indexMenu, pqcminfo->idCmdFirst, pqcminfo->idCmdLast, MM_ADDSEPARATOR); DestroyMenu(hpopup); + return S_OK; } - - return S_OK; } - - if (uMsg != DFM_INVOKECOMMAND || wParam != DFM_CMD_PROPERTIES) - return S_OK; - - return Shell_DefaultContextMenuCallBack(this, pdtobj); + return SHELL32_DefaultContextMenuCallBack(psf, pdtobj, uMsg); } /************************************************************************* diff --git a/dll/win32/shell32/folders/CDrivesFolder.cpp b/dll/win32/shell32/folders/CDrivesFolder.cpp index 748109331b6..304a7b55009 100644 --- a/dll/win32/shell32/folders/CDrivesFolder.cpp +++ b/dll/win32/shell32/folders/CDrivesFolder.cpp @@ -274,7 +274,7 @@ HRESULT CALLBACK DrivesContextMenuCallback(IShellFolder *psf, LPARAM lParam) { if (uMsg != DFM_MERGECONTEXTMENU && uMsg != DFM_INVOKECOMMAND) - return S_OK; + return SHELL32_DefaultContextMenuCallBack(psf, pdtobj, uMsg); PIDLIST_ABSOLUTE pidlFolder; PUITEMID_CHILD *apidl; @@ -343,6 +343,7 @@ HRESULT CALLBACK DrivesContextMenuCallback(IShellFolder *psf, #else pqcminfo->idCmdFirst = (idCmd + 2); #endif + hr = S_OK; } else if (uMsg == DFM_INVOKECOMMAND) { @@ -1306,37 +1307,24 @@ HRESULT WINAPI CDrivesFolder::GetCurFolder(PIDLIST_ABSOLUTE *pidl) HRESULT WINAPI CDrivesFolder::CallBack(IShellFolder *psf, HWND hwndOwner, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam) { - if (uMsg != DFM_MERGECONTEXTMENU && uMsg != DFM_INVOKECOMMAND) - return S_OK; - + enum { IDC_PROPERTIES }; /* no data object means no selection */ if (!pdtobj) { - if (uMsg == DFM_INVOKECOMMAND && wParam == 1) // #1 + if (uMsg == DFM_INVOKECOMMAND && wParam == IDC_PROPERTIES) { // "System" properties - ShellExecuteW(hwndOwner, - NULL, - L"rundll32.exe", - L"shell32.dll,Control_RunDLL sysdm.cpl", - NULL, - SW_SHOWNORMAL); + return SHELL_ExecuteControlPanelCPL(hwndOwner, L"sysdm.cpl") ? S_OK : E_FAIL; } else if (uMsg == DFM_MERGECONTEXTMENU) { QCMINFO *pqcminfo = (QCMINFO *)lParam; HMENU hpopup = CreatePopupMenu(); - _InsertMenuItemW(hpopup, 0, TRUE, 0, MFT_SEPARATOR, NULL, MFS_ENABLED); // #0 - _InsertMenuItemW(hpopup, 1, TRUE, 1, MFT_STRING, MAKEINTRESOURCEW(IDS_PROPERTIES), MFS_ENABLED); // #1 - Shell_MergeMenus(pqcminfo->hmenu, hpopup, pqcminfo->indexMenu++, pqcminfo->idCmdFirst, pqcminfo->idCmdLast, MM_ADDSEPARATOR); + _InsertMenuItemW(hpopup, 0, TRUE, IDC_PROPERTIES, MFT_STRING, MAKEINTRESOURCEW(IDS_PROPERTIES), MFS_ENABLED); + pqcminfo->idCmdFirst = Shell_MergeMenus(pqcminfo->hmenu, hpopup, pqcminfo->indexMenu, pqcminfo->idCmdFirst, pqcminfo->idCmdLast, MM_ADDSEPARATOR); DestroyMenu(hpopup); + return S_OK; } - - return S_OK; } - - if (uMsg != DFM_INVOKECOMMAND || wParam != DFM_CMD_PROPERTIES) - return S_OK; - - return Shell_DefaultContextMenuCallBack(this, pdtobj); + return SHELL32_DefaultContextMenuCallBack(psf, pdtobj, uMsg); } diff --git a/dll/win32/shell32/folders/CFSFolder.cpp b/dll/win32/shell32/folders/CFSFolder.cpp index 7c2b11160dc..b89ecc45579 100644 --- a/dll/win32/shell32/folders/CFSFolder.cpp +++ b/dll/win32/shell32/folders/CFSFolder.cpp @@ -1887,13 +1887,11 @@ HRESULT CFSFolder::_CreateShellExtInstance(const CLSID *pclsid, LPCITEMIDLIST pi HRESULT WINAPI CFSFolder::CallBack(IShellFolder *psf, HWND hwndOwner, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam) { - if (uMsg != DFM_MERGECONTEXTMENU && uMsg != DFM_INVOKECOMMAND) - return S_OK; - + enum { IDC_PROPERTIES }; /* no data object means no selection */ if (!pdtobj) { - if (uMsg == DFM_INVOKECOMMAND && wParam == 0) + if (uMsg == DFM_INVOKECOMMAND && wParam == IDC_PROPERTIES) { // Create an data object CComHeapPtr pidlChild(ILClone(ILFindLastID(m_pidlRoot))); @@ -1901,7 +1899,7 @@ HRESULT WINAPI CFSFolder::CallBack(IShellFolder *psf, HWND hwndOwner, IDataObjec ILRemoveLastID(pidlParent); CComPtr pDataObj; - HRESULT hr = SHCreateDataObject(pidlParent, 1, &pidlChild, NULL, IID_PPV_ARG(IDataObject, &pDataObj)); + HRESULT hr = SHCreateDataObject(pidlParent, 1, &pidlChild.m_pData, NULL, IID_PPV_ARG(IDataObject, &pDataObj)); if (!FAILED_UNEXPECTEDLY(hr)) { // Ask for a title to display @@ -1913,23 +1911,19 @@ HRESULT WINAPI CFSFolder::CallBack(IShellFolder *psf, HWND hwndOwner, IDataObjec ERR("SH_ShowPropertiesDialog failed\n"); } } + return hr; } else if (uMsg == DFM_MERGECONTEXTMENU) { QCMINFO *pqcminfo = (QCMINFO *)lParam; HMENU hpopup = CreatePopupMenu(); - _InsertMenuItemW(hpopup, 0, TRUE, 0, MFT_STRING, MAKEINTRESOURCEW(IDS_PROPERTIES), MFS_ENABLED); - Shell_MergeMenus(pqcminfo->hmenu, hpopup, pqcminfo->indexMenu++, pqcminfo->idCmdFirst, pqcminfo->idCmdLast, MM_ADDSEPARATOR); + _InsertMenuItemW(hpopup, 0, TRUE, IDC_PROPERTIES, MFT_STRING, MAKEINTRESOURCEW(IDS_PROPERTIES), MFS_ENABLED); + pqcminfo->idCmdFirst = Shell_MergeMenus(pqcminfo->hmenu, hpopup, pqcminfo->indexMenu, pqcminfo->idCmdFirst, pqcminfo->idCmdLast, MM_ADDSEPARATOR); DestroyMenu(hpopup); + return S_OK; } - - return S_OK; } - - if (uMsg != DFM_INVOKECOMMAND || wParam != DFM_CMD_PROPERTIES) - return S_OK; - - return Shell_DefaultContextMenuCallBack(this, pdtobj); + return SHELL32_DefaultContextMenuCallBack(psf, pdtobj, uMsg); } static HBITMAP DoLoadPicture(LPCWSTR pszFileName) diff --git a/dll/win32/shell32/folders/CNetFolder.cpp b/dll/win32/shell32/folders/CNetFolder.cpp index 4b1eb3c15ef..a96e9e1d493 100644 --- a/dll/win32/shell32/folders/CNetFolder.cpp +++ b/dll/win32/shell32/folders/CNetFolder.cpp @@ -66,16 +66,7 @@ HRESULT CALLBACK NetFolderMenuCallback(IShellFolder *psf, WPARAM wParam, LPARAM lParam) { - switch (uMsg) - { - case DFM_MERGECONTEXTMENU: - return S_OK; - case DFM_INVOKECOMMAND: - case DFM_INVOKECOMMANDEX: - case DFM_GETDEFSTATICID: // Required for Windows 7 to pick a default - return S_FALSE; - } - return E_NOTIMPL; + return SHELL32_DefaultContextMenuCallBack(psf, pdtobj, uMsg); } class CNetFolderEnum : diff --git a/dll/win32/shell32/folders/CRegFolder.cpp b/dll/win32/shell32/folders/CRegFolder.cpp index 9a74ab6fa7a..af16ca7d48e 100644 --- a/dll/win32/shell32/folders/CRegFolder.cpp +++ b/dll/win32/shell32/folders/CRegFolder.cpp @@ -30,7 +30,7 @@ HRESULT CALLBACK RegFolderContextMenuCallback(IShellFolder *psf, LPARAM lParam) { if (uMsg != DFM_INVOKECOMMAND || wParam != DFM_CMD_PROPERTIES) - return S_OK; + return SHELL32_DefaultContextMenuCallBack(psf, pdtobj, uMsg); PIDLIST_ABSOLUTE pidlFolder; PUITEMID_CHILD *apidl; @@ -41,24 +41,14 @@ HRESULT CALLBACK RegFolderContextMenuCallback(IShellFolder *psf, if (_ILIsMyComputer(apidl[0])) { - if (32 >= (UINT_PTR)ShellExecuteW(hwnd, - L"open", - L"rundll32.exe", - L"shell32.dll,Control_RunDLL sysdm.cpl", - NULL, - SW_SHOWNORMAL)) + if (!SHELL_ExecuteControlPanelCPL(hwnd, L"sysdm.cpl")) { hr = E_FAIL; } } else if (_ILIsDesktop(apidl[0])) { - if (32 >= (UINT_PTR)ShellExecuteW(hwnd, - L"open", - L"rundll32.exe", - L"shell32.dll,Control_RunDLL desk.cpl", - NULL, - SW_SHOWNORMAL)) + if (!SHELL_ExecuteControlPanelCPL(hwnd, L"desk.cpl")) { hr = E_FAIL; } diff --git a/dll/win32/shell32/precomp.h b/dll/win32/shell32/precomp.h index af2af91776f..57789a02835 100644 --- a/dll/win32/shell32/precomp.h +++ b/dll/win32/shell32/precomp.h @@ -140,8 +140,11 @@ AddPropSheetPageCallback(HPROPSHEETPAGE hPage, LPARAM lParam) return FALSE; } -HRESULT WINAPI -Shell_DefaultContextMenuCallBack(IShellFolder *psf, IDataObject *pdtobj); +HRESULT +SHELL32_ShowPropertiesDialog(IDataObject *pdtobj); +HRESULT +SHELL32_DefaultContextMenuCallBack(IShellFolder *psf, IDataObject *pdo, UINT msg); +#define SHELL_ExecuteControlPanelCPL(hwnd, cpl) SHRunControlPanel((cpl), (hwnd)) // CStubWindow32 --- The owner window of file property sheets. // This window hides taskbar button of property sheet. diff --git a/dll/win32/shell32/shlfolder.cpp b/dll/win32/shell32/shlfolder.cpp index 3a396e5fc60..45829eae6e5 100644 --- a/dll/win32/shell32/shlfolder.cpp +++ b/dll/win32/shell32/shlfolder.cpp @@ -493,17 +493,35 @@ _ShowPropertiesDialogThread(LPVOID lpParameter) /* * for internal use */ -HRESULT WINAPI -Shell_DefaultContextMenuCallBack(IShellFolder *psf, IDataObject *pdtobj) +HRESULT +SHELL32_ShowPropertiesDialog(IDataObject *pdtobj) { + if (!pdtobj) + return E_INVALIDARG; + pdtobj->AddRef(); if (!SHCreateThread(_ShowPropertiesDialogThread, pdtobj, CTF_INSIST | CTF_COINIT, NULL)) { pdtobj->Release(); - return HRESULT_FROM_WIN32(GetLastError()); + return HResultFromWin32(GetLastError()); } else { return S_OK; } } + +HRESULT +SHELL32_DefaultContextMenuCallBack(IShellFolder *psf, IDataObject *pdo, UINT msg) +{ + switch (msg) + { + case DFM_MERGECONTEXTMENU: + return S_OK; // Yes, I want verbs + case DFM_INVOKECOMMAND: + return S_FALSE; // Do it for me please + case DFM_GETDEFSTATICID: + return S_FALSE; // Supposedly "required for Windows 7 to pick a default" + } + return E_NOTIMPL; +} From 750bf12256323202fbe09209903c12a28e41f5b2 Mon Sep 17 00:00:00 2001 From: Thamatip Chitpong Date: Fri, 10 May 2024 22:59:19 +0700 Subject: [PATCH 125/182] [RAPPS] Fix refresh not working correctly (#6864) Addendum to commit 33c2903e6d4fda32215f553c2189c13d52ed31de CORE-18459 --- base/applications/rapps/gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/applications/rapps/gui.cpp b/base/applications/rapps/gui.cpp index a1075686314..e40a5fb8b53 100644 --- a/base/applications/rapps/gui.cpp +++ b/base/applications/rapps/gui.cpp @@ -544,7 +544,7 @@ CMainWindow::OnCommand(WPARAM wParam, LPARAM lParam) break; case ID_REFRESH: - UpdateApplicationsList(SelectedEnumType); + UpdateApplicationsList(SelectedEnumType, bReload); break; case ID_RESETDB: From c2d4acf5ca9547ed5ec5ad523f720095f31b31d7 Mon Sep 17 00:00:00 2001 From: Andrei Miloiu Date: Fri, 10 May 2024 22:23:55 +0300 Subject: [PATCH 126/182] [SHIMGVW] Update Romanian (ro-RO) translation (#6742) --- dll/win32/shimgvw/lang/ro-RO.rc | 36 ++++++++++++++++----------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/dll/win32/shimgvw/lang/ro-RO.rc b/dll/win32/shimgvw/lang/ro-RO.rc index b5b456a1af7..0ee37009887 100644 --- a/dll/win32/shimgvw/lang/ro-RO.rc +++ b/dll/win32/shimgvw/lang/ro-RO.rc @@ -10,27 +10,27 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL STRINGTABLE BEGIN - IDS_APPTITLE "Vizualizare fax È™i imagini" - IDS_SETASDESKBG "Setează ca fundal de desktop" - IDS_NOPREVIEW "Previzualizarea nu e disponibilă." - IDS_PREVIEW "Previzionare" + IDS_APPTITLE "Vizualizator ReactOS de imagini ÅŸi fax" + IDS_SETASDESKBG "&Stabilire ca fundal pentru desktop" + IDS_NOPREVIEW "Examinarea nu e disponibilă." + IDS_PREVIEW "E&xaminare" /* Tooltips */ - IDS_TOOLTIP_NEXT_PIC "Imaginea următare" + IDS_TOOLTIP_NEXT_PIC "Imaginea următoare" IDS_TOOLTIP_PREV_PIC "Imaginea precedentă" - IDS_TOOLTIP_BEST_FIT "Cea mai bună potrivire pe ecran (Ctrl+B)" - IDS_TOOLTIP_REAL_SIZE "Dimensiunea actuală (Ctrl+A)" - IDS_TOOLTIP_SLIDE_SHOW "PorneÈ™te diafilmul (F11)" + IDS_TOOLTIP_BEST_FIT "&Cea mai bună potrivire (Ctrl+B)" + IDS_TOOLTIP_REAL_SIZE "&Dimensiune reală (Ctrl+A)" + IDS_TOOLTIP_SLIDE_SHOW "Pornire afiÅŸare diapozitive (F11)" IDS_TOOLTIP_ZOOM_IN "Mărire (+)" - IDS_TOOLTIP_ZOOM_OUT "MicÈ™orare (-)" - IDS_TOOLTIP_ROT_CLOCKW "RoteÈ™te în sens orar (Ctrl+K)" - IDS_TOOLTIP_ROT_COUNCW "RoteÈ™te în sens antiorar (Ctrl+L)" - IDS_TOOLTIP_ROT_CWSAVE "RoteÈ™te în sens orar È™i salvează (cu pierderi)" - IDS_TOOLTIP_ROT_CCWSAVE "RoteÈ™te în sens antiorar È™i salvează (cu pierderi)" - IDS_TOOLTIP_DELETE "Șterge (DEL)" - IDS_TOOLTIP_PRINT "Imprimă (Ctrl+P)" - IDS_TOOLTIP_SAVEAS "Salvează ca… (Ctrl+S)" - IDS_TOOLTIP_MODIFY "Modifică (Ctrl+E)" - IDS_TOOLTIP_HELP_TOC "Subiecte de ajutor (F1)" + IDS_TOOLTIP_ZOOM_OUT "MicÅŸorare (-)" + IDS_TOOLTIP_ROT_CLOCKW "Rotire în sensul acelor de ceasornic (Ctrl+K)" + IDS_TOOLTIP_ROT_COUNCW "Rotire în sens contrar acelor de ceasornic (Ctrl+L)" + IDS_TOOLTIP_ROT_CWSAVE "Rotire în sensul acelor de ceasornic È™i salvare (cu pierderi)" + IDS_TOOLTIP_ROT_CCWSAVE "Rotire în sens contrar acelor de ceasornic È™i salvare(cu pierderi)" + IDS_TOOLTIP_DELETE "Ștergere (DEL)" + IDS_TOOLTIP_PRINT "Imprimare (Ctrl+P)" + IDS_TOOLTIP_SAVEAS "Salvare ca… (Ctrl+S)" + IDS_TOOLTIP_MODIFY "Modificare (Ctrl+E)" + IDS_TOOLTIP_HELP_TOC "Ajutor (F1)" END STRINGTABLE From 3b99e294f5b5f29214703e01a74fdf22b94f7dd0 Mon Sep 17 00:00:00 2001 From: Andrei Miloiu Date: Fri, 10 May 2024 22:34:05 +0300 Subject: [PATCH 127/182] [USER32] Update Romanian (ro-RO) translation (#6704) --- win32ss/user/user32/lang/ro-RO.rc | 68 +++++++++++++++---------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/win32ss/user/user32/lang/ro-RO.rc b/win32ss/user/user32/lang/ro-RO.rc index 08e5a54f79d..a405098584e 100644 --- a/win32ss/user/user32/lang/ro-RO.rc +++ b/win32ss/user/user32/lang/ro-RO.rc @@ -1,7 +1,7 @@ /* * TRANSLATORS: Copyright 2011 Petru Dimitriu * Copyright 2011-2018 Ștefan Fulea - * Copyright 2023 Andrei Miloiu + * Copyright 2023-2024 Andrei Miloiu */ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL @@ -11,11 +11,11 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL SELWINDOW DIALOGEX 20, 20, 220, 140 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU FONT 8, "MS Shell Dlg" -CAPTION "Alegere fereastră" +CAPTION "Fereastră de selectare" BEGIN LISTBOX 100, 5, 5, 210, 110, LBS_NOTIFY | LBS_NOINTEGRALHEIGHT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | WS_HSCROLL - PUSHBUTTON "Con&firmă", 1, 60, 120, 40, 15, BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP - PUSHBUTTON "A&nulează", 2, 120, 120, 40, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP + PUSHBUTTON "OK", 1, 60, 120, 40, 15, BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP + PUSHBUTTON "Revocare", 2, 120, 120, 40, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP END /* Menus */ @@ -24,39 +24,39 @@ EDITMENU MENU BEGIN POPUP "DUMMY" BEGIN - MENUITEM "Des&face", EM_UNDO + MENUITEM "A&nulare", EM_UNDO MENUITEM SEPARATOR - MENUITEM "&Decupează", WM_CUT - MENUITEM "&Copiază", WM_COPY - MENUITEM "&LipeÈ™te", WM_PASTE - MENUITEM "Șt&erge", WM_CLEAR + MENUITEM "&Decupare", WM_CUT + MENUITEM "&Copiere", WM_COPY + MENUITEM "&Lipire", WM_PASTE + MENUITEM "Åžt&ergere", WM_CLEAR MENUITEM SEPARATOR - MENUITEM "Selecte&ază tot", EM_SETSEL + MENUITEM "Selectare &totală", EM_SETSEL END END SYSMENU MENU BEGIN - MENUITEM "&RestabileÈ™te", SC_RESTORE - MENUITEM "&Mută", SC_MOVE - MENUITEM "Re&dimensionează", SC_SIZE - MENUITEM "Mi&nimizează", SC_MINIMIZE - MENUITEM "Ma&ximizează", SC_MAXIMIZE + MENUITEM "&Restabilire", SC_RESTORE + MENUITEM "&Mutare", SC_MOVE + MENUITEM "&Dimensiune", SC_SIZE + MENUITEM "Mi&nimizare", SC_MINIMIZE + MENUITEM "Ma&ximizare", SC_MAXIMIZE MENUITEM SEPARATOR - MENUITEM "ÃŽnchid&e\tAlt+F4", SC_CLOSE + MENUITEM "&ÃŽnchidere\tAlt+F4", SC_CLOSE END SYSMENUMDI MENU BEGIN - MENUITEM "&RestabileÈ™te", SC_RESTORE - MENUITEM "&Mută", SC_MOVE - MENUITEM "Re&dimensionează", SC_SIZE - MENUITEM "Mi&nimizează", SC_MINIMIZE - MENUITEM "Ma&ximizează", SC_MAXIMIZE + MENUITEM "&Restabilire", SC_RESTORE + MENUITEM "&Mutare", SC_MOVE + MENUITEM "&Dimensiune", SC_SIZE + MENUITEM "Mi&nimizare", SC_MINIMIZE + MENUITEM "Ma&ximizare", SC_MAXIMIZE MENUITEM SEPARATOR - MENUITEM "ÃŽnchid&e\tCtrl+F4", SC_CLOSE + MENUITEM "&ÃŽnchidere\tCtrl+F4", SC_CLOSE MENUITEM SEPARATOR - MENUITEM "&Următoare\tCtrl+F6", SC_NEXTWINDOW + MENUITEM "&Următorul\tCtrl+F6", SC_NEXTWINDOW END /* Strings */ @@ -67,17 +67,17 @@ BEGIN IDS_NOT_RESPONDING " (Nu răspunde)" IDS_ASK_TERMINATE "Această aplicaÈ›ie nu răspunde. VreÈ›i să o închideÈ›i?" IDS_HUNG_UP_TITLE "ÃŽnchide!" - IDS_OK "Con&firmă" - IDS_CANCEL "A&nulează" - IDS_ABORT "Aba&ndon" - IDS_RETRY "&Reîncearcă" - IDS_IGNORE "Ign&oră" - IDS_YES "D&a" - IDS_NO "N&u" - IDS_CLOSE "ÃŽ&nchide" - IDS_HELP "&Manual" - IDS_TRYAGAIN "&Reîncearcă" - IDS_CONTINUE "&Continuă" + IDS_OK "OK" + IDS_CANCEL "Revocare" + IDS_ABORT "&Abandonare" + IDS_RETRY "&Reîncercare" + IDS_IGNORE "&Ignorare" + IDS_YES "&Da" + IDS_NO "&Nu" + IDS_CLOSE "&ÃŽnchidere" + IDS_HELP "Ajutor" + IDS_TRYAGAIN "ÃŽnce&rcaÅ£i din nou" + IDS_CONTINUE "&Continuare" END STRINGTABLE From fda81eea5040b62bf98e44820237668de25485a6 Mon Sep 17 00:00:00 2001 From: Andrei Miloiu Date: Fri, 10 May 2024 22:34:50 +0300 Subject: [PATCH 128/182] [DESKADP] Update Romanian (ro-RO) translation (#6689) --- dll/shellext/deskadp/lang/ro-RO.rc | 48 +++++++++++++++--------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/dll/shellext/deskadp/lang/ro-RO.rc b/dll/shellext/deskadp/lang/ro-RO.rc index b15742fd26d..d8eff3b9c40 100644 --- a/dll/shellext/deskadp/lang/ro-RO.rc +++ b/dll/shellext/deskadp/lang/ro-RO.rc @@ -3,7 +3,7 @@ * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) * PURPOSE: Romanian resource file * TRANSLATORS: Copyright 2011 Ștefan Fulea - * Copyright 2022 Andrei Miloiu + * Copyright 2022-2024 Andrei Miloiu */ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL @@ -13,45 +13,45 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Adaptor" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - GROUPBOX "Tip de adaptor", -1, 7, 3, 237, 50 + GROUPBOX "Tip adaptor", -1, 7, 3, 237, 50 ICON IDC_DESK_ADAPTER, IDC_DESK_ADAPTER, 13, 11, 21, 20, SS_ICON LTEXT "", IDC_ADAPTERNAME, 40, 17, 190, 20, SS_NOPREFIX - PUSHBUTTON "&Proprietăți…", IDC_ADAPTERPROPERTIES, 177, 33, 59, 14 - GROUPBOX "Despre adaptor", -1, 7, 56, 237, 75 - LTEXT "Tipul de cip:", -1, 13, 68, 56, 8 + PUSHBUTTON "Propr&ietăţi", IDC_ADAPTERPROPERTIES, 177, 33, 59, 14 + GROUPBOX "InformaÅ£ii adaptor", -1, 7, 56, 237, 75 + LTEXT "Circuit integrat:", -1, 13, 68, 56, 8 LTEXT "", IDC_CHIPTYPE, 75, 68, 166, 8, SS_NOPREFIX - LTEXT "Tipul de DAC:", -1, 13, 80, 56, 8 + LTEXT "Tip DAC:", -1, 13, 80, 56, 8 LTEXT "", IDC_DACTYPE, 75, 80, 166, 8, SS_NOPREFIX - LTEXT "Memorie:", -1, 13, 92, 56, 8 + LTEXT "Dimensiune memorie:", -1, 13, 92, 56, 8 LTEXT "", IDC_MEMORYSIZE, 75, 92, 166, 8, SS_NOPREFIX - LTEXT "Șir adaptor:", -1, 13, 104, 56, 8 + LTEXT "Åžir adaptor:", -1, 13, 104, 56, 8 LTEXT "", IDC_ADAPTERSTRING, 75, 104, 166, 8, SS_NOPREFIX - LTEXT "InformaÈ›ie BIOS:", -1, 13, 116, 56, 8 + LTEXT "InformaÅ£ii Bios:", -1, 13, 116, 56, 8 LTEXT "", IDC_BIOSINFORMATION, 75, 116, 166, 8, SS_NOPREFIX - PUSHBUTTON "&Enumerare moduri valide…", IDC_LISTALLMODES, 7, 139, 130, 14 + PUSHBUTTON "&Listare toate modurile…", IDC_LISTALLMODES, 7, 139, 130, 14 END IDD_LISTALLMODES DIALOGEX 0, 0, 225, 135 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME -CAPTION "AlegeÈ›i un mod" +CAPTION "Listare toate modurile" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - DEFPUSHBUTTON "Con&firmă", IDOK, 112, 115, 50, 15 - PUSHBUTTON "A&nulează", IDCANCEL, 167, 115, 50, 15 - GROUPBOX "Moduri valide", -1, 6, 7, 212, 98 + DEFPUSHBUTTON "OK", IDOK, 112, 115, 50, 15 + PUSHBUTTON "Revocare", IDCANCEL, 167, 115, 50, 15 + GROUPBOX "&Listare moduri valide", -1, 6, 7, 212, 98 LISTBOX IDC_ALLVALIDMODES, 10, 20, 204, 87, LBS_NOTIFY | WS_VSCROLL END STRINGTABLE BEGIN - IDS_MODEFMT "%d by %d, %s, %s" - IDS_DEFREFRESHRATE "Rata implicită de reîmprospătare" - IDES_REFRESHRATEFMT "%d Hertz" - IDS_4BPP "16 Culori" - IDS_8BPP "256 Culori" - IDS_15BPP "Culoare de înaltă calitate (15 biÈ›i)" - IDS_16BPP "Culoare de înaltă calitate (16 biÈ›i)" - IDS_24BPP "Calitate fotografică (24 biÈ›i)" - IDS_32BPP "Calitate fotografică (32 biÈ›i)" - IDS_NOTAVAIL "Nu e disponibil" + IDS_MODEFMT "%d pe %d, %s, %s" + IDS_DEFREFRESHRATE "Reîmprospătare implicită" + IDES_REFRESHRATEFMT "%d hertzi" + IDS_4BPP "16 culori" + IDS_8BPP "256 culori" + IDS_15BPP "Culori de înaltă calitate (15 biÈ›i)" + IDS_16BPP "Culori de înaltă calitate (16 biÈ›i)" + IDS_24BPP "Culori realiste (24 biÈ›i)" + IDS_32BPP "Culori realiste (32 biÈ›i)" + IDS_NOTAVAIL "Nu este disponibil" END From 7fe8512f4fed58e4d1d91885273259f0ff6906ba Mon Sep 17 00:00:00 2001 From: Andrei Miloiu Date: Fri, 10 May 2024 22:36:42 +0300 Subject: [PATCH 129/182] [MAGNIFY] Update Romanian (ro-RO) translation (#6664) --- base/applications/magnify/lang/ro-RO.rc | 38 ++++++++++++------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/base/applications/magnify/lang/ro-RO.rc b/base/applications/magnify/lang/ro-RO.rc index 313173d70c6..b9103692a3e 100644 --- a/base/applications/magnify/lang/ro-RO.rc +++ b/base/applications/magnify/lang/ro-RO.rc @@ -4,7 +4,7 @@ * PURPOSE: Romanian resource file * TRANSLATORS: Copyright 2011 Petru Dimitriu * Copyright 2011-2019 Ștefan Fulea - * Copyright 2023 Andrei Miloiu + * Copyright 2023-2024 Andrei Miloiu */ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL @@ -13,10 +13,10 @@ IDC_MAGNIFIER MENU BEGIN POPUP "&FiÈ™ier" BEGIN - MENUITEM "I&eÈ™ire", IDM_EXIT - MENUITEM "&OpÈ›iuni…", IDM_OPTIONS + MENUITEM "&IeÅŸire", IDM_EXIT + MENUITEM "&OpÅ£iuni", IDM_OPTIONS MENUITEM SEPARATOR - MENUITEM "&Despre…", IDM_ABOUT + MENUITEM "&Despre", IDM_ABOUT END END @@ -34,43 +34,43 @@ BEGIN ICON IDI_ICON, IDC_MYICON, 14, 9, 20, 20 LTEXT "Lupă Versiunea 1.0", IDC_STATIC, 49, 10, 119, 8, SS_NOPREFIX LTEXT "Drept de autor (C) 2007 Marc Piulachs (marc.piulachs@codexchange.net)", IDC_STATIC, 48, 24, 125, 22 - PUSHBUTTON "ÃŽ&nchide", IDOK, 162, 48, 50, 14 + PUSHBUTTON "&IeÅŸire", IDOK, 162, 48, 50, 14 END IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Setările lupei" +CAPTION "Setări pentru Lupă" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - DEFPUSHBUTTON "ÃŽ&nchide", IDOK, 96, 161, 50, 14 - PUSHBUTTON "&Manual…", IDC_BUTTON_HELP, 38, 161, 50, 14 - LTEXT "&Factorul de mărire:", IDC_STATIC, 6, 8, 68, 8 + DEFPUSHBUTTON "&IeÅŸire", IDOK, 96, 161, 50, 14 + PUSHBUTTON "&Ajutor", IDC_BUTTON_HELP, 38, 161, 50, 14 + LTEXT "Ni&vel de mărire:", IDC_STATIC, 6, 8, 68, 8 COMBOBOX IDC_ZOOM, 72, 6, 63, 66, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP GROUPBOX "Urmărire", IDC_STATIC, 7, 25, 139, 59 GROUPBOX "Prezentare", IDC_STATIC, 7, 87, 139, 57 - CONTROL "UrmăreÈ™te &cursorul mouse-ului", IDC_FOLLOWMOUSECHECK, "Button", + CONTROL "&Se urmează cursorul mausului", IDC_FOLLOWMOUSECHECK, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 18, 42, 114, 10 - CONTROL "UrmăreÈ™te f&ocalizarea tastaturii", IDC_FOLLOWKEYBOARDCHECK, "Button", + CONTROL "Se urmează focalizarea de la &tastatură", IDC_FOLLOWKEYBOARDCHECK, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 18, 54, 114, 10 - CONTROL "UrmăreÈ™te &editarea textului", IDC_FOLLOWTEXTEDITINGCHECK, "Button", + CONTROL "Se urmează &editarea textului", IDC_FOLLOWTEXTEDITINGCHECK, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 18, 66, 114, 10 - CONTROL "In&versează culorile", IDC_INVERTCOLORSCHECK, "Button", + CONTROL "Inversare &culori", IDC_INVERTCOLORSCHECK, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 18, 102, 114, 10 - CONTROL "&PorneÈ™te minimizat", IDC_STARTMINIMIZEDCHECK, "Button", + CONTROL "&Lansare minimizată", IDC_STARTMINIMIZEDCHECK, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 18, 114, 114, 10 - CONTROL "&AfiÈ™ează lupă", IDC_SHOWMAGNIFIERCHECK, "Button", + CONTROL "AfiÅŸare l&upă", IDC_SHOWMAGNIFIERCHECK, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 18, 126, 114, 10 END IDD_WARNINGDIALOG DIALOGEX 0, 0, 250, 97 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION -CAPTION "Lupă - introducere" +CAPTION "Lupă ReactOS" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - DEFPUSHBUTTON "ÃŽ&nchide", IDOK, 193, 76, 50, 14 + DEFPUSHBUTTON "OK", IDOK, 193, 76, 50, 14 ICON IDI_ICON, IDC_STATIC, 7, 17, 20, 20 - LTEXT "Acest instrument este destinat persoanelor cu deficienÈ›e vizuale minore. Pentru rezultate mai bune, folosiÈ›i un instrument mai sofisticat.", IDC_STATIC, 36, 7, 207, 33 - CONTROL "N&u doresc recurenÈ›a acestui mesaj", IDC_SHOWWARNINGCHECK, "Button", + LTEXT "Lupa s-a proiectat pentru a oferi un nivel minim de funcÅ£ionalitate utilizatorilor care au deficienÅ£e vizuale minore. Majoritatea utilizatorilor cu deficienÅ£e vizuale vor avea nevoie zilnic de un program de mărire cu performanÅ£e mai bune.", IDC_STATIC, 36, 7, 207, 33 + CONTROL "Nu se mai afiÅŸează acest mesaj", IDC_SHOWWARNINGCHECK, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 43, 80, 137, 10 END From 2667f238cebbc7e8e7437dee5bac52c7d9572e90 Mon Sep 17 00:00:00 2001 From: Andrei Miloiu Date: Fri, 10 May 2024 22:39:05 +0300 Subject: [PATCH 130/182] [JOY] Update Romanian (ro-RO) translation (#6668) --- dll/cpl/joy/lang/ro-RO.rc | 72 +++++++++++++++++++-------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/dll/cpl/joy/lang/ro-RO.rc b/dll/cpl/joy/lang/ro-RO.rc index 8121d419ea7..d1ce88f9097 100644 --- a/dll/cpl/joy/lang/ro-RO.rc +++ b/dll/cpl/joy/lang/ro-RO.rc @@ -4,7 +4,7 @@ * PURPOSE: Romanian resource file * TRANSLATORS: Copyright 2009 Petru Dimitriu * Copyright 2011-2018 Ștefan Fulea - * Copyright 2022 Andrei Miloiu + * Copyright 2022-2024 Andrei Miloiu */ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL @@ -12,83 +12,83 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL IDD_PROPPAGEMAIN DIALOGEX 0, 0, 252, 205 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION EXSTYLE WS_EX_CONTEXTHELP -CAPTION "Dispozitive de control pentru jocuri" +CAPTION "Dispozitive control joc" FONT 8, "MS Shell Dlg" BEGIN ICON IDI_CPLSYSTEM, -1, 7, 7, 20, 20 - LTEXT "Aceste opÈ›iuni permit configurarea dispozitivelor de control al jocurilor instalate în acest calculator.", -1, 33, 7, 214, 20, NOT WS_GROUP - GROUPBOX "Dispo&zitive de control instalate", -1, 7, 34, 238, 117 + LTEXT "Aceste setări facilitează configurarea butoanelor control joc instalate pe computer.", -1, 33, 7, 214, 20, NOT WS_GROUP + GROUPBOX "Butoane control joc i&nstalate", -1, 7, 34, 238, 117 CONTROL "List1", IDC_CONTROLLER_LIST, "SysListView32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x0000808D, 14, 44, 224, 80 PUSHBUTTON "&Adăugare…", IDC_ADD_BUTTON, 35, 129, 65, 14 - PUSHBUTTON "&Elimină", IDC_REMOVE_BUTTON, 104, 129, 65, 14, WS_DISABLED - PUSHBUTTON "&Proprietăți", IDC_PROPERTIES_BUTTON, 173, 129, 65, 14, WS_DISABLED - PUSHBUTTON "A&vansate…", IDC_ADVANCED_BUTTON, 111, 157, 65, 14 + PUSHBUTTON "&Eliminare", IDC_REMOVE_BUTTON, 104, 129, 65, 14, WS_DISABLED + PUSHBUTTON "Propr&ietăţi", IDC_PROPERTIES_BUTTON, 173, 129, 65, 14, WS_DISABLED + PUSHBUTTON "Co&mplex…", IDC_ADVANCED_BUTTON, 111, 157, 65, 14 PUSHBUTTON "&Depanare…", IDC_TROUBLESHOOT_BUTTON, 180, 157, 65, 14 - PUSHBUTTON "ÃŽ&nchide", IDOK, 195, 185, 50, 14 + PUSHBUTTON "OK", IDOK, 195, 185, 50, 14 END IDD_ADD DIALOGEX 0, 0, 265, 200 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_CAPTION EXSTYLE WS_EX_CONTEXTHELP -CAPTION "Adăugare dispozitiv de control pentru jocuri" +CAPTION "Adăugare buton control joc" FONT 8, "MS Shell Dlg" BEGIN ICON IDI_CPLSYSTEM, -1, 8, 7, 20, 20 - LTEXT "AlegeÈ›i un dispozitiv de control din lista de mai jos, apoi confirmaÈ›i. Dacă dispozitivul pe care îl căutaÈ›i nu apare, apăsaÈ›i „Altcevaâ€.", -1, 35, 7, 210, 33 - LTEXT "&Dispozitive:", -1, 8, 45, 126, 8 + LTEXT "SelectaÅ£i un buton control joc din lista de mai jos ÅŸi faceÅ£i clic pe OK. Dacă acesta nu apare în listă, se face clic pe Particularizare.", -1, 35, 7, 210, 33 + LTEXT "&Dispozitive control joc:", -1, 8, 45, 126, 8 LISTBOX IDC_GAME_CONTROLLERS_LIST, 7, 55, 251, 57, LBS_STANDARD | LBS_NOINTEGRALHEIGHT | LBS_WANTKEYBOARDINPUT | WS_HSCROLL | WS_TABSTOP - AUTOCHECKBOX "A&ctivează cârmă È™i pedale", IDC_ENABLE_RUDDERS_CHECKBOX, 7, 114, 100, 10, WS_GROUP - LTEXT "&Port joc:", -1, 7, 134, 38, 8, NOT WS_VISIBLE + AUTOCHECKBOX "&Activare dispozitive de control ÅŸi pedale", IDC_ENABLE_RUDDERS_CHECKBOX, 7, 114, 100, 10, WS_GROUP + LTEXT "P&ort pentru joc:", -1, 7, 134, 38, 8, NOT WS_VISIBLE COMBOBOX IDC_GAME_PORT_COMBO, 7, 147, 140, 50, CBS_DROPDOWNLIST | CBS_SORT | NOT WS_VISIBLE | WS_VSCROLL - PUSHBUTTON "&Altceva…", IDC_CUSTOM_BUTTON, 208, 147, 50, 14 + PUSHBUTTON "&Particularizare…", IDC_CUSTOM_BUTTON, 208, 147, 50, 14 CONTROL "", -25525, "STATIC", SS_ETCHEDHORZ, 7, 170, 251, 1 - DEFPUSHBUTTON "Con&firmă", IDOK, 155, 179, 50, 14 - PUSHBUTTON "A&nulează", IDCANCEL, 208, 179, 50, 14 + DEFPUSHBUTTON "OK", IDOK, 155, 179, 50, 14 + PUSHBUTTON "Revocare", IDCANCEL, 208, 179, 50, 14 END IDD_CUSTOM DIALOGEX 0, 0, 265, 183, 0 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_CAPTION EXSTYLE WS_EX_CONTEXTHELP -CAPTION "Adăugare dispozitiv special de control pentru jocuri" +CAPTION "Dispozitiv control joc particularizat" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Caracteristici speciale", -1, 7, 7, 245, 52 - AUTORADIOBUTTON "J&oystick", IDC_JOYSTICK_RADIO, 17, 23, 55, 10 - AUTORADIOBUTTON "Ghidon sau &manete", IDC_FLIGHT_YOKE_RADIO, 147, 23, 89, 10 - AUTORADIOBUTTON "&Gamepad", IDC_GAME_PAD_RADIO, 17, 40, 65, 10 - AUTORADIOBUTTON "&Volan (cu/fără pedale)", IDC_RACE_CAR_RADIO, 147, 40, 93, 10 - GROUPBOX "&Axe", -1, 7, 67, 116, 44, WS_GROUP + AUTORADIOBUTTON "&Joystick", IDC_JOYSTICK_RADIO, 17, 23, 55, 10 + AUTORADIOBUTTON "&Tablă de joc", IDC_FLIGHT_YOKE_RADIO, 147, 23, 89, 10 + AUTORADIOBUTTON "Manşă sau manetă de &zbor", IDC_GAME_PAD_RADIO, 17, 40, 65, 10 + AUTORADIOBUTTON "Buton control &raliu", IDC_RACE_CAR_RADIO, 147, 40, 93, 10 + GROUPBOX "A&xe", -1, 7, 67, 116, 44, WS_GROUP COMBOBOX IDC_AXES_COMBO, 37, 79, 48, 50, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL - AUTORADIOBUTTON "Cârmă/pedale", IDC_RUDDER_PEDALS_RADIO, 14, 97, 63, 10, NOT WS_VISIBLE + AUTORADIOBUTTON "DirecÅ£ie/Pedale", IDC_RUDDER_PEDALS_RADIO, 14, 97, 63, 10, NOT WS_VISIBLE AUTORADIOBUTTON "Axa Z", IDC_Z_AXIS_RADIO, 81, 97, 35, 10, NOT WS_VISIBLE GROUPBOX "&Butoane", -1, 137, 67, 116, 44 COMBOBOX IDC_BUTTONS_COMBO, 178, 79, 48, 50, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL, WS_EX_CLIENTEDGE - AUTOCHECKBOX "Are inclus un &control pentru punct vizual", IDC_INC_POINT_CHECKBOX, 7, 123, 155, 10 - LTEXT "N&ume dispozitiv de control:", -1, 7, 139, 200, 9 + AUTOCHECKBOX "Include un control al &unghiului de vedere", IDC_INC_POINT_CHECKBOX, 7, 123, 155, 10 + LTEXT "Nume buton c&ontrol:", -1, 7, 139, 200, 9 EDITTEXT IDC_CONTROLLER_NAME_EDIT, 7, 150, 116, 15, ES_AUTOHSCROLL, WS_EX_CLIENTEDGE | WS_EX_STATICEDGE - DEFPUSHBUTTON "Con&firmă", IDOK, 137, 150, 50, 14 - PUSHBUTTON "A&nulează", IDCANCEL, 203, 150, 50, 14 + DEFPUSHBUTTON "OK", IDOK, 137, 150, 50, 14 + PUSHBUTTON "Revocare", IDCANCEL, 203, 150, 50, 14 END IDD_ADVANCED DIALOGEX 0, 0, 220, 86 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION EXSTYLE WS_EX_CONTEXTHELP -CAPTION "OpÈ›iuni avansate" +CAPTION "Setări complexe" FONT 8, "MS Shell Dlg" BEGIN ICON IDI_CPLSYSTEM, -1, 7, 24, 20, 20 - DEFPUSHBUTTON "Con&firmă", IDOK, 106, 65, 50, 14 - PUSHBUTTON "A&nulează", IDCANCEL, 163, 65, 50, 14 - LTEXT "AlegeÈ›i dispozitivul preferat pentru programele mai vechi.", -1, 7, 7, 208, 10 - LTEXT "&Dispozitivul preferat:", -1, 34, 24, 70, 10 + DEFPUSHBUTTON "OK", IDOK, 106, 65, 50, 14 + PUSHBUTTON "Revocare", IDCANCEL, 163, 65, 50, 14 + LTEXT "SelectaÅ£i dispozitivul care va fi utilizat cu programe mai vechi.", -1, 7, 7, 208, 10 + LTEXT "Dispozitiv &preferat:", -1, 34, 24, 70, 10 COMBOBOX IDC_PREFERRED_DEV_COMBO, 34, 38, 179, 75, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL END STRINGTABLE BEGIN - IDS_CPLSYSTEMNAME "Dispozitive de control jocuri" - IDS_CPLSYSTEMDESCRIPTION "Adăugarea, eliminarea sau configurarea dispozitivelor de control pentru jocuri, precum joystick-uri sau gamepad-uri." - IDS_CONTROLLER "Dispozitiv de control" + IDS_CPLSYSTEMNAME "Dispozitive control joc" + IDS_CPLSYSTEMDESCRIPTION "Adăugare, eliminare sau configurare componente hardware pentru controlul jocului, cum ar fi joystick-uri ÅŸi gamepad-uri." + IDS_CONTROLLER "Dispozitive control joc" IDS_STATUS "Stare" - IDS_NONE "(Niciunul)" + IDS_NONE "(nici una)" END From c2931ef23de6cfbe2d317c5b9767394d967b8f53 Mon Sep 17 00:00:00 2001 From: Andrei Miloiu Date: Fri, 10 May 2024 22:41:00 +0300 Subject: [PATCH 131/182] [OSK] Update Romanian (ro-RO) translation (#6706) --- base/applications/osk/lang/ro-RO.rc | 40 ++++++++++++++--------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/base/applications/osk/lang/ro-RO.rc b/base/applications/osk/lang/ro-RO.rc index 329cc00ebc0..afbe9a5fbe9 100644 --- a/base/applications/osk/lang/ro-RO.rc +++ b/base/applications/osk/lang/ro-RO.rc @@ -11,38 +11,38 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_DEFAULT IDR_OSK_MENU MENU DISCARDABLE BEGIN - POPUP "FiÈ™ier" + POPUP "&FiÅŸier" BEGIN - MENUITEM "&IeÈ™ire", IDM_EXIT + MENUITEM "I&eÅŸire", IDM_EXIT END - POPUP "Tastatură" + POPUP "&Tastatură" BEGIN - MENUITEM "Tastatură extinsă", IDM_ENHANCED_KB, CHECKED - MENUITEM "Tastatură standard", IDM_STANDARD_KB + MENUITEM "&Tastatură extinsă", IDM_ENHANCED_KB, CHECKED + MENUITEM "Tastatură &standard", IDM_STANDARD_KB MENUITEM SEPARATOR - MENUITEM "Structură standard", IDM_REG_LAYOUT, CHECKED, GRAYED - MENUITEM "Structură bloc", IDM_BLOCK_LAYOUT, GRAYED + MENUITEM "&Aspect standard", IDM_REG_LAYOUT, CHECKED, GRAYED + MENUITEM "Aspect &bloc", IDM_BLOCK_LAYOUT, GRAYED MENUITEM SEPARATOR - MENUITEM "101 taste", IDM_101_KEYS, CHECKED, GRAYED - MENUITEM "102 taste", IDM_102_KEYS, GRAYED - MENUITEM "106 taste", IDM_106_KEYS, GRAYED + MENUITEM "10&1 taste", IDM_101_KEYS, CHECKED, GRAYED + MENUITEM "10&2 taste", IDM_102_KEYS, GRAYED + MENUITEM "10&6 taste", IDM_106_KEYS, GRAYED END - POPUP "Setări" + POPUP "&Setări" BEGIN - MENUITEM "ÃŽntotdeauna în față", IDM_ON_TOP, CHECKED + MENUITEM "ÃŽ&ntotdeauna în faţă", IDM_ON_TOP, CHECKED MENUITEM SEPARATOR - MENUITEM "&Utilizare sunetul de clic", IDM_CLICK_SOUND + MENUITEM "&Utilizare sunet de clic", IDM_CLICK_SOUND MENUITEM SEPARATOR - MENUITEM "&Mod tastare...", IDM_TYPE_MODE, GRAYED + MENUITEM "&Mod tastare ...", IDM_TYPE_MODE, GRAYED MENUITEM SEPARATOR - MENUITEM "&Font...", IDM_FONT + MENUITEM "&Font ...", IDM_FONT END - POPUP "Ajutor" + POPUP "Aj&utor" BEGIN - MENUITEM "&Manual", IDM_HELP_TOPICS, GRAYED + MENUITEM "&Cuprins", IDM_HELP_TOPICS, GRAYED MENUITEM SEPARATOR MENUITEM "&Despre Tastatura vizuală...", IDM_ABOUT END @@ -50,13 +50,13 @@ END IDD_WARNINGDIALOG_OSK DIALOGEX 0, 0, 250, 97 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION -CAPTION "Tastatură vizuală" +CAPTION "Despre Tastatura vizuală" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN DEFPUSHBUTTON "OK", IDOK, 193, 76, 50, 14 ICON IDI_OSK, IDC_STATIC, 7, 17, 20, 20 - LTEXT "Tastatura vizuală asigură un nivel minim de funcÈ›ionalitate pentru utilizatori cu dizabilități. Utilizatori cu dizabilități au nevoie de un program cu o mai mare funcÈ›ionalitate pentru un uz zilnic.", IDC_STATIC, 36, 7, 207, 33 - CONTROL "Nu mai afiÈ™a acest mesaj", IDC_SHOWWARNINGCHECK, "Button", + LTEXT "Tastatura vizuală furnizează un nivel minim de funcÅ£ionalitate pentru utilizatorii cu mobilitate redusă. Utilizatorii cu mobilitate redusă vor avea nevoie de un program utilitar o tastatură vizuală cu funcÅ£ionalitate mai înaltă pentru folosinţă cotidiană.", IDC_STATIC, 36, 7, 207, 33 + CONTROL "&Nu se mai afiÅŸează acest mesaj", IDC_SHOWWARNINGCHECK, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 43, 80, 137, 10 END From 2c96a6b61480b3885c150f01efcc6a556c6c8f69 Mon Sep 17 00:00:00 2001 From: Andrei Miloiu Date: Fri, 10 May 2024 22:46:46 +0300 Subject: [PATCH 132/182] [WINLOGON] Update Romanian (ro-RO) translation (#6773) --- base/system/winlogon/lang/ro-RO.rc | 46 +++++++++++++++--------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/base/system/winlogon/lang/ro-RO.rc b/base/system/winlogon/lang/ro-RO.rc index 36e3016c8d8..88b35c20cb5 100644 --- a/base/system/winlogon/lang/ro-RO.rc +++ b/base/system/winlogon/lang/ro-RO.rc @@ -5,39 +5,39 @@ * TRANSLATORS: Copyright 2011 Petru Dimitriu * Copyright 2011-2019 Ștefan Fulea * Copyright 2021 George BiÈ™oc - * Copyright 2023 Andrei Miloiu + * Copyright 2023-2024 Andrei Miloiu */ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL IDD_SHUTDOWNCOMPUTER DIALOGEX 45, 22, 164, 52 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Oprire calculator" +CAPTION "ÃŽnchidere computer" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "Acum puteÈ›i închide calculatorul în siguranță.", IDC_SHUTDOWNCOMPUTER, 31, 6, 132, 18 + LTEXT "Computerul se poate închide în siguranţă.", IDC_SHUTDOWNCOMPUTER, 31, 6, 132, 18 ICON IDI_WINLOGON, IDC_SHTDOWNICON, 6, 7, 18, 20 DEFPUSHBUTTON "&Repornire", IDC_BTNSHTDOWNCOMPUTER, 62, 32, 40, 14 END IDD_GINALOADFAILED DIALOGEX 58, 83, 231, 119 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Eroare de interfață de utilizator" +CAPTION "Eroare interfaţă utilizator" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "FiÈ™ierul DLL al interfeÈ›ei „%s†nu s-a încărcat.", IDC_GINALOADFAILED, 39, 16, 156, 24 - LTEXT "ReinstalaÈ›i ReactOS pentru a rezolva această problemă.", IDC_GINALOADFAILEDCONTACT, 39, 53, 151, 25 + LTEXT "ÃŽncărcarea DLL-ului %s, de interfaţă utilizator pentru Log on, nu a reuÅŸit ", IDC_GINALOADFAILED, 39, 16, 156, 24 + LTEXT "ContactaÅ£i administratorul de sistem pentru a înlocui biblioteca DLL sau restauraÅ£i biblioteca DLL originală.", IDC_GINALOADFAILEDCONTACT, 39, 53, 151, 25 DEFPUSHBUTTON "&Repornire", 1, 80, 91, 68, 14 END IDD_SYSSHUTDOWN DIALOGEX 50, 50, 180, 140 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_VISIBLE | WS_CAPTION | WS_POPUP -CAPTION "Sistem de oprire" +CAPTION "ÃŽnchidere sistem" FONT 8, "MS Shell Dlg" BEGIN ICON IDI_WARNING, IDC_SYSSHUTDOWNICON, 6, 7, 18, 20 - LTEXT "Sistemul de oprire a fost iniÈ›ializat. SalvaÈ›i toate lucrările È™i închideÈ›i sesiunea. Toate lucrările nesalvate vor fi pierdute atunci când sistemul se va opri.", -1, 38, 7, 135, 40 - LTEXT "Sistemul se va opri în:", -1, 38, 50, 90, 8 + LTEXT "Acest sistem se închide. SalvaÅ£i lucrările curente ÅŸi faceÅ£i Log off. Modificările care nu se salvează se vor pierde.", -1, 38, 7, 135, 40 + LTEXT "Timp până la închidere:", -1, 38, 50, 90, 8 LTEXT "00:00:00", IDC_SYSSHUTDOWNTIMELEFT, 132, 50, 41, 8 LTEXT "Mesaj:", -1, 38, 65, 135, 8 EDITTEXT IDC_SYSSHUTDOWNMESSAGE, 34, 75, 139, 58, ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP, WS_EX_STATICEDGE @@ -45,26 +45,26 @@ END STRINGTABLE BEGIN - IDS_PREPARENETWORKCONNECTIONS "Conexiuni în reÈ›ea în curs de pregătire…" - IDS_APPLYINGCOMPUTERSETTINGS "Setări generale în curs de aplicare…" - IDS_RUNNINGSTARTUPSCRIPTS "OperaÈ›ii de pornire în curs de execuÈ›ie…" - IDS_RUNNINGSHUTDOWNSCRIPTS "OperaÈ›ii de oprire în curs de execuÈ›ie…" - IDS_APPLYINGYOURPERSONALSETTINGS "Setări personale în curs de aplicare…" - IDS_RUNNINGLOGOFFSCRIPTS "OperaÈ›ii de deautentificare în curs de efectuare…" - IDS_RUNNINGLOGONSCRIPTS "OperaÈ›ii de autentificare în curs de efectuare…" - IDS_LOADINGYOURPERSONALSETTINGS "Setări personale în curs de încărcare…" - IDS_CLOSINGNETWORKCONNECTIONS "Conexiuni în reÈ›ea în curs de închidere…" + IDS_PREPARENETWORKCONNECTIONS "Se pregătesc conexiunile reÅ£elei…" + IDS_APPLYINGCOMPUTERSETTINGS "Se aplică setările computerului…" + IDS_RUNNINGSTARTUPSCRIPTS "Se rulează script-urile de pornire…" + IDS_RUNNINGSHUTDOWNSCRIPTS "Se rulează script-urile de oprire…" + IDS_APPLYINGYOURPERSONALSETTINGS "Se aplică setările personale…" + IDS_RUNNINGLOGOFFSCRIPTS "Se rulează script-urile de Log off…" + IDS_RUNNINGLOGONSCRIPTS "Se rulează script-urile de Log on…" + IDS_LOADINGYOURPERSONALSETTINGS "Se încarcă setările personale…" + IDS_CLOSINGNETWORKCONNECTIONS "Se închid conexiunile reÅ£elei…" IDS_REACTOSISRESTARTING "Se reporneÈ™te..." IDS_REACTOSISSHUTTINGDOWN "Se închide..." - IDS_PREPARETOSTANDBY "Stare de veghe în curs de pregătire…" - IDS_PREPARETOHIBERNATE "Stare de hibernare în curs de pregătire…" - IDS_SAVEYOURSETTINGS "Setări personale în curs de salvare…" - IDS_REACTOSISSTARTINGUP "Sistem de operare în curs de pornire…" + IDS_PREPARETOSTANDBY "Se pregăteÅŸte pentru starea de veghe…" + IDS_PREPARETOHIBERNATE "Se pregăteÅŸte pentru hibernare…" + IDS_SAVEYOURSETTINGS "Se salvează setările…" + IDS_REACTOSISSTARTINGUP "Se porneÅŸte ReactOS…" IDS_TIMEOUTSHORTFORMAT "%02d:%02d:%02d" IDS_TIMEOUTLONGFORMAT "%d zile" END STRINGTABLE BEGIN - IDS_FAILEDACTIVATEUSERSHELL "Winlogon a eÈ™uat la activarea interfeÈ›ei-utilizator!" + IDS_FAILEDACTIVATEUSERSHELL "Winlogon nu a putut activa interfaÈ›a utilizatorului!" END From bc59daf3d5e48bf976208ffadc6f15d735f69204 Mon Sep 17 00:00:00 2001 From: Andrei Miloiu Date: Fri, 10 May 2024 23:18:18 +0300 Subject: [PATCH 133/182] [DESKMON] Update Romanian (ro-RO) translation (#6666) --- dll/shellext/deskmon/lang/ro-RO.rc | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/dll/shellext/deskmon/lang/ro-RO.rc b/dll/shellext/deskmon/lang/ro-RO.rc index 48a81371945..12c4468f951 100644 --- a/dll/shellext/deskmon/lang/ro-RO.rc +++ b/dll/shellext/deskmon/lang/ro-RO.rc @@ -3,29 +3,29 @@ * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) * PURPOSE: Romanian resource file * TRANSLATORS: Copyright 2011-2019 Ștefan Fulea - * Copyright 2023 Andrei Miloiu + * Copyright 2023-2024 Andrei Miloiu */ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL IDD_MONITOR DIALOGEX 0, 0, 252, 226 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Ecran" +CAPTION "Monitor" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - GROUPBOX "Tipul de ecran", -1, 7, 3, 237, 52 + GROUPBOX "Tip monitor", -1, 7, 3, 237, 52 ICON IDC_MONITORICO, IDC_MONITORICO, 13, 11, 21, 20, SS_ICON LTEXT "", IDC_MONITORNAME, 40, 17, 190, 20, SS_NOPREFIX LISTBOX IDC_MONITORLIST, 40, 13, 196, 30, WS_VSCROLL - PUSHBUTTON "&Proprietăți…", IDC_MONITORPROPERTIES, 177, 35, 59, 14, WS_DISABLED - GROUPBOX "Setări pentru ecran", IDS_MONITORSETTINGSGROUP, 7, 58, 237, 63 - LTEXT "&Rata de împrospătare:", IDS_REFRESHRATELABEL, 13, 73, 225, 8 + PUSHBUTTON "Propr&ietăţi", IDC_MONITORPROPERTIES, 177, 35, 59, 14, WS_DISABLED + GROUPBOX "Setări monitor", IDS_MONITORSETTINGSGROUP, 7, 58, 237, 63 + LTEXT "&Rata de reîmprospătare a ecranului:", IDS_REFRESHRATELABEL, 13, 73, 225, 8 COMBOBOX IDC_REFRESHRATE, 13, 85, 225, 200, WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT - AUTOCHECKBOX "Asc&unde modurile incompatibile", IDC_PRUNINGCHECK, 13, 106, 225, 10 + AUTOCHECKBOX "Ascundere &moduri pe care acest monitor nu le poate afiÅŸa", IDC_PRUNINGCHECK, 13, 106, 225, 10 END STRINGTABLE BEGIN - IDS_USEDEFFRQUENCY "FoloseÈ™te setările hardware implicite" - IDS_FREQFMT "%u Hertz" + IDS_USEDEFFRQUENCY "Se utilizează setarea hardware implicită" + IDS_FREQFMT "%u Hertzi" END From 762d042a152b4da0499905496b863a3a13f7ee71 Mon Sep 17 00:00:00 2001 From: Andrei Miloiu Date: Fri, 10 May 2024 23:33:08 +0300 Subject: [PATCH 134/182] [MSTSC] Update Romanian (ro-RO) translation (#6841) --- base/applications/mstsc/lang/ro-RO.rc | 56 +++++++++++++-------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/base/applications/mstsc/lang/ro-RO.rc b/base/applications/mstsc/lang/ro-RO.rc index cda1b4b76d7..784d31fbfaa 100644 --- a/base/applications/mstsc/lang/ro-RO.rc +++ b/base/applications/mstsc/lang/ro-RO.rc @@ -3,7 +3,7 @@ * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) * PURPOSE: Romanian resource file * TRANSLATORS: Copyright 2011-2018 Ștefan Fulea - * Copyright 2022-2023 Andrei Miloiu + * Copyright 2022-2024 Andrei Miloiu */ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL @@ -12,61 +12,61 @@ IDD_GENERAL DIALOGEX 0, 0, 242, 175 STYLE DS_SHELLFONT | WS_CHILD FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - GROUPBOX "PreferinÈ›e de conectare", IDC_STATIC, 7, 7, 228, 89 - GROUPBOX "Gestiune conexiuni", IDC_STATIC, 7, 103, 228, 65 + GROUPBOX "Setări Log on", IDC_STATIC, 7, 7, 228, 89 + GROUPBOX "Setări conexiune", IDC_STATIC, 7, 103, 228, 65 ICON "", IDC_LOGONICON, 15, 19, 20, 20 - LTEXT "IntroduceÈ›i adresa unui server.", IDC_STATIC, 47, 24, 121, 8 - LTEXT "Server:", IDC_STATIC, 47, 41, 35, 8 - LTEXT "Nume utilizator:", IDC_STATIC, 47, 58, 58, 8 + LTEXT "IntroduceÈ›i adresa serverului.", IDC_STATIC, 47, 24, 121, 8 + LTEXT "&Server:", IDC_STATIC, 47, 41, 35, 8 + LTEXT "Nume utili&zator:", IDC_STATIC, 47, 58, 58, 8 COMBOBOX IDC_SERVERCOMBO, 101, 39, 119, 13, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP EDITTEXT IDC_NAMEEDIT, 101, 55, 119, 14, WS_TABSTOP | ES_AUTOHSCROLL - PUSHBUTTON "S&alvează", IDC_SAVE, 57, 139, 50, 14 - PUSHBUTTON "Sal&vează ca…", IDC_SAVEAS, 112, 139, 60, 14 + PUSHBUTTON "S&alvare", IDC_SAVE, 57, 139, 50, 14 + PUSHBUTTON "&Salvare ca…", IDC_SAVEAS, 112, 139, 60, 14 PUSHBUTTON "&Deschidere…", IDC_OPEN, 177, 139, 50, 14 ICON "", IDC_CONNICON, 16, 114, 20, 20 - LTEXT "PuteÈ›i salva setările curente de conectare sau puteÈ›i deschide o configuraÈ›ie existentă.", IDC_STATIC, 50, 115, 172, 20 + LTEXT "Se salvează setările curente sau se deschide conexiunea salvată.", IDC_STATIC, 50, 115, 172, 20 END IDD_DISPLAY DIALOGEX 0, 0, 242, 175 STYLE DS_SHELLFONT | WS_CHILD FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - GROUPBOX "Dimensiune", IDC_STATIC, 7, 7, 228, 68 - GROUPBOX "Culori", IDC_STATIC, 7, 83, 228, 85 + GROUPBOX "Dimensiune desktop &la distanţă", IDC_STATIC, 7, 7, 228, 68 + GROUPBOX "&Culori", IDC_STATIC, 7, 83, 228, 85 ICON "", IDC_REMICON, 15, 19, 20, 20 ICON "", IDC_COLORSICON, 15, 98, 20, 20 - LTEXT "StabiliÈ›i dimensiunea ecranului de control. TrageÈ›i glisorul spre extrema dreaptă pentru tot ecranul.", IDC_STATIC, 53, 22, 175, 21 + LTEXT "AlegeÅ£i dimensiunea spaÅ£iului de lucru la distanţă. GlisaÅ£i cursorul în partea dreaptă până la capăt pentru o vizualizare ecran complet.", IDC_STATIC, 53, 22, 175, 21 CONTROL "", IDC_GEOSLIDER, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 56, 42, 124, 17 COMBOBOX IDC_BPPCOMBO, 56, 102, 128, 80, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP CONTROL "", IDC_COLORIMAGE, "Static", SS_OWNERDRAW | SS_SUNKEN, 56, 121, 127, 10 - LTEXT "Notă: Această preferință poate fi sau nu compatibilă cu setările calculatorului gazdă. PreferinÈ›ele incompatibile vor fi ignorate.", IDC_STATIC, 56, 138, 155, 27 - LTEXT "Mică", IDC_STATIC, 35, 42, 15, 8 - LTEXT "Mare", IDC_STATIC, 189, 42, 17, 8 + LTEXT "Notă: Este posibil ca setările de pe computerul de la distanţă să anuleze această setare.", IDC_STATIC, 56, 138, 155, 27 + LTEXT "Mai puÅ£in", IDC_STATIC, 35, 42, 15, 8 + LTEXT "Mai mult", IDC_STATIC, 189, 42, 17, 8 LTEXT "", IDC_SETTINGS_RESOLUTION_TEXT, 56, 62, 120, 10, SS_CENTER END IDD_CONNECTDIALOG DIALOGEX 0, 0, 260, 262 STYLE DS_SHELLFONT | DS_CENTER | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Conectare pentru control la distanță" +CAPTION "Conexiune desktop la distanţă" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - DEFPUSHBUTTON "&Conectează", IDOK, 147, 245, 50, 14 - PUSHBUTTON "A&nulează", IDCANCEL, 203, 245, 50, 14 + DEFPUSHBUTTON "&Conectare", IDOK, 147, 245, 50, 14 + PUSHBUTTON "Revocare", IDCANCEL, 203, 245, 50, 14 CONTROL "", IDC_TAB, "SysTabControl32", 0x0, 7, 50, 246, 190 END STRINGTABLE BEGIN - IDS_TAB_GENERAL "Generale" - IDS_TAB_DISPLAY "Ecran" - IDS_256COLORS "256 culori" - IDS_HIGHCOLOR15 "Calitate înaltă (15 biÈ›i)" - IDS_HIGHCOLOR16 "Calitate înaltă (16 biÈ›i)" - IDS_HIGHCOLOR24 "Calitate foto (24 biÈ›i)" - IDS_HIGHCOLOR32 "Calitate maximă (32 biÈ›i)" + IDS_TAB_GENERAL "General" + IDS_TAB_DISPLAY "AfiÅŸare" + IDS_256COLORS "256 Culori" + IDS_HIGHCOLOR15 "Culoare maximă (15 biÅ£i)" + IDS_HIGHCOLOR16 "Culoare maximă (16 biÈ›i)" + IDS_HIGHCOLOR24 "Culoare reală (24 biÈ›i)" + IDS_HIGHCOLOR32 "Cea mai înaltă calitate (32 biÈ›i)" IDS_PIXEL "%lux%lu pixeli" - IDS_FULLSCREEN "Pe tot ecranul" - IDS_BROWSESERVER "" - IDS_HEADERTEXT1 "Calculator la distanță" + IDS_FULLSCREEN "Ecran complet" + IDS_BROWSESERVER "" + IDS_HEADERTEXT1 "Desktop la distanță" IDS_HEADERTEXT2 "Conexiune" END From 7c5a8c7a07cedd71694a445ce3663097d0572495 Mon Sep 17 00:00:00 2001 From: Andrei Miloiu Date: Fri, 10 May 2024 23:35:28 +0300 Subject: [PATCH 135/182] [MSPORTS] Update Romanian (ro-RO) translation (#6703) --- dll/win32/msports/lang/ro-RO.rc | 34 ++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/dll/win32/msports/lang/ro-RO.rc b/dll/win32/msports/lang/ro-RO.rc index 3228dc9c8f4..e98cdb8a9c2 100644 --- a/dll/win32/msports/lang/ro-RO.rc +++ b/dll/win32/msports/lang/ro-RO.rc @@ -3,48 +3,48 @@ * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) * PURPOSE: Romanian resource file * TRANSLATORS: Copyright 2011-2019 Ștefan Fulea - * Copyright 2023 Andrei Miloiu + * Copyright 2023-2024 Andrei Miloiu */ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL IDD_SERIALSETTINGS DIALOGEX 0, 0, 252, 218 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Setările portului" +CAPTION "Setări port" FONT 8, "MS Shell Dlg" BEGIN - RTEXT "&BiÈ›i pe secundă:", -1, 6, 19, 130, 8, WS_GROUP + RTEXT "&BiÅ£i pe secundă:", -1, 6, 19, 130, 8, WS_GROUP COMBOBOX IDC_SERIAL_BITSPERSECOND, 139, 17, 106, 90, CBS_DROPDOWNLIST | WS_TABSTOP | WS_VSCROLL - RTEXT "BiÈ›i de &date:", -1, 6, 40, 130, 8, WS_GROUP + RTEXT "BiÅ£i de &date:", -1, 6, 40, 130, 8, WS_GROUP COMBOBOX IDC_SERIAL_DATABITS, 139, 38, 106, 54, CBS_DROPDOWNLIST | WS_TABSTOP | WS_VSCROLL RTEXT "&Paritate:", -1, 6, 61, 130, 8, WS_GROUP COMBOBOX IDC_SERIAL_PARITY, 139, 59, 106, 62, CBS_DROPDOWNLIST | WS_TABSTOP | WS_VSCROLL - RTEXT "BiÈ›i de st&op:", -1, 6, 82, 130, 8, WS_GROUP + RTEXT "BiÅ£i de st&op:", -1, 6, 82, 130, 8, WS_GROUP COMBOBOX IDC_SERIAL_STOPBITS, 139, 80, 106, 54, CBS_DROPDOWNLIST | WS_TABSTOP | WS_VSCROLL - RTEXT "&Controlul fluxului:", -1, 6, 102, 130, 8, WS_GROUP + RTEXT "Control &flux::", -1, 6, 102, 130, 8, WS_GROUP COMBOBOX IDC_SERIAL_FLOWCONTROL, 139, 100, 106, 54, CBS_DROPDOWNLIST | WS_TABSTOP | WS_VSCROLL - PUSHBUTTON "A&vansate…", IDC_SERIAL_ADVANCED, 71, 130, 85, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Valori i&mplicite", IDC_SERIAL_RESTORE, 160, 130, 85, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Complex…", IDC_SERIAL_ADVANCED, 71, 130, 85, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "R&estabilire valori implicite", IDC_SERIAL_RESTORE, 160, 130, 85, 14, WS_GROUP | WS_TABSTOP END IDD_PARALLELSETTINGS DIALOGEX 0, 0, 252, 218 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Setările portului" +CAPTION "Setări port" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Metoda de filtrare a resurselor", -1, 6, 6, 237, 75 - AUTORADIOBUTTON "ÃŽncearcă evitarea uzului de întreruperi", IDC_TRY_INTERRUPT, 11, 22, 227, 10, WS_GROUP - AUTORADIOBUTTON "Nu folosi întreruperi", IDC_NEVER_INTERRUPT, 11, 44, 227, 10 - AUTORADIOBUTTON "FoloseÈ™te orice întrerupere asociată portului", IDC_ANY_INTERRUPT, 11, 66, 227, 10 - AUTOCHECKBOX "Activează detecÈ›ia PnP (moÈ™tenire)", IDC_PARALLEL_LEGACY, 6, 90, 237, 10, WS_TABSTOP - LTEXT "Număr port LPT:", -1, 6, 107, 140, 10, WS_GROUP + GROUPBOX "Metodă de filtrare a resurselor", -1, 6, 6, 237, 75 + AUTORADIOBUTTON "Se în&cearcă să nu se utilizeze o întrerupere", IDC_TRY_INTERRUPT, 11, 22, 227, 10, WS_GROUP + AUTORADIOBUTTON "&Nu se utilizează niciodată întreruperi", IDC_NEVER_INTERRUPT, 11, 44, 227, 10 + AUTORADIOBUTTON "Se &utilizează orice întrerupere asociată portului", IDC_ANY_INTERRUPT, 11, 66, 227, 10 + AUTOCHECKBOX "Acti&vare detectare dispozitive Plug and Play moÅŸtenite", IDC_PARALLEL_LEGACY, 6, 90, 237, 10, WS_TABSTOP + LTEXT "Număr port L&PT:", -1, 6, 107, 140, 10, WS_GROUP COMBOBOX IDC_PARALLEL_NAME, 65, 105, 75, 20, CBS_DROPDOWNLIST | WS_GROUP | WS_TABSTOP | WS_VSCROLL END STRINGTABLE BEGIN - IDS_PARITY "par,impar,nespecificat,marcaj,spaÈ›iu" + IDS_PARITY "Par,Impar,Fără,Marcaj,SpaÅ£iu" IDS_STOPBITS "1,1.5,2" - IDS_FLOWCONTROL "Xact / Xinact,fizic,nespecificat" + IDS_FLOWCONTROL "Xon / Xoff,Hardware,Fără" IDS_PORT_IN_USE " (în uz)" END From 06e89b2e81cd7de029fac2c595a6371eba13d797 Mon Sep 17 00:00:00 2001 From: Andrei Miloiu Date: Sat, 11 May 2024 00:55:04 +0300 Subject: [PATCH 136/182] [DOC] Update Romanian translation notes.txt (#6517) --- media/doc/Romanian translation notes.txt | 57 +++++------------------- 1 file changed, 11 insertions(+), 46 deletions(-) diff --git a/media/doc/Romanian translation notes.txt b/media/doc/Romanian translation notes.txt index 07e6f21fe95..c9db792251c 100644 --- a/media/doc/Romanian translation notes.txt +++ b/media/doc/Romanian translation notes.txt @@ -1,53 +1,18 @@ The following material is addressed (in Romanian) to Romanian translators. -Copyright 2014 Ștefan Fulea -Copyright 2023 Miloiu Andrei +Copyright 2023-2024 Miloiu Andrei ------------------------------------------------------------------------------ -* Notă introductivă + 1. We use only the correct Romanian language diacritics. + This means using lowercase Å£ instead of È›. + This means using lowercase ÅŸ instead of È™. + This means using uppercase Åž instead of Ș. + Some of XP/2k3sp2 fonts do lack È› and È™ and Ș. + 2. We will make a correct translation both grammatically and literally. + 3. All of the accelerators and of the translations will follow the MSDN's rules as much as possible. We will keep the same XP/2003 (and newer) accelerators. -Resursele în română din ReactOS au suferit în timp o serie de modificări - de la „plombarea†(iniÈ›ial rudimentară) cu resurse româneÈ™ti a primelor aplicaÈ›ii care au apărut între resursele (deja traduse) moÈ™tenite din Wine până la sistematizarea È™i consecventizarea traducerilor acestor resurse în întreg volumul de surse al sistemului de operare. Prezenta notă explicitează normele adoptate pentru această sistematizare/consecventizare. +References: +https://archive.org/details/WinXPLanguagePacks -* ConvenÈ›ii adoptate - -Normele de traducere curente conÈ›in în mare parte normele de traducere adoptate È™i în alte traduceri È™i localizări de logică computaÈ›ională. Cele mai importante în această privință se regăsesc la i18n.ro È™i anume în „ghidul traducătorului†[1]: -Astfel: - 1. Sunt folosite diacriticele corecte ale limbii române. - 2. Traducerile trebuiesc adaptate respectând topica limbii române. - 3. ÃŽn relaÈ›ia utilizator - calculator este adoptată o atitudine informal-autoritară (cu verbe la modul imperativ singular). - 4. ÃŽn relaÈ›ia utilizator - calculator, în cazul etapelor intermediare (având texte delimitate de puncte de suspensie), (în cazul verbelor) este folosit modul infinitiv lung. - 5. ÃŽn relaÈ›ia calculator - utilizator este adoptată o atitudine formal-politicoasă (cu verbe la modul indicativ/conjunctiv, persoana a 2-a, plural). - 6. Este evitată politeÈ›ea excesivă prin omiterea expresiilor de politeÈ›e explicite. - 7. Este evitată utilizarea diacriticelor ca taste active (acceleratori sau taste de acces). - 8. Este evitată utilizarea diacriticelor ca taste active (acceleratori sau taste de acces). - 9. Este recomandată o formulare independentă de gen (gramatical) dacă nu se cununoaÈ™te genul substantivului. - 10. Pentru tastele de acces (care răspund la combinaÈ›ia de taste «Alt» + «tastă», evidenÈ›iate prin sublinierea tastei respective): - - Sunt folosite doar litere sau cifre (recomandare de la Microsoft [2]: „Access keys are alphanumeric keysâ€). Sunt deci de evitat alte simboluri sau semne de punctuaÈ›ie. - - Sunt de evitat (tot conform aceiaÈ™i recomandări [2]) literele sau cifrele care fac reperarea lor un exerciÈ›iu dificil, cum e grupul „lâ€, „1â€, „i†și „I†(din cauza lățimii lor reduse), sau „gâ€, „jâ€, „pâ€, „q†și „y†(care intersectează marcajul de evidenÈ›iere). - 11. Ghilimelele folosite în limba română sunt perechea ghilimelele-deschise (99 jos) cu ghilimele-închise (99 sus), È™i ghilimelele unghiulare. -La acestea se adaugă È™i câteva norme (deduse) din „greÈ™eli frecvente†raportate tot la i18n.ro [3]. - 12. Nu sunt traduse numele proprii (cu excepÈ›ia numelor traductibile ale componentelor/subcomponentelor unui program sau pachet de programe). - 13. Nu este capitalizată decât prima literă dintr-un text. - -* Particularizări locale - -ÃŽn resursele româneÈ™ti din ReactOS există È™i o serie de particularizări care fie nu se regăsesc în alte traduceri fie din cauza diferenÈ›elor de natură ale proiectelor, fie e vorba de termeni încă disputaÈ›i sau neadoptaÈ›i în localizările altor proiecte din diverse motive. Multe dintre acestea au fost menÈ›ionate/discutate în grupul „Diacritice†[4]. Câteva dintre cele mai relevante: - 14. ÃŽn glosar sunt preferate: - - „Confirmăâ€/„Anulează†vs. „OKâ€/„Renunță†- 15. Acceleratorii (combinaÈ›iile de taste de gen „«Ctrl» + «tastă»â€) rămân aceiaÈ™i ca în limba engleză. - 16. Tastele de acces (combinaÈ›iile de taste de gen „«Alt» + «tastă»â€) nu rămân neapărat la fel ca în limba engleză. ÃŽn mulÈ›imea de taste cu această utilizare: - - „f†și „n†sunt rezervate pentru „Confirmă†și respectiv „Anuleazăâ€; „a†pentru „Aplică†(dacă există în aceiaÈ™i fereastră). ÃŽn cazul ferestrelor de tip asistent, „aâ€, „oâ€, „f†și „n†sunt rezervate respectiv pentru „Înainteâ€, „Înapoiâ€, „SfârÈ™it†și „Anuleazăâ€. [NOTÄ‚] - - ÃŽn cazul interfeÈ›elor grafice opÈ›iunilor „Da†și „Nu†le corespund tastele de acces „a†și „uâ€. (ÃŽn cazul interfeÈ›elor linie-de-comandă, corespunzătoare opÈ›iunilor „Da/Nuâ€, care NU sunt taste de acces, rămân „d†și „nâ€.) - 17. Din considerente de lizibilitate, în cazul programelor executate în linie-de-comandă sunt folosite doar ghilimele unghiulare. Tot ghilimelele unghiulare sunt preferate È™i pentru citarea tastelor fizice în mesajele elementelor GUI. - 18. EnunÈ›ul de la convenÈ›ia 2 poate fi extins la „traducerile trebuiesc adaptate respectând (È™i beneficiind de) particularitățile limbii româneâ€, iar următoarele zece coonvenÈ›ii ce urmează după el (3-13) definesc de fapt reguli implicite aplicabile în lipsa unui context bine definit în toate aspectele sale. Unde este posibil, o adaptare la context este dezirabilă: - - ÃŽn cazul opÈ›iunilor despre care există suficiente informaÈ›ii de context, este recomandată flexionarea. De exemplu, opÈ›iunea nulă pentru lista de animaÈ›ii pentru ecran inactiv se poate flexiona în siguranță specificându-i-se genul gramatical feminin - „(nespecificată)â€. - - ÃŽn cazul unor subiecte unice (dintr-un context local sau global), este folosită forma articulată. Exemple: „Calculatorul meu†(numai unul, conÈ›inut concret), „Sistemul de operare†(unic în cadrul său), „Documentele mele†(conÈ›inut concret) vs. „LocaÈ›ii în reÈ›ea†(nedefinit), „Linie de comandă†(cu multiple posibile instanÈ›e distincte/independente), etc. - 19. Diateza reflexivă va fi folosită doar atunci când e necesar. - -[1] https://web.archive.org/web/20170307094948/http://i18n.ro/Ghidul_traduc%C4%83torului_de_software -[2] https://msdn.microsoft.com/en-us/library/ms971323.aspx#atg_keyboardshortcuts_selecting_access_keys -[3] https://web.archive.org/web/20160711131041/http://www.i18n.ro/Gre%C8%99eli_frecvente -[4] http://groups.google.com/group/diacritice -___________________________ -[NOTÄ‚] Această convenÈ›ie deviază de la recomandarea Microsoft [2] de a nu aloca taste de acces pentru controalele cărora le corespund efectele implicite ale tastelor «Enter» È™i «Esc», sau care ar putea interfera cu alte grupuri de formulare-client ce utilizează È™abloanele „Confirmăâ€-„Anuleazăâ€-„Aplică†și „Înapoiâ€-„Înainteâ€/„SfârÈ™itâ€-„Anuleazăâ€. TotuÈ™i, alocarea de taste de acces nu intră în conflict cu efectul acÈ›ionării tastelor fizice (dimpotrivă, navigând utilizând tasta «Tab» într-o fereastră de dialog poate schimba efectul implicit al tastei «Enter» pe o altceva decât butonul-control de confirmare a întregii ferestre de dialog). Evitarea suprapunerii cu alte combinaÈ›ii de acces din formularele-client este È™i ea realizabilă (È™i recomandată prin urmare în lista de convenÈ›ii). +Other future references will also relate to language packs. From ede7389fb64a9c392f2931ea55c2696a80a902a2 Mon Sep 17 00:00:00 2001 From: Connie Sarah Date: Sat, 11 May 2024 11:22:39 +0300 Subject: [PATCH 137/182] [SNDVOL32] Add CTRL-S hotkey to switch between Small/Normal modes (#6867) This adds a hotkey (CTRL-S) which switches between the Normal and Small modes of the Volume Control window (also seen in Windows XP). CORE-17043 Signed-off-by: Connie Julie --- base/applications/sndvol32/sndvol32.c | 13 +++++++++++++ base/applications/sndvol32/sndvol32.h | 2 ++ 2 files changed, 15 insertions(+) diff --git a/base/applications/sndvol32/sndvol32.c b/base/applications/sndvol32/sndvol32.c index 426f5a9cb25..53d55d70d7b 100644 --- a/base/applications/sndvol32/sndvol32.c +++ b/base/applications/sndvol32/sndvol32.c @@ -971,6 +971,7 @@ MainWindowProc(HWND hwnd, case IDM_EXIT: { PostQuitMessage(0); + UnregisterHotKey(hwnd, HOTKEY_CTRL_S); break; } @@ -1248,6 +1249,8 @@ MainWindowProc(HWND hwnd, Result = -1; } } + + RegisterHotKey(hwnd, HOTKEY_CTRL_S, MOD_CONTROL, 'S'); break; } @@ -1275,6 +1278,16 @@ MainWindowProc(HWND hwnd, break; } + case WM_HOTKEY: + { + if (wParam == HOTKEY_CTRL_S) + { + Preferences.MixerWindow->Mode = (Preferences.MixerWindow->Mode == NORMAL_MODE ? SMALL_MODE : NORMAL_MODE); + RebuildMixerWindowControls(&Preferences); + } + break; + } + default: { Result = DefWindowProc(hwnd, diff --git a/base/applications/sndvol32/sndvol32.h b/base/applications/sndvol32/sndvol32.h index 970d98238f2..41da0ab310b 100644 --- a/base/applications/sndvol32/sndvol32.h +++ b/base/applications/sndvol32/sndvol32.h @@ -31,6 +31,8 @@ #define ADVANCED_BUTTON_HEIGHT 16 +#define HOTKEY_CTRL_S 1 + typedef enum _WINDOW_MODE { NORMAL_MODE, From a3d9d0e5925ce9c2da660e6d71c6010bd4a029dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Guti=C3=A9rrez?= Date: Sat, 11 May 2024 20:37:34 +0200 Subject: [PATCH 138/182] [SHELL32] Browse for Folder: added keyboard navigation (#6853) Added patches to buttons in folder browsing menu's buttons to fix CORE-19570 --- dll/win32/shell32/lang/bg-BG.rc | 6 +++--- dll/win32/shell32/lang/ca-ES.rc | 6 +++--- dll/win32/shell32/lang/cs-CZ.rc | 6 +++--- dll/win32/shell32/lang/da-DK.rc | 6 +++--- dll/win32/shell32/lang/de-DE.rc | 6 +++--- dll/win32/shell32/lang/el-GR.rc | 6 +++--- dll/win32/shell32/lang/en-GB.rc | 6 +++--- dll/win32/shell32/lang/en-US.rc | 6 +++--- dll/win32/shell32/lang/es-ES.rc | 6 +++--- dll/win32/shell32/lang/et-EE.rc | 6 +++--- dll/win32/shell32/lang/eu-ES.rc | 6 +++--- dll/win32/shell32/lang/fi-FI.rc | 6 +++--- dll/win32/shell32/lang/fr-FR.rc | 6 +++--- dll/win32/shell32/lang/he-IL.rc | 6 +++--- dll/win32/shell32/lang/hi-IN.rc | 6 +++--- dll/win32/shell32/lang/hu-HU.rc | 6 +++--- dll/win32/shell32/lang/id-ID.rc | 6 +++--- dll/win32/shell32/lang/it-IT.rc | 6 +++--- dll/win32/shell32/lang/ja-JP.rc | 6 +++--- dll/win32/shell32/lang/ko-KR.rc | 6 +++--- dll/win32/shell32/lang/nl-NL.rc | 6 +++--- dll/win32/shell32/lang/no-NO.rc | 6 +++--- dll/win32/shell32/lang/pl-PL.rc | 6 +++--- dll/win32/shell32/lang/pt-BR.rc | 6 +++--- dll/win32/shell32/lang/pt-PT.rc | 6 +++--- dll/win32/shell32/lang/ro-RO.rc | 6 +++--- dll/win32/shell32/lang/ru-RU.rc | 6 +++--- dll/win32/shell32/lang/sk-SK.rc | 6 +++--- dll/win32/shell32/lang/sl-SI.rc | 6 +++--- dll/win32/shell32/lang/sq-AL.rc | 6 +++--- dll/win32/shell32/lang/sv-SE.rc | 6 +++--- dll/win32/shell32/lang/tr-TR.rc | 6 +++--- dll/win32/shell32/lang/uk-UA.rc | 6 +++--- dll/win32/shell32/lang/zh-CN.rc | 6 +++--- dll/win32/shell32/lang/zh-HK.rc | 6 +++--- dll/win32/shell32/lang/zh-TW.rc | 6 +++--- 36 files changed, 108 insertions(+), 108 deletions(-) diff --git a/dll/win32/shell32/lang/bg-BG.rc b/dll/win32/shell32/lang/bg-BG.rc index 21abfeaa6ce..fd3fd33dd57 100644 --- a/dll/win32/shell32/lang/bg-BG.rc +++ b/dll/win32/shell32/lang/bg-BG.rc @@ -94,7 +94,7 @@ CAPTION "ТърÑене на папка" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "Добре", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Отказ", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Отказ", 2, 134, 176, 50, 12, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -110,8 +110,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "&Създаване на нова папка", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 10, 174, 92, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "Добре", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Отказ", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "Добре", IDOK, 102, 174, 50, 14 + PUSHBUTTON "Отказ", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/ca-ES.rc b/dll/win32/shell32/lang/ca-ES.rc index 18ab485a84a..69e4645f289 100644 --- a/dll/win32/shell32/lang/ca-ES.rc +++ b/dll/win32/shell32/lang/ca-ES.rc @@ -94,7 +94,7 @@ CAPTION "Browse for Folder" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Cancel", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", 2, 125, 175, 60, 15, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -110,8 +110,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "&Make New Folder", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/cs-CZ.rc b/dll/win32/shell32/lang/cs-CZ.rc index 630226ac3bf..af755d399a6 100644 --- a/dll/win32/shell32/lang/cs-CZ.rc +++ b/dll/win32/shell32/lang/cs-CZ.rc @@ -102,7 +102,7 @@ CAPTION "Procházet..." FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Storno", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Storno", 2, 134, 176, 50, 12, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -118,8 +118,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "&VytvoÅ™it novou složku", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Storno", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14 + PUSHBUTTON "Storno", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/da-DK.rc b/dll/win32/shell32/lang/da-DK.rc index 3dc6c366cff..75fd17a3d3d 100644 --- a/dll/win32/shell32/lang/da-DK.rc +++ b/dll/win32/shell32/lang/da-DK.rc @@ -101,7 +101,7 @@ CAPTION "Søg efter Mappe" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Fortryd", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Fortryd", 2, 134, 176, 50, 12, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -117,8 +117,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "&Make New Folder", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/de-DE.rc b/dll/win32/shell32/lang/de-DE.rc index 1cf78623a5d..af37ff49a0f 100644 --- a/dll/win32/shell32/lang/de-DE.rc +++ b/dll/win32/shell32/lang/de-DE.rc @@ -94,7 +94,7 @@ CAPTION "Verzeichnis auswählen" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Abbrechen", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Abbrechen", 2, 125, 175, 60, 15, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -110,8 +110,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "Neuen &Ordner erstellen", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 85, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Abbrechen", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14 + PUSHBUTTON "Abbrechen", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/el-GR.rc b/dll/win32/shell32/lang/el-GR.rc index b7265258dcd..5c7122d9892 100644 --- a/dll/win32/shell32/lang/el-GR.rc +++ b/dll/win32/shell32/lang/el-GR.rc @@ -94,7 +94,7 @@ CAPTION "Αναζήτηση φακέλου" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "ΆκυÏο", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + PUSHBUTTON "ΆκυÏο", 2, 125, 175, 60, 15, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -110,8 +110,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "&ΔημιουÏγία φακέλου", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "ΆκυÏο", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14 + PUSHBUTTON "ΆκυÏο", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/en-GB.rc b/dll/win32/shell32/lang/en-GB.rc index ea4fb32376c..b7620b0e14c 100644 --- a/dll/win32/shell32/lang/en-GB.rc +++ b/dll/win32/shell32/lang/en-GB.rc @@ -94,7 +94,7 @@ CAPTION "Browse for Folder" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Cancel", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", 2, 125, 175, 60, 15, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -110,8 +110,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "&Make New Folder", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/en-US.rc b/dll/win32/shell32/lang/en-US.rc index 32be696ffb2..14258d18f31 100644 --- a/dll/win32/shell32/lang/en-US.rc +++ b/dll/win32/shell32/lang/en-US.rc @@ -94,7 +94,7 @@ CAPTION "Browse for Folder" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Cancel", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", 2, 125, 175, 60, 15, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -110,8 +110,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "&Make New Folder", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/es-ES.rc b/dll/win32/shell32/lang/es-ES.rc index b79b3c7dba6..9e8fd38e2b9 100644 --- a/dll/win32/shell32/lang/es-ES.rc +++ b/dll/win32/shell32/lang/es-ES.rc @@ -103,7 +103,7 @@ CAPTION "Explorar carpeta" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "Aceptar", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Cancelar", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancelar", 2, 134, 176, 50, 12, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -119,8 +119,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "&Crear nueva carpeta", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "Aceptar", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Cancelar", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "Aceptar", IDOK, 102, 174, 50, 14 + PUSHBUTTON "Cancelar", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/et-EE.rc b/dll/win32/shell32/lang/et-EE.rc index 556964d3abf..5fb4e4534a6 100644 --- a/dll/win32/shell32/lang/et-EE.rc +++ b/dll/win32/shell32/lang/et-EE.rc @@ -101,7 +101,7 @@ CAPTION "Vali kaust" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Loobu", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Loobu", 2, 125, 175, 60, 15, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -117,8 +117,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "&Loo uus kaust", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Loobu", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14 + PUSHBUTTON "Loobu", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/eu-ES.rc b/dll/win32/shell32/lang/eu-ES.rc index 0d33f8c8a3f..a21558af68a 100644 --- a/dll/win32/shell32/lang/eu-ES.rc +++ b/dll/win32/shell32/lang/eu-ES.rc @@ -101,7 +101,7 @@ CAPTION "Karpeta esploratu" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "Ados", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Utzi", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Utzi", 2, 134, 176, 50, 12, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -117,8 +117,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "Sortu karpeta &berria", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "Ados", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Utzi", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "Ados", IDOK, 102, 174, 50, 14 + PUSHBUTTON "Utzi", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/fi-FI.rc b/dll/win32/shell32/lang/fi-FI.rc index 0fd3cccf10e..acb126b6cdf 100644 --- a/dll/win32/shell32/lang/fi-FI.rc +++ b/dll/win32/shell32/lang/fi-FI.rc @@ -94,7 +94,7 @@ CAPTION "Valitse Kansio" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Peruuta", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Peruuta", 2, 134, 176, 50, 12, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -110,8 +110,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "&Make New Folder", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/fr-FR.rc b/dll/win32/shell32/lang/fr-FR.rc index 6d82102bb49..37269658ffb 100644 --- a/dll/win32/shell32/lang/fr-FR.rc +++ b/dll/win32/shell32/lang/fr-FR.rc @@ -94,7 +94,7 @@ CAPTION "Parcourir" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Annuler", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Annuler", 2, 134, 176, 50, 12, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -110,8 +110,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "Créer un nouveau dossier", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 8, 174, 90, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Annuler", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14 + PUSHBUTTON "Annuler", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/he-IL.rc b/dll/win32/shell32/lang/he-IL.rc index 904c958e28f..88abf0f543f 100644 --- a/dll/win32/shell32/lang/he-IL.rc +++ b/dll/win32/shell32/lang/he-IL.rc @@ -101,7 +101,7 @@ CAPTION "בחירת תיקיה" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "×ישור", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "ביטול", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + PUSHBUTTON "ביטול", 2, 125, 175, 60, 15, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -117,8 +117,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "צור תיקיה חדשה", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "×ישור", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "ביטול", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "×ישור", IDOK, 102, 174, 50, 14 + PUSHBUTTON "ביטול", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/hi-IN.rc b/dll/win32/shell32/lang/hi-IN.rc index 1971dc7760c..71e55d65141 100644 --- a/dll/win32/shell32/lang/hi-IN.rc +++ b/dll/win32/shell32/lang/hi-IN.rc @@ -101,7 +101,7 @@ CAPTION "फोलà¥à¤¡à¤° खोंजे" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "ओके", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "रदà¥à¤¦ करें", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + PUSHBUTTON "रदà¥à¤¦ करें", 2, 125, 175, 60, 15, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -117,8 +117,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "नया फ़ोलà¥à¤¡à¤° &बनाओ", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "ओके", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "रदà¥à¤¦ करें", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "ओके", IDOK, 102, 174, 50, 14 + PUSHBUTTON "रदà¥à¤¦ करें", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/hu-HU.rc b/dll/win32/shell32/lang/hu-HU.rc index 95dc1b0cf43..d0ae9fca500 100644 --- a/dll/win32/shell32/lang/hu-HU.rc +++ b/dll/win32/shell32/lang/hu-HU.rc @@ -94,7 +94,7 @@ CAPTION "Mappák böngészése" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Mégse", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Mégse", 2, 134, 176, 50, 12, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -110,8 +110,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "&Új mappa létrehozása", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Mégse", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14 + PUSHBUTTON "Mégse", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/id-ID.rc b/dll/win32/shell32/lang/id-ID.rc index 6757ca72442..35030e029c9 100644 --- a/dll/win32/shell32/lang/id-ID.rc +++ b/dll/win32/shell32/lang/id-ID.rc @@ -94,7 +94,7 @@ CAPTION "Jelajah Folder" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Batal", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Batal", 2, 125, 175, 60, 15, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -110,8 +110,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "&Buat Folder Baru", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Batal", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14 + PUSHBUTTON "Batal", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/it-IT.rc b/dll/win32/shell32/lang/it-IT.rc index f47ba7f6bc0..719f01a5442 100644 --- a/dll/win32/shell32/lang/it-IT.rc +++ b/dll/win32/shell32/lang/it-IT.rc @@ -94,7 +94,7 @@ CAPTION "Sfoglia Cartella" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Annulla", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Annulla", 2, 134, 176, 50, 12, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -110,8 +110,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "&Crea una nuova cartella", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Annulla", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14 + PUSHBUTTON "Annulla", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/ja-JP.rc b/dll/win32/shell32/lang/ja-JP.rc index a04612aefc1..e13c93c9595 100644 --- a/dll/win32/shell32/lang/ja-JP.rc +++ b/dll/win32/shell32/lang/ja-JP.rc @@ -94,7 +94,7 @@ CAPTION "フォルダã®å‚ç…§" FONT 9, "MS UI Gothic" BEGIN DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "キャンセル", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + PUSHBUTTON "キャンセル", 2, 134, 176, 50, 12, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -110,8 +110,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "æ–°ã—ã„フォルダã®ä½œæˆ(&M)", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 188, 85, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "キャンセル", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14 + PUSHBUTTON "キャンセル", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/ko-KR.rc b/dll/win32/shell32/lang/ko-KR.rc index 96ade548b19..5995b2e9c19 100644 --- a/dll/win32/shell32/lang/ko-KR.rc +++ b/dll/win32/shell32/lang/ko-KR.rc @@ -101,7 +101,7 @@ CAPTION "í´ë” 찾아보기" FONT 9, "굴림" BEGIN DEFPUSHBUTTON "확ì¸", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "취소", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + PUSHBUTTON "취소", 2, 125, 175, 60, 15, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -117,8 +117,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "새 í´ë” 만들기(&M)", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "확ì¸", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "취소", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "확ì¸", IDOK, 102, 174, 50, 14 + PUSHBUTTON "취소", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/nl-NL.rc b/dll/win32/shell32/lang/nl-NL.rc index 44b1354d334..b79ce623f27 100644 --- a/dll/win32/shell32/lang/nl-NL.rc +++ b/dll/win32/shell32/lang/nl-NL.rc @@ -94,7 +94,7 @@ CAPTION "Browse for Folder" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Cancel", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", 2, 125, 175, 60, 15, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -110,8 +110,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "&Make New Folder", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/no-NO.rc b/dll/win32/shell32/lang/no-NO.rc index ee786bf8d27..c12b248f621 100644 --- a/dll/win32/shell32/lang/no-NO.rc +++ b/dll/win32/shell32/lang/no-NO.rc @@ -94,7 +94,7 @@ CAPTION "Bla etter mappe" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Avbryt", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Avbryt", 2, 134, 176, 50, 12, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -110,8 +110,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "&Lag en ny mappe", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Avbryt", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/pl-PL.rc b/dll/win32/shell32/lang/pl-PL.rc index 473099df450..8a31eda58dd 100644 --- a/dll/win32/shell32/lang/pl-PL.rc +++ b/dll/win32/shell32/lang/pl-PL.rc @@ -103,7 +103,7 @@ CAPTION "Wybierz folder" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", 1, 80, 170, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Anuluj", 2, 134, 170, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Anuluj", 2, 134, 170, 50, 14, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -119,8 +119,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "&Utwórz katalog", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Anuluj", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14 + PUSHBUTTON "Anuluj", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/pt-BR.rc b/dll/win32/shell32/lang/pt-BR.rc index 0fc96da8faf..2ac28c0b3b0 100644 --- a/dll/win32/shell32/lang/pt-BR.rc +++ b/dll/win32/shell32/lang/pt-BR.rc @@ -94,7 +94,7 @@ CAPTION "Procurar pasta" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Cancelar", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancelar", 2, 134, 176, 50, 12, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -110,8 +110,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "&Criar Nova Pasta", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Cancelar", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14 + PUSHBUTTON "Cancelar", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/pt-PT.rc b/dll/win32/shell32/lang/pt-PT.rc index 3c9821ed9c5..1a203bd665e 100644 --- a/dll/win32/shell32/lang/pt-PT.rc +++ b/dll/win32/shell32/lang/pt-PT.rc @@ -94,7 +94,7 @@ CAPTION "Procurar pasta" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Cancelar", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancelar", 2, 125, 175, 60, 15, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -110,8 +110,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "&Criar nova pasta", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Cancelar", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14 + PUSHBUTTON "Cancelar", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/ro-RO.rc b/dll/win32/shell32/lang/ro-RO.rc index 3af6d165735..e28baae0f67 100644 --- a/dll/win32/shell32/lang/ro-RO.rc +++ b/dll/win32/shell32/lang/ro-RO.rc @@ -102,7 +102,7 @@ CAPTION "Specificare folder" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Revocare", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Revocare", 2, 125, 175, 60, 15, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -118,8 +118,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "&Creare folder nou", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Revocare", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14 + PUSHBUTTON "Revocare", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/ru-RU.rc b/dll/win32/shell32/lang/ru-RU.rc index 80db86a6e9b..cb0e3c62d4a 100644 --- a/dll/win32/shell32/lang/ru-RU.rc +++ b/dll/win32/shell32/lang/ru-RU.rc @@ -103,7 +103,7 @@ CAPTION "Обзор" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Отмена", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Отмена", 2, 125, 175, 60, 15, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_EDITLABELS | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -119,8 +119,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "&Создать папку", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Отмена", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14 + PUSHBUTTON "Отмена", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/sk-SK.rc b/dll/win32/shell32/lang/sk-SK.rc index 25e5b4a39fe..7d7050d14a5 100644 --- a/dll/win32/shell32/lang/sk-SK.rc +++ b/dll/win32/shell32/lang/sk-SK.rc @@ -94,7 +94,7 @@ CAPTION "Browse for Folder" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "ZruÅ¡iÅ¥", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + PUSHBUTTON "ZruÅ¡iÅ¥", 2, 125, 175, 60, 15, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_EDITLABELS | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -110,8 +110,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "&VytvoriÅ¥ nový prieÄinok", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "ZruÅ¡iÅ¥", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14 + PUSHBUTTON "ZruÅ¡iÅ¥", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/sl-SI.rc b/dll/win32/shell32/lang/sl-SI.rc index fad9fb26ff8..ecc4150de92 100644 --- a/dll/win32/shell32/lang/sl-SI.rc +++ b/dll/win32/shell32/lang/sl-SI.rc @@ -94,7 +94,7 @@ CAPTION "Browse for Folder" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Cancel", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", 2, 125, 175, 60, 15, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_EDITLABELS | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -110,8 +110,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "&Make New Folder", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/sq-AL.rc b/dll/win32/shell32/lang/sq-AL.rc index 27a4887b3f0..30f2afa860a 100644 --- a/dll/win32/shell32/lang/sq-AL.rc +++ b/dll/win32/shell32/lang/sq-AL.rc @@ -101,7 +101,7 @@ CAPTION "Shfleto për Dosje" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Anulo", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Anulo", 2, 125, 175, 60, 15, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_EDITLABELS | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -117,8 +117,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "&Bëj Dosje T're", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Anulo", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14 + PUSHBUTTON "Anulo", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/sv-SE.rc b/dll/win32/shell32/lang/sv-SE.rc index 373ce7199ea..0ef595afa00 100644 --- a/dll/win32/shell32/lang/sv-SE.rc +++ b/dll/win32/shell32/lang/sv-SE.rc @@ -94,7 +94,7 @@ CAPTION "Bläddra efter mapp" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Avbryt", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Avbryt", 2, 125, 175, 60, 15, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_EDITLABELS | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -110,8 +110,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "&Skapa ny mapp", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Avbryt", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/tr-TR.rc b/dll/win32/shell32/lang/tr-TR.rc index 3b35c869f49..f7d02c283f5 100644 --- a/dll/win32/shell32/lang/tr-TR.rc +++ b/dll/win32/shell32/lang/tr-TR.rc @@ -103,7 +103,7 @@ CAPTION "Dizin İçin Göz At" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "Tamam", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Ä°ptal", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Ä°ptal", 2, 134, 176, 50, 12, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_EDITLABELS | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -119,8 +119,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "&Yeni Dizin OluÅŸtur", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "Tamam", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Ä°ptal", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "Tamam", IDOK, 102, 174, 50, 14 + PUSHBUTTON "Ä°ptal", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/uk-UA.rc b/dll/win32/shell32/lang/uk-UA.rc index e8787c0733e..b4fc7e69f8b 100644 --- a/dll/win32/shell32/lang/uk-UA.rc +++ b/dll/win32/shell32/lang/uk-UA.rc @@ -94,7 +94,7 @@ CAPTION "ОглÑд папок" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "СкаÑувати", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + PUSHBUTTON "СкаÑувати", 2, 134, 176, 50, 12, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_EDITLABELS | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -110,8 +110,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "Створити &папку", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "СкаÑувати", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14 + PUSHBUTTON "СкаÑувати", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/zh-CN.rc b/dll/win32/shell32/lang/zh-CN.rc index 7eb4dc94f00..4d0602552fe 100644 --- a/dll/win32/shell32/lang/zh-CN.rc +++ b/dll/win32/shell32/lang/zh-CN.rc @@ -104,7 +104,7 @@ CAPTION "æµè§ˆæ–‡ä»¶å¤¹" FONT 9, "宋体" BEGIN DEFPUSHBUTTON "确定", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "å–消", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + PUSHBUTTON "å–消", 2, 125, 175, 60, 15, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_EDITLABELS | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -120,8 +120,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "创建新文件夹(&M)", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "确定", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "å–消", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "确定", IDOK, 102, 174, 50, 14 + PUSHBUTTON "å–消", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/zh-HK.rc b/dll/win32/shell32/lang/zh-HK.rc index 56aff07ea6d..e4a1729bdc2 100644 --- a/dll/win32/shell32/lang/zh-HK.rc +++ b/dll/win32/shell32/lang/zh-HK.rc @@ -102,7 +102,7 @@ CAPTION "ç€è¦½è³‡æ–™å¤¾" FONT 9, "新細明體" BEGIN DEFPUSHBUTTON "確定", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "å–消", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + PUSHBUTTON "å–消", 2, 125, 175, 60, 15, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_EDITLABELS | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -118,8 +118,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "建立新資料夾(&M)", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "確定", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "å–消", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "確定", IDOK, 102, 174, 50, 14 + PUSHBUTTON "å–消", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 diff --git a/dll/win32/shell32/lang/zh-TW.rc b/dll/win32/shell32/lang/zh-TW.rc index cd770a85455..c619f8bfe79 100644 --- a/dll/win32/shell32/lang/zh-TW.rc +++ b/dll/win32/shell32/lang/zh-TW.rc @@ -103,7 +103,7 @@ CAPTION "ç€è¦½è³‡æ–™å¤¾" FONT 9, "新細明體" BEGIN DEFPUSHBUTTON "確定", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "å–消", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + PUSHBUTTON "å–消", 2, 125, 175, 60, 15, WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_EDITLABELS | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -119,8 +119,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "建立新資料夾(&M)", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "確定", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "å–消", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "確定", IDOK, 102, 174, 50, 14 + PUSHBUTTON "å–消", IDCANCEL, 156, 174, 50, 14 END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 From 5db69da46b09b98cf382864cfc4f9967d8d6dbad Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Sun, 12 May 2024 00:07:54 +0200 Subject: [PATCH 139/182] [RAPPS] DelRegEmpty instruction should be best-effort, don't propagate any errors (#6860) DelRegEmpty exists to clean up "company" registry parent keys. If another application is writing to the key at the same time as we are gently trying to remove it, our uninstaller should ignore any errors. --- base/applications/rapps/geninst.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/applications/rapps/geninst.cpp b/base/applications/rapps/geninst.cpp index d304eb24eb7..d7cc3a678e0 100644 --- a/base/applications/rapps/geninst.cpp +++ b/base/applications/rapps/geninst.cpp @@ -752,7 +752,7 @@ UninstallThread(LPVOID Parameter) if (op == UNOP_REGKEY) err = key.RecurseDeleteKey(tmp); else if (RegKeyHasValues(hKey, str, wowsam) == S_FALSE) - err = key.DeleteSubKey(tmp); + key.DeleteSubKey(tmp); // DelRegEmpty ignores errors } switch(err) { From 044f18195031bf45e3ec7e17ec32041cae8f331d Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Mon, 13 May 2024 10:27:41 +0900 Subject: [PATCH 140/182] [SHELL32] ShellExecute: Re-work Part 1 (#6871) The goal is a correct implementation of shell32!ShellExecute. JIRA issue: CORE-17482 - Add SHELL_InRunDllProcess helper function. - Add structure size check to ShellExecuteExA function. - Add code to ShellExecuteExW function. - Add "MaximizeApps" registry value check. --- dll/win32/shell32/shlexec.cpp | 95 +++++++++++++++++++++++++++++++++-- 1 file changed, 90 insertions(+), 5 deletions(-) diff --git a/dll/win32/shell32/shlexec.cpp b/dll/win32/shell32/shlexec.cpp index d71ff394849..492d1968208 100644 --- a/dll/win32/shell32/shlexec.cpp +++ b/dll/win32/shell32/shlexec.cpp @@ -3,7 +3,7 @@ * * Copyright 1998 Marcus Meissner * Copyright 2002 Eric Pouech - * Copyright 2018-2019 Katayama Hirofumi MZ + * Copyright 2018-2024 Katayama Hirofumi MZ * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -32,6 +32,20 @@ EXTERN_C BOOL PathIsExeW(LPCWSTR lpszPath); typedef UINT_PTR (*SHELL_ExecuteW32)(const WCHAR *lpCmd, WCHAR *env, BOOL shWait, const SHELLEXECUTEINFOW *sei, LPSHELLEXECUTEINFOW sei_out); +// Is the current process a rundll32.exe? +static BOOL SHELL_InRunDllProcess(VOID) +{ + WCHAR szModule[MAX_PATH]; + static INT s_bInDllProcess = -1; + + if (s_bInDllProcess != -1) + return s_bInDllProcess; + + s_bInDllProcess = GetModuleFileNameW(NULL, szModule, _countof(szModule)) && + (StrStrIW(PathFindFileNameW(szModule), L"rundll") != NULL); + return s_bInDllProcess; +} + static void ParseNoTildeEffect(PWSTR &res, LPCWSTR &args, DWORD &len, DWORD &used, int argNum) { bool firstCharQuote = false; @@ -2331,9 +2345,24 @@ HINSTANCE WINAPI ShellExecuteA(HWND hWnd, LPCSTR lpVerb, LPCSTR lpFile, return sei.hInstApp; } +static DWORD +ShellExecute_Normal(_Inout_ LPSHELLEXECUTEINFOW sei) +{ + // FIXME + return SHELL_execute(sei, SHELL_ExecuteW) ? ERROR_SUCCESS : ERROR_FILE_NOT_FOUND; +} + +static VOID +ShellExecute_ShowError( + _In_ const SHELLEXECUTEINFOW *ExecInfo, + _In_opt_ LPCWSTR pszCaption, + _In_ DWORD dwError) +{ + // FIXME: Show error message +} + /************************************************************************* * ShellExecuteExA [SHELL32.292] - * */ BOOL WINAPI @@ -2346,8 +2375,17 @@ ShellExecuteExA(LPSHELLEXECUTEINFOA sei) TRACE("%p\n", sei); + if (sei->cbSize != sizeof(SHELLEXECUTEINFOA)) + { + sei->hInstApp = (HINSTANCE)ERROR_ACCESS_DENIED; + SetLastError(ERROR_ACCESS_DENIED); + return FALSE; + } + memcpy(&seiW, sei, sizeof(SHELLEXECUTEINFOW)); + seiW.cbSize = sizeof(SHELLEXECUTEINFOW); + if (sei->lpVerb) seiW.lpVerb = __SHCloneStrAtoW(&wVerb, sei->lpVerb); @@ -2365,7 +2403,7 @@ ShellExecuteExA(LPSHELLEXECUTEINFOA sei) else seiW.lpClass = NULL; - ret = SHELL_execute(&seiW, SHELL_ExecuteW); + ret = ShellExecuteExW(&seiW); sei->hInstApp = seiW.hInstApp; @@ -2383,14 +2421,61 @@ ShellExecuteExA(LPSHELLEXECUTEINFOA sei) /************************************************************************* * ShellExecuteExW [SHELL32.293] - * */ BOOL WINAPI DECLSPEC_HOTPATCH ShellExecuteExW(LPSHELLEXECUTEINFOW sei) { - return SHELL_execute(sei, SHELL_ExecuteW); + HRESULT hrCoInit; + DWORD dwError; + ULONG fOldMask; + + hrCoInit = SHCoInitializeAnyApartment(); + + if (sei->cbSize != sizeof(SHELLEXECUTEINFOW)) + { + dwError = ERROR_ACCESS_DENIED; + sei->hInstApp = (HINSTANCE)ERROR_ACCESS_DENIED; + } + else + { + if (SHRegGetBoolUSValueW(L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer", + L"MaximizeApps", FALSE, FALSE)) + { + switch (sei->nShow) + { + case SW_SHOW: + case SW_SHOWDEFAULT: + case SW_SHOWNORMAL: + case SW_RESTORE: + sei->nShow = SW_SHOWMAXIMIZED; + break; + default: + break; + } + } + + fOldMask = sei->fMask; + + if (!(fOldMask & SEE_MASK_NOASYNC) && SHELL_InRunDllProcess()) + sei->fMask |= SEE_MASK_WAITFORINPUTIDLE | SEE_MASK_NOASYNC; + + dwError = ShellExecute_Normal(sei); + + if (dwError && dwError != ERROR_DLL_NOT_FOUND && dwError != ERROR_CANCELLED) + ShellExecute_ShowError(sei, NULL, dwError); + + sei->fMask = fOldMask; + } + + if (SUCCEEDED(hrCoInit)) + CoUninitialize(); + + if (dwError) + SetLastError(dwError); + + return dwError == ERROR_SUCCESS; } /************************************************************************* From 1a162375f9946088d503d586aff73e40ff2c143a Mon Sep 17 00:00:00 2001 From: Doug Lyons Date: Mon, 13 May 2024 15:01:25 -0500 Subject: [PATCH 141/182] [W32TIME] Change clock update interval to 4 hours (#5940) * Create W32TIME_POLL_INTERVAL. Set it to 4 hours and use it to set SpecialPollInterval. --- base/services/w32time/register.c | 2 +- base/services/w32time/w32time.c | 2 +- base/services/w32time/w32time.h | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/base/services/w32time/register.c b/base/services/w32time/register.c index 205a288bb04..f47e2a01e23 100644 --- a/base/services/w32time/register.c +++ b/base/services/w32time/register.c @@ -236,7 +236,7 @@ SetNtpClientValues(VOID) goto done; } - dwValue = 0x00093a80; + dwValue = W32TIME_POLL_INTERVAL; dwError = RegSetValueExW(hKey, L"SpecialPollInterval", 0, diff --git a/base/services/w32time/w32time.c b/base/services/w32time/w32time.c index 0d5508a7b2c..f6a38c871c9 100644 --- a/base/services/w32time/w32time.c +++ b/base/services/w32time/w32time.c @@ -153,7 +153,7 @@ GetIntervalSetting(VOID) } if (lRet != ERROR_SUCCESS || dwData < 120) - return 9 * 60 * 60; // 9 hours, because Windows uses 9 hrs, 6 mins and 8 seconds by default. + return W32TIME_POLL_INTERVAL; else return dwData; } diff --git a/base/services/w32time/w32time.h b/base/services/w32time/w32time.h index 0bd729e6d6f..dcbb10a6f68 100644 --- a/base/services/w32time/w32time.h +++ b/base/services/w32time/w32time.h @@ -16,6 +16,7 @@ #define MAX_VALUE_NAME 16383 #define NTPPORT 123 +#define W32TIME_POLL_INTERVAL (4 * 60 * 60) // 4 hours. /* ntpclient.c */ From a0776922f41e9be1b136d2732af4a5581b08448a Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Tue, 14 May 2024 13:21:30 +0200 Subject: [PATCH 142/182] [SHELL32] Coalesce DefView item changed statusbar updates (#6862) Updating the statusbar on every LVN_ITEMCHANGED causes a massive delay when the number of changed items is large, very noticeable on Ctrl+A. CORE-18663 --- dll/win32/shell32/CDefView.cpp | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/dll/win32/shell32/CDefView.cpp b/dll/win32/shell32/CDefView.cpp index 089e026a293..50af36089db 100644 --- a/dll/win32/shell32/CDefView.cpp +++ b/dll/win32/shell32/CDefView.cpp @@ -48,7 +48,8 @@ typedef struct INT nLastHeaderID; } LISTVIEW_SORT_INFO, *LPLISTVIEW_SORT_INFO; -#define SHV_CHANGE_NOTIFY WM_USER + 0x1111 +#define SHV_CHANGE_NOTIFY (WM_USER + 0x1111) +#define SHV_UPDATESTATUSBAR (WM_USER + 0x1112) // For the context menu of the def view, the id of the items are based on 1 because we need // to call TrackPopupMenu and let it use the 0 value as an indication that the menu was canceled @@ -160,6 +161,7 @@ class CDefView : BOOL m_isEditing; BOOL m_isParentFolderSpecial; + bool m_ScheduledStatusbarUpdate; CLSID m_Category; BOOL m_Destroyed; @@ -339,6 +341,7 @@ class CDefView : LRESULT OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); LRESULT OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); LRESULT OnChangeNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); + LRESULT OnUpdateStatusbar(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); LRESULT OnCustomItem(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); LRESULT OnSettingChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); LRESULT OnInitMenuPopup(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); @@ -386,6 +389,7 @@ class CDefView : MESSAGE_HANDLER(WM_NOTIFY, OnNotify) MESSAGE_HANDLER(WM_COMMAND, OnCommand) MESSAGE_HANDLER(SHV_CHANGE_NOTIFY, OnChangeNotify) + MESSAGE_HANDLER(SHV_UPDATESTATUSBAR, OnUpdateStatusbar) MESSAGE_HANDLER(WM_CONTEXTMENU, OnContextMenu) MESSAGE_HANDLER(WM_DRAWITEM, OnCustomItem) MESSAGE_HANDLER(WM_MEASUREITEM, OnCustomItem) @@ -451,6 +455,7 @@ CDefView::CDefView() : m_cScrollDelay(0), m_isEditing(FALSE), m_isParentFolderSpecial(FALSE), + m_ScheduledStatusbarUpdate(false), m_Destroyed(FALSE) { ZeroMemory(&m_FolderSettings, sizeof(m_FolderSettings)); @@ -587,7 +592,7 @@ void CDefView::UpdateStatusbar() // Don't bother with the extra processing if we only have one StatusBar part if (!m_isParentFolderSpecial) { - DWORD uTotalFileSize = 0; + UINT64 uTotalFileSize = 0; WORD uFileFlags = LVNI_ALL; LPARAM pIcon = NULL; INT nItem = -1; @@ -636,6 +641,13 @@ void CDefView::UpdateStatusbar() } } +LRESULT CDefView::OnUpdateStatusbar(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled) +{ + m_ScheduledStatusbarUpdate = false; + UpdateStatusbar(); + return 0; +} + // ##### helperfunctions for initializing the view ##### @@ -2114,7 +2126,11 @@ LRESULT CDefView::OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandl case LVN_ITEMCHANGED: TRACE("-- LVN_ITEMCHANGED %p\n", this); OnStateChange(CDBOSC_SELCHANGE); // browser will get the IDataObject - UpdateStatusbar(); + if (!m_ScheduledStatusbarUpdate) + { + m_ScheduledStatusbarUpdate = true; + PostMessage(SHV_UPDATESTATUSBAR, 0, 0); + } _DoFolderViewCB(SFVM_SELECTIONCHANGED, NULL/* FIXME */, NULL/* FIXME */); break; case LVN_BEGINDRAG: From 3e97f76a3378680345d8ab83ec5e6e429c49f4b9 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Tue, 14 May 2024 23:00:54 +0900 Subject: [PATCH 143/182] [SHELL32] ShellExecute: Re-work Part 2 (#6882) Follow-up to #6871. Reduce indentation level. JIRA issue: CORE-17482 In ShellExecuteExW, early check the structure size and return on failure before SHCoInitializeAnyApartment call. --- dll/win32/shell32/shlexec.cpp | 51 +++++++++++++++++------------------ 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/dll/win32/shell32/shlexec.cpp b/dll/win32/shell32/shlexec.cpp index 492d1968208..23d0ab52df8 100644 --- a/dll/win32/shell32/shlexec.cpp +++ b/dll/win32/shell32/shlexec.cpp @@ -2431,43 +2431,42 @@ ShellExecuteExW(LPSHELLEXECUTEINFOW sei) DWORD dwError; ULONG fOldMask; - hrCoInit = SHCoInitializeAnyApartment(); - if (sei->cbSize != sizeof(SHELLEXECUTEINFOW)) { - dwError = ERROR_ACCESS_DENIED; - sei->hInstApp = (HINSTANCE)ERROR_ACCESS_DENIED; + sei->hInstApp = (HINSTANCE)UlongToHandle(SE_ERR_ACCESSDENIED); + SetLastError(ERROR_ACCESS_DENIED); + return FALSE; } - else + + hrCoInit = SHCoInitializeAnyApartment(); + + if (SHRegGetBoolUSValueW(L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer", + L"MaximizeApps", FALSE, FALSE)) { - if (SHRegGetBoolUSValueW(L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer", - L"MaximizeApps", FALSE, FALSE)) + switch (sei->nShow) { - switch (sei->nShow) - { - case SW_SHOW: - case SW_SHOWDEFAULT: - case SW_SHOWNORMAL: - case SW_RESTORE: - sei->nShow = SW_SHOWMAXIMIZED; - break; - default: - break; - } + case SW_SHOW: + case SW_SHOWDEFAULT: + case SW_SHOWNORMAL: + case SW_RESTORE: + sei->nShow = SW_SHOWMAXIMIZED; + break; + default: + break; } + } - fOldMask = sei->fMask; + fOldMask = sei->fMask; - if (!(fOldMask & SEE_MASK_NOASYNC) && SHELL_InRunDllProcess()) - sei->fMask |= SEE_MASK_WAITFORINPUTIDLE | SEE_MASK_NOASYNC; + if (!(fOldMask & SEE_MASK_NOASYNC) && SHELL_InRunDllProcess()) + sei->fMask |= SEE_MASK_WAITFORINPUTIDLE | SEE_MASK_NOASYNC; - dwError = ShellExecute_Normal(sei); + dwError = ShellExecute_Normal(sei); - if (dwError && dwError != ERROR_DLL_NOT_FOUND && dwError != ERROR_CANCELLED) - ShellExecute_ShowError(sei, NULL, dwError); + if (dwError && dwError != ERROR_DLL_NOT_FOUND && dwError != ERROR_CANCELLED) + ShellExecute_ShowError(sei, NULL, dwError); - sei->fMask = fOldMask; - } + sei->fMask = fOldMask; if (SUCCEEDED(hrCoInit)) CoUninitialize(); From a64cccd711662dcfbfc826463afcf6c00477ba07 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Wed, 15 May 2024 01:22:17 +0900 Subject: [PATCH 144/182] [NOTEPAD] Use FILE_SHARE_READ and OPEN_ALWAYS for writing (#6880) Fix access denial on writing file "C:\freeldr.ini". JIRA issue: CORE-19575 - Add FILE_SHARE_READ flag and delete FILE_SHARE_WRITE flag in CreateFileW call. - Use OPEN_ALWAYS instead of CREATE_ALWAYS, and then explicitly use SetEndOfFile function. --- base/applications/notepad/dialog.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/base/applications/notepad/dialog.c b/base/applications/notepad/dialog.c index 82c6c5c57bc..2aa747fa4de 100644 --- a/base/applications/notepad/dialog.c +++ b/base/applications/notepad/dialog.c @@ -249,8 +249,10 @@ static BOOL DoSaveFile(VOID) WaitCursor(TRUE); - hFile = CreateFileW(Globals.szFileName, GENERIC_WRITE, FILE_SHARE_WRITE, - NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + /* Use OPEN_ALWAYS instead of CREATE_ALWAYS in order to succeed + * even if the file has HIDDEN or SYSTEM attributes */ + hFile = CreateFileW(Globals.szFileName, GENERIC_WRITE, FILE_SHARE_READ, + NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { ShowLastError(); @@ -281,6 +283,8 @@ static BOOL DoSaveFile(VOID) } } + /* Truncate the file and close it */ + SetEndOfFile(hFile); CloseHandle(hFile); if (bRet) From 2b0d1faaa95da9c003efb809f488290f3e6313cd Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Wed, 15 May 2024 01:23:30 +0900 Subject: [PATCH 145/182] [WORDPAD] Use FILE_SHARE_READ and OPEN_ALWAYS for writing (#6883) Follow-up to #6880. Fix access denial on writing file "C:\freeldr.ini". JIRA issue: CORE-19575 - Add FILE_SHARE_READ flag in CreateFileW call. - Use OPEN_ALWAYS instead of CREATE_ALWAYS, and then explicitly use SetEndOfFile function. --- base/applications/wordpad/wordpad.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/base/applications/wordpad/wordpad.c b/base/applications/wordpad/wordpad.c index 1c0b820308a..85a9be92223 100644 --- a/base/applications/wordpad/wordpad.c +++ b/base/applications/wordpad/wordpad.c @@ -843,8 +843,15 @@ static BOOL DoSaveFile(LPCWSTR wszSaveFileName, WPARAM format) EDITSTREAM stream; LRESULT ret; +#ifdef __REACTOS__ + /* Use OPEN_ALWAYS instead of CREATE_ALWAYS in order to succeed + * even if the file has HIDDEN or SYSTEM attributes */ + hFile = CreateFileW(wszSaveFileName, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, + FILE_ATTRIBUTE_NORMAL, NULL); +#else hFile = CreateFileW(wszSaveFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); +#endif if(hFile == INVALID_HANDLE_VALUE) { @@ -870,6 +877,10 @@ static BOOL DoSaveFile(LPCWSTR wszSaveFileName, WPARAM format) ret = SendMessageW(hEditorWnd, EM_STREAMOUT, format, (LPARAM)&stream); +#ifdef __REACTOS__ + /* Truncate the file and close it */ + SetEndOfFile(hFile); +#endif CloseHandle(hFile); SetFocus(hEditorWnd); From 96acfcb3dc42d80bcbe5d25bdd387a7b75a9f1b3 Mon Sep 17 00:00:00 2001 From: Oleg Dubinskiy Date: Tue, 14 May 2024 19:08:37 +0200 Subject: [PATCH 146/182] [NTGDI] AlphaBlend/TransparentBlt: check whether the source DC is an INFO DC too (#6885) Improve checks in AlphaBlend and TransparentBlt functions: check whether DCSrc is of DCTYPE_INFO also, to fail in that case properly too. Spotted by PVS-Studio analysis. Reference: https://pvs-studio.com/en/blog/posts/cpp/1122/. --- win32ss/gdi/ntgdi/bitblt.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/win32ss/gdi/ntgdi/bitblt.c b/win32ss/gdi/ntgdi/bitblt.c index ab45fe82019..c60be249739 100644 --- a/win32ss/gdi/ntgdi/bitblt.c +++ b/win32ss/gdi/ntgdi/bitblt.c @@ -61,7 +61,7 @@ NtGdiAlphaBlend( DCDest = apObj[0]; DCSrc = apObj[1]; - if (DCDest->dctype == DCTYPE_INFO || DCDest->dctype == DCTYPE_INFO) + if (DCSrc->dctype == DCTYPE_INFO || DCDest->dctype == DCTYPE_INFO) { GDIOBJ_vUnlockObject(&DCSrc->BaseObject); GDIOBJ_vUnlockObject(&DCDest->BaseObject); @@ -239,7 +239,7 @@ NtGdiTransparentBlt( DCDest = apObj[0]; DCSrc = apObj[1]; - if (DCDest->dctype == DCTYPE_INFO || DCDest->dctype == DCTYPE_INFO) + if (DCSrc->dctype == DCTYPE_INFO || DCDest->dctype == DCTYPE_INFO) { GDIOBJ_vUnlockObject(&DCSrc->BaseObject); GDIOBJ_vUnlockObject(&DCDest->BaseObject); From ac0bcf4a90fbc0101427c93fa941eb41fec1763f Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Wed, 15 May 2024 07:42:43 +0900 Subject: [PATCH 147/182] [SHLWAPI][SHLWAPI_APITEST][SDK] PathFileExistsDefExtAndAttributesW (#6879) Implementing missing features... JIRA issue: CORE-19278 - Implement PathFileExistsDefExtAndAttributesW function. - Add its prototype to . - Modify shlwapi.spec. - Add PathFileExistsDefExtAndAttributesW testcase. --- dll/win32/shlwapi/shlwapi.spec | 2 +- dll/win32/shlwapi/utils.cpp | 38 ++++++++++++ .../rostests/apitests/shlwapi/CMakeLists.txt | 1 + .../PathFileExistsDefExtAndAttributesW.c | 61 +++++++++++++++++++ modules/rostests/apitests/shlwapi/testlist.c | 2 + sdk/include/reactos/shlwapi_undoc.h | 10 ++- 6 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 modules/rostests/apitests/shlwapi/PathFileExistsDefExtAndAttributesW.c diff --git a/dll/win32/shlwapi/shlwapi.spec b/dll/win32/shlwapi/shlwapi.spec index 53e67a7800e..821a2ed241c 100644 --- a/dll/win32/shlwapi/shlwapi.spec +++ b/dll/win32/shlwapi/shlwapi.spec @@ -508,7 +508,7 @@ 508 stdcall -noname SHPropertyBag_WriteDWORD(ptr wstr long) 509 stdcall -noname IUnknown_OnFocusChangeIS(ptr ptr long) 510 stdcall -noname SHLockSharedEx(ptr long long) -511 stdcall -stub -noname PathFileExistsDefExtAndAttributesW(wstr long ptr) +511 stdcall -noname PathFileExistsDefExtAndAttributesW(wstr long ptr) 512 stub -ordinal IStream_ReadPidl 513 stub -ordinal IStream_WritePidl 514 stdcall -noname IUnknown_ProfferService(ptr ptr ptr ptr) diff --git a/dll/win32/shlwapi/utils.cpp b/dll/win32/shlwapi/utils.cpp index a27bcd90f94..673d6d77f99 100644 --- a/dll/win32/shlwapi/utils.cpp +++ b/dll/win32/shlwapi/utils.cpp @@ -77,3 +77,41 @@ IContextMenu_Invoke( return ret; } + +/************************************************************************* + * PathFileExistsDefExtAndAttributesW [SHLWAPI.511] + * + * @param pszPath The path string. + * @param dwWhich The WHICH_... flags. + * @param pdwFileAttributes A pointer to the file attributes. Optional. + * @return TRUE if successful. + */ +BOOL WINAPI +PathFileExistsDefExtAndAttributesW( + _Inout_ LPWSTR pszPath, + _In_ DWORD dwWhich, + _Out_opt_ LPDWORD pdwFileAttributes) +{ + TRACE("(%s, 0x%lX, %p)\n", debugstr_w(pszPath), dwWhich, pdwFileAttributes); + + if (pdwFileAttributes) + *pdwFileAttributes = INVALID_FILE_ATTRIBUTES; + + if (!pszPath) + return FALSE; + + if (!dwWhich || (*PathFindExtensionW(pszPath) && (dwWhich & WHICH_OPTIONAL))) + return PathFileExistsAndAttributesW(pszPath, pdwFileAttributes); + + if (!PathFileExistsDefExtW(pszPath, dwWhich)) + { + if (pdwFileAttributes) + *pdwFileAttributes = INVALID_FILE_ATTRIBUTES; + return FALSE; + } + + if (pdwFileAttributes) + *pdwFileAttributes = GetFileAttributesW(pszPath); + + return TRUE; +} diff --git a/modules/rostests/apitests/shlwapi/CMakeLists.txt b/modules/rostests/apitests/shlwapi/CMakeLists.txt index 7a9a57e40aa..95271b056ae 100644 --- a/modules/rostests/apitests/shlwapi/CMakeLists.txt +++ b/modules/rostests/apitests/shlwapi/CMakeLists.txt @@ -6,6 +6,7 @@ include_directories($) list(APPEND SOURCE AssocQueryString.c + PathFileExistsDefExtAndAttributesW.c PathFindOnPath.c PathIsUNC.c PathIsUNCServer.c diff --git a/modules/rostests/apitests/shlwapi/PathFileExistsDefExtAndAttributesW.c b/modules/rostests/apitests/shlwapi/PathFileExistsDefExtAndAttributesW.c new file mode 100644 index 00000000000..a1a74944d8b --- /dev/null +++ b/modules/rostests/apitests/shlwapi/PathFileExistsDefExtAndAttributesW.c @@ -0,0 +1,61 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: Tests for PathFileExistsDefExtAndAttributesW + * COPYRIGHT: Copyright 2024 Katayama Hirofumi MZ + */ + +#include +#include +#include +#include + +START_TEST(PathFileExistsDefExtAndAttributesW) +{ + WCHAR szPath[MAX_PATH]; + DWORD attrs; + BOOL ret; + + /* NULL check */ + ret = PathFileExistsDefExtAndAttributesW(NULL, 0, NULL); + ok_int(ret, FALSE); + + /* Not existent file */ + lstrcpynW(szPath, L"Not Existent File.txt", _countof(szPath)); + ret = PathFileExistsDefExtAndAttributesW(szPath, 0, NULL); + ok_int(ret, FALSE); + + /* "Windows" directory */ + GetWindowsDirectoryW(szPath, _countof(szPath)); + ret = PathFileExistsDefExtAndAttributesW(szPath, 0, NULL); + ok_int(ret, TRUE); + + /* "Windows" directory with attributes check */ + attrs = 0; + ret = PathFileExistsDefExtAndAttributesW(szPath, 0, &attrs); + ok_int(ret, TRUE); + ok(attrs != 0 && attrs != INVALID_FILE_ATTRIBUTES, "attrs was 0x%lX\n", attrs); + + /* Find notepad.exe */ + SearchPathW(NULL, L"notepad.exe", NULL, _countof(szPath), szPath, NULL); + ret = PathFileExistsW(szPath); + ok_int(ret, TRUE); + + /* Remove .exe */ + PathRemoveExtensionW(szPath); + ret = PathFileExistsW(szPath); + ok_int(ret, FALSE); + + /* Add .exe */ + ret = PathFileExistsDefExtAndAttributesW(szPath, WHICH_EXE, NULL); + ok_int(ret, TRUE); + ret = PathFileExistsW(szPath); + ok_int(ret, TRUE); + + /* notepad.cmd doesn't exist */ + PathRemoveExtensionW(szPath); + ret = PathFileExistsDefExtAndAttributesW(szPath, WHICH_CMD, NULL); + ok_int(ret, FALSE); + ret = PathFileExistsW(szPath); + ok_int(ret, FALSE); +} diff --git a/modules/rostests/apitests/shlwapi/testlist.c b/modules/rostests/apitests/shlwapi/testlist.c index 9f94155cf15..9bb74d7ee34 100644 --- a/modules/rostests/apitests/shlwapi/testlist.c +++ b/modules/rostests/apitests/shlwapi/testlist.c @@ -2,6 +2,7 @@ #include extern void func_AssocQueryString(void); +extern void func_PathFileExistsDefExtAndAttributesW(void); extern void func_PathFindOnPath(void); extern void func_isuncpath(void); extern void func_isuncpathserver(void); @@ -19,6 +20,7 @@ extern void func_StrFormatByteSizeW(void); const struct test winetest_testlist[] = { { "AssocQueryString", func_AssocQueryString }, + { "PathFileExistsDefExtAndAttributesW", func_PathFileExistsDefExtAndAttributesW }, { "PathFindOnPath", func_PathFindOnPath }, { "PathIsUNC", func_isuncpath }, { "PathIsUNCServer", func_isuncpathserver }, diff --git a/sdk/include/reactos/shlwapi_undoc.h b/sdk/include/reactos/shlwapi_undoc.h index fd1ac3f3c82..cd2cc1882b8 100644 --- a/sdk/include/reactos/shlwapi_undoc.h +++ b/sdk/include/reactos/shlwapi_undoc.h @@ -283,7 +283,8 @@ ShellMessageBoxWrapW( _In_ UINT fuStyle, ...); -/* dwWhich flags for PathFileExistsDefExtW and PathFindOnPathExW */ +/* dwWhich flags for PathFileExistsDefExtW, PathFindOnPathExW, + * and PathFileExistsDefExtAndAttributesW */ #define WHICH_PIF (1 << 0) #define WHICH_COM (1 << 1) #define WHICH_EXE (1 << 2) @@ -309,6 +310,13 @@ ShellMessageBoxWrapW( #define PATH_CHAR_CLASS_ANY 0xffffffff BOOL WINAPI PathFileExistsDefExtW(LPWSTR lpszPath, DWORD dwWhich); + +BOOL WINAPI +PathFileExistsDefExtAndAttributesW( + _Inout_ LPWSTR pszPath, + _In_ DWORD dwWhich, + _Out_opt_ LPDWORD pdwFileAttributes); + BOOL WINAPI PathFindOnPathExW(LPWSTR lpszFile, LPCWSTR *lppszOtherDirs, DWORD dwWhich); VOID WINAPI FixSlashesAndColonW(LPWSTR); BOOL WINAPI PathIsValidCharA(char c, DWORD dwClass); From 0f81f46387683e1a9be61d0a6319672a1f46a757 Mon Sep 17 00:00:00 2001 From: Victor Perevertkin Date: Wed, 15 May 2024 05:39:42 +0300 Subject: [PATCH 148/182] [GITHUB] Remove VS 2015 build from the CI (#3872) [WORKFLOWS] Remove some excludes as well --- .github/workflows/build.yml | 16 +++------------- README.md | 2 +- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e9953ef7f4e..f29ff6bfdba 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -84,24 +84,14 @@ jobs: build-msvc: strategy: matrix: - os: [windows-latest, windows-2019] - toolset: ['14.2', '14.1', '14.0'] # VS 2019, 2017, and 2015 (see below) + os: [windows-latest] + toolset: ['14.2', '14.1'] # VS 2019, and 2017 (see below) arch: [i386, amd64] config: [Debug, Release] dllver: ['0x502', '0x600'] - exclude: # VS 2019, 2017 only with windows-latest; VS 2015 only with windows-2019 - - os: windows-2019 - toolset: '14.2' - - os: windows-2019 - toolset: '14.1' - - os: windows-latest - toolset: '14.0' - - dllver: 0x600 - os: windows-2019 + exclude: # VS 2019, 2017 only with windows-latest - dllver: 0x600 toolset: '14.1' - - dllver: 0x600 - toolset: '14.0' - dllver: 0x600 config: Release fail-fast: false diff --git a/README.md b/README.md index d465cc0bd5f..1dfc7a9bda4 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ The code of ReactOS is licensed under [GNU GPL 2.0](https://github.com/reactos/r To build the system it is strongly advised to use the _ReactOS Build Environment (RosBE)._ Up-to-date versions for Windows and for Unix/GNU-Linux are available from our download page at: ["Build Environment"](https://reactos.org/wiki/Build_Environment). -Alternatively one can use Microsoft Visual C++ (MSVC) version 2015+. Building with MSVC is covered here: ["Visual Studio or Microsoft Visual C++"](https://reactos.org/wiki/CMake#Visual_Studio_or_Microsoft_Visual_C.2B.2B). +Alternatively one can use Microsoft Visual C++ (MSVC) version 2019+. Building with MSVC is covered here: ["Visual Studio or Microsoft Visual C++"](https://reactos.org/wiki/CMake#Visual_Studio_or_Microsoft_Visual_C.2B.2B). See ["Building ReactOS"](https://reactos.org/wiki/Building_ReactOS) article for more details. From 48a0d8e012f77b5d7fb11d58141e1fdd5de27254 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Wed, 15 May 2024 17:01:41 +0900 Subject: [PATCH 149/182] [SHELL32_APITEST] Add SHSimpleIDListFromPath testcase (#6892) Inspect the behavior of shell32!SHSimpleIDListFromPath function. JIRA issue: CORE-19591 --- .../rostests/apitests/shell32/CMakeLists.txt | 1 + .../shell32/SHSimpleIDListFromPath.cpp | 43 +++++++++++++++++++ modules/rostests/apitests/shell32/testlist.c | 2 + 3 files changed, 46 insertions(+) create mode 100644 modules/rostests/apitests/shell32/SHSimpleIDListFromPath.cpp diff --git a/modules/rostests/apitests/shell32/CMakeLists.txt b/modules/rostests/apitests/shell32/CMakeLists.txt index acd85a23c3f..5bc791189ca 100644 --- a/modules/rostests/apitests/shell32/CMakeLists.txt +++ b/modules/rostests/apitests/shell32/CMakeLists.txt @@ -32,6 +32,7 @@ list(APPEND SOURCE SHCreateFileExtractIconW.cpp SHParseDisplayName.cpp SHRestricted.cpp + SHSimpleIDListFromPath.cpp She.cpp ShellExecCmdLine.cpp ShellExecuteEx.cpp diff --git a/modules/rostests/apitests/shell32/SHSimpleIDListFromPath.cpp b/modules/rostests/apitests/shell32/SHSimpleIDListFromPath.cpp new file mode 100644 index 00000000000..34ffdae3048 --- /dev/null +++ b/modules/rostests/apitests/shell32/SHSimpleIDListFromPath.cpp @@ -0,0 +1,43 @@ +/* + * PROJECT: ReactOS API tests + * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) + * PURPOSE: Test for SHSimpleIDListFromPath + * COPYRIGHT: Copyright 2024 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com) + */ + +#include "shelltest.h" +#include + +START_TEST(SHSimpleIDListFromPath) +{ + HRESULT hr; + WCHAR szPath[MAX_PATH]; + GetWindowsDirectoryW(szPath, _countof(szPath)); + + // We compare pidl1 and pidl2 + CComHeapPtr pidl1(SHSimpleIDListFromPath(szPath)); + CComHeapPtr pidl2(ILCreateFromPathW(szPath)); + + // Yes, they are equal logically + LPITEMIDLIST pidl1Last = ILFindLastID(pidl1), pidl2Last = ILFindLastID(pidl2); + ok_int(ILIsEqual(pidl1, pidl2), TRUE); + ok_int(ILIsEqual(pidl1Last, pidl2Last), TRUE); + + // Bind to parent + CComPtr psf1, psf2; + hr = SHBindToParent(pidl1, IID_PPV_ARG(IShellFolder, &psf1), NULL); + ok_long(hr, S_OK); + hr = SHBindToParent(pidl2, IID_PPV_ARG(IShellFolder, &psf2), NULL); + ok_long(hr, S_OK); + + // Get attributes + DWORD attrs1 = SFGAO_FOLDER, attrs2 = SFGAO_FOLDER; + hr = (psf1 ? psf1->GetAttributesOf(1, &pidl1Last, &attrs1) : E_UNEXPECTED); + ok_long(hr, S_OK); + hr = (psf2 ? psf2->GetAttributesOf(1, &pidl2Last, &attrs2) : E_UNEXPECTED); + ok_long(hr, S_OK); + + // There is the difference in attributes: + ok_long((attrs1 & SFGAO_FOLDER), 0); + ok_long((attrs2 & SFGAO_FOLDER), SFGAO_FOLDER); +} diff --git a/modules/rostests/apitests/shell32/testlist.c b/modules/rostests/apitests/shell32/testlist.c index 7e42b733569..bf977bac3ed 100644 --- a/modules/rostests/apitests/shell32/testlist.c +++ b/modules/rostests/apitests/shell32/testlist.c @@ -40,6 +40,7 @@ extern void func_ShellState(void); extern void func_SHGetAttributesFromDataObject(void); extern void func_SHLimitInputEdit(void); extern void func_SHParseDisplayName(void); +extern void func_SHSimpleIDListFromPath(void); extern void func_SHRestricted(void); const struct test winetest_testlist[] = @@ -81,6 +82,7 @@ const struct test winetest_testlist[] = { "SHGetAttributesFromDataObject", func_SHGetAttributesFromDataObject }, { "SHLimitInputEdit", func_SHLimitInputEdit }, { "SHParseDisplayName", func_SHParseDisplayName }, + { "SHSimpleIDListFromPath", func_SHSimpleIDListFromPath }, { "SHRestricted", func_SHRestricted }, { 0, 0 } From 965230ded43ddc1a16f3d0e7f293e1548f4bcaf4 Mon Sep 17 00:00:00 2001 From: Ethan Rodensky Date: Tue, 14 May 2024 15:56:03 -0400 Subject: [PATCH 150/182] [THEMES][LUNAR] Fix SizingMargins for the taskbar and tray backgrounds (#6888) CORE-11698 --- .../lunar.msstyles/textfiles/ExtraLargeReactOS.INI | 12 ++++++------ .../lunar.msstyles/textfiles/LargeFontsReactOS.INI | 12 ++++++------ .../Lunar/lunar.msstyles/textfiles/NormalReactOS.INI | 12 ++++++------ 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/media/themes/Lunar/lunar.msstyles/textfiles/ExtraLargeReactOS.INI b/media/themes/Lunar/lunar.msstyles/textfiles/ExtraLargeReactOS.INI index c03cee44066..18f16025d50 100644 --- a/media/themes/Lunar/lunar.msstyles/textfiles/ExtraLargeReactOS.INI +++ b/media/themes/Lunar/lunar.msstyles/textfiles/ExtraLargeReactOS.INI @@ -1019,7 +1019,7 @@ BgType = ImageFile FillColorHint = 36 94 220 ImageCount = 1 ImageFile = ReactOS\TaskbarBackground.bmp -SizingMargins = 0, 0, 26, 0 +SizingMargins = 0, 0, 16, 0 SizingType = Stretch TRANSPARENT = true TRANSPARENTCOLOR = 255 0 255 @@ -1029,7 +1029,7 @@ BgType = ImageFile FillColorHint = 36 94 220 ImageCount = 1 ImageFile = ReactOS\TaskbarBackgroundVertical.bmp -SizingMargins = 0, 0, 0, 0 +SizingMargins = 16, 0, 0, 0 SizingType = Stretch [TaskBar.BackgroundRight] @@ -1037,7 +1037,7 @@ BgType = ImageFile FillColorHint = 36 94 220 ImageCount = 1 ImageFile = ReactOS\TaskbarBackgroundVertical.bmp -SizingMargins = 0, 0, 0, 0 +SizingMargins = 16, 0, 0, 0 SizingType = Stretch [TaskBar.BackgroundTop] @@ -1045,7 +1045,7 @@ BgType = ImageFile FillColorHint = 36 94 220 ImageCount = 1 ImageFile = ReactOS\TaskbarBackground.bmp -SizingMargins = 0, 0, 26, 0 +SizingMargins = 0, 0, 16, 0 SizingType = Stretch ContentMargins = 1, 1, 1, 1 @@ -2230,7 +2230,7 @@ ContentMargins = 3, 0, 0, 0 FillColorHint = 13 141 234 ImageCount = 1 ImageFile = ReactOS\TaskbarTray.bmp -SizingMargins = 0, 0, 26, 0 +SizingMargins = 0, 0, 16, 0 SizingType = Stretch Transparent = True TransparentColor = 255 0 0 @@ -2260,7 +2260,7 @@ ContentMargins = 0, 0, 2, 0 FillColorHint = 13 141 234 ImageCount = 1 ImageFile = ReactOS\TaskbarTrayVertical.bmp -SizingMargins = 0, 0, 0, 0 +SizingMargins = 16, 0, 0, 0 SizingType = Stretch Transparent = True TransparentColor = 255 0 0 diff --git a/media/themes/Lunar/lunar.msstyles/textfiles/LargeFontsReactOS.INI b/media/themes/Lunar/lunar.msstyles/textfiles/LargeFontsReactOS.INI index f020a11a8f1..777daadff75 100644 --- a/media/themes/Lunar/lunar.msstyles/textfiles/LargeFontsReactOS.INI +++ b/media/themes/Lunar/lunar.msstyles/textfiles/LargeFontsReactOS.INI @@ -1019,7 +1019,7 @@ BgType = ImageFile FillColorHint = 36 94 220 ImageCount = 1 ImageFile = ReactOS\TaskbarBackground.bmp -SizingMargins = 0, 0, 26, 0 +SizingMargins = 0, 0, 16, 0 SizingType = Stretch TRANSPARENT = true TRANSPARENTCOLOR = 255 0 255 @@ -1029,7 +1029,7 @@ BgType = ImageFile FillColorHint = 36 94 220 ImageCount = 1 ImageFile = ReactOS\TaskbarBackgroundVertical.bmp -SizingMargins = 0, 0, 0, 0 +SizingMargins = 16, 0, 0, 0 SizingType = Stretch [TaskBar.BackgroundRight] @@ -1037,7 +1037,7 @@ BgType = ImageFile FillColorHint = 36 94 220 ImageCount = 1 ImageFile = ReactOS\TaskbarBackgroundVertical.bmp -SizingMargins = 0, 0, 0, 0 +SizingMargins = 16, 0, 0, 0 SizingType = Stretch [TaskBar.BackgroundTop] @@ -1045,7 +1045,7 @@ BgType = ImageFile FillColorHint = 36 94 220 ImageCount = 1 ImageFile = ReactOS\TaskbarBackground.bmp -SizingMargins = 0, 0, 26, 0 +SizingMargins = 0, 0, 16, 0 SizingType = Stretch ContentMargins = 1, 1, 1, 1 @@ -2230,7 +2230,7 @@ ContentMargins = 3, 0, 0, 0 FillColorHint = 13 141 234 ImageCount = 1 ImageFile = ReactOS\TaskbarTray.bmp -SizingMargins = 0, 0, 26, 0 +SizingMargins = 0, 0, 16, 0 SizingType = Stretch Transparent = True TransparentColor = 255 0 0 @@ -2260,7 +2260,7 @@ ContentMargins = 0, 0, 2, 0 FillColorHint = 13 141 234 ImageCount = 1 ImageFile = ReactOS\TaskbarTrayVertical.bmp -SizingMargins = 0, 0, 0, 0 +SizingMargins = 16, 0, 0, 0 SizingType = Stretch Transparent = True TransparentColor = 255 0 0 diff --git a/media/themes/Lunar/lunar.msstyles/textfiles/NormalReactOS.INI b/media/themes/Lunar/lunar.msstyles/textfiles/NormalReactOS.INI index f8d915b9d34..6f3e6d37809 100644 --- a/media/themes/Lunar/lunar.msstyles/textfiles/NormalReactOS.INI +++ b/media/themes/Lunar/lunar.msstyles/textfiles/NormalReactOS.INI @@ -1019,7 +1019,7 @@ BgType = ImageFile FillColorHint = 36 94 220 ImageCount = 1 ImageFile = ReactOS\TaskbarBackground.bmp -SizingMargins = 0, 0, 26, 0 +SizingMargins = 0, 0, 16, 0 SizingType = Stretch TRANSPARENT = true TRANSPARENTCOLOR = 255 0 255 @@ -1029,7 +1029,7 @@ BgType = ImageFile FillColorHint = 36 94 220 ImageCount = 1 ImageFile = ReactOS\TaskbarBackgroundVertical.bmp -SizingMargins = 0, 0, 0, 0 +SizingMargins = 16, 0, 0, 0 SizingType = Stretch [TaskBar.BackgroundRight] @@ -1037,7 +1037,7 @@ BgType = ImageFile FillColorHint = 36 94 220 ImageCount = 1 ImageFile = ReactOS\TaskbarBackgroundVertical.bmp -SizingMargins = 0, 0, 0, 0 +SizingMargins = 16, 0, 0, 0 SizingType = Stretch [TaskBar.BackgroundTop] @@ -1045,7 +1045,7 @@ BgType = ImageFile FillColorHint = 36 94 220 ImageCount = 1 ImageFile = ReactOS\TaskbarBackground.bmp -SizingMargins = 0, 0, 26, 0 +SizingMargins = 0, 0, 16, 0 SizingType = Stretch ContentMargins = 1, 1, 1, 1 @@ -2230,7 +2230,7 @@ ContentMargins = 3, 0, 0, 0 FillColorHint = 13 141 234 ImageCount = 1 ImageFile = ReactOS\TaskbarTray.bmp -SizingMargins = 0, 0, 26, 0 +SizingMargins = 0, 0, 16, 0 SizingType = Stretch Transparent = True TransparentColor = 255 0 0 @@ -2260,7 +2260,7 @@ ContentMargins = 0, 0, 2, 0 FillColorHint = 13 141 234 ImageCount = 1 ImageFile = ReactOS\TaskbarTrayVertical.bmp -SizingMargins = 0, 0, 0, 0 +SizingMargins = 16, 0, 0, 0 SizingType = Stretch Transparent = True TransparentColor = 255 0 0 From 15c42f3ef8bd365d70b4ffbc48ec133eb9176efa Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Wed, 15 May 2024 22:33:41 +0200 Subject: [PATCH 151/182] [REGEDIT] Check the correct value in WM_ACTIVATE (#6895) --- base/applications/regedit/framewnd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/applications/regedit/framewnd.c b/base/applications/regedit/framewnd.c index 6f382a072cd..df1b796727d 100644 --- a/base/applications/regedit/framewnd.c +++ b/base/applications/regedit/framewnd.c @@ -1400,7 +1400,7 @@ LRESULT CALLBACK FrameWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa return DefWindowProcW(hWnd, message, wParam, lParam); break; case WM_ACTIVATE: - if (LOWORD(hWnd) && g_pChildWnd) + if (LOWORD(wParam) != WA_INACTIVE && g_pChildWnd) SetFocus(g_pChildWnd->hWnd); break; case WM_SIZE: From e0ba2f33729537c59c59b7469a9239c86aee6fca Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Thu, 16 May 2024 12:34:53 +0900 Subject: [PATCH 152/182] [NOTEPAD] Kill warning by typecast (int) in DIALOG_StatusBarUpdateCaretPos JIRA issue: N/A --- base/applications/notepad/dialog.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/applications/notepad/dialog.c b/base/applications/notepad/dialog.c index 2aa747fa4de..3bef0062fe4 100644 --- a/base/applications/notepad/dialog.c +++ b/base/applications/notepad/dialog.c @@ -928,7 +928,7 @@ VOID DIALOG_StatusBarUpdateCaretPos(VOID) DWORD dwStart, dwSize; SendMessage(Globals.hEdit, EM_GETSEL, (WPARAM)&dwStart, (LPARAM)&dwSize); - line = SendMessage(Globals.hEdit, EM_LINEFROMCHAR, (WPARAM)dwStart, 0); + line = (int)SendMessage(Globals.hEdit, EM_LINEFROMCHAR, (WPARAM)dwStart, 0); ich = (int)SendMessage(Globals.hEdit, EM_LINEINDEX, (WPARAM)line, 0); /* EM_LINEINDEX can return -1 on failure */ From 3285f698fde3c22fc02b304602983b9d7c2b284e Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Fri, 17 May 2024 08:10:15 +0900 Subject: [PATCH 153/182] [SHELL32][SDK] SHChangeNotify: Re-work Part 1 (#6898) Making shell change notification implementation better. Now recycle bin icon change is working. JIRA issue: CORE-13950 JIRA issue: CORE-19591 JIRA issue: CORE-11453 - Delete SHSimpleIDListFromPathA/W hacks. - Translate simple PIDLs (coming from SHSimpleIDListFromPathA/W) in CDefView::OnChangeNotify method. - Add CDefView::LV_RefreshIcons method for SHCNE_UPDATEIMAGE change event. - Rename CDefView::LV_ProdItem method as CDefView::LV_UpdateItem. - Call SHUpdateRecycleBinIcon in SHFileOperationW function. - Half-implement SHUpdateRecycleBinIcon. - Call SHChangeNotify in DeleteExt function. --- dll/win32/shell32/CDefView.cpp | 104 +++++++++++++++++----- dll/win32/shell32/dialogs/filetypes.cpp | 7 +- dll/win32/shell32/folders/CFSFolder.cpp | 1 + dll/win32/shell32/folders/CRecycleBin.cpp | 5 ++ dll/win32/shell32/shlfileop.cpp | 2 + dll/win32/shell32/wine/pidl.c | 15 +--- sdk/include/psdk/shlobj.h | 1 + sdk/include/reactos/undocshell.h | 1 + 8 files changed, 99 insertions(+), 37 deletions(-) diff --git a/dll/win32/shell32/CDefView.cpp b/dll/win32/shell32/CDefView.cpp index 50af36089db..655722ee8df 100644 --- a/dll/win32/shell32/CDefView.cpp +++ b/dll/win32/shell32/CDefView.cpp @@ -199,7 +199,9 @@ class CDefView : int LV_AddItem(PCUITEMID_CHILD pidl); BOOLEAN LV_DeleteItem(PCUITEMID_CHILD pidl); BOOLEAN LV_RenameItem(PCUITEMID_CHILD pidlOld, PCUITEMID_CHILD pidlNew); - BOOLEAN LV_ProdItem(PCUITEMID_CHILD pidl); + BOOLEAN LV_UpdateItem(PCUITEMID_CHILD pidl); + void LV_RefreshIcon(INT iItem); + void LV_RefreshIcons(); static INT CALLBACK fill_list(LPVOID ptr, LPVOID arg); HRESULT FillList(); HRESULT FillFileMenu(); @@ -973,6 +975,8 @@ BOOLEAN CDefView::LV_DeleteItem(PCUITEMID_CHILD pidl) if (nIndex < 0) return FALSE; + _DoFolderViewCB(SFVM_REMOVINGOBJECT, 0, (LPARAM)pidl); + return m_ListView.DeleteItem(nIndex); } @@ -1015,7 +1019,7 @@ BOOLEAN CDefView::LV_RenameItem(PCUITEMID_CHILD pidlOld, PCUITEMID_CHILD pidlNew return FALSE; } -BOOLEAN CDefView::LV_ProdItem(PCUITEMID_CHILD pidl) +BOOLEAN CDefView::LV_UpdateItem(PCUITEMID_CHILD pidl) { int nItem; LVITEMW lvItem; @@ -1028,6 +1032,8 @@ BOOLEAN CDefView::LV_ProdItem(PCUITEMID_CHILD pidl) if (-1 != nItem) { + _DoFolderViewCB(SFVM_UPDATINGOBJECT, 0, (LPARAM)pidl); + lvItem.mask = LVIF_IMAGE; lvItem.iItem = nItem; lvItem.iSubItem = 0; @@ -1040,6 +1046,31 @@ BOOLEAN CDefView::LV_ProdItem(PCUITEMID_CHILD pidl) return FALSE; } +void CDefView::LV_RefreshIcon(INT iItem) +{ + ASSERT(m_ListView); + + LVITEMW lvItem = { LVIF_IMAGE }; + lvItem.iItem = iItem; + lvItem.iImage = I_IMAGECALLBACK; + m_ListView.SetItem(&lvItem); + m_ListView.Update(iItem); +} + +void CDefView::LV_RefreshIcons() +{ + ASSERT(m_ListView); + + for (INT iItem = -1;;) + { + iItem = ListView_GetNextItem(m_ListView, iItem, LVNI_ALL); + if (iItem == -1) + break; + + LV_RefreshIcon(iItem); + } +} + INT CALLBACK CDefView::fill_list(LPVOID ptr, LPVOID arg) { PITEMID_CHILD pidl = static_cast(ptr); @@ -2311,46 +2342,75 @@ LRESULT CDefView::OnChangeNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & return FALSE; } - BOOL bParent0 = ILIsParentOrSpecialParent(m_pidlParent, Pidls[0]); - BOOL bParent1 = ILIsParentOrSpecialParent(m_pidlParent, Pidls[1]); - TRACE("(%p)(%p,%p,0x%08x)\n", this, Pidls[0], Pidls[1], lParam); + // Translate PIDLs. + // SHSimpleIDListFromPathW creates fake PIDLs (lacking some attributes) + // FIXME: Use SHGetRealIDL + CComHeapPtr pidl0(Pidls[0]), pidl1(Pidls[1]); + WCHAR path[MAX_PATH]; + if (pidl0 && SHGetPathFromIDListW(pidl0, path) && PathFileExistsW(path)) + { + pidl0.Free(); + pidl0.Attach(ILCreateFromPathW(path)); + } + if (pidl1 && SHGetPathFromIDListW(pidl1, path) && PathFileExistsW(path)) + { + pidl1.Free(); + pidl1.Attach(ILCreateFromPathW(path)); + } + + PITEMID_CHILD child0 = NULL, child1 = NULL; + if (ILIsParentOrSpecialParent(m_pidlParent, pidl0)) + child0 = ILFindLastID(pidl0); + if (ILIsParentOrSpecialParent(m_pidlParent, pidl1)) + child1 = ILFindLastID(pidl1); + lEvent &= ~SHCNE_INTERRUPT; switch (lEvent) { case SHCNE_MKDIR: case SHCNE_CREATE: case SHCNE_DRIVEADD: - if (bParent0) - { - if (LV_FindItemByPidl(ILFindLastID(Pidls[0])) == -1) - LV_AddItem(ILFindLastID(Pidls[0])); - else - LV_ProdItem(ILFindLastID(Pidls[0])); - } + if (!child0) + break; + if (LV_FindItemByPidl(child0) < 0) + LV_AddItem(child0); + else + LV_UpdateItem(child0); break; case SHCNE_RMDIR: case SHCNE_DELETE: case SHCNE_DRIVEREMOVED: - if (bParent0) - LV_DeleteItem(ILFindLastID(Pidls[0])); + if (child0) + LV_DeleteItem(child0); break; case SHCNE_RENAMEFOLDER: case SHCNE_RENAMEITEM: - if (bParent0 && bParent1) - LV_RenameItem(ILFindLastID(Pidls[0]), ILFindLastID(Pidls[1])); - else if (bParent0) - LV_DeleteItem(ILFindLastID(Pidls[0])); - else if (bParent1) - LV_AddItem(ILFindLastID(Pidls[1])); + if (child0 && child1) + LV_RenameItem(child0, child1); + else if (child0) + LV_DeleteItem(child0); + else if (child1) + LV_AddItem(child1); break; case SHCNE_UPDATEITEM: - if (bParent0) - LV_RenameItem(ILFindLastID(Pidls[0]), ILFindLastID(Pidls[0])); + if (child0) + LV_UpdateItem(child0); + break; + case SHCNE_UPDATEIMAGE: + case SHCNE_MEDIAINSERTED: + case SHCNE_MEDIAREMOVED: + case SHCNE_ASSOCCHANGED: + LV_RefreshIcons(); break; case SHCNE_UPDATEDIR: + case SHCNE_ATTRIBUTES: Refresh(); + UpdateStatusbar(); + break; + case SHCNE_FREESPACE: + UpdateStatusbar(); break; } diff --git a/dll/win32/shell32/dialogs/filetypes.cpp b/dll/win32/shell32/dialogs/filetypes.cpp index 2c245d717ba..1f8403971da 100644 --- a/dll/win32/shell32/dialogs/filetypes.cpp +++ b/dll/win32/shell32/dialogs/filetypes.cpp @@ -66,7 +66,12 @@ DeleteExt(HWND hwndDlg, LPCWSTR pszExt) SHDeleteKeyW(HKEY_CLASSES_ROOT, szValue); // delete ".ext" key - return SHDeleteKeyW(HKEY_CLASSES_ROOT, pszExt) == ERROR_SUCCESS; + BOOL ret = (SHDeleteKeyW(HKEY_CLASSES_ROOT, pszExt) == ERROR_SUCCESS); + + // notify + SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_FLUSHNOWAIT, NULL, NULL); + + return ret; } static inline HICON diff --git a/dll/win32/shell32/folders/CFSFolder.cpp b/dll/win32/shell32/folders/CFSFolder.cpp index b89ecc45579..95a5030a2d3 100644 --- a/dll/win32/shell32/folders/CFSFolder.cpp +++ b/dll/win32/shell32/folders/CFSFolder.cpp @@ -683,6 +683,7 @@ HRESULT SHELL32_GetFSItemAttributes(IShellFolder * psf, LPCITEMIDLIST pidl, LPDW return S_OK; } +// This method is typically invoked from SHSimpleIDListFromPathA/W. HRESULT CFSFolder::_ParseSimple( _In_ LPOLESTR lpszDisplayName, _Inout_ WIN32_FIND_DATAW *pFind, diff --git a/dll/win32/shell32/folders/CRecycleBin.cpp b/dll/win32/shell32/folders/CRecycleBin.cpp index c8bceb589f4..3ade1981118 100644 --- a/dll/win32/shell32/folders/CRecycleBin.cpp +++ b/dll/win32/shell32/folders/CRecycleBin.cpp @@ -1078,6 +1078,11 @@ EXTERN_C HRESULT WINAPI SHUpdateRecycleBinIcon(void) { FIXME("stub\n"); + // HACK! This dwItem2 should be the icon index in the system image list that has changed. + // FIXME: Call SHMapPIDLToSystemImageListIndex + DWORD dwItem2 = -1; + + SHChangeNotify(SHCNE_UPDATEIMAGE, SHCNF_DWORD, NULL, &dwItem2); return S_OK; } diff --git a/dll/win32/shell32/shlfileop.cpp b/dll/win32/shell32/shlfileop.cpp index f1ecc455428..5e1309aabdf 100644 --- a/dll/win32/shell32/shlfileop.cpp +++ b/dll/win32/shell32/shlfileop.cpp @@ -2061,6 +2061,8 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp) if (lpFileOp->wFunc != FO_DELETE) destroy_file_list(&flTo); + else if (lpFileOp->fFlags & FOF_ALLOWUNDO) + SHUpdateRecycleBinIcon(); if (ret == ERROR_CANCELLED) lpFileOp->fAnyOperationsAborted = TRUE; diff --git a/dll/win32/shell32/wine/pidl.c b/dll/win32/shell32/wine/pidl.c index 824af18984a..33495aead3a 100644 --- a/dll/win32/shell32/wine/pidl.c +++ b/dll/win32/shell32/wine/pidl.c @@ -1113,15 +1113,6 @@ LPITEMIDLIST WINAPI SHSimpleIDListFromPathA(LPCSTR lpszPath) wPath = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); MultiByteToWideChar(CP_ACP, 0, lpszPath, -1, wPath, len); } -#ifdef __REACTOS__ - // FIXME: Needs folder attribute - if (PathFileExistsW(wPath)) - { - pidl = ILCreateFromPathW(wPath); - HeapFree(GetProcessHeap(), 0, wPath); - return pidl; - } -#endif _ILParsePathW(wPath, NULL, TRUE, &pidl, NULL); @@ -1135,13 +1126,9 @@ LPITEMIDLIST WINAPI SHSimpleIDListFromPathW(LPCWSTR lpszPath) LPITEMIDLIST pidl = NULL; TRACE("%s\n", debugstr_w(lpszPath)); -#ifdef __REACTOS__ - // FIXME: Needs folder attribute - if (PathFileExistsW(lpszPath)) - return ILCreateFromPathW(lpszPath); -#endif _ILParsePathW(lpszPath, NULL, TRUE, &pidl, NULL); + TRACE("%s %p\n", debugstr_w(lpszPath), pidl); return pidl; } diff --git a/sdk/include/psdk/shlobj.h b/sdk/include/psdk/shlobj.h index 3d27f328631..bd60c13064c 100644 --- a/sdk/include/psdk/shlobj.h +++ b/sdk/include/psdk/shlobj.h @@ -1323,6 +1323,7 @@ SHCreateShellFolderViewEx( #define SFVM_SETISFV 39 #define SFVM_GETEXTVIEWS 40 /* undocumented */ #define SFVM_THISIDLIST 41 +#define SFVM_UPDATINGOBJECT 43 /* undocumented */ #define SFVM_ADDPROPERTYPAGES 47 #define SFVM_BACKGROUNDENUMDONE 48 #define SFVM_GETNOTIFY 49 diff --git a/sdk/include/reactos/undocshell.h b/sdk/include/reactos/undocshell.h index 0460a261cb7..94f6bf71702 100644 --- a/sdk/include/reactos/undocshell.h +++ b/sdk/include/reactos/undocshell.h @@ -122,6 +122,7 @@ typedef struct _SHCNF_PRINTJOB_INFO #define SHCNF_PRINTJOBA 0x0004 #define SHCNF_PRINTJOBW 0x0007 +HRESULT WINAPI SHUpdateRecycleBinIcon(void); /**************************************************************************** * Shell Common Dialogs From 503e68f2c96197c22f85076df288aadfa1d6f3c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maj=20Sokli=C4=8D?= Date: Thu, 16 May 2024 03:32:49 +0200 Subject: [PATCH 154/182] [GITHUB] Fix builds by dropping VS2017 and retargeting to VS2022 (#6899) GitHub dropped VS2017 in the windows-latest runner: - https://github.com/actions/runner-images/issues/9701 - https://github.com/ilammy/msvc-dev-cmd/issues/80 Addendum to 0f81f463876. --- .github/workflows/build.yml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f29ff6bfdba..1c252a1548c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -85,13 +85,13 @@ jobs: strategy: matrix: os: [windows-latest] - toolset: ['14.2', '14.1'] # VS 2019, and 2017 (see below) + toolset: ['14.3','14.2'] # VS 2022, and 2019 (see below) arch: [i386, amd64] config: [Debug, Release] dllver: ['0x502', '0x600'] - exclude: # VS 2019, 2017 only with windows-latest + exclude: # Build NT6 ISOs only with the latest toolset when compiled as a debug build - dllver: 0x600 - toolset: '14.1' + toolset: 14.2 - dllver: 0x600 config: Release fail-fast: false @@ -145,7 +145,7 @@ jobs: build-msvc-arm: strategy: matrix: - toolset: ['14.2', '14.1'] # VS 2019, 2017 + toolset: ['14.3','14.2'] # VS 2022, 2019 arch: [arm, arm64] config: [Debug, Release] fail-fast: false @@ -222,6 +222,7 @@ jobs: name: reactos-syms-msvc${{matrix.toolset}}-${{matrix.arch}}-${{matrix.config}}-${{github.sha}} path: build/msvc_pdb + # FIXME: Does not boot on toolset 14.1, 14.3 is untested build-clang-cl: strategy: matrix: @@ -248,13 +249,13 @@ jobs: uses: ilammy/msvc-dev-cmd@v1 with: arch: amd64_x86 - toolset: '14.1' # latest masm build known to make bootable builds + toolset: '14.3' - name: Activate VS cmd (amd64) if: ${{ matrix.arch == 'amd64' }} uses: ilammy/msvc-dev-cmd@v1 with: arch: amd64 - toolset: '14.1' # latest masm build known to make bootable builds + toolset: '14.3' - name: Add LLVM to PATH run: echo "${env:LLVM_PATH}" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - name: Source checkout @@ -283,7 +284,7 @@ jobs: build-msbuild-i386: name: MSBuild (i386) - runs-on: windows-2019 + runs-on: windows-latest steps: - name: Install Flex and Bison run: | @@ -303,6 +304,6 @@ jobs: run: | mkdir build cd build - cmake -G "Visual Studio 16 2019" -A Win32 -DCMAKE_TOOLCHAIN_FILE:FILEPATH=toolchain-msvc.cmake -DARCH:STRING=i386 -DENABLE_ROSTESTS=1 -DENABLE_ROSAPPS=1 ${{github.workspace}}\src + cmake -G "Visual Studio 17 2022" -A Win32 -DCMAKE_TOOLCHAIN_FILE:FILEPATH=toolchain-msvc.cmake -DARCH:STRING=i386 -DENABLE_ROSTESTS=1 -DENABLE_ROSAPPS=1 ${{github.workspace}}\src - name: Build run: cmake --build ${{github.workspace}}\build --target bootcd --target livecd From f22704ad4f7b6b8633dcd505187b1769d57e11a2 Mon Sep 17 00:00:00 2001 From: Maj Soklic Date: Fri, 17 May 2024 01:58:36 +0200 Subject: [PATCH 155/182] [CRT] Fix ARM64 VS2022 debug build (#6899) __globallocalestatus is missing on VS2022/ARM64 just like on Clang-cl. Addendum to 861360c65f4. CORE-14042 CORE-18200 --- sdk/lib/crt/startup/crtexe.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/lib/crt/startup/crtexe.c b/sdk/lib/crt/startup/crtexe.c index afe23416b8d..2b5922f98c5 100644 --- a/sdk/lib/crt/startup/crtexe.c +++ b/sdk/lib/crt/startup/crtexe.c @@ -116,7 +116,7 @@ pre_c_init (void) { __setusermatherr (_matherr); } -#ifndef __clang__ /* FIXME: CORE-14042 */ +#if !defined(__clang__) && (!defined(_M_ARM64) || (_MSC_VER < 1930)) /* FIXME: CORE-14042 */ if (__globallocalestatus == -1) { } From a0eec982ce3331ac7dbf53b2e7f8eb99291f4a4d Mon Sep 17 00:00:00 2001 From: Eva Date: Fri, 17 May 2024 15:34:16 +0300 Subject: [PATCH 156/182] [README] Remove underscores between badges (#6896) --- README.md | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 1dfc7a9bda4..02a2e111509 100644 --- a/README.md +++ b/README.md @@ -8,23 +8,17 @@

- ReactOS 0.4.14 Release - + ReactOS 0.4.14 Release - Download ReactOS - + Download ReactOS - SourceForge Download - + SourceForge Download - License - + License - Donate - + Donate - Follow on Twitter - + Follow on Twitter

## Quick Links From ae029344451156f658712921ed7870dbbed21786 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Sat, 18 May 2024 20:42:22 +0900 Subject: [PATCH 157/182] [SHELL32] SHBrowseForFolder: Refactor brsfolder.c (#6903) dll/win32/shell32/wine/brsfolder.c. This file is too hard to read. Nobody reads. And WineHQ doesn't show no progress recently in this file. OUT OF DATE! JIRA issue: CORE-17340 - Rewrite some SendMessageW code by using TreeView_... macros. - Add BrsFolder_GetDataFromItem helper function and use it. --- dll/win32/shell32/wine/brsfolder.c | 374 +++++------------------------ 1 file changed, 57 insertions(+), 317 deletions(-) diff --git a/dll/win32/shell32/wine/brsfolder.c b/dll/win32/shell32/wine/brsfolder.c index 03a99ae8c3a..73028dfb321 100644 --- a/dll/win32/shell32/wine/brsfolder.c +++ b/dll/win32/shell32/wine/brsfolder.c @@ -18,7 +18,6 @@ * FIXME: * - many memory leaks * - many flags unimplemented - * - implement editbox */ #define WIN32_NO_STATUS @@ -39,24 +38,13 @@ #include "shell32_main.h" #include "shresdef.h" -#ifdef __REACTOS__ - #include - #include "ui/layout.h" /* Resizable window */ -#endif +#include +#include "ui/layout.h" /* Resizable window */ WINE_DEFAULT_DEBUG_CHANNEL(shell); #define SHV_CHANGE_NOTIFY (WM_USER + 0x1111) -#ifndef __REACTOS__ /* Defined in "layout.h" */ -/* original margins and control size */ -typedef struct tagLAYOUT_DATA -{ - LONG left, width, right; - LONG top, height, bottom; -} LAYOUT_DATA; -#endif - typedef struct tagbrowse_info { HWND hWnd; @@ -76,28 +64,12 @@ typedef struct tagTV_ITEMDATA IEnumIDList* pEnumIL; /* Children iterator */ } TV_ITEMDATA, *LPTV_ITEMDATA; -#ifndef __REACTOS__ /* Defined in "layout.h" */ -typedef struct tagLAYOUT_INFO -{ - int iItemId; /* control id */ - DWORD dwAnchor; /* BF_* flags specifying which margins should remain constant */ -} LAYOUT_INFO; -#endif - static const LAYOUT_INFO g_layout_info[] = { {IDC_BROWSE_FOR_FOLDER_TITLE, BF_TOP|BF_LEFT|BF_RIGHT}, {IDC_BROWSE_FOR_FOLDER_STATUS, BF_TOP|BF_LEFT|BF_RIGHT}, -#ifndef __REACTOS__ /* Duplicated */ - {IDC_BROWSE_FOR_FOLDER_FOLDER, BF_TOP|BF_LEFT|BF_RIGHT}, -#endif {IDC_BROWSE_FOR_FOLDER_TREEVIEW, BF_TOP|BF_BOTTOM|BF_LEFT|BF_RIGHT}, -#ifdef __REACTOS__ {IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, BF_TOP|BF_LEFT|BF_RIGHT}, -#else - {IDC_BROWSE_FOR_FOLDER_FOLDER, BF_BOTTOM|BF_LEFT}, - {IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, BF_BOTTOM|BF_LEFT|BF_RIGHT}, -#endif {IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, BF_BOTTOM|BF_LEFT}, {IDOK, BF_BOTTOM|BF_RIGHT}, {IDCANCEL, BF_BOTTOM|BF_RIGHT} @@ -131,69 +103,15 @@ static void browsefolder_callback( LPBROWSEINFOW lpBrowseInfo, HWND hWnd, lpBrowseInfo->lpfn( hWnd, msg, param, lpBrowseInfo->lParam ); } -#ifndef __REACTOS__ /* Defined in "layout.h" */ -static LAYOUT_DATA *LayoutInit(HWND hwnd, const LAYOUT_INFO *layout_info, int layout_count) +static LPTV_ITEMDATA +BrsFolder_GetDataFromItem(browse_info *info, HTREEITEM hItem) { - LAYOUT_DATA *data; - RECT rcWnd; - int i; - - GetClientRect(hwnd, &rcWnd); - data = SHAlloc(sizeof(LAYOUT_DATA)*layout_count); - for (i = 0; i < layout_count; i++) - { - RECT r; - HWND hItem = GetDlgItem(hwnd, layout_info[i].iItemId); - - if (hItem == NULL) - ERR("Item %d not found\n", i); - GetWindowRect(hItem, &r); - MapWindowPoints(HWND_DESKTOP, hwnd, (LPPOINT)&r, 2); - - data[i].left = r.left; - data[i].right = rcWnd.right - r.right; - data[i].width = r.right - r.left; - - data[i].top = r.top; - data[i].bottom = rcWnd.bottom - r.bottom; - data[i].height = r.bottom - r.top; - } - return data; -} - -static void LayoutUpdate(HWND hwnd, LAYOUT_DATA *data, const LAYOUT_INFO *layout_info, int layout_count) -{ - RECT rcWnd; - int i; - - GetClientRect(hwnd, &rcWnd); - for (i = 0; i < layout_count; i++) - { - RECT r; - HWND hItem = GetDlgItem(hwnd, layout_info[i].iItemId); - - GetWindowRect(hItem, &r); - MapWindowPoints(HWND_DESKTOP, hwnd, (LPPOINT)&r, 2); - - if (layout_info[i].dwAnchor & BF_RIGHT) - { - r.right = rcWnd.right - data[i].right; - if (!(layout_info[i].dwAnchor & BF_LEFT)) - r.left = r.right - data[i].width; - } - - if (layout_info[i].dwAnchor & BF_BOTTOM) - { - r.bottom = rcWnd.bottom - data[i].bottom; - if (!(layout_info[i].dwAnchor & BF_TOP)) - r.top = r.bottom - data[i].height; - } - - SetWindowPos(hItem, NULL, r.left, r.top, r.right - r.left, r.bottom - r.top, SWP_NOZORDER); - } + TVITEMW item = { TVIF_HANDLE | TVIF_PARAM }; + item.hItem = hItem; + if (!TreeView_GetItem(info->hwndTreeView, &item)) + ERR("TreeView_GetItem failed\n"); + return (LPTV_ITEMDATA)item.lParam; } -#endif - /****************************************************************************** * InitializeTreeView [Internal] @@ -220,7 +138,7 @@ static void InitializeTreeView( browse_info *info ) Shell_GetImageLists(NULL, &hImageList); if (hImageList) - SendMessageW( info->hwndTreeView, TVM_SETIMAGELIST, 0, (LPARAM)hImageList ); + TreeView_SetImageList(info->hwndTreeView, hImageList, 0); /* We want to call InsertTreeViewItem down the code, in order to insert * the root item of the treeview. Due to InsertTreeViewItem's signature, @@ -286,10 +204,10 @@ static void InitializeTreeView( browse_info *info ) return; } - SendMessageW( info->hwndTreeView, TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT ); + TreeView_DeleteItem(info->hwndTreeView, TVI_ROOT); item = InsertTreeViewItem( info, lpsfParent, pidlChild, pidlParent, pEnumChildren, TVI_ROOT ); - SendMessageW( info->hwndTreeView, TVM_EXPAND, TVE_EXPAND, (LPARAM)item ); + TreeView_Expand(info->hwndTreeView, item, TVE_EXPAND); ILFree(pidlChild); ILFree(pidlParent); @@ -465,17 +383,11 @@ static void FillTreeView( browse_info *info, IShellFolder * lpsf, IShellFolder_Release(pSFChild); } } -#ifdef __REACTOS__ if (ulAttrs != (ulAttrs & SFGAO_FOLDER)) { if (!InsertTreeViewItem(info, lpsf, pidlTemp, pidl, pEnumIL, hParent)) goto done; } -#else - - if (!InsertTreeViewItem(info, lpsf, pidlTemp, pidl, pEnumIL, hParent)) - goto done; -#endif SHFree(pidlTemp); /* Finally, free the pidl that the shell gave us... */ pidlTemp=NULL; } @@ -574,8 +486,7 @@ static LRESULT BrsFolder_Treeview_Expand( browse_info *info, NMTREEVIEWW *pnmtv /* My Computer is already sorted and trying to do a simple text * sort will only mess things up */ if (!_ILIsMyComputer(lptvid->lpi)) - SendMessageW( info->hwndTreeView, TVM_SORTCHILDREN, - FALSE, (LPARAM)pnmtv->itemNew.hItem ); + TreeView_SortChildren(info->hwndTreeView, pnmtv->itemNew.hItem, FALSE); return 0; } @@ -607,10 +518,8 @@ static LRESULT BrsFolder_Treeview_Rename(browse_info *info, NMTVDISPINFOW *pnmtv if(!pnmtv->item.pszText) return 0; - item.mask = TVIF_HANDLE|TVIF_PARAM; - item.hItem = (HTREEITEM)SendMessageW(info->hwndTreeView, TVM_GETNEXTITEM, TVGN_CARET, 0); - SendMessageW(info->hwndTreeView, TVM_GETITEMW, 0, (LPARAM)&item); - item_data = (LPTV_ITEMDATA)item.lParam; + item.hItem = TreeView_GetSelection(info->hwndTreeView); + item_data = BrsFolder_GetDataFromItem(info, item.hItem); SHGetPathFromIDListW(item_data->lpifq, old_path); if(!(p = strrchrW(old_path, '\\'))) @@ -628,40 +537,31 @@ static LRESULT BrsFolder_Treeview_Rename(browse_info *info, NMTVDISPINFOW *pnmtv IShellFolder_ParseDisplayName(item_data->lpsfParent, NULL, NULL, pnmtv->item.pszText, NULL, &item_data->lpi, NULL); - item.mask = TVIF_HANDLE|TVIF_TEXT; + item.mask = TVIF_HANDLE | TVIF_TEXT; item.pszText = pnmtv->item.pszText; - SendMessageW(info->hwndTreeView, TVM_SETITEMW, 0, (LPARAM)&item); + TreeView_SetItem(info->hwndTreeView, &item); nmtv.itemNew.lParam = item.lParam; BrsFolder_Treeview_Changed(info, &nmtv); return 0; } -static HRESULT BrsFolder_Rename(browse_info *info, HTREEITEM rename) +static HRESULT BrsFolder_Rename(browse_info *info, HTREEITEM hItem) { - SendMessageW(info->hwndTreeView, TVM_SELECTITEM, TVGN_CARET, (LPARAM)rename); - SendMessageW(info->hwndTreeView, TVM_EDITLABELW, 0, (LPARAM)rename); + TreeView_SelectItem(info->hwndTreeView, hItem); + TreeView_EditLabel(info->hwndTreeView, hItem); return S_OK; } -#ifdef __REACTOS__ static void BrsFolder_Delete(browse_info *info, HTREEITEM selected_item) { - TV_ITEMW item; TV_ITEMDATA *item_data; SHFILEOPSTRUCTW fileop = { info->hwndTreeView }; WCHAR szzFrom[MAX_PATH + 1]; /* get item_data */ - item.mask = TVIF_HANDLE | TVIF_PARAM; - item.hItem = selected_item; - if (!SendMessageW(info->hwndTreeView, TVM_GETITEMW, 0, (LPARAM)&item)) - { - ERR("TVM_GETITEMW failed\n"); - return; - } - item_data = (TV_ITEMDATA *)item.lParam; + item_data = BrsFolder_GetDataFromItem(info, selected_item); /* get the path */ if (!SHGetPathFromIDListW(item_data->lpifq, szzFrom)) @@ -677,20 +577,16 @@ BrsFolder_Delete(browse_info *info, HTREEITEM selected_item) fileop.wFunc = FO_DELETE; SHFileOperationW(&fileop); } -#endif + static LRESULT BrsFolder_Treeview_Keydown(browse_info *info, LPNMTVKEYDOWN keydown) { HTREEITEM selected_item; /* Old dialog doesn't support those advanced features */ -#ifdef __REACTOS__ if (!(info->lpBrowseInfo->ulFlags & BIF_USENEWUI)) -#else - if (!(info->lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE)) -#endif return 0; - selected_item = (HTREEITEM)SendMessageW(info->hwndTreeView, TVM_GETNEXTITEM, TVGN_CARET, 0); + selected_item = TreeView_GetSelection(info->hwndTreeView); switch (keydown->wVKey) { @@ -698,32 +594,7 @@ static LRESULT BrsFolder_Treeview_Keydown(browse_info *info, LPNMTVKEYDOWN keydo BrsFolder_Rename(info, selected_item); break; case VK_DELETE: - { -#ifdef __REACTOS__ - BrsFolder_Delete(info, selected_item); -#else - const ITEMIDLIST *item_id; - ISFHelper *psfhlp; - HRESULT hr; - TVITEMW item; - TV_ITEMDATA *item_data; - - item.mask = TVIF_PARAM; - item.mask = TVIF_HANDLE|TVIF_PARAM; - item.hItem = selected_item; - SendMessageW(info->hwndTreeView, TVM_GETITEMW, 0, (LPARAM)&item); - item_data = (TV_ITEMDATA *)item.lParam; - item_id = item_data->lpi; - - hr = IShellFolder_QueryInterface(item_data->lpsfParent, &IID_ISFHelper, (void**)&psfhlp); - if(FAILED(hr)) - return 0; - - /* perform the item deletion - tree view gets updated over shell notification */ - ISFHelper_DeleteItems(psfhlp, 1, &item_id); - ISFHelper_Release(psfhlp); -#endif - } + BrsFolder_Delete(info, selected_item); break; } return 0; @@ -782,15 +653,10 @@ static BOOL BrsFolder_OnCreate( HWND hWnd, browse_info *info ) if (lpBrowseInfo->ulFlags & ~SUPPORTEDFLAGS) FIXME("flags %x not implemented\n", lpBrowseInfo->ulFlags & ~SUPPORTEDFLAGS); -#ifdef __REACTOS__ if (lpBrowseInfo->ulFlags & BIF_USENEWUI) -#else - if (lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE) -#endif { RECT rcWnd; -#ifdef __REACTOS__ /* Resize the treeview if there's not editbox */ if ((lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE) && !(lpBrowseInfo->ulFlags & BIF_EDITBOX)) @@ -811,9 +677,6 @@ static BOOL BrsFolder_OnCreate( HWND hWnd, browse_info *info ) info->layout = LayoutInit(hWnd, g_layout_info, LAYOUT_INFO_COUNT); else info->layout = NULL; -#else - info->layout = LayoutInit(hWnd, g_layout_info, LAYOUT_INFO_COUNT); -#endif /* TODO: Windows allows shrinking the windows a bit */ GetWindowRect(hWnd, &rcWnd); @@ -831,11 +694,7 @@ static BOOL BrsFolder_OnCreate( HWND hWnd, browse_info *info ) ShowWindow( GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_TITLE), SW_HIDE ); if (!(lpBrowseInfo->ulFlags & BIF_STATUSTEXT) -#ifdef __REACTOS__ || (lpBrowseInfo->ulFlags & BIF_USENEWUI)) -#else - || (lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE)) -#endif ShowWindow( GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_STATUS), SW_HIDE ); /* Hide "Make New Folder" Button? */ @@ -854,18 +713,6 @@ static BOOL BrsFolder_OnCreate( HWND hWnd, browse_info *info ) if (info->hwndTreeView) { InitializeTreeView( info ); - -#ifndef __REACTOS__ - /* Resize the treeview if there's not editbox */ - if ((lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE) - && !(lpBrowseInfo->ulFlags & BIF_EDITBOX)) - { - RECT rc; - GetClientRect(info->hwndTreeView, &rc); - SetWindowPos(info->hwndTreeView, HWND_TOP, 0, 0, - rc.right, rc.bottom + 40, SWP_NOMOVE); - } -#endif } else ERR("treeview control missing!\n"); @@ -878,39 +725,28 @@ static BOOL BrsFolder_OnCreate( HWND hWnd, browse_info *info ) info->hNotify = SHChangeNotifyRegister(hWnd, SHCNRF_InterruptLevel, SHCNE_ALLEVENTS, SHV_CHANGE_NOTIFY, 1, &ntreg); -#ifdef __REACTOS__ SetFocus(info->hwndTreeView); -#endif browsefolder_callback( info->lpBrowseInfo, hWnd, BFFM_INITIALIZED, 0 ); -#ifdef __REACTOS__ SHAutoComplete(GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT), (SHACF_FILESYS_ONLY | SHACF_URLHISTORY | SHACF_FILESYSTEM)); return TRUE; -#else - return TRUE; -#endif } static HRESULT BrsFolder_NewFolder(browse_info *info) { DWORD flags = BrowseFlagsToSHCONTF(info->lpBrowseInfo->ulFlags); IShellFolder *desktop, *cur; -#ifdef __REACTOS__ WCHAR wszNewFolder[25]; WCHAR path[MAX_PATH]; -#else - ISFHelper *sfhelper; -#endif WCHAR name[MAX_PATH]; - HTREEITEM parent, added; + HTREEITEM hParent, hAdded; LPTV_ITEMDATA item_data; LPITEMIDLIST new_item; TVITEMW item; HRESULT hr; int len; -#ifdef __REACTOS__ hr = SHGetDesktopFolder(&desktop); if(FAILED(hr)) return hr; @@ -941,55 +777,22 @@ static HRESULT BrsFolder_NewFolder(browse_info *info) len = strlenW(path); if(lenpidlRet) { - ERR("Make new folder button should be disabled\n"); - return E_FAIL; - } - - /* Create new directory */ - hr = SHGetDesktopFolder(&desktop); - if(FAILED(hr)) - return hr; - - hr = IShellFolder_BindToObject(desktop, info->pidlRet, 0, &IID_IShellFolder, (void**)&cur); - IShellFolder_Release(desktop); - if(FAILED(hr)) - return hr; - - hr = IShellFolder_QueryInterface(cur, &IID_ISFHelper, (void**)&sfhelper); - if(FAILED(hr)) - return hr; - - if(!SHGetPathFromIDListW(info->pidlRet, name)) { - hr = E_FAIL; - goto cleanup; - } - - len = strlenW(name); - if(lenhwndTreeView, TVM_GETNEXTITEM, TVGN_CARET, 0); - if(!parent) + hParent = TreeView_GetSelection(info->hwndTreeView); + if(!hParent) goto cleanup; - SendMessageW(info->hwndTreeView, TVM_EXPAND, TVE_EXPAND, (LPARAM)parent); + TreeView_Expand(info->hwndTreeView, hParent, TVE_EXPAND); memset(&item, 0, sizeof(TVITEMW)); item.mask = TVIF_PARAM|TVIF_STATE; - item.hItem = parent; - SendMessageW(info->hwndTreeView, TVM_GETITEMW, 0, (LPARAM)&item); + item.hItem = hParent; + TreeView_GetItem(info->hwndTreeView, &item); item_data = (LPTV_ITEMDATA)item.lParam; if(!item_data) goto cleanup; @@ -1005,19 +808,19 @@ static HRESULT BrsFolder_NewFolder(browse_info *info) item.mask = TVIF_STATE; item.state = TVIS_EXPANDEDONCE; item.stateMask = TVIS_EXPANDEDONCE; - SendMessageW(info->hwndTreeView, TVM_SETITEMW, 0, (LPARAM)&item); + TreeView_SetItem(info->hwndTreeView, &item); } hr = IShellFolder_ParseDisplayName(cur, NULL, NULL, name+len, NULL, &new_item, NULL); if(FAILED(hr)) goto cleanup; - added = InsertTreeViewItem(info, cur, new_item, item_data->lpifq, NULL, parent); + hAdded = InsertTreeViewItem(info, cur, new_item, item_data->lpifq, NULL, hParent); IShellFolder_Release(cur); SHFree(new_item); - SendMessageW(info->hwndTreeView, TVM_SORTCHILDREN, FALSE, (LPARAM)parent); - return BrsFolder_Rename(info, added); + TreeView_SortChildren(info->hwndTreeView, hParent, FALSE); + return BrsFolder_Rename(info, hAdded); cleanup: return hr; @@ -1026,14 +829,11 @@ static HRESULT BrsFolder_NewFolder(browse_info *info) static BOOL BrsFolder_OnCommand( browse_info *info, UINT id ) { LPBROWSEINFOW lpBrowseInfo = info->lpBrowseInfo; -#ifdef __REACTOS__ WCHAR szPath[MAX_PATH]; -#endif switch (id) { case IDOK: -#ifdef __REACTOS__ /* Get the text */ GetDlgItemTextW(info->hWnd, IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, szPath, _countof(szPath)); StrTrimW(szPath, L" \t"); @@ -1048,12 +848,10 @@ static BOOL BrsFolder_OnCommand( browse_info *info, UINT id ) { info->pidlRet = ILClone(info->pidlRet); } -#endif if (info->pidlRet == NULL) /* A null pidl would mean a cancel */ info->pidlRet = _ILCreateDesktop(); pdump( info->pidlRet ); if (lpBrowseInfo->pszDisplayName) -#ifdef __REACTOS__ { SHFILEINFOW fileInfo = { NULL }; lpBrowseInfo->pszDisplayName[0] = UNICODE_NULL; @@ -1063,9 +861,6 @@ static BOOL BrsFolder_OnCommand( browse_info *info, UINT id ) lstrcpynW(lpBrowseInfo->pszDisplayName, fileInfo.szDisplayName, MAX_PATH); } } -#else - SHGetPathFromIDListW( info->pidlRet, lpBrowseInfo->pszDisplayName ); -#endif EndDialog( info->hWnd, 1 ); return TRUE; @@ -1105,14 +900,12 @@ static BOOL BrsFolder_OnSetExpanded(browse_info *info, LPVOID selection, if (FAILED(hr)) goto done; } -#ifdef __REACTOS__ if (_ILIsDesktop(pidlSelection)) { item.hItem = TVI_ROOT; bResult = TRUE; goto done; } -#endif /* Move pidlCurrent behind the SHITEMIDs in pidlSelection, which are the root of * the sub-tree currently displayed. */ @@ -1129,17 +922,16 @@ static BOOL BrsFolder_OnSetExpanded(browse_info *info, LPVOID selection, /* Initialize item to point to the first child of the root folder. */ item.mask = TVIF_PARAM; - item.hItem = (HTREEITEM)SendMessageW(info->hwndTreeView, TVM_GETNEXTITEM, TVGN_ROOT, 0); + item.hItem = TreeView_GetRoot(info->hwndTreeView); if (item.hItem) - item.hItem = (HTREEITEM)SendMessageW(info->hwndTreeView, TVM_GETNEXTITEM, TVGN_CHILD, - (LPARAM)item.hItem); + item.hItem = TreeView_GetChild(info->hwndTreeView, item.hItem); /* Walk the tree along the nodes corresponding to the remaining ITEMIDLIST */ while (item.hItem && !_ILIsEmpty(pidlCurrent)) { LPTV_ITEMDATA pItemData; - SendMessageW(info->hwndTreeView, TVM_GETITEMW, 0, (LPARAM)&item); + TreeView_GetItem(info->hwndTreeView, &item); pItemData = (LPTV_ITEMDATA)item.lParam; if (_ILIsEqualSimple(pItemData->lpi, pidlCurrent)) { @@ -1147,13 +939,11 @@ static BOOL BrsFolder_OnSetExpanded(browse_info *info, LPVOID selection, if (!_ILIsEmpty(pidlCurrent)) { /* Only expand current node and move on to its first child, * if we didn't already reach the last SHITEMID */ - SendMessageW(info->hwndTreeView, TVM_EXPAND, TVE_EXPAND, (LPARAM)item.hItem); - item.hItem = (HTREEITEM)SendMessageW(info->hwndTreeView, TVM_GETNEXTITEM, TVGN_CHILD, - (LPARAM)item.hItem); + TreeView_Expand(info->hwndTreeView, item.hItem, TVE_EXPAND); + item.hItem = TreeView_GetChild(info->hwndTreeView, item.hItem); } } else { - item.hItem = (HTREEITEM)SendMessageW(info->hwndTreeView, TVM_GETNEXTITEM, TVGN_NEXT, - (LPARAM)item.hItem); + item.hItem = TreeView_GetNextSibling(info->hwndTreeView, item.hItem); } } @@ -1178,7 +968,7 @@ static BOOL BrsFolder_OnSetSelectionW(browse_info *info, LPVOID selection, BOOL bResult = BrsFolder_OnSetExpanded(info, selection, is_str, &hItem); if (bResult) - SendMessageW(info->hwndTreeView, TVM_SELECTITEM, TVGN_CARET, (LPARAM)hItem ); + TreeView_SelectItem(info->hwndTreeView, hItem); return bResult; } @@ -1201,33 +991,11 @@ static BOOL BrsFolder_OnSetSelectionA(browse_info *info, LPVOID selection, BOOL return result; } -#ifndef __REACTOS__ /* This is a buggy way (resize on title bar) */ -static LRESULT BrsFolder_OnWindowPosChanging(browse_info *info, WINDOWPOS *pos) -{ -#ifdef __REACTOS__ - if ((info->lpBrowseInfo->ulFlags & BIF_USENEWUI) && !(pos->flags & SWP_NOSIZE)) -#else - if ((info->lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE) && !(pos->flags & SWP_NOSIZE)) -#endif - { - if (pos->cx < info->szMin.cx) - pos->cx = info->szMin.cx; - if (pos->cy < info->szMin.cy) - pos->cy = info->szMin.cy; - } - return 0; -} -#endif - static INT BrsFolder_OnDestroy(browse_info *info) { if (info->layout) { -#ifdef __REACTOS__ LayoutDestroy(info->layout); -#else - SHFree(info->layout); -#endif info->layout = NULL; } @@ -1239,27 +1007,23 @@ static INT BrsFolder_OnDestroy(browse_info *info) /* Find a treeview node by recursively walking the treeview */ static HTREEITEM BrsFolder_FindItemByPidl(browse_info *info, LPCITEMIDLIST pidl, HTREEITEM hItem) { - TV_ITEMW item; TV_ITEMDATA *item_data; HRESULT hr; - item.mask = TVIF_HANDLE | TVIF_PARAM; - item.hItem = hItem; - SendMessageW(info->hwndTreeView, TVM_GETITEMW, 0, (LPARAM)&item); - item_data = (TV_ITEMDATA *)item.lParam; + item_data = BrsFolder_GetDataFromItem(info, hItem); hr = IShellFolder_CompareIDs(item_data->lpsfParent, 0, item_data->lpifq, pidl); if(SUCCEEDED(hr) && !HRESULT_CODE(hr)) return hItem; - hItem = (HTREEITEM)SendMessageW(info->hwndTreeView, TVM_GETNEXTITEM, TVGN_CHILD, (LPARAM)hItem); + hItem = TreeView_GetChild(info->hwndTreeView, hItem); while (hItem) { HTREEITEM newItem = BrsFolder_FindItemByPidl(info, pidl, hItem); if (newItem) return newItem; - hItem = (HTREEITEM)SendMessageW(info->hwndTreeView, TVM_GETNEXTITEM, TVGN_NEXT, (LPARAM)hItem); + hItem = TreeView_GetNextSibling(info->hwndTreeView, hItem); } return NULL; } @@ -1275,12 +1039,10 @@ static LRESULT BrsFolder_OnChange(browse_info *info, const LPCITEMIDLIST *pidls, case SHCNE_RMDIR: case SHCNE_DELETE: { - HTREEITEM handle_root = (HTREEITEM)SendMessageW(info->hwndTreeView, TVM_GETNEXTITEM, TVGN_ROOT, 0); - HTREEITEM handle_item = BrsFolder_FindItemByPidl(info, pidls[0], handle_root); - - if (handle_item) - SendMessageW(info->hwndTreeView, TVM_DELETEITEM, 0, (LPARAM)handle_item); - + HTREEITEM hRoot = TreeView_GetRoot(info->hwndTreeView); + HTREEITEM hItem = BrsFolder_FindItemByPidl(info, pidls[0], hRoot); + if (hItem) + TreeView_DeleteItem(info->hwndTreeView, hItem); break; } } @@ -1310,15 +1072,10 @@ static INT_PTR CALLBACK BrsFolderDlgProc( HWND hWnd, UINT msg, WPARAM wParam, case WM_COMMAND: return BrsFolder_OnCommand( info, wParam ); -#ifdef __REACTOS__ case WM_GETMINMAXINFO: ((LPMINMAXINFO)lParam)->ptMinTrackSize.x = info->szMin.cx; ((LPMINMAXINFO)lParam)->ptMinTrackSize.y = info->szMin.cy; return 0; -#else /* This is a buggy way (resize on title bar) */ - case WM_WINDOWPOSCHANGING: - return BrsFolder_OnWindowPosChanging( info, (WINDOWPOS *)lParam); -#endif case WM_SIZE: if (info->layout) /* new style dialogs */ @@ -1409,7 +1166,6 @@ LPITEMIDLIST WINAPI SHBrowseForFolderA (LPBROWSEINFOA lpbi) return lpid; } - /************************************************************************* * SHBrowseForFolderW [SHELL32.@] * @@ -1419,42 +1175,26 @@ LPITEMIDLIST WINAPI SHBrowseForFolderA (LPBROWSEINFOA lpbi) LPITEMIDLIST WINAPI SHBrowseForFolderW (LPBROWSEINFOW lpbi) { browse_info info; - DWORD r; + INT_PTR r; HRESULT hr; -#ifdef __REACTOS__ WORD wDlgId; -#else - const WCHAR * templateName; - INITCOMMONCONTROLSEX icex; -#endif - info.hWnd = 0; + info.hWnd = NULL; info.pidlRet = NULL; info.lpBrowseInfo = lpbi; info.hwndTreeView = NULL; - -#ifdef __REACTOS__ info.layout = NULL; -#else - icex.dwSize = sizeof( icex ); - icex.dwICC = ICC_TREEVIEW_CLASSES; - InitCommonControlsEx( &icex ); -#endif hr = OleInitialize(NULL); -#ifdef __REACTOS__ - if (lpbi->ulFlags & BIF_USENEWUI) -#else - if (lpbi->ulFlags & BIF_NEWDIALOGSTYLE) -#endif - wDlgId = IDD_BROWSE_FOR_FOLDER_NEW; - else - wDlgId = IDD_BROWSE_FOR_FOLDER; - r = DialogBoxParamW( shell32_hInstance, MAKEINTRESOURCEW(wDlgId), lpbi->hwndOwner, - BrsFolderDlgProc, (LPARAM)&info ); - if (SUCCEEDED(hr)) + wDlgId = ((lpbi->ulFlags & BIF_USENEWUI) ? IDD_BROWSE_FOR_FOLDER_NEW : IDD_BROWSE_FOR_FOLDER); + + r = DialogBoxParamW(shell32_hInstance, MAKEINTRESOURCEW(wDlgId), lpbi->hwndOwner, + BrsFolderDlgProc, (LPARAM)&info ); + + if (SUCCEEDED(hr)) OleUninitialize(); + if (!r) { ILFree(info.pidlRet); From 6c2d1c31ddfdb0677c1bc9d11c8ae602615fc53b Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Sat, 18 May 2024 21:33:33 +0900 Subject: [PATCH 158/182] [SHLWAPI][SDK] Add IShellFolder_... helper functions (#6893) Implementing missing features... JIRA issue: CORE-19278 - Implement IShellFolder_GetDisplayNameOf, IShellFolder_ParseDisplayName, and IShellFolder_CompareIDs functions. - Add them to . - Modify shlwapi.spec. - Add some SHCIDS_... macros into shobjidl.idl. - Provide a macro option SHLWAPI_ISHELLFOLDER_HELPERS to avoid conflict with IShellFolder_... inline functions. Ugly hack but effective! --- dll/win32/shlwapi/shlwapi.spec | 6 +- dll/win32/shlwapi/utils.cpp | 120 +++++++++++++++++++++++++++- sdk/include/psdk/shobjidl.idl | 8 +- sdk/include/reactos/shlwapi_undoc.h | 34 ++++++++ 4 files changed, 161 insertions(+), 7 deletions(-) diff --git a/dll/win32/shlwapi/shlwapi.spec b/dll/win32/shlwapi/shlwapi.spec index 821a2ed241c..cc625b5a84a 100644 --- a/dll/win32/shlwapi/shlwapi.spec +++ b/dll/win32/shlwapi/shlwapi.spec @@ -313,8 +313,8 @@ 313 stdcall -noname SHGetFileInfoWrapW(ptr long ptr long long) 314 stdcall -noname RegisterClassExWrapW(ptr) user32.RegisterClassExW 315 stdcall -noname GetClassInfoExWrapW(long wstr ptr) user32.GetClassInfoExW -316 stub -noname IShellFolder_GetDisplayNameOf -317 stub -noname IShellFolder_ParseDisplayName +316 stdcall -noname IShellFolder_GetDisplayNameOf(ptr ptr long ptr long) +317 stdcall -noname IShellFolder_ParseDisplayName(ptr ptr ptr wstr ptr ptr ptr) 318 stdcall -noname DragQueryFileWrapW(long long wstr long) 319 stdcall -noname FindWindowExWrapW(long long wstr wstr) user32.FindWindowExW 320 stdcall -noname RegisterMIMETypeForExtensionA(str str) @@ -548,7 +548,7 @@ 548 stdcall -noname SHAreIconsEqual(ptr ptr) 549 stdcall -noname SHCoCreateInstanceAC(ptr ptr long ptr ptr) 550 stub -noname GetTemplateInfoFromHandle -551 stub -noname IShellFolder_CompareIDs +551 stdcall -noname IShellFolder_CompareIDs(ptr ptr ptr ptr) 552 stdcall -stub -noname -version=0x501-0x502 SHEvaluateSystemCommandTemplate(wstr ptr ptr ptr) 553 stdcall IsInternetESCEnabled() 554 stdcall -noname -stub SHGetAllAccessSA() diff --git a/dll/win32/shlwapi/utils.cpp b/dll/win32/shlwapi/utils.cpp index 673d6d77f99..3a5db3516ac 100644 --- a/dll/win32/shlwapi/utils.cpp +++ b/dll/win32/shlwapi/utils.cpp @@ -2,17 +2,35 @@ * PROJECT: ReactOS Shell * LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later) * PURPOSE: Implement shell light-weight utility functions - * COPYRIGHT: Copyright 2023 Katayama Hirofumi MZ + * COPYRIGHT: Copyright 2023-2024 Katayama Hirofumi MZ */ #define _ATL_NO_EXCEPTIONS + +/* + * HACK! These functions are conflicting with inline functions... + */ +#define IShellFolder_GetDisplayNameOf _disabled_IShellFolder_GetDisplayNameOf_ +#define IShellFolder_ParseDisplayName _disabled_IShellFolder_ParseDisplayName_ +#define IShellFolder_CompareIDs _disabled_IShellFolder_CompareIDs_ + #include "precomp.h" #include #include -#include #include #include #include + +/* + * HACK! + */ +#undef IShellFolder_GetDisplayNameOf +#undef IShellFolder_ParseDisplayName +#undef IShellFolder_CompareIDs + +#define SHLWAPI_ISHELLFOLDER_HELPERS /* HACK! */ +#include + #include WINE_DEFAULT_DEBUG_CHANNEL(shell); @@ -115,3 +133,101 @@ PathFileExistsDefExtAndAttributesW( return TRUE; } + +static inline BOOL +SHLWAPI_IsBogusHRESULT(HRESULT hr) +{ + return (hr == E_FAIL || hr == E_INVALIDARG || hr == E_NOTIMPL); +} + +/************************************************************************* + * IShellFolder_GetDisplayNameOf [SHLWAPI.316] + */ +EXTERN_C HRESULT WINAPI +IShellFolder_GetDisplayNameOf( + _In_ IShellFolder *psf, + _In_ LPCITEMIDLIST pidl, + _In_ DWORD uFlags, + _Out_ LPSTRRET lpName, + _In_ DWORD dwRetryFlags) +{ + HRESULT hr; + + TRACE("(%p)->(%p, 0x%lX, %p, 0x%lX)\n", psf, pidl, uFlags, lpName, dwRetryFlags); + + hr = psf->GetDisplayNameOf(pidl, uFlags, lpName); + if (!SHLWAPI_IsBogusHRESULT(hr)) + return hr; + + dwRetryFlags |= 0x80000000; + + if ((uFlags & SHGDN_FORPARSING) == 0) + dwRetryFlags |= SFGDNO_RETRYWITHFORPARSING; + + /* It seems the function is actually retrying here */ + FIXME("dwRetryFlags: 0x%X\n", dwRetryFlags); + + return hr; +} + +/************************************************************************* + * IShellFolder_ParseDisplayName [SHLWAPI.317] + */ +EXTERN_C HRESULT WINAPI +IShellFolder_ParseDisplayName( + _In_ IShellFolder *psf, + _In_opt_ HWND hwndOwner, + _In_opt_ LPBC pbcReserved, + _In_ LPOLESTR lpszDisplayName, + _Out_opt_ ULONG *pchEaten, + _Out_opt_ PIDLIST_RELATIVE *ppidl, + _Out_opt_ ULONG *pdwAttributes) +{ + ULONG dummy1, dummy2; + + TRACE("(%p)->(%p, %p, %s, %p, %p, %p)\n", psf, hwndOwner, pbcReserved, + debugstr_w(lpszDisplayName), pchEaten, ppidl, pdwAttributes); + + if (!pdwAttributes) + { + dummy1 = 0; + pdwAttributes = &dummy1; + } + + if (!pchEaten) + { + dummy2 = 0; + pchEaten = &dummy2; + } + + if (ppidl) + *ppidl = NULL; + + return psf->ParseDisplayName(hwndOwner, pbcReserved, lpszDisplayName, pchEaten, + ppidl, pdwAttributes); +} + +/************************************************************************* + * IShellFolder_CompareIDs [SHLWAPI.551] + */ +EXTERN_C HRESULT WINAPI +IShellFolder_CompareIDs( + _In_ IShellFolder *psf, + _In_ LPARAM lParam, + _In_ PCUIDLIST_RELATIVE pidl1, + _In_ PCUIDLIST_RELATIVE pidl2) +{ + TRACE("(%p, %p, %p, %p)\n", psf, lParam, pidl1, pidl2); + + if (lParam & ~(SIZE_T)SHCIDS_COLUMNMASK) + { + /* Try as IShellFolder2 if possible */ + HRESULT hr = psf->QueryInterface(IID_IShellFolder2, (void **)&psf); + if (FAILED(hr)) + lParam &= SHCIDS_COLUMNMASK; + else + psf->Release(); + } + + return psf->CompareIDs(lParam, pidl1, pidl2); +} diff --git a/sdk/include/psdk/shobjidl.idl b/sdk/include/psdk/shobjidl.idl index 6b4bdadffc9..b7958e2e8fe 100644 --- a/sdk/include/psdk/shobjidl.idl +++ b/sdk/include/psdk/shobjidl.idl @@ -218,6 +218,12 @@ interface IShellFolder : IUnknown cpp_quote("#define SFGAO_STORAGEANCESTOR 0x00800000L") cpp_quote("#define SFGAO_STORAGECAPMASK 0x70C50008L") cpp_quote("#define SFGAO_PKEYSFGAOMASK 0x81044000L") + typedef ULONG SFGAOF; + + cpp_quote("#define SHCIDS_COLUMNMASK 0x0000FFFFL") + cpp_quote("#define SHCIDS_BITMASK 0xFFFF0000L") + cpp_quote("#define SHCIDS_CANONICALONLY 0x10000000L") + cpp_quote("#define SHCIDS_ALLFIELDS 0x80000000L") cpp_quote("#define STR_PARSE_SHELL_PROTOCOL_TO_FILE_OBJECTS L\"Parse Shell Protocol To File Objects\"") cpp_quote("#define STR_FILE_SYS_BIND_DATA L\"File System Bind Data\"") @@ -225,8 +231,6 @@ interface IShellFolder : IUnknown cpp_quote("#define STR_PARSE_TRANSLATE_ALIASES L\"Parse Translate Aliases\"") cpp_quote("#define STR_DONT_PARSE_RELATIVE L\"Don't Parse Relative\"") - typedef ULONG SFGAOF; - HRESULT ParseDisplayName( [in] HWND hwndOwner, [in] LPBC pbcReserved, diff --git a/sdk/include/reactos/shlwapi_undoc.h b/sdk/include/reactos/shlwapi_undoc.h index cd2cc1882b8..eb002d4a170 100644 --- a/sdk/include/reactos/shlwapi_undoc.h +++ b/sdk/include/reactos/shlwapi_undoc.h @@ -332,6 +332,40 @@ IContextMenu_Invoke( DWORD WINAPI SHGetObjectCompatFlags(IUnknown *pUnk, const CLSID *clsid); +/* + * HACK! These functions are conflicting with inline functions... + * We provide a macro option SHLWAPI_ISHELLFOLDER_HELPERS for using these functions. + */ +#ifdef SHLWAPI_ISHELLFOLDER_HELPERS +HRESULT WINAPI +IShellFolder_GetDisplayNameOf( + _In_ IShellFolder *psf, + _In_ LPCITEMIDLIST pidl, + _In_ DWORD uFlags, + _Out_ LPSTRRET lpName, + _In_ DWORD dwRetryFlags); + +/* Flags for IShellFolder_GetDisplayNameOf */ +#define SFGDNO_RETRYWITHFORPARSING 1 + +HRESULT WINAPI +IShellFolder_ParseDisplayName( + _In_ IShellFolder *psf, + _In_ HWND hwndOwner, + _In_ LPBC pbcReserved, + _In_ LPOLESTR lpszDisplayName, + _Out_ ULONG *pchEaten, + _Out_ PIDLIST_RELATIVE *ppidl, + _Out_ ULONG *pdwAttributes); + +EXTERN_C HRESULT WINAPI +IShellFolder_CompareIDs( + _In_ IShellFolder *psf, + _In_ LPARAM lParam, + _In_ PCUIDLIST_RELATIVE pidl1, + _In_ PCUIDLIST_RELATIVE pidl2); +#endif /* SHLWAPI_ISHELLFOLDER_HELPERS */ + #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ From 5246c2cc5651ae9866d1354c868b799119ce48e8 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Sat, 18 May 2024 21:35:48 +0900 Subject: [PATCH 159/182] [SHELL32] Introduce 'HDELFILE' handle type (#6902) Generic HANDLE type is vague and unreadable. Declare a special handle type for recycle bin items. JIRA issue: CORE-19595 - Declare the HDELFILE handle by DECLARE_HANDLE(HDELFILE);. - Use HDELFILE instead of HANDLE for deleted items. --- dll/win32/shell32/folders/CRecycleBin.cpp | 14 +++++++------- dll/win32/shell32/shellrecyclebin/recyclebin.c | 12 ++++++------ dll/win32/shell32/shellrecyclebin/recyclebin.h | 17 ++++++++++------- 3 files changed, 23 insertions(+), 20 deletions(-) diff --git a/dll/win32/shell32/folders/CRecycleBin.cpp b/dll/win32/shell32/folders/CRecycleBin.cpp index 3ade1981118..3b60df00895 100644 --- a/dll/win32/shell32/folders/CRecycleBin.cpp +++ b/dll/win32/shell32/folders/CRecycleBin.cpp @@ -62,14 +62,14 @@ static const columninfo RecycleBinColumns[] = * Recycle Bin folder */ -BOOL WINAPI CBSearchRecycleBin(IN PVOID Context, IN HANDLE hDeletedFile); +BOOL WINAPI CBSearchRecycleBin(IN PVOID Context, IN HDELFILE hDeletedFile); static PIDLRecycleStruct * _ILGetRecycleStruct(LPCITEMIDLIST pidl); typedef struct _SEARCH_CONTEXT { PIDLRecycleStruct *pFileDetails; - HANDLE hDeletedFile; + HDELFILE hDeletedFile; BOOL bFound; } SEARCH_CONTEXT, *PSEARCH_CONTEXT; @@ -122,8 +122,8 @@ class CRecycleBinEnum : CRecycleBinEnum(); ~CRecycleBinEnum(); HRESULT WINAPI Initialize(DWORD dwFlags); - static BOOL WINAPI CBEnumRecycleBin(IN PVOID Context, IN HANDLE hDeletedFile); - BOOL WINAPI CBEnumRecycleBin(IN HANDLE hDeletedFile); + static BOOL WINAPI CBEnumRecycleBin(IN PVOID Context, IN HDELFILE hDeletedFile); + BOOL WINAPI CBEnumRecycleBin(IN HDELFILE hDeletedFile); BEGIN_COM_MAP(CRecycleBinEnum) COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList) @@ -155,7 +155,7 @@ class CRecycleBinItemContextMenu : END_COM_MAP() }; -BOOL WINAPI CBSearchRecycleBin(IN PVOID Context, IN HANDLE hDeletedFile) +BOOL WINAPI CBSearchRecycleBin(IN PVOID Context, IN HDELFILE hDeletedFile) { PSEARCH_CONTEXT pContext = (PSEARCH_CONTEXT)Context; @@ -273,12 +273,12 @@ static LPITEMIDLIST _ILCreateRecycleItem(PDELETED_FILE_DETAILS_W pFileDetails) return pidl; } -BOOL WINAPI CRecycleBinEnum::CBEnumRecycleBin(IN PVOID Context, IN HANDLE hDeletedFile) +BOOL WINAPI CRecycleBinEnum::CBEnumRecycleBin(IN PVOID Context, IN HDELFILE hDeletedFile) { return static_cast(Context)->CBEnumRecycleBin(hDeletedFile); } -BOOL WINAPI CRecycleBinEnum::CBEnumRecycleBin(IN HANDLE hDeletedFile) +BOOL WINAPI CRecycleBinEnum::CBEnumRecycleBin(IN HDELFILE hDeletedFile) { PDELETED_FILE_DETAILS_W pFileDetails; DWORD dwSize; diff --git a/dll/win32/shell32/shellrecyclebin/recyclebin.c b/dll/win32/shell32/shellrecyclebin/recyclebin.c index 670e81b6dbf..88221b0da99 100644 --- a/dll/win32/shell32/shellrecyclebin/recyclebin.c +++ b/dll/win32/shell32/shellrecyclebin/recyclebin.c @@ -10,7 +10,7 @@ BOOL WINAPI CloseRecycleBinHandle( - IN HANDLE hDeletedFile) + IN HDELFILE hDeletedFile) { IRecycleBinFile *rbf = (IRecycleBinFile *)hDeletedFile; HRESULT hr; @@ -91,7 +91,7 @@ DeleteFileToRecycleBinW( BOOL WINAPI DeleteFileHandleToRecycleBin( - IN HANDLE hDeletedFile) + IN HDELFILE hDeletedFile) { IRecycleBinFile *rbf = (IRecycleBinFile *)hDeletedFile; HRESULT hr; @@ -254,7 +254,7 @@ EnumerateRecycleBinW( BOOL WINAPI GetDeletedFileTypeNameW( - IN HANDLE hDeletedFile, + IN HDELFILE hDeletedFile, OUT LPWSTR pTypeName, IN DWORD BufferSize, OUT LPDWORD RequiredSize OPTIONAL) @@ -280,7 +280,7 @@ GetDeletedFileTypeNameW( BOOL WINAPI GetDeletedFileDetailsA( - IN HANDLE hDeletedFile, + IN HDELFILE hDeletedFile, IN DWORD BufferSize, IN OUT PDELETED_FILE_DETAILS_A FileDetails OPTIONAL, OUT LPDWORD RequiredSize OPTIONAL) @@ -325,7 +325,7 @@ GetDeletedFileDetailsA( BOOL WINAPI GetDeletedFileDetailsW( - IN HANDLE hDeletedFile, + IN HDELFILE hDeletedFile, IN DWORD BufferSize, IN OUT PDELETED_FILE_DETAILS_W FileDetails OPTIONAL, OUT LPDWORD RequiredSize OPTIONAL) @@ -378,7 +378,7 @@ GetDeletedFileDetailsW( BOOL WINAPI RestoreFile( - IN HANDLE hDeletedFile) + IN HDELFILE hDeletedFile) { IRecycleBinFile *rbf = (IRecycleBinFile *)hDeletedFile; HRESULT hr; diff --git a/dll/win32/shell32/shellrecyclebin/recyclebin.h b/dll/win32/shell32/shellrecyclebin/recyclebin.h index f15828a9639..a27d2f530bb 100644 --- a/dll/win32/shell32/shellrecyclebin/recyclebin.h +++ b/dll/win32/shell32/shellrecyclebin/recyclebin.h @@ -47,6 +47,9 @@ typedef struct _DELETED_FILE_DETAILS_W #define PDELETED_FILE_DETAILS PDELETED_FILE_DETAILS_A #endif +/* Distinct handle type for deleted file/folder */ +DECLARE_HANDLE(HDELFILE); + /* API Interface */ /* Function called for each deleted file in the recycle bin @@ -55,7 +58,7 @@ typedef struct _DELETED_FILE_DETAILS_W * Returning FALSE stops the enumeration. * Remarks: the handle must be closed with the CloseRecycleBinHandle function */ -typedef BOOL (WINAPI *PENUMERATE_RECYCLEBIN_CALLBACK)(IN PVOID Context, IN HANDLE hDeletedFile); +typedef BOOL (WINAPI *PENUMERATE_RECYCLEBIN_CALLBACK)(IN PVOID Context, IN HDELFILE hDeletedFile); /* Closes a file deleted handle. * hDeletedFile: the handle to close @@ -64,7 +67,7 @@ typedef BOOL (WINAPI *PENUMERATE_RECYCLEBIN_CALLBACK)(IN PVOID Context, IN HANDL */ BOOL WINAPI CloseRecycleBinHandle( - IN HANDLE hDeletedFile); + IN HDELFILE hDeletedFile); /* Moves a file to the recycle bin. * FileName: the name of the file to move the recycle bin @@ -89,7 +92,7 @@ DeleteFileToRecycleBinW( */ BOOL WINAPI DeleteFileHandleToRecycleBin( - IN HANDLE hDeletedFile); + IN HDELFILE hDeletedFile); /* Removes all elements contained in a recycle bin * pszRoot: the name of the drive containing the recycle bin @@ -133,7 +136,7 @@ EnumerateRecycleBinW( BOOL WINAPI GetDeletedFileTypeNameW( - IN HANDLE hDeletedFile, + IN HDELFILE hDeletedFile, OUT LPWSTR pTypeName, IN DWORD BufferSize, OUT LPDWORD RequiredSize OPTIONAL); @@ -148,13 +151,13 @@ GetDeletedFileTypeNameW( */ BOOL WINAPI GetDeletedFileDetailsA( - IN HANDLE hDeletedFile, + IN HDELFILE hDeletedFile, IN DWORD BufferSize, IN OUT PDELETED_FILE_DETAILS_A FileDetails OPTIONAL, OUT LPDWORD RequiredSize OPTIONAL); BOOL WINAPI GetDeletedFileDetailsW( - IN HANDLE hDeletedFile, + IN HDELFILE hDeletedFile, IN DWORD BufferSize, IN OUT PDELETED_FILE_DETAILS_W FileDetails OPTIONAL, OUT LPDWORD RequiredSize OPTIONAL); @@ -171,7 +174,7 @@ GetDeletedFileDetailsW( */ BOOL WINAPI RestoreFile( - IN HANDLE hDeletedFile); + IN HDELFILE hDeletedFile); /* COM interface */ From 18877737af74cf3c07de329eaf96fc253760a565 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Sun, 19 May 2024 10:00:20 +0900 Subject: [PATCH 160/182] [SHELL32] Make brsfolder.c C++ (as brsfolder.cpp) (#6906) Modernize source code. JIRA issue: CORE-17340 - Move dll/win32/shell32/wine/brsfolder.c to dll/win32/shell32/brsfolder.cpp. - Adapt to C++. --- dll/win32/shell32/CMakeLists.txt | 2 +- .../{wine/brsfolder.c => brsfolder.cpp} | 172 +++++++----------- 2 files changed, 68 insertions(+), 106 deletions(-) rename dll/win32/shell32/{wine/brsfolder.c => brsfolder.cpp} (87%) diff --git a/dll/win32/shell32/CMakeLists.txt b/dll/win32/shell32/CMakeLists.txt index f90babb9762..684de0ab8df 100644 --- a/dll/win32/shell32/CMakeLists.txt +++ b/dll/win32/shell32/CMakeLists.txt @@ -18,6 +18,7 @@ if(DBG) endif() list(APPEND SOURCE + brsfolder.cpp CActiveDesktop.cpp CActiveDesktop.h CIDLDataObj.cpp @@ -82,7 +83,6 @@ list(APPEND SOURCE list(APPEND PCH_SKIP_SOURCE wine/appbar.c - wine/brsfolder.c wine/classes.c wine/clipboard.c wine/control.c diff --git a/dll/win32/shell32/wine/brsfolder.c b/dll/win32/shell32/brsfolder.cpp similarity index 87% rename from dll/win32/shell32/wine/brsfolder.c rename to dll/win32/shell32/brsfolder.cpp index 73028dfb321..883980a0578 100644 --- a/dll/win32/shell32/wine/brsfolder.c +++ b/dll/win32/shell32/brsfolder.cpp @@ -1,45 +1,20 @@ /* - * Copyright 1999 Juergen Schmied - * - * 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 - * + * PROJECT: ReactOS shell32 + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: SHBrowseForFolderA/W functions + * COPYRIGHT: Copyright 1999 Juergen Schmied + * Copyright 2024 Katayama Hirofumi MZ + */ + +/* * FIXME: * - many memory leaks * - many flags unimplemented */ -#define WIN32_NO_STATUS -#define _INC_WINDOWS -#define COBJMACROS -#define NONAMELESSUNION -#define NONAMELESSSTRUCT - -#include -#include -#include -#include -#include -#include -#include +#include "precomp.h" -#include "pidl.h" -#include "shell32_main.h" -#include "shresdef.h" - -#include -#include "ui/layout.h" /* Resizable window */ +#include /* Resizable window */ WINE_DEFAULT_DEBUG_CHANNEL(shell); @@ -167,8 +142,8 @@ static void InitializeTreeView( browse_info *info ) ILFree(pidlParent); return; } - hr = IShellFolder_BindToObject(lpsfDesktop, pidlParent, 0, &IID_IShellFolder, (LPVOID*)&lpsfParent); - IShellFolder_Release(lpsfDesktop); + hr = lpsfDesktop->BindToObject(pidlParent, 0, IID_PPV_ARG(IShellFolder, &lpsfParent)); + lpsfDesktop->Release(); } if (FAILED(hr)) { @@ -179,26 +154,26 @@ static void InitializeTreeView( browse_info *info ) } if (!_ILIsEmpty(pidlChild)) { - hr = IShellFolder_BindToObject(lpsfParent, pidlChild, 0, &IID_IShellFolder, (LPVOID*)&lpsfRoot); + hr = lpsfParent->BindToObject(pidlChild, 0, IID_PPV_ARG(IShellFolder, &lpsfRoot)); } else { lpsfRoot = lpsfParent; - hr = IShellFolder_AddRef(lpsfParent); + hr = lpsfParent->AddRef(); } if (FAILED(hr)) { WARN("Could not bind to root shell folder! hr = %08x\n", hr); - IShellFolder_Release(lpsfParent); + lpsfParent->Release(); ILFree(pidlChild); ILFree(pidlParent); return; } flags = BrowseFlagsToSHCONTF( info->lpBrowseInfo->ulFlags ); - hr = IShellFolder_EnumObjects( lpsfRoot, info->hWnd, flags, &pEnumChildren ); + hr = lpsfRoot->EnumObjects(info->hWnd, flags, &pEnumChildren ); if (FAILED(hr)) { WARN("Could not get child iterator! hr = %08x\n", hr); - IShellFolder_Release(lpsfParent); - IShellFolder_Release(lpsfRoot); + lpsfParent->Release(); + lpsfRoot->Release(); ILFree(pidlChild); ILFree(pidlParent); return; @@ -211,8 +186,8 @@ static void InitializeTreeView( browse_info *info ) ILFree(pidlChild); ILFree(pidlParent); - IShellFolder_Release(lpsfRoot); - IShellFolder_Release(lpsfParent); + lpsfRoot->Release(); + lpsfParent->Release(); } static int GetIcon(LPCITEMIDLIST lpi, UINT uFlags) @@ -266,7 +241,7 @@ static BOOL GetName(LPSHELLFOLDER lpsf, LPCITEMIDLIST lpi, DWORD dwFlags, LPWSTR STRRET str; TRACE("%p %p %x %p\n", lpsf, lpi, dwFlags, lpFriendlyName); - if (SUCCEEDED(IShellFolder_GetDisplayNameOf(lpsf, lpi, dwFlags, &str))) + if (SUCCEEDED(lpsf->GetDisplayNameOf(lpi, dwFlags, &str))) bSuccess = StrRetToStrNW(lpFriendlyName, MAX_PATH, &str, lpi); else bSuccess = FALSE; @@ -307,7 +282,7 @@ static HTREEITEM InsertTreeViewItem( browse_info *info, IShellFolder * lpsf, if (!GetName(lpsf, pidl, SHGDN_NORMAL, szBuff)) return NULL; - lptvid = SHAlloc( sizeof(TV_ITEMDATA) ); + lptvid = (LPTV_ITEMDATA)SHAlloc(sizeof(TV_ITEMDATA)); if (!lptvid) return NULL; @@ -315,14 +290,14 @@ static HTREEITEM InsertTreeViewItem( browse_info *info, IShellFolder * lpsf, tvi.cchTextMax = MAX_PATH; tvi.lParam = (LPARAM)lptvid; - IShellFolder_AddRef(lpsf); + lpsf->AddRef(); lptvid->lpsfParent = lpsf; lptvid->lpi = ILClone(pidl); lptvid->lpifq = pidlParent ? ILCombine(pidlParent, pidl) : ILClone(pidl); lptvid->pEnumIL = pEnumIL; GetNormalAndSelectedIcons(lptvid->lpifq, &tvi); - tvins.u.item = tvi; + tvins.item = tvi; tvins.hInsertAfter = NULL; tvins.hParent = hParent; @@ -358,29 +333,29 @@ static void FillTreeView( browse_info *info, IShellFolder * lpsf, SetCapture( hwnd ); SetCursor( LoadCursorA( 0, (LPSTR)IDC_WAIT ) ); - while (S_OK == IEnumIDList_Next(lpe,1,&pidlTemp,&ulFetched)) + while (S_OK == lpe->Next(1, &pidlTemp, &ulFetched)) { ULONG ulAttrs = SFGAO_HASSUBFOLDER | SFGAO_FOLDER; IEnumIDList* pEnumIL = NULL; IShellFolder* pSFChild = NULL; - IShellFolder_GetAttributesOf(lpsf, 1, (LPCITEMIDLIST*)&pidlTemp, &ulAttrs); + lpsf->GetAttributesOf(1, (LPCITEMIDLIST*)&pidlTemp, &ulAttrs); if (ulAttrs & SFGAO_FOLDER) { - hr = IShellFolder_BindToObject(lpsf,pidlTemp,NULL,&IID_IShellFolder,(LPVOID*)&pSFChild); + hr = lpsf->BindToObject(pidlTemp, NULL, IID_PPV_ARG(IShellFolder, &pSFChild)); if (SUCCEEDED(hr)) { DWORD flags = BrowseFlagsToSHCONTF(info->lpBrowseInfo->ulFlags); - hr = IShellFolder_EnumObjects(pSFChild, hwnd, flags, &pEnumIL); + hr = pSFChild->EnumObjects(hwnd, flags, &pEnumIL); if (hr == S_OK) { - if ((IEnumIDList_Skip(pEnumIL, 1) != S_OK) || - FAILED(IEnumIDList_Reset(pEnumIL))) + if ((pEnumIL->Skip(1) != S_OK) || + FAILED(pEnumIL->Reset())) { - IEnumIDList_Release(pEnumIL); + pEnumIL->Release(); pEnumIL = NULL; } } - IShellFolder_Release(pSFChild); + pSFChild->Release(); } } if (ulAttrs != (ulAttrs & SFGAO_FOLDER)) @@ -420,15 +395,13 @@ static void BrsFolder_CheckValidSelection( browse_info *info, LPTV_ITEMDATA lptv if (lpBrowseInfo->ulFlags & BIF_RETURNFSANCESTORS) { dwAttributes = SFGAO_FILESYSANCESTOR | SFGAO_FILESYSTEM; - r = IShellFolder_GetAttributesOf(lptvid->lpsfParent, 1, - (LPCITEMIDLIST*)&lptvid->lpi, &dwAttributes); + r = lptvid->lpsfParent->GetAttributesOf(1, (LPCITEMIDLIST*)&lptvid->lpi, &dwAttributes); if (FAILED(r) || !(dwAttributes & (SFGAO_FILESYSANCESTOR|SFGAO_FILESYSTEM))) bEnabled = FALSE; } dwAttributes = SFGAO_FOLDER | SFGAO_FILESYSTEM; - r = IShellFolder_GetAttributesOf(lptvid->lpsfParent, 1, - (LPCITEMIDLIST*)&lptvid->lpi, &dwAttributes); + r = lptvid->lpsfParent->GetAttributesOf(1, (LPCITEMIDLIST*)&lptvid->lpi, &dwAttributes); if (FAILED(r) || ((dwAttributes & (SFGAO_FOLDER|SFGAO_FILESYSTEM)) != (SFGAO_FOLDER|SFGAO_FILESYSTEM))) { @@ -448,9 +421,9 @@ static LRESULT BrsFolder_Treeview_Delete( browse_info *info, NMTREEVIEWW *pnmtv TRACE("TVN_DELETEITEMA/W %p\n", lptvid); - IShellFolder_Release(lptvid->lpsfParent); + lptvid->lpsfParent->Release(); if (lptvid->pEnumIL) - IEnumIDList_Release(lptvid->pEnumIL); + lptvid->pEnumIL->Release(); SHFree(lptvid->lpi); SHFree(lptvid->lpifq); SHFree(lptvid); @@ -469,18 +442,17 @@ static LRESULT BrsFolder_Treeview_Expand( browse_info *info, NMTREEVIEWW *pnmtv return 0; if (!_ILIsEmpty(lptvid->lpi)) { - r = IShellFolder_BindToObject( lptvid->lpsfParent, lptvid->lpi, 0, - &IID_IShellFolder, (void**)&lpsf2 ); + r = lptvid->lpsfParent->BindToObject(lptvid->lpi, 0, IID_PPV_ARG(IShellFolder, &lpsf2)); } else { lpsf2 = lptvid->lpsfParent; - IShellFolder_AddRef(lpsf2); + lpsf2->AddRef(); r = S_OK; } if (SUCCEEDED(r)) { FillTreeView( info, lpsf2, lptvid->lpifq, pnmtv->itemNew.hItem, lptvid->pEnumIL); - IShellFolder_Release( lpsf2 ); + lpsf2->Release(); } /* My Computer is already sorted and trying to do a simple text @@ -534,7 +506,7 @@ static LRESULT BrsFolder_Treeview_Rename(browse_info *info, NMTVDISPINFOW *pnmtv SHFree(item_data->lpifq); SHFree(item_data->lpi); item_data->lpifq = SHSimpleIDListFromPathW(new_path); - IShellFolder_ParseDisplayName(item_data->lpsfParent, NULL, NULL, + item_data->lpsfParent->ParseDisplayName(NULL, NULL, pnmtv->item.pszText, NULL, &item_data->lpi, NULL); item.mask = TVIF_HANDLE | TVIF_TEXT; @@ -753,8 +725,8 @@ static HRESULT BrsFolder_NewFolder(browse_info *info) if (info->pidlRet) { - hr = IShellFolder_BindToObject(desktop, info->pidlRet, 0, &IID_IShellFolder, (void**)&cur); - IShellFolder_Release(desktop); + hr = desktop->BindToObject(info->pidlRet, 0, IID_PPV_ARG(IShellFolder, &cur)); + desktop->Release(); if(FAILED(hr)) return hr; @@ -798,8 +770,8 @@ static HRESULT BrsFolder_NewFolder(browse_info *info) goto cleanup; if(item_data->pEnumIL) - IEnumIDList_Release(item_data->pEnumIL); - hr = IShellFolder_EnumObjects(cur, info->hwndTreeView, flags, &item_data->pEnumIL); + item_data->pEnumIL->Release(); + hr = cur->EnumObjects(info->hwndTreeView, flags, &item_data->pEnumIL); if(FAILED(hr)) goto cleanup; @@ -811,12 +783,12 @@ static HRESULT BrsFolder_NewFolder(browse_info *info) TreeView_SetItem(info->hwndTreeView, &item); } - hr = IShellFolder_ParseDisplayName(cur, NULL, NULL, name+len, NULL, &new_item, NULL); + hr = cur->ParseDisplayName(NULL, NULL, name+len, NULL, &new_item, NULL); if(FAILED(hr)) goto cleanup; hAdded = InsertTreeViewItem(info, cur, new_item, item_data->lpifq, NULL, hParent); - IShellFolder_Release(cur); + cur->Release(); SHFree(new_item); TreeView_SortChildren(info->hwndTreeView, hParent, FALSE); @@ -878,7 +850,7 @@ static BOOL BrsFolder_OnCommand( browse_info *info, UINT id ) static BOOL BrsFolder_OnSetExpanded(browse_info *info, LPVOID selection, BOOL is_str, HTREEITEM *pItem) { - LPITEMIDLIST pidlSelection = selection; + LPITEMIDLIST pidlSelection = (LPITEMIDLIST)selection; LPCITEMIDLIST pidlCurrent, pidlRoot; TVITEMEXW item; BOOL bResult = FALSE; @@ -894,9 +866,8 @@ static BOOL BrsFolder_OnSetExpanded(browse_info *info, LPVOID selection, if (FAILED(hr)) goto done; - hr = IShellFolder_ParseDisplayName(psfDesktop, NULL, NULL, - selection, NULL, &pidlSelection, NULL); - IShellFolder_Release(psfDesktop); + hr = psfDesktop->ParseDisplayName(NULL, NULL, (LPWSTR)selection, NULL, &pidlSelection, NULL); + psfDesktop->Release(); if (FAILED(hr)) goto done; } @@ -980,9 +951,9 @@ static BOOL BrsFolder_OnSetSelectionA(browse_info *info, LPVOID selection, BOOL if (!is_str) return BrsFolder_OnSetSelectionW(info, selection, is_str); - if ((length = MultiByteToWideChar(CP_ACP, 0, selection, -1, NULL, 0)) && - (selectionW = HeapAlloc(GetProcessHeap(), 0, length * sizeof(WCHAR))) && - MultiByteToWideChar(CP_ACP, 0, selection, -1, selectionW, length)) + if ((length = MultiByteToWideChar(CP_ACP, 0, (LPSTR)selection, -1, NULL, 0)) && + (selectionW = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, length * sizeof(WCHAR))) && + MultiByteToWideChar(CP_ACP, 0, (LPSTR)selection, -1, selectionW, length)) { result = BrsFolder_OnSetSelectionW(info, selectionW, is_str); } @@ -1012,7 +983,7 @@ static HTREEITEM BrsFolder_FindItemByPidl(browse_info *info, LPCITEMIDLIST pidl, item_data = BrsFolder_GetDataFromItem(info, hItem); - hr = IShellFolder_CompareIDs(item_data->lpsfParent, 0, item_data->lpifq, pidl); + hr = item_data->lpsfParent->CompareIDs(0, item_data->lpifq, pidl); if(SUCCEEDED(hr) && !HRESULT_CODE(hr)) return hItem; @@ -1062,7 +1033,9 @@ static INT_PTR CALLBACK BrsFolderDlgProc( HWND hWnd, UINT msg, WPARAM wParam, if (msg == WM_INITDIALOG) return BrsFolder_OnCreate( hWnd, (browse_info*) lParam ); - info = GetPropW( hWnd, L"__WINE_BRSFOLDERDLG_INFO" ); + info = (browse_info*)GetPropW(hWnd, L"__WINE_BRSFOLDERDLG_INFO"); + if (!info) + return 0; switch (msg) { @@ -1124,6 +1097,7 @@ static INT_PTR CALLBACK BrsFolderDlgProc( HWND hWnd, UINT msg, WPARAM wParam, * SHBrowseForFolderA [SHELL32.@] * SHBrowseForFolder [SHELL32.@] */ +EXTERN_C LPITEMIDLIST WINAPI SHBrowseForFolderA (LPBROWSEINFOA lpbi) { BROWSEINFOW bi; @@ -1136,14 +1110,14 @@ LPITEMIDLIST WINAPI SHBrowseForFolderA (LPBROWSEINFOA lpbi) bi.hwndOwner = lpbi->hwndOwner; bi.pidlRoot = lpbi->pidlRoot; if (lpbi->pszDisplayName) - bi.pszDisplayName = HeapAlloc( GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR) ); + bi.pszDisplayName = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR)); else bi.pszDisplayName = NULL; if (lpbi->lpszTitle) { len = MultiByteToWideChar( CP_ACP, 0, lpbi->lpszTitle, -1, NULL, 0 ); - title = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ); + title = (LPWSTR)HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ); MultiByteToWideChar( CP_ACP, 0, lpbi->lpszTitle, -1, title, len ); } else @@ -1168,34 +1142,22 @@ LPITEMIDLIST WINAPI SHBrowseForFolderA (LPBROWSEINFOA lpbi) /************************************************************************* * SHBrowseForFolderW [SHELL32.@] - * - * NOTES - * crashes when passed a null pointer */ -LPITEMIDLIST WINAPI SHBrowseForFolderW (LPBROWSEINFOW lpbi) +EXTERN_C +LPITEMIDLIST WINAPI SHBrowseForFolderW(LPBROWSEINFOW lpbi) { - browse_info info; - INT_PTR r; - HRESULT hr; - WORD wDlgId; - - info.hWnd = NULL; - info.pidlRet = NULL; + browse_info info = { NULL }; info.lpBrowseInfo = lpbi; - info.hwndTreeView = NULL; - info.layout = NULL; - - hr = OleInitialize(NULL); - - wDlgId = ((lpbi->ulFlags & BIF_USENEWUI) ? IDD_BROWSE_FOR_FOLDER_NEW : IDD_BROWSE_FOR_FOLDER); - r = DialogBoxParamW(shell32_hInstance, MAKEINTRESOURCEW(wDlgId), lpbi->hwndOwner, - BrsFolderDlgProc, (LPARAM)&info ); + HRESULT hr = OleInitialize(NULL); + INT id = ((lpbi->ulFlags & BIF_USENEWUI) ? IDD_BROWSE_FOR_FOLDER_NEW : IDD_BROWSE_FOR_FOLDER); + INT_PTR ret = DialogBoxParamW(shell32_hInstance, MAKEINTRESOURCEW(id), lpbi->hwndOwner, + BrsFolderDlgProc, (LPARAM)&info); if (SUCCEEDED(hr)) OleUninitialize(); - if (!r) + if (!ret) { ILFree(info.pidlRet); return NULL; From 09965760e0e2834dbba125c88fbb4c3fb6729931 Mon Sep 17 00:00:00 2001 From: Oleg Dubinskiy Date: Sun, 19 May 2024 10:46:02 +0200 Subject: [PATCH 161/182] [MMIXER] Remove duplicated MIXERCONTROL_CONTROLTYPE_MUX handling Don't check for KSNOTETYPE_MUX and don't return MIXERCONTROL_CONTROLTYPE_MUX twice. --- sdk/lib/drivers/sound/mmixer/filter.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/sdk/lib/drivers/sound/mmixer/filter.c b/sdk/lib/drivers/sound/mmixer/filter.c index 19033c831ad..92079c34448 100644 --- a/sdk/lib/drivers/sound/mmixer/filter.c +++ b/sdk/lib/drivers/sound/mmixer/filter.c @@ -180,11 +180,6 @@ MMixerGetControlTypeFromTopologyNode( /* mux control */ return MIXERCONTROL_CONTROLTYPE_MUX; } - else if (IsEqualGUIDAligned(NodeType, (LPGUID)&KSNODETYPE_MUX)) - { - /* mux control */ - return MIXERCONTROL_CONTROLTYPE_MUX; - } else if (IsEqualGUIDAligned(NodeType, (LPGUID)&KSNODETYPE_STEREO_WIDE)) { /* stero wide control */ From 108db8f007fa845f344e7d415fbbbe66c6e88c84 Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Sun, 19 May 2024 13:57:47 +0200 Subject: [PATCH 162/182] [CSCRIPT][WSCRIPT][BOOTDATA] Basic .wsf support (#6140) Support for .wsf files with a single script block --- .../cmdutils/cscript/CMakeLists.txt | 1 + .../cmdutils/wscript/CMakeLists.txt | 1 + base/applications/cmdutils/wscript/main.c | 378 ++++++++++++++++++ boot/bootdata/hivecls.inf | 11 + modules/rostests/apitests/CMakeLists.txt | 1 + .../rostests/apitests/wscript/CMakeLists.txt | 10 + modules/rostests/apitests/wscript/testlist.c | 10 + modules/rostests/apitests/wscript/wsf.c | 170 ++++++++ 8 files changed, 582 insertions(+) create mode 100644 modules/rostests/apitests/wscript/CMakeLists.txt create mode 100644 modules/rostests/apitests/wscript/testlist.c create mode 100644 modules/rostests/apitests/wscript/wsf.c diff --git a/base/applications/cmdutils/cscript/CMakeLists.txt b/base/applications/cmdutils/cscript/CMakeLists.txt index 5e0b98d08cb..4d639fc7b63 100644 --- a/base/applications/cmdutils/cscript/CMakeLists.txt +++ b/base/applications/cmdutils/cscript/CMakeLists.txt @@ -15,6 +15,7 @@ add_typelib(ihost.idl) set_source_files_properties(rsrc.rc PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/ihost.tlb) target_link_libraries(cscript uuid wine) set_module_type(cscript win32cui UNICODE) +add_delay_importlibs(cscript shlwapi) add_importlibs(cscript shell32 oleaut32 ole32 advapi32 user32 msvcrt kernel32 ntdll) add_dependencies(cscript stdole2 cscript_idlheader) add_pch(cscript ${wscript_folder}/precomp.h SOURCE) diff --git a/base/applications/cmdutils/wscript/CMakeLists.txt b/base/applications/cmdutils/wscript/CMakeLists.txt index a574ff5fb55..d177b8b9948 100644 --- a/base/applications/cmdutils/wscript/CMakeLists.txt +++ b/base/applications/cmdutils/wscript/CMakeLists.txt @@ -13,6 +13,7 @@ add_typelib(ihost.idl) set_source_files_properties(rsrc.rc PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/ihost.tlb) target_link_libraries(wscript uuid wine) set_module_type(wscript win32gui UNICODE) +add_delay_importlibs(wscript shlwapi) add_importlibs(wscript shell32 oleaut32 ole32 user32 advapi32 msvcrt kernel32 ntdll) add_dependencies(wscript stdole2 wscript_idlheader) add_pch(wscript precomp.h SOURCE) diff --git a/base/applications/cmdutils/wscript/main.c b/base/applications/cmdutils/wscript/main.c index 030243984df..8e88ac70179 100644 --- a/base/applications/cmdutils/wscript/main.c +++ b/base/applications/cmdutils/wscript/main.c @@ -60,6 +60,141 @@ ITypeInfo *arguments_ti; static HRESULT query_interface(REFIID,void**); +#ifdef __REACTOS__ +#include + +typedef struct { + UINT itemsize, count; + void *mem; +} SIMPLEVECTOR; + +static void SVect_Free(SIMPLEVECTOR *pV) +{ + if (pV->mem) + LocalFree(pV->mem); + pV->mem = NULL; +} + +static void* SVect_Add(SIMPLEVECTOR *pV) +{ + void *p = NULL; + if (pV->mem) + { + p = LocalReAlloc(pV->mem, pV->itemsize * (pV->count + 1), LMEM_FIXED | LMEM_MOVEABLE); + if (p) + { + pV->mem = p; + p = (char*)p + (pV->count * pV->itemsize); + pV->count++; + } + } + else + { + p = pV->mem = LocalAlloc(LMEM_FIXED, pV->itemsize); + if (p) + { + pV->count = 1; + } + } + return p; +} + +#define SVect_Delete(pV, pItem) ( (pV), (pItem) ) /* Should not be required for global items */ + +static void* SVect_Get(SIMPLEVECTOR *pV, UINT i) +{ + return pV->mem && i < pV->count ? (char*)pV->mem + (i * pV->itemsize) : NULL; +} + +typedef struct { + BSTR name; + IUnknown *punk; +} GLOBAL_ITEM; + +SIMPLEVECTOR g_global_items = { sizeof(GLOBAL_ITEM) }; + +static void free_globals(void) +{ + UINT i; + for (i = 0;; ++i) + { + GLOBAL_ITEM *p = (GLOBAL_ITEM*)SVect_Get(&g_global_items, i); + if (!p) + break; + IUnknown_Release(p->punk); + SysFreeString(p->name); + } + SVect_Free(&g_global_items); +} + +static HRESULT add_globalitem(IActiveScript *script, BSTR name, IUnknown *punk, DWORD siflags) +{ + GLOBAL_ITEM *item; + HRESULT hr; + + name = SysAllocString(name); + if (!name) + return E_OUTOFMEMORY; + + item = SVect_Add(&g_global_items); + if (item) + { + item->name = name; + item->punk = punk; + hr = IActiveScript_AddNamedItem(script, name, siflags); + if (SUCCEEDED(hr)) + { + IUnknown_AddRef(punk); + return hr; + } + SVect_Delete(&g_global_items, item); + } + SysFreeString(name); + return E_OUTOFMEMORY; +} + +static HRESULT add_globalitem_from_clsid(IActiveScript *script, BSTR name, REFCLSID clsid, DWORD siflags) +{ + IUnknown *punk; + HRESULT hr = CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void**)&punk); + if (SUCCEEDED(hr)) + { + hr = add_globalitem(script, name, punk, siflags); + IUnknown_Release(punk); + } + return hr; +} + +static HRESULT get_globalitem_info(LPCOLESTR Name, DWORD Mask, IUnknown **ppunk, ITypeInfo **ppti, BOOL *pHandled) +{ + HRESULT hr = S_FALSE; + UINT i; + for (i = 0;; ++i) + { + GLOBAL_ITEM *p = (GLOBAL_ITEM*)SVect_Get(&g_global_items, i); + if (!p) + break; + if (!lstrcmpiW(Name, p->name)) + { + if (ppti) + *ppti = NULL; + if (Mask & SCRIPTINFO_IUNKNOWN) + { + *ppunk = p->punk; + if (p->punk) + { + IUnknown_AddRef(p->punk); + *pHandled = TRUE; + } + return S_OK; + } + break; + } + } + return hr; +} +#endif + static HRESULT WINAPI ActiveScriptSite_QueryInterface(IActiveScriptSite *iface, REFIID riid, void **ppv) { @@ -89,6 +224,15 @@ static HRESULT WINAPI ActiveScriptSite_GetItemInfo(IActiveScriptSite *iface, { WINE_TRACE("(%s %x %p %p)\n", wine_dbgstr_w(pstrName), dwReturnMask, ppunkItem, ppti); +#ifdef __REACTOS__ + { + BOOL handled = FALSE; + HRESULT hr = get_globalitem_info(pstrName, dwReturnMask, ppunkItem, ppti, &handled); + if (handled) + return hr; + } +#endif + if(lstrcmpW(pstrName, wshW) && lstrcmpW(pstrName, wscriptW)) return E_FAIL; @@ -388,6 +532,231 @@ static void run_script(const WCHAR *filename, IActiveScript *script, IActiveScri WINE_FIXME("SetScriptState failed: %08x\n", hres); } +#ifdef __REACTOS__ +#include +#include + +static HRESULT xmldomnode_getattributevalue(IXMLDOMNode *pnode, LPCWSTR name, BSTR *pout) +{ + IXMLDOMNamedNodeMap *pmap; + HRESULT hr = E_OUTOFMEMORY; + BSTR bsname = SysAllocString(name); + *pout = NULL; + if (bsname && SUCCEEDED(hr = IXMLDOMNode_get_attributes(pnode, &pmap))) + { + if (SUCCEEDED(hr = IXMLDOMNamedNodeMap_getNamedItem(pmap, bsname, &pnode))) + { + hr = HRESULT_FROM_WIN32(ERROR_NOT_FOUND); + if (pnode) + { + hr = IXMLDOMNode_get_text(pnode, pout); + if (SUCCEEDED(hr) && !*pout) + hr = HRESULT_FROM_WIN32(ERROR_NOT_FOUND); + IXMLDOMNode_Release(pnode); + } + } + IXMLDOMNamedNodeMap_Release(pmap); + } + SysFreeString(bsname); + return hr; +} + +static HRESULT xmldomelem_getelembytag(IXMLDOMElement *pelem, LPCWSTR name, long index, IXMLDOMNode**ppout) +{ + HRESULT hr = E_OUTOFMEMORY; + IXMLDOMNodeList *pnl; + BSTR bsname = SysAllocString(name); + *ppout = NULL; + if (bsname && SUCCEEDED(hr = IXMLDOMElement_getElementsByTagName(pelem, bsname, &pnl))) + { + hr = IXMLDOMNodeList_get_item(pnl, index, ppout); + if (SUCCEEDED(hr) && !*ppout) + hr = HRESULT_FROM_WIN32(ERROR_NO_MORE_ITEMS); + IUnknown_Release(pnl); + } + SysFreeString(bsname); + return hr; +} + +static HRESULT xmldomelem_getelembytagasdomelem(IXMLDOMElement *pelem, LPCWSTR name, long index, IXMLDOMElement**ppout) +{ + IXMLDOMNode *pnode; + HRESULT hr = xmldomelem_getelembytag(pelem, name, index, &pnode); + *ppout = NULL; + if (SUCCEEDED(hr)) + { + hr = IUnknown_QueryInterface(pnode, &IID_IXMLDOMElement, (void**)ppout); + IUnknown_Release(pnode); + } + return hr; +} + +static void wsf_addobjectfromnode(IActiveScript *script, IXMLDOMNode *obj) +{ + BSTR bsid, bsclsid = NULL; + if (SUCCEEDED(xmldomnode_getattributevalue(obj, L"id", &bsid))) + { + CLSID clsid; + HRESULT hr; + hr = xmldomnode_getattributevalue(obj, L"clsid", &bsclsid); + if (FAILED(hr) || FAILED(CLSIDFromString(bsclsid, &clsid))) + { + SysFreeString(bsclsid); + if (SUCCEEDED(hr = xmldomnode_getattributevalue(obj, L"progid", &bsclsid))) + { + hr = CLSIDFromProgID(bsclsid, &clsid); + SysFreeString(bsclsid); + } + } + if (SUCCEEDED(hr)) + { + hr = add_globalitem_from_clsid(script, bsid, &clsid, SCRIPTITEM_ISVISIBLE); + } + SysFreeString(bsid); + } +} + +static HRESULT run_wsfjob(IXMLDOMElement *jobtag) +{ + // FIXME: We are supposed to somehow handle multiple languages in the same IActiveScript. + IActiveScript *script; + LPCWSTR deflang = L"JScript"; + IXMLDOMNode *scripttag; + HRESULT hr = S_OK; + if (SUCCEEDED(xmldomelem_getelembytag(jobtag, L"script", 0, &scripttag))) + { + CLSID clsid; + IActiveScriptParse *parser; + BSTR lang, code; + if (FAILED(xmldomnode_getattributevalue(scripttag, L"language", &lang))) + lang = NULL; + hr = CLSIDFromProgID(lang ? lang : deflang, &clsid); + SysFreeString(lang); + + if (SUCCEEDED(hr)) + { + hr = E_FAIL; + if (create_engine(&clsid, &script, &parser)) + { + if (init_engine(script, parser)) + { + long index; + for (index = 0; index < 0x7fffffff; ++index) + { + IXMLDOMNode *obj; + if (SUCCEEDED(xmldomelem_getelembytag(jobtag, L"object", index, &obj))) + { + wsf_addobjectfromnode(script, obj); + IUnknown_Release(obj); + } + else + { + break; + } + } + + if (SUCCEEDED(hr = IXMLDOMNode_get_text(scripttag, &code))) + { + hr = IActiveScriptParse_ParseScriptText(parser, code, NULL, NULL, NULL, 1, 1, + SCRIPTTEXT_HOSTMANAGESSOURCE|SCRIPTITEM_ISVISIBLE, + NULL, NULL); + if (SUCCEEDED(hr)) + { + hr = IActiveScript_SetScriptState(script, SCRIPTSTATE_STARTED); + IActiveScript_Close(script); + } + SysFreeString(code); + } + ITypeInfo_Release(host_ti); + } + IUnknown_Release(parser); + IUnknown_Release(script); + } + } + IUnknown_Release(scripttag); + } + return hr; +} + +/* +.WSF files can contain a single job, or multiple jobs if contained in a package. +Jobs are identified by their id and if no id is specified, the first job is used. +Each job can contain multiple script tags and all scripts are merged into one. + + +or + + + +or + + + + + +*/ +static HRESULT run_wsf(LPCWSTR xmlpath) +{ + WCHAR url[ARRAY_SIZE("file://") + max(ARRAY_SIZE(scriptFullName), MAX_PATH)]; + DWORD cch = ARRAY_SIZE(url); + IXMLDOMDocument *pdoc; + HRESULT hr = UrlCreateFromPathW(xmlpath, url, &cch, 0), hrCom; + if (FAILED(hr)) + return hr; + + hrCom = CoInitialize(NULL); + hr = CoCreateInstance(&CLSID_DOMDocument30, NULL, CLSCTX_INPROC_SERVER, + &IID_IXMLDOMDocument, (void**)&pdoc); + if (SUCCEEDED(hr)) + { + VARIANT_BOOL succ = VARIANT_FALSE; + IXMLDOMElement *pdocelm; + BSTR bsurl = SysAllocString(url); + VARIANT v; + V_VT(&v) = VT_BSTR; + V_BSTR(&v) = bsurl; + if (!bsurl || (hr = IXMLDOMDocument_load(pdoc, v, &succ)) > 0 || (SUCCEEDED(hr) && !succ)) + { + hr = E_FAIL; + } + if (SUCCEEDED(hr) && SUCCEEDED(hr = IXMLDOMDocument_get_documentElement(pdoc, &pdocelm))) + { + BSTR tagName = NULL; + if (SUCCEEDED(hr = IXMLDOMElement_get_tagName(pdocelm, &tagName))) + { + if (lstrcmpiW(tagName, L"package") == 0) + { + // FIXME: Accept job id as a function parameter and find the job here + IXMLDOMElement *p; + if (SUCCEEDED(hr = xmldomelem_getelembytagasdomelem(pdocelm, L"job", 0, &p))) + { + IUnknown_Release(pdocelm); + pdocelm = p; + } + } + else if (lstrcmpiW(tagName, L"job") != 0) + { + hr = 0x800400C0ul; + } + SysFreeString(tagName); + } + if (SUCCEEDED(hr)) + { + // FIXME: Only support CDATA blocks if the xml tag is present? + hr = run_wsfjob(pdocelm); + } + IUnknown_Release(pdocelm); + } + VariantClear(&v); + IUnknown_Release(pdoc); + } + free_globals(); + if (SUCCEEDED(hrCom)) + CoUninitialize(); + return hr; +} +#endif + static BOOL set_host_properties(const WCHAR *prop) { static const WCHAR nologoW[] = {'n','o','l','o','g','o',0}; @@ -453,6 +822,11 @@ int WINAPI wWinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPWSTR cmdline, int cm return 1; ext = wcsrchr(filepart, '.'); +#ifdef __REACTOS__ + if (ext && !lstrcmpiW(ext, L".wsf")) { + return run_wsf(scriptFullName); + } +#endif if(!ext || !get_engine_clsid(ext, &clsid)) { WINE_FIXME("Could not find engine for %s\n", wine_dbgstr_w(ext)); return 1; @@ -477,6 +851,10 @@ int WINAPI wWinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPWSTR cmdline, int cm IActiveScript_Release(script); IActiveScriptParse_Release(parser); +#ifdef __REACTOS__ + free_globals(); +#endif + CoUninitialize(); return 0; diff --git a/boot/bootdata/hivecls.inf b/boot/bootdata/hivecls.inf index 19861ab539b..cd1eedbb2d4 100644 --- a/boot/bootdata/hivecls.inf +++ b/boot/bootdata/hivecls.inf @@ -555,6 +555,16 @@ HKCR,"AVIFile","",0x00000000,%AVIFILE% HKCR,"AVIFile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-224" HKCR,"AVIFile\shell\open\command","",0x00020000,"%SystemRoot%\system32\mplay32.exe ""%1""" +; WSH +HKCR,".wsf","",0x00000000,"WSFFile" +HKCR,".wsf","PerceivedType",0x00000000,"text" +HKCR,"WSFFile","",0x00000000,%WSFFILE% +HKCR,"WSFFile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-153" +HKCR,"WSFFile\shell\Open\command","",0x00020000,"""%SystemRoot%\system32\WScript.exe"" ""%1"" %*" +HKCR,"WSFFile\shell\Open2","",0x00000000,"Open &with Command Prompt" +HKCR,"WSFFile\shell\Open2\command","",0x00020000,"""%SystemRoot%\system32\CScript.exe"" ""%1"" %*" + + HKCR,"CLSID",,0x00000012 ; For Shell32.dll @@ -791,6 +801,7 @@ AVIFILE="Video Clip" CSSFILE="Cascading Style Sheet" SCFFILE="ReactOS Explorer Command" WMZFILE="Compressed Enhanced Metafile" +WSFFILE="Windows Script File" ;; For .reg files, right-click menu MERGE="Merge" diff --git a/modules/rostests/apitests/CMakeLists.txt b/modules/rostests/apitests/CMakeLists.txt index 7302666c064..18dfedb9538 100644 --- a/modules/rostests/apitests/CMakeLists.txt +++ b/modules/rostests/apitests/CMakeLists.txt @@ -66,4 +66,5 @@ add_subdirectory(winprint) add_subdirectory(winspool) add_subdirectory(wlanapi) add_subdirectory(ws2_32) +add_subdirectory(wscript) add_subdirectory(zipfldr) diff --git a/modules/rostests/apitests/wscript/CMakeLists.txt b/modules/rostests/apitests/wscript/CMakeLists.txt new file mode 100644 index 00000000000..00b7c1b379e --- /dev/null +++ b/modules/rostests/apitests/wscript/CMakeLists.txt @@ -0,0 +1,10 @@ + +list(APPEND SOURCE + wsf.c + testlist.c) + +add_executable(wscript_apitest ${SOURCE}) +target_link_libraries(wscript_apitest wine ${PSEH_LIB}) +set_module_type(wscript_apitest win32cui) +add_importlibs(wscript_apitest shlwapi msvcrt user32 kernel32) +add_rostests_file(TARGET wscript_apitest) diff --git a/modules/rostests/apitests/wscript/testlist.c b/modules/rostests/apitests/wscript/testlist.c new file mode 100644 index 00000000000..9642ed87485 --- /dev/null +++ b/modules/rostests/apitests/wscript/testlist.c @@ -0,0 +1,10 @@ +#define STANDALONE +#include + +extern void func_wsf(void); + +const struct test winetest_testlist[] = +{ + { "wsf", func_wsf }, + { 0, 0 } +}; diff --git a/modules/rostests/apitests/wscript/wsf.c b/modules/rostests/apitests/wscript/wsf.c new file mode 100644 index 00000000000..0aa3b78eaab --- /dev/null +++ b/modules/rostests/apitests/wscript/wsf.c @@ -0,0 +1,170 @@ +/* + * PROJECT: ReactOS API tests + * LICENSE: LGPL-2.1+ (https://spdx.org/licenses/LGPL-2.1+) + * PURPOSE: Tests for wscript.exe + * COPYRIGHT: Whindmar Saksit (whindsaks@proton.me) + */ + +#include +#include +#include +#include + +#define MYGUID "{898AC78E-BFC7-41FF-937D-EDD01E666707}" + +static DWORD getregdw(HKEY hKey, LPCSTR sub, LPCSTR name, DWORD *out, DWORD defval) +{ + LRESULT e; + DWORD size = sizeof(*out); + *out = 0; + e = SHGetValueA(hKey, sub, name, NULL, out, &size); + if (e) + *out = defval; + return e; +} + +static BOOL makestringfile(LPWSTR path, SIZE_T cchpath, LPCSTR ext, LPCSTR string, const BYTE *map) +{ + UINT cch = GetTempPathW(cchpath, path); + UINT16 i = 0; + if (!cch || cch > cchpath) + return FALSE; + while (++i) + { + HANDLE hFile; + if (_snwprintf(path + cch, cchpath - cch, L"~%u.%hs", i, ext ? ext : "tmp") >= cchpath - cch) + return FALSE; + hFile = CreateFileW(path, GENERIC_WRITE, FILE_SHARE_READ, 0, CREATE_NEW, 0, NULL); + if (hFile != INVALID_HANDLE_VALUE) + { + BOOL succ = TRUE; + for (; *string && succ; ++string) + { + BYTE ch = *string; + DWORD j; + for (j = 0; map && map[j + 0]; j += 2) + { + if (ch == map[j + 0]) + ch = map[j + 1]; + } + succ = WriteFile(hFile, &ch, 1, &j, NULL); + } + CloseHandle(hFile); + return succ; + } + } + return FALSE; +} + +static DWORD runscriptfile(LPCWSTR path, LPCWSTR engine) +{ + STARTUPINFOW si; + PROCESS_INFORMATION pi; + LPCWSTR exe = engine ? engine : L"wscript.exe"; + WCHAR cmd[MAX_PATH * 2]; + + if (_snwprintf(cmd, _countof(cmd), L"\"%s\" //nologo \"%s\"", exe, path) >= _countof(cmd)) + return ERROR_BUFFER_OVERFLOW; + ZeroMemory(&si, sizeof(si)); + si.cb = sizeof(si); + if (CreateProcessW(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) + { + DWORD code = ERROR_INTERNAL_ERROR; + WaitForSingleObject(pi.hProcess, INFINITE); + GetExitCodeProcess(pi.hProcess, &code); + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + return code; + } + return GetLastError(); +} + +static DWORD runscript(LPCSTR ext, LPCSTR script, const BYTE *map) +{ + DWORD code; + WCHAR file[MAX_PATH]; + if (!makestringfile(file, _countof(file), ext, script, map)) + { + skip("Unable to create script\n"); + return ERROR_FILE_NOT_FOUND; + } + code = runscriptfile(file, NULL); + DeleteFileW(file); + return code; +} + +static void test_defaultscriptisjs(void) +{ + LPCSTR script = "" + "" + "" + ""; + + ok(runscript("wsf", script, NULL) == 42, "Script failed\n"); +} + +static void test_simplevb(void) +{ + LPCSTR script = "" + "" + "" + ""; + + ok(runscript("wsf", script, NULL) == 42, "Script failed\n"); +} + +static void test_defpackagejob(void) +{ + LPCSTR script = "" + "" + "" + "" + "" + "" + "" + "" + ""; + + ok(runscript("wsf", script, NULL) == 42, "Script failed\n"); +} + +static void test_objecttag(void) +{ + DWORD dw; + static const BYTE map[] = { '#', '\"', '$', '\\', 0, 0 }; + LPCSTR script = "" + "" + "" + "" + "" /* Placing the object tag after the script just for fun */ + ""; + + ok(runscript("wsf", script, map) == 0, "Script failed\n"); + + getregdw(HKEY_CURRENT_USER, "Software", MYGUID, &dw, 0); + ok(dw == 42, "Value does not match\n"); + SHDeleteValueA(HKEY_CURRENT_USER, "Software", MYGUID); +} + +START_TEST(wsf) +{ + test_defaultscriptisjs(); + test_simplevb(); + test_defpackagejob(); + test_objecttag(); +} From 2198247bdf9016acbd2fca96f1941820050bbfa5 Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Tue, 21 May 2024 09:31:24 +0200 Subject: [PATCH 163/182] [REGEDIT] Implement "Add to favorites" feature (#6890) The ability to go to a favorite and the dialog was already there, just needed to fill in the blanks. --- base/applications/regedit/framewnd.c | 103 +++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) diff --git a/base/applications/regedit/framewnd.c b/base/applications/regedit/framewnd.c index df1b796727d..aace7023dc2 100644 --- a/base/applications/regedit/framewnd.c +++ b/base/applications/regedit/framewnd.c @@ -39,6 +39,16 @@ extern WCHAR Suggestions[256]; * Local module support methods */ +static UINT ErrorBox(HWND hWnd, UINT Error) +{ + WCHAR buf[400]; + if (!FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, Error, 0, buf, _countof(buf), NULL)) + *(UINT*)buf = L'?'; + MessageBoxW(hWnd, buf, NULL, MB_ICONSTOP); + return Error; +} + static void resize_frame_rect(HWND hWnd, PRECT prect) { if (IsWindowVisible(hStatusBar)) @@ -72,6 +82,8 @@ static void OnInitMenu(HWND hWnd) static int s_nFavoriteMenuSubPos = -1; HMENU hMenu; BOOL bDisplayedAny = FALSE; + HTREEITEM hSelTreeItem; + BOOL bCanAddFav; /* Find Favorites menu and clear it out */ hMenu = GetSubMenu(GetMenu(hWnd), FAVORITES_MENU_POSITION); @@ -86,6 +98,11 @@ static void OnInitMenu(HWND hWnd) while(RemoveMenu(hMenu, s_nFavoriteMenuSubPos, MF_BYPOSITION)) ; } + hSelTreeItem = TreeView_GetSelection(g_pChildWnd->hTreeWnd); + bCanAddFav = TreeView_GetParent(g_pChildWnd->hTreeWnd, hSelTreeItem) != NULL; + EnableMenuItem(GetMenu(hWnd), ID_FAVOURITES_ADDTOFAVOURITES, + MF_BYCOMMAND | (bCanAddFav ? MF_ENABLED : MF_GRAYED)); + lResult = RegOpenKeyW(HKEY_CURRENT_USER, s_szFavoritesRegKey, &hKey); if (lResult != ERROR_SUCCESS) goto done; @@ -807,6 +824,89 @@ static void ChooseFavorite(LPCWSTR pszFavorite) RegCloseKey(hKey); } +static LPWSTR GetItemFullPath(HTREEITEM hTI) +{ + HKEY hRoot; + WCHAR rootname[MAX_PATH], *buffer; + SIZE_T rootlen, subkeylen; + LPCWSTR subkey = GetItemPath(g_pChildWnd->hTreeWnd, hTI, &hRoot); + if (!subkey || !hRoot) + return NULL; + if (!GetKeyName(rootname, ARRAY_SIZE(rootname), hRoot, L"")) + return NULL; + rootlen = lstrlenW(rootname) + 1; // + 1 for '\\' + subkeylen = lstrlenW(subkey); + buffer = (WCHAR*)malloc((rootlen + subkeylen + 1) * sizeof(WCHAR)); + if (buffer) + { + lstrcpyW(buffer, rootname); + buffer[rootlen - 1] = '\\'; + lstrcpyW(buffer + rootlen, subkey); + } + return buffer; +} + +static INT_PTR CALLBACK AddToFavoritesDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + HWND hName = GetDlgItem(hWnd, IDC_FAVORITENAME); + WCHAR name[MAX_PATH]; + switch (uMsg) + { + case WM_INITDIALOG: + { + TVITEM tvi; + tvi.mask = TVIF_HANDLE | TVIF_TEXT; + tvi.hItem = TreeView_GetSelection(g_pChildWnd->hTreeWnd); + tvi.pszText = name; + tvi.cchTextMax = _countof(name); + if (!TreeView_GetItem(g_pChildWnd->hTreeWnd, &tvi)) + tvi.pszText[0] = UNICODE_NULL; + SetWindowTextW(hName, tvi.pszText); + SendMessageW(hName, EM_LIMITTEXT, _countof(name) - 1, 0); + return TRUE; + } + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDOK: + { + LPWSTR path; + HKEY hKey; + DWORD err; + if (!GetWindowTextW(hName, name, _countof(name))) + { + err = GetLastError(); + goto failed; + } + path = GetItemFullPath(NULL); + if (!path) + { + err = ERROR_NOT_ENOUGH_MEMORY; + goto failed; + } + err = RegCreateKeyExW(HKEY_CURRENT_USER, s_szFavoritesRegKey, 0, + NULL, 0, KEY_SET_VALUE, NULL, &hKey, NULL); + if (err) + goto failed; + err = RegSetValueExW(hKey, name, 0, REG_SZ, (BYTE*)path, (lstrlenW(path) + 1) * sizeof(WCHAR)); + RegCloseKey(hKey); + if (err) failed: + ErrorBox(hWnd, err); + free(path); + return EndDialog(hWnd, err); + } + case IDCANCEL: + return EndDialog(hWnd, ERROR_CANCELLED); + case IDC_FAVORITENAME: + if (HIWORD(wParam) == EN_UPDATE) + EnableWindow(GetDlgItem(hWnd, IDOK), GetWindowTextLengthW(hName) != 0); + break; + } + break; + } + return FALSE; +} + BOOL CopyKeyName(HWND hWnd, HKEY hRootKey, LPCWSTR keyName) { BOOL bClipboardOpened = FALSE; @@ -1119,6 +1219,9 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) case ID_VIEW_STATUSBAR: toggle_child(hWnd, LOWORD(wParam), hStatusBar); return TRUE; + case ID_FAVOURITES_ADDTOFAVOURITES: + DialogBoxW(hInst, MAKEINTRESOURCEW(IDD_ADDFAVORITES), hWnd, AddToFavoritesDlgProc); + return TRUE; case ID_HELP_HELPTOPICS: WinHelpW(hWnd, L"regedit", HELP_FINDER, 0); return TRUE; From a6298b5c7adeb9d9c0036be8614217dd3c836439 Mon Sep 17 00:00:00 2001 From: Serge Gautherie <32623169+SergeGautherie@users.noreply.github.com> Date: Tue, 21 May 2024 11:08:40 +0200 Subject: [PATCH 164/182] [NTOS:MM] section.c: some trivial cleanup (#5651) * [NTOS:MM] section.c: Remove unused functions MiSetControlAreaSymbolsLoaded(), MiLoadUserSymbols(): Added on 436edb2 (r60802). Never used. MiSubsectionConsistent(): Added on cda03c0 (r57209). Never used. MiGetFileObjectForSectionAddress(): Added on 635d9ca (r67810). Calls removed on 0dfd233 (r68123). MiSetProtectionOnSection(): Added on 9f28638 (r56317). Never used. Plus, MmCreateArm3Section(): Add an UNIMPLEMENTED on a specific case. * [NTOS:MM] section.c: Use static instead of NTAPI for local functions --- ntoskrnl/mm/ARM3/miarm.h | 15 -- ntoskrnl/mm/ARM3/section.c | 397 ++----------------------------------- 2 files changed, 15 insertions(+), 397 deletions(-) diff --git a/ntoskrnl/mm/ARM3/miarm.h b/ntoskrnl/mm/ARM3/miarm.h index b11aef4626d..3f32bced9a3 100644 --- a/ntoskrnl/mm/ARM3/miarm.h +++ b/ntoskrnl/mm/ARM3/miarm.h @@ -2242,14 +2242,6 @@ MiInsertBasedSection( IN PSECTION Section ); -NTSTATUS -NTAPI -MiUnmapViewOfSection( - IN PEPROCESS Process, - IN PVOID BaseAddress, - IN ULONG Flags -); - NTSTATUS NTAPI MiRosUnmapViewOfSection( @@ -2310,13 +2302,6 @@ MiSessionAddProcess( IN PEPROCESS NewProcess ); -NTSTATUS -NTAPI -MiSessionCommitPageTables( - IN PVOID StartVa, - IN PVOID EndVa -); - ULONG NTAPI MiMakeProtectionMask( diff --git a/ntoskrnl/mm/ARM3/section.c b/ntoskrnl/mm/ARM3/section.c index b7f5606f68d..8be6b0aab3e 100644 --- a/ntoskrnl/mm/ARM3/section.c +++ b/ntoskrnl/mm/ARM3/section.c @@ -112,8 +112,8 @@ PVOID MmHighSectionBase; /* PRIVATE FUNCTIONS **********************************************************/ +static BOOLEAN -NTAPI MiIsProtectionCompatible(IN ULONG SectionPageProtection, IN ULONG NewSectionPageProtection) { @@ -283,8 +283,8 @@ MiInitializeSystemSpaceMap(IN PMMSESSION InputSession OPTIONAL) return TRUE; } +static PVOID -NTAPI MiInsertInSystemSpace(IN PMMSESSION Session, IN ULONG Buckets, IN PCONTROL_AREA ControlArea) @@ -525,8 +525,8 @@ MiFillSystemPageDirectory(IN PVOID Base, } } +static NTSTATUS -NTAPI MiCheckPurgeAndUpMapCount(IN PCONTROL_AREA ControlArea, IN BOOLEAN FailIfSystemViews) { @@ -586,8 +586,8 @@ MiLocateSubsection(IN PMMVAD Vad, return Subsection; } +static VOID -NTAPI MiSegmentDelete(IN PSEGMENT Segment) { PCONTROL_AREA ControlArea; @@ -709,8 +709,8 @@ MiSegmentDelete(IN PSEGMENT Segment) ExFreePool(Segment); } +static VOID -NTAPI MiCheckControlArea(IN PCONTROL_AREA ControlArea, IN KIRQL OldIrql) { @@ -744,8 +744,8 @@ MiCheckControlArea(IN PCONTROL_AREA ControlArea, } } +static VOID -NTAPI MiDereferenceControlArea(IN PCONTROL_AREA ControlArea) { KIRQL OldIrql; @@ -798,8 +798,8 @@ MiRemoveMappedView(IN PEPROCESS CurrentProcess, MiCheckControlArea(ControlArea, OldIrql); } +static NTSTATUS -NTAPI MiUnmapViewOfSection(IN PEPROCESS Process, IN PVOID BaseAddress, IN ULONG Flags) @@ -919,8 +919,8 @@ MiUnmapViewOfSection(IN PEPROCESS Process, return Status; } +static NTSTATUS -NTAPI MiSessionCommitPageTables(IN PVOID StartVa, IN PVOID EndVa) { @@ -1147,120 +1147,8 @@ MiMapViewInSystemSpace( return STATUS_SUCCESS; } -VOID -NTAPI -MiSetControlAreaSymbolsLoaded(IN PCONTROL_AREA ControlArea) -{ - KIRQL OldIrql; - - ASSERT(KeGetCurrentIrql() <= APC_LEVEL); - - OldIrql = MiAcquirePfnLock(); - ControlArea->u.Flags.DebugSymbolsLoaded |= 1; - - ASSERT(OldIrql <= APC_LEVEL); - MiReleasePfnLock(OldIrql); - ASSERT(KeGetCurrentIrql() <= APC_LEVEL); -} - -VOID -NTAPI -MiLoadUserSymbols(IN PCONTROL_AREA ControlArea, - IN PVOID BaseAddress, - IN PEPROCESS Process) -{ - NTSTATUS Status; - ANSI_STRING FileNameA; - PLIST_ENTRY NextEntry; - PUNICODE_STRING FileName; - PIMAGE_NT_HEADERS NtHeaders; - PLDR_DATA_TABLE_ENTRY LdrEntry; - - FileName = &ControlArea->FilePointer->FileName; - if (FileName->Length == 0) - { - return; - } - - /* Acquire module list lock */ - KeEnterCriticalRegion(); - ExAcquireResourceExclusiveLite(&PsLoadedModuleResource, TRUE); - - /* Browse list to try to find current module */ - for (NextEntry = MmLoadedUserImageList.Flink; - NextEntry != &MmLoadedUserImageList; - NextEntry = NextEntry->Flink) - { - /* Get the entry */ - LdrEntry = CONTAINING_RECORD(NextEntry, - LDR_DATA_TABLE_ENTRY, - InLoadOrderLinks); - - /* If already in the list, increase load count */ - if (LdrEntry->DllBase == BaseAddress) - { - ++LdrEntry->LoadCount; - break; - } - } - - /* Not in the list, we'll add it */ - if (NextEntry == &MmLoadedUserImageList) - { - /* Allocate our element, taking to the name string and its null char */ - LdrEntry = ExAllocatePoolWithTag(NonPagedPool, FileName->Length + sizeof(UNICODE_NULL) + sizeof(*LdrEntry), 'bDmM'); - if (LdrEntry) - { - memset(LdrEntry, 0, FileName->Length + sizeof(UNICODE_NULL) + sizeof(*LdrEntry)); - - _SEH2_TRY - { - /* Get image checksum and size */ - NtHeaders = RtlImageNtHeader(BaseAddress); - if (NtHeaders) - { - LdrEntry->SizeOfImage = NtHeaders->OptionalHeader.SizeOfImage; - LdrEntry->CheckSum = NtHeaders->OptionalHeader.CheckSum; - } - } - _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) - { - ExFreePoolWithTag(LdrEntry, 'bDmM'); - ExReleaseResourceLite(&PsLoadedModuleResource); - KeLeaveCriticalRegion(); - _SEH2_YIELD(return); - } - _SEH2_END; - - /* Fill all the details */ - LdrEntry->DllBase = BaseAddress; - LdrEntry->FullDllName.Buffer = (PVOID)((ULONG_PTR)LdrEntry + sizeof(*LdrEntry)); - LdrEntry->FullDllName.Length = FileName->Length; - LdrEntry->FullDllName.MaximumLength = FileName->Length + sizeof(UNICODE_NULL); - memcpy(LdrEntry->FullDllName.Buffer, FileName->Buffer, FileName->Length); - LdrEntry->FullDllName.Buffer[LdrEntry->FullDllName.Length / sizeof(WCHAR)] = UNICODE_NULL; - LdrEntry->LoadCount = 1; - - /* Insert! */ - InsertHeadList(&MmLoadedUserImageList, &LdrEntry->InLoadOrderLinks); - } - } - - /* Release locks */ - ExReleaseResourceLite(&PsLoadedModuleResource); - KeLeaveCriticalRegion(); - - /* Load symbols */ - Status = RtlUnicodeStringToAnsiString(&FileNameA, FileName, TRUE); - if (NT_SUCCESS(Status)) - { - DbgLoadImageSymbols(&FileNameA, BaseAddress, (ULONG_PTR)Process->UniqueProcessId); - RtlFreeAnsiString(&FileNameA); - } -} - +static NTSTATUS -NTAPI MiMapViewOfDataSection(IN PCONTROL_AREA ControlArea, IN PEPROCESS Process, IN PVOID *BaseAddress, @@ -1514,25 +1402,8 @@ MiMapViewOfDataSection(IN PCONTROL_AREA ControlArea, return STATUS_SUCCESS; } -VOID -NTAPI -MiSubsectionConsistent(IN PSUBSECTION Subsection) -{ - /* ReactOS only supports systems with 4K pages and 4K sectors */ - ASSERT(Subsection->u.SubsectionFlags.SectorEndOffset == 0); - - /* Therefore, then number of PTEs should be equal to the number of sectors */ - if (Subsection->NumberOfFullSectors != Subsection->PtesInSubsection) - { - /* Break and warn if this is inconsistent */ - DPRINT1("Mm: Subsection inconsistent (%x vs %x)\n", - Subsection->NumberOfFullSectors, Subsection->PtesInSubsection); - DbgBreakPoint(); - } -} - +static NTSTATUS -NTAPI MiCreateDataFileMap(IN PFILE_OBJECT File, OUT PSEGMENT *Segment, IN PSIZE_T MaximumSize, @@ -1548,7 +1419,6 @@ MiCreateDataFileMap(IN PFILE_OBJECT File, static NTSTATUS -NTAPI MiCreatePagingFileMap(OUT PSEGMENT *Segment, IN PLARGE_INTEGER MaximumSize, IN ULONG ProtectionMask, @@ -1666,72 +1536,6 @@ MiCreatePagingFileMap(OUT PSEGMENT *Segment, return STATUS_SUCCESS; } -NTSTATUS -NTAPI -MiGetFileObjectForSectionAddress( - IN PVOID Address, - OUT PFILE_OBJECT *FileObject) -{ - PMMVAD Vad; - PCONTROL_AREA ControlArea; - - /* Get the VAD */ - Vad = MiLocateAddress(Address); - if (Vad == NULL) - { - /* Fail, the address does not exist */ - DPRINT1("Invalid address\n"); - return STATUS_INVALID_ADDRESS; - } - - /* Check if this is a RosMm memory area */ - if (Vad->u.VadFlags.Spare != 0) - { - PMEMORY_AREA MemoryArea = (PMEMORY_AREA)Vad; - - /* Check if it's a section view (RosMm section) */ - if (MemoryArea->Type == MEMORY_AREA_SECTION_VIEW) - { - /* Get the section pointer to the SECTION_OBJECT */ - *FileObject = MemoryArea->SectionData.Segment->FileObject; - } - else - { -#ifdef NEWCC - ASSERT(MemoryArea->Type == MEMORY_AREA_CACHE); - DPRINT1("Address is a cache section!\n"); - return STATUS_SECTION_NOT_IMAGE; -#else - ASSERT(FALSE); - return STATUS_SECTION_NOT_IMAGE; -#endif - } - } - else - { - /* Make sure it's not a VM VAD */ - if (Vad->u.VadFlags.PrivateMemory == 1) - { - DPRINT1("Address is not a section\n"); - return STATUS_SECTION_NOT_IMAGE; - } - - /* Get the control area */ - ControlArea = Vad->ControlArea; - if (!(ControlArea) || !(ControlArea->u.Flags.Image)) - { - DPRINT1("Address is not a section\n"); - return STATUS_SECTION_NOT_IMAGE; - } - - /* Get the file object */ - *FileObject = ControlArea->FilePointer; - } - - /* Return success */ - return STATUS_SUCCESS; -} - PFILE_OBJECT NTAPI MmGetFileObjectForSection(IN PVOID SectionObject) @@ -1827,8 +1631,8 @@ MmGetImageInformation (OUT PSECTION_IMAGE_INFORMATION ImageInformation) *ImageInformation = ((PMM_IMAGE_SECTION_OBJECT)SectionObject->Segment)->ImageInformation; } +static NTSTATUS -NTAPI MmGetFileNameForFileObject(IN PFILE_OBJECT FileObject, OUT POBJECT_NAME_INFORMATION *ModuleName) { @@ -2111,180 +1915,8 @@ MiFlushTbAndCapture(IN PMMVAD FoundVad, MiReleasePfnLock(OldIrql); } -// -// NOTE: This function gets a lot more complicated if we want Copy-on-Write support -// -NTSTATUS -NTAPI -MiSetProtectionOnSection(IN PEPROCESS Process, - IN PMMVAD FoundVad, - IN PVOID StartingAddress, - IN PVOID EndingAddress, - IN ULONG NewProtect, - OUT PULONG CapturedOldProtect, - IN ULONG DontCharge, - OUT PULONG Locked) -{ - PMMPTE PointerPte, LastPte; - MMPTE TempPte, PteContents; - PMMPDE PointerPde; - PMMPFN Pfn1; - ULONG ProtectionMask, QuotaCharge = 0; - PETHREAD Thread = PsGetCurrentThread(); - PAGED_CODE(); - - // - // Tell caller nothing is being locked - // - *Locked = FALSE; - - // - // This function should only be used for section VADs. Windows ASSERT */ - // - ASSERT(FoundVad->u.VadFlags.PrivateMemory == 0); - - // - // We don't support these features in ARM3 - // - ASSERT(FoundVad->u.VadFlags.VadType != VadImageMap); - ASSERT(FoundVad->u2.VadFlags2.CopyOnWrite == 0); - - // - // Convert and validate the protection mask - // - ProtectionMask = MiMakeProtectionMask(NewProtect); - if (ProtectionMask == MM_INVALID_PROTECTION) - { - DPRINT1("Invalid section protect\n"); - return STATUS_INVALID_PAGE_PROTECTION; - } - - // - // Get the PTE and PDE for the address, as well as the final PTE - // - MiLockProcessWorkingSetUnsafe(Process, Thread); - PointerPde = MiAddressToPde(StartingAddress); - PointerPte = MiAddressToPte(StartingAddress); - LastPte = MiAddressToPte(EndingAddress); - - // - // Make the PDE valid, and check the status of the first PTE - // - MiMakePdeExistAndMakeValid(PointerPde, Process, MM_NOIRQL); - if (PointerPte->u.Long) - { - // - // Not supported in ARM3 - // - ASSERT(FoundVad->u.VadFlags.VadType != VadRotatePhysical); - - // - // Capture the page protection and make the PDE valid - // - *CapturedOldProtect = MiGetPageProtection(PointerPte); - MiMakePdeExistAndMakeValid(PointerPde, Process, MM_NOIRQL); - } - else - { - // - // Only pagefile-backed section VADs are supported for now - // - ASSERT(FoundVad->u.VadFlags.VadType != VadImageMap); - - // - // Grab the old protection from the VAD itself - // - *CapturedOldProtect = MmProtectToValue[FoundVad->u.VadFlags.Protection]; - } - - // - // Loop all the PTEs now - // - MiMakePdeExistAndMakeValid(PointerPde, Process, MM_NOIRQL); - while (PointerPte <= LastPte) - { - // - // Check if we've crossed a PDE boundary and make the new PDE valid too - // - if (MiIsPteOnPdeBoundary(PointerPte)) - { - PointerPde = MiPteToPde(PointerPte); - MiMakePdeExistAndMakeValid(PointerPde, Process, MM_NOIRQL); - } - - // - // Capture the PTE and see what we're dealing with - // - PteContents = *PointerPte; - if (PteContents.u.Long == 0) - { - // - // This used to be a zero PTE and it no longer is, so we must add a - // reference to the pagetable. - // - MiIncrementPageTableReferences(MiPteToAddress(PointerPte)); - - // - // Create the demand-zero prototype PTE - // - TempPte = PrototypePte; - TempPte.u.Soft.Protection = ProtectionMask; - MI_WRITE_INVALID_PTE(PointerPte, TempPte); - } - else if (PteContents.u.Hard.Valid == 1) - { - // - // Get the PFN entry - // - Pfn1 = MiGetPfnEntry(PFN_FROM_PTE(&PteContents)); - - // - // We don't support these yet - // - ASSERT((NewProtect & (PAGE_NOACCESS | PAGE_GUARD)) == 0); - ASSERT(Pfn1->u3.e1.PrototypePte == 0); - - // - // Write the protection mask and write it with a TLB flush - // - Pfn1->OriginalPte.u.Soft.Protection = ProtectionMask; - MiFlushTbAndCapture(FoundVad, - PointerPte, - ProtectionMask, - Pfn1, - TRUE); - } - else - { - // - // We don't support these cases yet - // - ASSERT(PteContents.u.Soft.Prototype == 0); - ASSERT(PteContents.u.Soft.Transition == 0); - - // - // The PTE is already demand-zero, just update the protection mask - // - PointerPte->u.Soft.Protection = ProtectionMask; - } - - PointerPte++; - } - - // - // Unlock the working set and update quota charges if needed, then return - // - MiUnlockProcessWorkingSetUnsafe(Process, Thread); - if ((QuotaCharge > 0) && (!DontCharge)) - { - FoundVad->u.VadFlags.CommitCharge -= QuotaCharge; - Process->CommitCharge -= QuotaCharge; - } - return STATUS_SUCCESS; -} - +static VOID -NTAPI MiRemoveMappedPtes(IN PVOID BaseAddress, IN ULONG NumberOfPtes, IN PCONTROL_AREA ControlArea, @@ -2385,8 +2017,8 @@ MiRemoveMappedPtes(IN PVOID BaseAddress, MiCheckControlArea(ControlArea, OldIrql); } +static ULONG -NTAPI MiRemoveFromSystemSpace(IN PMMSESSION Session, IN PVOID Base, OUT PCONTROL_AREA *ControlArea) @@ -2429,8 +2061,8 @@ MiRemoveFromSystemSpace(IN PMMSESSION Session, return Size; } +static NTSTATUS -NTAPI MiUnmapViewInSystemSpace(IN PMMSESSION Session, IN PVOID MappedBase) { @@ -2569,6 +2201,7 @@ MmCreateArm3Section(OUT PVOID *SectionObject, } #else /* ReactOS doesn't support this API yet, so do nothing */ + UNIMPLEMENTED; Status = STATUS_SUCCESS; #endif /* Update the top-level IRP so that drivers know what's happening */ From 43b3280f69693d7f3b011b17cf43831fbf6b63c7 Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Tue, 21 May 2024 12:57:54 +0200 Subject: [PATCH 165/182] [EXPLORER] Don't use Explorers ID_SHELL_CMD IDs in IShellFolder menu (#6872) Explorer does not control the IDs used by CFSFolder::QueryContext menu and therefore cannot share its ID range with it. The range passed to CFSFolder::QueryContext also cannot start at 0 because CTrayWindow::TrackCtxMenu would interpret that as user cancel. --- base/shell/explorer/resource.h | 4 +- base/shell/explorer/startctxmnu.cpp | 78 ++++++++++++++++------------- base/shell/explorer/traywnd.cpp | 5 +- 3 files changed, 46 insertions(+), 41 deletions(-) diff --git a/base/shell/explorer/resource.h b/base/shell/explorer/resource.h index acc350843e6..cd4400a9334 100644 --- a/base/shell/explorer/resource.h +++ b/base/shell/explorer/resource.h @@ -201,8 +201,6 @@ #define IDMA_RESTORE_OPEN 416 #define IDMA_MINIMIZE_ALL 419 -#define ID_SHELL_CMD_FIRST 0xF -#define ID_SHELL_CMD_LAST 0x7FEF #define ID_SHELL_CMD_PROPERTIES (401) #define ID_SHELL_CMD_OPEN_ALL_USERS (402) #define ID_SHELL_CMD_EXPLORE_ALL_USERS (403) @@ -216,3 +214,5 @@ #define ID_SHELL_CMD_CUST_NOTIF (411) #define ID_SHELL_CMD_ADJUST_DAT (412) #define ID_SHELL_CMD_RESTORE_ALL (413) +#define ID_SHELL_CMD_FIRST ID_SHELL_CMD_PROPERTIES +#define ID_SHELL_CMD_LAST ID_SHELL_CMD_RESTORE_ALL diff --git a/base/shell/explorer/startctxmnu.cpp b/base/shell/explorer/startctxmnu.cpp index 50fea3ab6db..ccee6ef6a7e 100644 --- a/base/shell/explorer/startctxmnu.cpp +++ b/base/shell/explorer/startctxmnu.cpp @@ -29,15 +29,21 @@ class CStartMenuBtnCtxMenu : public CComObjectRootEx, public IContextMenu { + /* AddStartContextMenuItems uses ID_SHELL_CMD IDs directly and relies on idCmdFirst being 0. + * CTrayWindow::TrackCtxMenu must pass 0 because DeleteMenu ID_SHELL_CMD_UNDO_ACTION would + * delete the wrong item if it used 1. m_Inner->QueryContextMenu is not aware of this game + * so we have to reserve the entire ID_SHELL_CMD range for ourselves here. */ + enum { INNERIDOFFSET = ID_SHELL_CMD_LAST + 1 }; + static BOOL IsShellCmdId(UINT_PTR id) { return id < INNERIDOFFSET; } + CComPtr m_TrayWnd; CComPtr m_Inner; CComPtr m_Folder; - UINT m_idCmdCmLast; HWND m_Owner; LPITEMIDLIST m_FolderPidl; - HRESULT CreateContextMenuFromShellFolderPidl(HMENU hPopup) + HRESULT CreateContextMenuFromShellFolderPidl(HMENU hPopup, UINT idCmdFirst, UINT idCmdLast) { HRESULT hRet; @@ -49,19 +55,16 @@ class CStartMenuBtnCtxMenu : hRet = m_Inner->QueryContextMenu( hPopup, 0, - ID_SHELL_CMD_FIRST, - ID_SHELL_CMD_LAST, + idCmdFirst, + idCmdLast, CMF_VERBSONLY); if (SUCCEEDED(hRet)) { return hRet; } - - DestroyMenu(hPopup); } } - return E_FAIL; } @@ -69,6 +72,9 @@ class CStartMenuBtnCtxMenu : { WCHAR szBuf[MAX_PATH]; HRESULT hRet; + C_ASSERT(ID_SHELL_CMD_FIRST != 0); + /* If this ever asserts, let m_Inner use 1..ID_SHELL_CMD_FIRST-1 instead */ + C_ASSERT(ID_SHELL_CMD_LAST < 0xffff / 2); /* Add the "Open All Users" menu item */ if (LoadStringW(hExplorerInstance, @@ -148,13 +154,13 @@ class CStartMenuBtnCtxMenu : { LPITEMIDLIST pidlStart; CComPtr psfDesktop; - HRESULT hRet; + HRESULT hRet = S_OK; + UINT idInnerFirst = idCmdFirst + INNERIDOFFSET; psfDesktop = NULL; m_Inner = NULL; pidlStart = SHCloneSpecialIDList(m_Owner, CSIDL_STARTMENU, TRUE); - if (pidlStart != NULL) { m_FolderPidl = ILClone(ILFindLastID(pidlStart)); @@ -168,49 +174,48 @@ class CStartMenuBtnCtxMenu : hRet = psfDesktop->BindToObject(pidlStart, NULL, IID_PPV_ARG(IShellFolder, &m_Folder)); if (SUCCEEDED(hRet)) { - hRet = CreateContextMenuFromShellFolderPidl(hPopup); - m_idCmdCmLast = (SUCCEEDED(hRet)) ? HRESULT_CODE(hRet) : ID_SHELL_CMD_LAST; - AddStartContextMenuItems(hPopup); + hRet = CreateContextMenuFromShellFolderPidl(hPopup, idInnerFirst, idCmdLast); } } } ILFree(pidlStart); } - - return S_OK; + if (idCmdLast - idCmdFirst >= ID_SHELL_CMD_LAST - ID_SHELL_CMD_FIRST) + { + AddStartContextMenuItems(hPopup); + hRet = SUCCEEDED(hRet) ? hRet + idInnerFirst : idInnerFirst; + } + return hRet; } virtual HRESULT STDMETHODCALLTYPE InvokeCommand(LPCMINVOKECOMMANDINFO lpici) { UINT uiCmdId = PtrToUlong(lpici->lpVerb); - if (uiCmdId != 0) + if (!IsShellCmdId((UINT_PTR)lpici->lpVerb)) { - if ((uiCmdId >= ID_SHELL_CMD_FIRST) && (uiCmdId < m_idCmdCmLast)) - { - CMINVOKECOMMANDINFO cmici = { 0 }; - CHAR szDir[MAX_PATH]; - - /* Setup and invoke the shell command */ - cmici.cbSize = sizeof(cmici); - cmici.hwnd = m_Owner; - cmici.lpVerb = MAKEINTRESOURCEA(uiCmdId - ID_SHELL_CMD_FIRST); - cmici.nShow = SW_NORMAL; - - /* FIXME: Support Unicode!!! */ - if (SHGetPathFromIDListA(m_FolderPidl, szDir)) - { - cmici.lpDirectory = szDir; - } - - m_Inner->InvokeCommand(&cmici); - } + CMINVOKECOMMANDINFO cmici = { 0 }; + CHAR szDir[MAX_PATH]; + + /* Setup and invoke the shell command */ + cmici.cbSize = sizeof(cmici); + cmici.hwnd = m_Owner; + if (IS_INTRESOURCE(lpici->lpVerb)) + cmici.lpVerb = MAKEINTRESOURCEA(uiCmdId - INNERIDOFFSET); else + cmici.lpVerb = lpici->lpVerb; + cmici.nShow = SW_NORMAL; + + /* FIXME: Support Unicode!!! */ + if (SHGetPathFromIDListA(m_FolderPidl, szDir)) { - m_TrayWnd->ExecContextMenuCmd(uiCmdId); + cmici.lpDirectory = szDir; } + + return m_Inner->InvokeCommand(&cmici); } + m_TrayWnd->ExecContextMenuCmd(uiCmdId); return S_OK; } @@ -221,12 +226,13 @@ class CStartMenuBtnCtxMenu : LPSTR pszName, UINT cchMax) { + if (!IsShellCmdId(idCmd) && m_Inner) + return m_Inner->GetCommandString(idCmd, uType, pwReserved, pszName, cchMax); return E_NOTIMPL; } CStartMenuBtnCtxMenu() { - m_idCmdCmLast = ID_SHELL_CMD_LAST; } virtual ~CStartMenuBtnCtxMenu() diff --git a/base/shell/explorer/traywnd.cpp b/base/shell/explorer/traywnd.cpp index 883fb643191..25de8857d30 100644 --- a/base/shell/explorer/traywnd.cpp +++ b/base/shell/explorer/traywnd.cpp @@ -3763,6 +3763,8 @@ class CTrayWindowCtxMenu : HMENU hMenuBase; hMenuBase = LoadPopupMenu(hExplorerInstance, MAKEINTRESOURCEW(IDM_TRAYWND)); + if (!hMenuBase) + return HResultFromWin32(GetLastError()); if (g_MinimizedAll.GetSize() != 0 && !::IsThereAnyEffectiveWindow(TRUE)) { @@ -3775,9 +3777,6 @@ class CTrayWindowCtxMenu : SetMenuItemInfoW(hMenuBase, ID_SHELL_CMD_SHOW_DESKTOP, FALSE, &mii); } - if (!hMenuBase) - return HRESULT_FROM_WIN32(GetLastError()); - if (SHRestricted(REST_CLASSICSHELL) != 0) { DeleteMenu(hPopup, From a549a9d8e403180f42e84e9c3e7979d60e62c268 Mon Sep 17 00:00:00 2001 From: Joachim Henze Date: Tue, 21 May 2024 18:29:52 +0200 Subject: [PATCH 166/182] [SHELL32] ro-RO.rc Improvement (#6844) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Addendum to #6517 (the rules) and Addendum to #6657 (Andreis recent shell32 PR) Following the rule: 1.) We use only the correct Romanian language diacritics. This means using lowercase Å£ instead of È›. This means using lowercase ÅŸ instead of È™. This means using uppercase Åž instead of Ș. Some of XP/2k3sp2 fonts do lack È› and È™ and Ș. 2.) Avoid the word "calculator" for the shutdown/logoff prompt (same as Andrei Miloiu did before in his PR at many locations). Using "sistem" is fine, and using "computer" is fine. 3.) Harmonize some strings used for some FILEOPENDLG_FILTER. TODO: [] In a future PR we will have to do the same character replacements for the Shell folder path default values. This has to be done in sync with dll/win32/userenv/lang therefore I left them out here for now, for easier reviewability of those more delicate parts. --- dll/win32/shell32/lang/ro-RO.rc | 218 ++++++++++++++++---------------- 1 file changed, 109 insertions(+), 109 deletions(-) diff --git a/dll/win32/shell32/lang/ro-RO.rc b/dll/win32/shell32/lang/ro-RO.rc index e28baae0f67..6b1363f8e43 100644 --- a/dll/win32/shell32/lang/ro-RO.rc +++ b/dll/win32/shell32/lang/ro-RO.rc @@ -237,7 +237,7 @@ BEGIN EDITTEXT 14011, 58, 72, 170, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL LTEXT "Dimensiune pe disc:", 140101, 8, 88, 55, 10 EDITTEXT 14012, 58, 88, 170, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - LTEXT "ConÈ›ine:", 14026, 8, 104, 55, 10 + LTEXT "ConÅ£ine:", 14026, 8, 104, 55, 10 EDITTEXT 14027, 58, 104, 170, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL LTEXT "", -1, 8, 120, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE LTEXT "Creat:", 14014, 8, 128, 55, 10 @@ -258,8 +258,8 @@ BEGIN ICON "", 14000, 16, 7, 32, 32, WS_VISIBLE EDITTEXT 14001, 58, 9, 170, 14, ES_LEFT | WS_TABSTOP LTEXT "", -1, 8, 29, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE - LTEXT "Tip fiÈ™ier:", 14004, 8, 35, 50, 10 - CONTROL "FiÈ™ier", 14005, "edit", ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP, 58, 35, 170, 10 + LTEXT "Tip fiÅŸier:", 14004, 8, 35, 50, 10 + CONTROL "FiÅŸier", 14005, "edit", ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP, 58, 35, 170, 10 LTEXT "Se deschide cu:", 14006, 8, 53, 50, 10 ICON "", 14025, 58, 52, 11, 10, NOT WS_VISIBLE PUSHBUTTON "&Răsfoire…", 14024, 168, 50, 60, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP @@ -314,7 +314,7 @@ BEGIN LTEXT "", -1, 8, 32, 223, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE LTEXT "Tip:", -1, 8, 38, 95, 10 EDITTEXT 14001, 110, 38, 120, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - LTEXT "Sistem de fiÈ™iere:", -1, 8, 51, 95, 10 + LTEXT "Sistem de fiÅŸiere:", -1, 8, 51, 95, 10 EDITTEXT 14002, 110, 51, 120, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP LTEXT "", -1, 8, 64, 223, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE CONTROL "", 14013, "Static", SS_SUNKEN | SS_OWNERDRAW, 8, 69, 10, 10 @@ -389,12 +389,12 @@ CAPTION "General" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 - GROUPBOX "PreferinÈ›e pentru locaÈ›ia aleasă", -1, 10, 72, 220, 70 + GROUPBOX "PreferinÅ£e pentru locaÅ£ia aleasă", -1, 10, 72, 220, 70 RADIOBUTTON "&Dimensiune specificată:", 14001, 20, 90, 88, 10, WS_TABSTOP EDITTEXT 14002, 116, 103, 50, 14, WS_TABSTOP | ES_NUMBER LTEXT "Dimensiune maximă (MO):", -1, 20, 105, 84, 10 - RADIOBUTTON "&Nu se aruncă fiÈ™ierele în CoÈ™ul de reciclare, elimină-le direct.", 14003, 20, 117, 200, 20, BS_MULTILINE | WS_TABSTOP - AUTOCHECKBOX "&AfiÈ™are casetă de dialog pentru È™tergeri", 14004, 20, 155, 140, 10, WS_TABSTOP + RADIOBUTTON "&Nu se aruncă fiÅŸierele în CoÅŸul de reciclare, elimină-le direct.", 14003, 20, 117, 200, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&AfiÅŸare casetă de dialog pentru ÅŸtergeri", 14004, 20, 155, 140, 10, WS_TABSTOP END IDD_OPEN_WITH DIALOGEX 0, 0, 264, 256 @@ -404,7 +404,7 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 LTEXT "AlegeÅ£i programul pentru a deschide acest fiÅŸier:", -1, 44, 12, 211, 10 - LTEXT "FiÈ™ier: ", 14001, 44, 25, 188, 20 + LTEXT "FiÅŸier: ", 14001, 44, 25, 188, 20 GROUPBOX "&Programe", -1, 7, 42, 249, 187 CONTROL "Programe", 14002, WC_TREEVIEW, WS_BORDER | WS_TABSTOP | TVS_SHOWSELALWAYS, 16 ,57, 230, 130 AUTOCHECKBOX "Pr&ogramul selectat va deschide întotdeauna acest tip de fiÅŸier", 14003, 16, 193, 232, 10 @@ -418,7 +418,7 @@ STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "General" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - GROUPBOX "Activități", -1, 7, 10, 249, 40 + GROUPBOX "Activităţi", -1, 7, 10, 249, 40 CONTROL "", IDC_FOLDER_OPTIONS_TASKICON, "Static", SS_ICON | WS_CHILD | WS_VISIBLE, 14, 20, 21, 20 AUTORADIOBUTTON "&AfiÅŸare activităţi comune în foldere", IDC_FOLDER_OPTIONS_COMMONTASKS, 40, 20, 210, 10, WS_TABSTOP | WS_GROUP AUTORADIOBUTTON "&Utilizare foldere ReactOS clasice", IDC_FOLDER_OPTIONS_CLASSICFOLDERS, 40, 32, 210, 10 @@ -479,9 +479,9 @@ BEGIN PUSHBUTTON "Revocare", IDCANCEL, 215, 122, 60, 14 ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL LTEXT "Acest folder conÅ£ine deja un fiÅŸier de sistem cu numele '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX - LTEXT "Folderul curent deja conÈ›ine un fiÈ™ier Doar în citire cu numele '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX - LTEXT "Folderul curent deja conÈ›ine un fiÈ™ier de sistem cu numele '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX - LTEXT "ÃŽnlocuiÅ£i fiÅŸierul existent", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "Folderul curent deja conÅ£ine un fiÅŸier Doar în citire cu numele '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Folderul curent deja conÅ£ine un fiÅŸier de sistem cu numele '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "ÃŽnlocuiÅ£i fiÅŸierul existent?", -1, 44, 35, 228, 10, SS_NOPREFIX LTEXT "(dată ÅŸi mărime necunoscute)", 12302, 79, 51, 198, 20, SS_NOPREFIX ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL LTEXT "cu acesta?", -1, 44, 75, 228, 10, SS_NOPREFIX @@ -541,7 +541,7 @@ END IDD_MIXED_CONTENT1 DIALOGEX 0, 0, 227, 207 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION -CAPTION "ConÈ›inut mixt" +CAPTION "ConÅ£inut mixt" FONT 8, "MS Shell Dlg" BEGIN ICON "", 1000, 5, 7, 21, 20 @@ -554,7 +554,7 @@ END IDD_MIXED_CONTENT2 DIALOGEX 0, 0, 227, 206 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION -CAPTION "ConÈ›inut mixt" +CAPTION "ConÅ£inut mixt" FONT 8, "MS Shell Dlg" BEGIN ICON "", 1000, 5, 7, 21, 20 @@ -577,7 +577,7 @@ BEGIN LTEXT "ReactOS poate să efectueze această acÅ£iune de fiecare dată când conectaÅ£i acest dispozitiv.", 1001, 32, 7, 190, 22 LTEXT "&Ce să facă ReactOS?", 1002, 32, 31, 190, 8 CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 - AUTOCHECKBOX "&Efectuează mereu aceeaÈ™i acÈ›iune", 1004, 32, 143, 190, 8 + AUTOCHECKBOX "&Efectuează mereu aceeaÅŸi acÈ›iune", 1004, 32, 143, 190, 8 DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 PUSHBUTTON "Revocare", IDCANCEL, 159, 160, 60, 14 END @@ -636,10 +636,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBL CAPTION "Modificare pictogramă" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - LTEXT "Căutare pictograme în fiÈ™ierul:", -1, 7, 7, 179, 10 + LTEXT "Căutare pictograme în fiÅŸierul:", -1, 7, 7, 179, 10 PUSHBUTTON "&Răsfoire…", IDC_BUTTON_PATH, 135, 17, 50, 14 EDITTEXT IDC_EDIT_PATH, 7, 17, 123, 14, ES_AUTOHSCROLL - LTEXT "SelectaÈ›i o pictogramă din lista de mai jos:", -1, 7, 36, 179, 10 + LTEXT "SelectaÅ£i o pictogramă din lista de mai jos:", -1, 7, 36, 179, 10 LISTBOX IDC_PICKICON_LIST, 7, 47, 181, 122, LBS_OWNERDRAWFIXED | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | LBS_DISABLENOSCROLL | WS_HSCROLL | WS_TABSTOP DEFPUSHBUTTON "OK", IDOK, 81, 179, 50, 14 PUSHBUTTON "Revocare", IDCANCEL, 135, 179, 50, 14 @@ -647,14 +647,14 @@ END IDD_NOOPEN DIALOGEX 0, 0, 240, 75 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "AtenÈ›ie" +CAPTION "AtenÅ£ie" FONT 8, "MS Shell Dlg" BEGIN ICON IDI_SHELL_SYSTEM_FILE, IDI_SHELL_SYSTEM_FILE, 5, 5, 21, 20 - LTEXT "Acest fiÈ™ier ar putea să fie folosit fie de către sistemul de\n\ -operare sau de o oarecare aplicaÈ›ie. Modificând acest fiÈ™ier\n\ -riscaÈ›i să cauzaÈ›i daune în sistem.\n\n\ -Sigur doriÈ›i să deschideÈ›i acest fiÈ™ier?", IDC_STATIC, 35, 5, 230, 60 + LTEXT "Acest fiÅŸier ar putea să fie folosit fie de către sistemul de\n\ +operare sau de o oarecare aplicaÅ£ie. Modificând acest fiÅŸier\n\ +riscaÅ£i să cauzaÅ£i daune în sistem.\n\n\ +Sigur doriÅ£i să deschideÅ£i acest fiÅŸier?", IDC_STATIC, 35, 5, 230, 60 DEFPUSHBUTTON "&Da", IDYES, 125, 55, 50, 14 PUSHBUTTON "&Nu", IDNO, 180, 55, 50, 14 END @@ -664,46 +664,46 @@ CAPTION "Creare extensie nouă" STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU FONT 8, "MS Shell Dlg" BEGIN - LTEXT "E&xtensie fiÈ™ier:", -1, 10, 10, 85, 14 + LTEXT "E&xtensie fiÅŸier:", -1, 10, 10, 85, 14 EDITTEXT IDC_NEWEXT_EDIT, 105, 8, 60, 14 PUSHBUTTON "<< &Complex", IDC_NEWEXT_ADVANCED, 185, 8, 65, 15 - LTEXT "Tip de fiÈ™ier &asociat:", IDC_NEWEXT_ASSOC, 10, 34, 85, 14 + LTEXT "Tip de fiÅŸier &asociat:", IDC_NEWEXT_ASSOC, 10, 34, 85, 14 COMBOBOX IDC_NEWEXT_COMBOBOX, 105, 32, 145, 120, CBS_AUTOHSCROLL | CBS_DROPDOWNLIST | WS_VSCROLL | WS_GROUP | WS_TABSTOP DEFPUSHBUTTON "OK", IDOK, 125, 55, 60, 14 PUSHBUTTON "Revocare", IDCANCEL, 190, 55, 60, 14 END IDD_EDITTYPE DIALOG 0, 0, 225, 190 -CAPTION "Editare tip fiÈ™ier" +CAPTION "Editare tip fiÅŸier" STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU FONT 8, "MS Shell Dlg" BEGIN ICON "", IDC_EDITTYPE_ICON, 5, 8, 20, 20 EDITTEXT IDC_EDITTYPE_TEXT, 30, 10, 115, 14, ES_AUTOHSCROLL PUSHBUTTON "S&chimbare pictogramă…", IDC_EDITTYPE_CHANGE_ICON, 150, 10, 70, 14 - LTEXT "&AcÈ›iuni:", -1, 5, 37, 70, 10 + LTEXT "&AcÅ£iuni:", -1, 5, 37, 70, 10 LISTBOX IDC_EDITTYPE_LISTBOX, 5, 50, 140, 60, LBS_NOINTEGRALHEIGHT | LBS_HASSTRINGS | LBS_OWNERDRAWFIXED | LBS_NOTIFY | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "No&u", IDC_EDITTYPE_NEW, 150, 50, 70, 14 PUSHBUTTON "&Editare…", IDC_EDITTYPE_EDIT_BUTTON, 150, 65, 70, 14 PUSHBUTTON "Eli&minare", IDC_EDITTYPE_REMOVE, 150, 80, 70, 14 PUSHBUTTON "&Implicit", IDC_EDITTYPE_SET_DEFAULT, 150, 95, 70, 14 - AUTOCHECKBOX "Confirmare &deschiderere după descărcare", IDC_EDITTYPE_CONFIRM_OPEN, 5, 115, 150, 14 - AUTOCHECKBOX "Se afiÈ™ează întotdeauna extensia", IDC_EDITTYPE_SHOW_EXT, 5, 130, 150, 14 - AUTOCHECKBOX "Căuta&re în aceeaÈ™i fereastră", IDC_EDITTYPE_SAME_WINDOW, 5, 145, 150, 14 + AUTOCHECKBOX "Confirmare &deschidere după descărcare", IDC_EDITTYPE_CONFIRM_OPEN, 5, 115, 150, 14 + AUTOCHECKBOX "Se afiÅŸează întotdeauna extensia", IDC_EDITTYPE_SHOW_EXT, 5, 130, 150, 14 + AUTOCHECKBOX "Căuta&re în aceeaÅŸi fereastră", IDC_EDITTYPE_SAME_WINDOW, 5, 145, 150, 14 DEFPUSHBUTTON "OK", IDOK, 95, 170, 60, 14 PUSHBUTTON "Revocare", IDCANCEL, 160, 170, 60, 14 END IDD_ACTION DIALOG 0, 0, 225, 95 -CAPTION "Creare acÈ›iune" +CAPTION "Creare acÅ£iune" STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU FONT 8, "MS Shell Dlg" BEGIN - LTEXT "&AcÈ›iune:", -1, 5, 7, 150, 10 + LTEXT "&AcÅ£iune:", -1, 5, 7, 150, 10 EDITTEXT IDC_ACTION_ACTION, 5, 20, 150, 14, ES_AUTOHSCROLL - LTEXT "Apli&caÈ›ia utilizată pentru efectuarea acÈ›iunii:", -1, 5, 42, 150, 10 + LTEXT "Apli&caÅ£ia utilizată pentru efectuarea acÅ£iunii:", -1, 5, 42, 150, 10 EDITTEXT IDC_ACTION_APP, 5, 55, 150, 14, ES_AUTOHSCROLL - PUSHBUTTON "Sp&ecificare…", IDC_ACTION_BROWSE, 160, 60, 60, 14 + PUSHBUTTON "&Răsfoire…", IDC_ACTION_BROWSE, 160, 60, 60, 14 AUTOCHECKBOX "Folosire &DDE", IDC_ACTION_USE_DDE, 10, 75, 103, 14 DEFPUSHBUTTON "OK", IDOK, 160, 20, 60, 14 PUSHBUTTON "Revocare", IDCANCEL, 160, 40, 60, 14 @@ -714,18 +714,18 @@ CAPTION "Particularizare" STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Ce tip de folder doriÈ›i?", IDC_STATIC, 5, 5, 230, 65, WS_TABSTOP - LTEXT "&UtilizaÈ›i acest tip de folder ca È™ablon:", IDC_STATIC, 15, 20, 210, 12 + GROUPBOX "Ce tip de folder doriÅ£i?", IDC_STATIC, 5, 5, 230, 65, WS_TABSTOP + LTEXT "&UtilizaÅ£i acest tip de folder ca ÅŸablon:", IDC_STATIC, 15, 20, 210, 12 COMBOBOX IDC_FOLDERCUST_COMBOBOX, 15, 35, 210, 300, CBS_HASSTRINGS | CBS_AUTOHSCROLL | CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - AUTOCHECKBOX "Aplică acest È™a&blon pentru toate subfolderele sale", IDC_FOLDERCUST_CHECKBOX, 15, 50, 210, 15 + AUTOCHECKBOX "Aplică acest ÅŸa&blon pentru toate subfolderele sale", IDC_FOLDERCUST_CHECKBOX, 15, 50, 210, 15 GROUPBOX "Folder de imagini", IDC_STATIC, 5, 75, 230, 85, WS_TABSTOP - LTEXT "Pentru aspect cu miniaturi puteÈ›i pune o imagine în acest folder care să vă amintească de conÈ›inutul său.", IDC_STATIC, 15, 87, 115, 33 + LTEXT "Pentru aspect cu miniaturi puteÅ£i pune o imagine în acest folder care să vă amintească de conÅ£inutul său.", IDC_STATIC, 15, 87, 115, 33 PUSHBUTTON "&Răsfoire imagine…", IDC_FOLDERCUST_CHOOSE_PIC, 15, 120, 115, 15 PUSHBUTTON "Resta&bilire valori implicite", IDC_FOLDERCUST_RESTORE_DEFAULTS, 15, 139, 115, 15 LTEXT "Previzualizare:", IDC_STATIC, 139, 85, 81, 11 CONTROL "", IDC_FOLDERCUST_PREVIEW_BITMAP, "STATIC", SS_BITMAP | WS_GROUP, 150, 100, 60, 60 GROUPBOX "Pictograme de folder", IDC_STATIC, 5, 165, 230, 50, WS_TABSTOP - LTEXT "Pentru alte aspecte în afara miniaturilor, puteÈ›i schimba pictograma folder cu altceva.", IDC_STATIC, 15, 175, 210, 25 + LTEXT "Pentru alte aspecte în afara miniaturilor, puteÅ£i schimba pictograma folder cu altceva.", IDC_STATIC, 15, 175, 210, 25 ICON 0, IDC_FOLDERCUST_ICON, 175, 194, 32, 30 PUSHBUTTON "Schi&mbare pictogramă…", IDC_FOLDERCUST_CHANGE_ICON, 15, 195, 75, 15 END @@ -736,11 +736,11 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU FONT 8, "MS Shell Dlg" BEGIN ICON 0, IDC_LINK_PROBLEM_ICON, 5, 5, 0, 0 - LTEXT "Elementul '%s' la care această scurtătură face referire a fost schimbată sau mutată, aÈ™a că scurtătura nu va mai funcÈ›iona corect.", IDC_LINK_PROBLEM_LABEL1, 35, 5, 210, 35 - LTEXT "Cea mai apropiată potrivire, bazată pe nume, tip, mărime È™i dată:", IDC_LINK_PROBLEM_LABEL2, 35, 45, 210, 35 - LTEXT "ReparaÈ›i scurtătura pentru a atinge È›inta sau doar vreÈ›i să o È™tergeÈ›i?", -1, 35, 85, 210, 30 + LTEXT "Elementul '%s' la care această scurtătură face referire a fost schimbată sau mutată, aÅŸa că scurtătura nu va mai funcÅ£iona corect.", IDC_LINK_PROBLEM_LABEL1, 35, 5, 210, 35 + LTEXT "Cea mai apropiată potrivire, bazată pe nume, tip, mărime ÅŸi dată:", IDC_LINK_PROBLEM_LABEL2, 35, 45, 210, 35 + LTEXT "ReparaÅ£i scurtătura pentru a atinge Å£inta sau doar vreÅ£i să o ÅŸtergeÅ£i?", -1, 35, 85, 210, 30 DEFPUSHBUTTON "&Reparare", IDOK, 55, 120, 60, 15, WS_DISABLED - PUSHBUTTON "&Ștergere", IDYES, 120, 120, 60, 15 + PUSHBUTTON "Åž&tergere", IDYES, 120, 120, 60, 15 PUSHBUTTON "Revocare", IDCANCEL, 185, 120, 60, 15 END @@ -756,23 +756,23 @@ BEGIN IDS_SHV_COLUMN_DISK_AVAILABLE "Disponibil" IDS_SHV_COLUMN_OWNER "Posesor" IDS_SHV_COLUMN_GROUP "Grup" - IDS_SHV_COLUMN_FILENAME "Nume fiÈ™ier" + IDS_SHV_COLUMN_FILENAME "Nume fiÅŸier" IDS_SHV_COLUMN_CATEGORY "Categorie" IDS_SHV_COLUMN_DELFROM "Amplasare iniÅ£ială" - IDS_SHV_COLUMN_DELDATE "Data È™tergerii" + IDS_SHV_COLUMN_DELDATE "Data ÅŸtergerii" IDS_SHV_COLUMN_FONTTYPE "Tip font" IDS_SHV_COLUMN_WORKGROUP "Grup de lucru" - IDS_SHV_COLUMN_NETLOCATION "LocaÈ›ie reÈ›ea" + IDS_SHV_COLUMN_NETLOCATION "LocaÅ£ie reÅ£ea" IDS_SHV_COLUMN_DOCUMENTS "Documente" IDS_SHV_COLUMN_STATUS "Stare" IDS_SHV_COLUMN_COMMENTS "Comentarii" - IDS_SHV_COLUMN_LOCATION "LocaÈ›ie" + IDS_SHV_COLUMN_LOCATION "LocaÅ£ie" IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Desktop" IDS_MYCOMPUTER "Computerul meu" - IDS_RECYCLEBIN_FOLDER_NAME "CoÈ™ de reciclare" + IDS_RECYCLEBIN_FOLDER_NAME "CoÅŸ de reciclare" IDS_CONTROLPANEL "Panou de control" IDS_ADMINISTRATIVETOOLS "Instrumente de administrare" @@ -803,36 +803,36 @@ BEGIN IDS_PASTE "&Lipire" IDS_EJECT "S&coatere" IDS_DISCONNECT "&Deconectare" - IDS_OPENFILELOCATION "&Deschidere locaÈ›ie fiÈ™ier" + IDS_OPENFILELOCATION "&Deschidere locaÅ£ie fiÅŸier" IDS_SENDTO_MENU "Trimitere &la" - IDS_COPYASPATHMENU "Copiere ca È›intă" + IDS_COPYASPATHMENU "Copiere ca Å£intă" - IDS_MOVEERRORTITLE "Imposibil de mutat fiÈ™ierul sau folderul" - IDS_COPYERRORTITLE "Imposibil de copiat fiÈ™ierul sau folderul" + IDS_MOVEERRORTITLE "Imposibil de mutat fiÅŸierul sau folderul" + IDS_COPYERRORTITLE "Imposibil de copiat fiÅŸierul sau folderul" IDS_MOVEERRORSAMEFOLDER "Imposibil de mutat '%s': Folderul destinaÈ›ie este identic cu folderul sursă." IDS_MOVEERRORSAME "Imposibil de mutat '%s': Numele de fiÅŸier al sursei ÅŸi destinaÅ£iei sunt identice." - IDS_COPYERRORSAME "Imposibil de copiat '%s': Numele de fiÈ™ier al sursei È™i destinaÈ›iei sunt identice." - IDS_MOVEERRORSUBFOLDER "Imposibil de mutat '%s': Folderul destinaÈ›ie este un subfolder al folderului sursă." - IDS_COPYERRORSUBFOLDER "Imposibil de copiat '%s': Folderul destinaÈ›ie este un subfolder al folderului sursă." + IDS_COPYERRORSAME "Imposibil de copiat '%s': Numele de fiÅŸier al sursei ÅŸi destinaÅ£iei sunt identice." + IDS_MOVEERRORSUBFOLDER "Imposibil de mutat '%s': Folderul destinaÅ£ie este un subfolder al folderului sursă." + IDS_COPYERRORSUBFOLDER "Imposibil de copiat '%s': Folderul destinaÅ£ie este un subfolder al folderului sursă." IDS_MOVEERROR "Imposibil de mutat '%s': %s" IDS_COPYERROR "Imposibil de copiat '%s': %s" - IDS_CREATEFILE_DENIED "Imposibil de creat fiÈ™ierul %1" - IDS_CREATEFILE_CAPTION "Imposibil de creat fiÈ™ierul" + IDS_CREATEFILE_DENIED "Imposibil de creat fiÅŸierul %1" + IDS_CREATEFILE_CAPTION "Imposibil de creat fiÅŸierul" IDS_CREATEFOLDER_DENIED "Imposibil de creat un folder cu numele '%1'" IDS_CREATEFOLDER_CAPTION "Imposibil de creat folder" IDS_DELETEITEM_CAPTION "Confirmare ÅŸtergere fiÅŸier" IDS_DELETEFOLDER_CAPTION "Confirmare ÅŸtergere folder" - IDS_DELETEITEM_TEXT "Sigur doriÈ›i să È™tergeÈ›i '%1'?" - IDS_DELETEMULTIPLE_TEXT "Sigur doriÈ›i să È™tergeÈ›i aceste %1 elemente?" - IDS_DELETESELECTED_TEXT "Sigur doriÈ›i să È™tergeÈ›i acest(e) element(e) selectat(e)?" - IDS_TRASHITEM_TEXT "Sigur doriÈ›i să aruncaÈ›i '%1' în CoÈ™ul de reciclare?" - IDS_TRASHFOLDER_TEXT "Sigur trimiteÅ£i folderul '%1' cu tot conÈ›inutul său la CoÈ™ul de reciclare?" - IDS_TRASHMULTIPLE_TEXT "Sigur trimiteÅ£i %1 elemente la CoÈ™ul de reciclare?" - IDS_CANTTRASH_TEXT "Elementul '%1' nu poate fi aruncat la reciclare. DoriÈ›i să-l È™tergeÈ›i definitiv?" - IDS_OVERWRITEFILE_TEXT "Acest folder deja conÈ›ine un fiÈ™ier numit '%1'.\n\nDoriÈ›i să îl înlocuiÈ›i" - IDS_OVERWRITEFILE_CAPTION "Confirmarea înlocuire fiÈ™ier" - IDS_OVERWRITEFOLDER_TEXT "Acest folder deja conÈ›ine un sub-folder cu numele '%1'.\n\nDacă fiÈ™ierele din folderul de destinaÈ›ie au acelaÈ™i nume ca cele din\nfolderul selectat, ele vor fi înlocuite. Sigur doriÈ›i să copiaÈ›i sau\nsă mutaÈ›i folderul?" + IDS_DELETEITEM_TEXT "Sigur doriÅ£i să ÅŸtergeÅ£i '%1'?" + IDS_DELETEMULTIPLE_TEXT "Sigur doriÅ£i să ÅŸtergeÅ£i aceste %1 elemente?" + IDS_DELETESELECTED_TEXT "Sigur doriÅ£i să ÅŸtergeÅ£i acest(e) element(e) selectat(e)?" + IDS_TRASHITEM_TEXT "Sigur doriÅ£i să aruncaÅ£i '%1' în CoÅŸul de reciclare?" + IDS_TRASHFOLDER_TEXT "Sigur trimiteÅ£i folderul '%1' cu tot conÅ£inutul său la CoÅŸul de reciclare?" + IDS_TRASHMULTIPLE_TEXT "Sigur trimiteÅ£i %1 elemente la CoÅŸul de reciclare?" + IDS_CANTTRASH_TEXT "Elementul '%1' nu poate fi aruncat la reciclare. DoriÅ£i să-l ÅŸtergeÅ£i definitiv?" + IDS_OVERWRITEFILE_TEXT "Acest folder deja conÅ£ine un fiÅŸier numit '%1'.\n\nDoriÅ£i să îl înlocuiÅ£i" + IDS_OVERWRITEFILE_CAPTION "Confirmarea înlocuire fiÅŸier" + IDS_OVERWRITEFOLDER_TEXT "Acest folder deja conÈ›ine un sub-folder cu numele '%1'.\n\nDacă fiÅŸierele din folderul de destinaÅ£ie au acelaÅŸi nume ca cele din\nfolderul selectat, ele vor fi înlocuite. Sigur doriÅ£i să copiaÅ£i sau\nsă mutaÅ£i folderul?" IDS_FILEOOP_COPYING "ÃŽn curs de copiere…" IDS_FILEOOP_MOVING "ÃŽn curs de mutare…" @@ -843,9 +843,9 @@ BEGIN /* message box strings */ IDS_RESTART_TITLE "Repornire" - IDS_RESTART_PROMPT "ReporniÈ›i sistemul?" + IDS_RESTART_PROMPT "Repornire sistem?" IDS_SHUTDOWN_TITLE "ÃŽnchidere" - IDS_SHUTDOWN_PROMPT "ÃŽnchideÈ›i calculatorul?" + IDS_SHUTDOWN_PROMPT "ÃŽnchidere sistem?" /* Format Dialog Strings */ IDS_FORMAT_TITLE "Formatare disc local" @@ -854,13 +854,13 @@ BEGIN /* Warning format system drive dialog strings */ IDS_NO_FORMAT_TITLE "Imposibil de formatat volumul" - IDS_NO_FORMAT "Imposibil de formatat acest volum! ConÈ›ine fiÈ™iere de sistem importante care fac ReactOS să funcÈ›ioneze." + IDS_NO_FORMAT "Imposibil de formatat acest volum! ConÅ£ine fiÅŸiere de sistem importante care fac ReactOS să funcÅ£ioneze." /* Run File dialog */ - IDS_RUNDLG_ERROR "Imposibil de mutat acest folder (eroare internă)." - IDS_RUNDLG_BROWSE_ERROR "Imposibil de mutat acest fiÈ™ier (eroare internă)" - IDS_RUNDLG_BROWSE_CAPTION "Specificare fiÈ™iere" - IDS_RUNDLG_BROWSE_FILTER "Programe (*.exe)\0*.exe\0Toate fiÅŸier (*.*)\0*.*\0" + IDS_RUNDLG_ERROR "Imposibil de 'Executare fiÅŸier' (eroare internă)" + IDS_RUNDLG_BROWSE_ERROR "Imposibil de 'Răsfoire fiÅŸiere' (eroare internă)" + IDS_RUNDLG_BROWSE_CAPTION "Răsfoire fiÅŸiere" + IDS_RUNDLG_BROWSE_FILTER "Programe (*.exe)\0*.exe\0Orice fiÅŸier (*.*)\0*.*\0" /* Shortcut property sheet */ IDS_SHORTCUT_RUN_NORMAL "Fereastră normală" @@ -918,34 +918,34 @@ BEGIN FCIDM_SHVIEW_NEW "&Crează" /* A menu item with an ampersand */ FCIDM_SHVIEW_NEWFOLDER "&Folder" FCIDM_SHVIEW_NEWLINK "&Comandă rapidă" - IDS_FOLDER_OPTIONS "OpÈ›iuni foldere" - IDS_RECYCLEBIN_LOCATION "LocaÈ›ia pentru CoÈ™ul de reciclare" - IDS_RECYCLEBIN_DISKSPACE "SpaÈ›iul disponibil" + IDS_FOLDER_OPTIONS "OpÅ£iuni foldere" + IDS_RECYCLEBIN_LOCATION "LocaÅ£ia pentru CoÅŸul de reciclare" + IDS_RECYCLEBIN_DISKSPACE "SpaÅ£iul disponibil" IDS_EMPTY_BITBUCKET "Golire CoÅŸ de reciclare" IDS_PICK_ICON_TITLE "Alegere pictogramă" - IDS_PICK_ICON_FILTER "FiÈ™iere pictogramă (*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0Orice fiÈ™ier (*.*)\0*.*\0" - IDS_OPEN_WITH_FILTER "Programe (*.exe)\0*.exe\0Toate fiÈ™ier (*.*)\0*.*\0" + IDS_PICK_ICON_FILTER "FiÅŸiere pictogramă (*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0Orice fiÅŸier (*.*)\0*.*\0" + IDS_OPEN_WITH_FILTER "Programe (*.exe)\0*.exe\0Orice fiÅŸier (*.*)\0*.*\0" IDS_CANTLOCKVOLUME "Imposibil de blocat volumul (Cod de eroare: %lu)." IDS_CANTDISMOUNTVOLUME "Imposibil de demontat volumul (Cod de eroare: %lu)." IDS_CANTEJECTMEDIA "Imposibil de scos mediului de stocare (Cod de eroare: %lu)." - IDS_CANTSHOWPROPERTIES "Imposibil de afiÈ™at proprietățile (Cod de eroare: %lu)." + IDS_CANTSHOWPROPERTIES "Imposibil de afiÅŸat proprietăţile (Cod de eroare: %lu)." IDS_CANTDISCONNECT "Imposibil de deconectat (Cod de eroare: %lu)." IDS_NONE "(Nimic)" /* Friendly File Type Names */ IDS_DIRECTORY "Folder" - IDS_BAT_FILE "FiÈ™ier de comenzi ReactOS" + IDS_BAT_FILE "FiÅŸier de comenzi ReactOS" IDS_CMD_FILE "Script de comenzi ReactOS" IDS_COM_FILE "Executabil DOS" IDS_CPL_FILE "Element din Panoul de control" IDS_CUR_FILE "Indicator" - IDS_DB__FILE "FiÈ™ier bază-de-date" - IDS_DLL_FILE "Bibliotecă aplicaÈ›ie" + IDS_DB__FILE "FiÅŸier bază-de-date" + IDS_DLL_FILE "Bibliotecă aplicaÅ£ie" IDS_DRV_FILE "Driver de dispozitiv" - IDS_EFI_FILE "Executabil interfață firmware extensibilă" + IDS_EFI_FILE "Executabil interfaţă firmware extensibilă" IDS_EXE_FILE "Executabil" - IDS_NLS_FILE "FiÈ™ier suport de limbă naÈ›ională" + IDS_NLS_FILE "FiÅŸier suport de limbă naÅ£ională" IDS_OCX_FILE "Control ActiveX" IDS_TLB_FILE "Bibliotecă tip" IDS_FON_FILE "Font" @@ -953,14 +953,14 @@ BEGIN IDS_OTF_FILE "Font OpenType" IDS_HLP_FILE "Manual de utilizare" IDS_ICO_FILE "Pictogramă" - IDS_INI_FILE "FiÈ™ier de iniÈ›ializare" + IDS_INI_FILE "FiÅŸier de iniÅ£ializare" IDS_LNK_FILE "Scurtătură" - IDS_NT__FILE "FiÈ™ier de configurare NT DOS32" - IDS_PIF_FILE "FiÈ™ier de informaÈ›ii program NT VDM" - IDS_SCR_FILE "AnimaÈ›ie regim de inactivitate" - IDS_SYS_FILE "FiÈ™ier de sistem" + IDS_NT__FILE "FiÅŸier de configurare NT DOS32" + IDS_PIF_FILE "FiÅŸier de informaÅ£ii program NT VDM" + IDS_SCR_FILE "AnimaÅ£ie regim de inactivitate" + IDS_SYS_FILE "FiÅŸier de sistem" IDS_VXD_FILE "Driver de dispozitiv virtual" - IDS_ANY_FILE "FiÈ™ier-%s" + IDS_ANY_FILE "FiÅŸier-%s" IDS_OPEN_VERB "Deschidere" IDS_EXPLORE_VERB "Explorare" @@ -970,7 +970,7 @@ BEGIN IDS_PRINT_VERB "Imprimare" IDS_CMD_VERB "Deschidere Panou de control aici" - IDS_FILE_FOLDER "%u fiÈ™iere, %u foldere" + IDS_FILE_FOLDER "%u fiÅŸiere, %u foldere" IDS_PRINTERS "Imprimante" IDS_FONTS "Fonturi" IDS_INSTALLNEWFONT "Instalare font nou…" @@ -978,19 +978,19 @@ BEGIN IDS_DEFAULT_CLUSTER_SIZE "Dimensiune de alocare implicită" IDS_COPY_OF "Copie pentru" - IDS_SHLEXEC_NOASSOC "Nu există nici un program configurat pentru a deschide acest tip de fiÈ™ier." + IDS_SHLEXEC_NOASSOC "Nu există nici un program configurat pentru a deschide acest tip de fiÅŸier." IDS_FILE_DETAILS "Detalii pentru extensia '%s'" - IDS_FILE_DETAILSADV "FiÈ™ierele cu extensia '%s' sunt de tipul '%s'. Pentru a modifica opÈ›iunile care vor afecta toate fiÈ™ierele '%s', apăsaÈ›i Complex." + IDS_FILE_DETAILSADV "FiÅŸierele cu extensia '%s' sunt de tipul '%s'. Pentru a modifica opÅ£iunile care vor afecta toate fiÅŸierele '%s', apăsaÅ£i Complex." IDS_FILE_TYPES "Tipuri" IDS_COLUMN_EXTENSION "Extensii" /* As in 'INI File' or 'WAV File', fallback string for no-name extensions used in the _File type_ tab of the _Folder Options_ dialog */ - IDS_FILE_EXT_TYPE "FiÈ™ier %s" + IDS_FILE_EXT_TYPE "FiÅŸier %s" - IDS_BYTES_FORMAT "octeÈ›i" - IDS_UNKNOWN_APP "AplicaÈ›ie nespecificată" + IDS_BYTES_FORMAT "octeÅ£i" + IDS_UNKNOWN_APP "AplicaÅ£ie nespecificată" IDS_EXE_DESCRIPTION "Descriere:" IDS_MENU_EMPTY "(Gol)" @@ -998,7 +998,7 @@ BEGIN IDS_OBJECTS_SELECTED "%d Obiecte selectate" IDS_TITLE_MYCOMP "Computerul meu" - IDS_TITLE_MYNET "LocaÈ›ii în reÈ›ea" + IDS_TITLE_MYNET "LocaÅ£ii în reÅ£ea" IDS_TITLE_BIN_1 "CoÅŸ de reciclare (plin)" IDS_TITLE_BIN_0 "CoÅŸ de reciclare (gol)" @@ -1008,7 +1008,7 @@ BEGIN IDS_ADVANCED_FRIENDLY_TREE "AfiÅŸare vizualizare simplă pentru folder în lista de foldere Explorer" IDS_ADVANCED_WEB_VIEW_BARRICADE "AfiÅŸare conÅ£inut foldere de sistem" IDS_ADVANCED_SHOW_FULL_PATH_ADDRESS "Se afiÅŸează calea completă în bara de adrese" - IDS_ADVANCED_SHOW_FULL_PATH "AfiÈ™are cale completă în bara de titlu" + IDS_ADVANCED_SHOW_FULL_PATH "AfiÅŸare cale completă în bara de titlu" IDS_ADVANCED_DISABLE_THUMB_CACHE "Nu se păstrează în cache miniaturile" IDS_ADVANCED_HIDDEN "FiÅŸiere ÅŸi foldere ascunse" IDS_ADVANCED_DONT_SHOW_HIDDEN "Nu se afiÅŸează fiÅŸierele ÅŸi folderele ascunse" @@ -1021,33 +1021,33 @@ BEGIN IDS_ADVANCED_CONTROL_PANEL_IN_MY_COMPUTER "AfiÅŸare Panou de control în Computerul meu" IDS_ADVANCED_SHOW_COMP_COLOR "AfiÅŸare în culori a fiÅŸierelor NTFS criptate sau comprimate" IDS_ADVANCED_SHOW_INFO_TIP "Se afiÅŸează descrieri pop-up pentru elemente din folder ÅŸi desktop" - IDS_ADVANCED_DISPLAY_FAVORITES "AfiÈ™are Favorite" - IDS_ADVANCED_DISPLAY_LOG_OFF "AfiÈ™are Log Off" + IDS_ADVANCED_DISPLAY_FAVORITES "AfiÅŸare Favorite" + IDS_ADVANCED_DISPLAY_LOG_OFF "AfiÅŸare Log Off" IDS_ADVANCED_EXPAND_CONTROL_PANEL "Se extinde Panou de control" IDS_ADVANCED_EXPAND_MY_DOCUMENTS "Se extind Documentele mele" IDS_ADVANCED_EXPAND_PRINTERS "Se extind Imprimante" IDS_ADVANCED_EXPAND_MY_PICTURES "Se extind Imaginile mele" IDS_ADVANCED_EXPAND_NET_CONNECTIONS "Se extind Conexiuni de reÈ›ea" - IDS_ADVANCED_DISPLAY_RUN "Se afiÈ™ează Executare" - IDS_ADVANCED_DISPLAY_ADMINTOOLS "Se afiÈ™ează Instrumente de administrare" - IDS_ADVANCED_SMALL_START_MENU "Se afiÈ™ează Pictograme mici în Meniul Start" + IDS_ADVANCED_DISPLAY_RUN "Se afiÅŸează Executare" + IDS_ADVANCED_DISPLAY_ADMINTOOLS "Se afiÅŸează Instrumente de administrare" + IDS_ADVANCED_SMALL_START_MENU "Se afiÅŸează Pictograme mici în Meniul Start" IDS_NEWEXT_ADVANCED_LEFT "<< &Complex" IDS_NEWEXT_ADVANCED_RIGHT "&Complex >>" IDS_NEWEXT_NEW "" IDS_NEWEXT_SPECIFY_EXT "SpecificaÅ£i o extensie." - IDS_NEWEXT_ALREADY_ASSOC "Extensia %s este deja utilizată de tipul de fiÅŸier %s. AsociaÅ£i %s cu %s È™i creaÈ›i unui nou tip de fiÈ™ier pentru ea?" + IDS_NEWEXT_ALREADY_ASSOC "Extensia %s este deja utilizată de tipul de fiÅŸier %s. AsociaÅ£i %s cu %s ÅŸi creaÅ£i unui nou tip de fiÅŸier pentru ea?" IDS_NEWEXT_EXT_IN_USE "Extensia este utilizată" IDS_REMOVE_EXT "Dacă eliminaÅ£i o extensie de fiÅŸier înregistrată, nu veÅ£i avea posibilitatea să deschideÅ£i\nfiÅŸierele cu această extensie efectuând dublu clic pe pictogramele lor.\n\nSigur eliminaÅ£i această extensie?" IDS_SPECIFY_ACTION "Trebuie să specificaÅ£i o acÅ£iune." IDS_INVALID_PROGRAM "Programul specificat nu s-a găsit. VerificaÅ£i dacă numele ÅŸi calea fiÅŸierului sunt corecte." IDS_REMOVE_ACTION "Sigur eliminaÅ£i această acÅ£iune?" - IDS_ACTION_EXISTS "AcÈ›iunea '%s' este deja înregistrată pentru a cest tip de fiÅŸier. IntroduceÅ£i un nume nou, apoi încercaÅ£i din nou." - IDS_EXE_FILTER "Programe\0*.exe\0Toate fiÅŸierel\0*.*\0" - IDS_EDITING_ACTION "Editare acÅ£iune pentru tipul:" - IDS_NO_ICONS "FiÈ™ierul '%s' nu conÅ£ine pictograme.\n\nAlegeÅ£i o pictogramă din listă sau specificaÅ£i un alt fiÅŸier." - IDS_FILE_NOT_FOUND "FiÈ™ierul '%s' nu a fost găsit." + IDS_ACTION_EXISTS "AcÅ£iunea '%s' este deja înregistrată pentru a cest tip de fiÅŸier. IntroduceÅ£i un nume nou, apoi încercaÅ£i din nou." + IDS_EXE_FILTER "Programe\0*.exe\0Orice fiÅŸier\0*.*\0" + IDS_EDITING_ACTION "Editare acÅ£iune pentru tipul: " + IDS_NO_ICONS "FiÅŸierul '%s' nu conÅ£ine pictograme.\n\nAlegeÅ£i o pictogramă din listă sau specificaÅ£i un alt fiÅŸier." + IDS_FILE_NOT_FOUND "FiÅŸierul '%s' nu a fost găsit." IDS_LINK_INVALID "Elementul '%s' la care se referă această comandă rapidă s-a modificat sau s-a mutat, astfel încât această comandă rapidă nu va mai funcÅ£iona corespunzător.\n\nÅžtergeÅ£i această comandă rapidă?" IDS_COPYTOMENU "Copiere în &folderul…" IDS_COPYTOTITLE "SelectaÅ£i locul unde se va copia '%s'. Apoi faceÅ£i clic pe butonul Copiere." From a25a4eb7b8c5909a852a7a9a4bd0f19783f9feb0 Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Tue, 21 May 2024 21:09:18 +0200 Subject: [PATCH 167/182] [SHELL32] Implement CSIDL_CONNECTIONS and fix CSIDL_PRINTERS (#6919) --- dll/win32/shell32/precomp.h | 1 + dll/win32/shell32/utils.cpp | 1 + dll/win32/shell32/wine/pidl.c | 8 +++++++ dll/win32/shell32/wine/shellpath.c | 35 ++++++++++++++++++++++++++++++ 4 files changed, 45 insertions(+) diff --git a/dll/win32/shell32/precomp.h b/dll/win32/shell32/precomp.h index 57789a02835..59ef2d7d6df 100644 --- a/dll/win32/shell32/precomp.h +++ b/dll/win32/shell32/precomp.h @@ -181,6 +181,7 @@ Shell_DisplayNameOf( _Out_ LPWSTR pszBuf, _In_ UINT cchBuf); +EXTERN_C HRESULT SHBindToObject( _In_opt_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, diff --git a/dll/win32/shell32/utils.cpp b/dll/win32/shell32/utils.cpp index ae028bf6272..3e287524ab3 100644 --- a/dll/win32/shell32/utils.cpp +++ b/dll/win32/shell32/utils.cpp @@ -202,6 +202,7 @@ SHBindToObjectEx( return hr; } +EXTERN_C HRESULT SHBindToObject( _In_opt_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, diff --git a/dll/win32/shell32/wine/pidl.c b/dll/win32/shell32/wine/pidl.c index 33495aead3a..7bec293d3d0 100644 --- a/dll/win32/shell32/wine/pidl.c +++ b/dll/win32/shell32/wine/pidl.c @@ -1680,6 +1680,13 @@ LPITEMIDLIST _ILCreateControlPanel(void) LPITEMIDLIST _ILCreatePrinters(void) { +#ifdef __REACTOS__ + // Note: Wine returns the PIDL as it was in Windows 95, NT5 moved it into CSIDL_CONTROLS + extern HRESULT SHGetFolderLocationHelper(HWND hwnd, int nFolder, REFCLSID clsid, LPITEMIDLIST *ppidl); + LPITEMIDLIST pidl; + SHGetFolderLocationHelper(NULL, CSIDL_CONTROLS, &CLSID_Printers, &pidl); + return pidl; +#else LPITEMIDLIST parent = _ILCreateGuid(PT_GUID, &CLSID_MyComputer), ret = NULL; TRACE("()\n"); @@ -1695,6 +1702,7 @@ LPITEMIDLIST _ILCreatePrinters(void) SHFree(parent); } return ret; +#endif } LPITEMIDLIST _ILCreateNetwork(void) diff --git a/dll/win32/shell32/wine/shellpath.c b/dll/win32/shell32/wine/shellpath.c index dc4e94e2716..cd05e1ed010 100644 --- a/dll/win32/shell32/wine/shellpath.c +++ b/dll/win32/shell32/wine/shellpath.c @@ -3099,6 +3099,32 @@ BOOL WINAPI SHGetSpecialFolderPathW ( szPath) == S_OK; } +#ifdef __REACTOS__ +HRESULT SHGetFolderLocationHelper(HWND hwnd, int nFolder, REFCLSID clsid, LPITEMIDLIST *ppidl) +{ + HRESULT hr; + IShellFolder *psf; + LPITEMIDLIST parent, child; + EXTERN_C HRESULT SHBindToObject(IShellFolder *psf, LPCITEMIDLIST pidl, REFIID riid, void **ppvObj); + *ppidl = NULL; + if (FAILED(hr = SHGetFolderLocation(hwnd, nFolder, NULL, 0, &parent))) + return hr; + if (SUCCEEDED(hr = SHBindToObject(NULL, parent, &IID_IShellFolder, (void**)&psf))) + { + WCHAR clsidstr[2 + 38 + 1]; + clsidstr[0] = clsidstr[1] = L':'; + StringFromGUID2(clsid, clsidstr + 2, 38 + 1); + hr = IShellFolder_ParseDisplayName(psf, hwnd, NULL, clsidstr, NULL, &child, NULL); + if (SUCCEEDED(hr)) + *ppidl = ILCombine(parent, child); + IShellFolder_Release(psf); + ILFree(child); + } + ILFree(parent); + return hr; +} +#endif + /************************************************************************* * SHGetFolderLocation [SHELL32.@] * @@ -3186,6 +3212,15 @@ HRESULT WINAPI SHGetFolderLocation( *ppidl = _ILCreateNetwork(); break; +#ifdef __REACTOS__ + case CSIDL_CONNECTIONS: + { + EXTERN_C const CLSID CLSID_ConnectionFolder; + hr = SHGetFolderLocationHelper(hwndOwner, CSIDL_CONTROLS, &CLSID_ConnectionFolder, ppidl); + break; + } +#endif + default: { WCHAR szPath[MAX_PATH]; From 11ea1d61982eacc09d5fc60d2cd91c63adca7bbf Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Wed, 22 May 2024 00:06:46 +0200 Subject: [PATCH 168/182] [BROWSEUI][COMCTL32] Handle rename on other folders in Explorer bar tree (#6832) IContextMenu (CDefaultContextMenu) only knows how to rename when its site is an IShellView. The tree must detect the rename operation and perform it in the TreeView instead. Fixed a bug in the ListView that is triggered by activating DefView (to complete the rename): Just after DefView has been activated, the tree performs a navigation to the newly renamed folder, this causes DefView to be destroyed and in turn the ListView. The ListView tries to handle a selection change during destruction of the ListView and ends up accessing an invalid pointer. CORE-19557 --- dll/win32/browseui/explorerband.cpp | 171 +++++++++++++++++++++------- dll/win32/browseui/explorerband.h | 6 +- dll/win32/browseui/shellbrowser.cpp | 10 +- dll/win32/browseui/utility.cpp | 57 ++++++++++ dll/win32/browseui/utility.h | 4 + dll/win32/comctl32/listview.c | 16 ++- 6 files changed, 212 insertions(+), 52 deletions(-) diff --git a/dll/win32/browseui/explorerband.cpp b/dll/win32/browseui/explorerband.cpp index 833dfa0de96..f50bc08bb91 100644 --- a/dll/win32/browseui/explorerband.cpp +++ b/dll/win32/browseui/explorerband.cpp @@ -22,6 +22,7 @@ #include "precomp.h" #include #include +#include "utility.h" #if 1 #undef UNIMPLEMENTED @@ -147,7 +148,7 @@ HRESULT _ReparsePIDL(LPITEMIDLIST buggyPidl, LPITEMIDLIST *cleanPidl) CExplorerBand::CExplorerBand() : m_pSite(NULL) , m_fVisible(FALSE) - , m_bNavigating(FALSE) + , m_mtxBlockNavigate(0) , m_dwBandID(0) , m_isEditing(FALSE) , m_pidlCurrent(NULL) @@ -261,6 +262,49 @@ CExplorerBand::NodeInfo* CExplorerBand::GetNodeInfo(HTREEITEM hItem) return reinterpret_cast(tvItem.lParam); } +static HRESULT GetCurrentLocationFromView(IShellView &View, PIDLIST_ABSOLUTE &pidl) +{ + CComPtr pfv; + CComPtr psf; + HRESULT hr = View.QueryInterface(IID_PPV_ARG(IFolderView, &pfv)); + if (SUCCEEDED(hr) && SUCCEEDED(hr = pfv->GetFolder(IID_PPV_ARG(IShellFolder, &psf)))) + hr = SHELL_GetIDListFromObject(psf, &pidl); + return hr; +} + +HRESULT CExplorerBand::GetCurrentLocation(PIDLIST_ABSOLUTE &pidl) +{ + pidl = NULL; + CComPtr psb; + HRESULT hr = IUnknown_QueryService(m_pSite, SID_STopLevelBrowser, IID_PPV_ARG(IShellBrowser, &psb)); + if (FAILED_UNEXPECTEDLY(hr)) + return hr; + + CComPtr pbs; + if (SUCCEEDED(hr = psb->QueryInterface(IID_PPV_ARG(IBrowserService, &pbs)))) + if (SUCCEEDED(hr = pbs->GetPidl(&pidl)) && pidl) + return hr; + + CComPtr psv; + if (!FAILED_UNEXPECTEDLY(hr = psb->QueryActiveShellView(&psv))) + if (SUCCEEDED(hr = psv.p ? GetCurrentLocationFromView(*psv.p, pidl) : E_FAIL)) + return hr; + return hr; +} + +HRESULT CExplorerBand::IsCurrentLocation(PCIDLIST_ABSOLUTE pidl) +{ + if (!pidl) + return E_INVALIDARG; + HRESULT hr = E_FAIL; + PIDLIST_ABSOLUTE location = m_pidlCurrent; + if (location || SUCCEEDED(hr = GetCurrentLocation(location))) + hr = SHELL_IsEqualAbsoluteID(location, pidl) ? S_OK : S_FALSE; + if (location != m_pidlCurrent) + ILFree(location); + return hr; +} + HRESULT CExplorerBand::ExecuteCommand(CComPtr& menu, UINT nCmd) { CComPtr pBrowserOleWnd; @@ -301,12 +345,8 @@ HRESULT CExplorerBand::UpdateBrowser(LPITEMIDLIST pidlGoto) if (FAILED_UNEXPECTEDLY(hr)) return hr; - if (m_pidlCurrent) - { - ILFree(m_pidlCurrent); - m_pidlCurrent = ILClone(pidlGoto); - } - return hr; + ILFree(m_pidlCurrent); + return SHILClone(pidlGoto, &m_pidlCurrent); } // *** notifications handling *** @@ -362,7 +402,7 @@ void CExplorerBand::OnSelectionChanged(LPNMTREEVIEW pnmtv) NodeInfo* pNodeInfo = GetNodeInfo(pnmtv->itemNew.hItem); /* Prevents navigation if selection is initiated inside the band */ - if (m_bNavigating) + if (m_mtxBlockNavigate) return; UpdateBrowser(pNodeInfo->absolutePidl); @@ -411,13 +451,16 @@ LRESULT CExplorerBand::OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BO HTREEITEM item; NodeInfo *info; HMENU treeMenu; - WORD x; - WORD y; + POINT pt; CComPtr pFolder; CComPtr contextMenu; HRESULT hr; UINT uCommand; LPITEMIDLIST pidlChild; + UINT cmdBase = max(FCIDM_SHVIEWFIRST, 1); + UINT cmf = CMF_EXPLORE; + SFGAOF attr = SFGAO_CANRENAME; + BOOL startedRename = FALSE; treeMenu = NULL; item = TreeView_GetSelection(m_hWnd); @@ -427,11 +470,17 @@ LRESULT CExplorerBand::OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BO goto Cleanup; } - x = LOWORD(lParam); - y = HIWORD(lParam); - if (x == -1 && y == -1) + pt.x = LOWORD(lParam); + pt.y = HIWORD(lParam); + if ((UINT)lParam == (UINT)-1) { - // TODO: grab position of tree item and position it correctly + RECT r; + if (TreeView_GetItemRect(m_hWnd, item, &r, TRUE)) + { + pt.x = (r.left + r.right) / 2; // Center of + pt.y = (r.top + r.bottom) / 2; // item rectangle + } + ClientToScreen(&pt); } info = GetNodeInfo(item); @@ -457,28 +506,54 @@ LRESULT CExplorerBand::OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BO IUnknown_SetSite(contextMenu, (IDeskBand *)this); + if (SUCCEEDED(pFolder->GetAttributesOf(1, (LPCITEMIDLIST*)&pidlChild, &attr)) && (attr & SFGAO_CANRENAME)) + cmf |= CMF_CANRENAME; + treeMenu = CreatePopupMenu(); - hr = contextMenu->QueryContextMenu(treeMenu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, - CMF_EXPLORE); + hr = contextMenu->QueryContextMenu(treeMenu, 0, cmdBase, FCIDM_SHVIEWLAST, cmf); if (!SUCCEEDED(hr)) { WARN("Can't get context menu for item\n"); DestroyMenu(treeMenu); goto Cleanup; } + uCommand = TrackPopupMenu(treeMenu, TPM_LEFTALIGN | TPM_RETURNCMD | TPM_LEFTBUTTON | TPM_RIGHTBUTTON, - x, y, 0, m_hWnd, NULL); + pt.x, pt.y, 0, m_hWnd, NULL); + if (uCommand) + { + uCommand -= cmdBase; + + // Do DFM_CMD_RENAME in the treeview + if ((cmf & CMF_CANRENAME) && SHELL_IsVerb(contextMenu, uCommand, L"rename")) + { + HTREEITEM oldSelected = m_oldSelected; + SetFocus(); + startedRename = TreeView_EditLabel(m_hWnd, item) != NULL; + m_oldSelected = oldSelected; // Restore after TVN_BEGINLABELEDIT + goto Cleanup; + } - ExecuteCommand(contextMenu, uCommand); + hr = ExecuteCommand(contextMenu, uCommand); + } Cleanup: if (contextMenu) IUnknown_SetSite(contextMenu, NULL); if (treeMenu) DestroyMenu(treeMenu); - m_bNavigating = TRUE; - TreeView_SelectItem(m_hWnd, m_oldSelected); - m_bNavigating = FALSE; + if (startedRename) + { + // The treeview disables drawing of the edited item so we must make sure + // the correct item is selected (on right-click -> rename on not-current folder). + // TVN_ENDLABELEDIT becomes responsible for restoring the selection. + } + else + { + ++m_mtxBlockNavigate; + TreeView_SelectItem(m_hWnd, m_oldSelected); + --m_mtxBlockNavigate; + } return TRUE; } @@ -498,9 +573,9 @@ LRESULT CExplorerBand::ContextMenuHack(UINT uMsg, WPARAM wParam, LPARAM lParam, // Move to the item selected by the treeview (don't change right pane) TreeView_HitTest(m_hWnd, &info); - m_bNavigating = TRUE; + ++m_mtxBlockNavigate; TreeView_SelectItem(m_hWnd, info.hItem); - m_bNavigating = FALSE; + --m_mtxBlockNavigate; } return FALSE; /* let the wndproc process the message */ } @@ -825,29 +900,20 @@ BOOL CExplorerBand::NavigateToPIDL(LPITEMIDLIST dest, HTREEITEM *item, BOOL bExp BOOL CExplorerBand::NavigateToCurrentFolder() { LPITEMIDLIST explorerPidl; - CComPtr pBrowserService; - HRESULT hr; HTREEITEM dummy; BOOL result; - explorerPidl = NULL; - - hr = IUnknown_QueryService(m_pSite, SID_STopLevelBrowser, IID_PPV_ARG(IBrowserService, &pBrowserService)); - if (!SUCCEEDED(hr)) - { - ERR("Can't get IBrowserService !\n"); - return FALSE; - } - hr = pBrowserService->GetPidl(&explorerPidl); - if (!SUCCEEDED(hr) || !explorerPidl) + HRESULT hr = GetCurrentLocation(explorerPidl); + if (FAILED_UNEXPECTEDLY(hr)) { ERR("Unable to get browser PIDL !\n"); return FALSE; } - m_bNavigating = TRUE; + ++m_mtxBlockNavigate; /* find PIDL into our explorer */ result = NavigateToPIDL(explorerPidl, &dummy, TRUE, FALSE, TRUE); - m_bNavigating = FALSE; + --m_mtxBlockNavigate; + ILFree(explorerPidl); return result; } @@ -1330,6 +1396,7 @@ HRESULT STDMETHODCALLTYPE CExplorerBand::OnWinEvent(HWND hWnd, UINT uMsg, WPARAM if (theResult) *theResult = 0; m_isEditing = TRUE; + m_oldSelected = NULL; } return S_OK; } @@ -1340,6 +1407,13 @@ HRESULT STDMETHODCALLTYPE CExplorerBand::OnWinEvent(HWND hWnd, UINT uMsg, WPARAM HRESULT hr; m_isEditing = FALSE; + if (m_oldSelected) + { + ++m_mtxBlockNavigate; + TreeView_SelectItem(m_hWnd, m_oldSelected); + --m_mtxBlockNavigate; + } + if (theResult) *theResult = 0; if (dispInfo->item.pszText) @@ -1347,12 +1421,13 @@ HRESULT STDMETHODCALLTYPE CExplorerBand::OnWinEvent(HWND hWnd, UINT uMsg, WPARAM LPITEMIDLIST pidlNew; CComPtr pParent; LPCITEMIDLIST pidlChild; + BOOL RenamedCurrent = IsCurrentLocation(info->absolutePidl) == S_OK; hr = SHBindToParent(info->absolutePidl, IID_PPV_ARG(IShellFolder, &pParent), &pidlChild); if (!SUCCEEDED(hr) || !pParent.p) return E_FAIL; - hr = pParent->SetNameOf(0, pidlChild, dispInfo->item.pszText, SHGDN_INFOLDER, &pidlNew); + hr = pParent->SetNameOf(m_hWnd, pidlChild, dispInfo->item.pszText, SHGDN_INFOLDER, &pidlNew); if(SUCCEEDED(hr) && pidlNew) { CComPtr pPersist; @@ -1367,8 +1442,16 @@ HRESULT STDMETHODCALLTYPE CExplorerBand::OnWinEvent(HWND hWnd, UINT uMsg, WPARAM return E_FAIL; pidlNewAbs = ILCombine(pidlParent, pidlNew); - // Navigate to our new location - UpdateBrowser(pidlNewAbs); + if (RenamedCurrent) + { + // Navigate to our new location + UpdateBrowser(pidlNewAbs); + } + else + { + // Tell everyone in case SetNameOf forgot, this causes IShellView to update itself when we renamed a child + SHChangeNotify(SHCNE_RENAMEFOLDER, SHCNF_IDLIST, info->absolutePidl, pidlNewAbs); + } ILFree(pidlParent); ILFree(pidlNewAbs); @@ -1490,9 +1573,9 @@ HRESULT STDMETHODCALLTYPE CExplorerBand::DragOver(DWORD glfKeyState, POINTL pt, if (info.hItem) { - m_bNavigating = TRUE; + ++m_mtxBlockNavigate; TreeView_SelectItem(m_hWnd, info.hItem); - m_bNavigating = FALSE; + --m_mtxBlockNavigate; // Delegate to shell folder if (m_pDropTarget && info.hItem != m_childTargetNode) { @@ -1551,9 +1634,9 @@ HRESULT STDMETHODCALLTYPE CExplorerBand::DragOver(DWORD glfKeyState, POINTL pt, HRESULT STDMETHODCALLTYPE CExplorerBand::DragLeave() { - m_bNavigating = TRUE; + ++m_mtxBlockNavigate; TreeView_SelectItem(m_hWnd, m_oldSelected); - m_bNavigating = FALSE; + --m_mtxBlockNavigate; m_childTargetNode = NULL; if (m_pCurObject) { diff --git a/dll/win32/browseui/explorerband.h b/dll/win32/browseui/explorerband.h index ad4e6aa3830..0cdf6696613 100644 --- a/dll/win32/browseui/explorerband.h +++ b/dll/win32/browseui/explorerband.h @@ -57,14 +57,14 @@ class CExplorerBand : // *** tree explorer band stuff *** BOOL m_fVisible; - BOOL m_bNavigating; + BYTE m_mtxBlockNavigate; // A "lock" that prevents internal selection changes to initiate a navigation to the newly selected item. BOOL m_bFocused; DWORD m_dwBandID; BOOL m_isEditing; HIMAGELIST m_hImageList; HTREEITEM m_hRoot; HTREEITEM m_oldSelected; - LPITEMIDLIST m_pidlCurrent; + LPITEMIDLIST m_pidlCurrent; // Note: This is NULL until the first user navigation! // *** notification cookies *** DWORD m_adviseCookie; @@ -103,6 +103,8 @@ class CExplorerBand : BOOL RenameItem(HTREEITEM toRename, LPITEMIDLIST newPidl); BOOL RefreshTreePidl(HTREEITEM tree, LPITEMIDLIST pidlParent); BOOL NavigateToCurrentFolder(); + HRESULT GetCurrentLocation(PIDLIST_ABSOLUTE &pidl); + HRESULT IsCurrentLocation(PCIDLIST_ABSOLUTE pidl); // *** Tree item sorting callback *** static int CALLBACK CompareTreeItems(LPARAM p1, LPARAM p2, LPARAM p3); diff --git a/dll/win32/browseui/shellbrowser.cpp b/dll/win32/browseui/shellbrowser.cpp index 42303f64d7b..4b26884f756 100644 --- a/dll/win32/browseui/shellbrowser.cpp +++ b/dll/win32/browseui/shellbrowser.cpp @@ -2312,8 +2312,11 @@ HRESULT STDMETHODCALLTYPE CShellBrowser::QueryActiveShellView(IShellView **ppshv return E_POINTER; *ppshv = fCurrentShellView; if (fCurrentShellView.p != NULL) + { fCurrentShellView.p->AddRef(); - return S_OK; + return S_OK; + } + return E_FAIL; } HRESULT STDMETHODCALLTYPE CShellBrowser::OnViewWindowActive(IShellView *ppshv) @@ -2568,10 +2571,7 @@ HRESULT STDMETHODCALLTYPE CShellBrowser::CanNavigateNow() HRESULT STDMETHODCALLTYPE CShellBrowser::GetPidl(LPITEMIDLIST *ppidl) { // called by explorer bar to get current pidl - if (ppidl == NULL) - return E_POINTER; - *ppidl = ILClone(fCurrentDirectoryPIDL); - return S_OK; + return ppidl ? SHILClone(fCurrentDirectoryPIDL, ppidl) : E_POINTER; } HRESULT STDMETHODCALLTYPE CShellBrowser::SetReferrer(LPCITEMIDLIST pidl) diff --git a/dll/win32/browseui/utility.cpp b/dll/win32/browseui/utility.cpp index 17a2ab42968..ead564a1f6e 100644 --- a/dll/win32/browseui/utility.cpp +++ b/dll/win32/browseui/utility.cpp @@ -1,4 +1,7 @@ #include "precomp.h" +#ifndef SHCIDS_CANONICALONLY +#define SHCIDS_CANONICALONLY 0x10000000L +#endif void *operator new(size_t size) { @@ -14,3 +17,57 @@ void operator delete(void *p, UINT_PTR) { LocalFree(p); } + +HRESULT SHELL_GetIDListFromObject(IUnknown *punk, PIDLIST_ABSOLUTE *ppidl) +{ +#if DLL_EXPORT_VERSION >= _WIN32_WINNT_VISTA && 0 // FIXME: SHELL32 not ready yet + return SHGetIDListFromObject(punk, ppidl); +#else + HRESULT hr; + IPersistFolder2 *pf2; + if (SUCCEEDED(hr = punk->QueryInterface(IID_PPV_ARG(IPersistFolder2, &pf2)))) + { + hr = pf2->GetCurFolder(ppidl); + pf2->Release(); + } + IPersistIDList *pil; + if (FAILED(hr) && SUCCEEDED(hr = punk->QueryInterface(IID_PPV_ARG(IPersistIDList, &pil)))) + { + hr = pil->GetIDList(ppidl); + pil->Release(); + } + return hr; +#endif +} + +static HRESULT SHELL_CompareAbsoluteIDs(LPARAM lParam, PCIDLIST_ABSOLUTE a, PCIDLIST_ABSOLUTE b) +{ + IShellFolder *psf; + HRESULT hr = SHGetDesktopFolder(&psf); + if (FAILED(hr)) + return hr; + hr = psf->CompareIDs(lParam, a, b); + psf->Release(); + return hr; +} + +BOOL SHELL_IsEqualAbsoluteID(PCIDLIST_ABSOLUTE a, PCIDLIST_ABSOLUTE b) +{ + return !SHELL_CompareAbsoluteIDs(SHCIDS_CANONICALONLY, a, b); +} + +BOOL SHELL_IsVerb(IContextMenu *pcm, UINT_PTR idCmd, LPCWSTR Verb) +{ + HRESULT hr; + WCHAR wide[MAX_PATH]; + if (SUCCEEDED(hr = pcm->GetCommandString(idCmd, GCS_VERBW, NULL, (LPSTR)wide, _countof(wide)))) + return !lstrcmpiW(wide, Verb); + + CHAR ansi[_countof(wide)], buf[MAX_PATH]; + if (SHUnicodeToAnsi(Verb, buf, _countof(buf))) + { + if (SUCCEEDED(hr = pcm->GetCommandString(idCmd, GCS_VERBA, NULL, ansi, _countof(ansi)))) + return !lstrcmpiA(ansi, buf); + } + return FALSE; +} diff --git a/dll/win32/browseui/utility.h b/dll/win32/browseui/utility.h index 948b9abf03b..b40d18c34a4 100644 --- a/dll/win32/browseui/utility.h +++ b/dll/win32/browseui/utility.h @@ -2,3 +2,7 @@ void *operator new(size_t size); void operator delete(void *p); + +HRESULT SHELL_GetIDListFromObject(IUnknown *punk, PIDLIST_ABSOLUTE *ppidl); +BOOL SHELL_IsEqualAbsoluteID(PCIDLIST_ABSOLUTE a, PCIDLIST_ABSOLUTE b); +BOOL SHELL_IsVerb(IContextMenu *pcm, UINT_PTR idCmd, LPCWSTR Verb); diff --git a/dll/win32/comctl32/listview.c b/dll/win32/comctl32/listview.c index f53bf9b7ff8..53e8b546bf2 100644 --- a/dll/win32/comctl32/listview.c +++ b/dll/win32/comctl32/listview.c @@ -3254,7 +3254,18 @@ static RANGES ranges_clone(RANGES ranges) { RANGES clone; INT i; - + +#ifdef __REACTOS__ + if (!ranges || !ranges->hdpa) + { + /* + * If a ExplorerBand tree rename operation is completed by left-clicking in + * DefView, the navigation to the newly named item causes the ListView in DefView + * to call LISTVIEW_DeselectAllSkipItems during ListView destruction. + */ + return NULL; + } +#endif if (!(clone = ranges_create(DPA_GetPtrCount(ranges->hdpa)))) goto fail; for (i = 0; i < DPA_GetPtrCount(ranges->hdpa); i++) @@ -10575,6 +10586,9 @@ static LRESULT LISTVIEW_NCDestroy(LISTVIEW_INFO *infoPtr) Free(DPA_GetPtr(infoPtr->hdpaColumns, i)); DPA_Destroy(infoPtr->hdpaColumns); ranges_destroy(infoPtr->selectionRanges); +#ifdef __REACTOS__ + infoPtr->selectionRanges = NULL; /* See note in ranges_clone */ +#endif /* destroy image lists */ if (!(infoPtr->dwStyle & LVS_SHAREIMAGELISTS)) From d7be7486c97912931ddccfba24da5b2e96be0975 Mon Sep 17 00:00:00 2001 From: Joachim Henze Date: Wed, 22 May 2024 04:29:21 +0200 Subject: [PATCH 169/182] [SHELL32] RC: Fix some FIXMEs, add others (#6861) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - fixes the last text truncations we had in IDD_FOLDER_OPTIONS_GENERAL - small tweaks otherwhere - add some FIXMEs Co-authored-by: Hermès BÉLUSCA - MAÃTO --- dll/win32/shell32/lang/bg-BG.rc | 6 ++-- dll/win32/shell32/lang/ca-ES.rc | 2 +- dll/win32/shell32/lang/cs-CZ.rc | 4 +-- dll/win32/shell32/lang/da-DK.rc | 2 +- dll/win32/shell32/lang/de-DE.rc | 4 +-- dll/win32/shell32/lang/el-GR.rc | 2 +- dll/win32/shell32/lang/en-GB.rc | 2 +- dll/win32/shell32/lang/en-US.rc | 2 +- dll/win32/shell32/lang/es-ES.rc | 2 +- dll/win32/shell32/lang/et-EE.rc | 2 +- dll/win32/shell32/lang/eu-ES.rc | 2 +- dll/win32/shell32/lang/fi-FI.rc | 2 +- dll/win32/shell32/lang/fr-FR.rc | 18 ++++++------ dll/win32/shell32/lang/he-IL.rc | 2 +- dll/win32/shell32/lang/hi-IN.rc | 8 +++--- dll/win32/shell32/lang/hu-HU.rc | 6 ++-- dll/win32/shell32/lang/id-ID.rc | 14 ++++----- dll/win32/shell32/lang/it-IT.rc | 8 +++--- dll/win32/shell32/lang/ja-JP.rc | 6 ++-- dll/win32/shell32/lang/ko-KR.rc | 4 +-- dll/win32/shell32/lang/nl-NL.rc | 2 +- dll/win32/shell32/lang/no-NO.rc | 2 +- dll/win32/shell32/lang/pl-PL.rc | 4 +-- dll/win32/shell32/lang/pt-BR.rc | 2 +- dll/win32/shell32/lang/pt-PT.rc | 50 ++++++++++++++++----------------- dll/win32/shell32/lang/ro-RO.rc | 2 +- dll/win32/shell32/lang/ru-RU.rc | 2 +- dll/win32/shell32/lang/sk-SK.rc | 2 +- dll/win32/shell32/lang/sl-SI.rc | 2 +- dll/win32/shell32/lang/sq-AL.rc | 6 ++-- dll/win32/shell32/lang/sv-SE.rc | 24 ++++++++-------- dll/win32/shell32/lang/tr-TR.rc | 2 +- dll/win32/shell32/lang/uk-UA.rc | 2 +- dll/win32/shell32/lang/zh-CN.rc | 2 +- dll/win32/shell32/lang/zh-HK.rc | 2 +- dll/win32/shell32/lang/zh-TW.rc | 2 +- 36 files changed, 103 insertions(+), 103 deletions(-) diff --git a/dll/win32/shell32/lang/bg-BG.rc b/dll/win32/shell32/lang/bg-BG.rc index fd3fd33dd57..b45db19ab76 100644 --- a/dll/win32/shell32/lang/bg-BG.rc +++ b/dll/win32/shell32/lang/bg-BG.rc @@ -122,7 +122,7 @@ BEGIN DEFPUSHBUTTON "&Да", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Да за вÑи&чки", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "&Ðе", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "&Отказ" , IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Отказ" , IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END @@ -422,8 +422,8 @@ BEGIN CONTROL "", IDC_FOLDER_OPTIONS_CLICKICON, "Static", SS_ICON | WS_CHILD | WS_VISIBLE, 14, 120, 21, 20 AUTORADIOBUTTON "&ОтварÑне Ñ ÐµÐ´Ð¸Ð½Ð¸Ñ‡Ð½Ð¾ цъкане (избор Ñ Ð¿Ð¾Ñочване)", IDC_FOLDER_OPTIONS_SINGLECLICK, 40, 120, 210, 10, WS_TABSTOP | WS_GROUP //FIXME: accelerator collision &O AUTORADIOBUTTON "&ОтварÑне Ñ Ð´Ð²Ð¾Ð¹Ð½Ð¾ цъкане (избиране Ñ ÐµÐ´Ð¸Ð½Ð¸Ñ‡Ð½Ð¾)", IDC_FOLDER_OPTIONS_DOUBLECLICK, 40, 156, 210, 10 //FIXME: accelerator collision &O - AUTORADIOBUTTON "Подчертаване заглавиÑта на значетата ÑъглаÑно &обзорника ми", IDC_FOLDER_OPTIONS_ULBROWSER, 50, 132, 200, 10, WS_TABSTOP | WS_GROUP //FIXME: Shorten the string to avoid text truncation (recommended), or make it use 2 lines (less recommended) //FIXME: accelerator collision &O - AUTORADIOBUTTON "Подчертаване на заглавиÑта на значетата при &поÑочване", IDC_FOLDER_OPTIONS_ULPOINT, 50, 144, 200, 10 //FIXME: Shorten the string to avoid text truncation (recommended), or make it use 2 lines (less recommended) + AUTORADIOBUTTON "Подчертаване и &Ð·Ð°Ð³Ð»Ð°Ð²Ð¸Ñ Ñпоред Ð¼Ð¾Ñ Ð¿Ð»Ð°Ð½", IDC_FOLDER_OPTIONS_ULBROWSER, 50, 132, 200, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Подчертайте &поÑочените заглавиÑ", IDC_FOLDER_OPTIONS_ULPOINT, 50, 144, 200, 10 PUSHBUTTON "От под&разбираните", IDC_FOLDER_OPTIONS_RESTORE, 167, 178, 90, 14, WS_TABSTOP END diff --git a/dll/win32/shell32/lang/ca-ES.rc b/dll/win32/shell32/lang/ca-ES.rc index 69e4645f289..499347f22f3 100644 --- a/dll/win32/shell32/lang/ca-ES.rc +++ b/dll/win32/shell32/lang/ca-ES.rc @@ -122,7 +122,7 @@ BEGIN DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Yes to &all", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/cs-CZ.rc b/dll/win32/shell32/lang/cs-CZ.rc index af755d399a6..28287521095 100644 --- a/dll/win32/shell32/lang/cs-CZ.rc +++ b/dll/win32/shell32/lang/cs-CZ.rc @@ -11,11 +11,11 @@ LANGUAGE LANG_CZECH, SUBLANG_DEFAULT MENU_001 MENUEX BEGIN MENUITEM "&Vedle sebe", FCIDM_SHVIEW_BIGICON - MENUITEM "&Ikony", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Ikony", FCIDM_SHVIEW_SMALLICON //FIXME: accelerator collision &I MENUITEM "&Seznam", FCIDM_SHVIEW_LISTVIEW MENUITEM "&Podrobnosti", FCIDM_SHVIEW_REPORTVIEW MENUITEM "", -1, MFT_SEPARATOR - POPUP "SeÅ™adit &ikony", FCIDM_SHVIEW_ARRANGE + POPUP "SeÅ™adit &ikony", FCIDM_SHVIEW_ARRANGE //FIXME: accelerator collision &I BEGIN MENUITEM "", -1, MFT_SEPARATOR MENUITEM "&Rovnat automaticky", FCIDM_SHVIEW_AUTOARRANGE diff --git a/dll/win32/shell32/lang/da-DK.rc b/dll/win32/shell32/lang/da-DK.rc index 75fd17a3d3d..cc35b610f20 100644 --- a/dll/win32/shell32/lang/da-DK.rc +++ b/dll/win32/shell32/lang/da-DK.rc @@ -129,7 +129,7 @@ BEGIN DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Yes to &all", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/de-DE.rc b/dll/win32/shell32/lang/de-DE.rc index af37ff49a0f..d6f2dec6602 100644 --- a/dll/win32/shell32/lang/de-DE.rc +++ b/dll/win32/shell32/lang/de-DE.rc @@ -66,7 +66,7 @@ BEGIN MENUITEM SEPARATOR MENUITEM "&Ausschneiden", IDM_CUT MENUITEM "&Kopieren", IDM_COPY - MENUITEM "Paste", IDM_INSERT + MENUITEM "Ei&nfügen", IDM_INSERT MENUITEM SEPARATOR MENUITEM "&Verknüpfung erstellen", IDM_CREATELINK MENUITEM "&Löschen", IDM_DELETE @@ -122,7 +122,7 @@ BEGIN DEFPUSHBUTTON "&Ja", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Ja zu &allen", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "&Nein", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "Abbrechen", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Abbrechen", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/el-GR.rc b/dll/win32/shell32/lang/el-GR.rc index 5c7122d9892..e284ab7751d 100644 --- a/dll/win32/shell32/lang/el-GR.rc +++ b/dll/win32/shell32/lang/el-GR.rc @@ -122,7 +122,7 @@ BEGIN DEFPUSHBUTTON "&Îαι", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Îαι σε ÏŒ&λα", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "ÎŒ&χι", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "Ά&κυÏο", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "ΆκυÏο", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/en-GB.rc b/dll/win32/shell32/lang/en-GB.rc index b7620b0e14c..23c7470855f 100644 --- a/dll/win32/shell32/lang/en-GB.rc +++ b/dll/win32/shell32/lang/en-GB.rc @@ -122,7 +122,7 @@ BEGIN DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Yes to &all", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/en-US.rc b/dll/win32/shell32/lang/en-US.rc index 14258d18f31..3e9f62b4690 100644 --- a/dll/win32/shell32/lang/en-US.rc +++ b/dll/win32/shell32/lang/en-US.rc @@ -122,7 +122,7 @@ BEGIN DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Yes to &all", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/es-ES.rc b/dll/win32/shell32/lang/es-ES.rc index 9e8fd38e2b9..e5f761351ed 100644 --- a/dll/win32/shell32/lang/es-ES.rc +++ b/dll/win32/shell32/lang/es-ES.rc @@ -131,7 +131,7 @@ BEGIN DEFPUSHBUTTON "&Sí", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Sí &a todo", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "&Cancelar", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Cancelar", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/et-EE.rc b/dll/win32/shell32/lang/et-EE.rc index 5fb4e4534a6..0b4d032f16c 100644 --- a/dll/win32/shell32/lang/et-EE.rc +++ b/dll/win32/shell32/lang/et-EE.rc @@ -129,7 +129,7 @@ BEGIN DEFPUSHBUTTON "&Jah", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Jah &kõigele", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "&Ei", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "&Loobu", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Loobu", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/eu-ES.rc b/dll/win32/shell32/lang/eu-ES.rc index a21558af68a..02bf1de9d68 100644 --- a/dll/win32/shell32/lang/eu-ES.rc +++ b/dll/win32/shell32/lang/eu-ES.rc @@ -129,7 +129,7 @@ BEGIN DEFPUSHBUTTON "&Bai", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "&Guztiari bai", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "&Ez", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "&Utzi", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Utzi", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/fi-FI.rc b/dll/win32/shell32/lang/fi-FI.rc index acb126b6cdf..35e0e082e7c 100644 --- a/dll/win32/shell32/lang/fi-FI.rc +++ b/dll/win32/shell32/lang/fi-FI.rc @@ -122,7 +122,7 @@ BEGIN DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Yes to &all", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/fr-FR.rc b/dll/win32/shell32/lang/fr-FR.rc index 37269658ffb..be4e903fb61 100644 --- a/dll/win32/shell32/lang/fr-FR.rc +++ b/dll/win32/shell32/lang/fr-FR.rc @@ -122,7 +122,7 @@ BEGIN DEFPUSHBUTTON "Oui", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Oui pour tous", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "&Non", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "Annuler", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Annuler", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END @@ -679,9 +679,9 @@ BEGIN PUSHBUTTON "&Modifier...", IDC_EDITTYPE_EDIT_BUTTON, 150, 65, 70, 14 PUSHBUTTON "&Supprimer", IDC_EDITTYPE_REMOVE, 150, 80, 70, 14 PUSHBUTTON "&Par défaut", IDC_EDITTYPE_SET_DEFAULT, 150, 95, 70, 14 - AUTOCHECKBOX "Confirmer l'ouverture après le téléchargement", IDC_EDITTYPE_CONFIRM_OPEN, 5, 115, 150, 14 - AUTOCHECKBOX "Toujours afficher l'extension", IDC_EDITTYPE_SHOW_EXT, 5, 130, 150, 14 - AUTOCHECKBOX "Parcourir dans une même fenêtre", IDC_EDITTYPE_SAME_WINDOW, 5, 145, 150, 14 + AUTOCHECKBOX "C&onfirmer l'ouverture après le téléchargement", IDC_EDITTYPE_CONFIRM_OPEN, 5, 115, 150, 14 + AUTOCHECKBOX "To&ujours afficher l'extension", IDC_EDITTYPE_SHOW_EXT, 5, 130, 150, 14 + AUTOCHECKBOX "Parcourir dans une même &fenêtre", IDC_EDITTYPE_SAME_WINDOW, 5, 145, 150, 14 DEFPUSHBUTTON "OK", IDOK, 95, 170, 60, 14 PUSHBUTTON "Annuler", IDCANCEL, 160, 170, 60, 14 END @@ -695,7 +695,7 @@ BEGIN EDITTEXT IDC_ACTION_ACTION, 5, 20, 150, 14, ES_AUTOHSCROLL LTEXT "App&lication utilisée pour exécuter cette action :", -1, 5, 42, 150, 10 EDITTEXT IDC_ACTION_APP, 5, 55, 150, 14, ES_AUTOHSCROLL - PUSHBUTTON "Parcourir...", IDC_ACTION_BROWSE, 160, 60, 60, 14 + PUSHBUTTON "&Parcourir...", IDC_ACTION_BROWSE, 160, 60, 60, 14 AUTOCHECKBOX "&Utiliser DDE", IDC_ACTION_USE_DDE, 10, 75, 103, 14 DEFPUSHBUTTON "OK", IDOK, 160, 20, 60, 14 PUSHBUTTON "Annuler", IDCANCEL, 160, 40, 60, 14 @@ -707,7 +707,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Quel type de dossier voulez-vous ?", IDC_STATIC, 5, 5, 230, 65, WS_TABSTOP - LTEXT "Utiliser ce dossier comme modèle :", IDC_STATIC, 15, 20, 210, 12 + LTEXT "Utiliser ce dossier comme modèle :", IDC_STATIC, 15, 20, 210, 12 //FIXME: accelerator is missing COMBOBOX IDC_FOLDERCUST_COMBOBOX, 15, 35, 210, 300, CBS_HASSTRINGS | CBS_AUTOHSCROLL | CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP AUTOCHECKBOX "Appliquer ce modèle aux sous-dossiers", IDC_FOLDERCUST_CHECKBOX, 15, 50, 210, 15 GROUPBOX "Images de dossier", IDC_STATIC, 5, 75, 230, 85, WS_TABSTOP @@ -730,7 +730,7 @@ BEGIN ICON 0, IDC_LINK_PROBLEM_ICON, 5, 5, 0, 0 LTEXT "L'élément '%s' auquel ce raccourci fait référence a été modifié ou déplacé et ce raccourci ne fonctionne plus correctement.", IDC_LINK_PROBLEM_LABEL1, 35, 5, 210, 35 LTEXT "Elément correspondant le plus proche basé sur le nom, type, taille et date :", IDC_LINK_PROBLEM_LABEL2, 35, 45, 210, 35 - LTEXT "Voulez-vous corriger ce raccourcis en pointant vers cette cible ou voulez-vous le supprimer ?", -1, 35, 85, 210, 30 + LTEXT "Voulez-vous corriger ce raccourci en pointant vers cette cible ou voulez-vous le supprimer ?", -1, 35, 85, 210, 30 DEFPUSHBUTTON "&Corriger", IDOK, 55, 120, 60, 15, WS_DISABLED PUSHBUTTON "&Supprimer", IDYES, 120, 120, 60, 15 PUSHBUTTON "Annuler", IDCANCEL, 185, 120, 60, 15 @@ -1024,8 +1024,8 @@ BEGIN IDS_ADVANCED_DISPLAY_ADMINTOOLS "Display Administrative Tools" IDS_ADVANCED_SMALL_START_MENU "Show Small Icons in Start menu" - IDS_NEWEXT_ADVANCED_LEFT "<< Avancé" - IDS_NEWEXT_ADVANCED_RIGHT "Avancé >>" + IDS_NEWEXT_ADVANCED_LEFT "<< A&vancé" + IDS_NEWEXT_ADVANCED_RIGHT "A&vancé >>" IDS_NEWEXT_NEW "" IDS_NEWEXT_SPECIFY_EXT "Vous devez spécifier une extension." IDS_NEWEXT_ALREADY_ASSOC "L'extension %s est déjà associée avec le type de fichiers %s. Voulez vous désassocier %s avec %s et créer une nouvelle association de fichier pour celle-ci ?" diff --git a/dll/win32/shell32/lang/he-IL.rc b/dll/win32/shell32/lang/he-IL.rc index 88abf0f543f..6aff06a9671 100644 --- a/dll/win32/shell32/lang/he-IL.rc +++ b/dll/win32/shell32/lang/he-IL.rc @@ -129,7 +129,7 @@ BEGIN DEFPUSHBUTTON "כן", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "כן להכל", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "ל×", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "ביטול", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "ביטול", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/hi-IN.rc b/dll/win32/shell32/lang/hi-IN.rc index 71e55d65141..b9c203cba9c 100644 --- a/dll/win32/shell32/lang/hi-IN.rc +++ b/dll/win32/shell32/lang/hi-IN.rc @@ -129,7 +129,7 @@ BEGIN DEFPUSHBUTTON "&हाà¤", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "&सब को हां", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "&नहीं", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "&रदà¥à¤¦ करें", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "रदà¥à¤¦ करें", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END @@ -317,11 +317,11 @@ BEGIN EDITTEXT 14002, 110, 51, 120, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP LTEXT "", -1, 8, 64, 223, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE CONTROL "", 14013, "Static", SS_SUNKEN | SS_OWNERDRAW, 8, 69, 10, 10 - LTEXT "उपयोग में लाया गया सà¥à¤ªà¥‡à¤¸ :", -1, 25, 69, 80, 10 + LTEXT "उपयोग में लाया गया सà¥à¤ªà¥‡à¤¸:", -1, 25, 69, 80, 10 EDITTEXT 14003, 110, 69, 86, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL EDITTEXT 14004, 197, 69, 33, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL CONTROL "", 14014, "Static", SS_SUNKEN | SS_OWNERDRAW, 8, 82, 10, 10 - LTEXT "खाली सà¥à¤ªà¥‡à¤¸ :", -1, 25, 82, 80, 10 + LTEXT "खाली सà¥à¤ªà¥‡à¤¸:", -1, 25, 82, 80, 10 EDITTEXT 14005, 110, 82, 86, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL EDITTEXT 14006, 197, 82, 33, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL LTEXT "", -1, 8, 97, 223, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE @@ -371,7 +371,7 @@ BEGIN CHECKBOX "मौजूदा यूज़र %s", 14000, 10, 45, 150, 10 LTEXT "अनधिकृत पà¥à¤°à¥‹à¤—à¥à¤°à¤¾à¤® गतिविधि से अपने कंपà¥à¤¯à¥‚टर और डेटा को सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ रखें", -1, 25, 57, 200, 10, WS_DISABLED CHECKBOX "यह विकलà¥à¤ª कंपà¥à¤¯à¥‚टर वायरस को आपके कंपà¥à¤¯à¥‚टर या वà¥à¤¯à¤•à¥à¤¤à¤¿à¤—त डेटा को नà¥à¤•à¤¸à¤¾à¤¨ पहà¥à¤‚चाने से रोक सकता है, लेकिन इसे चà¥à¤¨à¤¨à¥‡ से पà¥à¤°à¥‹à¤—à¥à¤°à¤¾à¤® अनà¥à¤šà¤¿à¤¤ तरीके से कारà¥à¤¯ कर सकता है।", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE - CHECKBOX "निमà¥à¤¨à¤²à¤¿à¤–ित यूज़र :", 14002, 10, 100, 90, 10 + CHECKBOX "निमà¥à¤¨à¤²à¤¿à¤–ित यूज़र:", 14002, 10, 100, 90, 10 LTEXT "यूज़र नेम:", -1, 20, 118, 54, 10 COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP diff --git a/dll/win32/shell32/lang/hu-HU.rc b/dll/win32/shell32/lang/hu-HU.rc index d0ae9fca500..bd2d29b4713 100644 --- a/dll/win32/shell32/lang/hu-HU.rc +++ b/dll/win32/shell32/lang/hu-HU.rc @@ -122,7 +122,7 @@ BEGIN DEFPUSHBUTTON "&Igen", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Igen az &összesre", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "&Nem", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "&Mégse", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Mégse", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END @@ -449,7 +449,7 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN LTEXT "Regisztrált &fájltípusok:", -1, 7, 10, 180, 10 CONTROL "", IDC_FILETYPES_LISTVIEW, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 99 - PUSHBUTTON "&Hozzáadás", IDC_FILETYPES_NEW, 140, 123, 55, 14, WS_TABSTOP + PUSHBUTTON "&Hozzáadás", IDC_FILETYPES_NEW, 140, 123, 55, 14, WS_TABSTOP //FIXME: accelerator collision &H PUSHBUTTON "&Törlés", IDC_FILETYPES_DELETE, 200, 123, 55, 14, WS_TABSTOP GROUPBOX "'%s' kiterjesztés részletei", IDC_FILETYPES_DETAILS_GROUPBOX, 7, 143, 249, 70 LTEXT "Megnyitás ezzel:", -1, 12, 153, 55, 10 @@ -457,7 +457,7 @@ BEGIN LTEXT "", IDC_FILETYPES_APPNAME, 100, 153, 80, 10 PUSHBUTTON "&Módosítás...", IDC_FILETYPES_CHANGE, 200, 153, 50, 14, WS_TABSTOP LTEXT "", IDC_FILETYPES_DESCRIPTION, 12, 168, 160, 40 - PUSHBUTTON "&Haladó", IDC_FILETYPES_ADVANCED, 200, 188, 50, 14, WS_TABSTOP + PUSHBUTTON "&Haladó", IDC_FILETYPES_ADVANCED, 200, 188, 50, 14, WS_TABSTOP //FIXME: accelerator collision &H END IDD_CONFIRM_FILE_REPLACE DIALOGEX 0, 0, 282, 143 diff --git a/dll/win32/shell32/lang/id-ID.rc b/dll/win32/shell32/lang/id-ID.rc index 35030e029c9..d4f80fc847c 100644 --- a/dll/win32/shell32/lang/id-ID.rc +++ b/dll/win32/shell32/lang/id-ID.rc @@ -122,7 +122,7 @@ BEGIN DEFPUSHBUTTON "&Ya", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Ya &ke semua", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "&Tidak", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "&Batal", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Batal", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END @@ -416,15 +416,15 @@ BEGIN AUTORADIOBUTTON "Gunakan folder kla&sik ReactOS", IDC_FOLDER_OPTIONS_CLASSICFOLDERS, 40, 32, 210, 10 GROUPBOX "Jelajah folder", -1, 7, 60, 249, 40, WS_TABSTOP CONTROL "", IDC_FOLDER_OPTIONS_FOLDERICON, "Static", SS_ICON | WS_CHILD | WS_VISIBLE, 14, 70, 21, 20 - AUTORADIOBUTTON "Buka setiap folder di jendela yang sa&ma", IDC_FOLDER_OPTIONS_SAMEWINDOW, 40, 70, 210, 10, WS_TABSTOP | WS_GROUP //FIXME: accelerator collision &M + AUTORADIOBUTTON "Buka setiap folder di jendela yang sa&ma", IDC_FOLDER_OPTIONS_SAMEWINDOW, 40, 70, 210, 10, WS_TABSTOP | WS_GROUP AUTORADIOBUTTON "Buka setiap folder di jen&dela sendiri", IDC_FOLDER_OPTIONS_OWNWINDOW, 40, 82, 210, 10 - GROUPBOX "Klik item sebagai berikut", -1, 7, 110, 249, 80 + GROUPBOX "Klik item sebagai berikut", -1, 7, 110, 249, 64 CONTROL "", IDC_FOLDER_OPTIONS_CLICKICON, "Static", SS_ICON | WS_CHILD | WS_VISIBLE, 14, 120, 21, 20 AUTORADIOBUTTON "S&atu klik untuk membuka butir (arahkan untuk pilih)", IDC_FOLDER_OPTIONS_SINGLECLICK, 40, 120, 210, 10, WS_TABSTOP | WS_GROUP - AUTORADIOBUTTON "D&ua klik untuk membuka butir (satu klik untuk pilih)", IDC_FOLDER_OPTIONS_DOUBLECLICK, 40, 172, 210, 10 - AUTORADIOBUTTON "Garis bawahi judul ikon yang konsisten dengan browser saya", IDC_FOLDER_OPTIONS_ULBROWSER, 50, 132, 200, 20, BS_MULTILINE | WS_TABSTOP | WS_GROUP - AUTORADIOBUTTON "Garis bawahi judul ikon hanya ketika saya &mengarahkan ke judul tersebut", IDC_FOLDER_OPTIONS_ULPOINT, 50, 152, 200, 20, BS_MULTILINE //FIXME: accelerator collision &M - PUSHBUTTON "&Kembalikan asal", IDC_FOLDER_OPTIONS_RESTORE, 167, 194, 90, 14, WS_TABSTOP + AUTORADIOBUTTON "D&ua klik untuk membuka butir (satu klik untuk pilih)", IDC_FOLDER_OPTIONS_DOUBLECLICK, 40, 156, 210, 10 + AUTORADIOBUTTON "Garis bawahi judul ikon sesuai dengan &browser saya", IDC_FOLDER_OPTIONS_ULBROWSER, 50, 132, 200, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Garis bawahi judul ikon hanya saat m&engarahkan kursor", IDC_FOLDER_OPTIONS_ULPOINT, 50, 144, 200, 10 + PUSHBUTTON "&Kembalikan asal", IDC_FOLDER_OPTIONS_RESTORE, 167, 178, 90, 14, WS_TABSTOP END IDD_FOLDER_OPTIONS_VIEW DIALOGEX 0, 0, 264, 220 diff --git a/dll/win32/shell32/lang/it-IT.rc b/dll/win32/shell32/lang/it-IT.rc index 719f01a5442..1b64975bb5e 100644 --- a/dll/win32/shell32/lang/it-IT.rc +++ b/dll/win32/shell32/lang/it-IT.rc @@ -122,7 +122,7 @@ BEGIN DEFPUSHBUTTON "&Sì", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Sì a &tutti", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "&Annulla", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Annulla", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END @@ -418,10 +418,10 @@ BEGIN CONTROL "", IDC_FOLDER_OPTIONS_FOLDERICON, "Static", SS_ICON | WS_CHILD | WS_VISIBLE, 14, 70, 21, 20 AUTORADIOBUTTON "Aprire ogni cartella nella stessa finestra", IDC_FOLDER_OPTIONS_SAMEWINDOW, 40, 70, 210, 10, WS_TABSTOP | WS_GROUP AUTORADIOBUTTON "Aprire ogni cartella in una nuova finestra", IDC_FOLDER_OPTIONS_OWNWINDOW, 40, 82, 210, 10 - GROUPBOX "Click sugli elementi come segue", -1, 7, 110, 249, 64 + GROUPBOX "Clic sugli elementi come segue", -1, 7, 110, 249, 64 CONTROL "", IDC_FOLDER_OPTIONS_CLICKICON, "Static", SS_ICON | WS_CHILD | WS_VISIBLE, 14, 120, 21, 20 - AUTORADIOBUTTON "&Click singolo per aprire un elemento (seleziona ed apre)", IDC_FOLDER_OPTIONS_SINGLECLICK, 40, 120, 210, 10, WS_TABSTOP | WS_GROUP - AUTORADIOBUTTON "&Doppio click per aprire un elemento (click singolo per selezionare)", IDC_FOLDER_OPTIONS_DOUBLECLICK, 40, 156, 210, 10 //FIXME: Shorten the string by >= 2 characters (recommended!), or make it 2 lines (less recommended) + AUTORADIOBUTTON "&Clic singolo per aprire un elemento (seleziona ed apre)", IDC_FOLDER_OPTIONS_SINGLECLICK, 40, 120, 210, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Doppio clic per aprire un elemento (una volta per selezionare)", IDC_FOLDER_OPTIONS_DOUBLECLICK, 40, 156, 210, 10 AUTORADIOBUTTON "Sottolinea i titoli delle icone in modo coerente con il &browser", IDC_FOLDER_OPTIONS_ULBROWSER, 50, 132, 200, 10, WS_TABSTOP | WS_GROUP AUTORADIOBUTTON "Sottolinea i titoli delle icone solo se &selezionate", IDC_FOLDER_OPTIONS_ULPOINT, 50, 144, 200, 10 PUSHBUTTON "&Ripristina come predefinite", IDC_FOLDER_OPTIONS_RESTORE, 157, 178, 100, 14, WS_TABSTOP diff --git a/dll/win32/shell32/lang/ja-JP.rc b/dll/win32/shell32/lang/ja-JP.rc index e13c93c9595..08fafbc13af 100644 --- a/dll/win32/shell32/lang/ja-JP.rc +++ b/dll/win32/shell32/lang/ja-JP.rc @@ -122,7 +122,7 @@ BEGIN DEFPUSHBUTTON "ã¯ã„(&Y)", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "ã™ã¹ã¦ã¯ã„(&A)", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "ã„ã„ãˆ(&N)", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "キャンセル(&C)", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "キャンセル", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END @@ -183,14 +183,14 @@ BEGIN EDITTEXT IDC_SHORTCUT_TYPE_EDIT, 79, 37, 150, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL LTEXT "対象ã®å ´æ‰€:", IDC_SHORTCUT_LOCATION, 8, 55, 68, 10 EDITTEXT IDC_SHORTCUT_LOCATION_EDIT, 79, 53, 150, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - LTEXT "対象 (&T):", IDC_SHORTCUT_TARGET, 8, 71, 68, 10 + LTEXT "対象(&T):", IDC_SHORTCUT_TARGET, 8, 71, 68, 10 EDITTEXT IDC_SHORTCUT_TARGET_TEXT, 79, 69, 150, 14, ES_AUTOHSCROLL LTEXT "", -1, 8, 88, 223, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE LTEXT "実行元(&S):", IDC_SHORTCUT_START_IN, 8, 98, 68, 10 EDITTEXT IDC_SHORTCUT_START_IN_EDIT, 79, 96, 150, 14, ES_AUTOHSCROLL LTEXT "ショートカットキー(&K):", IDC_SHORTCUT_KEY, 8, 117, 68, 10 CONTROL "", IDC_SHORTCUT_KEY_HOTKEY, "msctls_hotkey32", WS_VISIBLE | WS_CHILD | WS_BORDER | WS_TABSTOP, 79, 115, 150, 14 - LTEXT "実行状態 (&R):", IDC_SHORTCUT_RUN, 8, 136, 68, 10 + LTEXT "実行状態(&R):", IDC_SHORTCUT_RUN, 8, 136, 68, 10 COMBOBOX IDC_SHORTCUT_RUN_COMBO, 79, 134, 150, 54, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP LTEXT "コメント(&O):", IDC_SHORTCUT_COMMENT, 8, 154, 68, 10 EDITTEXT IDC_SHORTCUT_COMMENT_EDIT, 79, 152, 150, 14, ES_AUTOHSCROLL diff --git a/dll/win32/shell32/lang/ko-KR.rc b/dll/win32/shell32/lang/ko-KR.rc index 5995b2e9c19..3d59d7854bc 100644 --- a/dll/win32/shell32/lang/ko-KR.rc +++ b/dll/win32/shell32/lang/ko-KR.rc @@ -128,8 +128,8 @@ FONT 9, "굴림" BEGIN DEFPUSHBUTTON "예(&Y)", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "ìš’ë‘ ì˜ˆ(&A)", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP - PUSHBUTTON " ì롉오(&N)", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "ì·¨ëš(&C)", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "ì롉오(&N)", IDNO, 162, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "ì·¨ëš", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/nl-NL.rc b/dll/win32/shell32/lang/nl-NL.rc index b79ce623f27..53ffd3effa7 100644 --- a/dll/win32/shell32/lang/nl-NL.rc +++ b/dll/win32/shell32/lang/nl-NL.rc @@ -122,7 +122,7 @@ BEGIN DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Yes to &all", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/no-NO.rc b/dll/win32/shell32/lang/no-NO.rc index c12b248f621..c3587bfef96 100644 --- a/dll/win32/shell32/lang/no-NO.rc +++ b/dll/win32/shell32/lang/no-NO.rc @@ -122,7 +122,7 @@ BEGIN DEFPUSHBUTTON "&Ja", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Ja til &alt", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "&Nei", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "Avbry&t", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Avbryt", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/pl-PL.rc b/dll/win32/shell32/lang/pl-PL.rc index 8a31eda58dd..9112ddd857e 100644 --- a/dll/win32/shell32/lang/pl-PL.rc +++ b/dll/win32/shell32/lang/pl-PL.rc @@ -131,7 +131,7 @@ BEGIN DEFPUSHBUTTON "&Tak", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Tak na &wszystkie", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "&Nie", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "&Anuluj", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Anuluj", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END @@ -429,7 +429,7 @@ BEGIN AUTORADIOBUTTON "Otwórz każdy katalog w &osobnym oknie", IDC_FOLDER_OPTIONS_OWNWINDOW, 40, 82, 210, 10 GROUPBOX "DziaÅ‚anie przycisków myszki", -1, 7, 110, 249, 64 CONTROL "", IDC_FOLDER_OPTIONS_CLICKICON, "Static", SS_ICON | WS_CHILD | WS_VISIBLE, 14, 120, 21, 20 - AUTORADIOBUTTON "&Pojedyncze klikniÄ™cie by otworzyć cel (najechanie by wskazać)", IDC_FOLDER_OPTIONS_SINGLECLICK, 40, 120, 215, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Pojedyncze klikniÄ™cie by otworzyć cel (najechanie by wskazać)", IDC_FOLDER_OPTIONS_SINGLECLICK, 40, 120, 210, 10, WS_TABSTOP | WS_GROUP AUTORADIOBUTTON "&Dwukrotne klikniÄ™cie by otworzyć (pojedyncze by wskazać)", IDC_FOLDER_OPTIONS_DOUBLECLICK, 40, 156, 210, 10 //FIXME: accelerator collision &D AUTORADIOBUTTON "PodkreÅ›l tytuÅ‚y ikon zgodnych z używ&anÄ… przeglÄ…darkÄ…", IDC_FOLDER_OPTIONS_ULBROWSER, 50, 132, 200, 10, WS_TABSTOP | WS_GROUP AUTORADIOBUTTON "PodkreÅ›laj &tytuÅ‚y ikon tylko po ich wskazaniu", IDC_FOLDER_OPTIONS_ULPOINT, 50, 144, 200, 10 diff --git a/dll/win32/shell32/lang/pt-BR.rc b/dll/win32/shell32/lang/pt-BR.rc index 2ac28c0b3b0..7744d9a7851 100644 --- a/dll/win32/shell32/lang/pt-BR.rc +++ b/dll/win32/shell32/lang/pt-BR.rc @@ -122,7 +122,7 @@ BEGIN DEFPUSHBUTTON "&Sim", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Sim para &todos", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "&Não", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "&Cancelar", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Cancelar", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/pt-PT.rc b/dll/win32/shell32/lang/pt-PT.rc index 1a203bd665e..12398eb1bc1 100644 --- a/dll/win32/shell32/lang/pt-PT.rc +++ b/dll/win32/shell32/lang/pt-PT.rc @@ -46,7 +46,7 @@ MENU_003 MENU BEGIN MENUITEM "&Retroceder\tCtrl+Z", FCIDM_SHVIEW_UNDO MENUITEM SEPARATOR - MENUITEM "Cor&tar\tCtrl+X", FCIDM_SHVIEW_CUT + MENUITEM "Cor&tar\tCtrl+X", FCIDM_SHVIEW_CUT //FIXME: accelerator collision &T MENUITEM "&Copiar\tCtrl+C", FCIDM_SHVIEW_COPY MENUITEM "Co&lar\tCtrl+V", FCIDM_SHVIEW_INSERT MENUITEM "Colar &atalho", FCIDM_SHVIEW_INSERTLINK @@ -54,7 +54,7 @@ BEGIN MENUITEM "Copiar &pasta...", FCIDM_SHVIEW_COPYTO MENUITEM "Mo&ver para pasta...", FCIDM_SHVIEW_MOVETO MENUITEM SEPARATOR - MENUITEM "Seleccionar &tudo\tCtrl+A", FCIDM_SHVIEW_SELECTALL + MENUITEM "Seleccionar &tudo\tCtrl+A", FCIDM_SHVIEW_SELECTALL //FIXME: accelerator collision &T MENUITEM "&Inverter Selecção.", FCIDM_SHVIEW_INVERTSELECTION END @@ -122,7 +122,7 @@ BEGIN DEFPUSHBUTTON "&Sim", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Sim para &todos", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "&Não", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "Cancelar", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Cancelar", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END @@ -244,7 +244,7 @@ END IDD_FILE_PROPERTIES DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION -CAPTION "geral" +CAPTION "Geral" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 16, 7, 32, 32, WS_VISIBLE @@ -405,59 +405,59 @@ BEGIN PUSHBUTTON "Cancelar", IDCANCEL, 206, 236, 50, 14 END -IDD_FOLDER_OPTIONS_GENERAL DIALOGEX 0, 0, 274, 220 +IDD_FOLDER_OPTIONS_GENERAL DIALOGEX 0, 0, 264, 220 STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Geral" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - GROUPBOX "Tarefas", -1, 7, 10, 259, 40 + GROUPBOX "Tarefas", -1, 7, 10, 249, 40 CONTROL "", IDC_FOLDER_OPTIONS_TASKICON, "Static", SS_ICON | WS_CHILD | WS_VISIBLE, 14, 20, 21, 20 AUTORADIOBUTTON "Mostrar tarefas comuns nas &pastas", IDC_FOLDER_OPTIONS_COMMONTASKS, 40, 20, 210, 10, WS_TABSTOP | WS_GROUP AUTORADIOBUTTON "Utilizar pastas class&icas ReactOS", IDC_FOLDER_OPTIONS_CLASSICFOLDERS, 40, 32, 210, 10 - GROUPBOX "Procurar pasta", -1, 7, 60, 259, 40, WS_TABSTOP + GROUPBOX "Procurar pasta", -1, 7, 60, 249, 40, WS_TABSTOP CONTROL "", IDC_FOLDER_OPTIONS_FOLDERICON, "Static", SS_ICON | WS_CHILD | WS_VISIBLE, 14, 70, 21, 20 AUTORADIOBUTTON "Abrir cada pasta na &mesma janela", IDC_FOLDER_OPTIONS_SAMEWINDOW, 40, 70, 210, 10, WS_TABSTOP | WS_GROUP AUTORADIOBUTTON "Abrir cada pasta na sua &janela", IDC_FOLDER_OPTIONS_OWNWINDOW, 40, 82, 210, 10 - GROUPBOX "Seleccione a seguinte opção", -1, 7, 110, 259, 64 + GROUPBOX "Seleccione a seguinte opção", -1, 7, 110, 249, 64 CONTROL "", IDC_FOLDER_OPTIONS_CLICKICON, "Static", SS_ICON | WS_CHILD | WS_VISIBLE, 14, 120, 21, 20 - AUTORADIOBUTTON "&Clique simples para abrir um item", IDC_FOLDER_OPTIONS_SINGLECLICK, 40, 120, 210, 10, WS_TABSTOP | WS_GROUP - AUTORADIOBUTTON "&Duplo-clique para abrir um item (um clique para seleccionar)", IDC_FOLDER_OPTIONS_DOUBLECLICK, 40, 156, 210, 10 - AUTORADIOBUTTON "Sublinhar os títulos dos ícones mantendo o aspecto do &navegador", IDC_FOLDER_OPTIONS_ULBROWSER, 50, 132, 215, 10, WS_TABSTOP | WS_GROUP //FIXME: Shorten the string to avoid text truncation (recommended), or make it use 2 lines (less recommended). You can have a look at pt-BR.rc which has a string that fits here. - AUTORADIOBUTTON "Sublinhar os títulos dos ícones apenas quando &aponto para eles", IDC_FOLDER_OPTIONS_ULPOINT, 50, 144, 215, 10 //FIXME: Shorten the string to avoid text truncation (recommended), or make it use 2 lines (less recommended). You can have a look at pt-BR.rc which has a string that fits here. - PUSHBUTTON "&Restaurar predefinições", IDC_FOLDER_OPTIONS_RESTORE, 177, 178, 90, 14, WS_TABSTOP + AUTORADIOBUTTON "&Click simples para abrir um item", IDC_FOLDER_OPTIONS_SINGLECLICK, 40, 120, 210, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Duplo-click para abrir um item (um click para seleccionar)", IDC_FOLDER_OPTIONS_DOUBLECLICK, 40, 156, 210, 10 + AUTORADIOBUTTON "Sublinhar títulos de ícones consistentes com meu &navegador", IDC_FOLDER_OPTIONS_ULBROWSER, 50, 132, 205, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Sublinhar títulos de ícones sómente quando &apontados", IDC_FOLDER_OPTIONS_ULPOINT, 50, 144, 200, 10 + PUSHBUTTON "&Restaurar predefinições", IDC_FOLDER_OPTIONS_RESTORE, 167, 178, 90, 14, WS_TABSTOP END -IDD_FOLDER_OPTIONS_VIEW DIALOGEX 0, 0, 274, 220 +IDD_FOLDER_OPTIONS_VIEW DIALOGEX 0, 0, 264, 220 STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Ver" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - GROUPBOX "Vistas das Pastas", -1, 7, 10, 259, 60 + GROUPBOX "Vistas das Pastas", -1, 7, 10, 249, 60 ICON IDI_SHELL_PROGRAMS_FOLDER2, IDC_STATIC, 14, 20, 21, 20 LTEXT "Pode aplicar a todas as pastas, a vista (tal como ""Detalhes"" ou ""Mosaico"") que está a utilizar nesta pasta.", -1, 40, 20, 213, 20 PUSHBUTTON "Aplicar a t&odas as Pastas", IDC_VIEW_APPLY_TO_ALL, 15, 50, 115, 14, WS_TABSTOP - PUSHBUTTON "&Reiniciar todas as Pastas", IDC_VIEW_RESET_ALL, 135, 50, 125, 14, WS_TABSTOP + PUSHBUTTON "&Reiniciar todas as Pastas", IDC_VIEW_RESET_ALL, 135, 50, 115, 14, WS_TABSTOP LTEXT "Definições avançadas:", -1, 7, 80, 100, 10 - CONTROL "", IDC_VIEW_TREEVIEW, "SysTreeView32", WS_BORDER | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | TVS_DISABLEDRAGDROP | TVS_LINESATROOT, 7, 90, 259, 111 - PUSHBUTTON "Restaurar &predefinições", IDC_VIEW_RESTORE_DEFAULTS, 177, 204, 90, 14, WS_TABSTOP + CONTROL "", IDC_VIEW_TREEVIEW, "SysTreeView32", WS_BORDER | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | TVS_DISABLEDRAGDROP | TVS_LINESATROOT, 7, 90, 249, 111 + PUSHBUTTON "Restaurar &predefinições", IDC_VIEW_RESTORE_DEFAULTS, 167, 204, 90, 14, WS_TABSTOP END -IDD_FOLDER_OPTIONS_FILETYPES DIALOGEX 0, 0, 274, 220 +IDD_FOLDER_OPTIONS_FILETYPES DIALOGEX 0, 0, 264, 220 STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Tipos de Ficheiro" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN LTEXT "&Tipos de ficheiro registados:", -1, 7, 10, 180, 10 - CONTROL "", IDC_FILETYPES_LISTVIEW, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 7, 20, 259, 99 + CONTROL "", IDC_FILETYPES_LISTVIEW, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 99 PUSHBUTTON "&Novo...", IDC_FILETYPES_NEW, 140, 123, 55, 14, WS_TABSTOP - PUSHBUTTON "&Eliminar...", IDC_FILETYPES_DELETE, 200, 123, 65, 14, WS_TABSTOP - GROUPBOX "Detalhes para a extensão '%s'", IDC_FILETYPES_DETAILS_GROUPBOX, 7, 143, 259, 70 + PUSHBUTTON "&Eliminar...", IDC_FILETYPES_DELETE, 200, 123, 55, 14, WS_TABSTOP + GROUPBOX "Detalhes para a extensão '%s'", IDC_FILETYPES_DETAILS_GROUPBOX, 7, 143, 249, 70 LTEXT "Abre com:", -1, 12, 153, 40, 10 CONTROL "", IDC_FILETYPES_ICON, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 85, 153, 10, 10 LTEXT "", IDC_FILETYPES_APPNAME, 100, 153, 80, 10 - PUSHBUTTON "&Alterar...", IDC_FILETYPES_CHANGE, 200, 153, 60, 14, WS_TABSTOP + PUSHBUTTON "&Alterar...", IDC_FILETYPES_CHANGE, 200, 153, 50, 14, WS_TABSTOP LTEXT "", IDC_FILETYPES_DESCRIPTION, 12, 168, 160, 40 - PUSHBUTTON "A&vançadas...", IDC_FILETYPES_ADVANCED, 200, 188, 60, 14, WS_TABSTOP + PUSHBUTTON "A&vançadas...", IDC_FILETYPES_ADVANCED, 200, 188, 50, 14, WS_TABSTOP END IDD_CONFIRM_FILE_REPLACE DIALOGEX 0, 0, 282, 143 @@ -719,7 +719,7 @@ BEGIN GROUPBOX "Icones", IDC_STATIC, 5, 165, 230, 50, WS_TABSTOP LTEXT "Para todas as vistas, excepto miniaturas, pode alterar o ícone padrão 'pasta' para outro ícone.", IDC_STATIC, 15, 175, 210, 25 ICON 0, IDC_FOLDERCUST_ICON, 175, 194, 32, 30 - PUSHBUTTON "Alterar &icone.", IDC_FOLDERCUST_CHANGE_ICON, 15, 195, 75, 15 + PUSHBUTTON "Alterar &icone...", IDC_FOLDERCUST_CHANGE_ICON, 15, 195, 75, 15 END IDD_LINK_PROBLEM DIALOGEX 0, 0, 250, 140 diff --git a/dll/win32/shell32/lang/ro-RO.rc b/dll/win32/shell32/lang/ro-RO.rc index 6b1363f8e43..8d4ead4b17d 100644 --- a/dll/win32/shell32/lang/ro-RO.rc +++ b/dll/win32/shell32/lang/ro-RO.rc @@ -130,7 +130,7 @@ BEGIN DEFPUSHBUTTON "&Da", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "D&a pentru tot", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "&Nu", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "Revocare", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Revocare", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/ru-RU.rc b/dll/win32/shell32/lang/ru-RU.rc index cb0e3c62d4a..564937469ee 100644 --- a/dll/win32/shell32/lang/ru-RU.rc +++ b/dll/win32/shell32/lang/ru-RU.rc @@ -131,7 +131,7 @@ BEGIN DEFPUSHBUTTON "&Да", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Д&а Ð´Ð»Ñ Ð²Ñех", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "&Ðет", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "&Отмена", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Отмена", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/sk-SK.rc b/dll/win32/shell32/lang/sk-SK.rc index 7d7050d14a5..86514bc3c75 100644 --- a/dll/win32/shell32/lang/sk-SK.rc +++ b/dll/win32/shell32/lang/sk-SK.rc @@ -122,7 +122,7 @@ BEGIN DEFPUSHBUTTON "Ãn&o", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Ãno pre &vÅ¡etky", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "&Nie", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "&ZruÅ¡iÅ¥", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "ZruÅ¡iÅ¥", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/sl-SI.rc b/dll/win32/shell32/lang/sl-SI.rc index ecc4150de92..bacc7e808ff 100644 --- a/dll/win32/shell32/lang/sl-SI.rc +++ b/dll/win32/shell32/lang/sl-SI.rc @@ -122,7 +122,7 @@ BEGIN DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Yes to &all", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/sq-AL.rc b/dll/win32/shell32/lang/sq-AL.rc index 30f2afa860a..20b039b0221 100644 --- a/dll/win32/shell32/lang/sq-AL.rc +++ b/dll/win32/shell32/lang/sq-AL.rc @@ -127,9 +127,9 @@ CAPTION "Meszhe" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Po", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Po për T'gjitha", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP + PUSHBUTTON "Po për T'gjitha", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP //FIXME: accelerator missing PUSHBUTTON "&Jo", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "&Anulo", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Anulo", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END @@ -188,7 +188,7 @@ BEGIN LTEXT "", -1, 8, 31, 223, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE LTEXT "Tipi Objektivit:", IDC_SHORTCUT_TYPE, 8, 38, 68, 10 EDITTEXT IDC_SHORTCUT_TYPE_EDIT, 79, 37, 150, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - LTEXT "Vendndodhja ObjektivitTarget location:", IDC_SHORTCUT_LOCATION, 8, 55, 68, 10 + LTEXT "Vendndodhja ObjektivitTarget location:", IDC_SHORTCUT_LOCATION, 8, 55, 68, 10 //FIXME: That string is duplicated sq + en and much too long. Even when keeping just "Vendndodhja Objektivit" it would still be too long. Provide something shorter! EDITTEXT IDC_SHORTCUT_LOCATION_EDIT, 79, 53, 150, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL LTEXT "&Objektivi:", IDC_SHORTCUT_TARGET, 8, 71, 68, 10 EDITTEXT IDC_SHORTCUT_TARGET_TEXT, 79, 69, 150, 14, ES_AUTOHSCROLL diff --git a/dll/win32/shell32/lang/sv-SE.rc b/dll/win32/shell32/lang/sv-SE.rc index 0ef595afa00..87a177cb7fb 100644 --- a/dll/win32/shell32/lang/sv-SE.rc +++ b/dll/win32/shell32/lang/sv-SE.rc @@ -37,7 +37,7 @@ BEGIN MENUITEM "Uppdatera", FCIDM_SHVIEW_REFRESH MENUITEM "", -1, MFT_SEPARATOR MENUITEM "Klistra in", FCIDM_SHVIEW_INSERT - MENUITEM "Klistra in som genväg", FCIDM_SHVIEW_INSERTLINK + MENUITEM "Klistra in som genväg", FCIDM_SHVIEW_INSERTLINK //FIXME: should we use "Klistra in &genväg" here to sync it with the same string ~10 lines below? ATTENTION: There is also a IDM_CREATELINK and IDS_CREATELINK "Skapa &genväg" (not sure whether those can happen in the same menu or not) END END @@ -46,9 +46,9 @@ MENU_003 MENU BEGIN MENUITEM "&Ã…ngra\tCtrl+Z", FCIDM_SHVIEW_UNDO MENUITEM SEPARATOR - MENUITEM "Kl&ipp ut\tCtrl+X", FCIDM_SHVIEW_CUT - MENUITEM "&Kopiera\tCtrl+C", FCIDM_SHVIEW_COPY - MENUITEM "&Klistra in\tCtrl+V", FCIDM_SHVIEW_INSERT + MENUITEM "Kl&ipp ut\tCtrl+X", FCIDM_SHVIEW_CUT //FIXME: double-check this accelerator on Windows! Should it be &t maybe? + MENUITEM "&Kopiera\tCtrl+C", FCIDM_SHVIEW_COPY //FIXME: accelerator collision &K + MENUITEM "&Klistra in\tCtrl+V", FCIDM_SHVIEW_INSERT //FIXME: accelerator collision &K MENUITEM "Klistra in &genväg", FCIDM_SHVIEW_INSERTLINK MENUITEM SEPARATOR MENUITEM "Kopiera till &mapp...", FCIDM_SHVIEW_COPYTO @@ -64,15 +64,15 @@ BEGIN POPUP "" BEGIN MENUITEM SEPARATOR - MENUITEM "K&lipp ut", IDM_CUT + MENUITEM "K&lipp ut", IDM_CUT //FIXME: double-check this accelerator on Windows! Should it be &t maybe? (which is currently used by IDM_DELETE). Don't forget to keep in sync with IDS_CUT! MENUITEM "&Kopiera", IDM_COPY MENUITEM "Paste", IDM_INSERT MENUITEM SEPARATOR MENUITEM "Skapa &genväg", IDM_CREATELINK - MENUITEM "&Ta bort", IDM_DELETE - MENUITEM "&Byt namn", IDM_RENAME + MENUITEM "&Ta bort", IDM_DELETE //FIXME: double-check this accelerator on Windows! Don't forget to keep in sync with IDS_DELETE + MENUITEM "&Byt namn", IDM_RENAME //FIXME: sync that with IDS_RENAME "Byt namn". Either both should have an accelerator or both not. It's up to you. MENUITEM SEPARATOR - MENUITEM "&Egenskaper", IDM_PROPERTIES + MENUITEM "&Egenskaper", IDM_PROPERTIES //FIXME: sync that with IDS_PROPERTIES regarding the accelerator. Either &E or none, it's your choice! END END @@ -122,7 +122,7 @@ BEGIN DEFPUSHBUTTON "&Ja", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Ja till &alla", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "&Nej", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "&Avbryt", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Avbryt", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END @@ -396,7 +396,7 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 LTEXT "Välj ett program att öppna den här filen med:", -1, 44, 12, 211, 10 - LTEXT "Fil: ", 14001, 44, 25, 188, 20 + LTEXT "Fil: ", 14001, 44, 25, 188, 20 GROUPBOX "&Program", -1, 7, 42, 249, 187 CONTROL "Program", 14002, WC_TREEVIEW, WS_BORDER | WS_TABSTOP | TVS_SHOWSELALWAYS, 16 ,57, 230, 130 AUTOCHECKBOX "&Använd alltid the valda programmet för att öppna den här filtypen", 14003, 16, 193, 232, 10 @@ -786,9 +786,9 @@ BEGIN IDS_OPEN "Öppna" IDS_CREATELINK "Skapa &genväg" IDS_COPY "&Kopiera" - IDS_DELETE "Ta bort" + IDS_DELETE "Ta bort" //FIXME: double-check this accelerator on Windows! Don't forget to keep in sync with IDM_DELETE IDS_PROPERTIES "Egenskaper" - IDS_CUT "K&lipp ut" + IDS_CUT "K&lipp ut" //FIXME: double-check this accelerator on Windows! Should it be &t maybe? (which is currently used by IDM_DELETE). Don't forget to keep in sync with IDS_CUT! IDS_RESTORE "Ã…terställ" IDS_FORMATDRIVE "Formatera..." IDS_RENAME "Byt namn" diff --git a/dll/win32/shell32/lang/tr-TR.rc b/dll/win32/shell32/lang/tr-TR.rc index f7d02c283f5..9b160c267f9 100644 --- a/dll/win32/shell32/lang/tr-TR.rc +++ b/dll/win32/shell32/lang/tr-TR.rc @@ -131,7 +131,7 @@ BEGIN DEFPUSHBUTTON "&Evet", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "&Tümüne Evet", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "&Hayır", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "Ä°ptal", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "Ä°ptal", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/uk-UA.rc b/dll/win32/shell32/lang/uk-UA.rc index b4fc7e69f8b..3ae5c4935fc 100644 --- a/dll/win32/shell32/lang/uk-UA.rc +++ b/dll/win32/shell32/lang/uk-UA.rc @@ -122,7 +122,7 @@ BEGIN DEFPUSHBUTTON "&Так", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Так Ð´Ð»Ñ &вÑÑ–Ñ…", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "&ÐÑ–", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "&СкаÑувати", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "СкаÑувати", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/zh-CN.rc b/dll/win32/shell32/lang/zh-CN.rc index 4d0602552fe..307a67665b8 100644 --- a/dll/win32/shell32/lang/zh-CN.rc +++ b/dll/win32/shell32/lang/zh-CN.rc @@ -132,7 +132,7 @@ BEGIN DEFPUSHBUTTON "是(&Y)", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "全是(&A)", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "å¦(&N)", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "å–消(&C)", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "å–消", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/zh-HK.rc b/dll/win32/shell32/lang/zh-HK.rc index e4a1729bdc2..626362a34b9 100644 --- a/dll/win32/shell32/lang/zh-HK.rc +++ b/dll/win32/shell32/lang/zh-HK.rc @@ -130,7 +130,7 @@ BEGIN DEFPUSHBUTTON "是(&Y)", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "全部皆是(&A)", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "å¦(&N)", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "å–消(&C)", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "å–消", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END diff --git a/dll/win32/shell32/lang/zh-TW.rc b/dll/win32/shell32/lang/zh-TW.rc index c619f8bfe79..766e6cb534a 100644 --- a/dll/win32/shell32/lang/zh-TW.rc +++ b/dll/win32/shell32/lang/zh-TW.rc @@ -131,7 +131,7 @@ BEGIN DEFPUSHBUTTON "是(&Y)", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "全部皆是(&A)", IDC_YESTOALL, 92, 69, 65, 14, WS_TABSTOP PUSHBUTTON "å¦(&N)", IDNO, 162, 69, 53, 14, WS_TABSTOP - PUSHBUTTON "å–消(&C)", IDCANCEL, 220, 69, 53, 14, WS_TABSTOP + PUSHBUTTON "å–消", IDCANCEL, 220, 69, 53, 14 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END From 8204c6e2fd251a536658f0611ee54a1e45e9d627 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Wed, 22 May 2024 20:33:26 +0900 Subject: [PATCH 170/182] [SHELL32] CDirectoryWatcher: Check if window is alive (#6915) Kill the zombie watchers for system performance. JIRA issue: CORE-13950 - Add HWND parameter to CDirectoryWatcher::Create. - Check whether the HWND is alive at CDirectoryWatcher::IsDead. --- .../shelldesktop/CChangeNotifyServer.cpp | 3 +- .../shelldesktop/CDirectoryWatcher.cpp | 30 +++++++++++-------- .../shell32/shelldesktop/CDirectoryWatcher.h | 7 +++-- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/dll/win32/shell32/shelldesktop/CChangeNotifyServer.cpp b/dll/win32/shell32/shelldesktop/CChangeNotifyServer.cpp index 24af7f617f7..1d94498f795 100644 --- a/dll/win32/shell32/shelldesktop/CChangeNotifyServer.cpp +++ b/dll/win32/shell32/shelldesktop/CChangeNotifyServer.cpp @@ -199,7 +199,8 @@ CreateDirectoryWatcherFromRegEntry(LPREGENTRY pRegEntry) return NULL; // create a CDirectoryWatcher - CDirectoryWatcher *pDirectoryWatcher = CDirectoryWatcher::Create(szPath, pRegEntry->fRecursive); + CDirectoryWatcher *pDirectoryWatcher = + CDirectoryWatcher::Create(pRegEntry->hwnd, szPath, pRegEntry->fRecursive); if (pDirectoryWatcher == NULL) return NULL; diff --git a/dll/win32/shell32/shelldesktop/CDirectoryWatcher.cpp b/dll/win32/shell32/shelldesktop/CDirectoryWatcher.cpp index d5056a64faa..1bb7d80cb30 100644 --- a/dll/win32/shell32/shelldesktop/CDirectoryWatcher.cpp +++ b/dll/win32/shell32/shelldesktop/CDirectoryWatcher.cpp @@ -68,17 +68,18 @@ static void NTAPI _RequestAllTerminationAPC(ULONG_PTR Parameter) s_hThreadAPC = NULL; } -CDirectoryWatcher::CDirectoryWatcher(LPCWSTR pszDirectoryPath, BOOL fSubTree) - : m_fDead(FALSE) +CDirectoryWatcher::CDirectoryWatcher(HWND hNotifyWnd, LPCWSTR pszDirectoryPath, BOOL fSubTree) + : m_hNotifyWnd(hNotifyWnd) + , m_fDead(FALSE) , m_fRecursive(fSubTree) , m_dir_list(pszDirectoryPath, fSubTree) { - TRACE("CDirectoryWatcher::CDirectoryWatcher: %p, '%S'\n", this, pszDirectoryPath); + TRACE("%p, '%S'\n", this, pszDirectoryPath); - lstrcpynW(m_szDirectoryPath, pszDirectoryPath, MAX_PATH); + GetFullPathNameW(pszDirectoryPath, _countof(m_szDirectoryPath), m_szDirectoryPath, NULL); // open the directory to watch changes (for ReadDirectoryChangesW) - m_hDirectory = CreateFileW(pszDirectoryPath, FILE_LIST_DIRECTORY, + m_hDirectory = CreateFileW(m_szDirectoryPath, FILE_LIST_DIRECTORY, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED, @@ -86,12 +87,10 @@ CDirectoryWatcher::CDirectoryWatcher(LPCWSTR pszDirectoryPath, BOOL fSubTree) } /*static*/ CDirectoryWatcher * -CDirectoryWatcher::Create(LPCWSTR pszDirectoryPath, BOOL fSubTree) +CDirectoryWatcher::Create(HWND hNotifyWnd, LPCWSTR pszDirectoryPath, BOOL fSubTree) { - WCHAR szFullPath[MAX_PATH]; - GetFullPathNameW(pszDirectoryPath, _countof(szFullPath), szFullPath, NULL); - - CDirectoryWatcher *pDirectoryWatcher = new CDirectoryWatcher(szFullPath, fSubTree); + CDirectoryWatcher *pDirectoryWatcher = + new CDirectoryWatcher(hNotifyWnd, pszDirectoryPath, fSubTree); if (pDirectoryWatcher->m_hDirectory == INVALID_HANDLE_VALUE) { ERR("CreateFileW failed\n"); @@ -103,7 +102,7 @@ CDirectoryWatcher::Create(LPCWSTR pszDirectoryPath, BOOL fSubTree) CDirectoryWatcher::~CDirectoryWatcher() { - TRACE("CDirectoryWatcher::~CDirectoryWatcher: %p, '%S'\n", this, m_szDirectoryPath); + TRACE("%p, '%S'\n", this, m_szDirectoryPath); if (m_hDirectory != INVALID_HANDLE_VALUE) CloseHandle(m_hDirectory); @@ -385,10 +384,17 @@ void CDirectoryWatcher::QuitWatching() assert(this != NULL); m_fDead = TRUE; + m_hNotifyWnd = NULL; CancelIo(m_hDirectory); } -BOOL CDirectoryWatcher::IsDead() const +BOOL CDirectoryWatcher::IsDead() { + if (m_hNotifyWnd && !::IsWindow(m_hNotifyWnd)) + { + m_hNotifyWnd = NULL; + m_fDead = TRUE; + CancelIo(m_hDirectory); + } return m_fDead; } diff --git a/dll/win32/shell32/shelldesktop/CDirectoryWatcher.h b/dll/win32/shell32/shelldesktop/CDirectoryWatcher.h index a8789b2fdf6..e2733bc3ce2 100644 --- a/dll/win32/shell32/shelldesktop/CDirectoryWatcher.h +++ b/dll/win32/shell32/shelldesktop/CDirectoryWatcher.h @@ -17,11 +17,11 @@ class CDirectoryWatcher HANDLE m_hDirectory; WCHAR m_szDirectoryPath[MAX_PATH]; - static CDirectoryWatcher *Create(LPCWSTR pszDirectoryPath, BOOL fSubTree); + static CDirectoryWatcher *Create(HWND hNotifyWnd, LPCWSTR pszDirectoryPath, BOOL fSubTree); static void RequestAllWatchersTermination(); ~CDirectoryWatcher(); - BOOL IsDead() const; + BOOL IsDead(); BOOL RestartWatching(); void QuitWatching(); BOOL RequestAddWatcher(); @@ -29,6 +29,7 @@ class CDirectoryWatcher void ReadCompletion(DWORD dwErrorCode, DWORD dwNumberOfBytesTransfered); protected: + HWND m_hNotifyWnd; BOOL m_fDead; BOOL m_fRecursive; CDirectoryList m_dir_list; @@ -36,5 +37,5 @@ class CDirectoryWatcher BOOL CreateAPCThread(); void ProcessNotification(); - CDirectoryWatcher(LPCWSTR pszDirectoryPath, BOOL fSubTree); + CDirectoryWatcher(HWND hNotifyWnd, LPCWSTR pszDirectoryPath, BOOL fSubTree); }; From bc2621812fdbdfaeb1d7d27b5b4d9963b6b90993 Mon Sep 17 00:00:00 2001 From: Joachim Henze Date: Wed, 22 May 2024 15:39:13 +0200 Subject: [PATCH 171/182] [SHELL32] Strip undesired format-string (#6924) A trivial change. An addendum to 4ff1aa5fac01534b7e11c0b78923f55a773344cb (SVN r30784) where el-GR.rc was forgotten. --- dll/win32/shell32/lang/el-GR.rc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dll/win32/shell32/lang/el-GR.rc b/dll/win32/shell32/lang/el-GR.rc index e284ab7751d..6d1de22d191 100644 --- a/dll/win32/shell32/lang/el-GR.rc +++ b/dll/win32/shell32/lang/el-GR.rc @@ -396,7 +396,7 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 LTEXT "Επιλέξτε το Ï€ÏόγÏαμμα με το οποίο θέλετε να ανοίξετε αυτό το αÏχείο:", -1, 44, 12, 211, 10 - LTEXT "ΑÏχείο: %s", 14001, 44, 25, 188, 20 + LTEXT "ΑÏχείο: ", 14001, 44, 25, 188, 20 GROUPBOX "ΠÏογÏάμματα", -1, 7, 42, 249, 187 CONTROL "Programs", 14002, WC_TREEVIEW, WS_BORDER | WS_TABSTOP | TVS_SHOWSELALWAYS, 16 ,57, 230, 130 AUTOCHECKBOX "&Άνοιγμα Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… είδους αÏχείου, πάντα με το επιλεγμένο Ï€ÏόγÏαμμα", 14003, 16, 193, 232, 10 From 60f4493a68bb9235faf247901de81f2a9c10517b Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 19 May 2024 19:17:52 +0300 Subject: [PATCH 172/182] [SPEC2DEF] Implement support for import symbol aliases --- sdk/cmake/msvc.cmake | 11 ++-- sdk/tools/spec2def/spec2def.c | 111 ++++++++++++++++++++++++++++++++-- 2 files changed, 113 insertions(+), 9 deletions(-) diff --git a/sdk/cmake/msvc.cmake b/sdk/cmake/msvc.cmake index 8357316a112..be080bf40dd 100644 --- a/sdk/cmake/msvc.cmake +++ b/sdk/cmake/msvc.cmake @@ -317,11 +317,12 @@ function(generate_import_lib _libname _dllname _spec_file __version_arg) set(_def_file ${CMAKE_CURRENT_BINARY_DIR}/${_libname}_implib.def) set(_asm_stubs_file ${CMAKE_CURRENT_BINARY_DIR}/${_libname}_stubs.asm) + set(_asm_impalias_file ${CMAKE_CURRENT_BINARY_DIR}/${_libname}_impalias.asm) - # Generate the def and asm stub files + # Generate the def, asm stub and alias files add_custom_command( - OUTPUT ${_asm_stubs_file} ${_def_file} - COMMAND native-spec2def --ms ${__version_arg} -a=${SPEC2DEF_ARCH} --implib -n=${_dllname} -d=${_def_file} -l=${_asm_stubs_file} ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} + OUTPUT ${_asm_stubs_file} ${_def_file} ${_asm_impalias_file} + COMMAND native-spec2def --ms ${__version_arg} -a=${SPEC2DEF_ARCH} --implib -n=${_dllname} -d=${_def_file} -l=${_asm_stubs_file} -i=${_asm_impalias_file} ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} native-spec2def) # Compile the generated asm stub file @@ -351,7 +352,7 @@ function(generate_import_lib _libname _dllname _spec_file __version_arg) # By giving the import lib as an object input, LIB extracts the relevant object files and make a new library. # This allows us to treat the implib as a regular static library set_source_files_properties(${_libfile_tmp} PROPERTIES EXTERNAL_OBJECT TRUE) - add_library(${_libname} STATIC ${_libfile_tmp}) + add_library(${_libname} STATIC ${_libfile_tmp} ${_asm_impalias_file}) set_target_properties(${_libname} PROPERTIES LINKER_LANGUAGE "C") endfunction() @@ -364,7 +365,7 @@ if(ARCH STREQUAL "amd64") elseif(ARCH STREQUAL "arm") set(SPEC2DEF_ARCH arm) elseif(ARCH STREQUAL "arm64") - add_definitions(/D__arm64__) + add_definitions(/D__arm64__) set(SPEC2DEF_ARCH arm64) else() set(SPEC2DEF_ARCH i386) diff --git a/sdk/tools/spec2def/spec2def.c b/sdk/tools/spec2def/spec2def.c index 2eae6bb0170..55955ee605e 100644 --- a/sdk/tools/spec2def/spec2def.c +++ b/sdk/tools/spec2def/spec2def.c @@ -85,6 +85,7 @@ enum FL_NORELAY = 16, FL_RET64 = 32, FL_REGISTER = 64, + FL_IMPSYM = 128, }; enum @@ -612,6 +613,11 @@ PrintName(FILE *fileDest, EXPORT *pexp, PSTRING pstr, int fDeco) fprintf(fileDest, "%.*s@%d", nNameLength, pcName, pexp->nStackBytes); } } + else if (fDeco && (pexp->nCallingConvention == CC_CDECL) && gbMSComp) + { + /* Print with cdecl decoration */ + fprintf(fileDest, "_%.*s", nNameLength, pcName); + } else { /* Print the undecorated function name */ @@ -685,7 +691,7 @@ OutputLine_def_GCC(FILE *fileDest, EXPORT *pexp) DbgPrint("Got redirect '%.*s'\n", pexp->strTarget.len, pexp->strTarget.buf); /* print the target name, don't decorate if it is external */ - fprintf(fileDest, "="); + fprintf(fileDest, pexp->uFlags & FL_IMPSYM ? "==" : "="); PrintName(fileDest, pexp, &pexp->strTarget, !fIsExternal); } else if (((pexp->uFlags & FL_STUB) || (pexp->nCallingConvention == CC_STUB)) && @@ -747,6 +753,17 @@ OutputLine_def(FILE *fileDest, EXPORT *pexp) return 1; } + /* Handle import symbols */ + if (pexp->uFlags & FL_IMPSYM) + { + /* Skip these, if we are not creating an import lib, or if this is MS */ + if (!gbImportLib || gbMSComp) + { + DbgPrint("OutputLine_def: skipping import symbol '%.*s'...\n", pexp->strName.len, pexp->strName.buf); + return 1; + } + } + /* For MS linker, forwarded externs are managed via #pragma comment(linker,"/export:_data=org.data,DATA") */ if (gbMSComp && !gbImportLib && (pexp->nCallingConvention == CC_EXTERN) && (pexp->strTarget.buf != NULL) && !!ScanToken(pexp->strTarget.buf, '.')) @@ -790,6 +807,54 @@ OutputLine_def(FILE *fileDest, EXPORT *pexp) return 1; } +void +PrintNameOrImpName(FILE *fileDest, EXPORT *pexp, PSTRING pstr, int fDeco, int fImp) +{ + if (fImp) + { + fprintf(fileDest, "__imp_"); + } + + PrintName(fileDest, pexp, pstr, fDeco); +} + +void +OutputAlias(FILE *fileDest, EXPORT *pexp, int fImp) +{ + if ((giArch == ARCH_ARM) || (giArch == ARCH_ARM64)) + { + fprintf(fileDest, " IMPORT "); + PrintNameOrImpName(fileDest, pexp, &pexp->strName, 1, fImp); + fprintf(fileDest, ", WEAK "); + PrintNameOrImpName(fileDest, pexp, &pexp->strTarget, 1, fImp); + fprintf(fileDest, "\n"); + } + else + { + fprintf(fileDest, " EXTERN "); + PrintNameOrImpName(fileDest, pexp, &pexp->strTarget, 1, fImp); + fprintf(fileDest, ":PROC\n ALIAS <"); + PrintNameOrImpName(fileDest, pexp, &pexp->strName, 1, fImp); + fprintf(fileDest, "> = <"); + PrintNameOrImpName(fileDest, pexp, &pexp->strTarget, 1, fImp); + fprintf(fileDest, ">\n"); + } +} + +int +OutputLine_implib_asm(FILE *fileDest, EXPORT *pexp) +{ + if ((pexp->uFlags & FL_IMPSYM) == 0) + { + return 1; + } + + OutputAlias(fileDest, pexp, 0); + OutputAlias(fileDest, pexp, 1); + + return 1; +} + void Fatalv( const char* filename, @@ -1090,6 +1155,10 @@ ParseFile(char* pcStart, FILE *fileDest, unsigned *cExports) { exp.uFlags |= FL_ORDINAL | FL_NONAME; } + else if (CompareToken(pc, "-impsym")) + { + exp.uFlags |= FL_IMPSYM; + } else if (CompareToken(pc, "-ordinal")) { exp.uFlags |= FL_ORDINAL; @@ -1298,6 +1367,12 @@ ParseFile(char* pcStart, FILE *fileDest, unsigned *cExports) Fatal(pszSourceFileName, nLine, pcLine, pc, 0, "Ordinal export without ordinal"); } + /* Check for import symbol without target */ + if ((exp.uFlags & FL_IMPSYM) && (exp.strTarget.buf == NULL)) + { + Fatal(pszSourceFileName, nLine, pcLine, pc, 1, "Import symbol without target"); + } + /* * Check for special handling of OLE exports, only when MSVC * is not used, since otherwise this is handled by MS LINK.EXE. @@ -1395,6 +1470,7 @@ void usage(void) " -l= generate an asm lib stub\n" " -d= generate a def file\n" " -s= generate a stub file\n" + " -i= generate an import alias file\n" " --ms MSVC compatibility\n" " -n= name of the dll\n" " --version= Sets the version to create exports for\n" @@ -1408,6 +1484,7 @@ int main(int argc, char *argv[]) { size_t nFileSize; char *pszSource, *pszDefFileName = NULL, *pszStubFileName = NULL, *pszLibStubName = NULL; + char *pszImpLibAliasFileName = NULL; const char* pszVersionOption = "--version=0x"; char achDllName[40]; FILE *file; @@ -1441,6 +1518,10 @@ int main(int argc, char *argv[]) { pszStubFileName = argv[i] + 3; } + else if (argv[i][1] == 'i' && argv[i][2] == '=') + { + pszImpLibAliasFileName = argv[i] + 3; + } else if (argv[i][1] == 'n' && argv[i][2] == '=') { pszDllName = argv[i] + 3; @@ -1574,7 +1655,7 @@ int main(int argc, char *argv[]) file = fopen(pszDefFileName, "w"); if (!file) { - fprintf(stderr, "error: could not open output file %s\n", argv[i + 1]); + fprintf(stderr, "error: could not open output file %s\n", pszDefFileName); return -5; } @@ -1595,7 +1676,7 @@ int main(int argc, char *argv[]) file = fopen(pszStubFileName, "w"); if (!file) { - fprintf(stderr, "error: could not open output file %s\n", argv[i + 1]); + fprintf(stderr, "error: could not open output file %s\n", pszStubFileName); return -5; } @@ -1616,7 +1697,7 @@ int main(int argc, char *argv[]) file = fopen(pszLibStubName, "w"); if (!file) { - fprintf(stderr, "error: could not open output file %s\n", argv[i + 1]); + fprintf(stderr, "error: could not open output file %s\n", pszLibStubName); return -5; } @@ -1632,6 +1713,28 @@ int main(int argc, char *argv[]) fclose(file); } + if (pszImpLibAliasFileName) + { + /* Open output file */ + file = fopen(pszImpLibAliasFileName, "w"); + if (!file) + { + fprintf(stderr, "error: could not open output file %s\n", pszImpLibAliasFileName); + return -5; + } + + OutputHeader_asmstub(file, pszDllName); + + for (i = 0; i < cExports; i++) + { + if (pexports[i].bVersionIncluded) + OutputLine_implib_asm(file, &pexports[i]); + } + + fprintf(file, "\n END\n"); + fclose(file); + } + free(pexports); return 0; From e0495079cbb0be853e7097fdcb778b00961bc7bf Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 19 May 2024 23:35:32 +0300 Subject: [PATCH 173/182] [MSVCRT][NTDLL][NTOS] Add import aliases for _swprintf and _vswprintf --- dll/ntdll/def/ntdll.spec | 1 + dll/win32/msvcrt/msvcrt.spec | 2 ++ ntoskrnl/ntoskrnl.spec | 1 + 3 files changed, 4 insertions(+) diff --git a/dll/ntdll/def/ntdll.spec b/dll/ntdll/def/ntdll.spec index 6a98679791b..5b173acb659 100644 --- a/dll/ntdll/def/ntdll.spec +++ b/dll/ntdll/def/ntdll.spec @@ -1801,6 +1801,7 @@ @ cdecl _strlwr(str) @ cdecl _strnicmp(str str long) @ cdecl _strupr(str) +@ cdecl -version=0x400-0x502 -impsym _swprintf() swprintf # Compatibility for pre NT6 @ cdecl -version=0x600+ _swprintf(ptr str) @ cdecl -version=0x502 _tolower(long) @ cdecl -version=0x502 _toupper(long) diff --git a/dll/win32/msvcrt/msvcrt.spec b/dll/win32/msvcrt/msvcrt.spec index b6c10d0f308..605e783ccb7 100644 --- a/dll/win32/msvcrt/msvcrt.spec +++ b/dll/win32/msvcrt/msvcrt.spec @@ -1035,6 +1035,7 @@ @ cdecl -version=0x600+ _strupr_s_l(str long ptr) @ cdecl -version=0x600+ _strxfrm_l(ptr str long ptr) @ cdecl _swab(str str long) +@ cdecl -version=0x400-0x502 -impsym _swprintf(ptr str) swprintf # Compatibility for pre NT6 @ cdecl -version=0x600+ _swprintf(ptr str) @ stub -version=0x600+ _swprintf_c @ stub -version=0x600+ _swprintf_c_l @@ -1122,6 +1123,7 @@ @ stub -version=0x600+ _vsprintf_p @ stub -version=0x600+ _vsprintf_p_l @ stub -version=0x600+ _vsprintf_s_l +@ cdecl -version=0x400-0x502 -impsym _vswprintf() vswprintf # Compatibility for pre NT6 @ stub -version=0x600+ _vswprintf @ stub -version=0x600+ _vswprintf_c @ stub -version=0x600+ _vswprintf_c_l diff --git a/ntoskrnl/ntoskrnl.spec b/ntoskrnl/ntoskrnl.spec index fe90fb7fdfd..4d5bf883c60 100644 --- a/ntoskrnl/ntoskrnl.spec +++ b/ntoskrnl/ntoskrnl.spec @@ -1571,6 +1571,7 @@ @ cdecl _strrev() @ cdecl _strset() @ cdecl _strupr() +@ cdecl -version=0x400-0x502 -impsym _swprintf() swprintf # Compatibility with pre NT6 @ cdecl _vsnprintf() @ cdecl _vsnwprintf() @ cdecl _wcsicmp() From 677f190f4cef0265747a3f73766ad2a72b52ff1e Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 20 May 2024 23:12:06 +0300 Subject: [PATCH 174/182] [CMAKE] Stop setting the C standard on modules Global standard is C99. --- dll/keyboard/CMakeLists.txt | 3 --- drivers/filesystems/cdfs/CMakeLists.txt | 1 - drivers/filesystems/ext2/CMakeLists.txt | 1 - drivers/filesystems/nfs/CMakeLists.txt | 2 -- modules/rostests/apitests/ntdll/CMakeLists.txt | 3 --- modules/rostests/apitests/rtl/CMakeLists.txt | 3 --- 6 files changed, 13 deletions(-) diff --git a/dll/keyboard/CMakeLists.txt b/dll/keyboard/CMakeLists.txt index 4a89c297d38..9b6638c8f94 100644 --- a/dll/keyboard/CMakeLists.txt +++ b/dll/keyboard/CMakeLists.txt @@ -103,9 +103,6 @@ foreach(_keyboard_layout ${_keyboard_layouts}) else() # Use a custom linker script target_link_options(${_keyboard_layout} PRIVATE "-Wl,-T,${CMAKE_CURRENT_SOURCE_DIR}/kbdlayout.lds") - - # Avoid "universal character names are only valid in C++ and C99" error. - set_property(TARGET ${_keyboard_layout} PROPERTY C_STANDARD 99) endif() # dynamic analysis switches diff --git a/drivers/filesystems/cdfs/CMakeLists.txt b/drivers/filesystems/cdfs/CMakeLists.txt index f85cfea326f..5004828467b 100644 --- a/drivers/filesystems/cdfs/CMakeLists.txt +++ b/drivers/filesystems/cdfs/CMakeLists.txt @@ -36,7 +36,6 @@ add_library(cdfs MODULE ${SOURCE} cdfs.rc) set_module_type(cdfs kernelmodedriver) target_link_libraries(cdfs ${PSEH_LIB} memcmp) add_importlibs(cdfs ntoskrnl hal) -set_property(TARGET cdfs PROPERTY C_STANDARD 90) add_cd_file(TARGET cdfs DESTINATION reactos/system32/drivers NO_CAB FOR all) add_registry_inf(cdfs_reg.inf) diff --git a/drivers/filesystems/ext2/CMakeLists.txt b/drivers/filesystems/ext2/CMakeLists.txt index 4a79c51e139..e427a1580d3 100644 --- a/drivers/filesystems/ext2/CMakeLists.txt +++ b/drivers/filesystems/ext2/CMakeLists.txt @@ -111,7 +111,6 @@ target_link_libraries(ext2fs memcmp ${PSEH_LIB}) add_definitions(-D__KERNEL__ -D_CRT_NO_POSIX_ERROR_CODES) set_module_type(ext2fs kernelmodedriver) add_importlibs(ext2fs ntoskrnl hal) -set_property(TARGET ext2fs PROPERTY C_STANDARD 90) add_pch(ext2fs inc/ext2fs.h SOURCE) add_cd_file(TARGET ext2fs DESTINATION reactos/system32/drivers FOR all) diff --git a/drivers/filesystems/nfs/CMakeLists.txt b/drivers/filesystems/nfs/CMakeLists.txt index 9eb45900649..fcfb88e4295 100644 --- a/drivers/filesystems/nfs/CMakeLists.txt +++ b/drivers/filesystems/nfs/CMakeLists.txt @@ -22,7 +22,5 @@ if(CMAKE_C_COMPILER_ID STREQUAL "Clang") target_compile_options(nfs41_driver PRIVATE "-Wno-unused-value") endif() -set_property(TARGET nfs41_driver PROPERTY C_STANDARD 90) - add_cd_file(TARGET nfs41_driver DESTINATION reactos/system32/drivers FOR all) add_registry_inf(nfs41_reg.inf) diff --git a/modules/rostests/apitests/ntdll/CMakeLists.txt b/modules/rostests/apitests/ntdll/CMakeLists.txt index cc4adfac82f..9b3b4b1ddc1 100644 --- a/modules/rostests/apitests/ntdll/CMakeLists.txt +++ b/modules/rostests/apitests/ntdll/CMakeLists.txt @@ -138,9 +138,6 @@ add_dependencies(ntdll_apitest load_notifications) if(NOT MSVC) set_source_files_properties(RtlGetFullPathName_UstrEx.c PROPERTIES COMPILE_FLAGS "-Wno-format") - - # Avoid "universal character names are only valid in C++ and C99" error. - set_property(TARGET ntdll_apitest PROPERTY C_STANDARD 99) endif() add_rostests_file(TARGET ntdll_apitest) diff --git a/modules/rostests/apitests/rtl/CMakeLists.txt b/modules/rostests/apitests/rtl/CMakeLists.txt index 49d87415d1a..887a5eddd71 100644 --- a/modules/rostests/apitests/rtl/CMakeLists.txt +++ b/modules/rostests/apitests/rtl/CMakeLists.txt @@ -38,9 +38,6 @@ add_dependencies(rtl_test_lib asm) if(NOT MSVC) set_source_files_properties(RtlGetFullPathName_UstrEx.c PROPERTIES COMPILE_FLAGS "-Wno-format") - - # Avoid "universal character names are only valid in C++ and C99" error. - set_property(TARGET rtl_test_lib PROPERTY C_STANDARD 99) endif() # RTL tests with static linkage (called unittest, so it won't run in rosautotest) From 0b97a997d2157d101a820a39d97dd41e381c4664 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Bi=C8=99oc?= Date: Mon, 20 May 2024 16:11:49 +0200 Subject: [PATCH 175/182] [DDK] Add the GUID_DEVICE_FAN identifier This identifier will be used to regiser incoming ACPI fans with the I/O PnP manager from the ACPI driver. --- sdk/include/ddk/poclass.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sdk/include/ddk/poclass.h b/sdk/include/ddk/poclass.h index cf5a9c84404..ab4d4f7b8fa 100644 --- a/sdk/include/ddk/poclass.h +++ b/sdk/include/ddk/poclass.h @@ -50,6 +50,8 @@ DEFINE_GUID(GUID_DEVICE_SYS_BUTTON, DEFINE_GUID(GUID_DEVICE_THERMAL_ZONE, 0x4AFA3D51L, 0x74A7, 0x11d0, 0xbe, 0x5e, 0x00, 0xA0, 0xC9, 0x06, 0x28, 0x57); +DEFINE_GUID(GUID_DEVICE_FAN, + 0x05ecd13dL, 0x81da, 0x4a2a, 0x8a, 0x4c, 0x52, 0x4f, 0x23, 0xdd, 0x4d, 0xc9); #define IOCTL_GET_PROCESSOR_OBJ_INFO \ CTL_CODE(FILE_DEVICE_BATTERY, 0x60, METHOD_BUFFERED, FILE_READ_ACCESS) From f69e256376e939e63029c8d8be8b97eaa206eec0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Bi=C8=99oc?= Date: Mon, 20 May 2024 16:16:24 +0200 Subject: [PATCH 176/182] [ACPI] Register a device interface class with ACPI fans As the commit title says, the point of registering a device interface with ACPI fans is to receive incoming PnP notifications of incoming ACPI fan drivers so that the power manager can connect to them by creating a power device policies dedicated to them during power manager initialization. CORE-18969 --- drivers/bus/acpi/buspdo.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/bus/acpi/buspdo.c b/drivers/bus/acpi/buspdo.c index e91d09fecf5..16eff2250bd 100644 --- a/drivers/bus/acpi/buspdo.c +++ b/drivers/bus/acpi/buspdo.c @@ -76,6 +76,14 @@ Bus_PDO_PnP ( NULL, &DeviceData->InterfaceName); } + else if (device->flags.hardware_id && + strstr(device->pnp.hardware_id, ACPI_FAN_HID)) + { + status = IoRegisterDeviceInterface(DeviceData->Common.Self, + &GUID_DEVICE_FAN, + NULL, + &DeviceData->InterfaceName); + } else if (device->flags.hardware_id && strstr(device->pnp.hardware_id, ACPI_BUTTON_HID_LID)) { From 53518bbab3801959d3effe8562b5d14e8d26e2b9 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Thu, 23 May 2024 22:57:31 +0900 Subject: [PATCH 177/182] [SHLWAPI][SHLWAPI_APITEST][SDK] Implement IShellFolder_GetDisplayNameOf (#6918) This export function is needed to implement shell32!SHGetRealIDL function correctly. JIRA issue: CORE-19278 - Implement IShellFolder_GetDisplayNameOf function (This function is not inline function in this case) with retry data. - Add SFGDNO_RETRYALWAYS flag to . - Add IShellFolderHelpers testcase. --- dll/win32/shlwapi/utils.cpp | 51 ++- .../rostests/apitests/shlwapi/CMakeLists.txt | 1 + .../apitests/shlwapi/IShellFolderHelpers.cpp | 308 ++++++++++++++++++ modules/rostests/apitests/shlwapi/testlist.c | 2 + sdk/include/reactos/shlwapi_undoc.h | 5 +- 5 files changed, 360 insertions(+), 7 deletions(-) create mode 100644 modules/rostests/apitests/shlwapi/IShellFolderHelpers.cpp diff --git a/dll/win32/shlwapi/utils.cpp b/dll/win32/shlwapi/utils.cpp index 3a5db3516ac..a452b3f7253 100644 --- a/dll/win32/shlwapi/utils.cpp +++ b/dll/win32/shlwapi/utils.cpp @@ -140,16 +140,36 @@ SHLWAPI_IsBogusHRESULT(HRESULT hr) return (hr == E_FAIL || hr == E_INVALIDARG || hr == E_NOTIMPL); } +// Used for IShellFolder_GetDisplayNameOf +struct RETRY_DATA +{ + SHGDNF uRemove; + SHGDNF uAdd; + DWORD dwRetryFlags; +}; +static const RETRY_DATA g_RetryData[] = +{ + { SHGDN_FOREDITING, SHGDN_NORMAL, SFGDNO_RETRYALWAYS }, + { SHGDN_FORADDRESSBAR, SHGDN_NORMAL, SFGDNO_RETRYALWAYS }, + { SHGDN_NORMAL, SHGDN_FORPARSING, SFGDNO_RETRYALWAYS }, + { SHGDN_FORPARSING, SHGDN_NORMAL, SFGDNO_RETRYWITHFORPARSING }, + { SHGDN_INFOLDER, SHGDN_NORMAL, SFGDNO_RETRYALWAYS }, +}; + /************************************************************************* * IShellFolder_GetDisplayNameOf [SHLWAPI.316] + * + * @note Don't confuse with inline function of the same name. + * If the original call fails with the given uFlags, this function will + * retry with other flags to attempt retrieving any meaningful description. */ EXTERN_C HRESULT WINAPI IShellFolder_GetDisplayNameOf( _In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, - _In_ DWORD uFlags, + _In_ SHGDNF uFlags, _Out_ LPSTRRET lpName, - _In_ DWORD dwRetryFlags) + _In_ DWORD dwRetryFlags) // dwRetryFlags is an additional parameter { HRESULT hr; @@ -159,19 +179,37 @@ IShellFolder_GetDisplayNameOf( if (!SHLWAPI_IsBogusHRESULT(hr)) return hr; - dwRetryFlags |= 0x80000000; + dwRetryFlags |= SFGDNO_RETRYALWAYS; if ((uFlags & SHGDN_FORPARSING) == 0) dwRetryFlags |= SFGDNO_RETRYWITHFORPARSING; - /* It seems the function is actually retrying here */ - FIXME("dwRetryFlags: 0x%X\n", dwRetryFlags); + // Retry with other flags to get successful results + for (SIZE_T iEntry = 0; iEntry < _countof(g_RetryData); ++iEntry) + { + const RETRY_DATA *pData = &g_RetryData[iEntry]; + if (!(dwRetryFlags & pData->dwRetryFlags)) + continue; + + SHGDNF uNewFlags = ((uFlags & ~pData->uRemove) | pData->uAdd); + if (uNewFlags == uFlags) + continue; + + hr = psf->GetDisplayNameOf(pidl, uNewFlags, lpName); + if (!SHLWAPI_IsBogusHRESULT(hr)) + break; + + uFlags = uNewFlags; // Update flags every time + } return hr; } /************************************************************************* * IShellFolder_ParseDisplayName [SHLWAPI.317] + * + * @note Don't confuse with inline function of the same name. + * This function is safer than IShellFolder::ParseDisplayName. */ EXTERN_C HRESULT WINAPI IShellFolder_ParseDisplayName( @@ -209,6 +247,9 @@ IShellFolder_ParseDisplayName( /************************************************************************* * IShellFolder_CompareIDs [SHLWAPI.551] + * + * @note Don't confuse with inline function of the same name. + * This function tries IShellFolder2 if possible. */ EXTERN_C HRESULT WINAPI IShellFolder_CompareIDs( diff --git a/modules/rostests/apitests/shlwapi/CMakeLists.txt b/modules/rostests/apitests/shlwapi/CMakeLists.txt index 95271b056ae..49e5ef69056 100644 --- a/modules/rostests/apitests/shlwapi/CMakeLists.txt +++ b/modules/rostests/apitests/shlwapi/CMakeLists.txt @@ -6,6 +6,7 @@ include_directories($) list(APPEND SOURCE AssocQueryString.c + IShellFolderHelpers.cpp PathFileExistsDefExtAndAttributesW.c PathFindOnPath.c PathIsUNC.c diff --git a/modules/rostests/apitests/shlwapi/IShellFolderHelpers.cpp b/modules/rostests/apitests/shlwapi/IShellFolderHelpers.cpp new file mode 100644 index 00000000000..588ef3f329c --- /dev/null +++ b/modules/rostests/apitests/shlwapi/IShellFolderHelpers.cpp @@ -0,0 +1,308 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) + * PURPOSE: Tests for SHLWAPI IShellFolder helpers + * COPYRIGHT: Copyright 2024 Katayama Hirofumi MZ + */ + +#include +#include +#include +#include + +#define SHLWAPI_ISHELLFOLDER_HELPERS +#include + +static INT s_nStep = 0; + +class CTestShellFolder : public IShellFolder +{ +public: + CTestShellFolder() { } + virtual ~CTestShellFolder() { } + + static void *operator new(size_t size) + { + return LocalAlloc(LPTR, size); + } + static void operator delete(void *ptr) + { + LocalFree(ptr); + } + static void operator delete(void *ptr, size_t size) + { + LocalFree(ptr); + } + + // IUnknown methods + STDMETHOD(QueryInterface)(REFIID riid, void **ppvObject) override + { + ok_int(s_nStep, 11); + ok_int(IsEqualGUID(riid, IID_IShellFolder2), TRUE); + ++s_nStep; + return E_NOINTERFACE; + } + STDMETHOD_(ULONG, AddRef)() override + { + ok_int(TRUE, FALSE); + return 1; + } + STDMETHOD_(ULONG, Release)() override + { + ok_int(TRUE, FALSE); + return 1; + } + + // IShellFolder methods + STDMETHOD(ParseDisplayName)( + HWND hwndOwner, + LPBC pbc, + LPOLESTR lpszDisplayName, + ULONG *pchEaten, + PIDLIST_RELATIVE *ppidl, + ULONG *pdwAttributes) override + { + ok_ptr(*ppidl, NULL); + ok_long(*pdwAttributes, 0); + ++s_nStep; + return 0xDEADFACE; + } + STDMETHOD(EnumObjects)( + HWND hwndOwner, + DWORD dwFlags, + LPENUMIDLIST *ppEnumIDList) override + { + ok_int(TRUE, FALSE); + return E_NOTIMPL; + } + STDMETHOD(BindToObject)( + PCUIDLIST_RELATIVE pidl, + LPBC pbcReserved, + REFIID riid, + LPVOID *ppvOut) override + { + ok_int(TRUE, FALSE); + return E_NOTIMPL; + } + STDMETHOD(BindToStorage)( + PCUIDLIST_RELATIVE pidl, + LPBC pbcReserved, + REFIID riid, + LPVOID *ppvOut) override + { + ok_int(TRUE, FALSE); + return E_NOTIMPL; + } + STDMETHOD(CompareIDs)( + LPARAM lParam, + PCUIDLIST_RELATIVE pidl1, + PCUIDLIST_RELATIVE pidl2) override + { + switch (s_nStep) + { + case 11: + // It shouldn't come here + ok_int(TRUE, FALSE); + break; + case 12: + ok_long((LONG)lParam, 0x00001234); + break; + case 13: + ok_long((LONG)lParam, 0x00005678); + break; + default: + skip("\n"); + break; + } + ++s_nStep; + return 0xFEEDF00D; + } + STDMETHOD(CreateViewObject)( + HWND hwndOwner, + REFIID riid, + LPVOID *ppvOut) override + { + ok_int(TRUE, FALSE); + return E_NOTIMPL; + } + STDMETHOD(GetAttributesOf)( + UINT cidl, + PCUITEMID_CHILD_ARRAY apidl, + DWORD *rgfInOut) override + { + ok_int(TRUE, FALSE); + return E_NOTIMPL; + } + STDMETHOD(GetUIObjectOf)( + HWND hwndOwner, + UINT cidl, + PCUITEMID_CHILD_ARRAY apidl, + REFIID riid, + UINT * prgfInOut, + LPVOID * ppvOut) override + { + ok_int(TRUE, FALSE); + return E_NOTIMPL; + } + STDMETHOD(GetDisplayNameOf)( + PCUITEMID_CHILD pidl, + DWORD dwFlags, + LPSTRRET strRet) override + { + switch (s_nStep) + { + case 0: + ok_long(dwFlags, SHGDN_FORPARSING | SHGDN_FORADDRESSBAR | SHGDN_FOREDITING | + SHGDN_INFOLDER); + break; + case 1: + ok_long(dwFlags, SHGDN_FORPARSING | SHGDN_FORADDRESSBAR | SHGDN_INFOLDER); + break; + case 2: + ok_long(dwFlags, SHGDN_FORPARSING | SHGDN_INFOLDER); + break; + case 3: + ok_long(dwFlags, SHGDN_FORPARSING); + break; + case 4: + ok_long(dwFlags, SHGDN_FORADDRESSBAR | SHGDN_FOREDITING | SHGDN_INFOLDER); + break; + case 5: + ok_long(dwFlags, SHGDN_FORADDRESSBAR | SHGDN_INFOLDER); + break; + case 6: + ok_long(dwFlags, SHGDN_INFOLDER); + break; + case 7: + ok_long(dwFlags, SHGDN_FORPARSING | SHGDN_INFOLDER); + break; + case 8: + ok_long(dwFlags, SHGDN_INFOLDER); + break; + case 9: + ok_long(dwFlags, SHGDN_NORMAL); + break; + default: + skip("\n"); + break; + } + ++s_nStep; + return E_FAIL; + } + STDMETHOD(SetNameOf)( + HWND hwndOwner, + PCUITEMID_CHILD pidl, + LPCOLESTR lpName, + DWORD dwFlags, + PITEMID_CHILD *pPidlOut) override + { + ok_int(TRUE, FALSE); + return E_NOTIMPL; + } +}; + +static void Test_GetDisplayNameOf(void) +{ + CTestShellFolder *psf = new CTestShellFolder(); + HRESULT hr; + + hr = IShellFolder_GetDisplayNameOf( + psf, + NULL, + SHGDN_FOREDITING | SHGDN_FORADDRESSBAR | SHGDN_FORPARSING | SHGDN_INFOLDER, + NULL, + 0); + ok_long(hr, E_FAIL); + ok_int(s_nStep, 4); + + hr = IShellFolder_GetDisplayNameOf( + psf, + NULL, + SHGDN_FOREDITING | SHGDN_FORADDRESSBAR | SHGDN_INFOLDER, + NULL, + 0); + ok_long(hr, E_FAIL); + ok_int(s_nStep, 10); + + if (s_nStep != 10) + skip("s_nStep value is wrong\n"); + + delete psf; +} + +static void Test_ParseDisplayName(void) +{ + CTestShellFolder *psf = new CTestShellFolder(); + HRESULT hr; + + s_nStep = 10; + LPITEMIDLIST pidl = (LPITEMIDLIST)UlongToPtr(0xDEADDEAD); + hr = IShellFolder_ParseDisplayName( + psf, + NULL, + NULL, + NULL, + NULL, + &pidl, + NULL); + ok_long(hr, 0xDEADFACE); + ok_int(s_nStep, 11); + + delete psf; +} + +typedef HRESULT (WINAPI *FN_IShellFolder_CompareIDs)( + _In_ IShellFolder *psf, + _In_ LPARAM lParam, + _In_ PCUIDLIST_RELATIVE pidl1, + _In_ PCUIDLIST_RELATIVE pidl2); + +static void Test_CompareIDs(void) +{ + FN_IShellFolder_CompareIDs fnIShellFolder_CompareIDs; + fnIShellFolder_CompareIDs = + (FN_IShellFolder_CompareIDs) + GetProcAddress(GetModuleHandleA("shlwapi"), MAKEINTRESOURCEA(551)); + + if (IsWindowsVistaOrGreater()) + { + skip("Vista+\n"); + ok(fnIShellFolder_CompareIDs == NULL, "Vista+ has no IShellFolder_CompareIDs\n"); + return; + } + + CTestShellFolder *psf = new CTestShellFolder(); + HRESULT hr; + + s_nStep = 11; + hr = fnIShellFolder_CompareIDs( + psf, + 0xFFFF1234, + NULL, + NULL); + ok_long(hr, 0xFEEDF00D); + ok_int(s_nStep, 13); + + s_nStep = 13; + hr = fnIShellFolder_CompareIDs( + psf, + 0x00005678, + NULL, + NULL); + ok_long(hr, 0xFEEDF00D); + ok_int(s_nStep, 14); + + delete psf; +} + +START_TEST(IShellFolderHelpers) +{ + HRESULT hrCoInit = ::CoInitialize(NULL); + + Test_GetDisplayNameOf(); + Test_ParseDisplayName(); + Test_CompareIDs(); + + if (SUCCEEDED(hrCoInit)) + ::CoUninitialize(); +} diff --git a/modules/rostests/apitests/shlwapi/testlist.c b/modules/rostests/apitests/shlwapi/testlist.c index 9bb74d7ee34..b44f2e181fa 100644 --- a/modules/rostests/apitests/shlwapi/testlist.c +++ b/modules/rostests/apitests/shlwapi/testlist.c @@ -4,6 +4,7 @@ extern void func_AssocQueryString(void); extern void func_PathFileExistsDefExtAndAttributesW(void); extern void func_PathFindOnPath(void); +extern void func_IShellFolderHelpers(void); extern void func_isuncpath(void); extern void func_isuncpathserver(void); extern void func_isuncpathservershare(void); @@ -22,6 +23,7 @@ const struct test winetest_testlist[] = { "AssocQueryString", func_AssocQueryString }, { "PathFileExistsDefExtAndAttributesW", func_PathFileExistsDefExtAndAttributesW }, { "PathFindOnPath", func_PathFindOnPath }, + { "IShellFolderHelpers", func_IShellFolderHelpers }, { "PathIsUNC", func_isuncpath }, { "PathIsUNCServer", func_isuncpathserver }, { "PathIsUNCServerShare", func_isuncpathservershare }, diff --git a/sdk/include/reactos/shlwapi_undoc.h b/sdk/include/reactos/shlwapi_undoc.h index eb002d4a170..12b167e7897 100644 --- a/sdk/include/reactos/shlwapi_undoc.h +++ b/sdk/include/reactos/shlwapi_undoc.h @@ -341,12 +341,13 @@ HRESULT WINAPI IShellFolder_GetDisplayNameOf( _In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, - _In_ DWORD uFlags, + _In_ SHGDNF uFlags, _Out_ LPSTRRET lpName, _In_ DWORD dwRetryFlags); /* Flags for IShellFolder_GetDisplayNameOf */ -#define SFGDNO_RETRYWITHFORPARSING 1 +#define SFGDNO_RETRYWITHFORPARSING 0x00000001 +#define SFGDNO_RETRYALWAYS 0x80000000 HRESULT WINAPI IShellFolder_ParseDisplayName( From da64119fe67bd0dcba478553094f6617b2eef629 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 30 Apr 2024 13:40:47 +0300 Subject: [PATCH 178/182] [NTOS:CM] Add debug code for analyzing lock issues --- ntoskrnl/include/internal/cm.h | 3 +++ ntoskrnl/include/internal/cm_x.h | 17 +++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/ntoskrnl/include/internal/cm.h b/ntoskrnl/include/internal/cm.h index a211862531c..38c61513c7e 100644 --- a/ntoskrnl/include/internal/cm.h +++ b/ntoskrnl/include/internal/cm.h @@ -160,6 +160,9 @@ typedef struct _CM_KEY_HASH_TABLE_ENTRY EX_PUSH_LOCK Lock; PKTHREAD Owner; PCM_KEY_HASH Entry; +#if DBG + PVOID LockBackTrace[5]; +#endif } CM_KEY_HASH_TABLE_ENTRY, *PCM_KEY_HASH_TABLE_ENTRY; // diff --git a/ntoskrnl/include/internal/cm_x.h b/ntoskrnl/include/internal/cm_x.h index 5e7dffd2872..82a0fc8992f 100644 --- a/ntoskrnl/include/internal/cm_x.h +++ b/ntoskrnl/include/internal/cm_x.h @@ -6,6 +6,19 @@ * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org) */ +#if DBG +FORCEINLINE +VOID +CmpCaptureLockBackTraceByIndex(_In_ ULONG Index) +{ + /* Capture the backtrace */ + RtlCaptureStackBackTrace(1, + _countof(CmpCacheTable[Index].LockBackTrace), + CmpCacheTable[Index].LockBackTrace, + NULL); +} +#endif + // // Returns the hashkey corresponding to a convkey // @@ -104,8 +117,12 @@ FORCEINLINE VOID CmpAcquireKcbLockExclusiveByIndex(ULONG Index) { + ASSERT(CmpCacheTable[Index].Owner != KeGetCurrentThread()); ExAcquirePushLockExclusive(&CmpCacheTable[Index].Lock); CmpCacheTable[Index].Owner = KeGetCurrentThread(); +#if DBG + CmpCaptureLockBackTraceByIndex(Index); +#endif } // From 4fb2fdbac6e45f3c8ed5eff0f10dd368a988abe9 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 30 Apr 2024 15:12:57 +0300 Subject: [PATCH 179/182] [NTOS:CM] Properly unlock registry on failure in NtUnloadKey2 --- ntoskrnl/config/ntapi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ntoskrnl/config/ntapi.c b/ntoskrnl/config/ntapi.c index 6748326a2c8..f425b3a79e0 100644 --- a/ntoskrnl/config/ntapi.c +++ b/ntoskrnl/config/ntapi.c @@ -1953,6 +1953,7 @@ NtUnloadKey2(IN POBJECT_ATTRIBUTES TargetKey, _SEH2_END; } +Quit: /* If CmUnloadKey() failed we need to unlock registry ourselves */ if (!NT_SUCCESS(Status)) { @@ -1969,7 +1970,6 @@ NtUnloadKey2(IN POBJECT_ATTRIBUTES TargetKey, CmpUnlockRegistry(); } -Quit: /* Dereference the key */ ObDereferenceObject(KeyBody); From e582ca4ad66b49c6ecab8b4c0359097b2f3d3448 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Thu, 23 May 2024 12:03:44 +0900 Subject: [PATCH 180/182] [SHELL32] brsfolder.cpp: Formatting only JIRA issue: CORE-17340 --- dll/win32/shell32/brsfolder.cpp | 811 ++++++++++++++++++-------------- 1 file changed, 446 insertions(+), 365 deletions(-) diff --git a/dll/win32/shell32/brsfolder.cpp b/dll/win32/shell32/brsfolder.cpp index 883980a0578..15f76c44960 100644 --- a/dll/win32/shell32/brsfolder.cpp +++ b/dll/win32/shell32/brsfolder.cpp @@ -14,7 +14,7 @@ #include "precomp.h" -#include /* Resizable window */ +#include // Resizable window WINE_DEFAULT_DEBUG_CHANNEL(shell); @@ -22,60 +22,64 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell); typedef struct tagbrowse_info { - HWND hWnd; - HWND hwndTreeView; - LPBROWSEINFOW lpBrowseInfo; - LPITEMIDLIST pidlRet; - LAYOUT_DATA *layout; /* filled by LayoutInit, used by LayoutUpdate */ - SIZE szMin; - ULONG hNotify; /* change notification handle */ + HWND hWnd; + HWND hwndTreeView; + LPBROWSEINFOW lpBrowseInfo; + LPITEMIDLIST pidlRet; + LAYOUT_DATA* layout; // Filled by LayoutInit, used by LayoutUpdate + SIZE szMin; + ULONG hNotify; // Change notification handle } browse_info; typedef struct tagTV_ITEMDATA { - LPSHELLFOLDER lpsfParent; /* IShellFolder of the parent */ - LPITEMIDLIST lpi; /* PIDL relative to parent */ - LPITEMIDLIST lpifq; /* Fully qualified PIDL */ - IEnumIDList* pEnumIL; /* Children iterator */ + LPSHELLFOLDER lpsfParent; // IShellFolder of the parent + LPITEMIDLIST lpi; // PIDL relative to parent + LPITEMIDLIST lpifq; // Fully qualified PIDL + IEnumIDList *pEnumIL; // Children iterator } TV_ITEMDATA, *LPTV_ITEMDATA; static const LAYOUT_INFO g_layout_info[] = { - {IDC_BROWSE_FOR_FOLDER_TITLE, BF_TOP|BF_LEFT|BF_RIGHT}, - {IDC_BROWSE_FOR_FOLDER_STATUS, BF_TOP|BF_LEFT|BF_RIGHT}, - {IDC_BROWSE_FOR_FOLDER_TREEVIEW, BF_TOP|BF_BOTTOM|BF_LEFT|BF_RIGHT}, - {IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, BF_TOP|BF_LEFT|BF_RIGHT}, - {IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, BF_BOTTOM|BF_LEFT}, - {IDOK, BF_BOTTOM|BF_RIGHT}, - {IDCANCEL, BF_BOTTOM|BF_RIGHT} + { IDC_BROWSE_FOR_FOLDER_TITLE, BF_TOP | BF_LEFT | BF_RIGHT }, + { IDC_BROWSE_FOR_FOLDER_STATUS, BF_TOP | BF_LEFT | BF_RIGHT }, + { IDC_BROWSE_FOR_FOLDER_TREEVIEW, BF_TOP | BF_BOTTOM | BF_LEFT | BF_RIGHT }, + { IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, BF_TOP | BF_LEFT | BF_RIGHT }, + { IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, BF_BOTTOM | BF_LEFT }, + { IDOK, BF_BOTTOM | BF_RIGHT }, + { IDCANCEL, BF_BOTTOM | BF_RIGHT }, }; #define LAYOUT_INFO_COUNT (sizeof(g_layout_info)/sizeof(g_layout_info[0])) -#define SUPPORTEDFLAGS (BIF_STATUSTEXT | \ - BIF_BROWSEFORCOMPUTER | \ - BIF_RETURNFSANCESTORS | \ - BIF_RETURNONLYFSDIRS | \ - BIF_NONEWFOLDERBUTTON | \ - BIF_NEWDIALOGSTYLE | \ +#define SUPPORTEDFLAGS (BIF_STATUSTEXT | BIF_BROWSEFORCOMPUTER | BIF_RETURNFSANCESTORS | \ + BIF_RETURNONLYFSDIRS | BIF_NONEWFOLDERBUTTON | BIF_NEWDIALOGSTYLE | \ BIF_BROWSEINCLUDEFILES) -static void FillTreeView(browse_info*, LPSHELLFOLDER, - LPITEMIDLIST, HTREEITEM, IEnumIDList*); -static HTREEITEM InsertTreeViewItem( browse_info*, IShellFolder *, - LPCITEMIDLIST, LPCITEMIDLIST, IEnumIDList*, HTREEITEM); - -static inline DWORD BrowseFlagsToSHCONTF(UINT ulFlags) +static void +FillTreeView(browse_info*, LPSHELLFOLDER, LPITEMIDLIST, HTREEITEM, IEnumIDList*); + +static HTREEITEM +InsertTreeViewItem( + browse_info *info, + IShellFolder *lpsf, + LPCITEMIDLIST pidl, + LPCITEMIDLIST pidlParent, + IEnumIDList *pEnumIL, + HTREEITEM hParent); + +static inline DWORD +BrowseFlagsToSHCONTF(UINT ulFlags) { return SHCONTF_FOLDERS | (ulFlags & BIF_BROWSEINCLUDEFILES ? SHCONTF_NONFOLDERS : 0); } -static void browsefolder_callback( LPBROWSEINFOW lpBrowseInfo, HWND hWnd, - UINT msg, LPARAM param ) +static void +browsefolder_callback(LPBROWSEINFOW lpBrowseInfo, HWND hWnd, UINT msg, LPARAM param) { if (!lpBrowseInfo->lpfn) return; - lpBrowseInfo->lpfn( hWnd, msg, param, lpBrowseInfo->lParam ); + lpBrowseInfo->lpfn(hWnd, msg, param, lpBrowseInfo->lParam); } static LPTV_ITEMDATA @@ -92,35 +96,36 @@ BrsFolder_GetDataFromItem(browse_info *info, HTREEITEM hItem) * InitializeTreeView [Internal] * * Called from WM_INITDIALOG handler. - * + * * PARAMS * hwndParent [I] The BrowseForFolder dialog * root [I] ITEMIDLIST of the root shell folder */ -static void InitializeTreeView( browse_info *info ) +static void +InitializeTreeView(browse_info *info) { LPITEMIDLIST pidlParent, pidlChild; HIMAGELIST hImageList; HRESULT hr; IShellFolder *lpsfParent, *lpsfRoot; - IEnumIDList * pEnumChildren = NULL; + IEnumIDList *pEnumChildren = NULL; HTREEITEM item; DWORD flags; LPCITEMIDLIST root = info->lpBrowseInfo->pidlRoot; - TRACE("%p\n", info ); - + TRACE("%p\n", info); + Shell_GetImageLists(NULL, &hImageList); if (hImageList) TreeView_SetImageList(info->hwndTreeView, hImageList, 0); /* We want to call InsertTreeViewItem down the code, in order to insert - * the root item of the treeview. Due to InsertTreeViewItem's signature, + * the root item of the treeview. Due to InsertTreeViewItem's signature, * we need the following to do this: * - * + An ITEMIDLIST corresponding to _the parent_ of root. - * + An ITEMIDLIST, which is a relative path from root's parent to root + * + An ITEMIDLIST corresponding to _the parent_ of root. + * + An ITEMIDLIST, which is a relative path from root's parent to root * (containing a single SHITEMID). * + An IShellFolder interface pointer of root's parent folder. * @@ -130,37 +135,46 @@ static void InitializeTreeView( browse_info *info ) pidlParent = ILClone(root); ILRemoveLastID(pidlParent); pidlChild = ILClone(ILFindLastID(root)); - - if (_ILIsDesktop(pidlParent)) { + + if (_ILIsDesktop(pidlParent)) + { hr = SHGetDesktopFolder(&lpsfParent); - } else { + } + else + { IShellFolder *lpsfDesktop; hr = SHGetDesktopFolder(&lpsfDesktop); - if (FAILED(hr)) { + if (FAILED(hr)) + { WARN("SHGetDesktopFolder failed! hr = %08x\n", hr); ILFree(pidlChild); ILFree(pidlParent); return; } - hr = lpsfDesktop->BindToObject(pidlParent, 0, IID_PPV_ARG(IShellFolder, &lpsfParent)); + hr = lpsfDesktop->BindToObject(pidlParent, NULL, IID_PPV_ARG(IShellFolder, &lpsfParent)); lpsfDesktop->Release(); } - if (FAILED(hr)) { + if (FAILED(hr)) + { WARN("Could not bind to parent shell folder! hr = %08x\n", hr); ILFree(pidlChild); ILFree(pidlParent); return; } - if (!_ILIsEmpty(pidlChild)) { - hr = lpsfParent->BindToObject(pidlChild, 0, IID_PPV_ARG(IShellFolder, &lpsfRoot)); - } else { + if (!_ILIsEmpty(pidlChild)) + { + hr = lpsfParent->BindToObject(pidlChild, NULL, IID_PPV_ARG(IShellFolder, &lpsfRoot)); + } + else + { lpsfRoot = lpsfParent; hr = lpsfParent->AddRef(); } - if (FAILED(hr)) { + if (FAILED(hr)) + { WARN("Could not bind to root shell folder! hr = %08x\n", hr); lpsfParent->Release(); ILFree(pidlChild); @@ -168,9 +182,10 @@ static void InitializeTreeView( browse_info *info ) return; } - flags = BrowseFlagsToSHCONTF( info->lpBrowseInfo->ulFlags ); - hr = lpsfRoot->EnumObjects(info->hWnd, flags, &pEnumChildren ); - if (FAILED(hr)) { + flags = BrowseFlagsToSHCONTF(info->lpBrowseInfo->ulFlags); + hr = lpsfRoot->EnumObjects(info->hWnd, flags, &pEnumChildren); + if (FAILED(hr)) + { WARN("Could not get child iterator! hr = %08x\n", hr); lpsfParent->Release(); lpsfRoot->Release(); @@ -180,8 +195,8 @@ static void InitializeTreeView( browse_info *info ) } TreeView_DeleteItem(info->hwndTreeView, TVI_ROOT); - item = InsertTreeViewItem( info, lpsfParent, pidlChild, - pidlParent, pEnumChildren, TVI_ROOT ); + item = InsertTreeViewItem(info, lpsfParent, pidlChild, + pidlParent, pEnumChildren, TVI_ROOT); TreeView_Expand(info->hwndTreeView, item, TVE_EXPAND); ILFree(pidlChild); @@ -190,19 +205,21 @@ static void InitializeTreeView( browse_info *info ) lpsfParent->Release(); } -static int GetIcon(LPCITEMIDLIST lpi, UINT uFlags) +static int +GetIcon(LPCITEMIDLIST lpi, UINT uFlags) { SHFILEINFOW sfi; - SHGetFileInfoW((LPCWSTR)lpi, 0 ,&sfi, sizeof(SHFILEINFOW), uFlags); + SHGetFileInfoW((LPCWSTR)lpi, 0, &sfi, sizeof(SHFILEINFOW), uFlags); return sfi.iIcon; } -static void GetNormalAndSelectedIcons(LPITEMIDLIST lpifq, LPTVITEMW lpTV_ITEM) +static void +GetNormalAndSelectedIcons(LPITEMIDLIST lpifq, LPTVITEMW lpTV_ITEM) { LPITEMIDLIST pidlDesktop = NULL; DWORD flags; - TRACE("%p %p\n",lpifq, lpTV_ITEM); + TRACE("%p %p\n", lpifq, lpTV_ITEM); if (!lpifq) { @@ -211,13 +228,13 @@ static void GetNormalAndSelectedIcons(LPITEMIDLIST lpifq, LPTVITEMW lpTV_ITEM) } flags = SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON; - lpTV_ITEM->iImage = GetIcon( lpifq, flags ); + lpTV_ITEM->iImage = GetIcon(lpifq, flags); flags = SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_OPENICON; - lpTV_ITEM->iSelectedImage = GetIcon( lpifq, flags ); + lpTV_ITEM->iSelectedImage = GetIcon(lpifq, flags); if (pidlDesktop) - ILFree( pidlDesktop ); + ILFree(pidlDesktop); } /****************************************************************************** @@ -235,19 +252,24 @@ static void GetNormalAndSelectedIcons(LPITEMIDLIST lpifq, LPTVITEMW lpTV_ITEM) * Success: TRUE * Failure: FALSE */ -static BOOL GetName(LPSHELLFOLDER lpsf, LPCITEMIDLIST lpi, DWORD dwFlags, LPWSTR lpFriendlyName) +static BOOL +GetName( + LPSHELLFOLDER lpsf, + LPCITEMIDLIST lpi, + DWORD dwFlags, + LPWSTR lpFriendlyName) { - BOOL bSuccess=TRUE; - STRRET str; + BOOL bSuccess = TRUE; + STRRET str; - TRACE("%p %p %x %p\n", lpsf, lpi, dwFlags, lpFriendlyName); - if (SUCCEEDED(lpsf->GetDisplayNameOf(lpi, dwFlags, &str))) - bSuccess = StrRetToStrNW(lpFriendlyName, MAX_PATH, &str, lpi); - else - bSuccess = FALSE; + TRACE("%p %p %x %p\n", lpsf, lpi, dwFlags, lpFriendlyName); + if (SUCCEEDED(lpsf->GetDisplayNameOf(lpi, dwFlags, &str))) + bSuccess = StrRetToStrNW(lpFriendlyName, MAX_PATH, &str, lpi); + else + bSuccess = FALSE; - TRACE("-- %s\n", debugstr_w(lpFriendlyName)); - return bSuccess; + TRACE("-- %s\n", debugstr_w(lpFriendlyName)); + return bSuccess; } /****************************************************************************** @@ -255,7 +277,7 @@ static BOOL GetName(LPSHELLFOLDER lpsf, LPCITEMIDLIST lpi, DWORD dwFlags, LPWSTR * * PARAMS * info [I] data for the dialog - * lpsf [I] IShellFolder interface of the item's parent shell folder + * lpsf [I] IShellFolder interface of the item's parent shell folder * pidl [I] ITEMIDLIST of the child to insert, relative to parent * pidlParent [I] ITEMIDLIST of the parent shell folder * pEnumIL [I] Iterator for the children of the item to be inserted @@ -265,49 +287,54 @@ static BOOL GetName(LPSHELLFOLDER lpsf, LPCITEMIDLIST lpi, DWORD dwFlags, LPWSTR * Success: Handle to the created and inserted treeview-item * Failure: NULL */ -static HTREEITEM InsertTreeViewItem( browse_info *info, IShellFolder * lpsf, - LPCITEMIDLIST pidl, LPCITEMIDLIST pidlParent, IEnumIDList* pEnumIL, +static HTREEITEM +InsertTreeViewItem( + browse_info *info, + IShellFolder *lpsf, + LPCITEMIDLIST pidl, + LPCITEMIDLIST pidlParent, + IEnumIDList *pEnumIL, HTREEITEM hParent) { - TVITEMW tvi; - TVINSERTSTRUCTW tvins; - WCHAR szBuff[MAX_PATH]; - LPTV_ITEMDATA lptvid=0; + TVITEMW tvi; + TVINSERTSTRUCTW tvins; + WCHAR szBuff[MAX_PATH]; + LPTV_ITEMDATA lptvid = NULL; - tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; + tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; - tvi.cChildren= pEnumIL ? 1 : 0; - tvi.mask |= TVIF_CHILDREN; + tvi.cChildren= pEnumIL ? 1 : 0; + tvi.mask |= TVIF_CHILDREN; - if (!GetName(lpsf, pidl, SHGDN_NORMAL, szBuff)) - return NULL; + if (!GetName(lpsf, pidl, SHGDN_NORMAL, szBuff)) + return NULL; - lptvid = (LPTV_ITEMDATA)SHAlloc(sizeof(TV_ITEMDATA)); - if (!lptvid) - return NULL; + lptvid = (LPTV_ITEMDATA)SHAlloc(sizeof(TV_ITEMDATA)); + if (!lptvid) + return NULL; - tvi.pszText = szBuff; - tvi.cchTextMax = MAX_PATH; - tvi.lParam = (LPARAM)lptvid; + tvi.pszText = szBuff; + tvi.cchTextMax = MAX_PATH; + tvi.lParam = (LPARAM)lptvid; - lpsf->AddRef(); - lptvid->lpsfParent = lpsf; - lptvid->lpi = ILClone(pidl); - lptvid->lpifq = pidlParent ? ILCombine(pidlParent, pidl) : ILClone(pidl); - lptvid->pEnumIL = pEnumIL; - GetNormalAndSelectedIcons(lptvid->lpifq, &tvi); + lpsf->AddRef(); + lptvid->lpsfParent = lpsf; + lptvid->lpi = ILClone(pidl); + lptvid->lpifq = pidlParent ? ILCombine(pidlParent, pidl) : ILClone(pidl); + lptvid->pEnumIL = pEnumIL; + GetNormalAndSelectedIcons(lptvid->lpifq, &tvi); - tvins.item = tvi; - tvins.hInsertAfter = NULL; - tvins.hParent = hParent; + tvins.item = tvi; + tvins.hInsertAfter = NULL; + tvins.hParent = hParent; - return TreeView_InsertItem( info->hwndTreeView, &tvins ); + return TreeView_InsertItem(info->hwndTreeView, &tvins); } /****************************************************************************** * FillTreeView [Internal] * - * For each child (given by lpe) of the parent shell folder, which is given by + * For each child (given by lpe) of the parent shell folder, which is given by * lpsf and whose PIDL is pidl, insert a treeview-item right under hParent * * PARAMS @@ -317,63 +344,72 @@ static HTREEITEM InsertTreeViewItem( browse_info *info, IShellFolder * lpsf, * hParent [I] The treeview item that represents the parent shell folder * lpe [I] An iterator for the children of the parent shell folder */ -static void FillTreeView( browse_info *info, IShellFolder * lpsf, - LPITEMIDLIST pidl, HTREEITEM hParent, IEnumIDList* lpe) +static void +FillTreeView( + browse_info *info, + IShellFolder *lpsf, + LPITEMIDLIST pidl, + HTREEITEM hParent, + IEnumIDList *lpe) { - LPITEMIDLIST pidlTemp = 0; - ULONG ulFetched; - HRESULT hr; - HWND hwnd = GetParent( info->hwndTreeView ); - - TRACE("%p %p %p %p\n",lpsf, pidl, hParent, lpe); - - /* No IEnumIDList -> No children */ - if (!lpe) return; - - SetCapture( hwnd ); - SetCursor( LoadCursorA( 0, (LPSTR)IDC_WAIT ) ); - - while (S_OK == lpe->Next(1, &pidlTemp, &ulFetched)) - { - ULONG ulAttrs = SFGAO_HASSUBFOLDER | SFGAO_FOLDER; - IEnumIDList* pEnumIL = NULL; - IShellFolder* pSFChild = NULL; - lpsf->GetAttributesOf(1, (LPCITEMIDLIST*)&pidlTemp, &ulAttrs); - if (ulAttrs & SFGAO_FOLDER) - { - hr = lpsf->BindToObject(pidlTemp, NULL, IID_PPV_ARG(IShellFolder, &pSFChild)); - if (SUCCEEDED(hr)) + LPITEMIDLIST pidlTemp = 0; + ULONG ulFetched; + HRESULT hr; + HWND hwnd = GetParent(info->hwndTreeView); + + TRACE("%p %p %p %p\n", lpsf, pidl, hParent, lpe); + + // No IEnumIDList -> No children + if (!lpe) + return; + + SetCapture(hwnd); + SetCursor(LoadCursorA(NULL, (LPSTR)IDC_WAIT)); + + while (S_OK == lpe->Next(1, &pidlTemp, &ulFetched)) + { + ULONG ulAttrs = SFGAO_HASSUBFOLDER | SFGAO_FOLDER; + IEnumIDList *pEnumIL = NULL; + IShellFolder *pSFChild = NULL; + lpsf->GetAttributesOf(1, (LPCITEMIDLIST *)&pidlTemp, &ulAttrs); + if (ulAttrs & SFGAO_FOLDER) + { + hr = lpsf->BindToObject(pidlTemp, NULL, IID_PPV_ARG(IShellFolder, &pSFChild)); + if (SUCCEEDED(hr)) + { + DWORD flags = BrowseFlagsToSHCONTF(info->lpBrowseInfo->ulFlags); + hr = pSFChild->EnumObjects(hwnd, flags, &pEnumIL); + if (hr == S_OK) { - DWORD flags = BrowseFlagsToSHCONTF(info->lpBrowseInfo->ulFlags); - hr = pSFChild->EnumObjects(hwnd, flags, &pEnumIL); - if (hr == S_OK) + if ((pEnumIL->Skip(1) != S_OK) || + FAILED(pEnumIL->Reset())) { - if ((pEnumIL->Skip(1) != S_OK) || - FAILED(pEnumIL->Reset())) - { - pEnumIL->Release(); - pEnumIL = NULL; - } + pEnumIL->Release(); + pEnumIL = NULL; } - pSFChild->Release(); } - } + pSFChild->Release(); + } + } + if (ulAttrs != (ulAttrs & SFGAO_FOLDER)) { - if (!InsertTreeViewItem(info, lpsf, pidlTemp, pidl, pEnumIL, hParent)) - goto done; - } - SHFree(pidlTemp); /* Finally, free the pidl that the shell gave us... */ - pidlTemp=NULL; - } + if (!InsertTreeViewItem(info, lpsf, pidlTemp, pidl, pEnumIL, hParent)) + goto done; + } + + SHFree(pidlTemp); // Finally, free the pidl that the shell gave us... + pidlTemp = NULL; + } done: - ReleaseCapture(); - SetCursor(LoadCursorW(0, (LPWSTR)IDC_ARROW)); + ReleaseCapture(); + SetCursor(LoadCursorW(NULL, (LPWSTR)IDC_ARROW)); SHFree(pidlTemp); } -static inline BOOL PIDLIsType(LPCITEMIDLIST pidl, PIDLTYPE type) +static inline BOOL +PIDLIsType(LPCITEMIDLIST pidl, PIDLTYPE type) { LPPIDLDATA data = _ILGetDataPointer(pidl); if (!data) @@ -381,7 +417,8 @@ static inline BOOL PIDLIsType(LPCITEMIDLIST pidl, PIDLTYPE type) return (data->type == type); } -static void BrsFolder_CheckValidSelection( browse_info *info, LPTV_ITEMDATA lptvid ) +static void +BrsFolder_CheckValidSelection(browse_info *info, LPTV_ITEMDATA lptvid) { LPBROWSEINFOW lpBrowseInfo = info->lpBrowseInfo; LPCITEMIDLIST pidl = lptvid->lpi; @@ -395,27 +432,30 @@ static void BrsFolder_CheckValidSelection( browse_info *info, LPTV_ITEMDATA lptv if (lpBrowseInfo->ulFlags & BIF_RETURNFSANCESTORS) { dwAttributes = SFGAO_FILESYSANCESTOR | SFGAO_FILESYSTEM; - r = lptvid->lpsfParent->GetAttributesOf(1, (LPCITEMIDLIST*)&lptvid->lpi, &dwAttributes); - if (FAILED(r) || !(dwAttributes & (SFGAO_FILESYSANCESTOR|SFGAO_FILESYSTEM))) + r = lptvid->lpsfParent->GetAttributesOf(1, (LPCITEMIDLIST *)&lptvid->lpi, &dwAttributes); + if (FAILED(r) || !(dwAttributes & (SFGAO_FILESYSANCESTOR | SFGAO_FILESYSTEM))) bEnabled = FALSE; } dwAttributes = SFGAO_FOLDER | SFGAO_FILESYSTEM; - r = lptvid->lpsfParent->GetAttributesOf(1, (LPCITEMIDLIST*)&lptvid->lpi, &dwAttributes); + r = lptvid->lpsfParent->GetAttributesOf(1, (LPCITEMIDLIST *)&lptvid->lpi, &dwAttributes); if (FAILED(r) || - ((dwAttributes & (SFGAO_FOLDER|SFGAO_FILESYSTEM)) != (SFGAO_FOLDER|SFGAO_FILESYSTEM))) + ((dwAttributes & (SFGAO_FOLDER | SFGAO_FILESYSTEM)) != (SFGAO_FOLDER | SFGAO_FILESYSTEM))) { if (lpBrowseInfo->ulFlags & BIF_RETURNONLYFSDIRS) bEnabled = FALSE; EnableWindow(GetDlgItem(info->hWnd, IDC_BROWSE_FOR_FOLDER_NEW_FOLDER), FALSE); } else + { EnableWindow(GetDlgItem(info->hWnd, IDC_BROWSE_FOR_FOLDER_NEW_FOLDER), TRUE); + } SendMessageW(info->hWnd, BFFM_ENABLEOK, 0, bEnabled); } -static LRESULT BrsFolder_Treeview_Delete( browse_info *info, NMTREEVIEWW *pnmtv ) +static LRESULT +BrsFolder_Treeview_Delete(browse_info *info, NMTREEVIEWW *pnmtv) { LPTV_ITEMDATA lptvid = (LPTV_ITEMDATA)pnmtv->itemOld.lParam; @@ -430,10 +470,11 @@ static LRESULT BrsFolder_Treeview_Delete( browse_info *info, NMTREEVIEWW *pnmtv return 0; } -static LRESULT BrsFolder_Treeview_Expand( browse_info *info, NMTREEVIEWW *pnmtv ) +static LRESULT +BrsFolder_Treeview_Expand(browse_info *info, NMTREEVIEWW *pnmtv) { IShellFolder *lpsf2 = NULL; - LPTV_ITEMDATA lptvid = (LPTV_ITEMDATA) pnmtv->itemNew.lParam; + LPTV_ITEMDATA lptvid = (LPTV_ITEMDATA)pnmtv->itemNew.lParam; HRESULT r; TRACE("TVN_ITEMEXPANDINGA/W\n"); @@ -441,9 +482,12 @@ static LRESULT BrsFolder_Treeview_Expand( browse_info *info, NMTREEVIEWW *pnmtv if ((pnmtv->itemNew.state & TVIS_EXPANDEDONCE)) return 0; - if (!_ILIsEmpty(lptvid->lpi)) { - r = lptvid->lpsfParent->BindToObject(lptvid->lpi, 0, IID_PPV_ARG(IShellFolder, &lpsf2)); - } else { + if (!_ILIsEmpty(lptvid->lpi)) + { + r = lptvid->lpsfParent->BindToObject(lptvid->lpi, NULL, IID_PPV_ARG(IShellFolder, &lpsf2)); + } + else + { lpsf2 = lptvid->lpsfParent; lpsf2->AddRef(); r = S_OK; @@ -451,19 +495,20 @@ static LRESULT BrsFolder_Treeview_Expand( browse_info *info, NMTREEVIEWW *pnmtv if (SUCCEEDED(r)) { - FillTreeView( info, lpsf2, lptvid->lpifq, pnmtv->itemNew.hItem, lptvid->pEnumIL); + FillTreeView(info, lpsf2, lptvid->lpifq, pnmtv->itemNew.hItem, lptvid->pEnumIL); lpsf2->Release(); } - /* My Computer is already sorted and trying to do a simple text - * sort will only mess things up */ + // My Computer is already sorted and trying to do a simple text + // sort will only mess things up if (!_ILIsMyComputer(lptvid->lpi)) TreeView_SortChildren(info->hwndTreeView, pnmtv->itemNew.hItem, FALSE); return 0; } -static HRESULT BrsFolder_Treeview_Changed( browse_info *info, NMTREEVIEWW *pnmtv ) +static HRESULT +BrsFolder_Treeview_Changed(browse_info *info, NMTREEVIEWW *pnmtv) { LPTV_ITEMDATA lptvid = (LPTV_ITEMDATA) pnmtv->itemNew.lParam; WCHAR name[MAX_PATH]; @@ -472,42 +517,43 @@ static HRESULT BrsFolder_Treeview_Changed( browse_info *info, NMTREEVIEWW *pnmtv info->pidlRet = ILClone(lptvid->lpifq); if (GetName(lptvid->lpsfParent, lptvid->lpi, SHGDN_NORMAL, name)) - SetWindowTextW( GetDlgItem(info->hWnd, IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT), name ); + SetWindowTextW(GetDlgItem(info->hWnd, IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT), name); - browsefolder_callback( info->lpBrowseInfo, info->hWnd, BFFM_SELCHANGED, - (LPARAM)info->pidlRet ); - BrsFolder_CheckValidSelection( info, lptvid ); + browsefolder_callback(info->lpBrowseInfo, info->hWnd, BFFM_SELCHANGED, + (LPARAM)info->pidlRet); + BrsFolder_CheckValidSelection(info, lptvid); return S_OK; } -static LRESULT BrsFolder_Treeview_Rename(browse_info *info, NMTVDISPINFOW *pnmtv) +static LRESULT +BrsFolder_Treeview_Rename(browse_info *info, NMTVDISPINFOW *pnmtv) { LPTV_ITEMDATA item_data; WCHAR old_path[MAX_PATH], new_path[MAX_PATH], *p; NMTREEVIEWW nmtv; TVITEMW item; - if(!pnmtv->item.pszText) + if (!pnmtv->item.pszText) return 0; item.hItem = TreeView_GetSelection(info->hwndTreeView); item_data = BrsFolder_GetDataFromItem(info, item.hItem); SHGetPathFromIDListW(item_data->lpifq, old_path); - if(!(p = strrchrW(old_path, '\\'))) + if (!(p = strrchrW(old_path, '\\'))) return 0; - p = new_path+(p-old_path+1); - memcpy(new_path, old_path, (p-new_path)*sizeof(WCHAR)); + p = new_path + (p - old_path + 1); + memcpy(new_path, old_path, (p-new_path) * sizeof(WCHAR)); strcpyW(p, pnmtv->item.pszText); - if(!MoveFileW(old_path, new_path)) + if (!MoveFileW(old_path, new_path)) return 0; SHFree(item_data->lpifq); SHFree(item_data->lpi); item_data->lpifq = SHSimpleIDListFromPathW(new_path); - item_data->lpsfParent->ParseDisplayName(NULL, NULL, - pnmtv->item.pszText, NULL, &item_data->lpi, NULL); + item_data->lpsfParent->ParseDisplayName(NULL, NULL, pnmtv->item.pszText, NULL, + &item_data->lpi, NULL); item.mask = TVIF_HANDLE | TVIF_TEXT; item.pszText = pnmtv->item.pszText; @@ -518,7 +564,8 @@ static LRESULT BrsFolder_Treeview_Rename(browse_info *info, NMTVDISPINFOW *pnmtv return 0; } -static HRESULT BrsFolder_Rename(browse_info *info, HTREEITEM hItem) +static HRESULT +BrsFolder_Rename(browse_info *info, HTREEITEM hItem) { TreeView_SelectItem(info->hwndTreeView, hItem); TreeView_EditLabel(info->hwndTreeView, hItem); @@ -532,29 +579,30 @@ BrsFolder_Delete(browse_info *info, HTREEITEM selected_item) SHFILEOPSTRUCTW fileop = { info->hwndTreeView }; WCHAR szzFrom[MAX_PATH + 1]; - /* get item_data */ + // Get item_data item_data = BrsFolder_GetDataFromItem(info, selected_item); - /* get the path */ + // Get the path if (!SHGetPathFromIDListW(item_data->lpifq, szzFrom)) { ERR("SHGetPathFromIDListW failed\n"); return; } - szzFrom[lstrlenW(szzFrom) + 1] = 0; /* double NULL-terminated */ + szzFrom[lstrlenW(szzFrom) + 1] = UNICODE_NULL; // Double NULL-terminated fileop.pFrom = szzFrom; - /* delete folder */ + // Delete folder fileop.fFlags = FOF_ALLOWUNDO; fileop.wFunc = FO_DELETE; SHFileOperationW(&fileop); } -static LRESULT BrsFolder_Treeview_Keydown(browse_info *info, LPNMTVKEYDOWN keydown) +static LRESULT +BrsFolder_Treeview_Keydown(browse_info *info, LPNMTVKEYDOWN keydown) { HTREEITEM selected_item; - /* Old dialog doesn't support those advanced features */ + // Old dialog doesn't support those advanced features if (!(info->lpBrowseInfo->ulFlags & BIF_USENEWUI)) return 0; @@ -562,17 +610,19 @@ static LRESULT BrsFolder_Treeview_Keydown(browse_info *info, LPNMTVKEYDOWN keydo switch (keydown->wVKey) { - case VK_F2: - BrsFolder_Rename(info, selected_item); - break; - case VK_DELETE: - BrsFolder_Delete(info, selected_item); - break; + case VK_F2: + BrsFolder_Rename(info, selected_item); + break; + + case VK_DELETE: + BrsFolder_Delete(info, selected_item); + break; } return 0; } -static LRESULT BrsFolder_OnNotify( browse_info *info, UINT CtlID, LPNMHDR lpnmh ) +static LRESULT +BrsFolder_OnNotify(browse_info *info, UINT CtlID, LPNMHDR lpnmh) { NMTREEVIEWW *pnmtv = (NMTREEVIEWW *)lpnmh; @@ -583,55 +633,56 @@ static LRESULT BrsFolder_OnNotify( browse_info *info, UINT CtlID, LPNMHDR lpnmh switch (pnmtv->hdr.code) { - case TVN_DELETEITEMA: - case TVN_DELETEITEMW: - return BrsFolder_Treeview_Delete( info, pnmtv ); - - case TVN_ITEMEXPANDINGA: - case TVN_ITEMEXPANDINGW: - return BrsFolder_Treeview_Expand( info, pnmtv ); - - case TVN_SELCHANGEDA: - case TVN_SELCHANGEDW: - return BrsFolder_Treeview_Changed( info, pnmtv ); - - case TVN_ENDLABELEDITA: - case TVN_ENDLABELEDITW: - return BrsFolder_Treeview_Rename( info, (LPNMTVDISPINFOW)pnmtv ); - - case TVN_KEYDOWN: - return BrsFolder_Treeview_Keydown( info, (LPNMTVKEYDOWN)pnmtv ); - - default: - WARN("unhandled (%d)\n", pnmtv->hdr.code); - break; + case TVN_DELETEITEMA: + case TVN_DELETEITEMW: + return BrsFolder_Treeview_Delete(info, pnmtv); + + case TVN_ITEMEXPANDINGA: + case TVN_ITEMEXPANDINGW: + return BrsFolder_Treeview_Expand(info, pnmtv); + + case TVN_SELCHANGEDA: + case TVN_SELCHANGEDW: + return BrsFolder_Treeview_Changed(info, pnmtv); + + case TVN_ENDLABELEDITA: + case TVN_ENDLABELEDITW: + return BrsFolder_Treeview_Rename(info, (LPNMTVDISPINFOW)pnmtv); + + case TVN_KEYDOWN: + return BrsFolder_Treeview_Keydown(info, (LPNMTVKEYDOWN)pnmtv); + + default: + WARN("unhandled (%d)\n", pnmtv->hdr.code); + break; } return 0; } -static BOOL BrsFolder_OnCreate( HWND hWnd, browse_info *info ) +static BOOL +BrsFolder_OnCreate(HWND hWnd, browse_info *info) { LPITEMIDLIST computer_pidl; SHChangeNotifyEntry ntreg; LPBROWSEINFOW lpBrowseInfo = info->lpBrowseInfo; info->hWnd = hWnd; - SetPropW( hWnd, L"__WINE_BRSFOLDERDLG_INFO", info ); + SetPropW(hWnd, L"__WINE_BRSFOLDERDLG_INFO", info); if (lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE) FIXME("flags BIF_NEWDIALOGSTYLE partially implemented\n"); if (lpBrowseInfo->ulFlags & ~SUPPORTEDFLAGS) - FIXME("flags %x not implemented\n", lpBrowseInfo->ulFlags & ~SUPPORTEDFLAGS); + FIXME("flags %x not implemented\n", lpBrowseInfo->ulFlags & ~SUPPORTEDFLAGS); if (lpBrowseInfo->ulFlags & BIF_USENEWUI) { RECT rcWnd; - /* Resize the treeview if there's not editbox */ - if ((lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE) - && !(lpBrowseInfo->ulFlags & BIF_EDITBOX)) + // Resize the treeview if there's not editbox + if ((lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE) && + !(lpBrowseInfo->ulFlags & BIF_EDITBOX)) { RECT rcEdit, rcTreeView; INT cy; @@ -645,12 +696,13 @@ static BOOL BrsFolder_OnCreate( HWND hWnd, browse_info *info ) rcTreeView.right - rcTreeView.left, rcTreeView.bottom - rcTreeView.top, TRUE); } + if (lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE) info->layout = LayoutInit(hWnd, g_layout_info, LAYOUT_INFO_COUNT); else info->layout = NULL; - /* TODO: Windows allows shrinking the windows a bit */ + // TODO: Windows allows shrinking the windows a bit GetWindowRect(hWnd, &rcWnd); info->szMin.cx = rcWnd.right - rcWnd.left; info->szMin.cy = rcWnd.bottom - rcWnd.top; @@ -661,35 +713,37 @@ static BOOL BrsFolder_OnCreate( HWND hWnd, browse_info *info ) } if (lpBrowseInfo->lpszTitle) - SetWindowTextW( GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_TITLE), lpBrowseInfo->lpszTitle ); + SetWindowTextW(GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_TITLE), lpBrowseInfo->lpszTitle); else - ShowWindow( GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_TITLE), SW_HIDE ); + ShowWindow(GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_TITLE), SW_HIDE); - if (!(lpBrowseInfo->ulFlags & BIF_STATUSTEXT) - || (lpBrowseInfo->ulFlags & BIF_USENEWUI)) - ShowWindow( GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_STATUS), SW_HIDE ); + if (!(lpBrowseInfo->ulFlags & BIF_STATUSTEXT) || + (lpBrowseInfo->ulFlags & BIF_USENEWUI)) + { + ShowWindow(GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_STATUS), SW_HIDE); + } - /* Hide "Make New Folder" Button? */ - if ((lpBrowseInfo->ulFlags & BIF_NONEWFOLDERBUTTON) - || !(lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE)) - ShowWindow( GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_NEW_FOLDER), SW_HIDE ); + // Hide "Make New Folder" Button? + if ((lpBrowseInfo->ulFlags & BIF_NONEWFOLDERBUTTON) || + !(lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE)) + { + ShowWindow(GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_NEW_FOLDER), SW_HIDE); + } - /* Hide the editbox? */ + // Hide the editbox? if (!(lpBrowseInfo->ulFlags & BIF_EDITBOX)) { - ShowWindow( GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_FOLDER), SW_HIDE ); - ShowWindow( GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT), SW_HIDE ); + ShowWindow(GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_FOLDER), SW_HIDE); + ShowWindow(GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT), SW_HIDE); } - info->hwndTreeView = GetDlgItem( hWnd, IDC_BROWSE_FOR_FOLDER_TREEVIEW ); + info->hwndTreeView = GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_TREEVIEW); if (info->hwndTreeView) - { - InitializeTreeView( info ); - } + InitializeTreeView(info); else ERR("treeview control missing!\n"); - /* Register for change notifications */ + // Register for change notifications SHGetFolderLocation(NULL, CSIDL_DESKTOP, NULL, 0, &computer_pidl); ntreg.pidl = computer_pidl; @@ -698,14 +752,15 @@ static BOOL BrsFolder_OnCreate( HWND hWnd, browse_info *info ) info->hNotify = SHChangeNotifyRegister(hWnd, SHCNRF_InterruptLevel, SHCNE_ALLEVENTS, SHV_CHANGE_NOTIFY, 1, &ntreg); SetFocus(info->hwndTreeView); - browsefolder_callback( info->lpBrowseInfo, hWnd, BFFM_INITIALIZED, 0 ); + browsefolder_callback(info->lpBrowseInfo, hWnd, BFFM_INITIALIZED, 0); SHAutoComplete(GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT), (SHACF_FILESYS_ONLY | SHACF_URLHISTORY | SHACF_FILESYSTEM)); return TRUE; } -static HRESULT BrsFolder_NewFolder(browse_info *info) +static HRESULT +BrsFolder_NewFolder(browse_info *info) { DWORD flags = BrowseFlagsToSHCONTF(info->lpBrowseInfo->ulFlags); IShellFolder *desktop, *cur; @@ -720,14 +775,14 @@ static HRESULT BrsFolder_NewFolder(browse_info *info) int len; hr = SHGetDesktopFolder(&desktop); - if(FAILED(hr)) + if (FAILED(hr)) return hr; if (info->pidlRet) { - hr = desktop->BindToObject(info->pidlRet, 0, IID_PPV_ARG(IShellFolder, &cur)); + hr = desktop->BindToObject(info->pidlRet, NULL, IID_PPV_ARG(IShellFolder, &cur)); desktop->Release(); - if(FAILED(hr)) + if (FAILED(hr)) return hr; hr = SHGetPathFromIDListW(info->pidlRet, path); @@ -737,7 +792,7 @@ static HRESULT BrsFolder_NewFolder(browse_info *info) cur = desktop; hr = SHGetFolderPathW(NULL, CSIDL_DESKTOPDIRECTORY, NULL, SHGFP_TYPE_CURRENT, path); } - if(FAILED(hr)) + if (FAILED(hr)) return hr; if (!LoadStringW(shell32_hInstance, IDS_NEWFOLDER, wszNewFolder, _countof(wszNewFolder))) @@ -747,44 +802,45 @@ static HRESULT BrsFolder_NewFolder(browse_info *info) return E_FAIL; len = strlenW(path); - if(lenhwndTreeView); - if(!hParent) + if (!hParent) goto cleanup; TreeView_Expand(info->hwndTreeView, hParent, TVE_EXPAND); memset(&item, 0, sizeof(TVITEMW)); - item.mask = TVIF_PARAM|TVIF_STATE; + item.mask = TVIF_PARAM | TVIF_STATE; item.hItem = hParent; TreeView_GetItem(info->hwndTreeView, &item); item_data = (LPTV_ITEMDATA)item.lParam; - if(!item_data) + if (!item_data) goto cleanup; - if(item_data->pEnumIL) + if (item_data->pEnumIL) item_data->pEnumIL->Release(); hr = cur->EnumObjects(info->hwndTreeView, flags, &item_data->pEnumIL); - if(FAILED(hr)) + if (FAILED(hr)) goto cleanup; - /* Update treeview */ - if(!(item.state&TVIS_EXPANDEDONCE)) { + // Update treeview + if (!(item.state & TVIS_EXPANDEDONCE)) + { item.mask = TVIF_STATE; item.state = TVIS_EXPANDEDONCE; item.stateMask = TVIS_EXPANDEDONCE; TreeView_SetItem(info->hwndTreeView, &item); } - hr = cur->ParseDisplayName(NULL, NULL, name+len, NULL, &new_item, NULL); - if(FAILED(hr)) + hr = cur->ParseDisplayName(NULL, NULL, name + len, NULL, &new_item, NULL); + if (FAILED(hr)) goto cleanup; hAdded = InsertTreeViewItem(info, cur, new_item, item_data->lpifq, NULL, hParent); @@ -798,57 +854,65 @@ static HRESULT BrsFolder_NewFolder(browse_info *info) return hr; } -static BOOL BrsFolder_OnCommand( browse_info *info, UINT id ) +static BOOL +BrsFolder_OnCommand(browse_info *info, UINT id) { LPBROWSEINFOW lpBrowseInfo = info->lpBrowseInfo; WCHAR szPath[MAX_PATH]; switch (id) { - case IDOK: - /* Get the text */ - GetDlgItemTextW(info->hWnd, IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, szPath, _countof(szPath)); - StrTrimW(szPath, L" \t"); - - /* The original pidl is owned by the treeview and will be free'd. */ - if (!PathIsRelativeW(szPath) && PathIsDirectoryW(szPath)) + case IDOK: { - /* It's valid path */ - info->pidlRet = ILCreateFromPathW(szPath); + // Get the text + GetDlgItemTextW(info->hWnd, IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, szPath, _countof(szPath)); + StrTrimW(szPath, L" \t"); + + // The original pidl is owned by the treeview and will be free'd. + if (!PathIsRelativeW(szPath) && PathIsDirectoryW(szPath)) + { + // It's valid path + info->pidlRet = ILCreateFromPathW(szPath); + } + else + { + info->pidlRet = ILClone(info->pidlRet); + } + + if (info->pidlRet == NULL) // A null pidl would mean a cancel + info->pidlRet = _ILCreateDesktop(); + + pdump(info->pidlRet); + + if (lpBrowseInfo->pszDisplayName) + { + SHFILEINFOW fileInfo = { NULL }; + lpBrowseInfo->pszDisplayName[0] = UNICODE_NULL; + if (SHGetFileInfoW((LPCWSTR)info->pidlRet, 0, &fileInfo, sizeof(fileInfo), + SHGFI_PIDL | SHGFI_DISPLAYNAME)) + { + lstrcpynW(lpBrowseInfo->pszDisplayName, fileInfo.szDisplayName, MAX_PATH); + } + } + EndDialog(info->hWnd, 1); + return TRUE; } - else + case IDCANCEL: { - info->pidlRet = ILClone(info->pidlRet); + EndDialog(info->hWnd, 0); + return TRUE; } - if (info->pidlRet == NULL) /* A null pidl would mean a cancel */ - info->pidlRet = _ILCreateDesktop(); - pdump( info->pidlRet ); - if (lpBrowseInfo->pszDisplayName) + case IDC_BROWSE_FOR_FOLDER_NEW_FOLDER: { - SHFILEINFOW fileInfo = { NULL }; - lpBrowseInfo->pszDisplayName[0] = UNICODE_NULL; - if (SHGetFileInfoW((LPCWSTR)info->pidlRet, 0, &fileInfo, sizeof(fileInfo), - SHGFI_PIDL | SHGFI_DISPLAYNAME)) - { - lstrcpynW(lpBrowseInfo->pszDisplayName, fileInfo.szDisplayName, MAX_PATH); - } + BrsFolder_NewFolder(info); + return TRUE; } - EndDialog( info->hWnd, 1 ); - return TRUE; - - case IDCANCEL: - EndDialog( info->hWnd, 0 ); - return TRUE; - - case IDC_BROWSE_FOR_FOLDER_NEW_FOLDER: - BrsFolder_NewFolder(info); - return TRUE; } return FALSE; } -static BOOL BrsFolder_OnSetExpanded(browse_info *info, LPVOID selection, - BOOL is_str, HTREEITEM *pItem) +static BOOL +BrsFolder_OnSetExpanded(browse_info *info, LPVOID selection, BOOL is_str, HTREEITEM *pItem) { LPITEMIDLIST pidlSelection = (LPITEMIDLIST)selection; LPCITEMIDLIST pidlCurrent, pidlRoot; @@ -857,8 +921,9 @@ static BOOL BrsFolder_OnSetExpanded(browse_info *info, LPVOID selection, memset(&item, 0, sizeof(item)); - /* If 'selection' is a string, convert to a Shell ID List. */ - if (is_str) { + // If 'selection' is a string, convert to a Shell ID List. + if (is_str) + { IShellFolder *psfDesktop; HRESULT hr; @@ -868,9 +933,10 @@ static BOOL BrsFolder_OnSetExpanded(browse_info *info, LPVOID selection, hr = psfDesktop->ParseDisplayName(NULL, NULL, (LPWSTR)selection, NULL, &pidlSelection, NULL); psfDesktop->Release(); - if (FAILED(hr)) + if (FAILED(hr)) goto done; } + if (_ILIsDesktop(pidlSelection)) { item.hItem = TVI_ROOT; @@ -878,60 +944,68 @@ static BOOL BrsFolder_OnSetExpanded(browse_info *info, LPVOID selection, goto done; } - /* Move pidlCurrent behind the SHITEMIDs in pidlSelection, which are the root of - * the sub-tree currently displayed. */ + // Move pidlCurrent behind the SHITEMIDs in pidlSelection, which are the root of + // the sub-tree currently displayed. pidlRoot = info->lpBrowseInfo->pidlRoot; pidlCurrent = pidlSelection; - while (!_ILIsEmpty(pidlRoot) && _ILIsEqualSimple(pidlRoot, pidlCurrent)) { + while (!_ILIsEmpty(pidlRoot) && _ILIsEqualSimple(pidlRoot, pidlCurrent)) + { pidlRoot = ILGetNext(pidlRoot); pidlCurrent = ILGetNext(pidlCurrent); } - /* The given ID List is not part of the SHBrowseForFolder's current sub-tree. */ + // The given ID List is not part of the SHBrowseForFolder's current sub-tree. if (!_ILIsEmpty(pidlRoot)) goto done; - /* Initialize item to point to the first child of the root folder. */ + // Initialize item to point to the first child of the root folder. item.mask = TVIF_PARAM; item.hItem = TreeView_GetRoot(info->hwndTreeView); if (item.hItem) item.hItem = TreeView_GetChild(info->hwndTreeView, item.hItem); - /* Walk the tree along the nodes corresponding to the remaining ITEMIDLIST */ - while (item.hItem && !_ILIsEmpty(pidlCurrent)) { + // Walk the tree along the nodes corresponding to the remaining ITEMIDLIST + while (item.hItem && !_ILIsEmpty(pidlCurrent)) + { LPTV_ITEMDATA pItemData; TreeView_GetItem(info->hwndTreeView, &item); pItemData = (LPTV_ITEMDATA)item.lParam; - if (_ILIsEqualSimple(pItemData->lpi, pidlCurrent)) { + if (_ILIsEqualSimple(pItemData->lpi, pidlCurrent)) + { pidlCurrent = ILGetNext(pidlCurrent); - if (!_ILIsEmpty(pidlCurrent)) { - /* Only expand current node and move on to its first child, - * if we didn't already reach the last SHITEMID */ + if (!_ILIsEmpty(pidlCurrent)) + { + // Only expand current node and move on to its first child, + // if we didn't already reach the last SHITEMID TreeView_Expand(info->hwndTreeView, item.hItem, TVE_EXPAND); item.hItem = TreeView_GetChild(info->hwndTreeView, item.hItem); } - } else { + } + else + { item.hItem = TreeView_GetNextSibling(info->hwndTreeView, item.hItem); } } - if (_ILIsEmpty(pidlCurrent) && item.hItem) + if (_ILIsEmpty(pidlCurrent) && item.hItem) bResult = TRUE; done: if (pidlSelection && pidlSelection != selection) ILFree(pidlSelection); - if (pItem) + if (pItem) *pItem = item.hItem; - + return bResult; } -static BOOL BrsFolder_OnSetSelectionW(browse_info *info, LPVOID selection, BOOL is_str) { +static BOOL +BrsFolder_OnSetSelectionW(browse_info *info, LPVOID selection, BOOL is_str) +{ HTREEITEM hItem; BOOL bResult; @@ -943,11 +1017,13 @@ static BOOL BrsFolder_OnSetSelectionW(browse_info *info, LPVOID selection, BOOL return bResult; } -static BOOL BrsFolder_OnSetSelectionA(browse_info *info, LPVOID selection, BOOL is_str) { +static BOOL +BrsFolder_OnSetSelectionA(browse_info *info, LPVOID selection, BOOL is_str) +{ LPWSTR selectionW = NULL; BOOL result = FALSE; int length; - + if (!is_str) return BrsFolder_OnSetSelectionW(info, selection, is_str); @@ -962,7 +1038,8 @@ static BOOL BrsFolder_OnSetSelectionA(browse_info *info, LPVOID selection, BOOL return result; } -static INT BrsFolder_OnDestroy(browse_info *info) +static INT +BrsFolder_OnDestroy(browse_info *info) { if (info->layout) { @@ -975,8 +1052,9 @@ static INT BrsFolder_OnDestroy(browse_info *info) return 0; } -/* Find a treeview node by recursively walking the treeview */ -static HTREEITEM BrsFolder_FindItemByPidl(browse_info *info, LPCITEMIDLIST pidl, HTREEITEM hItem) +// Find a treeview node by recursively walking the treeview +static HTREEITEM +BrsFolder_FindItemByPidl(browse_info *info, LPCITEMIDLIST pidl, HTREEITEM hItem) { TV_ITEMDATA *item_data; HRESULT hr; @@ -984,7 +1062,7 @@ static HTREEITEM BrsFolder_FindItemByPidl(browse_info *info, LPCITEMIDLIST pidl, item_data = BrsFolder_GetDataFromItem(info, hItem); hr = item_data->lpsfParent->CompareIDs(0, item_data->lpifq, pidl); - if(SUCCEEDED(hr) && !HRESULT_CODE(hr)) + if (SUCCEEDED(hr) && !HRESULT_CODE(hr)) return hItem; hItem = TreeView_GetChild(info->hwndTreeView, hItem); @@ -999,7 +1077,8 @@ static HTREEITEM BrsFolder_FindItemByPidl(browse_info *info, LPCITEMIDLIST pidl, return NULL; } -static LRESULT BrsFolder_OnChange(browse_info *info, const LPCITEMIDLIST *pidls, LONG event) +static LRESULT +BrsFolder_OnChange(browse_info *info, const LPCITEMIDLIST *pidls, LONG event) { BOOL ret = TRUE; @@ -1023,15 +1102,15 @@ static LRESULT BrsFolder_OnChange(browse_info *info, const LPCITEMIDLIST *pidls, /************************************************************************* * BrsFolderDlgProc32 (not an exported API function) */ -static INT_PTR CALLBACK BrsFolderDlgProc( HWND hWnd, UINT msg, WPARAM wParam, - LPARAM lParam ) +static INT_PTR CALLBACK +BrsFolderDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { browse_info *info; - TRACE("hwnd=%p msg=%04x 0x%08lx 0x%08lx\n", hWnd, msg, wParam, lParam ); + TRACE("hwnd=%p msg=%04x 0x%08lx 0x%08lx\n", hWnd, msg, wParam, lParam); if (msg == WM_INITDIALOG) - return BrsFolder_OnCreate( hWnd, (browse_info*) lParam ); + return BrsFolder_OnCreate(hWnd, (browse_info *)lParam); info = (browse_info*)GetPropW(hWnd, L"__WINE_BRSFOLDERDLG_INFO"); if (!info) @@ -1039,56 +1118,56 @@ static INT_PTR CALLBACK BrsFolderDlgProc( HWND hWnd, UINT msg, WPARAM wParam, switch (msg) { - case WM_NOTIFY: - return BrsFolder_OnNotify( info, (UINT)wParam, (LPNMHDR)lParam); + case WM_NOTIFY: + return BrsFolder_OnNotify(info, (UINT)wParam, (LPNMHDR)lParam); - case WM_COMMAND: - return BrsFolder_OnCommand( info, wParam ); + case WM_COMMAND: + return BrsFolder_OnCommand(info, wParam); - case WM_GETMINMAXINFO: - ((LPMINMAXINFO)lParam)->ptMinTrackSize.x = info->szMin.cx; - ((LPMINMAXINFO)lParam)->ptMinTrackSize.y = info->szMin.cy; - return 0; + case WM_GETMINMAXINFO: + ((LPMINMAXINFO)lParam)->ptMinTrackSize.x = info->szMin.cx; + ((LPMINMAXINFO)lParam)->ptMinTrackSize.y = info->szMin.cy; + return 0; - case WM_SIZE: - if (info->layout) /* new style dialogs */ - LayoutUpdate(hWnd, info->layout, g_layout_info, LAYOUT_INFO_COUNT); - return 0; + case WM_SIZE: + if (info->layout) // New style dialogs + LayoutUpdate(hWnd, info->layout, g_layout_info, LAYOUT_INFO_COUNT); + return 0; - case BFFM_SETSTATUSTEXTA: - TRACE("Set status %s\n", debugstr_a((LPSTR)lParam)); - SetWindowTextA(GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_STATUS), (LPSTR)lParam); - break; + case BFFM_SETSTATUSTEXTA: + TRACE("Set status %s\n", debugstr_a((LPSTR)lParam)); + SetWindowTextA(GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_STATUS), (LPSTR)lParam); + break; - case BFFM_SETSTATUSTEXTW: - TRACE("Set status %s\n", debugstr_w((LPWSTR)lParam)); - SetWindowTextW(GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_STATUS), (LPWSTR)lParam); - break; + case BFFM_SETSTATUSTEXTW: + TRACE("Set status %s\n", debugstr_w((LPWSTR)lParam)); + SetWindowTextW(GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_STATUS), (LPWSTR)lParam); + break; - case BFFM_ENABLEOK: - TRACE("Enable %ld\n", lParam); - EnableWindow(GetDlgItem(hWnd, 1), lParam != 0); - break; + case BFFM_ENABLEOK: + TRACE("Enable %ld\n", lParam); + EnableWindow(GetDlgItem(hWnd, 1), lParam != 0); + break; - case BFFM_SETOKTEXT: /* unicode only */ - TRACE("Set OK text %s\n", debugstr_w((LPWSTR)lParam)); - SetWindowTextW(GetDlgItem(hWnd, 1), (LPWSTR)lParam); - break; + case BFFM_SETOKTEXT: // Unicode only + TRACE("Set OK text %s\n", debugstr_w((LPWSTR)lParam)); + SetWindowTextW(GetDlgItem(hWnd, 1), (LPWSTR)lParam); + break; - case BFFM_SETSELECTIONA: - return BrsFolder_OnSetSelectionA(info, (LPVOID)lParam, (BOOL)wParam); + case BFFM_SETSELECTIONA: + return BrsFolder_OnSetSelectionA(info, (LPVOID)lParam, (BOOL)wParam); - case BFFM_SETSELECTIONW: - return BrsFolder_OnSetSelectionW(info, (LPVOID)lParam, (BOOL)wParam); + case BFFM_SETSELECTIONW: + return BrsFolder_OnSetSelectionW(info, (LPVOID)lParam, (BOOL)wParam); - case BFFM_SETEXPANDED: /* unicode only */ - return BrsFolder_OnSetExpanded(info, (LPVOID)lParam, (BOOL)wParam, NULL); + case BFFM_SETEXPANDED: // Unicode only + return BrsFolder_OnSetExpanded(info, (LPVOID)lParam, (BOOL)wParam, NULL); - case SHV_CHANGE_NOTIFY: - return BrsFolder_OnChange(info, (const LPCITEMIDLIST*)wParam, (LONG)lParam); + case SHV_CHANGE_NOTIFY: + return BrsFolder_OnChange(info, (const LPCITEMIDLIST*)wParam, (LONG)lParam); - case WM_DESTROY: - return BrsFolder_OnDestroy(info); + case WM_DESTROY: + return BrsFolder_OnDestroy(info); } return FALSE; } @@ -1098,7 +1177,8 @@ static INT_PTR CALLBACK BrsFolderDlgProc( HWND hWnd, UINT msg, WPARAM wParam, * SHBrowseForFolder [SHELL32.@] */ EXTERN_C -LPITEMIDLIST WINAPI SHBrowseForFolderA (LPBROWSEINFOA lpbi) +LPITEMIDLIST WINAPI +SHBrowseForFolderA(LPBROWSEINFOA lpbi) { BROWSEINFOW bi; LPITEMIDLIST lpid; @@ -1116,9 +1196,9 @@ LPITEMIDLIST WINAPI SHBrowseForFolderA (LPBROWSEINFOA lpbi) if (lpbi->lpszTitle) { - len = MultiByteToWideChar( CP_ACP, 0, lpbi->lpszTitle, -1, NULL, 0 ); - title = (LPWSTR)HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ); - MultiByteToWideChar( CP_ACP, 0, lpbi->lpszTitle, -1, title, len ); + len = MultiByteToWideChar(CP_ACP, 0, lpbi->lpszTitle, -1, NULL, 0); + title = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + MultiByteToWideChar(CP_ACP, 0, lpbi->lpszTitle, -1, title, len); } else title = NULL; @@ -1128,12 +1208,12 @@ LPITEMIDLIST WINAPI SHBrowseForFolderA (LPBROWSEINFOA lpbi) bi.lpfn = lpbi->lpfn; bi.lParam = lpbi->lParam; bi.iImage = lpbi->iImage; - lpid = SHBrowseForFolderW( &bi ); + lpid = SHBrowseForFolderW(&bi); if (bi.pszDisplayName) { - WideCharToMultiByte( CP_ACP, 0, bi.pszDisplayName, -1, - lpbi->pszDisplayName, MAX_PATH, 0, NULL); - HeapFree( GetProcessHeap(), 0, bi.pszDisplayName ); + WideCharToMultiByte(CP_ACP, 0, bi.pszDisplayName, -1, + lpbi->pszDisplayName, MAX_PATH, 0, NULL); + HeapFree(GetProcessHeap(), 0, bi.pszDisplayName); } HeapFree(GetProcessHeap(), 0, title); lpbi->iImage = bi.iImage; @@ -1144,7 +1224,8 @@ LPITEMIDLIST WINAPI SHBrowseForFolderA (LPBROWSEINFOA lpbi) * SHBrowseForFolderW [SHELL32.@] */ EXTERN_C -LPITEMIDLIST WINAPI SHBrowseForFolderW(LPBROWSEINFOW lpbi) +LPITEMIDLIST WINAPI +SHBrowseForFolderW(LPBROWSEINFOW lpbi) { browse_info info = { NULL }; info.lpBrowseInfo = lpbi; From af03438aba0d1dd273d6731b52081f35d023379b Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Thu, 23 May 2024 12:05:37 +0900 Subject: [PATCH 181/182] [SHELL32] brsfolder.cpp: Refactoring Modernize source code. Improve readability and reduce confusing. JIRA issue: CORE-17340 - Rename browse_info as BrsFolder. - Rename TV_ITEMDATA as BrsItemData. - Rename InsertTreeViewItem as BrsFolder_InsertItem. - Rename InitializeTreeView as BrsFolder_InitTreeView. - Rename GetIcon as BrsFolder_GetIcon. - Rename GetNormalAndSelectedIcons as BrsFolder_GetIconPair. - Rename GetName as BrsFolder_GetName. - Fix some confusing and/or non-standard variable names. - Use ATL to simplify logics. --- dll/win32/shell32/brsfolder.cpp | 811 +++++++++++++------------------- 1 file changed, 340 insertions(+), 471 deletions(-) diff --git a/dll/win32/shell32/brsfolder.cpp b/dll/win32/shell32/brsfolder.cpp index 15f76c44960..eade721813a 100644 --- a/dll/win32/shell32/brsfolder.cpp +++ b/dll/win32/shell32/brsfolder.cpp @@ -6,11 +6,7 @@ * Copyright 2024 Katayama Hirofumi MZ */ -/* - * FIXME: - * - many memory leaks - * - many flags unimplemented - */ +// FIXME: Many flags unimplemented #include "precomp.h" @@ -20,24 +16,24 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell); #define SHV_CHANGE_NOTIFY (WM_USER + 0x1111) -typedef struct tagbrowse_info +struct BrsFolder { + LPBROWSEINFOW lpBrowseInfo; HWND hWnd; HWND hwndTreeView; - LPBROWSEINFOW lpBrowseInfo; - LPITEMIDLIST pidlRet; + PIDLIST_ABSOLUTE pidlRet; LAYOUT_DATA* layout; // Filled by LayoutInit, used by LayoutUpdate SIZE szMin; - ULONG hNotify; // Change notification handle -} browse_info; + ULONG hChangeNotify; // Change notification handle +}; -typedef struct tagTV_ITEMDATA +struct BrsItemData { - LPSHELLFOLDER lpsfParent; // IShellFolder of the parent - LPITEMIDLIST lpi; // PIDL relative to parent - LPITEMIDLIST lpifq; // Fully qualified PIDL - IEnumIDList *pEnumIL; // Children iterator -} TV_ITEMDATA, *LPTV_ITEMDATA; + CComPtr lpsfParent; // IShellFolder of the parent + CComHeapPtr pidlChild; // PIDL relative to parent + CComHeapPtr pidlFull; // Fully qualified PIDL + CComPtr pEnumIL; // Children iterator +}; static const LAYOUT_INFO g_layout_info[] = { @@ -50,78 +46,67 @@ static const LAYOUT_INFO g_layout_info[] = { IDCANCEL, BF_BOTTOM | BF_RIGHT }, }; -#define LAYOUT_INFO_COUNT (sizeof(g_layout_info)/sizeof(g_layout_info[0])) - -#define SUPPORTEDFLAGS (BIF_STATUSTEXT | BIF_BROWSEFORCOMPUTER | BIF_RETURNFSANCESTORS | \ - BIF_RETURNONLYFSDIRS | BIF_NONEWFOLDERBUTTON | BIF_NEWDIALOGSTYLE | \ - BIF_BROWSEINCLUDEFILES) - -static void -FillTreeView(browse_info*, LPSHELLFOLDER, LPITEMIDLIST, HTREEITEM, IEnumIDList*); +#define SUPPORTED_FLAGS (BIF_STATUSTEXT | BIF_BROWSEFORCOMPUTER | BIF_RETURNFSANCESTORS | \ + BIF_RETURNONLYFSDIRS | BIF_NONEWFOLDERBUTTON | BIF_NEWDIALOGSTYLE | \ + BIF_BROWSEINCLUDEFILES) static HTREEITEM -InsertTreeViewItem( - browse_info *info, +BrsFolder_InsertItem( + BrsFolder *info, IShellFolder *lpsf, - LPCITEMIDLIST pidl, - LPCITEMIDLIST pidlParent, - IEnumIDList *pEnumIL, + PCIDLIST_RELATIVE pidlChild, + PCIDLIST_ABSOLUTE pidlParent, + IEnumIDList* pEnumIL, HTREEITEM hParent); static inline DWORD BrowseFlagsToSHCONTF(UINT ulFlags) { - return SHCONTF_FOLDERS | (ulFlags & BIF_BROWSEINCLUDEFILES ? SHCONTF_NONFOLDERS : 0); + return SHCONTF_FOLDERS | ((ulFlags & BIF_BROWSEINCLUDEFILES) ? SHCONTF_NONFOLDERS : 0); } static void -browsefolder_callback(LPBROWSEINFOW lpBrowseInfo, HWND hWnd, UINT msg, LPARAM param) +BrsFolder_Callback(LPBROWSEINFOW lpBrowseInfo, HWND hWnd, UINT uMsg, LPARAM lParam) { if (!lpBrowseInfo->lpfn) return; - lpBrowseInfo->lpfn(hWnd, msg, param, lpBrowseInfo->lParam); + lpBrowseInfo->lpfn(hWnd, uMsg, lParam, lpBrowseInfo->lParam); } -static LPTV_ITEMDATA -BrsFolder_GetDataFromItem(browse_info *info, HTREEITEM hItem) +static BrsItemData * +BrsFolder_GetItemData(BrsFolder *info, HTREEITEM hItem) { TVITEMW item = { TVIF_HANDLE | TVIF_PARAM }; item.hItem = hItem; if (!TreeView_GetItem(info->hwndTreeView, &item)) + { ERR("TreeView_GetItem failed\n"); - return (LPTV_ITEMDATA)item.lParam; + return NULL; + } + return (BrsItemData *)item.lParam; } /****************************************************************************** - * InitializeTreeView [Internal] + * BrsFolder_InitTreeView [Internal] * * Called from WM_INITDIALOG handler. - * - * PARAMS - * hwndParent [I] The BrowseForFolder dialog - * root [I] ITEMIDLIST of the root shell folder */ static void -InitializeTreeView(browse_info *info) +BrsFolder_InitTreeView(BrsFolder *info) { - LPITEMIDLIST pidlParent, pidlChild; HIMAGELIST hImageList; HRESULT hr; - IShellFolder *lpsfParent, *lpsfRoot; - IEnumIDList *pEnumChildren = NULL; - HTREEITEM item; - DWORD flags; - LPCITEMIDLIST root = info->lpBrowseInfo->pidlRoot; - - TRACE("%p\n", info); + CComPtr lpsfParent, lpsfRoot; + CComPtr pEnumChildren; + HTREEITEM hItem; Shell_GetImageLists(NULL, &hImageList); if (hImageList) TreeView_SetImageList(info->hwndTreeView, hImageList, 0); - /* We want to call InsertTreeViewItem down the code, in order to insert - * the root item of the treeview. Due to InsertTreeViewItem's signature, + /* We want to call BrsFolder_InsertItem down the code, in order to insert + * the root item of the treeview. Due to BrsFolder_InsertItem's signature, * we need the following to do this: * * + An ITEMIDLIST corresponding to _the parent_ of root. @@ -132,119 +117,82 @@ InitializeTreeView(browse_info *info) * If root is 'Desktop', then root's parent is also 'Desktop'. */ - pidlParent = ILClone(root); + PCIDLIST_ABSOLUTE pidlRoot = info->lpBrowseInfo->pidlRoot; + CComHeapPtr pidlParent(ILClone(pidlRoot)); ILRemoveLastID(pidlParent); - pidlChild = ILClone(ILFindLastID(root)); + CComHeapPtr pidlChild(ILClone(ILFindLastID(pidlRoot))); if (_ILIsDesktop(pidlParent)) { hr = SHGetDesktopFolder(&lpsfParent); + if (FAILED_UNEXPECTEDLY(hr)) + return; } else { - IShellFolder *lpsfDesktop; + CComPtr lpsfDesktop; hr = SHGetDesktopFolder(&lpsfDesktop); - if (FAILED(hr)) - { - WARN("SHGetDesktopFolder failed! hr = %08x\n", hr); - ILFree(pidlChild); - ILFree(pidlParent); + if (FAILED_UNEXPECTEDLY(hr)) return; - } - hr = lpsfDesktop->BindToObject(pidlParent, NULL, IID_PPV_ARG(IShellFolder, &lpsfParent)); - lpsfDesktop->Release(); - } - if (FAILED(hr)) - { - WARN("Could not bind to parent shell folder! hr = %08x\n", hr); - ILFree(pidlChild); - ILFree(pidlParent); - return; + hr = lpsfDesktop->BindToObject(pidlParent, NULL, IID_PPV_ARG(IShellFolder, &lpsfParent)); + if (FAILED_UNEXPECTEDLY(hr)) + return; } if (!_ILIsEmpty(pidlChild)) - { hr = lpsfParent->BindToObject(pidlChild, NULL, IID_PPV_ARG(IShellFolder, &lpsfRoot)); - } else - { - lpsfRoot = lpsfParent; - hr = lpsfParent->AddRef(); - } + lpsfRoot.Attach(lpsfParent); - if (FAILED(hr)) - { - WARN("Could not bind to root shell folder! hr = %08x\n", hr); - lpsfParent->Release(); - ILFree(pidlChild); - ILFree(pidlParent); + if (FAILED_UNEXPECTEDLY(hr)) return; - } - flags = BrowseFlagsToSHCONTF(info->lpBrowseInfo->ulFlags); + DWORD flags = BrowseFlagsToSHCONTF(info->lpBrowseInfo->ulFlags); hr = lpsfRoot->EnumObjects(info->hWnd, flags, &pEnumChildren); - if (FAILED(hr)) - { - WARN("Could not get child iterator! hr = %08x\n", hr); - lpsfParent->Release(); - lpsfRoot->Release(); - ILFree(pidlChild); - ILFree(pidlParent); + if (FAILED_UNEXPECTEDLY(hr)) return; - } TreeView_DeleteItem(info->hwndTreeView, TVI_ROOT); - item = InsertTreeViewItem(info, lpsfParent, pidlChild, - pidlParent, pEnumChildren, TVI_ROOT); - TreeView_Expand(info->hwndTreeView, item, TVE_EXPAND); - - ILFree(pidlChild); - ILFree(pidlParent); - lpsfRoot->Release(); - lpsfParent->Release(); + hItem = BrsFolder_InsertItem(info, lpsfParent, pidlChild, pidlParent, pEnumChildren, TVI_ROOT); + TreeView_Expand(info->hwndTreeView, hItem, TVE_EXPAND); } -static int -GetIcon(LPCITEMIDLIST lpi, UINT uFlags) +static INT +BrsFolder_GetIcon(PCIDLIST_ABSOLUTE pidl, UINT uFlags) { SHFILEINFOW sfi; - SHGetFileInfoW((LPCWSTR)lpi, 0, &sfi, sizeof(SHFILEINFOW), uFlags); + SHGetFileInfoW((LPCWSTR)pidl, 0, &sfi, sizeof(sfi), uFlags); return sfi.iIcon; } static void -GetNormalAndSelectedIcons(LPITEMIDLIST lpifq, LPTVITEMW lpTV_ITEM) +BrsFolder_GetIconPair(PCIDLIST_ABSOLUTE pidl, LPTVITEMW pItem) { - LPITEMIDLIST pidlDesktop = NULL; DWORD flags; - TRACE("%p %p\n", lpifq, lpTV_ITEM); - - if (!lpifq) + CComHeapPtr pidlDesktop; + if (!pidl) { - pidlDesktop = _ILCreateDesktop(); - lpifq = pidlDesktop; + pidlDesktop.Attach(_ILCreateDesktop()); + pidl = pidlDesktop; } flags = SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON; - lpTV_ITEM->iImage = GetIcon(lpifq, flags); + pItem->iImage = BrsFolder_GetIcon(pidl, flags); flags = SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_OPENICON; - lpTV_ITEM->iSelectedImage = GetIcon(lpifq, flags); - - if (pidlDesktop) - ILFree(pidlDesktop); + pItem->iSelectedImage = BrsFolder_GetIcon(pidl, flags); } /****************************************************************************** - * GetName [Internal] + * BrsFolder_GetName [Internal] * * Query a shell folder for the display name of one of its children * * PARAMS * lpsf [I] IShellFolder interface of the folder to be queried. - * lpi [I] ITEMIDLIST of the child, relative to parent + * pidlChild [I] ITEMIDLIST of the child, relative to parent * dwFlags [I] as in IShellFolder::GetDisplayNameOf * lpFriendlyName [O] The desired display name in unicode * @@ -253,32 +201,30 @@ GetNormalAndSelectedIcons(LPITEMIDLIST lpifq, LPTVITEMW lpTV_ITEM) * Failure: FALSE */ static BOOL -GetName( - LPSHELLFOLDER lpsf, - LPCITEMIDLIST lpi, +BrsFolder_GetName( + IShellFolder *lpsf, + PCIDLIST_RELATIVE pidlChild, DWORD dwFlags, LPWSTR lpFriendlyName) { - BOOL bSuccess = TRUE; + BOOL bSuccess = FALSE; STRRET str; - TRACE("%p %p %x %p\n", lpsf, lpi, dwFlags, lpFriendlyName); - if (SUCCEEDED(lpsf->GetDisplayNameOf(lpi, dwFlags, &str))) - bSuccess = StrRetToStrNW(lpFriendlyName, MAX_PATH, &str, lpi); - else - bSuccess = FALSE; + TRACE("%p %p %x %p\n", lpsf, pidlChild, dwFlags, lpFriendlyName); + if (!FAILED_UNEXPECTEDLY(lpsf->GetDisplayNameOf(pidlChild, dwFlags, &str))) + bSuccess = StrRetToStrNW(lpFriendlyName, MAX_PATH, &str, pidlChild); TRACE("-- %s\n", debugstr_w(lpFriendlyName)); return bSuccess; } /****************************************************************************** - * InsertTreeViewItem [Internal] + * BrsFolder_InsertItem [Internal] * * PARAMS * info [I] data for the dialog * lpsf [I] IShellFolder interface of the item's parent shell folder - * pidl [I] ITEMIDLIST of the child to insert, relative to parent + * pidlChild [I] ITEMIDLIST of the child to insert, relative to parent * pidlParent [I] ITEMIDLIST of the parent shell folder * pEnumIL [I] Iterator for the children of the item to be inserted * hParent [I] The treeview-item that represents the parent shell folder @@ -288,53 +234,44 @@ GetName( * Failure: NULL */ static HTREEITEM -InsertTreeViewItem( - browse_info *info, +BrsFolder_InsertItem( + BrsFolder *info, IShellFolder *lpsf, - LPCITEMIDLIST pidl, - LPCITEMIDLIST pidlParent, - IEnumIDList *pEnumIL, + PCIDLIST_RELATIVE pidlChild, + PCIDLIST_ABSOLUTE pidlParent, + IEnumIDList* pEnumIL, HTREEITEM hParent) { - TVITEMW tvi; - TVINSERTSTRUCTW tvins; - WCHAR szBuff[MAX_PATH]; - LPTV_ITEMDATA lptvid = NULL; - - tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; - - tvi.cChildren= pEnumIL ? 1 : 0; - tvi.mask |= TVIF_CHILDREN; - - if (!GetName(lpsf, pidl, SHGDN_NORMAL, szBuff)) + WCHAR szName[MAX_PATH]; + if (!BrsFolder_GetName(lpsf, pidlChild, SHGDN_NORMAL, szName)) return NULL; - lptvid = (LPTV_ITEMDATA)SHAlloc(sizeof(TV_ITEMDATA)); - if (!lptvid) - return NULL; + BrsItemData *pItemData = new BrsItemData(); - tvi.pszText = szBuff; - tvi.cchTextMax = MAX_PATH; - tvi.lParam = (LPARAM)lptvid; + TVITEMW item = { TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM | TVIF_CHILDREN }; + item.cChildren = (pEnumIL ? 1 : 0); + item.pszText = szName; + item.cchTextMax = _countof(szName); + item.lParam = (LPARAM)pItemData; - lpsf->AddRef(); - lptvid->lpsfParent = lpsf; - lptvid->lpi = ILClone(pidl); - lptvid->lpifq = pidlParent ? ILCombine(pidlParent, pidl) : ILClone(pidl); - lptvid->pEnumIL = pEnumIL; - GetNormalAndSelectedIcons(lptvid->lpifq, &tvi); + PIDLIST_ABSOLUTE pidlFull = + (pidlParent ? ILCombine(pidlParent, pidlChild) : ILClone(pidlChild)); + BrsFolder_GetIconPair(pidlFull, &item); - tvins.item = tvi; - tvins.hInsertAfter = NULL; - tvins.hParent = hParent; + pItemData->lpsfParent.Attach(lpsf); + pItemData->pidlChild.Attach(ILClone(pidlChild)); + pItemData->pidlFull.Attach(pidlFull); + pItemData->pEnumIL.Attach(pEnumIL); + TVINSERTSTRUCTW tvins = { hParent }; + tvins.item = item; return TreeView_InsertItem(info->hwndTreeView, &tvins); } /****************************************************************************** - * FillTreeView [Internal] + * BrsFolder_Expand [Internal] * - * For each child (given by lpe) of the parent shell folder, which is given by + * For each child (given by pEnum) of the parent shell folder, which is given by * lpsf and whose PIDL is pidl, insert a treeview-item right under hParent * * PARAMS @@ -342,70 +279,63 @@ InsertTreeViewItem( * lpsf [I] IShellFolder interface of the parent shell folder * pidl [I] ITEMIDLIST of the parent shell folder * hParent [I] The treeview item that represents the parent shell folder - * lpe [I] An iterator for the children of the parent shell folder + * pEnum [I] An iterator for the children of the parent shell folder */ static void -FillTreeView( - browse_info *info, +BrsFolder_Expand( + BrsFolder *info, IShellFolder *lpsf, - LPITEMIDLIST pidl, + PCIDLIST_ABSOLUTE pidl, HTREEITEM hParent, - IEnumIDList *lpe) + IEnumIDList* pEnum) { - LPITEMIDLIST pidlTemp = 0; - ULONG ulFetched; - HRESULT hr; - HWND hwnd = GetParent(info->hwndTreeView); + CComHeapPtr pidlTemp; + ULONG ulFetched; + HRESULT hr; + HWND hwnd = GetParent(info->hwndTreeView); - TRACE("%p %p %p %p\n", lpsf, pidl, hParent, lpe); + TRACE("%p %p %p %p\n", lpsf, pidl, hParent, pEnum); // No IEnumIDList -> No children - if (!lpe) + if (!pEnum) return; SetCapture(hwnd); - SetCursor(LoadCursorA(NULL, (LPSTR)IDC_WAIT)); + SetCursor(LoadCursorW(NULL, (LPWSTR)IDC_WAIT)); - while (S_OK == lpe->Next(1, &pidlTemp, &ulFetched)) + while (S_OK == pEnum->Next(1, &pidlTemp, &ulFetched)) { ULONG ulAttrs = SFGAO_HASSUBFOLDER | SFGAO_FOLDER; - IEnumIDList *pEnumIL = NULL; - IShellFolder *pSFChild = NULL; + CComPtr pEnumIL; + CComPtr pSFChild; lpsf->GetAttributesOf(1, (LPCITEMIDLIST *)&pidlTemp, &ulAttrs); if (ulAttrs & SFGAO_FOLDER) { hr = lpsf->BindToObject(pidlTemp, NULL, IID_PPV_ARG(IShellFolder, &pSFChild)); - if (SUCCEEDED(hr)) + if (!FAILED_UNEXPECTEDLY(hr)) { DWORD flags = BrowseFlagsToSHCONTF(info->lpBrowseInfo->ulFlags); hr = pSFChild->EnumObjects(hwnd, flags, &pEnumIL); if (hr == S_OK) { - if ((pEnumIL->Skip(1) != S_OK) || - FAILED(pEnumIL->Reset())) + if ((pEnumIL->Skip(1) != S_OK) || FAILED(pEnumIL->Reset())) { - pEnumIL->Release(); - pEnumIL = NULL; + pEnumIL.Release(); } } - pSFChild->Release(); } } - if (ulAttrs != (ulAttrs & SFGAO_FOLDER)) { - if (!InsertTreeViewItem(info, lpsf, pidlTemp, pidl, pEnumIL, hParent)) + if (!BrsFolder_InsertItem(info, lpsf, pidlTemp, pidl, pEnumIL, hParent)) goto done; } - - SHFree(pidlTemp); // Finally, free the pidl that the shell gave us... - pidlTemp = NULL; + pidlTemp.Free(); // Finally, free the pidl that the shell gave us... } done: ReleaseCapture(); SetCursor(LoadCursorW(NULL, (LPWSTR)IDC_ARROW)); - SHFree(pidlTemp); } static inline BOOL @@ -418,28 +348,30 @@ PIDLIsType(LPCITEMIDLIST pidl, PIDLTYPE type) } static void -BrsFolder_CheckValidSelection(browse_info *info, LPTV_ITEMDATA lptvid) +BrsFolder_CheckValidSelection(BrsFolder *info, BrsItemData *pItemData) { LPBROWSEINFOW lpBrowseInfo = info->lpBrowseInfo; - LPCITEMIDLIST pidl = lptvid->lpi; - BOOL bEnabled = TRUE; + PCIDLIST_RELATIVE pidlChild = pItemData->pidlChild; DWORD dwAttributes; - HRESULT r; + HRESULT hr; - if ((lpBrowseInfo->ulFlags & BIF_BROWSEFORCOMPUTER) && - !PIDLIsType(pidl, PT_COMP)) + BOOL bEnabled = TRUE; + if ((lpBrowseInfo->ulFlags & BIF_BROWSEFORCOMPUTER) && !PIDLIsType(pidlChild, PT_COMP)) bEnabled = FALSE; + if (lpBrowseInfo->ulFlags & BIF_RETURNFSANCESTORS) { dwAttributes = SFGAO_FILESYSANCESTOR | SFGAO_FILESYSTEM; - r = lptvid->lpsfParent->GetAttributesOf(1, (LPCITEMIDLIST *)&lptvid->lpi, &dwAttributes); - if (FAILED(r) || !(dwAttributes & (SFGAO_FILESYSANCESTOR | SFGAO_FILESYSTEM))) + hr = pItemData->lpsfParent->GetAttributesOf(1, (LPCITEMIDLIST *)&pItemData->pidlChild, + &dwAttributes); + if (FAILED(hr) || !(dwAttributes & (SFGAO_FILESYSANCESTOR | SFGAO_FILESYSTEM))) bEnabled = FALSE; } dwAttributes = SFGAO_FOLDER | SFGAO_FILESYSTEM; - r = lptvid->lpsfParent->GetAttributesOf(1, (LPCITEMIDLIST *)&lptvid->lpi, &dwAttributes); - if (FAILED(r) || + hr = pItemData->lpsfParent->GetAttributesOf(1, (LPCITEMIDLIST *)&pItemData->pidlChild, + &dwAttributes); + if (FAILED_UNEXPECTEDLY(hr) || ((dwAttributes & (SFGAO_FOLDER | SFGAO_FILESYSTEM)) != (SFGAO_FOLDER | SFGAO_FILESYSTEM))) { if (lpBrowseInfo->ulFlags & BIF_RETURNONLYFSDIRS) @@ -455,81 +387,71 @@ BrsFolder_CheckValidSelection(browse_info *info, LPTV_ITEMDATA lptvid) } static LRESULT -BrsFolder_Treeview_Delete(browse_info *info, NMTREEVIEWW *pnmtv) +BrsFolder_Treeview_Delete(BrsFolder *info, NMTREEVIEWW *pnmtv) { - LPTV_ITEMDATA lptvid = (LPTV_ITEMDATA)pnmtv->itemOld.lParam; + BrsItemData *pItemData = (BrsItemData *)pnmtv->itemOld.lParam; - TRACE("TVN_DELETEITEMA/W %p\n", lptvid); + TRACE("TVN_DELETEITEMA/W %p\n", pItemData); - lptvid->lpsfParent->Release(); - if (lptvid->pEnumIL) - lptvid->pEnumIL->Release(); - SHFree(lptvid->lpi); - SHFree(lptvid->lpifq); - SHFree(lptvid); + delete pItemData; return 0; } static LRESULT -BrsFolder_Treeview_Expand(browse_info *info, NMTREEVIEWW *pnmtv) +BrsFolder_Treeview_Expand(BrsFolder *info, NMTREEVIEWW *pnmtv) { - IShellFolder *lpsf2 = NULL; - LPTV_ITEMDATA lptvid = (LPTV_ITEMDATA)pnmtv->itemNew.lParam; - HRESULT r; + BrsItemData *pItemData = (BrsItemData *)pnmtv->itemNew.lParam; TRACE("TVN_ITEMEXPANDINGA/W\n"); if ((pnmtv->itemNew.state & TVIS_EXPANDEDONCE)) return 0; - if (!_ILIsEmpty(lptvid->lpi)) + HRESULT hr = S_OK; + CComPtr lpsf2; + if (!_ILIsEmpty(pItemData->pidlChild)) { - r = lptvid->lpsfParent->BindToObject(lptvid->lpi, NULL, IID_PPV_ARG(IShellFolder, &lpsf2)); + hr = pItemData->lpsfParent->BindToObject(pItemData->pidlChild, NULL, + IID_PPV_ARG(IShellFolder, &lpsf2)); } else { - lpsf2 = lptvid->lpsfParent; - lpsf2->AddRef(); - r = S_OK; + lpsf2.Attach(pItemData->lpsfParent); } - if (SUCCEEDED(r)) - { - FillTreeView(info, lpsf2, lptvid->lpifq, pnmtv->itemNew.hItem, lptvid->pEnumIL); - lpsf2->Release(); - } + HTREEITEM hItem = pnmtv->itemNew.hItem; + if (!FAILED_UNEXPECTEDLY(hr)) + BrsFolder_Expand(info, lpsf2, pItemData->pidlFull, hItem, pItemData->pEnumIL); // My Computer is already sorted and trying to do a simple text // sort will only mess things up - if (!_ILIsMyComputer(lptvid->lpi)) - TreeView_SortChildren(info->hwndTreeView, pnmtv->itemNew.hItem, FALSE); + if (!_ILIsMyComputer(pItemData->pidlChild)) + TreeView_SortChildren(info->hwndTreeView, hItem, FALSE); return 0; } static HRESULT -BrsFolder_Treeview_Changed(browse_info *info, NMTREEVIEWW *pnmtv) +BrsFolder_Treeview_Changed(BrsFolder *info, NMTREEVIEWW *pnmtv) { - LPTV_ITEMDATA lptvid = (LPTV_ITEMDATA) pnmtv->itemNew.lParam; - WCHAR name[MAX_PATH]; + BrsItemData *pItemData = (BrsItemData *)pnmtv->itemNew.lParam; ILFree(info->pidlRet); - info->pidlRet = ILClone(lptvid->lpifq); + info->pidlRet = ILClone(pItemData->pidlFull); - if (GetName(lptvid->lpsfParent, lptvid->lpi, SHGDN_NORMAL, name)) - SetWindowTextW(GetDlgItem(info->hWnd, IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT), name); + WCHAR szName[MAX_PATH]; + if (BrsFolder_GetName(pItemData->lpsfParent, pItemData->pidlChild, SHGDN_NORMAL, szName)) + SetDlgItemTextW(info->hWnd, IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, szName); - browsefolder_callback(info->lpBrowseInfo, info->hWnd, BFFM_SELCHANGED, - (LPARAM)info->pidlRet); - BrsFolder_CheckValidSelection(info, lptvid); + BrsFolder_Callback(info->lpBrowseInfo, info->hWnd, BFFM_SELCHANGED, (LPARAM)info->pidlRet); + BrsFolder_CheckValidSelection(info, pItemData); return S_OK; } static LRESULT -BrsFolder_Treeview_Rename(browse_info *info, NMTVDISPINFOW *pnmtv) +BrsFolder_Treeview_Rename(BrsFolder *info, NMTVDISPINFOW *pnmtv) { - LPTV_ITEMDATA item_data; - WCHAR old_path[MAX_PATH], new_path[MAX_PATH], *p; + WCHAR old_path[MAX_PATH], new_path[MAX_PATH]; NMTREEVIEWW nmtv; TVITEMW item; @@ -537,23 +459,21 @@ BrsFolder_Treeview_Rename(browse_info *info, NMTVDISPINFOW *pnmtv) return 0; item.hItem = TreeView_GetSelection(info->hwndTreeView); - item_data = BrsFolder_GetDataFromItem(info, item.hItem); + BrsItemData *item_data = BrsFolder_GetItemData(info, item.hItem); - SHGetPathFromIDListW(item_data->lpifq, old_path); - if (!(p = strrchrW(old_path, '\\'))) - return 0; - p = new_path + (p - old_path + 1); - memcpy(new_path, old_path, (p-new_path) * sizeof(WCHAR)); - strcpyW(p, pnmtv->item.pszText); + SHGetPathFromIDListW(item_data->pidlFull, old_path); + lstrcpynW(new_path, old_path, _countof(new_path)); + PathRemoveFileSpecW(new_path); + PathAppendW(new_path, pnmtv->item.pszText); if (!MoveFileW(old_path, new_path)) return 0; - SHFree(item_data->lpifq); - SHFree(item_data->lpi); - item_data->lpifq = SHSimpleIDListFromPathW(new_path); + item_data->pidlFull.Free(); + item_data->pidlChild.Free(); + item_data->pidlFull.Attach(SHSimpleIDListFromPathW(new_path)); item_data->lpsfParent->ParseDisplayName(NULL, NULL, pnmtv->item.pszText, NULL, - &item_data->lpi, NULL); + &item_data->pidlChild, NULL); item.mask = TVIF_HANDLE | TVIF_TEXT; item.pszText = pnmtv->item.pszText; @@ -565,7 +485,7 @@ BrsFolder_Treeview_Rename(browse_info *info, NMTVDISPINFOW *pnmtv) } static HRESULT -BrsFolder_Rename(browse_info *info, HTREEITEM hItem) +BrsFolder_Rename(BrsFolder *info, HTREEITEM hItem) { TreeView_SelectItem(info->hwndTreeView, hItem); TreeView_EditLabel(info->hwndTreeView, hItem); @@ -573,17 +493,16 @@ BrsFolder_Rename(browse_info *info, HTREEITEM hItem) } static void -BrsFolder_Delete(browse_info *info, HTREEITEM selected_item) +BrsFolder_Delete(BrsFolder *info, HTREEITEM hItem) { - TV_ITEMDATA *item_data; SHFILEOPSTRUCTW fileop = { info->hwndTreeView }; WCHAR szzFrom[MAX_PATH + 1]; // Get item_data - item_data = BrsFolder_GetDataFromItem(info, selected_item); + BrsItemData *item_data = BrsFolder_GetItemData(info, hItem); // Get the path - if (!SHGetPathFromIDListW(item_data->lpifq, szzFrom)) + if (!SHGetPathFromIDListW(item_data->pidlFull, szzFrom)) { ERR("SHGetPathFromIDListW failed\n"); return; @@ -598,31 +517,28 @@ BrsFolder_Delete(browse_info *info, HTREEITEM selected_item) } static LRESULT -BrsFolder_Treeview_Keydown(browse_info *info, LPNMTVKEYDOWN keydown) +BrsFolder_Treeview_Keydown(BrsFolder *info, LPNMTVKEYDOWN keydown) { - HTREEITEM selected_item; - // Old dialog doesn't support those advanced features if (!(info->lpBrowseInfo->ulFlags & BIF_USENEWUI)) return 0; - selected_item = TreeView_GetSelection(info->hwndTreeView); + HTREEITEM hItem = TreeView_GetSelection(info->hwndTreeView); switch (keydown->wVKey) { case VK_F2: - BrsFolder_Rename(info, selected_item); + BrsFolder_Rename(info, hItem); break; - case VK_DELETE: - BrsFolder_Delete(info, selected_item); + BrsFolder_Delete(info, hItem); break; } return 0; } static LRESULT -BrsFolder_OnNotify(browse_info *info, UINT CtlID, LPNMHDR lpnmh) +BrsFolder_OnNotify(BrsFolder *info, UINT CtlID, LPNMHDR lpnmh) { NMTREEVIEWW *pnmtv = (NMTREEVIEWW *)lpnmh; @@ -660,11 +576,10 @@ BrsFolder_OnNotify(browse_info *info, UINT CtlID, LPNMHDR lpnmh) return 0; } - static BOOL -BrsFolder_OnCreate(HWND hWnd, browse_info *info) +BrsFolder_OnInitDialog(HWND hWnd, BrsFolder *info) { - LPITEMIDLIST computer_pidl; + CComHeapPtr pidlDesktop; SHChangeNotifyEntry ntreg; LPBROWSEINFOW lpBrowseInfo = info->lpBrowseInfo; @@ -673,8 +588,9 @@ BrsFolder_OnCreate(HWND hWnd, browse_info *info) if (lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE) FIXME("flags BIF_NEWDIALOGSTYLE partially implemented\n"); - if (lpBrowseInfo->ulFlags & ~SUPPORTEDFLAGS) - FIXME("flags %x not implemented\n", lpBrowseInfo->ulFlags & ~SUPPORTEDFLAGS); + + if (lpBrowseInfo->ulFlags & ~SUPPORTED_FLAGS) + FIXME("flags %x not implemented\n", (lpBrowseInfo->ulFlags & ~SUPPORTED_FLAGS)); if (lpBrowseInfo->ulFlags & BIF_USENEWUI) { @@ -685,10 +601,9 @@ BrsFolder_OnCreate(HWND hWnd, browse_info *info) !(lpBrowseInfo->ulFlags & BIF_EDITBOX)) { RECT rcEdit, rcTreeView; - INT cy; GetWindowRect(GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT), &rcEdit); GetWindowRect(GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_TREEVIEW), &rcTreeView); - cy = rcTreeView.top - rcEdit.top; + LONG cy = rcTreeView.top - rcEdit.top; MapWindowPoints(NULL, hWnd, (LPPOINT)&rcTreeView, sizeof(RECT) / sizeof(POINT)); rcTreeView.top -= cy; MoveWindow(GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_TREEVIEW), @@ -698,7 +613,7 @@ BrsFolder_OnCreate(HWND hWnd, browse_info *info) } if (lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE) - info->layout = LayoutInit(hWnd, g_layout_info, LAYOUT_INFO_COUNT); + info->layout = LayoutInit(hWnd, g_layout_info, _countof(g_layout_info)); else info->layout = NULL; @@ -713,15 +628,12 @@ BrsFolder_OnCreate(HWND hWnd, browse_info *info) } if (lpBrowseInfo->lpszTitle) - SetWindowTextW(GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_TITLE), lpBrowseInfo->lpszTitle); + SetDlgItemTextW(hWnd, IDC_BROWSE_FOR_FOLDER_TITLE, lpBrowseInfo->lpszTitle); else ShowWindow(GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_TITLE), SW_HIDE); - if (!(lpBrowseInfo->ulFlags & BIF_STATUSTEXT) || - (lpBrowseInfo->ulFlags & BIF_USENEWUI)) - { + if (!(lpBrowseInfo->ulFlags & BIF_STATUSTEXT) || (lpBrowseInfo->ulFlags & BIF_USENEWUI)) ShowWindow(GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_STATUS), SW_HIDE); - } // Hide "Make New Folder" Button? if ((lpBrowseInfo->ulFlags & BIF_NONEWFOLDERBUTTON) || @@ -739,20 +651,20 @@ BrsFolder_OnCreate(HWND hWnd, browse_info *info) info->hwndTreeView = GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_TREEVIEW); if (info->hwndTreeView) - InitializeTreeView(info); + BrsFolder_InitTreeView(info); else ERR("treeview control missing!\n"); // Register for change notifications - SHGetFolderLocation(NULL, CSIDL_DESKTOP, NULL, 0, &computer_pidl); + SHGetFolderLocation(NULL, CSIDL_DESKTOP, NULL, 0, &pidlDesktop); - ntreg.pidl = computer_pidl; + ntreg.pidl = pidlDesktop; ntreg.fRecursive = TRUE; - - info->hNotify = SHChangeNotifyRegister(hWnd, SHCNRF_InterruptLevel, SHCNE_ALLEVENTS, SHV_CHANGE_NOTIFY, 1, &ntreg); + info->hChangeNotify = SHChangeNotifyRegister(hWnd, SHCNRF_InterruptLevel, SHCNE_ALLEVENTS, + SHV_CHANGE_NOTIFY, 1, &ntreg); SetFocus(info->hwndTreeView); - browsefolder_callback(info->lpBrowseInfo, hWnd, BFFM_INITIALIZED, 0); + BrsFolder_Callback(info->lpBrowseInfo, hWnd, BFFM_INITIALIZED, 0); SHAutoComplete(GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT), (SHACF_FILESYS_ONLY | SHACF_URLHISTORY | SHACF_FILESYSTEM)); @@ -760,102 +672,88 @@ BrsFolder_OnCreate(HWND hWnd, browse_info *info) } static HRESULT -BrsFolder_NewFolder(browse_info *info) +BrsFolder_NewFolder(BrsFolder *info) { DWORD flags = BrowseFlagsToSHCONTF(info->lpBrowseInfo->ulFlags); - IShellFolder *desktop, *cur; - WCHAR wszNewFolder[25]; - WCHAR path[MAX_PATH]; - WCHAR name[MAX_PATH]; - HTREEITEM hParent, hAdded; - LPTV_ITEMDATA item_data; - LPITEMIDLIST new_item; - TVITEMW item; - HRESULT hr; - int len; + CComPtr desktop, cur; + WCHAR wszNewFolder[25], path[MAX_PATH], name[MAX_PATH]; - hr = SHGetDesktopFolder(&desktop); - if (FAILED(hr)) + HRESULT hr = SHGetDesktopFolder(&desktop); + if (FAILED_UNEXPECTEDLY(hr)) return hr; if (info->pidlRet) { hr = desktop->BindToObject(info->pidlRet, NULL, IID_PPV_ARG(IShellFolder, &cur)); - desktop->Release(); - if (FAILED(hr)) + if (FAILED_UNEXPECTEDLY(hr)) return hr; hr = SHGetPathFromIDListW(info->pidlRet, path); } else { - cur = desktop; + cur.Attach(desktop); hr = SHGetFolderPathW(NULL, CSIDL_DESKTOPDIRECTORY, NULL, SHGFP_TYPE_CURRENT, path); } - if (FAILED(hr)) + + if (FAILED_UNEXPECTEDLY(hr)) return hr; + hr = E_FAIL; if (!LoadStringW(shell32_hInstance, IDS_NEWFOLDER, wszNewFolder, _countof(wszNewFolder))) - return E_FAIL; + return hr; if (!PathYetAnotherMakeUniqueName(name, path, NULL, wszNewFolder)) - return E_FAIL; + return hr; - len = strlenW(path); + INT len = lstrlenW(path); if (len < MAX_PATH && name[len] == L'\\') len++; - hr = E_FAIL; if (!CreateDirectoryW(name, NULL)) - goto cleanup; + return hr; // Update parent of newly created directory - hParent = TreeView_GetSelection(info->hwndTreeView); + HTREEITEM hParent = TreeView_GetSelection(info->hwndTreeView); if (!hParent) - goto cleanup; + return hr; TreeView_Expand(info->hwndTreeView, hParent, TVE_EXPAND); - memset(&item, 0, sizeof(TVITEMW)); - item.mask = TVIF_PARAM | TVIF_STATE; + TVITEMW item = { TVIF_PARAM | TVIF_STATE }; item.hItem = hParent; TreeView_GetItem(info->hwndTreeView, &item); - item_data = (LPTV_ITEMDATA)item.lParam; + BrsItemData *item_data = (BrsItemData *)item.lParam; if (!item_data) - goto cleanup; + return hr; if (item_data->pEnumIL) - item_data->pEnumIL->Release(); + item_data->pEnumIL.Release(); hr = cur->EnumObjects(info->hwndTreeView, flags, &item_data->pEnumIL); - if (FAILED(hr)) - goto cleanup; + if (FAILED_UNEXPECTEDLY(hr)) + return hr; // Update treeview if (!(item.state & TVIS_EXPANDEDONCE)) { item.mask = TVIF_STATE; - item.state = TVIS_EXPANDEDONCE; - item.stateMask = TVIS_EXPANDEDONCE; + item.state = item.stateMask = TVIS_EXPANDEDONCE; TreeView_SetItem(info->hwndTreeView, &item); } - hr = cur->ParseDisplayName(NULL, NULL, name + len, NULL, &new_item, NULL); - if (FAILED(hr)) - goto cleanup; + CComHeapPtr pidlNew; + hr = cur->ParseDisplayName(NULL, NULL, name + len, NULL, &pidlNew, NULL); + if (FAILED_UNEXPECTEDLY(hr)) + return hr; - hAdded = InsertTreeViewItem(info, cur, new_item, item_data->lpifq, NULL, hParent); - cur->Release(); - SHFree(new_item); + HTREEITEM hAdded = BrsFolder_InsertItem(info, cur, pidlNew, item_data->pidlFull, NULL, hParent); TreeView_SortChildren(info->hwndTreeView, hParent, FALSE); return BrsFolder_Rename(info, hAdded); - -cleanup: - return hr; } -static BOOL -BrsFolder_OnCommand(browse_info *info, UINT id) +static void +BrsFolder_OnCommand(BrsFolder *info, UINT id) { LPBROWSEINFOW lpBrowseInfo = info->lpBrowseInfo; WCHAR szPath[MAX_PATH]; @@ -878,12 +776,9 @@ BrsFolder_OnCommand(browse_info *info, UINT id) { info->pidlRet = ILClone(info->pidlRet); } - if (info->pidlRet == NULL) // A null pidl would mean a cancel info->pidlRet = _ILCreateDesktop(); - pdump(info->pidlRet); - if (lpBrowseInfo->pszDisplayName) { SHFILEINFOW fileInfo = { NULL }; @@ -894,60 +789,36 @@ BrsFolder_OnCommand(browse_info *info, UINT id) lstrcpynW(lpBrowseInfo->pszDisplayName, fileInfo.szDisplayName, MAX_PATH); } } - EndDialog(info->hWnd, 1); - return TRUE; + EndDialog(info->hWnd, IDOK); + break; } case IDCANCEL: { - EndDialog(info->hWnd, 0); - return TRUE; + EndDialog(info->hWnd, IDCANCEL); + break; } case IDC_BROWSE_FOR_FOLDER_NEW_FOLDER: { BrsFolder_NewFolder(info); - return TRUE; + break; } } - return FALSE; } static BOOL -BrsFolder_OnSetExpanded(browse_info *info, LPVOID selection, BOOL is_str, HTREEITEM *pItem) +BrsFolder_OnSetExpandedPidl(BrsFolder *info, LPITEMIDLIST pidlSelection, HTREEITEM *phItem) { - LPITEMIDLIST pidlSelection = (LPITEMIDLIST)selection; - LPCITEMIDLIST pidlCurrent, pidlRoot; - TVITEMEXW item; - BOOL bResult = FALSE; - - memset(&item, 0, sizeof(item)); - - // If 'selection' is a string, convert to a Shell ID List. - if (is_str) - { - IShellFolder *psfDesktop; - HRESULT hr; - - hr = SHGetDesktopFolder(&psfDesktop); - if (FAILED(hr)) - goto done; - - hr = psfDesktop->ParseDisplayName(NULL, NULL, (LPWSTR)selection, NULL, &pidlSelection, NULL); - psfDesktop->Release(); - if (FAILED(hr)) - goto done; - } - if (_ILIsDesktop(pidlSelection)) { - item.hItem = TVI_ROOT; - bResult = TRUE; - goto done; + if (phItem) + *phItem = TVI_ROOT; + return TRUE; } // Move pidlCurrent behind the SHITEMIDs in pidlSelection, which are the root of // the sub-tree currently displayed. - pidlRoot = info->lpBrowseInfo->pidlRoot; - pidlCurrent = pidlSelection; + PCIDLIST_ABSOLUTE pidlRoot = info->lpBrowseInfo->pidlRoot; + LPITEMIDLIST pidlCurrent = pidlSelection; while (!_ILIsEmpty(pidlRoot) && _ILIsEqualSimple(pidlRoot, pidlCurrent)) { pidlRoot = ILGetNext(pidlRoot); @@ -956,10 +827,14 @@ BrsFolder_OnSetExpanded(browse_info *info, LPVOID selection, BOOL is_str, HTREEI // The given ID List is not part of the SHBrowseForFolder's current sub-tree. if (!_ILIsEmpty(pidlRoot)) - goto done; + { + if (phItem) + *phItem = NULL; + return FALSE; + } // Initialize item to point to the first child of the root folder. - item.mask = TVIF_PARAM; + TVITEMEXW item = { TVIF_PARAM }; item.hItem = TreeView_GetRoot(info->hwndTreeView); if (item.hItem) @@ -968,12 +843,10 @@ BrsFolder_OnSetExpanded(browse_info *info, LPVOID selection, BOOL is_str, HTREEI // Walk the tree along the nodes corresponding to the remaining ITEMIDLIST while (item.hItem && !_ILIsEmpty(pidlCurrent)) { - LPTV_ITEMDATA pItemData; - TreeView_GetItem(info->hwndTreeView, &item); - pItemData = (LPTV_ITEMDATA)item.lParam; + BrsItemData *pItemData = (BrsItemData *)item.lParam; - if (_ILIsEqualSimple(pItemData->lpi, pidlCurrent)) + if (_ILIsEqualSimple(pItemData->pidlChild, pidlCurrent)) { pidlCurrent = ILGetNext(pidlCurrent); if (!_ILIsEmpty(pidlCurrent)) @@ -990,56 +863,70 @@ BrsFolder_OnSetExpanded(browse_info *info, LPVOID selection, BOOL is_str, HTREEI } } - if (_ILIsEmpty(pidlCurrent) && item.hItem) - bResult = TRUE; + if (phItem) + *phItem = item.hItem; -done: - if (pidlSelection && pidlSelection != selection) - ILFree(pidlSelection); + return (_ILIsEmpty(pidlCurrent) && item.hItem); +} - if (pItem) - *pItem = item.hItem; +static BOOL +BrsFolder_OnSetExpandedString(BrsFolder *info, LPWSTR pszString, HTREEITEM *phItem) +{ + CComPtr psfDesktop; + HRESULT hr = SHGetDesktopFolder(&psfDesktop); + if (FAILED_UNEXPECTEDLY(hr)) + return FALSE; + + CComHeapPtr pidlSelection; + hr = psfDesktop->ParseDisplayName(NULL, NULL, pszString, NULL, &pidlSelection, NULL); + if (FAILED_UNEXPECTEDLY(hr)) + return FALSE; - return bResult; + return BrsFolder_OnSetExpandedPidl(info, pidlSelection, phItem); } static BOOL -BrsFolder_OnSetSelectionW(browse_info *info, LPVOID selection, BOOL is_str) +BrsFolder_OnSetSelectionPidl(BrsFolder *info, LPITEMIDLIST pidlSelection) { + if (!pidlSelection) + return FALSE; + HTREEITEM hItem; - BOOL bResult; + BOOL ret = BrsFolder_OnSetExpandedPidl(info, pidlSelection, &hItem); + if (ret) + TreeView_SelectItem(info->hwndTreeView, hItem); + return ret; +} - if (!selection) return FALSE; +static BOOL +BrsFolder_OnSetSelectionW(BrsFolder *info, LPWSTR pszSelection) +{ + if (!pszSelection) + return FALSE; - bResult = BrsFolder_OnSetExpanded(info, selection, is_str, &hItem); - if (bResult) + HTREEITEM hItem; + BOOL ret = BrsFolder_OnSetExpandedString(info, pszSelection, &hItem); + if (ret) TreeView_SelectItem(info->hwndTreeView, hItem); - return bResult; + return ret; } static BOOL -BrsFolder_OnSetSelectionA(browse_info *info, LPVOID selection, BOOL is_str) +BrsFolder_OnSetSelectionA(BrsFolder *info, LPSTR pszSelectionA) { - LPWSTR selectionW = NULL; - BOOL result = FALSE; - int length; - - if (!is_str) - return BrsFolder_OnSetSelectionW(info, selection, is_str); + if (!pszSelectionA) + return FALSE; - if ((length = MultiByteToWideChar(CP_ACP, 0, (LPSTR)selection, -1, NULL, 0)) && - (selectionW = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, length * sizeof(WCHAR))) && - MultiByteToWideChar(CP_ACP, 0, (LPSTR)selection, -1, selectionW, length)) - { - result = BrsFolder_OnSetSelectionW(info, selectionW, is_str); - } + CComHeapPtr pszSelectionW; + __SHCloneStrAtoW(&pszSelectionW, pszSelectionA); + if (!pszSelectionW) + return FALSE; - HeapFree(GetProcessHeap(), 0, selectionW); - return result; + return BrsFolder_OnSetSelectionW(info, pszSelectionW); } -static INT -BrsFolder_OnDestroy(browse_info *info) +static void +BrsFolder_OnDestroy(BrsFolder *info) { if (info->layout) { @@ -1047,41 +934,33 @@ BrsFolder_OnDestroy(browse_info *info) info->layout = NULL; } - SHChangeNotifyDeregister(info->hNotify); - - return 0; + SHChangeNotifyDeregister(info->hChangeNotify); } // Find a treeview node by recursively walking the treeview static HTREEITEM -BrsFolder_FindItemByPidl(browse_info *info, LPCITEMIDLIST pidl, HTREEITEM hItem) +BrsFolder_FindItemByPidl(BrsFolder *info, PCIDLIST_ABSOLUTE pidlFull, HTREEITEM hItem) { - TV_ITEMDATA *item_data; - HRESULT hr; - - item_data = BrsFolder_GetDataFromItem(info, hItem); + BrsItemData *item_data = BrsFolder_GetItemData(info, hItem); - hr = item_data->lpsfParent->CompareIDs(0, item_data->lpifq, pidl); + HRESULT hr = item_data->lpsfParent->CompareIDs(0, item_data->pidlFull, pidlFull); if (SUCCEEDED(hr) && !HRESULT_CODE(hr)) return hItem; - hItem = TreeView_GetChild(info->hwndTreeView, hItem); - - while (hItem) + for (hItem = TreeView_GetChild(info->hwndTreeView, hItem); hItem; + hItem = TreeView_GetNextSibling(info->hwndTreeView, hItem)) { - HTREEITEM newItem = BrsFolder_FindItemByPidl(info, pidl, hItem); + HTREEITEM newItem = BrsFolder_FindItemByPidl(info, pidlFull, hItem); if (newItem) return newItem; - hItem = TreeView_GetNextSibling(info->hwndTreeView, hItem); } + return NULL; } -static LRESULT -BrsFolder_OnChange(browse_info *info, const LPCITEMIDLIST *pidls, LONG event) +static void +BrsFolder_OnChange(BrsFolder *info, const PCIDLIST_ABSOLUTE *pidls, LONG event) { - BOOL ret = TRUE; - TRACE("(%p)->(%p, %p, 0x%08x)\n", info, pidls[0], pidls[1], event); switch (event) @@ -1096,80 +975,84 @@ BrsFolder_OnChange(browse_info *info, const LPCITEMIDLIST *pidls, LONG event) break; } } - return ret; } /************************************************************************* * BrsFolderDlgProc32 (not an exported API function) */ static INT_PTR CALLBACK -BrsFolderDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) +BrsFolderDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { - browse_info *info; - - TRACE("hwnd=%p msg=%04x 0x%08lx 0x%08lx\n", hWnd, msg, wParam, lParam); + if (uMsg == WM_INITDIALOG) + return BrsFolder_OnInitDialog(hWnd, (BrsFolder *)lParam); - if (msg == WM_INITDIALOG) - return BrsFolder_OnCreate(hWnd, (browse_info *)lParam); - - info = (browse_info*)GetPropW(hWnd, L"__WINE_BRSFOLDERDLG_INFO"); + BrsFolder *info = (BrsFolder *)GetPropW(hWnd, L"__WINE_BRSFOLDERDLG_INFO"); if (!info) return 0; - switch (msg) + switch (uMsg) { case WM_NOTIFY: return BrsFolder_OnNotify(info, (UINT)wParam, (LPNMHDR)lParam); case WM_COMMAND: - return BrsFolder_OnCommand(info, wParam); + BrsFolder_OnCommand(info, wParam); + break; case WM_GETMINMAXINFO: ((LPMINMAXINFO)lParam)->ptMinTrackSize.x = info->szMin.cx; ((LPMINMAXINFO)lParam)->ptMinTrackSize.y = info->szMin.cy; - return 0; + break; case WM_SIZE: if (info->layout) // New style dialogs - LayoutUpdate(hWnd, info->layout, g_layout_info, LAYOUT_INFO_COUNT); - return 0; + LayoutUpdate(hWnd, info->layout, g_layout_info, _countof(g_layout_info)); + break; case BFFM_SETSTATUSTEXTA: - TRACE("Set status %s\n", debugstr_a((LPSTR)lParam)); - SetWindowTextA(GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_STATUS), (LPSTR)lParam); + SetDlgItemTextA(hWnd, IDC_BROWSE_FOR_FOLDER_STATUS, (LPSTR)lParam); break; case BFFM_SETSTATUSTEXTW: - TRACE("Set status %s\n", debugstr_w((LPWSTR)lParam)); - SetWindowTextW(GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_STATUS), (LPWSTR)lParam); + SetDlgItemTextW(hWnd, IDC_BROWSE_FOR_FOLDER_STATUS, (LPWSTR)lParam); break; case BFFM_ENABLEOK: - TRACE("Enable %ld\n", lParam); - EnableWindow(GetDlgItem(hWnd, 1), lParam != 0); + EnableWindow(GetDlgItem(hWnd, IDOK), lParam != 0); break; case BFFM_SETOKTEXT: // Unicode only - TRACE("Set OK text %s\n", debugstr_w((LPWSTR)lParam)); - SetWindowTextW(GetDlgItem(hWnd, 1), (LPWSTR)lParam); + SetDlgItemTextW(hWnd, IDOK, (LPWSTR)lParam); break; case BFFM_SETSELECTIONA: - return BrsFolder_OnSetSelectionA(info, (LPVOID)lParam, (BOOL)wParam); + if (wParam) // String + return BrsFolder_OnSetSelectionA(info, (LPSTR)lParam); + else // PIDL + return BrsFolder_OnSetSelectionPidl(info, (LPITEMIDLIST)lParam); case BFFM_SETSELECTIONW: - return BrsFolder_OnSetSelectionW(info, (LPVOID)lParam, (BOOL)wParam); + if (wParam) // String + return BrsFolder_OnSetSelectionW(info, (LPWSTR)lParam); + else // PIDL + return BrsFolder_OnSetSelectionPidl(info, (LPITEMIDLIST)lParam); case BFFM_SETEXPANDED: // Unicode only - return BrsFolder_OnSetExpanded(info, (LPVOID)lParam, (BOOL)wParam, NULL); + if (wParam) // String + return BrsFolder_OnSetExpandedString(info, (LPWSTR)lParam, NULL); + else // PIDL + return BrsFolder_OnSetExpandedPidl(info, (LPITEMIDLIST)lParam, NULL); case SHV_CHANGE_NOTIFY: - return BrsFolder_OnChange(info, (const LPCITEMIDLIST*)wParam, (LONG)lParam); + BrsFolder_OnChange(info, (const PCIDLIST_ABSOLUTE *)wParam, (LONG)lParam); + break; case WM_DESTROY: - return BrsFolder_OnDestroy(info); + BrsFolder_OnDestroy(info); + break; } - return FALSE; + + return 0; } /************************************************************************* @@ -1181,43 +1064,28 @@ LPITEMIDLIST WINAPI SHBrowseForFolderA(LPBROWSEINFOA lpbi) { BROWSEINFOW bi; - LPITEMIDLIST lpid; - INT len; - LPWSTR title; - - TRACE("%p\n", lpbi); - bi.hwndOwner = lpbi->hwndOwner; bi.pidlRoot = lpbi->pidlRoot; - if (lpbi->pszDisplayName) - bi.pszDisplayName = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR)); - else - bi.pszDisplayName = NULL; + WCHAR szName[MAX_PATH]; + bi.pszDisplayName = (lpbi->pszDisplayName ? szName : NULL); + + CComHeapPtr pszTitle; if (lpbi->lpszTitle) - { - len = MultiByteToWideChar(CP_ACP, 0, lpbi->lpszTitle, -1, NULL, 0); - title = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); - MultiByteToWideChar(CP_ACP, 0, lpbi->lpszTitle, -1, title, len); - } - else - title = NULL; + __SHCloneStrAtoW(&pszTitle, lpbi->lpszTitle); + bi.lpszTitle = pszTitle; - bi.lpszTitle = title; bi.ulFlags = lpbi->ulFlags; bi.lpfn = lpbi->lpfn; bi.lParam = lpbi->lParam; bi.iImage = lpbi->iImage; - lpid = SHBrowseForFolderW(&bi); + PIDLIST_ABSOLUTE pidl = SHBrowseForFolderW(&bi); + if (bi.pszDisplayName) - { - WideCharToMultiByte(CP_ACP, 0, bi.pszDisplayName, -1, - lpbi->pszDisplayName, MAX_PATH, 0, NULL); - HeapFree(GetProcessHeap(), 0, bi.pszDisplayName); - } - HeapFree(GetProcessHeap(), 0, title); + SHUnicodeToAnsi(bi.pszDisplayName, lpbi->pszDisplayName, MAX_PATH); + lpbi->iImage = bi.iImage; - return lpid; + return pidl; } /************************************************************************* @@ -1227,8 +1095,9 @@ EXTERN_C LPITEMIDLIST WINAPI SHBrowseForFolderW(LPBROWSEINFOW lpbi) { - browse_info info = { NULL }; - info.lpBrowseInfo = lpbi; + TRACE("%p\n", lpbi); + + BrsFolder info = { lpbi }; HRESULT hr = OleInitialize(NULL); @@ -1238,7 +1107,7 @@ SHBrowseForFolderW(LPBROWSEINFOW lpbi) if (SUCCEEDED(hr)) OleUninitialize(); - if (!ret) + if (ret != IDOK) { ILFree(info.pidlRet); return NULL; From ed7c23fc41ddab7877f9fbc2975d6302a971e1b3 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Thu, 23 May 2024 13:13:13 +0900 Subject: [PATCH 182/182] [SHELL32] brfolder.cpp: Rename BrsFolder as BrFolder and rename BrsItemData as BrItemData to reduce binary size of Debug version. JIRA issue: CORE-17340 --- dll/win32/shell32/CMakeLists.txt | 2 +- .../shell32/{brsfolder.cpp => brfolder.cpp} | 192 +++++++++--------- 2 files changed, 97 insertions(+), 97 deletions(-) rename dll/win32/shell32/{brsfolder.cpp => brfolder.cpp} (83%) diff --git a/dll/win32/shell32/CMakeLists.txt b/dll/win32/shell32/CMakeLists.txt index 684de0ab8df..1b76acb0560 100644 --- a/dll/win32/shell32/CMakeLists.txt +++ b/dll/win32/shell32/CMakeLists.txt @@ -18,7 +18,7 @@ if(DBG) endif() list(APPEND SOURCE - brsfolder.cpp + brfolder.cpp CActiveDesktop.cpp CActiveDesktop.h CIDLDataObj.cpp diff --git a/dll/win32/shell32/brsfolder.cpp b/dll/win32/shell32/brfolder.cpp similarity index 83% rename from dll/win32/shell32/brsfolder.cpp rename to dll/win32/shell32/brfolder.cpp index eade721813a..40138bc1b60 100644 --- a/dll/win32/shell32/brsfolder.cpp +++ b/dll/win32/shell32/brfolder.cpp @@ -16,7 +16,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell); #define SHV_CHANGE_NOTIFY (WM_USER + 0x1111) -struct BrsFolder +struct BrFolder { LPBROWSEINFOW lpBrowseInfo; HWND hWnd; @@ -27,7 +27,7 @@ struct BrsFolder ULONG hChangeNotify; // Change notification handle }; -struct BrsItemData +struct BrItemData { CComPtr lpsfParent; // IShellFolder of the parent CComHeapPtr pidlChild; // PIDL relative to parent @@ -51,8 +51,8 @@ static const LAYOUT_INFO g_layout_info[] = BIF_BROWSEINCLUDEFILES) static HTREEITEM -BrsFolder_InsertItem( - BrsFolder *info, +BrFolder_InsertItem( + BrFolder *info, IShellFolder *lpsf, PCIDLIST_RELATIVE pidlChild, PCIDLIST_ABSOLUTE pidlParent, @@ -66,15 +66,15 @@ BrowseFlagsToSHCONTF(UINT ulFlags) } static void -BrsFolder_Callback(LPBROWSEINFOW lpBrowseInfo, HWND hWnd, UINT uMsg, LPARAM lParam) +BrFolder_Callback(LPBROWSEINFOW lpBrowseInfo, HWND hWnd, UINT uMsg, LPARAM lParam) { if (!lpBrowseInfo->lpfn) return; lpBrowseInfo->lpfn(hWnd, uMsg, lParam, lpBrowseInfo->lParam); } -static BrsItemData * -BrsFolder_GetItemData(BrsFolder *info, HTREEITEM hItem) +static BrItemData * +BrFolder_GetItemData(BrFolder *info, HTREEITEM hItem) { TVITEMW item = { TVIF_HANDLE | TVIF_PARAM }; item.hItem = hItem; @@ -83,16 +83,16 @@ BrsFolder_GetItemData(BrsFolder *info, HTREEITEM hItem) ERR("TreeView_GetItem failed\n"); return NULL; } - return (BrsItemData *)item.lParam; + return (BrItemData *)item.lParam; } /****************************************************************************** - * BrsFolder_InitTreeView [Internal] + * BrFolder_InitTreeView [Internal] * * Called from WM_INITDIALOG handler. */ static void -BrsFolder_InitTreeView(BrsFolder *info) +BrFolder_InitTreeView(BrFolder *info) { HIMAGELIST hImageList; HRESULT hr; @@ -105,8 +105,8 @@ BrsFolder_InitTreeView(BrsFolder *info) if (hImageList) TreeView_SetImageList(info->hwndTreeView, hImageList, 0); - /* We want to call BrsFolder_InsertItem down the code, in order to insert - * the root item of the treeview. Due to BrsFolder_InsertItem's signature, + /* We want to call BrFolder_InsertItem down the code, in order to insert + * the root item of the treeview. Due to BrFolder_InsertItem's signature, * we need the following to do this: * * + An ITEMIDLIST corresponding to _the parent_ of root. @@ -154,12 +154,12 @@ BrsFolder_InitTreeView(BrsFolder *info) return; TreeView_DeleteItem(info->hwndTreeView, TVI_ROOT); - hItem = BrsFolder_InsertItem(info, lpsfParent, pidlChild, pidlParent, pEnumChildren, TVI_ROOT); + hItem = BrFolder_InsertItem(info, lpsfParent, pidlChild, pidlParent, pEnumChildren, TVI_ROOT); TreeView_Expand(info->hwndTreeView, hItem, TVE_EXPAND); } static INT -BrsFolder_GetIcon(PCIDLIST_ABSOLUTE pidl, UINT uFlags) +BrFolder_GetIcon(PCIDLIST_ABSOLUTE pidl, UINT uFlags) { SHFILEINFOW sfi; SHGetFileInfoW((LPCWSTR)pidl, 0, &sfi, sizeof(sfi), uFlags); @@ -167,7 +167,7 @@ BrsFolder_GetIcon(PCIDLIST_ABSOLUTE pidl, UINT uFlags) } static void -BrsFolder_GetIconPair(PCIDLIST_ABSOLUTE pidl, LPTVITEMW pItem) +BrFolder_GetIconPair(PCIDLIST_ABSOLUTE pidl, LPTVITEMW pItem) { DWORD flags; @@ -179,14 +179,14 @@ BrsFolder_GetIconPair(PCIDLIST_ABSOLUTE pidl, LPTVITEMW pItem) } flags = SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON; - pItem->iImage = BrsFolder_GetIcon(pidl, flags); + pItem->iImage = BrFolder_GetIcon(pidl, flags); flags = SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_OPENICON; - pItem->iSelectedImage = BrsFolder_GetIcon(pidl, flags); + pItem->iSelectedImage = BrFolder_GetIcon(pidl, flags); } /****************************************************************************** - * BrsFolder_GetName [Internal] + * BrFolder_GetName [Internal] * * Query a shell folder for the display name of one of its children * @@ -201,7 +201,7 @@ BrsFolder_GetIconPair(PCIDLIST_ABSOLUTE pidl, LPTVITEMW pItem) * Failure: FALSE */ static BOOL -BrsFolder_GetName( +BrFolder_GetName( IShellFolder *lpsf, PCIDLIST_RELATIVE pidlChild, DWORD dwFlags, @@ -219,7 +219,7 @@ BrsFolder_GetName( } /****************************************************************************** - * BrsFolder_InsertItem [Internal] + * BrFolder_InsertItem [Internal] * * PARAMS * info [I] data for the dialog @@ -234,8 +234,8 @@ BrsFolder_GetName( * Failure: NULL */ static HTREEITEM -BrsFolder_InsertItem( - BrsFolder *info, +BrFolder_InsertItem( + BrFolder *info, IShellFolder *lpsf, PCIDLIST_RELATIVE pidlChild, PCIDLIST_ABSOLUTE pidlParent, @@ -243,10 +243,10 @@ BrsFolder_InsertItem( HTREEITEM hParent) { WCHAR szName[MAX_PATH]; - if (!BrsFolder_GetName(lpsf, pidlChild, SHGDN_NORMAL, szName)) + if (!BrFolder_GetName(lpsf, pidlChild, SHGDN_NORMAL, szName)) return NULL; - BrsItemData *pItemData = new BrsItemData(); + BrItemData *pItemData = new BrItemData(); TVITEMW item = { TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM | TVIF_CHILDREN }; item.cChildren = (pEnumIL ? 1 : 0); @@ -256,7 +256,7 @@ BrsFolder_InsertItem( PIDLIST_ABSOLUTE pidlFull = (pidlParent ? ILCombine(pidlParent, pidlChild) : ILClone(pidlChild)); - BrsFolder_GetIconPair(pidlFull, &item); + BrFolder_GetIconPair(pidlFull, &item); pItemData->lpsfParent.Attach(lpsf); pItemData->pidlChild.Attach(ILClone(pidlChild)); @@ -269,7 +269,7 @@ BrsFolder_InsertItem( } /****************************************************************************** - * BrsFolder_Expand [Internal] + * BrFolder_Expand [Internal] * * For each child (given by pEnum) of the parent shell folder, which is given by * lpsf and whose PIDL is pidl, insert a treeview-item right under hParent @@ -282,8 +282,8 @@ BrsFolder_InsertItem( * pEnum [I] An iterator for the children of the parent shell folder */ static void -BrsFolder_Expand( - BrsFolder *info, +BrFolder_Expand( + BrFolder *info, IShellFolder *lpsf, PCIDLIST_ABSOLUTE pidl, HTREEITEM hParent, @@ -327,7 +327,7 @@ BrsFolder_Expand( } if (ulAttrs != (ulAttrs & SFGAO_FOLDER)) { - if (!BrsFolder_InsertItem(info, lpsf, pidlTemp, pidl, pEnumIL, hParent)) + if (!BrFolder_InsertItem(info, lpsf, pidlTemp, pidl, pEnumIL, hParent)) goto done; } pidlTemp.Free(); // Finally, free the pidl that the shell gave us... @@ -348,7 +348,7 @@ PIDLIsType(LPCITEMIDLIST pidl, PIDLTYPE type) } static void -BrsFolder_CheckValidSelection(BrsFolder *info, BrsItemData *pItemData) +BrFolder_CheckValidSelection(BrFolder *info, BrItemData *pItemData) { LPBROWSEINFOW lpBrowseInfo = info->lpBrowseInfo; PCIDLIST_RELATIVE pidlChild = pItemData->pidlChild; @@ -387,9 +387,9 @@ BrsFolder_CheckValidSelection(BrsFolder *info, BrsItemData *pItemData) } static LRESULT -BrsFolder_Treeview_Delete(BrsFolder *info, NMTREEVIEWW *pnmtv) +BrFolder_Treeview_Delete(BrFolder *info, NMTREEVIEWW *pnmtv) { - BrsItemData *pItemData = (BrsItemData *)pnmtv->itemOld.lParam; + BrItemData *pItemData = (BrItemData *)pnmtv->itemOld.lParam; TRACE("TVN_DELETEITEMA/W %p\n", pItemData); @@ -398,9 +398,9 @@ BrsFolder_Treeview_Delete(BrsFolder *info, NMTREEVIEWW *pnmtv) } static LRESULT -BrsFolder_Treeview_Expand(BrsFolder *info, NMTREEVIEWW *pnmtv) +BrFolder_Treeview_Expand(BrFolder *info, NMTREEVIEWW *pnmtv) { - BrsItemData *pItemData = (BrsItemData *)pnmtv->itemNew.lParam; + BrItemData *pItemData = (BrItemData *)pnmtv->itemNew.lParam; TRACE("TVN_ITEMEXPANDINGA/W\n"); @@ -421,7 +421,7 @@ BrsFolder_Treeview_Expand(BrsFolder *info, NMTREEVIEWW *pnmtv) HTREEITEM hItem = pnmtv->itemNew.hItem; if (!FAILED_UNEXPECTEDLY(hr)) - BrsFolder_Expand(info, lpsf2, pItemData->pidlFull, hItem, pItemData->pEnumIL); + BrFolder_Expand(info, lpsf2, pItemData->pidlFull, hItem, pItemData->pEnumIL); // My Computer is already sorted and trying to do a simple text // sort will only mess things up @@ -432,24 +432,24 @@ BrsFolder_Treeview_Expand(BrsFolder *info, NMTREEVIEWW *pnmtv) } static HRESULT -BrsFolder_Treeview_Changed(BrsFolder *info, NMTREEVIEWW *pnmtv) +BrFolder_Treeview_Changed(BrFolder *info, NMTREEVIEWW *pnmtv) { - BrsItemData *pItemData = (BrsItemData *)pnmtv->itemNew.lParam; + BrItemData *pItemData = (BrItemData *)pnmtv->itemNew.lParam; ILFree(info->pidlRet); info->pidlRet = ILClone(pItemData->pidlFull); WCHAR szName[MAX_PATH]; - if (BrsFolder_GetName(pItemData->lpsfParent, pItemData->pidlChild, SHGDN_NORMAL, szName)) + if (BrFolder_GetName(pItemData->lpsfParent, pItemData->pidlChild, SHGDN_NORMAL, szName)) SetDlgItemTextW(info->hWnd, IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, szName); - BrsFolder_Callback(info->lpBrowseInfo, info->hWnd, BFFM_SELCHANGED, (LPARAM)info->pidlRet); - BrsFolder_CheckValidSelection(info, pItemData); + BrFolder_Callback(info->lpBrowseInfo, info->hWnd, BFFM_SELCHANGED, (LPARAM)info->pidlRet); + BrFolder_CheckValidSelection(info, pItemData); return S_OK; } static LRESULT -BrsFolder_Treeview_Rename(BrsFolder *info, NMTVDISPINFOW *pnmtv) +BrFolder_Treeview_Rename(BrFolder *info, NMTVDISPINFOW *pnmtv) { WCHAR old_path[MAX_PATH], new_path[MAX_PATH]; NMTREEVIEWW nmtv; @@ -459,7 +459,7 @@ BrsFolder_Treeview_Rename(BrsFolder *info, NMTVDISPINFOW *pnmtv) return 0; item.hItem = TreeView_GetSelection(info->hwndTreeView); - BrsItemData *item_data = BrsFolder_GetItemData(info, item.hItem); + BrItemData *item_data = BrFolder_GetItemData(info, item.hItem); SHGetPathFromIDListW(item_data->pidlFull, old_path); lstrcpynW(new_path, old_path, _countof(new_path)); @@ -480,12 +480,12 @@ BrsFolder_Treeview_Rename(BrsFolder *info, NMTVDISPINFOW *pnmtv) TreeView_SetItem(info->hwndTreeView, &item); nmtv.itemNew.lParam = item.lParam; - BrsFolder_Treeview_Changed(info, &nmtv); + BrFolder_Treeview_Changed(info, &nmtv); return 0; } static HRESULT -BrsFolder_Rename(BrsFolder *info, HTREEITEM hItem) +BrFolder_Rename(BrFolder *info, HTREEITEM hItem) { TreeView_SelectItem(info->hwndTreeView, hItem); TreeView_EditLabel(info->hwndTreeView, hItem); @@ -493,13 +493,13 @@ BrsFolder_Rename(BrsFolder *info, HTREEITEM hItem) } static void -BrsFolder_Delete(BrsFolder *info, HTREEITEM hItem) +BrFolder_Delete(BrFolder *info, HTREEITEM hItem) { SHFILEOPSTRUCTW fileop = { info->hwndTreeView }; WCHAR szzFrom[MAX_PATH + 1]; // Get item_data - BrsItemData *item_data = BrsFolder_GetItemData(info, hItem); + BrItemData *item_data = BrFolder_GetItemData(info, hItem); // Get the path if (!SHGetPathFromIDListW(item_data->pidlFull, szzFrom)) @@ -517,7 +517,7 @@ BrsFolder_Delete(BrsFolder *info, HTREEITEM hItem) } static LRESULT -BrsFolder_Treeview_Keydown(BrsFolder *info, LPNMTVKEYDOWN keydown) +BrFolder_Treeview_Keydown(BrFolder *info, LPNMTVKEYDOWN keydown) { // Old dialog doesn't support those advanced features if (!(info->lpBrowseInfo->ulFlags & BIF_USENEWUI)) @@ -528,17 +528,17 @@ BrsFolder_Treeview_Keydown(BrsFolder *info, LPNMTVKEYDOWN keydown) switch (keydown->wVKey) { case VK_F2: - BrsFolder_Rename(info, hItem); + BrFolder_Rename(info, hItem); break; case VK_DELETE: - BrsFolder_Delete(info, hItem); + BrFolder_Delete(info, hItem); break; } return 0; } static LRESULT -BrsFolder_OnNotify(BrsFolder *info, UINT CtlID, LPNMHDR lpnmh) +BrFolder_OnNotify(BrFolder *info, UINT CtlID, LPNMHDR lpnmh) { NMTREEVIEWW *pnmtv = (NMTREEVIEWW *)lpnmh; @@ -551,22 +551,22 @@ BrsFolder_OnNotify(BrsFolder *info, UINT CtlID, LPNMHDR lpnmh) { case TVN_DELETEITEMA: case TVN_DELETEITEMW: - return BrsFolder_Treeview_Delete(info, pnmtv); + return BrFolder_Treeview_Delete(info, pnmtv); case TVN_ITEMEXPANDINGA: case TVN_ITEMEXPANDINGW: - return BrsFolder_Treeview_Expand(info, pnmtv); + return BrFolder_Treeview_Expand(info, pnmtv); case TVN_SELCHANGEDA: case TVN_SELCHANGEDW: - return BrsFolder_Treeview_Changed(info, pnmtv); + return BrFolder_Treeview_Changed(info, pnmtv); case TVN_ENDLABELEDITA: case TVN_ENDLABELEDITW: - return BrsFolder_Treeview_Rename(info, (LPNMTVDISPINFOW)pnmtv); + return BrFolder_Treeview_Rename(info, (LPNMTVDISPINFOW)pnmtv); case TVN_KEYDOWN: - return BrsFolder_Treeview_Keydown(info, (LPNMTVKEYDOWN)pnmtv); + return BrFolder_Treeview_Keydown(info, (LPNMTVKEYDOWN)pnmtv); default: WARN("unhandled (%d)\n", pnmtv->hdr.code); @@ -577,7 +577,7 @@ BrsFolder_OnNotify(BrsFolder *info, UINT CtlID, LPNMHDR lpnmh) } static BOOL -BrsFolder_OnInitDialog(HWND hWnd, BrsFolder *info) +BrFolder_OnInitDialog(HWND hWnd, BrFolder *info) { CComHeapPtr pidlDesktop; SHChangeNotifyEntry ntreg; @@ -651,7 +651,7 @@ BrsFolder_OnInitDialog(HWND hWnd, BrsFolder *info) info->hwndTreeView = GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_TREEVIEW); if (info->hwndTreeView) - BrsFolder_InitTreeView(info); + BrFolder_InitTreeView(info); else ERR("treeview control missing!\n"); @@ -664,7 +664,7 @@ BrsFolder_OnInitDialog(HWND hWnd, BrsFolder *info) SHV_CHANGE_NOTIFY, 1, &ntreg); SetFocus(info->hwndTreeView); - BrsFolder_Callback(info->lpBrowseInfo, hWnd, BFFM_INITIALIZED, 0); + BrFolder_Callback(info->lpBrowseInfo, hWnd, BFFM_INITIALIZED, 0); SHAutoComplete(GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT), (SHACF_FILESYS_ONLY | SHACF_URLHISTORY | SHACF_FILESYSTEM)); @@ -672,7 +672,7 @@ BrsFolder_OnInitDialog(HWND hWnd, BrsFolder *info) } static HRESULT -BrsFolder_NewFolder(BrsFolder *info) +BrFolder_NewFolder(BrFolder *info) { DWORD flags = BrowseFlagsToSHCONTF(info->lpBrowseInfo->ulFlags); CComPtr desktop, cur; @@ -723,7 +723,7 @@ BrsFolder_NewFolder(BrsFolder *info) TVITEMW item = { TVIF_PARAM | TVIF_STATE }; item.hItem = hParent; TreeView_GetItem(info->hwndTreeView, &item); - BrsItemData *item_data = (BrsItemData *)item.lParam; + BrItemData *item_data = (BrItemData *)item.lParam; if (!item_data) return hr; @@ -746,14 +746,14 @@ BrsFolder_NewFolder(BrsFolder *info) if (FAILED_UNEXPECTEDLY(hr)) return hr; - HTREEITEM hAdded = BrsFolder_InsertItem(info, cur, pidlNew, item_data->pidlFull, NULL, hParent); + HTREEITEM hAdded = BrFolder_InsertItem(info, cur, pidlNew, item_data->pidlFull, NULL, hParent); TreeView_SortChildren(info->hwndTreeView, hParent, FALSE); - return BrsFolder_Rename(info, hAdded); + return BrFolder_Rename(info, hAdded); } static void -BrsFolder_OnCommand(BrsFolder *info, UINT id) +BrFolder_OnCommand(BrFolder *info, UINT id) { LPBROWSEINFOW lpBrowseInfo = info->lpBrowseInfo; WCHAR szPath[MAX_PATH]; @@ -799,14 +799,14 @@ BrsFolder_OnCommand(BrsFolder *info, UINT id) } case IDC_BROWSE_FOR_FOLDER_NEW_FOLDER: { - BrsFolder_NewFolder(info); + BrFolder_NewFolder(info); break; } } } static BOOL -BrsFolder_OnSetExpandedPidl(BrsFolder *info, LPITEMIDLIST pidlSelection, HTREEITEM *phItem) +BrFolder_OnSetExpandedPidl(BrFolder *info, LPITEMIDLIST pidlSelection, HTREEITEM *phItem) { if (_ILIsDesktop(pidlSelection)) { @@ -844,7 +844,7 @@ BrsFolder_OnSetExpandedPidl(BrsFolder *info, LPITEMIDLIST pidlSelection, HTREEIT while (item.hItem && !_ILIsEmpty(pidlCurrent)) { TreeView_GetItem(info->hwndTreeView, &item); - BrsItemData *pItemData = (BrsItemData *)item.lParam; + BrItemData *pItemData = (BrItemData *)item.lParam; if (_ILIsEqualSimple(pItemData->pidlChild, pidlCurrent)) { @@ -870,7 +870,7 @@ BrsFolder_OnSetExpandedPidl(BrsFolder *info, LPITEMIDLIST pidlSelection, HTREEIT } static BOOL -BrsFolder_OnSetExpandedString(BrsFolder *info, LPWSTR pszString, HTREEITEM *phItem) +BrFolder_OnSetExpandedString(BrFolder *info, LPWSTR pszString, HTREEITEM *phItem) { CComPtr psfDesktop; HRESULT hr = SHGetDesktopFolder(&psfDesktop); @@ -882,37 +882,37 @@ BrsFolder_OnSetExpandedString(BrsFolder *info, LPWSTR pszString, HTREEITEM *phIt if (FAILED_UNEXPECTEDLY(hr)) return FALSE; - return BrsFolder_OnSetExpandedPidl(info, pidlSelection, phItem); + return BrFolder_OnSetExpandedPidl(info, pidlSelection, phItem); } static BOOL -BrsFolder_OnSetSelectionPidl(BrsFolder *info, LPITEMIDLIST pidlSelection) +BrFolder_OnSetSelectionPidl(BrFolder *info, LPITEMIDLIST pidlSelection) { if (!pidlSelection) return FALSE; HTREEITEM hItem; - BOOL ret = BrsFolder_OnSetExpandedPidl(info, pidlSelection, &hItem); + BOOL ret = BrFolder_OnSetExpandedPidl(info, pidlSelection, &hItem); if (ret) TreeView_SelectItem(info->hwndTreeView, hItem); return ret; } static BOOL -BrsFolder_OnSetSelectionW(BrsFolder *info, LPWSTR pszSelection) +BrFolder_OnSetSelectionW(BrFolder *info, LPWSTR pszSelection) { if (!pszSelection) return FALSE; HTREEITEM hItem; - BOOL ret = BrsFolder_OnSetExpandedString(info, pszSelection, &hItem); + BOOL ret = BrFolder_OnSetExpandedString(info, pszSelection, &hItem); if (ret) TreeView_SelectItem(info->hwndTreeView, hItem); return ret; } static BOOL -BrsFolder_OnSetSelectionA(BrsFolder *info, LPSTR pszSelectionA) +BrFolder_OnSetSelectionA(BrFolder *info, LPSTR pszSelectionA) { if (!pszSelectionA) return FALSE; @@ -922,11 +922,11 @@ BrsFolder_OnSetSelectionA(BrsFolder *info, LPSTR pszSelectionA) if (!pszSelectionW) return FALSE; - return BrsFolder_OnSetSelectionW(info, pszSelectionW); + return BrFolder_OnSetSelectionW(info, pszSelectionW); } static void -BrsFolder_OnDestroy(BrsFolder *info) +BrFolder_OnDestroy(BrFolder *info) { if (info->layout) { @@ -939,9 +939,9 @@ BrsFolder_OnDestroy(BrsFolder *info) // Find a treeview node by recursively walking the treeview static HTREEITEM -BrsFolder_FindItemByPidl(BrsFolder *info, PCIDLIST_ABSOLUTE pidlFull, HTREEITEM hItem) +BrFolder_FindItemByPidl(BrFolder *info, PCIDLIST_ABSOLUTE pidlFull, HTREEITEM hItem) { - BrsItemData *item_data = BrsFolder_GetItemData(info, hItem); + BrItemData *item_data = BrFolder_GetItemData(info, hItem); HRESULT hr = item_data->lpsfParent->CompareIDs(0, item_data->pidlFull, pidlFull); if (SUCCEEDED(hr) && !HRESULT_CODE(hr)) @@ -950,7 +950,7 @@ BrsFolder_FindItemByPidl(BrsFolder *info, PCIDLIST_ABSOLUTE pidlFull, HTREEITEM for (hItem = TreeView_GetChild(info->hwndTreeView, hItem); hItem; hItem = TreeView_GetNextSibling(info->hwndTreeView, hItem)) { - HTREEITEM newItem = BrsFolder_FindItemByPidl(info, pidlFull, hItem); + HTREEITEM newItem = BrFolder_FindItemByPidl(info, pidlFull, hItem); if (newItem) return newItem; } @@ -959,7 +959,7 @@ BrsFolder_FindItemByPidl(BrsFolder *info, PCIDLIST_ABSOLUTE pidlFull, HTREEITEM } static void -BrsFolder_OnChange(BrsFolder *info, const PCIDLIST_ABSOLUTE *pidls, LONG event) +BrFolder_OnChange(BrFolder *info, const PCIDLIST_ABSOLUTE *pidls, LONG event) { TRACE("(%p)->(%p, %p, 0x%08x)\n", info, pidls[0], pidls[1], event); @@ -969,7 +969,7 @@ BrsFolder_OnChange(BrsFolder *info, const PCIDLIST_ABSOLUTE *pidls, LONG event) case SHCNE_DELETE: { HTREEITEM hRoot = TreeView_GetRoot(info->hwndTreeView); - HTREEITEM hItem = BrsFolder_FindItemByPidl(info, pidls[0], hRoot); + HTREEITEM hItem = BrFolder_FindItemByPidl(info, pidls[0], hRoot); if (hItem) TreeView_DeleteItem(info->hwndTreeView, hItem); break; @@ -978,25 +978,25 @@ BrsFolder_OnChange(BrsFolder *info, const PCIDLIST_ABSOLUTE *pidls, LONG event) } /************************************************************************* - * BrsFolderDlgProc32 (not an exported API function) + * BrFolderDlgProc32 (not an exported API function) */ static INT_PTR CALLBACK -BrsFolderDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +BrFolderDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { if (uMsg == WM_INITDIALOG) - return BrsFolder_OnInitDialog(hWnd, (BrsFolder *)lParam); + return BrFolder_OnInitDialog(hWnd, (BrFolder *)lParam); - BrsFolder *info = (BrsFolder *)GetPropW(hWnd, L"__WINE_BRSFOLDERDLG_INFO"); + BrFolder *info = (BrFolder *)GetPropW(hWnd, L"__WINE_BRSFOLDERDLG_INFO"); if (!info) return 0; switch (uMsg) { case WM_NOTIFY: - return BrsFolder_OnNotify(info, (UINT)wParam, (LPNMHDR)lParam); + return BrFolder_OnNotify(info, (UINT)wParam, (LPNMHDR)lParam); case WM_COMMAND: - BrsFolder_OnCommand(info, wParam); + BrFolder_OnCommand(info, wParam); break; case WM_GETMINMAXINFO: @@ -1027,28 +1027,28 @@ BrsFolderDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) case BFFM_SETSELECTIONA: if (wParam) // String - return BrsFolder_OnSetSelectionA(info, (LPSTR)lParam); + return BrFolder_OnSetSelectionA(info, (LPSTR)lParam); else // PIDL - return BrsFolder_OnSetSelectionPidl(info, (LPITEMIDLIST)lParam); + return BrFolder_OnSetSelectionPidl(info, (LPITEMIDLIST)lParam); case BFFM_SETSELECTIONW: if (wParam) // String - return BrsFolder_OnSetSelectionW(info, (LPWSTR)lParam); + return BrFolder_OnSetSelectionW(info, (LPWSTR)lParam); else // PIDL - return BrsFolder_OnSetSelectionPidl(info, (LPITEMIDLIST)lParam); + return BrFolder_OnSetSelectionPidl(info, (LPITEMIDLIST)lParam); case BFFM_SETEXPANDED: // Unicode only if (wParam) // String - return BrsFolder_OnSetExpandedString(info, (LPWSTR)lParam, NULL); + return BrFolder_OnSetExpandedString(info, (LPWSTR)lParam, NULL); else // PIDL - return BrsFolder_OnSetExpandedPidl(info, (LPITEMIDLIST)lParam, NULL); + return BrFolder_OnSetExpandedPidl(info, (LPITEMIDLIST)lParam, NULL); case SHV_CHANGE_NOTIFY: - BrsFolder_OnChange(info, (const PCIDLIST_ABSOLUTE *)wParam, (LONG)lParam); + BrFolder_OnChange(info, (const PCIDLIST_ABSOLUTE *)wParam, (LONG)lParam); break; case WM_DESTROY: - BrsFolder_OnDestroy(info); + BrFolder_OnDestroy(info); break; } @@ -1097,13 +1097,13 @@ SHBrowseForFolderW(LPBROWSEINFOW lpbi) { TRACE("%p\n", lpbi); - BrsFolder info = { lpbi }; + BrFolder info = { lpbi }; HRESULT hr = OleInitialize(NULL); INT id = ((lpbi->ulFlags & BIF_USENEWUI) ? IDD_BROWSE_FOR_FOLDER_NEW : IDD_BROWSE_FOR_FOLDER); INT_PTR ret = DialogBoxParamW(shell32_hInstance, MAKEINTRESOURCEW(id), lpbi->hwndOwner, - BrsFolderDlgProc, (LPARAM)&info); + BrFolderDlgProc, (LPARAM)&info); if (SUCCEEDED(hr)) OleUninitialize();