轉:驅動開發函數IoCreateDevice /IoCreateSymbolicLink / IoDeleteDevice

轉自:http://hi.baidu.com/alalmn/item/f02d5c866fc2d6eae496e089

IoCreateDevice 爲驅動創建一個設備對象 格式如下:

NTSTATUS   IoCreateDevice( 

  IN  PDRIVER_OBJECT  DriverObject, 

  IN  ULONG  DeviceExtensionSize, 

  IN  PUNICODE_STRING  DeviceName  OPTIONAL,  

  IN  DEVICE_TYPE  DeviceType,   

  IN  ULONG  DeviceCharacteristics,  

  IN  BOOLEAN  Exclusive,  

  OUT PDEVICE_OBJECT  *DeviceObject    );

參數:

DriverObject

爲指針調用驅動程序對象。每個驅動程序接收一個參數的指針。

DeviceExtensionSize  //0

給_DEVICE_OBJECT.DeviceExtension指定內存空間大小,具體看自己定義結構的大小

DeviceName

設備名字

DeviceType

設備類型 這裏我們用FILE_DEVICE_UNKNOWN

DeviceCharacteristics

設備特徵信息 一般爲0

Exclusive

是否指定設備爲獨佔 是爲TRUE,否爲FALSE

DeviceObject

指針變量接收一個指向新創建的DEVICE_OBJECT結構。用來回傳數據

返回值

調用成功會返回 STATUS_SUCCESS   如果出錯會返回下列值

STATUS_INSUFFICIENT_RESOURCES//資源不足

STATUS_OBJECT_NAME_EXISTS    //指定對象名存在

STATUS_OBJECT_NAME_COLLISION//對象名有衝突

///////////////////////////////////////////////////////////////

IoCreateSymbolicLink

創建一個設備鏈接。驅動程序雖然有了設備名稱,但是這種設備名稱只能在內核 態可見,而對於應用程序是不可見的,因此,驅動需要要暴露一個符號鏈接,該鏈接指向真正的設備名稱

 

NTSTATUS   IoCreateSymbolicLink( 

  IN PUNICODE_STRING  SymbolicLinkName,

  IN PUNICODE_STRING  DeviceName    );

參數:

SymbolicLinkName

Unicode字符串指針,是一個用戶態可見的名稱。

 

DeviceName

Unicode字符串指針,是驅動程序創建的設備對象名稱。

 

Return Value

如果符號鏈接創建成功 返回STATUS_SUCCESS 

///////////////////////////////////////////////////////////////

VOID   IoDeleteDevice(  

 IN PDEVICE_OBJECT  DeviceObject

   );

 

參數

DeviceObject

PDEVICE_OBJECT類型的指針,指向需要刪除的設備對象

 

無返回值

發佈了32 篇原創文章 · 獲贊 7 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章