[NDK][NTOS] Change Object callback types to NT6 style

This is required to support the NT6 access flags THREAD_QUERY_LIMITED_INFORMATION and THREAD_SET_LIMITED_INFORMATION.
This commit is contained in:
Timo Kreuzer
2026-07-28 12:16:32 +00:00
parent 9675f756ce
commit 07217d3245
12 changed files with 49 additions and 23 deletions
+2 -1
View File
@@ -265,7 +265,8 @@ CmpSecurityMethod(IN PVOID ObjectBody,
IN OUT PULONG BufferLength,
IN OUT PSECURITY_DESCRIPTOR *OldSecurityDescriptor,
IN POOL_TYPE PoolType,
IN PGENERIC_MAPPING GenericMapping)
IN PGENERIC_MAPPING GenericMapping,
IN KPROCESSOR_MODE AccessMode)
{
PCM_KEY_CONTROL_BLOCK Kcb;
NTSTATUS Status = STATUS_SUCCESS;
+12 -2
View File
@@ -47,6 +47,7 @@ PKWIN32_SESSION_CALLOUT ExpDesktopObjectClose = NULL;
/* FUNCTIONS ****************************************************************/
static
NTSTATUS
NTAPI
ExpWin32SessionCallout(
@@ -108,6 +109,7 @@ ExpWin32SessionCallout(
return Status;
}
static
BOOLEAN
NTAPI
ExpDesktopOkToClose( IN PEPROCESS Process OPTIONAL,
@@ -130,6 +132,7 @@ ExpDesktopOkToClose( IN PEPROCESS Process OPTIONAL,
return NT_SUCCESS(Status);
}
static
BOOLEAN
NTAPI
ExpWindowStationOkToClose( IN PEPROCESS Process OPTIONAL,
@@ -152,6 +155,7 @@ ExpWindowStationOkToClose( IN PEPROCESS Process OPTIONAL,
return NT_SUCCESS(Status);
}
static
VOID
NTAPI
ExpWinStaObjectDelete(PVOID DeletedObject)
@@ -166,6 +170,7 @@ ExpWinStaObjectDelete(PVOID DeletedObject)
&Parameters);
}
static
NTSTATUS
NTAPI
ExpWinStaObjectParse(IN PVOID ParseObject,
@@ -197,6 +202,8 @@ ExpWinStaObjectParse(IN PVOID ParseObject,
ExpWindowStationObjectParse,
&Parameters);
}
static
VOID
NTAPI
ExpDesktopDelete(PVOID DeletedObject)
@@ -211,12 +218,14 @@ ExpDesktopDelete(PVOID DeletedObject)
&Parameters);
}
static
NTSTATUS
NTAPI
ExpDesktopOpen(IN OB_OPEN_REASON Reason,
IN KPROCESSOR_MODE AccessMode,
IN PEPROCESS Process OPTIONAL,
IN PVOID ObjectBody,
IN ACCESS_MASK GrantedAccess,
IN PACCESS_MASK GrantedAccess,
IN ULONG HandleCount)
{
WIN32_OPENMETHOD_PARAMETERS Parameters;
@@ -224,7 +233,7 @@ ExpDesktopOpen(IN OB_OPEN_REASON Reason,
Parameters.OpenReason = Reason;
Parameters.Process = Process;
Parameters.Object = ObjectBody;
Parameters.GrantedAccess = GrantedAccess;
Parameters.GrantedAccess = *GrantedAccess;
Parameters.HandleCount = HandleCount;
return ExpWin32SessionCallout(ObjectBody,
@@ -232,6 +241,7 @@ ExpDesktopOpen(IN OB_OPEN_REASON Reason,
&Parameters);
}
static
VOID
NTAPI
ExpDesktopClose(IN PEPROCESS Process OPTIONAL,
+2 -1
View File
@@ -730,7 +730,8 @@ CmpSecurityMethod(
IN OUT PULONG CapturedLength,
IN OUT PSECURITY_DESCRIPTOR *ObjectSecurityDescriptor,
IN POOL_TYPE PoolType,
IN PGENERIC_MAPPING GenericMapping
IN PGENERIC_MAPPING GenericMapping,
IN KPROCESSOR_MODE AccessMode
);
NTSTATUS
+2 -1
View File
@@ -1193,7 +1193,8 @@ IopGetSetSecurityObject(
IN OUT PULONG BufferLength,
OUT PSECURITY_DESCRIPTOR *OldSecurityDescriptor,
IN POOL_TYPE PoolType,
IN OUT PGENERIC_MAPPING GenericMapping
IN OUT PGENERIC_MAPPING GenericMapping,
IN KPROCESSOR_MODE AccessMode
);
NTSTATUS
+2 -1
View File
@@ -517,7 +517,8 @@ SeDefaultObjectMethod(
_Inout_opt_ PULONG ReturnLength,
_Inout_opt_ PSECURITY_DESCRIPTOR *OldSecurityDescriptor,
_In_ POOL_TYPE PoolType,
_In_ PGENERIC_MAPPING GenericMapping);
_In_ PGENERIC_MAPPING GenericMapping,
_In_ KPROCESSOR_MODE AccessMode);
VOID
NTAPI
+2 -1
View File
@@ -1655,7 +1655,8 @@ IopGetSetSecurityObject(IN PVOID ObjectBody,
IN OUT PULONG BufferLength,
IN OUT PSECURITY_DESCRIPTOR *OldSecurityDescriptor,
IN POOL_TYPE PoolType,
IN OUT PGENERIC_MAPPING GenericMapping)
IN OUT PGENERIC_MAPPING GenericMapping,
IN KPROCESSOR_MODE AccessMode)
{
IO_STATUS_BLOCK IoStatusBlock;
PIO_STACK_LOCATION StackPtr;
+5 -5
View File
@@ -995,13 +995,12 @@ ObpIncrementHandleCount(IN PVOID Object,
{
/* Call it */
ObpCalloutStart(&CalloutIrql);
ACCESS_MASK GrantedAccess = AccessState ? AccessState->PreviouslyGrantedAccess : 0;
Status = ObjectType->TypeInfo.OpenProcedure(OpenReason,
ProbeMode,
Process,
Object,
AccessState ?
AccessState->
PreviouslyGrantedAccess :
0,
&GrantedAccess,
ProcessHandleCount);
ObpCalloutEnd(CalloutIrql, "Open", ObjectType, Object);
@@ -1223,9 +1222,10 @@ ObpIncrementUnnamedHandleCount(IN PVOID Object,
/* Call it */
ObpCalloutStart(&CalloutIrql);
Status = ObjectType->TypeInfo.OpenProcedure(ObCreateHandle,
AccessMode,
Process,
Object,
*DesiredAccess,
DesiredAccess,
ProcessHandleCount);
ObpCalloutEnd(CalloutIrql, "Open", ObjectType, Object);
+4 -2
View File
@@ -195,7 +195,8 @@ ObpDeleteObject(IN PVOID Object,
NULL,
&Header->SecurityDescriptor,
0,
NULL);
NULL,
ExGetPreviousMode());
ObpCalloutEnd(CalloutIrql, "Security", ObjectType, Object);
}
@@ -1706,7 +1707,8 @@ NtQueryObject(IN HANDLE ObjectHandle,
&BasicInfo->SecurityDescriptorSize,
&ObjectHeader->SecurityDescriptor,
ObjectType->TypeInfo.PoolType,
&ObjectType->TypeInfo.GenericMapping);
&ObjectType->TypeInfo.GenericMapping,
ExGetPreviousMode());
}
/* Break out with success */
+10 -5
View File
@@ -576,7 +576,8 @@ ObAssignSecurity(IN PACCESS_STATE AccessState,
NULL,
NULL,
PagedPool,
&Type->TypeInfo.GenericMapping);
&Type->TypeInfo.GenericMapping,
ExGetPreviousMode());
ObpCalloutEnd(CalloutIrql, "Security", Type, Object);
/* Check for failure and deassign security if so */
@@ -650,7 +651,8 @@ ObGetObjectSecurity(IN PVOID Object,
&Length,
&Header->SecurityDescriptor,
Type->TypeInfo.PoolType,
&Type->TypeInfo.GenericMapping);
&Type->TypeInfo.GenericMapping,
ExGetPreviousMode());
ObpCalloutEnd(CalloutIrql, "Security", Type, Object);
/* Check for failure */
@@ -672,7 +674,8 @@ ObGetObjectSecurity(IN PVOID Object,
&Length,
&Header->SecurityDescriptor,
Type->TypeInfo.PoolType,
&Type->TypeInfo.GenericMapping);
&Type->TypeInfo.GenericMapping,
ExGetPreviousMode());
ObpCalloutEnd(CalloutIrql, "Security", Type, Object);
/* Check for failure */
@@ -769,7 +772,8 @@ ObSetSecurityObjectByPointer(IN PVOID Object,
NULL,
&Header->SecurityDescriptor,
Type->TypeInfo.PoolType,
&Type->TypeInfo.GenericMapping);
&Type->TypeInfo.GenericMapping,
ExGetPreviousMode());
}
/*++
@@ -856,7 +860,8 @@ NtQuerySecurityObject(IN HANDLE Handle,
&Length,
&Header->SecurityDescriptor,
Type->TypeInfo.PoolType,
&Type->TypeInfo.GenericMapping);
&Type->TypeInfo.GenericMapping,
ExGetPreviousMode());
/* Dereference the object */
ObDereferenceObject(Object);
+2 -1
View File
@@ -356,7 +356,8 @@ SeDefaultObjectMethod(
_Inout_opt_ PULONG ReturnLength,
_Inout_ PSECURITY_DESCRIPTOR *OldSecurityDescriptor,
_In_ POOL_TYPE PoolType,
_In_ PGENERIC_MAPPING GenericMapping)
_In_ PGENERIC_MAPPING GenericMapping,
_In_ KPROCESSOR_MODE AccessMode)
{
PAGED_CODE();
+2 -1
View File
@@ -40,7 +40,8 @@ WmipSecurityMethod(
_Inout_ PULONG CapturedLength,
_Inout_ PSECURITY_DESCRIPTOR *ObjectSecurityDescriptor,
_In_ POOL_TYPE PoolType,
_In_ PGENERIC_MAPPING GenericMapping)
_In_ PGENERIC_MAPPING GenericMapping,
_In_ KPROCESSOR_MODE AccessMode)
{
PAGED_CODE();
+4 -2
View File
@@ -191,9 +191,10 @@ typedef VOID
typedef NTSTATUS
(NTAPI *OB_OPEN_METHOD)(
_In_ OB_OPEN_REASON Reason,
_In_ KPROCESSOR_MODE AccessMode,
_In_opt_ PEPROCESS Process,
_In_ PVOID ObjectBody,
_In_ ACCESS_MASK GrantedAccess,
_In_ PACCESS_MASK GrantedAccess,
_In_ ULONG HandleCount
);
@@ -234,7 +235,8 @@ typedef NTSTATUS
_Inout_ PULONG CapturedLength,
_Inout_ PSECURITY_DESCRIPTOR *ObjectSecurityDescriptor,
_In_ POOL_TYPE PoolType,
_In_ PGENERIC_MAPPING GenericMapping
_In_ PGENERIC_MAPPING GenericMapping,
_In_ KPROCESSOR_MODE AccessMode
);
typedef NTSTATUS