Я в основном пытаюсь преобразовать или скопировать мою структуру в другое представление раздела процесса, но получаю сообщение об ошибке
C2760: синтаксическая ошибка: неожиданный идентификатор идентификатора токена, ожидаемое объявление1004 *
Вот что я делаю:
type RPM(UINT_PTR ReadAddress)
{
if (hDriver == INVALID_HANDLE_VALUE) {
return {};
}
DWORD64 Bytes;
KM_READ_REQUEST ReadRequest{};
type response{};
ReadRequest.ProcessId = PID;
ReadRequest.Address = ReadAddress;
ReadRequest.Size = sizeof(type);
ReadRequest.Output = &response;
Проблема здесь:
auto pBuf = (ReadRequest)MapViewOfFile(hMapFile, FILE_MAP_WRITE, 0, 0, 4096);
if (!pBuf)
{
printf("OpenFileMappingA(write) fail! Error: %u\n", GetLastError());
system("pause");
}
printf("MapViewOfFile(write) created ! \n");
У меня возникла другая проблема при попытке прочитать неизвестное значение измой драйвер ядра.Он в основном читает память, а затем изменяет это значение на другое, основываясь на том, что я читаю, если его int, float и т. Д.
PKM_READ_REQUEST ReadInput = (PKM_READ_REQUEST)SharedSection; // cast readRequest to our struct which is in SharedSection.
void* ReadOutput = ReadInput->Output;
Status = ReadKernelMemory(Process, ReadInput->Address, ReadOutput, ReadInput->Size);
Я пытаюсь скопировать его в общий раздел, чтобы я могпрочитайте его из пользовательского режима, но не знаете, как его привести, или какое это будет значение.
memcpy(SharedSection, &ReadOutput, sizeof(ReadOutput));
Вот как я хочу попытаться прочитать это, но приведу это так же, потому что я не хочу читать это как void, я хочу прочитать это как значение, которое было даноиз моего режима ядра.
auto pBuf = MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, 4096);
if (!pBuf)
{
printf("OpenFileMappingA(write) fail! Error: %u\n", GetLastError());
system("pause");
}
printf("MapViewOfFile(write) created ! \n");
Кстати, я использую недокументированную функцию mmcopyvirtualmemory
в своем драйвере ядра.