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;
|
|||
|
}
|