windows-nt/Source/XPSP1/NT/sdktools/mtscript/inc/mtscript.idl
2020-09-26 16:20:57 +08:00

407 lines
18 KiB
Plaintext

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1995
//
// File: mtscript.idl
//
// Contents: Definition of Script engine interfacets
//
//----------------------------------------------------------------------------
#include "dispid.h"
#define RC_INVOKED
#undef ASSERT
#define DEFAULTVALUE_(x) ,defaultvalue(x)
#ifndef MTSCRIPT_DROP
#define MTSCRIPT_QFENUMBER 0
#define MTSCRIPT_BUILDNUMBER 0
#endif
#define VERSIONNUMBER MTSCRIPT_BUILDNUMBER.MTSCRIPT_QFENUMBER
// ************* Script Engine Interfaces *****************
[uuid(854c3169-c854-4a77-b189-606859e4391b), version(1.0)]
library MTScriptEngine
{
importlib("stdole2.tlb");
const long IConnectedMachine_lVersionMajor = MTSCRIPT_BUILDNUMBER;
const long IConnectedMachine_lVersionMinor = MTSCRIPT_QFENUMBER;
// ****************************************************************
// DUAL INTERFACES
// ****************************************************************
[uuid(854c3181-c854-4a77-b189-606859e4391b), dual]
interface IRemoteMTScriptProxy : IDispatch
{
HRESULT Connect([in, defaultvalue("")] BSTR bstrMachine);
HRESULT Disconnect();
HRESULT DownloadFile([in] BSTR bstrUrl,
[out, retval] BSTR *bstrFile);
}
[uuid(854c316c-c854-4a77-b189-606859e4391b), dual, version(VERSIONNUMBER)]
interface IConnectedMachine : IDispatch
{
[helpstring("Fires an OnRemoteExec event on the script engine")]
HRESULT Exec([in] BSTR bstrCmd,
[in] BSTR bstrParams,
[out, retval] VARIANT *pvData);
[propget,
helpstring("Returns the data that was published by the script engine")]
HRESULT PublicData([out, retval] VARIANT *pvData);
[propget,
helpstring("The machine name")]
HRESULT Name([out, retval] BSTR *name);
[propget,
helpstring("The machine platform (intel, alpha, etc)")]
HRESULT Platform([out, retval] BSTR *platform);
[propget,
helpstring("The machine operating system (WinNT, Win95, Win98, etc)")]
HRESULT OS([out, retval] BSTR *os);
[propget,
helpstring("Major OS Version (Raw data from OSVERSIONINFO)")]
HRESULT MajorVer([out, retval] long *majorver);
[propget,
helpstring("Minor OS Version (Raw data from OSVERSIONINFO)")]
HRESULT MinorVer([out, retval] long *minorver);
[propget,
helpstring("OS Build number (Raw data from OSVERSIONINFO)")]
HRESULT BuildNum([out, retval] long *buildnum);
[propget,
helpstring("Returns true if the machine is running NT")]
HRESULT PlatformIsNT([out, retval] VARIANT_BOOL *pfIsNT);
[propget,
helpstring("Returns any service pack string for OS")]
HRESULT ServicePack([out, retval] BSTR *servicepack);
[propget,
helpstring("IConnectedMachine Major Version")]
HRESULT HostMajorVer([out, retval] long *majorver);
[propget,
helpstring("IConnectedMachine Minor Version")]
HRESULT HostMinorVer([out, retval] long *minorver);
[propget,
helpstring("Get status value by index.")]
HRESULT StatusValue([in] long nIndex, [out, retval] long *pnStatus);
}
// This interface is not intended to ever be remoted or marshalled
[uuid(854c316b-c854-4a77-b189-606859e4391b), dual, local]
interface IGlobalMTScript : IDispatch
{
[propget,
helpstring("MTScript Major Version")]
HRESULT HostMajorVer([out, retval] long *majorver);
[propget,
helpstring("MTScript Minor Version")]
HRESULT HostMinorVer([out, retval] long *minorver);
[propget,
helpstring("A place to store global data that is visible to other clients which connect to this machine")]
HRESULT PublicData([out, retval] VARIANT *pvData);
[propput]
HRESULT PublicData([in] VARIANT vData);
[propget,
helpstring("A place to store global data that should not be made visible to clients which connect")]
HRESULT PrivateData([out, retval] VARIANT *pvData);
[propput]
HRESULT PrivateData([in] VARIANT vData);
[helpstring("Quits the MTScript process")]
HRESULT ExitProcess();
[helpstring("Shuts down all running scripts and restarts")]
HRESULT Restart();
[propget,
helpstring("Returns the local machine's name")]
HRESULT LocalMachine([out, retval] BSTR *pbstrName);
[helpstring("Behaves similar to the C/C++ #include. Parses in the given script file.")]
HRESULT Include(BSTR bstrPath);
[helpstring("Execute script file in the same thread as the caller. Param is available to script as 'ScriptParam'.")]
HRESULT CallScript(
[in] BSTR Path,
[optional, in] VARIANT *Param);
[helpstring("Execute script file in a new thread. Param is available to script as 'ScriptParam'.")]
HRESULT SpawnScript(
[in] BSTR Path,
[optional, in] VARIANT *Param);
[propget,
helpstring("Argument passed to 'CallScript' or 'SpawnScript'")]
HRESULT ScriptParam(
[out, retval] VARIANT *Param);
[propget,
helpstring("Returns the path of the scripts used by the script engine")]
HRESULT ScriptPath([out, retval] BSTR *pbstrPath);
[helpstring("Call external function in specified DLL")]
HRESULT CallExternal([in] BSTR bstrDLLName,
[in] BSTR bstrFunctionName,
[in,optional] VARIANT *pParam,
[out,retval] long *pdwRetVal);
[helpstring("Resets multiple ThreadSyncs with the given name to non-signaled. On error, reset no ThreadSyncs.")]
HRESULT ResetSync([in] const BSTR bstrName);
[helpstring("Waits for a ThreadSync with the given name to be signaled")]
HRESULT WaitForSync([in] BSTR bstrName, // Name of ThreadSync
[in] long nTimeout, // Timeout in ms
[out, retval] VARIANT_BOOL *pfSignaled); // TRUE if event was signaled, FALSE on timeout
[helpstring("Waits for multiple ThreadSyncs with the given names to be signaled")]
HRESULT WaitForMultipleSyncs([in] const BSTR bstrNameList, // Comma separated list of ThreadSync names
[in] VARIANT_BOOL fWaitForAll, // If TRUE, all listed syncs must be signaled
[in] long nTimeout, // Timeout in millisec
[out, retval] long *plSignal); // Index of signaled ThreadSync. 0 if timed-out, 1 if fWaitForAll=true
[helpstring("Sets the given (1 or more) ThreadSyncs to signaled. They stays signaled until ResetSync is called")]
HRESULT SignalThreadSync([in] BSTR bstrName);
[helpstring("Obtains a thread lock with the given name (a.k.a. critical section")]
HRESULT TakeThreadLock([in] BSTR bstrName);
[helpstring("Obtains a thread lock with the given name (a.k.a. critical section")]
HRESULT ReleaseThreadLock([in] BSTR bstrName);
[helpstring("Gives the script thread a chance to handle cross-thread communication")]
HRESULT DoEvents();
// BUGBUG -- Need to design better feedback/error UI
[helpstring("Puts up a messagebox.")]
HRESULT MessageBoxTimeout([in] BSTR bstrMessage, // Message Text
[in] long cButtons, // Number of buttons (max 5)
[in] BSTR bstrButtonText, // Comma separated list of button text. Number must match cButtons
[in] long lTimeout, // Timeout in minutes. If zero then no timeout.
[in] long lEventInterval, // Fire a OnMessageBoxInterval event every lEventInterval minutes
[in] VARIANT_BOOL fCanCancel, // If TRUE then timeout can be canceled.
[in] VARIANT_BOOL fConfirm, // If TRUE then confirm the button pushed before returning.
[out, retval] long *plSelected); // Returns button pushed. 0=timeout, 1=Button1, 2=Button2, etc.
[helpstring("Runs a command on the local machine")]
HRESULT RunLocalCommand([in] BSTR bstrCommand, // Command to run (does not wrap it in a shell)
[in] BSTR bstrDir, // Directory to use as working directory.
[in, DEFAULTVALUE_("")] BSTR bstrTitle, // The window title to use (if bstrCommand invokes a shell)
[in, DEFAULTVALUE_(0)] VARIANT_BOOL fMinimize, // If TRUE, the new process is started minimized
[in, DEFAULTVALUE_(0)] VARIANT_BOOL fGetOutput, // If TRUE, capture STDOUT and STDERR and make available using GetProcessOutput()
[in, DEFAULTVALUE_(-1)] VARIANT_BOOL fWait, // If TRUE, doesn't return until finished
[in, DEFAULTVALUE_(-1)] VARIANT_BOOL fNoCrashPopup,// If TRUE, unhandled exceptions in the child process just terminate the process
[in, DEFAULTVALUE_(0)] VARIANT_BOOL fNoEnviron, // If TRUE, invoke it with an empty environment
[out, retval] long *plProcessID); // ID of new process, 0 on error.
[helpstring("Returns the error code from RunLocalCommand if it failed")]
HRESULT GetLastRunLocalError([out, retval] long *plErrorCode);
[helpstring("Returns the STDOUT & STDERR data for the process up to this point")]
HRESULT GetProcessOutput([in] long lProcessID,
[out, retval] BSTR *pbstrData);
[helpstring("Returs the exit code for the given process")]
HRESULT GetProcessExitCode([in] long lProcessID, [out, retval] long *plExitCode);
[helpstring("Terminates the given running process")]
HRESULT TerminateProcess([in] long lProcessID); // Calls IScriptedProcessSink::RequestExit first if the process is connected
[helpstring("Sends information to a process connected through IScriptedProcess")]
HRESULT SendToProcess([in] long lProcessID,
[in] BSTR bstrType,
[in] BSTR bstrData,
[out, retval] long *plReturn);
[helpstring("Sends email using MAPI")]
HRESULT SendMail([in] BSTR bstrTo, // To line, separated by spaces
[in] BSTR bstrCC, // CC line, separated by spaces
[in] BSTR bstrBCC, // BCC line, separated by spaces
[in] BSTR bstrSubject,
[in] BSTR bstrMessage,
[in, DEFAULTVALUE_("")] BSTR bstrAttachmentPath,
[in, DEFAULTVALUE_("")] BSTR bstrUsername, // Login username
[in, DEFAULTVALUE_("")] BSTR bstrPassword, // Login password
[out, retval] long *plErrorCode);
[helpstring("Sends email using SMTP")]
HRESULT SendSMTPMail([in] BSTR bstrFrom, // Sender - must be a valid address w/ domain. e.g. "lylec@microsoft.com"
[in] BSTR bstrTo, // To line, separated by spaces, must have domain
[in] BSTR bstrCC, // CC line, separated by spaces, must have domain
[in] BSTR bstrSubject,
[in] BSTR bstrMessage,
[in] BSTR bstrSMTPHost, // Name of SMTP Host to send mail through
[out, retval] long *plErrorCode);
[helpstring("If 'Assertion' = True then Assert with 'Message'.")]
HRESULT ASSERT(
[in] VARIANT_BOOL Assertion,
[in] BSTR Message);
[helpstring("Output 'Message' to debug console.")]
HRESULT OUTPUTDEBUGSTRING(
[in] BSTR Message);
[helpstring("Uneval the string")]
HRESULT UnevalString([in] BSTR bstrIn,
[out, retval] BSTR *bstrOut);
[helpstring("Copy or append one file to another. Return lastbytecopied+1")]
HRESULT CopyOrAppendFile(
[in] BSTR bstrSrc, // File to READ
[in] BSTR bstrDst, // File to WRITE
[in] long nSrcOffset, // Offset in READ file to start reading from
[in] long nSrcLength, // Max # of bytes to READ (pass -1 to read to EOF)
[in] VARIANT_BOOL fAppend, // If true, append to WRITE file, else always create WRITE file
[out, retval] long *nSrcFilePosition); // The resultant position in the READ file. Pass this as nSrcOffset on the next call to this function to continue reading.
[helpstring("Sleeps n milliseconds")]
HRESULT Sleep([in] int nTimeout);
[helpstring("Reboots the local machine")]
HRESULT Reboot();
[helpstring("Fires the OnScriptNotify event to any clients connected to us through the RemoteMTScript object")]
HRESULT NotifyScript(BSTR bstrEvent, VARIANT vData);
[helpstring("Registers the given object so that events can be hooked up")]
HRESULT RegisterEventSource([in] IDispatch *pDisp, [in, DEFAULTVALUE_("")] BSTR bstrProgID);
[helpstring("Unregisters an object registered with RegisterEventSource")]
HRESULT UnregisterEventSource([in] IDispatch *pDisp);
[propget,
helpstring("Get status value by index.")]
HRESULT StatusValue([in] long nIndex, [out, retval] long *pnStatus);
[propput,
helpstring("Get status value by index.")]
HRESULT StatusValue([in] long nIndex, [in] long nStatus);
}
// ****************************************************************
// EVENT INTERFACES
// ****************************************************************
[uuid(854c316a-c854-4a77-b189-606859e4391b)]
dispinterface DLocalMTScriptEvents
{
properties:
methods: // Events
//
//
[helpstring("Main function called when script is loaded"),
id(DISPID_MTScript_ScriptMain)] void ScriptMain();
[helpstring("Fired when another machine connects to this machine through the RemoteMTScript object with the intent of controlling us"),
id(DISPID_MTScript_OnMachineConnect)]
void OnMachineConnect();
[helpstring("Fired when a connected machines calls Exec()"),
id(DISPID_MTScript_OnRemoteExec)]
void OnRemoteExec([in] BSTR bstrCmd,
[in] BSTR bstrParams,
[out, retval] VARIANT *pvDataReturn);
// This event is only fired on the thread that received the call to
// RegisterEventSource for that object.
[helpstring("Fired when the object fires an event"),
id(DISPID_MTScript_OnEventSourceEvent)]
void OnEventSourceEvent([in] IDispatch *pDisp,
[in] long lDispid);
// This event is only fired on the thread that called RunLocalCommand
// for that process.
[helpstring("Fired to give info on a process created with RunLocalCommand"),
id(DISPID_MTScript_OnProcessEvent)]
void OnProcessEvent([in] long lProcessID, // Process ID
[in] BSTR bstrEvent, // String giving event name
[in] VARIANT vData, // Data associated with the event
[out, retval] long *plReturn); // Return value
// This event is only fired on the script thread that made the call
// to MessageBoxTimeout.
[helpstring("Fired by MessageBoxTimeout() every specified number of minutes when timing out."),
id(DISPID_MTScript_OnMessageBoxInterval)]
void OnMessageBoxInterval();
// This event is fired when a script error occurs.
// A return value is expected.
// If 0 is returned, mtscript.exe displays a dialog
// If 1 is returned mtscript invokes the script debugger (if present)
// else the error is ignored.
// MTScript.exe always records the error via OUTPUTDEBUGSTRING.
[helpstring("Invoked on script error"),
id(DISPID_MTScript_OnScriptError)]
void OnScriptError([in] BSTR bstrFile,
[in] long nLine,
[in] long nChar,
[in] BSTR bstrText,
[in] long sCode,
[in] BSTR bstrSource,
[in] BSTR bstrDescription,
[out, retval] VARIANT *pvDataReturn);
}
[uuid(854c3170-c854-4a77-b189-606859e4391b)]
dispinterface DRemoteMTScriptEvents
{
properties:
methods: // Events
//
//
[helpstring("Fired when a connected machine calls NotifyScript event"),
id(DISPID_RemoteMTScript_OnScriptNotify)]
void OnScriptNotify(BSTR bstrIdent, VARIANT vInfo);
}
// ****************************************************************
// COCLASSES
// ****************************************************************
[uuid(854c316e-c854-4a77-b189-606859e4391b),
noncreatable]
coclass LocalMTScript
{
[default] interface IGlobalMTScript;
[default, source] dispinterface DLocalMTScriptEvents;
}
[uuid(854c316d-c854-4a77-b189-606859e4391b)]
coclass RemoteMTScript
{
[default] interface IConnectedMachine;
[default, source] dispinterface DRemoteMTScriptEvents;
}
[uuid(854c3182-c854-4a77-b189-606859e4391b)]
coclass RemoteMTScriptProxy
{
[default] interface IRemoteMTScriptProxy;
[default, source] dispinterface DRemoteMTScriptEvents;
}
}