diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4db2807a7f5..f24c6793d47 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -82,24 +82,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.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; VS 2015 only with windows-2019 - - os: windows-2019 - toolset: '14.2' - - os: windows-2019 - toolset: '14.1' - - os: windows-latest - toolset: '14.0' + exclude: # Build NT6 ISOs only with the latest toolset when compiled as a debug build - dllver: 0x600 - os: windows-2019 - - dllver: 0x600 - toolset: '14.1' - - dllver: 0x600 - toolset: '14.0' + toolset: 14.2 - dllver: 0x600 config: Release fail-fast: false @@ -153,7 +143,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 @@ -230,6 +220,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: @@ -256,13 +247,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 @@ -291,7 +282,7 @@ jobs: build-msbuild-i386: name: MSBuild (i386) - runs-on: windows-2019 + runs-on: windows-latest steps: - name: Install Flex and Bison run: | @@ -311,6 +302,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 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/README.md b/README.md index 67c367f8c63..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 @@ -56,7 +50,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. @@ -127,10 +121,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/ 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/base/applications/magnify/lang/ro-RO.rc b/base/applications/magnify/lang/ro-RO.rc index a5627fe8696..4b7e245bd35 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 diff --git a/base/applications/mscutils/eventvwr/lang/bg-BG.rc b/base/applications/mscutils/eventvwr/lang/bg-BG.rc index 97d98410c0d..339a0f7b69f 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 5da297a7f1b..901f9e4bea2 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 3a63e251513..da58014f55e 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 e3d49258635..1902d18192a 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 1e5cd8f5011..21956f5d21c 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 971eef79e0e..2d202ddd22f 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 3eb786ed0c6..ccb973e125d 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 ce438cb0b4e..744dba085bf 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 ad14bad81c2..1b2064ad1fd 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 b781e04a7e2..100508617ba 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 00d88cb5f30..f7c5e56a24b 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 5c8a933680f..5f31f4e5f59 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 fe1bf0a3f7a..66125d0f3e9 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 2cde21f9b1c..3236c987ae3 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 b7b5887fe99..deab0252c97 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 6f5129d1e96..8b450aa3ac2 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 c17c681bcab..297f3eaa0b6 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 e7d640457f4..a93dd7bc35c 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 4cd88914453..a564eb96b46 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 8750b798b03..47078175ed3 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 cbef720026b..22a2672fbf1 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 4c3e45bab9e..c741cf5c29e 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 ac31006295a..a0de4b6f382 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 405b2d4de4d..997ffe2372e 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 04c25e561cd..e8c9cb13487 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 diff --git a/base/applications/mstsc/lang/ro-RO.rc b/base/applications/mstsc/lang/ro-RO.rc index ca4c2b94849..c08546a0d6c 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 diff --git a/base/applications/notepad/dialog.c b/base/applications/notepad/dialog.c index 82c6c5c57bc..3bef0062fe4 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) @@ -924,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 */ diff --git a/base/applications/osk/lang/ro-RO.rc b/base/applications/osk/lang/ro-RO.rc index 614e23b0bba..23f98679080 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 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..d7cc3a678e0 --- /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) + key.DeleteSubKey(tmp); // DelRegEmpty ignores errors + } + 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..e40a5fb8b53 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 @@ -544,7 +544,7 @@ CMainWindow::OnCommand(WPARAM wParam, LPARAM lParam) break; case ID_REFRESH: - UpdateApplicationsList(SelectedEnumType); + UpdateApplicationsList(SelectedEnumType, bReload); break; case ID_RESETDB: 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 db01da19c9c..7664010aba5 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 7288a133b6e..0f229c6f8c8 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 9acce795a66..c6839c20283 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 2217cfb606d..0495b2f314a 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 1d9e6fad739..679564aec92 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 fc1d9aa941d..5b7ef9cc2eb 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 f9c187564cf..9b7048bee22 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 05b276f2ced..987017dab1c 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 904777cfefe..b1adcd7f6fc 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 cb6ba2383f1..c385fa670ff 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 7fb9f486a5d..b7c73c1bfdd 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 a1670054446..2054de478de 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 7d125607f0a..3f903d6d6cd 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 dd236584fa0..43bc9236aa4 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 a4586fb2121..a8ee7781a3c 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 498ea6eef53..8dd46776b96 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 02a95537712..3afeb816751 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 e4b5a6ba371..6441207ef74 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 d804644fc18..6feb214cd57 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 74baa53fa28..5c82c4eebaa 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 da75d3ef27f..f7272d2d1cb 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 6b11b3b0b59..4f439e40430 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 f09ed96cf32..65f83303586 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 67f514a61a6..1c584a60d26 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 bd11f3232f8..0fdd01c4512 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 abb62f27bd1..11e15f7ee1e 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); diff --git a/base/applications/regedit/framewnd.c b/base/applications/regedit/framewnd.c index 6f382a072cd..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; @@ -1400,7 +1503,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: 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) 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, diff --git a/base/applications/taskmgr/procpage.c b/base/applications/taskmgr/procpage.c index 27b34947153..1d16f2a3b83 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,14 +1241,18 @@ 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); + /* 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); 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); diff --git a/base/services/w32time/register.c b/base/services/w32time/register.c index 9425b24a918..f47e2a01e23 100644 --- a/base/services/w32time/register.c +++ b/base/services/w32time/register.c @@ -236,7 +236,7 @@ SetNtpClientValues(VOID) goto done; } - dwValue = 4 * 60 * 60; // 4 hour poll time for setting clock + 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 0edec4bbf55..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 4 * 60 * 60; // 4 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 */ diff --git a/base/setup/lib/bootsup.c b/base/setup/lib/bootsup.c index c230c0c6c60..313c006b93f 100644 --- a/base/setup/lib/bootsup.c +++ b/base/setup/lib/bootsup.c @@ -1,6 +1,6 @@ /* * COPYRIGHT: See COPYING in the top level directory - * PROJECT: Windivs Setup Library + * PROJECT: ReactOS Setup Library * FILE: base/setup/lib/bootsup.c * PURPOSE: Bootloader support functions * PROGRAMMERS: ... @@ -51,7 +51,7 @@ TrimTrailingPathSeparators_UStr( static VOID -CreateFreeLoaderWindivsEntries( +CreateFreeLoaderReactOSEntries( IN PVOID BootStoreHandle, IN PCWSTR ArcPath) { @@ -70,75 +70,75 @@ CreateFreeLoaderWindivsEntries( Options->OsLoadPath = ArcPath; - /* Windivs */ - // BootEntry->BootEntryKey = MAKESTRKEY(L"Windivs"); - BootEntry->FriendlyName = L"\"Windivs\""; + /* ReactOS */ + // BootEntry->BootEntryKey = MAKESTRKEY(L"ReactOS"); + BootEntry->FriendlyName = L"\"ReactOS\""; Options->OsLoadOptions = L"/FASTDETECT"; - AddBootStoreEntry(BootStoreHandle, BootEntry, MAKESTRKEY(L"Windivs")); + AddBootStoreEntry(BootStoreHandle, BootEntry, MAKESTRKEY(L"ReactOS")); - /* Windivs_Debug */ - // BootEntry->BootEntryKey = MAKESTRKEY(L"Windivs_Debug"); - BootEntry->FriendlyName = L"\"Windivs (Debug)\""; + /* ReactOS_Debug */ + // BootEntry->BootEntryKey = MAKESTRKEY(L"ReactOS_Debug"); + BootEntry->FriendlyName = L"\"ReactOS (Debug)\""; Options->OsLoadOptions = L"/DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200 /SOS"; - AddBootStoreEntry(BootStoreHandle, BootEntry, MAKESTRKEY(L"Windivs_Debug")); + AddBootStoreEntry(BootStoreHandle, BootEntry, MAKESTRKEY(L"ReactOS_Debug")); #ifdef _WINKD_ - /* Windivs_VBoxDebug */ - // BootEntry->BootEntryKey = MAKESTRKEY(L"Windivs_VBoxDebug"); - BootEntry->FriendlyName = L"\"Windivs (VBox Debug)\""; + /* ReactOS_VBoxDebug */ + // BootEntry->BootEntryKey = MAKESTRKEY(L"ReactOS_VBoxDebug"); + BootEntry->FriendlyName = L"\"ReactOS (VBox Debug)\""; Options->OsLoadOptions = L"/DEBUG /DEBUGPORT=VBOX /SOS"; - AddBootStoreEntry(BootStoreHandle, BootEntry, MAKESTRKEY(L"Windivs_VBoxDebug")); + AddBootStoreEntry(BootStoreHandle, BootEntry, MAKESTRKEY(L"ReactOS_VBoxDebug")); #endif #if DBG #ifndef _WINKD_ - /* Windivs_KdSerial */ - // BootEntry->BootEntryKey = MAKESTRKEY(L"Windivs_KdSerial"); - BootEntry->FriendlyName = L"\"Windivs (RosDbg)\""; + /* ReactOS_KdSerial */ + // BootEntry->BootEntryKey = MAKESTRKEY(L"ReactOS_KdSerial"); + BootEntry->FriendlyName = L"\"ReactOS (RosDbg)\""; Options->OsLoadOptions = L"/DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200 /SOS /KDSERIAL"; - AddBootStoreEntry(BootStoreHandle, BootEntry, MAKESTRKEY(L"Windivs_KdSerial")); + AddBootStoreEntry(BootStoreHandle, BootEntry, MAKESTRKEY(L"ReactOS_KdSerial")); #endif - /* Windivs_Screen */ - // BootEntry->BootEntryKey = MAKESTRKEY(L"Windivs_Screen"); - BootEntry->FriendlyName = L"\"Windivs (Screen)\""; + /* ReactOS_Screen */ + // BootEntry->BootEntryKey = MAKESTRKEY(L"ReactOS_Screen"); + BootEntry->FriendlyName = L"\"ReactOS (Screen)\""; Options->OsLoadOptions = L"/DEBUG /DEBUGPORT=SCREEN /SOS"; - AddBootStoreEntry(BootStoreHandle, BootEntry, MAKESTRKEY(L"Windivs_Screen")); + AddBootStoreEntry(BootStoreHandle, BootEntry, MAKESTRKEY(L"ReactOS_Screen")); - /* Windivs_LogFile */ - // BootEntry->BootEntryKey = MAKESTRKEY(L"Windivs_LogFile"); - BootEntry->FriendlyName = L"\"Windivs (Log file)\""; + /* ReactOS_LogFile */ + // BootEntry->BootEntryKey = MAKESTRKEY(L"ReactOS_LogFile"); + BootEntry->FriendlyName = L"\"ReactOS (Log file)\""; Options->OsLoadOptions = L"/DEBUG /DEBUGPORT=FILE /SOS"; - AddBootStoreEntry(BootStoreHandle, BootEntry, MAKESTRKEY(L"Windivs_LogFile")); + AddBootStoreEntry(BootStoreHandle, BootEntry, MAKESTRKEY(L"ReactOS_LogFile")); - /* Windivs_Ram */ - // BootEntry->BootEntryKey = MAKESTRKEY(L"Windivs_Ram"); - BootEntry->FriendlyName = L"\"Windivs (RAM Disk)\""; - Options->OsLoadPath = L"ramdisk(0)\\Windivs"; + /* ReactOS_Ram */ + // BootEntry->BootEntryKey = MAKESTRKEY(L"ReactOS_Ram"); + BootEntry->FriendlyName = L"\"ReactOS (RAM Disk)\""; + Options->OsLoadPath = L"ramdisk(0)\\ReactOS"; Options->OsLoadOptions = L"/DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200 /SOS /RDPATH=reactos.img /RDIMAGEOFFSET=32256"; - AddBootStoreEntry(BootStoreHandle, BootEntry, MAKESTRKEY(L"Windivs_Ram")); + AddBootStoreEntry(BootStoreHandle, BootEntry, MAKESTRKEY(L"ReactOS_Ram")); - /* Windivs_EMS */ - // BootEntry->BootEntryKey = MAKESTRKEY(L"Windivs_EMS"); - BootEntry->FriendlyName = L"\"Windivs (Emergency Management Services)\""; + /* ReactOS_EMS */ + // BootEntry->BootEntryKey = MAKESTRKEY(L"ReactOS_EMS"); + BootEntry->FriendlyName = L"\"ReactOS (Emergency Management Services)\""; Options->OsLoadPath = ArcPath; Options->OsLoadOptions = L"/DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200 /SOS /redirect=com2 /redirectbaudrate=115200"; - AddBootStoreEntry(BootStoreHandle, BootEntry, MAKESTRKEY(L"Windivs_EMS")); + AddBootStoreEntry(BootStoreHandle, BootEntry, MAKESTRKEY(L"ReactOS_EMS")); #endif - /* DefaultOS=Windivs */ + /* DefaultOS=ReactOS */ #if DBG && !defined(_WINKD_) if (IsUnattendedSetup) { - BootOptions.CurrentBootEntryKey = MAKESTRKEY(L"Windivs_KdSerial"); + BootOptions.NextBootEntryKey = MAKESTRKEY(L"ReactOS_KdSerial"); } else #endif { #if DBG - BootOptions.CurrentBootEntryKey = MAKESTRKEY(L"Windivs_Debug"); + BootOptions.NextBootEntryKey = MAKESTRKEY(L"ReactOS_Debug"); #else - BootOptions.CurrentBootEntryKey = MAKESTRKEY(L"Windivs"); + BootOptions.NextBootEntryKey = MAKESTRKEY(L"ReactOS"); #endif } @@ -157,12 +157,12 @@ CreateFreeLoaderWindivsEntries( } #endif - BootOptions.Version = FreeLdr; - SetBootStoreOptions(BootStoreHandle, &BootOptions, 2 | 1); + SetBootStoreOptions(BootStoreHandle, &BootOptions, + BOOT_OPTIONS_TIMEOUT | BOOT_OPTIONS_NEXT_BOOTENTRY_KEY); } static NTSTATUS -CreateFreeLoaderIniForWindivs( +CreateFreeLoaderIniForReactOS( IN PCWSTR IniPath, IN PCWSTR ArcPath) { @@ -170,12 +170,13 @@ CreateFreeLoaderIniForWindivs( 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; - /* Add the Windivs entries */ - CreateFreeLoaderWindivsEntries(BootStoreHandle, ArcPath); + /* Add the ReactOS entries */ + CreateFreeLoaderReactOSEntries(BootStoreHandle, ArcPath); /* Close the INI file */ CloseBootStore(BootStoreHandle); @@ -183,40 +184,105 @@ CreateFreeLoaderIniForWindivs( } static NTSTATUS -CreateFreeLoaderIniForWindivsAndBootSector( +CreateFreeLoaderIniForReactOSAndBootSector( IN PCWSTR IniPath, 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, TRUE); + Status = OpenBootStore(&BootStoreHandle, IniPath, FreeLdr, + BS_CreateAlways /* BS_OpenAlways */, BS_ReadWriteAccess); if (!NT_SUCCESS(Status)) return Status; - /* Add the Windivs entries */ - CreateFreeLoaderWindivsEntries(BootStoreHandle, ArcPath); + /* Add the ReactOS entries */ + CreateFreeLoaderReactOSEntries(BootStoreHandle, ArcPath); 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; @@ -229,7 +295,7 @@ CreateFreeLoaderIniForWindivsAndBootSector( // // I think this function can be generalizable as: -// "find the corresponding 'Windivs' boot entry in this loader config file +// "find the corresponding 'ReactOS' boot entry in this loader config file // (here abstraction comes there), and if none, add a new one". // @@ -245,7 +311,7 @@ typedef struct _ENUM_REACTOS_ENTRIES_DATA // PENUM_BOOT_ENTRIES_ROUTINE static NTSTATUS NTAPI -EnumerateWindivsEntries( +EnumerateReactOSEntries( IN BOOT_STORE_TYPE Type, IN PBOOT_STORE_ENTRY BootEntry, IN PVOID Parameter OPTIONAL) @@ -264,7 +330,7 @@ EnumerateWindivsEntries( RTL_FIELD_SIZE(NTOS_OPTIONS, Signature)) != RTL_FIELD_SIZE(NTOS_OPTIONS, Signature)) { - /* This is not a Windivs entry */ + /* This is not a ReactOS entry */ // DPRINT(" An installation '%S' of unsupported type '%S'\n", // BootEntry->FriendlyName, BootEntry->Version ? BootEntry->Version : L"n/a"); DPRINT(" An installation '%S' of unsupported type %lu\n", @@ -276,7 +342,7 @@ EnumerateWindivsEntries( /* BootType is Windows2003, now check OsLoadPath */ if (!Options->OsLoadPath || !*Options->OsLoadPath) { - /* Certainly not a Windivs installation */ + /* Certainly not a ReactOS installation */ DPRINT1(" A Win2k3 install '%S' without an ARC path?!\n", BootEntry->FriendlyName); /* Continue the enumeration */ goto SkipThisEntry; @@ -289,7 +355,7 @@ EnumerateWindivsEntries( if (!NT_SUCCESS(Status) || _wcsicmp(Options->OsLoadPath, SystemPath) != 0) { /* - * This entry is a Windivs entry, but the SystemRoot + * This entry is a ReactOS entry, but the SystemRoot * does not match the one we are looking for. */ /* Continue the enumeration */ @@ -302,7 +368,7 @@ EnumerateWindivsEntries( // DPRINT(" Found a Win2k3 install '%S' with ARC path '%S'\n", // BootEntry->FriendlyName, Options->OsLoadPath); - DPRINT("EnumerateWindivsEntries: OsLoadPath: '%S'\n", Options->OsLoadPath); + DPRINT("EnumerateReactOSEntries: OsLoadPath: '%S'\n", Options->OsLoadPath); Data->UseExistingEntry = TRUE; RtlStringCchCopyW(Data->OsName, ARRAYSIZE(Data->OsName), BootEntry->FriendlyName); @@ -315,9 +381,9 @@ EnumerateWindivsEntries( if (Type == FreeLdr && wcscmp(Data->SectionName, (PWSTR)BootEntry->BootEntryKey)== 0) { RtlStringCchPrintfW(Data->SectionName, ARRAYSIZE(Data->SectionName), - L"Windivs_%lu", Data->i); + L"ReactOS_%lu", Data->i); RtlStringCchPrintfW(Data->OsName, ARRAYSIZE(Data->OsName), - L"\"Windivs %lu\"", Data->i); + L"\"ReactOS %lu\"", Data->i); Data->i++; } return STATUS_SUCCESS; @@ -337,7 +403,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; @@ -345,20 +412,20 @@ UpdateFreeLoaderIni( Data.UseExistingEntry = TRUE; Data.i = 1; Data.ArcPath = ArcPath; - RtlStringCchCopyW(Data.SectionName, ARRAYSIZE(Data.SectionName), L"Windivs"); - RtlStringCchCopyW(Data.OsName, ARRAYSIZE(Data.OsName), L"\"Windivs\""); + RtlStringCchCopyW(Data.SectionName, ARRAYSIZE(Data.SectionName), L"ReactOS"); + RtlStringCchCopyW(Data.OsName, ARRAYSIZE(Data.OsName), L"\"ReactOS\""); // // FIXME: We temporarily use EnumerateBootStoreEntries, until // both QueryBootStoreEntry and ModifyBootStoreEntry get implemented. // - Status = EnumerateBootStoreEntries(BootStoreHandle, EnumerateWindivsEntries, &Data); + Status = EnumerateBootStoreEntries(BootStoreHandle, EnumerateReactOSEntries, &Data); - /* Create a new "Windivs" entry if there is none already existing that suits us */ + /* Create a new "ReactOS" entry if there is none already existing that suits us */ if (!Data.UseExistingEntry) { - // RtlStringCchPrintfW(Data.SectionName, ARRAYSIZE(Data.SectionName), L"Windivs_%lu", Data.i); - // RtlStringCchPrintfW(Data.OsName, ARRAYSIZE(Data.OsName), L"\"Windivs %lu\"", Data.i); + // RtlStringCchPrintfW(Data.SectionName, ARRAYSIZE(Data.SectionName), L"ReactOS_%lu", Data.i); + // RtlStringCchPrintfW(Data.OsName, ARRAYSIZE(Data.OsName), L"\"ReactOS %lu\"", Data.i); BootEntry->Version = FreeLdr; BootEntry->BootFilePath = NULL; @@ -398,7 +465,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; @@ -406,14 +474,14 @@ UpdateBootIni( Data.UseExistingEntry = TRUE; // Data.i = 1; Data.ArcPath = EntryName; - // RtlStringCchCopyW(Data.SectionName, ARRAYSIZE(Data.SectionName), L"Windivs"); - RtlStringCchCopyW(Data.OsName, ARRAYSIZE(Data.OsName), L"\"Windivs\""); + // RtlStringCchCopyW(Data.SectionName, ARRAYSIZE(Data.SectionName), L"ReactOS"); + RtlStringCchCopyW(Data.OsName, ARRAYSIZE(Data.OsName), L"\"ReactOS\""); // // FIXME: We temporarily use EnumerateBootStoreEntries, until // both QueryBootStoreEntry and ModifyBootStoreEntry get implemented. // - Status = EnumerateBootStoreEntries(BootStoreHandle, EnumerateWindivsEntries, &Data); + Status = EnumerateBootStoreEntries(BootStoreHandle, EnumerateReactOSEntries, &Data); /* If either the key was not found, or contains something else, add a new one */ if (!Data.UseExistingEntry /* || @@ -868,10 +936,10 @@ InstallFatBootcodeToPartition( { /* Create new 'freeldr.ini' */ DPRINT1("Create new 'freeldr.ini'\n"); - Status = CreateFreeLoaderIniForWindivs(SystemRootPath->Buffer, DestinationArcPath->Buffer); + Status = CreateFreeLoaderIniForReactOS(SystemRootPath->Buffer, DestinationArcPath->Buffer); if (!NT_SUCCESS(Status)) { - DPRINT1("CreateFreeLoaderIniForWindivs() failed (Status %lx)\n", Status); + DPRINT1("CreateFreeLoaderIniForReactOS() failed (Status %lx)\n", Status); return Status; } @@ -916,7 +984,7 @@ InstallFatBootcodeToPartition( DPRINT1("Update 'boot.ini'\n"); Status = UpdateBootIni(SystemRootPath->Buffer, L"C:\\bootsect.ros", - L"\"Windivs\""); + L"\"ReactOS\""); if (!NT_SUCCESS(Status)) { DPRINT1("UpdateBootIni() failed (Status %lx)\n", Status); @@ -929,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 */ @@ -939,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 */ @@ -953,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 */ @@ -967,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 */ @@ -980,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 */ @@ -993,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 */ @@ -1007,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 */ @@ -1021,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 */ @@ -1033,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' */ @@ -1059,13 +1107,13 @@ InstallFatBootcodeToPartition( if (IsThereAValidBootSector(SystemRootPath->Buffer)) { - Status = CreateFreeLoaderIniForWindivsAndBootSector( + Status = CreateFreeLoaderIniForReactOSAndBootSector( SystemRootPath->Buffer, DestinationArcPath->Buffer, Section, Description, - BootDrive, BootPartition, BootSector); + SystemRootPath->Buffer, BootSector); if (!NT_SUCCESS(Status)) { - DPRINT1("CreateFreeLoaderIniForWindivsAndBootSector() failed (Status %lx)\n", Status); + DPRINT1("CreateFreeLoaderIniForReactOSAndBootSector() failed (Status %lx)\n", Status); return Status; } @@ -1082,10 +1130,10 @@ InstallFatBootcodeToPartition( } else { - Status = CreateFreeLoaderIniForWindivs(SystemRootPath->Buffer, DestinationArcPath->Buffer); + Status = CreateFreeLoaderIniForReactOS(SystemRootPath->Buffer, DestinationArcPath->Buffer); if (!NT_SUCCESS(Status)) { - DPRINT1("CreateFreeLoaderIniForWindivs() failed (Status %lx)\n", Status); + DPRINT1("CreateFreeLoaderIniForReactOS() failed (Status %lx)\n", Status); return Status; } } @@ -1180,13 +1228,13 @@ InstallBtrfsBootcodeToPartition( { PCWSTR BootSector = L"BOOTSECT.OLD"; - Status = CreateFreeLoaderIniForWindivsAndBootSector( + Status = CreateFreeLoaderIniForReactOSAndBootSector( SystemRootPath->Buffer, DestinationArcPath->Buffer, L"Linux", L"\"Linux\"", - L"hd0", L"1", BootSector); + SystemRootPath->Buffer, BootSector); if (!NT_SUCCESS(Status)) { - DPRINT1("CreateFreeLoaderIniForWindivsAndBootSector() failed (Status %lx)\n", Status); + DPRINT1("CreateFreeLoaderIniForReactOSAndBootSector() failed (Status %lx)\n", Status); return Status; } @@ -1203,10 +1251,10 @@ InstallBtrfsBootcodeToPartition( } else { - Status = CreateFreeLoaderIniForWindivs(SystemRootPath->Buffer, DestinationArcPath->Buffer); + Status = CreateFreeLoaderIniForReactOS(SystemRootPath->Buffer, DestinationArcPath->Buffer); if (!NT_SUCCESS(Status)) { - DPRINT1("CreateFreeLoaderIniForWindivs() failed (Status %lx)\n", Status); + DPRINT1("CreateFreeLoaderIniForReactOS() failed (Status %lx)\n", Status); return Status; } } @@ -1281,13 +1329,13 @@ InstallNtfsBootcodeToPartition( { PCWSTR BootSector = L"BOOTSECT.OLD"; - Status = CreateFreeLoaderIniForWindivsAndBootSector( + Status = CreateFreeLoaderIniForReactOSAndBootSector( SystemRootPath->Buffer, DestinationArcPath->Buffer, L"Linux", L"\"Linux\"", - L"hd0", L"1", BootSector); + SystemRootPath->Buffer, BootSector); if (!NT_SUCCESS(Status)) { - DPRINT1("CreateFreeLoaderIniForWindivsAndBootSector() failed (Status %lx)\n", Status); + DPRINT1("CreateFreeLoaderIniForReactOSAndBootSector() failed (Status %lx)\n", Status); return Status; } @@ -1304,10 +1352,10 @@ InstallNtfsBootcodeToPartition( } else { - Status = CreateFreeLoaderIniForWindivs(SystemRootPath->Buffer, DestinationArcPath->Buffer); + Status = CreateFreeLoaderIniForReactOS(SystemRootPath->Buffer, DestinationArcPath->Buffer); if (!NT_SUCCESS(Status)) { - DPRINT1("CreateFreeLoaderIniForWindivs() failed (Status %lx)\n", Status); + DPRINT1("CreateFreeLoaderIniForReactOS() failed (Status %lx)\n", Status); return Status; } } @@ -1422,10 +1470,10 @@ InstallFatBootcodeToFloppy( /* Create new 'freeldr.ini' */ DPRINT("Create new 'freeldr.ini'\n"); - Status = CreateFreeLoaderIniForWindivs(FloppyDevice, DestinationArcPath->Buffer); + Status = CreateFreeLoaderIniForReactOS(FloppyDevice, DestinationArcPath->Buffer); if (!NT_SUCCESS(Status)) { - DPRINT1("CreateFreeLoaderIniForWindivs() failed (Status %lx)\n", Status); + DPRINT1("CreateFreeLoaderIniForReactOS() failed (Status %lx)\n", Status); return Status; } diff --git a/base/setup/lib/setuplib.c b/base/setup/lib/setuplib.c index 9cc4e214adb..34018198401 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") } @@ -349,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 bbaf9fada4a..ad13cbe51df 100644 --- a/base/setup/lib/utils/bldrsup.c +++ b/base/setup/lib/utils/bldrsup.c @@ -1,8 +1,8 @@ /* - * PROJECT: Windivs Setup Library + * PROJECT: ReactOS Setup Library * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) * PURPOSE: Boot Stores Management functionality, with support for - * NT 5.x family (MS Windows <= 2003, and Windivs) bootloaders. + * NT 5.x family (MS Windows <= 2003, and ReactOS) bootloaders. * COPYRIGHT: Copyright 2017-2018 Hermes Belusca-Maito */ @@ -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; @@ -79,8 +81,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! @@ -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( @@ -130,6 +133,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 ****************************************************************/ @@ -179,98 +193,244 @@ 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, &SectionHandle, &ViewBase, &FileSize, FALSE); + &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; } +// +// 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 -CreateCommonFreeLdrSections( - IN OUT PBOOT_STORE_INI_CONTEXT BootStore) +FreeLdrMigrateBootDrivePartWorker( + _In_ PINI_SECTION OsIniSection) { - PINICACHESECTION IniSection; + PCWSTR KeyData; + PINI_KEYWORD OldKey; /* - * Cache the "FREELOADER" section for our future usage. + * 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; + } - /* Get the "FREELOADER" section */ - IniSection = IniCacheGetSection(BootStore->IniCache, L"FREELOADER"); - if (!IniSection) + /* 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) { - /* It does not exist yet, so create it */ - IniSection = IniCacheAppendSection(BootStore->IniCache, L"FREELOADER"); - if (!IniSection) + 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') { - DPRINT1("CreateCommonFreeLdrSections: Failed to create 'FREELOADER' section!\n"); + 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) +{ + PINI_SECTION IniSection; + + /* + * Cache the "FREELOADER" section for our future usage. + */ + + /* Create the "FREELOADER" section */ + 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"Windivs 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"); + /* Create the "Operating Systems" section */ + IniSection = IniAddSection(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"); - } - } + DPRINT1("CreateCommonFreeLdrSections: Failed to create 'Operating Systems' section!\n"); BootStore->OsIniSection = IniSection; } 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)); @@ -279,118 +439,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 { - PINICACHESECTION IniSection; + 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->SectionHandle, - &BootStore->ViewBase, - &BootStore->FileSize, - 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; } @@ -401,17 +654,10 @@ 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 = IniAddSection(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"); - } - } + DPRINT1("OpenIniBootLoaderStore: Failed to retrieve 'FREELOADER' section!\n"); BootStore->OptionsIniSection = IniSection; @@ -419,19 +665,18 @@ 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 = IniAddSection(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"); - } - } + 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) @@ -476,28 +721,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; @@ -505,19 +748,10 @@ 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 = IniAddSection(BootStore->IniCache, L"operating systems"); 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 - } + DPRINT1("OpenIniBootLoaderStore: Failed to retrieve 'operating systems' section!\n"); BootStore->OsIniSection = IniSection; } @@ -527,71 +761,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); @@ -601,44 +828,51 @@ 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) + /* Re-protect the INI file */ + FileAttribs = ProtectAttribs; + if (BootStore->Header.Type == FreeLdr) { - FileAttribute |= (FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY); - Status = ProtectBootIni(BootStore->FileHandle, FileAttribute); + // 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: IniCacheDestroy(BootStore->IniCache); +#if 0 if (BootStore->SectionHandle) { /* Finally, unmap and close the file */ @@ -647,6 +881,7 @@ CloseIniBootLoaderStore( BootStore->ViewBase); } else // if (BootStore->FileHandle) +#endif { /* Just close the file we have opened for creation */ NtClose(BootStore->FileHandle); @@ -654,18 +889,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 @@ -681,18 +915,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; @@ -727,11 +977,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); @@ -740,19 +995,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; @@ -777,7 +1037,6 @@ CloseBootStore( } - static NTSTATUS CreateNTOSEntry( @@ -785,15 +1044,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,42 +1061,24 @@ 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) && + 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 */ - 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, BootPath and BootSector */ + IniAddKey(IniSection, L"BootType", L"BootSector"); + IniAddKey(IniSection, L"BootPath", Options->BootPath); + IniAddKey(IniSection, L"BootSectorFile", Options->FileName); } else { @@ -935,8 +1175,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; @@ -1057,9 +1297,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; @@ -1083,40 +1322,34 @@ QueryBootStoreOptions( return STATUS_NOT_SUPPORTED; } - if (BootStore->Type == FreeLdr) - { - BootOptions->Version = FreeLdr; - - Status = IniCacheGetKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, - L"DefaultOS", (PWCHAR*)&BootOptions->CurrentBootEntryKey); - if (!NT_SUCCESS(Status)) - BootOptions->CurrentBootEntryKey = 0; + BootOptions->Timeout = 0; + BootOptions->CurrentBootEntryKey = 0; + BootOptions->NextBootEntryKey = 0; - Status = IniCacheGetKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, - L"TimeOut", &TimeoutStr); - if (NT_SUCCESS(Status) && TimeoutStr) - BootOptions->Timeout = _wtoi(TimeoutStr); - else - BootOptions->Timeout = 0; - } - 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); + } - Status = IniCacheGetKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, - L"default", (PWCHAR*)&BootOptions->CurrentBootEntryKey); - if (!NT_SUCCESS(Status)) - BootOptions->CurrentBootEntryKey = 0; + IniGetKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, + BootOptionNames[BootStore->Type][BO_DefaultOS], + (PCWSTR*)&BootOptions->NextBootEntryKey); - Status = IniCacheGetKey(((PBOOT_STORE_INI_CONTEXT)BootStore)->OptionsIniSection, - L"timeout", &TimeoutStr); - if (NT_SUCCESS(Status) && TimeoutStr) - BootOptions->Timeout = _wtoi(TimeoutStr); - else - BootOptions->Timeout = 0; - } + /* + * 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; // FIXME: use Status; instead? + return STATUS_SUCCESS; } NTSTATUS @@ -1126,7 +1359,6 @@ SetBootStoreOptions( IN ULONG FieldsToChange) { PBOOT_STORE_CONTEXT BootStore = (PBOOT_STORE_CONTEXT)Handle; - WCHAR TimeoutStr[15]; if (!BootStore || !BootOptions) return STATUS_INVALID_PARAMETER; @@ -1144,33 +1376,34 @@ 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; - - // - // 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); + // if (BootOptions->Length < sizeof(*BootOptions)) + // return STATUS_INVALID_PARAMETER; - 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); + 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; } - static NTSTATUS FreeLdrEnumerateBootEntries( IN PBOOT_STORE_INI_CONTEXT BootStore, @@ -1180,19 +1413,19 @@ FreeLdrEnumerateBootEntries( { NTSTATUS Status = STATUS_SUCCESS; PINICACHEITERATOR Iterator; - PINICACHESECTION OsIniSection; - PWCHAR SectionName, KeyData; + 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; /* 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 { - PWCHAR InstallName; + PCWSTR InstallName; ULONG InstallNameLength; /* Poor-man quotes removal (improvement over bootsup.c:UpdateFreeLoaderIni) */ @@ -1243,20 +1476,19 @@ 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)) + /* Check for supported boot type */ + if (!IniGetKey(OsIniSection, L"BootType", &KeyData) || !KeyData) { - /* Certainly not a Windivs installation */ - DPRINT1("No BootType value present!\n"); + /* Certainly not a ReactOS installation */ + DPRINT1("No BootType value present\n"); goto DoEnum; } - // TODO: What to do with "Windows" ; "WindowsNT40" ; "WindivsSetup" ? + // TODO: What to do with "Windows" ; "WindowsNT40" ; "ReactOSSetup" ? if ((_wcsicmp(KeyData, L"Windows2003") == 0) || (_wcsicmp(KeyData, L"\"Windows2003\"") == 0)) { @@ -1273,18 +1505,14 @@ FreeLdrEnumerateBootEntries( // BootEntry->BootFilePath = NULL; /* Check its SystemPath */ - Status = IniCacheGetKey(OsIniSection, L"SystemPath", &KeyData); - if (!NT_SUCCESS(Status)) - Options->OsLoadPath = NULL; - else + Options->OsLoadPath = NULL; + if (IniGetKey(OsIniSection, L"SystemPath", &KeyData)) 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; + if (IniGetKey(OsIniSection, L"Options", &KeyData)) Options->OsLoadOptions = KeyData; } else @@ -1292,37 +1520,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 */ - Status = IniCacheGetKey(OsIniSection, L"BootDrive", &KeyData); - if (!NT_SUCCESS(Status)) - Options->Drive = NULL; - else - Options->Drive = KeyData; - - /* Check its BootPartition */ - Status = IniCacheGetKey(OsIniSection, L"BootPartition", &KeyData); - if (!NT_SUCCESS(Status)) - Options->Partition = NULL; - else - Options->Partition = KeyData; + /* Check its BootPath */ + Options->BootPath = NULL; + if (IniGetKey(OsIniSection, L"BootPath", &KeyData)) + Options->BootPath = KeyData; /* Check its BootSector */ - Status = IniCacheGetKey(OsIniSection, L"BootSectorFile", &KeyData); - if (!NT_SUCCESS(Status)) - Options->BootSectorFileName = NULL; - else - Options->BootSectorFileName = KeyData; + Options->FileName = NULL; + if (IniGetKey(OsIniSection, L"BootSectorFile", &KeyData)) + Options->FileName = KeyData; } else { @@ -1342,9 +1559,9 @@ FreeLdrEnumerateBootEntries( if (!NT_SUCCESS(Status)) break; } - while (IniCacheFindNextValue(Iterator, &SectionName, &KeyData)); + while (IniFindNextValue(Iterator, &SectionName, &KeyData)); - IniCacheFindClose(Iterator); + IniFindClose(Iterator); return Status; } @@ -1357,7 +1574,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; @@ -1365,11 +1582,11 @@ 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 { - PWCHAR InstallName, OsOptions; + PCWSTR InstallName, OsOptions; ULONG InstallNameLength, OsOptionsLength; /* Poor-man quotes removal (improvement over bootsup.c:UpdateFreeLoaderIni) */ @@ -1476,9 +1693,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/bldrsup.h b/base/setup/lib/utils/bldrsup.h index f1745eb54b2..a36cb93f1cc 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' @@ -98,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 @@ -125,30 +128,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/filesup.c b/base/setup/lib/utils/filesup.c index dcad787d9aa..3cec32f5bdf 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 79cc20c0b1c..1e09cefca78 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/inicache.c b/base/setup/lib/utils/inicache.c index 4ca5c8f3bfc..5889bd6a2ba 100644 --- a/base/setup/lib/utils/inicache.c +++ b/base/setup/lib/utils/inicache.c @@ -16,234 +16,277 @@ /* PRIVATE FUNCTIONS ********************************************************/ -static -PINICACHEKEY +static VOID IniCacheFreeKey( - PINICACHEKEY Key) + _In_ PINI_KEYWORD Key) { - PINICACHEKEY 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 -PINICACHESECTION +static VOID IniCacheFreeSection( - PINICACHESECTION Section) + _In_ PINI_SECTION Section) { - PINICACHESECTION Next; - - if (Section == NULL) - return NULL; + /* Unlink the section */ + RemoveEntryList(&Section->ListEntry); - 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 +PINI_SECTION +IniCacheFindSection( + _In_ PINICACHE Cache, + _In_ PCWSTR Name) +{ + PLIST_ENTRY Entry; + + 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; + } + return NULL; +} static -PINICACHEKEY +PINI_KEYWORD IniCacheFindKey( - PINICACHESECTION Section, - PWCHAR Name, - ULONG NameLength) + _In_ PINI_SECTION Section, + _In_ PCWSTR Name) { - PINICACHEKEY Key; + PLIST_ENTRY Entry; - Key = Section->FirstKey; - while (Key != NULL) + for (Entry = Section->KeyList.Flink; + Entry != &Section->KeyList; + Entry = Entry->Flink) { - if (NameLength == wcslen(Key->Name)) - { - if (_wcsnicmp(Key->Name, Name, NameLength) == 0) - break; - } - - Key = Key->Next; + PINI_KEYWORD Key = CONTAINING_RECORD(Entry, INI_KEYWORD, ListEntry); + if (_wcsicmp(Key->Name, Name) == 0) + return Key; } - - return Key; + return NULL; } - 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; + 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; } - Key = (PINICACHEKEY)RtlAllocateHeap(ProcessHeap, - HEAP_ZERO_MEMORY, - sizeof(INICACHEKEY)); - 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; - Key->Name = (WCHAR*)RtlAllocateHeap(ProcessHeap, - 0, - (NameLength + 1) * sizeof(WCHAR)); - if (Key->Name == 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) { - DPRINT("RtlAllocateHeap() failed\n"); - RtlFreeHeap(ProcessHeap, 0, Key); - return NULL; + RtlFreeHeap(ProcessHeap, 0, NameU); + + /* 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; } - /* Copy value name */ - for (i = 0; i < NameLength; i++) + /* Allocate the key buffer and name */ + Key = (PINI_KEYWORD)RtlAllocateHeap(ProcessHeap, + HEAP_ZERO_MEMORY, + sizeof(INI_KEYWORD)); + if (!Key) { - Key->Name[i] = (WCHAR)Name[i]; + DPRINT("RtlAllocateHeap() failed\n"); + RtlFreeHeap(ProcessHeap, 0, NameU); + return NULL; } - Key->Name[NameLength] = 0; + Key->Name = NameU; - Key->Data = (WCHAR*)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 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; + Key->Data = DataU; - /* Copy value data */ - for (i = 0; i < DataLength; i++) + /* Insert the key into section */ + if (IsListEmpty(&Section->KeyList)) { - Key->Data[i] = (WCHAR)Data[i]; + InsertHeadList(&Section->KeyList, &Key->ListEntry); } - Key->Data[DataLength] = 0; - - - if (Section->FirstKey == NULL) + else if ((InsertionType == INSERT_FIRST) || + ((InsertionType == INSERT_BEFORE) && + (!AnchorKey || (&AnchorKey->ListEntry == Section->KeyList.Flink)))) { - Section->FirstKey = Key; - Section->LastKey = Key; + /* Insert at the head of the list */ + InsertHeadList(&Section->KeyList, &Key->ListEntry); } - else + else if ((InsertionType == INSERT_BEFORE) && AnchorKey) + { + /* Insert before the anchor key */ + InsertTailList(&AnchorKey->ListEntry, &Key->ListEntry); + } + else if ((InsertionType == INSERT_LAST) || + ((InsertionType == INSERT_AFTER) && + (!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) + { + /* Insert after the anchor key */ + InsertHeadList(&AnchorKey->ListEntry, &Key->ListEntry); } - 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; + PWSTR NameU; - if (Cache == NULL || Name == NULL || NameLength == 0) + if (!Cache || !Name || NameLength == 0) { DPRINT("Invalid parameter\n"); return NULL; } - Section = (PINICACHESECTION)RtlAllocateHeap(ProcessHeap, - HEAP_ZERO_MEMORY, - sizeof(INICACHESECTION)); - 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; - /* Allocate and initialize section name */ - Section->Name = (WCHAR*)RtlAllocateHeap(ProcessHeap, - 0, - (NameLength + 1) * sizeof(WCHAR)); - if (Section->Name == 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) { - DPRINT("RtlAllocateHeap() failed\n"); - RtlFreeHeap(ProcessHeap, 0, Section); - return NULL; + RtlFreeHeap(ProcessHeap, 0, NameU); + return Section; } - /* Copy section name */ - for (i = 0; i < NameLength; i++) + /* Allocate the section buffer and name */ + Section = (PINI_SECTION)RtlAllocateHeap(ProcessHeap, + HEAP_ZERO_MEMORY, + sizeof(INI_SECTION)); + if (!Section) { - Section->Name[i] = (WCHAR)Name[i]; + DPRINT("RtlAllocateHeap() failed\n"); + RtlFreeHeap(ProcessHeap, 0, NameU); + return NULL; } - Section->Name[NameLength] = 0; + Section->Name = NameU; + InitializeListHead(&Section->KeyList); - /* Append section */ - if (Cache->FirstSection == NULL) - { - Cache->FirstSection = Section; - Cache->LastSection = Section; - } - else - { - Cache->LastSection->Next = Section; - Section->Prev = Cache->LastSection; - Cache->LastSection = Section; - } + /* Append the section */ + InsertTailList(&Cache->SectionList, &Section->ListEntry); return Section; } - static PCHAR IniCacheSkipWhitespace( @@ -255,7 +298,6 @@ IniCacheSkipWhitespace( return (*Ptr == 0) ? NULL : Ptr; } - static PCHAR IniCacheSkipToNextSection( @@ -274,7 +316,6 @@ IniCacheSkipToNextSection( return (*Ptr == 0) ? NULL : Ptr; } - static PCHAR IniCacheGetSectionName( @@ -283,7 +324,6 @@ IniCacheGetSectionName( PULONG NameSize) { ULONG Size = 0; - CHAR Name[256]; *NamePtr = NULL; *NameSize = 0; @@ -311,15 +351,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 +408,6 @@ IniCacheGetKeyName( return Ptr; } - static PCHAR IniCacheGetKeyValue( @@ -457,8 +492,8 @@ IniCacheLoadFromMemory( { PCHAR Ptr; - PINICACHESECTION Section; - PINICACHEKEY Key; + PINI_SECTION Section; + PINI_KEYWORD Key; PCHAR SectionName; ULONG SectionNameSize; @@ -470,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; @@ -499,12 +529,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 +559,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 +609,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,270 +695,226 @@ IniCacheLoad( return Status; } - 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); } -PINICACHESECTION -IniCacheGetSection( - PINICACHE Cache, - PWCHAR Name) +PINI_SECTION +IniGetSection( + _In_ PINICACHE Cache, + _In_ PCWSTR Name) { - PINICACHESECTION 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 -IniCacheGetKey( - PINICACHESECTION Section, - PWCHAR KeyName, - PWCHAR *KeyData) +PINI_KEYWORD +IniGetKey( + _In_ PINI_SECTION Section, + _In_ PCWSTR KeyName, + _Out_ PCWSTR* KeyData) { - PINICACHEKEY Key; + 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, wcslen(KeyName)); - if (Key == NULL) - { - return STATUS_INVALID_PARAMETER; - } + Key = IniCacheFindKey(Section, KeyName); + if (!Key) + return NULL; *KeyData = Key->Data; - return STATUS_SUCCESS; + return Key; } PINICACHEITERATOR -IniCacheFindFirstValue( - PINICACHESECTION Section, - PWCHAR *KeyName, - PWCHAR *KeyData) +IniFindFirstValue( + _In_ PINI_SECTION Section, + _Out_ PCWSTR* KeyName, + _Out_ PCWSTR* KeyData) { PINICACHEITERATOR Iterator; - PINICACHEKEY Key; + 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 -IniCacheFindNextValue( - PINICACHEITERATOR Iterator, - PWCHAR *KeyName, - PWCHAR *KeyData) +IniFindNextValue( + _In_ PINICACHEITERATOR Iterator, + _Out_ PCWSTR* KeyName, + _Out_ PCWSTR* KeyData) { - PINICACHEKEY Key; + 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 -IniCacheFindClose( - PINICACHEITERATOR Iterator) +IniFindClose( + _In_ PINICACHEITERATOR Iterator) { - if (Iterator == NULL) + if (!Iterator) return; - RtlFreeHeap(ProcessHeap, 0, Iterator); } -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) +VOID +IniRemoveSection( + _In_ PINI_SECTION Section) +{ + if (!Section) { - DPRINT("RtlAllocateHeap() failed\n"); - return NULL; + DPRINT("Invalid parameter\n"); + return; } + IniCacheFreeSection(Section); +} - /* Allocate name buffer */ - Key->Name = (WCHAR*)RtlAllocateHeap(ProcessHeap, - 0, - (wcslen(Name) + 1) * sizeof(WCHAR)); - if (Key->Name == 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); + DPRINT("Invalid parameter\n"); return NULL; } + return IniCacheAddKeyAorW(Section, + AnchorKey, InsertionType, + Name, wcslen(Name), + Data, wcslen(Data), + TRUE); +} - /* Copy value name */ - wcscpy(Key->Name, Name); +PINI_KEYWORD +IniAddKey( + _In_ PINI_SECTION Section, + _In_ PCWSTR Name, + _In_ PCWSTR Data) +{ + return IniInsertKey(Section, NULL, INSERT_LAST, Name, Data); +} - /* Allocate data buffer */ - Key->Data = (WCHAR*)RtlAllocateHeap(ProcessHeap, - 0, - (wcslen(Data) + 1) * sizeof(WCHAR)); - if (Key->Data == NULL) - { - DPRINT("RtlAllocateHeap() failed\n"); - RtlFreeHeap(ProcessHeap, 0, Key->Name); - RtlFreeHeap(ProcessHeap, 0, Key); - return NULL; - } +VOID +IniRemoveKeyByName( + _In_ PINI_SECTION Section, + _In_ PCWSTR KeyName) +{ + PINI_KEYWORD Key; + UNREFERENCED_PARAMETER(Section); - /* Copy value data */ - wcscpy(Key->Data, Data); + Key = IniCacheFindKey(Section, KeyName); + if (Key) + IniCacheFreeKey(Key); +} - /* 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)) +VOID +IniRemoveKey( + _In_ PINI_SECTION Section, + _In_ PINI_KEYWORD Key) +{ + UNREFERENCED_PARAMETER(Section); + if (!Key) { - /* Insert after the anchor key */ - Key->Next = AnchorKey->Next; - Key->Prev = AnchorKey; - AnchorKey->Next->Prev = Key; - AnchorKey->Next = Key; + DPRINT("Invalid parameter\n"); + return; } - - return Key; + IniCacheFreeKey(Key); } - PINICACHE IniCacheCreate(VOID) { @@ -934,24 +924,25 @@ 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; } - NTSTATUS IniCacheSaveByHandle( PINICACHE Cache, HANDLE FileHandle) { NTSTATUS Status; - PINICACHESECTION Section; - PINICACHEKEY Key; + PLIST_ENTRY Entry1, Entry2; + PINI_SECTION Section; + PINI_KEYWORD Key; ULONG BufferSize; PCHAR Buffer; PCHAR Ptr; @@ -961,30 +952,32 @@ 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 */ } 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) @@ -995,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; @@ -1083,57 +1078,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 b955936f924..599dc76c463 100644 --- a/base/setup/lib/utils/inicache.h +++ b/base/setup/lib/utils/inicache.h @@ -7,42 +7,31 @@ #pragma once -typedef struct _INICACHEKEY +typedef struct _INI_KEYWORD { - PWCHAR Name; - PWCHAR Data; + PWSTR Name; + PWSTR Data; + LIST_ENTRY ListEntry; +} INI_KEYWORD, *PINI_KEYWORD; - struct _INICACHEKEY *Next; - struct _INICACHEKEY *Prev; -} INICACHEKEY, *PINICACHEKEY; - - -typedef struct _INICACHESECTION +typedef struct _INI_SECTION { - PWCHAR Name; - - PINICACHEKEY FirstKey; - PINICACHEKEY LastKey; - - struct _INICACHESECTION *Next; - struct _INICACHESECTION *Prev; -} INICACHESECTION, *PINICACHESECTION; - + PWSTR Name; + LIST_ENTRY KeyList; + LIST_ENTRY ListEntry; +} INI_SECTION, *PINI_SECTION; typedef struct _INICACHE { - PINICACHESECTION FirstSection; - PINICACHESECTION LastSection; + LIST_ENTRY SectionList; } INICACHE, *PINICACHE; - typedef struct _PINICACHEITERATOR { - PINICACHESECTION Section; - PINICACHEKEY Key; + PINI_SECTION Section; + PINI_KEYWORD Key; } INICACHEITERATOR, *PINICACHEITERATOR; - typedef enum { INSERT_FIRST, @@ -74,43 +63,67 @@ IniCacheLoad( VOID IniCacheDestroy( - PINICACHE Cache); + _In_ PINICACHE Cache); -PINICACHESECTION -IniCacheGetSection( - PINICACHE Cache, - PWCHAR Name); +PINI_SECTION +IniGetSection( + _In_ PINICACHE Cache, + _In_ PCWSTR Name); -NTSTATUS -IniCacheGetKey( - PINICACHESECTION Section, - PWCHAR KeyName, - PWCHAR *KeyData); +PINI_KEYWORD +IniGetKey( + _In_ PINI_SECTION Section, + _In_ PCWSTR KeyName, + _Out_ PCWSTR* KeyData); PINICACHEITERATOR -IniCacheFindFirstValue( - PINICACHESECTION Section, - PWCHAR *KeyName, - PWCHAR *KeyData); +IniFindFirstValue( + _In_ PINI_SECTION Section, + _Out_ PCWSTR* KeyName, + _Out_ PCWSTR* KeyData); BOOLEAN -IniCacheFindNextValue( - PINICACHEITERATOR Iterator, - PWCHAR *KeyName, - PWCHAR *KeyData); +IniFindNextValue( + _In_ PINICACHEITERATOR Iterator, + _Out_ PCWSTR* KeyName, + _Out_ PCWSTR* KeyData); + +VOID +IniFindClose( + _In_ PINICACHEITERATOR Iterator); + +PINI_SECTION +IniAddSection( + _In_ PINICACHE Cache, + _In_ PCWSTR Name); VOID -IniCacheFindClose( - PINICACHEITERATOR Iterator); +IniRemoveSection( + _In_ PINI_SECTION Section); + +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); +VOID +IniRemoveKeyByName( + _In_ PINI_SECTION Section, + _In_ PCWSTR KeyName); -PINICACHEKEY -IniCacheInsertKey( - PINICACHESECTION Section, - PINICACHEKEY AnchorKey, - INSERTION_TYPE InsertionType, - PWCHAR Name, - PWCHAR Data); +VOID +IniRemoveKey( + _In_ PINI_SECTION Section, + _In_ PINI_KEYWORD Key); PINICACHE IniCacheCreate(VOID); @@ -125,9 +138,4 @@ IniCacheSave( PINICACHE Cache, PWCHAR FileName); -PINICACHESECTION -IniCacheAppendSection( - PINICACHE Cache, - PWCHAR Name); - /* EOF */ diff --git a/base/setup/lib/utils/osdetect.c b/base/setup/lib/utils/osdetect.c index 357662b2aa0..7b83791e02f 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); @@ -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", diff --git a/base/shell/cmd/lang/cs-CZ.rc b/base/shell/cmd/lang/cs-CZ.rc index 976ff48c4d3..7cd4890fd4c 100644 --- a/base/shell/cmd/lang/cs-CZ.rc +++ b/base/shell/cmd/lang/cs-CZ.rc @@ -55,7 +55,7 @@ ERRORLEVEL is set to offset of key user presses in choices.\n" STRING_CMD_HELP5 " [Bash filename completion]" STRING_CMD_HELP6 " [directory stack]" STRING_CMD_HELP7 " [redirections and piping]" - STRING_CMD_HELP8 "Starts a new instance of the Windivs command line interpreter.\n\n\ + STRING_CMD_HELP8 "Starts a new instance of the ReactOS command line interpreter.\n\n\ CMD [/[C|K] command][/P][/Q][/T:bf]\n\n\ /C command Runs the specified command and terminates.\n\ /K command Runs the specified command and remains.\n\ @@ -447,7 +447,7 @@ listing of credits." STRING_VERSION_HELP5 "\nSend bug reports to .\n\ Updates are available at: https://reactos.org" STRING_VERSION_HELP6 "\nFreeDOS version written by:\n" - STRING_VERSION_HELP7 "\nWindivs version written by:\n" + STRING_VERSION_HELP7 "\nReactOS version written by:\n" STRING_VOL_HELP1 " Volume in drive %c is %s\n" STRING_VOL_HELP2 " Volume in drive %c has no label.\n" STRING_VOL_HELP3 " Volume Serial Number is %04X-%04X\n" @@ -531,10 +531,10 @@ title new title\n" STRING_REPLACE_ERROR5 "Přístup odepřen - %s\n" STRING_REPLACE_ERROR6 "Nebyly nazeleny žádné soubory - %s\n" STRING_REPLACE_ERROR7 "Rozšířená chyba 32\n" - STRING_CMD_INFOLINE " Windivs Příkazový řádek Napsání HELP = Nápověda " - STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s Windivs Team.\n" - STRING_REACTOS_VERSION "Windivs [Verze %s %s]\n" - STRING_CMD_SHELLINFO "\nWindivs Interpret příkazového řádku\nVerze %s %s" + 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: " STRING_VERSION_RUNVER "%s [Verze %d.%d.%d] %s" STRING_COPY_FILE " %d souborů(s) zkopírováno\n" diff --git a/base/shell/cmd/lang/de-DE.rc b/base/shell/cmd/lang/de-DE.rc index c6702be0e04..50645880d4a 100644 --- a/base/shell/cmd/lang/de-DE.rc +++ b/base/shell/cmd/lang/de-DE.rc @@ -52,7 +52,7 @@ ERRORLEVEL wird auf den Offset der Taste, welche der Benutzer gedrückt hat, ges STRING_CMD_HELP5 " [Bash Dateinamen-Vervollständigung]" STRING_CMD_HELP6 " [Verzeichnis-Stack]" STRING_CMD_HELP7 " [Weiterleitung und Piping]" - STRING_CMD_HELP8 "Startet eine neue Instanz der Windivs Eingabeaufforderung.\n\n\ + STRING_CMD_HELP8 "Startet eine neue Instanz der ReactOS Eingabeaufforderung.\n\n\ CMD [/[C|K] Befehl][/P][/Q][/T:bf]\n\n\ /C Befehl Führt den Befehl in der Zeichenfolge aus. Anschließend\n\ wird diese Instanz beendet.\n\ @@ -440,10 +440,10 @@ VER [/C][/R][/W]\n\n\ Free Software Foundation entweder in Version 2 oder\n\ (nach eigenem Belieben) jeder höheren Version veröffentlicht, verändern." STRING_VERSION_HELP5 "\nSenden Sie Fehlerberichte an .\n\ -Updates sind auf der offiziellen Windivs-Webseite verfügbar:\n\ +Updates sind auf der offiziellen ReactOS-Webseite verfügbar:\n\ https://reactos.org" STRING_VERSION_HELP6 "\nFreeDOS-Version programmiert von:\n" - STRING_VERSION_HELP7 "\nWindivs-Version programmiert von:\n" + STRING_VERSION_HELP7 "\nReactOS-Version programmiert von:\n" STRING_VOL_HELP1 " Datenträger im Laufwerk %c ist %s\n" STRING_VOL_HELP2 " Datenträger im Laufwerk %c hat keine Bezeichnung.\n" STRING_VOL_HELP3 " Datenträger-Seriennummer: %04X-%04X\n" @@ -527,10 +527,10 @@ Titel neuer Titel" STRING_REPLACE_ERROR5 "Zugriff verweigert - %s\n" STRING_REPLACE_ERROR6 "Keine Dateien gefunden - %s\n" STRING_REPLACE_ERROR7 "Erweiterter Fehler 32\n" - STRING_CMD_INFOLINE " Windivs Eingabeaufforderung HELP eingeben = Hilfe " - STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s Windivs Team.\n" - STRING_REACTOS_VERSION "Windivs [Version %s %s]\n" - STRING_CMD_SHELLINFO "\nWindivs Eingabeaufforderung\nVersion %s %s" + 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: " STRING_VERSION_RUNVER "%s [Version %d.%d.%d] %s" STRING_COPY_FILE " %d Datei(en) kopiert\n" diff --git a/base/shell/cmd/lang/el-GR.rc b/base/shell/cmd/lang/el-GR.rc index d456782008d..a12fe5b93f4 100644 --- a/base/shell/cmd/lang/el-GR.rc +++ b/base/shell/cmd/lang/el-GR.rc @@ -55,7 +55,7 @@ ERRORLEVEL is set to offset of key user presses in choices.\n" STRING_CMD_HELP5 " [Bash filename completion]" STRING_CMD_HELP6 " [directory stack]" STRING_CMD_HELP7 " [redirections and piping]" - STRING_CMD_HELP8 "Starts a new instance of the Windivs command line interpreter.\n\n\ + STRING_CMD_HELP8 "Starts a new instance of the ReactOS command line interpreter.\n\n\ CMD [/[C|K] εντολή][/P][/Q][/T:bf]\n\n\ /C εντολή Εκτελεί τη συγκεκριμένη εντολή και τερματίζει.\n\ /K εντολή Εκτελεί τη συγκεκριμένη εντολή και παραμένει.\n\ @@ -446,7 +446,7 @@ listing of credits." STRING_VERSION_HELP5 "\nSend bug reports to .\n\ Updates are available at: https://reactos.org" STRING_VERSION_HELP6 "\nFreeDOS version written by:\n" - STRING_VERSION_HELP7 "\nWindivs version written by:\n" + STRING_VERSION_HELP7 "\nReactOS version written by:\n" STRING_VOL_HELP1 " Volume in drive %c is %s\n" STRING_VOL_HELP2 " Volume in drive %c has no label.\n" STRING_VOL_HELP3 " Volume Serial Number is %04X-%04X\n" @@ -530,10 +530,10 @@ title new title\n" STRING_REPLACE_ERROR5 "Δεν επιτρέπεται η πρόσβαση - %s\n" STRING_REPLACE_ERROR6 "Δε βρέθηκαν αρχεία - %s\n" STRING_REPLACE_ERROR7 "Extended Error 32\n" - STRING_CMD_INFOLINE " Windivs Command Prompt Type HELP = Help " - STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s Windivs Team.\n" - STRING_REACTOS_VERSION "Windivs [Version %s %s]\n" - STRING_CMD_SHELLINFO "\nWindivs Command Line Interpreter\nVersion %s %s" + 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: " STRING_VERSION_RUNVER "%s [Version %d.%d.%d] %s" STRING_COPY_FILE " %d file(s) copied\n" diff --git a/base/shell/cmd/lang/en-US.rc b/base/shell/cmd/lang/en-US.rc index e44deb2f91e..f52a680072e 100644 --- a/base/shell/cmd/lang/en-US.rc +++ b/base/shell/cmd/lang/en-US.rc @@ -50,7 +50,7 @@ ERRORLEVEL is set to offset of key user presses in choices.\n" STRING_CMD_HELP5 " [Bash filename completion]" STRING_CMD_HELP6 " [directory stack]" STRING_CMD_HELP7 " [redirections and piping]" - STRING_CMD_HELP8 "Starts a new instance of the Windivs command line interpreter.\n\n\ + STRING_CMD_HELP8 "Starts a new instance of the ReactOS command line interpreter.\n\n\ CMD [/[C|K] command][/P][/Q][/T:bf]\n\n\ /C command Runs the specified command and terminates.\n\ /K command Runs the specified command and remains.\n\ @@ -442,7 +442,7 @@ listing of credits." STRING_VERSION_HELP5 "\nSend bug reports to .\n\ Updates are available at: https://reactos.org" STRING_VERSION_HELP6 "\nFreeDOS version written by:\n" - STRING_VERSION_HELP7 "\nWindivs version written by:\n" + STRING_VERSION_HELP7 "\nReactOS version written by:\n" STRING_VOL_HELP1 " Volume in drive %c is %s\n" STRING_VOL_HELP2 " Volume in drive %c has no label.\n" STRING_VOL_HELP3 " Volume Serial Number is %04X-%04X\n" @@ -526,10 +526,10 @@ title new title\n" STRING_REPLACE_ERROR5 "Access denied - %s\n" STRING_REPLACE_ERROR6 "No files found - %s\n" STRING_REPLACE_ERROR7 "Extended Error 32\n" - STRING_CMD_INFOLINE " Windivs Command Prompt Type HELP = Help " - STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s Windivs Team.\n" - STRING_REACTOS_VERSION "Windivs [Version %s %s]\n" - STRING_CMD_SHELLINFO "\nWindivs Command Line Interpreter\nVersion %s %s" + 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: " STRING_VERSION_RUNVER "%s [Version %d.%d.%d] %s" STRING_COPY_FILE " %d file(s) copied\n" diff --git a/base/shell/cmd/lang/es-ES.rc b/base/shell/cmd/lang/es-ES.rc index 1cfbfc40c1c..9622df4df8b 100644 --- a/base/shell/cmd/lang/es-ES.rc +++ b/base/shell/cmd/lang/es-ES.rc @@ -52,7 +52,7 @@ ERRORLEVEL se configura al offset de la tecla que presione el usuario.\n" STRING_CMD_HELP5 " [Completador de nombres de archivos Bash]" STRING_CMD_HELP6 " [Pila de directorios]" STRING_CMD_HELP7 " [Redirecciones y túneles]" - STRING_CMD_HELP8 "Comienza una nueva sesion del interprete de comandos de Windivs.\n\n\ + STRING_CMD_HELP8 "Comienza una nueva sesion del interprete de comandos de ReactOS.\n\n\ CMD [/[C|K] command][/P][/Q][/T:bf]\n\n\ /C command Ejecuta el comando especificado y cierra.\n\ /K command Ejecuta eñ comando especificado y permanece.\n\ @@ -450,7 +450,7 @@ lista de los créditos." STRING_VERSION_HELP5 "\nManda los informes de bugs a .\n\ Actualizaciones disponibles en: https://reactos.org" STRING_VERSION_HELP6 "\nVersión de FreeDOS escrita por:\n" - STRING_VERSION_HELP7 "\nVersión de Windivs escrita por:\n" + STRING_VERSION_HELP7 "\nVersión de ReactOS escrita por:\n" STRING_VOL_HELP1 " El volumen en la unidad %c es %s\n" STRING_VOL_HELP2 " El volumen en la unidad %c no tiene etiqueta.\n" STRING_VOL_HELP3 " El número de serie del volumen es %04X-%04X\n" @@ -534,10 +534,10 @@ title Nuevo título\n" STRING_REPLACE_ERROR5 "Acceso denegado - %s\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 Windivs Escribe HELP para ver la ayuda " - STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s Windivs Team.\n" - STRING_REACTOS_VERSION "Windivs [Versión %s %s]\n" - STRING_CMD_SHELLINFO "\nIntérprete de comandos de Windivs\nVersion %s %s" + 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: " STRING_VERSION_RUNVER "%s [Versión %d.%d.%d] %s" STRING_COPY_FILE " %d archivo(s) copiado(s)\n" diff --git a/base/shell/cmd/lang/fr-FR.rc b/base/shell/cmd/lang/fr-FR.rc index 3d1fa8e54f5..85d4ad62c12 100644 --- a/base/shell/cmd/lang/fr-FR.rc +++ b/base/shell/cmd/lang/fr-FR.rc @@ -54,7 +54,7 @@ ERRORLEVEL est modifié à l'offset de la touche enfoncée parmi les choix." STRING_CMD_HELP5 " [complétion des noms de fichiers façon Bash]" STRING_CMD_HELP6 " [pile de répertoires]" STRING_CMD_HELP7 " [redirections et canaux]" - STRING_CMD_HELP8 "Démarre une nouvelle instance de l'interpréteur de commandes de Windivs.\n\n\ + STRING_CMD_HELP8 "Démarre une nouvelle instance de l'interpréteur de commandes de ReactOS.\n\n\ CMD [/[C|K] commande][/P][/Q][/T:ap]\n\n\ /C commande Lance la commande spécifiée et se termine.\n\ /K commande Lance la commande spécifiée et reste en mémoire.\n\ @@ -327,7 +327,7 @@ des caractères spéciaux suivants:\n\n\ $Q = (signe égale)\n\ $S (espace)\n\ $T Heure courante\n\ - $V Numéro de version de Windivs\n\ + $V Numéro de version de ReactOS\n\ $_ Retour chariot/saut de ligne\n\ $$ $ (signe dollar)" STRING_PROMPT_HELP2 " $+ Affiche la hauteur de la pile de répertoires" @@ -458,7 +458,7 @@ listing of credits." STRING_VERSION_HELP5 "\nEnvoyer les rapports d'erreur à .\n\ Les mises à jour sont disponibles à : https://reactos.org" STRING_VERSION_HELP6 "\nVersion FreeDOS écrite par:\n" - STRING_VERSION_HELP7 "\nVersion Windivs écrite par:\n" + STRING_VERSION_HELP7 "\nVersion ReactOS écrite par:\n" STRING_VOL_HELP1 " Le nom de volume du lecteur %c est %s\n" STRING_VOL_HELP2 " Le volume dans le lecteur %c n'a pas de nom\n" STRING_VOL_HELP3 " Le numéro de série du volume est %04X-%04X\n" @@ -542,10 +542,10 @@ titre titre de la fenêtre" STRING_REPLACE_ERROR5 "Accès refusé - %s\n" STRING_REPLACE_ERROR6 "Aucun fichier trouvé - %s\n" STRING_REPLACE_ERROR7 "Erreur étendue 32\n" - STRING_CMD_INFOLINE " Windivs Command Prompt Type HELP = Help " - STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s Windivs Team.\n" - STRING_REACTOS_VERSION "Windivs [Version %s %s]\n" - STRING_CMD_SHELLINFO "\nInterpréteur de ligne de commandes Windivs\nVersion %s %s" + 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: " STRING_VERSION_RUNVER "%s [Version %d.%d.%d] %s" STRING_COPY_FILE " %d fichier(s) copié(s)\n" diff --git a/base/shell/cmd/lang/hu-HU.rc b/base/shell/cmd/lang/hu-HU.rc index febbf4c279a..c4242536933 100644 --- a/base/shell/cmd/lang/hu-HU.rc +++ b/base/shell/cmd/lang/hu-HU.rc @@ -53,7 +53,7 @@ Az ERRORLEVEL a válasz sorszámára lesz beállítva.\n" STRING_CMD_HELP5 " [Bash típusú állománynév kiegészítés]" STRING_CMD_HELP6 " [mappa tár]" STRING_CMD_HELP7 " [átirányítások és csővezetékek]" - STRING_CMD_HELP8 "Elindít egy új Windivs parancssor értelmezőt.\n\n\ + STRING_CMD_HELP8 "Elindít egy új ReactOS parancssor értelmezőt.\n\n\ CMD [/[C|K] parancs][/P][/Q][/T:eh]\n\n\ /C parancs Végrehajtja a parancsot, majd kilép.\n\ /K parancs Végrehajtja a parancsot és tovább fut az értelmező.\n\ @@ -434,7 +434,7 @@ Gépelje be a `ver /c'-t a készítők listájáért." STRING_VERSION_HELP5 "\nHibákról e-maileket ide küldhet: .\n\ Frissítések és egyéb információk: https://reactos.org" STRING_VERSION_HELP6 "\nA FreeDOS verzió készítői:\n" - STRING_VERSION_HELP7 "\nA Windivs verzió készítői:\n" + STRING_VERSION_HELP7 "\nA ReactOS verzió készítői:\n" STRING_VOL_HELP1 " A %c meghajtóban lévő kötet: %s\n" STRING_VOL_HELP2 " A %c meghajtóban lévő kötetnek nincs címkéje.\n" STRING_VOL_HELP3 " A kötet sorozatszáma: %04X-%04X\n" @@ -518,10 +518,10 @@ title új cím\n" STRING_REPLACE_ERROR5 "Hozzáférés megtagadva - %s\n" STRING_REPLACE_ERROR6 "Nem találhatóak fájlok - %s\n" STRING_REPLACE_ERROR7 "Kiterjesztett hiba 32\n" - STRING_CMD_INFOLINE " Windivs Parancssor HELP parancs = Súgó " - STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s Windivs Team.\n" - STRING_REACTOS_VERSION "Windivs [Version %s %s]\n" - STRING_CMD_SHELLINFO "\nWindivs Parancssor értelmező\nVersion %s %s" + 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: " STRING_VERSION_RUNVER "%s [Version %d.%d.%d] %s" STRING_COPY_FILE " %d állomány másolva\n" diff --git a/base/shell/cmd/lang/id-ID.rc b/base/shell/cmd/lang/id-ID.rc index 79ff9ae5ebc..8280f036a63 100644 --- a/base/shell/cmd/lang/id-ID.rc +++ b/base/shell/cmd/lang/id-ID.rc @@ -52,7 +52,7 @@ ERRORLEVEL disetel ke ofset tombol yang ditekan pengguna dalam pilihan.\n" STRING_CMD_HELP5 " [pelengkapan nama file Bash]" STRING_CMD_HELP6 " [tumpukan direktori]" STRING_CMD_HELP7 " [pengalihan dan piping]" - STRING_CMD_HELP8 "Memulai instan baru dari interpreter baris perintah Windivs.\n\n\ + STRING_CMD_HELP8 "Memulai instan baru dari interpreter baris perintah ReactOS.\n\n\ CMD [/[C|K] command][/P][/Q][/T:bf]\n\n\ /C command Menjalankan perintah yang ditetapkan dan mengakhirinya.\n\ /K command Menjalankan perintah yang ditetapkan dan tetap tinggal.\n\ @@ -441,7 +441,7 @@ untuk daftar penghargaan." STRING_VERSION_HELP5 "\nKirim laporan bug ke .\n\ Pemutakiran tersedia di: https://reactos.org" STRING_VERSION_HELP6 "\nVersi FreeDOS ditulis oleh:\n" - STRING_VERSION_HELP7 "\nVersi Windivs ditulis oleh:\n" + STRING_VERSION_HELP7 "\nVersi ReactOS ditulis oleh:\n" STRING_VOL_HELP1 " Volume dalam drive %c adalah %s\n" STRING_VOL_HELP2 " Volume dalam drive %c tidak berlabel\n" STRING_VOL_HELP3 " Nomor Seri Volume adalah %04X-%04X\n" @@ -525,10 +525,10 @@ title judul baru\n" STRING_REPLACE_ERROR5 "Akses ditolak - %s\n" STRING_REPLACE_ERROR6 "No files found - %s\n" STRING_REPLACE_ERROR7 "Extended Error 32\n" - STRING_CMD_INFOLINE " Windivs Command Prompt Type HELP = Help " - STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s Windivs Team.\n" - STRING_REACTOS_VERSION "Windivs [Versi %s %s]\n" - STRING_CMD_SHELLINFO "\nInterpreter Baris Perintah Windivs\nVersi %s %s" + 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: " STRING_VERSION_RUNVER "%s [Versi %d.%d.%d] %s" STRING_COPY_FILE " %d file di-copy\n" diff --git a/base/shell/cmd/lang/it-IT.rc b/base/shell/cmd/lang/it-IT.rc index 37bf76520be..dc9ad0da8c0 100644 --- a/base/shell/cmd/lang/it-IT.rc +++ b/base/shell/cmd/lang/it-IT.rc @@ -49,7 +49,7 @@ ERRORLEVEL è valorizzato alla posizione in elenco delle scelta dell'utente.\n" STRING_CMD_HELP5 " [completamento automatico dei nomi dei file Bash]" STRING_CMD_HELP6 " [cartelle]" STRING_CMD_HELP7 " [ridirezione e piping]" - STRING_CMD_HELP8 "Attiva un altro interprete dei comandi Windivs.\n\n\ + STRING_CMD_HELP8 "Attiva un altro interprete dei comandi ReactOS.\n\n\ CMD [/[C|K] comando][/P][/Q][/T:bf]\n\n\ /C comando Esegue il comando indicato e poi termina.\n\ /K comando Esegue il comando indicato e poi rimane in esecuzione.\n\ @@ -450,7 +450,7 @@ elenco dei crediti." STRING_VERSION_HELP5 "\nInviare le segnalazioni di anomalie a .\n\ Gli aggiornamenti sono disponibili presso: https://reactos.org" STRING_VERSION_HELP6 "\nVersione FreeDOS scritto da:\n" - STRING_VERSION_HELP7 "\nVersione Windivs scritto da:\n" + STRING_VERSION_HELP7 "\nVersione ReactOS scritto da:\n" STRING_VOL_HELP1 " Il Volume del disco %c è %s\n" STRING_VOL_HELP2 " Il Volume del disco %c non ha etichetta\n" STRING_VOL_HELP3 " Il numero di serie del Volume è %04X-%04X\n" @@ -535,10 +535,10 @@ titolo il nuovo titolo\n" STRING_REPLACE_ERROR5 "Accesso negato - %s\n" STRING_REPLACE_ERROR6 "Nessun file trovato - %s\n" STRING_REPLACE_ERROR7 "Errore esteso 32\n" - STRING_CMD_INFOLINE " Windivs Command Prompt Type HELP = Help " - STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s Windivs Team.\n" - STRING_REACTOS_VERSION "Windivs [Version %s %s]\n" - STRING_CMD_SHELLINFO "\nInterprete di linea di comando di Windivs\nVersion %s %s" + 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: " STRING_VERSION_RUNVER "%s [Version %d.%d.%d] %s" STRING_COPY_FILE " %d file copiati\n" diff --git a/base/shell/cmd/lang/no-NO.rc b/base/shell/cmd/lang/no-NO.rc index 63b327dca7f..d25eedaf667 100644 --- a/base/shell/cmd/lang/no-NO.rc +++ b/base/shell/cmd/lang/no-NO.rc @@ -50,7 +50,7 @@ ERRORLEVEL settes til nummer for knappen brukeren velger.\n" STRING_CMD_HELP5 " [Bash filnavnfullføring]" STRING_CMD_HELP6 " [mappeliste]" STRING_CMD_HELP7 " [omadressering og datakanaler]" - STRING_CMD_HELP8 "Start et nytt eksempel av Windivs kommandotolk.\n\n\ + STRING_CMD_HELP8 "Start et nytt eksempel av ReactOS kommandotolk.\n\n\ CMD [/[C|K] kommando][/P][/Q][/T:bf]\n\n\ /C kommando Kjører spesifiserte kommando og avsluttes.\n\ /K kommando Kjører spesifiserte kommando og består.\n\ @@ -309,7 +309,7 @@ Ledeteksten kan bli satt sammen av normale tegn og følgende spesielle koder:\n\ $Q = (likhetstegn)\n\ $S (space)\n\ $T Gjeldende klokkeslett\n\ - $V Versjonsnummer for Windivs\n\ + $V Versjonsnummer for ReactOS\n\ $_ Retur og linjeskift\n\ $$ $ (dollar tegn)\n" STRING_PROMPT_HELP2 " $+ Vis gjeldende dybde av mappestakken" @@ -420,7 +420,7 @@ VERIFY [ON | OFF]\n\n\ Skriv VERIFY uten parametre for å vise gjeldende VERIFY innstillinger.\n" STRING_VERIFY_HELP2 "VERIFY er %s.\n" STRING_VERIFY_HELP3 "Må spesifisere ON eller OFF." - STRING_VERSION_HELP1 "Vis Windivs versjonen\n\n\ + STRING_VERSION_HELP1 "Vis ReactOS versjonen\n\n\ VER [/C][/R][/W]\n\n\ /C Vis anerkjennelse.\n\ /R Vis videreformidlingsinformasjon.\n\ @@ -440,7 +440,7 @@ liste av anerkjennelser." STRING_VERSION_HELP5 "\nSend bug rapporter til .\n\ oppdateringer er tilgjengelig her: https://reactos.org" STRING_VERSION_HELP6 "\nFreeDOS versjon skrevet av:\n" - STRING_VERSION_HELP7 "\nWindivs versjon skrevet av:\n" + STRING_VERSION_HELP7 "\nReactOS versjon skrevet av:\n" STRING_VOL_HELP1 " Volumet i stasjon %c er %s\n" STRING_VOL_HELP2 " Volumet i stasjon %c har ingen navn.\n" STRING_VOL_HELP3 " Volumet Serie nummer er %04X-%04X\n" @@ -524,10 +524,10 @@ tittel ny tittel\n" STRING_REPLACE_ERROR5 "Tilgang nektet - %s\n" STRING_REPLACE_ERROR6 "Ingen filer ble funnet - %s\n" STRING_REPLACE_ERROR7 "Extended Error 32\n" - STRING_CMD_INFOLINE " Windivs Command Prompt Type HELP = Help " - STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s Windivs Team.\n" - STRING_REACTOS_VERSION "Windivs [Versjon %s %s]\n" - STRING_CMD_SHELLINFO "\nWindivs Kommandotolk\nVersjon %s %s" + 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å: " STRING_VERSION_RUNVER "%s [Version %d.%d.%d] %s" STRING_COPY_FILE " %d file(r) kopiert\n" diff --git a/base/shell/cmd/lang/pt-BR.rc b/base/shell/cmd/lang/pt-BR.rc index 27c32d3ffd2..8c9c493fe8b 100644 --- a/base/shell/cmd/lang/pt-BR.rc +++ b/base/shell/cmd/lang/pt-BR.rc @@ -1,5 +1,5 @@ /* - * PROJECT: Windivs Command shell + * PROJECT: ReactOS Command shell * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) * PURPOSE: Portuguese (Brazilian) resource file * TRANSLATOR: Copyright 2022 Fernando Isnaldo Silva de Faria @@ -55,7 +55,7 @@ CHOICE [/C[:]opções][/N][/S][/T[:]c,nn][texto]\n\n\ STRING_CMD_HELP5 "[conclusão do nome do arquivo Bash]" STRING_CMD_HELP6 "[pilha de diretórios]" STRING_CMD_HELP7 "[redirecionamentos e tubulação]" - STRING_CMD_HELP8 "Inicia uma nova instância do interpretador da linha de comando Windivs.\n\n\ + STRING_CMD_HELP8 "Inicia uma nova instância do interpretador da linha de comando ReactOS.\n\n\ CMD [/[C|K] comando] [/P][/Q][/T:bf]\n\n\ /C comando Executa o comando especificado e termina.\n\ Comando /K Executa o comando especificado e permanece.\n\ @@ -470,7 +470,7 @@ lista de créditos. " STRING_VERSION_HELP5 "\nEnvie relatórios de bug para .\n\ As atualizações estão disponíveis em: http://www.reactos.org" STRING_VERSION_HELP6 "\nVersão do FreeDOS escrita por:\n" - STRING_VERSION_HELP7 "\nWindivs versão escrita por:\n" + STRING_VERSION_HELP7 "\nReactOS versão escrita por:\n" STRING_VOL_HELP1 "O volume na unidade %c é %s\n" STRING_VOL_HELP2 "Volume na unidade %c não tem nome.\n" STRING_VOL_HELP3 "Número de série do volume é %04X-%04X\n" @@ -554,10 +554,10 @@ título Novo título\n" STRING_REPLACE_ERROR5 "Acesso negado - %s\n" STRING_REPLACE_ERROR6 "Nenhum arquivo encontrado - %s\n" STRING_REPLACE_ERROR7 "Erro estendido 32\n" - STRING_CMD_INFOLINE "Prompt de comandos do Windivs \tHELP = Ajuda" - STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s Windivs Team.\n" - STRING_REACTOS_VERSION "Windivs [Versão %s %s]\n" - STRING_CMD_SHELLINFO "\nWindivs Interpretador de linha de comando\nVersão %s %s" + 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:" STRING_VERSION_RUNVER "%s [Versão %d.%d.%d] %s" STRING_COPY_FILE "%d arquivo(s) copiado(s)\n" diff --git a/base/shell/cmd/lang/pt-PT.rc b/base/shell/cmd/lang/pt-PT.rc index e9c4e6d4463..7f31964dd13 100644 --- a/base/shell/cmd/lang/pt-PT.rc +++ b/base/shell/cmd/lang/pt-PT.rc @@ -48,7 +48,7 @@ CHOICE [/C[:]opções][/N][/S][/T[:]c,nn][texto]\n\n\ STRING_CMD_HELP5 "[conclusão do nome do ficheiro Bash]" STRING_CMD_HELP6 "[pilha de directórios]" STRING_CMD_HELP7 "[redirecionamentos e tubulação]" - STRING_CMD_HELP8 "Inicia uma nova instância do interpretador da linha de comando Windivs.\n\n\ + STRING_CMD_HELP8 "Inicia uma nova instância do interpretador da linha de comando ReactOS.\n\n\ CMD [/[C|K] comando] [/P][/Q][/T:bf]\n\n\ /C comando Executa o comando especificado e termina.\n\ Comando /K Executa o comando especificado e permanece.\n\ @@ -463,7 +463,7 @@ lista de créditos. " STRING_VERSION_HELP5 "\nEnvie relatórios de bug para .\n\ As actualizações estão disponíveis em: https://reactos.org" STRING_VERSION_HELP6 "\nVersão do FreeDOS escrita por:\n" - STRING_VERSION_HELP7 "\nWindivs versão escrita por:\n" + STRING_VERSION_HELP7 "\nReactOS versão escrita por:\n" STRING_VOL_HELP1 "O volume na unidade %c é %s\n" STRING_VOL_HELP2 "Volume na unidade %c não tem nome.\n" STRING_VOL_HELP3 "Número de série do volume é %04X-%04X\n" @@ -547,10 +547,10 @@ título Novo título\n" STRING_REPLACE_ERROR5 "Acesso negado - %s\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 Windivs HELP = Ajuda" - STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s Windivs Team.\n" - STRING_REACTOS_VERSION "Windivs [Versão %s %s]\n" - STRING_CMD_SHELLINFO "\nWindivs Intérprete de linha de comando\nVersão %s %s" + 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:" STRING_VERSION_RUNVER "%s [Versão %d.%d.%d] %s" STRING_COPY_FILE "%d ficheiro(s) copiado(s)\n" 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/sk-SK.rc b/base/shell/cmd/lang/sk-SK.rc index 6e5065ba28c..7e4d11e3bec 100644 --- a/base/shell/cmd/lang/sk-SK.rc +++ b/base/shell/cmd/lang/sk-SK.rc @@ -56,7 +56,7 @@ ERRORLEVEL is set to offset of key user presses in choices.\n" STRING_CMD_HELP5 " [Bash filename completion]" STRING_CMD_HELP6 " [directory stack]" STRING_CMD_HELP7 " [redirections and piping]" - STRING_CMD_HELP8 "Starts a new instance of the Windivs command line interpreter.\n\n\ + STRING_CMD_HELP8 "Starts a new instance of the ReactOS command line interpreter.\n\n\ CMD [/[C|K] command][/P][/Q][/T:bf]\n\n\ /C command Runs the specified command and terminates.\n\ /K command Runs the specified command and remains.\n\ @@ -448,7 +448,7 @@ listing of credits." STRING_VERSION_HELP5 "\nHlásenia o chybách zasielajte na .\n\ Aktualizácie sú dostupné na: https://reactos.org" STRING_VERSION_HELP6 "\nFreeDOS version written by:\n" - STRING_VERSION_HELP7 "\nWindivs version written by:\n" + STRING_VERSION_HELP7 "\nReactOS version written by:\n" STRING_VOL_HELP1 " Volume in drive %c is %s\n" STRING_VOL_HELP2 " Volume in drive %c has no label.\n" STRING_VOL_HELP3 " Volume Serial Number is %04X-%04X\n" @@ -532,10 +532,10 @@ title new title\n" STRING_REPLACE_ERROR5 "Prístup zamietnutý - %s\n" STRING_REPLACE_ERROR6 "Žiadne súbory sa nenašli - %s\n" STRING_REPLACE_ERROR7 "Extended Error 32\n" - STRING_CMD_INFOLINE " Windivs Command Prompt Type HELP = Help " - STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s Windivs Team.\n" - STRING_REACTOS_VERSION "Windivs [Verzia %s %s]\n" - STRING_CMD_SHELLINFO "\nInterpréter príkazového riadku systému Windivs\nVerzia %s %s" + 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: " STRING_VERSION_RUNVER "%s [Version %d.%d.%d] %s" STRING_COPY_FILE " %d súbor(ov) skopírovaný(ch)\n" diff --git a/base/shell/cmd/lang/sv-SE.rc b/base/shell/cmd/lang/sv-SE.rc index 6809d04738d..21928bc8626 100644 --- a/base/shell/cmd/lang/sv-SE.rc +++ b/base/shell/cmd/lang/sv-SE.rc @@ -50,7 +50,7 @@ ERRORLEVEL sätts till nummer för knappen användaren väljer.\n" STRING_CMD_HELP5 " [Bash filnamnändelse]" STRING_CMD_HELP6 " [mapplista]" STRING_CMD_HELP7 " [omadressering och datakanaler]" - STRING_CMD_HELP8 "Starta en ny instans av Windivs kommandotolk.\n\n\ + STRING_CMD_HELP8 "Starta en ny instans av ReactOS kommandotolk.\n\n\ CMD [/[C|K] kommando][/P][/Q][/T:bf]\n\n\ /C kommando Kör angivet kommando och avslutar.\n\ /K kommando Kör angivet kommando men avslutar inte.\n\ @@ -309,7 +309,7 @@ Ledetexten kan bli satt sammen av normale tegn och følgende spesielle koder:\n\ $Q = (likhetstegn)\n\ $S (space)\n\ $T aktuell klokkeslett\n\ - $V Versionsnummer för Windivs\n\ + $V Versionsnummer för ReactOS\n\ $_ Retur och linjeskift\n\ $$ $ (dollar tegn)\n" STRING_PROMPT_HELP2 " $+ Visa aktuell dybde av mappstakken" @@ -420,7 +420,7 @@ VERIFY [ON | OFF]\n\n\ Skriv VERIFY uten parametre för att visa aktuell VERIFY inställninar.\n" STRING_VERIFY_HELP2 "VERIFY är %s.\n" STRING_VERIFY_HELP3 "Måste ange ON eller OFF." - STRING_VERSION_HELP1 "Visa Windivs versionen\n\n\ + STRING_VERSION_HELP1 "Visa ReactOS versionen\n\n\ VER [/C][/R][/W]\n\n\ /C Visa anerkjennelse.\n\ /R Visa videreformidlingsinformasjon.\n\ @@ -440,7 +440,7 @@ liste av anerkjennelser." STRING_VERSION_HELP5 "\nSend bug rapporter till .\n\ oppdateringer är tilgjengelig her: https://reactos.org" STRING_VERSION_HELP6 "\nFreeDOS version skruvet av:\n" - STRING_VERSION_HELP7 "\nWindivs version skrivet av:\n" + STRING_VERSION_HELP7 "\nReactOS version skrivet av:\n" STRING_VOL_HELP1 " Volymen i enhet %c är %s\n" STRING_VOL_HELP2 " Volymen i enhet %c har inget namn.\n" STRING_VOL_HELP3 " Volymens serienummer är %04X-%04X\n" @@ -524,10 +524,10 @@ tittel ny tittel\n" STRING_REPLACE_ERROR5 "Tillgång nekas - %s\n" STRING_REPLACE_ERROR6 "Ingna filer hittades - %s\n" STRING_REPLACE_ERROR7 "Extended Error 32\n" - STRING_CMD_INFOLINE " Windivs Command Prompt Type HELP = Help " - STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s Windivs Team.\n" - STRING_REACTOS_VERSION "Windivs [Version %s %s]\n" - STRING_CMD_SHELLINFO "\nWindivs Kommandotolk\nVersion %s %s" + 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å: " STRING_VERSION_RUNVER "%s [Version %d.%d.%d] %s" STRING_COPY_FILE " %d file(r) kopierades\n" diff --git a/base/shell/cmd/lang/uk-UA.rc b/base/shell/cmd/lang/uk-UA.rc index 2cb77846b25..05b24cf3cd4 100644 --- a/base/shell/cmd/lang/uk-UA.rc +++ b/base/shell/cmd/lang/uk-UA.rc @@ -58,7 +58,7 @@ ERRORLEVEL встановлюється рiвним номеру вибрано STRING_CMD_HELP5 " [заваршення iмен файлiв Bash]" STRING_CMD_HELP6 " [стек директорiй]" STRING_CMD_HELP7 " [перенаправлення та piping]" - STRING_CMD_HELP8 "Запуск нової копiї iнтерпретатора команд Windivs.\n\n\ + STRING_CMD_HELP8 "Запуск нової копiї iнтерпретатора команд ReactOS.\n\n\ CMD [/[C|K] команда][/P][/Q][/T:кл]\n\n\ /C команда Виконання вказаної команди з подальшим завершенням.\n\ /K команда Виконання вказаної команди без подальшого завершення.\n\ @@ -452,7 +452,7 @@ VER [/C][/R][/W]\n\n\ STRING_VERSION_HELP5 "\nВiдсилайте звiти про помилки на .\n\ Оновлення доступнi на: https://reactos.org" STRING_VERSION_HELP6 "\nFreeDOS-версiя написана:\n" - STRING_VERSION_HELP7 "\nWindivs-версiя написана:\n" + STRING_VERSION_HELP7 "\nReactOS-версiя написана:\n" STRING_VOL_HELP1 " Том в пристрої %c має мiтку %s\n" STRING_VOL_HELP2 " Том в пристрої %c не має мiтки.\n" STRING_VOL_HELP3 " Серiйний номер тому: %04X-%04X\n" @@ -536,10 +536,10 @@ title новий заголовок\n" STRING_REPLACE_ERROR5 "Немає доступу - %s\n" STRING_REPLACE_ERROR6 "Файли не знайдено - %s\n" STRING_REPLACE_ERROR7 "Розширена помилка 32\n" - STRING_CMD_INFOLINE " Командний рядок Windivs Введіть HELP = Допомога " - STRING_CMD_COPYRIGHT "(C) Copyright 1996-%s Windivs Team.\n" - STRING_REACTOS_VERSION "Windivs [Версiя %s %s]\n" - STRING_CMD_SHELLINFO "\nIнтерпретатор командного рядка Windivs\nVersion %s %s" + 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 "Запущений на: " STRING_VERSION_RUNVER "%s [Version %d.%d.%d] %s" STRING_COPY_FILE " %d файл(iв) скопiйовано\n" 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 4b13424d312..d3a07d33c2f 100644 --- a/base/shell/explorer/traywnd.cpp +++ b/base/shell/explorer/traywnd.cpp @@ -3584,6 +3584,8 @@ class CTrayWindowCtxMenu : HMENU hMenuBase; hMenuBase = LoadPopupMenu(hExplorerInstance, MAKEINTRESOURCEW(IDM_TRAYWND)); + if (!hMenuBase) + return HResultFromWin32(GetLastError()); if (g_MinimizedAll.GetSize() != 0 && !::IsThereAnyEffectiveWindow(TRUE)) { @@ -3596,9 +3598,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, 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 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/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/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/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..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); @@ -322,34 +326,15 @@ 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, IN ULONG SelectedMenuItem, IN PVOID Context OPTIONAL) { + /* Any key-press cancels the global timeout */ + BootMgrInfo.TimeOut = -1; + switch (KeyPress) { case KEY_F8: @@ -370,14 +355,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 +378,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 +403,7 @@ VOID RunLoader(VOID) return; } - OperatingSystemList = InitOperatingSystemList(SectionId, - &OperatingSystemCount, + OperatingSystemList = InitOperatingSystemList(&OperatingSystemCount, &DefaultOperatingSystem); if (!OperatingSystemList) { @@ -446,7 +427,7 @@ VOID RunLoader(VOID) } /* Find all the message box settings and run them */ - UiShowMessageBoxesInSection(SectionId); + UiShowMessageBoxesInSection(BootMgrInfo.FrLdrSection); for (;;) { @@ -461,7 +442,7 @@ VOID RunLoader(VOID) OperatingSystemDisplayNames, OperatingSystemCount, DefaultOperatingSystem, - TimeOut, + BootMgrInfo.TimeOut, &SelectedOperatingSystem, FALSE, MainBootMenuKeyPressFilter, @@ -471,11 +452,11 @@ VOID RunLoader(VOID) goto Reboot; } - 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 diff --git a/boot/freeldr/freeldr/cmdline.c b/boot/freeldr/freeldr/cmdline.c deleted file mode 100644 index c41466e6163..00000000000 --- a/boot/freeldr/freeldr/cmdline.c +++ /dev/null @@ -1,138 +0,0 @@ -/* - * 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 - */ - -/* INCLUDES *******************************************************************/ - -#include - -/* GLOBALS ********************************************************************/ - -typedef struct tagCMDLINEINFO -{ - PCSTR DebugString; - PCSTR DefaultOs; - LONG TimeOut; -} CMDLINEINFO, *PCMDLINEINFO; - -CCHAR DebugString[256]; -CCHAR DefaultOs[256]; -CMDLINEINFO CmdLineInfo; - -/* FUNCTIONS ******************************************************************/ - -VOID -CmdLineParse(IN PCSTR CmdLine) -{ - PCHAR End, Setting; - ULONG_PTR Length, Offset = 0; - - /* Set defaults */ - CmdLineInfo.DebugString = NULL; - CmdLineInfo.DefaultOs = NULL; - CmdLineInfo.TimeOut = -1; - - /* - * Get debug string, in the following format: - * "debug=option1=XXX;option2=YYY;..." - * and translate it into the format: - * "OPTION1=XXX OPTION2=YYY ..." - */ - Setting = strstr(CmdLine, "debug="); - if (Setting) - { - /* Check if there are more command-line parameters following */ - Setting += sizeof("debug=") - sizeof(ANSI_NULL); - End = strstr(Setting, " "); - Length = (End ? (End - Setting) : strlen(Setting)); - - /* Copy the debug string and upcase it */ - RtlStringCbCopyNA(DebugString, sizeof(DebugString), Setting, Length); - _strupr(DebugString); - - /* Replace all separators ';' by spaces */ - Setting = DebugString; - while (*Setting) - { - if (*Setting == ';') *Setting = ' '; - Setting++; - } - - CmdLineInfo.DebugString = DebugString; - } - - /* Get timeout */ - Setting = strstr(CmdLine, "timeout="); - if (Setting) - { - CmdLineInfo.TimeOut = atoi(Setting + - sizeof("timeout=") - sizeof(ANSI_NULL)); - } - - /* Get default OS */ - Setting = strstr(CmdLine, "defaultos="); - if (Setting) - { - /* Check if there are more command-line parameters following */ - Setting += sizeof("defaultos=") - sizeof(ANSI_NULL); - End = strstr(Setting, " "); - Length = (End ? (End - Setting) : strlen(Setting)); - - /* Copy the default OS */ - RtlStringCbCopyNA(DefaultOs, sizeof(DefaultOs), Setting, Length); - CmdLineInfo.DefaultOs = DefaultOs; - } - - /* Get ramdisk base address */ - Setting = strstr(CmdLine, "rdbase="); - if (Setting) - { - gInitRamDiskBase = - (PVOID)(ULONG_PTR)strtoull(Setting + - sizeof("rdbase=") - sizeof(ANSI_NULL), - NULL, 0); - } - - /* Get ramdisk size */ - Setting = strstr(CmdLine, "rdsize="); - if (Setting) - { - gInitRamDiskSize = strtoul(Setting + - sizeof("rdsize=") - sizeof(ANSI_NULL), - NULL, 0); - } - - /* Get ramdisk offset */ - Setting = strstr(CmdLine, "rdoffset="); - if (Setting) - { - Offset = strtoul(Setting + - sizeof("rdoffset=") - sizeof(ANSI_NULL), - NULL, 0); - } - - /* Fix it up */ - gInitRamDiskBase = (PVOID)((ULONG_PTR)gInitRamDiskBase + Offset); -} - -PCSTR -CmdLineGetDebugString(VOID) -{ - return CmdLineInfo.DebugString; -} - -PCSTR -CmdLineGetDefaultOS(VOID) -{ - return CmdLineInfo.DefaultOs; -} - -LONG -CmdLineGetTimeOut(VOID) -{ - return CmdLineInfo.TimeOut; -} 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/cmdline.h b/boot/freeldr/freeldr/include/cmdline.h deleted file mode 100644 index 47a733b60ef..00000000000 --- a/boot/freeldr/freeldr/include/cmdline.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * 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. - */ - -#pragma once - -VOID CmdLineParse(IN PCSTR CmdLine); - -PCSTR CmdLineGetDebugString(VOID); -PCSTR CmdLineGetDefaultOS(VOID); -LONG CmdLineGetTimeOut(VOID); - -/* EOF */ 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/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/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 new file mode 100644 index 00000000000..8c60a145068 --- /dev/null +++ b/boot/freeldr/freeldr/include/settings.h @@ -0,0 +1,24 @@ +/* + * 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 + +typedef struct _BOOTMGRINFO +{ + PCSTR DebugString; + PCSTR DefaultOs; + LONG TimeOut; + ULONG_PTR FrLdrSection; +} BOOTMGRINFO, *PBOOTMGRINFO; + +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 new file mode 100644 index 00000000000..82051714bcc --- /dev/null +++ b/boot/freeldr/freeldr/settings.c @@ -0,0 +1,174 @@ +/* + * 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 *******************************************************************/ + +#include + +/* GLOBALS ********************************************************************/ + +static CCHAR DebugString[256]; +static CCHAR DefaultOs[256]; +BOOTMGRINFO BootMgrInfo = {0}; + +/* FUNCTIONS ******************************************************************/ + +static VOID +CmdLineParse( + _In_ PCSTR CmdLine) +{ + PCHAR End, Setting; + ULONG_PTR Length, Offset = 0; + + /* Set defaults */ + BootMgrInfo.DebugString = NULL; + BootMgrInfo.DefaultOs = NULL; + BootMgrInfo.TimeOut = -1; + // BootMgrInfo.FrLdrSection = 0; + + /* + * Get the debug string, in the following format: + * "debug=option1=XXX;option2=YYY;..." + * and translate it into the format: + * "OPTION1=XXX OPTION2=YYY ..." + */ + Setting = strstr(CmdLine, "debug="); + if (Setting) + { + /* Check if there are more command-line parameters following */ + Setting += sizeof("debug=") - sizeof(ANSI_NULL); + End = strstr(Setting, " "); + Length = (End ? (End - Setting) : strlen(Setting)); + + /* Copy the debug string and upcase it */ + RtlStringCbCopyNA(DebugString, sizeof(DebugString), Setting, Length); + _strupr(DebugString); + + /* Replace all separators ';' by spaces */ + Setting = DebugString; + while (*Setting) + { + if (*Setting == ';') *Setting = ' '; + Setting++; + } + + BootMgrInfo.DebugString = DebugString; + } + + /* Get the timeout */ + Setting = strstr(CmdLine, "timeout="); + if (Setting) + { + BootMgrInfo.TimeOut = atoi(Setting + + sizeof("timeout=") - sizeof(ANSI_NULL)); + } + + /* Get the default OS */ + Setting = strstr(CmdLine, "defaultos="); + if (Setting) + { + /* Check if there are more command-line parameters following */ + Setting += sizeof("defaultos=") - sizeof(ANSI_NULL); + End = strstr(Setting, " "); + Length = (End ? (End - Setting) : strlen(Setting)); + + /* Copy the default OS */ + RtlStringCbCopyNA(DefaultOs, sizeof(DefaultOs), Setting, Length); + BootMgrInfo.DefaultOs = DefaultOs; + } + + /* Get the ramdisk base address */ + Setting = strstr(CmdLine, "rdbase="); + if (Setting) + { + gInitRamDiskBase = + (PVOID)(ULONG_PTR)strtoull(Setting + + sizeof("rdbase=") - sizeof(ANSI_NULL), + NULL, 0); + } + + /* Get the ramdisk size */ + Setting = strstr(CmdLine, "rdsize="); + if (Setting) + { + gInitRamDiskSize = strtoul(Setting + + sizeof("rdsize=") - sizeof(ANSI_NULL), + NULL, 0); + } + + /* Get the ramdisk offset */ + Setting = strstr(CmdLine, "rdoffset="); + if (Setting) + { + Offset = strtoul(Setting + + sizeof("rdoffset=") - sizeof(ANSI_NULL), + NULL, 0); + } + + /* Fix it up */ + gInitRamDiskBase = (PVOID)((ULONG_PTR)gInitRamDiskBase + Offset); +} + +VOID +LoadSettings( + _In_opt_ PCSTR CmdLine) +{ + /* 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; + } + + /* 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; + } + + /* 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 */ 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/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 392549a54f0..04463ff681a 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 diff --git a/dll/cpl/joy/lang/ro-RO.rc b/dll/cpl/joy/lang/ro-RO.rc index 0631b5258b2..c7deed956b1 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 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/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/def/ntdll.spec b/dll/ntdll/def/ntdll.spec index aa1cf0ca734..5b173acb659 100644 --- a/dll/ntdll/def/ntdll.spec +++ b/dll/ntdll/def/ntdll.spec @@ -1801,7 +1801,8 @@ @ cdecl _strlwr(str) @ cdecl _strnicmp(str str long) @ cdecl _strupr(str) -@ stub -version=0x600+ _swprintf +@ 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) @ cdecl _ui64toa(double ptr long) 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/dll/shellext/deskadp/lang/ro-RO.rc b/dll/shellext/deskadp/lang/ro-RO.rc index c07ebd0a938..b74726856b1 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 diff --git a/dll/shellext/deskmon/lang/ro-RO.rc b/dll/shellext/deskmon/lang/ro-RO.rc index 8763e26251f..1c95ccef803 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 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; } diff --git a/dll/win32/CMakeLists.txt b/dll/win32/CMakeLists.txt index 86e94817db3..3a8522e7afe 100644 --- a/dll/win32/CMakeLists.txt +++ b/dll/win32/CMakeLists.txt @@ -263,5 +263,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/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 933a2276443..4b26884f756 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; @@ -2309,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) @@ -2459,12 +2465,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) @@ -2530,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/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); 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)) 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 | diff --git a/dll/win32/kernel32/CMakeLists.txt b/dll/win32/kernel32/CMakeLists.txt index c9d491d4837..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 @@ -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") 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 Serapin */ -/* 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__ 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); diff --git a/dll/win32/kernel32/winnls/string/lang.c b/dll/win32/kernel32/winnls/string/locale.c similarity index 65% rename from dll/win32/kernel32/winnls/string/lang.c rename to dll/win32/kernel32/winnls/string/locale.c index 1d3fdbe4a1b..2eff3d10b07 100644 --- a/dll/win32/kernel32/winnls/string/lang.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 @@ -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 @@ -53,17 +56,24 @@ 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) + +/* 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 @@ -132,6 +142,7 @@ static const struct charset_entry }; #endif + struct locale_name { WCHAR win_name[128]; /* Windows name ("en-US") */ @@ -148,6 +159,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; @@ -260,7 +272,12 @@ static inline void strcpynAtoW( WCHAR *dst, const char *src, size_t n ) } if (n) *dst = 0; } -#endif + +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 @@ -275,6 +292,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) @@ -299,11 +355,13 @@ 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; } +#endif // (WINVER >= 0x0600) static LANGID get_default_sublang( LANGID lang ) { @@ -323,6 +381,7 @@ static LANGID get_default_sublang( LANGID lang ) return lang; } +#if (WINVER >= 0x0600) /*********************************************************************** * find_locale_id_callback */ @@ -338,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 )) { @@ -348,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 */ @@ -356,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 ); @@ -374,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 */ @@ -432,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) { @@ -517,6 +577,7 @@ static void parse_locale_name( const WCHAR *str, struct locale_name *name ) } #endif + /*********************************************************************** * convert_default_lcid * @@ -730,6 +791,377 @@ 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 __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 + 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.@) * @@ -801,6 +1233,132 @@ 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 ); +} + +#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__ /*********************************************************************** * GetUserDefaultUILanguage (KERNEL32.@) @@ -847,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(); @@ -880,13 +1436,28 @@ 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 + * + * 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 +1657,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.@) * @@ -1110,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; @@ -1180,21 +1736,10 @@ 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), SUBLANG_DEFAULT); - - if (lctype != LOCALE_FONTSIGNATURE) - { - lpType = MAKEINTRESOURCEW(RT_STRING); - lpName = MAKEINTRESOURCEW(ULongToPtr((lctype >> 4) + 1)); - } - else - { - lpType = MAKEINTRESOURCEW(RT_RCDATA); - lpName = MAKEINTRESOURCEW(lctype); - } + if (SUBLANGID(lang_id) == SUBLANG_NEUTRAL) lang_id = get_default_sublang( lang_id ); - 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; @@ -1203,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) @@ -1221,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; @@ -1256,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", @@ -1267,22 +1806,42 @@ 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); -BOOL -WINAPI -IsValidLocaleName( + TRACE("%s, lcid=0x%x, 0x%x\n", debugstr_w(locale), lcid, info); + + if (!lcid) return 0; + + /* special handling for neutral locale names */ + if (locale && strlenW(locale) == 2) + { + switch (info) + { + 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; + } + } + + return GetLocaleInfoW(lcid, info, buffer, len); +} + +BOOL +WINAPI +IsValidLocaleName( LPCWSTR lpLocaleName ) { @@ -1290,7 +1849,7 @@ IsValidLocaleName( return TRUE; } -INT +INT WINAPI GetUserDefaultLocaleName( LPWSTR lpLocaleName, @@ -1445,462 +2004,1289 @@ BOOL WINAPI SetLocaleInfoW( LCID lcid, LCTYPE lctype, LPCWSTR data ) return !status; } -/*********************************************************************** - * GetThreadLocale (KERNEL32.@) + +#ifndef __REACTOS__ +/****************************************************************************** + * GetACP (KERNEL32.@) * - * Get the current threads locale. + * Get the current Ansi code page Id for the system. * * PARAMS * None. * * RETURNS - * The LCID currently associated with the calling thread. + * The current Ansi code page identifier for the system. */ -LCID WINAPI GetThreadLocale(void) +UINT WINAPI GetACP(void) { - LCID ret = NtCurrentTeb()->CurrentLocale; - if (!ret) NtCurrentTeb()->CurrentLocale = ret = GetUserDefaultLCID(); - return ret; + assert( ansi_cptable ); + return ansi_cptable->info.codepage; } -/********************************************************************** - * SetThreadLocale (KERNEL32.@) + +/****************************************************************************** + * SetCPGlobal (KERNEL32.@) * - * Set the current threads locale. + * Set the current Ansi code page Id for the system. * * PARAMS - * lcid [I] LCID of the locale to set + * acp [I] code page ID to be the new ACP. * * RETURNS - * Success: TRUE. The threads locale is set to lcid. - * Failure: FALSE. Use GetLastError() to determine the cause. + * The previous ACP. */ -BOOL WINAPI SetThreadLocale( LCID lcid ) +UINT WINAPI SetCPGlobal( UINT acp ) { - TRACE("(0x%04X)\n", lcid); - - lcid = ConvertDefaultLocale(lcid); - - if (lcid != GetThreadLocale()) - { - if (!IsValidLocale(lcid, LCID_SUPPORTED)) - { - SetLastError(ERROR_INVALID_PARAMETER); - return FALSE; - } + UINT ret = GetACP(); + const union cptable *new_cptable = wine_cp_get_table( acp ); - NtCurrentTeb()->CurrentLocale = lcid; - } - return TRUE; + if (new_cptable) ansi_cptable = new_cptable; + return ret; } -/****************************************************************************** - * ConvertDefaultLocale (KERNEL32.@) + +/*********************************************************************** + * GetOEMCP (KERNEL32.@) * - * Convert a default locale identifier into a real identifier. + * Get the current OEM code page Id for the system. * * PARAMS - * lcid [I] LCID identifier of the locale to convert + * None. * * RETURNS - * lcid unchanged, if not a default locale or its sublanguage is - * not SUBLANG_NEUTRAL. - * GetSystemDefaultLCID(), if lcid == LOCALE_SYSTEM_DEFAULT. - * GetUserDefaultLCID(), if lcid == LOCALE_USER_DEFAULT or LOCALE_NEUTRAL. - * Otherwise, lcid with sublanguage changed to SUBLANG_DEFAULT. + * The current OEM code page identifier for the system. */ -LCID WINAPI ConvertDefaultLocale( LCID lcid ) +UINT WINAPI GetOEMCP(void) { - LANGID langid; - - switch (lcid) - { - case LOCALE_INVARIANT: - /* keep as-is */ - break; - case LOCALE_SYSTEM_DEFAULT: - lcid = GetSystemDefaultLCID(); - break; - case LOCALE_USER_DEFAULT: - case LOCALE_NEUTRAL: - lcid = GetUserDefaultLCID(); - break; - default: - /* Replace SUBLANG_NEUTRAL with SUBLANG_DEFAULT */ - langid = LANGIDFROMLCID(lcid); - if (SUBLANGID(langid) == SUBLANG_NEUTRAL) - { - langid = MAKELANGID(PRIMARYLANGID(langid), SUBLANG_DEFAULT); - lcid = MAKELCID(langid, SORTIDFROMLCID(lcid)); - } - } - return lcid; + assert( oem_cptable ); + return oem_cptable->info.codepage; } -/****************************************************************************** - * IsValidLocale (KERNEL32.@) +/*********************************************************************** + * IsValidCodePage (KERNEL32.@) * - * Determine if a locale is valid. + * Determine if a given code page identifier is valid. * * PARAMS - * lcid [I] LCID of the locale to check - * flags [I] LCID_SUPPORTED = Valid, LCID_INSTALLED = Valid and installed on the system + * codepage [I] Code page Id to verify. * * RETURNS - * TRUE, if lcid is valid, - * FALSE, otherwise. - * - * NOTES - * Wine does not currently make the distinction between supported and installed. All - * languages supported are installed by default. + * TRUE, If codepage is valid and available on the system, + * FALSE otherwise. */ -BOOL WINAPI IsValidLocale( LCID lcid, DWORD flags ) +BOOL WINAPI IsValidCodePage( UINT codepage ) { - /* check if language is registered in the kernel32 resources */ - return FindResourceExW( kernel32_handle, (LPWSTR)RT_STRING, - (LPCWSTR)LOCALE_ILANGUAGE, LANGIDFROMLCID(lcid)) != 0; + switch(codepage) { + case CP_UTF7: + case CP_UTF8: + return TRUE; + default: + return wine_cp_get_table( codepage ) != NULL; + } } -static BOOL CALLBACK enum_lang_proc_a( HMODULE hModule, LPCSTR type, - LPCSTR name, WORD LangID, LONG_PTR lParam ) +/*********************************************************************** + * 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 ) { - LOCALE_ENUMPROCA lpfnLocaleEnum = (LOCALE_ENUMPROCA)lParam; - char buf[20]; - - sprintf(buf, "%08x", (UINT)LangID); - return lpfnLocaleEnum( buf ); + const union cptable *table = get_codepage_table( codepage ); + return table && wine_is_dbcs_leadbyte( table, testchar ); } -static BOOL CALLBACK enum_lang_proc_w( HMODULE hModule, LPCWSTR type, - LPCWSTR name, WORD LangID, LONG_PTR lParam ) -{ - static const WCHAR formatW[] = {'%','0','8','x',0}; - LOCALE_ENUMPROCW lpfnLocaleEnum = (LOCALE_ENUMPROCW)lParam; - WCHAR buf[20]; - sprintfW( buf, formatW, (UINT)LangID ); - return lpfnLocaleEnum( buf ); -} -/****************************************************************************** - * EnumSystemLocalesA (KERNEL32.@) +/*********************************************************************** + * IsDBCSLeadByte (KERNEL32.@) + * IsDBCSLeadByte (KERNEL.207) * - * Call a users function for each locale available on the system. + * Determine if a character is a lead byte. * * PARAMS - * lpfnLocaleEnum [I] Callback function to call for each locale - * dwFlags [I] LOCALE_SUPPORTED=All supported, LOCALE_INSTALLED=Installed only + * testchar [I] Character to test * * RETURNS - * Success: TRUE. - * Failure: FALSE. Use GetLastError() to determine the cause. + * TRUE, if testchar is a lead byte in the ANSI code page, + * FALSE otherwise. */ -BOOL WINAPI EnumSystemLocalesA( LOCALE_ENUMPROCA lpfnLocaleEnum, DWORD dwFlags ) +BOOL WINAPI IsDBCSLeadByte( BYTE testchar ) { - TRACE("(%p,%08x)\n", lpfnLocaleEnum, dwFlags); - EnumResourceLanguagesA( kernel32_handle, (LPSTR)RT_STRING, - (LPCSTR)LOCALE_ILANGUAGE, enum_lang_proc_a, - (LONG_PTR)lpfnLocaleEnum); - return TRUE; + if (!ansi_cptable) return FALSE; + return wine_is_dbcs_leadbyte( ansi_cptable, testchar ); } -/****************************************************************************** - * EnumSystemLocalesW (KERNEL32.@) +/*********************************************************************** + * GetCPInfo (KERNEL32.@) * - * See EnumSystemLocalesA. + * 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 EnumSystemLocalesW( LOCALE_ENUMPROCW lpfnLocaleEnum, DWORD dwFlags ) +BOOL WINAPI GetCPInfo( UINT codepage, LPCPINFO cpinfo ) { - TRACE("(%p,%08x)\n", lpfnLocaleEnum, dwFlags); - EnumResourceLanguagesW( kernel32_handle, (LPWSTR)RT_STRING, - (LPCWSTR)LOCALE_ILANGUAGE, enum_lang_proc_w, - (LONG_PTR)lpfnLocaleEnum); + 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; } - -struct enum_locale_ex_data +/*********************************************************************** + * 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 ) { - LOCALE_ENUMPROCEX proc; - DWORD flags; - LPARAM lparam; -}; + CPINFOEXW cpinfoW; -static BOOL CALLBACK enum_locale_ex_proc( HMODULE module, LPCWSTR type, - LPCWSTR name, WORD lang, LONG_PTR lparam ) -{ - struct enum_locale_ex_data *data = (struct enum_locale_ex_data *)lparam; - WCHAR buffer[256]; - DWORD neutral; - unsigned int flags; + if (!GetCPInfoExW( codepage, dwFlags, &cpinfoW )) + return FALSE; - GetLocaleInfoW( MAKELCID( lang, SORT_DEFAULT ), LOCALE_SNAME | LOCALE_NOUSEROVERRIDE, - buffer, ARRAY_SIZE( buffer )); - if (!GetLocaleInfoW( MAKELCID( lang, SORT_DEFAULT ), - LOCALE_INEUTRAL | LOCALE_NOUSEROVERRIDE | LOCALE_RETURN_NUMBER, - (LPWSTR)&neutral, sizeof(neutral) / sizeof(WCHAR) )) - neutral = 0; - flags = LOCALE_WINDOWS; - flags |= neutral ? LOCALE_NEUTRALDATA : LOCALE_SPECIFICDATA; - if (data->flags && !(data->flags & flags)) return TRUE; - return data->proc( buffer, flags, data->lparam ); + /* 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; } -/****************************************************************************** - * EnumSystemLocalesEx (KERNEL32.@) +/*********************************************************************** + * GetCPInfoExW (KERNEL32.@) + * + * Unicode version of GetCPInfoExA. */ -BOOL WINAPI EnumSystemLocalesEx( LOCALE_ENUMPROCEX proc, DWORD flags, LPARAM lparam, LPVOID reserved ) +BOOL WINAPI GetCPInfoExW( UINT codepage, DWORD dwFlags, LPCPINFOEXW cpinfo ) { - struct enum_locale_ex_data data; + if (!GetCPInfo( codepage, (LPCPINFO)cpinfo )) + return FALSE; - if (reserved) + switch(codepage) { - SetLastError( ERROR_INVALID_PARAMETER ); - return FALSE; + 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; + } } - data.proc = proc; - data.flags = flags; - data.lparam = lparam; - EnumResourceLanguagesW( kernel32_handle, (LPCWSTR)RT_STRING, - (LPCWSTR)MAKEINTRESOURCE((LOCALE_SNAME >> 4) + 1), - enum_locale_ex_proc, (LONG_PTR)&data ); return TRUE; } - /*********************************************************************** - * VerLanguageNameA (KERNEL32.@) + * EnumSystemCodePagesA (KERNEL32.@) * - * Get the name of a language. + * Call a user defined function for every code page installed on the system. * * PARAMS - * wLang [I] LANGID of the language - * szLang [O] Destination for the language name + * lpfnCodePageEnum [I] User CODEPAGE_ENUMPROC to call with each found code page + * flags [I] Reserved, set to 0. * * RETURNS - * Success: The size of the language name. If szLang is non-NULL, it is filled - * with the name. - * Failure: 0. Use GetLastError() to determine the cause. - * + * TRUE, If all code pages have been enumerated, or + * FALSE if lpfnCodePageEnum returned FALSE to stop the enumeration. */ -DWORD WINAPI VerLanguageNameA( DWORD wLang, LPSTR szLang, DWORD nSize ) +BOOL WINAPI EnumSystemCodePagesA( CODEPAGE_ENUMPROCA lpfnCodePageEnum, DWORD flags ) { - return GetLocaleInfoA( MAKELCID(wLang, SORT_DEFAULT), LOCALE_SENGLANGUAGE, szLang, nSize ); + 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; } /*********************************************************************** - * VerLanguageNameW (KERNEL32.@) + * EnumSystemCodePagesW (KERNEL32.@) * - * See VerLanguageNameA. + * See EnumSystemCodePagesA. */ -DWORD WINAPI VerLanguageNameW( DWORD wLang, LPWSTR szLang, DWORD nSize ) +BOOL WINAPI EnumSystemCodePagesW( CODEPAGE_ENUMPROCW lpfnCodePageEnum, DWORD flags ) { - return GetLocaleInfoW( MAKELCID(wLang, SORT_DEFAULT), LOCALE_SENGLANGUAGE, szLang, nSize ); + 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; } -/****************************************************************************** - * GetStringTypeW (KERNEL32.@) + +/*********************************************************************** + * utf7_write_w * - * See GetStringTypeA. + * Helper for utf7_mbstowcs + * + * RETURNS + * TRUE on success, FALSE on error */ -BOOL WINAPI GetStringTypeW( DWORD type, LPCWSTR src, INT count, LPWORD chartype ) +static inline BOOL utf7_write_w(WCHAR *dst, int dstlen, int *index, WCHAR character) { - static const unsigned char type2_map[16] = + if (dstlen > 0) { - C2_NOTAPPLICABLE, /* unassigned */ - C2_LEFTTORIGHT, /* L */ - C2_RIGHTTOLEFT, /* R */ - C2_EUROPENUMBER, /* EN */ - C2_EUROPESEPARATOR, /* ES */ - C2_EUROPETERMINATOR, /* ET */ - C2_ARABICNUMBER, /* AN */ - C2_COMMONSEPARATOR, /* CS */ - C2_BLOCKSEPARATOR, /* B */ - C2_SEGMENTSEPARATOR, /* S */ - C2_WHITESPACE, /* WS */ - C2_OTHERNEUTRAL, /* ON */ - C2_RIGHTTOLEFT, /* AL */ - C2_NOTAPPLICABLE, /* NSM */ - C2_NOTAPPLICABLE, /* BN */ - C2_OTHERNEUTRAL /* LRE, LRO, RLE, RLO, PDF */ - }; + if (*index >= dstlen) + return FALSE; - if (!src) - { - SetLastError( ERROR_INVALID_PARAMETER ); - return FALSE; + dst[*index] = character; } - if (count == -1) count = strlenW(src) + 1; - switch(type) + (*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[] = { - case CT_CTYPE1: - while (count--) *chartype++ = get_char_typeW( *src++ ) & 0xfff; - break; - case CT_CTYPE2: - while (count--) *chartype++ = type2_map[get_char_typeW( *src++ ) >> 12]; - break; - case CT_CTYPE3: + -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) { - WARN("CT_CTYPE3: semi-stub.\n"); - while (count--) + if (*src == '+') { - int c = *src; - WORD type1, type3 = 0; /* C3_NOTAPPLICABLE */ + src++; + if (src >= source_end) + break; - type1 = get_char_typeW( *src++ ) & 0xfff; - /* try to construct type3 from type1 */ - if(type1 & C1_SPACE) type3 |= C3_SYMBOL; - if(type1 & C1_ALPHA) type3 |= C3_ALPHA; - if ((c>=0x30A0)&&(c<=0x30FF)) type3 |= C3_KATAKANA; - if ((c>=0x3040)&&(c<=0x309F)) type3 |= C3_HIRAGANA; - if ((c>=0x4E00)&&(c<=0x9FAF)) type3 |= C3_IDEOGRAPH; - if (c == 0x0640) type3 |= C3_KASHIDA; - if ((c>=0x3000)&&(c<=0x303F)) type3 |= C3_SYMBOL; + if (*src == '-') + { + /* just a plus sign escaped as +- */ + if (!utf7_write_w(dst, dstlen, &dest_index, '+')) + return -1; + src++; + continue; + } - if ((c>=0xD800)&&(c<=0xDBFF)) type3 |= C3_HIGHSURROGATE; - if ((c>=0xDC00)&&(c<=0xDFFF)) type3 |= C3_LOWSURROGATE; + 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; + } - if ((c>=0xFF00)&&(c<=0xFF60)) type3 |= C3_FULLWIDTH; - if ((c>=0xFF00)&&(c<=0xFF20)) type3 |= C3_SYMBOL; - if ((c>=0xFF3B)&&(c<=0xFF40)) type3 |= C3_SYMBOL; - if ((c>=0xFF5B)&&(c<=0xFF60)) type3 |= C3_SYMBOL; - if ((c>=0xFF21)&&(c<=0xFF3A)) type3 |= C3_ALPHA; - if ((c>=0xFF41)&&(c<=0xFF5A)) type3 |= C3_ALPHA; - if ((c>=0xFFE0)&&(c<=0xFFE6)) type3 |= C3_FULLWIDTH; - if ((c>=0xFFE0)&&(c<=0xFFE6)) type3 |= C3_SYMBOL; + 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; + } - if ((c>=0xFF61)&&(c<=0xFFDC)) type3 |= C3_HALFWIDTH; - if ((c>=0xFF61)&&(c<=0xFF64)) type3 |= C3_SYMBOL; - if ((c>=0xFF65)&&(c<=0xFF9F)) type3 |= C3_KATAKANA; - if ((c>=0xFF65)&&(c<=0xFF9F)) type3 |= C3_ALPHA; - if ((c>=0xFFE8)&&(c<=0xFFEE)) type3 |= C3_HALFWIDTH; - if ((c>=0xFFE8)&&(c<=0xFFEE)) type3 |= C3_SYMBOL; - *chartype++ = type3; + 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++; } - break; - } - default: - SetLastError( ERROR_INVALID_PARAMETER ); - return FALSE; } - return TRUE; -} - -/****************************************************************************** - * GetStringTypeExW (KERNEL32.@) - * - * See GetStringTypeExA. - */ -BOOL WINAPI GetStringTypeExW( LCID locale, DWORD type, LPCWSTR src, INT count, LPWORD chartype ) -{ - /* locale is ignored for Unicode */ - return GetStringTypeW( type, src, count, chartype ); + return dest_index; } - -/****************************************************************************** - * GetStringTypeA (KERNEL32.@) +/*********************************************************************** + * MultiByteToWideChar (KERNEL32.@) * - * Get characteristics of the characters making up a string. + * Convert a multibyte character string into a Unicode string. * * PARAMS - * locale [I] Locale Id for the string - * type [I] CT_CTYPE1 = classification, CT_CTYPE2 = directionality, CT_CTYPE3 = typographic info - * src [I] String to analyse - * count [I] Length of src in chars, or -1 if src is NUL terminated - * chartype [O] Destination for the calculated characteristics + * 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: TRUE. chartype is filled with the requested characteristics of each char - * in src. - * Failure: FALSE. Use GetLastError() to determine the cause. + * 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. */ -BOOL WINAPI GetStringTypeA( LCID locale, DWORD type, LPCSTR src, INT count, LPWORD chartype ) +INT WINAPI MultiByteToWideChar( UINT page, DWORD flags, LPCSTR src, INT srclen, + LPWSTR dst, INT dstlen ) { - UINT cp; - INT countW; - LPWSTR srcW; - BOOL ret = FALSE; + const union cptable *table; + int ret; - if(count == -1) count = strlen(src) + 1; + if (!src || !srclen || (!dst && dstlen) || dstlen < 0) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return 0; + } - if (!(cp = get_lcid_codepage( locale ))) + if (srclen < 0) srclen = strlen(src) + 1; + + switch(page) { - FIXME("For locale %04x using current ANSI code page\n", locale); - cp = GetACP(); + 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: + if (flags & ~MB_FLAGSMASK) + { + SetLastError( ERROR_INVALID_FLAGS ); + return 0; + } + ret = wine_utf8_mbstowcs( flags, src, srclen, dst, dstlen ); + break; + default: + if (!(table = get_codepage_table( page ))) + { + 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; } - countW = MultiByteToWideChar(cp, 0, src, count, NULL, 0); - if((srcW = HeapAlloc(GetProcessHeap(), 0, countW * sizeof(WCHAR)))) + if (ret < 0) { - MultiByteToWideChar(cp, 0, src, count, srcW, countW); - /* - * NOTE: the target buffer has 1 word for each CHARACTER in the source - * string, with multibyte characters there maybe be more bytes in count - * than character space in the buffer! - */ - ret = GetStringTypeW(type, srcW, countW, chartype); - HeapFree(GetProcessHeap(), 0, srcW); + 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; } -/****************************************************************************** - * GetStringTypeExA (KERNEL32.@) + +/*********************************************************************** + * utf7_can_directly_encode * - * Get characteristics of the characters making up a string. + * Helper for utf7_wcstombs + */ +static inline BOOL utf7_can_directly_encode(WCHAR codepoint) +{ + 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 */ + }; + + return codepoint <= 0x7A ? directly_encodable_table[codepoint] : FALSE; +} + +/*********************************************************************** + * utf7_write_c * - * PARAMS - * locale [I] Locale Id for the string - * type [I] CT_CTYPE1 = classification, CT_CTYPE2 = directionality, CT_CTYPE3 = typographic info - * src [I] String to analyse - * count [I] Length of src in chars, or -1 if src is NUL terminated - * chartype [O] Destination for the calculated characteristics + * Helper for utf7_wcstombs * * RETURNS - * Success: TRUE. chartype is filled with the requested characteristics of each char - * in src. - * Failure: FALSE. Use GetLastError() to determine the cause. + * TRUE on success, FALSE on error */ -BOOL WINAPI GetStringTypeExA( LCID locale, DWORD type, LPCSTR src, INT count, LPWORD chartype ) +static inline BOOL utf7_write_c(char *dst, int dstlen, int *index, char character) { - return GetStringTypeA(locale, type, src, count, chartype); -} + if (dstlen > 0) + { + if (*index >= dstlen) + return FALSE; -static inline void map_byterev(const WCHAR *src, int len, WCHAR *dst) -{ - while (len--) - *dst++ = RtlUshortByteSwap(*src++); + dst[*index] = character; + } + + (*index)++; + + return TRUE; } -static int map_to_hiragana(const WCHAR *src, int srclen, WCHAR *dst, int dstlen) +/*********************************************************************** + * 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) { - int pos; - for (pos = 0; srclen; src++, srclen--, pos++) + static const char base64_encoding_table[] = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + + const WCHAR *source_end = src + srclen; + int dest_index = 0; + + while (src < source_end) { - /* - * U+30A1 ... U+30F3: Katakana - * U+30F4: Katakana Letter VU - * U+30F5: Katakana Letter Small KA - * U+30FD: Katakana Iteration Mark - * U+30FE: Katakana Voiced Iteration Mark - */ - WCHAR wch = *src; - if ((0x30A1 <= wch && wch <= 0x30F3) || - wch == 0x30F4 || wch == 0x30F5 || wch == 0x30FD || wch == 0x30FE) + if (*src == '+') { - wch -= 0x60; /* Katakana to Hiragana */ + if (!utf7_write_c(dst, dstlen, &dest_index, '+')) + return -1; + if (!utf7_write_c(dst, dstlen, &dest_index, '-')) + return -1; + src++; } - if (pos < dstlen) - dst[pos] = wch; - } - return pos; -} + else if (utf7_can_directly_encode(*src)) + { + if (!utf7_write_c(dst, dstlen, &dest_index, *src)) + return -1; + src++; + } + else + { + unsigned int offset = 0; + DWORD byte_pair = 0; + + if (!utf7_write_c(dst, dstlen, &dest_index, '+')) + return -1; + + 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++; + } + + 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; + } + + /* 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; + } + } + + return dest_index; +} + +/*********************************************************************** + * 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; + } + + if (srclen < 0) srclen = strlenW(src) + 1; + + 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; + } + if (flags & ~WC_FLAGSMASK) + { + SetLastError( ERROR_INVALID_FLAGS ); + 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; + } + 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; + 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.@) + * + * Get the current threads locale. + * + * PARAMS + * None. + * + * RETURNS + * The LCID currently associated with the calling thread. + */ +LCID WINAPI GetThreadLocale(void) +{ + LCID ret = NtCurrentTeb()->CurrentLocale; + if (!ret) NtCurrentTeb()->CurrentLocale = ret = GetUserDefaultLCID(); + return ret; +} + +/********************************************************************** + * SetThreadLocale (KERNEL32.@) + * + * Set the current threads locale. + * + * PARAMS + * lcid [I] LCID of the locale to set + * + * RETURNS + * Success: TRUE. The threads locale is set to lcid. + * Failure: FALSE. Use GetLastError() to determine the cause. + */ +BOOL WINAPI SetThreadLocale( LCID lcid ) +{ + TRACE("(0x%04X)\n", lcid); + + lcid = ConvertDefaultLocale(lcid); + + if (lcid != GetThreadLocale()) + { + if (!IsValidLocale(lcid, LCID_SUPPORTED)) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + NtCurrentTeb()->CurrentLocale = 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.@) + * + * Convert a default locale identifier into a real identifier. + * + * PARAMS + * lcid [I] LCID identifier of the locale to convert + * + * RETURNS + * lcid unchanged, if not a default locale or its sublanguage is + * not SUBLANG_NEUTRAL. + * GetSystemDefaultLCID(), if lcid == LOCALE_SYSTEM_DEFAULT. + * GetUserDefaultLCID(), if lcid == LOCALE_USER_DEFAULT or LOCALE_NEUTRAL. + * Otherwise, lcid with sublanguage changed to SUBLANG_DEFAULT. + */ +LCID WINAPI ConvertDefaultLocale( LCID lcid ) +{ + LANGID langid; + + switch (lcid) + { + case LOCALE_INVARIANT: + /* keep as-is */ + break; + case LOCALE_SYSTEM_DEFAULT: + lcid = GetSystemDefaultLCID(); + break; + case LOCALE_USER_DEFAULT: + case LOCALE_NEUTRAL: + lcid = GetUserDefaultLCID(); + break; + default: + /* Replace SUBLANG_NEUTRAL with SUBLANG_DEFAULT */ + langid = LANGIDFROMLCID(lcid); + if (SUBLANGID(langid) == SUBLANG_NEUTRAL) + { + langid = get_default_sublang( langid ); + lcid = MAKELCID(langid, SORTIDFROMLCID(lcid)); + } + } + return lcid; +} + + +/****************************************************************************** + * IsValidLocale (KERNEL32.@) + * + * Determine if a locale is valid. + * + * PARAMS + * lcid [I] LCID of the locale to check + * flags [I] LCID_SUPPORTED = Valid, LCID_INSTALLED = Valid and installed on the system + * + * RETURNS + * TRUE, if lcid is valid, + * FALSE, otherwise. + * + * NOTES + * Wine does not currently make the distinction between supported and installed. All + * languages supported are installed by default. + */ +BOOL WINAPI IsValidLocale( LCID lcid, DWORD flags ) +{ + /* check if language is registered in the kernel32 resources */ + return FindResourceExW( kernel32_handle, (LPWSTR)RT_STRING, + (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 ) +{ + LOCALE_ENUMPROCA lpfnLocaleEnum = (LOCALE_ENUMPROCA)lParam; + char buf[20]; + + sprintf(buf, "%08x", (UINT)LangID); + return lpfnLocaleEnum( buf ); +} + +static BOOL CALLBACK enum_lang_proc_w( HMODULE hModule, LPCWSTR type, + LPCWSTR name, WORD LangID, LONG_PTR lParam ) +{ + static const WCHAR formatW[] = {'%','0','8','x',0}; + LOCALE_ENUMPROCW lpfnLocaleEnum = (LOCALE_ENUMPROCW)lParam; + WCHAR buf[20]; + sprintfW( buf, formatW, (UINT)LangID ); + return lpfnLocaleEnum( buf ); +} + +/****************************************************************************** + * EnumSystemLocalesA (KERNEL32.@) + * + * Call a users function for each locale available on the system. + * + * PARAMS + * lpfnLocaleEnum [I] Callback function to call for each locale + * dwFlags [I] LOCALE_SUPPORTED=All supported, LOCALE_INSTALLED=Installed only + * + * RETURNS + * Success: TRUE. + * Failure: FALSE. Use GetLastError() to determine the cause. + */ +BOOL WINAPI EnumSystemLocalesA( LOCALE_ENUMPROCA lpfnLocaleEnum, DWORD dwFlags ) +{ + TRACE("(%p,%08x)\n", lpfnLocaleEnum, dwFlags); + EnumResourceLanguagesA( kernel32_handle, (LPSTR)RT_STRING, + (LPCSTR)LOCALE_ILANGUAGE, enum_lang_proc_a, + (LONG_PTR)lpfnLocaleEnum); + return TRUE; +} + + +/****************************************************************************** + * EnumSystemLocalesW (KERNEL32.@) + * + * See EnumSystemLocalesA. + */ +BOOL WINAPI EnumSystemLocalesW( LOCALE_ENUMPROCW lpfnLocaleEnum, DWORD dwFlags ) +{ + TRACE("(%p,%08x)\n", lpfnLocaleEnum, dwFlags); + EnumResourceLanguagesW( kernel32_handle, (LPWSTR)RT_STRING, + (LPCWSTR)LOCALE_ILANGUAGE, enum_lang_proc_w, + (LONG_PTR)lpfnLocaleEnum); + return TRUE; +} + + +struct enum_locale_ex_data +{ + LOCALE_ENUMPROCEX proc; + DWORD flags; + LPARAM lparam; +}; + +static BOOL CALLBACK enum_locale_ex_proc( HMODULE module, LPCWSTR type, + LPCWSTR name, WORD lang, LONG_PTR lparam ) +{ + struct enum_locale_ex_data *data = (struct enum_locale_ex_data *)lparam; + WCHAR buffer[256]; + DWORD neutral; + unsigned int flags; + + GetLocaleInfoW( MAKELCID( lang, SORT_DEFAULT ), LOCALE_SNAME | LOCALE_NOUSEROVERRIDE, + buffer, sizeof(buffer) / sizeof(WCHAR) ); + if (!GetLocaleInfoW( MAKELCID( lang, SORT_DEFAULT ), + LOCALE_INEUTRAL | LOCALE_NOUSEROVERRIDE | LOCALE_RETURN_NUMBER, + (LPWSTR)&neutral, sizeof(neutral) / sizeof(WCHAR) )) + neutral = 0; + flags = LOCALE_WINDOWS; + flags |= neutral ? LOCALE_NEUTRALDATA : LOCALE_SPECIFICDATA; + if (data->flags && !(data->flags & flags)) return TRUE; + return data->proc( buffer, flags, data->lparam ); +} + +/****************************************************************************** + * EnumSystemLocalesEx (KERNEL32.@) + */ +BOOL WINAPI EnumSystemLocalesEx( LOCALE_ENUMPROCEX proc, DWORD flags, LPARAM lparam, LPVOID reserved ) +{ + struct enum_locale_ex_data data; + + if (reserved) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; + } + data.proc = proc; + data.flags = flags; + data.lparam = lparam; + EnumResourceLanguagesW( kernel32_handle, (LPCWSTR)RT_STRING, + (LPCWSTR)MAKEINTRESOURCE((LOCALE_SNAME >> 4) + 1), + enum_locale_ex_proc, (LONG_PTR)&data ); + return TRUE; +} + + +/*********************************************************************** + * VerLanguageNameA (KERNEL32.@) + * + * Get the name of a language. + * + * PARAMS + * wLang [I] LANGID of the language + * szLang [O] Destination for the language name + * + * RETURNS + * Success: The size of the language name. If szLang is non-NULL, it is filled + * with the name. + * Failure: 0. Use GetLastError() to determine the cause. + * + */ +DWORD WINAPI VerLanguageNameA( DWORD wLang, LPSTR szLang, DWORD nSize ) +{ + return GetLocaleInfoA( MAKELCID(wLang, SORT_DEFAULT), LOCALE_SENGLANGUAGE, szLang, nSize ); +} + + +/*********************************************************************** + * VerLanguageNameW (KERNEL32.@) + * + * See VerLanguageNameA. + */ +DWORD WINAPI VerLanguageNameW( DWORD wLang, LPWSTR szLang, DWORD nSize ) +{ + return GetLocaleInfoW( MAKELCID(wLang, SORT_DEFAULT), LOCALE_SENGLANGUAGE, szLang, nSize ); +} + + +/****************************************************************************** + * GetStringTypeW (KERNEL32.@) + * + * See GetStringTypeA. + */ +BOOL WINAPI GetStringTypeW( DWORD type, LPCWSTR src, INT count, LPWORD chartype ) +{ + static const unsigned char type2_map[16] = + { + C2_NOTAPPLICABLE, /* unassigned */ + C2_LEFTTORIGHT, /* L */ + C2_RIGHTTOLEFT, /* R */ + C2_EUROPENUMBER, /* EN */ + C2_EUROPESEPARATOR, /* ES */ + C2_EUROPETERMINATOR, /* ET */ + C2_ARABICNUMBER, /* AN */ + C2_COMMONSEPARATOR, /* CS */ + C2_BLOCKSEPARATOR, /* B */ + C2_SEGMENTSEPARATOR, /* S */ + C2_WHITESPACE, /* WS */ + C2_OTHERNEUTRAL, /* ON */ + C2_RIGHTTOLEFT, /* AL */ + C2_NOTAPPLICABLE, /* NSM */ + C2_NOTAPPLICABLE, /* BN */ + C2_OTHERNEUTRAL /* LRE, LRO, RLE, RLO, PDF */ + }; + + if (!src) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; + } + + if (count == -1) count = strlenW(src) + 1; + switch(type) + { + case CT_CTYPE1: + while (count--) *chartype++ = get_char_typeW( *src++ ) & 0xfff; + break; + case CT_CTYPE2: + while (count--) *chartype++ = type2_map[get_char_typeW( *src++ ) >> 12]; + break; + case CT_CTYPE3: + { + WARN("CT_CTYPE3: semi-stub.\n"); + while (count--) + { + int c = *src; + WORD type1, type3 = 0; /* C3_NOTAPPLICABLE */ + + type1 = get_char_typeW( *src++ ) & 0xfff; + /* try to construct type3 from type1 */ + if(type1 & C1_SPACE) type3 |= C3_SYMBOL; + if(type1 & C1_ALPHA) type3 |= C3_ALPHA; + if ((c>=0x30A0)&&(c<=0x30FF)) type3 |= C3_KATAKANA; + if ((c>=0x3040)&&(c<=0x309F)) type3 |= C3_HIRAGANA; + if ((c>=0x4E00)&&(c<=0x9FAF)) type3 |= C3_IDEOGRAPH; + if (c == 0x0640) type3 |= C3_KASHIDA; + if ((c>=0x3000)&&(c<=0x303F)) type3 |= C3_SYMBOL; + + if ((c>=0xD800)&&(c<=0xDBFF)) type3 |= C3_HIGHSURROGATE; + if ((c>=0xDC00)&&(c<=0xDFFF)) type3 |= C3_LOWSURROGATE; + + if ((c>=0xFF00)&&(c<=0xFF60)) type3 |= C3_FULLWIDTH; + if ((c>=0xFF00)&&(c<=0xFF20)) type3 |= C3_SYMBOL; + if ((c>=0xFF3B)&&(c<=0xFF40)) type3 |= C3_SYMBOL; + if ((c>=0xFF5B)&&(c<=0xFF60)) type3 |= C3_SYMBOL; + if ((c>=0xFF21)&&(c<=0xFF3A)) type3 |= C3_ALPHA; + if ((c>=0xFF41)&&(c<=0xFF5A)) type3 |= C3_ALPHA; + if ((c>=0xFFE0)&&(c<=0xFFE6)) type3 |= C3_FULLWIDTH; + if ((c>=0xFFE0)&&(c<=0xFFE6)) type3 |= C3_SYMBOL; + + if ((c>=0xFF61)&&(c<=0xFFDC)) type3 |= C3_HALFWIDTH; + if ((c>=0xFF61)&&(c<=0xFF64)) type3 |= C3_SYMBOL; + if ((c>=0xFF65)&&(c<=0xFF9F)) type3 |= C3_KATAKANA; + if ((c>=0xFF65)&&(c<=0xFF9F)) type3 |= C3_ALPHA; + if ((c>=0xFFE8)&&(c<=0xFFEE)) type3 |= C3_HALFWIDTH; + if ((c>=0xFFE8)&&(c<=0xFFEE)) type3 |= C3_SYMBOL; + *chartype++ = type3; + } + break; + } + default: + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; + } + return TRUE; +} + + +/****************************************************************************** + * GetStringTypeExW (KERNEL32.@) + * + * See GetStringTypeExA. + */ +BOOL WINAPI GetStringTypeExW( LCID locale, DWORD type, LPCWSTR src, INT count, LPWORD chartype ) +{ + /* locale is ignored for Unicode */ + return GetStringTypeW( type, src, count, chartype ); +} + + +/****************************************************************************** + * GetStringTypeA (KERNEL32.@) + * + * Get characteristics of the characters making up a string. + * + * PARAMS + * locale [I] Locale Id for the string + * type [I] CT_CTYPE1 = classification, CT_CTYPE2 = directionality, CT_CTYPE3 = typographic info + * src [I] String to analyse + * count [I] Length of src in chars, or -1 if src is NUL terminated + * chartype [O] Destination for the calculated characteristics + * + * RETURNS + * Success: TRUE. chartype is filled with the requested characteristics of each char + * in src. + * Failure: FALSE. Use GetLastError() to determine the cause. + */ +BOOL WINAPI GetStringTypeA( LCID locale, DWORD type, LPCSTR src, INT count, LPWORD chartype ) +{ + UINT cp; + INT countW; + LPWSTR srcW; + BOOL ret = FALSE; + + if(count == -1) count = strlen(src) + 1; + + if (!(cp = get_lcid_codepage( locale ))) + { + FIXME("For locale %04x using current ANSI code page\n", locale); + cp = GetACP(); + } + + countW = MultiByteToWideChar(cp, 0, src, count, NULL, 0); + if((srcW = HeapAlloc(GetProcessHeap(), 0, countW * sizeof(WCHAR)))) + { + MultiByteToWideChar(cp, 0, src, count, srcW, countW); + /* + * NOTE: the target buffer has 1 word for each CHARACTER in the source + * string, with multibyte characters there maybe be more bytes in count + * than character space in the buffer! + */ + ret = GetStringTypeW(type, srcW, countW, chartype); + HeapFree(GetProcessHeap(), 0, srcW); + } + return ret; +} + +/****************************************************************************** + * GetStringTypeExA (KERNEL32.@) + * + * Get characteristics of the characters making up a string. + * + * PARAMS + * locale [I] Locale Id for the string + * type [I] CT_CTYPE1 = classification, CT_CTYPE2 = directionality, CT_CTYPE3 = typographic info + * src [I] String to analyse + * count [I] Length of src in chars, or -1 if src is NUL terminated + * chartype [O] Destination for the calculated characteristics + * + * RETURNS + * Success: TRUE. chartype is filled with the requested characteristics of each char + * in src. + * Failure: FALSE. Use GetLastError() to determine the cause. + */ +BOOL WINAPI GetStringTypeExA( LCID locale, DWORD type, LPCSTR src, INT count, LPWORD chartype ) +{ + return GetStringTypeA(locale, type, src, count, chartype); +} + +#ifdef __REACTOS__ +static inline void map_byterev(const WCHAR *src, int len, WCHAR *dst) +{ + while (len--) + *dst++ = RtlUshortByteSwap(*src++); +} + +static int map_to_hiragana(const WCHAR *src, int srclen, WCHAR *dst, int dstlen) +{ + int pos; + for (pos = 0; srclen; src++, srclen--, pos++) + { + /* + * U+30A1 ... U+30F3: Katakana + * U+30F4: Katakana Letter VU + * U+30F5: Katakana Letter Small KA + * U+30FD: Katakana Iteration Mark + * U+30FE: Katakana Voiced Iteration Mark + */ + WCHAR wch = *src; + if ((0x30A1 <= wch && wch <= 0x30F3) || + wch == 0x30F4 || wch == 0x30F5 || wch == 0x30FD || wch == 0x30FE) + { + wch -= 0x60; /* Katakana to Hiragana */ + } + if (pos < dstlen) + dst[pos] = wch; + } + return pos; +} static int map_to_katakana(const WCHAR *src, int srclen, WCHAR *dst, int dstlen) { @@ -2331,6 +3717,7 @@ static int lcmap_string(DWORD flags, const WCHAR *src, int srclen, WCHAR *dst, i return ret; } +#endif // __REACTOS__ /************************************************************************* * LCMapStringEx (KERNEL32.@) @@ -2618,6 +4005,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 +4061,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.@) * @@ -2773,20 +4160,191 @@ INT WINAPI CompareStringOrdinal(const WCHAR *str1, INT len1, const WCHAR *str2, { int ret; - if (!str1 || !str2) + 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; + + return ret; +} + +/****************************************************************************** + * LOCALE_Init + */ +void LOCALE_Init(void) +{ + extern void CDECL __wine_init_codepages( const union cptable *ansi_cp, const union cptable *oem_cp, + const union cptable *unix_cp ); + + 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")) + { + 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) ); + } + } +#endif /* __APPLE__ */ + + 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) { - SetLastError(ERROR_INVALID_PARAMETER); - return 0; + if (!(unix_cptable = wine_cp_get_table( unix_cp ))) + unix_cptable = wine_cp_get_table( 28591 ); } - 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; + __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 + +#endif // !__REACTOS__ #ifdef __REACTOS__ HANDLE NLS_RegOpenKey(HANDLE hRootKey, LPCWSTR szKeyName) @@ -2875,8 +4433,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), SUBLANG_DEFAULT ); + if (SUBLANGID(langId) == SUBLANG_NEUTRAL) langId = get_default_sublang( langId ); hResource = FindResourceExW( kernel32_handle, (LPWSTR)RT_STRING, szResourceName, langId ); @@ -3161,41 +4718,280 @@ static BOOL NLS_EnumLanguageGroupLocales(ENUMLANGUAGEGROUPLOCALE_CALLBACKS *lpPr * At present we only pass the LCID string. */ - if (lpProcs->procW) - bContinue = lpProcs->procW( lgrpid, lcid, szNumber, lpProcs->lParam ); - else - { - char szNumberA[sizeof(szNumber)/sizeof(WCHAR)]; + if (lpProcs->procW) + bContinue = lpProcs->procW( lgrpid, lcid, szNumber, lpProcs->lParam ); + else + { + char szNumberA[sizeof(szNumber)/sizeof(WCHAR)]; + + WideCharToMultiByte(CP_ACP, 0, szNumber, -1, szNumberA, sizeof(szNumberA), 0, 0); + + bContinue = lpProcs->procA( lgrpid, lcid, szNumberA, lpProcs->lParam ); + } + } + + ulIndex++; + } + else + { + /* Finished enumerating this key */ + if (!bAlternate) + { + /* Enumerate alternate sorts also */ + hKey = NLS_RegOpenKey( hKey, szAlternateSortsKeyName ); + bAlternate = TRUE; + ulIndex = 0; + } + else + bContinue = FALSE; /* Finished both keys */ + } + + if (!bContinue) + break; + } + + if (hKey) + NtClose( hKey ); + + return TRUE; +} + +/****************************************************************************** + * 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); + + callbacks.procA = pLangGrpLcEnumProc; + callbacks.procW = NULL; + callbacks.dwFlags = dwFlags; + callbacks.lgrpid = lgrpid; + callbacks.lParam = lParam; + + return NLS_EnumLanguageGroupLocales( pLangGrpLcEnumProc ? &callbacks : NULL ); +} + +/****************************************************************************** + * EnumLanguageGroupLocalesW (KERNEL32.@) + * + * See EnumLanguageGroupLocalesA. + */ +BOOL WINAPI EnumLanguageGroupLocalesW(LANGGROUPLOCALE_ENUMPROCW pLangGrpLcEnumProc, + LGRPID lgrpid, DWORD dwFlags, LONG_PTR lParam) +{ + ENUMLANGUAGEGROUPLOCALE_CALLBACKS callbacks; + + TRACE("(%p,0x%08X,0x%08X,0x%08lX)\n", pLangGrpLcEnumProc, lgrpid, dwFlags, lParam); + + callbacks.procA = NULL; + callbacks.procW = pLangGrpLcEnumProc; + callbacks.dwFlags = dwFlags; + callbacks.lgrpid = lgrpid; + callbacks.lParam = lParam; + + return NLS_EnumLanguageGroupLocales( pLangGrpLcEnumProc ? &callbacks : NULL ); +} + +/****************************************************************************** + * InvalidateNLSCache (KERNEL32.@) + * + * Invalidate the cache of NLS values. + * + * PARAMS + * None. + * + * RETURNS + * Success: TRUE. + * Failure: FALSE. + */ +BOOL WINAPI InvalidateNLSCache(void) +{ +#ifdef __REACTOS__ + JapaneseEra_ClearCache(); + return TRUE; +#else + FIXME("() stub\n"); + return FALSE; +#endif +} + +/****************************************************************************** + * 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); + + 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; + } + + NtClose(hkey); + if (hSubkey) NtClose(hSubkey); + return ret; +} + +/****************************************************************************** + * 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; + + if(!(hkey = create_registry_key())) return 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 (NtCreateKey( &hkey, KEY_ALL_ACCESS, &attr, 0, NULL, 0, NULL ) != STATUS_SUCCESS) + + { + 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; +} + +typedef struct +{ + union + { + UILANGUAGE_ENUMPROCA procA; + UILANGUAGE_ENUMPROCW procW; + } u; + DWORD flags; + LONG_PTR param; +} ENUM_UILANG_CALLBACK; + +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]; + + sprintf(buf, "%08x", (UINT)LangID); + return enum_uilang->u.procA( buf, enum_uilang->param ); +} + +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]; + + sprintfW( buf, formatW, (UINT)LangID ); + return enum_uilang->u.procW( buf, enum_uilang->param ); +} + +/****************************************************************************** + * EnumUILanguagesA (KERNEL32.@) + */ +BOOL WINAPI EnumUILanguagesA(UILANGUAGE_ENUMPROCA pUILangEnumProc, DWORD dwFlags, LONG_PTR lParam) +{ + ENUM_UILANG_CALLBACK enum_uilang; + + TRACE("%p, %x, %lx\n", pUILangEnumProc, dwFlags, lParam); + + if(!pUILangEnumProc) { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + if(dwFlags) { + SetLastError(ERROR_INVALID_FLAGS); + return FALSE; + } + + enum_uilang.u.procA = pUILangEnumProc; + enum_uilang.flags = dwFlags; + enum_uilang.param = lParam; - WideCharToMultiByte(CP_ACP, 0, szNumber, -1, szNumberA, sizeof(szNumberA), 0, 0); + EnumResourceLanguagesA( kernel32_handle, (LPCSTR)RT_STRING, + (LPCSTR)LOCALE_ILANGUAGE, enum_uilang_proc_a, + (LONG_PTR)&enum_uilang); + return TRUE; +} - bContinue = lpProcs->procA( lgrpid, lcid, szNumberA, lpProcs->lParam ); - } - } +/****************************************************************************** + * EnumUILanguagesW (KERNEL32.@) + */ +BOOL WINAPI EnumUILanguagesW(UILANGUAGE_ENUMPROCW pUILangEnumProc, DWORD dwFlags, LONG_PTR lParam) +{ + ENUM_UILANG_CALLBACK enum_uilang; - ulIndex++; - } - else - { - /* Finished enumerating this key */ - if (!bAlternate) - { - /* Enumerate alternate sorts also */ - hKey = NLS_RegOpenKey( hKey, szAlternateSortsKeyName ); - bAlternate = TRUE; - ulIndex = 0; - } - else - bContinue = FALSE; /* Finished both keys */ - } + TRACE("%p, %x, %lx\n", pUILangEnumProc, dwFlags, lParam); - if (!bContinue) - break; + + if(!pUILangEnumProc) { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + if(dwFlags) { + SetLastError(ERROR_INVALID_FLAGS); + return FALSE; } - if (hKey) - NtClose( hKey ); + 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; } @@ -3516,58 +5312,7 @@ static const struct geoinfo_t geoinfodata[] = { { 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); - - callbacks.procA = pLangGrpLcEnumProc; - callbacks.procW = NULL; - callbacks.dwFlags = dwFlags; - callbacks.lgrpid = lgrpid; - callbacks.lParam = lParam; - - return NLS_EnumLanguageGroupLocales( pLangGrpLcEnumProc ? &callbacks : NULL ); -} - -/****************************************************************************** - * EnumLanguageGroupLocalesW (KERNEL32.@) - * - * See EnumLanguageGroupLocalesA. - */ -BOOL WINAPI EnumLanguageGroupLocalesW(LANGGROUPLOCALE_ENUMPROCW pLangGrpLcEnumProc, - LGRPID lgrpid, DWORD dwFlags, LONG_PTR lParam) -{ - ENUMLANGUAGEGROUPLOCALE_CALLBACKS callbacks; - - TRACE("(%p,0x%08X,0x%08X,0x%08lX)\n", pLangGrpLcEnumProc, lgrpid, dwFlags, lParam); - - callbacks.procA = NULL; - callbacks.procW = pLangGrpLcEnumProc; - callbacks.dwFlags = dwFlags; - callbacks.lgrpid = lgrpid; - callbacks.lParam = lParam; - - return NLS_EnumLanguageGroupLocales( pLangGrpLcEnumProc ? &callbacks : NULL ); -} - +#ifdef __REACTOS__ /* Callback function ptrs for EnumSystemCodePagesA/W */ typedef struct { @@ -3632,57 +5377,219 @@ static BOOL NLS_EnumSystemCodePages(ENUMSYSTEMCODEPAGES_CALLBACKS *lpProcs) } else bContinue = FALSE; - if (!bContinue) - break; + if (!bContinue) + break; + } + + if (hKey) + NtClose(hKey); + + return TRUE; +} + +/* + * @implemented + */ +BOOL +WINAPI +EnumSystemCodePagesW ( + CODEPAGE_ENUMPROCW lpCodePageEnumProc, + DWORD dwFlags + ) +{ + ENUMSYSTEMCODEPAGES_CALLBACKS procs; + + TRACE("(%p,0x%08X)\n", lpCodePageEnumProc, dwFlags); + + procs.procA = NULL; + procs.procW = lpCodePageEnumProc; + procs.dwFlags = dwFlags; + + return NLS_EnumSystemCodePages(lpCodePageEnumProc ? &procs : NULL); +} + + +/* + * @implemented + */ +BOOL +WINAPI +EnumSystemCodePagesA ( + CODEPAGE_ENUMPROCA lpCodePageEnumProc, + DWORD dwFlags + ) +{ + ENUMSYSTEMCODEPAGES_CALLBACKS procs; + + TRACE("(%p,0x%08X)\n", lpCodePageEnumProc, dwFlags); + + procs.procA = lpCodePageEnumProc; + procs.procW = NULL; + procs.dwFlags = dwFlags; + + return NLS_EnumSystemCodePages(lpCodePageEnumProc ? &procs : NULL); +} + + +static int +#ifdef __REACTOS__ +NLS_GetGeoFriendlyName(GEOID Location, LPWSTR szFriendlyName, int cchData, LANGID lang) +#else +NLS_GetGeoFriendlyName(GEOID Location, LPWSTR szFriendlyName, int cchData) +#endif +{ + /* FIXME: move *.nls resources out of kernel32 into locale.nls */ + Location += NLSRC_OFFSET; + Location &= 0xFFFF; + + if (cchData == 0) +#ifdef __REACTOS__ + return GetLocalisedText(Location, NULL, 0, lang); +#else + return GetLocalisedText(Location, NULL, 0); +#endif + +#ifdef __REACTOS__ + if (GetLocalisedText(Location, szFriendlyName, (UINT)cchData, lang)) +#else + if (GetLocalisedText(Location, szFriendlyName, (UINT)cchData)) +#endif + return strlenW(szFriendlyName) + 1; + + return 0; +} +#endif // __REACTOS__ + +static const struct geoinfo_t *get_geoinfo_dataptr(GEOID geoid) +{ + int min, max; + + min = 0; + max = sizeof(geoinfodata)/sizeof(struct geoinfo_t)-1; + + while (min <= max) { + const struct geoinfo_t *ptr; + int n = (min+max)/2; + + ptr = &geoinfodata[n]; + if (geoid == ptr->id) + /* we don't need empty entries */ + return *ptr->iso2W ? ptr : NULL; + + if (ptr->id > geoid) + max = n-1; + else + min = n+1; + } + + return NULL; +} + +/****************************************************************************** + * GetGeoInfoW (KERNEL32.@) + */ +INT WINAPI GetGeoInfoW(GEOID geoid, GEOTYPE geotype, LPWSTR data, int data_len, LANGID lang) +{ + const struct geoinfo_t *ptr; + const WCHAR *str = NULL; + WCHAR buffW[12]; + LONG val = 0; + INT len; + + TRACE("%d %d %p %d %d\n", geoid, geotype, data, data_len, lang); + + if (!(ptr = get_geoinfo_dataptr(geoid))) { + SetLastError(ERROR_INVALID_PARAMETER); + return 0; + } + + switch (geotype) { + case GEO_FRIENDLYNAME: + { +#ifdef __REACTOS__ + return NLS_GetGeoFriendlyName(geoid, data, data_len, lang); +#else + return NLS_GetGeoFriendlyName(geoid, data, data_len); +#endif + } + case GEO_NATION: + val = geoid; + break; + case GEO_ISO_UN_NUMBER: + val = ptr->uncode; + break; + case GEO_PARENT: + val = ptr->parent; + break; + case GEO_ISO2: + case GEO_ISO3: + { + str = geotype == GEO_ISO2 ? ptr->iso2W : ptr->iso3W; + break; + } + case GEO_RFC1766: + case GEO_LCID: + case GEO_OFFICIALNAME: + case GEO_TIMEZONES: + case GEO_OFFICIALLANGUAGES: + case GEO_LATITUDE: + case GEO_LONGITUDE: + FIXME("type %d is not supported\n", geotype); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return 0; + default: + WARN("unrecognized type %d\n", geotype); + SetLastError(ERROR_INVALID_FLAGS); + return 0; + } + + if (val) { + static const WCHAR fmtW[] = {'%','d',0}; + sprintfW(buffW, fmtW, val); + str = buffW; } - if (hKey) - NtClose(hKey); + len = strlenW(str) + 1; + if (!data || !data_len) + return len; - return TRUE; + memcpy(data, str, min(len, data_len)*sizeof(WCHAR)); + if (data_len < len) + SetLastError(ERROR_INSUFFICIENT_BUFFER); + return data_len < len ? 0 : len; } -/* - * @implemented +/****************************************************************************** + * GetGeoInfoA (KERNEL32.@) */ -BOOL -WINAPI -EnumSystemCodePagesW ( - CODEPAGE_ENUMPROCW lpCodePageEnumProc, - DWORD dwFlags - ) +INT WINAPI GetGeoInfoA(GEOID geoid, GEOTYPE geotype, LPSTR data, int data_len, LANGID lang) { - ENUMSYSTEMCODEPAGES_CALLBACKS procs; - - TRACE("(%p,0x%08X)\n", lpCodePageEnumProc, dwFlags); - - procs.procA = NULL; - procs.procW = lpCodePageEnumProc; - procs.dwFlags = dwFlags; + WCHAR *buffW; + INT len; - return NLS_EnumSystemCodePages(lpCodePageEnumProc ? &procs : NULL); -} + TRACE("%d %d %p %d %d\n", geoid, geotype, data, data_len, lang); + len = GetGeoInfoW(geoid, geotype, NULL, 0, lang); + if (!len) + return 0; -/* - * @implemented - */ -BOOL -WINAPI -EnumSystemCodePagesA ( - CODEPAGE_ENUMPROCA lpCodePageEnumProc, - DWORD dwFlags - ) -{ - ENUMSYSTEMCODEPAGES_CALLBACKS procs; + buffW = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR)); + if (!buffW) + return 0; - TRACE("(%p,0x%08X)\n", lpCodePageEnumProc, dwFlags); + GetGeoInfoW(geoid, geotype, buffW, len, lang); + len = WideCharToMultiByte(CP_ACP, 0, buffW, -1, NULL, 0, NULL, NULL); + if (!data || !data_len) { + HeapFree(GetProcessHeap(), 0, buffW); + return len; + } - procs.procA = lpCodePageEnumProc; - procs.procW = NULL; - procs.dwFlags = dwFlags; + len = WideCharToMultiByte(CP_ACP, 0, buffW, -1, data, data_len, NULL, NULL); + HeapFree(GetProcessHeap(), 0, buffW); - return NLS_EnumSystemCodePages(lpCodePageEnumProc ? &procs : NULL); + if (data_len < len) + SetLastError(ERROR_INSUFFICIENT_BUFFER); + return data_len < len ? 0 : len; } /****************************************************************************** @@ -3734,349 +5641,606 @@ 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); +} + /****************************************************************************** - * InvalidateNLSCache (KERNEL32.@) - * - * Invalidate the cache of NLS values. - * - * PARAMS - * None. - * - * RETURNS - * Success: TRUE. - * Failure: FALSE. + * NormalizeString (KERNEL32.@) */ -BOOL WINAPI InvalidateNLSCache(void) +INT WINAPI NormalizeString(NORM_FORM NormForm, LPCWSTR lpSrcString, INT cwSrcLength, + LPWSTR lpDstString, INT cwDstLength) { -#ifdef __REACTOS__ - JapaneseEra_ClearCache(); - return TRUE; -#else - FIXME("() stub\n"); - return FALSE; -#endif + FIXME("%x %p %d %p %d\n", NormForm, lpSrcString, cwSrcLength, lpDstString, cwDstLength); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return 0; } /****************************************************************************** - * GetUserGeoID (KERNEL32.@) + * IsNormalizedString (KERNEL32.@) */ -GEOID WINAPI GetUserGeoID( GEOCLASS GeoClass ) +BOOL WINAPI IsNormalizedString(NORM_FORM NormForm, LPCWSTR lpString, INT cwLength) { - 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); + FIXME("%x %p %d\n", NormForm, lpString, cwLength); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return FALSE; +} - if(!(hkey = create_registry_key())) return ret; +enum { + BASE = 36, + TMIN = 1, + TMAX = 26, + SKEW = 38, + DAMP = 700, + INIT_BIAS = 72, + INIT_N = 128 +}; - 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); +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; } - NtClose(hkey); - if (hSubkey) NtClose(hSubkey); - return ret; + HeapFree(GetProcessHeap(), 0, norm_str); + return out; } /****************************************************************************** - * SetUserGeoID (KERNEL32.@) + * IdnToNameprepUnicode (KERNEL32.@) */ -BOOL WINAPI SetUserGeoID( GEOID GeoID ) +INT WINAPI IdnToNameprepUnicode(DWORD dwFlags, LPCWSTR lpUnicodeCharStr, INT cchUnicodeChar, + LPWSTR lpNameprepCharStr, INT cchNameprepChar) { - 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; + enum { + UNASSIGNED = 0x1, + PROHIBITED = 0x2, + BIDI_RAL = 0x4, + BIDI_L = 0x8 + }; - if(!(hkey = create_registry_key())) return FALSE; + 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; - 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 ); + TRACE("%x %p %d %p %d\n", dwFlags, lpUnicodeCharStr, cchUnicodeChar, + lpNameprepCharStr, cchNameprepChar); - if (NtCreateKey( &hkey, KEY_ALL_ACCESS, &attr, 0, NULL, 0, NULL ) != STATUS_SUCCESS) + if(dwFlags & ~(IDN_ALLOW_UNASSIGNED|IDN_USE_STD3_ASCII_RULES)) { + SetLastError(ERROR_INVALID_FLAGS); + return 0; + } - { - NtClose(attr.RootDirectory); - return FALSE; + if(!lpUnicodeCharStr || cchUnicodeChar<-1) { + SetLastError(ERROR_INVALID_PARAMETER); + return 0; } - sprintfW(bufferW, formatW, GeoID); - NtSetValueKey(hkey, &keyW, 0, REG_SZ, bufferW, (strlenW(bufferW) + 1) * sizeof(WCHAR)); - NtClose(attr.RootDirectory); - NtClose(hkey); - return TRUE; -} + 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]; + } + } -typedef struct -{ - union - { - UILANGUAGE_ENUMPROCA procA; - UILANGUAGE_ENUMPROCW procW; - } u; - DWORD flags; - LONG_PTR param; -} ENUM_UILANG_CALLBACK; + 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; + } -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]; + if(label_end < cchUnicodeChar) { + norm_str[norm_len++] = lpUnicodeCharStr[label_end] ? '.' : 0; + label_end++; + } - sprintf(buf, "%08x", (UINT)LangID); - return enum_uilang->u.procA( buf, enum_uilang->param ); -} + 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; + } -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]; + have_bidi_ral = prohibit_bidi_ral = FALSE; + mask = PROHIBITED; + if((dwFlags&IDN_ALLOW_UNASSIGNED) == 0) + mask |= UNASSIGNED; + for(i=0; iu.procW( buf, enum_uilang->param ); -} + if(flags & BIDI_RAL) + have_bidi_ral = TRUE; + if(flags & BIDI_L) + prohibit_bidi_ral = TRUE; + } -/****************************************************************************** - * EnumUILanguagesA (KERNEL32.@) - */ -BOOL WINAPI EnumUILanguagesA(UILANGUAGE_ENUMPROCA pUILangEnumProc, DWORD dwFlags, LONG_PTR lParam) -{ - ENUM_UILANG_CALLBACK enum_uilang; + if(have_bidi_ral) { + ch = norm_str[0]; + flags = get_table_entry( nameprep_char_type, ch ); + if((flags & BIDI_RAL) == 0) + prohibit_bidi_ral = TRUE; - TRACE("%p, %x, %lx\n", pUILangEnumProc, dwFlags, lParam); + ch = norm_str[norm_len-1]; + flags = get_table_entry( nameprep_char_type, ch ); + if((flags & BIDI_RAL) == 0) + prohibit_bidi_ral = TRUE; + } - if(!pUILangEnumProc) { - SetLastError(ERROR_INVALID_PARAMETER); - return FALSE; - } - if(dwFlags) { - SetLastError(ERROR_INVALID_FLAGS); - return FALSE; - } + if(have_bidi_ral && prohibit_bidi_ral) { + SetLastError(ERROR_INVALID_NAME); + return 0; + } - enum_uilang.u.procA = pUILangEnumProc; - enum_uilang.flags = dwFlags; - enum_uilang.param = lParam; + label_start = label_end; + } - EnumResourceLanguagesA( kernel32_handle, (LPCSTR)RT_STRING, - (LPCSTR)LOCALE_ILANGUAGE, enum_uilang_proc_a, - (LONG_PTR)&enum_uilang); - return TRUE; + return out; } /****************************************************************************** - * EnumUILanguagesW (KERNEL32.@) + * IdnToUnicode (KERNEL32.@) */ -BOOL WINAPI EnumUILanguagesW(UILANGUAGE_ENUMPROCW pUILangEnumProc, DWORD dwFlags, LONG_PTR lParam) +INT WINAPI IdnToUnicode(DWORD dwFlags, LPCWSTR lpASCIICharStr, INT cchASCIIChar, + LPWSTR lpUnicodeCharStr, INT cchUnicodeChar) { - ENUM_UILANG_CALLBACK enum_uilang; + extern const unsigned short nameprep_char_type[]; - TRACE("%p, %x, %lx\n", pUILangEnumProc, dwFlags, lParam); + INT i, label_start, label_end, out_label, out = 0; + WCHAR ch; + TRACE("%x %p %d %p %d\n", dwFlags, lpASCIICharStr, cchASCIIChar, + lpUnicodeCharStr, cchUnicodeChar); - if(!pUILangEnumProc) { - SetLastError(ERROR_INVALID_PARAMETER); - return FALSE; - } - if(dwFlags) { - SetLastError(ERROR_INVALID_FLAGS); - return FALSE; - } + for(label_start=0; label_start0x7f || (i!=cchASCIIChar-1 && !ch)) { + SetLastError(ERROR_INVALID_NAME); + return 0; + } -static int -#ifdef __REACTOS__ -NLS_GetGeoFriendlyName(GEOID Location, LPWSTR szFriendlyName, int cchData, LANGID lang) -#else -NLS_GetGeoFriendlyName(GEOID Location, LPWSTR szFriendlyName, int cchData) -#endif -{ - /* FIXME: move *.nls resources out of kernel32 into locale.nls */ - Location += NLSRC_OFFSET; - Location &= 0xFFFF; + if(!ch || ch=='.') + break; + if(ch == '-') + delim = i; - if (cchData == 0) -#ifdef __REACTOS__ - return GetLocalisedText(Location, NULL, 0, lang); -#else - return GetLocalisedText(Location, NULL, 0); -#endif + if((dwFlags&IDN_USE_STD3_ASCII_RULES) == 0) + continue; + if((ch>='a' && ch<='z') || (ch>='A' && ch<='Z') + || (ch>='0' && ch<='9') || ch=='-') + continue; -#ifdef __REACTOS__ - if (GetLocalisedText(Location, szFriendlyName, (UINT)cchData, lang)) -#else - if (GetLocalisedText(Location, szFriendlyName, (UINT)cchData)) -#endif - return strlenW(szFriendlyName) + 1; + 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; + } - 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; + } -static const struct geoinfo_t *get_geoinfo_dataptr(GEOID geoid) -{ - int min, max; + 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; + } - min = 0; - max = sizeof(geoinfodata)/sizeof(struct geoinfo_t)-1; + label_start = label_end; + continue; + } - while (min <= max) { - const struct geoinfo_t *ptr; - int n = (min+max)/2; + 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; - ptr = &geoinfodata[n]; - if (geoid == ptr->id) - /* we don't need empty entry */ - return *ptr->iso2W ? ptr : NULL; + 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 (ptr->id > geoid) - max = n-1; - else - min = n+1; + 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 NULL; + return out; } + /****************************************************************************** - * GetGeoInfoW (KERNEL32.@) + * GetFileMUIPath (KERNEL32.@) */ -INT WINAPI GetGeoInfoW(GEOID geoid, GEOTYPE geotype, LPWSTR data, int data_len, LANGID lang) -{ - const struct geoinfo_t *ptr; - const WCHAR *str = NULL; - WCHAR buffW[12]; - LONG val = 0; - INT len; - - TRACE("%d %d %p %d %d\n", geoid, geotype, data, data_len, lang); - - if (!(ptr = get_geoinfo_dataptr(geoid))) { - SetLastError(ERROR_INVALID_PARAMETER); - return 0; - } - - switch (geotype) { - case GEO_FRIENDLYNAME: - { -#ifdef __REACTOS__ - return NLS_GetGeoFriendlyName(geoid, data, data_len, lang); -#else - return NLS_GetGeoFriendlyName(geoid, data, data_len); -#endif - } - case GEO_NATION: - val = geoid; - break; - case GEO_ISO_UN_NUMBER: - val = ptr->uncode; - break; - case GEO_PARENT: - val = ptr->parent; - break; - case GEO_ISO2: - case GEO_ISO3: - { - str = geotype == GEO_ISO2 ? ptr->iso2W : ptr->iso3W; - break; - } - case GEO_RFC1766: - case GEO_LCID: - case GEO_OFFICIALNAME: - case GEO_TIMEZONES: - case GEO_OFFICIALLANGUAGES: - case GEO_LATITUDE: - case GEO_LONGITUDE: - FIXME("type %d is not supported\n", geotype); - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; - default: - WARN("unrecognized type %d\n", geotype); - SetLastError(ERROR_INVALID_FLAGS); - return 0; - } - if (val) { - static const WCHAR fmtW[] = {'%','d',0}; - sprintfW(buffW, fmtW, val); - str = buffW; - } +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); - len = strlenW(str) + 1; - if (!data || !data_len) - return len; + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - memcpy(data, str, min(len, data_len)*sizeof(WCHAR)); - if (data_len < len) - SetLastError(ERROR_INSUFFICIENT_BUFFER); - return data_len < len ? 0 : len; + return FALSE; } /****************************************************************************** - * GetGeoInfoA (KERNEL32.@) + * GetFileMUIInfo (KERNEL32.@) */ -INT WINAPI GetGeoInfoA(GEOID geoid, GEOTYPE geotype, LPSTR data, int data_len, LANGID lang) -{ - WCHAR *buffW; - INT len; - - TRACE("%d %d %p %d %d\n", geoid, geotype, data, data_len, lang); - len = GetGeoInfoW(geoid, geotype, NULL, 0, lang); - if (!len) - return 0; +BOOL WINAPI GetFileMUIInfo(DWORD flags, PCWSTR path, FILEMUIINFO *info, DWORD *size) +{ + FIXME("stub: %u, %s, %p, %p\n", flags, debugstr_w(path), info, size); - buffW = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR)); - if (!buffW) - return 0; + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return FALSE; +} - GetGeoInfoW(geoid, geotype, buffW, len, lang); - len = WideCharToMultiByte(CP_ACP, 0, buffW, -1, NULL, 0, NULL, NULL); - if (!data || !data_len) { - HeapFree(GetProcessHeap(), 0, buffW); - return len; - } +/****************************************************************************** + * ResolveLocaleName (KERNEL32.@) + */ - len = WideCharToMultiByte(CP_ACP, 0, buffW, -1, data, data_len, NULL, NULL); - HeapFree(GetProcessHeap(), 0, buffW); +INT WINAPI ResolveLocaleName(LPCWSTR name, LPWSTR localename, INT len) +{ + FIXME("stub: %s, %p, %d\n", wine_dbgstr_w(name), localename, len); - if (data_len < len) - SetLastError(ERROR_INSUFFICIENT_BUFFER); - return data_len < len ? 0 : len; + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return 0; } +#endif // !__REACTOS__ 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 diff --git a/dll/win32/msvcrt/msvcrt.spec b/dll/win32/msvcrt/msvcrt.spec index 52437e101fb..605e783ccb7 100644 --- a/dll/win32/msvcrt/msvcrt.spec +++ b/dll/win32/msvcrt/msvcrt.spec @@ -1035,7 +1035,8 @@ @ 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=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 @ stub -version=0x600+ _swprintf_p_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 @@ -1402,7 +1404,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 @@ -1518,7 +1520,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/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 3aad7339faf..cbead4ace6a 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 9e4f8559d7a..6206b310516 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 2f378574f71..98657ae865d 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 87ca8e295c2..44d492fb3c2 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 fc94215b089..1a1dd8c03de 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 d2e7ffe0041..03b7da17f5b 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 53987ecb518..bb0a014c576 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 1370a7e5153..74d6fbc055a 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 22027f445b8..4f76d591528 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 e6cdec495dd..efb75889e9b 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 40e44c8ff93..d69aa6c78eb 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 1491ef0aa7f..4470e750fa9 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 39e34ac552a..d4f8f0ccef8 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 2f777939599..43f3a381c2d 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 b92b0fc3b18..dec4dcd53e4 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 8509d190b8d..3af7abdc9b4 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 d7a44b3ebb2..c94d3b199ad 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 175aec44e35..0b98d5e4cf4 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 6110e220cca..e68c52057b1 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 eca2219ca88..0c4a467198f 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 d4be81bc2ec..90f63248325 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 e0d6e2e3034..15d243725da 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 4a9561a6a89..62804ef1579 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 89559150e8c..a843412a1d9 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 eaa4a867b59..b5224a1c7f6 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 8b61952cd4c..90dfa506a7d 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 diff --git a/dll/win32/shell32/CCopyAsPathMenu.cpp b/dll/win32/shell32/CCopyAsPathMenu.cpp new file mode 100644 index 00000000000..1c78776a8c8 --- /dev/null +++ b/dll/win32/shell32/CCopyAsPathMenu.cpp @@ -0,0 +1,211 @@ +/* + * 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 + * 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) +{ + 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'\"'; +} + +HRESULT +CCopyAsPathMenu::DoCopyAsPath(IDataObject *pdto) +{ + 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); + } + + 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 new file mode 100644 index 00000000000..a72af085f19 --- /dev/null +++ b/dll/win32/shell32/CCopyAsPathMenu.h @@ -0,0 +1,43 @@ +/* + * 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 + * Copyright 2024 Thamatip Chitpong + */ + +#pragma once + +class CCopyAsPathMenu : + public CComCoClass, + public CComObjectRootEx, + 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_IContextMenu, IContextMenu) + COM_INTERFACE_ENTRY_IID(IID_IShellExtInit, IShellExtInit) + END_COM_MAP() +}; diff --git a/dll/win32/shell32/CCopyMoveToMenu.cpp b/dll/win32/shell32/CCopyMoveToMenu.cpp index f07328cee7d..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)) { @@ -436,145 +451,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/CDefView.cpp b/dll/win32/shell32/CDefView.cpp index 76cdf915d82..655722ee8df 100644 --- a/dll/win32/shell32/CDefView.cpp +++ b/dll/win32/shell32/CDefView.cpp @@ -48,12 +48,27 @@ 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 #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) @@ -146,6 +161,7 @@ class CDefView : BOOL m_isEditing; BOOL m_isParentFolderSpecial; + bool m_ScheduledStatusbarUpdate; CLSID m_Category; BOOL m_Destroyed; @@ -183,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(); @@ -325,6 +343,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); @@ -372,6 +391,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) @@ -437,6 +457,7 @@ CDefView::CDefView() : m_cScrollDelay(0), m_isEditing(FALSE), m_isParentFolderSpecial(FALSE), + m_ScheduledStatusbarUpdate(false), m_Destroyed(FALSE) { ZeroMemory(&m_FolderSettings, sizeof(m_FolderSettings)); @@ -573,7 +594,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; @@ -622,6 +643,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 ##### @@ -947,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); } @@ -989,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; @@ -1002,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; @@ -1014,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); @@ -1362,14 +1419,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 +1570,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 +1617,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 +1677,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; @@ -2096,7 +2157,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: @@ -2277,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/CDefaultContextMenu.cpp b/dll/win32/shell32/CDefaultContextMenu.cpp index 0e1bdb99083..2ff69ed2e6e 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) @@ -702,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; } @@ -715,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) { @@ -807,7 +804,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); @@ -976,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/CMakeLists.txt b/dll/win32/shell32/CMakeLists.txt index 1e8aee4c17f..a90913a1b08 100644 --- a/dll/win32/shell32/CMakeLists.txt +++ b/dll/win32/shell32/CMakeLists.txt @@ -18,6 +18,7 @@ if(DBG) endif() list(APPEND SOURCE + brfolder.cpp CActiveDesktop.cpp CActiveDesktop.h CIDLDataObj.cpp @@ -75,6 +76,7 @@ list(APPEND SOURCE CNewMenu.cpp CSendToMenu.cpp CCopyMoveToMenu.cpp + CCopyAsPathMenu.cpp CShellDispatch.cpp CFolder.cpp CFolderItems.cpp @@ -82,7 +84,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/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/dll/win32/shell32/brfolder.cpp b/dll/win32/shell32/brfolder.cpp new file mode 100644 index 00000000000..40138bc1b60 --- /dev/null +++ b/dll/win32/shell32/brfolder.cpp @@ -0,0 +1,1117 @@ +/* + * 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 flags unimplemented + +#include "precomp.h" + +#include // Resizable window + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +#define SHV_CHANGE_NOTIFY (WM_USER + 0x1111) + +struct BrFolder +{ + LPBROWSEINFOW lpBrowseInfo; + HWND hWnd; + HWND hwndTreeView; + PIDLIST_ABSOLUTE pidlRet; + LAYOUT_DATA* layout; // Filled by LayoutInit, used by LayoutUpdate + SIZE szMin; + ULONG hChangeNotify; // Change notification handle +}; + +struct BrItemData +{ + 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[] = +{ + { 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 SUPPORTED_FLAGS (BIF_STATUSTEXT | BIF_BROWSEFORCOMPUTER | BIF_RETURNFSANCESTORS | \ + BIF_RETURNONLYFSDIRS | BIF_NONEWFOLDERBUTTON | BIF_NEWDIALOGSTYLE | \ + BIF_BROWSEINCLUDEFILES) + +static HTREEITEM +BrFolder_InsertItem( + BrFolder *info, + IShellFolder *lpsf, + 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); +} + +static void +BrFolder_Callback(LPBROWSEINFOW lpBrowseInfo, HWND hWnd, UINT uMsg, LPARAM lParam) +{ + if (!lpBrowseInfo->lpfn) + return; + lpBrowseInfo->lpfn(hWnd, uMsg, lParam, lpBrowseInfo->lParam); +} + +static BrItemData * +BrFolder_GetItemData(BrFolder *info, HTREEITEM hItem) +{ + TVITEMW item = { TVIF_HANDLE | TVIF_PARAM }; + item.hItem = hItem; + if (!TreeView_GetItem(info->hwndTreeView, &item)) + { + ERR("TreeView_GetItem failed\n"); + return NULL; + } + return (BrItemData *)item.lParam; +} + +/****************************************************************************** + * BrFolder_InitTreeView [Internal] + * + * Called from WM_INITDIALOG handler. + */ +static void +BrFolder_InitTreeView(BrFolder *info) +{ + HIMAGELIST hImageList; + HRESULT hr; + CComPtr lpsfParent, lpsfRoot; + CComPtr pEnumChildren; + HTREEITEM hItem; + + Shell_GetImageLists(NULL, &hImageList); + + if (hImageList) + TreeView_SetImageList(info->hwndTreeView, hImageList, 0); + + /* 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. + * + 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. + * + * If root is 'Desktop', then root's parent is also 'Desktop'. + */ + + PCIDLIST_ABSOLUTE pidlRoot = info->lpBrowseInfo->pidlRoot; + CComHeapPtr pidlParent(ILClone(pidlRoot)); + ILRemoveLastID(pidlParent); + CComHeapPtr pidlChild(ILClone(ILFindLastID(pidlRoot))); + + if (_ILIsDesktop(pidlParent)) + { + hr = SHGetDesktopFolder(&lpsfParent); + if (FAILED_UNEXPECTEDLY(hr)) + return; + } + else + { + CComPtr lpsfDesktop; + hr = SHGetDesktopFolder(&lpsfDesktop); + if (FAILED_UNEXPECTEDLY(hr)) + 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.Attach(lpsfParent); + + if (FAILED_UNEXPECTEDLY(hr)) + return; + + DWORD flags = BrowseFlagsToSHCONTF(info->lpBrowseInfo->ulFlags); + hr = lpsfRoot->EnumObjects(info->hWnd, flags, &pEnumChildren); + if (FAILED_UNEXPECTEDLY(hr)) + return; + + TreeView_DeleteItem(info->hwndTreeView, TVI_ROOT); + hItem = BrFolder_InsertItem(info, lpsfParent, pidlChild, pidlParent, pEnumChildren, TVI_ROOT); + TreeView_Expand(info->hwndTreeView, hItem, TVE_EXPAND); +} + +static INT +BrFolder_GetIcon(PCIDLIST_ABSOLUTE pidl, UINT uFlags) +{ + SHFILEINFOW sfi; + SHGetFileInfoW((LPCWSTR)pidl, 0, &sfi, sizeof(sfi), uFlags); + return sfi.iIcon; +} + +static void +BrFolder_GetIconPair(PCIDLIST_ABSOLUTE pidl, LPTVITEMW pItem) +{ + DWORD flags; + + CComHeapPtr pidlDesktop; + if (!pidl) + { + pidlDesktop.Attach(_ILCreateDesktop()); + pidl = pidlDesktop; + } + + flags = SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON; + pItem->iImage = BrFolder_GetIcon(pidl, flags); + + flags = SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_OPENICON; + pItem->iSelectedImage = BrFolder_GetIcon(pidl, flags); +} + +/****************************************************************************** + * BrFolder_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. + * pidlChild [I] ITEMIDLIST of the child, relative to parent + * dwFlags [I] as in IShellFolder::GetDisplayNameOf + * lpFriendlyName [O] The desired display name in unicode + * + * RETURNS + * Success: TRUE + * Failure: FALSE + */ +static BOOL +BrFolder_GetName( + IShellFolder *lpsf, + PCIDLIST_RELATIVE pidlChild, + DWORD dwFlags, + LPWSTR lpFriendlyName) +{ + BOOL bSuccess = FALSE; + STRRET str; + + 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; +} + +/****************************************************************************** + * BrFolder_InsertItem [Internal] + * + * PARAMS + * info [I] data for the dialog + * lpsf [I] IShellFolder interface of the item's parent shell folder + * 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 + * + * RETURNS + * Success: Handle to the created and inserted treeview-item + * Failure: NULL + */ +static HTREEITEM +BrFolder_InsertItem( + BrFolder *info, + IShellFolder *lpsf, + PCIDLIST_RELATIVE pidlChild, + PCIDLIST_ABSOLUTE pidlParent, + IEnumIDList* pEnumIL, + HTREEITEM hParent) +{ + WCHAR szName[MAX_PATH]; + if (!BrFolder_GetName(lpsf, pidlChild, SHGDN_NORMAL, szName)) + return NULL; + + BrItemData *pItemData = new BrItemData(); + + 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; + + PIDLIST_ABSOLUTE pidlFull = + (pidlParent ? ILCombine(pidlParent, pidlChild) : ILClone(pidlChild)); + BrFolder_GetIconPair(pidlFull, &item); + + 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); +} + +/****************************************************************************** + * 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 + * + * PARAMS + * info [I] data for the dialog + * 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 + * pEnum [I] An iterator for the children of the parent shell folder + */ +static void +BrFolder_Expand( + BrFolder *info, + IShellFolder *lpsf, + PCIDLIST_ABSOLUTE pidl, + HTREEITEM hParent, + IEnumIDList* pEnum) +{ + CComHeapPtr pidlTemp; + ULONG ulFetched; + HRESULT hr; + HWND hwnd = GetParent(info->hwndTreeView); + + TRACE("%p %p %p %p\n", lpsf, pidl, hParent, pEnum); + + // No IEnumIDList -> No children + if (!pEnum) + return; + + SetCapture(hwnd); + SetCursor(LoadCursorW(NULL, (LPWSTR)IDC_WAIT)); + + while (S_OK == pEnum->Next(1, &pidlTemp, &ulFetched)) + { + ULONG ulAttrs = SFGAO_HASSUBFOLDER | SFGAO_FOLDER; + 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 (!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())) + { + pEnumIL.Release(); + } + } + } + } + if (ulAttrs != (ulAttrs & SFGAO_FOLDER)) + { + if (!BrFolder_InsertItem(info, lpsf, pidlTemp, pidl, pEnumIL, hParent)) + goto done; + } + pidlTemp.Free(); // Finally, free the pidl that the shell gave us... + } + +done: + ReleaseCapture(); + SetCursor(LoadCursorW(NULL, (LPWSTR)IDC_ARROW)); +} + +static inline BOOL +PIDLIsType(LPCITEMIDLIST pidl, PIDLTYPE type) +{ + LPPIDLDATA data = _ILGetDataPointer(pidl); + if (!data) + return FALSE; + return (data->type == type); +} + +static void +BrFolder_CheckValidSelection(BrFolder *info, BrItemData *pItemData) +{ + LPBROWSEINFOW lpBrowseInfo = info->lpBrowseInfo; + PCIDLIST_RELATIVE pidlChild = pItemData->pidlChild; + DWORD dwAttributes; + HRESULT hr; + + BOOL bEnabled = TRUE; + if ((lpBrowseInfo->ulFlags & BIF_BROWSEFORCOMPUTER) && !PIDLIsType(pidlChild, PT_COMP)) + bEnabled = FALSE; + + if (lpBrowseInfo->ulFlags & BIF_RETURNFSANCESTORS) + { + 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; + 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) + 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 +BrFolder_Treeview_Delete(BrFolder *info, NMTREEVIEWW *pnmtv) +{ + BrItemData *pItemData = (BrItemData *)pnmtv->itemOld.lParam; + + TRACE("TVN_DELETEITEMA/W %p\n", pItemData); + + delete pItemData; + return 0; +} + +static LRESULT +BrFolder_Treeview_Expand(BrFolder *info, NMTREEVIEWW *pnmtv) +{ + BrItemData *pItemData = (BrItemData *)pnmtv->itemNew.lParam; + + TRACE("TVN_ITEMEXPANDINGA/W\n"); + + if ((pnmtv->itemNew.state & TVIS_EXPANDEDONCE)) + return 0; + + HRESULT hr = S_OK; + CComPtr lpsf2; + if (!_ILIsEmpty(pItemData->pidlChild)) + { + hr = pItemData->lpsfParent->BindToObject(pItemData->pidlChild, NULL, + IID_PPV_ARG(IShellFolder, &lpsf2)); + } + else + { + lpsf2.Attach(pItemData->lpsfParent); + } + + HTREEITEM hItem = pnmtv->itemNew.hItem; + if (!FAILED_UNEXPECTEDLY(hr)) + 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 + if (!_ILIsMyComputer(pItemData->pidlChild)) + TreeView_SortChildren(info->hwndTreeView, hItem, FALSE); + + return 0; +} + +static HRESULT +BrFolder_Treeview_Changed(BrFolder *info, NMTREEVIEWW *pnmtv) +{ + BrItemData *pItemData = (BrItemData *)pnmtv->itemNew.lParam; + + ILFree(info->pidlRet); + info->pidlRet = ILClone(pItemData->pidlFull); + + WCHAR szName[MAX_PATH]; + if (BrFolder_GetName(pItemData->lpsfParent, pItemData->pidlChild, SHGDN_NORMAL, szName)) + SetDlgItemTextW(info->hWnd, IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, szName); + + BrFolder_Callback(info->lpBrowseInfo, info->hWnd, BFFM_SELCHANGED, (LPARAM)info->pidlRet); + BrFolder_CheckValidSelection(info, pItemData); + return S_OK; +} + +static LRESULT +BrFolder_Treeview_Rename(BrFolder *info, NMTVDISPINFOW *pnmtv) +{ + WCHAR old_path[MAX_PATH], new_path[MAX_PATH]; + NMTREEVIEWW nmtv; + TVITEMW item; + + if (!pnmtv->item.pszText) + return 0; + + item.hItem = TreeView_GetSelection(info->hwndTreeView); + BrItemData *item_data = BrFolder_GetItemData(info, item.hItem); + + 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; + + 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->pidlChild, NULL); + + item.mask = TVIF_HANDLE | TVIF_TEXT; + item.pszText = pnmtv->item.pszText; + TreeView_SetItem(info->hwndTreeView, &item); + + nmtv.itemNew.lParam = item.lParam; + BrFolder_Treeview_Changed(info, &nmtv); + return 0; +} + +static HRESULT +BrFolder_Rename(BrFolder *info, HTREEITEM hItem) +{ + TreeView_SelectItem(info->hwndTreeView, hItem); + TreeView_EditLabel(info->hwndTreeView, hItem); + return S_OK; +} + +static void +BrFolder_Delete(BrFolder *info, HTREEITEM hItem) +{ + SHFILEOPSTRUCTW fileop = { info->hwndTreeView }; + WCHAR szzFrom[MAX_PATH + 1]; + + // Get item_data + BrItemData *item_data = BrFolder_GetItemData(info, hItem); + + // Get the path + if (!SHGetPathFromIDListW(item_data->pidlFull, szzFrom)) + { + ERR("SHGetPathFromIDListW failed\n"); + return; + } + szzFrom[lstrlenW(szzFrom) + 1] = UNICODE_NULL; // Double NULL-terminated + fileop.pFrom = szzFrom; + + // Delete folder + fileop.fFlags = FOF_ALLOWUNDO; + fileop.wFunc = FO_DELETE; + SHFileOperationW(&fileop); +} + +static LRESULT +BrFolder_Treeview_Keydown(BrFolder *info, LPNMTVKEYDOWN keydown) +{ + // Old dialog doesn't support those advanced features + if (!(info->lpBrowseInfo->ulFlags & BIF_USENEWUI)) + return 0; + + HTREEITEM hItem = TreeView_GetSelection(info->hwndTreeView); + + switch (keydown->wVKey) + { + case VK_F2: + BrFolder_Rename(info, hItem); + break; + case VK_DELETE: + BrFolder_Delete(info, hItem); + break; + } + return 0; +} + +static LRESULT +BrFolder_OnNotify(BrFolder *info, UINT CtlID, LPNMHDR lpnmh) +{ + NMTREEVIEWW *pnmtv = (NMTREEVIEWW *)lpnmh; + + TRACE("%p %x %p msg=%x\n", info, CtlID, lpnmh, pnmtv->hdr.code); + + if (pnmtv->hdr.idFrom != IDC_BROWSE_FOR_FOLDER_TREEVIEW) + return 0; + + switch (pnmtv->hdr.code) + { + case TVN_DELETEITEMA: + case TVN_DELETEITEMW: + return BrFolder_Treeview_Delete(info, pnmtv); + + case TVN_ITEMEXPANDINGA: + case TVN_ITEMEXPANDINGW: + return BrFolder_Treeview_Expand(info, pnmtv); + + case TVN_SELCHANGEDA: + case TVN_SELCHANGEDW: + return BrFolder_Treeview_Changed(info, pnmtv); + + case TVN_ENDLABELEDITA: + case TVN_ENDLABELEDITW: + return BrFolder_Treeview_Rename(info, (LPNMTVDISPINFOW)pnmtv); + + case TVN_KEYDOWN: + return BrFolder_Treeview_Keydown(info, (LPNMTVKEYDOWN)pnmtv); + + default: + WARN("unhandled (%d)\n", pnmtv->hdr.code); + break; + } + + return 0; +} + +static BOOL +BrFolder_OnInitDialog(HWND hWnd, BrFolder *info) +{ + CComHeapPtr pidlDesktop; + SHChangeNotifyEntry ntreg; + LPBROWSEINFOW lpBrowseInfo = info->lpBrowseInfo; + + info->hWnd = hWnd; + SetPropW(hWnd, L"__WINE_BRSFOLDERDLG_INFO", info); + + if (lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE) + FIXME("flags BIF_NEWDIALOGSTYLE partially implemented\n"); + + if (lpBrowseInfo->ulFlags & ~SUPPORTED_FLAGS) + FIXME("flags %x not implemented\n", (lpBrowseInfo->ulFlags & ~SUPPORTED_FLAGS)); + + if (lpBrowseInfo->ulFlags & BIF_USENEWUI) + { + RECT rcWnd; + + // Resize the treeview if there's not editbox + if ((lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE) && + !(lpBrowseInfo->ulFlags & BIF_EDITBOX)) + { + RECT rcEdit, rcTreeView; + GetWindowRect(GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT), &rcEdit); + GetWindowRect(GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_TREEVIEW), &rcTreeView); + 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), + rcTreeView.left, rcTreeView.top, + rcTreeView.right - rcTreeView.left, + rcTreeView.bottom - rcTreeView.top, TRUE); + } + + if (lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE) + info->layout = LayoutInit(hWnd, g_layout_info, _countof(g_layout_info)); + else + info->layout = NULL; + + // 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; + } + else + { + info->layout = NULL; + } + + if (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)) + 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 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); + } + + info->hwndTreeView = GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_TREEVIEW); + if (info->hwndTreeView) + BrFolder_InitTreeView(info); + else + ERR("treeview control missing!\n"); + + // Register for change notifications + SHGetFolderLocation(NULL, CSIDL_DESKTOP, NULL, 0, &pidlDesktop); + + ntreg.pidl = pidlDesktop; + ntreg.fRecursive = TRUE; + info->hChangeNotify = SHChangeNotifyRegister(hWnd, SHCNRF_InterruptLevel, SHCNE_ALLEVENTS, + SHV_CHANGE_NOTIFY, 1, &ntreg); + + SetFocus(info->hwndTreeView); + BrFolder_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 +BrFolder_NewFolder(BrFolder *info) +{ + DWORD flags = BrowseFlagsToSHCONTF(info->lpBrowseInfo->ulFlags); + CComPtr desktop, cur; + WCHAR wszNewFolder[25], path[MAX_PATH], name[MAX_PATH]; + + HRESULT hr = SHGetDesktopFolder(&desktop); + if (FAILED_UNEXPECTEDLY(hr)) + return hr; + + if (info->pidlRet) + { + hr = desktop->BindToObject(info->pidlRet, NULL, IID_PPV_ARG(IShellFolder, &cur)); + if (FAILED_UNEXPECTEDLY(hr)) + return hr; + + hr = SHGetPathFromIDListW(info->pidlRet, path); + } + else + { + cur.Attach(desktop); + hr = SHGetFolderPathW(NULL, CSIDL_DESKTOPDIRECTORY, NULL, SHGFP_TYPE_CURRENT, path); + } + + if (FAILED_UNEXPECTEDLY(hr)) + return hr; + + hr = E_FAIL; + if (!LoadStringW(shell32_hInstance, IDS_NEWFOLDER, wszNewFolder, _countof(wszNewFolder))) + return hr; + + if (!PathYetAnotherMakeUniqueName(name, path, NULL, wszNewFolder)) + return hr; + + INT len = lstrlenW(path); + if (len < MAX_PATH && name[len] == L'\\') + len++; + + if (!CreateDirectoryW(name, NULL)) + return hr; + + // Update parent of newly created directory + HTREEITEM hParent = TreeView_GetSelection(info->hwndTreeView); + if (!hParent) + return hr; + + TreeView_Expand(info->hwndTreeView, hParent, TVE_EXPAND); + + TVITEMW item = { TVIF_PARAM | TVIF_STATE }; + item.hItem = hParent; + TreeView_GetItem(info->hwndTreeView, &item); + BrItemData *item_data = (BrItemData *)item.lParam; + if (!item_data) + return hr; + + if (item_data->pEnumIL) + item_data->pEnumIL.Release(); + hr = cur->EnumObjects(info->hwndTreeView, flags, &item_data->pEnumIL); + if (FAILED_UNEXPECTEDLY(hr)) + return hr; + + // Update treeview + if (!(item.state & TVIS_EXPANDEDONCE)) + { + item.mask = TVIF_STATE; + item.state = item.stateMask = TVIS_EXPANDEDONCE; + TreeView_SetItem(info->hwndTreeView, &item); + } + + CComHeapPtr pidlNew; + hr = cur->ParseDisplayName(NULL, NULL, name + len, NULL, &pidlNew, NULL); + if (FAILED_UNEXPECTEDLY(hr)) + return hr; + + HTREEITEM hAdded = BrFolder_InsertItem(info, cur, pidlNew, item_data->pidlFull, NULL, hParent); + + TreeView_SortChildren(info->hwndTreeView, hParent, FALSE); + return BrFolder_Rename(info, hAdded); +} + +static void +BrFolder_OnCommand(BrFolder *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)) + { + // 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, IDOK); + break; + } + case IDCANCEL: + { + EndDialog(info->hWnd, IDCANCEL); + break; + } + case IDC_BROWSE_FOR_FOLDER_NEW_FOLDER: + { + BrFolder_NewFolder(info); + break; + } + } +} + +static BOOL +BrFolder_OnSetExpandedPidl(BrFolder *info, LPITEMIDLIST pidlSelection, HTREEITEM *phItem) +{ + if (_ILIsDesktop(pidlSelection)) + { + if (phItem) + *phItem = TVI_ROOT; + return TRUE; + } + + // Move pidlCurrent behind the SHITEMIDs in pidlSelection, which are the root of + // the sub-tree currently displayed. + PCIDLIST_ABSOLUTE pidlRoot = info->lpBrowseInfo->pidlRoot; + LPITEMIDLIST pidlCurrent = pidlSelection; + 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. + if (!_ILIsEmpty(pidlRoot)) + { + if (phItem) + *phItem = NULL; + return FALSE; + } + + // Initialize item to point to the first child of the root folder. + TVITEMEXW item = { 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)) + { + TreeView_GetItem(info->hwndTreeView, &item); + BrItemData *pItemData = (BrItemData *)item.lParam; + + if (_ILIsEqualSimple(pItemData->pidlChild, 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 + TreeView_Expand(info->hwndTreeView, item.hItem, TVE_EXPAND); + item.hItem = TreeView_GetChild(info->hwndTreeView, item.hItem); + } + } + else + { + item.hItem = TreeView_GetNextSibling(info->hwndTreeView, item.hItem); + } + } + + if (phItem) + *phItem = item.hItem; + + return (_ILIsEmpty(pidlCurrent) && item.hItem); +} + +static BOOL +BrFolder_OnSetExpandedString(BrFolder *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 BrFolder_OnSetExpandedPidl(info, pidlSelection, phItem); +} + +static BOOL +BrFolder_OnSetSelectionPidl(BrFolder *info, LPITEMIDLIST pidlSelection) +{ + if (!pidlSelection) + return FALSE; + + HTREEITEM hItem; + BOOL ret = BrFolder_OnSetExpandedPidl(info, pidlSelection, &hItem); + if (ret) + TreeView_SelectItem(info->hwndTreeView, hItem); + return ret; +} + +static BOOL +BrFolder_OnSetSelectionW(BrFolder *info, LPWSTR pszSelection) +{ + if (!pszSelection) + return FALSE; + + HTREEITEM hItem; + BOOL ret = BrFolder_OnSetExpandedString(info, pszSelection, &hItem); + if (ret) + TreeView_SelectItem(info->hwndTreeView, hItem); + return ret; +} + +static BOOL +BrFolder_OnSetSelectionA(BrFolder *info, LPSTR pszSelectionA) +{ + if (!pszSelectionA) + return FALSE; + + CComHeapPtr pszSelectionW; + __SHCloneStrAtoW(&pszSelectionW, pszSelectionA); + if (!pszSelectionW) + return FALSE; + + return BrFolder_OnSetSelectionW(info, pszSelectionW); +} + +static void +BrFolder_OnDestroy(BrFolder *info) +{ + if (info->layout) + { + LayoutDestroy(info->layout); + info->layout = NULL; + } + + SHChangeNotifyDeregister(info->hChangeNotify); +} + +// Find a treeview node by recursively walking the treeview +static HTREEITEM +BrFolder_FindItemByPidl(BrFolder *info, PCIDLIST_ABSOLUTE pidlFull, HTREEITEM 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)) + return hItem; + + for (hItem = TreeView_GetChild(info->hwndTreeView, hItem); hItem; + hItem = TreeView_GetNextSibling(info->hwndTreeView, hItem)) + { + HTREEITEM newItem = BrFolder_FindItemByPidl(info, pidlFull, hItem); + if (newItem) + return newItem; + } + + return NULL; +} + +static void +BrFolder_OnChange(BrFolder *info, const PCIDLIST_ABSOLUTE *pidls, LONG event) +{ + TRACE("(%p)->(%p, %p, 0x%08x)\n", info, pidls[0], pidls[1], event); + + switch (event) + { + case SHCNE_RMDIR: + case SHCNE_DELETE: + { + HTREEITEM hRoot = TreeView_GetRoot(info->hwndTreeView); + HTREEITEM hItem = BrFolder_FindItemByPidl(info, pidls[0], hRoot); + if (hItem) + TreeView_DeleteItem(info->hwndTreeView, hItem); + break; + } + } +} + +/************************************************************************* + * BrFolderDlgProc32 (not an exported API function) + */ +static INT_PTR CALLBACK +BrFolderDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + if (uMsg == WM_INITDIALOG) + return BrFolder_OnInitDialog(hWnd, (BrFolder *)lParam); + + BrFolder *info = (BrFolder *)GetPropW(hWnd, L"__WINE_BRSFOLDERDLG_INFO"); + if (!info) + return 0; + + switch (uMsg) + { + case WM_NOTIFY: + return BrFolder_OnNotify(info, (UINT)wParam, (LPNMHDR)lParam); + + case WM_COMMAND: + BrFolder_OnCommand(info, wParam); + break; + + case WM_GETMINMAXINFO: + ((LPMINMAXINFO)lParam)->ptMinTrackSize.x = info->szMin.cx; + ((LPMINMAXINFO)lParam)->ptMinTrackSize.y = info->szMin.cy; + break; + + case WM_SIZE: + if (info->layout) // New style dialogs + LayoutUpdate(hWnd, info->layout, g_layout_info, _countof(g_layout_info)); + break; + + case BFFM_SETSTATUSTEXTA: + SetDlgItemTextA(hWnd, IDC_BROWSE_FOR_FOLDER_STATUS, (LPSTR)lParam); + break; + + case BFFM_SETSTATUSTEXTW: + SetDlgItemTextW(hWnd, IDC_BROWSE_FOR_FOLDER_STATUS, (LPWSTR)lParam); + break; + + case BFFM_ENABLEOK: + EnableWindow(GetDlgItem(hWnd, IDOK), lParam != 0); + break; + + case BFFM_SETOKTEXT: // Unicode only + SetDlgItemTextW(hWnd, IDOK, (LPWSTR)lParam); + break; + + case BFFM_SETSELECTIONA: + if (wParam) // String + return BrFolder_OnSetSelectionA(info, (LPSTR)lParam); + else // PIDL + return BrFolder_OnSetSelectionPidl(info, (LPITEMIDLIST)lParam); + + case BFFM_SETSELECTIONW: + if (wParam) // String + return BrFolder_OnSetSelectionW(info, (LPWSTR)lParam); + else // PIDL + return BrFolder_OnSetSelectionPidl(info, (LPITEMIDLIST)lParam); + + case BFFM_SETEXPANDED: // Unicode only + if (wParam) // String + return BrFolder_OnSetExpandedString(info, (LPWSTR)lParam, NULL); + else // PIDL + return BrFolder_OnSetExpandedPidl(info, (LPITEMIDLIST)lParam, NULL); + + case SHV_CHANGE_NOTIFY: + BrFolder_OnChange(info, (const PCIDLIST_ABSOLUTE *)wParam, (LONG)lParam); + break; + + case WM_DESTROY: + BrFolder_OnDestroy(info); + break; + } + + return 0; +} + +/************************************************************************* + * SHBrowseForFolderA [SHELL32.@] + * SHBrowseForFolder [SHELL32.@] + */ +EXTERN_C +LPITEMIDLIST WINAPI +SHBrowseForFolderA(LPBROWSEINFOA lpbi) +{ + BROWSEINFOW bi; + bi.hwndOwner = lpbi->hwndOwner; + bi.pidlRoot = lpbi->pidlRoot; + + WCHAR szName[MAX_PATH]; + bi.pszDisplayName = (lpbi->pszDisplayName ? szName : NULL); + + CComHeapPtr pszTitle; + if (lpbi->lpszTitle) + __SHCloneStrAtoW(&pszTitle, lpbi->lpszTitle); + bi.lpszTitle = pszTitle; + + bi.ulFlags = lpbi->ulFlags; + bi.lpfn = lpbi->lpfn; + bi.lParam = lpbi->lParam; + bi.iImage = lpbi->iImage; + PIDLIST_ABSOLUTE pidl = SHBrowseForFolderW(&bi); + + if (bi.pszDisplayName) + SHUnicodeToAnsi(bi.pszDisplayName, lpbi->pszDisplayName, MAX_PATH); + + lpbi->iImage = bi.iImage; + return pidl; +} + +/************************************************************************* + * SHBrowseForFolderW [SHELL32.@] + */ +EXTERN_C +LPITEMIDLIST WINAPI +SHBrowseForFolderW(LPBROWSEINFOW lpbi) +{ + TRACE("%p\n", 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, + BrFolderDlgProc, (LPARAM)&info); + if (SUCCEEDED(hr)) + OleUninitialize(); + + if (ret != IDOK) + { + ILFree(info.pidlRet); + return NULL; + } + + return info.pidlRet; +} 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/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..b98e65f8508 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; @@ -1067,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/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..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) { @@ -1168,13 +1169,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; } @@ -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 f6546dc23bf..95a5030a2d3 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) { @@ -665,9 +683,10 @@ 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, - _Out_ WIN32_FIND_DATAW *pFind, + _Inout_ WIN32_FIND_DATAW *pFind, _Out_ LPITEMIDLIST *ppidl) { HRESULT hr; @@ -675,6 +694,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)) { @@ -682,9 +703,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) { @@ -1021,18 +1041,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 +1055,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 +1568,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 +1599,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 +1608,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 } } @@ -1861,13 +1888,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))); @@ -1875,7 +1900,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 @@ -1887,23 +1912,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/CFSFolder.h b/dll/win32/shell32/folders/CFSFolder.h index 8d29c4d3479..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); @@ -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..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 : @@ -510,13 +501,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/CRecycleBin.cpp b/dll/win32/shell32/folders/CRecycleBin.cpp index c8bceb589f4..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; @@ -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/folders/CRegFolder.cpp b/dll/win32/shell32/folders/CRegFolder.cpp index 57e0dc9aa3a..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; } @@ -233,14 +223,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 +284,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 +802,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 +818,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 +834,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/lang/bg-BG.rc b/dll/win32/shell32/lang/bg-BG.rc index 597063ccb3b..e76fb9ab2d4 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 @@ -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 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 f586e619e7f..73b99832371 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 @@ -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 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 eca4fc2a647..841f4ba5ef6 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 @@ -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 @@ -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 94830522891..e05b2e313ed 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 @@ -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 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 06e09641695..b4c8f9947db 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 @@ -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 @@ -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 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 cc0d36293f8..9c47de2d4be 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 @@ -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 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 "Επιλέξτε το πρόγραμμα με το οποίο θέλετε να ανοίξετε αυτό το αρχείο:", -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 diff --git a/dll/win32/shell32/lang/en-GB.rc b/dll/win32/shell32/lang/en-GB.rc index dea8f263285..31548b3fd1d 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 @@ -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 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 76a090334b5..926b09a91e7 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 @@ -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 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 ffdf9696fdd..069767577d6 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 @@ -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 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 d8de9abdb23..6c87009c81a 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 @@ -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 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 7b1eb38adbd..b5134e357d8 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 @@ -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 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 d03dad1e538..c85afb732c0 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 @@ -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 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 ac88d8d14a7..4ca31288190 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 @@ -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 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 @@ -1028,8 +1028,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 b30f989000a..89e102c8c92 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 @@ -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 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 c87581b3634..7ed57bca647 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 @@ -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 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 b1ea1ad061b..c0524c41905 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 @@ -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 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 f4ad96adc39..bf858b02676 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 @@ -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 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 Windivs", 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 38a75565069..affb20ea84d 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 @@ -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 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 55132a32441..2aef2edcedd 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 @@ -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 "キャンセル", 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 b3cadf8e407..70a1c0a4969 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 @@ -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 "취뚏", 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 2290f7f1c48..3e46d169a73 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 @@ -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 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 1dca02b8c2d..ae07c829a6f 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 @@ -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 "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 356942598d7..baf607d8123 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 @@ -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 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 254b26a9aa4..02d73fc5622 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 @@ -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 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 16bba819597..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 @@ -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 @@ -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 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END @@ -137,9 +137,9 @@ BEGIN LTEXT "", IDC_ABOUT_VERSION, 35, 65, 250, 10, SS_NOPREFIX LTEXT "Copyright 1996-", IDC_STATIC, 35, 75, 53, 10 LTEXT COPYRIGHT_YEAR, IDC_STATIC, 88, 75, 17, 10 - LTEXT " Windivs Team\0", IDC_STATIC, 105, 75, 53, 10 + LTEXT " ReactOS Team\0", IDC_STATIC, 105, 75, 53, 10 LTEXT "", IDC_ABOUT_OTHERSTUFF, 35, 90, 180, 20, SS_NOPREFIX - LTEXT "Esta versão do Windivs é registada a:", IDC_ABOUT_REG_TO, 35, 115, 180, 10 + LTEXT "Esta versão do ReactOS é registada a:", IDC_ABOUT_REG_TO, 35, 115, 180, 10 LTEXT "", IDC_ABOUT_REG_USERNAME, 45, 125, 180, 10, SS_NOPREFIX LTEXT "", IDC_ABOUT_REG_ORGNAME, 45, 135, 180, 10, SS_NOPREFIX LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ @@ -153,7 +153,7 @@ IDD_ABOUT_AUTHORS DIALOGEX 35, 90, 235, 85 STYLE DS_SHELLFONT | WS_CHILD FONT 8, "MS Shell Dlg" BEGIN - LTEXT "Windivs disponibilizado por:", IDC_STATIC, 0, 0, 180, 10 + LTEXT "ReactOS disponibilizado por:", IDC_STATIC, 0, 0, 180, 10 LISTBOX IDC_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 END @@ -163,7 +163,7 @@ CAPTION "Executar" FONT 8, "MS Shell Dlg" BEGIN ICON "", IDC_RUNDLG_ICON, 7, 11, 18, 20, WS_VISIBLE - LTEXT "Digite o nome do programa, pasta, documento, ou endereço Internet, e o Windivs abrí-lo-á.", 12289, 36, 11, 185, 18 + LTEXT "Digite o nome do programa, pasta, documento, ou endereço Internet, e o ReactOS abrí-lo-á.", 12289, 36, 11, 185, 18 LTEXT "&Abrir:", 12305, 7, 39, 24, 10 CONTROL "", IDC_RUNDLG_EDITPATH, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 184, 100 DEFPUSHBUTTON "OK", IDOK, 62, 70, 50, 14, WS_TABSTOP @@ -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 Windivs", IDC_FOLDER_OPTIONS_CLASSICFOLDERS, 40, 32, 210, 10 - GROUPBOX "Procurar pasta", -1, 7, 60, 259, 40, WS_TABSTOP + AUTORADIOBUTTON "Utilizar pastas class&icas ReactOS", IDC_FOLDER_OPTIONS_CLASSICFOLDERS, 40, 32, 210, 10 + 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 @@ -483,7 +483,7 @@ END IDD_LOG_OFF DIALOGEX 0, 0, 212, 60 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION -CAPTION "Terminar sessão Windivs" +CAPTION "Terminar sessão ReactOS" FONT 8, "MS Shell Dlg" BEGIN ICON IDI_SHELL_LOGOFF, IDC_STATIC, 8, 6, 21, 20 @@ -501,14 +501,14 @@ BEGIN PUSHBUTTON "&Mudar de utilizador", IDC_SWITCH_USER_BUTTON, 55, 46, 22, 20, BS_OWNERDRAW | WS_DISABLED | WS_GROUP PUSHBUTTON "&Terminar sessão", IDC_LOG_OFF_BUTTON, 132, 46, 22, 20, BS_OWNERDRAW PUSHBUTTON "Cancelar", IDCANCEL, 162, 103, 40, 12, WS_GROUP | BS_FLAT - LTEXT "Terminar sessão Windivs", IDC_LOG_OFF_TEXT_STATIC, 4, 7, 150, 19 + LTEXT "Terminar sessão ReactOS", IDC_LOG_OFF_TEXT_STATIC, 4, 7, 150, 19 CTEXT "Mudar de utilizador", IDC_SWITCH_USER_STATIC, 41, 70, 51, 11 CTEXT "Terminar sessão", IDC_LOG_OFF_STATIC, 116, 70, 55, 11 END IDD_DISCONNECT DIALOGEX 0, 0, 188, 60 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION -CAPTION "Encerrar Windivs" +CAPTION "Encerrar ReactOS" FONT 8, "MS Shell Dlg" BEGIN ICON IDI_SHELL_DISCONN, IDC_STATIC, 8, 6, 21, 20 @@ -538,7 +538,7 @@ FONT 8, "MS Shell Dlg" BEGIN ICON "", 1000, 5, 7, 21, 20 LTEXT "Este disco ou dispositivo contém mais de um tipo de conteúdo.", 1001, 32, 7, 191, 20 - LTEXT "O que pretende que o Windivs faça?", 1002, 32, 31, 188, 8 + LTEXT "O que pretende que o ReactOS faça?", 1002, 32, 31, 188, 8 CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 PUSHBUTTON "Cancelar", IDCANCEL, 160, 186, 60, 14 @@ -550,10 +550,10 @@ CAPTION "Conteúdo misto" FONT 8, "MS Shell Dlg" BEGIN ICON "", 1000, 5, 7, 21, 20 - LTEXT "O Windivs pode executar a mesma acção de cada vez que inserir um disco ou um dispositivo com este tipo de ficheiro:", 1001, 30, 7, 193, 20 + LTEXT "O ReactOS pode executar a mesma acção de cada vez que inserir um disco ou um dispositivo com este tipo de ficheiro:", 1001, 30, 7, 193, 20 ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP - LTEXT "O que pretende que o Windivs faça?", 1002, 32, 41, 190, 8 + LTEXT "O que pretende que o ReactOS faça?", 1002, 32, 41, 190, 8 CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 AUTOCHECKBOX "Executar sempre a acção seleccionada.", 1004, 32, 171, 190, 10 DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 @@ -566,8 +566,8 @@ CAPTION "Autoplay" FONT 8, "MS Shell Dlg" BEGIN ICON "", 1000, 5, 7, 21, 20 - LTEXT "O Windivs pode executar sempre a mesma acção de cada vez que inserir um disco ou um dispositivo.", 1001, 32, 7, 190, 22 - LTEXT "O que pretende que o Windivs faça?", 1002, 32, 31, 190, 8 + LTEXT "O ReactOS pode executar sempre a mesma acção de cada vez que inserir um disco ou um dispositivo.", 1001, 32, 7, 190, 22 + LTEXT "O que pretende que o ReactOS faça?", 1002, 32, 31, 190, 8 CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 AUTOCHECKBOX "&Executar sempre a acção seleccionada", 1004, 32, 143, 190, 8 DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 @@ -576,11 +576,11 @@ END IDD_SHUTDOWN DIALOGEX 0, 0, 211, 103 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION -CAPTION "Encerrar Windivs" +CAPTION "Encerrar ReactOS" FONT 8, "MS Shell Dlg" BEGIN ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP - LTEXT "O que pretende que o Windivs faça?", -1, 39, 7, 167, 10 + LTEXT "O que pretende que o ReactOS faça?", -1, 39, 7, 167, 10 COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL LTEXT "Manter a sessão, deixando o computador a correr em baixa energia. O computador arranca quando tocar numa tecla ou mover o rato.", 8225, 39, 40, 167, 37 DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP @@ -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 @@ -835,9 +835,9 @@ BEGIN /* message box strings */ IDS_RESTART_TITLE "Reiniciar" - IDS_RESTART_PROMPT "Deseja simular a reinicialização do Windivs?" + IDS_RESTART_PROMPT "Deseja simular a reinicialização do ReactOS?" IDS_SHUTDOWN_TITLE "Desligar" - IDS_SHUTDOWN_PROMPT "Deseja finalizar esta sessão do Windivs?" + IDS_SHUTDOWN_PROMPT "Deseja finalizar esta sessão do ReactOS?" /* Format Dialog Strings */ IDS_FORMAT_TITLE "Formatar disco" @@ -846,7 +846,7 @@ BEGIN /* Warning format system drive dialog strings */ IDS_NO_FORMAT_TITLE "Impossivel formatar este volume" - IDS_NO_FORMAT "Este volume não pode ser formatado! Ele comtém ficheiros de sistem importantes para o funcionamento do Windivs." + IDS_NO_FORMAT "Este volume não pode ser formatado! Ele comtém ficheiros de sistem importantes para o funcionamento do ReactOS." /* Run File dialog */ IDS_RUNDLG_ERROR "Não é possível abrir a caixa de diálogo ""Executar"" (erro interno)" IDS_RUNDLG_BROWSE_ERROR "Não é possível abrir a caixa de diálogo ""Procurar ficheiro"" (erro interno)" @@ -926,8 +926,8 @@ BEGIN /* Friendly File Type Names */ IDS_DIRECTORY "Pasta" - IDS_BAT_FILE "Ficheiro em lote do Windivs" - IDS_CMD_FILE "Script de Comando do Windivs" + IDS_BAT_FILE "Ficheiro em lote do ReactOS" + IDS_CMD_FILE "Script de Comando do ReactOS" IDS_COM_FILE "Aplicação DOS" IDS_CPL_FILE "Item do Painel de Controle" IDS_CUR_FILE "Cursor" @@ -969,7 +969,7 @@ BEGIN IDS_DEFAULT_CLUSTER_SIZE "Tamanho da unidade de atribuição" IDS_COPY_OF "Cópia de" - IDS_SHLEXEC_NOASSOC "Não existe um programa Windivs configurado para abrir este tipo de ficheiro." + IDS_SHLEXEC_NOASSOC "Não existe um programa ReactOS configurado para abrir este tipo de ficheiro." IDS_FILE_DETAILS "Detalhes para a extensão '%s'" IDS_FILE_DETAILSADV "Ficheiros com extensão '%s' são do tipo '%s'. Para alterar as definições que afectam todos os ficheiros '%s', clique em Avançado." @@ -1052,7 +1052,7 @@ BEGIN IDS_SYSTEMFOLDER "Pasta de sistema" /* For IDD_LOG_OFF_FANCY */ - IDS_LOG_OFF_DESC "Feche todos os programas e termine a sua sessão Windivs" + IDS_LOG_OFF_DESC "Feche todos os programas e termine a sua sessão ReactOS" IDS_SWITCH_USER_DESC "Permite que outro utilizador inicie sessão enquanto seus programas e ficheiros permanecem abertos.\r\n\r\n(Também pode mudar de utilizador, pressionando a tecla do logotipo do Windows + L.)" IDS_LOG_OFF_TITLE "Terminar a sessão" IDS_SWITCH_USER_TITLE "Mudar de utilizador" diff --git a/dll/win32/shell32/lang/ro-RO.rc b/dll/win32/shell32/lang/ro-RO.rc index 87774b632d0..8d4ead4b17d 100644 --- a/dll/win32/shell32/lang/ro-RO.rc +++ b/dll/win32/shell32/lang/ro-RO.rc @@ -1,5 +1,5 @@ /* - * PROJECT: Windivs Shell32 + * PROJECT: ReactOS Shell32 * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) * PURPOSE: Romanian resource file * TRANSLATORS: Copyright 2011-2019 Ștefan Fulea @@ -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 @@ -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 ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END @@ -145,7 +145,7 @@ BEGIN LTEXT "", IDC_ABOUT_VERSION, 35, 65, 250, 10, SS_NOPREFIX LTEXT "Drept de autor 1996-", IDC_STATIC, 35, 75, 68, 10 LTEXT COPYRIGHT_YEAR, IDC_STATIC, 103, 75, 17, 10 - LTEXT " Echipa Windivs\0", IDC_STATIC, 120, 75, 53, 10 + LTEXT " Echipa ReactOS\0", IDC_STATIC, 120, 75, 53, 10 LTEXT "", IDC_ABOUT_OTHERSTUFF, 35, 90, 180, 20, SS_NOPREFIX LTEXT "Această versiune ReactOS este înregistrată pentru:", IDC_ABOUT_REG_TO, 35, 115, 180, 10 LTEXT "", IDC_ABOUT_REG_USERNAME, 45, 125, 180, 10, SS_NOPREFIX @@ -161,7 +161,7 @@ IDD_ABOUT_AUTHORS DIALOGEX 35, 90, 235, 85 STYLE DS_SHELLFONT | WS_CHILD FONT 8, "MS Shell Dlg" BEGIN - LTEXT "Windivs vă este oferit de:", IDC_STATIC, 0, 0, 180, 10 + LTEXT "ReactOS vă este oferit de:", IDC_STATIC, 0, 0, 180, 10 LISTBOX IDC_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 END @@ -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,14 +577,14 @@ 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 IDD_SHUTDOWN DIALOGEX 0, 0, 211, 103 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION -CAPTION "Închidere Windivs" +CAPTION "Închidere ReactOS" FONT 8, "MS Shell Dlg" BEGIN ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP @@ -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 Windivs" - IDS_CMD_FILE "Script de comenzi Windivs" + 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." diff --git a/dll/win32/shell32/lang/ru-RU.rc b/dll/win32/shell32/lang/ru-RU.rc index 0f49c4a0062..430f1fe1a93 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 @@ -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 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 3e2686cab73..00da7d935d5 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 @@ -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 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 10d6bc94df0..c59a8cb21b5 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 @@ -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 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 a12e994bd1d..1916c3e9bd7 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 @@ -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 //FIXME: accelerator missing + PUSHBUTTON "&Jo", IDNO, 162, 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 dfc12142ed6..d4cb3af17d2 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 @@ -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 @@ -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 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 f83992b5b42..3436c3da03d 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 @@ -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 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 4b34acb5192..f118fcf4ba7 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 @@ -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 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 5998cc251fe..2a0c6b240f8 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 @@ -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 "取消", 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 ecf0ab2575c..722bbd1ffde 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 @@ -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 "取消", 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 ca34d79b367..a094e2863d0 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 @@ -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 "取消", 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/precomp.h b/dll/win32/shell32/precomp.h index e2666561515..f1444995261 100644 --- a/dll/win32/shell32/precomp.h +++ b/dll/win32/shell32/precomp.h @@ -97,6 +97,7 @@ #include "CNewMenu.h" #include "CSendToMenu.h" #include "CCopyMoveToMenu.h" +#include "CCopyAsPathMenu.h" #include "dialogs/filedefext.h" #include "dialogs/drvdefext.h" #include "CQueryAssociations.h" @@ -140,8 +141,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. @@ -178,6 +182,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/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}' } } } 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); }; 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 */ 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) diff --git a/dll/win32/shell32/shlexec.cpp b/dll/win32/shell32/shlexec.cpp index d71ff394849..23d0ab52df8 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,60 @@ 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; + + if (sei->cbSize != sizeof(SHELLEXECUTEINFOW)) + { + sei->hInstApp = (HINSTANCE)UlongToHandle(SE_ERR_ACCESSDENIED); + SetLastError(ERROR_ACCESS_DENIED); + return FALSE; + } + + hrCoInit = SHCoInitializeAnyApartment(); + + 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; } /************************************************************************* 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/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; +} 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/brsfolder.c b/dll/win32/shell32/wine/brsfolder.c deleted file mode 100644 index 03a99ae8c3a..00000000000 --- a/dll/win32/shell32/wine/brsfolder.c +++ /dev/null @@ -1,1465 +0,0 @@ -/* - * 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 - * - * FIXME: - * - many memory leaks - * - many flags unimplemented - * - implement editbox - */ - -#define WIN32_NO_STATUS -#define _INC_WINDOWS -#define COBJMACROS -#define NONAMELESSUNION -#define NONAMELESSSTRUCT - -#include -#include -#include -#include -#include -#include -#include - -#include "pidl.h" -#include "shell32_main.h" -#include "shresdef.h" - -#ifdef __REACTOS__ - #include - #include "ui/layout.h" /* Resizable window */ -#endif - -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; - 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 */ -} 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} -}; - -#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*); -static HTREEITEM InsertTreeViewItem( browse_info*, IShellFolder *, - LPCITEMIDLIST, LPCITEMIDLIST, IEnumIDList*, HTREEITEM); - -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 ) -{ - if (!lpBrowseInfo->lpfn) - return; - 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) -{ - 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); - } -} -#endif - - -/****************************************************************************** - * 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 ) -{ - 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 ); - - Shell_GetImageLists(NULL, &hImageList); - - if (hImageList) - SendMessageW( info->hwndTreeView, TVM_SETIMAGELIST, 0, (LPARAM)hImageList ); - - /* We want to call InsertTreeViewItem down the code, in order to insert - * 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 - * (containing a single SHITEMID). - * + An IShellFolder interface pointer of root's parent folder. - * - * If root is 'Desktop', then root's parent is also 'Desktop'. - */ - - pidlParent = ILClone(root); - ILRemoveLastID(pidlParent); - pidlChild = ILClone(ILFindLastID(root)); - - if (_ILIsDesktop(pidlParent)) { - hr = SHGetDesktopFolder(&lpsfParent); - } else { - IShellFolder *lpsfDesktop; - hr = SHGetDesktopFolder(&lpsfDesktop); - if (FAILED(hr)) { - WARN("SHGetDesktopFolder failed! hr = %08x\n", hr); - ILFree(pidlChild); - ILFree(pidlParent); - return; - } - hr = IShellFolder_BindToObject(lpsfDesktop, pidlParent, 0, &IID_IShellFolder, (LPVOID*)&lpsfParent); - IShellFolder_Release(lpsfDesktop); - } - - if (FAILED(hr)) { - WARN("Could not bind to parent shell folder! hr = %08x\n", hr); - ILFree(pidlChild); - ILFree(pidlParent); - return; - } - - if (!_ILIsEmpty(pidlChild)) { - hr = IShellFolder_BindToObject(lpsfParent, pidlChild, 0, &IID_IShellFolder, (LPVOID*)&lpsfRoot); - } else { - lpsfRoot = lpsfParent; - hr = IShellFolder_AddRef(lpsfParent); - } - - if (FAILED(hr)) { - WARN("Could not bind to root shell folder! hr = %08x\n", hr); - IShellFolder_Release(lpsfParent); - ILFree(pidlChild); - ILFree(pidlParent); - return; - } - - flags = BrowseFlagsToSHCONTF( info->lpBrowseInfo->ulFlags ); - hr = IShellFolder_EnumObjects( lpsfRoot, info->hWnd, flags, &pEnumChildren ); - if (FAILED(hr)) { - WARN("Could not get child iterator! hr = %08x\n", hr); - IShellFolder_Release(lpsfParent); - IShellFolder_Release(lpsfRoot); - ILFree(pidlChild); - ILFree(pidlParent); - return; - } - - SendMessageW( info->hwndTreeView, TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT ); - item = InsertTreeViewItem( info, lpsfParent, pidlChild, - pidlParent, pEnumChildren, TVI_ROOT ); - SendMessageW( info->hwndTreeView, TVM_EXPAND, TVE_EXPAND, (LPARAM)item ); - - ILFree(pidlChild); - ILFree(pidlParent); - IShellFolder_Release(lpsfRoot); - IShellFolder_Release(lpsfParent); -} - -static int GetIcon(LPCITEMIDLIST lpi, UINT uFlags) -{ - SHFILEINFOW sfi; - SHGetFileInfoW((LPCWSTR)lpi, 0 ,&sfi, sizeof(SHFILEINFOW), uFlags); - return sfi.iIcon; -} - -static void GetNormalAndSelectedIcons(LPITEMIDLIST lpifq, LPTVITEMW lpTV_ITEM) -{ - LPITEMIDLIST pidlDesktop = NULL; - DWORD flags; - - TRACE("%p %p\n",lpifq, lpTV_ITEM); - - if (!lpifq) - { - pidlDesktop = _ILCreateDesktop(); - lpifq = pidlDesktop; - } - - flags = SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON; - lpTV_ITEM->iImage = GetIcon( lpifq, flags ); - - flags = SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_OPENICON; - lpTV_ITEM->iSelectedImage = GetIcon( lpifq, flags ); - - if (pidlDesktop) - ILFree( pidlDesktop ); -} - -/****************************************************************************** - * 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 - * dwFlags [I] as in IShellFolder::GetDisplayNameOf - * lpFriendlyName [O] The desired display name in unicode - * - * RETURNS - * Success: TRUE - * Failure: FALSE - */ -static BOOL GetName(LPSHELLFOLDER lpsf, LPCITEMIDLIST lpi, DWORD dwFlags, LPWSTR lpFriendlyName) -{ - BOOL bSuccess=TRUE; - STRRET str; - - TRACE("%p %p %x %p\n", lpsf, lpi, dwFlags, lpFriendlyName); - if (SUCCEEDED(IShellFolder_GetDisplayNameOf(lpsf, lpi, dwFlags, &str))) - bSuccess = StrRetToStrNW(lpFriendlyName, MAX_PATH, &str, lpi); - else - bSuccess = FALSE; - - TRACE("-- %s\n", debugstr_w(lpFriendlyName)); - return bSuccess; -} - -/****************************************************************************** - * InsertTreeViewItem [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 - * 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 - * - * RETURNS - * 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, - HTREEITEM hParent) -{ - TVITEMW tvi; - TVINSERTSTRUCTW tvins; - WCHAR szBuff[MAX_PATH]; - LPTV_ITEMDATA lptvid=0; - - 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)) - return NULL; - - lptvid = SHAlloc( sizeof(TV_ITEMDATA) ); - if (!lptvid) - return NULL; - - tvi.pszText = szBuff; - tvi.cchTextMax = MAX_PATH; - tvi.lParam = (LPARAM)lptvid; - - IShellFolder_AddRef(lpsf); - 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.hInsertAfter = NULL; - tvins.hParent = hParent; - - return TreeView_InsertItem( info->hwndTreeView, &tvins ); -} - -/****************************************************************************** - * FillTreeView [Internal] - * - * 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 - * info [I] data for the dialog - * 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 - */ -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 == IEnumIDList_Next(lpe,1,&pidlTemp,&ulFetched)) - { - ULONG ulAttrs = SFGAO_HASSUBFOLDER | SFGAO_FOLDER; - IEnumIDList* pEnumIL = NULL; - IShellFolder* pSFChild = NULL; - IShellFolder_GetAttributesOf(lpsf, 1, (LPCITEMIDLIST*)&pidlTemp, &ulAttrs); - if (ulAttrs & SFGAO_FOLDER) - { - hr = IShellFolder_BindToObject(lpsf,pidlTemp,NULL,&IID_IShellFolder,(LPVOID*)&pSFChild); - if (SUCCEEDED(hr)) - { - DWORD flags = BrowseFlagsToSHCONTF(info->lpBrowseInfo->ulFlags); - hr = IShellFolder_EnumObjects(pSFChild, hwnd, flags, &pEnumIL); - if (hr == S_OK) - { - if ((IEnumIDList_Skip(pEnumIL, 1) != S_OK) || - FAILED(IEnumIDList_Reset(pEnumIL))) - { - IEnumIDList_Release(pEnumIL); - pEnumIL = NULL; - } - } - 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; - } - -done: - ReleaseCapture(); - SetCursor(LoadCursorW(0, (LPWSTR)IDC_ARROW)); - SHFree(pidlTemp); -} - -static inline BOOL PIDLIsType(LPCITEMIDLIST pidl, PIDLTYPE type) -{ - LPPIDLDATA data = _ILGetDataPointer(pidl); - if (!data) - return FALSE; - return (data->type == type); -} - -static void BrsFolder_CheckValidSelection( browse_info *info, LPTV_ITEMDATA lptvid ) -{ - LPBROWSEINFOW lpBrowseInfo = info->lpBrowseInfo; - LPCITEMIDLIST pidl = lptvid->lpi; - BOOL bEnabled = TRUE; - DWORD dwAttributes; - HRESULT r; - - if ((lpBrowseInfo->ulFlags & BIF_BROWSEFORCOMPUTER) && - !PIDLIsType(pidl, PT_COMP)) - bEnabled = FALSE; - if (lpBrowseInfo->ulFlags & BIF_RETURNFSANCESTORS) - { - dwAttributes = SFGAO_FILESYSANCESTOR | SFGAO_FILESYSTEM; - r = IShellFolder_GetAttributesOf(lptvid->lpsfParent, 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); - if (FAILED(r) || - ((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 ) -{ - LPTV_ITEMDATA lptvid = (LPTV_ITEMDATA)pnmtv->itemOld.lParam; - - TRACE("TVN_DELETEITEMA/W %p\n", lptvid); - - IShellFolder_Release(lptvid->lpsfParent); - if (lptvid->pEnumIL) - IEnumIDList_Release(lptvid->pEnumIL); - SHFree(lptvid->lpi); - SHFree(lptvid->lpifq); - SHFree(lptvid); - return 0; -} - -static LRESULT BrsFolder_Treeview_Expand( browse_info *info, NMTREEVIEWW *pnmtv ) -{ - IShellFolder *lpsf2 = NULL; - LPTV_ITEMDATA lptvid = (LPTV_ITEMDATA) pnmtv->itemNew.lParam; - HRESULT r; - - TRACE("TVN_ITEMEXPANDINGA/W\n"); - - if ((pnmtv->itemNew.state & TVIS_EXPANDEDONCE)) - return 0; - - if (!_ILIsEmpty(lptvid->lpi)) { - r = IShellFolder_BindToObject( lptvid->lpsfParent, lptvid->lpi, 0, - &IID_IShellFolder, (void**)&lpsf2 ); - } else { - lpsf2 = lptvid->lpsfParent; - IShellFolder_AddRef(lpsf2); - r = S_OK; - } - - if (SUCCEEDED(r)) - { - FillTreeView( info, lpsf2, lptvid->lpifq, pnmtv->itemNew.hItem, lptvid->pEnumIL); - IShellFolder_Release( lpsf2 ); - } - - /* 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 ); - - return 0; -} - -static HRESULT BrsFolder_Treeview_Changed( browse_info *info, NMTREEVIEWW *pnmtv ) -{ - LPTV_ITEMDATA lptvid = (LPTV_ITEMDATA) pnmtv->itemNew.lParam; - WCHAR name[MAX_PATH]; - - ILFree(info->pidlRet); - 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 ); - - 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) -{ - LPTV_ITEMDATA item_data; - WCHAR old_path[MAX_PATH], new_path[MAX_PATH], *p; - NMTREEVIEWW nmtv; - TVITEMW item; - - 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; - - 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); - - if(!MoveFileW(old_path, new_path)) - return 0; - - SHFree(item_data->lpifq); - SHFree(item_data->lpi); - item_data->lpifq = SHSimpleIDListFromPathW(new_path); - IShellFolder_ParseDisplayName(item_data->lpsfParent, NULL, NULL, - pnmtv->item.pszText, NULL, &item_data->lpi, NULL); - - item.mask = TVIF_HANDLE|TVIF_TEXT; - item.pszText = pnmtv->item.pszText; - SendMessageW(info->hwndTreeView, TVM_SETITEMW, 0, (LPARAM)&item); - - nmtv.itemNew.lParam = item.lParam; - BrsFolder_Treeview_Changed(info, &nmtv); - return 0; -} - -static HRESULT BrsFolder_Rename(browse_info *info, HTREEITEM rename) -{ - SendMessageW(info->hwndTreeView, TVM_SELECTITEM, TVGN_CARET, (LPARAM)rename); - SendMessageW(info->hwndTreeView, TVM_EDITLABELW, 0, (LPARAM)rename); - 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; - - /* get the path */ - if (!SHGetPathFromIDListW(item_data->lpifq, szzFrom)) - { - ERR("SHGetPathFromIDListW failed\n"); - return; - } - szzFrom[lstrlenW(szzFrom) + 1] = 0; /* double NULL-terminated */ - fileop.pFrom = szzFrom; - - /* delete folder */ - fileop.fFlags = FOF_ALLOWUNDO; - 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); - - switch (keydown->wVKey) - { - case VK_F2: - 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 - } - break; - } - return 0; -} - -static LRESULT BrsFolder_OnNotify( browse_info *info, UINT CtlID, LPNMHDR lpnmh ) -{ - NMTREEVIEWW *pnmtv = (NMTREEVIEWW *)lpnmh; - - TRACE("%p %x %p msg=%x\n", info, CtlID, lpnmh, pnmtv->hdr.code); - - if (pnmtv->hdr.idFrom != IDC_BROWSE_FOR_FOLDER_TREEVIEW) - return 0; - - 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; - } - - return 0; -} - - -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 ); - - 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); - -#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)) - { - 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; - MapWindowPoints(NULL, hWnd, (LPPOINT)&rcTreeView, sizeof(RECT) / sizeof(POINT)); - rcTreeView.top -= cy; - MoveWindow(GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_TREEVIEW), - rcTreeView.left, rcTreeView.top, - 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; -#else - info->layout = LayoutInit(hWnd, g_layout_info, LAYOUT_INFO_COUNT); -#endif - - /* 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; - } - else - { - info->layout = NULL; - } - - if (lpBrowseInfo->lpszTitle) - SetWindowTextW( GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_TITLE), lpBrowseInfo->lpszTitle ); - else - 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? */ - if ((lpBrowseInfo->ulFlags & BIF_NONEWFOLDERBUTTON) - || !(lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE)) - ShowWindow( GetDlgItem(hWnd, IDC_BROWSE_FOR_FOLDER_NEW_FOLDER), SW_HIDE ); - - /* 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 ); - } - - info->hwndTreeView = GetDlgItem( hWnd, IDC_BROWSE_FOR_FOLDER_TREEVIEW ); - 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"); - - /* Register for change notifications */ - SHGetFolderLocation(NULL, CSIDL_DESKTOP, NULL, 0, &computer_pidl); - - ntreg.pidl = computer_pidl; - ntreg.fRecursive = TRUE; - - 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; - LPTV_ITEMDATA item_data; - LPITEMIDLIST new_item; - TVITEMW item; - HRESULT hr; - int len; - -#ifdef __REACTOS__ - hr = SHGetDesktopFolder(&desktop); - if(FAILED(hr)) - return hr; - - if (info->pidlRet) - { - hr = IShellFolder_BindToObject(desktop, info->pidlRet, 0, &IID_IShellFolder, (void**)&cur); - IShellFolder_Release(desktop); - if(FAILED(hr)) - return hr; - - hr = SHGetPathFromIDListW(info->pidlRet, path); - } - else - { - cur = desktop; - hr = SHGetFolderPathW(NULL, CSIDL_DESKTOPDIRECTORY, NULL, SHGFP_TYPE_CURRENT, path); - } - if(FAILED(hr)) - return hr; - - if (!LoadStringW(shell32_hInstance, IDS_NEWFOLDER, wszNewFolder, _countof(wszNewFolder))) - return E_FAIL; - - if (!PathYetAnotherMakeUniqueName(name, path, NULL, wszNewFolder)) - return E_FAIL; - - 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) - goto cleanup; - - SendMessageW(info->hwndTreeView, TVM_EXPAND, TVE_EXPAND, (LPARAM)parent); - - memset(&item, 0, sizeof(TVITEMW)); - item.mask = TVIF_PARAM|TVIF_STATE; - item.hItem = parent; - SendMessageW(info->hwndTreeView, TVM_GETITEMW, 0, (LPARAM)&item); - item_data = (LPTV_ITEMDATA)item.lParam; - if(!item_data) - goto cleanup; - - if(item_data->pEnumIL) - IEnumIDList_Release(item_data->pEnumIL); - hr = IShellFolder_EnumObjects(cur, info->hwndTreeView, flags, &item_data->pEnumIL); - if(FAILED(hr)) - goto cleanup; - - /* Update treeview */ - if(!(item.state&TVIS_EXPANDEDONCE)) { - item.mask = TVIF_STATE; - item.state = TVIS_EXPANDEDONCE; - item.stateMask = TVIS_EXPANDEDONCE; - SendMessageW(info->hwndTreeView, TVM_SETITEMW, 0, (LPARAM)&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); - IShellFolder_Release(cur); - SHFree(new_item); - - SendMessageW(info->hwndTreeView, TVM_SORTCHILDREN, FALSE, (LPARAM)parent); - return BrsFolder_Rename(info, added); - -cleanup: - return hr; -} - -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"); - - /* 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); - } -#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; - if (SHGetFileInfoW((LPCWSTR)info->pidlRet, 0, &fileInfo, sizeof(fileInfo), - SHGFI_PIDL | SHGFI_DISPLAYNAME)) - { - lstrcpynW(lpBrowseInfo->pszDisplayName, fileInfo.szDisplayName, MAX_PATH); - } - } -#else - SHGetPathFromIDListW( info->pidlRet, lpBrowseInfo->pszDisplayName ); -#endif - 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) -{ - LPITEMIDLIST pidlSelection = 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 = IShellFolder_ParseDisplayName(psfDesktop, NULL, NULL, - selection, NULL, &pidlSelection, NULL); - IShellFolder_Release(psfDesktop); - 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. */ - pidlRoot = info->lpBrowseInfo->pidlRoot; - pidlCurrent = pidlSelection; - 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. */ - if (!_ILIsEmpty(pidlRoot)) - goto done; - - /* 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); - - if (item.hItem) - item.hItem = (HTREEITEM)SendMessageW(info->hwndTreeView, TVM_GETNEXTITEM, TVGN_CHILD, - (LPARAM)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); - pItemData = (LPTV_ITEMDATA)item.lParam; - - 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 */ - SendMessageW(info->hwndTreeView, TVM_EXPAND, TVE_EXPAND, (LPARAM)item.hItem); - item.hItem = (HTREEITEM)SendMessageW(info->hwndTreeView, TVM_GETNEXTITEM, TVGN_CHILD, - (LPARAM)item.hItem); - } - } else { - item.hItem = (HTREEITEM)SendMessageW(info->hwndTreeView, TVM_GETNEXTITEM, TVGN_NEXT, - (LPARAM)item.hItem); - } - } - - if (_ILIsEmpty(pidlCurrent) && item.hItem) - bResult = TRUE; - -done: - if (pidlSelection && pidlSelection != selection) - ILFree(pidlSelection); - - if (pItem) - *pItem = item.hItem; - - return bResult; -} - -static BOOL BrsFolder_OnSetSelectionW(browse_info *info, LPVOID selection, BOOL is_str) { - HTREEITEM hItem; - BOOL bResult; - - if (!selection) return FALSE; - - bResult = BrsFolder_OnSetExpanded(info, selection, is_str, &hItem); - if (bResult) - SendMessageW(info->hwndTreeView, TVM_SELECTITEM, TVGN_CARET, (LPARAM)hItem ); - return bResult; -} - -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); - - 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)) - { - result = BrsFolder_OnSetSelectionW(info, selectionW, is_str); - } - - HeapFree(GetProcessHeap(), 0, selectionW); - 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; - } - - SHChangeNotifyDeregister(info->hNotify); - - return 0; -} - -/* 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; - - 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); - - while (hItem) - { - HTREEITEM newItem = BrsFolder_FindItemByPidl(info, pidl, hItem); - if (newItem) - return newItem; - hItem = (HTREEITEM)SendMessageW(info->hwndTreeView, TVM_GETNEXTITEM, TVGN_NEXT, (LPARAM)hItem); - } - return NULL; -} - -static LRESULT BrsFolder_OnChange(browse_info *info, const LPCITEMIDLIST *pidls, LONG event) -{ - BOOL ret = TRUE; - - TRACE("(%p)->(%p, %p, 0x%08x)\n", info, pidls[0], pidls[1], event); - - switch (event) - { - 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); - - break; - } - } - return ret; -} - -/************************************************************************* - * BrsFolderDlgProc32 (not an exported API function) - */ -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 ); - - if (msg == WM_INITDIALOG) - return BrsFolder_OnCreate( hWnd, (browse_info*) lParam ); - - info = GetPropW( hWnd, L"__WINE_BRSFOLDERDLG_INFO" ); - - switch (msg) - { - case WM_NOTIFY: - return BrsFolder_OnNotify( info, (UINT)wParam, (LPNMHDR)lParam); - - 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 */ - 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_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_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_SETSELECTIONW: - return BrsFolder_OnSetSelectionW(info, (LPVOID)lParam, (BOOL)wParam); - - 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 WM_DESTROY: - return BrsFolder_OnDestroy(info); - } - return FALSE; -} - -/************************************************************************* - * SHBrowseForFolderA [SHELL32.@] - * SHBrowseForFolder [SHELL32.@] - */ -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 = 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) ); - MultiByteToWideChar( CP_ACP, 0, lpbi->lpszTitle, -1, title, len ); - } - else - title = NULL; - - bi.lpszTitle = title; - bi.ulFlags = lpbi->ulFlags; - bi.lpfn = lpbi->lpfn; - bi.lParam = lpbi->lParam; - bi.iImage = lpbi->iImage; - lpid = 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); - lpbi->iImage = bi.iImage; - return lpid; -} - - -/************************************************************************* - * SHBrowseForFolderW [SHELL32.@] - * - * NOTES - * crashes when passed a null pointer - */ -LPITEMIDLIST WINAPI SHBrowseForFolderW (LPBROWSEINFOW lpbi) -{ - browse_info info; - DWORD r; - HRESULT hr; -#ifdef __REACTOS__ - WORD wDlgId; -#else - const WCHAR * templateName; - INITCOMMONCONTROLSEX icex; -#endif - - info.hWnd = 0; - 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)) - OleUninitialize(); - if (!r) - { - ILFree(info.pidlRet); - return NULL; - } - - return info.pidlRet; -} 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/shell32/wine/pidl.c b/dll/win32/shell32/wine/pidl.c index 824af18984a..7bec293d3d0 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; } @@ -1693,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"); @@ -1708,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]; diff --git a/dll/win32/shimgvw/lang/ro-RO.rc b/dll/win32/shimgvw/lang/ro-RO.rc index 09b0b8ecf1f..99f6e381985 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 diff --git a/dll/win32/shlwapi/shlwapi.spec b/dll/win32/shlwapi/shlwapi.spec index 53e67a7800e..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) @@ -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) @@ -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 a27bcd90f94..a452b3f7253 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); @@ -77,3 +95,180 @@ 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; +} + +static inline BOOL +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_ SHGDNF uFlags, + _Out_ LPSTRRET lpName, + _In_ DWORD dwRetryFlags) // dwRetryFlags is an additional parameter +{ + 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 |= SFGDNO_RETRYALWAYS; + + if ((uFlags & SHGDN_FORPARSING) == 0) + dwRetryFlags |= SFGDNO_RETRYWITHFORPARSING; + + // 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( + _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] + * + * @note Don't confuse with inline function of the same name. + * This function tries IShellFolder2 if possible. + */ +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/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 */ 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/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 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)) { 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/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/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/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. diff --git a/media/doc/WINESYNC.txt b/media/doc/WINESYNC.txt index 6528ad4e6c5..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 @@ -280,20 +281,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/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/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 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)) { 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) diff --git a/modules/rostests/apitests/CMakeLists.txt b/modules/rostests/apitests/CMakeLists.txt index 9986da77a07..18dfedb9538 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) @@ -65,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/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/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 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) + +// "ABab12ABab12あアばバパ万萬" 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 }, 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/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/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); } 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_ */ 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) 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/SHChangeNotify.cpp b/modules/rostests/apitests/shell32/SHChangeNotify.cpp index 7a95fc470f6..e853baa875f 100644 --- a/modules/rostests/apitests/shell32/SHChangeNotify.cpp +++ b/modules/rostests/apitests/shell32/SHChangeNotify.cpp @@ -2,942 +2,607 @@ * 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; -} - -struct TEST_ENTRY; +#include -typedef BOOL (*ACTION)(const struct TEST_ENTRY *entry); +#define NUM_STEP 8 +#define NUM_CHECKS 12 +#define INTERVAL 0 +#define MAX_EVENT_TYPE 6 -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) -{ - LPWSTR pszPath = DoGetDir(entry->iWriteDir); - PathAppendW(pszPath, TEST_FILE); - ok(DoCreateEmptyFile(pszPath), "Line %d: DoCreateEmptyFile failed\n", entry->line); - return TRUE; -} +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? -static BOOL DoAction2(const TEST_ENTRY *entry) +static BOOL DoCreateFile(LPCWSTR pszFileName) { - 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; + 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 DoAction3(const TEST_ENTRY *entry) +static void DoDeleteDirectory(LPCWSTR pszDir) { - 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; + 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 DoAction4(const TEST_ENTRY *entry) +static INT GetEventType(LONG lEvent) { - 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; + 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 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; -} +#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 DoAction6(const TEST_ENTRY *entry) -{ - 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; -} +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 DoAction7(const TEST_ENTRY *entry) +static void DoDeleteFilesAndDirs(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; + ::DeleteFileW(s_szFile1InDir1); + ::DeleteFileW(s_szFile2InDir1); + ::DeleteFileW(s_szFile1InDir1InDir1); + DoDeleteDirectory(s_szDir1InDir1); + DoDeleteDirectory(s_szDir2InDir1); + DoDeleteDirectory(s_szDir1); } -static BOOL DoAction8(const TEST_ENTRY *entry) +static void TEST_Quit(void) { - 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; -} + CloseHandle(s_hThread); + s_hThread = NULL; -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; -} + PostMessageW(s_hSubWnd, WM_COMMAND, IDNO, 0); // Finish + DoWaitForWindow(SUB_CLASSNAME, SUB_CLASSNAME, TRUE, TRUE); // Close sub-windows -static BOOL DoAction10(const TEST_ENTRY *entry) -{ - LPWSTR pszPath = DoGetDir(entry->iWriteDir); - PathAppendW(pszPath, TEST_FILE); - SHChangeNotify(SHCNE_DELETE, SHCNF_PATHW | SHCNF_FLUSH, pszPath, NULL); - return FALSE; + DoDeleteFilesAndDirs(); } -static BOOL DoAction11(const TEST_ENTRY *entry) +static void DoBuildFilesAndDirs(void) { - LPWSTR pszPath = DoGetDir(entry->iWriteDir); - PathAppendW(pszPath, TEST_DIR); - SHChangeNotify(SHCNE_MKDIR, 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); -static BOOL DoAction12(const TEST_ENTRY *entry) -{ - LPWSTR pszPath = DoGetDir(entry->iWriteDir); - PathAppendW(pszPath, TEST_DIR); - SHChangeNotify(SHCNE_RMDIR, SHCNF_PATHW | SHCNF_FLUSH, pszPath, NULL); - return FALSE; -} + PathAppendW(szPath1, DIR_1); + StringCchCopyW(s_szDir1InDir1, _countof(s_szDir1InDir1), szPath1); + PathRemoveFileSpecW(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_2); + StringCchCopyW(s_szDir2InDir1, _countof(s_szDir2InDir1), 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_1); + PathAppendW(szPath1, FILE_1); + StringCchCopyW(s_szFile1InDir1InDir1, _countof(s_szFile1InDir1InDir1), szPath1); + PathRemoveFileSpecW(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, FILE_1); + StringCchCopyW(s_szFile1InDir1, _countof(s_szFile1InDir1), 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_2); + StringCchCopyW(s_szFile2InDir1, _countof(s_szFile2InDir1), 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 }, -}; +#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_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 }, -}; + DoDeleteFilesAndDirs(); -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 }, -}; + ::CreateDirectoryW(s_szDir1, NULL); + ok_int(!!PathIsDirectoryW(s_szDir1), TRUE); -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 }, -}; + DoDeleteDirectory(s_szDir1InDir1); + ok_int(!PathIsDirectoryW(s_szDir1InDir1), TRUE); +} -static const TEST_ENTRY s_group_05[] = +static void DoTestEntry(LONG lEvent, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) { - { __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 }, -}; + WCHAR szPath1[MAX_PATH], szPath2[MAX_PATH]; -static const TEST_ENTRY s_group_06[] = -{ - { __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 }, -}; + szPath1[0] = szPath2[0] = 0; + SHGetPathFromIDListW(pidl1, szPath1); + SHGetPathFromIDListW(pidl2, szPath2); -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 }, -}; + trace("(0x%lX, '%ls', '%ls')\n", lEvent, szPath1, 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 }, -}; + if (lEvent == SHCNE_UPDATEDIR) + { + trace("Got SHCNE_UPDATEDIR\n"); + s_bGotUpdateDir = TRUE; + return; + } -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))); + 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') + LPCSTR answer = NULL; + INT lineno; + switch (iStage) { - 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 - { - s_cCalmDown = 0; - if (entry->pattern) + case 0: + case 1: + case 3: + case 6: + case 9: + { + 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: + case 4: + case 5: + case 7: + { + static const TEST_ANSWER c_answers[] = + { + { __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 8: + { + static const TEST_ANSWER c_answers[] = + { + { __LINE__, "000000010000010000000000" }, // 0 + { __LINE__, "000000040000000000000400" }, // 1 + { __LINE__, "000000000200020000000000" }, // 2 + { __LINE__, "000000000000080000000000" }, // 3 + { __LINE__, "000000000001010000000000" }, // 4 // Recursive case + { __LINE__, "000000000002020000000000" }, // 5 // Recursive case + { __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) + { + trace("Warning! Recursive cases...\n"); + answer = "000000000000000000000000"; + } + } + break; + } + default: { - ok(strcmp(pattern, entry->pattern) == 0, - "Line %d: pattern mismatch '%s', tick=0x%08lX\n", - entry->line, pattern, GetTickCount()); + 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); + SHChangeNotify(0, SHCNF_PATHW | SHCNF_FLUSH, NULL, NULL); + ZeroMemory(s_abChecks, sizeof(s_abChecks)); + ret = DoCreateFile(s_szFile1InDir1); + ok_int(ret, TRUE); + SHChangeNotify(SHCNE_CREATE, SHCNF_PATHW | SHCNF_FLUSH, 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, 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, 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, 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, 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, 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, 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, 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(s_szSubProgram, _countof(s_szSubProgram))) { - 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/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/ShellExecCmdLine.cpp b/modules/rostests/apitests/shell32/ShellExecCmdLine.cpp index 218ff08ed88..37ee9c0260e 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 @@ -462,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 }, @@ -677,7 +651,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; @@ -747,6 +721,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..09c46b3465c 100644 --- a/modules/rostests/apitests/shell32/shell32_apitest_sub.cpp +++ b/modules/rostests/apitests/shell32/shell32_apitest_sub.cpp @@ -2,201 +2,317 @@ * 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_DESKTOP_DIR, + DIRTYPE_DRIVES, + DIRTYPE_PRINTERS, + 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 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_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]; + SHGetSpecialFolderPathW(NULL, szPath1, CSIDL_PERSONAL, FALSE); // My Documents + PathAppendW(szPath1, L"_TESTDIR_1_"); + ret = ILCreateFromPathW(szPath1); + break; + } + default: + { + assert(0); + break; + } } -} -static void -OnDestroy(HWND hwnd) -{ - SHChangeNotifyDeregister(s_uRegID); - s_uRegID = 0; - - CoTaskMemFree(s_pidl); - s_pidl = NULL; - - PostQuitMessage(0); - s_hwnd = NULL; + return ret; } -static BOOL DoPathes(PIDLIST_ABSOLUTE pidl1, PIDLIST_ABSOLUTE pidl2) +static BOOL OnCreate(HWND hwnd) { - WCHAR path[MAX_PATH]; - if (!SHGetPathFromIDListW(pidl1, path)) - { - s_path1[0] = s_path2[0] = 0; - return FALSE; - } - - if (wcsstr(path, L"Recent") != NULL) - return FALSE; - - StringCchCopyW(s_path1, _countof(s_path1), path); + s_hSubWnd = hwnd; - if (!SHGetPathFromIDListW(pidl2, s_path2)) - s_path2[0] = 0; + for (INT i = 0; i < DIRTYPE_MAX; ++i) + s_pidl[i] = DoGetPidl(i); return TRUE; } -static VOID DoPathesAndFlags(UINT type, PIDLIST_ABSOLUTE pidl1, PIDLIST_ABSOLUTE pidl2) +static BOOL InitSHCN(HWND hwnd) { - if (DoPathes(pidl1, pidl2)) - { - s_counters[type] = 1; - SetEvent(s_hEvent); - } -} + assert(0 <= s_iStage); + assert(s_iStage < NUM_STAGE); -static void -DoShellNotify(HWND hwnd, PIDLIST_ABSOLUTE pidl1, PIDLIST_ABSOLUTE pidl2, LONG lEvent) -{ - switch (lEvent) + SHChangeNotifyEntry entry; + INT sources; + LONG events; + switch (s_iStage) { - case SHCNE_RENAMEITEM: - DoPathesAndFlags(TYPE_RENAMEITEM, pidl1, pidl2); + case 0: + { + entry.fRecursive = FALSE; + entry.pidl = NULL; + sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel; + events = EVENTS; break; - case SHCNE_CREATE: - DoPathesAndFlags(TYPE_CREATE, pidl1, pidl2); + } + case 1: + { + entry.fRecursive = TRUE; + entry.pidl = NULL; + sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel; + events = EVENTS; break; - case SHCNE_DELETE: - DoPathesAndFlags(TYPE_DELETE, pidl1, pidl2); + } + case 2: + { + entry.fRecursive = FALSE; + entry.pidl = s_pidl[DIRTYPE_DESKTOP]; + sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel; + events = EVENTS; break; - case SHCNE_MKDIR: - DoPathesAndFlags(TYPE_MKDIR, pidl1, pidl2); + } + case 3: + { + entry.fRecursive = TRUE; + entry.pidl = s_pidl[DIRTYPE_DESKTOP]; + sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel; + events = EVENTS; break; - case SHCNE_RMDIR: - DoPathesAndFlags(TYPE_RMDIR, pidl1, pidl2); + } + case 4: + { + entry.fRecursive = TRUE; + entry.pidl = s_pidl[DIRTYPE_DESKTOP_DIR]; + sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel; + events = EVENTS; break; - case SHCNE_MEDIAINSERTED: + } + case 5: + { + entry.fRecursive = FALSE; + entry.pidl = s_pidl[DIRTYPE_DRIVES]; + sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel; + events = EVENTS; break; - case SHCNE_MEDIAREMOVED: + } + case 6: + { + entry.fRecursive = TRUE; + entry.pidl = s_pidl[DIRTYPE_DRIVES]; + sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel; + events = EVENTS; break; - case SHCNE_DRIVEREMOVED: + } + case 7: + { + entry.fRecursive = TRUE; + entry.pidl = s_pidl[DIRTYPE_PRINTERS]; + sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel; + events = EVENTS; break; - case SHCNE_DRIVEADD: + } + case 8: + { + entry.fRecursive = FALSE; + entry.pidl = s_pidl[DIRTYPE_DIR1]; + sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel; + events = EVENTS; break; - case SHCNE_NETSHARE: - break; - case SHCNE_NETUNSHARE: - break; - case SHCNE_ATTRIBUTES: - break; - case SHCNE_UPDATEDIR: - DoPathesAndFlags(TYPE_UPDATEDIR, pidl1, pidl2); - break; - case SHCNE_UPDATEITEM: - 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: + } + case 9: + { + 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; + } } + + s_uRegID = SHChangeNotifyRegister(hwnd, sources, events, WM_SHELL_NOTIFY, 1, &entry); + if (s_uRegID == 0) + return FALSE; + + return TRUE; } -static INT_PTR -OnShellNotify(HWND hwnd, WPARAM wParam, LPARAM lParam) +static void UnInitSHCN(HWND hwnd) { - LONG lEvent; - PIDLIST_ABSOLUTE *pidlAbsolute; - HANDLE hLock = SHChangeNotification_Lock((HANDLE)wParam, (DWORD)lParam, &pidlAbsolute, &lEvent); - if (hLock) + if (s_uRegID) { - DoShellNotify(hwnd, pidlAbsolute[0], pidlAbsolute[1], lEvent); - SHChangeNotification_Unlock(hLock); + SHChangeNotifyDeregister(s_uRegID); + s_uRegID = 0; } - else +} + +static void OnCommand(HWND hwnd, UINT id) +{ + switch (id) { - pidlAbsolute = (PIDLIST_ABSOLUTE *)wParam; - DoShellNotify(hwnd, pidlAbsolute[0], pidlAbsolute[1], lParam); + 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 IDRETRY: // New stage + { + UnInitSHCN(hwnd); + ++s_iStage; + InitSHCN(hwnd); + ::PostMessageW(s_hMainWnd, WM_COMMAND, IDRETRY, 0); + break; + } + case IDNO: // Quit + { + s_iStage = -1; + UnInitSHCN(hwnd); + ::DestroyWindow(hwnd); + break; + } } - return TRUE; } -static LRESULT -OnGetNotifyFlags(HWND hwnd) +static void OnDestroy(HWND hwnd) { - if (s_uRegID == 0) - return 0xFFFFFFFF; + UnInitSHCN(hwnd); - DWORD dwFlags = 0; - for (size_t i = 0; i < _countof(s_counters); ++i) + for (auto& pidl : s_pidl) { - if (s_counters[i]) - dwFlags |= (1 << i); + CoTaskMemFree(pidl); + pidl = NULL; } - return dwFlags; + + ::PostMessageW(s_hMainWnd, WM_COMMAND, IDNO, 0); + + PostQuitMessage(0); } -static void -DoSetPaths(HWND hwnd) +static BOOL DoSendData(LONG lEvent, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) { - WCHAR szText[MAX_PATH * 2]; - StringCchCopyW(szText, _countof(szText), s_path1); - StringCchCatW(szText, _countof(szText), L"|"); - StringCchCatW(szText, _countof(szText), s_path2); + 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; - FILE *fp = _wfopen(TEMP_FILE, L"wb"); - if (fp) + 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; + HANDLE hLock = SHChangeNotification_Lock((HANDLE)wParam, (DWORD)lParam, &pidlAbsolute, &lEvent); + if (hLock) + { + DoShellNotify(hwnd, pidlAbsolute[0], pidlAbsolute[1], lEvent); + SHChangeNotification_Unlock(hLock); + } + else { - fwrite(szText, (wcslen(szText) + 1) * sizeof(WCHAR), 1, fp); - fflush(fp); - fclose(fp); + pidlAbsolute = (PIDLIST_ABSOLUTE *)wParam; + DoShellNotify(hwnd, pidlAbsolute[0], pidlAbsolute[1], lParam); } + return TRUE; } -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 +330,42 @@ 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)) + { + assert(0); 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; + { + assert(0); + return -2; + } ShowWindow(hwnd, SW_SHOWNORMAL); UpdateWindow(hwnd); @@ -292,7 +377,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..d64e2af03de 100644 --- a/modules/rostests/apitests/shell32/shell32_apitest_sub.h +++ b/modules/rostests/apitests/shell32/shell32_apitest_sub.h @@ -5,71 +5,29 @@ #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; +#define NUM_STAGE 10 -inline LPITEMIDLIST DoGetPidl(DIRTYPE iDir) +static inline BOOL FindSubProgram(LPWSTR pszSubProgram, DWORD cchSubProgram) { - LPITEMIDLIST ret = NULL; + GetModuleFileNameW(NULL, pszSubProgram, cchSubProgram); + PathRemoveFileSpecW(pszSubProgram); + PathAppendW(pszSubProgram, L"shell32_apitest_sub.exe"); - switch (iDir) + if (!PathFileExistsW(pszSubProgram)) { - case DIRTYPE_NULL: - break; - - case DIRTYPE_DESKTOP: - SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &ret); - break; + PathRemoveFileSpecW(pszSubProgram); + PathAppendW(pszSubProgram, L"testdata\\shell32_apitest_sub.exe"); - case DIRTYPE_MYCOMPUTER: - SHGetSpecialFolderLocation(NULL, CSIDL_DRIVES, &ret); - break; - - case DIRTYPE_MYDOCUMENTS: - SHGetSpecialFolderLocation(NULL, CSIDL_PERSONAL, &ret); - break; + if (!PathFileExistsW(pszSubProgram)) + return FALSE; } - 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; + return TRUE; } static inline HWND DoWaitForWindow(LPCWSTR clsname, LPCWSTR text, BOOL bClosing, BOOL bForce) 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 } diff --git a/modules/rostests/apitests/shlwapi/CMakeLists.txt b/modules/rostests/apitests/shlwapi/CMakeLists.txt index 7a9a57e40aa..49e5ef69056 100644 --- a/modules/rostests/apitests/shlwapi/CMakeLists.txt +++ b/modules/rostests/apitests/shlwapi/CMakeLists.txt @@ -6,6 +6,8 @@ include_directories($) list(APPEND SOURCE AssocQueryString.c + IShellFolderHelpers.cpp + PathFileExistsDefExtAndAttributesW.c PathFindOnPath.c PathIsUNC.c PathIsUNCServer.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/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..b44f2e181fa 100644 --- a/modules/rostests/apitests/shlwapi/testlist.c +++ b/modules/rostests/apitests/shlwapi/testlist.c @@ -2,7 +2,9 @@ #include 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); @@ -19,7 +21,9 @@ extern void func_StrFormatByteSizeW(void); 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/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 00000000000..8dc8d9d2b3a Binary files /dev/null and b/modules/rostests/apitests/user32/image.dll differ diff --git a/modules/rostests/apitests/user32/makeimg/CMakeLists.txt b/modules/rostests/apitests/user32/makeimg/CMakeLists.txt new file mode 100644 index 00000000000..7bd91b91146 --- /dev/null +++ b/modules/rostests/apitests/user32/makeimg/CMakeLists.txt @@ -0,0 +1,13 @@ +PROJECT(MAKEIMG) + +add_executable(showimg showimg.c) + +set_module_type(showimg win32gui UNICODE) +add_importlibs(showimg gdi32 user32 shell32 msvcrt kernel32 ntdll) + +add_library(image MODULE image.rc) +set_module_type(image win32dll ENTRYPOINT 0) + + +add_rostests_file(TARGET showimg) +add_rostests_file(TARGET image) diff --git a/modules/rostests/apitests/user32/makeimg/image.rc b/modules/rostests/apitests/user32/makeimg/image.rc new file mode 100644 index 00000000000..b683331dfb3 --- /dev/null +++ b/modules/rostests/apitests/user32/makeimg/image.rc @@ -0,0 +1,4 @@ +#define IDB_TEST 130 + +IDB_TEST BITMAP "test.bmp" + diff --git a/modules/rostests/apitests/user32/makeimg/readme.txt b/modules/rostests/apitests/user32/makeimg/readme.txt new file mode 100644 index 00000000000..425a17c262a --- /dev/null +++ b/modules/rostests/apitests/user32/makeimg/readme.txt @@ -0,0 +1,14 @@ +For reference see https://jira.reactos.org/browse/CORE-17005 + +This should be compiled using MSVC to create the image.dll file for testing. +Also, it creates an interactive showimg.exe program that can be used to verify this file. +After the creation of the image.dll file using MSVC it can be used to create user32_apitest:LoadImageGCC. +Simply copy the MSVC created 'image.dll' into the 'modules\rostests\apitests\user32' subdirectory to use it. +This file already exists there so that this step is not necessary, but only presents another option. + +Unfortunately, this test will not work correctly using Windows 2003 Server SP2. +I have not looked into the details of why this is the case, but it works under ReactOS. +This is what is important for now in any case. + +Doug Lyons +April 16, 2024 diff --git a/modules/rostests/apitests/user32/makeimg/showimg.c b/modules/rostests/apitests/user32/makeimg/showimg.c new file mode 100644 index 00000000000..ae87f28ef4c --- /dev/null +++ b/modules/rostests/apitests/user32/makeimg/showimg.c @@ -0,0 +1,150 @@ +// Released to the Public Domain by Doug Lyons on April 16th, 2024. + +#include +#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 00000000000..1ee7626cdf6 Binary files /dev/null and b/modules/rostests/apitests/user32/makeimg/test.bmp differ 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" 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(); +} 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); 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); 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); 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; } 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/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 } // 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/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); diff --git a/ntoskrnl/io/iomgr/irq.c b/ntoskrnl/io/iomgr/irq.c index 2fed5d1703c..6e09f6b196e 100644 --- a/ntoskrnl/io/iomgr/irq.c +++ b/ntoskrnl/io/iomgr/irq.c @@ -9,6 +9,7 @@ /* INCLUDES *****************************************************************/ #include + #define NDEBUG #include @@ -34,10 +35,10 @@ IoConnectInterrupt(OUT PKINTERRUPT *InterruptObject, PKINTERRUPT Interrupt; PKINTERRUPT InterruptUsed; PIO_INTERRUPT IoInterrupt; - PKSPIN_LOCK SpinLockUsed; BOOLEAN FirstRun; CCHAR Count = 0; KAFFINITY Affinity; + PAGED_CODE(); /* Assume failure */ @@ -55,81 +56,81 @@ 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 */ - 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; + /* We first start with a built-in interrupt inside the I/O structure */ 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) { /* 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, + SpinLock, + 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 */ + 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++; } } - /* Return Success */ + /* Return success */ + *InterruptObject = &IoInterrupt->FirstInterrupt; return STATUS_SUCCESS; } @@ -140,11 +141,12 @@ VOID NTAPI IoDisconnectInterrupt(PKINTERRUPT InterruptObject) { - LONG i; PIO_INTERRUPT IoInterrupt; + ULONG i; + PAGED_CODE(); - /* Get the I/O Interrupt */ + /* Get the I/O interrupt */ IoInterrupt = CONTAINING_RECORD(InterruptObject, IO_INTERRUPT, FirstInterrupt); @@ -156,15 +158,15 @@ 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(IoInterrupt->Interrupt[i]); } - /* Free the I/O Interrupt */ - ExFreePool(IoInterrupt); // ExFreePoolWithTag(IoInterrupt, TAG_KINTERRUPT); + /* Free the I/O interrupt */ + ExFreePoolWithTag(IoInterrupt, TAG_KINTERRUPT); } NTSTATUS @@ -172,6 +174,7 @@ IopConnectInterruptExFullySpecific( _Inout_ PIO_CONNECT_INTERRUPT_PARAMETERS Parameters) { NTSTATUS Status; + PAGED_CODE(); /* Fallback to standard IoConnectInterrupt */ @@ -196,6 +199,7 @@ IoConnectInterruptEx( _Inout_ PIO_CONNECT_INTERRUPT_PARAMETERS Parameters) { PAGED_CODE(); + switch (Parameters->Version) { case CONNECT_FULLY_SPECIFIED: @@ -210,6 +214,7 @@ IoConnectInterruptEx( DPRINT1("FIXME: Line based interrupts are UNIMPLEMENTED\n"); break; } + return STATUS_SUCCESS; } 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); 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..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; @@ -28,16 +29,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 +63,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) @@ -94,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; @@ -176,15 +170,22 @@ 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; 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,32 +198,34 @@ NtRaiseException(IN PEXCEPTION_RECORD ExceptionRecord, /* Raise the exception */ Status = KiRaiseException(ExceptionRecord, Context, - NULL, + ExceptionFrame, TrapFrame, FirstChance); - if (NT_SUCCESS(Status)) + if (!NT_SUCCESS(Status)) { - /* It was handled, so exit restoring all state */ - KiServiceExit2(TrapFrame); - } - else - { - /* Exit with error */ - KiServiceExit(TrapFrame, Status); + DPRINT1("KiRaiseException failed. Status = 0x%lx\n", Status); + return Status; } - /* We don't actually make it here */ - 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; 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,23 +233,21 @@ NtContinue(IN PCONTEXT Context, Thread->TrapFrame = KiGetLinkedTrapFrame(TrapFrame); /* Continue from this point on */ - Status = KiContinue(Context, NULL, TrapFrame); - if (NT_SUCCESS(Status)) + 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); + DPRINT1("KiContinue failed. Status = 0x%lx\n", Status); + return Status; } - else + + /* Check if alert was requested */ + if (TestAlert) { - /* Exit with an error */ - KiServiceExit(TrapFrame, Status); + KeTestAlertThread(Thread->PreviousMode); } - /* We don't actually make it here */ - return Status; + /* Exit to new context */ + KiExceptionExit(TrapFrame, ExceptionFrame); } /* EOF */ 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; } 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 */ 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() 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/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/include/crt/process.h b/sdk/include/crt/process.h index b8948f5f0e0..85321ccf4c2 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 @@ -62,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 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) 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_*/ 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/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/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/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) 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 */ diff --git a/sdk/include/reactos/shlwapi_undoc.h b/sdk/include/reactos/shlwapi_undoc.h index fd1ac3f3c82..12b167e7897 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); @@ -324,6 +332,41 @@ 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_ SHGDNF uFlags, + _Out_ LPSTRRET lpName, + _In_ DWORD dwRetryFlags); + +/* Flags for IShellFolder_GetDisplayNameOf */ +#define SFGDNO_RETRYWITHFORPARSING 0x00000001 +#define SFGDNO_RETRYALWAYS 0x80000000 + +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) */ 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 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 ); } 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 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/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/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/math/rand.c deleted file mode 100644 index b83be76960a..00000000000 --- a/sdk/lib/crt/math/rand.c +++ /dev/null @@ -1,73 +0,0 @@ -/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */ -#include -#include -#include - -/* - * @implemented - */ -int -rand(void) -{ - thread_data_t *data = msvcrt_get_thread_data(); - - /* this is the algorithm used by MSVC, according to - * http://en.wikipedia.org/wiki/List_of_pseudorandom_number_generators */ - data->random_seed = data->random_seed * 214013 + 2531011; - return (data->random_seed >> 16) & RAND_MAX; -} - -/* - * @implemented - */ -void -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/msvcrtex.cmake b/sdk/lib/crt/msvcrtex.cmake index 4ecfd4db6f8..6377cfa688b 100644 --- a/sdk/lib/crt/msvcrtex.cmake +++ b/sdk/lib/crt/msvcrtex.cmake @@ -4,13 +4,22 @@ 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 misc/ofmt_stub.c stdio/acrt_iob_func.c) +if(DLL_EXPORT_VERSION LESS 0x600) + list(APPEND MSVCRTEX_SOURCE + misc/dbgrpt.cpp + stdlib/_invalid_parameter.c + stdlib/rand_s.c + wstring/mbrtowc.c + wstring/wcrtomb.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/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 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) { } 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/rand.c b/sdk/lib/crt/stdlib/rand.c new file mode 100644 index 00000000000..29fbc3ac3b3 --- /dev/null +++ b/sdk/lib/crt/stdlib/rand.c @@ -0,0 +1,28 @@ +/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */ +#include +#include +#include + +/* + * @implemented + */ +int +rand(void) +{ + thread_data_t *data = msvcrt_get_thread_data(); + + /* this is the algorithm used by MSVC, according to + * http://en.wikipedia.org/wiki/List_of_pseudorandom_number_generators */ + data->random_seed = data->random_seed * 214013 + 2531011; + return (data->random_seed >> 16) & RAND_MAX; +} + +/* + * @implemented + */ +void +srand(unsigned int seed) +{ + thread_data_t *data = msvcrt_get_thread_data(); + data->random_seed = seed; +} 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/rand_s.c b/sdk/lib/crt/stdlib/rand_s.c new file mode 100644 index 00000000000..7450f7127d0 --- /dev/null +++ b/sdk/lib/crt/stdlib/rand_s.c @@ -0,0 +1,72 @@ +/* + * 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 + +typedef BOOLEAN (WINAPI *PFN_SystemFunction036)(PVOID, ULONG); // RtlGenRandom +PFN_SystemFunction036 g_pfnSystemFunction036 = NULL; + +/********************************************************************* + * rand_s (MSVCRT.@) + */ +int CDECL rand_s(unsigned int *pval) +{ + HINSTANCE hadvapi32; + + if (!pval) + { + _invalid_parameter(NULL,_CRT_WIDE("rand_s"),_CRT_WIDE(__FILE__),__LINE__, 0); + *_errno() = EINVAL; + return EINVAL; + } + + *pval = 0; + + if (g_pfnSystemFunction036 == NULL) + { + 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 (!g_pfnSystemFunction036(pval, sizeof(*pval))) + { + _invalid_parameter(NULL,_CRT_WIDE("rand_s"),_CRT_WIDE(__FILE__),__LINE__, 0); + *_errno() = EINVAL; + return EINVAL; + } + + 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 3ab02840e34..4719ec21a39 100644 --- a/sdk/lib/crt/stdlib/stdlib.cmake +++ b/sdk/lib/crt/stdlib/stdlib.cmake @@ -1,11 +1,17 @@ -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/_invalid_parameter.c stdlib/_set_abort_behavior.c stdlib/abort.c stdlib/atexit.c @@ -22,6 +28,8 @@ list(APPEND CRT_STDLIB_SOURCE stdlib/mbstowcs.c stdlib/obsol.c stdlib/putenv.c + stdlib/rand.c + stdlib/rand_s.c stdlib/rot.c stdlib/senv.c stdlib/swab.c 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/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..54b9fd8b290 100644 --- a/sdk/lib/crt/wstring/wstring.cmake +++ b/sdk/lib/crt/wstring/wstring.cmake @@ -11,6 +11,8 @@ 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 wstring/wcsxfrm.c 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; } 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 */ 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, 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/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) diff --git a/sdk/lib/rtl/actctx.c b/sdk/lib/rtl/actctx.c index a8b44da6892..0a9d4ae05f6 100644 --- a/sdk/lib/rtl/actctx.c +++ b/sdk/lib/rtl/actctx.c @@ -9,10 +9,11 @@ * Jacek Caban for CodeWeavers * Alexandre Julliard * Stefan Ginsberg (stefan.ginsberg@reactos.org) - * Samuel Serapión + * Samuel Serapin */ /* Based on Wine 3.2-37c98396 */ +#ifdef __REACTOS__ #include #include @@ -22,9 +23,25 @@ #include #include +#include "wine/exception.h" + +#define GetProcessHeap() RtlGetProcessHeap() +#define GetCurrentProcess() NtCurrentProcess() +#define FIXME DPRINT1 +#define WARN DPRINT1 +#define TRACE DPRINT +#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 BOOLEAN RtlpNotAllowingMultipleActivation; +#endif // __REACTOS__ + #define ACTCTX_FLAGS_ALL (\ ACTCTX_FLAG_PROCESSOR_ARCHITECTURE_VALID |\ ACTCTX_FLAG_LANGID_VALID |\ @@ -35,6 +52,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 */ @@ -43,6 +61,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 @@ -490,6 +549,7 @@ enum context_sections PROGIDREDIRECT_SECTION = 64 }; +#ifdef __REACTOS__ typedef struct _ASSEMBLY_STORAGE_MAP_ENTRY { ULONG Flags; @@ -503,9 +563,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; @@ -518,16 +580,20 @@ 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; - 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; @@ -560,6 +626,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; @@ -613,6 +680,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}; @@ -753,9 +821,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}; @@ -769,7 +834,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 +843,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; @@ -796,15 +861,9 @@ 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) +static BOOL xml_attr_cmp( const struct xml_attr *attr, 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); + return xmlstr_cmp( &attr->name, str ); } static BOOL xml_name_cmp( const struct xml_elem *elem1, const struct xml_elem *elem2 ) @@ -815,7 +874,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; @@ -836,6 +895,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; @@ -849,13 +920,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 +949,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 +970,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 +985,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 +1003,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 +1029,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); + FIXME("Unknown entity kind %d\n", entity->kind); } } - RtlFreeHeap( RtlGetProcessHeap(), 0, array->base ); + RtlFreeHeap( GetProcessHeap(), 0, array->base ); } static BOOL is_matching_string( const WCHAR *str1, const WCHAR *str2 ) @@ -1029,7 +1100,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; @@ -1038,7 +1109,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; @@ -1051,13 +1122,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 +1144,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 +1161,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 +1214,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 ); @@ -1161,7 +1232,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) { @@ -1169,11 +1240,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; } @@ -1197,40 +1268,40 @@ 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); } } -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; @@ -1273,7 +1344,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; @@ -1502,7 +1573,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; @@ -1526,7 +1597,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; @@ -1606,7 +1677,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; } @@ -1639,12 +1710,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; @@ -1761,7 +1832,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; } } @@ -1786,7 +1857,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 +1921,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) @@ -1877,7 +1948,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; } @@ -2752,7 +2823,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; @@ -2765,7 +2836,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); @@ -2777,14 +2848,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 +2870,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; @@ -2812,8 +2883,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(RtlGetProcessHeap(), 0, new_buff); + status = parse_manifest_buffer( acl, assembly, ai, &xmlbuf ); + RtlFreeHeap( GetProcessHeap(), 0, new_buff ); } return status; } @@ -2832,7 +2903,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; @@ -2842,7 +2913,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) ); @@ -2874,18 +2945,18 @@ 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 if (!resname) return STATUS_INVALID_PARAMETER; - info.Type = (ULONG_PTR)RT_MANIFEST; + info.Type = RT_MANIFEST; info.Language = lang; if (!((ULONG_PTR)resname >> 16)) { @@ -2917,6 +2988,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 ); @@ -2974,7 +3046,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, @@ -2996,7 +3068,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; @@ -3013,7 +3085,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; @@ -3028,14 +3100,14 @@ 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; } 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; @@ -3045,7 +3117,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; @@ -3057,24 +3129,21 @@ 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; 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; - /* 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, (SIZE_T)info.EndOfFile.QuadPart); + status = parse_manifest(acl, ai, filename, directory, shared, base, info.EndOfFile.QuadPart); - NtUnmapViewOfSection( NtCurrentProcess(), base ); + NtUnmapViewOfSection( GetCurrentProcess(), base ); return status; } @@ -3087,11 +3156,11 @@ 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; - 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 */ { @@ -3109,7 +3178,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 +3211,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) ))) @@ -3161,7 +3230,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 (;;) { @@ -3170,7 +3239,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); @@ -3200,16 +3269,16 @@ 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; } } } - else DPRINT1("no matching file for %S\n", lookup); - RtlFreeHeap( RtlGetProcessHeap(), 0, lookup ); + else WARN("no matching file for %S\n", lookup); + RtlFreeHeap( GetProcessHeap(), 0, lookup ); return ret; } @@ -3227,19 +3296,19 @@ 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, - ((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 )) { - 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 +3331,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 +3351,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; } @@ -3298,7 +3367,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; @@ -3309,13 +3378,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; } @@ -3348,7 +3417,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; } @@ -3370,8 +3439,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 +3535,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)); @@ -3492,7 +3561,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); @@ -3549,7 +3618,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++; } @@ -3600,7 +3669,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 +3686,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 +3750,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)); @@ -3710,7 +3779,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); @@ -3793,7 +3862,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; @@ -3812,7 +3881,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++; } @@ -3830,7 +3899,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)) @@ -3840,10 +3909,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; @@ -3882,7 +3948,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 +3988,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 +4059,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 +4074,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)) @@ -4080,10 +4146,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) { @@ -4266,10 +4329,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; @@ -4293,7 +4353,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 +4372,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 +4381,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; } } @@ -4337,10 +4397,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; @@ -4355,7 +4412,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 +4428,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)) @@ -4397,10 +4454,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; @@ -4489,10 +4543,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; @@ -4514,7 +4565,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 +4584,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 +4594,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; } } @@ -4559,10 +4610,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; @@ -4577,7 +4625,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 +4639,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)) @@ -4600,10 +4648,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; @@ -4635,7 +4680,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 +4715,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; } @@ -4719,10 +4764,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; @@ -4737,7 +4779,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 +4797,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)) @@ -4832,10 +4874,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; @@ -4872,10 +4911,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; @@ -4898,7 +4934,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 +4956,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 +4966,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 +4998,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 +5009,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 +5025,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)) @@ -5007,9 +5043,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; @@ -5020,10 +5058,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; } @@ -5057,7 +5095,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; } @@ -5100,15 +5138,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)) @@ -5121,7 +5151,6 @@ void actctx_init(PVOID* pOldShimData) } } -/* FUNCTIONS ***************************************************************/ /*********************************************************************** * RtlCreateActivationContext (NTDLL.@) @@ -5147,14 +5176,14 @@ 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("%p %08x\n", pActCtx, pActCtx ? pActCtx->dwFlags : 0); if (!pActCtx || pActCtx->cbSize < sizeof(*pActCtx) || (pActCtx->dwFlags & ~ACTCTX_FLAGS_ALL)) 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; @@ -5193,13 +5222,13 @@ 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; 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; @@ -5211,7 +5240,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; @@ -5330,7 +5359,7 @@ RtlReleaseActivationContext( HANDLE handle ) /*********************************************************************** * RtlAddRefActivationContext (NTDLL.@) */ -VOID NTAPI RtlAddRefActivationContext( HANDLE handle ) +void WINAPI RtlAddRefActivationContext( HANDLE handle ) { ACTIVATION_CONTEXT *actctx; @@ -5341,7 +5370,7 @@ VOID NTAPI RtlAddRefActivationContext( HANDLE handle ) /****************************************************************** * RtlReleaseActivationContext (NTDLL.@) */ -VOID NTAPI RtlReleaseActivationContext( HANDLE handle ) +void WINAPI RtlReleaseActivationContext( HANDLE handle ) { ACTIVATION_CONTEXT *actctx; @@ -5353,12 +5382,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; + FIXME("%p: stub\n", handle); - if (Context == ACTCTX_FAKE_HANDLE) + if (handle == ACTCTX_FAKE_HANDLE) return STATUS_SUCCESS; return STATUS_NOT_IMPLEMENTED; @@ -5369,7 +5399,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; @@ -5384,7 +5414,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; } @@ -5399,11 +5429,11 @@ 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; - DPRINT( "%x cookie=%lx\n", flags, cookie ); + TRACE( "%x cookie=%lx\n", flags, cookie ); /* find the right frame */ top = NtCurrentTeb()->ActivationContextStackPointer->ActiveFrame; @@ -5428,13 +5458,14 @@ NTSTATUS NTAPI RtlDeactivateActivationContext( ULONG flags, ULONG_PTR cookie ) { frame = top->Previous; RtlReleaseActivationContext( top->ActivationContext ); - RtlFreeHeap( RtlGetProcessHeap(), 0, top ); + RtlFreeHeap( GetProcessHeap(), 0, top ); top = frame; } return STATUS_SUCCESS; } +#ifdef __REACTOS__ VOID NTAPI RtlFreeActivationContextStack(IN PACTIVATION_CONTEXT_STACK Stack) @@ -5452,7 +5483,7 @@ RtlFreeActivationContextStack(IN PACTIVATION_CONTEXT_STACK Stack) { PrevFrame = ActiveFrame->Previous; RtlReleaseActivationContext(ActiveFrame->ActivationContext); - RtlFreeHeap(RtlGetProcessHeap(), 0, ActiveFrame); + RtlFreeHeap(GetProcessHeap(), 0, ActiveFrame); ActiveFrame = PrevFrame; } @@ -5463,23 +5494,38 @@ RtlFreeActivationContextStack(IN PACTIVATION_CONTEXT_STACK Stack) ASSERT(IsListEmpty(&Stack->FrameListCache)); /* Free activation stack memory */ - RtlFreeHeap(RtlGetProcessHeap(), 0, Stack); + RtlFreeHeap(GetProcessHeap(), 0, Stack); } +#endif // __REACTOS__ /****************************************************************** * RtlFreeThreadActivationContextStack (NTDLL.@) */ -VOID NTAPI RtlFreeThreadActivationContextStack(VOID) +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__ } /****************************************************************** * RtlGetActiveActivationContext (NTDLL.@) */ -NTSTATUS NTAPI RtlGetActiveActivationContext( HANDLE *handle ) +NTSTATUS WINAPI RtlGetActiveActivationContext( HANDLE *handle ) { if (NtCurrentTeb()->ActivationContextStackPointer->ActiveFrame) { @@ -5496,7 +5542,7 @@ NTSTATUS NTAPI RtlGetActiveActivationContext( HANDLE *handle ) /****************************************************************** * RtlIsActivationContextActive (NTDLL.@) */ -BOOLEAN NTAPI RtlIsActivationContextActive( HANDLE handle ) +BOOLEAN WINAPI RtlIsActivationContextActive( HANDLE handle ) { RTL_ACTIVATION_CONTEXT_STACK_FRAME *frame; @@ -5512,14 +5558,14 @@ 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; - 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; @@ -5564,11 +5610,11 @@ NTSTATUS NTAPI 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) { @@ -5623,14 +5669,14 @@ 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; } 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; @@ -5640,7 +5686,7 @@ NTSTATUS NTAPI 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) ); @@ -5658,7 +5704,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; @@ -5692,7 +5738,7 @@ NTSTATUS NTAPI 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) @@ -5754,12 +5800,13 @@ NTSTATUS NTAPI 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; } +#ifdef __REACTOS__ NTSTATUS NTAPI RtlQueryInformationActiveActivationContext(ULONG ulInfoClass, @@ -5805,6 +5852,7 @@ RtlpFindActivationContextSection_CheckParameters( ULONG flags, const GUID *guid, return STATUS_SUCCESS; } +#endif // __REACTOS__ /*********************************************************************** * RtlFindActivationContextSectionString (NTDLL.@) @@ -5812,11 +5860,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); @@ -5871,13 +5919,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; } @@ -5899,6 +5947,7 @@ NTSTATUS WINAPI RtlFindActivationContextSectionGuid( ULONG flags, const GUID *ex return status; } +#ifdef __REACTOS__ /* Stubs */ NTSTATUS @@ -5911,7 +5960,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; @@ -6060,3 +6109,4 @@ RtlDeactivateActivationContextUnsafeFast(IN PRTL_CALLER_ALLOCATED_ACTIVATION_CON Frame->Frame.Flags |= RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_DEACTIVATED; return NewFrame->Previous; } +#endif // __REACTOS__ 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 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; } 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; 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 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); diff --git a/win32ss/gdi/ntgdi/freetype.c b/win32ss/gdi/ntgdi/freetype.c index c8bdd59f773..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 @@ -3135,50 +3150,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 +4181,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); @@ -4273,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); @@ -4308,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); @@ -4334,14 +4304,7 @@ 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++; } ASSERT(FontGDI->Magic == FONTGDI_MAGIC); ascender = FontGDI->tmAscent; /* Units above baseline */ @@ -5878,7 +5841,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; @@ -5886,13 +5850,26 @@ IntGetTextDisposition( FT_Face face = Cache->Hashed.Face; BOOL use_kerning = FT_HAS_KERNING(face); ULONG previous = 0; - FT_Vector delta; + 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); @@ -5914,22 +5891,23 @@ 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; } - if (Cache->Hashed.Aspect.EmuBoldItalic) - FT_Done_Glyph((FT_Glyph)realglyph); - previous = glyph_index; } @@ -6056,11 +6034,13 @@ 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; + DWORD ch0, ch1; /* Check if String is valid */ if (Count > 0xFFFF || (Count > 0 && String == NULL)) @@ -6187,6 +6167,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); @@ -6218,7 +6202,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; @@ -6268,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); @@ -6281,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); @@ -6330,8 +6325,6 @@ IntExtTextOutW( { DPRINT1("WARNING: EngCreateBitmap() failed!\n"); bResult = FALSE; - if (Cache.Hashed.Aspect.EmuBoldItalic) - FT_Done_Glyph((FT_Glyph)realglyph); break; } @@ -6341,8 +6334,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 +6376,7 @@ IntExtTextOutW( } if (DoBreak) - { - if (Cache.Hashed.Aspect.EmuBoldItalic) - FT_Done_Glyph((FT_Glyph)realglyph); break; - } if (NULL == Dx) { @@ -6398,15 +6385,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; } @@ -6414,11 +6405,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) @@ -6572,7 +6558,8 @@ GreExtTextOutW( return bResult; } -#define STACK_TEXT_BUFFER_SIZE 100 +#define STACK_TEXT_BUFFER_SIZE 512 + BOOL APIENTRY NtGdiExtTextOutW( @@ -6614,7 +6601,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); 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/menu.c b/win32ss/user/ntuser/menu.c index a9aace74837..2b7a0c51f7a 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)) @@ -4049,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) @@ -4174,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; @@ -4189,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 diff --git a/win32ss/user/ntuser/msgqueue.c b/win32ss/user/ntuser/msgqueue.c index b704dbce5ca..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) @@ -2530,6 +2536,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 */ 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 */ 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) ) { 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 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)) { 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;