怎么删除多个设备对象还有他的符号链接?
就是 只会删除第二个设备对象 和符号连接,而第一个创建的设备对象和他符号连接不会被删除 ,这是什么原因啊?
不清楚 是否能这样写(那本 windows驱动开发详解 我都没看多少页,就是看到了那个卸载例程我就有这想法,去写2个设备对象 用循环的方式卸载)
对了:写驱动 c或者c++ 他们调用约定不同吗?
我用c++ 的方式写的
extern "C"
NTSTATUS DriverEntry(
IN PDRIVER_OBJECT pDrivObj,
PUNICODE_STRING pRegistryPath)
请问 其他函数 需要加这个 extern "C"吗?
-----------------------------------------------
2个创建设备对象 函数 分别是:1 。2
1创建设备对象后 调用2函数(再次创建设备对象)
通过 驱动对象 去找到这个 第一个设备对象的扩展地址,然后赋值给 2函数的设备扩展
pDevExt = (PDEVICE_EXTENSION)(pDriverObject->DeviceObject->DeviceExtension);
pDevExt->pNexDeviceObj = pDevObj;
------------------------------
1函数
pDevExt = (PDEVICE_EXTENSION)pDevObj->DeviceExtension;
pDevExt->pDeviceObj = pDevObj;
pDevExt->ustrDeviceName = ustrDevName;
pDevExt->ustrSymLinkName = SymLinkName;
pDevExt->pNexDeviceObj = NULL;
// 在创造一个设备
CreateDevices(pDriverObject);
-------------------------------------------------
2函数
NTSTATUS CreateDevices(IN PDRIVER_OBJECT pDriverObject)
{
。。。。。。。。。。
前面省略吧
。。。。。。。。。。
pDevObj->Flags |= DO_BUFFERED_IO;
pDevExt = (PDEVICE_EXTENSION)(pDriverObject->DeviceObject->DeviceExtension);
pDevExt->pNexDeviceObj = pDevObj;
//.....................
pDevExt = (PDEVICE_EXTENSION)pDevObj->DeviceExtension;
pDevExt->pDeviceObj = pDevObj;
pDevExt->ustrDeviceName = ustrDevName;
pDevExt->ustrSymLinkName = SymLinkName;
pDevExt->pNexDeviceObj =NULL;
}
对了 卸载例程 我是模仿 WINDOWS驱动开发技术详解的(最前面的那个卸载例程)
VOID MyDDKUnload(IN PDRIVER_OBJECT pDriverObj)
{
PDEVICE_OBJECT pNexDev;
pNexDev = pDriverObj->DeviceObject;
while(pNexDev != NULL)
{
PDEVICE_EXTENSION pDevExt;
pDevExt =(PDEVICE_EXTENSION)(pNexDev->DeviceExtension);
//删除符号链接
IoDeleteSymbolicLink(&(pDevExt->ustrSymLinkName));
pNexDev = pDevExt->pNexDeviceObj;
IoDeleteDevice(pDevExt->pDeviceObj);
}
KdPrint(("卸载成功!"));
}
还有这个结构体
typedef struct DEVICE_EXTENSION
{
PDEVICE_OBJECT pDeviceObj;
PDEVICE_OBJECT pNexDeviceObj;
UNICODE_STRING ustrDeviceName;
UNICODE_STRING ustrSymLinkName;
}DEVICE_EXTENSION,*PDEVICE_EXTENSION; 删除设备对象和符号链接的函数分别是:
IoDeleteDevice
IoDeleteSymbolicLink
输入什么参数就删除哪个,没有什么第一个第二个第三个第N个。
此外,提问直接说问题即可,不需要加上“新手”之类的词语彰显身份。 本帖最后由 APshaco 于 2017-5-30 12:31 编辑
Tesla.Angela 发表于 2017-5-29 17:22
删除设备对象和符号链接的函数分别是:
IoDeleteDevice
IoDeleteSymbolicLink
不是 我是刚学,
那个 我知道是这两个删除,我创建2个设备对象,我想通过 那个设备扩展的形式,删除(应该说是一个循环
的形式去删除 驱动对象拥有的设备对象,但我怎么删都只能删除第二次创建的设备对象,而第一个先创建的设备对象 却不能删除
简单说:我创建两个设备对象,只能删除一个,我想通过循环设备扩展删除多个设备对象
至于新手,我是性格问题,我不会的东西怕说错话,被笑话
页:
[1]