// Copyright (c) 2000-2004 Microsoft Corporation
// WMI Class Definitions for the Security Configuration Engine
// Version 1.0

// this file is reserved for embedding foreign classes into SCE namespace
// It should and should only contain the registration information of the following classes:
// (1) Subclasses of Sce_EmbedFO. That is how embedding is accomplished.
// (2) Instances of Sce_Sequence. That is how we control the order of classes in method execution.

#pragma autorecover
#pragma classflags("forceupdate")


#pragma namespace("\\\\.\\root")

instance of __Namespace
{
        Name = "Security";
};

#pragma namespace("\\\\.\\root\\Security")

instance of __Namespace
{
        Name = "SCE";
};

#pragma namespace("\\\\.\\root\\Security\\SCE")

//**************************************************************************
//* Declare an instance of the __Win32Provider so as to "register" the
//* SCE provider.
//**************************************************************************


instance of __Win32Provider as $P
{
    Name                    = "SCEProvider|1.0" ;
    ClsId                   = "{bd7570f7-9f0e-4c6b-b525-e078691b6d0e}" ;
    ImpersonationLevel      = 1;
    PerUserInitialization   = TRUE;
    HostingModel            = "NetworkServiceHost";
};

instance of __InstanceProviderRegistration
{
    Provider            = $P;
    SupportsPut         = TRUE;
    SupportsGet         = TRUE;
    SupportsDelete      = TRUE;
    SupportsEnumeration = TRUE;
    QuerySupportLevels = {"WQL:UnarySelect"};

};

instance of __MethodProviderRegistration
{
    Provider = $P;
};

// **************************************************************************
// The following is a sample of instance registration of Sce_Sequence class so that
// Sce knows that when executing the "Configure" method, it should access the embedding
// classes in the following order:
// (1) Sce_EmbedIPSecRollback, 
// (2) Sce_EmbedIISRollback, 
// (3) Sce_EmbedSQLServerRollback,
// (4) Sce_EmbedMMAuth,
// (5) Sce_EmbedQMPolicy,
// (6) Sce_EmbedTransportFilter
// **************************************************************************

/*
instance of Sce_Sequence
{
    Method      = "Configure";
    Priority    = 0;
    Order       = "Sce_EmbedIPSecRollback:Sce_EmbedIISRollback:Sce_EmbedSQLServerRollback";
};

instance of Sce_Sequence
{
    Method      = "Configure";
    Priority    = 1;
    Order       = "Sce_EmbedMMAuth:Sce_EmbedQMPolicy:Sce_EmbedTransportFilter";
};

*/



// **************************************************************************
// the following is a sample of embedding a foreign class into SCE namespace so that
// SCE can persist information regarding a foreign class and use it in its flexible way.
// Any embedding class must have the following critical information:
// (1) Foreign namespace, (should be static because they don't change across instances)
// (2) Foreign class name, (should be static because they don't change across instances)
// (3) SceStorePath as key property
// (4) [Implemented] uint32 Configure([in] string LogFilePath);
// **************************************************************************

/*
// the following is to embed the IPSec classes
[dynamic, provider("SCEProvider|1.0")]
class Sce_EmbedBlockAllFilter : Sce_EmbedFO
{
    [key]   string  SceStorePath;
    [key]   string  FilterName;     // foreign class's key

    [static] string ForeignNamespace = "\\\\.\\root\\Security\\NetSecProv";
    [static] string ForeignClassName = "Nsp_TransportFilterSettings";

            string  SrcAddr = "IP_ADDRESS_ME";
            string  DestAddr = "SUBNET_ADDRESS_ANY";

            uint32  InboundFilterFlag = 2;      //PASS_THRU = 1, BLOCKING = 2, NEGOTIATE_SECURITY = 3,
            uint32  OutboundFilterFlag = 2;     //PASS_THRU = 1, BLOCKING = 2, NEGOTIATE_SECURITY = 3,

    [Implemented] uint32 Configure([in] string LogFilePath);
};

*/