How does it work?

MagNumDB is a database that contains about 350,000 items. These items are constants, names, values all extracted from more than 6,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 ...


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.

 Database Metrics

  • Last update date: Thursday May 13, 2020
  • Items count: 340878
  • Parsed files count: 8447
  • Windows SDK version: 10.0.19041.0
  • NetFx SDK version: 4.8
  • MSVC Tools version: 14.25.28610

 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):

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.



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-2021 Simon Mourier V1.3.2. 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.


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 5.180788 ContactSelectionMode::Fields Int32 1 0x00000001 1 System.Int32
Fields   = 1
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\winrt\Windows.ApplicationModel.contacts.idl(861,0)
2 3.66337 PROPTYPE::TYPE_FLAGS Int32 1010 0x000003F2 1010 System.Int32
TYPE_FLAGS,     // Flags fields
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\imnact.idl(677,0)
3 3.453858 IN_CLASSD_NSHIFT Int32 28 0x0000001C 28 System.Int32
#define IN_CLASSD_NSHIFT        28               /* net and host fields, but */
#define IN_CLASSD_NSHIFT        28               /* net and host fields, but */
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\shared\ws2def.h(596,0)
4 3.052808 PERF_SIZE_ZERO Int32 512 0x00000200 512 System.Int32
#define PERF_SIZE_ZERO          0x00000200  // for Zero Length fields
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\winperf.h(200,0)
5 3.052808 MAX_MOF_FIELDS Int32 16 0x00000010 16 System.Int32
#define MAX_MOF_FIELDS                      16  // Limit of USE_MOF_PTR fields
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\shared\evntrace.h(140,0)
  • If defined(_WINNT_) || defined(WINNT)
6 3.052808 DFX_Operation::MarkForAddNew Int32 10 0x0000000A 10 System.Int32
MarkForAddNew,          // marks fields dirty if not PSEUDO NULL
%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.16.27023\atlmfc\include\afxdao.h(412,0)
7 3.052808 RFX_Operation::MarkForAddNew Int32 6 0x00000006 6 System.Int32
MarkForAddNew,      // Prepare fields and flags for addnew operation
%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.16.27023\atlmfc\include\afxdb.h(334,0)
8 3.052808 RFX_Operation::BindFieldToColumn Int32 2 0x00000002 2 System.Int32
BindFieldToColumn,  // register users fields with ODBC SQLBindCol
%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.16.27023\atlmfc\include\afxdb.h(330,0)
9 3.052808 RFX_Operation::MarkForUpdate Int32 7 0x00000007 7 System.Int32
MarkForUpdate,      // Prepare fields and flags for update operation
%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.16.27023\atlmfc\include\afxdb.h(335,0)
10 3.052808 FILETYPEATTRIBUTEFLAGS::FTA_NoDDE Int32 8192 0x00002000 8192 System.Int32
FTA_NoDDE                   = 0x00002000, // no editing of the DDE fields
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\shlwapi.h(1771,0)
  • Ifndef NOSHLWAPI
11 3.052808 ContactSelectionMode Enum
enum ContactSelectionMode
                Contacts = 0,
                Fields   = 1
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\winrt\Windows.ApplicationModel.contacts.idl(858,0)
12 2.442247 TOUCHINPUTMASKF_CONTACTAREA Int32 4 0x00000004 4 System.Int32
#define TOUCHINPUTMASKF_CONTACTAREA     0x0004  // the cxContact and cyContact fields are valid
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\winuser.h(6205,0)
  • Ifndef NOUSER
  • If (WINVER >= 0x0601)
13 2.442247 TOUCH_MASK_NONE Int32 0 0x00000000 0 System.Int32
#define TOUCH_MASK_NONE                 0x00000000 // Default - none of the optional fields are valid
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\winuser.h(6357,0)
  • Ifndef NOUSER
  • If (WINVER >= 0x0602)
14 2.442247 PEN_MASK_NONE Int32 0 0x00000000 0 System.Int32
#define PEN_MASK_NONE                   0x00000000 // Default - none of the optional fields are valid
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\winuser.h(6379,0)
  • Ifndef NOUSER
  • If (WINVER >= 0x0602)
