/*++ Copyright (c) 1991 Microsoft Corporation Module Name: srvenum.h Abstract: Private header file to be included by Browser service modules that need to know about server enumeration routines (including the browse cache modules). Author: Larry Osterman (larryo) 23-Jun-1993 Revision History: --*/ #ifndef _SRVENUM_INCLUDED_ #define _SRVENUM_INCLUDED_ // // Cached browse response. // // The cached browse request structure is used to hold the response to // a NetServerEnum request. // // If a NetServerEnum request comes in through Xactsrv, the browser will // look up to see if there is a cached browse that matches this request, // and if there is, it will simply return that request to the caller. // // // In a nutshell, this is how the response cache works: // // The browser keeps a list of all of the browse requests that come into the // browser. This list is keyed by Level, ServerType, and buffer size. The // actual chain is protected by a CriticalSection called the // ResponseCacheLock. Entries in the list are protected by the global // network lock. // // When a browse request is received from Xactsrv, the browser looks up // the request in the response cache, and if it finds a matching response, // it increments 2 hit counters. The first hit counter indicates he number // of hits the request has seen since the last time the cache was aged. // The second indicates the total number of hits over the lifetime of the // browser for this response. // // If the lifetime hit count is over the configurable hit limit, the // browser will save a copy of the response buffer associated with the // request. Any and all subsequent browse requests will use this buffer // for their response instead of converting the response. // // When a call is made to BrAgeResponseCache, the browser will scan the // cache and free up all of the cached responses. It will also delete // any responses that have a hit count less than the hit limit. // typedef struct _CACHED_BROWSE_RESPONSE { LIST_ENTRY Next; // Pointer to next request. DWORD HitCount; // Hitcount for this cached request. DWORD TotalHitCount; // Total hit count for this request. DWORD LowHitCount; // Number of passes with a low hit count. DWORD ServerType; // Server type. DWORD Level; // Level of request WORD Size; // Request size WORD Converter; // Converter (used by client to get strings right). PVOID Buffer; // Response buffer. DWORD EntriesRead; // Number of entries in cached list DWORD TotalEntries; // Total # of entries available. WORD Status; // Status of request. WCHAR FirstNameToReturn[CNLEN+1]; // Name of first entry in buffer } CACHED_BROWSE_RESPONSE, *PCACHED_BROWSE_RESPONSE; PCACHED_BROWSE_RESPONSE BrLookupAndAllocateCachedEntry( IN PNETWORK Network, IN DWORD ServerType, IN WORD Size, IN ULONG Level, IN LPCWSTR FirstNameToReturn ); NET_API_STATUS BrDestroyResponseCache( IN PNETWORK Network ); NET_API_STATUS BrDestroyCacheEntry( IN PCACHED_BROWSE_RESPONSE CacheEntry ); VOID BrAgeResponseCache( IN PNETWORK Network ); PCACHED_BROWSE_RESPONSE BrAllocateResponseCacheEntry( IN PNETWORK Network, IN DWORD ServerType, IN WORD Size, IN ULONG Level, IN LPCWSTR FirstNameToReturn ); extern LIST_ENTRY ServicedNetworks; #endif // _SRVENUM_INCLUDED_