ReactOS 0.4.17-dev-573-g8315b8c
arbiter.h
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Arbitrartion Library
3 * LICENSE: MIT (https://spdx.org/licenses/MIT)
4 * PURPOSE: Generic Arbiter Library
5 * COPYRIGHT: Copyright 2026 Justin Miller <justin.miller@reactos.org>
6 */
7
8#pragma once
9
11{
14#if (NTDDI_VERSION >= NTDDI_VISTA)
17#else
20#endif
26
28{
42
43typedef struct _ARBITER_ORDERING
44{
48
50{
55
57
58typedef NTSTATUS
60 _In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor,
61 _Out_ PUINT64 OutMinimumAddress,
62 _Out_ PUINT64 OutMaximumAddress,
63 _Out_ PUINT64 OutLength,
64 _Out_ PUINT64 OutAlignment
65);
66
67typedef NTSTATUS
69 _In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor,
72);
73
74typedef NTSTATUS
78 _Out_ PUINT64 OutLength
79);
80
81typedef INT32
83 _In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor
84);
85
86#if (NTDDI_VERSION >= NTDDI_VISTA)
87typedef NTSTATUS
89 _In_ PARBITER_INSTANCE Arbiter,
91);
92
93typedef NTSTATUS
95 _In_ PARBITER_INSTANCE Arbiter,
97);
98
99typedef NTSTATUS
101 _In_ PARBITER_INSTANCE Arbiter,
103);
104
105typedef NTSTATUS
107 _In_ PARBITER_INSTANCE Arbiter,
109);
110
111typedef NTSTATUS
113 _In_ PARBITER_INSTANCE Arbiter,
115);
116
117typedef NTSTATUS
119 _In_ PARBITER_INSTANCE Arbiter,
121);
122
123#else
124typedef NTSTATUS
126 _In_ PARBITER_INSTANCE Arbiter,
127 _Inout_ PLIST_ENTRY ArbitrationList
128);
129
130typedef NTSTATUS
132 _In_ PARBITER_INSTANCE Arbiter,
133 _Inout_ PLIST_ENTRY ArbitrationList
134);
135
136typedef NTSTATUS
138 _In_ PARBITER_INSTANCE Arbiter,
139 _Inout_ PLIST_ENTRY ArbitrationList
140);
141
142typedef NTSTATUS
144 _In_ PARBITER_INSTANCE Arbiter,
145 _In_ PLIST_ENTRY ArbitrationList
146);
147
148typedef NTSTATUS
150 _In_ PARBITER_INSTANCE Arbiter,
152 _In_ PIO_RESOURCE_DESCRIPTOR ConflictingResource,
153 _Out_ PULONG ConflictCount,
155);
156
157typedef NTSTATUS
159 _In_ PARBITER_INSTANCE Arbiter,
162);
163#endif // (NTDDI_VERSION >= NTDDI_VISTA)
164
165typedef NTSTATUS
167 _In_ PARBITER_INSTANCE Arbiter
168);
169
170typedef NTSTATUS
172 _In_ PARBITER_INSTANCE Arbiter
173);
174
175typedef NTSTATUS
177 _In_ PARBITER_INSTANCE Arbiter,
178 _In_ PCM_RESOURCE_LIST StartResources
179);
180
181typedef NTSTATUS
183 _In_ PARBITER_INSTANCE Arbiter,
185);
186
187typedef NTSTATUS
189 _In_ PARBITER_INSTANCE Arbiter,
191);
192
193typedef BOOLEAN
195 _In_ PARBITER_INSTANCE Arbiter,
197);
198
199typedef BOOLEAN
201 _In_ PARBITER_INSTANCE Arbiter,
203);
204
205typedef VOID
207 _In_ PARBITER_INSTANCE Arbiter,
209);
210
211typedef VOID
213 _In_ PARBITER_INSTANCE Arbiter,
215);
216
217typedef BOOLEAN
219 _In_ PARBITER_INSTANCE Arbiter,
221);
222
223typedef NTSTATUS
225 _Out_ PIO_RESOURCE_DESCRIPTOR OutIoDescriptor,
226 _In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor
227);
228
229#if (NTDDI_VERSION >= NTDDI_VISTA)
230typedef NTSTATUS
232 _In_ PARBITER_INSTANCE Arbiter,
233 _In_ ULONG DescriptorCount,
235 _Inout_ PRTL_RANGE_LIST RangeList
236);
237#endif
238
239typedef struct _ARBITER_INSTANCE
240{
244#if (NTDDI_VERSION >= NTDDI_VISTA)
245 PCWSTR OrderingName; // Vista+: selects registry AllocationOrder<OrderingName>
246#endif
247 CM_RESOURCE_TYPE ResourceType;
276#if (NTDDI_VERSION >= NTDDI_VISTA)
278#endif
280#if (NTDDI_VERSION >= NTDDI_VISTA)
282#endif
287#if (NTDDI_VERSION >= NTDDI_VISTA) && (NTDDI_VERSION < NTDDI_WINBLUE)
288 WCHAR PdoDescriptionString[336];
289 CHAR PdoSymbolicNameString[672];
290 WCHAR PdoAddressString[1];
291#endif
293
294CODE_SEG("PAGE")
296NTAPI
299 _In_ PDEVICE_OBJECT BusDeviceObject,
300 _In_ CM_RESOURCE_TYPE ResourceType,
301 _In_ PCWSTR ArbiterName,
302 _In_ PCWSTR OrderName,
303 _In_ PARB_TRANSLATE_ORDERING TranslateOrderingFunction
304);
#define CODE_SEG(...)
#define VOID
Definition: acefi.h:82
unsigned short UINT16
Definition: actypes.h:129
unsigned char BOOLEAN
Definition: actypes.h:127
COMPILER_DEPENDENT_UINT64 UINT64
Definition: actypes.h:131
BOOLEAN(NTAPI * PARB_FIND_SUITABLE_RANGE)(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
Definition: arbiter.h:200
NTSTATUS(NTAPI * PARB_ALLOCATE_ENTRY)(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
Definition: arbiter.h:188
struct _ARBITER_ORDERING_LIST * PARBITER_ORDERING_LIST
NTSTATUS(NTAPI * PARB_ADD_RESERVED)(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ADD_RESERVED_PARAMETERS Parameters)
Definition: arbiter.h:118
NTSTATUS(NTAPI * PARB_ROLLBACK_ALLOCATION)(_In_ PARBITER_INSTANCE Arbiter)
Definition: arbiter.h:171
VOID(NTAPI * PARB_ADD_ALLOCATION)(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
Definition: arbiter.h:206
struct _ARBITER_ALTERNATIVE * PARBITER_ALTERNATIVE
struct _ARBITER_ALLOCATION_STATE ARBITER_ALLOCATION_STATE
NTSTATUS(NTAPI * PARB_TRANSLATE_ORDERING)(_Out_ PIO_RESOURCE_DESCRIPTOR OutIoDescriptor, _In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor)
Definition: arbiter.h:224
struct _ARBITER_ALLOCATION_STATE * PARBITER_ALLOCATION_STATE
NTSTATUS(NTAPI * PARB_INITIALIZE_RANGE_LIST)(_In_ PARBITER_INSTANCE Arbiter, _In_ ULONG DescriptorCount, _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptors, _Inout_ PRTL_RANGE_LIST RangeList)
Definition: arbiter.h:231
BOOLEAN(NTAPI * PARB_OVERRIDE_CONFLICT)(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
Definition: arbiter.h:218
NTSTATUS(NTAPI * PARB_PREPROCESS_ENTRY)(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
Definition: arbiter.h:182
struct _ARBITER_ORDERING * PARBITER_ORDERING
NTSTATUS(NTAPI * PARB_RETEST_ALLOCATION)(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_RETEST_ALLOCATION_PARAMETERS Parameters)
Definition: arbiter.h:94
NTSTATUS(NTAPI * PARB_QUERY_ARBITRATE)(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_QUERY_ARBITRATE_PARAMETERS Parameters)
Definition: arbiter.h:106
BOOLEAN(NTAPI * PARB_GET_NEXT_ALLOCATION_RANGE)(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
Definition: arbiter.h:194
NTSTATUS(NTAPI * PARB_PACK_RESOURCE)(_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor, _In_ UINT64 Start, _Out_ PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor)
Definition: arbiter.h:68
struct _ARBITER_ORDERING ARBITER_ORDERING
struct _ARBITER_INSTANCE ARBITER_INSTANCE
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)
Definition: arbiter.c:400
struct _ARBITER_INSTANCE * PARBITER_INSTANCE
Definition: arbiter.h:56
NTSTATUS(NTAPI * PARB_UNPACK_RESOURCE)(_In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor, _Out_ PUINT64 Start, _Out_ PUINT64 OutLength)
Definition: arbiter.h:75
NTSTATUS(NTAPI * PARB_BOOT_ALLOCATION)(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_BOOT_ALLOCATION_PARAMETERS Parameters)
Definition: arbiter.h:100
struct _ARBITER_ALTERNATIVE ARBITER_ALTERNATIVE
VOID(NTAPI * PARB_BACKTRACK_ALLOCATION)(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_ALLOCATION_STATE ArbState)
Definition: arbiter.h:212
NTSTATUS(NTAPI * PARB_UNPACK_REQUIREMENT)(_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor, _Out_ PUINT64 OutMinimumAddress, _Out_ PUINT64 OutMaximumAddress, _Out_ PUINT64 OutLength, _Out_ PUINT64 OutAlignment)
Definition: arbiter.h:59
NTSTATUS(NTAPI * PARB_QUERY_CONFLICT)(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_QUERY_CONFLICT_PARAMETERS Parameters)
Definition: arbiter.h:112
NTSTATUS(NTAPI * PARB_START_ARBITER)(_In_ PARBITER_INSTANCE Arbiter, _In_ PCM_RESOURCE_LIST StartResources)
Definition: arbiter.h:176
INT32(NTAPI * PARB_SCORE_REQUIREMENT)(_In_ PIO_RESOURCE_DESCRIPTOR IoDescriptor)
Definition: arbiter.h:82
NTSTATUS(NTAPI * PARB_COMMIT_ALLOCATION)(_In_ PARBITER_INSTANCE Arbiter)
Definition: arbiter.h:166
NTSTATUS(NTAPI * PARB_TEST_ALLOCATION)(_In_ PARBITER_INSTANCE Arbiter, _Inout_ PARBITER_TEST_ALLOCATION_PARAMETERS Parameters)
Definition: arbiter.h:88
struct _ARBITER_ORDERING_LIST ARBITER_ORDERING_LIST
LONG NTSTATUS
Definition: precomp.h:26
unsigned __int64 * PUINT64
Definition: basetsd.h:181
PDEVICE_OBJECT PhysicalDeviceObject
Definition: btrfs_drv.h:1157
_Acquires_exclusive_lock_ Resource _Acquires_shared_lock_ Resource _Inout_ PERESOURCE Resource
Definition: cdprocs.h:843
#define NTSTATUS
Definition: precomp.h:19
return pTarget Start()
BOOLEAN(NTAPI * PRTL_CONFLICT_RANGE_CALLBACK)(PVOID Context, struct _RTL_RANGE *Range)
Definition: rtltypes.h:697
#define _Inout_
Definition: no_sal2.h:162
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
#define _In_opt_
Definition: no_sal2.h:212
short WCHAR
Definition: pedump.c:58
#define BOOLEAN
Definition: pedump.c:73
char CHAR
Definition: pedump.c:57
PARBITER_ALTERNATIVE CurrentAlternative
Definition: arbiter.h:34
UCHAR RangeAvailableAttributes
Definition: arbiter.h:39
PARBITER_ALTERNATIVE Alternatives
Definition: arbiter.h:36
PARBITER_LIST_ENTRY Entry
Definition: arbiter.h:33
PIO_RESOURCE_DESCRIPTOR Descriptor
Definition: arbiter.h:23
PARB_RETEST_ALLOCATION RetestAllocation
Definition: arbiter.h:261
BOOLEAN TransactionInProgress
Definition: arbiter.h:279
PARB_UNPACK_RESOURCE UnpackResource
Definition: arbiter.h:258
ULONG ReferenceCount
Definition: arbiter.h:252
PARB_OVERRIDE_CONFLICT OverrideConflict
Definition: arbiter.h:275
PARB_SCORE_REQUIREMENT ScoreRequirement
Definition: arbiter.h:259
PRTL_RANGE_LIST Allocation
Definition: arbiter.h:248
PKEVENT MutexEvent
Definition: arbiter.h:242
PARB_START_ARBITER StartArbiter
Definition: arbiter.h:268
PARBITER_INTERFACE Interface
Definition: arbiter.h:253
PARB_ALLOCATE_ENTRY AllocateEntry
Definition: arbiter.h:270
PRTL_CONFLICT_RANGE_CALLBACK ConflictCallback
Definition: arbiter.h:286
PDEVICE_OBJECT BusDeviceObject
Definition: arbiter.h:284
CM_RESOURCE_TYPE ResourceType
Definition: arbiter.h:247
PARB_UNPACK_REQUIREMENT UnpackRequirement
Definition: arbiter.h:256
ARBITER_ORDERING_LIST ReservedList
Definition: arbiter.h:251
PARB_QUERY_ARBITRATE QueryArbitrate
Definition: arbiter.h:265
PARB_INITIALIZE_RANGE_LIST InitializeRangeList
Definition: arbiter.h:277
PARB_PREPROCESS_ENTRY PreprocessEntry
Definition: arbiter.h:269
PARB_FIND_SUITABLE_RANGE FindSuitableRange
Definition: arbiter.h:272
PARBITER_ALLOCATION_STATE AllocationStack
Definition: arbiter.h:255
UINT32 Signature
Definition: arbiter.h:241
PARB_GET_NEXT_ALLOCATION_RANGE GetNextAllocationRange
Definition: arbiter.h:271
PARB_BOOT_ALLOCATION BootAllocation
Definition: arbiter.h:264
PVOID ConflictCallbackContext
Definition: arbiter.h:285
ULONG AllocationStackMaxSize
Definition: arbiter.h:254
PARB_ADD_RESERVED AddReserved
Definition: arbiter.h:267
PARB_TEST_ALLOCATION TestAllocation
Definition: arbiter.h:260
PARB_ADD_ALLOCATION AddAllocation
Definition: arbiter.h:273
PCWSTR OrderingName
Definition: arbiter.h:245
PARB_QUERY_CONFLICT QueryConflict
Definition: arbiter.h:266
PRTL_RANGE_LIST PossibleAllocation
Definition: arbiter.h:249
PKEVENT TransactionEvent
Definition: arbiter.h:281
PARB_COMMIT_ALLOCATION CommitAllocation
Definition: arbiter.h:262
ARBITER_ORDERING_LIST OrderingList
Definition: arbiter.h:250
PARB_PACK_RESOURCE PackResource
Definition: arbiter.h:257
PARB_BACKTRACK_ALLOCATION BacktrackAllocation
Definition: arbiter.h:274
PARB_ROLLBACK_ALLOCATION RollbackAllocation
Definition: arbiter.h:263
Definition: iotypes.h:4633
PARBITER_ORDERING Orderings
Definition: arbiter.h:53
UINT64 Start
Definition: arbiter.h:45
Definition: typedefs.h:120
int32_t INT32
Definition: typedefs.h:58
uint32_t * PULONG
Definition: typedefs.h:59
const uint16_t * PCWSTR
Definition: typedefs.h:57
unsigned char UCHAR
Definition: typedefs.h:53
#define NTAPI
Definition: typedefs.h:36
uint32_t ULONG_PTR
Definition: typedefs.h:65
uint32_t UINT32
Definition: typedefs.h:59
uint32_t ULONG
Definition: typedefs.h:59
_Must_inspect_result_ _In_ WDFQUEUE _In_opt_ WDFREQUEST _In_opt_ WDFFILEOBJECT _Inout_opt_ PWDF_REQUEST_PARAMETERS Parameters
Definition: wdfio.h:869
_Reserved_ PVOID Reserved
Definition: winddi.h:3974