216 lines
3.9 KiB
C
216 lines
3.9 KiB
C
/*++
|
|
|
|
Copyright (c) 1999 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
entry.c
|
|
|
|
Abstract:
|
|
|
|
Implements the DLL entry point that provides all Cobra module entry points
|
|
to the engine.
|
|
|
|
Author:
|
|
|
|
Jim Schmidt (jimschm) 11-Aug-2000
|
|
|
|
Revision History:
|
|
|
|
<alias> <date> <comments>
|
|
|
|
--*/
|
|
|
|
#include "pch.h"
|
|
#include "v1p.h"
|
|
|
|
|
|
typedef struct {
|
|
PCTSTR Name;
|
|
TYPE_ENTRYPOINTS EntryPoints;
|
|
} ETM_TABLE, *PETM_TABLE;
|
|
|
|
typedef struct {
|
|
PCTSTR Name;
|
|
VIRTUAL_COMPUTER_ENTRYPOINTS EntryPoints;
|
|
} VCM_TABLE, *PVCM_TABLE;
|
|
|
|
typedef struct {
|
|
PCTSTR Name;
|
|
SOURCE_ENTRYPOINTS EntryPoints;
|
|
} SOURCE_TABLE, *PSOURCE_TABLE;
|
|
|
|
typedef struct {
|
|
PCTSTR Name;
|
|
DESTINATION_ENTRYPOINTS EntryPoints;
|
|
} DESTINATION_TABLE, *PDESTINATION_TABLE;
|
|
|
|
|
|
//
|
|
// Add an entry for each ETM module in the DLL
|
|
//
|
|
|
|
ETM_TABLE g_EtmEntryPoints[] = {
|
|
{ TEXT("SCRIPT"), ISM_VERSION,
|
|
ScriptEtmInitialize, ScriptEtmParse, ScriptEtmTerminate, NULL
|
|
},
|
|
|
|
{NULL}
|
|
};
|
|
|
|
//
|
|
// Add an entry for each VCM module in the DLL
|
|
//
|
|
|
|
VCM_TABLE g_VcmEntryPoints[] = {
|
|
{ TEXT("SCRIPT"), ISM_VERSION,
|
|
ScriptVcmInitialize, ScriptVcmParse, ScriptVcmQueueEnumeration, NULL, ScriptTerminate
|
|
},
|
|
|
|
{NULL}
|
|
};
|
|
|
|
//
|
|
// Add an entry for each source module in the DLL
|
|
//
|
|
|
|
SOURCE_TABLE g_SourceEntryPoints[] = {
|
|
{ TEXT("SCRIPT"), ISM_VERSION,
|
|
ScriptSgmInitialize, ScriptSgmParse, ScriptSgmQueueEnumeration, NULL, (PSGMTERMINATE) ScriptTerminate,
|
|
NULL, NULL, NULL, NULL
|
|
},
|
|
|
|
{NULL}
|
|
};
|
|
|
|
//
|
|
// Add an entry for each destination module in the DLL
|
|
//
|
|
|
|
DESTINATION_TABLE g_DestinationEntryPoints[] = {
|
|
{ TEXT("SCRIPT"), ISM_VERSION,
|
|
ScriptDgmInitialize, ScriptDgmQueueEnumeration, NULL, NULL,
|
|
NULL, NULL, NULL, NULL,
|
|
ScriptCsmInitialize, ScriptCsmExecute, NULL, ScriptCsmTerminate,
|
|
ScriptOpmInitialize, ScriptOpmTerminate
|
|
},
|
|
|
|
{NULL}
|
|
};
|
|
|
|
|
|
EXPORT
|
|
BOOL
|
|
WINAPI
|
|
DllMain (
|
|
IN HINSTANCE hInstance,
|
|
IN DWORD dwReason,
|
|
IN LPVOID lpReserved
|
|
)
|
|
{
|
|
if (dwReason == DLL_PROCESS_ATTACH) {
|
|
g_hInst = hInstance;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL
|
|
WINAPI
|
|
pFindModule (
|
|
IN PCTSTR ModuleId,
|
|
OUT PVOID IsmBuffer,
|
|
IN PCTSTR *TableEntry,
|
|
IN UINT StructureSize
|
|
)
|
|
{
|
|
|
|
while (*TableEntry) {
|
|
if (StringIMatch (*TableEntry, ModuleId)) {
|
|
CopyMemory (
|
|
IsmBuffer,
|
|
(PBYTE) (TableEntry + 1),
|
|
StructureSize
|
|
);
|
|
return TRUE;
|
|
}
|
|
|
|
TableEntry = (PCTSTR *) ((PBYTE) (TableEntry + 1) + StructureSize);
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
|
|
EXPORT
|
|
BOOL
|
|
WINAPI
|
|
TypeModule (
|
|
IN PCTSTR ModuleId,
|
|
IN OUT PTYPE_ENTRYPOINTS TypeEntryPoints
|
|
)
|
|
{
|
|
return pFindModule (
|
|
ModuleId,
|
|
(PVOID) TypeEntryPoints,
|
|
(PCTSTR *) g_EtmEntryPoints,
|
|
sizeof (TYPE_ENTRYPOINTS)
|
|
);
|
|
}
|
|
|
|
|
|
EXPORT
|
|
BOOL
|
|
WINAPI
|
|
VirtualComputerModule (
|
|
IN PCTSTR ModuleId,
|
|
IN OUT PVIRTUAL_COMPUTER_ENTRYPOINTS VirtualComputerEntryPoints
|
|
)
|
|
{
|
|
return pFindModule (
|
|
ModuleId,
|
|
(PVOID) VirtualComputerEntryPoints,
|
|
(PCTSTR *) g_VcmEntryPoints,
|
|
sizeof (VIRTUAL_COMPUTER_ENTRYPOINTS)
|
|
);
|
|
}
|
|
|
|
|
|
EXPORT
|
|
BOOL
|
|
WINAPI
|
|
SourceModule (
|
|
IN PCTSTR ModuleId,
|
|
IN OUT PSOURCE_ENTRYPOINTS SourceEntryPoints
|
|
)
|
|
{
|
|
return pFindModule (
|
|
ModuleId,
|
|
(PVOID) SourceEntryPoints,
|
|
(PCTSTR *) g_SourceEntryPoints,
|
|
sizeof (SOURCE_ENTRYPOINTS)
|
|
);
|
|
}
|
|
|
|
|
|
EXPORT
|
|
BOOL
|
|
WINAPI
|
|
DestinationModule (
|
|
IN PCTSTR ModuleId,
|
|
IN OUT PDESTINATION_ENTRYPOINTS DestinationEntryPoints
|
|
)
|
|
{
|
|
return pFindModule (
|
|
ModuleId,
|
|
(PVOID) DestinationEntryPoints,
|
|
(PCTSTR *) g_DestinationEntryPoints,
|
|
sizeof (DESTINATION_ENTRYPOINTS)
|
|
);
|
|
}
|
|
|
|
|
|
|