17#define ARBITER_SIG 'sbrA'
22#if (NTDDI_VERSION >= NTDDI_VISTA)
41#if (NTDDI_VERSION >= NTDDI_VISTA)
60#if (NTDDI_VERSION >= NTDDI_VISTA)
79#if (NTDDI_VERSION >= NTDDI_VISTA)
99#if (NTDDI_VERSION >= NTDDI_VISTA)
118#if (NTDDI_VERSION >= NTDDI_VISTA)
307 if (Arbiter->PossibleAllocation)
311 Arbiter->PossibleAllocation =
NULL;
314 if (Arbiter->Allocation)
318 Arbiter->Allocation =
NULL;
321 if (Arbiter->AllocationStack)
324 Arbiter->AllocationStack =
NULL;
325 Arbiter->AllocationStackMaxSize = 0;
331#if (NTDDI_VERSION >= NTDDI_VISTA)
332 if (Arbiter->TransactionEvent)
335 Arbiter->TransactionEvent =
NULL;
339 if (Arbiter->MutexEvent)
342 Arbiter->MutexEvent =
NULL;
352 _In_ CM_RESOURCE_TYPE ResourceType,
361 DPRINT(
"ArbiterLibInitializeInstance: '%S'\n", ArbiterName);
372 Arbiter->BusDeviceObject = BusDeviceObject;
373 Arbiter->Name = ArbiterName;
374 Arbiter->ResourceType = ResourceType;
375 Arbiter->TransactionInProgress =
FALSE;
376#if (NTDDI_VERSION >= NTDDI_VISTA)
377 Arbiter->OrderingName = OrderName;
382 if (!Arbiter->MutexEvent)
389#if (NTDDI_VERSION >= NTDDI_VISTA)
392 if (!Arbiter->TransactionEvent)
401 if (!Arbiter->AllocationStack)
406 Arbiter->AllocationStackMaxSize =
PAGE_SIZE;
408 if (!Arbiter->Allocation)
416 if (!Arbiter->PossibleAllocation)
423 if (!Arbiter->TestAllocation)
425 if (!Arbiter->RetestAllocation)
427 if (!Arbiter->CommitAllocation)
429 if (!Arbiter->RollbackAllocation)
431 if (!Arbiter->BootAllocation)
433 if (!Arbiter->AddReserved)
435 if (!Arbiter->QueryConflict)
437 if (!Arbiter->StartArbiter)
439 if (!Arbiter->PreprocessEntry)
441 if (!Arbiter->AllocateEntry)
443 if (!Arbiter->GetNextAllocationRange)
445 if (!Arbiter->FindSuitableRange)
447 if (!Arbiter->AddAllocation)
449 if (!Arbiter->BacktrackAllocation)
451 if (!Arbiter->OverrideConflict)
453#if (NTDDI_VERSION >= NTDDI_VISTA)
454 if (!Arbiter->InitializeRangeList)
461 DPRINT1(
"ArbiterLibInitializeInstance: ArbiterLibDefaultAssignmentOrdering failed, Status %X\n",
Status);
468 DPRINT1(
"ArbiterLibInitializeInstance: '%S' failed, Status %X\n", ArbiterName,
Status);
NTSTATUS NTAPI ArbiterLibBootAllocation(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_BOOT_ALLOCATION_PARAMETERS Parameters)
BOOLEAN NTAPI ArbiterLibGetNextAllocationRange(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
NTSTATUS NTAPI ArbiterLibInitializeRangeList(_In_ PARBITER_INSTANCE Arbiter, _In_ ULONG ResourceCount, _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Resources, _Inout_ PRTL_RANGE_LIST RangeList)
NTSTATUS NTAPI ArbiterLibAllocateEntry(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
VOID NTAPI ArbiterLibConfirmAllocation(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
NTSTATUS NTAPI ArbiterLibRetestAllocation(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_RETEST_ALLOCATION_PARAMETERS Parameters)
NTSTATUS NTAPI ArbiterLibTestAllocation(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_TEST_ALLOCATION_PARAMETERS Parameters)
NTSTATUS NTAPI ArbiterLibAddReserved(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ADD_RESERVED_PARAMETERS Parameters)
VOID NTAPI ArbiterLibBacktrackAllocation(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
BOOLEAN NTAPI ArbiterLibFindSuitableRange(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
NTSTATUS NTAPI ArbiterLibCommitAllocation(_In_ PARBITER_INSTANCE Arbiter)
VOID NTAPI ArbiterLibDeleteInstance(_In_ PARBITER_INSTANCE Arbiter)
NTSTATUS NTAPI ArbiterLibRollbackAllocation(_In_ PARBITER_INSTANCE Arbiter)
NTSTATUS NTAPI ArbiterLibSortArbitrationList(_Inout_ PLIST_ENTRY ArbitrationList)
NTSTATUS NTAPI ArbiterLibPreprocessEntry(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
NTSTATUS NTAPI ArbiterLibStartArbiter(_In_ PARBITER_INSTANCE Arbiter, _In_ PCM_RESOURCE_LIST StartResources)
BOOLEAN NTAPI ArbiterLibOverrideConflict(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
NTSTATUS NTAPI ArbiterLibHandler(_In_ PVOID Context, _In_ ARBITER_ACTION Action, _Inout_ PARBITER_PARAMETERS Parameters)
VOID NTAPI ArbiterLibAddAllocation(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
NTSTATUS NTAPI ArbiterLibInitializeInstance(_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 ArbiterLibQueryConflict(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_QUERY_CONFLICT_PARAMETERS Parameters)
NTSTATUS(NTAPI * PARB_TRANSLATE_ORDERING)(_Out_ PIO_RESOURCE_DESCRIPTOR OutIoDescriptor, _In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor)
NTSTATUS NTAPI ArbiterLibDefaultAssignmentOrdering(_Inout_ PARBITER_INSTANCE Arbiter, _In_ PCWSTR AllocationOrderName, _In_ PCWSTR ReservedResourcesName, _In_opt_ PARB_TRANSLATE_ORDERING TranslateOrderingFunction)
VOID NTAPI ArbiterLibFreeOrderingList(_Inout_ PARBITER_ORDERING_LIST OrderingList)
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)
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