XXX_IOControl (Device Manager) (Compact 2013)
This function sends a command to a device.
BOOL XXX_IOControl( DWORD hOpenContext, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut, HANDLE hAsyncRef );
[in] Handle to the open context of the device. The XXX_Open (Device Manager) function creates and returns this identifier.
[in] I/O control operation to perform. These codes are device-specific and are usually exposed to developers through a header file.
[in] Pointer to the buffer containing data to transfer to the device.
[in] Number of bytes of data in the buffer specified for pBufIn.
[out] Pointer to the buffer used to transfer the output data from the device.
[in] Maximum number of bytes in the buffer specified by pBufOut.
[out] Pointer to the DWORD buffer that this function uses to return the actual number of bytes received from the device.
[in] Handle to an I/O packet. This parameter is optional and is used as an input reference handle for CreateAsyncIoHandle.
An application uses the DeviceIoControl function to specify an operation to perform. The operating system, in turn, invokes the XXX_IOControl function. The dwCode parameter contains the input or output operation to perform; these codes are usually specific to each device driver and are exposed to application programmers through a header file that the device driver developer makes available.
If you define the HKEY_LOCAL_MACHINE\Drivers\BuiltIn\MyDevice\Ioctl registry key for your device driver, Device Manager invokes the XXX_IOControl function when it loads and initializes your device driver. It uses the Ioctl registry value for the dwCode parameter and NULL for the pBufIn and pBufOut parameters. Your device might use this option to load other modules that require the installation of the basic device driver, or as a trigger to perform any other actions that are not suited to being part of the XXX_Init (Device Manager) function. The actual sequence of calls made to a device driver in this scenario is XXX_Init, XXX_Open, XXX_IOControl, and XXX_Close (Device Manager). The XXX_Open function call is necessary for Device Manager to retrieve a valid context handle, and the XXX_Close function is necessary to leave the device driver available to serve applications.
Device Manager uses the XXX prefix. When implementing the stream interface, replace XXX with a prefix appropriate for your specific implementation or use undecorated entry point names in conjunction with DEVFLAGS_NAKEDENTRIES. For more information about other valid Flags values, see ActivateDeviceEx.
If possible, implement all power management IOCTLs in your driver.