static WindowsFileAttributes readAttributes(long handle) throws WindowsException {
  NativeBuffer buffer=NativeBuffers.getNativeBuffer(SIZEOF_FILE_INFORMATION);
  try {
    long address=buffer.address();
    GetFileInformationByHandle(handle,address);
    int reparseTag=0;
    int fileAttrs=unsafe.getInt(address + OFFSETOF_FILE_INFORMATION_ATTRIBUTES);
    if (isReparsePoint(fileAttrs)) {
      int size=MAXIMUM_REPARSE_DATA_BUFFER_SIZE;
      NativeBuffer reparseBuffer=NativeBuffers.getNativeBuffer(size);
      try {
        DeviceIoControlGetReparsePoint(handle,reparseBuffer.address(),size);
        reparseTag=(int)unsafe.getLong(reparseBuffer.address());
      }
  finally {
        reparseBuffer.release();
      }
    }
    return fromFileInformation(address,reparseTag);
  }
  finally {
    buffer.release();
  }
}

static WindowsFileAttributes readAttributes ( long handle ) throws WindowsException { NativeBuffer buffer = NativeBuffers . getNativeBuffer ( SIZEOF_FILE_INFORMATION ) ; try { long address = buffer . address ( ) ; GetFileInformationByHandle ( handle , address ) ; int reparseTag = 0 ; int fileAttrs = unsafe . getInt ( address + OFFSETOF_FILE_INFORMATION_ATTRIBUTES ) ; if ( isReparsePoint ( fileAttrs ) ) { int size = MAXIMUM_REPARSE_DATA_BUFFER_SIZE ; NativeBuffer reparseBuffer = NativeBuffers . getNativeBuffer ( size ) ; try { DeviceIoControlGetReparsePoint ( handle , reparseBuffer . address ( ) , size ) ; reparseTag = ( int ) unsafe . getLong ( reparseBuffer . address ( ) ) ; } finally { reparseBuffer . release ( ) ; } } return fromFileInformation ( address , reparseTag ) ; } finally { buffer . release ( ) ; } }
reads the attributes of an open file
