ReactOS 0.4.16-dev-1946-g52006dd
Database Struct Reference

#include <xml2sdb.h>

Collaboration diagram for Database:

Public Member Functions

bool fromXml (const char *fileName, PlatformType platform)
 
bool fromXml (XMLHandle dbNode)
 
bool toSdb (LPCWSTR path)
 
void WriteString (TAG tag, const sdbstring &str, bool always=false)
 
void WriteString (TAG tag, const std::string &str, bool always=false)
 
void WriteBinary (TAG tag, const GUID &guid, bool always=false)
 
void WriteBinary (TAG tag, const std::vector< BYTE > &data, bool always=false)
 
void WriteDWord (TAG tag, DWORD value, bool always=false)
 
void WriteQWord (TAG tag, QWORD value, bool always=false)
 
void WriteNull (TAG tag)
 
TAGID BeginWriteListTag (TAG tag)
 
BOOL EndWriteListTag (TAGID tagid)
 
void InsertShimTagid (const sdbstring &name, TAGID tagid)
 
void InsertShimTagid (const std::string &name, TAGID tagid)
 
TAGID FindShimTagid (const sdbstring &name)
 
TAGID FindShimTagid (const std::string &name)
 
void InsertPatchTagid (const sdbstring &name, TAGID tagid)
 
void InsertPatchTagid (const std::string &name, TAGID tagid)
 
TAGID FindPatchTagid (const sdbstring &name)
 
TAGID FindPatchTagid (const std::string &name)
 
void InsertFlagTagid (const sdbstring &name, TAGID tagid)
 
void InsertFlagTagid (const std::string &name, TAGID tagid)
 
TAGID FindFlagTagid (const sdbstring &name)
 
TAGID FindFlagTagid (const std::string &name)
 

Public Attributes

std::string Name
 
GUID ID = {}
 
struct Library Library
 
std::list< LayerLayers
 
std::list< ExeExes
 

Private Attributes

std::map< sdbstring, TAGIDKnownShims
 
std::map< sdbstring, TAGIDKnownPatches
 
std::map< sdbstring, TAGIDKnownFlags
 
PDB pdb = nullptr
 
PlatformType platform = PLATFORM_ANY
 

Detailed Description

Definition at line 181 of file xml2sdb.h.

Member Function Documentation

◆ BeginWriteListTag()

TAGID Database::BeginWriteListTag ( TAG  tag)

Definition at line 685 of file xml2sdb.cpp.

686{
688}
TAGID WINAPI SdbBeginWriteListTag(PDB pdb, TAG tag)
Definition: sdbwrite.c:321
PDB pdb
Definition: xml2sdb.h:242
Definition: ecma_167.h:138

Referenced by InExclude::toSdb(), ShimRef::toSdb(), FlagRef::toSdb(), Shim::toSdb(), Flag::toSdb(), Data::toSdb(), Layer::toSdb(), MatchingFile::toSdb(), Exe::toSdb(), and toSdb().

◆ EndWriteListTag()

BOOL Database::EndWriteListTag ( TAGID  tagid)

Definition at line 690 of file xml2sdb.cpp.

691{
692 return SdbEndWriteListTag(pdb, tagid);
693}
BOOL WINAPI SdbEndWriteListTag(PDB pdb, TAGID tagid)
Definition: sdbwrite.c:343

Referenced by InExclude::toSdb(), ShimRef::toSdb(), FlagRef::toSdb(), Shim::toSdb(), Flag::toSdb(), Data::toSdb(), Layer::toSdb(), MatchingFile::toSdb(), Exe::toSdb(), and toSdb().

◆ FindFlagTagid() [1/2]

TAGID Database::FindFlagTagid ( const sdbstring name)

Definition at line 822 of file xml2sdb.cpp.

823{
824 return FindTagid(name, KnownFlags);
825}
std::map< sdbstring, TAGID > KnownFlags
Definition: xml2sdb.h:241
Definition: name.c:39
static TAGID FindTagid(const sdbstring &name, const std::map< sdbstring, TAGID > &lookup)
Definition: xml2sdb.cpp:787

Referenced by FindFlagTagid(), and FlagRef::toSdb().

