CmGetDeviceHardwareKeyPath

NTSTATUS __stdcall CmGetDeviceHardwareKeyPath(
        HPNPCTX *hPnpCtx,
        const WCHAR *DeviceInstanceId,
        _CM_KEY_TYPE CmKeyTypeFlags,
        UINT64 HardwareProfileId,
        UINT8 Create,
        WCHAR *BaseKeyPath,
        UINT64 BaseKeyLength,
        UINT64 *RequiredLength){
  __int64 v8; 
  unsigned __int64 v9; 
  __int64 v11; 
  unsigned __int64 v12; 
  unsigned __int64 v13; 
  __int64 v14; 
  unsigned __int64 v15; 
  UINT64 dwFlags; 

  if( (CmKeyTypeFlags & 0x200) == 0 )
  {
    v8 = -1i64;
    do
      ++v8;
    while( DeviceInstanceId[v8] );
    if( (CmKeyTypeFlags & 0x100) == 0 )
    {
      v9 = v8 + 49;
      if( v9 <= 0xFFFFFFFF )
      {
        if( RequiredLength )
          *(_DWORD *)RequiredLength = v9;
        if( (unsigned int)v9 <= (unsigned int)BaseKeyLength )
        {
LABEL_9:
          LODWORD(dwFlags) = 2048;
          return RtlStringCchPrintfExW(
                   BaseKeyPath,
                   (unsigned int)BaseKeyLength,
                   0i64,
                   0i64,
                   dwFlags,
                   (WCHAR *)L"%s\\%s\\%s");
        }
        return -1073741789;
      }
      return -1073741675;
    }
    v13 = v8 + 31;
    if( v13 > 0xFFFFFFFF )
      return -1073741675;
    if( RequiredLength )
      *(_DWORD *)RequiredLength = v13;
    if( (unsigned int)v13 <= (unsigned int)BaseKeyLength )
    {
      LODWORD(dwFlags) = 2048;
      return RtlStringCchPrintfExW(BaseKeyPath, (unsigned int)BaseKeyLength, 0i64, 0i64, dwFlags, (WCHAR *)L"%s\\%s");
    }
    return -1073741789;
  }
  if( !(_DWORD)HardwareProfileId )
  {
    v11 = -1i64;
    do
      ++v11;
    while( DeviceInstanceId[v11] );
    v12 = v11 + 82;
    if( v12 > 0xFFFFFFFF )
      return -1073741675;
    if( RequiredLength )
      *(_DWORD *)RequiredLength = v12;
    if( (unsigned int)v12 <= (unsigned int)BaseKeyLength )
      goto LABEL_9;
    return -1073741789;
  }
  if( (_DWORD)HardwareProfileId == -1 )
    return -1073741811;
  v14 = -1i64;
  do
    ++v14;
  while( DeviceInstanceId[v14] );
  v15 = v14 + 79;
  if( v15 > 0xFFFFFFFF )
    return -1073741675;
  if( RequiredLength )
    *(_DWORD *)RequiredLength = v15;
  if( (unsigned int)v15 > (unsigned int)BaseKeyLength )
    return -1073741789;
  LODWORD(dwFlags) = 2048;
  return RtlStringCchPrintfExW(
           BaseKeyPath,
           (unsigned int)BaseKeyLength,
           0i64,
           0i64,
           dwFlags,
           (WCHAR *)L"%s\\%04u\\%s\\%s");
}

Referenced by:

CmGetDeviceRegKeyPath