/*++

Copyright (c) 1992 Microsoft Corporation

Module Name:

    ssreg.h

Abstract:

    Manifests for Registry usage in the server service.

Author:

    Chuck Lenzmeier (chuckl) 21-Mar-1992

Revision History:

--*/

#ifndef _SSREG_
#define _SSREG_

//
// Names of server service keys.
//

#define SERVER_REGISTRY_PATH L"LanmanServer"

#define PARAMETERS_REGISTRY_PATH L"LanmanServer\\Parameters"
#define AUTOTUNED_REGISTRY_PATH L"LanmanServer\\AutotunedParameters"
#define SHARES_REGISTRY_PATH L"LanmanServer\\Shares"
#define SHARES_SECURITY_REGISTRY_PATH L"LanmanServer\\Shares\\Security"
#define LINKAGE_REGISTRY_PATH L"LanmanServer\\Linkage"
#define SHARES_DEFAULT_SECURITY_REGISTRY_PATH L"LanmanServer\\DefaultSecurity"

#define BIND_VALUE_NAME L"Bind"
#define SIZE_VALUE_NAME L"Size"
#define DISC_VALUE_NAME L"Disc"
#define COMMENT_VALUE_NAME L"Comment"
#define NULL_SESSION_PIPES_VALUE_NAME L"NullSessionPipes"
#define NULL_SESSION_SHARES_VALUE_NAME L"NullSessionShares"
#define PIPES_NEED_LICENSE_VALUE_NAME L"PipesNeedLicense"
#define ERROR_LOG_IGNORE_VALUE_NAME L"ErrorLogIgnore"
#define OPTIONAL_NAMES_VALUE_NAME L"OptionalNames"
#define SERVICE_DLL_VALUE_NAME L"ServiceDll"
#define NO_REMAP_PIPES_VALUE_NAME L"NoRemapPipes"
#define DISABLE_DOS_CHECKING L"DisableDoS"

#define FULL_PARAMETERS_REGISTRY_PATH L"SYSTEM\\CurrentControlSet\\Services\\" PARAMETERS_REGISTRY_PATH


//
// Names of share "environment variables".
//

#define MAXUSES_VARIABLE_NAME L"MaxUses"
#define PATH_VARIABLE_NAME L"Path"
#define PERMISSIONS_VARIABLE_NAME L"Permissions"
#define REMARK_VARIABLE_NAME L"Remark"
#define TYPE_VARIABLE_NAME L"Type"
#define CSC_VARIABLE_NAME L"CSCFlags"
#define GUID_VARIABLE_NAME L"Guid"

//
// Used to check for Security Descriptor "Upgrade" from NT4 "World" to Win2K "World+Anonymous"
//
#define ANONYMOUS_UPGRADE_NAME L"AnonymousDescriptorsUpgraded"
#define SAVED_ANONYMOUS_RESTRICTION_NAME L"PreviousAnonymousRestriction"
#define SESSION_SD_REGENERATED_NAME L"SessionSecurityDescriptorRegenerated"
#define FULL_SECURITY_REGISTRY_PATH L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\lanmanserver\\DefaultSecurity"
#define ABBREVIATED_SECURITY_REGISTRY_PATH L"LanmanServer\\DefaultSecurity"

//
// Functions exported by registry.c.
//

VOID
SsAddParameterToRegistry (
    PFIELD_DESCRIPTOR Field,
    PVOID Value
    );

VOID
SsAddShareToRegistry (
    IN PSHARE_INFO_2 ShareInfo2,
    IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL,
    IN DWORD CSCState
    );

NET_API_STATUS
SsBindToTransports (
    VOID
    );

NET_API_STATUS
SsCheckRegistry (
    VOID
    );

NET_API_STATUS
SsEnumerateStickyShares (
    IN OUT PSRVSVC_SHARE_ENUM_INFO ShareEnumInfo
    );

BOOLEAN
SsGetDefaultSdFromRegistry ( 
    IN PWCH ValueName,
    OUT PSECURITY_DESCRIPTOR *FileSD
);

VOID
SsWriteDefaultSdToRegistry ( 
    IN PWCH ValueName,
    IN PSECURITY_DESCRIPTOR FileSD
);


NET_API_STATUS
SsLoadConfigurationParameters (
    VOID
    );

NET_API_STATUS
SsRecreateStickyShares (
    VOID
    );

NET_API_STATUS
SsRemoveShareFromRegistry (
    LPTSTR NetName
    );

//
// Functions used by registry.c that are elsewhere but there is no convenient
// place to put the prototype
//

DWORD
ComputeTransportAddressClippedLength(
    IN PCHAR TransportAddress,
    IN ULONG TransportAddressLength
    );

#endif // ndef _SSREG_