首页 > 解决方案 > 获取 CTL_CODE 宏的“无法识别的符号”错误

问题描述

我正在尝试定义一个自定义 CTL_CODE 并将其隐藏在另一个宏下(如下所示)。该预处理器代码位于我的驱动程序的 CPP 文件中。可能需要注意的是,我的客户和司机都在同一个解决方案下,但是是两个独立的项目。驱动程序是一个空的 wdm 驱动程序,客户端是一个 Windows 控制台桌面应用程序。

#define PRIORITY_BOOSTER_DEVICE 0x8000
#define IOCTL_PRIORITY_BOOSTER_SET_PRIORITY CTL_CODE(PRIORITY_BOOSTER_DEVICE, \0x800, METHOD_NEITHER, FILE_ANY_ACCESS)

但是,在我的客户端中,当我尝试对 DeviceIoControl 调用使用“IOCTL_PRIORITY_BOOSTER_SET_PRIORITY”时,出现“无法识别的令牌”错误。我在下面粘贴了我的 DeviceIoControl 调用。经过一些试验,Visual Studio 将错误指向“CTL_CODE”宏本身。我很傻眼,因为这在驱动程序项目中没有问题,但在客户端项目中却有。此外,我不知道为什么问题出在 CTL_CODE 宏本身。我假设宏是在我必须安装的 WDK 依赖项中定义的。任何帮助将不胜感激,因为我已经在这个问题上苦苦挣扎了很长一段时间,并且在其他地方没有找到太多的报道,如果有的话。

BOOL success = DeviceIoControl(hDevice, 
      IOCTL_PRIORITY_BOOSTER_SET_PRIORITY,
      &data,
      sizeof(data),
      nullptr, 
      0,
      &returned,
      nullptr);

很高兴根据要求添加更多信息。

标签: windowskerneldriverwindows-kernel

解决方案


推荐阅读