Leaked source code of windows server 2003
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.
 
 
 
 
 
 

248 lines
5.0 KiB

/*++
Intel Corporation Proprietary Information
Copyright (c) 1995 Intel Corporation
This listing is supplied under the terms of a license agreement with
Intel Corporation and may not be used, copied, nor disclosed except in
accordance with the terms of that agreeement.
Module Name:
nscatalo.h
Abstract:
This module contains the interface to the catalog of name space providers
for the winsock2 DLL.
Author:
Dirk Brandewie [email protected] 9-NOV-1995
Notes:
$Revision: 1.7 $
$Modtime: 14 Feb 1996 14:13:32 $
Revision History:
09-NOV-1995 [email protected]
Initial revision.
--*/
#ifndef _NSCATALO_
#define _NSCATALO_
#include "winsock2.h"
#include <windows.h>
typedef
BOOL
(* NSCATALOGITERATION) (
IN PVOID PassBack,
IN PNSCATALOGENTRY CatalogEntry
);
/*++
Routine Description:
CATALOGITERATION is a place-holder for a function supplied by the client.
The function is called once for each NSPROTO_CATALOG_ITEM structure in
the catalog while enumerating the catalog. The client can stop the
enumeration early by returning FALSE from the function.
Arguments:
PassBack - Supplies to the client an uninterpreted, unmodified value
that was specified by the client in the original function
that requested the enumeration. The client can use this
value to carry context between the requesting site and the
enumeration function.
CatalogEntry - Supplies to the client a reference to a NSCATALOGENTRY
structure with values for this item of the enumeration.
Return Value:
TRUE - The enumeration should continue with more iterations if there are
more structures to enumerate.
FALSE - The enumeration should stop with this as the last iteration even if
there are more structures to enumerate.
--*/
PNSCATALOG
OpenInitializedNameSpaceCatalog();
/*++
Routine Description:
Creates and returns catalog object that represents current reqistry state
Arguments:
None
Return Value:
Catalog object or NULL if allocation or registry IO fails
--*/
class NSCATALOG
{
public:
NSCATALOG();
INT
InitializeFromRegistry(
IN HKEY ParentKey,
IN HANDLE CatalogChangeEvent OPTIONAL
);
#ifdef _WIN64
INT
InitializeFromRegistry32(
IN HKEY ParentKey
);
#endif
INT
RefreshFromRegistry (
IN HANDLE CatalogChangeEvent OPTIONAL
);
INT
WriteToRegistry(
);
~NSCATALOG();
VOID
EnumerateCatalogItems(
IN NSCATALOGITERATION Iteration,
IN PVOID PassBack
);
INT
GetCountedCatalogItemFromProviderId(
IN LPGUID ProviderId,
OUT PNSCATALOGENTRY FAR * CatalogItem
);
INT
GetCountedCatalogItemFromNameSpaceId(
IN DWORD NameSpaceId,
OUT PNSCATALOGENTRY FAR * CatalogItem
);
VOID
AppendCatalogItem(
IN PNSCATALOGENTRY CatalogItem
);
VOID
RemoveCatalogItem(
IN PNSCATALOGENTRY CatalogItem
);
INT WSAAPI
GetServiceClassInfo(
IN OUT LPDWORD lpdwBufSize,
IN OUT LPWSASERVICECLASSINFOW lpServiceClassInfo
);
INT
LoadProvider(
IN PNSCATALOGENTRY CatalogEntry
);
static
LPSTR
GetCurrentCatalogName(
VOID
);
private:
BOOL
OpenCatalog(
IN HKEY ParentKey
);
VOID
AcquireCatalogLock(
VOID
);
VOID
ReleaseCatalogLock(
VOID
);
VOID
UpdateNamespaceList (
PLIST_ENTRY new_list
);
PNSPROVIDER
GetClassInfoProvider(
IN DWORD BufSize,
IN LPWSASERVICECLASSINFOW lpServiceClassInfo
);
LIST_ENTRY m_namespace_list;
// The head of the list of protocol catalog items
ULONG m_num_items;
// Number of items in this catalog.
ULONG m_serial_num;
// The serial number of the catalog (changes every time catalog
// is changed in the registry)
HKEY m_reg_key;
// Handle of the registry key under which catalog resides.
// We keep it open so we can get notified whenever catalog
// changes.
PNSPROVIDER m_classinfo_provider;
#ifdef _WIN64
BOOLEAN m_entries32;
#endif
CRITICAL_SECTION m_nscatalog_lock;
}; // class dcatalog
inline
VOID
NSCATALOG::AcquireCatalogLock(
VOID
)
{
EnterCriticalSection( &m_nscatalog_lock );
}
inline
VOID
NSCATALOG::ReleaseCatalogLock(
VOID
)
{
LeaveCriticalSection( &m_nscatalog_lock );
}
#endif // _NSCATALO_