Не создаётся Object Id на NTFS
От: амдф Российская Империя http://hex.pp.ua/
Дата: 29.03.11 18:50
Оценка:
Пытаюсь создать атрибут Object Id у файла на NTFS.
У этого файла в момент создания такого атрибута нет.

Предварительно получаю привилегии
SE_BACKUP_PRIVILEGE и SE_RESTORE_PRIVILEGE.

Файл открыт так:

hNew = CreateFile("filename", GENERIC_WRITE,
      FILE_SHARE_WRITE, NULL, OPEN_ALWAYS,
      FILE_FLAG_BACKUP_SEMANTICS, NULL);



Делаю так:

  if (!DeviceIoControl(hNew, FSCTL_SET_OBJECT_ID,
      pObj, sizeof(OBJECTID_ATTRIBUTE), NULL, 0, &dwRet, NULL))
  {
    PrintWin32Error();
    CloseHandle(hNew);
    return FALSE;
  }



pObj — указатель на OBJECTID_ATTRIBUTE (64 байт).

Всё время получаю ошибку access denied, ничего не создаётся.

FSCTL_CREATE_OR_GET_OBJECT_ID работает, но там система сама генерирует содержимое,
мне не подходит, хочу задать полностью своё содержимое буфера.
FSCTL_SET_OBJECT_ID_EXTENDED — не подходит, так как задаёт только 48 байт, а
первый идентификатор оставляет неизменным.

FSCTL_DELETE_OBJECT_ID — удаляет существующий Object Id, если у файла он есть.
Судя по MSDN для его вызова нужны точно такие же привилегии, как и для вызова FSCTL_SET_OBJECT_ID.
Так почему же удаление работает, а создание — нет?
ntfs object_id
Re: Не создаётся Object Id на NTFS
От: x64 Россия http://x64blog.name
Дата: 29.03.11 19:22
Оценка:
А>Всё время получаю ошибку access denied, ничего не создаётся.

А это вот не твой случай?

Attempting to set an object identifier on an object that already has an object identifier will fail. An attempt to use an object identifier that is already in use on the volume will also fail.


И ты уверен вообще, что правильно используешь Object IDs? Чего ты хочешь добиться в итоге?
JID: x64j@jabber.ru
Re[2]: Не создаётся Object Id на NTFS
От: амдф Российская Империя http://hex.pp.ua/
Дата: 30.03.11 04:25
Оценка:
Здравствуйте, x64, Вы писали:

А>>Всё время получаю ошибку access denied, ничего не создаётся.


x64>А это вот не твой случай?


x64>

x64>Attempting to set an object identifier on an object that already has an object identifier will fail. An attempt to use an object identifier that is already in use on the volume will also fail.


x64>И ты уверен вообще, что правильно используешь Object IDs? Чего ты хочешь добиться в итоге?


Первый случай — уверен, так как у файла в момент создания отсутствует object id. Проверку его наличия, чтение его данных и удаление
я уже умею. Добиться хочу создания объектного идентификатора при помощи FSCTL_SET_OBJECT_ID.
Второй случай — я брал GUID существующего файла и менял там последние 5 цифр на другие. Вроде бы этого достаточно, чтобы получить
уникальный GUID для данного конкретного файла.
Re: Не создаётся Object Id на NTFS
От: амдф Российская Империя http://hex.pp.ua/
Дата: 27.09.11 06:04
Оценка:
Мне подсказали рабочий вариант, прислали на почту. Решение проблемы выложил здесь: http://hex.pp.ua/set-object-id.php
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.