[NTOS:IO] Use IoGetDevObjExtension/IoGetDrvObjExtension macros instead of unreadable casts

This commit is contained in:
Hermès Bélusca-Maïto
2026-04-07 20:23:55 +02:00
parent b364f702d2
commit 9a6dfe313d
8 changed files with 31 additions and 38 deletions
+3 -3
View File
@@ -1571,10 +1571,10 @@ FsRtlAcquireFileExclusiveCommon(IN PFILE_OBJECT FileObject,
/* Get master FsRtl lock */
FsRtlEnterFileSystem();
DriverExtension = (PEXTENDED_DRIVER_EXTENSION)DeviceObject->DriverObject->DriverExtension;
DriverExtension = IoGetDrvObjExtension(DeviceObject->DriverObject);
FilterCallbacks = DriverExtension->FsFilterCallbacks;
/* Check if Filter Cllbacks are supported */
/* Check if Filter Callbacks are supported */
if (FilterCallbacks && FilterCallbacks->PreAcquireForSectionSynchronization)
{
NTSTATUS Status;
@@ -2038,7 +2038,7 @@ FsRtlRegisterFileSystemFilterCallbacks(
RtlCopyMemory(NewCallbacks, Callbacks, Callbacks->SizeOfFsFilterCallbacks);
/* Set the callbacks in the driver extension */
DriverExtension = (PEXTENDED_DRIVER_EXTENSION)FilterDriverObject->DriverExtension;
DriverExtension = IoGetDrvObjExtension(FilterDriverObject);
DriverExtension->FsFilterCallbacks = NewCallbacks;
return STATUS_SUCCESS;
+5 -6
View File
@@ -118,24 +118,23 @@ typedef struct _FILE_OBJECT_EXTENSION
// Determines if the IRP is Synchronous
//
#define IsIrpSynchronous(Irp, FileObject) \
((Irp->Flags & IRP_SYNCHRONOUS_API) || \
(!(FileObject) ? \
FALSE : \
FileObject->Flags & FO_SYNCHRONOUS_IO)) \
(((Irp)->Flags & IRP_SYNCHRONOUS_API) || \
(!(FileObject) ? FALSE : \
(FileObject)->Flags & FO_SYNCHRONOUS_IO))
//
// Returns the internal Device Object Extension
//
#define IoGetDevObjExtension(DeviceObject) \
((PEXTENDED_DEVOBJ_EXTENSION) \
(DeviceObject->DeviceObjectExtension)) \
((DeviceObject)->DeviceObjectExtension))
//
// Returns the internal Driver Object Extension
//
#define IoGetDrvObjExtension(DriverObject) \
((PEXTENDED_DRIVER_EXTENSION) \
(DriverObject->DriverExtension)) \
((DriverObject)->DriverExtension))
/*
* VOID
+3 -4
View File
@@ -1522,10 +1522,9 @@ IoGetLowerDeviceObject(IN PDEVICE_OBJECT DeviceObject)
/* Make sure it's not getting deleted */
DeviceExtension = IoGetDevObjExtension(DeviceObject);
if (!(DeviceExtension->ExtensionFlags & (DOE_UNLOAD_PENDING |
DOE_DELETE_PENDING |
DOE_REMOVE_PENDING |
DOE_REMOVE_PROCESSED)))
if (!(DeviceExtension->ExtensionFlags &
(DOE_UNLOAD_PENDING | DOE_DELETE_PENDING |
DOE_REMOVE_PENDING | DOE_REMOVE_PROCESSED)))
{
/* Get the Lower Device Object */
LowerDeviceObject = DeviceExtension->AttachedTo;
+4 -4
View File
@@ -962,7 +962,7 @@ IoGetDeviceInterfaces(IN CONST GUID *InterfaceClassGuid,
if (PhysicalDeviceObject != NULL)
{
/* Parameters must pass three border of checks */
DeviceObjectExtension = (PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject->DeviceObjectExtension;
DeviceObjectExtension = IoGetDevObjExtension(PhysicalDeviceObject);
/* 1st level: Presence of a Device Node */
if (DeviceObjectExtension->DeviceNode == NULL)
@@ -1463,7 +1463,7 @@ IoRegisterDeviceInterface(IN PDEVICE_OBJECT PhysicalDeviceObject,
PhysicalDeviceObject, ReferenceString);
/* Parameters must pass three border of checks */
DeviceObjectExtension = (PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject->DeviceObjectExtension;
DeviceObjectExtension = IoGetDevObjExtension(PhysicalDeviceObject);
/* 1st level: Presence of a Device Node */
if (DeviceObjectExtension->DeviceNode == NULL)
@@ -1512,8 +1512,8 @@ IoRegisterDeviceInterface(IN PDEVICE_OBJECT PhysicalDeviceObject,
ASSERT(PdoNameInfo->Name.Length);
/* Create base key name for this interface: HKLM\SYSTEM\CurrentControlSet\Control\DeviceClasses\{GUID} */
ASSERT(((PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject->DeviceObjectExtension)->DeviceNode);
InstancePath = &((PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject->DeviceObjectExtension)->DeviceNode->InstancePath;
ASSERT(IoGetDevObjExtension(PhysicalDeviceObject)->DeviceNode);
InstancePath = &(IoGetDevObjExtension(PhysicalDeviceObject)->DeviceNode->InstancePath);
BaseKeyName.Length = (USHORT)wcslen(BaseKeyString) * sizeof(WCHAR);
BaseKeyName.MaximumLength = BaseKeyName.Length
+ GuidString.Length;
+7 -10
View File
@@ -136,14 +136,12 @@ IopCheckDeviceAndDriver(IN POPEN_PACKET OpenPacket,
IN PDEVICE_OBJECT DeviceObject)
{
/* Make sure the object is valid */
if ((IoGetDevObjExtension(DeviceObject)->ExtensionFlags &
(DOE_UNLOAD_PENDING |
DOE_DELETE_PENDING |
DOE_REMOVE_PENDING |
DOE_REMOVE_PROCESSED)) ||
(DeviceObject->Flags & DO_DEVICE_INITIALIZING))
if ((DeviceObject->Flags & DO_DEVICE_INITIALIZING) ||
(IoGetDevObjExtension(DeviceObject)->ExtensionFlags &
(DOE_UNLOAD_PENDING | DOE_DELETE_PENDING |
DOE_REMOVE_PENDING | DOE_REMOVE_PROCESSED)))
{
/* It's unloading or initializing, so fail */
/* It's initializing or unloading, so fail */
DPRINT1("You are seeing this because the following ROS driver: %wZ\n"
" sucks. Please fix it's AddDevice Routine\n",
&DeviceObject->DriverObject->DriverName);
@@ -156,7 +154,6 @@ IopCheckDeviceAndDriver(IN POPEN_PACKET OpenPacket,
{
return STATUS_ACCESS_DENIED;
}
else
{
/* Increase reference count */
@@ -1488,8 +1485,8 @@ IopGetDeviceAttachmentBase(IN PDEVICE_OBJECT DeviceObject)
PDEVICE_OBJECT PDO = DeviceObject;
/* Go down the stack to attempt to get the PDO */
for (; ((PEXTENDED_DEVOBJ_EXTENSION)PDO->DeviceObjectExtension)->AttachedTo != NULL;
PDO = ((PEXTENDED_DEVOBJ_EXTENSION)PDO->DeviceObjectExtension)->AttachedTo);
while (IoGetDevObjExtension(PDO)->AttachedTo != NULL)
PDO = IoGetDevObjExtension(PDO)->AttachedTo;
return PDO;
}
+3 -5
View File
@@ -136,11 +136,9 @@ IoStartTimer(IN PDEVICE_OBJECT DeviceObject)
PIO_TIMER IoTimer = DeviceObject->Timer;
/* Make sure the device isn't unloading */
if (!(((PEXTENDED_DEVOBJ_EXTENSION)(DeviceObject->DeviceObjectExtension))->
ExtensionFlags & (DOE_UNLOAD_PENDING |
DOE_DELETE_PENDING |
DOE_REMOVE_PENDING |
DOE_REMOVE_PROCESSED)))
if (!(IoGetDevObjExtension(DeviceObject)->ExtensionFlags &
(DOE_UNLOAD_PENDING | DOE_DELETE_PENDING |
DOE_REMOVE_PENDING | DOE_REMOVE_PROCESSED)))
{
/* Lock Timers */
KeAcquireSpinLock(&IopTimerLock, &OldIrql);
+4 -4
View File
@@ -27,7 +27,7 @@ FASTCALL
IopGetDeviceNode(
_In_ PDEVICE_OBJECT DeviceObject)
{
return ((PEXTENDED_DEVOBJ_EXTENSION)DeviceObject->DeviceObjectExtension)->DeviceNode;
return IoGetDevObjExtension(DeviceObject)->DeviceNode;
}
PDEVICE_NODE
@@ -66,7 +66,7 @@ PipAllocateDeviceNode(
{
/* Link it and remove the init flag */
DeviceNode->PhysicalDeviceObject = PhysicalDeviceObject;
((PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject->DeviceObjectExtension)->DeviceNode = DeviceNode;
IoGetDevObjExtension(PhysicalDeviceObject)->DeviceNode = DeviceNode;
PhysicalDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
}
@@ -294,7 +294,7 @@ IopCreateDeviceNode(
Node->PhysicalDeviceObject = PhysicalDeviceObject;
((PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject->DeviceObjectExtension)->DeviceNode = Node;
IoGetDevObjExtension(PhysicalDeviceObject)->DeviceNode = Node;
if (ParentNode)
{
@@ -391,7 +391,7 @@ IopFreeDeviceNode(
ExFreePool(DeviceNode->BootResources);
}
((PEXTENDED_DEVOBJ_EXTENSION)DeviceNode->PhysicalDeviceObject->DeviceObjectExtension)->DeviceNode = NULL;
IoGetDevObjExtension(DeviceNode->PhysicalDeviceObject)->DeviceNode = NULL;
ExFreePoolWithTag(DeviceNode, TAG_IO_DEVNODE);
return STATUS_SUCCESS;
+2 -2
View File
@@ -545,7 +545,7 @@ IopGetDeviceProperty(PPLUGPLAY_CONTROL_PROPERTY_DATA PropertyData)
}
DeviceNode = ((PEXTENDED_DEVOBJ_EXTENSION)DeviceObject->DeviceObjectExtension)->DeviceNode;
DeviceNode = IoGetDevObjExtension(DeviceObject)->DeviceNode;
if (Property == PNP_PROPERTY_POWER_DATA)
{
@@ -787,7 +787,7 @@ IopGetRelatedDevice(PPLUGPLAY_CONTROL_RELATED_DEVICE_DATA RelatedDeviceData)
if (DeviceObject == NULL)
return STATUS_NO_SUCH_DEVICE;
DeviceNode = ((PEXTENDED_DEVOBJ_EXTENSION)DeviceObject->DeviceObjectExtension)->DeviceNode;
DeviceNode = IoGetDevObjExtension(DeviceObject)->DeviceNode;
}
switch (Relation)