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
@@ -17,20 +17,15 @@ static void KiSecurityContextDestroy(OBJECT* object) {
|
||||
// Allocates and initializes one immutable security context object.
|
||||
static KSTATUS KiCreateSecurityContext(SYS_PRIVILEGES effectivePrivileges,
|
||||
SYS_PRIVILEGES delegablePrivileges,
|
||||
SYS_SERVICE_CLAIMS serviceClaims,
|
||||
SYS_SERVICE_CLAIMS delegableServiceClaims,
|
||||
SECURITY_CONTEXT** contextOut) {
|
||||
if (!contextOut)
|
||||
return NTLSTATUS_INVALID_PARAMETER;
|
||||
*contextOut = (SECURITY_CONTEXT*)0;
|
||||
|
||||
if ((effectivePrivileges & ~SYS_PRIV_ALL) != 0 ||
|
||||
(delegablePrivileges & ~SYS_PRIV_ALL) != 0 ||
|
||||
(serviceClaims & ~SYS_SERVICE_CLAIM_ALL) != 0 ||
|
||||
(delegableServiceClaims & ~SYS_SERVICE_CLAIM_ALL) != 0)
|
||||
(delegablePrivileges & ~SYS_PRIV_ALL) != 0)
|
||||
return NTLSTATUS_INVALID_PARAMETER;
|
||||
if ((delegablePrivileges & ~effectivePrivileges) != 0 ||
|
||||
(delegableServiceClaims & ~serviceClaims) != 0)
|
||||
if ((delegablePrivileges & ~effectivePrivileges) != 0)
|
||||
return NTLSTATUS_ACCESS_DENIED;
|
||||
|
||||
SECURITY_CONTEXT* context = (SECURITY_CONTEXT*)ObAllocateObject(ObjectTypeSecurityContext,
|
||||
@@ -47,8 +42,6 @@ static KSTATUS KiCreateSecurityContext(SYS_PRIVILEGES effectivePrivileges,
|
||||
|
||||
context->EffectivePrivileges = effectivePrivileges;
|
||||
context->DelegablePrivileges = delegablePrivileges;
|
||||
context->ServiceClaims = serviceClaims;
|
||||
context->DelegableServiceClaims = delegableServiceClaims;
|
||||
context->Flags = SYS_SECURITY_CONTEXT_FLAG_NONE;
|
||||
*contextOut = context;
|
||||
return NTLSTATUS_SUCCESS;
|
||||
@@ -62,8 +55,6 @@ KSTATUS SeInitializeSecurity(void) {
|
||||
SECURITY_CONTEXT* context = (SECURITY_CONTEXT*)0;
|
||||
KSTATUS status = KiCreateSecurityContext(SYS_PRIV_ALL,
|
||||
SYS_PRIV_ALL,
|
||||
SYS_SERVICE_CLAIM_ALL,
|
||||
SYS_SERVICE_CLAIM_ALL,
|
||||
&context);
|
||||
if (!KSUCCESS(status))
|
||||
return status;
|
||||
@@ -81,22 +72,16 @@ SECURITY_CONTEXT* SeGetRootSecurityContext(void) {
|
||||
KSTATUS SeDeriveSecurityContext(SECURITY_CONTEXT* source,
|
||||
SYS_PRIVILEGES effectivePrivileges,
|
||||
SYS_PRIVILEGES delegablePrivileges,
|
||||
SYS_SERVICE_CLAIMS serviceClaims,
|
||||
SYS_SERVICE_CLAIMS delegableServiceClaims,
|
||||
SECURITY_CONTEXT** contextOut) {
|
||||
if (!source || !contextOut)
|
||||
return NTLSTATUS_INVALID_PARAMETER;
|
||||
|
||||
if ((effectivePrivileges & ~source->DelegablePrivileges) != 0 ||
|
||||
(delegablePrivileges & ~source->DelegablePrivileges) != 0 ||
|
||||
(serviceClaims & ~source->DelegableServiceClaims) != 0 ||
|
||||
(delegableServiceClaims & ~source->DelegableServiceClaims) != 0)
|
||||
(delegablePrivileges & ~source->DelegablePrivileges) != 0)
|
||||
return NTLSTATUS_ACCESS_DENIED;
|
||||
|
||||
return KiCreateSecurityContext(effectivePrivileges,
|
||||
delegablePrivileges,
|
||||
serviceClaims,
|
||||
delegableServiceClaims,
|
||||
contextOut);
|
||||
}
|
||||
|
||||
@@ -107,13 +92,6 @@ bool SeProcessHasPrivilege(const struct PROCESS* process, SYS_PRIVILEGES privile
|
||||
return (process->SecurityContext->EffectivePrivileges & privileges) == privileges;
|
||||
}
|
||||
|
||||
// Tests one security context's effective service-claim mask.
|
||||
bool SeContextHasServiceClaims(const SECURITY_CONTEXT* context, SYS_SERVICE_CLAIMS claims) {
|
||||
if (!context)
|
||||
return false;
|
||||
return (context->ServiceClaims & claims) == claims;
|
||||
}
|
||||
|
||||
// Exports immutable context metadata to one public structure.
|
||||
void SeQuerySecurityContext(const SECURITY_CONTEXT* context, SYS_SECURITY_CONTEXT_INFO* infoOut) {
|
||||
if (!context || !infoOut)
|
||||
@@ -124,7 +102,5 @@ void SeQuerySecurityContext(const SECURITY_CONTEXT* context, SYS_SECURITY_CONTEX
|
||||
infoOut->SecurityId = context->SecurityId;
|
||||
infoOut->EffectivePrivileges = context->EffectivePrivileges;
|
||||
infoOut->DelegablePrivileges = context->DelegablePrivileges;
|
||||
infoOut->ServiceClaims = context->ServiceClaims;
|
||||
infoOut->DelegableServiceClaims = context->DelegableServiceClaims;
|
||||
infoOut->Flags = context->Flags;
|
||||
}
|
||||
Reference in new issue
Block a user