IN OUT PLOOKASIDE_LIST_EX Lookaside);
typedef VOID
-(NTAPI *PCALLBACK_FUNCTION)(
- IN PVOID CallbackContext,
- IN PVOID Argument1,
- IN PVOID Argument2);
+(NTAPI CALLBACK_FUNCTION)(
+ IN PVOID CallbackContext OPTIONAL,
+ IN PVOID Argument1 OPTIONAL,
+ IN PVOID Argument2 OPTIONAL);
+typedef CALLBACK_FUNCTION *PCALLBACK_FUNCTION;
#define GENERAL_LOOKASIDE_LAYOUT \
union { \
#endif
} NPAGED_LOOKASIDE_LIST, *PNPAGED_LOOKASIDE_LIST;
+#define LOOKASIDE_MINIMUM_BLOCK_SIZE (RTL_SIZEOF_THROUGH_FIELD (SLIST_ENTRY, Next))
+
typedef struct _LOOKASIDE_LIST_EX {
GENERAL_LOOKASIDE_POOL L;
} LOOKASIDE_LIST_EX;
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+#define EX_LOOKASIDE_LIST_EX_FLAGS_RAISE_ON_FAIL 0x00000001UL
+#define EX_LOOKASIDE_LIST_EX_FLAGS_FAIL_NO_RAISE 0x00000002UL
+
+#define EX_MAXIMUM_LOOKASIDE_DEPTH_BASE 256
+#define EX_MAXIMUM_LOOKASIDE_DEPTH_LIMIT 1024
+
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+
typedef struct _EX_RUNDOWN_REF {
__GNU_EXTENSION union {
volatile ULONG_PTR Count;
typedef struct _EX_RUNDOWN_REF_CACHE_AWARE *PEX_RUNDOWN_REF_CACHE_AWARE;
+typedef enum _WORK_QUEUE_TYPE {
+ CriticalWorkQueue,
+ DelayedWorkQueue,
+ HyperCriticalWorkQueue,
+ MaximumWorkQueue
+} WORK_QUEUE_TYPE;
+
typedef VOID
-(NTAPI *PWORKER_THREAD_ROUTINE)(
+(NTAPI WORKER_THREAD_ROUTINE)(
IN PVOID Parameter);
+typedef WORKER_THREAD_ROUTINE *PWORKER_THREAD_ROUTINE;
typedef struct _WORK_QUEUE_ITEM {
LIST_ENTRY List;
volatile PVOID Parameter;
} WORK_QUEUE_ITEM, *PWORK_QUEUE_ITEM;
-$endif
+typedef ULONG_PTR ERESOURCE_THREAD, *PERESOURCE_THREAD;
+
+typedef struct _OWNER_ENTRY {
+ ERESOURCE_THREAD OwnerThread;
+ union {
+ struct {
+ ULONG IoPriorityBoosted:1;
+ ULONG OwnerReferenced:1;
+ ULONG OwnerCount:30;
+ };
+ ULONG TableSize;
+ };
+} OWNER_ENTRY, *POWNER_ENTRY;
+
+typedef struct _ERESOURCE {
+ LIST_ENTRY SystemResourcesList;
+ POWNER_ENTRY OwnerTable;
+ SHORT ActiveCount;
+ USHORT Flag;
+ volatile PKSEMAPHORE SharedWaiters;
+ volatile PKEVENT ExclusiveWaiters;
+ OWNER_ENTRY OwnerEntry;
+ ULONG ActiveEntries;
+ ULONG ContentionCount;
+ ULONG NumberOfSharedWaiters;
+ ULONG NumberOfExclusiveWaiters;
+#if defined(_WIN64)
+ PVOID Reserved2;
+#endif
+ __GNU_EXTENSION union {
+ PVOID Address;
+ ULONG_PTR CreatorBackTraceIndex;
+ };
+ KSPIN_LOCK SpinLock;
+} ERESOURCE, *PERESOURCE;
+
+/* ERESOURCE.Flag */
+#define ResourceNeverExclusive 0x0010
+#define ResourceReleaseByOtherThread 0x0020
+#define ResourceOwnedExclusive 0x0080
+
+#define RESOURCE_HASH_TABLE_SIZE 64
+
+typedef struct _RESOURCE_HASH_ENTRY {
+ LIST_ENTRY ListEntry;
+ PVOID Address;
+ ULONG ContentionCount;
+ ULONG Number;
+} RESOURCE_HASH_ENTRY, *PRESOURCE_HASH_ENTRY;
+
+typedef struct _RESOURCE_PERFORMANCE_DATA {
+ ULONG ActiveResourceCount;
+ ULONG TotalResourceCount;
+ ULONG ExclusiveAcquire;
+ ULONG SharedFirstLevel;
+ ULONG SharedSecondLevel;
+ ULONG StarveFirstLevel;
+ ULONG StarveSecondLevel;
+ ULONG WaitForExclusive;
+ ULONG OwnerTableExpands;
+ ULONG MaximumTableExpand;
+ LIST_ENTRY HashTable[RESOURCE_HASH_TABLE_SIZE];
+} RESOURCE_PERFORMANCE_DATA, *PRESOURCE_PERFORMANCE_DATA;
+
+/* Global debug flag */
+#if DEVL
+extern ULONG NtGlobalFlag;
+#define IF_NTOS_DEBUG(FlagName) if (NtGlobalFlag & (FLG_##FlagName))
+#else
+#define IF_NTOS_DEBUG(FlagName) if(FALSE)
+#endif
+
+$endif (_WDMDDK_)
+$if (_NTDDK_)
+typedef struct _ZONE_SEGMENT_HEADER {
+ SINGLE_LIST_ENTRY SegmentList;
+ PVOID Reserved;
+} ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER;
+
+typedef struct _ZONE_HEADER {
+ SINGLE_LIST_ENTRY FreeList;
+ SINGLE_LIST_ENTRY SegmentList;
+ ULONG BlockSize;
+ ULONG TotalSegmentSize;
+} ZONE_HEADER, *PZONE_HEADER;
+#define PROTECTED_POOL 0x80000000
+$endif (_NTDDK_)