diff options
Diffstat (limited to 'winsup/w32api/include')
-rw-r--r-- | winsup/w32api/include/ddk/ntddk.h | 11 | ||||
-rw-r--r-- | winsup/w32api/include/ddk/winddk.h | 174 | ||||
-rw-r--r-- | winsup/w32api/include/winbase.h | 8 |
3 files changed, 112 insertions, 81 deletions
diff --git a/winsup/w32api/include/ddk/ntddk.h b/winsup/w32api/include/ddk/ntddk.h index d227fe98e..fd78905fd 100644 --- a/winsup/w32api/include/ddk/ntddk.h +++ b/winsup/w32api/include/ddk/ntddk.h @@ -19,9 +19,10 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * DEFINES: - * DBG - Debugging enabled/disabled (0/1) - * POOL_TAGGING - Enable pool tagging - * _X86_ - X86 environment + * DBG - Debugging enabled/disabled (0/1) + * POOL_TAGGING - Enable pool tagging + * _X86_ - X86 environment + * __USE_NTOSKRNL__ - Use ntoskrnl.exe exports instead of kernel32.dll */ #ifndef __NTDDK_H @@ -31,6 +32,10 @@ #pragma GCC system_header #endif +#ifndef __USE_NTOSKRNL__ +#define __USE_NTOSKRNL__ 1 +#endif + #ifdef __cplusplus extern "C" { #endif diff --git a/winsup/w32api/include/ddk/winddk.h b/winsup/w32api/include/ddk/winddk.h index a183efd80..771f57418 100644 --- a/winsup/w32api/include/ddk/winddk.h +++ b/winsup/w32api/include/ddk/winddk.h @@ -3809,6 +3809,11 @@ KeGetCurrentIrql( #define KeGetCurrentProcessorNumber() \ ((ULONG)KeGetCurrentKPCR()->ProcessorNumber) + +#if __USE_NTOSKRNL__ +/* CAREFUL: These are exported from ntoskrnl.exe as __fastcall functions, + but are also exported from kernel32.dll and declared in winbase.h as + __stdcall */ #if !defined(__INTERLOCKED_DECLARED) #define __INTERLOCKED_DECLARED @@ -3865,7 +3870,22 @@ InterlockedExchangeAdd( #define InterlockedCompareExchangePointer(Destination, Exchange, Comparand) \ ((PVOID) InterlockedCompareExchange((PLONG) Destination, (LONG) Exchange, (LONG) Comparand)) +#if (_WIN32_WINNT >= 0x0501) +PSLIST_ENTRY +DDKFASTAPI +InterlockedPopEntrySList( + IN PSLIST_HEADER ListHead); + +NTOSAPI +PSLIST_ENTRY +DDKFASTAPI +InterlockedPushEntrySList( + IN PSLIST_HEADER ListHead, + IN PSLIST_ENTRY ListEntry); +#endif /* _WIN32_WINNT >= 0x0501 */ + #endif /* !__INTERLOCKED_DECLARED */ +#endif /* __USE_NTOSKRNL__ */ NTOSAPI VOID @@ -4150,23 +4170,6 @@ RemoveTailList( return Entry; } -#if !defined(_WINBASE_H) || _WIN32_WINNT < 0x0501 - -NTOSAPI -PSLIST_ENTRY -DDKFASTAPI -InterlockedPopEntrySList( - IN PSLIST_HEADER ListHead); - -NTOSAPI -PSLIST_ENTRY -DDKFASTAPI -InterlockedPushEntrySList( - IN PSLIST_HEADER ListHead, - IN PSLIST_ENTRY ListEntry); - -#endif - /* * USHORT * QueryDepthSList( @@ -5063,18 +5066,52 @@ ExAcquireSharedWaitForExclusive( IN PERESOURCE Resource, IN BOOLEAN Wait); + +NTOSAPI +PSINGLE_LIST_ENTRY +DDKFASTAPI +ExInterlockedPopEntrySList( + IN PSLIST_HEADER ListHead, + IN PKSPIN_LOCK Lock); + + +NTOSAPI +PSINGLE_LIST_ENTRY +DDKFASTAPI +ExInterlockedPushEntrySList( + IN PSLIST_HEADER ListHead, + IN PSINGLE_LIST_ENTRY ListEntry, + IN PKSPIN_LOCK Lock); + + +#if (__USE_NTOSKRNL__) && (_WIN32_WINNT >= 0x0501) +#define ExInterlockedPopEntrySList(_ListHead, \ + _Lock) \ + InterlockedPopEntrySList(_ListHead) + +#define ExInterlockedPushEntrySList(_ListHead, \ + _ListEntry, \ + _Lock) \ + InterlockedPushEntrySList(_ListHead, _ListEntry) +#endif /* __USE_NTOSKRNL__ */ + +#define ExQueryDepthSList(ListHead) QueryDepthSList(ListHead) + static __inline PVOID ExAllocateFromNPagedLookasideList( IN PNPAGED_LOOKASIDE_LIST Lookaside) { - PVOID Entry; + PVOID Entry; - Lookaside->TotalAllocates++; - Entry = InterlockedPopEntrySList(&Lookaside->ListHead); - if (Entry == NULL) { - Lookaside->_DDK_DUMMYUNION_MEMBER(AllocateMisses)++; - Entry = (Lookaside->Allocate)(Lookaside->Type, Lookaside->Size, Lookaside->Tag); - } + Lookaside->TotalAllocates++; + Entry = ExInterlockedPopEntrySList(&Lookaside->ListHead, + &Lookaside->Obsoleted); + if (Entry == NULL) { + Lookaside->_DDK_DUMMYUNION_MEMBER(AllocateMisses)++; + Entry = (Lookaside->Allocate)(Lookaside->Type, + Lookaside->Size, + Lookaside->Tag); + } return Entry; } @@ -5085,15 +5122,49 @@ ExAllocateFromPagedLookasideList( PVOID Entry; Lookaside->TotalAllocates++; - Entry = InterlockedPopEntrySList(&Lookaside->ListHead); + Entry = ExInterlockedPopEntrySList(&Lookaside->ListHead, + &Lookaside->Obsoleted); if (Entry == NULL) { Lookaside->_DDK_DUMMYUNION_MEMBER(AllocateMisses)++; Entry = (Lookaside->Allocate)(Lookaside->Type, - Lookaside->Size, Lookaside->Tag); + Lookaside->Size, + Lookaside->Tag); } return Entry; } +static __inline VOID +ExFreeToNPagedLookasideList( + IN PNPAGED_LOOKASIDE_LIST Lookaside, + IN PVOID Entry) +{ + Lookaside->TotalFrees++; + if (ExQueryDepthSList(&Lookaside->ListHead) >= Lookaside->Depth) { + Lookaside->_DDK_DUMMYUNION_N_MEMBER(2,FreeMisses)++; + (Lookaside->Free)(Entry); + } else { + ExInterlockedPushEntrySList(&Lookaside->ListHead, + (PSLIST_ENTRY)Entry, + &Lookaside->Obsoleted); + } +} + +static __inline VOID +ExFreeToPagedLookasideList( + IN PPAGED_LOOKASIDE_LIST Lookaside, + IN PVOID Entry) +{ + Lookaside->TotalFrees++; + if (ExQueryDepthSList(&Lookaside->ListHead) >= Lookaside->Depth) { + Lookaside->_DDK_DUMMYUNION_N_MEMBER(2,FreeMisses)++; + (Lookaside->Free)(Entry); + } else { + ExInterlockedPushEntrySList(&Lookaside->ListHead, + (PSLIST_ENTRY)Entry, + &Lookaside->Obsoleted); + } +} + NTOSAPI PVOID DDKAPI @@ -5194,37 +5265,6 @@ ExFreePoolWithTag( IN PVOID P, IN ULONG Tag); -#define ExQueryDepthSList(ListHead) QueryDepthSList(ListHead) - -static __inline VOID -ExFreeToNPagedLookasideList( - IN PNPAGED_LOOKASIDE_LIST Lookaside, - IN PVOID Entry) -{ - Lookaside->TotalFrees++; - if (ExQueryDepthSList(&Lookaside->ListHead) >= Lookaside->Depth) { - Lookaside->_DDK_DUMMYUNION_N_MEMBER(2,FreeMisses)++; - (Lookaside->Free)(Entry); - } else { - InterlockedPushEntrySList(&Lookaside->ListHead, - (PSLIST_ENTRY)Entry); - } -} - -static __inline VOID -ExFreeToPagedLookasideList( - IN PPAGED_LOOKASIDE_LIST Lookaside, - IN PVOID Entry) -{ - Lookaside->TotalFrees++; - if (ExQueryDepthSList(&Lookaside->ListHead) >= Lookaside->Depth) { - Lookaside->_DDK_DUMMYUNION_N_MEMBER(2,FreeMisses)++; - (Lookaside->Free)(Entry); - } else { - InterlockedPushEntrySList(&Lookaside->ListHead, (PSLIST_ENTRY)Entry); - } -} - /* * ERESOURCE_THREAD * ExGetCurrentResourceThread( @@ -5404,15 +5444,6 @@ ExfInterlockedPopEntryList( IN PSINGLE_LIST_ENTRY ListHead, IN PKSPIN_LOCK Lock); -/* - * PSINGLE_LIST_ENTRY - * ExInterlockedPopEntrySList( - * IN PSLIST_HEADER ListHead, - * IN PKSPIN_LOCK Lock) - */ -#define ExInterlockedPopEntrySList(_ListHead, \ - _Lock) \ - InterlockedPopEntrySList(_ListHead) NTOSAPI PSINGLE_LIST_ENTRY @@ -5430,17 +5461,6 @@ ExfInterlockedPushEntryList( IN PSINGLE_LIST_ENTRY ListEntry, IN PKSPIN_LOCK Lock); -/* - * PSINGLE_LIST_ENTRY FASTCALL - * ExInterlockedPushEntrySList( - * IN PSLIST_HEADER ListHead, - * IN PSINGLE_LIST_ENTRY ListEntry, - * IN PKSPIN_LOCK Lock) - */ -#define ExInterlockedPushEntrySList(_ListHead, \ - _ListEntry, \ - _Lock) \ - InterlockedPushEntrySList(_ListHead, _ListEntry) NTOSAPI PLIST_ENTRY diff --git a/winsup/w32api/include/winbase.h b/winsup/w32api/include/winbase.h index ad82353e7..eb31442ca 100644 --- a/winsup/w32api/include/winbase.h +++ b/winsup/w32api/include/winbase.h @@ -1574,7 +1574,11 @@ WINBASEAPI BOOL WINAPI InitializeCriticalSectionAndSpinCount(LPCRITICAL_SECTION, WINBASEAPI DWORD WINAPI SetCriticalSectionSpinCount(LPCRITICAL_SECTION,DWORD); WINBASEAPI BOOL WINAPI InitializeSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD); WINBASEAPI BOOL WINAPI InitializeSid (PSID,PSID_IDENTIFIER_AUTHORITY,BYTE); -#if !defined(__WINDDK_H) && _WIN32_WINNT >= 0x0501 + +#if !(__USE_NTOSKRNL__) +/* CAREFUL: These are exported from ntoskrnl.exe and declared in winddk.h + as __fastcall functions, but are exported from kernel32.dll as __stdcall */ +#if (_WIN32_WINNT >= 0x0501) WINBASEAPI VOID WINAPI InitializeSListHead(PSLIST_HEADER); #endif #ifndef __INTERLOCKED_DECLARED @@ -1598,6 +1602,8 @@ PSLIST_ENTRY WINAPI InterlockedPopEntrySList(PSLIST_HEADER); PSLIST_ENTRY WINAPI InterlockedPushEntrySList(PSLIST_HEADER,PSLIST_ENTRY); #endif #endif /* __INTERLOCKED_DECLARED */ +#endif /* __USE_NTOSKRNL__ */ + WINBASEAPI BOOL WINAPI IsBadCodePtr(FARPROC); WINBASEAPI BOOL WINAPI IsBadHugeReadPtr(PCVOID,UINT); WINBASEAPI BOOL WINAPI IsBadHugeWritePtr(PVOID,UINT); |