PoStoreRequester

NTSTATUS __stdcall PoStoreRequester(
        _DIAGNOSTIC_CONTEXT *Requester,
        _DIAGNOSTIC_BUFFER *StoredRequester,
        UINT64 *BufferSizePointer,
        UINT8 ShortName){
  UINT64 v4; 
  unsigned __int64 v6; 
  char v7; 
  unsigned __int16 *v8; 
  _DIAGNOSTIC_BUFFER *v9; 
  char v10; 
  _OBJECT_NAME_INFORMATION *ImageFileName; 
  __int64 v12; 
  char *v13; 
  char *i; 
  char *v15; 
  unsigned __int64 v16; 
  _DEVICE_OBJECT *DeviceObject; 
  _DEVICE_OBJECT *DeviceAttachmentBaseRefWithTag; 
  _DEVICE_OBJECT *v20; 
  NTSTATUS DeviceProperty; 
  _UNICODE_STRING *p_DriverName; 
  unsigned int v23; 
  __int64 v24; 
  unsigned __int16 *DeviceNode; 
  UINT64 v26; 
  UINT64 ResultLength; 
  UINT64 *v28; 

  v28 = BufferSizePointer;
  v4 = *BufferSizePointer;
  LODWORD(ResultLength) = 0;
  v6 = 40i64;
  v7 = 0;
  v8 = 0i64;
  v9 = 0i64;
  if( StoredRequester && v4 >= 0x28 )
  {
    v9 = StoredRequester + 1;
    StoredRequester->CallerType = Requester->CallerType;
    v10 = 1;
  }
  else
  {
    v10 = 0;
  }
  if( Requester->CallerType )
  {
    if( v10 )
    {
      StoredRequester->ProcessId = (unsigned int)Requester->Process->UniqueProcessId;
      StoredRequester->ServiceTag = Requester->ServiceTag;
    }
    ImageFileName = Requester->Process->SeAuditProcessCreationInfo.ImageFileName;
    v12 = *(_WORD *)ImageFileName;
    v13 = (char *)*((_QWORD *)ImageFileName + 1);
    LODWORD(ResultLength) = *(_WORD *)ImageFileName;
    if( ShortName )
    {
      for( i = &v13[2 * ((unsigned __int64)(unsigned int)v12 >> 1)]; i != v13 && *(_WORD *)i != 92; i -= 2 )
        ;
      if( i != v13 )
      {
        v15 = i + 2;
        v12 = (unsigned int)((_DWORD)v13 - (_DWORD)v15 + v12);
        v13 = v15;
        LODWORD(ResultLength) = v12;
      }
    }
    v16 = (unsigned int)v12;
    v6 = v12 + 42;
    if( v10 && v4 >= v6 )
    {
      v10 = 1;
      memmove(v9, v13, v12);
      *((_WORD *)&v9->Size + (v16 >> 1)) = 0;
      StoredRequester->ProcessImageNameOffset = (char *)v9 - (char *)StoredRequester;
    }
    else
    {
      v10 = 0;
    }
  }
  else
  {
    DeviceObject = Requester->DeviceObject;
    if( DeviceObject )
    {
      DeviceAttachmentBaseRefWithTag = IoGetDeviceAttachmentBaseRefWithTag(DeviceObject, 0x67446F50ui64);
      v20 = DeviceAttachmentBaseRefWithTag;
      if( DeviceAttachmentBaseRefWithTag )
      {
        if( DeviceAttachmentBaseRefWithTag->DeviceObjectExtension->DeviceNode )
        {
          if( v10 )
          {
            DeviceProperty = IoGetDeviceProperty(
                               DeviceAttachmentBaseRefWithTag,
                               0,
                               (unsigned int)(v4 - 40),
                               v9,
                               &ResultLength);
          }
          else
          {
            DeviceProperty = IoGetDeviceProperty(DeviceAttachmentBaseRefWithTag, 0, 0i64, 0i64, &ResultLength);
            if( DeviceProperty == -1073741789 )
              DeviceProperty = 0;
          }
        }
        else
        {
          DeviceProperty = -1073741808;
        }
        if( DeviceProperty < 0 )
        {
          p_DriverName = &v20->DriverObject->DriverName;
          v23 = p_DriverName->Length + 2;
          LODWORD(ResultLength) = v23;
          if( v10 && v4 >= (unsigned __int64)v23 + 40 )
          {
            v10 = 1;
            RtlStringCbCopyUnicodeString((CHAR *)v9, v23, p_DriverName);
          }
          else
          {
            v10 = 0;
          }
        }
        v24 = (unsigned int)ResultLength;
        v6 = (unsigned int)ResultLength + 40i64;
        if( v10 )
        {
          v7 = 1;
          StoredRequester->ProcessImageNameOffset = (char *)v9 - (char *)StoredRequester;
          v9 = (_DIAGNOSTIC_BUFFER *)((char *)v9 + v24);
        }
        DeviceNode = (unsigned __int16 *)v20->DeviceObjectExtension->DeviceNode;
        if( DeviceNode )
        {
          v8 = DeviceNode + 20;
          v26 = (unsigned int)DeviceNode[20] + 2;
          v6 += v26;
          LODWORD(ResultLength) = DeviceNode[20] + 2;
          if( v10 && v4 >= v6 )
          {
            v10 = 1;
            RtlStringCbCopyUnicodeString((CHAR *)v9, v26, (_UNICODE_STRING *)(DeviceNode + 20));
            StoredRequester->DevicePathOffset = (char *)v9 - (char *)StoredRequester;
          }
          else
          {
            v10 = 0;
          }
        }
        ObfDereferenceObjectWithTag(v20, 0x67446F50ui64);
      }
    }
  }
  *v28 = v6;
  if( !v10 )
    return -1073741789;
  if( StoredRequester->CallerType == KernelRequester )
  {
    if( !v7 )
      StoredRequester->ProcessImageNameOffset = 0i64;
    if( !v8 )
      StoredRequester->DevicePathOffset = 0i64;
  }
  return 0;
}

Referenced by:

PoStoreDiagnosticContext
PopDiagTracePowerRequestCreate
PopUmpoSendPowerRequestOverrideQuery