首页
社区
课程
招聘
[求助][求助]dalao们,为啥win驱动X64下DMA创建适配器总是不成功
发表于: 2022-7-18 10:19 4307

[求助][求助]dalao们,为啥win驱动X64下DMA创建适配器总是不成功

2022-7-18 10:19
4307

dalao们,我在开发x64驱动时用到了DMA,就去查了一些资料,不知道为什么创建DMA总是不成功,死在第一步,困扰了很久,主要是调用这个WdfDmaEnablerCreate函数来创建DMA适配器,查了官方资料和<<Windows设备驱动程序WDF开发>>,也搜过一些贴子,但好像都没啥实际用处。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
//初始化用于DMA编程的三个对象
    NTSTATUS                status;
    PDEVICE_CONTEXT            pDeviceContext;
    WDF_DMA_ENABLER_CONFIG    dmaConfig = {0};
    WDFDMAENABLER DmaEnabler;
 
    PAGED_CODE();
 
    pDeviceContext = GetDeviceContext(Device);
 
 
    KdPrint(("自动获取边界大小:[%d]\n", WdfDeviceGetAlignmentRequirement(Device)));
    //设置DMA数据缓冲区地址边界:16字节对齐
    WdfDeviceSetAlignmentRequirement(Device, FILE_OCTA_ALIGNMENT);
 
    //创建一个DMA适配器
    dmaConfig.Size = sizeof(dmaConfig);
    WDF_DMA_ENABLER_CONFIG_INIT(&dmaConfig,
        WdfDmaProfileScatterGather64Duplex,
        MAXNLEN);
 
    status = WdfDmaEnablerCreate(Device,
        &dmaConfig,
        WDF_NO_OBJECT_ATTRIBUTES,
        &DmaEnabler);
 
    if (!NT_SUCCESS(status)) {
        if (status == STATUS_INVALID_PARAMETER) {
            KdPrint(("检测到无效参数\n"));
        }
        else if (status == STATUS_INSUFFICIENT_RESOURCES) {
            KdPrint(("内存不足,无法构造新的 DMA 启用器对象\n"));
        }
        else if(status == STATUS_INFO_LENGTH_MISMATCH) {
            KdPrint(("WDF_DMA_ENABLER_CONFIG结构的大小不正确\n"));
 
        }else if(status == STATUS_NOT_SUPPORTED) {
            KdPrint(("    驱动程序在早于 Windows 8 的操作系统上请求了 DMA 版本 3\n"));
        }
        else {
            KdPrint(("DMA创建失败:[%d]\n",status));
        }
 
        return status;
    }

很多参数都试过了,均已创建失败,status返回的是:

1
2
3
4
5
6
7
8
9
//
// MessageId: STATUS_UNSUCCESSFUL
//
// MessageText:
//
// {Operation Failed}
// The requested operation was unsuccessful.
//
#define STATUS_UNSUCCESSFUL              ((NTSTATUS)0xC0000001L)

有dalao碰到过类似问题吗,win10x64和win11x64下都测试过


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 288
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
试了不少参数,这几天刚接触WDF开发用到DMA,但是第一步就把我卡死了,萌新求助!感谢dalao
2022-7-18 10:20
0
游客
登录 | 注册 方可回帖
返回
//