15 2.442247 ELEMENT_STATUS_NOT_BUS Int32 32768 0x00008000 -32768 System.Int32
#define ELEMENT_STATUS_NOT_BUS   0x00008000 // Lun and SCSI Id fields are not on same bus as medium changer.
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\winioctl.h(9755,0)
16 2.442247 STORAGE_QUERY_TYPE::PropertyMaskQuery Int32 2 0x00000002 2 System.Int32
PropertyMaskQuery,                  // Used to retrieve a mask of writeable fields in the descriptor
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\winioctl.h(1067,0)
17 2.442247 DFX_Operation::MarkForEdit Int32 11 0x0000000B 11 System.Int32
MarkForEdit,            // marks fields dirty if don't match cache
%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.16.27023\atlmfc\include\afxdao.h(413,0)
18 2.442247 OpenOptions::optimizeBulkAdd Int32 16384 0x00004000 16384 System.Int32
optimizeBulkAdd =           0x4000, // Use prepared HSTMT for multiple AddNews, dirty fields must not change.
%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.16.27023\atlmfc\include\afxdb.h(636,0)
19 2.442247 ISFB_MASK_COLORS Int32 32 0x00000020 32 System.Int32
#define ISFB_MASK_COLORS         0x00000020 // TRUE if crXXXX fields are valid (except bkgnd)
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\ShlObj.h(544,0)
20 2.442247 KS_INTERLACE_1FieldPerSample Int32 2 0x00000002 2 System.Int32
#define KS_INTERLACE_1FieldPerSample         0x00000002  // else 2 fields per media sample
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\shared\ksmedia.h(4127,0)
  • If !defined(_KSMEDIA_)
21 2.442247 FILETYPEATTRIBUTEFLAGS::FTA_NoEditMIME Int32 32768 0x00008000 -32768 System.Int32
FTA_NoEditMIME              = 0x00008000, // no editing of the Content Type or Default Extension fields
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\shlwapi.h(1773,0)
  • Ifndef NOSHLWAPI
