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.
 
 
 
 
 
 

244 lines
6.2 KiB

/*++
Copyright (c) 1997-1999 Microsoft Corporation
Module Name:
clusres.c
Abstract:
Common Resource DLL Startup
Author:
John Vert (jvert) 12/15/1996
Revision History:
Sivaprasad Padisetty (sivapad) 04/22/1996 Added the local quorum
--*/
#include "clusres.h"
#include "clusrtl.h"
#include "clusudef.h"
PSET_RESOURCE_STATUS_ROUTINE ClusResSetResourceStatus = NULL;
PLOG_EVENT_ROUTINE ClusResLogEvent = NULL;
DWORD g_dwDebugLogLevel;
BOOLEAN
WINAPI
ClusResDllEntry(
IN HINSTANCE DllHandle,
IN DWORD Reason,
IN LPVOID Reserved
)
/*++
Routine Description:
Main DLL entrypoint for combined resource DLL.
Arguments:
DllHandle - Supplies the DLL handle.
Reason - Supplies the call reason
Return Value:
TRUE if successful
FALSE if unsuccessful
--*/
{
if (Reason == DLL_PROCESS_ATTACH) {
LPWSTR lpszDebugLogLevel;
DisableThreadLibraryCalls(DllHandle);
lpszDebugLogLevel = _wgetenv(L"ClusterLogLevel");
g_dwDebugLogLevel = 0;
if (lpszDebugLogLevel != NULL) {
int nFields;
nFields = swscanf(lpszDebugLogLevel, L"%u", &g_dwDebugLogLevel);
if ( nFields != 1 ) {
g_dwDebugLogLevel = 0;
}
}
ClRtlInitialize( TRUE, &g_dwDebugLogLevel );
ClRtlInitWmi(NULL);
}
//
// Let everybody else have their shot at it.
//
if (!GenAppDllEntryPoint(DllHandle, Reason, Reserved)) {
return(FALSE);
}
if (!GenSvcDllEntryPoint(DllHandle, Reason, Reserved)) {
return(FALSE);
}
#if 0
if (!FtSetDllEntryPoint(DllHandle, Reason, Reserved)) {
return(FALSE);
}
#endif
if (!DisksDllEntryPoint(DllHandle, Reason, Reserved)) {
return(FALSE);
}
if (!NetNameDllEntryPoint(DllHandle, Reason, Reserved)) {
return(FALSE);
}
if (!IpAddrDllEntryPoint(DllHandle, Reason, Reserved)) {
return(FALSE);
}
if (!SmbShareDllEntryPoint(DllHandle, Reason, Reserved)) {
return(FALSE);
}
if (!SplSvcDllEntryPoint(DllHandle, Reason, Reserved)) {
return(FALSE);
}
if (!LkQuorumDllEntryPoint(DllHandle, Reason, Reserved)) {
return(FALSE);
}
#if 0
if (!TimeSvcDllEntryPoint(DllHandle, Reason, Reserved)) {
return(FALSE);
}
#endif
if (!GenScriptDllEntryPoint(DllHandle, Reason, Reserved)) {
return(FALSE);
}
if (!MsMQDllEntryPoint(DllHandle, Reason, Reserved)) {
return(FALSE);
}
if (!MajorityNodeSetDllEntryPoint(DllHandle, Reason, Reserved)) {
return(FALSE);
}
if (Reason == DLL_PROCESS_DETACH) {
ClRtlCleanup();
}
return(TRUE);
}
DWORD
WINAPI
Startup(
IN LPCWSTR ResourceType,
IN DWORD MinVersionSupported,
IN DWORD MaxVersionSupported,
IN PSET_RESOURCE_STATUS_ROUTINE SetResourceStatus,
IN PLOG_EVENT_ROUTINE LogEvent,
OUT PCLRES_FUNCTION_TABLE *FunctionTable
)
/*++
Routine Description:
Startup a particular resource type. This means verifying the version
requested, and returning the function table for this resource type.
Arguments:
ResourceType - Supplies the type of resource.
MinVersionSupported - The minimum version number supported by the cluster
service on this system.
MaxVersionSupported - The maximum version number supported by the cluster
service on this system.
SetResourceStatus - xxx
LogEvent - xxx
FunctionTable - Returns the Function Table for this resource type.
Return Value:
ERROR_SUCCESS if successful.
A Win32 error code on failure.
--*/
{
if ( (MinVersionSupported > CLRES_VERSION_V1_00) ||
(MaxVersionSupported < CLRES_VERSION_V1_00) ) {
return(ERROR_REVISION_MISMATCH);
}
if ( !ClusResLogEvent ) {
ClusResLogEvent = LogEvent;
ClusResSetResourceStatus = SetResourceStatus;
}
if ( lstrcmpiW( ResourceType, CLUS_RESTYPE_NAME_GENSVC ) == 0 ) {
*FunctionTable = &GenSvcFunctionTable;
return(ERROR_SUCCESS);
} else if ( lstrcmpiW( ResourceType, CLUS_RESTYPE_NAME_GENAPP ) == 0 ) {
*FunctionTable = &GenAppFunctionTable;
return(ERROR_SUCCESS);
#if 0
} else if ( lstrcmpiW( ResourceType, CLUS_RESTYPE_NAME_FTSET ) == 0 ) {
*FunctionTable = &FtSetFunctionTable;
return(ERROR_SUCCESS);
#endif
} else if ( lstrcmpiW( ResourceType, CLUS_RESTYPE_NAME_PHYS_DISK ) == 0 ) {
*FunctionTable = &DisksFunctionTable;
return(ERROR_SUCCESS);
} else if ( lstrcmpiW( ResourceType, CLUS_RESTYPE_NAME_FILESHR ) == 0 ) {
*FunctionTable = &SmbShareFunctionTable;
return(ERROR_SUCCESS);
} else if ( lstrcmpiW( ResourceType, CLUS_RESTYPE_NAME_NETNAME ) == 0 ) {
*FunctionTable = &NetNameFunctionTable;
return(ERROR_SUCCESS);
} else if ( lstrcmpiW( ResourceType, CLUS_RESTYPE_NAME_IPADDR ) == 0 ) {
*FunctionTable = &IpAddrFunctionTable;
return(ERROR_SUCCESS);
#if 0
} else if ( lstrcmpiW( ResourceType, CLUS_RESTYPE_NAME_TIMESVC ) == 0 ) {
*FunctionTable = &TimeSvcFunctionTable;
return(ERROR_SUCCESS);
#endif
} else if ( lstrcmpiW( ResourceType, CLUS_RESTYPE_NAME_PRTSPLR ) == 0 ) {
*FunctionTable = &SplSvcFunctionTable;
return(ERROR_SUCCESS);
} else if ( lstrcmpiW( ResourceType, CLUS_RESTYPE_NAME_LKQUORUM ) == 0 ) {
*FunctionTable = &LkQuorumFunctionTable;
return(ERROR_SUCCESS);
} else if ( lstrcmpiW( ResourceType, CLUS_RESTYPE_NAME_MSMQ ) == 0 ) {
*FunctionTable = &MsMQFunctionTable;
return(ERROR_SUCCESS);
} else if ( lstrcmpiW( ResourceType, CLUS_RESTYPE_NAME_GENSCRIPT ) == 0 ) {
*FunctionTable = &GenScriptFunctionTable;
return(ERROR_SUCCESS);
} else if ( lstrcmpiW( ResourceType, CLUS_RESTYPE_NAME_MAJORITYNODESET) == 0 ) {
*FunctionTable = &MajorityNodeSetFunctionTable;
return(ERROR_SUCCESS);
} else {
return(ERROR_CLUSTER_RESNAME_NOT_FOUND);
}
} // Startup