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)