module Windows::NTFS::Winternl

Constants

FileAccessInformation
FileAlignmentInformation
FileAllInformation
FileAllocationInformation
FileAlternateNameInformation
FileAttributeTagInformation
FileBasicInformation
FileBothDirectoryInformation
FileCompletionInformation
FileCompressionInformation
FileDirectoryInformation
FileDispositionInformation
FileEaInformation
FileEndOfFileInformation
FileFullDirectoryInformation
FileFullEaInformation
FileHardLinkInformation
FileIdBothDirectoryInformation
FileIdFullDirectoryInformation
FileInternalInformation
FileLinkInformation
FileMailslotQueryInformation
FileMailslotSetInformation
FileModeInformation
FileMoveClusterInformation
FileNameInformation
FileNamesInformation
FileNetworkOpenInformation
FileObjectIdInformation
FilePipeInformation
FilePipeLocalInformation
FilePipeRemoteInformation
FilePositionInformation
FileQuotaInformation
FileRenameInformation
FileReparsePointInformation
FileShortNameInformation
FileStandardInformation
FileStreamInformation
FileTrackingInformation
FileValidDataLengthInformation
ObjectNameInformation
STATUS_SUCCESS

Private Instance Methods

GetFinalPathNameByHandle(handle, buffer, size, flags) click to toggle source

Simulates the GetFinalPathNameByHandle method. Note that the size and flags arguments are ignored, but are required for interface compatibility. The buffer is an in/out parameter.

The size argument simply isn't used internally and the flags argument is currently assumed to always be VOLUME_NAME_NT.

# File lib/windows/ntfs/winternl.rb, line 93
def GetFinalPathNameByHandle(handle, buffer, size, flags)
  mpath = 1024

  object_name_information = 0.chr * (8 + (mpath * 2))

  status = NtQueryObject(
    handle,
    ObjectNameInformation,
    object_name_information,
    object_name_information.size,
    0
  )

  if status > 0
    raise 'NtQueryObject function failed: ' + get_last_error
  end

  buffer.replace(wide_to_multi(object_name_information[8..-1]))
  buffer.size
end