summaryrefslogtreecommitdiffhomepage
path: root/windows/nsis-plugins/src/tray/iconstreams.h
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)