CmpGetNodeName

WCHAR *__fastcall CmpGetNodeName(_HHIVE *Hive, _CM_KEY_NODE *Node, UINT16 *NameLength){
  unsigned __int16 v5; 
  void *(__fastcall *Allocate)(unsigned int, unsigned __int8, unsigned int); 
  UINT16 v7; 
  WCHAR *v8; 
  WCHAR *v9; 
  UINT8 *v11; 
  if( NameLength )
    *NameLength = 0;
  v5 = Node->NameLength;
  Allocate = Hive->Allocate;
  if( (Node->Flags & 0x20) == 0 )
  {
    v7 = v5 + 2;
    v11 = (UINT8 *)Allocate(v7, 0, 540167491u);
    v9 = (WCHAR *)v11;
    if( v11 )
    {
      memmove(v11, (UINT8 *)Node->Name, Node->NameLength);
      v9[((unsigned __int64)v7 >> 1) - 1] = 0;
      goto LABEL_6;
    }
    return 0i64;
  }
  v7 = 2 * (v5 + 1);
  v8 = (WCHAR *)Allocate(v7, 0, 540167491u);
  v9 = v8;
  if( !v8 )
    return 0i64;
  CmpCopyCompressedName(v8, v7, Node->Name, Node->NameLength);
  v9[((unsigned __int64)v7 >> 1) - 1] = 0;
LABEL_6:
  if( NameLength )
    *NameLength = v7;
  return v9;
}

Referenced by:

CmpAddDriverToList
CmpIsLoadType