다음을 통해 공유


IoCheckEaBufferValidity 함수(ntifs.h)

IoCheckEaBufferValidity 루틴은 지정된 EA(확장 특성) 버퍼가 유효한지 여부를 확인합니다.

구문

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

매개 변수

[in] EaBuffer

검사할 EA가 포함된 버퍼에 대한 포인터입니다.

[in] EaLength

EaBuffer의 길이(바이트)입니다.

[out] ErrorOffset

오류가 발견되면 EA 버퍼에서 잘못된 항목의 오프셋을 수신하는 변수에 대한 포인터입니다. 이 변수는 오류가 발생하는 경우에만 유효합니다.

반환 값

IoCheckEaBufferValidity 는 EA 버퍼가 유효한 경우 STATUS_SUCCESS 반환합니다. 그렇지 않으면 STATUS_EA_LIST_INCONSISTENT 반환합니다.

설명

IoCheckEaBufferValidity 는 지정된 EA 버퍼의 각 FILE_FULL_EA_INFORMATION 항목을 검사하여 다음 조건이 충족되는지 확인합니다.

  • 전체 항목은 버퍼 내에 있어야 합니다.

  • EaName 값은 null로 끝나는 문자 배열이어야 합니다.

  • EaNameLength 값은 EaName 배열의 길이(바이트)와 일치해야 합니다(0 종결자를 포함하지 않음).

  • 마지막을 제외한 모든 항목의 경우 NextEntryOffset 값은 0보다 커야 하며 ULONG 경계에 있어야 합니다.

또한 IoCheckEaBufferValidity 는 EA 버퍼를 검사하여 다음 조건이 충족되는지 확인합니다.

  • EaLength에서 전달된 길이는 버퍼의 실제 길이와 일치합니다.

  • 실제 버퍼 길이는 무한합니다.

유효하려면 EA 버퍼가 이러한 모든 조건을 충족해야 합니다.

IoCheckEaBufferValidityEaBuffer 의 콘텐츠가 비동기적으로 변경되지 않도록 동기화를 수행하지 않습니다. 사용자 모드 애플리케이션이 다른 스레드의 버퍼에 액세스할 수 있는 경우 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