Reads data from an I/O port.
PPS_ENGINE pEngine
An opaque handle to an engine created by the EngCreateEngine function.
uint16_t Port
The I/O port number to read from.
uint16_t AccessSize
I/O port read width in bytes. Valid values are 1, 2, and 4.
void* pBuffer
The buffer that stores the read data.
uint64_t cbToRead
Specifies how many bytes to read.
uint64_t* pcbRead
Returns the number of bytes that were actually read.
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_READ0x00000001 | Only a portion of the data was read. Check the *pcbRead parameter value to determine how many bytes were read. |
| 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_NOT_ALIGNED0xC0000006 | Buffer size is not aligned to the access size. |
| PULSE_STATUS_TIMEOUT0xC0000007 | Might happen if
|
| PULSE_STATUS_INVALID_ACCESS_SIZE0xC000000A | I/O port access size is not 1, 2 or 4 bytes. |
| PULSE_STATUS_INVALID_PARAMETER0xC0000010 | Might happen if
|
| PULSE_STATUS_INVALID_PACKET0xC0000031 | An invalid or unexpected packet was received in response. |
| 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 read in a single request can be determined using the PsRequestGetMaxReadIoBufferSize function. If a larger amount is specified, this function performs multiple requests to the debug target.