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; }
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; }