Writes memory contents using a virtual address.
PPS_ENGINE pEngine
An opaque handle to an engine created by the EngCreateEngine function.
uint64_t PageTableAddress
The target page table root address. This page table is used to perform the page walk for the given address. The currently loaded page table address is in the CR3 register.
uint16_t SelectorValue
The segment selector value used to convert the virtual address into a linear address.
uint64_t Offset
The segment offset value used to convert the virtual address into a linear address.
void* pBuffer
The buffer containing the data to be wrttien.
uint64_t cbToWrite
Specifies how many bytes should be written.
uint64_t* pcbWritten
Returns the number of bytes that were actually written.
If the function succeeds, the return value is PULSE_STATUS_SUCCESS.
If it fails, it returns one of the PULSE_STATUS values. Possible return codes include, but are not limited to, the following:
| PULSE_STATUS_PARTIAL_WRITE0x00000002 | Only a portion of memory was written. Check the *pcbWritten parameter value to determine how many bytes were written. |
| PULSE_STATUS_INSUFFICIENT_RESOURCES0xC0000002 | One of the memory allocations failed during initialization. |
| PULSE_STATUS_READ_FAILED0xC0000003 | Transport communication failed during a read operation. |
| PULSE_STATUS_WRITE_FAILED0xC0000004 | Transport communication failed during a write operation. |
| PULSE_STATUS_TIMEOUT0xC0000007 | Might happen if
|
| PULSE_STATUS_INVALID_PARAMETER0xC0000010 | Might happen if
|
| PULSE_STATUS_INVALID_PACKET0xC0000031 | An invalid or unexpected packet was received in response. |
| PULSE_STATUS_INVALID_TRANSLATION0xC0000021 | Virtual to linear address translation failed. Might happen if the effective address exceeds the segment limit. |
| PULSE_STATUS_DEVICE_CONNECTION_LOST0xC0000308 | The connection to the transport was lost. Try restarting the engine or the transport. |
The maximum number of bytes that can be written in a single request can be determined using the PsRequestGetMaxWriteVirtualMemoryBufferSize function. If a larger amount is specified, this function performs multiple requests to the debug target.
Partial writes may occur when address translation is not available beyond a certain point.