首页 > 解决方案 > 编译 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;
}

标签: c++kernelwarnings

解决方案


根据您上一个问题中的评论,警告应该出现在调用函数的位置,而不是函数内部。因为现在函数内部没有to的转换。get_process_id_by_nameget_process_id_by_nameULONG_PTRULONG

这是. _#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)

推荐阅读