22 2.442247 E_DAO_TooManyLongColumns UInt32 2148142062 0x800A0BEE -2146825234 System.UInt32
#define E_DAO_TooManyLongColumns			DBDAOERR(3054) //Too many Memo or OLE object fields.
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\dbdaoerr.h(84,0)
23 2.442247 E_DAO_DotStarWithGrouping UInt32 2148142128 0x800A0C30 -2146825168 System.UInt32
#define E_DAO_DotStarWithGrouping			DBDAOERR(3120) //Can't group on fields selected with '*' (|).
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\dbdaoerr.h(150,0)
24 2.442247 E_DAO_StarWithGrouping UInt32 2148142129 0x800A0C31 -2146825167 System.UInt32
#define E_DAO_StarWithGrouping				DBDAOERR(3121) //Can't group on fields selected with '*'.
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\dbdaoerr.h(151,0)
25 2.442247 E_DAO_TooManyColumns UInt32 2148142198 0x800A0C76 -2146825098 System.UInt32
#define E_DAO_TooManyColumns				DBDAOERR(3190) //Too many fields defined.
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\dbdaoerr.h(220,0)
26 2.442247 E_DAO_VtoNoFields UInt32 2148142272 0x800A0CC0 -2146825024 System.UInt32
#define E_DAO_VtoNoFields					DBDAOERR(3264) //No fields defined - cannot append Tabledef or Index.
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\dbdaoerr.h(294,0)
27 2.442247 E_DAO_TooManyKeys UInt32 2148142285 0x800A0CCD -2146825011 System.UInt32
#define E_DAO_TooManyKeys					DBDAOERR(3277) //Can't have more than 10 fields in an index.
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\dbdaoerr.h(307,0)
28 2.442247 E_DAO_QueryWrongNumDestCol UInt32 2148142354 0x800A0D12 -2146824942 System.UInt32
#define E_DAO_QueryWrongNumDestCol			DBDAOERR(3346) //Number of query values and destination fields aren't the same.
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\dbdaoerr.h(376,0)
29 2.442247 E_DAO_OrderVsUnion UInt32 2148142359 0x800A0D17 -2146824937 System.UInt32
#define E_DAO_OrderVsUnion					DBDAOERR(3351) //ORDER BY expression (|) uses non-output fields.
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\dbdaoerr.h(381,0)
30 2.442247 E_DAO_VtoNoFieldsRel UInt32 2148142374 0x800A0D26 -2146824922 System.UInt32
#define E_DAO_VtoNoFieldsRel				DBDAOERR(3366) //Can't append a relation with no fields defined.
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\dbdaoerr.h(396,0)
31 2.442247 E_DAO_DDLColumnsNotUnique UInt32 2148142382 0x800A0D2E -2146824914 System.UInt32
#define E_DAO_DDLColumnsNotUnique			DBDAOERR(3374) //The specified fields are not uniquely indexed in table '|'.
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\dbdaoerr.h(404,0)
32 2.442247 AMINTERLACE_1FieldPerSample Int32 2 0x00000002 2 System.Int32
#define AMINTERLACE_1FieldPerSample         0x00000002  // else 2 fields per media sample
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\dvdmedia.h(264,0)
33 2.442247 cmdidAddToOutput Int32 171 0x000000AB -85 System.Int32
#define cmdidAddToOutput        171     // Add selected fields to query output
%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Professional\VSSDK\VisualStudioIntegration\Common\Inc\stdidcmd.h(276,0)
34 2.442247 OSPD_ALLOWLINKS Int32 1 0x00000001 1 System.Int32
#define OSPD_ALLOWLINKS         0x01   // The Custom dialog will allow fields to be linked if this is set.
%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Professional\VSSDK\VisualStudioIntegration\Common\Inc\office10\msoprops.h(1877,0)
35 2.442247 CorTypeAttr::tdAutoLayout Int32 0 0x00000000 0 System.Int32
tdAutoLayout            =   0x00000000,     // Class fields are auto-laid out
%ProgramFiles(x86)%\Windows Kits\NETFXSDK\4.8\include\um\CorHdr.h(293,0)
36 2.442247 CorTypeAttr::tdSequentialLayout Int32 8 0x00000008 8 System.Int32
tdSequentialLayout      =   0x00000008,     // Class fields are laid out sequentially
%ProgramFiles(x86)%\Windows Kits\NETFXSDK\4.8\include\um\CorHdr.h(294,0)
37 2.442247 CorPinvokeMap::pmSupportsLastError Int32 64 0x00000040 64 System.Int32
pmSupportsLastError = 0x0040,   // Information about target function. Not relevant for fields.
%ProgramFiles(x86)%\Windows Kits\NETFXSDK\4.8\include\um\CorHdr.h(702,0)
38 2.442247 CorErrorIfEmitOutOfOrder::MDFieldOutOfOrder Int32 2 0x00000002 2 System.Int32
MDFieldOutOfOrder           = 0x00000002,   // generate error when fields are emitted out of order
%ProgramFiles(x86)%\Windows Kits\NETFXSDK\4.8\include\um\CorHdr.h(1397,0)
39 2.136966 IPM_GETADDRESS Int32 1126 0x00000466 1126 System.Int32
#define IPM_GETADDRESS   (WM_USER+102) // lresult = # of non black fields.  lparam = LPDWORD for TCP/IP address
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\commctrl.h(6928,0)
  • Ifndef NOUSER
