windows-nt/Source/XPSP1/NT/sdktools/sysparse/nt5net.cpp
2020-09-26 16:20:57 +08:00

157 lines
3.8 KiB
C++

#include "globals.h"
kNT5NetWalk::kNT5NetWalk(kLogFile *Proc, HWND hIn)
{
LogProc=Proc;
hMainWnd=hIn;
}
BOOL kNT5NetWalk::Begin()
{
DWORD dwRet=0;
dwCurrentKey=0;
dwLevel2Key=0;
strcpy(szRootKeyString, "SYSTEM\\CurrentControlSet\\Control\\Network");
dwRet=RegOpenKeyEx(
HKEY_LOCAL_MACHINE,
szRootKeyString,
0,
KEY_READ,
&hkeyRoot);
if (dwRet==ERROR_SUCCESS)
{
//MessageBox(GetFocus(), "Returning REG_SUCCESS", "SP", MB_OK);
return REG_SUCCESS;
}
else
{
char szMessage[1024];
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, dwRet,
NULL, szMessage, 1024, 0);
printf("**********\r\n");
printf("%s[%d] Error: %s", __FILE__, __LINE__, szMessage);
printf("**********\r\n");
//MessageBox(GetFocus(), "Returning REG_FAIL", "SP", MB_OK);
return REG_FAILURE;
}
//else if (dwPlatform==PLATFORM_NT)
//MessageBox(GetFocus(), "Returning REG_FAIL", "SP", MB_OK);
return REG_FAILURE;
}
BOOL kNT5NetWalk::Walk()
{
DWORD dwIndex = 0;
PTCHAR szName = NULL;
DWORD dwSizeName = MAX_PATH * 4;
LogProc->LogString(",#NT5_Net_Components,,\r\n");
szName = (PTCHAR)malloc(dwSizeName);
if(!szName) {
return FALSE;
}
while (ERROR_SUCCESS == RegEnumKeyEx(hkeyRoot, dwIndex, szName, &dwSizeName, NULL, NULL, NULL, NULL))
{
TCHAR szFull[MAX_PATH * 4];
wsprintf(szFull, "SYSTEM\\CurrentControlSet\\Control\\Network\\%s", szName);
GetKeyValues(szFull);
SearchSubKeys(szFull);
dwSizeName = MAX_PATH * 4;
dwIndex++;
}
return TRUE;
}
BOOL kNT5NetWalk::SearchSubKeys(PTCHAR szName)
{
HKEY hKeyTemp;
DWORD dwRet = 0;
PTCHAR szName2 = NULL;
DWORD dwIndex = 0;
DWORD dwSizeName = MAX_PATH * 4;
TCHAR szFull[MAX_PATH * 4];
if(!szName)
return FALSE;
szName2 = (PTCHAR)malloc(MAX_PATH * 4);
if(!szName2)
return FALSE;
if(ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, szName, 0, KEY_READ, &hKeyTemp)) {
free(szName2);
return FALSE;
}
while (ERROR_SUCCESS == RegEnumKeyEx(hKeyTemp, dwIndex, szName2, &dwSizeName, NULL, NULL, NULL, NULL)) {
wsprintf(szFull, "%s\\%s", szName, szName2);
GetKeyValues(szFull);
SearchSubKeys(szFull);
dwSizeName = MAX_PATH * 4;
dwIndex++;
}
free(szName2);
return TRUE;
}
BOOL kNT5NetWalk::GetKeyValues(char *szName)
{
HKEY hkeyUninstallKey;
char szFullKey[1024];
PUCHAR szProductName=(PUCHAR)malloc(1024);
DWORD dwProductSize=1024;
DWORD dwRet=0;
DWORD dwType=REG_SZ;
strcpy(szFullKey, szRootKeyString);
strcat(szFullKey, "\\");
strcat(szFullKey, szName);
dwRet=RegOpenKeyEx(HKEY_LOCAL_MACHINE, szName, 0,
KEY_READ, &hkeyUninstallKey);
if (dwRet==ERROR_SUCCESS)
{
dwRet=RegQueryValueEx(hkeyUninstallKey, "ComponentId", NULL, &dwType,
szProductName, &dwProductSize);
if (dwRet==ERROR_SUCCESS)
{
printf("Product = %s\r\n", szProductName);
LogProc->StripCommas((char*)szProductName);
LogProc->LogString(",%s,\r\n", szProductName);
free(szProductName);
RegCloseKey(hkeyUninstallKey);
return REG_SUCCESS;
}
/*
else
{
printf("Product = %s\r\n", szName);
LogProc->StripCommas(szName);
LogProc->LogString(",%s,\r\n", szName);
free(szProductName);
RegCloseKey(hkeyUninstallKey);
return REG_SUCCESS;
//Check for other ways to get product name
}
*/
}
else
{
char szMessage[1024];
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, dwRet,
NULL, szMessage, 1024, 0);
printf("**********\r\n");
printf("%s[%d] Error: %s",__FILE__, __LINE__, szMessage);
printf("**********\r\n");
free(szProductName);
RegCloseKey(hkeyUninstallKey);
return REG_FAILURE;
}
free(szProductName);
RegCloseKey(hkeyUninstallKey);
return REG_FAILURE;
}