|
|
/*++ BUILD Version: 0015 // Increment this if a change has global effects
/****************************** Module Header ******************************\
* Module Name: usersrv.h * * Copyright (c) 1985 - 1999, Microsoft Corporation * * Typedefs, defines, and prototypes that are used exclusively by the User * and Console server-side DLL. * * History: * 04-28-91 DarrinM Created from PROTO.H, MACRO.H, and STRTABLE.H * 01-25-95 JimA Split off from kernel-mode. \***************************************************************************/
#ifndef _USERSRV_
#define _USERSRV_
#include <windows.h>
#include <w32gdip.h>
/*
* Enable warnings that are turned off default for NT but we want on */ #ifndef RC_INVOKED // RC can't handle #pragmas
#pragma warning(error:4101) // Unreferenced local variable
#endif
#ifndef _USERKDX_ /* if not building ntuser\kdexts */
#include <stddef.h>
#include <w32gdip.h>
#include <ddeml.h>
#include "ddemlp.h"
#include "winuserp.h"
#include "winuserk.h"
#include <dde.h>
#include <ddetrack.h>
#include "kbd.h"
#include <wowuserp.h>
#include <memory.h>
#include <w32err.h>
#include <string.h>
#include "help.h"
#include "user.h"
#include "cscall.h"
#undef MONITOR
#include "strid.h"
#include "csrmsg.h"
#endif /* _USERKDX_ */
typedef struct tagCTXHARDERRORINFO { CLIENT_ID ClientId; ULONG MessageId; LPWSTR pTitle; LPWSTR pMessage; ULONG Style; ULONG Timeout; ULONG Response; PULONG pResponse; PNTSTATUS pStatus; HANDLE hEvent; BOOLEAN DoNotWait; BOOLEAN CountPending; BOOLEAN DoNotWaitForCorrectDesktop; struct tagCTXHARDERRORINFO * pchiNext; } CTXHARDERRORINFO, *PCTXHARDERRORINFO;
/*
* EndTask dialog, controls, timers, etc */ #define IDD_ENDTASK 10
#define IDC_STATUSICON 0x100
#define IDC_STATUSMSG 0x101
#define IDC_STATUSCANCEL 0x102
#define IDC_ENDNOW 0x103
#define IDI_CONSOLE 1
#define ETD_XICON 10
#define ETD_YICON 10
#define IDB_WARNING 0x200
#define IDT_CHECKAPPSTATE 0x300
#define IDT_PROGRESS 0x301
/*
* End task dialog parameters. */ INT_PTR APIENTRY EndTaskDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); typedef struct _ENDDLGPARAMS { DWORD dwFlags; /* EDPF_* flags */ DWORD dwClientFlags; /* WMCS_* flags defined in ntuser\user.h */ DWORD dwRet; /* User selection */ UINT uStrId; /* IDC_STATUS message */ PCSR_THREAD pcsrt; /* Not provided for console */ LPARAM lParam; /* hwnd for windows - pwcTitle for Console */ DWORD dwCheckTimerCount;/* IDT_CHECKAPPTIMER tick count */ HBITMAP hbmpWarning; /* Warning bitmap to display on icon if not waiting */ RECT rcWarning; /* Warning bitmap position */ HICON hIcon; /* Application's icon */ RECT rcBar; /* Progress bar rect including edge */ RECT rcProgress; /* Next block's rect */ int iProgressStop; /* Progress bar right most coordinate */ int iProgressWidth; /* Progress bar block width */ HBRUSH hbrProgress; /* Used to draw progress bar blocks */ RECT rcEndButton; /* End button original position (move while in wait mode) */ } ENDDLGPARAMS; /*
* ENDDLGPARAMS dwFlags field */ #define EDPF_NODLG 0x00000001
#define EDPF_RESPONSE 0x00000002
#define EDPF_HUNG 0x00000004
#define EDPF_WAIT 0x00000008
#define EDPF_INPUT 0x00000010
/*
* Commands returned from ThreadShutdownNotify */ #define TSN_APPSAYSOK 1
#define TSN_APPSAYSNOTOK 2
#define TSN_USERSAYSKILL 3
#define TSN_USERSAYSCANCEL 4
#define TSN_NOWINDOW 5
/*
* Max number of threads stuck in ThreadShutdownNotify at any one time. */ #define TSN_MAX_THREADS 0x8
/*
* Shared data between user and console */ extern HANDLE ghModuleWin; extern DWORD gCmsHungAppTimeout; extern DWORD gCmsWaitToKillTimeout; extern DWORD gdwHungToKillCount; extern DWORD gdwServicesProcessId; extern DWORD gdwServicesWaitToKillTimeout; extern DWORD gdwProcessTerminateTimeout;
/*
* Hard error information */ typedef struct tagHARDERRORINFO { struct tagHARDERRORINFO *phiNext; PCSR_THREAD pthread; HANDLE hEventHardError; PHARDERROR_MSG pmsg; DWORD dwHEIFFlags; UNICODE_STRING usText; /* MessageBox text, caption and flags */ UNICODE_STRING usCaption; DWORD dwMBFlags; DWORD dwTimeout; /* MessageBox timeout (could be INFINITE) */ DWORD dwVDMParam0; DWORD dwVDMParam1; PCTXHARDERRORINFO pCtxHEInfo; } HARDERRORINFO, *PHARDERRORINFO;
#define HEIF_ACTIVE 0x00000001
#define HEIF_NUKED 0x00000002
#define HEIF_ALLOCATEDMSG 0x00000004
#define HEIF_REPLIED 0x00000008
#define HEIF_DEREFTHREAD 0x00000010
#define HEIF_WRONGDESKTOP 0x00000020
#define HEIF_SYSTEMERROR 0x00000040
#define HEIF_VDMERROR 0x00000080
#define HEIF_NOWAIT 0x00000100
BOOL BoostHardError(ULONG_PTR dwProcessId, DWORD dwCode); #define BHE_ACTIVATE 0
#define BHE_FORCE 1
#define BHE_TEST 2
DWORD ThreadShutdownNotify(DWORD dwClientFlags, ULONG_PTR dwThread, LPARAM lParam);
/*
* WM_CLIENTSHUTDOWN message callback */ typedef struct tagWMCSDATA { DWORD dwFlags; DWORD dwRet; } WMCSDATA, *PWMCSDATA;
#define WMCSD_IGNORE 0x00000001
#define WMCSD_REPLY 0x00000002
#define WMCSD_RECEIVED 0x00000004
/*
* Prototypes from server.c */ BOOL CALLBACK FindWindowFromThread (HWND hwnd, LPARAM lParam);
/*
* !!! LATER - move other internal routines out of winuserp.h */
int InternalDoEndTaskDialog(TCHAR* pszTitle, HANDLE h, int cSeconds);
#ifndef _USERKDX_ /* if not building ntuser\kdexts */
LPWSTR RtlLoadStringOrError( HANDLE hModule, UINT wID, LPWSTR lpDefault, PBOOL pAllocated, BOOL bAnsi ); #define ServerLoadString(hmod, id, default, allocated)\
RtlLoadStringOrError((hmod), (id), (default), (allocated), FALSE) #endif /* _USERKDX_ */
#define EnterCrit() RtlEnterCriticalSection(&gcsUserSrv)
#define LeaveCrit() RtlLeaveCriticalSection(&gcsUserSrv)
#ifdef FE_IME
BOOL IsImeWindow( HWND hwnd ); #endif
VOID UserExitWorkerThread(NTSTATUS Status);
// used by hang reporting since CreateProcessW does not work from CSRSS
BOOL StartHangReport(ULONG ulSessionId, LPWSTR wszEventName, DWORD dwpidHung, DWORD dwtidHung, BOOL f64Bit, HANDLE *phProcDumprep);
// used by hang reporting to create the SD for the event that will signal when
// it's ok to kill the hung process
NTSTATUS AllocDefSD(SECURITY_DESCRIPTOR *psd, DWORD dwOALS, DWORD dwWA); void FreeDefSD(SECURITY_DESCRIPTOR *psd);
#include "globals.h"
#endif // !_USERSRV_
|