Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#include "brian.h"
//
// Global variables
//
BUFFER_ELEMENT Buffers[MAX_BUFFERS]; HANDLE BufferEvent = NULL;
//
// Control if debug prints go to the debug screen or the console. By
// default they go to the debug screen. In Synchronous mode they go
// to the console.
//
ULONG (*DbgPrintLocation)(PCH Format,...) = DbgPrint;
//
// Flag if we are in Synchronous mode or not. In Synchronous mode all
// commands (except OPLOCKS) are executed Synchronously with the shell.
// The default mode is NOT Synchronous mode.
//
BOOLEAN SynchronousCmds = FALSE;
//
// If set do to give the BSHELL prompt
//
BOOLEAN BatchMode = FALSE;
//
// Prototypes
//
int ParseCmdLine ( int argc, char *argv[] );
void DisplayUsage();
//
// Main Routine
//
#if i386
__cdecl #endif
main( int argc, char *argv[], char *envp[] ) { BOOLEAN ExitWhile = FALSE; UCHAR Buffer[256]; PCHAR ParamString; ULONG ParamStringLen;
InitBuffers(); InitHandles(); InitEvents();
if (!ParseCmdLine( argc, argv )) return STATUS_SUCCESS;
while (!ExitWhile) {
ParamString = Buffer;
if (!BatchMode) {
printf( "\nBSHELL> " ); if (gets( ParamString ) == NULL) //exit on error
return;
printf( " " );
} else {
if (gets( ParamString ) == NULL) //exit on error
return;
printf("BSHELL> %s\n",ParamString); }
fflush( stdout );
ParamStringLen = strlen( ParamString );
switch (AnalyzeBuffer( &ParamString, &ParamStringLen )) {
case SHELL_EXIT:
ExitWhile = TRUE; break;
case SHELL_OPEN:
InputOpenFile( ParamString + ParamStringLen ); break;
case SHELL_CLEAR_BUFFER:
InputClearBuffer( ParamString + ParamStringLen ); break;
case SHELL_DISPLAY_BYTES:
InputDisplayBuffer( ParamString + ParamStringLen, sizeof( CHAR )); break;
case SHELL_DISPLAY_WORDS:
InputDisplayBuffer( ParamString + ParamStringLen, sizeof( WCHAR )); break;
case SHELL_DISPLAY_DWORDS:
InputDisplayBuffer( ParamString + ParamStringLen, sizeof( ULONG )); break;
case SHELL_COPY_BUFFER:
InputCopyBuffer( ParamString + ParamStringLen ); break;
case SHELL_ALLOC_MEM:
InputAllocMem( ParamString + ParamStringLen ); break;
case SHELL_DEALLOC_MEM:
InputDeallocMem( ParamString + ParamStringLen ); break;
case SHELL_FILL_BUFFER:
InputFillBuffer( ParamString + ParamStringLen ); break;
case SHELL_FILL_BUFFER_USN:
InputFillBufferUsn( ParamString + ParamStringLen ); break;
case SHELL_PUT_EA:
InputPutEaName( ParamString + ParamStringLen ); break;
case SHELL_FILL_EA:
InputFillEaBuffer( ParamString + ParamStringLen ); break;
case SHELL_DISPLAY_HANDLE:
InputDisplayHandle( ParamString + ParamStringLen ); break;
case SHELL_CLOSE_HANDLE:
InputCloseIndex( ParamString + ParamStringLen ); break;
case SHELL_CANCEL_IO:
InputCancelIndex( ParamString + ParamStringLen ); break;
case SHELL_READ_FILE:
InputRead( ParamString + ParamStringLen ); break;
case SHELL_PAUSE:
InputPause( ParamString + ParamStringLen ); break;
case SHELL_QUERY_EAS:
InputQueryEa( ParamString + ParamStringLen ); break;
case SHELL_SET_EAS:
InputSetEa( ParamString + ParamStringLen ); break;
case SHELL_BREAK:
InputBreak( ParamString + ParamStringLen ); break;
case SHELL_OPLOCK:
InputOplock( ParamString + ParamStringLen ); break;
case SHELL_WRITE:
InputWrite( ParamString + ParamStringLen ); break;
case SHELL_QDIR:
InputQDir( ParamString + ParamStringLen ); break;
case SHELL_DISPLAY_QDIR:
InputDisplayQDir( ParamString + ParamStringLen ); break;
case SHELL_QFILE:
InputQFile( ParamString + ParamStringLen ); break;
case SHELL_DISPLAY_QFILE:
InputDisplayQFile( ParamString + ParamStringLen ); break;
case SHELL_NOTIFY_CHANGE:
InputNotifyChange( ParamString + ParamStringLen ); break;
case SHELL_ENTER_TIME:
InputEnterTime( ParamString + ParamStringLen ); break;
case SHELL_DISPLAY_TIME:
InputDisplayTime( ParamString + ParamStringLen ); break;
case SHELL_SETFILE:
InputSetFile( ParamString + ParamStringLen ); break;
case SHELL_QUERY_VOLUME:
InputQVolume( ParamString + ParamStringLen ); break;
case SHELL_DISPLAY_QVOL:
InputDisplayQVolume( ParamString + ParamStringLen ); break;
case SHELL_SET_VOLUME:
InputSetVolume( ParamString + ParamStringLen ); break;
case SHELL_FSCTRL:
InputFsctrl( ParamString + ParamStringLen ); break;
case SHELL_SPARSE:
InputSparse( ParamString + ParamStringLen ); break;
case SHELL_USN:
InputUsn( ParamString + ParamStringLen ); break;
case SHELL_REPARSE:
InputReparse( ParamString + ParamStringLen ); break;
case SHELL_IOCTL:
InputDevctrl( ParamString + ParamStringLen ); break;
default :
//
// Print out the possible command.
//
CommandSummary(); } }
UninitEvents(); UninitBuffers(); UninitHandles();
return STATUS_SUCCESS;
UNREFERENCED_PARAMETER( envp ); }
int ParseCmdLine ( int argc, char *argv[] ) { int i,j; char *cp;
for (i=1; i < argc; i++) { cp = argv[i];
//
// See if a switch was specified
//
if (cp[0] == '-' || cp[0] == '/') {
for (j=1; cp[j] != 0; j++) {
switch (cp[j]) { //
// Handle the "synchronous" switch
//
case 's': case 'S': SynchronousCmds = TRUE; DbgPrintLocation = printf; break;
//
// Handle the "prompt" switch
//
case 'b': case 'B': BatchMode = TRUE; SynchronousCmds = TRUE; DbgPrintLocation = printf; break;
//
// Display usage for unknown switch
//
case 'h': case 'H': case '?': default: DisplayUsage(); return FALSE; } }
} else {
//
// Display usage for unknown parameters
//
DisplayUsage(); return FALSE; } } return TRUE; }
void DisplayUsage() { printf("\nUsage: bshell [/bs]\n" " /b - Execute in batch mode (which also sets synchronous mode)\n" " /s - Execute commands synchronously\n" ); }
|