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 Header ********************************\
* Module Name: logon.c * * Copyright (c) 1985 - 1999, Microsoft Corporation * * Logon Support Routines * * History: * 01-14-91 JimA Created. \***************************************************************************/
#include "precomp.h"
#pragma hdrstop
/***************************************************************************\
* _RegisterLogonProcess * * Register the logon process and set secure mode flag * * History: * 07-01-91 JimA Created. \***************************************************************************/
BOOL _RegisterLogonProcess( DWORD dwProcessId, BOOL fSecure) { UNREFERENCED_PARAMETER(fSecure);
/*
* Allow only one logon process and then only if it has TCB * privilege. */ if (gpidLogon != 0 || !IsPrivileged(&psTcb)) { RIPERR0(ERROR_ACCESS_DENIED, RIP_WARNING, "Access denied in _RegisterLogonProcess");
return FALSE; }
gpidLogon = (HANDLE)LongToHandle( dwProcessId ); return TRUE; }
/***************************************************************************\
* _LockWindowStation * * Locks a windowstation and its desktops and returns the busy status. * * History: * 01-15-91 JimA Created. \***************************************************************************/ UINT _LockWindowStation( PWINDOWSTATION pwinsta) { PDESKTOP pdesk; BOOL fBusy = FALSE;
/*
* Make sure the caller is the logon process */ if (PsGetCurrentProcessId() != gpidLogon) { RIPERR0(ERROR_ACCESS_DENIED, RIP_WARNING, "Access denied in _LockWindowStation");
return WSS_ERROR; }
/*
* Prevent desktop switches */ pwinsta->dwWSF_Flags |= WSF_SWITCHLOCK;
/*
* Determine whether the station is busy */ pdesk = pwinsta->rpdeskList; while (pdesk != NULL) { if (pdesk != grpdeskLogon && OBJECT_TO_OBJECT_HEADER(pdesk)->HandleCount != 0) {
/*
* This desktop is open, thus the station is busy */ fBusy = TRUE; break; } pdesk = pdesk->rpdeskNext; }
if (pwinsta->dwWSF_Flags & WSF_SHUTDOWN) pwinsta->dwWSF_Flags |= WSF_OPENLOCK;
/*
* Unlock opens if the station is busy and is not in the middle * of shutting down. */ if (fBusy) return WSS_BUSY; else return WSS_IDLE; }
/***************************************************************************\
* _UnlockWindowStation * * Unlocks a windowstation locked by LogonLockWindowStation. * * History: * 01-15-91 JimA Created. \***************************************************************************/ BOOL _UnlockWindowStation( PWINDOWSTATION pwinsta) { /*
* Make sure the caller is the logon process. */ if (PsGetCurrentProcessId() != gpidLogon) { RIPERR0(ERROR_ACCESS_DENIED, RIP_WARNING, "Access denied in _UnlockWindowStation");
return FALSE; }
/*
* If shutdown is occuring, only remove the switch lock. */ if (pwinsta->dwWSF_Flags & WSF_SHUTDOWN) { pwinsta->dwWSF_Flags &= ~WSF_SWITCHLOCK; } else { pwinsta->dwWSF_Flags &= ~(WSF_OPENLOCK | WSF_SWITCHLOCK); }
return TRUE; }
/***************************************************************************\
* _SetLogonNotifyWindow * * Register the window to notify when logon related events occur. * * History: * 01-13-92 JimA Created. \***************************************************************************/ BOOL _SetLogonNotifyWindow( PWND pwnd) { /*
* Make sure the caller is the logon process. */ if (PsGetCurrentProcessId() != gpidLogon) { RIPERR0(ERROR_ACCESS_DENIED, RIP_WARNING, "Access denied in _SetLogonNotifyWindow");
return FALSE; }
Lock(&gspwndLogonNotify, pwnd);
return TRUE; }
|