Управляющий код FSCTL_SET_OBJECT_ID


Управляющий код FSCTL_SET_OBJECT_ID устанавливает идентификатор объекта указанного файла или каталога.

Чтобы осуществить эту операцию, вызовите функцию DeviceIoControl с ниже перечисленными параметрами.

Синтаксис

BOOL DeviceIoControl(
  (HANDLE) hDevice,           // дескриптор устройства
  FSCTL_SET_OBJECT_ID,        // dwIoControlCode
  (LPVOID) lpInBuffer,        // буфер вводимых данных
  (DWORD) nInBufferSize,      // размер буфера выводимых данных
  NULL,                       // lpOutBuffer
  0,                          // nOutBufferSize
  (LPDWORD) lpBytesReturned,  // число возвращаемых данных
  (LPOVERLAPPED) lpOverlapped // структура OVERLAPPED
);        

Параметры

hDevice

[in] Дескриптор файла или каталога, в котором должен устанавливаться идентификатор объекта. Процесс, открывающий файл должен иметь привилегию восстановления, а файл должен открыться с предназначением восстановления и доступом для записи. Чтобы извлечь дескриптор устройства, вызовите функцию CreateFile.

dwIoControlCode

[in] Управляющий код для операции. Для этой операции используйте FSCTL_SET_OBJECT_ID.

lpInBuffer

[in] Указатель на буфер ввода данных, который - структура FILE_OBJECTID_BUFFER.

nInBufferSize

[in] Размер буфера ввода данных, в байтах.

lpOutBuffer

В этой операции не используется; устанавливается  в ПУСТО (NULL).

nOutBufferSize

В этой операции не используется; устанавливается в нуль.

lpBytesReturned

[out] Указатель на переменную, которая получает размер данных, сохраненных в буфере вывода, в байтах.

Если буфер вывода данных является слишком маленьким, то вызов завершается ошибкой и функция GetLastError возвращает значение ERROR_INSUFFICIENT_BUFFER, а параметр lpBytesReturned равняется нулю.

Если lpOverlapped - ПУСТО (NULL), lpBytesReturned не может быть ПУСТО (NULL). Даже тогда,  когда операция не возвращает никакого вывода данных, а lpOutBuffer - ПУСТО (NULL), DeviceIoControl использует lpBytesReturned. После такой операции, значение lpBytesReturned становится бессмысленным.

Если lpOverlapped - не ПУСТО (NULL), lpBytesReturned может быть ПУСТО (NULL). Если этот параметр - не ПУСТО (NULL), и операция возвращает данные, lpBytesReturned имеет значение не имеющее смысла до тех пор, пока асинхронная операция не завершиться. Чтобы извлечь информацию о числе возвращаемых данных, вызовите GetOverlappedResult. Если параметр hDevice связан с портом завершения ввода-вывода данных (I/O), Вы можете извлечь число возвращаемых данных при помощи вызова  функции GetQueuedCompletionStatus.

lpOverlapped
[in] Указатель на структуру OVERLAPPED.

Если  параметр hDevice открывался без определения FILE_FLAG_OVERLAPPED, параметр lpOverlapped игнорируется.

Если параметр hDevice открывался с флажком FILE_FLAG_OVERLAPPED, операция выполняется как перекрывающая (асинхронная) операция. В этой ситуации, параметр lpOverlapped должен указать на допустимую структуру OVERLAPPED, которая содержит дескриптор объекта события. В противном случае, функция завершается ошибкой непредсказуемыми способами.

Для асинхронных операций, DeviceIoControl возвращает значение немедленно, а объект события подает сигнал, когда операция завершается. В противном случае, функция не возвращает значение до тех пор, пока операция не завершится или не произойдет ошибка.

Возвращаемые значения

Если операция завершается успешно, DeviceIoControl возвращает ненулевое значение.

Если операция завершается ошибкой, DeviceIoControl возвращает нуль. Чтобы получить дополнительную информацию об ошибке, вызовите GetLastError.

Замечания

Идентификаторы объекта используются, чтобы отслеживать файлы и каталоги. Они невидимы в большинстве приложений и никогда не должны модифицироваться ими. Изменение идентификатора объекта может привести к потере данных от частей файла, вплоть до всего файла и включая полностью тома данных.

Используйте эту операцию, чтобы явно установить идентификатор объекта в значение, которое Вы  даете. Попытка установить идентификатор объекту, который уже его имеет, завершится ошибкой. Попытка использовать идентификатор объекта, который еще не использовался в томе, также завершится ошибкой. Используйте операцию FSCTL_CREATE_OR_GET_OBJECT_ID, чтобы получить файловую систему NTFS, которая генерирует идентификатор объекта, если объект уже имеется.

Обратите внимание! на то, что отметки времени не могут быть обновлены правильно для удаленного файла. Чтобы гарантировать непротиворечивые результаты, используйте не буферизованный ввод - вывод (I/O).

Смотри также

Обзор Управление файламиУправляющие коды, используемые файловыми системами, Идентификаторы объекта, DeviceIoControl, CreateFile, FILE_OBJECTID_BUFFER, FSCTL_CREATE_OR_GET_OBJECT_ID, FSCTL_DELETE_OBJECT_ID, FSCTL_SET_OBJECT_ID_EXTENDED

Размещение и совместимость FSCTL_SET_OBJECT_ID

К

Windows XP

Да 

л

Windows 2000 Professional

Да

и

Windows NT

Нет

е

Windows Me

Нет

н

Windows 98

Нет

т

Windows 95

Нет

 
С

Windows Server 2003

Да

е Windows 2000 Server Да
р Windows NT Server Нет
в    
е    
р    

Используемая библиотека

-

Используемая DLL -
 Заголовочный файл  

- объявлено в

Winioctl.h

 - включено в

-

 Unicode

-

 Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz