summaryrefslogtreecommitdiffstats
path: root/private/nw/ndsutils/getuser.c
diff options
context:
space:
mode:
Diffstat (limited to 'private/nw/ndsutils/getuser.c')
-rw-r--r--private/nw/ndsutils/getuser.c133
1 files changed, 133 insertions, 0 deletions
diff --git a/private/nw/ndsutils/getuser.c b/private/nw/ndsutils/getuser.c
new file mode 100644
index 000000000..833a0e2f7
--- /dev/null
+++ b/private/nw/ndsutils/getuser.c
@@ -0,0 +1,133 @@
+/***
+
+Copyright (c) 1995 Microsoft Corporation
+
+Module Name:
+
+ GetUser.c
+
+Abstract:
+
+ This is the command line NDS utility for getting the
+ user name used to log into a specified tree or server.
+
+Author:
+
+ Cory West [corywest] 25-Oct-95
+
+***/
+
+#include "ndsapi32.h"
+
+int
+_cdecl main(
+ int argc,
+ char **argv
+) {
+
+ NTSTATUS ntstatus;
+ IO_STATUS_BLOCK IoStatusBlock;
+ OBJECT_ATTRIBUTES ObjectAttributes;
+ ACCESS_MASK DesiredAccess = SYNCHRONIZE | FILE_LIST_DIRECTORY;
+ HANDLE hRdr;
+
+ WCHAR DevicePreamble[] = L"\\Device\\Nwrdr\\";
+ UINT PreambleLength = 14;
+
+ WCHAR NameStr[64];
+ UNICODE_STRING OpenName;
+ UINT i;
+
+ OEM_STRING OemArg;
+ UNICODE_STRING NdsTree;
+ WCHAR TreeBuffer[64];
+
+ WCHAR Reply[64];
+
+ //
+ // Check the arguments.
+ //
+
+ if ( argc != 2 ) {
+ printf( "Usage: getuser [tree | server]\n" );
+ return -1;
+ }
+
+ //
+ // Copy over the preamble.
+ //
+
+ OpenName.MaximumLength = sizeof( NameStr );
+
+ for ( i = 0; i < PreambleLength ; i++ )
+ NameStr[i] = DevicePreamble[i];
+
+ //
+ // Convert the argument name to unicode.
+ //
+
+ 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 );
+
+ //
+ // Copy the server or tree name.
+ //
+
+ for ( i = 0 ; i < ( NdsTree.Length / sizeof( WCHAR ) ) ; i++ ) {
+ NameStr[i + PreambleLength] = NdsTree.Buffer[i];
+ }
+
+ OpenName.Length = ( i * sizeof( WCHAR ) ) +
+ ( PreambleLength * sizeof( WCHAR ) );
+ OpenName.Buffer = NameStr;
+
+ //
+ // Set up the object attributes.
+ //
+
+ InitializeObjectAttributes( &ObjectAttributes,
+ &OpenName,
+ OBJ_CASE_INSENSITIVE,
+ NULL,
+ NULL );
+
+ ntstatus = NtOpenFile( &hRdr,
+ DesiredAccess,
+ &ObjectAttributes,
+ &IoStatusBlock,
+ FILE_SHARE_VALID_FLAGS,
+ FILE_SYNCHRONOUS_IO_NONALERT );
+
+ if ( !NT_SUCCESS(ntstatus) )
+ return ntstatus;
+
+ ntstatus = NtFsControlFile( hRdr,
+ NULL,
+ NULL,
+ NULL,
+ &IoStatusBlock,
+ FSCTL_NWR_GET_USERNAME,
+ (PVOID) TreeBuffer,
+ NdsTree.Length,
+ (PVOID) Reply,
+ sizeof( Reply ) );
+
+ if ( NT_SUCCESS( ntstatus )) {
+
+ NdsTree.Length = (USHORT)IoStatusBlock.Information;
+ NdsTree.MaximumLength = NdsTree.Length;
+ NdsTree.Buffer = Reply;
+ printf( "%wZ", &NdsTree );
+ }
+
+ NtClose( hRdr );
+ return ntstatus;
+
+}