windows-nt/Source/XPSP1/NT/ds/security/services/w32time/w32tm/w32tm.cpp
2020-09-26 16:20:57 +08:00

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);
}