转自: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类型的指针,指向需要删除的设备对象
无返回值