START_TEST(RtlAllocateHeap)
{
USHORT i;
+ HANDLE hHeap;
BOOLEAN Aligned = TRUE;
+ RTL_HEAP_PARAMETERS Parameters = {0};
for (i = 0; i < 0x100; ++i)
{
- SetLastError(0xdeadbeef);
Buffers[i] = RtlAllocateHeap(RtlGetProcessHeap(), HEAP_CREATE_ALIGN_16, (i % 16 ) + 1);
ASSERT(Buffers[i] != NULL);
- if (!((ULONG_PTR)Buffers[i] & 0x2))
+ if (!((ULONG_PTR)Buffers[i] & 0xF))
{
Aligned = FALSE;
}
RtlFreeHeap(RtlGetProcessHeap(), 0, Buffers[i]);
}
- ok(Aligned == FALSE, "No unaligned address returned\n");
+ ok(Aligned == FALSE, "No unaligned address returned\n");
+
+ Aligned = TRUE;
+ Parameters.Length = sizeof(Parameters);
+ hHeap = RtlCreateHeap(HEAP_CREATE_ALIGN_16, NULL, 0, 0, NULL, &Parameters);
+ if (hHeap == NULL)
+ {
+ return;
+ }
+
+ for (i = 0; i < 0x100; ++i)
+ {
+ Buffers[i] = RtlAllocateHeap(hHeap, 0, (i % 16 ) + 1);
+ ASSERT(Buffers[i] != NULL);
+ if (!((ULONG_PTR)Buffers[i] & 0xF))
+ {
+ Aligned = FALSE;
+ }
+ }
+
+ for (i = 0; i < 0x100; ++i)
+ {
+ RtlFreeHeap(hHeap, 0, Buffers[i]);
+ }
+
+ RtlDestroyHeap(hHeap);
+
+ ok(Aligned == TRUE, "Unaligned address returned\n");
+
+ _SEH2_TRY
+ {
+ hHeap = RtlCreateHeap(HEAP_CREATE_ALIGN_16, NULL, 0, 0, NULL, (PRTL_HEAP_PARAMETERS)0xdeadbeef);
+ }
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+ {
+ hHeap = INVALID_HANDLE_VALUE;
+ }
+ _SEH2_END;
+
+ ok(hHeap == NULL, "Unexpected heap value: %p\n", hHeap);
}