c++ - 编译 ARM64 C++ 时禁用警告?视觉工作室 2019
问题描述
我正在一个项目的内核空间中工作(在 ARM64 中构建),并且无法为我的项目禁用特定警告。该警告被视为错误并且不允许我编译我的项目,因此您可以想象它非常烦人。
警告是错误代码 C4244:“=”从“ULONG_PTR”转换为“ULONG”,可能会丢失数据。我曾尝试使用#pragma disable warning 4244,但这不起作用,我在项目中关闭了“将警告视为错误”设置,在警告级别项目设置中“关闭了所有警告”。
我似乎已经在阳光下尝试了一切,但我仍然无法编译,有什么解决方案吗?我将在下面发布引发错误的代码,以便有人可以修复,但是关闭警告同样好:)
ULONG_PTR memory::get_process_id_by_name(PEPROCESS start_process, const char* process_name)
{
PLIST_ENTRY active_process_links;
PEPROCESS current_process = start_process;
do
{
PKPROCESS kproc = (PKPROCESS)current_process;
PDISPATCHER_HEADER header = (PDISPATCHER_HEADER)kproc;
LPSTR current_process_name = (LPSTR)((PUCHAR)current_process + IMAGE_FILE_NAME);
if (header->SignalState == 0 && strcmp(current_process_name, process_name) == 0)
{
return (ULONG_PTR)PsGetProcessId(current_process); //warning occurs here
}
active_process_links = (PLIST_ENTRY)((PUCHAR)current_process + ACTIVE_PROCESS_LINKS_FLINK);
current_process = (PEPROCESS)(active_process_links->Flink);
current_process = (PEPROCESS)((PUCHAR)current_process - ACTIVE_PROCESS_LINKS_FLINK);
} while (start_process != current_process);
return 0;
}
解决方案
根据您上一个问题中的评论,警告应该出现在调用函数的位置,而不是函数内部。因为现在函数内部没有to的转换。get_process_id_by_name
get_process_id_by_name
ULONG_PTR
ULONG
这是. _#pragma warning
这是固定代码:
#pragma warning(push)
#pragma warning(disable: 4305)
#pragma warning(disable: 4309)
void YourFunction()
{
/* ... */
if (ioctl == NF_GET_PROCESS_ID)
{
PNF_PROCESS_ID_REQUEST process_id_request = (PNF_PROCESS_ID_REQUEST)irp->AssociatedIrp.SystemBuffer;
process_id_request->process_id = memory::get_process_id_by_name(IoGetCurrentProcess(), process_id_request->process_name);
if (process_id_request->process_id) {
status = STATUS_SUCCESS;
}
bytes_io = sizeof(NF_PROCESS_ID_REQUEST);
DbgPrintEx(0, 0, " NF_GET_PROCESS_ID\n");
}
/* ... */
}
#pragma warning(pop)
推荐阅读
- python - 如何在#Python 中通过按回车键自动添加数字
- javascript - 日期选择器 - 具有辅助功能 - 兼容 IE11 及更高版本
- ios - 异步返回用户的经纬度
- python-3.x - 如何将 importlib.resources 与 pickle 文件一起使用?
- amazon-web-services - 假设我是 AWS IAM 用户,有什么方法可以让我使用 CLI 或控制台检查已授予我哪些资源权限
- python-3.x - 为什么 hyperopt 在随机森林中运行时会给出最好的损失 Nan?
- ruby-on-rails - AWS:Ruby describe_instance_type_offerings() 给出异常:“未定义的方法”
- vue.js - Vue Router Meta 对象未定义
- c++ - 扩展/专业化`模板
zero()` 到可调用的 `T` - flutter - 使用 PageView、Swiper 或 Liquid_swiper 时是否可以禁用页面?