打开内核Windows8.1 +中的符号链接

时间:2016-07-23 14:59:27

标签: file kernel driver device symlink

我试图在内核空间中使用ZwOpenProcess将符号链接打开为文件。使用下面的代码在XP-7上都可以。但是使用Windows 8.1 ZwOpenProcess会失败,使用不同的NTSTATUS代码,例如0xC00000010xC000000D

OBJECT_ATTRIBUTES  ObjectAttributes;
HANDLE             FileHandle;
IO_STATUS_BLOCK    IoStatus;
NTSTATUS           Status;

InitializeObjectAttributes ( &ObjectAttributes,
                             SymLinkOrDeviceName, // <--- \Device\CEDRIVER60
                             OBJ_KERNEL_HANDLE,
                             (HANDLE) NULL,
                             (PSECURITY_DESCRIPTOR) NULL );

Status = ZwOpenFile ( &FileHandle,
                      FILE_READ_ACCESS,
                      &ObjectAttributes,
                      &IoStatus,
                      0,
                      FILE_NON_DIRECTORY_FILE );


if ( !NT_SUCCESS ( Status ) )
{
    DbgPrint("TEST: ERROR %p ", Status); // <--- 0xC0000001, 0xC000000D
    goto Exit;
}

我检查过,使用WinObj - 系统中存在的符号链接,代码在XP-7上运行良好。

我也试图将Access更改为 - FILE_ANY_ACCESS - 结果相同。

1 个答案:

答案 0 :(得分:0)

  

ZwOpenProcess

我想你的意思是ZwOpenFile。

  

\设备\ CEDRIVER60

你真的看过\ Device目录吗?此目录通常包含驱动程序创建的设备对象。符号链接通常放在\ DosDevices等目录中。您还应该包含OBJ_CASE_INSENSITIVE标志。

  

FILE_READ_ACCESS

此标志确定成功将IOCTL消息传递到目标设备对象所需的访问权限。指定一个真正的文件访问权限常量,如FILE_READ_ATTRIBUTES,FILE_READ_DATA(其值实际上与FILE_READ_ACCESS相同)或GENERIC_READ。 ZwOpenFile(和ZwCreateFile)上的MSDN页面也值得一读。您可能还需要包含SYNCHRONIZE标志。

  

%P

NTSTATUS定义为long(32位有符号整数)。 %x更合适。