gpt4 book ai didi

c - 驱动程序 PsLookupProcessByProcessId 错误代码 0xc000000b

转载 作者:行者123 更新时间:2023-11-30 17:08:19 26 4
gpt4 key购买 nike

我对驱动程序编程还很陌生。我有使用 PsLookupProcessByProcessId 例程的驱动程序代码。我正在尝试使用直接 I/O。我使用 DWORD 变量从用户模式发送 PID 并将其读入 buf。以下是在 IRP_MJ_WRITE MajorFunction 中生成错误代码的代码片段:

PVOID buf=MmGetSystemAddressForMdlSafe(irp->MdlAddress,NormalPagePriority);
PEPROCESS Process = NULL;
DbgPrint("Process ID: %d",*(PHANDLE)buffer);

if(!NT_SUCCESS(status=PsLookupProcessByProcessId(*(PHANDLE)buf,&Process)))
{
DbgPrint("Error: (%#x)",status);
}

错误代码为0xc000000b。当 PID 打印出来时,它打印正确。我不知道为什么返回这个错误代码。根据http://doxygen.reactos.org/d3/d93/ntstatus_8h_a27310062c4edd9cc932e5607884904ae.html#a27310062c4edd9cc932e5607884904ae该错误代码应该从 PsLookupProcessThreadByCid() 返回。在函数 PsLookupProcessByProcessId 中,我没有看到任何可能返回该错误的指令 http://doxygen.reactos.org/d2/d9f/ntoskrnl_2ps_2process_8c_a85b05806391e5e2647dfdaea64b5b7a4.html#a85b05806391e5e2647dfdaea64b5b7a4 。我不知道真正的问题是什么,我被困住了。请帮我。我正在 Windows 7 x64 免费构建环境上进行开发。

最佳答案

问题是这样的:

*(PHANDLE)buf

您将 buf 声明为指向 HANDLE 的指针(8 个字节)。但您说用户代码将进程 ID 作为 DWORD(4 个字节)传递。

尝试

(HANDLE)(*(PDWORD)buf)

关于c - 驱动程序 PsLookupProcessByProcessId 错误代码 0xc000000b,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33722610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com