驱动程序PsLookupProcessByProcessId错误代码0xc000000b

时间:2015-11-15 17:25:34

标签: c windows driver

我对驱动程序编程很陌生。我有使用PsLookupProcessByProcessId例程的驱动程序代码。我正在尝试使用Direct 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时,其打印正确。我不知道为什么会返回此错误代码。根据{{​​3}},应该从PsLookupProcessThreadByCid()返回此错误代码。在函数PsLookupProcessByProcessId中,我没有看到任何可能返回错误http://doxygen.reactos.org/d3/d93/ntstatus_8h_a27310062c4edd9cc932e5607884904ae.html#a27310062c4edd9cc932e5607884904ae的指令。我不知道真正的问题是什么,我被困住了。请帮我。我正在开发Windows 7 x64免费构建环境。

1 个答案:

答案 0 :(得分:0)

问题在于:

  

*(PHANDLE)BUF

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

尝试

  

(HANDLE)(*(PDWORD)BUF)