4
1
How can I determine the size of my registry?
I'm trying to backup my registry, and its taking a long time.
I din't think there was a file path I could go to to check its' properties like any other file? How can I determine its size?
4
1
How can I determine the size of my registry?
I'm trying to backup my registry, and its taking a long time.
I din't think there was a file path I could go to to check its' properties like any other file? How can I determine its size?
8
%windir%\System32\config
and %USERPROFILE%\NTUSER.DAT
. The config folder will be hidden, but contains all the registry hives, EXCEPT for the HKEY_CURRENT_USER, which is the NTUSER.DAT file
1
To get the database size of the Registry, you can query the WMI Win32_Registry class in Powershell, full script here.
$data=Get-WmiObject -Class Win32_Registry -ErrorAction Stop
#Format the results and write an object to the pipeline
$data | Select-Object -Property @{Name="Computername";Expression={$_.__SERVER}},
Status,
@{Name="Current Size (Mb)";Expression={$_.CurrentSize}},
@{Name="Max Size (Mb)";Expression={$_.MaximumSize}},
@{Name="Free Size (Mb)";Expression={$_.MaximumSize - $_.CurrentSize}},
@{Name="Percent Free (%)";Expression={ (1 - ($_.CurrentSize/$_.MaximumSize))*100 }},
@{Name="Created";Expression={$_.ConvertToDateTime($_.InstallDate)}},
@{Name="Age";Expression={(Get-Date) - ( $_.ConvertToDateTime($_.InstallDate)) }}
1
If you can program a bit, see https://docs.microsoft.com/en-us/windows/desktop/sysinfo/determining-the-registry-size.
Copy:
//*******************************************************************
//
// Determines the current and maximum registry size.
//
//*******************************************************************
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <pdh.h>
PDH_STATUS GetRegistrySize( LPTSTR szMachineName,
LPDWORD lpdwCurrentSize, LPDWORD lpdwMaximumSize );
//*******************************************************************
//
// Entry point for the program. This function demonstrates how to
// use the GetRegistrySize function implemented below.
//
// It will use the first argument, if present, as the name of the
// computer whose registry you wish to determine. If unspecified,
// it will use the local computer.
//*******************************************************************
int _tmain( int argc, TCHAR *argv[] )
{
LPTSTR szMachineName = NULL;
PDH_STATUS pdhStatus = 0;
DWORD dwCurrent = 0;
DWORD dwMaximum = 0;
// Allow a computer name to be specified on the command line.
if ( argc > 1 )
szMachineName = argv[1];
// Get the registry size.
pdhStatus=GetRegistrySize(szMachineName, &dwCurrent, &dwMaximum);
// Print the results.
if ( pdhStatus == ERROR_SUCCESS )
{
_tprintf( TEXT("Registry size: %ld bytes\n"), dwCurrent );
_tprintf( TEXT("Max registry size: %ld bytes\n"), dwMaximum );
}
else
{
// If the operation failed, print the PDH error message.
LPTSTR szMessage = NULL;
FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_HMODULE,
GetModuleHandle( TEXT("PDH.DLL") ), pdhStatus,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
szMessage, 0, NULL );
_tprintf( TEXT("GetRegistrySize failed: %s"), szMessage );
LocalFree( szMessage );
}
return 0;
}
//*******************************************************************
//
// Retrieves the current and maximum registry size. It gets this
// information from the raw counter values for the "% Registry Quota
// In Use" performance counter within the System object.
//
// PARAMETERS:
// szMachineName - Null-terminated string that specifies the
// name of the computer whose registry you wish to query.
// If this parameter is NULL, the local computer is used.
//
// lpdwCurrentSize - Receives the current registry size.
//
// lpdwMaximumSize - Receives the maximum registry size.
//
// RETURN VALUE:
// ERROR_SUCCESS if successful. Otherwise, the function
// returns a PDH error code. These error codes can be
// found in PDHMSG.H. A textual error message can be
// retrieved from PDH.DLL using the FormatMessage function.
//
//******************************************************************
PDH_STATUS GetRegistrySize( LPTSTR szMachineName,
LPDWORD lpdwCurrentSize, LPDWORD lpdwMaximumSize )
{
PDH_STATUS pdhResult = 0;
TCHAR szCounterPath[1024];
DWORD dwPathSize = 1024;
PDH_COUNTER_PATH_ELEMENTS pe;
PDH_RAW_COUNTER pdhRawValues;
HQUERY hQuery = NULL;
HCOUNTER hCounter = NULL;
DWORD dwType = 0;
// Open PDH query
pdhResult = PdhOpenQuery( NULL, 0, &hQuery );
if ( pdhResult != ERROR_SUCCESS )
return pdhResult;
__try
{
// Create counter path
pe.szMachineName = szMachineName;
pe.szObjectName = TEXT("System");
pe.szInstanceName = NULL;
pe.szParentInstance = NULL;
pe.dwInstanceIndex = 1;
pe.szCounterName = TEXT("% Registry Quota In Use");
pdhResult = PdhMakeCounterPath( &pe, szCounterPath,
&dwPathSize, 0 );
if ( pdhResult != ERROR_SUCCESS )
__leave;
// Add the counter to the query
pdhResult=PdhAddCounter(hQuery, szCounterPath, 0, &hCounter);
if ( pdhResult != ERROR_SUCCESS )
__leave;
// Run the query to collect the performance data
pdhResult = PdhCollectQueryData( hQuery );
if ( pdhResult != ERROR_SUCCESS )
__leave;
// Retrieve the raw counter data:
// The dividend (FirstValue) is the current registry size
// The divisor (SecondValue) is the maximum registry size
ZeroMemory( &pdhRawValues, sizeof(pdhRawValues) );
pdhResult = PdhGetRawCounterValue( hCounter, &dwType,
&pdhRawValues );
if ( pdhResult != ERROR_SUCCESS )
__leave;
// Store the sizes in variables.
if ( lpdwCurrentSize )
*lpdwCurrentSize = (DWORD) pdhRawValues.FirstValue;
if ( lpdwMaximumSize )
*lpdwMaximumSize = (DWORD) pdhRawValues.SecondValue;
}
__finally
{
// Close the query
PdhCloseQuery( hQuery );
}
return 0;
}
0
There's also the dureg
utility:
Description: http://support.microsoft.com/kb/317382
The download in the above description is wrong, but you can google dureg
and find the executable. For example: http://www.pctools.com/guides/software/detail/30/?act=download
Note that the file size is not necessarily the same as the registry size. As with many other binary database formats, it's possible that part of the file was used in the past but not anymore (similar to how file systems get fragmented). – user1686 – 2012-01-03T23:42:33.450
@grawity That's true, but totally forgotten – Canadian Luke – 2012-01-03T23:43:38.583
@surfasb But to attract the "experts", you need to be :P – Canadian Luke – 2012-01-04T00:46:32.990
@grawity: That's awesome. – surfasb – 2012-01-04T01:31:35.230