PipMakeGloballyUniqueId

NTSTATUS __stdcall PipMakeGloballyUniqueId(
        PDEVICE_OBJECT ParentDeviceObject,
        WCHAR *UniqueId,
        WCHAR **GloballyUniqueId){
  char *DeviceNode; 
  __int64 v4; 
  WCHAR **v5; 
  _ETHREAD *CurrentThread; 
  VOID **v8; 
  VOID **v9; 
  VOID **v10; 
  int CachedContextBaseKey; 
  unsigned int v12; 
  VOID **v13; 
  WCHAR *v14; 
  __int64 v15; 
  VOID **v16; 
  wchar_t *Buffer; 
  int v19; 
  unsigned __int64 v20; 
  unsigned __int64 v21; 
  int v22; 
  int v23; 
  VOID **PoolWithTag; 
  UINT64 DesiredAccess; 
  UINT64 DesiredAccessa; 
  UINT64 DesiredAccessb; 
  UINT64 DesiredAccessc; 
  UINT64 Create; 
  UINT64 Createa; 
  UINT64 ResultLength; 
  WCHAR **v32; 
  int Data; 
  _UNICODE_STRING ValueName; 
  VOID *KeyHandle; 
  int v36; 
  INT64 v37; 
  UINT64 cbDest; 
  _NTSTRSAFE_PWSTR ppszDestEnd[2]; 
  WCHAR *v40; 
  char KeyValueInformation[4]; 
  int v42; 
  int v43; 
  int v44; 

  DeviceNode = 0i64;
  v32 = GloballyUniqueId;
  Data = 0;
  KeyHandle = 0i64;
  v4 = -1i64;
  LODWORD(ResultLength) = 0;
  v5 = GloballyUniqueId;
  ValueName = 0i64;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v40 = UniqueId;
  v8 = 0i64;
  v37 = 0i64;
  v9 = 0i64;
  v10 = 0i64;
  --CurrentThread->Tcb.KernelApcDisable;
  ExAcquireResourceSharedLite((UINT64)&PnpReplaceEvent + 6688, 1);
  if( ParentDeviceObject )
    DeviceNode = (char *)ParentDeviceObject->DeviceObjectExtension->DeviceNode;
  LODWORD(DesiredAccess) = 131103;
  CachedContextBaseKey = CmOpenDeviceRegKey(
                           *(&stru_140CF2E80 + 607),
                           *((WCHAR **)DeviceNode + 6),
                           CM_KEY_TYPE_DEVICE_INSTANCE,
                           0i64,
                           DesiredAccess,
                           0,
                           &KeyHandle,
                           0i64);
  if( CachedContextBaseKey >= 0 )
  {
    ValueName.Buffer = L"UniqueParentID";
    *(_DWORD *)&ValueName.Length = 1966108;
    LODWORD(DesiredAccessa) = 16;
    CachedContextBaseKey = ZwQueryValueKey(
                             KeyHandle,
                             &ValueName,
                             KeyValuePartialInformation,
                             KeyValueInformation,
                             DesiredAccessa,
                             &ResultLength);
    if( CachedContextBaseKey >= 0 )
    {
      if( v42 != 4 || v43 != 4 )
      {
        CachedContextBaseKey = -1073741811;
        goto LABEL_18;
      }
      PoolWithTag = ExAllocatePoolWithTag(1ui64, 0x12ui64, 1852141648i64);
      v9 = PoolWithTag;
      if( !PoolWithTag )
        goto LABEL_47;
      RtlStringCbPrintfW((WCHAR *)PoolWithTag, 0x12ui64, (WCHAR *)L"%x");
    }
    else
    {
      *(_DWORD *)&ValueName.Length = 1966108;
      LODWORD(ResultLength) = 66;
      ValueName.Buffer = (wchar_t *)L"ParentIdPrefix";
      v10 = ExAllocatePoolWithTag(1ui64, 0x42ui64, 1852141648i64);
      if( !v10 )
        goto LABEL_47;
      LODWORD(DesiredAccessb) = ResultLength;
      CachedContextBaseKey = ZwQueryValueKey(
                               KeyHandle,
                               &ValueName,
                               KeyValuePartialInformation,
                               v10,
                               DesiredAccessb,
                               &ResultLength);
      if( CachedContextBaseKey >= 0 )
      {
        if( *((_DWORD *)v10 + 1) == 1 )
        {
          v12 = *((_DWORD *)v10 + 2);
          v13 = ExAllocatePoolWithTag(1ui64, v12, 1852141648i64);
          v9 = v13;
          if( v13 )
          {
            RtlStringCbCopyW((WCHAR *)v13, v12, (WCHAR *)v10 + 6);
            goto LABEL_10;
          }
LABEL_47:
          CachedContextBaseKey = -1073741670;
          goto LABEL_17;
        }
        CachedContextBaseKey = -1073741811;
LABEL_17:
        v5 = v32;
LABEL_18:
        ZwClose((_HANDLE)KeyHandle);
        goto LABEL_19;
      }
      LODWORD(ResultLength) = 31;
      CachedContextBaseKey = RtlUpcaseUnicodeString(&ValueName, (_UNICODE_STRING *)(DeviceNode + 40), 1u);
      if( CachedContextBaseKey < 0 )
        goto LABEL_17;
      Buffer = ValueName.Buffer;
      v19 = 0;
      v20 = 0i64;
      v21 = (unsigned __int64)ValueName.Length >> 1;
      if( ValueName.Buffer > &ValueName.Buffer[v21] )
        v21 = 0i64;
      if( v21 )
      {
        do
        {
          v22 = *Buffer;
          ++v20;
          ++Buffer;
          v19 = v22 + 37 * v19;
        }
        while( v20 < v21 );
      }
      v36 = (int)abs32(314159269 * v19) % 1000000007;
      RtlFreeAnsiString(&ValueName);
      cbDest = (unsigned int)(2 * ResultLength);
      v9 = ExAllocatePoolWithTag(1ui64, cbDest, 1852141648i64);
      if( !v9 )
        goto LABEL_47;
      RtlStringCbPrintfW((WCHAR *)v9, cbDest, (WCHAR *)L"%s.%x.%x");
      CachedContextBaseKey = PnpCtxGetCachedContextBaseKey(
                               *(&stru_140CF2E80 + 607),
                               PNPCTX_BASE_KEY_TYPE_ENUM,
                               (VOID **)&v37);
      if( CachedContextBaseKey < 0 )
        goto LABEL_17;
      RtlInitUnicodeString(&ValueName, (PCWSTR)v9);
      LODWORD(DesiredAccessc) = 16;
      if( ZwQueryValueKey(
             (VOID *)v37,
             &ValueName,
             KeyValuePartialInformation,
             KeyValueInformation,
             DesiredAccessc,
             &ResultLength) < 0
        || v42 != 4
        || (v23 = v44, v43 != 4) )
      {
        v23 = 0;
      }
      LODWORD(Create) = 4;
      Data = v23 + 1;
      CachedContextBaseKey = ZwSetValueKey((VOID *)v37, &ValueName, 0i64, 4ui64, &Data, Create);
      if( CachedContextBaseKey < 0 )
        goto LABEL_17;
      ValueName.Buffer = (wchar_t *)L"ParentIdPrefix";
      --Data;
      *(_DWORD *)&ValueName.Length = 1966108;
      *(_QWORD *)ppszDestEnd = v9;
      RtlStringCchPrintfExW((WCHAR *)v9, cbDest >> 1, (WCHAR **)ppszDestEnd, 0i64, 0i64, (WCHAR *)L"%x&%x&%x");
      LODWORD(ResultLength) = ((__int64)(*(_QWORD *)ppszDestEnd - (_QWORD)v9) >> 1) + 1;
      LODWORD(Createa) = 2 * ResultLength;
      CachedContextBaseKey = ZwSetValueKey(KeyHandle, &ValueName, 0i64, 1ui64, v9, Createa);
      if( CachedContextBaseKey < 0 )
        goto LABEL_17;
    }
LABEL_10:
    v14 = v40;
    if( v40 )
    {
      v15 = -1i64;
      do
        ++v15;
      while( v40[v15] );
    }
    else
    {
      LODWORD(v15) = 0;
    }
    do
      ++v4;
    while( *((_WORD *)v9 + v4) );
    LODWORD(ResultLength) = v4 + v15 + 2;
    v16 = ExAllocatePoolWithTag(1ui64, 2i64 * (unsigned int)ResultLength, 1852141648i64);
    v8 = v16;
    if( v16 )
    {
      if( v14 )
        RtlStringCchPrintfW((WCHAR *)v16, (unsigned int)ResultLength, (WCHAR *)L"%s&%s");
      else
        RtlStringCchCopyW((WCHAR *)v16, (unsigned int)ResultLength, (WCHAR *)v9);
      goto LABEL_17;
    }
    goto LABEL_47;
  }
LABEL_19:
  ExReleaseResourceLite((PERESOURCE)((char *)&PnpReplaceEvent + 6688));
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
  if( v10 )
    ExFreePoolWithTag(v10, 0);
  if( v9 )
    ExFreePoolWithTag(v9, 0);
  *v5 = (WCHAR *)v8;
  return CachedContextBaseKey;
}

Referenced by:

PiCreateDriverSwDeviceCallback
PiProcessNewDeviceNode