novicePriarie 发表于 2021-9-29 18:14

windows驱动编程

最近开发驱动遇到一个严重的问题:内核创建设备,正常运行后,应用层CreateFile失败,返回错误码:2。但是如果把应用层重启后,就可以成功打开设备了。好奇怪。。。。不知道什么原因

//驱动代码:
#define NTDEVICE_NAME_STRING      L"\\Device\\myDevice"
#define SYMBOLIC_NAME_STRING      L"\\DosDevices\\myDevice"

UNICODE_STRING deviceName;
        UNICODE_STRING symbolicLinkName;

        PDEVICE_OBJECT deviceObject = NULL;

        RtlInitUnicodeString(&deviceName, NTDEVICE_NAME_STRING);
        status = IoCreateDevice(
                DriverObject,
                0,
                &deviceName,
                FILE_DEVICE_UNKNOWN,
                FILE_DEVICE_SECURE_OPEN,
                FALSE,
                &deviceObject);
        if (!NT_SUCCESS(status))
        {
                return status;
        }

        RtlInitUnicodeString(&symbolicLinkName, SYMBOLIC_NAME_STRING);
        status = IoCreateSymbolicLink(&symbolicLinkName, &deviceName);
        if (!NT_SUCCESS(status))
        {
                IoDeleteDevice(deviceObject);
                return status;
        }


//应用层代码
#define LINK_NAME_STRING L"\\\\.\\myDevice"
HANDLE hDevice = CreateFileW(
                LINK_NAME_STRING,
                GENERIC_READ | GENERIC_WRITE,
                0,
                NULL,
                OPEN_EXISTING,
                FILE_ATTRIBUTE_SYSTEM,
                NULL);
        if (INVALID_HANDLE_VALUE == hDevice)
        {
                return GetLastError();
        }

白如雪 发表于 2021-9-29 19:07

太高端.不会啊.这种的是不是有别的程序占用了.重启没占用可以链接. 瞎猜的.

稻海香 发表于 2021-9-29 19:09

高手。我表示不会

novicePriarie 发表于 2021-9-29 23:24

错误码2。表示文件不存在
页: [1]
查看完整版本: windows驱动编程