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


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

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

Синтаксис

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

Параметры

hDevice

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

dwIoControlCode

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

lpInBuffer

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

nInBufferSize

Не используется этой операцией; устанавливается в нуль ('0').

lpOutBuffer

[out] Указатель на буфер вывода данных, на структуру FILE_OBJECTID_BUFFER. Идентификатор объекта, связанный с параметром hDevice возвращается в этом буфере.

nOutBufferSize

[in] Размер буфера вывода данных, в байтах. Буфер должен быть достаточно большим, чтобы содержать структуру FILE_OBJECTID_BUFFER.

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_GET_OBJECT_ID. Чтобы создать идентификатор объекта без начальной проверки его присутствия, используйте операцию FSCTL_SET_OBJECT_ID.

Смотри также

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

Размещение и совместимость FSCTL_CREATE_OR_GET_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