Use less global variables (#1064)

This commit is contained in:
Pavel Krymets 2018-07-17 08:56:18 -07:00 committed by GitHub
parent 5c2df180fc
commit 074264cd3a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 100 additions and 130 deletions

View File

@ -12,12 +12,21 @@
#include "SRWExclusiveLock.h" #include "SRWExclusiveLock.h"
#include "GlobalVersionUtility.h" #include "GlobalVersionUtility.h"
#include "exceptions.h" #include "exceptions.h"
#include "HandleWrapper.h"
#include "PollingAppOfflineApplication.h" #include "PollingAppOfflineApplication.h"
#include "EventLog.h"
extern HINSTANCE g_hModule;
const PCWSTR APPLICATION_INFO::s_pwzAspnetcoreInProcessRequestHandlerName = L"aspnetcorev2_inprocess.dll"; const PCWSTR APPLICATION_INFO::s_pwzAspnetcoreInProcessRequestHandlerName = L"aspnetcorev2_inprocess.dll";
const PCWSTR APPLICATION_INFO::s_pwzAspnetcoreOutOfProcessRequestHandlerName = L"aspnetcorev2_outofprocess.dll"; const PCWSTR APPLICATION_INFO::s_pwzAspnetcoreOutOfProcessRequestHandlerName = L"aspnetcorev2_outofprocess.dll";
SRWLOCK APPLICATION_INFO::s_requestHandlerLoadLock {};
bool APPLICATION_INFO::s_fAspnetcoreRHAssemblyLoaded = false;
bool APPLICATION_INFO::s_fAspnetcoreRHLoadedError = false;
HMODULE APPLICATION_INFO::s_hAspnetCoreRH = nullptr;
PFN_ASPNETCORE_CREATE_APPLICATION APPLICATION_INFO::s_pfnAspNetCoreCreateApplication = nullptr;
APPLICATION_INFO::~APPLICATION_INFO() APPLICATION_INFO::~APPLICATION_INFO()
{ {
if (m_pApplication != NULL) if (m_pApplication != NULL)
@ -39,23 +48,14 @@ APPLICATION_INFO::~APPLICATION_INFO()
HRESULT HRESULT
APPLICATION_INFO::Initialize( APPLICATION_INFO::Initialize(
_In_ IHttpServer *pServer, _In_ IHttpApplication &pApplication
_In_ IHttpApplication *pApplication
) )
{ {
HRESULT hr = S_OK; m_pConfiguration = new ASPNETCORE_SHIM_CONFIG();
RETURN_IF_FAILED(m_pConfiguration->Populate(&m_pServer, &pApplication));
RETURN_IF_FAILED(m_struInfoKey.Copy(pApplication.GetApplicationId()));
DBG_ASSERT(pServer); return S_OK;
DBG_ASSERT(pApplication);
// todo: make sure Initialize should be called only once
m_pServer = pServer;
FINISHED_IF_NULL_ALLOC(m_pConfiguration = new ASPNETCORE_SHIM_CONFIG());
FINISHED_IF_FAILED(m_pConfiguration->Populate(m_pServer, pApplication));
FINISHED_IF_FAILED(m_struInfoKey.Copy(pApplication->GetApplicationId()));
Finished:
return hr;
} }
@ -125,7 +125,7 @@ APPLICATION_INFO::EnsureApplicationCreated(
}; };
LOG_INFO("Creating handler application"); LOG_INFO("Creating handler application");
FINISHED_IF_FAILED(m_pfnAspNetCoreCreateApplication( FINISHED_IF_FAILED(m_pfnAspNetCoreCreateApplication(
m_pServer, &m_pServer,
pHttpContext->GetApplication(), pHttpContext->GetApplication(),
parameters.data(), parameters.data(),
static_cast<DWORD>(parameters.size()), static_cast<DWORD>(parameters.size()),
@ -157,19 +157,18 @@ APPLICATION_INFO::FindRequestHandlerAssembly(STRU& location)
PCWSTR pstrHandlerDllName; PCWSTR pstrHandlerDllName;
STACK_STRU(struFileName, 256); STACK_STRU(struFileName, 256);
if (g_fAspnetcoreRHLoadedError) if (s_fAspnetcoreRHLoadedError)
{ {
FINISHED(E_APPLICATION_ACTIVATION_EXEC_FAILURE); FINISHED(E_APPLICATION_ACTIVATION_EXEC_FAILURE);
} }
else if (!g_fAspnetcoreRHAssemblyLoaded) else if (!s_fAspnetcoreRHAssemblyLoaded)
{ {
SRWExclusiveLock lock(g_srwLock); SRWExclusiveLock lock(s_requestHandlerLoadLock);
if (s_fAspnetcoreRHLoadedError)
if (g_fAspnetcoreRHLoadedError)
{ {
FINISHED(E_APPLICATION_ACTIVATION_EXEC_FAILURE); FINISHED(E_APPLICATION_ACTIVATION_EXEC_FAILURE);
} }
if (g_fAspnetcoreRHAssemblyLoaded) if (s_fAspnetcoreRHAssemblyLoaded)
{ {
FINISHED(S_OK); FINISHED(S_OK);
} }
@ -184,9 +183,9 @@ APPLICATION_INFO::FindRequestHandlerAssembly(STRU& location)
} }
// Try to see if RH is already loaded // Try to see if RH is already loaded
g_hAspnetCoreRH = GetModuleHandle(pstrHandlerDllName); s_hAspnetCoreRH = GetModuleHandle(pstrHandlerDllName);
if (g_hAspnetCoreRH == NULL) if (s_hAspnetCoreRH == NULL)
{ {
if (m_pConfiguration->QueryHostingModel() == APP_HOSTING_MODEL::HOSTING_IN_PROCESS) if (m_pConfiguration->QueryHostingModel() == APP_HOSTING_MODEL::HOSTING_IN_PROCESS)
{ {
@ -229,22 +228,22 @@ APPLICATION_INFO::FindRequestHandlerAssembly(STRU& location)
WLOG_INFOF(L"Loading request handler: %s", struFileName.QueryStr()); WLOG_INFOF(L"Loading request handler: %s", struFileName.QueryStr());
g_hAspnetCoreRH = LoadLibraryW(struFileName.QueryStr()); s_hAspnetCoreRH = LoadLibraryW(struFileName.QueryStr());
if (g_hAspnetCoreRH == NULL) if (s_hAspnetCoreRH == NULL)
{ {
FINISHED(HRESULT_FROM_WIN32(GetLastError())); FINISHED(HRESULT_FROM_WIN32(GetLastError()));
} }
} }
g_pfnAspNetCoreCreateApplication = (PFN_ASPNETCORE_CREATE_APPLICATION) s_pfnAspNetCoreCreateApplication = (PFN_ASPNETCORE_CREATE_APPLICATION)
GetProcAddress(g_hAspnetCoreRH, "CreateApplication"); GetProcAddress(s_hAspnetCoreRH, "CreateApplication");
if (g_pfnAspNetCoreCreateApplication == NULL) if (s_pfnAspNetCoreCreateApplication == NULL)
{ {
FINISHED(HRESULT_FROM_WIN32(GetLastError())); FINISHED(HRESULT_FROM_WIN32(GetLastError()));
} }
g_fAspnetcoreRHAssemblyLoaded = TRUE; s_fAspnetcoreRHAssemblyLoaded = TRUE;
} }
Finished: Finished:
@ -252,11 +251,11 @@ Finished:
// Question: we remember the load failure so that we will not try again. // Question: we remember the load failure so that we will not try again.
// User needs to check whether the fuction pointer is NULL // User needs to check whether the fuction pointer is NULL
// //
m_pfnAspNetCoreCreateApplication = g_pfnAspNetCoreCreateApplication; m_pfnAspNetCoreCreateApplication = s_pfnAspNetCoreCreateApplication;
if (!g_fAspnetcoreRHLoadedError && FAILED(hr)) if (!s_fAspnetcoreRHLoadedError && FAILED(hr))
{ {
g_fAspnetcoreRHLoadedError = TRUE; s_fAspnetcoreRHLoadedError = TRUE;
} }
return hr; return hr;
} }
@ -457,7 +456,7 @@ APPLICATION_INFO::RecycleApplication()
if (m_pConfiguration->QueryHostingModel() == HOSTING_IN_PROCESS) if (m_pConfiguration->QueryHostingModel() == HOSTING_IN_PROCESS)
{ {
// In process application failed to start for whatever reason, need to recycle the work process // In process application failed to start for whatever reason, need to recycle the work process
m_pServer->RecycleProcess(L"AspNetCore InProcess Recycle Process on Demand"); m_pServer.RecycleProcess(L"AspNetCore InProcess Recycle Process on Demand");
} }
} }
@ -466,7 +465,7 @@ APPLICATION_INFO::RecycleApplication()
if (!g_fRecycleProcessCalled) if (!g_fRecycleProcessCalled)
{ {
g_fRecycleProcessCalled = TRUE; g_fRecycleProcessCalled = TRUE;
g_pHttpServer->RecycleProcess(L"On Demand by AspNetCore Module for recycle application failure"); m_pServer.RecycleProcess(L"On Demand by AspNetCore Module for recycle application failure");
} }
} }
else else

