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
@@ -127,61 +127,61 @@ int main(void) {
|
||||
uint32_t currentPid = SysGetCurrentPid();
|
||||
uint32_t process = 0;
|
||||
uint32_t s = SysOpenProcess(currentPid, &process);
|
||||
if (s != STATUS_SUCCESS) fail_status("open current process", s);
|
||||
if (s != NTLSTATUS_SUCCESS) fail_status("open current process", s);
|
||||
|
||||
uint32_t queue = 0;
|
||||
s = SysCreateQueue(&queue);
|
||||
if (s != STATUS_SUCCESS) fail_status("create queue", s);
|
||||
if (s != NTLSTATUS_SUCCESS) fail_status("create queue", s);
|
||||
|
||||
uint32_t readOnly = 0;
|
||||
s = duplicate_handle(queue, process, SYS_HANDLE_RIGHT_READ, SYS_DUPLICATE_HANDLE_FLAG_NONE, &readOnly);
|
||||
if (s != STATUS_SUCCESS) fail_status("duplicate read-only", s);
|
||||
if (s != NTLSTATUS_SUCCESS) fail_status("duplicate read-only", s);
|
||||
|
||||
uint32_t writeOnly = 0;
|
||||
s = duplicate_handle(queue, process, SYS_HANDLE_RIGHT_WRITE, SYS_DUPLICATE_HANDLE_FLAG_NONE, &writeOnly);
|
||||
if (s != STATUS_SUCCESS) fail_status("duplicate write-only", s);
|
||||
if (s != NTLSTATUS_SUCCESS) fail_status("duplicate write-only", s);
|
||||
|
||||
uint32_t sameRights = 0;
|
||||
s = duplicate_handle(queue, process, 0, SYS_DUPLICATE_HANDLE_FLAG_SAME_RIGHTS, &sameRights);
|
||||
if (s != STATUS_SUCCESS) fail_status("duplicate same rights", s);
|
||||
if (s != NTLSTATUS_SUCCESS) fail_status("duplicate same rights", s);
|
||||
|
||||
s = send_message(readOnly, 10, 100);
|
||||
if (s == STATUS_SUCCESS) fail("read-only duplicate allowed send");
|
||||
if (s == NTLSTATUS_SUCCESS) fail("read-only duplicate allowed send");
|
||||
|
||||
TEST_QUEUE_MESSAGE msg;
|
||||
s = recv_message(writeOnly, &msg);
|
||||
if (s == STATUS_SUCCESS) fail("write-only duplicate allowed receive");
|
||||
if (s == NTLSTATUS_SUCCESS) fail("write-only duplicate allowed receive");
|
||||
|
||||
s = send_message(queue, 11, 101);
|
||||
if (s != STATUS_SUCCESS) fail_status("send original", s);
|
||||
if (s != NTLSTATUS_SUCCESS) fail_status("send original", s);
|
||||
s = recv_message(readOnly, &msg);
|
||||
if (s != STATUS_SUCCESS) fail_status("receive read-only", s);
|
||||
if (s != NTLSTATUS_SUCCESS) fail_status("receive read-only", s);
|
||||
check_message(&msg, 11, 101);
|
||||
|
||||
s = send_message(writeOnly, 12, 102);
|
||||
if (s != STATUS_SUCCESS) fail_status("send write-only", s);
|
||||
if (s != NTLSTATUS_SUCCESS) fail_status("send write-only", s);
|
||||
s = recv_message(queue, &msg);
|
||||
if (s != STATUS_SUCCESS) fail_status("receive original", s);
|
||||
if (s != NTLSTATUS_SUCCESS) fail_status("receive original", s);
|
||||
check_message(&msg, 12, 102);
|
||||
|
||||
s = send_message(sameRights, 13, 103);
|
||||
if (s != STATUS_SUCCESS) fail_status("send same-rights", s);
|
||||
if (s != NTLSTATUS_SUCCESS) fail_status("send same-rights", s);
|
||||
s = recv_message(sameRights, &msg);
|
||||
if (s != STATUS_SUCCESS) fail_status("receive same-rights", s);
|
||||
if (s != NTLSTATUS_SUCCESS) fail_status("receive same-rights", s);
|
||||
check_message(&msg, 13, 103);
|
||||
|
||||
uint32_t ignored = 0;
|
||||
s = duplicate_handle(readOnly, process, SYS_HANDLE_RIGHT_READ, SYS_DUPLICATE_HANDLE_FLAG_NONE, &ignored);
|
||||
expect_status("duplicate non-duplicable handle", s, STATUS_ACCESS_DENIED);
|
||||
expect_status("duplicate non-duplicable handle", s, NTLSTATUS_ACCESS_DENIED);
|
||||
|
||||
s = duplicate_handle(queue, process, SYS_HANDLE_RIGHT_READ | 0x80000000u, SYS_DUPLICATE_HANDLE_FLAG_NONE, &ignored);
|
||||
expect_status("duplicate unknown rights", s, STATUS_INVALID_PARAMETER);
|
||||
expect_status("duplicate unknown rights", s, NTLSTATUS_INVALID_PARAMETER);
|
||||
|
||||
s = duplicate_handle(queue, process, SYS_HANDLE_RIGHT_READ, SYS_DUPLICATE_HANDLE_FLAG_SAME_RIGHTS, &ignored);
|
||||
expect_status("duplicate same-rights with desired rights", s, STATUS_INVALID_PARAMETER);
|
||||
expect_status("duplicate same-rights with desired rights", s, NTLSTATUS_INVALID_PARAMETER);
|
||||
|
||||
s = duplicate_handle(queue, process, 0, SYS_DUPLICATE_HANDLE_FLAG_NONE, &ignored);
|
||||
expect_status("duplicate zero rights", s, STATUS_INVALID_PARAMETER);
|
||||
expect_status("duplicate zero rights", s, NTLSTATUS_INVALID_PARAMETER);
|
||||
|
||||
SYS_DUPLICATE_HANDLE_REQUEST badOut = {
|
||||
queue,
|
||||
@@ -191,7 +191,7 @@ int main(void) {
|
||||
0,
|
||||
};
|
||||
s = SysDuplicateHandle(&badOut);
|
||||
expect_status("duplicate null output", s, STATUS_INVALID_PARAMETER);
|
||||
expect_status("duplicate null output", s, NTLSTATUS_INVALID_PARAMETER);
|
||||
|
||||
SysCloseHandle(sameRights);
|
||||
SysCloseHandle(writeOnly);
|
||||
|
||||
Reference in new issue
Block a user