2 * PROJECT: .inf file parser
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PROGRAMMER: Royce Mitchell III
6 * Ge van Geldorp <gvg@reactos.org>
9 #ifndef INFPRIV_H_INCLUDED
10 #define INFPRIV_H_INCLUDED
13 #define INF_STATUS_INSUFFICIENT_RESOURCES (0xC000009A)
14 #define INF_STATUS_BAD_SECTION_NAME_LINE (0xC0700001)
15 #define INF_STATUS_SECTION_NAME_TOO_LONG (0xC0700002)
16 #define INF_STATUS_WRONG_INF_STYLE (0xC0700003)
17 #define INF_STATUS_NOT_ENOUGH_MEMORY (0xC0700004)
19 typedef struct _INFCACHEFIELD
21 struct _INFCACHEFIELD
*Next
;
22 struct _INFCACHEFIELD
*Prev
;
25 } INFCACHEFIELD
, *PINFCACHEFIELD
;
27 typedef struct _INFCACHELINE
29 struct _INFCACHELINE
*Next
;
30 struct _INFCACHELINE
*Prev
;
36 PINFCACHEFIELD FirstField
;
37 PINFCACHEFIELD LastField
;
39 } INFCACHELINE
, *PINFCACHELINE
;
41 typedef struct _INFCACHESECTION
43 struct _INFCACHESECTION
*Next
;
44 struct _INFCACHESECTION
*Prev
;
46 PINFCACHELINE FirstLine
;
47 PINFCACHELINE LastLine
;
52 } INFCACHESECTION
, *PINFCACHESECTION
;
54 typedef struct _INFCACHE
56 PINFCACHESECTION FirstSection
;
57 PINFCACHESECTION LastSection
;
59 PINFCACHESECTION StringsSection
;
60 } INFCACHE
, *PINFCACHE
;
62 typedef struct _INFCONTEXT
65 PINFCACHESECTION Section
;
69 typedef long INFSTATUS
;
71 /* FUNCTIONS ****************************************************************/
73 extern INFSTATUS
InfpParseBuffer(PINFCACHE file
,
77 extern PINFCACHESECTION
InfpFreeSection(PINFCACHESECTION Section
);
78 extern PINFCACHESECTION
InfpAddSection(PINFCACHE Cache
,
80 extern PINFCACHELINE
InfpAddLine(PINFCACHESECTION Section
);
81 extern PVOID
InfpAddKeyToLine(PINFCACHELINE Line
,
83 extern PVOID
InfpAddFieldToLine(PINFCACHELINE Line
,
85 extern PINFCACHELINE
InfpFindKeyLine(PINFCACHESECTION Section
,
87 extern PINFCACHESECTION
InfpFindSection(PINFCACHE Cache
,
90 extern INFSTATUS
InfpBuildFileBuffer(PINFCACHE InfHandle
,
92 unsigned long *BufferSize
);
94 extern INFSTATUS
InfpFindFirstLine(PINFCACHE InfHandle
,
97 PINFCONTEXT
*Context
);
98 extern INFSTATUS
InfpFindNextLine(PINFCONTEXT ContextIn
,
99 PINFCONTEXT ContextOut
);
100 extern INFSTATUS
InfpFindFirstMatchLine(PINFCONTEXT ContextIn
,
102 PINFCONTEXT ContextOut
);
103 extern INFSTATUS
InfpFindNextMatchLine(PINFCONTEXT ContextIn
,
105 PINFCONTEXT ContextOut
);
106 extern LONG
InfpGetLineCount(HINF InfHandle
,
108 extern LONG
InfpGetFieldCount(PINFCONTEXT Context
);
109 extern INFSTATUS
InfpGetBinaryField(PINFCONTEXT Context
,
112 ULONG ReturnBufferSize
,
113 PULONG RequiredSize
);
114 extern INFSTATUS
InfpGetIntField(PINFCONTEXT Context
,
117 extern INFSTATUS
InfpGetMultiSzField(PINFCONTEXT Context
,
120 ULONG ReturnBufferSize
,
121 PULONG RequiredSize
);
122 extern INFSTATUS
InfpGetStringField(PINFCONTEXT Context
,
125 ULONG ReturnBufferSize
,
126 PULONG RequiredSize
);
127 extern INFSTATUS
InfpGetData(PINFCONTEXT Context
,
130 extern INFSTATUS
InfpGetDataField(PINFCONTEXT Context
,
134 extern INFSTATUS
InfpFindOrAddSection(PINFCACHE Cache
,
136 PINFCONTEXT
*Context
);
137 extern INFSTATUS
InfpAddLineWithKey(PINFCONTEXT Context
, PCTSTR Key
);
138 extern INFSTATUS
InfpAddField(PINFCONTEXT Context
, PCTSTR Data
);
140 extern VOID
InfpFreeContext(PINFCONTEXT Context
);
142 #endif /* INFPRIV_H_INCLUDED */