使用ConDrv设备的NtOpenFile()显示0xC0000005错误

时间:2018-07-22 04:13:49

标签: winapi console

我正在模仿conhost.execondrv.sys驱动程序之间的连接。因此,我将conhost.exe中的代码复制到一个简单的C文件中并进行了编译。但是NtOpenFile()总是显示0xc0000005错误。这是代码段。

RtlInitUnicodeString(&DestinationString, L"\\Device\\ConDrv\\Server");
ObjectAttributes.Length = sizeof(OBJECT_ATTRIBUTES);
ObjectAttributes.RootDirectory = 0;
ObjectAttributes.Attributes = OBJ_CASE_INSENSITIVE;
ObjectAttributes.ObjectName = &DestinationString;
ObjectAttributes.SecurityDescriptor = 0;
status = NtOpenFile(&Handle, GENERIC_ALL, &ObjectAttributes, &IoStatusBlock, 0, 0);

如何修改该代码以使其正常工作?我做错什么了吗?

1 个答案:

答案 0 :(得分:1)

感谢@RbMm的建议。 OBJECT_ATTRIBUTES结构定义为:

typedef struct _OBJECT_ATTRIBUTES {
    ULONG Length;
    HANDLE RootDirectory;
    PUNICODE_STRING ObjectName;
    ULONG Attributes;
    PVOID SecurityDescriptor;
    PVOID SecurityQualityOfService;
} OBJECT_ATTRIBUTES;
typedef OBJECT_ATTRIBUTES *POBJECT_ATTRIBUTES;

显示错误是因为我忘记将SecurityQualityOfService设为零。因此NtOpenFile()从内存中剩下的任何值中获取SecurityQualityOfService的值。并且显示0xC0000005又名。内存访问冲突。我添加了ObjectAttributes.SecurityQualityOfService = 0;,它可以正常工作。