Hi,
I am currently having a small problem on the x64 branch, maybe someone can help me.
In wdm.h there's the following declarations:
#if defined (_WIN64) #if defined(_NTDRIVER_) || defined(_NTDDK) || defined(_NTIFS_) || \ defined(_NTHAL_) || defined(_NTOSP_) NTKRNLAPI USHORT ExQueryDepthSList(IN PSLIST_HEADER Listhead); #else FORCEINLINE USHORT ExQueryDepthSList(IN PSLIST_HEADER Listhead) { return (USHORT)(ListHead->Alignment & 0xffff); } #endif #else #define ExQueryDepthSList(listhead) (listhead)->Depth #endif
So when compiling ntoskrnl, ExQueryDepthSList is not inlined. Later in wdm.h (currently in our winddk.h, but to be moved to wdm.h) ExQueryDepthSList is used in ExFreeToNPagedLookasideList inline function.
But I want ExQueryDepthSList to be inlined from within ntoskrnl. The question is how can I achieve this? If I #define it to be inline in ntoskrnl's private headers, it will not affect ExFreeToNPagedLookasideList. When I declare it as an inline function after the header is included, I get a warning that it was declared inline after being used and that a static declaration follows a non-static. (Does anyone know hoe to disable these stupid warnings?) Declaring it inline before including wdm.h doesn't work, as the needed declaration for SLIST_HEADER is missing.
Anyone got any other idea? I'd like to avoid hacking our public headers, to keep them as compatible to ms headers as possible.
Regards, Timo