40 2.136966 E_DAO_RmtTooManyColumns UInt32 2148142193 0x800A0C71 -2146825103 System.UInt32
#define E_DAO_RmtTooManyColumns				DBDAOERR(3185) //SELECT INTO remote database tried to produce too many fields.
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\dbdaoerr.h(215,0)
41 2.136966 E_DAO_ImexNoMatchingColumns UInt32 2148142251 0x800A0CAB -2146825045 System.UInt32
#define E_DAO_ImexNoMatchingColumns			DBDAOERR(3243) //None of the import field names match fields in the appended table.
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\dbdaoerr.h(273,0)
42 2.136966 E_DAO_VtoNotARecordset UInt32 2148142275 0x800A0CC3 -2146825021 System.UInt32
#define E_DAO_VtoNotARecordset				DBDAOERR(3267) //Property can be set only when the field is part of a Recordset object's Fields collection.
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\dbdaoerr.h(297,0)
43 2.136966 E_DAO_DDLDiffNumRelCols UInt32 2148142376 0x800A0D28 -2146824920 System.UInt32
#define E_DAO_DDLDiffNumRelCols				DBDAOERR(3368) //Relationship must be on the same number of fields with the same data types.
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\dbdaoerr.h(398,0)
44 1.831685 STORAGE_QUERY_TYPE Enum
typedef enum _STORAGE_QUERY_TYPE {
    PropertyStandardQuery = 0,          // Retrieves the descriptor
    PropertyExistsQuery,                // Used to test whether the descriptor is supported
    PropertyMaskQuery,                  // Used to retrieve a mask of writeable fields in the descriptor
    PropertyQueryMaxDefined     // use to validate the value
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\winioctl.h(1064,0)
45 1.511063 DFX_Operation Enum
enum DFX_Operation
		AddToParameterList,     // builds PARAMETERS clause
		AddToSelectList,        // builds SELECT clause
		BindField,              // sets up binding structure
		BindParam,              // sets parameter values
		Fixup,                  // sets NULL status
		AllocCache,             // allocates cache used for dirty check
		StoreField,             // saves current record to cache
		LoadField,              // restores cached data to member vars
		FreeCache,              // frees cache
		SetFieldNull,           // sets field status & value to NULL
		MarkForAddNew,          // marks fields dirty if not PSEUDO NULL
		MarkForEdit,            // marks fields dirty if don't match cache
		SetDirtyField,          // sets field values marked as dirty
		MaxDFXOperation,        // dummy operation type for input checking
%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.16.27023\atlmfc\include\afxdao.h(400,0)
  • Ifdef _DEBUG
46 1.321905 RFX_Operation Enum
enum RFX_Operation
		BindParam,          // register users parameters with ODBC SQLBindParameter
		RebindParam,        //  migrate param values to proxy array before Requery
		BindFieldToColumn,  // register users fields with ODBC SQLBindCol
		BindFieldForUpdate, // temporarily bind columns before update (via SQLSetPos)
		UnbindFieldForUpdate,   // unbind columns after update (via SQLSetPos)
		Fixup,              // Set string lengths, clear status bits
		MarkForAddNew,      // Prepare fields and flags for addnew operation
		MarkForUpdate,      // Prepare fields and flags for update operation
		Name,               // append dirty field name
		NameValue,          // append dirty name=value
		Value,              // append dirty value or parameter marker
		SetFieldNull,       // Set status bit for null value
		StoreField,         // archive values of current record
		LoadField,          // reload archived values into current record
		AllocCache,         // allocate cache used for dirty field check
		AllocMultiRowBuffer,    // allocate buffer holding multi rows of data
		DeleteMultiRowBuffer,   // delete buffer holding multi rows of data
		DumpField,          // dump bound field name and value
%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.16.27023\atlmfc\include\afxdb.h(326,0)
  • Ifdef _DEBUG
typedef enum
    FTA_None                    = 0x00000000,
    FTA_Exclude                 = 0x00000001, // used to exclude (hide) types like drvfile
    FTA_Show                    = 0x00000002, // used to show types like folder that don't have associations
    FTA_HasExtension            = 0x00000004, // type has a file name extension
    FTA_NoEdit                  = 0x00000008, // no editing of file type
    FTA_NoRemove                = 0x00000010, // no removing of the file type
    FTA_NoNewVerb               = 0x00000020, // no adding of verbs
    FTA_NoEditVerb              = 0x00000040, // no editing of predefined verbs
    FTA_NoRemoveVerb            = 0x00000080, // no removing of predefined verbs
    FTA_NoEditDesc              = 0x00000100, // no editing of file type description
    FTA_NoEditIcon              = 0x00000200, // no editing of doc icon
    FTA_NoEditDflt              = 0x00000400, // no changing of default verb
    FTA_NoEditVerbCmd           = 0x00000800, // no modification of the commnds associated with the verbs
    FTA_NoEditVerbExe           = 0x00001000, // no editing of the verb's exe
    FTA_NoDDE                   = 0x00002000, // no editing of the DDE fields

    FTA_NoEditMIME              = 0x00008000, // no editing of the Content Type or Default Extension fields
    FTA_OpenIsSafe              = 0x00010000, // the open verb should be invoked automaticaly for downloaded files
    FTA_AlwaysUnsafe            = 0x00020000, // don't allow the "Never ask me" checkbox to be enabled; File Type dialog still allows user to turn this off

    FTA_NoRecentDocs            = 0x00100000, // don't add this file type to the Recent Documents folder
    FTA_SafeForElevation        = 0x00200000, // Win8: can be launched in medium IL by a process running in AppContainer
    FTA_AlwaysUseDirectInvoke   = 0x00400000, // Win8: when downloading use the direct invoke feature even if the server headers are not provided
%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\shlwapi.h(1755,0)
  • Ifndef NOSHLWAPI
48 1.068483 OpenOptions Enum
enum OpenOptions
		none =                      0x0,
		readOnly =                  0x0004,
		appendOnly =                0x0008,
		skipDeletedRecords =        0x0010, // turn on skipping of deleted records, Will slow Move(n).
		noDirtyFieldCheck =         0x0020, // disable automatic dirty field checking
		useBookmarks =              0x0100, // turn on bookmark support
		useMultiRowFetch =          0x0200, // turn on multi-row fetch model
		userAllocMultiRowBuffers =  0x0400, // if multi-row fetch on, user will alloc memory for buffers
		useExtendedFetch =          0x0800, // use SQLExtendedFetch with forwardOnly type recordsets
		executeDirect =             0x2000, // Directly execute SQL rather than prepared execute
		optimizeBulkAdd =           0x4000, // Use prepared HSTMT for multiple AddNews, dirty fields must not change.
		firstBulkAdd =              0x8000, // INTERNAL to MFC, don't specify on Open.
%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.16.27023\atlmfc\include\afxdb.h(624,0)
49 1.068483 CorPinvokeMap Enum
typedef enum  CorPinvokeMap
    pmNoMangle          = 0x0001,   // Pinvoke is to use the member name as specified.

    pmCharSetMask       = 0x0006,
    pmCharSetNotSpec    = 0x0000,
    pmCharSetAnsi       = 0x0002,
    pmCharSetUnicode    = 0x0004,
    pmCharSetAuto       = 0x0006,

    pmBestFitUseAssem   = 0x0000,
    pmBestFitEnabled    = 0x0010,
    pmBestFitDisabled   = 0x0020,
    pmBestFitMask       = 0x0030,

    pmThrowOnUnmappableCharUseAssem   = 0x0000,
    pmThrowOnUnmappableCharEnabled    = 0x1000,
    pmThrowOnUnmappableCharDisabled   = 0x2000,
    pmThrowOnUnmappableCharMask       = 0x3000,

    pmSupportsLastError = 0x0040,   // Information about target function. Not relevant for fields.

    pmCallConvMask      = 0x0700,
    pmCallConvWinapi    = 0x0100,   // Pinvoke will use native callconv appropriate to target windows platform.
    pmCallConvCdecl     = 0x0200,
    pmCallConvStdcall   = 0x0300,
    pmCallConvThiscall  = 0x0400,   // In M9, pinvoke will raise exception.
    pmCallConvFastcall  = 0x0500,

    pmMaxValue          = 0xFFFF,
} CorPinvokeMap;
%ProgramFiles(x86)%\Windows Kits\NETFXSDK\4.8\include\um\CorHdr.h(680,0)
50 1.068483 CorErrorIfEmitOutOfOrder Enum
typedef enum CorErrorIfEmitOutOfOrder
    MDErrorOutOfOrderDefault    = 0x00000000,   // default not to generate any error
    MDErrorOutOfOrderNone       = 0x00000000,   // do not generate error for out of order emit
    MDErrorOutOfOrderAll        = 0xffffffff,   // generate out of order emit for method, field, param, property, and event
    MDMethodOutOfOrder          = 0x00000001,   // generate error when methods are emitted out of order
    MDFieldOutOfOrder           = 0x00000002,   // generate error when fields are emitted out of order
    MDParamOutOfOrder           = 0x00000004,   // generate error when params are emitted out of order
    MDPropertyOutOfOrder        = 0x00000008,   // generate error when properties are emitted out of order
    MDEventOutOfOrder           = 0x00000010,   // generate error when events are emitted out of order
} CorErrorIfEmitOutOfOrder;
%ProgramFiles(x86)%\Windows Kits\NETFXSDK\4.8\include\um\CorHdr.h(1391,0)
51 0.9158425 PROPTYPE Enum
typedef enum {

    TYPE_ERROR = 1000,     // Unknown data type - or data type is in error
    TYPE_DWORD,     // Unsigned 32 bit value
    TYPE_LONG,      // Signed 32 bit value
    TYPE_WORD,      // Unsigned 16 bit value
    TYPE_SHORT,     // Signed 16 bit value
    TYPE_BYTE,      // Unsigned 8 bit value
    TYPE_CHAR,      // Signed 8 bit value
    TYPE_FILETIME,  // FILETIME stucture
    TYPE_STRING,    // Fixed-length null-term string
    TYPE_BINARY,    // Fixed-length binary data
    TYPE_FLAGS,     // Flags fields
    TYPE_STREAM,    // Stream data type
    TYPE_WSTRING,   // UNICODE fixed-length null-term string
    TYPE_BOOL,      // BOOL checked to be equal to 1 or 0
    TYPE_PASS,      // Neeto burrito password mosquito

%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\imnact.idl(665,0)
52 0.8634646 CorTypeAttr Enum
typedef enum CorTypeAttr
    tdVisibilityMask        =   0x00000007,
    tdNotPublic             =   0x00000000,     // Class is not public scope.
    tdPublic                =   0x00000001,     // Class is public scope.
    tdNestedPublic          =   0x00000002,     // Class is nested with public visibility.
    tdNestedPrivate         =   0x00000003,     // Class is nested with private visibility.
    tdNestedFamily          =   0x00000004,     // Class is nested with family visibility.
    tdNestedAssembly        =   0x00000005,     // Class is nested with assembly visibility.
    tdNestedFamANDAssem     =   0x00000006,     // Class is nested with family and assembly visibility.
    tdNestedFamORAssem      =   0x00000007,     // Class is nested with family or assembly visibility.

    tdLayoutMask            =   0x00000018,
    tdAutoLayout            =   0x00000000,     // Class fields are auto-laid out
    tdSequentialLayout      =   0x00000008,     // Class fields are laid out sequentially
    tdExplicitLayout        =   0x00000010,     // Layout is supplied explicitly

    tdClassSemanticsMask    =   0x00000020,
    tdClass                 =   0x00000000,     // Type is a class.
    tdInterface             =   0x00000020,     // Type is an interface.

    tdAbstract              =   0x00000080,     // Class is abstract
    tdSealed                =   0x00000100,     // Class is concrete and may not be extended
    tdSpecialName           =   0x00000400,     // Class name is special.  Name describes how.

    tdImport                =   0x00001000,     // Class / interface is imported
    tdSerializable          =   0x00002000,     // The class is Serializable.
    tdWindowsRuntime        =   0x00004000,     // The type is a Windows Runtime type

    tdStringFormatMask      =   0x00030000,
    tdAnsiClass             =   0x00000000,     // LPTSTR is interpreted as ANSI in this class
    tdUnicodeClass          =   0x00010000,     // LPTSTR is interpreted as UNICODE
    tdAutoClass             =   0x00020000,     // LPTSTR is interpreted automatically
    tdCustomFormatClass     =   0x00030000,     // A non-standard encoding specified by CustomFormatMask
    tdCustomFormatMask      =   0x00C00000,     // Use this mask to retrieve non-standard encoding information for native interop. The meaning of the values of these 2 bits is unspecified.

    tdBeforeFieldInit       =   0x00100000,     // Initialize the class any time before first static field access.
    tdForwarder             =   0x00200000,     // This ExportedType is a type forwarder.

    tdReservedMask          =   0x00040800,
    tdRTSpecialName         =   0x00000800,     // Runtime should check name encoding.
    tdHasSecurity           =   0x00040000,     // Class has security associate with it.
} CorTypeAttr;
%ProgramFiles(x86)%\Windows Kits\NETFXSDK\4.8\include\um\CorHdr.h(278,0)