Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

483 lines
9.3 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:
dprocess.h
Abstract:
This header defines the "DPROCESS" class. The DPROCESS class defines state
variables and operations for DPROCESS objects within the WinSock 2 DLL. A
DPROCESS object represents all of the information known about a process
using the Windows Sockets API.
Author:
Paul Drews ([email protected]) 7-July-1995
Notes:
$Revision: 1.16 $
$Modtime: 08 Mar 1996 04:58:14 $
Revision History:
most-recent-revision-date email-name
description
25-July [email protected]
Moved protocol catalog related items into DCATALOG. Added data
member to contain a pointer to the protocol catalog. Removed
provider list moved provider references to into the protocol
catalog.
14-July-1995 [email protected]
Moved member function documentation to implementation file
dprocess.cpp. Changed critical section data members to be
pointers to CRITICAL_SECTION. Added inline implementations for
the list lock/unlock member functions.
07-09-1995 [email protected]
Completed first complete version with clean compile and released for
subsequent implementation.
7-July-1995 [email protected]
Original version
--*/
#ifndef _DPROCESS_
#define _DPROCESS_
#include "winsock2.h"
#include <windows.h>
#include "llist.h"
#include "ws2help.h"
#include "classfwd.h"
class DPROCESS
{
public:
// Static (global-scope) member functions
static INT
GetCurrentDProcess(
OUT PDPROCESS FAR * Process
);
static INT
DProcessClassInitialize(
VOID
);
// Normal member functions
DPROCESS();
INT Initialize();
~DPROCESS();
INT
DSocketAttach(
IN PDSOCKET NewSocket
);
INT
DSocketDetach(
IN PDSOCKET OldSocket
);
INT
DThreadAttach(
IN PDTHREAD NewThread
);
INT
DThreadDetach(
IN PDTHREAD OldThread
);
PDCATALOG
GetProtocolCatalog();
PNSCATALOG
GetNamespaceCatalog();
INT
GetAsyncHelperDeviceID(
OUT LPHANDLE HelperHandle
);
VOID
IncrementRefCount();
DWORD
DecrementRefCount();
BYTE
GetMajorVersion();
BYTE
GetMinorVersion();
WORD
GetVersion();
VOID
SetVersion( WORD Version );
private:
VOID LockDSocketList();
VOID UnLockDSocketList();
VOID LockDThreadList();
VOID UnLockDThreadList();
static PDPROCESS sm_current_dprocess;
// A class-scope reference to the single current DPROCESS object for this
// process.
LONG m_reference_count;
// The number of times this object has been refereced by
// WSAStarup/WSACleanup. WSAStartup increases the count and WSACleanup
// decreases the count. Declarations for lists of associated objects:
LIST_ENTRY m_thread_list;
LIST_ENTRY m_socket_list;
// Heads of linked lists for related objects.
CRITICAL_SECTION m_thread_list_lock;
CRITICAL_SECTION m_socket_list_lock;
// Mutual-exclusion locks for related-object lists.
// Declarations for Helper objects created on demand:
HANDLE m_HelperHandle;
// Reference to the Asynchronous callback helper device. An asynchronous
// callback helper device is only opened on demand.
PDCATALOG m_protocol_catalog;
// Reference to the protocol catalog. Note that although a protocol
// catalog object is itself of fixed size, there is a reason for not
// embedding the protocol catalog object within the dprocess object.
// Making the protocol catalog a distinct object gives us precise control
// over when the catalog is initialized and destroyed. In particular,
// the protocol catalog is only destroyed AFTER all sockets are
// destroyed, since sockets or their associated provider objects may have
// references into parts of the protocol catalog.
PNSCATALOG m_namespace_catalog;
WORD m_version;
// The WinSock version number for this process.
}; // class DPROCESS
inline PDCATALOG
DPROCESS::GetProtocolCatalog()
/*++
Routine Description:
Returns the protocol catalog associated with the process object.
Arguments:
None
Return Value:
The value of m_protocol_catalog
--*/
{
return(m_protocol_catalog);
}
inline PNSCATALOG
DPROCESS::GetNamespaceCatalog()
/*++
Routine Description:
Returns the namespace catalog associated with the process object.
Arguments:
None
Return Value:
The value of m_namespace_catalog
--*/
{
return(m_namespace_catalog);
}
inline VOID
DPROCESS::LockDSocketList()
/*++
Routine Description:
This function acquires mutually exclusive access to the list of DSOCKET
objects attached to the DPROCESS object. The companion procedures
LockDSocketList and UnLockDSocketList are used internally to bracket
operations that add and remove items from the DSOCKET list.
NOTE:
Use a Critical Section object for best performance. Create the Critical
Section object at DPROCESS object initialization time and destroy it at
DPROCESS object destruction time.
Arguments:
None
Return Value:
None
--*/
{
EnterCriticalSection(&m_socket_list_lock);
}
inline VOID
DPROCESS::UnLockDSocketList()
/*++
Routine Description:
This function releases mutually exclusive access to the list of DSOCKET
objects attached to the DPROCESS object. The companion procedures
LockDSocketList and UnLockDSocketList are used internally to bracket
operations that add and remove items from the DSOCKET list.
NOTE:
Use a Critical Section object for best performance. Create the Critical
Section object at DPROCESS object initialization time and destroy it at
DPROCESS object destruction time.
Arguments:
None
Return Value:
None
--*/
{
LeaveCriticalSection(&m_socket_list_lock);
}
inline VOID
DPROCESS::LockDThreadList()
/*++
Routine Description:
This function acquires mutually exclusive access to the list of DTHREAD
objects attached to the DPROCESS object. The companion procedures
LockDThreadList and UnLockDThreadList are used internally to bracket
operations that add and remove items from the DTHREAD list.
NOTE:
Use a Critical Section object for best performance. Create the Critical
Section object at DPROCESS object initialization time and destroy it at
DPROCESS object destruction time.
Arguments:
None
Return Value:
None
--*/
{
EnterCriticalSection(&m_thread_list_lock);
}
inline VOID
DPROCESS::UnLockDThreadList()
/*++
Routine Description:
This function releases mutually exclusive access to the list of DTHREAD
objects attached to the DPROCESS object. The companion procedures
LockDThreadList and UnLockDThreadList are used internally to bracket
operations that add and remove items from the DTHREAD list.
NOTE:
Use a Critical Section object for best performance. Create the Critical
Section object at DPROCESS object initialization time and destroy it at
DPROCESS object destruction time.
Arguments:
None
Return Value:
None
--*/
{
LeaveCriticalSection(&m_thread_list_lock);
}
inline VOID
DPROCESS::IncrementRefCount(
VOID
)
/*++
Routine Description:
This function increases the reference count on this object.
Arguments:
Return Value:
NONE
--*/
{
InterlockedIncrement(&m_reference_count);
}
inline DWORD
DPROCESS::DecrementRefCount(
VOID
)
/*++
Routine Description:
This function decreases the reference count on this object.
Arguments:
Return Value:
Returns the new value of the reference count
--*/
{
return(InterlockedDecrement(&m_reference_count));
}
inline
BYTE
DPROCESS::GetMajorVersion()
/*++
Routine Description:
This function returns the major WinSock version number negotiated
at WSAStartup() time.
Arguments:
None.
Return Value:
Returns the major WinSock version number.
--*/
{
assert(m_version != 0);
return LOBYTE(m_version);
} // GetMajorVersion
inline
BYTE
DPROCESS::GetMinorVersion()
/*++
Routine Description:
This function returns the minor WinSock version number negotiated
at WSAStartup() time.
Arguments:
None.
Return Value:
Returns the minor WinSock version number.
--*/
{
assert(m_version != 0);
return HIBYTE(m_version);
} // GetMinorVersion
inline
WORD
DPROCESS::GetVersion()
/*++
Routine Description:
This function returns the WinSock version number negotiated
at WSAStartup() time.
Arguments:
None.
Return Value:
Returns the WinSock version number.
--*/
{
assert(m_version != 0);
return m_version;
} // GetVersion
#endif // _DPROCESS_