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.
 
 
 
 
 
 

304 lines
7.6 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:
dcatitem.h
Abstract:
This file contains the class definition for the PROTO_CATALOG_ITEM class.
This class defines the interface to the entries that can be installed and
retrieved in the protocol catalog.
Author:
Paul Drews ([email protected]) 31-July-1995
Notes:
$Revision: 1.7 $
$Modtime: 12 Jan 1996 15:09:02 $
Revision History:
most-recent-revision-date email-name
description
07-31-1995 [email protected]
Created original version from definitions separated out from the
dcatalog module.
--*/
#ifndef _DCATITEM_
#define _DCATITEM_
#include "winsock2.h"
#include <windows.h>
#include "classfwd.h"
class PROTO_CATALOG_ITEM {
public:
PROTO_CATALOG_ITEM();
INT
InitializeFromRegistry(
IN HKEY ParentKey,
IN INT SequenceNum
);
INT
InitializeFromValues(
IN LPWSTR LibraryPath,
IN LPWSAPROTOCOL_INFOW ProtoInfo
);
LPWSAPROTOCOL_INFOW
GetProtocolInfo();
LPGUID
GetProviderId();
LPWSTR
GetLibraryPath();
PDPROVIDER
GetProvider();
INT WriteToRegistry(
IN HKEY ParentKey,
IN INT SequenceNum
);
VOID
Reference ();
VOID
Dereference ();
bool operator== (const PROTO_CATALOG_ITEM& Item);
private:
INT
IoRegistry(
IN HKEY EntryKey,
IN BOOL IsRead
);
// Should never be called directly, but through dereferencing.
~PROTO_CATALOG_ITEM();
friend class DCATALOG; // So it can access some of the private fields
// and methods below.
friend class DCATALOG_ITEMS; // So it can access some of the privat e fields
// and methods below.
VOID
SetProvider(
IN PDPROVIDER Provider
);
LIST_ENTRY m_CatalogLinkage;
// Used to link items in catalog.
LONG m_reference_count;
// This object's reference count
PDPROVIDER m_Provider;
// Pointer to the dprovider object attached to this catalog entry.
WSAPROTOCOL_INFOW m_ProtoInfo;
// The cataloged WSAPROTOCOL_INFOW structure. This is typically used for
// comparison when selecting a provider by address family, socket
// type, etc.
WCHAR m_LibraryPath[MAX_PATH];
// Fully qualified path to the provider's DLL image.
}; // class PROTO_CATALOG_ITEM
inline
VOID
PROTO_CATALOG_ITEM::Reference () {
//
// Object is created with reference count of 1
// and is destroyed whenever it gets back to 0.
//
assert (m_reference_count>0);
InterlockedIncrement (&m_reference_count);
}
inline
VOID
PROTO_CATALOG_ITEM::Dereference () {
assert (m_reference_count>0);
if (InterlockedDecrement (&m_reference_count)==0)
delete this;
}
inline
LPWSAPROTOCOL_INFOW
PROTO_CATALOG_ITEM::GetProtocolInfo()
/*++
Routine Description:
This procedure retrieves a reference to the protocol info associated with
the catalog item. Note that the reference is to storage owned by the
catalog item. It is the caller's responsibility to make sure the reference
is no longer used after the catalog item is destroyed.
Arguments:
None
Return Value:
Returns a pointer to the associated protocol info.
--*/
{
return(& m_ProtoInfo);
} // GetProtocolInfo
inline
LPGUID
PROTO_CATALOG_ITEM::GetProviderId()
/*++
Routine Description:
This procedure retrieves a the unique ID of the provider associated with
the catalog item.
Arguments:
None
Return Value:
Returns the provider ID (a GUID).
--*/
{
return &m_ProtoInfo.ProviderId;
} // GetProviderId
inline
LPWSTR
PROTO_CATALOG_ITEM::GetLibraryPath()
/*++
Routine Description:
This procedure retrieves a reference to the zero-terminated,
fully-qualified path of the library that is the service provider for the
protocol associated with the catalog item. Note that the reference is to
storage owned by the catalog item. It is the caller's responsibility to
make sure the reference is no longer used after the catalog item is
destroyed.
Arguments:
None
Return Value:
Returns a pointer to the library path string.
--*/
{
assert(m_LibraryPath[0] != '\0');
return(m_LibraryPath);
} // GetLibraryPath
inline
PDPROVIDER
PROTO_CATALOG_ITEM::GetProvider()
/*++
Routine Description:
This procedure retrieves a reference to the DPROVIDER associated with a
catalog entry. Note that the reference may be NULL if no provider has yet
been loaded for this protocol.
Arguments:
None
Return Value:
Returns the current provider reference, or NULL if there is no associated
provider.
--*/
{
return(m_Provider);
} // GetProvider
inline
bool
PROTO_CATALOG_ITEM::operator== (
const PROTO_CATALOG_ITEM& Item
)
{
//
// Do member by member comparison for protocol info structure and
// provider path.
//
return
//
// Start with entry ID since these are unique for
// each protocol info entry.
//
m_ProtoInfo.dwCatalogEntryId==Item.m_ProtoInfo.dwCatalogEntryId &&
//
// Rest is in the order it is layed out in the structure.
//
m_ProtoInfo.dwServiceFlags1==Item.m_ProtoInfo.dwServiceFlags1 &&
m_ProtoInfo.dwServiceFlags2==Item.m_ProtoInfo.dwServiceFlags2 &&
m_ProtoInfo.dwServiceFlags3==Item.m_ProtoInfo.dwServiceFlags3 &&
m_ProtoInfo.dwServiceFlags4==Item.m_ProtoInfo.dwServiceFlags4 &&
m_ProtoInfo.dwProviderFlags==Item.m_ProtoInfo.dwProviderFlags &&
m_ProtoInfo.ProviderId==Item.m_ProtoInfo.ProviderId &&
m_ProtoInfo.ProtocolChain.ChainLen==Item.m_ProtoInfo.ProtocolChain.ChainLen &&
memcmp (m_ProtoInfo.ProtocolChain.ChainEntries,
Item.m_ProtoInfo.ProtocolChain.ChainEntries,
sizeof (m_ProtoInfo.ProtocolChain.ChainEntries[0])*
m_ProtoInfo.ProtocolChain.ChainLen)==0 &&
m_ProtoInfo.iVersion==Item.m_ProtoInfo.iVersion &&
m_ProtoInfo.iAddressFamily==Item.m_ProtoInfo.iAddressFamily &&
m_ProtoInfo.iMaxSockAddr==Item.m_ProtoInfo.iMaxSockAddr &&
m_ProtoInfo.iMinSockAddr==Item.m_ProtoInfo.iMinSockAddr &&
m_ProtoInfo.iSocketType==Item.m_ProtoInfo.iSocketType &&
m_ProtoInfo.iProtocol==Item.m_ProtoInfo.iProtocol &&
m_ProtoInfo.iProtocolMaxOffset==Item.m_ProtoInfo.iProtocolMaxOffset &&
m_ProtoInfo.iNetworkByteOrder==Item.m_ProtoInfo.iNetworkByteOrder &&
m_ProtoInfo.iSecurityScheme==Item.m_ProtoInfo.iSecurityScheme &&
m_ProtoInfo.dwMessageSize==Item.m_ProtoInfo.dwMessageSize &&
m_ProtoInfo.dwProviderReserved==Item.m_ProtoInfo.dwProviderReserved &&
wcscmp (m_ProtoInfo.szProtocol, Item.m_ProtoInfo.szProtocol)==0 &&
wcscmp (m_LibraryPath, Item.m_LibraryPath)==0;
}
#endif // _DCATITEM_