274 lines
5.7 KiB
C
274 lines
5.7 KiB
C
/*++
|
||
|
||
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;
|
||
}
|