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.
 
 
 
 
 
 

751 lines
20 KiB

/*++
Copyright (c) 1994 Microsoft Corporation
Module Name :
globals.c
Abstract:
Defines global variables for the common tcpsvcs.dll
( It is defined separately because the debug variable should be
"C" variable.)
Author:
Murali R. Krishnan ( MuraliK ) 18-Nov-1994
Revision History:
MuraliK 21-Feb-1995 Added Debugging Variables definitions
--*/
#include <tcpdllp.hxx>
#pragma hdrstop
#include <isplat.h>
//
// private routines
//
BOOL
DummySvclocFn(
VOID
);
BOOL
LoadNTSecurityEntryPoints(
VOID
);
BOOL
LoadW95SecurityEntryPoints(
VOID
);
BOOL
GetSecurityDllEntryPoints(
IN HINSTANCE hInstance
);
BOOL
GetLogonDllEntryPoints(
IN HINSTANCE hInstance
);
//
// Declare all the debugging related variables
//
#ifdef _NO_TRACING_
DECLARE_DEBUG_VARIABLE();
DECLARE_DEBUG_PRINTS_OBJECT();
#endif
#define DEFAULT_DEBUG_FLAGS_VALUE ( 0)
//
// inetsloc entry points
//
HINSTANCE g_hSvcLocDll = NULL;
INET_REGISTER_SVC_FN pfnInetRegisterSvc = NULL;
INET_DEREGISTER_SVC_FN pfnInetDeregisterSvc = NULL;
INET_INIT_CONTROL_SVC_FN pfnInitSvcLoc = NULL;
INET_INIT_CONTROL_SVC_FN pfnTerminateSvcLoc = NULL;
// UNDONE remove? schannel no longer needed???
//
// schannel entrypoints
//
HINSTANCE g_hSchannel = NULL;
SSL_CRACK_CERTIFICATE_FN fnCrackCert = NULL;
SSL_FREE_CERTIFICATE_FN fnFreeCert = NULL;
//
// crypt32 entrypoints
//
HINSTANCE g_hCrypt32Dll = NULL;
CRYPT32_FREE_CERTCTXT_FN pfnFreeCertCtxt = NULL;
CRYPT32_GET_CERTCTXT_PROP_FN pfnGetCertCtxtProp = NULL;
CRYPT32_CERT_VERIFY_REVOCATION_FN pfnCertVerifyRevocation = NULL;
CRYPT32_CERT_VERIFY_TIME_VALIDITY pfnCertVerifyTimeValidity = NULL;
CRYPT32_CERT_NAME_TO_STR_A_FN pfnCertNameToStrA = NULL;
//
// sspi entrypoints
//
HINSTANCE g_hSecurityDll = NULL;
ACCEPT_SECURITY_CONTEXT_FN pfnAcceptSecurityContext = NULL;
ACQUIRE_CREDENTIALS_HANDLE_FN pfnAcquireCredentialsHandle = NULL;
COMPLETE_AUTH_TOKEN_FN pfnCompleteAuthToken = NULL;
DELETE_SECURITY_CONTEXT_FN pfnDeleteSecurityContext = NULL;
ENUMERATE_SECURITY_PACKAGES_FN pfnEnumerateSecurityPackages = NULL;
IMPERSONATE_SECURITY_CONTEXT_FN pfnImpersonateSecurityContext = NULL;
INITIALIZE_SECURITY_CONTEXT_FN pfnInitializeSecurityContext = NULL;
FREE_CONTEXT_BUFFER_FN pfnFreeContextBuffer = NULL;
FREE_CREDENTIALS_HANDLE_FN pfnFreeCredentialsHandle = NULL;
QUERY_CONTEXT_ATTRIBUTES_FN pfnQueryContextAttributes = NULL;
QUERY_SECURITY_CONTEXT_TOKEN_FN pfnQuerySecurityContextToken = NULL;
QUERY_SECURITY_PACKAGE_INFO_FN pfnQuerySecurityPackageInfo = NULL;
REVERT_SECURITY_CONTEXT_FN pfnRevertSecurityContext = NULL;
//
// logon entry points
//
LOGON32_INITIALIZE_FN pfnLogon32Initialize = NULL;
LOGON_NET_USER_A_FN pfnLogonNetUserA = NULL;
LOGON_NET_USER_W_FN pfnLogonNetUserW = NULL;
NET_USER_COOKIE_A_FN pfnNetUserCookieA = NULL;
LOGON_DIGEST_USER_A_FN pfnLogonDigestUserA = NULL;
GET_DEFAULT_DOMAIN_NAME_FN pfnGetDefaultDomainName = NULL;
//
// advapi32
//
DUPLICATE_TOKEN_EX_FN pfnDuplicateTokenEx = NULL;
LSA_OPEN_POLICY_FN pfnLsaOpenPolicy = NULL;
LSA_RETRIEVE_PRIVATE_DATA_FN pfnLsaRetrievePrivateData = NULL;
LSA_STORE_PRIVATE_DATA_FN pfnLsaStorePrivateData = NULL;
LSA_FREE_MEMORY_FN pfnLsaFreeMemory = NULL;
LSA_CLOSE_FN pfnLsaClose = NULL;
LSA_NT_STATUS_TO_WIN_ERROR_FN pfnLsaNtStatusToWinError = NULL;
//
// kernel32
//
#if _WIN64
LONG
INET_InterlockedIncrement(
IN OUT LPLONG lpAddend
)
{
return InterlockedIncrement(lpAddend);
}
LONG
INET_InterlockedCompareExchange (
IN OUT PLONG Destination,
IN LONG ExChange,
IN LONG Comperand
)
{
return InterlockedCompareExchange(Destination, ExChange, Comperand);
}
LONG
INET_InterlockedExchangeAdd(
IN OUT LPLONG Addend,
IN LONG Value
)
{
return InterlockedExchangeAdd(Addend, Value);
}
LONG
__cdecl
INET_InterlockedDecrement(
IN OUT LPLONG lpAddend
)
{
return InterlockedDecrement(lpAddend);
}
INTERLOCKED_EXCHANGE_ADD_FN pfnInterlockedExchangeAdd = INET_InterlockedExchangeAdd;
INTERLOCKED_COMPARE_EXCHANGE_FN pfnInterlockedCompareExchange = (INTERLOCKED_COMPARE_EXCHANGE_FN)INET_InterlockedCompareExchange;
INTERLOCKED_INCREMENT_FN pfnInterlockedIncrement = INET_InterlockedIncrement;
INTERLOCKED_DECREMENT_FN pfnInterlockedDecrement = INET_InterlockedDecrement;
READ_DIR_CHANGES_W_FN pfnReadDirChangesW = ReadDirectoryChangesW;
#else
INTERLOCKED_EXCHANGE_ADD_FN pfnInterlockedExchangeAdd = NULL;
INTERLOCKED_COMPARE_EXCHANGE_FN pfnInterlockedCompareExchange = NULL;
INTERLOCKED_INCREMENT_FN pfnInterlockedIncrement = NULL;
INTERLOCKED_DECREMENT_FN pfnInterlockedDecrement = NULL;
READ_DIR_CHANGES_W_FN pfnReadDirChangesW;
#endif
//
// lonsi
//
HINSTANCE g_hLonsiNT = NULL;
HINSTANCE g_hLonsiW95 = NULL;
//
// rpcref
//
HINSTANCE g_hRpcRef = NULL;
PFN_INETINFO_START_RPC_SERVER pfnInetinfoStartRpcServer = NULL;
PFN_INETINFO_STOP_RPC_SERVER pfnInetinfoStopRpcServer = NULL;
BOOL
GetDynamicEntryPoints(
VOID
)
{
HINSTANCE hTemp;
DBG_ASSERT(IISIsValidPlatform());
if ( TsIsWindows95() ) {
goto win95_only;
}
//
// advapi32
//
hTemp = LoadLibrary("advapi32.dll");
if ( hTemp != NULL ) {
pfnDuplicateTokenEx = (DUPLICATE_TOKEN_EX_FN)
GetProcAddress(hTemp,"DuplicateTokenEx");
pfnLsaOpenPolicy = (LSA_OPEN_POLICY_FN)
GetProcAddress(hTemp,"LsaOpenPolicy");
pfnLsaRetrievePrivateData = (LSA_RETRIEVE_PRIVATE_DATA_FN)
GetProcAddress(hTemp,"LsaRetrievePrivateData");
pfnLsaStorePrivateData = (LSA_STORE_PRIVATE_DATA_FN)
GetProcAddress(hTemp,"LsaStorePrivateData");
pfnLsaFreeMemory = (LSA_FREE_MEMORY_FN)
GetProcAddress(hTemp,"LsaFreeMemory");
pfnLsaClose = (LSA_CLOSE_FN)
GetProcAddress(hTemp,"LsaClose");
pfnLsaNtStatusToWinError = (LSA_NT_STATUS_TO_WIN_ERROR_FN)
GetProcAddress(hTemp,"LsaNtStatusToWinError");
FreeLibrary(hTemp);
if ( !pfnDuplicateTokenEx ||
!pfnLsaOpenPolicy ||
!pfnLsaRetrievePrivateData ||
!pfnLsaFreeMemory ||
!pfnLsaClose ||
!pfnLsaNtStatusToWinError ) {
DBGPRINTF((DBG_CONTEXT,
"Unable to obtain an advapi32 entry point\n"));
goto error_exit;
}
} else {
DBGPRINTF((DBG_CONTEXT, "Error %d loading advapi32.dll\n",
GetLastError() ));
goto error_exit;
}
//
// kernel32
//
#ifndef _WIN64
hTemp = LoadLibrary("kernel32.dll");
if ( hTemp != NULL ) {
pfnInterlockedExchangeAdd = (INTERLOCKED_EXCHANGE_ADD_FN)
GetProcAddress(hTemp,"InterlockedExchangeAdd");
pfnInterlockedCompareExchange = (INTERLOCKED_COMPARE_EXCHANGE_FN)
GetProcAddress(hTemp,"InterlockedCompareExchange");
pfnInterlockedIncrement = (INTERLOCKED_INCREMENT_FN)
GetProcAddress(hTemp,"InterlockedIncrement");
pfnInterlockedDecrement = (INTERLOCKED_DECREMENT_FN)
GetProcAddress(hTemp,"InterlockedDecrement");
pfnReadDirChangesW = (READ_DIR_CHANGES_W_FN)
GetProcAddress(hTemp,"ReadDirectoryChangesW");
FreeLibrary(hTemp);
if ( !pfnInterlockedExchangeAdd ||
!pfnInterlockedCompareExchange ||
!pfnInterlockedIncrement ||
!pfnInterlockedDecrement ||
!pfnReadDirChangesW ) {
DBGPRINTF((DBG_CONTEXT,
"Unable to obtain NT kernel32 entry point\n"));
goto error_exit;
}
} else {
DBGPRINTF((DBG_CONTEXT,"Error %d loading kernel32.dll\n",
GetLastError()));
goto error_exit;
}
#endif
//
// load the service locator entry points. Not fatal on failure.
//
// Loading of the inetsloc.dll service is disabled
// g_hSvcLocDll = LoadLibrary("inetsloc.dll");
g_hSvcLocDll = NULL;
if ( g_hSvcLocDll != NULL ) {
pfnInetRegisterSvc = (INET_REGISTER_SVC_FN)
GetProcAddress( g_hSvcLocDll, "INetRegisterService" );
pfnInetDeregisterSvc = (INET_DEREGISTER_SVC_FN)
GetProcAddress( g_hSvcLocDll, "INetDeregisterService" );
pfnInitSvcLoc = (INET_INIT_CONTROL_SVC_FN)
GetProcAddress( g_hSvcLocDll, "InitSvcLocator" );
pfnTerminateSvcLoc = (INET_INIT_CONTROL_SVC_FN)
GetProcAddress( g_hSvcLocDll, "TerminateSvcLocator" );
if ( !pfnInetRegisterSvc ||
!pfnInetDeregisterSvc ||
!pfnInitSvcLoc ||
!pfnTerminateSvcLoc ) {
DBGPRINTF((DBG_CONTEXT,"Unable to find an inetsloc entrypoint\n"));
FreeLibrary( g_hSvcLocDll );
g_hSvcLocDll = NULL;
}
}
if ( g_hSvcLocDll == NULL ) {
DBGPRINTF((DBG_CONTEXT,
"Unable to find an inetsloc.dll entrypoints!!!. Ignore if NTW.\n"));
pfnInitSvcLoc = (INET_INIT_CONTROL_SVC_FN)DummySvclocFn;
pfnTerminateSvcLoc = (INET_INIT_CONTROL_SVC_FN)DummySvclocFn;
}
//
// rpcref
//
g_hRpcRef = LoadLibrary("rpcref.dll");
if ( g_hRpcRef != NULL ) {
pfnInetinfoStartRpcServer = (PFN_INETINFO_START_RPC_SERVER)
GetProcAddress(g_hRpcRef,"InetinfoStartRpcServerListen");
pfnInetinfoStopRpcServer = (PFN_INETINFO_STOP_RPC_SERVER)
GetProcAddress(g_hRpcRef,"InetinfoStopRpcServerListen");
} else {
DBGPRINTF((DBG_CONTEXT, "Error %d loading rpcref.dll\n",
GetLastError() ));
goto error_exit;
}
if ( !LoadNTSecurityEntryPoints( ) ) {
goto error_exit;
}
return(TRUE);
win95_only:
g_hLonsiW95 = LoadLibrary( "lonsiw95.dll" );
if ( g_hLonsiW95 == NULL ) {
DBGPRINTF((DBG_CONTEXT,"Error %d loading lonsiw95.dll\n",
GetLastError()));
goto error_exit;
}
//
// kernel32
//
pfnInterlockedExchangeAdd = (INTERLOCKED_EXCHANGE_ADD_FN)
GetProcAddress(g_hLonsiW95,"FakeInterlockedExchangeAdd");
pfnInterlockedCompareExchange = (INTERLOCKED_COMPARE_EXCHANGE_FN)
GetProcAddress(g_hLonsiW95,"FakeInterlockedCompareExchange");
pfnInterlockedIncrement = (INTERLOCKED_INCREMENT_FN)
GetProcAddress(g_hLonsiW95,"FakeInterlockedIncrement");
pfnInterlockedDecrement = (INTERLOCKED_DECREMENT_FN)
GetProcAddress(g_hLonsiW95,"FakeInterlockedDecrement");
if ( !pfnInterlockedExchangeAdd ||
!pfnInterlockedCompareExchange ||
!pfnInterlockedIncrement ||
!pfnInterlockedDecrement ) {
DBGPRINTF((DBG_CONTEXT,
"Unable to obtain Win95 kernel32 entry points\n"));
goto error_exit;
}
//
// svcloc
//
pfnInitSvcLoc = (INET_INIT_CONTROL_SVC_FN)DummySvclocFn;
pfnTerminateSvcLoc = (INET_INIT_CONTROL_SVC_FN)DummySvclocFn;
//
// security/schannel/lsa
//
if ( !LoadW95SecurityEntryPoints( ) ) {
goto error_exit;
}
return(TRUE);
error_exit:
return(FALSE);
} // GetDynamicEntryPoints
VOID
FreeDynamicLibraries(
VOID
)
{
if ( g_hSchannel != NULL ) {
FreeLibrary( g_hSchannel );
g_hSchannel = NULL;
}
if ( g_hCrypt32Dll != NULL ) {
FreeLibrary( g_hCrypt32Dll );
g_hCrypt32Dll = NULL;
}
if ( g_hSecurityDll != NULL ) {
FreeLibrary( g_hSecurityDll );
g_hSecurityDll = NULL;
}
if ( g_hSvcLocDll != NULL ) {
FreeLibrary( g_hSvcLocDll );
g_hSvcLocDll = NULL;
}
if ( g_hRpcRef != NULL ) {
FreeLibrary( g_hRpcRef );
g_hRpcRef = NULL;
}
if ( g_hLonsiNT != NULL ) {
FreeLibrary( g_hLonsiNT );
g_hLonsiNT = NULL;
}
if ( g_hLonsiW95 != NULL ) {
FreeLibrary( g_hLonsiW95 );
g_hLonsiW95 = NULL;
}
return;
} // FreeDynamicLibraries
BOOL
LoadNTSecurityEntryPoints(
VOID
)
{
IF_DEBUG(DLL_SECURITY) {
DBGPRINTF((DBG_CONTEXT,"Entering LoadNTSecurityEntryPoints\n"));
}
//
// Load Schannel
//
g_hSchannel = LoadLibrary( "schannel.dll" );
if ( g_hSchannel != NULL ) {
fnCrackCert = (SSL_CRACK_CERTIFICATE_FN)
GetProcAddress( g_hSchannel, "SslCrackCertificate" );
fnFreeCert = (SSL_FREE_CERTIFICATE_FN)
GetProcAddress( g_hSchannel, "SslFreeCertificate" );
} else {
DBGPRINTF((DBG_CONTEXT,
"Unable to load schannel.dll[err %d]\n", GetLastError() ));
}
//
// Load Crypt32
//
g_hCrypt32Dll = LoadLibrary( "crypt32.dll" );
if ( g_hCrypt32Dll != NULL ) {
pfnFreeCertCtxt = (CRYPT32_FREE_CERTCTXT_FN)
GetProcAddress( g_hCrypt32Dll, "CertFreeCertificateContext" );
pfnGetCertCtxtProp = (CRYPT32_GET_CERTCTXT_PROP_FN)
GetProcAddress( g_hCrypt32Dll, "CertGetCertificateContextProperty" );
pfnCertVerifyRevocation = (CRYPT32_CERT_VERIFY_REVOCATION_FN)
GetProcAddress( g_hCrypt32Dll, "CertVerifyRevocation" );
pfnCertVerifyTimeValidity = (CRYPT32_CERT_VERIFY_TIME_VALIDITY)
GetProcAddress( g_hCrypt32Dll, "CertVerifyTimeValidity" );
pfnCertNameToStrA = (CRYPT32_CERT_NAME_TO_STR_A_FN)
GetProcAddress( g_hCrypt32Dll, "CertNameToStrA" );
} else {
DBGPRINTF((DBG_CONTEXT,
"Unable to load crypt32.dll[err %d]\n", GetLastError() ));
}
DBG_ASSERT( pfnFreeCertCtxt );
DBG_ASSERT( pfnGetCertCtxtProp );
DBG_ASSERT( pfnCertVerifyRevocation );
DBG_ASSERT( pfnCertVerifyTimeValidity );
DBG_ASSERT( pfnCertNameToStrA );
//
// Load security.dll
//
g_hSecurityDll = LoadLibrary( "security.dll" );
if ( g_hSecurityDll == NULL ) {
DBGPRINTF((DBG_CONTEXT,"Error %d loading security.dll\n",
GetLastError()));
return(FALSE);
}
if ( !GetSecurityDllEntryPoints( g_hSecurityDll ) ) {
return(FALSE);
}
//
// Load lsa stuff from lonsint.dll
//
g_hLonsiNT = LoadLibrary( "lonsint.dll" );
if ( g_hLonsiNT == NULL ) {
DBGPRINTF((DBG_CONTEXT,"Error %d loading lonsint.dll\n",
GetLastError()));
return(FALSE);
}
if ( !GetLogonDllEntryPoints( g_hLonsiNT ) ) {
return FALSE;
}
return(TRUE);
} // LoadNTSecurityEntryPoints
BOOL
LoadW95SecurityEntryPoints(
VOID
)
{
IF_DEBUG(DLL_SECURITY) {
DBGPRINTF((DBG_CONTEXT,"Entering LoadW95SecurityEntryPoints\n"));
}
//
// Load Schannel
//
fnCrackCert = NULL;
fnFreeCert = NULL;
//
// Load security.dll
//
DBG_ASSERT(g_hLonsiW95 != NULL);
if ( !GetSecurityDllEntryPoints( g_hLonsiW95 ) ) {
return(FALSE);
}
if ( !GetLogonDllEntryPoints( g_hLonsiW95 ) ) {
return FALSE;
}
return(TRUE);
} // LoadNTSecurityEntryPoints
BOOL
GetSecurityDllEntryPoints(
IN HINSTANCE hInstance
)
{
pfnAcceptSecurityContext = (ACCEPT_SECURITY_CONTEXT_FN)
GetProcAddress( hInstance, "AcceptSecurityContext" );
pfnAcquireCredentialsHandle = (ACQUIRE_CREDENTIALS_HANDLE_FN)
GetProcAddress( hInstance, "AcquireCredentialsHandleA" );
pfnCompleteAuthToken = (COMPLETE_AUTH_TOKEN_FN)
GetProcAddress( hInstance, "CompleteAuthToken" );
pfnDeleteSecurityContext = (DELETE_SECURITY_CONTEXT_FN)
GetProcAddress( hInstance, "DeleteSecurityContext" );
pfnEnumerateSecurityPackages = (ENUMERATE_SECURITY_PACKAGES_FN)
GetProcAddress( hInstance, "EnumerateSecurityPackagesA" );
pfnImpersonateSecurityContext = (IMPERSONATE_SECURITY_CONTEXT_FN)
GetProcAddress( hInstance, "ImpersonateSecurityContext" );
pfnInitializeSecurityContext = (INITIALIZE_SECURITY_CONTEXT_FN)
GetProcAddress( hInstance, "InitializeSecurityContextA" );
pfnFreeContextBuffer = (FREE_CONTEXT_BUFFER_FN)
GetProcAddress( hInstance, "FreeContextBuffer" );
pfnFreeCredentialsHandle = (FREE_CREDENTIALS_HANDLE_FN)
GetProcAddress( hInstance, "FreeCredentialsHandle" );
pfnQueryContextAttributes = (QUERY_CONTEXT_ATTRIBUTES_FN)
GetProcAddress( hInstance, "QueryContextAttributesA" );
pfnQuerySecurityContextToken = (QUERY_SECURITY_CONTEXT_TOKEN_FN)
GetProcAddress( hInstance, "QuerySecurityContextToken" );
pfnQuerySecurityPackageInfo = (QUERY_SECURITY_PACKAGE_INFO_FN)
GetProcAddress( hInstance, "QuerySecurityPackageInfoA" );
pfnRevertSecurityContext = (REVERT_SECURITY_CONTEXT_FN)
GetProcAddress( hInstance, "RevertSecurityContext" );
if ( !pfnAcceptSecurityContext ||
!pfnAcquireCredentialsHandle ||
!pfnCompleteAuthToken ||
!pfnDeleteSecurityContext ||
!pfnEnumerateSecurityPackages ||
!pfnImpersonateSecurityContext ||
!pfnInitializeSecurityContext ||
!pfnFreeContextBuffer ||
!pfnFreeCredentialsHandle ||
!pfnQueryContextAttributes ||
!pfnQuerySecurityContextToken ||
!pfnQuerySecurityPackageInfo ||
!pfnRevertSecurityContext ) {
DBGPRINTF((DBG_CONTEXT,"Unable to get security entry points\n"));
SetLastError(ERROR_PROC_NOT_FOUND);
DBG_ASSERT(FALSE);
return FALSE;
}
return(TRUE);
} // GetSecurityDllEntryPoints
BOOL
GetLogonDllEntryPoints(
IN HINSTANCE hInstance
)
{
pfnLogon32Initialize = (LOGON32_INITIALIZE_FN)
GetProcAddress( hInstance, "IISLogon32Initialize" );
pfnLogonNetUserA = (LOGON_NET_USER_A_FN)
GetProcAddress( hInstance, "IISLogonNetUserA" );
pfnLogonNetUserW = (LOGON_NET_USER_W_FN)
GetProcAddress( hInstance, "IISLogonNetUserW" );
pfnNetUserCookieA = (NET_USER_COOKIE_A_FN)
GetProcAddress( hInstance, "IISNetUserCookieA" );
pfnLogonDigestUserA = (LOGON_DIGEST_USER_A_FN)
GetProcAddress( hInstance, "IISLogonDigestUserA" );
pfnGetDefaultDomainName = (GET_DEFAULT_DOMAIN_NAME_FN)
GetProcAddress( hInstance, "IISGetDefaultDomainName" );
if ( !pfnLogon32Initialize ||
!pfnLogonNetUserA ||
!pfnLogonNetUserW ||
!pfnNetUserCookieA ||
!pfnLogonDigestUserA ||
!pfnGetDefaultDomainName ) {
DBGPRINTF((DBG_CONTEXT,"Unable to get an entry point on lonsint.dll\n"));
SetLastError( ERROR_PROC_NOT_FOUND );
DBG_ASSERT(FALSE);
return FALSE;
}
return(TRUE);
} // GetLogonDllEntryPoints
#ifdef _NO_TRACING_
DWORD
GetDebugFlagsFromReg(IN LPCTSTR pszRegEntry)
{
HKEY hkey = NULL;
DWORD err;
DWORD dwDebug = DEFAULT_DEBUG_FLAGS_VALUE;
err = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
pszRegEntry,
0,
KEY_READ,
&hkey);
if ( hkey != NULL) {
DBG_CODE(
dwDebug =
LOAD_DEBUG_FLAGS_FROM_REG(hkey, DEFAULT_DEBUG_FLAGS_VALUE)
);
RegCloseKey(hkey);
}
return ( dwDebug);
} // GetDebugFlagsFromReg()
#endif
BOOL
DummySvclocFn(
VOID
)
{
return(TRUE);
} // DummySvclocFn