windows-nt/Source/XPSP1/NT/base/ntos/rtl/urtl.c
2020-09-26 16:20:57 +08:00

181 lines
4 KiB
C

/*++
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 );
}