The flag combination shows up in Forza Motorsport, which allocates a 14 MB staging pool with MEM_COMMIT|MEM_RESERVE|MEM_PHYSICAL|MEM_LARGE_PAGES and does not check the result, so under Wine it runs on a NULL pointer. Behaviour measured on real Windows with the Test Bot (job 163938, `ntdll_test.exe virtual`, 64 bit, SeLockMemoryPrivilege not held on any VM): | type | Win7 | Win8.1 | 10-1507 | 10-22H2 | Win11 | Wine before | |---|---|---|---|---|---|---| | `0x3000` COMMIT\|RESERVE | 0 | 0 | 0 | 0 | 0 | 0 | | `0x20003000` +LARGE | c0000061 | c0000061 | c0000061 | c0000061 | c0000061 | c000000d | | `0x402000` RESERVE\|PHYSICAL, RW | 0 | 0 | 0 | 0 | 0 | c000000d | | `0x402000` RESERVE\|PHYSICAL, EXEC | - | c00000f4 | c00000f4 | c0000045 | c0000045 | c000000d | | `0x403000` COMMIT\|RESERVE\|PHYSICAL | - | c00000f3 | c00000f3 | c000000d | c000000d | c000000d | | `0x20403000` PHYSICAL\|LARGE | c00000f3 | c00000f3 | c00000f3 | 0 | 0 | c000000d | | `0x80003000` +4MB_PAGES | - | c00000f3 | c00000f3 | c000000d | c000000d | c000000d | Two things the patch deliberately does not do: * It does not implement the large page size alignment rule. An unaligned request now returns STATUS_PRIVILEGE_NOT_HELD where 10-22H2 and 11 return STATUS_INVALID_PARAMETER, because <= 10-1507 check the privilege first and the later versions check the alignment first. The test traces that case but does not assert it. * AWE itself stays unimplemented. The reservation succeeds and AllocateUserPhysicalPages() still fails with its existing FIXME, instead of the reservation failing with a status that says the arguments were wrong. Verified in three states: the tests alone on Wine report the five assertions as todo with no failures, the same binary passes on the seven Windows VMs above, and tests plus fix report no todo and no failures. -- v3: ntdll: Handle the MEM_LARGE_PAGES and MEM_PHYSICAL allocation flags. ntdll/tests: Test MEM_LARGE_PAGES and MEM_PHYSICAL allocation flags. https://gitlab.winehq.org/wine/wine/-/merge_requests/11600