176 lines
5.3 KiB
C++
176 lines
5.3 KiB
C++
//--------------------------------------------------------------------
|
|
// w32tm - implementation
|
|
// Copyright (C) Microsoft Corporation, 1999
|
|
//
|
|
// Created by: Louis Thomas (louisth), 9-8-99
|
|
//
|
|
// Command line utility
|
|
//
|
|
|
|
#include "pch.h" // precompiled headers
|
|
|
|
|
|
//####################################################################
|
|
// module private
|
|
|
|
HINSTANCE g_hThisModule = NULL;
|
|
|
|
//--------------------------------------------------------------------
|
|
MODULEPRIVATE void PrintHelp(void) {
|
|
UINT idsText[] = {
|
|
IDS_W32TM_GENERALHELP_LINE1,
|
|
IDS_W32TM_GENERALHELP_LINE2,
|
|
IDS_W32TM_GENERALHELP_LINE3,
|
|
IDS_W32TM_GENERALHELP_LINE4,
|
|
IDS_W32TM_GENERALHELP_LINE5,
|
|
IDS_W32TM_GENERALHELP_LINE6,
|
|
IDS_W32TM_GENERALHELP_LINE7
|
|
};
|
|
|
|
for (int n=0; n<ARRAYSIZE(idsText); n++)
|
|
LocalizedWPrintf(idsText[n]);
|
|
|
|
PrintHelpTimeMonitor();
|
|
PrintHelpOtherCmds();
|
|
}
|
|
|
|
//####################################################################
|
|
// module public
|
|
|
|
//--------------------------------------------------------------------
|
|
// If we are running from the command line, business as usual.
|
|
// If we are running under SCM, this is our control dispatcher thread
|
|
// and we need to hook up to the SCM asap.
|
|
extern "C" int WINAPI WinMain
|
|
(HINSTANCE hinstExe,
|
|
HINSTANCE hinstExePrev,
|
|
LPSTR pszCommandLine,
|
|
int nCommandShow)
|
|
{
|
|
g_hThisModule = hinstExe;
|
|
|
|
HRESULT hr;
|
|
CmdArgs caArgs;
|
|
int nArgs = 0;
|
|
WCHAR **rgwszArgs = NULL;
|
|
|
|
hr = InitializeConsoleOutput();
|
|
_JumpIfError(hr, error, "InitializeConsoleOutput");
|
|
|
|
rgwszArgs = CommandLineToArgvW(GetCommandLineW(), &nArgs);
|
|
if (nArgs < 0 || NULL == rgwszArgs) {
|
|
_JumpError(HRESULT_FROM_WIN32(GetLastError()), error, "GetCommandLineW");
|
|
}
|
|
|
|
// must be cleaned up
|
|
DebugWPrintf0(L""); // force init of debug window
|
|
|
|
// analyze args
|
|
caArgs.nArgs=nArgs;
|
|
caArgs.nNextArg=1;
|
|
caArgs.rgwszArgs=rgwszArgs;
|
|
|
|
// check for help command
|
|
if (true==CheckNextArg(&caArgs, L"?", NULL) || caArgs.nNextArg==caArgs.nArgs) {
|
|
PrintHelp();
|
|
|
|
// check for service command
|
|
} else if (true==CheckNextArg(&caArgs, L"service", NULL)) {
|
|
hr=VerifyAllArgsUsed(&caArgs);
|
|
_JumpIfError(hr, error, "VerifyAllArgsUsed");
|
|
|
|
hr=RunAsService();
|
|
_JumpIfError(hr, error, "RunAsService");
|
|
|
|
// check for test command
|
|
} else if (true==CheckNextArg(&caArgs, L"testservice", NULL)) {
|
|
hr=VerifyAllArgsUsed(&caArgs);
|
|
_JumpIfError(hr, error, "VerifyAllArgsUsed");
|
|
|
|
hr=RunAsTestService();
|
|
_JumpIfError(hr, error, "RunAsTestService");
|
|
|
|
// check for monitor command
|
|
} else if (true==CheckNextArg(&caArgs, L"monitor", NULL)) {
|
|
hr=TimeMonitor(&caArgs);
|
|
_JumpIfError(hr, error, "TimeMonitor");
|
|
|
|
// check for register command
|
|
} else if (true==CheckNextArg(&caArgs, L"register", NULL)) {
|
|
hr=VerifyAllArgsUsed(&caArgs);
|
|
_JumpIfError(hr, error, "VerifyAllArgsUsed");
|
|
|
|
hr=RegisterDll();
|
|
_JumpIfError(hr, error, "RegisterDll");
|
|
|
|
// check for unregister command
|
|
} else if (true==CheckNextArg(&caArgs, L"unregister", NULL)) {
|
|
hr=VerifyAllArgsUsed(&caArgs);
|
|
_JumpIfError(hr, error, "VerifyAllArgsUsed");
|
|
|
|
hr=UnregisterDll();
|
|
_JumpIfError(hr, error, "UnregisterDll");
|
|
|
|
// check for sysexpr command
|
|
} else if (true==CheckNextArg(&caArgs, L"sysexpr", NULL)) {
|
|
hr=SysExpr(&caArgs);
|
|
_JumpIfError(hr, error, "SysExpr");
|
|
|
|
// check for ntte command
|
|
} else if (true==CheckNextArg(&caArgs, L"ntte", NULL)) {
|
|
hr=PrintNtte(&caArgs);
|
|
_JumpIfError(hr, error, "PrintNtte");
|
|
|
|
// check for ntte command
|
|
} else if (true==CheckNextArg(&caArgs, L"ntpte", NULL)) {
|
|
hr=PrintNtpte(&caArgs);
|
|
_JumpIfError(hr, error, "PrintNtpte");
|
|
|
|
// check for resync command
|
|
} else if (true==CheckNextArg(&caArgs, L"resync", NULL)) {
|
|
hr=ResyncCommand(&caArgs);
|
|
_JumpIfError(hr, error, "ResyncCommand");
|
|
|
|
// check for stripchart command
|
|
} else if (true==CheckNextArg(&caArgs, L"stripchart", NULL)) {
|
|
hr=Stripchart(&caArgs);
|
|
_JumpIfError(hr, error, "Stripchart");
|
|
|
|
// check for config command
|
|
} else if (true==CheckNextArg(&caArgs, L"config", NULL)
|
|
|| true==CheckNextArg(&caArgs, L"configure", NULL)) {
|
|
hr=Config(&caArgs);
|
|
_JumpIfError(hr, error, "Config");
|
|
|
|
// check for testif command
|
|
} else if (true==CheckNextArg(&caArgs, L"testif", NULL)) {
|
|
hr=TestInterface(&caArgs);
|
|
_JumpIfError(hr, error, "TestInterface");
|
|
|
|
// check for tz command
|
|
} else if (true==CheckNextArg(&caArgs, L"tz", NULL)) {
|
|
hr=ShowTimeZone(&caArgs);
|
|
_JumpIfError(hr, error, "ShowTimeZone");
|
|
|
|
// dump configuration information in registry:
|
|
} else if (true==CheckNextArg(&caArgs, L"dumpreg", NULL)) {
|
|
hr=DumpReg(&caArgs);
|
|
_JumpIfError(hr, error, "DumpReg");
|
|
|
|
// command is unknown
|
|
} else {
|
|
wprintf(L"The command %s is unknown.\n", caArgs.rgwszArgs[caArgs.nNextArg]);
|
|
hr=E_INVALIDARG;
|
|
_JumpError(hr, error, "(command line processing)");
|
|
}
|
|
|
|
hr=S_OK;
|
|
error:
|
|
DebugWPrintfTerminate();
|
|
return hr;
|
|
}
|
|
|
|
void __cdecl SeTransFunc(unsigned int u, EXCEPTION_POINTERS* pExp) {
|
|
throw SeException(u);
|
|
}
|