summaryrefslogtreecommitdiffstats
path: root/private/nw/ndsutils/cx.c
diff options
context:
space:
mode:
Diffstat (limited to 'private/nw/ndsutils/cx.c')
-rw-r--r--private/nw/ndsutils/cx.c133
1 files changed, 133 insertions, 0 deletions
diff --git a/private/nw/ndsutils/cx.c b/private/nw/ndsutils/cx.c
new file mode 100644
index 000000000..b1147b2cc
--- /dev/null
+++ b/private/nw/ndsutils/cx.c
@@ -0,0 +1,133 @@
+/***
+
+Copyright (c) 1995 Microsoft Corporation
+
+Module Name:
+
+ Cx.c
+
+Abstract:
+
+ This is the command line NDS utility for setting contexts.
+
+Author:
+
+ Cory West [corywest] 25-Oct-95
+
+***/
+
+#include "ndsapi32.h"
+
+int
+_cdecl main(
+ int argc,
+ char **argv
+) {
+
+ NTSTATUS Status;
+ HANDLE hNdsTree;
+ OEM_STRING OemArg;
+
+ UNICODE_STRING NdsTree;
+ WCHAR TreeBuffer[1024];
+
+ UNICODE_STRING Context;
+ WCHAR ContextBuffer[1024];
+
+ //
+ // Who do we want to monkey with?
+ //
+
+ if ( argc < 2 ) {
+ printf( "Usage: cx [tree name] [optional context]\n" );
+ return -1;
+ }
+
+ //
+ // Get the tree.
+ //
+
+ OemArg.Length = strlen( argv[1] );
+ OemArg.MaximumLength = OemArg.Length;
+ OemArg.Buffer = argv[1];
+
+ NdsTree.Length = 0;
+ NdsTree.MaximumLength = sizeof( TreeBuffer );
+ NdsTree.Buffer = TreeBuffer;
+
+ RtlOemStringToUnicodeString( &NdsTree, &OemArg, FALSE );
+
+ //
+ // Open up a handle to the tree.
+ //
+
+ Status = NwNdsOpenTreeHandle( &NdsTree,
+ &hNdsTree );
+
+ if ( !NT_SUCCESS( Status ) ) {
+ printf( "The supplied tree name is invalid or the tree is unavailable.\n" );
+ return -1;
+ }
+
+ //
+ // Get or set the context, depending.
+ //
+
+ Context.Length = 0;
+ Context.MaximumLength = sizeof( ContextBuffer );
+ Context.Buffer = ContextBuffer;
+
+ Status = STATUS_UNSUCCESSFUL;
+
+ if ( argc == 2 ) {
+
+ //
+ // Get the context.
+ //
+
+ Status = NwNdsGetTreeContext ( hNdsTree,
+ &NdsTree,
+ &Context );
+
+ if ( !NT_SUCCESS( Status ) ) {
+ printf( "You are not logged into the specified tree.\n" );
+ goto Exit;
+ }
+
+ ContextBuffer[Context.Length/sizeof(WCHAR)] = L'\0';
+ printf( "%S", ContextBuffer );
+
+ } else {
+
+ //
+ // Set the context.
+ //
+
+ OemArg.Length = strlen( argv[2] );
+ OemArg.MaximumLength = OemArg.Length;
+ OemArg.Buffer = argv[2];
+
+ RtlOemStringToUnicodeString( &Context, &OemArg, FALSE );
+
+ Status = NwNdsSetTreeContext ( hNdsTree,
+ &NdsTree,
+ &Context );
+
+ if ( !NT_SUCCESS( Status ) ) {
+ printf( "*** Set context: Status = %08lx\n", Status );
+ }
+
+ }
+
+
+Exit:
+
+ CloseHandle( hNdsTree );
+
+ if ( !NT_SUCCESS( Status )) {
+ return -1;
+ }
+
+ return 0;
+
+}