implement user mode catchable exceptions, refactor system status codes to use NTLSTATUS_ prefix, update build scripts to use shared literal macros for linker arguments, update named queue lifetime cleanup to include KeNamedQueueUnpublishHandle.
This commit is contained in:
1 parent
1f5477cf66
commit
b7fcfce6f7
140 files changed
+7649
-3943
No files matched your search
+22
-22
@@ -152,7 +152,7 @@ static void KiApcAlertableSelfTestWorker(void* arg) {
|
||||
DbgPrint("APC selftest: alertable wait returned status=%u delivered=%d\n",
|
||||
s, st->ApcDelivered);
|
||||
|
||||
if (s != STATUS_KERNEL_APC)
|
||||
if (s != NTLSTATUS_KERNEL_APC)
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "APC selftest: alertable wait returned wrong status=%u\n", s);
|
||||
|
||||
if (st->ApcDelivered != 1)
|
||||
@@ -298,7 +298,7 @@ static void KiRunKernelApcSelfTest(void) {
|
||||
KI_APC_ALERTABLE_SELFTEST_STATE st;
|
||||
KAPC apc;
|
||||
memset(&st, 0, sizeof(st));
|
||||
st.WaitStatus = STATUS_PENDING;
|
||||
st.WaitStatus = NTLSTATUS_PENDING;
|
||||
|
||||
KSTATUS s;
|
||||
s = KeEventCreate(EventAutoReset, 0, &st.ReadyEvent);
|
||||
@@ -336,7 +336,7 @@ static void KiRunKernelApcSelfTest(void) {
|
||||
if (!KSUCCESS(s))
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "APC selftest: alert finished wait failed %d\n", s);
|
||||
|
||||
if (st.WaitStatus != STATUS_KERNEL_APC || st.ApcDelivered != 1)
|
||||
if (st.WaitStatus != NTLSTATUS_KERNEL_APC || st.ApcDelivered != 1)
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "APC selftest: alertable result bad status=%u delivered=%d\n",
|
||||
st.WaitStatus, st.ApcDelivered);
|
||||
|
||||
@@ -447,7 +447,7 @@ static void KiRunIrpKernelApcSelfTest(const HAL_API* hal) {
|
||||
|
||||
DbgPrint("IRP/APC selftest: submitting drive=0 lba=0 sectors=1\n");
|
||||
s = IoSubmitIrp(st.DiskDevice, &st.Irp);
|
||||
if (s != STATUS_PENDING)
|
||||
if (s != NTLSTATUS_PENDING)
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "IRP/APC selftest: IoSubmitIrp returned %u\n", s);
|
||||
|
||||
s = KeWaitForEvent(st.CompletionEvent, 0);
|
||||
@@ -501,13 +501,13 @@ static void KiRunPfnDatabaseSelfTest(void) {
|
||||
|
||||
if (!KSUCCESS(MmPfnPin(frame)) || pfn->PinCount != 1)
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "PFN selftest: pin failed pin=%u\n", pfn->PinCount);
|
||||
if (MmPfnFree(frame) != STATUS_ACCESS_DENIED)
|
||||
if (MmPfnFree(frame) != NTLSTATUS_ACCESS_DENIED)
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "PFN selftest: pinned frame was freed\n");
|
||||
if (!KSUCCESS(MmPfnUnpin(frame)) || pfn->PinCount != 0)
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "PFN selftest: unpin failed pin=%u\n", pfn->PinCount);
|
||||
if (!KSUCCESS(MmPfnAddMapping(frame)) || pfn->MappedCount != 1)
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "PFN selftest: mapping add failed maps=%u\n", pfn->MappedCount);
|
||||
if (MmPfnFree(frame) != STATUS_ACCESS_DENIED)
|
||||
if (MmPfnFree(frame) != NTLSTATUS_ACCESS_DENIED)
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "PFN selftest: mapped frame was freed\n");
|
||||
if (!KSUCCESS(MmPfnRemoveMapping(frame)) || pfn->MappedCount != 0)
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "PFN selftest: mapping remove failed maps=%u\n", pfn->MappedCount);
|
||||
@@ -589,7 +589,7 @@ static void KiRunMemoryMappingSelfTest(void) {
|
||||
PHYSICAL_ADDRESS phys = 0;
|
||||
uint64_t flags = 0;
|
||||
KSTATUS s = MmPteQueryPageFor(MmPteQuerySelfTest, 0, &phys, &flags);
|
||||
if (s != STATUS_NOT_FOUND) {
|
||||
if (s != NTLSTATUS_NOT_FOUND) {
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "MM selftest: virtual page zero is mapped phys=%016llx flags=%016llx status=%u\n",
|
||||
(unsigned long long)phys,
|
||||
(unsigned long long)flags,
|
||||
@@ -598,7 +598,7 @@ static void KiRunMemoryMappingSelfTest(void) {
|
||||
|
||||
uintptr_t testVa = 0xFFFFA00000000000ULL;
|
||||
s = MmPteQueryPageFor(MmPteQuerySelfTest, testVa, &phys, &flags);
|
||||
if (s != STATUS_NOT_FOUND) {
|
||||
if (s != NTLSTATUS_NOT_FOUND) {
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "MM selftest: test VA already mapped va=%016llx phys=%016llx flags=%016llx\n",
|
||||
(unsigned long long)testVa,
|
||||
(unsigned long long)phys,
|
||||
@@ -643,7 +643,7 @@ static void KiRunMemoryMappingSelfTest(void) {
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "MM selftest: MmPteUnmapPage failed status=%u\n", s);
|
||||
|
||||
s = MmPteQueryPageFor(MmPteQuerySelfTest, testVa, &phys, &flags);
|
||||
if (s != STATUS_NOT_FOUND)
|
||||
if (s != NTLSTATUS_NOT_FOUND)
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "MM selftest: test VA still mapped after unmap status=%u\n", s);
|
||||
|
||||
MmPfnFree(frame);
|
||||
@@ -688,11 +688,11 @@ static void KiRunVadSparseSelfTest(void) {
|
||||
uint64_t queryFlags = 0;
|
||||
s = MmVadQuery(process, p, &queryBase, &querySize, &queryFlags, (MM_VAD_TYPE*)0, (uint32_t*)0);
|
||||
if (!KSUCCESS(s) || queryBase != p || querySize != PAGE_SIZE || !(queryFlags & PAGE_WRITE))
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "VAD selftest: first query failed status=%u base=%p size=%llu flags=%016llx\n",
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "VAD selftest: first query failed status=%u base=0x%016llX size=%llu flags=%016llx\n",
|
||||
s, queryBase, (unsigned long long)querySize, (unsigned long long)queryFlags);
|
||||
|
||||
s = MmPteQueryPageFor(MmPteQuerySelfTest, (uintptr_t)p, (PHYSICAL_ADDRESS*)0, (uint64_t*)0);
|
||||
if (s != STATUS_NOT_FOUND)
|
||||
if (s != NTLSTATUS_NOT_FOUND)
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "VAD selftest: demand-zero page was mapped before access status=%u\n", s);
|
||||
|
||||
s = MmVadEnsureResident(process, p, PAGE_SIZE, PAGE_WRITE | PAGE_USER);
|
||||
@@ -703,7 +703,7 @@ static void KiRunVadSparseSelfTest(void) {
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "VAD selftest: sparse demand-zero materialization failed %u\n", s);
|
||||
|
||||
s = MmVadQuery(process, p + PAGE_SIZE, &queryBase, &querySize, &queryFlags, (MM_VAD_TYPE*)0, (uint32_t*)0);
|
||||
if (s != STATUS_NOT_FOUND)
|
||||
if (s != NTLSTATUS_NOT_FOUND)
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "VAD selftest: uncommitted hole queried as committed status=%u\n", s);
|
||||
|
||||
p[0] = 0x5A;
|
||||
@@ -714,7 +714,7 @@ static void KiRunVadSparseSelfTest(void) {
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "VAD selftest: NOACCESS protect failed %u\n", s);
|
||||
|
||||
s = MmPteQueryPageFor(MmPteQuerySelfTest, (uintptr_t)p, (PHYSICAL_ADDRESS*)0, (uint64_t*)0);
|
||||
if (s != STATUS_NOT_FOUND)
|
||||
if (s != NTLSTATUS_NOT_FOUND)
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "VAD selftest: NOACCESS page still had a PTE status=%u\n", s);
|
||||
|
||||
s = MmVadQuery(process, p, &queryBase, &querySize, &queryFlags, (MM_VAD_TYPE*)0, (uint32_t*)0);
|
||||
@@ -901,10 +901,10 @@ static void KiRunVadSwapSelfTest(void) {
|
||||
void* trimmed = (void*)0;
|
||||
s = MmVadTrimOnePageForTest(process, &trimmed);
|
||||
if (!KSUCCESS(s) || trimmed != base)
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "VAD swap selftest: trim failed status=%u trimmed=%p base=%p\n", s, trimmed, base);
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "VAD swap selftest: trim failed status=%u trimmed=0x%016llX base=0x%016llX\n", s, trimmed, base);
|
||||
|
||||
s = MmPteQueryPageFor(MmPteQuerySelfTest, (uintptr_t)base, (PHYSICAL_ADDRESS*)0, (uint64_t*)0);
|
||||
if (s != STATUS_NOT_FOUND)
|
||||
if (s != NTLSTATUS_NOT_FOUND)
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "VAD swap selftest: swapped page still had a PTE status=%u\n", s);
|
||||
|
||||
s = MmVadResolveUserPageFault(process, (uintptr_t)base, 0);
|
||||
@@ -944,7 +944,7 @@ static void KiRunStringViewSelfTest(void) {
|
||||
// accept embedded NUL bytes. This must fail before reaching any filesystem.
|
||||
FILE_OBJECT* f = (FILE_OBJECT*)0;
|
||||
KSTATUS s = IoOpenFile(SysSvFromParts("system/init.exe\0junk", 20), &f);
|
||||
if (s != STATUS_INVALID_PARAMETER)
|
||||
if (s != NTLSTATUS_INVALID_PARAMETER)
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "STRINGVIEW selftest: embedded-NUL path status=%u\n", s);
|
||||
|
||||
DbgPrint("STRINGVIEW selftest: sample view='%v' len=%llu\n",
|
||||
@@ -1007,7 +1007,7 @@ static void KiRunAsyncFileIoSelfTest(void) {
|
||||
|
||||
KI_FILE_ASYNC_SELFTEST_STATE st;
|
||||
memset(&st, 0, sizeof(st));
|
||||
st.Iosb.Status = STATUS_FAILURE;
|
||||
st.Iosb.Status = NTLSTATUS_FAILURE;
|
||||
|
||||
KSTATUS s = IoOpenFile(SYS_SV_LITERAL("system/init.exe"), &st.File);
|
||||
if (!KSUCCESS(s)) {
|
||||
@@ -1042,14 +1042,14 @@ static void KiRunAsyncFileIoSelfTest(void) {
|
||||
(MM_LOCKED_USER_BUFFER*)0,
|
||||
(MM_LOCKED_USER_BUFFER*)0,
|
||||
&readReq);
|
||||
if (s != STATUS_PENDING)
|
||||
if (s != NTLSTATUS_PENDING)
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "FILE/ASYNC selftest: submit returned %u\n", s);
|
||||
|
||||
s = KeWaitForEvent(st.CompletionEvent, 1);
|
||||
if (s != STATUS_SUCCESS && s != STATUS_KERNEL_APC)
|
||||
if (s != NTLSTATUS_SUCCESS && s != NTLSTATUS_KERNEL_APC)
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "FILE/ASYNC selftest: wait returned %u\n", s);
|
||||
|
||||
if (st.Iosb.Status == STATUS_PENDING) {
|
||||
if (st.Iosb.Status == NTLSTATUS_PENDING) {
|
||||
s = KeWaitForEvent(st.CompletionEvent, 0);
|
||||
if (!KSUCCESS(s))
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "FILE/ASYNC selftest: final event wait returned %u\n", s);
|
||||
@@ -1088,7 +1088,7 @@ static void KiRunAsyncFileIoSelfTest(void) {
|
||||
size_t got = 0;
|
||||
|
||||
memset(verify, 0, sizeof(verify));
|
||||
wiosb.Status = STATUS_FAILURE;
|
||||
wiosb.Status = NTLSTATUS_FAILURE;
|
||||
wiosb.Information = 0;
|
||||
|
||||
(void)IoDeleteFile(SYS_SV_LITERAL("asyncio.tmp"));
|
||||
@@ -1114,7 +1114,7 @@ static void KiRunAsyncFileIoSelfTest(void) {
|
||||
(MM_LOCKED_USER_BUFFER*)0,
|
||||
(MM_LOCKED_USER_BUFFER*)0,
|
||||
&writeReq);
|
||||
if (s != STATUS_PENDING)
|
||||
if (s != NTLSTATUS_PENDING)
|
||||
KePanic(KE_PANIC_CODE_SELFTEST, "FILE/ASYNC selftest: write submit returned %u\n", s);
|
||||
|
||||
s = KeWaitForEvent(wev, 1);
|
||||
|
||||
Reference in new issue
Block a user