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:
1 parent
c0ad63c27f
commit
d36f19509c
160 files changed
+6563
-7366
No files matched your search
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user