ReactOS 0.4.17-dev-1190-g4c812f4
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)
 
std::string FindKShimModule (const std::string &name)
 

Public Attributes

std::string Name
 
GUID ID = {}
 
struct Library Library
 
std::list< Layer > Layers
 
std::list< Exe > Exes
 
std::list< Exe > KDrivers
 
std::list< Shim > KShims
 

Private Attributes

std::map< sdbstring, TAGID > KnownShims
 
std::map< sdbstring, TAGID > KnownPatches
 
std::map< sdbstring, TAGID > KnownFlags
 
PDB pdb = nullptr
 
PlatformType platform = PLATFORM_ANY
 

Detailed Description

Definition at line 188 of file xml2sdb.h.

Member Function Documentation

◆ BeginWriteListTag()

TAGID Database::BeginWriteListTag ( TAG  tag)

Definition at line 716 of file xml2sdb.cpp.

717{
719}
TAGID WINAPI SdbBeginWriteListTag(PDB pdb, TAG tag)
Definition: sdbwrite.c:321
PDB pdb
Definition: xml2sdb.h:255
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 721 of file xml2sdb.cpp.

722{
723 return SdbEndWriteListTag(pdb, tagid);
724}
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 860 of file xml2sdb.cpp.

861{
862 return FindTagid(name, KnownFlags);
863}
std::map< sdbstring, TAGID > KnownFlags
Definition: xml2sdb.h:254
Definition: name.c:39
static TAGID FindTagid(const sdbstring &name, const std::map< sdbstring, TAGID > &lookup)
Definition: xml2sdb.cpp:825

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

◆ FindFlagTagid() [2/2]

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

Definition at line 233 of file xml2sdb.h.

234 {
235 return FindFlagTagid(sdbstring(name.begin(), name.end()));
236 }
TAGID FindFlagTagid(const sdbstring &name)
Definition: xml2sdb.cpp:860
std::basic_string< WCHAR > sdbstring
Definition: xml2sdb.h:31

◆ FindKShimModule()

std::string Database::FindKShimModule ( const std::string &  name)

Definition at line 865 of file xml2sdb.cpp.

866{
867 for (const Shim& shim : KShims)
868 {
869 if (shim.Name.size() == name.size() &&
870 std::equal(name.begin(), name.end(), shim.Name.begin(),
871 [](char a, char b) { return ::tolower(a) == ::tolower(b); }))
872 {
873 return shim.DllFile;
874 }
875 }
876 return std::string();
877}
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
GLboolean GLboolean GLboolean GLboolean a
Definition: glext.h:6204
std::list< Shim > KShims
Definition: xml2sdb.h:249
Definition: xml2sdb.h:89

Referenced by ShimRef::toSdb().

◆ FindPatchTagid() [1/2]

TAGID Database::FindPatchTagid ( const sdbstring &  name)

Definition at line 850 of file xml2sdb.cpp.

851{
852 return FindTagid(name, KnownPatches);
853}
std::map< sdbstring, TAGID > KnownPatches
Definition: xml2sdb.h:253

Referenced by FindPatchTagid().

◆ FindPatchTagid() [2/2]

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

Definition at line 222 of file xml2sdb.h.

223 {
224 return FindPatchTagid(sdbstring(name.begin(), name.end()));
225 }
TAGID FindPatchTagid(const sdbstring &name)
Definition: xml2sdb.cpp:850

◆ FindShimTagid() [1/2]

TAGID Database::FindShimTagid ( const sdbstring &  name)

Definition at line 840 of file xml2sdb.cpp.

841{
842 return FindTagid(name, KnownShims);
843}
std::map< sdbstring, TAGID > KnownShims
Definition: xml2sdb.h:252

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

◆ FindShimTagid() [2/2]

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

Definition at line 210 of file xml2sdb.h.

211 {
212 return FindShimTagid(sdbstring(name.begin(), name.end()));
213 }
TAGID FindShimTagid(const sdbstring &name)
Definition: xml2sdb.cpp:840

◆ fromXml() [1/2]

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

Definition at line 764 of file xml2sdb.cpp.

765{
767 tinyxml2::XMLError err = doc.LoadFile(fileName);
768 XMLHandle dbHandle = tinyxml2::XMLHandle(&doc).FirstChildElement("SDB").FirstChildElement("DATABASE");
769 platform = platform_;
770 return fromXml(dbHandle);
771}
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:764

