NT4/private/newsam2/server/dsutilp.h
2020-09-30 17:12:29 +02:00

174 lines
5.0 KiB
C

/*++
Copyright (c) 1990 Microsoft Corporation
Module Name:
dsutilp.h
Abstract:
This file contains definitions private to the SAM server program.
Author:
Chris Mayhall (ChrisMay) 09-May-1996
Environment:
User Mode - Win32
Revision History:
ChrisMay 09-May-1996
Created initial file.
--*/
#ifndef _DSUTILP_H_
#define _DSUTILP_H_
// Include DSA header files to resolve READARG, READRES, etc.
#include <duapi.h> // DS data types, READRES
#include <drs.h> // DS data types, ATTRBLOCK, ATTR, ATTRVAL
#include <core.h> // DS data types, ENTINF, COMMRES
// Wrap the DS typedefs with private typedefs to insulate the SAM code from
// onging changes to the DS structure names.
typedef READRES DSDATA, *PDSDATA;
typedef ATTR DSATTR, *PDSATTR;
typedef ATTRVAL DSATTRVAL, *PDSATTRVAL;
typedef ATTRBLOCK DSATTRBLOCK, *PDSATTRBLOCK;
typedef ATTRVALBLOCK DSATTRVALBLOCK, *PDSATTRVALBLOCK;
typedef ATTRMODLIST DSATTRMODLIST, *PDSATTRMODLIST;
//
// The following type is used to identify which grouping of attribute
// (fixed or variable-length) are being refered to in a number of api.
//
#define SAMP_FIXED_ATTRIBUTES (0L)
#define SAMP_VARIABLE_ATTRIBUTES (1L)
// BUG: Defining BOGUS_TYPE. This type is used to indicate a missing or
// erroneous data type in the various AttributeMappingTables, found in
// mappings.c.
#define BOGUS_TYPE 0
// SAM does not explicity store type or length information for its fixed-
// length attributes, but the DS storage routines require this information.
// This structure is intended to store any "patch" information needed for
// the DS backing store, as regards fixed attributes.
typedef struct _SAMP_FIXED_ATTRIBUTE_TYPE_INFO
{
// Type of the fixed-length attribute.
ULONG Type;
// Byte count of the fixed-length attribute.
ULONG Length;
} SAMP_FIXED_ATTRIBUTE_TYPE_INFO, PSAMP_FIXED_ATTRIBUTE_TYPE_INFO;
// These constants are used to allocate a table of fixed-attribute informa-
// tion structures. If elements are added or removed from SAMP_OBJECT_TYPE,
// or if structure members in any of the SAM fixed-attribute strucutes are
// added or removed, then these constants must be updated to reflect the new
// members. SAMP_ATTRIBUTE_TYPES_MAX is the maximum number of attributes in
// any single SAM object.
#define SAMP_OBJECT_TYPES_MAX 5
#define SAMP_FIXED_ATTRIBUTES_MAX 18
#define SAMP_VAR_ATTRIBUTES_MAX 18
// These values of these constants are equal to the number of data members in
// the SAM fixed-length attribute structures for each object type. These con-
// stants must be updated whenever data members are added or removed from the
// fixed-length attributes structures.
#define SAMP_SERVER_FIXED_ATTR_COUNT 1
#define SAMP_DOMAIN_FIXED_ATTR_COUNT 18
#define SAMP_GROUP_FIXED_ATTR_COUNT 6
#define SAMP_ALIAS_FIXED_ATTR_COUNT 1
#define SAMP_USER_FIXED_ATTR_COUNT 17
// These type-information arrays are used by the routines in this file. They
// contain data type/size information that is needed by the DS routines for
// reading/writing data. Changes to the fixed-length attribute structures re-
// quire corresponding updates to these arrays.
extern SAMP_FIXED_ATTRIBUTE_TYPE_INFO
SampFixedAttributeInfo[SAMP_OBJECT_TYPES_MAX][SAMP_FIXED_ATTRIBUTES_MAX];
// SAM variable-length attributes explicitly store length and the number
// of attributes for each object is defined in samsrvp.h. No type information,
// however is stored with these attributes, so define this table.
typedef struct _SAMP_VAR_ATTRIBUTE_TYPE_INFO
{
// Type of the variable-length attribute.
ULONG Type;
} SAMP_VAR_ATTRIBUTE_TYPE_INFO, PSAMP_VAR_ATTRIBUTE_TYPE_INFO;
extern SAMP_VAR_ATTRIBUTE_TYPE_INFO
SampVarAttributeInfo[SAMP_OBJECT_TYPES_MAX][SAMP_VAR_ATTRIBUTES_MAX];
// Routine forward declarations.
NTSTATUS
SampConvertAttrBlockToVarLengthAttributes(
IN INT ObjectType,
IN PDSATTRBLOCK DsAttributes,
OUT PSAMP_VARIABLE_LENGTH_ATTRIBUTE *SamAttributes,
OUT PULONG TotalLength
);
NTSTATUS
SampConvertVarLengthAttributesToAttrBlock(
IN INT ObjectType,
IN PSAMP_VARIABLE_LENGTH_ATTRIBUTE SamAttributes,
OUT PDSATTRBLOCK *DsAttributes
);
NTSTATUS
SampConvertAttrBlockToFixedLengthAttributes(
IN INT ObjectType,
IN PDSATTRBLOCK DsAttributes,
OUT PVOID *SamAttributes,
OUT PULONG TotalLength
);
NTSTATUS
SampConvertFixedLengthAttributesToAttrBlock(
IN INT ObjectType,
IN PVOID SamAttributes,
OUT PDSATTRBLOCK *DsAttributes
);
NTSTATUS
SampConvertAttrBlockToCombinedAttributes(
IN INT ObjectType,
IN PDSATTRBLOCK DsAttributes,
OUT PVOID *SamAttributes,
OUT PULONG FixedLength,
OUT PULONG VariableLength
);
NTSTATUS
SampConvertCombinedAttributesToAttrBlock(
IN INT ObjectType,
IN PVOID SamAttributes,
IN ULONG FixedLength,
IN ULONG VariableLength,
OUT PDSATTRBLOCK *DsAttributes
);
#endif // _DSUTIL_H_