IOCTL_HAL_DDI (Compact 2013)
3/26/2014
This I/O control message retrieves information and sends commands to the Ddi_hflat display driver. The Ddi_hflat driver is a simple display driver that uses a flat framebuffer and the Graphics Primitive Engine (GPE) base class library. For more information, see GPE Base Classes. This I/O control allows you use some of the GPE capabilities within Ddi_hflat without having to work directly with the details of GPE. Send this message with KernelIoControl.
Syntax
BOOL KernelIoControl(
DWORD dwIoControlCode, // use IOCTL_HAL_DDI
LPVOID lpInBuffer, // pointer to input buffer
DWORD nInBufferSize, // input buffer size
LPVOID lpOutBuffer, // pointer to output buffer
DWORD nOutBufferSize, // output buffer size
LPDWORD lpBytesReturned // number of bytes returned
);
Parameters
- dwIoControlCode
[in] Control code for the operation. Use IOCTL_HAL_DDI for this operation.
lpInBuffer
[in] A pointer to an array of ULONG values that describes the command to send to the driver. The following table shows the possible command values.Value
Description
DDHAL_COMMAND_GET_MODE_INFO
Returns the size, in bytes, of a display mode, or it returns the data for the display mode. See the Remarks section.
Set lpInBuffer to a two-element array, with this value as first element and the number of the display mode as the second element.
DDHAL_COMMAND_GET_NUM_MODES
Returns the number of display modes that the driver supports.
Set lpInBuffer to a pointer to this value.
DDHAL_COMMAND_POWER
Turns the driver's power handler on or off.
Set lpInBuffer to a two-element array with this value as the first element and the desired power handler state in the second element. Set the second element to TRUE to turn the power handler on, or FALSE to turn the power handler off.
DDHAL_COMMAND_SET_MODE
Sets the display driver's display mode.
Set lpInBuffer to a two-element array with this value as the first element and the number of the new display mode as the second element.
DDHAL_COMMAND_SET_PALETTE
Sets the new palette for the display driver.
Set lpInBuffer to a pointer to this value.
- nInBufferSize
[in] Set to the size, in bytes, of lpInBuffer.
lpOutBuffer
[in, out] A pointer to a buffer used for either input or output data depending on the type of command passed in lpInBuffer. The following table shows the possible values for lpOutBuffer.Value
lpOutBuffer
DDHAL_COMMAND_GET_MODE_INFO
[in] To obtain the size of a display mode, set lpOutBuffer to NULL.
[out] To obtain the data describing a display mode, set lpOutBuffer to a pointer to a buffer of UINT8 values. The size of the buffer is the value returned when lpOutBuffer is set to NULL.
DDHAL_COMMAND_GET_NUM_MODES
[out] A pointer to an int value that will receive the number of display modes.
DDHAL_COMMAND_POWER
Set to NULL.
DDHAL_COMMAND_SET_MODE
Set to NULL.
DDHAL_COMMAND_SET_PALETTE
[in] A buffer of UINT8 values with the data formatted like a DDHAL_SET_PALETTE structure.
- nOutBufferSize
[in] Set to the size, in bytes, of lpOutBuffer.
lpBytesReturned
[out] A pointer to a buffer that receives output data depending on the type of command passed in lpInBuffer. The following table shows the possible values for lpBytesReturned.Value
lpBytesReturned
DDHAL_COMMAND_GET_MODE_INFO
If lpOutBuffer is NULL then this is the number of bytes required to describe a display mode.
If lpOutBuffer is a pointer to a buffer that describes a display mode, then this is the size, in bytes, of the buffer.
DDHAL_COMMAND_GET_NUM_MODES
Set to NULL.
DDHAL_COMMAND_POWER
Set to NULL.
DDHAL_COMMAND_SET_MODE
Set to NULL.
DDHAL_COMMAND_SET_PALETTE
Set to NULL.
Return Values
Returns TRUE if successful; otherwise, returns FALSE.
Remarks
The following code shows how to use DDHAL_COMMAND_GET_MODE_INFO to query for the size of the buffer needed to store a display mode identified by the int
value, modeNumber
.
ULONG commands[2];
ULONG size; // The size of the display mode buffer
// Ask HAL about mode, first call fails because output buffer is NULL
commands[0] = DDHAL_COMMAND_GET_MODE_INFO;
commands[1] = modeNumber;
rc = KernelIoControl(
IOCTL_HAL_DDI, commands, sizeof(commands), NULL, 0, &size
);
The following code shows how to use DDHAL_COMMAND_GET_MODE_INFO to fill a buffer with the data that describes a display mode using the variables and data obtained from the previous code.
// Allocate buffer
UINT8 * pBuffer = new UINT8[size];
if (pBuffer == NULL) {
DEBUGMSG(GPE_ZONE_ERROR, (L"FlatGPE::SetMode: "
L"Failed allocate %d byte buffer\r\n", size));
sc = E_FAIL;
goto cleanUp;
}
// Call mode info second time
if (!KernelIoControl(
IOCTL_HAL_DDI, commands, sizeof(commands), pBuffer, size, &size
)) {
DEBUGMSG(GPE_ZONE_ERROR, (L"FlatGPE::SetMode: "
L"IOCTL_HAL_DDI!GET_MODE_INFO failed for mode %d\r\n",
modeNumber));
sc = E_FAIL;
goto cleanUp;
}
Requirements
Header |
ddhal.h |