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
Module Name:
vfpacket.h
Abstract:
This header exposes functions used to manage the verifier packet data that tracks IRPs.
Author:
Adrian J. Oney (adriao) 20-Apr-1998
Environment:
Kernel mode
Revision History:
AdriaO 05/02/2000 - Seperated out from ntos\io\hashirp.h
--*/
//
// Currently, ntddk.h uses up to 0x2000 for Irp->Flags
//
#define IRPFLAG_EXAMINE_MASK 0xC0000000
#define IRPFLAG_EXAMINE_NOT_TRACKED 0x80000000
#define IRPFLAG_EXAMINE_TRACKED 0x40000000
#define IRPFLAG_EXAMINE_UNMARKED 0x00000000
#define TRACKFLAG_ACTIVE 0x00000001
#define IRP_ALLOC_COUNT 8
#define IRP_LOG_ENTRIES 16
typedef enum {
IOV_EVENT_NONE = 0, IOV_EVENT_IO_ALLOCATE_IRP, IOV_EVENT_IO_CALL_DRIVER, IOV_EVENT_IO_CALL_DRIVER_UNWIND, IOV_EVENT_IO_COMPLETE_REQUEST, IOV_EVENT_IO_COMPLETION_ROUTINE, IOV_EVENT_IO_COMPLETION_ROUTINE_UNWIND, IOV_EVENT_IO_CANCEL_IRP, IOV_EVENT_IO_FREE_IRP
} IOV_LOG_EVENT;
typedef struct {
IOV_LOG_EVENT Event; PETHREAD Thread; PVOID Address; ULONG_PTR Data; LARGE_INTEGER TimeStamp;
} IOV_LOG_ENTRY, *PIOV_LOG_ENTRY;
struct _IOV_SESSION_DATA; struct _IOV_REQUEST_PACKET;
typedef struct _IOV_SESSION_DATA *PIOV_SESSION_DATA; typedef struct _IOV_REQUEST_PACKET *PIOV_REQUEST_PACKET;
typedef struct _IOV_REQUEST_PACKET {
IOV_DATABASE_HEADER; ULONG Flags; KIRQL DepartureIrql; // Irql IRP will be dispatched at.
KIRQL ArrivalIrql; // Irql IRP was sent in at.
LIST_ENTRY SessionHead; // List of all sessions.
CCHAR StackCount; // StackCount of tracked IRP.
ULONG QuotaCharge; // Quota charged against IRP.
PEPROCESS QuotaProcess; // Process quota was charged to.
PIO_COMPLETION_ROUTINE RealIrpCompletionRoutine; UCHAR RealIrpControl; PVOID RealIrpContext; PVOID AllocatorStack[IRP_ALLOC_COUNT];
//
// The following information is for the assertion routines to read.
//
UCHAR TopStackLocation;
CCHAR PriorityBoost; // Boost from IofCompleteRequest
UCHAR LastLocation; // Last location from IofCallDriver
ULONG RefTrackingCount;
//
// This field is only set on surrogate IRPs, and contains the locked system
// VA for the destination of a direct I/O IRP that's being buffered.
//
PUCHAR SystemDestVA;
#if DBG
IOV_LOG_ENTRY LogEntries[IRP_LOG_ENTRIES]; ULONG LogEntryHead; ULONG LogEntryTail; #endif
PVERIFIER_SETTINGS_SNAPSHOT VerifierSettings; PIOV_SESSION_DATA pIovSessionData;
} IOV_REQUEST_PACKET;
PIOV_REQUEST_PACKET FASTCALL VfPacketCreateAndLock( IN PIRP Irp );
PIOV_REQUEST_PACKET FASTCALL VfPacketFindAndLock( IN PIRP Irp );
VOID FASTCALL VfPacketAcquireLock( IN PIOV_REQUEST_PACKET IrpTrackingData );
VOID FASTCALL VfPacketReleaseLock( IN PIOV_REQUEST_PACKET IrpTrackingData );
VOID FASTCALL VfPacketReference( IN PIOV_REQUEST_PACKET IovPacket, IN IOV_REFERENCE_TYPE IovRefType );
VOID FASTCALL VfPacketDereference( IN PIOV_REQUEST_PACKET IovPacket, IN IOV_REFERENCE_TYPE IovRefType );
PIOV_SESSION_DATA FASTCALL VfPacketGetCurrentSessionData( IN PIOV_REQUEST_PACKET IovPacket );
VOID FASTCALL VfPacketLogEntry( IN PIOV_REQUEST_PACKET IovPacket, IN IOV_LOG_EVENT IovLogEvent, IN PVOID Address, IN ULONG_PTR Data );
|