微软警告 Windows 8.1 用户:系统即将停止支持,建议购买 Win11/10 新设备

Windows 8.1用户警报:2023年1月微软停止支持,升级建议与影响
微软即将在2023年1月停止对Windows 8.1的支持,7月起用户将收到通知。8.1用户需考虑迁移到Win11或Win10,免费升级路径不再提供。本文探讨了迁移建议和技术背景。

据Statcounter网站统计,在过去一年Windows操作系统各个版本的全球市场份额中,Windows 8.1只占3.06%。

如今,虽然没有多少Windows用户还在运行Windows 8.1,但那些用户可能(也可能不)知道,微软对8.1版本的支持将于2023年1月10日结束。

图源:Statcounter

据ZDNet报道,为了确保通知到位,微软将从7月开始“唠叨”Windows 8.1的用户,并一直通知到系统支持的结束日期。

建议用户使用Win 11或Win 10

微软表示,用户将收到类似于在Windows 7 EOL(生命周期结束)之前使用过的弹窗通知。当用户看到通知时,可以点击“了解更多”、“稍后提醒我”或“在支持期结束后提醒我”,直到2023年1月。其中,“了解更多”选项将引导用户到一篇专门的支持文章,微软在文中解释了支持结束的含义以及用户可以执行的操作。

图源:微软官网

值得注意的是,微软表示目前不提供从Windows 8.1到Windows 11和Windows 10的免费升级路径,这意味着用户需要考虑购买较新版本的许可证。

微软还指出,那些坚持使用Windows 8.1的人应该考虑购买一台支持Windows 11或Windows 10的新电脑,因为那些为Windows 8.1打造的电脑 "是用大约10年的技术设计的"。

微软不会为其提供扩展安全更新计划

微软于2013年10月17日发布Windows 8.1,试图用来修复Windows 8最初发布不完善的地方。它带回了传统的“开始”菜单按钮,以及直接启动到桌面而不是彻底重新设计的“开始”菜单。此外,Windows 8.1还包括Internet Explorer 11(已退役),改进了与OneDrive的整合,以及其他调整。

图源:Samlogic,Windows 8的“开始”菜单

有趣的是,Windows 8.1是微软唯一允许用户从Microsoft Store下载的重大Windows更新,类似于苹果更新macOS的方式。

2018年1月9日,Windows 8.1结束了主流支持。与备受喜爱的前辈Windows 7不同,微软不会为Windows 8.1提供扩展安全更新(ESU)计划,这也意味着公司客户在2023年1月10日之后,无法再向微软支付额外的费用来获得补丁。

参考链接:​


二十年前,《程序员》创刊时,我们要全面关注软件人的成长。今天,我们依然初心不变:在一行行代码的背后,是一颗颗鲜活的开发者想要改变世界的雄心壮志。因此,《新程序员 004》从 C++之父 Bjarne Stroustrup、C# 之父 Anders Hejlsberg、MySQL 之父 Michael "Monty" Widenius、PostgreSQL 全球开发组联合创始人 Bruce Momjian 等程序员祖师爷,到阿里巴巴副总裁贾扬清、指令集创始人兼董事长潘爱民、Vue.js 作者尤雨溪……48 位技术大咖,共创我们的程序人生、我们的技术时代。《新程序员 004》已全面上市,欢迎订阅!