◆ FindFlagTagid() [2/2]

TAGID Database::FindFlagTagid ( const std::string &  name)
inline

Definition at line 226 of file xml2sdb.h.

227 {
228 return FindFlagTagid(sdbstring(name.begin(), name.end()));
229 }
TAGID FindFlagTagid(const sdbstring &name)
Definition: xml2sdb.cpp:822
std::basic_string< WCHAR > sdbstring
Definition: xml2sdb.h:27

◆ FindPatchTagid() [1/2]

TAGID Database::FindPatchTagid ( const sdbstring name)

Definition at line 812 of file xml2sdb.cpp.

813{
814 return FindTagid(name, KnownPatches);
815}
std::map< sdbstring, TAGID > KnownPatches
Definition: xml2sdb.h:240

Referenced by FindPatchTagid().

◆ FindPatchTagid() [2/2]

TAGID Database::FindPatchTagid ( const std::string &  name)
inline

Definition at line 215 of file xml2sdb.h.

216 {
217 return FindPatchTagid(sdbstring(name.begin(), name.end()));
218 }
TAGID FindPatchTagid(const sdbstring &name)
Definition: xml2sdb.cpp:812

◆ FindShimTagid() [1/2]

TAGID Database::FindShimTagid ( const sdbstring name)

Definition at line 802 of file xml2sdb.cpp.

803{
804 return FindTagid(name, KnownShims);
805}
std::map< sdbstring, TAGID > KnownShims
Definition: xml2sdb.h:239

Referenced by FindShimTagid(), and ShimRef::toSdb().

◆ FindShimTagid() [2/2]

TAGID Database::FindShimTagid ( const std::string &  name)
inline

Definition at line 203 of file xml2sdb.h.

204 {
205 return FindShimTagid(sdbstring(name.begin(), name.end()));
206 }
TAGID FindShimTagid(const sdbstring &name)
Definition: xml2sdb.cpp:802

◆ fromXml() [1/2]

bool Database::fromXml ( const char fileName,
PlatformType  platform 
)

Definition at line 730 of file xml2sdb.cpp.

731{
733 tinyxml2::XMLError err = doc.LoadFile(fileName);
734 XMLHandle dbHandle = tinyxml2::XMLHandle(&doc).FirstChildElement("SDB").FirstChildElement("DATABASE");
735 platform = platform_;
736 return fromXml(dbHandle);
737}
XMLError LoadFile(const char *filename)
Definition: tinyxml2.cpp:1906
XMLHandle FirstChildElement(const char *name=0)
Get the first child element of this handle.
Definition: tinyxml2.h:1814
platform
Definition: msipriv.h:364
#define err(...)
bool fromXml(const char *fileName, PlatformType platform)
Definition: xml2sdb.cpp:730

Referenced by convert(), and fromXml().

◆ fromXml() [2/2]

bool Database::fromXml ( XMLHandle  dbNode)

Definition at line 695 of file xml2sdb.cpp.

