digraph {
rankdir=LR;
node [shape=plaintext];
subgraph cluster__windows_shell_items {
label="WindowsShellItems";
graph[style=dotted];
windows_shell_items__seq [label=<
pos | size | type | id |
0 | ... | ShellItem | items |
repeat until _.len_data == 0 |
>];
subgraph cluster__shell_item_data {
label="WindowsShellItems::ShellItemData";
graph[style=dotted];
shell_item_data__seq [label=<
pos | size | type | id |
0 | 1 | u1 | code |
1 | ... | switch (code) | body1 |
... | ... | switch ((code & 112)) | body2 |
>];
shell_item_data__seq_body1_switch [label=<
case | type |
31 | RootFolderBody |
>];
shell_item_data__seq_body2_switch [label=<
case | type |
32 | VolumeBody |
48 | FileEntryBody |
>];
}
subgraph cluster__shell_item {
label="WindowsShellItems::ShellItem";
graph[style=dotted];
shell_item__seq [label=<
pos | size | type | id |
0 | 2 | u2le | len_data |
2 | (len_data - 2) | ShellItemData | data |
>];
}
subgraph cluster__root_folder_body {
label="WindowsShellItems::RootFolderBody";
graph[style=dotted];
root_folder_body__seq [label=<
pos | size | type | id |
0 | 1 | u1 | sort_index |
1 | 16 | | shell_folder_id |
>];
}
subgraph cluster__volume_body {
label="WindowsShellItems::VolumeBody";
graph[style=dotted];
volume_body__seq [label=<>];
}
subgraph cluster__file_entry_body {
label="WindowsShellItems::FileEntryBody";
graph[style=dotted];
file_entry_body__seq [label=<
pos | size | type | id |
0 | 1 | u1 | _unnamed0 |
1 | 4 | u4le | file_size |
5 | 4 | u4le | last_mod_time |
9 | 2 | u2le | file_attrs |
>];
file_entry_body__inst__is_dir [label=<
id | value |
is_dir | (_parent.code & 1) != 0 |
>];
file_entry_body__inst__is_file [label=<
id | value |
is_file | (_parent.code & 2) != 0 |
>];
}
}
windows_shell_items__seq:items_type -> shell_item__seq [style=bold];
shell_item__seq:len_data_type -> windows_shell_items__seq:items__repeat [color="#404040"];
shell_item_data__seq:body1_type -> shell_item_data__seq_body1_switch [style=bold];
shell_item_data__seq_body1_switch:case0 -> root_folder_body__seq [style=bold];
shell_item_data__seq:code_type -> shell_item_data__seq:body1_type [color="#404040"];
shell_item_data__seq:body2_type -> shell_item_data__seq_body2_switch [style=bold];
shell_item_data__seq_body2_switch:case0 -> volume_body__seq [style=bold];
shell_item_data__seq_body2_switch:case1 -> file_entry_body__seq [style=bold];
shell_item_data__seq:code_type -> shell_item_data__seq:body2_type [color="#404040"];
shell_item__seq:len_data_type -> shell_item__seq:data_size [color="#404040"];
shell_item__seq:data_type -> shell_item_data__seq [style=bold];
shell_item_data__seq:code_type -> file_entry_body__inst__is_dir [color="#404040"];
shell_item_data__seq:code_type -> file_entry_body__inst__is_file [color="#404040"];
}