How does it work?

MagNumDB is a database that contains about 360,000 items. These items are constants, names, values all extracted from more than 9,000 header files (.h, .hxx, .hpp, .idl, etc.) provided by standard Windows and Visual Studio SDKs and WDKs.

Some values have been extracted from the very special uuid.lib file that contains the value of thousands of guids and property keys, not present anywhere else in header files. This can explain some duplicates (because names in uuid.lib are not always exactly the same as names in .h parsed files...).

It also contains around 36,0000 undocumented guids that we found ... meeeeep ...

 "C2P5"

To build this database, we have tried many existing parsers, things like CLANG or other fine tools, but they just don't suit our needs. They can't handle thousands of files that don't compile together, they can't handle some specific (or just very old) Microsoft constructs or annotations, they don't remember the stack of #define directives that led to a definition, they only give you a final AST, not a partial one, etc.

So, in the end, we have written a C/C++ parser named C2P5 (for C/CPP/PreProcessor/Parser), tailored specifically for computing constants. C2P5 is capable of preprocessing, parsing and partially evaluating all header files as if they were included in a one big virtual project (that of course, does not compile) on a 32G RAM machine. It currently supports the following preprocessor and C/C++ constructs:

  • #define preprocessor that define constants
  • #define preprocessor that define expression to compute constants
  • C and C++ constants, strings and enum definitions, and some level of pointerness
  • Special GUID constructs like DECLSPEC_UUID, DEFINE_GUIDSTRUCT, MIDL_INTERFACE, you name it
  • PROPERTYKEY constructs
  • Some IDL constructs
  • Etc.

