Windows 在没有UAC的情况下打开设备驱动程序时,CreateFile()失败
我现在正在分析设备驱动程序二进制文件。我编写了如下代码:Windows 在没有UAC的情况下打开设备驱动程序时,CreateFile()失败,windows,kernel,device-driver,createfile,Windows,Kernel,Device Driver,Createfile,我现在正在分析设备驱动程序二进制文件。我编写了如下代码: CreateFileA("\\\\.\\device_name", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); 我从CreateFileA()返回的结果是无效的句柄值(0xFFFFFFFF),没有UAC。当我使用UAC认证运行相同的代码时,它工作得很好,它给了我有效的句柄 我听说访问设备驱动程序的权限由IoCreateD
CreateFileA("\\\\.\\device_name", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
我从CreateFileA()返回的结果是无效的句柄值(0xFFFFFFFF),没有UAC。当我使用UAC认证运行相同的代码时,它工作得很好,它给了我有效的句柄
我听说访问设备驱动程序的权限由IoCreateDevice()的设备类型参数决定。我检查了它,但驱动程序类型是FILE\u DEVICE\u UNKNOWN(0x22),不仅管理员可以访问它,其他用户也可以访问它。但我失败了
所以我很沮丧。我想错了吗?为什么我在CreateFile()上失败了?有人能帮我吗
谢谢你的阅读。祝您愉快。GetLastError()对我说5,访问被拒绝否,访问设备的权限(不一定)由设备类型决定。设备驱动程序可以设置它喜欢的任何权限。如果您遇到错误\u访问\u拒绝,这很好地表明设备上的权限不允许非管理员打开它。您可以使用winobj.exe检查设备对象的安全性。“设备名称”符号链接应位于“\Global???”中,并应解析为“\device”中的设备对象。这很可能会确认只有管理员和系统才能使用
GENERIC_READ | GENERIC_WRITE
访问权限打开设备。其他人可能只有GENERIC\u READ
或GENERIC\u EXECUTE
权限。@HarryJohnston哦,我学错了。。。我应该检查决定权限的其他元素。。。非常感谢@eryksun多棒的工具啊,winobj!我用winobj检查了那个设备驱动程序,发现管理员是唯一有权访问的人。看来,我猜访问设备的权限是在安装时确定的。我应该查一下。谢谢!GetLastError()对我说5,访问被拒绝否,访问设备的权限(不一定)由设备类型决定。设备驱动程序可以设置它喜欢的任何权限。如果您遇到错误\u访问\u拒绝,这很好地表明设备上的权限不允许非管理员打开它。您可以使用winobj.exe检查设备对象的安全性。“设备名称”符号链接应位于“\Global???”中,并应解析为“\device”中的设备对象。这很可能会确认只有管理员和系统才能使用GENERIC_READ | GENERIC_WRITE
访问权限打开设备。其他人可能只有GENERIC\u READ
或GENERIC\u EXECUTE
权限。@HarryJohnston哦,我学错了。。。我应该检查决定权限的其他元素。。。非常感谢@eryksun多棒的工具啊,winobj!我用winobj检查了那个设备驱动程序,发现管理员是唯一有权访问的人。看来,我猜访问设备的权限是在安装时确定的。我应该查一下。谢谢!