| 1081 | } |
| 1082 | |
| 1083 | BOOL WINAPI KbWriteProcessMemory( |
| 1084 | ULONG ProcessId, |
| 1085 | OUT WdkTypes::PVOID BaseAddress, |
| 1086 | IN PVOID Buffer, |
| 1087 | ULONG Size, |
| 1088 | BOOLEAN PerformCopyOnWrite |
| 1089 | ) { |
| 1090 | if (!ProcessId || !BaseAddress || !Buffer || !Size) return FALSE; |
| 1091 | KB_WRITE_PROCESS_MEMORY_IN Input = {}; |
| 1092 | Input.ProcessId = ProcessId; |
| 1093 | Input.BaseAddress = BaseAddress; |
| 1094 | Input.Buffer = reinterpret_cast<WdkTypes::PVOID>(Buffer); |
| 1095 | Input.Size = Size; |
| 1096 | Input.PerformCopyOnWrite = PerformCopyOnWrite; |
| 1097 | return KbSendRequest(Ctls::KbWriteProcessMemory, &Input, sizeof(Input)); |
| 1098 | } |
| 1099 | |
| 1100 | BOOL WINAPI KbTriggerCopyOnWrite(ULONG ProcessId, IN WdkTypes::PVOID PageVirtualAddress) |
| 1101 | { |