replace ad hoc driver loading with a proper driver manager, new DDK, new PnP manager with device matching, asynchronous startup, resource ownership and removal, add shared PCI capability helpers, replace typed, rigid services with a proper service manager, implement proper system shutdown and restart, shutting down unloads drivers and shuts down services, add simple power button, remove heavyweight boot self-tests and SMP stress runs, add monotonic timestamps to kernel debug output, fruitless USB and PS/2 fixes, make test builds opt in.

This commit is contained in:
maksw committed 2026-10-26 10:08:03 +01:00
1 parent c0ad63c27f
commit d36f19509c
160 files changed
+6563 -7366

No files matched your search

+18 -7
View File
@@ -1682,8 +1682,7 @@ static KSTATUS PosixsrvValidateSecurity(void) {
security.Size = sizeof(security);
KSTATUS status = SysQuerySecurityContext(SYS_SECURITY_CONTEXT_CURRENT, &security);
if (!KSUCCESS(status)) return status;
if (security.EffectivePrivileges != 0 || security.DelegablePrivileges != 0 ||
security.ServiceClaims != 0 || security.DelegableServiceClaims != 0)
if (security.EffectivePrivileges != 0 || security.DelegablePrivileges != 0)
return NTLSTATUS_ACCESS_DENIED;
return NTLSTATUS_SUCCESS;
}
@@ -5081,11 +5080,12 @@ static KSTATUS PosixsrvSendReady(SYS_HANDLE controlEndpoint, SYS_HANDLE publicLi
message.Operation = NTL_SERVICE_CONTROL_READY;
message.ExportCount = 1u;
message.Status = NTLSTATUS_SUCCESS;
if (!NtlServiceControlNameExport(&message, 0u, "public")) return NTLSTATUS_FAILURE;
SYS_PORT_HANDLE_TRANSFER transfer;
memset(&transfer, 0, sizeof(transfer));
transfer.Handle = publicListener;
transfer.DesiredRights = SYS_RIGHT_TRANSFER | SYS_RIGHT_QUERY | SYS_PORT_RIGHT_CONNECT;
transfer.DesiredRights = SYS_RIGHT_DUPLICATE | SYS_RIGHT_TRANSFER | SYS_RIGHT_QUERY | SYS_PORT_RIGHT_CONNECT;
transfer.Flags = SYS_PORT_TRANSFER_FLAG_NONE;
SYS_SEND_PORT_REQUEST send;
@@ -5122,8 +5122,7 @@ static void PosixsrvControlLoop(SYS_HANDLE endpoint) {
if (status == NTLSTATUS_PORT_DISCONNECTED || !KSUCCESS(status)) return;
if (info.Type != SYS_PORT_MESSAGE_NOTIFICATION || info.HandleCount != 0 ||
info.PayloadLength != sizeof(message) || message.Size != sizeof(message) ||
message.Version != NTL_SERVICE_CONTROL_VERSION || message.ExportCount != 0 ||
message.Reserved[0] != 0 || message.Reserved[1] != 0 || message.Reserved[2] != 0)
!NtlServiceControlValid(&message, NTL_SERVICE_CONTROL_STOP, 0u))
continue;
if (message.Operation == NTL_SERVICE_CONTROL_STOP) return;
}
@@ -5141,8 +5140,9 @@ void _start(void) {
status = SysCreateMutex(&gProcessRegistryMutex);
if (!KSUCCESS(status)) PosixsrvExit(3);
SYS_HANDLE controlListener = SysGetStartupCapability(SYS_STARTUP_CAP_SERVICE_CONTROL);
if (controlListener == SYS_HANDLE_INVALID) PosixsrvExit(4);
SYS_HANDLE controlListener = SysGetStartupCapability("service.control");
SYS_HANDLE publicationListener = SysGetStartupCapability("rssrv.posix-publisher");
if (controlListener == SYS_HANDLE_INVALID || publicationListener == SYS_HANDLE_INVALID) PosixsrvExit(4);
SYS_HANDLE publicListener = SYS_HANDLE_INVALID;
status = PosixsrvCreateListener(&publicListener);
@@ -5163,10 +5163,21 @@ void _start(void) {
status = SysCreateThread(&create);
if (!KSUCCESS(status)) PosixsrvExit(7);
SYS_HANDLE publication = SYS_HANDLE_INVALID;
status = NtlResourceConnectListener(publicationListener, &publication);
(void)SysCloseHandle(publicationListener);
if (!KSUCCESS(status)) PosixsrvExit(8);
status = NtlResourceBind(publication, SYS_SV_LITERAL(NTL_POSIX_SERVICE_PATH),
NTL_RESOURCE_KIND_CAPABILITY, publicListener,
SYS_RIGHT_TRANSFER | SYS_RIGHT_QUERY | SYS_PORT_RIGHT_CONNECT,
SYS_RIGHT_QUERY | SYS_PORT_RIGHT_CONNECT);
if (!KSUCCESS(status)) PosixsrvExit(8);
status = PosixsrvSendReady(controlEndpoint, publicListener);
if (!KSUCCESS(status)) PosixsrvExit(8);
PosixsrvControlLoop(controlEndpoint);
(void)NtlResourceUnbind(publication, SYS_SV_LITERAL(NTL_POSIX_SERVICE_PATH));
(void)NtlResourceClose(publication);
(void)SysDisconnectPort(controlEndpoint);
(void)SysCloseHandle(controlEndpoint);
(void)SysCloseHandle(publicListener);