windows-nt/Source/XPSP1/NT/printscan/print/spooler/spoolss/server/splmain.c
2020-09-26 16:20:57 +08:00

177 lines
2.6 KiB
C

/*++
Copyright (c) 1990 Microsoft Corporation
Module Name:
splmain.c
Abstract:
This is the main routine for the Windows NT Spooler Service.
Functions in the file include:
SPOOLER_main
Author:
Krishna Ganugapati (KrishnaG) 12-Oct-1993
Environment:
User Mode - Win32
Revision History:
4-Jan-1999 Khaleds
Added Code for optimiziting the load time of the spooler by decoupling
the startup dependency between spoolsv and spoolss
12-Oct-1993 krishnaG
Created
--*/
//
// INCLUDES
//
#define NOMINMAX
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <windows.h>
#include <winspool.h>
#include <winsplp.h>
#include <rpc.h>
#include "splsvr.h"
#include "splr.h"
#include "server.h"
HANDLE TerminateEvent = NULL;
VOID
SPOOLER_main (
IN DWORD argc,
IN LPTSTR *argv
)
/*++
Routine Description:
This is the main routine for the Spooler Service
Arguments:
Return Value:
None.
Note:
--*/
{
if(TerminateEvent = CreateEvent (0, TRUE, FALSE,0))
{
SpoolerState = SpoolerInitializeSpooler(argc, argv);
if (SpoolerState != RUNNING) {
DBGMSG(DBG_WARN,("Spooler Shutdown during initialization\n"));
}
if (SpoolerState == STOPPING) {
SpoolerShutdown();
}
DBGMSG(DBG_TRACE,("SPOOLER_main: Exiting Spooler Thread\n"));
WaitForSingleObject(TerminateEvent,INFINITE);
CloseHandle(TerminateEvent);
if(hPhase2Init)
{
CloseHandle(hPhase2Init);
}
SpoolerStatusUpdate (STOPPED);
}
else
{
DBGMSG(DBG_WARN,("Spooler unable to create Terminate event"));
}
ExitThread(0);
return;
}
VOID
SpoolerShutdown(VOID)
/*++
Routine Description:
Arguments:
none
Return Value:
none
--*/
{
DBGMSG(DBG_TRACE,(" in SpoolerShutdown\n",0));
// *** SHUTDOWN HINT ***
SpoolerStatusUpdate (STOPPING);
//
// Shut down the router.
//
DBGMSG(DBG_TRACE,("SpoolerShutdown: Shut down router\n"));
SplShutDownRouter();
//
// Shut down the RPC interface.
//
DBGMSG(DBG_TRACE,("SpoolerShutdown: Shut down RPC server\n"));
// SpoolerStopRpcServer( /*nspool_ServerIfHandle*/ );
// *** SHUTDOWN HINT ***
// SpoolerStatusUpdate (STOPPING);
//
// If we've come here, then we've stopped accepting RPC calls
//
DBGMSG(DBG_TRACE, ("SpoolerShutdown: We've serviced all pending requests\n"));
//
// Shut down the Spooler
DBGMSG(DBG_TRACE,("SpoolerShutdown: Done with shutdown\n"));
return;
}