def METHOD_NAME(self) -> Dict[str, Any]:
    with open(self.filepath, "rb") as f:
        if HAVE_LNK3:
            try:
                data = LnkParse3.lnk_file(f).get_json(get_all=True)
                if "creation_time" in data.get("header", {}) and data["header"].get("creation_time"):
                    data["header"]["creation_time"] = data["header"]["creation_time"].strftime("%Y-%m-%d %H:%S:%M")
                if "accessed_time" in data.get("header", {}) and data["header"].get("accessed_time"):
                    data["header"]["accessed_time"] = data["header"]["accessed_time"].strftime("%Y-%m-%d %H:%S:%M")
                if "modified_time" in data.get("header", {}) and data["header"].get("modified_time"):
                    data["header"]["modified_time"] = data["header"]["modified_time"].strftime("%Y-%m-%d %H:%S:%M")
            except (LnkParserError, struct.error) as e:
                log.error("Parse LNK error: %s", str(e))
                return {}
            # breaks json due to datetime objects
            if "target" in data:
                del data["target"]
            return data
        else:
            self.buf = f.read()
            if len(self.buf) < ctypes.sizeof(LnkHeader):
                log.warning("Provided .lnk file is corrupted or incomplete")
                return
            header = LnkHeader.from_buffer_copy(self.buf[: ctypes.sizeof(LnkHeader)])
            if header.signature.copy() != self.signature or header.guid.copy() != self.guid:
                return
            ret = {"flags": {}, "attrs": []}
            for x in range(7):
                ret["flags"][self.flags[x]] = bool(header.flags & (1 << x))
            for x in range(14):
                if header.attrs & (1 << x):
                    ret["attrs"].append(self.attrs[x])
            offset = 78 + self.read_uint16(76)
            if len(self.buf) < offset + 28:
                log.warning("Provided .lnk file is corrupted or incomplete")
                return
            off = LnkEntry.from_buffer_copy(self.buf[offset : offset + 28])
            # Local volume.
            if off.volume_flags & 1:
                ret["basepath"] = self.read_stringz(offset + off.base_path)
            # Network volume.
            else:
                try:
                    ret["net_share"] = self.read_stringz(offset + off.net_volume + 20)
                except (TypeError, ValueError):
                    log.error("parse_lnk: subsection not found")
                network_drive = self.read_uint32(offset + off.net_volume + 12)
                if network_drive:
                    ret["network_drive"] = self.read_stringz(offset + network_drive)
            ret["remaining_path"] = self.read_stringz(offset + off.path_remainder)
            extra = offset + off.length
            if ret["flags"]["description"]:
                extra, ret["description"] = self.read_string16(extra)
            if ret["flags"]["relapath"]:
                extra, ret["relapath"] = self.read_string16(extra)
            if ret["flags"]["workingdir"]:
                extra, ret["workingdir"] = self.read_string16(extra)
            if ret["flags"]["cmdline"]:
                extra, ret["cmdline"] = self.read_string16(extra)
            if ret["flags"]["icon"]:
                extra, ret["icon"] = self.read_string16(extra)
            return ret