Source code of Windows XP (NT5)
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.
|
|
/*++
Copyright (c) 2000 Microsoft Corporation All rights reserved
Module Name:
dload.c
Abstract:
Handles delay load of the router, spoolss.dll
Author:
Steve Kiraly (SteveKi) 26-Oct-2000
Environment:
User Mode -Win32
Revision History:
--*/ #include <windows.h>
#include <rpc.h>
#include <winspool.h>
#include <offsets.h>
#include <delayimp.h>
#include "server.h"
#include "winspl.h"
#include "dload.h"
PfnDliHook __pfnDliFailureHook = DelayLoadFailureHook;
FARPROC LookupHandler( IN PDelayLoadInfo pDelayInfo ) /*++
Routine Description:
This routine handle finding a delay load handler when a delay load library error occurrs. Currently this routine only handles failures for delay loading the router. The router is delay loaded for boot performance issues. When the router cannot be loaded it is fatal. Currently we simply terminate the process, it would be better to log an event prior to terminating but this would require event logging code which we only have in localspl.dll In the future we should build event logging code for all components. Server, router, and all print providers.
Arguments:
pDelayInfo - pointer to delay load information, i.e. dll name procedure name etc.
Return Value:
NULL procedure address
Note:
--*/ { //
// If the router cannot be loaded or a procedure address cannot be found then
// terminate not much else can be done, the router is a critical comonent of the
// spooler process it must be available.
//
if (!_stricmp(pDelayInfo->szDll, "spoolss.dll")) { #if DBG
OutputDebugString(L"Delay load module or address not found in spoolss.dll.\n"); DebugBreak(); #endif
ExitProcess(-1); }
return NULL; }
FARPROC WINAPI DelayLoadFailureHook( IN UINT unReason, IN PDelayLoadInfo pDelayInfo ) /*++
Routine Description:
Called when a delay loaded library or procedure address fails.
Arguments:
unReason - reason for delay load failure pDelayInfo - pointer to delay load failure information
Return Value:
The procedure or module handle
Note:
--*/ { FARPROC ReturnValue = NULL;
switch(unReason) { //
// For a failed LoadLibrary, we will return the HINSTANCE of this module.
// This will cause the loader to try a GetProcAddress in this module for the
// function. This will subsequently fail and then we will be called
// for dliFailGetProc below.
//
case dliFailLoadLib: ReturnValue = (FARPROC)GetModuleHandle(NULL); break;
//
// Try to find an error handler for this DLL/procedure.
//
case dliFailGetProc: ReturnValue = LookupHandler(pDelayInfo); break;
//
// Unknown reason failure.
//
default: break; }
return ReturnValue; }
|