编译 ARM64 C++ 时禁用警告? Visual Studio 2019

Disable Warnings when compiling ARM64 C++? Visual Studio 2019

我在一个项目(在 ARM64 中构建)的内核 space 中工作,无法为我的项目禁用特定警告。该警告被视为错误,不允许我编译我的项目,所以你可以想象这很烦人。

警告是错误代码 C4244:“=”从 'ULONG_PTR' 到 'ULONG' 的转换,可能会丢失数据。 我试过使用 #pragma disable warning 4244 但这不起作用, 我已经关闭了我项目中的“将警告视为错误”设置, 我已在警告级别项目设置中“关闭所有警告”。

天底下好像都试过了,还是编译不出来,请问有什么办法吗?我将 post 代码在下面抛出错误,以便有人可以修复,但是关闭警告也一样好:)

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;
}

基于 in ,警告应该出现在调用get_process_id_by_name函数的位置,而不是在get_process_id_by_name函数内部。因为现在函数内部没有ULONG_PTRULONG的转换。

这是 the documentation #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)