696{
697 Name = ReadStringNode(dbNode, "NAME");
698 ReadGuidNode(dbNode, "DATABASE_ID", ID);
699
700 XMLHandle libChild = dbNode.FirstChildElement("LIBRARY").FirstChild();
701 while (libChild.ToNode())
702 {
703 std::string NodeName = ToNodeName(libChild);
704 if (NodeName == "SHIM")
705 {
706 Shim shim;
707 if (shim.fromXml(libChild) && ((shim.Platform & platform) != PLATFORM_NONE))
708 Library.Shims.push_back(shim);
709 }
710 else if (NodeName == "FLAG")
711 {
712 Flag flag;
713 if (flag.fromXml(libChild))
714 Library.Flags.push_back(flag);
715 }
716 else if (NodeName == "INCLUDE" || NodeName == "EXCLUDE")
717 {
718 InExclude inex;
719 if (inex.fromXml(libChild))
720 Library.InExcludes.push_back(inex);
721 }
722 libChild = libChild.NextSibling();
723 }
724
725 ReadGeneric(dbNode, Layers, "LAYER", platform);
726 ReadGeneric(dbNode, Exes, "EXE", platform);
727 return true;
728}
XMLHandle FirstChild()
Get the first child of this handle.
Definition: tinyxml2.h:1810
XMLNode * ToNode()
Safe cast to XMLNode. This can return null.
Definition: tinyxml2.h:1843
XMLHandle NextSibling()
Get the next sibling of this handle.
Definition: tinyxml2.h:1834
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean flag
Definition: glfuncs.h:52
GUID ID
Definition: xml2sdb.h:232
std::list< Exe > Exes
Definition: xml2sdb.h:236
std::list< Layer > Layers
Definition: xml2sdb.h:235
std::string Name
Definition: xml2sdb.h:231
Definition: xml2sdb.h:97
bool fromXml(XMLHandle dbNode)
Definition: xml2sdb.cpp:284
std::list< Shim > Shims
Definition: xml2sdb.h:177
std::list< InExclude > InExcludes
Definition: xml2sdb.h:176
std::list< Flag > Flags
Definition: xml2sdb.h:178
Definition: xml2sdb.h:84
PlatformType Platform
Definition: xml2sdb.h:93
bool fromXml(XMLHandle dbNode)
Definition: xml2sdb.cpp:399
bool ReadGuidNode(XMLHandle dbNode, const char *nodeName, GUID &guid)
Definition: xml2sdb.cpp:251
void ReadGeneric(XMLHandle dbNode, std::list< T > &result, const char *nodeName)
Definition: xml2sdb.cpp:307
std::string ToNodeName(XMLHandle node)
Definition: xml2sdb.cpp:100
std::string ReadStringNode(XMLHandle dbNode, const char *nodeName)
Definition: xml2sdb.cpp:110
@ PLATFORM_NONE
Definition: xml2sdb.h:33

◆ InsertFlagTagid() [1/2]

void Database::InsertFlagTagid ( const sdbstring name,
TAGID  tagid 
)

Definition at line 817 of file xml2sdb.cpp.

818{
819 InsertTagid(name, tagid, KnownFlags, "Flag");
820}
static void InsertTagid(const sdbstring &name, TAGID tagid, std::map< sdbstring, TAGID > &lookup, const char *type)
Definition: xml2sdb.cpp:774

Referenced by InsertFlagTagid(), and Flag::toSdb().

◆ InsertFlagTagid() [2/2]

void Database::InsertFlagTagid ( const std::string &  name,
TAGID  tagid 
)
inline

Definition at line 221 of file xml2sdb.h.

222 {
223 InsertFlagTagid(sdbstring(name.begin(), name.end()), tagid);
224 }
void InsertFlagTagid(const sdbstring &name, TAGID tagid)
Definition: xml2sdb.cpp:817

◆ InsertPatchTagid() [1/2]

void Database::InsertPatchTagid ( const sdbstring name,
TAGID  tagid 
)

Definition at line 807 of file xml2sdb.cpp.

808{
809 InsertTagid(name, tagid, KnownPatches, "Patch");
810}

Referenced by InsertPatchTagid().

◆ InsertPatchTagid() [2/2]

void Database::InsertPatchTagid ( const std::string &  name,
TAGID  tagid 
)
inline

Definition at line 210 of file xml2sdb.h.

211 {
212 InsertPatchTagid(sdbstring(name.begin(), name.end()), tagid);
213 }
void InsertPatchTagid(const sdbstring &name, TAGID tagid)
Definition: xml2sdb.cpp:807

◆ InsertShimTagid() [1/2]

void Database::InsertShimTagid ( const sdbstring name,
TAGID  tagid 
)

Definition at line 797 of file xml2sdb.cpp.

798{
799 InsertTagid(name, tagid, KnownShims, "Shim");
800}

Referenced by InsertShimTagid(), and Shim::toSdb().

◆ InsertShimTagid() [2/2]

void Database::InsertShimTagid ( const std::string &  name,
TAGID  tagid 
)
inline

Definition at line 198 of file xml2sdb.h.

199 {
200 InsertShimTagid(sdbstring(name.begin(), name.end()), tagid);
201 }
void InsertShimTagid(const sdbstring &name, TAGID tagid)
Definition: xml2sdb.cpp:797

