137 lines
2.8 KiB
C
137 lines
2.8 KiB
C
|
/*++
|
||
|
|
||
|
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
|
||
|
);
|
||
|
|