ARC_STATUS NtfsSeek(ULONG FileId, LARGE_INTEGER* Position, SEEKMODE SeekMode)
{
PNTFS_FILE_HANDLE FileHandle = FsGetDeviceSpecific(FileId);
+ LARGE_INTEGER NewPosition = *Position;
- TRACE("NtfsSeek() NewFilePointer = %lu\n", Position->LowPart);
+ switch (SeekMode)
+ {
+ case SeekAbsolute:
+ break;
+ case SeekRelative:
+ NewPosition.QuadPart += FileHandle->Offset;
+ break;
+ default:
+ ASSERT(FALSE);
+ return EINVAL;
+ }
- if (SeekMode != SeekAbsolute)
- return EINVAL;
- if (Position->HighPart != 0)
- return EINVAL;
- if (Position->LowPart >= (ULONG)NtfsGetAttributeSize(&FileHandle->DataContext->Record))
+ if (NewPosition.QuadPart >= NtfsGetAttributeSize(&FileHandle->DataContext->Record))
return EINVAL;
- FileHandle->Offset = Position->LowPart;
+ FileHandle->Offset = NewPosition.QuadPart;
return ESUCCESS;
}