Example #1
0
    def test__init__(self):
        ae = self.assertEqual

        filename0 = join("data", "lnk", "shortcut_to_local_exe.lnk")
        filename1 = join("data", "lnk", "shortcut_to_mapped_exe.lnk")

        stream0 = RawIStream(filename0)
        stream1 = RawIStream(filename1)

        sl0 = ShellLink(stream0)
        sl1 = ShellLink(stream0, 0)

        sl2 = ShellLink(stream1)
        sl3 = ShellLink(stream1, 0)

        header0 = ShellLinkHeader.from_stream(stream0, 0)
        header1 = ShellLinkHeader.from_stream(stream1, 0)
        ae(sl0.header, header0)
        ae(sl1.header, header0)
        ae(sl2.header, header1)
        ae(sl3.header, header1)

        idlist0 = ITEMIDLIST.from_stream(stream0, 78)
        ae(sl0.idlist, idlist0)
        ae(sl1.idlist, idlist0)
        ae(sl2.idlist, None)
        ae(sl3.idlist, None)

        li0 = LinkInfo.from_stream(stream0, 285)
        li1 = LinkInfo.from_stream(stream1, 76)
        ae(sl0.link_info, li0)
        ae(sl1.link_info, li0)
        ae(sl2.link_info, li1)
        ae(sl3.link_info, li1)

        sds0 = StringDataSet(
            (StringData((16, 7, "comment")),
             StringData((52, 25, "..\\..\\..\\Windows\PING.EXE")),
             StringData((32, 15, "c:\\start-in-dir")),
             StringData((30, 14, "arg1 arg2 arg3")),
             StringData((68, 33, "%SystemRoot%\\system32\\SHELL32.dll"))))

        sds1 = StringDataSet(
            (None, None, StringData(
                (40, 19, "X:\\windows\\system32")), None, None))

        ae(sl0.string_data, sds0)
        ae(sl1.string_data, sds0)
        ae(sl2.string_data, sds1)
        ae(sl3.string_data, sds1)

        edbs0 = list(ExtraDataBlockFactory.make_blocks(stream0, 549))
        edbs1 = list(ExtraDataBlockFactory.make_blocks(stream1, 217))
        ae(sl0.extra_data, edbs0)
        ae(sl1.extra_data, edbs0)
        ae(sl2.extra_data, edbs1)
        ae(sl3.extra_data, edbs1)
Example #2
0
    def test_from_stream(self):
        ae = self.assertEqual

        item1 = b"\x06\x00\x01\x02\x03\x04"
        item2 = b"\x05\x00\x05\x06\x07"
        item3 = b"\x04\x00\x08\x09"
        little_item = b"\x01\x00"
        big_item = b"\xFF\x00\x64\x53"
        null_item = b"\x00\x00"

        itemid1 = SHITEMID((6, 6, b"\x01\x02\x03\x04"))
        itemid2 = SHITEMID((5, 5, b"\x05\x06\x07"))
        itemid3 = SHITEMID((4, 4, b"\x08\x09"))
        little_itemid = SHITEMID((2, 1, None))
        big_itemid = SHITEMID((4, 0xFF, b"\x64\x53"))
        null_itemid = SHITEMID((2, 0, None))
        zero_itemid = SHITEMID((0, 0, None))


        stream = ByteIStream(b"".join([item1, item2, item3, null_item]))
        list1 = ITEMIDLIST.from_stream(stream, max_bytes=stream.size)
        list2 = ITEMIDLIST.from_stream(stream, 0, max_bytes=stream.size)
        list3 = ITEMIDLIST.from_stream(stream, 0)

        ae(list1.mkid, [itemid1, itemid2, itemid3, null_itemid])
        ae(list2.mkid, [itemid1, itemid2, itemid3, null_itemid])
        ae(list3.mkid, [itemid1, itemid2, itemid3, null_itemid])


        stream = ByteIStream(b"".join([item1, item2, item3, big_item]))
        list1 = ITEMIDLIST.from_stream(stream)
        ae(list1.mkid, [itemid1, itemid2, itemid3, big_itemid, zero_itemid])


        stream = ByteIStream(b"".join([item1, little_item, item2]))
        list1 = ITEMIDLIST.from_stream(stream)
        ae(list1.mkid, [itemid1, little_itemid])


        stream = ByteIStream(b"".join([item1, item2, item3]))
        list1 = ITEMIDLIST.from_stream(stream, max_bytes=13)
        list2 = ITEMIDLIST.from_stream(stream, 0, max_bytes=14)

        ae(list1.mkid, [itemid1, itemid2])
        ae(list2.mkid, [itemid1, itemid2])
Example #3
0
    def test__init__(self):
        ae = self.assertEqual

        filename0 = join("data", "lnk", "shortcut_to_local_exe.lnk")
        filename1 = join("data", "lnk", "shortcut_to_mapped_exe.lnk")

        stream0 = RawIStream(filename0)
        stream1 = RawIStream(filename1)

        sl0 = ShellLink(stream0)
        sl1 = ShellLink(stream0, 0)

        sl2 = ShellLink(stream1)
        sl3 = ShellLink(stream1, 0)

        header0 = ShellLinkHeader.from_stream(stream0, 0)
        header1 = ShellLinkHeader.from_stream(stream1, 0)
        ae(sl0.header, header0)
        ae(sl1.header, header0)
        ae(sl2.header, header1)
        ae(sl3.header, header1)

        idlist0 = ITEMIDLIST.from_stream(stream0, 78)
        ae(sl0.idlist, idlist0)
        ae(sl1.idlist, idlist0)
        ae(sl2.idlist, None)
        ae(sl3.idlist, None)

        li0 = LinkInfo.from_stream(stream0, 285)
        li1 = LinkInfo.from_stream(stream1, 76)
        ae(sl0.link_info, li0)
        ae(sl1.link_info, li0)
        ae(sl2.link_info, li1)
        ae(sl3.link_info, li1)

        sds0 = StringDataSet((
            StringData((16, 7, "comment")),
            StringData((52, 25, "..\\..\\..\\Windows\PING.EXE")),
            StringData((32, 15, "c:\\start-in-dir")),
            StringData((30, 14, "arg1 arg2 arg3")),
            StringData((68, 33, "%SystemRoot%\\system32\\SHELL32.dll"))
        ))

        sds1 = StringDataSet((
            None,
            None,
            StringData((40, 19, "X:\\windows\\system32")),
            None,
            None
        ))

        ae(sl0.string_data, sds0)
        ae(sl1.string_data, sds0)
        ae(sl2.string_data, sds1)
        ae(sl3.string_data, sds1)

        edbs0 = list(ExtraDataBlockFactory.make_blocks(stream0, 549))
        edbs1 = list(ExtraDataBlockFactory.make_blocks(stream1, 217))
        ae(sl0.extra_data, edbs0)
        ae(sl1.extra_data, edbs0)
        ae(sl2.extra_data, edbs1)
        ae(sl3.extra_data, edbs1)