Example #1
0
int SchedBuilder::BuildRandomSchedule(void)
{
  unsigned int uiCnt = 0;

  /* Create Schedule */
  for (uiCnt = 0; uiCnt < m_uiEvents; uiCnt++) { AddRandomEvent(); }
  PrintHeader();
  PrintEvents();
  PrintFooter();
  PrintCompareFile();

  /* Done */
  return 0;
}
Example #2
0
NTSTATUS NTAPI
AfdSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp,
           PIO_STACK_LOCATION IrpSp ) {
    NTSTATUS Status = STATUS_NO_MEMORY;
    PAFD_FCB FCB;
    PFILE_OBJECT FileObject;
    PAFD_POLL_INFO PollReq = Irp->AssociatedIrp.SystemBuffer;
    PAFD_DEVICE_EXTENSION DeviceExt = DeviceObject->DeviceExtension;
    KIRQL OldIrql;
    UINT i, Signalled = 0;
    ULONG Exclusive = PollReq->Exclusive;

    UNREFERENCED_PARAMETER(IrpSp);

    AFD_DbgPrint(MID_TRACE,("Called (HandleCount %u Timeout %d)\n",
                            PollReq->HandleCount,
                            (INT)(PollReq->Timeout.QuadPart)));

    SET_AFD_HANDLES(PollReq,
                    LockHandles( PollReq->Handles, PollReq->HandleCount ));

    if( !AFD_HANDLES(PollReq) ) {
        Irp->IoStatus.Status = STATUS_NO_MEMORY;
        Irp->IoStatus.Information = 0;
        IoCompleteRequest( Irp, IO_NETWORK_INCREMENT );
        return STATUS_NO_MEMORY;
    }

    if( Exclusive ) {
        for( i = 0; i < PollReq->HandleCount; i++ ) {
            if( !AFD_HANDLES(PollReq)[i].Handle ) continue;

            KillSelectsForFCB( DeviceExt,
                               (PFILE_OBJECT)AFD_HANDLES(PollReq)[i].Handle,
                               TRUE );
        }
    }

    KeAcquireSpinLock( &DeviceExt->Lock, &OldIrql );

    for( i = 0; i < PollReq->HandleCount; i++ ) {
        if( !AFD_HANDLES(PollReq)[i].Handle ) continue;

        FileObject = (PFILE_OBJECT)AFD_HANDLES(PollReq)[i].Handle;
        FCB = FileObject->FsContext;

        AFD_DbgPrint(MID_TRACE, ("AFD: Select Events: "));
        PrintEvents( PollReq->Handles[i].Events );
        AFD_DbgPrint(MID_TRACE,("\n"));

        PollReq->Handles[i].Status =
            PollReq->Handles[i].Events & FCB->PollState;
        if( PollReq->Handles[i].Status ) {
            AFD_DbgPrint(MID_TRACE,("Signalling %p with %x\n",
                                    FCB, FCB->PollState));
            Signalled++;
        }
    }

    if( Signalled ) {
        Status = STATUS_SUCCESS;
        Irp->IoStatus.Status = Status;
        SignalSocket( NULL, Irp, PollReq, Status );
    } else {

       PAFD_ACTIVE_POLL Poll = NULL;

       Poll = ExAllocatePool( NonPagedPool, sizeof(AFD_ACTIVE_POLL) );

       if (Poll){
          Poll->Irp = Irp;
          Poll->DeviceExt = DeviceExt;
          Poll->Exclusive = Exclusive;

          KeInitializeTimerEx( &Poll->Timer, NotificationTimer );

          KeInitializeDpc( (PRKDPC)&Poll->TimeoutDpc, SelectTimeout, Poll );

          InsertTailList( &DeviceExt->Polls, &Poll->ListEntry );

          KeSetTimer( &Poll->Timer, PollReq->Timeout, &Poll->TimeoutDpc );

          Status = STATUS_PENDING;
          IoMarkIrpPending( Irp );
          (void)IoSetCancelRoutine(Irp, AfdCancelHandler);
       } else {
          AFD_DbgPrint(MAX_TRACE, ("FIXME: do something with the IRP!\n"));
          Status = STATUS_NO_MEMORY;
       }
    }

    KeReleaseSpinLock( &DeviceExt->Lock, OldIrql );

    AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status));

    return Status;
}
int __cdecl wmain(int argc, const wchar_t* const argv[])
{
   DWORD result = ERROR_SUCCESS;
   UINT32 mins = 0;
   UINT32 num = 0;
   ADDRESS_FAMILY version;
   SOCKADDR_STORAGE remoteAddr = {0};
   FWPM_NET_EVENT0** matchedEvents;
   BOOL stop = FALSE;
   WSADATA wsaData;

   //-----------------------------------------
   // Initialize Winsock
   if (WSAStartup(MAKEWORD(2,2), &wsaData))
   {
      wprintf(L"Winsock library initialization failed\n");
      result = E_UNEXPECTED;
      CHECK_RESULT(result);
   }

   //-----------------------------------------
   // Parse and Validate the command line arguments
   result = ParseArguments(
               argc, 
               argv,
               &mins,
			   &version,
               &remoteAddr,
               &stop
               );
   CHECK_RESULT(result);
   if (stop)
   {
      goto cleanup;
   }

   //-----------------------------------------
   // Get events matching the arguments
   result = GetMatchingEvents(
               mins,
			   version,
               &remoteAddr,
               &matchedEvents,
               &num);

   CHECK_RESULT(result);

   if (num == 0)
   {
      wprintf(L"No events matching criterion\n");
      goto cleanup;
   }

   if (matchedEvents == NULL)
   {
      wprintf(L"Number of events is not zero. But event pointer NULL\n");
      result = ERROR_INVALID_DATA;
      goto cleanup;
   }
      
   //-----------------------------------------
   // Print event details of all events matching criterion
   PrintEvents(matchedEvents, num);

   //-----------------------------------------
   // Free memory allocated by engine for enumerated events
   FwpmFreeMemory0((VOID**)&matchedEvents);
   
   cleanup:	
	  WSACleanup();
      return result;
}