/*++ Copyright (c) 2000 Microsoft Corporation Module Name: iovutil.h Abstract: This header exposes various utilities required to do driver verification. Author: Adrian J. Oney (adriao) 20-Apr-1998 Environment: Kernel mode Revision History: AdriaO 02/10/2000 - Seperated out from ntos\io\trackirp.h --*/ typedef enum { DATABASELOCKSTATE_HELD, DATABASELOCKSTATE_NOT_HELD } DATABASELOCKSTATE; typedef enum { DEVOBJ_RELATION_IDENTICAL, DEVOBJ_RELATION_FIRST_IMMEDIATELY_ABOVE_SECOND, DEVOBJ_RELATION_FIRST_IMMEDIATELY_BELOW_SECOND, DEVOBJ_RELATION_FIRST_ABOVE_SECOND, DEVOBJ_RELATION_FIRST_BELOW_SECOND, DEVOBJ_RELATION_NOT_IN_SAME_STACK } DEVOBJ_RELATION, *PDEVOBJ_RELATION; typedef enum { MARKTYPE_DELETED, MARKTYPE_BOTTOM_OF_FDO_STACK, MARKTYPE_DESIGNATED_FDO, MARKTYPE_RAW_PDO, MARKTYPE_DEVICE_CHECKED, MARKTYPE_RELATION_PDO_EXAMINED } MARK_TYPE; VOID FASTCALL IovUtilInit( VOID ); VOID FASTCALL IovUtilGetLowerDeviceObject( IN PDEVICE_OBJECT UpperDeviceObject, OUT PDEVICE_OBJECT *LowerDeviceObject ); VOID FASTCALL IovUtilGetBottomDeviceObject( IN PDEVICE_OBJECT DeviceObject, OUT PDEVICE_OBJECT *BottomDeviceObject ); VOID FASTCALL IovUtilGetUpperDeviceObject( IN PDEVICE_OBJECT LowerDeviceObject, OUT PDEVICE_OBJECT *UpperDeviceObject ); BOOLEAN FASTCALL IovUtilIsVerifiedDeviceStack( IN PDEVICE_OBJECT DeviceObject ); VOID FASTCALL IovUtilFlushVerifierDriverListCache( VOID ); VOID FASTCALL IovUtilFlushStackCache( IN PDEVICE_OBJECT DeviceObject, IN DATABASELOCKSTATE DatabaseLockState ); VOID IovUtilRelateDeviceObjects( IN PDEVICE_OBJECT FirstDeviceObject, IN PDEVICE_OBJECT SecondDeviceObject, OUT DEVOBJ_RELATION *DeviceObjectRelation ); BOOLEAN IovUtilIsPdo( IN PDEVICE_OBJECT DeviceObject ); BOOLEAN IovUtilIsWdmStack( IN PDEVICE_OBJECT DeviceObject ); BOOLEAN FASTCALL IovUtilHasDispatchHandler( IN PDRIVER_OBJECT DriverObject, IN UCHAR MajorFunction ); BOOLEAN FASTCALL IovUtilIsInFdoStack( IN PDEVICE_OBJECT DeviceObject ); BOOLEAN FASTCALL IovUtilIsRawPdo( IN PDEVICE_OBJECT DeviceObject ); BOOLEAN FASTCALL IovUtilIsDesignatedFdo( IN PDEVICE_OBJECT DeviceObject ); VOID FASTCALL IovUtilMarkDeviceObject( IN PDEVICE_OBJECT DeviceObject, IN MARK_TYPE MarkType ); BOOLEAN FASTCALL IovUtilIsDeviceObjectMarked( IN PDEVICE_OBJECT DeviceObject, IN MARK_TYPE MarkType ); VOID FASTCALL IovUtilMarkStack( IN PDEVICE_OBJECT PhysicalDeviceObject, IN PDEVICE_OBJECT BottomOfFdoStack OPTIONAL, IN PDEVICE_OBJECT FunctionalDeviceObject OPTIONAL, IN BOOLEAN RawStack ); VOID FASTCALL IovUtilWatermarkIrp( IN PIRP Irp, IN ULONG Flags );