Example #1
0
CString CUtils::GetOsName( void )
{
	static CString szOsName;
	if (szOsName.IsEmpty())
	{
		if (IsXP())
		{
			szOsName = L"windowsxp";
		}
		if (IsVista())
		{
			szOsName = L"windowsvista";
		}
		if (IsWin7())
		{
			szOsName = L"windows7";
		}
		if (IsWin8())
		{
			szOsName = L"windows8";
		}
		if (IsWin8_1())
		{
			szOsName = L"windows81";
		}
		if (IsWin10())
		{
			szOsName = L"windows10";
		}
	}

	return szOsName;
}
Example #2
0
FrameDrawStyle CDwmHelper::DrawType()
{
	if (IsWin8())
	{
		m_DrawType = fdt_Win8;
	}
	else if (IsGlass())
	{
		m_DrawType = fdt_Aero;
	}
	else if (IsThemed())
	{
		m_DrawType = fdt_Themed;
	}
	else
	{
		m_DrawType = fdt_Win2k;
	}

	return m_DrawType;
}
Example #3
0
	bool CreateDefaultDACL(PACL *ppDacl)
	{
		typedef struct _SID2
		{
			SID m_sid;
			DWORD m_dwRID2;
		}SID2;

		if( !ppDacl )
		{
			return false;
		}

		SID sidEveryone = {SID_REVISION, 1, SECURITY_WORLD_SID_AUTHORITY, SECURITY_WORLD_RID};
		SID sidApp0 = {SID_REVISION, 2, SECURITY_APP_PACKAGE_AUTHORITY,SECURITY_APP_PACKAGE_BASE_RID};
		SID2 sidApp = {sidApp0, SECURITY_BUILTIN_PACKAGE_ANY_PACKAGE};

		const DWORD _maxVersion2AceSize = sizeof(ACL) + sizeof(ACCESS_ALLOWED_ACE) - sizeof(DWORD) + ::GetLengthSid(&sidEveryone);
		DWORD cb = _maxVersion2AceSize * 2;
		*ppDacl = (PACL)::LocalAlloc(GPTR, cb);
		if ( !::InitializeAcl(*ppDacl, cb, ACL_REVISION) )
		{
			return false;
		}
		DWORD grfInherit = OBJECT_INHERIT_ACE | CONTAINER_INHERIT_ACE;
		if ( !::AddAccessAllowedAceEx(*ppDacl, ACL_REVISION, grfInherit, GENERIC_ALL|WRITE_DAC, &sidEveryone) )
		{
			return false;
		}

		if ( IsWin8() && !::AddAccessAllowedAceEx(*ppDacl, ACL_REVISION, grfInherit, GENERIC_ALL|WRITE_DAC, &sidApp) )
		{
			return false;
		}

		return true;
	}
Example #4
0
	static bool InnerAddAccessRight(const wchar_t *p_szName, SE_OBJECT_TYPE p_seObjType, unsigned long p_lAccessMask, bool p_bInherit)
	{
		bool bRet = false;
		DWORD dwRet = ERROR_SUCCESS;
		PSECURITY_DESCRIPTOR pSD = NULL; 
		PACL pOldDacl = NULL; 
		PACL pNewDacl = NULL; 
		EXPLICIT_ACCESSW aEA[2]; 

		if ( p_bInherit )
		{
			__try
			{
				dwRet = ::GetNamedSecurityInfoW((LPWSTR)p_szName, p_seObjType, DACL_SECURITY_INFORMATION, NULL, NULL, &pOldDacl, NULL, &pSD);
			}
			__except(EXCEPTION_EXECUTE_HANDLER)
			{
				return false;
			}
		}

		if ( dwRet != ERROR_SUCCESS )
		{
			goto exit_point; 
		}

		// 创建一个ACE,允许Everyone完全控制对象,并允许子对象继承此权限。
		::ZeroMemory(aEA, sizeof(EXPLICIT_ACCESS) * 2); 
		__try
		{
			::BuildExplicitAccessWithNameW(&aEA[0], L"Everyone", p_lAccessMask, SET_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT); 
			::BuildExplicitAccessWithNameW(&aEA[1], L"ALL APPLICATION PACKAGES", p_lAccessMask, SET_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT); 
		}
		__except(EXCEPTION_EXECUTE_HANDLER)
		{
			return false;
		}

		// 将新的ACE加入DACL
		__try
		{
			int nSet = 1;
			if ( IsWin8() )
			{
				nSet = 2;
			}
			dwRet = ::SetEntriesInAclW(nSet, aEA, pOldDacl, &pNewDacl); 
		}
		__except(EXCEPTION_EXECUTE_HANDLER)
		{
			return false;
		}

		if ( dwRet != ERROR_SUCCESS )
		{
			goto exit_point;
		}

		// 更新DACL 
		DWORD dwFlag = DACL_SECURITY_INFORMATION;
		if ( !p_bInherit )
		{
			dwFlag |= PROTECTED_DACL_SECURITY_INFORMATION;
		}

		__try
		{
			dwRet = ::SetNamedSecurityInfoW((LPWSTR)p_szName, p_seObjType, dwFlag, NULL, NULL, pNewDacl, NULL); 
		}
		__except(EXCEPTION_EXECUTE_HANDLER)
		{
			return false;
		}

		if ( dwRet != ERROR_SUCCESS )
		{
			goto exit_point; 
		}
		bRet = true;

exit_point:
		if ( pNewDacl )
		{
			::LocalFree(pNewDacl);
		}

		if ( pSD )
		{
			::LocalFree(pSD);
		}

		return bRet;
	}