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.
 
 
 
 
 
 

155 lines
2.4 KiB

/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
spuddata.c
Abstract:
This module contains global data for SPUD.
Author:
John Ballard (jballard) 21-Oct-1996
Revision History:
Keith Moore (keithmo) 04-Feb-1998
Cleanup, added much needed comments.
--*/
#include "spudp.h"
//
// Public globals.
//
SPUD_COUNTERS SpudCounters;
PSPUD_NONPAGED_DATA SpudNonpagedData;
PVOID SpudCompletionPort;
ULONG SpudCompletionPortRefCount;
KSPIN_LOCK SpudCompletionPortLock;
PEPROCESS SpudOwningProcess;
PDEVICE_OBJECT SpudSelfDeviceObject;
HANDLE SpudSelfHandle;
PDEVICE_OBJECT SpudAfdDeviceObject;
PFAST_IO_DEVICE_CONTROL SpudAfdFastIoDeviceControl;
#if DBG
BOOLEAN SpudUsePrivateAssert;
#endif
#if ENABLE_OB_TRACING
struct _TRACE_LOG *SpudTraceLog;
#endif
#ifdef ALLOC_PRAGMA
#pragma alloc_text( INIT, SpudInitializeData )
#endif
//
// Public functions.
//
NTSTATUS
SpudInitializeData (
VOID
)
/*++
Routine Description:
Performs one-time global SPUD initialization.
Arguments:
None.
Return Value:
NTSTATUS - Completion status.
--*/
{
//
// Sanity check.
//
PAGED_CODE();
//
// We don't allow SPUD on NTW systems.
//
if( !MmIsThisAnNtAsSystem() ) {
return FALSE;
}
//
// Initialize the spinlock that protects the completion port.
//
KeInitializeSpinLock(
&SpudCompletionPortLock
);
//
// Allocate the structure that's to contain all of our non-paged
// data.
//
SpudNonpagedData = ExAllocatePoolWithTag(
NonPagedPool,
sizeof(*SpudNonpagedData),
SPUD_NONPAGED_DATA_POOL_TAG
);
if( SpudNonpagedData == NULL ) {
return STATUS_INSUFFICIENT_RESOURCES;
}
//
// Initialize it.
//
ExInitializeNPagedLookasideList(
&SpudNonpagedData->ReqContextList,
NULL,
NULL,
NonPagedPool,
sizeof( SPUD_AFD_REQ_CONTEXT ),
SPUD_REQ_CONTEXT_POOL_TAG,
12
);
ExInitializeResourceLite(
&SpudNonpagedData->ReqHandleTableLock
);
#if ENABLE_OB_TRACING
SpudTraceLog = CreateRefTraceLog( 4096, 0 );
#endif
RtlZeroMemory(
&SpudCounters,
sizeof(SpudCounters)
);
return STATUS_SUCCESS;
} // SpudInitializeData