Chinaunix首页 | 论坛 | 博客
  • 博客访问: 198723
  • 博文数量: 29
  • 博客积分: 1280
  • 博客等级: 中尉
  • 技术积分: 320
  • 用 户 组: 普通用户
  • 注册时间: 2005-02-22 16:23
文章分类

全部博文(29)

文章存档

2009年(3)

2008年(1)

2007年(1)

2006年(3)

2005年(21)

我的朋友

分类: WINDOWS

2005-10-17 15:27:49

96,97年写的东西.那时候就对网络很有兴趣了,这是第四部分

第四章  各命令参数块详解

第一节:初始化及控制

  1.LLC_DIR_INITIALIZE

    该命令需要用到LLC_DIR_INITIALIZE_PARMS参数结构

      该结构成员有:

  • USHORT  usBringUps;     IBM令牌环网使用,PC NETWORK或以太网无用

  • UCHAR   Reserved[30];   保留,用于DOS

     

    ; 初始化 DLC例子(MASM32)

    .386

     .mode flat,stdcall                 ;平板式内存,标准调用(C方式)

     option casemap:none          ;区别大小写

     include windows.inc          ;包含常量文件

     include dlcapi.inc            ;DLC调用

     include masm32.inc       ;一些共用函数

     includelib dlcapi.lib

     includelib masm32.lib

     .data?

     CCB   LLC_CCB                 ;定义数据结构

     BadCCB   LLC_CCB

     InitParms   LLC_DIR_INITIALIZE_PARMS 

     .code

     start:

      mov  eax,addr CCB

     invoke ZeroMemory,eax,sizeof CCB

     mov eax,LLC_DIR_INITIALIZE    ;命令=初始化

     mov CCB.uchDlcCommand,eax

     mov eax,addr InitParms

     invoke ZeroMemory,eax,sizeof InitParms

     mov eax,addr InitParms   ;把参数表的地址放入CCB块的U结构的pParameterTable中

     mov CCB.u.pParameterTable,eax    

     invoke AcsLan,addr CCB,addr BadCCB     ;调用AcsLan函数

     assume edi:LLC_CCB                                  ;强制EDI寄存器指向LLC_CCB数据结构

     invoke StdOut,[edi].uchDlcStatus       ;

     assume edi:nothing   

     end start

2.LLC_DIR_OPEN_ADAPTER

  该命令需要用到LLC_DIR_OPEN_ADAPTER_PARMS参数结构

  在此结构中又要用到PLLC_ADAPTER_OPEN_PARMS, PLLC_EXTENDED_ADAPTER_PARMS ,PLLC_DLC_PARMS等三个结构

   结构成员:

  •    PLLC_ADAPTER_OPEN_PARMS pAdapterParms

  •    PLLC_EXTENDED_ADAPTER_PARMS pExtendedParms

  •    PLLC_DLC_PARMS pDlcParms    

  •    PVOID pReserved1       保留

   以下是各成员的详解

   A.   PLLC_ADAPTER_OPEN_PARMS

        该结构的成员描述:

        USHORT  usOpenErrorCode ; 指示打开适配器测试的结果

        USHORT  usOpenOptions   ; 一个十六位值下面按位进行描述

                第15位:不配置自身到网上,相反,把用户发送的数据作为接收数据接收

                第14位:屏蔽硬件错误

                第13位:屏蔽软件错误

                第12位:已过时不用

                第11位: 已过时不用

                第10位:保留为0

                第9位:保留为0

                第8位:加入监控

                第7位:已过时不用

                第6位:保留为0

                第5位:在一个打开的进程运行期间,防止适配器作为监控

                第4位:主要针对早期令牌环网

                第3,2,1,0位:都必须保留为0

        UCHAR auchNodeAddress[6]

              指定适配器的LAN地址

        UCHAR auchGroupAddress[4]

              指定组地址,如为0,则无组地址

        UCHAR auchFunctionAddress[4]

              指定将接收消息的适配器的函数地址

        USHORT 保留

        USHORT 保留

        USHORT usMaxFrameSize;

               在NDIS中定义的最大尺寸(帧)

        USHORT 保留3[4]

        USHORT usBringUps;用于令牌环网测试

        USHORT InitWarnings;0为无错误,1为无参数发现,2为有错

        USHORT 保留[3]    

   B.PLLC_EXTENDED_ADAPTER_PARMS 该结构的成员描述:

        PVOID  hBufferPool;

               缓冲池句柄,此句柄用于LLC_BUFFER_CREATE命令

        PVOID  pSecurityDescriptor

               95/98不用,NT,W2K是一个安全描述符

        LLC_ETHERNET_TYPE   LlcEthernetType

               以太网类型值,有以下几种:

               LLC_ETHERNET_TYPE_DEFAULT;使用注册表中的参数

               LLC_ETHERNET_TYPE_AUTO;自动配置类型

               LLC_ETHERNET_TYPE_802_3;使用802.3LAN头

               LLC_ETHERNET_TYPE_DIX;使用DIX SNA类型

   C.PLLC_DLC_PARMS 该结构的成员描述:

               UCHAR uchDlcMaxSaps;在同一时间内打开的最大SAP数,默认为2

               UCHAR uchDlcMaxStations;在同一时间内可打开的最大链接站点数,默认为6

               UCHAR uchDlcMaxGroupSaps;在同一时间内打开的最大SAP组数,如果值为0,则无组数

               UCHAR uchDlcMaxGroupMembers;分配给一组的最大SAP数

               ...

   例子:

       .data?

        hEvent DWORD ?

       .code
       invoke CreateEvent,NULL,FALSE,FALSE,NULL   ;建立通知事件

              mov hEvent,eax;保存事件句柄

       invoke ZeroMemory,addr CCB,sizeof CCB

       mov eax,LLC_DIR_OPEN_ADAPTER

       mov CCB.uchDlcCommand,eax    ;命令为打开适配器,

       invoke ZeroMemory,addr OpenParms,sizeof OpenParms

       mov eax,addr OpenParms

       mov CCB.u.pParameterTable,eax   ;指定参数表为打开适配器参数表

       invoke ZeroMemory,addr AdapterOpenParms,sizeof AdapterOpenParms

       mov eax,addr AdapterOpenParms

       mov OpenParms.pAdapterParms,eax  ;参数表的适配器参数字段指向适配器参数结构

       invoke ZeroMemory,addr ExtendedAdapterParms,sizeof ExtendedAdapterParms

       mov eax,LLC_ETHERNET_TYPE_DEFAULT

       mov ExtendedAdapterParms.LlcEthernetType,eax

       mov eax,addr ExtendedAdapterParms

       mov OpenParms.pExtendedParms,eax

       invoke ZeroMemory,addr DlcParms,sizeof DlcParms

       mov eax,addr DlcParms

       mov OpenParms.pDlcParms,eax

       mov eax,hEvent

       mov CCB.hCompletionEvent,eax

       invoke ResetEvent,eax

       invoke AcsLan,addr CCB,addr BadCCB

       invoke WaitForSingleObject,hEvent,5000

       ...

