156 lines
2.4 KiB
C
156 lines
2.4 KiB
C
/*++
|
||
|
||
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
|
||
|