WmipGetGuidObjectInstanceInfo

NTSTATUS __stdcall WmipGetGuidObjectInstanceInfo(
        _WMIGUIDOBJECT *GuidObject,
        ULONG_PTR Pdo,
        _UNICODE_STRING *BaseName,
        UINT64 *BaseIndex){
  UINT64 *v5; 
  _UNICODE_STRING *v6; 
  int DeviceInstanceName; 
  __int64 v8; 
  __int64 v9; 
  int v10; 
  wchar_t *Buffer; 
  _QWORD *v12; 
  _QWORD *v13; 
  __int64 v14; 
  __int64 v15; 
  _UNICODE_STRING v16; 
  _UNICODE_STRING Str2[4]; 

  v5 = BaseIndex;
  v6 = BaseName;
  Str2[0] = 0i64;
  DeviceInstanceName = IoGetDeviceInstanceName(*(PVOID *)&Pdo, Str2, BaseName);
  if( DeviceInstanceName >= 0 )
  {
    v8 = *((_QWORD *)GuidObject + 7);
    v9 = Str2[0].Length >> 1;
    v10 = 0;
    DeviceInstanceName = -1073741162;
    KeWaitForSingleObject((UINT64)&ExBootDevicesRemovedEvent + 3072, 0, 0, 0, 0i64);
    Buffer = Str2[0].Buffer;
    if( *(_DWORD *)(v8 + 36) )
    {
      v12 = (_QWORD *)(v8 + 56);
      v13 = (_QWORD *)*v12;
      if( (_QWORD *)*v12 != v12 )
      {
        while( 1 )
        {
          if( (v13[2] & 1) != 0 )
          {
            v14 = v13[11];
            v15 = -1i64;
            do
              ++v15;
            while( *(_WORD *)(v14 + 2 * v15 + 4) );
            if( !wcsnicmp((const wchar_t *)(v14 + 4), Buffer, (unsigned __int16)v9)
              && (unsigned __int16)v15 == (unsigned __int16)v9 + 1
              && *(_WORD *)(v14 + 2i64 * (unsigned __int16)v15 + 2) == 95 )
            {
              break;
            }
          }
          v13 = (_QWORD *)*v13;
          if( v13 == v12 )
            goto LABEL_11;
        }
        DeviceInstanceName = 0;
        v10 = *(_DWORD *)v13[11];
LABEL_11:
        v6 = BaseName;
      }
      v5 = BaseIndex;
    }
    KeReleaseMutex((_KMUTANT *)((char *)&ExBootDevicesRemovedEvent + 3072), 0);
    if( DeviceInstanceName >= 0 )
    {
      v16 = Str2[0];
      *(_DWORD *)v5 = v10;
      Buffer = 0i64;
      Str2[0].Buffer = 0i64;
      DeviceInstanceName = 0;
      *v6 = v16;
    }
    if( Buffer )
      RtlFreeAnsiString(Str2);
  }
  return DeviceInstanceName;
}

Referenced by:

IoWMIDeviceObjectToInstanceName
WmipTranslateFileHandle