windows-nt/Source/XPSP1/NT/net/rras/netsh/aaaa/aaaaversion.cpp

227 lines
6.5 KiB
C++
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
//////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1998-1999 Microsoft Corporation
//
// Module Name:
//
// aaaaVersion.cpp
//
// Abstract:
//
// Handlers for aaaa version command
//
// Revision History:
//
// pmay
// tperraut 04/02/1999
// tperraut 04/17/2000 Use the Jet wrapper from iasrecst.dll
//
//////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "strdefs.h"
#include "aaaamon.h"
#include "aaaaversion.h"
const int SIZE_MAX_STRING = 512;
//////////////////////////////////////////////////////////////////////////////
// AaaaVersionGetVersion
//////////////////////////////////////////////////////////////////////////////
HRESULT AaaaVersionGetVersion(LONG* pVersion)
{
const WCHAR c_wcSELECT_VERSION[] = L"SELECT * FROM Version";
const WCHAR c_wcIASMDBFileName[] = L"%SystemRoot%\\System32\\ias\\ias.mdb";
if ( !pVersion )
{
return ERROR;
}
bool bCoInitialized = false;
HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
if ( FAILED(hr) )
{
if ( hr == RPC_E_CHANGED_MODE )
{
hr = S_OK;
}
else
{
*pVersion = 0;
return hr;
}
}
else
{
bCoInitialized = true;
}
WCHAR wc_TempString[SIZE_MAX_STRING];
// put the path to the DB in the property.
BOOL bResult = ExpandEnvironmentStringsForUserW(
NULL,
c_wcIASMDBFileName,
wc_TempString,
SIZE_MAX_STRING
);
do
{
if ( bResult )
{
CComPtr<IIASNetshJetHelper> JetHelper;
hr = CoCreateInstance(
__uuidof(CIASNetshJetHelper),
NULL,
CLSCTX_SERVER,
__uuidof(IIASNetshJetHelper),
(PVOID*) &JetHelper
);
if ( FAILED(hr) )
{
break;
}
CComBSTR DBPath(wc_TempString);
if ( !DBPath )
{
hr = E_OUTOFMEMORY;
break;
}
hr = JetHelper->OpenJetDatabase(DBPath, FALSE);
if ( FAILED(hr) )
{
WCHAR sDisplayString[SIZE_MAX_STRING];
DisplayError(NULL, EMSG_OPEN_DB_FAILED);
break;
}
CComBSTR SelectVersion(c_wcSELECT_VERSION);
if ( !SelectVersion )
{
hr = E_OUTOFMEMORY;
break;
}
hr = JetHelper->ExecuteSQLFunction(
SelectVersion,
pVersion
);
if ( FAILED(hr) ) // no Misc Table for instance
{
*pVersion = 0; //default value.
hr = S_OK; // that's not an error
}
hr = JetHelper->CloseJetDatabase();
}
else
{
DisplayMessage(g_hModule, MSG_AAAAVERSION_GET_FAIL);
hr = E_FAIL;
break;
}
} while(false);
if (bCoInitialized)
{
CoUninitialize();
}
return hr;
}
//////////////////////////////////////////////////////////////////////////////
// AaaaVersionParseCommandLine
//
// Parses the AaaaVersion from the command line
//////////////////////////////////////////////////////////////////////////////
DWORD
AaaaVersionParseCommandLine(
IN PWCHAR* ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount
)
{
return NO_ERROR;
}
//////////////////////////////////////////////////////////////////////////////
// AaaaVersionProcessCommand
//
// Processes a command by parsing the command line
// and calling the appropriate callback
//////////////////////////////////////////////////////////////////////////////
DWORD
AaaaVersionProcessCommand(
IN PWCHAR* ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN BOOL* pbDone,
IN HANDLE hData
)
{
DWORD dwErr = NO_ERROR;
if (dwCurrentIndex != dwArgCount)
{
// some arguments are present on the command line and will be ignored
DisplayMessage(g_hModule, MSG_AAAAVERSION_SHOW_FAIL);
}
else
{
LONG lVersion;
HRESULT hr = AaaaVersionGetVersion(&lVersion);
if (!FAILED(hr))
{
WCHAR sDisplayString[SIZE_MAX_STRING];
_snwprintf(
sDisplayString,
SIZE_MAX_STRING,
L"Version = %d\n",
lVersion
);
DisplayMessageT(sDisplayString);
}
else
{
DisplayMessage(g_hModule, MSG_AAAAVERSION_GET_FAIL);
dwErr = ERROR;
}
}
return dwErr;
}
//////////////////////////////////////////////////////////////////////////////
// HandleAaaaVersionShow
//
// Shows whether HandleAaaaVersionSet has been called on the
// given domain.
//////////////////////////////////////////////////////////////////////////////
DWORD
HandleAaaaVersionShow(
IN LPCWSTR pwszMachine,
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN DWORD dwFlags,
IN LPCVOID pvData,
OUT BOOL *pbDone
)
{
return AaaaVersionProcessCommand(
ppwcArguments,
dwCurrentIndex,
dwArgCount,
pbDone,
NULL
);
}