You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.NET5环境下实现Thumbs.db文件的序列化与反序列化

Thumbs.db .NET 实现方案

已验证的序列化/反序列化方案

你目前使用的OpenMcdf是处理Thumbs.db格式的最优选择,Thumbs.db本质是OLE复合文档格式,该库完全兼容.NET 5生态,不需要额外依赖其他组件。

文件名哈希算法实现

你提取到的流名称是原文件名的CRC32变种哈希值,该算法已被公开逆向,无需反编译thumbcache.dll,C#实现代码如下:

public static uint ComputeThumbDbHash(string fileName)
{
    // 文件名转为大写UTF-16LE字节
    var upperName = fileName.ToUpperInvariant();
    var bytes = Encoding.Unicode.GetBytes(upperName);
    
    // Thumbs.db专用CRC32多项式
    const uint polynomial = 0xEDB88320;
    uint crc = 0xFFFFFFFF;
    
    foreach (var b in bytes)
    {
        crc ^= b;
        for (int i = 0; i < 8; i++)
        {
            if ((crc & 1) != 0)
            {
                crc = (crc >> 1) ^ polynomial;
            }
            else
            {
                crc >>= 1;
            }
        }
    }
    
    return ~crc;
}

计算得到的uint值转为8位十六进制大写字符串,就是你在OpenMcdf里读到的流名称x.Name。

自行生成Thumbs.db步骤

  • 对目录下每个需要生成缩略图的文件,先计算上述哈希值得到流名称
  • 生成对应尺寸的JPEG格式缩略图
  • 构造流内容:
    1. 第0-3字节:写入int值16(JPEG数据的起始偏移量,固定值)
    2. 第4-7字节:写入int值1(标识内容为JPEG格式)
    3. 第8-11字节:写入JPEG数据的字节长度
    4. 第12-15字节:写入int值0(保留位)
    5. 拼接上述16字节头和JPEG数据作为完整流内容
  • 用OpenMcdf创建空复合文件,把所有生成的流添加到根存储下,保存为Thumbs.db即可被Explorer直接识别

注意事项

  • Win10及以上系统默认关闭网络驱动器的Thumbs.db生成和读取,可通过修改组策略用户配置>管理模板>Windows组件>文件资源管理器>关闭隐藏的thumbs.db文件中的缩略图缓存禁用该限制,适配你的虚拟网络驱动器场景
  • 如需支持多尺寸缩略图,可根据Explorer请求的Thumbs.db内流名称的后缀标识,对应生成不同尺寸的缩略图即可

内容的提问来源于stack exchange,提问作者eocron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 11:06:00