Simultaneous hardware access using multiple tools¶
SMBus (System Management Bus)¶
Argus Monitor SMBus access is needed for memory temperatures, mainboard RGB and memory modules RGB.
Argus Monitor disables its SMBus access if it detects some other application which is known to access the SMBus without using the proper locking mechanism for SMBus shared access.
Unsynchronized SMBus access is dangerous and might cause weird issues like system shutdowns, BSOD and in rare cases may corrupt the SPD chips on memory modules.
Tools such as Aida64, HWiNFO, SIV, Argus Monitor all share a specific lock (or mutex) to ensure secure access to the SMBus, even when multiple programs are running simultaneously.
This mutex is named:
Global\Access_SMBUS.HTP.Method.
Unfortunately, some vendors like Asus or Corsair refuse to use this mutex and behave like they are the only one to access the SMBus.
Argus Monitor preemptively avoids potential issues for its users by automatically disabling its own SMBus access in such cases. If you need SMBus access in Argus Monitor (for memory temperatures and RGB) we recommend to stop using tools from Asus and Corsair.
SuperIO Chips¶
For accessing the SuperIO chip on the mainboard (which delivers mainboard temperatures and mainboard fan data), a similar mutex is used, this one is named:
Global\Access_ISABUS.HTP.Method.
Like with the SMBus mutex, for safe handling, all programs accessing the SuperIO chip need to use this mutex when multiple programs are running simultaneously.
Known mutex usage of various low-level hardware access tools¶
Alphabetical Order
| Vendor | SMBus Mutex | ISABus Mutex | Remarks |
|---|---|---|---|
| Aida64 | - | ||
| Argus Monitor | - | ||
| Asus AI Suite, Armoury Crate, etc. | - | ||
| Corsair Link, iCUE | - | ||
| CPU-Z | - | ||
| HWiNFO | - | ||
| HWMonitor | - | ||
| Libre Hardware Monitor | no SMBus mutex | ||
| OpenRGB | needs to be verified | ||
| SignalRGB | Unknown | ||
| SIV System Information Viewer | - | ||
| SpeedFan | - |
| Mutex | Global Name | Used for |
|---|---|---|
| SMBus Mutex | Global\Access_SMBUS.HTP.Method | memory temperatures, mainboard RGB, memory modules RGB, power chips connected to SMBus |
| ISABus Mutex | Global\Access_ISABUS.HTP.Method | SuperIO chips (mainboard temperatures, mainboard fans) |
Links and Quotations¶
Fiery, author of Aida64¶
"The folks at Corsair are telling you the truth. What they wouldn't tell you is that the ball is rolling in their court. In their previous software (called Corsair Link) they used to implement the necessary standardized synchronization mutexes that allowed their software to work with all major 3rd party monitoring software out there, like AIDA64, CPU-Z, HWiNFO, HWMonitor, SIV, etc. What happened is they discontinued using those mutexes and let the collisions happen, and continue to let them happen despite the fact that multiple developers (including us of course) have been pestering them for over a year now. I don't think it's wise to stick to their position of one and only one software to rule all Corsair hardware (e.g. Corsair iCUE), but it's their position and they seem to want to stick to it no matter what."
forums.aida64.com/topic/5097-aida64-and-icue-commander-pro/
Martin, author of HWiNFO¶
"Well, yes there's a problem with such software as many vendors refuse to play fair and implement synchronization with other applications."
hwinfo.com/forum/threads/hwinfo64-causes-ram-lighting-issues-with-patriot-viper-rgb-3600mhz.6925/
"Then that's a different conflict on SMBus. Unfortunately Corsair is known for not playing nice with anything else and no will to fix that." "No way to fix this without Corsair's cooperation, but there's doesn't seem to be any interest from their side."
hwinfo.com/forum/threads/7-42-update-causes-icue-fans-to-flash-off-on-every-2-4-seconds.8776/page-5
Ray, author of SIV¶
"When there is a hardware access contention/race issue this will only happen from time-to-time. The fundamental problem is that some programs fail to use global locks and assume they are the only program accessing the hardware."
forum.corsair.com/forums/topic/107784-corsair-link-displaying-00-for-devices/page/2/
"If you have ASUS AI Suite active you should not use any other sensor monitoring programs active as it is poorly engineered an fails to use the Global\Access_ISABUS.HTP.Method + Global\Access_SMBUS.HTP.Method + Global\Access_EC + etc. named mutexes to interlock access to the sensors. If you were doing this it could be the root cause of the system reboots. That said I agree that Corsair Link is not of an acceptable quality."
forum.corsair.com/forums/topic/126100-corsair-link-the-longest-running-joke-in-pc-history/
Sample Code¶
C Sample Code for creating the mutex with the proper access rights (by Ray, author of SIV)
HANDLE CreateWorldMutex(wchar_t const* const mutex_name) // Create/Open a Mutex with
{ // appropriate protection
HANDLE mhl; // Mutex Handle
SID* sid {}; // Security ID
SECURITY_ATTRIBUTES sab; // Security Attributes Block
SECURITY_DESCRIPTOR sdb; // Security Descriptor Block
ACL acl[1024]; // ACL Area
SID_IDENTIFIER_AUTHORITY swa[1] = { SECURITY_WORLD_SID_AUTHORITY }; // World access
InitializeSecurityDescriptor(&sdb, SECURITY_DESCRIPTOR_REVISION); // setup Security Descriptor
if (AllocateAndInitializeSid(swa, // SID Identifier Authority
1, // Sub Authority count
SECURITY_WORLD_RID, // Sub Authority 0
0, // Sub Authority 1
0, // Sub Authority 2
0, // Sub Authority 3
0, // Sub Authority 4
0, // Sub Authority 5
0, // Sub Authority 6
0, // Sub Authority 7
(void**)&sid)
&& // returned SID
(InitializeAcl(acl, // ACL setup OK and
sizeof(acl), //
ACL_REVISION))
&& //
(AddAccessAllowedAce(acl, // ACE setup OK and
ACL_REVISION, //
MUTANT_ALL_ACCESS, // Access Rights Mask
sid))) {
SetSecurityDescriptorDacl(&sdb, TRUE, acl, FALSE); // yes, setup world access
} else {
SetSecurityDescriptorDacl(&sdb, TRUE, nullptr, FALSE); // no, setup with default
}
sab.nLength = sizeof(sdb); // setup Security Attributes Block
sab.bInheritHandle = FALSE; //
sab.lpSecurityDescriptor = &sdb; //
if (((mhl = CreateMutex(&sab, // Create/Open with Global\ Unprotected or
FALSE, //
mutex_name))
!= nullptr)
|| //
((mhl = OpenMutex(READ_CONTROL | MUTANT_QUERY_STATE | SYNCHRONIZE, // Open with Global\ Protected (probably Aquasuite)
FALSE, //
mutex_name))
!= nullptr)) { } //
if (sid) { // need to free the SID ?
FreeSid(sid); // yes, free it
}
return mhl; // return the handle
}
License¶
Creative Commons BY-SA
Give Credit (Attribution), ShareAlike

The information on this page is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.