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.
 
 
 
 
 
 

317 lines
12 KiB

/*==========================================================================
*
* Copyright (C) 2000-2002 Microsoft Corporation. All Rights Reserved.
*
* File: async.h
* Content: Asynchronous Operations Header File
*@@BEGIN_MSINTERNAL
* History:
* Date By Reason
* ==== == ======
* 12/28/99 mjn Created
* 12/29/99 mjn Reformed DN_ASYNC_OP to use hParentOp instead of lpvUserContext
* 01/14/00 mjn Added pvUserContext to DN_PerformListen
* 01/14/00 mjn Changed DN_COUNT_BUFFER to CRefCountBuffer
* 01/17/00 mjn Added dwStartTime to async op structure
* 01/19/00 mjn Replaced DN_SYNC_EVENT with CSyncEvent
* 01/21/00 mjn Added DNProcessInternalOperation
* 01/27/00 mjn Added support for retention of receive buffers
* 02/09/00 mjn Implemented DNSEND_COMPLETEONPROCESS
* 02/18/00 mjn Converted DNADDRESS to IDirectPlayAddress8
* 03/23/00 mjn Added phrSync and pvInternal
* 03/24/00 mjn Add guidSP to DN_ASYNC_OP
* 04/04/00 mjn Added DNProcessTerminateSession()
* 04/10/00 mjn Use CAsyncOp for CONNECTs, LISTENs and DISCONNECTs
* 04/17/00 mjn Replaced BUFFERDESC with DPN_BUFFER_DESC
* 04/17/00 mjn Added DNCompleteAsyncHandle
* 04/21/00 mjn Added DNPerformDisconnect
* 04/23/00 mjn Optionally return child AsyncOp in DNPerformChildSend()
* 04/24/00 mjn Added DNCreateUserHandle()
* 06/24/00 mjn Added DNCompleteConnectToHost() and DNCompleteUserConnect()
* 07/02/00 mjn Added DNSendGroupMessage() and DN_GROUP_SEND_OP
* 07/10/00 mjn Added DNPerformEnumQuery()
* 07/11/00 mjn Added fNoLoopBack to DNSendGroupMessage()
* mjn Added DNPerformNextEnumQuery(),DNPerformSPListen(),DNPerformNextListen(),DNEnumAdapterGuids(),DNPerformNextConnect
* mjn Added DN_LISTEN_OP_DATA,DN_CONNECT_OP_DATA
* 07/20/00 mjn Added DNCompleteConnectOperation() and DNCompleteSendConnectInfo()
* mjn Modified DNPerformDisconnect()
* 08/05/00 mjn Added pParent to DNSendGroupMessage and DNSendMessage()
* mjn Added fInternal to DNPerformChildSend()
* mjn Removed DN_TerminateAllListens()
* mjn Added DNCompleteRequest()
* 09/23/00 mjn Added CSyncEvent to DN_LISTEN_OP_DATA
* 10/04/00 mjn Added dwCompleteAdapters to DN_LISTEN_OP_DATA
* 12/05/00 RichGr Changed DN_SEND_OP_DATA packing from 1 to default (4 on 32-bit, 8 on 64bit).
* 03/30/00 mjn Added service provider to DNPerformConnect()
*@@END_MSINTERNAL
*
***************************************************************************/
#ifndef __ASYNC_H__
#define __ASYNC_H__
typedef struct _DIRECTNETOBJECT DIRECTNETOBJECT;
//**********************************************************************
// Constant definitions
//**********************************************************************
#define DN_ASYNC_OP_SIG 0xdece0003
#define DN_ASYNC_OP_FLAG_MULTI_OP 0x0001
#define DN_ASYNC_OP_FLAG_MULTI_OP_PARENT 0x0002
#define DN_ASYNC_OP_FLAG_SYNCHRONOUS_OP 0x0010
#define DN_ASYNC_OP_FLAG_NO_COMPLETION 0x0100
#define DN_ASYNC_OP_FLAG_RELEASE_SP 0x1000
//
// Enumerated values for buffer descriptions. The value DN_ASYNC_BUFFERDESC_COUNT
// must be large enough to contain account for BUFFERDESC structres possibly
// passed with this async operation
//
#define DN_ASYNC_BUFFERDESC_HEADER 0
#define DN_ASYNC_BUFFERDESC_DATA 1
#define DN_ASYNC_BUFFERDESC_COUNT 3
#define DN_ASYNC_MAX_SEND_BUFFERDESC 8 // Is this value right?
//**********************************************************************
// Macro definitions
//**********************************************************************
//**********************************************************************
// Structure definitions
//**********************************************************************
class CSyncEvent;
class CRefCountBuffer;
class CServiceProvider;
class CAsyncOp;
class CConnection;
class CNameTableEntry;
typedef struct _DN_SEND_OP_DATA
{
DWORD dwNumBuffers;
DWORD dwMsgId;
DPN_BUFFER_DESC BufferDesc[DN_ASYNC_MAX_SEND_BUFFERDESC+1];
} DN_SEND_OP_DATA;
typedef struct _DN_GROUP_SEND_OP
{
CConnection *pConnection;
struct _DN_GROUP_SEND_OP *pNext;
} DN_GROUP_SEND_OP;
#ifndef DPNBUILD_ONLYONEADAPTER
typedef struct _DN_LISTEN_OP_DATA
{
DWORD dwNumAdapters;
DWORD dwCurrentAdapter;
DWORD dwCompleteAdapters;
CSyncEvent *pSyncEvent;
} DN_LISTEN_OP_DATA;
typedef struct _DN_CONNECT_OP_DATA
{
DWORD dwNumAdapters;
DWORD dwCurrentAdapter;
} DN_CONNECT_OP_DATA;
#endif // ! DPNBUILD_ONLYONEADAPTER
//**********************************************************************
// Variable definitions
//**********************************************************************
//**********************************************************************
// Function prototypes
//**********************************************************************
HRESULT DNCreateUserHandle(DIRECTNETOBJECT *const pdnObject,
CAsyncOp **const ppAsyncOp);
#ifndef DPNBUILD_ONLYONEADAPTER
HRESULT DNEnumAdapterGuids(DIRECTNETOBJECT *const pdnObject,
GUID *const pguidSP,
const DWORD dwMatchFlags,
GUID **const ppAdapterList,
DWORD *const pdwNumAdapters);
#endif // ! DPNBUILD_ONLYONEADAPTER
HRESULT DNPerformSPListen(DIRECTNETOBJECT *const pdnObject,
IDirectPlay8Address *const pDeviceAddr,
CAsyncOp *const pListenParent,
CAsyncOp **const ppParent);
HRESULT DNPerformListen(DIRECTNETOBJECT *const pdnObject,
IDirectPlay8Address *const pDeviceInfo,
CAsyncOp *const pParent);
#ifndef DPNBUILD_ONLYONEADAPTER
HRESULT DNPerformNextListen(DIRECTNETOBJECT *const pdnObject,
CAsyncOp *const pAsyncOp,
IDirectPlay8Address *const pDeviceAddr);
#endif // ! DPNBUILD_ONLYONEADAPTER
void DNCompleteListen(DIRECTNETOBJECT *const pdnObject,
CAsyncOp *const pAsyncOp);
/* REMOVE
HRESULT DN_TerminateAllListens(DIRECTNETOBJECT *const pdnObject);
*/
HRESULT DNPerformEnumQuery(DIRECTNETOBJECT *const pdnObject,
IDirectPlay8Address *const pHost,
IDirectPlay8Address *const pDevice,
const HANDLE hSPHandle,
const DWORD dwFlags,
void *const pvContext,
CAsyncOp *const pParent);
HRESULT DNPerformNextEnumQuery(DIRECTNETOBJECT *const pdnObject,
CAsyncOp *const pAsyncOp,
IDirectPlay8Address *const pHostAddr,
IDirectPlay8Address *const pDeviceAddr);
void DNCompleteEnumQuery(DIRECTNETOBJECT *const pdnObject,
CAsyncOp *const pAsyncOp);
void DNCompleteEnumResponse(DIRECTNETOBJECT *const pdnObject,
CAsyncOp *const pAsyncOp);
HRESULT DNPerformConnect(DIRECTNETOBJECT *const pdnObject,
const DPNID dpnid,
IDirectPlay8Address *const pDeviceInfo,
IDirectPlay8Address *const pRemoteAddr,
CServiceProvider *const pSP,
const DWORD dwConnectFlags,
CAsyncOp *const pParent);
HRESULT DNPerformNextConnect(DIRECTNETOBJECT *const pdnObject,
CAsyncOp *const pAsyncOp,
IDirectPlay8Address *const pHostAddr,
IDirectPlay8Address *const pDeviceAddr);
void DNCompleteConnect(DIRECTNETOBJECT *const pdnObject,
CAsyncOp *const pAsyncOp);
void DNCompleteConnectToHost(DIRECTNETOBJECT *const pdnObject,
CAsyncOp *const pAsyncOp);
void DNCompleteConnectOperation(DIRECTNETOBJECT *const pdnObject,
CAsyncOp *const pAsyncOp);
void DNCompleteUserConnect(DIRECTNETOBJECT *const pdnObject,
CAsyncOp *const pAsyncOp);
void DNCompleteSendConnectInfo(DIRECTNETOBJECT *const pdnObject,
CAsyncOp *const pAsyncOp);
HRESULT DNPerformDisconnect(DIRECTNETOBJECT *const pdnObject,
CConnection *const pConnection,
const HANDLE hEndPt,
const BOOL fImmediate);
void DNCompleteAsyncHandle(DIRECTNETOBJECT *const pdnObject,
CAsyncOp *const pAsyncOp);
void DNCompleteSendHandle(DIRECTNETOBJECT *const pdnObject,
CAsyncOp *const pAsyncOp);
void DNCompleteSendAsyncOp(DIRECTNETOBJECT *const pdnObject,
CAsyncOp *const pAsyncOp);
void DNCompleteRequest(DIRECTNETOBJECT *const pdnObject,
CAsyncOp *const pAsyncOp);
void DNCompleteSendRequest(DIRECTNETOBJECT *const pdnObject,
CAsyncOp *const pAsyncOp);
HRESULT DNSendMessage(DIRECTNETOBJECT *const pdnObject,
CConnection *const pConnection, // Connection to send to
const DWORD dwMsgId, // Message ID
const DPNID dpnidTarget, // Target of this send (may be NULL)
const DPN_BUFFER_DESC *const pdnBufferDesc, // Array of buffer desc's
const DWORD cBufferDesc, // Number of buffer desc's
CRefCountBuffer *const pRefCountBuffer, // RefCountBuffer (may be NULL)
const DWORD dwTimeOut, // Time out
const DWORD dwSendFlags, // Send flags
CAsyncOp *const pParent, // Parent of this send
CAsyncOp **const ppAsyncOp); // CAsyncOp created for this send
HRESULT DNSendGroupMessage(DIRECTNETOBJECT *const pdnObject,
CNameTableEntry *const pGroup,
const DWORD dwMsgId,
const DPN_BUFFER_DESC *const pdnBufferDesc,
const DWORD cBufferDesc,
CRefCountBuffer *const pRefCountBuffer,
const DWORD dwTimeOut,
const DWORD dwSendFlags,
const BOOL fNoLoopBack,
const BOOL fRequest,
CAsyncOp *const pParent,
CAsyncOp **const ppParent);
HRESULT DNPerformMultiSend(DIRECTNETOBJECT *const pdnObject,
const DPNHANDLE hParentOp,
CConnection *const pConnection,
const DWORD dwTimeOut);
HRESULT DNCreateSendParent(DIRECTNETOBJECT *const pdnObject,
const DWORD dwMsgId,
const DPN_BUFFER_DESC *const pdnBufferDesc,
const DWORD cBufferDesc,
const DWORD dwSendFlags,
CAsyncOp **const ppParent);
HRESULT DNPerformChildSend(DIRECTNETOBJECT *const pdnObject,
CAsyncOp *const pParent,
CConnection *const pConnection,
const DWORD dwTimeOut,
CAsyncOp **const ppChild,
const BOOL fInternal);
HRESULT DNFinishMultiOp(DIRECTNETOBJECT *const pdnObject,const DPNHANDLE hRootOp);
HRESULT DNProcessInternalOperation(DIRECTNETOBJECT *const pdnObject,
const DWORD dwMsgId,
void *const pOpBuffer,
const DWORD dwOpBufferSize,
CConnection *const pConnection,
const HANDLE hProtocol,
CRefCountBuffer *const pRefCountBuffer);
HRESULT DNPerformRequest(DIRECTNETOBJECT *const pdnObject,
const DWORD dwMsgId,
const DPN_BUFFER_DESC *const pBufferDesc,
CConnection *const pConnection,
CAsyncOp *const pParent,
CAsyncOp **const ppRequest);
HRESULT DNReceiveCompleteOnProcess(DIRECTNETOBJECT *const pdnObject,
CConnection *const pConnection,
void *const pBufferData,
const DWORD dwBufferSize,
const HANDLE hProtocol,
CRefCountBuffer *const pOrigRefCountBuffer);
HRESULT DNReceiveCompleteOnProcessReply(DIRECTNETOBJECT *const pdnObject,
void *const pBufferData,
const DWORD dwBufferSize);
HRESULT DNProcessTerminateSession(DIRECTNETOBJECT *const pdnObject,
void *const pvBuffer,
const DWORD dwBufferSize);
//**********************************************************************
// Class prototypes
//**********************************************************************
#endif // __ASYNC_H__