Geoff Chappell - Software Analyst
SKETCH OF HOW RESEARCH MIGHT CONTINUE AND RESULTS BE PRESENTED
The OB_SECURITY_METHOD type is a pointer to a routine that can be defined for all objects of the same type. It is specified as the SecurityProcedure member of the OBJECT_TYPE_INITIALIZER structure when creating the object type. It is then retained in this structure as nested into the OBJECT_TYPE structure.
The modern declaration dates from version 6.0:
typedef NTSTATUS (*OB_SECURITY_METHOD) ( PVOID Object, SECURITY_OPERATION_CODE OperationCode, SECURITY_INFORMATION *SecurityInformation, PSECURITY_DESCRIPTOR SecurityDescriptor, ULONG *CapturedLength, PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor, POOL_TYPE PoolType, GENERIC_MAPPING *GenericMapping, KPROCESSOR_MODE Mode);
in versions 5.1 to 5.2, the function has one fewer argument:
typedef NTSTATUS (*OB_SECURITY_METHOD) ( PVOID Object, SECURITY_OPERATION_CODE OperationCode, SECURITY_INFORMATION *SecurityInformation, PSECURITY_DESCRIPTOR SecurityDescriptor, ULONG *CapturedLength, PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor, POOL_TYPE PoolType, GENERIC_MAPPING *GenericMapping);
in earlier versions, two of the arguments are not yet defined formally as enumerations:
typedef NTSTATUS (*OB_SECURITY_METHOD) ( PVOID Object, INT OperationCode, SECURITY_INFORMATION *SecurityInformation, PSECURITY_DESCRIPTOR SecurityDescriptor, ULONG *CapturedLength, PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor, INT PoolType, GENERIC_MAPPING *GenericMapping);