Windows 光标 (.cur)

微软 标准

Windows 光标资源(CUR)是微软 Windows 操作系统的原生鼠标指针格式,其容器结构与 ICO 完全相同,但会指定精确的热点坐标偏移量。

检查与元数据

操作系统和文件分析器通过检查开头的二进制字节序列来识别 CUR 文件:

选择或将文件拖放到此处

隐私保护 - 文件不会离开您的设备

或粘贴 Ctrl+V
零网络传输隐私保证: 上传至外部服务器的数据为 0 字节。所有处理均在您的浏览器沙箱中本地完成。

字节级文件头签名 (魔数)

操作系统和文件分析器通过检查开头的二进制字节序列来识别 CUR 文件:

十六进制签名 (偏移量 0):

00 00 02 00

ASCII 表示形式: ....

标准化: 微软 Windows 资源规范

技术规格

容器架构ICONDIR 标头(资源类型为 2,即光标),后接 ICONDIRENTRY 数组和 DIB 数据
压缩方式未压缩的 DIB,或经 PNG 压缩的数据流(Windows Vista 及更新版本)
字节序小端序(Intel x86)
色彩空间设备 RGB
通道与结构1 位单色遮罩、4 位、8 位,或带 Alpha 通道的 32 位 BGRA
最大尺寸通常为 32 x 32、48 x 48 或 64 x 64 像素(现代 Windows 支持最高 256 x 256 像素)
透明度XOR/AND 二值遮罩或 8 位平滑 Alpha 通道
流式传输与渐进式加载桌面图标/光标目录不支持流式读取

技术对比矩阵:CUR 对比同类产品

技术属性CUR (当前)ICOPNGSVG
热点定义内嵌的 X/Y 像素坐标无(默认居中/左上角)在 CSS 中定义在 SVG viewBox 中定义
资源类型 ID0x0002(光标)0x0001(图标)标准图像矢量 XML
操作系统Windows 原生鼠标子系统Windows Shell / 浏览器网站图标许多浏览器和应用都支持许多浏览器和应用都支持
可缩放性固定的多分辨率位图固定的多分辨率位图固定大小的栅格无限矢量缩放

常见损坏模式与十六进制恢复指南

鼠标点击位置与光标箭头尖端相距数像素。

根本原因: ICONDIRENTRY 表中的热点 X/Y 坐标损坏或缺失。

恢复方法: 在 File2File.app 光标转换器中重新编辑光标,以便直观地校准热点坐标。

安全分析与解析器攻击向量

历史上,Windows图形设备接口(GDI)中的CUR解析漏洞允许通过精心构造的头部尺寸执行任意代码。

已知攻击向量

  • 旧版光标解码器分配 DIB 颜色遮罩时发生整数溢出。
  • 损坏的热点偏移会在光标位块传送时触发越界指针读取。
  • 解析现代 CUR 文件中嵌入的 PNG 数据流时发生堆内存损坏。

防御性最佳实践: 验证热点坐标严格位于帧尺寸范围内(0 <= X < Width,0 <= Y < Height)。

历史渊源与里程碑

2006Windows Vista 引入了 256x256 高 DPI 光标,其数据在 CUR 文件中采用 PNG 压缩。
2001Windows XP 为光标文件增加了对 32 位平滑 Alpha 混合阴影的支持。
1990Windows 3.0 将 CUR 标准化为原生硬件和软件光标格式。

核心优势与特点

  • 定义了精确的像素热点坐标(X, Y),鼠标点击在屏幕上实际生效的位置。
  • 支持定义多个分辨率的光标,以便在标准显示器和高 DPI 4K 显示器上都清晰显示。
  • Windows 原生支持,无需第三方指针驱动程序。

技术局限与劣势

  • 这种以 Windows 为主的平台格式,在移动设备和非 Windows 浏览器上的原生显示支持较差。
  • 仅支持静态指针;动态光标需要多帧 .ANI 容器。
  • 传统的 1 位 XOR 遮罩会在现代彩色界面上产生明显的颜色反转伪影。

趣味技术冷知识

  • ICO 和 CUR 文件唯一的结构差异在于标头的第 3 个字节:图标为 1,光标为 2。
  • 在 ICO 文件中,每个条目的第 4 和第 6 字节表示颜色平面数和每像素位数;在 CUR 文件中,同一位置的字节表示热点的 X、Y 坐标。
  • CSS 可直接使用指向 .cur 文件的 URL 设置自定义网页光标。

常见技术问题

什么是光标热点(Hotspot)?

热点是光标图像内部发生点击事件的精确像素坐标(例如箭头的最尖端或十字准线的中心)。

我可以将图像(PNG/JPG)转换为 CUR 文件吗?

可以。File2File.app 允许您将标准的 PNG 或 JPG 文件转换为带有自定义热点位置的 Windows .CUR 光标文件。

如何在我的网站上使用 .cur 文件?

您可以在 CSS 中使用以下代码应用自定义光标:cursor: url('my-cursor.cur'), auto;