◆ toSdb()

bool Database::toSdb ( LPCWSTR  path)

Definition at line 739 of file xml2sdb.cpp.

740{
742 TAGID tidDatabase = BeginWriteListTag(TAG_DATABASE);
743 LARGE_INTEGER li = { 0 };
748 WriteString(TAG_NAME, Name, true);
749 if (IsEmptyGuid(ID))
750 {
751 SHIM_WARN("DB has empty ID!\n");
752 RandomGuid(ID);
753 }
755 TAGID tidLibrary = BeginWriteListTag(TAG_LIBRARY);
756 if (!WriteGeneric(Library.InExcludes, *this))
757 return false;
758 if (!WriteGeneric(Library.Shims, *this))
759 return false;
760 if (!WriteGeneric(Library.Flags, *this))
761 return false;
762 EndWriteListTag(tidLibrary);
763 if (!WriteGeneric(Layers, *this))
764 return false;
765 if (!WriteGeneric(Exes, *this))
766 return false;
767 EndWriteListTag(tidDatabase);
768
770 pdb = nullptr;
771 return true;
772}
DWORD TAGID
#define TAG_DATABASE_ID
Definition: db.cpp:122
#define DOS_PATH
Definition: db.cpp:32
#define TAG_COMPILER_VERSION
Definition: db.cpp:116
#define TAG_OS_PLATFORM
Definition: db.cpp:76
#define TAG_DATABASE
Definition: db.cpp:85
#define TAG_TIME
Definition: db.cpp:78
LARGE_INTEGER li
Definition: fxtimerapi.cpp:235
__u16 time
Definition: mkdosfs.c:8
NTSYSAPI VOID NTAPI RtlSecondsSince1970ToTime(_In_ ULONG SecondsSince1970, _Out_ PLARGE_INTEGER Time)
#define SHIM_WARN(fmt,...)
Definition: sdbpapi.h:77
#define TAG_LIBRARY
Definition: sdbtagid.h:164
PDB WINAPI SdbCreateDatabase(LPCWSTR path, PATH_TYPE type)
Definition: sdbwrite.c:104
void WINAPI SdbCloseDatabaseWrite(PDB pdb)
Definition: sdbwrite.c:129
void WriteString(TAG tag, const sdbstring &str, bool always=false)
Definition: xml2sdb.cpp:657
void WriteQWord(TAG tag, QWORD value, bool always=false)
Definition: xml2sdb.cpp:674
BOOL EndWriteListTag(TAGID tagid)
Definition: xml2sdb.cpp:690
void WriteBinary(TAG tag, const GUID &guid, bool always=false)
Definition: xml2sdb.cpp:645
TAGID BeginWriteListTag(TAG tag)
Definition: xml2sdb.cpp:685
void WriteDWord(TAG tag, DWORD value, bool always=false)
Definition: xml2sdb.cpp:668
LONGLONG QuadPart
Definition: typedefs.h:114
#define TAG_NAME
Definition: vfat.h:553
static const char szCompilerVersion[]
Definition: xml2sdb.cpp:18
void RandomGuid(GUID &g)
Definition: xml2sdb.cpp:82
bool WriteGeneric(std::list< T > &data, Database &db)
Definition: xml2sdb.cpp:335
bool IsEmptyGuid(const GUID &g)
Definition: xml2sdb.cpp:77

Referenced by convert().

◆ WriteBinary() [1/2]

void Database::WriteBinary ( TAG  tag,
const GUID guid,
bool  always = false 
)

Definition at line 645 of file xml2sdb.cpp.

646{
647 if (always || !IsEmptyGuid(guid))
648 SdbWriteBinaryTag(pdb, tag, (BYTE*)&guid, sizeof(GUID));
649}
GUID guid
Definition: version.c:147
BOOL WINAPI SdbWriteBinaryTag(PDB pdb, TAG tag, const BYTE *data, DWORD size)
Definition: sdbwrite.c:273
unsigned char BYTE
Definition: xxhash.c:193

Referenced by Shim::toSdb(), Exe::toSdb(), and toSdb().

◆ WriteBinary() [2/2]

