HalpQueryInterface

NTSTATUS __stdcall HalpQueryInterface(
        _DEVICE_OBJECT *DeviceObject,
        _GUID *InterfaceType,
        VOID *InterfaceSpecificData,
        VOID *Interface,
        UINT64 InterfaceBufferSize,
        _INTERFACE *Interfacea,
        UINT64 *Length){
  NTSTATUS v7; 
  void *DeviceExtension; 
  __int64 v9; 
  __int64 v10; 
  __int64 v11; 

  v7 = 0;
  DeviceExtension = 0i64;
  if( *(_DWORD *)DeviceObject->DeviceExtension == 192 )
    DeviceExtension = DeviceObject->DeviceExtension;
  if( DeviceExtension )
  {
    v9 = *(_QWORD *)&GUID_BUS_INTERFACE_STANDARD.Data1 - *(_QWORD *)&InterfaceType->Data1;
    if( *(_QWORD *)&GUID_BUS_INTERFACE_STANDARD.Data1 == *(_QWORD *)&InterfaceType->Data1 )
      v9 = *(_QWORD *)GUID_BUS_INTERFACE_STANDARD.Data4 - *(_QWORD *)InterfaceType->Data4;
    if( !v9 )
    {
      *(_DWORD *)Length = 64;
      if( (unsigned int)InterfaceBufferSize >= 0x40 )
      {
        *(_DWORD *)&Interfacea->Size = 65600;
        if( !Interface )
          return -1073741811;
        Interfacea->Context = Interface;
        Interfacea[1].Context = HaliGetDmaAdapter;
        Interfacea->InterfaceReference = (void(__fastcall *)(void *))xHalTimerWatchdogStop;
        Interfacea[1].InterfaceReference = (void(__fastcall *)(void *))HalSystemVectorDispatchEntry;
        Interfacea[1].InterfaceDereference = (void(__fastcall *)(void *))HalSystemVectorDispatchEntry;
        Interfacea->InterfaceDereference = (void(__fastcall *)(void *))xHalTimerWatchdogStop;
        *(_QWORD *)&Interfacea[1].Size = 0i64;
        return 0;
      }
      return -1073741789;
    }
  }
  v10 = *(_QWORD *)&InterfaceType->Data1 - *(_QWORD *)&GUID_ACPI_CMOS_INTERFACE_STANDARD.Data1;
  if( *(_QWORD *)&InterfaceType->Data1 == *(_QWORD *)&GUID_ACPI_CMOS_INTERFACE_STANDARD.Data1 )
    v10 = *(_QWORD *)InterfaceType->Data4 - *(_QWORD *)GUID_ACPI_CMOS_INTERFACE_STANDARD.Data4;
  if( !v10 )
  {
    if( (unsigned int)InterfaceBufferSize >= 0x30 )
    {
      if( (_DWORD)Interface )
        return -1073741637;
      Interfacea->InterfaceReference = (void(__fastcall *)(void *))xHalTimerWatchdogStop;
      Interfacea->InterfaceDereference = (void(__fastcall *)(void *))xHalTimerWatchdogStop;
      *(_QWORD *)&Interfacea[1].Size = HalpcGetCmosDataByType;
      Interfacea[1].Context = HalpcSetCmosDataByType;
      *(_DWORD *)&Interfacea->Size = 65584;
      *(_DWORD *)Length = 48;
      return 0;
    }
    *(_DWORD *)Length = 48;
    return -1073741789;
  }
  v11 = *(_QWORD *)&InterfaceType->Data1 - *(_QWORD *)&GUID_DMA_CACHE_COHERENCY_INTERFACE.Data1;
  if( *(_QWORD *)&InterfaceType->Data1 == *(_QWORD *)&GUID_DMA_CACHE_COHERENCY_INTERFACE.Data1 )
    v11 = *(_QWORD *)InterfaceType->Data4 - *(_QWORD *)GUID_DMA_CACHE_COHERENCY_INTERFACE.Data4;
  if( v11 )
    return -1073741637;
  *(_DWORD *)Length = 0;
  if( (unsigned int)InterfaceBufferSize < 0x28 )
    return -1073741789;
  if( !(_WORD)InterfaceSpecificData )
    return -1073741637;
  LOBYTE(Interfacea[1].Size) = 1;
  Interfacea->InterfaceReference = (void(__fastcall *)(void *))xHalTimerWatchdogStop;
  Interfacea->InterfaceDereference = (void(__fastcall *)(void *))xHalTimerWatchdogStop;
  *(_DWORD *)&Interfacea->Size = 65576;
  Interfacea->Context = 0i64;
  *(_DWORD *)Length = 40;
  return v7;
}

Referenced by:

HalpDispatchPnp