21#define C_ASSERT(expr) extern char (*c_assert(void)) [(expr) ? 1 : -1]
54 std::istringstream iss(
str);
56 while (std::getline(iss,
item,
','))
58 std::string trimmedItem =
item;
59 trimmedItem.erase(
remove_if(trimmedItem.begin(), trimmedItem.end(),
isspace), trimmedItem.end());
60 std::transform(trimmedItem.begin(), trimmedItem.end(), trimmedItem.begin(),
::toupper);
63 if (trimmedItem ==
p->name)
85 for (
size_t n = 0;
n <
sizeof(
GUID); ++
n)
93 const char* txt = txtNode ? txtNode->
Value() :
NULL;
95 return std::string(txt);
103 const char* txt = raw ? raw->
Value() :
NULL;
105 return std::string(txt);
106 return std::string();
115 const char* rawVal =
elem->Attribute(nodeName);
117 return std::string(rawVal);
165 const char *lpszGUID =
str.c_str();
168 bool expectBrace =
true;
174 if (*lpszGUID !=
'{')
186 if (*lpszGUID !=
'-')
191 return expectBrace == (*lpszGUID ==
'}');
195 CHAR ch = *lpszGUID, ch2 = lpszGUID[1];
197 bool converted =
true;
205#ifndef WORDS_BIGENDIAN
310 while (
node.ToNode())
313 if (
object.fromXml(
node))
316 node =
node.NextSiblingElement(nodeName);
324 while (
node.ToNode())
330 node =
node.NextSiblingElement(nodeName);
337 for (
typename std::list<T>::iterator it =
data.begin(); it !=
data.end(); ++it)
356 return !
Name.empty();
380 return !
Name.empty();
438 return !
Name.empty();
475 return !
Name.empty();
481 return !
Name.empty();
487 return !
Name.empty();
490 SHIM_ERR(
"Data node (%s) without value!\n",
Name.c_str());
582 SHIM_ERR(
"TAG_BIN_FILE_VERSION Unimplemented\n");
585 SHIM_ERR(
"TAG_VER_LANGUAGE Unimplemented\n");
589 SHIM_ERR(
"TAG_UPTO_BIN_FILE_VERSION Unimplemented\n");
614 return !
Name.empty();
653 if (always || !
data.empty())
659 if (always || !
str.empty())
704 if (NodeName ==
"SHIM")
710 else if (NodeName ==
"FLAG")
713 if (
flag.fromXml(libChild))
716 else if (NodeName ==
"INCLUDE" || NodeName ==
"EXCLUDE")
777 std::transform(nameLower.begin(), nameLower.end(), nameLower.begin(),
::tolower);
780 std::string nameA(
name.begin(),
name.end());
784 lookup[nameLower] = tagid;
790 std::transform(nameLower.begin(), nameLower.end(), nameLower.begin(),
::tolower);
791 std::map<sdbstring, TAGID>::const_iterator it =
lookup.find(nameLower);
_STLP_INLINE_LOOP _ForwardIter remove_if(_ForwardIter __first, _ForwardIter __last, _Predicate __pred)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
XMLError LoadFile(const char *filename)
XMLHandle FirstChild()
Get the first child of this handle.
XMLNode * ToNode()
Safe cast to XMLNode. This can return null.
XMLHandle FirstChildElement(const char *name=0)
Get the first child element of this handle.
XMLHandle NextSibling()
Get the next sibling of this handle.
XMLElement * ToElement()
Safe cast to XMLElement. This can return null.
const char * Value() const
#define TAG_MATCHING_FILE
#define TAG_COMPILER_VERSION
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLuint GLsizei GLsizei * length
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
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 const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define TAG_ORIGINAL_FILENAME
#define TAG_LINKER_VERSION
#define TAG_FILE_DESCRIPTION
#define TAG_INTERNAL_NAME
#define TAG_PRODUCT_VERSION
static PLARGE_INTEGER Time
NTSYSAPI VOID NTAPI RtlSecondsSince1970ToTime(_In_ ULONG SecondsSince1970, _Out_ PLARGE_INTEGER Time)
#define SHIM_WARN(fmt,...)
#define SHIM_ERR(fmt,...)
#define TAG_FLAG_PROCESSPARAM
#define TAG_DATA_VALUETYPE
#define TAG_FLAG_MASK_KERNEL
#define TAG_FLAG_MASK_USER
BOOL WINAPI SdbWriteNULLTag(PDB pdb, TAG tag)
TAGID WINAPI SdbBeginWriteListTag(PDB pdb, TAG tag)
BOOL WINAPI SdbWriteQWORDTag(PDB pdb, TAG tag, QWORD data)
BOOL WINAPI SdbWriteStringTag(PDB pdb, TAG tag, LPCWSTR string)
BOOL WINAPI SdbWriteDWORDTag(PDB pdb, TAG tag, DWORD data)
BOOL WINAPI SdbEndWriteListTag(PDB pdb, TAGID tagid)
BOOL WINAPI SdbWriteBinaryTag(PDB pdb, TAG tag, const BYTE *data, DWORD size)
PDB WINAPI SdbCreateDatabase(LPCWSTR path, PATH_TYPE type)
void WINAPI SdbCloseDatabaseWrite(PDB pdb)
_Check_return_ int __cdecl rand(void)
bool fromXml(XMLHandle dbNode)
void InsertShimTagid(const sdbstring &name, TAGID tagid)
TAGID FindShimTagid(const sdbstring &name)
void WriteString(TAG tag, const sdbstring &str, bool always=false)
TAGID FindPatchTagid(const sdbstring &name)
void WriteQWord(TAG tag, QWORD value, bool always=false)
BOOL EndWriteListTag(TAGID tagid)
void WriteBinary(TAG tag, const GUID &guid, bool always=false)
TAGID FindFlagTagid(const sdbstring &name)
std::map< sdbstring, TAGID > KnownPatches
std::map< sdbstring, TAGID > KnownFlags
void InsertPatchTagid(const sdbstring &name, TAGID tagid)
TAGID BeginWriteListTag(TAG tag)
bool fromXml(const char *fileName, PlatformType platform)
void InsertFlagTagid(const sdbstring &name, TAGID tagid)
std::map< sdbstring, TAGID > KnownShims
std::list< Layer > Layers
void WriteDWord(TAG tag, DWORD value, bool always=false)
std::list< MatchingFile > MatchingFiles
bool fromXml(XMLHandle dbNode)
std::list< ShimRef > ShimRefs
std::list< FlagRef > FlagRefs
bool fromXml(XMLHandle dbNode)
bool fromXml(XMLHandle dbNode)
bool fromXml(XMLHandle dbNode)
bool fromXml(XMLHandle dbNode)
std::list< FlagRef > FlagRefs
std::list< ShimRef > ShimRefs
std::list< InExclude > InExcludes
std::string OriginalFilename
std::string ProductVersion
std::string FileDescription
std::string BinFileVersion
std::string UptoBinFileVersion
bool fromXml(XMLHandle dbNode)
bool fromXml(XMLHandle dbNode)
std::list< InExclude > InExcludes
std::list< InExclude > InExcludes
bool fromXml(XMLHandle dbNode)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
#define success(from, fromstr, to, tostr)
static const GUID GUID_NULL
static TAGID FindTagid(const sdbstring &name, const std::map< sdbstring, TAGID > &lookup)
bool ReadGuidNode(XMLHandle dbNode, const char *nodeName, GUID &guid)
static bool StringToGuid(const std::string &str, GUID &guid)
static const char szCompilerVersion[]
std::string ToString(XMLHandle node)
VOID NTAPI RtlSecondsSince1970ToTime(IN ULONG SecondsSince1970, OUT PLARGE_INTEGER Time)
unsigned char char2byte(char hexChar, bool *success=NULL)
QWORD ReadQWordNode(XMLHandle dbNode, const char *nodeName)
DWORD ReadDWordNode(XMLHandle dbNode, const char *nodeName)
DWORD str_to_enum(const std::string &str, const str_to_flag *table)
PlatformType ReadPlatformNode(XMLHandle dbNode, const char *nodeName)
static void InsertTagid(const sdbstring &name, TAGID tagid, std::map< sdbstring, TAGID > &lookup, const char *type)
void ReadGeneric(XMLHandle dbNode, std::list< T > &result, const char *nodeName)
std::string ToNodeName(XMLHandle node)
str_to_flag platform_to_flag[]
bool WriteGeneric(std::list< T > &data, Database &db)
std::string ReadStringNode(XMLHandle dbNode, const char *nodeName)
bool ReadBinaryNode(XMLHandle dbNode, const char *nodeName, std::vector< BYTE > &data)
bool IsEmptyGuid(const GUID &g)
std::basic_string< WCHAR > sdbstring