// Licensed under the Apache License, Version 2.0
// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
// All files in the project carrying such notice may not be copied, modified, or distributed
// except according to those terms
// Some of these definitions are commented out because I could not find their value
DEFINE_GUID!{GUID_NULL,
    0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
DEFINE_GUID!{CATID_MARSHALER,
    0x00000003, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{IID_IRpcChannel,
    0x00000004, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{IID_IRpcStub,
    0x00000005, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{IID_IStubManager,
    0x00000006, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{IID_IRpcProxy,
    0x00000007, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{IID_IProxyManager,
    0x00000008, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{IID_IPSFactory,
    0x00000009, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{IID_IInternalMoniker,
    0x00000011, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{IID_IDfReserved1,
    0x00000013, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{IID_IDfReserved2,
    0x00000014, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{IID_IDfReserved3,
    0x00000015, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{CLSID_StdMarshal,
    0x00000017, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
// extern const CLSID CLSID_AggStdMarshal;
DEFINE_GUID!{CLSID_StdAsyncActManager,
    0x00000329, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{IID_IStub,
    0x00000026, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{IID_IProxy,
    0x00000027, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{IID_IEnumGeneric,
    0x00000106, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{IID_IEnumHolder,
    0x00000107, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{IID_IEnumCallback,
    0x00000108, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{IID_IOleManager,
    0x0000011f, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{IID_IOlePresObj,
    0x00000120, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{IID_IDebug,
    0x00000123, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{IID_IDebugStream,
    0x00000124, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{CLSID_PSGenObject,
    0x0000030c, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{CLSID_PSClientSite,
    0x0000030d, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{CLSID_PSClassObject,
    0x0000030e, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{CLSID_PSInPlaceActive,
    0x0000030f, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{CLSID_PSInPlaceFrame,
    0x00000310, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{CLSID_PSDragDrop,
    0x00000311, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{CLSID_PSBindCtx,
    0x00000312, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{CLSID_PSEnumerators,
    0x00000313, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{CLSID_StaticMetafile,
    0x00000315, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{CLSID_StaticDib,
    0x00000316, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
// extern const CLSID CID_CDfsVolume;
DEFINE_GUID!{CLSID_DCOMAccessControl,
    0x0000031d, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{CLSID_GlobalOptions,
    0x0000034b, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{CLSID_StdGlobalInterfaceTable,
    0x00000323, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{CLSID_ComBinding,
    0x00000328, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{CLSID_StdEvent,
    0x0000032b, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{CLSID_ManualResetEvent,
    0x0000032c, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{CLSID_SynchronizeContainer,
    0x0000032d, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{CLSID_AddrControl,
    0x00000348, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{CLSID_ContextSwitcher,
    0x0000034e, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
// extern const CLSID CLSID_CCDFormKrnl;
// extern const CLSID CLSID_CCDPropertyPage;
// extern const CLSID CLSID_CCDFormDialog;
// extern const CLSID CLSID_CCDCommandButton;
// extern const CLSID CLSID_CCDComboBox;
// extern const CLSID CLSID_CCDTextBox;
// extern const CLSID CLSID_CCDCheckBox;
// extern const CLSID CLSID_CCDLabel;
// extern const CLSID CLSID_CCDOptionButton;
// extern const CLSID CLSID_CCDListBox;
// extern const CLSID CLSID_CCDScrollBar;
// extern const CLSID CLSID_CCDGroupBox;
// extern const CLSID CLSID_CCDGeneralPropertyPage;
// extern const CLSID CLSID_CCDGenericPropertyPage;
// extern const CLSID CLSID_CCDFontPropertyPage;
// extern const CLSID CLSID_CCDColorPropertyPage;
// extern const CLSID CLSID_CCDLabelPropertyPage;
// extern const CLSID CLSID_CCDCheckBoxPropertyPage;
// extern const CLSID CLSID_CCDTextBoxPropertyPage;
// extern const CLSID CLSID_CCDOptionButtonPropertyPage;
// extern const CLSID CLSID_CCDListBoxPropertyPage;
// extern const CLSID CLSID_CCDCommandButtonPropertyPage;
// extern const CLSID CLSID_CCDComboBoxPropertyPage;
// extern const CLSID CLSID_CCDScrollBarPropertyPage;
// extern const CLSID CLSID_CCDGroupBoxPropertyPage;
// extern const CLSID CLSID_CCDXObjectPropertyPage;
// extern const CLSID CLSID_CStdPropertyFrame;
// extern const CLSID CLSID_CFormPropertyPage;
// extern const CLSID CLSID_CGridPropertyPage;
// extern const CLSID CLSID_CWSJArticlePage;
// extern const CLSID CLSID_CSystemPage;
// extern const CLSID CLSID_IdentityUnmarshal;
DEFINE_GUID!{CLSID_InProcFreeMarshaler,
    0x0000033a, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{CLSID_Picture_Metafile,
    0x00000315, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{CLSID_Picture_EnhMetafile,
    0x00000319, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{CLSID_Picture_Dib,
    0x00000316, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
DEFINE_GUID!{GUID_TRISTATE,
    0x6650430a, 0xbe0f, 0x101a, 0x8b, 0xbb, 0x00, 0xaa, 0x00, 0x30, 0x0c, 0xab}
