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.
|
|
//
// loader.cpp
//
#include "private.h"
#include "loader.h"
#include "regwatch.h"
#include "msutbapi.h"
extern HINSTANCE g_hInst; extern BOOL g_fWinLogon; extern BOOL g_bOnWow64;
const TCHAR c_szLoaderWndClass[] = TEXT("CicLoaderWndClass");
extern void UninitApp(void);
BOOL CLoaderWnd::_bWndClassRegistered = FALSE; BOOL CLoaderWnd::_bUninitedSystem = FALSE;
//+---------------------------------------------------------------------------
//
// ctor
//
//----------------------------------------------------------------------------
CLoaderWnd::CLoaderWnd() { _hWnd = NULL; }
//+---------------------------------------------------------------------------
//
// dtor
//
//----------------------------------------------------------------------------
CLoaderWnd::~CLoaderWnd() { }
//+---------------------------------------------------------------------------
//
// Init
//
//----------------------------------------------------------------------------
BOOL CLoaderWnd::Init() { if (!_bWndClassRegistered) { WNDCLASSEX wc; memset(&wc, 0, sizeof(wc)); wc.cbSize = sizeof(wc); wc.style = CS_HREDRAW | CS_VREDRAW ; wc.hInstance = g_hInst; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.lpfnWndProc = _WndProc; wc.lpszClassName = c_szLoaderWndClass; if (RegisterClassEx(&wc)) _bWndClassRegistered = TRUE; }
return _bWndClassRegistered ? TRUE : FALSE; }
//+---------------------------------------------------------------------------
//
// CreateWnd
//
//----------------------------------------------------------------------------
HWND CLoaderWnd::CreateWnd() { _hWnd = CreateWindowEx(0, c_szLoaderWndClass, TEXT(""), WS_DISABLED, 0, 0, 0, 0, NULL, 0, g_hInst, 0);
return _hWnd; }
//+---------------------------------------------------------------------------
//
// _WndProc
//
//----------------------------------------------------------------------------
LRESULT CALLBACK CLoaderWnd::_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_CREATE: break;
case WM_DESTROY : PostQuitMessage(0); break;
case WM_SYSCOLORCHANGE: case WM_DISPLAYCHANGE: if (! g_bOnWow64) { CRegWatcher::StartSysColorChangeTimer(); } break;
case WM_QUERYENDSESSION: if (g_fWinLogon && (lParam & ENDSESSION_LOGOFF)) return 1;
if (!IsOnNT()) { //
// uninit system.
//
ClosePopupTipbar(); TF_UninitSystem(); _bUninitedSystem = TRUE; }
return 1;
case WM_ENDSESSION: if (!wParam) { //
// need to restore Cicero and Toolbar.
//
if (_bUninitedSystem) { TF_InitSystem(); if (! g_bOnWow64) { GetPopupTipbar(hWnd, g_fWinLogon ? UTB_GTI_WINLOGON : 0); } _bUninitedSystem = FALSE; } } else // Do cleanup always no matter if this is from Winlogon session or not.
{ if (!_bUninitedSystem) { UninitApp(); TF_UninitSystem(); _bUninitedSystem = TRUE; } } break;
default: return DefWindowProc(hWnd, uMsg, wParam, lParam); }
return 0; }
|