Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}