在一个应用程序,如何监测一个service内部的数据的变化

在一个应用程序中,我们除了想要使MainActivity中的数据可以传到service中外,我们还可能需要监测service内部的数据的变化。那么我们就可以通过接口回调的方法来达到这个目的。我们先来看一下这个程序的框架,也就是framework.接下来我们来看一下MainActivity中的具体的内容。MainActivity程序中的内容如下:
package com.example.myapplication;

import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

/*主线程的UI不允许被其它的线程直接修改,可以通过handle来进行修改。注意这里还需要实现相关的接口
ServiceConnectionbindService(new Intent(MainActivity.this, MyService.class), MainActivity.this, BIND_AUTO_CREATE);这是要注意的。还需要注意的一点是,如果我们需要改变主线程中UI中的内容,那么我们可以通过handler来做,否则很可能就会出现错误。*/

public class MainActivity extends AppCompatActivity implements ServiceConnection {


    private TextView tv;
    private EditText et;
    private Button btn1;
    private Button btn2;
    private Button btn3;
    private Button btn4;
    private MyService.MyBinder binder;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
        setListener();
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
    }

    public void setListener() {
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, MyService.class);
                intent.putExtra("data", et.getText().toString());
                startService(intent);
            }
        });


        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                stopService(new Intent(MainActivity.this, MyService.class));
            }
        });

        btn3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                bindService(new Intent(MainActivity.this, MyService.class), MainActivity.this, BIND_AUTO_CREATE);
            }
        });


        btn4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                unbindService(MainActivity.this);

            }
        });




    }

    public void init() {
        tv = (TextView) findViewById(R.id.tv);
        et = (EditText) findViewById(R.id.et);
        btn1 = (Button) findViewById(R.id.btn);
        btn2 = (Button) findViewById(R.id.btn2);
        btn3 = (Button) findViewById(R.id.btn3);
        btn4 = (Button) findViewById(R.id.btn4);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        binder = (MyService.MyBinder) service;
        binder.setStr(et.getText().toString());
        MyService myService = (MyService) binder.getService();
        /*注意这里是setCallBack,而不是getCallBack*/
        myService.setCallBack(new CallBack() {
            @Override
            public void onChangeData(String string) {
                Message message=new Message();
                Bundle bundle = new Bundle();
                bundle.putString("data", string);
                message.setData(bundle);
                handler.sendMessage(message);
            }
        });

    }

    @Override
    public void onServiceDisconnected(ComponentName name) {

    }

    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            String str = msg.getData().getString("data");
            tv.setText(str);
        }
    };
}
接下来我们来看一个MyService中的内容:
package com.example.myapplication;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;

public class MyService extends Service {
    private CallBack callBack=null;
    boolean isRunning=false;
    private String str = "默认信息";
    public MyService() {
    }

    public void setCallBack(CallBack callBack) {
        this.callBack = callBack;
    }

    public CallBack getCallBack() {
        return callBack;
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        return new MyBinder();
//        throw new UnsupportedOperationException("Not yet implemented");
    }
/*如果是通过startservice来进行启动的话,那么这个方法中的intent参数就可以和mainActivity进行数据的交互了
* */
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        str = intent.getStringExtra("data");
        return super.onStartCommand(intent, flags, startId);


    }
