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
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_
|
|
|