3.LLC_DIR_OPEN_DIRECT

 该命令需要用到LLC_DIR_OPEN_DIRECT_PARMS数据结构

    数据结构成员详解

    USHORT Reserved[4];保留

    USHORT usOpenOptions  ;目前无说明

    USHORT usEthernetType; 指定一个LLC_ETHERNET_TYPE类型 (前一节有描述)

    ULONG  ulProtocolTypeMask;

    ULONG  ulProtocolTypeMatch;

    ULONG  ulProtocolTypeOffset;

           前面三项是可选的,如果指定了此三项,则使之只能接收某一固定类型的帧

    例子:

   .code

   mov eax,LLC_DIR_OPEN_DIRECT

   mov CCB.uchDlcCommand,eax

   .data?

     opend LLC_DIR_OPEN_DIRECT_PARMS

   .code

   invoke ZeorMemory,addr opend,sizeof opend

   mov eax,0806h ;ARP协议

   mov  opend.usEthernetType,eax

   .data

   STATION_ID DWORD 0

     .code

   mov  eax,STATION_ID

      mov   CCB.u.dlc.usStationId,eax

      mov    eax,0

   mov  opend.ulProtocolTypeMask,eax

   mov  opend.ulProtocolTypeMatch,eax

   mov  eax,2

   mov  opend.ulProtocolTypeOffset,eax

   mov  eax,addr opend

   mov  CCB.u.pParameterTable,eax

      mov   eax,hEvent

      mov   CCB.hCompletionEvent ,eax

   invoke ResetEvent,eax

   invoke AcsLan,addr CCB,addr BadCCB

      invoke WaitForSingleObject,hEvent,5000

       ...

4 LLC_DIR_SET_EXCEPTION_FLAGS

 

该命令定义一例外标志,所带u参数为LLC_DIR_SET_EFLAG_PARMS

这些标志的每个成员被用于请求由应用程序发出的相关例外事件信息,你必须在调用LLC_DIR_OPEN_ADAPTER命令后立即发出此命令,然后发出LLC_READ命令,设置LLC_CCB结构的成员hComplerionEvent,无论何时,当一个例外出现时,命令将被执行,错误码由设备驱动程序返回

以下是该结构的描述:

typedef struct {
    ULONG ulAdapterCheckFlag;//用户定义的检查适配器标志,如为0,则不通知错误
    ULONG ulNetworkStatusFalg;//网络
    ULONG ulPcErrorFag;       //本工作站
    ULONG ulSystemActionFalg;
} LLC_DIR_SET_EFLAG_PARMS, *PLLC_DIR_SET_EFLAG_PARMS;

    

 

 

阅读(2578) | 评论(0) | 转发(0) |
0

上一篇:DLC协议三

下一篇:DLC协议五

给主人留下些什么吧!~~