Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

144 lines
3.5 KiB

// hosttest.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "objbase.h"
#include "initguid.h"
#include <stdio.h>
#include <activscp.h>
// CLSID for our implementation of IActiveScriptingSite
// {838E2F5E-E20E-11d2-B355-00105A1F473A}
DEFINE_GUID(CLSID_WmiActiveScriptingSite,
0x838e2f5e, 0xe20e, 0x11d2, 0xb3, 0x55, 0x0, 0x10, 0x5a, 0x1f, 0x47, 0x3a);
WCHAR * ReadScript(char * pFileName);
int main(int argc, char* argv[])
{
if (2 != argc)
{
printf ("Usage: hosttest <scriptfile>\n");
return 1;
}
LPWSTR pScriptText = ReadScript (argv[1]);
HRESULT sc = CoInitialize(0);
// Get the active script site
IActiveScriptSite *pSite = NULL;
HRESULT hr = CoCreateInstance (CLSID_WmiActiveScriptingSite,NULL,
CLSCTX_INPROC_SERVER,IID_IActiveScriptSite, (void**) &pSite);
// Get the scripting engine
CLSID clsid;
hr = CLSIDFromProgID (L"JScript", &clsid);
IActiveScript* pScriptEngine = NULL;
hr =CoCreateInstance (clsid, NULL, CLSCTX_INPROC_SERVER, IID_IActiveScript, (void**) &pScriptEngine);
IActiveScriptParse* pParse;
sc = pScriptEngine->QueryInterface(IID_IActiveScriptParse, (void**)&pParse);
if(FAILED(sc))
return 1;
sc = pParse->InitNew();
// Bind the host to the engine
sc = pScriptEngine->SetScriptSite(pSite);
pSite->Release();
// Register the "this" pointer
sc = pScriptEngine->AddNamedItem(L"instance",
SCRIPTITEM_ISVISIBLE | SCRIPTITEM_NOCODE | SCRIPTITEM_GLOBALMEMBERS);
if(FAILED(sc))
return 1;
EXCEPINFO ei;
sc = pParse->ParseScriptText(
pScriptText,
NULL, NULL, NULL,
0, 0, 0, NULL, &ei);
if(FAILED(sc))
return 1;
pParse->Release();
sc = pScriptEngine->SetScriptState(SCRIPTSTATE_CONNECTED);
if(FAILED(sc))
return 1;
pScriptEngine->Release();
CoUninitialize();
printf("Terminating normally\n");
return 0;
}
WCHAR * ReadScript(char * pFileName)
{
FILE *fp;
BOOL bUnicode = FALSE;
BOOL bBigEndian = FALSE;
// Make sure the file exists and can be opened
fp = fopen(pFileName, "rb");
if (!fp)
{
printf("\nCant open file %s", pFileName);
return NULL;
}
// Determine the size of the file
// ==============================
fseek(fp, 0, SEEK_END);
long lSize = ftell(fp); // add a bit extra for ending space and null NULL
fseek(fp, 0, SEEK_SET);
// Check for UNICODE source file.
// ==============================
BYTE UnicodeSignature[2];
if (fread(UnicodeSignature, sizeof(BYTE), 2, fp) != 2)
{
printf("\nNothing in file %s", pFileName);
fclose(fp);
return NULL;
}
if (UnicodeSignature[0] == 0xFF && UnicodeSignature[1] == 0xFE)
{
LPWSTR pRet = new WCHAR[lSize/2 +2];
if(pRet == NULL)
return NULL;
fread(pRet, 1, lSize-2, fp);
fclose(fp);
return pRet;
}
else
{
fseek(fp, 0, SEEK_SET);
LPSTR pTemp = new char[lSize+1];
memset (pTemp,0,(lSize+1) * sizeof(char));
LPWSTR pRet = new WCHAR[lSize+1];
memset (pRet, 0, (lSize + 1) * sizeof (WCHAR));
if(pRet == NULL || pTemp == NULL)
return NULL;
fread(pTemp, 1, lSize, fp);
fclose(fp);
mbstowcs(pRet, pTemp, lSize);
delete pTemp;
return pRet;
}
return NULL;
}