Не создаётся 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.