static WindowsFileAttributes fromFindData(long address){
  int fileAttrs=unsafe.getInt(address + OFFSETOF_FIND_DATA_ATTRIBUTES);
  long creationTime=unsafe.getLong(address + OFFSETOF_FIND_DATA_CREATETIME);
  long lastAccessTime=unsafe.getLong(address + OFFSETOF_FIND_DATA_LASTACCESSTIME);
  long lastWriteTime=unsafe.getLong(address + OFFSETOF_FIND_DATA_LASTWRITETIME);
  long size=((long)(unsafe.getInt(address + OFFSETOF_FIND_DATA_SIZEHIGH)) << 32) + (unsafe.getInt(address + OFFSETOF_FIND_DATA_SIZELOW) & 0xFFFFFFFFL);
  int reparseTag=isReparsePoint(fileAttrs) ? unsafe.getInt(address + OFFSETOF_FIND_DATA_RESERVED0) : 0;
  return new WindowsFileAttributes(fileAttrs,creationTime,lastAccessTime,lastWriteTime,size,reparseTag,0,0,0);
}

static WindowsFileAttributes fromFindData ( long address ) { int fileAttrs = unsafe . getInt ( address + OFFSETOF_FIND_DATA_ATTRIBUTES ) ; long creationTime = unsafe . getLong ( address + OFFSETOF_FIND_DATA_CREATETIME ) ; long lastAccessTime = unsafe . getLong ( address + OFFSETOF_FIND_DATA_LASTACCESSTIME ) ; long lastWriteTime = unsafe . getLong ( address + OFFSETOF_FIND_DATA_LASTWRITETIME ) ; long size = ( ( long ) ( unsafe . getInt ( address + OFFSETOF_FIND_DATA_SIZEHIGH ) ) << 32 ) + ( unsafe . getInt ( address + OFFSETOF_FIND_DATA_SIZELOW ) & 0xFFFFFFFFL ) ; int reparseTag = isReparsePoint ( fileAttrs ) ? unsafe . getInt ( address + OFFSETOF_FIND_DATA_RESERVED0 ) : 0 ; return new WindowsFileAttributes ( fileAttrs , creationTime , lastAccessTime , lastWriteTime , size , reparseTag , 0 , 0 , 0 ) ; }
create a windowsfileattributes from a win32_find_data structure
