Skip to content

Commit 19b15cc

Browse files
committed
devicetree force republishing
1 parent 24725cb commit 19b15cc

File tree

3 files changed

+48
-24
lines changed

3 files changed

+48
-24
lines changed

SystemInformer/devprv.c

Lines changed: 37 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3402,19 +3402,6 @@ HICON PhGetDeviceIcon(
34023402
return iconHandle;
34033403
}
34043404

3405-
PPH_DEVICE_TREE PhReferenceDeviceTree(
3406-
VOID
3407-
)
3408-
{
3409-
PPH_DEVICE_TREE deviceTree;
3410-
3411-
PhAcquireFastLockShared(&PhpDeviceTreeLock);
3412-
PhSetReference(&deviceTree, PhpDeviceTree);
3413-
PhReleaseFastLockShared(&PhpDeviceTreeLock);
3414-
3415-
return deviceTree;
3416-
}
3417-
34183405
ULONG PhpGenerateInstanceIdHash(
34193406
_In_ PPH_STRINGREF InstanceId
34203407
)
@@ -4051,22 +4038,31 @@ PPH_DEVICE_TREE PhpCreateDeviceTree(
40514038
return tree;
40524039
}
40534040

4054-
VOID PhpDeviceNotify(
4055-
_In_ PLIST_ENTRY List
4041+
VOID PhpPublishDeviceTree(
4042+
VOID
40564043
)
40574044
{
40584045
PPH_DEVICE_TREE newTree;
40594046
PPH_DEVICE_TREE oldTree;
40604047

4061-
// We process device notifications in blocks so that bursts of device changes
4062-
// don't each trigger a new tree each time.
4063-
40644048
newTree = PhpCreateDeviceTree();
40654049
PhAcquireFastLockExclusive(&PhpDeviceTreeLock);
40664050
oldTree = PhpDeviceTree;
40674051
PhpDeviceTree = newTree;
40684052
PhReleaseFastLockExclusive(&PhpDeviceTreeLock);
40694053

4054+
PhDereferenceObject(oldTree);
4055+
}
4056+
4057+
VOID PhpDeviceNotify(
4058+
_In_ PLIST_ENTRY List
4059+
)
4060+
{
4061+
// We process device notifications in blocks so that bursts of device changes
4062+
// don't each trigger a new tree each time.
4063+
4064+
PhpPublishDeviceTree();
4065+
40704066
while (!IsListEmpty(List))
40714067
{
40724068
PPH_DEVICE_NOTIFY entry;
@@ -4077,8 +4073,6 @@ VOID PhpDeviceNotify(
40774073

40784074
PhDereferenceObject(entry);
40794075
}
4080-
4081-
PhDereferenceObject(oldTree);
40824076
}
40834077

40844078
_Function_class_(PUSER_THREAD_START_ROUTINE)
@@ -4243,3 +4237,26 @@ BOOLEAN PhDeviceProviderInitialization(
42434237

42444238
return initialized;
42454239
}
4240+
4241+
PPH_DEVICE_TREE PhReferenceDeviceTree(
4242+
VOID
4243+
)
4244+
{
4245+
return PhReferenceDeviceTreeEx(FALSE);
4246+
}
4247+
4248+
PPH_DEVICE_TREE PhReferenceDeviceTreeEx(
4249+
_In_ BOOLEAN ForceRefresh
4250+
)
4251+
{
4252+
PPH_DEVICE_TREE deviceTree;
4253+
4254+
if (ForceRefresh)
4255+
PhpPublishDeviceTree();
4256+
4257+
PhAcquireFastLockShared(&PhpDeviceTreeLock);
4258+
PhSetReference(&deviceTree, PhpDeviceTree);
4259+
PhReleaseFastLockShared(&PhpDeviceTreeLock);
4260+
4261+
return deviceTree;
4262+
}

SystemInformer/include/devprv.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,13 @@ PhReferenceDeviceTree(
384384
VOID
385385
);
386386

387+
PHAPPAPI
388+
PPH_DEVICE_TREE
389+
NTAPI
390+
PhReferenceDeviceTreeEx(
391+
_In_ BOOLEAN ForceRefresh
392+
);
393+
387394
PHAPPAPI
388395
_Success_(return != NULL)
389396
_Must_inspect_result_

plugins/HardwareDevices/devicetree.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ PDEVICE_TREE DeviceTreeCreateIfNecessary(
204204
PDEVICE_TREE deviceTree;
205205
PPH_DEVICE_TREE tree;
206206

207-
tree = PhReferenceDeviceTree();
207+
tree = PhReferenceDeviceTreeEx(Force);
208208
if (Force || !DeviceTree || DeviceTree->Tree != tree)
209209
{
210210
deviceTree = DeviceTreeCreate(tree);
@@ -258,7 +258,7 @@ NTSTATUS NTAPI DeviceTreePublishThread(
258258
return STATUS_SUCCESS;
259259
}
260260

261-
VOID DeviceTreePublicAsync(
261+
VOID DeviceTreePublishAsync(
262262
_In_ BOOLEAN Force
263263
)
264264
{
@@ -765,7 +765,7 @@ BOOLEAN NTAPI DeviceTreeCallback(
765765

766766
if (republish)
767767
{
768-
DeviceTreePublicAsync(TRUE);
768+
DeviceTreePublishAsync(TRUE);
769769
}
770770
else if (invalidate)
771771
{
@@ -1246,7 +1246,7 @@ BOOLEAN DevicesTabPageCallback(
12461246
{
12471247
DeviceTabSelected = (BOOLEAN)Parameter1;
12481248
if (DeviceTabSelected)
1249-
DeviceTreePublicAsync(FALSE);
1249+
DeviceTreePublishAsync(FALSE);
12501250
}
12511251
break;
12521252
case MainTabPageFontChanged:

0 commit comments

Comments
 (0)