windows-nt/Source/XPSP1/NT/ds/netapi/access/disptest.c

274 lines
5.7 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1994 Microsoft Corporation
Module Name:
disptest.c
Abstract:
Test program for NetQueryDisplayInformation and
NetGetDisplayInformationIndex API functions
Author:
Cliff Van Dyke (cliffv) 15-Dec-1994
Environment:
User mode only.
Contains NT-specific code.
Requires ANSI C extensions: slash-slash comments, long external names.
Revision History:
--*/
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#undef DOMAIN_ALL_ACCESS // defined in both ntsam.h and ntwinapi.h
// #include <ntsam.h>
// #include <ntlsa.h>
#include <windef.h>
#include <winbase.h>
#include <lmcons.h>
// #include <accessp.h>
// #include <align.h>
#include <lmapibuf.h>
#include <lmaccess.h>
#include <lmerr.h>
// #include <limits.h>
#include <netdebug.h>
#include <netlib.h>
#include <netlibnt.h>
#include <rpcutil.h>
#include <stdlib.h>
#include <stdio.h>
#include <tstring.h>
// #include <secobj.h>
// #include <stddef.h>
///#include <uasp.h>
DWORD
DisplayStruct(
IN DWORD Level,
IN PVOID Buffer
)
/*++
Routine Description:
Display the appropriate structure.
Arguments:
Level - Info level of structure
Buffer - structure to display
Return Value:
Index of next entry
--*/
{
DWORD Index;
switch (Level) {
case 1: {
PNET_DISPLAY_USER NetDisplayUser = (PNET_DISPLAY_USER) Buffer;
printf("%4.4ld %-20.20ws comm:%ws flg:%lx full:%ws rid:%lx\n",
NetDisplayUser->usri1_next_index,
NetDisplayUser->usri1_name,
NetDisplayUser->usri1_comment,
NetDisplayUser->usri1_flags,
NetDisplayUser->usri1_full_name,
NetDisplayUser->usri1_user_id );
Index = NetDisplayUser->usri1_next_index;
break;
}
case 2: {
PNET_DISPLAY_MACHINE NetDisplayMachine = (PNET_DISPLAY_MACHINE) Buffer;
printf("%4.4ld %-20.20ws comm:%ws flg:%lx rid:%lx\n",
NetDisplayMachine->usri2_next_index,
NetDisplayMachine->usri2_name,
NetDisplayMachine->usri2_comment,
NetDisplayMachine->usri2_flags,
NetDisplayMachine->usri2_user_id );
Index = NetDisplayMachine->usri2_next_index;
break;
}
case 3: {
PNET_DISPLAY_GROUP NetDisplayGroup = (PNET_DISPLAY_GROUP) Buffer;
printf("%4.4ld %-20.20ws comm:%ws attr:%lx rid:%lx\n",
NetDisplayGroup->grpi3_next_index,
NetDisplayGroup->grpi3_name,
NetDisplayGroup->grpi3_comment,
NetDisplayGroup->grpi3_attributes,
NetDisplayGroup->grpi3_group_id );
Index = NetDisplayGroup->grpi3_next_index;
break;
}
}
return Index;
}
int __cdecl
main(
IN int argc,
IN char ** argv
)
/*++
Routine Description:
Test program for NetQueryDisplayInformation and
NetGetDisplayInformationIndex API functions
Arguments:
argc - the number of command-line arguments.
argv - an array of pointers to the arguments.
Return Value:
Exit status
--*/
{
NET_API_STATUS NetStatus;
char *end;
DWORD i;
DWORD FixedSize;
LPWSTR ServerName = NULL;
DWORD Level = 1;
DWORD Index = 0;
DWORD EntriesRequested = 0xFFFFFFFF;
DWORD PreferredMaximumLength = 0xFFFFFFFF;
LPWSTR Prefix = NULL;
DWORD ReturnedEntryCount;
PVOID SortedBuffer;
if ( argc > 1 ) {
ServerName = NetpAllocWStrFromStr( argv[1] );
}
if ( argc > 2 ) {
Level = strtoul( argv[2], &end, 10 );
}
if ( argc > 3 ) {
Index = strtoul( argv[3], &end, 10 );
}
if ( argc > 4 ) {
EntriesRequested = strtoul( argv[4], &end, 10 );
}
if ( argc > 5 ) {
PreferredMaximumLength = strtoul( argv[5], &end, 10 );
}
if ( argc > 6 ) {
Prefix = NetpAllocWStrFromStr( argv[6] );
}
//
// Size of each entry.
//
switch (Level) {
case 1:
FixedSize = sizeof(NET_DISPLAY_USER);
break;
case 2:
FixedSize = sizeof(NET_DISPLAY_MACHINE);
break;
case 3:
FixedSize = sizeof(NET_DISPLAY_GROUP);
break;
default:
FixedSize = 0;
break;
}
printf( "Server: %ws Level: %ld Index: %ld EntriesRequested: %ld PrefMax: %ld\n",
ServerName,
Level,
Index,
EntriesRequested,
PreferredMaximumLength );
if ( Prefix != NULL) {
printf( "Prefix: %ws\n", Prefix );
NetStatus = NetGetDisplayInformationIndex(
ServerName,
Level,
Prefix,
&Index );
printf( "Status from NetGetDisplayInformationIndex: %ld\n", NetStatus );
if ( NetStatus != NERR_Success ) {
return 0;
}
printf( "NewIndex: %ld\n", Index );
}
do {
NetStatus = NetQueryDisplayInformation(
ServerName,
Level,
Index,
EntriesRequested,
PreferredMaximumLength,
&ReturnedEntryCount,
&SortedBuffer );
printf( "Count: %ld Status: %ld\n",
ReturnedEntryCount,
NetStatus );
if ( NetStatus != NERR_Success && NetStatus != ERROR_MORE_DATA ) {
break;
}
for ( i=0; i<ReturnedEntryCount; i++ ) {
Index = DisplayStruct( Level,
((LPBYTE) SortedBuffer) + FixedSize * i );
}
//
// Free the returned buffer.
//
NetApiBufferFree( SortedBuffer );
} while ( NetStatus == ERROR_MORE_DATA );
return 0;
}