IopFilterResourceRequirementsCall

NTSTATUS __stdcall IopFilterResourceRequirementsCall(
        _DEVICE_OBJECT *DeviceObject,
        _IO_RESOURCE_REQUIREMENTS_LIST *ResReqList,
        PVOID *Information){
  __int64 v5; 
  _ADAPTER_OBJECT *v6; 
  INT64 v7; 
  VOID **Irp; 
  _IRP *v9; 
  _IO_STACK_LOCATION *CurrentStackLocation; 
  NTSTATUS v11; 
  __int128 v13; 
  __int128 Object; 
  __int64 v15; 

  Object = 0i64;
  v15 = 0i64;
  v13 = 0i64;
  LODWORD(v5) = IoGetAttachedDeviceReference((INT64)DeviceObject, (INT64)ResReqList, (INT64)Information);
  v6 = (_ADAPTER_OBJECT *)v5;
  LOBYTE(v7) = *(_BYTE *)(v5 + 76);
  Irp = IoAllocateIrp(v7, 0);
  v9 = (_IRP *)Irp;
  if( Irp )
  {
    IovUtilWatermarkIrp((_IRP *)Irp, 1ui64);
    if( ResReqList )
    {
      v9->IoStatus.Status = 0;
      *((_QWORD *)&v13 + 1) = ResReqList;
      v9->IoStatus.Information = (unsigned __int64)ResReqList;
    }
    else
    {
      LODWORD(v13) = -1073741637;
      v9->IoStatus.Status = -1073741637;
    }
    KeInitializeEvent((INT64)&Object, 1, 0);
    v9->UserIosb = (_IO_STATUS_BLOCK *)&v13;
    v9->UserEvent = (_KEVENT *)&Object;
    v9->Tail.Thread = (_ETHREAD *)KeGetCurrentThread();
    IopQueueThreadIrp(v9);
    CurrentStackLocation = v9->Tail.CurrentStackLocation;
    *(_WORD *)&CurrentStackLocation[-1].MajorFunction = 3355;
    CurrentStackLocation[-1].Parameters.SecurityContext = (_IO_SECURITY_CONTEXT *)ResReqList;
    v11 = IofCallDriver((UINT64)v6, (UINT64)v9);
    if( v11 == 259 )
    {
      KeWaitForSingleObject((UINT64)&Object, 0, 0, 0, 0i64);
      v11 = v13;
    }
    *Information = (PVOID)*((_QWORD *)&v13 + 1);
  }
  else
  {
    v11 = -1073741670;
  }
  HalPutDmaAdapter(v6);
  return v11;
}

Referenced by:

IopQueryDeviceResources