#elif defined(_WDM_INCLUDED_)
typedef struct _DMA_ADAPTER *PADAPTER_OBJECT;
#else
-typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT;
+typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT;
#endif
#ifndef DEFINE_GUIDEX
#ifdef __cplusplus
inline int IsEqualGUIDAligned(REFGUID guid1, REFGUID guid2)
{
- return ( (*(PLONGLONG)(&guid1) == *(PLONGLONG)(&guid2)) &&
+ return ( (*(PLONGLONG)(&guid1) == *(PLONGLONG)(&guid2)) &&
(*((PLONGLONG)(&guid1) + 1) == *((PLONGLONG)(&guid2) + 1)) );
}
#else
#endif /* defined(_AMD64_) */
typedef VOID
-(NTAPI *PKDEFERRED_ROUTINE)(
+(NTAPI KDEFERRED_ROUTINE)(
IN struct _KDPC *Dpc,
IN PVOID DeferredContext OPTIONAL,
IN PVOID SystemArgument1 OPTIONAL,
IN PVOID SystemArgument2 OPTIONAL);
+typedef KDEFERRED_ROUTINE *PKDEFERRED_ROUTINE;
typedef enum _KDPC_IMPORTANCE {
LowImportance,
CSHORT Size;
LIST_ENTRY DeviceListHead;
KSPIN_LOCK Lock;
- #if defined(_AMD64_)
+# if defined(_AMD64_)
_ANONYMOUS_UNION union {
BOOLEAN Busy;
_ANONYMOUS_STRUCT struct {
LONG64 Hint:56;
} DUMMYSTRUCTNAME;
} DUMMYUNIONNAME;
- #else
+# else
BOOLEAN Busy;
- #endif
+# endif
} KDEVICE_QUEUE, *PKDEVICE_QUEUE, *RESTRICTED_POINTER PRKDEVICE_QUEUE;
#define TIMER_EXPIRED_INDEX_BITS 6
ULARGE_INTEGER DueTime;
LIST_ENTRY TimerListEntry;
struct _KDPC *Dpc;
- #if !defined(_X86_)
+# if !defined(_X86_)
ULONG Processor;
- #endif
+# endif
ULONG Period;
} KTIMER, *PKTIMER, *RESTRICTED_POINTER PRKTIMER;
#define KTIMER_ACTUAL_LENGTH (FIELD_OFFSET(KTIMER, Period) + sizeof(LONG))
typedef BOOLEAN
-(NTAPI *PKSYNCHRONIZE_ROUTINE)(
+(NTAPI KSYNCHRONIZE_ROUTINE)(
IN PVOID SynchronizeContext);
+typedef KSYNCHRONIZE_ROUTINE *PKSYNCHRONIZE_ROUTINE;
typedef enum _POOL_TYPE {
NonPagedPool,
#define IRP_DEFER_IO_COMPLETION 0x00000800
#define IRP_OB_QUERY_NAME 0x00001000
#define IRP_HOLD_DEVICE_QUEUE 0x00002000
+/* The following 2 are missing in latest WDK */
+#define IRP_RETRY_IO_COMPLETION 0x00004000
+#define IRP_CLASS_CACHE_OPERATION 0x00008000
#define IRP_QUOTA_CHARGED 0x01
#define IRP_ALLOCATED_MUST_SUCCEED 0x02
ULONG_PTR Reserved;
} SCATTER_GATHER_ELEMENT, *PSCATTER_GATHER_ELEMENT;
-#if defined(_MSC_EXTENSIONS)
+#if defined(_MSC_EXTENSIONS) || defined(__GNUC__)
+#if defined(_MSC_VER)
#if _MSC_VER >= 1200
#pragma warning(push)
#endif
#pragma warning(disable:4200)
+#endif /* _MSC_VER */
+
typedef struct _SCATTER_GATHER_LIST {
ULONG NumberOfElements;
ULONG_PTR Reserved;
SCATTER_GATHER_ELEMENT Elements[1];
} SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST;
+#if defined(_MSC_VER)
#if _MSC_VER >= 1200
#pragma warning(pop)
#else
#pragma warning(default:4200)
#endif
+#endif /* _MSC_VER */
-#else
+#else /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */
struct _SCATTER_GATHER_LIST;
typedef struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST;
-#endif
+#endif /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */
typedef NTSTATUS
(NTAPI DRIVER_ADD_DEVICE)(
#endif
}
+#define KeMemoryBarrierWithoutFence() _ReadWriteBarrier()
+
NTHALAPI
KIRQL
NTAPI
OUT PLARGE_INTEGER CurrentCount)
{
for (;;) {
+#ifdef NONAMELESSUNION
+ CurrentCount->s.HighPart = KeTickCount.High1Time;
+ CurrentCount->s.LowPart = KeTickCount.LowPart;
+ if (CurrentCount->s.HighPart == KeTickCount.High2Time) break;
+#else
CurrentCount->HighPart = KeTickCount.High1Time;
CurrentCount->LowPart = KeTickCount.LowPart;
if (CurrentCount->HighPart == KeTickCount.High2Time) break;
+#endif
YieldProcessor();
}
}
#define KeGetDcacheFillSize() 1L
#define YieldProcessor _mm_pause
+#define FastFence __faststorefence
+#define LoadFence _mm_lfence
+#define MemoryFence _mm_mfence
+#define StoreFence _mm_sfence
+#define LFENCE_ACQUIRE() LoadFence()
+
+FORCEINLINE
+VOID
+KeMemoryBarrier(VOID)
+{
+ FastFence();
+ LFENCE_ACQUIRE();
+}
+
+#define KeMemoryBarrierWithoutFence() _ReadWriteBarrier()
FORCEINLINE
KIRQL
{
KIRQL OldIrql;
- OldIrql = __readcr8();
+ OldIrql = (KIRQL)__readcr8();
//ASSERT(OldIrql <= NewIrql);
__writecr8(NewIrql);
return OldIrql;
return (struct _KTHREAD *)__readgsqword(0x188);
}
+FORCEINLINE
+NTSTATUS
+KeSaveFloatingPointState(PVOID FloatingState)
+{
+ UNREFERENCED_PARAMETER(FloatingState);
+ return STATUS_SUCCESS;
+}
+
+FORCEINLINE
+NTSTATUS
+KeRestoreFloatingPointState(PVOID FloatingState)
+{
+ UNREFERENCED_PARAMETER(FloatingState);
+ return STATUS_SUCCESS;
+}
+
/* VOID
* KeFlushIoBuffers(
* IN PMDL Mdl,
ListHead->Flink = ListHead->Blink = ListHead;
}
-BOOLEAN
FORCEINLINE
+BOOLEAN
IsListEmpty(
IN CONST LIST_ENTRY * ListHead)
{
ret64 = UnsignedMultiplyHigh(Pos ? Dividend.QuadPart : -Dividend.QuadPart,
MagicDivisor.QuadPart);
ret64 >>= ShiftCount;
- ret.QuadPart = Pos ? ret64 : -ret64;
+ ret.QuadPart = Pos ? ret64 : -(LONG64)ret64;
return ret;
}
#endif
#else
-VOID
FORCEINLINE
+VOID
InitializeSListHead(
OUT PSLIST_HEADER SListHead)
{
OUT PLARGE_INTEGER CurrentTime);
#endif /* !_M_AMD64 */
-#if !defined(_X86_)
+#if !defined(_X86_) && !defined(_M_ARM)
NTKERNELAPI
KIRQL
NTAPI
}
#endif
+//DECLSPEC_NORETURN
NTKERNELAPI
-DECLSPEC_NORETURN
VOID
NTAPI
KeBugCheckEx(
((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
#define MmGetProcedureAddress(Address) (Address)
+#define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address)
/* PVOID MmGetSystemAddressForMdl(
* IN PMDL Mdl);
{
ASSERT(Irp->CurrentLocation <= Irp->StackCount);
Irp->CurrentLocation++;
+#ifdef NONAMELESSUNION
+ Irp->Tail.Overlay.s.u.CurrentStackLocation++;
+#else
Irp->Tail.Overlay.CurrentStackLocation++;
+#endif
}
FORCEINLINE
{
ASSERT(Irp->CurrentLocation > 0);
Irp->CurrentLocation--;
+#ifdef NONAMELESSUNION
+ Irp->Tail.Overlay.s.u.CurrentStackLocation--;
+#else
Irp->Tail.Overlay.CurrentStackLocation--;
+#endif
}
FORCEINLINE
IN PIRP Irp)
{
ASSERT(Irp->CurrentLocation > 0);
+#ifdef NONAMELESSUNION
+ return ((Irp)->Tail.Overlay.s.u.CurrentStackLocation - 1 );
+#else
return ((Irp)->Tail.Overlay.CurrentStackLocation - 1 );
+#endif
}
FORCEINLINE
IN PIRP Irp)
{
ASSERT(Irp->CurrentLocation <= Irp->StackCount + 1);
+#ifdef NONAMELESSUNION
+ return Irp->Tail.Overlay.s.u.CurrentStackLocation;
+#else
return Irp->Tail.Overlay.CurrentStackLocation;
+#endif
}
FORCEINLINE
IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
HighWatermark, sizeof(IO_REMOVE_LOCK))
-VOID
FORCEINLINE
+VOID
IoInitializeDpcRequest(
IN PDEVICE_OBJECT DeviceObject,
IN PIO_DPC_ROUTINE DpcRoutine)
}
#if (NTDDI_VERSION >= NTDDI_WS03)
-VOID
FORCEINLINE
+VOID
IoInitializeThreadedDpcRequest(
IN PDEVICE_OBJECT DeviceObject,
IN PIO_DPC_ROUTINE DpcRoutine)
#else /* !defined(_WIN64) */
+#ifdef NONAMELESSUNION
+#define ExQueryDepthSList(listhead) (listhead)->s.Depth
+#else
#define ExQueryDepthSList(listhead) (listhead)->Depth
+#endif
NTKERNELAPI
PSINGLE_LIST_ENTRY
#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
NTKERNELAPI
-PSINGLE_LIST_ENTRY
+PSINGLE_LIST_ENTRY
FASTCALL
ExInterlockedPopEntrySList(
IN PSLIST_HEADER ListHead,
IN PKSPIN_LOCK Lock);
NTKERNELAPI
-PSINGLE_LIST_ENTRY
+PSINGLE_LIST_ENTRY
FASTCALL
ExInterlockedPushEntrySList(
IN PSLIST_HEADER ListHead,
PVOID Entry;
Lookaside->L.TotalAllocates++;
+#ifdef NONAMELESSUNION
+ Entry = InterlockedPopEntrySList(&Lookaside->L.u.ListHead);
+ if (Entry == NULL) {
+ Lookaside->L.u2.AllocateMisses++;
+ Entry = (Lookaside->L.u4.Allocate)(Lookaside->L.Type,
+ Lookaside->L.Size,
+ Lookaside->L.Tag);
+ }
+#else /* NONAMELESSUNION */
Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead);
if (Entry == NULL) {
Lookaside->L.AllocateMisses++;
Lookaside->L.Size,
Lookaside->L.Tag);
}
+#endif /* NONAMELESSUNION */
return Entry;
}
IN PVOID Entry)
{
Lookaside->L.TotalFrees++;
+#ifdef NONAMELESSUNION
+ if (ExQueryDepthSList(&Lookaside->L.u.ListHead) >= Lookaside->L.Depth) {
+ Lookaside->L.u3.FreeMisses++;
+ (Lookaside->L.u5.Free)(Entry);
+ } else {
+ InterlockedPushEntrySList(&Lookaside->L.u.ListHead, (PSLIST_ENTRY)Entry);
+ }
+#else /* NONAMELESSUNION */
if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) {
Lookaside->L.FreeMisses++;
(Lookaside->L.Free)(Entry);
} else {
InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry);
}
+#endif /* NONAMELESSUNION */
}
#endif /* _WIN2K_COMPAT_SLIST_USAGE */
PVOID Entry;
Lookaside->L.TotalAllocates += 1;
+#ifdef NONAMELESSUNION
+ Entry = InterlockedPopEntrySList(&Lookaside->L.u.ListHead);
+ if (Entry == NULL) {
+ Lookaside->L.u2.AllocateMisses += 1;
+ Entry = (Lookaside->L.u4.AllocateEx)(Lookaside->L.Type,
+ Lookaside->L.Size,
+ Lookaside->L.Tag,
+ Lookaside);
+ }
+#else /* NONAMELESSUNION */
Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead);
if (Entry == NULL) {
Lookaside->L.AllocateMisses += 1;
Lookaside->L.Tag,
Lookaside);
}
+#endif /* NONAMELESSUNION */
return Entry;
}
PVOID Entry;
Lookaside->L.TotalAllocates++;
+#ifdef NONAMELESSUNION
+#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
+ Entry = ExInterlockedPopEntrySList(&Lookaside->L.u.ListHead,
+ &Lookaside->Lock__ObsoleteButDoNotDelete);
+#else
+ Entry = InterlockedPopEntrySList(&Lookaside->L.u.ListHead);
+#endif
+ if (Entry == NULL) {
+ Lookaside->L.u2.AllocateMisses++;
+ Entry = (Lookaside->L.u4.Allocate)(Lookaside->L.Type,
+ Lookaside->L.Size,
+ Lookaside->L.Tag);
+ }
+#else /* NONAMELESSUNION */
#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
Entry = ExInterlockedPopEntrySList(&Lookaside->L.ListHead,
&Lookaside->Lock__ObsoleteButDoNotDelete);
Lookaside->L.Size,
Lookaside->L.Tag);
}
+#endif /* NONAMELESSUNION */
return Entry;
}
IN PVOID Entry)
{
Lookaside->L.TotalFrees++;
+#ifdef NONAMELESSUNION
+ if (ExQueryDepthSList(&Lookaside->L.u.ListHead) >= Lookaside->L.Depth) {
+ Lookaside->L.u3.FreeMisses++;
+ (Lookaside->L.u5.Free)(Entry);
+ } else {
+#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
+ ExInterlockedPushEntrySList(&Lookaside->L.u.ListHead,
+ (PSLIST_ENTRY)Entry,
+ &Lookaside->Lock__ObsoleteButDoNotDelete);
+#else
+ InterlockedPushEntrySList(&Lookaside->L.u.ListHead, (PSLIST_ENTRY)Entry);
+#endif
+ }
+#else /* NONAMELESSUNION */
if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) {
Lookaside->L.FreeMisses++;
(Lookaside->L.Free)(Entry);
InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry);
#endif
}
+#endif /* NONAMELESSUNION */
}
/******************************************************************************
#endif
#endif /* RUN_WPP */
- #if (NTDDI_VERSION >= NTDDI_WINXP)
+#if (NTDDI_VERSION >= NTDDI_WINXP)
NTKERNELAPI
NTSTATUS
/* FIXME: Get va_list from where? */
NTKERNELAPI
NTSTATUS
-__cdecl
+NTAPI
WmiTraceMessageVa(
IN TRACEHANDLE LoggerHandle,
IN ULONG MessageFlags,