304 lines
11 KiB
C
304 lines
11 KiB
C
|
/*++
|
|||
|
|
|||
|
Copyright (c) 1991 Microsoft Corporation
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
wsuse.h
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
Private header file to be included by Workstation service modules that
|
|||
|
implement the NetUse APIs.
|
|||
|
|
|||
|
Author:
|
|||
|
|
|||
|
Rita Wong (ritaw) 05-Mar-1991
|
|||
|
|
|||
|
Revision History:
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
#ifndef _WSUSE_INCLUDED_
|
|||
|
#define _WSUSE_INCLUDED_
|
|||
|
|
|||
|
#include <lmuse.h> // LAN Man Use API definitions
|
|||
|
#include <dns.h> // DNS_MAX_NAME_LENGTH definition
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Length of fixed size portion of a use info structure
|
|||
|
//
|
|||
|
#define USE_FIXED_LENGTH(Level) \
|
|||
|
(DWORD) \
|
|||
|
((Level == 0) ? sizeof(USE_INFO_0) : \
|
|||
|
((Level == 1) ? sizeof(USE_INFO_1) : \
|
|||
|
((Level == 2) ? sizeof(USE_INFO_2) : \
|
|||
|
sizeof(USE_INFO_3))))
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Total length of a use info structure (fixed and variable length portions)
|
|||
|
//
|
|||
|
#define USE_TOTAL_LENGTH(Level, LocalandUncNameLength, UserNameLength) \
|
|||
|
(DWORD) \
|
|||
|
((Level >= 2) ? (LocalandUncNameLength) + (UserNameLength) + \
|
|||
|
((Level == 3) ? sizeof(USE_INFO_3) : sizeof(USE_INFO_2)) : \
|
|||
|
(LocalandUncNameLength) + ((Level == 1) ? \
|
|||
|
sizeof(USE_INFO_1) : \
|
|||
|
sizeof(USE_INFO_0)))
|
|||
|
|
|||
|
//
|
|||
|
// Hint size of an entry of use information from redirector
|
|||
|
//
|
|||
|
#define HINT_REDIR_INFO(Level) \
|
|||
|
(DWORD) \
|
|||
|
((Level == 1) ? sizeof(LMR_CONNECTION_INFO_1) + \
|
|||
|
MAX_PATH * sizeof(WCHAR) : \
|
|||
|
sizeof(LMR_CONNECTION_INFO_2) + \
|
|||
|
(MAX_PATH + MAX_PATH) * sizeof(WCHAR))
|
|||
|
//
|
|||
|
// Length of fixed size portion of a redirector enumerate info structure
|
|||
|
//
|
|||
|
#define REDIR_ENUM_INFO_FIXED_LENGTH(Level) \
|
|||
|
(DWORD) \
|
|||
|
((Level == 0) ? sizeof(LMR_CONNECTION_INFO_0) : \
|
|||
|
((Level == 1) ? sizeof(LMR_CONNECTION_INFO_1) : \
|
|||
|
sizeof(LMR_CONNECTION_INFO_2)))
|
|||
|
|
|||
|
#define REDIR_LIST 0x80000000
|
|||
|
|
|||
|
|
|||
|
//-----------------------------------------------------------------------//
|
|||
|
// //
|
|||
|
// Use Table //
|
|||
|
// //
|
|||
|
// +-----------------+ +-----------------+ //
|
|||
|
// |TotalUseCount = 6| |TotalUseCount = 1| //
|
|||
|
// +-----------------+ +-----------------+ //
|
|||
|
// | RedirUseInfo | | RedirUseInfo | //
|
|||
|
// +-----------------+ +-----------------+ //
|
|||
|
// | UncNameLength | | UncNameLength | //
|
|||
|
// +-----------------+ +-----------------+ //
|
|||
|
// |\\POPCORN\RAZZLE | |\\FUZZY\PRINTER | //
|
|||
|
// +-----------------+ +-----------------+ //
|
|||
|
// ^ ^ ^ //
|
|||
|
// | | | //
|
|||
|
// +---+ +---+ | //
|
|||
|
// | | | //
|
|||
|
// +------------+ +--|--+------+ +--|--+------+ +--|--+------+ //
|
|||
|
// | | | * | *---->| * | *---->| * | *---->... //
|
|||
|
// | *-------->+-----+------+ +-----+------+ +-----+------+ //
|
|||
|
// | | | P: |Local | |NULL |Local | |LPT1 |Local | //
|
|||
|
// +------------+ | |Length| | |Length| | |Length| //
|
|||
|
// | | +-----+------+ +-----+------+ +-----+------+ //
|
|||
|
// | | |UseCount = 1| |UseCount = 5| |UseCount = 1| //
|
|||
|
// 0 | LogonId | +------------+ +------------+ +------------+ //
|
|||
|
// | | |Tree | |Tree | |Tree | //
|
|||
|
// | | |Connection | |Connection | |Connection | //
|
|||
|
// | | +------------+ +------------+ +------------+ //
|
|||
|
// | | |ResumeKey | |ResumeKey | |ResumeKey | //
|
|||
|
// | | +------------+ +------------+ +------------+ //
|
|||
|
// | | |TreeConnStr | | NULL | |TreeConnStr | //
|
|||
|
// | | +------------+ +------------+ +------------+ //
|
|||
|
// | | //
|
|||
|
// +============+ //
|
|||
|
// | | //
|
|||
|
// | *--------> ... //
|
|||
|
// | | //
|
|||
|
// +------------+ //
|
|||
|
// | | //
|
|||
|
// | LogonId | //
|
|||
|
// 1 | | //
|
|||
|
// | | //
|
|||
|
// | | //
|
|||
|
// | | //
|
|||
|
// | | //
|
|||
|
// | | //
|
|||
|
// | | //
|
|||
|
// | | //
|
|||
|
// +============+ //
|
|||
|
// | . | //
|
|||
|
// | . | //
|
|||
|
// | . | //
|
|||
|
// //
|
|||
|
// //
|
|||
|
// The Use Table maintained by the Workstation service keeps a list of //
|
|||
|
// explicit connections established by each user. A use entry is always //
|
|||
|
// inserted into the end of the list. //
|
|||
|
// //
|
|||
|
// Implicit connections are not maintained in the Use Table. The //
|
|||
|
// Workstation service has to ask the redirector to list all established //
|
|||
|
// implicit connections when enumerating all active connections for a //
|
|||
|
// user. //
|
|||
|
// //
|
|||
|
//-----------------------------------------------------------------------//
|
|||
|
|
|||
|
//
|
|||
|
// The structure definition for the per user entry, which consists of a
|
|||
|
// Logon Id and a pointer to a list, is defined in wsutil.h
|
|||
|
//
|
|||
|
|
|||
|
//
|
|||
|
// A remote entry for every unique shared resource name (\\server\share)
|
|||
|
// of explicit connections.
|
|||
|
//
|
|||
|
typedef struct _UNC_NAME {
|
|||
|
DWORD TotalUseCount;
|
|||
|
DWORD UncNameLength;
|
|||
|
LPTSTR UncName[1];
|
|||
|
} UNC_NAME, *PUNC_NAME;
|
|||
|
|
|||
|
//
|
|||
|
// A use entry in the linked list of connections.
|
|||
|
//
|
|||
|
typedef struct _USE_ENTRY {
|
|||
|
struct _USE_ENTRY *Next;
|
|||
|
PUNC_NAME Remote;
|
|||
|
LPTSTR Local;
|
|||
|
DWORD LocalLength;
|
|||
|
DWORD UseCount;
|
|||
|
HANDLE TreeConnection;
|
|||
|
DWORD ResumeKey;
|
|||
|
LPTSTR TreeConnectStr;
|
|||
|
DWORD Flags;
|
|||
|
} USE_ENTRY, *PUSE_ENTRY;
|
|||
|
|
|||
|
//
|
|||
|
// Values for flags field
|
|||
|
//
|
|||
|
// USE_DEFAULT_CREDENTIALS 0x4 (defined in lmuse.h)
|
|||
|
|
|||
|
//
|
|||
|
// Enumerated data type to say whether to pause or continue the redirection
|
|||
|
//
|
|||
|
typedef enum _REDIR_OPERATION {
|
|||
|
PauseRedirection,
|
|||
|
ContinueRedirection
|
|||
|
} REDIR_OPERATION;
|
|||
|
|
|||
|
|
|||
|
//-------------------------------------------------------------------//
|
|||
|
// //
|
|||
|
// Utility functions from useutil.c //
|
|||
|
// //
|
|||
|
//-------------------------------------------------------------------//
|
|||
|
|
|||
|
NET_API_STATUS
|
|||
|
WsInitUseStructures(
|
|||
|
VOID
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
WsDestroyUseStructures(
|
|||
|
VOID
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
WsFindInsertLocation(
|
|||
|
IN PUSE_ENTRY UseList,
|
|||
|
IN LPTSTR UncName,
|
|||
|
OUT PUSE_ENTRY *MatchedPointer,
|
|||
|
OUT PUSE_ENTRY *InsertPointer
|
|||
|
);
|
|||
|
|
|||
|
NET_API_STATUS
|
|||
|
WsFindUse(
|
|||
|
IN PLUID LogonId,
|
|||
|
IN PUSE_ENTRY UseList,
|
|||
|
IN LPTSTR UseName,
|
|||
|
OUT PHANDLE TreeConnection,
|
|||
|
OUT PUSE_ENTRY *MatchedPointer,
|
|||
|
OUT PUSE_ENTRY *BackPointer OPTIONAL
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
WsFindUncName(
|
|||
|
IN PUSE_ENTRY UseList,
|
|||
|
IN LPTSTR UncName,
|
|||
|
OUT PUSE_ENTRY *MatchedPointer,
|
|||
|
OUT PUSE_ENTRY *BackPointer
|
|||
|
);
|
|||
|
|
|||
|
NET_API_STATUS
|
|||
|
WsCreateTreeConnectName(
|
|||
|
IN LPTSTR UncName,
|
|||
|
IN DWORD UncNameLength,
|
|||
|
IN LPTSTR LocalName,
|
|||
|
IN DWORD SessionId,
|
|||
|
OUT PUNICODE_STRING TreeConnectStr
|
|||
|
);
|
|||
|
|
|||
|
NET_API_STATUS
|
|||
|
WsOpenCreateConnection(
|
|||
|
IN PUNICODE_STRING TreeConnectionName,
|
|||
|
IN LPTSTR UserName OPTIONAL,
|
|||
|
IN LPTSTR DomainName OPTIONAL,
|
|||
|
IN LPTSTR Password OPTIONAL,
|
|||
|
IN ULONG CreateFlags,
|
|||
|
IN ULONG CreateDisposition,
|
|||
|
IN ULONG ConnectionType,
|
|||
|
OUT PHANDLE TreeConnectionHandle,
|
|||
|
OUT PULONG_PTR Information OPTIONAL
|
|||
|
);
|
|||
|
|
|||
|
NET_API_STATUS
|
|||
|
WsDeleteConnection(
|
|||
|
IN PLUID LogonId,
|
|||
|
IN HANDLE TreeConnection,
|
|||
|
IN DWORD ForceLevel
|
|||
|
);
|
|||
|
|
|||
|
BOOL
|
|||
|
WsRedirectionPaused(
|
|||
|
IN LPTSTR LocalDeviceName
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
WsPauseOrContinueRedirection(
|
|||
|
IN REDIR_OPERATION OperationType
|
|||
|
);
|
|||
|
|
|||
|
NET_API_STATUS
|
|||
|
WsCreateSymbolicLink(
|
|||
|
IN LPWSTR Local,
|
|||
|
IN DWORD DeviceType,
|
|||
|
IN LPWSTR TreeConnectStr,
|
|||
|
IN PUSE_ENTRY UseList,
|
|||
|
IN OUT LPWSTR *Session
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
WsDeleteSymbolicLink(
|
|||
|
IN LPWSTR LocalDeviceName,
|
|||
|
IN LPWSTR TreeConnectStr,
|
|||
|
IN LPWSTR SessionDeviceName
|
|||
|
);
|
|||
|
|
|||
|
NET_API_STATUS
|
|||
|
WsUseCheckRemote(
|
|||
|
IN LPTSTR RemoteResource,
|
|||
|
OUT LPTSTR UncName,
|
|||
|
OUT LPDWORD UncNameLength
|
|||
|
);
|
|||
|
|
|||
|
NET_API_STATUS
|
|||
|
WsUseCheckLocal(
|
|||
|
IN LPTSTR LocalDevice,
|
|||
|
OUT LPTSTR Local,
|
|||
|
OUT LPDWORD LocalLength
|
|||
|
);
|
|||
|
|
|||
|
//-------------------------------------------------------------------//
|
|||
|
// //
|
|||
|
// External global variables //
|
|||
|
// //
|
|||
|
//-------------------------------------------------------------------//
|
|||
|
|
|||
|
//
|
|||
|
// Use Table
|
|||
|
//
|
|||
|
extern USERS_OBJECT Use;
|
|||
|
|
|||
|
#endif // ifndef _WSUSE_INCLUDED_
|
|||
|
|