/*
 * Copyright (C) 2012 Alistair Leslie-Hughes
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

import "oaidl.idl";
import "ocidl.idl";
import "oledb.idl";

#if !defined(progid) && !defined(__WIDL__)
#define threading(model)
#define progid(str)
#define vi_progid(str)
#endif

[
    uuid(2206CEB0-19C1-11D1-89E0-00C04FD7A829),
    version(1.0)
]
library MSDASC
{
    importlib("stdole2.tlb");

    [
      uuid(2206CCB1-19C1-11D1-89E0-00C04FD7A829),
    ]
    interface IDataInitialize : IUnknown
    {
        HRESULT GetDataSource([in] IUnknown* pUnkOuter, [in]  DWORD dwClsCtx,
                        [in] LPWSTR pwszInitializationString, [in] REFIID riid,
                        [in, out] IUnknown** ppDataSource);

        HRESULT GetInitializationString([in] IUnknown* pDataSource, [in] boolean fIncludePassword,
                        [out] LPWSTR* ppwszInitString);

        HRESULT CreateDBInstance([in] REFCLSID clsidProvider, [in] IUnknown* pUnkOuter,
                        [in] DWORD dwClsCtx, [in] LPWSTR pwszReserved,
                        [in] REFIID riid, [out] IUnknown** ppDataSource);

        HRESULT RemoteCreateDBInstanceEx([in] REFCLSID clsidProvider,  [in] IUnknown* pUnkOuter,
                        [in] DWORD dwClsCtx, [in] LPWSTR pwszReserved,  [in] COSERVERINFO* pServerInfo,
                        [in] DWORD cmq,  [in] GUID** rgpIID,  [out] IUnknown** rgpItf,
                        [out] HRESULT* rghr);

        HRESULT LoadStringFromStorage([in] LPWSTR pwszFileName, [out] LPWSTR* ppwszInitializationString);

        HRESULT WriteStringToStorage([in] LPWSTR pwszFileName,  [in] LPWSTR pwszInitializationString,
                        [in] DWORD dwCreationDisposition);
    }

    [
      uuid(2206CDB0-19C1-11D1-89E0-00C04FD7A829),
      progid("MSDASC.MSDAINITIALIZE.1"),
      vi_progid("MSDASC.MSDAINITIALIZE.1"),
    ]
    coclass MSDAINITIALIZE
    {
        [default] interface IDataInitialize;
    }
}
