PiCMConvertDeviceKeyType

NTSTATUS __stdcall PiCMConvertDeviceKeyType(_CMAPI_DEVICE_KEY_TYPE CmapiKeyType, _CM_KEY_TYPE *PnpRtlKeyType){
  NTSTATUS v2; 
  __int16 v3; 
  _CM_KEY_TYPE v4; 
  _CM_KEY_TYPE v5; 
  int v6; 

  v2 = 0;
  *PnpRtlKeyType = CM_KEY_TYPE_NONE;
  v3 = CmapiKeyType;
  switch( (unsigned __int8)CmapiKeyType )
  {
    case CMAPI_DEVICE_KEY_TYPE_HARDWARE:
      *PnpRtlKeyType = CM_KEY_TYPE_DEVICE_HARDWARE;
      v4 = CM_KEY_TYPE_SCOPE_CONFIG|CM_KEY_TYPE_DEVICE_HARDWARE;
      v5 = CM_KEY_TYPE_SCOPE_USER|CM_KEY_TYPE_DEVICE_HARDWARE;
      break;
    case CMAPI_DEVICE_KEY_TYPE_SOFTWARE:
      *PnpRtlKeyType = CM_KEY_TYPE_DEVICE_SOFTWARE;
      v4 = CM_KEY_TYPE_SCOPE_CONFIG|CM_KEY_TYPE_DEVICE_SOFTWARE;
      v5 = CM_KEY_TYPE_SCOPE_USER|CM_KEY_TYPE_DEVICE_SOFTWARE;
      break;
    case CMAPI_DEVICE_KEY_TYPE_CONTROL:
      *PnpRtlKeyType = CM_KEY_TYPE_DEVICE_CONTROL;
      v4 = CM_KEY_TYPE_SCOPE_CONFIG|CM_KEY_TYPE_DEVICE_CONTROL;
      v5 = CM_KEY_TYPE_SCOPE_USER|CM_KEY_TYPE_DEVICE_CONTROL;
      break;
    case CMAPI_DEVICE_KEY_TYPE_LOGCONF:
      *PnpRtlKeyType = CM_KEY_TYPE_DEVICE_LOGCONF;
      v4 = CM_KEY_TYPE_SCOPE_CONFIG|CM_KEY_TYPE_DEVICE_LOGCONF;
      v5 = CM_KEY_TYPE_SCOPE_USER|CM_KEY_TYPE_DEVICE_LOGCONF;
      break;
    default:
      return -1073741811;
  }
  v6 = v3 & 0xFF00;
  if( v6 )
  {
    if( v6 == 256 )
    {
      *PnpRtlKeyType = v5;
      return v2;
    }
    if( v6 == 512 )
    {
      *PnpRtlKeyType = v4;
      return v2;
    }
    return -1073741811;
  }
  return v2;
}

Referenced by:

PiCMDeleteDeviceKey
PiCMOpenDeviceKey