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)
def test_from_stream(self): ae = self.assertEqual ain = self.assertIsNone ainn = self.assertIsNotNone data0 = bytearray() # link info header data0.extend(b"\x78\x00\x00\x00") # link info size data0.extend(b"\x24\x00\x00\x00") # link info header size data0.extend(b"\x13\x00\x00\x00") # link info flags data0.extend(b"\x24\x00\x00\x00") # volume id offset data0.extend(b"\x3C\x00\x00\x00") # local base path offset data0.extend(b"\x40\x00\x00\x00") # cnrl offset data0.extend(b"\x6C\x00\x00\x00") # common path suffix offset data0.extend(b"\x70\x00\x00\x00") # local base path offset unicode data0.extend(b"\x74\x00\x00\x00") # comon path suffix offset unicode # volume id data0.extend(b"\x18\x00\x00\x00") # volume id size data0.extend(b"\x01\x02\x03\x04") # drive type data0.extend(b"\x05\x06\x07\x08") # drive serial number data0.extend(b"\x14\x00\x00\x00") # volume label offset data0.extend(b"\x14\x00\x00\x00") data0.extend(b"d\x00\x00\x00") # data # local base path data0.extend(b"ijk\x00") # cnrl data0.extend(b"\x2C\x00\x00\x00") # cnrl size data0.extend(b"\x03\x00\x00\x00") # cnrl flags data0.extend(b"\x1C\x00\x00\x00") # net name offset data0.extend(b"\x20\x00\x00\x00") # device name offset data0.extend(b"\x64\x53\x64\x53") # network provider type data0.extend(b"\x24\x00\x00\x00") # net name offset unicode data0.extend(b"\x28\x00\x00\x00") # device name offset unicode data0.extend(b"abc\x00") # net name data0.extend(b"def\x00") # device name data0.extend(b"g\x00\x00\x00") # net name unicode data0.extend(b"h\x00\x00\x00") # device name unicode # common path suffix data0.extend(b"lmn\x00") # local base path unicode data0.extend(b"o\x00\x00\x00") # common path suffix unicode data0.extend(b"p\x00\x00\x00") stream0 = ByteIStream(data0) stream1 = ByteIStream(b"".join([b"\x64\x53", data0])) li0 = LinkInfo.from_stream(stream0) li1 = LinkInfo.from_stream(stream1, 2) volid = VolumeID((0x18, 0x04030201, 0x08070605, 0x14, 0x14, "d")) cnrl = CNRL((0x2C, 1, 1, 0x1C, 0x20, 0x53645364, 0x24, 0x28, b"abc", b"def", "g", "h")) ae(li0.size, 0x78) ae(li1.size, 0x78) ae(li0.header_size, 0x24) ae(li1.header_size, 0x24) ae(li0.vol_id_and_local_base_path, 1) ae(li1.vol_id_and_local_base_path, 1) ae(li0.cnrl_and_path_suffix, 1) ae(li1.cnrl_and_path_suffix, 1) ae(li0.vol_id_offset, 0x24) ae(li1.vol_id_offset, 0x24) ae(li0.local_base_path_offset, 0x3C) ae(li1.local_base_path_offset, 0x3C) ae(li0.cnrl_offset, 0x40) ae(li1.cnrl_offset, 0x40) ae(li0.path_suffix_offset, 0x6C) ae(li1.path_suffix_offset, 0x6C) ae(li0.local_base_path_offset_uni, 0x70) ae(li1.local_base_path_offset_uni, 0x70) ae(li0.path_suffix_offset_uni, 0x74) ae(li1.path_suffix_offset_uni, 0x74) ae(li0.vol_id, volid) ae(li1.vol_id, volid) ae(li0.cnrl, cnrl) ae(li1.cnrl, cnrl)
def test_from_stream(self): ae = self.assertEqual ain = self.assertIsNone ainn = self.assertIsNotNone data0 = bytearray() # link info header data0.extend(b"\x78\x00\x00\x00") # link info size data0.extend(b"\x24\x00\x00\x00") # link info header size data0.extend(b"\x13\x00\x00\x00") # link info flags data0.extend(b"\x24\x00\x00\x00") # volume id offset data0.extend(b"\x3C\x00\x00\x00") # local base path offset data0.extend(b"\x40\x00\x00\x00") # cnrl offset data0.extend(b"\x6C\x00\x00\x00") # common path suffix offset data0.extend(b"\x70\x00\x00\x00") # local base path offset unicode data0.extend(b"\x74\x00\x00\x00") # comon path suffix offset unicode # volume id data0.extend(b"\x18\x00\x00\x00") # volume id size data0.extend(b"\x01\x02\x03\x04") # drive type data0.extend(b"\x05\x06\x07\x08") # drive serial number data0.extend(b"\x14\x00\x00\x00") # volume label offset data0.extend(b"\x14\x00\x00\x00") data0.extend(b"d\x00\x00\x00") # data # local base path data0.extend(b"ijk\x00") # cnrl data0.extend(b"\x2C\x00\x00\x00") # cnrl size data0.extend(b"\x03\x00\x00\x00") # cnrl flags data0.extend(b"\x1C\x00\x00\x00") # net name offset data0.extend(b"\x20\x00\x00\x00") # device name offset data0.extend(b"\x64\x53\x64\x53") # network provider type data0.extend(b"\x24\x00\x00\x00") # net name offset unicode data0.extend(b"\x28\x00\x00\x00") # device name offset unicode data0.extend(b"abc\x00") # net name data0.extend(b"def\x00") # device name data0.extend(b"g\x00\x00\x00") # net name unicode data0.extend(b"h\x00\x00\x00") # device name unicode # common path suffix data0.extend(b"lmn\x00") # local base path unicode data0.extend(b"o\x00\x00\x00") # common path suffix unicode data0.extend(b"p\x00\x00\x00") stream0 = ByteIStream(data0) stream1 = ByteIStream(b"".join([b"\x64\x53", data0])) li0 = LinkInfo.from_stream(stream0) li1 = LinkInfo.from_stream(stream1, 2) volid = VolumeID((0x18, 0x04030201, 0x08070605, 0x14, 0x14, "d")) cnrl = CNRL(( 0x2C, 1, 1, 0x1C, 0x20, 0x53645364, 0x24, 0x28, b"abc", b"def", "g", "h" )) ae(li0.size, 0x78) ae(li1.size, 0x78) ae(li0.header_size, 0x24) ae(li1.header_size, 0x24) ae(li0.vol_id_and_local_base_path, 1) ae(li1.vol_id_and_local_base_path, 1) ae(li0.cnrl_and_path_suffix, 1) ae(li1.cnrl_and_path_suffix, 1) ae(li0.vol_id_offset, 0x24) ae(li1.vol_id_offset, 0x24) ae(li0.local_base_path_offset, 0x3C) ae(li1.local_base_path_offset, 0x3C) ae(li0.cnrl_offset, 0x40) ae(li1.cnrl_offset, 0x40) ae(li0.path_suffix_offset, 0x6C) ae(li1.path_suffix_offset, 0x6C) ae(li0.local_base_path_offset_uni, 0x70) ae(li1.local_base_path_offset_uni, 0x70) ae(li0.path_suffix_offset_uni, 0x74) ae(li1.path_suffix_offset_uni, 0x74) ae(li0.vol_id, volid) ae(li1.vol_id, volid) ae(li0.cnrl, cnrl) ae(li1.cnrl, cnrl)
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)