summaryrefslogblamecommitdiffstats
path: root/private/ntos/rtl/urtl.c
blob: 78595511065ca23645e6174a3172f485d9cd0c58 (plain) (tree)



















































































































































































                                                                        
/*++

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