digraph {
rankdir=LR;
node [shape=plaintext];
subgraph cluster__windows_lnk_file {
label="WindowsLnkFile";
graph[style=dotted];
windows_lnk_file__seq [label=<
pos | size | type | id |
0 | 76 | FileHeader | header |
76 | ... | LinkTargetIdList | target_id_list |
... | ... | LinkInfo | info |
... | ... | StringData | name |
... | ... | StringData | rel_path |
... | ... | StringData | work_dir |
... | ... | StringData | arguments |
... | ... | StringData | icon_location |
>];
subgraph cluster__link_target_id_list {
label="WindowsLnkFile::LinkTargetIdList";
graph[style=dotted];
link_target_id_list__seq [label=<
pos | size | type | id |
0 | 2 | u2le | len_id_list |
2 | len_id_list | WindowsShellItems | id_list |
>];
}
subgraph cluster__string_data {
label="WindowsLnkFile::StringData";
graph[style=dotted];
string_data__seq [label=<
pos | size | type | id |
0 | 2 | u2le | chars_str |
2 | (chars_str * 2) | str(UTF-16LE) | str |
>];
}
subgraph cluster__link_info {
label="WindowsLnkFile::LinkInfo";
graph[style=dotted];
link_info__seq [label=<
pos | size | type | id |
0 | 4 | u4le | len_all |
4 | (len_all - 4) | All | all |
>];
subgraph cluster__volume_id_body {
label="WindowsLnkFile::LinkInfo::VolumeIdBody";
graph[style=dotted];
volume_id_body__seq [label=<
pos | size | type | id |
0 | 4 | u4le→DriveTypes | drive_type |
4 | 4 | u4le | drive_serial_number |
8 | 4 | u4le | ofs_volume_label |
12 | 4 | u4le | ofs_volume_label_unicode |
>];
volume_id_body__inst__is_unicode [label=<
id | value |
is_unicode | ofs_volume_label == 20 |
>];
volume_id_body__inst__volume_label_ansi [label=<
pos | size | type | id |
(ofs_volume_label - 4) | ... | str(cp437) | volume_label_ansi |
>];
}
subgraph cluster__all {
label="WindowsLnkFile::LinkInfo::All";
graph[style=dotted];
all__seq [label=<
pos | size | type | id |
0 | 4 | u4le | len_header |
4 | (len_header - 8) | Header | header |
>];
all__inst__volume_id [label=<
pos | size | type | id |
(header.ofs_volume_id - 4) | ... | VolumeIdSpec | volume_id |
>];
all__inst__local_base_path [label=<
pos | size | type | id |
(header.ofs_local_base_path - 4) | ... | | local_base_path |
>];
}
subgraph cluster__volume_id_spec {
label="WindowsLnkFile::LinkInfo::VolumeIdSpec";
graph[style=dotted];
volume_id_spec__seq [label=<
pos | size | type | id |
0 | 4 | u4le | len_all |
4 | (len_all - 4) | VolumeIdBody | body |
>];
}
subgraph cluster__link_info_flags {
label="WindowsLnkFile::LinkInfo::LinkInfoFlags";
graph[style=dotted];
link_info_flags__seq [label=<
pos | size | type | id |
0 | 6b | b6 | reserved1 |
0:6 | 1b | BitsType1(BigBitEndian) | has_common_net_rel_link |
0:7 | 1b | BitsType1(BigBitEndian) | has_volume_id_and_local_base_path |
1 | 3 | b24 | reserved2 |
>];
}
subgraph cluster__header {
label="WindowsLnkFile::LinkInfo::Header";
graph[style=dotted];
header__seq [label=<
pos | size | type | id |
0 | 4 | LinkInfoFlags | flags |
4 | 4 | u4le | ofs_volume_id |
8 | 4 | u4le | ofs_local_base_path |
12 | 4 | u4le | ofs_common_net_rel_link |
16 | 4 | u4le | ofs_common_path_suffix |
20 | 4 | u4le | ofs_local_base_path_unicode |
24 | 4 | u4le | ofs_common_path_suffix_unicode |
>];
}
}
subgraph cluster__link_flags {
label="WindowsLnkFile::LinkFlags";
graph[style=dotted];
link_flags__seq [label=<
pos | size | type | id |
0 | 1b | BitsType1(BigBitEndian) | is_unicode |
0:1 | 1b | BitsType1(BigBitEndian) | has_icon_location |
0:2 | 1b | BitsType1(BigBitEndian) | has_arguments |
0:3 | 1b | BitsType1(BigBitEndian) | has_work_dir |
0:4 | 1b | BitsType1(BigBitEndian) | has_rel_path |
0:5 | 1b | BitsType1(BigBitEndian) | has_name |
0:6 | 1b | BitsType1(BigBitEndian) | has_link_info |
0:7 | 1b | BitsType1(BigBitEndian) | has_link_target_id_list |
1 | 2 | b16 | _unnamed8 |
3 | 5b | b5 | reserved |
3:5 | 1b | BitsType1(BigBitEndian) | keep_local_id_list_for_unc_target |
3:6 | 2b | b2 | _unnamed11 |
>];
}
subgraph cluster__file_header {
label="WindowsLnkFile::FileHeader";
graph[style=dotted];
file_header__seq [label=<
pos | size | type | id |
0 | 4 | | len_header |
4 | 16 | | link_clsid |
20 | 4 | LinkFlags | flags |
24 | 4 | u4le | file_attrs |
28 | 8 | u8le | time_creation |
36 | 8 | u8le | time_access |
44 | 8 | u8le | time_write |
52 | 4 | u4le | target_file_size |
56 | 4 | s4le | icon_index |
60 | 4 | u4le→WindowState | show_command |
64 | 2 | u2le | hotkey |
66 | 10 | | reserved |
>];
}
}
windows_lnk_file__seq:header_type -> file_header__seq [style=bold];
windows_lnk_file__seq:target_id_list_type -> link_target_id_list__seq [style=bold];
windows_lnk_file__seq:info_type -> link_info__seq [style=bold];
windows_lnk_file__seq:name_type -> string_data__seq [style=bold];
windows_lnk_file__seq:rel_path_type -> string_data__seq [style=bold];
windows_lnk_file__seq:work_dir_type -> string_data__seq [style=bold];
windows_lnk_file__seq:arguments_type -> string_data__seq [style=bold];
windows_lnk_file__seq:icon_location_type -> string_data__seq [style=bold];
link_target_id_list__seq:len_id_list_type -> link_target_id_list__seq:id_list_size [color="#404040"];
link_target_id_list__seq:id_list_type -> windows_shell_items__seq [style=bold];
string_data__seq:chars_str_type -> string_data__seq:str_size [color="#404040"];
link_info__seq:len_all_type -> link_info__seq:all_size [color="#404040"];
link_info__seq:all_type -> all__seq [style=bold];
volume_id_body__seq:ofs_volume_label_type -> volume_id_body__inst__is_unicode [color="#404040"];
volume_id_body__seq:ofs_volume_label_type -> volume_id_body__inst__volume_label_ansi:volume_label_ansi_pos [color="#404040"];
all__seq:len_header_type -> all__seq:header_size [color="#404040"];
all__seq:header_type -> header__seq [style=bold];
header__seq:ofs_volume_id_type -> all__inst__volume_id:volume_id_pos [color="#404040"];
all__inst__volume_id:volume_id_type -> volume_id_spec__seq [style=bold];
header__seq:ofs_local_base_path_type -> all__inst__local_base_path:local_base_path_pos [color="#404040"];
volume_id_spec__seq:len_all_type -> volume_id_spec__seq:body_size [color="#404040"];
volume_id_spec__seq:body_type -> volume_id_body__seq [style=bold];
header__seq:flags_type -> link_info_flags__seq [style=bold];
file_header__seq:flags_type -> link_flags__seq [style=bold];
}