关于使用IoBuildAsynchronousFsdRequest创建读写IRP出现蓝屏(蓝屏错误码:0x000000BE)的问题

        最近学习使用IoBuildAsynchronousFsdRequest创建读写IRP进行驱动间通讯的方式,在使用IoBuildAsynchronousFsdRequest成功创建读IRP后进行安装,安装时出现蓝屏,蓝屏提示错误0x000000BE:Write Read-Only Memory。
        进过研究分析,发现 IoBuildAsynchronousFsdRequest创建读IRP时我传入的输入缓冲区为局部变量缓冲区地址,而在IRP的完成例程中使用了此地址,局部变量的有效性只限于当前函数,所以非法使用导致出现蓝屏。所以在使用 IoBuildAsynchronousFsdRequest创建读写IRP时,如果在其它函数中需要使用到输入输出缓冲区时,应该传入全局的缓冲区地址。
        下面是一个例子:

char g_szbuffer[4096] = "";
//用来处理等待请求
void CompleteWait(WDFQUEUE Queue)
{
NTSTATUS status = STATUS_SUCCESS;
IO_STATUS_BLOCK IoStatus;
WDFREQUEST WaitRequest = NULL;
int nRes = 1;
HANDLE            hReadEvent;
PKEVENT           pEvent;
PDEVICE_CONTEXT   pDeviceContext;
PIRP irp;
        //char szBuf[4096] = "";
LARGE_INTEGER StartingOffset = { 0 };
PDEVICE_OBJECT    pUsbDeviceObject = NULL;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值