驱动程序 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)
我对驱动程序编程还很陌生。我有使用 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)