The parser remembers dynamic preprocessor definitions (#if, #ifdef, etc.) that are conditions for constants definitions and expression computation. All parsed items are saved in the database, as well as the associated conditions. There may be more than one item corresponding to a given name, if there are differences in their associated conditions stack.

C2P5 supports the following types of constants, regardless of the way they are defined in source files:

  • integer, signed or unsigned, from 8-bit to 128-bit
  • floating point number, single (32-bit) or double (64-bit)
  • globally unique identifier, or guid, uuid, CLSID, IID, etc.
  • string, in narrow, wide, or utf-8/16/32 formats
  • character, in narrow, wide, or utf-8/16/32 formats
  • pointer, a constant cast as a pointer
  • property key, or PROPERTYKEY, or PKEY, a combination of a guid (fmtid) and a 32-bit integer (id).

 Powered by

C2P5 and this MagNumDB web site are written in C# and use a Lucene database as a full-text search engine. C2P5 uses a custom ANTLR4cs C grammar for expression parsing, not for preprocessor parsing.

 

 Frequently Asked Questions

  • Q: Can I run custom queries?
    A: Yes. You can use Lucene's query syntax. Note the Database is case insensitive. Check out the list of columns with their corresponding database column names:

    • Index: the item's index.
    • Name: the item's name, or title. For enum values, it's prefixed with the enum's name.
      Corresponding database field: title.
    • Type: the item's type, expressed in a specific, universal system.
      Corresponding database's field: valuetype, but use the value of the Storage type column for queries on items type.
    • Value: the item's value. For string values, it's displayed as is w/o quotes nor escaping.
      Corresponding database field: value. There is also a typedvalue field that can contain database's Int32, Int64, Float, Double or String typed values.
    • Hex Value: the item's hexadecimal value, only valid for integer types.
      There is no corresponding database field.
    • Signed Value: the item's signed value, only valid for integer and double types. Useful when you found a unsigned number and want to get the corresponding signed value (uint -> int for example).
      There is no corresponding database field.
    • Source lines(s): the source lines from which the item was extracted. Comments and characters such as TAB, CR are preserved.
      Corresponding database field: source.
    • File path: the file path from which the item was extracted, terminated by the line index.
      Corresponding database field: filepath. There are also directory and filename fields. filename is useful to query for values in a given file.
    • Score: Database's score value. Items are returned sorted by score.
    • Guid formats: a utility columns that proposes all possible guid formats. Only valid for guid types.
      There is no corresponding database field
    • Char type: the character encoding (narrow, wide, etc.). Only valid for char and string values.
      Corresponding database field: chartype.
    • Storage type: the exact storage type in the database. Only used for specific queries.
      Corresponding database field: valuetype.
    • Conditions: the list of preprocessor conditions for a given item. If a condition is surrounded with a REVERSE function, it means the reverse condition of what's surrounded was the condition.
      Corresponding database field: conditions. There may be multiple conditions fields for one item.

    Some important points to note:

    • If you search for a negative number (like error codes expressed using signed integers), you can surround the search with double quotes, for example searching for "-2147009290" is equivalent to searching for 0x80073CF6, 80073CF6 (or even 3CF6 in this specific case). If you don't surround negative numbers with double quotes, the system will search for signed and unsigned corresponding values.
    • The full-text search uses items' name, value, hex value, guid formats, source lines, etc. so refine your search if you get back too many items.
    • You can search for guid binary values using just a part of their full definition. For example, if you search for '79eac9c5', it will get you 3 guid entries
    • Leading wild card search (*whatever) is allowed, but it may slow down the search significantly.

    Here are some example or custom queries:

    title:wm_user returns the WM_USER Windows message item, not all items that reference the WM_USER token.

    title:wm_u* returns all items (Windows messages probably) whose name starts with WM_U*.

    value:1024 AND title:wm_* returns all items (Windows messages probably) whose name starts with WM_U* and value is 1024. Note AND must be UPPERCASE for database to understand it as an AND operator.

    value:"00000002-0000-0000-C000-000000000046" returns the IMalloc IID guid value.

  • Q: I always get back 400 items at most. Why?
    A: The MagNumDb site currently limits the number of returned items to this value by design. This should be enough for most real search scenarios (like enums with a big list of values).

  • Q: Some values are empty. Why?
    A: The expression evaluator cannot always compute the final value, because it sometimes require contextual information (custom defines, compiler architecture, etc.) that the parser doesn't have at parsing time. You can enable the Source line(s) column to check what's the corresponding source and try to work it out by yourself. The origin file path and line number is also included.

  • Q: Can I get all values for a given enum?
    A: Sure. For example, __VSHPROPID is the name of an enum, and a query like this: parent:__VSHPROPID will get all the enum's values (66 entries).

  • Q: I sometimes get back items whose name starts with "__magnumdb__enum_". Why?
    A: C allows unnamed enums. The MagNumDb parser just gives them a name, using the defining file name and a counter.

  • Q: I sometimes get back the same item/name twice or more with different values. For example:  TARGET_IS_NT60_OR_LATER. Why?
    A: This can be the case with defines. Their value may be different if they were surrounded by # directives (#if, #else, etc.) in the original source code. You can enable the Condition(s) column to check what are the corresponding conditions for a given item.
    Note: if a condition is surrounded with a funny REVERSE function token, it means the reverse condition of what's surrounded.

  • Q: I can't connect from an IP address but from another one, it works. Why?
    A: The server is constantly monitored for excessive usage. It's possible your IP address has been banned because massive sets of queries where observed. If you think this is an error, send us an email.

 Database Details

  • Last update date: Monday May 30, 2022
  • Items count: 368054
  • Parsed files count: 9521
  • Windows SDK version: 10.0.22621.0
  • NetFx SDK version: 4.8
  • MSVC Tools version: 14.32.31326
  • KMDF version: 1.33
  • UMDF version: 2.33

 Rest API

There is a JSON version API (you will have to figure out the schema, it's pretty obvious) that you can call here (the search query is the 'q' parameter):

   https://www.magnumdb.com/api.aspx?q=0xC000000D&key=you-api-key-goes-here

Note this API also has a 400 items maximum limit and the server is monitored for excessive usage (the key can be removed without notice). If you want to get a key, send us an email.

 

 Privacy & Terms

This privacy policy is for the www.magnumdb.com website and governs the privacy of online users who choose to use it. It sets out the different areas where user privacy is concerned and outlines the obligations and requirements of the users, the website and website owners.

 Cookies

www.magnumdb.com uses cookies for the sole reason of monitoring and improving our services, using Google Analytics. You can however decide to opt out of having your anonymized browsing activity within this site recorded by monitoring cookies, if you follow the instructions from Google here: Google Analytics Opt-out Browser Add-on

 User Information Storage

www.magnumdb.com stores no User Information nor Personal Data, at all.

 Data Security and Retention

This site application is hosted in Microsoft Azure in the "Central US" data center. See Microsoft’s Azure Trust Center for more information.

We make reasonable efforts to ensure a level of security appropriate to the risk associated with the processing of data.

Unfortunately, no data transmission or storage system can be guaranteed to be 100% secure. If you have reason to believe that your interaction with us is no longer secure, please contact us immediately.

We do not retain any Personal Data. Where we retain data, we do so in accordance with any limitation periods and records retention obligations that are imposed by applicable law.

   Disclaimer

All product names, logos, and brands are property of their respective owners. All company, product and service names used in this website are for identification purposes only.

All values, names, source code fragments displayed here have been extracted from files that are property of their respective owners.

THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND OTHER THAN AS SPECIFICALLY SET FORTH IN THE LICENSE AGREEMENT, INCLUDING WITHOUT LIMITATION WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

 

 Contact

We welcome feedback.
Seen anything missing? A bug? A wrong value? Do you have any suggestion for improvements? Do you have an idea for a cool new feature?

Please contact us here

 About MagNumDB

MagNumDB © 2017-2022 Simon Mourier V1.5.0. All rights reserved.

Profile for Simon Mourier at Stack Overflow, Q&A for professional and enthusiast programmers


All product names, logos, and brands are property of their respective owners. All company, product and service names used in this website are for identification purposes only.

All values, names, source code fragments displayed here have been extracted from files that are property of their respective owners.

THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND OTHER THAN AS SPECIFICALLY SET FORTH IN THE LICENSE AGREEMENT, INCLUDING WITHOUT LIMITATION WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Index Score Name Type Value Hex value Signed value Guid formats Char type Storage type Source line(s) File path Condition(s)
Index Score Name Type Value Hex value Signed value Guid formats Char type Storage type Source line(s) File path Condition(s)
1 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagCharToIndexMap Int32 1885433187 0x70616D63 1885433187 System.Int32
VxOpenTypeTableTagCharToIndexMap	= 1885433187,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1003,0)
2 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagControlValue Int32 544503395 0x20747663 544503395 System.Int32
VxOpenTypeTableTagControlValue	= 544503395,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1004,0)
3 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagBitmapData Int32 1413759557 0x54444245 1413759557 System.Int32
VxOpenTypeTableTagBitmapData	= 1413759557,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1005,0)
4 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagBitmapLocation Int32 1129071173 0x434C4245 1129071173 System.Int32
VxOpenTypeTableTagBitmapLocation	= 1129071173,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1006,0)
5 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagBitmapScale Int32 1129529925 0x43534245 1129529925 System.Int32
VxOpenTypeTableTagBitmapScale	= 1129529925,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1007,0)
6 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagEditor0 Int32 812934245 0x30746465 812934245 System.Int32
VxOpenTypeTableTagEditor0	= 812934245,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1008,0)
7 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagEditor1 Int32 829711461 0x31746465 829711461 System.Int32
VxOpenTypeTableTagEditor1	= 829711461,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1009,0)
8 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagEncryption Int32 1887007331 0x70797263 1887007331 System.Int32
VxOpenTypeTableTagEncryption	= 1887007331,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1010,0)
9 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagFontHeader Int32 1684104552 0x64616568 1684104552 System.Int32
VxOpenTypeTableTagFontHeader	= 1684104552,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1011,0)
10 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagFontProgram Int32 1835495526 0x6D677066 1835495526 System.Int32
VxOpenTypeTableTagFontProgram	= 1835495526,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1012,0)
11 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagGridfitAndScanProc Int32 1886609767 0x70736167 1886609767 System.Int32
VxOpenTypeTableTagGridfitAndScanProc	= 1886609767,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1013,0)
12 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagGlyphDirectory Int32 1919509607 0x72696467 1919509607 System.Int32
VxOpenTypeTableTagGlyphDirectory	= 1919509607,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1014,0)
13 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagGlyphData Int32 1719233639 0x66796C67 1719233639 System.Int32
VxOpenTypeTableTagGlyphData	= 1719233639,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1015,0)
14 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagHoriDeviceMetrics Int32 2020435048 0x786D6468 2020435048 System.Int32
VxOpenTypeTableTagHoriDeviceMetrics	= 2020435048,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1016,0)
15 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagHoriHeader Int32 1634035816 0x61656868 1634035816 System.Int32
VxOpenTypeTableTagHoriHeader	= 1634035816,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1017,0)
16 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagHorizontalMetrics Int32 2020896104 0x78746D68 2020896104 System.Int32
VxOpenTypeTableTagHorizontalMetrics	= 2020896104,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1018,0)
17 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagIndexToLoc Int32 1633906540 0x61636F6C 1633906540 System.Int32
VxOpenTypeTableTagIndexToLoc	= 1633906540,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1019,0)
18 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagKerning Int32 1852990827 0x6E72656B 1852990827 System.Int32
VxOpenTypeTableTagKerning	= 1852990827,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1020,0)
19 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagLinearThreshold Int32 1213420620 0x4853544C 1213420620 System.Int32
VxOpenTypeTableTagLinearThreshold	= 1213420620,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1021,0)
20 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagMaxProfile Int32 1886937453 0x7078616D 1886937453 System.Int32
VxOpenTypeTableTagMaxProfile	= 1886937453,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1022,0)
21 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagNamingTable Int32 1701667182 0x656D616E 1701667182 System.Int32
VxOpenTypeTableTagNamingTable	= 1701667182,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1023,0)
22 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagOS_2 Int32 841962319 0x322F534F 841962319 System.Int32
VxOpenTypeTableTagOS_2	= 841962319,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1024,0)
23 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagPostscript Int32 1953722224 0x74736F70 1953722224 System.Int32
VxOpenTypeTableTagPostscript	= 1953722224,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1025,0)
24 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagPreProgram Int32 1885696624 0x70657270 1885696624 System.Int32
VxOpenTypeTableTagPreProgram	= 1885696624,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1026,0)
25 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagVertDeviceMetrics Int32 1481458774 0x584D4456 1481458774 System.Int32
VxOpenTypeTableTagVertDeviceMetrics	= 1481458774,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1027,0)
26 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagVertHeader Int32 1634035830 0x61656876 1634035830 System.Int32
VxOpenTypeTableTagVertHeader	= 1634035830,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1028,0)
27 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagVerticalMetrics Int32 2020896118 0x78746D76 2020896118 System.Int32
VxOpenTypeTableTagVerticalMetrics	= 2020896118,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1029,0)
28 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagPCLT Int32 1414284112 0x544C4350 1414284112 System.Int32
VxOpenTypeTableTagPCLT	= 1414284112,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1030,0)
29 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagTTO_GSUB Int32 1112888135 0x42555347 1112888135 System.Int32
VxOpenTypeTableTagTTO_GSUB	= 1112888135,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1031,0)
30 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagTTO_GPOS Int32 1397706823 0x534F5047 1397706823 System.Int32
VxOpenTypeTableTagTTO_GPOS	= 1397706823,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1032,0)
31 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagTTO_GDEF Int32 1178944583 0x46454447 1178944583 System.Int32
VxOpenTypeTableTagTTO_GDEF	= 1178944583,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1033,0)
32 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagTTO_BASE Int32 1163084098 0x45534142 1163084098 System.Int32
VxOpenTypeTableTagTTO_BASE	= 1163084098,
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1034,0)
33 10.2331 VxOpenTypeTableTag::VxOpenTypeTableTagTTO_JSTF Int32 1179931466 0x4654534A 1179931466 System.Int32
VxOpenTypeTableTagTTO_JSTF	= 1179931466
%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VSSDK\VisualStudioIntegration\Common\Inc\VSEditor.h(1035,0)