diff options
Diffstat (limited to 'Shutdown/Shutdown.cpp')
-rw-r--r-- | Shutdown/Shutdown.cpp | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/Shutdown/Shutdown.cpp b/Shutdown/Shutdown.cpp new file mode 100644 index 0000000..e06992f --- /dev/null +++ b/Shutdown/Shutdown.cpp @@ -0,0 +1,118 @@ +// Shutdown.cpp : Implementation of WinMain + + +// Note: Proxy/Stub Information +// To build a separate proxy/stub DLL, +// run nmake -f Shutdownps.mk in the project directory. + +#include "stdafx.h" +#include "resource.h" +#include <initguid.h> +#include "Shutdown.h" + +#include "Shutdown_i.c" + +#include "../common/Interfaces.cpp" + +CShutdownApp _Module; +CComObjectGlobal<CShutdownSite> g_site; + +/* +BEGIN_OBJECT_MAP(ObjectMap) +END_OBJECT_MAP() +*/ + +const DWORD dwPause = 1000; // time to wait for threads to finish up + +LPCTSTR FindOneOf(LPCTSTR p1, LPCTSTR p2) +{ + while (p1 != NULL && *p1 != NULL) + { + LPCTSTR p = p2; + while (p != NULL && *p != NULL) + { + if (*p1 == *p) + return CharNext(p1); + p = CharNext(p); + } + p1 = CharNext(p1); + } + return NULL; +} + +///////////////////////////////////////////////////////////////////////////// +// +extern "C" int WINAPI _tWinMain(HINSTANCE hInstance, + HINSTANCE /*hPrevInstance*/, LPTSTR lpCmdLine, int /*nShowCmd*/) +{ + lpCmdLine = GetCommandLine(); //this line necessary for _ATL_MIN_CRT + +#if _WIN32_WINNT >= 0x0400 & defined(_ATL_FREE_THREADED) + HRESULT hRes = CoInitializeEx(NULL, COINIT_MULTITHREADED); +#else + HRESULT hRes = CoInitialize(NULL); +#endif + _ASSERTE(SUCCEEDED(hRes)); + _Module.Init(NULL/*ObjectMap*/, hInstance, &LIBID_SHUTDOWNLib); +// _Module.dwThreadID = GetCurrentThreadId(); + TCHAR szTokens[] = _T("-/"); + + int nRet = 0; + BOOL bRun = TRUE; + LPCTSTR lpszToken = FindOneOf(lpCmdLine, szTokens); + while (lpszToken != NULL) + { + if (lstrcmpi(lpszToken, _T("UnregServer"))==0) + { +// _Module.UpdateRegistryFromResource(IDR_Shutdown, FALSE); +// nRet = _Module.UnregisterServer(TRUE); + bRun = FALSE; + break; + } + if (lstrcmpi(lpszToken, _T("RegServer"))==0) + { + _Module.RegisterDlls(); + +// _Module.UpdateRegistryFromResource(IDR_Shutdown, TRUE); +// nRet = _Module.RegisterServer(TRUE); + bRun = FALSE; + break; + } + lpszToken = FindOneOf(lpszToken, szTokens); + } + + if (bRun) + { +// _Module.StartMonitor(); +#if _WIN32_WINNT >= 0x0400 & defined(_ATL_FREE_THREADED) +// hRes = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER, +// REGCLS_MULTIPLEUSE | REGCLS_SUSPENDED); +// _ASSERTE(SUCCEEDED(hRes)); +// hRes = CoResumeClassObjects(); +#else +// hRes = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER, +// REGCLS_MULTIPLEUSE); +#endif +// _ASSERTE(SUCCEEDED(hRes)); + + if(_Module.InitInstance()) + { + + MSG msg; + while (GetMessage(&msg, 0, 0, 0)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + +// _Module.RevokeClassObjects(); +// Sleep(dwPause); //wait for any threads to finish + } + + _Module.ExitInstance(); + } + + _Module.Term(); + CoUninitialize(); + return nRet; +} |