mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-08-26 19:33:31 +00:00
[NETSH] Fix version info and add version callback checks
This commit is contained in:
@@ -90,10 +90,14 @@ PrintShortGroupCommands(
|
||||
pCommand = pGroup->pCommandListHead;
|
||||
while (pCommand != NULL)
|
||||
{
|
||||
_swprintf(szBuffer1, L"%s %s", pGroup->pwszCmdGroupToken, pCommand->pwszCmdToken);
|
||||
LoadStringW(pContext->hModule, pCommand->dwShortCmdHelpToken, szBuffer2, _countof(szBuffer2));
|
||||
DPRINT("CheckVersion (Command) %S %S", pGroup->pwszCmdGroupToken, pCommand->pwszCmdToken);
|
||||
if (CheckOsVersion(pCommand->pfnOsVersionCheck))
|
||||
{
|
||||
_swprintf(szBuffer1, L"%s %s", pGroup->pwszCmdGroupToken, pCommand->pwszCmdToken);
|
||||
LoadStringW(pContext->hModule, pCommand->dwShortCmdHelpToken, szBuffer2, _countof(szBuffer2));
|
||||
|
||||
ConPrintf(StdOut, L"%-15s - %s", szBuffer1, szBuffer2);
|
||||
ConPrintf(StdOut, L"%-15s - %s", szBuffer1, szBuffer2);
|
||||
}
|
||||
pCommand = pCommand->pNext;
|
||||
}
|
||||
}
|
||||
@@ -165,7 +169,7 @@ PrintContext(
|
||||
pHelpArray[dwIndex].Type = Command;
|
||||
pHelpArray[dwIndex].pszCommand = pCommand->pwszCmdToken;
|
||||
pHelpArray[dwIndex].dwHelpId = pCommand->dwShortCmdHelpToken;
|
||||
// pHelpArray[dwIndex].Pointer.pCommand = pCommand;
|
||||
pHelpArray[dwIndex].Pointer.pCommand = pCommand;
|
||||
dwIndex++;
|
||||
pCommand = pCommand->pNext;
|
||||
}
|
||||
@@ -177,7 +181,7 @@ PrintContext(
|
||||
pHelpArray[dwIndex].Type = Group;
|
||||
pHelpArray[dwIndex].pszCommand = pGroup->pwszCmdGroupToken;
|
||||
pHelpArray[dwIndex].dwHelpId = pGroup->dwShortCmdHelpToken;
|
||||
// pHelpArray[dwIndex].Pointer.pGroup = pGroup;
|
||||
pHelpArray[dwIndex].Pointer.pGroup = pGroup;
|
||||
dwIndex++;
|
||||
pGroup = pGroup->pNext;
|
||||
}
|
||||
@@ -200,15 +204,29 @@ PrintContext(
|
||||
switch (pHelpArray[dwIndex].Type)
|
||||
{
|
||||
case Command:
|
||||
if (CheckOsVersion(pHelpArray[dwIndex].Pointer.pCommand->pfnOsVersionCheck))
|
||||
{
|
||||
if (LoadStringW(pContext->hModule, pHelpArray[dwIndex].dwHelpId, szBuffer, _countof(szBuffer)) == 0)
|
||||
szBuffer[0] = UNICODE_NULL;
|
||||
ConPrintf(StdOut, L"%-15s - %s", pHelpArray[dwIndex].pszCommand, szBuffer);
|
||||
}
|
||||
break;
|
||||
|
||||
case Group:
|
||||
if (LoadStringW(pContext->hModule, pHelpArray[dwIndex].dwHelpId, szBuffer, _countof(szBuffer)) == 0)
|
||||
szBuffer[0] = UNICODE_NULL;
|
||||
ConPrintf(StdOut, L"%-15s - %s", pHelpArray[dwIndex].pszCommand, szBuffer);
|
||||
if (CheckOsVersion(pHelpArray[dwIndex].Pointer.pGroup->pfnOsVersionCheck))
|
||||
{
|
||||
if (LoadStringW(pContext->hModule, pHelpArray[dwIndex].dwHelpId, szBuffer, _countof(szBuffer)) == 0)
|
||||
szBuffer[0] = UNICODE_NULL;
|
||||
ConPrintf(StdOut, L"%-15s - %s", pHelpArray[dwIndex].pszCommand, szBuffer);
|
||||
}
|
||||
break;
|
||||
|
||||
case SubContext:
|
||||
GetContextFullName(pHelpArray[dwIndex].Pointer.pSubContext, szBuffer, _countof(szBuffer));
|
||||
ConPrintf(StdOut, L"%-15s - Changes to the \"%s\" context.\n", pHelpArray[dwIndex].pszCommand, szBuffer);
|
||||
if (CheckOsVersion(pHelpArray[dwIndex].Pointer.pSubContext->pfnOsVersionCheck))
|
||||
{
|
||||
GetContextFullName(pHelpArray[dwIndex].Pointer.pSubContext, szBuffer, _countof(szBuffer));
|
||||
ConPrintf(StdOut, L"%-15s - Changes to the \"%s\" context.\n", pHelpArray[dwIndex].pszCommand, szBuffer);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -265,7 +283,8 @@ PrintSubcontexts(
|
||||
ConResPrintf(StdOut, IDS_SUBCONTEXT_HEADER);
|
||||
for (dwIndex = 0; dwIndex < dwCount; dwIndex++)
|
||||
{
|
||||
ConPrintf(StdOut, L" %s", pSubContextArray[dwIndex]->pszContextName);
|
||||
if (CheckOsVersion(pSubContextArray[dwIndex]->pfnOsVersionCheck))
|
||||
ConPrintf(StdOut, L" %s", pSubContextArray[dwIndex]->pszContextName);
|
||||
}
|
||||
ConPuts(StdOut, L"\n");
|
||||
|
||||
@@ -285,6 +304,9 @@ PrintCommandHelp(
|
||||
|
||||
DPRINT("PrintCommandHelp(%p %p %p)\n", pContext, pGroup, pCommand);
|
||||
|
||||
if (!CheckOsVersion(pCommand->pfnOsVersionCheck))
|
||||
return;
|
||||
|
||||
dwLength += wcslen(pCommand->pwszCmdToken);
|
||||
if (pGroup)
|
||||
dwLength += (wcslen(pGroup->pwszCmdGroupToken) + 1);
|
||||
|
||||
@@ -193,6 +193,14 @@ InterpretCommand(
|
||||
case STATE_COMMAND:
|
||||
DPRINT("STATE_COMMAND\n");
|
||||
|
||||
if (!CheckOsVersion(pCommand->pfnOsVersionCheck))
|
||||
{
|
||||
DPRINT("Command: Version check failed!\n");
|
||||
dwError = ERROR_CMD_NOT_FOUND;
|
||||
State = STATE_DONE;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Check for help keywords */
|
||||
if (((dwArgIndex + 1) == (dwArgCount - 1)) &&
|
||||
((_wcsicmp(argv[dwArgIndex + 1], L"?") == 0) || (_wcsicmp(argv[dwArgIndex + 1], L"help") == 0)))
|
||||
@@ -232,6 +240,14 @@ InterpretCommand(
|
||||
case STATE_GROUP:
|
||||
DPRINT("STATE_GROUP\n");
|
||||
|
||||
if (!CheckOsVersion(pGroup->pfnOsVersionCheck))
|
||||
{
|
||||
DPRINT("Group: Version check failed!\n");
|
||||
dwError = ERROR_CMD_NOT_FOUND;
|
||||
State = STATE_DONE;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Check for group without command */
|
||||
if (dwArgIndex == (dwArgCount - 1))
|
||||
{
|
||||
@@ -264,6 +280,14 @@ InterpretCommand(
|
||||
case STATE_CONTEXT:
|
||||
DPRINT("STATE_CONTEXT\n");
|
||||
|
||||
if (!CheckOsVersion(pTempSubContext->pfnOsVersionCheck))
|
||||
{
|
||||
DPRINT("Context: Version check failed!\n");
|
||||
dwError = ERROR_CMD_NOT_FOUND;
|
||||
State = STATE_DONE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (pTempSubContext == pCurrentContext)
|
||||
{
|
||||
if (dwArgIndex != (dwArgCount - 1))
|
||||
|
||||
@@ -138,7 +138,7 @@ extern PWSTR pszMachine;
|
||||
extern UINT VersionInfoArchitecture;
|
||||
extern UINT VersionInfoOsProductSuite;
|
||||
extern UINT VersionInfoOsType;
|
||||
extern UINT VersionInfoVersion;
|
||||
extern WCHAR VersionInfoVersion[MAX_PATH];
|
||||
extern WCHAR VersionInfoBuildNumber[MAX_PATH];
|
||||
extern WCHAR VersionInfoServicePackMajorVersion[MAX_PATH];
|
||||
extern WCHAR VersionInfoServicePackMinorVersion[MAX_PATH];
|
||||
@@ -288,5 +288,9 @@ MergeStrings(
|
||||
|
||||
/* wmi.c */
|
||||
|
||||
BOOL
|
||||
CheckOsVersion(
|
||||
_In_ PNS_OSVERSIONCHECK pfnOsVersionCheck);
|
||||
|
||||
HRESULT
|
||||
GetWmiVersionInfo(VOID);
|
||||
|
||||
@@ -24,13 +24,32 @@
|
||||
UINT VersionInfoArchitecture;
|
||||
UINT VersionInfoOsProductSuite;
|
||||
UINT VersionInfoOsType;
|
||||
UINT VersionInfoVersion;
|
||||
WCHAR VersionInfoVersion[MAX_PATH];
|
||||
WCHAR VersionInfoBuildNumber[MAX_PATH];
|
||||
WCHAR VersionInfoServicePackMajorVersion[MAX_PATH];
|
||||
WCHAR VersionInfoServicePackMinorVersion[MAX_PATH];
|
||||
|
||||
/* FUNCTIONS ******************************************************************/
|
||||
|
||||
BOOL
|
||||
CheckOsVersion(
|
||||
_In_ PNS_OSVERSIONCHECK pfnOsVersionCheck)
|
||||
{
|
||||
DPRINT("CheckOsVersion(%p)\n", pfnOsVersionCheck);
|
||||
|
||||
if (pfnOsVersionCheck == NULL)
|
||||
return TRUE;
|
||||
|
||||
return pfnOsVersionCheck(VersionInfoOsType,
|
||||
VersionInfoOsProductSuite,
|
||||
VersionInfoVersion,
|
||||
VersionInfoBuildNumber,
|
||||
VersionInfoServicePackMajorVersion,
|
||||
VersionInfoServicePackMinorVersion,
|
||||
VersionInfoArchitecture,
|
||||
0);
|
||||
}
|
||||
|
||||
static
|
||||
HRESULT
|
||||
QueryOperatingSystemInfo(
|
||||
@@ -80,36 +99,36 @@ QueryOperatingSystemInfo(
|
||||
|
||||
while (IWbemClassObject_Next(Object, 0, &Name, &Value, &Type, NULL) == S_OK)
|
||||
{
|
||||
DPRINT1("Name: %S\n", Name);
|
||||
DPRINT("Name: %S\n", Name);
|
||||
if (_wcsicmp(Name, L"BuildNumber") == 0)
|
||||
{
|
||||
DPRINT1("BuildNumber %S\n", V_BSTR(&Value));
|
||||
DPRINT("BuildNumber %S\n", V_BSTR(&Value));
|
||||
StringCbCopyW(VersionInfoBuildNumber, sizeof(VersionInfoBuildNumber), V_BSTR(&Value));
|
||||
}
|
||||
else if (_wcsicmp(Name, L"OSProductSuite") == 0)
|
||||
{
|
||||
DPRINT1("OSProductSuite 0x%x\n", V_UINT(&Value));
|
||||
DPRINT("OSProductSuite 0x%x\n", V_UINT(&Value));
|
||||
VersionInfoOsProductSuite = V_UINT(&Value);
|
||||
}
|
||||
else if (_wcsicmp(Name, L"OSType") == 0)
|
||||
{
|
||||
DPRINT1("OSType %u\n", V_UINT(&Value));
|
||||
DPRINT("OSType %u\n", V_UINT(&Value));
|
||||
VersionInfoOsType = V_UINT(&Value);
|
||||
}
|
||||
else if (_wcsicmp(Name, L"ServicePackMajorVersion") == 0)
|
||||
{
|
||||
DPRINT1("ServicePackMajorVersion %S\n", V_BSTR(&Value));
|
||||
StringCbCopyW(VersionInfoServicePackMajorVersion, sizeof(VersionInfoServicePackMajorVersion), V_BSTR(&Value));
|
||||
DPRINT("ServicePackMajorVersion %hu\n", V_UINT(&Value));
|
||||
_swprintf(VersionInfoServicePackMajorVersion, L"%hu", V_UINT(&Value));
|
||||
}
|
||||
else if (_wcsicmp(Name, L"ServicePackMinorVersion") == 0)
|
||||
{
|
||||
DPRINT1("ServicePackMinorVersion %S\n", V_BSTR(&Value));
|
||||
StringCbCopyW(VersionInfoServicePackMinorVersion, sizeof(VersionInfoServicePackMinorVersion), V_BSTR(&Value));
|
||||
DPRINT("ServicePackMinorVersion %hu\n", V_UINT(&Value));
|
||||
_swprintf(VersionInfoServicePackMinorVersion, L"%hu", V_UINT(&Value));
|
||||
}
|
||||
else if (_wcsicmp(Name, L"Version") == 0)
|
||||
{
|
||||
DPRINT1("Version %S\n", V_BSTR(&Value));
|
||||
VersionInfoVersion = V_UINT(&Value);
|
||||
DPRINT("Version %S\n", V_BSTR(&Value));
|
||||
StringCbCopyW(VersionInfoVersion, sizeof(VersionInfoVersion), V_BSTR(&Value));
|
||||
}
|
||||
|
||||
SysFreeString(Name);
|
||||
@@ -189,10 +208,11 @@ QueryProcessorInfo(
|
||||
|
||||
while (IWbemClassObject_Next(Object, 0, &Name, &Value, &Type, NULL) == S_OK)
|
||||
{
|
||||
DPRINT1("Name: %S\n", Name);
|
||||
DPRINT("Name: %S\n", Name);
|
||||
if (_wcsicmp(Name, L"Architecture") == 0)
|
||||
{
|
||||
DPRINT1("Architecture %u\n", V_UINT(&Value));
|
||||
DPRINT("Architecture %u\n", V_UINT(&Value));
|
||||
VersionInfoArchitecture = V_UINT(&Value);
|
||||
}
|
||||
|
||||
SysFreeString(Name);
|
||||
@@ -265,7 +285,8 @@ GetWmiVersionInfo(VOID)
|
||||
}
|
||||
|
||||
hr = QueryOperatingSystemInfo(Services);
|
||||
hr = QueryProcessorInfo(Services);
|
||||
if (hr == S_OK)
|
||||
hr = QueryProcessorInfo(Services);
|
||||
|
||||
done:
|
||||
if (Path)
|
||||
|
||||
Reference in New Issue
Block a user