294 lines
9 KiB
C
294 lines
9 KiB
C
/*
|
||
|
||
Copyright (c) 1992 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
atalkio.h
|
||
|
||
Abstract:
|
||
|
||
This module contains interface specification to the appletalk stack.
|
||
|
||
Author:
|
||
|
||
Jameel Hyder (microsoft!jameelh)
|
||
|
||
|
||
Revision History:
|
||
19 Jun 1992 Initial Version
|
||
|
||
Notes: Tab stop: 4
|
||
--*/
|
||
|
||
#ifndef _ATALKIO_
|
||
#define _ATALKIO_
|
||
|
||
extern BOOLEAN AfpServerBoundToAsp;
|
||
extern BOOLEAN AfpServerBoundToTcp;
|
||
|
||
extern HANDLE AfpTdiNotificationHandle;
|
||
|
||
extern
|
||
VOID
|
||
AfpTdiPnpHandler(
|
||
IN TDI_PNP_OPCODE PnPOpcode,
|
||
IN PUNICODE_STRING pBindDeviceName,
|
||
IN PWSTR BindingList
|
||
);
|
||
|
||
extern
|
||
VOID FASTCALL
|
||
AfpPnPReconfigDisable(
|
||
IN PVOID Context
|
||
);
|
||
|
||
extern
|
||
VOID FASTCALL
|
||
AfpPnPReconfigEnable(
|
||
IN PVOID Context
|
||
);
|
||
|
||
|
||
extern
|
||
NTSTATUS
|
||
AfpTdiRegister(
|
||
IN VOID
|
||
);
|
||
|
||
extern
|
||
VOID
|
||
AfpTdiBindCallback(
|
||
IN PUNICODE_STRING pBindDeviceName
|
||
);
|
||
|
||
extern
|
||
VOID
|
||
AfpTdiUnbindCallback(
|
||
IN PUNICODE_STRING pBindDeviceName
|
||
);
|
||
|
||
extern
|
||
NTSTATUS
|
||
AfpSpOpenAddress(
|
||
VOID
|
||
);
|
||
|
||
|
||
extern
|
||
VOID
|
||
AfpSpCloseAddress(
|
||
VOID
|
||
);
|
||
|
||
|
||
extern
|
||
NTSTATUS FASTCALL
|
||
AfpSpCloseSession(
|
||
IN PSDA pSda
|
||
);
|
||
|
||
|
||
extern
|
||
AFPSTATUS
|
||
AfpSpRegisterName(
|
||
IN PANSI_STRING ServerName,
|
||
IN BOOLEAN Register
|
||
);
|
||
|
||
|
||
extern
|
||
VOID FASTCALL
|
||
AfpSpReplyClient(
|
||
IN PREQUEST pRequest,
|
||
IN LONG ReplyCode,
|
||
IN PASP_XPORT_ENTRIES XportTable
|
||
);
|
||
|
||
|
||
extern
|
||
VOID FASTCALL
|
||
AfpSpSendAttention(
|
||
IN PSDA pSda,
|
||
IN USHORT AttnCode,
|
||
IN BOOLEAN Synchronous
|
||
);
|
||
|
||
extern
|
||
VOID
|
||
AfpFreeReplyBuf(
|
||
IN PSDA pSda,
|
||
IN BOOLEAN fLockHeld
|
||
);
|
||
|
||
|
||
#define DSI_BACKFILL_OFFSET(pSda) \
|
||
((pSda->sda_Flags & SDA_SESSION_OVER_TCP)? DSI_HEADER_SIZE : 0)
|
||
|
||
//
|
||
// when we go over TCP/IP, we want to allocate 16 more bytes for the
|
||
// DSI header for better performance.
|
||
//
|
||
#define AfpIOAllocBackFillBuffer(pSda) \
|
||
{ \
|
||
DWORD _ReplySize = pSda->sda_ReplySize; \
|
||
DWORD _Offset = 0; \
|
||
PBYTE _pReplyBufStart; \
|
||
\
|
||
if (pSda->sda_Flags & SDA_SESSION_OVER_TCP) \
|
||
{ \
|
||
_ReplySize += DSI_HEADER_SIZE; \
|
||
_Offset = DSI_HEADER_SIZE; \
|
||
} \
|
||
\
|
||
_pReplyBufStart = AfpIOAllocBuffer(_ReplySize); \
|
||
\
|
||
if (_pReplyBufStart != NULL) \
|
||
{ \
|
||
pSda->sda_IOBuf = _pReplyBufStart+_Offset; \
|
||
} \
|
||
else \
|
||
{ \
|
||
pSda->sda_IOBuf = NULL; \
|
||
} \
|
||
}
|
||
|
||
|
||
#define AfpPutGuardSignature(pSda) \
|
||
{ \
|
||
PBYTE _pReplyBufStart = pSda->sda_IOBuf; \
|
||
if (pSda->sda_Flags & SDA_SESSION_OVER_TCP) \
|
||
{ \
|
||
_pReplyBufStart -= DSI_HEADER_SIZE; \
|
||
} \
|
||
*(DWORD *)_pReplyBufStart = 0x081294; \
|
||
}
|
||
|
||
#define AfpIOFreeBackFillBuffer(pSda) \
|
||
{ \
|
||
DWORD _Offset = 0; \
|
||
PBYTE _pReplyBufStart = pSda->sda_IOBuf; \
|
||
\
|
||
if (pSda->sda_IOBuf != NULL) \
|
||
{ \
|
||
if (pSda->sda_Flags & SDA_SESSION_OVER_TCP) \
|
||
{ \
|
||
_pReplyBufStart -= DSI_HEADER_SIZE; \
|
||
} \
|
||
\
|
||
AfpIOFreeBuffer(_pReplyBufStart); \
|
||
\
|
||
(pSda)->sda_IOBuf = NULL; \
|
||
(pSda)->sda_IOSize = 0; \
|
||
} \
|
||
}
|
||
|
||
|
||
#define AfpFreeIOBuffer(pSda) \
|
||
if ((pSda)->sda_IOBuf != NULL) \
|
||
{ \
|
||
AfpIOFreeBuffer((pSda)->sda_IOBuf); \
|
||
(pSda)->sda_IOBuf = NULL; \
|
||
(pSda)->sda_IOSize = 0; \
|
||
}
|
||
|
||
// set the status on ASP
|
||
#define AfpSpSetAspStatus(pStatusBuf, Size) \
|
||
(*(AfpAspEntries.asp_SetStatus))(AfpAspEntries.asp_AspCtxt, \
|
||
pStatusBuf, \
|
||
(USHORT)(Size));
|
||
|
||
// set the status on DSI
|
||
#define AfpSpSetDsiStatus(pStatusBuf, Size) \
|
||
(*(AfpDsiEntries.asp_SetStatus))(AfpDsiEntries.asp_AspCtxt, \
|
||
pStatusBuf, \
|
||
(USHORT)(Size));
|
||
|
||
// set the Disable Listen on ASP only
|
||
#define AfpSpDisableListensOnAsp() \
|
||
{ \
|
||
if (AfpServerBoundToAsp) \
|
||
{ \
|
||
(*(AfpAspEntries.asp_ListenControl))(AfpAspEntries.asp_AspCtxt, False); \
|
||
} \
|
||
}
|
||
|
||
// set the Disable Listen on ASP as well as DSI interfaces!
|
||
#define AfpSpDisableListens() \
|
||
{ \
|
||
if (AfpServerBoundToAsp) \
|
||
{ \
|
||
(*(AfpAspEntries.asp_ListenControl))(AfpAspEntries.asp_AspCtxt, False); \
|
||
} \
|
||
if (AfpServerBoundToTcp) \
|
||
{ \
|
||
(*(AfpDsiEntries.asp_ListenControl))(AfpDsiEntries.asp_AspCtxt, False); \
|
||
} \
|
||
}
|
||
|
||
// set the Enable Listen on ASP as well as DSI interfaces!
|
||
#define AfpSpEnableListens() \
|
||
{ \
|
||
if (AfpServerBoundToAsp) \
|
||
{ \
|
||
(*(AfpAspEntries.asp_ListenControl))(AfpAspEntries.asp_AspCtxt, True); \
|
||
} \
|
||
if (AfpServerBoundToTcp) \
|
||
{ \
|
||
(*(AfpDsiEntries.asp_ListenControl))(AfpDsiEntries.asp_AspCtxt, True); \
|
||
} \
|
||
}
|
||
|
||
|
||
GLOBAL ASP_XPORT_ENTRIES AfpAspEntries EQU { 0 };
|
||
GLOBAL ASP_XPORT_ENTRIES AfpDsiEntries EQU { 0 };
|
||
|
||
#define AFP_MAX_REQ_BUF 578
|
||
|
||
#define afpInitializeActionHdr(p, Code) \
|
||
(p)->ActionHeader.TransportId = MATK; \
|
||
(p)->ActionHeader.ActionCode = (Code)
|
||
|
||
// This is the device handle to the stack.
|
||
extern BOOLEAN afpSpNameRegistered;
|
||
extern HANDLE afpSpAddressHandle;
|
||
extern PDEVICE_OBJECT afpSpAppleTalkDeviceObject;
|
||
extern PFILE_OBJECT afpSpAddressObject;
|
||
extern LONG afpSpNumOutstandingReplies;
|
||
|
||
LOCAL NTSTATUS FASTCALL
|
||
afpSpHandleRequest(
|
||
IN NTSTATUS Status,
|
||
IN PSDA pSda,
|
||
IN PREQUEST pRequest
|
||
);
|
||
|
||
LOCAL VOID FASTCALL
|
||
afpSpReplyComplete(
|
||
IN NTSTATUS Status,
|
||
IN PSDA pSda,
|
||
IN PREQUEST pRequest
|
||
);
|
||
|
||
LOCAL VOID FASTCALL
|
||
afpSpCloseComplete(
|
||
IN NTSTATUS Status,
|
||
IN PSDA pSda
|
||
);
|
||
|
||
LOCAL NTSTATUS
|
||
afpSpGenericComplete(
|
||
IN PDEVICE_OBJECT pDeviceObject,
|
||
IN PIRP pIrp,
|
||
IN PKEVENT pCmplEvent
|
||
);
|
||
|
||
LOCAL VOID FASTCALL
|
||
afpSpAttentionComplete(
|
||
IN PVOID pContext
|
||
);
|
||
|
||
#endif // _ATALKIO_
|
||
|
||
|
||
|