驱动程序 PsLookupProcessByProcessId 错误代码 0xc000000b

Driver PsLookupProcessByProcessId error code 0xc000000b

我对驱动程序编程还很陌生。我有使用 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 this error code should be rather returned from PsLookupProcessThreadByCid(). In function PsLookupProcessByProcessId I don't see any instructions that could return that error 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)