diff --git a/.gitignore b/.gitignore index 5004d81d9d..58872165a3 100644 --- a/.gitignore +++ b/.gitignore @@ -52,6 +52,8 @@ x64/ src/AspNetCore/aspnetcore_msg.h src/AspNetCore/aspnetcore_msg.rc src/AspNetCore/version.h +src/CommonLib/aspnetcore_msg.h +src/CommonLib/aspnetcore_msg.rc .build *.VC.*db diff --git a/src/AspNetCore/AspNetCore.vcxproj b/src/AspNetCore/AspNetCore.vcxproj index 43acff071d..687e528ecc 100644 --- a/src/AspNetCore/AspNetCore.vcxproj +++ b/src/AspNetCore/AspNetCore.vcxproj @@ -202,7 +202,6 @@ - diff --git a/src/AspNetCore/Src/applicationinfo.cpp b/src/AspNetCore/Src/applicationinfo.cpp index a80794d850..1950860b85 100644 --- a/src/AspNetCore/Src/applicationinfo.cpp +++ b/src/AspNetCore/Src/applicationinfo.cpp @@ -135,9 +135,21 @@ APPLICATION_INFO::UpdateAppOfflineFileHandle() // recycle the application if (m_pApplication != NULL) { + STACK_STRU(strEventMsg, 256); + if (SUCCEEDED(strEventMsg.SafeSnwprintf( + ASPNETCORE_EVENT_RECYCLE_APPOFFLINE_MSG, + m_pApplication->QueryConfig()->QueryApplicationPath()->QueryStr()))) + { + UTILITY::LogEvent(g_hEventLog, + EVENTLOG_INFORMATION_TYPE, + ASPNETCORE_EVENT_RECYCLE_APPOFFLINE, + strEventMsg.QueryStr()); + } + m_pApplication->ShutDown(); m_pApplication->DereferenceApplication(); m_pApplication = NULL; + } } } diff --git a/src/AspNetCore/Src/applicationmanager.cxx b/src/AspNetCore/Src/applicationmanager.cxx index 094f1d5e1c..4b1c9b6a71 100644 --- a/src/AspNetCore/Src/applicationmanager.cxx +++ b/src/AspNetCore/Src/applicationmanager.cxx @@ -19,7 +19,6 @@ APPLICATION_MANAGER::GetApplicationInfo( BOOL fMixedHostingModelError = FALSE; BOOL fDuplicatedInProcessApp = FALSE; PCWSTR pszApplicationId = NULL; - LPCWSTR apsz[1]; STACK_STRU ( strEventMsg, 256 ); *ppApplicationInfo = NULL; @@ -153,42 +152,24 @@ Finished: ASPNETCORE_EVENT_DUPLICATED_INPROCESS_APP_MSG, pszApplicationId))) { - /*apsz[0] = strEventMsg.QueryStr(); - if (FORWARDING_HANDLER::QueryEventLog() != NULL) - { - ReportEventW(FORWARDING_HANDLER::QueryEventLog(), - EVENTLOG_ERROR_TYPE, - 0, - ASPNETCORE_EVENT_DUPLICATED_INPROCESS_APP, - NULL, - 1, - 0, - apsz, - NULL); - }*/ + UTILITY::LogEvent(g_hEventLog, + EVENTLOG_ERROR_TYPE, + ASPNETCORE_EVENT_DUPLICATED_INPROCESS_APP, + strEventMsg.QueryStr()); } } else if (fMixedHostingModelError) { - //if (SUCCEEDED(strEventMsg.SafeSnwprintf( - // ASPNETCORE_EVENT_MIXED_HOSTING_MODEL_ERROR_MSG, - // pszApplicationId, - // pConfig->QueryHostingModelStr()))) - //{ - // apsz[0] = strEventMsg.QueryStr(); - // /*if (FORWARDING_HANDLER::QueryEventLog() != NULL) - // { - // ReportEventW(FORWARDING_HANDLER::QueryEventLog(), - // EVENTLOG_ERROR_TYPE, - // 0, - // ASPNETCORE_EVENT_MIXED_HOSTING_MODEL_ERROR, - // NULL, - // 1, - // 0, - // apsz, - // NULL); - // }*/ - //} + if (SUCCEEDED(strEventMsg.SafeSnwprintf( + ASPNETCORE_EVENT_MIXED_HOSTING_MODEL_ERROR_MSG, + pszApplicationId, + pConfig->QueryHostingModel()))) + { + UTILITY::LogEvent(g_hEventLog, + EVENTLOG_ERROR_TYPE, + ASPNETCORE_EVENT_MIXED_HOSTING_MODEL_ERROR, + strEventMsg.QueryStr()); + } } else { @@ -197,19 +178,10 @@ Finished: pszApplicationId, hr))) { - apsz[0] = strEventMsg.QueryStr(); - /*if (FORWARDING_HANDLER::QueryEventLog() != NULL) - { - ReportEventW(FORWARDING_HANDLER::QueryEventLog(), - EVENTLOG_ERROR_TYPE, - 0, - ASPNETCORE_EVENT_ADD_APPLICATION_ERROR, - NULL, - 1, - 0, - apsz, - NULL); - }*/ + UTILITY::LogEvent(g_hEventLog, + EVENTLOG_ERROR_TYPE, + ASPNETCORE_EVENT_ADD_APPLICATION_ERROR, + strEventMsg.QueryStr()); } } } diff --git a/src/AspNetCore/Src/dllmain.cpp b/src/AspNetCore/Src/dllmain.cpp index 9b6a5b933b..83b63d6ea8 100644 --- a/src/AspNetCore/Src/dllmain.cpp +++ b/src/AspNetCore/Src/dllmain.cpp @@ -6,6 +6,7 @@ HTTP_MODULE_ID g_pModuleId = NULL; IHttpServer * g_pHttpServer = NULL; +HANDLE g_hEventLog = NULL; BOOL g_fRecycleProcessCalled = FALSE; PCWSTR g_pszModuleName = NULL; HINSTANCE g_hModule; @@ -25,6 +26,11 @@ VOID StaticCleanup() { APPLICATION_MANAGER::Cleanup(); + if (g_hEventLog != NULL) + { + DeregisterEventSource(g_hEventLog); + g_hEventLog = NULL; + } } BOOL WINAPI DllMain(HMODULE hModule, @@ -100,6 +106,15 @@ HRESULT g_pszModuleName = pModuleInfo->GetName(); g_pHttpServer = pHttpServer; + if (g_pHttpServer->IsCommandLineLaunch()) + { + g_hEventLog = RegisterEventSource(NULL, ASPNETCORE_IISEXPRESS_EVENT_PROVIDER); + } + else + { + g_hEventLog = RegisterEventSource(NULL, ASPNETCORE_EVENT_PROVIDER); + } + // check whether the feature is disabled due to security reason if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\IIS Extensions\\IIS AspNetCore Module\\Parameters", @@ -127,6 +142,17 @@ HRESULT if (fDisableANCM) { // Logging + STACK_STRU(strEventMsg, 256); + if (SUCCEEDED(strEventMsg.SafeSnwprintf( + ASPNETCORE_EVENT_MODULE_DISABLED_MSG))) + { + UTILITY::LogEvent(g_hEventLog, + EVENTLOG_WARNING_TYPE, + ASPNETCORE_EVENT_MODULE_DISABLED, + strEventMsg.QueryStr()); + } + // this will return 500 error to client + // as we did not register the module goto Finished; } diff --git a/src/AspNetCore/Src/precomp.hxx b/src/AspNetCore/Src/precomp.hxx index 4ef797ec6a..e8f9f0007e 100644 --- a/src/AspNetCore/Src/precomp.hxx +++ b/src/AspNetCore/Src/precomp.hxx @@ -108,14 +108,14 @@ inline bool IsSpace(char ch) #include "..\..\CommonLib\utility.h" #include "..\..\CommonLib\debugutil.h" #include "..\..\CommonLib\requesthandler.h" -//#include "..\aspnetcore_msg.h" +#include "..\..\CommonLib\resources.h" +#include "..\..\CommonLib\aspnetcore_msg.h" //#include "aspnetcore_event.h" #include "appoffline.h" #include "filewatcher.h" #include "applicationinfo.h" #include "applicationmanager.h" #include "globalmodule.h" -#include "resource.h" #include "proxymodule.h" #include "applicationinfo.h" @@ -152,7 +152,7 @@ extern HINSTANCE g_hModule; extern HMODULE g_hAspnetCoreRH; extern SRWLOCK g_srwLock; extern PCWSTR g_pwzAspnetcoreRequestHandlerName; - +extern HANDLE g_hEventLog; extern PFN_ASPNETCORE_CREATE_APPLICATION g_pfnAspNetCoreCreateApplication; extern PFN_ASPNETCORE_CREATE_REQUEST_HANDLER g_pfnAspNetCoreCreateRequestHandler; #pragma warning( error : 4091) diff --git a/src/CommonLib/CommonLib.vcxproj b/src/CommonLib/CommonLib.vcxproj index 1d5907222e..3a72db72e7 100644 --- a/src/CommonLib/CommonLib.vcxproj +++ b/src/CommonLib/CommonLib.vcxproj @@ -177,6 +177,7 @@ + @@ -199,6 +200,23 @@ {4787a64f-9a3e-4867-a55a-70cb4b2b2ffe} + + + Document + mc %(FullPath) + Compiling Event Messages ... + %(Filename).rc;%(Filename).h;MSG0409.bin + mc %(FullPath) + Compiling Event Messages ... + %(Filename).rc;%(Filename).h;MSG0409.bin + mc %(FullPath) + Compiling Event Messages ... + %(Filename).rc;%(Filename).h;MSG0409.bin + mc %(FullPath) + Compiling Event Messages ... + %(Filename).rc;%(Filename).h;MSG0409.bin + + diff --git a/src/RequestHandler/aspnetcore_msg.mc b/src/CommonLib/aspnetcore_msg.mc similarity index 90% rename from src/RequestHandler/aspnetcore_msg.mc rename to src/CommonLib/aspnetcore_msg.mc index ae8eec4e88..bcd125850f 100644 --- a/src/RequestHandler/aspnetcore_msg.mc +++ b/src/CommonLib/aspnetcore_msg.mc @@ -98,6 +98,18 @@ Language=English %1 . +Messageid=1012 +SymbolicName=ASPNETCORE_EVENT_RECYCLE_APPOFFLINE +Language=English +%1 +. + +Messageid=1013 +SymbolicName=ASPNETCORE_EVENT_MODULE_DISABLED +Language=English +%1 +. + ; ;#endif // _ASPNETCORE_MODULE_MSG_H_ -; \ No newline at end of file +; diff --git a/src/RequestHandler/resource.h b/src/CommonLib/resources.h similarity index 80% rename from src/RequestHandler/resource.h rename to src/CommonLib/resources.h index a8f93c62fb..938922d149 100644 --- a/src/RequestHandler/resource.h +++ b/src/CommonLib/resources.h @@ -6,12 +6,15 @@ #define IDS_INVALID_PROPERTY 1000 #define IDS_SERVER_ERROR 1001 +#define ASPNETCORE_EVENT_PROVIDER L"IIS AspNetCore Module" +#define ASPNETCORE_IISEXPRESS_EVENT_PROVIDER L"IIS Express AspNetCore Module" + #define ASPNETCORE_EVENT_MSG_BUFFER_SIZE 256 #define ASPNETCORE_EVENT_PROCESS_START_SUCCESS_MSG L"Application '%s' started process '%d' successfully and is listening on port '%d'." #define ASPNETCORE_EVENT_RAPID_FAIL_COUNT_EXCEEDED_MSG L"Maximum rapid fail count per minute of '%d' exceeded." #define ASPNETCORE_EVENT_PROCESS_START_INTERNAL_ERROR_MSG L"Application '%s' failed to parse processPath and arguments due to internal error, ErrorCode = '0x%x'." -#define ASPNETCORE_EVENT_PROCESS_START_POSTCREATE_ERROR_MSG L"Application '%s' with physical root '%s' created process with commandline '%s'but failed to get its status, ErrorCode = '0x%x'." -#define ASPNETCORE_EVENT_PROCESS_START_ERROR_MSG L"Application '%s' with physical root '%s' failed to start process with commandline '%s', ErrorCode = '0x%x' processStatus code '%x'." +#define ASPNETCORE_EVENT_PROCESS_START_POSTCREATE_ERROR_MSG L"Application '%s' with physical root '%s' created process with commandline '%s'but failed to get its status, ErrorCode = '0x%x', retryCounter '%d'." +#define ASPNETCORE_EVENT_PROCESS_START_ERROR_MSG L"Application '%s' with physical root '%s' failed to start process with commandline '%s', ErrorCode = '0x%x', retryCounter '%d'." #define ASPNETCORE_EVENT_PROCESS_START_WRONGPORT_ERROR_MSG L"Application '%s' with physical root '%s' created process with commandline '%s' but failed to listen on the given port '%d'" #define ASPNETCORE_EVENT_PROCESS_START_NOTREADY_ERROR_MSG L"Application '%s' with physical root '%s' created process with commandline '%s' but either crashed or did not reponse or did not listen on the given port '%d', ErrorCode = '0x%x'" #define ASPNETCORE_EVENT_INVALID_STDOUT_LOG_FILE_MSG L"Warning: Could not create stdoutLogFile %s, ErrorCode = %d." @@ -19,6 +22,8 @@ #define ASPNETCORE_EVENT_SENT_SHUTDOWN_HTTP_REQUEST_MSG L"Sent shutdown HTTP message to process '%d' and received http status '%d'." #define ASPNETCORE_EVENT_LOAD_CLR_FALIURE_MSG L"Application '%s' with physical root '%s' failed to load clr and managed application, ErrorCode = '0x%x." #define ASPNETCORE_EVENT_DUPLICATED_INPROCESS_APP_MSG L"Only one inprocess application is allowed per IIS application pool. Please assign the application '%s' to a different IIS application pool." -#define ASPNETCORE_EVENT_MIXED_HOSTING_MODEL_ERROR_MSG L"Mixed hosting model is not supported. Application '%s' configured with different hostingModel value '%s' other than the one of running application(s)." +#define ASPNETCORE_EVENT_MIXED_HOSTING_MODEL_ERROR_MSG L"Mixed hosting model is not supported. Application '%s' configured with different hostingModel value '%d' other than the one of running application(s)." #define ASPNETCORE_EVENT_ADD_APPLICATION_ERROR_MSG L"Failed to start application '%s', ErrorCode '0x%x'." -#define ASPNETCORE_EVENT_INPROCESS_THREAD_EXIT_MSG L"Application '%s' with physical root '%s' hit unexpected managed background thread exit, ErrorCode = '0x%x." +#define ASPNETCORE_EVENT_INPROCESS_THREAD_EXIT_MSG L"Application '%s' with physical root '%s' hit unexpected managed background thread eixt, ErrorCode = '0x%x." +#define ASPNETCORE_EVENT_RECYCLE_APPOFFLINE_MSG L"Application '%s' is recycled due to app_offline file was detected." +#define ASPNETCORE_EVENT_MODULE_DISABLED_MSG L"AspNetCore Module is disabled" diff --git a/src/CommonLib/utility.cxx b/src/CommonLib/utility.cxx index a642ec1c9f..b4dd25a9e5 100644 --- a/src/CommonLib/utility.cxx +++ b/src/CommonLib/utility.cxx @@ -599,3 +599,31 @@ UTILITY::CheckIfFileExists( return fFileExists; } + +VOID +UTILITY::LogEvent( + _In_ HANDLE hEventLog, + _In_ WORD dwEventInfoType, + _In_ DWORD dwEventId, + _In_ LPCWSTR pstrMsg +) +{ + if (hEventLog != NULL) + { + ReportEventW(hEventLog, + dwEventInfoType, + 0, // wCategory + dwEventId, + NULL, // lpUserSid + 1, // wNumStrings + 0, // dwDataSize, + &pstrMsg, + NULL // lpRawData + ); + } + + if (dwEventInfoType == EVENTLOG_ERROR_TYPE) + { + fwprintf(stderr, L"ERROR: %s\n", pstrMsg); + } +} \ No newline at end of file diff --git a/src/CommonLib/utility.h b/src/CommonLib/utility.h index 5f4ae39026..49549c0f33 100644 --- a/src/CommonLib/utility.h +++ b/src/CommonLib/utility.h @@ -111,8 +111,17 @@ public: PCWSTR pszFilePath ); + static + VOID + LogEvent( + _In_ HANDLE hEventLog, + _In_ WORD dwEventInfoType, + _In_ DWORD dwEventId, + _In_ LPCWSTR pstrMsg + ); + private: UTILITY() {} ~UTILITY() {} -}; \ No newline at end of file +}; diff --git a/src/RequestHandler/RequestHandler.rc b/src/RequestHandler/RequestHandler.rc deleted file mode 100644 index 6d28532915..0000000000 Binary files a/src/RequestHandler/RequestHandler.rc and /dev/null differ diff --git a/src/RequestHandler/RequestHandler.vcxproj b/src/RequestHandler/RequestHandler.vcxproj index 5d003d4120..a214f87bce 100644 --- a/src/RequestHandler/RequestHandler.vcxproj +++ b/src/RequestHandler/RequestHandler.vcxproj @@ -201,7 +201,7 @@ - + @@ -211,7 +211,6 @@ - @@ -232,23 +231,6 @@ - - - Document - mc %(FullPath) - Compiling Event Messages ... - %(Filename).rc;%(Filename).h;MSG0409.bin - mc %(FullPath) - Compiling Event Messages ... - %(Filename).rc;%(Filename).h;MSG0409.bin - mc %(FullPath) - Compiling Event Messages ... - %(Filename).rc;%(Filename).h;MSG0409.bin - mc %(FullPath) - Compiling Event Messages ... - %(Filename).rc;%(Filename).h;MSG0409.bin - - {55494e58-e061-4c4c-a0a8-837008e72f85} @@ -257,9 +239,6 @@ {4787a64f-9a3e-4867-a55a-70cb4b2b2ffe} - - - diff --git a/src/RequestHandler/RequestHandler.vcxproj.filters b/src/RequestHandler/RequestHandler.vcxproj.filters index 1f80fca696..351a29e5be 100644 --- a/src/RequestHandler/RequestHandler.vcxproj.filters +++ b/src/RequestHandler/RequestHandler.vcxproj.filters @@ -41,7 +41,6 @@ - InProcess @@ -80,7 +79,6 @@ - @@ -102,7 +100,4 @@ {5568209f-269e-4d0a-bbb7-ba14f874ccb7} - - - \ No newline at end of file diff --git a/src/RequestHandler/Resource.rc b/src/RequestHandler/Resource.rc deleted file mode 100644 index caf820af68..0000000000 --- a/src/RequestHandler/Resource.rc +++ /dev/null @@ -1,98 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#include "resource.h" -#include "version.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "winres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (United States) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -LANGUAGE 9, 1 - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""winres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - -#endif // English (United States) resources -///////////////////////////////////////////////////////////////////////////// - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO -FILEVERSION FileVersion -PRODUCTVERSION ProductVersion -FILEFLAGSMASK 0x3fL -#ifdef _DEBUG -FILEFLAGS 0x1L -#else -FILEFLAGS 0x0L -#endif -FILEOS 0x40004L -FILETYPE 0x2L -FILESUBTYPE 0x0L -BEGIN -BLOCK "StringFileInfo" -BEGIN -BLOCK "040904b0" -BEGIN -VALUE "CompanyName", "Microsoft" -VALUE "FileDescription", "IIS ASP.NET Core Module Request Handler" -VALUE "FileVersion", FileVersionStr -VALUE "InternalName", "aspnetcorerh.dll" -VALUE "LegalCopyright", "Copyright (C) 2016" -VALUE "OriginalFilename", "aspnetcorerh.dll" -VALUE "ProductName", "ASP.NET Core Module" -VALUE "ProductVersion", ProductVersionStr -END -END -BLOCK "VarFileInfo" -BEGIN -VALUE "Translation", 0x409, 1200 -END -END - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/src/RequestHandler/aspnetcore_msg.h b/src/RequestHandler/aspnetcore_msg.h deleted file mode 100644 index f99bc99084..0000000000 --- a/src/RequestHandler/aspnetcore_msg.h +++ /dev/null @@ -1,165 +0,0 @@ -/*++ - - Copyright (c) .NET Foundation. All rights reserved. - Licensed under the MIT License. See License.txt in the project root for license information. - -Module Name: - - aspnetcore_msg.mc - -Abstract: - - Asp.Net Core Module localizable messages. - ---*/ - - -#ifndef _ASPNETCORE_MSG_H_ -#define _ASPNETCORE_MSG_H_ - -// -// Values are 32 bit values laid out as follows: -// -// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 -// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 -// +---+-+-+-----------------------+-------------------------------+ -// |Sev|C|R| Facility | Code | -// +---+-+-+-----------------------+-------------------------------+ -// -// where -// -// Sev - is the severity code -// -// 00 - Success -// 01 - Informational -// 10 - Warning -// 11 - Error -// -// C - is the Customer code flag -// -// R - is a reserved bit -// -// Facility - is the facility code -// -// Code - is the facility's status code -// -// -// Define the facility codes -// - - -// -// Define the severity codes -// - - -// -// MessageId: ASPNETCORE_EVENT_PROCESS_START_ERROR -// -// MessageText: -// -// %1 -// -#define ASPNETCORE_EVENT_PROCESS_START_ERROR ((DWORD)0x000003E8L) - -// -// MessageId: ASPNETCORE_EVENT_PROCESS_START_SUCCESS -// -// MessageText: -// -// %1 -// -#define ASPNETCORE_EVENT_PROCESS_START_SUCCESS ((DWORD)0x000003E9L) - -// -// MessageId: ASPNETCORE_EVENT_PROCESS_CRASH -// -// MessageText: -// -// %1 -// -#define ASPNETCORE_EVENT_PROCESS_CRASH ((DWORD)0x000003EAL) - -// -// MessageId: ASPNETCORE_EVENT_RAPID_FAIL_COUNT_EXCEEDED -// -// MessageText: -// -// %1 -// -#define ASPNETCORE_EVENT_RAPID_FAIL_COUNT_EXCEEDED ((DWORD)0x000003EBL) - -// -// MessageId: ASPNETCORE_EVENT_CONFIG_ERROR -// -// MessageText: -// -// %1 -// -#define ASPNETCORE_EVENT_CONFIG_ERROR ((DWORD)0x000003ECL) - -// -// MessageId: ASPNETCORE_EVENT_GRACEFUL_SHUTDOWN_FAILURE -// -// MessageText: -// -// %1 -// -#define ASPNETCORE_EVENT_GRACEFUL_SHUTDOWN_FAILURE ((DWORD)0x000003EDL) - -// -// MessageId: ASPNETCORE_EVENT_SENT_SHUTDOWN_HTTP_REQUEST -// -// MessageText: -// -// %1 -// -#define ASPNETCORE_EVENT_SENT_SHUTDOWN_HTTP_REQUEST ((DWORD)0x000003EEL) - -// -// MessageId: ASPNETCORE_EVENT_LOAD_CLR_FALIURE -// -// MessageText: -// -// %1 -// -#define ASPNETCORE_EVENT_LOAD_CLR_FALIURE ((DWORD)0x000003EFL) - -// -// MessageId: ASPNETCORE_EVENT_DUPLICATED_INPROCESS_APP -// -// MessageText: -// -// %1 -// -#define ASPNETCORE_EVENT_DUPLICATED_INPROCESS_APP ((DWORD)0x000003F0L) - -// -// MessageId: ASPNETCORE_EVENT_MIXED_HOSTING_MODEL_ERROR -// -// MessageText: -// -// %1 -// -#define ASPNETCORE_EVENT_MIXED_HOSTING_MODEL_ERROR ((DWORD)0x000003F1L) - -// -// MessageId: ASPNETCORE_EVENT_ADD_APPLICATION_ERROR -// -// MessageText: -// -// %1 -// -#define ASPNETCORE_EVENT_ADD_APPLICATION_ERROR ((DWORD)0x000003F2L) - -// -// MessageId: ASPNETCORE_EVENT_INPROCESS_THREAD_EXIT -// -// MessageText: -// -// %1 -// -#define ASPNETCORE_EVENT_INPROCESS_THREAD_EXIT ((DWORD)0x000003F3L) - - -#endif // _ASPNETCORE_MODULE_MSG_H_ diff --git a/src/RequestHandler/aspnetcore_msg.rc b/src/RequestHandler/aspnetcore_msg.rc deleted file mode 100644 index 0abcb0fa2c..0000000000 --- a/src/RequestHandler/aspnetcore_msg.rc +++ /dev/null @@ -1,2 +0,0 @@ -LANGUAGE 0x9,0x1 -1 11 "MSG00001.bin" diff --git a/src/RequestHandler/dllmain.cxx b/src/RequestHandler/dllmain.cxx index f4b476a856..cd61126507 100644 --- a/src/RequestHandler/dllmain.cxx +++ b/src/RequestHandler/dllmain.cxx @@ -6,6 +6,7 @@ BOOL g_fNsiApiNotSupported = FALSE; BOOL g_fWebSocketSupported = FALSE; BOOL g_fEnableReferenceCountTracing = FALSE; +BOOL g_fGlobalInitialize = FALSE; BOOL g_fOutOfProcessInitialize = FALSE; BOOL g_fOutOfProcessInitializeError = FALSE; BOOL g_fWinHttpNonBlockingCallbackAvailable = FALSE; @@ -17,87 +18,117 @@ SRWLOCK g_srwLockRH; HINTERNET g_hWinhttpSession = NULL; IHttpServer * g_pHttpServer = NULL; HINSTANCE g_hWinHttpModule; +HANDLE g_hEventLog = NULL; VOID InitializeGlobalConfiguration( - VOID + IHttpServer * pServer ) { HKEY hKey; - - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, - L"SOFTWARE\\Microsoft\\IIS Extensions\\IIS AspNetCore Module\\Parameters", - 0, - KEY_READ, - &hKey) == NO_ERROR) - { - DWORD dwType; - DWORD dwData; - DWORD cbData; - - cbData = sizeof(dwData); - if ((RegQueryValueEx(hKey, - L"OptionalWinHttpFlags", - NULL, - &dwType, - (LPBYTE)&dwData, - &cbData) == NO_ERROR) && - (dwType == REG_DWORD)) - { - g_OptionalWinHttpFlags = dwData; - } - - cbData = sizeof(dwData); - if ((RegQueryValueEx(hKey, - L"EnableReferenceCountTracing", - NULL, - &dwType, - (LPBYTE)&dwData, - &cbData) == NO_ERROR) && - (dwType == REG_DWORD) && (dwData == 1 || dwData == 0)) - { - g_fEnableReferenceCountTracing = !!dwData; - } - - cbData = sizeof(dwData); - if ((RegQueryValueEx(hKey, - L"DebugFlags", - NULL, - &dwType, - (LPBYTE)&dwData, - &cbData) == NO_ERROR) && - (dwType == REG_DWORD)) - { - g_dwAspNetCoreDebugFlags = dwData; - } - - RegCloseKey(hKey); - } - + BOOL fLocked = FALSE; DWORD dwSize = 0; - DWORD dwResult = GetExtendedTcpTable(NULL, - &dwSize, - FALSE, - AF_INET, - TCP_TABLE_OWNER_PID_LISTENER, - 0); - if (dwResult != NO_ERROR && dwResult != ERROR_INSUFFICIENT_BUFFER) + DWORD dwResult = 0; + + if (!g_fGlobalInitialize) { - g_fNsiApiNotSupported = TRUE; + AcquireSRWLockExclusive(&g_srwLockRH); + fLocked = TRUE; + + if (g_fGlobalInitialize) + { + // Done by another thread + goto Finished; + } + + g_pHttpServer = pServer; + if (pServer->IsCommandLineLaunch()) + { + g_hEventLog = RegisterEventSource(NULL, ASPNETCORE_IISEXPRESS_EVENT_PROVIDER); + } + else + { + g_hEventLog = RegisterEventSource(NULL, ASPNETCORE_EVENT_PROVIDER); + } + + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, + L"SOFTWARE\\Microsoft\\IIS Extensions\\IIS AspNetCore Module\\Parameters", + 0, + KEY_READ, + &hKey) == NO_ERROR) + { + DWORD dwType; + DWORD dwData; + DWORD cbData; + + cbData = sizeof(dwData); + if ((RegQueryValueEx(hKey, + L"OptionalWinHttpFlags", + NULL, + &dwType, + (LPBYTE)&dwData, + &cbData) == NO_ERROR) && + (dwType == REG_DWORD)) + { + g_OptionalWinHttpFlags = dwData; + } + + cbData = sizeof(dwData); + if ((RegQueryValueEx(hKey, + L"EnableReferenceCountTracing", + NULL, + &dwType, + (LPBYTE)&dwData, + &cbData) == NO_ERROR) && + (dwType == REG_DWORD) && (dwData == 1 || dwData == 0)) + { + g_fEnableReferenceCountTracing = !!dwData; + } + + cbData = sizeof(dwData); + if ((RegQueryValueEx(hKey, + L"DebugFlags", + NULL, + &dwType, + (LPBYTE)&dwData, + &cbData) == NO_ERROR) && + (dwType == REG_DWORD)) + { + g_dwAspNetCoreDebugFlags = dwData; + } + RegCloseKey(hKey); + } + + dwResult = GetExtendedTcpTable(NULL, + &dwSize, + FALSE, + AF_INET, + TCP_TABLE_OWNER_PID_LISTENER, + 0); + if (dwResult != NO_ERROR && dwResult != ERROR_INSUFFICIENT_BUFFER) + { + g_fNsiApiNotSupported = TRUE; + } + + // WebSocket is supported on Win8 and above only + // todo: test on win7 + g_fWebSocketSupported = IsWindows8OrGreater(); + + g_fGlobalInitialize = TRUE; + } +Finished: + if (fLocked) + { + ReleaseSRWLockExclusive(&g_srwLockRH); } - - // WebSocket is supported on Win8 and above only - // todo: test on win7 - g_fWebSocketSupported = IsWindows8OrGreater(); - } // // Global initialization routine for OutOfProcess // HRESULT -EnsureOutOfProcessInitializtion( IHttpServer* pServer) +EnsureOutOfProcessInitializtion() { DBG_ASSERT(pServer); @@ -105,13 +136,12 @@ EnsureOutOfProcessInitializtion( IHttpServer* pServer) HRESULT hr = S_OK; BOOL fLocked = FALSE; - g_pHttpServer = pServer; - if (g_fOutOfProcessInitializeError) { hr = E_NOT_VALID_STATE; goto Finished; } + if (!g_fOutOfProcessInitialize) { AcquireSRWLockExclusive(&g_srwLockRH); @@ -128,9 +158,6 @@ EnsureOutOfProcessInitializtion( IHttpServer* pServer) goto Finished; } - // Initialze some global variables here - InitializeGlobalConfiguration(); - g_hWinHttpModule = GetModuleHandle(TEXT("winhttp.dll")); hr = WINHTTP_HELPER::StaticInitialize(); @@ -197,7 +224,6 @@ EnsureOutOfProcessInitializtion( IHttpServer* pServer) goto Finished; } - hr = FORWARDING_HANDLER::StaticInitialize(g_fEnableReferenceCountTracing); if (FAILED(hr)) { @@ -235,8 +261,6 @@ BOOL APIENTRY DllMain(HMODULE hModule, case DLL_PROCESS_ATTACH: DisableThreadLibraryCalls(hModule); InitializeSRWLock(&g_srwLockRH); - // Initialze some global variables here - InitializeGlobalConfiguration(); break; default: break; @@ -255,7 +279,8 @@ CreateApplication( HRESULT hr = S_OK; APPLICATION *pApplication = NULL; - //REQUEST_HANDLER::StaticInitialize(pServer); + // Initialze some global variables here + InitializeGlobalConfiguration(pServer); if (pConfig->QueryHostingModel() == APP_HOSTING_MODEL::HOSTING_IN_PROCESS) { @@ -268,7 +293,7 @@ CreateApplication( } else if (pConfig->QueryHostingModel() == APP_HOSTING_MODEL::HOSTING_OUT_PROCESS) { - hr = EnsureOutOfProcessInitializtion(pServer); + hr = EnsureOutOfProcessInitializtion(); if (FAILED(hr)) { goto Finished; diff --git a/src/RequestHandler/inprocess/inprocessapplication.cpp b/src/RequestHandler/inprocess/inprocessapplication.cpp index 7259131ef9..690c8d48d4 100644 --- a/src/RequestHandler/inprocess/inprocessapplication.cpp +++ b/src/RequestHandler/inprocess/inprocessapplication.cpp @@ -343,33 +343,17 @@ Finished: } if (FAILED(hr) && m_pConfig->QueryStdoutLogEnabled()) { - //todo log an warning - //STRU strEventMsg; - //LPCWSTR apsz[1]; - - //if (SUCCEEDED(strEventMsg.SafeSnwprintf( - // ASPNETCORE_EVENT_INVALID_STDOUT_LOG_FILE_MSG, - // m_struLogFilePath.QueryStr(), - // HRESULT_FROM_GETLASTERROR()))) - //{ - // apsz[0] = strEventMsg.QueryStr(); - // // - // // not checking return code because if ReportEvent - // // fails, we cannot do anything. - // // - // if (FORWARDING_HANDLER::QueryEventLog() != NULL) - // { - // ReportEventW(FORWARDING_HANDLER::QueryEventLog(), - // EVENTLOG_WARNING_TYPE, - // 0, - // ASPNETCORE_EVENT_CONFIG_ERROR, - // NULL, - // 1, - // 0, - // apsz, - // NULL); - // } - //} + STRU strEventMsg; + if (SUCCEEDED(strEventMsg.SafeSnwprintf( + ASPNETCORE_EVENT_INVALID_STDOUT_LOG_FILE_MSG, + m_struLogFilePath.QueryStr(), + hr))) + { + UTILITY::LogEvent(g_hEventLog, + EVENTLOG_WARNING_TYPE, + ASPNETCORE_EVENT_CONFIG_ERROR, + strEventMsg.QueryStr()); + } } } @@ -384,8 +368,6 @@ IN_PROCESS_APPLICATION::LoadManagedApplication DWORD dwTimeout; DWORD dwResult; BOOL fLocked = FALSE; - //PCWSTR apsz[1]; - //STACK_STRU(strEventMsg, 256); if (m_fManagedAppLoaded || m_fLoadManagedAppError) { @@ -481,36 +463,22 @@ Finished: if (FAILED(hr)) { + STACK_STRU(strEventMsg, 256); // Question: in case of application loading failure, should we allow retry on // following request or block the activation at all m_fLoadManagedAppError = TRUE; // m_hThread != NULL ? - // TODO - //if (SUCCEEDED(strEventMsg.SafeSnwprintf( - // ASPNETCORE_EVENT_LOAD_CLR_FALIURE_MSG, - // m_pConfiguration->QueryApplicationPath()->QueryStr(), - // m_pConfiguration->QueryApplicationPhysicalPath()->QueryStr(), - // hr))) - //{ - // apsz[0] = strEventMsg.QueryStr(); - - // // - // // not checking return code because if ReportEvent - // // fails, we cannot do anything. - // // - // if (FORWARDING_HANDLER::QueryEventLog() != NULL) - // { - // ReportEventW(FORWARDING_HANDLER::QueryEventLog(), - // EVENTLOG_ERROR_TYPE, - // 0, - // ASPNETCORE_EVENT_LOAD_CLR_FALIURE, - // NULL, - // 1, - // 0, - // apsz, - // NULL); - // } - //} + if (SUCCEEDED(strEventMsg.SafeSnwprintf( + ASPNETCORE_EVENT_LOAD_CLR_FALIURE_MSG, + m_pConfig->QueryApplicationPath()->QueryStr(), + m_pConfig->QueryApplicationPhysicalPath()->QueryStr(), + hr))) + { + UTILITY::LogEvent(g_hEventLog, + EVENTLOG_ERROR_TYPE, + ASPNETCORE_EVENT_LOAD_CLR_FALIURE, + strEventMsg.QueryStr()); + } } if (fLocked) @@ -583,37 +551,22 @@ Finished: // if (!m_fRecycleProcessCalled) { - //STRU strEventMsg; - //LPCWSTR apsz[1]; - //if (SUCCEEDED(strEventMsg.SafeSnwprintf( - // ASPNETCORE_EVENT_INPROCESS_THREAD_EXIT_MSG, - // m_pConfig->QueryApplicationPath()->QueryStr(), - // m_pConfig->QueryApplicationPhysicalPath()->QueryStr(), - // m_ProcessExitCode - //))) - //{ - // apsz[0] = strEventMsg.QueryStr(); - - // // - // // not checking return code because if ReportEvent - // // fails, we cannot do anything. - // // - // if (FORWARDING_HANDLER::QueryEventLog() != NULL) - // { - // ReportEventW(FORWARDING_HANDLER::QueryEventLog(), - // EVENTLOG_ERROR_TYPE, - // 0, - // ASPNETCORE_EVENT_INPROCESS_THREAD_EXIT, - // NULL, - // 1, - // 0, - // apsz, - // NULL); - // } - // // error. the thread exits after application started - // // Question: should we shutdown current worker process or keep the application in failure state? - // // for now, we reccylce to keep the same behavior as that of out-of-process - //} + STRU strEventMsg; + if (SUCCEEDED(strEventMsg.SafeSnwprintf( + ASPNETCORE_EVENT_INPROCESS_THREAD_EXIT_MSG, + m_pConfig->QueryApplicationPath()->QueryStr(), + m_pConfig->QueryApplicationPhysicalPath()->QueryStr(), + m_ProcessExitCode))) + { + UTILITY::LogEvent(g_hEventLog, + EVENTLOG_ERROR_TYPE, + ASPNETCORE_EVENT_INPROCESS_THREAD_EXIT, + strEventMsg.QueryStr()); + } + + // error. the thread exits after application started + // Question: should we shutdown current worker process or keep the application in failure state? + // for now, we reccylce to keep the same behavior as that of out-of-process if (m_fManagedAppLoaded) { Recycle(); diff --git a/src/RequestHandler/outofprocess/processmanager.cxx b/src/RequestHandler/outofprocess/processmanager.cxx index 98ba30441f..9c9ceb449d 100644 --- a/src/RequestHandler/outofprocess/processmanager.cxx +++ b/src/RequestHandler/outofprocess/processmanager.cxx @@ -110,7 +110,6 @@ PROCESS_MANAGER::GetProcess( HRESULT hr = S_OK; BOOL fSharedLock = FALSE; BOOL fExclusiveLock = FALSE; - //PCWSTR apsz[1]; STACK_STRU(strEventMsg, 256); DWORD dwProcessIndex = 0; SERVER_PROCESS *pSelectedServerProcess = NULL; @@ -192,30 +191,15 @@ PROCESS_MANAGER::GetProcess( // // rapid fails per minute exceeded, do not create new process. // - - //if( SUCCEEDED( strEventMsg.SafeSnwprintf( - // ASPNETCORE_EVENT_RAPID_FAIL_COUNT_EXCEEDED_MSG, - // pConfig->QueryRapidFailsPerMinute() ) ) ) - //{ - // apsz[0] = strEventMsg.QueryStr(); - - // // - // // not checking return code because if ReportEvent - // // fails, we cannot do anything. - // // - // if (FORWARDING_HANDLER::QueryEventLog() != NULL) - // { - // ReportEventW(FORWARDING_HANDLER::QueryEventLog(), - // EVENTLOG_INFORMATION_TYPE, - // 0, - // ASPNETCORE_EVENT_RAPID_FAIL_COUNT_EXCEEDED, - // NULL, - // 1, - // 0, - // apsz, - // NULL); - // } - //} + if (SUCCEEDED(strEventMsg.SafeSnwprintf( + ASPNETCORE_EVENT_RAPID_FAIL_COUNT_EXCEEDED_MSG, + pConfig->QueryRapidFailsPerMinute()))) + { + UTILITY::LogEvent(g_hEventLog, + EVENTLOG_INFORMATION_TYPE, + ASPNETCORE_EVENT_RAPID_FAIL_COUNT_EXCEEDED, + strEventMsg.QueryStr()); + } hr = HRESULT_FROM_WIN32(ERROR_SERVER_DISABLED); goto Finished; @@ -293,4 +277,4 @@ Finished: } return hr; -} \ No newline at end of file +} diff --git a/src/RequestHandler/outofprocess/serverprocess.cxx b/src/RequestHandler/outofprocess/serverprocess.cxx index 4c94331de9..97243d8bc2 100644 --- a/src/RequestHandler/outofprocess/serverprocess.cxx +++ b/src/RequestHandler/outofprocess/serverprocess.cxx @@ -857,19 +857,12 @@ SERVER_PROCESS::StartProcess( HRESULT hr = S_OK; PROCESS_INFORMATION processInformation = {0}; STARTUPINFOW startupInfo = {0}; -// BOOL fDonePrepareCommandLine = FALSE; DWORD dwRetryCount = 2; // should we allow customer to config it DWORD dwCreationFlags = 0; - -// STACK_STRU( strEventMsg, 256); -// STRU strFullProcessPath; -// STRU struRelativePath; -// STRU struApplicationId; -// -// LPCWSTR apsz[1]; + STACK_STRU( strEventMsg, 256); MULTISZ mszNewEnvironment; ENVIRONMENT_VAR_HASH *pHashTable = NULL; -// + GetStartupInfoW(&startupInfo); // @@ -945,13 +938,13 @@ SERVER_PROCESS::StartProcess( { hr = HRESULT_FROM_WIN32(GetLastError()); // don't the check return code as we already in error report - /*strEventMsg.SafeSnwprintf( + strEventMsg.SafeSnwprintf( ASPNETCORE_EVENT_PROCESS_START_ERROR_MSG, m_struAppFullPath.QueryStr(), - m_pszRootApplicationPath.QueryStr(), - struCommandLine.QueryStr(), + m_struPhysicalPath.QueryStr(), + m_struCommandLine.QueryStr(), hr, - 0);*/ + dwRetryCount); goto Finished; } @@ -987,42 +980,17 @@ SERVER_PROCESS::StartProcess( // Backend process starts successfully. Set retry counter to 0 dwRetryCount = 0; - // - // if (SUCCEEDED(strEventMsg.SafeSnwprintf( - // ASPNETCORE_EVENT_PROCESS_START_SUCCESS_MSG, - // m_struAppFullPath.QueryStr(), - // m_dwProcessId, - // m_dwPort))) - // { - // apsz[0] = strEventMsg.QueryStr(); - // - // // - // // not checking return code because if ReportEvent - // // fails, we cannot do anything. - // // - // if (FORWARDING_HANDLER::QueryEventLog() != NULL) - // { - // ReportEventW(FORWARDING_HANDLER::QueryEventLog(), - // EVENTLOG_INFORMATION_TYPE, - // 0, - // ASPNETCORE_EVENT_PROCESS_START_SUCCESS, - // NULL, - // 1, - // 0, - // apsz, - // NULL); - // } - // - // // FREB log - //if (ANCMEvents::ANCM_START_APPLICATION_SUCCESS::IsEnabled(context->GetTraceContext())) - //{ - // ANCMEvents::ANCM_START_APPLICATION_SUCCESS::RaiseEvent( - // context->GetTraceContext(), - // NULL, - // apsz[0]); - //} - // } - // + if (SUCCEEDED(strEventMsg.SafeSnwprintf( + ASPNETCORE_EVENT_PROCESS_START_SUCCESS_MSG, + m_struAppFullPath.QueryStr(), + m_dwProcessId, + m_dwPort))) + { + UTILITY::LogEvent(g_hEventLog, + EVENTLOG_INFORMATION_TYPE, + ASPNETCORE_EVENT_PROCESS_START_SUCCESS, + strEventMsg.QueryStr()); + } Finished: if (processInformation.hThread != NULL) @@ -1037,57 +1005,29 @@ SERVER_PROCESS::StartProcess( delete pHashTable; pHashTable = NULL; } - } -// if (FAILED(hr)) -// { -// if (strEventMsg.IsEmpty()) -// { -// if (!fDonePrepareCommandLine) -// { -// strEventMsg.SafeSnwprintf( -// m_struAppFullPath.QueryStr(), -// ASPNETCORE_EVENT_PROCESS_START_INTERNAL_ERROR_MSG, -// hr); -// } -// else -// { -// strEventMsg.SafeSnwprintf( -// ASPNETCORE_EVENT_PROCESS_START_POSTCREATE_ERROR_MSG, -// m_struAppFullPath.QueryStr(), -// m_pszRootApplicationPath.QueryStr(), -// struCommandLine.QueryStr(), -// hr); -// } -// } -// -// apsz[0] = strEventMsg.QueryStr(); -// -// // not checking return code because if ReportEvent -// // fails, we cannot do anything. -// // -// if (FORWARDING_HANDLER::QueryEventLog() != NULL) -// { -// ReportEventW(FORWARDING_HANDLER::QueryEventLog(), -// EVENTLOG_ERROR_TYPE, -// 0, -// ASPNETCORE_EVENT_PROCESS_START_ERROR, -// NULL, -// 1, -// 0, -// apsz, -// NULL); -// } -// -// // FREB log -// if (ANCMEvents::ANCM_START_APPLICATION_FAIL::IsEnabled(context->GetTraceContext())) -// { -// ANCMEvents::ANCM_START_APPLICATION_FAIL::RaiseEvent( -// context->GetTraceContext(), -// NULL, -// strEventMsg.QueryStr()); -// } -// } + if (FAILED(hr)) + { + if (strEventMsg.IsEmpty()) + { + strEventMsg.SafeSnwprintf( + ASPNETCORE_EVENT_PROCESS_START_POSTCREATE_ERROR_MSG, + m_struAppFullPath.QueryStr(), + m_struPhysicalPath.QueryStr(), + m_struCommandLine.QueryStr(), + hr, + dwRetryCount); + } + + if (!strEventMsg.IsEmpty()) + { + UTILITY::LogEvent(g_hEventLog, + EVENTLOG_ERROR_TYPE, + ASPNETCORE_EVENT_PROCESS_START_ERROR, + strEventMsg.QueryStr()); + } + } + } if (FAILED(hr) || m_fReady == FALSE) { @@ -1121,7 +1061,6 @@ SERVER_PROCESS::StartProcess( } StopProcess(); - StopAllProcessesInJobObject(); } return hr; @@ -1165,8 +1104,6 @@ SERVER_PROCESS::SetupStdHandles( SECURITY_ATTRIBUTES saAttr = { 0 }; STRU struPath; - //STRU strEventMsg; - //LPCWSTR apsz[1]; DBG_ASSERT(pStartupInfo); @@ -1258,30 +1195,17 @@ Finished: if (m_fStdoutLogEnabled) { // Log the error - //if (SUCCEEDED(strEventMsg.SafeSnwprintf( - // ASPNETCORE_EVENT_INVALID_STDOUT_LOG_FILE_MSG, - // m_struFullLogFile.QueryStr(), - // HRESULT_FROM_GETLASTERROR()))) - //{ - // apsz[0] = strEventMsg.QueryStr(); - - // // - // // not checking return code because if ReportEvent - // // fails, we cannot do anything. - // // - // /*if (FORWARDING_HANDLER::QueryEventLog() != NULL) - // { - // ReportEventW(FORWARDING_HANDLER::QueryEventLog(), - // EVENTLOG_WARNING_TYPE, - // 0, - // ASPNETCORE_EVENT_CONFIG_ERROR, - // NULL, - // 1, - // 0, - // apsz, - // NULL); - // }*/ - //} + STRU strEventMsg; + if (SUCCEEDED(strEventMsg.SafeSnwprintf( + ASPNETCORE_EVENT_INVALID_STDOUT_LOG_FILE_MSG, + m_struFullLogFile.QueryStr(), + hr))) + { + UTILITY::LogEvent(g_hEventLog, + EVENTLOG_WARNING_TYPE, + ASPNETCORE_EVENT_CONFIG_ERROR, + strEventMsg.QueryStr()); + } } } return hr; @@ -2077,9 +2001,7 @@ SERVER_PROCESS::SendShutdownHttpMessage( VOID ) STRU strUrl; DWORD dwStatusCode = 0; DWORD dwSize = sizeof(dwStatusCode); - - //LPCWSTR apsz[1]; - //STACK_STRU(strEventMsg, 256); + STACK_STRU(strEventMsg, 256); hSession = WinHttpOpen(L"", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, @@ -2182,25 +2104,16 @@ SERVER_PROCESS::SendShutdownHttpMessage( VOID ) } // log - /*if (SUCCEEDED(strEventMsg.SafeSnwprintf( + if (SUCCEEDED(strEventMsg.SafeSnwprintf( ASPNETCORE_EVENT_SENT_SHUTDOWN_HTTP_REQUEST_MSG, m_dwProcessId, dwStatusCode))) { - apsz[0] = strEventMsg.QueryStr(); - if (FORWARDING_HANDLER::QueryEventLog() != NULL) - { - ReportEventW(FORWARDING_HANDLER::QueryEventLog(), - EVENTLOG_INFORMATION_TYPE, - 0, - ASPNETCORE_EVENT_SENT_SHUTDOWN_HTTP_REQUEST, - NULL, - 1, - 0, - apsz, - NULL); - } - }*/ + UTILITY::LogEvent(g_hEventLog, + EVENTLOG_INFORMATION_TYPE, + ASPNETCORE_EVENT_SENT_SHUTDOWN_HTTP_REQUEST, + strEventMsg.QueryStr()); + } Finished: if (hRequest) @@ -2291,8 +2204,7 @@ SERVER_PROCESS::TerminateBackendProcess( VOID ) { - //LPCWSTR apsz[1]; - //STACK_STRU(strEventMsg, 256); + STACK_STRU(strEventMsg, 256); if (InterlockedCompareExchange(&m_lStopping, 1L, 0L) == 0L) { @@ -2316,23 +2228,14 @@ SERVER_PROCESS::TerminateBackendProcess( } // log a warning for ungraceful shutdown - /*if (SUCCEEDED(strEventMsg.SafeSnwprintf( + if (SUCCEEDED(strEventMsg.SafeSnwprintf( ASPNETCORE_EVENT_GRACEFUL_SHUTDOWN_FAILURE_MSG, m_dwProcessId))) { - apsz[0] = strEventMsg.QueryStr(); - if (FORWARDING_HANDLER::QueryEventLog() != NULL) - { - ReportEventW(FORWARDING_HANDLER::QueryEventLog(), - EVENTLOG_WARNING_TYPE, - 0, - ASPNETCORE_EVENT_GRACEFUL_SHUTDOWN_FAILURE, - NULL, - 1, - 0, - apsz, - NULL); - } - }*/ + UTILITY::LogEvent(g_hEventLog, + EVENTLOG_WARNING_TYPE, + ASPNETCORE_EVENT_GRACEFUL_SHUTDOWN_FAILURE, + strEventMsg.QueryStr()); + } } -} \ No newline at end of file +} diff --git a/src/RequestHandler/precomp.hxx b/src/RequestHandler/precomp.hxx index a12c49cde9..42ee3e391b 100644 --- a/src/RequestHandler/precomp.hxx +++ b/src/RequestHandler/precomp.hxx @@ -55,11 +55,11 @@ #include "..\CommonLib\aspnetcoreconfig.h" #include "..\CommonLib\utility.h" #include "..\CommonLib\application.h" +#include "..\CommonLib\resources.h" #include "aspnetcore_event.h" #include "aspnetcore_msg.h" #include "disconnectcontext.h" #include "sttimer.h" -#include "resource.h" #include ".\inprocess\InProcessHandler.h" #include ".\inprocess\inprocessapplication.h" #include ".\outofprocess\responseheaderhash.h" @@ -88,8 +88,6 @@ template inline T min(T a, T b) } #endif -#define ASPNETCORE_EVENT_PROVIDER L"IIS AspNetCore Module" -#define ASPNETCORE_IISEXPRESS_EVENT_PROVIDER L"IIS Express AspNetCore Module" inline bool IsSpace(char ch) { @@ -117,3 +115,4 @@ extern DWORD g_OptionalWinHttpFlags; extern SRWLOCK g_srwLockRH; extern HINTERNET g_hWinhttpSession; extern DWORD g_dwTlsIndex; +extern HANDLE g_hEventLog;