1767 lines
60 KiB
C++
1767 lines
60 KiB
C++
/*++
|
|
|
|
Copyright (c) 1995 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
Nds32.h
|
|
|
|
Abstract:
|
|
|
|
This module defines functions to access and manage Novell NDS Directory
|
|
objects and attributes using the Microsoft NT Netware redirector.
|
|
|
|
|
|
---- NDS Object functions ----
|
|
|
|
NwNdsAddObject
|
|
NwNdsCloseObject
|
|
NwNdsGetEffectiveRights
|
|
NwNdsListSubObjects
|
|
NwNdsModifyObject
|
|
NwNdsMoveObject
|
|
NwNdsOpenObject
|
|
NwNdsReadObject
|
|
NwNdsRemoveObject
|
|
NwNdsRenameObject
|
|
|
|
|
|
---- NDS Buffer functions ----
|
|
|
|
NwNdsCreateBuffer
|
|
NwNdsFreeBuffer
|
|
|
|
|
|
---- NDS Marshaling functions to prepare or read data buffers ----
|
|
|
|
NwNdsGetAttrDefListFromBuffer
|
|
NwNdsGetAttrListFromBuffer
|
|
NwNdsGetClassDefListFromBuffer
|
|
NwNdsGetObjectListFromBuffer
|
|
NwNdsPutInBuffer
|
|
|
|
|
|
---- NDS Schema functions ----
|
|
|
|
NwNdsAddAttributeToClass
|
|
NwNdsDefineAttribute
|
|
NwNdsDefineClass
|
|
NwNdsDeleteAttrDef
|
|
NwNdsDeleteClassDef
|
|
NwNdsGetSyntaxID
|
|
NwNdsReadAttrDef
|
|
NwNdsReadClassDef
|
|
|
|
|
|
---- NDS Schema functions under investigation ----
|
|
|
|
NwNdsListContainableClasses(IN ParentObjectHandle,OUT ListOfClassNames);
|
|
|
|
|
|
---- NDS Search functions ----
|
|
|
|
NwNdsCreateQueryNode
|
|
NwNdsDeleteQueryNode
|
|
NwNdsDeleteQueryTree
|
|
NwNdsSearch
|
|
|
|
|
|
---- NDS Special functions ----
|
|
|
|
NwNdsChangeUserPassword
|
|
|
|
|
|
---- NDS File functions under investigation ----
|
|
|
|
NwNdsAddTrusteeToFile
|
|
NwNdsAllocateFileHandle
|
|
NwNdsDeallocateFileHandle
|
|
NwNdsGetEffectiveDirectoryRights
|
|
NwNdsGetObjectEffectiveRights
|
|
NwNdsRemoveTrusteeFromFile
|
|
|
|
|
|
Author:
|
|
|
|
Glenn Curtis [GlennC] 15-Dec-1995
|
|
Glenn Curtis [GlennC] 04-Apr-1996 - Added Schema APIs
|
|
|
|
--*/
|
|
|
|
#ifndef __NDSOBJ32_H
|
|
#define __NDSOBJ32_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif /* __cplusplus */
|
|
|
|
#include "ndssntx.h"
|
|
#include "ndsattr.h"
|
|
#include "ndsclass.h"
|
|
|
|
|
|
/* Netware NDS general definitions */
|
|
|
|
#define NDS_MAX_NAME_CHARS 256
|
|
#define NDS_MAX_NAME_SIZE ( NDS_MAX_NAME_CHARS * 2 )
|
|
#define NDS_MAX_SCHEMA_NAME_CHARS 32
|
|
#define NDS_MAX_SCHEMA_NAME_BYTES ( 2 * ( NDS_MAX_SCHEMA_NAME_CHARS + 1 ) )
|
|
#define NDS_MAX_TREE_NAME_LEN 32
|
|
#define NDS_MAX_ASN1_NAME_LEN 32
|
|
#define NDS_NO_MORE_ITERATIONS 0xFFFFFFFF
|
|
#define NDS_INITIAL_SEARCH 0xFFFFFFFF
|
|
|
|
|
|
/* Netware NDS create buffer operations */
|
|
|
|
#define NDS_OBJECT_ADD 0
|
|
#define NDS_OBJECT_MODIFY 1
|
|
#define NDS_OBJECT_READ 2
|
|
#define NDS_OBJECT_LIST_SUBORDINATES 3
|
|
#define NDS_SCHEMA_DEFINE_CLASS 4
|
|
#define NDS_SCHEMA_READ_ATTR_DEF 5
|
|
#define NDS_SCHEMA_READ_CLASS_DEF 6
|
|
#define NDS_SEARCH 7
|
|
|
|
|
|
/* Netware NDS attribute modification operations */
|
|
|
|
#define NDS_ATTR_ADD 0 /* Add first value to an attribute,
|
|
error if it already exists */
|
|
#define NDS_ATTR_REMOVE 1 /* Remove all values from an attribute,
|
|
error if attribute doesn't exist */
|
|
#define NDS_ATTR_ADD_VALUE 2 /* Add first or additional value to
|
|
an attribute, error if duplicate */
|
|
#define NDS_ATTR_REMOVE_VALUE 3 /* Remove a value from an attribute,
|
|
error if it doesn't exist */
|
|
#define NDS_ATTR_ADDITIONAL_VALUE 4 /* Add additional value to an attribute,
|
|
error if duplicate or first value */
|
|
#define NDS_ATTR_OVERWRITE_VALUE 5 /* Add first or additional value to an
|
|
attribute, overwrite if duplicate */
|
|
#define NDS_ATTR_CLEAR 6 /* Remove all values from an attribute,
|
|
no error if attribute doesn't exist */
|
|
#define NDS_ATTR_CLEAR_VALUE 7 /* Remove a value from an attribute,
|
|
no error if it doesn't exist */
|
|
|
|
|
|
/* Netware NDS schema attribute definition flags */
|
|
|
|
#define NDS_SINGLE_VALUED_ATTR 0x0001
|
|
#define NDS_SIZED_ATTR 0x0002
|
|
#define NDS_NONREMOVABLE_ATTR 0x0004 // Only for NwNDSReadAttributeDef
|
|
#define NDS_READ_ONLY_ATTR 0x0008 // Only for NwNDSReadAttributeDef
|
|
#define NDS_HIDDEN_ATTR 0x0010 // Only for NwNDSReadAttributeDef
|
|
#define NDS_STRING_ATTR 0x0020 // Only for NwNDSReadAttributeDef
|
|
#define NDS_SYNC_IMMEDIATE 0x0040
|
|
#define NDS_PUBLIC_READ 0x0080
|
|
#define NDS_SERVER_READ 0x0100 // Only for NwNDSReadAttributeDef
|
|
#define NDS_WRITE_MANAGED 0x0200
|
|
#define NDS_PER_REPLICA 0x0400
|
|
|
|
|
|
/* Netware NDS schema class definition flags */
|
|
|
|
#define NDS_CONTAINER_CLASS 0x01
|
|
#define NDS_EFFECTIVE_CLASS 0x02
|
|
#define NDS_NONREMOVABLE_CLASS 0x04
|
|
#define NDS_AMBIGUOUS_NAMING 0x08
|
|
#define NDS_AMBIGUOUS_CONTAINMENT 0x10
|
|
|
|
|
|
/* Netware NDS information flags */
|
|
|
|
#define NDS_INFO_NAMES 0 // Search and Read operations
|
|
#define NDS_INFO_ATTR_NAMES_VALUES 1 // Search operations
|
|
#define NDS_INFO_NAMES_DEFS 1 // Read operations
|
|
#define NDS_CLASS_INFO_EXPANDED_DEFS 2 // Schema class definition only
|
|
|
|
|
|
/* Netware NDS information flags - NOT YET SUPPORTED */
|
|
|
|
#define NDS_CLASS_INFO 3 // Schema class definition only
|
|
|
|
|
|
/* Netware NDS attribute right definitions */
|
|
|
|
#define NDS_RIGHT_COMPARE_ATTR 0x00000001L
|
|
#define NDS_RIGHT_READ_ATTR 0x00000002L
|
|
#define NDS_RIGHT_WRITE_ATTR 0x00000004L
|
|
#define NDS_RIGHT_ADD_SELF_ATTR 0x00000008L
|
|
#define NDS_RIGHT_SUPERVISE_ATTR 0x00000020L
|
|
|
|
|
|
/* Netware NDS object right definitions */
|
|
|
|
#define NDS_RIGHT_BROWSE_OBJECT 0x00000001L
|
|
#define NDS_RIGHT_CREATE_OBJECT 0x00000002L
|
|
#define NDS_RIGHT_DELETE_OBJECT 0x00000004L
|
|
#define NDS_RIGHT_RENAME_OBJECT 0x00000008L
|
|
#define NDS_RIGHT_SUPERVISE_OBJECT 0x00000010L
|
|
|
|
|
|
/* Netware file right definitions */
|
|
|
|
#define NW_RIGHTS WORD
|
|
|
|
#define NW_RIGHT_NONE 0x0000
|
|
#define NW_RIGHT_READ_FROM_FILE 0x0001
|
|
#define NW_RIGHT_WRITE_TO_FILE 0x0002
|
|
#define NW_RIGHT_CREATE_DIR_OR_FILE 0x0008
|
|
#define NW_RIGHT_ERASE_DIR_OR_FILE 0x0010
|
|
#define NW_RIGHT_ACCESS_CONTROL 0x0020
|
|
#define NW_RIGHT_FILE_SCAN 0x0040
|
|
#define NW_RIGHT_MODIFY_DIR_OR_FILE 0x0080
|
|
#define NW_RIGHT_SUPERVISOR 0x0100
|
|
#define NW_RIGHT_ALL NW_RIGHT_READ_FROM_FILE | \
|
|
NW_RIGHT_WRITE_TO_FILE | \
|
|
NW_RIGHT_CREATE_DIR_OR_FILE | \
|
|
NW_RIGHT_ERASE_DIR_OR_FILE | \
|
|
NW_RIGHT_ACCESS_CONTROL | \
|
|
NW_RIGHT_FILE_SCAN | \
|
|
NW_RIGHT_MODIFY_DIR_OR_FILE
|
|
|
|
|
|
/* Netware NDS query node operations for building a search query */
|
|
|
|
#define NDS_QUERY_OR 0x00000001L
|
|
#define NDS_QUERY_AND 0x00000002L
|
|
#define NDS_QUERY_NOT 0x00000003L
|
|
#define NDS_QUERY_EQUAL 0x00000007L
|
|
#define NDS_QUERY_GE 0x00000008L
|
|
#define NDS_QUERY_LE 0x00000009L
|
|
#define NDS_QUERY_APPROX 0x0000000AL
|
|
#define NDS_QUERY_PRESENT 0x0000000FL
|
|
|
|
|
|
/* Netware NDS search query scopes */
|
|
|
|
#define NDS_SCOPE_ONE_LEVEL 0x00000000L
|
|
#define NDS_SCOPE_SUB_TREE 0x00000001L
|
|
#define NDS_SCOPE_BASE_LEVEL 0x00000002L
|
|
|
|
|
|
/* Netware NDS function return codes */
|
|
|
|
#define NDS_ERR_SUCCESS 0x00000000
|
|
#define NDS_ERR_NO_SUCH_ENTRY 0xFFFFFDA7
|
|
#define NDS_ERR_NO_SUCH_VALUE 0xFFFFFDA6
|
|
#define NDS_ERR_NO_SUCH_ATTRIBUTE 0xFFFFFDA5
|
|
#define NDS_ERR_NO_SUCH_CLASS 0xFFFFFDA4
|
|
#define NDS_ERR_NO_SUCH_PARTITION 0xFFFFFDA3
|
|
#define NDS_ERR_ENTRY_ALREADY_EXISTS 0xFFFFFDA2
|
|
#define NDS_ERR_NOT_EFFECTIVE_CLASS 0xFFFFFDA1
|
|
#define NDS_ERR_ILLEGAL_ATTRIBUTE 0xFFFFFDA0
|
|
#define NDS_ERR_MISSING_MANDATORY 0xFFFFFD9F
|
|
#define NDS_ERR_ILLEGAL_DS_NAME 0xFFFFFD9E
|
|
#define NDS_ERR_ILLEGAL_CONTAINMENT 0xFFFFFD9D
|
|
#define NDS_ERR_CANT_HAVE_MULTIPLE_VALUES 0xFFFFFD9C
|
|
#define NDS_ERR_SYNTAX_VIOLATION 0xFFFFFD9B
|
|
#define NDS_ERR_DUPLICATE_VALUE 0xFFFFFD9A
|
|
#define NDS_ERR_ATTRIBUTE_ALREADY_EXISTS 0xFFFFFD99
|
|
#define NDS_ERR_MAXIMUM_ENTRIES_EXIST 0xFFFFFD98
|
|
#define NDS_ERR_DATABASE_FORMAT 0xFFFFFD97
|
|
#define NDS_ERR_INCONSISTANT_DATABASE 0xFFFFFD96
|
|
#define NDS_ERR_INVALID_COMPARISON 0xFFFFFD95
|
|
#define NDS_ERR_COMPARISON_FAILED 0xFFFFFD94
|
|
#define NDS_ERR_TRANSACTIONS_DISABLED 0xFFFFFD93
|
|
#define NDS_ERR_INVALID_TRANSPORT 0xFFFFFD92
|
|
#define NDS_ERR_SYNTAX_INVALID_IN_NAME 0xFFFFFD91
|
|
#define NDS_ERR_REPLICA_ALREADY_EXISTS 0xFFFFFD90
|
|
#define NDS_ERR_TRANSPORT_FAILURE 0xFFFFFD8F
|
|
#define NDS_ERR_ALL_REFERRALS_FAILED 0xFFFFFD8E
|
|
#define NDS_ERR_CANT_REMOVE_NAMING_VALUE 0xFFFFFD8D
|
|
#define NDS_ERR_OBJECT_CLASS_VIOLATION 0xFFFFFD8C
|
|
#define NDS_ERR_ENTRY_IS_NOT_LEAF 0xFFFFFD8B
|
|
#define NDS_ERR_DIFFERENT_TREE 0xFFFFFD8A
|
|
#define NDS_ERR_ILLEGAL_REPLICA_TYPE 0xFFFFFD89
|
|
#define NDS_ERR_SYSTEM_FAILURE 0xFFFFFD88
|
|
#define NDS_ERR_INVALID_ENTRY_FOR_ROOT 0xFFFFFD87
|
|
#define NDS_ERR_NO_REFERRALS 0xFFFFFD86
|
|
#define NDS_ERR_REMOTE_FAILURE 0xFFFFFD85
|
|
#define NDS_ERR_PREVIOUS_MOVE_IN_PROGRESS 0xFFFFFD83
|
|
#define NDS_ERR_INVALID_REQUEST 0xFFFFFD7F
|
|
#define NDS_ERR_INVALID_ITERATION 0xFFFFFD7E
|
|
#define NDS_ERR_SCHEMA_IS_NONREMOVABLE 0xFFFFFD7D
|
|
#define NDS_ERR_SCHEMA_IS_IN_USE 0xFFFFFD7C
|
|
#define NDS_ERR_CLASS_ALREADY_EXISTS 0xFFFFFD7B
|
|
#define NDS_ERR_BAD_NAMING_ATTRIBUTES 0xFFFFFD7A
|
|
#define NDS_ERR_NOT_ROOT_PARTITION 0xFFFFFD79
|
|
#define NDS_ERR_INSUFFICIENT_STACK 0xFFFFFD78
|
|
#define NDS_ERR_INSUFFICIENT_BUFFER 0xFFFFFD77
|
|
#define NDS_ERR_AMBIGUOUS_CONTAINMENT 0xFFFFFD76
|
|
#define NDS_ERR_AMBIGUOUS_NAMING 0xFFFFFD75
|
|
#define NDS_ERR_DUPLICATE_MANDATORY 0xFFFFFD74
|
|
#define NDS_ERR_DUPLICATE_OPTIONAL 0xFFFFFD73
|
|
#define NDS_ERR_MULTIPLE_REPLICAS 0xFFFFFD71
|
|
#define NDS_ERR_CRUCIAL_REPLICA 0xFFFFFD70
|
|
#define NDS_ERR_SCHEMA_SYNC_IN_PROGRESS 0xFFFFFD6F
|
|
#define NDS_ERR_SKULK_IN_PROGRESS 0xFFFFFD6E
|
|
#define NDS_ERR_TIME_NOT_SYNCRONIZED 0xFFFFFD6D
|
|
#define NDS_ERR_RECORD_IN_USE 0xFFFFFD6C
|
|
#define NDS_ERR_DS_VOLUME_NOT_MOUNTED 0xFFFFFD6B
|
|
#define NDS_ERR_DS_VOLUME_IO_FAILURE 0xFFFFFD6A
|
|
#define NDS_ERR_DS_LOCKED 0xFFFFFD69
|
|
#define NDS_ERR_OLD_EPOCH 0xFFFFFD68
|
|
#define NDS_ERR_NEW_EPOCH 0xFFFFFD67
|
|
#define NDS_ERR_PARTITION_ROOT 0xFFFFFD65
|
|
#define NDS_ERR_ENTRY_NOT_CONTAINER 0xFFFFFD64
|
|
#define NDS_ERR_FAILED_AUTHENTICATION 0xFFFFFD63
|
|
#define NDS_ERR_NO_SUCH_PARENT 0xFFFFFD61
|
|
#define NDS_ERR_NO_ACCESS 0xFFFFFD60
|
|
#define NDS_ERR_REPLICA_NOT_ON 0xFFFFFD5F
|
|
#define NDS_ERR_DUPLICATE_ACL 0xFFFFFD5A
|
|
#define NDS_ERR_PARTITION_ALREADY_EXISTS 0xFFFFFD59
|
|
#define NDS_ERR_NOT_SUBREF 0xFFFFFD58
|
|
#define NDS_ERR_ALIAS_OF_AN_ALIAS 0xFFFFFD57
|
|
#define NDS_ERR_AUDITING_FAILED 0xFFFFFD56
|
|
#define NDS_ERR_INVALID_API_VERSION 0xFFFFFD55
|
|
#define NDS_ERR_SECURE_NCP_VIOLATION 0xFFFFFD54
|
|
#define NDS_ERR_FATAL 0xFFFFFD45
|
|
|
|
|
|
/* Structure definitions used */
|
|
|
|
typedef struct _WSTR_LIST_ELEM
|
|
{
|
|
struct _WSTR_LIST_ELEM * Next;
|
|
LPWSTR szString;
|
|
|
|
} WSTR_LIST_ELEM, * LPWSTR_LIST;
|
|
|
|
typedef struct
|
|
{
|
|
DWORD length;
|
|
BYTE data[NDS_MAX_ASN1_NAME_LEN];
|
|
|
|
} ASN1_ID, * LPASN1_ID;
|
|
|
|
//
|
|
// NDS Attribute Definition structure
|
|
//
|
|
typedef struct
|
|
{
|
|
LPWSTR szAttributeName;
|
|
DWORD dwFlags;
|
|
DWORD dwSyntaxID;
|
|
DWORD dwLowerLimit;
|
|
DWORD dwUpperLimit;
|
|
ASN1_ID asn1ID;
|
|
|
|
} NDS_ATTR_DEF, * LPNDS_ATTR_DEF;
|
|
|
|
//
|
|
// NDS Class Definition structure
|
|
//
|
|
typedef struct
|
|
{
|
|
LPWSTR szClassName;
|
|
DWORD dwFlags;
|
|
ASN1_ID asn1ID;
|
|
DWORD dwNumberOfSuperClasses;
|
|
LPWSTR_LIST lpSuperClasses;
|
|
DWORD dwNumberOfContainmentClasses;
|
|
LPWSTR_LIST lpContainmentClasses;
|
|
DWORD dwNumberOfNamingAttributes;
|
|
LPWSTR_LIST lpNamingAttributes;
|
|
DWORD dwNumberOfMandatoryAttributes;
|
|
LPWSTR_LIST lpMandatoryAttributes;
|
|
DWORD dwNumberOfOptionalAttributes;
|
|
LPWSTR_LIST lpOptionalAttributes;
|
|
|
|
} NDS_CLASS_DEF, * LPNDS_CLASS_DEF;
|
|
|
|
//
|
|
// If read results from NwNdsReadAttrDef, or NwNdsReadClassDef
|
|
// returned names only (no attribute or class definitions),
|
|
// then an array of these NDS_DEF_NAME_ONLY structures is returned.
|
|
//
|
|
typedef struct
|
|
{
|
|
LPWSTR szName;
|
|
|
|
} NDS_NAME_ONLY, * LPNDS_NAME_ONLY;
|
|
|
|
//
|
|
// NDS Attribute Information structure
|
|
//
|
|
typedef struct
|
|
{
|
|
LPWSTR szAttributeName;
|
|
DWORD dwSyntaxId;
|
|
DWORD dwNumberOfValues;
|
|
LPBYTE lpValue;
|
|
|
|
} NDS_ATTR_INFO, * LPNDS_ATTR_INFO;
|
|
|
|
//
|
|
// NDS Object Information structure
|
|
//
|
|
typedef struct
|
|
{
|
|
LPWSTR szObjectFullName;
|
|
LPWSTR szObjectName;
|
|
LPWSTR szObjectClass;
|
|
DWORD dwEntryId;
|
|
DWORD dwModificationTime;
|
|
DWORD dwSubordinateCount;
|
|
DWORD dwNumberOfAttributes; // Zero for NwNdsReadObject results.
|
|
LPVOID lpAttribute; // For NwNdsSearch results, cast this
|
|
// to either LPNDS_ATTR_INFO or
|
|
// LPNDS_NAME_ONLY, depending on value of
|
|
// lpdwAttrInformationType from call to
|
|
// NwNdsGetObjectListFromBuffer.
|
|
|
|
} NDS_OBJECT_INFO, * LPNDS_OBJECT_INFO;
|
|
|
|
//
|
|
// tommye MS bug 88021 / MCS
|
|
//
|
|
// Moved this structure here from nw/nwlib/nds32.c so it could be
|
|
// accessed by NwNdsObjectHandleToConnHandle() in nw/nwlib/nwapi32.c.
|
|
// Renamed it from NDS_OBJECT to NDS_OBJECT_PRIV to avoid conflict
|
|
// with other structure of the same name.
|
|
//
|
|
|
|
typedef struct
|
|
{
|
|
DWORD Signature;
|
|
HANDLE NdsTree;
|
|
DWORD ObjectId;
|
|
DWORD ResumeId;
|
|
DWORD NdsRawDataBuffer;
|
|
DWORD NdsRawDataSize;
|
|
DWORD NdsRawDataId;
|
|
DWORD NdsRawDataCount;
|
|
WCHAR szContainerName[NDS_MAX_NAME_CHARS];
|
|
WCHAR szRelativeName[NDS_MAX_NAME_CHARS];
|
|
|
|
} NDS_OBJECT_PRIV, * LPNDS_OBJECT_PRIV;
|
|
|
|
//
|
|
// List Subordinate Objects Search Filter structures
|
|
//
|
|
typedef struct
|
|
{
|
|
LPWSTR szObjectClass;
|
|
|
|
} NDS_FILTER, * LPNDS_FILTER;
|
|
|
|
typedef struct
|
|
{
|
|
DWORD dwNumberOfFilters;
|
|
NDS_FILTER Filters[1];
|
|
|
|
} NDS_FILTER_LIST, * LPNDS_FILTER_LIST;
|
|
|
|
//
|
|
// NDS Search Query Tree structure
|
|
//
|
|
typedef struct _QUERY_NODE
|
|
{
|
|
DWORD dwOperation;
|
|
DWORD dwSyntaxId;
|
|
struct _QUERY_NODE * lpLVal;
|
|
struct _QUERY_NODE * lpRVal;
|
|
|
|
} QUERY_NODE, * LPQUERY_NODE, * LPQUERY_TREE;
|
|
|
|
//
|
|
// Given an NDS object handle, provides the NDS object ID
|
|
//
|
|
#define NwNdsGetObjectId(hObject) (((LPNDS_OBJECT_PRIV) hObject)->ObjectId)
|
|
|
|
/* API definitions */
|
|
|
|
DWORD
|
|
NwNdsAddObject(
|
|
IN HANDLE hParentObject,
|
|
IN LPWSTR szObjectName,
|
|
IN HANDLE hOperationData );
|
|
/*
|
|
NwNdsAddObject()
|
|
|
|
This function is used to add a leaf object to an NDS directory tree.
|
|
|
|
Arguments:
|
|
|
|
HANDLE hParentObject - A handle to the parent object in
|
|
the directory tree to add a new leaf to. Handle is
|
|
obtained by calling NwNdsOpenObject.
|
|
|
|
LPWSTR szObjectName - The directory name that the new leaf
|
|
object will be known by.
|
|
|
|
HANDLE hOperationData - A buffer containing a list of
|
|
attributes and values to create the new object. This
|
|
buffer is manipulated by the following functions:
|
|
NwNdsCreateBuffer (NDS_OBJECT_ADD),
|
|
NwNdsPutInBuffer, and NwNdsFreeBuffer.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
UNSUCCESSFUL - Call GetLastError for Win32 error code.
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsAddAttributeToClass(
|
|
IN HANDLE hTree,
|
|
IN LPWSTR szClassName,
|
|
IN LPWSTR szAttributeName );
|
|
/*
|
|
NwNdsAddAttributeToClass()
|
|
|
|
This function is used to modify the schema definition of a class by adding
|
|
an optional attribute to a particular class. Modification of existing NDS
|
|
class defintions is limited to only adding additional optional attributes.
|
|
|
|
NOTE: Currently this function only supports one attribute addition at a time.
|
|
It is possible to provide a version of this function that can add more
|
|
than one attribute at a time, although I don't think it will be
|
|
neccessary. Schema manipulation is considered to be an uncommon event.
|
|
|
|
Arguments:
|
|
|
|
HANDLE hTree - A handle to the directory tree to be
|
|
manipulated. Handle is obtained by calling
|
|
NwNdsOpenObject.
|
|
|
|
LPWSTR szClassName - The name of the class definition to be
|
|
modified.
|
|
|
|
LPWSTR szAttributeName - The name of the attribute to be added
|
|
as an optional attribute to the class defintion in the
|
|
schema.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
UNSUCCESSFUL - Call GetLastError for Win32 error code.
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsChangeUserPassword(
|
|
IN HANDLE hUserObject,
|
|
IN LPWSTR szOldPassword,
|
|
IN LPWSTR szNewPassword );
|
|
/*
|
|
NwNdsChangeUserPassword()
|
|
|
|
This function is used to change the password for a given user object
|
|
in a NDS directory tree.
|
|
|
|
Arguments:
|
|
|
|
HANDLE hUserObject - A handle to a specific user object in
|
|
the directory tree to change the password on. Handle
|
|
is obtained by calling NwNdsOpenObject.
|
|
|
|
LPWSTR szOldPassword - The current password set on the user
|
|
object hUserObject.
|
|
|
|
- OR -
|
|
|
|
If NwNdsChangeUserPassword is called from a client with
|
|
administrative priveleges to the specified user object
|
|
identified by hUserObject, then the szOldPassword
|
|
value can be blank (L""). This way resetting the user
|
|
password to szNewPassword.
|
|
|
|
LPWSTR szNewPassword - The new password to be set on the user
|
|
object hUserObject.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
UNSUCCESSFUL - Call GetLastError for Win32 error code.
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsCloseObject(
|
|
IN HANDLE hObject );
|
|
/*
|
|
NwNdsCloseObject()
|
|
|
|
This function is used to close the handle used to manipulate an object
|
|
in an NDS directory tree. The handle must be one Opened by NwNdsOpenObject.
|
|
|
|
Arguments:
|
|
|
|
HANDLE hObject - The handle of the object to be closed.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
UNSUCCESSFUL - Call GetLastError for Win32 error code.
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsCreateBuffer(
|
|
IN DWORD dwOperation,
|
|
OUT HANDLE * lphOperationData );
|
|
/*
|
|
NwNdsCreateBuffer()
|
|
|
|
This function is used to create a buffer used to describe object
|
|
transactions to a specific object in an NDS directory tree. This routine
|
|
allocates memory and is automatically resized as needed during calls
|
|
to NwNdsPutInBuffer. This buffer must be freed with NwNdsFreeBuffer.
|
|
|
|
Arguments:
|
|
|
|
DWORD dwOperation - Indicates how buffer is to be utilized.
|
|
Use defined values NDS_OBJECT_ADD, NDS_OBJECT_MODIFY,
|
|
NDS_OBJECT_READ, NDS_SCHEMA_DEFINE_CLASS,
|
|
NDS_SCHEMA_READ_ATTR_DEF, NDS_SCHEMA_READ_CLASS_DEF,
|
|
or NDS_SEARCH.
|
|
|
|
HANDLE * lphOperationData - Address of a HANDLE handle to
|
|
receive created buffer.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
UNSUCCESSFUL - Call GetLastError for Win32 error code.
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsCreateQueryNode(
|
|
IN DWORD dwOperation,
|
|
IN LPVOID lpLValue,
|
|
IN DWORD dwSyntaxId,
|
|
IN LPVOID lpRValue,
|
|
OUT LPQUERY_NODE * lppQueryNode
|
|
);
|
|
/*
|
|
NwNdsCreateQueryNode()
|
|
|
|
This function is used to generate a tree node that is part of a query
|
|
to be used with the function NwNdsSearch.
|
|
|
|
Arguments:
|
|
|
|
DWORD dwOperation - Indicates the type of node to create
|
|
for a search query. Use one of the defined values
|
|
below:
|
|
|
|
NDS_QUERY_OR
|
|
NDS_QUERY_AND :
|
|
These operations must have both lpLValue and
|
|
lpRValue pointing to a QUERY_NODE structure.
|
|
In this case the dwSyntaxId value is ignored.
|
|
|
|
NDS_QUERY_NOT :
|
|
This operation must have lpLValue pointing to a
|
|
QUERY_NODE structure and lpRValue set to NULL.
|
|
In this case the dwSyntaxId value is ignored.
|
|
|
|
NDS_QUERY_EQUAL
|
|
NDS_QUERY_GE
|
|
NDS_QUERY_LE
|
|
NDS_QUERY_APPROX :
|
|
These operations must have lpLValue pointing to
|
|
a LPWSTR containing the name of an NDS attribute,
|
|
and lpRValue pointing to an ASN1 structure defined
|
|
in NdsSntx.h. dwSyntaxId must be set to the syntax
|
|
identifier of the ASN1 structure pointed to by
|
|
lpRValue.
|
|
|
|
NDS_QUERY_PRESENT :
|
|
This operation must have lpLValue pointing to a
|
|
LPWSTR containing the name of an NDS attribute,
|
|
and lpRValue set to NULL. In this case the
|
|
dwSyntaxId value is ignored.
|
|
|
|
LPVOID lpLValue - A pointer to either a QUERY_NODE structure
|
|
or a LPWSTR depending on the value for dwOperation.
|
|
|
|
DWORD dwSyntaxId - The syntax identifier of the ASN1
|
|
structure pointed to by lpRValue for the dwOperations
|
|
NDS_QUERY_EQUAL, NDS_QUERY_GE, NDS_QUERY_LE, or
|
|
NDS_QUERY_APPROX. For other dwOperation values, this
|
|
is ignored.
|
|
|
|
LPVOID lpRValue - A pointer to either a QUERY_NODE structure,
|
|
an ASN1 structure, or NULL, depending on the value for
|
|
dwOperation.
|
|
|
|
LPQUERY_NODE * lppQueryNode - Address of a LPQUERY_NODE to receive
|
|
a pointer to created node.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
UNSUCCESSFUL - Call GetLastError for Win32 error code.
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsDefineAttribute(
|
|
IN HANDLE hTree,
|
|
IN LPWSTR szAttributeName,
|
|
IN DWORD dwFlags,
|
|
IN DWORD dwSyntaxID,
|
|
IN DWORD dwLowerLimit,
|
|
IN DWORD dwUpperLimit,
|
|
IN ASN1_ID asn1ID );
|
|
/*
|
|
NwNdsDefineAttribute()
|
|
|
|
This function is used to create an attribute definition in the schema of
|
|
NDS tree hTree.
|
|
|
|
Arguments:
|
|
|
|
HANDLE hTree - A handle to the directory tree to be
|
|
manipulated. Handle is obtained by calling
|
|
NwNdsOpenObject.
|
|
|
|
LPWSTR szAttributeName - The name that the new attribute will
|
|
be referred to by.
|
|
|
|
DWORD dwFlags - Flags values to be set for new attribute
|
|
definition. Definitions for flag values are found at
|
|
the top of this file.
|
|
|
|
DWORD dwSyntaxID - The ID of the syntax structure to be use
|
|
for the new attribute. Syntax IDs and their associated
|
|
structures are defined in the file NdsSntx.h. According
|
|
to the NetWare NDS schema spec, there is and always will
|
|
be, only 28 (0..27) different syntaxes.
|
|
|
|
DWORD dwLowerLimit - The lower limit of a sized attribute
|
|
(dwFlags value set to NDS_SIZED_ATTR). Can be set to
|
|
zero if attribute is not sized.
|
|
|
|
DWORD dwUpperLimit - The upper limit of a sized attribute
|
|
(dwFlags value set to NDS_SIZED_ATTR). Can be set to
|
|
zero if attribute is not sized.
|
|
|
|
ASN1_ID asn1ID - The ASN.1 ID for the attribute. If no
|
|
attribute identifier has been registered, a
|
|
zero-length octet string is specified.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
UNSUCCESSFUL - Call GetLastError for Win32 error code.
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsDefineClass(
|
|
IN HANDLE hTree,
|
|
IN LPWSTR szClassName,
|
|
IN DWORD dwFlags,
|
|
IN ASN1_ID asn1ID,
|
|
IN HANDLE hSuperClasses,
|
|
IN HANDLE hContainmentClasses,
|
|
IN HANDLE hNamingAttributes,
|
|
IN HANDLE hMandatoryAttributes,
|
|
IN HANDLE hOptionalAttributes );
|
|
/*
|
|
NwNdsDefineClass()
|
|
|
|
This function is used to create a class definition in the schema of
|
|
NDS tree hTree.
|
|
|
|
Arguments:
|
|
|
|
HANDLE hTree - A handle to the directory tree to be
|
|
manipulated. Handle is obtained by calling
|
|
NwNdsOpenObject.
|
|
|
|
LPWSTR szClassName - The name that the new class will
|
|
be referred to by.
|
|
|
|
DWORD dwFlags - Flags values to be set for new class
|
|
definition. Definitions for flag values are found at
|
|
the top of this file.
|
|
|
|
ASN1_ID asn1ID - The ASN.1 ID for the class. If no
|
|
class identifier has been registered, a
|
|
zero-length octet string is specified.
|
|
|
|
HANDLE(S) hSuperClasses,
|
|
hContainmentClasses,
|
|
hNamingAttributes,
|
|
hMandatoryAttributes,
|
|
hOptionalAttributes -
|
|
|
|
Handle to buffers that contain class definition
|
|
information to create new class in schema.
|
|
These handles are manipulated by the following
|
|
functions:
|
|
NwNdsCreateBuffer (NDS_SCHEMA_DEFINE_CLASS),
|
|
NwNdsPutInBuffer, and NwNdsFreeBuffer.
|
|
|
|
- OR -
|
|
|
|
Handles can be NULL to indicate that no list
|
|
is associated with the specific class defintion
|
|
item.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
UNSUCCESSFUL - Call GetLastError for Win32 error code.
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsDeleteAttrDef(
|
|
IN HANDLE hTree,
|
|
IN LPWSTR szAttributeName );
|
|
/*
|
|
NwNdsDeleteAttrDef()
|
|
|
|
This function is used to remove an attribute definition from the schema of
|
|
NDS tree hTree.
|
|
|
|
Arguments:
|
|
|
|
HANDLE hTree - A handle to the directory tree to be
|
|
manipulated. Handle is obtained by calling
|
|
NwNdsOpenObject.
|
|
|
|
LPWSTR szAttributeName - The name of the attribute
|
|
defintion to remove.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
UNSUCCESSFUL - Call GetLastError for Win32 error code.
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsDeleteClassDef(
|
|
IN HANDLE hTree,
|
|
IN LPWSTR szClassName );
|
|
/*
|
|
NwNdsDeleteClassDef()
|
|
|
|
This function is used to remove a class definition from the schema of
|
|
NDS tree hTree.
|
|
|
|
Arguments:
|
|
|
|
HANDLE hTree - A handle to the directory tree to be
|
|
manipulated. Handle is obtained by calling
|
|
NwNdsOpenObject.
|
|
|
|
LPWSTR szClassName - The name of the class defintion to remove.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
UNSUCCESSFUL - Call GetLastError for Win32 error code.
|
|
*/
|
|
|
|
|
|
VOID
|
|
NwNdsDeleteQueryNode(
|
|
IN LPQUERY_NODE lpQueryNode
|
|
);
|
|
/*
|
|
NwNdsDeleteQueryNode()
|
|
|
|
This function is used to free a tree node that was part of a query
|
|
used with the function NwNdsSearch.
|
|
|
|
Arguments:
|
|
|
|
LPQUERY_NODE lpQueryNode - A pointer to a particular node of
|
|
a query tree that defines a search.
|
|
|
|
Returns:
|
|
|
|
Nothing
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsDeleteQueryTree(
|
|
IN LPQUERY_TREE lpQueryTree
|
|
);
|
|
/*
|
|
NwNdsDeleteQueryTree()
|
|
|
|
This function is used to free a tree that describes a query that was
|
|
used with the function NwNdsSearch.
|
|
|
|
Arguments:
|
|
|
|
LPQUERY_TREE lpQueryTree - A pointer to the root of a query
|
|
tree that defines a search. The tree is created
|
|
manually by the user through the function
|
|
NwNdsCreateQueryNode.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
UNSUCCESSFUL - Call GetLastError for Win32 error code.
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsFreeBuffer(
|
|
IN HANDLE hOperationData );
|
|
/*
|
|
NwNdsFreeBuffer()
|
|
|
|
This function is used to free the buffer used to describe object
|
|
operations to a specific object in an NDS directory tree. The buffer must
|
|
be one created by NwNdsCreateBuffer, or returned by calling NwNdsReadObject.
|
|
|
|
Arguments:
|
|
|
|
HANDLE hOperationData - Handle to buffer that is to be freed.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
one of the error codes defined in the file winerror.h
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsGetAttrDefListFromBuffer(
|
|
IN HANDLE hOperationData,
|
|
OUT LPDWORD lpdwNumberOfEntries,
|
|
OUT LPDWORD lpdwInformationType,
|
|
OUT LPVOID * lppEntries );
|
|
/*
|
|
NwNdsGetAttrDefListFromBuffer()
|
|
|
|
This function is used to retrieve an array of attribute definition entries
|
|
for a schema that was read with a prior call to NwNdsReadAttrDef.
|
|
|
|
Arguments:
|
|
|
|
HANDLE hOperationData - Buffer containing the read
|
|
response from calling NwNdsReadAttrDef.
|
|
|
|
LPDWORD lpdwNumberOfEntries - The address of a DWORD to
|
|
receive the number of array elements pointed to by
|
|
lppEntries.
|
|
|
|
LPDWORD lpdwInformationType - The address of a DWORD to
|
|
receive a value that indicates the type of information
|
|
returned by the call to NwNdsReadAttrDef.
|
|
|
|
LPVOID * lppEntries - The address of a pointer to the beginning
|
|
of an array of attribute schema structures. Each
|
|
structure contains the details of each attribute
|
|
definition read from a given schema by calling
|
|
NwNdsReadAttrDef. The lppEntries value should be
|
|
cast to either a LPNDS_ATTR_DEF or LPNDS_NAME_ONLY
|
|
structure depending on the value returned in
|
|
lpdwInformationType.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
UNSUCCESSFUL - Call GetLastError for Win32 error code.
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsGetAttrListFromBuffer(
|
|
IN HANDLE hOperationData,
|
|
OUT LPDWORD lpdwNumberOfEntries,
|
|
OUT LPNDS_ATTR_INFO * lppEntries );
|
|
/*
|
|
NwNdsGetAttrListFromBuffer()
|
|
|
|
This function is used to retrieve an array of attribute entries for an
|
|
object that was read with a prior call to NwNdsReadObject.
|
|
|
|
Arguments:
|
|
|
|
HANDLE hOperationData - Buffer containing the read
|
|
response from calling NwNdsReadObject.
|
|
|
|
LPDWORD lpdwNumberOfEntries - The address of a DWORD to
|
|
receive the number of array elements pointed to by
|
|
lppEntries.
|
|
|
|
LPNDS_ATTR_INFO *
|
|
lppEntries - The address of a pointer to the beginning
|
|
of an array of NDS_ATTR_INFO structures. Each
|
|
structure contains the details of each attribute read
|
|
from a given object by calling NwNdsReadObject.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
UNSUCCESSFUL - Call GetLastError for Win32 error code.
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsGetClassDefListFromBuffer(
|
|
IN HANDLE hOperationData,
|
|
OUT LPDWORD lpdwNumberOfEntries,
|
|
OUT LPDWORD lpdwInformationType,
|
|
OUT LPVOID * lppEntries );
|
|
/*
|
|
NwNdsGetClassDefListFromBuffer()
|
|
|
|
This function is used to retrieve an array of class definition entries
|
|
for a schema that was read with a prior call to NwNdsReadClassDef.
|
|
|
|
Arguments:
|
|
|
|
HANDLE hOperationData - Buffer containing the read
|
|
response from calling NwNdsReadClassDef.
|
|
|
|
LPDWORD lpdwNumberOfEntries - The address of a DWORD to
|
|
receive the number of array elements pointed to by
|
|
lppEntries.
|
|
|
|
LPDWORD lpdwInformationType - The address of a DWORD to
|
|
receive a value that indicates the type of information
|
|
returned by the call to NwNdsReadClassDef.
|
|
|
|
LPVOID * lppEntries - The address of a pointer to the beginning
|
|
of an array of schema class structures. Each
|
|
structure contains the details of each class
|
|
definition read from a given schema by calling
|
|
NwNdsReadClassDef. The lppEntries value should be
|
|
cast to either a LPNDS_CLASS_DEF or LPNDS_NAME_ONLY
|
|
structure depending on the value returned in
|
|
lpdwInformationType.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
UNSUCCESSFUL - Call GetLastError for Win32 error code.
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsGetEffectiveRights(
|
|
IN HANDLE hObject,
|
|
IN LPWSTR szSubjectName,
|
|
IN LPWSTR szAttributeName,
|
|
OUT LPDWORD lpdwRights );
|
|
/*
|
|
NwNdsGetEffectiveRights()
|
|
|
|
This function is used to determine the effective rights of a particular
|
|
subject on a particular object in the NDS tree. The user needs to have
|
|
appropriate priveleges to make the determination.
|
|
|
|
Arguments:
|
|
|
|
HANDLE hObject - A handle to the object in the directory
|
|
tree to determine effective rights on. Handle is
|
|
obtained by calling NwNdsOpenObject.
|
|
|
|
LPWSTR szSubjectName - The distinguished name of user whose
|
|
rights we're interested in determining.
|
|
|
|
LPWSTR szAttributeName - Regular attribute name (i.e.
|
|
L"Surname" , L"CN" ) for reading a particular
|
|
attribute right, or L"[All Attributes Rights]" and
|
|
L"[Entry Rights]" can be used to determine the default
|
|
attribute rights and object rights respectively.
|
|
|
|
LPDWORD lpdwRights - A pointer to a DWORD to receive the
|
|
results. If the call is successful, lpdwRights will
|
|
contain a mask representing the subject's rights:
|
|
|
|
Attribute rights - NDS_RIGHT_COMPARE_ATTR,
|
|
NDS_RIGHT_READ_ATTR, NDS_RIGHT_WRITE_ATTR,
|
|
NDS_RIGHT_ADD_SELF_ATTR, and
|
|
NDS_RIGHT_SUPERVISE_ATTR.
|
|
|
|
Object rights - NDS_RIGHT_BROWSE_OBJECT,
|
|
NDS_RIGHT_CREATE_OBJECT, NDS_RIGHT_DELETE_OBJECT,
|
|
NDS_RIGHT_RENAME_OBJECT, and
|
|
NDS_RIGHT_SUPERVISE_OBJECT.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
UNSUCCESSFUL - Call GetLastError for Win32 error code.
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsGetObjectListFromBuffer(
|
|
IN HANDLE hOperationData,
|
|
OUT LPDWORD lpdwNumberOfEntries,
|
|
OUT LPDWORD lpdwAttrInformationType OPTIONAL,
|
|
OUT LPNDS_OBJECT_INFO * lppEntries );
|
|
/*
|
|
NwNdsGetObjectListFromBuffer()
|
|
|
|
This function is used to retrieve an array of object entries for
|
|
objects that were read with a prior call to either
|
|
NwNdsListSubObjects or NwNdsSearch.
|
|
|
|
Arguments:
|
|
|
|
HANDLE hOperationData - Buffer containing the read
|
|
response from calling NwNdsListSubObjects, or a
|
|
buffer containing the search results from a call
|
|
to NwNdsSearch.
|
|
|
|
LPDWORD lpdwNumberOfEntries - The address of a DWORD to
|
|
receive the number of array elements pointed to by
|
|
lppEntries.
|
|
|
|
LPDWORD lpdwAttrInformationType - The address of a DWORD to
|
|
receive a value that indicates the type of attribute
|
|
information returned by the call to NwNdsSearch.
|
|
This attribute information type determines which
|
|
buffer structure (LPNDS_ATTR_INFO or LPNDS_NAME_ONLY)
|
|
should be used for the lpAttribute field found in
|
|
each NDS_OBJECT_INFO structure below.
|
|
|
|
- or -
|
|
|
|
NULL to indicate that the callee is not interested,
|
|
especially when the object list is that from a call
|
|
to NwNdsListSubObjects.
|
|
|
|
LPNDS_OBJECT_INFO *
|
|
lppEntries - The address of a pointer to the beginning
|
|
of an array of NDS_OBJECT_INFO structures. Each
|
|
structure contains the details of each object returned
|
|
from a call to NwNdsListSubObjects or NwNdsSearch.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
UNSUCCESSFUL - Call GetLastError for Win32 error code.
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsGetSyntaxID(
|
|
IN HANDLE hTree,
|
|
IN LPWSTR szAttributeName,
|
|
OUT LPDWORD lpdwSyntaxID );
|
|
/*
|
|
NwNdsGetObjListFromBuffer()
|
|
|
|
This function is used to retrieve the Syntax ID of a given attribute name.
|
|
|
|
Arguments:
|
|
|
|
HANDLE hTree - A handle to the directory tree to be
|
|
manipulated. Handle is obtained by calling
|
|
NwNdsOpenObject.
|
|
|
|
LPWSTR szAttributeName - The attribute name whose Syntax ID
|
|
is requested.
|
|
|
|
LPDWORD lpdwSyntaxID - The address of a DWORD to receive the
|
|
SyntaxID.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
UNSUCCESSFUL - Call GetLastError for Win32 error code.
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsListSubObjects(
|
|
IN HANDLE hParentObject,
|
|
IN DWORD dwEntriesRequested,
|
|
OUT LPDWORD lpdwEntriesReturned,
|
|
IN LPNDS_FILTER_LIST lpFilters OPTIONAL,
|
|
OUT HANDLE * lphOperationData );
|
|
/*
|
|
NwNdsListSubObjects()
|
|
|
|
This function is used to enumerate the subordinate objects for a particular
|
|
parent object. A filter can be passed in to restrict enumeration to a
|
|
a specific class type or list of class types.
|
|
|
|
Arguments:
|
|
|
|
HANDLE hParentObject - A handle to the object in the directory
|
|
tree whose subordinate objects (if any) will be
|
|
enumerated.
|
|
|
|
DWORD dwEntriesRequested - The number of subordinate objects
|
|
to list. A subsequent call to NwNdsListSubObjects will
|
|
continue enumeration following the last item returned.
|
|
|
|
LPDWORD lpdwEntriesReturned - A pointer to a DWORD that will
|
|
contain the actual number of subobjects enumerated in
|
|
the call.
|
|
|
|
LPNDS_FILTER_LIST lpFilters - The caller can specify the object class
|
|
names for the kinds of objects that they would like
|
|
to enumerate. For example if just User and Group
|
|
object classes should be enumerated, then a filter
|
|
for class names NDS_CLASS_USER and NDS_CLASS_GROUP
|
|
should be pass in.
|
|
|
|
- or -
|
|
|
|
NULL to indicate that all objects should be returned
|
|
(no filter).
|
|
|
|
HANDLE * lphOperationData - Address of a HANDLE handle to
|
|
receive created buffer that contains the list of
|
|
subordinate objects read from the object
|
|
hParentObject. This handle is manipulated by the
|
|
following functions:
|
|
NwNdsGetObjListFromBuffer and NwNdsFreeBuffer.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
UNSUCCESSFUL - Call GetLastError for Win32 error code.
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsModifyObject(
|
|
IN HANDLE hObject,
|
|
IN HANDLE hOperationData );
|
|
/*
|
|
NwNdsModifyObject()
|
|
|
|
This function is used to modify a leaf object in an NDS directory tree.
|
|
Modifying a leaf object means: changing, adding, removing, and clearing of
|
|
specified attributes for a given object.
|
|
|
|
Arguments:
|
|
|
|
HANDLE hObject - A handle to the object in the directory
|
|
tree to be manipulated. Handle is obtained by calling
|
|
NwNdsOpenObject.
|
|
|
|
HANDLE hOperationData - A handle to data containing a
|
|
list of attribute changes to be applied to the object.
|
|
This buffer is manipulated by the following functions:
|
|
NwNdsCreateBuffer (NDS_OBJECT_MODIFY),
|
|
NwNdsPutInBuffer, and NwNdsFreeBuffer.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
UNSUCCESSFUL - Call GetLastError for Win32 error code.
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsMoveObject(
|
|
IN HANDLE hObject,
|
|
IN LPWSTR szDestObjectParentDN );
|
|
/*
|
|
NwNdsMoveObject()
|
|
|
|
This function is used to move a leaf object in an NDS directory tree
|
|
from one container to another.
|
|
|
|
Arguments:
|
|
|
|
HANDLE hObject - A handle to the object in the directory
|
|
tree to be moved. Handle is obtained by calling
|
|
NwNdsOpenObject.
|
|
|
|
LPWSTR szDestObjectParentDN - The DN of the object's new
|
|
parent.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
UNSUCCESSFUL - Call GetLastError for Win32 error code.
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsOpenObject(
|
|
IN LPWSTR szObjectDN,
|
|
IN LPWSTR szUserName OPTIONAL,
|
|
IN LPWSTR szPassword OPTIONAL,
|
|
OUT HANDLE * lphObject,
|
|
OUT LPWSTR szObjectName OPTIONAL,
|
|
OUT LPWSTR szObjectFullName OPTIONAL,
|
|
OUT LPWSTR szObjectClassName OPTIONAL,
|
|
OUT LPDWORD lpdwModificationTime OPTIONAL,
|
|
OUT LPDWORD lpdwSubordinateCount OPTIONAL );
|
|
/*
|
|
NwNdsOpenObject()
|
|
|
|
Arguments:
|
|
|
|
LPWSTR szObjectDN - The distinguished name of the object
|
|
that we want resolved into an object handle.
|
|
|
|
LPWSTR szUserName - The name of the user account to create
|
|
connection to object with.
|
|
- OR -
|
|
NULL to use the base credentials of the callee's LUID.
|
|
|
|
LPWSTR szPassword - The password of the user account to create
|
|
connection to object with. If password is blank, callee
|
|
should pass "".
|
|
- OR -
|
|
NULL to use the base credentials of the callee's LUID.
|
|
|
|
HANDLE * lphObject - The address of a HANDLE to receive
|
|
the handle of the object specified by
|
|
szObjectDN.
|
|
|
|
Optional arguments: ( Callee can pass NULL in for these parameters to
|
|
indicate ignore )
|
|
|
|
LPWSTR szObjectName - A LPWSTR buffer to receive
|
|
the object's relative NDS name, or NULL if not
|
|
interested. The buffer for this string must be
|
|
provided by the user. Buffer should be at least
|
|
NDS_MAX_NAME_SIZE
|
|
|
|
LPWSTR szObjectFullName - A LPWSTR buffer to receive
|
|
the object's full NDS name (DN). The buffer for this
|
|
string must be provided by the user. Buffer should
|
|
be at least: (NW_MAX_NDS_NAME_LEN + 1 ) * sizeof(WCHAR)
|
|
|
|
LPWSTR szObjectClassName - A LPWSTR buffer to receive
|
|
the class name of the object opened. The buffer for this
|
|
string must be provided by the user. Buffer should
|
|
be at least: (NW_MAX_NDS_NAME_LEN + 1 ) * sizeof(WCHAR)
|
|
|
|
LPDWORD lpdwModificationTime - The address of a DWORD to
|
|
receive the last date/time the object was modified.
|
|
|
|
LPDWORD lpdwSubordinateCount - The address of a DWORD to
|
|
receive the number of subordinate objects that may
|
|
be found under szObjectDN, if it is a container object.
|
|
|
|
If szObjectDN is not a container, then the value is set
|
|
to zero. Although a value of zero does not imply
|
|
that object is not a container, it could just be empty.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
UNSUCCESSFUL - Call GetLastError for Win32 error code.
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsPutInBuffer(
|
|
IN LPWSTR szAttributeName,
|
|
IN DWORD dwSyntaxID,
|
|
IN LPVOID lpAttributeValues,
|
|
IN DWORD dwValueCount,
|
|
IN DWORD dwAttrModificationOperation,
|
|
IN OUT HANDLE hOperationData );
|
|
/*
|
|
NwNdsPutInBuffer()
|
|
|
|
This function is used to add an entry to the buffer used to describe
|
|
an object attribute or change to an object attribute. The buffer must
|
|
be created using NwNdsCreateBuffer. If the buffer was created using the
|
|
operations, NDS_OBJECT_ADD, NDS_SCHEMA_DEFINE_CLASS,
|
|
NDS_SCHEMA_READ_ATTR_DEF, or NDS_SCHEMA_READ_CLASS_DEF, then
|
|
dwAttrModificationOperation is ignored. If the buffer was created using
|
|
either the operation NDS_OBJECT_READ or NDS_SEARCH, then
|
|
dwAttrModificationOperation, puAttributeType, and lpAttributeValue are
|
|
all ingnored.
|
|
|
|
Arguments:
|
|
|
|
LPWSTR szAttributeName - A NULL terminated WCHAR string
|
|
that contains name of the attribute value to be
|
|
added to the buffer. It can be a user supplied
|
|
string, or one of the many defined string macros
|
|
in NdsAttr.h.
|
|
|
|
DWORD dwSyntaxID - The ID of the syntax structure used to
|
|
represent the attribute value. Syntax IDs and their
|
|
associated structures are defined in the file
|
|
NdsSntx.h. According to the NetWare NDS schema spec,
|
|
there is and always will be, only 28 (0..27)
|
|
different syntaxes.
|
|
|
|
LPVOID lpAttributeValues - A pointer to the beginning of a
|
|
buffer containing the value(s) for a particular
|
|
object attribute with data syntax dwSyntaxID.
|
|
|
|
DWORD dwValueCount - The number of value entries found in
|
|
buffer pointed to by lpAttributeValues.
|
|
|
|
DWORD dwAttrModificationOperation - If the buffer was created
|
|
using the operation NDS_MODIFY_OBJECT, then this is
|
|
used to desribe which type of modification operation
|
|
to apply for a given attribute. These attribute
|
|
modification operations are defined near the beginning
|
|
of this file.
|
|
|
|
HANDLE hOperationData - A handle to data created by
|
|
calling NwNdsCreateBuffer. The buffer stores the
|
|
attributes used to define transactions for
|
|
NwNdsAddObject, NwNdsModifyObject, NwNdsReadAttrDef,
|
|
NwNdsReadClassDef, NwNdsReadObject or NwNdsSearch.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
ERROR_NOT_ENOUGH_MEMORY
|
|
ERROR_INVALID_PARAMETER
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsReadAttrDef(
|
|
IN HANDLE hTree,
|
|
IN DWORD dwInformationType, // NDS_INFO_NAMES
|
|
// or NDS_INFO_NAMES_DEFS
|
|
IN OUT HANDLE * lphOperationData OPTIONAL );
|
|
/*
|
|
NwNdsReadAttrDef()
|
|
|
|
This function is used to read attribute definitions in the schema of an
|
|
NDS directory tree.
|
|
|
|
Arguments:
|
|
|
|
HANDLE hTree - A handle to the directory tree to be
|
|
manipulated. Handle is obtained by calling
|
|
NwNdsOpenObject.
|
|
|
|
DWORD dwInformationType - Indicates whether user chooses to
|
|
read only the defined attribute name(s) in the schema or
|
|
read both the attribute name(s) and definition(s)
|
|
from the schema.
|
|
|
|
HANDLE * lphOperationData - The address of a HANDLE to data
|
|
containing a list of attribute names to be read from
|
|
the schema. This handle is manipulated by the following
|
|
functions:
|
|
NwNdsCreateBuffer (NDS_SCHEMA_READ_ATTR_DEF),
|
|
NwNdsPutInBuffer, and NwNdsFreeBuffer.
|
|
|
|
- OR -
|
|
|
|
The address of a HANDLE set to NULL, which indicates
|
|
that all attributes should be read from the schema.
|
|
|
|
If these calls are successful, this handle will also
|
|
contain the read results from the call. In the later
|
|
case, a buffer will be created to contain the read
|
|
results. Attribute values can be retrieved from the
|
|
buffer with the functions:
|
|
NwNdsGetAttrDefListFromBuffer
|
|
|
|
After the call to this function, this buffer is ONLY
|
|
manipulated by the functions:
|
|
NwNdsGetAttrDefListFromBuffer and NwNdsFreeBuffer.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
UNSUCCESSFUL - Call GetLastError for Win32 error code.
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsReadClassDef(
|
|
IN HANDLE hTree,
|
|
IN DWORD dwInformationType, // NDS_INFO_NAMES,
|
|
// NDS_INFO_NAMES_DEFS,
|
|
// NDS_CLASS_INFO_EXPANDED_DEFS,
|
|
// or NDS_CLASS_INFO
|
|
IN OUT HANDLE * lphOperationData OPTIONAL );
|
|
/*
|
|
NwNdsReadClassDef()
|
|
|
|
This function is used to read class definitions in the schema of an
|
|
NDS directory tree.
|
|
|
|
Arguments:
|
|
|
|
HANDLE hTree - A handle to the directory tree to be
|
|
manipulated. Handle is obtained by calling
|
|
NwNdsOpenObject.
|
|
|
|
DWORD dwInformationType - Indicates whether user chooses to
|
|
read only the defined class name(s) in the schema or
|
|
read both the class name(s) and definition(s)
|
|
from the schema.
|
|
|
|
HANDLE * lphOperationData - The address of a HANDLE to data
|
|
containing a list of class names to be read from
|
|
the schema. This handle is manipulated by the following
|
|
functions:
|
|
NwNdsCreateBuffer (NDS_SCHEMA_READ_CLASS_DEF),
|
|
NwNdsPutInBuffer, and NwNdsFreeBuffer.
|
|
|
|
- OR -
|
|
|
|
The address of a HANDLE set to NULL, which indicates
|
|
that all classes should be read from the schema.
|
|
|
|
If these calls are successful, this handle will also
|
|
contain the read results from the call. In the later
|
|
case, a buffer will be created to contain the read
|
|
results. Class read results can be retrieved from the
|
|
buffer with the functions:
|
|
NwNdsGetClassDefListFromBuffer
|
|
|
|
After the call to this function, this buffer is ONLY
|
|
manipulated by the functions:
|
|
NwNdsGetClassDefListFromBuffer and NwNdsFreeBuffer.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
UNSUCCESSFUL - Call GetLastError for Win32 error code.
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsReadObject(
|
|
IN HANDLE hObject,
|
|
IN DWORD dwInformationType, // NDS_INFO_NAMES
|
|
// or NDS_INFO_ATTR_NAMES_VALUES
|
|
IN OUT HANDLE * lphOperationData );
|
|
/*
|
|
NwNdsReadObject()
|
|
|
|
This function is used to read attributes about an object of an NDS
|
|
directory tree.
|
|
|
|
Arguments:
|
|
|
|
HANDLE hObject - A handle to the object in the directory
|
|
tree to be manipulated. Handle is obtained by calling
|
|
NwNdsOpenObject.
|
|
|
|
DWORD dwInformationType - Indicates whether user chooses to
|
|
read only the attribute name(s) on the object or
|
|
read both the attribute name(s) and value(s)
|
|
from the object.
|
|
|
|
HANDLE * lphOperationData - The address of a HANDLE to data
|
|
containing a list of attributes to be read from the
|
|
object hObject. This handle is manipulated by the
|
|
following functions:
|
|
NwNdsCreateBuffer (NDS_OBJECT_READ),
|
|
NwNdsPutInBuffer, and NwNdsFreeBuffer.
|
|
|
|
- OR -
|
|
|
|
The address of a HANDLE set to NULL, which indicates
|
|
that all object attributes should be read from object
|
|
hObject.
|
|
|
|
If these calls are successful, this handle will also
|
|
contain the read results from the call. In the later
|
|
case, a buffer will be created to contain the read
|
|
results. Attribute values can be retrieved from the
|
|
buffer with the functions:
|
|
NwNdsGetAttrListFromBuffer.
|
|
|
|
After the call to this function, this buffer is ONLY
|
|
manipulated by the functions:
|
|
NwNdsGetAttrListFromBuffer and NwNdsFreeBuffer.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
UNSUCCESSFUL - Call GetLastError for Win32 error code.
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsRemoveObject(
|
|
IN HANDLE hParentObject,
|
|
IN LPWSTR szObjectName );
|
|
/*
|
|
NwNdsRemoveObject()
|
|
|
|
This function is used to remove a leaf object from an NDS directory tree.
|
|
|
|
Arguments:
|
|
|
|
HANDLE hParentObject - A handle to the parent object container
|
|
in the directory tree to remove leaf object from.
|
|
Handle is obtained by calling NwNdsOpenObject.
|
|
|
|
LPWSTR szObjectName - The directory name of the leaf object
|
|
to be removed.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
UNSUCCESSFUL - Call GetLastError for Win32 error code.
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsRenameObject(
|
|
IN HANDLE hParentObject,
|
|
IN LPWSTR szObjectName,
|
|
IN LPWSTR szNewObjectName,
|
|
IN BOOL fDeleteOldName );
|
|
/*
|
|
NwNdsRenameObject()
|
|
|
|
This function is used to rename an object in a NDS directory tree.
|
|
|
|
Arguments:
|
|
|
|
HANDLE hParentObject - A handle to the parent object container
|
|
in the directory tree to rename leaf object in.
|
|
Handle is obtained by calling NwNdsOpenObject.
|
|
|
|
LPWSTR szObjectName - The directory name of the object to be
|
|
renamed.
|
|
|
|
LPWSTR szNewObjectName - The new directory name of the object.
|
|
|
|
BOOL fDeleteOldName - If true, the old name is discarded;
|
|
Otherwise, the old name is retained as an additional
|
|
attribute.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
UNSUCCESSFUL - Call GetLastError for Win32 error code.
|
|
*/
|
|
|
|
|
|
DWORD
|
|
NwNdsSearch(
|
|
IN HANDLE hStartFromObject,
|
|
IN DWORD dwInformationType, // NDS_INFO_NAMES
|
|
// or NDS_INFO_ATTR_NAMES_VALUES
|
|
IN DWORD dwScope,
|
|
IN BOOL fDerefAliases,
|
|
IN LPQUERY_TREE lpQueryTree,
|
|
IN OUT LPDWORD lpdwIterHandle,
|
|
IN OUT HANDLE * lphOperationData );
|
|
/*
|
|
NwNdsSearch()
|
|
|
|
This function is used to query an NDS directory tree to find objects of
|
|
a certain object type that match a specified search filter.
|
|
|
|
Arguments:
|
|
|
|
HANDLE hStartFromObject - A HANDLE to an object in the
|
|
directory tree to start search from. Handle is
|
|
obtained by calling NwNdsOpenObject.
|
|
|
|
DWORD dwScope -
|
|
NDS_SCOPE_ONE_LEVEL - Search subordinates from given
|
|
object, one level only
|
|
NDS_SCOPE_SUB_TREE - Search from given object on down
|
|
NDS_SCOPE_BASE_LEVEL - Applies search to an object
|
|
|
|
BOOL fDerefAliases - If TRUE the search will dereference
|
|
aliased objects to the real objects and continue
|
|
to search in the aliased objects subtree. If FALSE
|
|
the search will not dereference aliases.
|
|
|
|
LPQUERY_TREE lpQueryTree - A pointer to the root of a search
|
|
tree which defines a query. This tree is manipulated
|
|
by the following functions:
|
|
NwNdsCreateQueryNode, NwNdsDeleteQueryNode,
|
|
and NwNdsDeleteQueryTree.
|
|
|
|
LPDWORD lpdwIterHandle - A pointer to a DWORD that has the
|
|
iteration handle value. On input, the handle value
|
|
is set to NDS_INITIAL_SEARCH or to a value previously
|
|
returned from a prior call to NwNdsSearch. On ouput,
|
|
the handle value is set to NDS_NO_MORE_ITERATIONS if
|
|
search is complete, or to some other value otherwise.
|
|
|
|
HANDLE * lphOperationData - The address of a HANDLE to data
|
|
containing a list of attributes to be read from the
|
|
objects that meet the search query. This handle is
|
|
manipulated by the following functions:
|
|
NwNdsCreateBuffer (NDS_SEARCH),
|
|
NwNdsPutInBuffer, and NwNdsFreeBuffer.
|
|
|
|
- OR -
|
|
|
|
The address of a HANDLE set to NULL, which indicates
|
|
that all object attributes should be read from the
|
|
search objects found.
|
|
|
|
If these calls are successful, this handle will also
|
|
contain the read results from the call. In the later
|
|
case, a buffer will be created to contain the read
|
|
results. Object information with attribute information
|
|
can be retrieved from the buffer with the function:
|
|
NwNdsGetObjectListFromBuffer.
|
|
|
|
After the call to this function, this buffer is ONLY
|
|
manipulated by the functions:
|
|
NwNdsGetObjectListFromBuffer,
|
|
and NwNdsFreeBuffer.
|
|
|
|
Returns:
|
|
|
|
NO_ERROR
|
|
UNSUCCESSFUL - Call GetLastError for Win32 error code.
|
|
*/
|
|
|
|
#ifndef NWCONN_HANDLE
|
|
#define NWCONN_HANDLE HANDLE
|
|
#endif
|
|
|
|
NWCONN_HANDLE
|
|
NwNdsObjectHandleToConnHandle(
|
|
IN HANDLE ObjectHandle);
|
|
|
|
/*
|
|
NwNdsObjectHandleToConnHandle()
|
|
|
|
This function is used to get the NWCONN_HANDLE for a ObjectHandle
|
|
(like that returned from NwNdsOpenObject).
|
|
|
|
Arguments:
|
|
|
|
HANDLE ObjectHandle - the handle to use to retrieve the NWCONN_HANDLE.
|
|
|
|
Returns:
|
|
|
|
NULL - Call GetLastError for Win32 error code.
|
|
Otherwise - NWCONN_HANDLE - this MUST be freed by the caller by the
|
|
NwNdsConnHandleFree routine.
|
|
*/
|
|
|
|
VOID
|
|
NwNdsConnHandleFree(
|
|
IN NWCONN_HANDLE hConn);
|
|
|
|
/*
|
|
NwNdsConnHandleFree()
|
|
|
|
Frees the NWCONN_HANDLE returned from NwNdsObjectHandleToConnHandle().
|
|
|
|
Arguments:
|
|
|
|
IN NWCONN_HANDLE Handle to free.
|
|
|
|
Returns:
|
|
Nothing
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /* __cplusplus */
|
|
|
|
#endif
|
|
|