void Database::WriteBinary ( TAG  tag,
const std::vector< BYTE > &  data,
bool  always = false 
)

Definition at line 651 of file xml2sdb.cpp.

652{
653 if (always || !data.empty())
654 SdbWriteBinaryTag(pdb, tag, data.data(), data.size());
655}
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950

◆ WriteDWord()

void Database::WriteDWord ( TAG  tag,
DWORD  value,
bool  always = false 
)

Definition at line 668 of file xml2sdb.cpp.

669{
670 if (always || value)
672}
BOOL WINAPI SdbWriteDWORDTag(PDB pdb, TAG tag, DWORD data)
Definition: sdbwrite.c:182
Definition: pdh_main.c:96

Referenced by ShimRef::toSdb(), FlagRef::toSdb(), Data::toSdb(), MatchingFile::toSdb(), and toSdb().

◆ WriteNull()

void Database::WriteNull ( TAG  tag)

Definition at line 680 of file xml2sdb.cpp.

681{
683}
BOOL WINAPI SdbWriteNULLTag(PDB pdb, TAG tag)
Definition: sdbwrite.c:145

Referenced by InExclude::toSdb().

◆ WriteQWord()

void Database::WriteQWord ( TAG  tag,
QWORD  value,
bool  always = false 
)

Definition at line 674 of file xml2sdb.cpp.

675{
676 if (always || value)
678}
BOOL WINAPI SdbWriteQWORDTag(PDB pdb, TAG tag, QWORD data)
Definition: sdbwrite.c:201

Referenced by Flag::toSdb(), Data::toSdb(), and toSdb().

◆ WriteString() [1/2]

void Database::WriteString ( TAG  tag,
const sdbstring str,
bool  always = false 
)

Definition at line 657 of file xml2sdb.cpp.

658{
659 if (always || !str.empty())
660 SdbWriteStringTag(pdb, tag, (LPCWSTR)str.c_str());
661}
const WCHAR * str
BOOL WINAPI SdbWriteStringTag(PDB pdb, TAG tag, LPCWSTR string)
Definition: sdbwrite.c:220
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by InExclude::toSdb(), ShimRef::toSdb(), FlagRef::toSdb(), Shim::toSdb(), Flag::toSdb(), Data::toSdb(), Layer::toSdb(), MatchingFile::toSdb(), Exe::toSdb(), toSdb(), and WriteString().

◆ WriteString() [2/2]

void Database::WriteString ( TAG  tag,
const std::string &  str,
bool  always = false 
)

Definition at line 663 of file xml2sdb.cpp.

664{
665 WriteString(tag, sdbstring(str.begin(), str.end()), always);
666}

Member Data Documentation

◆ Exes

std::list<Exe> Database::Exes

Definition at line 236 of file xml2sdb.h.

Referenced by fromXml(), and toSdb().

◆ ID

GUID Database::ID = {}

Definition at line 232 of file xml2sdb.h.

Referenced by fromXml(), and toSdb().

◆ KnownFlags

std::map<sdbstring, TAGID> Database::KnownFlags
private

Definition at line 241 of file xml2sdb.h.

Referenced by FindFlagTagid(), and InsertFlagTagid().

◆ KnownPatches

std::map<sdbstring, TAGID> Database::KnownPatches
private

Definition at line 240 of file xml2sdb.h.

Referenced by FindPatchTagid(), and InsertPatchTagid().

◆ KnownShims

std::map<sdbstring, TAGID> Database::KnownShims
private

Definition at line 239 of file xml2sdb.h.

Referenced by FindShimTagid(), and InsertShimTagid().

◆ Layers

std::list<Layer> Database::Layers

Definition at line 235 of file xml2sdb.h.

Referenced by fromXml(), and toSdb().

◆ Library

struct Library Database::Library

Definition at line 234 of file xml2sdb.h.

◆ Name

std::string Database::Name

Definition at line 231 of file xml2sdb.h.

Referenced by fromXml(), and toSdb().

◆ pdb

PDB Database::pdb = nullptr
private

◆ platform

PlatformType Database::platform = PLATFORM_ANY
private

Definition at line 243 of file xml2sdb.h.


The documentation for this struct was generated from the following files: