/* Automated generated idl file <sdoiaslibprivate>.
 * Generated by genidl tool (c) 2009, 2010 Mingw-w64 project.
 */

/* Union record forward declarations.  */
dispinterface ISdoService;

/* Union record forward declarations.  */
coclass SdoService;

/* Enumeration declarations.  */
enum _SERVICE_TYPE
{
  SERVICE_TYPE_IAS = (int) 201326592,
  SERVICE_TYPE_RAS = (int) 201326593,
  SERVICE_TYPE_MAX = (int) 201326594
};

/* Type definitions.  */
typedef enum _SERVICE_TYPE SERVICE_TYPE;

[
  uuid(56BC53D1-96DB-11D1-BF3F-000000000000),
  version(1.0),
  helpstring("Private SDO 1.0 Type Library")
]
library sdoiaslibprivate
{
  importlib("stdole2.tlb");

   /* CoClass declarations.  */
   [
     uuid(BC94D813-4D7F-11D2-A8C9-00AA00A71DCA),
     cancreate,
     hidden,
     restricted
   ]
   coclass SdoService
   {
     dispinterface ISdoService;
   };

   /* Dispatch interface declarations.  */
   [
     uuid(7A968236-9D6D-11D1-BF5D-000000000000),
     dual,
     oleautomation,
     dispatchable
   ]
   dispinterface ISdoService : IDispatch
   {
     [id(1)]
     HRESULT __stdcall InitializeService (
       [in] SERVICE_TYPE eServiceType
     );
     HRESULT __stdcall ShutdownService (
       [in] SERVICE_TYPE eServiceType
     );
     HRESULT __stdcall StartService (
       [in] SERVICE_TYPE eServiceType
     );
     HRESULT __stdcall StopService (
       [in] SERVICE_TYPE eServiceType
     );
     HRESULT __stdcall ConfigureService (
       [in] SERVICE_TYPE eServiceType
     );
   };

};

