📄 dlcapi.h
字号:
USHORT usStationId;
UCHAR uchOptionIndicator;
UCHAR uchEventSet;
UCHAR uchEvent;
UCHAR uchCriticalSubset;
ULONG ulNotificationFlag;
union {
struct {
USHORT usCcbCount;
PLLC_CCB pCcbCompletionList;
USHORT usBufferCount;
PLLC_BUFFER pFirstBuffer;
USHORT usReceivedFrameCount;
PLLC_BUFFER pReceivedFrame;
USHORT usEventErrorCode;
USHORT usEventErrorData[3];
} Event;
struct {
USHORT usStationId;
USHORT usDlcStatusCode;
UCHAR uchFrmrData[5];
UCHAR uchAccessPritority;
UCHAR uchRemoteNodeAddress[6];
UCHAR uchRemoteSap;
UCHAR uchReserved;
USHORT usUserStatusValue;
} Status;
} Type;
} LLC_READ_PARMS, *PLLC_READ_PARMS;
//
// This data structure gives the best performance in Windows/Nt: The DLC driver
// must copy the CCB and the parameter table. If the driver knows that the
// parameter table is concatenated to the CCB, it can copy both structures at
// once. NOTE: The pointer to the parameter table MUST still be present in the
// CCB
//
typedef struct {
LLC_CCB Ccb;
LLC_READ_PARMS Parms;
} LLC_READ_COMMAND, *PLLC_READ_COMMAND;
//
// New receive types for direct stations, these types are ignored if the direct
// station was opened with a specific ethernet type
//
#define LLC_DIR_RCV_ALL_TR_FRAMES 0
#define LLC_DIR_RCV_ALL_MAC_FRAMES 1
#define LLC_DIR_RCV_ALL_8022_FRAMES 2
#define LLC_DIR_RCV_ALL_FRAMES 4
#define LLC_DIR_RCV_ALL_ETHERNET_TYPES 5
#define LLC_CONTIGUOUS_MAC 0x80
#define LLC_CONTIGUOUS_DATA 0x40
#define LLC_NOT_CONTIGUOUS_DATA 0x00
//
// LLC_BREAK (0x20) is not supported by Windows/Nt
//
#define LLC_RCV_READ_INDIVIDUAL_FRAMES 0
#define LLC_RCV_CHAIN_FRAMES_ON_LINK 1
#define LLC_RCV_CHAIN_FRAMES_ON_SAP 2
typedef struct {
USHORT usStationId; // SAP, link station or direct id
USHORT usUserLength; // length of user data in buffer header
ULONG ulReceiveFlag; // the received data handler
PLLC_BUFFER pFirstBuffer; // first buffer in the pool
UCHAR uchOptions; // defines how the frame is received
UCHAR auchReserved1[3];
UCHAR uchRcvReadOption; // defines if rcv frames are chained
} LLC_RECEIVE_PARMS, *PLLC_RECEIVE_PARMS;
#define LLC_CHAIN_XMIT_COMMANDS_ON_LINK 0
#define LLC_COMPLETE_SINGLE_XMIT_FRAME 1
#define LLC_CHAIN_XMIT_COMMANDS_ON_SAP 2
typedef struct {
USHORT usStationId; // SAP, link station or direct id
UCHAR uchTransmitFs; // token-ring frame status
UCHAR uchRemoteSap; // remote destination SAP
PLLC_XMIT_BUFFER pXmitQueue1; // first link list of frame segments
PLLC_XMIT_BUFFER pXmitQueue2; // another segment list returuned to pool
USHORT cbBuffer1; // length of buffer 1
USHORT cbBuffer2; // length of buffer 2
PVOID pBuffer1; // yet another segment
PVOID pBuffer2; // this is the last segment of frame
UCHAR uchXmitReadOption; // defines completion event for READ
} LLC_TRANSMIT_PARMS, *PLLC_TRANSMIT_PARMS;
#define LLC_FIRST_DATA_SEGMENT 0x01
#define LLC_NEXT_DATA_SEGMENT 0x02
typedef struct {
UCHAR eSegmentType; // defines if first or next segment of frame
UCHAR boolFreeBuffer; // if set, this buffer is released to pool
USHORT cbBuffer; // length of this buffer
PVOID pBuffer;
} LLC_TRANSMIT_DESCRIPTOR, *PLLC_TRANSMIT_DESCRIPTOR;
//
// The frames types returned in the first receive buffer or used with the
// TRANSMIT_FRAMES command. A direct station may also send only ethernet
// frames. The ethernet types are only for transmit. Types 0x0019 - 0x05DC
// are reserved
//
enum _LLC_FRAME_TYPES { // Purpose:
LLC_DIRECT_TRANSMIT = 0x0000, // transmit
LLC_DIRECT_MAC = 0x0002, // receive
LLC_I_FRAME = 0x0004, // receive & transmit
LLC_UI_FRAME = 0x0006, // receive & transmit
LLC_XID_COMMAND_POLL = 0x0008, // receive & transmit
LLC_XID_COMMAND_NOT_POLL = 0x000A, // receive & transmit
LLC_XID_RESPONSE_FINAL = 0x000C, // receive & transmit
LLC_XID_RESPONSE_NOT_FINAL = 0x000E, // receive & transmit
LLC_TEST_RESPONSE_FINAL = 0x0010, // receive & transmit
LLC_TEST_RESPONSE_NOT_FINAL = 0x0012, // receive & transmit
LLC_DIRECT_8022 = 0x0014, // receive (direct station)
LLC_TEST_COMMAND_POLL = 0x0016, // transmit
LLC_DIRECT_ETHERNET_TYPE = 0x0018, // receive (direct station)
LLC_LAST_FRAME_TYPE = 0x001a, // reserved
LLC_FIRST_ETHERNET_TYPE = 0x05DD // transmit (>)
};
typedef struct {
LLC_CCB Ccb; // use this as transmit CCB
USHORT usStationId;
USHORT usFrameType; // DLC frame or ethernet type
UCHAR uchRemoteSap; // used with UI, TEST, XID frames
UCHAR uchXmitReadOption;
UCHAR Reserved2[2];
ULONG cXmitBufferCount;
LLC_TRANSMIT_DESCRIPTOR aXmitBuffer[1];
} LLC_TRANSMIT2_COMMAND, *PLLC_TRANSMIT2_COMMAND;
//
// LLC_TRANSMIT2_VAR_PARMS - this macro allocates space for variable length
// descriptor array, eg: LLC_TRANSMIT2_VAR_PARMS(8) TransmitParms;
//
#define LLC_TRANSMIT2_VAR_PARMS(a)\
struct {\
LLC_CCB Ccb;\
USHORT usStationId;\
USHORT usFrameType;\
UCHAR uchRemoteSap;\
UCHAR uchXmitReadOption;\
UCHAR uchReserved2[2];\
ULONG cXmitBufferCount;\
LLC_TRANSMIT_DESCRIPTOR XmitBuffer[(a)];\
}
//
// LLC_PARMS - All CCB parameter tables can be referred to using this union
//
union _LLC_PARMS {
LLC_BUFFER_FREE_PARMS BufferFree;
LLC_BUFFER_GET_PARMS BufferGet;
LLC_DLC_CONNECT_PARMS DlcConnectStation;
LLC_DLC_MODIFY_PARMS DlcModify;
LLC_DLC_OPEN_SAP_PARMS DlcOpenSap;
LLC_DLC_OPEN_STATION_PARMS DlcOpenStation;
LLC_DLC_REALLOCATE_PARMS DlcReallocate;
LLC_DLC_SET_THRESHOLD_PARMS DlcSetThreshold;
LLC_DLC_STATISTICS_PARMS DlcStatistics;
LLC_DIR_INITIALIZE_PARMS DirInitialize;
LLC_DIR_OPEN_ADAPTER_PARMS DirOpenAdapter;
LLC_DIR_OPEN_DIRECT_PARMS DirOpenDirect;
LLC_DIR_READ_LOG_PARMS DirReadLog;
LLC_DIR_SET_EFLAG_PARMS DirSetEventFlag;
LLC_DIR_STATUS_PARMS DirStatus;
LLC_READ_PARMS Read;
LLC_RECEIVE_PARMS Receive;
LLC_TRANSMIT_PARMS Transmit;
LLC_TRANSMIT2_COMMAND Transmit2;
LLC_TRACE_INITIALIZE_PARMS TraceInitialize;
};
//
// LLC_STATUS - enumerates the return codes which appear in the CCB uchDlcStatus
// field
//
typedef enum _LLC_STATUS {
LLC_STATUS_SUCCESS = 0x00,
LLC_STATUS_INVALID_COMMAND = 0x01,
LLC_STATUS_DUPLICATE_COMMAND = 0x02,
LLC_STATUS_ADAPTER_OPEN = 0x03,
LLC_STATUS_ADAPTER_CLOSED = 0x04,
LLC_STATUS_PARAMETER_MISSING = 0x05,
LLC_STATUS_INVALID_OPTION = 0x06,
LLC_STATUS_COMMAND_CANCELLED_FAILURE = 0x07,
LLC_STATUS_ACCESS_DENIED = 0x08, // not used in Windows/Nt
LLC_STATUS_ADAPTER_NOT_INITIALIZED = 0x09, // not used in Windows/Nt
LLC_STATUS_CANCELLED_BY_USER = 0x0A,
LLC_STATUS_COMMAND_CANCELLED_CLOSED = 0x0B, // not used in Windows/Nt
LLC_STATUS_SUCCESS_NOT_OPEN = 0x0C,
LLC_STATUS_TIMER_ERROR = 0x11,
LLC_STATUS_NO_MEMORY = 0x12,
LLC_STATUS_INVALID_LOG_ID = 0x13, // not used in Windows/Nt
LLC_STATUS_LOST_LOG_DATA = 0x15,
LLC_STATUS_BUFFER_SIZE_EXCEEDED = 0x16,
LLC_STATUS_INVALID_BUFFER_LENGTH = 0x18,
LLC_STATUS_INADEQUATE_BUFFERS = 0x19,
LLC_STATUS_USER_LENGTH_TOO_LARGE = 0x1A,
LLC_STATUS_INVALID_PARAMETER_TABLE = 0x1B,
LLC_STATUS_INVALID_POINTER_IN_CCB = 0x1C,
LLC_STATUS_INVALID_ADAPTER = 0x1D,
LLC_STATUS_LOST_DATA_NO_BUFFERS = 0x20,
LLC_STATUS_LOST_DATA_INADEQUATE_SPACE = 0x21,
LLC_STATUS_TRANSMIT_ERROR_FS = 0x22,
LLC_STATUS_TRANSMIT_ERROR = 0x23,
LLC_STATUS_UNAUTHORIZED_MAC = 0x24, // not used in Windows/Nt
LLC_STATUS_MAX_COMMANDS_EXCEEDED = 0x25, // not used in Windows/Nt
LLC_STATUS_LINK_NOT_TRANSMITTING = 0x27,
LLC_STATUS_INVALID_FRAME_LENGTH = 0x28,
LLC_STATUS_INADEQUATE_RECEIVE = 0x30, // not used in Windows/Nt
LLC_STATUS_INVALID_NODE_ADDRESS = 0x32,
LLC_STATUS_INVALID_RCV_BUFFER_LENGTH = 0x33,
LLC_STATUS_INVALID_XMIT_BUFFER_LENGTH = 0x34,
LLC_STATUS_INVALID_STATION_ID = 0x40,
LLC_STATUS_LINK_PROTOCOL_ERROR = 0x41,
LLC_STATUS_PARMETERS_EXCEEDED_MAX = 0x42,
LLC_STATUS_INVALID_SAP_VALUE = 0x43,
LLC_STATUS_INVALID_ROUTING_INFO = 0x44,
LLC_STATUS_RESOURCES_NOT_AVAILABLE = 0x46, // not used in Windows/Nt
LLC_STATUS_LINK_STATIONS_OPEN = 0x47,
LLC_STATUS_INCOMPATIBLE_COMMANDS = 0x4A,
LLC_STATUS_OUTSTANDING_COMMANDS = 0x4C, // not used in Windows/Nt
LLC_STATUS_CONNECT_FAILED = 0x4D,
LLC_STATUS_INVALID_REMOTE_ADDRESS = 0x4F,
LLC_STATUS_CCB_POINTER_FIELD = 0x50,
LLC_STATUS_INVALID_APPLICATION_ID = 0x52, // not used in Windows/Nt
LLC_STATUS_NO_SYSTEM_PROCESS = 0x56, // not used in Windows/Nt
LLC_STATUS_INADEQUATE_LINKS = 0x57,
LLC_STATUS_INVALID_PARAMETER_1 = 0x58,
LLC_STATUS_DIRECT_STATIONS_NOT_ASSIGNED = 0x5C,
LLC_STATUS_DEVICE_DRIVER_NOT_INSTALLED = 0x5d,
LLC_STATUS_ADAPTER_NOT_INSTALLED = 0x5e,
LLC_STATUS_CHAINED_DIFFERENT_ADAPTERS = 0x5f,
LLC_STATUS_INIT_COMMAND_STARTED = 0x60,
LLC_STATUS_TOO_MANY_USERS = 0x61, // not used in Windows/Nt
LLC_STATUS_CANCELLED_BY_SYSTEM_ACTION = 0x62,
LLC_STATUS_DIR_STATIONS_NOT_AVAILABLE = 0x63, // not used in Windows/Nt
LLC_STATUS_NO_GDT_SELECTORS = 0x65,
LLC_STATUS_MEMORY_LOCK_FAILED = 0x69,
//
// New NT DLC specific error codes begin from 0x80
// These error codes are for new Windows/Nt DLC apps.
//
LLC_STATUS_INVALID_BUFFER_ADDRESS = 0x80,
LLC_STATUS_BUFFER_ALREADY_RELEASED = 0x81,
LLC_STATUS_BIND_ERROR = 0xA0, // not used in Windows/Nt
LLC_STATUS_INVALID_VERSION = 0xA1,
LLC_STATUS_NT_ERROR_STATUS = 0xA2,
LLC_STATUS_PENDING = 0xFF
} LLC_STATUS;
#define LLC_STATUS_MAX_ERROR 0xFF
//
// ACSLAN_STATUS - status codes which are returned from AcsLan
//
typedef enum {
ACSLAN_STATUS_COMMAND_ACCEPTED = 0,
ACSLAN_STATUS_INVALID_CCB_POINTER = 1,
ACSLAN_STATUS_CCB_IN_ERROR = 2,
ACSLAN_STATUS_CHAINED_CCB_IN_ERROR = 3,
ACSLAN_STATUS_SYSTEM_ERROR = 4,
ACSLAN_STATUS_SYSTEM_STATUS = 5,
ACSLAN_STATUS_INVALID_COMMAND = 6
} ACSLAN_STATUS;
//
// prototypes
//
ACSLAN_STATUS
APIENTRY
AcsLan(
IN OUT PLLC_CCB pCcb,
OUT PLLC_CCB* ppBadCcb
);
#ifdef __cplusplus
}
#endif
#endif // _DLCAPI_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -