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.
|
|
/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
vfirpdb.h
Abstract:
This header exposes prototypes for functions used to manage the database of IRP tracking data.
Author:
Adrian J. Oney (adriao) 20-Apr-1998
Environment:
Kernel mode
Revision History:
AdriaO 05/02/2000 - Seperated out from ntos\io\hashirp.h
--*/
struct _IOV_DATABASE_HEADER; typedef struct _IOV_DATABASE_HEADER IOV_DATABASE_HEADER; typedef struct _IOV_DATABASE_HEADER *PIOV_DATABASE_HEADER;
typedef enum _IOV_REFERENCE_TYPE {
IOVREFTYPE_PACKET = 0, IOVREFTYPE_POINTER
} IOV_REFERENCE_TYPE;
typedef enum {
IRPDBEVENT_POINTER_COUNT_ZERO = 1, IRPDBEVENT_REFERENCE_COUNT_ZERO
} IRP_DATABASE_EVENT;
typedef VOID (*PFN_IRPDBEVENT_CALLBACK)( IN PIOV_DATABASE_HEADER IovHeader, IN PIRP TrackedIrp OPTIONAL, IN IRP_DATABASE_EVENT Event );
typedef struct _IOV_DATABASE_HEADER {
PIRP TrackedIrp; // Tracked IRP
KSPIN_LOCK HeaderLock; // Spinlock on data structure
KIRQL LockIrql; // IRQL taken at.
LONG ReferenceCount; // # of reasons to keep this packet
LONG PointerCount; // # of reasons to track by irp addr
ULONG HeaderFlags; LIST_ENTRY HashLink; // Link in hash table.
LIST_ENTRY ChainLink; // Head is HeadPacket
PIOV_DATABASE_HEADER ChainHead; // First packet in a chain.
PFN_IRPDBEVENT_CALLBACK NotificationCallback; };
VOID FASTCALL VfIrpDatabaseInit( VOID );
BOOLEAN FASTCALL VfIrpDatabaseEntryInsertAndLock( IN PIRP Irp, IN PFN_IRPDBEVENT_CALLBACK NotificationCallback, IN OUT PIOV_DATABASE_HEADER IovHeader );
PIOV_DATABASE_HEADER FASTCALL VfIrpDatabaseEntryFindAndLock( IN PIRP Irp );
VOID FASTCALL VfIrpDatabaseEntryAcquireLock( IN PIOV_DATABASE_HEADER IovHeader OPTIONAL );
VOID FASTCALL VfIrpDatabaseEntryReleaseLock( IN PIOV_DATABASE_HEADER IovHeader );
VOID FASTCALL VfIrpDatabaseEntryReference( IN PIOV_DATABASE_HEADER IovHeader, IN IOV_REFERENCE_TYPE IovRefType );
VOID FASTCALL VfIrpDatabaseEntryDereference( IN PIOV_DATABASE_HEADER IovHeader, IN IOV_REFERENCE_TYPE IovRefType );
VOID FASTCALL VfIrpDatabaseEntryAppendToChain( IN OUT PIOV_DATABASE_HEADER IovExistingHeader, IN OUT PIOV_DATABASE_HEADER IovNewHeader );
VOID FASTCALL VfIrpDatabaseEntryRemoveFromChain( IN OUT PIOV_DATABASE_HEADER IovHeader );
PIOV_DATABASE_HEADER FASTCALL VfIrpDatabaseEntryGetChainPrevious( IN PIOV_DATABASE_HEADER IovHeader );
PIOV_DATABASE_HEADER FASTCALL VfIrpDatabaseEntryGetChainNext( IN PIOV_DATABASE_HEADER IovHeader );
|