home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 May / PCFMay2001.iso / Xenon / C++ / FreeCommandLineTools.exe / Include / dlcapi.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-01-31  |  33.5 KB  |  929 lines

  1. /*++
  2.  
  3. Copyright (c) 1991-1999 Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     dlcapi.h
  8.  
  9. Abstract:
  10.  
  11.     This module defines 32-bit Windows/NT DLC structures and manifests
  12.  
  13. Revision History:
  14.  
  15. --*/
  16.  
  17. #ifndef _DLCAPI_
  18. #pragma option push -b -a8 -pc -A- /*P_O_Push*/
  19. #define _DLCAPI_
  20.  
  21. #if _MSC_VER > 1000
  22. #pragma once
  23. #endif
  24.  
  25. #ifdef __cplusplus
  26. extern "C" {
  27. #endif
  28.  
  29. //
  30. // DLC Command Codes
  31. //
  32.  
  33. #define LLC_DIR_INTERRUPT               0x00
  34. #define LLC_DIR_OPEN_ADAPTER            0x03
  35. #define LLC_DIR_CLOSE_ADAPTER           0x04
  36. #define LLC_DIR_SET_MULTICAST_ADDRESS   0x05
  37. #define LLC_DIR_SET_GROUP_ADDRESS       0x06
  38. #define LLC_DIR_SET_FUNCTIONAL_ADDRESS  0x07
  39. #define LLC_DIR_READ_LOG                0x08
  40. #define LLC_TRANSMIT_FRAMES             0x09
  41. #define LLC_TRANSMIT_DIR_FRAME          0x0A
  42. #define LLC_TRANSMIT_I_FRAME            0x0B
  43. #define LLC_TRANSMIT_UI_FRAME           0x0D
  44. #define LLC_TRANSMIT_XID_CMD            0x0E
  45. #define LLC_TRANSMIT_XID_RESP_FINAL     0x0F
  46. #define LLC_TRANSMIT_XID_RESP_NOT_FINAL 0x10
  47. #define LLC_TRANSMIT_TEST_CMD           0x11
  48. #define LLC_DLC_RESET                   0x14
  49. #define LLC_DLC_OPEN_SAP                0x15
  50. #define LLC_DLC_CLOSE_SAP               0x16
  51. #define LLC_DLC_REALLOCATE_STATIONS     0x17
  52. #define LLC_DLC_OPEN_STATION            0x19
  53. #define LLC_DLC_CLOSE_STATION           0x1A
  54. #define LLC_DLC_CONNECT_STATION         0x1B
  55. #define LLC_DLC_MODIFY                  0x1C
  56. #define LLC_DLC_FLOW_CONTROL            0x1D
  57. #define LLC_DLC_STATISTICS              0x1E
  58. #define LLC_DIR_INITIALIZE              0x20
  59. #define LLC_DIR_STATUS                  0x21
  60. #define LLC_DIR_TIMER_SET               0x22
  61. #define LLC_DIR_TIMER_CANCEL            0x23
  62. #define LLC_BUFFER_GET                  0x26
  63. #define LLC_BUFFER_FREE                 0x27
  64. #define LLC_RECEIVE                     0x28
  65. #define LLC_RECEIVE_CANCEL              0x29
  66. #define LLC_RECEIVE_MODIFY              0x2A
  67. #define LLC_DIR_TIMER_CANCEL_GROUP      0x2C
  68. #define LLC_DIR_SET_EXCEPTION_FLAGS     0x2D
  69. #define LLC_BUFFER_CREATE               0x30
  70. #define LLC_READ                        0x31
  71. #define LLC_READ_CANCEL                 0x32
  72. #define LLC_DLC_SET_THRESHOLD           0x33
  73. #define LLC_DIR_CLOSE_DIRECT            0x34
  74. #define LLC_DIR_OPEN_DIRECT             0x35
  75. #define LLC_MAX_DLC_COMMAND             0x37
  76.  
  77. //
  78. // forward definitions
  79. //
  80.  
  81. union _LLC_PARMS;
  82. typedef union _LLC_PARMS LLC_PARMS, *PLLC_PARMS;
  83.  
  84. //
  85. // Parameters. Can be pointer to a parameter table (32-bit flat address),
  86. // a single 32-bit ULONG, 2 16-bit USHORTs or 4 8-bit BYTEs
  87. //
  88.  
  89. typedef union {
  90.  
  91.     PLLC_PARMS pParameterTable;     // pointer to the parameter table
  92.  
  93.     struct {
  94.         USHORT usStationId;         // Station id
  95.         USHORT usParameter;         // optional parameter
  96.     } dlc;
  97.  
  98.     struct {
  99.         USHORT usParameter0;        // first optional parameter
  100.         USHORT usParameter1;        // second optional parameter
  101.     } dir;
  102.  
  103.     UCHAR auchBuffer[4];            // group/functional address
  104.  
  105.     ULONG ulParameter;
  106.  
  107. } CCB_PARMS;
  108.  
  109. //
  110. // LLC_CCB - the Command Control Block structure
  111. //
  112.  
  113. typedef struct _LLC_CCB {
  114.     UCHAR uchAdapterNumber;         // Adapter 0 or 1
  115.     UCHAR uchDlcCommand;            // DLC command
  116.     UCHAR uchDlcStatus;             // DLC command completion code
  117.     UCHAR uchReserved1;             // reserved for DLC DLL
  118.     struct _LLC_CCB* pNext;         // CCB chain
  119.     ULONG ulCompletionFlag;         // used in command completion
  120.     CCB_PARMS u;                    // parameters
  121.     HANDLE hCompletionEvent;        // event for command completion
  122.     UCHAR uchReserved2;             // reserved for DLC DLL
  123.     UCHAR uchReadFlag;              // set when special READ CCB chained
  124.     USHORT usReserved3;             // reserved for DLC DLL
  125. } LLC_CCB, *PLLC_CCB;
  126.  
  127. //
  128. // transmit/receive buffers
  129. //
  130.  
  131. union _LLC_BUFFER;
  132. typedef union _LLC_BUFFER LLC_BUFFER, *PLLC_BUFFER;
  133.  
  134. typedef struct {
  135.     PLLC_BUFFER pNextBuffer;        // next DLC buffer in frame
  136.     USHORT cbFrame;                 // length of the whole received frame
  137.     USHORT cbBuffer;                // length of this segment
  138.     USHORT offUserData;             // offset of data from descriptor header
  139.     USHORT cbUserData;              // length of the data
  140. } LLC_NEXT_BUFFER;
  141.  
  142. typedef struct {
  143.     PLLC_BUFFER pNextBuffer;        // next buffer of frame
  144.     USHORT cbFrame;                 // length of entire frame
  145.     USHORT cbBuffer;                // length of this buffer
  146.     USHORT offUserData;             // user data in this struct
  147.     USHORT cbUserData;              // length of user data
  148.     USHORT usStationId;             // ssnn station id
  149.     UCHAR uchOptions;               // option byte from RECEIVE param tbl
  150.     UCHAR uchMsgType;               // the message type
  151.     USHORT cBuffersLeft;            // number of basic buffer units left
  152.     UCHAR uchRcvFS;                 // the reveived frame status
  153.     UCHAR uchAdapterNumber;         // adapter number
  154.     PLLC_BUFFER pNextFrame;         // pointer to next frame
  155.     UCHAR cbLanHeader;              // length of the lan header
  156.     UCHAR cbDlcHeader;              // length of the DLC header
  157.     UCHAR auchLanHeader[32];        // lan header of the received frame
  158.     UCHAR auchDlcHeader[4];         // dlc header of the received frame
  159.     USHORT usPadding;               // data begins from offset 64 !!!
  160. } LLC_NOT_CONTIGUOUS_BUFFER;
  161.  
  162. typedef struct {
  163.     PLLC_BUFFER pNextBuffer;        // next buffer of frame
  164.     USHORT cbFrame;                 // length of entire frame
  165.     USHORT cbBuffer;                // length of this buffer
  166.     USHORT offUserData;             // user data in this struct
  167.     USHORT cbUserData;              // length of user data
  168.     USHORT usStationId;             // ssnn station id
  169.     UCHAR uchOptions;               // option byte from RECEIVE param tbl
  170.     UCHAR uchMsgType;               // the message type
  171.     USHORT cBuffersLeft;            // number of basic buffer units left
  172.     UCHAR uchRcvFS;                 // the reveived frame status
  173.     UCHAR uchAdapterNumber;         // adapter number
  174.     PLLC_BUFFER pNextFrame;         // pointer to next frame
  175. } LLC_CONTIGUOUS_BUFFER;
  176.  
  177. //
  178. // Received frames are returned in these data structures
  179. //
  180.  
  181. union _LLC_BUFFER {
  182.  
  183.     PLLC_BUFFER pNext;
  184.  
  185.     LLC_NEXT_BUFFER Next;
  186.  
  187.     struct LlcNextBuffer {
  188.         LLC_NEXT_BUFFER Header;
  189.         UCHAR auchData[];
  190.     } Buffer;
  191.  
  192.     LLC_NOT_CONTIGUOUS_BUFFER NotContiguous;
  193.  
  194.     struct {
  195.         LLC_NOT_CONTIGUOUS_BUFFER Header;
  196.         UCHAR auchData[];
  197.     } NotCont;
  198.  
  199.     LLC_CONTIGUOUS_BUFFER Contiguous;
  200.  
  201.     struct {
  202.         LLC_CONTIGUOUS_BUFFER Header;
  203.         UCHAR auchData[];
  204.     } Cont;
  205.  
  206. };
  207.  
  208. //
  209. // This structure is used by BUFFER.GET, BUFFER.FREE and TRANSMIT
  210. //
  211.  
  212. struct _LLC_XMIT_BUFFER;
  213. typedef struct _LLC_XMIT_BUFFER LLC_XMIT_BUFFER, *PLLC_XMIT_BUFFER;
  214.  
  215. struct _LLC_XMIT_BUFFER {
  216.     PLLC_XMIT_BUFFER pNext;         // next buffer (or NULL)
  217.     USHORT usReserved1;             //
  218.     USHORT cbBuffer;                // length of transmitted data
  219.     USHORT usReserved2;             //
  220.     USHORT cbUserData;              // length of optional header
  221.     UCHAR auchData[];               // optional header and transmitted data
  222. };
  223.  
  224. #define LLC_XMIT_BUFFER_SIZE sizeof(LLC_XMIT_BUFFER)
  225.  
  226. //
  227. // CCB parameter tables
  228. //
  229.  
  230. typedef struct {
  231.     HANDLE hBufferPool;             // handle of new buffer pool
  232.     PVOID pBuffer;                  // any buffer in memory
  233.     ULONG cbBufferSize;             // buffer size in bytes
  234.     ULONG cbMinimumSizeThreshold;   // minimum locked size
  235. } LLC_BUFFER_CREATE_PARMS, *PLLC_BUFFER_CREATE_PARMS;
  236.  
  237. typedef struct {
  238.     USHORT usReserved1;             // Station id is not used
  239.     USHORT cBuffersLeft;            // free 256 buffer segments
  240.     ULONG ulReserved;
  241.     PLLC_XMIT_BUFFER pFirstBuffer;  // buffer chain
  242. } LLC_BUFFER_FREE_PARMS, *PLLC_BUFFER_FREE_PARMS;
  243.  
  244. typedef struct {
  245.     USHORT usReserved1;             // Station id is not used
  246.     USHORT cBuffersLeft;            // free 256 buffer segments
  247.  
  248.     //
  249.     // cBuffersToGet: number of buffers to get. If 0, the returned buffer list
  250.     // may consist of segment of different size
  251.     //
  252.  
  253.     USHORT cBuffersToGet;
  254.  
  255.     //
  256.     // cbBufferSize: size of the requested buffers. This will be rounded up to
  257.     // the next largest segment size: 256, 512, 1024, 2048 or 4096
  258.     //
  259.  
  260.     USHORT cbBufferSize;
  261.     PLLC_XMIT_BUFFER pFirstBuffer;
  262. } LLC_BUFFER_GET_PARMS, *PLLC_BUFFER_GET_PARMS;
  263.  
  264. //
  265. // parameter table for DLC.CONNECT.STATION
  266. //
  267.  
  268. typedef struct {
  269.     USHORT usStationId;             // SAP or direct station ID, defines the pool
  270.     USHORT usReserved;
  271.     PUCHAR pRoutingInfo;            // offset to the routing info
  272. } LLC_DLC_CONNECT_PARMS, *PLLC_DLC_CONNECT_PARMS;
  273.  
  274. //
  275. // DLC_FLOW_CONTROL Options:
  276. //
  277.  
  278. #define LLC_RESET_LOCAL_BUSY_USER   0x80
  279. #define LLC_RESET_LOCAL_BUSY_BUFFER 0xC0
  280. #define LLC_SET_LOCAL_BUSY_USER     0
  281.  
  282. typedef struct {
  283.     USHORT usRes;
  284.     USHORT usStationId;             // SAP or link station id
  285.     UCHAR uchT1;                    // response timer
  286.     UCHAR uchT2;                    // aknowledgment timer
  287.     UCHAR uchTi;                    // inactivity timer
  288.     UCHAR uchMaxOut;                // max transmits without ack
  289.     UCHAR uchMaxIn;                 // max receives without ack
  290.     UCHAR uchMaxOutIncr;            // dynamic window increment value
  291.     UCHAR uchMaxRetryCnt;           // N2 value (retries)
  292.     UCHAR uchReserved1;
  293.     USHORT usMaxInfoFieldLength;    // Only for link stations, NEW!!!
  294.     UCHAR uchAccessPriority;        // token ring access priority
  295.     UCHAR auchReserved3[4];
  296.     UCHAR cGroupCount;              // number of group SAPs of this SAP
  297.     PUCHAR pGroupList;              // offset to the group list
  298. } LLC_DLC_MODIFY_PARMS, *PLLC_DLC_MODIFY_PARMS;
  299.  
  300. #define LLC_XID_HANDLING_IN_APPLICATION 0x08
  301. #define LLC_XID_HANDLING_IN_DLC         0
  302. #define LLC_INDIVIDUAL_SAP              0x04
  303. #define LLC_GROUP_SAP                   0x02
  304. #define LLC_MEMBER_OF_GROUP_SAP         0x01
  305.  
  306. typedef struct {
  307.     USHORT usStationId;             // SAP or link station id
  308.     USHORT usUserStatValue;         // reserved for user
  309.     UCHAR uchT1;                    // response timer
  310.     UCHAR uchT2;                    // aknowledgment timer
  311.     UCHAR uchTi;                    // inactivity timer
  312.     UCHAR uchMaxOut;                // max tramists without ack
  313.     UCHAR uchMaxIn;                 // max receives without ack
  314.     UCHAR uchMaxOutIncr;            // dynamic window increment value
  315.     UCHAR uchMaxRetryCnt;           // N2 value (retries)
  316.     UCHAR uchMaxMembers;            // maximum members for group SAP
  317.     USHORT usMaxI_Field;            // maximum length of the Info field
  318.     UCHAR uchSapValue;              // SAP value to be assigned
  319.     UCHAR uchOptionsPriority;       // SAP options and access priority
  320.     UCHAR uchcStationCount;         // maximum number of link stations in sap
  321.     UCHAR uchReserved2[2];          //
  322.     UCHAR cGroupCount;              // number of group SAPs of this SAP
  323.     PUCHAR pGroupList;              // offset to the group list
  324.     ULONG DlcStatusFlags;           // User notify flag for DLC status changes
  325.     UCHAR uchReserved3[8];          // reserved
  326.     UCHAR cLinkStationsAvail;       // total number of available link stations
  327. } LLC_DLC_OPEN_SAP_PARMS, *PLLC_DLC_OPEN_SAP_PARMS;
  328.  
  329. typedef struct {
  330.     USHORT usSapStationId;          // SAP station id
  331.     USHORT usLinkStationId;         // Link station id
  332.     UCHAR uchT1;                    // response timer
  333.     UCHAR uchT2;                    // aknowledgment timer
  334.     UCHAR uchTi;                    // inactivity timer
  335.     UCHAR uchMaxOut;                // max tramists without ack
  336.     UCHAR uchMaxIn;                 // max receives without ack
  337.     UCHAR uchMaxOutIncr;            // dynamic window increment value
  338.     UCHAR uchMaxRetryCnt;           // N2 value (retries)
  339.     UCHAR uchRemoteSap;             // remote SAP of the link
  340.     USHORT usMaxI_Field;            // max I field length
  341.     UCHAR uchAccessPriority;        // token ring access priority
  342.     PVOID pRemoteNodeAddress;       // pointer to the destination address
  343. } LLC_DLC_OPEN_STATION_PARMS, *PLLC_DLC_OPEN_STATION_PARMS;
  344.  
  345. #define LLC_INCREASE_LINK_STATIONS  0
  346. #define LLC_DECREASE_LINK_STATIONS  0x80
  347.  
  348. typedef struct {
  349.     USHORT usStationId;             // ID of affected SAP
  350.     UCHAR uchOption;                // increase of decrease indicator
  351.     UCHAR uchStationCount;
  352.     UCHAR uchStationsAvailOnAdapter;
  353.     UCHAR uchStationsAvailOnSap;
  354.     UCHAR uchTotalStationsOnAdapter;
  355.     UCHAR uchTotalStationsOnSap;
  356. } LLC_DLC_REALLOCATE_PARMS, *PLLC_DLC_REALLOCATE_PARMS;
  357.  
  358. typedef struct {
  359.     USHORT usStationId;             // SAP station ID
  360.     USHORT cBufferThreshold;        // SAP buffer pool Threshold number
  361.     PVOID AlertEvent;               // alerting event
  362. } LLC_DLC_SET_THRESHOLD_PARMS, *PLLC_DLC_SET_THRESHOLD_PARMS;
  363.  
  364. typedef struct {
  365.     PVOID TraceBuffer;              // trace buffer
  366.     ULONG TraceBufferSize;          // trace buffer size
  367.     ULONG TraceFlags;               // various trace flags
  368. } LLC_TRACE_INITIALIZE_PARMS, *PLLC_TRACE_INITIALIZE_PARMS;
  369.  
  370. #define LLC_DLC_RESET_STATISTICS    0x80
  371. #define LLC_DLC_READ_STATISTICS     0
  372.  
  373. typedef struct {
  374.     ULONG cTransmittedFrames;
  375.     ULONG cReceivedFrames;
  376.     ULONG cDiscardedFrames;
  377.     ULONG cDataLost;
  378.     USHORT cBuffersAvailable;
  379. } DLC_SAP_LOG, *PDLC_SAP_LOG;
  380.  
  381. typedef struct {
  382.     USHORT cI_FramesTransmitted;
  383.     USHORT cI_FramesReceived;
  384.     UCHAR cI_FrameReceiveErrors;
  385.     UCHAR cI_FrameTransmissionErrors;
  386.     USHORT cT1_ExpirationCount;     // Note: not OUT data xfer mode
  387.     UCHAR uchLastCmdRespReceived;
  388.     UCHAR uchLastCmdRespTransmitted;
  389.     UCHAR uchPrimaryState;
  390.     UCHAR uchSecondaryState;
  391.     UCHAR uchSendStateVariable;
  392.     UCHAR uchReceiveStateVariable;
  393.     UCHAR uchLastNr;                // last received NR
  394.     UCHAR cbLanHeader;
  395.     UCHAR auchLanHeader[32];
  396. } DLC_LINK_LOG, *PDLC_LINK_LOG;
  397.  
  398. typedef union {
  399.     DLC_SAP_LOG Sap;
  400.     DLC_LINK_LOG Link;
  401. } LLC_DLC_LOG_BUFFER, *PLLC_DLC_LOG_BUFFER;
  402.  
  403. typedef struct {
  404.     USHORT usStationId;             // ID of a SAP or a link station
  405.     USHORT cbLogBufSize;            //
  406.     PLLC_DLC_LOG_BUFFER pLogBuf;    // offset to the log buffer
  407.     USHORT usActLogLength;          // length of returned log
  408.     UCHAR uchOptions;               // command options (bit7 resets log params)
  409. } LLC_DLC_STATISTICS_PARMS, *PLLC_DLC_STATISTICS_PARMS;
  410.  
  411. typedef struct {
  412.     USHORT usBringUps;              // Token Ring adapter bring up error code
  413.     UCHAR Reserved[30];             // everything else specific to DOS or OS/2
  414. } LLC_DIR_INITIALIZE_PARMS, *PLLC_DIR_INITIALIZE_PARMS;
  415.  
  416. typedef struct {
  417.     USHORT usOpenErrorCode;         // open adapter errors detected
  418.     USHORT usOpenOptions;           // various options
  419.     UCHAR auchNodeAddress[6];       // adapters LAN address
  420.     UCHAR auchGroupAddress[4];      // multicast address added in the open
  421.     UCHAR auchFunctionalAddress[4]; // added token ring functional address
  422.     USHORT usReserved1;
  423.     USHORT usReserved2;
  424.     USHORT usMaxFrameSize;          // maximum frame size defined in NDIS
  425.     USHORT usReserved3[4];
  426.     USHORT usBringUps;              // Bring up errors, TR only
  427.     USHORT InitWarnings;
  428.     USHORT usReserved4[3];
  429. } LLC_ADAPTER_OPEN_PARMS, *PLLC_ADAPTER_OPEN_PARMS;
  430.  
  431. typedef struct {
  432.     UCHAR uchDlcMaxSaps;
  433.     UCHAR uchDlcMaxStations;
  434.     UCHAR uchDlcMaxGroupSaps;
  435.     UCHAR uchDlcMaxGroupMembers;
  436.     UCHAR uchT1_TickOne;            // Short timer interval (for 1 - 5)
  437.     UCHAR uchT2_TickOne;
  438.     UCHAR uchTi_TickOne;
  439.     UCHAR uchT1_TickTwo;            // Long timer interval (for 6 - 10)
  440.     UCHAR uchT2_TickTwo;
  441.     UCHAR uchTi_TickTwo;
  442. } LLC_DLC_PARMS, *PLLC_DLC_PARMS;
  443.  
  444. //
  445. // The ethernet mode selects the LAN header format of ethernet. SNA
  446. // applications should use the default parameter, that has been defined in the
  447. // registry. The applications using connectionless DLC services should select
  448. // the ethernet LLC LAN header format they are using (usually 802.3)
  449. //
  450.  
  451. typedef enum {
  452.     LLC_ETHERNET_TYPE_DEFAULT,      // use the parameter value set in registry
  453.     LLC_ETHERNET_TYPE_AUTO,         // automatic header type selction for links
  454.     LLC_ETHERNET_TYPE_802_3,        // use always 802.3 lan headers
  455.     LLC_ETHERNET_TYPE_DIX           // use always LLC on DIX SNA type.
  456. } LLC_ETHERNET_TYPE, *PLLC_ETHERNET_TYPE;
  457.  
  458. typedef struct {
  459.     PVOID hBufferPool;
  460.     PVOID pSecurityDescriptor;
  461.     LLC_ETHERNET_TYPE LlcEthernetType;
  462. } LLC_EXTENDED_ADAPTER_PARMS, *PLLC_EXTENDED_ADAPTER_PARMS;
  463.  
  464. typedef struct {
  465.     PLLC_ADAPTER_OPEN_PARMS pAdapterParms;      // ADAPTER_PARMS
  466.     PLLC_EXTENDED_ADAPTER_PARMS pExtendedParms; // DIRECT_PARMS
  467.     PLLC_DLC_PARMS pDlcParms;                   // DLC_PARMS
  468.     PVOID pReserved1;                           // NCB_PARMS
  469. } LLC_DIR_OPEN_ADAPTER_PARMS, *PLLC_DIR_OPEN_ADAPTER_PARMS;
  470.  
  471. typedef struct {
  472.     UCHAR auchMulticastAddress[6];  // 48 bit multicast address
  473. } LLC_DIR_MULTICAST_ADDRESS, *PLLC_DIR_MULTICAST_ADDRESS;
  474.  
  475. #define LLC_DIRECT_OPTIONS_ALL_MACS 0x1880
  476.  
  477. typedef struct {
  478.     USHORT Reserved[4];
  479.     USHORT usOpenOptions;
  480.     USHORT usEthernetType;
  481.     ULONG ulProtocolTypeMask;
  482.     ULONG ulProtocolTypeMatch;
  483.     USHORT usProtocolTypeOffset;
  484. } LLC_DIR_OPEN_DIRECT_PARMS, *PLLC_DIR_OPEN_DIRECT_PARMS;
  485.  
  486. typedef struct {
  487.     UCHAR cLineError;
  488.     UCHAR cInternalError;
  489.     UCHAR cBurstError;
  490.     UCHAR cAC_Error;
  491.     UCHAR cAbortDelimiter;
  492.     UCHAR uchReserved1;
  493.     UCHAR cLostFrame;
  494.     UCHAR cReceiveCongestion;
  495.     UCHAR cFrameCopiedError;
  496.     UCHAR cFrequencyError;
  497.     UCHAR cTokenError;
  498.     UCHAR uchReserved2;
  499.     UCHAR uchReserved3;
  500.     UCHAR uchReserved4;
  501. } LLC_ADAPTER_LOG_TR, *PLLC_ADAPTER_LOG_TR;
  502.  
  503. typedef struct {
  504.     UCHAR cCRC_Error;
  505.     UCHAR uchReserved1;
  506.     UCHAR cAlignmentError;
  507.     UCHAR uchReserved2;
  508.     UCHAR cTransmitError;
  509.     UCHAR uchReserved3;
  510.     UCHAR cCollisionError;
  511.     UCHAR cReceiveCongestion;
  512.     UCHAR uchReserved[6];
  513. } LLC_ADAPTER_LOG_ETH, *PLLC_ADAPTER_LOG_ETH;
  514.  
  515. typedef union {
  516.     LLC_ADAPTER_LOG_TR Tr;
  517.     LLC_ADAPTER_LOG_ETH Eth;
  518. } LLC_ADAPTER_LOG, *PLLC_ADAPTER_LOG;
  519.  
  520. typedef struct {
  521.     ULONG cTransmittedFrames;
  522.     ULONG cReceivedFrames;
  523.     ULONG cDiscardedFrames;
  524.     ULONG cDataLost;
  525.     USHORT cBuffersAvailable;
  526. } LLC_DIRECT_LOG, *PLLC_DIRECT_LOG;
  527.  
  528. typedef union {
  529.     LLC_ADAPTER_LOG Adapter;
  530.     LLC_DIRECT_LOG Dir;
  531.  
  532.     struct {
  533.         LLC_ADAPTER_LOG Adapter;
  534.         LLC_DIRECT_LOG Dir;
  535.     } both;
  536.  
  537. } LLC_DIR_READ_LOG_BUFFER, *PLLC_DIR_READ_LOG_BUFFER;
  538.  
  539. #define LLC_DIR_READ_LOG_ADAPTER    0
  540. #define LLC_DIR_READ_LOG_DIRECT     1
  541. #define LLC_DIR_READ_LOG_BOTH       2
  542.  
  543. typedef struct {
  544.     USHORT usTypeId;                    // 0=adapter, 1=direct, 2=both logs
  545.     USHORT cbLogBuffer;                 // size of log buffer
  546.     PLLC_DIR_READ_LOG_BUFFER pLogBuffer;// pointer to log buffer
  547.     USHORT cbActualLength;              // returned size of log buffer
  548. } LLC_DIR_READ_LOG_PARMS, *PLLC_DIR_READ_LOG_PARMS;
  549.  
  550. typedef struct {
  551.     ULONG ulAdapterCheckFlag;
  552.     ULONG ulNetworkStatusFlag;
  553.     ULONG ulPcErrorFlag;
  554.     ULONG ulSystemActionFlag;
  555. } LLC_DIR_SET_EFLAG_PARMS, *PLLC_DIR_SET_EFLAG_PARMS;
  556.  
  557. #define LLC_ADAPTER_ETHERNET    0x0010
  558. #define LLC_ADAPTER_TOKEN_RING  0x0040
  559.  
  560. typedef struct {
  561.     UCHAR auchPermanentAddress[6];  // permanent encoded address
  562.     UCHAR auchNodeAddress[6];       // adapter's network address
  563.     UCHAR auchGroupAddress[4];      // adapter's group address
  564.     UCHAR auchFunctAddr[4];         // adapter's functional address
  565.     UCHAR uchMaxSap;                // maximum allowable SAP
  566.     UCHAR uchOpenSaps;              // number of currently open saps
  567.     UCHAR uchMaxStations;           // max number of stations (always 253)
  568.     UCHAR uchOpenStation;           // number of open stations (only up to 253)
  569.     UCHAR uchAvailStations;         // number of available stations (always 253)
  570.     UCHAR uchAdapterConfig;         // adapter configuration flags
  571.     UCHAR auchReserved1[10];        // microcode level
  572.     ULONG ulReserved1;
  573.     ULONG ulReserved2;
  574.     ULONG ulMaxFrameLength;         // maximum frame length (only in Windows/Nt)
  575.     USHORT usLastNetworkStatus;
  576.     USHORT usAdapterType;           // THIS BYTE IS NOT USED IN DOS DLC !!!
  577. } LLC_DIR_STATUS_PARMS, *PLLC_DIR_STATUS_PARMS;
  578.  
  579.  
  580. #define LLC_OPTION_READ_STATION 0
  581. #define LLC_OPTION_READ_SAP     1
  582. #define LLC_OPTION_READ_ALL     2
  583.  
  584. #define LLC_EVENT_SYSTEM_ACTION         0x0040
  585. #define LLC_EVENT_NETWORK_STATUS        0x0020
  586. #define LLC_EVENT_CRITICAL_EXCEPTION    0x0010
  587. #define LLC_EVENT_STATUS_CHANGE         0x0008
  588. #define LLC_EVENT_RECEIVE_DATA          0x0004
  589. #define LLC_EVENT_TRANSMIT_COMPLETION   0x0002
  590. #define LLC_EVENT_COMMAND_COMPLETION    0x0001
  591. #define LLC_READ_ALL_EVENTS             0x007F
  592.  
  593. //
  594. // LLC_STATUS_CHANGE indications
  595. // The returned status value may be an inclusive-OR of several flags
  596. //
  597.  
  598. #define LLC_INDICATE_LINK_LOST              0x8000
  599. #define LLC_INDICATE_DM_DISC_RECEIVED       0x4000
  600. #define LLC_INDICATE_FRMR_RECEIVED          0x2000
  601. #define LLC_INDICATE_FRMR_SENT              0x1000
  602. #define LLC_INDICATE_RESET                  0x0800
  603. #define LLC_INDICATE_CONNECT_REQUEST        0x0400
  604. #define LLC_INDICATE_REMOTE_BUSY            0x0200
  605. #define LLC_INDICATE_REMOTE_READY           0x0100
  606. #define LLC_INDICATE_TI_TIMER_EXPIRED       0x0080
  607. #define LLC_INDICATE_DLC_COUNTER_OVERFLOW   0x0040
  608. #define LLC_INDICATE_ACCESS_PRTY_LOWERED    0x0020
  609. #define LLC_INDICATE_LOCAL_STATION_BUSY     0x0001
  610.  
  611. typedef struct {
  612.     USHORT usStationId;
  613.     UCHAR uchOptionIndicator;
  614.     UCHAR uchEventSet;
  615.     UCHAR uchEvent;
  616.     UCHAR uchCriticalSubset;
  617.     ULONG ulNotificationFlag;
  618.  
  619.     union {
  620.  
  621.         struct {
  622.             USHORT usCcbCount;
  623.             PLLC_CCB pCcbCompletionList;
  624.             USHORT usBufferCount;
  625.             PLLC_BUFFER pFirstBuffer;
  626.             USHORT usReceivedFrameCount;
  627.             PLLC_BUFFER pReceivedFrame;
  628.             USHORT usEventErrorCode;
  629.             USHORT usEventErrorData[3];
  630.         } Event;
  631.  
  632.         struct {
  633.             USHORT usStationId;
  634.             USHORT usDlcStatusCode;
  635.             UCHAR uchFrmrData[5];
  636.             UCHAR uchAccessPritority;
  637.             UCHAR uchRemoteNodeAddress[6];
  638.             UCHAR uchRemoteSap;
  639.             UCHAR uchReserved;
  640.             USHORT usUserStatusValue;
  641.         } Status;
  642.  
  643.     } Type;
  644.  
  645. } LLC_READ_PARMS, *PLLC_READ_PARMS;
  646.  
  647. //
  648. // This data structure gives the best performance in Windows/Nt: The DLC driver
  649. // must copy the CCB and the parameter table. If the driver knows that the
  650. // parameter table is concatenated to the CCB, it can copy both structures at
  651. // once. NOTE: The pointer to the parameter table MUST still be present in the
  652. // CCB
  653. //
  654.  
  655. typedef struct {
  656.     LLC_CCB Ccb;
  657.     LLC_READ_PARMS Parms;
  658. } LLC_READ_COMMAND, *PLLC_READ_COMMAND;
  659.  
  660. //
  661. // New receive types for direct stations, these types are ignored if the direct
  662. // station was opened with a specific ethernet type
  663. //
  664.  
  665. #define LLC_DIR_RCV_ALL_TR_FRAMES       0
  666. #define LLC_DIR_RCV_ALL_MAC_FRAMES      1
  667. #define LLC_DIR_RCV_ALL_8022_FRAMES     2
  668. #define LLC_DIR_RCV_ALL_FRAMES          4
  669. #define LLC_DIR_RCV_ALL_ETHERNET_TYPES  5
  670.  
  671. #define LLC_CONTIGUOUS_MAC      0x80
  672. #define LLC_CONTIGUOUS_DATA     0x40
  673. #define LLC_NOT_CONTIGUOUS_DATA 0x00
  674.  
  675. //
  676. // LLC_BREAK (0x20) is not supported by Windows/Nt
  677. //
  678.  
  679. #define LLC_RCV_READ_INDIVIDUAL_FRAMES  0
  680. #define LLC_RCV_CHAIN_FRAMES_ON_LINK    1
  681. #define LLC_RCV_CHAIN_FRAMES_ON_SAP     2
  682.  
  683. typedef struct {
  684.     USHORT usStationId;             // SAP, link station or direct id
  685.     USHORT usUserLength;            // length of user data in buffer header
  686.     ULONG ulReceiveFlag;            // the received data handler
  687.     PLLC_BUFFER pFirstBuffer;       // first buffer in the pool
  688.     UCHAR uchOptions;               // defines how the frame is received
  689.     UCHAR auchReserved1[3];
  690.     UCHAR uchRcvReadOption;         // defines if rcv frames are chained
  691. } LLC_RECEIVE_PARMS, *PLLC_RECEIVE_PARMS;
  692.  
  693. #define LLC_CHAIN_XMIT_COMMANDS_ON_LINK 0
  694. #define LLC_COMPLETE_SINGLE_XMIT_FRAME  1
  695. #define LLC_CHAIN_XMIT_COMMANDS_ON_SAP  2
  696.  
  697. typedef struct {
  698.     USHORT usStationId;             // SAP, link station or direct id
  699.     UCHAR uchTransmitFs;            // token-ring frame status
  700.     UCHAR uchRemoteSap;             // remote destination SAP
  701.     PLLC_XMIT_BUFFER pXmitQueue1;   // first link list of frame segments
  702.     PLLC_XMIT_BUFFER pXmitQueue2;   // another segment list returuned to pool
  703.     USHORT cbBuffer1;               // length of buffer 1
  704.     USHORT cbBuffer2;               // length of buffer 2
  705.     PVOID pBuffer1;                 // yet another segment
  706.     PVOID pBuffer2;                 // this is the last segment of frame
  707.     UCHAR uchXmitReadOption;        // defines completion event for READ
  708. } LLC_TRANSMIT_PARMS,  *PLLC_TRANSMIT_PARMS;
  709.  
  710. #define LLC_FIRST_DATA_SEGMENT  0x01
  711. #define LLC_NEXT_DATA_SEGMENT   0x02
  712.  
  713. typedef struct {
  714.     UCHAR eSegmentType;             // defines if first or next segment of frame
  715.     UCHAR boolFreeBuffer;           // if set, this buffer is released to pool
  716.     USHORT cbBuffer;                // length of this buffer
  717.     PVOID pBuffer;
  718. } LLC_TRANSMIT_DESCRIPTOR, *PLLC_TRANSMIT_DESCRIPTOR;
  719.  
  720. //
  721. // The frames types returned in the first receive buffer or used with the
  722. // TRANSMIT_FRAMES command.  A direct station may also send only ethernet
  723. // frames. The ethernet types are only for transmit. Types 0x0019 - 0x05DC
  724. // are reserved
  725. //
  726.  
  727. enum _LLC_FRAME_TYPES {                     // Purpose:
  728.     LLC_DIRECT_TRANSMIT         = 0x0000,   // transmit
  729.     LLC_DIRECT_MAC              = 0x0002,   // receive
  730.     LLC_I_FRAME                 = 0x0004,   // receive & transmit
  731.     LLC_UI_FRAME                = 0x0006,   // receive & transmit
  732.     LLC_XID_COMMAND_POLL        = 0x0008,   // receive & transmit
  733.     LLC_XID_COMMAND_NOT_POLL    = 0x000A,   // receive & transmit
  734.     LLC_XID_RESPONSE_FINAL      = 0x000C,   // receive & transmit
  735.     LLC_XID_RESPONSE_NOT_FINAL  = 0x000E,   // receive & transmit
  736.     LLC_TEST_RESPONSE_FINAL     = 0x0010,   // receive & transmit
  737.     LLC_TEST_RESPONSE_NOT_FINAL = 0x0012,   // receive & transmit
  738.     LLC_DIRECT_8022             = 0x0014,   // receive (direct station)
  739.     LLC_TEST_COMMAND_POLL       = 0x0016,   // transmit
  740.     LLC_DIRECT_ETHERNET_TYPE    = 0x0018,   // receive (direct station)
  741.     LLC_LAST_FRAME_TYPE         = 0x001a,   // reserved
  742.     LLC_FIRST_ETHERNET_TYPE     = 0x05DD    // transmit (>)
  743. };
  744.  
  745. typedef struct {
  746.     LLC_CCB Ccb;                    // use this as transmit CCB
  747.     USHORT usStationId;
  748.     USHORT usFrameType;             // DLC frame or ethernet type
  749.     UCHAR uchRemoteSap;             // used with UI, TEST, XID frames
  750.     UCHAR uchXmitReadOption;
  751.     UCHAR Reserved2[2];
  752.     ULONG cXmitBufferCount;
  753.     LLC_TRANSMIT_DESCRIPTOR aXmitBuffer[1];
  754. } LLC_TRANSMIT2_COMMAND, *PLLC_TRANSMIT2_COMMAND;
  755.  
  756. //
  757. // LLC_TRANSMIT2_VAR_PARMS - this macro allocates space for variable length
  758. // descriptor array, eg: LLC_TRANSMIT2_VAR_PARMS(8) TransmitParms;
  759. //
  760.  
  761. #define LLC_TRANSMIT2_VAR_PARMS(a)\
  762. struct {\
  763.     LLC_CCB Ccb;\
  764.     USHORT usStationId;\
  765.     USHORT usFrameType;\
  766.     UCHAR uchRemoteSap;\
  767.     UCHAR uchXmitReadOption;\
  768.     UCHAR uchReserved2[2];\
  769.     ULONG cXmitBufferCount;\
  770.     LLC_TRANSMIT_DESCRIPTOR XmitBuffer[(a)];\
  771. }
  772.  
  773. //
  774. // LLC_PARMS - All CCB parameter tables can be referred to using this union
  775. //
  776.  
  777. union _LLC_PARMS {
  778.     LLC_BUFFER_FREE_PARMS BufferFree;
  779.     LLC_BUFFER_GET_PARMS BufferGet;
  780.     LLC_DLC_CONNECT_PARMS DlcConnectStation;
  781.     LLC_DLC_MODIFY_PARMS DlcModify;
  782.     LLC_DLC_OPEN_SAP_PARMS DlcOpenSap;
  783.     LLC_DLC_OPEN_STATION_PARMS DlcOpenStation;
  784.     LLC_DLC_REALLOCATE_PARMS DlcReallocate;
  785.     LLC_DLC_SET_THRESHOLD_PARMS DlcSetThreshold;
  786.     LLC_DLC_STATISTICS_PARMS DlcStatistics;
  787.     LLC_DIR_INITIALIZE_PARMS DirInitialize;
  788.     LLC_DIR_OPEN_ADAPTER_PARMS DirOpenAdapter;
  789.     LLC_DIR_OPEN_DIRECT_PARMS DirOpenDirect;
  790.     LLC_DIR_READ_LOG_PARMS DirReadLog;
  791.     LLC_DIR_SET_EFLAG_PARMS DirSetEventFlag;
  792.     LLC_DIR_STATUS_PARMS DirStatus;
  793.     LLC_READ_PARMS Read;
  794.     LLC_RECEIVE_PARMS Receive;
  795.     LLC_TRANSMIT_PARMS Transmit;
  796.     LLC_TRANSMIT2_COMMAND Transmit2;
  797.     LLC_TRACE_INITIALIZE_PARMS TraceInitialize;
  798. };
  799.  
  800. //
  801. // LLC_STATUS - enumerates the return codes which appear in the CCB uchDlcStatus
  802. // field
  803. //
  804.  
  805. typedef enum _LLC_STATUS {
  806.     LLC_STATUS_SUCCESS                      = 0x00,
  807.     LLC_STATUS_INVALID_COMMAND              = 0x01,
  808.     LLC_STATUS_DUPLICATE_COMMAND            = 0x02,
  809.     LLC_STATUS_ADAPTER_OPEN                 = 0x03,
  810.     LLC_STATUS_ADAPTER_CLOSED               = 0x04,
  811.     LLC_STATUS_PARAMETER_MISSING            = 0x05,
  812.     LLC_STATUS_INVALID_OPTION               = 0x06,
  813.     LLC_STATUS_COMMAND_CANCELLED_FAILURE    = 0x07,
  814.     LLC_STATUS_ACCESS_DENIED                = 0x08,   // not used in Windows/Nt
  815.     LLC_STATUS_ADAPTER_NOT_INITIALIZED      = 0x09,   // not used in Windows/Nt
  816.     LLC_STATUS_CANCELLED_BY_USER            = 0x0A,
  817.     LLC_STATUS_COMMAND_CANCELLED_CLOSED     = 0x0B,   // not used in Windows/Nt
  818.     LLC_STATUS_SUCCESS_NOT_OPEN             = 0x0C,
  819.     LLC_STATUS_TIMER_ERROR                  = 0x11,
  820.     LLC_STATUS_NO_MEMORY                    = 0x12,
  821.     LLC_STATUS_INVALID_LOG_ID               = 0x13,   // not used in Windows/Nt
  822.     LLC_STATUS_LOST_LOG_DATA                = 0x15,
  823.     LLC_STATUS_BUFFER_SIZE_EXCEEDED         = 0x16,
  824.     LLC_STATUS_INVALID_BUFFER_LENGTH        = 0x18,
  825.     LLC_STATUS_INADEQUATE_BUFFERS           = 0x19,
  826.     LLC_STATUS_USER_LENGTH_TOO_LARGE        = 0x1A,
  827.     LLC_STATUS_INVALID_PARAMETER_TABLE      = 0x1B,
  828.     LLC_STATUS_INVALID_POINTER_IN_CCB       = 0x1C,
  829.     LLC_STATUS_INVALID_ADAPTER              = 0x1D,
  830.     LLC_STATUS_LOST_DATA_NO_BUFFERS         = 0x20,
  831.     LLC_STATUS_LOST_DATA_INADEQUATE_SPACE   = 0x21,
  832.     LLC_STATUS_TRANSMIT_ERROR_FS            = 0x22,
  833.     LLC_STATUS_TRANSMIT_ERROR               = 0x23,
  834.     LLC_STATUS_UNAUTHORIZED_MAC             = 0x24,   // not used in Windows/Nt
  835.     LLC_STATUS_MAX_COMMANDS_EXCEEDED        = 0x25,   // not used in Windows/Nt
  836.     LLC_STATUS_LINK_NOT_TRANSMITTING        = 0x27,
  837.     LLC_STATUS_INVALID_FRAME_LENGTH         = 0x28,
  838.     LLC_STATUS_INADEQUATE_RECEIVE           = 0x30,   // not used in Windows/Nt
  839.     LLC_STATUS_INVALID_NODE_ADDRESS         = 0x32,
  840.     LLC_STATUS_INVALID_RCV_BUFFER_LENGTH    = 0x33,
  841.     LLC_STATUS_INVALID_XMIT_BUFFER_LENGTH   = 0x34,
  842.     LLC_STATUS_INVALID_STATION_ID           = 0x40,
  843.     LLC_STATUS_LINK_PROTOCOL_ERROR          = 0x41,
  844.     LLC_STATUS_PARMETERS_EXCEEDED_MAX       = 0x42,
  845.     LLC_STATUS_INVALID_SAP_VALUE            = 0x43,
  846.     LLC_STATUS_INVALID_ROUTING_INFO         = 0x44,
  847.     LLC_STATUS_RESOURCES_NOT_AVAILABLE      = 0x46,   // not used in Windows/Nt
  848.     LLC_STATUS_LINK_STATIONS_OPEN           = 0x47,
  849.     LLC_STATUS_INCOMPATIBLE_COMMANDS        = 0x4A,
  850.     LLC_STATUS_OUTSTANDING_COMMANDS         = 0x4C,   // not used in Windows/Nt
  851.     LLC_STATUS_CONNECT_FAILED               = 0x4D,
  852.     LLC_STATUS_INVALID_REMOTE_ADDRESS       = 0x4F,
  853.     LLC_STATUS_CCB_POINTER_FIELD            = 0x50,
  854.     LLC_STATUS_INVALID_APPLICATION_ID       = 0x52,   // not used in Windows/Nt
  855.     LLC_STATUS_NO_SYSTEM_PROCESS            = 0x56,   // not used in Windows/Nt
  856.     LLC_STATUS_INADEQUATE_LINKS             = 0x57,
  857.     LLC_STATUS_INVALID_PARAMETER_1          = 0x58,
  858.     LLC_STATUS_DIRECT_STATIONS_NOT_ASSIGNED = 0x5C,
  859.     LLC_STATUS_DEVICE_DRIVER_NOT_INSTALLED  = 0x5d,
  860.     LLC_STATUS_ADAPTER_NOT_INSTALLED        = 0x5e,
  861.     LLC_STATUS_CHAINED_DIFFERENT_ADAPTERS   = 0x5f,
  862.     LLC_STATUS_INIT_COMMAND_STARTED         = 0x60,
  863.     LLC_STATUS_TOO_MANY_USERS               = 0x61,   // not used in Windows/Nt
  864.     LLC_STATUS_CANCELLED_BY_SYSTEM_ACTION   = 0x62,
  865.     LLC_STATUS_DIR_STATIONS_NOT_AVAILABLE   = 0x63,   // not used in Windows/Nt
  866.     LLC_STATUS_NO_GDT_SELECTORS             = 0x65,
  867.     LLC_STATUS_MEMORY_LOCK_FAILED           = 0x69,
  868.  
  869.     //
  870.     // New NT DLC specific error codes begin from 0x80
  871.     // These error codes are for new Windows/Nt DLC apps.
  872.     //
  873.  
  874.     LLC_STATUS_INVALID_BUFFER_ADDRESS       = 0x80,
  875.     LLC_STATUS_BUFFER_ALREADY_RELEASED      = 0x81,
  876.     LLC_STATUS_BIND_ERROR                   = 0xA0,   // not used in Windows/Nt
  877.     LLC_STATUS_INVALID_VERSION              = 0xA1,
  878.     LLC_STATUS_NT_ERROR_STATUS              = 0xA2,
  879.     LLC_STATUS_PENDING                      = 0xFF
  880. } LLC_STATUS;
  881.  
  882. #define LLC_STATUS_MAX_ERROR 0xFF
  883.  
  884. //
  885. // ACSLAN_STATUS - status codes which are returned from AcsLan
  886. //
  887.  
  888. typedef enum {
  889.     ACSLAN_STATUS_COMMAND_ACCEPTED = 0,
  890.     ACSLAN_STATUS_INVALID_CCB_POINTER = 1,
  891.     ACSLAN_STATUS_CCB_IN_ERROR = 2,
  892.     ACSLAN_STATUS_CHAINED_CCB_IN_ERROR = 3,
  893.     ACSLAN_STATUS_SYSTEM_ERROR = 4,
  894.     ACSLAN_STATUS_SYSTEM_STATUS = 5,
  895.     ACSLAN_STATUS_INVALID_COMMAND = 6
  896. } ACSLAN_STATUS;
  897.  
  898. //
  899. // prototypes
  900. //
  901.  
  902. ACSLAN_STATUS
  903. APIENTRY
  904. AcsLan(
  905.     IN OUT PLLC_CCB pCcb,
  906.     OUT PLLC_CCB* ppBadCcb
  907.     );
  908.  
  909. LLC_STATUS
  910. APIENTRY
  911. GetAdapterNameFromNumber(
  912.     IN UINT AdapterNumber,
  913.     OUT LPTSTR pNdisName
  914.     );
  915.  
  916. LLC_STATUS
  917. APIENTRY
  918. GetAdapterNumberFromName(
  919.     IN LPTSTR pNdisName,
  920.     OUT UINT *AdapterNumber
  921.     );
  922.  
  923. #ifdef __cplusplus
  924. }
  925. #endif
  926.  
  927. #pragma option pop /*P_O_Pop*/
  928. #endif // _DLCAPI_
  929.