View File

@ -23,14 +23,13 @@ HRESULT
); );
extern BOOL g_fRecycleProcessCalled; extern BOOL g_fRecycleProcessCalled;
extern PFN_ASPNETCORE_CREATE_APPLICATION g_pfnAspNetCoreCreateApplication;
class APPLICATION_INFO class APPLICATION_INFO
{ {
public: public:
APPLICATION_INFO() : APPLICATION_INFO(_In_ IHttpServer &pServer) :
m_pServer(NULL), m_pServer(pServer),
m_cRefs(1), m_cRefs(1),
m_fValid(FALSE), m_fValid(FALSE),
m_fAppCreationAttempted(FALSE), m_fAppCreationAttempted(FALSE),
@ -48,11 +47,17 @@ public:
virtual virtual
~APPLICATION_INFO(); ~APPLICATION_INFO();
static
void
StaticInitialize()
{
InitializeSRWLock(&s_requestHandlerLoadLock);
}
HRESULT HRESULT
Initialize( Initialize(
_In_ IHttpServer *pServer, _In_ IHttpApplication &pApplication
_In_ IHttpApplication *pApplication
); );
VOID VOID
@ -125,11 +130,17 @@ private:
ASPNETCORE_SHIM_CONFIG *m_pConfiguration; ASPNETCORE_SHIM_CONFIG *m_pConfiguration;
IAPPLICATION *m_pApplication; IAPPLICATION *m_pApplication;
SRWLOCK m_srwLock; SRWLOCK m_srwLock;
IHttpServer *m_pServer; IHttpServer &m_pServer;
PFN_ASPNETCORE_CREATE_APPLICATION m_pfnAspNetCoreCreateApplication; PFN_ASPNETCORE_CREATE_APPLICATION m_pfnAspNetCoreCreateApplication;
static const PCWSTR s_pwzAspnetcoreInProcessRequestHandlerName; static const PCWSTR s_pwzAspnetcoreInProcessRequestHandlerName;
static const PCWSTR s_pwzAspnetcoreOutOfProcessRequestHandlerName; static const PCWSTR s_pwzAspnetcoreOutOfProcessRequestHandlerName;
static SRWLOCK s_requestHandlerLoadLock;
static bool s_fAspnetcoreRHAssemblyLoaded;
static bool s_fAspnetcoreRHLoadedError;
static HMODULE s_hAspnetCoreRH;
static PFN_ASPNETCORE_CREATE_APPLICATION s_pfnAspNetCoreCreateApplication;
}; };
class APPLICATION_INFO_HASH : class APPLICATION_INFO_HASH :

View File

@ -8,6 +8,9 @@
#include "resources.h" #include "resources.h"
#include "SRWExclusiveLock.h" #include "SRWExclusiveLock.h"
#include "exceptions.h" #include "exceptions.h"
#include "EventLog.h"
extern BOOL g_fInShutdown;
// The application manager is a singleton across ANCM. // The application manager is a singleton across ANCM.
APPLICATION_MANAGER* APPLICATION_MANAGER::sm_pApplicationManager = NULL; APPLICATION_MANAGER* APPLICATION_MANAGER::sm_pApplicationManager = NULL;
@ -18,7 +21,6 @@ APPLICATION_MANAGER* APPLICATION_MANAGER::sm_pApplicationManager = NULL;
// //
HRESULT HRESULT
APPLICATION_MANAGER::GetOrCreateApplicationInfo( APPLICATION_MANAGER::GetOrCreateApplicationInfo(
_In_ IHttpServer* pServer,
_In_ IHttpContext* pHttpContext, _In_ IHttpContext* pHttpContext,
_Out_ APPLICATION_INFO ** ppApplicationInfo _Out_ APPLICATION_INFO ** ppApplicationInfo
) )
@ -32,56 +34,37 @@ APPLICATION_MANAGER::GetOrCreateApplicationInfo(
STACK_STRU ( strEventMsg, 256 ); STACK_STRU ( strEventMsg, 256 );
DBG_ASSERT(pServer);
DBG_ASSERT(pHttpContext); DBG_ASSERT(pHttpContext);
DBG_ASSERT(ppApplicationInfo); DBG_ASSERT(ppApplicationInfo);
*ppApplicationInfo = NULL; *ppApplicationInfo = NULL;
IHttpApplication &pApplication = *pHttpContext->GetApplication();
if (!m_fDebugInitialize)
{
SRWExclusiveLock lock(m_srwLock);
if (!m_fDebugInitialize)
{
DebugInitializeFromConfig(*pServer, *pHttpContext->GetApplication());
m_fDebugInitialize = TRUE;
}
}
// The configuration path is unique for each application and is used for the // The configuration path is unique for each application and is used for the
// key in the applicationInfoHash. // key in the applicationInfoHash.
pszApplicationId = pHttpContext->GetApplication()->GetApplicationId(); pszApplicationId = pApplication.GetApplicationId();
// When accessing the m_pApplicationInfoHash, we need to acquire the application manager // When accessing the m_pApplicationInfoHash, we need to acquire the application manager
// lock to avoid races on setting state. // lock to avoid races on setting state.
SRWSharedLock lock(m_srwLock);
if (!m_fDebugInitialize)
{ {
SRWSharedLock lock(m_srwLock); DebugInitializeFromConfig(m_pHttpServer, pApplication);
if (g_fInShutdown) m_fDebugInitialize = TRUE;
{
FINISHED(HRESULT_FROM_WIN32(ERROR_SERVER_SHUTDOWN_IN_PROGRESS));
}
m_pApplicationInfoHash->FindKey(pszApplicationId, ppApplicationInfo);
} }
if (g_fInShutdown)
{
FINISHED(HRESULT_FROM_WIN32(ERROR_SERVER_SHUTDOWN_IN_PROGRESS));
}
m_pApplicationInfoHash->FindKey(pszApplicationId, ppApplicationInfo);
if (*ppApplicationInfo == NULL) if (*ppApplicationInfo == NULL)
{ {
pApplicationInfo = new APPLICATION_INFO(); pApplicationInfo = new APPLICATION_INFO(m_pHttpServer);
FINISHED_IF_FAILED(pApplicationInfo->Initialize(pServer, pHttpContext->GetApplication())); FINISHED_IF_FAILED(pApplicationInfo->Initialize(pApplication));
SRWExclusiveLock lock(m_srwLock);
if (g_fInShutdown)
{
// Already in shuting down. No need to create the application
FINISHED(HRESULT_FROM_WIN32(ERROR_SERVER_SHUTDOWN_IN_PROGRESS));
}
m_pApplicationInfoHash->FindKey(pszApplicationId, ppApplicationInfo);
if (*ppApplicationInfo != NULL)
{
// someone else created the application
FINISHED(S_OK);
}
hostingModel = pApplicationInfo->QueryConfig()->QueryHostingModel(); hostingModel = pApplicationInfo->QueryConfig()->QueryHostingModel();
@ -309,7 +292,7 @@ Finished:
if (!g_fRecycleProcessCalled) if (!g_fRecycleProcessCalled)
{ {
g_fRecycleProcessCalled = TRUE; g_fRecycleProcessCalled = TRUE;
g_pHttpServer->RecycleProcess(L"AspNetCore Recycle Process on Demand Due Application Recycle Error"); m_pHttpServer.RecycleProcess(L"AspNetCore Recycle Process on Demand Due Application Recycle Error");
} }
} }

View File

@ -27,15 +27,9 @@ public:
static static
APPLICATION_MANAGER* APPLICATION_MANAGER*
GetInstance( GetInstance()
VOID
)
{ {
if ( sm_pApplicationManager == NULL ) assert(sm_pApplicationManager);
{
sm_pApplicationManager = new APPLICATION_MANAGER();
}
return sm_pApplicationManager; return sm_pApplicationManager;
} }
@ -68,7 +62,6 @@ public:
HRESULT HRESULT
GetOrCreateApplicationInfo( GetOrCreateApplicationInfo(
_In_ IHttpServer* pServer,
_In_ IHttpContext* pHttpContext, _In_ IHttpContext* pHttpContext,
_Out_ APPLICATION_INFO ** ppApplicationInfo _Out_ APPLICATION_INFO ** ppApplicationInfo
); );
@ -92,6 +85,16 @@ public:
} }
} }
static HRESULT StaticInitialize(IHttpServer& pHttpServer)
{
assert(!sm_pApplicationManager);
sm_pApplicationManager = new APPLICATION_MANAGER(pHttpServer);
RETURN_IF_FAILED(sm_pApplicationManager->Initialize());
APPLICATION_INFO::StaticInitialize();
return S_OK;
}
HRESULT Initialize() HRESULT Initialize()
{ {
if(m_pApplicationInfoHash == NULL) if(m_pApplicationInfoHash == NULL)
@ -107,12 +110,11 @@ public:
} }
private: private:
// APPLICATION_MANAGER(IHttpServer& pHttpServer) :
// we currently limit the size of m_pstrErrorInfo to 5000, be careful if you want to change its payload m_pApplicationInfoHash(NULL),
//
APPLICATION_MANAGER() : m_pApplicationInfoHash(NULL),
m_hostingModel(HOSTING_UNKNOWN), m_hostingModel(HOSTING_UNKNOWN),
m_fDebugInitialize(FALSE) m_fDebugInitialize(FALSE),
m_pHttpServer(pHttpServer)
{ {
InitializeSRWLock(&m_srwLock); InitializeSRWLock(&m_srwLock);
} }
@ -120,6 +122,7 @@ private:
APPLICATION_INFO_HASH *m_pApplicationInfoHash; APPLICATION_INFO_HASH *m_pApplicationInfoHash;
static APPLICATION_MANAGER *sm_pApplicationManager; static APPLICATION_MANAGER *sm_pApplicationManager;
SRWLOCK m_srwLock; SRWLOCK m_srwLock;
APP_HOSTING_MODEL m_hostingModel; APP_HOSTING_MODEL m_hostingModel;
BOOL m_fDebugInitialize; BOOL m_fDebugInitialize;
IHttpServer &m_pHttpServer;
}; };

