精华内容
下载资源
问答
  • 我将带领大家学习WDM驱动开发,包括重要的理论与实践。 我们逐步深入,在系列一和二的基础上慢慢推进,开始学习WDF驱动模型,包括面向对象和事件机制、重要的WDF对象,具体章节包括: 1)WDF编程框架:面向对象和...
  • 最近有需求需要开发一个驱动,需要开发一个不用鼠标键盘,通过发送消息来实现鼠标键盘功能的,虚拟驱动功能,因为模拟windows消息会被一些游戏识别成外挂。在研究的过程中遇见了好多的坑。在今日(4.7)终于把Hello...

    最近有需求需要开发一个驱动,需要开发一个不用鼠标键盘,通过发送消息来实现鼠标键盘功能的,虚拟驱动功能,因为模拟windows消息会被一些游戏识别成外挂。

    在研究的过程中遇见了好多的坑。在今日(4.7)终于把HelloWorld给安装成功,并断点到了。

    我采用的是vs2019+WDK10+WINDBG来实现的。先把几个坑给记录一下。再记下流程。

    1.运行,输入:bcdedit/set testsigning on 回车。(devcon Failed一般就是这个问题)

    打开签名认证开关,然后重启电脑,选择禁用驱动程序签名来启动。

    这个必须做,不然的话,安装驱动会总是失败。

    2.windbg显示Refreshing KD connection后,不能输入命令

    在启动的时候连接上机器后,会显示这个,在目标机器按CTRL+BREAK,就会进入断点了。

    3.几个驱动的查询和删除命令

    SC QUERY 【DriverName】;SC delete [DriverName]

    4.__asm int 3 在X64下不能使用的问题。

    汇编内联只能在X86系统下使用,所以类似于__asm int 3断点在X64下不能再使用了,但是提供了一个函数可以实现类似的结果__debugbreak();

    5.一直提示win10 sdk 10.0.17763.0下的一个文件包含错误。

    实际上我使用的SDK是win10 sdk 10.0.18362的,不知道为何总是提示这个。我再vs installer 里删除掉了10.0.17763仍然不行。最后是用everything查出所有10.0.17763的目录删除掉,就不会再有这问题,坑。

    6.windbg连上主机调试的方法,我采用的是com形式,-b -k com:pipe,port=.pipecom_1,resets=0,reconnect -y

    可以参考https://www.cnblogs.com/yapp/p/10270768.html,就是虚拟机设置里删除打印机,添加com1 接口。用命名管道的方式来。

    以上是几个坑。下面是真正的流程,网上很多流程,都有各种各样的问题,或者是不符合当前环境吧,最准确的还是要看微软官方的。

    https://docs.microsoft.com/zh-cn/windows-hardware/drivers/gettingstarted/writing-a-very-small-kmdf--driver

    安装好WDK10,在vs install里面安装好如下几张图的里所有内容。

    686f0eeb564c7da4ff2f5c2a9c169281.png

    7f5a68fd01a08f00d92ff5955beb6fc5.png

    5639a3a98b5e4330b9ee5377f7bfd8ab.png

    04e86df8ae2d043027b2176232101f2d.png
    展开全文
  • 该资源详细的介绍了windows驱动开发流程以及开发环境,以及WDM驱动和NT驱动的框架,是驱动入门的必备资源。
  • Windows WDM驱动开发

    2009-08-31 15:22:01
    Windows WDM驱动开发:主要讲述window的驱动开发基本流程,内容由浅入深,适合初学者
  • 本书由浅入深、循序渐进地介绍了Windows驱动程序的开发方法与调试技巧。本书共分23章,内容涵盖了 Windows操作系统的基本原理、NT驱动程序与WDM驱动程序的构造、驱动程序中的同步异步处理方法、驱 动程序中即插即...
  • Window CE 驱动开发流程Windows CE.5.0系统、pxa270平台为例:一.中断添加1.要使用中断必须先注册中断 D:/WINCE500/PLATFORM/MAINSTONEIII/src/inc/bsp_cfg.h参照wince自带的中断注册即可。注册值不能大于...

    Window CE 驱动开发流程

    以Windows CE.5.0系统、pxa270平台为例:

    一.中断添加
    1.要使用中断必须先注册中断 
          D:/WINCE500/PLATFORM/MAINSTONEIII/src/inc/bsp_cfg.h参照wince自带的中断注册即可。注册值不能大于SYSINTR_FIRMWARE+23。
    2.将硬件中断变为系统中断
          D:/WINCE500/PLATFORM/MAINSTONEIII/src/kernel/oal/intr.c 其中函数OALIntrStaticTranslate是实现硬件中断转换为系统中断的函数。可以参照别的中断产生的方法写你自己的中断。

    3.中断设置与初始化
          D:/WINCE500/PUBLIC/csp_pxa27x/oak/oal/common/intr/common/oem.c中的OEMInterruptEnable与OEMInterruptDisable函数,参照别的中断设置写自己的中断。
          可以在OEMInitInterrupts添加对中断的初始化,也可以在后面的中断处理线程(IST)中添加。

    二. 中断处理线程     
    1.创建线程CreateThread   
    2.创建事件CreateEvent    
    3.中断与事件绑定InterruptInitialize
    4.while()
          1)等待中断事件发生  WaitForSingleObject   
          2)确认有一个来自操作系统的事件
          3)在尽可能短的时间内处理中断
          4)调用 InterruptDone

    ---------------------------------------------------------------------------------------------
    DWORD   WINAPI   ThreadIST( LPVOID lpvParam )
    {

        DWORD   dwStatus;
        // 检查运行标志
        while( g_fRun )
        {
            dwStatus   = WaitForSingleObject(g_hevInterrupt, INFINITE);
            if( dwStatus == WAIT_OBJECT_0 )
            {
                // 在此处理中断
                //
                g_dwInterruptCount ++;
                // 完成中断
                //
                InterruptDone( g_dwSysInt );
            }
        }
        return 0;
    }

    ---------------------------------------------------------------------------------------------
    三. 驱动文件DLL
          用Platform Builder 新建一个Dll工程,在程序中添加流接口的一些标准函数:
          XXX.Init() 
          XXX_Deinit()
          XXX_IOControl()
          XXX_Open()
          XXX_Close()
          XXX_PowerDown()
          XXX_PowerUp()
          XXX_Read()
          XXX_Seek()
          XXX_Write()
          在XXX.Init里完成初始化,包括IST的创建等,此函数由系统自动调用。其它函数根据实际需要添加内容。
          然后添加一个.def文件用来配置dll所要导出的函数。
          LIBRARY dllname
                EXPORTS
                XXX_Init
                XXX_Deinit
                XXX_IOControl
                XXX_Open 
                XXX_Close
                XXX_PowerDown
                XXX_PowerUp
                XXX_Read
                XXX_Seek
                XXX_Write

          最后将它们编译成DLL文件。

    四. 添加驱动到系统
          将驱动dll拷贝D:/WINCE500/PBWorkspaces/PXA270/RelDir/MAINSTONEIII_ARMV4I_Release目录下。然后在D:/WINCE500/PLATFORM/MAINSTONEIII/files/Preject.bib中添加:
          MODULES
          ;  Name            Path                        Memory Type
          ;  --------------  ---------------------------------------------  -----------
          dllname.dll $(_FLATRELEASEDIR)/dllname.dll  NK SH

          其主要功能是在make image的时候把dllname.dll文件添加到系统内核中去。
          接下来还要在projiect.reg中添加:
          [HKEY_LOCAL_MACHINE/Drivers/BuiltIn/dllname]
           "Prefix"="XXX"
           "Dll"="dllname.dll"
          使系统在启动时加载驱动。当然也可以直接建立一个bib文件和reg文件,只要将它们放到platform的release目录下就行了。
          上述也可以通过编写cec文件来实现。

    展开全文
  • 用实例详细讲解PCI、USB、虚拟串口、虚拟摄像头、SDIO等驱动程序的开发,归纳了多种调试驱动程序的高级技巧,如用WinDBG和VMWARE软件对驱动进行源码级调试,深入Windows操作系统的底层和内核,透析Windows驱动开发的...
  • Windows CE驱动开发入门

    2009-07-07 11:23:03
    这是微软的官方培训资料,通过阅读可以对wince驱动开发流程有全面的认识。
  • 操作系统:windows 10 IDE版本:Android Studio 3.4.2 JAVA版本:jdk-8u221-windows-x64 NDK版本:android-ndk-r20-windows-x86_64 Kernel版本:linux 3.0 开发板android版本:android 4.0.3 硬件环境: ...

    QQ:971586331

    软件环境:

    操作系统:windows 10

    IDE版本:Android Studio 3.4.2

    JAVA版本:jdk-8u221-windows-x64

    NDK版本:android-ndk-r20-windows-x86_64

    Kernel版本:linux 3.0

    开发板android版本:android 4.0.3

    硬件环境:

    开发板:itop-4412 精英版

    本文内容:本文描述了如何使用android应用程序调用linux驱动控制LED灯的亮灭。要实现android应用程序控制LED,需要三个程序,LED的linux驱动,JNI库和android应用程序。android应用程序通过JNI库调用LED驱动程序,从而实现android应用程序控制LED。

    1.开发板环境搭建

    开发环境搭建请参考《iTOP-4412开发板之精英版使用手册_V3.1.pdf》,本文使用的配置是

    uboot:iTop4412_uboot_20180320.tar

    kernel:iTop4412_Kernel_3.0_20180604.tar

    android:iTop4412_ICS_git_20151120.tar

    编译完成后将ramdisk-uboot.img,system.img,zImage,u-boot-iTOP-4412.bin文件通过OTG或SD烧写到开发板的EMMC中,如果在uboot下使用OTG,发现windows 10装不上光盘中的android_drv_90000_64.exe驱动,可以谷歌搜索安装android_11000010001_x64_718.exe。

    2.LED的驱动程序

    LED驱动在kernel的drivers/char/itop4412-leds.c中,从itop4412-leds.c中我们可以得知LED驱动的设备文件名叫“leds”。驱动程序实现了ioctl函数。

    long leds_ioctl(struct file *filp,unsigned int cmd,unsigned long arg)
    {
    	printk("debug: leds_ioctl cmd is %d\n" , cmd);
    
    	switch(cmd)
    	{
    		case 0:
    		case 1:
    			if (arg > LED_NUM) {
    				return -EINVAL;
    			}
    
    			gpio_set_value(led_gpios[arg], cmd);
    			break;
    
    		default:
    			return -EINVAL;
    	}
    
    	return 0;
    }

    leds_ioctl的cmd参数表示灯的亮灯,arg参数表示灯的编号,根据文件中的定义可以知,0表示GPL2_0,也就是LED2,1表示GPK1_1,也就是LED3。

    static int led_gpios[] = {
    	EXYNOS4_GPL2(0),
    	EXYNOS4_GPK1(1),
    };

    接下来我们查看drivers/char/Makefile文件,宏CONFIG_LEDS_CTL控制LED驱动是否编译

    obj-$(CONFIG_LEDS_CTL)		+= itop4412_leds.o

    再查看drivers/char/Kconfig文件,默认就是y

    config LEDS_CTL
            bool "Enable LEDS config"
            default y
            help
              Enable LEDS config

    再查看.config,已经将LED驱动编入了内核

    CONFIG_LEDS_CTL=y

    看来板子的驱动已经做好了,完全不用我们动手,接下我们看怎么编写JNI接口调用linux驱动

    3.JNI和NDK

    因为android是使用java语言进行开发的,但linux驱动是用C语言进行开发的,所以面临java如果调用C语言接口的问题,JNI提供的API就是解决java和其他语言通信的问题。NDK 是一套工具集合,允许你使用C语言来实现应用程序的部分功能。我们写好JNI接口后使用NDK打包成库文件,就可以提供给android应用程序调用了。接下来我们新建工程编写JNI。

    新建一个空activity

    填写工程名,选择工程路径,开发语言选择java,API选择15

    创建工程后得待编译完成,然后在包名下创建一个名叫jni_led的类

    文件内容如下:

    package com.example.led_test;
    
    public class jni_led {
    
        public native static String Leds_Operation(int ledNum, boolean status); //操作接口
    }

    打开 Android Studio 的 Terminal,使用javac命令将java文件编译成.class文件

    F:\OneDrive\Linux\android_project\led_test>javac .\app\src\main\java\com\example\led_test\jni_led.java

    使用javah命令创建头文件。-encoding UTF-8表示指定编码格式,防止出现“错误: 编码GBK的不可映射字符”,-d jni表示在当前目录下创建jni目录,将生成的文件放在jni目录中,-classpath表示指定类文件的路径。这里有一个地方要注意,类文件在写的时候是包名+类名,所有路径只用写到java目录,后面的com,example和led_test虽然都是文件夹,但这里表示包名(第一次写在这里纠结了好久,我想我路径明明写对了啊,为什么找不到\app\src\main\java\com\example\led_test文件夹下的类)

    F:\OneDrive\Linux\android_project\led_test>javah -encoding UTF-8 -d jni -classpath ./app/src/main/java com.example.led_test.jni_led
    

    指令执行完成后可以发现在jni目录下生成了包名加类名的头文件

    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class com_example_led_test_jni_led */
    
    #ifndef _Included_com_example_led_test_jni_led
    #define _Included_com_example_led_test_jni_led
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     com_example_led_test_jni_led
     * Method:    Leds_Operation
     * Signature: (IZ)Ljava/lang/String;
     */
    JNIEXPORT jstring JNICALL Java_com_example_led_1test_jni_1led_Leds_1Operation
      (JNIEnv *, jclass, jint, jboolean);
    
    #ifdef __cplusplus
    }
    #endif
    #endif
    

    可以发现,头文件中根据jni_led.java中定义的java类接口生成了JNI接口函数,我们要实现这个接口函数。

    然后在JNI下创建com_example_led_test_jni_led.c文件

    在com_example_led_test_jni_led.c中,我们将头文件中的接口函数据复制过来,然后使用linux API操作linux设备文件

    //
    // Created by shiyu on 2019/8/17.
    //
    
    #include<jni.h>
    #include<stdio.h>
    #include <fcntl.h>
    #include <linux/ioctl.h>
    //导入我们创建的头文件
    #include "com_example_led_test_jni_led.h"
    
    #define DEVICE_NAME		"/dev/leds"
    
    JNIEXPORT jstring JNICALL Java_com_example_led_JNITest_Leds_1Operation
      (JNIEnv *env, jclass obj, jint ledsNum, jboolean status){
    
    int leds_fd = 0;
    
    	leds_fd = open(DEVICE_NAME, O_RDWR);  //打开设备节点
    	if (leds_fd == -1) {
    		return 1;
    	}
    
    	switch (ledsNum) {
    	case 0:
    		if (status)
    			ioctl(leds_fd, 0, 0);
    		else
    			ioctl(leds_fd, 1, 0);
    		break;
    	case 1:
    		if (status)
    			ioctl(leds_fd, 0, 1);
    		else
    			ioctl(leds_fd, 1, 1);
    		break;
    	defautl :
    		break;
    	}
    
    	close(leds_fd);
    
    	return 0;  //操作成功返回0
    }

    在jni下创建一个Android.mk文件

    
    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    
    LOCAL_MODULE := jni_led
    LOCAL_SRC_FILES := com_example_led_test_jni_led.c
    include $(BUILD_SHARED_LIBRARY)

    这时指定了生成库的名字和源文件,再新建一个Application.mk文件

    APP_ABI := all

    安装NDK工具集后,进入jni目录使用ndk-build命令将JNI接口程序编译成库文件

    在libs目录下生成了各种平台的库文件

    为了让项目能够找到我们的生成的库,在 build.gradle 文件夹的 android 下添加:

    sourceSets {
            main() {
                jniLibs.srcDirs = ['../libs']
                jni.srcDirs = [] //屏蔽掉默认的jni编译生成过程
            }
        }

    然后在jni_led.java中加载生成的库文件

    package com.example.led_test;
    
    public class jni_led {
        static {
            System.loadLibrary("jni_led");  //加载生成的.so文件
        }
        public native static String Leds_Operation(int ledNum, boolean status); //操作接口
    }

    接下来我们编写android应用程序利用Leds_Operation接口控制LED灯

    4.编写android应用程序

    打开工程目录下的activity_main.xml文件,添加4个button,并指写button的onClick回调函数

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
        <TableLayout
            android:id="@+id/TableLayout2"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:collapseColumns="4" >
    
            <TableRow>
    
                <Button
                    android:id="@+id/button_led3off"
                    android:layout_width="200dp"
                    android:layout_height="200dp"
                    android:onClick="led3_off_click"
                    android:text="led3_off"
                    tools:layout_editor_absoluteX="228dp"
                    tools:layout_editor_absoluteY="186dp" />
    
                <Button
                    android:id="@+id/button_led3on"
                    android:layout_width="200dp"
                    android:layout_height="200dp"
                    android:onClick="led3_on_click"
                    android:text="led3_on"
                    tools:layout_editor_absoluteX="98dp"
                    tools:layout_editor_absoluteY="186dp" />
    
                <Button
                    android:id="@+id/button_led2off"
                    android:layout_width="200dp"
                    android:layout_height="200dp"
                    android:onClick="led2_on_click"
                    android:text="led2_off"
                    tools:layout_editor_absoluteX="228dp"
                    tools:layout_editor_absoluteY="100dp" />
    
                <Button
                    android:id="@+id/button_led2on"
                    android:layout_width="200dp"
                    android:layout_height="200dp"
                    android:onClick="led2_off_click"
                    android:text="led2_on"
                    tools:layout_editor_absoluteX="98dp"
                    tools:layout_editor_absoluteY="100dp" />
            </TableRow>
        </TableLayout>
    
    </androidx.constraintlayout.widget.ConstraintLayout>

    我们为4个按键指定了4个回调函数据,接下来我们在MainActivity.java中实现这4个回调函数

    package com.example.led_test;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    import android.view.View;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        public void led2_on_click( View view )
        {
            jni_led.Leds_Operation(0, false);
        }
    
        public void led2_off_click( View view )
        {
            jni_led.Leds_Operation(0, true);
        }
    
        public void led3_on_click( View view )
        {
            jni_led.Leds_Operation(1, false);
        }
    
        public void led3_off_click( View view )
        {
            jni_led.Leds_Operation(1, true);
        }
    }
    

    如上,我们实现了这4个回调函数,调用jni_led库中的Leds_Operation函数,Leds_Operation会调用Java_com_example_led_JNITest_Leds_1Operation函数,这样就实现了android应用程序调用linux驱动接口。

    连接开发板,编译运行。

     

     

    展开全文
  • 针对windows2000下开发驱动程序的问题, 介绍了驱动程序开发模型,分析了该模型的工作原理给出了在系统下基于开发设备驱动程序的流程, 分析了驱动开发中的关健点 。在此基础上给出了个开发实例, 结合实例对开发设备...
  • 详解Windows驱动程序的发展由来,实战NT驱动、WDM驱动程序的开发制作,让学员掌握驱动开发的全部流程,整体架构,快速学会Windows驱动程序开发
  • 首先,最高效的应该是这种办法,但是最不稳定的也是这种办法。...具体流程不分析大概是这样,创建对象->Ob插入对象->系统访问(对象,这些对象是分配出来的不归PG管理)->根据对象Index->寻找对应Ob回调

    首先,最高效的应该是这种办法,但是最不稳定的也是这种办法。 虽然不会触发 PG ,但是由于调用方太多了,所以动不动炸进程或者蓝屏。

    进程对象(EPORCESS)->PsProcessType
    线程对象(PETHREAD)->PsThreadType
    文件对象(FileObject)->IoFileObjectType

    具体流程不分析大概是这样,创建对象->Ob插入对象->系统访问(对象,这些对象是分配出来的不归PG管理)->根据对象Index->寻找对应Ob回调->…(笼统来说,不喜勿喷)

    用Process在win 7 上做实验,这是win7-w10 结构对象

    在这里插入图片描述

    关注 +0x28位置,这是在寻找Object Context的依据 ,可见win7上 Object Type Index = 0x7
    随便哪个进程EProcess Object - 0x18(Object Header)emmm。。自己去看资料为什么-0x18

    在这里插入图片描述

    可以看到每个EPROCESS 的对象 index = 7.好了我们知道大概的流程
    1.获取对象地址 Object
    2.Object -0x18 = Object Index
    3.创建内核新对象->填充原始数据->替换原始对象->获取 (新对象+0x28)Index->解锁对象(这个很重要)
    4.替换 Object-0x18 = (新对象+0x28)
    5.收工。。最终效果

    在这里插入图片描述

    接着打开PCHUNTER火绒等等
    在这里插入图片描述

    触发自己对象回调

    在这里插入图片描述

    在这里插入图片描述

    POBJECT_TYPE_INITIALIZER ProcessType = (POBJECT_TYPE_INITIALIZER)(Object_type + 0x40);//OBJECT_TYPE_INITIALIZER 对象
        RtlZeroMemory(ObjectTypeInitializer, sizeof(OBJECT_TYPE_INITIALIZER));
        ObjectTypeInitializer->PoolType = NonPagedPool;
        ObjectTypeInitializer->InvalidAttributes = OBJ_OPENIF;
        ObjectTypeInitializer->ValidAccessMask = OBJECT_TYPE_ALL_ACCESS;
        ObjectTypeInitializer->RetainAccess = 1;
        ObjectTypeInitializer->OpenProcedure = (PVOID)NewPspProcessOpen;
        ObjectTypeInitializer->DumpProcedure = (PVOID)ProcessType->DumpProcedure;
        ObjectTypeInitializer->CloseProcedure = ProcessType->CloseProcedure;
        ObjectTypeInitializer->DeleteProcedure =  ProcessType->DeleteProcedure;
        ObjectTypeInitializer->ObjectTypeCode = 1;
        ObjectTypeInitializer->DefaultNonPagedPoolCharge = sizeof(OBJECT_TYPE_INITIALIZER);
        ObjectTypeInitializer->u.ObjectTypeFlags = 0x4a;
    
    展开全文
  • 代码来源及参考:wdk 7,路径:C:\WinDDK\7600.16385.1\src\general\event 这个例子演示了两种关于当硬件事件发生时,驱动如何通知应用程序的方法。...两种方法的处理流程: 1,基于event的方法 应用程序通过...
  • 驱动程序可以是针对某一特定硬件的,为系统提供管理硬件的各种功能;也可以是针对系统设备的,对系统的输入输出做一些处理,实现特定的功能,比如当...以前用mingw用习惯了,现在学习windows驱动程序开发,还要弄V...
  • 【我的】文件系统微过滤驱动Minifilter——绑定指定的卷(磁盘分区) 作者:zcr214 时间:2016/4/21   在编写文件系统微过滤驱动minifilter的时候,很有可能我们只对某一个特定...节省很多处理流程,比如系统盘的很
  • windows驱动编程入门

    万次阅读 2010-04-09 10:49:00
    必备工具:windows驱动开发包:wdk;调试工具:windbg;驱动加载工具:INSTDRV.exe 至于windows驱动的一些流程,说实话我也没弄太清楚,只不过先弄一个例子手动抄写一些,编译调试一下看看吧。例子程序是我在网上找...
  • WinCE设备驱动开发

    2013-10-26 15:59:20
    Windows CE设备驱动开发,详细介绍了各种外设如串口、块设备等的开发流程
  • Windows NT 和 2000驱动程序的基本层次结构 目的: 明确从应用程序到驱动程序一层层的函数调用的实现方式 2. Windows体系结构:体系结构中还有一个Pnp Manager(即插即用管理器):所有即插即用事件PnP配置管理器为驱动...
  • 之前的文章阐述过在windows平台下,如何实现USB虚拟总线驱动,以及如何在windows平台采集真实USB设备的数据, 然后通过网络传输,达到 ”延长“ USB线缆的效果。 相关链接如下:https://blog.csdn.net/fanxi...
  • Windows CE操作系统是微软针对嵌入式领域开发的一个全新的操作系统,具备抢占式多任务功能以及...本文所总结的驱动开发策略是流驱动的形式,可以运用于产生流式数据的设备或者与这种方式相关相近的设备驱动程序开发中。
  • windows ce开发入门

    2008-09-20 10:48:50
    详细介绍了ucos2以及windows ce开发流程,操作系统定制,bootloader制作,驱动程序开发已经应用程序开发平台的使用。
  • RTX提供了一套机制,可使现有的Windows PCI/ISA设备转换成RTSS程序可控的设备。也就是说,一个物理的设备,可以在windows和RTSS之间转换,但是不可以同时使用windows和RTSS两套系统
  • ndis协议驱动开发

    千次阅读 2015-10-17 10:48:12
    协议驱动开发流程: 首先,一个协议驱动调用函数ndisRegisterProtocol()先把自己注册为协议驱动,此举的意义告诉windows,我是一个ndis协议驱动,并将约定好的回调函数的列表告诉windows,这样以后当有与网络相关...
  • Windows CE 学习流程

    2013-05-01 22:23:40
    流程, Windows, 学习 学习计划 : 1. 应用程序设计: 这部分作为一个了解,是必须的,毕竟驱动测试程序还是要你自己来写的。 由于主要是学习底层开发,这部分就不用花太多时间,了解Win32的架构即可。 时间...
  • 驱动开发入门——NTModel

    千次阅读 2016-10-07 23:57:43
    上一篇博文中主要说明了驱动开发中基本的数据类型,认识这些数据类型算是驱动开发中的入门吧,这次主要说明驱动开发中最基本的模型——NTModel。介绍这个模型首先要了解R3层是如何通过应用层API进入到内核,内核又是...
  • Linux驱动开发前阶段总结硬件配置说明大致流程说明ubootLinux kernel文件系统主要遇到的问题内核输出乱码ping问题在Ubuntu上编译的hello程序无法在板子上运行个人感受 硬件配置说明 开发板:JZ2440,韦东山的板子 ...
  • 打印机驱动开发笔记

    千次阅读 2019-09-18 15:41:02
    Windows打印体系结构以打印池为中心,打印机图形dll的打印接口是打印驱动程序的一部分,打印的流程如下: 应用程序通知打印池开始一个新的打印任务; 打印池调用打印机接口DLL显示打印对话框,并将打印设置信息传给它; ...
  • 最近在看《Windows CE工程实践完全解析》李大为编著的这本书,现在理解这本书的知识还是有一定难度。必须要多读几遍才能懂。 现在将书中WinCE的初始化启动流程画出来了,贴出来。对着这个图去理解wince的脉络还是...
  • 目录 第一章 入门 配置开发环境 第一个程序 应用程序调用内核函数的流程 转载于:https://www.cnblogs.com/yasepix/p/4806296.html

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 401
精华内容 160
关键字:

windows驱动开发流程