2002-11-13 18:25:18 +00:00
|
|
|
/*
|
2017-05-23 11:39:12 +00:00
|
|
|
* PROJECT: ReactOS Setup Library
|
|
|
|
* LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
|
|
|
|
* PURPOSE: INI file parser that caches contents of INI file in memory.
|
|
|
|
* COPYRIGHT: Copyright 2002-2018 Royce Mitchell III
|
2002-11-13 18:25:18 +00:00
|
|
|
*/
|
|
|
|
|
2010-02-26 11:43:19 +00:00
|
|
|
#pragma once
|
2002-11-13 18:25:18 +00:00
|
|
|
|
2024-04-23 19:09:36 +00:00
|
|
|
typedef struct _INI_KEYWORD
|
2002-11-13 18:25:18 +00:00
|
|
|
{
|
2024-04-23 20:40:31 +00:00
|
|
|
PWSTR Name;
|
|
|
|
PWSTR Data;
|
2024-04-24 10:58:09 +00:00
|
|
|
LIST_ENTRY ListEntry;
|
2024-04-23 19:09:36 +00:00
|
|
|
} INI_KEYWORD, *PINI_KEYWORD;
|
2002-11-13 18:25:18 +00:00
|
|
|
|
2024-04-23 19:09:36 +00:00
|
|
|
typedef struct _INI_SECTION
|
2002-11-13 18:25:18 +00:00
|
|
|
{
|
2024-04-23 20:40:31 +00:00
|
|
|
PWSTR Name;
|
2024-04-24 10:58:09 +00:00
|
|
|
LIST_ENTRY KeyList;
|
|
|
|
LIST_ENTRY ListEntry;
|
2024-04-23 19:09:36 +00:00
|
|
|
} INI_SECTION, *PINI_SECTION;
|
2002-11-13 18:25:18 +00:00
|
|
|
|
|
|
|
typedef struct _INICACHE
|
|
|
|
{
|
2024-04-24 10:58:09 +00:00
|
|
|
LIST_ENTRY SectionList;
|
2002-11-13 18:25:18 +00:00
|
|
|
} INICACHE, *PINICACHE;
|
|
|
|
|
|
|
|
typedef struct _PINICACHEITERATOR
|
|
|
|
{
|
2024-04-23 19:09:36 +00:00
|
|
|
PINI_SECTION Section;
|
|
|
|
PINI_KEYWORD Key;
|
2002-11-13 18:25:18 +00:00
|
|
|
} INICACHEITERATOR, *PINICACHEITERATOR;
|
|
|
|
|
2003-01-17 13:18:15 +00:00
|
|
|
typedef enum
|
|
|
|
{
|
2014-05-12 14:17:37 +00:00
|
|
|
INSERT_FIRST,
|
|
|
|
INSERT_BEFORE,
|
|
|
|
INSERT_AFTER,
|
|
|
|
INSERT_LAST
|
2016-11-05 14:55:55 +00:00
|
|
|
} INSERTION_TYPE;
|
2003-01-17 13:18:15 +00:00
|
|
|
|
2002-11-13 18:25:18 +00:00
|
|
|
/* FUNCTIONS ****************************************************************/
|
|
|
|
|
2017-05-21 23:48:09 +00:00
|
|
|
NTSTATUS
|
|
|
|
IniCacheLoadFromMemory(
|
|
|
|
PINICACHE *Cache,
|
|
|
|
PCHAR FileBuffer,
|
|
|
|
ULONG FileLength,
|
|
|
|
BOOLEAN String);
|
|
|
|
|
2017-05-31 00:18:13 +00:00
|
|
|
NTSTATUS
|
|
|
|
IniCacheLoadByHandle(
|
|
|
|
PINICACHE *Cache,
|
|
|
|
HANDLE FileHandle,
|
|
|
|
BOOLEAN String);
|
|
|
|
|
2002-11-13 18:25:18 +00:00
|
|
|
NTSTATUS
|
2014-05-12 14:17:37 +00:00
|
|
|
IniCacheLoad(
|
|
|
|
PINICACHE *Cache,
|
2015-12-30 18:26:42 +00:00
|
|
|
PWCHAR FileName,
|
2014-05-12 14:17:37 +00:00
|
|
|
BOOLEAN String);
|
2002-11-13 18:25:18 +00:00
|
|
|
|
|
|
|
VOID
|
2014-05-12 14:17:37 +00:00
|
|
|
IniCacheDestroy(
|
2024-04-24 10:58:09 +00:00
|
|
|
_In_ PINICACHE Cache);
|
2002-11-13 18:25:18 +00:00
|
|
|
|
2024-04-23 19:09:36 +00:00
|
|
|
PINI_SECTION
|
|
|
|
IniGetSection(
|
2024-04-23 20:40:31 +00:00
|
|
|
_In_ PINICACHE Cache,
|
|
|
|
_In_ PCWSTR Name);
|
2002-11-13 18:25:18 +00:00
|
|
|
|
2024-04-24 10:58:09 +00:00
|
|
|
PINI_KEYWORD
|
2024-04-23 19:09:36 +00:00
|
|
|
IniGetKey(
|
2024-04-24 10:58:09 +00:00
|
|
|
_In_ PINI_SECTION Section,
|
|
|
|
_In_ PCWSTR KeyName,
|
|
|
|
_Out_ PCWSTR* KeyData);
|
2002-11-13 18:25:18 +00:00
|
|
|
|
|
|
|
PINICACHEITERATOR
|
2024-04-23 19:09:36 +00:00
|
|
|
IniFindFirstValue(
|
2024-04-24 10:58:09 +00:00
|
|
|
_In_ PINI_SECTION Section,
|
|
|
|
_Out_ PCWSTR* KeyName,
|
|
|
|
_Out_ PCWSTR* KeyData);
|
2002-11-13 18:25:18 +00:00
|
|
|
|
|
|
|
BOOLEAN
|
2024-04-23 19:09:36 +00:00
|
|
|
IniFindNextValue(
|
2024-04-24 10:58:09 +00:00
|
|
|
_In_ PINICACHEITERATOR Iterator,
|
|
|
|
_Out_ PCWSTR* KeyName,
|
|
|
|
_Out_ PCWSTR* KeyData);
|
2002-11-13 18:25:18 +00:00
|
|
|
|
|
|
|
VOID
|
2024-04-23 19:09:36 +00:00
|
|
|
IniFindClose(
|
2024-04-24 10:58:09 +00:00
|
|
|
_In_ PINICACHEITERATOR Iterator);
|
2002-11-13 18:25:18 +00:00
|
|
|
|
2024-04-23 19:09:36 +00:00
|
|
|
PINI_SECTION
|
|
|
|
IniAddSection(
|
|
|
|
_In_ PINICACHE Cache,
|
|
|
|
_In_ PCWSTR Name);
|
|
|
|
|
2024-04-24 10:58:09 +00:00
|
|
|
VOID
|
|
|
|
IniRemoveSection(
|
|
|
|
_In_ PINI_SECTION Section);
|
|
|
|
|
2024-04-23 19:09:36 +00:00
|
|
|
PINI_KEYWORD
|
|
|
|
IniInsertKey(
|
|
|
|
_In_ PINI_SECTION Section,
|
|
|
|
_In_ PINI_KEYWORD AnchorKey,
|
|
|
|
_In_ INSERTION_TYPE InsertionType,
|
|
|
|
_In_ PCWSTR Name,
|
|
|
|
_In_ PCWSTR Data);
|
|
|
|
|
|
|
|
PINI_KEYWORD
|
|
|
|
IniAddKey(
|
|
|
|
_In_ PINI_SECTION Section,
|
|
|
|
_In_ PCWSTR Name,
|
|
|
|
_In_ PCWSTR Data);
|
2003-01-17 13:18:15 +00:00
|
|
|
|
2024-04-24 10:58:09 +00:00
|
|
|
VOID
|
|
|
|
IniRemoveKeyByName(
|
|
|
|
_In_ PINI_SECTION Section,
|
|
|
|
_In_ PCWSTR KeyName);
|
|
|
|
|
|
|
|
VOID
|
|
|
|
IniRemoveKey(
|
|
|
|
_In_ PINI_SECTION Section,
|
|
|
|
_In_ PINI_KEYWORD Key);
|
|
|
|
|
2003-01-17 13:18:15 +00:00
|
|
|
PINICACHE
|
|
|
|
IniCacheCreate(VOID);
|
|
|
|
|
2017-05-31 00:18:13 +00:00
|
|
|
NTSTATUS
|
|
|
|
IniCacheSaveByHandle(
|
|
|
|
PINICACHE Cache,
|
|
|
|
HANDLE FileHandle);
|
|
|
|
|
2003-01-17 13:18:15 +00:00
|
|
|
NTSTATUS
|
2014-05-12 14:17:37 +00:00
|
|
|
IniCacheSave(
|
|
|
|
PINICACHE Cache,
|
|
|
|
PWCHAR FileName);
|
2003-01-17 13:18:15 +00:00
|
|
|
|
2002-11-13 18:25:18 +00:00
|
|
|
/* EOF */
|