mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 18:35:41 +00:00
[KERNEL32_APITEST] dynamic linked RtlIsCriticalSectionLockedByThread (#1592)
Statically linked ntdll.RtlIsCriticalSectionLockedByThread had made kernel32_apitest unable to run in XP. CORE-16077
This commit is contained in:
parent
1010f3796e
commit
6b5bb194b0
1 changed files with 10 additions and 2 deletions
|
@ -14,6 +14,7 @@ static DWORD (WINAPI *pFlsAlloc)(PFLS_CALLBACK_FUNCTION);
|
||||||
static BOOL (WINAPI *pFlsFree)(DWORD);
|
static BOOL (WINAPI *pFlsFree)(DWORD);
|
||||||
static PVOID (WINAPI *pFlsGetValue)(DWORD);
|
static PVOID (WINAPI *pFlsGetValue)(DWORD);
|
||||||
static BOOL (WINAPI *pFlsSetValue)(DWORD,PVOID);
|
static BOOL (WINAPI *pFlsSetValue)(DWORD,PVOID);
|
||||||
|
static BOOL (WINAPI *pRtlIsCriticalSectionLockedByThread)(RTL_CRITICAL_SECTION *);
|
||||||
|
|
||||||
|
|
||||||
#define NtCurrentPeb() (NtCurrentTeb()->ProcessEnvironmentBlock)
|
#define NtCurrentPeb() (NtCurrentTeb()->ProcessEnvironmentBlock)
|
||||||
|
@ -46,7 +47,7 @@ VOID WINAPI FlsCallback3(PVOID lpFlsData)
|
||||||
ok(lpFlsData == g_FlsData3, "Expected g_FlsData3(%p), got %p\n", g_FlsData3, lpFlsData);
|
ok(lpFlsData == g_FlsData3, "Expected g_FlsData3(%p), got %p\n", g_FlsData3, lpFlsData);
|
||||||
|
|
||||||
if (g_WinVersion <= WINVER_2003)
|
if (g_WinVersion <= WINVER_2003)
|
||||||
ok(RtlIsCriticalSectionLockedByThread(NtCurrentPeb()->FastPebLock), "Expected lock on PEB\n");
|
ok(pRtlIsCriticalSectionLockedByThread(NtCurrentPeb()->FastPebLock), "Expected lock on PEB\n");
|
||||||
InterlockedIncrement(&g_FlsCalled3);
|
InterlockedIncrement(&g_FlsCalled3);
|
||||||
if (g_FlsExcept3)
|
if (g_FlsExcept3)
|
||||||
{
|
{
|
||||||
|
@ -118,6 +119,7 @@ void ok_fls_(DWORD dwIndex, PVOID pValue, PFLS_CALLBACK_FUNCTION lpCallback)
|
||||||
static VOID init_funcs(void)
|
static VOID init_funcs(void)
|
||||||
{
|
{
|
||||||
HMODULE hKernel32 = GetModuleHandleA("kernel32.dll");
|
HMODULE hKernel32 = GetModuleHandleA("kernel32.dll");
|
||||||
|
HMODULE hNTDLL = GetModuleHandleA("ntdll.dll");
|
||||||
|
|
||||||
#define X(f) p##f = (void*)GetProcAddress(hKernel32, #f);
|
#define X(f) p##f = (void*)GetProcAddress(hKernel32, #f);
|
||||||
X(FlsAlloc);
|
X(FlsAlloc);
|
||||||
|
@ -125,6 +127,7 @@ static VOID init_funcs(void)
|
||||||
X(FlsGetValue);
|
X(FlsGetValue);
|
||||||
X(FlsSetValue);
|
X(FlsSetValue);
|
||||||
#undef X
|
#undef X
|
||||||
|
pRtlIsCriticalSectionLockedByThread = (void*)GetProcAddress(hNTDLL, "RtlIsCriticalSectionLockedByThread");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -141,6 +144,11 @@ START_TEST(FLS)
|
||||||
skip("Fls functions not available\n");
|
skip("Fls functions not available\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (!pRtlIsCriticalSectionLockedByThread)
|
||||||
|
{
|
||||||
|
skip("RtlIsCriticalSectionLockedByThread function not available\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
RtlGetVersion(&rtlinfo);
|
RtlGetVersion(&rtlinfo);
|
||||||
g_WinVersion = (rtlinfo.dwMajorVersion << 8) | rtlinfo.dwMinorVersion;
|
g_WinVersion = (rtlinfo.dwMajorVersion << 8) | rtlinfo.dwMinorVersion;
|
||||||
|
@ -222,7 +230,7 @@ START_TEST(FLS)
|
||||||
dwErr = 0xdeaddead;
|
dwErr = 0xdeaddead;
|
||||||
}
|
}
|
||||||
_SEH2_END;
|
_SEH2_END;
|
||||||
ok(RtlIsCriticalSectionLockedByThread(NtCurrentPeb()->FastPebLock) == FALSE, "Expected no lock on PEB\n");
|
ok(pRtlIsCriticalSectionLockedByThread(NtCurrentPeb()->FastPebLock) == FALSE, "Expected no lock on PEB\n");
|
||||||
|
|
||||||
ok(bRet == 12345, "FlsFree(%lu) should have failed, got %u\n", dwIndex3, bRet);
|
ok(bRet == 12345, "FlsFree(%lu) should have failed, got %u\n", dwIndex3, bRet);
|
||||||
ok(dwErr == 0xdeaddead, "Expected GetLastError() to be 0xdeaddead, was %lx\n", dwErr);
|
ok(dwErr == 0xdeaddead, "Expected GetLastError() to be 0xdeaddead, was %lx\n", dwErr);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue