Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

215 lines
3.9 KiB

/*++
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)
);
}