Referenced by convert(), and fromXml().

◆ fromXml() [2/2]

bool Database::fromXml ( XMLHandle  dbNode)

Definition at line 726 of file xml2sdb.cpp.

727{
728 Name = ReadStringNode(dbNode, "NAME");
729 ReadGuidNode(dbNode, "DATABASE_ID", ID);
730
731 XMLHandle libChild = dbNode.FirstChildElement("LIBRARY").FirstChild();
732 while (libChild.ToNode())
733 {
734 std::string NodeName = ToNodeName(libChild);
735 if (NodeName == "SHIM")
736 {
737 Shim shim;
738 if (shim.fromXml(libChild) && ((shim.Platform & platform) != PLATFORM_NONE))
739 Library.Shims.push_back(shim);
740 }
741 else if (NodeName == "FLAG")
742 {
743 Flag flag;
744 if (flag.fromXml(libChild))
745 Library.Flags.push_back(flag);
746 }
747 else if (NodeName == "INCLUDE" || NodeName == "EXCLUDE")
748 {
749 InExclude inex;
750 if (inex.fromXml(libChild))
751 Library.InExcludes.push_back(inex);
752 }
753 libChild = libChild.NextSibling();
754 }
755
756 ReadGeneric(dbNode, Layers, "LAYER", platform);
757 ReadGeneric(dbNode, Exes, "EXE", platform);
758
759 ReadGeneric(dbNode, KShims, "KSHIM", platform);
760 ReadGeneric(dbNode, KDrivers, "KDRIVER", platform);
761 return true;
762}
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:241
std::list< Exe > Exes
Definition: xml2sdb.h:245
std::list< Layer > Layers
Definition: xml2sdb.h:244
std::list< Exe > KDrivers
Definition: xml2sdb.h:248
std::string Name
Definition: xml2sdb.h:240
Definition: xml2sdb.h:103
bool fromXml(XMLHandle dbNode)
Definition: xml2sdb.cpp:284
std::list< Shim > Shims
Definition: xml2sdb.h:184
std::list< InExclude > InExcludes
Definition: xml2sdb.h:183
std::list< Flag > Flags
Definition: xml2sdb.h:185
PlatformType Platform
Definition: xml2sdb.h:98
bool fromXml(XMLHandle dbNode)
Definition: xml2sdb.cpp:416
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:37

◆ InsertFlagTagid() [1/2]

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

Definition at line 855 of file xml2sdb.cpp.

856{
857 InsertTagid(name, tagid, KnownFlags, "Flag");
858}
static void InsertTagid(const sdbstring &name, TAGID tagid, std::map< sdbstring, TAGID > &lookup, const char *type)
Definition: xml2sdb.cpp:812

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

◆ InsertFlagTagid() [2/2]

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

Definition at line 228 of file xml2sdb.h.

229 {
230 InsertFlagTagid(sdbstring(name.begin(), name.end()), tagid);
231 }
void InsertFlagTagid(const sdbstring &name, TAGID tagid)
Definition: xml2sdb.cpp:855

◆ InsertPatchTagid() [1/2]

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

Definition at line 845 of file xml2sdb.cpp.

846{
847 InsertTagid(name, tagid, KnownPatches, "Patch");
848}

Referenced by InsertPatchTagid().

◆ InsertPatchTagid() [2/2]

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

Definition at line 217 of file xml2sdb.h.

218 {
219 InsertPatchTagid(sdbstring(name.begin(), name.end()), tagid);
220 }
void InsertPatchTagid(const sdbstring &name, TAGID tagid)
Definition: xml2sdb.cpp:845

◆ InsertShimTagid() [1/2]

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

Definition at line 835 of file xml2sdb.cpp.

836{
837 InsertTagid(name, tagid, KnownShims, "Shim");
838}

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

◆ InsertShimTagid() [2/2]

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

Definition at line 205 of file xml2sdb.h.

206 {
207 InsertShimTagid(sdbstring(name.begin(), name.end()), tagid);
208 }
void InsertShimTagid(const sdbstring &name, TAGID tagid)
Definition: xml2sdb.cpp:835

◆ toSdb()

bool Database::toSdb ( LPCWSTR  path)

Definition at line 773 of file xml2sdb.cpp.

