How and where is AI data collected on the client
Many folks wanted to know what we do on the client wrt data collection. Since the provider is already documented in the SCCM 2007 SDK, we'll stick to what else we do.
Answers
Special thanks to Jagadeesh, our Development Manager, for putting this together.
Source 1
We use the Windows Installer APIs to enumerate installed packages and retrieve various properties. Specifically use MSIEnumProducts to retrieve ProductCode and MsiGetProductInfo to get INSTALLPROPERTY_INSTALLEDPRODUCTNAME, INSTALLPROPERTY_VERSIONSTRING, INSTALLPROPERTY_PUBLISHER.
We compute a unique ID using the name, version and publisher obtained above, i.e., SoftwarePropertiesHash.
Source 2
Then we enumerate the registry keys under HKLM\Software\Microsoft\Windows\CurrentVersion\Installer\UsersData\[User SID]\Products
For each key, take the regkey value at this level, run it through an internal algorithm to obtain the GUID that we set for ProductCode
Read DisplayName, DisplayVersion, and Publisher and again compute SoftwarePropertiesHash using these three.
Generally, the values gathered here are same as Source 1, i.e., they are both MSI data, it is just for some historically backwards compatibility reasons we collect both.
Source 3
Then we enumerate the registry keys under HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
For each key, we map the value to ProductCode
Read DisplayName, DisplayVersion, Publisher and again compute SoftwarePropertiesHash
We then merge data collected from all three sources for the software with the preference order as listed above and send that up through SCCM client via hardware inventory. We then match this to the catalog.
Hi LJ,
The catalog can be seen with a series of simple SQL queries, in the same manner that we generate reports.
You can run a query against the catalog and see if a given software title appears. The easiest way is to use SQL to look at the LU_SoftwareList table under the SMS/SCCM database. In this case, I’d look at CommonPublisher (e.g. Microsoft or any other vendor you are interested in) and then simply look for the exact version of the app you are interested in.
Also, keep in mind that with AI 1.5 you will be able to create our own families and categories (or change existing ones) for any software. We call these local edits and there's a post that talk more about it in the Forum.
Hi Mark,
It's our pleasure.
There are no current plans to change this, but if it changes in the next release of SMS (currently referred to as SMSv5) then we'd be happy to share the new logic.
- My pleasure
That is absolutely correct.And I wouldn't say your understanding of AI is limited at all (even at this point
)
All Replies
Special thanks to Jagadeesh, our Development Manager, for putting this together.
Source 1
We use the Windows Installer APIs to enumerate installed packages and retrieve various properties. Specifically use MSIEnumProducts to retrieve ProductCode and MsiGetProductInfo to get INSTALLPROPERTY_INSTALLEDPRODUCTNAME, INSTALLPROPERTY_VERSIONSTRING, INSTALLPROPERTY_PUBLISHER.
We compute a unique ID using the name, version and publisher obtained above, i.e., SoftwarePropertiesHash.
Source 2
Then we enumerate the registry keys under HKLM\Software\Microsoft\Windows\CurrentVersion\Installer\UsersData\[User SID]\Products
For each key, take the regkey value at this level, run it through an internal algorithm to obtain the GUID that we set for ProductCode
Read DisplayName, DisplayVersion, and Publisher and again compute SoftwarePropertiesHash using these three.
Generally, the values gathered here are same as Source 1, i.e., they are both MSI data, it is just for some historically backwards compatibility reasons we collect both.
Source 3
Then we enumerate the registry keys under HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
For each key, we map the value to ProductCode
Read DisplayName, DisplayVersion, Publisher and again compute SoftwarePropertiesHash
We then merge data collected from all three sources for the software with the preference order as listed above and send that up through SCCM client via hardware inventory. We then match this to the catalog.
- Hi Dan,
Thanks to you and Jagadeesh for pulling this together.
Is the SoftwarePropertiesHash algorithim finalized such that the values seen today in AI 1.5 will remain the same throughout coming releases.? Will you share the algorithm with us?
Regards
Mark Hi Mark,
It's our pleasure.
There are no current plans to change this, but if it changes in the next release of SMS (currently referred to as SMSv5) then we'd be happy to share the new logic.
.....
We then merge data collected from all three sources for the software with the preference order as listed above and send that up through SCCM client via hardware inventory. We then match this to the catalog.
...
Dan, how can we check the catalog? We want to verify some of our specific products are predefined in the catalog. And how it's matched? Thanks in advance!
Hi LJ,
The catalog can be seen with a series of simple SQL queries, in the same manner that we generate reports.
You can run a query against the catalog and see if a given software title appears. The easiest way is to use SQL to look at the LU_SoftwareList table under the SMS/SCCM database. In this case, I’d look at CommonPublisher (e.g. Microsoft or any other vendor you are interested in) and then simply look for the exact version of the app you are interested in.
Also, keep in mind that with AI 1.5 you will be able to create our own families and categories (or change existing ones) for any software. We call these local edits and there's a post that talk more about it in the Forum.
Thanks, Dan!
LU_SoftwareList is exactly what I'm looking for.
- My pleasure
Dan,
Please could you confirm - in my (so far limited ) experience with AI, applications which exist in add/remove programs or which have been installed via MSI will be reported on even if they do not exist in the catalogue but will not benefit from categorisation or normalisation, is this correct ?
That is absolutely correct.And I wouldn't say your understanding of AI is limited at all (even at this point
)

