code: def _parse_udf_descriptors(self):
          '''
          An internal method to parse the UDF descriptors on the ISO.  This should
          only be called if it the ISO has a valid UDF Volume Recognition Sequence
          at the beginning of the ISO.
          Parameters:
           None.
          Returns:
           Nothing.
          '''
          block_size = self.pvd.logical_block_size()
          anchor_locations = [(256 * block_size, os.SEEK_SET), (-2048, os.SEEK_END)]
          for loc, whence in anchor_locations:
              self._cdfp.seek(loc, whence)
              extent = self._cdfp.tell() // 2048
              anchor_data = self._cdfp.read(2048)
              anchor_tag = udfmod.UDFTag()
              anchor_tag.parse(anchor_data, extent)
              if anchor_tag.tag_ident != 2:
                  raise pycdlibexception.PyCdlibInvalidISO('UDF Anchor Tag identifier not 2')
              anchor = udfmod.UDFAnchorVolumeStructure()
              anchor.parse(anchor_data, extent, anchor_tag)
              self.udf_anchors.append(anchor)
          self._parse_udf_vol_descs(self.udf_anchors[0].main_vd_extent,
                                    self.udf_anchors[0].main_vd_length,
                                    self.udf_main_descs)
          self._parse_udf_vol_descs(self.udf_anchors[0].reserve_vd_extent,
                                    self.udf_anchors[0].reserve_vd_length,
                                    self.udf_reserve_descs)
          self._seek_to_extent(self.udf_main_descs.logical_volume.integrity_sequence_extent)
          integrity_data = self._cdfp.read(self.udf_main_descs.logical_volume.integrity_sequence_length)
          offset = 0
          current_extent = self.udf_main_descs.logical_volume.integrity_sequence_extent
          desc_tag = udfmod.UDFTag()
          desc_tag.parse(integrity_data[offset:], current_extent)
          if desc_tag.tag_ident != 9:
              raise pycdlibexception.PyCdlibInvalidISO('UDF Volume Integrity Tag identifier not 9')
          self.udf_logical_volume_integrity.parse(integrity_data[offset:offset + 512], current_extent, desc_tag)
          offset += block_size
          current_extent += 1
          desc_tag = udfmod.UDFTag()
          desc_tag.parse(integrity_data[offset:], current_extent)
          if desc_tag.tag_ident != 8:
              raise pycdlibexception.PyCdlibInvalidISO('UDF Logical Volume Integrity Terminator Tag identifier not 8')
          self.udf_logical_volume_integrity_terminator.parse(current_extent, desc_tag)
          current_extent = self.udf_main_descs.partition.part_start_location
          self._seek_to_extent(current_extent)
          file_set_and_term_data = self._cdfp.read(2 * block_size)
          desc_tag = udfmod.UDFTag()
          desc_tag.parse(file_set_and_term_data[:block_size], 0)
          if desc_tag.tag_ident != 256:
              raise pycdlibexception.PyCdlibInvalidISO('UDF File Set Tag identifier not 256')
          self.udf_file_set.parse(file_set_and_term_data[:block_size],
                                  current_extent, desc_tag)
          current_extent += 1
          desc_tag = udfmod.UDFTag()
          desc_tag.parse(file_set_and_term_data[block_size:],
                         current_extent - self.udf_main_descs.partition.part_start_location)
          if desc_tag.tag_ident != 8:
              raise pycdlibexception.PyCdlibInvalidISO('UDF File Set Terminator Tag identifier not 8')
          self.udf_file_set_terminator.parse(current_extent, desc_tag)