import "unknwn.idl";
import "oaidl.idl";
import "remapi.idl";

cpp_quote("/****************************************************************************")
cpp_quote("	icust.h")
cpp_quote("")
cpp_quote("	GENERATED FILE!!!  DO NOT EDIT!!!")
cpp_quote("	")
cpp_quote("	Owner: DavidMck")
cpp_quote(" 	Copyright (c) 1998 Microsoft Corporation")
cpp_quote(" ")
cpp_quote("	This file contains the exported interfaces for Darwin's Custom action marshalling.")
cpp_quote("	It is generated by midl.exe from icust.idl")
cpp_quote("****************************************************************************/")

cpp_quote("#ifndef ICUSTOM_H")
cpp_quote("#define ICUSTOM_H")

#ifdef UNICODE
typedef wchar_t	ichar;
#else
typedef char	ichar;
#endif //UNICODE

typedef unsigned short LANGID;

[
	object,
	pointer_default(unique),
	uuid(000C1025-0000-0000-c000-000000000046) //??
	
]
interface IMsiCustomAction : IUnknown
{
	HRESULT PrepareDLLCustomAction([in, string, unique] const ichar* szActionName,
                                  [in, string, unique] const ichar* szPath, 
                                  [in, string, unique] const ichar *szEntryPoint, [in] unsigned long hmsi, 
                                  [in] boolean fDebugBreak, 
                                  [in] boolean fAppCompat, [in, unique] const GUID* pguidAppCompatDB, [in, unique] const GUID* pguidAppCompatID,
                                  [out] DWORD *dwThreadId);
	HRESULT RunDLLCustomAction([in] DWORD dwThreadId, [out] unsigned long *pulRet);
	HRESULT FinishDLLCustomAction([in] DWORD dwThreadId);

	HRESULT RunScriptAction([in] int icaType, [in, unique] IDispatch* piDispatch, [in, string, unique] const ichar *szSource, 
							[in, string, unique] const ichar *szTarget, [in] LANGID iLangId, [out] int* iScriptResult, [out] int *pcb,
							[out, size_is(,*pcb)] char **pchRecord); 

	HRESULT QueryPathOfRegTypeLib([in] REFGUID guid, [in] unsigned short wVerMajor, [in] unsigned short wVerMinor,
							[in] LCID lcid, [out, string, size_is(cchPath)] OLECHAR *lpszPathName, [in] int cchPath);
	HRESULT ProcessTypeLibrary([in, string] const OLECHAR *szLibID, [in] LCID lcidLocale, 
							[in, string] const OLECHAR *szTypeLib, [in, string, unique] const OLECHAR *szHelpPath, 
							[in] int fRemove, [in, out] int *fInfoMismatch);
	HRESULT SQLInstallDriverEx([in] int cDrvLen, [in, size_is(cDrvLen)] const ichar *szDriver,
							[in, string, unique] const ichar *szPathIn,
							[out, string, size_is(cbPathOutMax)] ichar *szPathOut, [in] WORD cbPathOutMax,
							[out] WORD* pcbPathOut, [in] WORD fRequest, [out] DWORD* pdwUsageCount);
	HRESULT SQLConfigDriver([in] WORD fRequest,
							[in, string] const ichar* szDriver,
							[in, string, unique] const ichar* szArgs,
							[out, string, size_is(cbMsgMax)] ichar* szMsg, [in] WORD cbMsgMax,
							[out] WORD* pcbMsgOut);
	HRESULT SQLRemoveDriver([in, string] const ichar* szDriver, [in] int fRemoveDSN,
							[out] DWORD* pdwUsageCount);
	HRESULT SQLInstallTranslatorEx([in] int cTransLen, [in, size_is(cTransLen)] const ichar *szTranslator,
							[in, string, unique] const ichar *szPathIn,
							[out, string, size_is(cbPathOutMax)] ichar *szPathOut, [in] WORD cbPathOutMax,
							[out] WORD* pcbPathOut, [in] WORD fRequest, [out] DWORD* pdwUsageCount);
	HRESULT SQLRemoveTranslator([in, string] const ichar* szTranslator, [out] DWORD* pdwUsageCount);
	HRESULT SQLConfigDataSource([in] WORD fRequest,
							[in, string] const ichar* szDriver,
							[in, size_is(cbAttrSize)] const ichar* szAttributes,
							[in] DWORD cbAttrSize);
	HRESULT SQLInstallDriverManager([out, string, size_is(cbPathMax)] ichar* szPath,
							[in] WORD cbPathMax, [out] WORD* pcbPathOut);
	HRESULT SQLRemoveDriverManager([out] DWORD* pdwUsageCount);
	HRESULT SQLInstallerError([in] WORD iError, [out] DWORD* pfErrorCode,
							[out, string, size_is(cbErrorMsgMax)] ichar *szErrorMsg, [in] WORD cbErrorMsgMax,
							[out] WORD* pcbErrorMsg);
}

cpp_quote("#endif // ICUSTOM_H")