774{
776 TAGID tidDatabase = BeginWriteListTag(TAG_DATABASE);
777 LARGE_INTEGER li = { 0 };
782 WriteString(TAG_NAME, Name, true);
783 if (IsEmptyGuid(ID))
784 {
785 SHIM_WARN("DB has empty ID!\n");
786 RandomGuid(ID);
787 }
789 TAGID tidLibrary = BeginWriteListTag(TAG_LIBRARY);
790 if (!WriteGeneric(Library.InExcludes, *this))
791 return false;
792 if (!WriteGeneric(Library.Shims, *this))
793 return false;
794 if (!WriteGeneric(Library.Flags, *this))
795 return false;
796 EndWriteListTag(tidLibrary);
797 if (!WriteGeneric(Layers, *this))
798 return false;
799 if (!WriteGeneric(Exes, *this))
800 return false;
801 if (!WriteGeneric(KShims, *this))
802 return false;
803 if (!WriteGeneric(KDrivers, *this))
804 return false;
805 EndWriteListTag(tidDatabase);
806
808 pdb = nullptr;
809 return true;
810}
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:688
void WriteQWord(TAG tag, QWORD value, bool always=false)
Definition: xml2sdb.cpp:705
BOOL EndWriteListTag(TAGID tagid)
Definition: xml2sdb.cpp:721
void WriteBinary(TAG tag, const GUID &guid, bool always=false)
Definition: xml2sdb.cpp:676
TAGID BeginWriteListTag(TAG tag)
Definition: xml2sdb.cpp:716
void WriteDWord(TAG tag, DWORD value, bool always=false)
Definition: xml2sdb.cpp:699
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 676 of file xml2sdb.cpp.

677{
678 if (always || !IsEmptyGuid(guid))
679 SdbWriteBinaryTag(pdb, tag, (BYTE*)&guid, sizeof(GUID));
680}
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 682 of file xml2sdb.cpp.

683{
684 if (always || !data.empty())
685 SdbWriteBinaryTag(pdb, tag, data.data(), data.size());
686}
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 699 of file xml2sdb.cpp.

700{
701 if (always || value)
703}
BOOL WINAPI SdbWriteDWORDTag(PDB pdb, TAG tag, DWORD data)
Definition: sdbwrite.c:182
Definition: pdh_main.c:64

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

◆ WriteNull()

void Database::WriteNull ( TAG  tag)

Definition at line 711 of file xml2sdb.cpp.

712{
714}
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 705 of file xml2sdb.cpp.

706{
707 if (always || value)
709}
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 688 of file xml2sdb.cpp.

689{
690 if (always || !str.empty())
691 SdbWriteStringTag(pdb, tag, (LPCWSTR)str.c_str());
692}
const WCHAR * str
BOOL WINAPI SdbWriteStringTag(PDB pdb, TAG tag, LPCWSTR string)
Definition: sdbwrite.c:220
const uint16_t * LPCWSTR
Definition: typedefs.h:57

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 694 of file xml2sdb.cpp.

695{
696 WriteString(tag, sdbstring(str.begin(), str.end()), always);
697}

Member Data Documentation

◆ Exes

std::list<Exe> Database::Exes

Definition at line 245 of file xml2sdb.h.

Referenced by fromXml(), and toSdb().

◆ ID

GUID Database::ID = {}

Definition at line 241 of file xml2sdb.h.

Referenced by fromXml(), and toSdb().

◆ KDrivers

std::list<Exe> Database::KDrivers

Definition at line 248 of file xml2sdb.h.

Referenced by fromXml(), and toSdb().

◆ KnownFlags

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

Definition at line 254 of file xml2sdb.h.

Referenced by FindFlagTagid(), and InsertFlagTagid().

◆ KnownPatches

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

Definition at line 253 of file xml2sdb.h.

Referenced by FindPatchTagid(), and InsertPatchTagid().

◆ KnownShims

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

Definition at line 252 of file xml2sdb.h.

Referenced by FindShimTagid(), and InsertShimTagid().

◆ KShims

std::list<Shim> Database::KShims

Definition at line 249 of file xml2sdb.h.

Referenced by FindKShimModule(), fromXml(), and toSdb().

◆ Layers

std::list<Layer> Database::Layers

Definition at line 244 of file xml2sdb.h.

Referenced by fromXml(), and toSdb().

◆ Library

struct Library Database::Library

Definition at line 243 of file xml2sdb.h.

◆ Name

std::string Database::Name

Definition at line 240 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 256 of file xml2sdb.h.


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