簡體   English   中英

編譯 ARM64 C++ 時禁用警告? 視覺工作室 2019

[英]Disable Warnings when compiling ARM64 C++? Visual Studio 2019

我在項目的 kernel 空間工作(在 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;
}

根據您上一個問題的評論,警告應出現在調用get_process_id_by_name function 的位置,而不是在get_process_id_by_name function 內。 因為現在 function 內部沒有ULONG_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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM