Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

364 lines
9.8 KiB

/*++
Copyright (c) 1995 Microsoft Corporation
Module Name:
NdsLib32.h
Abstract:
This module exposes the minimal win32 API to Netware directory
services support in the Netware redirector.
Author:
Cory West [CoryWest] 23-Feb-1995
--*/
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <windows.h>
#include <ntdef.h>
#include <stdio.h>
#include <ntddnwfs.h>
#ifdef __cplusplus
extern "C" {
#endif
NTSTATUS
NwNdsOpenTreeHandle(
IN PUNICODE_STRING puNdsTree,
OUT PHANDLE phNwRdrHandle
);
// NwNdsOpenTreeHandle( PUNICODE_STRING, PHANDLE )
//
// Given an NDS tree name, this opens a handle the the redirector
// for accessing that tree. The handle should closed using the
// standard NT CloseHandle() call. This function is only a
// simple wrapper around NT OpenFile().
//
// Administrativa.
//
#define HANDLE_TYPE_NCP_SERVER 1
#define HANDLE_TYPE_NDS_TREE 2
NTSTATUS
NwNdsOpenGenericHandle(
IN PUNICODE_STRING puNdsTree,
OUT LPDWORD lpdwHandleType,
OUT PHANDLE phNwRdrHandle
);
// NwNdsOpenGenericHandle( PUNICODE_STRING, LPDWORD, PHANDLE )
//
// Given a name, this opens a handle the the redirector for accessing that
// named tree or server. lpdwHandleType is set to either HANDLE_TYPE_NCP_SERVER
// or HANDLE_TYPE_NDS_TREE accordingly. The handle should be closed using
// the standard NT CloseHandle() call. This function is only a simple
// wrapper around NT OpenFile().
NTSTATUS
NwOpenHandleWithSupplementalCredentials(
IN PUNICODE_STRING puResourceName,
IN PUNICODE_STRING puUserName,
IN PUNICODE_STRING puPassword,
OUT LPDWORD lpdwHandleType,
OUT PHANDLE phNwHandle
);
// NwOpenHandleWithSupplementalCredentials
//
// Given a resource name (either a server name or a tree name),
// open a handle to that resource with the provided username and
// password. As with the open generic handle routine, lpdsHandleType
// will be set to either HANDLE_TYPE_NCP_SERVER or
// HANDLE_TYPE_NDS_TREE based on the result of the open.
//
// Administrativa.
//
NTSTATUS
NwNdsSetTreeContext (
IN HANDLE hNdsRdr,
IN PUNICODE_STRING puTree,
IN PUNICODE_STRING puContext
);
// NwNdsSetTreeContext(HANDLE, PUNICODE_STRING, PUNICODE_STRING)
//
// Set the current context for the specified tree.
//
// Arguments:
//
// HANDLE hNdsRdr - A handle to the redirector.
// PUNICODE_STRING puTree - The tree name.
// PUNICODE_STRING puContext - The context in that tree.
NTSTATUS
NwNdsGetTreeContext (
IN HANDLE hNdsRdr,
IN PUNICODE_STRING puTree,
OUT PUNICODE_STRING puContext
);
// NwNdsGetTreeContext(HANDLE, PUNICODE_STRING, PUNICODE_STRING)
//
// Get the current context for the specified tree.
//
// Arguments:
//
// HANDLE hNdsRdr - A handle to the redirector.
// PUNICODE_STRING puTree - The tree name.
// PUNICODE_STRING puContext - The context in that tree.
NTSTATUS
NwNdsIsNdsConnection (
IN HANDLE hNdsRdr,
OUT BOOL * pfIsNds,
IN OUT PUNICODE_STRING puTree
);
// NwNdsIsNdsConnection(HANDLE, PUNICODE_STRING)
//
// Get the current context for the specified tree.
//
// Arguments:
//
// HANDLE hNdsRdr - A handle to the redirector.
// BOOL * - Get the boolean value of connection test
// PUNICODE_STRING puTree - The tree name that handle to server
// represents. Caller allocates puTree
// with a buffer big enough to hold
// 48 WCHARs.
//
// Returns: TRUE if hNdsRdr is a handle connected to a server that
// is part of a NDS directory tree. puTree will contain
// the tree name.
// FALSE: if hNdsRdr is not a NDS tree handle.
//
// Browsing and Navigating support.
//
NTSTATUS
NwNdsResolveName (
IN HANDLE hNdsTree,
IN PUNICODE_STRING puObjectName,
OUT DWORD *dwObjectId,
OUT PUNICODE_STRING puReferredServer,
OUT PBYTE pbRawResponse,
IN DWORD dwResponseBufferLen
);
// NwNdsResolveName(HANDLE, PUNICODE_STRING, PDWORD)
//
// Resolve the given name to an NDS object id. This utilizes
// NDS verb 1.
//
// There is currently no interface for canonicalizing names.
// This call will use the default context if one has been set
// for this NDS tree.
//
// puReferredServer must point to a UNICODE_STRING with enough
// space to hold a server name (MAX_SERVER_NAME_LENGTH) *
// sizeof( WCHAR ).
//
// If dwResponseBufferLen is not 0, and pbRawResponse points
// to a writable buffer of length dwResponseBufferLen, then
// this routine will also return the entire NDS response in
// the raw response buffer. The NDS response is described
// by NDS_RESPONSE_RESOLVE_NAME.
//
// Arguments:
//
// HANDLE hNdsTree - The name of the NDS tree that we are interested in looking into.
// PUNICODE_STRING puObjectName - The name that we want resolved into an object id.
// DWORD *dwObjectId - The place where we will place the object id.
// BYTE *pbRawResponse - The raw response buffer, if desired.
// DWORD dwResponseBufferLen - The length of the raw response buffer.
NTSTATUS
NwNdsList (
IN HANDLE hNdsTree,
IN DWORD dwObjectId,
OUT DWORD *dwIterHandle,
OUT BYTE *pbReplyBuf,
IN DWORD dwReplyBufLen
);
// NwNdsList(HANDLE, DWORD, PDWORD, PBYTE, DWORD, PDWORD)
//
// List the immediate subordinates of an object. This utilizes
// NDS verb 5.
//
// Arguments:
//
// HANDLE hNdsTree - The handle to the tree that we are interested in.
// DWORD dwObjectId - The object that we want to list.
// DWORD *dwIterHandle - The iteration handle to be used in continuing
// the request if the buffer is not large enough for the entire
// list of subordinates.
// BYTE *pbReplyBuf - The buffer where the raw reply will be placed.
// DWORD dwReplyBufLen - The length of the raw reply buffer.
NTSTATUS
NwNdsReadObjectInfo(
IN HANDLE hNdsTree,
IN DWORD dwObjectId,
OUT PBYTE pbReplyBuf,
IN DWORD dwReplyBufLen
);
// NwNdsReadObjectInfo(PUNICODE_STRING, DWORD, PBYTE, DWORD)
//
// Given an object id, this gets the basic info for the object. This
// utilizes NDS verb 2. The reply buffer should be large enough to
// hold a DS_OBJ_INFO struct and the text of the two unicode strings.
//
// Arguments:
//
// HANDLE hNdsTree - The tree that we want to look in.
// DWORD dwObjectId - The object id that we want to learn about.
// BYTE *pbReplyBuf - The space for the reply.
// DWORD dwReplyBufLen - The length of the reply buffer.
NTSTATUS
NwNdsReadAttribute (
IN HANDLE hNdsTree,
IN DWORD dwObjectId,
IN DWORD *dwIterHandle,
IN PUNICODE_STRING puAttrName,
OUT BYTE *pbReplyBuf,
IN DWORD dwReplyBufLen
);
// NwNdsReadAttribute(HANDLE, DWORD, PDWORD, PUNICODE_STRING, PBYTE, DWORD)
//
// Read the requested attribute from the listed object.
// This utilizes NDS verb 3.
//
// Arguments:
//
// HANDLE hNdsTree - The tree that we want to read from.
// DWORD dwObjectId - The object that we want to read from.
// DWORD *dwIterHandle - The iteration handle.
// PUNICODE_STRING puAttrName - The name of the attribute.
// BYTE *pbReplyBuf - The buffer to hold the response.
// DWORD deReplyBufLen - The length of the reply buffer.
NTSTATUS
NwNdsOpenStream (
IN HANDLE hNdsTree,
IN DWORD dwObjectId,
IN PUNICODE_STRING puStreamName,
IN DWORD dwOpenFlags,
OUT DWORD *pdwFileLength
);
// NwNdsOpenStream(HANDLE, DWORD, PBYTE, DWORD)
//
// Open a file handle to the stream listed.
// This utilizes NDS verb 27.
//
// Arguments:
//
// HANDLE hNdsTree - The handle to the NDS tree that we are interested in.
// DWORD dwObjectId - The object id that we want to query.
// PUNICODE_STRING puStreamName - The name of the stream that we want to open.
// DWORD dwOpenFlags - 1 for read, 2 for write, 3 for read/write.
// DWORD *pdwFileLength - The length of the file stream.
NTSTATUS
NwNdsGetQueueInformation(
IN HANDLE hNdsTree,
IN PUNICODE_STRING puQueueName,
OUT PUNICODE_STRING puHostServer,
OUT PDWORD pdwQueueId
);
// NwNdsGetQueueInformation(HANDLE, PUNICODE_STRING, PUNICODE_STRING, PDWORD)
//
// Arguments:
//
// HANDLE hNdsTree - The handle to the NDS tree that knows about the queue.
// PUNICODE_STRING puQueueName - The ds path to the queue that we want.
// PUNICODE_STRING puHostServer - The host server for this queue.
// PDWORD pdwQueueId - The queue id for this queue on this server.
NTSTATUS
NwNdsGetVolumeInformation(
IN HANDLE hNdsTree,
IN PUNICODE_STRING puVolumeName,
OUT PUNICODE_STRING puHostServer,
OUT PUNICODE_STRING puHostVolume
);
// NwNdsGetVoluemInformation(HANDLE, PUNICODE_STRING, PUNICODE_STRING, PUNICODE_STRING)
//
// Arguments:
//
// HANDLE hNdsTree - The handle to the NDS tree that knows about the volume.
// PUNICODE_STRING puVolumeName - The ds path to the volume that we want.
// PUNICODE_STRING puHostServer - The host server for this nds volume.
// PUNICODE_STRING puHostVolume - The host volume for this nds volume.
//
// User mode fragment exchange.
//
NTSTATUS
_cdecl
FragExWithWait(
IN HANDLE hNdsServer,
IN DWORD NdsVerb,
IN BYTE *pReplyBuffer,
IN DWORD pReplyBufferLen,
IN OUT DWORD *pdwReplyLen,
IN BYTE *NdsRequestStr,
...
);
NTSTATUS
_cdecl
ParseResponse(
PUCHAR Response,
ULONG ResponseLength,
char* FormatString,
...
);
int
_cdecl
FormatBuf(
char *buf,
int bufLen,
const char *format,
va_list args
);
//
// Change password support.
//
NTSTATUS
NwNdsChangePassword(
IN HANDLE hNwRdr,
IN PUNICODE_STRING puTreeName,
IN PUNICODE_STRING puUserName,
IN PUNICODE_STRING puCurrentPassword,
IN PUNICODE_STRING puNewPassword
);
#ifdef __cplusplus
} // extern "C"
#endif