blob: b096915a4a78702d16a838a18b9ac28a7fa4dad0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
#pragma once
#include <cstdint>
#include <windows.h>
#pragma pack(push, 1)
typedef struct ICON_STREAMS_HEADER_
{
uint32_t HeaderSize;
uint32_t u1; // 7
uint16_t u2; // 1
uint16_t u3; // 1
uint32_t NumberRecords;
uint32_t OffsetFirstRecord;
}
ICON_STREAMS_HEADER;
#pragma pack(pop)
enum ICON_STREAMS_VISIBILITY
{
NOTIFICATIONS_ONLY = 0,
HIDE_ICON_AND_NOTIFICATIONS = 1,
SHOW_ICON_AND_NOTIFICATIONS = 2,
};
#pragma pack(push, 1)
typedef struct ICON_STREAMS_RECORD_
{
uint16_t ApplicationPath[MAX_PATH];
uint32_t u1; // id that the owning application uses to identify the icon?
// this value is constant except when used for the networking icon
// where it cycles through a set of ids.
uint32_t u2; // 0
uint32_t Visibility;
uint16_t YearCreated;
uint16_t MonthCreated;
uint16_t LastTooltip[MAX_PATH];
uint32_t u6; // 0
uint32_t u7; // 0 or 1 but why?
uint32_t ImagelistId; // id of cached icon, or -1
GUID Guid; //
uint32_t u8; // 0
uint32_t u9; // 0
uint32_t u10; // 0
FILETIME Time1; // discrete event 1 UTC
FILETIME Time2; // discrete event 2 UTC, this can be 0
uint32_t u11; // 0
union
{
struct
{
uint16_t ApplicationName[256 + 1];
uint8_t Padding[6];
} details;
struct
{
uint32_t u12; // 200d0000
uint16_t u13; // b0fe
uint16_t ApplicationName[256 + 1];
} extended_details;
} DUMMYUNIONNAME;
uint32_t Ordinal; // determines ordering within group.
}
ICON_STREAMS_RECORD;
#pragma pack(pop)
|