Поделиться через


Функция IoCheckEaBufferValidity (ntifs.h)

Подпрограмма IoCheckEaBufferValidity проверяет, является ли указанный буфер расширенных атрибутов (EA) допустимым.

Синтаксис

NTSTATUS IoCheckEaBufferValidity(
  [in]  PFILE_FULL_EA_INFORMATION EaBuffer,
  [in]  ULONG                     EaLength,
  [out] PULONG                    ErrorOffset
);

Параметры

[in] EaBuffer

Указатель на буфер, содержащий проверяемые EAs.

[in] EaLength

Длина EaBuffer в байтах.

[out] ErrorOffset

Указатель на переменную, которая получает смещение оскорбляющей записи в буфере EA при обнаружении ошибки. Эта переменная действительна, только если возникает ошибка.

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

IoCheckEaBufferValidity возвращает STATUS_SUCCESS, если буфер EA действителен; в противном случае возвращается STATUS_EA_LIST_INCONSISTENT.

Комментарии

IoCheckEaBufferValidity проверяет каждую запись FILE_FULL_EA_INFORMATION в указанном буфере EA, чтобы убедиться, что выполняются следующие условия:

  • Вся запись должна находиться в буфере.

  • Значение EaName должно быть массивом символов, завершающемся нулевым значением.

  • Значение EaNameLength должно соответствовать длине в байтах массива EaName (не включая нулевой признак конца).

  • Для всех записей, кроме последней, значение NextEntryOffset должно быть больше нуля и попадать на границу ULONG.

Кроме того, IoCheckEaBufferValidity проверяет буфер EA, чтобы убедиться, что выполняются следующие условия:

  • Длина, переданная в EaLength , соответствует фактической длине буфера.

  • Фактическая длина буфера является неизрицательной.

Чтобы быть допустимым, буфер EA должен соответствовать всем этим условиям.

IoCheckEaBufferValidity не выполняет синхронизацию, чтобы убедиться, что содержимое EaBuffer не изменяется асинхронно. Если приложение пользовательского режима может получить доступ к буферу в другом потоке, приложение может изменить буфер во время выполнения IoCheckEaBufferValidity . Это изменение может привести к тому, что подпрограмма возвращает неверные сведения. Чтобы избежать этого сценария, драйвер должен скопировать буфер перед вызовом IoCheckEaBufferValidity. После проверки буфера вызывающий объект должен использовать только проверенную копию, а не исходный буфер.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть ntifs.h (включая Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL < DISPATCH_LEVEL

См. также раздел

FILE_FULL_EA_INFORMATION

IRP_MJ_QUERY_EA

IRP_MJ_SET_EA