//+---------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (C) Microsoft Corporation, 1997-1998.
//
//  File: safeocx.idl
//
//----------------------------------------------------------------------------

cpp_quote("//+-------------------------------------------------------------------------")
cpp_quote("//")
cpp_quote("//  Microsoft Windows")
cpp_quote("//  Copyright (C) Microsoft Corporation, 1997-1998.")
cpp_quote("//")
cpp_quote("//--------------------------------------------------------------------------")

#ifndef DO_NO_IMPORTS
import "unknwn.idl";
import "wtypes.idl";
import "urlmon.idl";
#endif

cpp_quote("")
cpp_quote("#pragma comment(lib,\"uuid.lib\")")
cpp_quote("")
cpp_quote("DEFINE_GUID(CLSID_IActiveXSafetyProvider, 0xaaf8c6ce, 0xf972, 0x11d0, 0x97, 0xeb, 0x00, 0xaa, 0x00, 0x61, 0x53, 0x33);")
cpp_quote("DEFINE_GUID(IID_IActiveXSafetyProvider,   0x69ff5101, 0xfc63, 0x11d0, 0x97, 0xeb, 0x00, 0xaa, 0x00, 0x61, 0x53, 0x33);")


[
    object,
    uuid(69ff5101-fc63-11d0-97eb-00aa00615333),
    pointer_default(unique),
    local
]
interface IActiveXSafetyProvider : IUnknown
{
    typedef [unique] IActiveXSafetyProvider *LPACTIVEXSAFETYPROVIDER;

    // Controls whether the call to SafeGetClassObject/SafeCreateInstance will
    // just call OLE32.DLL or whether the control will be loaded into a VM
    HRESULT TreatControlAsUntrusted(
                [in] BOOL fTreatAsTUntrusted
            );

    // Gets the current setting of TreatControlAsUntrusted
    HRESULT IsControlUntrusted(
                [out] BOOL *pfIsUntrusted
            );

    // Informs the ActiveX safety provider talk to zones
    HRESULT SetSecurityManager(
                [in] IInternetSecurityManager *pSecurityManager
            );

    // Informs the ActiveX safety provider where the document was loaded from
    HRESULT SetDocumentURLA(
                [in] LPCSTR szDocumentURL
            );
    HRESULT SetDocumentURLW(
                [in] LPCWSTR szDocumentURL
            );

    // Resets the all of the above settings to their defaults
    HRESULT ResetToDefaults(
                void
            );

    // Calls DllRegisterServer on the specified control, using the current
    // safety settings.
    HRESULT SafeDllRegisterServerA(
                [in] LPCSTR szServerName
            );
    HRESULT SafeDllRegisterServerW(
                [in] LPCWSTR szServerName
            );

    // Calls DllUnregisterServer on the specified control, using the current
    // safety settings.
    HRESULT SafeDllUnregisterServerA(
                [in] LPCSTR szServerName
            );
    HRESULT SafeDllUnregisterServerW(
                [in] LPCWSTR szServerName
            );

    // Calls CoGetClassObject for the specified control, using the current
    // safety settings.
    HRESULT SafeGetClassObject(
                [in] REFCLSID rclsid,
                [in] DWORD dwClsContext,
                [in] LPVOID reserved,
                [in] REFIID riid,
                [out, iid_is(riid)] IUnknown **ppObj
            );

    // Calls CoCreateInstance for the specified control, using the current
    // safety settings.
    HRESULT SafeCreateInstance(
                [in] REFCLSID rclsid,
                [in] LPUNKNOWN pUnkOuter,
                [in] DWORD dwClsContext,
                [in] REFIID riid,
                [out, iid_is(riid)] IUnknown **pObj
            );
}