View File

@ -13,20 +13,10 @@
DECLARE_DEBUG_PRINT_OBJECT("aspnetcorev2.dll"); DECLARE_DEBUG_PRINT_OBJECT("aspnetcorev2.dll");
HTTP_MODULE_ID g_pModuleId = NULL;
IHttpServer * g_pHttpServer = NULL;
HANDLE g_hEventLog = NULL; HANDLE g_hEventLog = NULL;
BOOL g_fRecycleProcessCalled = FALSE; BOOL g_fRecycleProcessCalled = FALSE;
PCWSTR g_pszModuleName = NULL;
HINSTANCE g_hModule; HINSTANCE g_hModule;
HMODULE g_hAspnetCoreRH = NULL;
BOOL g_fAspnetcoreRHAssemblyLoaded = FALSE;
BOOL g_fAspnetcoreRHLoadedError = FALSE;
BOOL g_fInShutdown = FALSE; BOOL g_fInShutdown = FALSE;
DWORD g_dwActiveServerProcesses = 0;
SRWLOCK g_srwLock;
PFN_ASPNETCORE_CREATE_APPLICATION g_pfnAspNetCoreCreateApplication;
VOID VOID
StaticCleanup() StaticCleanup()
@ -100,17 +90,10 @@ HRESULT
BOOL fDisableANCM = FALSE; BOOL fDisableANCM = FALSE;
ASPNET_CORE_PROXY_MODULE_FACTORY * pFactory = NULL; ASPNET_CORE_PROXY_MODULE_FACTORY * pFactory = NULL;
ASPNET_CORE_GLOBAL_MODULE * pGlobalModule = NULL; ASPNET_CORE_GLOBAL_MODULE * pGlobalModule = NULL;
APPLICATION_MANAGER * pApplicationManager = NULL;
UNREFERENCED_PARAMETER(dwServerVersion); UNREFERENCED_PARAMETER(dwServerVersion);
InitializeSRWLock(&g_srwLock); if (pHttpServer->IsCommandLineLaunch())
g_pModuleId = pModuleInfo->GetId();
g_pszModuleName = pModuleInfo->GetName();
g_pHttpServer = pHttpServer;
if (g_pHttpServer->IsCommandLineLaunch())
{ {
g_hEventLog = RegisterEventSource(NULL, ASPNETCORE_IISEXPRESS_EVENT_PROVIDER); g_hEventLog = RegisterEventSource(NULL, ASPNETCORE_IISEXPRESS_EVENT_PROVIDER);
} }
@ -175,13 +158,12 @@ HRESULT
0)); 0));
pFactory = NULL; pFactory = NULL;
pApplicationManager = APPLICATION_MANAGER::GetInstance();
FINISHED_IF_FAILED(pApplicationManager->Initialize()); FINISHED_IF_FAILED(APPLICATION_MANAGER::StaticInitialize(*pHttpServer));
pGlobalModule = NULL; pGlobalModule = NULL;
pGlobalModule = new ASPNET_CORE_GLOBAL_MODULE(pApplicationManager); pGlobalModule = new ASPNET_CORE_GLOBAL_MODULE(APPLICATION_MANAGER::GetInstance());
FINISHED_IF_FAILED(pModuleInfo->SetGlobalNotifications( FINISHED_IF_FAILED(pModuleInfo->SetGlobalNotifications(
pGlobalModule, pGlobalModule,

View File

@ -3,6 +3,8 @@
#include "globalmodule.h" #include "globalmodule.h"
extern BOOL g_fInShutdown;
ASPNET_CORE_GLOBAL_MODULE::ASPNET_CORE_GLOBAL_MODULE( ASPNET_CORE_GLOBAL_MODULE::ASPNET_CORE_GLOBAL_MODULE(
APPLICATION_MANAGER* pApplicationManager) APPLICATION_MANAGER* pApplicationManager)
{ {

View File

@ -7,6 +7,9 @@
#include "applicationinfo.h" #include "applicationinfo.h"
#include "acache.h" #include "acache.h"
#include "exceptions.h" #include "exceptions.h"
extern BOOL g_fInShutdown;
__override __override
HRESULT HRESULT
ASPNET_CORE_PROXY_MODULE_FACTORY::GetHttpModule( ASPNET_CORE_PROXY_MODULE_FACTORY::GetHttpModule(
@ -83,7 +86,6 @@ ASPNET_CORE_PROXY_MODULE::OnExecuteRequestHandler(
pApplicationManager = APPLICATION_MANAGER::GetInstance(); pApplicationManager = APPLICATION_MANAGER::GetInstance();
FINISHED_IF_FAILED(pApplicationManager->GetOrCreateApplicationInfo( FINISHED_IF_FAILED(pApplicationManager->GetOrCreateApplicationInfo(
g_pHttpServer,
pHttpContext, pHttpContext,
&m_pApplicationInfo)); &m_pApplicationInfo));

View File

@ -8,8 +8,6 @@
#include "irequesthandler.h" #include "irequesthandler.h"
extern HTTP_MODULE_ID g_pModuleId; extern HTTP_MODULE_ID g_pModuleId;
extern IHttpServer *g_pHttpServer;
extern HMODULE g_hAspnetCoreRH;
class ASPNET_CORE_PROXY_MODULE : public CHttpModule class ASPNET_CORE_PROXY_MODULE : public CHttpModule
{ {

View File

@ -9,8 +9,8 @@
// //
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#define NTDDI_VERSION 0x06010000 #define NTDDI_VERSION NTDDI_WIN7
#define WINVER 0x0601 #define WINVER _WIN32_WINNT_WIN7
#define _WIN32_WINNT 0x0601 #define _WIN32_WINNT 0x0601
#include <Windows.h> #include <Windows.h>
@ -20,16 +20,4 @@
#include "stringu.h" #include "stringu.h"
#include "stringa.h" #include "stringa.h"
extern PVOID g_pModuleId;
extern BOOL g_fAspnetcoreRHAssemblyLoaded;
extern BOOL g_fAspnetcoreRHLoadedError;
extern BOOL g_fInShutdown;
extern BOOL g_fEnableReferenceCountTracing;
extern DWORD g_dwActiveServerProcesses;
extern HINSTANCE g_hModule;
extern HMODULE g_hAspnetCoreRH;
extern SRWLOCK g_srwLock;
extern PCWSTR g_pwzAspnetcoreRequestHandlerName;
extern HANDLE g_hEventLog;
#pragma warning( error : 4091) #pragma warning( error : 4091)

View File

@ -6,4 +6,6 @@
#include "Utility.h" #include "Utility.h"
#include "resources.h" #include "resources.h"
extern HANDLE g_hEventLog;
#define EVENTLOG(log, name, ...) UTILITY::LogEventF(log, ASPNETCORE_EVENT_ ## name ## _LEVEL, ASPNETCORE_EVENT_ ## name, ASPNETCORE_EVENT_ ## name ## _MSG, __VA_ARGS__) #define EVENTLOG(log, name, ...) UTILITY::LogEventF(log, ASPNETCORE_EVENT_ ## name ## _LEVEL, ASPNETCORE_EVENT_ ## name, ASPNETCORE_EVENT_ ## name ## _MSG, __VA_ARGS__)