code: def close(self, get_attributes=False, send=True):
          
          # it is already closed and this isn't for an out of band request
          if not self._connected and send:
              return
  
          close = SMB2CloseRequest()
  
          close['file_id'] = self.file_id
          if get_attributes:
              close['flags'] = CloseFlags.SMB2_CLOSE_FLAG_POSTQUERY_ATTRIB
  
          if not send:
              return close, self._close_response
  
          log.info("Session: %s, Tree Connect: %s - sending SMB2 Close Request "
                   "for file %s" % (self.tree_connect.session.username,
                                    self.tree_connect.share_name,
                                    self.file_name))
          log.debug(str(close))
          request = self.connection.send(close,
                                         self.tree_connect.session.session_id,
                                         self.tree_connect.tree_connect_id)
          return self._close_response(request)
docs: Closes an opened file.
  
          Supports out of band send function, call this function with send=False
          to return a tuple of (SMB2CloseRequest, receive_func) instead of
          sending the the request and waiting for the response. The receive_func
          can be used to get the response from the server by passing in the
          Request that was used to sent it out of band.
  
          :param get_attributes: (Bool) whether to get the latest attributes on
              the close and set them on the Open object
          :param send: Whether to send the request in the same call or return the
              message to the caller and the unpack function
          :return: SMB2CloseResponse message received from the server