-
Автор темы
- #1
С оффнутым еаком все работает
С включенным драйвер получает pid и BaseAddr но память судя по всему не читает, в чем может быть проблема?
С включенным драйвер получает pid и BaseAddr но память судя по всему не читает, в чем может быть проблема?
usermode:
template <typename type> type ReadVirtualMemory(ULONG ProcessId, ULONGLONG ReadAddress, SIZE_T Size)
{
if (hDriver == INVALID_HANDLE_VALUE)
return (type)false;
DWORD Return, Bytes;
KERNEL_READ_REQUEST ReadRequest;
ReadRequest.ProcessId = ProcessId;
ReadRequest.Address = ReadAddress;
ReadRequest.Size = Size;
if (DeviceIoControl(hDriver, IO_READ_REQUEST, &ReadRequest, sizeof(ReadRequest), &ReadRequest, sizeof(ReadRequest), &Bytes, 0))
return *(type*)&ReadRequest.Response;
else
return (type)false;
}
kernel:
if (ControlCode == IO_READ_REQUEST)
{
PKERNEL_READ_REQUEST ReadInput = (PKERNEL_READ_REQUEST)Irp->AssociatedIrp.SystemBuffer;
PKERNEL_READ_REQUEST ReadOutput = (PKERNEL_READ_REQUEST)Irp->AssociatedIrp.SystemBuffer;
PEPROCESS Process;
if (NT_SUCCESS(PsLookupProcessByProcessId(ReadInput->ProcessId, &Process)))KeReadVirtualMemory(Process, ReadInput->Address,&ReadInput->Response, ReadInput->Size);
Status = STATUS_SUCCESS;
BytesIO = sizeof(KERNEL_READ_REQUEST);
}
NTSTATUS KeReadVirtualMemory(PEPROCESS Process, PVOID SourceAddress, PVOID TargetAddress, SIZE_T Size)
{
PSIZE_T Bytes;
if (NT_SUCCESS(MmCopyVirtualMemory(Process, SourceAddress, PsGetCurrentProcess(), TargetAddress, Size, KernelMode, &Bytes)))
return STATUS_SUCCESS;
else
return STATUS_ACCESS_DENIED;
}