IoGetLegacyVetoList

NTSTATUS __stdcall IoGetLegacyVetoList(
        WCHAR **VetoList,
        PNP_VETO_TYPE *VetoType,
        INT64 a3,
        INT64 a4,
        INT64 a5,
        INT64 a6,
        INT64 a7,
        INT64 a8){
  bool v10; 
  NTSTATUS result; 
  const VOID *VetoName[2]; 
  _IO_GET_LEGACY_VETO_LIST_CONTEXT Context[2]; 
  int v14; 
  int v15; 
  PNP_VETO_TYPE *v16; 
  NTSTATUS *v17; 
  NTSTATUS v18; 

  v15 = 0;
  HIDWORD(VetoName[0]) = 0;
  if( VetoList )
    *VetoList = 0i64;
  v10 = *(&PnpReplaceEvent + 6004) == 0;
  *VetoType = PNP_VetoTypeUnknown;
  v18 = 0;
  if( v10 )
    return 0;
  *(_QWORD *)Context = VetoList;
  v17 = &v18;
  v14 = 0;
  v16 = VetoType;
  IopGetLegacyVetoListDrivers(Context);
  result = v18;
  if( v18 < 0 )
    goto LABEL_14;
  if( *VetoType == PNP_VetoTypeUnknown )
  {
    PpDevNodeLockTree(PPL_SIMPLE_READ);
    IopGetLegacyVetoListDeviceNode(*(&PnpReplaceEvent + 831), Context);
    PpDevNodeUnlockTree(PPL_SIMPLE_READ);
    result = v18;
  }
  if( result < 0 )
    goto LABEL_14;
  if( *VetoType && VetoList )
  {
    LODWORD(VetoName[0]) = 0x20000;
    VetoName[1] = &dword_1407CF120;
    IopAppendLegacyVeto((const VOID ***)Context, VetoName);
    result = v18;
  }
  if( result < 0 )
  {
LABEL_14:
    if( VetoList )
    {
      if( *VetoList )
      {
        ExFreePoolWithTag(*VetoList, 0);
        result = v18;
        *VetoList = 0i64;
      }
    }
  }
  return result;
}

Referenced by:

ExpQueryLegacyDriverInformation
PnpProcessQueryRemoveAndEject