//+---------------------------------------------------------------------------
//
//    Microsoft Windows
//    Copyright (C) Microsoft Corporation, 2000
//
//    File: vdsprvcm.idl
//
//    Abstract:
//        declarations of interfaces and types that are exposed by providers
//        to the service, but not exposed through the service.
//
//----------------------------------------------------------------------------

interface IVdsProviderPrivate;

//
// IVdsProviderPrivate:
// Implemented by: provider object
// Implemented where: providers
// Accessed by: common layer
//
[
    object,
    uuid(11f3cd41-b7e8-48ff-9472-9dff018aa292),
    pointer_default(unique)
]

interface IVdsProviderPrivate : IUnknown
{
    // GetObject:
    //   The service queries each provider using this method to find
    //   the object and create a wrapper object for it.
    [helpstring("method GetObject")]
    HRESULT GetObject(
                [in] VDS_OBJECT_ID ObjectId,
                [in] VDS_OBJECT_TYPE type,
                [out] IUnknown **ppObjectUnk
            );

    // OnLoad:
    //   The service call OnLoad() method after loading
    //   a provider. The provider should intialize itself in
    //   this call.
    [helpstring("method OnLoad")]
    HRESULT OnLoad(
                [in,string] LPWSTR pwszMachineName,
                [in] IUnknown *pCallbackObject
            );
        // A provider should call QueryInterface() on pCallbackObject to
        // get any interface pointer needed. At this time, there are only
        // two such interface: IVdsOwnershipChangeQuery(for software provider
        // only) and IVdsAdviseSink.

    // OnUnload:
    //   The service call OnUnload() method before unloading
    //   a provider. The provider should unintialize itself in
    //   this call. It returns S_FALSE to let the service know
    //   it's not ready to unload yet.
    [helpstring("method OnUnload")]
    HRESULT OnUnload(
                [in] BOOL bForceUnload
            );
}

