BOOL SetFileDacl(LPCWSTR path) { BOOL bRet = FALSE; WCHAR sddl[MAX_KRNLOBJNAME] = {L'\0'}; PSECURITY_DESCRIPTOR psd = nullptr; LPWSTR pszUserSid; if(GetUserSid(&pszUserSid)) { // SDDL_ALL_APP_PACKAGES / SDDL_RESTRICTED_CODE / SDDL_LOCAL_SYSTEM / SDDL_BUILTIN_ADMINISTRATORS / User SID _snwprintf_s(sddl, _TRUNCATE, L"D:%s(A;;FR;;;RC)(A;;FA;;;SY)(A;;FA;;;BA)(A;;FA;;;%s)", (IsWindowsVersion62OrLater() ? L"(A;;FR;;;AC)" : L""), pszUserSid); LocalFree(pszUserSid); } if(ConvertStringSecurityDescriptorToSecurityDescriptorW(sddl, SDDL_REVISION_1, &psd, nullptr)) { if(SetFileSecurityW(path, DACL_SECURITY_INFORMATION, psd)) { bRet = TRUE; } LocalFree(psd); } return bRet; }
void CreateIpcName() { ZeroMemory(krnlobjsddl, sizeof(krnlobjsddl)); ZeroMemory(mgrpipename, sizeof(mgrpipename)); ZeroMemory(mgrmutexname, sizeof(mgrmutexname)); LPWSTR pszUserSid = nullptr; if(GetUserSid(&pszUserSid)) { // SDDL_ALL_APP_PACKAGES / SDDL_RESTRICTED_CODE / SDDL_LOCAL_SYSTEM / SDDL_BUILTIN_ADMINISTRATORS / User SID _snwprintf_s(krnlobjsddl, _TRUNCATE, L"D:%s(A;;GA;;;RC)(A;;GA;;;SY)(A;;GA;;;BA)(A;;GA;;;%s)", (IsWindowsVersion62OrLater() ? L"(A;;GA;;;AC)" : L""), pszUserSid); // (SDDL_MANDATORY_LABEL, SDDL_NO_WRITE_UP, SDDL_ML_LOW) wcsncat_s(krnlobjsddl, L"S:(ML;;NW;;;LW)", _TRUNCATE); LocalFree(pszUserSid); } LPWSTR pszUserUUID = nullptr; if(GetUserUUID(&pszUserUUID)) { _snwprintf_s(mgrpipename, _TRUNCATE, L"%s%s", IMCRVMGRPIPE, pszUserUUID); _snwprintf_s(mgrmutexname, _TRUNCATE, L"%s%s", IMCRVMGRMUTEX, pszUserUUID); LocalFree(pszUserUUID); } }
BOOL CTextService::_InitLanguageBar() { ITfLangBarItemMgr *pLangBarItemMgr; BOOL fRet = FALSE; BOOL fRetI = FALSE; _pLangBarItem = nullptr; _pLangBarItemI = nullptr; if(_pThreadMgr->QueryInterface(IID_PPV_ARGS(&pLangBarItemMgr)) == S_OK) { try { _pLangBarItem = new CLangBarItemButton(this, c_guidLangBarItemButton); if(pLangBarItemMgr->AddItem(_pLangBarItem) == S_OK) { fRet = TRUE; } else { SafeRelease(&_pLangBarItem); } } catch(...) { } if(IsWindowsVersion62OrLater()) { try { _pLangBarItemI = new CLangBarItemButton(this, GUID_LBI_INPUTMODE); if(pLangBarItemMgr->AddItem(_pLangBarItemI) == S_OK) { fRetI = TRUE; } else { SafeRelease(&_pLangBarItemI); } } catch(...) { } } else { fRetI = TRUE; } SafeRelease(&pLangBarItemMgr); } return (fRet && fRetI); }
CLangBarItemButton::CLangBarItemButton(CTextService *pTextService, REFGUID guid) { DllAddRef(); _cRef = 1; _LangBarItemInfo.clsidService = c_clsidTextService; _LangBarItemInfo.guidItem = guid; // GDI handle leak occurs when GetIcon function returns monochrome icon if TF_LBI_STYLE_TEXTCOLORICON flag is set. // Use 16 colors (black only) icon instead of monochrome icon. _LangBarItemInfo.dwStyle = TF_LBI_STYLE_SHOWNINTRAY | (IsEqualGUID(_LangBarItemInfo.guidItem, GUID_LBI_INPUTMODE) ? TF_LBI_STYLE_BTN_BUTTON : TF_LBI_STYLE_BTN_MENU) | (IsWindowsVersion62OrLater() ? 0 : TF_LBI_STYLE_TEXTCOLORICON); //16 colors (black only) icon used on earlier than Windows 8 _LangBarItemInfo.ulSort = 1; wcsncpy_s(_LangBarItemInfo.szDescription, LangbarItemDesc, _TRUNCATE); _pLangBarItemSink = nullptr; _pTextService = pTextService; _pTextService->AddRef(); }
STDAPI CLangBarItemButton::GetIcon(HICON *phIcon) { _GetIcon(phIcon, IsWindowsVersion62OrLater()); return (*phIcon != nullptr) ? S_OK : E_FAIL; }