System Center Configuration Manager 2007 fails to inventory Registry keys on 64-bit clients

System Center Configuration Manager 2007 fails to inventory Registry keys on 64-bit clients

  • Comments 1
  • Likes

hotfixJust a quick heads up on another new ConfigMgr KB article we posted today:

=====

Symptoms

You may find that you are unable to inventory HKLM\Software registry keys on 64-bit (x64) Windows client machines without first populating the data under the Wow6432Node key in the registry on these clients.

Note No other symptoms or errors may be noticed.

Cause

This happens because the class is defined for only the 32-bit (x86) architecture.

Resolution

To resolve this issue and get the 64-bit clients to report in the data without adding it to the wow6432node in the registry you will need to modify the Configuration.mof and SMS_def.mof files as indicated below. You will have two different custom classes, one with _64 appended to it.

Configuration.Mof changes:

// this section tells the inventory agent what to collect
#pragma namespace ("\\\\.\\root\\cimv2")
#pragma deleteclass("MS_ApplicationName", NOFAIL)
[DYNPROPS]
Class MS_ApplicationName

{

[key] string KeyName;
String StartTime;
String EndTime;
String Status;

};

[DYNPROPS]
Instance of MS_ApplicationName

{

keyname="ApplicationName";
[PropertyContext("Local|HKEY_LOCAL_MACHINE\\SOFTWARE\\SoftwareVendorName\\AppRegKey\\ApplicationName|StartTime"),Dynamic,Provider("RegPropProv")] StartTime;

[PropertyContext("Local|HKEY_LOCAL_MACHINE\\SOFTWARE\\SoftwareVendorName\\AppRegKey\\ApplicationName|EndTime"),Dynamic,Provider("RegPropProv")] EndTime;

[PropertyContext("Local|HKEY_LOCAL_MACHINE\\SOFTWARE\\SoftwareVendorName\\AppRegKey\\ApplicationName|Status"),Dynamic,Provider("RegPropProv")] Status;

};

#pragma namespace ("\\\\.\\root\\cimv2")
#pragma deleteclass("MS_ApplicationName_64", NOFAIL)

[DYNPROPS]
Class MS_ApplicationName_64

{

[key] string KeyName;
String StartTime;
String EndTime;
String Status;

};

[DYNPROPS]

Instance of MS_ApplicationName_64

{

keyname="ApplicationName";

[PropertyContext("Local|HKEY_LOCAL_MACHINE\\SOFTWARE\\SoftwareVendorName\\AppRegKey\\ApplicationName|StartTime"),Dynamic,Provider("RegPropProv")] StartTime;

[PropertyContext("Local|HKEY_LOCAL_MACHINE\\SOFTWARE\\SoftwareVendorName\\AppRegKey\\ApplicationName|EndTime"),Dynamic,Provider("RegPropProv")] EndTime;

[PropertyContext("Local|HKEY_LOCAL_MACHINE\\SOFTWARE\\SoftwareVendorName\\AppRegKey\\ApplicationName|Status"),Dynamic,Provider("RegPropProv")] Status;

};

SMS_Def.mof changes:

// this section tells the the inventory agent what to report to the server
#pragma namespace ("\\\\.\\root\\cimv2\\SMS")
#pragma deleteclass("MS_ApplicationName", NOFAIL)
[SMS_Report(TRUE),SMS_Group_Name("MS_ApplicationName"),SMS_Class_ID("SoftwareVendorName|MS_ApplicationName|1.0"),

SMS_Context_1("__ProviderArchitecture=32|uint32"),
SMS_Context_2("__RequiredArchitecture=true|boolean")]
Class MS_ApplicationName: SMS_Class_Template

{

[SMS_Report(TRUE),key] string KeyName;
[SMS_Report(TRUE)] String StartTime;
[SMS_Report(TRUE)] String EndTime;
[SMS_Report(TRUE)] String Status;

};

#pragma namespace ("\\\\.\\root\\cimv2\\SMS")
#pragma deleteclass("MS_ApplicationName_64", NOFAIL)
[SMS_Report(TRUE),SMS_Group_Name("MS_ApplicationName_64"),SMS_Class_ID("SoftwareVendorName |MS_ApplicationName_64|1.0"),

SMS_Context_1("__ProviderArchitecture=64|uint32"),
SMS_Context_2("__RequiredArchitecture=true|boolean")]
Class MS_ApplicationName_64 : SMS_Class_Template

{

[SMS_Report(TRUE),key] string KeyName;
[SMS_Report(TRUE)] String StartTime;
[SMS_Report(TRUE)] String EndTime;
[SMS_Report(TRUE)] String Status;

};

Once you have backed up and made the changes outlined above on the server, Run mofcomp.exe on both the sms_def.mof and configuration.mof as follows:

%WINDIR%\System32\WBEM\Mofcomp.exe "X:\Program Files\Microsoft Configuration Manager\Inboxes\clifiles.src\hinv\sms_def.mof"
%WINDIR%\System32\WBEM\Mofcomp.exe "X:\Program Files\Microsoft Configuration Manager\Inboxes\clifiles.src\hinv\configuration.mof"

Where X:\ is the drive where Configuration Manager 2007 is installed.

Once complete, allow the clients to perform the hardware inventory cycle to pick up the changes and start reporting. At this point it should start working for both your x86 and x64 clients.

Note Be sure to fully test this resolution in your lab to ensure that it is suitable for your environment.

=====

For the most current version of this article please see the following:

2617545: System Center Configuration Manager 2007 fails to inventory Registry keys on 64-bit clients

J.C. Hornbeck | System Center Knowledge Engineer

App-V Team blog: http://blogs.technet.com/appv/
AVIcode Team blog: http://blogs.technet.com/b/avicode
ConfigMgr Support Team blog: http://blogs.technet.com/configurationmgr/
DPM Team blog: http://blogs.technet.com/dpm/
MED-V Team blog: http://blogs.technet.com/medv/
OOB Support Team blog: http://blogs.technet.com/oob/
Opalis Team blog: http://blogs.technet.com/opalis
Orchestrator Support Team blog: http://blogs.technet.com/b/orchestrator/
OpsMgr Support Team blog: http://blogs.technet.com/operationsmgr/
SCMDM Support Team blog: http://blogs.technet.com/mdm/
SCVMM Team blog: http://blogs.technet.com/scvmm
Server App-V Team blog: http://blogs.technet.com/b/serverappv
Service Manager Team blog: http://blogs.technet.com/b/servicemanager
System Center Essentials Team blog: http://blogs.technet.com/b/systemcenteressentials
WSUS Support Team blog: http://blogs.technet.com/sus/

clip_image001 clip_image002

Your comment has been posted.   Close
Thank you, your comment requires moderation so it may take a while to appear.   Close
Leave a Comment
  • Will the steps outlined in this article be necessary under SCCM 2012?