141 lines
3.1 KiB
C
141 lines
3.1 KiB
C
/*++
|
|
|
|
Copyright (c) 1991 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
rxlgenum.c
|
|
|
|
Abstract:
|
|
|
|
Routines in this module implement the down-level remoted NetLogon
|
|
functions exported in NT
|
|
|
|
Contains RxNetLogon routines:
|
|
RxNetLogonEnum
|
|
|
|
Author:
|
|
|
|
Richard Firth (rfirth) 20-May-1991
|
|
|
|
Environment:
|
|
|
|
Win-32/flat address space
|
|
|
|
Notes:
|
|
|
|
Routines in this module assume that caller-supplied parameters have
|
|
already been verified. No effort is made to further check the veracity
|
|
of parms. Any actions causing exceptions must be trapped at a higher
|
|
level. This applies to ALL parameters - strings, pointers, buffers, etc.
|
|
|
|
Revision History:
|
|
|
|
20-May-1991 RFirth
|
|
Created
|
|
13-Sep-1991 JohnRo
|
|
Made changes as suggested by PC-LINT.
|
|
05-Dec-1991 RFirth
|
|
Enum returns in TotalEntries (or EntriesLeft) the number of items to
|
|
be enumerated BEFORE this call. Used to be number left after this call
|
|
|
|
--*/
|
|
|
|
|
|
|
|
#include "downlevl.h"
|
|
#include <rxlgenum.h>
|
|
|
|
|
|
|
|
NET_API_STATUS
|
|
RxNetLogonEnum(
|
|
IN LPTSTR ServerName,
|
|
IN DWORD Level,
|
|
OUT LPBYTE* Buffer,
|
|
IN DWORD PrefMaxLen,
|
|
OUT LPDWORD EntriesRead,
|
|
OUT LPDWORD EntriesLeft,
|
|
IN OUT LPDWORD ResumeHandle OPTIONAL
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
description-of-function.
|
|
|
|
Arguments:
|
|
|
|
ServerName - Where the NetLogonEnum API will be remoted
|
|
Level - Of info to return - 0 or 2
|
|
Buffer - Pointer to pointer to returned buffer
|
|
PrefMaxLen - Caller's preferred maximum returned buffer size
|
|
EntriesRead - Pointer to returned number of items in Buffer
|
|
EntriesLeft - Pointer to returned number of items left to enumerate at server
|
|
ResumeHandle- Handle used for subsequent enumerations
|
|
|
|
Return Value:
|
|
|
|
NET_API_STATUS
|
|
Success - NERR_Success
|
|
Failure -
|
|
|
|
--*/
|
|
|
|
{
|
|
LPDESC pDesc16, pDesc32, pDescSmb;
|
|
LPBYTE bufptr;
|
|
DWORD entries_read, total_entries;
|
|
NET_API_STATUS rc;
|
|
|
|
UNREFERENCED_PARAMETER(PrefMaxLen);
|
|
UNREFERENCED_PARAMETER(ResumeHandle);
|
|
|
|
*Buffer = NULL;
|
|
*EntriesRead = *EntriesLeft = 0;
|
|
|
|
switch (Level) {
|
|
case 0:
|
|
pDesc16 = REM16_user_logon_info_0;
|
|
pDesc32 = REM32_user_logon_info_0;
|
|
pDescSmb = REMSmb_user_logon_info_0;
|
|
break;
|
|
|
|
case 2:
|
|
pDesc16 = REM16_user_logon_info_2;
|
|
pDesc32 = REM32_user_logon_info_2;
|
|
pDescSmb = REMSmb_user_logon_info_2;
|
|
break;
|
|
|
|
default:
|
|
return ERROR_INVALID_LEVEL;
|
|
}
|
|
|
|
bufptr = NULL;
|
|
rc = RxRemoteApi(API_WLogonEnum,
|
|
ServerName,
|
|
REMSmb_NetLogonEnum_P,
|
|
pDesc16,
|
|
pDesc32,
|
|
pDescSmb,
|
|
NULL, NULL, NULL,
|
|
ALLOCATE_RESPONSE,
|
|
Level,
|
|
&bufptr,
|
|
65535,
|
|
&entries_read,
|
|
&total_entries
|
|
);
|
|
if (rc) {
|
|
if (bufptr) {
|
|
(void) NetApiBufferFree(bufptr);
|
|
}
|
|
} else {
|
|
*EntriesRead = entries_read;
|
|
*EntriesLeft = total_entries;
|
|
*Buffer = bufptr;
|
|
}
|
|
return rc;
|
|
}
|