1/*
2 * Definitions for liblnk
3 *
4 * Copyright (C) 2009-2021, Joachim Metz <joachim.metz@gmail.com>
5 *
6 * Refer to AUTHORS for acknowledgements.
7 *
8 * This program is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU Lesser General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public License
19 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20 */
21
22#if !defined( _LIBLNK_DEFINITIONS_H )
23#define _LIBLNK_DEFINITIONS_H
24
25#include <liblnk/types.h>
26
27#define LIBLNK_VERSION							@VERSION@
28
29/* The liblnk version string
30 */
31#define LIBLNK_VERSION_STRING						"@VERSION@"
32
33/* The liblnk file access
34 * bit 1        set to 1 for read access
35 * bit 2        set to 1 for write access
36 * bit 3-8      not used
37 */
38enum LIBLNK_ACCESS_FLAGS
39{
40	LIBLNK_ACCESS_FLAG_READ						= 0x01,
41/* Reserved: not supported yet */
42	LIBLNK_ACCESS_FLAG_WRITE					= 0x02
43};
44
45/* The libnlk file access macros
46 */
47#define LIBLNK_OPEN_READ						( LIBLNK_ACCESS_FLAG_READ )
48/* Reserved: not supported yet */
49#define LIBLNK_OPEN_WRITE						( LIBLNK_ACCESS_FLAG_WRITE )
50/* Reserved: not supported yet */
51#define LIBLNK_OPEN_READ_WRITE						( LIBLNK_ACCESS_FLAG_READ | LIBLNK_ACCESS_FLAG_WRITE )
52
53/* The data flags
54 */
55enum LIBLNK_DATA_FLAGS
56{
57	LIBLNK_DATA_FLAG_HAS_LINK_TARGET_IDENTIFIER			= 0x00000001UL,
58	LIBLNK_DATA_FLAG_HAS_LOCATION_INFORMATION			= 0x00000002UL,
59	LIBLNK_DATA_FLAG_HAS_DESCRIPTION_STRING				= 0x00000004UL,
60	LIBLNK_DATA_FLAG_HAS_RELATIVE_PATH_STRING			= 0x00000008UL,
61	LIBLNK_DATA_FLAG_HAS_WORKING_DIRECTORY_STRING			= 0x00000010UL,
62	LIBLNK_DATA_FLAG_HAS_COMMAND_LINE_ARGUMENTS_STRING		= 0x00000020UL,
63	LIBLNK_DATA_FLAG_HAS_ICON_LOCATION_STRING			= 0x00000040UL,
64	LIBLNK_DATA_FLAG_IS_UNICODE					= 0x00000080UL,
65	LIBLNK_DATA_FLAG_FORCE_NO_LOCATION_INFORMATION			= 0x00000100UL,
66	LIBLNK_DATA_FLAG_HAS_ENVIRONMENT_VARIABLES_LOCATION_BLOCK	= 0x00000200UL,
67	LIBLNK_DATA_FLAG_RUN_IN_SEPARATE_PROCESS			= 0x00000400UL,
68
69	LIBLNK_DATA_FLAG_HAS_DARWIN_IDENTIFIER				= 0x00001000UL,
70	LIBLNK_DATA_FLAG_RUN_AS_USER					= 0x00002000UL,
71	LIBLNK_DATA_FLAG_HAS_ICON_LOCATION_BLOCK			= 0x00004000UL,
72	LIBLNK_DATA_FLAG_NO_PIDL_ALIAS					= 0x00008000UL,
73
74	LIBLNK_DATA_FLAG_RUN_WITH_SHIM_LAYER				= 0x00020000UL,
75	LIBLNK_DATA_FLAG_NO_DISTRIBUTED_LINK_TRACKING_DATA_BLOCK	= 0x00040000UL,
76	LIBLNK_DATA_FLAG_HAS_METADATA_PROPERTY_STORE_DATA_BLOCK		= 0x00080000UL
77};
78
79/* The file attribute flags
80 */
81enum LIBLNK_FILE_ATTRIBUTE_FLAGS
82{
83	LIBLNK_FILE_ATTRIBUTE_FLAG_READ_ONLY				= 0x00000001UL,
84	LIBLNK_FILE_ATTRIBUTE_FLAG_HIDDEN				= 0x00000002UL,
85	LIBLNK_FILE_ATTRIBUTE_FLAG_SYSTEM				= 0x00000004UL,
86
87	LIBLNK_FILE_ATTRIBUTE_FLAG_DIRECTORY				= 0x00000010UL,
88	LIBLNK_FILE_ATTRIBUTE_FLAG_ARCHIVE				= 0x00000020UL,
89	LIBLNK_FILE_ATTRIBUTE_FLAG_DEVICE				= 0x00000040UL,
90	LIBLNK_FILE_ATTRIBUTE_FLAG_NORMAL				= 0x00000080UL,
91	LIBLNK_FILE_ATTRIBUTE_FLAG_TEMPORARY				= 0x00000100UL,
92	LIBLNK_FILE_ATTRIBUTE_FLAG_SPARSE_FILE				= 0x00000200UL,
93	LIBLNK_FILE_ATTRIBUTE_FLAG_REPARSE_POINT			= 0x00000400UL,
94	LIBLNK_FILE_ATTRIBUTE_FLAG_COMPRESSED				= 0x00000800UL,
95	LIBLNK_FILE_ATTRIBUTE_FLAG_OFFLINE				= 0x00001000UL,
96	LIBLNK_FILE_ATTRIBUTE_FLAG_NOT_CONTENT_INDEXED			= 0x00002000UL,
97	LIBLNK_FILE_ATTRIBUTE_FLAG_ENCRYPTED				= 0x00004000UL,
98
99	LIBLNK_FILE_ATTRIBUTE_FLAG_VIRTUAL				= 0x00010000UL
100};
101
102/* The drive type definitions
103 */
104enum LIBLNK_DRIVE_TYPES
105{
106	LIBLNK_DRIVE_TYPE_UNKNOWN					= 0,
107	LIBLNK_DRIVE_TYPE_NO_ROOT_DIR					= 1,
108	LIBLNK_DRIVE_TYPE_REMOVABLE					= 2,
109	LIBLNK_DRIVE_TYPE_FIXED						= 3,
110	LIBLNK_DRIVE_TYPE_REMOTE					= 4,
111	LIBLNK_DRIVE_TYPE_CDROM						= 5,
112	LIBLNK_DRIVE_TYPE_RAMDISK					= 6
113};
114
115#endif /* !defined( _LIBLNK_DEFINITIONS_H ) */
116
117