/*注意这里的线程的应用写错了,判断条件应该是在run里面的,否则的话,就会出错。*/
    @Override
    public void onCreate() {
        super.onCreate();
        isRunning=true;
            new Thread() {
                int i=0;
                @Override
                public void run() {
                    while (isRunning) {
                        i++;
                        String s=i+str;
                        Log.v("str-->", i + str);
                        if (callBack!=null) {
                            callBack.onChangeData(s);
                        }
                        try {
                            Thread.currentThread().sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }.start();



    }


    @Override
    public void onDestroy() {
        super.onDestroy();
        isRunning=false;
    }

//自定义一个Binder类的对象
    class MyBinder extends Binder{
        public void setStr(String s){
            str=s;

        }

        public Service getService(){
            return MyService.this;
        }
    }
}

最后我们还需要定义好一个接口:
package com.example.myapplication;

/**
 * Created by 李果 on 2016/7/9.
 */
public interface CallBack {
    void onChangeData(String string);
}

最后我们来看一下这个应用程序的界面如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
第1章 驱动程序开发环境 <br>第2章 测试驱动程序<br>第一部分 一般内核模式<br>第1章Windows 2000和WDM驱动程序<br>第2章 分层的I/O、IRP和I/O对象<br>第3章 系统定义的对象和对驱动程序的支持<br>第4章 驱动程序基本结构<br>第5章DriverEntry 和 Reinitialize 例程<br>第6章Dispatch例程<br>第7章StartIo和队列管理例程<br>第8章 中断服务例程<br>第9章 DpcForIsr例程和CustomDpc例程<br>第10章SynchCritSection例程<br>第11章AdapterControl和ControllerControl例程<br>第12章Cancel例程<br>第13章IoCompletion例程<br>第14章IoTimer和CustomTimerDpc例程<br>第15章Unload例程<br>第16章 常见的驱动程序设计问题<br><br>第1部分 图形驱动程序<br>第2部分 显示器及视频微端口驱动程序<br>第3部分 打印机驱动程序及假脱机打印部件<br><br>第五卷 网络驱动程序设计指南 1<br>第一部分 网络驱动程序 2<br>第一章 网络驱动程序设计指南的向导 3<br>第二章 内核模式驱动程序的网络结构 6<br>2.1 Windows 2000 网络结构和OSI模型 6<br>2.2 NDIS驱动程序 7<br>2.2.1 NDIS微端口驱动程序 7<br>2.2.2 NDIS中间层驱动程序 8<br>2.2.3 NDIS协议驱动程序 9<br>2.3 TDI驱动程序 9<br>2.4 网络驱动程序环境 9<br>2.4.1 无连接环境的网络驱动程序 10<br>2.4.2 面向连接环境下的网络驱动程序 10<br>2.4.3 WAN网络驱动程序的环境 11<br>第三章 网络驱动程序编程要点 13<br>3.1 可移植性 13<br>3.2 多处理器支持 13<br>3.3 IRQL 14<br>3.4 同步和指示 14<br>3.5 包结构 16<br>3.6 使用共享内存 17<br>3.7 异步I/O和完成函数 17<br>第二部分 微端口NIC驱动程序 19<br>第一章 NDIS NIC微端口驱动程序 20<br>1.1 NIC微端口驱动程序类型 20<br>1.2 网络接口卡支持 20<br>1.3 微端口驱动程序代码的重要特征 22<br>1.3.1 MiniportXxx函数 22<br>1.3.2 与NDIS库链接 22<br>1.3.3 微端口适配器环境 22<br>1.3.4 VC环境 23<br>1.3.5 网络OID 23<br>1.4 驱动程序例子 24<br>第二章 NIC微端口操作和函数概要 25<br>2.1 NIC微端口操作 25<br>2.1.1 初始化NDIS库和注册微端口驱动程序 25<br>2.1.2 注册网络接口卡 25<br>2.1.3 对查询和设置微端口信息作出响应 26<br>2.1.4 产生,激活,去活,和删除虚连接 26<br>2.1.5 发送数据 27<br>2.1.5.1 多包发送 27<br>2.1.5.2 单包发送 28<br>2.1.6 指示和传递接收的数据 28<br>2.1.6.1 多包接收 29<br>2.1.6.2 单包接收 29<br>2.1.7 指示状态 30<br>2.1.8 复位网络接口卡 30<br>2.1.9 终止一个微端口NIC驱动程序 30<br>2.2 微端口上层函数 30<br>2.2.1 无连接微端口的上层函数 31<br>2.2.2 面向连接微端口的上层函数 32<br>2.3 由微端口调用的NDIS函数 33<br>2.3.1 NDIS提供的初始化和注册函数 34<br>2.3.2 NDIS提供的硬件设置函数 35<br>2.3.3 NDIS提供的I/O端口函数 36<br>2.3.4 NDIS数据的与DMA相关的函数 37<br>2.3.5 NDIS提供的中断处理函数 38<br>2.3.6 NDIS提供的同步函数 38<br>2.3.7 NDIS提供的状态函数 39<br>2.3.8 NDIS为无连接微端口提供的发送和接收函数 39<br>2.3.9 NDIS为面向连接微端口提供的发送和接收函数 40<br>2.3.10 NDIS提供的带外数据宏 41<br>2.3.11 NDIS提供的包和缓存处理函数 41<br>2.3.12 NDIS提供的支持函数 43<br>2.3.13 NDIS提供的媒体相关宏 46<br>第三章 NIC微端口驱动程序入口点和初始化 47<br>3.1 NDIS微端口驱动程序入口函数 47<br>3.1.1 初始化包裹 47<br>3.1.2 注册微端口 48<br>3.1.2.1 指定NDIS版本号 48<br>3.1.2.2 注册MiniportXxx函数 48<br>3.1.2.3 为中断支持的注册处理程序 50<br>3.1.2.4 为无连接微端口选择一个发送函数 51<br>3.1.2.5 为无连接微端口选择接收函数 51<br>3.1.2.6 注册一个分配完成处理程序 52<br>3.1.2.7 注册一个挂起检测(CheckForHang) 处理程序 52<br>3.2 NDIS微端口初始化 53<br>3.2.1 注册一个NIC 53<br>3.2.1.1 分配一个适配器指定的环境区域 54<br>3.2.1.2 读取配置信息 54<br>3.2.1.3 注册NIC 54<br>3.2.2 声明资源 55<br>3.2.2.1 分配内存 55<br>3.2.2.2 注册端口 56<br>3.2.2.3 总线管理器DMA设备初始化 56<br>3.2.2.4可编程I/O设备初始化 57<br>3.2.2.5 内存映射设备初始化 58<br>3.2.2.6 从属DMA设备初始化 58<br>3.2.3 注册一个中断 59<br>3.2.4 注册一个关闭函数 59<br>3.2.5 初始化轮询时钟 59<br>3.2.6 在初始化当中的同步 60<br>3.2.7 在初始化时处理错误 60<br>3.3 查询微端口信息 61<br>3.4 减少微端口初始化时间 61<br>第四章 数据传输 64<br>4.1 中断处理 64<br>4.2 DPC处理程序 66<br>4.3 带外(OOB)数据包 66<br>4.3.1 等待发送的OOB数据 67<br>4.3.2 接收的OOB数据 68<br>4.4 发送包 69<br>4.4.1 无连接微端口的多包传送 70<br>4.4.1.1 串行微端口的多包传送 70<br>4.4.1.2 非串行微端口的多包传送 71<br>4.4.2 无连接微端口的单包发送 71<br>4.4.3 面向连接微端口的多包发送 72<br>4.4.4 发送数据前的内存同步 73<br>4.4.5 发送步骤 74<br>4.4.5.1 在总线控制器DMA NIC上发送包 74<br>4.4.5.2 在PIO设备上发送单包 76<br>4.4.5.3 使用板上内存发送包 77<br>4.5 非串行微端口 78<br>4.5.1 非串行微端口的NDIS要求 78<br>4.5.2 非串行微端口的驱动程序内部要求 78<br>4.6 接收数据 79<br>4.6.1 无连接和面向连接微端口的多包接收 79<br>4.6.2 无连接微端口的单包接收 82<br>4.6.3 接收数据的高速缓存(Cache)因素 83<br>4.6.4 接收数据的步骤 83<br>4.6.4.1 接收期间的包管理 84<br>4.6.4.2 在总线控制器DMA NIC上接收数据 84<br>4.6.4.3 在PIO NIC上接收数据 85<br>4.6.4.4 在内存映射设备上接收数据 85<br>4.7 保持统计量 85<br>4.8 802.1P 包的优先权 86<br>4.8.1 查询802.1p优先权支持 87<br>4.8.2 802.1优先权的包支持 87<br>4.8.3 为发送和接收指定包的大小 88<br>4.8.4 默认情况下禁止802.1p的优先权支持 88<br>第五章 获取和设置WMI的微端口信息及NDIS支持 89<br>5.1 NDIS管理信息和OID 89<br>5.2 查询微端口信息 89<br>5.2.1 无连接微端口的查询 90<br>5.2.2 面向连接微端口的查询 91<br>5.3 设置微端口信息 92<br>5.3.1 为无连接微端口设置信息 92<br>5.3.2 为面向连接微端口设置信息 92<br>5.3.3 设置微端口信息的时机 93<br>5.4 报告硬件状态 93<br>5.5 WMI的NDIS支持 94<br>5.5.1 用WMI注册与注销NDIS微端口 94<br>5.5.2 OID和微端口状态的GUID映射 94<br>5.5.3 支持命名VC 94<br>5.5.4 NDIS支持的WMI操作 95<br>5.5.5 向WMI注册标准微端口OID 95<br>5.5.6 向WMI注册的标准微端口状态 97<br>5.5.7 定制OID与状态指示 98<br>5.5.7.1 填充NDIS_GUID 98<br>5.5.7.2 包括MOF文件 99<br>第六章 微端口的电源管理 100<br>6.1 电源管理的需求与可选的OID 100<br>6.2 网络设备电源状态 101<br>6.3 网络唤醒事件 102<br>6.3.1 连接改变唤醒 102<br>6.3.2 网络唤醒帧 102<br>6.3.3 魔包唤醒 103<br>6.3.4 启用唤醒事件 103<br>6.3.5 处理唤醒事件 103<br>6.4 处理OID_PNP_QUERY_POWER 104<br>6.5 处理OID_PNP_SET_POWER 104<br>6.5.1 转入睡眠状态 104<br>6.5.2 转入工作状态 104<br>6.6 早期微端口的电源管理 105<br>第七章 重置,停止和关闭 106<br>7.1 硬件重置(Reset) 106<br>7.2 停止(Halt)处理程序 106<br>7.3 关闭(Shutdown)处理程序 107<br>第八章 广域网微端口 NIC驱动程序 109<br>8.1 RAS 体系结构 109<br>8.2 NDISWAN 概述 111<br>8.3 网络卡、绑定、和连接 113<br>8.4 广域网微端口驱动程序的实现 114<br>8.4.1 标准广域网微端口驱动程序与局域网微端口驱动程序的区别 115<br>8.4.2 CoNDIS广域网微端口驱动程序的附加特性 115<br>8.4.3 广域网微端口驱动程序提供的服务 116<br>8.4.3.1 注册为广域网微端口驱动程序 116<br>8.4.3.2 查询广域网微端口驱动程序的信息 117<br>8.4.3.3 设置广域网小段口驱动程序的状态 122<br>8.4.3.4 在广域网微端口驱动程序上发送数据 123<br>8.4.4 广域网微端口驱动程序做出的指示 125<br>8.4.4.1 指示从标准广域网微端口驱动程序接收数据 125<br>8.5 广域网包的组帧 128<br>8.5.1 异步帧结构 128<br>8.5.2 X.25帧结构 128<br>8.5.3 ISDN和Switched-56K帧结构 128<br>8.6 标准NDIS之上的电话服务扩展 128<br>8.6.1 NDISTAPI概述 129<br>8.6.2 线路设备、地址和呼叫 129<br>8.6.3 设置和查询请求 130<br>8.6.4 保持状态信息 130<br>8.6.5 建立句柄 131<br>8.6.6 TAPI注册 131<br>8.6.7 TAPI初始化 132<br>8.6.8 打开线路 133<br>8.6.9 接受内入呼叫 133<br>8.6.10 产生TAPI呼叫 134<br>8.6.11 主动事件处理 135<br>8.6.12 Line-Up指示 135<br>8.6.13 关闭呼叫线路 137<br>8.6.14 NDISTAPI接口 139<br>8.7 使用支持电话服务的CoNDIS扩展 143<br>8.7.1 NDPROXY概述 143<br>8.7.2 CoNDIS TAPI注册 144<br>8.7.3 CoNDIS TAPI初始化 144<br>8.7.4 建立外出呼叫 146<br>8.7.5 接受内入呼叫 147<br>8.7.6 CoNDIS TAPI关闭 150<br>8.7.7 语音流对呼叫管理器的要求 151<br>8.7.7.1 响应OID_CO_TAPI_LINE_CAPS查询 151<br>8.7.7.2 为外出呼叫指定参数 151<br>8.7.7.3 为内入呼叫指定参数 152<br>8.7.8 在面向连接NDIS之上支持电话服务的非广域网专用的扩展 152<br>第九章 任务卸载 153<br>9.1 查询任务卸载能力 153<br>9.1.1 报告NIC的校验和性能 154<br>9.1.2 报告NIC的IP安全性性能 155<br>9.1.3 报告NIC的TCP包分段性能 157<br>9.2 启用任务卸载能力 157<br>9.3 停用任务卸载能力 158<br>9.4 访问Per-Packet信息 158<br>9.5 卸载TCP/IP校验和任务 159<br>9.6 卸载IP安全任务 161<br>9.7 卸载大TCP包分段 164<br>9.8 卸载组合 165<br>9.9 使用注册表键值激活和禁止任务卸载 166<br>第十章 负载平衡和失效替换 166<br>10.1 关于LBFO 167<br>10.2 指定对LBFO的支持 168<br>10.3 在微端口驱动程序上实现LBFO 168<br>10.3.1 初始化微端口束 168<br>10.3.2 平衡微端口驱动程序的工作量 169<br>10.3.3 在主微端口失效后提升一个次微端口 169<br>第十一章 快速转发路径 169<br>11.1 关于FFP 170<br>11.1.1 使用一个NIC的FFP 170<br>11.1.2 使用多个NIC的FFP 170<br>11.1.3 IP转发 171<br>11.1.4 FFP和包过滤 171<br>11.2 NIDS中的FFP支持 172<br>11.3 为IP转发在微端口实现FFP 172<br>第十二章 带WDM低级接口的微端口驱动程序 174<br>12.1 WDM低层微端口 174<br>12.2 注册WDM低层的微端口函数 174<br>12.3 初始化WDM低层微端口 175<br>12.4 发布命令与远程设备通信 176<br>12.4.1 在总线上发送包 176<br>12.4.2 在总线上接收包 176<br>12.5 WDM低层的实现要点 176<br>12.6 WDM低层的编译标志 177<br>第十三章 IrDA微端口NIC驱动程序 178<br>13.1 IrDA微端口驱动程序简述 178<br>13.2 IrDA体系结构 179<br>13.3 IrDA协议驱动程序 179<br>13.4 IrDA介质特征 179<br>13.4.1 通信连接速度 180<br>13.4.2 通信连接回转时间 180<br>13.4.3 接收器同步 181<br>13.5 IrLAP帧格式 182<br>13.5.1 帧格式简述 182<br>13.5.2 帧信息的使用 183<br>13.5.3 地址成员 183<br>13.6 IrDA微端口驱动程序包编码方案 183<br>13.6.1 SIR编码 184<br>13.6.2 MIR编码 184<br>13.6.3 FIR编码 184<br>13.7 发送和接收帧序列 185<br>13.8 即插即用 185<br>13.8.1 非即插即用外部串行连接SIR适配器 185<br>13.8.2 非即插即用内部SIR适配器或者象串口一样错误地呈现于外的内部SIR适配器 186<br>13.8.3 即插即用外部串行连接SIR适配器 186<br>13.8.4 即插即用内部SIR适配器 186<br>13.8.5 非即插即用总线连接FIR适配器 187<br>13.8.6 即插即用总线连接FIR适配器 187<br>第三部分NDIS中间层驱动程序和TDI驱动程序 189<br>第一章 NDIS中间层驱动程序 189<br>1.1中间层驱动程序的DriverEntry函数 191<br>1.1.1 注册NDIS中间层驱动程序 191<br>1.1.1.1注册中间层驱动程序的Miniport 192<br>1.1.1.2注册中间层驱动程序的协议 194<br>1.2 中间层驱动程序的动态绑定 196<br>1.2.1 打开中间层驱动程序下层的适配器 197<br>1.2.2 微端口初始化 198<br>1.2.3 中间层驱动程序查询和设置操作 199<br>1.2.4作为面向连接客户程序注册中间层驱动程序 201<br>1.3中间层驱动程序数据包管理 203<br>1.4 中间层驱动程序的限制 205<br>1.5 中间层驱动程序接收数据 206<br>1.5.1下边界面向无连接的中间层驱动程序接收数据 206<br>1.5.2下边界面向连接的中间层驱动程序接收数据 208<br>1.5.3向高层驱动程序指示接收数据包 209<br>1.6通过中间层驱动程序传输数据包 210<br>1.6.1传递介质相关信息 211<br>1.7处理中间层驱动程序的PnP事件和PM事件 212<br>1.7.1处理OID_PNP_XXX查询和设置 213<br>1.7.2中间层驱动程序ProtocolPnPEvent处理程序的实现 214<br>1.7.3处理规定的电源请求 214<br>1.8中间层驱动程序复位操作 215<br>1.9中间层驱动程序拆除绑定操作 216<br>1.10中间层驱动程序状态指示 217<br>第二章 NDIS协议驱动程序 219<br>2.1 协议DriverEntry及其初始化 220<br>2.1.1注册NDIS协议驱动程序 220<br>2.1.2 打开中间层驱动程序低层的适配器 223<br>2.1.3 协议驱动程序查询和设置操作 224<br>2.1.4作为呼叫管理器或者面向连接客户程序进行注册 225<br>2.2 协议驱动程序数据包管理 229<br>2.3 协议驱动程序的动态绑定 230<br>2.4 协议驱动程序接收数据 231<br>2.4.1下边界面向无连接的中间层驱动程序接收数据 231<br>2.4.1.1 在中间层驱动程序中实现ProtocolReceivePacket处理程序 232<br>2.4.1.2 在协议驱动程序中实现ProtocolReceive处理程序 233<br>2.4.1.3 从面向无连接协议驱动程序中访问OOB数据信息 234<br>2.4.2 面向连接协议驱动程序接收数据 234<br>2.4.2.1 ProtocolCoReceivePacket处理程序实现 235<br>2.4.2.2 从面向连接协议驱动程序中访问OOB数据信息 235<br>2.5 发送协议驱动程序创建的数据包 236<br>2.5.1 从面向无连接协议驱动程序发送数据包 236<br>2.5.1.1面向无连接协议驱动程序传递介质相关信息 237<br>2.5.2 面向连接协议驱动程序发送数据包 238<br>2.5.2.1面向连接协议驱动程序传递介质相关信息 238<br>2.6处理协议驱动程序的PnP事件和PM事件 239<br>2.7协议驱动程序复位操作 240<br>2.8协议驱动程序拆除绑定操作 241<br>2.9协议驱动程序状态指示 241<br>第三章 TDI传输器及其客户 243<br>3.1 传输驱动程序接口(TDI) 243<br>3.2 TDI设备对象 245<br>3.3 TDI文件对象 246<br>3.3.1代表传输地址的文件对象 247<br>3.3.2代表连接端点的文件对象 247<br>3.3.3代表控制信道的文件对象 248<br>3.4 TDI传输驱动程序例程 248<br>3.5 TDI核心模式客户交互 249<br>3.6 TDI请求及事件 250<br>第四章 TDI例程、宏和回调 251<br>4.1 TDI驱动程序初始化 251<br>4.1.1 注册TDI传输驱动程序 252<br>4.1.2 卸载和注销TDI传输驱动程序 252<br>4.2 TDI驱动程序调度例程 253<br>4.3 TDI IOCTL请求 254<br>4.4 TDI 客户回调 255<br>4.5 TDI 库函数和宏 257<br>第五章 TDI操作 260<br>5.1打开传输地址 260<br>5.2打开连接端点 261<br>5.3打包并提交IOCTL请求 262<br>5.4设置和查询信息 262<br>5.5建立端端连接 263<br>5.6发送和接收面向连接数据 264<br>5.7发送和接收无连接数据 266<br>5.8面向连接和面向无连接传输 267<br>5.9请求传输相关操作 268<br>5.10接收错误通知 268<br>5.11断开端端连接 268<br>5.12关闭连接端点 269<br>5.13关闭传输地址和控制信道 269<br>第六章Windows Sockets的传输助手DLLS 271<br>6.1 Windows Sockets Helper DLL结构 271<br>6.2用WSH DLL通信 271<br>6.3配置WSH DLL 272<br>6.4WSH DLL同步 272<br>6.5用WSH DLL支持连接和断开数据 273<br>6.5.1客户应用程序和连接数据 273<br>6.5.2服务器应用程序和连接数据 273<br>6.5.3断连(disconnect)数据 274<br>6.6WSH DLL函数总览 274<br>第四部分面向连接的网络驱动程序接口标准(NDIS) 276<br>第一章 面向连接的网络驱动程序接口标准(NDIS) 276<br>1.1面向连接环境 276<br>1.2使用AFs,VCs,SAP和Parties 277<br>1.2.1地址族 277<br>1.2.2虚连接 277<br>1.2.3 SAPs 278<br>1.2.4 Parties 278<br>1.3服务质量 278<br>1.4MCM和呼叫管理器有何不同 278<br>1.4.1初始化的不同 279<br>1.4.2对NdisXxx函数调用的不同 279<br>1.4.3虚连接的不同 279<br>1.5面向连接的时间特性 280<br>1.6面向连接操作 280<br>1.6.1面向连接操作总结 280<br>1.6.1.1由客户执行的面向连接操作 280<br>1.6.1.2由呼叫管理器执行的面向连接操作 281<br>1.6.1.3由微端口执行的面向连接操作 282<br>1.6.2地址族和SAPs上的操作 283<br>1.6.2.1注册并打开一个地址族 283<br>1.6.2.2注册一个SAP 284<br>1.6.2.3注销SAP 285<br>1.6.2.4关闭一个地址族 285<br>1.6.3 VCs上的操作 286<br>1.6.3.1创建VC 286<br>1.6.3.2激活VC 287<br>1.6.3.3使VC去活 288<br>1.6.3.4删除VC 289<br>1.6.4创建呼叫 289<br>1.6.4.1进行呼叫 290<br>1.6.4.2指示内入呼叫 291<br>1.6.5改变活动VC的QoS 292<br>1.6.5.1客户发起的改变呼叫参数请求。 292<br>1.6.5.2改变呼叫参数的内入请求 293<br>1.6.6增加和删除Parties 293<br>1.6.6.1把一个Party加入到多点呼叫 293<br>1.6.6.2从多点呼叫中删除Party 294<br>1.6.6.3从多点呼叫中删除一个Party的内入请求 295<br>1.6.7发送并接收数据 295<br>1.6.7.1在VC上发送包 295<br>1.6.7.2接收VC上的包 296<br>1.6.8断开呼叫 297<br>1.6.8.1客户发起的关闭呼叫请求 297<br>1.6.8.2关闭呼叫的内入请求 298<br>1.6.9获取并设置信息 298<br>1.6.9.1查询或设置信息 298<br>1.6.9.2指示微端口状态 299<br>1.6.10重置 299<br>第五部分 安装网络组件 301<br>第一章 安装网络组件 301<br>1.1用于安装网络组件的组件和文件 301<br>1.2创建网络INF文件 302<br>1.2.1网络INFS文件名的约定 302<br>1.2.2网络INF文件的版本节 302<br>1.2.3网络INF文件的模型节 303<br>1.2.4 INF文件的DDInstall节 304<br>1.2.5删除节 306<br>1.2.6 ControlFlags节 306<br>1.2.7网络INF文件的add-registry-sections 306<br>1.2.7.1设置静态参数 307<br>1.2.7.2 为WAN适配器说明WAN端点 307<br>1.2.7.3为ISDN适配器说明ISDN键和值 307<br>1.2.7.4安装多协议WAN NICs 309<br>1.2.7.5请求安装另一个网络组件 310<br>1.2.7.6说明NetCLient组件的名字和提供者 310<br>1.2.7.7增加HelpText值 311<br>1.2.7.8为通知对象增加注册值 311<br>1.2.7.9向Ndi键增加服务相关值 311<br>1.2.7.10说明绑定接口 312<br>1.2.7.11为高级属性页说明配置参数 314<br>1.2.7.12为网络适配器说明定制属性页 315<br>1.2.7.13说明过滤器服务值 315<br>1.2.7.14说明束成员关系 317<br>1.2.7.15 Window 2000中不用的 Window 95/98 Ndi值和键 317<br>1.2.8 DDInstall.Service节 318<br>1.2.9 NetworkProrider和PrintProvider节 318<br>1.2.9.1包含一个NetworkProvider节 319<br>1.2.9.2 包括一个PrintProvider节 319<br>1.2.10 Winsock节 320<br>1.2.11网络组件安装需求总结 322<br>1.2.11.1网络适配器的安装需求 322<br>1.2.11.2网络协议安装要求 323<br>1.2.11.3中间层网络驱动程序的安装需求 324<br>1.2.11.4网络过滤器驱动程序的安装需求 325<br>1.2.11.5网络客户的安装需求 326<br>1.2.11.6网络服务的安装请求 327<br>第二章 网络组件的通知对象 328<br>2.1关于通知对象 328<br>2.1.1 通知对象图 329<br>2.1.2通知类型 329<br>2.1.3网络组件的安装 329<br>2.1.4删除网络组件 330<br>2.1.5升级网络组件 330<br>2.1.6显示并改变属性 330<br>2.1.7网络配置 331<br>2.2创建通知对象 331<br>2.2.1装载通知对象DLL和类对象 331<br>2.2.2定义通知对象 332<br>2.2.3创建并初始化通知对象实例 332<br>2.2.4安装,升级和删除组件 333<br>2.2.5为组件生成属性页 333<br>2.2.6设置环境来显示属性 334<br>2.2.7评价网络配置的变化 334<br>2.2.8将组件变化加入注册表 335<br>2.2.9配置组件驱动程序 335<br><br>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱coding的同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值