windows-nt/Source/XPSP1/NT/base/ntsetup/win95upg/inc/inf.h
2020-09-26 16:20:57 +08:00

510 lines
11 KiB
C

/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
inf.h
Abstract:
Declares interface for INF wrapper routines. These routines simplify
access of INFs by wrapping the setup APIs with routines that use
pools or grow buffers.
The INF wrapper routines also implement append and replace capabilities,
so any INF used by the Win9x upgrade can be appended in the future, or
completely replaced.
Author:
Marc R. Whitten (marcw) 20-Oct-1997
Revision History:
jimschm 05-Jan-1999 INF parser moved to migutil
marcw 28-Oct-1998 Append/Replace capability
marcw 08-Aug-1997 Pool/Growbuf routines
--*/
typedef enum {
INF_USE_POOLHANDLE,
INF_USE_GROWBUFFER,
INF_USE_PRIVATE_GROWBUFFER,
INF_USE_PRIVATE_POOLHANDLE
} ALLOCATORTYPES;
typedef struct {
INFCONTEXT Context;
GROWBUFFER GrowBuffer;
POOLHANDLE PoolHandle;
ALLOCATORTYPES Allocator;
PCSTR KeyName;
} INFSTRUCTA, *PINFSTRUCTA;
typedef struct {
INFCONTEXT Context;
GROWBUFFER GrowBuffer;
POOLHANDLE PoolHandle;
ALLOCATORTYPES Allocator;
PCWSTR KeyName;
} INFSTRUCTW, *PINFSTRUCTW;
#define INFCONTEXT_INIT {NULL,NULL,0,0}
#define INITINFSTRUCT_GROWBUFFER {INFCONTEXT_INIT,GROWBUF_INIT,NULL,INF_USE_PRIVATE_GROWBUFFER,NULL}
#define INITINFSTRUCT_POOLHANDLE {INFCONTEXT_INIT,GROWBUF_INIT,NULL,INF_USE_PRIVATE_POOLHANDLE,NULL}
#define InfOpenAppendInfFile SetupOpenAppendInfFile
extern PBOOL g_UpginfsUpdated;
VOID
InfCleanUpInfStructA (
PINFSTRUCTA Context
);
VOID
InfCleanUpInfStructW (
PINFSTRUCTW Context
);
VOID
InitInfStructA (
OUT PINFSTRUCTA Context,
IN PGROWBUFFER GrowBuffer, OPTIONAL
IN POOLHANDLE PoolHandle OPTIONAL
);
VOID
InitInfStructW (
OUT PINFSTRUCTW Context,
IN PGROWBUFFER GrowBuffer, OPTIONAL
IN POOLHANDLE PoolHandle OPTIONAL
);
#define InfOpenInfFileA(f) SETTRACKCOMMENT(HINF,"InfOpenInfFile",__FILE__,__LINE__)\
RealInfOpenInfFileA((f)/*,*/ ALLOCATION_TRACKING_CALL)\
CLRTRACKCOMMENT
#define InfOpenInfFileW(f) SETTRACKCOMMENT(HINF,"InfOpenInfFile",__FILE__,__LINE__)\
RealInfOpenInfFileW((f)/*,*/ ALLOCATION_TRACKING_CALL)\
CLRTRACKCOMMENT
HINF
RealInfOpenInfFileA (
IN PCSTR FileName /*,*/
ALLOCATION_TRACKING_DEF
);
HINF
RealInfOpenInfFileW (
IN PCWSTR FileName /*,*/
ALLOCATION_TRACKING_DEF
);
VOID
InfCloseInfFile (HINF Inf);
//
// See the macros below before calling InfOpenInfInAllSourcesA or W.
//
HINF
InfOpenInfInAllSourcesA (
IN PCSTR InfSpecifier,
IN DWORD SourceCount,
IN PCSTR * SourceDirectories
);
HINF
InfOpenInfInAllSourcesW (
IN PCWSTR InfSpecifier,
IN DWORD SourceCount,
IN PCWSTR *SourceDirectories
);
PSTR
InfGetLineTextA (
IN OUT PINFSTRUCTA
);
PWSTR
InfGetLineTextW (
IN OUT PINFSTRUCTW
);
PSTR
InfGetStringFieldA (
IN OUT PINFSTRUCTA Context,
IN UINT FieldIndex
);
PWSTR
InfGetStringFieldW (
IN OUT PINFSTRUCTW Context,
IN UINT FieldIndex
);
PSTR
InfGetMultiSzFieldA (
IN OUT PINFSTRUCTA Context,
IN UINT FieldIndex
) ;
PWSTR
InfGetMultiSzFieldW (
IN OUT PINFSTRUCTW Context,
IN UINT FieldIndex
) ;
BOOL
InfGetIntFieldA (
IN PINFSTRUCTA Context,
IN UINT FieldIndex,
IN PINT Value
);
BOOL
InfGetIntFieldW (
IN PINFSTRUCTW Context,
IN UINT FieldIndex,
IN PINT Value
);
PBYTE
InfGetBinaryFieldA (
IN PINFSTRUCTA Context,
IN UINT FieldIndex
);
PBYTE
InfGetBinaryFieldW (
IN PINFSTRUCTW Context,
IN UINT FieldIndex
);
BOOL
InfGetLineByIndexA (
IN HINF InfHandle,
IN PCSTR Section,
IN DWORD Index,
OUT PINFSTRUCTA Context
);
BOOL
InfGetLineByIndexW (
IN HINF InfHandle,
IN PCWSTR Section,
IN DWORD Index,
OUT PINFSTRUCTW Context
);
BOOL
InfFindFirstLineA (
IN HINF InfHandle,
IN PCSTR Section,
IN PCSTR Key,
OUT PINFSTRUCTA Context
);
BOOL
InfFindFirstLineW (
IN HINF InfHandle,
IN PCWSTR Section,
IN PCWSTR Key,
OUT PINFSTRUCTW Context
);
BOOL
InfFindNextLineA (
IN OUT PINFSTRUCTA Context
);
BOOL
InfFindNextLineW (
IN OUT PINFSTRUCTW Context
);
UINT
InfGetFieldCountA (
IN PINFSTRUCTA Context
);
UINT
InfGetFieldCountW (
IN PINFSTRUCTW Context
);
PCSTR
InfGetOemStringFieldA (
IN PINFSTRUCTA Context,
IN UINT Field
);
BOOL
SetupGetOemStringFieldA (
IN PINFCONTEXT Context,
IN DWORD Index,
IN PTSTR ReturnBuffer,
IN DWORD ReturnBufferSize,
OUT PDWORD RequiredSize
);
VOID
InfResetInfStructA (
IN OUT PINFSTRUCTA Context
);
VOID
InfResetInfStructW (
IN OUT PINFSTRUCTW Context
);
//
// INF parser
//
typedef struct _tagINFLINE {
PCWSTR Key; OPTIONAL
PCWSTR Data;
DWORD LineFlags;
struct _tagINFLINE *Next, *Prev;
struct _tagINFSECTION *Section;
} INFLINE, *PINFLINE;
#define LINEFLAG_KEY_QUOTED 0x0001
#define LINEFLAG_ALL_COMMENTS 0x0002
#define LINEFLAG_TRAILING_COMMENTS 0x0004
typedef struct _tagINFSECTION {
PCWSTR Name;
PINFLINE FirstLine;
PINFLINE LastLine;
UINT LineCount;
struct _tagINFSECTION *Next, *Prev;
} INFSECTION, *PINFSECTION;
PINFSECTION
AddInfSectionToTableA (
IN HINF Inf,
IN PCSTR SectionName
);
PINFSECTION
AddInfSectionToTableW (
IN HINF Inf,
IN PCWSTR SectionName
);
PINFSECTION
FindInfSectionInTableA (
IN HINF Inf,
IN PCSTR SectionName
);
PINFSECTION
GetFirstInfSectionInTable (
IN HINF Inf
);
PINFSECTION
GetNextInfSectionInTable (
IN PINFSECTION Section
);
PINFSECTION
FindInfSectionInTableW (
IN HINF Inf,
IN PCWSTR SectionName
);
PINFLINE
AddInfLineToTableA (
IN HINF Inf,
IN PINFSECTION SectionPtr,
IN PCSTR Key, OPTIONAL
IN PCSTR Data,
IN DWORD LineFlags
);
PINFLINE
AddInfLineToTableW (
IN HINF Inf,
IN PINFSECTION SectionPtr,
IN PCWSTR Key, OPTIONAL
IN PCWSTR Data,
IN DWORD LineFlags
);
PINFLINE
FindLineInInfSectionA (
IN HINF Inf,
IN PINFSECTION Section,
IN PCSTR Key
);
PINFLINE
FindLineInInfSectionW (
IN HINF Inf,
IN PINFSECTION Section,
IN PCWSTR Key
);
PINFLINE
GetFirstLineInSectionStrA (
IN HINF Inf,
IN PCSTR Section
);
PINFLINE
GetFirstLineInSectionStrW (
IN HINF Inf,
IN PCWSTR Section
);
PINFLINE
GetFirstLineInSectionStruct (
IN PINFSECTION Section
);
PINFLINE
GetNextLineInSection (
IN PINFLINE PrevLine
);
UINT
GetInfSectionLineCount (
IN PINFSECTION Section
);
BOOL
DeleteSectionInInfFile (
IN HINF Inf,
IN PINFSECTION Section
);
BOOL
DeleteLineInInfSection (
IN HINF Inf,
IN PINFLINE InfLine
);
HINF
OpenInfFileExA (
IN PCSTR InfFilePath,
IN PSTR SectionList,
IN BOOL KeepComments
);
#define OpenInfFileA(Path) OpenInfFileExA (Path, NULL, TRUE)
HINF
OpenInfFileExW (
IN PCWSTR InfFilePath,
IN PWSTR SectionList,
IN BOOL KeepComments
);
#define OpenInfFileW(Path) OpenInfFileExW (Path, NULL, TRUE)
VOID
CloseInfFile (
HINF InfFile
);
BOOL
SaveInfFileA (
IN HINF Inf,
IN PCSTR SaveToFileSpec
);
BOOL
SaveInfFileW (
IN HINF Inf,
IN PCWSTR SaveToFileSpec
);
VOID
InitInfReplaceTable (
VOID
);
//
// ANSI/UNICODE mappings.
//
#ifdef UNICODE
# define INFSTRUCT INFSTRUCTW
# define PINFSTRUCT PINFSTRUCTW
# define InfCleanUpInfStruct InfCleanUpInfStructW
# define InitInfStruct InitInfStructW
# define InfResetInfStruct InfResetInfStructW
# define InfFindFirstLine InfFindFirstLineW
# define InfFindNextLine InfFindNextLineW
# define InfGetLineByIndex InfGetLineByIndexW
# define InfGetStringField InfGetStringFieldW
# define InfGetMultiSzField InfGetMultiSzFieldW
# define InfGetLineText InfGetLineTextW
# define InfOpenInfFile InfOpenInfFileW
# define InfGetOemStringField InfGetStringFieldW
# define InfGetIntField InfGetIntFieldW
# define InfGetBinaryField InfGetBinaryFieldW
# define InfGetFieldCount InfGetFieldCountW
# define SetupGetOemStringField SetupGetStringFieldW
# define InfOpenInfInAllSources(x) InfOpenInfInAllSourcesW((x),1,&g_SourceDirectory);
# define AddInfSectionToTable AddInfSectionToTableW
# define FindInfSectionInTable FindInfSectionInTableW
# define AddInfLineToTable AddInfLineToTableW
# define FindLineInInfSection FindLineInInfSectionW
# define GetFirstLineInSectionStr GetFirstLineInSectionStrW
# define OpenInfFileEx OpenInfFileExW
# define OpenInfFile OpenInfFileW
# define SaveInfFile SaveInfFileW
#else
# define INFSTRUCT INFSTRUCTA
# define PINFSTRUCT PINFSTRUCTA
# define InfCleanUpInfStruct InfCleanUpInfStructA
# define InitInfStruct InitInfStructA
# define InfResetInfStruct InfResetInfStructA
# define InfFindFirstLine InfFindFirstLineA
# define InfFindNextLine InfFindNextLineA
# define InfGetLineByIndex InfGetLineByIndexA
# define InfGetStringField InfGetStringFieldA
# define InfGetMultiSzField InfGetMultiSzFieldA
# define InfGetLineText InfGetLineTextA
# define InfOpenInfFile InfOpenInfFileA
# define InfGetOemStringField InfGetOemStringFieldA
# define InfGetIntField InfGetIntFieldA
# define InfGetBinaryField InfGetBinaryFieldA
# define InfGetFieldCount InfGetFieldCountA
# define SetupGetOemStringField SetupGetOemStringFieldA
# define InfOpenInfInAllSources(x) InfOpenInfInAllSourcesA((x),g_SourceDirectoryCount,g_SourceDirectories);
# define AddInfSectionToTable AddInfSectionToTableA
# define FindInfSectionInTable FindInfSectionInTableA
# define AddInfLineToTable AddInfLineToTableA
# define FindLineInInfSection FindLineInInfSectionA
# define GetFirstLineInSectionStr GetFirstLineInSectionStrA
# define OpenInfFileEx OpenInfFileExA
# define OpenInfFile OpenInfFileA
# define SaveInfFile SaveInfFileA
#endif