There are several KernelIoControl() IOCTLS that are called during boot up that are optional. That is the OEM can choose to implement them or not depending on whether the IOCTLs add value to the system. The problem comes when running a debug build of the kernel. Any KernelIoControl() that is passed to OEMIoControl() and not handled will be noted in the debug output.
Example:
OEMIoControl: Unsupported Code 0x10100b4 - device 0x0101 func 45
While not specifically outputting that these are error or warning conditions, these messages appear to mean that there is a problem with OEMIoControl(). It is not necessarily a problem though.   This can be verified by reverse engineering the codes to find the macro definition and then checking the documentation.
To reverse engineer the message, it is important to know that the IOCTLs are defined using the macro CTL_CODE(). CTL_CODE() is defined in winioctl.h. It takes several parameters, the first two are mentioned in the message. In the example, the device code is the first parameter and the func code is the second parameter. We can look for these in the header files, but the KernelIoControl() IOCTLs are defined in pkfunc.h.
Looking in pkfuncs.h for the device code won’t help us because the first parameter is set using a device type macro. The device type macros are defined in winioctl.h. Looking for the device code from the example message will tell us that 0x0101 is FILE_DEVICE_HAL.
Now searching pkfuncs.h for FILE_DEVICE_HAL and the func code 45 will find the IOCTL, which is IOCTL_HAL_POSTINIT.
Looking in Platform Builder Help for IOCTL_HAL_POSTINIT we find that it doesn’t specifically state that the IOCTL is not required. But what it does tell us is that this IOCTL gives the OEM a last chance to do something before other processes are started. What that really means is that if the OEM needs to do something late in the kernel initialization IOCTL_HAL_POSTINIT can be used.
You can use this same process to look up other unsupported codes to determine if they message indicates a problem that needs to be addressed.
Copyright © 2009 – Bruce Eitman
All Rights Reserved