|
|
/*++
Copyright (c) 1989 Microsoft Corporation
Module Name:
urtl.c
Abstract:
Usermode test program for rtl
Author:
Mark Lucovsky (markl) 22-Aug-1989
Revision History:
--*/
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
PVOID MyHeap = NULL;
DumpIt( IN PRTL_USER_PROCESS_PARAMETERS ArgBase ) { ULONG Base; PSTRING Vector; PCH *ParmVector; ULONG i;
(VOID) RtlNormalizeProcessParameters( ArgBase ); (VOID) RtlDeNormalizeProcessParameters( ArgBase );
Base = (ULONG) ArgBase;
DbgPrint("DumpIt: ArgBase %lx\n",ArgBase); DbgPrint("DumpIt: MaximumLength %lx\n",ArgBase->MaximumLength); DbgPrint("DumpIt: Length %lx\n",ArgBase->Length); DbgPrint("DumpIt: ArgumentCount %lx\n",ArgBase->ArgumentCount); DbgPrint("DumpIt: Arguments %lx\n",ArgBase->Arguments ); DbgPrint("DumpIt: VariableCount %lx\n",ArgBase->VariableCount); DbgPrint("DumpIt: Variables %lx\n",ArgBase->Variables ); DbgPrint("DumpIt: ParameterCount%lx\n",ArgBase->ParameterCount); DbgPrint("DumpIt: Parameters %lx\n",ArgBase->Parameters );
if ( ArgBase->ArgumentCount ) { Vector = (PSTRING)((PCH)ArgBase->Arguments + Base); i = ArgBase->ArgumentCount; while(i--){ DbgPrint("DumpIt: Argument %s\n",Vector->Buffer + Base); Vector++; } }
if ( ArgBase->VariableCount ) { Vector = (PSTRING)((PCH)ArgBase->Variables + Base); i = ArgBase->VariableCount; while(i--){ DbgPrint("DumpIt: Variable %s\n",Vector->Buffer + Base); Vector++; } }
if ( ArgBase->ParameterCount ) { ParmVector = (PCH *)((PCH)ArgBase->Parameters + Base); i = ArgBase->ParameterCount; while(i--) { DbgPrint("DumpIt: Parameter %s\n",*ParmVector + Base); ParmVector++; } } }
BOOLEAN VectorTest( IN PCH Arguments[], IN PCH Variables[], IN PCH Parameters[] ) {
PRTL_USER_PROCESS_PARAMETERS ProcessParameters; NTSTATUS st;
DbgPrint("VectorTest:++\n");
ProcessParameters = RtlAllocateHeap(MyHeap, 0, 2048); ProcessParameters->MaximumLength = 2048;
st = RtlVectorsToProcessParameters( Arguments, Variables, Parameters, ProcessParameters );
DumpIt(ProcessParameters);
DbgPrint("VectorTest:--\n");
return TRUE; }
NTSTATUS main( IN ULONG argc, IN PCH argv[], IN PCH envp[], IN ULONG DebugParameter OPTIONAL )
{ ULONG i; char c, *s; PCH *Arguments; PCH *Variables; PCH Parameters[ RTL_USER_PROC_PARAMS_DEBUGFLAG+2 ];
ULONG TestVector = 0;
Arguments = argv; Variables = envp; Parameters[ RTL_USER_PROC_PARAMS_IMAGEFILE ] = "Full Path Specification of Image File goes here";
Parameters[ RTL_USER_PROC_PARAMS_CMDLINE ] = "Complete Command Line goes here";
Parameters[ RTL_USER_PROC_PARAMS_DEBUGFLAG ] = "Debugging String goes here";
Parameters[ RTL_USER_PROC_PARAMS_DEBUGFLAG+1 ] = NULL;
MyHeap = RtlProcessHeap();
#if DBG
DbgPrint( "Entering URTL User Mode Test Program\n" ); DbgPrint( "argc = %ld\n", argc ); for (i=0; i<=argc; i++) { DbgPrint( "argv[ %ld ]: %s\n", i, argv[ i ] ? argv[ i ] : "<NULL>" ); } DbgPrint( "\n" ); for (i=0; envp[i]; i++) { DbgPrint( "envp[ %ld ]: %s\n", i, envp[ i ] ); } #endif
i = 1; if (argc > 1 ) { while (--argc) { s = *++argv; while ((c = *s++) != '\0') { switch (c) {
case 'V': case 'v': TestVector = i++; break; default: DbgPrint( "urtl: invalid test code - '%s'", *argv ); break; } } } }
if ( TestVector ) { VectorTest(Arguments,Variables,Parameters); }
return( STATUS_SUCCESS ); }
|