[DISK.SYS] Add a HACK so that we can use NT5+ NTOS functions with this NT4 driver for removable devices.

This is needed in order to avoid an infinite recursive loop between
disk!UpdateRemovableGeometry() and ntos!IoReadPartitionTable().
This does not happen with NT5+ disk_new.sys because it doesn't call
IoReadPartitionTable() in that situation.
This commit is contained in:
Hermès Bélusca-Maïto 2019-01-02 20:28:21 +01:00
parent 397fe9c817
commit a56a2e95a2
No known key found for this signature in database
GPG Key ID: 3B2539C65E7B93D0

View File

@ -116,6 +116,15 @@ typedef struct _DISK_DATA {
PARTITION_LIST_STATE PartitionListState;
#ifdef __REACTOS__
//
// HACK so that we can use NT5+ NTOS functions with this NT4 driver
// for removable devices and avoid an infinite recursive loop between
// disk!UpdateRemovableGeometry() and ntos!IoReadPartitionTable().
//
ULONG UpdateRemovableGeometryCount;
#endif
} DISK_DATA, *PDISK_DATA;
//
@ -1147,6 +1156,15 @@ CreatePartitionDeviceObjects(
}
#ifdef __REACTOS__
//
// HACK so that we can use NT5+ NTOS functions with this NT4 driver
// for removable devices and avoid an infinite recursive loop between
// disk!UpdateRemovableGeometry() and ntos!IoReadPartitionTable().
//
diskData->UpdateRemovableGeometryCount = 0;
#endif
//
// Create objects for all the partitions on the device.
//
@ -4456,6 +4474,21 @@ Return Value:
return(status);
}
#ifdef __REACTOS__
//
// HACK so that we can use NT5+ NTOS functions with this NT4 driver
// for removable devices and avoid an infinite recursive loop between
// disk!UpdateRemovableGeometry() and ntos!IoReadPartitionTable().
//
// Check whether the update-count is greater or equal than one
// (and increase it) and if so, reset it and return success.
if (diskData->UpdateRemovableGeometryCount++ >= 1)
{
diskData->UpdateRemovableGeometryCount = 0;
return(STATUS_SUCCESS);
}
#endif
//
// Read the partition table again.
//
@ -4465,6 +4498,15 @@ Return Value:
TRUE,
&partitionList);
#ifdef __REACTOS__
//
// HACK so that we can use NT5+ NTOS functions with this NT4 driver
// for removable devices and avoid an infinite recursive loop between
// disk!UpdateRemovableGeometry() and ntos!IoReadPartitionTable().
//
// Inconditionally reset the update-count.
diskData->UpdateRemovableGeometryCount = 0;
#endif
if (!NT_SUCCESS(status)) {