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.
 
 
 
 
 
 

195 lines
5.2 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:
nsquery.h
Abstract:
This module gives the class definition for the NSQUERY object type. The
NSQUERY object holds all the state information regarding a
WSALookup{Begin/Next/End} series of operations. It supplies member
functions that implement the API-level operations in terms of the SPI-level
operations.
Author:
Paul Drews ([email protected]) 09-November-1995
Notes:
$Revision: 1.8 $
$Modtime: 15 Feb 1996 16:54:32 $
Revision History:
most-recent-revision-date email-name
description
09-November-1995 [email protected]
created
--*/
#ifndef _NSQUERY_
#define _NSQUERY_
#include "winsock2.h"
#include <windows.h>
#include "classfwd.h"
#define QUERYSIGNATURE 0xbeadface
// A signature bit pattern used to validate an object of this type is still
// valid.
class NSQUERY
{
public:
NSQUERY();
INT
Initialize(
);
BOOL
ValidateAndReference();
~NSQUERY();
INT
WINAPI
LookupServiceBegin(
IN LPWSAQUERYSETW lpqsRestrictions,
IN DWORD dwControlFlags,
IN PNSCATALOG NsCatalog
);
INT
WINAPI
LookupServiceNext(
IN DWORD dwControlFlags,
IN OUT LPDWORD lpdwBufferLength,
IN OUT LPWSAQUERYSETW lpqsResults
);
INT
WINAPI
Ioctl(
IN DWORD dwControlCode,
IN LPVOID lpvInBuffer,
IN DWORD cbInBuffer,
OUT LPVOID lpvOutBuffer,
IN DWORD cbOutBuffer,
OUT LPDWORD lpcbBytesReturned,
IN LPWSACOMPLETION lpCompletion,
IN LPWSATHREADID lpThreadId
);
INT
WINAPI
LookupServiceEnd();
VOID
WINAPI
Dereference();
BOOL
RemoveProvider(
PNSPROVIDER pNamespaceProvider
);
BOOL
AddProvider(
PNSPROVIDER pNamespaceProvider
);
private:
PNSPROVIDERSTATE
NextProvider(
PNSPROVIDERSTATE Provider
);
PNSPROVIDERSTATE
PreviousProvider(
PNSPROVIDERSTATE Provider
);
volatile DWORD m_signature;
// The signature of the object.
volatile LONG m_reference_count;
// The number of threads currently using the object. Used to determine
// when the object can be deleted.
volatile BOOL m_shutting_down;
// True when LookupEnd has been called. Tells other thread that may
// still be enumerating to get out ASAP.
LIST_ENTRY m_provider_list;
// The ordered list of remaining providers to which the LookupNext
// operation can be directed. A provider is deleted from the front of
// the list as WSA_E_NOMORE is first encountered from the provider.
// The actual type of the list entries is private to the
// implementation.
PNSPROVIDERSTATE m_current_provider;
// This keeps track of the sequence number of the current first
// provider in the provider list. When a LookupNext encounters
// WSA_E_NOMORE, this number is compared against the number that was at
// the start of the operation. The provider list is updated only if
// these two numbers are equal. This covers the case where several
// threads are doing concurrent LookupNext operations.
CRITICAL_SECTION m_members_guard;
// This critical section must be entered when updating the values of
// any of the member variables of the NSQUERY object. This keeps the
// values consistent even though there may be concurrent threads using
// the object with LookupServiceNext or LookupServiceEnd operations.
// Do not keep this critical section entered while calling through to a
// service provider.
BOOL m_change_ioctl_succeeded;
// For providers which support Ioctl, after a change notification the
// list of providers can be reset so that further calls to
// LookupServiceNext will succeed with change information.
#ifdef RASAUTODIAL
LPWSAQUERYSETW m_query_set;
// The LPWSAQUERYSET structure passed in to LookupServiceBegin, in case
// we need to restart the query (call LookupServiceBegin).
DWORD m_control_flags;
// The control flags of the query, in case we have to restart the query
// (call LookupServiceBegin) due to an autodial attempt.
PNSCATALOG m_catalog;
// The catalog of the original query, in case we have to restart the
// query (call LookupServiceBegin), due to an autodial attempt.
BOOL m_restartable;
// TRUE if no results have been returned for this query; FALSE
// otherwise.
#endif // RASAUTODIAL
}; // class NSQUERY
#endif // _NSQUERY_