summaryrefslogtreecommitdiffstats
path: root/private/ntos/rtl/urtl.c
diff options
context:
space:
mode:
Diffstat (limited to 'private/ntos/rtl/urtl.c')
-rw-r--r--private/ntos/rtl/urtl.c180
1 files changed, 180 insertions, 0 deletions
diff --git a/private/ntos/rtl/urtl.c b/private/ntos/rtl/urtl.c
new file mode 100644
index 000000000..785955110
--- /dev/null
+++ b/private/ntos/rtl/urtl.c
@@ -0,0 +1,180 @@
+/*++
+
+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 );
+}