17#define ARBITER_SIG 'sbrA'
18#define TAG_ARBITER 'ibrA'
93#if (NTDDI_VERSION >= NTDDI_VISTA)
361 if (Arbiter->PossibleAllocation)
365 Arbiter->PossibleAllocation =
NULL;
368 if (Arbiter->Allocation)
372 Arbiter->Allocation =
NULL;
375 if (Arbiter->AllocationStack)
378 Arbiter->AllocationStack =
NULL;
379 Arbiter->AllocationStackMaxSize = 0;
382#if (NTDDI_VERSION >= NTDDI_VISTA)
383 if (Arbiter->TransactionEvent)
386 Arbiter->TransactionEvent =
NULL;
390 if (Arbiter->MutexEvent)
393 Arbiter->MutexEvent =
NULL;
403 _In_ CM_RESOURCE_TYPE ResourceType,
412 DPRINT(
"ArbInitializeArbiterInstance: '%S'\n", ArbiterName);
423 Arbiter->BusDeviceObject = BusDeviceObject;
424 Arbiter->Name = ArbiterName;
425 Arbiter->ResourceType = ResourceType;
426 Arbiter->TransactionInProgress =
FALSE;
427#if (NTDDI_VERSION >= NTDDI_VISTA)
428 Arbiter->OrderingName = OrderName;
433 if (!Arbiter->MutexEvent)
440#if (NTDDI_VERSION >= NTDDI_VISTA)
443 if (!Arbiter->TransactionEvent)
452 if (!Arbiter->AllocationStack)
457 Arbiter->AllocationStackMaxSize =
PAGE_SIZE;
459 if (!Arbiter->Allocation)
467 if (!Arbiter->PossibleAllocation)
474 if (!Arbiter->TestAllocation)
476 if (!Arbiter->RetestAllocation)
478 if (!Arbiter->CommitAllocation)
480 if (!Arbiter->RollbackAllocation)
482 if (!Arbiter->BootAllocation)
484 if (!Arbiter->AddReserved)
486 if (!Arbiter->QueryConflict)
488 if (!Arbiter->StartArbiter)
490 if (!Arbiter->PreprocessEntry)
492 if (!Arbiter->AllocateEntry)
494 if (!Arbiter->GetNextAllocationRange)
496 if (!Arbiter->FindSuitableRange)
498 if (!Arbiter->AddAllocation)
500 if (!Arbiter->BacktrackAllocation)
502 if (!Arbiter->OverrideConflict)
504#if (NTDDI_VERSION >= NTDDI_VISTA)
505 if (!Arbiter->InitializeRangeList)
512 DPRINT1(
"ArbInitializeArbiterInstance: ArbBuildAssignmentOrdering failed, Status %X\n",
Status);
519 DPRINT1(
"ArbInitializeArbiterInstance: '%S' failed, Status %X\n", ArbiterName,
Status);
COMPILER_DEPENDENT_UINT64 UINT64
BOOLEAN NTAPI ArbGetNextAllocationRange(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
VOID NTAPI ArbAddAllocation(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
VOID NTAPI ArbConfirmAllocation(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
NTSTATUS NTAPI ArbArbiterHandler(_In_ PVOID Context, _In_ ARBITER_ACTION Action, _Inout_ PARBITER_PARAMETERS Parameters)
NTSTATUS NTAPI ArbInitializeRangeList(_In_ PARBITER_INSTANCE Arbiter, _In_ ULONG ResourceCount, _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Resources, _Inout_ PRTL_RANGE_LIST RangeList)
NTSTATUS NTAPI ArbCopyOrderingList(_Out_ PARBITER_ORDERING_LIST Destination, _In_ PARBITER_ORDERING_LIST Source)
VOID NTAPI ArbDeleteArbiterInstance(_In_ PARBITER_INSTANCE Arbiter)
BOOLEAN NTAPI ArbFindSuitableRange(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
NTSTATUS NTAPI ArbQueryConflict(_In_ PARBITER_INSTANCE Arbiter, _In_ PDEVICE_OBJECT PhysicalDeviceObject, _In_ PIO_RESOURCE_DESCRIPTOR ConflictingResource, _Out_ PULONG ConflictCount, _Out_ PARBITER_CONFLICT_INFO *Conflicts)
NTSTATUS NTAPI ArbCommitAllocation(_In_ PARBITER_INSTANCE Arbiter)
BOOLEAN NTAPI ArbOverrideConflict(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
NTSTATUS NTAPI ArbPreprocessEntry(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
NTSTATUS NTAPI ArbTestAllocation(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PLIST_ENTRY ArbitrationList)
NTSTATUS NTAPI ArbInitializeOrderingList(_Out_ PARBITER_ORDERING_LIST OrderingList)
NTSTATUS NTAPI ArbStartArbiter(_In_ PARBITER_INSTANCE Arbiter, _In_ PCM_RESOURCE_LIST StartResources)
NTSTATUS NTAPI ArbAddReserved(_In_ PARBITER_INSTANCE Arbiter, _In_opt_ PIO_RESOURCE_DESCRIPTOR Requirement, _In_opt_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Resource)
VOID NTAPI ArbBacktrackAllocation(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
NTSTATUS NTAPI ArbBootAllocation(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PLIST_ENTRY ArbitrationList)
NTSTATUS NTAPI ArbAllocateEntry(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
NTSTATUS NTAPI ArbRetestAllocation(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PLIST_ENTRY ArbitrationList)
VOID NTAPI ArbFreeOrderingList(_Inout_ PARBITER_ORDERING_LIST OrderingList)
NTSTATUS NTAPI ArbInitializeArbiterInstance(_Inout_ PARBITER_INSTANCE Arbiter, _In_ PDEVICE_OBJECT BusDeviceObject, _In_ CM_RESOURCE_TYPE ResourceType, _In_ PCWSTR ArbiterName, _In_ PCWSTR OrderName, _In_ PARB_TRANSLATE_ORDERING TranslateOrderingFunction)
NTSTATUS NTAPI ArbPruneOrdering(_Inout_ PARBITER_ORDERING_LIST OrderingList, _In_ UINT64 Start, _In_ UINT64 End)
NTSTATUS NTAPI ArbAddOrdering(_Inout_ PARBITER_ORDERING_LIST OrderingList, _In_ UINT64 Start, _In_ UINT64 End)
NTSTATUS NTAPI ArbSortArbitrationList(_Inout_ PLIST_ENTRY ArbitrationList)
NTSTATUS NTAPI ArbBuildAssignmentOrdering(_Inout_ PARBITER_INSTANCE Arbiter, _In_ PCWSTR AllocationOrderName, _In_ PCWSTR ReservedResourcesName, _In_opt_ PARB_TRANSLATE_ORDERING TranslateOrderingFunction)
NTSTATUS NTAPI ArbRollbackAllocation(_In_ PARBITER_INSTANCE Arbiter)
NTSTATUS(NTAPI * PARB_TRANSLATE_ORDERING)(_Out_ PIO_RESOURCE_DESCRIPTOR OutIoDescriptor, _In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor)
PDEVICE_OBJECT PhysicalDeviceObject
_Acquires_exclusive_lock_ Resource _Acquires_shared_lock_ Resource _Inout_ PERESOURCE Resource
#define STATUS_NOT_IMPLEMENTED
#define NT_SUCCESS(StatCode)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define KeInitializeEvent(pEvt, foo, foo2)
static ULONG ResourceCount
#define ExFreePoolWithTag(_P, _T)
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
_In_ PUNICODE_STRING _Inout_ PUNICODE_STRING Destination
NTSYSAPI VOID NTAPI RtlInitializeRangeList(_Out_ PRTL_RANGE_LIST RangeList)
NTSYSAPI VOID NTAPI RtlFreeRangeList(_In_ PRTL_RANGE_LIST RangeList)
#define STATUS_INSUFFICIENT_RESOURCES
_Must_inspect_result_ _In_ WDFQUEUE _In_opt_ WDFREQUEST _In_opt_ WDFFILEOBJECT _Inout_opt_ PWDF_REQUEST_PARAMETERS Parameters
_In_ WDFIOTARGET _In_ _Strict_type_match_ WDF_IO_TARGET_SENT_IO_ACTION Action
enum _ARBITER_ACTION ARBITER_ACTION