466 lines
13 KiB
C
466 lines
13 KiB
C
|
/*++
|
|||
|
|
|||
|
Copyright (c) 1992 Microsoft Corporation
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
atkerror.h
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
This module contains some error definitions for appletalk.
|
|||
|
|
|||
|
Author:
|
|||
|
|
|||
|
Jameel Hyder (jameelh@microsoft.com)
|
|||
|
Nikhil Kamkolkar (nikhilk@microsoft.com)
|
|||
|
|
|||
|
Revision History:
|
|||
|
19 Jun 1992 Initial Version
|
|||
|
|
|||
|
Notes: Tab stop: 4
|
|||
|
--*/
|
|||
|
|
|||
|
#ifndef _ATKERROR_
|
|||
|
#define _ATKERROR_
|
|||
|
|
|||
|
// Define the modules names for Appletalk - use the high bits.
|
|||
|
#define ATKINIT 0x00010000
|
|||
|
#define ATKDRVR 0x00020000
|
|||
|
#define ATKNDIS 0x00030000
|
|||
|
#define ATKTDI 0x00040000
|
|||
|
#define ATKACT 0x00050000
|
|||
|
#define ATKUTILS 0x00060000
|
|||
|
#define ATKTIMER 0x00070000
|
|||
|
#define ATKMEM 0x00080000
|
|||
|
#define ATKERROR 0x00090000
|
|||
|
|
|||
|
#define ROUTER 0x000A0000
|
|||
|
#define SOCKET 0x000B0000
|
|||
|
#define PORTS 0x000C0000
|
|||
|
#define NODE 0x000D0000
|
|||
|
#define AARP 0x000E0000
|
|||
|
#define AEP 0x000F0000
|
|||
|
#define DDP 0x00100000
|
|||
|
#define RTMP 0x00200000
|
|||
|
#define NBP 0x00300000
|
|||
|
#define ZIP 0x00400000
|
|||
|
#define ATP 0x00500000
|
|||
|
#define ASP 0x00600000
|
|||
|
#define PAP 0x00700000
|
|||
|
#define ADSP 0x00800000
|
|||
|
#define ATKIND 0x00900000
|
|||
|
#define ASPC 0x00A00000
|
|||
|
#define DATAX 0x00B00000
|
|||
|
#define RAS 0x00C00000
|
|||
|
#define ARAP 0x00D00000
|
|||
|
#define ARAPNDIS 0x00E00000
|
|||
|
#define ARAPUTIL 0x00F00000
|
|||
|
#define ARAPATK 0x01000000
|
|||
|
#define ARAPDBG 0x02000000
|
|||
|
#define ATKPNP 0x03000000
|
|||
|
#define PPP 0x04000000
|
|||
|
|
|||
|
|
|||
|
// DEBUGGING SUPPORT:
|
|||
|
// Debugging messages are provided per-subsystem defined here, and within
|
|||
|
// the subsystems, there are 4 levels of messages.
|
|||
|
//
|
|||
|
// The four levels of debug messages are:
|
|||
|
//
|
|||
|
// INFO: Informational messages, eg., entry exit in routines
|
|||
|
// WARN: Something went wrong, but its not an error, eg., packet was not ours
|
|||
|
// ERR: Error situations, but we can still run if a retry happens
|
|||
|
// FATAL: In this situation, the driver is not operational
|
|||
|
|
|||
|
// These give the ref/deref dbgprints if DBG is defined. LOTS of output.
|
|||
|
// Defined as a hierarchy of the stack objects.
|
|||
|
#define DBG_LEVEL_REFDDP 0x2000
|
|||
|
#define DBG_LEVEL_REFNODE 0x3000
|
|||
|
#define DBG_LEVEL_REFPORT 0x4000
|
|||
|
#define DBG_LEVEL_REFATP 0x4100
|
|||
|
#define DBG_LEVEL_REFPAPADDR 0x4200
|
|||
|
#define DBG_LEVEL_REFPAPCONN 0x4300
|
|||
|
#define DBG_LEVEL_REFASPADDR 0x4400
|
|||
|
#define DBG_LEVEL_REFASPCONN 0x4500
|
|||
|
|
|||
|
#define DBG_LEVEL_INFO 0x5000
|
|||
|
#define DBG_LEVEL_WARN 0x6000
|
|||
|
#define DBG_LEVEL_ERR 0x7000
|
|||
|
#define DBG_LEVEL_FATAL 0x8000
|
|||
|
|
|||
|
// SUBSYSTEMS
|
|||
|
#define DBG_COMP_INIT 0x00000001
|
|||
|
#define DBG_COMP_DISPATCH 0x00000002
|
|||
|
#define DBG_COMP_CREATE 0x00000004
|
|||
|
#define DBG_COMP_CLOSE 0x00000008
|
|||
|
#define DBG_COMP_ACTION 0x00000010
|
|||
|
#define DBG_COMP_ADDROBJ 0x00000020
|
|||
|
#define DBG_COMP_CONNOBJ 0x00000040
|
|||
|
#define DBG_COMP_CHANOBJ 0x00000080
|
|||
|
#define DBG_COMP_RESOURCES 0x00000100
|
|||
|
#define DBG_COMP_UNLOAD 0x00000200
|
|||
|
|
|||
|
#define DBG_COMP_NODE 0x00000400
|
|||
|
#define DBG_COMP_AARP 0x00000800
|
|||
|
|
|||
|
#define DBG_COMP_AEP 0x00001000
|
|||
|
#define DBG_COMP_DDP 0x00002000
|
|||
|
#define DBG_COMP_ATP 0x00004000
|
|||
|
#define DBG_COMP_ADSP 0x00008000
|
|||
|
#define DBG_COMP_ZIP 0x00010000
|
|||
|
#define DBG_COMP_NBP 0x00020000
|
|||
|
#define DBG_COMP_PAP 0x00040000
|
|||
|
#define DBG_COMP_ASP 0x00080000
|
|||
|
#define DBG_COMP_RTMP 0x00100000
|
|||
|
#define DBG_COMP_ROUTER 0x00200000
|
|||
|
|
|||
|
#define DBG_COMP_DUMP 0x00400000
|
|||
|
#define DBG_COMP_REFCOUNTS 0x00800000
|
|||
|
#define DBG_COMP_SYSTEM 0x01000000
|
|||
|
#define DBG_COMP_CRITSEC 0x02000000
|
|||
|
#define DBG_COMP_UTILS 0x04000000
|
|||
|
|
|||
|
#define DBG_COMP_NDISSEND 0x08000000
|
|||
|
#define DBG_COMP_NDISRECV 0x10000000
|
|||
|
#define DBG_COMP_NDISREQ 0x20000000
|
|||
|
#define DBG_COMP_TDI 0x40000000
|
|||
|
#define DBG_COMP_RAS 0x80000000
|
|||
|
|
|||
|
#define DBG_MOST (DBG_COMP_INIT | \
|
|||
|
DBG_COMP_DISPATCH | \
|
|||
|
DBG_COMP_CREATE | \
|
|||
|
DBG_COMP_CLOSE | \
|
|||
|
DBG_COMP_ACTION | \
|
|||
|
DBG_COMP_ADDROBJ | \
|
|||
|
DBG_COMP_CONNOBJ | \
|
|||
|
DBG_COMP_CHANOBJ | \
|
|||
|
DBG_COMP_RESOURCES | \
|
|||
|
DBG_COMP_UNLOAD | \
|
|||
|
DBG_COMP_NODE | \
|
|||
|
DBG_COMP_AARP | \
|
|||
|
DBG_COMP_AEP | \
|
|||
|
DBG_COMP_DDP | \
|
|||
|
DBG_COMP_ATP | \
|
|||
|
DBG_COMP_ADSP | \
|
|||
|
DBG_COMP_ZIP | \
|
|||
|
DBG_COMP_NBP | \
|
|||
|
DBG_COMP_PAP | \
|
|||
|
DBG_COMP_ASP | \
|
|||
|
DBG_COMP_RTMP | \
|
|||
|
DBG_COMP_ROUTER | \
|
|||
|
DBG_COMP_DUMP | \
|
|||
|
DBG_COMP_UTILS | \
|
|||
|
DBG_COMP_REFCOUNTS | \
|
|||
|
DBG_COMP_SYSTEM | \
|
|||
|
DBG_COMP_TDI | \
|
|||
|
DBG_COMP_RAS)
|
|||
|
|
|||
|
// past here are debug things that are really frequent; don't use them
|
|||
|
// unless you want LOTS of output
|
|||
|
|
|||
|
|
|||
|
#define DBG_ALL (DBG_MOST | DBG_COMP_CRITSEC)
|
|||
|
|
|||
|
|
|||
|
// More debugging support. These values define the dumping components.
|
|||
|
// There are a max of 32 such components that can be defined. Each of
|
|||
|
// these are associated with a dump routine. It one is specified and
|
|||
|
// enabled, periodically it is called. It is upto that component to
|
|||
|
// decide what it wants to do
|
|||
|
|
|||
|
#define DBG_DUMP_DEF_INTERVAL 300 // In 100ms units
|
|||
|
|
|||
|
#define DBG_DUMP_PORTINFO 0x00000001
|
|||
|
#define DBG_DUMP_AMT 0x00000002
|
|||
|
#define DBG_DUMP_ZONETABLE 0x00000004
|
|||
|
#define DBG_DUMP_RTES 0x00000008
|
|||
|
#define DBG_DUMP_TIMERS 0x00000010
|
|||
|
#define DBG_DUMP_ATPINFO 0x00000020
|
|||
|
#define DBG_DUMP_ASPSESSIONS 0x00000040
|
|||
|
#define DBG_DUMP_PAPJOBS 0x00000080
|
|||
|
|
|||
|
typedef LONG ATALK_ERROR, *PATALK_ERROR;
|
|||
|
|
|||
|
#define ATALK_SUCCESS(error) ((ATALK_ERROR)(error) >= 0)
|
|||
|
|
|||
|
#define ATALK_NO_ERROR 0x00000000
|
|||
|
#define ATALK_PENDING 0x00000001
|
|||
|
|
|||
|
#define ATALK_RESR_MEM -1000
|
|||
|
|
|||
|
#define ATALK_INVALID_PARAMETER -1050
|
|||
|
#define ATALK_BUFFER_TOO_SMALL -1051
|
|||
|
#define ATALK_BUFFER_TOO_BIG -1052
|
|||
|
#define ATALK_ALREADY_ASSOCIATED -1053
|
|||
|
#define ATALK_CANNOT_DISSOCIATE -1054
|
|||
|
#define ATALK_CANNOT_CANCEL -1055
|
|||
|
#define ATALK_INVALID_REQUEST -1056
|
|||
|
#define ATALK_REQUEST_NOT_ACCEPTED -1057
|
|||
|
#define ATALK_DEVICE_NOT_READY -1058
|
|||
|
#define ATALK_INVALID_CONNECTION -1059
|
|||
|
#define ATALK_INVALID_ADDRESS -1060
|
|||
|
#define ATALK_TOO_MANY_COMMANDS -1061
|
|||
|
#define ATALK_CONNECTION_TIMEOUT -1062
|
|||
|
#define ATALK_REMOTE_CLOSE -1063
|
|||
|
#define ATALK_LOCAL_CLOSE -1064
|
|||
|
#define ATALK_BUFFER_INVALID_SIZE -1065
|
|||
|
#define ATALK_REQUEST_CANCELLED -1066
|
|||
|
#define ATALK_NEW_SOCKET -1067
|
|||
|
#define ATALK_TIMEOUT -1068
|
|||
|
#define ATALK_SHARING_VIOLATION -1069
|
|||
|
#define ATALK_INVALID_PKT -1070
|
|||
|
#define ATALK_DUP_PKT -1071
|
|||
|
|
|||
|
#define ATALK_INIT_BINDFAIL -1100
|
|||
|
#define ATALK_INIT_REGPROTO_FAIL -1101
|
|||
|
#define ATALK_INIT_MEDIA_INVALID -1102
|
|||
|
|
|||
|
#define ATALK_PORT_INVALID -1200
|
|||
|
#define ATALK_PORT_CLOSING -1201
|
|||
|
|
|||
|
#define ATALK_NODE_FINDING -1300
|
|||
|
#define ATALK_NODE_NONEXISTENT -1301
|
|||
|
#define ATALK_NODE_CLOSING -1302
|
|||
|
#define ATALK_NODE_NOMORE -1303
|
|||
|
|
|||
|
#define ATALK_SOCKET_INVALID -1400
|
|||
|
#define ATALK_SOCKET_NODEFULL -1401
|
|||
|
#define ATALK_SOCKET_EXISTS -1402
|
|||
|
#define ATALK_SOCKET_CLOSED -1403
|
|||
|
|
|||
|
#define ATALK_DDP_CLOSING -1500
|
|||
|
#define ATALK_DDP_NOTFOUND -1501
|
|||
|
#define ATALK_DDP_INVALID_LEN -1502
|
|||
|
#define ATALK_DDP_SHORT_HDR -1503
|
|||
|
#define ATALK_DDP_INVALID_SRC -1504
|
|||
|
#define ATALK_DDP_INVALID_DEST -1505
|
|||
|
#define ATALK_DDP_INVALID_ADDR -1506
|
|||
|
#define ATALK_DDP_INVALID_PROTO -1507
|
|||
|
#define ATALK_DDP_INVALID_PARAM -1508
|
|||
|
#define ATALK_DDP_NO_ROUTER -1509
|
|||
|
#define ATALK_DDP_NO_AMT_ENTRY -1510
|
|||
|
#define ATALK_DDP_NO_BRC_ENTRY -1511
|
|||
|
#define ATALK_DDP_PKT_DROPPED -1512
|
|||
|
|
|||
|
#define ATALK_ATP_NOT_FOUND -1600
|
|||
|
#define ATALK_ATP_INVALID_PKT -1601
|
|||
|
#define ATALK_ATP_INVALID_REQ -1602
|
|||
|
#define ATALK_ATP_REQ_CLOSING -1603
|
|||
|
#define ATALK_ATP_RESP_CLOSING -1604
|
|||
|
#define ATALK_ATP_INVALID_RETRYCNT -1605
|
|||
|
#define ATALK_ATP_INVALID_TIMERVAL -1606
|
|||
|
#define ATALK_ATP_INVALID_RELINT -1607
|
|||
|
#define ATALK_ATP_CLOSING -1608
|
|||
|
#define ATALK_ATP_RESP_TOOMANY -1609
|
|||
|
#define ATALK_ATP_NO_MATCH_REQ -1610
|
|||
|
#define ATALK_ATP_NO_GET_REQ -1611
|
|||
|
#define ATALK_ATP_RESP_TIMEOUT -1612
|
|||
|
#define ATALK_ATP_RESP_CANCELLED -1613
|
|||
|
#define ATALK_ATP_REQ_CANCELLED -1614
|
|||
|
#define ATALK_ATP_GET_REQ_CANCELLED -1615
|
|||
|
#define ATALK_ATP_NO_VALID_RESP -1616
|
|||
|
#define ATALK_ATP_REQ_TIMEOUT -1617
|
|||
|
|
|||
|
#define ATALK_ASP_INVALID_REQUEST -1700
|
|||
|
|
|||
|
#define ATALK_PAP_LOCAL_CLOSE -1800
|
|||
|
#define ATALK_PAP_REMOTE_CLOSE -1801
|
|||
|
#define ATALK_PAP_INVALID_REQUEST -1802
|
|||
|
#define ATALK_PAP_TOO_MANY_READS -1803
|
|||
|
#define ATALK_PAP_TOO_MANY_WRITES -1804
|
|||
|
#define ATALK_PAP_CONN_NOT_ACTIVE -1805
|
|||
|
#define ATALK_PAP_ADDR_CLOSING -1806
|
|||
|
#define ATALK_PAP_CONN_CLOSING -1807
|
|||
|
#define ATALK_PAP_CONN_NOT_FOUND -1808
|
|||
|
#define ATALK_PAP_INVALID_USERBYTES -1809
|
|||
|
#define ATALK_PAP_SERVER_BUSY -1810
|
|||
|
#define ATALK_PAP_INVALID_STATUS -1811
|
|||
|
#define ATALK_PAP_PARTIAL_RECEIVE -1812
|
|||
|
#define ATALK_PAP_CONN_RESET -1813
|
|||
|
|
|||
|
#define ATALK_ADSP_INVALID_REQUEST -1900
|
|||
|
#define ATALK_ADSP_CONN_NOT_ACTIVE -1903
|
|||
|
#define ATALK_ADSP_ADDR_CLOSING -1904
|
|||
|
#define ATALK_ADSP_CONN_CLOSING -1905
|
|||
|
#define ATALK_ADSP_CONN_NOT_FOUND -1906
|
|||
|
#define ATALK_ADSP_CONN_RESET -1907
|
|||
|
#define ATALK_ADSP_SERVER_BUSY -1908
|
|||
|
|
|||
|
#define ATALK_ADSP_PARTIAL_RECEIVE -1912
|
|||
|
#define ATALK_ADSP_EXPED_RECEIVE -1913
|
|||
|
#define ATALK_ADSP_PAREXPED_RECEIVE -1914
|
|||
|
#define ATALK_ADSP_REMOTE_RESR -1915
|
|||
|
|
|||
|
#define ATALK_TIMER_CANCEL_FAIL -2000
|
|||
|
#define ATALK_TIMER_SCHEDULE_FAIL -2001
|
|||
|
|
|||
|
#define ATALK_ASPC_LOCAL_CLOSE -2100
|
|||
|
#define ATALK_ASPC_REMOTE_CLOSE -2101
|
|||
|
#define ATALK_ASPC_INVALID_REQUEST -2102
|
|||
|
#define ATALK_ASPC_TOO_MANY_READS -2103
|
|||
|
#define ATALK_ASPC_TOO_MANY_WRITES -2104
|
|||
|
#define ATALK_ASPC_CONN_NOT_ACTIVE -2105
|
|||
|
#define ATALK_ASPC_ADDR_CLOSING -2106
|
|||
|
#define ATALK_ASPC_CONN_CLOSING -2107
|
|||
|
#define ATALK_ASPC_CONN_NOT_FOUND -2108
|
|||
|
#define ATALK_ASPC_INVALID_USERBYTES -2109
|
|||
|
#define ATALK_ASPC_SERVER_BUSY -2110
|
|||
|
#define ATALK_ASPC_INVALID_STATUS -2111
|
|||
|
#define ATALK_ASPC_PARTIAL_RECEIVE -2112
|
|||
|
#define ATALK_ASPC_CONN_RESET -2113
|
|||
|
|
|||
|
#define ATALK_FAILURE -5000
|
|||
|
|
|||
|
// This defines the number of times an error has to happen consecutively before
|
|||
|
// it gets logged again.
|
|||
|
#define ERROR_CONSEQ_FREQ 200
|
|||
|
#define ERROR_CONSEQ_TIME 18000 // 30 minutes in 100ns intervals
|
|||
|
|
|||
|
|
|||
|
#if DBG
|
|||
|
extern ULONG AtalkDebugDump;
|
|||
|
extern LONG AtalkDumpInterval;
|
|||
|
extern ULONG AtalkDebugLevel;
|
|||
|
extern ULONG AtalkDebugSystems;
|
|||
|
extern TIMERLIST AtalkDumpTimerList;
|
|||
|
typedef VOID (*DUMP_ROUTINE)(VOID);
|
|||
|
|
|||
|
extern
|
|||
|
LONG FASTCALL
|
|||
|
AtalkDumpComponents(
|
|||
|
IN PTIMERLIST Context,
|
|||
|
IN BOOLEAN TimerShuttingDown
|
|||
|
);
|
|||
|
|
|||
|
extern
|
|||
|
VOID
|
|||
|
AtalkAmtDumpTable(
|
|||
|
VOID
|
|||
|
);
|
|||
|
|
|||
|
extern
|
|||
|
VOID
|
|||
|
AtalkPortDumpInfo(
|
|||
|
VOID
|
|||
|
);
|
|||
|
|
|||
|
extern
|
|||
|
VOID
|
|||
|
AtalkRtmpDumpTable(
|
|||
|
VOID
|
|||
|
);
|
|||
|
|
|||
|
extern
|
|||
|
VOID
|
|||
|
AtalkTimerDumpList(
|
|||
|
VOID
|
|||
|
);
|
|||
|
|
|||
|
extern
|
|||
|
VOID
|
|||
|
AtalkZoneDumpTable(
|
|||
|
VOID
|
|||
|
);
|
|||
|
|
|||
|
extern
|
|||
|
VOID
|
|||
|
AtalkAspDumpSessions(
|
|||
|
VOID
|
|||
|
);
|
|||
|
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
#define LOG_ERROR(AtalkError, NtStatus, RawData, RawDataLen) \
|
|||
|
LOG_ERRORONPORT(NULL, AtalkError, NtStatus, RawData, RawDataLen)
|
|||
|
|
|||
|
#define RES_LOG_ERROR() \
|
|||
|
LOG_ERROR(EVENT_ATALK_RESOURCES, STATUS_INSUFFICIENT_RESOURCES, NULL, 0)
|
|||
|
|
|||
|
#define LOG_ERRORONPORT(Port, AtalkError, NtStatus, RawData, RawDataLen) \
|
|||
|
{ \
|
|||
|
if (!NT_SUCCESS(NtStatus)) \
|
|||
|
{ \
|
|||
|
DBGPRINT(DBG_ALL, DBG_LEVEL_ERR, \
|
|||
|
("LOG_ERROR: File %s Line %ld Event %lx Error %lx\n", \
|
|||
|
__FILE__, __LINE__, AtalkError, NtStatus)); \
|
|||
|
} \
|
|||
|
AtalkWriteErrorLogEntry(Port, \
|
|||
|
AtalkError, \
|
|||
|
(__LINE__ | FILENUM), \
|
|||
|
NtStatus, \
|
|||
|
RawData, \
|
|||
|
RawDataLen); \
|
|||
|
}
|
|||
|
|
|||
|
#if DBG
|
|||
|
// ERROR and above ignore the Component part
|
|||
|
#define DBGPRINT(Component, Level, Fmt) \
|
|||
|
{ \
|
|||
|
if ((Level >= AtalkDebugLevel) && \
|
|||
|
((AtalkDebugSystems & Component) == Component)) \
|
|||
|
{ \
|
|||
|
DbgPrint("***ATALK*** "); \
|
|||
|
DbgPrint Fmt; \
|
|||
|
} \
|
|||
|
}
|
|||
|
|
|||
|
#define DBGPRINTSKIPHDR(Component, Level, Fmt) \
|
|||
|
{ \
|
|||
|
if ((Level >= AtalkDebugLevel) && \
|
|||
|
((AtalkDebugSystems & Component) == Component)) \
|
|||
|
{ \
|
|||
|
DbgPrint Fmt; \
|
|||
|
} \
|
|||
|
}
|
|||
|
|
|||
|
#define DBGBRK(Level) \
|
|||
|
{ \
|
|||
|
if (Level >= AtalkDebugLevel) \
|
|||
|
DbgBreakPoint(); \
|
|||
|
}
|
|||
|
|
|||
|
#define TMPLOGERR() DBGPRINT(DBG_MOST, DBG_LEVEL_ERR, \
|
|||
|
("TempErrLog: %s, Line %ld\n", \
|
|||
|
__FILE__, __LINE__));
|
|||
|
|
|||
|
#else
|
|||
|
#define DBGPRINTSKIPHDR(Component, Level, Fmt)
|
|||
|
#define DBGPRINT(Component, Level, Fmt)
|
|||
|
#define DBGBRK(Level)
|
|||
|
#define TMPLOGERR()
|
|||
|
#endif
|
|||
|
|
|||
|
extern
|
|||
|
VOID
|
|||
|
AtalkWriteErrorLogEntry(
|
|||
|
IN struct _PORT_DESCRIPTOR * pPortDesc,
|
|||
|
IN NTSTATUS UniqueErrorCode,
|
|||
|
IN ULONG UniqueErrorValue,
|
|||
|
IN NTSTATUS NtStatusCode,
|
|||
|
IN PVOID RawDataBuf OPTIONAL,
|
|||
|
IN LONG RawDataLen);
|
|||
|
|
|||
|
extern
|
|||
|
VOID
|
|||
|
AtalkLogBadPacket(
|
|||
|
IN struct _PORT_DESCRIPTOR * pPortDesc,
|
|||
|
IN PATALK_ADDR pSrcAddr,
|
|||
|
IN PATALK_ADDR pDstAddr OPTIONAL,
|
|||
|
IN PBYTE pPkt,
|
|||
|
IN USHORT PktLen);
|
|||
|
|
|||
|
extern
|
|||
|
ATALK_ERROR FASTCALL
|
|||
|
AtalkNdisToAtalkError(
|
|||
|
IN NDIS_STATUS Error);
|
|||
|
|
|||
|
extern
|
|||
|
NTSTATUS FASTCALL
|
|||
|
AtalkErrorToNtStatus(
|
|||
|
IN ATALK_ERROR AtalkError);
|
|||
|
|
|||
|
#endif // _ATKERROR_
|
|||
|
|
|||
|
|