解决支持WDK环境配置过程中的插件不支持问题和最近调试的问题

1:

对于插件的支持,我想都是每个人都有不同程度的依赖吧,为什么在SDK 的编程中,他能很好的识别哪些表述,但是到了WDK的就不行了,

我想首先应该是配置的问题,导致了插件无法识别,那么我们能不能用其他的方法来解决这个问题呢?

其实,这是很简单的。

通过加入所需要的头文件,插件就可以支持了。

 

2:

在实现应用层与内核的通信过程中,我们可以使用三种方式的读取方法

(1):缓冲读取

(2):直接读取

(3):都不是读取

 

目前,我只能使用第一种的方式处理通信的问题,在实现通信的过程中,应用层将发出一个IRP ,如果传入了信息,信息将保存在

pIrp->AssociatedIrp.SystemBuffer;  中,

写入的长度与返回应用层的长度可以通过:

 uIn  = irpStack->Parameters.DeviceIoControl.InputBufferLength;
 uOut = irpStack->Parameters.DeviceIoControl.OutputBufferLength;

 

他们来获得,当然,我们要实现通信,必须要捕获这样的IRP ,捕获的方法:

(1)我们首先要定义我们自己的操作码,这个当内核识别IRP的时候,会去匹配我们的信息,操作码必须分别在应用层和内涵层都定义一样的, 具体可看 WDK 的 CTL_CODE

(2)捕获IRP 的方法:

首先当然是获取当前的: irpStack = IoGetCurrentIrpStackLocation(pIrp);

然后通过  uCode = irpStack->Parameters.DeviceIoControl.IoControlCode;

PIO_STACK_LOCATION 下的域,得到操作码,

最后在 将信息取得,取信息的顺序,先是得到传入的(如果有),然后才是设置返回。。

 

在应用层中的发送信息的方法:

我主要使用的是 DeviceIoControl(), 这个函数,当然,首先必须打开内核的符号链接,也就是内核对外的借口名,

 HANDLE handle = CreateFile("////.//xumin",
        GENERIC_READ | GENERIC_WRITE,
        0,
        NULL,
        OPEN_EXISTING,
        0,
        NULL);

这是一种方式,好像OpenFile(), 也是可以的。。。

然后就是DeviceIoControl(), 的操作了,读写由你设置,这部分也可以用 ReadFile() 和 WriteFile 来做。。。

 

3:为什么我的驱动卸载后不能再次的加载,加载提示符号链接已存在

这个问题在于原来创建的驱动在卸载时,没有删除符号链接,导致的,这个问题困扰了我好久,调试了一个下午,真的让人郁闷

 

 

你可能感兴趣的:(解决支持WDK环境配置过程中的插件不支持问题和最近调试的问题)