560 lines
18 KiB
C
560 lines
18 KiB
C
/*
|
|
* Copyright (c) 1993,1994
|
|
* Texas A&M University. All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
* 3. All advertising materials mentioning features or use of this software
|
|
* must display the following acknowledgement:
|
|
* This product includes software developed by Texas A&M University
|
|
* and its contributors.
|
|
* 4. Neither the name of the University nor the names of its contributors
|
|
* may be used to endorse or promote products derived from this software
|
|
* without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY AND CONTRIBUTORS ``AS IS'' AND
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OR CONTRIBUTORS BE LIABLE
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
* SUCH DAMAGE.
|
|
*
|
|
* Developers:
|
|
* David K. Hess, Douglas Lee Schales, David R. Safford
|
|
*
|
|
* Heavily modified for Metaware HighC + GNU C 2.8+
|
|
* Gisle Vanem 1998
|
|
*/
|
|
|
|
#ifndef __PCAP_NDIS_H
|
|
#define __PCAP_NDIS_H
|
|
|
|
#if defined (__HIGHC__)
|
|
#define pascal _CC(_CALLEE_POPS_STACK & ~_REVERSE_PARMS) /* calling convention */
|
|
#define CALLBACK(foo) pascal WORD foo
|
|
#define PAS_PTR(x,arg) typedef FAR WORD pascal (*x) arg
|
|
#define GUARD() _inline (0x9C,0xFA) /* pushfd, cli */
|
|
#define UNGUARD() _inline (0x9D) /* popfd */
|
|
#define FAR _far
|
|
|
|
#elif defined(__GNUC__)
|
|
#define CALLBACK(foo) WORD foo __attribute__((stdcall))
|
|
#define PAS_PTR(x,arg) typedef WORD (*x) arg __attribute__((stdcall))
|
|
#define GUARD() __asm__ __volatile__ ("pushfd; cli")
|
|
#define UNGUARD() __asm__ __volatile__ ("popfd")
|
|
#define FAR
|
|
|
|
#elif defined (__TURBOC__)
|
|
#define CALLBACK(foo) WORD pascal foo
|
|
#define PAS_PTR(x,arg) typedef WORD pascal (_far *x) arg
|
|
#define GUARD() _asm { pushf; cli }
|
|
#define UNGUARD() _asm { popf }
|
|
#define FAR _far
|
|
|
|
#elif defined (__WATCOMC__)
|
|
#define CALLBACK(foo) WORD pascal foo
|
|
#define PAS_PTR(x,arg) typedef WORD pascal (_far *x) arg
|
|
#define GUARD() _disable()
|
|
#define UNGUARD() _enable()
|
|
#define FAR _far
|
|
|
|
#else
|
|
#error Unsupported compiler
|
|
#endif
|
|
|
|
|
|
/*
|
|
* Forwards
|
|
*/
|
|
struct _ReqBlock;
|
|
struct _TxBufDescr;
|
|
struct _TDBufDescr;
|
|
|
|
/*
|
|
* Protocol Manager API
|
|
*/
|
|
PAS_PTR (ProtMan, (struct _ReqBlock FAR*, WORD));
|
|
|
|
/*
|
|
* System request
|
|
*/
|
|
PAS_PTR (SystemRequest, (DWORD, DWORD, WORD, WORD, WORD));
|
|
|
|
/*
|
|
* MAC API
|
|
*/
|
|
PAS_PTR (TransmitChain, (WORD, WORD, struct _TxBufDescr FAR*, WORD));
|
|
PAS_PTR (TransferData, (WORD*,WORD, struct _TDBufDescr FAR*, WORD));
|
|
PAS_PTR (Request, (WORD, WORD, WORD, DWORD, WORD, WORD));
|
|
PAS_PTR (ReceiveRelease,(WORD, WORD));
|
|
PAS_PTR (IndicationOn, (WORD));
|
|
PAS_PTR (IndicationOff, (WORD));
|
|
|
|
|
|
typedef enum {
|
|
HARDWARE_NOT_INSTALLED = 0,
|
|
HARDWARE_FAILED_DIAG = 1,
|
|
HARDWARE_FAILED_CONFIG = 2,
|
|
HARDWARE_HARD_FAULT = 3,
|
|
HARDWARE_SOFT_FAULT = 4,
|
|
HARDWARE_OK = 7,
|
|
HARDWARE_MASK = 0x0007,
|
|
MAC_BOUND = 0x0008,
|
|
MAC_OPEN = 0x0010,
|
|
DIAG_IN_PROGRESS = 0x0020
|
|
} NdisMacStatus;
|
|
|
|
typedef enum {
|
|
STATUS_RING_STATUS = 1,
|
|
STATUS_ADAPTER_CHECK = 2,
|
|
STATUS_START_RESET = 3,
|
|
STATUS_INTERRUPT = 4,
|
|
STATUS_END_RESET = 5
|
|
} NdisStatus;
|
|
|
|
typedef enum {
|
|
FILTER_DIRECTED = 1,
|
|
FILTER_BROADCAST = 2,
|
|
FILTER_PROMISCUOUS = 4,
|
|
FILTER_SOURCE_ROUTE = 8
|
|
} NdisPacketFilter;
|
|
|
|
typedef enum {
|
|
REQ_INITIATE_DIAGNOSTICS = 1,
|
|
REQ_READ_ERROR_LOG = 2,
|
|
REQ_SET_STATION_ADDRESS = 3,
|
|
REQ_OPEN_ADAPTER = 4,
|
|
REQ_CLOSE_ADAPTER = 5,
|
|
REQ_RESET_MAC = 6,
|
|
REQ_SET_PACKET_FILTER = 7,
|
|
REQ_ADD_MULTICAST_ADDRESS = 8,
|
|
REQ_DELETE_MULTICAST_ADDRESS = 9,
|
|
REQ_UPDATE_STATISTICS = 10,
|
|
REQ_CLEAR_STATISTICS = 11,
|
|
REQ_INTERRUPT_REQUEST = 12,
|
|
REQ_SET_FUNCTIONAL_ADDRESS = 13,
|
|
REQ_SET_LOOKAHEAD = 14
|
|
} NdisGeneralRequest;
|
|
|
|
typedef enum {
|
|
SF_BROADCAST = 0x00000001L,
|
|
SF_MULTICAST = 0x00000002L,
|
|
SF_FUNCTIONAL = 0x00000004L,
|
|
SF_PROMISCUOUS = 0x00000008L,
|
|
SF_SOFT_ADDRESS = 0x00000010L,
|
|
SF_STATS_CURRENT = 0x00000020L,
|
|
SF_INITIATE_DIAGS = 0x00000040L,
|
|
SF_LOOPBACK = 0x00000080L,
|
|
SF_RECEIVE_CHAIN = 0x00000100L,
|
|
SF_SOURCE_ROUTING = 0x00000200L,
|
|
SF_RESET_MAC = 0x00000400L,
|
|
SF_OPEN_CLOSE = 0x00000800L,
|
|
SF_INTERRUPT_REQUEST = 0x00001000L,
|
|
SF_SOURCE_ROUTING_BRIDGE = 0x00002000L,
|
|
SF_VIRTUAL_ADDRESSES = 0x00004000L
|
|
} NdisMacServiceFlags;
|
|
|
|
typedef enum {
|
|
REQ_INITIATE_BIND = 1,
|
|
REQ_BIND = 2,
|
|
REQ_INITIATE_PREBIND = 3,
|
|
REQ_INITIATE_UNBIND = 4,
|
|
REQ_UNBIND = 5
|
|
} NdisSysRequest;
|
|
|
|
typedef enum {
|
|
PM_GET_PROTOCOL_MANAGER_INFO = 1,
|
|
PM_REGISTER_MODULE = 2,
|
|
PM_BIND_AND_START = 3,
|
|
PM_GET_PROTOCOL_MANAGER_LINKAGE = 4,
|
|
PM_GET_PROTOCOL_INI_PATH = 5,
|
|
PM_REGISTER_PROTOCOL_MANAGER_INFO = 6,
|
|
PM_INIT_AND_REGISTER = 7,
|
|
PM_UNBIND_AND_STOP = 8,
|
|
PM_BIND_STATUS = 9,
|
|
PM_REGISTER_STATUS = 10
|
|
} NdisProtManager;
|
|
|
|
|
|
typedef enum {
|
|
ERR_SUCCESS = 0x00,
|
|
ERR_WAIT_FOR_RELEASE = 0x01,
|
|
ERR_REQUEST_QUEUED = 0x02,
|
|
ERR_FRAME_NOT_RECOGNIZED = 0x03,
|
|
ERR_FRAME_REJECTED = 0x04,
|
|
ERR_FORWARD_FRAME = 0x05,
|
|
ERR_OUT_OF_RESOURCE = 0x06,
|
|
ERR_INVALID_PARAMETER = 0x07,
|
|
ERR_INVALID_FUNCTION = 0x08,
|
|
ERR_NOT_SUPPORTED = 0x09,
|
|
ERR_HARDWARE_ERROR = 0x0A,
|
|
ERR_TRANSMIT_ERROR = 0x0B,
|
|
ERR_NO_SUCH_DESTINATION = 0x0C,
|
|
ERR_BUFFER_TOO_SMALL = 0x0D,
|
|
ERR_ALREADY_STARTED = 0x20,
|
|
ERR_INCOMPLETE_BINDING = 0x21,
|
|
ERR_DRIVER_NOT_INITIALIZED = 0x22,
|
|
ERR_HARDWARE_NOT_FOUND = 0x23,
|
|
ERR_HARDWARE_FAILURE = 0x24,
|
|
ERR_CONFIGURATION_FAILURE = 0x25,
|
|
ERR_INTERRUPT_CONFLICT = 0x26,
|
|
ERR_INCOMPATIBLE_MAC = 0x27,
|
|
ERR_INITIALIZATION_FAILED = 0x28,
|
|
ERR_NO_BINDING = 0x29,
|
|
ERR_NETWORK_MAY_NOT_BE_CONNECTED = 0x2A,
|
|
ERR_INCOMPATIBLE_OS_VERSION = 0x2B,
|
|
ERR_ALREADY_REGISTERED = 0x2C,
|
|
ERR_PATH_NOT_FOUND = 0x2D,
|
|
ERR_INSUFFICIENT_MEMORY = 0x2E,
|
|
ERR_INFO_NOT_FOUND = 0x2F,
|
|
ERR_GENERAL_FAILURE = 0xFF
|
|
} NdisError;
|
|
|
|
#define NDIS_PARAM_INTEGER 0
|
|
#define NDIS_PARAM_STRING 1
|
|
|
|
#define NDIS_TX_BUF_LENGTH 8
|
|
#define NDIS_TD_BUF_LENGTH 1
|
|
#define NDIS_RX_BUF_LENGTH 8
|
|
|
|
#define NDIS_PTR_PHYSICAL 0
|
|
#define NDIS_PTR_VIRTUAL 2
|
|
|
|
#define NDIS_PATH "PROTMAN$"
|
|
|
|
|
|
typedef struct _CommonChars {
|
|
WORD tableSize;
|
|
BYTE majorNdisVersion; /* 2 - Latest version */
|
|
BYTE minorNdisVersion; /* 0 */
|
|
WORD reserved1;
|
|
BYTE majorModuleVersion;
|
|
BYTE minorModuleVersion;
|
|
DWORD moduleFlags;
|
|
/* 0 - Binding at upper boundary supported
|
|
* 1 - Binding at lower boundary supported
|
|
* 2 - Dynamically bound.
|
|
* 3-31 - Reserved, must be zero.
|
|
*/
|
|
BYTE moduleName[16];
|
|
BYTE protocolLevelUpper;
|
|
/* 1 - MAC
|
|
* 2 - Data Link
|
|
* 3 - Network
|
|
* 4 - Transport
|
|
* 5 - Session
|
|
* -1 - Not specified
|
|
*/
|
|
BYTE interfaceUpper;
|
|
BYTE protocolLevelLower;
|
|
/* 0 - Physical
|
|
* 1 - MAC
|
|
* 2 - Data Link
|
|
* 3 - Network
|
|
* 4 - Transport
|
|
* 5 - Session
|
|
* -1 - Not specified
|
|
*/
|
|
BYTE interfaceLower;
|
|
WORD moduleId;
|
|
WORD moduleDS;
|
|
SystemRequest systemRequest;
|
|
BYTE *serviceChars;
|
|
BYTE *serviceStatus;
|
|
BYTE *upperDispatchTable;
|
|
BYTE *lowerDispatchTable;
|
|
BYTE *reserved2; /* Must be NULL */
|
|
BYTE *reserved3; /* Must be NULL */
|
|
} CommonChars;
|
|
|
|
|
|
typedef struct _MulticastList {
|
|
WORD maxMulticastAddresses;
|
|
WORD numberMulticastAddresses;
|
|
BYTE multicastAddress[16][16];
|
|
} MulticastList;
|
|
|
|
|
|
typedef struct _MacChars {
|
|
WORD tableSize;
|
|
BYTE macName[16];
|
|
WORD addressLength;
|
|
BYTE permanentAddress[16];
|
|
BYTE currentAddress[16];
|
|
DWORD currentFunctionalAddress;
|
|
MulticastList *multicastList;
|
|
DWORD linkSpeed;
|
|
DWORD serviceFlags;
|
|
WORD maxFrameSize;
|
|
DWORD txBufferSize;
|
|
WORD txBufferAllocSize;
|
|
DWORD rxBufferSize;
|
|
WORD rxBufferAllocSize;
|
|
BYTE ieeeVendor[3];
|
|
BYTE vendorAdapter;
|
|
BYTE *vendorAdapterDescription;
|
|
WORD interruptLevel;
|
|
WORD txQueueDepth;
|
|
WORD maxDataBlocks;
|
|
} MacChars;
|
|
|
|
|
|
typedef struct _ProtocolChars {
|
|
WORD length;
|
|
BYTE name[16];
|
|
WORD type;
|
|
} ProtocolChars;
|
|
|
|
|
|
typedef struct _MacUpperDispatch {
|
|
CommonChars *backPointer;
|
|
Request request;
|
|
TransmitChain transmitChain;
|
|
TransferData transferData;
|
|
ReceiveRelease receiveRelease;
|
|
IndicationOn indicationOn;
|
|
IndicationOff indicationOff;
|
|
} MacUpperDispatch;
|
|
|
|
|
|
typedef struct _MacStatusTable {
|
|
WORD tableSize;
|
|
DWORD lastDiag;
|
|
DWORD macStatus;
|
|
WORD packetFilter;
|
|
BYTE *mediaSpecificStats;
|
|
DWORD lastClear;
|
|
DWORD totalFramesRx;
|
|
DWORD totalFramesCrc;
|
|
DWORD totalBytesRx;
|
|
DWORD totalDiscardBufSpaceRx;
|
|
DWORD totalMulticastRx;
|
|
DWORD totalBroadcastRx;
|
|
DWORD obsolete1[5];
|
|
DWORD totalDiscardHwErrorRx;
|
|
DWORD totalFramesTx;
|
|
DWORD totalBytesTx;
|
|
DWORD totalMulticastTx;
|
|
DWORD totalBroadcastTx;
|
|
DWORD obsolete2[2];
|
|
DWORD totalDiscardTimeoutTx;
|
|
DWORD totalDiscardHwErrorTx;
|
|
} MacStatusTable;
|
|
|
|
|
|
typedef struct _ProtDispatch {
|
|
CommonChars *backPointer;
|
|
DWORD flags;
|
|
/* 0 - handles non-LLC frames
|
|
* 1 - handles specific-LSAP LLC frames
|
|
* 2 - handles specific-LSAP LLC frames
|
|
* 3-31 - reserved must be 0
|
|
*/
|
|
void (*requestConfirm) (void);
|
|
void (*transmitConfirm) (void);
|
|
void (*receiveLookahead) (void);
|
|
void (*indicationComplete) (void);
|
|
void (*receiveChain) (void);
|
|
void (*status) (void);
|
|
} ProtDispatch;
|
|
|
|
|
|
typedef struct _ReqBlock {
|
|
WORD opcode;
|
|
WORD status;
|
|
BYTE FAR *pointer1;
|
|
BYTE FAR *pointer2;
|
|
WORD word1;
|
|
} ReqBlock;
|
|
|
|
|
|
typedef struct _TxBufDescrRec {
|
|
BYTE txPtrType;
|
|
BYTE dummy;
|
|
WORD txDataLen;
|
|
BYTE *txDataPtr;
|
|
} TxBufDescrRec;
|
|
|
|
|
|
typedef struct _TxBufDescr {
|
|
WORD txImmedLen;
|
|
BYTE *txImmedPtr;
|
|
WORD txDataCount;
|
|
TxBufDescrRec txBufDescrRec[NDIS_TX_BUF_LENGTH];
|
|
} TxBufDescr;
|
|
|
|
|
|
typedef struct _TDBufDescrRec {
|
|
BYTE tDPtrType;
|
|
BYTE dummy;
|
|
WORD tDDataLen;
|
|
BYTE *tDDataPtr;
|
|
} TDBufDescrRec;
|
|
|
|
|
|
typedef struct _TDBufDescr {
|
|
WORD tDDataCount;
|
|
TDBufDescrRec tDBufDescrRec[NDIS_TD_BUF_LENGTH];
|
|
} TDBufDescr;
|
|
|
|
|
|
typedef struct _RxBufDescrRec {
|
|
WORD rxDataLen;
|
|
BYTE *rxDataPtr;
|
|
} RxBufDescrRec;
|
|
|
|
|
|
typedef struct _RxBufDescr {
|
|
WORD rxDataCount;
|
|
RxBufDescrRec rxBufDescrRec[NDIS_RX_BUF_LENGTH];
|
|
} RxBufDescr;
|
|
|
|
|
|
typedef struct _PktBuf {
|
|
struct _PktBuf *nextLink;
|
|
struct _PktBuf *prevLink;
|
|
int handle;
|
|
int length;
|
|
int packetLength;
|
|
DWORD sequence;
|
|
BYTE *buffer;
|
|
} PktBuf;
|
|
|
|
|
|
typedef struct _CardHandle {
|
|
BYTE moduleName[16];
|
|
CommonChars *common;
|
|
} CardHandle;
|
|
|
|
|
|
typedef struct _BindingsList {
|
|
WORD numBindings;
|
|
BYTE moduleName[2][16];
|
|
} BindingsList;
|
|
|
|
|
|
typedef struct _FailingModules {
|
|
BYTE upperModuleName[16];
|
|
BYTE lowerModuleName[16];
|
|
} FailingModules;
|
|
|
|
|
|
typedef union _HardwareAddress {
|
|
BYTE bytes[6];
|
|
WORD words[3];
|
|
struct {
|
|
BYTE bytes[6];
|
|
} addr;
|
|
} HardwareAddress;
|
|
|
|
|
|
typedef struct _FddiHeader {
|
|
BYTE frameControl;
|
|
HardwareAddress etherDestHost;
|
|
HardwareAddress etherSrcHost;
|
|
} FddiHeader;
|
|
|
|
|
|
typedef struct _EthernetIIHeader {
|
|
HardwareAddress etherDestHost;
|
|
HardwareAddress etherSrcHost;
|
|
WORD etherType;
|
|
} EthernetIIHeader;
|
|
|
|
|
|
typedef struct _Ieee802Dot5Header {
|
|
HardwareAddress etherDestHost;
|
|
HardwareAddress etherSrcHost;
|
|
BYTE routeInfo[30];
|
|
} Ieee802Dot5Header;
|
|
|
|
|
|
typedef struct _Ieee802Dot2SnapHeader {
|
|
BYTE dsap; /* 0xAA */
|
|
BYTE ssap; /* 0xAA */
|
|
BYTE control; /* 3 */
|
|
BYTE protocolId[5];
|
|
} Ieee802Dot2SnapHeader;
|
|
|
|
|
|
/*
|
|
* Prototypes
|
|
*/
|
|
extern char *NdisLastError (void);
|
|
extern int NdisOpen (void);
|
|
extern int NdisInit (int promis);
|
|
extern int NdisRegisterAndBind (int promis);
|
|
extern void NdisShutdown (void);
|
|
extern void NdisCheckMacFeatures (struct _CardHandle *card);
|
|
extern int NdisSendPacket (struct _PktBuf *pktBuf, int macId);
|
|
|
|
/*
|
|
* Assembly "glue" functions
|
|
*/
|
|
extern int systemRequestGlue();
|
|
extern int requestConfirmGlue();
|
|
extern int transmitConfirmGlue();
|
|
extern int receiveLookaheadGlue();
|
|
extern int indicationCompleteGlue();
|
|
extern int receiveChainGlue();
|
|
extern int statusGlue();
|
|
|
|
/*
|
|
* IOCTL function
|
|
*/
|
|
#ifdef __SMALL__
|
|
extern int _far NdisGetLinkage (int handle, char *data, int size);
|
|
#else
|
|
extern int NdisGetLinkage (int handle, char *data, int size);
|
|
#endif
|
|
|
|
/*
|
|
* NDIS callback handlers
|
|
*/
|
|
CALLBACK (NdisSystemRequest (DWORD,DWORD, WORD, WORD, WORD));
|
|
CALLBACK (NdisRequestConfirm ( WORD, WORD, WORD, WORD, WORD,WORD));
|
|
CALLBACK (NdisTransmitConfirm ( WORD, WORD, WORD, WORD, WORD));
|
|
CALLBACK (NdisReceiveLookahead ( WORD, WORD, WORD, BYTE*, BYTE*, WORD));
|
|
CALLBACK (NdisReceiveChain ( WORD, WORD, WORD, struct _RxBufDescr*, BYTE*, WORD));
|
|
CALLBACK (NdisStatusProc ( WORD, WORD, BYTE*, WORD,WORD));
|
|
CALLBACK (NdisIndicationComplete( WORD, WORD));
|
|
|
|
BYTE *NdisAllocStack (void);
|
|
void NdisFreeStack (BYTE*);
|
|
|
|
#ifdef __HIGHC__
|
|
#define RENAME_ASM_SYM(x) pragma Alias(x,"@" #x "") /* prepend `@' */
|
|
#define RENAME_C_SYM(x) pragma Alias(x,"_" #x "") /* prepend `_' */
|
|
|
|
RENAME_ASM_SYM (systemRequestGlue);
|
|
RENAME_ASM_SYM (requestConfirmGlue);
|
|
RENAME_ASM_SYM (transmitConfirmGlue);
|
|
RENAME_ASM_SYM (receiveLookaheadGlue);
|
|
RENAME_ASM_SYM (indicationCompleteGlue);
|
|
RENAME_ASM_SYM (receiveChainGlue);
|
|
RENAME_ASM_SYM (statusGlue);
|
|
RENAME_ASM_SYM (NdisGetLinkage);
|
|
RENAME_C_SYM (NdisSystemRequest);
|
|
RENAME_C_SYM (NdisRequestConfirm);
|
|
RENAME_C_SYM (NdisTransmitConfirm);
|
|
RENAME_C_SYM (NdisReceiveLookahead);
|
|
RENAME_C_SYM (NdisIndicationComplete);
|
|
RENAME_C_SYM (NdisReceiveChain);
|
|
RENAME_C_SYM (NdisStatusProc);
|
|
RENAME_C_SYM (NdisAllocStack);
|
|
RENAME_C_SYM (NdisFreeStack);
|
|
#endif
|
|
|
|
#endif
|