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.
|
|
// --------------------------------------------------------------------------
// Module Name: BadApplicationManager.h
//
// Copyright (c) 2000, Microsoft Corporation
//
// Classes to manage bad applications in the fast user switching environment.
//
// History: 2000-08-25 vtan created
// --------------------------------------------------------------------------
#ifndef _BadApplicationManager_
#define _BadApplicationManager_
#include <lpcfus.h>
#include "BadApplication.h"
#include "DynamicArray.h"
#include "KernelResources.h"
#include "Thread.h"
// --------------------------------------------------------------------------
// CBadApplicationManager
//
// Purpose: Implements managing of bad applications started on this
// machine. This object should only exist once.
//
// History: 2000-08-25 vtan created
// --------------------------------------------------------------------------
class CBadApplicationManager : public CThread { private: typedef struct { HANDLE hProcess; BAM_TYPE bamType; DWORD dwSessionID; CBadApplication badApplication; } BAD_APPLICATION_INFO, *PBAD_APPLICATION_INFO; public: CBadApplicationManager (HINSTANCE hInstance); virtual ~CBadApplicationManager (void);
NTSTATUS Terminate (void); bool QueryRunning (const CBadApplication& badApplication, DWORD dwSessionID); NTSTATUS RegisterRunning (const CBadApplication& badApplication, HANDLE hProcess, BAM_TYPE bamType); NTSTATUS QueryInformation (const CBadApplication& badApplication, HANDLE& hProcess); NTSTATUS RequestSwitchUser (void);
static NTSTATUS PerformTermination (HANDLE hProcess, bool fAllowForceTerminate); protected: virtual DWORD Entry (void); private: static NTSTATUS TerminateForcibly (HANDLE hProcess); static NTSTATUS TerminateGracefully (HANDLE hProcess);
void Cleanup (void); void Handle_Logon (void); void Handle_Logoff (DWORD dwSessionID); void Handle_Connect (DWORD dwSessionID, HANDLE hToken); void Handle_Disconnect (DWORD dwSessionID, HANDLE hToken); LRESULT Handle_WM_WTSSESSION_CHANGE (WPARAM wParam, LPARAM lParam); static LRESULT CALLBACK NotificationWindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); static DWORD WINAPI RegisterThreadProc (void *pParameter); private: HINSTANCE _hInstance; HMODULE _hModule; ATOM _atom; HWND _hwnd; bool _fTerminateWatcherThread, _fRegisteredNotification; DWORD _dwSessionIDLastConnect; HANDLE _hTokenLastUser; CCriticalSection _lock; CEvent _hEvent; CDynamicArray _badApplications; CDynamicCountedObjectArray _restoreApplications;
static const int INDEX_EVENT; static const int INDEX_HANDLES; static const int INDEX_RESERVED; static const WCHAR s_szDefaultDesktop[]; };
#endif /* _BadApplicationManager_ */
|