#ifndef _RENDER_DEVICE_H_ #define _RENDER_DEVICE_H_ #ifdef _WIN32 #include "SystemDetector.h" //Win7 SP1必须安装补丁:KB2670838支持 D2D+D3D混合渲染 /*本模块渲染模式: *Win7 : 使用D2D + WIC + D3D10 + SwapChain混合渲染,交换链呈现内容 *Win8 : 使用D2D + D3D11 + SwapChain混合渲染,交换链呈现内容, 能兼容DComposition视觉树 *Win8.1 : 使用D2D + D3D11 + DirectComposition混合渲染,DComposition视觉树呈现内容 : 目前最强模式 *Win10 :8.1模式 * Win8兼容DComposition视觉树意义: 虽然最终呈现是SwapChanin的工作, 但DComposition提供了管理视觉树的功能 * 你可以将 DirectComposition(DComposition)的视觉树管理 粗略地类比为 Windows 7 中按 Win + Tab 显示的窗口切换器(任务视图),但它的功能和应用场景更加广泛和灵活。 * 进入了视觉树,说明你能很轻松就把动画效果做出来 */ /*Win7 性能瓶颈警告 * Win7 只支持D2D1.0版本,导致了无法与D3D共享显存,导致D2D+D3D混合渲染性能下降,但依然是win7最高性能,Win7如果想做D2D+D3D+SwapChain混合,必须经过CPU拷贝,但也比GDI+快 * Win7 如果放弃D2D+D3D混合渲染,则只能使用纯D2D绘制+虽然绘图过程可以使用D2D的功能,但最终渲染还是给CPU工作的。Win7下纯D2D绘图需要BindDC * 可以参考微软官网理论: https://learn.microsoft.com/zh-cn/windows/win32/direct2d/comparing-direct2d-and-gdi * win7 想做D2D+D3D+SwapChain混合,必须经过CPU拷贝,但也比GDI+快得多 * win7的绘图方案如下: * 方案 是否支持 GPU 加速 图像质量 开发难度 性能 适用场景 性能排名 GDI ❌ 低 低 低 老系统维护、简单控件 4 GDI+ ❌ 中等 低 中等 快速开发、非高性能需求 3 D2D + BindDC ✅(受限) 高 高 中等 少量高质量图形、混合 D3D 2 D2D + WIC + D3D10 + SwapChain ✅ 高 高 高 高性能 UI、混合 2D/3D 1 特别注意: D2D + WIC + D3D10 + SwapChain模式, D2D的上下文对象是不公开的,并且只有唯一一个,所以不能多线程竞争:BeginDraw() / EndDraw(); 绘图操作要自己进行同步 特别建议: 避免在 Win7 上使用多线程绘制 D2D 渲染目标,即使每个控件有独立的 CreateWicBitmapRenderTarget 哪怕你硬是成功获取了IDXGIFactory2对象,当你创建交换链时,会报错: XGI ERROR: IDXGIFactory::CreateSwapChainForComposition: Composition SwapChains are not supported on Windows 7.[ MISCELLANEOUS ERROR #137: ] 所以只能老实使用D2D + WIC + D3D10 + SwapChain模式 */ //注意性能: 高版本只是增加了特性功能API, 基础核心功能永远都在基础版本ID3D11Device中.性能差异:系统更新, 硬件支持,SDK 和运行时版本, API 调用方式, 多线程支持 #include <d3d11.h> //注意: 所有高版本并没有集成在 d3d11.h 中 /* 各版本的d3d11.h文件对应的系统版本:越高版本越多新特性,但我们的绘图需求不需要那么高版本,低版本能兼容更多系统 * d3d11.h = win7; * d3d11_1.h = win8; * d3d11_2.h = win8.1; * d3d11_3.h = win10(1507) * d3d11_4.h = win10(1709) * 微软停止更新 D3D11:自 Windows 11 发布后,微软将图形开发重点转向 D3D12,不再为 D3D11 提供新特性。最高文件d3d11_4.h * 接口版本与对应的 DirectX 版本及 SDK 接口名称 对应的 DirectX 版本 引入的 Windows SDK 版本 引入的操作系统版本 ID3D11Device DirectX 11.0 Windows SDK v7.0 Windows 7 SP1 ID3D11Device1 DirectX 11.1 Windows SDK v8.0 (Win8 SDK) Windows 8 ID3D11Device2 DirectX 11.2 Windows SDK v8.1 (Win8.1 SDK) Windows 8.1 ID3D11Device3 DirectX 11.3 Windows SDK v10.0.10240.0 Windows 10 TH1 (1507) ID3D11Device4 DirectX 11.4 Windows SDK v10.0.10586.0 Windows 10 TH2 (1511) ID3D11Device5 DirectX 11.4 Windows SDK v10.0.14393.0 Windows 10 RS1 (1607) */ //注意性能: 高版本只是增加了特性功能API, 基础核心功能永远都在基础版本ID2D1Factory中.性能差异:系统更新, 硬件支持,SDK 和运行时版本, API 调用方式, 多线程支持 #include <d2d1.h> //注意: 所有高版本声明都集成在 d2d1.h 中 /* 各版本的d2d1.h文件对应的系统版本:越高版本越多新特性,但我们的绘图需求不需要那么多特性,低版本能兼容更多系统 * d2d1.h = win7 / vista; * d2d1_1.h = win8; * d2d1_2.h = win8.1; * d2d1_3.h = win10(1507) * * 虽然更新了新版本,但微软不再递增文件号了,所以最高文件为d2d1_3.h * d2d1_4.h = win10(1607) * d2d1_5.h = win10(1703) * d2d1_6.h = win10(19041) * ID2D1Factory 系列版本与对应系统/SDK 接口名称 对应版本号 引入操作系统 对应 SDK 版本 主要功能增强 ID2D1Factory v1.1 Windows 7 SP1 Windows SDK v7.1+ 基础 2D 图形渲染支持 实际使用win7是支持1.1版本 ID2D1Factory1 v1.1 Windows 8 Windows SDK v8.0+ 设备上下文、多线程支持 ID2D1Factory2 v1.2 Windows 8.1 Windows SDK v8.1+ 支持图像效果(Image Effects) ID2D1Factory3 v1.3 Windows 10 Windows 10 SDK v10.0.10240+ 性能优化、GPU 加速改进 ID2D1Factory4 v1.4 Windows 10 1607 Windows 10 SDK v10.0.14393+ 更多 GPU 渲染特性 ID2D1Factory5 v1.5 Windows 10 1803 Windows 10 SDK v10.0.17134+ 新增 D2D 与 D3D 的交互能力 ID2D1Factory6 v1.6 Windows 10 1903 Windows 10 SDK v10.0.18362+ 改进资源管理、图形性能优化 ID2D1Factory7 v1.7 Windows 10 20H2 Windows 10 SDK v10.0.19041+ 支持更复杂的 GPU 渲染流程 ID2D1Factory8 v1.8 Windows 11/Windows 10 21H2+ Windows 10 SDK v10.0.22621+ 与 D3D12 更好的集成、新增高级图像处理功能 注意:每个新版本的接口都继承自前一版本,因此高版本接口通常可以替代低版本使用,但需确保目标平台支持该版本。 接口版本与对应的 Direct2D 版本、SDK 及操作系统 接口名称 对应的 Direct2D 版本 引入的 Windows SDK 版本 引入的操作系统版本 ID2D1Device Direct2D 1.0 Windows SDK v7.1 (Win7 SDK) Windows 7 ID2D1Device Direct2D 1.1 Windows SDK v8.0 (Win8 SDK) Windows 8 ID2D1Device1 Direct2D 1.2 Windows SDK v8.1 (Win8.1 SDK) Windows 8.1 ID2D1Device2 Direct2D 1.3 Windows SDK v10.0.10240.0 Windows 10 TH1 (1507) ID2D1Device3 Direct2D 1.4 Windows SDK v10.0.14393.0 Windows 10 RS1 (1607) ID2D1DeviceContext 版本对应表 接口名称 引入的 SDK 版本 对应操作系统版本 主要新增功能 / 改进 ID2D1DeviceContext Windows SDK v7.0A Windows 8 RTM (6.2) 基础设备上下文接口,支持 Direct2D 设备模型 ID2D1DeviceContext1 Windows SDK v8.0A Windows 8.1 (6.3) 添加对位图格式扩展、纹理采样器状态等的支持 ID2D1DeviceContext2 Windows SDK v10.0.10240.0 Windows 10 TH1 (1507) 支持混合模式渲染、GPU 状态控制、多线程绘制优化 ID2D1DeviceContext3 Windows SDK v10.0.10586.0 Windows 10 TH2 (1511) 增加对 D3D11.3 的支持,例如支持更多着色器资源视图 ID2D1DeviceContext4 Windows SDK v10.0.14393.0 Windows 10 RS1 (1607) 支持更高效的图像处理、硬件加速的模糊效果 ID2D1DeviceContext5 Windows SDK v10.0.15063.0 Windows 10 RS2 (1703) 支持 GPU 后期合成(GPU compositing),提升性能与帧率 ID2D1DeviceContext6 Windows SDK v10.0.17134.0 Windows 10 RS4 (1803) 支持更复杂的 GPU 渲染管线,例如支持 DX12 相关功能(通过兼容层) ID2D1DeviceContext7 Windows SDK v10.0.19041.0 Windows 10 20H2 (2020) 支持 Direct2D 在现代 UI 框架(如 WinUI 3)中的集成,改进跨平台一致性 */ //注意性能: 高版本只是增加了特性功能API, 基础核心功能永远都在基础版本IDXGIDevice中.性能差异:系统更新, 硬件支持,SDK 和运行时版本, API 调用方式, 多线程支持 #include <dxgi.h>//注意: 所有高版本都集成在dxgi.h中 /* DXGI版本 头文件 支持的操作系统 DXGI 1.0 dxgi.h Windows Vista (带更新), Windows 7 DXGI 1.1 dxgi1_2.h Windows Vista SP2 (带更新), Windows 7, 和版本2集成在同一个文件中 DXGI 1.2 dxgi1_2.h Windows 7 (带KB2670838), Windows 8, 和版本1集成在同一个文件中 DXGI 1.3 dxgi1_3.h Windows 8.1, Windows Server 2012 R2 DXGI 1.4 dxgi1_4.h Windows 10 (初始版本) DXGI 1.5 dxgi1_5.h Windows 10 版本1607 (周年更新) 及以上 DXGI 1.6 dxgi1_6.h Windows 10 版本1803 及以上 * 接口版本与对应的 DXGI 版本、SDK 及操作系统 接口名称 对应的 DXGI 版本 引入的 Windows SDK 版本 引入的操作系统版本 IDXGIDevice DXGI 1.0 Windows SDK v7.0 Windows 7 SP1 IDXGIDevice1 DXGI 1.2 Windows SDK v8.0 (Win8 SDK) Windows 8 IDXGIDevice2 DXGI 1.3 Windows SDK v8.1 (Win8.1 SDK) Windows 8.1 IDXGIDevice3 DXGI 1.4 Windows SDK v10.0.10240.0 Windows 10 TH1 (1507) IDXGIDevice4 DXGI 1.5 Windows SDK v10.0.14393.0 Windows 10 RS1 (1607) */ #include <dcomp.h>//dcomp.h 首次出现在 Windows 8 SDK 中 /* 接口名称 引入版本 主要功能 IDCompositionDevice Windows 8 基础合成对象创建 IDCompositionDevice2 Windows 8.1 动画系统增强 IDCompositionDevice3 Windows 10 1511 图像处理和动画扩展 IDCompositionDevice4 Windows 10 1709 高级图像特效支持 IDCompositionDevice5 Windows 10 1809 新增图像处理特效和优化 */ #include <mutex>//设备是共享的,所以需要互斥锁 namespace D2DRENDER { class CRenderDevice { public: CRenderDevice(); ~CRenderDevice(); private: /***************************************开始准备D3D******************************************************************/ void CreateD3DDevice();//创建D3D设备 void GetDXGIDevice();//查询 DXGI 设备需要CreateDevice3D()支持 /***************************************开始准备D2D******************************************************************/ void CreateD2DFactory(); void CreateD2DDevice(); /***************************************开始准备DirectComposition****************************************************/ void CreateDcompDevice(); private: ID3D11Device* m_pD3DDevice; // Direct3D设备,使用交换链过程: 创建D3D设备->取出DXGI设备->桥接:使用DXGI创建D2D设备 IDXGIFactory* m_pDXGIFactory; // DXGI工厂,用于创建交换链 IDXGIDevice* m_pDXGIDevice; // DXGI设备: D3D桥接D2D的桥梁 ID2D1Factory1* m_pD2DFactory1; // Direct2D工厂 ID2D1Device* m_pD2DDevice; // Direct2D设备 // DirectComposition = win8 开始才引入 IDCompositionDevice* m_pDcompDevice; //DirectComposition设备 std::mutex m_mutex; // 用于保护内部资源访问 }; } #endif // _WIN32 #endif // !_RENDER_DEVICE_H_ #include "DcompFactory.h" #include "SystemDetector.h" using namespace D2DRENDER; // 匹配 dcomp.h 中的 DCompositionCreateDevice 函数原型 typedef HRESULT(WINAPI* fDCompositionCreateDevice)( IUnknown* dxgiDevice, REFIID riid, void** ppv ); // 匹配 dcomp.h 中的 DCompositionCreateDevice2 函数原型 typedef HRESULT(WINAPI* fDCompositionCreateDevice2)( IUnknown* renderingDevice, REFIID riid, void** ppv ); // COM最优解, 接口聚全(Interface Aggregation) -> 即最新版本的接口聚合到旧版本接口中 class CDcompFactoryImpl : public IDcompFactory1 { public: CDcompFactoryImpl(); // 构造函数 ~CDcompFactoryImpl(); // 析构函数 STDMETHOD_(HRESULT, QueryInterface)(REFIID riid, void** ppvObject); // COM接口查询 STDMETHOD_(ULONG, AddRef)(); // COM接口引用计数 STDMETHOD_(ULONG, Release)(); // COM接口释放计数 STDMETHOD_(INT32, GetDcompVersion)()CONST; STDMETHOD(DCompositionCreateDevice)(IUnknown* dxgiDevice, REFIID riid, void** ppv); // 创建DComposition设备 STDMETHOD(DCompositionCreateDevice2)(IUnknown* dxgiDevice, REFIID riid, void** ppv); // 创建DComposition设备 private: DWORD m_dwRefCount; // 引用计数 HMODULE m_hModule; // 模块句柄 INT32 m_iVersion; // 支持的版本 fDCompositionCreateDevice m_pfDCompositionCreateDevice; fDCompositionCreateDevice2 m_pfDCompositionCreateDevice2; }; CDcompFactoryImpl::CDcompFactoryImpl(): m_dwRefCount(0), m_hModule(nullptr), m_iVersion(-1), m_pfDCompositionCreateDevice(nullptr), m_pfDCompositionCreateDevice2(nullptr) { m_hModule = LoadLibrary("dcomp.dll"); if (m_hModule) { m_pfDCompositionCreateDevice = (fDCompositionCreateDevice)GetProcAddress(m_hModule, "DCompositionCreateDevice"); m_pfDCompositionCreateDevice2 = (fDCompositionCreateDevice2)GetProcAddress(m_hModule, "DCompositionCreateDevice2"); m_iVersion = m_pfDCompositionCreateDevice2 ? 2 : m_pfDCompositionCreateDevice ? 1 : 0; } else { m_iVersion = 0;//win8以下不支持 } } CDcompFactoryImpl::~CDcompFactoryImpl() { if(m_hModule)FreeLibrary(m_hModule); } STDMETHODIMP CDcompFactoryImpl::QueryInterface(REFIID riid, void** ppvObject) { if (riid == __uuidof(IDcompFactory)) { *ppvObject = this; AddRef(); return S_OK; } else if (riid == __uuidof(IDcompFactory1)) { *ppvObject = this; AddRef(); return S_OK; } else { *ppvObject = nullptr; return E_NOINTERFACE; } } STDMETHODIMP_(ULONG) CDcompFactoryImpl::AddRef() { return InterlockedIncrement(&m_dwRefCount); } STDMETHODIMP_(ULONG) CDcompFactoryImpl::Release() { ULONG ulCount = InterlockedDecrement(&m_dwRefCount); if (ulCount == 0) { delete this; } return ulCount; } STDMETHODIMP_(INT32) CDcompFactoryImpl::GetDcompVersion()CONST { return m_iVersion; } STDMETHODIMP CDcompFactoryImpl::DCompositionCreateDevice(IUnknown* dxgiDevice, REFIID riid, void** ppv) { HRESULT hr = m_pfDCompositionCreateDevice(dxgiDevice, riid, ppv); return hr; } STDMETHODIMP CDcompFactoryImpl::DCompositionCreateDevice2(IUnknown* dxgiDevice, REFIID riid, void** ppv) { HRESULT hr = m_pfDCompositionCreateDevice2(dxgiDevice, riid, ppv); return hr; } STDAPI D2DRENDER::CreateDcompFactory(REFIID riid, void** ppv) { IDcompFactory* pFactory = new CDcompFactoryImpl(); if (pFactory->GetDcompVersion() == 0)//如果版本太低 { pFactory->Release();//释放对象 *ppv = nullptr; return E_NOINTERFACE;//不支持 } pFactory->AddRef(); *ppv = pFactory; return S_OK; }
08-17
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值