/*++ Copyright (c) 2002 Microsoft Corporation Module Name: ulnamesp.c Abstract: This module implements the namespace reservation and registration support. Author: Anish Desai (anishd) 13-May-2002 Revision History: --*/ // // Private declaration // // // Scheme and port binding entry // typedef struct _UL_PORT_SCHEME_PAIR { USHORT PortNumber; BOOLEAN Secure; LONG RefCount; } UL_PORT_SCHEME_PAIR, *PUL_PORT_SCHEME_PAIR; // // Scheme and port binding table // typedef struct _UL_PORT_SCHEME_TABLE { LONG UsedCount; LONG AllocatedCount; UL_PORT_SCHEME_PAIR Table[0]; } UL_PORT_SCHEME_TABLE, *PUL_PORT_SCHEME_TABLE; // // Default table size (Make it a power of 2.) // #define UL_DEFAULT_PORT_SCHEME_TABLE_SIZE 2 // // Private functions // BOOLEAN UlpFindPortNumberIndex( IN USHORT PortNumber, OUT PLONG pIndex ); NTSTATUS UlpBindSchemeToPort( IN BOOLEAN Secure, IN USHORT PortNumber ); NTSTATUS UlpUnbindSchemeFromPort( IN BOOLEAN Secure, IN USHORT PortNumber ); NTSTATUS UlpQuerySchemeForPort( IN USHORT PortNumber, OUT PBOOLEAN Secure ); NTSTATUS UlpUpdateReservationInRegistry( IN BOOLEAN Add, IN PHTTP_PARSED_URL pParsedUrl, IN PSECURITY_DESCRIPTOR pSecurityDescriptor, IN ULONG SecurityDescriptorLength ); NTSTATUS UlpLogGeneralInitFailure( IN NTSTATUS LogStatus ); NTSTATUS UlpLogSpecificInitFailure( IN PKEY_VALUE_FULL_INFORMATION pFullInfo, IN NTSTATUS LogStatus ); NTSTATUS UlpValidateUrlSdPair( IN PKEY_VALUE_FULL_INFORMATION pFullInfo, OUT PWSTR * ppSanitizedUrl, OUT PHTTP_PARSED_URL pParsedUrl ); NTSTATUS UlpReadReservations( VOID ); NTSTATUS UlpTreeAllocateNamespace( IN PHTTP_PARSED_URL pParsedUrl, IN HTTP_URL_OPERATOR_TYPE OperatorType, IN PACCESS_STATE AccessState, IN ACCESS_MASK DesiredAccess, IN KPROCESSOR_MODE RequestorMode, OUT PUL_CG_URL_TREE_ENTRY *ppEntry ); NTSTATUS UlpTreeReserveNamespace( IN PHTTP_PARSED_URL pParsedUrl, IN PSECURITY_DESCRIPTOR pUrlSD, IN PACCESS_STATE AccessState, IN ACCESS_MASK DesiredAccess, IN KPROCESSOR_MODE RequestorMode ); NTSTATUS UlpReserveUrlNamespace( IN PHTTP_PARSED_URL pParsedUrl, IN PSECURITY_DESCRIPTOR pUrlSD, IN PACCESS_STATE AccessState, IN ACCESS_MASK DesiredAccess, IN KPROCESSOR_MODE RequestorMode ); PUL_DEFERRED_REMOVE_ITEM UlpAllocateDeferredRemoveItem( IN PHTTP_PARSED_URL pParsedUrl ); NTSTATUS UlpTreeRegisterNamespace( IN PHTTP_PARSED_URL pParsedUrl, IN HTTP_URL_CONTEXT UrlContext, IN PUL_CONFIG_GROUP_OBJECT pConfigObject, IN PACCESS_STATE AccessState, IN ACCESS_MASK DesiredAccess, IN KPROCESSOR_MODE RequestorMode ); NTSTATUS UlpRegisterUrlNamespace( IN PHTTP_PARSED_URL pParsedUrl, IN HTTP_URL_CONTEXT UrlContext, IN PUL_CONFIG_GROUP_OBJECT pConfigObject, IN PACCESS_STATE AccessState, IN ACCESS_MASK DesiredAccess, IN KPROCESSOR_MODE RequestorMode ); NTSTATUS UlpPrepareSecurityDescriptor( IN PSECURITY_DESCRIPTOR pInSecurityDescriptor, IN KPROCESSOR_MODE RequestorMode, OUT PSECURITY_DESCRIPTOR * ppPreparedSecurityDescriptor, OUT PSECURITY_DESCRIPTOR * ppCapturedSecurityDescriptor, OUT PULONG pCapturedSecurityDescriptorLength ); NTSTATUS UlpAddReservationEntry( IN PHTTP_PARSED_URL pParsedUrl, IN PSECURITY_DESCRIPTOR pUserSecurityDescriptor, IN ULONG SecurityDescriptorLength, IN PACCESS_STATE AccessState, IN ACCESS_MASK AccessMask, IN KPROCESSOR_MODE RequestorMode, IN BOOLEAN bPersist ); NTSTATUS UlpDeleteReservationEntry( IN PHTTP_PARSED_URL pParsedUrl, IN PACCESS_STATE AccessState, IN ACCESS_MASK AccessMask, IN KPROCESSOR_MODE RequestorMode ); NTSTATUS UlpNamespaceAccessCheck( IN PSECURITY_DESCRIPTOR pSecurityDescriptor, IN PACCESS_STATE AccessState OPTIONAL, IN ACCESS_MASK DesiredAccess OPTIONAL, IN KPROCESSOR_MODE RequestorMode OPTIONAL, IN PCWSTR pObjectName OPTIONAL ); // // Public functions // NTSTATUS UlInitializeNamespace( VOID ); VOID UlTerminateNamespace( VOID );