#include <kmem.h>
#include <debug.h>
typedef struct _DDEVOBJ_EXTENSION
{
struct _DEVOBJ_EXTENSION;
ULONG PowerFlags;
PVOID Dope;
ULONG ExtensionFlags;
PVOID DeviceNode;
PDEVICE_OBJECT AttachedTo;
LONG StartIoCount;
LONG StartIoKey;
ULONG StartIoFlags;
PVPB Vpb;
} DDEVOBJ_EXTENSION, *PDDEVOBJ_EXTENSION;
VOID
GetDeviceStack(PDEVICE_OBJECT DeviceObject)
{
// local copy
PDEVICE_OBJECT upperDeviceObject = DeviceObject;
PDDEVOBJ_EXTENSION deviceExtension;
PDEVICE_OBJECT lowerDeviceObject = DeviceObject;
LONG i=0;
// lower deviceObjects
deviceExtension = (PDDEVOBJ_EXTENSION) DeviceObject->DeviceObjectExtension;
while (deviceExtension->AttachedTo != NULL)
{
lowerDeviceObject = deviceExtension->AttachedTo;
deviceExtension = (PDDEVOBJ_EXTENSION) lowerDeviceObject->DeviceObjectExtension;
i--;
DriverDbg(("Level(%d) - 0x%X (%wZ)\n", i, lowerDeviceObject, &lowerDeviceObject->DriverObject->DriverName));
}
i=0;
DriverDbg(("Level(%d) - 0x%X (%wZ)\n", i, upperDeviceObject, &upperDeviceObject->DriverObject->DriverName));
// upper deviceObjects
while(upperDeviceObject->AttachedDevice)
{
i++;
upperDeviceObject = upperDeviceObject->AttachedDevice;
DriverDbg(("Level(%d) - 0x%X (%wZ)\n", i, upperDeviceObject, &upperDeviceObject->DriverObject->DriverName));
}
return;
}
PDEVICE_OBJECT
GetBaseDeviceObject(PDEVICE_OBJECT DeviceObject)
{
PDEVICE_OBJECT baseDeviceObject = DeviceObject;
PDDEVOBJ_EXTENSION deviceExtension = (PDDEVOBJ_EXTENSION) baseDeviceObject->DeviceObjectExtension;
while(deviceExtension->AttachedTo != NULL)
{
baseDeviceObject = deviceExtension->AttachedTo;
deviceExtension = (PDDEVOBJ_EXTENSION) baseDeviceObject->DeviceObjectExtension;
}
return baseDeviceObject;
}
PDEVICE_OBJECT
GetTopDeviceObject(PDEVICE_OBJECT DeviceObject)
{
PDEVICE_OBJECT topDeviceObject = DeviceObject;
while(topDeviceObject->AttachedDevice)
{
topDeviceObject = topDeviceObject->AttachedDevice;
}
return topDeviceObject;
}