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; }
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; }
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; }
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; }