#c# #c #windows #windows-10 #disassembly
Вопрос:
Для быстрого просмотра моего виртуального сетевого диска через Dokany
библиотеку мне нужна возможность записи/чтения Thumbs.db
файлов. Как я вижу сейчас Thumbs.db
, это просто формат сериализации для изображений ключа/значения (например, ключ-это имя файла, а значение-набор предварительных просмотров разного размера) и больше ничего не содержит.
Существует ли простой способ сериализации/десериализации этих файлов? Например, я могу создавать предварительные просмотры разных размеров в своем облаке , когда загружаю в него новый файл, и могу сериализовать их на лету (или кэшировать самостоятельно), когда explorer.exe
захочу прочитать Thumbs.db
, но как их сериализовать? Есть какая-нибудь библиотека или достаточный сериализатор для .NET50
?
Обновление 1
Удалось извлечь файлы с Thumbs.db
помощью этого кода и библиотеки из nuget OpenMcdf
:
var cf = new CompoundFile(filePath);
if (Directory.Exists(outputFolder))
Directory.Delete(outputFolder, true);
cf.RootStorage.VisitEntries(x =>
{
if (x.IsStream)
{
var stream = (CFStream)x;
var data = stream.GetData();
var offset = BitConverter.ToInt32(data, 0);
var someInt = BitConverter.ToInt32(data, 4);//type?
var imageSize = BitConverter.ToInt32(data, 8);
var someInt3 = BitConverter.ToInt32(data, 12);//???
var jpgData = data.AsSpan(offset).ToArray();
var headerData = data.AsSpan(0, offset).ToArray();
Directory.CreateDirectory(outputFolder);
File.WriteAllBytes(Path.Combine(outputFolder, x.Name ".jpeg"), jpgData);
File.WriteAllBytes(Path.Combine(outputFolder, x.Name ".bin"), headerData);
}
}, true);
Но теперь столкнулся с проблемой — x.Name
это хэш исходного имени файла в папке, поэтому мне нужно как-то получить эту хэш-функцию для создания моего собственного Thumbs.db. Есть какие-нибудь мысли? Кто-то, кто хорошо разбирается в разборке, может помочь?
Вероятно, он содержится в thumbcache.dll
папке «В Windows», но я недостаточно разбираюсь в разборке, чтобы извлечь эту функцию.
Комментарии:
1.
Thumbs.db
это формат составного файла OLE , и я видел библиотеку для этого, плавающую в Интернете во время моих путешествий. Кроме того, где-то здесь должны быть дубликаты2. Ух ты! Уже пытался проанализировать с помощью одной из библиотек nuget и увидеть некоторые результаты. Спасибо за совет.
3. @TheGeneral Мне удалось извлечь записи из этого, но я не смог интерпретировать потоковые данные. Какая-нибудь помощь?
4. К сожалению, я ничего такого раньше не пробовал.
5. Удалось извлечь файлы, но теперь я столкнулся с новой проблемой — не удается создать хэш файла. Windows, вероятно, использует его для идентификации файла в файле Thumbs.db, и оно совпадает с исходным именем файла. Т. е. имя файла -> хэш файла ->> поиск хэша файла в Thumbs.db