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.
 
 
 
 
 
 

554 lines
8.2 KiB

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <nt.h>
#include <ntrtl.h>
#include <ntddcdrm.h>
#include <ntdddisk.h>
extern BOOLEAN SynchronousCmds;
extern ULONG (*DbgPrintLocation)(PCH Format,...);
ULONG
GetLastError(
VOID
);
HANDLE
CreateThread(
IN PVOID lpThreadAttributes,
IN ULONG dwStackSize,
IN PVOID lpStartAddress,
IN PVOID lpParameter,
IN ULONG dwCreationFlags,
OUT PVOID lpThreadId
);
#define FlagOn( Flags,SingleFlag ) ( \
(BOOLEAN)(((Flags) & (SingleFlag)) != 0 ? TRUE : FALSE) \
)
//
// Shell constants
//
#define SHELL_UNKNOWN 0
#define SHELL_EXIT 1
#define SHELL_OPEN 2
#define SHELL_CLEAR_BUFFER 3
#define SHELL_DISPLAY_BYTES 4
#define SHELL_COPY_BUFFER 5
#define SHELL_ALLOC_MEM 6
#define SHELL_DEALLOC_MEM 7
#define SHELL_PUT_EA 8
#define SHELL_FILL_EA 9
#define SHELL_DISPLAY_HANDLE 10
#define SHELL_CLOSE_HANDLE 11
#define SHELL_READ_FILE 12
#define SHELL_PAUSE 13
#define SHELL_QUERY_EAS 14
#define SHELL_SET_EAS 15
#define SHELL_BREAK 16
#define SHELL_OPLOCK 17
#define SHELL_WRITE 18
#define SHELL_QDIR 19
#define SHELL_DISPLAY_QDIR 20
#define SHELL_QFILE 21
#define SHELL_DISPLAY_QFILE 22
#define SHELL_NOTIFY_CHANGE 23
#define SHELL_ENTER_TIME 24
#define SHELL_DISPLAY_TIME 25
#define SHELL_SETFILE 26
#define SHELL_QUERY_VOLUME 27
#define SHELL_DISPLAY_QVOL 28
#define SHELL_SET_VOLUME 29
#define SHELL_FSCTRL 30
#define SHELL_IOCTL 31
#define SHELL_CANCEL_IO 32
#define SHELL_SPARSE 33
#define SHELL_USN 34
#define SHELL_FILL_BUFFER 35
#define SHELL_FILL_BUFFER_USN 36
#define SHELL_DISPLAY_WORDS 37
#define SHELL_DISPLAY_DWORDS 38
#define SHELL_REPARSE 39
#define try_return(S) { S; goto try_exit; }
#define bprint (*DbgPrintLocation)(
//
// Support routines contained in prmptsup.c
//
PCHAR
SwallowNonWhite (
IN PCHAR Ptr,
OUT PULONG Count
);
PCHAR
SwallowWhite (
IN PCHAR Ptr,
OUT PULONG Count
);
ULONG
AnalyzeBuffer (
PCHAR *BuffPtr,
PULONG ParamStringLen
);
BOOLEAN
ExtractCmd (
PCHAR *BufferPtr,
PULONG BufferLen
);
VOID
CommandSummary ();
//
// Routines contained in topen.c
//
VOID
InputOpenFile(
IN PCHAR ParamBuffer
);
#define ROUND_UP( x, y ) ((ULONG)(x) + ((y)-1) & ~((y)-1))
//
// Routines contained in tbuffer.c
//
#define MAX_BUFFERS 200
typedef struct _BUFFER_ELEMENT {
PCHAR Buffer;
ULONG Length;
BOOLEAN Used;
} BUFFER_ELEMENT, *PBUFFER_ELEMENT;
extern BUFFER_ELEMENT Buffers[MAX_BUFFERS];
extern HANDLE BufferEvent;
VOID
InitBuffers (
);
VOID
UninitBuffers (
);
NTSTATUS
AllocateBuffer (
IN ULONG ZeroBits,
IN OUT PSIZE_T RegionSize,
OUT PULONG BufferIndex
);
NTSTATUS
DeallocateBuffer (
IN ULONG Index
);
BOOLEAN
BufferInfo (
IN ULONG Index,
OUT PVOID *BufferAddress,
OUT PULONG RegionSize
);
VOID
InputClearBuffer(
IN PCHAR ParamBuffer
);
VOID
InputDisplayBuffer(
IN PCHAR ParamBuffer,
IN ULONG DisplaySize
);
VOID
InputCopyBuffer(
IN PCHAR ParamBuffer
);
VOID
InputAllocMem(
IN PCHAR ParamBuffer
);
VOID
InputDeallocMem(
IN PCHAR ParamBuffer
);
VOID
InputFillBuffer(
IN PCHAR ParamBuffer
);
VOID
InputFillBufferUsn(
IN PCHAR ParamBuffer
);
//
// Ea routines contained in tea.c
//
VOID
InputPutEaName(
IN PCHAR ParamBuffer
);
VOID
InputFillEaBuffer(
IN PCHAR ParamBuffer
);
VOID
InputQueryEa(
IN PCHAR ParamBuffer
);
VOID
InputSetEa(
IN PCHAR ParamBuffer
);
//
// Routines contained in thandle.c
//
#define MAX_HANDLES 200
typedef struct _HANDLE_ELEMENT {
HANDLE Handle;
BOOLEAN Used;
} HANDLE_ELEMENT, *PHANDLE_ELEMENT;
HANDLE_ELEMENT Handles[MAX_HANDLES];
HANDLE HandleEvent;
VOID
InitHandles (
);
VOID
UninitHandles (
);
NTSTATUS
ObtainIndex (
OUT PUSHORT NewIndex
);
NTSTATUS
FreeIndex (
IN USHORT Index
);
VOID
InputDisplayHandle (
IN PCHAR ParamBuffer
);
//
// Routines defined in tclose.c
//
VOID
InputCloseIndex (
IN PCHAR ParamBuffer
);
//
// Routines contained in tevent.c
//
#define MAX_EVENTS 200
typedef struct _EVENT_ELEMENT {
HANDLE Handle;
BOOLEAN Used;
} EVENT_ELEMENT, *PEVENT_ELEMENT;
EVENT_ELEMENT Events[MAX_EVENTS];
HANDLE EventEvent;
VOID
InitEvents (
);
VOID
UninitEvents (
);
NTSTATUS
ObtainEvent (
OUT PUSHORT NewIndex
);
VOID
FreeEvent (
IN USHORT Index
);
//
// Routines contained in tread.c
//
VOID
InputRead(
IN PCHAR ParamBuffer
);
//
// Routines defined in tpause.c
//
VOID
InputPause (
IN PCHAR ParamBuffer
);
//
// Routines defined in tbreak.c
//
VOID
InputBreak (
IN PCHAR ParamBuffer
);
//
// Routines defined in toplock.c
//
VOID
InputOplock (
IN PCHAR ParamBuffer
);
//
// Routines defined in tdevctl.c
//
VOID
InputDevctrl (
IN PCHAR ParamBuffer
);
//
// Routines defined in tfsctrl.c
//
VOID
InputFsctrl (
IN PCHAR ParamBuffer
);
//
// Routines defined in tsparse.c
//
VOID
InputSparse (
IN PCHAR ParamBuffer
);
//
// Routines defined in tusn.c
//
VOID
InputUsn (
IN PCHAR ParamBuffer
);
//
// Routines defined in treparse.c
//
VOID
InputReparse (
IN PCHAR ParamBuffer
);
//
// Routines contained in twrite.c
//
VOID
InputWrite (
IN PCHAR ParamBuffer
);
//
// Routines contained in tqdir.c
//
VOID
InputQDir (
IN PCHAR ParamBuffer
);
VOID
InputDisplayQDir (
IN PCHAR ParamBuffer
);
VOID
DisplayQDirNames (
IN USHORT BufferIndex
);
VOID
DisplayQDirDirs (
IN USHORT BufferIndex
);
VOID
DisplayQDirFullDirs (
IN USHORT BufferIndex
);
VOID
DisplayQDirIdFullDirs (
IN USHORT BufferIndex
);
VOID
DisplayQBothDirs (
IN USHORT BufferIndex
);
VOID
DisplayQIdBothDirs (
IN USHORT BufferIndex
);
VOID
DisplayQOleDirs (
IN USHORT BufferIndex
);
//
// Routines contained in ttime.c
//
VOID
InputEnterTime (
IN PCHAR ParamBuffer
);
VOID
InputDisplayTime (
IN PCHAR ParamBuffer
);
VOID
PrintTime (
IN PTIME Time
);
VOID
BPrintTime (
IN PTIME Time
);
//
// Routines contained in tmisc.c
//
VOID
PrintLargeInteger (
IN PLARGE_INTEGER LargeInt
);
ULONG
AsciiToInteger (
IN PCHAR Ascii
);
ULONGLONG
AsciiToLargeInteger (
IN PCHAR Ascii
);
//
// Routines contained in tqfile.c
//
VOID
InputQFile (
IN PCHAR ParamBuffer
);
VOID
InputDisplayQFile (
IN PCHAR ParamBuffer
);
//
// Routines contained in tnotify.c
//
VOID
InputNotifyChange (
IN PCHAR ParamBuffer
);
//
// Routines contained in tsetfile.c
//
VOID
InputSetFile (
IN PCHAR ParamBuffer
);
//
// Routines contained in tqvolume.c
//
VOID
InputQVolume (
IN PCHAR ParamBuffer
);
VOID
InputDisplayQVolume (
IN PCHAR ParamBuffer
);
//
// Routines contained in tsetvol.c
//
VOID
InputSetVolume (
IN PCHAR ParamBuffer
);
//
// Routines defined in tcancel.c
//
VOID
InputCancelIndex (
IN PCHAR ParamBuffer
);