原來真可以10分鐘開發USB驅動

2021-05-12 07:03:01 字數 3146 閱讀 2535

本週時間比較松,花點時間玩了下usb驅動,入門而已,驅動開發肯定不會如此簡單的

下週開始搞乙太網移植,沒時間玩了

平台:vc++6.0+ddk_xp+driverstudio3.2

驅動部分:1

、安裝順序:

vc->ddk->driverstudio

2、安裝

ddk後

build environment

3、安裝

driverstudio

後,開啟

../driverworks/source

目錄下的

vc工程,編譯生成

vdw_wdm.lib

4、使用

driverwizard

生成驅動,編譯的時候注意設定

ddk的路徑 5

、關於ntstrsafe.lib

和csq.lib,在

sources

檔案中去掉即可 6

、initialize

的bug

,將10

進製改為

16進製制: 將

pipe1.initialize(m_lower, 1, 64);

pipe2.initialize(m_lower, 82, 64);

pipe3.initialize(m_lower, 83, 64);

改為:

pipe1.initialize(m_lower, 0x1, 64);

pipe2.initialize(m_lower, 0x82, 64);

pipe3.initialize(m_lower, 0x83, 64);7、

driverwizard

只是生成的乙個驅動框架,還需要自己新增一些實現**: 如將

ntstatus led_drvdevice::writepipe1_handler(kirp i)

函式改為如下:

ntstatus status = status_success;

ulong inputsize = i.ioctlinputbuffersize();

ulong outputsize = i.ioctloutputbuffersize();

pvoid inputbuffer = i.ioctlbuffer();

pvoid outputbuffer = null;

i.information() = 0;

if (inputbuffer == null)

else

else

}status %x/n", i, status);

return status;

應用程式部分:1

、guid

,使用驅動生成的

guid

,可以直接使用驅動的

inte***ce.h

這個檔案 2

、需要的標頭檔案:

#include

#include

#pragma comment(lib, 「setupapi.lib」)

#include

3、這部分是個人理解,僅參考,步驟如下:

a

hardwaredeviceinfo=setupdigetclassdevs(pguid,

null,

null,// define no

(digcf_present | // only devices present

digcf_inte***cedevice),

將guid

傳入獲得相關硬體資訊

b

setupdienumdeviceinte***ces ( hardwaredeviceinfo,

0, // we don't care about specific pdos

pguid,

numberdevices,

&deviceinfodata),

列舉對應此資訊的所有

device

c

setupdigetinte***cedevicedetail(hardwaredeviceinfo,

&deviceinfodata,

null,// probing so no output buffer yet

0,// probing so output buffer length of zero

&requiredlength,

null),

第一次呼叫此函式,獲得

device長度

d

setupdigetinte***cedevicedetail(hardwaredeviceinfo,

&deviceinfodata,

functionclassdevicedata,

predictedlength,

&requiredlength,

null),

第二次呼叫此函式,獲得

device名稱

e

m_pipe =createfile(

pipename,

generic_read | generic_write,

file_share_read|file_share_write,

null,

open_existing,

0, null),

使用獲得的

device

名稱獲得控制代碼

f

deviceiocontrol(m_pipe, writepipe1, send_msg, 64, null, 0, &lpsize, null)

,使用此函式寫

pipe1

10分鐘 深入less

三種方式引用less 瀏覽器引用 less.js link type text lesss node中使用 工程中使用 變數 key value在js中,條件語句中 可以使用 if,else,switch定義,less中語句中跟switch中case比較像。less 沒有像js中這樣的關鍵字,但是也...

10分鐘了解ZooKeeper

zookeeper是乙個開放原始碼的分布式應用程式協調服務,它包含乙個簡單的原語集,分布式應用程式可以基於它實現同步服務,配置維護和命名服務等。1.最終一致性 client不論連線到哪個server,展示給它都是同乙個檢視,這是zookeeper最重要的功能。2.可靠性 具有簡單 健壯 良好的效能,...

每天10分鐘 10 25

1.hadoop一般廣義和狹義分別指什麼 hadoop生態圈,hadoop軟體2.hadoop軟體哪三個組成 hdfs yarn mapreduce3.hdfs偽分布式的程序簡寫分別是什麼?nn,dn,snn4.yarn偽分布的程序簡寫分別是什麼?nm,rm5.nn節點是幹什麼的 記錄資料節點,維護...