windows-nt/Source/XPSP1/NT/sdktools/kverify/main.cxx
2020-09-26 16:20:57 +08:00

227 lines
6.5 KiB
C++

//
// Enable driver verifier support for ntoskrnl
// Copyright (c) Microsoft Corporation, 1999
//
//
// module: main.cxx
// author: DMihai
// created: 04/19/99
// description: command line parsing and help information
//
#include <windows.h>
#include <tchar.h>
#include <stdlib.h>
#include <stdio.h>
#include <common.ver>
#include "resid.hxx"
#include "resutil.hxx"
#include "genutil.hxx"
#include "regutil.hxx"
TCHAR strKernelModuleName[] = _T( "ntoskrnl.exe" );
void
DisplayHelpInformation();
//////////////////////////////////////////////////////////
extern "C" int _cdecl
wmain( int argc, TCHAR *argv[] )
{
BOOL bResult;
BOOL bChangeFlags;
BOOL bEnableKrnVerifier;
BOOL bDisableKernelVerifier;
BOOL bShowStatus;
DWORD dwVerifierFlags;
DWORD dwIoLevel;
int nCrtCmdLineArg;
TCHAR strEnableCmdLineOption[ 64 ];
TCHAR strFlagsCmdLineOption[ 64 ];
TCHAR strDisableCmdLineOption[ 64 ];
TCHAR strStatusCmdLineOption[ 64 ];
TCHAR strIoLevelCmdLineOption[ 64 ];
bResult =
GetStringFromResources( IDS_ENABLE_CMDLINE_OPTION, strEnableCmdLineOption, ARRAY_LEN( strEnableCmdLineOption ) ) &&
GetStringFromResources( IDS_FLAGS_CMDLINE_OPTION, strFlagsCmdLineOption, ARRAY_LEN( strFlagsCmdLineOption ) ) &&
GetStringFromResources( IDS_DISABLE_CMDLINE_OPTION, strDisableCmdLineOption, ARRAY_LEN( strDisableCmdLineOption ) ) &&
GetStringFromResources( IDS_STATUS_CMDLINE_OPTION, strStatusCmdLineOption, ARRAY_LEN( strStatusCmdLineOption ) ) &&
GetStringFromResources( IDS_IOLEVEL_CMDLINE_OPTION, strIoLevelCmdLineOption, ARRAY_LEN( strIoLevelCmdLineOption ) );
bEnableKrnVerifier = FALSE;
bDisableKernelVerifier = FALSE;
bChangeFlags = FALSE;
bShowStatus = FALSE;
dwVerifierFlags = -1;
dwIoLevel = 1;
for( nCrtCmdLineArg = 0; nCrtCmdLineArg < argc; nCrtCmdLineArg ++ )
{
//
// look for /enable
//
if( _tcsicmp( argv[ nCrtCmdLineArg ], strEnableCmdLineOption ) == 0 )
{
bEnableKrnVerifier = TRUE;
}
else
{
//
// look for /flags
//
if( _tcsicmp( argv[ nCrtCmdLineArg ], strFlagsCmdLineOption ) == 0 )
{
if( nCrtCmdLineArg + 1 < argc )
{
//
// new value for verifier flags
//
dwVerifierFlags = _ttoi( argv[ nCrtCmdLineArg + 1 ] );
bChangeFlags = TRUE;
}
// else ignore the /flags paramater
}
else
{
//
// look for /iolevel
//
if( _tcsicmp( argv[ nCrtCmdLineArg ], strIoLevelCmdLineOption ) == 0 )
{
if( nCrtCmdLineArg + 1 < argc )
{
//
// new value for the IO verification level
//
dwIoLevel = _ttoi( argv[ nCrtCmdLineArg + 1 ] );
if( dwIoLevel != 2 )
{
//
// only levels 1 & 2 are supported
//
dwIoLevel = 1;
}
}
// else ignore the /iolevel paramater
}
else
{
//
// look for /disable
//
if( _tcsicmp( argv[ nCrtCmdLineArg ], strDisableCmdLineOption ) == 0 )
{
bDisableKernelVerifier = TRUE;
}
else
{
//
// look for /status
//
if( _tcsicmp( argv[ nCrtCmdLineArg ], strStatusCmdLineOption ) == 0 )
{
bShowStatus = TRUE;
}
// else -> unknown cmd line param
}
}
}
}
}
if( bEnableKrnVerifier == TRUE || bChangeFlags == TRUE )
{
//
// this will exit the process with the appropriate exit code
//
WriteVerifierKeys(
bEnableKrnVerifier,
dwVerifierFlags,
dwIoLevel,
strKernelModuleName );
}
else
{
if( bDisableKernelVerifier == TRUE )
{
//
// this will exit process with the appropriate exit code
//
RemoveModuleNameFromRegistry( strKernelModuleName );
}
else
{
if( bShowStatus == TRUE )
{
//
// this will exit process with the appropriate exit code
//
DumpStatusFromRegistry( strKernelModuleName );
}
else
{
DisplayHelpInformation();
}
}
}
return 0;
}
///////////////////////////////////////////////////////////
void
DisplayHelpInformation()
{
PrintStringFromResources( IDS_HELP_LINE1 );
puts( VER_LEGALCOPYRIGHT_STR );
PrintStringFromResources( IDS_HELP_LINE3 );
PrintStringFromResources( IDS_HELP_LINE4 );
PrintStringFromResources( IDS_HELP_LINE5 );
PrintStringFromResources( IDS_HELP_LINE6 );
PrintStringFromResources( IDS_HELP_LINE7 );
PrintStringFromResources( IDS_HELP_LINE8 );
PrintStringFromResources( IDS_HELP_LINE9 );
PrintStringFromResources( IDS_HELP_LINE10 );
PrintStringFromResources( IDS_HELP_LINE11 );
PrintStringFromResources( IDS_HELP_LINE12 );
PrintStringFromResources( IDS_HELP_LINE13 );
PrintStringFromResources( IDS_HELP_LINE14 );
PrintStringFromResources( IDS_HELP_LINE15 );
PrintStringFromResources( IDS_HELP_LINE16 );
PrintStringFromResources( IDS_HELP_LINE17 );
PrintStringFromResources( IDS_HELP_LINE18 );
PrintStringFromResources( IDS_HELP_LINE19 );
PrintStringFromResources( IDS_HELP_LINE20 );
PrintStringFromResources( IDS_HELP_LINE21 );
PrintStringFromResources( IDS_HELP_LINE22 );
PrintStringFromResources( IDS_HELP_LINE23 );
PrintStringFromResources( IDS_HELP_LINE24 );
PrintStringFromResources( IDS_HELP_LINE25 );
exit( EXIT_CODE_NOTHING_CHANGED );
}