精华内容
下载资源
问答
  • Windows Operating systems generally installed from a CD or ... On the other side Linux operating systems like Ubuntu, Debian, Mint, Fedora, etc can be installed from USB easily. Recently Windows also...

    Windows Operating systems generally installed from a CD or DVD. On the other side Linux operating systems like Ubuntu, Debian, Mint, Fedora, etc can be installed from USB easily. Recently Windows also started to support installation from the USB drive. Windows 10 Media Creation is a tool provided by Microsoft where it creates USB or DVD  Windows 10 installation media easily.

    Windows操作系统通常从CD或DVD安装。 另一方面,可以通过USB轻松安装Linux操作系统,如Ubuntu,Debian,Mint,Fedora等。 最近,Windows还开始支持从USB驱动器进行安装。 Windows 10 Media Creation是Microsoft提供的工具,可在其中轻松创建USB或DVD Windows 10安装媒体。

    Windows 10媒体创建工具要求 (Windows 10 Media Creation Tool Requirements)

    In order to create a Windows 10 Installation Media via Windows 10 Media Creation Tool there are some requirements and musts to obey. Below are what we will need;

    为了通过Windows 10 Media Creation Tool创建Windows 10安装介质,必须满足一些要求和必须遵守的要求。 以下是我们所需要的;

    • A PC with a reliable, unrestricted and fast internet connection is required because the Windows ISO file will be downloaded from internet which is about 4-5 GB.

      需要一台具有可靠,不受限制且快速的Internet连接的PC,因为将从Internet下载大约4-5 GB的Windows ISO文件。
    • A USB flash drive where we will store the Windows 10 installation files.

      我们将在其中存储Windows 10安装文件的USB闪存驱动器。
    • A product key for Windows 10 license but it is not a must which can be provided later after installation.

      Windows 10许可证的产品密钥,但不是必需的,可以在安装后稍后提供。
    • Your target system where Windows 10 will be installed should met the Windows 10 requirements too.

      您将安装Windows 10的目标系统也应符合Windows 10要求。

    下载Windows 10媒体创建工具 (Download Windows 10 Media Creation Tool)

    Windows 10 Media Creation Tool can be download from the official Microsoft site from the following page. We will just click to the Download button which will download the tool.

    Windows 10 Media Creation Tool可以从下页的Microsoft官方网站下载。 我们只需单击“ Download按钮即可下载该工具。

    https://www.microsoft.com/en-gb/software-download/windows10

    https://www.microsoft.com/zh-CN/software-download/windows10

    Download Windows 10 Media Creation Tool
    下载Windows 10媒体创建工具

    Or simply we can use the following link in order to download the MediaCreationTool.exe . But keep in mind that this is the direct link for a specific version of the Media Creation Tool and can be outdated in the future. In order to download the most recent and up to date version please use the previous link specified above.

    或者只是我们可以使用下面的链接来下载MediaCreationTool.exe 。 但是请记住,这是特定版本的媒体创建工具的直接链接,将来可能会过时。 为了下载最新版本,请使用上面指定的上一个链接。

    LEARN MORE  How To Manage Windows Services with services.msc
    了解更多如何使用services.msc管理Windows服务

    https://software-download.microsoft.com/download/pr/MediaCreationTool1903.exe

    https://software-download.microsoft.com/download/pr/MediaCreationTool1903.exe

    启动Windows 10媒体创建工具 (Start Windows 10 Media Creation Tool)

    When we start the Windows 10 Media Creation Tool we need some privileges in order to make changes in the existing operating system. So we will be asked for Administrator settings by User Account Control like below.

    启动Windows 10 Media Creation Tool时,我们需要一些特权才能在现有操作系统中进行更改。 因此,如下所示,用户帐户控制将要求我们提供管理员设置。

    Start Windows 10 Media Creation Tool
    Start Windows 10 Media Creation Tool
    启动Windows 10媒体创建工具

    Now the Windows 10 Setup screen will appear which provide a message like Getting a few things ready.  This will gather some information about the system and from the internet about the latest Windows 10. This can take some time which is related to the speed of the internet.

    现在,将出现Windows 10安装程序屏幕,其中提供了诸如“ Getting a few things ready类的消息。 这将收集有关系统的信息以及有关最新Windows 10的互联网信息。这可能需要一些时间,这与互联网的速度有关。

    Windows 10 Setup Getting Started
    Windows 10 Setup Getting Started
    Windows 10安装入门

    As always we have to Accept the EULA - End User License Agreement provided by Microsoft.

    与往常一样,我们必须Accept Microsoft提供的EULA - End User License Agreement

    Accept EULA
    Accept EULA
    接受EULA

    In this step, we will select option Create installation media. We can upgrade the current operating system like Windows 7, Windows 8 into Windows 10. Or We can create installation media (USB flash drive, SVS, or ISO file) for another PC.

    在此步骤中,我们将选择选项Create installation media 。 我们可以将当前的操作系统(例如Windows 7,Windows 8)升级到Windows10。或者我们可以为另一台PC创建安装媒体(USB闪存驱动器,SVS或ISO文件)。

    Windows 10 Media Creation Selections
    Windows 10 Media Creation Selections
    Windows 10媒体创建选择

    In this part, we will see that there are some options for media creation. We can select 3 different options like below.

    在这一部分中,我们将看到用于媒体创建的一些选项。 我们可以选择以下3种不同的选项。

    • Language will provide us a lot of different languages like English, Turkish, Spanish, etc.

      Language将为我们提供许多不同的语言,例如英语,土耳其语,西班牙语等。

    • Edition is the version of the Windows 10 like Home, Pro, etc. More details are provided below the screenshot.

      Edition是Windows 10的版本,例如Home,Pro等。屏幕截图下方提供了更多详细信息。

    • Architecture is the installation CPU architecture like 32-bit or 64-bit. The best choice is 64-bit where 32-bit is abandoned in most of the cases.

      Architecture是安装CPU架构,例如32位或64位。 最好的选择是64位,而在大多数情况下放弃32位。

    Select Installation Media Options
    Select Installation Media Options
    选择安装媒体选项

    Windows 10的提供的版本(Provided Versions Of Windows 10)

    With the Media Creation Tool for Windows 10, the following Windows 10 versions are provided where they can be downloaded and installed automatically. By the way, both 32-bit and 64-bit versions are supported.

    使用适用于Windows 10的媒体创建工具,提供了以下Windows 10版本,可以自动下载和安装它们。 顺便说一下,支持32位和64位版本。

    • Windows 10 Home is designed for home and regular end-users.

      Windows 10 Home是为家庭和普通最终用户设计的。

    • Windows 10 Home N is designed home users but adds some more features to the standard version.

      Windows 10 Home N是专为家庭用户设计的,但在标准版本中添加了更多功能。

    • Windows 10 Home Single Language supports only a single language for Windows 10.

      Windows 10 Home Single Language仅适用于Windows 10单一语言。

    • Windows 10 Pro is a professional version of the Windows mainly advanced home or basic enterprise users.

      Windows 10 ProWindows 10 Pro的专业版本,主要用于高级家庭或基本企业用户。

    • Windows Pro N is a bit advanced version of the Pro.

      Windows Pro NWindows Pro N高级版本。

    LEARN MORE  What Is BIOS (Basic Input/Output System) and How To Access and Use?
    了解更多什么是BIOS(基本输入/输出系统)以及如何访问和使用?

    In this part, we will select the media we want to use. We have the following options.

    在这一部分中,我们将选择我们要使用的媒体。 我们有以下选择。

    • USB flash drive will install the Windows10 into a USB flash drive we have attached. The USB flash drive must be at least 8 GB.

      USB flash drive会将Windows10安装到我们附带的USB闪存盘中。 USB闪存驱动器必须至少为8 GB。

    • ISO file will download the ISO file of the Windows 10. We can burn or write into USB flash, DVD later.

      ISO file将下载Windows 10的ISO文件。稍后,我们可以刻录或写入USB闪存,DVD。

    Choose Media
    Choose Media
    选择媒体

    In this step, we will select the USB flash drive we want to write Windows 10 installation files. Then click new which will write into USB flash drive. Below we can see that there is only single drive C:\ where the Windows installation files will be put.

    在此步骤中,我们将选择要写入Windows 10安装文件的USB闪存驱动器。 然后单击新建,它将写入USB闪存驱动器。 下面我们可以看到只有一个驱动器C:\将放置Windows安装文件。

    Select USB Flash
    Select USB Flash
    选择USB闪存

    After the Windows 10 USB Installation is completed the following files will exist in the USB Flash drive. We can see that there are the following files and folders.

    Windows 10 USB安装完成后,USB闪存驱动器中将存在以下文件。 我们可以看到有以下文件和文件夹。

    •  boot contains boot related files and configurations.

      boot包含与引导相关的文件和配置。

    • efi contains EFI boot files and certificates.

      efi包含EFI引导文件和证书。

    Windows 10 Installation USB Drive
    Windows 10 Installation USB Drive
    Windows 10安装USB驱动器

    翻译自: https://www.poftut.com/how-to-download-and-use-windows-10-media-creation-tool-to-create-windows-10-usb-or-dvd/

    展开全文
  • 说明: - 以下结论都是基于Windows XP系统所得出的,不保证在其他系统的适用性。 - 在此讨论的是HID自定义设备,对于标准设备...1. 所使用的典型Windows API CreateFile ReadFile WriteFile 以下函数是DDK的内容:

    说明:

    -          以下结论都是基于Windows XP系统所得出的,不保证在其他系统的适用性。

    -          在此讨论的是HID自定义设备,对于标准设备,譬如USB鼠标和键盘,由于操作系统对其独占,许多操作未必能正确执行。

     

     

    1.  所使用的典型Windows API

    CreateFile

    ReadFile

    WriteFile

    以下函数是DDK的内容:

    HidD_SetFeature

    HidD_GetFeature

    HidD_SetOutputReport

    HidD_GetInputReport

    其中,CreateFile用于打开设备;ReadFile、HidD_GetFeature、HidD_GetInputReport用于设备到主机方向的数据通信;WriteFile、HidD_SetFeature、HidD_SetOutputReport用于主机到设备方向的数据通信。鉴于实际应用,后文主要讨论CreateFile,WriteFile,ReadFile,HidD_SetFeature四个函数,明白了这四个函数,其它的可以类推之。

     

     

    2.  几个常见错误

           当使用以上API时,如果操作失败,调用GetLastError()会得到以下常见错误:

           6:         句柄无效

           23:       数据错误(循环冗余码检查)

           87:       参数错误

           1784:    用户提供的buffer无效

           后文将会详细说明这些错误情况。

     

     

    3.         主机端设备枚举程序流程

     

     

     

    4.         函数使用说明

    CreateFile(devDetail->DevicePath,                                         //设备路径

                   GENERIC_READ | GENERIC_WRITE,                    //访问方式

                   FILE_SHARE_READ | FILE_SHARE_WRITE,         //共享模式

                   NULL,

                   OPEN_EXISTING,                                           //文件不存在时,返回失败

                   FILE_FLAG_OVERLAPPED,                                 //以重叠(异步)模式打开

                   NULL);

     

    在这里,CreateFile用于打开HID设备,其中设备路径通过函数SetupDiGetInterfaceDeviceDetail取得。CreateFile有以下几点需要注意:

     

    -     访问方式: 如果是系统独占设备,例如鼠标、键盘等等,应将此参数设置为0,否则后续函数操作将失败(譬如HidD_GetAttributes);也就是说,不能对独占设备进行除了查询以外的任何操作,所以能够使用的函数也是很有限的,下文的一些函数并不一定适合这些设备。在此顺便列出MSDN上关于此参数的说明:

    If this parameter is zero, the application can query file and device attributes without accessing the device. This is useful if an application wants to determine the size of a floppy disk drive and the formats it supports without requiring a floppy in the drive. It can also be used to test for the file's or directory's existence without opening it for read or write access

    -          重叠(异步)模式:此参数并不会在此处表现出明显的意义,它主要是对后续的WriteFile,ReadFile有影响。如果这里设置为重叠(异步)模式,那么在使用WriteFile,ReadFile时也应该使用重叠(异步)模式,反之亦然。这首先要求WriteFile,ReadFile的最后一个参数不能为空(NULL)。否则,便会返回87(参数错误)错误号。当然,87号错误并不代表就是此参数不正确,更多的信息将在具体讲述这两个函数时指出。此参数为0时,代表同步模式,即WriteFile,ReadFile操作会在数据处理完成之后才返回,否则阻塞在函数内部。

     

    ReadFile(hDev,                                 //设备句柄,即CreateFile的返回值

                  recvBuffer,                          //用于接收数据的buffer

                  IN_REPORT_LEN,              //要读取数据的长度

                  &recvBytes,                         //实际收到的数据的字节数

                  &ol);                                  //异步模式

     

    在这里,ReadFile用于读取HID设备通过中断IN传输发来的输入报告。有以下几点要注意:

     

    1、ReadFile的调用不会引起设备的任何反应,即HID设备与主机之间的中断IN传输不与ReadFile打交道。实际上主机会在最大间隔时间(由设备的端点描述符来指定)内轮询设备,发出中断IN传输的请求。“读取”即意味着从某个buffer里面取回数据,实际上这个buffer就是HID设备驱动中的buffer。这个buffer的大小可以通过HidD_SetNumInputBuffers来改变。在XP上缺省值是32(个报告)。

     

    2、读取的数据对象是输入报告,也即通过中断输入管道传入的数据。所以,如果设备不支持中断IN传输,那么是无法使用此函数来得到预期结果的。实际上这种情况不可能在HID中出现,因为协议指明了至少要有一个中断IN端点。

     

    3、IN_REPORT_LEN代表要读取的数据的长度(实际的数据正文+一个byte的报告ID),这里是一个常数,主要是因为设备固件的信息我是完全知道的,当然知道要读取多少数据(也就是报告的长度);不过也可以通过另外的函数(HidD_GetPreparsedData)来事先取得报告的长度,这里不做详细讨论。因为很难想象在不了解固件信息的情况下来做自定义设备的HID通信,在实际应用中一般来说就是固件与PC程序匹配着来开发。此参数如果设置过大,不会有实质性的错误,在recvBytes参数中会输出实际读到的长度;如果设置过小,即小于报告的长度,会返回1784号错误(用户提供的buffer无效)。

     

    4、关于异步模式。前面已经提过,此参数的设置必须与CreateFile时的设置相对应,否则会返回87号错误(参数错误)。如果不需要异步模式,此参数需置为NULL。在这种情况下,ReadFile会一直等待直到数据读取成功,所以会阻塞住程序的当前过程。

     

           WriteFile(hDev,                                 //设备句柄,即CreateFile的返回值

                         reportBuf,                           //存有待发送数据的buffer

                         OUT_REPORT_LEN,           //待发送数据的长度

                         &sendBytes,                        //实际收到的数据的字节数

                         &ol);                                  //异步模式

     

           在这里,WriteFile用于传输一个输出报告给HID设备。有以下几点要注意:

     

    1、  与ReadFile不同,WriteFile函数被调用后,虽然也是经过驱动程序,但是最终会反映到设备中。也就是说,调用WriteFile后,设备会接收到输出报告的请求。如果设备使用了中断OUT传输,则WriteFile会通过中断OUT管道来进行传输;否则会使用SetReport请求通过控制管道来传输。

     

    2、  OUT_REPORT_LEN代表要写入的数据长度(实际的数据正文+一个byte的报告ID)。如果大于实际报告的长度,则使用实际报告长度;如果小于实际报告长度,会返回1784号错误(用户提供的buffer无效)。

     

    3、  reportBuf[0]必须存有待发送报告的ID,并且此报告ID指示的必须是输出报告,否则会返回87号错误(参数错误)。这种情况可能容易被程序员忽略,结果不知错误号所反映的是什么,网上也经常有类似疑问的帖子。顺便指出,输入报告、输入报告、特征报告这些报告类型,是反映在HID设备的报告描述符中。后文将做举例讨论。

     

    4、  关于异步模式。前面已经提过,此参数的设置必须与CreateFile时的设置相对应,否则会返回87号错误(参数错误)。如果不需要异步模式,此参数需置为NULL。在这种情况下,WriteFile会一直等待直到数据读取成功,所以会阻塞住程序的当前过程。

     

    HidD_SetFeature(hDev,                                    //设备句柄,即CreateFile的返回值

                         reportBuf,                                   //存有待发送数据的buffer

                         FEATURE_REPORT_LEN);        //buffer的长度

    HidD_SetOutputReport(hDev,                            //设备句柄,即CreateFile的返回值

                         reportBuf,                                   //存有待发送数据的buffer

                         OUT_REPORT_LEN);                //buffer的长度

     

    HidD_SetFeature发送一个特征报告给设备,HidD_ SetOutputReport发送一个输出报告给设备。注意以下几点:

     

    1、  跟WriteFile类似,必须在reportBuf[0]中指明要发送的报告的ID,并且和各自适合的类型相对应。也就是说,HidD_SetFeature只能发送特征报告,因此报告ID必须是特征报告的ID;HidD_SetOutputReport只能发送输出报告,因此报告ID只能是输出报告的ID。

    2、  这两个函数最常返回的错误代码是23(数据错误)。包括但不仅限于以下情况:

    - 报告ID与固件描述的不符。

    - 传入的buffer长度少于固件描述的报告的长度。

    据有关资料反映(非官方文档),只要是驱动程序对请求无反应,都会产生此错误。

     

     

    5.         常见错误汇总

    - HID ReadFile

      - Error Code 6 (handle is invalid)

        传入的句柄无效

      - Error Code 87 (参数错误)

        很可能是createfile时声明了异步方式,但是读取时按同步读取。

      - Error Code 1784 (用户提供的buffer无效):

        传参时传入的“读取buffer长度”与实际的报告长度不符。

     

    - HID WriteFile

      - Error Code 6 (handle is invalid)

        传入的句柄无效

      - Error Code 87(参数错误)

        - CreateFile时声明的同步/异步方式与实际调用WriteFile时传入的不同。

        - 报告ID与固件中定义的不一致(buffer的首字节是报告ID)

      - Error Code 1784 (用户提供的buffer无效)

        传参时传入的“写入buffer长度”与实际的报告长度不符。

     

    - HidD_SetFeature

    - HidD_SetOutputReport

      - Error Code 1 (incorrect function)

        不支持此函数,很可能是设备的报告描述符中未定义这样的报告类型(输入、输出、特征)

      - Error Code 6 (handle is invalid)

        传入的句柄无效

      - Error Code 23(数据错误(循环冗余码检查))

        - 报告ID与固件中定义的不相符(buffer的首字节是报告ID)

        - 传入的buffer长度少于固件定义的报告长度(报告正文+1byte, 1byte为报告ID)

        - 据相关资料反映(非官方文档),只要是驱动程序不接受此请求(对请求无反应),都会产生此错误

     

     

    6.         报告描述符及数据通信程序示例

    报告描述符(由于是汇编代码,所以不必留意其语法,仅需注意表中的每个数据都占1个字节):

     

    _ReportDescriptor:                            //报告描述符

           .dw 0x06,  0x00, 0xff                 //用法页

        .dw 0x09,  0x01                            //用法(供应商用法1)

        .dw 0xa1,  0x01                            //集合开始

        .dw 0x85,  0x01                            //报告ID(1)

        .dw 0x09,  0x01                            //用法(供应商用法1)  

        .dw 0x15,  0x00                            //逻辑最小值(0)

        .dw 0x26,  0xff, 0x0                      //逻辑最大值(255)

        .dw 0x75,  0x08                            //报告大小(8)

        .dw 0x95,  0x07                            //报告计数(7)

        .dw 0x81,  0x06                            //输入(数据,变量,相对值)

       

        .dw 0x09,  0x01                          //用法(供应商用法1)  

        .dw 0x85,  0x03                          //报告ID(3)

        .dw 0xb1,  0x06                          //特征(数据,变量,相对值)

     

           .dw 0x09,  0x01                      //用法(供应商用法1)

        .dw 0x85,  0x02                         //报告ID(2)

        .dw 0xb1,  0x06                         //特征(数据,变量,相对值)

       

        .dw 0x09,  0x01                         //用法(供应商用法1)  

        .dw 0x85,  0x04                         //报告ID(4)

        .dw 0x91,  0x06                         //输出(数据,变量,相对值)

        .dw   0xc0                                  //结合结束

    _ReportDescriptor_End:

     

    这个报告描述符,定义了4个不同的报告:输入报告1,特征报告2,特征报告3,输出报告4(数字代表其报告ID)。为了简化,每个报告都是7个字节(加上报告ID就是8个字节)。下面用一个简单的示例来描述PC端与USB HID设备进行通信的一般方法。
     

    #define USB_VID 0xFC0
    #define USB_PID 0x420
    HANDLE OpenMyHIDDevice(int overlapped);

    void HIDSampleFunc()
    {
        HANDLE        hDev;
        BYTE        recvDataBuf[8];
        BYTE        reportBuf[8];
        DWORD        bytes;
         
        hDev = OpenMyHIDDevice(0); //打开设备,不使用重叠(异步)方式;

        
        if (hDev == INVALID_HANDLE_VALUE)
            return;
        
        reportBuf[0] = 4; //输出报告的报告ID是4

        memset(reportBuf, 0, 8);
        reportBuf[1] = 1;
        if (!WriteFile(hDev, reportBuf, 8, &bytes, NULL)) //写入数据到设备

            return;
        
        ReadFile(hDev, recvDatatBuf, 8, &bytes, NULL); //读取设备发给主机的数据

    }

    HANDLE OpenMyHIDDevice(int overlapped)
    {
        HANDLE     hidHandle;
        GUID     hidGuid;
        
        HidD_GetHidGuid(&hidGuid);
        
        HDEVINFO hDevInfo = SetupDiGetClassDevs(
                        &hidGuid,
                        NULL,
                        NULL,
                        (DIGCF_PRESENT | DIGCF_DEVICEINTERFACE)); 
        if (hDevInfo == INVALID_HANDLE_VALUE)
        {
         return INVALID_HANDLE_VALUE;
        }
        
        SP_DEVICE_INTERFACE_DATA devInfoData;
        devInfoData.cbSize = sizeof (SP_DEVICE_INTERFACE_DATA);
        int deviceNo = 0;
        
        SetLastError(NO_ERROR);
        
        while (GetLastError() != ERROR_NO_MORE_ITEMS)
        {
            if (SetupDiEnumInterfaceDevice (hDevInfo,
                        0, 
                        &hidGuid,
                        deviceNo,
                        &devInfoData))
            {
                ULONG requiredLength = 0;
                SetupDiGetInterfaceDeviceDetail(hDevInfo,
                                                &devInfoData,
                                                NULL, 
                                                0,
                                                &requiredLength,
                                                NULL);

                PSP_INTERFACE_DEVICE_DETAIL_DATA devDetail = 
                    (SP_INTERFACE_DEVICE_DETAIL_DATA*) malloc (requiredLength);
                devDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);

                if(!SetupDiGetInterfaceDeviceDetail(hDevInfo,
                            &devInfoData,
                            devDetail,
                            requiredLength,
                            NULL,
                            NULL)) 
                {
                    free(devDetail);
                               SetupDiDestroyDeviceInfoList(hDevInfo);
                    return INVALID_HANDLE_VALUE;
                }

                      if (overlapped)
                      {
                             hidHandle = CreateFile(devDetail->DevicePath,
                            GENERIC_READ | GENERIC_WRITE,
                            FILE_SHARE_READ | FILE_SHARE_WRITE,
                            NULL, 
                            OPEN_EXISTING, 
                            FILE_FLAG_OVERLAPPED,
                            NULL);
                      }
                      else
                      {
                             hidHandle = CreateFile(devDetail->DevicePath,
                            GENERIC_READ | GENERIC_WRITE,
                            FILE_SHARE_READ | FILE_SHARE_WRITE,
                            NULL, 
                            OPEN_EXISTING, 
                            0,
                            NULL);
                      }

                free(devDetail);

                if (hidHandle==INVALID_HANDLE_VALUE)
                {
                    SetupDiDestroyDeviceInfoList(hDevInfo);
                    free(devDetail);
                    return INVALID_HANDLE_VALUE;
                }

                _HIDD_ATTRIBUTES hidAttributes;
                if(!HidD_GetAttributes(hidHandle, &hidAttributes))
                {
                    CloseHandle(hidHandle);
                               SetupDiDestroyDeviceInfoList(hDevInfo);
                    return INVALID_HANDLE_VALUE;
                }

                if (USB_VID == hidAttributes.VendorID 
                    && USB_PID == hidAttributes.ProductID)
                {
                    break;
                }
                else
                {
                    CloseHandle(hidHandle);
                    ++deviceNo;
                }
            }
        }

        SetupDiDestroyDeviceInfoList(hDevInfo);
        return hidHandle;
    }

    展开全文
  • 版权信息:  版权归smilestone322所有,保留所有... 从到从介绍了usb驱动的基础知识,及对windows 下dw,ddk,wdk,和linux下的usb驱动都针对一个例子进行了介绍,个人觉得从不同平台来看,usb驱动开发有他的相似

     

    版权信息:

       版权归smilestone322所有,保留所有权利,仅用来学习,请勿用于商业用途,欢迎转载,转载请注明出处。谢谢!

    5.linux usb和windows usb 驱动开发异同小结

     

       从<1>到<9>从介绍了usb驱动的基础知识,及对windows 下dw,ddk,wdk,和linux下的usb驱动都针对一个例子进行了介绍,个人觉得从不同平台来看,usb驱动开发有他的相似的地方,无论是linux,还是windows,我们学习都可以拿着他们做比较,无论是应用程序开发,还是驱动开发,都有相通的地方,或者说有意外的收获吧,举个简单的例子:做应用开发的朋友可能知道,在window下,多线程开发和linux下多线程开发,也有着相同和不同的地方,我们把他们拿出来对比,这样,学习会更有效率,更能加深对知识的理解,linux下多线程和window下多线程的异同,请看我的博客的相关文章。

    展开全文
  • Windowsusb接口驱动技术()

    千次阅读 2013-01-18 17:56:25
    Windowsusb接口芯片的驱动技术 、 USB概述   USB的英文全称为Universal Serial Bus,中文含义是通用串行总线,是由Conpaq、DEC、IBM、Inter、Microsoft、NEC和Northen Telecom等公司为简化PC与外设之间的...

    Windows下usb接口芯片的驱动技术

    一、        USB概述

     

    USB的英文全称为Universal Serial Bus,中文含义是通用串行总线,是由Conpaq、DEC、IBM、Inter、Microsoft、NEC和Northen Telecom等公司为简化PC与外设之间的互连而共同研究开发的一种免费的标准化连接器,它支持各种PC与外设之间的连接,还可实现数字多媒体集成。现在生产的PC几乎都配备了USB接口,Microsoft 的Windows98、NT以及MacOS、Linux、FreeBSD等流行操作系统都增加了对 USB的支持。它是一种快速的,双向的,同步传输的廉价的并可以进行热拔插的串行接口。USB接口使用方便,它可以连接多个不同的设备,而过去的串口和并口只能接一个设备。速度快是USB技术的突出特点之一。全速USB接口的最高传输率可达12Mb/s,比串口快了整整100倍,USB总线标准由1.1版升级到2.0版后,传输率由12Mbps增加到了480Mbps,.这使得高分辨率、真彩色的大容量图象的实时传送成为可能。USB接口支持多个不同设备的串列连接,一个USB接口理论上可以连接127个USB设备。连接方式也十分灵活,既可以使用串行连接,也可以使用集线器(Hub)把多个设备连接在一起,再同PC机的USB接口相接。普通的使用串口、并口的设备都需要单独的供电系统,而USB设备则不需要。正是由于USB的这些特点,使其获得了广泛的应用。

     

    二、        USB的总线结构

     

    USB的总线结构是采用阶梯式星形(tiered star)的拓扑(topology)结构,如上图和下图所示。每一个星形的中心是集线器,而每一个设备可以通过集线器上的接口来加以连接。从图中可以看到USB的设各包含了两种类型:USB集线器与USB设备。位于最顶端的就是Host(主机端)。从Host的联机往下连接至Hub(集线器),再由集线器按阶梯式以一层或一阶的方式往下扩展出去,连接在下一层的设备或另一个集线器上。事实上,集线器也可视为一种设备。而其中最大层数为6层(包括计算机内部的根集线器)。每一个星形的外接点的数目可加以变化,一般集线器具有2、4或7个接口。

     

     

    在此的主机端通常是指PC主机。当然,主机端因具有根集线器,因此也含有集线器的功能。而集线器是在USB规范中特别定义出来的外围设备,除了扩增系统的连接点外,还负责中继(repeat)上端/下端的信号以及控制各个下端端口的电源管理。至于另一个设备,即是用户常见的外围设备。但在USB规范书中,称这种设备为“功能”(functions),意味着此系统提供了某些“能力”,例如具有键盘或鼠标等功能。当然不同的外围设各可以具有不同的功能。通过这种阶梯式星形的连接方式,最多可同时连接到127个设备。

     

    三、        USB结构与工作原理

    一个USB系统可以从三个方面加以描述:

    (1)USB互联。

    (2)USB设备。

    (3)USB主机。

     

    USB互联是指一个USB设备与USB主机相联并和其通信的方式,它包括:

    (1)总线拓扑结构:USB主机和USB设备的连接模型。

    (2)层间关系:USB在系统中的每一层都要完成一定的任务。

    (3)数据流模型:USB系统中信源和信息之间的数据传送方式。

    (4)任务规划:USB提供可以共享的互联机制。通过规划对互连机制的访问,可以支持同步数据传输。

     

    四、        USB硬件结构

     

    一个USB系统包含三类硬件设备: USB主机(USB HOST)、 USB设备(USB DEVICE)、USB集线器(USB HUB)。

     

      (1)USB HOST

    在一个USB系统中,当且仅当有一个USB HOST时,USB HOST有以下功能:

    Ø  管理USB系统;

    Ø  每毫秒产生一帧数据;

    Ø  发送配置请求对USB设备进行配置操作;

    Ø  对总线上的错误进行管理和恢复。

     

      (2)USB DEVICE

    在一个USB系统中,USB DEVICE和USB HUB总数不能超过127个。USB DEVICE接收USB总线上的所有数据包,通过数据包的地址域来判断是不是发给自己的数据包:若地址不符,则简单地丢弃该数据包;若地址相符,则通过响应USB HOST的数据包与USB HOST进行数据传输。

     

      (3)USB HUB

      USB HUB用于设备扩展连接,所有USB DEVICE都连接在USB HUB的端口上。一个USB HOST总与一个根HUB (USB ROOT HUB)相连。USB HUB为其每个端口提供100mA电流供设备使用。同时,USB HUB可以通过端口的电气变化诊断出设备的插拔操作,并通过响应USB HOST的数据包把端口状态汇报给USB HOST。一般来说,USB设备与USB HUB间的连线长度不超过5m,USB系统的级联不能超过6级(包括ROOT HUB)。

    USB总线最多可支持127个USB外设连接到计算机系统。USB的拓扑是树形结构,有1个USB根集线器(root hub),下面还可有若干集线器。1个集线器下面可接若干USB接口。USB线缆包括4条线:Vbus(USB电源)、D+(数据)、D-(数据)和 Gnd(USB地)。线缆最大长度不超过5m。USB1.1的传输速率最高为12Mb/s(低速外设的标准速率为1.5Mb/s,高速外设的标准速率为 12Mb/s)。USB外设可以采用计算机里的电源(+5V,500mA),也可外接USB电源。在所有的USB信道之间动态地分配带宽是USB总线的特征之一,这大大地提高了USB带宽的利用率。当一台USB外设长时间(3ms以上)不使用时,就处于挂起状态,这时只消耗0.5mA 电流。按USB1.0/1.1标准,USB的标准脉冲时钟频率为12MHz,而其总线时脉冲时钟为1ms(1kHz),即每隔1ms,USB器件应为 USB线缆产生1个时钟脉冲序列。这个脉冲系列称为帧开始数据包(SOF)。高速外设长度为每帧12000bit(位),而低速外设长度只有每帧1500bit。1个USB数据包可包含0~1023字节数据。每个数据包的传送都以1个同步字段开始。

     

    五、        USB的数据流

    主控制器负责主机和USB设备间数据流的传输。这些传输数据被当作连续的比特流。每个设备提供了一个或多个可以与客户程序通信的接口,每个接口由0个或多个管道组成,它们分别独立地在客户程序和设备的特定终端间传输数据。USBD为主机软件的现实需求建立了接口和管道,当提出配置请求时,主控制器根据主机软件提供的参数提供服务。

    USB支持四种基本的数据传输模式:控制传输,等时传输,中断传输及数据块传输。每种传输模式应用到具有相同名字的终端,则具有不同的性质。

    控制传输类型:支持外设与主机之间的控制,状态,配置等信息的传输,为外设与主机之间提供一个控制通道。每种外设都支持控制传输类型,这样主机与外设之间就可以传送配置和命令/状态信息。等时传输类型:支持有周期性,有限的时延和带宽且数据传输速率不变的外设与主机间的数据传输。该类型无差错校验,故不能保证正确的数据传输,支持像计算机-电话集成系统(CTI)和音频系统与主机的数据传输。

    中断传输类型:支持像游戏手柄,鼠标和键盘等输入设备,这些设备与主机间数据传输量小,无周期性,但对响应时间敏感,要求马上响应。

    数据块传输类型:支持打印机,扫描仪,数码相机等外设,这些外设与主机间传输的数据量大,USB在满足带宽的情况下才进行该类型的数据传输。

    USB采用分块带宽分配方案,若外设超过当前带宽分配或潜在的要求,则不能进入该设备。同步和中断传输类型的终端保留带宽,并保证数据按一定的速率传送。集中和控制终端按可用的最佳带宽来传输传输数据。

     

    六、        USB外设控制器的两种实现方式

    USB芯片在外设领域的应用面很广。USB外设控制芯片通常包括USB收发器、串行接口引擎(SIE)、USB控制器和外设功能等四个模块(SIE 主要以硬件方式处理大多数USB协议,USB控制器负责与PC交互通信信息)。USB控制器一般有两种类型:一种是MCU集成在芯片里面的,如 Intel的8X930AX、CYPRESS的EZ-USB、SIEMENS的C541U以及 MOTOLORA、National Semiconductors等公司的产品;另一种就是纯粹的USB接口芯片,仅处理 USB通信,如PHILIPS的PDIUSBD11(I2C接口)、 PDIUSBP11A、PDIUSBD12(并行接口),National Semiconductor的USBN9602、USBN9603、USBN9*等。

    集成MCU的USB控制芯片优点是CPU与控制器在同一片芯片里,CPU只需要访问一系列寄存器和存储器,便可实现USB口的数据传输,最大限度的发挥 USB高速的特点。而且简化了程序的设计,极大地降低了USB外设的开发难度。缺点是灵活性不够高,开发成本较大。

    纯粹的USB接口芯片的优点是系统组成灵活,可根据不同的系统需求,搭配不同的MCU,具有较高的性能价格比。但因为USB控制器是通过串行口或并行口与MCU连接,在传输速度方面和开发难度方面不如集成了MCU的控制芯片。

    不同的实现方式在设计开销、上市时间、元器件开销和引脚数方面各有优劣,选择不同的方案意味着在以上各项指标中进行取舍。如PHILIPS公司的PDIUSBD12器件。该芯片是一款性价比很高的USB器件,它通常用作微控制器系统中实现与微控制器进行通信的高速通用并行接口,设计者可根据需要选择合适的微控制器,灵活性较大,适用于开发低成本且高效的USB外围设备。

     

    七、        USB设备的枚举过程

    USB架构中, hub负责检测设备的连接和断开,利用其中断IN端点(Interrupt IN Endpoint)来向主机(Host)报告。在系统启动时,主机轮询它的根hub(Root Hub)的状态看是否有设备(包括子hub和子hub上的设备)连接。

     

    一旦获悉有新设备连接上来,主机就会发送一系列的请求(Resqusts)给设备所挂载到的hub,再由hub建立起一条连接主机(Host)和设备(Device)之间的通信通道。然后主机以控制传输(Control Transfer)的方式,通过端点0(Endpoint 0)对设备发送各种请求,设备收到主机发来的请求后回复相应的信息,进行枚举(Enumerate)操作。所有的USB设备必须支持标准请求(Standard Requests),控制传输方式(Control Transfer)和端点0(Endpoint 0)。

    当枚举完成后,这个新添加的设备可在Windows的设备管理器里面看到,当用户删除这个设备/硬件时,系统把这个设备从设备管理器里删除。

    对于一般的设备,固件(Firmware)内包含主机所要请求的信息,而有些设备则是完全由硬件来负责响应主机的请求。在主机方面则是由操作系统而非应用程序负责处理相关枚举操作。

    枚举步骤

    USB协议定义了设备的6种状态,仅在枚举过程种,设备就经历了4个状态 的迁移:上电状态(Powered),默认状态(Default),地址状态(Address)和配置状态(Configured)(其他两种是连接状态和挂起状态(Suspend))。

    USB协议定义了设备的6种状态,仅在枚举过程种,设备就经历了4个状态的迁移:上电状态(Powered),默认状态(Default),地址状态(Address)和配置状态(Configured)(其他两种是连接状态和挂起状态(Suspend))。

     

    下面步骤是Windows系统下典型的枚举过程,但是固件不能依此就认为所有的枚举操作都是按照这样一个流程行进。设备必须在任何时候都能正确处理所有的主机请求。

     

    1.用户把USB设备插入USB端口或给系统启动时设备上电。

    这里指的USB端口指的是主机下的根hub或主机下行端口上的hub端口。Hub给端口供电,连接着的设备处于上电状态。

     

    2.Hub监测它各个端口数据线上(D+/D-)的电压

    在hub端,数据线D+和D-都有一个阻值在14.25k到24.8k的下拉电阻Rpd,而在设备端,D+(全速,高速)和D-(低速)上有一个1.5k的上拉电阻Rpu。当设备插入到hub端口时,有上拉电阻的一根数据线被拉高到幅值的90%的电压(大致是3V)。hub检测到它的一根数据线是高电平,就认为是有设备插入,并能根据是D+还是D-被拉高来判断到底是什么设备(全速/低速)插入端口(全速、高速设备的区分在我将来的文章中描述)。如下图。

    检测到设备后,hub继续给设备供电,但并不急于与设备进行USB传输。

     

    3. Host了解连接的设备。

    每个hub利用它自己的中断端点向主机报告它的各个端口的状态(对于这个过程,设备是看不到的,也不必关心),报告的内容只是hub端口的设备连接/断开的事件。如果有连接/断开事件发生,那么host会发送一个Get_Port_Status请求(request)以了解更多hub上的信息。Get_Port_Status等请求属于所有hub都要求支持的hub类标准请求(standard hub-classrequests)。

     

    4.Hub检测所插入的设备是高速还是低速设备。

    hub通过检测USB总线空闲(Idle)时差分线的高低电压来判断所连接设备的速度类型,当host发来Get_Port_Status请求时,hub就可以将此设备的速度类型信息回复给host。(USB 2.0规范要求速度检测要先于复位(Reset)操作)。

     

    5.hub复位设备。

    当主机获悉一个新的设备后,主机控制器就向hub发出一个 Set_Port_Feature请求让hub复位其管理的端口。hub通过驱动数据线到复位状态(D+和D-全为低电平 ),并持续至少10ms。当然,hub不会把这样的复位信号发送给其他已有设备连接的端口,所以其他连在该hub上的设备自然看不到复位信号,不受影响。

     

    6.Host检测所连接的全速设备是否是支持高速模式。

    因为根据USB 2.0协议,高速(High Speed)设备在初始时是默认全速(Full Speed )状态运行,所以对于一个支持USB 2.0的高速hub,当它发现它的端口连接的是一个全速设备时,会进行高速检测,看看目前这个设备是否还支持高速传输,如果是,那就切到高速信号模式,否则就一直在全速状态下工作。

    同样的,从设备的角度来看,如果是一个高速设备,在刚连接bub或上电时只能用全速信号模式运行(根据USB 2.0协议,高速设备必须向下兼容USB 1.1的全速模式)。随后hub会进行高速检测,之后这个设备才会切换到告诉模式下工作。假如所连接的hub不支持USB 2.0,即不是高速hub,不能进行高速检测,设备将一直以全速工作。

     

    7. Hub建立设备和主机之间的信息通道。

    主机不停得向hub发送 Get_Port_Status请求,以查询设备是否复位成功。Hub返回的报告信息中有专门的一位用来标志设备的复位状态。

    当hub撤销了复位信号,设备就处于默认/空闲状态(Default state),准备着主机发来的请求。设备和主机之间的通信通过控制传输,默认地址0,端点号0进行。在此时,设备能从总线上得到的最大电流是100mA。

     

    8.主机发送Get_Descriptor请求获取默认管道的最大包长度。

    默认管道(Default Pipe)在设备一端来看就是端点0。主机此时发送的请求是默认地址0,端点0,虽然所有位分配地址的设备都是通过地址0来获取主机发来的信息,但由于枚举过程不是多个设备并行处理,而是一次枚举一个设备的方式进行,所以不会发生多个设备同时响应主机发来的请求。

    设备描述符的第8字节代表设备端点0的最大包大小。对于Windows系统来说,Get_Descriptor请求中的wLength一项都会设为64,虽然说设备所返回的设备描述符(Device Descriptor)长度只有18字节,但系统也不在乎,此时,描述符的长度信息对它来说是最重要的,其他的瞄一眼就过了。Windows系统还有个怪癖,当完成第一次的控制传输后,也就是完成控制传输的状态阶段,系统会要求hub对设备进行再一次的复位操作(USB规范里面可没这要求)。再次复位的目的是使设备进入一个确定的状态。

     

    9.主机给设备分配一个地址。

    主机控制器通过Set_Address请求向设备分配一个唯一的地址。在完成这次传输之后,设备进入地址状态(Address state),之后就启用新地址继续与主机通信。这个地址对于设备来说是终生制的,设备在,地址在;设备消失(被拔出,复位,系统重启),地址被收回。同一个设备当再次被枚举后得到的地址不一定是上次那个了。

     

    10.主机获取设备的信息。

    主机发送 Get_Descriptor请求到新地址读取设备描述符,这次主机发送Get_Descriptor请求可算是诚心,它会认真解析设备描述符的内容。设备描述符内信息包括端点0的最大包长度,设备所支持的配置(Configuration)个数,设备类型,VID(Vendor ID,由USB-IF分配), PID(Product ID,由厂商自己定制)等信息。Get_Descriptor请求(Device type)和设备描述符(已抹去VID,PID等信息)之后主机发送Get_Descriptor请求,读取配置描述符(Configuration Descriptor),字符串等,逐一了解设备更详细的信息。事实上,对于配置描述符的标准请求中,有时wLength一项会大于实际配置描述符的长度(9字节),比如255。这样的效果便是:主机发送了一个Get_Descriptor_Configuration的请求,设备会把接口描述符,端点描述符等后续描述符一并回给主机,主机则根据描述符头部的标志判断送上来的具体是何种描述符。

     

    11.主机给设备挂载驱动(复合设备除外)。

    主机通过解析描述符后对设备有了足够的了解,会选择一个最合适的驱动给设备。在驱动的选择过程中,Windows系统会和系统inf文件里的厂商ID,产品ID,有时甚至用到设备返回来的产品版本号进行匹配。如果没有匹配的选项,Windows会根据设备返回来的类,子类,协议值信息选择。如果该设备以前在系统上成功枚举过,操作系统会根据以前记录的登记信息而非inf文件挂载驱动。当操作系统给设备指定了驱动之后,就由驱动来负责对设备的访问。对于复合设备,通常应该是不同的接口(Interface)配置给不同的驱动,因此,需要等到当设备被配置并把接口使能后才可以把驱动挂载上去。

          设备-配置-接口-端点关系见下图:

    实际情况没有上述关系复杂。一般来说,一个设备就一个配置,一个接口,如果设备是多功能符合设备,则有多个接口。端点一般都有好几个,比如Mass Storage设备一般就有两个端点(控制端点0除外)。

     

    12. 设备驱动选择一个配置。

    驱动(注意,这里是驱动,之后的事情都是有驱动来接管负责与设备的通信)根据前面设备回复的信息,发送Set_Configuration请求来正式确定选择设备的哪个配置(Configuration)作为工作配置(对于大多数设备来说,一般只有一个配置被定义)。至此,设备处于配置状态,当然,设备也应该使能它的各个接口(Interface)。

                 对于复合设备,主机会在这个时候根据设备接口信息,给它们挂载驱动。

     

    13. 设备可使用。

                         至此,步骤完成,设备可用了。

    转自:http://blog.csdn.net/sshhbb/article/details/6109444

    展开全文
  • Windows 中包括的 USB 设备类驱动程序

    千次阅读 2015-03-12 23:34:26
    Windows 中包括的 USB 设备类驱动程序 本主题列举了 Microsoft 为支持的 USB 设备类提供的驱动程序。 如果你正在安装 USB 驱动程序: 你不需要下载 USB 设备类驱动程序。它们是自动安装的。Windows 中包含了...
  • 版权信息:  版权归smilestone322所有,保留所有权利,用来学习,请勿... 采用driver studio3.2进行驱动开发是最简单的方法,因为它可以采用driver works生成一个驱动的框架,你只要填充你自己的部分实现和硬件通
  • Windows主机端与自定义USB HID设备通信详解 - Windows - 阿Min的BLOG[ http://blog.chinaunix.net/u3/98810/showart_1963291.html ] ... Windows主机端与自定义USB HID设备通信详解
  • 主机对USB 设备的识别过程叫做枚举,一个完整的WindowsUSB设备枚举的过程为:1) Get Device Descriptor。主机的第一个命令要求得到设备描述符,此SETUP 包为8 个字节数据(80,06,00,01,00,00,40,00),
  • windowsusb体系结构

    千次阅读 2008-05-08 00:56:00
    一些关于电路理论,计算机组成原理的东西 2.usb相关背景知识 3.windows usb整体架构介绍 4.usbport.sys分析 5.usbuhci.sys分析 6.usbhub.sys分析 usb协议方面的涉及的不算太多..毕竟都是有文档的东西 主要着眼于...
  • Usb驱动程序是PC中最主要的设备驱动程序,usb总线协议比PCI总线协议复杂,但是对于我们usb驱动开发者来说,并需要对usb通信协议每东东都搞清楚,比如usb物理层协议,usb传输层协议等等,只要了解即可。
  • Running Windows 8 from a USB should not be confused with installing Windows on a USB drive–in this case, instead of installing it on the drive, we’re just running it straight from the portable drive...
  • windows USB读卡器驱动详解

    千次阅读 2012-10-18 23:56:42
    实现一个基于此usb驱动的动态库(统一接口),供上层应用程序调用。 具体功能包括:查询IC卡类型、读扇区数据、写扇区数据、删除IC卡数据、USB热插拔。 开发环境 操作系统:windows xp 开发软件:DDK,driver...
  • 使用媒体创建工具(MCT)创建windows 10可引导USB / CD的众所周知的过程在Microsoft操作系统windows 10上有效。因此,需要向您展示如何在Linux计算机上执行相同的操作。 有人可能会问本教程是否真的必要。这...
  • Windowsusb接口驱动技术

    千次阅读 2019-08-16 09:57:38
    USB概述 USB的英文全称为Universal Serial Bus,中文含义是通用串行总线,是由Conpaq、DEC、IBM、Inter、Microsoft、NEC和Northen Telecom等公司为简化PC与外设之间的互连而共同研究开发的种免费的标准化连接...
  • STM32+OV2560自己做一个USB摄像头

    千次阅读 2020-12-31 16:59:34
    手里有一块AT32的开发板和一个OV2640摄像头模块,因为做智能车模型需要一个摄像头,就想能不能废物利用一下,这俩做一个即插即USB摄像头,能够直接在树莓派的Linux系统上,而不需要在Linux上再另外开发...
  • hidusbf USB鼠标超频软件(适用于Windows) ... 程序在选定设备上更改速率,而不会触摸USB上的其他设备。 您可以在此处了解有关理论和程序的更多信息: : (俄语(*)) 我已经在Windows 98SE,2000 S
  • Windows 2000/XP 系统对U盘的处理过程入手,逆向彻底消除U盘使用痕迹 2008/06/20 21:55 如何彻底消除U盘使用痕迹?网上有许多资料,但是都是难以理解,假设作为操作系统,它不会保存无意义的U盘使用痕迹(如果故意...
  •  原创作品版权都归smilestone322所有,保留所有权利,用来学习,请勿用于商业用途,欢迎转载,转载请注明出处。谢谢! 2 驱动基础知识    68013带有自己的驱动的程序的,但是在这里为了讲解usb驱动程序...
  • 现在好多老的镜像下都没有usb3.0的驱动集成,只能说自己手动集成,现在就提供一下步骤及部分工具,供参考。
  • 1.2)68013 芯片资料   Cypress 68013的芯片数据手册在这里不一一列...单片集成USB2.0收发器、SIE和增强型8051微处理器。 l  软件:从内部RAM运行的8051程序来自于: ——通过USB接口下载,或 ——从EE
  •  我的windows8.1安装USB无线网卡驱动都装不上,试用了三个无线网卡,两个都是Realtek芯片,一个是MTK芯片,不论是官方驱动还是windows更新驱动,都出现如下问题:  由于windows无法架子啊这个设备所需的驱动...
  • windows10密码重置Forgetting your password can be very frustrating, however this situation could be completely alleviated if you always had a password reset disk handy. Lets see how we can create one ...
  • Windows 7安装U盘中加入USB3.0的支持 风险提示:重装或升级系统会导致系统盘数据丢失,建议您提前备份重要数据以避免任何损失。 故障现象: 原生Win7系统不包含USB3.0的驱动,所以无法使用USB3.0的U盘在USB3.0的...
  • 版权信息:  版权归smilestone322所有,... 通过driver studio 3.2 和DDK驱动的比较分析,我们发现它们两开发驱动程序都是类似的,毕竟ds3.2就是对ddk的又次封装而已,那么wdk和前面两种方法有什么不同呢,本

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,350
精华内容 8,940
关键字:

windows仅用一个usb